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 1wZlci-001Ghr-12 for pgsql-bugs@arkaria.postgresql.org; Wed, 17 Jun 2026 08:27:48 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wZlch-005D0S-0j for pgsql-bugs@arkaria.postgresql.org; Wed, 17 Jun 2026 08:27:47 +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 1wZlcg-005D0K-2i for pgsql-bugs@lists.postgresql.org; Wed, 17 Jun 2026 08:27:46 +0000 Received: from mail-pg1-x536.google.com ([2607:f8b0:4864:20::536]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wZlcf-00000000mCt-0APd for pgsql-bugs@lists.postgresql.org; Wed, 17 Jun 2026 08:27:45 +0000 Received: by mail-pg1-x536.google.com with SMTP id 41be03b00d2f7-c85822059d8so3444528a12.1 for ; Wed, 17 Jun 2026 01:27:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1781684862; cv=none; d=google.com; s=arc-20240605; b=QhhZMdbZqMs1J0CPszkLiCoIHmFkdOzakzG/1PJdW7cH8CtMCb6g3N4P5UX7Z6Y8f+ MxU64gvH/8QTVMfN3mNpucYxTCszsxJ0RY0GDE3xUDrG6bhXeMduEoFOAQF/R08o3KM3 dQnhVLrHFwqpKtFBOkrInVHHFx9H2uV1LEcUg5kt8EM2oqGDbGiKwCEmRH6gR7eb6ejF PHmmW2Qy5gXjSH+eTmLP6z1gaOQwRTuLOjK3PrvN2gdQecerWmQGL72j0/3j6oX8mt4d jNjhrR0Z8v8X1Gjh0PjD8Y04EJrXE8cj76JDAGqt9OkZRrXYSq6g1VTzZblYiTNJWoII GAfg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=1y87vz5Tt7fu8gycDU3DkgidMQVC2oF4TU6Vk+JJFS0=; fh=CzzrQAo3kVvGUBRNh1VtQvqFpASirDQq7QlVl+5s99c=; b=aSJNREoh1FccuzMUvDsJVXz88WVeZBgX0UgciXdZM/BkzUUbjJ5p5LxIrhYunWh3ic Iu1aHIFLny38XW7Ps66maBUKlK+D64phQKtzc7weUP6Irxd72tGdkk//uhWtVlgmKD7d 48YKoqRFKrfWCyNvFm2RJdlovoAAzb+DIq20qnoyf+PoKlzDUEoz6Rn7ASDIrri1GYWQ HGIvDMzzq54/jI67l1lnSUP1az15HBoI+OAF807khUkVi3c1n58IuoxXEJPRbmYG1Zag Mcfc3Mn/xbI+HXLECuzD1n3jTh6cUPjKJCTj6hqSFozduFPLvjtlmJwEff9Qe2TVPq9d GKAw==; darn=lists.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=1781684862; x=1782289662; 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=1y87vz5Tt7fu8gycDU3DkgidMQVC2oF4TU6Vk+JJFS0=; b=EP7GejMgXAadYbgz6f5jOkfW5h4e+Xf/Y71YZYMQXpM+zn/CR3PoLFAW/+T/+eziZD lrUfO9Wb4vqPF8GJNjd+dSCnL1G9rpOPxT5x+l2bUygIEf4MFicOot8GbI+c9WSHT+u2 cgiwWvD4QIR52zp+jZC4FUafPolN1QNeY2pBCPoSUqD7W+QBPYPR+aCX60KQlehxBJ84 W+OMQXYuNxP17yTGxjZojhm5Oz1L7qanKuOxuNZg6m4cctX/sUrKoAUdltkeSa2uUJI5 B2W/8D2iIVn6iNdLjbEP2NuK1yi4yT/4xdry1N57shKnciOOwAbzkZk4ogw64I/R1DRR 106w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781684862; x=1782289662; 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=1y87vz5Tt7fu8gycDU3DkgidMQVC2oF4TU6Vk+JJFS0=; b=Des11poAhWhbKsLHOwq+LpEumMUuNS7eLbBk6ET9epEz5xmT2letMwyMeMDS1U4CFm mDbG8cClvIkKw2lsqZpHss3BWrIbEWi7kGFa7KGg7TWWvBJg+roVCdS7Gg7nwk/7k6dV J6iAdZivjpWHJOQaUL+Kv3fC9nqfleVfiz2Cjw+aPRoEhJZDUDTiOudycudHe7bRObUZ EPRoA3L9qZfCvxg+u1x0Ya/WGFWP8nswVxPvVY9poalqMg0H08ii/sGHvoSlFDa+f1bw B2phleYcjmTtINK5OS4QOtpMsnmZ1xLi0wxObTyBsYYbtlvh4WUBCVWejDmKwYr0iU4q /Azg== X-Forwarded-Encrypted: i=1; AFNElJ8oZwbgIyjsg3uZ50//7h93NsxwYKRKvmcCzFkXTp5Q8UMwUytrcWL9cIug7gwuXtzskhaYWVqpG7TT@lists.postgresql.org X-Gm-Message-State: AOJu0YwWMeW74/1UEoB3d1KlY8MOV7K5ahZwljygwk/8nZavTHGvOHfO zmEv9sahcyVxGe6QyeCgeUjQvL0iCWs8WB4XXk0XmAzOPd5RWTEY4Y7XjtSltywX8or71L2glg/ OxkAkU86ZhkkuOE08Vhwk2xOTkGPz5mY= X-Gm-Gg: Acq92OFfZygBjTxQv9y2XN4ZuD/AIwynOqne2P8p0udC9/TsujMMfAx/biUtC45LGmw brwoaIdLW5Qk9Hvjq3KbYqP0MfwjQG9m9In9teADBPUY32PrGO79WXQz3yn3fPiySFbRCArZnsp zuq5r3iiF4tqVRh12iAohDqYclBL0fhtfaP9Hx62RSGRB9HBNPc6etQaVUIkjg8m5/2IqTbB6F3 Ug7bEStaAiAO5/MqF16PaLKS6yQd1wQYLEH2zLUaZio0PnaWToizpoJGJrkAXbHunLkTNyqmpai ktCIdfL6nLPeprgrVvl09ajLU7JpLrrV7vbOWbdLwP7h/NRpR4dXyw== X-Received: by 2002:a05:6a20:394f:b0:3b4:8f57:3205 with SMTP id adf61e73a8af0-3b8b7dd031emr3029929637.36.1781684862493; Wed, 17 Jun 2026 01:27:42 -0700 (PDT) MIME-Version: 1.0 References: <19458-a69c98bc498333ba@postgresql.org> <6DE4A9D6-6D5C-41C0-8AFE-F51CFBDDAD5A@yandex-team.ru> <674AEA44-D9C5-423D-B118-693CA130106E@yandex-team.ru> In-Reply-To: From: Amit Langote Date: Wed, 17 Jun 2026 17:27:25 +0900 X-Gm-Features: AVVi8CdnDwMUuhtR6S3yuXubcezWd9uApum8Zbz77-0Ee5ZcdBH9I0XRz_Nxoi0 Message-ID: Subject: Re: BUG #19458: OOM killer in jsonb_path_exists_opr (@?) with malformed JSONPath containing non-existent variables To: Andrey Rachitskiy Cc: Andrey Borodin , Nikita Malakhov , PostgreSQL mailing lists , Nikolay Shaplov Content-Type: multipart/mixed; boundary="00000000000054c5a706546ed5df" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000054c5a706546ed5df Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Andrey, On Fri, Jun 5, 2026 at 7:03=E2=80=AFPM Andrey Rachitskiy wrote: > The growing allocation is leaked temporary JsonValueLists in executePredi= cate() (local lseq/rseq, ~1482=E2=80=931547) and the arithmetic helpers exe= cuteBinaryArithmExpr() / executeUnaryArithmExpr() (~1561=E2=80=931684). Eac= h nested comparison or arithmetic subexpression materializes operands via e= xecuteItemOptUnwrapResult[NoThrow]() =E2=86=92 executeNextItem() =E2=86=92 = JsonValueListAppend() (~1165, ~2451), but the interim lists are never freed= before return. For @? specifically, executeJsonPath() also leaks a local v= als list in strict exists mode (~579=E2=80=93586). > > Missing vars make the AFL case worse by returning null instead of error, = so evaluation continues deep into nested $?()/comparisons instead of stoppi= ng at the first $"=E2=80=A6" reference. The same leak mechanism is reachabl= e without missing vars =E2=80=94 Tom Lane demonstrated this on master (5a20= 43bf713) with $[*] ? (@ < $) on a large array. > > Our missing-variable patch fixes the reported OOM and the @? semantics bu= g by aborting early. Whether REL_14/15/16 also need a broader fix for inter= im JsonValueList cleanup is beyond what I can confidently propose; I've tri= ed to pin down where the growth happens for that discussion. Thanks for that tracedown and for pointing to Tom's commit. The deeper interim-JsonValueList leak looks unlikely to get fixed in the back branches; Tom's cleanup (5a2043bf713) went only to master. I'll look at committing the attached revised version of your Apr 20 patch (same fix, plus a regression test) down to REL_14. Please check/test. --=20 Thanks, Amit Langote --00000000000054c5a706546ed5df Content-Type: application/octet-stream; name="v2-0001-Report-undefined-jsonpath-variable-when-no-variab.patch" Content-Disposition: attachment; filename="v2-0001-Report-undefined-jsonpath-variable-when-no-variab.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqht507a0 RnJvbSBkNTJiM2I1YTcyOGQ1MTMwZTNlMTRhY2Q3NzhjNWI2MDhiOWU1MGYzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFdlZCwgMTcgSnVuIDIwMjYgMTc6MjE6MzggKzA5MDAKU3ViamVjdDogW1BBVENIIHYy XSBSZXBvcnQgdW5kZWZpbmVkIGpzb25wYXRoIHZhcmlhYmxlIHdoZW4gbm8gdmFyaWFibGVzIGFy ZQogc3VwcGxpZWQKClRoZSB0d28tYXJndW1lbnQganNvbmIgQD8gYW5kIEBAIG9wZXJhdG9ycyBp bnZva2UgdGhlIGpzb25wYXRoIGV4ZWN1dG9yCndpdGggbm8gdmFyaWFibGUgc2V0LiAgSW4gdGhh dCBjYXNlIGdldEpzb25QYXRoVmFyaWFibGUoKSB0cmVhdGVkIGFueQoiJG5hbWUiIHJlZmVyZW5j ZSBhcyBKU09OIG51bGwgYW5kIGNvbnRpbnVlZCBldmFsdWF0aW5nLCBpbnN0ZWFkIG9mCnJlcG9y dGluZyB0aGUgdmFyaWFibGUgYXMgdW5kZWZpbmVkLgoKVGhpcyBwcm9kdWNlZCBpbmNvcnJlY3Qg cmVzdWx0cyAtLSBmb3IgZXhhbXBsZSAnNDInOjpqc29uYiBAPyAnJCJ4IicKcmV0dXJuZWQgdHJ1 ZSAtLSBhbmQsIGZvciBzb21lIG1hbGZvcm1lZCBvciBob3N0aWxlIGpzb25wYXRoIGV4cHJlc3Np b25zCndpdGggZGVlcGx5IG5lc3RlZCBwcmVkaWNhdGVzLCBhbGxvd2VkIGVzc2VudGlhbGx5IHVu Ym91bmRlZCBtZW1vcnkKY29uc3VtcHRpb24gdGhhdCBjb3VsZCBnZXQgdGhlIGJhY2tlbmQga2ls bGVkIGJ5IHRoZSBPT00ga2lsbGVyLgoKUmVwb3J0IHRoZSB1bmRlZmluZWQgdmFyaWFibGUgYXMg YW4gZXJyb3IgaW4gdGhpcyBjYXNlIGFzIHdlbGwsIHJldXNpbmcKdGhlIG1lc3NhZ2UgYWxyZWFk eSBlbWl0dGVkIHdoZW4gYSB2YXJpYWJsZSBpcyBub3QgZm91bmQgYW1vbmcgc3VwcGxpZWQKdmFy aWFibGVzLiAgVGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvciBvZiB2MTcgYW5kIGxhdGVyLCB3aGVy ZSB0aGUKanNvbnBhdGggZXhlY3V0b3Igd2FzIHJlb3JnYW5pemVkLiAgU3RvcHBpbmcgYXQgdGhl IGZpcnN0IHVuZGVmaW5lZAp2YXJpYWJsZSByZWZlcmVuY2UgYWxzbyByZXNvbHZlcyB0aGUgcmVw b3J0ZWQgbWVtb3J5LWdyb3d0aCBjYXNlLgoKTm90ZSB0aGlzIGlzIGEgdXNlci12aXNpYmxlIGNo YW5nZSBpbiB0aGUgYmFjayBicmFuY2hlczogYSBqc29ucGF0aApleHByZXNzaW9uIHRoYXQgcmVm ZXJlbmNlcyBhIHZhcmlhYmxlIHdoaWxlIG5vIHZhcmlhYmxlcyBhcmUgc3VwcGxpZWQgbm93CnJh aXNlcyBhbiBlcnJvciByYXRoZXIgdGhhbiBzaWxlbnRseSBldmFsdWF0aW5nIGl0IGFzIE5VTEwu ICBUaGUgcHJldmlvdXMKYmVoYXZpb3Igd2FzIGluY29ycmVjdCwgc28gdGhlIGNoYW5nZSBpcyBq dWRnZWQgd29ydGh3aGlsZS4KCkF1dGhvcjogQW5kcmV5IFJhY2hpdHNraXkgPHBsMGgweXAxQGdt YWlsLmNvbT4KUmVwb3J0ZWQtYnk6IEFuZHJleSBSYWNoaXRza2l5IDxwbDBoMHlwMUBnbWFpbC5j b20+ClJldmlld2VkLWJ5OiBBbmRyZXkgQm9yb2RpbiA8eDRtbW1AeWFuZGV4LXRlYW0ucnU+ClJl dmlld2VkLWJ5OiBOaWtpdGEgTWFsYWtob3YgPGh1a3V0b2NAZ21haWwuY29tPgpEaXNjdXNzaW9u OiBodHRwczovL3Bvc3Rnci5lcy9tLzE5NDU4LWE2OWM5OGJjNDk4MzMzYmFAcG9zdGdyZXNxbC5v cmcKQmFja3BhdGNoLXRocm91Z2g6IDE0Ci0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25w YXRoX2V4ZWMuYyAgICAgICAgfCAxMyArKysrKysrLS0tLS0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2pzb25iX2pzb25wYXRoLm91dCB8ICA3ICsrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2pzb25iX2pzb25wYXRoLnNxbCAgICAgIHwgIDUgKysrKysKIDMgZmlsZXMgY2hhbmdlZCwg MTkgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25w YXRoX2V4ZWMuYwppbmRleCAxMGVjNjZjNjI5My4uMzQ0MjA4NDllYWMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2pzb25wYXRoX2V4ZWMuYwpAQCAtMjEyOCwxNCArMjEyOCwxNSBAQCBnZXRKc29uUGF0 aFZhcmlhYmxlKEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwgSnNvblBhdGhJdGVtICp2YXJpYWJs ZSwKIAlKc29uYlZhbHVlCXRtcDsKIAlKc29uYlZhbHVlICp2OwogCi0JaWYgKCF2YXJzKQotCXsK LQkJdmFsdWUtPnR5cGUgPSBqYnZOdWxsOwotCQlyZXR1cm47Ci0JfQotCiAJQXNzZXJ0KHZhcmlh YmxlLT50eXBlID09IGpwaVZhcmlhYmxlKTsKIAl2YXJOYW1lID0ganNwR2V0U3RyaW5nKHZhcmlh YmxlLCAmdmFyTmFtZUxlbmd0aCk7CisKKwlpZiAoIXZhcnMpCisJCWVyZXBvcnQoRVJST1IsCisJ CQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJIGVycm1zZygiY291bGQg bm90IGZpbmQganNvbnBhdGggdmFyaWFibGUgXCIlc1wiIiwKKwkJCQkJcG5zdHJkdXAodmFyTmFt ZSwgdmFyTmFtZUxlbmd0aCkpKSk7CisKIAl0bXAudHlwZSA9IGpidlN0cmluZzsKIAl0bXAudmFs LnN0cmluZy52YWwgPSB2YXJOYW1lOwogCXRtcC52YWwuc3RyaW5nLmxlbiA9IHZhck5hbWVMZW5n dGg7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iX2pzb25wYXRo Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfanNvbnBhdGgub3V0CmluZGV4 IDY2NTliYzkwOTFhLi4yYWI5MDY0MzQ1MCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9qc29uYl9qc29ucGF0aC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9qc29uYl9qc29ucGF0aC5vdXQKQEAgLTQ4Nyw2ICs0ODcsMTMgQEAgc2VsZWN0ICogZnJvbSBq c29uYl9wYXRoX3F1ZXJ5KCd7ImEiOiAxMH0nLCAnJCcpOwogCiBzZWxlY3QgKiBmcm9tIGpzb25i X3BhdGhfcXVlcnkoJ3siYSI6IDEwfScsICckID8gKEAuYSA8ICR2YWx1ZSknKTsKIEVSUk9SOiAg Y291bGQgbm90IGZpbmQganNvbnBhdGggdmFyaWFibGUgInZhbHVlIgorLS0gYnVnICMxOTQ1ODog dGhlIEA/IGFuZCBAQCBvcGVyYXRvcnMgc3VwcGx5IG5vIHZhcmlhYmxlcywgc28gYSB2YXJpYWJs ZQorLS0gcmVmZXJlbmNlIG11c3QgYmUgcmVwb3J0ZWQgYXMgdW5kZWZpbmVkIHJhdGhlciB0aGFu IHNpbGVudGx5IHRyZWF0ZWQgYXMKKy0tIE5VTEwgKHRoZSBsYXR0ZXIgZ2F2ZSB3cm9uZyByZXN1 bHRzIGFuZCBjb3VsZCBkcml2ZSB1bmJvdW5kZWQgbWVtb3J5IHVzZSkKK3NlbGVjdCBqc29uYiAn NDInIEA/ICckIm5vX3N1Y2hfdmFyIic7CitFUlJPUjogIGNvdWxkIG5vdCBmaW5kIGpzb25wYXRo IHZhcmlhYmxlICJub19zdWNoX3ZhciIKK3NlbGVjdCBqc29uYiAnNDInIEBAICckIm5vX3N1Y2hf dmFyIiA9PSAxJzsKK0VSUk9SOiAgY291bGQgbm90IGZpbmQganNvbnBhdGggdmFyaWFibGUgIm5v X3N1Y2hfdmFyIgogc2VsZWN0ICogZnJvbSBqc29uYl9wYXRoX3F1ZXJ5KCd7ImEiOiAxMH0nLCAn JCA/IChALmEgPCAkdmFsdWUpJywgJzEnKTsKIEVSUk9SOiAgInZhcnMiIGFyZ3VtZW50IGlzIG5v dCBhbiBvYmplY3QKIERFVEFJTDogIEpzb25wYXRoIHBhcmFtZXRlcnMgc2hvdWxkIGJlIGVuY29k ZWQgYXMga2V5LXZhbHVlIHBhaXJzIG9mICJ2YXJzIiBvYmplY3QuCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC9qc29uYl9qc29ucGF0aC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9qc29uYl9qc29ucGF0aC5zcWwKaW5kZXggZTBjZTUwOTI2NGEuLmYwZTA4ZDI3ZTg0IDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYl9qc29ucGF0aC5zcWwKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvanNvbmJfanNvbnBhdGguc3FsCkBAIC05OCw2ICs5OCwxMSBAQCBz ZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnWzEsMiwzXScsICckW2xhc3QgPyAoQC50eXBlKCkgPT0g InN0cmluZyIpXScsIHNpbGVudCA9PgogCiBzZWxlY3QgKiBmcm9tIGpzb25iX3BhdGhfcXVlcnko J3siYSI6IDEwfScsICckJyk7CiBzZWxlY3QgKiBmcm9tIGpzb25iX3BhdGhfcXVlcnkoJ3siYSI6 IDEwfScsICckID8gKEAuYSA8ICR2YWx1ZSknKTsKKy0tIGJ1ZyAjMTk0NTg6IHRoZSBAPyBhbmQg QEAgb3BlcmF0b3JzIHN1cHBseSBubyB2YXJpYWJsZXMsIHNvIGEgdmFyaWFibGUKKy0tIHJlZmVy ZW5jZSBtdXN0IGJlIHJlcG9ydGVkIGFzIHVuZGVmaW5lZCByYXRoZXIgdGhhbiBzaWxlbnRseSB0 cmVhdGVkIGFzCistLSBOVUxMICh0aGUgbGF0dGVyIGdhdmUgd3JvbmcgcmVzdWx0cyBhbmQgY291 bGQgZHJpdmUgdW5ib3VuZGVkIG1lbW9yeSB1c2UpCitzZWxlY3QganNvbmIgJzQyJyBAPyAnJCJu b19zdWNoX3ZhciInOworc2VsZWN0IGpzb25iICc0MicgQEAgJyQibm9fc3VjaF92YXIiID09IDEn Owogc2VsZWN0ICogZnJvbSBqc29uYl9wYXRoX3F1ZXJ5KCd7ImEiOiAxMH0nLCAnJCA/IChALmEg PCAkdmFsdWUpJywgJzEnKTsKIHNlbGVjdCAqIGZyb20ganNvbmJfcGF0aF9xdWVyeSgneyJhIjog MTB9JywgJyQgPyAoQC5hIDwgJHZhbHVlKScsICdbeyJ2YWx1ZSIgOiAxM31dJyk7CiBzZWxlY3Qg KiBmcm9tIGpzb25iX3BhdGhfcXVlcnkoJ3siYSI6IDEwfScsICckID8gKEAuYSA8ICR2YWx1ZSkn LCAneyJ2YWx1ZSIgOiAxM30nKTsKLS0gCjIuNDcuMwoK --00000000000054c5a706546ed5df--