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 1wghV6-006LGA-2Z for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Jul 2026 11:28:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wghV5-00HGia-2A for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Jul 2026 11:28:35 +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 1wghV5-00HGiS-0t for pgsql-hackers@lists.postgresql.org; Mon, 06 Jul 2026 11:28:35 +0000 Received: from mail-ed1-x533.google.com ([2a00:1450:4864:20::533]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wghV2-000000022yN-15bh for pgsql-hackers@lists.postgresql.org; Mon, 06 Jul 2026 11:28:34 +0000 Received: by mail-ed1-x533.google.com with SMTP id 4fb4d7f45d1cf-6974a6e54dbso4404920a12.2 for ; Mon, 06 Jul 2026 04:28:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1783337310; cv=none; d=google.com; s=arc-20260327; b=YMq8lteNUvVukMmhSCIc/cwRFxijRey2Gp9gxAtmtPONJWAH/FOD0iAPW1NB+W0fgg FROWMd9ffWyou7z3gZU0HCI25Z2xdzCNgOLqxKGofnb6rPdQA8EG4TA/iWyf9UA+7t1y Q9lIyao77BGFVU1mpH0OdVS+6uztXD2V+DSS9r+NbEz/COzjsuFPjgifMWOAddX5/wp3 TZpssXB+l6/ofs/bS6DxorBR5QkwA0Q7ub5Ii4NzqgkRP9UmBRmGwnkKZ+VZd0FCR9ar GPyPKMudU+b9u6G1IIgkUFgDI27BbcHdhImRh6F4DweuuREe9elzvB9HykGU6BtzpDRJ cWWQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=qgw3JoM5YPnujGagQqu/46/qRmFRtGGE5Ah2GO6YmOU=; fh=q2aG0jta9X4Vrh+sRzvClchWeD5q+vsxYu9uFXuHWmQ=; b=M8Un8kxTibo0TrVmc7SUHrzIRSDWYvUF0FXi1u8b4+QTvjH8TERWyv601agYQ2EvSb Nz5Lh/0jNEJeP2RVh9b58XVAw5yfKztqfJ7rQwVZdMMnrWBEb8db4WRyeaQBOUEGq5gg +q9mlLwJIZQRCbsdF7gjcQbOS8cWKqD4IX9Z1OmEjpwmLCIyBGssFdwiSXl8l44qeh+B OotiDuv8MY9ARDO8eIGCAPXMQj5xwRZOKAegaFzQpPaQWs6S6zvOYCA61c1Av6matK41 GFAxL9NiY4wT+3TcIFMQSegxois6zYXg4iYYb10NNKB+r6BavUOVAN2j4YtzpBsYqeMn 0EnA==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1783337310; x=1783942110; darn=lists.postgresql.org; h=content-type:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:from:to:cc:subject:date:message-id:reply-to :content-type; bh=qgw3JoM5YPnujGagQqu/46/qRmFRtGGE5Ah2GO6YmOU=; b=QG7sFMlB419l/kmoaEo+apTi59y9r2k30ZavlJIt5XWPqDyAmvC8n3iURWEBc8aKuQ SmiuHlT/820Q1Ww6v8EKRzNKm1VXH6PcxI2BuLbMtGejXDV1FvRrkGaKi2C1526/bNS3 8+OJ6l9WR3lJ70O/GqjyYlxb9bDxFsi75I9OnIK4TbbwlfoQddejr4R/Q3568kzAsSir ABZE+qrpT57E5f0095P9j+k6+j6Fii8fNzL+Z9heAYIlkMpMeK0PVZrFrmj7buhR2CdO Fc+sUWGe8ZwelymRxTBsBwJ2+aXESI1+2crfuOSYjUDDcUsifDnhl+ODRToI+vANkY4+ dIvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783337310; x=1783942110; h=content-type: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:content-type; bh=qgw3JoM5YPnujGagQqu/46/qRmFRtGGE5Ah2GO6YmOU=; b=OCBTquZI9qbM4bOfoLdp2w0VfN6LYnvv6F2EiwA79WxEmUWCGD9nVR73eMrx4ex1og rR1RoHSoajWmEVb5ElJmw+lySD/7klvQkreBwkabYBzqeVKxOknyIjvv8Wk6QdGy2la3 8qnD0cSs8V7uDEGFx4ScHn8H8tAtgW4YKX4uWFQQdaRIi0nLioBeZm5+YFbBFq7PJi8T 7DEWdnDo07+ETVXRaysenJn5MCTM3Pb9iC1cGgQABZFetv60ycn61re8Aer2VuI6p8wC Ic5o3tQqKqw+rHDLUHrIBNYZCdGTxfcki3PbgSjgbecZ2Xkh68rnjYfvcRcCDETbRccl 81Ig== X-Forwarded-Encrypted: i=1; AHgh+RpJh5RZZqSFHjhQScM6fiJMxOtCBaBfcFKUDH4DgUn6jskwUC2Uv2nQADbu/2jU7Iahm2jUK+BQAeRFHEvP@lists.postgresql.org X-Gm-Message-State: AOJu0Yzbt0vP2LVtVjjsNLDpuPGh0IFQ0JYQVBziRDBSRPXC4OHvbrcV PdmByeFQHiHHlKY63z8Krykw0dAxRe8DkCsRYizYaZv+UwHiigLL9CZ85G/Heln4RZx4GVTHVUA canpfc1V5tY2WwQiJjvvgVcAnKnVohWpKMwin6Smd X-Gm-Gg: AfdE7cnoHWncWIt4J3n99n6RjqGls2mdZ2FRzC1PgnKS7yCCwi00bu/Vzd7cfdx3AjF IsOob9APr2JWzqB5Pp28KYH5GbrOC2TBdgWEV8vIlEX8M8iZ9MGeLzoBrciPrwcpbvG1JlJUic3 5xM1b8bGJwcz0JKXpwjwEI2yYgb6RSOw+IznvxrIXqPzlviLZ1wkSgRfe3AT4mzXaoaQFdJuUn/ H0YDta6+ruuy5A7NR3BxHsIQ5FXtf7MRM0MoUwdw/a6zNHfyAJ34TLpyxFRDD0FZ/m7CcFZ2cvc tJ7Q1iGK X-Received: by 2002:a17:906:4746:b0:c12:74ff:116 with SMTP id a640c23a62f3a-c15a67d60f8mr4499266b.6.1783337310392; Mon, 06 Jul 2026 04:28:30 -0700 (PDT) MIME-Version: 1.0 References: <177997571870.313758.10720313850275742354.pgcf@coridan.postgresql.org> In-Reply-To: From: Akshay Joshi Date: Mon, 6 Jul 2026 16:58:18 +0530 X-Gm-Features: AVVi8CeRJL_qqGO2OMJ1U4e3SwCwpOuw2IOq84BmKOwlq7WET32zfvFF55Rik6w Message-ID: Subject: Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement To: solai v Cc: Ilmar Y , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000e700d90655ef9258" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e700d90655ef9258 Content-Type: multipart/alternative; boundary="000000000000e700d70655ef9256" --000000000000e700d70655ef9256 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable All, I found that OID 6517 was already taken by the max(uuid) aggregate. I've reassigned pg_get_policy_ddl to OID 9683. The v15 patch is ready for review and commit. On Wed, Jul 1, 2026 at 5:01=E2=80=AFPM solai v wrote= : > Hi all, > > On Wed, Jul 1, 2026 at 4:01=E2=80=AFPM Akshay Joshi > wrote: > > > > > > > > On Wed, Jul 1, 2026 at 2:44=E2=80=AFPM solai v w= rote: > >> > >> Hi all, > >> > >> > >> On Tue, Jun 30, 2026 at 4:48=E2=80=AFPM Akshay Joshi > >> wrote: > >> > > >> > All, > >> > > >> > I've updated the patch to align with the interface change introduced > by commit d6ed87d1989 (Andrew Dunstan, 2026-06-26 "Use named boolean > parameters for pg_get_*_ddl option arguments"). > >> > > >> > That commit replaced the VARIADIC text[] alternating key/value optio= n > interface with typed named boolean parameters across pg_get_role_ddl(), > pg_get_tablespace_ddl(), and pg_get_database_ddl(), removing the > DdlOption/parse_ddl_options() machinery in favour of direct > PG_GETARG_BOOL() calls. > >> > > >> > Updated patch v14 is ready for review/commit. > >> > > >> > >> > >> I reviewed and tested the v14 patch on the latest master. The patch > >> applied cleanly, built successfully, and passed make check without any > >> regression failures. I verified the new function signature and > >> confirmed that pg_get_policy_ddl() now uses the new interface with the > >> boolean DEFAULT false argument. Also I tested the function with a > >> variety of row-level security policies, including: Basic policy > >> reconstruction, PERMISSIVE and RESTRICTIVE policies, Different command > >> types (SELECT, INSERT, UPDATE, DELETE), Policies with multiple roles > >> and the PUBLIC role, Quoted table, policy, and role names, USING and > >> WITH CHECK clauses, Complex expressions including EXISTS, nested > >> subqueries, CASE expressions, COALESCE, ANY/ALL operators, and boolean > >> expressions, NULL inputs, invalid relation names, and non-existent > >> policies. The generated DDL was correct as per the intent, and the > >> expected errors were verified for the invalid inputs. I also verified > >> that the generated DDL is executable by dropping an existing policy, > >> recreating it using the output of pg_get_policy_ddl(), and confirming > >> that the recreated policy was reconstructed successfully again by the > >> function. > >> One observation I noted is that for policies using default attributes > >> (TO PUBLIC and AS PERMISSIVE), the generated DDL omits those clauses > >> and produces a semantically equivalent statement which seems > >> intentional but thought of sending it here for further clarification. > >> Overall, I did not encounter any functional issues during testing. The > >> patch looks good to me and worked as expected in all the scenarios I > >> tested. > > > > > > Yes, it's intentional for all pg_get_***_ddl functions. Clause with > defaults won't be reconstructed. > >> > >> > > Ok. Thank you for the clarification. > > Regards, > Solai > --000000000000e700d70655ef9256 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
All,

I found that OID 6517 was already taken by the= max(uuid) aggregate. I've reassigned pg_get_policy_ddl to OID 9683.The v15 patch is ready for review and commit.

On Wed, Jul 1, 2026 at 5:01=E2=80=AFPM solai v <solai.cdac@gmail.com> wrote:
Hi all,

On Wed, Jul 1, 2026 at 4:01=E2=80=AFPM Akshay Joshi
<aksh= ay.joshi@enterprisedb.com> wrote:
>
>
>
> On Wed, Jul 1, 2026 at 2:44=E2=80=AFPM solai v <solai.cdac@gmail.com> wrote:<= br> >>
>> Hi all,
>>
>>
>> On Tue, Jun 30, 2026 at 4:48=E2=80=AFPM Akshay Joshi
>> <akshay.joshi@enterprisedb.com> wrote:
>> >
>> > All,
>> >
>> > I've updated the patch to align with the interface change= introduced by commit d6ed87d1989 (Andrew Dunstan, 2026-06-26 "Use nam= ed boolean parameters for pg_get_*_ddl option arguments").
>> >
>> > That commit replaced the VARIADIC text[] alternating key/valu= e option interface with typed named boolean parameters across pg_get_role_d= dl(), pg_get_tablespace_ddl(), and pg_get_database_ddl(), removing the DdlO= ption/parse_ddl_options() machinery in favour of direct PG_GETARG_BOOL() ca= lls.
>> >
>> > Updated patch v14 is ready for review/commit.
>> >
>>
>>
>> I reviewed and tested the v14 patch on the latest master. The patc= h
>> applied cleanly, built successfully, and passed make check without= any
>> regression failures. I verified the new function signature and
>> confirmed that pg_get_policy_ddl() now uses the new interface with= the
>> boolean DEFAULT false argument. Also I tested the function with a<= br> >> variety of row-level security policies, including: Basic policy >> reconstruction, PERMISSIVE and RESTRICTIVE policies, Different com= mand
>> types (SELECT, INSERT, UPDATE, DELETE), Policies with multiple rol= es
>> and the PUBLIC role, Quoted table, policy, and role names, USING a= nd
>> WITH CHECK clauses, Complex expressions including EXISTS, nested >> subqueries, CASE expressions, COALESCE, ANY/ALL operators, and boo= lean
>> expressions, NULL inputs, invalid relation names, and non-existent=
>> policies. The generated DDL was correct as per the intent, and the=
>> expected errors were verified for the invalid inputs. I also verif= ied
>> that the generated DDL is executable by dropping an existing polic= y,
>> recreating it using the output of pg_get_policy_ddl(), and confirm= ing
>> that the recreated policy was reconstructed successfully again by = the
>> function.
>> One observation I noted is that for policies using default attribu= tes
>> (TO PUBLIC and AS PERMISSIVE), the generated DDL omits those claus= es
>> and produces a semantically equivalent statement which seems
>> intentional but thought of sending it here for further clarificati= on.
>> Overall, I did not encounter any functional issues during testing.= The
>> patch looks good to me and worked as expected in all the scenarios= I
>> tested.
>
>
>=C2=A0 =C2=A0 =C2=A0Yes, it's intentional for all pg_get_***_ddl fu= nctions. Clause with defaults won't be reconstructed.
>>
>>

Ok. Thank you for the clarification.

Regards,
Solai
--000000000000e700d70655ef9256-- --000000000000e700d90655ef9258 Content-Type: application/octet-stream; name="v15-0001-Add-pg_get_policy_ddl-to-reconstruct-CREATE.patch" Content-Disposition: attachment; filename="v15-0001-Add-pg_get_policy_ddl-to-reconstruct-CREATE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mr94yz480 RnJvbSAzMGFhMWU1MDAxNzM3ZmYwY2U2NzVhYThhZGY4YWU3ZTZjZGE2MzNkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBGcmksIDIyIE1heSAyMDI2IDE4OjE4OjA3ICswNTMwClN1YmplY3Q6IFtQ QVRDSCB2MTVdIEFkZCBwZ19nZXRfcG9saWN5X2RkbCgpIHRvIHJlY29uc3RydWN0IENSRUFURSBQ T0xJQ1kKIHN0YXRlbWVudHMKCiAgcGdfZ2V0X3BvbGljeV9kZGwodGFibGUgcmVnY2xhc3MsCiAg ICAgICAgICAgICAgICAgICAgcG9saWN5bmFtZSBuYW1lLAogICAgICAgICAgICAgICAgICAgIHBy ZXR0eSBib29sIERFRkFVTFQgZmFsc2UpCiAgUkVUVVJOUyBTRVRPRiB0ZXh0CgpyZWNvbnN0cnVj dHMgdGhlIENSRUFURSBQT0xJQ1kgc3RhdGVtZW50IGZvciB0aGUgbmFtZWQgcm93LWxldmVsCnNl Y3VyaXR5IHBvbGljeSBvbiB0aGUgc3BlY2lmaWVkIHRhYmxlLiAgQWx0aG91Z2ggYSBzaW5nbGUg c3RhdGVtZW50IGlzCnByb2R1Y2VkLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIFNFVE9GIHRleHQg cmVzdWx0IHNvIGl0cyBjYWxsaW5nCmNvbnZlbnRpb24gbWF0Y2hlcyB0aGUgcmVzdCBvZiB0aGUg cGdfZ2V0XypfZGRsIGZhbWlseS4KClRoZSByZWNvbnN0cnVjdGVkIERETCBpbmNsdWRlcyBhbGwg Y2xhdXNlcyBvZiB0aGUgQ1JFQVRFIFBPTElDWSBzeW50YXg6CnRoZSBwb2xpY3kncyBwZXJtaXNz aXZlbmVzcyAoQVMgUkVTVFJJQ1RJVkUpLCBjb21tYW5kIHR5cGUgKEZPUgpTRUxFQ1QvSU5TRVJU L1VQREFURS9ERUxFVEUpLCByb2xlIGxpc3QgKFRPIDxyb2xlcz4pLCBVU0lORwpxdWFsaWZpY2F0 aW9uLCBhbmQgV0lUSCBDSEVDSyBleHByZXNzaW9uLiAgQ2xhdXNlcyB3aG9zZSB2YWx1ZSBlcXVh bHMKdGhlIHBhcnNlcidzIGRlZmF1bHQgLS0gUEVSTUlTU0lWRSwgRk9SIEFMTCwgYW5kIFRPIFBV QkxJQyAtLSBhcmUKb21pdHRlZCBmcm9tIHRoZSBvdXRwdXQsIG1hdGNoaW5nIHRoZSBjb252ZW50 aW9uIHVzZWQgYnkgcGdfZ2V0X2luZGV4ZGVmLApwZ19nZXRfY29uc3RyYWludGRlZiwgcGdfZ2V0 X3ZpZXdkZWYsIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucy4gIFRoZSByZXN1bHQKaXMgdGhlcmVmb3Jl IHNlbWFudGljYWxseSBlcXVpdmFsZW50IHRvIHRoZSBvcmlnaW5hbCBEREwsIG5vdCBsZXhpY2Fs bHkKaWRlbnRpY2FsLgoKVGhlIHByZXR0eSBwYXJhbWV0ZXIgY29udHJvbHMgb3V0cHV0IGZvcm1h dHRpbmcgYW5kIGRlZmF1bHRzIHRvIGZhbHNlLApmb2xsb3dpbmcgdGhlIHNhbWUgY29udmVudGlv biBhcyBwZ19nZXRfcm9sZV9kZGwsIHBnX2dldF90YWJsZXNwYWNlX2RkbCwKYW5kIHBnX2dldF9k YXRhYmFzZV9kZGwuICBOVUxMIHBhc3NlZCBleHBsaWNpdGx5IGZvciBwcmV0dHkgaXMgdHJlYXRl ZAphcyBmYWxzZS4KCk5VTEwgaW5wdXRzIGZvciB0aGUgdGFibGUgb3IgcG9saWN5IG5hbWUgeWll bGQgbm8gcm93cy4gIEFuIGludmFsaWQKcmVsYXRpb24gbmFtZSBzdXJmYWNlcyB0aGUgcmVnY2xh c3MgcmVzb2x1dGlvbiBlcnJvcjsgYSBub24tZXhpc3RlbnQKcG9saWN5IHJhaXNlcyBhbiBleHBs aWNpdCAicG9saWN5IC4uLiBkb2VzIG5vdCBleGlzdCIgZXJyb3IuCgpVc2FnZSBleGFtcGxlczoK CiAgLS0gY29tcGFjdCBmb3JtIChkZWZhdWx0KQogIFNFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGlj eV9kZGwoJ3Jsc190YWJsZScsICdwb2wxJyk7CiAgU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5 X2RkbCgxNjU2NCwgJ3BvbDEnKTsKCiAgLS0gcHJldHR5LXByaW50ZWQgZm9ybQogIFNFTEVDVCAq IEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YWJsZScsICdwb2wxJywgdHJ1ZSk7CgpSZWdy ZXNzaW9uIGNvdmVyYWdlIGlzIGFkZGVkIHRvIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jvd3NlY3Vy aXR5LnNxbAphbmQgZXhlcmNpc2VzIGFsbCB2YWxpZCBjb21iaW5hdGlvbnMgb2YgdGhlIENSRUFU RSBQT0xJQ1kgc3ludGF4OgpQRVJNSVNTSVZFL1JFU1RSSUNUSVZFLCBhbGwgRk9SIGNvbW1hbmQg dmFyaWFudHMgKEFMTC9TRUxFQ1QvSU5TRVJULwpVUERBVEUvREVMRVRFKSwgbXVsdGktcm9sZSBU TyBsaXN0cywgVVNJTkctb25seSwgV0lUSCBDSEVDSy1vbmx5LCBhbmQKVVNJTkcrV0lUSCBDSEVD SyBwb2xpY2llcyBmb3IgYm90aCBBTEwgYW5kIFVQREFURSBjb21tYW5kcyAodGhlIG9ubHkKdHdv IHRoYXQgYWNjZXB0IGJvdGgpLCBSRVNUUklDVElWRSBvbiBhIHNwZWNpZmljIGNvbW1hbmQgdHlw ZSwKc3VicXVlcnkgZXhwcmVzc2lvbnMsIHByZXR0eSBhbmQgbm9uLXByZXR0eSBvdXRwdXQsIGFs bCBib29sZWFuCnJlcHJlc2VudGF0aW9ucyBmb3IgdGhlIHByZXR0eSBhcmd1bWVudCAodHJ1ZS9m YWxzZSwgb24vb2ZmLCAxLzApLApOVUxMIGFuZCBlcnJvciBwYXRocywgYW5kIGEgcm91bmQtdHJp cCB0ZXN0IHRoYXQgZHJvcHMgYW5kIHJlLWV4ZWN1dGVzCnRoZSBnZW5lcmF0ZWQgRERMLgoKQXV0 aG9yOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNlZGIuY29tPgotLS0KIGRv Yy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sICAgICAgICAgIHwgIDE5ICsrCiBzcmMvYmFj a2VuZC91dGlscy9hZHQvZGRsdXRpbHMuYyAgICAgICAgICB8IDI1OSArKysrKysrKysrKysrKysr KysrCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICB8ICAgNiArCiBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Jvd3NlY3VyaXR5Lm91dCB8IDI5MSArKysrKysrKysr KysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9yb3dzZWN1cml0eS5zcWwgICAgICB8 IDEyOCArKysrKysrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDcwMyBpbnNlcnRpb25zKCspCgpkaWZm IC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwgYi9kb2Mvc3JjL3NnbWwv ZnVuYy9mdW5jLWluZm8uc2dtbAppbmRleCA2OWVmMzg1N2NmYS4uODU4ZWE0NjA5YTYgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sCisrKyBiL2RvYy9zcmMvc2dt bC9mdW5jL2Z1bmMtaW5mby5zZ21sCkBAIC0zOTYwLDYgKzM5NjAsMjUgQEAgYWNsICAgICAgfCB7 cG9zdGdyZXM9YXJ3ZER4dG0vcG9zdGdyZXMsZm9vPXIvcG9zdGdyZXN9CiAgICAgICAgIGlzIGZh bHNlLCB0aGUgPGxpdGVyYWw+T1dORVI8L2xpdGVyYWw+IGNsYXVzZSBpcyBvbWl0dGVkLgogICAg ICAgIDwvcGFyYT48L2VudHJ5PgogICAgICAgPC9yb3c+CisgICAgICA8cm93PgorICAgICAgIDxl bnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+ CisgICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgICA8cHJpbWFyeT5wZ19nZXRfcG9saWN5X2Rk bDwvcHJpbWFyeT4KKyAgICAgICAgPC9pbmRleHRlcm0+CisgICAgICAgIDxmdW5jdGlvbj5wZ19n ZXRfcG9saWN5X2RkbDwvZnVuY3Rpb24+CisgICAgICAgICggPHBhcmFtZXRlcj50YWJsZTwvcGFy YW1ldGVyPiA8dHlwZT5yZWdjbGFzczwvdHlwZT4sCisgICAgICAgIDxwYXJhbWV0ZXI+cG9saWN5 X25hbWU8L3BhcmFtZXRlcj4gPHR5cGU+bmFtZTwvdHlwZT4KKyAgICAgICAgPG9wdGlvbmFsPiwg PHBhcmFtZXRlcj5wcmV0dHk8L3BhcmFtZXRlcj4gPHR5cGU+Ym9vbGVhbjwvdHlwZT4KKyAgICAg ICAgPC9vcHRpb25hbD4gKQorICAgICAgICA8cmV0dXJudmFsdWU+c2V0b2YgdGV4dDwvcmV0dXJu dmFsdWU+CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBSZWNvbnN0cnVj dHMgdGhlIDxjb21tYW5kPkNSRUFURSBQT0xJQ1k8L2NvbW1hbmQ+IHN0YXRlbWVudCBmb3IgdGhl CisgICAgICAgIG5hbWVkIHJvdy1sZXZlbCBzZWN1cml0eSBwb2xpY3kgb24gdGhlIHNwZWNpZmll ZCB0YWJsZS4gIFRoZSByZXN1bHQKKyAgICAgICAgaXMgcmV0dXJuZWQgYXMgYSBzaW5nbGUgcm93 LiAgSWYgPHBhcmFtZXRlcj5wcmV0dHk8L3BhcmFtZXRlcj4gaXMKKyAgICAgICAgdHJ1ZSwgdGhl IG91dHB1dCBpcyBmb3JtYXR0ZWQgZm9yIHJlYWRhYmlsaXR5OyB0aGUgZGVmYXVsdCBpcyBmYWxz ZS4KKyAgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgIDwvcm93PgogICAgICA8L3Rib2R5Pgog ICAgIDwvdGdyb3VwPgogICAgPC90YWJsZT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9kZGx1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2RkbHV0aWxzLmMKaW5kZXgg YTcwZjFjMjg2NTUuLmNmN2I1OTYwODVmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvZGRsdXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZGRsdXRpbHMuYwpAQCAt MjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVk ZSAiY2F0YWxvZy9wZ19kYXRhYmFzZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGJfcm9sZV9z ZXR0aW5nLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wb2xpY3kuaCIKICNpbmNsdWRlICJjYXRh bG9nL3BnX3RhYmxlc3BhY2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCiAj aW5jbHVkZSAiY29tbW9uL3JlbHBhdGguaCIKQEAgLTU2LDYgKzU3LDkgQEAgc3RhdGljIExpc3Qg KnBnX2dldF90YWJsZXNwYWNlX2RkbF9pbnRlcm5hbChPaWQgdHNpZCwgYm9vbCBwcmV0dHksIGJv b2wgbm9fb3duZXIKIHN0YXRpYyBEYXR1bSBwZ19nZXRfdGFibGVzcGFjZV9kZGxfc3JmKEZ1bmN0 aW9uQ2FsbEluZm8gZmNpbmZvLCBPaWQgdHNpZCk7CiBzdGF0aWMgTGlzdCAqcGdfZ2V0X2RhdGFi YXNlX2RkbF9pbnRlcm5hbChPaWQgZGJpZCwgYm9vbCBwcmV0dHksCiAJCQkJCQkJCQkJICBib29s IG5vX293bmVyLCBib29sIG5vX3RhYmxlc3BhY2UpOworc3RhdGljIExpc3QgKnBnX2dldF9wb2xp Y3lfZGRsX2ludGVybmFsKE9pZCB0YWJsZUlELCBjb25zdCBjaGFyICpwb2xpY3lOYW1lLAorCQkJ CQkJCQkJCWJvb2wgcHJldHR5KTsKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfcG9saWN5X2NtZF9u YW1lKGNoYXIgY21kKTsKIAogCiAvKgpAQCAtOTc1LDMgKzk3OSwyNTggQEAgcGdfZ2V0X2RhdGFi YXNlX2RkbChQR19GVU5DVElPTl9BUkdTKQogCQlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7CiAJ fQogfQorCisvKgorICogZ2V0X3BvbGljeV9jbWRfbmFtZQorICoJCU1hcCBhIG5vbi1BTEwgcGdf cG9saWN5LnBvbGNtZCBjaGFyIHRvIGl0cyBTUUwga2V5d29yZC4KKyAqCisgKiBDYWxsZXJzIG11 c3QgZ3VhcmQgYWdhaW5zdCAnKicgKEFMTCkgdGhlbXNlbHZlczsgaXQgaXMgbm90IHBhc3NlZCBo ZXJlLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqCitnZXRfcG9saWN5X2NtZF9uYW1lKGNoYXIg Y21kKQoreworCXN3aXRjaCAoY21kKQorCXsKKwkJY2FzZSBBQ0xfU0VMRUNUX0NIUjoKKwkJCXJl dHVybiAiU0VMRUNUIjsKKwkJY2FzZSBBQ0xfSU5TRVJUX0NIUjoKKwkJCXJldHVybiAiSU5TRVJU IjsKKwkJY2FzZSBBQ0xfVVBEQVRFX0NIUjoKKwkJCXJldHVybiAiVVBEQVRFIjsKKwkJY2FzZSBB Q0xfREVMRVRFX0NIUjoKKwkJCXJldHVybiAiREVMRVRFIjsKKwkJZGVmYXVsdDoKKwkJCWVsb2co RVJST1IsICJ1bnJlY29nbml6ZWQgcG9saWN5IGNvbW1hbmQ6ICVkIiwgKGludCkgY21kKTsKKwkJ CXJldHVybiBOVUxMOwkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLworCX0KK30KKworLyoKKyAq IHBnX2dldF9wb2xpY3lfZGRsX2ludGVybmFsCisgKgkJR2VuZXJhdGUgdGhlIERETCBzdGF0ZW1l bnQgdG8gcmVjcmVhdGUgYSByb3ctbGV2ZWwgc2VjdXJpdHkgcG9saWN5LgorICoKKyAqIFJldHVy bnMgYSBMaXN0IGNvbnRhaW5pbmcgYSBzaW5nbGUgcGFsbG9jJ2Qgc3RyaW5nIHdpdGggdGhlIENS RUFURSBQT0xJQ1kKKyAqIHN0YXRlbWVudC4gIFJldHVybmluZyBhIExpc3Qga2VlcHMgdGhlIGNh bGxpbmcgY29udmVudGlvbiBjb25zaXN0ZW50IHdpdGgKKyAqIHRoZSByZXN0IG9mIHRoZSBwZ19n ZXRfKl9kZGwgZmFtaWx5IGV2ZW4gdGhvdWdoIG9ubHkgb25lIHJvdyBpcyBwcm9kdWNlZC4KKyAq Lworc3RhdGljIExpc3QgKgorcGdfZ2V0X3BvbGljeV9kZGxfaW50ZXJuYWwoT2lkIHRhYmxlSUQs IGNvbnN0IGNoYXIgKnBvbGljeU5hbWUsIGJvb2wgcHJldHR5KQoreworCVJlbGF0aW9uCXBnUG9s aWN5UmVsOworCUhlYXBUdXBsZQl0dXBsZVBvbGljeTsKKwlGb3JtX3BnX3BvbGljeSBwb2xpY3lG b3JtOworCVNjYW5LZXlEYXRhIHNrZXlbMl07CisJU3lzU2NhbkRlc2Mgc3NjYW47CisJU3RyaW5n SW5mb0RhdGEgYnVmOworCURhdHVtCQl2YWx1ZURhdHVtOworCWJvb2wJCWF0dHJJc051bGw7CisJ Y2hhcgkgICAqcmVsbmFtZTsKKwljaGFyCSAgICpuc3BuYW1lOworCWNoYXIJICAgKnRhcmdldFRh YmxlOworCUxpc3QJICAgKnN0YXRlbWVudHMgPSBOSUw7CisKKwkvKiBWYWxpZGF0ZSB0aGF0IHRo ZSByZWxhdGlvbiBleGlzdHMgYW5kIGJ1aWxkIGl0cyBxdWFsaWZpZWQgbmFtZS4gKi8KKwlyZWxu YW1lID0gZ2V0X3JlbF9uYW1lKHRhYmxlSUQpOworCWlmIChyZWxuYW1lID09IE5VTEwpCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfVEFCTEUpLAorCQkJ CSBlcnJtc2coInJlbGF0aW9uIHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwgdGFibGVJRCkp KTsKKworCW5zcG5hbWUgPSBnZXRfbmFtZXNwYWNlX25hbWUoZ2V0X3JlbF9uYW1lc3BhY2UodGFi bGVJRCkpOworCWlmIChuc3BuYW1lID09IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVy cmNvZGUoRVJSQ09ERV9VTkRFRklORURfU0NIRU1BKSwKKwkJCQkgZXJybXNnKCJzY2hlbWEgZm9y IHJlbGF0aW9uIHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwKKwkJCQkJCXRhYmxlSUQpKSk7 CisKKwl0YXJnZXRUYWJsZSA9IHF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKG5zcG5hbWUsIHJl bG5hbWUpOworCXBmcmVlKHJlbG5hbWUpOworCXBmcmVlKG5zcG5hbWUpOworCisJcGdQb2xpY3lS ZWwgPSB0YWJsZV9vcGVuKFBvbGljeVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkv KiBTZXQga2V5IC0gcG9saWN5J3MgcmVsYXRpb24gaWQuICovCisJU2NhbktleUluaXQoJnNrZXlb MF0sCisJCQkJQW51bV9wZ19wb2xpY3lfcG9scmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVt YmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0odGFibGVJRCkpOworCisJLyogU2V0 IGtleSAtIHBvbGljeSdzIG5hbWUuICovCisJU2NhbktleUluaXQoJnNrZXlbMV0sCisJCQkJQW51 bV9wZ19wb2xpY3lfcG9sbmFtZSwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfTkFNRUVR LAorCQkJCUNTdHJpbmdHZXREYXR1bShwb2xpY3lOYW1lKSk7CisKKwlzc2NhbiA9IHN5c3RhYmxl X2JlZ2luc2NhbihwZ1BvbGljeVJlbCwKKwkJCQkJCQkgICBQb2xpY3lQb2xyZWxpZFBvbG5hbWVJ bmRleElkLCB0cnVlLCBOVUxMLCAyLAorCQkJCQkJCSAgIHNrZXkpOworCisJdHVwbGVQb2xpY3kg PSBzeXN0YWJsZV9nZXRuZXh0KHNzY2FuKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGVQ b2xpY3kpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVE X09CSkVDVCksCisJCQkJIGVycm1zZygicG9saWN5IFwiJXNcIiBmb3IgdGFibGUgXCIlc1wiIGRv ZXMgbm90IGV4aXN0IiwKKwkJCQkJCXBvbGljeU5hbWUsIHRhcmdldFRhYmxlKSkpOworCisJcG9s aWN5Rm9ybSA9IChGb3JtX3BnX3BvbGljeSkgR0VUU1RSVUNUKHR1cGxlUG9saWN5KTsKKworCWlu aXRTdHJpbmdJbmZvKCZidWYpOworCisJLyogQnVpbGQgdGhlIENSRUFURSBQT0xJQ1kgc3RhdGVt ZW50ICovCisJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiQ1JFQVRFIFBPTElDWSAlcyBPTiAlcyIs CisJCQkJCSBxdW90ZV9pZGVudGlmaWVyKHBvbGljeU5hbWUpLAorCQkJCQkgdGFyZ2V0VGFibGUp OworCXBmcmVlKHRhcmdldFRhYmxlKTsKKworCS8qCisJICogRW1pdCBBUyBSRVNUUklDVElWRSBv bmx5IHdoZW4gaXQgZGlmZmVycyBmcm9tIHRoZSBkZWZhdWx0IChQRVJNSVNTSVZFKS4KKwkgKi8K KwlpZiAoIXBvbGljeUZvcm0tPnBvbHBlcm1pc3NpdmUpCisJCWFwcGVuZF9kZGxfb3B0aW9uKCZi dWYsIHByZXR0eSwgNCwgIkFTIFJFU1RSSUNUSVZFIik7CisKKwkvKgorCSAqIEVtaXQgRk9SIDxj bWQ+IG9ubHkgd2hlbiBpdCBkaWZmZXJzIGZyb20gdGhlIGRlZmF1bHQgKEFMTCwgZW5jb2RlZCBh cworCSAqICcqJykuCisJICovCisJaWYgKHBvbGljeUZvcm0tPnBvbGNtZCAhPSAnKicpCisJCWFw cGVuZF9kZGxfb3B0aW9uKCZidWYsIHByZXR0eSwgNCwgIkZPUiAlcyIsCisJCQkJCQkgIGdldF9w b2xpY3lfY21kX25hbWUocG9saWN5Rm9ybS0+cG9sY21kKSk7CisKKwkvKgorCSAqIEVtaXQgVE8g PHJvbGVzPiBvbmx5IHdoZW4gaXQgZGlmZmVycyBmcm9tIHRoZSBkZWZhdWx0IChQVUJMSUMpLiAg UFVCTElDCisJICogaXMgZW5jb2RlZCBpbiBwb2xyb2xlcyBhcyBhIHNpbmdsZSBJbnZhbGlkT2lk IGVsZW1lbnQsIHNvIHdlIG9taXQgdGhlCisJICogY2xhdXNlIHdoZW5ldmVyIGV2ZXJ5IGVudHJ5 IGlzIEludmFsaWRPaWQuICBwb2xyb2xlcyBpcyBhbHdheXMgbm9uLU5VTEwuCisJICovCisJdmFs dWVEYXR1bSA9IGhlYXBfZ2V0YXR0cih0dXBsZVBvbGljeSwKKwkJCQkJCQkgIEFudW1fcGdfcG9s aWN5X3BvbHJvbGVzLAorCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihwZ1BvbGljeVJlbCksCisJ CQkJCQkJICAmYXR0cklzTnVsbCk7CisJQXNzZXJ0KCFhdHRySXNOdWxsKTsKKwl7CisJCUFycmF5 VHlwZSAgKnBvbGljeV9yb2xlcyA9IERhdHVtR2V0QXJyYXlUeXBlUCh2YWx1ZURhdHVtKTsKKwkJ aW50CQkJbml0ZW1zID0gQVJSX0RJTVMocG9saWN5X3JvbGVzKVswXTsKKwkJT2lkCQkgICAqcm9s ZXMgPSAoT2lkICopIEFSUl9EQVRBX1BUUihwb2xpY3lfcm9sZXMpOworCQlTdHJpbmdJbmZvRGF0 YSByb2xlX25hbWVzOworCisJCWluaXRTdHJpbmdJbmZvKCZyb2xlX25hbWVzKTsKKworCQlmb3Ig KGludCBpID0gMDsgaSA8IG5pdGVtczsgaSsrKQorCQl7CisJCQlpZiAoT2lkSXNWYWxpZChyb2xl c1tpXSkpCisJCQl7CisJCQkJY2hhcgkgICAqcm9sZW5hbWUgPSBHZXRVc2VyTmFtZUZyb21JZChy b2xlc1tpXSwgZmFsc2UpOworCisJCQkJaWYgKHJvbGVfbmFtZXMubGVuID4gMCkKKwkJCQkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZygmcm9sZV9uYW1lcywgIiwgIik7CisJCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmcm9sZV9uYW1lcywgcXVvdGVfaWRlbnRpZmllcihyb2xlbmFtZSkpOworCQkJ CXBmcmVlKHJvbGVuYW1lKTsKKwkJCX0KKwkJfQorCisJCWlmIChyb2xlX25hbWVzLmxlbiA+IDAp CisJCQlhcHBlbmRfZGRsX29wdGlvbigmYnVmLCBwcmV0dHksIDQsICJUTyAlcyIsIHJvbGVfbmFt ZXMuZGF0YSk7CisKKwkJcGZyZWUocm9sZV9uYW1lcy5kYXRhKTsKKwl9CisKKwkvKiBVU0lORyBl eHByZXNzaW9uICovCisJdmFsdWVEYXR1bSA9IGhlYXBfZ2V0YXR0cih0dXBsZVBvbGljeSwKKwkJ CQkJCQkgIEFudW1fcGdfcG9saWN5X3BvbHF1YWwsCisJCQkJCQkJICBSZWxhdGlvbkdldERlc2Ny KHBnUG9saWN5UmVsKSwKKwkJCQkJCQkgICZhdHRySXNOdWxsKTsKKwlpZiAoIWF0dHJJc051bGwp CisJeworCQlEYXR1bQkJZXhwcjsKKworCQlleHByID0gRGlyZWN0RnVuY3Rpb25DYWxsMyhwZ19n ZXRfZXhwcl9leHQsCisJCQkJCQkJCSAgIHZhbHVlRGF0dW0sCisJCQkJCQkJCSAgIE9iamVjdElk R2V0RGF0dW0ocG9saWN5Rm9ybS0+cG9scmVsaWQpLAorCQkJCQkJCQkgICBCb29sR2V0RGF0dW0o cHJldHR5KSk7CisJCWFwcGVuZF9kZGxfb3B0aW9uKCZidWYsIHByZXR0eSwgNCwgIlVTSU5HICgl cykiLAorCQkJCQkJICBUZXh0RGF0dW1HZXRDU3RyaW5nKGV4cHIpKTsKKwl9CisKKwkvKiBXSVRI IENIRUNLIGV4cHJlc3Npb24gKi8KKwl2YWx1ZURhdHVtID0gaGVhcF9nZXRhdHRyKHR1cGxlUG9s aWN5LAorCQkJCQkJCSAgQW51bV9wZ19wb2xpY3lfcG9sd2l0aGNoZWNrLAorCQkJCQkJCSAgUmVs YXRpb25HZXREZXNjcihwZ1BvbGljeVJlbCksCisJCQkJCQkJICAmYXR0cklzTnVsbCk7CisJaWYg KCFhdHRySXNOdWxsKQorCXsKKwkJRGF0dW0JCWV4cHI7CisKKwkJZXhwciA9IERpcmVjdEZ1bmN0 aW9uQ2FsbDMocGdfZ2V0X2V4cHJfZXh0LAorCQkJCQkJCQkgICB2YWx1ZURhdHVtLAorCQkJCQkJ CQkgICBPYmplY3RJZEdldERhdHVtKHBvbGljeUZvcm0tPnBvbHJlbGlkKSwKKwkJCQkJCQkJICAg Qm9vbEdldERhdHVtKHByZXR0eSkpOworCQlhcHBlbmRfZGRsX29wdGlvbigmYnVmLCBwcmV0dHks IDQsICJXSVRIIENIRUNLICglcykiLAorCQkJCQkJICBUZXh0RGF0dW1HZXRDU3RyaW5nKGV4cHIp KTsKKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAnOycpOworCisJc3RhdGVtZW50 cyA9IGxhcHBlbmQoc3RhdGVtZW50cywgcHN0cmR1cChidWYuZGF0YSkpOworCisJc3lzdGFibGVf ZW5kc2Nhbihzc2Nhbik7CisJdGFibGVfY2xvc2UocGdQb2xpY3lSZWwsIEFjY2Vzc1NoYXJlTG9j ayk7CisJcGZyZWUoYnVmLmRhdGEpOworCisJcmV0dXJuIHN0YXRlbWVudHM7Cit9CisKKy8qCisg KiBwZ19nZXRfcG9saWN5X2RkbAorICoJCVJldHVybiBEREwgdG8gcmVjcmVhdGUgYSByb3ctbGV2 ZWwgc2VjdXJpdHkgcG9saWN5IGFzIGEgc2luZ2xlIHRleHQgcm93LgorICovCitEYXR1bQorcGdf Z2V0X3BvbGljeV9kZGwoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlGdW5jQ2FsbENvbnRleHQgKmZ1 bmNjdHg7CisJTGlzdAkgICAqc3RhdGVtZW50czsKKworCWlmIChTUkZfSVNfRklSU1RDQUxMKCkp CisJeworCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJCU9pZAkJCXRhYmxlSUQ7CisJCU5h bWUJCXBvbGljeU5hbWU7CisJCWJvb2wJCXByZXR0eTsKKworCQlmdW5jY3R4ID0gU1JGX0ZJUlNU Q0FMTF9JTklUKCk7CisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZnVuY2N0 eC0+bXVsdGlfY2FsbF9tZW1vcnlfY3R4KTsKKworCQlpZiAoUEdfQVJHSVNOVUxMKDApIHx8IFBH X0FSR0lTTlVMTCgxKSkKKwkJeworCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQp OworCQkJU1JGX1JFVFVSTl9ET05FKGZ1bmNjdHgpOworCQl9CisKKwkJdGFibGVJRCA9IFBHX0dF VEFSR19PSUQoMCk7CisJCXBvbGljeU5hbWUgPSBQR19HRVRBUkdfTkFNRSgxKTsKKwkJcHJldHR5 ID0gIVBHX0FSR0lTTlVMTCgyKSAmJiBQR19HRVRBUkdfQk9PTCgyKTsKKworCQlzdGF0ZW1lbnRz ID0gcGdfZ2V0X3BvbGljeV9kZGxfaW50ZXJuYWwodGFibGVJRCwKKwkJCQkJCQkJCQkJCU5hbWVT dHIoKnBvbGljeU5hbWUpLAorCQkJCQkJCQkJCQkJcHJldHR5KTsKKwkJZnVuY2N0eC0+dXNlcl9m Y3R4ID0gc3RhdGVtZW50czsKKwkJZnVuY2N0eC0+bWF4X2NhbGxzID0gbGlzdF9sZW5ndGgoc3Rh dGVtZW50cyk7CisKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCX0KKwor CWZ1bmNjdHggPSBTUkZfUEVSQ0FMTF9TRVRVUCgpOworCXN0YXRlbWVudHMgPSAoTGlzdCAqKSBm dW5jY3R4LT51c2VyX2ZjdHg7CisKKwlpZiAoZnVuY2N0eC0+Y2FsbF9jbnRyIDwgZnVuY2N0eC0+ bWF4X2NhbGxzKQorCXsKKwkJY2hhcgkgICAqc3RtdDsKKworCQlzdG10ID0gbGlzdF9udGgoc3Rh dGVtZW50cywgZnVuY2N0eC0+Y2FsbF9jbnRyKTsKKworCQlTUkZfUkVUVVJOX05FWFQoZnVuY2N0 eCwgQ1N0cmluZ0dldFRleHREYXR1bShzdG10KSk7CisJfQorCWVsc2UKKwl7CisJCWxpc3RfZnJl ZV9kZWVwKHN0YXRlbWVudHMpOworCQlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7CisJfQorfQpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggM2NiODQzNTlhZGYuLmNkMDI5YjQ4M2YxIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTg2MzQsNiArODYzNCwxMiBAQAogICBwcm9hcmd0eXBl cyA9PiAncmVnZGF0YWJhc2UgYm9vbCBib29sIGJvb2wnLAogICBwcm9hcmduYW1lcyA9PiAne2Rh dGFiYXNlLHByZXR0eSxvd25lcix0YWJsZXNwYWNlfScsCiAgIHByb2FyZ2RlZmF1bHRzID0+ICd7 ZmFsc2UsdHJ1ZSx0cnVlfScsIHByb3NyYyA9PiAncGdfZ2V0X2RhdGFiYXNlX2RkbCcgfSwKK3sg b2lkID0+ICc5NjgzJywgZGVzY3IgPT4gJ2dldCBEREwgdG8gcmVjcmVhdGUgYSByb3ctbGV2ZWwg c2VjdXJpdHkgcG9saWN5JywKKyAgcHJvbmFtZSA9PiAncGdfZ2V0X3BvbGljeV9kZGwnLCBwcm9y b3dzID0+ICcxJywgcHJvaXNzdHJpY3QgPT4gJ2YnLAorICBwcm9yZXRzZXQgPT4gJ3QnLCBwcm92 b2xhdGlsZSA9PiAncycsIHByb25hcmdkZWZhdWx0cyA9PiAnMScsCisgIHByb3JldHR5cGUgPT4g J3RleHQnLCBwcm9hcmd0eXBlcyA9PiAncmVnY2xhc3MgbmFtZSBib29sJywKKyAgcHJvYXJnbmFt ZXMgPT4gJ3t0YWJsZSxwb2xpY3luYW1lLHByZXR0eX0nLCBwcm9hcmdkZWZhdWx0cyA9PiAne2Zh bHNlfScsCisgIHByb3NyYyA9PiAncGdfZ2V0X3BvbGljeV9kZGwnIH0sCiB7IG9pZCA9PiAnMjUw OScsCiAgIGRlc2NyID0+ICdkZXBhcnNlIGFuIGVuY29kZWQgZXhwcmVzc2lvbiB3aXRoIHByZXR0 eS1wcmludCBvcHRpb24nLAogICBwcm9uYW1lID0+ICdwZ19nZXRfZXhwcicsIHByb3ZvbGF0aWxl ID0+ICdzJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3Jvd3NlY3VyaXR5Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cm93c2VjdXJpdHkub3V0CmluZGV4IDNhNWU4MmMzNWJkLi5iZjU0ZjY2MzM5ZiAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9yb3dzZWN1cml0eS5vdXQKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9yb3dzZWN1cml0eS5vdXQKQEAgLTUxOTUsNiArNTE5NSwyOTcg QEAgcmVzZXQgcmxzX3Rlc3QuYmxhaDsKIGRyb3AgZnVuY3Rpb24gcmxzX2YodGV4dCk7CiBkcm9w IHRhYmxlIHJsc190LCB0ZXN0X3Q7CiAtLQorLS0gVGVzdCBmb3IgcGdfZ2V0X3BvbGljeV9kZGwo dGFibGUsIHBvbGljeV9uYW1lWywgcHJldHR5XSkgZnVuY3Rpb24uCistLQorQ1JFQVRFIFRBQkxF IHJsc190YmxfMSAoCisgICAgZGlkICAgICAgICAgaW50IHByaW1hcnkga2V5LAorICAgIGNpZCAg ICAgICAgIGludCwKKyAgICBkbGV2ZWwgICAgICBpbnQgbm90IG51bGwsCisgICAgZGF1dGhvciAg ICAgbmFtZSwKKyAgICBkdGl0bGUgICAgICB0ZXh0CispOworR1JBTlQgQUxMIE9OIHJsc190Ymxf MSBUTyBwdWJsaWM7CitDUkVBVEUgVEFCTEUgcmxzX3RibF8yICgKKyAgICBwZ3VzZXIgICAgICBu YW1lIHByaW1hcnkga2V5LAorICAgIHNlY2x2ICAgICAgIGludAorKTsKK0dSQU5UIFNFTEVDVCBP TiBybHNfdGJsXzIgVE8gcHVibGljOworLS0gVGVzdCBQRVJNSVNTSVZFIGFuZCBSRVNUUklDVElW RQorQ1JFQVRFIFBPTElDWSBybHNfcDEgT04gcmxzX3RibF8xIEFTIFBFUk1JU1NJVkUKKyAgICBV U0lORyAoZGxldmVsIDw9IChTRUxFQ1Qgc2VjbHYgRlJPTSBybHNfdGJsXzIgV0hFUkUgcGd1c2Vy ID0gY3VycmVudF91c2VyKSk7CitDUkVBVEUgUE9MSUNZIHJsc19wMiBPTiBybHNfdGJsXzEgQVMg UkVTVFJJQ1RJVkUgVVNJTkcgKGNpZCA8PiA0NCBBTkQgY2lkIDwgNTApOworLS0gVGVzdCBGT1Ig QUxMIHwgU0VMRUNUIHwgSU5TRVJUIHwgVVBEQVRFIHwgREVMRVRFCitDUkVBVEUgUE9MSUNZIHJs c19wMyBPTiBybHNfdGJsXzEgRk9SIEFMTCBVU0lORyAoZGF1dGhvciA9IGN1cnJlbnRfdXNlcik7 CitDUkVBVEUgUE9MSUNZIHJsc19wNCBPTiBybHNfdGJsXzEgRk9SIFNFTEVDVCBVU0lORyAoY2lk ICUgMiA9IDApOworQ1JFQVRFIFBPTElDWSBybHNfcDUgT04gcmxzX3RibF8xIEZPUiBJTlNFUlQg V0lUSCBDSEVDSyAoY2lkICUgMiA9IDEpOworQ1JFQVRFIFBPTElDWSBybHNfcDYgT04gcmxzX3Ri bF8xIEZPUiBVUERBVEUgVVNJTkcgKGNpZCAlIDIgPSAwKTsKK0NSRUFURSBQT0xJQ1kgcmxzX3A3 IE9OIHJsc190YmxfMSBGT1IgREVMRVRFIFVTSU5HIChjaWQgPCA4KTsKKy0tIFRlc3QgVE8geyBy b2xlX25hbWUgLi4uIH0KK0NSRUFURSBQT0xJQ1kgcmxzX3A4IE9OIHJsc190YmxfMSBUTyByZWdy ZXNzX3Jsc19kYXZlLCByZWdyZXNzX3Jsc19hbGljZSBVU0lORyAodHJ1ZSk7CitDUkVBVEUgUE9M SUNZIHJsc19wOSBPTiBybHNfdGJsXzEgVE8gcmVncmVzc19ybHNfZXhlbXB0X3VzZXIgV0lUSCBD SEVDSyAoY2lkID0gKFNFTEVDVCBzZWNsdiBGUk9NIHJsc190YmxfMikpOworLS0gVGVzdCBVUERB VEUgcG9saWN5IHdpdGggYm90aCBVU0lORyBhbmQgV0lUSCBDSEVDSworQ1JFQVRFIFBPTElDWSBy bHNfcDEwIE9OIHJsc190YmxfMSBGT1IgVVBEQVRFCisgICAgVVNJTkcgKGRsZXZlbCA+IDApIFdJ VEggQ0hFQ0sgKGRsZXZlbCA8IDEwMCk7CistLSBUZXN0IEFMTCBwb2xpY3kgd2l0aCBib3RoIFVT SU5HIGFuZCBXSVRIIENIRUNLIChBUyBQRVJNSVNTSVZFIGFuZCBGT1IgQUxMIGFyZSBkZWZhdWx0 cywgb21pdHRlZCkKK0NSRUFURSBQT0xJQ1kgcmxzX3AxMSBPTiBybHNfdGJsXzEKKyAgICBVU0lO RyAoZGxldmVsID49IDEpIFdJVEggQ0hFQ0sgKGRsZXZlbCA8PSA5OSk7CistLSBUZXN0IFJFU1RS SUNUSVZFIG9uIGEgc3BlY2lmaWMgY29tbWFuZAorQ1JFQVRFIFBPTElDWSBybHNfcDEyIE9OIHJs c190YmxfMSBBUyBSRVNUUklDVElWRSBGT1IgU0VMRUNUCisgICAgVVNJTkcgKGNpZCA+IDApOwor LS0gTlVMTCBpbnB1dHMgc2hvdWxkIHJldHVybiBubyByb3dzCitTRUxFQ1QgY291bnQoKikgRlJP TSBwZ19nZXRfcG9saWN5X2RkbChOVUxMLCAncmxzX3AxJyk7CisgY291bnQgCistLS0tLS0tCisg ICAgIDAKKygxIHJvdykKKworU0VMRUNUIGNvdW50KCopIEZST00gcGdfZ2V0X3BvbGljeV9kZGwo J3Jsc190YmxfMScsIE5VTEwpOworIGNvdW50IAorLS0tLS0tLQorICAgICAwCisoMSByb3cpCisK K1NFTEVDVCBjb3VudCgqKSBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKE5VTEwsIE5VTEwpOworIGNv dW50IAorLS0tLS0tLQorICAgICAwCisoMSByb3cpCisKKy0tIFRhYmxlIGRvZXMgbm90IGV4aXN0 CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdub25leGlzdGVudF90YmwnLCAncmxz X3AxJyk7CitFUlJPUjogIHJlbGF0aW9uICJub25leGlzdGVudF90YmwiIGRvZXMgbm90IGV4aXN0 CitMSU5FIDE6IFNFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ25vbmV4aXN0ZW50X3Ri bCcsICdybHNfcDEnKS4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF4KKy0tIFBvbGljeSBkb2VzIG5vdCBleGlzdAorU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5 X2RkbCgncmxzX3RibF8xJywgJ25vbmV4aXN0ZW50X3BvbCcpOworRVJST1I6ICBwb2xpY3kgIm5v bmV4aXN0ZW50X3BvbCIgZm9yIHRhYmxlICJyZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xIiBk b2VzIG5vdCBleGlzdAorLS0gV2l0aG91dCBwcmV0dHkgZm9ybWF0dGluZyAoZGVmYXVsdCk7IGFs c28gdmVyaWZ5IGV4cGxpY2l0IGZhbHNlIGVxdWFscyBkZWZhdWx0CitTRUxFQ1QgKiBGUk9NIHBn X2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AxJyk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3BvbGljeV9kZGwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQ1JFQVRFIFBPTElDWSBybHNfcDEgT04gcmVncmVzc19ybHNfc2NoZW1hLnJs c190YmxfMSBVU0lORyAoKGRsZXZlbCA8PSAoIFNFTEVDVCBybHNfdGJsXzIuc2VjbHYrCisgICAg RlJPTSBybHNfdGJsXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICBXSEVSRSAocmxzX3RibF8y LnBndXNlciA9IENVUlJFTlRfVVNFUikpKSk7CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDInKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9wb2xpY3lfZGRsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBQT0xJQ1kgcmxzX3AyIE9OIHJl Z3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEgQVMgUkVTVFJJQ1RJVkUgVVNJTkcgKCgoY2lkIDw+ IDQ0KSBBTkQgKGNpZCA8IDUwKSkpOworKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9w b2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AzJyk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBnX2dldF9wb2xpY3lfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFBPTElD WSBybHNfcDMgT04gcmVncmVzc19ybHNfc2NoZW1hLnJsc190YmxfMSBVU0lORyAoKGRhdXRob3Ig PSBDVVJSRU5UX1VTRVIpKTsKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5 X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNCcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3BvbGljeV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgUE9MSUNZ IHJsc19wNCBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xIEZPUiBTRUxFQ1QgVVNJTkcg KCgoY2lkICUgMikgPSAwKSk7CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGlj eV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDUnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBnX2dldF9wb2xpY3lfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENS RUFURSBQT0xJQ1kgcmxzX3A1IE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEgRk9SIElO U0VSVCBXSVRIIENIRUNLICgoKGNpZCAlIDIpID0gMSkpOworKDEgcm93KQorCitTRUxFQ1QgKiBG Uk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A2Jyk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfcG9saWN5X2RkbCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIENSRUFURSBQT0xJQ1kgcmxzX3A2IE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEg Rk9SIFVQREFURSBVU0lORyAoKChjaWQgJSAyKSA9IDApKTsKKygxIHJvdykKKworU0VMRUNUICog RlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNycpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3BvbGljeV9kZGwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUg UE9MSUNZIHJsc19wNyBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xIEZPUiBERUxFVEUg VVNJTkcgKChjaWQgPCA4KSk7CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGlj eV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDgnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBnX2dldF9wb2xpY3lfZGRsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBQT0xJQ1kgcmxzX3A4IE9OIHJlZ3Jlc3Nfcmxz X3NjaGVtYS5ybHNfdGJsXzEgVE8gcmVncmVzc19ybHNfZGF2ZSwgcmVncmVzc19ybHNfYWxpY2Ug VVNJTkcgKHRydWUpOworKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRs KCdybHNfdGJsXzEnLCAncmxzX3A5Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfcG9saWN5X2RkbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVB VEUgUE9MSUNZIHJsc19wOSBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xIFRPIHJlZ3Jl c3NfcmxzX2V4ZW1wdF91c2VyIFdJVEggQ0hFQ0sgKChjaWQgPSAoIFNFTEVDVCBybHNfdGJsXzIu c2VjbHYrCisgICAgRlJPTSBybHNfdGJsXzIpKSk7CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDEwJyk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3BvbGljeV9kZGwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVB VEUgUE9MSUNZIHJsc19wMTAgT04gcmVncmVzc19ybHNfc2NoZW1hLnJsc190YmxfMSBGT1IgVVBE QVRFIFVTSU5HICgoZGxldmVsID4gMCkpIFdJVEggQ0hFQ0sgKChkbGV2ZWwgPCAxMDApKTsKKygx IHJvdykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Js c19wMTEnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdf Z2V0X3BvbGljeV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBD UkVBVEUgUE9MSUNZIHJsc19wMTEgT04gcmVncmVzc19ybHNfc2NoZW1hLnJsc190YmxfMSBVU0lO RyAoKGRsZXZlbCA+PSAxKSkgV0lUSCBDSEVDSyAoKGRsZXZlbCA8PSA5OSkpOworKDEgcm93KQor CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AxMicp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfcG9saWN5 X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBQT0xJQ1kgcmxzX3Ax MiBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xIEFTIFJFU1RSSUNUSVZFIEZPUiBTRUxF Q1QgVVNJTkcgKChjaWQgPiAwKSk7CisoMSByb3cpCisKKy0tIEV4cGxpY2l0IGZhbHNlIG11c3Qg bWF0Y2ggb21pdHRpbmcgdGhlIGFyZ3VtZW50CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lf ZGRsKCdybHNfdGJsXzEnLCAncmxzX3AxMCcsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfcG9saWN5X2RkbCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBQT0xJ Q1kgcmxzX3AxMCBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xIEZPUiBVUERBVEUgVVNJ TkcgKChkbGV2ZWwgPiAwKSkgV0lUSCBDSEVDSyAoKGRsZXZlbCA8IDEwMCkpOworKDEgcm93KQor CistLSBOVUxMIHByZXR0eSBtdXN0IGFsc28gZGVmYXVsdCB0byBub24tcHJldHR5CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AxMCcsIE5VTEwpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9w b2xpY3lfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQ1JFQVRFIFBPTElDWSBybHNfcDEwIE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNf dGJsXzEgRk9SIFVQREFURSBVU0lORyAoKGRsZXZlbCA+IDApKSBXSVRIIENIRUNLICgoZGxldmVs IDwgMTAwKSk7CisoMSByb3cpCisKKy0tIHByZXR0eSBhY2NlcHRzIGFsbCBzdGFuZGFyZCBib29s ZWFuIHJlcHJlc2VudGF0aW9uczogdHJ1ZS9mYWxzZSwgb24vb2ZmLCAxLzAKK1xwc2V0IGZvcm1h dCB1bmFsaWduZWQKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScs ICdybHNfcDMnLCAnb24nOjpib29sKTsKK3BnX2dldF9wb2xpY3lfZGRsCitDUkVBVEUgUE9MSUNZ IHJsc19wMyBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xCisgICAgVVNJTkcgKGRhdXRo b3IgPSBDVVJSRU5UX1VTRVIpOworKDEgcm93KQorU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5 X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMycsICcxJzo6Ym9vbCk7CitwZ19nZXRfcG9saWN5X2Rk bAorQ1JFQVRFIFBPTElDWSBybHNfcDMgT04gcmVncmVzc19ybHNfc2NoZW1hLnJsc190YmxfMQor ICAgIFVTSU5HIChkYXV0aG9yID0gQ1VSUkVOVF9VU0VSKTsKKygxIHJvdykKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDMnLCAnb2ZmJzo6Ym9vbCk7 CitwZ19nZXRfcG9saWN5X2RkbAorQ1JFQVRFIFBPTElDWSBybHNfcDMgT04gcmVncmVzc19ybHNf c2NoZW1hLnJsc190YmxfMSBVU0lORyAoKGRhdXRob3IgPSBDVVJSRU5UX1VTRVIpKTsKKygxIHJv dykKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDMn LCAnMCc6OmJvb2wpOworcGdfZ2V0X3BvbGljeV9kZGwKK0NSRUFURSBQT0xJQ1kgcmxzX3AzIE9O IHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEgVVNJTkcgKChkYXV0aG9yID0gQ1VSUkVOVF9V U0VSKSk7CisoMSByb3cpCitccHNldCBmb3JtYXQgYWxpZ25lZAorLS0gV2l0aCBwcmV0dHkgZm9y bWF0dGluZworXHBzZXQgZm9ybWF0IHVuYWxpZ25lZAorU0VMRUNUICogRlJPTSBwZ19nZXRfcG9s aWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMScsIHRydWUpOworcGdfZ2V0X3BvbGljeV9kZGwK K0NSRUFURSBQT0xJQ1kgcmxzX3AxIE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEKKyAg ICBVU0lORyAoZGxldmVsIDw9ICgoIFNFTEVDVCBybHNfdGJsXzIuc2VjbHYKKyAgIEZST00gcmxz X3RibF8yCisgIFdIRVJFIHJsc190YmxfMi5wZ3VzZXIgPSBDVVJSRU5UX1VTRVIpKSk7CisoMSBy b3cpCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3Ay JywgdHJ1ZSk7CitwZ19nZXRfcG9saWN5X2RkbAorQ1JFQVRFIFBPTElDWSBybHNfcDIgT04gcmVn cmVzc19ybHNfc2NoZW1hLnJsc190YmxfMQorICAgIEFTIFJFU1RSSUNUSVZFCisgICAgVVNJTkcg KGNpZCA8PiA0NCBBTkQgY2lkIDwgNTApOworKDEgcm93KQorU0VMRUNUICogRlJPTSBwZ19nZXRf cG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMycsIHRydWUpOworcGdfZ2V0X3BvbGljeV9k ZGwKK0NSRUFURSBQT0xJQ1kgcmxzX3AzIE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEK KyAgICBVU0lORyAoZGF1dGhvciA9IENVUlJFTlRfVVNFUik7CisoMSByb3cpCitTRUxFQ1QgKiBG Uk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A0JywgdHJ1ZSk7CitwZ19n ZXRfcG9saWN5X2RkbAorQ1JFQVRFIFBPTElDWSBybHNfcDQgT04gcmVncmVzc19ybHNfc2NoZW1h LnJsc190YmxfMQorICAgIEZPUiBTRUxFQ1QKKyAgICBVU0lORyAoKGNpZCAlIDIpID0gMCk7Ciso MSByb3cpCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxz X3A1JywgdHJ1ZSk7CitwZ19nZXRfcG9saWN5X2RkbAorQ1JFQVRFIFBPTElDWSBybHNfcDUgT04g cmVncmVzc19ybHNfc2NoZW1hLnJsc190YmxfMQorICAgIEZPUiBJTlNFUlQKKyAgICBXSVRIIENI RUNLICgoY2lkICUgMikgPSAxKTsKKygxIHJvdykKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGlj eV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDYnLCB0cnVlKTsKK3BnX2dldF9wb2xpY3lfZGRsCitD UkVBVEUgUE9MSUNZIHJsc19wNiBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xCisgICAg Rk9SIFVQREFURQorICAgIFVTSU5HICgoY2lkICUgMikgPSAwKTsKKygxIHJvdykKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDcnLCB0cnVlKTsKK3Bn X2dldF9wb2xpY3lfZGRsCitDUkVBVEUgUE9MSUNZIHJsc19wNyBPTiByZWdyZXNzX3Jsc19zY2hl bWEucmxzX3RibF8xCisgICAgRk9SIERFTEVURQorICAgIFVTSU5HIChjaWQgPCA4KTsKKygxIHJv dykKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDgn LCB0cnVlKTsKK3BnX2dldF9wb2xpY3lfZGRsCitDUkVBVEUgUE9MSUNZIHJsc19wOCBPTiByZWdy ZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xCisgICAgVE8gcmVncmVzc19ybHNfZGF2ZSwgcmVncmVz c19ybHNfYWxpY2UKKyAgICBVU0lORyAodHJ1ZSk7CisoMSByb3cpCitTRUxFQ1QgKiBGUk9NIHBn X2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A5JywgdHJ1ZSk7CitwZ19nZXRfcG9s aWN5X2RkbAorQ1JFQVRFIFBPTElDWSBybHNfcDkgT04gcmVncmVzc19ybHNfc2NoZW1hLnJsc190 YmxfMQorICAgIFRPIHJlZ3Jlc3NfcmxzX2V4ZW1wdF91c2VyCisgICAgV0lUSCBDSEVDSyAoY2lk ID0gKCggU0VMRUNUIHJsc190YmxfMi5zZWNsdgorICAgRlJPTSBybHNfdGJsXzIpKSk7CisoMSBy b3cpCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3Ax MCcsIHRydWUpOworcGdfZ2V0X3BvbGljeV9kZGwKK0NSRUFURSBQT0xJQ1kgcmxzX3AxMCBPTiBy ZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xCisgICAgRk9SIFVQREFURQorICAgIFVTSU5HIChk bGV2ZWwgPiAwKQorICAgIFdJVEggQ0hFQ0sgKGRsZXZlbCA8IDEwMCk7CisoMSByb3cpCitTRUxF Q1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AxMScsIHRydWUp OworcGdfZ2V0X3BvbGljeV9kZGwKK0NSRUFURSBQT0xJQ1kgcmxzX3AxMSBPTiByZWdyZXNzX3Js c19zY2hlbWEucmxzX3RibF8xCisgICAgVVNJTkcgKGRsZXZlbCA+PSAxKQorICAgIFdJVEggQ0hF Q0sgKGRsZXZlbCA8PSA5OSk7CisoMSByb3cpCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lf ZGRsKCdybHNfdGJsXzEnLCAncmxzX3AxMicsIHRydWUpOworcGdfZ2V0X3BvbGljeV9kZGwKK0NS RUFURSBQT0xJQ1kgcmxzX3AxMiBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xCisgICAg QVMgUkVTVFJJQ1RJVkUKKyAgICBGT1IgU0VMRUNUCisgICAgVVNJTkcgKGNpZCA+IDApOworKDEg cm93KQorXHBzZXQgZm9ybWF0IGFsaWduZWQKKy0tIFJvdW5kLXRyaXA6IHRoZSBnZW5lcmF0ZWQg RERMIG11c3QgYmUgcmUtZXhlY3V0YWJsZSwgaW5jbHVkaW5nIGZvciBhdG9taWMKKy0tIGJvb2xl YW4gZXhwcmVzc2lvbnMgdGhhdCBwZ19nZXRfZXhwcigpIGRvZXMgbm90IHBhcmVudGhlc2l6ZS4K K0NSRUFURSBUQUJMRSBybHNfcnQgKGEgaW50KTsKK0NSRUFURSBQT0xJQ1kgcnRfdHJ1ZSBPTiBy bHNfcnQgVVNJTkcgKHRydWUpOworQ1JFQVRFIFBPTElDWSBydF9mYWxzZSBPTiBybHNfcnQgRk9S IElOU0VSVCBXSVRIIENIRUNLIChmYWxzZSk7CitDUkVBVEUgVEVNUCBUQUJMRSBydF9kZGwgQVMK KyAgICBTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc19ydCcsICdydF90cnVlJykgQVMgZGRs CisgICAgVU5JT04gQUxMCisgICAgU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfcnQnLCAn cnRfZmFsc2UnKTsKK0RST1AgUE9MSUNZIHJ0X3RydWUgT04gcmxzX3J0OworRFJPUCBQT0xJQ1kg cnRfZmFsc2UgT04gcmxzX3J0OworU0VMRUNUIGRkbCBGUk9NIHJ0X2RkbCBPUkRFUiBCWSBkZGwg XGdleGVjCitDUkVBVEUgUE9MSUNZIHJ0X2ZhbHNlIE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNf cnQgRk9SIElOU0VSVCBXSVRIIENIRUNLIChmYWxzZSk7CitDUkVBVEUgUE9MSUNZIHJ0X3RydWUg T04gcmVncmVzc19ybHNfc2NoZW1hLnJsc19ydCBVU0lORyAodHJ1ZSk7CitTRUxFQ1QgcG9sbmFt ZSBGUk9NIHBnX3BvbGljeSBXSEVSRSBwb2xyZWxpZCA9ICdybHNfcnQnOjpyZWdjbGFzcyBPUkRF UiBCWSBwb2xuYW1lOworIHBvbG5hbWUgIAorLS0tLS0tLS0tLQorIHJ0X2ZhbHNlCisgcnRfdHJ1 ZQorKDIgcm93cykKKworRFJPUCBUQUJMRSBybHNfcnQ7CistLSBDbGVhbiB1cCBvYmplY3RzIGNy ZWF0ZWQgZm9yIHRlc3RpbmcgcGdfZ2V0X3BvbGljeV9kZGwgZnVuY3Rpb24uCitEUk9QIFBPTElD WSBybHNfcDEgT04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3AyIE9OIHJsc190YmxfMTsK K0RST1AgUE9MSUNZIHJsc19wMyBPTiBybHNfdGJsXzE7CitEUk9QIFBPTElDWSBybHNfcDQgT04g cmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3A1IE9OIHJsc190YmxfMTsKK0RST1AgUE9MSUNZ IHJsc19wNiBPTiBybHNfdGJsXzE7CitEUk9QIFBPTElDWSBybHNfcDcgT04gcmxzX3RibF8xOwor RFJPUCBQT0xJQ1kgcmxzX3A4IE9OIHJsc190YmxfMTsKK0RST1AgUE9MSUNZIHJsc19wOSBPTiBy bHNfdGJsXzE7CitEUk9QIFBPTElDWSBybHNfcDEwIE9OIHJsc190YmxfMTsKK0RST1AgUE9MSUNZ IHJsc19wMTEgT04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3AxMiBPTiBybHNfdGJsXzE7 CitEUk9QIFRBQkxFIHJsc190YmxfMTsKK0RST1AgVEFCTEUgcmxzX3RibF8yOworLS0KIC0tIENs ZWFuIHVwIG9iamVjdHMKIC0tCiBSRVNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT047CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9yb3dzZWN1cml0eS5zcWwgYi9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9yb3dzZWN1cml0eS5zcWwKaW5kZXggNmIzNTY2MjcxZGYuLmU0ZDY0ODEzZTY1IDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9yb3dzZWN1cml0eS5zcWwKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvcm93c2VjdXJpdHkuc3FsCkBAIC0yNTk4LDYgKzI1OTgsMTM0IEBA IHJlc2V0IHJsc190ZXN0LmJsYWg7CiBkcm9wIGZ1bmN0aW9uIHJsc19mKHRleHQpOwogZHJvcCB0 YWJsZSBybHNfdCwgdGVzdF90OwogCistLQorLS0gVGVzdCBmb3IgcGdfZ2V0X3BvbGljeV9kZGwo dGFibGUsIHBvbGljeV9uYW1lWywgcHJldHR5XSkgZnVuY3Rpb24uCistLQorQ1JFQVRFIFRBQkxF IHJsc190YmxfMSAoCisgICAgZGlkICAgICAgICAgaW50IHByaW1hcnkga2V5LAorICAgIGNpZCAg ICAgICAgIGludCwKKyAgICBkbGV2ZWwgICAgICBpbnQgbm90IG51bGwsCisgICAgZGF1dGhvciAg ICAgbmFtZSwKKyAgICBkdGl0bGUgICAgICB0ZXh0CispOworR1JBTlQgQUxMIE9OIHJsc190Ymxf MSBUTyBwdWJsaWM7CitDUkVBVEUgVEFCTEUgcmxzX3RibF8yICgKKyAgICBwZ3VzZXIgICAgICBu YW1lIHByaW1hcnkga2V5LAorICAgIHNlY2x2ICAgICAgIGludAorKTsKK0dSQU5UIFNFTEVDVCBP TiBybHNfdGJsXzIgVE8gcHVibGljOworCistLSBUZXN0IFBFUk1JU1NJVkUgYW5kIFJFU1RSSUNU SVZFCitDUkVBVEUgUE9MSUNZIHJsc19wMSBPTiBybHNfdGJsXzEgQVMgUEVSTUlTU0lWRQorICAg IFVTSU5HIChkbGV2ZWwgPD0gKFNFTEVDVCBzZWNsdiBGUk9NIHJsc190YmxfMiBXSEVSRSBwZ3Vz ZXIgPSBjdXJyZW50X3VzZXIpKTsKK0NSRUFURSBQT0xJQ1kgcmxzX3AyIE9OIHJsc190YmxfMSBB UyBSRVNUUklDVElWRSBVU0lORyAoY2lkIDw+IDQ0IEFORCBjaWQgPCA1MCk7CisKKy0tIFRlc3Qg Rk9SIEFMTCB8IFNFTEVDVCB8IElOU0VSVCB8IFVQREFURSB8IERFTEVURQorQ1JFQVRFIFBPTElD WSBybHNfcDMgT04gcmxzX3RibF8xIEZPUiBBTEwgVVNJTkcgKGRhdXRob3IgPSBjdXJyZW50X3Vz ZXIpOworQ1JFQVRFIFBPTElDWSBybHNfcDQgT04gcmxzX3RibF8xIEZPUiBTRUxFQ1QgVVNJTkcg KGNpZCAlIDIgPSAwKTsKK0NSRUFURSBQT0xJQ1kgcmxzX3A1IE9OIHJsc190YmxfMSBGT1IgSU5T RVJUIFdJVEggQ0hFQ0sgKGNpZCAlIDIgPSAxKTsKK0NSRUFURSBQT0xJQ1kgcmxzX3A2IE9OIHJs c190YmxfMSBGT1IgVVBEQVRFIFVTSU5HIChjaWQgJSAyID0gMCk7CitDUkVBVEUgUE9MSUNZIHJs c19wNyBPTiBybHNfdGJsXzEgRk9SIERFTEVURSBVU0lORyAoY2lkIDwgOCk7CisKKy0tIFRlc3Qg VE8geyByb2xlX25hbWUgLi4uIH0KK0NSRUFURSBQT0xJQ1kgcmxzX3A4IE9OIHJsc190YmxfMSBU TyByZWdyZXNzX3Jsc19kYXZlLCByZWdyZXNzX3Jsc19hbGljZSBVU0lORyAodHJ1ZSk7CitDUkVB VEUgUE9MSUNZIHJsc19wOSBPTiBybHNfdGJsXzEgVE8gcmVncmVzc19ybHNfZXhlbXB0X3VzZXIg V0lUSCBDSEVDSyAoY2lkID0gKFNFTEVDVCBzZWNsdiBGUk9NIHJsc190YmxfMikpOworCistLSBU ZXN0IFVQREFURSBwb2xpY3kgd2l0aCBib3RoIFVTSU5HIGFuZCBXSVRIIENIRUNLCitDUkVBVEUg UE9MSUNZIHJsc19wMTAgT04gcmxzX3RibF8xIEZPUiBVUERBVEUKKyAgICBVU0lORyAoZGxldmVs ID4gMCkgV0lUSCBDSEVDSyAoZGxldmVsIDwgMTAwKTsKKworLS0gVGVzdCBBTEwgcG9saWN5IHdp dGggYm90aCBVU0lORyBhbmQgV0lUSCBDSEVDSyAoQVMgUEVSTUlTU0lWRSBhbmQgRk9SIEFMTCBh cmUgZGVmYXVsdHMsIG9taXR0ZWQpCitDUkVBVEUgUE9MSUNZIHJsc19wMTEgT04gcmxzX3RibF8x CisgICAgVVNJTkcgKGRsZXZlbCA+PSAxKSBXSVRIIENIRUNLIChkbGV2ZWwgPD0gOTkpOworCist LSBUZXN0IFJFU1RSSUNUSVZFIG9uIGEgc3BlY2lmaWMgY29tbWFuZAorQ1JFQVRFIFBPTElDWSBy bHNfcDEyIE9OIHJsc190YmxfMSBBUyBSRVNUUklDVElWRSBGT1IgU0VMRUNUCisgICAgVVNJTkcg KGNpZCA+IDApOworCistLSBOVUxMIGlucHV0cyBzaG91bGQgcmV0dXJuIG5vIHJvd3MKK1NFTEVD VCBjb3VudCgqKSBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKE5VTEwsICdybHNfcDEnKTsKK1NFTEVD VCBjb3VudCgqKSBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCBOVUxMKTsKK1NF TEVDVCBjb3VudCgqKSBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKE5VTEwsIE5VTEwpOworCistLSBU YWJsZSBkb2VzIG5vdCBleGlzdAorU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgnbm9u ZXhpc3RlbnRfdGJsJywgJ3Jsc19wMScpOworLS0gUG9saWN5IGRvZXMgbm90IGV4aXN0CitTRUxF Q1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAnbm9uZXhpc3RlbnRfcG9s Jyk7CisKKy0tIFdpdGhvdXQgcHJldHR5IGZvcm1hdHRpbmcgKGRlZmF1bHQpOyBhbHNvIHZlcmlm eSBleHBsaWNpdCBmYWxzZSBlcXVhbHMgZGVmYXVsdAorU0VMRUNUICogRlJPTSBwZ19nZXRfcG9s aWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMScpOworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9s aWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMicpOworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9s aWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMycpOworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9s aWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNCcpOworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9s aWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNScpOworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9s aWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNicpOworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9s aWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNycpOworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9s aWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wOCcpOworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9s aWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wOScpOworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9s aWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMTAnKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Bv bGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDExJyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9w b2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AxMicpOworLS0gRXhwbGljaXQgZmFsc2UgbXVz dCBtYXRjaCBvbWl0dGluZyB0aGUgYXJndW1lbnQKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGlj eV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDEwJywgZmFsc2UpOworLS0gTlVMTCBwcmV0dHkgbXVz dCBhbHNvIGRlZmF1bHQgdG8gbm9uLXByZXR0eQorU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5 X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMTAnLCBOVUxMKTsKKworLS0gcHJldHR5IGFjY2VwdHMg YWxsIHN0YW5kYXJkIGJvb2xlYW4gcmVwcmVzZW50YXRpb25zOiB0cnVlL2ZhbHNlLCBvbi9vZmYs IDEvMAorXHBzZXQgZm9ybWF0IHVuYWxpZ25lZAorU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5 X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMycsICdvbic6OmJvb2wpOworU0VMRUNUICogRlJPTSBw Z19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMycsICcxJzo6Ym9vbCk7CitTRUxF Q1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AzJywgJ29mZic6 OmJvb2wpOworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Js c19wMycsICcwJzo6Ym9vbCk7CitccHNldCBmb3JtYXQgYWxpZ25lZAorCistLSBXaXRoIHByZXR0 eSBmb3JtYXR0aW5nCitccHNldCBmb3JtYXQgdW5hbGlnbmVkCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AxJywgdHJ1ZSk7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AyJywgdHJ1ZSk7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AzJywgdHJ1ZSk7CitT RUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A0JywgdHJ1 ZSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A1 JywgdHJ1ZSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAn cmxzX3A2JywgdHJ1ZSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJs XzEnLCAncmxzX3A3JywgdHJ1ZSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdy bHNfdGJsXzEnLCAncmxzX3A4JywgdHJ1ZSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lf ZGRsKCdybHNfdGJsXzEnLCAncmxzX3A5JywgdHJ1ZSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9w b2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AxMCcsIHRydWUpOworU0VMRUNUICogRlJPTSBw Z19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMTEnLCB0cnVlKTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDEyJywgdHJ1ZSk7Citc cHNldCBmb3JtYXQgYWxpZ25lZAorCistLSBSb3VuZC10cmlwOiB0aGUgZ2VuZXJhdGVkIERETCBt dXN0IGJlIHJlLWV4ZWN1dGFibGUsIGluY2x1ZGluZyBmb3IgYXRvbWljCistLSBib29sZWFuIGV4 cHJlc3Npb25zIHRoYXQgcGdfZ2V0X2V4cHIoKSBkb2VzIG5vdCBwYXJlbnRoZXNpemUuCitDUkVB VEUgVEFCTEUgcmxzX3J0IChhIGludCk7CitDUkVBVEUgUE9MSUNZIHJ0X3RydWUgT04gcmxzX3J0 IFVTSU5HICh0cnVlKTsKK0NSRUFURSBQT0xJQ1kgcnRfZmFsc2UgT04gcmxzX3J0IEZPUiBJTlNF UlQgV0lUSCBDSEVDSyAoZmFsc2UpOworQ1JFQVRFIFRFTVAgVEFCTEUgcnRfZGRsIEFTCisgICAg U0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfcnQnLCAncnRfdHJ1ZScpIEFTIGRkbAorICAg IFVOSU9OIEFMTAorICAgIFNFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3J0JywgJ3J0X2Zh bHNlJyk7CitEUk9QIFBPTElDWSBydF90cnVlIE9OIHJsc19ydDsKK0RST1AgUE9MSUNZIHJ0X2Zh bHNlIE9OIHJsc19ydDsKK1NFTEVDVCBkZGwgRlJPTSBydF9kZGwgT1JERVIgQlkgZGRsIFxnZXhl YworU0VMRUNUIHBvbG5hbWUgRlJPTSBwZ19wb2xpY3kgV0hFUkUgcG9scmVsaWQgPSAncmxzX3J0 Jzo6cmVnY2xhc3MgT1JERVIgQlkgcG9sbmFtZTsKK0RST1AgVEFCTEUgcmxzX3J0OworCistLSBD bGVhbiB1cCBvYmplY3RzIGNyZWF0ZWQgZm9yIHRlc3RpbmcgcGdfZ2V0X3BvbGljeV9kZGwgZnVu Y3Rpb24uCitEUk9QIFBPTElDWSBybHNfcDEgT04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxz X3AyIE9OIHJsc190YmxfMTsKK0RST1AgUE9MSUNZIHJsc19wMyBPTiBybHNfdGJsXzE7CitEUk9Q IFBPTElDWSBybHNfcDQgT04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3A1IE9OIHJsc190 YmxfMTsKK0RST1AgUE9MSUNZIHJsc19wNiBPTiBybHNfdGJsXzE7CitEUk9QIFBPTElDWSBybHNf cDcgT04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3A4IE9OIHJsc190YmxfMTsKK0RST1Ag UE9MSUNZIHJsc19wOSBPTiBybHNfdGJsXzE7CitEUk9QIFBPTElDWSBybHNfcDEwIE9OIHJsc190 YmxfMTsKK0RST1AgUE9MSUNZIHJsc19wMTEgT04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxz X3AxMiBPTiBybHNfdGJsXzE7CitEUk9QIFRBQkxFIHJsc190YmxfMTsKK0RST1AgVEFCTEUgcmxz X3RibF8yOworCiAtLQogLS0gQ2xlYW4gdXAgb2JqZWN0cwogLS0KLS0gCjIuNTEuMAoK --000000000000e700d90655ef9258--