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 1taTyz-002CN8-OQ for pgsql-hackers@arkaria.postgresql.org; Wed, 22 Jan 2025 06:12:58 +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 1taTyy-00CPBV-Q8 for pgsql-hackers@arkaria.postgresql.org; Wed, 22 Jan 2025 06:12:56 +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 1taTyy-00CP9p-8p for pgsql-hackers@lists.postgresql.org; Wed, 22 Jan 2025 06:12:56 +0000 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1taTyw-000rWy-0U for pgsql-hackers@lists.postgresql.org; Wed, 22 Jan 2025 06:12:55 +0000 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-2efb17478adso11215276a91.1 for ; Tue, 21 Jan 2025 22:12:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1737526374; x=1738131174; darn=lists.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=XeYB7jz6KM/y+2jX0qpKuLrP/CwklL2ZFtgUM2RTrAY=; b=dVFRHZEPk6YlBfUsfUAE35LJsJj6crMLY03z/dYVNLZTNL7H0wS3Qo1YrvVWSSnzls tdybs4uTNWiTjLUks6YHG4Z0Ib4PYm5/8eN+JZF0UoaFiBD0hLrHqEtgqtWeDg4wkHDA oL1o422i2oJ8m+/DyqyrEQ1/eYaxdauwpqgJoyf4anbSYJSrYrmNoYDwVFj3MMOnHVD/ jCDulAjIpfAVtRNRDbOdL49PNlcQE431+u0WKR+pGZDP4mybRK9Vp81qR4xBsKYuS5IZ CVOtC2ISVoy7ekg4ZDhQ6A9jZJD2REOxAdXAP1X1PmMaREhR/FFhIQpu/K59VOSFGNMo e4Lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737526374; x=1738131174; 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=XeYB7jz6KM/y+2jX0qpKuLrP/CwklL2ZFtgUM2RTrAY=; b=bBNYwj+e78J5ZyUPRAxrXVdsjRH8GcD/JvwvH9iX6u/QQAcZulDnF8TL3i691ld56g RD/Fl+J5Zr+H0a2HdPnKvTIXfnvGi+XJ5FuS49yr113Y6GpZOxh6JZcrXq8isRSkEf4W Do/KTUQaGDFwmkVsKedpd3aLpFalWMGe5ukC5WTdl6s+fK+BXhXKhvPJH7MHFnSSG1JI gjyjALMilIz7E93/HkkCibl6CZTgTrpgyAS2UjFPhC4yMwcj3UwnSpmhvK/HQg2FPokb h89EL7NwoaCNLVPVcLZ4PCuKPmGUt5O1H3VhQhUI9J1CnMxoiqUMBLeCe1DGN7MXdZji eXBQ== X-Gm-Message-State: AOJu0YwzIv81SbZZBNPdTp1jz3/GaCBWyrfuw4l9u5dNCiDhAkyE14oM QMLJx13JRQXPUuppMlRndgRdRPMKnHtS0+HY7LOBdeyaQrs038vtjqzBH+8y4s7mAn6hGyBkGdu Y/vzWlDIbzFjQJPFtJUUtx3BCkDo= X-Gm-Gg: ASbGncvRe/YtXMhx6QZhKYKMQpreUvEGonW0SpoH/srIPricy3kwgkDI/ZxdvnSZjkZ rnf1rXrt72gvFHfNSaNMPJv6JFTtEfo+C9wBdchzKMSTWYG9QvLvhG3lw0JM1TkZnyi9qFuC2j9 VO9MVhuhTx+Q== X-Google-Smtp-Source: AGHT+IGwiM97PKCG0NNU6uTR56k8SCL9g5JAQHi/ZuYuq7mcQBReba62IYHIb7qKdfFPNwScK5LzChh5LRJDugstE5Q= X-Received: by 2002:a05:6a00:989:b0:71d:f4ef:6b3a with SMTP id d2e1a72fcca58-72dafba3219mr28072880b3a.21.1737526373595; Tue, 21 Jan 2025 22:12:53 -0800 (PST) MIME-Version: 1.0 References: <202501212106.2wbouzfk56mb@alvherre.pgsql> In-Reply-To: <202501212106.2wbouzfk56mb@alvherre.pgsql> From: Amul Sul Date: Wed, 22 Jan 2025 11:42:15 +0530 X-Gm-Features: AbW1kvaynyfD1TgwSh5Czr-WpZ-BTkwiuxCo0oo-pBwomHyHi1Q63Bo5o0m7O8I Message-ID: Subject: Re: Allow NOT VALID foreign key constraints on partitioned tables. To: =?UTF-8?Q?=C3=81lvaro_Herrera?= Cc: "pgsql-hackers@lists.postgresql.org" Content-Type: multipart/mixed; boundary="000000000000495bca062c456214" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000495bca062c456214 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Jan 22, 2025 at 2:36=E2=80=AFAM =C3=81lvaro Herrera wrote: > > > Suppose I have a hierarchy like this > > parent > | > child > /\ > / \ > / grandchild2 > / > grandchild1 > > and I have a validated constraint on grandchild1 and an invalid > constraint on child. What happens if I add a constraint on parent? In > my understanding, it should not attempt to revalidate the constraint on > grandchild1, because it's known valid; but I don't think I see code that > would skip validation there. That is, QueueFKConstraintValidation does > its thing unconditionally (esp. recursing to children), which seems > wrong. > You=E2=80=99re correct; it=E2=80=99s fixed in the attached version, along w= ith an assert(!convalidated) in QueueFKConstraintValidation(), and I=E2=80=99ve included tests to cover the change. Thanks for reviewing this patch. Regards, Amul --000000000000495bca062c456214 Content-Type: application/octet-stream; name="v3-0002-Allow-NOT-VALID-foreign-key-constraints-on-partit.patch" Content-Disposition: attachment; filename="v3-0002-Allow-NOT-VALID-foreign-key-constraints-on-partit.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m67hx0z30 RnJvbSA0MWFmNmRjMDc4MmI5YzE1MTZkNGU0YTgxZjgwOWMzZWI0MzJkMDhiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbXVsIFN1bCA8YW11bC5zdWxAZW50ZXJwcmlzZWRiLmNvbT4K RGF0ZTogVGh1LCAyIEphbiAyMDI1IDE5OjA0OjQ5ICswNTMwClN1YmplY3Q6IFtQQVRDSCB2M10g QWxsb3cgTk9UIFZBTElEIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnRzIG9uIHBhcnRpdGlvbmVkCiB0 YWJsZXMuCgpXaGVuIG1lcmdpbmcgYW4gZXhpc3RpbmcgZm9yZWlnbiBrZXkgZHVyaW5nIHRoZSBh ZGRpdGlvbiBvciBhdHRhY2htZW50Cm9mIGEgcGFydGl0aW9uLCBjb25zaWRlciB0aGUgZm9sbG93 aW5nOgoKMS4gSWYgdGhlIHBhcmVudCBmb3JlaWduIGtleSBjb25zdHJhaW50IGJlaW5nIGFkZGVk IGlzIE5PVCBWQUxJRCwgdGhlCiAgIHZhbGlkaXR5IGZsYWcgb2YgdGhlIG1hdGNoaW5nIGNoaWxk IGNvbnN0cmFpbnQgaXMgaWdub3JlZC4gSXQgaXMKICAgaGFybWxlc3MgZm9yIHRoZSBjaGlsZCBj b25zdHJhaW50IHRvIHJlbWFpbiB2YWxpZC4KCjIuIElmIHRoZSBwYXJlbnQgZm9yZWlnbiBrZXkg Y29uc3RyYWludCBiZWluZyBhZGRlZCBpcyBWQUxJRCBhbmQgdGhlCiAgIG1hdGNoaW5nIGNoaWxk IGNvbnN0cmFpbnQgaXMgTk9UIFZBTElELCB0aGUgd2UgaW1wbGljaXRseSB2YWxpZGF0ZXMKICAg dGhlIGNoaWxkIGNvbnN0cmFpbnQsIG1hcmtpbmcgaXQgYXMgdmFsaWQuIFRoaXMgYmVoYXZpb3Ig aXMKICAgY29uc2lzdGVudCB3aXRoIGNyZWF0aW5nIGEgbmV3IGNvbnN0cmFpbnQgb24gdGhlIGNo aWxkIHRhYmxlIHJhdGhlcgogICB0aGFuIGF0dGFjaGluZyBpdCB0byBhbiBleGlzdGluZyBvbmUs IGFzIGl0IGVuc3VyZXMgdGhlIGNoaWxkIGRhdGEKICAgaXMgdmFsaWRhdGVkLgotLS0KIGRvYy9z cmMvc2dtbC9yZWYvYWx0ZXJfdGFibGUuc2dtbCAgICAgICAgIHwgICAyIC0KIHNyYy9iYWNrZW5k L2NvbW1hbmRzL3RhYmxlY21kcy5jICAgICAgICAgIHwgMTM2ICsrKysrKysrKysrKysrKystLS0t LS0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yZWlnbl9rZXkub3V0IHwgIDk3ICsrKysr KysrKysrKysrLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yZWlnbl9rZXkuc3FsICAgICAgfCAg NzIgKysrKysrKysrKystCiA0IGZpbGVzIGNoYW5nZWQsIDI1OSBpbnNlcnRpb25zKCspLCA0OCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3RhYmxlLnNn bWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3RhYmxlLnNnbWwKaW5kZXggZGY0ZjVkNWJiZDgu LmY5NTc2ZGE0MzVlIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3RhYmxlLnNn bWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl90YWJsZS5zZ21sCkBAIC00ODYsOCArNDg2 LDYgQEAgV0lUSCAoIE1PRFVMVVMgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bWVy aWNfbGl0ZXJhbDwvcmVwbGFjZWFibGU+LCBSRU0KICAgICAgPHBhcmE+CiAgICAgICBBZGRpdGlv bmFsIHJlc3RyaWN0aW9ucyBhcHBseSB3aGVuIHVuaXF1ZSBvciBwcmltYXJ5IGtleSBjb25zdHJh aW50cwogICAgICAgYXJlIGFkZGVkIHRvIHBhcnRpdGlvbmVkIHRhYmxlczsgc2VlIDxsaW5rIGxp bmtlbmQ9InNxbC1jcmVhdGV0YWJsZSI+PGNvbW1hbmQ+Q1JFQVRFIFRBQkxFPC9jb21tYW5kPjwv bGluaz4uCi0gICAgICBBbHNvLCBmb3JlaWduIGtleSBjb25zdHJhaW50cyBvbiBwYXJ0aXRpb25l ZAotICAgICAgdGFibGVzIG1heSBub3QgYmUgZGVjbGFyZWQgPGxpdGVyYWw+Tk9UIFZBTElEPC9s aXRlcmFsPiBhdCBwcmVzZW50LgogICAgICA8L3BhcmE+CiAKICAgICA8L2xpc3RpdGVtPgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy90YWJsZWNtZHMuYwppbmRleCBkOGYwYTk5YWQ5My4uNmZhYzJjNzM5ZTggMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC01NzQsOCArNTc0LDkgQEAgc3RhdGljIHZvaWQgY3Jl YXRlRm9yZWlnbktleUFjdGlvblRyaWdnZXJzKFJlbGF0aW9uIHJlbCwgT2lkIHJlZlJlbE9pZCwK IAkJCQkJCQkJCQkgICBPaWQgaW5kZXhPaWQsCiAJCQkJCQkJCQkJICAgT2lkIHBhcmVudERlbFRy aWdnZXIsIE9pZCBwYXJlbnRVcGRUcmlnZ2VyLAogCQkJCQkJCQkJCSAgIE9pZCAqZGVsZXRlVHJp Z09pZCwgT2lkICp1cGRhdGVUcmlnT2lkKTsKLXN0YXRpYyBib29sIHRyeUF0dGFjaFBhcnRpdGlv bkZvcmVpZ25LZXkoRm9yZWlnbktleUNhY2hlSW5mbyAqZmssCi0JCQkJCQkJCQkJIE9pZCBwYXJ0 UmVsaWQsCitzdGF0aWMgYm9vbCB0cnlBdHRhY2hQYXJ0aXRpb25Gb3JlaWduS2V5KExpc3QgKip3 cXVldWUsCisJCQkJCQkJCQkJIEZvcmVpZ25LZXlDYWNoZUluZm8gKmZrLAorCQkJCQkJCQkJCSBS ZWxhdGlvbiBwYXJ0aXRpb24sCiAJCQkJCQkJCQkJIE9pZCBwYXJlbnRDb25zdHJPaWQsIGludCBu dW1ma3MsCiAJCQkJCQkJCQkJIEF0dHJOdW1iZXIgKm1hcHBlZF9jb25rZXksIEF0dHJOdW1iZXIg KmNvbmZrZXksCiAJCQkJCQkJCQkJIE9pZCAqY29ucGZlcW9wLApAQCAtOTc3MiwyMiArOTc3Mywx MiBAQCBBVEFkZEZvcmVpZ25LZXlDb25zdHJhaW50KExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJs ZUluZm8gKnRhYiwgUmVsYXRpb24gcmVsLAogCSAqIFZhbGlkaXR5IGNoZWNrcyAocGVybWlzc2lv biBjaGVja3Mgd2FpdCB0aWxsIHdlIGhhdmUgdGhlIGNvbHVtbgogCSAqIG51bWJlcnMpCiAJICov Ci0JaWYgKHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUp Ci0JewotCQlpZiAoIXJlY3Vyc2UpCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZShF UlJDT0RFX1dST05HX09CSkVDVF9UWVBFKSwKLQkJCQkJIGVycm1zZygiY2Fubm90IHVzZSBPTkxZ IGZvciBmb3JlaWduIGtleSBvbiBwYXJ0aXRpb25lZCB0YWJsZSBcIiVzXCIgcmVmZXJlbmNpbmcg cmVsYXRpb24gXCIlc1wiIiwKLQkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAot CQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHBrcmVsKSkpKTsKLQkJaWYgKGZrY29uc3Ry YWludC0+c2tpcF92YWxpZGF0aW9uICYmICFma2NvbnN0cmFpbnQtPmluaXRpYWxseV92YWxpZCkK LQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZ UEUpLAotCQkJCQkgZXJybXNnKCJjYW5ub3QgYWRkIE5PVCBWQUxJRCBmb3JlaWduIGtleSBvbiBw YXJ0aXRpb25lZCB0YWJsZSBcIiVzXCIgcmVmZXJlbmNpbmcgcmVsYXRpb24gXCIlc1wiIiwKLQkJ CQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAotCQkJCQkJCVJlbGF0aW9uR2V0UmVs YXRpb25OYW1lKHBrcmVsKSksCi0JCQkJCSBlcnJkZXRhaWwoIlRoaXMgZmVhdHVyZSBpcyBub3Qg eWV0IHN1cHBvcnRlZCBvbiBwYXJ0aXRpb25lZCB0YWJsZXMuIikpKTsKLQl9CisJaWYgKCFyZWN1 cnNlICYmIHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQ RSksCisJCQkJIGVycm1zZygiY2Fubm90IHVzZSBPTkxZIGZvciBmb3JlaWduIGtleSBvbiBwYXJ0 aXRpb25lZCB0YWJsZSBcIiVzXCIgcmVmZXJlbmNpbmcgcmVsYXRpb24gXCIlc1wiIiwKKwkJCQkJ CVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksCisJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShwa3JlbCkpKSk7CiAKIAlpZiAocGtyZWwtPnJkX3JlbC0+cmVsa2luZCAhPSBSRUxLSU5E X1JFTEFUSU9OICYmCiAJCXBrcmVsLT5yZF9yZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9QQVJUSVRJ T05FRF9UQUJMRSkKQEAgLTEwNzgyLDggKzEwNzczLDcgQEAgYWRkRmtSZWN1cnNlUmVmZXJlbmNp bmcoTGlzdCAqKndxdWV1ZSwgQ29uc3RyYWludCAqZmtjb25zdHJhaW50LCBSZWxhdGlvbiByZWws CiAJCSAqLwogCQlmb3IgKGludCBpID0gMDsgaSA8IHBkLT5ucGFydHM7IGkrKykKIAkJewotCQkJ T2lkCQkJcGFydGl0aW9uSWQgPSBwZC0+b2lkc1tpXTsKLQkJCVJlbGF0aW9uCXBhcnRpdGlvbiA9 IHRhYmxlX29wZW4ocGFydGl0aW9uSWQsIGxvY2ttb2RlKTsKKwkJCVJlbGF0aW9uCXBhcnRpdGlv biA9IHRhYmxlX29wZW4ocGQtPm9pZHNbaV0sIGxvY2ttb2RlKTsKIAkJCUxpc3QJICAgKnBhcnRG S3M7CiAJCQlBdHRyTWFwICAgICphdHRtYXA7CiAJCQlBdHRyTnVtYmVyCW1hcHBlZF9ma2F0dG51 bVtJTkRFWF9NQVhfS0VZU107CkBAIC0xMDgwNyw4ICsxMDc5Nyw5IEBAIGFkZEZrUmVjdXJzZVJl ZmVyZW5jaW5nKExpc3QgKip3cXVldWUsIENvbnN0cmFpbnQgKmZrY29uc3RyYWludCwgUmVsYXRp b24gcmVsLAogCQkJCUZvcmVpZ25LZXlDYWNoZUluZm8gKmZrOwogCiAJCQkJZmsgPSBsZmlyc3Rf bm9kZShGb3JlaWduS2V5Q2FjaGVJbmZvLCBjZWxsKTsKLQkJCQlpZiAodHJ5QXR0YWNoUGFydGl0 aW9uRm9yZWlnbktleShmaywKLQkJCQkJCQkJCQkJCSBwYXJ0aXRpb25JZCwKKwkJCQlpZiAodHJ5 QXR0YWNoUGFydGl0aW9uRm9yZWlnbktleSh3cXVldWUsCisJCQkJCQkJCQkJCQkgZmssCisJCQkJ CQkJCQkJCQkgcGFydGl0aW9uLAogCQkJCQkJCQkJCQkJIHBhcmVudENvbnN0ciwKIAkJCQkJCQkJ CQkJCSBudW1ma3MsCiAJCQkJCQkJCQkJCQkgbWFwcGVkX2ZrYXR0bnVtLApAQCAtMTEyNjAsOCAr MTEyNTEsOSBAQCBDbG9uZUZrUmVmZXJlbmNpbmcoTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcGFy ZW50UmVsLCBSZWxhdGlvbiBwYXJ0UmVsKQogCQl7CiAJCQlGb3JlaWduS2V5Q2FjaGVJbmZvICpm ayA9IGxmaXJzdF9ub2RlKEZvcmVpZ25LZXlDYWNoZUluZm8sIGxjKTsKIAotCQkJaWYgKHRyeUF0 dGFjaFBhcnRpdGlvbkZvcmVpZ25LZXkoZmssCi0JCQkJCQkJCQkJCSBSZWxhdGlvbkdldFJlbGlk KHBhcnRSZWwpLAorCQkJaWYgKHRyeUF0dGFjaFBhcnRpdGlvbkZvcmVpZ25LZXkod3F1ZXVlLAor CQkJCQkJCQkJCQkgZmssCisJCQkJCQkJCQkJCSBwYXJ0UmVsLAogCQkJCQkJCQkJCQkgcGFyZW50 Q29uc3RyT2lkLAogCQkJCQkJCQkJCQkgbnVtZmtzLAogCQkJCQkJCQkJCQkgbWFwcGVkX2Nvbmtl eSwKQEAgLTExMzY0LDggKzExMzU2LDkgQEAgQ2xvbmVGa1JlZmVyZW5jaW5nKExpc3QgKip3cXVl dWUsIFJlbGF0aW9uIHBhcmVudFJlbCwgUmVsYXRpb24gcGFydFJlbCkKICAqIHJldHVybiBmYWxz ZS4KICAqLwogc3RhdGljIGJvb2wKLXRyeUF0dGFjaFBhcnRpdGlvbkZvcmVpZ25LZXkoRm9yZWln bktleUNhY2hlSW5mbyAqZmssCi0JCQkJCQkJIE9pZCBwYXJ0UmVsaWQsCit0cnlBdHRhY2hQYXJ0 aXRpb25Gb3JlaWduS2V5KExpc3QgKip3cXVldWUsCisJCQkJCQkJIEZvcmVpZ25LZXlDYWNoZUlu Zm8gKmZrLAorCQkJCQkJCSBSZWxhdGlvbiBwYXJ0aXRpb24sCiAJCQkJCQkJIE9pZCBwYXJlbnRD b25zdHJPaWQsCiAJCQkJCQkJIGludCBudW1ma3MsCiAJCQkJCQkJIEF0dHJOdW1iZXIgKm1hcHBl ZF9jb25rZXksCkBAIC0xMTM4NCwxMiArMTEzNzcsMTUgQEAgdHJ5QXR0YWNoUGFydGl0aW9uRm9y ZWlnbktleShGb3JlaWduS2V5Q2FjaGVJbmZvICpmaywKIAlIZWFwVHVwbGUJdHJpZ3R1cDsKIAlP aWQJCQlpbnNlcnRUcmlnZ2VyT2lkLAogCQkJCXVwZGF0ZVRyaWdnZXJPaWQ7CisJYm9vbAkJcGFy ZW50Q29uc3RySXNWYWxpZDsKKwlib29sCQlwYXJ0Q29uc3RySXNWYWxpZDsKIAogCXBhcmVudENv bnN0clR1cCA9IFNlYXJjaFN5c0NhY2hlMShDT05TVFJPSUQsCiAJCQkJCQkJCQkgIE9iamVjdElk R2V0RGF0dW0ocGFyZW50Q29uc3RyT2lkKSk7CiAJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHBhcmVu dENvbnN0clR1cCkpCiAJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjb25z dHJhaW50ICV1IiwgcGFyZW50Q29uc3RyT2lkKTsKIAlwYXJlbnRDb25zdHIgPSAoRm9ybV9wZ19j b25zdHJhaW50KSBHRVRTVFJVQ1QocGFyZW50Q29uc3RyVHVwKTsKKwlwYXJlbnRDb25zdHJJc1Zh bGlkID0gcGFyZW50Q29uc3RyLT5jb252YWxpZGF0ZWQ7CiAKIAkvKgogCSAqIERvIHNvbWUgcXVp Y2sgJiBlYXN5IGluaXRpYWwgY2hlY2tzLiAgSWYgYW55IG9mIHRoZXNlIGZhaWwsIHdlIGNhbm5v dApAQCAtMTE0MTIsMTcgKzExNDA4LDE4IEBAIHRyeUF0dGFjaFBhcnRpdGlvbkZvcmVpZ25LZXko Rm9yZWlnbktleUNhY2hlSW5mbyAqZmssCiAJfQogCiAJLyoKLQkgKiBMb29rcyBnb29kIHNvIGZh cjsgZG8gc29tZSBtb3JlIGV4dGVuc2l2ZSBjaGVja3MuICBQcmVzdW1hYmx5IHRoZSBjaGVjawot CSAqIGZvciAnY29udmFsaWRhdGVkJyBjb3VsZCBiZSBkcm9wcGVkLCBzaW5jZSB3ZSBkb24ndCBy ZWFsbHkgY2FyZSBhYm91dAotCSAqIHRoYXQsIGJ1dCBsZXQncyBiZSBjYXJlZnVsIGZvciBub3cu CisJICogTG9va3MgZ29vZCBzbyBmYXI7IHBlcmZvcm0gbW9yZSBleHRlbnNpdmUgY2hlY2tzIGV4 Y2VwdCBmb3IKKwkgKiBjb252YWxpZGF0ZWQuIFRoZXJlJ3Mgbm8gbmVlZCB0byB3b3JyeSBhYm91 dCBpdCBiZWNhdXNlIGF0dGFjaGluZyBhCisJICogdmFsaWQgcGFyZW50IGNvbnN0cmFpbnQgdG8g YW4gaW52YWxpZCBjaGlsZCBjb25zdHJhaW50IHdpbGwgZXZlbnR1YWxseQorCSAqIHRyaWdnZXIg aW1wbGljaXQgZGF0YSB2YWxpZGF0aW9uIGZvciB0aGUgY2hpbGQuCiAJICovCiAJcGFydGNvbnR1 cCA9IFNlYXJjaFN5c0NhY2hlMShDT05TVFJPSUQsCiAJCQkJCQkJCSBPYmplY3RJZEdldERhdHVt KGZrLT5jb25vaWQpKTsKIAlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocGFydGNvbnR1cCkpCiAJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjb25zdHJhaW50ICV1IiwgZmstPmNv bm9pZCk7CiAJcGFydENvbnN0ciA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVDVChwYXJ0 Y29udHVwKTsKKwlwYXJ0Q29uc3RySXNWYWxpZCA9IHBhcnRDb25zdHItPmNvbnZhbGlkYXRlZDsK IAlpZiAoT2lkSXNWYWxpZChwYXJ0Q29uc3RyLT5jb25wYXJlbnRpZCkgfHwKLQkJIXBhcnRDb25z dHItPmNvbnZhbGlkYXRlZCB8fAogCQlwYXJ0Q29uc3RyLT5jb25kZWZlcnJhYmxlICE9IHBhcmVu dENvbnN0ci0+Y29uZGVmZXJyYWJsZSB8fAogCQlwYXJ0Q29uc3RyLT5jb25kZWZlcnJlZCAhPSBw YXJlbnRDb25zdHItPmNvbmRlZmVycmVkIHx8CiAJCXBhcnRDb25zdHItPmNvbmZ1cGR0eXBlICE9 IHBhcmVudENvbnN0ci0+Y29uZnVwZHR5cGUgfHwKQEAgLTExNDgxLDcgKzExNDc4LDggQEAgdHJ5 QXR0YWNoUGFydGl0aW9uRm9yZWlnbktleShGb3JlaWduS2V5Q2FjaGVJbmZvICpmaywKIAogCXN5 c3RhYmxlX2VuZHNjYW4oc2Nhbik7CiAKLQlDb25zdHJhaW50U2V0UGFyZW50Q29uc3RyYWludChm ay0+Y29ub2lkLCBwYXJlbnRDb25zdHJPaWQsIHBhcnRSZWxpZCk7CisJQ29uc3RyYWludFNldFBh cmVudENvbnN0cmFpbnQoZmstPmNvbm9pZCwgcGFyZW50Q29uc3RyT2lkLAorCQkJCQkJCQkgIFJl bGF0aW9uR2V0UmVsaWQocGFydGl0aW9uKSk7CiAKIAkvKgogCSAqIExpa2UgdGhlIGNvbnN0cmFp bnQsIGF0dGFjaCBwYXJ0aXRpb24ncyAiY2hlY2siIHRyaWdnZXJzIHRvIHRoZQpAQCAtMTE0OTIs MTAgKzExNDkwLDEwIEBAIHRyeUF0dGFjaFBhcnRpdGlvbkZvcmVpZ25LZXkoRm9yZWlnbktleUNh Y2hlSW5mbyAqZmssCiAJCQkJCQkJICAgJmluc2VydFRyaWdnZXJPaWQsICZ1cGRhdGVUcmlnZ2Vy T2lkKTsKIAlBc3NlcnQoT2lkSXNWYWxpZChpbnNlcnRUcmlnZ2VyT2lkKSAmJiBPaWRJc1ZhbGlk KHBhcmVudEluc1RyaWdnZXIpKTsKIAlUcmlnZ2VyU2V0UGFyZW50VHJpZ2dlcih0cmlncmVsLCBp bnNlcnRUcmlnZ2VyT2lkLCBwYXJlbnRJbnNUcmlnZ2VyLAotCQkJCQkJCXBhcnRSZWxpZCk7CisJ CQkJCQkJUmVsYXRpb25HZXRSZWxpZChwYXJ0aXRpb24pKTsKIAlBc3NlcnQoT2lkSXNWYWxpZCh1 cGRhdGVUcmlnZ2VyT2lkKSAmJiBPaWRJc1ZhbGlkKHBhcmVudFVwZFRyaWdnZXIpKTsKIAlUcmln Z2VyU2V0UGFyZW50VHJpZ2dlcih0cmlncmVsLCB1cGRhdGVUcmlnZ2VyT2lkLCBwYXJlbnRVcGRU cmlnZ2VyLAotCQkJCQkJCXBhcnRSZWxpZCk7CisJCQkJCQkJUmVsYXRpb25HZXRSZWxpZChwYXJ0 aXRpb24pKTsKIAogCS8qCiAJICogSWYgdGhlIHJlZmVyZW5jZWQgdGFibGUgaXMgcGFydGl0aW9u ZWQsIHRoZW4gdGhlIHBhcnRpdGlvbiB3ZSdyZQpAQCAtMTE1NzMsNiArMTE1NzEsMzIgQEAgdHJ5 QXR0YWNoUGFydGl0aW9uRm9yZWlnbktleShGb3JlaWduS2V5Q2FjaGVJbmZvICpmaywKIAl9CiAK IAlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOworCisJLyoKKwkgKiBJZiBhIHZhbGlkIHBhcmVu dCBjb25zdHJhaW50IGlzIGF0dGFjaGVkIHRvIGEgTk9UIFZBTElEIGNoaWxkCisJICogY29uc3Ry YWludCwgaW1wbGljaXRseSB0cmlnZ2VyIHZhbGlkYXRpb24gZm9yIHRoZSBjaGlsZCBjb25zdHJh aW50LgorCSAqIFRoaXMgYmVoYXZpb3IgYWxpZ25zIHdpdGggY3JlYXRpbmcgYSBuZXcgY29uc3Ry YWludCBvbiB0aGUgY2hpbGQgdGFibGUKKwkgKiByYXRoZXIgdGhhbiBhdHRhY2hpbmcgaXQgdG8g dGhlIGV4aXN0aW5nIG9uZSwgYXMgaXQgd291bGQgdWx0aW1hdGVseQorCSAqIHZhbGlkYXRlIHRo ZSBjaGlsZCBkYXRhLiBDb252ZXJzZWx5LCBoYXZpbmcgYW4gaW52YWxpZCBwYXJlbnQKKwkgKiBj b25zdHJhaW50IHdoaWxlIHRoZSBjaGlsZCBjb25zdHJhaW50IGlzIHZhbGlkIGRvZXNuJ3QgY2F1 c2UgYW55IGhhcm0uCisJICovCisJaWYgKHBhcmVudENvbnN0cklzVmFsaWQgJiYgIXBhcnRDb25z dHJJc1ZhbGlkKQorCXsKKwkJUmVsYXRpb24JY29ucmVsOworCisJCWNvbnJlbCA9IHRhYmxlX29w ZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJCXBhcnRjb250 dXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09OU1RST0lELCBPYmplY3RJZEdldERhdHVtKGZrLT5jb25v aWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHBhcnRjb250dXApKQorCQkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbnN0cmFpbnQgJXUiLCBmay0+Y29ub2lkKTsK KworCQkvKiBVc2luZyB0aGUgc2FtZSBsb2NrIGFzIHVzZWQgaW4gQVRfVmFsaWRhdGVDb25zdHJh aW50ICovCisJCVF1ZXVlRktDb25zdHJhaW50VmFsaWRhdGlvbih3cXVldWUsIGNvbnJlbCwgcGFy dGl0aW9uLCBwYXJ0Y29udHVwLAorCQkJCQkJCQkJU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrKTsK KwkJUmVsZWFzZVN5c0NhY2hlKHBhcnRjb250dXApOworCQl0YWJsZV9jbG9zZShjb25yZWwsIFJv d0V4Y2x1c2l2ZUxvY2spOworCX0KKwogCXJldHVybiB0cnVlOwogfQogCkBAIC0xMjExMyw3ICsx MjEzNyw3IEBAIEFURXhlY1ZhbGlkYXRlQ29uc3RyYWludChMaXN0ICoqd3F1ZXVlLCBSZWxhdGlv biByZWwsIGNoYXIgKmNvbnN0ck5hbWUsCiAgKgogICogQWRkIGFuIGVudHJ5IHRvIHRoZSB3cXVl dWUgdG8gdmFsaWRhdGUgdGhlIGdpdmVuIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgaW4KICAqIFBo YXNlIDMgYW5kIHVwZGF0ZSB0aGUgY29udmFsaWRhdGVkIGZpZWxkIGluIHRoZSBwZ19jb25zdHJh aW50IGNhdGFsb2cKLSAqIGZvciB0aGUgc3BlY2lmaWVkIHJlbGF0aW9uLgorICogZm9yIHRoZSBz cGVjaWZpZWQgcmVsYXRpb24gYW5kIGFsbCBpdHMgY2hpbGRyZW4uCiAgKi8KIHN0YXRpYyB2b2lk CiBRdWV1ZUZLQ29uc3RyYWludFZhbGlkYXRpb24oTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gY29u cmVsLCBSZWxhdGlvbiByZWwsCkBAIC0xMjEyNiw2ICsxMjE1MCw3IEBAIFF1ZXVlRktDb25zdHJh aW50VmFsaWRhdGlvbihMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiBjb25yZWwsIFJlbGF0aW9uIHJl bCwKIAogCWNvbiA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVDVChjb250dXBsZSk7CiAJ QXNzZXJ0KGNvbi0+Y29udHlwZSA9PSBDT05TVFJBSU5UX0ZPUkVJR04pOworCUFzc2VydCghY29u LT5jb252YWxpZGF0ZWQpOwogCiAJaWYgKHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRf UkVMQVRJT04pCiAJewpAQCAtMTIxNTEsOSArMTIxNzYsNDggQEAgUXVldWVGS0NvbnN0cmFpbnRW YWxpZGF0aW9uKExpc3QgKip3cXVldWUsIFJlbGF0aW9uIGNvbnJlbCwgUmVsYXRpb24gcmVsLAog CX0KIAogCS8qCi0JICogV2UgZGlzYWxsb3cgY3JlYXRpbmcgaW52YWxpZCBmb3JlaWduIGtleXMg dG8gb3IgZnJvbSBwYXJ0aXRpb25lZAotCSAqIHRhYmxlcywgc28gaWdub3JpbmcgdGhlIHJlY3Vy c2lvbiBiaXQgaXMgb2theS4KKwkgKiBJZiB0aGUgdGFibGUgYXQgZWl0aGVyIGVuZCBvZiB0aGUg Y29uc3RyYWludCBpcyBwYXJ0aXRpb25lZCwgd2UgbmVlZCB0bworCSAqIHJlY3Vyc2UgYW5kIGhh bmRsZSBldmVyeSBjb25zdHJhaW50IHRoYXQgaXMgYSBjaGlsZCBvZiB0aGlzIGNvbnN0cmFpbnQu CiAJICovCisJaWYgKHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURf VEFCTEUgfHwKKwkJZ2V0X3JlbF9yZWxraW5kKGNvbi0+Y29uZnJlbGlkKSA9PSBSRUxLSU5EX1BB UlRJVElPTkVEX1RBQkxFKQorCXsKKwkJU2NhbktleURhdGEgcGtleTsKKwkJU3lzU2NhbkRlc2Mg cHNjYW47CisJCUhlYXBUdXBsZQljaGlsZHR1cDsKKworCQlTY2FuS2V5SW5pdCgmcGtleSwKKwkJ CQkJQW51bV9wZ19jb25zdHJhaW50X2NvbnBhcmVudGlkLAorCQkJCQlCVEVxdWFsU3RyYXRlZ3lO dW1iZXIsIEZfT0lERVEsCisJCQkJCU9iamVjdElkR2V0RGF0dW0oY29uLT5vaWQpKTsKKworCQlw c2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25yZWwsIENvbnN0cmFpbnRQYXJlbnRJbmRleElk LAorCQkJCQkJCQkgICB0cnVlLCBOVUxMLCAxLCAmcGtleSk7CisKKwkJd2hpbGUgKEhlYXBUdXBs ZUlzVmFsaWQoY2hpbGR0dXAgPSBzeXN0YWJsZV9nZXRuZXh0KHBzY2FuKSkpCisJCXsKKwkJCUZv cm1fcGdfY29uc3RyYWludCBjaGlsZGNvbjsKKwkJCVJlbGF0aW9uCWNoaWxkcmVsOworCisJCQlj aGlsZGNvbiA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVDVChjaGlsZHR1cCk7CisKKwkJ CS8qCisJCQkgKiBJZiB0aGUgY2hpbGQgY29uc3RyYWludCBoYXMgYWxyZWFkeSBiZWVuIHZhbGlk YXRlZCwgbm8gZnVydGhlcgorCQkJICogYWN0aW9uIGlzIHJlcXVpcmVkIGZvciBpdCBvciBpdHMg ZGVzY2VuZGFudHMsIGFzIHRoZXkgYXJlIGFsbAorCQkJICogdmFsaWQuCisJCQkgKi8KKwkJCWlm IChjaGlsZGNvbi0+Y29udmFsaWRhdGVkKQorCQkJCWNvbnRpbnVlOworCisJCQljaGlsZHJlbCA9 IHRhYmxlX29wZW4oY2hpbGRjb24tPmNvbnJlbGlkLCBsb2NrbW9kZSk7CisKKwkJCVF1ZXVlRktD b25zdHJhaW50VmFsaWRhdGlvbih3cXVldWUsIGNvbnJlbCwgY2hpbGRyZWwsIGNoaWxkdHVwLAor CQkJCQkJCQkJCWxvY2ttb2RlKTsKKwkJCXRhYmxlX2Nsb3NlKGNoaWxkcmVsLCBOb0xvY2spOwor CQl9CisKKwkJc3lzdGFibGVfZW5kc2Nhbihwc2Nhbik7CisJfQogCiAJLyoKIAkgKiBOb3cgdXBk YXRlIHRoZSBjYXRhbG9nLCB3aGlsZSB3ZSBoYXZlIHRoZSBkb29yIG9wZW4uCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ZvcmVpZ25fa2V5Lm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvZm9yZWlnbl9rZXkub3V0CmluZGV4IGVlNGNmODVmZGE5Li5kYTMzOWVk NWEzYyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mb3JlaWduX2tleS5v dXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mb3JlaWduX2tleS5vdXQKQEAgLTE1 NzEsNiArMTU3MSw5NyBAQCBkcm9wIHRhYmxlIHBrdGFibGUyLCBma3RhYmxlMjsKIC0tCiAtLSBG b3JlaWduIGtleXMgYW5kIHBhcnRpdGlvbmVkIHRhYmxlcwogLS0KKy0tIE5PVCBWQUxJRCBmb3Jl aWduIGtleSBvbiBwYXJ0aXRpb25lZCB0YWJsZQorQ1JFQVRFIFRBQkxFIGZrX25vdHBhcnRpdGlv bmVkX3BrIChhIGludCwgYiBpbnQsIFBSSU1BUlkgS0VZIChhLCBiKSk7CitDUkVBVEUgVEFCTEUg ZmtfcGFydGl0aW9uZWRfZmsgKGIgaW50LCBhIGludCkgUEFSVElUSU9OIEJZIFJBTkdFIChhLCBi KTsKK0FMVEVSIFRBQkxFIGZrX3BhcnRpdGlvbmVkX2ZrIEFERCBGT1JFSUdOIEtFWSAoYSwgYikg UkVGRVJFTkNFUyBma19ub3RwYXJ0aXRpb25lZF9wayBOT1QgVkFMSUQ7CistLSBBdHRhY2hpbmcg YSBjaGlsZCB0YWJsZSB3aXRoIHRoZSBzYW1lIHZhbGlkIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQu CitDUkVBVEUgVEFCTEUgZmtfcGFydGl0aW9uZWRfZmtfMSAoYSBpbnQsIGIgaW50KTsKK0FMVEVS IFRBQkxFIGZrX3BhcnRpdGlvbmVkX2ZrXzEgQUREIEZPUkVJR04gS0VZIChhLCBiKSBSRUZFUkVO Q0VTIGZrX25vdHBhcnRpdGlvbmVkX3BrOworQUxURVIgVEFCTEUgZmtfcGFydGl0aW9uZWRfZmsg QVRUQUNIIFBBUlRJVElPTiBma19wYXJ0aXRpb25lZF9ma18xIEZPUiBWQUxVRVMgRlJPTSAoMCww KSBUTyAoMTAwMCwxMDAwKTsKKy0tIENoaWxkIGNvbnN0cmFpbnQgd2lsbCByZW1haW4gdmFsaWQu CitTRUxFQ1QgY29ubmFtZSwgY29udmFsaWRhdGVkLCBjb25yZWxpZDo6cmVnY2xhc3MgRlJPTSBw Z19jb25zdHJhaW50CitXSEVSRSBjb25yZWxpZDo6cmVnY2xhc3M6OnRleHQgbGlrZSAnZmtfcGFy dGl0aW9uZWRfZmslJyBPUkRFUiBCWSBvaWQ7CisgICAgICAgICAgIGNvbm5hbWUgICAgICAgICAg ICB8IGNvbnZhbGlkYXRlZCB8ICAgICAgY29ucmVsaWQgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZmtf cGFydGl0aW9uZWRfZmtfYV9iX2ZrZXkgICB8IGYgICAgICAgICAgICB8IGZrX3BhcnRpdGlvbmVk X2ZrCisgZmtfcGFydGl0aW9uZWRfZmtfMV9hX2JfZmtleSB8IHQgICAgICAgICAgICB8IGZrX3Bh cnRpdGlvbmVkX2ZrXzEKKygyIHJvd3MpCisKKy0tIFZhbGlkYXRlIHRoZSBjb25zdHJhaW50CitB TFRFUiBUQUJMRSBma19wYXJ0aXRpb25lZF9mayBWQUxJREFURSBDT05TVFJBSU5UIGZrX3BhcnRp dGlvbmVkX2ZrX2FfYl9ma2V5OworLS0gQWxsIGNvbnN0cmFpbnRzIGFyZSBub3cgdmFsaWQuCitT RUxFQ1QgY29ubmFtZSwgY29udmFsaWRhdGVkLCBjb25yZWxpZDo6cmVnY2xhc3MgRlJPTSBwZ19j b25zdHJhaW50CitXSEVSRSBjb25yZWxpZDo6cmVnY2xhc3M6OnRleHQgbGlrZSAnZmtfcGFydGl0 aW9uZWRfZmslJyBPUkRFUiBCWSBvaWQ7CisgICAgICAgICAgIGNvbm5hbWUgICAgICAgICAgICB8 IGNvbnZhbGlkYXRlZCB8ICAgICAgY29ucmVsaWQgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZmtfcGFy dGl0aW9uZWRfZmtfYV9iX2ZrZXkgICB8IHQgICAgICAgICAgICB8IGZrX3BhcnRpdGlvbmVkX2Zr CisgZmtfcGFydGl0aW9uZWRfZmtfMV9hX2JfZmtleSB8IHQgICAgICAgICAgICB8IGZrX3BhcnRp dGlvbmVkX2ZrXzEKKygyIHJvd3MpCisKKy0tIEF0dGFjaGluZyBhIGNoaWxkIHdpdGggYSBOT1Qg VkFMSUQgY29uc3RyYWludC4KK0NSRUFURSBUQUJMRSBma19wYXJ0aXRpb25lZF9ma18yIChhIGlu dCwgYiBpbnQpOworSU5TRVJUIElOVE8gZmtfcGFydGl0aW9uZWRfZmtfMiBWQUxVRVMoMTAwMCwg MTAwMCk7IC0tIGRvZXNuJ3QgZXhpc3QgaW4gcmVmZXJlbmNlZCB0YWJsZQorQUxURVIgVEFCTEUg ZmtfcGFydGl0aW9uZWRfZmtfMiBBREQgRk9SRUlHTiBLRVkgKGEsIGIpIFJFRkVSRU5DRVMgZmtf bm90cGFydGl0aW9uZWRfcGsgTk9UIFZBTElEOworLS0gSXQgd2lsbCBmYWlsIGJlY2F1c2UgdGhl IGF0dGFjaCBvcGVyYXRpb24gaW1wbGljaXRseSB2YWxpZGF0ZXMgdGhlIGRhdGEuCitBTFRFUiBU QUJMRSBma19wYXJ0aXRpb25lZF9mayBBVFRBQ0ggUEFSVElUSU9OIGZrX3BhcnRpdGlvbmVkX2Zr XzIgRk9SIFZBTFVFUyBGUk9NICgxMDAwLDEwMDApIFRPICgyMDAwLDIwMDApOworRVJST1I6ICBp bnNlcnQgb3IgdXBkYXRlIG9uIHRhYmxlICJma19wYXJ0aXRpb25lZF9ma18yIiB2aW9sYXRlcyBm b3JlaWduIGtleSBjb25zdHJhaW50ICJma19wYXJ0aXRpb25lZF9ma18yX2FfYl9ma2V5IgorREVU QUlMOiAgS2V5IChhLCBiKT0oMTAwMCwgMTAwMCkgaXMgbm90IHByZXNlbnQgaW4gdGFibGUgImZr X25vdHBhcnRpdGlvbmVkX3BrIi4KKy0tIFJlbW92ZSB0aGUgaW52YWxpZCBkYXRhIGFuZCB0cnkg YWdhaW4uCitUUlVOQ0FURSBma19wYXJ0aXRpb25lZF9ma18yOworQUxURVIgVEFCTEUgZmtfcGFy dGl0aW9uZWRfZmsgQVRUQUNIIFBBUlRJVElPTiBma19wYXJ0aXRpb25lZF9ma18yIEZPUiBWQUxV RVMgRlJPTSAoMTAwMCwxMDAwKSBUTyAoMjAwMCwyMDAwKTsKKy0tIFRoZSBjaGlsZCBjb25zdHJh aW50IHdpbGwgYWxzbyBiZSB2YWxpZC4KK1NFTEVDVCBjb25uYW1lLCBjb252YWxpZGF0ZWQgRlJP TSBwZ19jb25zdHJhaW50IFdIRVJFIGNvbnJlbGlkID0gJ2ZrX3BhcnRpdGlvbmVkX2ZrXzInOjpy ZWdjbGFzczsKKyAgICAgICAgICAgY29ubmFtZSAgICAgICAgICAgIHwgY29udmFsaWRhdGVkIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tCisgZmtfcGFydGl0 aW9uZWRfZmtfMl9hX2JfZmtleSB8IHQKKygxIHJvdykKKworLS0gVGVzdCBjYXNlIHdoZXJlIHRo ZSBjaGlsZCBjb25zdHJhaW50IGlzIGludmFsaWQsIHRoZSBncmFuZGNoaWxkIGNvbnN0cmFpbnQK Ky0tIGlzIHZhbGlkLCBhbmQgdGhlIHZhbGlkYXRpb24gZm9yIHRoZSBncmFuZGNoaWxkIHNob3Vs ZCBiZSBza2lwcGVkIHdoZW4gYQorLS0gdmFsaWQgY29uc3RyYWludCBpcyBhcHBsaWVkIHRvIHRo ZSB0b3AgcGFyZW50LgorQ1JFQVRFIFRBQkxFIGZrX3BhcnRpdGlvbmVkX2ZrXzMgKGEgaW50LCBi IGludCkgUEFSVElUSU9OIEJZIFJBTkdFIChhLCBiKTsKK0FMVEVSIFRBQkxFIGZrX3BhcnRpdGlv bmVkX2ZrXzMgQUREIEZPUkVJR04gS0VZIChhLCBiKSBSRUZFUkVOQ0VTIGZrX25vdHBhcnRpdGlv bmVkX3BrIE5PVCBWQUxJRDsKK0NSRUFURSBUQUJMRSBma19wYXJ0aXRpb25lZF9ma18zXzEgKGEg aW50LCBiIGludCk7CitBTFRFUiBUQUJMRSBma19wYXJ0aXRpb25lZF9ma18zXzEgQUREIEZPUkVJ R04gS0VZIChhLCBiKSBSRUZFUkVOQ0VTIGZrX25vdHBhcnRpdGlvbmVkX3BrOworQUxURVIgVEFC TEUgZmtfcGFydGl0aW9uZWRfZmtfMyBBVFRBQ0ggUEFSVElUSU9OIGZrX3BhcnRpdGlvbmVkX2Zr XzNfMSBGT1IgVkFMVUVTIEZST00gKDIwMDAsMjAwMCkgVE8gKDMwMDAsMzAwMCk7CitBTFRFUiBU QUJMRSBma19wYXJ0aXRpb25lZF9mayBBVFRBQ0ggUEFSVElUSU9OIGZrX3BhcnRpdGlvbmVkX2Zr XzMgRk9SIFZBTFVFUyBGUk9NICgyMDAwLDIwMDApIFRPICgzMDAwLDMwMDApOworLS0gQWxsIGNv bnN0cmFpbnRzIGFyZSBub3cgdmFsaWQuCitTRUxFQ1QgY29ubmFtZSwgY29udmFsaWRhdGVkLCBj b25yZWxpZDo6cmVnY2xhc3MgRlJPTSBwZ19jb25zdHJhaW50CitXSEVSRSBjb25yZWxpZDo6cmVn Y2xhc3M6OnRleHQgbGlrZSAnZmtfcGFydGl0aW9uZWRfZmslJyBPUkRFUiBCWSBvaWQ7CisgICAg ICAgICAgICBjb25uYW1lICAgICAgICAgICAgIHwgY29udmFsaWRhdGVkIHwgICAgICAgY29ucmVs aWQgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBma19wYXJ0aXRpb25lZF9ma19hX2JfZmtleSAg ICAgfCB0ICAgICAgICAgICAgfCBma19wYXJ0aXRpb25lZF9maworIGZrX3BhcnRpdGlvbmVkX2Zr XzFfYV9iX2ZrZXkgICB8IHQgICAgICAgICAgICB8IGZrX3BhcnRpdGlvbmVkX2ZrXzEKKyBma19w YXJ0aXRpb25lZF9ma18yX2FfYl9ma2V5ICAgfCB0ICAgICAgICAgICAgfCBma19wYXJ0aXRpb25l ZF9ma18yCisgZmtfcGFydGl0aW9uZWRfZmtfM19hX2JfZmtleSAgIHwgdCAgICAgICAgICAgIHwg ZmtfcGFydGl0aW9uZWRfZmtfMworIGZrX3BhcnRpdGlvbmVkX2ZrXzNfMV9hX2JfZmtleSB8IHQg ICAgICAgICAgICB8IGZrX3BhcnRpdGlvbmVkX2ZrXzNfMQorKDUgcm93cykKKworRFJPUCBUQUJM RSBma19wYXJ0aXRpb25lZF9maywgZmtfbm90cGFydGl0aW9uZWRfcGs7CistLSBOT1QgVkFMSUQg Zm9yZWlnbiBrZXkgb24gYSBub24tcGFydGl0aW9uZWQgdGFibGUgcmVmZXJlbmNpbmcgYSBwYXJ0 aXRpb25lZCB0YWJsZQorQ1JFQVRFIFRBQkxFIGZrX3BhcnRpdGlvbmVkX3BrIChhIGludCwgYiBp bnQsIFBSSU1BUlkgS0VZIChhLCBiKSkgUEFSVElUSU9OIEJZIFJBTkdFIChhLCBiKTsKK0NSRUFU RSBUQUJMRSBma19wYXJ0aXRpb25lZF9wa18xIFBBUlRJVElPTiBPRiBma19wYXJ0aXRpb25lZF9w ayBGT1IgVkFMVUVTIEZST00gKDAsMCkgVE8gKDEwMDAsMTAwMCk7CitDUkVBVEUgVEFCTEUgZmtf bm90cGFydGl0aW9uZWRfZmsgKGIgaW50LCBhIGludCk7CitBTFRFUiBUQUJMRSBma19ub3RwYXJ0 aXRpb25lZF9mayBBREQgRk9SRUlHTiBLRVkgKGEsIGIpIFJFRkVSRU5DRVMgZmtfcGFydGl0aW9u ZWRfcGsgTk9UIFZBTElEOworLS0gQ29uc3RyYWludCB3aWxsIGJlIGludmFsaWQuCitTRUxFQ1Qg Y29ubmFtZSwgY29udmFsaWRhdGVkIEZST00gcGdfY29uc3RyYWludCBXSEVSRSBjb25yZWxpZCA9 ICdma19ub3RwYXJ0aXRpb25lZF9mayc6OnJlZ2NsYXNzOworICAgICAgICAgICAgY29ubmFtZSAg ICAgICAgICAgICB8IGNvbnZhbGlkYXRlZCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tCisgZmtfbm90cGFydGl0aW9uZWRfZmtfYV9iX2ZrZXkgIHwgZgor IGZrX25vdHBhcnRpdGlvbmVkX2ZrX2FfYl9ma2V5MSB8IGYKKygyIHJvd3MpCisKK0FMVEVSIFRB QkxFIGZrX25vdHBhcnRpdGlvbmVkX2ZrIFZBTElEQVRFIENPTlNUUkFJTlQgZmtfbm90cGFydGl0 aW9uZWRfZmtfYV9iX2ZrZXk7CistLSBBbGwgY29uc3RyYWludHMgYXJlIG5vdyB2YWxpZC4KK1NF TEVDVCBjb25uYW1lLCBjb252YWxpZGF0ZWQgRlJPTSBwZ19jb25zdHJhaW50IFdIRVJFIGNvbnJl bGlkID0gJ2ZrX25vdHBhcnRpdGlvbmVkX2ZrJzo6cmVnY2xhc3M7CisgICAgICAgICAgICBjb25u YW1lICAgICAgICAgICAgIHwgY29udmFsaWRhdGVkIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0KKyBma19ub3RwYXJ0aXRpb25lZF9ma19hX2JfZmtleSAg fCB0CisgZmtfbm90cGFydGl0aW9uZWRfZmtfYV9iX2ZrZXkxIHwgdAorKDIgcm93cykKKworRFJP UCBUQUJMRSBma19ub3RwYXJ0aXRpb25lZF9maywgZmtfcGFydGl0aW9uZWRfcGs7CiAtLSBDcmVh dGlvbiBvZiBhIHBhcnRpdGlvbmVkIGhpZXJhcmNoeSB3aXRoIGlycmVndWxhciBkZWZpbml0aW9u cwogQ1JFQVRFIFRBQkxFIGZrX25vdHBhcnRpdGlvbmVkX3BrIChmZHJvcDEgaW50LCBhIGludCwg ZmRyb3AyIGludCwgYiBpbnQsCiAgIFBSSU1BUlkgS0VZIChhLCBiKSk7CkBAIC0xNTk3LDEyICsx Njg4LDYgQEAgQUxURVIgVEFCTEUgZmtfcGFydGl0aW9uZWRfZmsgQVRUQUNIIFBBUlRJVElPTiBm a19wYXJ0aXRpb25lZF9ma18zCiBBTFRFUiBUQUJMRSBPTkxZIGZrX3BhcnRpdGlvbmVkX2ZrIEFE RCBGT1JFSUdOIEtFWSAoYSwgYikKICAgUkVGRVJFTkNFUyBma19ub3RwYXJ0aXRpb25lZF9wazsK IEVSUk9SOiAgY2Fubm90IHVzZSBPTkxZIGZvciBmb3JlaWduIGtleSBvbiBwYXJ0aXRpb25lZCB0 YWJsZSAiZmtfcGFydGl0aW9uZWRfZmsiIHJlZmVyZW5jaW5nIHJlbGF0aW9uICJma19ub3RwYXJ0 aXRpb25lZF9wayIKLS0tIEFkZGluZyBhIE5PVCBWQUxJRCBmb3JlaWduIGtleSBvbiBhIHBhcnRp dGlvbmVkIHRhYmxlIHJlZmVyZW5jaW5nCi0tLSBhIG5vbi1wYXJ0aXRpb25lZCB0YWJsZSBmYWls cy4KLUFMVEVSIFRBQkxFIGZrX3BhcnRpdGlvbmVkX2ZrIEFERCBGT1JFSUdOIEtFWSAoYSwgYikK LSAgUkVGRVJFTkNFUyBma19ub3RwYXJ0aXRpb25lZF9wayBOT1QgVkFMSUQ7Ci1FUlJPUjogIGNh bm5vdCBhZGQgTk9UIFZBTElEIGZvcmVpZ24ga2V5IG9uIHBhcnRpdGlvbmVkIHRhYmxlICJma19w YXJ0aXRpb25lZF9mayIgcmVmZXJlbmNpbmcgcmVsYXRpb24gImZrX25vdHBhcnRpdGlvbmVkX3Br IgotREVUQUlMOiAgVGhpcyBmZWF0dXJlIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIG9uIHBhcnRpdGlv bmVkIHRhYmxlcy4KIC0tIHRoZXNlIGluc2VydHMsIHRhcmdldGluZyBib3RoIHRoZSBwYXJ0aXRp b24gZGlyZWN0bHkgYXMgd2VsbCBhcyB0aGUKIC0tIHBhcnRpdGlvbmVkIHRhYmxlLCBzaG91bGQg YWxsIGZhaWwKIElOU0VSVCBJTlRPIGZrX3BhcnRpdGlvbmVkX2ZrIChhLGIpIFZBTFVFUyAoNTAw LCA1MDEpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yZWlnbl9rZXkuc3Fs IGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yZWlnbl9rZXkuc3FsCmluZGV4IDhjNGU0YzdjODMz Li40NmZkZWU4YjIwZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yZWlnbl9r ZXkuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2ZvcmVpZ25fa2V5LnNxbApAQCAtMTE3 Myw2ICsxMTczLDc0IEBAIGRyb3AgdGFibGUgcGt0YWJsZTIsIGZrdGFibGUyOwogLS0gRm9yZWln biBrZXlzIGFuZCBwYXJ0aXRpb25lZCB0YWJsZXMKIC0tCiAKKy0tIE5PVCBWQUxJRCBmb3JlaWdu IGtleSBvbiBwYXJ0aXRpb25lZCB0YWJsZQorQ1JFQVRFIFRBQkxFIGZrX25vdHBhcnRpdGlvbmVk X3BrIChhIGludCwgYiBpbnQsIFBSSU1BUlkgS0VZIChhLCBiKSk7CitDUkVBVEUgVEFCTEUgZmtf cGFydGl0aW9uZWRfZmsgKGIgaW50LCBhIGludCkgUEFSVElUSU9OIEJZIFJBTkdFIChhLCBiKTsK K0FMVEVSIFRBQkxFIGZrX3BhcnRpdGlvbmVkX2ZrIEFERCBGT1JFSUdOIEtFWSAoYSwgYikgUkVG RVJFTkNFUyBma19ub3RwYXJ0aXRpb25lZF9wayBOT1QgVkFMSUQ7CisKKy0tIEF0dGFjaGluZyBh IGNoaWxkIHRhYmxlIHdpdGggdGhlIHNhbWUgdmFsaWQgZm9yZWlnbiBrZXkgY29uc3RyYWludC4K K0NSRUFURSBUQUJMRSBma19wYXJ0aXRpb25lZF9ma18xIChhIGludCwgYiBpbnQpOworQUxURVIg VEFCTEUgZmtfcGFydGl0aW9uZWRfZmtfMSBBREQgRk9SRUlHTiBLRVkgKGEsIGIpIFJFRkVSRU5D RVMgZmtfbm90cGFydGl0aW9uZWRfcGs7CitBTFRFUiBUQUJMRSBma19wYXJ0aXRpb25lZF9mayBB VFRBQ0ggUEFSVElUSU9OIGZrX3BhcnRpdGlvbmVkX2ZrXzEgRk9SIFZBTFVFUyBGUk9NICgwLDAp IFRPICgxMDAwLDEwMDApOworCistLSBDaGlsZCBjb25zdHJhaW50IHdpbGwgcmVtYWluIHZhbGlk LgorU0VMRUNUIGNvbm5hbWUsIGNvbnZhbGlkYXRlZCwgY29ucmVsaWQ6OnJlZ2NsYXNzIEZST00g cGdfY29uc3RyYWludAorV0hFUkUgY29ucmVsaWQ6OnJlZ2NsYXNzOjp0ZXh0IGxpa2UgJ2ZrX3Bh cnRpdGlvbmVkX2ZrJScgT1JERVIgQlkgb2lkOworCistLSBWYWxpZGF0ZSB0aGUgY29uc3RyYWlu dAorQUxURVIgVEFCTEUgZmtfcGFydGl0aW9uZWRfZmsgVkFMSURBVEUgQ09OU1RSQUlOVCBma19w YXJ0aXRpb25lZF9ma19hX2JfZmtleTsKKworLS0gQWxsIGNvbnN0cmFpbnRzIGFyZSBub3cgdmFs aWQuCitTRUxFQ1QgY29ubmFtZSwgY29udmFsaWRhdGVkLCBjb25yZWxpZDo6cmVnY2xhc3MgRlJP TSBwZ19jb25zdHJhaW50CitXSEVSRSBjb25yZWxpZDo6cmVnY2xhc3M6OnRleHQgbGlrZSAnZmtf cGFydGl0aW9uZWRfZmslJyBPUkRFUiBCWSBvaWQ7CisKKy0tIEF0dGFjaGluZyBhIGNoaWxkIHdp dGggYSBOT1QgVkFMSUQgY29uc3RyYWludC4KK0NSRUFURSBUQUJMRSBma19wYXJ0aXRpb25lZF9m a18yIChhIGludCwgYiBpbnQpOworSU5TRVJUIElOVE8gZmtfcGFydGl0aW9uZWRfZmtfMiBWQUxV RVMoMTAwMCwgMTAwMCk7IC0tIGRvZXNuJ3QgZXhpc3QgaW4gcmVmZXJlbmNlZCB0YWJsZQorQUxU RVIgVEFCTEUgZmtfcGFydGl0aW9uZWRfZmtfMiBBREQgRk9SRUlHTiBLRVkgKGEsIGIpIFJFRkVS RU5DRVMgZmtfbm90cGFydGl0aW9uZWRfcGsgTk9UIFZBTElEOworCistLSBJdCB3aWxsIGZhaWwg YmVjYXVzZSB0aGUgYXR0YWNoIG9wZXJhdGlvbiBpbXBsaWNpdGx5IHZhbGlkYXRlcyB0aGUgZGF0 YS4KK0FMVEVSIFRBQkxFIGZrX3BhcnRpdGlvbmVkX2ZrIEFUVEFDSCBQQVJUSVRJT04gZmtfcGFy dGl0aW9uZWRfZmtfMiBGT1IgVkFMVUVTIEZST00gKDEwMDAsMTAwMCkgVE8gKDIwMDAsMjAwMCk7 CisKKy0tIFJlbW92ZSB0aGUgaW52YWxpZCBkYXRhIGFuZCB0cnkgYWdhaW4uCitUUlVOQ0FURSBm a19wYXJ0aXRpb25lZF9ma18yOworQUxURVIgVEFCTEUgZmtfcGFydGl0aW9uZWRfZmsgQVRUQUNI IFBBUlRJVElPTiBma19wYXJ0aXRpb25lZF9ma18yIEZPUiBWQUxVRVMgRlJPTSAoMTAwMCwxMDAw KSBUTyAoMjAwMCwyMDAwKTsKKworLS0gVGhlIGNoaWxkIGNvbnN0cmFpbnQgd2lsbCBhbHNvIGJl IHZhbGlkLgorU0VMRUNUIGNvbm5hbWUsIGNvbnZhbGlkYXRlZCBGUk9NIHBnX2NvbnN0cmFpbnQg V0hFUkUgY29ucmVsaWQgPSAnZmtfcGFydGl0aW9uZWRfZmtfMic6OnJlZ2NsYXNzOworCistLSBU ZXN0IGNhc2Ugd2hlcmUgdGhlIGNoaWxkIGNvbnN0cmFpbnQgaXMgaW52YWxpZCwgdGhlIGdyYW5k Y2hpbGQgY29uc3RyYWludAorLS0gaXMgdmFsaWQsIGFuZCB0aGUgdmFsaWRhdGlvbiBmb3IgdGhl IGdyYW5kY2hpbGQgc2hvdWxkIGJlIHNraXBwZWQgd2hlbiBhCistLSB2YWxpZCBjb25zdHJhaW50 IGlzIGFwcGxpZWQgdG8gdGhlIHRvcCBwYXJlbnQuCitDUkVBVEUgVEFCTEUgZmtfcGFydGl0aW9u ZWRfZmtfMyAoYSBpbnQsIGIgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UgKGEsIGIpOworQUxURVIg VEFCTEUgZmtfcGFydGl0aW9uZWRfZmtfMyBBREQgRk9SRUlHTiBLRVkgKGEsIGIpIFJFRkVSRU5D RVMgZmtfbm90cGFydGl0aW9uZWRfcGsgTk9UIFZBTElEOworQ1JFQVRFIFRBQkxFIGZrX3BhcnRp dGlvbmVkX2ZrXzNfMSAoYSBpbnQsIGIgaW50KTsKK0FMVEVSIFRBQkxFIGZrX3BhcnRpdGlvbmVk X2ZrXzNfMSBBREQgRk9SRUlHTiBLRVkgKGEsIGIpIFJFRkVSRU5DRVMgZmtfbm90cGFydGl0aW9u ZWRfcGs7CitBTFRFUiBUQUJMRSBma19wYXJ0aXRpb25lZF9ma18zIEFUVEFDSCBQQVJUSVRJT04g ZmtfcGFydGl0aW9uZWRfZmtfM18xIEZPUiBWQUxVRVMgRlJPTSAoMjAwMCwyMDAwKSBUTyAoMzAw MCwzMDAwKTsKK0FMVEVSIFRBQkxFIGZrX3BhcnRpdGlvbmVkX2ZrIEFUVEFDSCBQQVJUSVRJT04g ZmtfcGFydGl0aW9uZWRfZmtfMyBGT1IgVkFMVUVTIEZST00gKDIwMDAsMjAwMCkgVE8gKDMwMDAs MzAwMCk7CisKKy0tIEFsbCBjb25zdHJhaW50cyBhcmUgbm93IHZhbGlkLgorU0VMRUNUIGNvbm5h bWUsIGNvbnZhbGlkYXRlZCwgY29ucmVsaWQ6OnJlZ2NsYXNzIEZST00gcGdfY29uc3RyYWludAor V0hFUkUgY29ucmVsaWQ6OnJlZ2NsYXNzOjp0ZXh0IGxpa2UgJ2ZrX3BhcnRpdGlvbmVkX2ZrJScg T1JERVIgQlkgb2lkOworCitEUk9QIFRBQkxFIGZrX3BhcnRpdGlvbmVkX2ZrLCBma19ub3RwYXJ0 aXRpb25lZF9wazsKKworLS0gTk9UIFZBTElEIGZvcmVpZ24ga2V5IG9uIGEgbm9uLXBhcnRpdGlv bmVkIHRhYmxlIHJlZmVyZW5jaW5nIGEgcGFydGl0aW9uZWQgdGFibGUKK0NSRUFURSBUQUJMRSBm a19wYXJ0aXRpb25lZF9wayAoYSBpbnQsIGIgaW50LCBQUklNQVJZIEtFWSAoYSwgYikpIFBBUlRJ VElPTiBCWSBSQU5HRSAoYSwgYik7CitDUkVBVEUgVEFCTEUgZmtfcGFydGl0aW9uZWRfcGtfMSBQ QVJUSVRJT04gT0YgZmtfcGFydGl0aW9uZWRfcGsgRk9SIFZBTFVFUyBGUk9NICgwLDApIFRPICgx MDAwLDEwMDApOworQ1JFQVRFIFRBQkxFIGZrX25vdHBhcnRpdGlvbmVkX2ZrIChiIGludCwgYSBp bnQpOworQUxURVIgVEFCTEUgZmtfbm90cGFydGl0aW9uZWRfZmsgQUREIEZPUkVJR04gS0VZIChh LCBiKSBSRUZFUkVOQ0VTIGZrX3BhcnRpdGlvbmVkX3BrIE5PVCBWQUxJRDsKKworLS0gQ29uc3Ry YWludCB3aWxsIGJlIGludmFsaWQuCitTRUxFQ1QgY29ubmFtZSwgY29udmFsaWRhdGVkIEZST00g cGdfY29uc3RyYWludCBXSEVSRSBjb25yZWxpZCA9ICdma19ub3RwYXJ0aXRpb25lZF9mayc6OnJl Z2NsYXNzOworCitBTFRFUiBUQUJMRSBma19ub3RwYXJ0aXRpb25lZF9mayBWQUxJREFURSBDT05T VFJBSU5UIGZrX25vdHBhcnRpdGlvbmVkX2ZrX2FfYl9ma2V5OworCistLSBBbGwgY29uc3RyYWlu dHMgYXJlIG5vdyB2YWxpZC4KK1NFTEVDVCBjb25uYW1lLCBjb252YWxpZGF0ZWQgRlJPTSBwZ19j b25zdHJhaW50IFdIRVJFIGNvbnJlbGlkID0gJ2ZrX25vdHBhcnRpdGlvbmVkX2ZrJzo6cmVnY2xh c3M7CisKK0RST1AgVEFCTEUgZmtfbm90cGFydGl0aW9uZWRfZmssIGZrX3BhcnRpdGlvbmVkX3Br OworCiAtLSBDcmVhdGlvbiBvZiBhIHBhcnRpdGlvbmVkIGhpZXJhcmNoeSB3aXRoIGlycmVndWxh ciBkZWZpbml0aW9ucwogQ1JFQVRFIFRBQkxFIGZrX25vdHBhcnRpdGlvbmVkX3BrIChmZHJvcDEg aW50LCBhIGludCwgZmRyb3AyIGludCwgYiBpbnQsCiAgIFBSSU1BUlkgS0VZIChhLCBiKSk7CkBA IC0xMjAwLDEwICsxMjY4LDYgQEAgQUxURVIgVEFCTEUgZmtfcGFydGl0aW9uZWRfZmsgQVRUQUNI IFBBUlRJVElPTiBma19wYXJ0aXRpb25lZF9ma18zCiAtLSBhIG5vbi1wYXJ0aXRpb25lZCB0YWJs ZSBmYWlscy4KIEFMVEVSIFRBQkxFIE9OTFkgZmtfcGFydGl0aW9uZWRfZmsgQUREIEZPUkVJR04g S0VZIChhLCBiKQogICBSRUZFUkVOQ0VTIGZrX25vdHBhcnRpdGlvbmVkX3BrOwotLS0gQWRkaW5n IGEgTk9UIFZBTElEIGZvcmVpZ24ga2V5IG9uIGEgcGFydGl0aW9uZWQgdGFibGUgcmVmZXJlbmNp bmcKLS0tIGEgbm9uLXBhcnRpdGlvbmVkIHRhYmxlIGZhaWxzLgotQUxURVIgVEFCTEUgZmtfcGFy dGl0aW9uZWRfZmsgQUREIEZPUkVJR04gS0VZIChhLCBiKQotICBSRUZFUkVOQ0VTIGZrX25vdHBh cnRpdGlvbmVkX3BrIE5PVCBWQUxJRDsKIAogLS0gdGhlc2UgaW5zZXJ0cywgdGFyZ2V0aW5nIGJv dGggdGhlIHBhcnRpdGlvbiBkaXJlY3RseSBhcyB3ZWxsIGFzIHRoZQogLS0gcGFydGl0aW9uZWQg dGFibGUsIHNob3VsZCBhbGwgZmFpbAotLSAKMi40My41Cgo= --000000000000495bca062c456214--