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 1sJNwn-004ZC5-GX for pgsql-hackers@arkaria.postgresql.org; Tue, 18 Jun 2024 01:47:45 +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 1sJNwk-005rW9-7s for pgsql-hackers@arkaria.postgresql.org; Tue, 18 Jun 2024 01:47:43 +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 1sJNwj-005rTo-JH for pgsql-hackers@lists.postgresql.org; Tue, 18 Jun 2024 01:47:42 +0000 Received: from mail-yb1-xb34.google.com ([2607:f8b0:4864:20::b34]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sJNwh-001pxA-Vs for pgsql-hackers@postgresql.org; Tue, 18 Jun 2024 01:47:41 +0000 Received: by mail-yb1-xb34.google.com with SMTP id 3f1490d57ef6-dff26b612a9so2484202276.1 for ; Mon, 17 Jun 2024 18:47:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718675259; x=1719280059; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=bHmP3S3lj/1QTZkuv/OfAFZmIWhiqAgSSw6DFcsz5Jw=; b=KPluSwwbRakU1IaWbIeD52D+4s6CKNalXmmFGi/Euz4E7Y/lB2hyvp0I1xxxCDueb9 fU+wEkKcN6bH110blTsGm98YuPX3P411fWjvMYbc+Go2qn5w+UwyTlMoMiOkpku9X3W4 q2VOlKuSFL/zWlqi5hribG4BdVt9WbIMfUV8/btLKrdYDJsp+fpmXnSxca5yu0t+Dg71 lKBpCi6mu+V7FVK4gl+SekZMis+OhmhWs31yrqOv2zmi1CKk43KqNPXevipyf/xM9RGY sh9xbOxBckwliF+ePP6hDiJ/XJbeQqHvfP7MsgG5H/2e1mVfDs7B+xvGjQuZWFgD3zIx igYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718675259; x=1719280059; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=bHmP3S3lj/1QTZkuv/OfAFZmIWhiqAgSSw6DFcsz5Jw=; b=jn8W0XfdxSDUG0ujnV4PneLY/QL3geivWwmcCgJtK9MQsRP92mkPhYCUpdP01GUoIk h3XO1/eLn0GFjbcDZUi0rEC7/QaA5YtUQaajNKv61RDjvu1ezF4HY61VYcmalCLNK9ns AXKHbhVU+cfaWDFqahH3cXRuS24px/IMZg0jPfD1yNyA2Ky48PDhAQZ0r/qjLb9tLgoL o94rX87yzgCYNuga72oK4yGOthygD2Q+S4/bAvq5RDw/hi8Fr86CzBIcPdehrHRIgFJq XkHH/FmWAgmXBbCh+EEjnR2No+jARk3QUl0z2Q0SFAMJ7yD4hitMA61OGan97WEphauP doOg== X-Gm-Message-State: AOJu0YyxjcQwU2D/CQVuyN7GNItYyBn/xsxxmDP2ZoJy2dHX2iKKW5EW m/668sdZshiJl786AKqIf3ojCkxQKrxXg16d68IpHv7tUjQxced9BB+cXEqaQNV3rVWL27ldeUd Fwfg2f51NSE2O9CqTFJKa4WKjXwY= X-Google-Smtp-Source: AGHT+IE2RlGvUqWtriuyrQolnaS/HedeWH5pKXa0zgyfK07d8YYi2iOMgdintEu1ZYx99z/nfN1VyHUb9wXoTDarWaQ= X-Received: by 2002:a25:ae84:0:b0:dfb:16f5:9e06 with SMTP id 3f1490d57ef6-dff1549c2d5mr9370582276.51.1718675259002; Mon, 17 Jun 2024 18:47:39 -0700 (PDT) MIME-Version: 1.0 References: <1724688.1688837323@sss.pgh.pa.us> In-Reply-To: From: Richard Guo Date: Tue, 18 Jun 2024 09:47:27 +0800 Message-ID: Subject: Re: Check lateral references within PHVs for memoize cache keys To: Tom Lane Cc: PostgreSQL-development , David Rowley Content-Type: multipart/mixed; boundary="0000000000004c8138061b2044c9" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004c8138061b2044c9 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Mar 18, 2024 at 4:36=E2=80=AFPM Richard Guo wrote: > Here is another rebase over master so it applies again. I also added a > commit message to help review. Nothing else has changed. AFAIU currently we do not add Memoize nodes on top of join relation paths. This is because the ParamPathInfos for join relation paths do not maintain ppi_clauses, as the set of relevant clauses varies depending on how the join is formed. In addition, joinrels do not maintain lateral_vars. So we do not have a way to extract cache keys from joinrels. (Besides, there are places where the code doesn't cope with Memoize path on top of a joinrel path, such as in get_param_path_clause_serials.) Therefore, when extracting lateral references within PlaceHolderVars, there is no need to consider those that are due to be evaluated at joinrels. Hence, here is v7 patch for that. In passing, this patch also includes a comment explaining that Memoize nodes are currently not added on top of join relation paths (maybe we should have a separate patch for this?). Thanks Richard --0000000000004c8138061b2044c9 Content-Type: application/octet-stream; name="v7-0001-Check-lateral-refs-within-PHVs-for-memoize-cache-keys.patch" Content-Disposition: attachment; filename="v7-0001-Check-lateral-refs-within-PHVs-for-memoize-cache-keys.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lxjqv0fw0 RnJvbSA2OGM4ODM4MDYxMjEzZGE4YWJkZDU0YTYwMmRhNDBjN2VkNWM5OGE4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogTW9uLCAxNyBKdW4gMjAyNCAxMjozMjowMCArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjdd IENoZWNrIGxhdGVyYWwgcmVmcyB3aXRoaW4gUEhWcyBmb3IgbWVtb2l6ZSBjYWNoZSBrZXlzCgpJ ZiB3ZSBpbnRlbmQgdG8gZ2VuZXJhdGUgYSBtZW1vaXplIG5vZGUgb24gdG9wIG9mIGEgcGF0aCwg d2UgbmVlZCBjYWNoZQprZXlzIG9mIHNvbWUgc29ydC4gIEN1cnJlbnRseSB3ZSBzZWFyY2ggZm9y IHRoZSBjYWNoZSBrZXlzIGluIHRoZQpwYXJhbWV0ZXJpemVkIGNsYXVzZXMgb2YgdGhlIHBhdGgg YXMgd2VsbCBhcyB0aGUgbGF0ZXJhbF92YXJzIG9mIGl0cwpwYXJlbnQuICBIb3dldmVyLCBpdCB0 dXJucyBvdXQgdGhhdCB0aGlzIGlzIG5vdCBzdWZmaWNpZW50IGJlY2F1c2UgdGhlaXIKbWlnaHQg YmUgbGF0ZXJhbCByZWZlcmVuY2VzIGRlcml2ZWQgZnJvbSBQbGFjZUhvbGRlclZhcnMsIHdoaWNo IHdlIGZhaWwKdG8gdGFrZSBpbnRvIGNvbnNpZGVyYXRpb24uCgpUaGlzIG92ZXJzaWdodCBjYW4g Y2F1c2UgdXMgdG8gbWlzcyBvcHBvcnR1bml0aWVzIHRvIHV0aWxpemUgdGhlIE1lbW9pemUKbm9k ZS4gIE1vcmVvdmVyLCBpbiBzb21lIHBsYW5zLCB0aGUgZmFpbHVyZSB0byByZWNvZ25pemUgYWxs IHRoZSBjYWNoZQprZXlzIGNvdWxkIHJlc3VsdCBpbiBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucy4g IFRoaXMgaXMgYmVjYXVzZSB3aXRob3V0CmlkZW50aWZ5aW5nIGFsbCB0aGUgY2FjaGUga2V5cywg d2Ugd291bGQgbmVlZCB0byBwdXJnZSB0aGUgZW50aXJlIGNhY2hlCmV2ZXJ5IHRpbWUgd2UgZ2V0 IGEgbmV3IG91dGVyIHR1cGxlIGR1cmluZyBleGVjdXRpb24uCgpUaGlzIHBhdGNoIGZpeGVzIHRo aXMgaXNzdWUgYnkgZXh0cmFjdGluZyBsYXRlcmFsIFZhcnMgZnJvbSB3aXRoaW4KUGxhY2VIb2xk ZXJWYXJzIGFuZCBzdWJzZXF1ZW50bHkgaW5jbHVkaW5nIHRoZW0gaW4gdGhlIGNhY2hlIGtleXMu CgpUaGlzIHBhdGNoIGFsc28gaW5jbHVkZXMgYSBjb21tZW50IGNsYXJpZnlpbmcgdGhhdCBNZW1v aXplIG5vZGVzIGFyZQpjdXJyZW50bHkgbm90IGFkZGVkIG9uIHRvcCBvZiBqb2luIHJlbGF0aW9u IHBhdGhzLiAgVGhpcyBleHBsYWlucyB3aHkKdGhpcyBwYXRjaCBvbmx5IGNvbnNpZGVycyBQSFZz IHRoYXQgYXJlIGR1ZSB0byBiZSBldmFsdWF0ZWQgYXQgYmFzZXJlbHMuCi0tLQogLi4uL3Bvc3Rn cmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0ICAgIHwgMTIgKystCiBzcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jICAgICAgICAgfCA5OCArKysrKysrKysrKysrKysr KystCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL21lbW9pemUub3V0ICAgICAgICAgfCA2MyAr KysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21lbW9pemUuc3FsICAgICAgICAgICAg ICB8IDI0ICsrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDE4OSBpbnNlcnRpb25zKCspLCA4IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3Rn cmVzX2Zkdy5vdXQgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcu b3V0CmluZGV4IGVhNTY2ZDUwMzQuLjhjZjIyMmNhY2EgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9z dGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQKKysrIGIvY29udHJpYi9wb3N0Z3Jl c19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dApAQCAtMzc3NCwxNSArMzc3NCwxOSBAQCBP UkRFUiBCWSByZWZfMC4iQyAxIjsKICAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHQxX3Br ZXkgb24gIlMgMSIuIlQgMSIgcmVmXzAKICAgICAgICAgICAgICAgIE91dHB1dDogcmVmXzAuIkMg MSIsIHJlZl8wLmMyLCByZWZfMC5jMywgcmVmXzAuYzQsIHJlZl8wLmM1LCByZWZfMC5jNiwgcmVm XzAuYzcsIHJlZl8wLmM4CiAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAocmVmXzAuIkMgMSIg PCAxMCkKLSAgICAgICAgIC0+ICBGb3JlaWduIFNjYW4gb24gcHVibGljLmZ0MSByZWZfMQotICAg ICAgICAgICAgICAgT3V0cHV0OiByZWZfMS5jMywgcmVmXzAuYzIKLSAgICAgICAgICAgICAgIFJl bW90ZSBTUUw6IFNFTEVDVCBjMyBGUk9NICJTIDEiLiJUIDEiIFdIRVJFICgoYzMgPSAnMDAwMDEn KSkKKyAgICAgICAgIC0+ICBNZW1vaXplCisgICAgICAgICAgICAgICBPdXRwdXQ6IHJlZl8xLmMz LCAocmVmXzAuYzIpCisgICAgICAgICAgICAgICBDYWNoZSBLZXk6IHJlZl8wLmMyCisgICAgICAg ICAgICAgICBDYWNoZSBNb2RlOiBiaW5hcnkKKyAgICAgICAgICAgICAgIC0+ICBGb3JlaWduIFNj YW4gb24gcHVibGljLmZ0MSByZWZfMQorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiByZWZf MS5jMywgcmVmXzAuYzIKKyAgICAgICAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBj MyBGUk9NICJTIDEiLiJUIDEiIFdIRVJFICgoYzMgPSAnMDAwMDEnKSkKICAgIC0+ICBNYXRlcmlh bGl6ZQogICAgICAgICAgT3V0cHV0OiByZWZfMy5jMwogICAgICAgICAgLT4gIEZvcmVpZ24gU2Nh biBvbiBwdWJsaWMuZnQyIHJlZl8zCiAgICAgICAgICAgICAgICBPdXRwdXQ6IHJlZl8zLmMzCiAg ICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYzMgRlJPTSAiUyAxIi4iVCAxIiBXSEVS RSAoKGMzID0gJzAwMDAxJykpCi0oMTUgcm93cykKKygxOSByb3dzKQogCiBTRUxFQ1QgcmVmXzAu YzIsIHN1YnFfMS4qCiBGUk9NCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9qb2lucGF0aC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnBhdGguYwppbmRl eCA1YmU4ZGE5ZTA5Li5lYjYxYmIwOTZkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9qb2lucGF0aC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5w YXRoLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgi CiAjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhub2RlLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3Bh dGhzLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3BsYWNlaG9sZGVyLmgiCiAjaW5jbHVkZSAib3B0 aW1pemVyL3BsYW5tYWluLmgiCiAjaW5jbHVkZSAidXRpbHMvdHlwY2FjaGUuaCIKIApAQCAtNDM4 LDEwICs0MzksMTEgQEAgaGF2ZV91bnNhZmVfb3V0ZXJfam9pbl9yZWYoUGxhbm5lckluZm8gKnJv b3QsCiBzdGF0aWMgYm9vbAogcGFyYW1pbmZvX2dldF9lcXVhbF9oYXNob3BzKFBsYW5uZXJJbmZv ICpyb290LCBQYXJhbVBhdGhJbmZvICpwYXJhbV9pbmZvLAogCQkJCQkJCVJlbE9wdEluZm8gKm91 dGVycmVsLCBSZWxPcHRJbmZvICppbm5lcnJlbCwKLQkJCQkJCQlMaXN0ICoqcGFyYW1fZXhwcnMs IExpc3QgKipvcGVyYXRvcnMsCi0JCQkJCQkJYm9vbCAqYmluYXJ5X21vZGUpCisJCQkJCQkJTGlz dCAqcGhfbGF0ZXJhbF92YXJzLCBMaXN0ICoqcGFyYW1fZXhwcnMsCisJCQkJCQkJTGlzdCAqKm9w ZXJhdG9ycywgYm9vbCAqYmluYXJ5X21vZGUpCiAKIHsKKwlMaXN0CSAgICpsYXRlcmFsX3ZhcnM7 CiAJTGlzdENlbGwgICAqbGM7CiAKIAkqcGFyYW1fZXhwcnMgPSBOSUw7CkBAIC01MjEsNyArNTIz LDggQEAgcGFyYW1pbmZvX2dldF9lcXVhbF9oYXNob3BzKFBsYW5uZXJJbmZvICpyb290LCBQYXJh bVBhdGhJbmZvICpwYXJhbV9pbmZvLAogCX0KIAogCS8qIE5vdyBhZGQgYW55IGxhdGVyYWwgdmFy cyB0byB0aGUgY2FjaGUga2V5IHRvbyAqLwotCWZvcmVhY2gobGMsIGlubmVycmVsLT5sYXRlcmFs X3ZhcnMpCisJbGF0ZXJhbF92YXJzID0gbGlzdF9jb25jYXQocGhfbGF0ZXJhbF92YXJzLCBpbm5l cnJlbC0+bGF0ZXJhbF92YXJzKTsKKwlmb3JlYWNoKGxjLCBsYXRlcmFsX3ZhcnMpCiAJewogCQlO b2RlCSAgICpleHByID0gKE5vZGUgKikgbGZpcnN0KGxjKTsKIAkJVHlwZUNhY2hlRW50cnkgKnR5 cGVudHJ5OwpAQCAtNTcyLDEwICs1NzUsODggQEAgcGFyYW1pbmZvX2dldF9lcXVhbF9oYXNob3Bz KFBsYW5uZXJJbmZvICpyb290LCBQYXJhbVBhdGhJbmZvICpwYXJhbV9pbmZvLAogCXJldHVybiB0 cnVlOwogfQogCisvKgorICogZXh0cmFjdF9sYXRlcmFsX3ZhcnNfZnJvbV9QSFZzCisgKgkgIEV4 dHJhY3QgbGF0ZXJhbCByZWZlcmVuY2VzIHdpdGhpbiBQbGFjZUhvbGRlclZhcnMgdGhhdCBhcmUg ZHVlIHRvIGJlCisgKgkgIGV2YWx1YXRlZCBhdCAnaW5uZXJyZWxpZHMnLgorICovCitzdGF0aWMg TGlzdCAqCitleHRyYWN0X2xhdGVyYWxfdmFyc19mcm9tX1BIVnMoUGxhbm5lckluZm8gKnJvb3Qs IFJlbGlkcyBpbm5lcnJlbGlkcykKK3sKKwlMaXN0CSAgICpwaF9sYXRlcmFsX3ZhcnMgPSBOSUw7 CisJTGlzdENlbGwgICAqbGM7CisKKwkvKiBOb3RoaW5nIHdvdWxkIGJlIGZvdW5kIGlmIHRoZSBx dWVyeSBjb250YWlucyBubyBMQVRFUkFMIFJURXMgKi8KKwlpZiAoIXJvb3QtPmhhc0xhdGVyYWxS VEVzKQorCQlyZXR1cm4gTklMOworCisJLyoKKwkgKiBObyBuZWVkIHRvIGNvbnNpZGVyIFBIVnMg dGhhdCBhcmUgZHVlIHRvIGJlIGV2YWx1YXRlZCBhdCBqb2lucmVscywgc2luY2UKKwkgKiB3ZSBk byBub3QgYWRkIE1lbW9pemUgbm9kZXMgb24gdG9wIG9mIGpvaW5yZWwgcGF0aHMuCisJICovCisJ aWYgKGJtc19tZW1iZXJzaGlwKGlubmVycmVsaWRzKSA9PSBCTVNfTVVMVElQTEUpCisJCXJldHVy biBOSUw7CisKKwlmb3JlYWNoKGxjLCByb290LT5wbGFjZWhvbGRlcl9saXN0KQorCXsKKwkJUGxh Y2VIb2xkZXJJbmZvICpwaGluZm8gPSAoUGxhY2VIb2xkZXJJbmZvICopIGxmaXJzdChsYyk7CisJ CUxpc3QJICAgKnZhcnM7CisJCUxpc3RDZWxsICAgKmNlbGw7CisKKwkJLyogUEhWIGlzIHVuaW50 ZXJlc3RpbmcgaWYgbm8gbGF0ZXJhbCByZWZzICovCisJCWlmIChwaGluZm8tPnBoX2xhdGVyYWwg PT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCS8qIFBIViBpcyB1bmludGVyZXN0aW5nIGlmIG5v dCBkdWUgdG8gYmUgZXZhbHVhdGVkIGF0IGlubmVycmVsaWRzICovCisJCWlmICghYm1zX2VxdWFs KHBoaW5mby0+cGhfZXZhbF9hdCwgaW5uZXJyZWxpZHMpKQorCQkJY29udGludWU7CisKKwkJLyog RmV0Y2ggVmFycyBhbmQgUEhWcyBvZiBsYXRlcmFsIHJlZmVyZW5jZXMgd2l0aGluIFBsYWNlSG9s ZGVyVmFycyAqLworCQl2YXJzID0gcHVsbF92YXJzX29mX2xldmVsKChOb2RlICopIHBoaW5mby0+ cGhfdmFyLT5waGV4cHIsIDApOworCQlmb3JlYWNoKGNlbGwsIHZhcnMpCisJCXsKKwkJCU5vZGUJ ICAgKm5vZGUgPSAoTm9kZSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJCW5vZGUgPSBjb3B5T2JqZWN0 KG5vZGUpOworCQkJaWYgKElzQShub2RlLCBWYXIpKQorCQkJeworCQkJCVZhcgkJICAgKnZhciA9 IChWYXIgKikgbm9kZTsKKworCQkJCUFzc2VydCh2YXItPnZhcmxldmVsc3VwID09IDApOworCisJ CQkJaWYgKGJtc19pc19tZW1iZXIodmFyLT52YXJubywgcGhpbmZvLT5waF9sYXRlcmFsKSkKKwkJ CQkJcGhfbGF0ZXJhbF92YXJzID0gbGFwcGVuZChwaF9sYXRlcmFsX3ZhcnMsIG5vZGUpOworCQkJ fQorCQkJZWxzZSBpZiAoSXNBKG5vZGUsIFBsYWNlSG9sZGVyVmFyKSkKKwkJCXsKKwkJCQlQbGFj ZUhvbGRlclZhciAqcGh2ID0gKFBsYWNlSG9sZGVyVmFyICopIG5vZGU7CisKKwkJCQlBc3NlcnQo cGh2LT5waGxldmVsc3VwID09IDApOworCisJCQkJaWYgKGJtc19pc19zdWJzZXQoZmluZF9wbGFj ZWhvbGRlcl9pbmZvKHJvb3QsIHBodiktPnBoX2V2YWxfYXQsCisJCQkJCQkJCSAgcGhpbmZvLT5w aF9sYXRlcmFsKSkKKwkJCQkJcGhfbGF0ZXJhbF92YXJzID0gbGFwcGVuZChwaF9sYXRlcmFsX3Zh cnMsIG5vZGUpOworCQkJfQorCQkJZWxzZQorCQkJCUFzc2VydChmYWxzZSk7CisJCX0KKworCQls aXN0X2ZyZWUodmFycyk7CisJfQorCisJcmV0dXJuIHBoX2xhdGVyYWxfdmFyczsKK30KKwogLyoK ICAqIGdldF9tZW1vaXplX3BhdGgKICAqCQlJZiBwb3NzaWJsZSwgbWFrZSBhbmQgcmV0dXJuIGEg TWVtb2l6ZSBwYXRoIGF0b3Agb2YgJ2lubmVyX3BhdGgnLgogICoJCU90aGVyd2lzZSByZXR1cm4g TlVMTC4KKyAqCisgKiBOb3RlIHRoYXQgY3VycmVudGx5IHdlIGRvIG5vdCBhZGQgTWVtb2l6ZSBu b2RlcyBvbiB0b3Agb2Ygam9pbiByZWxhdGlvbgorICogcGF0aHMuICBUaGlzIGlzIGJlY2F1c2Ug dGhlIFBhcmFtUGF0aEluZm9zIGZvciBqb2luIHJlbGF0aW9uIHBhdGhzIGRvIG5vdAorICogbWFp bnRhaW4gcHBpX2NsYXVzZXMsIGFzIHRoZSBzZXQgb2YgcmVsZXZhbnQgY2xhdXNlcyB2YXJpZXMg ZGVwZW5kaW5nIG9uIGhvdworICogdGhlIGpvaW4gaXMgZm9ybWVkLiAgSW4gYWRkaXRpb24sIGpv aW5yZWxzIGRvIG5vdCBtYWludGFpbiBsYXRlcmFsX3ZhcnMuICBTbworICogd2UgZG8gbm90IGhh dmUgYSB3YXkgdG8gZXh0cmFjdCBjYWNoZSBrZXlzIGZyb20gam9pbnJlbHMuCiAgKi8KIHN0YXRp YyBQYXRoICoKIGdldF9tZW1vaXplX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KmlubmVycmVsLApAQCAtNTg3LDYgKzY2OCw3IEBAIGdldF9tZW1vaXplX3BhdGgoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKmlubmVycmVsLAogCUxpc3QJICAgKmhhc2hfb3BlcmF0b3Jz OwogCUxpc3RDZWxsICAgKmxjOwogCWJvb2wJCWJpbmFyeV9tb2RlOworCUxpc3QJICAgKnBoX2xh dGVyYWxfdmFyczsKIAogCS8qIE9idmlvdXNseSBub3QgaWYgaXQncyBkaXNhYmxlZCAqLwogCWlm ICghZW5hYmxlX21lbW9pemUpCkBAIC02MDEsNiArNjgzLDEyIEBAIGdldF9tZW1vaXplX3BhdGgo UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlubmVycmVsLAogCWlmIChvdXRlcl9wYXRo LT5wYXJlbnQtPnJvd3MgPCAyKQogCQlyZXR1cm4gTlVMTDsKIAorCS8qCisJICogRXh0cmFjdCBs YXRlcmFsIFZhcnMgd2l0aGluIFBsYWNlSG9sZGVyVmFycyB0aGF0IGFyZSBkdWUgdG8gYmUgZXZh bHVhdGVkCisJICogYXQgaW5uZXJyZWwuICBUaGVzZSBsYXRlcmFsIFZhcnMgY291bGQgYmUgdXNl ZCBhcyBtZW1vaXplIGNhY2hlIGtleXMuCisJICovCisJcGhfbGF0ZXJhbF92YXJzID0gZXh0cmFj dF9sYXRlcmFsX3ZhcnNfZnJvbV9QSFZzKHJvb3QsIGlubmVycmVsLT5yZWxpZHMpOworCiAJLyoK IAkgKiBXZSBjYW4gb25seSBoYXZlIGEgbWVtb2l6ZSBub2RlIHdoZW4gdGhlcmUncyBzb21lIGtp bmQgb2YgY2FjaGUga2V5LAogCSAqIGVpdGhlciBwYXJhbWV0ZXJpemVkIHBhdGggY2xhdXNlcyBv ciBsYXRlcmFsIFZhcnMuICBObyBjYWNoZSBrZXkgc291bmRzCkBAIC02MDgsNyArNjk2LDggQEAg Z2V0X21lbW9pemVfcGF0aChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5uZXJyZWws CiAJICovCiAJaWYgKChpbm5lcl9wYXRoLT5wYXJhbV9pbmZvID09IE5VTEwgfHwKIAkJIGlubmVy X3BhdGgtPnBhcmFtX2luZm8tPnBwaV9jbGF1c2VzID09IE5JTCkgJiYKLQkJaW5uZXJyZWwtPmxh dGVyYWxfdmFycyA9PSBOSUwpCisJCWlubmVycmVsLT5sYXRlcmFsX3ZhcnMgPT0gTklMICYmCisJ CXBoX2xhdGVyYWxfdmFycyA9PSBOSUwpCiAJCXJldHVybiBOVUxMOwogCiAJLyoKQEAgLTY5NSw2 ICs3ODQsNyBAQCBnZXRfbWVtb2l6ZV9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICppbm5lcnJlbCwKIAkJCQkJCQkJCW91dGVycmVsLT50b3BfcGFyZW50ID8KIAkJCQkJCQkJCW91 dGVycmVsLT50b3BfcGFyZW50IDogb3V0ZXJyZWwsCiAJCQkJCQkJCQlpbm5lcnJlbCwKKwkJCQkJ CQkJCXBoX2xhdGVyYWxfdmFycywKIAkJCQkJCQkJCSZwYXJhbV9leHBycywKIAkJCQkJCQkJCSZo YXNoX29wZXJhdG9ycywKIAkJCQkJCQkJCSZiaW5hcnlfbW9kZSkpCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL21lbW9pemUub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9tZW1vaXplLm91dAppbmRleCAwZmQxMDNjMDZiLi40YzJhMzdiZjk3IDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL21lbW9pemUub3V0CisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvbWVtb2l6ZS5vdXQKQEAgLTEyOSw2ICsxMjksNjkgQEAgV0hFUkUgdDEu dW5pcXVlMSA8IDEwOwogICAgIDIwIHwgMC41MDAwMDAwMDAwMDAwMDAwMDAwMAogKDEgcm93KQog CistLSBUcnkgd2l0aCBMQVRFUkFMIHJlZmVyZW5jZXMgd2l0aGluIFBsYWNlSG9sZGVyVmFycyBh dCBhIGJhc2VyZWwKK1NFTEVDVCBleHBsYWluX21lbW9pemUoJworU0VMRUNUIENPVU5UKCopLCBB VkcodDEudHdlbnR5KSBGUk9NIHRlbmsxIHQxIExFRlQgSk9JTgorTEFURVJBTCAoU0VMRUNUIHQx LnR3ZW50eSBBUyBjMSwgdDIudW5pcXVlMSBBUyBjMiBGUk9NIHRlbmsxIHQyKSBzIE9OIFRSVUUK K1dIRVJFIHMuYzEgPSBzLmMyIEFORCB0MS51bmlxdWUxIDwgMTAwMDsnLCBmYWxzZSk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxhaW5fbWVtb2l6ZSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQWdncmVnYXRlIChhY3R1YWwgcm93cz0xIGxvb3BzPU4pCisgICAtPiAgTmVz dGVkIExvb3AgKGFjdHVhbCByb3dzPTEwMDAgbG9vcHM9TikKKyAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiB0ZW5rMSB0MSAoYWN0dWFsIHJvd3M9MTAwMCBsb29wcz1OKQorICAgICAgICAgICAgICAg RmlsdGVyOiAodW5pcXVlMSA8IDEwMDApCisgICAgICAgICAgICAgICBSb3dzIFJlbW92ZWQgYnkg RmlsdGVyOiA5MDAwCisgICAgICAgICAtPiAgTWVtb2l6ZSAoYWN0dWFsIHJvd3M9MSBsb29wcz1O KQorICAgICAgICAgICAgICAgQ2FjaGUgS2V5OiB0MS50d2VudHkKKyAgICAgICAgICAgICAgIENh Y2hlIE1vZGU6IGJpbmFyeQorICAgICAgICAgICAgICAgSGl0czogOTgwICBNaXNzZXM6IDIwICBF dmljdGlvbnM6IFplcm8gIE92ZXJmbG93czogMCAgTWVtb3J5IFVzYWdlOiBOa0IKKyAgICAgICAg ICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgdGVuazFfdW5pcXVlMSBvbiB0ZW5rMSB0 MiAoYWN0dWFsIHJvd3M9MSBsb29wcz1OKQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAo dDEudHdlbnR5ID0gdW5pcXVlMSkKKyAgICAgICAgICAgICAgICAgICAgIFJvd3MgUmVtb3ZlZCBi eSBGaWx0ZXI6IDk5OTkKKyAgICAgICAgICAgICAgICAgICAgIEhlYXAgRmV0Y2hlczogTgorKDEz IHJvd3MpCisKKy0tIEFuZCBjaGVjayB3ZSBnZXQgdGhlIGV4cGVjdGVkIHJlc3VsdHMuCitTRUxF Q1QgQ09VTlQoKiksIEFWRyh0MS50d2VudHkpIEZST00gdGVuazEgdDEgTEVGVCBKT0lOCitMQVRF UkFMIChTRUxFQ1QgdDEudHdlbnR5IEFTIGMxLCB0Mi51bmlxdWUxIEFTIGMyIEZST00gdGVuazEg dDIpIHMgT04gVFJVRQorV0hFUkUgcy5jMSA9IHMuYzIgQU5EIHQxLnVuaXF1ZTEgPCAxMDAwOwor IGNvdW50IHwgICAgICAgIGF2ZyAgICAgICAgIAorLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LQorICAxMDAwIHwgOS41MDAwMDAwMDAwMDAwMDAwCisoMSByb3cpCisKKy0tIEVuc3VyZSB3ZSBk byBub3Qgb21pdCB0aGUgY2FjaGUga2V5cyBmcm9tIFBsYWNlSG9sZGVyVmFycworU0VMRUNUIGV4 cGxhaW5fbWVtb2l6ZSgnCitTRUxFQ1QgQ09VTlQoKiksIEFWRyh0MS50d2VudHkpIEZST00gdGVu azEgdDEgTEVGVCBKT0lOCitMQVRFUkFMIChTRUxFQ1QgdDEudHdlbnR5IEFTIGMxLCB0Mi51bmlx dWUxIEFTIGMyLCB0Mi50d28gRlJPTSB0ZW5rMSB0MikgcworT04gdDEudHdvID0gcy50d28KK1dI RVJFIHMuYzEgPSBzLmMyIEFORCB0MS51bmlxdWUxIDwgMTAwMDsnLCBmYWxzZSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBsYWluX21lbW9pemUgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEFnZ3JlZ2F0ZSAoYWN0dWFsIHJvd3M9MSBsb29wcz1OKQorICAgLT4gIE5lc3RlZCBMb29wIChh Y3R1YWwgcm93cz0xMDAwIGxvb3BzPU4pCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGVuazEg dDEgKGFjdHVhbCByb3dzPTEwMDAgbG9vcHM9TikKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHVu aXF1ZTEgPCAxMDAwKQorICAgICAgICAgICAgICAgUm93cyBSZW1vdmVkIGJ5IEZpbHRlcjogOTAw MAorICAgICAgICAgLT4gIE1lbW9pemUgKGFjdHVhbCByb3dzPTEgbG9vcHM9TikKKyAgICAgICAg ICAgICAgIENhY2hlIEtleTogdDEudHdvLCB0MS50d2VudHkKKyAgICAgICAgICAgICAgIENhY2hl IE1vZGU6IGJpbmFyeQorICAgICAgICAgICAgICAgSGl0czogOTgwICBNaXNzZXM6IDIwICBFdmlj dGlvbnM6IFplcm8gIE92ZXJmbG93czogMCAgTWVtb3J5IFVzYWdlOiBOa0IKKyAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiB0ZW5rMSB0MiAoYWN0dWFsIHJvd3M9MSBsb29wcz1OKQorICAg ICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoKHQxLnR3ZW50eSA9IHVuaXF1ZTEpIEFORCAodDEu dHdvID0gdHdvKSkKKyAgICAgICAgICAgICAgICAgICAgIFJvd3MgUmVtb3ZlZCBieSBGaWx0ZXI6 IDk5OTkKKygxMiByb3dzKQorCistLSBBbmQgY2hlY2sgd2UgZ2V0IHRoZSBleHBlY3RlZCByZXN1 bHRzLgorU0VMRUNUIENPVU5UKCopLCBBVkcodDEudHdlbnR5KSBGUk9NIHRlbmsxIHQxIExFRlQg Sk9JTgorTEFURVJBTCAoU0VMRUNUIHQxLnR3ZW50eSBBUyBjMSwgdDIudW5pcXVlMSBBUyBjMiwg dDIudHdvIEZST00gdGVuazEgdDIpIHMKK09OIHQxLnR3byA9IHMudHdvCitXSEVSRSBzLmMxID0g cy5jMiBBTkQgdDEudW5pcXVlMSA8IDEwMDA7CisgY291bnQgfCAgICAgICAgYXZnICAgICAgICAg CistLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDEwMDAgfCA5LjUwMDAwMDAwMDAwMDAw MDAKKygxIHJvdykKKwogU0VUIGVuYWJsZV9tZXJnZWpvaW4gVE8gb2ZmOwogLS0gVGVzdCBmb3Ig dmFybGVuYSBkYXRhdHlwZSB3aXRoIGV4cHIgZXZhbHVhdGlvbgogQ1JFQVRFIFRBQkxFIGV4cHJf a2V5ICh4IG51bWVyaWMsIHQgdGV4dCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9tZW1vaXplLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21lbW9pemUuc3FsCmluZGV4IGUw MGUxYTk0YTguLmZmMWQ3NzFiZDIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21l bW9pemUuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21lbW9pemUuc3FsCkBAIC03NCw2 ICs3NCwzMCBAQCBMQVRFUkFMICgKIE9OIHQxLnR3byA9IHQyLnR3bwogV0hFUkUgdDEudW5pcXVl MSA8IDEwOwogCistLSBUcnkgd2l0aCBMQVRFUkFMIHJlZmVyZW5jZXMgd2l0aGluIFBsYWNlSG9s ZGVyVmFycyBhdCBhIGJhc2VyZWwKK1NFTEVDVCBleHBsYWluX21lbW9pemUoJworU0VMRUNUIENP VU5UKCopLCBBVkcodDEudHdlbnR5KSBGUk9NIHRlbmsxIHQxIExFRlQgSk9JTgorTEFURVJBTCAo U0VMRUNUIHQxLnR3ZW50eSBBUyBjMSwgdDIudW5pcXVlMSBBUyBjMiBGUk9NIHRlbmsxIHQyKSBz IE9OIFRSVUUKK1dIRVJFIHMuYzEgPSBzLmMyIEFORCB0MS51bmlxdWUxIDwgMTAwMDsnLCBmYWxz ZSk7CisKKy0tIEFuZCBjaGVjayB3ZSBnZXQgdGhlIGV4cGVjdGVkIHJlc3VsdHMuCitTRUxFQ1Qg Q09VTlQoKiksIEFWRyh0MS50d2VudHkpIEZST00gdGVuazEgdDEgTEVGVCBKT0lOCitMQVRFUkFM IChTRUxFQ1QgdDEudHdlbnR5IEFTIGMxLCB0Mi51bmlxdWUxIEFTIGMyIEZST00gdGVuazEgdDIp IHMgT04gVFJVRQorV0hFUkUgcy5jMSA9IHMuYzIgQU5EIHQxLnVuaXF1ZTEgPCAxMDAwOworCist LSBFbnN1cmUgd2UgZG8gbm90IG9taXQgdGhlIGNhY2hlIGtleXMgZnJvbSBQbGFjZUhvbGRlclZh cnMKK1NFTEVDVCBleHBsYWluX21lbW9pemUoJworU0VMRUNUIENPVU5UKCopLCBBVkcodDEudHdl bnR5KSBGUk9NIHRlbmsxIHQxIExFRlQgSk9JTgorTEFURVJBTCAoU0VMRUNUIHQxLnR3ZW50eSBB UyBjMSwgdDIudW5pcXVlMSBBUyBjMiwgdDIudHdvIEZST00gdGVuazEgdDIpIHMKK09OIHQxLnR3 byA9IHMudHdvCitXSEVSRSBzLmMxID0gcy5jMiBBTkQgdDEudW5pcXVlMSA8IDEwMDA7JywgZmFs c2UpOworCistLSBBbmQgY2hlY2sgd2UgZ2V0IHRoZSBleHBlY3RlZCByZXN1bHRzLgorU0VMRUNU IENPVU5UKCopLCBBVkcodDEudHdlbnR5KSBGUk9NIHRlbmsxIHQxIExFRlQgSk9JTgorTEFURVJB TCAoU0VMRUNUIHQxLnR3ZW50eSBBUyBjMSwgdDIudW5pcXVlMSBBUyBjMiwgdDIudHdvIEZST00g dGVuazEgdDIpIHMKK09OIHQxLnR3byA9IHMudHdvCitXSEVSRSBzLmMxID0gcy5jMiBBTkQgdDEu dW5pcXVlMSA8IDEwMDA7CisKIFNFVCBlbmFibGVfbWVyZ2Vqb2luIFRPIG9mZjsKIAogLS0gVGVz dCBmb3IgdmFybGVuYSBkYXRhdHlwZSB3aXRoIGV4cHIgZXZhbHVhdGlvbgotLSAKMi40My4wCgo= --0000000000004c8138061b2044c9--