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 1vJVWW-009CpA-1k for pgsql-hackers@arkaria.postgresql.org; Thu, 13 Nov 2025 11:29:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vJVWU-000lTE-0L for pgsql-hackers@arkaria.postgresql.org; Thu, 13 Nov 2025 11:29:54 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vJVRp-000aJD-1o for pgsql-hackers@lists.postgresql.org; Thu, 13 Nov 2025 11:25:05 +0000 Received: from mail-lf1-x129.google.com ([2a00:1450:4864:20::129]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vJSl5-007VCA-1C for pgsql-hackers@postgresql.org; Thu, 13 Nov 2025 08:32:49 +0000 Received: by mail-lf1-x129.google.com with SMTP id 2adb3069b0e04-5942bac322dso474588e87.0 for ; Thu, 13 Nov 2025 00:32:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1763022764; x=1763627564; 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=LasXd5lOeGwwQtopnleG1lQAOwcF5p/PNC3Na1DJZdQ=; b=cqUDzRsl/c42fIfibm4JX8wovXOdIgRpc0KhUEEagfrdohxh1nRHxAPeqRW6f3OLK9 Bm/ZRx/CTbC3Gt4mqASQ/aUdF30QCR1b0HrTj2BRrwcah93NOIoKXKgxEv1rMGrEBkC0 0VyuY9fb9b+becO0B0eiVYdl6RpdtUyMFJOxR5wTU9c02p28tpzBZL/txtgiI3eLKcrd U+5CwQ8ZeMmkMA9mYXVEC//CoRM4psucS2pivFGS8J22VSloxyRn59I4PA4DO4fphIMR 37bhS0LPWN8uZ7NZ6Oq5mFkuzxKp/oRr7SaLYsso1OP0z3sBKyygjbsT/pIfemRDYbiG NMQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763022764; x=1763627564; 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=LasXd5lOeGwwQtopnleG1lQAOwcF5p/PNC3Na1DJZdQ=; b=duu7wTgnWwbmLxHD7tmhXY/MfagInPa9sc2sX19HGCxWne7ck4nortDbNtCHdMbuRO vWAX7hBtBrn1TmL+UHKTXiQO82g7zplR0mmveR91T+Y9FDclTGPcxfqpsMDl4r1dQsPt j7wifH1Xz1y9lO0rKYOzjQocpJ81oRAMOVk0yYmSorMG2L63zpPgMglIK0iqcGoGPj1O 48wLT/ZWYJdsD1HnIKvi4EtE0kh3f8K6aDDEhcNJJ5wZKFVsKjRZmZv3e4+iK7bR1fTT tupg6t6T9++gFaB/5hYcC7TgEsp6+UmkNoocWZZ9CnvIg7vd1vs6NM9zhRwiw4ahCzNx RtKg== X-Gm-Message-State: AOJu0YxuRhXElYPLT2jWddre7wqJ64sZGRweoLrWkZQOFoykbtlAbrIu eU6Q/Xti+ZnclOpLmEIT5xd3cPnGiGo4q/SFox7bchQ1LCHuWQztX47NIzi5G5KUk/CqUJ5M0en HwXH0P1dK0F5e5vXh0X7xURBbr8kPY91agbWHzYx4GvIYCVh2X5x+jg== X-Gm-Gg: ASbGncuSyMXXtTriahhF+7kwnkdDLPePEgYa8BwSFILtQZssu9IxvrIsGAbdOD2Zlhk JVVWRQUfB2NLMC0g5ldHTz1AA+HSfi7clZybdeOeun0x5l87fhfUcl7JiNRiSGsWv7ohqo8Jm+k NqGbFd89IP5ZMDsTrh1sn1mMQ21yHCmbPBrL0b3qqaH4bhbbgHaE1zYer6u7FR+UCUtGz+8wx/n GqsUHvx/YtkRTTyOCWLwRpFK3ndnDJ1OCV0gGqKbUikA26Au2uWq8zPCDCCI3I= X-Google-Smtp-Source: AGHT+IHgsInUcurB8Mbx+BpQo5X6F9X9/qFWj+9dFS7yVLzjY6GzVkrm5CmiAasyxOfI+EqjIl40BQQRiL0KXiS3KKo= X-Received: by 2002:a05:6512:3e1a:b0:594:3039:2d16 with SMTP id 2adb3069b0e04-59576e2ca55mr2181067e87.32.1763022764371; Thu, 13 Nov 2025 00:32:44 -0800 (PST) MIME-Version: 1.0 References: <7daf5cec-4eae-48e0-883e-684476b57531@yeah.net> In-Reply-To: <7daf5cec-4eae-48e0-883e-684476b57531@yeah.net> From: Akshay Joshi Date: Thu, 13 Nov 2025 14:02:30 +0530 X-Gm-Features: AWmQ_bljx_IGEgW0s93eoQkKnU1axFlClAhP_sLEnEFh8PcTtaPcoy6F7MAeoQo Message-ID: Subject: Re: [PATCH] Add pg_get_database_ddl() function to reconstruct CREATE DATABASE statement To: Quan Zongliang Cc: pgsql-hackers Content-Type: multipart/mixed; boundary="0000000000009a1f54064375b983" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000009a1f54064375b983 Content-Type: multipart/alternative; boundary="0000000000009a1f52064375b981" --0000000000009a1f52064375b981 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Nov 13, 2025 at 10:18=E2=80=AFAM Quan Zongliang wrote: > > > On 11/13/25 12:17 PM, Quan Zongliang wrote: > > > > > > On 11/12/25 8:04 PM, Akshay Joshi wrote: > >> Hi Hackers, > >> > >> I=E2=80=99m submitting a patch as part of the broader Retail DDL Funct= ions > >> project described by Andrew Dunstan https://www.postgresql.org/ > >> message- id/945db7c5-be75-45bf-b55b-cb1e56f2e3e9%40dunslane.net > >> >> cb1e56f2e3e9%40dunslane.net> > >> > >> This patch adds a new system function > >> pg_get_database_ddl(database_name/ database_oid, pretty), which > >> reconstructs the CREATE DATABASE statement for a given database name > >> or database oid. When the pretty flag is set to true, the function > >> returns a neatly formatted, multi-line DDL statement instead of a > >> single-line statement. > >> > >> *Usage examples:* > >> > >> 1) SELECT pg_get_database_ddl('test_get_database_ddl_builtin'); -- > >> *non-pretty formatted DDL* > >> pg_get_database_ddl > >> > -------------------------------------------------------------------------= ---------------------------------------------------------------------------= ---------------------------------------------------------------------------= ------------------------------------------------------------ > >> CREATE DATABASE test_get_database_ddl_builtin WITH OWNER =3D > >> regress_ddl_database ENCODING =3D "UTF8" LC_COLLATE =3D "C" LC_CTYPE = =3D "C" > >> BUILTIN_LOCALE =3D "C.UTF-8" COLLATION_VERSION =3D "1" LOCALE_PROVIDER= =3D > >> 'builtin' TABLESPACE =3D pg_default ALLOW_CONNECTIONS =3D true CONNECT= ION > >> LIMIT =3D -1; > >> > >> > >> 2) SELECT pg_get_database_ddl('test_get_database_ddl_builtin', true); > >> -- *pretty formatted DDL* > >> > >> CREATE DATABASE test_get_database_ddl_builtin > >> WITH > >> OWNER =3D regress_ddl_database > >> ENCODING =3D "UTF8" > >> LC_COLLATE =3D "C" > >> LC_CTYPE =3D "C" > >> BUILTIN_LOCALE =3D "C.UTF-8" > >> COLLATION_VERSION =3D "1" > >> LOCALE_PROVIDER =3D 'builtin' > >> TABLESPACE =3D pg_default > >> ALLOW_CONNECTIONS =3D true > >> CONNECTION LIMIT =3D -1; > >> > >> 3) SELECT pg_get_database_ddl(16835); -- *non-pretty formatted > >> DDL for OID* > >> 4) SELECT pg_get_database_ddl(16835, true); -- *pretty formatted DDL > >> for OID* > >> > >> The patch includes documentation, in-code comments, and regression > >> tests, all of which pass successfully. > >> * > >> **Note:* To run the regression tests, particularly the pg_upgrade > >> tests successfully, I had to add a helper function, ddl_filter (in > >> database.sql), which removes locale and collation-related information > >> from the pg_get_database_ddl output. > >> > > I think we should check the connection permissions here. Otherwise: > > > > postgres=3D> SELECT pg_database_size('testdb'); > > ERROR: permission denied for database testdb > > postgres=3D> SELECT pg_get_database_ddl('testdb'); > > > > pg_get_database_ddl > > > -------------------------------------------------------------------------= ---------------------------------------------------------------------------= --------------------------------------------------------------- > > CREATE DATABASE testdb WITH OWNER =3D quanzl ENCODING =3D "UTF8" > > LC_COLLATE =3D "zh_CN.UTF-8" LC_CTYPE =3D "zh_CN.UTF-8" LOCALE_PROVIDER= =3D > > 'libc' TABLESPACE =3D pg_default ALLOW_CONNECTIONS =3D true CONNECTION = LIMIT > > =3D -1; > > (1 row) > > > > Users without connection permissions should not generate DDL. > > > > The "dbOwner" is defined as a null pointer. > char *dbOwner =3D NULL; > > Later, there might be a risk of it not being assigned a value. > if (OidIsValid(dbForm->datdba)) > dbOwner =3D GetUserNameFromId(dbForm->datdba, false); > > Although there is no problem in normal circumstances here. Many parts of > the existing code have not been checked either. Since this possibility > exists, it should be checked before using it. Just like the function > roles_is_member_of (acl.c). > > if (dbOwner) > get_formatted_string(&buf, prettyFlags, 1, "OWNER =3D %s", > quote_identifier(dbOwner)); > Fixed the given review comment. I've attached the v2 patch ready for review. > > > Regards, > > Quan Zongliang > > > >> ----- > >> Regards, > >> Akshay Joshi > >> EDB (EnterpriseDB) > >> > >> > >> > > > > > > --0000000000009a1f52064375b981 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

On Thu, Nov 13, 202= 5 at 10:18=E2=80=AFAM Quan Zongliang <quanzongliang@yeah.net> wrote:


On 11/13/25 12:17 PM, Quan Zongliang wrote:
>
>
> On 11/12/25 8:04 PM, Akshay Joshi wrote:
>> Hi Hackers,
>>
>> I=E2=80=99m submitting a patch as part of the broader Retail DDL F= unctions
>> project described by Andrew Dunstan https://www.postgresql.org/<= /a>
>> message- id/945db7c5-be75-45bf-b55b-cb1e56f2e3e9%
40dunslane.net >> <https:// www.postgresql.or= g/message-id/945db7c5-be75-45bf-b55b-
>> cb1e56f2e3e9%40dunslane.net>
>>
>> This patch adds a new system function
>> pg_get_database_ddl(database_name/ database_oid, pretty), which >> reconstructs the CREATE DATABASE statement for a given database na= me
>> or database oid. When the pretty flag is set to true, the function=
>> returns a neatly formatted, multi-line DDL statement instead of a =
>> single-line statement.
>>
>> *Usage examples:*
>>
>> 1) SELECT pg_get_database_ddl('test_get_database_ddl_builtin&#= 39;); =C2=A0--
>> *non-pretty formatted DDL*
>> pg_get_database_ddl
>> ------------------------------------------------------------------= ---------------------------------------------------------------------------= ---------------------------------------------------------------------------= -------------------------------------------------------------------
>> =C2=A0=C2=A0 CREATE DATABASE test_get_database_ddl_builtin WITH OW= NER =3D
>> regress_ddl_database ENCODING =3D "UTF8" LC_COLLATE =3D = "C" LC_CTYPE =3D "C"
>> BUILTIN_LOCALE =3D "C.UTF-8" COLLATION_VERSION =3D "= ;1" LOCALE_PROVIDER =3D
>> 'builtin' TABLESPACE =3D pg_default ALLOW_CONNECTIONS =3D = true CONNECTION
>> LIMIT =3D -1;
>>
>>
>> 2) SELECT pg_get_database_ddl('test_get_database_ddl_builtin&#= 39;, true);
>> -- *pretty formatted DDL*
>>
>> CREATE DATABASE test_get_database_ddl_builtin
>> =C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0WITH
>> =C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0OWNER =3D regress_ddl_data= base
>> =C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ENCODING =3D "UTF8&qu= ot;
>> =C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0LC_COLLATE =3D "C&quo= t;
>> =C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0LC_CTYPE =3D "C"=
>> =C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0BUILTIN_LOCALE =3D "C= .UTF-8"
>> =C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0COLLATION_VERSION =3D &quo= t;1"
>> =C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0LOCALE_PROVIDER =3D 'b= uiltin'
>> =C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0TABLESPACE =3D pg_default<= br> >> =C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ALLOW_CONNECTIONS =3D true=
>> =C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0CONNECTION LIMIT =3D -1; >>
>> 3) SELECT pg_get_database_ddl(16835);=C2=A0 =C2=A0 =C2=A0 -- *non-= pretty formatted
>> DDL for OID*
>> 4) SELECT pg_get_database_ddl(16835, true);=C2=A0 -- *pretty forma= tted DDL
>> for OID*
>>
>> The patch includes documentation, in-code comments, and regression=
>> tests, all of which pass successfully.
>> *
>> **Note:* To run the regression tests, particularly the pg_upgrade =
>> tests successfully, I had to add a helper function, ddl_filter (in=
>> database.sql), which removes locale and collation-related informat= ion
>> from the pg_get_database_ddl output.
>>
> I think we should check the connection permissions here. Otherwise: >
> postgres=3D> SELECT pg_database_size('testdb');
> ERROR:=C2=A0 permission denied for database testdb
> postgres=3D> SELECT pg_get_database_ddl('testdb');
>
>=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= pg_get_database_ddl
> ----------------------------------------------------------------------= ---------------------------------------------------------------------------= ------------------------------------------------------------------
>=C2=A0 =C2=A0CREATE DATABASE testdb WITH OWNER =3D quanzl ENCODING =3D = "UTF8"
> LC_COLLATE =3D "zh_CN.UTF-8" LC_CTYPE =3D "zh_CN.UTF-8&= quot; LOCALE_PROVIDER =3D
> 'libc' TABLESPACE =3D pg_default ALLOW_CONNECTIONS =3D true CO= NNECTION LIMIT
> =3D -1;
> (1 row)
>
> Users without connection permissions should not generate DDL.
>

