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 1qW9op-002Iix-LL for pgsql-hackers@arkaria.postgresql.org; Wed, 16 Aug 2023 06:15:48 +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 1qW9oo-003bXn-4F for pgsql-hackers@arkaria.postgresql.org; Wed, 16 Aug 2023 06:15:46 +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 1qW9lg-003XGF-Un for pgsql-hackers@lists.postgresql.org; Wed, 16 Aug 2023 06:12:33 +0000 Received: from mail-oo1-xc31.google.com ([2607:f8b0:4864:20::c31]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qW9ld-000OMu-O2 for pgsql-hackers@postgresql.org; Wed, 16 Aug 2023 06:12:31 +0000 Received: by mail-oo1-xc31.google.com with SMTP id 006d021491bc7-56d6879dcaaso4463586eaf.3 for ; Tue, 15 Aug 2023 23:12:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1692166348; x=1692771148; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=tymx8Z+NoagVNwl5easxJq26Il+WLkhYxR1cpy+oaUI=; b=Tqudas/8uOGNAchC9eWb/UiPRb7pwUvMH0jJ/fifVJW9vXolj/XMFxXmiT5f2FdZey QMhIy9gi9SklCAzjjHAy+bghYJTpMYQuSZybMRc3QAYNF5BjnncbQrcfYD6GEsYfphpc OY9PsS/Tu/H74Vc53RtCStbBlqP6pteHdbDoPsD4blDeGm/6g2/QiGNbo60ppO87PM9Y 4WI4tAm/5TZ/GeofatwrNDyFC6/tQXnGZiAvIDqsuXmE9x38xL0S0f4zEBDB4UE6IHis 3SJ3fLKzpcW788jCajLG3Jj+l50qnnzreKJ4hZW036EWvD5vPgSaj052OGcZXcan/Mfv CFuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692166348; x=1692771148; 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=tymx8Z+NoagVNwl5easxJq26Il+WLkhYxR1cpy+oaUI=; b=jhmD2pSXSqCNn5B0JSD5azoT4nUfm0eiaHkm+ufcoT2+TZFITOQmFHM/OiW6IJXEOZ LRAK5GbypTMDSQvi7V9MFYvjjcK6YHb81+LXIMvEXYmhVLwQetU7s3zGdw0bBwD4wqi8 d5TqdIPSG3IgYji3kOF3d2T1i29grgj0pZTdGp7/ip7zi6xlI+11YUgGrYsTkmFpNtVh 4DBRjZfPgZ3KqCp2CXNTtV0NaJc/4HqJFUFy3Ek7/A19zBIJd4dhrune7LzG68XNBv7G C9QTnliiVDvjhiVm0SQqy+y8GrUupfJIPl8jNxepqUvrBnYXmTequLuaIPoB2tDgEdei fvMw== X-Gm-Message-State: AOJu0YxDqM3Sei8o6+0lKFlbvBywW6P/rK5UlrBEqe4SVlkfM0tAm3D9 xeoYpHgS1AlIes8JNs5d6xU1wwsxV/14hU/X9Rw= X-Google-Smtp-Source: AGHT+IHsp78eZNBucj7lpLik9UIipjRN1sMk62jMpBis/0q22RSGtSrkvoqyDzdn0qISK1CuA6O3Ba7ENi44BQpPJm4= X-Received: by 2002:a4a:271b:0:b0:56c:a41c:f264 with SMTP id l27-20020a4a271b000000b0056ca41cf264mr824469oof.8.1692166348607; Tue, 15 Aug 2023 23:12:28 -0700 (PDT) MIME-Version: 1.0 References: <3507485.1691090027@sss.pgh.pa.us> <900892914fdc3f477b101d699efb40e0@anastigmatix.net> <903341.1692022214@sss.pgh.pa.us> In-Reply-To: From: Andy Fan Date: Wed, 16 Aug 2023 14:12:16 +0800 Message-ID: Subject: Re: Extract numeric filed in JSONB more effectively To: Pavel Stehule Cc: Tom Lane , Chapman Flack , jian he , pgsql-hackers Content-Type: multipart/mixed; boundary="0000000000001c70d20603042eff" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000001c70d20603042eff Content-Type: multipart/alternative; boundary="0000000000001c70cf0603042efd" --0000000000001c70cf0603042efd Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Aug 15, 2023 at 1:24=E2=80=AFPM Pavel Stehule wrote: > Hi > > =C3=BAt 15. 8. 2023 v 5:24 odes=C3=ADlatel Andy Fan > napsal: > >> >>> jsonb_extract_xx_type just cares about the argtype, but >>> 'explain select xx' will still access the const->constvalue. >>> const->constvalue is 0 which is set by makeNullConst currently, >>> and it is ok for the current supported type. >>> >> >> The exception is numeric data type, the constvalue can't be 0. >> so hack it with the below line. maybe not good enough, but I >> have no better solution now. >> >> + Const *target =3D >> makeNullConst(fexpr->funcresulttype, >> + >> -1, >> + >> InvalidOid); >> + /* >> + * Since all the above functions are strict, we >> can't input >> + * a NULL value. >> + */ >> + target->constisnull =3D false; >> + >> + Assert(target->constbyval || target->consttype = =3D=3D >> NUMERICOID); >> + >> + /* Mock a valid datum for !constbyval type. */ >> + if (fexpr->funcresulttype =3D=3D NUMERICOID) >> + target->constvalue =3D >> DirectFunctionCall1(numeric_in, CStringGetDatum("0")); >> >> > Personally I think this workaround is too dirty, and better to use a > strict function (I believe so the overhead for NULL values is acceptable)= . > In the patch v8, I created a new routine named makeDummyConst, which just sits by makeNullConst. It may be helpful to some extent. a). The code is self-document for the user/reader. b). We have a central place to maintain this routine. Besides the framework, the troubles for the reviewer may be if the code has some corner case issue or behavior changes. Especially I have some code refactor when working on jsonb_extract_path. so the attached test.sql is designed for this. I have compared the result between master and patched version and I think reviewer can do some extra testing with it. v8 is the finished version in my mind, so I think it is ready for review now. --=20 Best Regards Andy Fan --0000000000001c70cf0603042efd Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


=
On Tue, Aug 15, 2023 at 1:24=E2=80=AF= PM Pavel Stehule <pavel.stehu= le@gmail.com> wrote:
Hi

=C3=BAt 15. 8. 2023 v=C2=A05:24 ode= s=C3=ADlatel Andy Fan <zhihui.fan1213@gmail.com> napsal:
<= div class=3D"gmail_quote">

=C2=A0jsonb_extract_xx_type j= ust cares about the argtype, but=C2=A0
'explain select xx'= ;=C2=A0 will still access the const->constvalue.
const->con= stvalue is 0 which is set by makeNullConst currently,=C2=A0
and i= t is ok for the current supported type.=C2=A0

The exception is numeric data type, the c= onstvalue can't be 0.=C2=A0
so hack it with the below line.=C2=A0 m= aybe not good enough,=C2=A0 but I
have no better solution=C2=A0no= w.=C2=A0

+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Const =C2=A0 *target =3D =C2=A0makeNullC= onst(fexpr->funcresulttype,
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0-1,
+ =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Invali= dOid);
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 /*
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0* Since all the above functions are strict, = we can't input
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0* a NULL value.
+ =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0*/
+ =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 t= arget->constisnull =3D false;
+ =C2=A0 =C2=A0 =C2=A0
+ =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Assert(t= arget->constbyval || target->consttype =3D=3D NUMERICOID);
+ =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0
+ =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 /* Mock a valid datum = for !constbyval type. */
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (fexpr->funcresulttype =3D=3D NUMERIC= OID)
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 target->constvalue =3D DirectF= unctionCall1(numeric_in, CStringGetDatum("0"));


Personally I think this workaround is t= oo dirty, and better to use a strict function (I believe so the overhead fo= r NULL values is acceptable).

=
In the patch v8,=C2=A0 I created a new routine=C2=A0named makeDummyCon= st,
which just sits by makeNullConst. It may be helpful to some e= xtent.
a).=C2=A0 The code is self-document for the user/reader.= =C2=A0 b).=C2=A0 We have a
central place to maintain this routine= .=C2=A0

Besides the framework,=C2=A0 the troubles = for the reviewer may be if the
code has some corner case issue or= behavior changes. Especially
I have some code refactor when work= ing on=C2=A0jsonb_extract_path.
so the attached test.sql is desig= ned for this.=C2=A0 I have compared the
result between master and= patched version and I think reviewer
can do some extra testing w= ith it.

v8 is the finished version in my mind, so = I think it is ready for review now.=C2=A0

