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 1wZvnD-001PjZ-2z for pgsql-bugs@arkaria.postgresql.org; Wed, 17 Jun 2026 19:19:20 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wZvnC-007MPB-2p for pgsql-bugs@arkaria.postgresql.org; Wed, 17 Jun 2026 19:19:18 +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 1wZvnC-007MP3-1b for pgsql-bugs@lists.postgresql.org; Wed, 17 Jun 2026 19:19:18 +0000 Received: from mail-yw1-x1130.google.com ([2607:f8b0:4864:20::1130]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wZvnB-00000000qmi-03HA for pgsql-bugs@postgresql.org; Wed, 17 Jun 2026 19:19:17 +0000 Received: by mail-yw1-x1130.google.com with SMTP id 00721157ae682-7fd3801ca22so1686157b3.1 for ; Wed, 17 Jun 2026 12:19:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1781723956; cv=none; d=google.com; s=arc-20240605; b=k4hQ1xplx+4oGSZzlm2hohUWWyyt2ZMTgRGNsiTNeoG+jwNnjn2K+3SdFqpicdejhW TnpSSfj+7J+3RIYV86kYh/CgYwaT5nVUApS2fXEyUhrI6g7bI1RmdpuERDWSNzFt5UcG Lq3wMb+wE1jjLLee3pDvDSa3+CnVkRgnM/Ab2nafzO/+lu+gRxW1B5kWyWn1gdDR1MXk pXesQvkSZY3Q1gqg+Yu6OT4EKi50DQHbX2PrJM+dJVVvQHUlN4ZGxvgjO5m6g/WdRG0A TQ9+JNfBfWeA1z46A9L/JS3pePZgcuZfF7abYWp9ovp00NXRyNMUTzohXLIzBaNeerIU sasg== 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=0W8oL54TuMI+pl/8mJCLDQeY4HqGPC5bGCsQbctNedk=; fh=6mOHN/5h7qazHsLWjhufEalrPnTIEHcy5NwiZ4AMVOo=; b=C5Z/hY7St7bwOu76UcRyM9ru55/NVH9U2ORD/IUiqVLalLpxBAbE3womnqqzwsmhQg MTh6m5MreQ1NWZeTcg2V3KdrPvV+FvzJNXwCr0myQSdODOEgZMQ0XWN0Y2YogNaCvOxW hHamBCMMekWb+5xrfeeXBt7dj1j51sqGh9jZ8E/36Zgxp+5ZxgMkpRIImGUWKpzw4WSe gkOXoakz7N19waiuFUNvG131Y/pQ36QGFWXIv82o5XWlcpVFNaM+8Lzca49ngJm1RcKM CaczfM+Qk7v0w3+Ww4PzaKi585nh6Mb3HnTFTHmdaZO0ljBlpGuKzBuCtRv6zmIMQM0M A7uw==; 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=1781723956; x=1782328756; 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=0W8oL54TuMI+pl/8mJCLDQeY4HqGPC5bGCsQbctNedk=; b=osS/crGvENwBoX31PmUYzP9KQSxwzVRYn3g4dqnF/Z05SjY+jo9a/6xMtkJzfzerBG V9fE2HRLzg9jSGWHyJMG70goI4450ILfw/MM1jMxfkF+A08C0qDZ0nyBrY3CuAMiL+bZ zEgdwRuBZKqC+CKGHI0l1PHW4UiuDVW6fLcZFaLYcfijsZlybifJ2t03wWvqqTJ9f0Vb /7CaeRR7eRXxiXEngOVZoFFly+1pYwhI/IFdbqvVw6wgjHx4phIUN/LnwBQwFIpuBvEm qV4ayRh1zNOA9C1YSSCdUGXUKArWZMFjA5WRESueV2W3T3m9C5A8QG0zDV7G1dIAtomT diiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781723956; x=1782328756; 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=0W8oL54TuMI+pl/8mJCLDQeY4HqGPC5bGCsQbctNedk=; b=jZt5Dov/Ycjbk7UI+wRXW1BLMsMW1DaVhlaIUVEbvkMceleoTJTOSIzjbzBa6Spe41 9zKCbMVCn6dmotKgtlv1kGloQnkpLDy+L4WgFAqYkGa19x98ByURQ+UEtLa4j7gqCI/x CYT6qC8lK1nxrmvIRevllK+r0vSCQkzqd9Xy3BF4ZTLw4ggUfOGf/j712z8i28u7R7pb a+NByRJf5PLpvO90UAchxBI5jbsyf8uz44iFGonJvvTjMCZEN63TXqwmgvrGXbLf0OWB 7Y99MLQQFHBb+8Quz5XWk2mVnk0t5Sr5EBJVzdMve7KmLcnFFiNm7cTQ9NAacRZTCQ+R ZwvQ== X-Gm-Message-State: AOJu0YweDWnYFrV2fJePOLHaG2f3/EYPpiifoTcQTWa+yxw6t5U9pVQV sDqdfBOLOF8ExT4AeGPkIyX0OQn6pMd0JOPkoXsW3mzZTlVI0MVXBk4BbiyfmcMIoBlfM1vKUss MlkGaGb2Zzmiz/f+v8FxXP0kiEPdvRJ9G+Qw8 X-Gm-Gg: AfdE7ckBqofHRrChCfEBRpUnarURlZ5462sf8ZPgIXkNij5y1hzSMRBwkl4lj+1FH/+ qgbBaAj+DzlsnSzwruVmv0oIceohT1xkO1jYXO8snImTZExIevvffHmqUfMKuvm3box+gJZ20K0 jKKaml9HE5V+LJm37Xhz+KJ9lG6BUsmYe+JDysu0twCxzBXXBJOLT83SiXgldcqsOTIo92qXpgn ojrinIizmd24sBc9LtSGkX7AiwBuAhpC0IkWZBKkVNiAIcmtN2DCzqlxHoaIV6lJHpf3hB8 X-Received: by 2002:a05:690c:6d0e:b0:7bd:7b2e:f079 with SMTP id 00721157ae682-7fe5e3979d0mr57515767b3.44.1781723955748; Wed, 17 Jun 2026 12:19:15 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Ayush Tiwari Date: Thu, 18 Jun 2026 00:49:03 +0530 X-Gm-Features: AVVi8Cf7loyTFPnd-nDW8TDdpEkItGM6N8-HZfGk04uh2euldtHf3qsI4El30Hs Message-ID: Subject: Re: Fw:Re: Fw: gbt_var_consistent in contrib/btree_gist/btree_utils_var.c has internal-node type confusion on the <> strategy, bypassing exclusion constraints To: =?UTF-8?B?546L6LeD5p6X?= Cc: pgsql-bugs Content-Type: multipart/mixed; boundary="00000000000078a052065477efad" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000078a052065477efad Content-Type: multipart/alternative; boundary="00000000000078a050065477efab" --00000000000078a050065477efab Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Tue, 16 Jun 2026 at 16:59, =E7=8E=8B=E8=B7=83=E6=9E=97 wrote: > 0800, =E7=8E=8B=E8=B7=83=E6=9E=97 wrote: > > > gbt_var_node_truncate (btree_utils_var.c:214) truncates internal node k= eys to a common-prefix length. The resulting bytea can have VARSIZE anywher= e from 4 upward. When the truncated VARSIZE is below 8 and that key reaches= bit_cmp via the buggy BtreeGistNotEqual branch, bytelen becomes negative. = Passed to memcmp as size_t, that is several GB. ASan catches it as negative= -size-param. A production build without ASan will eventually SEGV when the = read crosses an unmapped page. > > Thanks for the report! In gbt_var_consistent() (contrib/btree_gist/btree_utils_var.c), the <> (BtreeGistNotEqual) branch is the only strategy that does not distinguish leaf from internal pages. It applies the type's equality function directly to the stored key on both bounds: retval =3D !(tinfo->f_eq(query, key->lower, ...) && tinfo->f_eq(query, key->upper, ...)); That seems to be the problem: on internal pages those keys are truncated (and for bit/varbit the length header is gone too), so they aren't really valid values to hand to the type's equality function. Hence the negative length reaching memcmp(). Would it make sense to just have <> follow the same leaf-vs-internal pattern as the other strategies; negate equality on a leaf, and otherwise recurse? An internal page can always contain some non-equal value, so I don't think we lose anything by descending. I put together a small patch along those lines (plus a bit(8) test that goes through internal pages); it's attached if it's useful. (PS. The test exercises the path but passes on a plain build; the OOB read shows up under ASan (negative-size-param).) I didn't touch the fixed-size path in btree_utils_num.c, since its internal keys look like they're exact lower/upper values, but please correct me if I'm missing something there. Regards, Ayush --00000000000078a050065477efab Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

On Tue, 16 Jun 2= 026 at 16:59, =E7=8E=8B=E8=B7=83=E6=9E=97 <violin0613@tju.edu.cn> wrote:
0800, =E7=8E=8B=E8=B7=83=E6=9E=97 wrote:
> gbt_va=
r_node_truncate (btree_utils_var.c:214) truncates internal node keys to a c=
ommon-prefix length. The resulting bytea can have VARSIZE anywhere from 4 u=
pward. When the truncated VARSIZE is below 8 and that key reaches bit_cmp v=
ia the buggy BtreeGistNotEqual branch, bytelen becomes negative. Passed to =
memcmp as size_t, that is several GB. ASan catches it as negative-size-para=
m. A production build without ASan will eventually SEGV when the read cross=
es an unmapped page.
Thanks for th= e report!

In gbt_var_consistent() (contrib/btree_gist/btree_utils_va= r.c), the <>
(BtreeGistNotEqual) branch is the only strategy that = does not distinguish
leaf from internal pages. It applies the type's= equality function directly
to the stored key on both bounds:

=C2= =A0 retval =3D !(tinfo->f_eq(query, key->lower, ...) &&
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0tinfo->f_eq(query, key->uppe= r, ...));

That seems to be the problem: on internal pages those keys= are
truncated (and for bit/varbit the length header is gone too), sothey aren't really valid values to hand to the type's equality
= function.=C2=A0 Hence the negative length reaching memcmp().

=
Would it make sense to just have <> follow the same leaf-v= s-internal
pattern as the other strategies; negate equality on a leaf, a= nd
otherwise recurse?=C2=A0 An internal page can always contain some
= non-equal value, so I don't think we lose anything by descending.
I = put together a small patch along those lines (plus a bit(8) test
that go= es through internal pages); it's attached if it's useful.
(PS. T= he test exercises the path but passes on a plain build; the OOB
read sho= ws up under ASan (negative-size-param).)

I didn't touch the fixe= d-size path in btree_utils_num.c, since its
internal keys look like they= 're exact lower/upper values, but
please correct me if I'm missi= ng something there.

Regards,
Ayush
--00000000000078a050065477efab-- --00000000000078a052065477efad Content-Type: application/octet-stream; name="0001-Fix-btree_gist-strategy-on-internal-index-pages.patch" Content-Disposition: attachment; filename="0001-Fix-btree_gist-strategy-on-internal-index-pages.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqifa6750 RnJvbSBhNTNiM2Y1OWE3ZDAxZjAxZDIxZDdmMTlmZDZkMzRhOWEzODYwMjI4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBeXVzaCBUaXdhcmkgPGF5dXNodGl3YXJpLnNsZzAxQGdtYWls LmNvbT4KRGF0ZTogV2VkLCAxNyBKdW4gMjAyNiAyMjo1MjozNiArMDUzMApTdWJqZWN0OiBbUEFU Q0ggdjFdIEZpeCBidHJlZV9naXN0IDw+IHN0cmF0ZWd5IG9uIGludGVybmFsIGluZGV4IHBhZ2Vz CgpnYnRfdmFyX2NvbnNpc3RlbnQoKSBoYW5kbGVkIHRoZSA8PiAoQnRyZWVHaXN0Tm90RXF1YWwp IHN0cmF0ZWd5IHdpdGhvdXQKZGlzdGluZ3Vpc2hpbmcgbGVhZiBmcm9tIGludGVybmFsIHBhZ2Vz LCB1bmxpa2UgZXZlcnkgb3RoZXIgc3RyYXRlZ3kuCkludGVybmFsIGtleXMgYXJlIGxvc3N5LCB0 cnVuY2F0ZWQgcHJlZml4ZXMsIGFuZCBmb3IgYml0L3ZhcmJpdCB0aGUKbGVhZi10by1ub2RlIHRy YW5zZm9ybSBkcm9wcyB0aGUgVmFyQml0IGxlbmd0aCBoZWFkZXIsIHNvIHN1Y2ggYSBrZXkgaXMK bm90IGEgdmFsaWQgdmFsdWUgb2YgdGhlIGluZGV4ZWQgdHlwZS4KClBhc3NpbmcgaXQgdG8gdGhl IHR5cGUncyBlcXVhbGl0eSBmdW5jdGlvbiBpcyBhIHR5cGUgY29uZnVzaW9uLiAgRm9yCmJpdC92 YXJiaXQgaXQgcmVhY2hlcyBiaXRfY21wKCksIHdoZXJlIFZBUkJJVEJZVEVTKCkgY29tcHV0ZXMg VkFSU0laRSAtIDg7CmEga2V5IHdpdGggVkFSU0laRSA8IDggeWllbGRzIGEgbmVnYXRpdmUgbGVu Z3RoIHRoYXQsIHBhc3NlZCB0byBtZW1jbXAoKQphcyBzaXplX3QsIGJlY29tZXMgaHVnZSBhbmQg cmVhZHMgb3V0IG9mIGJvdW5kcyAoZXZlbnR1YWxseSBjcmFzaGluZyB0aGUKYmFja2VuZCkuICBF dmVuIHdpdGhvdXQgYSBjcmFzaCBpdCBjYW4gZ2l2ZSB3cm9uZyBlcXVhbGl0eSByZXN1bHRzIGFu ZApkZWZlYXQgYW4gZXhjbHVzaW9uIGNvbnN0cmFpbnQgZGVjbGFyZWQgd2l0aCA8Pi4KCk1ha2Ug dGhlIDw+IGJyYW5jaCBkaXN0aW5ndWlzaCBsZWFmIGFuZCBpbnRlcm5hbCBwYWdlczogb24gYSBs ZWFmLCBuZWdhdGUKdGhlIGVxdWFsaXR5IHRlc3QgYWdhaW5zdCB0aGUgc3RvcmVkIHZhbHVlOyBv biBhbiBpbnRlcm5hbCBwYWdlLCByZWN1cnNlCnVuY29uZGl0aW9uYWxseS4gIFRoZSBmaXggaXMg aW4gdGhlIHNoYXJlZCBnYnRfdmFyX2NvbnNpc3RlbnQoKSBhbmQgc28KY292ZXJzIGV2ZXJ5IHZh cmlhYmxlLWxlbmd0aCB0eXBlLiAgQWRkIGEgcmVncmVzc2lvbiB0ZXN0LgotLS0KIGNvbnRyaWIv YnRyZWVfZ2lzdC9idHJlZV91dGlsc192YXIuYyAgICAgIHwgMTQgKysrKysrKysrKystLQogY29u dHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL25vdF9lcXVhbC5vdXQgfCAyNCArKysrKysrKysrKysr KysrKysrKysrKwogY29udHJpYi9idHJlZV9naXN0L3NxbC9ub3RfZXF1YWwuc3FsICAgICAgfCAx OCArKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA1NCBpbnNlcnRpb25zKCspLCAy IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV91dGls c192YXIuYyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV91dGlsc192YXIuYwppbmRleCAyNWMz YmJlOGVhYy4uNjA0M2RkODExYmMgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJl ZV91dGlsc192YXIuYworKysgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfdXRpbHNfdmFyLmMK QEAgLTYxMSw4ICs2MTEsMTggQEAgZ2J0X3Zhcl9jb25zaXN0ZW50KEdCVF9WQVJLRVlfUiAqa2V5 LAogCQkJCQl8fCBnYnRfdmFyX25vZGVfcGZfbWF0Y2goa2V5LCBxdWVyeSwgdGluZm8pOwogCQkJ YnJlYWs7CiAJCWNhc2UgQnRyZWVHaXN0Tm90RXF1YWxTdHJhdGVneU51bWJlcjoKLQkJCXJldHZh bCA9ICEodGluZm8tPmZfZXEocXVlcnksIGtleS0+bG93ZXIsIGNvbGxhdGlvbiwgZmxpbmZvKSAm JgotCQkJCQkgICB0aW5mby0+Zl9lcShxdWVyeSwga2V5LT51cHBlciwgY29sbGF0aW9uLCBmbGlu Zm8pKTsKKworCQkJLyoKKwkJCSAqIE11c3QgZGlzdGluZ3Vpc2ggbGVhZiBhbmQgaW50ZXJuYWwg cGFnZXMuICBJbnRlcm5hbCBrZXlzIGFyZQorCQkJICogbG9zc3ksIHRydW5jYXRlZCBwcmVmaXhl cyB3aG9zZSByZXByZXNlbnRhdGlvbiBtYXkgZGlmZmVyIGZyb20KKwkJCSAqIHRoZSBsZWFmIGZv cm0gKGUuZy4gYml0L3ZhcmJpdCksIHNvIGZfZXEoKSBvbiB0aGVtIGNhbiBnaXZlCisJCQkgKiB3 cm9uZyBhbnN3ZXJzIG9yIHJlYWQgb3V0IG9mIGJvdW5kcy4gIEFuIGludGVybmFsIHBhZ2UgbWF5 CisJCQkgKiBhbHdheXMgaG9sZCBhIG5vbi1lcXVhbCB2YWx1ZSwgc28ganVzdCByZWN1cnNlIGlu dG8gaXQuCisJCQkgKi8KKwkJCWlmIChpc19sZWFmKQorCQkJCXJldHZhbCA9ICF0aW5mby0+Zl9l cShxdWVyeSwga2V5LT5sb3dlciwgY29sbGF0aW9uLCBmbGluZm8pOworCQkJZWxzZQorCQkJCXJl dHZhbCA9IHRydWU7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldHZhbCA9IGZhbHNlOwpk aWZmIC0tZ2l0IGEvY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL25vdF9lcXVhbC5vdXQgYi9j b250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvbm90X2VxdWFsLm91dAppbmRleCA4NWIxZTg2OGE4 Ny4uOTIyOTUwZTBjMmYgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9u b3RfZXF1YWwub3V0CisrKyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9ub3RfZXF1YWwu b3V0CkBAIC0zOSwzICszOSwyNyBAQCBJTlNFUlQgSU5UTyB6b28gVkFMVUVTKDEyMywgJ2xpb24n KTsKIEVSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZhbHVlIHZpb2xhdGVzIGV4Y2x1c2lvbiBjb25z dHJhaW50ICJ6b29fY2FnZV9hbmltYWxfZXhjbCIKIERFVEFJTDogIEtleSAoY2FnZSwgYW5pbWFs KT0oMTIzLCBsaW9uKSBjb25mbGljdHMgd2l0aCBleGlzdGluZyBrZXkgKGNhZ2UsIGFuaW1hbCk9 KDEyMywgemVicmEpLgogSU5TRVJUIElOVE8gem9vIFZBTFVFUygxMjQsICdsaW9uJyk7CistLSBB IDw+IHNlYXJjaCBtdXN0IGRlc2NlbmQgaW50ZXJuYWwgcGFnZXMgaW5zdGVhZCBvZiBjb21wYXJp bmcgdGhlIHF1ZXJ5IHRvIGEKKy0tIHRydW5jYXRlZCBpbnRlcm5hbCBrZXkuICBVc2UgYSBtdWx0 aS1sZXZlbCBpbmRleCBhbmQgY2hlY2sgaXQgYWdyZWVzIHdpdGggc2VxIHNjYW4uCitDUkVBVEUg VEFCTEUgYml0bmUgKGEgYml0KDgpKTsKK0lOU0VSVCBJTlRPIGJpdG5lIFNFTEVDVCAoZyAlIDI1 Nik6OmJpdCg4KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAyMDAwMCkgZzsKK0NSRUFURSBJTkRF WCBiaXRuZV9pZHggT04gYml0bmUgVVNJTkcgZ2lzdCAoYSk7CitTRVQgZW5hYmxlX3NlcXNjYW4g dG8gb247CitTRVQgZW5hYmxlX2luZGV4c2NhbiB0byBvZmY7CitTRVQgZW5hYmxlX2JpdG1hcHNj YW4gdG8gb2ZmOworU0VMRUNUIGNvdW50KCopIEZST00gYml0bmUgV0hFUkUgYSA8PiBCJzAwMDAw MDAwJzsKKyBjb3VudCAKKy0tLS0tLS0KKyAxOTkyMgorKDEgcm93KQorCitTRVQgZW5hYmxlX3Nl cXNjYW4gdG8gb2ZmOworU0VUIGVuYWJsZV9pbmRleHNjYW4gdG8gb247CitTRVQgZW5hYmxlX2Jp dG1hcHNjYW4gdG8gb247CitTRUxFQ1QgY291bnQoKikgRlJPTSBiaXRuZSBXSEVSRSBhIDw+IEIn MDAwMDAwMDAnOworIGNvdW50IAorLS0tLS0tLQorIDE5OTIyCisoMSByb3cpCisKK0RST1AgVEFC TEUgYml0bmU7CmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3Qvc3FsL25vdF9lcXVhbC5z cWwgYi9jb250cmliL2J0cmVlX2dpc3Qvc3FsL25vdF9lcXVhbC5zcWwKaW5kZXggNmRmYWM1ZDBh YWUuLmVjYjEzNWY0N2QyIDEwMDY0NAotLS0gYS9jb250cmliL2J0cmVlX2dpc3Qvc3FsL25vdF9l cXVhbC5zcWwKKysrIGIvY29udHJpYi9idHJlZV9naXN0L3NxbC9ub3RfZXF1YWwuc3FsCkBAIC0z NCwzICszNCwyMSBAQCBJTlNFUlQgSU5UTyB6b28gVkFMVUVTKDEyMywgJ3plYnJhJyk7CiBJTlNF UlQgSU5UTyB6b28gVkFMVUVTKDEyMywgJ3plYnJhJyk7CiBJTlNFUlQgSU5UTyB6b28gVkFMVUVT KDEyMywgJ2xpb24nKTsKIElOU0VSVCBJTlRPIHpvbyBWQUxVRVMoMTI0LCAnbGlvbicpOworCist LSBBIDw+IHNlYXJjaCBtdXN0IGRlc2NlbmQgaW50ZXJuYWwgcGFnZXMgaW5zdGVhZCBvZiBjb21w YXJpbmcgdGhlIHF1ZXJ5IHRvIGEKKy0tIHRydW5jYXRlZCBpbnRlcm5hbCBrZXkuICBVc2UgYSBt dWx0aS1sZXZlbCBpbmRleCBhbmQgY2hlY2sgaXQgYWdyZWVzIHdpdGggc2VxIHNjYW4uCitDUkVB VEUgVEFCTEUgYml0bmUgKGEgYml0KDgpKTsKK0lOU0VSVCBJTlRPIGJpdG5lIFNFTEVDVCAoZyAl IDI1Nik6OmJpdCg4KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAyMDAwMCkgZzsKK0NSRUFURSBJ TkRFWCBiaXRuZV9pZHggT04gYml0bmUgVVNJTkcgZ2lzdCAoYSk7CisKK1NFVCBlbmFibGVfc2Vx c2NhbiB0byBvbjsKK1NFVCBlbmFibGVfaW5kZXhzY2FuIHRvIG9mZjsKK1NFVCBlbmFibGVfYml0 bWFwc2NhbiB0byBvZmY7CitTRUxFQ1QgY291bnQoKikgRlJPTSBiaXRuZSBXSEVSRSBhIDw+IEIn MDAwMDAwMDAnOworCitTRVQgZW5hYmxlX3NlcXNjYW4gdG8gb2ZmOworU0VUIGVuYWJsZV9pbmRl eHNjYW4gdG8gb247CitTRVQgZW5hYmxlX2JpdG1hcHNjYW4gdG8gb247CitTRUxFQ1QgY291bnQo KikgRlJPTSBiaXRuZSBXSEVSRSBhIDw+IEInMDAwMDAwMDAnOworCitEUk9QIFRBQkxFIGJpdG5l OwotLSAKMi4zNC4xCgo= --00000000000078a052065477efad--