The "dbOwner" is defined as a null pointer.
char=C2=A0 =C2=A0 =C2=A0 =C2=A0*dbOwner =3D NULL;

Later, there might be a risk of it not being assigned a value.
=C2=A0 =C2=A0 if (OidIsValid(dbForm->datdba))
=C2=A0 =C2=A0 =C2=A0 =C2=A0dbOwner =3D GetUserNameFromId(dbForm->datdba,= false);

Although there is no problem in normal circumstances here. Many parts of the existing code have not been checked either. Since this possibility
exists, it should be checked before using it. Just like the function
roles_is_member_of (acl.c).

if (dbOwner)
=C2=A0 =C2=A0get_formatted_string(&buf, prettyFlags, 1, "OWNER =3D= %s",
=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=A0quote_identifier(dbOwner));

=C2=A0Fixed the given review comment. I've attached the v2 patch = ready for review.=C2=A0=C2=A0

> Regards,
> Quan Zongliang
>
>> -----
>> Regards,
>> Akshay Joshi
>> EDB (EnterpriseDB)
>>
>>
>>
>
>

--0000000000009a1f52064375b981-- --0000000000009a1f54064375b983 Content-Type: application/octet-stream; name="v2-0001-Add-pg_get_database_ddl-function-to-reconstruct-CREATE.patch" Content-Disposition: attachment; filename="v2-0001-Add-pg_get_database_ddl-function-to-reconstruct-CREATE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhx679jf0 RnJvbSAyNWJkNGVkMTQzYzVkYWU3N2M4NWFkZTA4N2RmZWUxMDM1NmJkNTYyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBXZWQsIDI0IFNlcCAyMDI1IDE3OjQ3OjU5ICswNTMwClN1YmplY3Q6IFtQ QVRDSCB2Ml0gQWRkIHBnX2dldF9kYXRhYmFzZV9kZGwoKSBmdW5jdGlvbiB0byByZWNvbnN0cnVj dCBDUkVBVEUKIERBVEFCQVNFIHN0YXRlbWVudHMuCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQt VHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5n OiA4Yml0CgpUaGlzIGFkZHMgYSBuZXcgc3lzdGVtIGZ1bmN0aW9uLCBwZ19nZXRfZGF0YWJhc2Vf ZGRsKGRhdGFiYXNlX25hbWUvZGF0YWJhc2Vfb2lkLCBwcmV0dHkpLAp3aGljaCByZWNvbnN0cnVj dHMgdGhlIENSRUFURSBEQVRBQkFTRSBzdGF0ZW1lbnQgZm9yIGEgZ2l2ZW4gZGF0YWJhc2UgbmFt ZSBvciBkYXRhYmFzZSBvaWQuCgpVc2FnZToKICBTRUxFQ1QgcGdfZ2V0X2RhdGFiYXNlX2RkbCgn cG9zdGdyZXMnKTsgLy8gTm9uIHByZXR0eS1mb3JtYXR0ZWQgRERMCiAgU0VMRUNUIHBnX2dldF9k YXRhYmFzZV9kZGwoMTY4MzUpOyAvLyBOb24gcHJldHR5LWZvcm1hdHRlZCBEREwKICBTRUxFQ1Qg cGdfZ2V0X2RhdGFiYXNlX2RkbCgncG9zdGdyZXMnLCB0cnVlKTsgLy8gcHJldHR5LWZvcm1hdHRl ZCBEREwKICBTRUxFQ1QgcGdfZ2V0X2RhdGFiYXNlX2RkbCgxNjgzNSwgdHJ1ZSk7IC8vIHByZXR0 eS1mb3JtYXR0ZWQgRERMCgpSZWZlcmVuY2U6IFBHLTE1MApBdXRob3I6IEFrc2hheSBKb3NoaSA8 YWtzaGF5Lmpvc2hpQGVudGVycHJpc2VkYi5jb20+ClJldmlld2VkLWJ5OiDDgWx2YXJvIEhlcnJl cmEgPGFsdmhlcnJlQGt1cmlsZW11LmRlPgotLS0KIGRvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5m by5zZ21sICAgICAgICAgfCAgNzAgKysrKysrKysKIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVt X2Z1bmN0aW9ucy5zcWwgfCAgMTIgKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMu YyAgICAgICAgfCAyMDYgKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQgICAgICAgICAgfCAgIDYgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9kYXRhYmFzZS5vdXQgICB8ICA3NiArKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Rh dGFiYXNlLnNxbCAgICAgICAgfCAgNjIgKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCA0MzIgaW5z ZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21s IGIvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwKaW5kZXggZDQ1MDgxMTRhNDguLjg4 ZmUwNGU2NDlkIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbApAQCAtMzc5Nyw0ICszNzk3LDc0 IEBAIGFjbCAgICAgIHwge3Bvc3RncmVzPWFyd2REeHRtL3Bvc3RncmVzLGZvbz1yL3Bvc3RncmVz fQogCiAgIDwvc2VjdDI+CiAKKyAgPHNlY3QyIGlkPSJmdW5jdGlvbnMtZ2V0LW9iamVjdC1kZGwi PgorICAgPHRpdGxlPkdldCBPYmplY3QgRERMIEZ1bmN0aW9uczwvdGl0bGU+CisKKyAgIDxwYXJh PgorICAgIFRoZSBmdW5jdGlvbnMgZGVzY3JpYmVkIGluIDx4cmVmIGxpbmtlbmQ9ImZ1bmN0aW9u cy1nZXQtb2JqZWN0LWRkbC10YWJsZSIvPgorICAgIHJldHVybiB0aGUgRGF0YSBEZWZpbml0aW9u IExhbmd1YWdlIChEREwpIHN0YXRlbWVudCBmb3IgYW55IGdpdmVuIGRhdGFiYXNlIG9iamVjdC4K KyAgICBUaGlzIGZlYXR1cmUgaXMgaW1wbGVtZW50ZWQgYXMgYSBzZXQgb2YgZGlzdGluY3QgZnVu Y3Rpb25zIGZvciBlYWNoIG9iamVjdCB0eXBlLgorICAgPC9wYXJhPgorCisgICA8dGFibGUgaWQ9 ImZ1bmN0aW9ucy1nZXQtb2JqZWN0LWRkbC10YWJsZSI+CisgICAgPHRpdGxlPkdldCBPYmplY3Qg RERMIEZ1bmN0aW9uczwvdGl0bGU+CisgICAgPHRncm91cCBjb2xzPSIxIj4KKyAgICAgPHRoZWFk PgorICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBh cmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAgICBGdW5jdGlvbgorICAgICAgIDwvcGFy YT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRGVzY3JpcHRpb24KKyAgICAgICA8L3BhcmE+PC9l bnRyeT4KKyAgICAgIDwvcm93PgorICAgICA8L3RoZWFkPgorCisgICAgIDx0Ym9keT4KKyAgICAg IDxyb3c+CisgICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9 ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5 PnBnX2dldF9kYXRhYmFzZV9kZGw8L3ByaW1hcnk+CisgICAgICAgIDwvaW5kZXh0ZXJtPgorICAg ICAgICA8ZnVuY3Rpb24+cGdfZ2V0X2RhdGFiYXNlX2RkbDwvZnVuY3Rpb24+CisgICAgICAgICgg PHBhcmFtZXRlcj5kYXRhYmFzZV9uYW1lPC9wYXJhbWV0ZXI+IDx0eXBlPm5hbWU8L3R5cGU+LCA8 b3B0aW9uYWw+IDxwYXJhbWV0ZXI+cHJldHR5PC9wYXJhbWV0ZXI+IDx0eXBlPmJvb2xlYW48L3R5 cGU+IDwvb3B0aW9uYWw+ICkKKyAgICAgICAgPHJldHVybnZhbHVlPnRleHQ8L3JldHVybnZhbHVl PgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmVjb25zdHJ1Y3RzIHRo ZSA8Y29tbWFuZD5DUkVBVEUgREFUQUJBU0U8L2NvbW1hbmQ+IHN0YXRlbWVudCBmcm9tIHRoZQor ICAgICAgICBzeXN0ZW0gY2F0YWxvZ3MgZm9yIGEgc3BlY2lmaWVkIGRhdGFiYXNlIG5hbWUuIFRo ZSByZXN1bHQgaXMgYQorICAgICAgICBjb21wcmVoZW5zaXZlIDxjb21tYW5kPkNSRUFURSBEQVRB QkFTRTwvY29tbWFuZD4gc3RhdGVtZW50LgorICAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICAg PC9yb3c+CisgICAgICA8cm93PgorICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5 Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIDxpbmRleHRlcm0+CisgICAg ICAgICA8cHJpbWFyeT5wZ19nZXRfZGF0YWJhc2VfZGRsPC9wcmltYXJ5PgorICAgICAgICA8L2lu ZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9uPnBnX2dldF9kYXRhYmFzZV9kZGw8L2Z1bmN0aW9u PgorICAgICAgICAoIDxwYXJhbWV0ZXI+ZGF0YWJhc2Vfb2lkPC9wYXJhbWV0ZXI+IDx0eXBlPm9p ZDwvdHlwZT4sIDxvcHRpb25hbD4gPHBhcmFtZXRlcj5wcmV0dHk8L3BhcmFtZXRlcj4gPHR5cGU+ Ym9vbGVhbjwvdHlwZT4gPC9vcHRpb25hbD4gKQorICAgICAgICA8cmV0dXJudmFsdWU+dGV4dDwv cmV0dXJudmFsdWU+CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBSZWNv bnN0cnVjdHMgdGhlIDxjb21tYW5kPkNSRUFURSBEQVRBQkFTRTwvY29tbWFuZD4gc3RhdGVtZW50 IGZyb20gdGhlCisgICAgICAgIHN5c3RlbSBjYXRhbG9ncyBmb3IgYSBzcGVjaWZpZWQgZGF0YWJh c2Ugb2lkLiBUaGUgcmVzdWx0IGlzIGEKKyAgICAgICAgY29tcHJlaGVuc2l2ZSA8Y29tbWFuZD5D UkVBVEUgREFUQUJBU0U8L2NvbW1hbmQ+IHN0YXRlbWVudC4KKyAgICAgICA8L3BhcmE+PC9lbnRy eT4KKyAgICAgIDwvcm93PgorICAgICA8L3Rib2R5PgorICAgIDwvdGdyb3VwPgorICAgPC90YWJs ZT4KKworICA8cGFyYT4KKyAgIE1vc3Qgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IHJlY29uc3RydWN0 IChkZWNvbXBpbGUpIGRhdGFiYXNlIG9iamVjdHMgaGF2ZSBhbgorICAgb3B0aW9uYWwgPHBhcmFt ZXRlcj5wcmV0dHk8L3BhcmFtZXRlcj4gZmxhZywgd2hpY2ggaWYKKyAgIDxsaXRlcmFsPnRydWU8 L2xpdGVyYWw+IGNhdXNlcyB0aGUgcmVzdWx0IHRvIGJlCisgICA8cXVvdGU+cHJldHR5LXByaW50 ZWQ8L3F1b3RlPi4gUHJldHR5LXByaW50aW5nIGFkZHMgdGFiIGNoYXJhY3RlciBhbmQgbmV3Cisg ICBsaW5lIGNoYXJhY3RlciBmb3IgbGVnaWJpbGl0eS4gUGFzc2luZyA8bGl0ZXJhbD5mYWxzZTwv bGl0ZXJhbD4gZm9yIHRoZQorICAgPHBhcmFtZXRlcj5wcmV0dHk8L3BhcmFtZXRlcj4gcGFyYW1l dGVyIHlpZWxkcyB0aGUgc2FtZSByZXN1bHQgYXMgb21pdHRpbmcKKyAgIHRoZSBwYXJhbWV0ZXIu CisgIDwvcGFyYT4KKworICA8L3NlY3QyPgorCiAgIDwvc2VjdDE+CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3FsIGIvc3JjL2JhY2tlbmQvY2F0YWxv Zy9zeXN0ZW1fZnVuY3Rpb25zLnNxbAppbmRleCAyZDk0NmQ2ZDllOS4uMmRiOWQzYmJjZmMgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwKKysrIGIv c3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25zLnNxbApAQCAtNjU3LDYgKzY1Nywx OCBAQCBMQU5HVUFHRSBJTlRFUk5BTAogU1RSSUNUIFZPTEFUSUxFIFBBUkFMTEVMIFVOU0FGRQog QVMgJ3BnX3JlcGxpY2F0aW9uX29yaWdpbl9zZXNzaW9uX3NldHVwJzsKIAorQ1JFQVRFIE9SIFJF UExBQ0UgRlVOQ1RJT04KKyAgcGdfZ2V0X2RhdGFiYXNlX2RkbChkYXRhYmFzZV9uYW1lIG5hbWUs IHByZXR0eSBib29sIERFRkFVTFQgZmFsc2UpCitSRVRVUk5TIHRleHQKK0xBTkdVQUdFIGludGVy bmFsCitBUyAncGdfZ2V0X2RhdGFiYXNlX2RkbF9uYW1lJzsKKworQ1JFQVRFIE9SIFJFUExBQ0Ug RlVOQ1RJT04KKyAgcGdfZ2V0X2RhdGFiYXNlX2RkbChkYXRhYmFzZV9vaWQgb2lkLCBwcmV0dHkg Ym9vbCBERUZBVUxUIGZhbHNlKQorUkVUVVJOUyB0ZXh0CitMQU5HVUFHRSBpbnRlcm5hbAorQVMg J3BnX2dldF9kYXRhYmFzZV9kZGxfb2lkJzsKKwogLS0KIC0tIFRoZSBkZWZhdWx0IHBlcm1pc3Np b25zIGZvciBmdW5jdGlvbnMgbWVhbiB0aGF0IGFueW9uZSBjYW4gZXhlY3V0ZSB0aGVtLgogLS0g QSBudW1iZXIgb2YgZnVuY3Rpb25zIHNob3VsZG4ndCBiZSBleGVjdXRhYmxlIGJ5IGp1c3QgYW55 b25lLCBidXQgcmF0aGVyCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0 aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKaW5kZXggNTU2YWIwNTdl NWEuLjJiNjIyYmNjNjZkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0 aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCkBAIC0yOCw2ICsy OCw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQuaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX2NvbGxhdGlvbi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29uc3RyYWludC5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfZGF0YWJhc2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2RlcGVu ZC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfbGFuZ3VhZ2UuaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX29wY2xhc3MuaCIKQEAgLTk0LDYgKzk1LDEwIEBACiAJKChwcmV0dHkpID8gKFBSRVRUWUZM QUdfUEFSRU4gfCBQUkVUVFlGTEFHX0lOREVOVCB8IFBSRVRUWUZMQUdfU0NIRU1BKSBcCiAJIDog UFJFVFRZRkxBR19JTkRFTlQpCiAKKyNkZWZpbmUgR0VUX0RETF9QUkVUVFlfRkxBR1MocHJldHR5 KSBcCisJKChwcmV0dHkpID8gKFBSRVRUWUZMQUdfUEFSRU4gfCBQUkVUVFlGTEFHX0lOREVOVCB8 IFBSRVRUWUZMQUdfU0NIRU1BKSBcCisJIDogMCkKKwogLyogRGVmYXVsdCBsaW5lIGxlbmd0aCBm b3IgcHJldHR5LXByaW50IHdyYXBwaW5nOiAwIG1lYW5zIHdyYXAgYWx3YXlzICovCiAjZGVmaW5l IFdSQVBfQ09MVU1OX0RFRkFVTFQJCTAKIApAQCAtNTQ2LDYgKzU1MSwxMSBAQCBzdGF0aWMgdm9p ZCBnZXRfanNvbl90YWJsZV9uZXN0ZWRfY29sdW1ucyhUYWJsZUZ1bmMgKnRmLCBKc29uVGFibGVQ bGFuICpwbGFuLAogCQkJCQkJCQkJCSAgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LAogCQkJCQkJ CQkJCSAgYm9vbCBzaG93aW1wbGljaXQsCiAJCQkJCQkJCQkJICBib29sIG5lZWRjb21tYSk7Citz dGF0aWMgdm9pZCBnZXRfZm9ybWF0dGVkX3N0cmluZyhTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJCQkJ IGludCBwcmV0dHlGbGFncywKKwkJCQkJCQkJIGludCBub09mVGFiQ2hhcnMsCisJCQkJCQkJCSBj b25zdCBjaGFyICpmbXQsLi4uKSBwZ19hdHRyaWJ1dGVfcHJpbnRmKDQsIDUpOworc3RhdGljIGNo YXIgKnBnX2dldF9kYXRhYmFzZV9kZGxfd29ya2VyKE9pZCBkYk9pZCwgaW50IHByZXR0eUZsYWdz KTsKIAogI2RlZmluZSBvbmx5X21hcmtlcihydGUpICAoKHJ0ZSktPmluaCA/ICIiIDogIk9OTFkg IikKIApAQCAtMTM3NDMsMyArMTM3NTMsMTk5IEBAIGdldF9yYW5nZV9wYXJ0Ym91bmRfc3RyaW5n KExpc3QgKmJvdW5kX2RhdHVtcykKIAogCXJldHVybiBidWYuZGF0YTsKIH0KKworLyoKKyAqIGdl dF9mb3JtYXR0ZWRfc3RyaW5nCisgKgorICogUmV0dXJuIGEgZm9ybWF0dGVkIHZlcnNpb24gb2Yg dGhlIHN0cmluZy4KKyAqCisgKiBwcmV0dHlGbGFncyAtIEJhc2VkIG9uIHByZXR0eUZsYWdzIHRo ZSBvdXRwdXQgaW5jbHVkZXMgdGFicyAoXHQpIGFuZAorICogICAgICAgICAgICAgICBuZXdsaW5l cyAoXG4pLgorICogbm9PZlRhYkNoYXJzIC0gaW5kZW50IHdpdGggc3BlY2lmaWVkIG5vIG9mIHRh YnMuCisgKiBmbXQgLSBwcmludGYtc3R5bGUgZm9ybWF0IHN0cmluZyB1c2VkIGJ5IGFwcGVuZFN0 cmluZ0luZm9WQS4KKyAqLworc3RhdGljIHZvaWQKK2dldF9mb3JtYXR0ZWRfc3RyaW5nKFN0cmlu Z0luZm8gYnVmLCBpbnQgcHJldHR5RmxhZ3MsIGludCBub09mVGFiQ2hhcnMsIGNvbnN0IGNoYXIg KmZtdCwuLi4pCit7CisJdmFfbGlzdAkJYXJnczsKKworCWlmIChwcmV0dHlGbGFncyAmIFBSRVRU WUZMQUdfSU5ERU5UKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnXG4nKTsKKwkJ LyogSW5kZW50IHdpdGggdGFicyAqLworCQlmb3IgKGludCBpID0gMDsgaSA8IG5vT2ZUYWJDaGFy czsgaSsrKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICdcdCcpOworCQl9CisJ fQorCWVsc2UKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnICcpOworCisJdmFfc3RhcnQo YXJncywgZm10KTsKKwlhcHBlbmRTdHJpbmdJbmZvVkEoYnVmLCBmbXQsIGFyZ3MpOworCXZhX2Vu ZChhcmdzKTsKK30KKworLyoKKyAqIHBnX2dldF9kYXRhYmFzZV9kZGxfbmFtZQorICoKKyAqIEdl bmVyYXRlIGEgQ1JFQVRFIERBVEFCQVNFIHN0YXRlbWVudCBmb3IgdGhlIHNwZWNpZmllZCBkYXRh YmFzZSBuYW1lLgorICoKKyAqIGRiTmFtZSAtIE5hbWUgb2YgdGhlIGRhdGFiYXNlIGZvciB3aGlj aCB0byBnZW5lcmF0ZSB0aGUgRERMLgorICogcHJldHR5IC0gSWYgdHJ1ZSwgZm9ybWF0IHRoZSBE REwgd2l0aCBpbmRlbnRhdGlvbiBhbmQgbGluZSBicmVha3MuCisgKi8KK0RhdHVtCitwZ19nZXRf ZGF0YWJhc2VfZGRsX25hbWUoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlOYW1lCQlkYk5hbWUgPSBQ R19HRVRBUkdfTkFNRSgwKTsKKwlib29sCQlwcmV0dHkgPSBQR19HRVRBUkdfQk9PTCgxKTsKKwlp bnQJCQlwcmV0dHlGbGFnczsKKwljaGFyCSAgICpyZXM7CisKKwkvKiBHZXQgdGhlIGRhdGFiYXNl IG9pZCByZXNwZWN0aXZlIHRvIHRoZSBnaXZlbiBkYXRhYmFzZSBuYW1lICovCisJT2lkCQkJZGJP aWQgPSBnZXRfZGF0YWJhc2Vfb2lkKE5hbWVTdHIoKmRiTmFtZSksIGZhbHNlKTsKKworCXByZXR0 eUZsYWdzID0gR0VUX0RETF9QUkVUVFlfRkxBR1MocHJldHR5KTsKKwlyZXMgPSBwZ19nZXRfZGF0 YWJhc2VfZGRsX3dvcmtlcihkYk9pZCwgcHJldHR5RmxhZ3MpOworCisJaWYgKHJlcyA9PSBOVUxM KQorCQlQR19SRVRVUk5fTlVMTCgpOworCisJUEdfUkVUVVJOX1RFWFRfUChzdHJpbmdfdG9fdGV4 dChyZXMpKTsKK30KKworLyoKKyAqIHBnX2dldF9kYXRhYmFzZV9kZGxfb2lkCisgKgorICogR2Vu ZXJhdGUgYSBDUkVBVEUgREFUQUJBU0Ugc3RhdGVtZW50IGZvciB0aGUgc3BlY2lmaWVkIGRhdGFi YXNlIG9pZC4KKyAqCisgKiBkYk5hbWUgLSBOYW1lIG9mIHRoZSBkYXRhYmFzZSBmb3Igd2hpY2gg dG8gZ2VuZXJhdGUgdGhlIERETC4KKyAqIHByZXR0eSAtIElmIHRydWUsIGZvcm1hdCB0aGUgRERM IHdpdGggaW5kZW50YXRpb24gYW5kIGxpbmUgYnJlYWtzLgorICovCitEYXR1bQorcGdfZ2V0X2Rh dGFiYXNlX2RkbF9vaWQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlPaWQJCQlkYk9pZCA9IFBHX0dF VEFSR19PSUQoMCk7CisJYm9vbAkJcHJldHR5ID0gUEdfR0VUQVJHX0JPT0woMSk7CisJaW50CQkJ cHJldHR5RmxhZ3M7CisJY2hhcgkgICAqcmVzOworCisJcHJldHR5RmxhZ3MgPSBHRVRfRERMX1BS RVRUWV9GTEFHUyhwcmV0dHkpOworCXJlcyA9IHBnX2dldF9kYXRhYmFzZV9kZGxfd29ya2VyKGRi T2lkLCBwcmV0dHlGbGFncyk7CisKKwlpZiAocmVzID09IE5VTEwpCisJCVBHX1JFVFVSTl9OVUxM KCk7CisKKwlQR19SRVRVUk5fVEVYVF9QKHN0cmluZ190b190ZXh0KHJlcykpOworfQorCitzdGF0 aWMgY2hhciAqCitwZ19nZXRfZGF0YWJhc2VfZGRsX3dvcmtlcihPaWQgZGJPaWQsIGludCBwcmV0 dHlGbGFncykKK3sKKwljaGFyCSAgICpkYk93bmVyID0gTlVMTDsKKwljaGFyCSAgICpkYlRhYmxl c3BhY2UgPSBOVUxMOworCWJvb2wJCWF0dHJJc051bGw7CisJRGF0dW0JCWRiVmFsdWU7CisJSGVh cFR1cGxlCXR1cGxlRGF0YWJhc2U7CisJRm9ybV9wZ19kYXRhYmFzZSBkYkZvcm07CisJU3RyaW5n SW5mb0RhdGEgYnVmOworCisJLyogTG9vayB1cCB0aGUgZGF0YWJhc2UgaW4gcGdfZGF0YWJhc2Ug Ki8KKwl0dXBsZURhdGFiYXNlID0gU2VhcmNoU3lzQ2FjaGUxKERBVEFCQVNFT0lELCBPYmplY3RJ ZEdldERhdHVtKGRiT2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlRGF0YWJhc2Up KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNU KSwKKwkJCQllcnJtc2coImRhdGFiYXNlIHdpdGggb2lkICVkIGRvZXMgbm90IGV4aXN0IiwgZGJP aWQpKTsKKworCWRiRm9ybSA9IChGb3JtX3BnX2RhdGFiYXNlKSBHRVRTVFJVQ1QodHVwbGVEYXRh YmFzZSk7CisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKworCS8qIExvb2sgdXAgdGhlIG93bmVy IGluIHRoZSBzeXN0ZW0gY2F0YWxvZyAqLworCWlmIChPaWRJc1ZhbGlkKGRiRm9ybS0+ZGF0ZGJh KSkKKwkJZGJPd25lciA9IEdldFVzZXJOYW1lRnJvbUlkKGRiRm9ybS0+ZGF0ZGJhLCBmYWxzZSk7 CisKKwkvKiBCdWlsZCB0aGUgQ1JFQVRFIERBVEFCQVNFIHN0YXRlbWVudCAqLworCWFwcGVuZFN0 cmluZ0luZm8oJmJ1ZiwgIkNSRUFURSBEQVRBQkFTRSAlcyIsCisJCQkJCSBxdW90ZV9pZGVudGlm aWVyKGRiRm9ybS0+ZGF0bmFtZS5kYXRhKSk7CisJZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoJmJ1Ziwg cHJldHR5RmxhZ3MsIDEsICJXSVRIIik7CisJaWYgKGRiT3duZXIpCisJCWdldF9mb3JtYXR0ZWRf c3RyaW5nKCZidWYsIHByZXR0eUZsYWdzLCAxLCAiT1dORVIgPSAlcyIsCisJCQkJCQkJIHF1b3Rl X2lkZW50aWZpZXIoZGJPd25lcikpOworCisJaWYgKGRiRm9ybS0+ZW5jb2RpbmcgIT0gMCkKKwkJ Z2V0X2Zvcm1hdHRlZF9zdHJpbmcoJmJ1ZiwgcHJldHR5RmxhZ3MsIDEsICJFTkNPRElORyA9ICVz IiwKKwkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihwZ19lbmNvZGluZ190b19jaGFyKGRiRm9ybS0+ ZW5jb2RpbmcpKSk7CisKKwkvKiBGZXRjaCB0aGUgdmFsdWUgb2YgTENfQ09MTEFURSAqLworCWRi VmFsdWUgPSBTeXNDYWNoZUdldEF0dHIoREFUQUJBU0VPSUQsIHR1cGxlRGF0YWJhc2UsCisJCQkJ CQkJICBBbnVtX3BnX2RhdGFiYXNlX2RhdGNvbGxhdGUsICZhdHRySXNOdWxsKTsKKwlpZiAoIWF0 dHJJc051bGwpCisJCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZidWYsIHByZXR0eUZsYWdzLCAxLCAi TENfQ09MTEFURSA9ICVzIiwKKwkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihUZXh0RGF0dW1HZXRD U3RyaW5nKGRiVmFsdWUpKSk7CisKKwkvKiBGZXRjaCB0aGUgdmFsdWUgb2YgTENfQ1RZUEUgKi8K KwlkYlZhbHVlID0gU3lzQ2FjaGVHZXRBdHRyKERBVEFCQVNFT0lELCB0dXBsZURhdGFiYXNlLAor CQkJCQkJCSAgQW51bV9wZ19kYXRhYmFzZV9kYXRjdHlwZSwgJmF0dHJJc051bGwpOworCWlmICgh YXR0cklzTnVsbCkKKwkJZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoJmJ1ZiwgcHJldHR5RmxhZ3MsIDEs ICJMQ19DVFlQRSA9ICVzIiwKKwkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihUZXh0RGF0dW1HZXRD U3RyaW5nKGRiVmFsdWUpKSk7CisKKwkvKiBGZXRjaCB0aGUgdmFsdWUgb2YgTE9DQUxFICovCisJ ZGJWYWx1ZSA9IFN5c0NhY2hlR2V0QXR0cihEQVRBQkFTRU9JRCwgdHVwbGVEYXRhYmFzZSwKKwkJ CQkJCQkgIEFudW1fcGdfZGF0YWJhc2VfZGF0bG9jYWxlLCAmYXR0cklzTnVsbCk7CisJaWYgKCFh dHRySXNOdWxsICYmIGRiRm9ybS0+ZGF0bG9jcHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0JVSUxU SU4pCisJCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZidWYsIHByZXR0eUZsYWdzLCAxLCAiQlVJTFRJ Tl9MT0NBTEUgPSAlcyIsCisJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoVGV4dERhdHVtR2V0Q1N0 cmluZyhkYlZhbHVlKSkpOworCWVsc2UgaWYgKCFhdHRySXNOdWxsICYmIGRiRm9ybS0+ZGF0bG9j cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwkJZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoJmJ1 ZiwgcHJldHR5RmxhZ3MsIDEsICJJQ1VfTE9DQUxFID0gJXMiLAorCQkJCQkJCSBxdW90ZV9pZGVu dGlmaWVyKFRleHREYXR1bUdldENTdHJpbmcoZGJWYWx1ZSkpKTsKKworCS8qIEZldGNoIHRoZSB2 YWx1ZSBvZiBJQ1VfUlVMRVMgKi8KKwlkYlZhbHVlID0gU3lzQ2FjaGVHZXRBdHRyKERBVEFCQVNF T0lELCB0dXBsZURhdGFiYXNlLAorCQkJCQkJCSAgQW51bV9wZ19kYXRhYmFzZV9kYXRpY3VydWxl cywgJmF0dHJJc051bGwpOworCWlmICghYXR0cklzTnVsbCkKKwkJZ2V0X2Zvcm1hdHRlZF9zdHJp bmcoJmJ1ZiwgcHJldHR5RmxhZ3MsIDEsICJJQ1VfUlVMRVMgPSAlcyIsCisJCQkJCQkJIHF1b3Rl X2lkZW50aWZpZXIoVGV4dERhdHVtR2V0Q1N0cmluZyhkYlZhbHVlKSkpOworCisJLyogRmV0Y2gg dGhlIHZhbHVlIG9mIENPTExBVElPTl9WRVJTSU9OICovCisJZGJWYWx1ZSA9IFN5c0NhY2hlR2V0 QXR0cihEQVRBQkFTRU9JRCwgdHVwbGVEYXRhYmFzZSwKKwkJCQkJCQkgIEFudW1fcGdfZGF0YWJh c2VfZGF0Y29sbHZlcnNpb24sICZhdHRySXNOdWxsKTsKKwlpZiAoIWF0dHJJc051bGwpCisJCWdl dF9mb3JtYXR0ZWRfc3RyaW5nKCZidWYsIHByZXR0eUZsYWdzLCAxLCAiQ09MTEFUSU9OX1ZFUlNJ T04gPSAlcyIsCisJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoVGV4dERhdHVtR2V0Q1N0cmluZyhk YlZhbHVlKSkpOworCisJLyogU2V0IHRoZSBhcHByb3ByaWF0ZSBMT0NBTEVfUFJPVklERVIgKi8K KwlpZiAoZGJGb3JtLT5kYXRsb2Nwcm92aWRlciA9PSBDT0xMUFJPVklERVJfQlVJTFRJTikKKwkJ Z2V0X2Zvcm1hdHRlZF9zdHJpbmcoJmJ1ZiwgcHJldHR5RmxhZ3MsIDEsICJMT0NBTEVfUFJPVklE RVIgPSAnYnVpbHRpbiciKTsKKwllbHNlIGlmIChkYkZvcm0tPmRhdGxvY3Byb3ZpZGVyID09IENP TExQUk9WSURFUl9JQ1UpCisJCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZidWYsIHByZXR0eUZsYWdz LCAxLCAiTE9DQUxFX1BST1ZJREVSID0gJ2ljdSciKTsKKwllbHNlCisJCWdldF9mb3JtYXR0ZWRf c3RyaW5nKCZidWYsIHByZXR0eUZsYWdzLCAxLCAiTE9DQUxFX1BST1ZJREVSID0gJ2xpYmMnIik7 CisKKwkvKiBHZXQgdGhlIHRhYmxlc3BhY2UgbmFtZSByZXNwZWN0aXZlIHRvIHRoZSBnaXZlbiB0 YWJsZXNwYWNlIG9pZCAqLworCWlmIChPaWRJc1ZhbGlkKGRiRm9ybS0+ZGF0dGFibGVzcGFjZSkp CisJeworCQlkYlRhYmxlc3BhY2UgPSBnZXRfdGFibGVzcGFjZV9uYW1lKGRiRm9ybS0+ZGF0dGFi bGVzcGFjZSk7CisJCWlmIChkYlRhYmxlc3BhY2UpCisJCQlnZXRfZm9ybWF0dGVkX3N0cmluZygm YnVmLCBwcmV0dHlGbGFncywgMSwgIlRBQkxFU1BBQ0UgPSAlcyIsCisJCQkJCQkJCSBxdW90ZV9p ZGVudGlmaWVyKGRiVGFibGVzcGFjZSkpOworCX0KKworCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZi dWYsIHByZXR0eUZsYWdzLCAxLCAiQUxMT1dfQ09OTkVDVElPTlMgPSAlcyIsCisJCQkJCQkgZGJG b3JtLT5kYXRhbGxvd2Nvbm4gPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKworCWlmIChkYkZvcm0tPmRh dGNvbm5saW1pdCAhPSAwKQorCQlnZXRfZm9ybWF0dGVkX3N0cmluZygmYnVmLCBwcmV0dHlGbGFn cywgMSwgIkNPTk5FQ1RJT04gTElNSVQgPSAlZCIsCisJCQkJCQkJIGRiRm9ybS0+ZGF0Y29ubmxp bWl0KTsKKworCWlmIChkYkZvcm0tPmRhdGlzdGVtcGxhdGUpCisJCWdldF9mb3JtYXR0ZWRfc3Ry aW5nKCZidWYsIHByZXR0eUZsYWdzLCAxLCAiSVNfVEVNUExBVEUgPSAlcyIsCisJCQkJCQkJIGRi Rm9ybS0+ZGF0aXN0ZW1wbGF0ZSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCisJYXBwZW5kU3RyaW5n SW5mb0NoYXIoJmJ1ZiwgJzsnKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0dXBsZURhdGFiYXNlKTsK KworCXJldHVybiBidWYuZGF0YTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDVjZjll MTJmY2I5Li4yN2ZiYjcxMjk3ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC00MDIxLDYg KzQwMjEsMTIgQEAKICAgcHJvbmFtZSA9PiAncGdfZ2V0X2Z1bmN0aW9uX3NxbGJvZHknLCBwcm92 b2xhdGlsZSA9PiAncycsCiAgIHByb3JldHR5cGUgPT4gJ3RleHQnLCBwcm9hcmd0eXBlcyA9PiAn b2lkJywKICAgcHJvc3JjID0+ICdwZ19nZXRfZnVuY3Rpb25fc3FsYm9keScgfSwKK3sgb2lkID0+ ICc5NDkyJywgZGVzY3IgPT4gJ2dldCBDUkVBVEUgc3RhdGVtZW50IGZvciBkYXRhYmFzZSBuYW1l JywKKyAgcHJvbmFtZSA9PiAncGdfZ2V0X2RhdGFiYXNlX2RkbCcsIHByb3JldHR5cGUgPT4gJ3Rl eHQnLAorICBwcm9hcmd0eXBlcyA9PiAnbmFtZSBib29sJywgcHJvc3JjID0+ICdwZ19nZXRfZGF0 YWJhc2VfZGRsX25hbWUnIH0sCit7IG9pZCA9PiAnOTQ5MycsIGRlc2NyID0+ICdnZXQgQ1JFQVRF IHN0YXRlbWVudCBmb3IgZGF0YWJhc2Ugb2lkJywKKyAgcHJvbmFtZSA9PiAncGdfZ2V0X2RhdGFi YXNlX2RkbCcsIHByb3JldHR5cGUgPT4gJ3RleHQnLAorICBwcm9hcmd0eXBlcyA9PiAnb2lkIGJv b2wnLCBwcm9zcmMgPT4gJ3BnX2dldF9kYXRhYmFzZV9kZGxfb2lkJyB9LAogCiB7IG9pZCA9PiAn MTY4NicsIGRlc2NyID0+ICdsaXN0IG9mIFNRTCBrZXl3b3JkcycsCiAgIHByb25hbWUgPT4gJ3Bn X2dldF9rZXl3b3JkcycsIHByb2Nvc3QgPT4gJzEwJywgcHJvcm93cyA9PiAnNTAwJywKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZGF0YWJhc2Uub3V0IGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9kYXRhYmFzZS5vdXQKaW5kZXggNmI4NzliMGY2MmEuLmRmOTBmZGVk NDJjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2RhdGFiYXNlLm91dAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2RhdGFiYXNlLm91dApAQCAtMSwzICsxLDQ5 IEBACistLQorLS0gUmVjb25zdHVyY3QgRERMCistLQorLS0gVG8gcHJvZHVjZSBzdGFibGUgcmVn cmVzc2lvbiB0ZXN0IG91dHB1dCwgaXQncyB1c3VhbGx5IG5lY2Vzc2FyeSB0bworLS0gaWdub3Jl IGNvbGxhdGlvbiBhbmQgbG9jYWxlIHJlbGF0ZWQgZGV0YWlscy4gVGhpcyBmaWx0ZXIKKy0tIGZ1 bmN0aW9ucyByZW1vdmVzIGNvbGxhdGlvbiBhbmQgbG9jYWxlIHJlbGF0ZWQgZGV0YWlscy4KK0NS RUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGRkbF9maWx0ZXIoZGRsX2lucHV0IFRFWFQpCitSRVRV Uk5TIFRFWFQgQVMgJCQKK0RFQ0xBUkUKKyAgICBjbGVhbmVkX2RkbCBURVhUOworQkVHSU4KKwkt LSBSZW1vdmUgTENfQ09MTEFURSBhc3NpZ25tZW50cyAKKyAgICBjbGVhbmVkX2RkbCA6PSByZWdl eHBfcmVwbGFjZSgKKyAgICAgICAgZGRsX2lucHV0LAorICAgICAgICAnXHMqTENfQ09MTEFURVxz Kj1ccyooWycnIl0pW14nJyJdKlwxJywKKyAgICAgICAgJycsCisgICAgICAgICdnaScKKyAgICAp OworCisgICAgLS0gUmVtb3ZlIExDX0NUWVBFIGFzc2lnbm1lbnRzCisgICAgY2xlYW5lZF9kZGwg Oj0gcmVnZXhwX3JlcGxhY2UoCisgICAgICAgIGNsZWFuZWRfZGRsLAorICAgICAgICAnXHMqTENf Q1RZUEVccyo9XHMqKFsnJyJdKVteJyciXSpcMScsCisgICAgICAgICcnLAorICAgICAgICAnZ2kn CisgICAgKTsKKworICAgIC0tIFJlbW92ZSAlTE9DQUxFJSBwbGFjZWhvbGRlcnMKKyAgICBjbGVh bmVkX2RkbCA6PSByZWdleHBfcmVwbGFjZSgKKyAgICAgICAgY2xlYW5lZF9kZGwsCisgICAgICAg ICdccypcUypMT0NBTEVcUypccyo9P1xzKihbJyciXSlbXicnIl0qXDEnLAorCQknJywKKwkJJ2dp JworCSk7CisKKyAgICAtLSBSZW1vdmUgJUNPTExBVElPTiUgcGxhY2Vob2xkZXJzCisgICAgY2xl YW5lZF9kZGwgOj0gcmVnZXhwX3JlcGxhY2UoCisgICAgICAgIGNsZWFuZWRfZGRsLAorICAgICAg ICAnXHMqXFMqQ09MTEFUSU9OXFMqXHMqPT9ccyooWycnIl0pW14nJyJdKlwxJywKKyAgICAgICAg JycsCisgICAgICAgICdnaScKKyAgICApOworCisgICAgUkVUVVJOIGNsZWFuZWRfZGRsOworRU5E OworJCQgTEFOR1VBR0UgcGxwZ3NxbDsKIENSRUFURSBEQVRBQkFTRSByZWdyZXNzaW9uX3RiZAog CUVOQ09ESU5HIHV0ZjggTENfQ09MTEFURSAiQyIgTENfQ1RZUEUgIkMiIFRFTVBMQVRFIHRlbXBs YXRlMDsKIEFMVEVSIERBVEFCQVNFIHJlZ3Jlc3Npb25fdGJkIFJFTkFNRSBUTyByZWdyZXNzaW9u X3V0Zjg7CkBAIC0xNiw2ICs2MiwzNiBAQCBDUkVBVEUgUk9MRSByZWdyZXNzX2RhdGRiYV9iZWZv cmU7CiBDUkVBVEUgUk9MRSByZWdyZXNzX2RhdGRiYV9hZnRlcjsKIEFMVEVSIERBVEFCQVNFIHJl Z3Jlc3Npb25fdXRmOCBPV05FUiBUTyByZWdyZXNzX2RhdGRiYV9iZWZvcmU7CiBSRUFTU0lHTiBP V05FRCBCWSByZWdyZXNzX2RhdGRiYV9iZWZvcmUgVE8gcmVncmVzc19kYXRkYmFfYWZ0ZXI7Cist LSBUZXN0IHBnX2dldF9kYXRhYmFzZV9kZGwKKy0tIERhdGFiYXNlIGRvZXNuJ3QgZXhpc3RzCitT RUxFQ1QgcGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl9kYXRhYmFzZScsIGZhbHNlKTsK K0VSUk9SOiAgZGF0YWJhc2UgInJlZ3Jlc3Npb25fZGF0YWJhc2UiIGRvZXMgbm90IGV4aXN0Cist LSBUZXN0IE5VTEwgdmFsdWUKK1NFTEVDVCBwZ19nZXRfZGF0YWJhc2VfZGRsKE5VTEwpOworIHBn X2dldF9kYXRhYmFzZV9kZGwgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKwor LS0gV2l0aG91dCBwcmV0dHkKK1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwo J3JlZ3Jlc3Npb25fdXRmOCcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRsX2ZpbHRlciAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IENSRUFURSBEQVRBQkFTRSByZWdyZXNzaW9uX3V0ZjggV0lUSCBPV05FUiA9IHJlZ3Jlc3NfZGF0 ZGJhX2FmdGVyIEVOQ09ESU5HID0gIlVURjgiIFRBQkxFU1BBQ0UgPSBwZ19kZWZhdWx0IEFMTE9X X0NPTk5FQ1RJT05TID0gdHJ1ZSBDT05ORUNUSU9OIExJTUlUID0gMTIzOworKDEgcm93KQorCist LSBXaXRoIFByZXR0eSBmb3JtYXR0ZWQKK1xwc2V0IGZvcm1hdCB1bmFsaWduZWQKK1NFTEVDVCBk ZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsIHRydWUpKTsK K2RkbF9maWx0ZXIKK0NSRUFURSBEQVRBQkFTRSByZWdyZXNzaW9uX3V0ZjgKKwlXSVRICisJT1dO RVIgPSByZWdyZXNzX2RhdGRiYV9hZnRlcgorCUVOQ09ESU5HID0gIlVURjgiCisJVEFCTEVTUEFD RSA9IHBnX2RlZmF1bHQKKwlBTExPV19DT05ORUNUSU9OUyA9IHRydWUKKwlDT05ORUNUSU9OIExJ TUlUID0gMTIzOworKDEgcm93KQogRFJPUCBEQVRBQkFTRSByZWdyZXNzaW9uX3V0Zjg7CiBEUk9Q IFJPTEUgcmVncmVzc19kYXRkYmFfYmVmb3JlOwogRFJPUCBST0xFIHJlZ3Jlc3NfZGF0ZGJhX2Fm dGVyOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZGF0YWJhc2Uuc3FsIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvZGF0YWJhc2Uuc3FsCmluZGV4IDRlZjM2MTI3MjkxLi4zOTJhNGQ5 NmJiNSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZGF0YWJhc2Uuc3FsCisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2RhdGFiYXNlLnNxbApAQCAtMSwzICsxLDUxIEBACistLQor LS0gUmVjb25zdHVyY3QgRERMCistLQorLS0gVG8gcHJvZHVjZSBzdGFibGUgcmVncmVzc2lvbiB0 ZXN0IG91dHB1dCwgaXQncyB1c3VhbGx5IG5lY2Vzc2FyeSB0bworLS0gaWdub3JlIGNvbGxhdGlv biBhbmQgbG9jYWxlIHJlbGF0ZWQgZGV0YWlscy4gVGhpcyBmaWx0ZXIKKy0tIGZ1bmN0aW9ucyBy ZW1vdmVzIGNvbGxhdGlvbiBhbmQgbG9jYWxlIHJlbGF0ZWQgZGV0YWlscy4KKworQ1JFQVRFIE9S IFJFUExBQ0UgRlVOQ1RJT04gZGRsX2ZpbHRlcihkZGxfaW5wdXQgVEVYVCkKK1JFVFVSTlMgVEVY VCBBUyAkJAorREVDTEFSRQorICAgIGNsZWFuZWRfZGRsIFRFWFQ7CitCRUdJTgorCS0tIFJlbW92 ZSBMQ19DT0xMQVRFIGFzc2lnbm1lbnRzIAorICAgIGNsZWFuZWRfZGRsIDo9IHJlZ2V4cF9yZXBs YWNlKAorICAgICAgICBkZGxfaW5wdXQsCisgICAgICAgICdccypMQ19DT0xMQVRFXHMqPVxzKihb JyciXSlbXicnIl0qXDEnLAorICAgICAgICAnJywKKyAgICAgICAgJ2dpJworICAgICk7CisKKyAg ICAtLSBSZW1vdmUgTENfQ1RZUEUgYXNzaWdubWVudHMKKyAgICBjbGVhbmVkX2RkbCA6PSByZWdl eHBfcmVwbGFjZSgKKyAgICAgICAgY2xlYW5lZF9kZGwsCisgICAgICAgICdccypMQ19DVFlQRVxz Kj1ccyooWycnIl0pW14nJyJdKlwxJywKKyAgICAgICAgJycsCisgICAgICAgICdnaScKKyAgICAp OworCisgICAgLS0gUmVtb3ZlICVMT0NBTEUlIHBsYWNlaG9sZGVycworICAgIGNsZWFuZWRfZGRs IDo9IHJlZ2V4cF9yZXBsYWNlKAorICAgICAgICBjbGVhbmVkX2RkbCwKKyAgICAgICAgJ1xzKlxT KkxPQ0FMRVxTKlxzKj0/XHMqKFsnJyJdKVteJyciXSpcMScsCisJCScnLAorCQknZ2knCisJKTsK KworICAgIC0tIFJlbW92ZSAlQ09MTEFUSU9OJSBwbGFjZWhvbGRlcnMKKyAgICBjbGVhbmVkX2Rk bCA6PSByZWdleHBfcmVwbGFjZSgKKyAgICAgICAgY2xlYW5lZF9kZGwsCisgICAgICAgICdccypc UypDT0xMQVRJT05cUypccyo9P1xzKihbJyciXSlbXicnIl0qXDEnLAorICAgICAgICAnJywKKyAg ICAgICAgJ2dpJworICAgICk7CisKKyAgICBSRVRVUk4gY2xlYW5lZF9kZGw7CitFTkQ7CiskJCBM QU5HVUFHRSBwbHBnc3FsOworCiBDUkVBVEUgREFUQUJBU0UgcmVncmVzc2lvbl90YmQKIAlFTkNP RElORyB1dGY4IExDX0NPTExBVEUgIkMiIExDX0NUWVBFICJDIiBURU1QTEFURSB0ZW1wbGF0ZTA7 CiBBTFRFUiBEQVRBQkFTRSByZWdyZXNzaW9uX3RiZCBSRU5BTUUgVE8gcmVncmVzc2lvbl91dGY4 OwpAQCAtMTksNiArNjcsMjAgQEAgQ1JFQVRFIFJPTEUgcmVncmVzc19kYXRkYmFfYWZ0ZXI7CiBB TFRFUiBEQVRBQkFTRSByZWdyZXNzaW9uX3V0ZjggT1dORVIgVE8gcmVncmVzc19kYXRkYmFfYmVm b3JlOwogUkVBU1NJR04gT1dORUQgQlkgcmVncmVzc19kYXRkYmFfYmVmb3JlIFRPIHJlZ3Jlc3Nf ZGF0ZGJhX2FmdGVyOwogCistLSBUZXN0IHBnX2dldF9kYXRhYmFzZV9kZGwKKy0tIERhdGFiYXNl IGRvZXNuJ3QgZXhpc3RzCitTRUxFQ1QgcGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl9k YXRhYmFzZScsIGZhbHNlKTsKKworLS0gVGVzdCBOVUxMIHZhbHVlCitTRUxFQ1QgcGdfZ2V0X2Rh dGFiYXNlX2RkbChOVUxMKTsKKworLS0gV2l0aG91dCBwcmV0dHkKK1NFTEVDVCBkZGxfZmlsdGVy KHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcpKTsKKworLS0gV2l0aCBQcmV0 dHkgZm9ybWF0dGVkCitccHNldCBmb3JtYXQgdW5hbGlnbmVkCitTRUxFQ1QgZGRsX2ZpbHRlcihw Z19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCB0cnVlKSk7CisKIERST1AgREFU QUJBU0UgcmVncmVzc2lvbl91dGY4OwogRFJPUCBST0xFIHJlZ3Jlc3NfZGF0ZGJhX2JlZm9yZTsK IERST1AgUk9MRSByZWdyZXNzX2RhdGRiYV9hZnRlcjsKLS0gCjIuNTEuMAoK --0000000000009a1f54064375b983--