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 1wQQ34-001Xn9-1V for pgsql-hackers@arkaria.postgresql.org; Fri, 22 May 2026 13:36:22 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wQQ32-00DF9l-1V for pgsql-hackers@arkaria.postgresql.org; Fri, 22 May 2026 13:36:21 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wQPzq-00DA5t-0o for pgsql-hackers@lists.postgresql.org; Fri, 22 May 2026 13:33:03 +0000 Received: from mail-ed1-x535.google.com ([2a00:1450:4864:20::535]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wQPzo-00000000H89-35Jn for pgsql-hackers@postgresql.org; Fri, 22 May 2026 13:33:02 +0000 Received: by mail-ed1-x535.google.com with SMTP id 4fb4d7f45d1cf-67c4aaf76ecso11853940a12.3 for ; Fri, 22 May 2026 06:32:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1779456778; cv=none; d=google.com; s=arc-20240605; b=RBCKRWP34ZoJ+520OMltLioIHJBUpHBGjkIEDdkMljstmeav/h+MgEIPU0buHp/oAA pC11hGpSqXuc2Y/pemN0x4EdS97y416j6FCqv7Y6ldnenJKFHCTGHoqE5gvXJDMgnJIH f/ZTH078yuXXsbWKg2PAOaeqg4gMClkAUMp03RHtOyZ8VBcBXmLrxLydeMn4aql6ux9h sZBIohVBQIbRoGrFU/48+Nrtqhfq3Z6u+CMwMTMkpl6oNAGysxHwKK+rNi+It5fD4ILU suHwRny+pZuf4pCltJHxN2Z8RgXgYK2S3iEVp74UOswzgNRttRrneJ1vpDsUDxBy89e2 1Jfw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=RevrOb3ozSpU1rPcM200t4Khf3WQkKO6Jvt78iX8D1k=; fh=P60nJ3AJa/bTTfvcdAOhvmkdvoBBhdXxmjxd3sKEJJw=; b=JW/Bh7vaUBkdz6QspQhYq8udVF93fwBFQL8GLpJiTh2JWnt40+1criyIgSh5Gdpa3C 0zxW1mb3zx/uu0/lLCajOqYvhZaCHp4kta30Gz2rJYsO3CCQyKjMIP5exqbzzSW9R2MU BmNrUGHAxpUfU5EX4xjJE9Gab1jquY4SSLlU8e2ocwdUeVAa1a8P0wUskzKYxR6h4E/v W7IyFvRtWVeo3tzpr27YD/FGklotsZTduSvbvPv486LWea6jeMCqz5BwMik25TRKc9kB tlK7O3dT3kAl/lTM6OPOG3LXpwcTou0LASVE4IdzROaGSAGpT1dY61sxFjtUCfxAWDlZ Z4tw==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1779456778; x=1780061578; 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=RevrOb3ozSpU1rPcM200t4Khf3WQkKO6Jvt78iX8D1k=; b=cSAjkXM96lMZNpoCc3qa/rqO5r1K3Yj9aK4SrOtiHEtfToyVwkw8WczHAeDAKdfE9X C18ThbFO3EKfZ+uEl0mtZPOLTH3OSFGKvQRFEsBUeOJQWwMBCkozMZ+wMVtz9DjrVybp pqjYBQychhdcM58+rDJcwurY0ieBjaYLzcPBg/8/mm7TaevtpbD5z6G1D7hhFgbebLLL TAPa73+sCu+JTRXDDOt2vORd78x1O0fyDRV7ROA0/kopH4kNi/081Raz17tjYPZA2hJj VETO+40LLlHv5jHQsmbQQGr09fMMG9trGH5ZrVFMkXzQMrcrGEiSRS8BE4Pga07E0rDv EcbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779456778; x=1780061578; 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=RevrOb3ozSpU1rPcM200t4Khf3WQkKO6Jvt78iX8D1k=; b=hZTmrjyUF/SylA62aGeNaKk2bmRJLRmxB/IMgrtgVgTSccTsbDnnmAtMMHP4gzvpDN zIjAkFRi0QFvDyliKecftwhvB12bkFnSNBg2ajXJ99PTVYpyGdqy1jB4rfkvpqwTZps0 kDtCj7PKa6nzTyLxaKsSoKldkbl6b5TwvLrs+hSu3SHLqmLh/2vRZ0yG3n5L5s9NbHgQ /OMjRp4y9becrUGjKUObQYQAW/AUEHHgx3iGma2IVvtb1/2MIQQcgYmS2HbGXRSaKyfC 0yvGR7uOo8z72xN1fOJDHtz5/eNivlbF9Hdypex5xI8sSYB6irNCI6pojZjYIs696/dE voyg== X-Forwarded-Encrypted: i=1; AFNElJ8s9fzgctHS7xQZku+PArxJ2y0hwcPHmSVCELqkwxZLa5Bee2Sp6ty9UNPTu7XBjXwhVMqfuXgEXz0Zqb+S@postgresql.org X-Gm-Message-State: AOJu0Yyj6tADyN8gyect/hfYpZO8ESzRzqK+QmPqwCW0DBucNxfuTFFv BiQ1jKzV774ZTqCRfZSYzblrBt9+iY3ddptlR8/gLZz+QTrDLa7Uf5/ZbZUqEX7JA9/kqU/wPfq FdH3SgvZdFqR3+MaBNauiAFzTZYf/TdHNHxJEC2G2 X-Gm-Gg: Acq92OGVsATb/i4dQdq3dX/AAgMv7fjYf+miTjbHKKBgUaK9UunksT25a1ehJTm1ynj JyG0vj3pgbHjGzNLvFv2ZuLL950mbcNiwtU7h6nzRC0TNfn48QoU13ritXJXhzqIhdNp3iNaa09 aQwFmYNaMuK/hpxEzzA14A/TPj0jXcVg11a8z41Timcm545Zm5bm/xuGQIcREafltJwF4pl+h6W Ni00wOAgmKMgmRMwiTfeyzNVeCG6f6/b7L/OubVNdXuzC4Ov9bCzqm8PSco7Vr5jbXHSDHso4Xn pRaU573woue0So6tTyc= X-Received: by 2002:a05:6402:2341:b0:688:12fd:789c with SMTP id 4fb4d7f45d1cf-6889c4171a5mr1958037a12.9.1779456778037; Fri, 22 May 2026 06:32:58 -0700 (PDT) MIME-Version: 1.0 References: <202510151529.s3fpwsgben57@alvherre.pgsql> In-Reply-To: From: Akshay Joshi Date: Fri, 22 May 2026 19:02:46 +0530 X-Gm-Features: AVHnY4Ly1HcxGomRuZKLYbO7jH2yqFJf_zXPisVX4wLX5Jv565_9ctpEmihPgzY Message-ID: Subject: Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement To: jian he Cc: Marcos Pegoraro , Mark Wong , =?UTF-8?Q?=C3=81lvaro_Herrera?= , pgsql-hackers Content-Type: multipart/mixed; boundary="00000000000026629d06526811f1" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000026629d06526811f1 Content-Type: multipart/alternative; boundary="00000000000026629c06526811ef" --00000000000026629c06526811ef Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi hackers, Following the recently committed *pg_get_database_ddl()*, which adopted a VARIADIC options text[] style for DDL-reconstruction functions, here is a patch in the same spirit for row-level security policies. The new function: pg_get_policy_ddl(table regclass, policy_name name, VARIADIC options text[]) RETURNS setof text Reconstructs the CREATE POLICY statement for the named policy on the given table, returning the result as a single row. The currently supported option is pretty (boolean) for formatted output. SELECT * FROM pg_get_policy_ddl('rls_table', 'pol1'); SELECT * FROM pg_get_policy_ddl('rls_table', 'pol1', 'pretty', 'true'); NULL inputs for table or policy_name return no rows. Unknown option names, invalid boolean values, and duplicate options are reported as errors consistent with the pattern established by pg_get_database_ddl(). The patch includes documentation updates in func-info.sgml and regression tests in rowsecurity.sql covering PERMISSIVE/RESTRICTIVE, each command type (ALL/SELECT/INSERT/UPDATE/DELETE), TO role lists, both USING and WITH CHECK clauses, pretty/non-pretty output, and the error paths above. Patch is ready for review. On Mon, Jan 5, 2026 at 8:00=E2=80=AFPM jian he wrote: > On Thu, Nov 20, 2025 at 5:27=E2=80=AFPM Akshay Joshi > wrote: > > > > Attached is the v8 patch for your review, with updated variable names > and a rebase applied. > > > hi. > > + > + > + > + > + pg_get_policy_ddl > + > + pg_get_policy_ddl > + ( table regclass, > policy_name name, > pretty boolean ) > + text > + > + > + Reconstructs the CREATE POLICY statement from > the > + system catalogs for a specified table and policy name. The resul= t > is a > + comprehensive CREATE POLICY statement. > + > + > + > > ( table regclass ... > this line is way too long, we can split it into several lines, it > won't affect the appearance. > > like: > pg_get_policy_ddl > ( table regclass, > policy_name name, > pretty > boolean ) > text > > Also, the explanation does not mention that the default value of > pretty is false. > > > index 2d946d6d9e9..a5e22374668 100644 > --- a/src/backend/catalog/system_functions.sql > +++ b/src/backend/catalog/system_functions.sql > @@ -657,6 +657,12 @@ LANGUAGE INTERNAL > STRICT VOLATILE PARALLEL UNSAFE > AS 'pg_replication_origin_session_setup'; > > +CREATE OR REPLACE FUNCTION > + pg_get_policy_ddl(tableID regclass, policyName name, pretty bool > DEFAULT false) > +RETURNS text > +LANGUAGE INTERNAL > +AS 'pg_get_policy_ddl'; > + > > The partial upper casing above has no effect; it's the same as > ``pg_get_policy_ddl(tableid regclass, policyname name, pretty bool > DEFAULT false)`` > > -- > jian > https://www.enterprisedb.com/ > --00000000000026629c06526811ef Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi hackers,=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 =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

Following the recently committed pg_get_database_ddl(), whi= ch adopted a VARIADIC options text[] style for DDL-reconstruction functions= , here is a patch in the same spirit for row-level security policies.
=

The new function:
=C2=A0 =C2=A0 pg_get_policy= _ddl(table regclass, policy_name name, VARIADIC options text[]) RETURNS set= of text=C2=A0

Reconstructs the CREATE POLICY state= ment for the named policy on the given table, returning the result as a sin= gle row.

The currently supported option is pretty (boolea= n) for formatted output.=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 SELECT * FROM pg_get_policy_ddl('rls_table'= , 'pol1');
=C2=A0 =C2=A0 SELECT * FROM pg_get_policy_ddl('rl= s_table', 'pol1', 'pretty', 'true');

NULL inputs for table or policy_name return no rows. Unknown option= names, invalid boolean values, and duplicate options are reported as=C2=A0= errors consistent with the pattern established by=C2=A0pg_get_database_ddl(= ).

The patch includes documentation updates in func-info.sgml and= =C2=A0regression tests in rowsecurity.sql covering PERMISSIVE/RESTRICTIVE,= =C2=A0each command type (ALL/SELECT/INSERT/UPDATE/DELETE), TO role lists,= =C2=A0both USING and WITH CHECK clauses, pretty/non-pretty output, and=C2= =A0the error paths above.

Patch is ready for revie= w.


On Mon, Jan 5, 2026 at 8:00=E2= =80=AFPM jian he <jian.un= iversality@gmail.com> wrote:
On Thu, Nov 20, 2025 at 5:27=E2=80=AFPM Akshay Joshi <aksh= ay.joshi@enterprisedb.com> wrote:
>
> Attached is the v8 patch for your review, with updated variable names = and a rebase applied.
>
hi.

+=C2=A0 =C2=A0 =C2=A0<tbody>
+=C2=A0 =C2=A0 =C2=A0 <row>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0<entry role=3D"func_table_entry"&g= t;<para role=3D"func_signature">
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 <indexterm>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<primary>pg_get_policy_ddl</pri= mary>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 </indexterm>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 <function>pg_get_policy_ddl</function= >
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 ( <parameter>table</parameter> <= ;type>regclass</type>,
<parameter>policy_name</parameter> <type>name</type>= ;, <optional>
<parameter>pretty</parameter> <type>boolean</type> = </optional> )
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 <returnvalue>text</returnvalue> +=C2=A0 =C2=A0 =C2=A0 =C2=A0</para>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0<para>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 Reconstructs the <command>CREATE POLICY&= lt;/command> statement from the
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 system catalogs for a specified table and poli= cy name. The result is a
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 comprehensive <command>CREATE POLICY<= /command> statement.
+=C2=A0 =C2=A0 =C2=A0 =C2=A0</para></entry>
+=C2=A0 =C2=A0 =C2=A0 </row>
+=C2=A0 =C2=A0 =C2=A0</tbody>

=C2=A0( <parameter>table</parameter> <type>regclass</t= ype> ...
this line is way too long, we can split it into several lines, it
won't affect the appearance.

like:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 <function>pg_get_policy_ddl</function&= gt;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 ( <parameter>table</parameter> <= type>regclass</type>,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 <parameter>policy_name</paramet= er> <type>name</type>,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 <optional> <parameter>pretty= </parameter>
<type>boolean</type> </optional> )
=C2=A0 =C2=A0 =C2=A0 =C2=A0 <returnvalue>text</returnvalue>

Also, the explanation does not mention that the default value of
pretty is false.


index 2d946d6d9e9..a5e22374668 100644
--- a/src/backend/catalog/system_functions.sql
+++ b/src/backend/catalog/system_functions.sql
@@ -657,6 +657,12 @@ LANGUAGE INTERNAL
=C2=A0STRICT VOLATILE PARALLEL UNSAFE
=C2=A0AS 'pg_replication_origin_session_setup';

+CREATE OR REPLACE FUNCTION
+=C2=A0 pg_get_policy_ddl(tableID regclass, policyName name, pretty bool DEFAULT false)
+RETURNS text
+LANGUAGE INTERNAL
+AS 'pg_get_policy_ddl';
+

The partial upper casing above has no effect; it's the same as
``pg_get_policy_ddl(tableid regclass, policyname name, pretty bool
DEFAULT false)``

--
jian
https://www.enterprisedb.com/
--00000000000026629c06526811ef-- --00000000000026629d06526811f1 Content-Type: application/octet-stream; name="v9-0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patch" Content-Disposition: attachment; filename="v9-0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpgykuqg0 RnJvbSBhYWUwZTU4MTgyYjFkY2UxMWU3NzFhMGYxNGRjYzFhYjE0MmY2NDdlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBGcmksIDIyIE1heSAyMDI2IDE4OjE4OjA3ICswNTMwClN1YmplY3Q6IFtQ QVRDSCB2OV0gQWRkIHBnX2dldF9wb2xpY3lfZGRsKCkgZnVuY3Rpb24gdG8gcmVjb25zdHJ1Y3Qg Q1JFQVRFCiBQT0xJQ1kgc3RhdGVtZW50cy4KTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBl OiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhi aXQKClRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXN0ZW0gZnVuY3Rpb246CiAgICBwZ19n ZXRfcG9saWN5X2RkbCh0YWJsZSByZWdjbGFzcywgcG9saWN5X25hbWUgbmFtZSwKICAgICAgIFZB UklBRElDIG9wdGlvbnMgdGV4dFtdKSBSRVRVUk5TIHNldG9mIHRleHQKCndoaWNoIHJlY29uc3Ry dWN0cyB0aGUgQ1JFQVRFIFBPTElDWSBzdGF0ZW1lbnQgZm9yIHRoZSBuYW1lZCByb3ctbGV2ZWwK c2VjdXJpdHkgcG9saWN5IG9uIHRoZSBzcGVjaWZpZWQgdGFibGUuIFRoZSByZXN1bHQgaXMgcmV0 dXJuZWQgYXMgYSBzaW5nbGUgcm93LgrCoApUaGUgc3VwcG9ydGVkIG9wdGlvbiBpczoKCiAgICBw cmV0dHkgKGJvb2xlYW4pIC0gZm9ybWF0IHRoZSBvdXRwdXQgZm9yIHJlYWRhYmlsaXR5LgoKVXNh Z2UgZXhhbXBsZXM6CiAgICAtLSBub24tcHJldHR5IGZvcm1hdHRlZCBEREwgKGRlZmF1bHQpCiAg ICBTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGFibGUnLCAncG9sMScpOwog ICAgU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgxNjU2NCwgJ3BvbDEnKTsKCiAgICAt LSBwcmV0dHkgZm9ybWF0dGVkIERETAogICAgU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2Rk bCgncmxzX3RhYmxlJywgJ3BvbDEnLCAncHJldHR5JywgJ3RydWUnKTsKICAgIFNFTEVDVCAqIEZS T00gcGdfZ2V0X3BvbGljeV9kZGwoMTY1NjQsICdwb2wxJywgJ3ByZXR0eScsICd0cnVlJyk7CgpS ZWZlcmVuY2U6IFBHLTE2MwpBdXRob3I6IEFrc2hheSBKb3NoaSA8YWtzaGF5Lmpvc2hpQGVudGVy cHJpc2VkYi5jb20+Ci0tLQogZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwgICAgICAg ICAgfCAgMjAgKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jICAgICAgICAgIHwg MjYyICsrKysrKysrKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQgICAgICAgICAgIHwgICA4ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcm93c2VjdXJp dHkub3V0IHwgMTkzICsrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jvd3Nl Y3VyaXR5LnNxbCAgICAgIHwgIDg3ICsrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgNTcwIGluc2Vy dGlvbnMoKykKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbCBi L2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sCmluZGV4IDAwZjY0ZjUwY2ViLi40NGJm NjQ1NWJiMSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwKKysr IGIvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwKQEAgLTM5NjEsNiArMzk2MSwyNiBA QCBhY2wgICAgICB8IHtwb3N0Z3Jlcz1hcndkRHh0bS9wb3N0Z3Jlcyxmb289ci9wb3N0Z3Jlc30K ICAgICAgICAgPGxpdGVyYWw+VEFCTEVTUEFDRTwvbGl0ZXJhbD4uCiAgICAgICAgPC9wYXJhPjwv ZW50cnk+CiAgICAgICA8L3Jvdz4KKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5IHJvbGU9ImZ1 bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAgPGlu ZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5PnBnX2dldF9wb2xpY3lfZGRsPC9wcmltYXJ5Pgor ICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9uPnBnX2dldF9wb2xpY3lfZGRs PC9mdW5jdGlvbj4KKyAgICAgICAgKCA8cGFyYW1ldGVyPnRhYmxlPC9wYXJhbWV0ZXI+IDx0eXBl PnJlZ2NsYXNzPC90eXBlPiwKKyAgICAgICAgPHBhcmFtZXRlcj5wb2xpY3lfbmFtZTwvcGFyYW1l dGVyPiA8dHlwZT5uYW1lPC90eXBlPgorICAgICAgICA8b3B0aW9uYWw+LCA8bGl0ZXJhbD5WQVJJ QURJQzwvbGl0ZXJhbD4gPHBhcmFtZXRlcj5vcHRpb25zPC9wYXJhbWV0ZXI+CisgICAgICAgIDx0 eXBlPnRleHQ8L3R5cGU+IDwvb3B0aW9uYWw+ICkKKyAgICAgICAgPHJldHVybnZhbHVlPnNldG9m IHRleHQ8L3JldHVybnZhbHVlPgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAg ICAgUmVjb25zdHJ1Y3RzIHRoZSA8Y29tbWFuZD5DUkVBVEUgUE9MSUNZPC9jb21tYW5kPiBzdGF0 ZW1lbnQgZm9yIHRoZQorICAgICAgICBuYW1lZCByb3ctbGV2ZWwgc2VjdXJpdHkgcG9saWN5IG9u IHRoZSBzcGVjaWZpZWQgdGFibGUuICBUaGUgcmVzdWx0CisgICAgICAgIGlzIHJldHVybmVkIGFz IGEgc2luZ2xlIHJvdy4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBvcHRpb24gaXMgc3VwcG9ydGVk OiA8bGl0ZXJhbD5wcmV0dHk8L2xpdGVyYWw+CisgICAgICAgIChib29sZWFuKSBmb3IgZm9ybWF0 dGVkIG91dHB1dC4KKyAgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgIDwvcm93PgogICAgICA8 L3Rib2R5PgogICAgIDwvdGdyb3VwPgogICAgPC90YWJsZT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2RkbHV0aWxz LmMKaW5kZXggZjMyZmNkNDUzZWYuLjcyOGQzNjQ4OTc5IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQvZGRsdXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZGRsdXRp bHMuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYXRhYmFzZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdf ZGJfcm9sZV9zZXR0aW5nLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wb2xpY3kuaCIKICNpbmNs dWRlICJjYXRhbG9nL3BnX3RhYmxlc3BhY2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNw YWNlLmgiCiAjaW5jbHVkZSAiY29tbW9uL3JlbHBhdGguaCIKQEAgLTg2LDYgKzg3LDkgQEAgc3Rh dGljIExpc3QgKnBnX2dldF90YWJsZXNwYWNlX2RkbF9pbnRlcm5hbChPaWQgdHNpZCwgYm9vbCBw cmV0dHksIGJvb2wgbm9fb3duZXIKIHN0YXRpYyBEYXR1bSBwZ19nZXRfdGFibGVzcGFjZV9kZGxf c3JmKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBPaWQgdHNpZCwgYm9vbCBpc251bGwpOwogc3Rh dGljIExpc3QgKnBnX2dldF9kYXRhYmFzZV9kZGxfaW50ZXJuYWwoT2lkIGRiaWQsIGJvb2wgcHJl dHR5LAogCQkJCQkJCQkJCSAgYm9vbCBub19vd25lciwgYm9vbCBub190YWJsZXNwYWNlKTsKK3N0 YXRpYyBMaXN0ICpwZ19nZXRfcG9saWN5X2RkbF9pbnRlcm5hbChPaWQgdGFibGVJRCwgY29uc3Qg Y2hhciAqcG9saWN5TmFtZSwKKwkJCQkJCQkJCQlib29sIHByZXR0eSk7CitzdGF0aWMgY29uc3Qg Y2hhciAqZ2V0X3BvbGljeV9jbWRfbmFtZShjaGFyIGNtZCk7CiAKIAogLyoKQEAgLTExODUsMyAr MTE4OSwyNjEgQEAgcGdfZ2V0X2RhdGFiYXNlX2RkbChQR19GVU5DVElPTl9BUkdTKQogCQlTUkZf UkVUVVJOX0RPTkUoZnVuY2N0eCk7CiAJfQogfQorCisvKgorICogZ2V0X3BvbGljeV9jbWRfbmFt ZQorICoJCU1hcCBhIHBnX3BvbGljeS5wb2xjbWQgY2hhciB0byBpdHMgU1FMIGtleXdvcmQuCisg Ki8KK3N0YXRpYyBjb25zdCBjaGFyICoKK2dldF9wb2xpY3lfY21kX25hbWUoY2hhciBjbWQpCit7 CisJc3dpdGNoIChjbWQpCisJeworCQljYXNlICcqJzoKKwkJCXJldHVybiAiQUxMIjsKKwkJY2Fz ZSBBQ0xfU0VMRUNUX0NIUjoKKwkJCXJldHVybiAiU0VMRUNUIjsKKwkJY2FzZSBBQ0xfSU5TRVJU X0NIUjoKKwkJCXJldHVybiAiSU5TRVJUIjsKKwkJY2FzZSBBQ0xfVVBEQVRFX0NIUjoKKwkJCXJl dHVybiAiVVBEQVRFIjsKKwkJY2FzZSBBQ0xfREVMRVRFX0NIUjoKKwkJCXJldHVybiAiREVMRVRF IjsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgcG9saWN5IGNvbW1h bmQ6ICVkIiwgKGludCkgY21kKTsKKwl9Cit9CisKKy8qCisgKiBwZ19nZXRfcG9saWN5X2RkbF9p bnRlcm5hbAorICoJCUdlbmVyYXRlIHRoZSBEREwgc3RhdGVtZW50IHRvIHJlY3JlYXRlIGEgcm93 LWxldmVsIHNlY3VyaXR5IHBvbGljeS4KKyAqCisgKiBSZXR1cm5zIGEgTGlzdCBjb250YWluaW5n IGEgc2luZ2xlIHBhbGxvYydkIHN0cmluZyB3aXRoIHRoZSBDUkVBVEUgUE9MSUNZCisgKiBzdGF0 ZW1lbnQuICBSZXR1cm5pbmcgYSBMaXN0IGtlZXBzIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gY29u c2lzdGVudCB3aXRoCisgKiB0aGUgcmVzdCBvZiB0aGUgcGdfZ2V0XypfZGRsIGZhbWlseSBldmVu IHRob3VnaCBvbmx5IG9uZSByb3cgaXMgcHJvZHVjZWQuCisgKi8KK3N0YXRpYyBMaXN0ICoKK3Bn X2dldF9wb2xpY3lfZGRsX2ludGVybmFsKE9pZCB0YWJsZUlELCBjb25zdCBjaGFyICpwb2xpY3lO YW1lLCBib29sIHByZXR0eSkKK3sKKwlSZWxhdGlvbglwZ1BvbGljeVJlbDsKKwlIZWFwVHVwbGUJ dHVwbGVQb2xpY3k7CisJRm9ybV9wZ19wb2xpY3kgcG9saWN5Rm9ybTsKKwlTY2FuS2V5RGF0YSBz a2V5WzJdOworCVN5c1NjYW5EZXNjIHNzY2FuOworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwlEYXR1 bQkJdmFsdWVEYXR1bTsKKwlib29sCQlhdHRySXNOdWxsOworCWNoYXIJICAgKnRhcmdldFRhYmxl OworCUxpc3QJICAgKnN0YXRlbWVudHMgPSBOSUw7CisKKwkvKiBWYWxpZGF0ZSB0aGF0IHRoZSBy ZWxhdGlvbiBleGlzdHMgKi8KKwl7CisJCWNoYXIJICAgKnJlbG5hbWUgPSBnZXRfcmVsX25hbWUo dGFibGVJRCk7CisJCWNoYXIJICAgKm5zcG5hbWU7CisKKwkJaWYgKHJlbG5hbWUgPT0gTlVMTCkK KwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX1RBQkxF KSwKKwkJCQkJIGVycm1zZygicmVsYXRpb24gd2l0aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLCB0 YWJsZUlEKSkpOworCisJCW5zcG5hbWUgPSBnZXRfbmFtZXNwYWNlX25hbWUoZ2V0X3JlbF9uYW1l c3BhY2UodGFibGVJRCkpOworCQlpZiAobnNwbmFtZSA9PSBOVUxMKQorCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfU0NIRU1BKSwKKwkJCQkJIGVycm1z Zygic2NoZW1hIGZvciByZWxhdGlvbiB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsCisJCQkJ CQkJdGFibGVJRCkpKTsKKworCQl0YXJnZXRUYWJsZSA9IHF1b3RlX3F1YWxpZmllZF9pZGVudGlm aWVyKG5zcG5hbWUsIHJlbG5hbWUpOworCQlwZnJlZShyZWxuYW1lKTsKKwkJcGZyZWUobnNwbmFt ZSk7CisJfQorCisJcGdQb2xpY3lSZWwgPSB0YWJsZV9vcGVuKFBvbGljeVJlbGF0aW9uSWQsIEFj Y2Vzc1NoYXJlTG9jayk7CisKKwkvKiBTZXQga2V5IC0gcG9saWN5J3MgcmVsYXRpb24gaWQuICov CisJU2NhbktleUluaXQoJnNrZXlbMF0sCisJCQkJQW51bV9wZ19wb2xpY3lfcG9scmVsaWQsCisJ CQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0o dGFibGVJRCkpOworCisJLyogU2V0IGtleSAtIHBvbGljeSdzIG5hbWUuICovCisJU2NhbktleUlu aXQoJnNrZXlbMV0sCisJCQkJQW51bV9wZ19wb2xpY3lfcG9sbmFtZSwKKwkJCQlCVEVxdWFsU3Ry YXRlZ3lOdW1iZXIsIEZfTkFNRUVRLAorCQkJCUNTdHJpbmdHZXREYXR1bShwb2xpY3lOYW1lKSk7 CisKKwlzc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihwZ1BvbGljeVJlbCwKKwkJCQkJCQkgICBQ b2xpY3lQb2xyZWxpZFBvbG5hbWVJbmRleElkLCB0cnVlLCBOVUxMLCAyLAorCQkJCQkJCSAgIHNr ZXkpOworCisJdHVwbGVQb2xpY3kgPSBzeXN0YWJsZV9nZXRuZXh0KHNzY2FuKTsKKwlpZiAoIUhl YXBUdXBsZUlzVmFsaWQodHVwbGVQb2xpY3kpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJj b2RlKEVSUkNPREVfVU5ERUZJTkVEX09CSkVDVCksCisJCQkJIGVycm1zZygicG9saWN5IFwiJXNc IiBmb3IgdGFibGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0IiwKKwkJCQkJCXBvbGljeU5hbWUsIHRh cmdldFRhYmxlKSkpOworCisJcG9saWN5Rm9ybSA9IChGb3JtX3BnX3BvbGljeSkgR0VUU1RSVUNU KHR1cGxlUG9saWN5KTsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCisJLyogQnVpbGQgdGhl IENSRUFURSBQT0xJQ1kgc3RhdGVtZW50ICovCisJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiQ1JF QVRFIFBPTElDWSAlcyBPTiAlcyIsCisJCQkJCSBxdW90ZV9pZGVudGlmaWVyKHBvbGljeU5hbWUp LAorCQkJCQkgdGFyZ2V0VGFibGUpOworCisJLyoKKwkgKiBFbWl0IEFTIFJFU1RSSUNUSVZFIG9u bHkgd2hlbiBpdCBkaWZmZXJzIGZyb20gdGhlIGRlZmF1bHQgKFBFUk1JU1NJVkUpLgorCSAqLwor CWlmICghcG9saWN5Rm9ybS0+cG9scGVybWlzc2l2ZSkKKwkJYXBwZW5kX2RkbF9vcHRpb24oJmJ1 ZiwgcHJldHR5LCA0LCAiQVMgUkVTVFJJQ1RJVkUiKTsKKworCS8qCisJICogRW1pdCBGT1IgPGNt ZD4gb25seSB3aGVuIGl0IGRpZmZlcnMgZnJvbSB0aGUgZGVmYXVsdCAoQUxMLCBlbmNvZGVkIGFz CisJICogJyonKS4KKwkgKi8KKwlpZiAocG9saWN5Rm9ybS0+cG9sY21kICE9ICcqJykKKwkJYXBw ZW5kX2RkbF9vcHRpb24oJmJ1ZiwgcHJldHR5LCA0LCAiRk9SICVzIiwKKwkJCQkJCSAgZ2V0X3Bv bGljeV9jbWRfbmFtZShwb2xpY3lGb3JtLT5wb2xjbWQpKTsKKworCS8qCisJICogRW1pdCBUTyA8 cm9sZXM+IG9ubHkgd2hlbiBpdCBkaWZmZXJzIGZyb20gdGhlIGRlZmF1bHQgKFBVQkxJQykuICBQ VUJMSUMKKwkgKiBpcyBlbmNvZGVkIGluIHBvbHJvbGVzIGFzIGEgc2luZ2xlIEludmFsaWRPaWQg ZWxlbWVudCwgc28gd2Ugb21pdCB0aGUKKwkgKiBjbGF1c2Ugd2hlbmV2ZXIgZXZlcnkgZW50cnkg aXMgSW52YWxpZE9pZC4KKwkgKi8KKwl2YWx1ZURhdHVtID0gaGVhcF9nZXRhdHRyKHR1cGxlUG9s aWN5LAorCQkJCQkJCSAgQW51bV9wZ19wb2xpY3lfcG9scm9sZXMsCisJCQkJCQkJICBSZWxhdGlv bkdldERlc2NyKHBnUG9saWN5UmVsKSwKKwkJCQkJCQkgICZhdHRySXNOdWxsKTsKKwlpZiAoIWF0 dHJJc051bGwpCisJeworCQlBcnJheVR5cGUgICpwb2xpY3lfcm9sZXMgPSBEYXR1bUdldEFycmF5 VHlwZVBDb3B5KHZhbHVlRGF0dW0pOworCQlpbnQJCQluaXRlbXMgPSBBUlJfRElNUyhwb2xpY3lf cm9sZXMpWzBdOworCQlPaWQJCSAgICpyb2xlcyA9IChPaWQgKikgQVJSX0RBVEFfUFRSKHBvbGlj eV9yb2xlcyk7CisJCVN0cmluZ0luZm9EYXRhIHJvbGVfbmFtZXM7CisKKwkJaW5pdFN0cmluZ0lu Zm8oJnJvbGVfbmFtZXMpOworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbml0ZW1zOyBpKyspCisJ CXsKKwkJCWlmIChPaWRJc1ZhbGlkKHJvbGVzW2ldKSkKKwkJCXsKKwkJCQljaGFyCSAgICpyb2xl bmFtZSA9IEdldFVzZXJOYW1lRnJvbUlkKHJvbGVzW2ldLCBmYWxzZSk7CisKKwkJCQlpZiAocm9s ZV9uYW1lcy5sZW4gPiAwKQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZyb2xlX25hbWVz LCAiLCAiKTsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZyb2xlX25hbWVzLCBxdW90ZV9p ZGVudGlmaWVyKHJvbGVuYW1lKSk7CisJCQl9CisJCX0KKworCQlpZiAocm9sZV9uYW1lcy5sZW4g PiAwKQorCQkJYXBwZW5kX2RkbF9vcHRpb24oJmJ1ZiwgcHJldHR5LCA0LCAiVE8gJXMiLCByb2xl X25hbWVzLmRhdGEpOworCisJCXBmcmVlKHJvbGVfbmFtZXMuZGF0YSk7CisJCXBmcmVlKHBvbGlj eV9yb2xlcyk7CisJfQorCisJLyogVVNJTkcgZXhwcmVzc2lvbiAqLworCXZhbHVlRGF0dW0gPSBo ZWFwX2dldGF0dHIodHVwbGVQb2xpY3ksCisJCQkJCQkJICBBbnVtX3BnX3BvbGljeV9wb2xxdWFs LAorCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihwZ1BvbGljeVJlbCksCisJCQkJCQkJICAmYXR0 cklzTnVsbCk7CisJaWYgKCFhdHRySXNOdWxsKQorCXsKKwkJRGF0dW0JCWV4cHI7CisKKwkJZXhw ciA9IERpcmVjdEZ1bmN0aW9uQ2FsbDMocGdfZ2V0X2V4cHJfZXh0LAorCQkJCQkJCQkgICB2YWx1 ZURhdHVtLAorCQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKHBvbGljeUZvcm0tPnBvbHJlbGlk KSwKKwkJCQkJCQkJICAgQm9vbEdldERhdHVtKHByZXR0eSkpOworCQlhcHBlbmRfZGRsX29wdGlv bigmYnVmLCBwcmV0dHksIDQsICJVU0lORyAoJXMpIiwKKwkJCQkJCSAgVGV4dERhdHVtR2V0Q1N0 cmluZyhleHByKSk7CisJfQorCisJLyogV0lUSCBDSEVDSyBleHByZXNzaW9uICovCisJdmFsdWVE YXR1bSA9IGhlYXBfZ2V0YXR0cih0dXBsZVBvbGljeSwKKwkJCQkJCQkgIEFudW1fcGdfcG9saWN5 X3BvbHdpdGhjaGVjaywKKwkJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3IocGdQb2xpY3lSZWwpLAor CQkJCQkJCSAgJmF0dHJJc051bGwpOworCWlmICghYXR0cklzTnVsbCkKKwl7CisJCURhdHVtCQll eHByOworCisJCWV4cHIgPSBEaXJlY3RGdW5jdGlvbkNhbGwzKHBnX2dldF9leHByX2V4dCwKKwkJ CQkJCQkJICAgdmFsdWVEYXR1bSwKKwkJCQkJCQkJICAgT2JqZWN0SWRHZXREYXR1bShwb2xpY3lG b3JtLT5wb2xyZWxpZCksCisJCQkJCQkJCSAgIEJvb2xHZXREYXR1bShwcmV0dHkpKTsKKwkJYXBw ZW5kX2RkbF9vcHRpb24oJmJ1ZiwgcHJldHR5LCA0LCAiV0lUSCBDSEVDSyAoJXMpIiwKKwkJCQkJ CSAgVGV4dERhdHVtR2V0Q1N0cmluZyhleHByKSk7CisJfQorCisJYXBwZW5kU3RyaW5nSW5mb0No YXIoJmJ1ZiwgJzsnKTsKKworCXN0YXRlbWVudHMgPSBsYXBwZW5kKHN0YXRlbWVudHMsIHBzdHJk dXAoYnVmLmRhdGEpKTsKKworCXN5c3RhYmxlX2VuZHNjYW4oc3NjYW4pOworCXRhYmxlX2Nsb3Nl KHBnUG9saWN5UmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCXBmcmVlKGJ1Zi5kYXRhKTsKKworCXJl dHVybiBzdGF0ZW1lbnRzOworfQorCisvKgorICogcGdfZ2V0X3BvbGljeV9kZGwKKyAqCQlSZXR1 cm4gRERMIHRvIHJlY3JlYXRlIGEgcm93LWxldmVsIHNlY3VyaXR5IHBvbGljeSBhcyBhIHNpbmds ZSB0ZXh0IHJvdy4KKyAqLworRGF0dW0KK3BnX2dldF9wb2xpY3lfZGRsKFBHX0ZVTkNUSU9OX0FS R1MpCit7CisJRnVuY0NhbGxDb250ZXh0ICpmdW5jY3R4OworCUxpc3QJICAgKnN0YXRlbWVudHM7 CisKKwlpZiAoU1JGX0lTX0ZJUlNUQ0FMTCgpKQorCXsKKwkJTWVtb3J5Q29udGV4dCBvbGRjb250 ZXh0OworCQlPaWQJCQl0YWJsZUlEOworCQlOYW1lCQlwb2xpY3lOYW1lOworCQlEZGxPcHRpb24J b3B0c1tdID0geworCQkJeyJwcmV0dHkiLCBERExfT1BUX0JPT0x9LAorCQl9OworCisJCWZ1bmNj dHggPSBTUkZfRklSU1RDQUxMX0lOSVQoKTsKKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhmdW5jY3R4LT5tdWx0aV9jYWxsX21lbW9yeV9jdHgpOworCisJCWlmIChQR19BUkdJ U05VTEwoMCkgfHwgUEdfQVJHSVNOVUxMKDEpKQorCQl7CisJCQlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY29udGV4dCk7CisJCQlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7CisJCX0KKworCQl0 YWJsZUlEID0gUEdfR0VUQVJHX09JRCgwKTsKKwkJcG9saWN5TmFtZSA9IFBHX0dFVEFSR19OQU1F KDEpOworCisJCXBhcnNlX2RkbF9vcHRpb25zKGZjaW5mbywgMiwgb3B0cywgbGVuZ3Rob2Yob3B0 cykpOworCisJCXN0YXRlbWVudHMgPSBwZ19nZXRfcG9saWN5X2RkbF9pbnRlcm5hbCh0YWJsZUlE LAorCQkJCQkJCQkJCQkJTmFtZVN0cigqcG9saWN5TmFtZSksCisJCQkJCQkJCQkJCQlvcHRzWzBd Lmlzc2V0ICYmIG9wdHNbMF0uYm9vbHZhbCk7CisJCWZ1bmNjdHgtPnVzZXJfZmN0eCA9IHN0YXRl bWVudHM7CisJCWZ1bmNjdHgtPm1heF9jYWxscyA9IGxpc3RfbGVuZ3RoKHN0YXRlbWVudHMpOwor CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwl9CisKKwlmdW5jY3R4ID0g U1JGX1BFUkNBTExfU0VUVVAoKTsKKwlzdGF0ZW1lbnRzID0gKExpc3QgKikgZnVuY2N0eC0+dXNl cl9mY3R4OworCisJaWYgKGZ1bmNjdHgtPmNhbGxfY250ciA8IGZ1bmNjdHgtPm1heF9jYWxscykK Kwl7CisJCWNoYXIJICAgKnN0bXQ7CisKKwkJc3RtdCA9IGxpc3RfbnRoKHN0YXRlbWVudHMsIGZ1 bmNjdHgtPmNhbGxfY250cik7CisKKwkJU1JGX1JFVFVSTl9ORVhUKGZ1bmNjdHgsIENTdHJpbmdH ZXRUZXh0RGF0dW0oc3RtdCkpOworCX0KKwllbHNlCisJeworCQlsaXN0X2ZyZWVfZGVlcChzdGF0 ZW1lbnRzKTsKKwkJU1JGX1JFVFVSTl9ET05FKGZ1bmNjdHgpOworCX0KK30KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3Byb2MuZGF0CmluZGV4IGJlMTU3YTVmYmU5Li4zZTMyYzg5ZmQ2ZCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3Byb2MuZGF0CkBAIC04NjE1LDYgKzg2MTUsMTQgQEAKICAgcHJvYXJndHlwZXMgPT4gJ3JlZ2Rh dGFiYXNlIHRleHQnLCBwcm9hbGxhcmd0eXBlcyA9PiAne3JlZ2RhdGFiYXNlLHRleHR9JywKICAg cHJvYXJnbW9kZXMgPT4gJ3tpLHZ9JywgcHJvYXJnZGVmYXVsdHMgPT4gJ3tOVUxMfScsCiAgIHBy b3NyYyA9PiAncGdfZ2V0X2RhdGFiYXNlX2RkbCcgfSwKK3sgb2lkID0+ICc2NTE3JywgZGVzY3Ig PT4gJ2dldCBEREwgdG8gcmVjcmVhdGUgYSByb3ctbGV2ZWwgc2VjdXJpdHkgcG9saWN5JywKKyAg cHJvbmFtZSA9PiAncGdfZ2V0X3BvbGljeV9kZGwnLCBwcm9yb3dzID0+ICcxJywgcHJvdmFyaWFk aWMgPT4gJ3RleHQnLAorICBwcm9pc3N0cmljdCA9PiAnZicsIHByb3JldHNldCA9PiAndCcsIHBy b3ZvbGF0aWxlID0+ICdzJywKKyAgcHJvbmFyZ2RlZmF1bHRzID0+ICcxJywgcHJvcmV0dHlwZSA9 PiAndGV4dCcsCisgIHByb2FyZ3R5cGVzID0+ICdyZWdjbGFzcyBuYW1lIHRleHQnLAorICBwcm9h bGxhcmd0eXBlcyA9PiAne3JlZ2NsYXNzLG5hbWUsdGV4dH0nLAorICBwcm9hcmdtb2RlcyA9PiAn e2ksaSx2fScsIHByb2FyZ2RlZmF1bHRzID0+ICd7TlVMTH0nLAorICBwcm9zcmMgPT4gJ3BnX2dl dF9wb2xpY3lfZGRsJyB9LAogeyBvaWQgPT4gJzI1MDknLAogICBkZXNjciA9PiAnZGVwYXJzZSBh biBlbmNvZGVkIGV4cHJlc3Npb24gd2l0aCBwcmV0dHktcHJpbnQgb3B0aW9uJywKICAgcHJvbmFt ZSA9PiAncGdfZ2V0X2V4cHInLCBwcm92b2xhdGlsZSA9PiAncycsIHByb3JldHR5cGUgPT4gJ3Rl eHQnLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9yb3dzZWN1cml0eS5v dXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Jvd3NlY3VyaXR5Lm91dAppbmRleCAzYTVl ODJjMzViZC4uOWEyMDUzNjU4NGQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcm93c2VjdXJpdHkub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcm93c2Vj dXJpdHkub3V0CkBAIC01MTk1LDYgKzUxOTUsMTk5IEBAIHJlc2V0IHJsc190ZXN0LmJsYWg7CiBk cm9wIGZ1bmN0aW9uIHJsc19mKHRleHQpOwogZHJvcCB0YWJsZSBybHNfdCwgdGVzdF90OwogLS0K Ky0tIFRlc3QgZm9yIHBnX2dldF9wb2xpY3lfZGRsKHRhYmxlLCBwb2xpY3lfbmFtZSwgVkFSSUFE SUMgb3B0aW9ucykgZnVuY3Rpb24uCistLQorQ1JFQVRFIFRBQkxFIHJsc190YmxfMSAoCisgICAg ZGlkICAgICAgICAgaW50IHByaW1hcnkga2V5LAorICAgIGNpZCAgICAgICAgIGludCwKKyAgICBk bGV2ZWwgICAgICBpbnQgbm90IG51bGwsCisgICAgZGF1dGhvciAgICAgbmFtZSwKKyAgICBkdGl0 bGUgICAgICB0ZXh0CispOworR1JBTlQgQUxMIE9OIHJsc190YmxfMSBUTyBwdWJsaWM7CitDUkVB VEUgVEFCTEUgcmxzX3RibF8yICgKKyAgICBwZ3VzZXIgICAgICBuYW1lIHByaW1hcnkga2V5LAor ICAgIHNlY2x2ICAgICAgIGludAorKTsKK0dSQU5UIFNFTEVDVCBPTiBybHNfdGJsXzIgVE8gcHVi bGljOworLS0gVGVzdCBQRVJNSVNTSVZFIGFuZCBSRVNUUklDVElWRQorQ1JFQVRFIFBPTElDWSBy bHNfcDEgT04gcmxzX3RibF8xIEFTIFBFUk1JU1NJVkUKKyAgICBVU0lORyAoZGxldmVsIDw9IChT RUxFQ1Qgc2VjbHYgRlJPTSBybHNfdGJsXzIgV0hFUkUgcGd1c2VyID0gY3VycmVudF91c2VyKSk7 CitDUkVBVEUgUE9MSUNZIHJsc19wMiBPTiBybHNfdGJsXzEgQVMgUkVTVFJJQ1RJVkUgVVNJTkcg KGNpZCA8PiA0NCBBTkQgY2lkIDwgNTApOworLS0gVGVzdCBGT1IgQUxMIHwgU0VMRUNUIHwgSU5T RVJUIHwgVVBEQVRFIHwgREVMRVRFCitDUkVBVEUgUE9MSUNZIHJsc19wMyBPTiBybHNfdGJsXzEg Rk9SIEFMTCBVU0lORyAoZGF1dGhvciA9IGN1cnJlbnRfdXNlcik7CitDUkVBVEUgUE9MSUNZIHJs c19wNCBPTiBybHNfdGJsXzEgRk9SIFNFTEVDVCBVU0lORyAoY2lkICUgMiA9IDApOworQ1JFQVRF IFBPTElDWSBybHNfcDUgT04gcmxzX3RibF8xIEZPUiBJTlNFUlQgV0lUSCBDSEVDSyAoY2lkICUg MiA9IDEpOworQ1JFQVRFIFBPTElDWSBybHNfcDYgT04gcmxzX3RibF8xIEZPUiBVUERBVEUgVVNJ TkcgKGNpZCAlIDIgPSAwKTsKK0NSRUFURSBQT0xJQ1kgcmxzX3A3IE9OIHJsc190YmxfMSBGT1Ig REVMRVRFIFVTSU5HIChjaWQgPCA4KTsKKy0tIFRlc3QgVE8geyByb2xlX25hbWUgLi4uIH0KK0NS RUFURSBQT0xJQ1kgcmxzX3A4IE9OIHJsc190YmxfMSBUTyByZWdyZXNzX3Jsc19kYXZlLCByZWdy ZXNzX3Jsc19hbGljZSBVU0lORyAodHJ1ZSk7CitDUkVBVEUgUE9MSUNZIHJsc19wOSBPTiBybHNf dGJsXzEgVE8gcmVncmVzc19ybHNfZXhlbXB0X3VzZXIgV0lUSCBDSEVDSyAoY2lkID0gKFNFTEVD VCBzZWNsdiBGUk9NIHJsc190YmxfMikpOworLS0gTlVMTCBpbnB1dHMgc2hvdWxkIHJldHVybiBu byByb3dzCitTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19nZXRfcG9saWN5X2RkbChOVUxMLCAncmxz X3AxJyk7CisgY291bnQgCistLS0tLS0tCisgICAgIDAKKygxIHJvdykKKworU0VMRUNUIGNvdW50 KCopIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsIE5VTEwpOworIGNvdW50IAor LS0tLS0tLQorICAgICAwCisoMSByb3cpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHBnX2dldF9w b2xpY3lfZGRsKE5VTEwsIE5VTEwpOworIGNvdW50IAorLS0tLS0tLQorICAgICAwCisoMSByb3cp CisKKy0tIFRhYmxlIGRvZXMgbm90IGV4aXN0CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lf ZGRsKCdub25leGlzdGVudF90YmwnLCAncmxzX3AxJyk7CitFUlJPUjogIHJlbGF0aW9uICJub25l eGlzdGVudF90YmwiIGRvZXMgbm90IGV4aXN0CitMSU5FIDE6IFNFTEVDVCAqIEZST00gcGdfZ2V0 X3BvbGljeV9kZGwoJ25vbmV4aXN0ZW50X3RibCcsICdybHNfcDEnKS4uLgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKy0tIFBvbGljeSBkb2VzIG5vdCBleGlzdAor U0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ25vbmV4aXN0ZW50 X3BvbCcpOworRVJST1I6ICBwb2xpY3kgIm5vbmV4aXN0ZW50X3BvbCIgZm9yIHRhYmxlICJyZWdy ZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xIiBkb2VzIG5vdCBleGlzdAorLS0gSW52YWxpZCBvcHRp b24gbmFtZQorU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Js c19wMScsICdiYWRvcHQnLCAndHJ1ZScpOworRVJST1I6ICB1bnJlY29nbml6ZWQgb3B0aW9uOiAi YmFkb3B0IgorLS0gSW52YWxpZCBib29sZWFuIHZhbHVlIGZvciBvcHRpb24KK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDEnLCAncHJldHR5JywgJ21h eWJlJyk7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIGJvb2xlYW4gb3B0aW9uICJwcmV0dHki OiBtYXliZQorLS0gRHVwbGljYXRlIG9wdGlvbgorU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5 X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMScsICdwcmV0dHknLCAndHJ1ZScsICdwcmV0dHknLCAn ZmFsc2UnKTsKK0VSUk9SOiAgb3B0aW9uICJwcmV0dHkiIGlzIHNwZWNpZmllZCBtb3JlIHRoYW4g b25jZQorLS0gV2l0aG91dCBwcmV0dHkgZm9ybWF0dGluZyAoZGVmYXVsdCkKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDEnKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfcG9saWN5X2RkbCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgUE9MSUNZIHJsc19wMSBPTiByZWdyZXNzX3Jsc19zY2hl bWEucmxzX3RibF8xIFVTSU5HICgoZGxldmVsIDw9ICggU0VMRUNUIHJsc190YmxfMi5zZWNsdisK KyAgICBGUk9NIHJsc190YmxfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgIFdIRVJFIChybHNf dGJsXzIucGd1c2VyID0gQ1VSUkVOVF9VU0VSKSkpKTsKKygxIHJvdykKKworU0VMRUNUICogRlJP TSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMicpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3BvbGljeV9kZGwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFBPTElDWSBybHNfcDIg T04gcmVncmVzc19ybHNfc2NoZW1hLnJsc190YmxfMSBBUyBSRVNUUklDVElWRSBVU0lORyAoKChj aWQgPD4gNDQpIEFORCAoY2lkIDwgNTApKSk7CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDMnKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGdfZ2V0X3BvbGljeV9kZGwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUg UE9MSUNZIHJsc19wMyBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xIFVTSU5HICgoZGF1 dGhvciA9IENVUlJFTlRfVVNFUikpOworKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9w b2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A0Jyk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwZ19nZXRfcG9saWN5X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBQ T0xJQ1kgcmxzX3A0IE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEgRk9SIFNFTEVDVCBV U0lORyAoKChjaWQgJSAyKSA9IDApKTsKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBwZ19nZXRf cG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNScpOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGdfZ2V0X3BvbGljeV9kZGwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQ1JFQVRFIFBPTElDWSBybHNfcDUgT04gcmVncmVzc19ybHNfc2NoZW1hLnJsc190YmxfMSBG T1IgSU5TRVJUIFdJVEggQ0hFQ0sgKCgoY2lkICUgMikgPSAxKSk7CisoMSByb3cpCisKK1NFTEVD VCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDYnLCAncHJldHR5 JywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRf cG9saWN5X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBQT0xJQ1kgcmxzX3A2IE9OIHJlZ3Jl c3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEgRk9SIFVQREFURSBVU0lORyAoKChjaWQgJSAyKSA9IDAp KTsKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8x JywgJ3Jsc19wNycsICdwcmV0dHknLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBnX2dldF9wb2xpY3lfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFBPTElDWSBybHNfcDcg T04gcmVncmVzc19ybHNfc2NoZW1hLnJsc190YmxfMSBGT1IgREVMRVRFIFVTSU5HICgoY2lkIDwg OCkpOworKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJs XzEnLCAncmxzX3A4JywgJ3ByZXR0eScsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3BvbGljeV9kZGwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFBPTElDWSBybHNfcDggT04gcmVncmVz c19ybHNfc2NoZW1hLnJsc190YmxfMSBUTyByZWdyZXNzX3Jsc19kYXZlLCByZWdyZXNzX3Jsc19h bGljZSBVU0lORyAodHJ1ZSk7CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGlj eV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDknLCAncHJldHR5JywgJ2ZhbHNlJyk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfcG9s aWN5X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgUE9MSUNZIHJsc19wOSBPTiByZWdyZXNzX3Jsc19z Y2hlbWEucmxzX3RibF8xIFRPIHJlZ3Jlc3NfcmxzX2V4ZW1wdF91c2VyIFdJVEggQ0hFQ0sgKChj aWQgPSAoIFNFTEVDVCBybHNfdGJsXzIuc2VjbHYrCisgICAgRlJPTSBybHNfdGJsXzIpKSk7Ciso MSByb3cpCisKKy0tIFdpdGggcHJldHR5IGZvcm1hdHRpbmcKK1xwc2V0IGZvcm1hdCB1bmFsaWdu ZWQKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDEn LCAncHJldHR5JywgJ3RydWUnKTsKK3BnX2dldF9wb2xpY3lfZGRsCitDUkVBVEUgUE9MSUNZIHJs c19wMSBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xCisgICAgVVNJTkcgKGRsZXZlbCA8 PSAoKCBTRUxFQ1QgcmxzX3RibF8yLnNlY2x2CisgICBGUk9NIHJsc190YmxfMgorICBXSEVSRSBy bHNfdGJsXzIucGd1c2VyID0gQ1VSUkVOVF9VU0VSKSkpOworKDEgcm93KQorU0VMRUNUICogRlJP TSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMicsICdwcmV0dHknLCAndHJ1 ZScpOworcGdfZ2V0X3BvbGljeV9kZGwKK0NSRUFURSBQT0xJQ1kgcmxzX3AyIE9OIHJlZ3Jlc3Nf cmxzX3NjaGVtYS5ybHNfdGJsXzEKKyAgICBBUyBSRVNUUklDVElWRQorICAgIFVTSU5HIChjaWQg PD4gNDQgQU5EIGNpZCA8IDUwKTsKKygxIHJvdykKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGlj eV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDMnLCAncHJldHR5JywgJ3RydWUnKTsKK3BnX2dldF9w b2xpY3lfZGRsCitDUkVBVEUgUE9MSUNZIHJsc19wMyBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxz X3RibF8xCisgICAgVVNJTkcgKGRhdXRob3IgPSBDVVJSRU5UX1VTRVIpOworKDEgcm93KQorU0VM RUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNCcsICdwcmV0 dHknLCAndHJ1ZScpOworcGdfZ2V0X3BvbGljeV9kZGwKK0NSRUFURSBQT0xJQ1kgcmxzX3A0IE9O IHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEKKyAgICBGT1IgU0VMRUNUCisgICAgVVNJTkcg KChjaWQgJSAyKSA9IDApOworKDEgcm93KQorU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2Rk bCgncmxzX3RibF8xJywgJ3Jsc19wNScsICdwcmV0dHknLCAndHJ1ZScpOworcGdfZ2V0X3BvbGlj eV9kZGwKK0NSRUFURSBQT0xJQ1kgcmxzX3A1IE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJs XzEKKyAgICBGT1IgSU5TRVJUCisgICAgV0lUSCBDSEVDSyAoKGNpZCAlIDIpID0gMSk7CisoMSBy b3cpCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A2 JywgJ3ByZXR0eScsICd0cnVlJyk7CitwZ19nZXRfcG9saWN5X2RkbAorQ1JFQVRFIFBPTElDWSBy bHNfcDYgT04gcmVncmVzc19ybHNfc2NoZW1hLnJsc190YmxfMQorICAgIEZPUiBVUERBVEUKKyAg ICBVU0lORyAoKGNpZCAlIDIpID0gMCk7CisoMSByb3cpCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9w b2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A3JywgJ3ByZXR0eScsICd0cnVlJyk7CitwZ19n ZXRfcG9saWN5X2RkbAorQ1JFQVRFIFBPTElDWSBybHNfcDcgT04gcmVncmVzc19ybHNfc2NoZW1h LnJsc190YmxfMQorICAgIEZPUiBERUxFVEUKKyAgICBVU0lORyAoY2lkIDwgOCk7CisoMSByb3cp CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A4Jywg J3ByZXR0eScsICd0cnVlJyk7CitwZ19nZXRfcG9saWN5X2RkbAorQ1JFQVRFIFBPTElDWSBybHNf cDggT04gcmVncmVzc19ybHNfc2NoZW1hLnJsc190YmxfMQorICAgIFRPIHJlZ3Jlc3NfcmxzX2Rh dmUsIHJlZ3Jlc3NfcmxzX2FsaWNlCisgICAgVVNJTkcgKHRydWUpOworKDEgcm93KQorU0VMRUNU ICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wOScsICdwcmV0dHkn LCAndHJ1ZScpOworcGdfZ2V0X3BvbGljeV9kZGwKK0NSRUFURSBQT0xJQ1kgcmxzX3A5IE9OIHJl Z3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEKKyAgICBUTyByZWdyZXNzX3Jsc19leGVtcHRfdXNl cgorICAgIFdJVEggQ0hFQ0sgKGNpZCA9ICgoIFNFTEVDVCBybHNfdGJsXzIuc2VjbHYKKyAgIEZS T00gcmxzX3RibF8yKSkpOworKDEgcm93KQorXHBzZXQgZm9ybWF0IGFsaWduZWQKKy0tIENsZWFu IHVwIG9iamVjdHMgY3JlYXRlZCBmb3IgdGVzdGluZyBwZ19nZXRfcG9saWN5X2RkbCBmdW5jdGlv bi4KK0RST1AgUE9MSUNZIHJsc19wMSBPTiBybHNfdGJsXzE7CitEUk9QIFBPTElDWSBybHNfcDIg T04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3AzIE9OIHJsc190YmxfMTsKK0RST1AgUE9M SUNZIHJsc19wNCBPTiBybHNfdGJsXzE7CitEUk9QIFBPTElDWSBybHNfcDUgT04gcmxzX3RibF8x OworRFJPUCBQT0xJQ1kgcmxzX3A2IE9OIHJsc190YmxfMTsKK0RST1AgUE9MSUNZIHJsc19wNyBP TiBybHNfdGJsXzE7CitEUk9QIFBPTElDWSBybHNfcDggT04gcmxzX3RibF8xOworRFJPUCBQT0xJ Q1kgcmxzX3A5IE9OIHJsc190YmxfMTsKK0RST1AgVEFCTEUgcmxzX3RibF8xOworRFJPUCBUQUJM RSBybHNfdGJsXzI7CistLQogLS0gQ2xlYW4gdXAgb2JqZWN0cwogLS0KIFJFU0VUIFNFU1NJT04g QVVUSE9SSVpBVElPTjsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jvd3NlY3Vy aXR5LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jvd3NlY3VyaXR5LnNxbAppbmRleCA2YjM1 NjYyNzFkZi4uYWNhNjEwMmRlNzEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jv d3NlY3VyaXR5LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9yb3dzZWN1cml0eS5zcWwK QEAgLTI1OTgsNiArMjU5OCw5MyBAQCByZXNldCBybHNfdGVzdC5ibGFoOwogZHJvcCBmdW5jdGlv biBybHNfZih0ZXh0KTsKIGRyb3AgdGFibGUgcmxzX3QsIHRlc3RfdDsKIAorLS0KKy0tIFRlc3Qg Zm9yIHBnX2dldF9wb2xpY3lfZGRsKHRhYmxlLCBwb2xpY3lfbmFtZSwgVkFSSUFESUMgb3B0aW9u cykgZnVuY3Rpb24uCistLQorQ1JFQVRFIFRBQkxFIHJsc190YmxfMSAoCisgICAgZGlkICAgICAg ICAgaW50IHByaW1hcnkga2V5LAorICAgIGNpZCAgICAgICAgIGludCwKKyAgICBkbGV2ZWwgICAg ICBpbnQgbm90IG51bGwsCisgICAgZGF1dGhvciAgICAgbmFtZSwKKyAgICBkdGl0bGUgICAgICB0 ZXh0CispOworR1JBTlQgQUxMIE9OIHJsc190YmxfMSBUTyBwdWJsaWM7CitDUkVBVEUgVEFCTEUg cmxzX3RibF8yICgKKyAgICBwZ3VzZXIgICAgICBuYW1lIHByaW1hcnkga2V5LAorICAgIHNlY2x2 ICAgICAgIGludAorKTsKK0dSQU5UIFNFTEVDVCBPTiBybHNfdGJsXzIgVE8gcHVibGljOworCist LSBUZXN0IFBFUk1JU1NJVkUgYW5kIFJFU1RSSUNUSVZFCitDUkVBVEUgUE9MSUNZIHJsc19wMSBP TiBybHNfdGJsXzEgQVMgUEVSTUlTU0lWRQorICAgIFVTSU5HIChkbGV2ZWwgPD0gKFNFTEVDVCBz ZWNsdiBGUk9NIHJsc190YmxfMiBXSEVSRSBwZ3VzZXIgPSBjdXJyZW50X3VzZXIpKTsKK0NSRUFU RSBQT0xJQ1kgcmxzX3AyIE9OIHJsc190YmxfMSBBUyBSRVNUUklDVElWRSBVU0lORyAoY2lkIDw+ IDQ0IEFORCBjaWQgPCA1MCk7CisKKy0tIFRlc3QgRk9SIEFMTCB8IFNFTEVDVCB8IElOU0VSVCB8 IFVQREFURSB8IERFTEVURQorQ1JFQVRFIFBPTElDWSBybHNfcDMgT04gcmxzX3RibF8xIEZPUiBB TEwgVVNJTkcgKGRhdXRob3IgPSBjdXJyZW50X3VzZXIpOworQ1JFQVRFIFBPTElDWSBybHNfcDQg T04gcmxzX3RibF8xIEZPUiBTRUxFQ1QgVVNJTkcgKGNpZCAlIDIgPSAwKTsKK0NSRUFURSBQT0xJ Q1kgcmxzX3A1IE9OIHJsc190YmxfMSBGT1IgSU5TRVJUIFdJVEggQ0hFQ0sgKGNpZCAlIDIgPSAx KTsKK0NSRUFURSBQT0xJQ1kgcmxzX3A2IE9OIHJsc190YmxfMSBGT1IgVVBEQVRFIFVTSU5HIChj aWQgJSAyID0gMCk7CitDUkVBVEUgUE9MSUNZIHJsc19wNyBPTiBybHNfdGJsXzEgRk9SIERFTEVU RSBVU0lORyAoY2lkIDwgOCk7CisKKy0tIFRlc3QgVE8geyByb2xlX25hbWUgLi4uIH0KK0NSRUFU RSBQT0xJQ1kgcmxzX3A4IE9OIHJsc190YmxfMSBUTyByZWdyZXNzX3Jsc19kYXZlLCByZWdyZXNz X3Jsc19hbGljZSBVU0lORyAodHJ1ZSk7CitDUkVBVEUgUE9MSUNZIHJsc19wOSBPTiBybHNfdGJs XzEgVE8gcmVncmVzc19ybHNfZXhlbXB0X3VzZXIgV0lUSCBDSEVDSyAoY2lkID0gKFNFTEVDVCBz ZWNsdiBGUk9NIHJsc190YmxfMikpOworCistLSBOVUxMIGlucHV0cyBzaG91bGQgcmV0dXJuIG5v IHJvd3MKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKE5VTEwsICdybHNf cDEnKTsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEn LCBOVUxMKTsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKE5VTEwsIE5V TEwpOworCistLSBUYWJsZSBkb2VzIG5vdCBleGlzdAorU0VMRUNUICogRlJPTSBwZ19nZXRfcG9s aWN5X2RkbCgnbm9uZXhpc3RlbnRfdGJsJywgJ3Jsc19wMScpOworLS0gUG9saWN5IGRvZXMgbm90 IGV4aXN0CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAnbm9u ZXhpc3RlbnRfcG9sJyk7CisKKy0tIEludmFsaWQgb3B0aW9uIG5hbWUKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDEnLCAnYmFkb3B0JywgJ3RydWUn KTsKKy0tIEludmFsaWQgYm9vbGVhbiB2YWx1ZSBmb3Igb3B0aW9uCitTRUxFQ1QgKiBGUk9NIHBn X2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AxJywgJ3ByZXR0eScsICdtYXliZScp OworLS0gRHVwbGljYXRlIG9wdGlvbgorU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgn cmxzX3RibF8xJywgJ3Jsc19wMScsICdwcmV0dHknLCAndHJ1ZScsICdwcmV0dHknLCAnZmFsc2Un KTsKKworLS0gV2l0aG91dCBwcmV0dHkgZm9ybWF0dGluZyAoZGVmYXVsdCkKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDEnKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDInKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDMnKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDQnKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDUnKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDYnLCAncHJldHR5JywgJ2Zh bHNlJyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxz X3A3JywgJ3ByZXR0eScsICdmYWxzZScpOworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2Rk bCgncmxzX3RibF8xJywgJ3Jsc19wOCcsICdwcmV0dHknLCAnZmFsc2UnKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDknLCAncHJldHR5JywgJ2Zh bHNlJyk7CisKKy0tIFdpdGggcHJldHR5IGZvcm1hdHRpbmcKK1xwc2V0IGZvcm1hdCB1bmFsaWdu ZWQKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDEn LCAncHJldHR5JywgJ3RydWUnKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Js c190YmxfMScsICdybHNfcDInLCAncHJldHR5JywgJ3RydWUnKTsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDMnLCAncHJldHR5JywgJ3RydWUnKTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDQnLCAn cHJldHR5JywgJ3RydWUnKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190 YmxfMScsICdybHNfcDUnLCAncHJldHR5JywgJ3RydWUnKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDYnLCAncHJldHR5JywgJ3RydWUnKTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDcnLCAncHJl dHR5JywgJ3RydWUnKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190Ymxf MScsICdybHNfcDgnLCAncHJldHR5JywgJ3RydWUnKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Bv bGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDknLCAncHJldHR5JywgJ3RydWUnKTsKK1xwc2V0 IGZvcm1hdCBhbGlnbmVkCisKKy0tIENsZWFuIHVwIG9iamVjdHMgY3JlYXRlZCBmb3IgdGVzdGlu ZyBwZ19nZXRfcG9saWN5X2RkbCBmdW5jdGlvbi4KK0RST1AgUE9MSUNZIHJsc19wMSBPTiBybHNf dGJsXzE7CitEUk9QIFBPTElDWSBybHNfcDIgT04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxz X3AzIE9OIHJsc190YmxfMTsKK0RST1AgUE9MSUNZIHJsc19wNCBPTiBybHNfdGJsXzE7CitEUk9Q IFBPTElDWSBybHNfcDUgT04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3A2IE9OIHJsc190 YmxfMTsKK0RST1AgUE9MSUNZIHJsc19wNyBPTiBybHNfdGJsXzE7CitEUk9QIFBPTElDWSBybHNf cDggT04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3A5IE9OIHJsc190YmxfMTsKK0RST1Ag VEFCTEUgcmxzX3RibF8xOworRFJPUCBUQUJMRSBybHNfdGJsXzI7CisKIC0tCiAtLSBDbGVhbiB1 cCBvYmplY3RzCiAtLQotLSAKMi41MS4wCgo= --00000000000026629d06526811f1--