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 1rGZPC-00Fxpr-Gw for pgsql-hackers@arkaria.postgresql.org; Fri, 22 Dec 2023 06:53:11 +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 1rGZPB-002otj-5L for pgsql-hackers@arkaria.postgresql.org; Fri, 22 Dec 2023 06:53:09 +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 1rGZPA-002ota-LR for pgsql-hackers@lists.postgresql.org; Fri, 22 Dec 2023 06:53:08 +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 1rGZP7-00DJCd-7Q for pgsql-hackers@lists.postgresql.org; Fri, 22 Dec 2023 06:53:07 +0000 Received: from [20.10.0.76] (unknown [5.182.58.202]) (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 712B3E20E5C; Fri, 22 Dec 2023 09:53:03 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1703227983; bh=ClII5nIpbEiuw2xK0ivasWYG1CxqA9SRm68Ug08Vzbc=; h=Message-ID:Date:User-Agent:To:From:Subject:From; b=cEGXRToCaHkflICbWS6zA5iXIhPdwEL8Og8mCILj/RVHKv6ft+w1zPPjz3XwJiJQp H5RHC1X7Vgt1xOaY+gmur+gKXjsZtx6S2+CMse8GQVfDIeQz3gwYYOKeSu9yBic1zz xT5Gx+91Px3SR3YqVphadeKeGqFdPw/P41vD2pQwPhCGGniAKfO/BY8g1Ucf4oP8K3 gRn0kVEh2YDW9D6KID2YH5RxV4Rn44SwHDxF7LlO0kZv2hhYsu4EmoAP7GrvPoUVtb rCldvtUHY5Xfq28nEidG90ZzA3wxEPiPaU0JtLaiY9GVv7KWMcyir/GFR91XZEDZHD 7v92zyopwHd+w== Content-Type: multipart/mixed; boundary="------------Lsh23fPGUR1FtPlI0gWgtvdJ" Message-ID: <10a1586e-f96e-41b1-abe9-6f93667bf6bc@postgrespro.ru> Date: Fri, 22 Dec 2023 08:53:01 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: PostgreSQL Hackers , Alexander Korotkov Content-Language: en-US From: Andrei Lepikhov Subject: Optimization outcome depends on the index order Organization: Postgres Professional 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. --------------Lsh23fPGUR1FtPlI0gWgtvdJ Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 21/12/2023 12:10, Alexander Korotkov wrote: > I took a closer look at the patch in [9]. I should drop my argument > about breaking the model, because add_path() already considers other > aspects than just costs. But I have two more note about that patch: > > 1) It seems that you're determining the fact that the index path > should return strictly one row by checking path->rows <= 1.0 and > indexinfo->unique. Is it really guaranteed that in this case quals > are matching unique constraint? path->rows <= 1.0 could be just an > estimation error. Or one row could be correctly estimated, but it's > going to be selected by some quals matching unique constraint and > other quals in recheck. So, it seems there is a risk to select > suboptimal index due to this condition. Operating inside the optimizer, we consider all estimations to be the sooth. This patch modifies only one place: having two equal assumptions, we just choose one that generally looks more stable. Filtered tuples should be calculated and included in the cost of the path. The decision on the equality of paths has been made in view of the estimation of these filtered tuples. > 2) Even for non-unique indexes this patch is putting new logic on top > of the subsequent code. How we can prove it's going to be a win? > That could lead, for instance, to dropping parallel-safe paths in > cases we didn't do so before. Because we must trust all predictions made by the planner, we just choose the most trustworthy path. According to the planner logic, it is a path with a smaller selectivity. We can make mistakes anyway just because of the nature of estimation. > Anyway, please start a separate thread if you're willing to put more > work into this. Done > 9. https://www.postgresql.org/message-id/154f786a-06a0-4fb1- > b8a4-16c66149731b%40postgrespro.ru -- regards, Andrei Lepikhov Postgres Professional --------------Lsh23fPGUR1FtPlI0gWgtvdJ Content-Type: text/plain; charset=UTF-8; name="v3-0001-Choose-an-index-path-with-the-best-selectivity-estim.patch" Content-Disposition: attachment; filename*0="v3-0001-Choose-an-index-path-with-the-best-selectivity-estim"; filename*1=".patch" Content-Transfer-Encoding: base64 RnJvbSA3YjA0NGRlMTQ0OWE1ZmRjNDUwY2I2MjljYWFmYjRlMTVkZWQ3YTkzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmV5IFYuIExlcGlraG92IiA8YS5sZXBpa2hv dkBwb3N0Z3Jlc3Byby5ydT4KRGF0ZTogTW9uLCAyNyBOb3YgMjAyMyAxMToyMzo0OCArMDcw MApTdWJqZWN0OiBbUEFUQ0hdIENob29zZSBhbiBpbmRleCBwYXRoIHdpdGggdGhlIGJlc3Qg c2VsZWN0aXZpdHkgZXN0aW1hdGlvbi4KCkluIHRoZSBjYXNlIHdoZW4gb3B0aW1pemVyIHBy ZWRpY3RzIG9ubHkgb25lIHJvdyBwcmVmZXIgY2hvb3NpbmcgVU5JUVVFIGluZGV4ZXMKSW4g b3RoZXIgY2FzZXMsIGlmIG9wdGltaXplciB0cmVhdHMgaW5kZXhlcyBhcyBlcXVhbCwgbWFr ZSBhIGxhc3QgYXR0ZW1wdApzZWxlY3RpbmcgdGhlIGluZGV4IHdpdGggbGVzcyBzZWxlY3Rp dml0eSAtIHRoaXMgZGVjaXNpb24gdGFrZXMgYXdheSBkZXBlbmRlbmN5Cm9uIHRoZSBvcmRl ciBvZiBpbmRleGVzIGluIGFuIGluZGV4IGxpc3QgKGdvb2QgZm9yIHJlcHJvZHVjdGlvbiBv ZiBzb21lIGlzc3VlcykKYW5kIHByb3Bvc2VzIG9uZSBtb3JlIG9iamVjdGl2ZSBhcmd1bWVu dCB0byBjaG9vc2Ugc3BlY2lmaWMgaW5kZXguCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvcGF0aG5vZGUuYyAgICAgICAgIHwgNDIgKysrKysrKysrKysrKysrKysrKwogLi4u L2V4cGVjdGVkL2Ryb3AtaW5kZXgtY29uY3VycmVudGx5LTEub3V0ICAgIHwgMTYgKysrLS0t LQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mdW5jdGlvbmFsX2RlcHMub3V0IHwgMzkg KysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQg ICAgICAgICAgICB8IDQwICsrKysrKysrKy0tLS0tLS0tLQogc3JjL3Rlc3QvcmVncmVzcy9z cWwvZnVuY3Rpb25hbF9kZXBzLnNxbCAgICAgIHwgMzIgKysrKysrKysrKysrKysKIDUgZmls ZXMgY2hhbmdlZCwgMTQzIGluc2VydGlvbnMoKyksIDI2IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCmluZGV4IDBiMWQxN2I5ZDMuLjRiNWFl ZGQ1NzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2Rl LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwpAQCAtNDU0 LDYgKzQ1NCw0OCBAQCBhZGRfcGF0aChSZWxPcHRJbmZvICpwYXJlbnRfcmVsLCBQYXRoICpu ZXdfcGF0aCkKIAkJY29zdGNtcCA9IGNvbXBhcmVfcGF0aF9jb3N0c19mdXp6aWx5KG5ld19w YXRoLCBvbGRfcGF0aCwKIAkJCQkJCQkJCQkJIFNURF9GVVpaX0ZBQ1RPUik7CiAKKwkJLyoK KwkJICogQXBwbHkgc29tZSBoZXVyaXN0aWNzIG9uIGluZGV4IHBhdGhzLgorCQkgKi8KKwkJ aWYgKElzQShuZXdfcGF0aCwgSW5kZXhQYXRoKSAmJiBJc0Eob2xkX3BhdGgsIEluZGV4UGF0 aCkpCisJCXsKKwkJCUluZGV4UGF0aCAqaW5wID0gKEluZGV4UGF0aCAqKSBuZXdfcGF0aDsK KwkJCUluZGV4UGF0aCAqaW9wID0gKEluZGV4UGF0aCAqKSBvbGRfcGF0aDsKKworCQkJaWYg KG5ld19wYXRoLT5yb3dzIDw9IDEuMCAmJiBvbGRfcGF0aC0+cm93cyA8PSAxLjApCisJCQl7 CisJCQkJLyoKKwkJCQkgKiBXaGVuIGJvdGggcGF0aHMgYXJlIHByZWRpY3RlZCB0byBwcm9k dWNlIG9ubHkgb25lIHR1cGxlLAorCQkJCSAqIHRoZSBvcHRpbWlzZXIgc2hvdWxkIHByZWZl ciBjaG9vc2luZyBhIHVuaXF1ZSBpbmRleCBzY2FuCisJCQkJICogaW4gYWxsIGNhc2VzLgor CQkJCSAqLworCQkJCWlmIChpbnAtPmluZGV4aW5mby0+dW5pcXVlICYmICFpb3AtPmluZGV4 aW5mby0+dW5pcXVlKQorCQkJCQljb3N0Y21wID0gQ09TVFNfQkVUVEVSMTsKKwkJCQllbHNl IGlmICghaW5wLT5pbmRleGluZm8tPnVuaXF1ZSAmJiBpb3AtPmluZGV4aW5mby0+dW5pcXVl KQorCQkJCQljb3N0Y21wID0gQ09TVFNfQkVUVEVSMjsKKwkJCQllbHNlIGlmIChjb3N0Y21w ICE9IENPU1RTX0RJRkZFUkVOVCkKKwkJCQkJLyoKKwkJCQkJICogSWYgdGhlIG9wdGltaXNl ciBkb2Vzbid0IGhhdmUgYW4gb2J2aW91c2x5IHN0YWJsZSBjaG9pY2UKKwkJCQkJICogb2Yg dW5pcXVlIGluZGV4LCBpbmNyZWFzZSB0aGUgY2hhbmNlIG9mIGF2b2lkaW5nIG1pc3Rha2Vz CisJCQkJCSAqIGJ5IGNob29zaW5nIGFuIGluZGV4IHdpdGggc21hbGxlciBzZWxlY3Rpdml0 eS4KKwkJCQkJICogVGhpcyBvcHRpb24gbWFrZXMgZGVjaXNpb24gbW9yZSBjb25zZXJ2YXRp dmUgYW5kIGxvb2tzCisJCQkJCSAqIGRlYmF0YWJsZS4KKwkJCQkJICovCisJCQkJCWNvc3Rj bXAgPSAoaW5wLT5pbmRleHNlbGVjdGl2aXR5IDwgaW9wLT5pbmRleHNlbGVjdGl2aXR5KSA/ CisJCQkJCQkJCQkJCQlDT1NUU19CRVRURVIxIDogQ09TVFNfQkVUVEVSMjsKKwkJCX0KKwkJ CWVsc2UgaWYgKGNvc3RjbXAgPT0gQ09TVFNfRVFVQUwpCisJCQkJLyoKKwkJCQkgKiBUaGUg b3B0aW1pemVyIGNhbid0IGRpZmZlciB0aGUgdmFsdWUgb2YgdHdvIGluZGV4IHBhdGhzLgor CQkJCSAqIFRvIGF2b2lkIG1ha2luZyBhIGRlY2lzaW9uIHRoYXQgaXMgYmFzZWQgb24gb25s eSBhbiBpbmRleAorCQkJCSAqIG9yZGVyIGluIHRoZSBsaXN0LCB1c2Ugc29tZSByYXRpb25h bCBzdHJhdGVneSBiYXNlZCBvbgorCQkJCSAqIHNlbGVjdGl2aXR5OiBwcmVmZXIgdG91Y2hp bmcgZmV3ZXIgdHVwbGVzIG9uIHRoZSBkaXNrIHRvCisJCQkJICogZmlsdGVyaW5nIHRoZW0g YWZ0ZXIuCisJCQkJICovCisJCQkJY29zdGNtcCA9IChpbnAtPmluZGV4c2VsZWN0aXZpdHkg PCBpb3AtPmluZGV4c2VsZWN0aXZpdHkpID8KKwkJCQkJCQkJCQkJCUNPU1RTX0JFVFRFUjEg OiBDT1NUU19CRVRURVIyOworCQl9CisKIAkJLyoKIAkJICogSWYgdGhlIHR3byBwYXRocyBj b21wYXJlIGRpZmZlcmVudGx5IGZvciBzdGFydHVwIGFuZCB0b3RhbCBjb3N0LAogCQkgKiB0 aGVuIHdlIHdhbnQgdG8ga2VlcCBib3RoLCBhbmQgd2UgY2FuIHNraXAgY29tcGFyaW5nIHBh dGhrZXlzIGFuZApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL2Ry b3AtaW5kZXgtY29uY3VycmVudGx5LTEub3V0IGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVj dGVkL2Ryb3AtaW5kZXgtY29uY3VycmVudGx5LTEub3V0CmluZGV4IDFjYjIyNTA4OTEuLjIz OTJjZGIwMzMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9kcm9w LWluZGV4LWNvbmN1cnJlbnRseS0xLm91dAorKysgYi9zcmMvdGVzdC9pc29sYXRpb24vZXhw ZWN0ZWQvZHJvcC1pbmRleC1jb25jdXJyZW50bHktMS5vdXQKQEAgLTEyLDEzICsxMiwxNSBA QCBzdGVwIHByZXBzOiBQUkVQQVJFIGdldHJvd19zZXFzY2FuIEFTIFNFTEVDVCAqIEZST00g dGVzdF9kYyBXSEVSRSBkYXRhID0gMzQgT1JERQogc3RlcCBiZWdpbjogQkVHSU47CiBzdGVw IGRpc2FibGVzZXE6IFNFVCBlbmFibGVfc2Vxc2NhbiA9IGZhbHNlOwogc3RlcCBleHBsYWlu aTogRVhQTEFJTiAoQ09TVFMgT0ZGKSBFWEVDVVRFIGdldHJvd19pZHhzY2FuOwotUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU29ydCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBTb3J0IEtleTogaWQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAotICAtPiAgSW5kZXggU2NhbiB1c2luZyB0ZXN0X2Rj X2RhdGEgb24gdGVzdF9kYwotICAgICAgICBJbmRleCBDb25kOiAoZGF0YSA9IDM0KSAgICAg ICAgICAgICAgIAotKDQgcm93cykKK1FVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCitTb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK KyAgU29ydCBLZXk6IGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAtPiAg Qml0bWFwIEhlYXAgU2NhbiBvbiB0ZXN0X2RjICAgICAgICAgICAgCisgICAgICAgIFJlY2hl Y2sgQ29uZDogKGRhdGEgPSAzNCkgICAgICAgICAgICAKKyAgICAgICAgLT4gIEJpdG1hcCBJ bmRleCBTY2FuIG9uIHRlc3RfZGNfZGF0YQorICAgICAgICAgICAgICBJbmRleCBDb25kOiAo ZGF0YSA9IDM0KSAgICAgICAgCisoNiByb3dzKQogCiBzdGVwIGVuYWJsZXNlcTogU0VUIGVu YWJsZV9zZXFzY2FuID0gdHJ1ZTsKIHN0ZXAgZXhwbGFpbnM6IEVYUExBSU4gKENPU1RTIE9G RikgRVhFQ1VURSBnZXRyb3dfc2Vxc2NhbjsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvZnVuY3Rpb25hbF9kZXBzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvZnVuY3Rpb25hbF9kZXBzLm91dAppbmRleCAzMjM4MWI4YWU3Li43MDU3MjU0Mjc4 IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Z1bmN0aW9uYWxfZGVw cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mdW5jdGlvbmFsX2RlcHMu b3V0CkBAIC0yMzAsMyArMjMwLDQyIEBAIEVYRUNVVEUgZm9vOwogQUxURVIgVEFCTEUgYXJ0 aWNsZXMgRFJPUCBDT05TVFJBSU5UIGFydGljbGVzX3BrZXkgUkVTVFJJQ1Q7CiBFWEVDVVRF IGZvbzsgIC0tIGZhaWwKIEVSUk9SOiAgY29sdW1uICJhcnRpY2xlcy5rZXl3b3JkcyIgbXVz dCBhcHBlYXIgaW4gdGhlIEdST1VQIEJZIGNsYXVzZSBvciBiZSB1c2VkIGluIGFuIGFnZ3Jl Z2F0ZSBmdW5jdGlvbgorLyoKKyAqIENvcm5lciBjYXNlIG9mIHRoZSBQb3N0Z3JlU1FMIG9w dGltaXplcjoKKyAqCisgKiBBTkRlZCBjbGF1c2VzIHNlbGVjdGl2aXR5IG11bHRpcGxpY2F0 aW9uIGluY3JlYXNlcyB0b3RhbCBzZWxlY3Rpdml0eSBlcnJvci4KKyAqIElmIHN1Y2ggbm9u LXRydWUgc2VsZWN0aXZpdHkgaXMgc28gdGlueSB0aGF0IHJvdyBlc3RpbWF0aW9uIHByZWRp Y3RzIHRoZQorICogYWJzb2x1dGUgbWluaW11bSBudW1iZXIgb2YgdHVwbGVzICgxKSwgdGhl IG9wdGltaXplciBjYW4ndCBjaG9vc2UgYmV0d2VlbgorICogZGlmZmVyZW50IGluZGV4ZXMg YW5kIHBpY2tzIGEgZmlyc3QgZnJvbSB0aGUgaW5kZXggbGlzdCAobGFzdCBjcmVhdGVkKS4K KyAqLworQ1JFQVRFIFRBQkxFIHQgQVMgKCAgLS0gc2VsZWN0aXZpdHkoYzEpKnNlbGVjdGl2 aXR5KGMyKSpucm93cyA8PSAxCisgICAgU0VMRUNUICBncyBBUyBjMSwKKyAgICAgICAgICAg IGdzIEFTIGMyLAorICAgICAgICAgICAgKGdzICUgMTApIEFTIGMzLCAtLSBub3QgaW4gdGhl IGdvb2QgaW5kZXguCisgICAgICAgICAgICAoZ3MgJSAxMDApIEFTIGM0IC0tIG5vdCBpbiB0 aGUgYmFkIGluZGV4LgorICAgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgQVMgZ3MK Kyk7CitDUkVBVEUgSU5ERVggYmFkIE9OIHQgKGMxLGMyLGMzKTsKK0NSRUFURSBJTkRFWCBn b29kIE9OIHQgKGMxLGMyLGM0KTsKK0FOQUxZWkUgdDsKK0VYUExBSU4gKENPU1RTIE9GRikg U0VMRUNUICogRlJPTSB0IFdIRVJFIGMxPTEgQU5EIGMyPTEgQU5EIGMzPTEgQU5EIGM0PTE7 CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgSW5kZXggU2NhbiB1c2luZyBnb29kIG9uIHQKKyAgIEluZGV4IENvbmQ6ICgoYzEgPSAx KSBBTkQgKGMyID0gMSkgQU5EIChjNCA9IDEpKQorICAgRmlsdGVyOiAoYzMgPSAxKQorKDMg cm93cykKKworLS0gSGFjazogc2V0IHRoZSBiYWQgaW5kZXggdG8gdGhlIGZpcnN0IHBvc2l0 aW9uIGluIHRoZSBpbmRleCBsaXN0LgorRFJPUCBJTkRFWCBiYWQ7CitDUkVBVEUgSU5ERVgg YmFkIE9OIHQgKGMxLGMyLGMzKTsKK0FOQUxZWkUgdDsKK0VYUExBSU4gKENPU1RTIE9GRikg U0VMRUNUICogRlJPTSB0IFdIRVJFIGMxPTEgQU5EIGMyPTEgQU5EIGMzPTEgQU5EIGM0PTE7 CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgSW5kZXggU2NhbiB1c2luZyBnb29kIG9uIHQKKyAgIEluZGV4IENvbmQ6ICgoYzEgPSAx KSBBTkQgKGMyID0gMSkgQU5EIChjNCA9IDEpKQorICAgRmlsdGVyOiAoYzMgPSAxKQorKDMg cm93cykKKworRFJPUCBUQUJMRSB0IENBU0NBREU7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9q b2luLm91dAppbmRleCAyYzczMjcwMTQzLi4zMmIzM2ZhYmQzIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvam9pbi5vdXQKQEAgLTg2MjksMTQgKzg2MjksMTUgQEAgYW5hbHl6ZSBqMjsK IGV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBqMQogaW5uZXIgam9pbiBqMiBv biBqMS5pZDEgPSBqMi5pZDEgYW5kIGoxLmlkMiA9IGoyLmlkMgogd2hlcmUgajEuaWQxICUg MTAwMCA9IDEgYW5kIGoyLmlkMSAlIDEwMDAgPSAxOwotICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogIE1lcmdlIEpvaW4KLSAgIE1lcmdlIENvbmQ6IChqMS5p ZDEgPSBqMi5pZDEpCi0gICBKb2luIEZpbHRlcjogKGoyLmlkMiA9IGoxLmlkMikKLSAgIC0+ ICBJbmRleCBTY2FuIHVzaW5nIGoxX2lkMV9pZHggb24gajEKLSAgIC0+ICBJbmRleCBTY2Fu IHVzaW5nIGoyX2lkMV9pZHggb24gajIKLSg1IHJvd3MpCisgICBNZXJnZSBDb25kOiAoKGox LmlkMSA9IGoyLmlkMSkgQU5EIChqMS5pZDIgPSBqMi5pZDIpKQorICAgLT4gIEluZGV4IE9u bHkgU2NhbiB1c2luZyBqMV9wa2V5IG9uIGoxCisgICAgICAgICBGaWx0ZXI6ICgoaWQxICUg MTAwMCkgPSAxKQorICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBqMl9wa2V5IG9uIGoy CisgICAgICAgICBGaWx0ZXI6ICgoaWQxICUgMTAwMCkgPSAxKQorKDYgcm93cykKIAogc2Vs ZWN0ICogZnJvbSBqMQogaW5uZXIgam9pbiBqMiBvbiBqMS5pZDEgPSBqMi5pZDEgYW5kIGox LmlkMiA9IGoyLmlkMgpAQCAtODY1MSwxNSArODY1MiwxNiBAQCB3aGVyZSBqMS5pZDEgJSAx MDAwID0gMSBhbmQgajIuaWQxICUgMTAwMCA9IDE7CiBleHBsYWluIChjb3N0cyBvZmYpIHNl bGVjdCAqIGZyb20gajEKIGlubmVyIGpvaW4gajIgb24gajEuaWQxID0gajIuaWQxIGFuZCBq MS5pZDIgPSBqMi5pZDIKIHdoZXJlIGoxLmlkMSAlIDEwMDAgPSAxIGFuZCBqMi5pZDEgJSAx MDAwID0gMSBhbmQgajIuaWQxID0gYW55IChhcnJheVsxXSk7Ci0gICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIE1lcmdl IEpvaW4KLSAgIE1lcmdlIENvbmQ6IChqMS5pZDEgPSBqMi5pZDEpCi0gICBKb2luIEZpbHRl cjogKGoyLmlkMiA9IGoxLmlkMikKLSAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGoxX2lkMV9p ZHggb24gajEKLSAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGoyX2lkMV9pZHggb24gajIKKyAg IE1lcmdlIENvbmQ6ICgoajEuaWQxID0gajIuaWQxKSBBTkQgKGoxLmlkMiA9IGoyLmlkMikp CisgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGoxX3BrZXkgb24gajEKKyAgICAgICAg IEZpbHRlcjogKChpZDEgJSAxMDAwKSA9IDEpCisgICAtPiAgSW5kZXggT25seSBTY2FuIHVz aW5nIGoyX3BrZXkgb24gajIKICAgICAgICAgIEluZGV4IENvbmQ6IChpZDEgPSBBTlkgKCd7 MX0nOjppbnRlZ2VyW10pKQotKDYgcm93cykKKyAgICAgICAgIEZpbHRlcjogKChpZDEgJSAx MDAwKSA9IDEpCisoNyByb3dzKQogCiBzZWxlY3QgKiBmcm9tIGoxCiBpbm5lciBqb2luIGoy IG9uIGoxLmlkMSA9IGoyLmlkMSBhbmQgajEuaWQyID0gajIuaWQyCkBAIC04Njc0LDEyICs4 Njc2LDEyIEBAIHdoZXJlIGoxLmlkMSAlIDEwMDAgPSAxIGFuZCBqMi5pZDEgJSAxMDAwID0g MSBhbmQgajIuaWQxID0gYW55IChhcnJheVsxXSk7CiBleHBsYWluIChjb3N0cyBvZmYpIHNl bGVjdCAqIGZyb20gajEKIGlubmVyIGpvaW4gajIgb24gajEuaWQxID0gajIuaWQxIGFuZCBq MS5pZDIgPSBqMi5pZDIKIHdoZXJlIGoxLmlkMSAlIDEwMDAgPSAxIGFuZCBqMi5pZDEgJSAx MDAwID0gMSBhbmQgajIuaWQxID49IGFueSAoYXJyYXlbMSw1XSk7Ci0gICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogIE1lcmdlIEpvaW4KLSAgIE1lcmdlIENvbmQ6IChqMS5pZDEgPSBqMi5pZDEpCi0gICBK b2luIEZpbHRlcjogKGoyLmlkMiA9IGoxLmlkMikKLSAgIC0+ICBJbmRleCBTY2FuIHVzaW5n IGoxX2lkMV9pZHggb24gajEKKyAgIE1lcmdlIENvbmQ6ICgoajEuaWQxID0gajIuaWQxKSBB TkQgKGoxLmlkMiA9IGoyLmlkMikpCisgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGox X3BrZXkgb24gajEKKyAgICAgICAgIEZpbHRlcjogKChpZDEgJSAxMDAwKSA9IDEpCiAgICAt PiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGoyX3BrZXkgb24gajIKICAgICAgICAgIEluZGV4 IENvbmQ6IChpZDEgPj0gQU5ZICgnezEsNX0nOjppbnRlZ2VyW10pKQogICAgICAgICAgRmls dGVyOiAoKGlkMSAlIDEwMDApID0gMSkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2Z1bmN0aW9uYWxfZGVwcy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mdW5jdGlv bmFsX2RlcHMuc3FsCmluZGV4IDQwNjQ5MGI5OTUuLjFiZTAwOWIxZmYgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Z1bmN0aW9uYWxfZGVwcy5zcWwKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvZnVuY3Rpb25hbF9kZXBzLnNxbApAQCAtMjA4LDMgKzIwOCwzNSBA QCBFWEVDVVRFIGZvbzsKIEFMVEVSIFRBQkxFIGFydGljbGVzIERST1AgQ09OU1RSQUlOVCBh cnRpY2xlc19wa2V5IFJFU1RSSUNUOwogCiBFWEVDVVRFIGZvbzsgIC0tIGZhaWwKKworLyoK KyAqIENvcm5lciBjYXNlIG9mIHRoZSBQb3N0Z3JlU1FMIG9wdGltaXplcjoKKyAqCisgKiBB TkRlZCBjbGF1c2VzIHNlbGVjdGl2aXR5IG11bHRpcGxpY2F0aW9uIGluY3JlYXNlcyB0b3Rh bCBzZWxlY3Rpdml0eSBlcnJvci4KKyAqIElmIHN1Y2ggbm9uLXRydWUgc2VsZWN0aXZpdHkg aXMgc28gdGlueSB0aGF0IHJvdyBlc3RpbWF0aW9uIHByZWRpY3RzIHRoZQorICogYWJzb2x1 dGUgbWluaW11bSBudW1iZXIgb2YgdHVwbGVzICgxKSwgdGhlIG9wdGltaXplciBjYW4ndCBj aG9vc2UgYmV0d2VlbgorICogZGlmZmVyZW50IGluZGV4ZXMgYW5kIHBpY2tzIGEgZmlyc3Qg ZnJvbSB0aGUgaW5kZXggbGlzdCAobGFzdCBjcmVhdGVkKS4KKyAqLworCitDUkVBVEUgVEFC TEUgdCBBUyAoICAtLSBzZWxlY3Rpdml0eShjMSkqc2VsZWN0aXZpdHkoYzIpKm5yb3dzIDw9 IDEKKyAgICBTRUxFQ1QgIGdzIEFTIGMxLAorICAgICAgICAgICAgZ3MgQVMgYzIsCisgICAg ICAgICAgICAoZ3MgJSAxMCkgQVMgYzMsIC0tIG5vdCBpbiB0aGUgZ29vZCBpbmRleC4KKyAg ICAgICAgICAgIChncyAlIDEwMCkgQVMgYzQgLS0gbm90IGluIHRoZSBiYWQgaW5kZXguCisg ICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBBUyBncworKTsKKworQ1JFQVRFIElO REVYIGJhZCBPTiB0IChjMSxjMixjMyk7CitDUkVBVEUgSU5ERVggZ29vZCBPTiB0IChjMSxj MixjNCk7CitBTkFMWVpFIHQ7CisKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJP TSB0IFdIRVJFIGMxPTEgQU5EIGMyPTEgQU5EIGMzPTEgQU5EIGM0PTE7CisKKy0tIEhhY2s6 IHNldCB0aGUgYmFkIGluZGV4IHRvIHRoZSBmaXJzdCBwb3NpdGlvbiBpbiB0aGUgaW5kZXgg bGlzdC4KK0RST1AgSU5ERVggYmFkOworQ1JFQVRFIElOREVYIGJhZCBPTiB0IChjMSxjMixj Myk7CitBTkFMWVpFIHQ7CisKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSB0 IFdIRVJFIGMxPTEgQU5EIGMyPTEgQU5EIGMzPTEgQU5EIGM0PTE7CisKK0RST1AgVEFCTEUg dCBDQVNDQURFOwotLSAKMi40My4wCgo= --------------Lsh23fPGUR1FtPlI0gWgtvdJ--