--
<= div dir=3D"ltr" class=3D"gmail_signature">
Best RegardsAndy Fan
--0000000000001c70cf0603042efd-- --0000000000001c70d20603042eff Content-Type: application/octet-stream; name="v8-0001-optimize-casting-jsonb-to-a-given-type.patch.bak" Content-Disposition: attachment; filename="v8-0001-optimize-casting-jsonb-to-a-given-type.patch.bak" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lldbwrqy0 RnJvbSA3N2QxYjE0ODZkNTUwYjA1MGYyMzc4OWIxMmRiM2YzNWMyN2NlMDBkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmR5IEZhbiA8emhpaHVpLmZhbjEyMTNAZ21haWwuY29tPgpE YXRlOiBUaHUsIDEwIEF1ZyAyMDIzIDE1OjE1OjI1ICswODAwClN1YmplY3Q6IFtQQVRDSCB2OF0g b3B0aW1pemUgY2FzdGluZyBqc29uYiB0byBhIGdpdmVuIHR5cGUuCgpQcmV2aW91c2x5IGFmdGVy IHdlIGdldCBhIEpzb25iVmFsdWUsIHdlIG5lZWQgdG8gY29udmVydCBpdCB0bwpKc29uYiBmaXJz dCB0aGVuIGNhc3QgdGhlIEpzb25iIHRvIHRoZSBnaXZlbiB0eXBlLiBJbiB0aGlzIHBhdGNoLAp3 ZSBjb3ZlcnQgdGhlIEpzb25iVmFsdWUgdG8gdGhlIGRlc2lyZWQgdHlwZSBkaXJlY3RseS4KLS0t CiBzcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYyAgICAgICB8ICAzMCArKysrKwogc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2pzb25iLmMgICAgICAgfCAxNzYgKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jICAgfCAxMTQgKysrKysr KysrKystLS0tLS0tCiBzcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaCAgICB8ICAgMiAr LQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgfCAgMzIgKysrLS0KIHNyYy9p bmNsdWRlL25vZGVzL21ha2VmdW5jcy5oICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL3V0aWxz L2pzb25iLmggICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNv bmIub3V0IHwgMTYwICsrKysrKysrKysrKysrLS0tLS0tLS0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2pzb25iLnNxbCAgICAgIHwgIDQzICsrKystLS0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3ht bG1hcC5zcWwgICAgIHwgICAzICstCiAxMCBmaWxlcyBjaGFuZ2VkLCA0MzEgaW5zZXJ0aW9ucygr KSwgMTMyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL21ha2Vm dW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKaW5kZXggMGU3ZTZlNDZkOTQu LjljYjkxNzhmMDFhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYwor KysgYi9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYwpAQCAtMjAsNiArMjAsNyBAQAogI2lu Y2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgog I2luY2x1ZGUgInV0aWxzL2VycmNvZGVzLmgiCisjaW5jbHVkZSAidXRpbHMvZm1ncnByb3Rvcy5o IgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogCiAKQEAgLTM1Miw2ICszNTMsMzUgQEAg bWFrZU51bGxDb25zdChPaWQgY29uc3R0eXBlLCBpbnQzMiBjb25zdHR5cG1vZCwgT2lkIGNvbnN0 Y29sbGlkKQogCQkJCQkgdHlwQnlWYWwpOwogfQogCisvKgorICogbWFrZUR1bW15Q29uc3QKKyAq CSBjcmVhdGUgYSBDb25zdCBub2RlIHdpdGggdGhlIHNwZWNpZmllZCB0eXBlL3R5cG1vZC4KKyAq CisgKiBUaGlzIGlzIGEgY29udmVuaWVuY2Ugcm91dGluZSB0byBjcmVhdGUgYSBDb25zdCB3aGlj aCBvbmx5IHRoZQorICogdHlwZSBpcyBpbnRlcmVzdGluZyBidXQgbWFrZSBzdXJlIHRoZSB2YWx1 ZSBpcyBhY2Nlc3NpYmxlLgorICovCitDb25zdCAqCittYWtlRHVtbXlDb25zdChPaWQgY29uc3R0 eXBlLCBpbnQzMiBjb25zdHR5cG1vZCwgT2lkIGNvbnN0Y29sbGlkKQoreworCWludDE2CQl0eXBM ZW47CisJYm9vbAkJdHlwQnlWYWw7CisJQ29uc3QJCSpjOworCURhdHVtCQl2YWwgPSAwOworCisK KwlnZXRfdHlwbGVuYnl2YWwoY29uc3R0eXBlLCAmdHlwTGVuLCAmdHlwQnlWYWwpOworCisJaWYg KGNvbnN0dHlwZSA9PSBOVU1FUklDT0lEKQorCQl2YWwgPSBEaXJlY3RGdW5jdGlvbkNhbGwxKG51 bWVyaWNfaW4sIENTdHJpbmdHZXREYXR1bSgiMCIpKTsKKwllbHNlIGlmICghdHlwQnlWYWwpCisJ CWVsb2coRVJST1IsICJjcmVhdGUgZHVtbXkgY29uc3QgZm9yIHR5cGUgJXUgaXMgbm90IHN1cHBv cnRlZC4iLCBjb25zdHR5cGUpOworCisJLyogWFhYOiBoZXJlIEkgYXNzdW1lIGNvbnN0dmFsdWU9 MCBpcyBhY2Nlc3NpYmxlIGZvciBjb25zdGJ5dmFsLiovCisJYyA9IG1ha2VDb25zdChjb25zdHR5 cGUsIGNvbnN0dHlwbW9kLCAwLCAoaW50KSB0eXBMZW4sIHZhbCwgZmFsc2UsIHR5cEJ5VmFsKTsK KworCXJldHVybiBjOworfQorCiAvKgogICogbWFrZUJvb2xDb25zdCAtCiAgKgkgIGNyZWF0ZXMg YSBDb25zdCBub2RlIHJlcHJlc2VudGluZyBhIGJvb2xlYW4gdmFsdWUgKGNhbiBiZSBOVUxMIHRv bykKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYi5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2pzb25iLmMKaW5kZXggOTc4MTg1MmIwY2IuLmNjZDZlNmNjMDM5IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvanNvbmIuYwpAQCAtMTcsMTEgKzE3LDE0IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9w Z19wcm9jLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiZnVuY2Fw aS5oIgorI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgorI2luY2x1ZGUgIm5vZGVzL3N1cHBv cnRub2Rlcy5oIgogI2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCiAjaW5jbHVkZSAibWlzY2Fk bWluLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXRl LmgiCiAjaW5jbHVkZSAidXRpbHMvZGF0ZXRpbWUuaCIKKyNpbmNsdWRlICJ1dGlscy9mbWdyb2lk cy5oIgogI2luY2x1ZGUgInV0aWxzL2pzb24uaCIKICNpbmNsdWRlICJ1dGlscy9qc29uYi5oIgog I2luY2x1ZGUgInV0aWxzL2pzb25mdW5jcy5oIgpAQCAtMjAzOCw2ICsyMDQxLDE3OSBAQCBjYW5u b3RDYXN0SnNvbmJWYWx1ZShlbnVtIGpidlR5cGUgdHlwZSwgY29uc3QgY2hhciAqc3FsdHlwZSkK IAllbG9nKEVSUk9SLCAidW5rbm93biBqc29uYiB0eXBlOiAlZCIsIChpbnQpIHR5cGUpOwogfQog CitzdGF0aWMgYm9vbAoranNvbmJfY2FzdF9pc19vcHRpbWl6ZWQoT2lkIHRhcmdldF90eXBlKQor eworCXN3aXRjaCh0YXJnZXRfdHlwZSkKKwl7CisJCWNhc2UgTlVNRVJJQ09JRDoKKwkJY2FzZSBC T09MT0lEOgorCQljYXNlIElOVDJPSUQ6CisJCWNhc2UgSU5UNE9JRDoKKwkJY2FzZSBJTlQ4T0lE OgorCQljYXNlIEZMT0FUNE9JRDoKKwkJY2FzZSBGTE9BVDhPSUQ6CisJCQlyZXR1cm4gdHJ1ZTsK KwkJZGVmYXVsdDoKKwkJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK0RhdHVtCitqc29uYl9jYXN0 X3N1cHBvcnQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlOb2RlCSAgICpyYXdyZXEgPSAoTm9kZSAq KSBQR19HRVRBUkdfUE9JTlRFUigwKTsKKworCWlmIChJc0EocmF3cmVxLCBTdXBwb3J0UmVxdWVz dFNpbXBsaWZ5KSkKKwl7CisJCVN1cHBvcnRSZXF1ZXN0U2ltcGxpZnkgKnJlcSA9IChTdXBwb3J0 UmVxdWVzdFNpbXBsaWZ5ICopIHJhd3JlcTsKKwkJRnVuY0V4cHIJKmZleHByID0gcGFsbG9jKHNp emVvZihGdW5jRXhwcikpOworCQlPcEV4cHIJCSpvcGV4cHI7CisJCU9pZAkJCW5ld19mdW5jX2lk ID0gSW52YWxpZE9pZDsKKworCQltZW1jcHkoZmV4cHIsIHJlcS0+ZmNhbGwsIHNpemVvZihGdW5j RXhwcikpOworCisJCW9wZXhwciA9IChPcEV4cHIgKikgbGluaXRpYWwoZmV4cHItPmFyZ3MpOwor CisJCWlmICghSXNBKG9wZXhwciwgT3BFeHByKSB8fAorCQkJIWpzb25iX2Nhc3RfaXNfb3B0aW1p emVkKGZleHByLT5mdW5jcmVzdWx0dHlwZSkpCisJCXsKKwkJCS8qIG5vdCB0aGUgZGVzaXJlZCBw YXR0ZXJuLiAqLworCQkJUEdfUkVUVVJOX1BPSU5URVIoZmV4cHIpOworCQl9CisKKwkJaWYgKG9w ZXhwci0+b3BmdW5jaWQgID09IEZfSlNPTkJfT0JKRUNUX0ZJRUxEKQorCQkJbmV3X2Z1bmNfaWQg PSBGX0pTT05CX09CSkVDVF9GSUVMRF9UWVBFOworCQllbHNlIGlmIChvcGV4cHItPm9wZnVuY2lk ID09IEZfSlNPTkJfQVJSQVlfRUxFTUVOVCkKKwkJCW5ld19mdW5jX2lkID0gRl9KU09OQl9BUlJB WV9FTEVNRU5UX1RZUEU7CisJCWVsc2UgaWYgKG9wZXhwci0+b3BmdW5jaWQgPT0gRl9KU09OQl9F WFRSQUNUX1BBVEgpCisJCQluZXdfZnVuY19pZCA9IEZfSlNPTkJfRVhUUkFDVF9QQVRIX1RZUEU7 CisKKwkJaWYgKE9pZElzVmFsaWQobmV3X2Z1bmNfaWQpKQorCQl7CisJCQlDb25zdAkqdGFyZ2V0 ID0gIG1ha2VEdW1teUNvbnN0KGZleHByLT5mdW5jcmVzdWx0dHlwZSwgMCwgSW52YWxpZE9pZCk7 CisJCQlmZXhwci0+ZnVuY2lkID0gbmV3X2Z1bmNfaWQ7CisJCQlmZXhwci0+YXJncyA9IG9wZXhw ci0+YXJnczsKKwkJCWZleHByLT5hcmdzID0gbGFwcGVuZChmZXhwci0+YXJncywgdGFyZ2V0KTsK KwkJfQorCisJCVBHX1JFVFVSTl9QT0lOVEVSKGZleHByKTsKKwl9CisKKwlQR19SRVRVUk5fUE9J TlRFUihOVUxMKTsKK30KKworRGF0dW0KK2Nhc3RfanNvbmJ2YWx1ZV90b190eXBlKEpzb25iVmFs dWUgKnYsIE9pZCB0YXJnZXRPaWQpCit7CisJc3dpdGNoKHRhcmdldE9pZCkKKwl7CisJCURhdHVt CXJldFZhbHVlOworCisJCWNhc2UgQk9PTE9JRDoKKwkJCWlmICh2LT50eXBlICE9IGpidkJvb2wp CisJCQkJY2Fubm90Q2FzdEpzb25iVmFsdWUodi0+dHlwZSwgImJvb2wiKTsKKwkJCVBHX1JFVFVS Tl9CT09MKHYtPnZhbC5ib29sZWFuKTsKKworCQljYXNlIE5VTUVSSUNPSUQ6CisJCQlpZiAodi0+ dHlwZSAhPSBqYnZOdW1lcmljKQorCQkJCWNhbm5vdENhc3RKc29uYlZhbHVlKHYtPnR5cGUsICJu dW1lcmljIik7CisJCQlQR19SRVRVUk5fTlVNRVJJQyh2LT52YWwubnVtZXJpYyk7CisJCWNhc2Ug SU5UMk9JRDoKKwkJCWlmICh2LT50eXBlICE9IGpidk51bWVyaWMpCisJCQkJY2Fubm90Q2FzdEpz b25iVmFsdWUodi0+dHlwZSwgInNtYWxsaW50Iik7CisJCQlyZXRWYWx1ZSA9IERpcmVjdEZ1bmN0 aW9uQ2FsbDEobnVtZXJpY19pbnQyLAorCQkJCQkJCQkJCSAgIE51bWVyaWNHZXREYXR1bSh2LT52 YWwubnVtZXJpYykpOworCQkJUEdfUkVUVVJOX0RBVFVNKHJldFZhbHVlKTsKKwkJY2FzZSBJTlQ0 T0lEOgorCQkJaWYgKHYtPnR5cGUgIT0gamJ2TnVtZXJpYykKKwkJCQljYW5ub3RDYXN0SnNvbmJW YWx1ZSh2LT50eXBlLCAiaW50ZWdlciIpOworCQkJcmV0VmFsdWUgPSBEaXJlY3RGdW5jdGlvbkNh bGwxKG51bWVyaWNfaW50NCwKKwkJCQkJCQkJCQkgICBOdW1lcmljR2V0RGF0dW0odi0+dmFsLm51 bWVyaWMpKTsKKwkJCVBHX1JFVFVSTl9EQVRVTShyZXRWYWx1ZSk7CisKKwkJY2FzZSBJTlQ4T0lE OgorCQkJaWYgKHYtPnR5cGUgIT0gamJ2TnVtZXJpYykKKwkJCQljYW5ub3RDYXN0SnNvbmJWYWx1 ZSh2LT50eXBlLCAiYmlnaW50Iik7CisJCQlyZXRWYWx1ZSA9IERpcmVjdEZ1bmN0aW9uQ2FsbDEo bnVtZXJpY19pbnQ4LAorCQkJCQkJCQkJCSAgIE51bWVyaWNHZXREYXR1bSh2LT52YWwubnVtZXJp YykpOworCQkJUEdfUkVUVVJOX0RBVFVNKHJldFZhbHVlKTsKKworCQljYXNlIEZMT0FUNE9JRDoK KwkJCWlmICh2LT50eXBlICE9IGpidk51bWVyaWMpCisJCQkJY2Fubm90Q2FzdEpzb25iVmFsdWUo di0+dHlwZSwgInJlYWwiKTsKKwkJCXJldFZhbHVlID0gRGlyZWN0RnVuY3Rpb25DYWxsMShudW1l cmljX2Zsb2F0NCwKKwkJCQkJCQkJCQkgICBOdW1lcmljR2V0RGF0dW0odi0+dmFsLm51bWVyaWMp KTsKKwkJCVBHX1JFVFVSTl9EQVRVTShyZXRWYWx1ZSk7CisKKwkJY2FzZSBGTE9BVDhPSUQ6CisJ CQlpZiAodi0+dHlwZSAhPSBqYnZOdW1lcmljKQorCQkJCWNhbm5vdENhc3RKc29uYlZhbHVlKHYt PnR5cGUsICJkb3VibGUgcHJlY2lzaW9uIik7CisJCQlyZXRWYWx1ZSA9IERpcmVjdEZ1bmN0aW9u Q2FsbDEobnVtZXJpY19mbG9hdDgsCisJCQkJCQkJCQkJICAgTnVtZXJpY0dldERhdHVtKHYtPnZh bC5udW1lcmljKSk7CisJCQlQR19SRVRVUk5fREFUVU0ocmV0VmFsdWUpOworCisJCWRlZmF1bHQ6 CisJCQlBc3NlcnQoZmFsc2UpOworCQkJYnJlYWs7CisJfQorCisJUEdfUkVUVVJOX1BPSU5URVIo TlVMTCk7Cit9CisKK0RhdHVtCitqc29uYl9vYmplY3RfZmllbGRfdHlwZShQR19GVU5DVElPTl9B UkdTKQoreworCUpzb25iCSAgICpqYiA9IFBHX0dFVEFSR19KU09OQl9QKDApOworCXRleHQJICAg KmtleSA9IFBHX0dFVEFSR19URVhUX1BQKDEpOworCU9pZAkJCXRhcmdldE9pZCA9IGdldF9mbl9l eHByX2FyZ3R5cGUoZmNpbmZvLT5mbGluZm8sIDIpOworCisJSnNvbmJWYWx1ZSAqdjsKKwlKc29u YlZhbHVlCXZidWY7CisKKwlpZiAoIUpCX1JPT1RfSVNfT0JKRUNUKGpiKSkKKwkJUEdfUkVUVVJO X05VTEwoKTsKKworCXYgPSBnZXRLZXlKc29uVmFsdWVGcm9tQ29udGFpbmVyKCZqYi0+cm9vdCwK KwkJCQkJCQkJCSBWQVJEQVRBX0FOWShrZXkpLAorCQkJCQkJCQkJIFZBUlNJWkVfQU5ZX0VYSERS KGtleSksCisJCQkJCQkJCQkgJnZidWYpOworCisJaWYgKHYgPT0gTlVMTCkKKwkJUEdfUkVUVVJO X05VTEwoKTsKKworCXJldHVybiBjYXN0X2pzb25idmFsdWVfdG9fdHlwZSh2LCB0YXJnZXRPaWQp OworfQorCitEYXR1bQoranNvbmJfYXJyYXlfZWxlbWVudF90eXBlKFBHX0ZVTkNUSU9OX0FSR1Mp Cit7CisJSnNvbmIJICAgKmpiID0gUEdfR0VUQVJHX0pTT05CX1AoMCk7CisJaW50CQkJZWxlbWVu dCA9IFBHX0dFVEFSR19JTlQzMigxKTsKKwlPaWQJCQl0YXJnZXRPaWQgPSBnZXRfZm5fZXhwcl9h cmd0eXBlKGZjaW5mby0+ZmxpbmZvLCAyKTsKKwlKc29uYlZhbHVlICp2OworCisJaWYgKCFKQl9S T09UX0lTX0FSUkFZKGpiKSkKKwkJUEdfUkVUVVJOX05VTEwoKTsKKworCS8qIEhhbmRsZSBuZWdh dGl2ZSBzdWJzY3JpcHQgKi8KKwlpZiAoZWxlbWVudCA8IDApCisJeworCQl1aW50MzIJCW5lbGVt ZW50cyA9IEpCX1JPT1RfQ09VTlQoamIpOworCisJCWlmICgtZWxlbWVudCA+IG5lbGVtZW50cykK KwkJCVBHX1JFVFVSTl9OVUxMKCk7CisJCWVsc2UKKwkJCWVsZW1lbnQgKz0gbmVsZW1lbnRzOwor CX0KKworCXYgPSBnZXRJdGhKc29uYlZhbHVlRnJvbUNvbnRhaW5lcigmamItPnJvb3QsIGVsZW1l bnQpOworCWlmICh2ID09IE5VTEwpCisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwlyZXR1cm4gY2Fz dF9qc29uYnZhbHVlX3RvX3R5cGUodiwgdGFyZ2V0T2lkKTsKK30KKwogRGF0dW0KIGpzb25iX2Jv b2woUEdfRlVOQ1RJT05fQVJHUykKIHsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9qc29uZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYwppbmRleCBh NGJmYTVlNDA0MC4uM2IxMjBhYjk1MjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9qc29uZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMKQEAg LTQ5Miw2ICs0OTIsNyBAQCBzdGF0aWMgSnNvblBhcnNlRXJyb3JUeXBlIHRyYW5zZm9ybV9zdHJp bmdfdmFsdWVzX29iamVjdF9maWVsZF9zdGFydCh2b2lkICpzdGF0ZQogc3RhdGljIEpzb25QYXJz ZUVycm9yVHlwZSB0cmFuc2Zvcm1fc3RyaW5nX3ZhbHVlc19hcnJheV9lbGVtZW50X3N0YXJ0KHZv aWQgKnN0YXRlLCBib29sIGlzbnVsbCk7CiBzdGF0aWMgSnNvblBhcnNlRXJyb3JUeXBlIHRyYW5z Zm9ybV9zdHJpbmdfdmFsdWVzX3NjYWxhcih2b2lkICpzdGF0ZSwgY2hhciAqdG9rZW4sIEpzb25U b2tlblR5cGUgdG9rZW50eXBlKTsKIAorc3RhdGljIEpzb25iVmFsdWUgKmpzb25iX2dldF9qc29u YnZhbHVlKEpzb25iICpqYiwgRGF0dW0gKnBhdGgsIGludCBucGF0aCwgYm9vbCAqaXNudWxsKTsK IAogLyoKICAqIHBnX3BhcnNlX2pzb25fb3JfZXJyc2F2ZQpAQCAtMTQ3Myw2ICsxNDc0LDM5IEBA IGdldF9zY2FsYXIodm9pZCAqc3RhdGUsIGNoYXIgKnRva2VuLCBKc29uVG9rZW5UeXBlIHRva2Vu dHlwZSkKIAlyZXR1cm4gSlNPTl9TVUNDRVNTOwogfQogCitEYXR1bQoranNvbmJfZXh0cmFjdF9w YXRoX3R5cGUoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlKc29uYgkgICAqamIgPSBQR19HRVRBUkdf SlNPTkJfUCgwKTsKKwlBcnJheVR5cGUgICpwYXRoID0gUEdfR0VUQVJHX0FSUkFZVFlQRV9QKDEp OworCU9pZAkJCXRhcmdldE9pZCA9IGdldF9mbl9leHByX2FyZ3R5cGUoZmNpbmZvLT5mbGluZm8s IDIpOworCUpzb25iVmFsdWUgKnY7CisKKwlEYXR1bQkgICAqcGF0aHRleHQ7CisJYm9vbAkgICAq cGF0aG51bGxzOworCWJvb2wJCWlzbnVsbCA9IGZhbHNlOworCWludAkJCW5wYXRoOworCisJLyoK KwkgKiBJZiB0aGUgYXJyYXkgY29udGFpbnMgYW55IG51bGwgZWxlbWVudHMsIHJldHVybiBOVUxM LCBvbiB0aGUgZ3JvdW5kcworCSAqIHRoYXQgeW91J2QgaGF2ZSBnb3R0ZW4gTlVMTCBpZiBhbnkg UkhTIHZhbHVlIHdlcmUgTlVMTCBpbiBhIG5lc3RlZAorCSAqIHNlcmllcyBvZiBhcHBsaWNhdGlv bnMgb2YgdGhlIC0+IG9wZXJhdG9yLiAgKE5vdGU6IGJlY2F1c2Ugd2UgYWxzbworCSAqIHJldHVy biBOVUxMIGZvciBlcnJvciBjYXNlcyBzdWNoIGFzIG5vLXN1Y2gtZmllbGQsIHRoaXMgaXMgdHJ1 ZQorCSAqIHJlZ2FyZGxlc3Mgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXN0IG9mIHRoZSBhcnJh eS4pCisJICovCisJaWYgKGFycmF5X2NvbnRhaW5zX251bGxzKHBhdGgpKQorCQlQR19SRVRVUk5f TlVMTCgpOworCisJZGVjb25zdHJ1Y3RfYXJyYXlfYnVpbHRpbihwYXRoLCBURVhUT0lELCAmcGF0 aHRleHQsICZwYXRobnVsbHMsICZucGF0aCk7CisKKwl2ID0ganNvbmJfZ2V0X2pzb25idmFsdWUo amIsIHBhdGh0ZXh0LCBucGF0aCwgJmlzbnVsbCk7CisKKwlpZiAoaXNudWxsKQorCQlQR19SRVRV Uk5fTlVMTCgpOworCisJcmV0dXJuIGNhc3RfanNvbmJ2YWx1ZV90b190eXBlKHYsIHRhcmdldE9p ZCk7Cit9CisKIERhdHVtCiBqc29uYl9leHRyYWN0X3BhdGgoUEdfRlVOQ1RJT05fQVJHUykKIHsK QEAgLTE1MTYsNTIgKzE1NTAsMzYgQEAgZ2V0X2pzb25iX3BhdGhfYWxsKEZ1bmN0aW9uQ2FsbElu Zm8gZmNpbmZvLCBib29sIGFzX3RleHQpCiAJCVBHX1JFVFVSTl9EQVRVTShyZXMpOwogfQogCi1E YXR1bQotanNvbmJfZ2V0X2VsZW1lbnQoSnNvbmIgKmpiLCBEYXR1bSAqcGF0aCwgaW50IG5wYXRo LCBib29sICppc251bGwsIGJvb2wgYXNfdGV4dCkKKworc3RhdGljIEpzb25iVmFsdWUgKgoranNv bmJfZ2V0X2pzb25idmFsdWUoSnNvbmIgKmpiLCBEYXR1bSAqcGF0aCwgaW50IG5wYXRoLCBib29s ICppc251bGwpCiB7CisJYm9vbCBoYXZlX29iamVjdCA9IGZhbHNlLCBoYXZlX2FycmF5ID0gZmFs c2U7CiAJSnNvbmJDb250YWluZXIgKmNvbnRhaW5lciA9ICZqYi0+cm9vdDsKKwlpbnQgaTsKIAlK c29uYlZhbHVlICpqYnZwID0gTlVMTDsKLQlpbnQJCQlpOwotCWJvb2wJCWhhdmVfb2JqZWN0ID0g ZmFsc2UsCi0JCQkJaGF2ZV9hcnJheSA9IGZhbHNlOwogCi0JKmlzbnVsbCA9IGZhbHNlOworCS8q CisJICogSWYgdGhlIGFycmF5IGlzIGVtcHR5LCByZXR1cm4gdGhlIGVudGlyZSBMSFMgb2JqZWN0 LCBvbiB0aGUgZ3JvdW5kcworCSAqIHRoYXQgd2Ugc2hvdWxkIGRvIHplcm8gZmllbGQgb3IgZWxl bWVudCBleHRyYWN0aW9ucy4KKwkgKi8KKwlpZiAobnBhdGggPD0gMCkKKwl7CisJCUpzb25iVmFs dWUgKnJlcyA9IE5VTEw7CisJCWlmIChKQl9ST09UX0lTX0FSUkFZKGpiKSAmJiBKQl9ST09UX0lT X1NDQUxBUihqYikpCisJCQlyZXR1cm4gZ2V0SXRoSnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29u dGFpbmVyLCAwKTsKKworCQkvKiBOQjogcmVzIGlzIGEgamJ2QmluYXJ5IEpzb25iVmFsdWUgKi8K KwkJcmVzID0gcGFsbG9jMChzaXplb2YoSnNvbmJWYWx1ZSkpOworCQlKc29uYlRvSnNvbmJWYWx1 ZShqYiwgcmVzKTsKKwkJcmV0dXJuIHJlczsKKwl9CiAKIAkvKiBJZGVudGlmeSB3aGV0aGVyIHdl IGhhdmUgb2JqZWN0LCBhcnJheSwgb3Igc2NhbGFyIGF0IHRvcC1sZXZlbCAqLwogCWlmIChKQl9S T09UX0lTX09CSkVDVChqYikpCiAJCWhhdmVfb2JqZWN0ID0gdHJ1ZTsKIAllbHNlIGlmIChKQl9S T09UX0lTX0FSUkFZKGpiKSAmJiAhSkJfUk9PVF9JU19TQ0FMQVIoamIpKQogCQloYXZlX2FycmF5 ID0gdHJ1ZTsKLQllbHNlCi0JewotCQlBc3NlcnQoSkJfUk9PVF9JU19BUlJBWShqYikgJiYgSkJf Uk9PVF9JU19TQ0FMQVIoamIpKTsKLQkJLyogRXh0cmFjdCB0aGUgc2NhbGFyIHZhbHVlLCBpZiBp dCBpcyB3aGF0IHdlJ2xsIHJldHVybiAqLwotCQlpZiAobnBhdGggPD0gMCkKLQkJCWpidnAgPSBn ZXRJdGhKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIsIDApOwotCX0KLQotCS8qCi0J ICogSWYgdGhlIGFycmF5IGlzIGVtcHR5LCByZXR1cm4gdGhlIGVudGlyZSBMSFMgb2JqZWN0LCBv biB0aGUgZ3JvdW5kcwotCSAqIHRoYXQgd2Ugc2hvdWxkIGRvIHplcm8gZmllbGQgb3IgZWxlbWVu dCBleHRyYWN0aW9ucy4gIEZvciB0aGUKLQkgKiBub24tc2NhbGFyIGNhc2Ugd2UgY2FuIGp1c3Qg aGFuZCBiYWNrIHRoZSBvYmplY3Qgd2l0aG91dCBtdWNoIHdvcmsuIEZvcgotCSAqIHRoZSBzY2Fs YXIgY2FzZSwgZmFsbCB0aHJvdWdoIGFuZCBkZWFsIHdpdGggdGhlIHZhbHVlIGJlbG93IHRoZSBs b29wLgotCSAqIChUaGlzIGluY29uc2lzdGVuY3kgYXJpc2VzIGJlY2F1c2UgdGhlcmUncyBubyBl YXN5IHdheSB0byBnZW5lcmF0ZSBhCi0JICogSnNvbmJWYWx1ZSBkaXJlY3RseSBmb3Igcm9vdC1s ZXZlbCBjb250YWluZXJzLikKLQkgKi8KLQlpZiAobnBhdGggPD0gMCAmJiBqYnZwID09IE5VTEwp Ci0JewotCQlpZiAoYXNfdGV4dCkKLQkJewotCQkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShjc3Ry aW5nX3RvX3RleHQoSnNvbmJUb0NTdHJpbmcoTlVMTCwKLQkJCQkJCQkJCQkJCQkJCQkgIGNvbnRh aW5lciwKLQkJCQkJCQkJCQkJCQkJCQkgIFZBUlNJWkUoamIpKSkpOwotCQl9Ci0JCWVsc2UKLQkJ ewotCQkJLyogbm90IHRleHQgbW9kZSAtIGp1c3QgaGFuZCBiYWNrIHRoZSBqc29uYiAqLwotCQkJ UEdfUkVUVVJOX0pTT05CX1AoamIpOwotCQl9Ci0JfQogCiAJZm9yIChpID0gMDsgaSA8IG5wYXRo OyBpKyspCiAJewpAQCAtMTU4Niw3ICsxNjA0LDcgQEAganNvbmJfZ2V0X2VsZW1lbnQoSnNvbmIg KmpiLCBEYXR1bSAqcGF0aCwgaW50IG5wYXRoLCBib29sICppc251bGwsIGJvb2wgYXNfdGV4dCkK IAkJCWlmIChlbmRwdHIgPT0gaW5kZXh0ZXh0IHx8ICplbmRwdHIgIT0gJ1wwJyB8fCBlcnJubyAh PSAwKQogCQkJewogCQkJCSppc251bGwgPSB0cnVlOwotCQkJCXJldHVybiBQb2ludGVyR2V0RGF0 dW0oTlVMTCk7CisJCQkJcmV0dXJuIE5VTEw7CiAJCQl9CiAKIAkJCWlmIChsaW5kZXggPj0gMCkK QEAgLTE2MDcsNyArMTYyNSw3IEBAIGpzb25iX2dldF9lbGVtZW50KEpzb25iICpqYiwgRGF0dW0g KnBhdGgsIGludCBucGF0aCwgYm9vbCAqaXNudWxsLCBib29sIGFzX3RleHQpCiAJCQkJaWYgKGxp bmRleCA9PSBJTlRfTUlOIHx8IC1saW5kZXggPiBuZWxlbWVudHMpCiAJCQkJewogCQkJCQkqaXNu dWxsID0gdHJ1ZTsKLQkJCQkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKKwkJCQkJcmV0 dXJuIE5VTEw7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQkJaW5kZXggPSBuZWxlbWVudHMgKyBsaW5k ZXg7CkBAIC0xNjE5LDEzICsxNjM3LDEzIEBAIGpzb25iX2dldF9lbGVtZW50KEpzb25iICpqYiwg RGF0dW0gKnBhdGgsIGludCBucGF0aCwgYm9vbCAqaXNudWxsLCBib29sIGFzX3RleHQpCiAJCXsK IAkJCS8qIHNjYWxhciwgZXh0cmFjdGlvbiB5aWVsZHMgYSBudWxsICovCiAJCQkqaXNudWxsID0g dHJ1ZTsKLQkJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CisJCQlyZXR1cm4gTlVMTDsK IAkJfQogCiAJCWlmIChqYnZwID09IE5VTEwpCiAJCXsKIAkJCSppc251bGwgPSB0cnVlOwotCQkJ cmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKKwkJCXJldHVybiBOVUxMOwogCQl9CiAJCWVs c2UgaWYgKGkgPT0gbnBhdGggLSAxKQogCQkJYnJlYWs7CkBAIC0xNjQ0LDYgKzE2NjIsMjIgQEAg anNvbmJfZ2V0X2VsZW1lbnQoSnNvbmIgKmpiLCBEYXR1bSAqcGF0aCwgaW50IG5wYXRoLCBib29s ICppc251bGwsIGJvb2wgYXNfdGV4dCkKIAkJCWhhdmVfYXJyYXkgPSBmYWxzZTsKIAkJfQogCX0K KwlyZXR1cm4gamJ2cDsKK30KKworLyoKKyAqIFJldHVybiBqc29uYiBkYXR1bSBvciBqc29uYi1h cy10ZXh0IGRhdHVtLgorICovCitEYXR1bQoranNvbmJfZ2V0X2VsZW1lbnQoSnNvbmIgKmpiLCBE YXR1bSAqcGF0aCwgaW50IG5wYXRoLCBib29sICppc251bGwsIGJvb2wgYXNfdGV4dCkKK3sKKwlK c29uYlZhbHVlICpqYnZwID0gTlVMTDsKKwkqaXNudWxsID0gZmFsc2U7CisKKwlqYnZwID0ganNv bmJfZ2V0X2pzb25idmFsdWUoamIsIHBhdGgsIG5wYXRoLCBpc251bGwpOworCisJaWYgKCppc251 bGwpCisJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CiAKIAlpZiAoYXNfdGV4dCkKIAl7 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaCBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvY2F0dmVyc2lvbi5oCmluZGV4IGY1MDdiNDliYjI4Li44ZWQwM2EyMGVmYSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgKKysrIGIvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgKQEAgLTU3LDYgKzU3LDYgQEAKICAqLwogCiAvKgkJ CQkJCQl5eXl5bW1kZE4gKi8KLSNkZWZpbmUgQ0FUQUxPR19WRVJTSU9OX05PCTIwMjMwNzI2MQor I2RlZmluZSBDQVRBTE9HX1ZFUlNJT05fTk8JMjAyMzA4MTQxCiAKICNlbmRpZgpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5kYXQKaW5kZXggNjk5NjA3Mzk4OWEuLmFmODlkZWM3ZGI4IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5kYXQKQEAgLTQ1NzUsMjUgKzQ1NzUsMjYgQEAKICAgcHJvbmFtZSA9PiAncGdfbHNu JywgcHJvcmV0dHlwZSA9PiAncGdfbHNuJywgcHJvYXJndHlwZXMgPT4gJ251bWVyaWMnLAogICBw cm9zcmMgPT4gJ251bWVyaWNfcGdfbHNuJyB9LAogCi17IG9pZCA9PiAnMzU1NicsIGRlc2NyID0+ ICdjb252ZXJ0IGpzb25iIHRvIGJvb2xlYW4nLAoreyBvaWQgPT4gJzM1NTYnLCBkZXNjciA9PiAn Y29udmVydCBqc29uYiB0byBib29sZWFuJywgcHJvc3VwcG9ydCA9PiAnanNvbmJfY2FzdF9zdXBw b3J0JywKICAgcHJvbmFtZSA9PiAnYm9vbCcsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLCBwcm9hcmd0 eXBlcyA9PiAnanNvbmInLAogICBwcm9zcmMgPT4gJ2pzb25iX2Jvb2wnIH0sCiB7IG9pZCA9PiAn MzQ0OScsIGRlc2NyID0+ICdjb252ZXJ0IGpzb25iIHRvIG51bWVyaWMnLAotICBwcm9uYW1lID0+ ICdudW1lcmljJywgcHJvcmV0dHlwZSA9PiAnbnVtZXJpYycsIHByb2FyZ3R5cGVzID0+ICdqc29u YicsCisgIHByb25hbWUgPT4gJ251bWVyaWMnLCBwcm9zdXBwb3J0ID0+ICdqc29uYl9jYXN0X3N1 cHBvcnQnLAorICBwcm9yZXR0eXBlID0+ICdudW1lcmljJywgcHJvYXJndHlwZXMgPT4gJ2pzb25i JywKICAgcHJvc3JjID0+ICdqc29uYl9udW1lcmljJyB9LAoteyBvaWQgPT4gJzM0NTAnLCBkZXNj ciA9PiAnY29udmVydCBqc29uYiB0byBpbnQyJywKK3sgb2lkID0+ICczNDUwJywgZGVzY3IgPT4g J2NvbnZlcnQganNvbmIgdG8gaW50MicsIHByb3N1cHBvcnQgPT4gJ2pzb25iX2Nhc3Rfc3VwcG9y dCcsCiAgIHByb25hbWUgPT4gJ2ludDInLCBwcm9yZXR0eXBlID0+ICdpbnQyJywgcHJvYXJndHlw ZXMgPT4gJ2pzb25iJywKICAgcHJvc3JjID0+ICdqc29uYl9pbnQyJyB9LAoteyBvaWQgPT4gJzM0 NTEnLCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBpbnQ0JywKK3sgb2lkID0+ICczNDUxJywg ZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIgdG8gaW50NCcsIHByb3N1cHBvcnQgPT4gJ2pzb25iX2Nh c3Rfc3VwcG9ydCcsCiAgIHByb25hbWUgPT4gJ2ludDQnLCBwcm9yZXR0eXBlID0+ICdpbnQ0Jywg cHJvYXJndHlwZXMgPT4gJ2pzb25iJywKICAgcHJvc3JjID0+ICdqc29uYl9pbnQ0JyB9LAoteyBv aWQgPT4gJzM0NTInLCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBpbnQ4JywKK3sgb2lkID0+ ICczNDUyJywgZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIgdG8gaW50OCcsIHByb3N1cHBvcnQgPT4g J2pzb25iX2Nhc3Rfc3VwcG9ydCcsCiAgIHByb25hbWUgPT4gJ2ludDgnLCBwcm9yZXR0eXBlID0+ ICdpbnQ4JywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywKICAgcHJvc3JjID0+ICdqc29uYl9pbnQ4 JyB9LAoteyBvaWQgPT4gJzM0NTMnLCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBmbG9hdDQn LAoreyBvaWQgPT4gJzM0NTMnLCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBmbG9hdDQnLCBw cm9zdXBwb3J0ID0+ICdqc29uYl9jYXN0X3N1cHBvcnQnLAogICBwcm9uYW1lID0+ICdmbG9hdDQn LCBwcm9yZXR0eXBlID0+ICdmbG9hdDQnLCBwcm9hcmd0eXBlcyA9PiAnanNvbmInLAogICBwcm9z cmMgPT4gJ2pzb25iX2Zsb2F0NCcgfSwKLXsgb2lkID0+ICcyNTgwJywgZGVzY3IgPT4gJ2NvbnZl cnQganNvbmIgdG8gZmxvYXQ4JywKK3sgb2lkID0+ICcyNTgwJywgZGVzY3IgPT4gJ2NvbnZlcnQg anNvbmIgdG8gZmxvYXQ4JywgcHJvc3VwcG9ydCA9PiAnanNvbmJfY2FzdF9zdXBwb3J0JywKICAg cHJvbmFtZSA9PiAnZmxvYXQ4JywgcHJvcmV0dHlwZSA9PiAnZmxvYXQ4JywgcHJvYXJndHlwZXMg PT4gJ2pzb25iJywKICAgcHJvc3JjID0+ICdqc29uYl9mbG9hdDgnIH0sCiAKQEAgLTk5MjgsNiAr OTkyOSwxMyBAQAogICBwcm9uYW1lID0+ICdqc29uYl9vYmplY3RfZmllbGRfdGV4dCcsIHByb3Jl dHR5cGUgPT4gJ3RleHQnLAogICBwcm9hcmd0eXBlcyA9PiAnanNvbmIgdGV4dCcsIHByb2FyZ25h bWVzID0+ICd7ZnJvbV9qc29uLCBmaWVsZF9uYW1lfScsCiAgIHByb3NyYyA9PiAnanNvbmJfb2Jq ZWN0X2ZpZWxkX3RleHQnIH0sCit7IG9pZCA9PiAnMzgxMycsIGRlc2NyID0+ICdyZXR1cm4gYSBn aXZlbiB0eXBlIHNwZWNpZmllZCBpbiBkZXNpcmVkX3R5cGUgZnJvbSBqc29uYiBmaWVsZCcsCisg IHByb25hbWUgPT4gJ2pzb25iX29iamVjdF9maWVsZF90eXBlJywgcHJvcmV0dHlwZSA9PiAnYW55 ZWxlbWVudCcsCisgIHByb2FyZ3R5cGVzID0+ICdqc29uYiB0ZXh0IGFueWVsZW1lbnQnLCBwcm9h cmduYW1lcyA9PiAne2Zyb21fanNvbiwgZmllbGRfbmFtZSwgZGVzaXJlZF90eXBlfScsCisgIHBy b3NyYyA9PiAnanNvbmJfb2JqZWN0X2ZpZWxkX3R5cGUnfSwKK3sgb2lkID0+ICczODE0JywgZGVz Y3IgPT4gJ3BsYW5uZXIgc3VwcG9ydCBmb3IgbnVtZXJpYyhqc29uYiknLAorICBwcm9uYW1lID0+ ICdqc29uYl9jYXN0X3N1cHBvcnQnLCBwcm9yZXR0eXBlID0+ICdpbnRlcm5hbCcsCisgIHByb2Fy Z3R5cGVzID0+ICdpbnRlcm5hbCcsIHByb3NyYyA9PiAnanNvbmJfY2FzdF9zdXBwb3J0JyB9LAog eyBvaWQgPT4gJzMyMTUnLAogICBwcm9uYW1lID0+ICdqc29uYl9hcnJheV9lbGVtZW50JywgcHJv cmV0dHlwZSA9PiAnanNvbmInLAogICBwcm9hcmd0eXBlcyA9PiAnanNvbmIgaW50NCcsIHByb2Fy Z25hbWVzID0+ICd7ZnJvbV9qc29uLCBlbGVtZW50X2luZGV4fScsCkBAIC05OTM2LDYgKzk5NDQs MTAgQEAKICAgcHJvbmFtZSA9PiAnanNvbmJfYXJyYXlfZWxlbWVudF90ZXh0JywgcHJvcmV0dHlw ZSA9PiAndGV4dCcsCiAgIHByb2FyZ3R5cGVzID0+ICdqc29uYiBpbnQ0JywgcHJvYXJnbmFtZXMg PT4gJ3tmcm9tX2pzb24sIGVsZW1lbnRfaW5kZXh9JywKICAgcHJvc3JjID0+ICdqc29uYl9hcnJh eV9lbGVtZW50X3RleHQnIH0sCit7IG9pZCA9PiAnNDU0OScsIGRlc2NyID0+ICdjYXN0IGFuIGFy cmF5IGVsZW1lbnQgdG8gZ2l2ZW4gdHlwZScsCisgIHByb25hbWUgPT4gJ2pzb25iX2FycmF5X2Vs ZW1lbnRfdHlwZScsIHByb3JldHR5cGUgPT4gJ2FueWVsZW1lbnQnLAorICBwcm9hcmd0eXBlcyA9 PiAnanNvbmIgaW50NCBhbnllbGVtZW50JywgcHJvYXJnbmFtZXMgPT4gJ3tmcm9tX2pzb24sIGVs ZW1lbnRfaW5kZXgsIGRlc2lyZWRfdHlwZX0nLAorICBwcm9zcmMgPT4gJ2pzb25iX2FycmF5X2Vs ZW1lbnRfdHlwZScgfSwKIHsgb2lkID0+ICczMjE3JywgZGVzY3IgPT4gJ2dldCB2YWx1ZSBmcm9t IGpzb25iIHdpdGggcGF0aCBlbGVtZW50cycsCiAgIHByb25hbWUgPT4gJ2pzb25iX2V4dHJhY3Rf cGF0aCcsIHByb3ZhcmlhZGljID0+ICd0ZXh0JywgcHJvcmV0dHlwZSA9PiAnanNvbmInLAogICBw cm9hcmd0eXBlcyA9PiAnanNvbmIgX3RleHQnLCBwcm9hbGxhcmd0eXBlcyA9PiAne2pzb25iLF90 ZXh0fScsCkBAIC05OTQ3LDYgKzk5NTksMTIgQEAKICAgcHJvYWxsYXJndHlwZXMgPT4gJ3tqc29u YixfdGV4dH0nLCBwcm9hcmdtb2RlcyA9PiAne2ksdn0nLAogICBwcm9hcmduYW1lcyA9PiAne2Zy b21fanNvbixwYXRoX2VsZW1zfScsCiAgIHByb3NyYyA9PiAnanNvbmJfZXh0cmFjdF9wYXRoX3Rl eHQnIH0sCit7IG9pZCA9PiAnNDU1MScsIGRlc2NyID0+ICdjYXN0IHZhbHVlIGZyb20ganNvbmIg YXMgdGV4dCB3aXRoIHBhdGggZWxlbWVudHMgdG8gZ2l2ZW4gdHlwZScsCisgIHByb25hbWUgPT4g J2pzb25iX2V4dHJhY3RfcGF0aF90eXBlJywgcHJvdmFyaWFkaWMgPT4gJ3RleHQnLAorICBwcm9y ZXR0eXBlID0+ICdhbnllbGVtZW50JywgcHJvYXJndHlwZXMgPT4gJ2pzb25iIF90ZXh0IGFueWVs ZW1lbnQnLAorICBwcm9hbGxhcmd0eXBlcyA9PiAne2pzb25iLF90ZXh0LGFueWVsZW1lbnR9Jywg cHJvYXJnbW9kZXMgPT4gJ3tpLHYsaX0nLAorICBwcm9hcmduYW1lcyA9PiAne2Zyb21fanNvbixw YXRoX2VsZW1zLHRhcmdldF9vaWR9JywKKyAgcHJvc3JjID0+ICdqc29uYl9leHRyYWN0X3BhdGhf dHlwZScgfSwKIHsgb2lkID0+ICczMjE5JywgZGVzY3IgPT4gJ2VsZW1lbnRzIG9mIGEganNvbmIg YXJyYXknLAogICBwcm9uYW1lID0+ICdqc29uYl9hcnJheV9lbGVtZW50cycsIHByb3Jvd3MgPT4g JzEwMCcsIHByb3JldHNldCA9PiAndCcsCiAgIHByb3JldHR5cGUgPT4gJ2pzb25iJywgcHJvYXJn dHlwZXMgPT4gJ2pzb25iJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5j cy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKaW5kZXggMzE4MDcwMzAwNTUuLmNm YmU1YjI2MTk2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaAorKysg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaApAQCAtNTgsNiArNTgsOCBAQCBleHRlcm4g Q29uc3QgKm1ha2VDb25zdChPaWQgY29uc3R0eXBlLAogCiBleHRlcm4gQ29uc3QgKm1ha2VOdWxs Q29uc3QoT2lkIGNvbnN0dHlwZSwgaW50MzIgY29uc3R0eXBtb2QsIE9pZCBjb25zdGNvbGxpZCk7 CiAKK2V4dGVybiBDb25zdCAqbWFrZUR1bW15Q29uc3QoT2lkIGNvbnN0dHlwZSwgaW50MzIgY29u c3R0eXBtb2QsIE9pZCBjb25zdGNvbGxpZCk7CisKIGV4dGVybiBOb2RlICptYWtlQm9vbENvbnN0 KGJvb2wgdmFsdWUsIGJvb2wgaXNudWxsKTsKIAogZXh0ZXJuIEV4cHIgKm1ha2VCb29sRXhwcihC b29sRXhwclR5cGUgYm9vbG9wLCBMaXN0ICphcmdzLCBpbnQgbG9jYXRpb24pOwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbmIuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25iLmgK aW5kZXggNjQ5YTE2NDRmMjQuLjUzMjIyNTMxNGE5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91 dGlscy9qc29uYi5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25iLmgKQEAgLTQzNSw1ICs0 MzUsNiBAQCBleHRlcm4gRGF0dW0ganNvbmJfYnVpbGRfb2JqZWN0X3dvcmtlcihpbnQgbmFyZ3Ms IERhdHVtICphcmdzLCBib29sICpudWxscywKIAkJCQkJCQkJCSAgIGJvb2wgdW5pcXVlX2tleXMp OwogZXh0ZXJuIERhdHVtIGpzb25iX2J1aWxkX2FycmF5X3dvcmtlcihpbnQgbmFyZ3MsIERhdHVt ICphcmdzLCBib29sICpudWxscywKIAkJCQkJCQkJCSAgT2lkICp0eXBlcywgYm9vbCBhYnNlbnRf b25fbnVsbCk7CitleHRlcm4gRGF0dW0gY2FzdF9qc29uYnZhbHVlX3RvX3R5cGUoSnNvbmJWYWx1 ZSAqdiwgT2lkIHRhcmdldF9vaWQpOwogCiAjZW5kaWYJCQkJCQkJLyogX19KU09OQl9IX18gKi8K ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmIub3V0IGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9qc29uYi5vdXQKaW5kZXggNGExNmQwZGJhZmIuLjljZWFlMDU5 NTYwIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iLm91dAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iLm91dApAQCAtNDU3LDYgKzQ1Nyw3IEBA IENSRUFURSBURU1QIFRBQkxFIHRlc3RfanNvbmIgKAogKTsKIElOU0VSVCBJTlRPIHRlc3RfanNv bmIgVkFMVUVTCiAoJ3NjYWxhcicsJyJhIHNjYWxhciInKSwKKygnc2NhbGFyaW50JywnMicpLAog KCdhcnJheScsJ1siemVybyIsICJvbmUiLCJ0d28iLG51bGwsImZvdXIiLCJmaXZlIiwgWzEsMiwz XSx7ImYxIjo5fV0nKSwKICgnb2JqZWN0JywneyJmaWVsZDEiOiJ2YWwxIiwiZmllbGQyIjoidmFs MiIsImZpZWxkMyI6bnVsbCwgImZpZWxkNCI6IDQsICJmaWVsZDUiOiBbMSwyLDNdLCAiZmllbGQ2 IjogeyJmMSI6OX19Jyk7CiBTRUxFQ1QgdGVzdF9qc29uIC0+ICd4JyBGUk9NIHRlc3RfanNvbmIg V0hFUkUganNvbl90eXBlID0gJ3NjYWxhcic7CkBAIC01MDEsMTAgKzUwMiwyNSBAQCBTRUxFQ1Qg dGVzdF9qc29uIC0+PiAnZmllbGQyJyBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0g J29iamVjdCc7CiAgdmFsMgogKDEgcm93KQogCi1TRUxFQ1QgdGVzdF9qc29uIC0+IDIgRlJPTSB0 ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdzY2FsYXInOworU0VMRUNUIHRlc3RfanNvbiAt PiAyLCB0ZXN0X2pzb24gLT4gMCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ3Nj YWxhcic7CisgP2NvbHVtbj8gfCAgP2NvbHVtbj8gIAorLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0K KyAgICAgICAgICB8ICJhIHNjYWxhciIKKygxIHJvdykKKworZXhwbGFpbiAodmVyYm9zZSwgY29z dHMgb2ZmKQorU0VMRUNUICh0ZXN0X2pzb24gLT4gMCk6OmludDQsIHRlc3RfanNvbiAtPiAwIEZS T00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnc2NhbGFyaW50JzsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHBnX3RlbXAudGVzdF9qc29uYgorICAg T3V0cHV0OiBqc29uYl9hcnJheV9lbGVtZW50X3R5cGUodGVzdF9qc29uLCAwLCAwKSwgKHRlc3Rf anNvbiAtPiAwKQorICAgRmlsdGVyOiAodGVzdF9qc29uYi5qc29uX3R5cGUgPSAnc2NhbGFyaW50 Jzo6dGV4dCkKKygzIHJvd3MpCisKK1NFTEVDVCB0ZXN0X2pzb24gLT4gMCBGUk9NIHRlc3RfanNv bmIgV0hFUkUganNvbl90eXBlID0gJ3NjYWxhcmludCc7CiAgP2NvbHVtbj8gCiAtLS0tLS0tLS0t Ci0gCisgMgogKDEgcm93KQogCiBTRUxFQ1QgdGVzdF9qc29uIC0+IDIgRlJPTSB0ZXN0X2pzb25i IFdIRVJFIGpzb25fdHlwZSA9ICdhcnJheSc7CkBAIC0xNzg2LDYgKzE4MDIsMTIgQEAgc2VsZWN0 ICd7ImEiOiB7ImIiOnsiYyI6ICJmb28ifX19Jzo6anNvbmIgIz4gJ3t9JzsKICB7ImEiOiB7ImIi OiB7ImMiOiAiZm9vIn19fQogKDEgcm93KQogCitzZWxlY3QgKCcyJzo6anNvbmIgIz4gJ3t9Jyk6 OmludDIsICgneyJhIjoyfSc6Ompzb25iICM+ICd7ImIifScpLCAoJ3siYSI6Mn0nOjpqc29uYiAj PiAneyJiIn0nKTo6aW50MjsKKyBpbnQyIHwgP2NvbHVtbj8gfCBpbnQyIAorLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tCisgICAgMiB8ICAgICAgICAgIHwgICAgIAorKDEgcm93KQorCiBzZWxlY3Qg J1sxLDIsM10nOjpqc29uYiAjPiAne30nOwogID9jb2x1bW4/ICAKIC0tLS0tLS0tLS0tCkBAIC01 NDcxLDEwNyArNTQ5MywxMTMgQEAgc2VsZWN0IHRzX2hlYWRsaW5lKCdbXSc6Ompzb25iLCB0c3F1 ZXJ5KCdhYWEgJiBiYmInKSk7CiAoMSByb3cpCiAKIC0tIGNhc3RzCi1zZWxlY3QgJ3RydWUnOjpq c29uYjo6Ym9vbDsKLSBib29sIAotLS0tLS0tCi0gdAorc2VsZWN0ICd0cnVlJzo6anNvbmI6OmJv b2wsICgneyJhIjogdHJ1ZX0nOjpqc29uYi0+J2EnKTo6Ym9vbDsKKyBib29sIHwgYm9vbCAKKy0t LS0tLSstLS0tLS0KKyB0ICAgIHwgdAogKDEgcm93KQogCiBzZWxlY3QgJ1tdJzo6anNvbmI6OmJv b2w7CiBFUlJPUjogIGNhbm5vdCBjYXN0IGpzb25iIGFycmF5IHRvIHR5cGUgYm9vbGVhbgotc2Vs ZWN0ICcxLjAnOjpqc29uYjo6ZmxvYXQ7Ci0gZmxvYXQ4IAotLS0tLS0tLS0KLSAgICAgIDEKK3Nl bGVjdCAoJ3siYSI6IFtdfSc6Ompzb25iLT4nYScpOjpib29sOworRVJST1I6ICBjYW5ub3QgY2Fz dCBqc29uYiBhcnJheSB0byB0eXBlIGJvb2xlYW4KK3NlbGVjdCAnMS4wJzo6anNvbmI6OmZsb2F0 LCAoJ3siYSI6IDEuMH0nOjpqc29uYi0+J2EnKTo6ZmxvYXQ7CisgZmxvYXQ4IHwgZmxvYXQ4IAor LS0tLS0tLS0rLS0tLS0tLS0KKyAgICAgIDEgfCAgICAgIDEKICgxIHJvdykKIAogc2VsZWN0ICdb MS4wXSc6Ompzb25iOjpmbG9hdDsKIEVSUk9SOiAgY2Fubm90IGNhc3QganNvbmIgYXJyYXkgdG8g dHlwZSBkb3VibGUgcHJlY2lzaW9uCi1zZWxlY3QgJzEyMzQ1Jzo6anNvbmI6OmludDQ7Ci0gaW50 NCAgCi0tLS0tLS0tCi0gMTIzNDUKK3NlbGVjdCAoJ3siYSI6IFsxLjBdfSc6Ompzb25iLT4nYScp OjpmbG9hdDsKK0VSUk9SOiAgY2Fubm90IGNhc3QganNvbmIgYXJyYXkgdG8gdHlwZSBkb3VibGUg cHJlY2lzaW9uCitzZWxlY3QgJzEyMzQ1Jzo6anNvbmI6OmludDQsICAoJ3siYSI6IDEyMzQ1fSc6 Ompzb25iLT4nYScpOjppbnQ0OworIGludDQgIHwgaW50NCAgCistLS0tLS0tKy0tLS0tLS0KKyAx MjM0NSB8IDEyMzQ1CiAoMSByb3cpCiAKIHNlbGVjdCAnImhlbGxvIic6Ompzb25iOjppbnQ0Owog RVJST1I6ICBjYW5ub3QgY2FzdCBqc29uYiBzdHJpbmcgdG8gdHlwZSBpbnRlZ2VyCi1zZWxlY3Qg JzEyMzQ1Jzo6anNvbmI6Om51bWVyaWM7Ci0gbnVtZXJpYyAKLS0tLS0tLS0tLQotICAgMTIzNDUK K3NlbGVjdCAoJ3siYSI6ICJoZWxsbyJ9Jzo6anNvbmItPidhJyk6OmludDQ7CitFUlJPUjogIGNh bm5vdCBjYXN0IGpzb25iIHN0cmluZyB0byB0eXBlIGludGVnZXIKK3NlbGVjdCAnMTIzNDUnOjpq c29uYjo6bnVtZXJpYywgKCd7ImEiOiAxMjM0NX0nOjpqc29uYi0+J2EnKTo6bnVtZXJpYzsKKyBu dW1lcmljIHwgbnVtZXJpYyAKKy0tLS0tLS0tLSstLS0tLS0tLS0KKyAgIDEyMzQ1IHwgICAxMjM0 NQogKDEgcm93KQogCiBzZWxlY3QgJ3t9Jzo6anNvbmI6Om51bWVyaWM7CiBFUlJPUjogIGNhbm5v dCBjYXN0IGpzb25iIG9iamVjdCB0byB0eXBlIG51bWVyaWMKLXNlbGVjdCAnMTIzNDUuMDUnOjpq c29uYjo6bnVtZXJpYzsKLSBudW1lcmljICAKLS0tLS0tLS0tLS0KLSAxMjM0NS4wNQorc2VsZWN0 ICcxMjM0NS4wNSc6Ompzb25iOjpudW1lcmljLCAoJ3siYSI6IDEyMzQ1LjA1fSc6Ompzb25iLT4n YScpOjpudW1lcmljOworIG51bWVyaWMgIHwgbnVtZXJpYyAgCistLS0tLS0tLS0tKy0tLS0tLS0t LS0KKyAxMjM0NS4wNSB8IDEyMzQ1LjA1CiAoMSByb3cpCiAKLXNlbGVjdCAnMTIzNDUuMDUnOjpq c29uYjo6ZmxvYXQ0OwotICBmbG9hdDQgIAotLS0tLS0tLS0tLQotIDEyMzQ1LjA1CitzZWxlY3Qg JzEyMzQ1LjA1Jzo6anNvbmI6OmZsb2F0NCwgKCd7ImEiOiAxMjM0NS4wNX0nOjpqc29uYi0+J2En KTo6ZmxvYXQ0OworICBmbG9hdDQgIHwgIGZsb2F0NCAgCistLS0tLS0tLS0tKy0tLS0tLS0tLS0K KyAxMjM0NS4wNSB8IDEyMzQ1LjA1CiAoMSByb3cpCiAKLXNlbGVjdCAnMTIzNDUuMDUnOjpqc29u Yjo6ZmxvYXQ4OwotICBmbG9hdDggIAotLS0tLS0tLS0tLQotIDEyMzQ1LjA1CitzZWxlY3QgJzEy MzQ1LjA1Jzo6anNvbmI6OmZsb2F0OCwgKCd7ImEiOiAxMjM0NS4wNX0nOjpqc29uYi0+J2EnKTo6 ZmxvYXQ4OworICBmbG9hdDggIHwgIGZsb2F0OCAgCistLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyAx MjM0NS4wNSB8IDEyMzQ1LjA1CiAoMSByb3cpCiAKLXNlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6 aW50MjsKLSBpbnQyICAKLS0tLS0tLS0KLSAxMjM0NQorc2VsZWN0ICcxMjM0NS4wNSc6Ompzb25i OjppbnQyLCAoJ3siYSI6IDEyMzQ1LjA1fSc6Ompzb25iLT4nYScpOjppbnQyOworIGludDIgIHwg aW50MiAgCistLS0tLS0tKy0tLS0tLS0KKyAxMjM0NSB8IDEyMzQ1CiAoMSByb3cpCiAKLXNlbGVj dCAnMTIzNDUuMDUnOjpqc29uYjo6aW50NDsKLSBpbnQ0ICAKLS0tLS0tLS0KLSAxMjM0NQorc2Vs ZWN0ICcxMjM0NS4wNSc6Ompzb25iOjppbnQ0LCAoJ3siYSI6IDEyMzQ1LjA1fSc6Ompzb25iLT4n YScpOjppbnQ0OworIGludDQgIHwgaW50NCAgCistLS0tLS0tKy0tLS0tLS0KKyAxMjM0NSB8IDEy MzQ1CiAoMSByb3cpCiAKLXNlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6aW50ODsKLSBpbnQ4ICAK LS0tLS0tLS0KLSAxMjM0NQorc2VsZWN0ICcxMjM0NS4wNSc6Ompzb25iOjppbnQ4LCAoJ3siYSI6 IDEyMzQ1LjA1fSc6Ompzb25iLT4nYScpOjppbnQ4OworIGludDggIHwgaW50OCAgCistLS0tLS0t Ky0tLS0tLS0KKyAxMjM0NSB8IDEyMzQ1CiAoMSByb3cpCiAKLXNlbGVjdCAnMTIzNDUuMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSc6Ompzb25iOjpudW1lcmlj OwotICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljICAgICAgICAgICAgICAgICAgICAgICAg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K LSAxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Citz ZWxlY3QgJzEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDUnOjpqc29uYjo6bnVtZXJpYywgKCd7ImEiOiAxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1fSc6Ompzb25iLT4nYScpOjpudW1lcmljOworICAgICAg ICAgICAgICAgICAgICAgICBudW1lcmljICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAg ICAgICAgICAgICAgICAgbnVtZXJpYyAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEyMzQ1LjAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgfCAxMjM0NS4wMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1CiAoMSByb3cpCiAKLXNlbGVj dCAnMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSc6 Ompzb25iOjpmbG9hdDQ7Ci0gZmxvYXQ0IAotLS0tLS0tLS0KLSAgMTIzNDUKK3NlbGVjdCAnMTIz NDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSc6Ompzb25i OjpmbG9hdDQsICAoJ3siYSI6IDEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDV9Jzo6anNvbmItPidhJyk6OmZsb2F0NDsKKyBmbG9hdDQgfCBmbG9hdDQg CistLS0tLS0tLSstLS0tLS0tLQorICAxMjM0NSB8ICAxMjM0NQogKDEgcm93KQogCi1zZWxlY3Qg JzEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUnOjpq c29uYjo6ZmxvYXQ4OwotIGZsb2F0OCAKLS0tLS0tLS0tCi0gIDEyMzQ1CitzZWxlY3QgJzEyMzQ1 LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUnOjpqc29uYjo6 ZmxvYXQ4LCAoJ3siYSI6IDEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDV9Jzo6anNvbmItPidhJyk6OmZsb2F0ODsKKyBmbG9hdDggfCBmbG9hdDggCist LS0tLS0tLSstLS0tLS0tLQorICAxMjM0NSB8ICAxMjM0NQogKDEgcm93KQogCi1zZWxlY3QgJzEy MzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUnOjpqc29u Yjo6aW50MjsKLSBpbnQyICAKLS0tLS0tLS0KLSAxMjM0NQorc2VsZWN0ICcxMjM0NS4wMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Jzo6anNvbmI6OmludDIsICgn eyJhIjogMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw NX0nOjpqc29uYi0+J2EnKTo6aW50MjsKKyBpbnQyICB8IGludDIgIAorLS0tLS0tLSstLS0tLS0t CisgMTIzNDUgfCAxMjM0NQogKDEgcm93KQogCi1zZWxlY3QgJzEyMzQ1LjAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUnOjpqc29uYjo6aW50NDsKLSBpbnQ0ICAK LS0tLS0tLS0KLSAxMjM0NQorc2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDA1Jzo6anNvbmI6OmludDQsICgneyJhIjogMTIzNDUuMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNX0nOjpqc29uYi0+J2EnKTo6 aW50NDsKKyBpbnQ0ICB8IGludDQgIAorLS0tLS0tLSstLS0tLS0tCisgMTIzNDUgfCAxMjM0NQog KDEgcm93KQogCi1zZWxlY3QgJzEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDUnOjpqc29uYjo6aW50ODsKLSBpbnQ4ICAKLS0tLS0tLS0KLSAxMjM0NQor c2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDA1Jzo6anNvbmI6OmludDgsICgneyJhIjogMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwNX0nOjpqc29uYi0+J2EnKTo6aW50ODsKKyBpbnQ4ICB8IGlu dDggIAorLS0tLS0tLSstLS0tLS0tCisgMTIzNDUgfCAxMjM0NQogKDEgcm93KQogCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9qc29uYi5zcWwKaW5kZXggZTRiN2NkZjcwM2QuLjVmZWNlOTg3YmYwIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv anNvbmIuc3FsCkBAIC0xNTQsNiArMTU0LDcgQEAgQ1JFQVRFIFRFTVAgVEFCTEUgdGVzdF9qc29u YiAoCiAKIElOU0VSVCBJTlRPIHRlc3RfanNvbmIgVkFMVUVTCiAoJ3NjYWxhcicsJyJhIHNjYWxh ciInKSwKKygnc2NhbGFyaW50JywnMicpLAogKCdhcnJheScsJ1siemVybyIsICJvbmUiLCJ0d28i LG51bGwsImZvdXIiLCJmaXZlIiwgWzEsMiwzXSx7ImYxIjo5fV0nKSwKICgnb2JqZWN0JywneyJm aWVsZDEiOiJ2YWwxIiwiZmllbGQyIjoidmFsMiIsImZpZWxkMyI6bnVsbCwgImZpZWxkNCI6IDQs ICJmaWVsZDUiOiBbMSwyLDNdLCAiZmllbGQ2IjogeyJmMSI6OX19Jyk7CiAKQEAgLTE2Niw3ICsx NjcsMTAgQEAgU0VMRUNUIHRlc3RfanNvbiAtPj4gJ2ZpZWxkMicgRlJPTSB0ZXN0X2pzb25iIFdI RVJFIGpzb25fdHlwZSA9ICdzY2FsYXInOwogU0VMRUNUIHRlc3RfanNvbiAtPj4gJ2ZpZWxkMicg RlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdhcnJheSc7CiBTRUxFQ1QgdGVzdF9q c29uIC0+PiAnZmllbGQyJyBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVj dCc7CiAKLVNFTEVDVCB0ZXN0X2pzb24gLT4gMiBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90 eXBlID0gJ3NjYWxhcic7CitTRUxFQ1QgdGVzdF9qc29uIC0+IDIsIHRlc3RfanNvbiAtPiAwIEZS T00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnc2NhbGFyJzsKK2V4cGxhaW4gKHZlcmJv c2UsIGNvc3RzIG9mZikKK1NFTEVDVCAodGVzdF9qc29uIC0+IDApOjppbnQ0LCB0ZXN0X2pzb24g LT4gMCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ3NjYWxhcmludCc7CitTRUxF Q1QgdGVzdF9qc29uIC0+IDAgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdzY2Fs YXJpbnQnOwogU0VMRUNUIHRlc3RfanNvbiAtPiAyIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29u X3R5cGUgPSAnYXJyYXknOwogU0VMRUNUIHRlc3RfanNvbiAtPiA5IEZST00gdGVzdF9qc29uYiBX SEVSRSBqc29uX3R5cGUgPSAnYXJyYXknOwogU0VMRUNUIHRlc3RfanNvbiAtPiAyIEZST00gdGVz dF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKQEAgLTQ5MSw2ICs0OTUsNyBAQCBT RUxFQ1QgJ3siZjIiOlsiZjMiLDFdLCJmNCI6eyJmNSI6OTksImY2Ijoic3RyaW5neSJ9fSc6Ompz b25iIz4+YXJyYXlbJ2YyJywnMSddOwogCiAtLSBjb3JuZXIgY2FzZXMgZm9yIHNhbWUKIHNlbGVj dCAneyJhIjogeyJiIjp7ImMiOiAiZm9vIn19fSc6Ompzb25iICM+ICd7fSc7CitzZWxlY3QgKCcy Jzo6anNvbmIgIz4gJ3t9Jyk6OmludDIsICgneyJhIjoyfSc6Ompzb25iICM+ICd7ImIifScpLCAo J3siYSI6Mn0nOjpqc29uYiAjPiAneyJiIn0nKTo6aW50MjsKIHNlbGVjdCAnWzEsMiwzXSc6Ompz b25iICM+ICd7fSc7CiBzZWxlY3QgJyJmb28iJzo6anNvbmIgIz4gJ3t9JzsKIHNlbGVjdCAnNDIn Ojpqc29uYiAjPiAne30nOwpAQCAtMTQ5NiwyMyArMTUwMSwyNyBAQCBzZWxlY3QgdHNfaGVhZGxp bmUoJ3t9Jzo6anNvbmIsIHRzcXVlcnkoJ2FhYSAmIGJiYicpKTsKIHNlbGVjdCB0c19oZWFkbGlu ZSgnW10nOjpqc29uYiwgdHNxdWVyeSgnYWFhICYgYmJiJykpOwogCiAtLSBjYXN0cwotc2VsZWN0 ICd0cnVlJzo6anNvbmI6OmJvb2w7CitzZWxlY3QgJ3RydWUnOjpqc29uYjo6Ym9vbCwgKCd7ImEi OiB0cnVlfSc6Ompzb25iLT4nYScpOjpib29sOwogc2VsZWN0ICdbXSc6Ompzb25iOjpib29sOwot c2VsZWN0ICcxLjAnOjpqc29uYjo6ZmxvYXQ7CitzZWxlY3QgKCd7ImEiOiBbXX0nOjpqc29uYi0+ J2EnKTo6Ym9vbDsKK3NlbGVjdCAnMS4wJzo6anNvbmI6OmZsb2F0LCAoJ3siYSI6IDEuMH0nOjpq c29uYi0+J2EnKTo6ZmxvYXQ7CiBzZWxlY3QgJ1sxLjBdJzo6anNvbmI6OmZsb2F0Owotc2VsZWN0 ICcxMjM0NSc6Ompzb25iOjppbnQ0Oworc2VsZWN0ICgneyJhIjogWzEuMF19Jzo6anNvbmItPidh Jyk6OmZsb2F0Oworc2VsZWN0ICcxMjM0NSc6Ompzb25iOjppbnQ0LCAgKCd7ImEiOiAxMjM0NX0n Ojpqc29uYi0+J2EnKTo6aW50NDsKIHNlbGVjdCAnImhlbGxvIic6Ompzb25iOjppbnQ0Owotc2Vs ZWN0ICcxMjM0NSc6Ompzb25iOjpudW1lcmljOworc2VsZWN0ICgneyJhIjogImhlbGxvIn0nOjpq c29uYi0+J2EnKTo6aW50NDsKKworc2VsZWN0ICcxMjM0NSc6Ompzb25iOjpudW1lcmljLCAoJ3si YSI6IDEyMzQ1fSc6Ompzb25iLT4nYScpOjpudW1lcmljOwogc2VsZWN0ICd7fSc6Ompzb25iOjpu dW1lcmljOwotc2VsZWN0ICcxMjM0NS4wNSc6Ompzb25iOjpudW1lcmljOwotc2VsZWN0ICcxMjM0 NS4wNSc6Ompzb25iOjpmbG9hdDQ7Ci1zZWxlY3QgJzEyMzQ1LjA1Jzo6anNvbmI6OmZsb2F0ODsK LXNlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6aW50MjsKLXNlbGVjdCAnMTIzNDUuMDUnOjpqc29u Yjo6aW50NDsKLXNlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6aW50ODsKLXNlbGVjdCAnMTIzNDUu MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSc6Ompzb25iOjpu dW1lcmljOwotc2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDA1Jzo6anNvbmI6OmZsb2F0NDsKLXNlbGVjdCAnMTIzNDUuMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSc6Ompzb25iOjpmbG9hdDg7Ci1zZWxl Y3QgJzEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUn Ojpqc29uYjo6aW50MjsKLXNlbGVjdCAnMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwNSc6Ompzb25iOjppbnQ0Owotc2VsZWN0ICcxMjM0NS4wMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Jzo6anNvbmI6OmludDg7Citz ZWxlY3QgJzEyMzQ1LjA1Jzo6anNvbmI6Om51bWVyaWMsICgneyJhIjogMTIzNDUuMDV9Jzo6anNv bmItPidhJyk6Om51bWVyaWM7CitzZWxlY3QgJzEyMzQ1LjA1Jzo6anNvbmI6OmZsb2F0NCwgKCd7 ImEiOiAxMjM0NS4wNX0nOjpqc29uYi0+J2EnKTo6ZmxvYXQ0Oworc2VsZWN0ICcxMjM0NS4wNSc6 Ompzb25iOjpmbG9hdDgsICgneyJhIjogMTIzNDUuMDV9Jzo6anNvbmItPidhJyk6OmZsb2F0ODsK K3NlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6aW50MiwgKCd7ImEiOiAxMjM0NS4wNX0nOjpqc29u Yi0+J2EnKTo6aW50MjsKK3NlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6aW50NCwgKCd7ImEiOiAx MjM0NS4wNX0nOjpqc29uYi0+J2EnKTo6aW50NDsKK3NlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6 aW50OCwgKCd7ImEiOiAxMjM0NS4wNX0nOjpqc29uYi0+J2EnKTo6aW50ODsKK3NlbGVjdCAnMTIz NDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSc6Ompzb25i OjpudW1lcmljLCAoJ3siYSI6IDEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDV9Jzo6anNvbmItPidhJyk6Om51bWVyaWM7CitzZWxlY3QgJzEyMzQ1LjAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUnOjpqc29uYjo6Zmxv YXQ0LCAgKCd7ImEiOiAxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDA1fSc6Ompzb25iLT4nYScpOjpmbG9hdDQ7CitzZWxlY3QgJzEyMzQ1LjAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUnOjpqc29uYjo6ZmxvYXQ4LCAo J3siYSI6IDEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDV9Jzo6anNvbmItPidhJyk6OmZsb2F0ODsKK3NlbGVjdCAnMTIzNDUuMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSc6Ompzb25iOjppbnQyLCAoJ3siYSI6IDEy MzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDV9Jzo6anNv bmItPidhJyk6OmludDI7CitzZWxlY3QgJzEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDUnOjpqc29uYjo6aW50NCwgKCd7ImEiOiAxMjM0NS4wMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1fSc6Ompzb25iLT4nYScpOjpp bnQ0Oworc2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDA1Jzo6anNvbmI6OmludDgsICgneyJhIjogMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNX0nOjpqc29uYi0+J2EnKTo6aW50ODsKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3htbG1hcC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC94bWxtYXAuc3FsCmluZGV4IDE2NTgyYmY2YWJkLi4zY2Q0Y2I1NjBlYiAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwveG1sbWFwLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC94bWxtYXAuc3FsCkBAIC00MSwxMiArNDEsMTMgQEAgTU9WRSBCQUNLV0FSRCBBTEwgSU4g eGM7CiBTRUxFQ1QgY3Vyc29yX3RvX3htbCgneGMnOjpyZWZjdXJzb3IsIDUsIHRydWUsIGZhbHNl LCAnJyk7CiBTRUxFQ1QgY3Vyc29yX3RvX3htbHNjaGVtYSgneGMnOjpyZWZjdXJzb3IsIHRydWUs IGZhbHNlLCAnJyk7CiAKK3NldCBlbmFibGVfc2Vxc2NhbiB0byBvZmY7CiBTRUxFQ1Qgc2NoZW1h X3RvX3htbCgndGVzdHhtbHNjaGVtYScsIGZhbHNlLCB0cnVlLCAnJyk7CiBTRUxFQ1Qgc2NoZW1h X3RvX3htbCgndGVzdHhtbHNjaGVtYScsIHRydWUsIGZhbHNlLCAnJyk7CiBTRUxFQ1Qgc2NoZW1h X3RvX3htbHNjaGVtYSgndGVzdHhtbHNjaGVtYScsIGZhbHNlLCB0cnVlLCAnJyk7CiBTRUxFQ1Qg c2NoZW1hX3RvX3htbHNjaGVtYSgndGVzdHhtbHNjaGVtYScsIHRydWUsIGZhbHNlLCAnJyk7CiBT RUxFQ1Qgc2NoZW1hX3RvX3htbF9hbmRfeG1sc2NoZW1hKCd0ZXN0eG1sc2NoZW1hJywgdHJ1ZSwg dHJ1ZSwgJ2ZvbycpOwotCityZXNldCBlbmFibGVfc2Vxc2NhbjsKIAogLS0gdGVzdCB0aGF0IGRv bWFpbnMgYXJlIHRyYW5zZm9ybWVkIGxpa2UgdGhlaXIgYmFzZSB0eXBlcwogCi0tIAoyLjIxLjAK Cg== --0000000000001c70d20603042eff Content-Type: application/octet-stream; name="test.sql" Content-Disposition: attachment; filename="test.sql" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lldbwy541 Y3JlYXRlIHRhYmxlIHRiMiAoaWQgaW50LCBhIGpzb25iKTsKaW5zZXJ0IGludG8gdGIyIHZhbHVl cyAoMSwgJ3siYSI6IDEsICJiIjogdHJ1ZSwgImMiOiB7ImQiOiAyfX0nOjpqc29uYiksICgyLCAn WzEsIDIsIDNdJzo6anNvbmIpLCAoMywgJzEnOjpqc29uYik7CgpccHNldCBudWxsIDxudWxsPgoK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tIGpzb25iX29iamVj dF9maWVsZCAgLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKCmV4cGxhaW4gdmVyYm9zZSBzZWxlY3QgKGEtPidhJyk6Om51bWVyaWMs IChhLT4nYScpOjppbnQyLCAoYS0+J2EnKTo6aW50NCwgKGEtPidhJyk6OmludDgsIChhLT4nYScp OjpmbG9hdDQsIChhLT4nYScpOjpmbG9hdDgsIChhLT4nYicpOjpib29sLCAoYS0+J25vdGV4aXN0 cycpOjppbnQyIGZyb20gdGIyIHdoZXJlIGlkID0gMTsKc2VsZWN0IChhLT4nYScpOjpudW1lcmlj LCAoYS0+J2EnKTo6aW50MiwgKGEtPidhJyk6OmludDQsIChhLT4nYScpOjppbnQ4LCAoYS0+J2En KTo6ZmxvYXQ0LCAoYS0+J2EnKTo6ZmxvYXQ4LCAoYS0+J2InKTo6Ym9vbCwgKGEtPidub3RleGlz dHMnKTo6aW50MiBmcm9tIHRiMiB3aGVyZSBpZCA9IDE7CgpzZWxlY3QgKGEtPidhJyk6OmJvb2wg ZnJvbSB0YjIgd2hlcmUgaWQgPSAxOwoKc2VsZWN0IChhLT4nYicpOjppbnQyIGZyb20gdGIyIHdo ZXJlIGlkID0gMTsKCnNlbGVjdCAoYS0+J2MnKTo6bnVtZXJpYyBmcm9tIHRiMiB3aGVyZSBpZCA9 IDE7CgpzZWxlY3QgKGEtPidhJyk6Om51bWVyaWMsIChhLT4nYScpOjppbnQyLCAoYS0+J2EnKTo6 aW50NCwgKGEtPidhJyk6OmludDgsIChhLT4nYScpOjpmbG9hdDQsIChhLT4nYScpOjpmbG9hdDgs IChhLT4nYicpOjpib29sLCAoYS0+J25vdGV4aXN0cycpOjppbnQyIGZyb20gdGIyIHdoZXJlIGlk ID0gMjsKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLSBqc29u Yl9leHRyYWN0X3BhdGggLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCgotLSBhbGwgdGhlIG5vcm1hbCBjYXNlcyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKc2VsZWN0IChhICM+ICd7ImEifScpOjpudW1lcmljLCAgKGEgIz4gJ3siYSIsICJi In0nKTo6bnVtZXJpYywgIChhICM+ICd7ImMiLCAiZCJ9Jyk6Om51bWVyaWMgZnJvbSB0YjI7Cgot LSBmaWVsZCBkb2Vzbid0IGV4aXN0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKc2VsZWN0IChhICM+ICd7 ImEiLCAiYiJ9Jyk6Om51bWVyaWMgZnJvbSB0YjI7CnNlbGVjdCAoYSAjPiAneyJub3RleGlzdHMi fScpOjpudW1lcmljIGZyb20gdGIyOwoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCi0tIGpzb25iX2FycmF5X2VsZW1lbnQtLS0tLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCmV4cGxhaW4gdmVyYm9zZSBz ZWxlY3QgYSwgIChhLT4wKSBhcyBpZHgwLCAoYS0+MCk6Om51bWVyaWMgZnJvbSB0YjI7CgpzZWxl Y3QgYSwgIChhLT4wKSBhcyBpZHgwLCAoYS0+MCk6Om51bWVyaWMgZnJvbSB0YjI7CgotLSBvdXQg b2YgcmFuZ2UgY2FzZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKc2VsZWN0IGEsIGEtPjEsIChhLT4x KTo6bnVtZXJpYyBmcm9tIHRiMjsK --0000000000001c70d20603042eff--