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 1rwbrL-002vh6-MM for pgsql-hackers@arkaria.postgresql.org; Tue, 16 Apr 2024 06:00:01 +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 1rwbrK-0018GT-1V for pgsql-hackers@arkaria.postgresql.org; Tue, 16 Apr 2024 05:59:58 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rwbrJ-0018GL-9U for pgsql-hackers@lists.postgresql.org; Tue, 16 Apr 2024 05:59:57 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rwbrA-0035L3-O7 for pgsql-hackers@lists.postgresql.org; Tue, 16 Apr 2024 05:59:55 +0000 Received: from [10.10.20.179] (node-633.pool-101-109.dynamic.totinternet.net [101.109.30.207]) (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 6D75FE20E8F; Tue, 16 Apr 2024 08:59:41 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1713247184; bh=aVSquUJfgZcYzrgrYnHDc9SQdrbAGWH5E/9hO9WrYEA=; h=Message-ID:Date:User-Agent:Subject:To:Cc:References:From: In-Reply-To:From; b=PIeBoVrH+jVSXQUN19zCAdARpi59XRjawv0u8JyP74tgLtnKCICDJMotS9VDmAmS1 WTNwpgKJFO+pyeZhjLpZnyzsQHQJOmTXhhXl9A1GS0Wsf+HXhXKOBUL0IEKAreKnfB kZtJoFCBz+NNuAYCM3jh+fewYft7aQHAffuVXklIv9ojOSCro5Om2ehApxQPrGwk+b 6lxtXDuz+w9oyo/F2BOQ4juf2jGWmZPTp2KjgO2PkzwPQpnopIqfnw1yEuLYPh5oV8 o8qz396lu5EnEJxefLePrlYRZQKscntWOXtnW7pCsDQV3y5wi94kW4giu6O3SU1gIM yYYKSzddfQLqg== Content-Type: multipart/mixed; boundary="------------y9PdxtTwf00iZUJPH5fR3cFP" Message-ID: <17037754-f187-4138-8285-0e2bfebd0dea@postgrespro.ru> Date: Tue, 16 Apr 2024 12:59:35 +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. --------------y9PdxtTwf00iZUJPH5fR3cFP Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 4/12/24 06:44, Tom Lane wrote: > * The very first hunk causes get_eclass_for_sort_expr to have > side-effects on existing EquivalenceClass data structures. > What is the argument that that's not going to cause problems? > At the very least it introduces asymmetry, in that the first > caller wins the chance to change the EC's ec_sortref and later > callers won't be able to. Let me resolve issues bit by bit. Addressing your first note, 'asymmetry,' I discovered this part of the code. Before the 8d83a5d, it could cause some artefacts, but since then, a kind of asymmetry has been introduced into the GROUP-BY clause list. As you can see in the attached patch, GROUP-BY reordering works even when the asymmetry of the 8d83a5d chooses different keys. At the same time, I agree that implicitly setting anything in an exporting function, which should just look up for EC, is a questionable coding style. To avoid possible usage issues (in extensions, for example), I propose setting it up afterwards, explicitly forcing this action by input parameter - see my attempt in the attachment. -- regards, Andrei Lepikhov Postgres Professional --------------y9PdxtTwf00iZUJPH5fR3cFP Content-Type: text/x-patch; charset=UTF-8; name="group_by_asymmetry.diff" Content-Disposition: attachment; filename="group_by_asymmetry.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2VxdWl2Y2xhc3MuYyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2VxdWl2Y2xhc3MuYwppbmRleCBhNjE5ZmY5 MTc3Li5iYzA4ZGZhZGFmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9lcXVpdmNsYXNzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvZXF1aXZj bGFzcy5jCkBAIC02NTIsMTggKzY1Miw3IEBAIGdldF9lY2xhc3NfZm9yX3NvcnRfZXhwcihQ bGFubmVySW5mbyAqcm9vdCwKIAogCQkJaWYgKG9wY2ludHlwZSA9PSBjdXJfZW0tPmVtX2Rh dGF0eXBlICYmCiAJCQkJZXF1YWwoZXhwciwgY3VyX2VtLT5lbV9leHByKSkKLQkJCXsKLQkJ CQkvKgotCQkJCSAqIE1hdGNoIQotCQkJCSAqCi0JCQkJICogQ29weSB0aGUgc29ydHJlZiBp ZiBpdCB3YXNuJ3Qgc2V0IHlldC4gIFRoYXQgbWF5IGhhcHBlbiBpZgotCQkJCSAqIHRoZSBl YyB3YXMgY29uc3RydWN0ZWQgZnJvbSBhIFdIRVJFIGNsYXVzZSwgaS5lLiBpdCBkb2Vzbid0 Ci0JCQkJICogaGF2ZSBhIHRhcmdldCByZWZlcmVuY2UgYXQgYWxsLgotCQkJCSAqLwotCQkJ CWlmIChjdXJfZWMtPmVjX3NvcnRyZWYgPT0gMCAmJiBzb3J0cmVmID4gMCkKLQkJCQkJY3Vy X2VjLT5lY19zb3J0cmVmID0gc29ydHJlZjsKLQkJCQlyZXR1cm4gY3VyX2VjOwotCQkJfQor CQkJCXJldHVybiBjdXJfZWM7IC8qIE1hdGNoISAqLwogCQl9CiAJfQogCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9wYXRoa2V5cy5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvcGF0aGtleXMuYwppbmRleCAxZDYxODgxYTZiLi41ZDk1OTdhZGNk IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9wYXRoa2V5cy5jCisr KyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3BhdGhrZXlzLmMKQEAgLTEzNTUsNyAr MTM1NSw4IEBAIG1ha2VfcGF0aGtleXNfZm9yX3NvcnRjbGF1c2VzKFBsYW5uZXJJbmZvICpy b290LAogCQkJCQkJCQkJCQkJCSZzb3J0Y2xhdXNlcywKIAkJCQkJCQkJCQkJCQl0bGlzdCwK IAkJCQkJCQkJCQkJCQlmYWxzZSwKLQkJCQkJCQkJCQkJCQkmc29ydGFibGUpOworCQkJCQkJ CQkJCQkJCSZzb3J0YWJsZSwKKwkJCQkJCQkJCQkJCQlmYWxzZSk7CiAJLyogSXQncyBjYWxs ZXIgZXJyb3IgaWYgbm90IGFsbCBjbGF1c2VzIHdlcmUgc29ydGFibGUgKi8KIAlBc3NlcnQo c29ydGFibGUpOwogCXJldHVybiByZXN1bHQ7CkBAIC0xMzc5LDEzICsxMzgwLDE2IEBAIG1h a2VfcGF0aGtleXNfZm9yX3NvcnRjbGF1c2VzKFBsYW5uZXJJbmZvICpyb290LAogICogdG8g cmVtb3ZlIGFueSBjbGF1c2VzIHRoYXQgY2FuIGJlIHByb3ZlbiByZWR1bmRhbnQgdmlhIHRo ZSBlY2xhc3MgbG9naWMuCiAgKiBFdmVuIHRob3VnaCB3ZSdsbCBoYXZlIHRvIGhhc2ggaW4g dGhhdCBjYXNlLCB3ZSBtaWdodCBhcyB3ZWxsIG5vdCBoYXNoCiAgKiByZWR1bmRhbnQgY29s dW1ucy4pCisgKiAqc2V0X2VjX3NvcnRyZWYgaXMgdHJ1ZSBpZiBjYWxsZXIgd2FudHMgdG8g c2V0IHVwIGVjX3NvcnRyZWYgZmllbGQgaW4KKyAqIHRoZSBwYXRoa2V5IEVxdWl2YWxlbmNl IENsYXNzLCBpZiBpdCBoYXZlIG5vdCBpbml0aWFsaXplZCBiZWZvcmVoYW5kLgogICovCiBM aXN0ICoKIG1ha2VfcGF0aGtleXNfZm9yX3NvcnRjbGF1c2VzX2V4dGVuZGVkKFBsYW5uZXJJ bmZvICpyb290LAogCQkJCQkJCQkJICAgTGlzdCAqKnNvcnRjbGF1c2VzLAogCQkJCQkJCQkJ ICAgTGlzdCAqdGxpc3QsCiAJCQkJCQkJCQkgICBib29sIHJlbW92ZV9yZWR1bmRhbnQsCi0J CQkJCQkJCQkgICBib29sICpzb3J0YWJsZSkKKwkJCQkJCQkJCSAgIGJvb2wgKnNvcnRhYmxl LAorCQkJCQkJCQkJICAgYm9vbCBzZXRfZWNfc29ydHJlZikKIHsKIAlMaXN0CSAgICpwYXRo a2V5cyA9IE5JTDsKIAlMaXN0Q2VsbCAgICpsOwpAQCAtMTQwOSw2ICsxNDEzLDEzIEBAIG1h a2VfcGF0aGtleXNfZm9yX3NvcnRjbGF1c2VzX2V4dGVuZGVkKFBsYW5uZXJJbmZvICpyb290 LAogCQkJCQkJCQkJCSAgIHNvcnRjbC0+bnVsbHNfZmlyc3QsCiAJCQkJCQkJCQkJICAgc29y dGNsLT50bGVTb3J0R3JvdXBSZWYsCiAJCQkJCQkJCQkJICAgdHJ1ZSk7CisJCWlmIChwYXRo a2V5LT5wa19lY2xhc3MtPmVjX3NvcnRyZWYgPT0gMCAmJiBzZXRfZWNfc29ydHJlZikKKwkJ CS8qCisJCQkgKiBDb3B5IHRoZSBzb3J0cmVmIGlmIGl0IHdhc24ndCBzZXQgeWV0LiAgVGhh dCBtYXkgaGFwcGVuIGlmCisJCQkgKiB0aGUgZWMgd2FzIGNvbnN0cnVjdGVkIGZyb20gYSBX SEVSRSBjbGF1c2UsIGkuZS4gaXQgZG9lc24ndAorCQkJICogaGF2ZSBhIHRhcmdldCByZWZl cmVuY2UgYXQgYWxsLgorCQkJICovCisJCQlwYXRoa2V5LT5wa19lY2xhc3MtPmVjX3NvcnRy ZWYgPSBzb3J0Y2wtPnRsZVNvcnRHcm91cFJlZjsKIAogCQkvKiBDYW5vbmljYWwgZm9ybSBl bGltaW5hdGVzIHJlZHVuZGFudCBvcmRlcmluZyBrZXlzICovCiAJCWlmICghcGF0aGtleV9p c19yZWR1bmRhbnQocGF0aGtleSwgcGF0aGtleXMpKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bs YW4vcGxhbm5lci5jCmluZGV4IDUzMjBkYTUxYTAuLmRlZTk4YzlhOTAgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYworKysgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAgLTMzOTEsNyArMzM5MSw3IEBAIHN0YW5k YXJkX3FwX2NhbGxiYWNrKFBsYW5uZXJJbmZvICpyb290LCB2b2lkICpleHRyYSkKIAkJLyoK IAkJICogV2l0aCBhIHBsYWluIEdST1VQIEJZIGxpc3QsIHdlIGNhbiByZW1vdmUgYW55IGdy b3VwaW5nIGl0ZW1zIHRoYXQKIAkJICogYXJlIHByb3ZlbiByZWR1bmRhbnQgYnkgRXF1aXZh bGVuY2VDbGFzcyBwcm9jZXNzaW5nLiAgRm9yIGV4YW1wbGUsCi0JCSAqIHdlIGNhbiByZW1v dmUgeSBnaXZlbiAiV0hFUkUgeCA9IHkgR1JPVVAgQlkgeCwgeSIuICBUaGVzZSBhcmVuJ3QK KwkJICogd2UgY2FuIHJlbW92ZSB5IGdpdmVuICJXSEVSRSB4IGdldF9lY2xhc3NfZm9yX3Nv cnRfZXhwcj0geSBHUk9VUCBCWSB4LCB5Ii4gIFRoZXNlIGFyZW4ndAogCQkgKiBlc3BlY2lh bGx5IGNvbW1vbiBjYXNlcywgYnV0IHRoZXkncmUgbmVhcmx5IGZyZWUgdG8gZGV0ZWN0LiAg Tm90ZQogCQkgKiB0aGF0IHdlIHJlbW92ZSByZWR1bmRhbnQgaXRlbXMgZnJvbSBwcm9jZXNz ZWRfZ3JvdXBDbGF1c2UgYnV0IG5vdAogCQkgKiB0aGUgb3JpZ2luYWwgcGFyc2UtPmdyb3Vw Q2xhdXNlLgpAQCAtMzQwMyw3ICszNDAzLDggQEAgc3RhbmRhcmRfcXBfY2FsbGJhY2soUGxh bm5lckluZm8gKnJvb3QsIHZvaWQgKmV4dHJhKQogCQkJCQkJCQkJCQkJICAgJnJvb3QtPnBy b2Nlc3NlZF9ncm91cENsYXVzZSwKIAkJCQkJCQkJCQkJCSAgIHRsaXN0LAogCQkJCQkJCQkJ CQkJICAgdHJ1ZSwKLQkJCQkJCQkJCQkJCSAgICZzb3J0YWJsZSk7CisJCQkJCQkJCQkJCQkg ICAmc29ydGFibGUsCisJCQkJCQkJCQkJCQkgICB0cnVlKTsKIAkJaWYgKCFzb3J0YWJsZSkK IAkJewogCQkJLyogQ2FuJ3Qgc29ydDsgbm8gcG9pbnQgaW4gY29uc2lkZXJpbmcgYWdncmVn YXRlIG9yZGVyaW5nIGVpdGhlciAqLwpAQCAtMzQ1Myw3ICszNDU0LDggQEAgc3RhbmRhcmRf cXBfY2FsbGJhY2soUGxhbm5lckluZm8gKnJvb3QsIHZvaWQgKmV4dHJhKQogCQkJCQkJCQkJ CQkJICAgJnJvb3QtPnByb2Nlc3NlZF9kaXN0aW5jdENsYXVzZSwKIAkJCQkJCQkJCQkJCSAg IHRsaXN0LAogCQkJCQkJCQkJCQkJICAgdHJ1ZSwKLQkJCQkJCQkJCQkJCSAgICZzb3J0YWJs ZSk7CisJCQkJCQkJCQkJCQkgICAmc29ydGFibGUsCisJCQkJCQkJCQkJCQkgICBmYWxzZSk7 CiAJCWlmICghc29ydGFibGUpCiAJCQlyb290LT5kaXN0aW5jdF9wYXRoa2V5cyA9IE5JTDsK IAl9CkBAIC0zNDc5LDcgKzM0ODEsOCBAQCBzdGFuZGFyZF9xcF9jYWxsYmFjayhQbGFubmVy SW5mbyAqcm9vdCwgdm9pZCAqZXh0cmEpCiAJCQkJCQkJCQkJCQkgICAmZ3JvdXBDbGF1c2Vz LAogCQkJCQkJCQkJCQkJICAgdGxpc3QsCiAJCQkJCQkJCQkJCQkgICBmYWxzZSwKLQkJCQkJ CQkJCQkJCSAgICZzb3J0YWJsZSk7CisJCQkJCQkJCQkJCQkgICAmc29ydGFibGUsCisJCQkJ CQkJCQkJCQkgICBmYWxzZSk7CiAJCWlmICghc29ydGFibGUpCiAJCQlyb290LT5zZXRvcF9w YXRoa2V5cyA9IE5JTDsKIAl9CkBAIC02MDI3LDcgKzYwMzAsOCBAQCBtYWtlX3BhdGhrZXlz X2Zvcl93aW5kb3coUGxhbm5lckluZm8gKnJvb3QsIFdpbmRvd0NsYXVzZSAqd2MsCiAJCQkJ CQkJCQkJCQkJCQkJICZ3Yy0+cGFydGl0aW9uQ2xhdXNlLAogCQkJCQkJCQkJCQkJCQkJCSB0 bGlzdCwKIAkJCQkJCQkJCQkJCQkJCQkgdHJ1ZSwKLQkJCQkJCQkJCQkJCQkJCQkgJnNvcnRh YmxlKTsKKwkJCQkJCQkJCQkJCQkJCQkgJnNvcnRhYmxlLAorCQkJCQkJCQkJCQkJCQkJCSBm YWxzZSk7CiAKIAkJQXNzZXJ0KHNvcnRhYmxlKTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9vcHRpbWl6ZXIvcGF0aHMuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5o CmluZGV4IDM5YmE0NjE1NDguLmZmZjRiNjlkZmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L29wdGltaXplci9wYXRocy5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5o CkBAIC0yNDIsNyArMjQyLDggQEAgZXh0ZXJuIExpc3QgKm1ha2VfcGF0aGtleXNfZm9yX3Nv cnRjbGF1c2VzX2V4dGVuZGVkKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkJCUxp c3QgKipzb3J0Y2xhdXNlcywKIAkJCQkJCQkJCQkJCQlMaXN0ICp0bGlzdCwKIAkJCQkJCQkJ CQkJCQlib29sIHJlbW92ZV9yZWR1bmRhbnQsCi0JCQkJCQkJCQkJCQkJYm9vbCAqc29ydGFi bGUpOworCQkJCQkJCQkJCQkJCWJvb2wgKnNvcnRhYmxlLAorCQkJCQkJCQkJCQkJCWJvb2wg c2V0X2VjX3NvcnRyZWYpOwogZXh0ZXJuIHZvaWQgaW5pdGlhbGl6ZV9tZXJnZWNsYXVzZV9l Y2xhc3NlcyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJUmVzdHJpY3RJbmZvICpy ZXN0cmljdGluZm8pOwogZXh0ZXJuIHZvaWQgdXBkYXRlX21lcmdlY2xhdXNlX2VjbGFzc2Vz KFBsYW5uZXJJbmZvICpyb290LApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9hZ2dyZWdhdGVzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYWdncmVn YXRlcy5vdXQKaW5kZXggNTA2OTVkODNhMi4uMWIwNmY5Y2E5NyAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hZ2dyZWdhdGVzLm91dAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0ZXMub3V0CkBAIC0yODg2LDYgKzI4ODYsNTMgQEAg R1JPVVAgQlkgYzEudywgYzEuejsKICA1LjAwMDAwMDAwMDAwMDAwMDAKICgyIHJvd3MpCiAK Ky0tIFBhdGhrZXlzLCBidWlsdCBpbiBzdWJ0cmVlLCBjYW4gYmUgdXNlZCB0byBvcHRpbWl6 ZSBHUk9VUC1CWSBjbGF1c2Ugb3JkZXJpbmcuCistLSBBbHNvLCBoZXJlIHdlIGNoZWNrIHRo YXQgaXQgZG9lc24ndCBkZXBlbmQgb24gdGhlIGluaXRpYWwgY2xhdXNlIG9yZGVyIGluIHRo ZQorLS0gR1JPVVAtQlkgbGlzdC4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjMS55 LGMxLnggRlJPTSBncm91cF9hZ2dfcGsgYzEKKyAgSk9JTiBncm91cF9hZ2dfcGsgYzIKKyAg T04gYzEueCA9IGMyLngKK0dST1VQIEJZIGMxLnksYzEueCxjMi54OworICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgR3JvdXAKKyAg IEdyb3VwIEtleTogYzEueCwgYzEueQorICAgLT4gIEluY3JlbWVudGFsIFNvcnQKKyAgICAg ICAgIFNvcnQgS2V5OiBjMS54LCBjMS55CisgICAgICAgICBQcmVzb3J0ZWQgS2V5OiBjMS54 CisgICAgICAgICAtPiAgTWVyZ2UgSm9pbgorICAgICAgICAgICAgICAgTWVyZ2UgQ29uZDog KGMxLnggPSBjMi54KQorICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAg ICAgICAgIFNvcnQgS2V5OiBjMS54CisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gZ3JvdXBfYWdnX3BrIGMxCisgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAg ICAgICAgICAgICAgICAgU29ydCBLZXk6IGMyLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBncm91cF9hZ2dfcGsgYzIKKygxMyByb3dzKQorCitFWFBMQUlOIChD T1NUUyBPRkYpCitTRUxFQ1QgYzEueSxjMS54IEZST00gZ3JvdXBfYWdnX3BrIGMxCisgIEpP SU4gZ3JvdXBfYWdnX3BrIGMyCisgIE9OIGMxLnggPSBjMi54CitHUk9VUCBCWSBjMS55LGMy LngsYzEueDsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEdyb3VwCisgICBHcm91cCBLZXk6IGMyLngsIGMxLnkKKyAgIC0+ICBJ bmNyZW1lbnRhbCBTb3J0CisgICAgICAgICBTb3J0IEtleTogYzIueCwgYzEueQorICAgICAg ICAgUHJlc29ydGVkIEtleTogYzIueAorICAgICAgICAgLT4gIE1lcmdlIEpvaW4KKyAgICAg ICAgICAgICAgIE1lcmdlIENvbmQ6IChjMS54ID0gYzIueCkKKyAgICAgICAgICAgICAgIC0+ ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogYzEueAorICAgICAgICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGdyb3VwX2FnZ19wayBjMQorICAgICAgICAg ICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiBjMi54Cisg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZ3JvdXBfYWdnX3BrIGMyCiso MTMgcm93cykKKwogUkVTRVQgZW5hYmxlX25lc3Rsb29wOwogUkVTRVQgZW5hYmxlX2hhc2hq b2luOwogRFJPUCBUQUJMRSBncm91cF9hZ2dfcGs7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9hZ2dyZWdhdGVzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2FnZ3Jl Z2F0ZXMuc3FsCmluZGV4IDI5MDU4NDhlYWQuLjBiZTljNDg0ODMgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0ZXMuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2FnZ3JlZ2F0ZXMuc3FsCkBAIC0xMjUzLDYgKzEyNTMsMjAgQEAgU0VMRUNUIGF2 ZyhjMS5mIE9SREVSIEJZIGMxLngsIGMxLnkpCiBGUk9NIGdyb3VwX2FnZ19wayBjMSBKT0lO IGdyb3VwX2FnZ19wayBjMiBPTiBjMS54ID0gYzIueAogR1JPVVAgQlkgYzEudywgYzEuejsK IAorLS0gUGF0aGtleXMsIGJ1aWx0IGluIHN1YnRyZWUsIGNhbiBiZSB1c2VkIHRvIG9wdGlt aXplIEdST1VQLUJZIGNsYXVzZSBvcmRlcmluZy4KKy0tIEFsc28sIGhlcmUgd2UgY2hlY2sg dGhhdCBpdCBkb2Vzbid0IGRlcGVuZCBvbiB0aGUgaW5pdGlhbCBjbGF1c2Ugb3JkZXIgaW4g dGhlCistLSBHUk9VUC1CWSBsaXN0LgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGMx LnksYzEueCBGUk9NIGdyb3VwX2FnZ19wayBjMQorICBKT0lOIGdyb3VwX2FnZ19wayBjMgor ICBPTiBjMS54ID0gYzIueAorR1JPVVAgQlkgYzEueSxjMS54LGMyLng7CitFWFBMQUlOIChD T1NUUyBPRkYpCitTRUxFQ1QgYzEueSxjMS54IEZST00gZ3JvdXBfYWdnX3BrIGMxCisgIEpP SU4gZ3JvdXBfYWdnX3BrIGMyCisgIE9OIGMxLnggPSBjMi54CitHUk9VUCBCWSBjMS55LGMy LngsYzEueDsKKwogUkVTRVQgZW5hYmxlX25lc3Rsb29wOwogUkVTRVQgZW5hYmxlX2hhc2hq b2luOwogRFJPUCBUQUJMRSBncm91cF9hZ2dfcGs7Cg== --------------y9PdxtTwf00iZUJPH5fR3cFP--