Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1ryki8-000IdX-E3 for pgsql-hackers@arkaria.postgresql.org; Mon, 22 Apr 2024 03:51:21 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1ryki3-00HFky-L0 for pgsql-hackers@arkaria.postgresql.org; Mon, 22 Apr 2024 03:51:15 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1ryki3-00HFkl-4I for pgsql-hackers@lists.postgresql.org; Mon, 22 Apr 2024 03:51:15 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1ryki0-002Gpo-0l for pgsql-hackers@lists.postgresql.org; Mon, 22 Apr 2024 03:51:14 +0000 Received: from [172.20.10.6] (ppp-49-237-6-208.revip6.asianet.co.th [49.237.6.208]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) (Authenticated sender: a.lepikhov@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id 8065FE20E6D; Mon, 22 Apr 2024 06:51:06 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1713757869; bh=TK3FFe5ZsZReUPLMfNcGxTgegxaJdgLptDbAbTaKwPM=; h=Message-ID:Date:User-Agent:Subject:To:Cc:References:From: In-Reply-To:From; b=QUz4pJTNwOLTN4epx8MXgJdgmyZOiTcxgHXpnld4oLGJdFm2y3aMN3H211jyXCqRi 4A7RCAb4HK4fXziNLNtCR/J1LyAHGqw/NgW6QMjAGSoAC2vSj5iq3187+EujVusH8t NtTiLnFENEZq4oBqbABDOseriQHUg8yeWr/aNJloUypWhCjx2RH7/sUrFdWxeA6MeM ybozL7kHxVKjwnitYj9epgx3/Ho9AQoBiXDZcoAr8F9vwiydhbjfGs1IaGzA1hbioZ VWxdfYhhbDAsUm9s+JZorPXM7Few1MzmuHSNqK6ZohIEvJiXQyPgu8Fk6kWEMd2ot+ ng25gcQHtXPFA== Content-Type: multipart/mixed; boundary="------------MwEQVOmhf4S3xJobdWHMkeQ9" Message-ID: <7a338db0-df0d-4e2e-ba29-abf4893f41e8@postgrespro.ru> Date: Mon, 22 Apr 2024 10:51:02 +0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: POC: GROUP BY optimization To: Tom Lane , Alexander Korotkov Cc: Richard Guo , Pavel Borisov , vignesh C , PostgreSQL Developers , Tomas Vondra , Teodor Sigaev , David Rowley , "a.rybakina" References: <3046975.1706839355@sss.pgh.pa.us> <890ed877-e2c0-448a-93b8-b07ccf3a2b37@postgrespro.ru> <266850.1712879082@sss.pgh.pa.us> Content-Language: en-AU From: Andrei Lepikhov Organization: Postgres Professional In-Reply-To: <266850.1712879082@sss.pgh.pa.us> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------MwEQVOmhf4S3xJobdWHMkeQ9 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 4/12/24 06:44, Tom Lane wrote: > If this patch were producing better results I'd be more excited > about putting more work into it. But on the basis of what I'm > seeing right now, I think maybe we ought to give up on it. Let me show current cases where users have a profit with this tiny improvement (see queries and execution results in query.sql): 1. 'Not optimised query text' — when we didn't consider group-by ordering during database development. 2. 'Accidental pathkeys' - we didn't see any explicit orderings, but accidentally, the planner used merge join that caused some orderings and we can utilise it. 3. 'Uncertain scan path' — We have options regarding which index to use, and because of that, we can't predict the optimal group-by ordering before the start of query planning. 4. 'HashAgg V/S GroupAgg' — sometimes, the GroupAgg strategy outperforms HashAgg just because we don't need any ordering procedure at all. And the last thing here — this code introduces the basics needed to add more sophisticated strategies, like ordering according to uniqueness or preferring to set constant-width columns first in grouping. -- regards, Andrei Lepikhov Postgres Professional --------------MwEQVOmhf4S3xJobdWHMkeQ9 Content-Type: application/sql; name="query.sql" Content-Disposition: attachment; filename="query.sql" Content-Transfer-Encoding: base64 RFJPUCBUQUJMRSBJRiBFWElTVFMgdGVzdCBDQVNDQURFOwpDUkVBVEUgVEFCTEUgdGVzdChm aXJzdG5hbWUgdGV4dCwgbGFzdG5hbWUgdGV4dCwgYWRkcmVzcyB0ZXh0LCBhZ2UgaW50ZWdl cik7CklOU0VSVCBJTlRPIHRlc3QgKFNFTEVDVCAocmFuZG9tKCkqMTAwIHx8ICdfZm5hbWUn KTo6dGV4dCwKICAocmFuZG9tKCkqMTAwMCB8fCAnX2xuYW1lJyk6OnRleHQsCiAgKHJhbmRv bSgpKjEwMCB8fCAnX3ppcCcgfHwgcmFuZG9tKCkqMTAwMCB8fCAnc3RyZWV0Jyk6OnRleHQs CiAgcmFuZG9tKCkqODA6OmludGVnZXIKRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxRTYpIEFT IGcpOwpDUkVBVEUgSU5ERVggdGVzdF9pZHggT04gdGVzdCAoYWRkcmVzcyxmaXJzdG5hbWUs bGFzdG5hbWUpOwpWQUNVVU0gQU5BTFlaRTsKClNFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19w ZXJfZ2F0aGVyID0gMDsKCi0tIENhc2UgMTogbm90LW9wdGltaXNlZCBxdWVyeQpTRVQgZW5h YmxlX2dyb3VwX2J5X3Jlb3JkZXJpbmcgPSBmOwpFWFBMQUlOIChDT1NUUyBPTiwgQU5BTFla RSkKU0VMRUNUIGZpcnN0bmFtZSxsYXN0bmFtZSxhZGRyZXNzLCBjb3VudChhZGRyZXNzKSBG Uk9NIHRlc3QKV0hFUkUgYWRkcmVzcyA8ICc1JwpHUk9VUCBCWSBmaXJzdG5hbWUsbGFzdG5h bWUsYWRkcmVzczsKU0VUIGVuYWJsZV9ncm91cF9ieV9yZW9yZGVyaW5nID0gdDsKRVhQTEFJ TiAoQ09TVFMgT04sIEFOQUxZWkUpClNFTEVDVCBmaXJzdG5hbWUsbGFzdG5hbWUsYWRkcmVz cywgY291bnQoYWRkcmVzcykgRlJPTSB0ZXN0CldIRVJFIGFkZHJlc3MgPCAnNScKR1JPVVAg QlkgZmlyc3RuYW1lLGxhc3RuYW1lLGFkZHJlc3M7CgotLSBDYXNlIDI6IEFjY2lkZW50YWwg cGF0aGtleXMgd2l0aCBNZXJnZUpvaW4gYWxsb3cgdG8gYXZvaWQgc29ydGluZwpTRVQgZW5h YmxlX2hhc2hqb2luID0gZjsKU0VUIGVuYWJsZV9ncm91cF9ieV9yZW9yZGVyaW5nID0gZjsK RVhQTEFJTiAoQ09TVFMgT04sIEFOQUxZWkUpClNFTEVDVCB0MS5sYXN0bmFtZSwgYXZnKHQx LmFnZSkgRlJPTSB0ZXN0IHQxLCB0ZXN0IHQyCldIRVJFIHQxLmFnZT10Mi5hZ2UgQU5EIHQx Lmxhc3RuYW1lID0gdDIubGFzdG5hbWUKR1JPVVAgQlkgdDEuZmlyc3RuYW1lLHQxLmFnZSx0 MS5sYXN0bmFtZTsKClNFVCBlbmFibGVfZ3JvdXBfYnlfcmVvcmRlcmluZyA9IHQ7CkVYUExB SU4gKENPU1RTIE9OLCBBTkFMWVpFKQpTRUxFQ1QgdDEubGFzdG5hbWUsIGF2Zyh0MS5hZ2Up IEZST00gdGVzdCB0MSwgdGVzdCB0MgpXSEVSRSB0MS5hZ2U9dDIuYWdlIEFORCB0MS5sYXN0 bmFtZSA9IHQyLmxhc3RuYW1lCkdST1VQIEJZIHQxLmZpcnN0bmFtZSx0MS5hZ2UsdDEubGFz dG5hbWU7ClJFU0VUIGVuYWJsZV9oYXNoam9pbjsKCgpDUkVBVEUgSU5ERVggdGVzdF9pZHgy IE9OIHRlc3QgKGFnZSxhZGRyZXNzKTsKQ1JFQVRFIElOREVYIHRlc3RfaWR4MyBPTiB0ZXN0 IChhZGRyZXNzLGFnZSk7ClZBQ1VVTSBBTkFMWVpFOwoKLS0gQ2FzZSAzOiBXZSBjYW4ndCBm aW5kIG9wdGltYWwgZ3JvdXAtYnkgb3JkZXIgYmVjYXVzZSBvZiBkaWZmZXJlbnQgc2NhbiBw YXRocyAob3Igd2UgY2FuJ3QgdXNlIG1vcmUgb3B0aW1hbCBpbmRleCkKU0VUIGVuYWJsZV9n cm91cF9ieV9yZW9yZGVyaW5nID0gZjsKRVhQTEFJTiAoQ09TVFMgT04sIEFOQUxZWkUpClNF TEVDVCBhZ2UsYWRkcmVzcywgY291bnQoYWRkcmVzcykgRlJPTSB0ZXN0CldIRVJFIGFkZHJl c3MgPCAnNCcgQU5EIGFnZSA+IDEwCkdST1VQIEJZIGFnZSxhZGRyZXNzOwoKU0VUIGVuYWJs ZV9ncm91cF9ieV9yZW9yZGVyaW5nID0gdDsKRVhQTEFJTiAoQ09TVFMgT04sIEFOQUxZWkUp ClNFTEVDVCBhZ2UsYWRkcmVzcywgY291bnQoYWRkcmVzcykgRlJPTSB0ZXN0CldIRVJFIGFk ZHJlc3MgPCAnNCcgQU5EIGFnZSA+IDEwCkdST1VQIEJZIGFnZSxhZGRyZXNzOwoKLS0gQ2Fz ZSA0OiBHcm91cEFnZyBzb21ldGltZXMgYmV0dGVyIHRoYW4gSGFzaEFnZwpTRVQgZW5hYmxl X2dyb3VwX2J5X3Jlb3JkZXJpbmcgPSBmOwpFWFBMQUlOIChDT1NUUyBPTiwgQU5BTFlaRSkK U0VMRUNUIGFnZSxhZGRyZXNzLCBjb3VudChhZGRyZXNzKSBGUk9NIHRlc3QKV0hFUkUgYWRk cmVzcyA8ICczJyBBTkQgYWdlID4gMTAKR1JPVVAgQlkgYWdlLGFkZHJlc3M7CgpTRVQgZW5h YmxlX2dyb3VwX2J5X3Jlb3JkZXJpbmcgPSB0OwpFWFBMQUlOIChDT1NUUyBPTiwgQU5BTFla RSkKU0VMRUNUIGFnZSxhZGRyZXNzLCBjb3VudChhZGRyZXNzKSBGUk9NIHRlc3QKV0hFUkUg YWRkcmVzcyA8ICczJyBBTkQgYWdlID4gMTAKR1JPVVAgQlkgYWdlLGFkZHJlc3M7CgovKgot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KIEdyb3VwQWdncmVnYXRlICAoY29zdD05NDk4Ni4yMC4uMTA1MjYz LjI1IHJvd3M9NDU2NzU4IHdpZHRoPTEwMSkgKGFjdHVhbCB0aW1lPTEyMzEuNjgxLi4xNjI3 LjcwOCByb3dzPTQ1MDU4MiBsb29wcz0xKQogICBHcm91cCBLZXk6IGZpcnN0bmFtZSwgbGFz dG5hbWUsIGFkZHJlc3MKICAgLT4gIFNvcnQgIChjb3N0PTk0OTg2LjIwLi45NjEyOC4wOSBy b3dzPTQ1Njc1OCB3aWR0aD05MykgKGFjdHVhbCB0aW1lPTEyMzEuNjY2Li4xMzQ1LjQzNCBy b3dzPTQ1MDU4MiBsb29wcz0xKQogICAgICAgICBTb3J0IEtleTogZmlyc3RuYW1lLCBsYXN0 bmFtZSwgYWRkcmVzcwogICAgICAgICBTb3J0IE1ldGhvZDogZXh0ZXJuYWwgbWVyZ2UgIERp c2s6IDQ1OTYwa0IKICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlc3QgIChjb3N0PTAuMDAu LjI4NjMwLjAwIHJvd3M9NDU2NzU4IHdpZHRoPTkzKSAoYWN0dWFsIHRpbWU9MC4wMTEuLjIz MS4yNTMgcm93cz00NTA1ODIgbG9vcHM9MSkKICAgICAgICAgICAgICAgRmlsdGVyOiAoYWRk cmVzcyA8ICc1Jzo6dGV4dCkKICAgICAgICAgICAgICAgUm93cyBSZW1vdmVkIGJ5IEZpbHRl cjogNTQ5NDE4CiBQbGFubmluZyBUaW1lOiAwLjI0NCBtcwogRXhlY3V0aW9uIFRpbWU6IDE2 NDAuOTc4IG1zCigxMCByb3dzKQoKU0VUCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogR3JvdXBBZ2dyZWdhdGUgIChj b3N0PTAuNTUuLjQ0Njk2Ljk3IHJvd3M9NDU2NzU4IHdpZHRoPTEwMSkgKGFjdHVhbCB0aW1l PTAuMDYxLi40NTguNDgzIHJvd3M9NDUwNTgyIGxvb3BzPTEpCiAgIEdyb3VwIEtleTogYWRk cmVzcywgZmlyc3RuYW1lLCBsYXN0bmFtZQogICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5n IHRlc3RfaWR4IG9uIHRlc3QgIChjb3N0PTAuNTUuLjM1NTYxLjgyIHJvd3M9NDU2NzU4IHdp ZHRoPTkzKSAoYWN0dWFsIHRpbWU9MC4wNTIuLjE3My4wMDQgcm93cz00NTA1ODIgbG9vcHM9 MSkKICAgICAgICAgSW5kZXggQ29uZDogKGFkZHJlc3MgPCAnNSc6OnRleHQpCiAgICAgICAg IEhlYXAgRmV0Y2hlczogMAogUGxhbm5pbmcgVGltZTogMC4xNjEgbXMKIEV4ZWN1dGlvbiBU aW1lOiA0NjguNDQxIG1zCig3IHJvd3MpCgpTRVQKU0VUCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiBHcm91cEFnZ3JlZ2F0ZSAgKGNvc3Q9MzYyMzM0Ljk0Li4zNjI2NDYuMTcgcm93cz0x MjQ0OSB3aWR0aD04NCkgKGFjdHVhbCB0aW1lPTgyMDUuNjY4Li45ODU2LjIyMCByb3dzPTEw MDAwMDAgbG9vcHM9MSkKICAgR3JvdXAgS2V5OiB0MS5maXJzdG5hbWUsIHQxLmFnZSwgdDEu bGFzdG5hbWUKICAgLT4gIFNvcnQgIChjb3N0PTM2MjMzNC45NC4uMzYyMzY2LjA2IHJvd3M9 MTI0NDkgd2lkdGg9NTIpIChhY3R1YWwgdGltZT04MjA1LjY0OC4uODU0Mi44NjUgcm93cz0x MDAwMDAwIGxvb3BzPTEpCiAgICAgICAgIFNvcnQgS2V5OiB0MS5maXJzdG5hbWUsIHQxLmFn ZSwgdDEubGFzdG5hbWUKICAgICAgICAgU29ydCBNZXRob2Q6IGV4dGVybmFsIG1lcmdlICBE aXNrOiA2MjM1MmtCCiAgICAgICAgIC0+ICBNZXJnZSBKb2luICAoY29zdD0zNDM4NjMuNjku LjM2MTQ4OC4xOCByb3dzPTEyNDQ5IHdpZHRoPTUyKSAoYWN0dWFsIHRpbWU9NDMzNS41NDEu LjU5MTMuNjg1IHJvd3M9MTAwMDAwMCBsb29wcz0xKQogICAgICAgICAgICAgICBNZXJnZSBD b25kOiAoKHQxLmFnZSA9IHQyLmFnZSkgQU5EICh0MS5sYXN0bmFtZSA9IHQyLmxhc3RuYW1l KSkKICAgICAgICAgICAgICAgLT4gIFNvcnQgIChjb3N0PTE5NDE0OS44NC4uMTk2NjQ5Ljg0 IHJvd3M9MTAwMDAwMCB3aWR0aD01MikgKGFjdHVhbCB0aW1lPTIxODYuMjYzLi4yNDY5Ljc4 MyByb3dzPTEwMDAwMDAgbG9vcHM9MSkKICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6 IHQxLmFnZSwgdDEubGFzdG5hbWUKICAgICAgICAgICAgICAgICAgICAgU29ydCBNZXRob2Q6 IGV4dGVybmFsIG1lcmdlICBEaXNrOiA2MTkwNGtCCiAgICAgICAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiB0ZXN0IHQxICAoY29zdD0wLjAwLi4yNjEzMC4wMCByb3dzPTEwMDAw MDAgd2lkdGg9NTIpIChhY3R1YWwgdGltZT0wLjAyMy4uMTkxLjc4OCByb3dzPTEwMDAwMDAg bG9vcHM9MSkKICAgICAgICAgICAgICAgLT4gIE1hdGVyaWFsaXplICAoY29zdD0xNDk3MTMu ODQuLjE1NDcxMy44NCByb3dzPTEwMDAwMDAgd2lkdGg9MjgpIChhY3R1YWwgdGltZT0yMTQ5 LjI2Ni4uMjYxMi4xNjEgcm93cz0xMDAwMDAwIGxvb3BzPTEpCiAgICAgICAgICAgICAgICAg ICAgIC0+ICBTb3J0ICAoY29zdD0xNDk3MTMuODQuLjE1MjIxMy44NCByb3dzPTEwMDAwMDAg d2lkdGg9MjgpIChhY3R1YWwgdGltZT0yMTQ5LjI2MC4uMjQwOC4yOTAgcm93cz0xMDAwMDAw IGxvb3BzPTEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiB0Mi5hZ2Us IHQyLmxhc3RuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgTWV0aG9kOiBl eHRlcm5hbCBtZXJnZSAgRGlzazogMzczNTJrQgogICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gdGVzdCB0MiAgKGNvc3Q9MC4wMC4uMjYxMzAuMDAgcm93cz0x MDAwMDAwIHdpZHRoPTI4KSAoYWN0dWFsIHRpbWU9MC4xMjQuLjE5NC4wNTQgcm93cz0xMDAw MDAwIGxvb3BzPTEpCiBQbGFubmluZyBUaW1lOiAwLjMxNiBtcwogRXhlY3V0aW9uIFRpbWU6 IDk5MTkuMjYwIG1zCigxOCByb3dzKQoKU0VUCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBH cm91cEFnZ3JlZ2F0ZSAgKGNvc3Q9MzQzODY1LjExLi4zNjIzMjguNDggcm93cz0xMjQ0OSB3 aWR0aD04NCkgKGFjdHVhbCB0aW1lPTQ3NzcuNDU1Li44MDAzLjAwNSByb3dzPTEwMDAwMDAg bG9vcHM9MSkKICAgR3JvdXAgS2V5OiB0MS5hZ2UsIHQxLmxhc3RuYW1lLCB0MS5maXJzdG5h bWUKICAgLT4gIEluY3JlbWVudGFsIFNvcnQgIChjb3N0PTM0Mzg2NS4xMS4uMzYyMDQ4LjM4 IHJvd3M9MTI0NDkgd2lkdGg9NTIpIChhY3R1YWwgdGltZT00Nzc3LjQ0Mi4uNjc4Ny41NTkg cm93cz0xMDAwMDAwIGxvb3BzPTEpCiAgICAgICAgIFNvcnQgS2V5OiB0MS5hZ2UsIHQxLmxh c3RuYW1lLCB0MS5maXJzdG5hbWUKICAgICAgICAgUHJlc29ydGVkIEtleTogdDEuYWdlLCB0 MS5sYXN0bmFtZQogICAgICAgICBGdWxsLXNvcnQgR3JvdXBzOiAzMTI1MCAgU29ydCBNZXRo b2Q6IHF1aWNrc29ydCAgQXZlcmFnZSBNZW1vcnk6IDI3a0IgIFBlYWsgTWVtb3J5OiAyN2tC CiAgICAgICAgIC0+ICBNZXJnZSBKb2luICAoY29zdD0zNDM4NjMuNjkuLjM2MTQ4OC4xOCBy b3dzPTEyNDQ5IHdpZHRoPTUyKSAoYWN0dWFsIHRpbWU9NDc3Ny4zNTUuLjYzNjUuNjcxIHJv d3M9MTAwMDAwMCBsb29wcz0xKQogICAgICAgICAgICAgICBNZXJnZSBDb25kOiAoKHQxLmFn ZSA9IHQyLmFnZSkgQU5EICh0MS5sYXN0bmFtZSA9IHQyLmxhc3RuYW1lKSkKICAgICAgICAg ICAgICAgLT4gIFNvcnQgIChjb3N0PTE5NDE0OS44NC4uMTk2NjQ5Ljg0IHJvd3M9MTAwMDAw MCB3aWR0aD01MikgKGFjdHVhbCB0aW1lPTI1ODEuODQ1Li4yODY2LjQwNyByb3dzPTEwMDAw MDAgbG9vcHM9MSkKICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQxLmFnZSwgdDEu bGFzdG5hbWUKICAgICAgICAgICAgICAgICAgICAgU29ydCBNZXRob2Q6IGV4dGVybmFsIG1l cmdlICBEaXNrOiA2MTkwNGtCCiAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biB0ZXN0IHQxICAoY29zdD0wLjAwLi4yNjEzMC4wMCByb3dzPTEwMDAwMDAgd2lkdGg9NTIp IChhY3R1YWwgdGltZT0wLjAzNS4uMjI3LjYyNyByb3dzPTEwMDAwMDAgbG9vcHM9MSkKICAg ICAgICAgICAgICAgLT4gIE1hdGVyaWFsaXplICAoY29zdD0xNDk3MTMuODQuLjE1NDcxMy44 NCByb3dzPTEwMDAwMDAgd2lkdGg9MjgpIChhY3R1YWwgdGltZT0yMTk1LjQ5Ny4uMjY2MC44 Mzkgcm93cz0xMDAwMDAwIGxvb3BzPTEpCiAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0 ICAoY29zdD0xNDk3MTMuODQuLjE1MjIxMy44NCByb3dzPTEwMDAwMDAgd2lkdGg9MjgpIChh Y3R1YWwgdGltZT0yMTk1LjQ5Mi4uMjQ1OC44MzYgcm93cz0xMDAwMDAwIGxvb3BzPTEpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiB0Mi5hZ2UsIHQyLmxhc3RuYW1l CiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgTWV0aG9kOiBleHRlcm5hbCBtZXJn ZSAgRGlzazogMzczNTJrQgogICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gdGVzdCB0MiAgKGNvc3Q9MC4wMC4uMjYxMzAuMDAgcm93cz0xMDAwMDAwIHdpZHRo PTI4KSAoYWN0dWFsIHRpbWU9MC4wNDkuLjE5My4zNjIgcm93cz0xMDAwMDAwIGxvb3BzPTEp CiBQbGFubmluZyBUaW1lOiAwLjMyMSBtcwogRXhlY3V0aW9uIFRpbWU6IDgwNTUuMTI4IG1z CigxOSByb3dzKQoKUkVTRVQKQ1JFQVRFIElOREVYCkNSRUFURSBJTkRFWApWQUNVVU0KU0VU CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiBHcm91cEFnZ3JlZ2F0ZSAgKGNvc3Q9MC41NS4uNDkwMzUuMzEgcm93 cz0yOTI0NTIgd2lkdGg9NTcpIChhY3R1YWwgdGltZT0wLjA0MC4uMzk1Ljg0OCByb3dzPTI5 NTkxMSBsb29wcz0xKQogICBHcm91cCBLZXk6IGFnZSwgYWRkcmVzcwogICAtPiAgSW5kZXgg T25seSBTY2FuIHVzaW5nIHRlc3RfaWR4MiBvbiB0ZXN0ICAoY29zdD0wLjU1Li40MzkxNy40 MCByb3dzPTI5MjQ1MiB3aWR0aD00OSkgKGFjdHVhbCB0aW1lPTAuMDMxLi4yNDkuMTM3IHJv d3M9Mjk1OTExIGxvb3BzPTEpCiAgICAgICAgIEluZGV4IENvbmQ6ICgoYWdlID4gMTApIEFO RCAoYWRkcmVzcyA8ICc0Jzo6dGV4dCkpCiAgICAgICAgIEhlYXAgRmV0Y2hlczogMAogUGxh bm5pbmcgVGltZTogMC4yMTUgbXMKIEV4ZWN1dGlvbiBUaW1lOiA0MDEuOTY3IG1zCig3IHJv d3MpCgpTRVQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KIEdyb3VwQWdncmVnYXRlICAoY29zdD0wLjU1Li4yMzky Ni41NiByb3dzPTI5MjQ1MiB3aWR0aD01NykgKGFjdHVhbCB0aW1lPTAuMDc2Li4yNzUuOTUz IHJvd3M9Mjk1OTExIGxvb3BzPTEpCiAgIEdyb3VwIEtleTogYWRkcmVzcywgYWdlCiAgIC0+ ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgdGVzdF9pZHgzIG9uIHRlc3QgIChjb3N0PTAuNTUu LjE4ODA4LjY1IHJvd3M9MjkyNDUyIHdpZHRoPTQ5KSAoYWN0dWFsIHRpbWU9MC4wNjkuLjEz Mi43OTAgcm93cz0yOTU5MTEgbG9vcHM9MSkKICAgICAgICAgSW5kZXggQ29uZDogKChhZGRy ZXNzIDwgJzQnOjp0ZXh0KSBBTkQgKGFnZSA+IDEwKSkKICAgICAgICAgSGVhcCBGZXRjaGVz OiAwCiBQbGFubmluZyBUaW1lOiAwLjE3MCBtcwogRXhlY3V0aW9uIFRpbWU6IDI4Mi4yMjcg bXMKKDcgcm93cykKClNFVAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEhhc2hBZ2dyZWdhdGUgIChjb3N0PTMzNDY1 LjU5Li4zOTI4MS4wMyByb3dzPTE5NjkyNSB3aWR0aD01NykgKGFjdHVhbCB0aW1lPTE4OC44 ODUuLjMxMy4xNDggcm93cz0yMDA1NzggbG9vcHM9MSkKICAgR3JvdXAgS2V5OiBhZ2UsIGFk ZHJlc3MKICAgUGxhbm5lZCBQYXJ0aXRpb25zOiA0ICBCYXRjaGVzOiAyMSAgTWVtb3J5IFVz YWdlOiA4MjQ5a0IgIERpc2sgVXNhZ2U6IDExODgwa0IKICAgLT4gIEluZGV4IE9ubHkgU2Nh biB1c2luZyB0ZXN0X2lkeDMgb24gdGVzdCAgKGNvc3Q9MC41NS4uMTI2NjUuMzkgcm93cz0x OTY5MjUgd2lkdGg9NDkpIChhY3R1YWwgdGltZT0wLjA0NC4uODQuOTgyIHJvd3M9MjAwNTc4 IGxvb3BzPTEpCiAgICAgICAgIEluZGV4IENvbmQ6ICgoYWRkcmVzcyA8ICczJzo6dGV4dCkg QU5EIChhZ2UgPiAxMCkpCiAgICAgICAgIEhlYXAgRmV0Y2hlczogMAogUGxhbm5pbmcgVGlt ZTogMC4xODIgbXMKIEV4ZWN1dGlvbiBUaW1lOiAzMTguNDU1IG1zCig4IHJvd3MpCgpTRVQK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiBHcm91cEFnZ3JlZ2F0ZSAgKGNvc3Q9MC41NS4uMTYxMTEuNTggcm93cz0x OTY5MjUgd2lkdGg9NTcpIChhY3R1YWwgdGltZT0wLjA1MC4uMTc3LjQ1MiByb3dzPTIwMDU3 OCBsb29wcz0xKQogICBHcm91cCBLZXk6IGFkZHJlc3MsIGFnZQogICAtPiAgSW5kZXggT25s eSBTY2FuIHVzaW5nIHRlc3RfaWR4MyBvbiB0ZXN0ICAoY29zdD0wLjU1Li4xMjY2NS4zOSBy b3dzPTE5NjkyNSB3aWR0aD00OSkgKGFjdHVhbCB0aW1lPTAuMDQyLi44MC43NDAgcm93cz0y MDA1NzggbG9vcHM9MSkKICAgICAgICAgSW5kZXggQ29uZDogKChhZGRyZXNzIDwgJzMnOjp0 ZXh0KSBBTkQgKGFnZSA+IDEwKSkKICAgICAgICAgSGVhcCBGZXRjaGVzOiAwCiBQbGFubmlu ZyBUaW1lOiAwLjE4MSBtcwogRXhlY3V0aW9uIFRpbWU6IDE4MS42NzMgbXMKKDcgcm93cykK CiAqLwo= --------------MwEQVOmhf4S3xJobdWHMkeQ9--