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.96) (envelope-from ) id 1wgYtp-006GFC-1M for pgsql-bugs@arkaria.postgresql.org; Mon, 06 Jul 2026 02:17:33 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wgYto-00EWU1-0f for pgsql-bugs@arkaria.postgresql.org; Mon, 06 Jul 2026 02:17:32 +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.96) (envelope-from ) id 1wgYtn-00EWTs-2G for pgsql-bugs@lists.postgresql.org; Mon, 06 Jul 2026 02:17:31 +0000 Received: from mail-oa1-x2b.google.com ([2001:4860:4864:20::2b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wgYtl-00000001jhB-3mLg for pgsql-bugs@postgresql.org; Mon, 06 Jul 2026 02:17:30 +0000 Received: by mail-oa1-x2b.google.com with SMTP id 586e51a60fabf-446f87b6de1so1000409fac.3 for ; Sun, 05 Jul 2026 19:17:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1783304249; cv=none; d=google.com; s=arc-20260327; b=QctkMJBYPb+vOGvJFtHmdSJZnhGZYTEOhLkUalIgagacZVSoFNAph7OTt2GXhTDMN/ rh4yFW+G3QlaeBoAO2h4rx4OGVaxzc7vO0SG1Wu/ah9Al4x0EEMG2XbndNwrIO0BbtEl +KcNHUkgO9YyhIRa0NlTx6CUmBrSRd7gkdfFTyZvqrcpBWYcQES+PnLQ1/wILpc9qRdR PVj9C0azOCsT8tFaEWXLXvuEIaaFor0b9jNwPkE57Fu8fI7GUYYOeAR8bRSvXLF58JRp 6vT8Cc38cD5Z3fkF2n1ofxQJlwhB2e+SfNB3MOa4/TvmjX3HPaqzi0I0T9Wt0bhhWfom L9Gg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=63ughx2YN0yxxWJftfPsdbj91L/LDW9dQOkVvbS2jfM=; fh=fNPwCKKQjS7loeG0QdVScHdB5f+5X6umzsZdLK/kF0g=; b=D4VfZUOKc5qID6kD6P+AIJxrGUqAWZO2Cd35/zRI3V+G4KbhaEvtmO/J3loz+u1QBk RaqsJQE0Di2TG5sk2NCewKsTK500DUZVENfPAjCDAbAcyz0erOXbw/F05q+YzdwErPPV maI/pfDaJj5xJql4bNyzx9RqpfI4eV1Cy0OIMnbU4BC2JK3tGJqVE7nkHI1ijNlCwTAK CflR54Bk9wTAQ2uOb+io+NSpuH8iZ7fSr+YYf5RC/5hHn2FSKVfdw55SAgtusLEyxXTl IdPOkvKKRjpVaNx6z4mj7GbmvNOcXalB2QsZogz3UEUSQPh+08qRLjBvTeINGmUzFiq6 KZZg==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783304249; x=1783909049; 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=63ughx2YN0yxxWJftfPsdbj91L/LDW9dQOkVvbS2jfM=; b=UPJPc86bW95U4uZylHX9ZaJEsHoHotrOALm3cQwbulCR8n/7stttmCV2lJj4CgmQo/ MnHckOwB5sLrP8/6CVMtbBsubcXMz1iV6Bc3ml98841o6r4L4JANENm4Tsa8mi+p6AkL EbmM3oL1O2c2YiXXa4mej+mTrrOhZGrZEqZd/WeWfqKPZjz4uGMOixkFwNc0PsrbGT1m j/wdFRU1exDtvh+vrklPnGNbYeBYKolUfZFbkbem9V+5HACuwffSjVx0icSv0P3m1BRL kDQZnNJboGFo0t6m6hEvA3xp3vxDDKGPYg4qCFwQbB5KrWRB33wGZJb4u2YgZAUv04CQ 46ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783304249; x=1783909049; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=63ughx2YN0yxxWJftfPsdbj91L/LDW9dQOkVvbS2jfM=; b=Wvt+LnO2xIQTAmJC+rCGqDKu6+1TrqANXS/w2qwCz99RacpLJXV7RmC1v3kDoG61EX 8UZsuMjlt6nhwitSYiOoX305D318XHLKPS3pgJfNJi0MYCSupF0c2yCFZYLu7R2DSnOX bTud+cC9G7TjcE6F1ksHtRgnjhqZ4vPBPlAJtjVtr+jlqojOI2yO3WSFEkkrjyNz/MGZ MDDUusQECjHou0aqKXJpvlk3EnKpeR/NhFJ7gDdmHposm4Jd1IAdme0gKHi2q3i5YtVN HBrlK1FZc7WMWizvchFTf1/KDHrQcyKM58Riq4xsunSB/K3lBS3SHmjxcVsEuDw4uCJ0 sOvw== X-Gm-Message-State: AOJu0Yzm/dp/RP4VhdxGT8LRW1tngrN2AnVtkTi2aAA3fPLAQ8WsD/Cy J81JiahiD5JxP8DmQ0ihjezZM3NHwC+8LTpgiZ41NYD338kLXkjg+SzIS/YQLwKOwCUhfZNl1Mm 3pYtYufG84eNT3SWRTiYwpoxtCFSi4OgP/P4E X-Gm-Gg: AfdE7ckpubJeAdymrxWWEMD9Kfz85N5e+L/GSxzmUCF5Jtyt0jJ2KMhP6wuMu+qkSCg 93uoFJllU9pp7NTNTc/NDi59yCsaXFsrGGqZckNvMjmTS+SEJOawsYrEnE0h6o+8dwWV3GSxcTk pfvc46s41lLy8PZdIwMqfw4op89F5MNlqyZyeZ671ia8Fs/U3aZ2BV5cVpsGMEpkHzlMflXc8zn e5bZ1I0oR5BV5So7OBgdVqq2gTcAyB23Zzvc4Af4LyqNVnJu2tpfeT9MpWumHy0pwb8EKBjNPWE Ln35rmfj X-Received: by 2002:a05:6871:418c:b0:448:3eb2:8c10 with SMTP id 586e51a60fabf-44d180d3c77mr4887051fac.19.1783304249080; Sun, 05 Jul 2026 19:17:29 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Richard Guo Date: Mon, 6 Jul 2026 11:17:16 +0900 X-Gm-Features: AVVi8CeEWTF6DYn73cr0UnvHTU20nlqS0svJaS2j1FyHoS4UKC-7iJw9JGP7ROc Message-ID: Subject: Re: EXPLAIN (VERBOSE) fails with for JSON_ARRAYAGG/JSON_OBJECTAGG + window function To: Thom Brown Cc: pgsql-bugs Content-Type: multipart/mixed; boundary="0000000000004b17550655e7e0c2" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004b17550655e7e0c2 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Jul 3, 2026 at 5:36=E2=80=AFPM Thom Brown wrote: > Thanks for taking a look at this. It's unfortunate that reconstructing > the syntax is problematic, because in the case of the original query > that tripped on this bug, I lose the following from my original query: > ... > I guess the relevant information can be gleaned from this, but not for > JSON_ARRAYAGG(i RETURNING text) because we get the same output whether > we're returning text or json. Yeah, the v1 patch is lossy, and the lost information cannot be recovered from the plan at all. So I'm switching back to the resolve_special_varno() reconstruction I had tried and set aside. My earlier objection was that it makes the WindowAgg look like it computes a JSON aggregate when it only passes through a value computed below. But the lower node still prints jsonb_agg_strict(name), so the plan does show where the aggregate is computed, and I think that is a smaller cost than losing the information outright. Also, partial aggregation already deparses this way. The combining aggregate's argument is a Var referencing the partial aggregate's output, and get_agg_expr() resolves it back with resolve_special_varno() to reprint the aggregate at the finalizing node. I still don't want to hack the planner to keep the JsonConstructorExpr with its Aggref in make_window_input_target(), because I still think that that is too invasive and changes which node evaluates the wrapper. Hence, I end up with the attached v2 patch. - Richard --0000000000004b17550655e7e0c2 Content-Type: application/octet-stream; name="v2-0001-Fix-EXPLAIN-failure-when-deparsing-SQL-JSON-aggre.patch" Content-Disposition: attachment; filename="v2-0001-Fix-EXPLAIN-failure-when-deparsing-SQL-JSON-aggre.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mr8lanvh0 RnJvbSAxY2M3ZTc3YzRiZjZiZWRlNzJmZTU3NTYzOTBhYzg2ZTc3MDkyYTdiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAzIEp1bCAyMDI2IDEwOjUyOjI5ICswOTAwClN1YmplY3Q6IFtQQVRDSCB2Ml0g Rml4IEVYUExBSU4gZmFpbHVyZSB3aGVuIGRlcGFyc2luZyBTUUwvSlNPTiBhZ2dyZWdhdGVzCgpJ ZiBhbiBleHByZXNzaW9uIGNvbnRhaW5pbmcgYW4gYWdncmVnYXRlIGlzIGV2YWx1YXRlZCBhYm92 ZSB0aGUgcGxhbgpub2RlIHRoYXQgY29tcHV0ZXMgdGhlIGFnZ3JlZ2F0ZSwgYXMgaGFwcGVucyB3 aXRoIHdpbmRvdyBmdW5jdGlvbnMgb3IKd2l0aCBleHByZXNzaW9ucyBwb3N0cG9uZWQgdG8gYWJv dmUgdGhlIGZpbmFsIHNvcnQsIHNldHJlZnMuYyByZXBsYWNlcwp0aGUgQWdncmVmIG9yIFdpbmRv d0Z1bmMgd2l0aCBhIFZhciByZWZlcmVuY2luZyB0aGUgbG93ZXIgbm9kZSdzCm91dHB1dC4gIEZv ciBTUUwvSlNPTiBhZ2dyZWdhdGVzIHN1Y2ggYXMgSlNPTl9BUlJBWUFHRywgZGVwYXJzaW5nIHRo ZQpjb250YWluaW5nIEpzb25Db25zdHJ1Y3RvckV4cHIgdGhlbiBmYWlsZWQgd2l0aCAiaW52YWxp ZApKc29uQ29uc3RydWN0b3JFeHByIHVuZGVybHlpbmcgbm9kZSB0eXBlIiwgc2luY2UKZ2V0X2pz b25fYWdnX2NvbnN0cnVjdG9yKCkgZGlkIG5vdCBleHBlY3QgYSBWYXIgdGhlcmUuCgpGaXggYnkg cmVzb2x2aW5nIHRoZSBWYXIgYmFjayB0byB0aGUgdW5kZXJseWluZyBBZ2dyZWYgb3IgV2luZG93 RnVuYwphbmQgZGVwYXJzaW5nIHRoZSBjb25zdHJ1Y3RvciBhcyBpZiB0aGUgYWdncmVnYXRlIHdl cmUgY29tcHV0ZWQgYXQgdGhlCmN1cnJlbnQgbm9kZS4gIFRoZSBKc29uQ29uc3RydWN0b3JFeHBy IHJldGFpbnMgdGhlIFJFVFVSTklORyBjbGF1c2UKYW5kIHRoZSBBQlNFTlQvTlVMTCBPTiBOVUxM IGFuZCBXSVRIIFVOSVFVRSBvcHRpb25zLCBhbmQgdGhlIGFyZ3VtZW50cwpjb21lIGZyb20gdGhl IHJlc29sdmVkIGFnZ3JlZ2F0ZSwgc28gdGhlIG9yaWdpbmFsIEpTT04gYWdncmVnYXRlCnN5bnRh eCBpcyByZXByb2R1Y2VkIGluIGZ1bGwuICBUaGlzIG1pcnJvcnMgaG93IGdldF9hZ2dfZXhwcigp IGFscmVhZHkKbG9va3MgdGhyb3VnaCBzdWNoIGEgVmFyIHdoZW4gZGVwYXJzaW5nIGEgY29tYmlu aW5nIGFnZ3JlZ2F0ZS4KLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgICAg IHwgIDMyICsrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb24ub3V0IHwg MTAxICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9zcWxq c29uLnNxbCAgICAgIHwgIDQxICsrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDE3NCBpbnNl cnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCmluZGV4IDg4ZGU1YzA0ODFjLi44 MTk2MzE3ODFjMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwpAQCAtNTEyLDYgKzUxMiw4 IEBAIHN0YXRpYyB2b2lkIGdldF9qc29uX2FnZ19jb25zdHJ1Y3RvcihKc29uQ29uc3RydWN0b3JF eHByICpjdG9yLAogCQkJCQkJCQkJIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkJ CSBjb25zdCBjaGFyICpmdW5jbmFtZSwKIAkJCQkJCQkJCSBib29sIGlzX2pzb25fb2JqZWN0YWdn KTsKK3N0YXRpYyB2b2lkIGdldF9qc29uX2FnZ19jb25zdHJ1Y3Rvcl9leHByKE5vZGUgKm5vZGUs IGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJCQkgIHZvaWQgKmNhbGxiYWNrX2Fy Zyk7CiBzdGF0aWMgdm9pZCBzaW1wbGVfcXVvdGVfbGl0ZXJhbChTdHJpbmdJbmZvIGJ1ZiwgY29u c3QgY2hhciAqdmFsKTsKIHN0YXRpYyB2b2lkIGdldF9zdWJsaW5rX2V4cHIoU3ViTGluayAqc3Vi bGluaywgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyB2b2lkIGdldF90YWJsZWZ1 bmMoVGFibGVGdW5jICp0ZiwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LApAQCAtMTIzODksMTEg KzEyMzkxLDQxIEBAIGdldF9qc29uX2FnZ19jb25zdHJ1Y3RvcihKc29uQ29uc3RydWN0b3JFeHBy ICpjdG9yLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCiAJCWdldF93aW5kb3dmdW5jX2V4cHJf aGVscGVyKChXaW5kb3dGdW5jICopIGN0b3ItPmZ1bmMsIGNvbnRleHQsCiAJCQkJCQkJCSAgIGZ1 bmNuYW1lLCBvcHRpb25zLmRhdGEsCiAJCQkJCQkJCSAgIGlzX2pzb25fb2JqZWN0YWdnKTsKKwll bHNlIGlmIChJc0EoY3Rvci0+ZnVuYywgVmFyKSkKKwl7CisJCS8qCisJCSAqIElmIHRoZSBhZ2dy ZWdhdGUgaXMgY29tcHV0ZWQgYnkgYSBsb3dlciBwbGFuIG5vZGUsIHNldHJlZnMuYyB3aWxsCisJ CSAqIGhhdmUgcmVwbGFjZWQgdGhlIEFnZ3JlZiBvciBXaW5kb3dGdW5jIHdpdGggYSBWYXIgcmVm ZXJlbmNpbmcgdGhhdAorCQkgKiBub2RlJ3Mgb3V0cHV0LiAgQ2hhc2UgdGhlIFZhciBiYWNrIHRv IGl0IHNvIHdlIGNhbiBzdGlsbCBwcmludCB0aGUKKwkJICogb3JpZ2luYWwgSlNPTiBhZ2dyZWdh dGUgc3ludGF4LiAgVGhpcyBvbmx5IGhhcHBlbnMgaW4gRVhQTEFJTi4KKwkJICovCisJCXJlc29s dmVfc3BlY2lhbF92YXJubygoTm9kZSAqKSBjdG9yLT5mdW5jLCBjb250ZXh0LAorCQkJCQkJCSAg Z2V0X2pzb25fYWdnX2NvbnN0cnVjdG9yX2V4cHIsIGN0b3IpOworCX0KIAllbHNlCiAJCWVsb2co RVJST1IsICJpbnZhbGlkIEpzb25Db25zdHJ1Y3RvckV4cHIgdW5kZXJseWluZyBub2RlIHR5cGU6 ICVkIiwKIAkJCSBub2RlVGFnKGN0b3ItPmZ1bmMpKTsKIH0KIAorLyoKKyAqIERlcGFyc2UgYSBK c29uQ29uc3RydWN0b3JFeHByIHdob3NlIGFnZ3JlZ2F0ZSBpcyBjb21wdXRlZCBieSBhIGxvd2Vy IHBsYW4KKyAqIG5vZGU7IHJlc29sdmVfc3BlY2lhbF92YXJubyBoYXMgbG9jYXRlZCB0aGUgdW5k ZXJseWluZyBBZ2dyZWYvV2luZG93RnVuYy4KKyAqLworc3RhdGljIHZvaWQKK2dldF9qc29uX2Fn Z19jb25zdHJ1Y3Rvcl9leHByKE5vZGUgKm5vZGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwK KwkJCQkJCQkgIHZvaWQgKmNhbGxiYWNrX2FyZykKK3sKKwlKc29uQ29uc3RydWN0b3JFeHByIGN0 b3I7CisKKwlpZiAoIUlzQShub2RlLCBBZ2dyZWYpICYmICFJc0Eobm9kZSwgV2luZG93RnVuYykp CisJCWVsb2coRVJST1IsICJKU09OIGFnZ3JlZ2F0ZSBjb25zdHJ1Y3RvciBkb2VzIG5vdCBwb2lu dCB0byBhbiBBZ2dyZWYgb3IgV2luZG93RnVuYyIpOworCisJLyogRmxhdCBjb3B5IHN1ZmZpY2Vz OyB3ZSBvbmx5IHJlcGxhY2UgZnVuYy4gKi8KKwljdG9yID0gKihKc29uQ29uc3RydWN0b3JFeHBy ICopIGNhbGxiYWNrX2FyZzsKKwljdG9yLmZ1bmMgPSAoRXhwciAqKSBub2RlOworCWdldF9qc29u X2NvbnN0cnVjdG9yKCZjdG9yLCBjb250ZXh0LCBmYWxzZSk7Cit9CisKIC8qCiAgKiBzaW1wbGVf cXVvdGVfbGl0ZXJhbCAtIEZvcm1hdCBhIHN0cmluZyBhcyBhIFNRTCBsaXRlcmFsLCBhcHBlbmQg dG8gYnVmCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3FsanNv bi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb24ub3V0CmluZGV4IDBmMzM3 YmRhMzI1Li4wOTFhMGI5ODU3NCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9zcWxqc29uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb24ub3V0 CkBAIC0xNzU3LDMgKzE3NTcsMTA0IEBAIFNFTEVDVCBKU09OX09CSkVDVCgnYSc6IEpTT05fT0JK RUNUQUdHKCdiJzogMSBSRVRVUk5JTkcgdGV4dCkgRk9STUFUIEpTT04pOwogKDEgcm93KQogCiBE Uk9QIEZVTkNUSU9OIHZvbGF0aWxlX29uZSwgc3RhYmxlX29uZTsKKy0tIFRlc3QgZGVwYXJzaW5n IG9mIEpTT04gYWdncmVnYXRlcyB0aGF0IGFyZSBjb21wdXRlZCBiZWxvdyBhIFdpbmRvd0FnZwor LS0gbm9kZS4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCBpICUgMiBBUyBn LAorCUpTT05fQVJSQVlBR0coaSBPUkRFUiBCWSBpIFJFVFVSTklORyBqc29uYikgQVMgamEsCisJ SlNPTl9BUlJBWUFHRyhpIE9SREVSIEJZIGkgUkVUVVJOSU5HIHRleHQpIEFTIGphX3RleHQsCisJ SlNPTl9BUlJBWUFHRyhpIE9SREVSIEJZIGkgTlVMTCBPTiBOVUxMIFJFVFVSTklORyBqc29uYikg QVMgamFfbnVsbCwKKwlKU09OX09CSkVDVEFHRyhpOiBpIEFCU0VOVCBPTiBOVUxMIFJFVFVSTklO RyBqc29uYikgQVMgam9fYWJzZW50LAorCUpTT05fT0JKRUNUQUdHKGk6IGkgV0lUSCBVTklRVUUg UkVUVVJOSU5HIGpzb25iKSBBUyBqb191bmlxdWUsCisJcm93X251bWJlcigpIE9WRVIgKE9SREVS IEJZIGkgJSAyKSBBUyBybgorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMykgaQorR1JPVVAgQlkg aSAlIDI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFdpbmRvd0FnZworICAg T3V0cHV0OiAoKGkgJSAyKSksIEpTT05fQVJSQVlBR0coaSBPUkRFUiBCWSBpIFJFVFVSTklORyBq c29uYiksIEpTT05fQVJSQVlBR0coaSBPUkRFUiBCWSBpIFJFVFVSTklORyB0ZXh0KSwgSlNPTl9B UlJBWUFHRyhpIE9SREVSIEJZIGkgTlVMTCBPTiBOVUxMIFJFVFVSTklORyBqc29uYiksIEpTT05f T0JKRUNUQUdHKGkgOiBpIEFCU0VOVCBPTiBOVUxMIFJFVFVSTklORyBqc29uYiksIEpTT05fT0JK RUNUQUdHKGkgOiBpIFdJVEggVU5JUVVFIEtFWVMgUkVUVVJOSU5HIGpzb25iKSwgcm93X251bWJl cigpIE9WRVIgdzEKKyAgIFdpbmRvdzogdzEgQVMgKE9SREVSIEJZICgoaS5pICUgMikpIFJPV1Mg VU5CT1VOREVEIFBSRUNFRElORykKKyAgIC0+ICBHcm91cEFnZ3JlZ2F0ZQorICAgICAgICAgT3V0 cHV0OiAoKGkgJSAyKSksIGpzb25iX2FnZ19zdHJpY3QoaSBPUkRFUiBCWSBpKSwganNvbl9hZ2df c3RyaWN0KGkgT1JERVIgQlkgaSksIGpzb25iX2FnZyhpIE9SREVSIEJZIGkpLCBqc29uYl9vYmpl Y3RfYWdnX3N0cmljdChpLCBpKSwganNvbmJfb2JqZWN0X2FnZ191bmlxdWUoaSwgaSkKKyAgICAg ICAgIEdyb3VwIEtleTogKChpLmkgJSAyKSkKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAg ICAgICBPdXRwdXQ6ICgoaSAlIDIpKSwgaQorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoaS5p ICUgMikpLCBpLmkKKyAgICAgICAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIHBnX2NhdGFs b2cuZ2VuZXJhdGVfc2VyaWVzIGkKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogKGkgJSAy KSwgaQorICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQ2FsbDogZ2VuZXJhdGVfc2VyaWVz KDEsIDMpCisoMTIgcm93cykKKworU0VMRUNUIGkgJSAyIEFTIGcsCisJSlNPTl9BUlJBWUFHRyhp IE9SREVSIEJZIGkgUkVUVVJOSU5HIGpzb25iKSBBUyBqYSwKKwlKU09OX0FSUkFZQUdHKGkgT1JE RVIgQlkgaSBSRVRVUk5JTkcgdGV4dCkgQVMgamFfdGV4dCwKKwlKU09OX0FSUkFZQUdHKGkgT1JE RVIgQlkgaSBOVUxMIE9OIE5VTEwgUkVUVVJOSU5HIGpzb25iKSBBUyBqYV9udWxsLAorCUpTT05f T0JKRUNUQUdHKGk6IGkgQUJTRU5UIE9OIE5VTEwgUkVUVVJOSU5HIGpzb25iKSBBUyBqb19hYnNl bnQsCisJSlNPTl9PQkpFQ1RBR0coaTogaSBXSVRIIFVOSVFVRSBSRVRVUk5JTkcganNvbmIpIEFT IGpvX3VuaXF1ZSwKKwlyb3dfbnVtYmVyKCkgT1ZFUiAoT1JERVIgQlkgaSAlIDIpIEFTIHJuCitG Uk9NIGdlbmVyYXRlX3NlcmllcygxLCAzKSBpCitHUk9VUCBCWSBpICUgMjsKKyBnIHwgICBqYSAg IHwgamFfdGV4dCB8IGphX251bGwgfCAgICBqb19hYnNlbnQgICAgIHwgICAgam9fdW5pcXVlICAg ICB8IHJuIAorLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tCisgMCB8IFsyXSAgICB8IFsyXSAgICAgfCBbMl0g ICAgIHwgeyIyIjogMn0gICAgICAgICB8IHsiMiI6IDJ9ICAgICAgICAgfCAgMQorIDEgfCBbMSwg M10gfCBbMSwgM10gIHwgWzEsIDNdICB8IHsiMSI6IDEsICIzIjogM30gfCB7IjEiOiAxLCAiMyI6 IDN9IHwgIDIKKygyIHJvd3MpCisKKy0tIFRoZSBzYW1lLCBidXQgd2l0aCB0aGUgSlNPTiBhZ2dy ZWdhdGUgdXNlZCBhcyBhIHdpbmRvdyBmdW5jdGlvbiB0aGF0IGlzCistLSBjb21wdXRlZCBiZWxv dyBhbm90aGVyIFdpbmRvd0FnZyBub2RlLgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQor U0VMRUNUIEpTT05fQVJSQVlBR0coaSBOVUxMIE9OIE5VTEwgUkVUVVJOSU5HIGpzb25iKSBPVkVS IChPUkRFUiBCWSBpIERFU0MpIEFTIGphLAorCXJvd19udW1iZXIoKSBPVkVSIChPUkRFUiBCWSBp KSBBUyBybgorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMykgaTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgV2lu ZG93QWdnCisgICBPdXRwdXQ6IEpTT05fQVJSQVlBR0coaSBOVUxMIE9OIE5VTEwgUkVUVVJOSU5H IGpzb25iKSBPVkVSIHcxLCByb3dfbnVtYmVyKCkgT1ZFUiB3MiwgaQorICAgV2luZG93OiB3MiBB UyAoT1JERVIgQlkgaS5pIFJPV1MgVU5CT1VOREVEIFBSRUNFRElORykKKyAgIC0+ICBTb3J0Cisg ICAgICAgICBPdXRwdXQ6IGksIChqc29uYl9hZ2coaSkgT1ZFUiB3MSkKKyAgICAgICAgIFNvcnQg S2V5OiBpLmkKKyAgICAgICAgIC0+ICBXaW5kb3dBZ2cKKyAgICAgICAgICAgICAgIE91dHB1dDog aSwganNvbmJfYWdnKGkpIE9WRVIgdzEKKyAgICAgICAgICAgICAgIFdpbmRvdzogdzEgQVMgKE9S REVSIEJZIGkuaSkKKyAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IGkKKyAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiBpLmkgREVTQworICAg ICAgICAgICAgICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gcGdfY2F0YWxvZy5nZW5lcmF0 ZV9zZXJpZXMgaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBDYWxsOiBnZW5lcmF0ZV9zZXJpZXMoMSwgMykK KygxNSByb3dzKQorCitTRUxFQ1QgSlNPTl9BUlJBWUFHRyhpIE5VTEwgT04gTlVMTCBSRVRVUk5J TkcganNvbmIpIE9WRVIgKE9SREVSIEJZIGkgREVTQykgQVMgamEsCisJcm93X251bWJlcigpIE9W RVIgKE9SREVSIEJZIGkpIEFTIHJuCitGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAzKSBpOworICAg IGphICAgICB8IHJuIAorLS0tLS0tLS0tLS0rLS0tLQorIFszLCAyLCAxXSB8ICAxCisgWzMsIDJd ICAgIHwgIDIKKyBbM10gICAgICAgfCAgMworKDMgcm93cykKKworLS0gVGhlIHNhbWUsIGJ1dCB3 aXRoIHRoZSBleHByZXNzaW9uIGNvbnRhaW5pbmcgdGhlIEpTT04gYWdncmVnYXRlIHBvc3Rwb25l ZAorLS0gdG8gYWJvdmUgdGhlIGZpbmFsIHNvcnQgZHVlIHRvIGJlaW5nIHZvbGF0aWxlLgorRVhQ TEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIGkgJSAyIEFTIGcsCisJICAgSlNPTl9B UlJBWUFHRyhpIFJFVFVSTklORyB0ZXh0KSB8fCByYW5kb20oKTo6dGV4dCBBUyBqYQorRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwgMykgaQorR1JPVVAgQlkgaSAlIDIKK09SREVSIEJZIGNvdW50KCop OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFJlc3VsdAorICAgT3V0cHV0OiAoKGkgJSAyKSksIChKU09OX0FSUkFZQUdH KGkgUkVUVVJOSU5HIHRleHQpIHx8IChyYW5kb20oKSk6OnRleHQpLCAoY291bnQoKikpCisgICAt PiAgU29ydAorICAgICAgICAgT3V0cHV0OiAoKGkgJSAyKSksIChjb3VudCgqKSksIChqc29uX2Fn Z19zdHJpY3QoaSkpCisgICAgICAgICBTb3J0IEtleTogKGNvdW50KCopKQorICAgICAgICAgLT4g IEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogKChpICUgMikpLCBjb3VudCgq KSwganNvbl9hZ2dfc3RyaWN0KGkpCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IChpLmkgJSAy KQorICAgICAgICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gcGdfY2F0YWxvZy5nZW5lcmF0 ZV9zZXJpZXMgaQorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiAoaSAlIDIpLCBpCisgICAg ICAgICAgICAgICAgICAgICBGdW5jdGlvbiBDYWxsOiBnZW5lcmF0ZV9zZXJpZXMoMSwgMykKKygx MSByb3dzKQorCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zcWxqc29uLnNxbCBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpzb24uc3FsCmluZGV4IGE2ODc0NzczM2ExLi4yNTUw ZGExNWM0NSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3FsanNvbi5zcWwKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3FsanNvbi5zcWwKQEAgLTcwNiwzICs3MDYsNDQgQEAg U0VMRUNUIEpTT05fT0JKRUNUKCdhJzogSlNPTl9PQkpFQ1RBR0coJ2InOiBzdGFibGVfb25lKCkg UkVUVVJOSU5HIHRleHQpIEZPUk1BVAogRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxF Q1QgSlNPTl9PQkpFQ1QoJ2EnOiBKU09OX09CSkVDVEFHRygnYic6IDEgUkVUVVJOSU5HIHRleHQp IEZPUk1BVCBKU09OKTsKIFNFTEVDVCBKU09OX09CSkVDVCgnYSc6IEpTT05fT0JKRUNUQUdHKCdi JzogMSBSRVRVUk5JTkcgdGV4dCkgRk9STUFUIEpTT04pOwogRFJPUCBGVU5DVElPTiB2b2xhdGls ZV9vbmUsIHN0YWJsZV9vbmU7CisKKy0tIFRlc3QgZGVwYXJzaW5nIG9mIEpTT04gYWdncmVnYXRl cyB0aGF0IGFyZSBjb21wdXRlZCBiZWxvdyBhIFdpbmRvd0FnZworLS0gbm9kZS4KK0VYUExBSU4g KFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCBpICUgMiBBUyBnLAorCUpTT05fQVJSQVlBR0co aSBPUkRFUiBCWSBpIFJFVFVSTklORyBqc29uYikgQVMgamEsCisJSlNPTl9BUlJBWUFHRyhpIE9S REVSIEJZIGkgUkVUVVJOSU5HIHRleHQpIEFTIGphX3RleHQsCisJSlNPTl9BUlJBWUFHRyhpIE9S REVSIEJZIGkgTlVMTCBPTiBOVUxMIFJFVFVSTklORyBqc29uYikgQVMgamFfbnVsbCwKKwlKU09O X09CSkVDVEFHRyhpOiBpIEFCU0VOVCBPTiBOVUxMIFJFVFVSTklORyBqc29uYikgQVMgam9fYWJz ZW50LAorCUpTT05fT0JKRUNUQUdHKGk6IGkgV0lUSCBVTklRVUUgUkVUVVJOSU5HIGpzb25iKSBB UyBqb191bmlxdWUsCisJcm93X251bWJlcigpIE9WRVIgKE9SREVSIEJZIGkgJSAyKSBBUyBybgor RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMykgaQorR1JPVVAgQlkgaSAlIDI7CitTRUxFQ1QgaSAl IDIgQVMgZywKKwlKU09OX0FSUkFZQUdHKGkgT1JERVIgQlkgaSBSRVRVUk5JTkcganNvbmIpIEFT IGphLAorCUpTT05fQVJSQVlBR0coaSBPUkRFUiBCWSBpIFJFVFVSTklORyB0ZXh0KSBBUyBqYV90 ZXh0LAorCUpTT05fQVJSQVlBR0coaSBPUkRFUiBCWSBpIE5VTEwgT04gTlVMTCBSRVRVUk5JTkcg anNvbmIpIEFTIGphX251bGwsCisJSlNPTl9PQkpFQ1RBR0coaTogaSBBQlNFTlQgT04gTlVMTCBS RVRVUk5JTkcganNvbmIpIEFTIGpvX2Fic2VudCwKKwlKU09OX09CSkVDVEFHRyhpOiBpIFdJVEgg VU5JUVVFIFJFVFVSTklORyBqc29uYikgQVMgam9fdW5pcXVlLAorCXJvd19udW1iZXIoKSBPVkVS IChPUkRFUiBCWSBpICUgMikgQVMgcm4KK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMpIGkKK0dS T1VQIEJZIGkgJSAyOworCistLSBUaGUgc2FtZSwgYnV0IHdpdGggdGhlIEpTT04gYWdncmVnYXRl IHVzZWQgYXMgYSB3aW5kb3cgZnVuY3Rpb24gdGhhdCBpcworLS0gY29tcHV0ZWQgYmVsb3cgYW5v dGhlciBXaW5kb3dBZ2cgbm9kZS4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVD VCBKU09OX0FSUkFZQUdHKGkgTlVMTCBPTiBOVUxMIFJFVFVSTklORyBqc29uYikgT1ZFUiAoT1JE RVIgQlkgaSBERVNDKSBBUyBqYSwKKwlyb3dfbnVtYmVyKCkgT1ZFUiAoT1JERVIgQlkgaSkgQVMg cm4KK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMpIGk7CitTRUxFQ1QgSlNPTl9BUlJBWUFHRyhp IE5VTEwgT04gTlVMTCBSRVRVUk5JTkcganNvbmIpIE9WRVIgKE9SREVSIEJZIGkgREVTQykgQVMg amEsCisJcm93X251bWJlcigpIE9WRVIgKE9SREVSIEJZIGkpIEFTIHJuCitGUk9NIGdlbmVyYXRl X3NlcmllcygxLCAzKSBpOworCistLSBUaGUgc2FtZSwgYnV0IHdpdGggdGhlIGV4cHJlc3Npb24g Y29udGFpbmluZyB0aGUgSlNPTiBhZ2dyZWdhdGUgcG9zdHBvbmVkCistLSB0byBhYm92ZSB0aGUg ZmluYWwgc29ydCBkdWUgdG8gYmVpbmcgdm9sYXRpbGUuCitFWFBMQUlOIChWRVJCT1NFLCBDT1NU UyBPRkYpCitTRUxFQ1QgaSAlIDIgQVMgZywKKwkgICBKU09OX0FSUkFZQUdHKGkgUkVUVVJOSU5H IHRleHQpIHx8IHJhbmRvbSgpOjp0ZXh0IEFTIGphCitGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAz KSBpCitHUk9VUCBCWSBpICUgMgorT1JERVIgQlkgY291bnQoKik7Ci0tIAoyLjM5LjUgKEFwcGxl IEdpdC0xNTQpCgo= --0000000000004b17550655e7e0c2--