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 1wgh1l-006Kzu-35 for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Jul 2026 10:58:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wgh1k-00H3pA-2x for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Jul 2026 10:58:16 +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 1wgh1j-00H3oo-2j for pgsql-hackers@lists.postgresql.org; Mon, 06 Jul 2026 10:58:16 +0000 Received: from mail-ed1-x534.google.com ([2a00:1450:4864:20::534]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wgh1f-00000001olz-32r3 for pgsql-hackers@lists.postgresql.org; Mon, 06 Jul 2026 10:58:14 +0000 Received: by mail-ed1-x534.google.com with SMTP id 4fb4d7f45d1cf-69a5ecbbfb2so1010683a12.2 for ; Mon, 06 Jul 2026 03:58:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1783335489; cv=none; d=google.com; s=arc-20260327; b=VWW7khVncncG8yYZZgW/FEnOLp8RhXSsK+jKpjKXvs6lJRnSMVIwJAg+nd2oPRhVPd 5ogcEIh5u4n9mcd0WVwHihyDd7V8d9f8Th4HUae9aV4BRQYhCtOUhiH/5WF962m8Z9iA LwsMO1tFSImLnCtbg40DSqw0vRKuY6JAhaa8Wn/p4VDcSlths2lzCTZ4B/xOY5tSFk2U 8h4FVeNKlIC8ee1EhZU6UUY3po4K2blcEZxlB8GfGL7lloWSYsI6Trl9WGygVaBT/N83 68CzVwAJlHjAkGtxiwN65zZMlRK6nu20Dvhe5nOcJgh7h4SvObDZ6vyMhiqDjryj2tNB ng+g== 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=2TkrC/UPAQbwF8De7R46Wq2Xe2xsOkmg1uIGnUZtIpA=; fh=3DHAm0KLh4SNMwonwOZHb87LiNdHjbBY2tBNWRDemcU=; b=XthBAZjWPxSP9MsNtzAIwtiG5zkvduLO69/qdFlB2y0pEoHzVjmP56u1HF62ybc7Ia +/ZBZgsdjgyxIgIX12r8w2T4tou5sdVZcfwUjW0iwGbxTDoQrklQ/M4iAIVaJyb4Ls+N oQk/b8aDV7sOsNOqB3SHpR7QwYBHagcj7JMP2lFeSZsel6SCZJjDoWuPe20WH4lKg1X0 ++0YgfMduGIEK25HAUGr2j1TvpRseDJKP3zcaeuhwQlmQuzwjqEHfzZs9CnppTW4Nr1v eb/LUNbFdyxnhCvea4EvqzAh8liJmpVjycq0PTtV9Gj+DTnSGkjXRFGKswDgBii58y1c CTaQ==; 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=1783335489; x=1783940289; 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=2TkrC/UPAQbwF8De7R46Wq2Xe2xsOkmg1uIGnUZtIpA=; b=Fb9N59LnOtf5qCbnukadAmxlPZMmEh5Sle+L7hF0wIOidaCprRfV/rlbgPE/Hk6eRI W0dkfL03hl1V3TyvK9iHc1cYPiPqkHN5Akl1NRvNm37x9ogAkRDJx5M/pl5PRQznMpJe Z/O2hsWg1c1I72BP6eXfoWXX9Tm+gcWxDDWCawlM6OFOMJc7u6jF4MP1UZr99DmczfRr oRPwg6hnOpS/TdlRyVnokFENXzgod168WAy6P/NRht/QvOPsZFAX/hVWZ9FLsOKUkkb3 1abCPWI4XQFraff8RL9cRCs/i7/LdpTfeZE2OkRURjPSahnevx1/N2Pi6ADj/JyabkJM Pifg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783335489; x=1783940289; 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=2TkrC/UPAQbwF8De7R46Wq2Xe2xsOkmg1uIGnUZtIpA=; b=B2U7X9YaLif2QObMy6UFo67K7CocKRNm/MuKHPdau904/QXWVEWJRX3vQDnx4I7nhV /ruGbtTae5K+O9qkJ71juDeSjV+IRdRKUpRSLc9boLeUPOrTFu3TddJRFfs+/x3LRPyR JGGCg2Ptxt2zQ/EDK39OeqjNoUGncuuiZIXi+k2dU5zhb3WPsV2PyNrjlT4sS94YCv7L Hsc3zgiiNEKHj0wqZyRUT3T6nb30kp358qHMowP0VJorkGa47dWxntfuaR9EF+oaXj6q qqPnMXeZ7rhmk85g5BzXIPm9vRihrCd8LgiM90Cje2sBPlkB8vnerw0DWWifhbMGczfu QgUw== X-Forwarded-Encrypted: i=1; AHgh+Ro//ZxreWopcpkIpaCDbQhXHDL4fCr4VkyPb87VmaYBewwiE3s47apVTl0V2wfCTwvWibpUI63meJIO4/uQ@lists.postgresql.org X-Gm-Message-State: AOJu0Yyb7Rli3WXg3WIt7ZuFHdpD0hfg+VBqNSjC6Wz1o86UGpNdga3j YGOoKUBgE/v6i4cEmGmjEKdx8FCHkf2UtJpzLY3ZffsVUZedIM4z99xz9OV7WrLtQCw6HpkYO5N soxY5dqUAgSUat4BIhZVolUJacyHFezu1z83/3j1k X-Gm-Gg: AfdE7ckyZojRUKgS3TVCX7IkLhavYo82pEa6EmZ6Pqfp0U6WuRNMrnXrICmds5Srv0x bebIBRpAe3fIpvXKfY4Maym+S+7hxQFFlLSO0yaRFDJ+6oLdmMa97mxxEfOVMGFbgNrBttId/yR XZ3CHPYlBF7RuC2gocyRfg4oTcKdf/tcgz1iOJ5Ea/XdpGgldK07uuRXAbfaBX7YM3gkv0I5M4P fDrs7nsCrI7gcpyLlEDr6VCeue9uosk2Gkll0T8YoIW6u24vpNDXk9+Byitckk/pAZ+NX6zBQ== X-Received: by 2002:a17:907:972a:b0:c12:91e8:454a with SMTP id a640c23a62f3a-c12e6c75f86mr330694966b.47.1783335489104; Mon, 06 Jul 2026 03:58:09 -0700 (PDT) MIME-Version: 1.0 References: <983C7B03-D9C3-4F15-8913-7616EC5E6414@gmail.com> <20260623.162104.775158751399277188.horikyota.ntt@gmail.com> In-Reply-To: From: Akshay Joshi Date: Mon, 6 Jul 2026 16:27:56 +0530 X-Gm-Features: AVVi8CesWh1ZYU_dKRZxU5tXDjzucrthN2jz4ZK6Fb0ixo9cyhcB2J8WEdkAl_4 Message-ID: Subject: Re: [PATCH] Add pg_get_table_ddl() to reconstruct CREATE TABLE statements To: Rui Zhao Cc: Zsolt Parragi , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000584fc60655ef26b1" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000584fc60655ef26b1 Content-Type: multipart/alternative; boundary="000000000000584fc50655ef26af" --000000000000584fc50655ef26af Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks for the review, Rui. I=E2=80=99ve addressed all the issues you raise= d. The v17 patch is now ready for your review. On Sat, Jul 4, 2026 at 10:05=E2=80=AFPM Rui Zhao wro= te: > Hi Akshay, > > Re-tested v16 on current master -- builds clean and the recent fixes hold > up > (self-ref FK after PK, no duplicate partition-child index, cross-schema > partition child qualified, schema_qualified =3D> true consistent). A few > issues, in severity order; several are places where pg_dump already does > the > right thing. > > 1. Clause order: TABLESPACE is emitted before ON COMMIT (ddlutils.c:2042 = vs > 2054), but the grammar is "... OptWith OnCommitOption OptTableSpace" -- O= N > COMMIT must come first, so a temp table with both clauses is > non-replayable: > > CREATE TABLESPACE ts1 LOCATION '/path/to/dir'; > CREATE TEMP TABLE tt (a int) ON COMMIT DROP TABLESPACE ts1; > SELECT d FROM pg_get_table_ddl('tt'::regclass, owner =3D> false) d; > -- CREATE TEMPORARY TABLE tt (a integer) TABLESPACE ts1 ON COMMIT > DROP; > > CREATE TEMPORARY TABLE tt (a integer) TABLESPACE ts1 ON COMMIT DROP; > -- ERROR: syntax error at or near "ON" > > Swapping the two blocks so ON COMMIT precedes TABLESPACE fixes it. > > 2. Child-default override recurses (missing ONLY). > emit_child_default_overrides > emits the inherited-column default without ONLY (ddlutils.c:2118), so SET > DEFAULT recurses into the table's children and reconstructing one table > silently rewrites another: > > CREATE TABLE dpar (x int); > CREATE TABLE dch () INHERITS (dpar); > CREATE TABLE dgc () INHERITS (dch); > ALTER TABLE ONLY dch ALTER COLUMN x SET DEFAULT 5; > ALTER TABLE ONLY dgc ALTER COLUMN x SET DEFAULT 10; > > SELECT d FROM pg_get_table_ddl('dch'::regclass, owner =3D> false) d; > -- ALTER TABLE dch ALTER COLUMN x SET DEFAULT 5; -- no ONLY > > ALTER TABLE dch ALTER COLUMN x SET DEFAULT 5; -- replay this > line > -- =3D> dgc's default is now 5, not 10 > > pg_dump uses ALTER TABLE ONLY here for exactly this reason. > > Partitioned tables hit this especially easily -- any partitioned table > with a > column default emits a redundant, ONLY-less SET DEFAULT for every partiti= on > that merely inherits it: > > CREATE TABLE p (id int, amt int DEFAULT 5) PARTITION BY LIST (id); > CREATE TABLE p_a PARTITION OF p FOR VALUES IN (1); > > SELECT d FROM pg_get_table_ddl('p'::regclass, owner =3D> false) d; > -- CREATE TABLE public.p (id integer, amt integer DEFAULT 5) > PARTITION BY LIST (id); > -- CREATE TABLE public.p_a PARTITION OF public.p FOR VALUES IN (1); > -- ALTER TABLE public.p_a ALTER COLUMN amt SET DEFAULT 5; -- > redundant, no ONLY > > p_a already inherits amt's default from the PARTITION OF, so the third > line is > redundant; pg_dump instead keeps the default inline on the child and > attaches > with ALTER TABLE ONLY ... ATTACH PARTITION. A full-hierarchy replay > self-corrects (each child's own SET DEFAULT runs last), but a partial > replay or > a lone emitted statement does not. The commit message lists "child-local > DEFAULT overrides on inheritance/partition children" as supported, so thi= s > is > in scope. (More generally the patch never emits ONLY anywhere; ADD > CONSTRAINT, > where CHECK / NOT NULL also recurse to children, is worth the same audit.= ) > > 3. Inherited-only NOT NULL emitted as local. When a child redeclares an > inherited column (attislocal) without restating NOT NULL, the constraint = is > inherited-only (conislocal =3D false); collect_local_not_null skips it, b= ut > append_column_defs keys off att->attnotnull and emits a bare NOT NULL > anyway: > > CREATE TABLE par (a int NOT NULL); > CREATE TABLE chld (a int) INHERITS (par); -- 'a' redeclared, no NOT > NULL > > SELECT d FROM pg_get_table_ddl('chld'::regclass, owner =3D> false) d; > -- CREATE TABLE public.chld (a integer NOT NULL) INHERITS > (public.par); > > On replay the child now owns the constraint (conislocal flips false -> > true, > name regenerates par_a_not_null -> chld_a_not_null), so a later > "ALTER TABLE par ALTER a DROP NOT NULL" cascades to the original child bu= t > not > the reconstructed one. pg_dump emits "a integer" with no NOT NULL here, > suppressing it via notnull_islocal (pg_dump.c ~9916). The docs describe > this as > the intended behavior -- "Inherited columns and constraints ... are not > duplicated on inheritance children or partitions" -- so it reads as a > documented contract the code doesn't quite meet. The inline CHECK path in > this > patch already filters on conislocal; the NOT NULL path could do the same. > > 4. Typed-table STORAGE / COMPRESSION not emitted -- intended? > append_column_defs > emits per-column STORAGE for ordinary tables, but the typed-table path > (append_typed_column_overrides) only handles DEFAULT / NOT NULL / CHECK, > so a > storage override on a typed table is not reproduced: > > CREATE TYPE mytype AS (a int, b text); > CREATE TABLE typed_t OF mytype; > ALTER TABLE typed_t ALTER COLUMN b SET STORAGE external; > > SELECT d FROM pg_get_table_ddl('typed_t'::regclass, owner =3D> false)= d; > -- CREATE TABLE public.typed_t OF public.mytype; -- STORAGE > not emitted > > The docs scope the typed-table form to overrides for "defaults, NOT NULL, > and > CHECK", so this may well be deliberate. But STORAGE is listed in the > general > per-column coverage, and pg_dump does emit it (ALTER TABLE ONLY ... ALTER > COLUMN > b SET STORAGE EXTERNAL) -- so it seems worth confirming the omission is > intentional rather than an oversight. > > 5. Minor: is_auto (ddlutils.c:1381) and the identity SEQUENCE NAME check > (1681) > rebuild the expected auto-name with snprintf, but the backend uses > makeObjectName(), which truncates name1/name2 to fit NAMEDATALEN and neve= r > the > label -- so for long names the "_not_null" / "_seq" suffix is dropped and > the > checks misfire, emitting a name a short-named table would omit: > > CREATE TABLE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa > (bbbbbbbbbbbbbbbbbbbb int GENERATED ALWAYS AS IDENTITY); > > SELECT d FROM pg_get_table_ddl( > 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'::regclass, > owner =3D> false) d; > -- CREATE TABLE public.aaaa...(50) (bbbb...(20) integer > -- GENERATED ALWAYS AS IDENTITY (SEQUENCE NAME public.aaaa..._se= q) > -- CONSTRAINT aaaa..._not_null NOT NULL); > > The default-omission convention in the commit message lists "the > auto-generated > identity sequence name" among the clauses meant to be dropped, which is > exactly > what misfires here for long names. It still replays (the names are real), > so > this one is cosmetic; comparing against makeObjectName(relname, colname, > "not_null" / "seq") makes both sides agree. > > Everything else looks good. > > Thanks, > Rui > --000000000000584fc50655ef26af Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Thanks for the review, Rui. I=E2=80=99ve addressed all the= issues you raised.
The v17 patch is now ready for your review.
On Sat, Jul 4, 2026 at 10:05=E2=80=AFPM Rui Zhao <zhaorui126@gmail.com> wrote:
Hi Akshay,

Re-tested v16 on current master -- builds clean and the recent fixes hold u= p
(self-ref FK after PK, no duplicate partition-child index, cross-schema
partition child qualified, schema_qualified =3D> true consistent). A few=
issues, in severity order; several are places where pg_dump already does th= e
right thing.

1. Clause order: TABLESPACE is emitted before ON COMMIT (ddlutils.c:2042 vs=
2054), but the grammar is "... OptWith OnCommitOption OptTableSpace&qu= ot; -- ON
COMMIT must come first, so a temp table with both clauses is non-replayable= :

=C2=A0 =C2=A0 CREATE TABLESPACE ts1 LOCATION '/path/to/dir';
=C2=A0 =C2=A0 CREATE TEMP TABLE tt (a int) ON COMMIT DROP TABLESPACE ts1; =C2=A0 =C2=A0 SELECT d FROM pg_get_table_ddl('tt'::regclass, owner = =3D> false) d;
=C2=A0 =C2=A0 --=C2=A0 CREATE TEMPORARY TABLE tt (a integer) TABLESPACE ts1= ON COMMIT DROP;

=C2=A0 =C2=A0 CREATE TEMPORARY TABLE tt (a integer) TABLESPACE ts1 ON COMMI= T DROP;
=C2=A0 =C2=A0 --=C2=A0 ERROR:=C2=A0 syntax error at or near "ON"<= br>
Swapping the two blocks so ON COMMIT precedes TABLESPACE fixes it.

2. Child-default override recurses (missing ONLY). emit_child_default_overr= ides
emits the inherited-column default without ONLY (ddlutils.c:2118), so SET DEFAULT recurses into the table's children and reconstructing one table=
silently rewrites another:

=C2=A0 =C2=A0 CREATE TABLE dpar (x int);
=C2=A0 =C2=A0 CREATE TABLE dch=C2=A0 () INHERITS (dpar);
=C2=A0 =C2=A0 CREATE TABLE dgc=C2=A0 () INHERITS (dch);
=C2=A0 =C2=A0 ALTER TABLE ONLY dch ALTER COLUMN x SET DEFAULT 5;
=C2=A0 =C2=A0 ALTER TABLE ONLY dgc ALTER COLUMN x SET DEFAULT 10;

=C2=A0 =C2=A0 SELECT d FROM pg_get_table_ddl('dch'::regclass, owner= =3D> false) d;
=C2=A0 =C2=A0 --=C2=A0 ALTER TABLE dch ALTER COLUMN x SET DEFAULT 5;=C2=A0 = =C2=A0 =C2=A0 -- no ONLY

=C2=A0 =C2=A0 ALTER TABLE dch ALTER COLUMN x SET DEFAULT 5;=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 -- replay this line
=C2=A0 =C2=A0 --=C2=A0 =3D> dgc's default is now 5, not 10

pg_dump uses ALTER TABLE ONLY here for exactly this reason.

Partitioned tables hit this especially easily -- any partitioned table with= a
column default emits a redundant, ONLY-less SET DEFAULT for every partition=
that merely inherits it:

=C2=A0 =C2=A0 CREATE TABLE p (id int, amt int DEFAULT 5) PARTITION BY LIST = (id);
=C2=A0 =C2=A0 CREATE TABLE p_a PARTITION OF p FOR VALUES IN (1);

=C2=A0 =C2=A0 SELECT d FROM pg_get_table_ddl('p'::regclass, owner = =3D> false) d;
=C2=A0 =C2=A0 --=C2=A0 CREATE TABLE public.p (id integer, amt integer DEFAU= LT 5)
PARTITION BY LIST (id);
=C2=A0 =C2=A0 --=C2=A0 CREATE TABLE public.p_a PARTITION OF public.p FOR VA= LUES IN (1);
=C2=A0 =C2=A0 --=C2=A0 ALTER TABLE public.p_a ALTER COLUMN amt SET DEFAULT = 5;=C2=A0 =C2=A0--
redundant, no ONLY

p_a already inherits amt's default from the PARTITION OF, so the third = line is
redundant; pg_dump instead keeps the default inline on the child and attach= es
with ALTER TABLE ONLY ... ATTACH PARTITION. A full-hierarchy replay
self-corrects (each child's own SET DEFAULT runs last), but a partial r= eplay or
a lone emitted statement does not. The commit message lists "child-loc= al
DEFAULT overrides on inheritance/partition children" as supported, so = this is
in scope. (More generally the patch never emits ONLY anywhere; ADD CONSTRAI= NT,
where CHECK / NOT NULL also recurse to children, is worth the same audit.)<= br>
3. Inherited-only NOT NULL emitted as local. When a child redeclares an
inherited column (attislocal) without restating NOT NULL, the constraint is=
inherited-only (conislocal =3D false); collect_local_not_null skips it, but=
append_column_defs keys off att->attnotnull and emits a bare NOT NULL an= yway:

=C2=A0 =C2=A0 CREATE TABLE par (a int NOT NULL);
=C2=A0 =C2=A0 CREATE TABLE chld (a int) INHERITS (par);=C2=A0 =C2=A0-- '= ;a' redeclared, no NOT NULL

=C2=A0 =C2=A0 SELECT d FROM pg_get_table_ddl('chld'::regclass, owne= r =3D> false) d;
=C2=A0 =C2=A0 --=C2=A0 CREATE TABLE public.chld (a integer NOT NULL) INHERI= TS (public.par);

On replay the child now owns the constraint (conislocal flips false -> t= rue,
name regenerates par_a_not_null -> chld_a_not_null), so a later
"ALTER TABLE par ALTER a DROP NOT NULL" cascades to the original = child but not
the reconstructed one. pg_dump emits "a integer" with no NOT NULL= here,
suppressing it via notnull_islocal (pg_dump.c ~9916). The docs describe thi= s as
the intended behavior -- "Inherited columns and constraints ... are no= t
duplicated on inheritance children or partitions" -- so it reads as a<= br> documented contract the code doesn't quite meet. The inline CHECK path = in this
patch already filters on conislocal; the NOT NULL path could do the same.
4. Typed-table STORAGE / COMPRESSION not emitted -- intended? append_column= _defs
emits per-column STORAGE for ordinary tables, but the typed-table path
(append_typed_column_overrides) only handles DEFAULT / NOT NULL / CHECK, so= a
storage override on a typed table is not reproduced:

=C2=A0 =C2=A0 CREATE TYPE mytype AS (a int, b text);
=C2=A0 =C2=A0 CREATE TABLE typed_t OF mytype;
=C2=A0 =C2=A0 ALTER TABLE typed_t ALTER COLUMN b SET STORAGE external;

=C2=A0 =C2=A0 SELECT d FROM pg_get_table_ddl('typed_t'::regclass, o= wner =3D> false) d;
=C2=A0 =C2=A0 --=C2=A0 CREATE TABLE public.typed_t OF public.mytype;=C2=A0 = =C2=A0 =C2=A0 =C2=A0-- STORAGE
not emitted

The docs scope the typed-table form to overrides for "defaults, NOT NU= LL, and
CHECK", so this may well be deliberate. But STORAGE is listed in the g= eneral
per-column coverage, and pg_dump does emit it (ALTER TABLE ONLY ... ALTER C= OLUMN
b SET STORAGE EXTERNAL) -- so it seems worth confirming the omission is
intentional rather than an oversight.

5. Minor: is_auto (ddlutils.c:1381) and the identity SEQUENCE NAME check (1= 681)
rebuild the expected auto-name with snprintf, but the backend uses
makeObjectName(), which truncates name1/name2 to fit NAMEDATALEN and never = the
label -- so for long names the "_not_null" / "_seq" suf= fix is dropped and the
checks misfire, emitting a name a short-named table would omit:

=C2=A0 =C2=A0 CREATE TABLE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa= aaaa
=C2=A0 =C2=A0 =C2=A0 =C2=A0 (bbbbbbbbbbbbbbbbbbbb int GENERATED ALWAYS AS I= DENTITY);

=C2=A0 =C2=A0 SELECT d FROM pg_get_table_ddl(
=C2=A0 =C2=A0 =C2=A0 =C2=A0 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa= aaaaaaaaaa'::regclass,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 owner =3D> false) d;
=C2=A0 =C2=A0 --=C2=A0 CREATE TABLE public.aaaa...(50) (bbbb...(20) integer=
=C2=A0 =C2=A0 --=C2=A0 =C2=A0 =C2=A0 GENERATED ALWAYS AS IDENTITY (SEQUENCE= NAME public.aaaa..._seq)
=C2=A0 =C2=A0 --=C2=A0 =C2=A0 =C2=A0 CONSTRAINT aaaa..._not_null NOT NULL);=

The default-omission convention in the commit message lists "the auto-= generated
identity sequence name" among the clauses meant to be dropped, which i= s exactly
what misfires here for long names. It still replays (the names are real), s= o
this one is cosmetic; comparing against makeObjectName(relname, colname, "not_null" / "seq") makes both sides agree.

Everything else looks good.

Thanks,
Rui
--000000000000584fc50655ef26af-- --000000000000584fc60655ef26b1 Content-Type: application/octet-stream; name="v17-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Disposition: attachment; filename="v17-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mr93vqkk0 RnJvbSBmNzI4MzQ2OTRlZWUwN2Q0OTI2MmU5YmE4NTljNTY3ZTg2NGM3MWI1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBUdWUsIDIgSnVuIDIwMjYgMTQ6MTg6NDAgKzA1MzAKU3ViamVjdDogW1BB VENIIHYxN10gQWRkIHBnX2dldF90YWJsZV9kZGwoKSB0byByZWNvbnN0cnVjdCBDUkVBVEUgVEFC TEUKIHN0YXRlbWVudHMKClRoZSBmdW5jdGlvbiByZWNvbnN0cnVjdHMgdGhlIENSRUFURSBUQUJM RSBzdGF0ZW1lbnQgZm9yIGFuIG9yZGluYXJ5IG9yCnBhcnRpdGlvbmVkIHRhYmxlLCBmb2xsb3dl ZCBieSB0aGUgQUxURVIgVEFCTEUgLyBDUkVBVEUgSU5ERVggLwpDUkVBVEUgUlVMRSAvIENSRUFU RSBTVEFUSVNUSUNTIHN0YXRlbWVudHMgbmVlZGVkIHRvIHJlc3RvcmUgaXRzIGZ1bGwKZGVmaW5p dGlvbi4gIEVhY2ggc3RhdGVtZW50IGlzIHJldHVybmVkIGFzIGEgc2VwYXJhdGUgcm93LgoKU3Vw cG9ydGVkIHBlci1jb2x1bW4gZmVhdHVyZXM6IGRhdGEgdHlwZSB3aXRoIHR5cGUgbW9kaWZpZXJz LCBDT0xMQVRFLApTVE9SQUdFLCBDT01QUkVTU0lPTiAocGdseiAvIGx6NCksIEdFTkVSQVRFRCBB TFdBWVMgQVMgKGV4cHIpClNUT1JFRC9WSVJUVUFMLCBHRU5FUkFURUQgQUxXQVlTfEJZIERFRkFV TFQgQVMgSURFTlRJVFkgKHdpdGggc2VxdWVuY2UKb3B0aW9ucyksIERFRkFVTFQsIE5PVCBOVUxM IChpbmNsdWRpbmcgbmFtZWQgTk9UIE5VTEwgY29uc3RyYWludHMpLCBhbmQKcGVyLWNvbHVtbiBh dHRvcHRpb25zIGVtaXR0ZWQgYXMgQUxURVIgQ09MVU1OIFNFVCAoLi4uKS4KClN1cHBvcnRlZCB0 YWJsZS1sZXZlbCBmZWF0dXJlczogVU5MT0dHRUQsIElOSEVSSVRTLCBQQVJUSVRJT04gQlkgKFJB TkdFCi8gTElTVCAvIEhBU0ggcGFyZW50cyksIFBBUlRJVElPTiBPRiBwYXJlbnQgRk9SIFZBTFVF UyAoRlJPTS9UTywgV0lUSAptb2R1bHVzL3JlbWFpbmRlciwgREVGQVVMVCksIFVTSU5HIHRhYmxl IGFjY2VzcyBtZXRob2QsIFdJVEgKKHJlbG9wdGlvbnMpLCBUQUJMRVNQQUNFLCBhbmQgaW5saW5l IENIRUNLIGNvbnN0cmFpbnRzIGluIHRoZSBDUkVBVEUKVEFCTEUgYm9keS4KClN1cHBvcnRlZCBz dWItb2JqZWN0cyAocmUtdXNpbmcgZXhpc3RpbmcgZGVwYXJzZSBoZWxwZXJzIGZyb20KcnVsZXV0 aWxzLmMpOiBpbmRleGVzIChpbmNsdWRpbmcgcGFydGlhbCBhbmQgZnVuY3Rpb25hbCkgdmlhCnBn X2dldF9pbmRleGRlZl9kZGw7IGNvbnN0cmFpbnRzIChQUklNQVJZIEtFWSB3aXRoIFdJVEhPVVQg T1ZFUkxBUFMgZm9yCnRlbXBvcmFsIGtleXMsIFVOSVFVRSB3aXRoIE5VTExTIE5PVCBESVNUSU5D VCBhbmQgSU5DTFVERSBjb2x1bW5zLApGT1JFSUdOIEtFWSB3aXRoIE9OIERFTEVURS9VUERBVEUg cmVmZXJlbnRpYWwgYWN0aW9ucyBhbmQgTUFUQ0ggY2xhdXNlLApOT1QgRU5GT1JDRUQgZm9yZWln biBrZXlzLCBFWENMVURFLCBuYW1lZCBOT1QgTlVMTCkgdmlhCnBnX2dldF9jb25zdHJhaW50ZGVm X2JvZHk7IHJ1bGVzIHZpYSBwZ19nZXRfcnVsZWRlZl9kZGw7IGV4dGVuZGVkCnN0YXRpc3RpY3Mg dmlhIHBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX2RkbDsgUkVQTElDQSBJREVOVElUWQpOT1RISU5H L0ZVTEwvVVNJTkcgSU5ERVg7IEFMVEVSIFRBQkxFIEVOQUJMRS9GT1JDRSBST1cgTEVWRUwgU0VD VVJJVFk7CmFuZCBjaGlsZC1sb2NhbCBERUZBVUxUIG92ZXJyaWRlcyBvbiBpbmhlcml0YW5jZS9w YXJ0aXRpb24gY2hpbGRyZW4uCkRETCBmb3IgcGFydGl0aW9uIGNoaWxkcmVuIG9mIGEgcGFydGl0 aW9uZWQtdGFibGUgcGFyZW50IGlzIGFwcGVuZGVkCmFmdGVyIHRoZSBwYXJlbnQgYnkgZGVmYXVs dC4KClRoZSBmdW5jdGlvbiBzaWduYXR1cmUgZm9sbG93cyB0aGUgbmFtZWQtcGFyYW1ldGVyIGNv bnZlbnRpb24KZXN0YWJsaXNoZWQgYnkgcGdfZ2V0X3JvbGVfZGRsKCksIHBnX2dldF90YWJsZXNw YWNlX2RkbCgpLCBhbmQKcGdfZ2V0X2RhdGFiYXNlX2RkbCgpOgoKICBwZ19nZXRfdGFibGVfZGRs KHJlbGF0aW9uICAgICAgICAgcmVnY2xhc3MsCiAgICAgICAgICAgICAgICAgICBwcmV0dHkgICAg ICAgICAgIGJvb2xlYW4gIERFRkFVTFQgZmFsc2UsCiAgICAgICAgICAgICAgICAgICBvd25lciAg ICAgICAgICAgIGJvb2xlYW4gIERFRkFVTFQgdHJ1ZSwKICAgICAgICAgICAgICAgICAgIHRhYmxl c3BhY2UgICAgICAgYm9vbGVhbiAgREVGQVVMVCB0cnVlLAogICAgICAgICAgICAgICAgICAgc2No ZW1hX3F1YWxpZmllZCBib29sZWFuICBERUZBVUxUIHRydWUsCiAgICAgICAgICAgICAgICAgICBv bmx5X2tpbmRzICAgICAgIHRleHRbXSAgIERFRkFVTFQgTlVMTCwKICAgICAgICAgICAgICAgICAg IGV4Y2VwdF9raW5kcyAgICAgdGV4dFtdICAgREVGQVVMVCBOVUxMKQoKcHJldHR5IGNvbnRyb2xz IHByZXR0eS1wcmludGVkIG91dHB1dC4gIG93bmVyIGNvbnRyb2xzIGVtaXNzaW9uIG9mIHRoZQpB TFRFUiBUQUJMRSAuLi4gT1dORVIgVE8gc3RhdGVtZW50LiAgdGFibGVzcGFjZSBjb250cm9scyB0 aGUgVEFCTEVTUEFDRQpjbGF1c2Ugb24gQ1JFQVRFIFRBQkxFLiAgc2NoZW1hX3F1YWxpZmllZCBj b250cm9scyB3aGV0aGVyIG9iamVjdCBuYW1lcwphcmUgZW1pdHRlZCB3aXRoIHRoZWlyIHNjaGVt YSBwcmVmaXg6IHdoZW4gdHJ1ZSAodGhlIGRlZmF1bHQpIHRoZQphY3RpdmUgc2VhcmNoX3BhdGgg aXMgdGVtcG9yYXJpbHkgbmFycm93ZWQgdG8gcGdfY2F0YWxvZyBzbyBldmVyeQpkZXBhcnNlIGhl bHBlciBwcm9kdWNlcyBmdWxseS1xdWFsaWZpZWQgbmFtZXM7IHdoZW4gZmFsc2UgaXQgaXMgbmFy cm93ZWQKdG8gdGhlIHRhcmdldCB0YWJsZSdzIG93biBzY2hlbWEgc28gc2FtZS1zY2hlbWEgcmVm ZXJlbmNlcyBjb21lIG91dAp1bnF1YWxpZmllZCB3aGlsZSBjcm9zcy1zY2hlbWEgcmVmZXJlbmNl cyByZW1haW4gcXVhbGlmaWVkIGZvcgpjb3JyZWN0bmVzcy4gIFRlbXBvcmFyeSB0YWJsZXMgYXJl IG5ldmVyIHNjaGVtYS1xdWFsaWZpZWQgcmVnYXJkbGVzcyBvZgp0aGlzIHNldHRpbmc6IHRoZSBU RU1QT1JBUlkga2V5d29yZCBhbHJlYWR5IHBsYWNlcyB0aGVtIGluIHBnX3RlbXAsIGFuZAplbWl0 dGluZyBwZ190ZW1wX05OLnJlbG5hbWUgd291bGQgcHJvZHVjZSBub24tcmVwbGF5YWJsZSBEREwu CgpPYmplY3QtY2xhc3MgZmlsdGVyaW5nIHVzZXMgdHdvIG11dHVhbGx5LWV4Y2x1c2l2ZSB0ZXh0 LWFycmF5CnBhcmFtZXRlcnMsIG9ubHlfa2luZHMgYW5kIGV4Y2VwdF9raW5kcy4gIFdoZW4gb25s eV9raW5kcyBpcyBzZXQsIG9ubHkKdGhlIGxpc3RlZCBraW5kcyBhcmUgZW1pdHRlZDsgd2hlbiBl eGNlcHRfa2luZHMgaXMgc2V0LCBldmVyeSBraW5kCmV4Y2VwdCB0aGUgbGlzdGVkIG9uZXMgaXMg ZW1pdHRlZDsgd2hlbiBuZWl0aGVyIGlzIHNldCBldmVyeSBraW5kIGlzCmVtaXR0ZWQuICBFYWNo IGFycmF5IGVsZW1lbnQgaXMgbWF0Y2hlZCBjYXNlLWluc2Vuc2l0aXZlbHkgd2l0aApsZWFkaW5n L3RyYWlsaW5nIHdoaXRlc3BhY2UgdHJpbW1lZDsgYW4gdW5yZWNvZ25pemVkIG5hbWUgcmFpc2Vz IGFuCmVycm9yLiAgVGhlIGtpbmQgdm9jYWJ1bGFyeSBpczoKCiAgdGFibGUsIGluZGV4LCBwcmlt YXJ5X2tleSwgdW5pcXVlLCBjaGVjaywgZm9yZWlnbl9rZXksIGV4Y2x1c2lvbiwKICBydWxlLCBz dGF0aXN0aWNzLCBybHMsIHJlcGxpY2FfaWRlbnRpdHksIHBhcnRpdGlvbgoKdHJpZ2dlciBhbmQg cG9saWN5IGFyZSBhY2NlcHRlZCBpbiB0aGUgdm9jYWJ1bGFyeSBidXQgY3VycmVudGx5IHByb2R1 Y2UKbm8gb3V0cHV0OyB0aGV5IGFyZSByZXNlcnZlZCBmb3Igd2hlbiBzdGFuZGFsb25lIHBnX2dl dF90cmlnZ2VyX2RkbCgpCmFuZCBwZ19nZXRfcG9saWN5X2RkbCgpIGhlbHBlcnMgYmVjb21lIGF2 YWlsYWJsZS4KCk5PVCBOVUxMIGlzIG5vdCBwYXJ0IG9mIHRoZSB2b2NhYnVsYXJ5OiBpdCBpcyBh bHdheXMgZW1pdHRlZCB0byBwcmV2ZW50CnByb2R1Y2luZyBzY2hlbWFzIHRoYXQgc2lsZW50bHkg YWNjZXB0IE5VTExzIHRoZSBzb3VyY2Ugd291bGQgcmVqZWN0LgpXaGVuIHJlcGxpY2FfaWRlbnRp dHkgaXMgaW4gdGhlIGFjdGl2ZSBmaWx0ZXIgYW5kIHRoZSB0YWJsZSdzIFJFUExJQ0EKSURFTlRJ VFkgVVNJTkcgSU5ERVggcmVmZXJlbmNlcyBhbiBpbmRleCB0aGF0IHRoZSBmaWx0ZXIgd291bGQg c3VwcHJlc3MsCnRoZSBmdW5jdGlvbiByYWlzZXMgYW4gZXJyb3IgYmVmb3JlIGVtaXR0aW5nIGFu eSBvdXRwdXQsIHNvIHRoZQpnZW5lcmF0ZWQgRERMIG5ldmVyIHJlZmVyZW5jZXMgYW4gaW5kZXgg aXQgZGlkIG5vdCBwcm9kdWNlLgoKRGVmYXVsdCBvbWlzc2lvbiBjb252ZW50aW9uOiBldmVyeSBv cHRpb25hbCBjbGF1c2UgaXMgb21pdHRlZCB3aGVuIGl0cwp2YWx1ZSBtYXRjaGVzIHdoYXQgdGhl IHNlcnZlciB3b3VsZCByZWFwcGx5IG9uIHJvdW5kLXRyaXAsIGluY2x1ZGluZwp0eXBlLWRlZmF1 bHQgQ09MTEFURSwgcGVyLXR5cGUgU1RPUkFHRSwgdGhlIGF1dG8tZ2VuZXJhdGVkIGlkZW50aXR5 CnNlcXVlbmNlIG5hbWUgYW5kIHBhcmFtZXRlciBkZWZhdWx0cywgaGVhcCBhY2Nlc3MgbWV0aG9k LCBkZWZhdWx0ClJFUExJQ0EgSURFTlRJVFksIGRpc2FibGVkIFJMUyB0b2dnbGVzLCBlbXB0eSBy ZWxvcHRpb25zLCBhbmQgdGhlCmRlZmF1bHQgdGFibGVzcGFjZS4KCkF1dGhvcjogQWtzaGF5IEpv c2hpIDxha3NoYXkuam9zaGlAZW50ZXJwcmlzZWRiLmNvbT4KUmV2aWV3ZWQtYnk6IE1hcmNvcyBQ ZWdvcmFybyA8bWFyY29zQGYxMC5jb20uYnI+ClJldmlld2VkLWJ5OiBac29sdCBQYXJyYWdpIDx6 c29sdC5wYXJyYWdpQHBlcmNvbmEuY29tPgpSZXZpZXdlZC1ieTogS3lvdGFybyBIb3JpZ3VjaGkg PGhvcmlreW90YS5udHRAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogQ2hhbyBMaSA8bGkuZXZhbi5j aGFvQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IFJ1aSBaaGFvIDx6aGFvcnVpMTI2QGdtYWlsLmNv bT4KLS0tCiBkb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbCAgICAgICAgICAgICAgfCAg MTQ2ICsrCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMgICAgICAgICAgICAgfCAg IDkzICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgICAgICAgICAgICB8ICAg MzAgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jICAgICAgICAgICAgICB8IDIx ODIgKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyAg ICAgICAgICAgICB8ICAgODcgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMuaCAg ICAgICAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAg ICAgICAgICAgIHwgICAgOCArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy90YWJsZWNtZHMuaCAgICAg ICAgICAgICAgfCAgICAzICsKIHNyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oICAgICAgICAg ICAgICAgICB8ICAgIDQgKwogLi4uL3JlZ3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2RkbC5v dXQgICAgIHwgMTUxNiArKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2No ZWR1bGUgICAgICAgICAgICB8ICAgIDIgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BnX2dldF90 YWJsZV9kZGwuc3FsICAgICB8ICA4NzkgKysrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAgMiArCiAxMyBmaWxlcyBjaGFuZ2VkLCA0OTM2IGlu c2VydGlvbnMoKyksIDE3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2RkbC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wZ19nZXRfdGFibGVfZGRsLnNxbAoKZGlmZiAtLWdpdCBh L2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sIGIvZG9jL3NyYy9zZ21sL2Z1bmMvZnVu Yy1pbmZvLnNnbWwKaW5kZXggNjllZjM4NTdjZmEuLjU1YzZiODczMjQwIDEwMDY0NAotLS0gYS9k b2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZnVuYy9m dW5jLWluZm8uc2dtbApAQCAtMzk2MCw2ICszOTYwLDE1MiBAQCBhY2wgICAgICB8IHtwb3N0Z3Jl cz1hcndkRHh0bS9wb3N0Z3Jlcyxmb289ci9wb3N0Z3Jlc30KICAgICAgICAgaXMgZmFsc2UsIHRo ZSA8bGl0ZXJhbD5PV05FUjwvbGl0ZXJhbD4gY2xhdXNlIGlzIG9taXR0ZWQuCiAgICAgICAgPC9w YXJhPjwvZW50cnk+CiAgICAgICA8L3Jvdz4KKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5IHJv bGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAg ICAgPGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5PnBnX2dldF90YWJsZV9kZGw8L3ByaW1h cnk+CisgICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+cGdfZ2V0X3RhYmxl X2RkbDwvZnVuY3Rpb24+CisgICAgICAgICggPHBhcmFtZXRlcj5yZWxhdGlvbjwvcGFyYW1ldGVy PiA8dHlwZT5yZWdjbGFzczwvdHlwZT4KKyAgICAgICAgPG9wdGlvbmFsPiwgPHBhcmFtZXRlcj5w cmV0dHk8L3BhcmFtZXRlcj4gPHR5cGU+Ym9vbGVhbjwvdHlwZT4KKyAgICAgICAgPGxpdGVyYWw+ REVGQVVMVDwvbGl0ZXJhbD4gZmFsc2U8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+LCA8 cGFyYW1ldGVyPm93bmVyPC9wYXJhbWV0ZXI+IDx0eXBlPmJvb2xlYW48L3R5cGU+CisgICAgICAg IDxsaXRlcmFsPkRFRkFVTFQ8L2xpdGVyYWw+IHRydWU8L29wdGlvbmFsPgorICAgICAgICA8b3B0 aW9uYWw+LCA8cGFyYW1ldGVyPnRhYmxlc3BhY2U8L3BhcmFtZXRlcj4gPHR5cGU+Ym9vbGVhbjwv dHlwZT4KKyAgICAgICAgPGxpdGVyYWw+REVGQVVMVDwvbGl0ZXJhbD4gdHJ1ZTwvb3B0aW9uYWw+ CisgICAgICAgIDxvcHRpb25hbD4sIDxwYXJhbWV0ZXI+c2NoZW1hX3F1YWxpZmllZDwvcGFyYW1l dGVyPiA8dHlwZT5ib29sZWFuPC90eXBlPgorICAgICAgICA8bGl0ZXJhbD5ERUZBVUxUPC9saXRl cmFsPiB0cnVlPC9vcHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiwgPHBhcmFtZXRlcj5vbmx5 X2tpbmRzPC9wYXJhbWV0ZXI+IDx0eXBlPnRleHRbXTwvdHlwZT4KKyAgICAgICAgPGxpdGVyYWw+ REVGQVVMVDwvbGl0ZXJhbD4gTlVMTDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4sIDxw YXJhbWV0ZXI+ZXhjZXB0X2tpbmRzPC9wYXJhbWV0ZXI+IDx0eXBlPnRleHRbXTwvdHlwZT4KKyAg ICAgICAgPGxpdGVyYWw+REVGQVVMVDwvbGl0ZXJhbD4gTlVMTDwvb3B0aW9uYWw+ICkKKyAgICAg ICAgPHJldHVybnZhbHVlPnNldG9mIHRleHQ8L3JldHVybnZhbHVlPgorICAgICAgIDwvcGFyYT4K KyAgICAgICA8cGFyYT4KKyAgICAgICAgUmVjb25zdHJ1Y3RzIHRoZSA8Y29tbWFuZD5DUkVBVEUg VEFCTEU8L2NvbW1hbmQ+IHN0YXRlbWVudCBmb3IgdGhlCisgICAgICAgIHNwZWNpZmllZCBvcmRp bmFyeSBvciBwYXJ0aXRpb25lZCB0YWJsZSwgZm9sbG93ZWQgYnkgdGhlCisgICAgICAgIDxjb21t YW5kPkFMVEVSIFRBQkxFPC9jb21tYW5kPiwgPGNvbW1hbmQ+Q1JFQVRFIElOREVYPC9jb21tYW5k PiwKKyAgICAgICAgPGNvbW1hbmQ+Q1JFQVRFIFJVTEU8L2NvbW1hbmQ+LCBhbmQgPGNvbW1hbmQ+ Q1JFQVRFIFNUQVRJU1RJQ1M8L2NvbW1hbmQ+CisgICAgICAgIHN0YXRlbWVudHMgbmVlZGVkIHRv IHJlY3JlYXRlIHRoZSB0YWJsZSdzIGNvbHVtbnMsIGNvbnN0cmFpbnRzLAorICAgICAgICBpbmRl eGVzLCBydWxlcywgZXh0ZW5kZWQgc3RhdGlzdGljcywgYW5kIHJvdy1sZXZlbCBzZWN1cml0eSBm bGFncy4KKyAgICAgICAgSW5oZXJpdGVkIGNvbHVtbnMgYW5kIGNvbnN0cmFpbnRzIGFyZSBlbWl0 dGVkIGJ5IHRoZSBwYXJlbnQgdGFibGUncworICAgICAgICBEREwgYW5kIGFyZSBub3QgZHVwbGlj YXRlZCBvbiBpbmhlcml0YW5jZSBjaGlsZHJlbiBvciBwYXJ0aXRpb25zLgorICAgICAgICBFYWNo IHN0YXRlbWVudCBpcyByZXR1cm5lZCBhcyBhIHNlcGFyYXRlIHJvdy4KKyAgICAgICAgRm9yZWln bi1rZXkgY29uc3RyYWludHMgYXJlIGFsd2F5cyBlbWl0dGVkIGFmdGVyIGFsbCBvdGhlcgorICAg ICAgICBjb25zdHJhaW50cyBzbyB0aGF0IHNlbGYtcmVmZXJlbmNpbmcgZm9yZWlnbiBrZXlzICh3 aGVyZSB0aGUKKyAgICAgICAgcmVmZXJlbmNlZCBwcmltYXJ5IG9yIHVuaXF1ZSBrZXkgaXMgb24g dGhlIHNhbWUgdGFibGUpIGNhbiBiZQorICAgICAgICBhZGRlZCBvbmNlIHRoYXQga2V5IGFscmVh ZHkgZXhpc3RzLgorICAgICAgICBXaGVuIDxwYXJhbWV0ZXI+cHJldHR5PC9wYXJhbWV0ZXI+IGlz IHRydWUsIHRoZSBvdXRwdXQgaXMKKyAgICAgICAgcHJldHR5LXByaW50ZWQuICBXaGVuIDxwYXJh bWV0ZXI+b3duZXI8L3BhcmFtZXRlcj4gaXMgZmFsc2UsIHRoZQorICAgICAgICA8Y29tbWFuZD5B TFRFUiBUQUJMRSAuLi4gT1dORVIgVE88L2NvbW1hbmQ+IHN0YXRlbWVudCBpcyBvbWl0dGVkLgor ICAgICAgICBXaGVuIDxwYXJhbWV0ZXI+dGFibGVzcGFjZTwvcGFyYW1ldGVyPiBpcyBmYWxzZSwg dGhlCisgICAgICAgIDxsaXRlcmFsPlRBQkxFU1BBQ0U8L2xpdGVyYWw+IGNsYXVzZSBpcyBvbWl0 dGVkIGZyb20gdGhlCisgICAgICAgIDxjb21tYW5kPkNSRUFURSBUQUJMRTwvY29tbWFuZD4gc3Rh dGVtZW50LiAgVGhlCisgICAgICAgIDxwYXJhbWV0ZXI+b25seV9raW5kczwvcGFyYW1ldGVyPiBh bmQgPHBhcmFtZXRlcj5leGNlcHRfa2luZHM8L3BhcmFtZXRlcj4KKyAgICAgICAgcGFyYW1ldGVy cyBkZXNjcmliZWQgYmVsb3cgY29udHJvbCB3aGljaCBvYmplY3QgY2xhc3NlcyBhcmUgZW1pdHRl ZC4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8cGFyYW1ldGVy Pm9ubHlfa2luZHM8L3BhcmFtZXRlcj4gYW5kIDxwYXJhbWV0ZXI+ZXhjZXB0X2tpbmRzPC9wYXJh bWV0ZXI+CisgICAgICAgIHBhcmFtZXRlcnMgZWFjaCB0YWtlIGEgdGV4dCBhcnJheSBvZiBvYmpl Y3QtY2xhc3Mga2luZCBuYW1lcworICAgICAgICBhbmQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSAo c3BlY2lmeWluZyBib3RoIHJhaXNlcyBhbgorICAgICAgICBlcnJvcikuICBXaGVuIDxwYXJhbWV0 ZXI+b25seV9raW5kczwvcGFyYW1ldGVyPiBpcyBzZXQsIG9ubHkgdGhlCisgICAgICAgIGxpc3Rl ZCBraW5kcyBhcmUgZW1pdHRlZDsgd2hlbiA8cGFyYW1ldGVyPmV4Y2VwdF9raW5kczwvcGFyYW1l dGVyPiBpcworICAgICAgICBzZXQsIGV2ZXJ5IGtpbmQgPGVtcGhhc2lzPmV4Y2VwdDwvZW1waGFz aXM+IHRoZSBsaXN0ZWQgb25lcyBpcworICAgICAgICBlbWl0dGVkLiAgV2hlbiBuZWl0aGVyIGlz IHNldCAodGhlIGRlZmF1bHQpLCBldmVyeSBraW5kIGlzCisgICAgICAgIGVtaXR0ZWQuICBMZWFk aW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGluIGVhY2ggYXJyYXkgZWxlbWVudAorICAgICAg ICBpcyBpZ25vcmVkIGFuZCBtYXRjaGluZyBpcyBjYXNlLWluc2Vuc2l0aXZlOyBhbiB1bnJlY29n bml6ZWQKKyAgICAgICAga2luZCBuYW1lIHJhaXNlcyBhbiBlcnJvci4KKyAgICAgICAgVGhlIGtp bmQgdm9jYWJ1bGFyeSBpcworICAgICAgICA8bGl0ZXJhbD50YWJsZTwvbGl0ZXJhbD4sCisgICAg ICAgIDxsaXRlcmFsPmluZGV4PC9saXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+cHJpbWFyeV9r ZXk8L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJhbD51bmlxdWU8L2xpdGVyYWw+LAorICAgICAg ICA8bGl0ZXJhbD5jaGVjazwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPmZvcmVpZ25fa2V5 PC9saXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+ZXhjbHVzaW9uPC9saXRlcmFsPiwKKyAgICAg ICAgPGxpdGVyYWw+cnVsZTwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPnN0YXRpc3RpY3M8 L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJhbD50cmlnZ2VyPC9saXRlcmFsPiwKKyAgICAgICAg PGxpdGVyYWw+cG9saWN5PC9saXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+cmxzPC9saXRlcmFs PiAodGhlCisgICAgICAgIDxjb21tYW5kPkVOQUJMRTwvY29tbWFuZD4vPGNvbW1hbmQ+Rk9SQ0Ug Uk9XIExFVkVMIFNFQ1VSSVRZPC9jb21tYW5kPgorICAgICAgICB0b2dnbGVzKSwKKyAgICAgICAg PGxpdGVyYWw+cmVwbGljYV9pZGVudGl0eTwvbGl0ZXJhbD4sIGFuZAorICAgICAgICA8bGl0ZXJh bD5wYXJ0aXRpb248L2xpdGVyYWw+ICh0aGUgRERMIGZvciBlYWNoIGRpcmVjdAorICAgICAgICBw YXJ0aXRpb24gY2hpbGQgb2YgYSBwYXJ0aXRpb25lZC10YWJsZSBwYXJlbnQpLgorICAgICAgICBO b3RlIHRoYXQgPGxpdGVyYWw+dHJpZ2dlcjwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPnBvbGljeTwv bGl0ZXJhbD4KKyAgICAgICAgYXJlIGFjY2VwdGVkIGluIHRoZSB2b2NhYnVsYXJ5IGJ1dCBjdXJy ZW50bHkgcHJvZHVjZSBubyBvdXRwdXQ7CisgICAgICAgIHRoZXkgYXJlIHJlc2VydmVkIGZvciBm dXR1cmUgdXNlIHdoZW4gc3RhbmRhbG9uZQorICAgICAgICA8ZnVuY3Rpb24+cGdfZ2V0X3RyaWdn ZXJfZGRsPC9mdW5jdGlvbj4gYW5kCisgICAgICAgIDxmdW5jdGlvbj5wZ19nZXRfcG9saWN5X2Rk bDwvZnVuY3Rpb24+IGhlbHBlcnMgYmVjb21lIGF2YWlsYWJsZS4gIFRoZQorICAgICAgICA8bGl0 ZXJhbD50YWJsZTwvbGl0ZXJhbD4ga2luZCBncm91cHMgdGhlCisgICAgICAgIDxjb21tYW5kPkNS RUFURSBUQUJMRTwvY29tbWFuZD4gc3RhdGVtZW50IHRvZ2V0aGVyIHdpdGggdGhlCisgICAgICAg IHJlbGF0ZWQgcGVyLXRhYmxlIDxjb21tYW5kPkFMVEVSIFRBQkxFPC9jb21tYW5kPiBwYXNzZXM6 CisgICAgICAgIDxjb21tYW5kPk9XTkVSIFRPPC9jb21tYW5kPiwgY2hpbGQtZGVmYXVsdAorICAg ICAgICA8Y29tbWFuZD5TRVQgREVGQVVMVDwvY29tbWFuZD4sIGFuZCBwZXItY29sdW1uCisgICAg ICAgIDxjb21tYW5kPlNFVCAoPHJlcGxhY2VhYmxlPmF0dG9wdGlvbnM8L3JlcGxhY2VhYmxlPik8 L2NvbW1hbmQ+LgorICAgICAgICA8bGl0ZXJhbD5OT1QgTlVMTDwvbGl0ZXJhbD4gY29uc3RyYWlu dHMgYXJlIG5vdCBwYXJ0IG9mIHRoZQorICAgICAgICB2b2NhYnVsYXJ5OyB0aGV5IGFyZSBhbHdh eXMgZW1pdHRlZCBhcyBwYXJ0IG9mIHRoZSB0YWJsZSB0bworICAgICAgICBhdm9pZCBwcm9kdWNp bmcgc2NoZW1hcyB0aGF0IHNpbGVudGx5IGFjY2VwdAorICAgICAgICA8bGl0ZXJhbD5OVUxMPC9s aXRlcmFsPiB2YWx1ZXMgdGhlIHNvdXJjZSB3b3VsZCBoYXZlIHJlamVjdGVkLgorICAgICAgICBG b3IgZXhhbXBsZSwgdGhlIHNlY29uZCBwYXNzIG9mIGEgdHdvLXBhc3Mgc2NoZW1hIGNsb25lIHRo YXQKKyAgICAgICAgYWRkcyBjcm9zcy10YWJsZSBmb3JlaWduIGtleXMgYWZ0ZXIgZGF0YSBoYXMg bG9hZGVkIGNhbiBiZQorICAgICAgICB3cml0dGVuIGFzCisgICAgICAgIDxsaXRlcmFsPm9ubHlf a2luZHMgPT4gQVJSQVlbJ2ZvcmVpZ25fa2V5J108L2xpdGVyYWw+LCBhbmQgdGhlCisgICAgICAg IHB1Yi9zdWItc3R5bGUgY2xvbmUgdGhhdCBrZWVwcyBhIHByaW1hcnkga2V5IGJ1dCBkcm9wcyBl dmVyeQorICAgICAgICBvdGhlciBjb25zdHJhaW50IGNhbiBiZSB3cml0dGVuIGFzCisgICAgICAg IDxsaXRlcmFsPmV4Y2VwdF9raW5kcyA9PiBBUlJBWVsndW5pcXVlJywnY2hlY2snLCdmb3JlaWdu X2tleScsJ2V4Y2x1c2lvbiddPC9saXRlcmFsPi4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBh cmE+CisgICAgICAgIFdoZW4gdGhlIHRhYmxlIGhhcworICAgICAgICA8bGl0ZXJhbD5SRVBMSUNB IElERU5USVRZIFVTSU5HIElOREVYPC9saXRlcmFsPiBhbmQgdGhlCisgICAgICAgIDxsaXRlcmFs PnJlcGxpY2FfaWRlbnRpdHk8L2xpdGVyYWw+IGtpbmQgaXMgaW4gdGhlIGFjdGl2ZQorICAgICAg ICBmaWx0ZXIsIHRoZSBraW5kIHRoYXQgZW1pdHMgdGhlIHJlZmVyZW5jZWQgaW5kZXgKKyAgICAg ICAgKDxsaXRlcmFsPnByaW1hcnlfa2V5PC9saXRlcmFsPiwgPGxpdGVyYWw+dW5pcXVlPC9saXRl cmFsPiwKKyAgICAgICAgPGxpdGVyYWw+ZXhjbHVzaW9uPC9saXRlcmFsPiwgb3IgPGxpdGVyYWw+ aW5kZXg8L2xpdGVyYWw+KSBtdXN0CisgICAgICAgIGFsc28gYmUgaW4gdGhlIGZpbHRlci4gIE90 aGVyd2lzZSB0aGUgZW1pdHRlZAorICAgICAgICA8Y29tbWFuZD5BTFRFUiBUQUJMRSAuLi4gUkVQ TElDQSBJREVOVElUWSBVU0lORyBJTkRFWDwvY29tbWFuZD4KKyAgICAgICAgd291bGQgcmVmZXJl bmNlIGFuIGluZGV4IHRoZSBzYW1lIERETCBuZXZlciBwcm9kdWNlZCwgYW5kIHRoZQorICAgICAg ICBmdW5jdGlvbiByZXBvcnRzIGFuIGVycm9yIGJlZm9yZSBlbWl0dGluZyBhbnkgc3RhdGVtZW50 cy4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8cGFyYW1ldGVy PnNjaGVtYV9xdWFsaWZpZWQ8L3BhcmFtZXRlcj4gcGFyYW1ldGVyIChkZWZhdWx0CisgICAgICAg IDxsaXRlcmFsPnRydWU8L2xpdGVyYWw+KSBjb250cm9scyB3aGV0aGVyIHRoZSB0YXJnZXQgdGFi bGUncyBvd24KKyAgICAgICAgc2NoZW1hIGlzIGluY2x1ZGVkIGluIHRoZSBnZW5lcmF0ZWQgRERM LiAgV2hlbiBzZXQgdG8KKyAgICAgICAgPGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+LCB0aGUgdGFi bGUgbmFtZSBpcyBlbWl0dGVkIHVucXVhbGlmaWVkCisgICAgICAgIGluIHRoZSA8Y29tbWFuZD5D UkVBVEUgVEFCTEU8L2NvbW1hbmQ+IGFuZCBldmVyeSBzdWJzZXF1ZW50CisgICAgICAgIDxjb21t YW5kPkFMVEVSIFRBQkxFPC9jb21tYW5kPiwgPGNvbW1hbmQ+Q1JFQVRFIElOREVYPC9jb21tYW5k PiwKKyAgICAgICAgPGNvbW1hbmQ+Q1JFQVRFIFJVTEU8L2NvbW1hbmQ+LCBhbmQKKyAgICAgICAg PGNvbW1hbmQ+Q1JFQVRFIFNUQVRJU1RJQ1M8L2NvbW1hbmQ+IHN0YXRlbWVudC4gIFJlZmVyZW5j ZXMgdG8KKyAgICAgICAgb2JqZWN0cyBpbiB0aGUgc2FtZSBzY2hlbWEgYXMgdGhlIHRhcmdldCB0 YWJsZSAoaW5oZXJpdGFuY2UKKyAgICAgICAgcGFyZW50cywgcGFydGl0aW9uIHBhcmVudHMsIGlk ZW50aXR5IHNlcXVlbmNlcywgYW5kIGFueQorICAgICAgICBzYW1lLXNjaGVtYSBvYmplY3QgdGhl IGRlcGFyc2UgaGVscGVycyBoYXBwZW4gdG8gbWVudGlvbikgYXJlCisgICAgICAgIGFsc28gZW1p dHRlZCB1bnF1YWxpZmllZCwgc28gdGhlIHNjcmlwdCBjYW4gYmUgcmVwbGF5ZWQgdW5kZXIgYQor ICAgICAgICBkaWZmZXJlbnQgPHZhcm5hbWU+c2VhcmNoX3BhdGg8L3Zhcm5hbWU+IHRvIHJlY3Jl YXRlIHRoZSB0YWJsZQorICAgICAgICBpbiBhbm90aGVyIHNjaGVtYS4gIENyb3NzLXNjaGVtYSBy ZWZlcmVuY2VzIChmb3IgZXhhbXBsZSBhCisgICAgICAgIGZvcmVpZ24ga2V5IHRhcmdldCBpbiBh IGRpZmZlcmVudCBzY2hlbWEpIHJlbWFpbiBxdWFsaWZpZWQgZm9yCisgICAgICAgIGNvcnJlY3Ru ZXNzLiAgUGFydGl0aW9uIGNoaWxkcmVuIHRoYXQgcmVzaWRlIGluIGEgZGlmZmVyZW50CisgICAg ICAgIHNjaGVtYSB0aGFuIHRoZSB0YXJnZXQgdGFibGUgYXJlIGFsd2F5cyBlbWl0dGVkIHdpdGgg ZnVsbCBzY2hlbWEKKyAgICAgICAgcXVhbGlmaWNhdGlvbiByZWdhcmRsZXNzIG9mIHRoaXMgcGFy YW1ldGVyLCBiZWNhdXNlIHRoZSBvdXRwdXQKKyAgICAgICAgd291bGQgb3RoZXJ3aXNlIHBsYWNl IHRoZSBjaGlsZCBpbiB0aGUgd3Jvbmcgc2NoZW1hIHdoZW4KKyAgICAgICAgcmVwbGF5ZWQuCisg ICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBBbGwgdGhyZWUgZm9ybXMgb2Yg PGNvbW1hbmQ+Q1JFQVRFIFRBQkxFPC9jb21tYW5kPiBhcmUgc3VwcG9ydGVkOgorICAgICAgICB0 aGUgb3JkaW5hcnkgY29sdW1uLWxpc3QgZm9ybSwgdGhlIHR5cGVkLXRhYmxlIGZvcm0KKyAgICAg ICAgKDxsaXRlcmFsPk9GIDxyZXBsYWNlYWJsZT50eXBlX25hbWU8L3JlcGxhY2VhYmxlPjwvbGl0 ZXJhbD4sIHdpdGgKKyAgICAgICAgcGVyLWNvbHVtbiA8bGl0ZXJhbD5XSVRIIE9QVElPTlM8L2xp dGVyYWw+IG92ZXJyaWRlcyBmb3IgbG9jYWwKKyAgICAgICAgZGVmYXVsdHMsIDxsaXRlcmFsPk5P VCBOVUxMPC9saXRlcmFsPiwgYW5kIDxsaXRlcmFsPkNIRUNLPC9saXRlcmFsPgorICAgICAgICBj b25zdHJhaW50cyksIGFuZCB0aGUgPGxpdGVyYWw+UEFSVElUSU9OIE9GPC9saXRlcmFsPiBmb3Jt LgorICAgICAgICA8bGl0ZXJhbD5URU1QT1JBUlk8L2xpdGVyYWw+IGFuZCA8bGl0ZXJhbD5VTkxP R0dFRDwvbGl0ZXJhbD4KKyAgICAgICAgcGVyc2lzdGVuY2UgbW9kZXMgYXJlIGVtaXR0ZWQgZnJv bQorICAgICAgICA8c3RydWN0ZmllbGQ+cmVscGVyc2lzdGVuY2U8L3N0cnVjdGZpZWxkPi4gIEZv ciB0ZW1wb3JhcnkgdGFibGVzCisgICAgICAgIHJlZ2lzdGVyZWQgaW4gdGhlIGN1cnJlbnQgc2Vz c2lvbiwgdGhlCisgICAgICAgIDxsaXRlcmFsPk9OIENPTU1JVCBERUxFVEUgUk9XUzwvbGl0ZXJh bD4gYW5kCisgICAgICAgIDxsaXRlcmFsPk9OIENPTU1JVCBEUk9QPC9saXRlcmFsPiBjbGF1c2Vz IGFyZSBlbWl0dGVkOyB0aGUgZGVmYXVsdAorICAgICAgICA8bGl0ZXJhbD5PTiBDT01NSVQgUFJF U0VSVkUgUk9XUzwvbGl0ZXJhbD4gaXMgb21pdHRlZC4KKyAgICAgICA8L3BhcmE+PC9lbnRyeT4K KyAgICAgIDwvcm93PgogICAgICA8L3Rib2R5PgogICAgIDwvdGdyb3VwPgogICAgPC90YWJsZT4K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfaW5oZXJpdHMuYyBiL3NyYy9iYWNr ZW5kL2NhdGFsb2cvcGdfaW5oZXJpdHMuYwppbmRleCA0Yjk4MDJhYWZjYy4uODk3MTUxYmQ2ZDEg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfaW5oZXJpdHMuYworKysgYi9zcmMv YmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMKQEAgLTIzNiw2ICsyMzYsOTkgQEAgZmluZF9p bmhlcml0YW5jZV9jaGlsZHJlbl9leHRlbmRlZChPaWQgcGFyZW50cmVsSWQsIGJvb2wgb21pdF9k ZXRhY2hlZCwKIH0KIAogCisvKgorICogZmluZF9pbmhlcml0YW5jZV9wYXJlbnRzCisgKgorICog UmV0dXJucyBhIGxpc3QgY29udGFpbmluZyB0aGUgT0lEcyBvZiBhbGwgcmVsYXRpb25zIHRoYXQg dGhlIHJlbGF0aW9uIHdpdGgKKyAqIE9JRCAncmVsaWQnIGluaGVyaXRzICpkaXJlY3RseSogZnJv bSwgaW4gaW5oc2Vxbm8gb3JkZXIgKHRoZSBvcmRlciBpbiB3aGljaAorICogdGhleSBzaG91bGQg YXBwZWFyIGluIGFuIElOSEVSSVRTIGNsYXVzZSkuCisgKgorICogVGhlIHNwZWNpZmllZCBsb2Nr IHR5cGUgaXMgYWNxdWlyZWQgb24gZWFjaCBwYXJlbnQgcmVsYXRpb24gKGJ1dCBub3Qgb24gdGhl CisgKiBnaXZlbiByZWw7IGNhbGxlciBzaG91bGQgYWxyZWFkeSBoYXZlIGxvY2tlZCBpdCkuICBJ ZiBsb2NrbW9kZSBpcyBOb0xvY2sKKyAqIHRoZW4gbm8gbG9ja3MgYXJlIGFjcXVpcmVkLCBidXQg Y2FsbGVyIG11c3QgYmV3YXJlIG9mIHJhY2UgY29uZGl0aW9ucworICogYWdhaW5zdCBwb3NzaWJs ZSBEUk9QcyBvZiBwYXJlbnQgcmVsYXRpb25zLgorICoKKyAqIFBhcnRpdGlvbiBjaGlsZHJlbiBh bHNvIGhhdmUgYSBwZ19pbmhlcml0cyBlbnRyeSBwb2ludGluZyB0byB0aGUKKyAqIHBhcnRpdGlv bmVkIHBhcmVudDsgY2FsbGVycyB0aGF0IGRpc3Rpbmd1aXNoIElOSEVSSVRTIGZyb20gUEFSVElU SU9OIE9GCisgKiBtdXN0IGNoZWNrIHJlbGlzcGFydGl0aW9uIHRoZW1zZWx2ZXMuCisgKi8KK0xp c3QgKgorZmluZF9pbmhlcml0YW5jZV9wYXJlbnRzKE9pZCByZWxpZCwgTE9DS01PREUgbG9ja21v ZGUpCit7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlSZWxhdGlvbglyZWxhdGlvbjsKKwlTeXNT Y2FuRGVzYyBzY2FuOworCVNjYW5LZXlEYXRhIGtleVsxXTsKKwlIZWFwVHVwbGUJaW5oZXJpdHNU dXBsZTsKKwlPaWQJCQlpbmhwYXJlbnQ7CisJT2lkCQkgICAqb2lkYXJyOworCWludAkJCW1heG9p ZHMsCisJCQkJbnVtb2lkcywKKwkJCQlpOworCisJLyoKKwkgKiBTY2FuIHBnX2luaGVyaXRzIHZp YSB0aGUgKGluaHJlbGlkLCBpbmhzZXFubykgaW5kZXggc28gdGhhdCB0aGUgcm93cworCSAqIGNv bWUgb3V0IGluIGluaHNlcW5vIG9yZGVyLCB3aGljaCBpcyB0aGUgb3JkZXIgcmVxdWlyZWQgZm9y IHRoZQorCSAqIElOSEVSSVRTIGNsYXVzZS4KKwkgKi8KKwltYXhvaWRzID0gODsKKwlvaWRhcnIg PSAoT2lkICopIHBhbGxvYyhtYXhvaWRzICogc2l6ZW9mKE9pZCkpOworCW51bW9pZHMgPSAwOwor CisJcmVsYXRpb24gPSB0YWJsZV9vcGVuKEluaGVyaXRzUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVM b2NrKTsKKworCVNjYW5LZXlJbml0KCZrZXlbMF0sCisJCQkJQW51bV9wZ19pbmhlcml0c19pbmhy ZWxpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRH ZXREYXR1bShyZWxpZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihyZWxhdGlvbiwg SW5oZXJpdHNSZWxpZFNlcW5vSW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDEsIGtleSk7 CisKKwl3aGlsZSAoKGluaGVyaXRzVHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSAhPSBO VUxMKQorCXsKKwkJaW5ocGFyZW50ID0gKChGb3JtX3BnX2luaGVyaXRzKSBHRVRTVFJVQ1QoaW5o ZXJpdHNUdXBsZSkpLT5pbmhwYXJlbnQ7CisJCWlmIChudW1vaWRzID49IG1heG9pZHMpCisJCXsK KwkJCW1heG9pZHMgKj0gMjsKKwkJCW9pZGFyciA9IChPaWQgKikgcmVwYWxsb2Mob2lkYXJyLCBt YXhvaWRzICogc2l6ZW9mKE9pZCkpOworCQl9CisJCW9pZGFycltudW1vaWRzKytdID0gaW5ocGFy ZW50OworCX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisKKwl0YWJsZV9jbG9zZShyZWxh dGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8qCisJICogQWNxdWlyZSBsb2NrcyBhbmQgYnVp bGQgdGhlIHJlc3VsdCBsaXN0LiAgVW5saWtlCisJICogZmluZF9pbmhlcml0YW5jZV9jaGlsZHJl biB3ZSBkbyAqbm90KiBzb3J0IGJ5IE9JRDogY2FsbGVycyBuZWVkIHRoZQorCSAqIHNlcW5vLW9y ZGVyZWQgdHJhdmVyc2FsLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBudW1vaWRzOyBpKyspCisJ eworCQlpbmhwYXJlbnQgPSBvaWRhcnJbaV07CisKKwkJaWYgKGxvY2ttb2RlICE9IE5vTG9jaykK KwkJeworCQkJTG9ja1JlbGF0aW9uT2lkKGluaHBhcmVudCwgbG9ja21vZGUpOworCisJCQlpZiAo IVNlYXJjaFN5c0NhY2hlRXhpc3RzMShSRUxPSUQsIE9iamVjdElkR2V0RGF0dW0oaW5ocGFyZW50 KSkpCisJCQl7CisJCQkJVW5sb2NrUmVsYXRpb25PaWQoaW5ocGFyZW50LCBsb2NrbW9kZSk7CisJ CQkJY29udGludWU7CisJCQl9CisJCX0KKworCQlsaXN0ID0gbGFwcGVuZF9vaWQobGlzdCwgaW5o cGFyZW50KTsKKwl9CisKKwlwZnJlZShvaWRhcnIpOworCisJcmV0dXJuIGxpc3Q7Cit9CisKKwog LyoKICAqIGZpbmRfYWxsX2luaGVyaXRvcnMgLQogICoJCVJldHVybnMgYSBsaXN0IG9mIHJlbGF0 aW9uIE9JRHMgaW5jbHVkaW5nIHRoZSBnaXZlbiByZWwgcGx1cwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNt ZHMuYwppbmRleCA5NWFiYWY0ODkwYy4uMDZhZmE2ODExZWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxl Y21kcy5jCkBAIC03NDYsNyArNzQ2LDYgQEAgc3RhdGljIE9iamVjdEFkZHJlc3MgQVRFeGVjU2V0 Q29tcHJlc3Npb24oUmVsYXRpb24gcmVsLAogCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqY29sdW1u LCBOb2RlICpuZXdWYWx1ZSwgTE9DS01PREUgbG9ja21vZGUpOwogCiBzdGF0aWMgdm9pZCBpbmRl eF9jb3B5X2RhdGEoUmVsYXRpb24gcmVsLCBSZWxGaWxlTG9jYXRvciBuZXdybG9jYXRvcik7Ci1z dGF0aWMgY29uc3QgY2hhciAqc3RvcmFnZV9uYW1lKGNoYXIgYyk7CiAKIHN0YXRpYyB2b2lkIFJh bmdlVmFyQ2FsbGJhY2tGb3JEcm9wUmVsYXRpb24oY29uc3QgUmFuZ2VWYXIgKnJlbCwgT2lkIHJl bE9pZCwKIAkJCQkJCQkJCQkJT2lkIG9sZFJlbE9pZCwgdm9pZCAqYXJnKTsKQEAgLTI1MjQsNyAr MjUyMyw3IEBAIHRydW5jYXRlX2NoZWNrX2FjdGl2aXR5KFJlbGF0aW9uIHJlbCkKICAqIHN0b3Jh Z2VfbmFtZQogICoJICByZXR1cm5zIHRoZSBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gYSB0eXBzdG9y YWdlL2F0dHN0b3JhZ2UgZW51bSB2YWx1ZQogICovCi1zdGF0aWMgY29uc3QgY2hhciAqCitjb25z dCBjaGFyICoKIHN0b3JhZ2VfbmFtZShjaGFyIGMpCiB7CiAJc3dpdGNoIChjKQpAQCAtMTk4Mzcs NiArMTk4MzYsMzMgQEAgcmVtb3ZlX29uX2NvbW1pdF9hY3Rpb24oT2lkIHJlbGlkKQogCX0KIH0K IAorLyoKKyAqIExvb2sgdXAgdGhlIHJlZ2lzdGVyZWQgT04gQ09NTUlUIGFjdGlvbiBmb3IgYSBy ZWxhdGlvbi4KKyAqCisgKiBSZXR1cm5zIE9OQ09NTUlUX05PT1Agd2hlbiBub3RoaW5nIHdhcyBy ZWdpc3RlcmVkLCB3aGljaCBhbHNvIGNvdmVycworICogdGVtcG9yYXJ5IHRhYmxlcyBjcmVhdGVk IHdpdGggdGhlIGRlZmF1bHQgT04gQ09NTUlUIFBSRVNFUlZFIFJPV1MKKyAqIGJlaGF2aW9yIChy ZWdpc3Rlcl9vbl9jb21taXRfYWN0aW9uKCkgc2tpcHMgdGhvc2UsIHNpbmNlIG5vIGFjdGlvbiBp cworICogbmVlZGVkIGF0IGNvbW1pdCkuICBFbnRyaWVzIG1hcmtlZCBmb3IgZGVsZXRpb24gaW4g dGhlIGN1cnJlbnQKKyAqIHRyYW5zYWN0aW9uIGFyZSBpZ25vcmVkLgorICovCitPbkNvbW1pdEFj dGlvbgorZ2V0X29uX2NvbW1pdF9hY3Rpb24oT2lkIHJlbGlkKQoreworCUxpc3RDZWxsICAgKmw7 CisKKwlmb3JlYWNoKGwsIG9uX2NvbW1pdHMpCisJeworCQlPbkNvbW1pdEl0ZW0gKm9jID0gKE9u Q29tbWl0SXRlbSAqKSBsZmlyc3QobCk7CisKKwkJaWYgKG9jLT5yZWxpZCAhPSByZWxpZCkKKwkJ CWNvbnRpbnVlOworCQlpZiAob2MtPmRlbGV0aW5nX3N1YmlkICE9IEludmFsaWRTdWJUcmFuc2Fj dGlvbklkKQorCQkJY29udGludWU7CisJCXJldHVybiBvYy0+b25jb21taXQ7CisJfQorCXJldHVy biBPTkNPTU1JVF9OT09QOworfQorCiAvKgogICogUGVyZm9ybSBPTiBDT01NSVQgYWN0aW9ucy4K ICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZGRsdXRpbHMuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jCmluZGV4IGE3MGYxYzI4NjU1Li4wN2I0MjU3YWNm MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2RkbHV0aWxzLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2RkbHV0aWxzLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogVGhp cyBmaWxlIGNvbnRhaW5zIHRoZSBwZ19nZXRfKl9kZGwgZmFtaWx5IG9mIGZ1bmN0aW9ucyB0aGF0 IGdlbmVyYXRlCiAgKiBEREwgc3RhdGVtZW50cyB0byByZWNyZWF0ZSBkYXRhYmFzZSBvYmplY3Rz IHN1Y2ggYXMgcm9sZXMsIHRhYmxlc3BhY2VzLAotICogYW5kIGRhdGFiYXNlcywgYWxvbmcgd2l0 aCBjb21tb24gaW5mcmFzdHJ1Y3R1cmUgZm9yIG9wdGlvbiBwYXJzaW5nIGFuZAorICogZGF0YWJh c2VzLCBhbmQgdGFibGVzLCBhbG9uZyB3aXRoIGNvbW1vbiBpbmZyYXN0cnVjdHVyZSBmb3IKICAq IHByZXR0eS1wcmludGluZy4KICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAy NiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKQEAgLTIxLDMwICsyMSw4OSBA QAogI2luY2x1ZGUgImFjY2Vzcy9nZW5hbS5oIgogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFp bHMuaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKKyNpbmNsdWRlICJhY2Nlc3MvdG9hc3Rf Y29tcHJlc3Npb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgorI2luY2x1ZGUg ImNhdGFsb2cvcGFydGl0aW9uLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5oIgogI2luY2x1 ZGUgImNhdGFsb2cvcGdfYXV0aF9tZW1iZXJzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRo aWQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z19jb2xsYXRpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnN0cmFpbnQuaCIKICNpbmNs dWRlICJjYXRhbG9nL3BnX2RhdGFiYXNlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYl9yb2xl X3NldHRpbmcuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2luaGVyaXRzLmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9wZ19wb2xpY3kuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3NlcXVlbmNlLmgiCisj aW5jbHVkZSAiY2F0YWxvZy9wZ19zdGF0aXN0aWNfZXh0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z190YWJsZXNwYWNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190cmlnZ2VyLmgiCisjaW5jbHVk ZSAiY29tbWFuZHMvZGVmcmVtLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvdGFibGVjbWRzLmgiCiAj aW5jbHVkZSAiY29tbWFuZHMvdGFibGVzcGFjZS5oIgotI2luY2x1ZGUgImNvbW1vbi9yZWxwYXRo LmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCiAjaW5j bHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCisjaW5jbHVkZSAidXRp bHMvYXJyYXkuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxz L2RhdGV0aW1lLmgiCiAjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKICNpbmNsdWRlICJ1dGls cy9ndWMuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKLSNpbmNsdWRlICJ1dGlscy9w Z19sb2NhbGUuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNpbmNsdWRlICJ1dGlscy9ydWxl dXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3Rp bWVzdGFtcC5oIgogI2luY2x1ZGUgInV0aWxzL3ZhcmxlbmEuaCIKIAorLyoKKyAqIE9iamVjdC1j bGFzcyBraW5kcyB0aGF0IHRoZSBvbmx5IC8gZXhjZXB0IG9wdGlvbnMgb24KKyAqIHBnX2dldF90 YWJsZV9kZGwgY2FuIGZpbHRlciBvbi4gIE1lbWJlcnMgYXJlIHN0b3JlZCBhcyBpbnRlZ2VycyBp biBhCisgKiBCaXRtYXBzZXQgb24gVGFibGVEZGxDb250ZXh0LiAgS2VlcCB0YWJsZV9kZGxfa2lu ZF9uYW1lc1tdIGluIHN5bmMKKyAqIHdpdGggdGhlIG9yZGVyIG9mIGFkZGl0aW9ucyBoZXJlLgor ICovCit0eXBlZGVmIGVudW0gVGFibGVEZGxLaW5kCit7CisJVEFCTEVfRERMX0tJTkRfVEFCTEUs CisJVEFCTEVfRERMX0tJTkRfSU5ERVgsCisJVEFCTEVfRERMX0tJTkRfUFJJTUFSWV9LRVksCisJ VEFCTEVfRERMX0tJTkRfVU5JUVVFLAorCVRBQkxFX0RETF9LSU5EX0NIRUNLLAorCVRBQkxFX0RE TF9LSU5EX0ZPUkVJR05fS0VZLAorCVRBQkxFX0RETF9LSU5EX0VYQ0xVU0lPTiwKKwlUQUJMRV9E RExfS0lORF9SVUxFLAorCVRBQkxFX0RETF9LSU5EX1NUQVRJU1RJQ1MsCisJVEFCTEVfRERMX0tJ TkRfVFJJR0dFUiwKKwlUQUJMRV9ERExfS0lORF9QT0xJQ1ksCisJVEFCTEVfRERMX0tJTkRfUkxT LAorCVRBQkxFX0RETF9LSU5EX1JFUExJQ0FfSURFTlRJVFksCisJVEFCTEVfRERMX0tJTkRfUEFS VElUSU9OLAorfQkJCVRhYmxlRGRsS2luZDsKKworc3RhdGljIGNvbnN0IHN0cnVjdAoreworCWNv bnN0IGNoYXIgKm5hbWU7CisJVGFibGVEZGxLaW5kIGtpbmQ7Cit9CQkJdGFibGVfZGRsX2tpbmRf bmFtZXNbXSA9Cit7CisJeyJ0YWJsZSIsIFRBQkxFX0RETF9LSU5EX1RBQkxFfSwKKwl7ImluZGV4 IiwgVEFCTEVfRERMX0tJTkRfSU5ERVh9LAorCXsicHJpbWFyeV9rZXkiLCBUQUJMRV9ERExfS0lO RF9QUklNQVJZX0tFWX0sCisJeyJ1bmlxdWUiLCBUQUJMRV9ERExfS0lORF9VTklRVUV9LAorCXsi Y2hlY2siLCBUQUJMRV9ERExfS0lORF9DSEVDS30sCisJeyJmb3JlaWduX2tleSIsIFRBQkxFX0RE TF9LSU5EX0ZPUkVJR05fS0VZfSwKKwl7ImV4Y2x1c2lvbiIsIFRBQkxFX0RETF9LSU5EX0VYQ0xV U0lPTn0sCisJeyJydWxlIiwgVEFCTEVfRERMX0tJTkRfUlVMRX0sCisJeyJzdGF0aXN0aWNzIiwg VEFCTEVfRERMX0tJTkRfU1RBVElTVElDU30sCisJeyJ0cmlnZ2VyIiwgVEFCTEVfRERMX0tJTkRf VFJJR0dFUn0sCisJeyJwb2xpY3kiLCBUQUJMRV9ERExfS0lORF9QT0xJQ1l9LAorCXsicmxzIiwg VEFCTEVfRERMX0tJTkRfUkxTfSwKKwl7InJlcGxpY2FfaWRlbnRpdHkiLCBUQUJMRV9ERExfS0lO RF9SRVBMSUNBX0lERU5USVRZfSwKKwl7InBhcnRpdGlvbiIsIFRBQkxFX0RETF9LSU5EX1BBUlRJ VElPTn0sCit9OworCitzdGF0aWMgQml0bWFwc2V0ICpwYXJzZV9raW5kX2FycmF5KGNvbnN0IGNo YXIgKnBhcmFtbmFtZSwgQXJyYXlUeXBlICphcnIpOwogc3RhdGljIHZvaWQgYXBwZW5kX2RkbF9v cHRpb24oU3RyaW5nSW5mbyBidWYsIGJvb2wgcHJldHR5LCBpbnQgaW5kZW50LAogCQkJCQkJCSAg Y29uc3QgY2hhciAqZm10LCAuLi4pCiAJCQlwZ19hdHRyaWJ1dGVfcHJpbnRmKDQsIDUpOwpAQCAt NTcsNiArMTE2LDE5NCBAQCBzdGF0aWMgRGF0dW0gcGdfZ2V0X3RhYmxlc3BhY2VfZGRsX3NyZihG dW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgT2lkIHRzaWQpOwogc3RhdGljIExpc3QgKnBnX2dldF9k YXRhYmFzZV9kZGxfaW50ZXJuYWwoT2lkIGRiaWQsIGJvb2wgcHJldHR5LAogCQkJCQkJCQkJCSAg Ym9vbCBub19vd25lciwgYm9vbCBub190YWJsZXNwYWNlKTsKIAorLyoKKyAqIFBlci1jb2x1bW4g Y2FjaGUgb2YgbG9jYWxseS1kZWNsYXJlZCBOT1QgTlVMTCBjb25zdHJhaW50cy4gIEJ1aWx0IG9u Y2UKKyAqIGJ5IGNvbGxlY3RfbG9jYWxfbm90X251bGwoKSBhbmQgY29uc3VsdGVkIGJ5IHRoZSBj b2x1bW4tZW1pdCBoZWxwZXJzCisgKiBhbmQgdGhlIHBvc3QtQ1JFQVRFIGNvbnN0cmFpbnQgbG9v cC4gIEVudHJpZXMgd2l0aCBjb25vaWQgPT0gSW52YWxpZE9pZAorICogbWVhbiB0aGUgY29sdW1u IGhhcyBubyBsb2NhbCBOT1QgTlVMTCBjb25zdHJhaW50IHJvdyBpbiBwZ19jb25zdHJhaW50Cisg KiAodGhlIGNvbHVtbiBtYXkgc3RpbGwgaGF2ZSBhdHRub3RudWxsPXRydWUgb24gYSBwcmUtUEct MTgtdXBncmFkZWQKKyAqIGNhdGFsb2csIGluIHdoaWNoIGNhc2UgZW1pdCBwbGFpbiBpbmxpbmUg Tk9UIE5VTEwpLgorICoKKyAqIGluaGVyaXRlZF9ub3RudWxsIGlzIHNldCB3aGVuIGEgTk9UIE5V TEwgY29uc3RyYWludCByb3cgZXhpc3RzIGluCisgKiBwZ19jb25zdHJhaW50IGJ1dCBjb25pc2xv Y2FsPWZhbHNlIChwdXJlbHkgaW5oZXJpdGVkKS4gIEluIHRoYXQgY2FzZQorICogdGhlIE5PVCBO VUxMIG11c3Qgbm90IGJlIGVtaXR0ZWQgaW4gdGhlIGNvbHVtbiBsaXN0OiB0aGUgSU5IRVJJVFMg LworICogUEFSVElUSU9OIE9GIGNsYXVzZSBhbHJlYWR5IHByb3BhZ2F0ZXMgaXQsIGFuZCBlbWl0 dGluZyBpdCBoZXJlIHdvdWxkCisgKiBmbGlwIGNvbmlzbG9jYWwgdG8gdHJ1ZSBvbiByZXBsYXku CisgKi8KK3R5cGVkZWYgc3RydWN0IExvY2FsTm90TnVsbEVudHJ5Cit7CisJT2lkCQkJY29ub2lk OworCWNoYXIJICAgKm5hbWU7CisJYm9vbAkJaXNfYXV0bzsJCS8qIG1hdGNoZXMgIjx0YWJsZT5f PGNvbD5fbm90X251bGwiICovCisJYm9vbAkJbm9faW5oZXJpdDsKKwlib29sCQlpbmhlcml0ZWRf bm90bnVsbDsJLyogcm93IGV4aXN0cyBidXQgY29uaXNsb2NhbD1mYWxzZSAqLworfQkJCUxvY2Fs Tm90TnVsbEVudHJ5OworCisvKgorICogV29ya2luZyBjb250ZXh0IHRocmVhZGVkIHRocm91Z2gg dGhlIHBlci1wYXNzIGhlbHBlcnMgYmVsb3cuICBJbnB1dHMKKyAqIChjYWxsZXItcHJvdmlkZWQg b3B0aW9uIGZsYWdzKSBhcmUgZmlsbGVkIGluIG9uY2UgYXQgdGhlIHRvcCBvZgorICogcGdfZ2V0 X3RhYmxlX2RkbF9pbnRlcm5hbCBhbmQgdHJlYXRlZCBhcyByZWFkLW9ubHkgdGhlcmVhZnRlci4g IERlcml2ZWQKKyAqIGZpZWxkcyAocXVhbG5hbWUsIG5uX2VudHJpZXMsIHNraXBfbm90bnVsbF9v aWRzKSBhcmUgY29tcHV0ZWQgb25jZQorICogZHVyaW5nIHNldHVwLiAgRWFjaCBwYXNzIGFwcGVu ZHMgdG8gY3R4LT5idWYgYW5kIHB1c2hlcyB0aGUgZmluaXNoZWQKKyAqIHN0YXRlbWVudCBvbnRv IGN0eC0+c3RhdGVtZW50cyB2aWEgYXBwZW5kX3N0bXQoKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg VGFibGVEZGxDb250ZXh0Cit7CisJUmVsYXRpb24JcmVsOworCU9pZAkJCXJlbGlkOworCWJvb2wJ CXByZXR0eTsKKwlib29sCQlub19vd25lcjsKKwlib29sCQlub190YWJsZXNwYWNlOworCWJvb2wJ CXNjaGVtYV9xdWFsaWZpZWQ7CisKKwkvKgorCSAqIE9iamVjdC1jbGFzcyBmaWx0ZXJpbmcuICBJ ZiBvbmx5X2tpbmRzIGlzIG5vbi1OVUxMLCBvbmx5IHRoZQorCSAqIGtpbmRzIGluIHRoYXQgc2V0 IGFyZSBlbWl0dGVkOyBpZiBleGNlcHRfa2luZHMgaXMgbm9uLU5VTEwsIGFsbAorCSAqIGtpbmRz ICpleGNlcHQqIHRob3NlIGluIHRoYXQgc2V0IGFyZSBlbWl0dGVkOyBpZiBib3RoIGFyZSBOVUxM LAorCSAqIGV2ZXJ5IGtpbmQgaXMgZW1pdHRlZCAodGhlIGRlZmF1bHQpLiAgVGhlIHR3byBhcmUg bXV0dWFsbHkKKwkgKiBleGNsdXNpdmUgYXQgdGhlIHVzZXItZmFjaW5nIGxheWVyICh0aGUgU1JG IGVudHJ5IHJlamVjdHMKKwkgKiBzcGVjaWZ5aW5nIGJvdGgpLgorCSAqLworCUJpdG1hcHNldCAg Km9ubHlfa2luZHM7CisJQml0bWFwc2V0ICAqZXhjZXB0X2tpbmRzOworCisJLyogRGVyaXZlZCBk dXJpbmcgc2V0dXAgKi8KKwlPaWQJCQliYXNlX25hbWVzcGFjZTsKKwljaGFyCSAgICpxdWFsbmFt ZTsKKwlpbnQJCQlzYXZlX25lc3RsZXZlbDsgLyogPj0gMCBpZiB3ZSBuYXJyb3dlZCBzZWFyY2hf cGF0aCAqLworCUxvY2FsTm90TnVsbEVudHJ5ICpubl9lbnRyaWVzOworCUxpc3QJICAgKnNraXBf bm90bnVsbF9vaWRzOworCisJLyogTXV0YWJsZSB3b3JraW5nIHN0YXRlICovCisJU3RyaW5nSW5m b0RhdGEgYnVmOworCUxpc3QJICAgKnN0YXRlbWVudHM7Cit9CQkJVGFibGVEZGxDb250ZXh0Owor CitzdGF0aWMgTGlzdCAqcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbChUYWJsZURkbENvbnRleHQg KmN0eCk7CitzdGF0aWMgYm9vbCBpc19raW5kX2luY2x1ZGVkKGNvbnN0IFRhYmxlRGRsQ29udGV4 dCAqY3R4LCBUYWJsZURkbEtpbmQga2luZCk7CitzdGF0aWMgdm9pZCBhcHBlbmRfY29sdW1uX2Rl ZnMoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwgYm9vbCBwcmV0dHksCisJCQkJCQkJICAg Ym9vbCBpbmNsdWRlX2NoZWNrLAorCQkJCQkJCSAgIGJvb2wgc2NoZW1hX3F1YWxpZmllZCwKKwkJ CQkJCQkgICBMb2NhbE5vdE51bGxFbnRyeSAqbm5fZW50cmllcyk7CitzdGF0aWMgdm9pZCBhcHBl bmRfdHlwZWRfY29sdW1uX292ZXJyaWRlcyhTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVsLAor CQkJCQkJCQkJCSAgYm9vbCBwcmV0dHksIGJvb2wgaW5jbHVkZV9jaGVjaywKKwkJCQkJCQkJCQkg IExvY2FsTm90TnVsbEVudHJ5ICpubl9lbnRyaWVzKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9pbmxp bmVfY2hlY2tfY29uc3RyYWludHMoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwKKwkJCQkJ CQkJCQkJYm9vbCBwcmV0dHksIGJvb2wgKmZpcnN0KTsKK3N0YXRpYyBjaGFyICpmaW5kX2F0dHJk ZWZfdGV4dChSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bnVtLAorCQkJCQkJCSAgIExpc3Qg KipkcGNvbnRleHQpOworc3RhdGljIGJvb2wgY2hpbGRfZGVmYXVsdF9pbmhlcml0ZWRfZnJvbV9w YXJlbnQoT2lkIGNoaWxkT2lkLAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKmF0dG5hbWUsCisJ CQkJCQkJCQkJCQkgY29uc3QgY2hhciAqY2hpbGRfYWRiaW4pOworc3RhdGljIGNoYXIgKmxvb2t1 cF9yZWxuYW1lX2Zvcl9lbWl0KE9pZCByZWxpZCwgYm9vbCBzY2hlbWFfcXVhbGlmaWVkLAorCQkJ CQkJCQkJIE9pZCBiYXNlX25hbWVzcGFjZSk7CitzdGF0aWMgTG9jYWxOb3ROdWxsRW50cnkgKmNv bGxlY3RfbG9jYWxfbm90X251bGwoUmVsYXRpb24gcmVsLAorCQkJCQkJCQkJCQkJICBMaXN0ICoq c2tpcF9vaWRzKTsKKworc3RhdGljIHZvaWQgYXBwZW5kX3N0bXQoVGFibGVEZGxDb250ZXh0ICpj dHgpOworc3RhdGljIHZvaWQgZW1pdF9jcmVhdGVfdGFibGVfc3RtdChUYWJsZURkbENvbnRleHQg KmN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X293bmVyX3N0bXQoVGFibGVEZGxDb250ZXh0ICpjdHgp Oworc3RhdGljIHZvaWQgZW1pdF9jaGlsZF9kZWZhdWx0X292ZXJyaWRlcyhUYWJsZURkbENvbnRl eHQgKmN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X2F0dG9wdGlvbnMoVGFibGVEZGxDb250ZXh0ICpj dHgpOworc3RhdGljIHZvaWQgZW1pdF90eXBlZF9jb2x1bW5fc3RvcmFnZShUYWJsZURkbENvbnRl eHQgKmN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X2luZGV4ZXMoVGFibGVEZGxDb250ZXh0ICpjdHgp Oworc3RhdGljIHZvaWQgZW1pdF9sb2NhbF9jb25zdHJhaW50cyhUYWJsZURkbENvbnRleHQgKmN0 eCk7CitzdGF0aWMgdm9pZCBlbWl0X3J1bGVzKFRhYmxlRGRsQ29udGV4dCAqY3R4KTsKK3N0YXRp YyB2b2lkIGVtaXRfc3RhdGlzdGljcyhUYWJsZURkbENvbnRleHQgKmN0eCk7CitzdGF0aWMgdm9p ZCBlbWl0X3JlcGxpY2FfaWRlbnRpdHkoVGFibGVEZGxDb250ZXh0ICpjdHgpOworc3RhdGljIHZv aWQgZW1pdF9ybHNfdG9nZ2xlcyhUYWJsZURkbENvbnRleHQgKmN0eCk7CitzdGF0aWMgdm9pZCBl bWl0X3BhcnRpdGlvbl9jaGlsZHJlbihUYWJsZURkbENvbnRleHQgKmN0eCk7CisKKworLyoKKyAq IHBhcnNlX2tpbmRfYXJyYXkKKyAqCQlQYXJzZSBhIHRleHRbXSBvZiBvYmplY3QtY2xhc3Mga2lu ZCBuYW1lcyBpbnRvIGEgQml0bWFwc2V0IG9mCisgKgkJVGFibGVEZGxLaW5kIHZhbHVlcy4KKyAq CisgKiBFYWNoIGVsZW1lbnQgaXMgbWF0Y2hlZCBjYXNlLWluc2Vuc2l0aXZlbHk7IHN1cnJvdW5k aW5nIHdoaXRlc3BhY2UgaXMKKyAqIHN0cmlwcGVkLiAgTlVMTCBlbGVtZW50cyBhcmUgcmVqZWN0 ZWQuICBVbmtub3duIGtpbmQgbmFtZXMgcmFpc2UgYW4gZXJyb3IKKyAqIGNpdGluZyB0aGUgc3Vw cGxpZWQgcGFyYW1ldGVyIG5hbWUuICBBbiBlbXB0eSBhcnJheSBpcyBhbHNvIHJlamVjdGVkLgor ICogRHVwbGljYXRlIGVudHJpZXMgYXJlIHNpbGVudGx5IGRlLWR1cGxpY2F0ZWQgYnkgdGhlIEJp dG1hcHNldC4KKyAqLworc3RhdGljIEJpdG1hcHNldCAqCitwYXJzZV9raW5kX2FycmF5KGNvbnN0 IGNoYXIgKnBhcmFtbmFtZSwgQXJyYXlUeXBlICphcnIpCit7CisJRGF0dW0JICAgKmVsZW1zOwor CWJvb2wJICAgKm51bGxzOworCWludAkJCW5lbGVtczsKKwlCaXRtYXBzZXQgICpyZXN1bHQgPSBO VUxMOworCisJZGVjb25zdHJ1Y3RfYXJyYXlfYnVpbHRpbihhcnIsIFRFWFRPSUQsICZlbGVtcywg Jm51bGxzLCAmbmVsZW1zKTsKKworCWlmIChuZWxlbXMgPT0gMCkKKwkJZXJlcG9ydChFUlJPUiwK KwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJy bXNnKCJwYXJhbWV0ZXIgXCIlc1wiIG11c3Qgc3BlY2lmeSBhdCBsZWFzdCBvbmUga2luZCIsCisJ CQkJCQlwYXJhbW5hbWUpKSk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG5lbGVtczsgaSsrKQor CXsKKwkJY2hhcgkgICAqcmF3OworCQljaGFyCSAgICp0b2tlbjsKKwkJY2hhcgkgICAqZW5kOwor CQlib29sCQlmb3VuZCA9IGZhbHNlOworCisJCWlmIChudWxsc1tpXSkKKwkJCWVyZXBvcnQoRVJS T1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJ CQkgZXJybXNnKCJwYXJhbWV0ZXIgXCIlc1wiIG11c3Qgbm90IGNvbnRhaW4gTlVMTCBlbGVtZW50 cyIsCisJCQkJCQkJcGFyYW1uYW1lKSkpOworCisJCXJhdyA9IHRleHRfdG9fY3N0cmluZyhEYXR1 bUdldFRleHRQUChlbGVtc1tpXSkpOworCisJCS8qIFRyaW0gbGVhZGluZyB3aGl0ZXNwYWNlLiAq LworCQl0b2tlbiA9IHJhdzsKKwkJd2hpbGUgKCp0b2tlbiA9PSAnICcgfHwgKnRva2VuID09ICdc dCcpCisJCQl0b2tlbisrOworCisJCS8qIFRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZS4gKi8KKwkJ ZW5kID0gdG9rZW4gKyBzdHJsZW4odG9rZW4pOworCQl3aGlsZSAoZW5kID4gdG9rZW4gJiYgKGVu ZFstMV0gPT0gJyAnIHx8IGVuZFstMV0gPT0gJ1x0JykpCisJCQllbmQtLTsKKwkJKmVuZCA9ICdc MCc7CisKKwkJZm9yIChzaXplX3QgaiA9IDA7IGogPCBsZW5ndGhvZih0YWJsZV9kZGxfa2luZF9u YW1lcyk7IGorKykKKwkJeworCQkJaWYgKHBnX3N0cmNhc2VjbXAodG9rZW4sIHRhYmxlX2RkbF9r aW5kX25hbWVzW2pdLm5hbWUpID09IDApCisJCQl7CisJCQkJcmVzdWx0ID0gYm1zX2FkZF9tZW1i ZXIocmVzdWx0LAorCQkJCQkJCQkJCShpbnQpIHRhYmxlX2RkbF9raW5kX25hbWVzW2pdLmtpbmQp OworCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICghZm91 bmQpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFS QU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygidW5yZWNvZ25pemVkIGtpbmQgXCIlc1wiIGlu IHBhcmFtZXRlciBcIiVzXCIiLAorCQkJCQkJCXRva2VuLCBwYXJhbW5hbWUpKSk7CisKKwkJcGZy ZWUocmF3KTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogaXNfa2luZF9pbmNs dWRlZAorICoJCURldGVybWluZSB3aGV0aGVyIERETCBmb3IgdGhlIGdpdmVuIG9iamVjdC1jbGFz cyBraW5kIHNob3VsZCBiZQorICoJCWVtaXR0ZWQgdW5kZXIgdGhlIGN1cnJlbnQgb3B0aW9ucy4K KyAqLworc3RhdGljIGJvb2wKK2lzX2tpbmRfaW5jbHVkZWQoY29uc3QgVGFibGVEZGxDb250ZXh0 ICpjdHgsIFRhYmxlRGRsS2luZCBraW5kKQoreworCWlmIChjdHgtPm9ubHlfa2luZHMgIT0gTlVM TCkKKwkJcmV0dXJuIGJtc19pc19tZW1iZXIoKGludCkga2luZCwgY3R4LT5vbmx5X2tpbmRzKTsK KwlpZiAoY3R4LT5leGNlcHRfa2luZHMgIT0gTlVMTCkKKwkJcmV0dXJuICFibXNfaXNfbWVtYmVy KChpbnQpIGtpbmQsIGN0eC0+ZXhjZXB0X2tpbmRzKTsKKwlyZXR1cm4gdHJ1ZTsKK30KIAogLyoK ICAqIEhlbHBlciB0byBhcHBlbmQgYSBmb3JtYXR0ZWQgc3RyaW5nIHdpdGggb3B0aW9uYWwgcHJl dHR5LXByaW50aW5nLgpAQCAtOTc1LDMgKzEyMjIsMTkzMiBAQCBwZ19nZXRfZGF0YWJhc2VfZGRs KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKIAl9CiB9CisK Ky8qCisgKiBsb29rdXBfcmVsbmFtZV9mb3JfZW1pdAorICoJCVJldHVybiBlaXRoZXIgdGhlIHNj aGVtYS1xdWFsaWZpZWQgb3IgdGhlIGJhcmUgcXVvdGVkIG5hbWUgb2YgYQorICoJCXJlbGF0aW9u LCBkZXBlbmRpbmcgb24gdGhlIHNjaGVtYV9xdWFsaWZpZWQgZmxhZy4KKyAqCisgKiBUZW1wb3Jh cnkgcmVsYXRpb25zIGFyZSBuZXZlciBzY2hlbWEtcXVhbGlmaWVkIHJlZ2FyZGxlc3Mgb2YKKyAq IHNjaGVtYV9xdWFsaWZpZWQ6IHRoZSBURU1QT1JBUlkga2V5d29yZCBpbiBDUkVBVEUgVEVNUE9S QVJZIFRBQkxFCisgKiBhbHJlYWR5IHBsYWNlcyB0aGUgdGFibGUgaW4gdGhlIHNlc3Npb24ncyB0 ZW1wIHNjaGVtYSwgc28gZW1pdHRpbmcKKyAqIHBnX3RlbXBfTk4ucmVsbmFtZSB3b3VsZCBwcm9k dWNlIERETCB0aGF0IGNhbm5vdCBiZSByZXBsYXllZC4KKyAqCisgKiBXaGVuIHNjaGVtYV9xdWFs aWZpZWQgaXMgdHJ1ZSB0aGUgc2NoZW1hLXF1YWxpZmllZCBuYW1lIGlzIGFsd2F5cworICogcmV0 dXJuZWQgZm9yIG5vbi10ZW1wb3JhcnkgcmVsYXRpb25zLiAgV2hlbiBmYWxzZSwgdGhlIGJhcmUg cmVsbmFtZQorICogaXMgcmV0dXJuZWQgb25seSBpZiB0aGUgdGFyZ2V0IHJlbGF0aW9uIGxpdmVz IGluIGJhc2VfbmFtZXNwYWNlICh0aGUKKyAqIG5hbWVzcGFjZSBvZiB0aGUgdGFibGUgd2hvc2Ug RERMIGlzIGJlaW5nIGdlbmVyYXRlZCk7IG90aGVyd2lzZSB0aGUKKyAqIHNjaGVtYS1xdWFsaWZp ZWQgZm9ybSBpcyByZXR1cm5lZCwgYmVjYXVzZSBjcm9zcy1zY2hlbWEgcmVmZXJlbmNlcworICog KGZvciBleGFtcGxlIGFuIGluaGVyaXRhbmNlIHBhcmVudCBvciBmb3JlaWduIGtleSB0YXJnZXQg aW4gYQorICogZGlmZmVyZW50IHNjaGVtYSkgYXJlIG5vdCBzYWZlIHRvIG9taXQuCisgKgorICog VGhpcyByZXBsYWNlcyB0aGUgdW5zYWZlIHBhdHRlcm4KKyAqCSAgcXVvdGVfcXVhbGlmaWVkX2lk ZW50aWZpZXIoZ2V0X25hbWVzcGFjZV9uYW1lKGdldF9yZWxfbmFtZXNwYWNlKG9pZCkpLAorICoJ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfcmVsX25hbWUob2lkKSkKKyAqIHdoaWNo IGRlcmVmZXJlbmNlcyBOVUxMIHdoZW4gYSBjb25jdXJyZW50IHRyYW5zYWN0aW9uIGhhcyBkcm9w cGVkIHRoZQorICogcmVmZXJlbmNlZCByZWxhdGlvbiAob3IgaXRzIHNjaGVtYSkgYmV0d2VlbiB3 aGVuIHdlIGNhY2hlZCBpdHMgT0lEIGFuZAorICogd2hlbiB3ZSBhc2sgdGhlIHN5c2NhY2hlIGZv ciBpdHMgbmFtZS4gIEhvbGRpbmcgQWNjZXNzU2hhcmVMb2NrIG9uIGEKKyAqIGRlcGVuZGVudCBy ZWxhdGlvbiBtYWtlcyB0aGlzIHJhY2UgdmFuaXNoaW5nbHkgdW5saWtlbHkgaW4gcHJhY3RpY2Us IGJ1dAorICogd2Ugc3RpbGwgZGVmZW5kIGFnYWluc3QgaXQgYmVjYXVzZSB0aGUgYWx0ZXJuYXRp dmUgaXMgYSBTSUdTRUdWLgorICoKKyAqIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgcGZyZWUo KWluZyB0aGUgcmVzdWx0LgorICovCitzdGF0aWMgY2hhciAqCitsb29rdXBfcmVsbmFtZV9mb3Jf ZW1pdChPaWQgcmVsaWQsIGJvb2wgc2NoZW1hX3F1YWxpZmllZCwgT2lkIGJhc2VfbmFtZXNwYWNl KQoreworCUhlYXBUdXBsZQl0cDsKKwlGb3JtX3BnX2NsYXNzIHJlbHR1cDsKKwljaGFyCSAgICpu c3BuYW1lOworCWNoYXIJICAgKnJlc3VsdDsKKworCXRwID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9J RCwgT2JqZWN0SWRHZXREYXR1bShyZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0cCkp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNU KSwKKwkJCQkgZXJybXNnKCJyZWxhdGlvbiB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsIHJl bGlkKSwKKwkJCQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1cnJlbnRseSBkcm9w cGVkLiIpKSk7CisKKwlyZWx0dXAgPSAoRm9ybV9wZ19jbGFzcykgR0VUU1RSVUNUKHRwKTsKKwor CS8qCisJICogVGVtcG9yYXJ5IHJlbGF0aW9ucyBhcmUgbmV2ZXIgc2NoZW1hLXF1YWxpZmllZDog dGhlIFRFTVBPUkFSWSBrZXl3b3JkCisJICogYWxyZWFkeSBwbGFjZXMgdGhlbSBpbiBwZ190ZW1w LCBhbmQgcGdfdGVtcF9OTi5yZWxuYW1lIGNhbm5vdCBiZQorCSAqIHJlcGxheWVkIGluIGFueSBv dGhlciBzZXNzaW9uLgorCSAqLworCWlmIChpc1RlbXBOYW1lc3BhY2UocmVsdHVwLT5yZWxuYW1l c3BhY2UpKQorCXsKKwkJcmVzdWx0ID0gcHN0cmR1cChxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIo cmVsdHVwLT5yZWxuYW1lKSkpOworCQlSZWxlYXNlU3lzQ2FjaGUodHApOworCQlyZXR1cm4gcmVz dWx0OworCX0KKworCS8qIEJhcmUgbmFtZSBvbmx5IHdoZW4gY2FsbGVyIGFza2VkIGFuZCB0YXJn ZXQgaXMgaW4gdGhlIGJhc2UgbmFtZXNwYWNlLiAqLworCWlmICghc2NoZW1hX3F1YWxpZmllZCAm JiByZWx0dXAtPnJlbG5hbWVzcGFjZSA9PSBiYXNlX25hbWVzcGFjZSkKKwl7CisJCXJlc3VsdCA9 IHBzdHJkdXAocXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKHJlbHR1cC0+cmVsbmFtZSkpKTsKKwkJ UmVsZWFzZVN5c0NhY2hlKHRwKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwluc3BuYW1lID0g Z2V0X25hbWVzcGFjZV9uYW1lKHJlbHR1cC0+cmVsbmFtZXNwYWNlKTsKKwlpZiAobnNwbmFtZSA9 PSBOVUxMKQorCXsKKwkJT2lkCQkJbnNwb2lkID0gcmVsdHVwLT5yZWxuYW1lc3BhY2U7CisKKwkJ UmVsZWFzZVN5c0NhY2hlKHRwKTsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJD T0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCSBlcnJtc2coInNjaGVtYSB3aXRoIE9JRCAldSBk b2VzIG5vdCBleGlzdCIsIG5zcG9pZCksCisJCQkJIGVycmRldGFpbCgiSXQgbWF5IGhhdmUgYmVl biBjb25jdXJyZW50bHkgZHJvcHBlZC4iKSkpOworCX0KKworCXJlc3VsdCA9IHF1b3RlX3F1YWxp ZmllZF9pZGVudGlmaWVyKG5zcG5hbWUsIE5hbWVTdHIocmVsdHVwLT5yZWxuYW1lKSk7CisKKwlw ZnJlZShuc3BuYW1lKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHApOworCisJcmV0dXJuIHJlc3VsdDsK K30KKworLyoKKyAqIGNvbGxlY3RfbG9jYWxfbm90X251bGwKKyAqCQlTY2FuIHBnX2NvbnN0cmFp bnQgb25jZSBmb3IgbG9jYWxseS1kZWNsYXJlZCBOT1QgTlVMTCBjb25zdHJhaW50cworICoJCW9u IHJlbCwgcmV0dXJuaW5nIGEgcGFsbG9jJ2QgYXJyYXkgaW5kZXhlZCBieSBhdHRudW0gKDEuLm5h dHRzKS4KKyAqCisgKiBFbnRyaWVzIHdpdGggY29ub2lkPT1JbnZhbGlkT2lkIG1lYW4gIm5vIGxv Y2FsIE5PVCBOVUxMIHJvdyBmb3IgdGhpcworICogY29sdW1uIi4gIFdoZW4gdGhlIGNvbnN0cmFp bnQgbmFtZSBkb2VzIG5vdCBtYXRjaCB0aGUgYXV0by1nZW5lcmF0ZWQKKyAqIHBhdHRlcm4gIjx0 YWJsZW5hbWU+Xzxjb2x1bW5uYW1lPl9ub3RfbnVsbCIsIHRoZSBjb25zdHJhaW50IE9JRCBpcwor ICogYXBwZW5kZWQgdG8gKnNraXBfb2lkcyBzbyB0aGUgcG9zdC1DUkVBVEUgY29uc3RyYWludCBs b29wIGNhbiBhdm9pZAorICogcmUtZW1pdHRpbmcgaXQgYXMgQUxURVIgVEFCTEUgLi4uIEFERCBD T05TVFJBSU5UIC0gdGhlIGNvbHVtbi1lbWl0CisgKiBwYXNzIHdpbGwgcHJvZHVjZSBpdCBpbmxp bmUgYXMgIkNPTlNUUkFJTlQgbmFtZSBOT1QgTlVMTCIgaW5zdGVhZC4KKyAqLworc3RhdGljIExv Y2FsTm90TnVsbEVudHJ5ICoKK2NvbGxlY3RfbG9jYWxfbm90X251bGwoUmVsYXRpb24gcmVsLCBM aXN0ICoqc2tpcF9vaWRzKQoreworCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNj cihyZWwpOworCWludAkJCW5hdHRzID0gdHVwZGVzYy0+bmF0dHM7CisJTG9jYWxOb3ROdWxsRW50 cnkgKmVudHJpZXM7CisJY29uc3QgY2hhciAqcmVsbmFtZSA9IFJlbGF0aW9uR2V0UmVsYXRpb25O YW1lKHJlbCk7CisJUmVsYXRpb24JY29uUmVsOworCVN5c1NjYW5EZXNjIGNvblNjYW47CisJU2Nh bktleURhdGEgY29uS2V5OworCUhlYXBUdXBsZQljb25UdXA7CisKKwllbnRyaWVzID0gKExvY2Fs Tm90TnVsbEVudHJ5ICopIHBhbGxvYzAoc2l6ZW9mKExvY2FsTm90TnVsbEVudHJ5KSAqCisJCQkJ CQkJCQkJCShuYXR0cyArIDEpKTsKKworCWNvblJlbCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJl bGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJU2NhbktleUluaXQoJmNvbktleSwKKwkJCQlB bnVtX3BnX2NvbnN0cmFpbnRfY29ucmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBG X09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25HZXRSZWxpZChyZWwpKSk7CisJ Y29uU2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxpZFR5cGlk TmFtZUluZGV4SWQsCisJCQkJCQkJCSB0cnVlLCBOVUxMLCAxLCAmY29uS2V5KTsKKworCXdoaWxl IChIZWFwVHVwbGVJc1ZhbGlkKGNvblR1cCA9IHN5c3RhYmxlX2dldG5leHQoY29uU2NhbikpKQor CXsKKwkJRm9ybV9wZ19jb25zdHJhaW50IGNvbiA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNU UlVDVChjb25UdXApOworCQlEYXR1bQkJY29ua2V5RGF0OworCQlib29sCQljb25rZXlOdWxsOwor CQlBcnJheVR5cGUgICpjb25rZXlBcnI7CisJCWludDE2CSAgICpjb25rZXlWYWxzOworCQlpbnQJ CQlhdHRudW07CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dDsKKwkJY2hhcgkgICAqYXV0b25hbWU7 CisKKwkJaWYgKGNvbi0+Y29udHlwZSAhPSBDT05TVFJBSU5UX05PVE5VTEwpCisJCQljb250aW51 ZTsKKworCQljb25rZXlEYXQgPSBoZWFwX2dldGF0dHIoY29uVHVwLCBBbnVtX3BnX2NvbnN0cmFp bnRfY29ua2V5LAorCQkJCQkJCQkgUmVsYXRpb25HZXREZXNjcihjb25SZWwpLCAmY29ua2V5TnVs bCk7CisJCWlmIChjb25rZXlOdWxsKQorCQkJY29udGludWU7CisJCWNvbmtleUFyciA9IERhdHVt R2V0QXJyYXlUeXBlUChjb25rZXlEYXQpOworCisJCS8qCisJCSAqIERlZmVuZCBhZ2FpbnN0IGEg bWFsZm9ybWVkIGNvbmtleTogYSBOT1QgTlVMTCBjb25zdHJhaW50IGlzIGFsd2F5cworCQkgKiBh IHNpbmdsZS1jb2x1bW4gMS1EIGludDIgYXJyYXksIGJ1dCBhIGNvcnJ1cHRlZCBjYXRhbG9nIG9y IGEgZnV0dXJlCisJCSAqIHBhdGNoIHRoYXQgc3RvcmVzIHdpZGVyIGNvbmtleXMgbXVzdG4ndCB0 cmlwIHVzIGludG8gcmVhZGluZyBwYXN0CisJCSAqIHRoZSBhcnJheSBoZWFkZXIuCisJCSAqLwor CQlpZiAoQVJSX05ESU0oY29ua2V5QXJyKSAhPSAxIHx8CisJCQlBUlJfRElNUyhjb25rZXlBcnIp WzBdIDwgMSB8fAorCQkJQVJSX0hBU05VTEwoY29ua2V5QXJyKSB8fAorCQkJQVJSX0VMRU1UWVBF KGNvbmtleUFycikgIT0gSU5UMk9JRCkKKwkJCWNvbnRpbnVlOworCisJCWNvbmtleVZhbHMgPSAo aW50MTYgKikgQVJSX0RBVEFfUFRSKGNvbmtleUFycik7CisJCWF0dG51bSA9IGNvbmtleVZhbHNb MF07CisJCWlmIChhdHRudW0gPCAxIHx8IGF0dG51bSA+IG5hdHRzKQorCQkJY29udGludWU7CisK KwkJLyoKKwkJICogSW5oZXJpdGVkLW9ubHkgY29uc3RyYWludDogcmVjb3JkIHRoZSBmYWN0IHNv IGNvbHVtbi1lbWl0IGhlbHBlcnMKKwkJICogY2FuIHN1cHByZXNzIGlubGluZSBOT1QgTlVMTCAo dGhlIHBhcmVudCdzIElOSEVSSVRTIGNsYXVzZSBhbHJlYWR5CisJCSAqIHByb3BhZ2F0ZXMgaXQ7 IHJlLWVtaXR0aW5nIGl0IHdvdWxkIGZsaXAgY29uaXNsb2NhbCB0byB0cnVlIG9uCisJCSAqIHJl cGxheSkuCisJCSAqLworCQlpZiAoIWNvbi0+Y29uaXNsb2NhbCkKKwkJeworCQkJZW50cmllc1th dHRudW1dLmluaGVyaXRlZF9ub3RudWxsID0gdHJ1ZTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJ YXR0ID0gVHVwbGVEZXNjQXR0cih0dXBkZXNjLCBhdHRudW0gLSAxKTsKKwkJYXV0b25hbWUgPSBt YWtlT2JqZWN0TmFtZShyZWxuYW1lLCBOYW1lU3RyKGF0dC0+YXR0bmFtZSksICJub3RfbnVsbCIp OworCisJCWVudHJpZXNbYXR0bnVtXS5jb25vaWQgPSBjb24tPm9pZDsKKwkJZW50cmllc1thdHRu dW1dLm5hbWUgPSBwc3RyZHVwKE5hbWVTdHIoY29uLT5jb25uYW1lKSk7CisJCWVudHJpZXNbYXR0 bnVtXS5pc19hdXRvID0gKHN0cmNtcChOYW1lU3RyKGNvbi0+Y29ubmFtZSksIGF1dG9uYW1lKSA9 PSAwKTsKKwkJZW50cmllc1thdHRudW1dLm5vX2luaGVyaXQgPSBjb24tPmNvbm5vaW5oZXJpdDsK KwkJcGZyZWUoYXV0b25hbWUpOworCisJCS8qCisJCSAqIElubGluZSBlbWlzc2lvbiBvZiBOT1Qg TlVMTCBvbmx5IGhhcHBlbnMgZm9yIGNvbHVtbnMgdGhhdCB0aGUKKwkJICogY29sdW1uIGxpc3Qg YWN0dWFsbHkgZW1pdHMsIGkuZS4gYXR0aXNsb2NhbCBjb2x1bW5zLiAgRm9yIHRob3NlCisJCSAq IHRoZSBpbmxpbmUgcGFzcyBhbHJlYWR5IG1hdGVyaWFsaXplcyB0aGUgY29uc3RyYWludCAoZWl0 aGVyIGFzCisJCSAqICJDT05TVFJBSU5UIG5hbWUgTk9UIE5VTEwiIGZvciB1c2VyLW5hbWVkLCBv ciBhcyBhIGJhcmUKKwkJICogIk5PVCBOVUxMIiB0aGF0IFBHIHJlLWNyZWF0ZXMgdW5kZXIgdGhl IGF1dG8tbmFtZSBwYXR0ZXJuKSwgc28KKwkJICogdGhlIHBvc3QtQ1JFQVRFIGNvbnN0cmFpbnQg bG9vcCBtdXN0IG5vdCBlbWl0IGEgc2Vjb25kCisJCSAqIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09O U1RSQUlOVCBmb3IgdGhlIHNhbWUgY29sdW1uIC0gUEcgb25seQorCQkgKiBhbGxvd3Mgb25lIE5P VCBOVUxMIGNvbnN0cmFpbnQgcGVyIGNvbHVtbiBhbmQgcmVqZWN0cyB0aGUKKwkJICogc2Vjb25k IHdpdGggYSBuYW1lIG1pc21hdGNoIHdoZW5ldmVyIHRoZSBzYXZlZCBhdXRvLW5hbWUgbm8KKwkJ ICogbG9uZ2VyIG1hdGNoZXMgdGhlIGN1cnJlbnQgdGFibGUgbmFtZSAoZS5nLiBhZnRlciBhIHJl bmFtZSwgb3IKKwkJICogd2hlbiBDUkVBVEUgVEFCTEUgdW5pcXVpZmllcyB0aGUgYXV0by1uYW1l IHRvIGRvZGdlIGEgc2VxdWVuY2UKKwkJICogY29sbGlzaW9uKS4gIEZvciBhIGxvY2FsbHktZGVj bGFyZWQgTk9UIE5VTEwgc2l0dGluZyBvbiBhbgorCQkgKiBpbmhlcml0ZWQgKG5vbi1sb2NhbCkg Y29sdW1uIHRoZSBpbmxpbmUgcGF0aCBuZXZlciBmaXJlcywgc28KKwkJICogbGVhdmUgdGhlIE9J RCBvdXQgb2Ygc2tpcF9vaWRzIGFuZCBsZXQgdGhlIHBvc3QtQ1JFQVRFIGxvb3AKKwkJICogZW1p dCBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQuCisJCSAqLworCQlpZiAoYXR0LT5hdHRp c2xvY2FsICYmIHNraXBfb2lkcyAhPSBOVUxMKQorCQkJKnNraXBfb2lkcyA9IGxhcHBlbmRfb2lk KCpza2lwX29pZHMsIGNvbi0+b2lkKTsKKwl9CisJc3lzdGFibGVfZW5kc2Nhbihjb25TY2FuKTsK Kwl0YWJsZV9jbG9zZShjb25SZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gZW50cmll czsKK30KKworLyoKKyAqIGZpbmRfYXR0cmRlZl90ZXh0CisgKgkJUmV0dXJuIHRoZSBkZXBhcnNl ZCBERUZBVUxUL0dFTkVSQVRFRCBleHByZXNzaW9uIGZvciBhdHRudW0gb24gcmVsLAorICoJCW9y IE5VTEwgaWYgbm8gZW50cnkgZXhpc3RzIGluIFR1cGxlQ29uc3RyLT5kZWZ2YWwuCisgKgorICog VGhlIGNhbGxlciBwYXNzZXMgYSBMaXN0ICoqIHNvIHRoYXQgdGhlIGRlcGFyc2UgY29udGV4dCBp cyBidWlsdCBsYXppbHkKKyAqIGFuZCByZXVzZWQgYWNyb3NzIGNhbGxzIChkZXBhcnNlX2NvbnRl eHRfZm9yIGlzIG5vdCBjaGVhcCkuICBSZXR1cm5lZAorICogc3RyaW5nIGlzIHBhbGxvYydkIGlu IHRoZSBjdXJyZW50IG1lbW9yeSBjb250ZXh0OyBjYWxsZXIgcGZyZWUncyBpdC4KKyAqLworc3Rh dGljIGNoYXIgKgorZmluZF9hdHRyZGVmX3RleHQoUmVsYXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0 dG51bSwgTGlzdCAqKmRwY29udGV4dCkKK3sKKwlUdXBsZUNvbnN0ciAqY29uc3RyID0gUmVsYXRp b25HZXREZXNjcihyZWwpLT5jb25zdHI7CisKKwlpZiAoY29uc3RyID09IE5VTEwpCisJCXJldHVy biBOVUxMOworCisJZm9yIChpbnQgaiA9IDA7IGogPCBjb25zdHItPm51bV9kZWZ2YWw7IGorKykK Kwl7CisJCWlmIChjb25zdHItPmRlZnZhbFtqXS5hZG51bSAhPSBhdHRudW0pCisJCQljb250aW51 ZTsKKworCQlpZiAoKmRwY29udGV4dCA9PSBOSUwpCisJCQkqZHBjb250ZXh0ID0gZGVwYXJzZV9j b250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJCQkJCQkJCQkgUmVs YXRpb25HZXRSZWxpZChyZWwpKTsKKworCQlyZXR1cm4gZGVwYXJzZV9leHByZXNzaW9uKHN0cmlu Z1RvTm9kZShjb25zdHItPmRlZnZhbFtqXS5hZGJpbiksCisJCQkJCQkJCSAgKmRwY29udGV4dCwg ZmFsc2UsIGZhbHNlKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBhcHBlbmRfaW5s aW5lX2NoZWNrX2NvbnN0cmFpbnRzCisgKgkJRW1pdCBlYWNoIGxvY2FsbHktZGVjbGFyZWQgQ0hF Q0sgY29uc3RyYWludCBvbiByZWwgYXMKKyAqCQkiQ09OU1RSQUlOVCBuYW1lIDxwZ19nZXRfY29u c3RyYWludGRlZj4iLCBzZXBhcmF0ZWQgYnkgJywnIGZyb20gYW55CisgKgkJcHJldmlvdXNseS1l bWl0dGVkIGNvbHVtbiBvciBjb25zdHJhaW50LgorICoKKyAqICpmaXJzdCB0cmFja3Mgd2hldGhl ciBhbnl0aGluZyBoYXMgYmVlbiBlbWl0dGVkIG9uIHRoaXMgbGlzdCB5ZXQsIHNvIHRoZQorICog Y2FsbGVyIGNhbiBjaGFpbiBjb2x1bW4gZW1pc3Npb24gYW5kIGNvbnN0cmFpbnQgZW1pc3Npb24g dGhyb3VnaCB0aGUgc2FtZQorICogYnVmZmVyLiAgSW5oZXJpdGVkIENIRUNLIGNvbnN0cmFpbnRz ICghY29uaXNsb2NhbCkgY29tZSBmcm9tIHRoZSBwYXJlbnQncworICogRERMIGFuZCBhcmVuJ3Qg cmVwZWF0ZWQgaGVyZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9pbmxpbmVfY2hlY2tfY29u c3RyYWludHMoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwgYm9vbCBwcmV0dHksCisJCQkJ CQkJCWJvb2wgKmZpcnN0KQoreworCVJlbGF0aW9uCWNvblJlbDsKKwlTeXNTY2FuRGVzYyBjb25T Y2FuOworCVNjYW5LZXlEYXRhIGNvbktleTsKKwlIZWFwVHVwbGUJY29uVHVwOworCisJY29uUmVs ID0gdGFibGVfb3BlbihDb25zdHJhaW50UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlT Y2FuS2V5SW5pdCgmY29uS2V5LAorCQkJCUFudW1fcGdfY29uc3RyYWludF9jb25yZWxpZCwKKwkJ CQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShS ZWxhdGlvbkdldFJlbGlkKHJlbCkpKTsKKwljb25TY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNv blJlbCwgQ29uc3RyYWludFJlbGlkVHlwaWROYW1lSW5kZXhJZCwKKwkJCQkJCQkJIHRydWUsIE5V TEwsIDEsICZjb25LZXkpOworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQoY29uVHVwID0gc3lz dGFibGVfZ2V0bmV4dChjb25TY2FuKSkpCisJeworCQlGb3JtX3BnX2NvbnN0cmFpbnQgY29uID0g KEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNUKGNvblR1cCk7CisJCURhdHVtCQlkZWZEYXR1 bTsKKwkJY2hhcgkgICAqZGVmYm9keTsKKworCQlpZiAoY29uLT5jb250eXBlICE9IENPTlNUUkFJ TlRfQ0hFQ0spCisJCQljb250aW51ZTsKKwkJaWYgKCFjb24tPmNvbmlzbG9jYWwpCisJCQljb250 aW51ZTsKKworCQlpZiAoISpmaXJzdCkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJywn KTsKKwkJaWYgKHByZXR0eSkKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiXG4gICAg Iik7CisJCWVsc2UgaWYgKCEqZmlyc3QpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcg Jyk7CisJCSpmaXJzdCA9IGZhbHNlOworCisJCWRlZkRhdHVtID0gT2lkRnVuY3Rpb25DYWxsMShG X1BHX0dFVF9DT05TVFJBSU5UREVGX09JRCwKKwkJCQkJCQkJCU9iamVjdElkR2V0RGF0dW0oY29u LT5vaWQpKTsKKwkJZGVmYm9keSA9IFRleHREYXR1bUdldENTdHJpbmcoZGVmRGF0dW0pOworCQlh cHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIkNPTlNUUkFJTlQgJXMgJXMiLAorCQkJCQkJIHF1b3RlX2lk ZW50aWZpZXIoTmFtZVN0cihjb24tPmNvbm5hbWUpKSwKKwkJCQkJCSBkZWZib2R5KTsKKwkJcGZy ZWUoZGVmYm9keSk7CisJfQorCXN5c3RhYmxlX2VuZHNjYW4oY29uU2Nhbik7CisJdGFibGVfY2xv c2UoY29uUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworfQorCisvKgorICogYXBwZW5kX2NvbHVtbl9k ZWZzCisgKgkJQXBwZW5kIHRoZSBjb21tYS1zZXBhcmF0ZWQgY29sdW1uIGRlZmluaXRpb24gbGlz dCBmb3IgYSB0YWJsZS4KKyAqCisgKiBFbWl0cyBlYWNoIG5vbi1kcm9wcGVkLCBsb2NhbGx5LWRl Y2xhcmVkIGNvbHVtbiBhcworICoJCW5hbWUgdHlwZSBbQ09MTEFURSB4XSBbU1RPUkFHRSBzXSBb Q09NUFJFU1NJT04gY10KKyAqCQlbR0VORVJBVEVEIC4uLiB8IERFRkFVTFQgZV0gW05PVCBOVUxM XQorICogZm9sbG93ZWQgYnkgYW55IGxvY2FsbHktZGVjbGFyZWQgaW5saW5lIENIRUNLIGNvbnN0 cmFpbnRzLiAgT3B0aW9uYWwKKyAqIGNsYXVzZXMgYXJlIG9taXR0ZWQgd2hlbiB0aGVpciB2YWx1 ZSBtYXRjaGVzIHdoYXQgdGhlIHN5c3RlbSB3b3VsZAorICogcmVhcHBseSBvbiByb3VuZC10cmlw IChlLmcuIHR5cGUtZGVmYXVsdCBDT0xMQVRFLCB0eXBlLWRlZmF1bHQgU1RPUkFHRSkuCisgKi8K K3N0YXRpYyB2b2lkCithcHBlbmRfY29sdW1uX2RlZnMoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9u IHJlbCwgYm9vbCBwcmV0dHksCisJCQkJICAgYm9vbCBpbmNsdWRlX2NoZWNrLAorCQkJCSAgIGJv b2wgc2NoZW1hX3F1YWxpZmllZCwKKwkJCQkgICBMb2NhbE5vdE51bGxFbnRyeSAqbm5fZW50cmll cykKK3sKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKwlPaWQJ CQliYXNlX25hbWVzcGFjZSA9IFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJlbCk7CisJTGlzdAkgICAq ZHBjb250ZXh0ID0gTklMOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWZvciAoaW50IGkgPSAw OyBpIDwgdHVwZGVzYy0+bmF0dHM7IGkrKykKKwl7CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9 IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaSk7CisJCWNoYXIJICAgKnR5cHN0cjsKKworCQlpZiAo YXR0LT5hdHRpc2Ryb3BwZWQpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBDb2x1bW5zIGlu aGVyaXRlZCBmcm9tIGEgcGFyZW50IGFyZSBjb3ZlcmVkIGJ5IHRoZSBJTkhFUklUUyBjbGF1c2Us CisJCSAqIG5vdCB0aGUgY29sdW1uIGxpc3QsIHVubGVzcyB0aGUgY2hpbGQgcmVkZWNsYXJlZCB0 aGVtIGxvY2FsbHkKKwkJICogKGF0dGlzbG9jYWw9dHJ1ZSkuCisJCSAqLworCQlpZiAoIWF0dC0+ YXR0aXNsb2NhbCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghZmlyc3QpCisJCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcihidWYsICcsJyk7CisJCWlmIChwcmV0dHkpCisJCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKGJ1ZiwgIlxuICAgICIpOworCQllbHNlIGlmICghZmlyc3QpCisJCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcihidWYsICcgJyk7CisJCWZpcnN0ID0gZmFsc2U7CisKKwkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZyhidWYsIHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihhdHQtPmF0dG5hbWUpKSk7 CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyAnKTsKKworCQl0eXBzdHIgPSBmb3JtYXRf dHlwZV93aXRoX3R5cGVtb2QoYXR0LT5hdHR0eXBpZCwgYXR0LT5hdHR0eXBtb2QpOworCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgdHlwc3RyKTsKKwkJcGZyZWUodHlwc3RyKTsKKworCQkv KiBDT0xMQVRFIGNsYXVzZSwgb25seSBpZiBpdCBkaWZmZXJzIGZyb20gdGhlIHR5cGUncyBkZWZh dWx0LiAqLworCQlpZiAoT2lkSXNWYWxpZChhdHQtPmF0dGNvbGxhdGlvbikgJiYKKwkJCWF0dC0+ YXR0Y29sbGF0aW9uICE9IGdldF90eXBjb2xsYXRpb24oYXR0LT5hdHR0eXBpZCkpCisJCQlhcHBl bmRTdHJpbmdJbmZvKGJ1ZiwgIiBDT0xMQVRFICVzIiwKKwkJCQkJCQkgZ2VuZXJhdGVfY29sbGF0 aW9uX25hbWUoYXR0LT5hdHRjb2xsYXRpb24pKTsKKworCQkvKiBTVE9SQUdFIGNsYXVzZSwgb25s eSBpZiBpdCBkaWZmZXJzIGZyb20gdGhlIHR5cGUncyBkZWZhdWx0LiAqLworCQlpZiAoYXR0LT5h dHRzdG9yYWdlICE9IGdldF90eXBzdG9yYWdlKGF0dC0+YXR0dHlwaWQpKQorCQkJYXBwZW5kU3Ry aW5nSW5mbyhidWYsICIgU1RPUkFHRSAlcyIsIHN0b3JhZ2VfbmFtZShhdHQtPmF0dHN0b3JhZ2Up KTsKKworCQkvKiBDT01QUkVTU0lPTiBjbGF1c2UsIG9ubHkgaWYgZXhwbGljaXRseSBzZXQgb24g dGhlIGNvbHVtbi4gKi8KKwkJaWYgKENvbXByZXNzaW9uTWV0aG9kSXNWYWxpZChhdHQtPmF0dGNv bXByZXNzaW9uKSkKKwkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIENPTVBSRVNTSU9OICVzIiwK KwkJCQkJCQkgR2V0Q29tcHJlc3Npb25NZXRob2ROYW1lKGF0dC0+YXR0Y29tcHJlc3Npb24pKTsK KworCQkvKgorCQkgKiBMb29rIHVwIHRoZSBkZWZhdWx0L2dlbmVyYXRlZCBleHByZXNzaW9uIHRl eHQgdXAgZnJvbnQ7IGdlbmVyYXRlZAorCQkgKiBjb2x1bW5zIGhhdmUgYXR0aGFzZGVmPXRydWUg d2l0aCBhbiBlbnRyeSBpbiBwZ19hdHRyZGVmIGp1c3QgbGlrZQorCQkgKiByZWd1bGFyIGRlZmF1 bHRzLgorCQkgKi8KKwkJeworCQkJY2hhcgkgICAqZGVmZXhwciA9IE5VTEw7CisKKwkJCWlmIChh dHQtPmF0dGhhc2RlZikKKwkJCQlkZWZleHByID0gZmluZF9hdHRyZGVmX3RleHQocmVsLCBhdHQt PmF0dG51bSwgJmRwY29udGV4dCk7CisKKwkJCS8qIEdFTkVSQVRFRCAvIElERU5USVRZIC8gREVG QVVMVCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAqLworCQkJaWYgKGF0dC0+YXR0Z2VuZXJhdGVk ID09IEFUVFJJQlVURV9HRU5FUkFURURfU1RPUkVEICYmIGRlZmV4cHIpCisJCQkJYXBwZW5kU3Ry aW5nSW5mbyhidWYsICIgR0VORVJBVEVEIEFMV0FZUyBBUyAoJXMpIFNUT1JFRCIsIGRlZmV4cHIp OworCQkJZWxzZSBpZiAoYXR0LT5hdHRnZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9W SVJUVUFMICYmIGRlZmV4cHIpCisJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgR0VORVJBVEVE IEFMV0FZUyBBUyAoJXMpIFZJUlRVQUwiLCBkZWZleHByKTsKKwkJCWVsc2UgaWYgKGF0dC0+YXR0 aWRlbnRpdHkgPT0gQVRUUklCVVRFX0lERU5USVRZX0FMV0FZUyB8fAorCQkJCQkgYXR0LT5hdHRp ZGVudGl0eSA9PSBBVFRSSUJVVEVfSURFTlRJVFlfQllfREVGQVVMVCkKKwkJCXsKKwkJCQljb25z dCBjaGFyICppZGtpbmQgPQorCQkJCQkoYXR0LT5hdHRpZGVudGl0eSA9PSBBVFRSSUJVVEVfSURF TlRJVFlfQUxXQVlTKQorCQkJCQk/ICJBTFdBWVMiIDogIkJZIERFRkFVTFQiOworCQkJCU9pZAkJ CXNlcWlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShyZWwsIGF0dC0+YXR0bnVtLCB0cnVlKTsKKwor CQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIEdFTkVSQVRFRCAlcyBBUyBJREVOVElUWSIsIGlk a2luZCk7CisKKwkJCQkvKgorCQkJCSAqIEVtaXQgb25seSB0aGUgc2VxdWVuY2Ugb3B0aW9ucyB0 aGF0IGRpZmZlciBmcm9tIHRoZWlyCisJCQkJICogZGVmYXVsdHMgLSBtaXJyb3JpbmcgcGdfZ2V0 X2RhdGFiYXNlX2RkbCdzIHBhdHRlcm4gb2YKKwkJCQkgKiBvbWl0dGluZyB2YWx1ZXMgdGhhdCB0 aGUgc3lzdGVtIHdvdWxkIHJlYXBwbHkgb24gaXRzIG93bi4KKwkJCQkgKi8KKwkJCQlpZiAoT2lk SXNWYWxpZChzZXFpZCkpCisJCQkJeworCQkJCQlIZWFwVHVwbGUJc2VxVHVwID0gU2VhcmNoU3lz Q2FjaGUxKFNFUVJFTElELAorCQkJCQkJCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShzZXFpZCkp OworCisJCQkJCWlmIChIZWFwVHVwbGVJc1ZhbGlkKHNlcVR1cCkpCisJCQkJCXsKKwkJCQkJCUZv cm1fcGdfc2VxdWVuY2Ugc2VxID0gKEZvcm1fcGdfc2VxdWVuY2UpIEdFVFNUUlVDVChzZXFUdXAp OworCQkJCQkJU3RyaW5nSW5mb0RhdGEgb3B0czsKKwkJCQkJCWJvb2wJCWZpcnN0X29wdCA9IHRy dWU7CisJCQkJCQlpbnQ2NAkJZGVmX21pbiwKKwkJCQkJCQkJCWRlZl9tYXgsCisJCQkJCQkJCQlk ZWZfc3RhcnQ7CisJCQkJCQlpbnQ2NAkJdHlwX21pbiwKKwkJCQkJCQkJCXR5cF9tYXg7CisKKwkJ CQkJCS8qCisJCQkJCQkgKiBQZXItdHlwZSBib3VuZHMgZm9yIHRoZSBzZXF1ZW5jZSdzIHVuZGVy bHlpbmcKKwkJCQkJCSAqIGludGVnZXIgdHlwZS4gIERlZmF1bHRzIHRvIGludDggaWYgdGhlIGNv bHVtbiB0eXBlCisJCQkJCQkgKiBpcyBzb21ldGhpbmcgZWxzZSAoc2hvdWxkbid0IGhhcHBlbiBm b3IgSURFTlRJVFksCisJCQkJCQkgKiBidXQgYmUgZGVmZW5zaXZlKS4KKwkJCQkJCSAqLworCQkJ CQkJc3dpdGNoIChhdHQtPmF0dHR5cGlkKQorCQkJCQkJeworCQkJCQkJCWNhc2UgSU5UMk9JRDoK KwkJCQkJCQkJdHlwX21pbiA9IFBHX0lOVDE2X01JTjsKKwkJCQkJCQkJdHlwX21heCA9IFBHX0lO VDE2X01BWDsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSBJTlQ0T0lEOgorCQkJCQkJCQl0 eXBfbWluID0gUEdfSU5UMzJfTUlOOworCQkJCQkJCQl0eXBfbWF4ID0gUEdfSU5UMzJfTUFYOwor CQkJCQkJCQlicmVhazsKKwkJCQkJCQlkZWZhdWx0OgorCQkJCQkJCQl0eXBfbWluID0gUEdfSU5U NjRfTUlOOworCQkJCQkJCQl0eXBfbWF4ID0gUEdfSU5UNjRfTUFYOworCQkJCQkJCQlicmVhazsK KwkJCQkJCX0KKworCQkJCQkJaWYgKHNlcS0+c2VxaW5jcmVtZW50ID4gMCkKKwkJCQkJCXsKKwkJ CQkJCQlkZWZfbWluID0gMTsKKwkJCQkJCQlkZWZfbWF4ID0gdHlwX21heDsKKwkJCQkJCQlkZWZf c3RhcnQgPSBkZWZfbWluOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCWRl Zl9taW4gPSB0eXBfbWluOworCQkJCQkJCWRlZl9tYXggPSAtMTsKKwkJCQkJCQlkZWZfc3RhcnQg PSBkZWZfbWF4OworCQkJCQkJfQorCisJCQkJCQlpbml0U3RyaW5nSW5mbygmb3B0cyk7CisKKwkJ CQkJCS8qCisJCQkJCQkgKiBTRVFVRU5DRSBOQU1FIC0gb21pdCB3aGVuIGl0IG1hdGNoZXMgdGhl IGltcGxpY2l0CisJCQkJCQkgKiAiPHRhYmxlbmFtZT5fPGNvbHVtbm5hbWU+X3NlcSIgcGF0dGVy biBpbiB0aGUgc2FtZQorCQkJCQkJICogc2NoZW1hLCBzaW5jZSBDUkVBVEUgVEFCTEUgd2lsbCBy ZWdlbmVyYXRlIHRoYXQKKwkJCQkJCSAqIGV4YWN0IG5hbWUuICBUaGUgc2VxdWVuY2UgaXMgYW4g SU5URVJOQUwgZGVwZW5kZW5jeQorCQkJCQkJICogb2YgdGhlIGNvbHVtbiwgc28gdGhlIGxvY2sg d2UgaG9sZCBvbiB0aGUgdGFibGUKKwkJCQkJCSAqIGFsc28gcGlucyBpdCwgYnV0IHRoZSBsb29r dXAgaGVscGVyIHN0aWxsIGRlZmVuZHMKKwkJCQkJCSAqIGFnYWluc3QgYSBtaXNzaW5nIHBnX2Ns YXNzIHJvdy4KKwkJCQkJCSAqLworCQkJCQkJeworCQkJCQkJCUhlYXBUdXBsZQlzZXFDbGFzc1R1 cDsKKwkJCQkJCQlGb3JtX3BnX2NsYXNzIHNlcUNsYXNzOworCQkJCQkJCWNoYXIJICAgKmF1dG9u YW1lOworCisJCQkJCQkJc2VxQ2xhc3NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUkVMT0lELAorCQkJ CQkJCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oc2VxaWQpKTsKKwkJCQkJCQlpZiAoIUhlYXBU dXBsZUlzVmFsaWQoc2VxQ2xhc3NUdXApKQorCQkJCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJ CQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX09CSkVDVCksCisJCQkJCQkJCQkJIGVycm1z ZygiaWRlbnRpdHkgc2VxdWVuY2Ugd2l0aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLAorCQkJCQkJ CQkJCQkJc2VxaWQpLAorCQkJCQkJCQkJCSBlcnJkZXRhaWwoIkl0IG1heSBoYXZlIGJlZW4gY29u Y3VycmVudGx5IGRyb3BwZWQuIikpKTsKKwkJCQkJCQlzZXFDbGFzcyA9IChGb3JtX3BnX2NsYXNz KSBHRVRTVFJVQ1Qoc2VxQ2xhc3NUdXApOworCisJCQkJCQkJYXV0b25hbWUgPSBtYWtlT2JqZWN0 TmFtZShSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJCQkJCQkJCQkJCSAgTmFtZVN0 cihhdHQtPmF0dG5hbWUpLCAic2VxIik7CisJCQkJCQkJaWYgKHNlcUNsYXNzLT5yZWxuYW1lc3Bh Y2UgIT0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsKSB8fAorCQkJCQkJCQlzdHJjbXAoTmFtZVN0 cihzZXFDbGFzcy0+cmVsbmFtZSksIGF1dG9uYW1lKSAhPSAwKQorCQkJCQkJCXsKKwkJCQkJCQkJ Y2hhcgkgICAqc2VxUXVhbCA9CisJCQkJCQkJCQlsb29rdXBfcmVsbmFtZV9mb3JfZW1pdChzZXFp ZCwKKwkJCQkJCQkJCQkJCQkJCXNjaGVtYV9xdWFsaWZpZWQsCisJCQkJCQkJCQkJCQkJCQliYXNl X25hbWVzcGFjZSk7CisKKwkJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbygmb3B0cywgIiVzU0VRVUVO Q0UgTkFNRSAlcyIsCisJCQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNlcVF1YWwp OworCQkJCQkJCQlmaXJzdF9vcHQgPSBmYWxzZTsKKwkJCQkJCQkJcGZyZWUoc2VxUXVhbCk7CisJ CQkJCQkJfQorCQkJCQkJCXBmcmVlKGF1dG9uYW1lKTsKKwkJCQkJCQlSZWxlYXNlU3lzQ2FjaGUo c2VxQ2xhc3NUdXApOworCQkJCQkJfQorCisJCQkJCQlpZiAoc2VxLT5zZXFzdGFydCAhPSBkZWZf c3RhcnQpCisJCQkJCQl7CisJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbygmb3B0cywgIiVzU1RBUlQg V0lUSCAiIElOVDY0X0ZPUk1BVCwKKwkJCQkJCQkJCQkJIGZpcnN0X29wdCA/ICIiIDogIiAiLCBz ZXEtPnNlcXN0YXJ0KTsKKwkJCQkJCQlmaXJzdF9vcHQgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJ CWlmIChzZXEtPnNlcWluY3JlbWVudCAhPSAxKQorCQkJCQkJeworCQkJCQkJCWFwcGVuZFN0cmlu Z0luZm8oJm9wdHMsICIlc0lOQ1JFTUVOVCBCWSAiIElOVDY0X0ZPUk1BVCwKKwkJCQkJCQkJCQkJ IGZpcnN0X29wdCA/ICIiIDogIiAiLCBzZXEtPnNlcWluY3JlbWVudCk7CisJCQkJCQkJZmlyc3Rf b3B0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCQlpZiAoc2VxLT5zZXFtaW4gIT0gZGVmX21pbikK KwkJCQkJCXsKKwkJCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZvcHRzLCAiJXNNSU5WQUxVRSAiIElO VDY0X0ZPUk1BVCwKKwkJCQkJCQkJCQkJIGZpcnN0X29wdCA/ICIiIDogIiAiLCBzZXEtPnNlcW1p bik7CisJCQkJCQkJZmlyc3Rfb3B0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCQlpZiAoc2VxLT5z ZXFtYXggIT0gZGVmX21heCkKKwkJCQkJCXsKKwkJCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZvcHRz LCAiJXNNQVhWQUxVRSAiIElOVDY0X0ZPUk1BVCwKKwkJCQkJCQkJCQkJIGZpcnN0X29wdCA/ICIi IDogIiAiLCBzZXEtPnNlcW1heCk7CisJCQkJCQkJZmlyc3Rfb3B0ID0gZmFsc2U7CisJCQkJCQl9 CisJCQkJCQlpZiAoc2VxLT5zZXFjYWNoZSAhPSAxKQorCQkJCQkJeworCQkJCQkJCWFwcGVuZFN0 cmluZ0luZm8oJm9wdHMsICIlc0NBQ0hFICIgSU5UNjRfRk9STUFULAorCQkJCQkJCQkJCQkgZmly c3Rfb3B0ID8gIiIgOiAiICIsIHNlcS0+c2VxY2FjaGUpOworCQkJCQkJCWZpcnN0X29wdCA9IGZh bHNlOworCQkJCQkJfQorCQkJCQkJaWYgKHNlcS0+c2VxY3ljbGUpCisJCQkJCQl7CisJCQkJCQkJ YXBwZW5kU3RyaW5nSW5mbygmb3B0cywgIiVzQ1lDTEUiLCBmaXJzdF9vcHQgPyAiIiA6ICIgIik7 CisJCQkJCQkJZmlyc3Rfb3B0ID0gZmFsc2U7CisJCQkJCQl9CisKKwkJCQkJCWlmICghZmlyc3Rf b3B0KQorCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiICglcykiLCBvcHRzLmRhdGEpOwor CisJCQkJCQlwZnJlZShvcHRzLmRhdGEpOworCQkJCQkJUmVsZWFzZVN5c0NhY2hlKHNlcVR1cCk7 CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkZWZleHByKQorCQkJCWFwcGVuZFN0 cmluZ0luZm8oYnVmLCAiIERFRkFVTFQgJXMiLCBkZWZleHByKTsKKworCQkJaWYgKGRlZmV4cHIp CisJCQkJcGZyZWUoZGVmZXhwcik7CisJCX0KKworCQlpZiAoYXR0LT5hdHRub3RudWxsKQorCQl7 CisJCQlMb2NhbE5vdE51bGxFbnRyeSAqbm4gPSAmbm5fZW50cmllc1thdHQtPmF0dG51bV07CisK KwkJCS8qCisJCQkgKiBTdXBwcmVzcyBOT1QgTlVMTCB3aGVuIHRoZSBjb25zdHJhaW50IGlzIGlu aGVyaXRlZC1vbmx5CisJCQkgKiAoY29uaXNsb2NhbD1mYWxzZSkuICBUaGUgSU5IRVJJVFMgY2xh dXNlIGFscmVhZHkgcHJvcGFnYXRlcyBpdDsKKwkJCSAqIGVtaXR0aW5nIGl0IGhlcmUgd291bGQg bWFrZSBjb25pc2xvY2FsIHRydWUgb24gcmVwbGF5LiAgV2hlbgorCQkJICogdGhlcmUgaXMgbm8g cGdfY29uc3RyYWludCByb3cgYXQgYWxsIChwcmUtUEcxOCBjYXRhbG9nIHdpdGgKKwkJCSAqIGF0 dG5vdG51bGw9dHJ1ZSksIGluaGVyaXRlZF9ub3RudWxsIGlzIGZhbHNlIHNvIHdlIGZhbGwgdGhy b3VnaAorCQkJICogYW5kIGVtaXQgcGxhaW4gTk9UIE5VTEwgYXMgYmVmb3JlLgorCQkJICovCisJ CQlpZiAoIW5uLT5pbmhlcml0ZWRfbm90bnVsbCkKKwkJCXsKKwkJCQlpZiAobm4tPm5hbWUgIT0g TlVMTCAmJiAhbm4tPmlzX2F1dG8pCisJCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIENPTlNU UkFJTlQgJXMgTk9UIE5VTEwiLAorCQkJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIobm4tPm5hbWUp KTsKKwkJCQllbHNlCisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiIE5PVCBOVUxM Iik7CisJCQkJaWYgKG5uLT5uYW1lICE9IE5VTEwgJiYgbm4tPm5vX2luaGVyaXQpCisJCQkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiIE5PIElOSEVSSVQiKTsKKwkJCX0KKwkJfQorCX0K KworCS8qCisJICogVGFibGUtbGV2ZWwgQ0hFQ0sgY29uc3RyYWludHMgLSBlbWl0dGVkIGlubGlu ZSBpbiB0aGUgQ1JFQVRFIFRBQkxFIGJvZHkKKwkgKiBzbyB0aGV5IGFwcGVhciBhbG9uZ3NpZGUg dGhlIGNvbHVtbnMgKHRoZSBwZ19kdW1wIHNoYXBlKS4gIFRoZQorCSAqIGNvbnN0cmFpbnQgbG9v cCBsYXRlciBpbiBwZ19nZXRfdGFibGVfZGRsX2ludGVybmFsIHNraXBzIENIRUNLCisJICogY29u c3RyYWludHMgdG8gYXZvaWQgZG91YmxlLWVtaXNzaW9uLgorCSAqLworCWlmIChpbmNsdWRlX2No ZWNrKQorCQlhcHBlbmRfaW5saW5lX2NoZWNrX2NvbnN0cmFpbnRzKGJ1ZiwgcmVsLCBwcmV0dHks ICZmaXJzdCk7Cit9CisKKy8qCisgKiBhcHBlbmRfdHlwZWRfY29sdW1uX292ZXJyaWRlcworICoJ CUZvciBhIHR5cGVkIHRhYmxlIChDUkVBVEUgVEFCTEUgLi4uIE9GIHR5cGVfbmFtZSksIGFwcGVu ZCB0aGUKKyAqCQlvcHRpb25hbCAiKGNvbCBXSVRIIE9QVElPTlMgLi4uLCAuLi4pIiBsaXN0IGNh cnJ5aW5nIGxvY2FsbHkKKyAqCQlhcHBsaWVkIHBlci1jb2x1bW4gb3ZlcnJpZGVzIC0gREVGQVVM VCwgTk9UIE5VTEwsIGFuZCBhbnkgbG9jYWxseQorICoJCWRlY2xhcmVkIENIRUNLIGNvbnN0cmFp bnRzLgorICoKKyAqIENvbHVtbnMgd2hvc2UgdHlwZSBpcyBmdWxseSBkaWN0YXRlZCBieSByZWxv ZnR5cGUgZW1pdCBub3RoaW5nLiAgVGhlCisgKiBwYXJlbnRoZXNpc2VkIGxpc3QgaXMgc3VwcHJl c3NlZCBlbnRpcmVseSB3aGVuIG5vIGNvbHVtbiBuZWVkcyBhbgorICogb3ZlcnJpZGUgYW5kIHRo ZXJlIGFyZSBubyBsb2NhbGx5LWRlY2xhcmVkIENIRUNLIGNvbnN0cmFpbnRzLCBtYXRjaGluZwor ICogdGhlIGNhbm9uaWNhbCAiQ1JFQVRFIFRBQkxFIHggT0YgdDsiIHNoYXBlLgorICovCitzdGF0 aWMgdm9pZAorYXBwZW5kX3R5cGVkX2NvbHVtbl9vdmVycmlkZXMoU3RyaW5nSW5mbyBidWYsIFJl bGF0aW9uIHJlbCwgYm9vbCBwcmV0dHksCisJCQkJCQkJICBib29sIGluY2x1ZGVfY2hlY2ssCisJ CQkJCQkJICBMb2NhbE5vdE51bGxFbnRyeSAqbm5fZW50cmllcykKK3sKKwlUdXBsZURlc2MJdHVw ZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKwlMaXN0CSAgICpkcGNvbnRleHQgPSBOSUw7 CisJU3RyaW5nSW5mb0RhdGEgaW5uZXI7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJaW5pdFN0 cmluZ0luZm8oJmlubmVyKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgdHVwZGVzYy0+bmF0dHM7 IGkrKykKKwl7CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIodHVwZGVz YywgaSk7CisJCWNoYXIJICAgKmRlZmV4cHIgPSBOVUxMOworCQlib29sCQloYXNfZGVmYXVsdDsK KwkJYm9vbAkJaGFzX25vdG51bGw7CisKKwkJaWYgKGF0dC0+YXR0aXNkcm9wcGVkKQorCQkJY29u dGludWU7CisKKwkJaWYgKGF0dC0+YXR0aGFzZGVmKQorCQkJZGVmZXhwciA9IGZpbmRfYXR0cmRl Zl90ZXh0KHJlbCwgYXR0LT5hdHRudW0sICZkcGNvbnRleHQpOworCisJCWhhc19kZWZhdWx0ID0g KGRlZmV4cHIgIT0gTlVMTCk7CisJCS8qIGluaGVyaXRlZC1vbmx5IE5PVCBOVUxMIGlzIG5vdCBh biBvdmVycmlkZTsgdHJlYXQgYXMgYWJzZW50ICovCisJCWhhc19ub3RudWxsID0gYXR0LT5hdHRu b3RudWxsICYmCisJCQkhbm5fZW50cmllc1thdHQtPmF0dG51bV0uaW5oZXJpdGVkX25vdG51bGw7 CisKKwkJaWYgKCFoYXNfZGVmYXVsdCAmJiAhaGFzX25vdG51bGwpCisJCXsKKwkJCWlmIChkZWZl eHByKQorCQkJCXBmcmVlKGRlZmV4cHIpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIWZp cnN0KQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmlubmVyLCAnLCcpOworCQlpZiAocHJldHR5 KQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmaW5uZXIsICJcbiAgICAiKTsKKwkJZWxzZSBp ZiAoIWZpcnN0KQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmlubmVyLCAnICcpOworCQlmaXJz dCA9IGZhbHNlOworCisJCWFwcGVuZFN0cmluZ0luZm8oJmlubmVyLCAiJXMgV0lUSCBPUFRJT05T IiwKKwkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoYXR0LT5hdHRuYW1lKSkpOworCQlp ZiAoaGFzX2RlZmF1bHQpCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZpbm5lciwgIiBERUZBVUxUICVz IiwgZGVmZXhwcik7CisJCWlmIChoYXNfbm90bnVsbCkKKwkJeworCQkJTG9jYWxOb3ROdWxsRW50 cnkgKm5uID0gJm5uX2VudHJpZXNbYXR0LT5hdHRudW1dOworCisJCQlpZiAobm4tPm5hbWUgIT0g TlVMTCAmJiAhbm4tPmlzX2F1dG8pCisJCQkJYXBwZW5kU3RyaW5nSW5mbygmaW5uZXIsICIgQ09O U1RSQUlOVCAlcyBOT1QgTlVMTCIsCisJCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKG5uLT5uYW1l KSk7CisJCQllbHNlCisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmaW5uZXIsICIgTk9UIE5V TEwiKTsKKwkJCWlmIChubi0+bmFtZSAhPSBOVUxMICYmIG5uLT5ub19pbmhlcml0KQorCQkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoJmlubmVyLCAiIE5PIElOSEVSSVQiKTsKKwkJfQorCisJCWlm IChkZWZleHByKQorCQkJcGZyZWUoZGVmZXhwcik7CisJfQorCisJLyoKKwkgKiBMb2NhbGx5LWRl Y2xhcmVkIENIRUNLIGNvbnN0cmFpbnRzIG9uIGEgdHlwZWQgdGFibGUgYmVsb25nIGluIHRoZQor CSAqIGNvbHVtbi1saXN0IHBhcmVudGhlc2VzLCBzYW1lIGFzIGZvciBhbiB1bnR5cGVkIHRhYmxl LiAgVGhlIG91dC1vZi1saW5lCisJICogY29uc3RyYWludCBsb29wIGxhdGVyIHN0aWxsIHNraXBz IENIRUNLcy4KKwkgKi8KKwlpZiAoaW5jbHVkZV9jaGVjaykKKwkJYXBwZW5kX2lubGluZV9jaGVj a19jb25zdHJhaW50cygmaW5uZXIsIHJlbCwgcHJldHR5LCAmZmlyc3QpOworCisJaWYgKCFmaXJz dCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiICgiKTsKKwkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhidWYsIGlubmVyLmRhdGEpOworCQlpZiAocHJldHR5KQorCQkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZyhidWYsICJcbikiKTsKKwkJZWxzZQorCQkJYXBwZW5kU3RyaW5nSW5m b0NoYXIoYnVmLCAnKScpOworCX0KKwlwZnJlZShpbm5lci5kYXRhKTsKK30KKworLyoKKyAqIGFw cGVuZF9zdG10CisgKgkJUHVzaCBjdHgtPmJ1ZiBvbnRvIGN0eC0+c3RhdGVtZW50cy4KKyAqCisg KiBVc2VkIGZvciBhbGwgRERMIGVtaXNzaW9ucy4gIFdoZW4gc2NoZW1hX3F1YWxpZmllZCBpcyBm YWxzZSwgdGhlCisgKiBhY3RpdmUgc2VhcmNoX3BhdGggaGFzIGFscmVhZHkgYmVlbiBuYXJyb3dl ZCB0byB0aGUgYmFzZSBzY2hlbWEsIHNvCisgKiBydWxldXRpbHMgaGVscGVycyAocGdfZ2V0X2lu ZGV4ZGVmX2RkbCwgcGdfZ2V0X3J1bGVkZWZfZGRsLAorICogcGdfZ2V0X2NvbnN0cmFpbnRkZWZf Ym9keSwgcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfZGRsKSBwcm9kdWNlCisgKiB1bnF1YWxpZmll ZCBuYW1lcyBmb3Igc2FtZS1zY2hlbWEgb2JqZWN0cyBhdXRvbWF0aWNhbGx5LgorICovCitzdGF0 aWMgdm9pZAorYXBwZW5kX3N0bXQoVGFibGVEZGxDb250ZXh0ICpjdHgpCit7CisJY3R4LT5zdGF0 ZW1lbnRzID0gbGFwcGVuZChjdHgtPnN0YXRlbWVudHMsIHBzdHJkdXAoY3R4LT5idWYuZGF0YSkp OworfQorCisvKgorICogZW1pdF9jcmVhdGVfdGFibGVfc3RtdAorICoJCUJ1aWxkIHRoZSBsZWFk aW5nIENSRUFURSBUQUJMRSBzdGF0ZW1lbnQsIGluY2x1ZGluZyBwZXJzaXN0ZW5jZQorICoJCShU RU1QT1JBUlkgLyBVTkxPR0dFRCksIGJvZHkgKGNvbHVtbiBsaXN0IC8gT0YgdHlwZV9uYW1lIC8K KyAqCQlQQVJUSVRJT04gT0YgcGFyZW50KSwgSU5IRVJJVFMsIFBBUlRJVElPTiBCWSwgVVNJTkcg bWV0aG9kLAorICoJCVdJVEggKHJlbG9wdGlvbnMpLCBUQUJMRVNQQUNFLCBhbmQgT04gQ09NTUlU LgorICovCitzdGF0aWMgdm9pZAorZW1pdF9jcmVhdGVfdGFibGVfc3RtdChUYWJsZURkbENvbnRl eHQgKmN0eCkKK3sKKwlSZWxhdGlvbglyZWwgPSBjdHgtPnJlbDsKKwljaGFyCQlyZWxwZXJzaXN0 ZW5jZSA9IHJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZTsKKwljaGFyCQlyZWxraW5kID0gcmVs LT5yZF9yZWwtPnJlbGtpbmQ7CisJYm9vbAkJaXNfdHlwZWQgPSBPaWRJc1ZhbGlkKHJlbC0+cmRf cmVsLT5yZWxvZnR5cGUpOworCUhlYXBUdXBsZQljbGFzc3R1cDsKKwlEYXR1bQkJcmVsb3B0RGF0 dW07CisJYm9vbAkJcmVsb3B0SXNudWxsOworCisJY2xhc3N0dXAgPSBTZWFyY2hTeXNDYWNoZTEo UkVMT0lELCBPYmplY3RJZEdldERhdHVtKGN0eC0+cmVsaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQoY2xhc3N0dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig cmVsYXRpb24gJXUiLCBjdHgtPnJlbGlkKTsKKworCXJlbG9wdERhdHVtID0gU3lzQ2FjaGVHZXRB dHRyKFJFTE9JRCwgY2xhc3N0dXAsCisJCQkJCQkJCSAgQW51bV9wZ19jbGFzc19yZWxvcHRpb25z LCAmcmVsb3B0SXNudWxsKTsKKworCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiQ1JFQVRFICIpOworCWlmIChyZWxwZXJzaXN0 ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZj dHgtPmJ1ZiwgIlRFTVBPUkFSWSAiKTsKKwllbHNlIGlmIChyZWxwZXJzaXN0ZW5jZSA9PSBSRUxQ RVJTSVNURU5DRV9VTkxPR0dFRCkKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYs ICJVTkxPR0dFRCAiKTsKKwlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIlRBQkxFICVzIiwg Y3R4LT5xdWFsbmFtZSk7CisKKwlpZiAocmVsLT5yZF9yZWwtPnJlbGlzcGFydGl0aW9uKQorCXsK KwkJT2lkCQkJcGFyZW50T2lkID0gZ2V0X3BhcnRpdGlvbl9wYXJlbnQoY3R4LT5yZWxpZCwgdHJ1 ZSk7CisJCWNoYXIJICAgKnBhcmVudFF1YWwgPSBsb29rdXBfcmVsbmFtZV9mb3JfZW1pdChwYXJl bnRPaWQsCisJCQkJCQkJCQkJCQkJCSBjdHgtPnNjaGVtYV9xdWFsaWZpZWQsCisJCQkJCQkJCQkJ CQkJCSBjdHgtPmJhc2VfbmFtZXNwYWNlKTsKKwkJY2hhcgkgICAqcGFyZW50UmVsbmFtZSA9IGdl dF9yZWxfbmFtZShwYXJlbnRPaWQpOworCQlEYXR1bQkJYm91bmREYXR1bTsKKwkJYm9vbAkJYm91 bmRJc251bGw7CisJCWNoYXIJICAgKmZvclZhbHVlcyA9IE5VTEw7CisJCWNoYXIJICAgKmJvdW5k U3RyID0gTlVMTDsKKworCQlpZiAocGFyZW50UmVsbmFtZSA9PSBOVUxMKQorCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwKKwkJCQkJIGVy cm1zZygicGFydGl0aW9uIHBhcmVudCB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsCisJCQkJ CQkJcGFyZW50T2lkKSwKKwkJCQkJIGVycmRldGFpbCgiSXQgbWF5IGhhdmUgYmVlbiBjb25jdXJy ZW50bHkgZHJvcHBlZC4iKSkpOworCisJCWJvdW5kRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUkVM T0lELCBjbGFzc3R1cCwKKwkJCQkJCQkJCSBBbnVtX3BnX2NsYXNzX3JlbHBhcnRib3VuZCwgJmJv dW5kSXNudWxsKTsKKwkJaWYgKCFib3VuZElzbnVsbCkKKwkJeworCQkJTm9kZQkgICAqYm91bmRO b2RlOworCQkJTGlzdAkgICAqZHBjb250ZXh0OworCisJCQlib3VuZFN0ciA9IFRleHREYXR1bUdl dENTdHJpbmcoYm91bmREYXR1bSk7CisJCQlib3VuZE5vZGUgPSBzdHJpbmdUb05vZGUoYm91bmRT dHIpOworCQkJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihwYXJlbnRSZWxuYW1lLCBw YXJlbnRPaWQpOworCQkJZm9yVmFsdWVzID0gZGVwYXJzZV9leHByZXNzaW9uKGJvdW5kTm9kZSwg ZHBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOworCQl9CisKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4 LT5idWYsICIgUEFSVElUSU9OIE9GICVzICVzIiwKKwkJCQkJCSBwYXJlbnRRdWFsLCBmb3JWYWx1 ZXMgPyBmb3JWYWx1ZXMgOiAiREVGQVVMVCIpOworCQlpZiAoZm9yVmFsdWVzKQorCQkJcGZyZWUo Zm9yVmFsdWVzKTsKKwkJaWYgKGJvdW5kU3RyKQorCQkJcGZyZWUoYm91bmRTdHIpOworCQlwZnJl ZShwYXJlbnRRdWFsKTsKKwkJcGZyZWUocGFyZW50UmVsbmFtZSk7CisJfQorCWVsc2UgaWYgKGlz X3R5cGVkKQorCXsKKwkJY2hhcgkgICAqdHlwbmFtZSA9IGZvcm1hdF90eXBlX2JlX3F1YWxpZmll ZChyZWwtPnJkX3JlbC0+cmVsb2Z0eXBlKTsKKworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1 ZiwgIiBPRiAlcyIsIHR5cG5hbWUpOworCQlwZnJlZSh0eXBuYW1lKTsKKworCQlhcHBlbmRfdHlw ZWRfY29sdW1uX292ZXJyaWRlcygmY3R4LT5idWYsIHJlbCwgY3R4LT5wcmV0dHksCisJCQkJCQkJ CQkgIGlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9DSEVDSyksCisJCQkJCQkJ CQkgIGN0eC0+bm5fZW50cmllcyk7CisJfQorCWVsc2UKKwl7CisJCUxpc3QJICAgKnBhcmVudHM7 CisJCUxpc3RDZWxsICAgKmxjOworCQlib29sCQlmaXJzdDsKKworCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKCZjdHgtPmJ1ZiwgIiAoIik7CisKKwkJYXBwZW5kX2NvbHVtbl9kZWZzKCZjdHgtPmJ1 ZiwgcmVsLCBjdHgtPnByZXR0eSwKKwkJCQkJCSAgIGlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJM RV9ERExfS0lORF9DSEVDSyksCisJCQkJCQkgICBjdHgtPnNjaGVtYV9xdWFsaWZpZWQsIGN0eC0+ bm5fZW50cmllcyk7CisKKwkJaWYgKGN0eC0+cHJldHR5KQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZygmY3R4LT5idWYsICJcbikiKTsKKwkJZWxzZQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIo JmN0eC0+YnVmLCAnKScpOworCisJCXBhcmVudHMgPSBmaW5kX2luaGVyaXRhbmNlX3BhcmVudHMo Y3R4LT5yZWxpZCwgTm9Mb2NrKTsKKwkJaWYgKHBhcmVudHMgIT0gTklMKQorCQl7CisJCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIiBJTkhFUklUUyAoIik7CisJCQlmaXJzdCA9 IHRydWU7CisJCQlmb3JlYWNoKGxjLCBwYXJlbnRzKQorCQkJeworCQkJCU9pZAkJCXBvaWQgPSBs Zmlyc3Rfb2lkKGxjKTsKKwkJCQljaGFyCSAgICpwbmFtZSA9IGxvb2t1cF9yZWxuYW1lX2Zvcl9l bWl0KHBvaWQsCisJCQkJCQkJCQkJCQkJCQljdHgtPnNjaGVtYV9xdWFsaWZpZWQsCisJCQkJCQkJ CQkJCQkJCQljdHgtPmJhc2VfbmFtZXNwYWNlKTsKKworCQkJCWlmICghZmlyc3QpCisJCQkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiLCAiKTsKKwkJCQlmaXJzdCA9IGZhbHNl OworCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCBwbmFtZSk7CisJCQkJcGZy ZWUocG5hbWUpOworCQkJfQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmN0eC0+YnVmLCAnKScp OworCQkJbGlzdF9mcmVlKHBhcmVudHMpOworCQl9CisJfQorCisJaWYgKHJlbGtpbmQgPT0gUkVM S0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwl7CisJCURhdHVtCQlwYXJ0a2V5RGF0dW07CisJCWNo YXIJICAgKnBhcnRrZXk7CisKKwkJcGFydGtleURhdHVtID0gT2lkRnVuY3Rpb25DYWxsMShGX1BH X0dFVF9QQVJUS0VZREVGLAorCQkJCQkJCQkJCU9iamVjdElkR2V0RGF0dW0oY3R4LT5yZWxpZCkp OworCQlwYXJ0a2V5ID0gVGV4dERhdHVtR2V0Q1N0cmluZyhwYXJ0a2V5RGF0dW0pOworCQlhcHBl bmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIiBQQVJUSVRJT04gQlkgJXMiLCBwYXJ0a2V5KTsKKwkJ cGZyZWUocGFydGtleSk7CisJfQorCisJaWYgKE9pZElzVmFsaWQocmVsLT5yZF9yZWwtPnJlbGFt KSAmJgorCQlyZWwtPnJkX3JlbC0+cmVsYW0gIT0gSEVBUF9UQUJMRV9BTV9PSUQpCisJeworCQlj aGFyCSAgICphbW5hbWUgPSBnZXRfYW1fbmFtZShyZWwtPnJkX3JlbC0+cmVsYW0pOworCisJCWlm IChhbW5hbWUgIT0gTlVMTCkKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsICIg VVNJTkcgJXMiLAorCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKGFtbmFtZSkpOworCQkJcGZyZWUo YW1uYW1lKTsKKwkJfQorCX0KKworCWlmICghcmVsb3B0SXNudWxsKQorCXsKKwkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmY3R4LT5idWYsICIgV0lUSCAoIik7CisJCWdldF9yZWxvcHRpb25zKCZj dHgtPmJ1ZiwgcmVsb3B0RGF0dW0pOworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmY3R4LT5idWYs ICcpJyk7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKGNsYXNzdHVwKTsKKworCWlmIChyZWxwZXJz aXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQorCXsKKwkJT25Db21taXRBY3Rpb24gb2Mg PSBnZXRfb25fY29tbWl0X2FjdGlvbihjdHgtPnJlbGlkKTsKKworCQlpZiAob2MgPT0gT05DT01N SVRfREVMRVRFX1JPV1MpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIiBP TiBDT01NSVQgREVMRVRFIFJPV1MiKTsKKwkJZWxzZSBpZiAob2MgPT0gT05DT01NSVRfRFJPUCkK KwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiIE9OIENPTU1JVCBEUk9QIik7 CisJfQorCisJaWYgKCFjdHgtPm5vX3RhYmxlc3BhY2UgJiYgT2lkSXNWYWxpZChyZWwtPnJkX3Jl bC0+cmVsdGFibGVzcGFjZSkpCisJeworCQljaGFyCSAgICp0c25hbWUgPSBnZXRfdGFibGVzcGFj ZV9uYW1lKHJlbC0+cmRfcmVsLT5yZWx0YWJsZXNwYWNlKTsKKworCQlpZiAodHNuYW1lICE9IE5V TEwpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiIFRBQkxFU1BBQ0UgJXMi LAorCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKHRzbmFtZSkpOworCQkJcGZyZWUodHNuYW1lKTsK KwkJfQorCX0KKworCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZjdHgtPmJ1ZiwgJzsnKTsKKwlhcHBl bmRfc3RtdChjdHgpOworfQorCisvKgorICogZW1pdF9vd25lcl9zdG10CisgKgkJQUxURVIgVEFC TEUgcXVhbG5hbWUgT1dORVIgVE8gcm9sZS4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRfb3duZXJf c3RtdChUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwljaGFyCSAgICpvd25lcjsKKworCWlmIChj dHgtPm5vX293bmVyKQorCQlyZXR1cm47CisKKwlvd25lciA9IEdldFVzZXJOYW1lRnJvbUlkKGN0 eC0+cmVsLT5yZF9yZWwtPnJlbG93bmVyLCBmYWxzZSk7CisJcmVzZXRTdHJpbmdJbmZvKCZjdHgt PmJ1Zik7CisJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsICJBTFRFUiBUQUJMRSAlcyBPV05F UiBUTyAlczsiLAorCQkJCQkgY3R4LT5xdWFsbmFtZSwgcXVvdGVfaWRlbnRpZmllcihvd25lcikp OworCWFwcGVuZF9zdG10KGN0eCk7CisJcGZyZWUob3duZXIpOworfQorCisvKgorICogY2hpbGRf ZGVmYXVsdF9pbmhlcml0ZWRfZnJvbV9wYXJlbnQKKyAqCQlSZXR1cm4gdHJ1ZSBpZiBjaGlsZF9h ZGJpbiBpcyBpZGVudGljYWwgdG8gdGhlIGFkYmluIHN0b3JlZCBmb3IKKyAqCQlhdHRuYW1lIG9u IGFueSBpbW1lZGlhdGUgcGFyZW50IG9mIGNoaWxkT2lkLgorICoKKyAqCQlQb3N0Z3JlU1FMIGNv cGllcyB0aGUgYWRiaW4gZXhwcmVzc2lvbiB2ZXJiYXRpbSBmcm9tIHBhcmVudCB0byBjaGlsZAor ICoJCXdoZW4gYSBwYXJ0aXRpb24gaXMgY3JlYXRlZCwgc28gYSBieXRlLWZvci1ieXRlIG1hdGNo IG1lYW5zIHRoZSBjaGlsZAorICoJCWRpZCBub3Qgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbG9jYWxs eS4gIEZvciByZWd1bGFyIGluaGVyaXRhbmNlIHRoZQorICoJCXBhcmVudCB0eXBpY2FsbHkgaGFz IG5vIGRlZmF1bHQgYXQgYWxsIChhdHRoYXNkZWY9ZmFsc2UpLCBzbyB0aGUKKyAqCQlmdW5jdGlv biByZXR1cm5zIGZhbHNlIGFuZCB0aGUgb3ZlcnJpZGUgaXMgY29ycmVjdGx5IGVtaXR0ZWQuCisg Ki8KK3N0YXRpYyBib29sCitjaGlsZF9kZWZhdWx0X2luaGVyaXRlZF9mcm9tX3BhcmVudChPaWQg Y2hpbGRPaWQsIGNvbnN0IGNoYXIgKmF0dG5hbWUsCisJCQkJCQkJCQljb25zdCBjaGFyICpjaGls ZF9hZGJpbikKK3sKKwlMaXN0CSAgICpwYXJlbnRzOworCUxpc3RDZWxsICAgKmxjOworCWJvb2wJ CXJlc3VsdCA9IGZhbHNlOworCisJcGFyZW50cyA9IGZpbmRfaW5oZXJpdGFuY2VfcGFyZW50cyhj aGlsZE9pZCwgTm9Mb2NrKTsKKworCWZvcmVhY2gobGMsIHBhcmVudHMpCisJeworCQlPaWQJCQlw YXJlbnRPaWQgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJUmVsYXRpb24JcGFyZW50UmVsOworCQlBdHRy TnVtYmVyCXBhcmVudEF0dG51bTsKKwkJVHVwbGVDb25zdHIgKmNvbnN0cjsKKworCQlwYXJlbnRS ZWwgPSB0cnlfdGFibGVfb3BlbihwYXJlbnRPaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCWlmIChw YXJlbnRSZWwgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCXBhcmVudEF0dG51bSA9IGdldF9h dHRudW0ocGFyZW50T2lkLCBhdHRuYW1lKTsKKwkJaWYgKHBhcmVudEF0dG51bSAhPSBJbnZhbGlk QXR0ck51bWJlcikKKwkJeworCQkJRm9ybV9wZ19hdHRyaWJ1dGUgcGFyZW50QXR0ID0KKwkJCQlU dXBsZURlc2NBdHRyKFJlbGF0aW9uR2V0RGVzY3IocGFyZW50UmVsKSwgcGFyZW50QXR0bnVtIC0g MSk7CisKKwkJCWlmIChwYXJlbnRBdHQtPmF0dGhhc2RlZikKKwkJCXsKKwkJCQljb25zdHIgPSBS ZWxhdGlvbkdldERlc2NyKHBhcmVudFJlbCktPmNvbnN0cjsKKwkJCQlpZiAoY29uc3RyICE9IE5V TEwpCisJCQkJeworCQkJCQlmb3IgKGludCBqID0gMDsgaiA8IGNvbnN0ci0+bnVtX2RlZnZhbDsg aisrKQorCQkJCQl7CisJCQkJCQlpZiAoY29uc3RyLT5kZWZ2YWxbal0uYWRudW0gPT0gcGFyZW50 QXR0bnVtICYmCisJCQkJCQkJc3RyY21wKGNvbnN0ci0+ZGVmdmFsW2pdLmFkYmluLCBjaGlsZF9h ZGJpbikgPT0gMCkKKwkJCQkJCXsKKwkJCQkJCQlyZXN1bHQgPSB0cnVlOworCQkJCQkJCWJyZWFr OworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKwkJdGFibGVfY2xvc2UocGFy ZW50UmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCQlpZiAocmVzdWx0KQorCQkJYnJlYWs7CisJfQor CisJbGlzdF9mcmVlKHBhcmVudHMpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBlbWl0 X2NoaWxkX2RlZmF1bHRfb3ZlcnJpZGVzCisgKgkJQUxURVIgVEFCTEUgT05MWSBxdWFsbmFtZSBB TFRFUiBDT0xVTU4gY29sIFNFVCBERUZBVUxUIGV4cHIgLSBvbmUgcGVyCisgKgkJaW5oZXJpdGVk IChhdHRpc2xvY2FsPWZhbHNlKSBub24tZ2VuZXJhdGVkIGNvbHVtbiB0aGF0IGNhcnJpZXMgYQor ICoJCWRlZmF1bHQgd2hpY2ggZGlmZmVycyBmcm9tIGV2ZXJ5IGltbWVkaWF0ZSBwYXJlbnQncyBk ZWZhdWx0LiAgVXNpbmcKKyAqCQlPTkxZIHByZXZlbnRzIHRoZSBzdGF0ZW1lbnQgZnJvbSBjYXNj YWRpbmcgaW50byBncmFuZGNoaWxkcmVuIGFuZAorICoJCW92ZXJ3cml0aW5nIHRoZWlyIG93biBk ZWZhdWx0cy4gIERlZmF1bHRzIHRoYXQgYXJlIHNpbXBseSBpbmhlcml0ZWQKKyAqCQl1bmNoYW5n ZWQgZnJvbSBhIHBhcmVudCBhcmUgc2tpcHBlZCB0byBhdm9pZCByZWR1bmRhbnQgb3V0cHV0Lgor ICoJCUdlbmVyYXRlZCBjb2x1bW5zIGFyZSBza2lwcGVkOiB0aGVpciBleHByZXNzaW9uIGlzIGlu aGVyaXRlZAorICoJCWF1dG9tYXRpY2FsbHkgYW5kIFNFVCBERUZBVUxUIHdvdWxkIGZhaWwgYXQg cmVwbGF5LgorICovCitzdGF0aWMgdm9pZAorZW1pdF9jaGlsZF9kZWZhdWx0X292ZXJyaWRlcyhU YWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0 RGVzY3IoY3R4LT5yZWwpOworCVR1cGxlQ29uc3RyICpjb25zdHIgPSB0dXBkZXNjLT5jb25zdHI7 CisJTGlzdAkgICAqZHBjb250ZXh0ID0gTklMOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCB0dXBk ZXNjLT5uYXR0czsgaSsrKQorCXsKKwkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ID0gVHVwbGVEZXNj QXR0cih0dXBkZXNjLCBpKTsKKwkJY29uc3QgY2hhciAqYWRiaW4gPSBOVUxMOworCQljaGFyCSAg ICpkZWZzdHI7CisKKwkJaWYgKGF0dC0+YXR0aXNkcm9wcGVkIHx8IGF0dC0+YXR0aXNsb2NhbCB8 fCAhYXR0LT5hdHRoYXNkZWYpCisJCQljb250aW51ZTsKKwkJaWYgKGF0dC0+YXR0Z2VuZXJhdGVk ICE9ICdcMCcpCisJCQljb250aW51ZTsKKworCQkvKiBMb2NhdGUgdGhlIHJhdyBhZGJpbiBmb3Ig cGFyZW50LWNvbXBhcmlzb24gYW5kIGZvciBkZXBhcnNlLiAqLworCQlpZiAoY29uc3RyICE9IE5V TEwpCisJCXsKKwkJCWZvciAoaW50IGogPSAwOyBqIDwgY29uc3RyLT5udW1fZGVmdmFsOyBqKysp CisJCQl7CisJCQkJaWYgKGNvbnN0ci0+ZGVmdmFsW2pdLmFkbnVtID09IGF0dC0+YXR0bnVtKQor CQkJCXsKKwkJCQkJYWRiaW4gPSBjb25zdHItPmRlZnZhbFtqXS5hZGJpbjsKKwkJCQkJYnJlYWs7 CisJCQkJfQorCQkJfQorCQl9CisJCWlmIChhZGJpbiA9PSBOVUxMKQorCQkJY29udGludWU7CisK KwkJLyoKKwkJICogU2tpcCBjb2x1bW5zIHdob3NlIGRlZmF1bHQgZXhwcmVzc2lvbiBpcyBpZGVu dGljYWwgdG8gYSBwYXJlbnQnczsKKwkJICogdGhlIGNoaWxkIG1lcmVseSBpbmhlcml0ZWQgaXQg KHR5cGljYWwgZm9yIHBhcnRpdGlvbiBjaGlsZHJlbikuCisJCSAqIEFuIGV4cGxpY2l0IGxvY2Fs IG92ZXJyaWRlIHdpbGwgaGF2ZSBhIGRpZmZlcmVudCBhZGJpbi4KKwkJICovCisJCWlmIChjaGls ZF9kZWZhdWx0X2luaGVyaXRlZF9mcm9tX3BhcmVudChjdHgtPnJlbGlkLAorCQkJCQkJCQkJCQkJ TmFtZVN0cihhdHQtPmF0dG5hbWUpLAorCQkJCQkJCQkJCQkJYWRiaW4pKQorCQkJY29udGludWU7 CisKKwkJZGVmc3RyID0gZmluZF9hdHRyZGVmX3RleHQoY3R4LT5yZWwsIGF0dC0+YXR0bnVtLCAm ZHBjb250ZXh0KTsKKwkJaWYgKGRlZnN0ciA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJcmVz ZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLAor CQkJCQkJICJBTFRFUiBUQUJMRSBPTkxZICVzIEFMVEVSIENPTFVNTiAlcyBTRVQgREVGQVVMVCAl czsiLAorCQkJCQkJIGN0eC0+cXVhbG5hbWUsCisJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihOYW1l U3RyKGF0dC0+YXR0bmFtZSkpLAorCQkJCQkJIGRlZnN0cik7CisJCWFwcGVuZF9zdG10KGN0eCk7 CisJCXBmcmVlKGRlZnN0cik7CisJfQorfQorCisvKgorICogZW1pdF9hdHRvcHRpb25zCisgKgkJ QUxURVIgVEFCTEUgcXVhbG5hbWUgQUxURVIgQ09MVU1OIGNvbCBTRVQgKC4uLikgLSBvbmUgcGVy IGNvbHVtbgorICoJCXdpdGggbm9uLW51bGwgcGdfYXR0cmlidXRlLmF0dG9wdGlvbnMuICBUaGUg aW5saW5lIGZvcm0gb2YgdGhlc2UKKyAqCQlvcHRpb25zIGlzbid0IGF2YWlsYWJsZSBpbiBDUkVB VEUgVEFCTEUsIHNvIHRoZXkgY29tZSBvdXQgaGVyZS4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRf YXR0b3B0aW9ucyhUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwlUdXBsZURlc2MJdHVwZGVzYyA9 IFJlbGF0aW9uR2V0RGVzY3IoY3R4LT5yZWwpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCB0dXBk ZXNjLT5uYXR0czsgaSsrKQorCXsKKwkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ID0gVHVwbGVEZXNj QXR0cih0dXBkZXNjLCBpKTsKKwkJSGVhcFR1cGxlCWF0dFR1cDsKKwkJRGF0dW0JCW9wdERhdHVt OworCQlib29sCQlvcHRJc251bGw7CisKKwkJaWYgKGF0dC0+YXR0aXNkcm9wcGVkKQorCQkJY29u dGludWU7CisKKwkJYXR0VHVwID0gU2VhcmNoU3lzQ2FjaGUyKEFUVE5VTSwKKwkJCQkJCQkJIE9i amVjdElkR2V0RGF0dW0oY3R4LT5yZWxpZCksCisJCQkJCQkJCSBJbnQxNkdldERhdHVtKGF0dC0+ YXR0bnVtKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChhdHRUdXApKQorCQkJY29udGludWU7 CisKKwkJb3B0RGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQVRUTlVNLCBhdHRUdXAsCisJCQkJCQkJ CSAgIEFudW1fcGdfYXR0cmlidXRlX2F0dG9wdGlvbnMsICZvcHRJc251bGwpOworCQlpZiAoIW9w dElzbnVsbCkKKwkJeworCQkJcmVzZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJCQlhcHBlbmRT dHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCQkgIkFMVEVSIFRBQkxFICVzIEFMVEVSIENPTFVN TiAlcyBTRVQgKCIsCisJCQkJCQkJIGN0eC0+cXVhbG5hbWUsCisJCQkJCQkJIHF1b3RlX2lkZW50 aWZpZXIoTmFtZVN0cihhdHQtPmF0dG5hbWUpKSk7CisJCQlnZXRfcmVsb3B0aW9ucygmY3R4LT5i dWYsIG9wdERhdHVtKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiKTsi KTsKKwkJCWFwcGVuZF9zdG10KGN0eCk7CisJCX0KKwkJUmVsZWFzZVN5c0NhY2hlKGF0dFR1cCk7 CisJfQorfQorCisvKgorICogZW1pdF90eXBlZF9jb2x1bW5fc3RvcmFnZQorICoJCUZvciB0eXBl ZCB0YWJsZXMgKENSRUFURSBUQUJMRSAuLi4gT0YgdHlwZV9uYW1lKSwgZW1pdCBwZXItY29sdW1u CisgKgkJU1RPUkFHRSBhbmQgQ09NUFJFU1NJT04gb3ZlcnJpZGVzIGFzIEFMVEVSIFRBQkxFIHN0 YXRlbWVudHMuCisgKgorICoJCVRoZSB0eXBlZC10YWJsZSBncmFtbWFyIGFsbG93cyBvbmx5IERF RkFVTFQgLyBOT1QgTlVMTCAvIENIRUNLIGluIHRoZQorICoJCUNSRUFURSBUQUJMRSBjb2x1bW4t b3B0aW9ucyBsaXN0IChjb2x1bW5PcHRpb25zIC0+IENvbFF1YWxMaXN0KSwgc28KKyAqCQlTVE9S QUdFIGFuZCBDT01QUkVTU0lPTiBjYW5ub3QgYXBwZWFyIGlubGluZSB0aGVyZS4gIFRoZXkgbXVz dCBiZQorICoJCWVtaXR0ZWQgcG9zdC1DUkVBVEUsIG1hdGNoaW5nIHdoYXQgcGdfZHVtcCBwcm9k dWNlcy4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRfdHlwZWRfY29sdW1uX3N0b3JhZ2UoVGFibGVE ZGxDb250ZXh0ICpjdHgpCit7CisJVHVwbGVEZXNjCXR1cGRlc2M7CisKKwlpZiAoIU9pZElzVmFs aWQoY3R4LT5yZWwtPnJkX3JlbC0+cmVsb2Z0eXBlKSkKKwkJcmV0dXJuOworCisJdHVwZGVzYyA9 IFJlbGF0aW9uR2V0RGVzY3IoY3R4LT5yZWwpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCB0dXBk ZXNjLT5uYXR0czsgaSsrKQorCXsKKwkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ID0gVHVwbGVEZXNj QXR0cih0dXBkZXNjLCBpKTsKKworCQlpZiAoYXR0LT5hdHRpc2Ryb3BwZWQpCisJCQljb250aW51 ZTsKKworCQlpZiAoYXR0LT5hdHRzdG9yYWdlICE9IGdldF90eXBzdG9yYWdlKGF0dC0+YXR0dHlw aWQpKQorCQl7CisJCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJCWFwcGVuZFN0cmlu Z0luZm8oJmN0eC0+YnVmLAorCQkJCQkJCSAiQUxURVIgVEFCTEUgJXMgQUxURVIgQ09MVU1OICVz IFNFVCBTVE9SQUdFICVzOyIsCisJCQkJCQkJIGN0eC0+cXVhbG5hbWUsCisJCQkJCQkJIHF1b3Rl X2lkZW50aWZpZXIoTmFtZVN0cihhdHQtPmF0dG5hbWUpKSwKKwkJCQkJCQkgc3RvcmFnZV9uYW1l KGF0dC0+YXR0c3RvcmFnZSkpOworCQkJYXBwZW5kX3N0bXQoY3R4KTsKKwkJfQorCisJCWlmIChD b21wcmVzc2lvbk1ldGhvZElzVmFsaWQoYXR0LT5hdHRjb21wcmVzc2lvbikpCisJCXsKKwkJCXJl c2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCQkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYs CisJCQkJCQkJICJBTFRFUiBUQUJMRSAlcyBBTFRFUiBDT0xVTU4gJXMgU0VUIENPTVBSRVNTSU9O ICVzOyIsCisJCQkJCQkJIGN0eC0+cXVhbG5hbWUsCisJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIo TmFtZVN0cihhdHQtPmF0dG5hbWUpKSwKKwkJCQkJCQkgR2V0Q29tcHJlc3Npb25NZXRob2ROYW1l KGF0dC0+YXR0Y29tcHJlc3Npb24pKTsKKwkJCWFwcGVuZF9zdG10KGN0eCk7CisJCX0KKwl9Cit9 CisKKy8qCisgKiBlbWl0X2luZGV4ZXMKKyAqCQlDUkVBVEUgSU5ERVggcGVyIG5vbi1jb25zdHJh aW50LWJhY2tlZCBpbmRleCBvbiB0aGUgcmVsYXRpb24uCisgKgkJSW5kZXhlcyB0aGF0IGJhY2sg UEsgLyBVTklRVUUgLyBFWENMVURFIGNvbnN0cmFpbnRzIGFyZSBlbWl0dGVkCisgKgkJb3V0LW9m LWxpbmUgYnkgZW1pdF9sb2NhbF9jb25zdHJhaW50cyAodGhlIEFMVEVSIFRBQkxFIC4uLiBBREQK KyAqCQlDT05TVFJBSU5UIHN0YXRlbWVudCBjcmVhdGVzIHRoZSBpbmRleCBpbXBsaWNpdGx5KS4K KyAqLworc3RhdGljIHZvaWQKK2VtaXRfaW5kZXhlcyhUYWJsZURkbENvbnRleHQgKmN0eCkKK3sK KwlMaXN0CSAgICppbmRleG9pZHM7CisJTGlzdENlbGwgICAqbGM7CisKKwlpZiAoIWlzX2tpbmRf aW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9JTkRFWCkpCisJCXJldHVybjsKKworCWluZGV4 b2lkcyA9IFJlbGF0aW9uR2V0SW5kZXhMaXN0KGN0eC0+cmVsKTsKKwlmb3JlYWNoKGxjLCBpbmRl eG9pZHMpCisJeworCQlPaWQJCQlpZHhvaWQgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJY2hhcgkgICAq aWR4ZGVmOworCisJCWlmIChPaWRJc1ZhbGlkKGdldF9pbmRleF9jb25zdHJhaW50KGlkeG9pZCkp KQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogU2tpcCBpbmRleGVzIHRoYXQgd2VyZSBpbmhl cml0ZWQgZnJvbSBhIHBhcmVudCBwYXJ0aXRpb25lZCBpbmRleC4KKwkJICogVGhleSBhcmUgY3Jl YXRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIHBhcmVudCBpbmRleCBEREwgaXMKKwkJICogcmVw bGF5ZWQgYW5kIHRoZSBwYXJ0aXRpb24gaXMgYXR0YWNoZWQsIHNvIGVtaXR0aW5nIHRoZW0gc2Vw YXJhdGVseQorCQkgKiB3b3VsZCBwcm9kdWNlIGEgInJlbGF0aW9uIGFscmVhZHkgZXhpc3RzIiBl cnJvciBvbiByZXBsYXkuCisJCSAqLworCQlpZiAoZ2V0X3JlbF9yZWxpc3BhcnRpdGlvbihpZHhv aWQpKQorCQkJY29udGludWU7CisKKwkJaWR4ZGVmID0gcGdfZ2V0X2luZGV4ZGVmX2RkbChpZHhv aWQpOworCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygm Y3R4LT5idWYsICIlczsiLCBpZHhkZWYpOworCQlhcHBlbmRfc3RtdChjdHgpOworCQlwZnJlZShp ZHhkZWYpOworCX0KKwlsaXN0X2ZyZWUoaW5kZXhvaWRzKTsKK30KKworLyoKKyAqIGVtaXRfbG9j YWxfY29uc3RyYWludHMKKyAqCQlBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgZm9yIGVh Y2ggbG9jYWxseS1kZWZpbmVkIGNvbnN0cmFpbnQKKyAqCQlvbiB0aGUgcmVsYXRpb24uICBJbmhl cml0ZWQgY29uc3RyYWludHMgKGNvbmlzbG9jYWw9ZmFsc2UpIGNvbWUKKyAqCQlmcm9tIHRoZSBw YXJlbnQncyBEREwuICBDSEVDSyBjb25zdHJhaW50cyBhcmUgZW1pdHRlZCBpbmxpbmUgZm9yCisg KgkJcmVndWxhci90eXBlZCB0YWJsZXMgKHNraXAgaGVyZSkgYnV0IG91dC1vZi1saW5lIGZvciBw YXJ0aXRpb24KKyAqCQljaGlsZHJlbiAobm8gY29sdW1uIGxpc3QgdG8gbGl2ZSBpbikuICBMb2Nh bCBOT1QgTlVMTAorICoJCWNvbnN0cmFpbnRzIG9uIGF0dGlzbG9jYWwgY29sdW1ucyAtIHdoZXRo ZXIgdXNlci1uYW1lZCBvcgorICoJCW1hdGNoaW5nIHRoZSBhdXRvLW5hbWUgcGF0dGVybiAtIGFy ZSBlbWl0dGVkIGlubGluZSBieSB0aGUKKyAqCQljb2x1bW4tZW1pdCBoZWxwZXJzIGFuZCBhcmUg c2tpcHBlZCB2aWEgc2tpcF9ub3RudWxsX29pZHMsCisgKgkJYmVjYXVzZSBQRyBvbmx5IGFsbG93 cyBvbmUgTk9UIE5VTEwgcGVyIGNvbHVtbiBhbmQgd291bGQgcmVqZWN0CisgKgkJYSBzZWNvbmQg QUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5ULiAgUGFydGl0aW9uIGNoaWxkcmVuCisgKgkJ aGF2ZSBubyBjb2x1bW4gbGlzdCwgc28gdGhlaXIgTk9UIE5VTExzIGZhbGwgdGhyb3VnaCBoZXJl LgorICoKKyAqCQlFYWNoIGNvbnR5cGUgaXMgZ2F0ZWQgb24gdGhlIG1hdGNoaW5nIGtpbmQgaW4g dGhlIG9ubHkgLyBleGNlcHQKKyAqCQl2b2NhYnVsYXJ5LCBzbyBjYWxsZXJzIGNhbiBwcm9kdWNl IGUuZy4gYW4gRkstb25seSBwYXNzCisgKgkJKG9ubHkgPT4gJ2ZvcmVpZ25fa2V5Jykgb3IgYSBw dWIvc3ViIGNsb25lIHRoYXQga2VlcHMgb25seQorICoJCXRoZSBwcmltYXJ5IGtleSAoZXhjZXB0 ID0+ICd1bmlxdWUsY2hlY2ssZm9yZWlnbl9rZXksZXhjbHVzaW9uJykuCisgKgkJTk9UIE5VTEwg aXMgaW50ZW50aW9uYWxseSBub3QgaW4gdGhlIHZvY2FidWxhcnkgLSBhbHdheXMgZW1pdHRlZAor ICoJCXNvIGNsb25lZCBzY2hlbWFzIGRvbid0IHNpbGVudGx5IGFjY2VwdCBOVUxMcyB0aGUgc291 cmNlIHdvdWxkCisgKgkJaGF2ZSByZWplY3RlZC4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRfbG9j YWxfY29uc3RyYWludHMoVGFibGVEZGxDb250ZXh0ICpjdHgpCit7CisJUmVsYXRpb24JY29uUmVs OworCVN5c1NjYW5EZXNjIGNvblNjYW47CisJU2NhbktleURhdGEgY29uS2V5OworCUhlYXBUdXBs ZQljb25UdXA7CisJYm9vbAkJaXNfcGFydGl0aW9uID0gY3R4LT5yZWwtPnJkX3JlbC0+cmVsaXNw YXJ0aXRpb247CisJTGlzdAkgICAqZmtfc3RtdHMgPSBOSUw7CisKKwljb25SZWwgPSB0YWJsZV9v cGVuKENvbnN0cmFpbnRSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCVNjYW5LZXlJbml0 KCZjb25LZXksCisJCQkJQW51bV9wZ19jb25zdHJhaW50X2NvbnJlbGlkLAorCQkJCUJURXF1YWxT dHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKGN0eC0+cmVsaWQp KTsKKwljb25TY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29uc3RyYWludFJlbGlk VHlwaWROYW1lSW5kZXhJZCwKKwkJCQkJCQkJIHRydWUsIE5VTEwsIDEsICZjb25LZXkpOworCisJ d2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQoY29uVHVwID0gc3lzdGFibGVfZ2V0bmV4dChjb25TY2Fu KSkpCisJeworCQlGb3JtX3BnX2NvbnN0cmFpbnQgY29uID0gKEZvcm1fcGdfY29uc3RyYWludCkg R0VUU1RSVUNUKGNvblR1cCk7CisKKwkJaWYgKCFjb24tPmNvbmlzbG9jYWwpCisJCQljb250aW51 ZTsKKworCQkvKgorCQkgKiBFYWNoIGNvbnR5cGUgaXMgZ2F0ZWQgb24gaXRzIGtpbmQgaW4gdGhl IG9ubHkgLyBleGNlcHQKKwkJICogdm9jYWJ1bGFyeS4gIENIRUNLIGlzIGFsc28gc2tpcHBlZCBm b3Igbm9uLXBhcnRpdGlvbiByZWxhdGlvbnMKKwkJICogYmVjYXVzZSBhcHBlbmRfaW5saW5lX2No ZWNrX2NvbnN0cmFpbnRzIGVtaXRzIHRob3NlIGlubGluZSBpbgorCQkgKiB0aGUgQ1JFQVRFIFRB QkxFIGJvZHk7IHBhcnRpdGlvbiBjaGlsZHJlbiBoYXZlIG5vIGNvbHVtbiBsaXN0CisJCSAqIHRv IGxpdmUgaW4sIHNvIHRoZXkgY29tZSB0aHJvdWdoIHRoaXMgbG9vcC4gIE5PVCBOVUxMIGlzIG5v dCBhCisJCSAqIGZpbHRlcmFibGUga2luZCAtIGVtaXR0ZWQgdW5jb25kaXRpb25hbGx5IHRvIGF2 b2lkIHByb2R1Y2luZworCQkgKiBzY2hlbWFzIHRoYXQgc2lsZW50bHkgYWNjZXB0IE5VTExzIHRo ZSBzb3VyY2Ugd291bGQgaGF2ZQorCQkgKiByZWplY3RlZC4KKwkJICovCisJCXN3aXRjaCAoY29u LT5jb250eXBlKQorCQl7CisJCQljYXNlIENPTlNUUkFJTlRfUFJJTUFSWToKKwkJCQlpZiAoIWlz X2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9QUklNQVJZX0tFWSkpCisJCQkJCWNv bnRpbnVlOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX1VOSVFVRToKKwkJCQlpZiAo IWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9VTklRVUUpKQorCQkJCQljb250 aW51ZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9DSEVDSzoKKwkJCQlpZiAoIWlz X2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9DSEVDSykpCisJCQkJCWNvbnRpbnVl OworCisJCQkJLyoKKwkJCQkgKiBGb3Igbm9uLXBhcnRpdGlvbiByZWxhdGlvbnMsIENIRUNLIGlz IG5vcm1hbGx5IGVtaXR0ZWQKKwkJCQkgKiBpbmxpbmUgaW4gdGhlIENSRUFURSBUQUJMRSBib2R5 IGJ5CisJCQkJICogYXBwZW5kX2lubGluZV9jaGVja19jb25zdHJhaW50cywgc28gd2Ugc2tpcCBp dCBoZXJlIHRvCisJCQkJICogYXZvaWQgZG91YmxlIGVtaXNzaW9uLiAgQnV0IHdoZW4gS0lORF9U QUJMRSBpcyBub3QgaW4KKwkJCQkgKiB0aGUgYWN0aXZlIGZpbHRlciAoZS5nLiBvbmx5PT4nY2hl Y2snIG9yIGEgY2xvbmUgdGhhdAorCQkJCSAqIHRhcmdldHMgb25seSBzdWItb2JqZWN0cyksIHRo ZSBpbmxpbmUgcGFzcyBuZXZlciBydW5zOworCQkJCSAqIGZhbGwgdGhyb3VnaCBhbmQgZW1pdCBl YWNoIENIRUNLIHZpYSBBTFRFUiBUQUJMRSBzbyB0aGUKKwkJCQkgKiB1c2VyIGFjdHVhbGx5IGdl dHMgdGhlIGNvbnN0cmFpbnQgdGhleSBhc2tlZCBmb3IuCisJCQkJICovCisJCQkJaWYgKCFpc19w YXJ0aXRpb24gJiYKKwkJCQkJaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1RB QkxFKSkKKwkJCQkJY29udGludWU7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRfRk9S RUlHTjoKKwkJCQlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9GT1JF SUdOX0tFWSkpCisJCQkJCWNvbnRpbnVlOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5U X0VYQ0xVU0lPTjoKKwkJCQlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lO RF9FWENMVVNJT04pKQorCQkJCQljb250aW51ZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RS QUlOVF9OT1ROVUxMOgorCQkJCS8qCisJCQkJICogT3V0LW9mLWxpbmUgTk9UIE5VTEwgaXMgY29u Y2VwdHVhbGx5IHBhcnQgb2YgdGhlCisJCQkJICogdGFibGUgZGVmaW5pdGlvbjogZ2F0aW5nIGl0 IG9uIEtJTkRfVEFCTEUgbWVhbnMgYW4KKwkJCQkgKiBvbmx5PWZvcmVpZ25fa2V5IHNlY29uZCBw YXNzIGRvZXMgbm90IHJlLWVtaXQKKwkJCQkgKiBOT1QgTlVMTHMgdGhhdCB0aGUgZmlyc3QgcGFz cyBhbHJlYWR5IGNyZWF0ZWQsCisJCQkJICogd2hpbGUgdGhlIG5vLW9wdGlvbnMgZGVmYXVsdCBz dGlsbCBlbWl0cyB0aGVtLgorCQkJCSAqLworCQkJCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgs IFRBQkxFX0RETF9LSU5EX1RBQkxFKSkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKCFpc19wYXJ0 aXRpb24gJiYKKwkJCQkJbGlzdF9tZW1iZXJfb2lkKGN0eC0+c2tpcF9ub3RudWxsX29pZHMsIGNv bi0+b2lkKSkKKwkJCQkJY29udGludWU7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCS8q CisJCQkJICogQW55IGZ1dHVyZSBjb250eXBlIHRoZSB2b2NhYnVsYXJ5IGRvZXMgbm90IHlldCBj b3ZlcjoKKwkJCQkgKiBmYWxsIHRocm91Z2ggYW5kIGVtaXQgaXQgdmlhIHBnX2dldF9jb25zdHJh aW50ZGVmX2NvbW1hbmQsCisJCQkJICogbWF0Y2hpbmcgdGhlIG9yaWdpbmFsIGxvb3AncyAiZW1p dCB1bmxlc3MgZmlsdGVyZWQiCisJCQkJICogYmVoYXZpb3IuICBUaGlzIGlzIHVucmVhY2hhYmxl IGluIGN1cnJlbnQgUEcgKGV2ZXJ5CisJCQkJICogY29udHlwZSBhYm92ZSBpcyBlbnVtZXJhdGVk KSBidXQga2VwdCBkZWZlbnNpdmUgYWdhaW5zdAorCQkJCSAqIGEgbmV3IGNvbnR5cGUgYmVpbmcg aW50cm9kdWNlZC4KKwkJCQkgKi8KKwkJCQlicmVhazsKKwkJfQorCisJCXsKKwkJCWNoYXIJICAg KmNvbmJvZHkgPSBwZ19nZXRfY29uc3RyYWludGRlZl9ib2R5KGNvbi0+b2lkKTsKKworCQkJcmVz ZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1Ziwg IkFMVEVSIFRBQkxFICVzIEFERCBDT05TVFJBSU5UICVzICVzOyIsCisJCQkJCQkJIGN0eC0+cXVh bG5hbWUsCisJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihjb24tPmNvbm5hbWUpKSwK KwkJCQkJCQkgY29uYm9keSk7CisKKwkJCS8qCisJCQkgKiBEZWZlciBGSyBzdGF0ZW1lbnRzIHNv IHRoZXkgYXJlIGVtaXR0ZWQgYWZ0ZXIgYWxsIG90aGVyCisJCQkgKiBjb25zdHJhaW50cy4gIEEg c2VsZi1yZWZlcmVuY2luZyBGSyAoUkVGRVJFTkNFUyBzYW1lX3RhYmxlKQorCQkJICogcmVxdWly ZXMgdGhlIFBLL1VOSVFVRSBpdCB0YXJnZXRzIHRvIGV4aXN0IGZpcnN0LCBhbmQgYmVjYXVzZQor CQkJICogdGhlIGNhdGFsb2cgc2NhbiByZXR1cm5zIGNvbnN0cmFpbnRzIGluIG5hbWUgb3JkZXIs IGFuIEZLIHdob3NlCisJCQkgKiBuYW1lIHNvcnRzIGJlZm9yZSB0aGUgUEsgbmFtZSB3b3VsZCBv dGhlcndpc2UgYmUgZW1pdHRlZCBmaXJzdAorCQkJICogYW5kIGZhaWwgd2l0aCAidGhlcmUgaXMg bm8gdW5pcXVlIGNvbnN0cmFpbnQgbWF0Y2hpbmcgZ2l2ZW4KKwkJCSAqIGtleXMiLgorCQkJICov CisJCQlpZiAoY29uLT5jb250eXBlID09IENPTlNUUkFJTlRfRk9SRUlHTikKKwkJCQlma19zdG10 cyA9IGxhcHBlbmQoZmtfc3RtdHMsIHBzdHJkdXAoY3R4LT5idWYuZGF0YSkpOworCQkJZWxzZQor CQkJCWFwcGVuZF9zdG10KGN0eCk7CisKKwkJCXBmcmVlKGNvbmJvZHkpOworCQl9CisJfQorCXN5 c3RhYmxlX2VuZHNjYW4oY29uU2Nhbik7CisJdGFibGVfY2xvc2UoY29uUmVsLCBBY2Nlc3NTaGFy ZUxvY2spOworCisJLyogQXBwZW5kIGRlZmVycmVkIEZLIHN0YXRlbWVudHMgYWZ0ZXIgYWxsIG90 aGVyIGNvbnN0cmFpbnRzLiAqLworCWN0eC0+c3RhdGVtZW50cyA9IGxpc3RfY29uY2F0KGN0eC0+ c3RhdGVtZW50cywgZmtfc3RtdHMpOworfQorCisvKgorICogZW1pdF9ydWxlcworICoJCUNSRUFU RSBSVUxFIHBlciBjYWNoZWQgcmV3cml0ZSBydWxlIG9uIHRoZSByZWxhdGlvbi4KKyAqLworc3Rh dGljIHZvaWQKK2VtaXRfcnVsZXMoVGFibGVEZGxDb250ZXh0ICpjdHgpCit7CisJaWYgKCFpc19r aW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVfRERMX0tJTkRfUlVMRSkgfHwKKwkJY3R4LT5yZWwtPnJk X3J1bGVzID09IE5VTEwpCisJCXJldHVybjsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgY3R4LT5y ZWwtPnJkX3J1bGVzLT5udW1Mb2NrczsgaSsrKQorCXsKKwkJT2lkCQkJcnVsZWlkID0gY3R4LT5y ZWwtPnJkX3J1bGVzLT5ydWxlc1tpXS0+cnVsZUlkOworCQljaGFyCSAgICpydWxlZGVmX3N0cjsK KworCQlydWxlZGVmX3N0ciA9IHBnX2dldF9ydWxlZGVmX2RkbChydWxlaWQpOworCQlyZXNldFN0 cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYs IHJ1bGVkZWZfc3RyKTsKKwkJYXBwZW5kX3N0bXQoY3R4KTsKKwkJcGZyZWUocnVsZWRlZl9zdHIp OworCX0KK30KKworLyoKKyAqIGVtaXRfc3RhdGlzdGljcworICoJCUNSRUFURSBTVEFUSVNUSUNT IHBlciBleHRlbmRlZCBzdGF0aXN0aWNzIG9iamVjdCBvbiB0aGUgcmVsYXRpb24uCisgKi8KK3N0 YXRpYyB2b2lkCitlbWl0X3N0YXRpc3RpY3MoVGFibGVEZGxDb250ZXh0ICpjdHgpCit7CisJUmVs YXRpb24Jc3RhdFJlbDsKKwlTeXNTY2FuRGVzYyBzdGF0U2NhbjsKKwlTY2FuS2V5RGF0YSBzdGF0 S2V5OworCUhlYXBUdXBsZQlzdGF0VHVwOworCisJaWYgKCFpc19raW5kX2luY2x1ZGVkKGN0eCwg VEFCTEVfRERMX0tJTkRfU1RBVElTVElDUykpCisJCXJldHVybjsKKworCXN0YXRSZWwgPSB0YWJs ZV9vcGVuKFN0YXRpc3RpY0V4dFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJU2Nhbktl eUluaXQoJnN0YXRLZXksCisJCQkJQW51bV9wZ19zdGF0aXN0aWNfZXh0X3N0eHJlbGlkLAorCQkJ CUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKGN0 eC0+cmVsaWQpKTsKKwlzdGF0U2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihzdGF0UmVsLCBTdGF0 aXN0aWNFeHRSZWxpZEluZGV4SWQsCisJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJnN0YXRLZXkp OworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQoc3RhdFR1cCA9IHN5c3RhYmxlX2dldG5leHQo c3RhdFNjYW4pKSkKKwl7CisJCUZvcm1fcGdfc3RhdGlzdGljX2V4dCBzdGF0ID0gKEZvcm1fcGdf c3RhdGlzdGljX2V4dCkgR0VUU1RSVUNUKHN0YXRUdXApOworCQljaGFyCSAgICpzdGF0ZGVmID0g cGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfZGRsKHN0YXQtPm9pZCk7CisKKwkJcmVzZXRTdHJpbmdJ bmZvKCZjdHgtPmJ1Zik7CisJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiJXM7Iiwgc3Rh dGRlZik7CisJCWFwcGVuZF9zdG10KGN0eCk7CisJCXBmcmVlKHN0YXRkZWYpOworCX0KKwlzeXN0 YWJsZV9lbmRzY2FuKHN0YXRTY2FuKTsKKwl0YWJsZV9jbG9zZShzdGF0UmVsLCBBY2Nlc3NTaGFy ZUxvY2spOworfQorCisvKgorICogZW1pdF9yZXBsaWNhX2lkZW50aXR5CisgKgkJQUxURVIgVEFC TEUgcXVhbG5hbWUgUkVQTElDQSBJREVOVElUWSAuLi4gLSBlbWl0dGVkIG9ubHkgd2hlbiB0aGUK KyAqCQlyZWxyZXBsaWRlbnQgZGlmZmVycyBmcm9tIHRoZSBkZWZhdWx0ICgnZCcgPSB1c2UgcHJp bWFyeSBrZXkpLgorICovCitzdGF0aWMgdm9pZAorZW1pdF9yZXBsaWNhX2lkZW50aXR5KFRhYmxl RGRsQ29udGV4dCAqY3R4KQoreworCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RE TF9LSU5EX1JFUExJQ0FfSURFTlRJVFkpKQorCQlyZXR1cm47CisJaWYgKGN0eC0+cmVsLT5yZF9y ZWwtPnJlbHJlcGxpZGVudCA9PSBSRVBMSUNBX0lERU5USVRZX0RFRkFVTFQpCisJCXJldHVybjsK KworCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCXN3aXRjaCAoY3R4LT5yZWwtPnJkX3Jl bC0+cmVscmVwbGlkZW50KQorCXsKKwkJY2FzZSBSRVBMSUNBX0lERU5USVRZX05PVEhJTkc6CisJ CQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCQkgIkFMVEVSIFRBQkxFICVzIFJF UExJQ0EgSURFTlRJVFkgTk9USElORzsiLAorCQkJCQkJCSBjdHgtPnF1YWxuYW1lKTsKKwkJCWFw cGVuZF9zdG10KGN0eCk7CisJCQlicmVhazsKKwkJY2FzZSBSRVBMSUNBX0lERU5USVRZX0ZVTEw6 CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCQkgIkFMVEVSIFRBQkxFICVz IFJFUExJQ0EgSURFTlRJVFkgRlVMTDsiLAorCQkJCQkJCSBjdHgtPnF1YWxuYW1lKTsKKwkJCWFw cGVuZF9zdG10KGN0eCk7CisJCQlicmVhazsKKwkJY2FzZSBSRVBMSUNBX0lERU5USVRZX0lOREVY OgorCQkJeworCQkJCU9pZAkJCXJlcGxpZHggPSBSZWxhdGlvbkdldFJlcGxpY2FJbmRleChjdHgt PnJlbCk7CisKKwkJCQlpZiAoT2lkSXNWYWxpZChyZXBsaWR4KSkKKwkJCQl7CisJCQkJCWNoYXIJ ICAgKmlkeG5hbWUgPSBnZXRfcmVsX25hbWUocmVwbGlkeCk7CisKKwkJCQkJaWYgKGlkeG5hbWUg PT0gTlVMTCkKKwkJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVf VU5ERUZJTkVEX09CSkVDVCksCisJCQkJCQkJCSBlcnJtc2coInJlcGxpY2EgaWRlbnRpdHkgaW5k ZXggd2l0aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLAorCQkJCQkJCQkJCXJlcGxpZHgpLAorCQkJ CQkJCQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1cnJlbnRseSBkcm9wcGVkLiIp KSk7CisKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJCQkJCQkgIkFMVEVS IFRBQkxFICVzIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggJXM7IiwKKwkJCQkJCQkJCSBj dHgtPnF1YWxuYW1lLAorCQkJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoaWR4bmFtZSkpOworCQkJ CQlhcHBlbmRfc3RtdChjdHgpOworCQkJCQlwZnJlZShpZHhuYW1lKTsKKwkJCQl9CisJCQl9CisJ CQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBlbWl0X3Jsc190b2dnbGVzCisgKgkJQUxURVIgVEFC TEUgcXVhbG5hbWUgRU5BQkxFIC8gRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZLgorICovCitzdGF0 aWMgdm9pZAorZW1pdF9ybHNfdG9nZ2xlcyhUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwlpZiAo IWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9STFMpKQorCQlyZXR1cm47CisK KwlpZiAoY3R4LT5yZWwtPnJkX3JlbC0+cmVscm93c2VjdXJpdHkpCisJeworCQlyZXNldFN0cmlu Z0luZm8oJmN0eC0+YnVmKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJCQkg IkFMVEVSIFRBQkxFICVzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7IiwKKwkJCQkJCSBjdHgt PnF1YWxuYW1lKTsKKwkJYXBwZW5kX3N0bXQoY3R4KTsKKwl9CisJaWYgKGN0eC0+cmVsLT5yZF9y ZWwtPnJlbGZvcmNlcm93c2VjdXJpdHkpCisJeworCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVm KTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJCQkgIkFMVEVSIFRBQkxFICVz IEZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWTsiLAorCQkJCQkJIGN0eC0+cXVhbG5hbWUpOworCQlh cHBlbmRfc3RtdChjdHgpOworCX0KK30KKworLyoKKyAqIGVtaXRfcGFydGl0aW9uX2NoaWxkcmVu CisgKgkJRm9yIGVhY2ggZGlyZWN0IHBhcnRpdGlvbiBjaGlsZCBvZiBhIHBhcnRpdGlvbmVkLXRh YmxlIHBhcmVudCwKKyAqCQlyZWN1cnNpdmVseSBjYWxsIHBnX2dldF90YWJsZV9kZGxfaW50ZXJu YWwgYW5kIGFwcGVuZCB0aGUgY2hpbGQncworICoJCXN0YXRlbWVudHMuICBFYWNoIGNoaWxkJ3Mg b3duIERETCBoYW5kbGVzIGZ1cnRoZXIgbGV2ZWxzIHRocm91Z2gKKyAqCQl0aGUgc2FtZSByZWN1 cnNpb24uCisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X3BhcnRpdGlvbl9jaGlsZHJlbihUYWJsZURk bENvbnRleHQgKmN0eCkKK3sKKwlMaXN0CSAgICpjaGlsZHJlbjsKKwlMaXN0Q2VsbCAgICpsYzsK KworCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1BBUlRJVElPTikg fHwKKwkJY3R4LT5yZWwtPnJkX3JlbC0+cmVsa2luZCAhPSBSRUxLSU5EX1BBUlRJVElPTkVEX1RB QkxFKQorCQlyZXR1cm47CisKKwljaGlsZHJlbiA9IGZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW4o Y3R4LT5yZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlmb3JlYWNoKGxjLCBjaGlsZHJlbikKKwl7 CisJCU9pZAkJCWNoaWxkb2lkID0gbGZpcnN0X29pZChsYyk7CisJCVRhYmxlRGRsQ29udGV4dCBj aGlsZGN0eCA9IHswfTsKKwkJTGlzdAkgICAqY2hpbGRzdG10czsKKworCQkvKgorCQkgKiBFYWNo IHJlY3Vyc2l2ZSBpbnZvY2F0aW9uIHJlLWRlcml2ZXMgaXRzIG93biByZWwsIG5hbWVzcGFjZSwK KwkJICogcXVhbG5hbWUsIE5PVCBOVUxMIGNhY2hlLCBidWZmZXIsIGFuZCBzdGF0ZW1lbnQgbGlz dCBpbnNpZGUKKwkJICogcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbC4gIFRoZSB1c2VyLXN1cHBs aWVkIG9wdGlvbiBmaWVsZHMKKwkJICogY2Fycnkgb3ZlciB2ZXJiYXRpbSB3aXRoIG9uZSBleGNl cHRpb246IEtJTkRfUEFSVElUSU9OIGlzIGEKKwkJICogImdhdGUiIGtpbmQgdGhhdCBjb250cm9s cyB3aGV0aGVyIHdlIHJlY3Vyc2UgYXQgYWxsLCBub3QgYQorCQkgKiBraW5kIHRoYXQgdGhlIGNo aWxkcmVuIHRoZW1zZWx2ZXMgZXZlciBlbWl0LiAgSWYgd2UgcHJvcGFnYXRlZAorCQkgKiBhbiBv bmx5LXNldCB0aGF0IGNvbnRhaW5lZCBQQVJUSVRJT04gaW50byBhIGNoaWxkLCB0aGUgY2hpbGQK KwkJICogd291bGQgbm90IGVtaXQgaXRzIG93biBDUkVBVEUgVEFCTEUgKEtJTkRfVEFCTEUgYWJz ZW50KSBub3IKKwkJICogYW55IHN1Yi1vYmplY3RzLCBhbmQgdGhlIHJlY3Vyc2lvbiB3b3VsZCBw cm9kdWNlIG5vdGhpbmcuICBTbworCQkgKiBzdHJpcCBQQVJUSVRJT04gb3V0IG9mIG9ubHlfa2lu ZHMgd2hlbiByZWN1cnNpbmc7IGlmIHRoYXQKKwkJICogZW1wdGllcyB0aGUgc2V0LCBkcm9wIHRo ZSBmaWx0ZXIgZW50aXJlbHkgc28gdGhlIGNoaWxkIGVtaXRzCisJCSAqIGl0cyBmdWxsIERETC4g IGV4Y2VwdF9raW5kcyBwYXNzZXMgdGhyb3VnaCB1bmNoYW5nZWQgYmVjYXVzZQorCQkgKiBQQVJU SVRJT04gaW4gdGhlIGV4Y2VwdC1zZXQgYWxyZWFkeSBzdG9wcGVkIHVzIGZyb20gZ2V0dGluZwor CQkgKiBoZXJlLgorCQkgKi8KKwkJY2hpbGRjdHgucmVsaWQgPSBjaGlsZG9pZDsKKwkJY2hpbGRj dHgucHJldHR5ID0gY3R4LT5wcmV0dHk7CisJCWNoaWxkY3R4Lm5vX293bmVyID0gY3R4LT5ub19v d25lcjsKKwkJY2hpbGRjdHgubm9fdGFibGVzcGFjZSA9IGN0eC0+bm9fdGFibGVzcGFjZTsKKwkJ Y2hpbGRjdHguc2NoZW1hX3F1YWxpZmllZCA9IGN0eC0+c2NoZW1hX3F1YWxpZmllZDsKKwkJY2hp bGRjdHgub25seV9raW5kcyA9IGN0eC0+b25seV9raW5kczsKKwkJY2hpbGRjdHguZXhjZXB0X2tp bmRzID0gY3R4LT5leGNlcHRfa2luZHM7CisKKwkJLyoKKwkJICogV2hlbiBzY2hlbWFfcXVhbGlm aWVkIGlzIGZhbHNlLCB0aGUgY29udHJhY3QgaXMgdGhhdCB0aGUgb3V0cHV0CisJCSAqIGlzIHJl cGxheWFibGUgd2l0aCB0aGUgcGFyZW50J3Mgc2NoZW1hIGluIHNlYXJjaF9wYXRoLiAgVGhhdAor CQkgKiBjb250cmFjdCBjYW5ub3QgaG9sZCBmb3IgYSBjaGlsZCB0aGF0IGxpdmVzIGluIGEgZGlm ZmVyZW50IHNjaGVtYToKKwkJICogaXRzIG93biBuYW1lIHdvdWxkIGJlIGFtYmlndW91cyAobGFu ZGluZyBpbiB3aGF0ZXZlciBzY2hlbWEgaXMKKwkJICogZmlyc3QgaW4gc2VhcmNoX3BhdGgpIGFu ZCByZWZlcmVuY2VzIGJhY2sgdG8gdGhlIHBhcmVudCB3b3VsZCBoYXZlCisJCSAqIHRvIGJlIHNj aGVtYS1xdWFsaWZpZWQgYW55d2F5LiAgRm9yY2UgZnVsbCBxdWFsaWZpY2F0aW9uIHNvIHRoZQor CQkgKiBjaGlsZCdzIERETCBpcyB1bmFtYmlndW91cyByZWdhcmRsZXNzIG9mIHRoZSBjYWxsZXIn cyBzZWFyY2hfcGF0aC4KKwkJICovCisJCWlmICghY2hpbGRjdHguc2NoZW1hX3F1YWxpZmllZCAm JgorCQkJZ2V0X3JlbF9uYW1lc3BhY2UoY2hpbGRvaWQpICE9IGN0eC0+YmFzZV9uYW1lc3BhY2Up CisJCQljaGlsZGN0eC5zY2hlbWFfcXVhbGlmaWVkID0gdHJ1ZTsKKworCQlpZiAoY2hpbGRjdHgu b25seV9raW5kcyAhPSBOVUxMICYmCisJCQlibXNfaXNfbWVtYmVyKChpbnQpIFRBQkxFX0RETF9L SU5EX1BBUlRJVElPTiwKKwkJCQkJCSAgY2hpbGRjdHgub25seV9raW5kcykpCisJCXsKKwkJCUJp dG1hcHNldCAgKmNoaWxkX29ubHkgPSBibXNfY29weShjaGlsZGN0eC5vbmx5X2tpbmRzKTsKKwor CQkJY2hpbGRfb25seSA9IGJtc19kZWxfbWVtYmVyKGNoaWxkX29ubHksCisJCQkJCQkJCQkJKGlu dCkgVEFCTEVfRERMX0tJTkRfUEFSVElUSU9OKTsKKwkJCWlmIChibXNfaXNfZW1wdHkoY2hpbGRf b25seSkpCisJCQl7CisJCQkJYm1zX2ZyZWUoY2hpbGRfb25seSk7CisJCQkJY2hpbGRjdHgub25s eV9raW5kcyA9IE5VTEw7CisJCQl9CisJCQllbHNlCisJCQkJY2hpbGRjdHgub25seV9raW5kcyA9 IGNoaWxkX29ubHk7CisJCX0KKworCQljaGlsZHN0bXRzID0gcGdfZ2V0X3RhYmxlX2RkbF9pbnRl cm5hbCgmY2hpbGRjdHgpOworCQljdHgtPnN0YXRlbWVudHMgPSBsaXN0X2NvbmNhdChjdHgtPnN0 YXRlbWVudHMsIGNoaWxkc3RtdHMpOworCX0KKwlsaXN0X2ZyZWUoY2hpbGRyZW4pOworfQorCisv KgorICogcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbAorICoJCUdlbmVyYXRlIERETCBzdGF0ZW1l bnRzIHRvIHJlY3JlYXRlIGEgcmVndWxhciBvciBwYXJ0aXRpb25lZCB0YWJsZS4KKyAqCisgKiBU aGUgY2FsbGVyIGluaXRpYWxpemVzICpjdHggd2l0aCB0aGUgdXNlci1zdXBwbGllZCBvcHRpb24g ZmllbGRzCisgKiAocmVsaWQsIHByZXR0eSwgbm9fb3duZXIsIG5vX3RhYmxlc3BhY2UsIHNjaGVt YV9xdWFsaWZpZWQsCisgKiBvbmx5X2tpbmRzLCBleGNlcHRfa2luZHMpLiAgVGhpcyBmdW5jdGlv biBvcGVucyB0aGUgcmVsYXRpb24sCisgKiB2YWxpZGF0ZXMgYWNjZXNzLCBwb3B1bGF0ZXMgdGhl IGRlcml2ZWQgZmllbGRzIChyZWwsIHF1YWxuYW1lLAorICogbm5fZW50cmllcywgLi4uKSwgcnVu cyB0aGUgZW1pc3Npb24gcGFzc2VzLCBhbmQgcmV0dXJucyB0aGUKKyAqIGFjY3VtdWxhdGVkIHN0 YXRlbWVudCBsaXN0LgorICoKKyAqIEVhY2ggZW1pc3Npb24gaGVscGVyIGNvbnN1bHRzIGlzX2tp bmRfaW5jbHVkZWQoKSB0byBkZWNpZGUgd2hldGhlcgorICogaXQgc2hvdWxkIHJ1bi4gIFRoZSB0 YWJsZS1wcm9wZXIgcGFzc2VzIChDUkVBVEUgVEFCTEUgLyBPV05FUiAvCisgKiBBTFRFUiBDT0xV TU4gLi4uIFNFVCBERUZBVUxUIC8gQUxURVIgQ09MVU1OIC4uLiBTRVQgKC4uLikpIGFyZQorICog Z3JvdXBlZCB1bmRlciBLSU5EX1RBQkxFIHNvIHRoZSBGSy1vbmx5IC8gc3ViLW9iamVjdC1vbmx5 IHdvcmtmbG93CisgKiBpcyBleHByZXNzaWJsZSBhcyBhIHNpbmdsZSBvbmx5IG9yIGV4Y2VwdCBs aXN0LgorICoKKyAqIFRyaWdnZXIgYW5kIHBvbGljeSBlbWlzc2lvbiBhcmUgc2NhZmZvbGRlZCBi dXQgY3VycmVudGx5IGRpc2FibGVkCisgKiAoI2lmIDApIC0gdGhleSB3aWxsIGJlY29tZSBhIHNp bmdsZSBoZWxwZXIgY2FsbCBvbmNlIHRoZSBzdGFuZGFsb25lCisgKiBwZ19nZXRfdHJpZ2dlcl9k ZGwgLyBwZ19nZXRfcG9saWN5X2RkbCBoZWxwZXJzIGxhbmQuCisgKi8KK3N0YXRpYyBMaXN0ICoK K3BnX2dldF90YWJsZV9kZGxfaW50ZXJuYWwoVGFibGVEZGxDb250ZXh0ICpjdHgpCit7CisJUmVs YXRpb24JcmVsOworCWNoYXIJCXJlbGtpbmQ7CisJQWNsUmVzdWx0CWFjbHJlc3VsdDsKKworCXJl bCA9IHRhYmxlX29wZW4oY3R4LT5yZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJlbGtpbmQg PSByZWwtPnJkX3JlbC0+cmVsa2luZDsKKworCS8qCisJICogVGhlIGluaXRpYWwgY3V0IG9ubHkg c3VwcG9ydHMgb3JkaW5hcnkgYW5kIHBhcnRpdGlvbmVkIHRhYmxlcy4gIFZpZXdzLAorCSAqIG1h dHZpZXdzLCBmb3JlaWduIHRhYmxlcywgc2VxdWVuY2VzLCBpbmRleGVzLCBjb21wb3NpdGUgdHlw ZXMsIGFuZAorCSAqIFRPQVNUIHRhYmxlcyBhcmUgb3V0IG9mIHNjb3BlIGZvciBub3cuCisJICov CisJaWYgKHJlbGtpbmQgIT0gUkVMS0lORF9SRUxBVElPTiAmJiByZWxraW5kICE9IFJFTEtJTkRf UEFSVElUSU9ORURfVEFCTEUpCisJeworCQljaGFyCSAgICpyZWxuYW1lID0gcHN0cmR1cChSZWxh dGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsKKworCQl0YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1No YXJlTG9jayk7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19P QkpFQ1RfVFlQRSksCisJCQkJIGVycm1zZygiXCIlc1wiIGlzIG5vdCBhbiBvcmRpbmFyeSBvciBw YXJ0aXRpb25lZCB0YWJsZSIsCisJCQkJCQlyZWxuYW1lKSkpOworCX0KKworCS8qIENhbGxlciBu ZWVkcyBTRUxFQ1Qgb24gdGhlIHRhYmxlIHRvIHJlYWQgaXRzIGRlZmluaXRpb24uICovCisJYWNs cmVzdWx0ID0gcGdfY2xhc3NfYWNsY2hlY2soY3R4LT5yZWxpZCwgR2V0VXNlcklkKCksIEFDTF9T RUxFQ1QpOworCWlmIChhY2xyZXN1bHQgIT0gQUNMQ0hFQ0tfT0spCisJCWFjbGNoZWNrX2Vycm9y KGFjbHJlc3VsdCwgT0JKRUNUX1RBQkxFLAorCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZShyZWwpKTsKKworCS8qCisJICogVmFsaWRhdGlvbjogaWYgdGhlIHRhYmxlIGhhcyBSRVBMSUNB IElERU5USVRZIFVTSU5HIElOREVYIGFuZCB0aGUKKwkgKiByZWZlcmVuY2VkIGluZGV4IHdvdWxk IG5vdCBiZSBlbWl0dGVkIHVuZGVyIHRoZSBhY3RpdmUgZmlsdGVyLCB0aGUKKwkgKiBlbWl0dGVk IFJFUExJQ0EgSURFTlRJVFkgY2xhdXNlIHdvdWxkIHJlZmVyZW5jZSBhbiBpbmRleCB0aGUgc2Ft ZSBEREwKKwkgKiBuZXZlciBwcm9kdWNlZC4gIERldGVybWluZSB3aGljaCBraW5kIHdvdWxkIGVt aXQgdGhlIGluZGV4IChvbmUgb2YKKwkgKiBwcmltYXJ5X2tleSAvIHVuaXF1ZSAvIGV4Y2x1c2lv biBmb3IgY29uc3RyYWludC1iYWNrZWQgaW5kZXhlcywKKwkgKiBvdGhlcndpc2UgdGhlIGdlbmVy aWMgImluZGV4IiBraW5kKSBhbmQgcmVxdWlyZSBpdCB0byBiZSBpbiBzY29wZQorCSAqIHdoZW5l dmVyICJyZXBsaWNhX2lkZW50aXR5IiBpcy4gIFRoZSBjaGVjayB1c2VzIGlzX2tpbmRfaW5jbHVk ZWQgc28KKwkgKiBpdCBjb3ZlcnMgYm90aCBmb3JtcyBuYXR1cmFsbHk6IGFuICJleGNlcHQiIGxp c3QgdGhhdCBvbWl0cyB0aGUKKwkgKiBzb3VyY2Uga2luZCwgYW5kIGFuICJvbmx5IiBsaXN0IHRo YXQgb21pdHMgaXQuCisJICovCisJaWYgKHJlbC0+cmRfcmVsLT5yZWxyZXBsaWRlbnQgPT0gUkVQ TElDQV9JREVOVElUWV9JTkRFWCAmJgorCQlpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVfRERM X0tJTkRfUkVQTElDQV9JREVOVElUWSkpCisJeworCQlPaWQJCQlyZXBsaWR4ID0gUmVsYXRpb25H ZXRSZXBsaWNhSW5kZXgocmVsKTsKKworCQlpZiAoT2lkSXNWYWxpZChyZXBsaWR4KSkKKwkJewor CQkJVGFibGVEZGxLaW5kIGlkeF9raW5kID0gVEFCTEVfRERMX0tJTkRfSU5ERVg7CisJCQlPaWQJ CQljb25vaWQgPSBnZXRfaW5kZXhfY29uc3RyYWludChyZXBsaWR4KTsKKworCQkJaWYgKE9pZElz VmFsaWQoY29ub2lkKSkKKwkJCXsKKwkJCQlIZWFwVHVwbGUJY29uVHVwID0gU2VhcmNoU3lzQ2Fj aGUxKENPTlNUUk9JRCwKKwkJCQkJCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShjb25vaWQpKTsK KworCQkJCWlmIChIZWFwVHVwbGVJc1ZhbGlkKGNvblR1cCkpCisJCQkJeworCQkJCQlGb3JtX3Bn X2NvbnN0cmFpbnQgY29uID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNUKGNvblR1cCk7 CisKKwkJCQkJc3dpdGNoIChjb24tPmNvbnR5cGUpCisJCQkJCXsKKwkJCQkJCWNhc2UgQ09OU1RS QUlOVF9QUklNQVJZOgorCQkJCQkJCWlkeF9raW5kID0gVEFCTEVfRERMX0tJTkRfUFJJTUFSWV9L RVk7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIENPTlNUUkFJTlRfVU5JUVVFOgorCQkJCQkJ CWlkeF9raW5kID0gVEFCTEVfRERMX0tJTkRfVU5JUVVFOworCQkJCQkJCWJyZWFrOworCQkJCQkJ Y2FzZSBDT05TVFJBSU5UX0VYQ0xVU0lPTjoKKwkJCQkJCQlpZHhfa2luZCA9IFRBQkxFX0RETF9L SU5EX0VYQ0xVU0lPTjsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJYnJl YWs7CisJCQkJCX0KKwkJCQkJUmVsZWFzZVN5c0NhY2hlKGNvblR1cCk7CisJCQkJfQorCQkJfQor CisJCQlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBpZHhfa2luZCkpCisJCQl7CisJCQkJY2hh cgkgICAqcmVsbmFtZSA9IHBzdHJkdXAoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7CisJ CQkJY29uc3QgY2hhciAqaWR4X25hbWUgPSB0YWJsZV9kZGxfa2luZF9uYW1lc1soaW50KSBpZHhf a2luZF0ubmFtZTsKKworCQkJCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJ CQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRF Ul9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJSRVBMSUNBIElERU5USVRZIGZvciB0YWJsZSBcIiVz XCIgcmVxdWlyZXMga2luZCBcIiVzXCIgdG8gYmUgZW1pdHRlZCIsCisJCQkJCQkJCXJlbG5hbWUs IGlkeF9uYW1lKSwKKwkJCQkJCSBlcnJkZXRhaWwoIlRoZSB0YWJsZSdzIFJFUExJQ0EgSURFTlRJ VFkgVVNJTkcgSU5ERVggcmVmZXJlbmNlcyBhbiBpbmRleCBwcm9kdWNlZCBieSB0aGUgXCIlc1wi IGtpbmQsIHdoaWNoIGlzIG5vdCBpbiB0aGUgYWN0aXZlIGZpbHRlci4iLAorCQkJCQkJCQkgICBp ZHhfbmFtZSksCisJCQkJCQkgZXJyaGludCgiRWl0aGVyIGFkZCBcIiVzXCIgdG8gdGhlIGZpbHRl ciBvciByZW1vdmUgXCJyZXBsaWNhX2lkZW50aXR5XCIgZnJvbSBpdC4iLAorCQkJCQkJCQkgaWR4 X25hbWUpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIFBvcHVsYXRlIGRlcml2ZWQgZmll bGRzIG5vdyB0aGF0IHRoZSByZWxhdGlvbiBpcyBvcGVuIGFuZCB2YWxpZGF0ZWQuCisJICogVGhl IHJlbWFpbmluZyBkZXJpdmVkIGZpZWxkcyAobm5fZW50cmllcywgc2tpcF9ub3RudWxsX29pZHMs IGJ1ZiwKKwkgKiBzdGF0ZW1lbnRzKSBzdGFydCB6ZXJvZWQgdmlhIHRoZSBjYWxsZXIncyBgVGFi bGVEZGxDb250ZXh0IGN0eCA9IHswfWAKKwkgKiBpbml0aWFsaXplcjsgdGhlIE5PVCBOVUxMIGNh Y2hlIGlzIHBvcHVsYXRlZCBieSBjb2xsZWN0X2xvY2FsX25vdF9udWxsLAorCSAqIHRoZSBidWZm ZXIgaXMgaW5pdFN0cmluZ0luZm8nZCwgYW5kIGVhY2ggZW1pdCBwYXNzIGFwcGVuZHMgdG8KKwkg KiBzdGF0ZW1lbnRzIHZpYSBsYXBwZW5kLgorCSAqLworCWN0eC0+cmVsID0gcmVsOworCWN0eC0+ YmFzZV9uYW1lc3BhY2UgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWwpOworCWN0eC0+c2F2ZV9u ZXN0bGV2ZWwgPSAtMTsKKwljdHgtPnF1YWxuYW1lID0gbG9va3VwX3JlbG5hbWVfZm9yX2VtaXQo Y3R4LT5yZWxpZCwgY3R4LT5zY2hlbWFfcXVhbGlmaWVkLAorCQkJCQkJCQkJCQljdHgtPmJhc2Vf bmFtZXNwYWNlKTsKKworCS8qCisJICogVGVtcG9yYXJpbHkgb3ZlcnJpZGUgc2VhcmNoX3BhdGgg c28gdGhhdCB0aGUgcnVsZXV0aWxzIGhlbHBlcnMKKwkgKiAocGdfZ2V0X2luZGV4ZGVmX2RkbCwg cGdfZ2V0X2NvbnN0cmFpbnRkZWZfYm9keSwKKwkgKiBwZ19nZXRfc3RhdGlzdGljc29iamRlZl9k ZGwsIHBnX2dldF9ydWxlZGVmX2RkbCwgZXRjLikgcHJvZHVjZSBuYW1lcworCSAqIHRoYXQgbWF0 Y2ggdGhlIHNjaGVtYV9xdWFsaWZpZWQgZmxhZy4gIFRob3NlIGhlbHBlcnMgZGVjaWRlIHdoZXRo ZXIgdG8KKwkgKiBxdWFsaWZ5IGEgbmFtZSBieSBjYWxsaW5nIFJlbGF0aW9uSXNWaXNpYmxlKCks IHdoaWNoIGNoZWNrcyB3aGV0aGVyIHRoZQorCSAqIG9iamVjdCdzIHNjaGVtYSBhcHBlYXJzIGlu IHRoZSBhY3RpdmUgc2VhcmNoX3BhdGguCisJICoKKwkgKiBzY2hlbWFfcXVhbGlmaWVkID0gZmFs c2U6IG5hcnJvdyB0byB0aGUgYmFzZSBzY2hlbWEgc28gdGhhdCBzYW1lLXNjaGVtYQorCSAqIHJl ZmVyZW5jZXMgaW4gREVGQVVMVCBleHByZXNzaW9ucywgRksgdGFyZ2V0cywgaW5kZXhlcywgcnVs ZXMsIGFuZAorCSAqIHN0YXRpc3RpY3MgY29tZSBvdXQgdW5xdWFsaWZpZWQgYXV0b21hdGljYWxs eS4gIENyb3NzLXNjaGVtYSByZWZlcmVuY2VzCisJICogc3RheSBxdWFsaWZpZWQsIHdoaWNoIGlz IHRoZSBjb3JyZWN0bmVzcyByZXF1aXJlbWVudC4KKwkgKgorCSAqIHNjaGVtYV9xdWFsaWZpZWQg PSB0cnVlOiBuYXJyb3cgdG8gcGdfY2F0YWxvZyBvbmx5IHNvIHRoYXQgb2JqZWN0cyBpbgorCSAq IHRoZSBiYXNlIHNjaGVtYSAob3IgYW55IHVzZXIgc2NoZW1hIHRoZSBjYWxsZXIgcGxhY2VkIG9u IHNlYXJjaF9wYXRoKQorCSAqIGFyZSBub3QgcmVhY2hhYmxlIHdpdGhvdXQgcXVhbGlmaWNhdGlv biwgZm9yY2luZyBmdWxseS1xdWFsaWZpZWQgb3V0cHV0CisJICogZnJvbSBldmVyeSBoZWxwZXIg cmVnYXJkbGVzcyBvZiB0aGUgY2FsbGVyJ3Mgc2Vzc2lvbiBzZWFyY2hfcGF0aC4KKwkgKgorCSAq IEF0RU9YYWN0X0dVQyBjbGVhbnMgdXAgYXQgeGFjdCBlbmQgaWYgYW55dGhpbmcgdGhyb3dzIGJl dHdlZW4gaGVyZSBhbmQKKwkgKiB0aGUgZXhwbGljaXQgcmVzdG9yZSBiZWxvdzsgb24gdGhlIG5v cm1hbCBwYXRoIHdlIHJlc3RvcmUgcmlnaHQgYmVmb3JlCisJICogcmV0dXJuaW5nLgorCSAqLwor CWlmICghY3R4LT5zY2hlbWFfcXVhbGlmaWVkKQorCXsKKwkJY2hhcgkgICAqbnNwbmFtZSA9IGdl dF9uYW1lc3BhY2VfbmFtZShjdHgtPmJhc2VfbmFtZXNwYWNlKTsKKworCQlpZiAobnNwbmFtZSAh PSBOVUxMKQorCQl7CisJCQljb25zdCBjaGFyICpxbnNwID0gcXVvdGVfaWRlbnRpZmllcihuc3Bu YW1lKTsKKworCQkJY3R4LT5zYXZlX25lc3RsZXZlbCA9IE5ld0dVQ05lc3RMZXZlbCgpOworCQkJ KHZvaWQpIHNldF9jb25maWdfb3B0aW9uKCJzZWFyY2hfcGF0aCIsIHFuc3AsCisJCQkJCQkJCQkg UEdDX1VTRVJTRVQsIFBHQ19TX1NFU1NJT04sCisJCQkJCQkJCQkgR1VDX0FDVElPTl9TQVZFLCB0 cnVlLCAwLCBmYWxzZSk7CisJCQlpZiAocW5zcCAhPSBuc3BuYW1lKQorCQkJCXBmcmVlKChjaGFy ICopIHFuc3ApOworCQkJcGZyZWUobnNwbmFtZSk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJY3R4 LT5zYXZlX25lc3RsZXZlbCA9IE5ld0dVQ05lc3RMZXZlbCgpOworCQkodm9pZCkgc2V0X2NvbmZp Z19vcHRpb24oInNlYXJjaF9wYXRoIiwgInBnX2NhdGFsb2ciLAorCQkJCQkJCQkgUEdDX1VTRVJT RVQsIFBHQ19TX1NFU1NJT04sCisJCQkJCQkJCSBHVUNfQUNUSU9OX1NBVkUsIHRydWUsIDAsIGZh bHNlKTsKKwl9CisKKwkvKgorCSAqIENhY2hlIGxvY2FsbHktZGVjbGFyZWQgTk9UIE5VTEwgY29u c3RyYWludCBtZXRhZGF0YSBzbyB0aGUgY29sdW1uLSBlbWl0CisJICogaGVscGVycyBjYW4gcHJv ZHVjZSAiQ09OU1RSQUlOVCBuYW1lIE5PVCBOVUxMIiBpbmxpbmUgZm9yIHVzZXItbmFtZWQKKwkg KiBjb25zdHJhaW50cywgYW5kIHNvIHRoZSBjb25zdHJhaW50IGxvb3AgY2FuIGF2b2lkIGRvdWJs ZS1lbWl0dGluZyB0aGVtLgorCSAqLworCWN0eC0+bm5fZW50cmllcyA9IGNvbGxlY3RfbG9jYWxf bm90X251bGwocmVsLCAmY3R4LT5za2lwX25vdG51bGxfb2lkcyk7CisKKwlpbml0U3RyaW5nSW5m bygmY3R4LT5idWYpOworCisJLyoKKwkgKiBFbWlzc2lvbiBwYXNzZXMuICBPcmRlciBpcyBzaWdu aWZpY2FudDogQ1JFQVRFIFRBQkxFIGZpcnN0OyBPV05FUiBhbmQKKwkgKiB0aGUgcGVyLWNvbHVt biBBTFRFUiBDT0xVTU4gcGFzc2VzIGJlZm9yZSBzdWItb2JqZWN0IGVtaXNzaW9uOworCSAqIHN1 Yi1vYmplY3RzIGluIGRlcGVuZGVuY3ktZnJpZW5kbHkgb3JkZXIgKGluZGV4ZXMgYmVmb3JlIGNv bnN0cmFpbnRzLAorCSAqIHNpbmNlIGNvbnN0cmFpbnQtYmFja2VkIGluZGV4ZXMgYXJlIGVtaXR0 ZWQgb3V0LW9mLWxpbmUgYnkgdGhlCisJICogY29uc3RyYWludCBsb29wKTsgcGFydGl0aW9uIGNo aWxkcmVuIGxhc3Qgc28gdGhlIHBhcmVudCBhbHJlYWR5IGV4aXN0cworCSAqIGF0IHJlcGxheSB0 aW1lLiAgRWFjaCBoZWxwZXIgZ2F0ZXMgaXRzZWxmIG9uIGlzX2tpbmRfaW5jbHVkZWQgZm9yIHRo ZQorCSAqIHJlbGV2YW50IFRBQkxFX0RETF9LSU5EXyo7IHRoZSBmb3VyICJ0YWJsZSBpdHNlbGYi IHBhc3NlcyBhcmUgZ3JvdXBlZAorCSAqIGhlcmUgdW5kZXIgS0lORF9UQUJMRSBzbyBhbGwgb2Yg Q1JFQVRFIFRBQkxFIC8gT1dORVIgLyBTRVQgREVGQVVMVCAvCisJICogU0VUICguLi4pIGRyb3Ag b3V0IHRvZ2V0aGVyIHdoZW4gdGhlIHVzZXIgYXNrcyBmb3Igb25seSBzdWItb2JqZWN0cworCSAq IChlLmcuIG9ubHkgPT4gJ2ZvcmVpZ25fa2V5JyBmb3IgdGhlIHNlY29uZCBwYXNzIG9mIGEgdHdv LXBhc3MgRksKKwkgKiBjbG9uZSkuCisJICovCisJaWYgKGlzX2tpbmRfaW5jbHVkZWQoY3R4LCBU QUJMRV9ERExfS0lORF9UQUJMRSkpCisJeworCQllbWl0X2NyZWF0ZV90YWJsZV9zdG10KGN0eCk7 CisJCWVtaXRfb3duZXJfc3RtdChjdHgpOworCQllbWl0X2NoaWxkX2RlZmF1bHRfb3ZlcnJpZGVz KGN0eCk7CisJCWVtaXRfYXR0b3B0aW9ucyhjdHgpOworCQllbWl0X3R5cGVkX2NvbHVtbl9zdG9y YWdlKGN0eCk7CisJfQorCWVtaXRfaW5kZXhlcyhjdHgpOworCWVtaXRfbG9jYWxfY29uc3RyYWlu dHMoY3R4KTsKKwllbWl0X3J1bGVzKGN0eCk7CisJZW1pdF9zdGF0aXN0aWNzKGN0eCk7CisJZW1p dF9yZXBsaWNhX2lkZW50aXR5KGN0eCk7CisJZW1pdF9ybHNfdG9nZ2xlcyhjdHgpOworCisJLyoK KwkgKiBUcmlnZ2VycyBhbmQgcm93LWxldmVsIHNlY3VyaXR5IHBvbGljaWVzIC0gZGlzYWJsZWQg dW50aWwgdGhlCisJICogc3RhbmRhbG9uZSBwZ19nZXRfdHJpZ2dlcl9kZGwoKSBhbmQgcGdfZ2V0 X3BvbGljeV9kZGwoKSBoZWxwZXJzIGxhbmQuCisJICogVGhlIHNjYW4gKyBsb2NrICsgZmlsdGVy IHNjYWZmb2xkaW5nIGJlbG93IGlzIHByZXNlcnZlZCAoaW5zaWRlICNpZiAwKQorCSAqIHNvIHdp cmluZyB1cCBlYWNoIGVtaXNzaW9uIGJlY29tZXMgYSBvbmUtbGluZXIgaW4gdGhlIGxvb3AgYm9k eSBvbmNlCisJICogdGhvc2UgaGVscGVycyBhcmUgYXZhaWxhYmxlLgorCSAqLworI2lmIDAKKwlp ZiAoaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1RSSUdHRVIpKQorCXsKKwkJ UmVsYXRpb24JdHJpZ1JlbDsKKwkJU3lzU2NhbkRlc2MgdHJpZ1NjYW47CisJCVNjYW5LZXlEYXRh IHRyaWdLZXk7CisJCUhlYXBUdXBsZQl0cmlnVHVwOworCisJCXRyaWdSZWwgPSB0YWJsZV9vcGVu KFRyaWdnZXJSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCQlTY2FuS2V5SW5pdCgmdHJp Z0tleSwKKwkJCQkJQW51bV9wZ190cmlnZ2VyX3RncmVsaWQsCisJCQkJCUJURXF1YWxTdHJhdGVn eU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShjdHgtPnJlbGlkKSk7CisJ CXRyaWdTY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHRyaWdSZWwsIFRyaWdnZXJSZWxpZE5hbWVJ bmRleElkLAorCQkJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAmdHJpZ0tleSk7CisJCXdoaWxlIChI ZWFwVHVwbGVJc1ZhbGlkKHRyaWdUdXAgPSBzeXN0YWJsZV9nZXRuZXh0KHRyaWdTY2FuKSkpCisJ CXsKKwkJCUZvcm1fcGdfdHJpZ2dlciB0cmcgPSAoRm9ybV9wZ190cmlnZ2VyKSBHRVRTVFJVQ1Qo dHJpZ1R1cCk7CisKKwkJCWlmICh0cmctPnRnaXNpbnRlcm5hbCkKKwkJCQljb250aW51ZTsKKwor CQkJLyogVE9ETzogYXBwZW5kIHBnX2dldF90cmlnZ2VyX2RkbCh0cmctPm9pZCkgb3V0cHV0IGhl cmUuICovCisJCX0KKwkJc3lzdGFibGVfZW5kc2Nhbih0cmlnU2Nhbik7CisJCXRhYmxlX2Nsb3Nl KHRyaWdSZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJfQorCisJaWYgKGlzX2tpbmRfaW5jbHVkZWQo Y3R4LCBUQUJMRV9ERExfS0lORF9QT0xJQ1kpKQorCXsKKwkJUmVsYXRpb24JcG9sUmVsOworCQlT eXNTY2FuRGVzYyBwb2xTY2FuOworCQlTY2FuS2V5RGF0YSBwb2xLZXk7CisJCUhlYXBUdXBsZQlw b2xUdXA7CisKKwkJcG9sUmVsID0gdGFibGVfb3BlbihQb2xpY3lSZWxhdGlvbklkLCBBY2Nlc3NT aGFyZUxvY2spOworCQlTY2FuS2V5SW5pdCgmcG9sS2V5LAorCQkJCQlBbnVtX3BnX3BvbGljeV9w b2xyZWxpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmpl Y3RJZEdldERhdHVtKGN0eC0+cmVsaWQpKTsKKwkJcG9sU2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nh bihwb2xSZWwsIFBvbGljeVBvbHJlbGlkUG9sbmFtZUluZGV4SWQsCisJCQkJCQkJCQkgdHJ1ZSwg TlVMTCwgMSwgJnBvbEtleSk7CisJCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHBvbFR1cCA9IHN5 c3RhYmxlX2dldG5leHQocG9sU2NhbikpKQorCQl7CisJCQkvKiBUT0RPOiBhcHBlbmQgcGdfZ2V0 X3BvbGljeV9kZGwocmVsaWQsIHBvbG5hbWUpIG91dHB1dCBoZXJlLiAqLworCQl9CisJCXN5c3Rh YmxlX2VuZHNjYW4ocG9sU2Nhbik7CisJCXRhYmxlX2Nsb3NlKHBvbFJlbCwgQWNjZXNzU2hhcmVM b2NrKTsKKwl9CisjZW5kaWYKKworCWVtaXRfcGFydGl0aW9uX2NoaWxkcmVuKGN0eCk7CisKKwl7 CisJCWludAkJCW5hdHRzID0gUmVsYXRpb25HZXREZXNjcihyZWwpLT5uYXR0czsKKworCQlmb3Ig KGludCBpID0gMTsgaSA8PSBuYXR0czsgaSsrKQorCQkJaWYgKGN0eC0+bm5fZW50cmllc1tpXS5u YW1lICE9IE5VTEwpCisJCQkJcGZyZWUoY3R4LT5ubl9lbnRyaWVzW2ldLm5hbWUpOworCX0KKwlw ZnJlZShjdHgtPm5uX2VudHJpZXMpOworCisJdGFibGVfY2xvc2UocmVsLCBBY2Nlc3NTaGFyZUxv Y2spOworCXBmcmVlKGN0eC0+YnVmLmRhdGEpOworCXBmcmVlKGN0eC0+cXVhbG5hbWUpOworCWxp c3RfZnJlZShjdHgtPnNraXBfbm90bnVsbF9vaWRzKTsKKworCS8qCisJICogUG9wIHRoZSBuYXJy b3dlZCBzZWFyY2hfcGF0aCBub3cgdGhhdCBhbGwgaGVscGVycyBoYXZlIHJ1bi4gIEVycm9ycwor CSAqIHRocm93biBlYXJsaWVyIGFyZSBjbGVhbmVkIHVwIGJ5IEF0RU9YYWN0X0dVQyBhdCB4YWN0 IGVuZC4KKwkgKi8KKwlpZiAoY3R4LT5zYXZlX25lc3RsZXZlbCA+PSAwKQorCQlBdEVPWGFjdF9H VUModHJ1ZSwgY3R4LT5zYXZlX25lc3RsZXZlbCk7CisKKwlyZXR1cm4gY3R4LT5zdGF0ZW1lbnRz OworfQorCisvKgorICogcGdfZ2V0X3RhYmxlX2RkbAorICoJCVJldHVybiBEREwgdG8gcmVjcmVh dGUgYSB0YWJsZSBhcyBhIHNldCBvZiB0ZXh0IHJvd3MuCisgKi8KK0RhdHVtCitwZ19nZXRfdGFi bGVfZGRsKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJRnVuY0NhbGxDb250ZXh0ICpmdW5jY3R4Owor CUxpc3QJICAgKnN0YXRlbWVudHM7CisKKwlpZiAoU1JGX0lTX0ZJUlNUQ0FMTCgpKQorCXsKKwkJ TWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCQlUYWJsZURkbENvbnRleHQgY3R4ID0gezB9Owor CisJCWZ1bmNjdHggPSBTUkZfRklSU1RDQUxMX0lOSVQoKTsKKwkJb2xkY29udGV4dCA9IE1lbW9y eUNvbnRleHRTd2l0Y2hUbyhmdW5jY3R4LT5tdWx0aV9jYWxsX21lbW9yeV9jdHgpOworCisJCWlm IChQR19BUkdJU05VTEwoMCkpCisJCXsKKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250 ZXh0KTsKKwkJCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKKwkJfQorCisJCWlmICghUEdfQVJH SVNOVUxMKDUpICYmICFQR19BUkdJU05VTEwoNikpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygi XCJvbmx5X2tpbmRzXCIgYW5kIFwiZXhjZXB0X2tpbmRzXCIgcGFyYW1ldGVycyBhcmUgbXV0dWFs bHkgZXhjbHVzaXZlIikpKTsKKworCQkvKiBPcHRpb24gZGVmYXVsdHMgKG1hdGNoIHByb2FyZ2Rl ZmF1bHRzIGluIHBnX3Byb2MuZGF0KS4gKi8KKwkJY3R4LnJlbGlkID0gUEdfR0VUQVJHX09JRCgw KTsKKwkJY3R4LnByZXR0eSA9IGZhbHNlOworCQljdHgubm9fb3duZXIgPSBmYWxzZTsJCS8qIG93 bmVyIERFRkFVTFQgdHJ1ZSAgLT4gbm9fb3duZXIgPSBmYWxzZSAqLworCQljdHgubm9fdGFibGVz cGFjZSA9IGZhbHNlOwkvKiB0YWJsZXNwYWNlIERFRkFVTFQgdHJ1ZSAtPiBub190YWJsZXNwYWNl ID0gZmFsc2UgKi8KKwkJY3R4LnNjaGVtYV9xdWFsaWZpZWQgPSB0cnVlOworCQljdHgub25seV9r aW5kcyA9IE5VTEw7CisJCWN0eC5leGNlcHRfa2luZHMgPSBOVUxMOworCisJCS8qIE92ZXJyaWRl IGRlZmF1bHRzIHdpdGggYW55IGV4cGxpY2l0bHkgc3VwcGxpZWQgdmFsdWVzLiAqLworCQlpZiAo IVBHX0FSR0lTTlVMTCgxKSkKKwkJCWN0eC5wcmV0dHkgPSBQR19HRVRBUkdfQk9PTCgxKTsKKwkJ aWYgKCFQR19BUkdJU05VTEwoMikpCisJCQljdHgubm9fb3duZXIgPSAhUEdfR0VUQVJHX0JPT0wo Mik7CisJCWlmICghUEdfQVJHSVNOVUxMKDMpKQorCQkJY3R4Lm5vX3RhYmxlc3BhY2UgPSAhUEdf R0VUQVJHX0JPT0woMyk7CisJCWlmICghUEdfQVJHSVNOVUxMKDQpKQorCQkJY3R4LnNjaGVtYV9x dWFsaWZpZWQgPSBQR19HRVRBUkdfQk9PTCg0KTsKKwkJaWYgKCFQR19BUkdJU05VTEwoNSkpCisJ CQljdHgub25seV9raW5kcyA9IHBhcnNlX2tpbmRfYXJyYXkoIm9ubHlfa2luZHMiLAorCQkJCQkJ CQkJCQkgIFBHX0dFVEFSR19BUlJBWVRZUEVfUCg1KSk7CisJCWlmICghUEdfQVJHSVNOVUxMKDYp KQorCQkJY3R4LmV4Y2VwdF9raW5kcyA9IHBhcnNlX2tpbmRfYXJyYXkoImV4Y2VwdF9raW5kcyIs CisJCQkJCQkJCQkJCQlQR19HRVRBUkdfQVJSQVlUWVBFX1AoNikpOworCisJCXN0YXRlbWVudHMg PSBwZ19nZXRfdGFibGVfZGRsX2ludGVybmFsKCZjdHgpOworCQlmdW5jY3R4LT51c2VyX2ZjdHgg PSBzdGF0ZW1lbnRzOworCQlmdW5jY3R4LT5tYXhfY2FsbHMgPSBsaXN0X2xlbmd0aChzdGF0ZW1l bnRzKTsKKworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJfQorCisJZnVu Y2N0eCA9IFNSRl9QRVJDQUxMX1NFVFVQKCk7CisJc3RhdGVtZW50cyA9IChMaXN0ICopIGZ1bmNj dHgtPnVzZXJfZmN0eDsKKworCWlmIChmdW5jY3R4LT5jYWxsX2NudHIgPCBmdW5jY3R4LT5tYXhf Y2FsbHMpCisJeworCQljaGFyCSAgICpzdG10OworCisJCXN0bXQgPSBsaXN0X250aChzdGF0ZW1l bnRzLCBmdW5jY3R4LT5jYWxsX2NudHIpOworCisJCVNSRl9SRVRVUk5fTkVYVChmdW5jY3R4LCBD U3RyaW5nR2V0VGV4dERhdHVtKHN0bXQpKTsKKwl9CisJZWxzZQorCXsKKwkJbGlzdF9mcmVlX2Rl ZXAoc3RhdGVtZW50cyk7CisJCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKKwl9Cit9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvcnVsZXV0aWxzLmMKaW5kZXggODhkZTVjMDQ4MWMuLjcxODZjZjgzZTFkIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiYWNj ZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxhdGlvbi5oIgogI2luY2x1 ZGUgImFjY2Vzcy90YWJsZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ19hZ2dyZWdhdGUuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQuaCIKQEAgLTM3MCw3ICszNzEsNyBAQCBzdGF0 aWMgdm9pZCBtYWtlX3Byb3BncmFwaGRlZl9lbGVtZW50cyhTdHJpbmdJbmZvIGJ1ZiwgT2lkIHBn cmVsaWQsIGNoYXIgcGdla2luZAogc3RhdGljIHZvaWQgbWFrZV9wcm9wZ3JhcGhkZWZfbGFiZWxz KFN0cmluZ0luZm8gYnVmLCBPaWQgZWxpZCwgY29uc3QgY2hhciAqZWxhbGlhcywgT2lkIGVscmVs aWQpOwogc3RhdGljIHZvaWQgbWFrZV9wcm9wZ3JhcGhkZWZfcHJvcGVydGllcyhTdHJpbmdJbmZv IGJ1ZiwgT2lkIGVsbGFiZWxpZCwgT2lkIGVscmVsaWQpOwogc3RhdGljIGNoYXIgKnBnX2dldF9z dGF0aXN0aWNzb2JqX3dvcmtlcihPaWQgc3RhdGV4dGlkLCBib29sIGNvbHVtbnNfb25seSwKLQkJ CQkJCQkJCQkgYm9vbCBtaXNzaW5nX29rKTsKKwkJCQkJCQkJCQkgYm9vbCBtaXNzaW5nX29rLCBp bnQgcHJldHR5RmxhZ3MpOwogc3RhdGljIGNoYXIgKnBnX2dldF9wYXJ0a2V5ZGVmX3dvcmtlcihP aWQgcmVsaWQsIGludCBwcmV0dHlGbGFncywKIAkJCQkJCQkJCSAgYm9vbCBhdHRyc09ubHksIGJv b2wgbWlzc2luZ19vayk7CiBzdGF0aWMgY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZfd29ya2Vy KE9pZCBjb25zdHJhaW50SWQsIGJvb2wgZnVsbENvbW1hbmQsCkBAIC02MDMsNiArNjA0LDE5IEBA IHBnX2dldF9ydWxlZGVmX2V4dChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9URVhUX1Ao c3RyaW5nX3RvX3RleHQocmVzKSk7CiB9CiAKKy8qCisgKiBwZ19nZXRfcnVsZWRlZl9kZGwKKyAq CQlMaWtlIHBnX2dldF9ydWxlZGVmIGJ1dCB1c2VzIHRoZSBhY3RpdmUgc2VhcmNoX3BhdGggdG8g ZGVjaWRlCisgKgkJd2hldGhlciB0byBzY2hlbWEtcXVhbGlmeSB0aGUgcnVsZSdzIHRhcmdldCBy ZWxhdGlvbiBuYW1lLgorICoJCUZvciB1c2UgYnkgcGdfZ2V0X3RhYmxlX2RkbCB3aGljaCBoYXMg YWxyZWFkeSBzZXQgc2VhcmNoX3BhdGgKKyAqCQl0byB0aGUgYmFzZSBzY2hlbWEgd2hlbiBzY2hl bWFfcXVhbGlmaWVkPWZhbHNlLgorICovCitjaGFyICoKK3BnX2dldF9ydWxlZGVmX2RkbChPaWQg cnVsZW9pZCkKK3sKKwlyZXR1cm4gcGdfZ2V0X3J1bGVkZWZfd29ya2VyKHJ1bGVvaWQsIFBSRVRU WUZMQUdfSU5ERU5UIHwgUFJFVFRZRkxBR19TQ0hFTUEpOworfQorCiAKIHN0YXRpYyBjaGFyICoK IHBnX2dldF9ydWxlZGVmX3dvcmtlcihPaWQgcnVsZW9pZCwgaW50IHByZXR0eUZsYWdzKQpAQCAt MTI0MSw2ICsxMjU1LDIyIEBAIHBnX2dldF9pbmRleGRlZl9zdHJpbmcoT2lkIGluZGV4cmVsaWQp CiAJCQkJCQkJCSAgMCwgZmFsc2UpOwogfQogCisvKgorICogcGdfZ2V0X2luZGV4ZGVmX2RkbAor ICoJCUxpa2UgcGdfZ2V0X2luZGV4ZGVmX3N0cmluZyBidXQgdXNlcyB0aGUgYWN0aXZlIHNlYXJj aF9wYXRoIHRvCisgKgkJZGVjaWRlIHdoZXRoZXIgdG8gc2NoZW1hLXF1YWxpZnkgdGhlIGluZGV4 ZWQgcmVsYXRpb24gbmFtZS4KKyAqCQlGb3IgdXNlIGJ5IHBnX2dldF90YWJsZV9kZGwgd2hpY2gg aGFzIGFscmVhZHkgc2V0IHNlYXJjaF9wYXRoCisgKgkJdG8gdGhlIGJhc2Ugc2NoZW1hIHdoZW4g c2NoZW1hX3F1YWxpZmllZD1mYWxzZS4KKyAqLworY2hhciAqCitwZ19nZXRfaW5kZXhkZWZfZGRs KE9pZCBpbmRleHJlbGlkKQoreworCXJldHVybiBwZ19nZXRfaW5kZXhkZWZfd29ya2VyKGluZGV4 cmVsaWQsIDAsIE5VTEwsCisJCQkJCQkJCSAgZmFsc2UsIGZhbHNlLAorCQkJCQkJCQkgIHRydWUs IHRydWUsCisJCQkJCQkJCSAgUFJFVFRZRkxBR19TQ0hFTUEsIGZhbHNlKTsKK30KKwogLyogSW50 ZXJuYWwgdmVyc2lvbiB0aGF0IGp1c3QgcmVwb3J0cyB0aGUga2V5LWNvbHVtbiBkZWZpbml0aW9u cyAqLwogY2hhciAqCiBwZ19nZXRfaW5kZXhkZWZfY29sdW1ucyhPaWQgaW5kZXhyZWxpZCwgYm9v bCBwcmV0dHkpCkBAIC0xOTY5LDcgKzE5OTksNyBAQCBwZ19nZXRfc3RhdGlzdGljc29iamRlZihQ R19GVU5DVElPTl9BUkdTKQogCU9pZAkJCXN0YXRleHRpZCA9IFBHX0dFVEFSR19PSUQoMCk7CiAJ Y2hhcgkgICAqcmVzOwogCi0JcmVzID0gcGdfZ2V0X3N0YXRpc3RpY3NvYmpfd29ya2VyKHN0YXRl eHRpZCwgZmFsc2UsIHRydWUpOworCXJlcyA9IHBnX2dldF9zdGF0aXN0aWNzb2JqX3dvcmtlcihz dGF0ZXh0aWQsIGZhbHNlLCB0cnVlLCAwKTsKIAogCWlmIChyZXMgPT0gTlVMTCkKIAkJUEdfUkVU VVJOX05VTEwoKTsKQEAgLTE5ODQsNyArMjAxNCwyMCBAQCBwZ19nZXRfc3RhdGlzdGljc29iamRl ZihQR19GVU5DVElPTl9BUkdTKQogY2hhciAqCiBwZ19nZXRfc3RhdGlzdGljc29iamRlZl9zdHJp bmcoT2lkIHN0YXRleHRpZCkKIHsKLQlyZXR1cm4gcGdfZ2V0X3N0YXRpc3RpY3NvYmpfd29ya2Vy KHN0YXRleHRpZCwgZmFsc2UsIGZhbHNlKTsKKwlyZXR1cm4gcGdfZ2V0X3N0YXRpc3RpY3NvYmpf d29ya2VyKHN0YXRleHRpZCwgZmFsc2UsIGZhbHNlLCAwKTsKK30KKworLyoKKyAqIHBnX2dldF9z dGF0aXN0aWNzb2JqZGVmX2RkbAorICoJCUxpa2UgcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfc3Ry aW5nIGJ1dCB1c2VzIHRoZSBhY3RpdmUgc2VhcmNoX3BhdGgKKyAqCQl0byBkZWNpZGUgd2hldGhl ciB0byBzY2hlbWEtcXVhbGlmeSB0aGUgc3RhdGlzdGljcyBvYmplY3QgbmFtZS4KKyAqCQlGb3Ig dXNlIGJ5IHBnX2dldF90YWJsZV9kZGwgd2hpY2ggaGFzIGFscmVhZHkgc2V0IHNlYXJjaF9wYXRo CisgKgkJdG8gdGhlIGJhc2Ugc2NoZW1hIHdoZW4gc2NoZW1hX3F1YWxpZmllZD1mYWxzZS4KKyAq LworY2hhciAqCitwZ19nZXRfc3RhdGlzdGljc29iamRlZl9kZGwoT2lkIHN0YXRleHRpZCkKK3sK KwlyZXR1cm4gcGdfZ2V0X3N0YXRpc3RpY3NvYmpfd29ya2VyKHN0YXRleHRpZCwgZmFsc2UsIGZh bHNlLCBQUkVUVFlGTEFHX1NDSEVNQSk7CiB9CiAKIC8qCkBAIC0xOTk3LDcgKzIwNDAsNyBAQCBw Z19nZXRfc3RhdGlzdGljc29iamRlZl9jb2x1bW5zKFBHX0ZVTkNUSU9OX0FSR1MpCiAJT2lkCQkJ c3RhdGV4dGlkID0gUEdfR0VUQVJHX09JRCgwKTsKIAljaGFyCSAgICpyZXM7CiAKLQlyZXMgPSBw Z19nZXRfc3RhdGlzdGljc29ial93b3JrZXIoc3RhdGV4dGlkLCB0cnVlLCB0cnVlKTsKKwlyZXMg PSBwZ19nZXRfc3RhdGlzdGljc29ial93b3JrZXIoc3RhdGV4dGlkLCB0cnVlLCB0cnVlLCAwKTsK IAogCWlmIChyZXMgPT0gTlVMTCkKIAkJUEdfUkVUVVJOX05VTEwoKTsKQEAgLTIwMDksNyArMjA1 Miw4IEBAIHBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX2NvbHVtbnMoUEdfRlVOQ1RJT05fQVJHUykK ICAqIEludGVybmFsIHdvcmtob3JzZSB0byBkZWNvbXBpbGUgYW4gZXh0ZW5kZWQgc3RhdGlzdGlj cyBvYmplY3QuCiAgKi8KIHN0YXRpYyBjaGFyICoKLXBnX2dldF9zdGF0aXN0aWNzb2JqX3dvcmtl cihPaWQgc3RhdGV4dGlkLCBib29sIGNvbHVtbnNfb25seSwgYm9vbCBtaXNzaW5nX29rKQorcGdf Z2V0X3N0YXRpc3RpY3NvYmpfd29ya2VyKE9pZCBzdGF0ZXh0aWQsIGJvb2wgY29sdW1uc19vbmx5 LCBib29sIG1pc3Npbmdfb2ssCisJCQkJCQkJaW50IHByZXR0eUZsYWdzKQogewogCUZvcm1fcGdf c3RhdGlzdGljX2V4dCBzdGF0ZXh0cmVjOwogCUhlYXBUdXBsZQlzdGF0ZXh0dHVwOwpAQCAtMjA2 OSwxMCArMjExMywxOCBAQCBwZ19nZXRfc3RhdGlzdGljc29ial93b3JrZXIoT2lkIHN0YXRleHRp ZCwgYm9vbCBjb2x1bW5zX29ubHksIGJvb2wgbWlzc2luZ19vaykKIAogCWlmICghY29sdW1uc19v bmx5KQogCXsKLQkJbnNwID0gZ2V0X25hbWVzcGFjZV9uYW1lX29yX3RlbXAoc3RhdGV4dHJlYy0+ c3R4bmFtZXNwYWNlKTsKLQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiQ1JFQVRFIFNUQVRJU1RJ Q1MgJXMiLAotCQkJCQkJIHF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKG5zcCwKLQkJCQkJCQkJ CQkJCQlOYW1lU3RyKHN0YXRleHRyZWMtPnN0eG5hbWUpKSk7CisJCWlmICgocHJldHR5RmxhZ3Mg JiBQUkVUVFlGTEFHX1NDSEVNQSkgJiYKKwkJCVN0YXRpc3RpY3NPYmpJc1Zpc2libGUoc3RhdGV4 dGlkKSkKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIkNSRUFURSBTVEFUSVNUSUNTICVzIiwK KwkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKHN0YXRleHRyZWMtPnN0eG5hbWUpKSk7 CisJCWVsc2UKKwkJeworCQkJbnNwID0gZ2V0X25hbWVzcGFjZV9uYW1lX29yX3RlbXAoc3RhdGV4 dHJlYy0+c3R4bmFtZXNwYWNlKTsKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIkNSRUFURSBT VEFUSVNUSUNTICVzIiwKKwkJCQkJCQkgcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIobnNwLAor CQkJCQkJCQkJCQkJCQlOYW1lU3RyKHN0YXRleHRyZWMtPnN0eG5hbWUpKSk7CisJCQlwZnJlZShu c3ApOworCQl9CiAKIAkJLyoKIAkJICogRGVjb2RlIHRoZSBzdHhraW5kIGNvbHVtbiBzbyB0aGF0 IHdlIGtub3cgd2hpY2ggc3RhdHMgdHlwZXMgdG8KQEAgLTIxNjMsMTAgKzIyMTUsOSBAQCBwZ19n ZXRfc3RhdGlzdGljc29ial93b3JrZXIoT2lkIHN0YXRleHRpZCwgYm9vbCBjb2x1bW5zX29ubHks IGJvb2wgbWlzc2luZ19vaykKIAl7CiAJCU5vZGUJICAgKmV4cHIgPSAoTm9kZSAqKSBsZmlyc3Qo bGMpOwogCQljaGFyCSAgICpzdHI7Ci0JCWludAkJCXByZXR0eUZsYWdzID0gUFJFVFRZRkxBR19Q QVJFTjsKIAogCQlzdHIgPSBkZXBhcnNlX2V4cHJlc3Npb25fcHJldHR5KGV4cHIsIGNvbnRleHQs IGZhbHNlLCBmYWxzZSwKLQkJCQkJCQkJCQlwcmV0dHlGbGFncywgMCk7CisJCQkJCQkJCQkJUFJF VFRZRkxBR19QQVJFTiwgMCk7CiAKIAkJaWYgKGNvbG5vID4gMCkKIAkJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoJmJ1ZiwgIiwgIik7CkBAIC0yNTQ0LDYgKzI1OTUsMjAgQEAgcGdfZ2V0X2NvbnN0 cmFpbnRkZWZfY29tbWFuZChPaWQgY29uc3RyYWludElkKQogCXJldHVybiBwZ19nZXRfY29uc3Ry YWludGRlZl93b3JrZXIoY29uc3RyYWludElkLCB0cnVlLCAwLCBmYWxzZSk7CiB9CiAKKy8qCisg KiBwZ19nZXRfY29uc3RyYWludGRlZl9ib2R5CisgKgkJUmV0dXJucyB0aGUgY29uc3RyYWludCBk ZWZpbml0aW9uIGJvZHkgd2l0aG91dCB0aGUKKyAqCQkiQUxURVIgVEFCTEUgbmFtZSBBREQgQ09O U1RSQUlOVCBjbmFtZSIgcHJlZml4LgorICoJCUZLIHRhcmdldCByZWxhdGlvbiBuYW1lcyBpbiB0 aGUgYm9keSBhbHJlYWR5IHVzZQorICoJCWdlbmVyYXRlX3JlbGF0aW9uX25hbWUgKHNlYXJjaF9w YXRoLWF3YXJlKS4gIEZvciB1c2UgYnkKKyAqCQlwZ19nZXRfdGFibGVfZGRsIHdoaWNoIGJ1aWxk cyB0aGUgQUxURVIgVEFCTEUgcHJlZml4IGl0c2VsZi4KKyAqLworY2hhciAqCitwZ19nZXRfY29u c3RyYWludGRlZl9ib2R5KE9pZCBjb25zdHJhaW50SWQpCit7CisJcmV0dXJuIHBnX2dldF9jb25z dHJhaW50ZGVmX3dvcmtlcihjb25zdHJhaW50SWQsIGZhbHNlLCAwLCBmYWxzZSk7Cit9CisKIC8q CiAgKiBBcyBvZiA5LjQsIHdlIG5vdyB1c2UgYW4gTVZDQyBzbmFwc2hvdCBmb3IgdGhpcy4KICAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19pbmhlcml0cy5oIGIvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19pbmhlcml0cy5oCmluZGV4IGNjODc0YWJhYWJiLi4xZTQ2M2IwMTA2 ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19pbmhlcml0cy5oCisrKyBiL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMuaApAQCAtNTUsNiArNTUsNyBAQCBERUNMQVJF X0lOREVYKHBnX2luaGVyaXRzX3BhcmVudF9pbmRleCwgMjE4NywgSW5oZXJpdHNQYXJlbnRJbmRl eElkLCBwZ19pbmhlcml0cwogZXh0ZXJuIExpc3QgKmZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW4o T2lkIHBhcmVudHJlbElkLCBMT0NLTU9ERSBsb2NrbW9kZSk7CiBleHRlcm4gTGlzdCAqZmluZF9p bmhlcml0YW5jZV9jaGlsZHJlbl9leHRlbmRlZChPaWQgcGFyZW50cmVsSWQsIGJvb2wgb21pdF9k ZXRhY2hlZCwKIAkJCQkJCQkJCQkJCUxPQ0tNT0RFIGxvY2ttb2RlLCBib29sICpkZXRhY2hlZF9l eGlzdCwgVHJhbnNhY3Rpb25JZCAqZGV0YWNoZWRfeG1pbik7CitleHRlcm4gTGlzdCAqZmluZF9p bmhlcml0YW5jZV9wYXJlbnRzKE9pZCByZWxpZCwgTE9DS01PREUgbG9ja21vZGUpOwogCiBleHRl cm4gTGlzdCAqZmluZF9hbGxfaW5oZXJpdG9ycyhPaWQgcGFyZW50cmVsSWQsIExPQ0tNT0RFIGxv Y2ttb2RlLAogCQkJCQkJCQkgTGlzdCAqKm51bXBhcmVudHMpOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQKaW5kZXggM2NiODQzNTlhZGYuLmQ4NmFmNTZiYTc4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQKQEAgLTg2MzQsNiArODYzNCwxNCBAQAogICBwcm9hcmd0eXBlcyA9PiAncmVnZGF0YWJhc2Ug Ym9vbCBib29sIGJvb2wnLAogICBwcm9hcmduYW1lcyA9PiAne2RhdGFiYXNlLHByZXR0eSxvd25l cix0YWJsZXNwYWNlfScsCiAgIHByb2FyZ2RlZmF1bHRzID0+ICd7ZmFsc2UsdHJ1ZSx0cnVlfScs IHByb3NyYyA9PiAncGdfZ2V0X2RhdGFiYXNlX2RkbCcgfSwKK3sgb2lkID0+ICc4MjE1JywgZGVz Y3IgPT4gJ2dldCBEREwgdG8gcmVjcmVhdGUgYSB0YWJsZScsCisgIHByb25hbWUgPT4gJ3BnX2dl dF90YWJsZV9kZGwnLCBwcm9yb3dzID0+ICc1MCcsCisgIHByb2lzc3RyaWN0ID0+ICdmJywgcHJv cmV0c2V0ID0+ICd0JywgcHJvdm9sYXRpbGUgPT4gJ3MnLCBwcm9wYXJhbGxlbCA9PiAncicsCisg IHByb25hcmdkZWZhdWx0cyA9PiAnNicsIHByb3JldHR5cGUgPT4gJ3RleHQnLAorICBwcm9hcmd0 eXBlcyA9PiAncmVnY2xhc3MgYm9vbCBib29sIGJvb2wgYm9vbCBfdGV4dCBfdGV4dCcsCisgIHBy b2FyZ25hbWVzID0+ICd7cmVsYXRpb24scHJldHR5LG93bmVyLHRhYmxlc3BhY2Usc2NoZW1hX3F1 YWxpZmllZCxvbmx5X2tpbmRzLGV4Y2VwdF9raW5kc30nLAorICBwcm9hcmdkZWZhdWx0cyA9PiAn e2ZhbHNlLHRydWUsdHJ1ZSx0cnVlLE5VTEwsTlVMTH0nLAorICBwcm9zcmMgPT4gJ3BnX2dldF90 YWJsZV9kZGwnIH0sCiB7IG9pZCA9PiAnMjUwOScsCiAgIGRlc2NyID0+ICdkZXBhcnNlIGFuIGVu Y29kZWQgZXhwcmVzc2lvbiB3aXRoIHByZXR0eS1wcmludCBvcHRpb24nLAogICBwcm9uYW1lID0+ ICdwZ19nZXRfZXhwcicsIHByb3ZvbGF0aWxlID0+ICdzJywgcHJvcmV0dHlwZSA9PiAndGV4dCcs CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy90YWJsZWNtZHMuaCBiL3NyYy9pbmNs dWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oCmluZGV4IGMzZDg1MThjYjYyLi5kMzM1NjNmZGVhZCAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvdGFibGVjbWRzLmgKKysrIGIvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvdGFibGVjbWRzLmgKQEAgLTkyLDYgKzkyLDcgQEAgZXh0ZXJuIHZvaWQg Y2hlY2tfb2ZfdHlwZShIZWFwVHVwbGUgdHlwZXR1cGxlKTsKIAogZXh0ZXJuIHZvaWQgcmVnaXN0 ZXJfb25fY29tbWl0X2FjdGlvbihPaWQgcmVsaWQsIE9uQ29tbWl0QWN0aW9uIGFjdGlvbik7CiBl eHRlcm4gdm9pZCByZW1vdmVfb25fY29tbWl0X2FjdGlvbihPaWQgcmVsaWQpOworZXh0ZXJuIE9u Q29tbWl0QWN0aW9uIGdldF9vbl9jb21taXRfYWN0aW9uKE9pZCByZWxpZCk7CiAKIGV4dGVybiB2 b2lkIFByZUNvbW1pdF9vbl9jb21taXRfYWN0aW9ucyh2b2lkKTsKIGV4dGVybiB2b2lkIEF0RU9Y YWN0X29uX2NvbW1pdF9hY3Rpb25zKGJvb2wgaXNDb21taXQpOwpAQCAtMTA4LDQgKzEwOSw2IEBA IGV4dGVybiB2b2lkIFJhbmdlVmFyQ2FsbGJhY2tPd25zUmVsYXRpb24oY29uc3QgUmFuZ2VWYXIg KnJlbGF0aW9uLAogZXh0ZXJuIGJvb2wgUGFydENvbnN0cmFpbnRJbXBsaWVkQnlSZWxDb25zdHJh aW50KFJlbGF0aW9uIHNjYW5yZWwsCiAJCQkJCQkJCQkJCQkgTGlzdCAqcGFydENvbnN0cmFpbnQp OwogCitleHRlcm4gY29uc3QgY2hhciAqc3RvcmFnZV9uYW1lKGNoYXIgYyk7CisKICNlbmRpZgkJ CQkJCQkvKiBUQUJMRUNNRFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcnVs ZXV0aWxzLmggYi9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaAppbmRleCAyNWMwNWUyZjY0 OS4uYzNiM2RjNjVjOTMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5o CisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCkBAIC0yNSw2ICsyNSw3IEBAIHR5 cGVkZWYgc3RydWN0IFBsYW5uZWRTdG10IFBsYW5uZWRTdG10OwogI2RlZmluZSBSVUxFX0lOREVY REVGX0tFWVNfT05MWQkJMHgwMgkvKiBpZ25vcmUgaW5jbHVkZWQgYXR0cmlidXRlcyAqLwogCiBl eHRlcm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVmX3N0cmluZyhPaWQgaW5kZXhyZWxpZCk7CitleHRl cm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVmX2RkbChPaWQgaW5kZXhyZWxpZCk7CiBleHRlcm4gY2hh ciAqcGdfZ2V0X2luZGV4ZGVmX2NvbHVtbnMoT2lkIGluZGV4cmVsaWQsIGJvb2wgcHJldHR5KTsK IGV4dGVybiBjaGFyICpwZ19nZXRfaW5kZXhkZWZfY29sdW1uc19leHRlbmRlZChPaWQgaW5kZXhy ZWxpZCwKIAkJCQkJCQkJCQkJICB1aW50MTYgZmxhZ3MpOwpAQCAtMzQsNiArMzUsNyBAQCBleHRl cm4gY2hhciAqcGdfZ2V0X3BhcnRrZXlkZWZfY29sdW1ucyhPaWQgcmVsaWQsIGJvb2wgcHJldHR5 KTsKIGV4dGVybiBjaGFyICpwZ19nZXRfcGFydGNvbnN0cmRlZl9zdHJpbmcoT2lkIHBhcnRpdGlv bklkLCBjaGFyICphbGlhc25hbWUpOwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRk ZWZfY29tbWFuZChPaWQgY29uc3RyYWludElkKTsKK2V4dGVybiBjaGFyICpwZ19nZXRfY29uc3Ry YWludGRlZl9ib2R5KE9pZCBjb25zdHJhaW50SWQpOwogZXh0ZXJuIGNoYXIgKmRlcGFyc2VfZXhw cmVzc2lvbihOb2RlICpleHByLCBMaXN0ICpkcGNvbnRleHQsCiAJCQkJCQkJCWJvb2wgZm9yY2Vw cmVmaXgsIGJvb2wgc2hvd2ltcGxpY2l0KTsKIGV4dGVybiBMaXN0ICpkZXBhcnNlX2NvbnRleHRf Zm9yKGNvbnN0IGNoYXIgKmFsaWFzbmFtZSwgT2lkIHJlbGlkKTsKQEAgLTU0LDUgKzU2LDcgQEAg ZXh0ZXJuIGNoYXIgKmdldF9yYW5nZV9wYXJ0Ym91bmRfc3RyaW5nKExpc3QgKmJvdW5kX2RhdHVt cyk7CiBleHRlcm4gdm9pZCBnZXRfcmVsb3B0aW9ucyhTdHJpbmdJbmZvIGJ1ZiwgRGF0dW0gcmVs b3B0aW9ucyk7CiAKIGV4dGVybiBjaGFyICpwZ19nZXRfc3RhdGlzdGljc29iamRlZl9zdHJpbmco T2lkIHN0YXRleHRpZCk7CitleHRlcm4gY2hhciAqcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfZGRs KE9pZCBzdGF0ZXh0aWQpOworZXh0ZXJuIGNoYXIgKnBnX2dldF9ydWxlZGVmX2RkbChPaWQgcnVs ZW9pZCk7CiAKICNlbmRpZgkJCQkJCQkvKiBSVUxFVVRJTFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wZ19nZXRfdGFibGVfZGRsLm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2RkbC5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLmRiMWI5MGNjMGFmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9wZ19nZXRfdGFibGVfZGRsLm91dApAQCAtMCwwICsxLDE1MTYg QEAKKy0tCistLSBwZ19nZXRfdGFibGVfZGRsCistLQorLS0gQWxsIHRlc3RzIHBhc3Mgb3duZXI9 PmZhbHNlIHNvIHRoZSBBTFRFUiBUQUJMRSBPV05FUiBUTyBsaW5lIGlzIG5vdAorLS0gZW1pdHRl ZCwga2VlcGluZyBvdXRwdXQgc3RhYmxlIGFjcm9zcyB0ZXN0IHJ1bm5lcnMgKHdoaWNoIG1heSBy dW4gdW5kZXIKKy0tIGRpZmZlcmVudCByb2xlIG5hbWVzKS4KKy0tCitDUkVBVEUgU0NIRU1BIHBn dGJsX2RkbF90ZXN0OworU0VUIHNlYXJjaF9wYXRoID0gcGd0YmxfZGRsX3Rlc3Q7CistLSBCYXNp YyB0YWJsZSB3aXRoIFBSSU1BUlkgS0VZLCBOT1QgTlVMTCwgREVGQVVMVCwgQ09MTEFURS4KK0NS RUFURSBUQUJMRSBiYXNpYyAoCisgICAgaWQgaW50IFBSSU1BUlkgS0VZLAorICAgIG5hbWUgdGV4 dCBOT1QgTlVMTCBERUZBVUxUICdhbm9uJyBDT0xMQVRFICJDIgorKTsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVf ZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVB VEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuYmFzaWMgKGlkIGludGVnZXIgTk9UIE5VTEwsIG5hbWUg dGV4dCBDT0xMQVRFICJDIiBERUZBVUxUICdhbm9uJzo6dGV4dCBOT1QgTlVMTCk7CisgQUxURVIg VEFCTEUgcGd0YmxfZGRsX3Rlc3QuYmFzaWMgQUREIENPTlNUUkFJTlQgYmFzaWNfcGtleSBQUklN QVJZIEtFWSAoaWQpOworKDIgcm93cykKKworLS0gSWRlbnRpdHkgY29sdW1ucyAod2l0aCBkZWZh dWx0IGFuZCBjdXN0b20gc2VxdWVuY2Ugb3B0aW9ucykuCitDUkVBVEUgVEFCTEUgaWRfY29scyAo CisgICAgaWRfYWx3YXlzIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5USVRZLAorICAgIGlk X2RlZmF1bHQgaW50IEdFTkVSQVRFRCBCWSBERUZBVUxUIEFTIElERU5USVRZCispOworU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZF9jb2xzJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBw Z3RibF9kZGxfdGVzdC5pZF9jb2xzIChpZF9hbHdheXMgaW50ZWdlciBHRU5FUkFURUQgQUxXQVlT IEFTIElERU5USVRZIE5PVCBOVUxMLCBpZF9kZWZhdWx0IGludGVnZXIgR0VORVJBVEVEIEJZIERF RkFVTFQgQVMgSURFTlRJVFkgTk9UIE5VTEwpOworKDEgcm93KQorCitDUkVBVEUgVEFCTEUgaWRf Y3VzdG9tICgKKyAgICB2IGludCBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5USVRZICgKKyAgICAg ICAgU0VRVUVOQ0UgTkFNRSBpZF9jdXN0b21fdl9zZXEKKyAgICAgICAgU1RBUlQgV0lUSCAxMDAg SU5DUkVNRU5UIEJZIDUKKyAgICAgICAgTUlOVkFMVUUgNTAgTUFYVkFMVUUgMTAwMAorICAgICAg ICBDQUNIRSAxMCBDWUNMRQorICAgICkKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ2lkX2N1c3RvbSc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90 ZXN0LmlkX2N1c3RvbSAodiBpbnRlZ2VyIEdFTkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJVFkgKFNU QVJUIFdJVEggMTAwIElOQ1JFTUVOVCBCWSA1IE1JTlZBTFVFIDUwIE1BWFZBTFVFIDEwMDAgQ0FD SEUgMTAgQ1lDTEUpIE5PVCBOVUxMKTsKKygxIHJvdykKKworLS0gR2VuZXJhdGVkIHN0b3JlZCBj b2x1bW4uCitDUkVBVEUgVEFCTEUgZ2VuX2NvbHMgKAorICAgIGNlbnRzIGludCwKKyAgICBkb2xs YXJzIG51bWVyaWMgR0VORVJBVEVEIEFMV0FZUyBBUyAoY2VudHMgLyAxMDAuMCkgU1RPUkVECisp OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdnZW5fY29scyc6OnJlZ2NsYXNzLCBv d25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUg VEFCTEUgcGd0YmxfZGRsX3Rlc3QuZ2VuX2NvbHMgKGNlbnRzIGludGVnZXIsIGRvbGxhcnMgbnVt ZXJpYyBHRU5FUkFURUQgQUxXQVlTIEFTICgoKGNlbnRzKTo6bnVtZXJpYyAvIDEwMC4wKSkgU1RP UkVEKTsKKygxIHJvdykKKworLS0gR2VuZXJhdGVkIHZpcnR1YWwgY29sdW1uLgorQ1JFQVRFIFRB QkxFIGdlbl92aXJ0dWFsICgKKyAgICBiYXNlIGludCwKKyAgICBkZXJpdmVkIGludCBHRU5FUkFU RUQgQUxXQVlTIEFTIChiYXNlICogMikgVklSVFVBTAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnZ2VuX3ZpcnR1YWwnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJs ZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5nZW5fdmlydHVhbCAoYmFzZSBpbnRlZ2Vy LCBkZXJpdmVkIGludGVnZXIgR0VORVJBVEVEIEFMV0FZUyBBUyAoKGJhc2UgKiAyKSkgVklSVFVB TCk7CisoMSByb3cpCisKKy0tIFNUT1JBR0UgYW5kIENPTVBSRVNTSU9OIChvbmx5IGVtaXR0ZWQg d2hlbiBub24tZGVmYXVsdCBmb3IgdGhlIHR5cGUpLgorQ1JFQVRFIFRBQkxFIHN0b3JhZ2VfY29s cyAoCisgICAgYSB0ZXh0IFNUT1JBR0UgRVhURVJOQUwsCisgICAgYiB0ZXh0IFNUT1JBR0UgTUFJ TiwKKyAgICBjIHRleHQgQ09NUFJFU1NJT04gcGdsegorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnc3RvcmFnZV9jb2xzJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFi bGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Quc3RvcmFnZV9jb2xzIChhIHRleHQgU1RP UkFHRSBFWFRFUk5BTCwgYiB0ZXh0IFNUT1JBR0UgTUFJTiwgYyB0ZXh0IENPTVBSRVNTSU9OIHBn bHopOworKDEgcm93KQorCistLSBDb25zdHJhaW50czogQ0hFQ0ssIFVOSVFVRSwgRk9SRUlHTiBL RVkgKERFRkVSUkFCTEUpLgorQ1JFQVRFIFRBQkxFIHJlZmQgKGlkIGludCBQUklNQVJZIEtFWSk7 CitDUkVBVEUgVEFCTEUgY29ucyAoCisgICAgYSBpbnQgQ0hFQ0sgKGEgPiAwKSwKKyAgICBiIGlu dCBVTklRVUUsCisgICAgYyBpbnQgUkVGRVJFTkNFUyByZWZkKGlkKSBERUZFUlJBQkxFIElOSVRJ QUxMWSBERUZFUlJFRAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90 ZXN0LmNvbnMgKGEgaW50ZWdlciwgYiBpbnRlZ2VyLCBjIGludGVnZXIsIENPTlNUUkFJTlQgY29u c19hX2NoZWNrIENIRUNLICgoYSA+IDApKSk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qu Y29ucyBBREQgQ09OU1RSQUlOVCBjb25zX2Jfa2V5IFVOSVFVRSAoYik7CisgQUxURVIgVEFCTEUg cGd0YmxfZGRsX3Rlc3QuY29ucyBBREQgQ09OU1RSQUlOVCBjb25zX2NfZmtleSBGT1JFSUdOIEtF WSAoYykgUkVGRVJFTkNFUyBwZ3RibF9kZGxfdGVzdC5yZWZkKGlkKSBERUZFUlJBQkxFIElOSVRJ QUxMWSBERUZFUlJFRDsKKygzIHJvd3MpCisKKy0tIFVOSVFVRSBOVUxMUyBOT1QgRElTVElOQ1Qg KFBHIDE1KTogbnVsbCB2YWx1ZXMgYXJlIHRyZWF0ZWQgYXMgZXF1YWwgZm9yCistLSB1bmlxdWVu ZXNzIHB1cnBvc2VzLCBzbyB0aGUgTlVMTFMgTk9UIERJU1RJTkNUIGNsYXVzZSBtdXN0IGJlIGVt aXR0ZWQuCitDUkVBVEUgVEFCTEUgbnVsbHNfbmQgKAorICAgIGEgaW50LAorICAgIGIgaW50LAor ICAgIFVOSVFVRSBOVUxMUyBOT1QgRElTVElOQ1QgKGEsIGIpCispOworU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdudWxsc19uZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJs X2RkbF90ZXN0Lm51bGxzX25kIChhIGludGVnZXIsIGIgaW50ZWdlcik7CisgQUxURVIgVEFCTEUg cGd0YmxfZGRsX3Rlc3QubnVsbHNfbmQgQUREIENPTlNUUkFJTlQgbnVsbHNfbmRfYV9iX2tleSBV TklRVUUgTlVMTFMgTk9UIERJU1RJTkNUIChhLCBiKTsKKygyIHJvd3MpCisKKy0tIElOQ0xVREUg Y29sdW1ucyBvbiBhIGNvbnN0cmFpbnQtYmFja2VkIFVOSVFVRSBpbmRleCAoUEcgMTEpOiB0aGUK Ky0tIGNvdmVyaW5nIGNvbHVtbnMgYXBwZWFyIGluIGFuIElOQ0xVREUgKC4uLikgY2xhdXNlIG9u IHRoZSBBTFRFUiBUQUJMRQorLS0gQUREIENPTlNUUkFJTlQgc3RhdGVtZW50LCBub3QgaW4gdGhl IGtleSBjb2x1bW4gbGlzdC4KK0NSRUFURSBUQUJMRSBpZHhfaW5jICgKKyAgICBpZCAgIGludCBQ UklNQVJZIEtFWSwKKyAgICBuYW1lIHRleHQsCisgICAgZXh0cmEgdGV4dCwKKyAgICBVTklRVUUg KG5hbWUpIElOQ0xVREUgKGV4dHJhKQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnaWR4X2luYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5p ZHhfaW5jIChpZCBpbnRlZ2VyIE5PVCBOVUxMLCBuYW1lIHRleHQsIGV4dHJhIHRleHQpOworIEFM VEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkeF9pbmMgQUREIENPTlNUUkFJTlQgaWR4X2luY19u YW1lX2V4dHJhX2tleSBVTklRVUUgKG5hbWUpIElOQ0xVREUgKGV4dHJhKTsKKyBBTFRFUiBUQUJM RSBwZ3RibF9kZGxfdGVzdC5pZHhfaW5jIEFERCBDT05TVFJBSU5UIGlkeF9pbmNfcGtleSBQUklN QVJZIEtFWSAoaWQpOworKDMgcm93cykKKworLS0gRk9SRUlHTiBLRVkgd2l0aCBPTiBERUxFVEUg LyBPTiBVUERBVEUgcmVmZXJlbnRpYWwgYWN0aW9ucyBhbmQgTUFUQ0gKKy0tIGNsYXVzZS4gIEVh Y2ggdmFyaWFudCBtdXN0IGFwcGVhciB2ZXJiYXRpbSBpbiB0aGUgcmVjb25zdHJ1Y3RlZCBEREwu CitDUkVBVEUgVEFCTEUgZmtfYWN0c190Z3QgKGlkIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUg VEFCTEUgZmtfYWN0cyAoCisgICAgYSBpbnQsCisgICAgYiBpbnQsCisgICAgYyBpbnQsCisgICAg ZCBpbnQsCisgICAgQ09OU1RSQUlOVCBma19jYXNjYWRlICBGT1JFSUdOIEtFWSAoYSkgUkVGRVJF TkNFUyBma19hY3RzX3RndChpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE9OIERFTEVU RSBDQVNDQURFIE9OIFVQREFURSBSRVNUUklDVCwKKyAgICBDT05TVFJBSU5UIGZrX3NldG51bGwg IEZPUkVJR04gS0VZIChiKSBSRUZFUkVOQ0VTIGZrX2FjdHNfdGd0KGlkKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgT04gREVMRVRFIFNFVCBOVUxMLAorICAgIENPTlNUUkFJTlQgZmtfc2V0 ZGVmICAgRk9SRUlHTiBLRVkgKGMpIFJFRkVSRU5DRVMgZmtfYWN0c190Z3QoaWQpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBPTiBERUxFVEUgU0VUIERFRkFVTFQsCisgICAgQ09OU1RSQUlO VCBma19tYXRjaCAgICBGT1JFSUdOIEtFWSAoZCkgUkVGRVJFTkNFUyBma19hY3RzX3RndChpZCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BVENIIEZVTEwKKyk7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ2ZrX2FjdHMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2Rk bF90ZXN0LmZrX2FjdHMgKGEgaW50ZWdlciwgYiBpbnRlZ2VyLCBjIGludGVnZXIsIGQgaW50ZWdl cik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuZmtfYWN0cyBBREQgQ09OU1RSQUlOVCBm a19jYXNjYWRlIEZPUkVJR04gS0VZIChhKSBSRUZFUkVOQ0VTIHBndGJsX2RkbF90ZXN0LmZrX2Fj dHNfdGd0KGlkKSBPTiBVUERBVEUgUkVTVFJJQ1QgT04gREVMRVRFIENBU0NBREU7CisgQUxURVIg VEFCTEUgcGd0YmxfZGRsX3Rlc3QuZmtfYWN0cyBBREQgQ09OU1RSQUlOVCBma19tYXRjaCBGT1JF SUdOIEtFWSAoZCkgUkVGRVJFTkNFUyBwZ3RibF9kZGxfdGVzdC5ma19hY3RzX3RndChpZCkgTUFU Q0ggRlVMTDsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ma19hY3RzIEFERCBDT05TVFJB SU5UIGZrX3NldGRlZiBGT1JFSUdOIEtFWSAoYykgUkVGRVJFTkNFUyBwZ3RibF9kZGxfdGVzdC5m a19hY3RzX3RndChpZCkgT04gREVMRVRFIFNFVCBERUZBVUxUOworIEFMVEVSIFRBQkxFIHBndGJs X2RkbF90ZXN0LmZrX2FjdHMgQUREIENPTlNUUkFJTlQgZmtfc2V0bnVsbCBGT1JFSUdOIEtFWSAo YikgUkVGRVJFTkNFUyBwZ3RibF9kZGxfdGVzdC5ma19hY3RzX3RndChpZCkgT04gREVMRVRFIFNF VCBOVUxMOworKDUgcm93cykKKworLS0gTk9UIEVORk9SQ0VEIGZvcmVpZ24ga2V5IChQRyAxNyk6 IHRoZSBjb25zdHJhaW50IGlzIHJlY29yZGVkIGluIHRoZQorLS0gY2F0YWxvZyBidXQgbm90IHZh bGlkYXRlZCBieSB0aGUgZW5naW5lOyBOT1QgRU5GT1JDRUQgbXVzdCBhcHBlYXIgaW4KKy0tIHRo ZSByZWNvbnN0cnVjdGVkIERETC4KK0NSRUFURSBUQUJMRSBub3RlbmZfdGd0IChpZCBpbnQgUFJJ TUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIG5vdGVuZiAoCisgICAgYSBpbnQsCisgICAgQ09OU1RS QUlOVCBub3RlbmZfZmsgRk9SRUlHTiBLRVkgKGEpIFJFRkVSRU5DRVMgbm90ZW5mX3RndChpZCkK KyAgICAgICAgICAgICAgICAgICAgICAgICBOT1QgRU5GT1JDRUQKKyk7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ25vdGVuZic6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw Z19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3Qubm90ZW5mIChhIGludGVnZXIpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0 Lm5vdGVuZiBBREQgQ09OU1RSQUlOVCBub3RlbmZfZmsgRk9SRUlHTiBLRVkgKGEpIFJFRkVSRU5D RVMgcGd0YmxfZGRsX3Rlc3Qubm90ZW5mX3RndChpZCkgTk9UIEVORk9SQ0VEOworKDIgcm93cykK KworLS0gU2VsZi1yZWZlcmVuY2luZyBGSzogdGhlIFBLIG11c3QgYXBwZWFyIGJlZm9yZSB0aGUg RksgdGhhdCByZWZlcmVuY2VzIGl0LgorLS0gVGhlIGNhdGFsb2cgc2NhbiByZXR1cm5zIGNvbnN0 cmFpbnRzIGluIG5hbWUgb3JkZXI7IHdpdGhvdXQgdGhlIGZpeCwKKy0tICJzZWxmX3JlZl9wYXJl bnRfaWRfZmtleSIgc29ydHMgYmVmb3JlICJzZWxmX3JlZl9wa2V5IiBhbmQgdGhlIEZLIEFERAor LS0gQ09OU1RSQUlOVCBmYWlscyB3aXRoICJ0aGVyZSBpcyBubyB1bmlxdWUgY29uc3RyYWludCBt YXRjaGluZyBnaXZlbiBrZXlzIi4KK0NSRUFURSBUQUJMRSBzZWxmX3JlZiAoCisgICAgaWQgICAg ICAgIGludCBQUklNQVJZIEtFWSwKKyAgICBwYXJlbnRfaWQgaW50IFJFRkVSRU5DRVMgc2VsZl9y ZWYoaWQpCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdzZWxmX3JlZic6OnJl Z2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Quc2Vs Zl9yZWYgKGlkIGludGVnZXIgTk9UIE5VTEwsIHBhcmVudF9pZCBpbnRlZ2VyKTsKKyBBTFRFUiBU QUJMRSBwZ3RibF9kZGxfdGVzdC5zZWxmX3JlZiBBREQgQ09OU1RSQUlOVCBzZWxmX3JlZl9wa2V5 IFBSSU1BUlkgS0VZIChpZCk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3Quc2VsZl9yZWYg QUREIENPTlNUUkFJTlQgc2VsZl9yZWZfcGFyZW50X2lkX2ZrZXkgRk9SRUlHTiBLRVkgKHBhcmVu dF9pZCkgUkVGRVJFTkNFUyBwZ3RibF9kZGxfdGVzdC5zZWxmX3JlZihpZCk7CisoMyByb3dzKQor CistLSBXSVRIT1VUIE9WRVJMQVBTIG9uIGEgUFJJTUFSWSBLRVkgKFBHIDE3KTogdGhlIHJhbmdl LXR5cGUgcGVyaW9kCistLSBjb2x1bW4gZm9ybXMgYSB0ZW1wb3JhbCBwcmltYXJ5IGtleTsgV0lU SE9VVCBPVkVSTEFQUyBtdXN0IGFwcGVhcgorLS0gaW5zaWRlIHRoZSBrZXkgY29sdW1uIGxpc3Qg aW4gdGhlIHJlY29uc3RydWN0ZWQgQUxURVIgVEFCTEUuCistLSBCb3RoIGNvbHVtbnMgdXNlIHJh bmdlIHR5cGVzIHdpdGggbmF0aXZlIEdpU1Qgc3VwcG9ydCBzbyBubworLS0gYnRyZWVfZ2lzdCBl eHRlbnNpb24gaXMgbmVlZGVkLgorQ1JFQVRFIFRBQkxFIHRlbXBvcmFsX3BrICgKKyAgICBncnAg IGludDRyYW5nZSwKKyAgICBkdXJpbmcgZGF0ZXJhbmdlLAorICAgIFBSSU1BUlkgS0VZIChncnAs IGR1cmluZyBXSVRIT1VUIE9WRVJMQVBTKQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgndGVtcG9yYWxfcGsnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnRlbXBvcmFsX3BrIChncnAgaW50NHJhbmdlIE5P VCBOVUxMLCBkdXJpbmcgZGF0ZXJhbmdlIE5PVCBOVUxMKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9k ZGxfdGVzdC50ZW1wb3JhbF9wayBBREQgQ09OU1RSQUlOVCB0ZW1wb3JhbF9wa19wa2V5IFBSSU1B UlkgS0VZIChncnAsIGR1cmluZyBXSVRIT1VUIE9WRVJMQVBTKTsKKygyIHJvd3MpCisKKy0tIElu ZGV4ZXM6IGZ1bmN0aW9uYWwgYW5kIHBhcnRpYWwuICBDb25zdHJhaW50LWJhY2tpbmcgaW5kZXhl cyBhcmUKKy0tIHN1cHByZXNzZWQgKHRoZXkgYXJlIGVtaXR0ZWQgYnkgdGhlIGNvbnN0cmFpbnQg bG9vcCkuCitDUkVBVEUgVEFCTEUgaWR4ZCAoaWQgaW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQp OworQ1JFQVRFIElOREVYIGlkeGRfbG93ZXIgT04gaWR4ZCAobG93ZXIobmFtZSkpOworQ1JFQVRF IElOREVYIGlkeGRfcGFydGlhbCBPTiBpZHhkIChpZCkgV0hFUkUgaWQgPiAxMDA7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2Up OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhkIChpZCBpbnRlZ2VyIE5PVCBO VUxMLCBuYW1lIHRleHQpOworIENSRUFURSBJTkRFWCBpZHhkX2xvd2VyIE9OIHBndGJsX2RkbF90 ZXN0LmlkeGQgVVNJTkcgYnRyZWUgKGxvd2VyKG5hbWUpKTsKKyBDUkVBVEUgSU5ERVggaWR4ZF9w YXJ0aWFsIE9OIHBndGJsX2RkbF90ZXN0LmlkeGQgVVNJTkcgYnRyZWUgKGlkKSBXSEVSRSAoaWQg PiAxMDApOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkeGQgQUREIENPTlNUUkFJTlQg aWR4ZF9wa2V5IFBSSU1BUlkgS0VZIChpZCk7CisoNCByb3dzKQorCistLSBJbmhlcml0YW5jZSwg aW5jbHVkaW5nIGEgY2hpbGQgREVGQVVMVCBvdmVycmlkZSBvbiBhbiBpbmhlcml0ZWQgY29sdW1u LgorQ1JFQVRFIFRBQkxFIHBhciAoYSBpbnQgREVGQVVMVCAxLCBiIHRleHQpOworQ1JFQVRFIFRB QkxFIGNoIChjIGludCkgSU5IRVJJVFMgKHBhcik7CitBTFRFUiBUQUJMRSBjaCBBTFRFUiBDT0xV TU4gYSBTRVQgREVGQVVMVCA5OTk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2No Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNoIChjIGludGVnZXIp IElOSEVSSVRTIChwZ3RibF9kZGxfdGVzdC5wYXIpOworIEFMVEVSIFRBQkxFIE9OTFkgcGd0Ymxf ZGRsX3Rlc3QuY2ggQUxURVIgQ09MVU1OIGEgU0VUIERFRkFVTFQgOTk5OworKDIgcm93cykKKwor LS0gUGVyLWNvbHVtbiBhdHRvcHRpb25zOiBlbWl0dGVkIGFzIEFMVEVSIENPTFVNTiBTRVQgKC4u LikuCitDUkVBVEUgVEFCTEUgYXR0b3B0IChhIGludCwgYiB0ZXh0KTsKK0FMVEVSIFRBQkxFIGF0 dG9wdCBBTFRFUiBDT0xVTU4gYSBTRVQgKG5fZGlzdGluY3QgPSAxMDApOworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdhdHRvcHQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJs X2RkbF90ZXN0LmF0dG9wdCAoYSBpbnRlZ2VyLCBiIHRleHQpOworIEFMVEVSIFRBQkxFIHBndGJs X2RkbF90ZXN0LmF0dG9wdCBBTFRFUiBDT0xVTU4gYSBTRVQgKG5fZGlzdGluY3Q9JzEwMCcpOwor KDIgcm93cykKKworLS0gUGFydGl0aW9uZWQgdGFibGUgcGFyZW50cyAoUkFOR0UsIEhBU0gsIGFu ZCBMSVNUKS4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2UgKGlkIGludCwgayBpbnQpIFBBUlRJ VElPTiBCWSBSQU5HRSAoaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0 ZWRfcmFuZ2UnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENS RUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFuZ2UgKGlkIGludGVnZXIsIGsgaW50 ZWdlcikgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CisoMSByb3cpCisKK0NSRUFURSBUQUJMRSBw YXJ0ZWRfaGFzaCAoaWQgaW50KSBQQVJUSVRJT04gQlkgSEFTSCAoaWQpOworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfaGFzaCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxz ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFU RSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfaGFzaCAoaWQgaW50ZWdlcikgUEFSVElUSU9O IEJZIEhBU0ggKGlkKTsKKygxIHJvdykKKworQ1JFQVRFIFRBQkxFIHBhcnRlZF9saXN0IChpZCBp bnQsIHJlZ2lvbiB0ZXh0KSBQQVJUSVRJT04gQlkgTElTVCAocmVnaW9uKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2xpc3QnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFs c2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxl X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0 LnBhcnRlZF9saXN0IChpZCBpbnRlZ2VyLCByZWdpb24gdGV4dCkgUEFSVElUSU9OIEJZIExJU1Qg KHJlZ2lvbik7CisoMSByb3cpCisKKy0tIFBhcnRpdGlvbiBjaGlsZHJlbjogRlJPTS9UTywgV0lU SCAobW9kdWx1cywgcmVtYWluZGVyKSwgREVGQVVMVC4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFu Z2VfMSBQQVJUSVRJT04gT0YgcGFydGVkX3JhbmdlCisgICAgRk9SIFZBTFVFUyBGUk9NICgwKSBU TyAoMTAwKTsKK0FMVEVSIFRBQkxFIHBhcnRlZF9yYW5nZV8xIEFMVEVSIENPTFVNTiBrIFNFVCBE RUZBVUxUIDc7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZV8x Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3QucGFydGVkX3JhbmdlXzEgUEFSVElUSU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRl ZF9yYW5nZSBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworIEFMVEVSIFRBQkxFIE9OTFkg cGd0YmxfZGRsX3Rlc3QucGFydGVkX3JhbmdlXzEgQUxURVIgQ09MVU1OIGsgU0VUIERFRkFVTFQg NzsKKygyIHJvd3MpCisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfaGFzaF8wIFBBUlRJVElPTiBPRiBw YXJ0ZWRfaGFzaAorICAgIEZPUiBWQUxVRVMgV0lUSCAobW9kdWx1cyAyLCByZW1haW5kZXIgMCk7 CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9oYXNoXzAnOjpyZWdjbGFz cywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRB QkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9oYXNoXzAgUEFSVElUSU9OIE9GIHBndGJsX2RkbF90 ZXN0LnBhcnRlZF9oYXNoIEZPUiBWQUxVRVMgV0lUSCAobW9kdWx1cyAyLCByZW1haW5kZXIgMCk7 CisoMSByb3cpCisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2VfZGVmIFBBUlRJVElPTiBPRiBw YXJ0ZWRfcmFuZ2UgREVGQVVMVDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFy dGVkX3JhbmdlX2RlZic6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFuZ2VfZGVm IFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFuZ2UgREVGQVVMVDsKKygxIHJv dykKKworLS0gTm9uLWNvbnN0cmFpbnQtYmFja2VkIGluZGV4IG9uIGEgcGFydGl0aW9uZWQgdGFi bGU6IHRoZSBwYXJlbnQncyBpbmRleCBEREwKKy0tIG11c3QgYXBwZWFyIG9uY2U7IHRoZSBhdXRv LWNyZWF0ZWQgY2hpbGQgcGFydGl0aW9uIGluZGV4ZXMgKHJlbGlzcGFydGl0aW9uPXQpCistLSBt dXN0IGJlIHN1cHByZXNzZWQgc28gdGhlIERETCByb3VuZC10cmlwcyB3aXRob3V0ICJyZWxhdGlv biBhbHJlYWR5IGV4aXN0cyIuCitDUkVBVEUgVEFCTEUgcGFydGVkX2lkeCAoaWQgaW50LCByZWdp b24gdGV4dCkgUEFSVElUSU9OIEJZIExJU1QgKHJlZ2lvbik7CitDUkVBVEUgVEFCTEUgcGFydGVk X2lkeF9hIFBBUlRJVElPTiBPRiBwYXJ0ZWRfaWR4IEZPUiBWQUxVRVMgSU4gKCdhJyk7CitDUkVB VEUgVU5JUVVFIElOREVYIHBhcnRlZF9pZHhfdWlkeCBPTiBwYXJ0ZWRfaWR4IChpZCwgcmVnaW9u KTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2lkeCc6OnJlZ2NsYXNz LCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfaWR4IChpZCBpbnRlZ2VyLCByZWdp b24gdGV4dCkgUEFSVElUSU9OIEJZIExJU1QgKHJlZ2lvbik7CisgQ1JFQVRFIFVOSVFVRSBJTkRF WCBwYXJ0ZWRfaWR4X3VpZHggT04gcGd0YmxfZGRsX3Rlc3QucGFydGVkX2lkeCBVU0lORyBidHJl ZSAoaWQsIHJlZ2lvbik7CisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9pZHhf YSBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Rlc3QucGFydGVkX2lkeCBGT1IgVkFMVUVTIElOICgn YScpOworKDMgcm93cykKKworLS0gUGxhaW4gKG5vbi11bmlxdWUpIENSRUFURSBJTkRFWCBvbiBw YXJ0aXRpb25lZCB0YWJsZTogdGhlIGF1dG8tY3JlYXRlZCBjaGlsZAorLS0gaW5kZXggKHJlbGlz cGFydGl0aW9uPXRydWUpIGlzIHN1cHByZXNzZWQsIGp1c3QgbGlrZSB0aGUgVU5JUVVFIGNhc2Uu CitDUkVBVEUgVEFCTEUgcGFydGVkX3BsYWluIChpZCBpbnQsIHZhbCB0ZXh0KSBQQVJUSVRJT04g QlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcGxhaW5fYSBQQVJUSVRJT04gT0Yg cGFydGVkX3BsYWluIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitDUkVBVEUgSU5ERVgg cGFydGVkX3BsYWluX2lkX2lkeCBPTiBwYXJ0ZWRfcGxhaW4gKGlkKTsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3BsYWluJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNl KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19n ZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3BsYWluIChpZCBp bnRlZ2VyLCB2YWwgdGV4dCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CisgQ1JFQVRFIElOREVY IHBhcnRlZF9wbGFpbl9pZF9pZHggT04gcGd0YmxfZGRsX3Rlc3QucGFydGVkX3BsYWluIFVTSU5H IGJ0cmVlIChpZCk7CisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9wbGFpbl9h IFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcGxhaW4gRk9SIFZBTFVFUyBGUk9N ICgwKSBUTyAoMTAwKTsKKygzIHJvd3MpCisKKy0tIENvbnN0cmFpbnQtYmFja2VkIFBSSU1BUlkg S0VZIG9uIHBhcnRpdGlvbmVkIHRhYmxlOiB0aGUgY2hpbGQncyBpbmhlcml0ZWQKKy0tIGNvbnN0 cmFpbnQgKGNvbmlzbG9jYWw9ZmFsc2UpIGFuZCBpdHMgYmFja2luZyBpbmRleCBhcmUgYm90aCBz dXBwcmVzc2VkLgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9wayAoaWQgaW50LCByZWdpb24gdGV4dCkg UEFSVElUSU9OIEJZIExJU1QgKHJlZ2lvbik7CitDUkVBVEUgVEFCTEUgcGFydGVkX3BrX2EgUEFS VElUSU9OIE9GIHBhcnRlZF9wayBGT1IgVkFMVUVTIElOICgnYScpOworQUxURVIgVEFCTEUgcGFy dGVkX3BrIEFERCBQUklNQVJZIEtFWSAoaWQsIHJlZ2lvbik7CitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ3BhcnRlZF9wayc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9k ZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFU RSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcGsgKGlkIGludGVnZXIgTk9UIE5VTEwsIHJl Z2lvbiB0ZXh0IE5PVCBOVUxMKSBQQVJUSVRJT04gQlkgTElTVCAocmVnaW9uKTsKKyBBTFRFUiBU QUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcGsgQUREIENPTlNUUkFJTlQgcGFydGVkX3BrX3Br ZXkgUFJJTUFSWSBLRVkgKGlkLCByZWdpb24pOworIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVz dC5wYXJ0ZWRfcGtfYSBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3BrIEZPUiBW QUxVRVMgSU4gKCdhJyk7CisoMyByb3dzKQorCistLSBNdWx0aS1sZXZlbCAoc3ViLXBhcnRpdGlv bmVkKSB0YWJsZSB3aXRoIGEgQ1JFQVRFIElOREVYIG9uIHRoZSByb290LgorLS0gVGhlIG1pZC1s ZXZlbCBwYXJ0aXRpb25lZCBpbmRleCAocmVsaXNwYXJ0aXRpb249dHJ1ZSwgcmVsa2luZD0nSScp IGFuZCB0aGUKKy0tIGxlYWYgaW5kZXggKHJlbGlzcGFydGl0aW9uPXRydWUsIHJlbGtpbmQ9J2kn KSBhcmUgYm90aCBzdXBwcmVzc2VkLgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9zdWIgKGlkIGludCwg cmVnaW9uIHRleHQpIFBBUlRJVElPTiBCWSBMSVNUIChyZWdpb24pOworQ1JFQVRFIFRBQkxFIHBh cnRlZF9zdWJfYSBQQVJUSVRJT04gT0YgcGFydGVkX3N1YgorICAgIEZPUiBWQUxVRVMgSU4gKCdh JykgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcGFydGVkX3N1Yl9hMSBQ QVJUSVRJT04gT0YgcGFydGVkX3N1Yl9hIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitD UkVBVEUgSU5ERVggcGFydGVkX3N1Yl9pZF9pZHggT04gcGFydGVkX3N1YiAoaWQpOworU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfc3ViJzo6cmVnY2xhc3MsIG93bmVyID0+ IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJs X2RkbF90ZXN0LnBhcnRlZF9zdWIgKGlkIGludGVnZXIsIHJlZ2lvbiB0ZXh0KSBQQVJUSVRJT04g QlkgTElTVCAocmVnaW9uKTsKKyBDUkVBVEUgSU5ERVggcGFydGVkX3N1Yl9pZF9pZHggT04gcGd0 YmxfZGRsX3Rlc3QucGFydGVkX3N1YiBVU0lORyBidHJlZSAoaWQpOworIENSRUFURSBUQUJMRSBw Z3RibF9kZGxfdGVzdC5wYXJ0ZWRfc3ViX2EgUEFSVElUSU9OIE9GIHBndGJsX2RkbF90ZXN0LnBh cnRlZF9zdWIgRk9SIFZBTFVFUyBJTiAoJ2EnKSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKKyBD UkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3N1Yl9hMSBQQVJUSVRJT04gT0YgcGd0 YmxfZGRsX3Rlc3QucGFydGVkX3N1Yl9hIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7Ciso NCByb3dzKQorCistLSBQYXJ0aXRpb24gY2hpbGQgd2l0aCBpdHMgb3duIGxvY2FsbHktZGVmaW5l ZCBpbmRleCAocmVsaXNwYXJ0aXRpb249ZmFsc2UpOgorLS0gdGhpcyBpcyBOT1QgaW5oZXJpdGVk IGZyb20gYW55IHBhcmVudCBwYXJ0aXRpb25lZCBpbmRleCBhbmQgbXVzdCBiZSBlbWl0dGVkLgor Q1JFQVRFIFRBQkxFIHBhcnRlZF9jaGlsZF9pZHggKGlkIGludCwgcmVnaW9uIHRleHQpIFBBUlRJ VElPTiBCWSBMSVNUIChyZWdpb24pOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9jaGlsZF9pZHhfYSBQ QVJUSVRJT04gT0YgcGFydGVkX2NoaWxkX2lkeCBGT1IgVkFMVUVTIElOICgnYScpOworQ1JFQVRF IElOREVYIHBhcnRlZF9jaGlsZF9pZHhfYV9pZCBPTiBwYXJ0ZWRfY2hpbGRfaWR4X2EgKGlkKTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2NoaWxkX2lkeCc6OnJlZ2Ns YXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5w YXJ0ZWRfY2hpbGRfaWR4IChpZCBpbnRlZ2VyLCByZWdpb24gdGV4dCkgUEFSVElUSU9OIEJZIExJ U1QgKHJlZ2lvbik7CisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9jaGlsZF9p ZHhfYSBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Rlc3QucGFydGVkX2NoaWxkX2lkeCBGT1IgVkFM VUVTIElOICgnYScpOworIENSRUFURSBJTkRFWCBwYXJ0ZWRfY2hpbGRfaWR4X2FfaWQgT04gcGd0 YmxfZGRsX3Rlc3QucGFydGVkX2NoaWxkX2lkeF9hIFVTSU5HIGJ0cmVlIChpZCk7CisoMyByb3dz KQorCistLSBNaXg6IHBhcmVudCBoYXMgYSBDUkVBVEUgSU5ERVggKGF1dG8tcHJvcGFnYXRlZCB0 byBjaGlsZCwgcmVsaXNwYXJ0aXRpb249dHJ1ZSwKKy0tIHN1cHByZXNzZWQpIEFORCB0aGUgY2hp bGQgaGFzIGl0cyBvd24gbG9jYWwgaW5kZXggKHJlbGlzcGFydGl0aW9uPWZhbHNlLCBlbWl0dGVk KS4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfbWl4ZWQgKGlkIGludCwgcmVnaW9uIHRleHQpIFBBUlRJ VElPTiBCWSBMSVNUIChyZWdpb24pOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9taXhlZF9hIFBBUlRJ VElPTiBPRiBwYXJ0ZWRfbWl4ZWQgRk9SIFZBTFVFUyBJTiAoJ2EnKTsKK0NSRUFURSBJTkRFWCBw YXJ0ZWRfbWl4ZWRfaWQgT04gcGFydGVkX21peGVkIChpZCk7CitDUkVBVEUgSU5ERVggcGFydGVk X21peGVkX2FfcmVnaW9uIE9OIHBhcnRlZF9taXhlZF9hIChyZWdpb24pOworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfbWl4ZWQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFs c2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0 X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFU RSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfbWl4ZWQgKGlkIGludGVnZXIsIHJlZ2lvbiB0 ZXh0KSBQQVJUSVRJT04gQlkgTElTVCAocmVnaW9uKTsKKyBDUkVBVEUgSU5ERVggcGFydGVkX21p eGVkX2lkIE9OIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9taXhlZCBVU0lORyBidHJlZSAoaWQpOwor IENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfbWl4ZWRfYSBQQVJUSVRJT04gT0Yg cGd0YmxfZGRsX3Rlc3QucGFydGVkX21peGVkIEZPUiBWQUxVRVMgSU4gKCdhJyk7CisgQ1JFQVRF IElOREVYIHBhcnRlZF9taXhlZF9hX3JlZ2lvbiBPTiBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfbWl4 ZWRfYSBVU0lORyBidHJlZSAocmVnaW9uKTsKKyg0IHJvd3MpCisKKy0tIEZLIG9uIGEgcGFydGl0 aW9uZWQgdGFibGU6IGRlY2xhcmVkIG9uIHRoZSBwYXJlbnQ7IHBhcnRpdGlvbiBjaGlsZHJlbiBp bmhlcml0CistLSB0aGUgY29uc3RyYWludCB3aXRoIGNvbmlzbG9jYWw9ZmFsc2UgYW5kIG11c3Qg bm90IHJlLWVtaXQgaXQuCitDUkVBVEUgVEFCTEUgcGFydGVkX2ZrX3RndCAoaWQgaW50IFBSSU1B UlkgS0VZKTsKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfZmsgKGlkIGludCwgdGd0X2lkIGludCBSRUZF UkVOQ0VTIHBhcnRlZF9ma190Z3QoaWQpKQorICAgIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOwor Q1JFQVRFIFRBQkxFIHBhcnRlZF9ma19hIFBBUlRJVElPTiBPRiBwYXJ0ZWRfZmsgRk9SIFZBTFVF UyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFy dGVkX2ZrJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJs X2RkbF90ZXN0LnBhcnRlZF9mayAoaWQgaW50ZWdlciwgdGd0X2lkIGludGVnZXIpIFBBUlRJVElP TiBCWSBSQU5HRSAoaWQpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9mayBB REQgQ09OU1RSQUlOVCBwYXJ0ZWRfZmtfdGd0X2lkX2ZrZXkgRk9SRUlHTiBLRVkgKHRndF9pZCkg UkVGRVJFTkNFUyBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfZmtfdGd0KGlkKTsKKyBDUkVBVEUgVEFC TEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX2ZrX2EgUEFSVElUSU9OIE9GIHBndGJsX2RkbF90ZXN0 LnBhcnRlZF9mayBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworKDMgcm93cykKKworLS0g U3RhdGlzdGljcyBkZWNsYXJlZCBleHBsaWNpdGx5IG9uIGEgcGFydGl0aW9uIGNoaWxkIChub3Qg YXV0by1wcm9wYWdhdGVkKToKKy0tIHRoZSBjaGlsZCdzIHN0YXRpc3RpY3Mgb2JqZWN0IGFwcGVh cnMgaW5zaWRlIHRoZSBjaGlsZCdzIERETCBibG9jay4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfc3R4 IChpZCBpbnQsIHJlZ2lvbiB0ZXh0LCB2YWwgZmxvYXQpIFBBUlRJVElPTiBCWSBMSVNUIChyZWdp b24pOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9zdHhfYSBQQVJUSVRJT04gT0YgcGFydGVkX3N0eCBG T1IgVkFMVUVTIElOICgnYScpOworQ1JFQVRFIFNUQVRJU1RJQ1MgcGFydGVkX3N0eF9zdGF0IChu ZGlzdGluY3QpIE9OIGlkLCByZWdpb24gRlJPTSBwYXJ0ZWRfc3R4OworQ1JFQVRFIFNUQVRJU1RJ Q1MgcGFydGVkX3N0eF9hX3N0YXQgKG5kaXN0aW5jdCkgT04gaWQsIHZhbCBGUk9NIHBhcnRlZF9z dHhfYTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3N0eCc6OnJlZ2Ns YXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rl c3QucGFydGVkX3N0eCAoaWQgaW50ZWdlciwgcmVnaW9uIHRleHQsIHZhbCBkb3VibGUgcHJlY2lz aW9uKSBQQVJUSVRJT04gQlkgTElTVCAocmVnaW9uKTsKKyBDUkVBVEUgU1RBVElTVElDUyBwZ3Ri bF9kZGxfdGVzdC5wYXJ0ZWRfc3R4X3N0YXQgKG5kaXN0aW5jdCkgT04gaWQsIHJlZ2lvbiBGUk9N IHBndGJsX2RkbF90ZXN0LnBhcnRlZF9zdHg7CisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0 LnBhcnRlZF9zdHhfYSBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3N0eCBGT1Ig VkFMVUVTIElOICgnYScpOworIENSRUFURSBTVEFUSVNUSUNTIHBndGJsX2RkbF90ZXN0LnBhcnRl ZF9zdHhfYV9zdGF0IChuZGlzdGluY3QpIE9OIGlkLCB2YWwgRlJPTSBwZ3RibF9kZGxfdGVzdC5w YXJ0ZWRfc3R4X2E7CisoNCByb3dzKQorCitEUk9QIFRBQkxFIHBhcnRlZF9zdHg7CistLSBOTyBJ TkhFUklUIENIRUNLIGNvbnN0cmFpbnQ6IHRoZSBOTyBJTkhFUklUIGZsYWcgbXVzdCBhcHBlYXIg dmVyYmF0aW0gaW4gdGhlCistLSBpbmxpbmUgY29uc3RyYWludCBkZWZpbml0aW9uIGluc2lkZSB0 aGUgQ1JFQVRFIFRBQkxFIGJvZHkuCitDUkVBVEUgVEFCTEUgbm9pbmhjaGsgKGlkIGludCwgdmFs IGludCwKKyAgICBDT05TVFJBSU5UIHZhbF9wb3MgQ0hFQ0sgKHZhbCA+IDApIE5PIElOSEVSSVQp OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdub2luaGNoayc6OnJlZ2NsYXNzLCBv d25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ub2luaGNo ayAoaWQgaW50ZWdlciwgdmFsIGludGVnZXIsIENPTlNUUkFJTlQgdmFsX3BvcyBDSEVDSyAoKHZh bCA+IDApKSBOTyBJTkhFUklUKTsKKygxIHJvdykKKworRFJPUCBUQUJMRSBub2luaGNoazsKKy0t IE11bHRpcGxlIGluaGVyaXRhbmNlIHBhcmVudHM6IHRoZSBJTkhFUklUUyBjbGF1c2UgbXVzdCBs aXN0IGJvdGggcGFyZW50cyBpbgorLS0gZGVjbGFyYXRpb24gb3JkZXI7IG9ubHkgdGhlIGxvY2Fs bHktZGVmaW5lZCBjb2x1bW4gYXBwZWFycyBpbiB0aGUgY29sdW1uIGxpc3QuCitDUkVBVEUgVEFC TEUgbWlfcDEgKGEgaW50IERFRkFVTFQgMSk7CitDUkVBVEUgVEFCTEUgbWlfcDIgKGIgdGV4dCBE RUZBVUxUICd4Jyk7CitDUkVBVEUgVEFCTEUgbWlfY2hpbGQgKGMgZmxvYXQpIElOSEVSSVRTICht aV9wMSwgbWlfcDIpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdtaV9jaGlsZCc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxf dGVzdC5taV9jaGlsZCAoYyBkb3VibGUgcHJlY2lzaW9uKSBJTkhFUklUUyAocGd0YmxfZGRsX3Rl c3QubWlfcDEsIHBndGJsX2RkbF90ZXN0Lm1pX3AyKTsKKygxIHJvdykKKworRFJPUCBUQUJMRSBt aV9wMSwgbWlfcDIgQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgbWlf Y2hpbGQKKy0tIFJ1bGVzLgorQ1JFQVRFIFRBQkxFIHJ0IChpZCBpbnQpOworQ1JFQVRFIFRBQkxF IHJ0X2xvZyAoaWQgaW50KTsKK0NSRUFURSBSVUxFIHJ0X2xvZ19pbnNlcnQgQVMgT04gSU5TRVJU IFRPIHJ0CisgICAgRE8gQUxTTyBJTlNFUlQgSU5UTyBydF9sb2cgVkFMVUVTIChORVcuaWQpOwor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdydCc6OnJlZ2NsYXNzLCBvd25lciA9PiBm YWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJ0IChpZCBpbnRlZ2VyKTsKKyBDUkVBVEUgUlVM RSBydF9sb2dfaW5zZXJ0IEFTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICsKKyAgICAgT04gSU5TRVJUIFRPIHBndGJsX2RkbF90ZXN0LnJ0IERPICBJTlNF UlQgSU5UTyBwZ3RibF9kZGxfdGVzdC5ydF9sb2cgKGlkKSsKKyAgIFZBTFVFUyAobmV3LmlkKTsK KygyIHJvd3MpCisKKy0tIEV4dGVuZGVkIHN0YXRpc3RpY3MuCitDUkVBVEUgVEFCTEUgc3R4IChh IGludCwgYiBpbnQsIGMgaW50KTsKK0NSRUFURSBTVEFUSVNUSUNTIHN0eF9uZHYgKG5kaXN0aW5j dCkgT04gYSwgYiBGUk9NIHN0eDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3R4 Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJs X2RkbF90ZXN0LnN0eCAoYSBpbnRlZ2VyLCBiIGludGVnZXIsIGMgaW50ZWdlcik7CisgQ1JFQVRF IFNUQVRJU1RJQ1MgcGd0YmxfZGRsX3Rlc3Quc3R4X25kdiAobmRpc3RpbmN0KSBPTiBhLCBiIEZS T00gcGd0YmxfZGRsX3Rlc3Quc3R4OworKDIgcm93cykKKworLS0gUm93LWxldmVsIHNlY3VyaXR5 IHRvZ2dsZXMuCitDUkVBVEUgVEFCTEUgcmxzIChpZCBpbnQpOworQUxURVIgVEFCTEUgcmxzIEVO QUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CitBTFRFUiBUQUJMRSBybHMgRk9SQ0UgUk9XIExFVkVM IFNFQ1VSSVRZOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdybHMnOjpyZWdjbGFz cywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0 LnJscyAoaWQgaW50ZWdlcik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmxzIEVOQUJM RSBST1cgTEVWRUwgU0VDVVJJVFk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmxzIEZP UkNFIFJPVyBMRVZFTCBTRUNVUklUWTsKKygzIHJvd3MpCisKKy0tIFJFUExJQ0EgSURFTlRJVFk6 IGVtaXR0ZWQgb25seSB3aGVuIG5vdCB0aGUgZGVmYXVsdC4KK0NSRUFURSBUQUJMRSByaV9mdWxs IChhIGludCk7CitBTFRFUiBUQUJMRSByaV9mdWxsIFJFUExJQ0EgSURFTlRJVFkgRlVMTDsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfZnVsbCc6OnJlZ2NsYXNzLCBvd25lciA9 PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmlfZnVsbCAo YSBpbnRlZ2VyKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5yaV9mdWxsIFJFUExJQ0Eg SURFTlRJVFkgRlVMTDsKKygyIHJvd3MpCisKK0NSRUFURSBUQUJMRSByaV9pZHggKGEgaW50IE5P VCBOVUxMKTsKK0NSRUFURSBVTklRVUUgSU5ERVggcmlfaWR4X2EgT04gcmlfaWR4IChhKTsKK0FM VEVSIFRBQkxFIHJpX2lkeCBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHJpX2lkeF9hOwor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9pZHgnOjpyZWdjbGFzcywgb3duZXIg PT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRF IFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX2lkeCAoYSBpbnRlZ2VyIE5PVCBOVUxMKTsKKyBDUkVB VEUgVU5JUVVFIElOREVYIHJpX2lkeF9hIE9OIHBndGJsX2RkbF90ZXN0LnJpX2lkeCBVU0lORyBi dHJlZSAoYSk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmlfaWR4IFJFUExJQ0EgSURF TlRJVFkgVVNJTkcgSU5ERVggcmlfaWR4X2E7CisoMyByb3dzKQorCistLSBVTkxPR0dFRCArIHJl bG9wdGlvbnMuCitDUkVBVEUgVU5MT0dHRUQgVEFCTEUgdW5vIChpZCBpbnQpIFdJVEggKGZpbGxm YWN0b3IgPSA3MCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Vubyc6OnJlZ2Ns YXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdf Z2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgQ1JFQVRFIFVOTE9HR0VEIFRBQkxFIHBndGJsX2RkbF90ZXN0LnVubyAo aWQgaW50ZWdlcikgV0lUSCAoZmlsbGZhY3Rvcj0nNzAnKTsKKygxIHJvdykKKworLS0gVHlwZWQg dGFibGUgKENSRUFURSBUQUJMRSBPRiB0eXBlX25hbWUpLiAgQ29sdW1ucyBpbmhlcml0ZWQgZnJv bSB0aGUKKy0tIHR5cGUgZW1pdCBub3RoaW5nOyBsb2NhbGx5LWFwcGxpZWQgREVGQVVMVCwgTk9U IE5VTEwgYW5kIENIRUNLIGNvbWUKKy0tIG91dCB0aHJvdWdoIGEgc2luZ2xlICIoY29sIFdJVEgg T1BUSU9OUyAuLi4pIiBsaXN0LgorQ1JFQVRFIFRZUEUgdHlwZWRfdCBBUyAoYSBpbnQsIGIgdGV4 dCk7CitDUkVBVEUgVEFCTEUgdHlwZWRfcGxhaW4gT0YgdHlwZWRfdDsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgndHlwZWRfcGxhaW4nOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2Up OworICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0 LnR5cGVkX3BsYWluIE9GIHBndGJsX2RkbF90ZXN0LnR5cGVkX3Q7CisoMSByb3cpCisKK0NSRUFU RSBUQUJMRSB0eXBlZF9vdmVyIE9GIHR5cGVkX3QgKAorICAgIGEgV0lUSCBPUFRJT05TIERFRkFV TFQgNyBOT1QgTlVMTCwKKyAgICBiIFdJVEggT1BUSU9OUyBOT1QgTlVMTCwKKyAgICBDT05TVFJB SU5UIGJfbm9uZW1wdHkgQ0hFQ0sgKGxlbmd0aChiKSA+IDApCispOworU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCd0eXBlZF9vdmVyJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QudHlwZWRfb3ZlciBPRiBw Z3RibF9kZGxfdGVzdC50eXBlZF90IChhIFdJVEggT1BUSU9OUyBERUZBVUxUIDcgTk9UIE5VTEws IGIgV0lUSCBPUFRJT05TIE5PVCBOVUxMLCBDT05TVFJBSU5UIGJfbm9uZW1wdHkgQ0hFQ0sgKChs ZW5ndGgoYikgPiAwKSkpOworKDEgcm93KQorCistLSBUZW1wb3JhcnkgdGFibGVzICsgT04gQ09N TUlULiAgVGVtcCB0YWJsZXMgbXVzdCBuZXZlciBiZSBlbWl0dGVkIHdpdGgKKy0tIHRoZSBzZXNz aW9uLXByaXZhdGUgcGdfdGVtcF9OTiBzY2hlbWEgcHJlZml4IC0tIHRoZSBURU1QT1JBUlkga2V5 d29yZAorLS0gYWxyZWFkeSBwbGFjZXMgdGhlIHRhYmxlIGluIHBnX3RlbXAgYW5kIHRoZSBwcmVm aXggaXMgbm9uLXJlcGxheWFibGUuCistLSBPTiBDT01NSVQgRFJPUCBvbmx5IGZpcmVzIGF0IGNv bW1pdCwgc28gdGhlIHF1ZXJpZXMgdGhhdCBuZWVkIHRvIHNlZQorLS0gdGhlIGNhdGFsb2cgZW50 cnkgbXVzdCBydW4gaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24gYXMgdGhlIENSRUFURS4KK0JFR0lO OworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kZWZhdWx0IChpZCBpbnQpOworQ1JFQVRFIFRFTVAg VEFCTEUgdGVtcF9kZWxldGUgKGlkIGludCkgT04gQ09NTUlUIERFTEVURSBST1dTOworQ1JFQVRF IFRFTVAgVEFCTEUgdGVtcF9kcm9wIChpZCBpbnQpIE9OIENPTU1JVCBEUk9QOworU0VMRUNUIGxp bmUgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0ZW1wX2RlZmF1bHQnOjpyZWdjbGFzcywgb3duZXIg PT4gZmFsc2UpIEFTIGxpbmUKK1dIRVJFIGxpbmUgTElLRSAnQ1JFQVRFICUnOworICAgICAgICAg ICAgICAgICAgICAgICBsaW5lICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEVNUE9SQVJZ IFRBQkxFIHRlbXBfZGVmYXVsdCAoaWQgaW50ZWdlcik7CisoMSByb3cpCisKK1NFTEVDVCBsaW5l IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcF9kZWxldGUnOjpyZWdjbGFzcywgb3duZXIgPT4g ZmFsc2UpIEFTIGxpbmUKK1dIRVJFIGxpbmUgTElLRSAnQ1JFQVRFICUnOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEVNUE9SQVJZIFRBQkxFIHRlbXBfZGVsZXRl IChpZCBpbnRlZ2VyKSBPTiBDT01NSVQgREVMRVRFIFJPV1M7CisoMSByb3cpCisKK1NFTEVDVCBs aW5lIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcF9kcm9wJzo6cmVnY2xhc3MsIG93bmVyID0+ IGZhbHNlKSBBUyBsaW5lCitXSEVSRSBsaW5lIExJS0UgJ0NSRUFURSAlJzsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRSB0ZW1wX2Ryb3AgKGlkIGludGVnZXIpIE9OIENP TU1JVCBEUk9QOworKDEgcm93KQorCitST0xMQkFDSzsKKy0tIFByZXR0eSBtb2RlLgorU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxz ZSwgcHJldHR5ID0+IHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dl dF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuYmFzaWMgKCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICBpZCBpbnRlZ2VyIE5PVCBOVUxM LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisg ICAgIG5hbWUgdGV4dCBDT0xMQVRFICJDIiBERUZBVUxUICdhbm9uJzo6dGV4dCBOT1QgTlVMTCAg ICAgICAgICAgICAgICAgICAgICsKKyApOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmJh c2ljIEFERCBDT05TVFJBSU5UIGJhc2ljX3BrZXkgUFJJTUFSWSBLRVkgKGlkKTsKKygyIHJvd3Mp CisKKy0tIG9ubHlfa2luZHMgLyBleGNlcHRfa2luZHMgZ2F0aW5nOiBlYWNoIGVtaXRzIGVpdGhl ciBvbmx5IHRoZSBsaXN0ZWQga2luZHMKKy0tIChvbmx5X2tpbmRzKSBvciBldmVyeSBraW5kIGV4 Y2VwdCB0aGUgbGlzdGVkIG9uZXMgKGV4Y2VwdF9raW5kcykuICBUaGUgdHdvCistLSBhcmUgbXV0 dWFsbHkgZXhjbHVzaXZlLiAgS2luZCB2b2NhYnVsYXJ5OiB0YWJsZSwgaW5kZXgsCistLSBwcmlt YXJ5X2tleSwgdW5pcXVlLCBjaGVjaywgZm9yZWlnbl9rZXksIGV4Y2x1c2lvbiwgcnVsZSwKKy0t IHN0YXRpc3RpY3MsIHRyaWdnZXIsIHBvbGljeSwgcmxzLCByZXBsaWNhX2lkZW50aXR5LCBwYXJ0 aXRpb24uCistLSBOT1QgTlVMTCBpcyBub3QgaW4gdGhlIHZvY2FidWxhcnkgLSBhbHdheXMgZW1p dHRlZCB0byBwcmV2ZW50CistLSBwcm9kdWNpbmcgc2NoZW1hcyB0aGF0IHNpbGVudGx5IGFjY2Vw dCBOVUxMcyB0aGUgc291cmNlIHdvdWxkCistLSBoYXZlIHJlamVjdGVkLgorLS0KKy0tIGV4Y2Vw dF9raW5kcz1pbmRleCBoaWRlcyB0aGUgQ1JFQVRFIElOREVYIHN0YXRlbWVudHMuCitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2Us IGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnaW5kZXgnXSk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkeGQgKGlk IGludGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rl c3QuaWR4ZCBBREQgQ09OU1RSQUlOVCBpZHhkX3BrZXkgUFJJTUFSWSBLRVkgKGlkKTsKKygyIHJv d3MpCisKKy0tIGV4Y2VwdF9raW5kcz1wcmltYXJ5X2tleSx1bmlxdWUsY2hlY2ssZm9yZWlnbl9r ZXksZXhjbHVzaW9uIGhpZGVzIGV2ZXJ5CistLSB0YWJsZS1sZXZlbCBjb25zdHJhaW50LiAgSW5s aW5lIENIRUNLIGluIHRoZSBDUkVBVEUgVEFCTEUgYm9keSBpcworLS0gc3VwcHJlc3NlZCB0b28u CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIg PT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsncHJpbWFyeV9rZXknLCd1bmlxdWUnLCdj aGVjaycsJ2ZvcmVpZ25fa2V5JywnZXhjbHVzaW9uJ10pOworICAgICAgICAgICAgICAgICAgICAg ICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyAoYSBpbnRlZ2VyLCBiIGlu dGVnZXIsIGMgaW50ZWdlcik7CisoMSByb3cpCisKKy0tIGV4Y2VwdF9raW5kcz1mb3JlaWduX2tl eSBzdXBwcmVzc2VzIG9ubHkgRk9SRUlHTiBLRVkgY29uc3RyYWludHM7CistLSBQUklNQVJZIEtF WSwgVU5JUVVFLCBDSEVDSywgYW5kIG5hbWVkIE5PVCBOVUxMIHN0YXkuICBUaGlzIGlzIHRoZQor LS0gZmlyc3QgcGFzcyBvZiB0aGUgdHdvLXBhc3MgRkstY2xvbmUgd29ya2Zsb3c6IGVtaXQgdGFi bGVzIHdpdGhvdXQKKy0tIGNyb3NzLXRhYmxlIEZLcywgbG9hZCBkYXRhLCB0aGVuIHJlLXJ1biB3 aXRoIG9ubHlfa2luZHM9Zm9yZWlnbl9rZXkKKy0tIHRvIGFkZCB0aGVtIG9uY2UgYWxsIHRhcmdl dHMgZXhpc3QuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFz cywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnZm9yZWlnbl9rZXknXSk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90 YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBD UkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyAoYSBpbnRlZ2VyLCBiIGludGVnZXIsIGMg aW50ZWdlciwgQ09OU1RSQUlOVCBjb25zX2FfY2hlY2sgQ0hFQ0sgKChhID4gMCkpKTsKKyBBTFRF UiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIEFERCBDT05TVFJBSU5UIGNvbnNfYl9rZXkgVU5J UVVFIChiKTsKKygyIHJvd3MpCisKKy0tIG9ubHlfa2luZHM9Zm9yZWlnbl9rZXkgaXMgdGhlIHNl Y29uZCBwYXNzIG9mIHRoZSB0d28tcGFzcyBGSy1jbG9uZQorLS0gd29ya2Zsb3c6IGVtaXQgb25s eSB0aGUgQUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5UIC4uLiBGT1JFSUdOCistLSBLRVkg cm93czsgdGhlIENSRUFURSBUQUJMRSBhbmQgZXZlcnkgbm9uLUZLIHN1Yi1vYmplY3QgYXJlCist LSBzdXBwcmVzc2VkICh0aGUgdGFibGUgYWxyZWFkeSBleGlzdHMgZnJvbSB0aGUgZmlyc3QgcGFz cykuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3du ZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ2ZvcmVpZ25fa2V5J10pOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFM VEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgQUREIENPTlNUUkFJTlQgY29uc19jX2ZrZXkg Rk9SRUlHTiBLRVkgKGMpIFJFRkVSRU5DRVMgcGd0YmxfZGRsX3Rlc3QucmVmZChpZCkgREVGRVJS QUJMRSBJTklUSUFMTFkgREVGRVJSRUQ7CisoMSByb3cpCisKKy0tIEEgdGFibGUgd2l0aCBubyBm b3JlaWduIGtleXMgcHJvZHVjZXMgbm8gcm93cyB1bmRlcgorLS0gb25seV9raW5kcz1mb3JlaWdu X2tleS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmVmZCc6OnJlZ2NsYXNzLCBv d25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsnZm9yZWlnbl9rZXknXSk7CisgcGdf Z2V0X3RhYmxlX2RkbCAKKy0tLS0tLS0tLS0tLS0tLS0tLQorKDAgcm93cykKKworLS0gb25seV9r aW5kcz10YWJsZSBlbWl0cyBvbmx5IHRoZSBiYXJlIENSRUFURSBUQUJMRSAod2l0aCBhbnkgaW5s aW5lCistLSBjb2x1bW4tbGV2ZWwgTk9UIE5VTEwgYW5kIENIRUNLKSAtIG5vIGluZGV4ZXMsIG5v IFBSSU1BUlkgS0VZIEFMVEVSLAorLS0gbm8gb3RoZXIgc3ViLW9iamVjdHMuICBVc2VmdWwgZm9y IGNhcHR1cmluZyBhIHRhYmxlJ3Mgc2hhcGUgd2l0aG91dAorLS0gcHVsbGluZyBpbiBldmVyeXRo aW5nIGF0dGFjaGVkIHRvIGl0LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhk Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWyd0YWJsZSdd KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVz dC5pZHhkIChpZCBpbnRlZ2VyIE5PVCBOVUxMLCBuYW1lIHRleHQpOworKDEgcm93KQorCistLSBv bmx5X2tpbmRzPWNoZWNrIG9uIGEgbm9uLXBhcnRpdGlvbiB0YWJsZS4gIFRoZSBjb25zdHJhaW50 IGxvb3AgbXVzdCBlbWl0CistLSBjb2x1bW4tbGV2ZWwgYW5kIHRhYmxlLWxldmVsIENIRUNLIGNv bnN0cmFpbnRzIHZpYSBBTFRFUiBUQUJMRSBoZXJlLAorLS0gYmVjYXVzZSB0aGUgaW5saW5lIHBh dGggaW4gQ1JFQVRFIFRBQkxFIG5ldmVyIHJ1bnMgKEtJTkRfVEFCTEUgaXMKKy0tIG5vdCBpbiB0 aGUgZmlsdGVyKS4KK0NSRUFURSBUQUJMRSBjaGtfb25seSAoCisgICAgaWQgIGludCBQUklNQVJZ IEtFWSwKKyAgICBxdHkgaW50IENIRUNLIChxdHkgPiAwKSwKKyAgICBDT05TVFJBSU5UIGNoa19v bmx5X2lkX3BvcyBDSEVDSyAoaWQgPiAwKQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgnY2hrX29ubHknOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4g QVJSQVlbJ2NoZWNrJ10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBn X2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVz dC5jaGtfb25seSBBREQgQ09OU1RSQUlOVCBjaGtfb25seV9pZF9wb3MgQ0hFQ0sgKChpZCA+IDAp KTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jaGtfb25seSBBREQgQ09OU1RSQUlOVCBj aGtfb25seV9xdHlfY2hlY2sgQ0hFQ0sgKChxdHkgPiAwKSk7CisoMiByb3dzKQorCitEUk9QIFRB QkxFIGNoa19vbmx5OworLS0gb25seV9raW5kcz1wYXJ0aXRpb24gb24gYSBwYXJ0aXRpb25lZC10 YWJsZSBwYXJlbnQ6IGVhY2ggY2hpbGQncyBmdWxsIERETAorLS0gaXMgZW1pdHRlZCAoQ1JFQVRF IFRBQkxFIC4uLiBQQVJUSVRJT04gT0YgLi4uKS4gIFRoZSAicGFydGl0aW9uIgorLS0ga2V5d29y ZCBpcyBhIGdhdGUgYXQgdGhlIHBhcmVudCBsZXZlbDsgaXQgaXMgc3RyaXBwZWQgZnJvbSB0aGUK Ky0tIHByb3BhZ2F0ZWQgZmlsdGVyIHNvIHRoZSBjaGlsZCBkb2VzIG5vdCBleGNsdWRlIGl0cyBv d24KKy0tIENSRUFURSBUQUJMRS4KK0NSRUFURSBUQUJMRSBwX29ubHkgKGlkIGludCwgdmFsIHRl eHQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBfb25seV9hIFBBUlRJ VElPTiBPRiBwX29ubHkgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK0NSRUFURSBUQUJM RSBwX29ubHlfYiBQQVJUSVRJT04gT0YgcF9vbmx5IEZPUiBWQUxVRVMgRlJPTSAoMTAwKSBUTyAo MjAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncF9vbmx5Jzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydwYXJ0aXRpb24nXSk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3Ri bF9kZGxfdGVzdC5wX29ubHlfYSBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Rlc3QucF9vbmx5IEZP UiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0 LnBfb25seV9iIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfdGVzdC5wX29ubHkgRk9SIFZBTFVFUyBG Uk9NICgxMDApIFRPICgyMDApOworKDIgcm93cykKKworRFJPUCBUQUJMRSBwX29ubHk7CistLSBv bmx5X2tpbmRzIGFuZCBleGNlcHRfa2luZHMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxz ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5X2tpbmRzID0+IEFSUkFZWydm b3JlaWduX2tleSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdF9raW5k cyA9PiBBUlJBWVsnZm9yZWlnbl9rZXknXSk7CitFUlJPUjogICJvbmx5X2tpbmRzIiBhbmQgImV4 Y2VwdF9raW5kcyIgcGFyYW1ldGVycyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlCistLSBQdWIvc3Vi IHNjaGVtYSBjbG9uZToga2VlcCB0aGUgdGFibGUgYW5kIGl0cyBwcmltYXJ5IGtleSwgZHJvcCB0 aGUKKy0tIHJlc3Qgb2YgdGhlIGNvbnN0cmFpbnRzIHNvIHRoZSBzdWJzY3JpYmVyIGNhbiByZXBs aWNhdGUgd2l0aG91dAorLS0gcHVsbGluZyBjcm9zcy10YWJsZSBkZXBlbmRlbmNpZXMgYWxvbmcu CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIg PT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsndW5pcXVlJywnY2hlY2snLCdmb3JlaWdu X2tleScsJ2V4Y2x1c2lvbiddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3Rh YmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRF IFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgKGEgaW50ZWdlciwgYiBpbnRlZ2VyLCBjIGludGVn ZXIpOworKDEgcm93KQorCistLSBleGNlcHRfa2luZHM9cnVsZSBoaWRlcyB0aGUgQ1JFQVRFIFJV TEUuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3J0Jzo6cmVnY2xhc3MsIG93bmVy ID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3J1bGUnXSk7CisgICAgICAgICAgICAg ICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJ0 IChpZCBpbnRlZ2VyKTsKKygxIHJvdykKKworLS0gZXhjZXB0X2tpbmRzPXN0YXRpc3RpY3MgaGlk ZXMgdGhlIENSRUFURSBTVEFUSVNUSUNTLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdzdHgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsn c3RhdGlzdGljcyddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBw Z3RibF9kZGxfdGVzdC5zdHggKGEgaW50ZWdlciwgYiBpbnRlZ2VyLCBjIGludGVnZXIpOworKDEg cm93KQorCistLSBleGNlcHRfa2luZHM9cmxzIGhpZGVzIHRoZSBFTkFCTEUvRk9SQ0UgUk9XIExF VkVMIFNFQ1VSSVRZIHRvZ2dsZXMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Js cyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydybHMn XSk7CisgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFC TEUgcGd0YmxfZGRsX3Rlc3QucmxzIChpZCBpbnRlZ2VyKTsKKygxIHJvdykKKworLS0gZXhjZXB0 X2tpbmRzPXJlcGxpY2FfaWRlbnRpdHkgaGlkZXMgdGhlIFJFUExJQ0EgSURFTlRJVFkgY2xhdXNl LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9mdWxsJzo6cmVnY2xhc3MsIG93 bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3JlcGxpY2FfaWRlbnRpdHknXSk7 CisgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUg VEFCTEUgcGd0YmxfZGRsX3Rlc3QucmlfZnVsbCAoYSBpbnRlZ2VyKTsKKygxIHJvdykKKworLS0g UGFydGl0aW9uIGNoaWxkcmVuIGFyZSBlbWl0dGVkIGJ5IGRlZmF1bHQ7IGV4Y2VwdF9raW5kcz1w YXJ0aXRpb24KKy0tIHN1cHByZXNzZXMgdGhlbSBzbyBvbmx5IHRoZSBwYXJ0aXRpb25lZC10YWJs ZSBwYXJlbnQgY29tZXMgb3V0LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0 ZWRfcmFuZ2UnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJB WVsncGFydGl0aW9uJ10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBn X2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxf dGVzdC5wYXJ0ZWRfcmFuZ2UgKGlkIGludGVnZXIsIGsgaW50ZWdlcikgUEFSVElUSU9OIEJZIFJB TkdFIChpZCk7CisoMSByb3cpCisKKy0tIFdoaXRlc3BhY2UgYXJvdW5kIGtpbmQgbmFtZXMgaXMg YWxsb3dlZDsgY2FzZSBpcyBmb2xkZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J2lkeGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsn ICBJTkRFWCAgJywnICBSVUxFICAnXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw Z19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkeGQgKGlkIGludGVnZXIg Tk9UIE5VTEwsIG5hbWUgdGV4dCk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWR4ZCBB REQgQ09OU1RSQUlOVCBpZHhkX3BrZXkgUFJJTUFSWSBLRVkgKGlkKTsKKygyIHJvd3MpCisKKy0t IHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2Ugc3RyaXBzIHRoZSBzY2hlbWEgZnJvbSB0aGUgdGFyZ2V0 IHRhYmxlIGl0c2VsZgorLS0gYW5kIGZyb20gc2FtZS1zY2hlbWEgc2libGluZyByZWZlcmVuY2Vz IChpbmhlcml0YW5jZS9wYXJ0aXRpb24KKy0tIHBhcmVudHMsIGlkZW50aXR5IHNlcXVlbmNlcyBp biB0aGUgc2FtZSBzY2hlbWEpLCB3aGlsZSBjcm9zcy1zY2hlbWEKKy0tIHJlZmVyZW5jZXMgYXJl IGtlcHQgcXVhbGlmaWVkIGZvciBjb3JyZWN0bmVzcy4KKy0tCistLSBCYXJlIENSRUFURSBUQUJM RSBmb3IgYW4gb3JkaW5hcnkgdGFibGUuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBDUkVBVEUgVEFCTEUgYmFzaWMgKGlkIGludGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4 dCBDT0xMQVRFICJDIiBERUZBVUxUICdhbm9uJzo6dGV4dCBOT1QgTlVMTCk7CisgQUxURVIgVEFC TEUgYmFzaWMgQUREIENPTlNUUkFJTlQgYmFzaWNfcGtleSBQUklNQVJZIEtFWSAoaWQpOworKDIg cm93cykKKworLS0gSU5IRVJJVFMgcGFyZW50IGluIHRoZSBzYW1lIHNjaGVtYSBpcyBlbWl0dGVk IHVucXVhbGlmaWVkLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaCc6OnJlZ2Ns YXNzLCBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hl bWFfcXVhbGlmaWVkID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9k ZGwgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBjaCAoYyBpbnRlZ2VyKSBJTkhFUklU UyAocGFyKTsKKyBBTFRFUiBUQUJMRSBPTkxZIGNoIEFMVEVSIENPTFVNTiBhIFNFVCBERUZBVUxU IDk5OTsKKygyIHJvd3MpCisKKy0tIFBhcnRpdGlvbiBwYXJlbnQgaW4gdGhlIHNhbWUgc2NoZW1h IGlzIGVtaXR0ZWQgdW5xdWFsaWZpZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J3BhcnRlZF9yYW5nZV8xJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFU RSBUQUJMRSBwYXJ0ZWRfcmFuZ2VfMSBQQVJUSVRJT04gT0YgcGFydGVkX3JhbmdlIEZPUiBWQUxV RVMgRlJPTSAoMCkgVE8gKDEwMCk7CisgQUxURVIgVEFCTEUgT05MWSBwYXJ0ZWRfcmFuZ2VfMSBB TFRFUiBDT0xVTU4gayBTRVQgREVGQVVMVCA3OworKDIgcm93cykKKworLS0gQ3Jvc3Mtc2NoZW1h IEZLIHRhcmdldCBrZWVwcyBxdWFsaWZpY2F0aW9uLiAgVGhlICdyZWZkJyB0YWJsZSBpcyBpbgor LS0gcGd0YmxfZGRsX3Rlc3Q7IHBsYWNlIGFuIEZLIHRhcmdldCBpbiBhIGRpZmZlcmVudCBzY2hl bWEgYW5kIHZlcmlmeSBpdAorLS0gc3RheXMgcXVhbGlmaWVkIGV2ZW4gd2l0aCBzY2hlbWFfcXVh bGlmaWVkPWZhbHNlLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfb3RoZXI7CitDUkVBVEUgVEFC TEUgcGd0YmxfZGRsX290aGVyLnBhcmVudCAoaWQgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBU QUJMRSB4c2NoZW1hX2ZrICgKKyAgICBpZCAgaW50IFBSSU1BUlkgS0VZLAorICAgIHBpZCBpbnQg UkVGRVJFTkNFUyBwZ3RibF9kZGxfb3RoZXIucGFyZW50CispOworU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCd4c2NoZW1hX2ZrJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRf dGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQ1JFQVRFIFRBQkxFIHhzY2hlbWFfZmsgKGlkIGludGVnZXIgTk9UIE5VTEwsIHBp ZCBpbnRlZ2VyKTsKKyBBTFRFUiBUQUJMRSB4c2NoZW1hX2ZrIEFERCBDT05TVFJBSU5UIHhzY2hl bWFfZmtfcGtleSBQUklNQVJZIEtFWSAoaWQpOworIEFMVEVSIFRBQkxFIHhzY2hlbWFfZmsgQURE IENPTlNUUkFJTlQgeHNjaGVtYV9ma19waWRfZmtleSBGT1JFSUdOIEtFWSAocGlkKSBSRUZFUkVO Q0VTIHBndGJsX2RkbF9vdGhlci5wYXJlbnQoaWQpOworKDMgcm93cykKKworLS0gQ3Jvc3Mtc2No ZW1hIEZLIHdob3NlIHRhcmdldCBzY2hlbWEgbmFtZSBlbmRzIHdpdGggdGhlIGJhc2Ugc2NoZW1h IG5hbWUKKy0tIChlLmcuICJ4cGd0YmxfZGRsX3Rlc3QiIGVuZHMgd2l0aCAicGd0YmxfZGRsX3Rl c3QiKS4gIEEgcG9zdC1ob2MgdGV4dAorLS0gc3RyaXAgd291bGQgbWFuZ2xlICJ4cGd0YmxfZGRs X3Rlc3QucmVmdGJsIiBpbnRvICJ4cmVmdGJsIjsgZGVjaWRpbmcKKy0tIHF1YWxpZmljYXRpb24g YXQgZ2VuZXJhdGlvbiB0aW1lIGF2b2lkcyB0aGUgcHJvYmxlbSBlbnRpcmVseS4KK0NSRUFURSBT Q0hFTUEgeHBndGJsX2RkbF90ZXN0OworQ1JFQVRFIFRBQkxFIHhwZ3RibF9kZGxfdGVzdC5yZWZ0 YmwgKGlkIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgc3VmZml4X3NjaGVtYV9mayAo CisgICAgaWQgIGludCBQUklNQVJZIEtFWSwKKyAgICByZWYgaW50IFJFRkVSRU5DRVMgeHBndGJs X2RkbF90ZXN0LnJlZnRibAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3Vm Zml4X3NjaGVtYV9mayc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNlKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxl X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBzdWZmaXhfc2NoZW1hX2ZrIChpZCBp bnRlZ2VyIE5PVCBOVUxMLCByZWYgaW50ZWdlcik7CisgQUxURVIgVEFCTEUgc3VmZml4X3NjaGVt YV9mayBBREQgQ09OU1RSQUlOVCBzdWZmaXhfc2NoZW1hX2ZrX3BrZXkgUFJJTUFSWSBLRVkgKGlk KTsKKyBBTFRFUiBUQUJMRSBzdWZmaXhfc2NoZW1hX2ZrIEFERCBDT05TVFJBSU5UIHN1ZmZpeF9z Y2hlbWFfZmtfcmVmX2ZrZXkgRk9SRUlHTiBLRVkgKHJlZikgUkVGRVJFTkNFUyB4cGd0YmxfZGRs X3Rlc3QucmVmdGJsKGlkKTsKKygzIHJvd3MpCisKK0RST1AgVEFCTEUgc3VmZml4X3NjaGVtYV9m azsKK0RST1AgU0NIRU1BIHhwZ3RibF9kZGxfdGVzdCBDQVNDQURFOworTk9USUNFOiAgZHJvcCBj YXNjYWRlcyB0byB0YWJsZSB4cGd0YmxfZGRsX3Rlc3QucmVmdGJsCistLSBJZGVudGl0eSBjb2x1 bW4gd2l0aCBhIGN1c3RvbSBzZXF1ZW5jZSBuYW1lIGluIHRoZSBzYW1lIHNjaGVtYSBpcworLS0g ZW1pdHRlZCB1bnF1YWxpZmllZC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWRf Y3VzdG9tJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3Rh YmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENS RUFURSBUQUJMRSBpZF9jdXN0b20gKHYgaW50ZWdlciBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5U SVRZIChTVEFSVCBXSVRIIDEwMCBJTkNSRU1FTlQgQlkgNSBNSU5WQUxVRSA1MCBNQVhWQUxVRSAx MDAwIENBQ0hFIDEwIENZQ0xFKSBOT1QgTlVMTCk7CisoMSByb3cpCisKKy0tIFJvdW5kLXRyaXA6 IHdpdGggc2NoZW1hX3F1YWxpZmllZD1mYWxzZSwgYWZ0ZXIgU0VUIHNlYXJjaF9wYXRoIHRoZQor LS0gRERMIGNhbiBiZSByZXBsYXllZCBpbnRvIGEgZGlmZmVyZW50IHRhcmdldCBzY2hlbWEuCitD UkVBVEUgU0NIRU1BIHBndGJsX2RkbF9yZXBsYXk7CitETyAkJAorREVDTEFSRQorICAgIHN0bXQg dGV4dDsKK0JFR0lOCisgICAgU0VUIExPQ0FMIHNlYXJjaF9wYXRoID0gcGd0YmxfZGRsX3JlcGxh eTsKKyAgICBGT1Igc3RtdCBJTgorICAgICAgICBTRUxFQ1QgbGluZSBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ3BndGJsX2RkbF90ZXN0LmJhc2ljJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpIEFT IGxpbmUKKyAgICBMT09QCisgICAgICAgIEVYRUNVVEUgc3RtdDsKKyAgICBFTkQgTE9PUDsKK0VO RCAkJDsKK1NFTEVDVCByZWxuYW1lc3BhY2U6OnJlZ25hbWVzcGFjZTo6dGV4dCwgcmVsbmFtZQor RlJPTSBwZ19jbGFzcyBXSEVSRSBvaWQgPSAncGd0YmxfZGRsX3JlcGxheS5iYXNpYyc6OnJlZ2Ns YXNzOworICAgcmVsbmFtZXNwYWNlICAgfCByZWxuYW1lIAorLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLQorIHBndGJsX2RkbF9yZXBsYXkgfCBiYXNpYworKDEgcm93KQorCitEUk9QIFNDSEVN QSBwZ3RibF9kZGxfcmVwbGF5IENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRh YmxlIHBndGJsX2RkbF9yZXBsYXkuYmFzaWMKK0RST1AgVEFCTEUgeHNjaGVtYV9mazsKK0RST1Ag U0NIRU1BIHBndGJsX2RkbF9vdGhlciBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0 byB0YWJsZSBwZ3RibF9kZGxfb3RoZXIucGFyZW50CistLSBDcm9zcy1zY2hlbWEgcGFydGl0aW9u IGNoaWxkIHdpdGggc2NoZW1hX3F1YWxpZmllZD1mYWxzZTogdGhlIGNoaWxkIG11c3QKKy0tIGNh cnJ5IGl0cyBvd24gc2NoZW1hIHByZWZpeCBzbyB0aGUgb3V0cHV0IGlzIHVuYW1iaWd1b3VzIHJl Z2FyZGxlc3Mgb2YgdGhlCistLSBjYWxsZXIncyBzZWFyY2hfcGF0aC4gIEJlZm9yZSB0aGUgZml4 LCB0aGUgY2hpbGQgd2FzIGVtaXR0ZWQgYXMgdGhlIGJhcmUKKy0tIG5hbWUgInB0X2MiIChsYW5k aW5nIGluIHdoaWNoZXZlciBzY2hlbWEgaXMgZmlyc3QgaW4gc2VhcmNoX3BhdGgpIHdoaWxlCist LSB0aGUgcGFyZW50IHJlZmVyZW5jZSBpbnNpZGUgdGhlIENSRUFURSBUQUJMRSBjYW1lIG91dCBh cyB0aGUgZnVsbHktcXVhbGlmaWVkCistLSAicGd0YmxfZGRsX3BhcnRfcy5wdCIsIG1ha2luZyB0 aGUgRERMIGluY29uc2lzdGVudCBhbmQgdW5yZXBsYXlhYmxlLgorQ1JFQVRFIFNDSEVNQSBwZ3Ri bF9kZGxfcGFydF9zOworQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfcGFydF9vdGhlcjsKK0NSRUFU RSBUQUJMRSBwZ3RibF9kZGxfcGFydF9zLnB0IChpZCBpbnQsIHZhbCBpbnQpIFBBUlRJVElPTiBC WSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9wYXJ0X290aGVyLnB0X2MKKyAg ICBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3BhcnRfcy5wdAorICAgIEZPUiBWQUxVRVMgRlJPTSAo MCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF9w YXJ0X3MucHQnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25l ciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlm aWVkID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBD UkVBVEUgVEFCTEUgcHQgKGlkIGludGVnZXIsIHZhbCBpbnRlZ2VyKSBQQVJUSVRJT04gQlkgUkFO R0UgKGlkKTsKKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3BhcnRfb3RoZXIucHRfYyBQQVJUSVRJ T04gT0YgcGd0YmxfZGRsX3BhcnRfcy5wdCBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOwor KDIgcm93cykKKworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3BhcnRfcyBDQVNDQURFOworTk9USUNF OiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwZ3RibF9kZGxfcGFydF9zLnB0CitEUk9QIFNDSEVN QSBwZ3RibF9kZGxfcGFydF9vdGhlciBDQVNDQURFOworLS0gTG9jYWxseS1kZWNsYXJlZCBDSEVD SyBvbiBhIHBhcnRpdGlvbiBjaGlsZCBoYXMgbm8gaW5saW5lIGNvbHVtbgorLS0gbGlzdCB0byBs aXZlIGluIChQQVJUSVRJT04gT0YgZm9ybSksIHNvIGl0IG11c3QgY29tZSBvdXQgYXMgYQorLS0g c2VwYXJhdGUgQUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5UIHN0YXRlbWVudC4KK0NSRUFU RSBUQUJMRSBwYXJ0ZWRfY2hrIChpZCBpbnQsIHZhbCBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAo aWQpOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9jaGtfY2hpbGQgUEFSVElUSU9OIE9GIHBhcnRlZF9j aGsKKyAgICAoQ09OU1RSQUlOVCBjaGtfaW5saW5lIENIRUNLICh2YWwgPiAwKSkKKyAgICBGT1Ig VkFMVUVTIEZST00gKDApIFRPICgxMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdwYXJ0ZWRfY2hrX2NoaWxkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBD UkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX2Noa19jaGlsZCBQQVJUSVRJT04gT0Yg cGd0YmxfZGRsX3Rlc3QucGFydGVkX2NoayBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOwor IEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9jaGtfY2hpbGQgQUREIENPTlNUUkFJ TlQgY2hrX2lubGluZSBDSEVDSyAoKHZhbCA+IDApKTsKKygyIHJvd3MpCisKK0RST1AgVEFCTEUg cGFydGVkX2NoazsKKy0tIEluaGVyaXRhbmNlIGNoaWxkcmVuIG9mIGEgcGFyZW50IHdpdGggYSBn ZW5lcmF0ZWQgY29sdW1uIHNob3VsZCBub3QKKy0tIGVtaXQgYW4gQUxURVIgQ09MVU1OIC4uLiBT RVQgREVGQVVMVCBmb3IgdGhlIGluaGVyaXRlZCBnZW5lcmF0ZWQKKy0tIGNvbHVtbjogdGhlIEdF TkVSQVRFRCBleHByZXNzaW9uIGNhcnJpZXMgZG93biB0aHJvdWdoIGluaGVyaXRhbmNlLAorLS0g YW5kIFNFVCBERUZBVUxUIHdvdWxkIGZhaWwgYXQgcmVwbGF5IGFnYWluc3QgYSBnZW5lcmF0ZWQg Y29sdW1uLgorQ1JFQVRFIFRBQkxFIHBhcl9nZW4gKAorICAgIGlkIGludCwKKyAgICBnICBpbnQg R0VORVJBVEVEIEFMV0FZUyBBUyAoaWQgKiAyKSBTVE9SRUQKKyk7CitDUkVBVEUgVEFCTEUgY2hf Z2VuICgpIElOSEVSSVRTIChwYXJfZ2VuKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnY2hfZ2VuJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jaF9nZW4g KCkgSU5IRVJJVFMgKHBndGJsX2RkbF90ZXN0LnBhcl9nZW4pOworKDEgcm93KQorCitEUk9QIFRB QkxFIHBhcl9nZW4gQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgY2hf Z2VuCistLSBBIHVzZXItbmFtZWQgTk9UIE5VTEwgb24gYSBsb2NhbCBjb2x1bW4gaXMgZW1pdHRl ZCBpbmxpbmUgYXMKKy0tICJDT05TVFJBSU5UIG5hbWUgTk9UIE5VTEwiIHNvIHRoZSBvcmlnaW5h bCBuYW1lIGlzIHByZXNlcnZlZC4gIEFuCistLSBhdXRvLW5hbWVkIE5PVCBOVUxMIG9uIGEgbG9j YWwgY29sdW1uIGlzIGVtaXR0ZWQgYXMgYSBwbGFpbiBpbmxpbmUKKy0tICJOT1QgTlVMTCIgLSBQ RyByZS1jcmVhdGVzIHRoZSBhdXRvLW5hbWVkIGNvbnN0cmFpbnQgd2hlbiBDUkVBVEUKKy0tIFRB QkxFIHJ1bnMsIHNvIHRoZSBjb25zdHJhaW50IGxvb3Agc2tpcHMgYm90aCBmb3JtcyB0byBhdm9p ZCB0aGUKKy0tIHJlZHVuZGFudCAoYW5kIG9uIHRhYmxlLXJlbmFtZSBvciBzZXF1ZW5jZS1jb2xs aXNpb24sIGJyb2tlbikKKy0tIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCAuLi4gTk9U IE5VTEwgc3RhdGVtZW50LgorQ1JFQVRFIFRBQkxFIG5uX25hbWVkICgKKyAgICBhIGludCBDT05T VFJBSU5UIG15X25uIE5PVCBOVUxMLAorICAgIGIgaW50IE5PVCBOVUxMCispOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdubl9uYW1lZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxz ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxl X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90 ZXN0Lm5uX25hbWVkIChhIGludGVnZXIgQ09OU1RSQUlOVCBteV9ubiBOT1QgTlVMTCwgYiBpbnRl Z2VyIE5PVCBOVUxMKTsKKygxIHJvdykKKworRFJPUCBUQUJMRSBubl9uYW1lZDsKKy0tIFJlbmFt aW5nIHRoZSB0YWJsZSBhZnRlciBhbiBJREVOVElUWSBOT1QgTlVMTCBjb2x1bW4gd2FzIGRlY2xh cmVkCistLSBsZWF2ZXMgdGhlIGF1dG8tbmFtZWQgY29uc3RyYWludCBmcm96ZW4gYXQgdGhlIG9y aWdpbmFsIG5hbWUsIHdoaWNoCistLSBubyBsb25nZXIgbWF0Y2hlcyB0aGUgcG9zdC1yZW5hbWUg Ijx0YWJsZT5fPGNvbD5fbm90X251bGwiIHBhdHRlcm4uCistLSBUaGUgZW1pdHRlZCBEREwgbXVz dCBzdGlsbCByb3VuZC10cmlwOiB0aGUgY29uc3RyYWludCBsb29wIG11c3Qgbm90CistLSBBTFRF UiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgYSBzZWNvbmQgTk9UIE5VTEwsIHNpbmNlIENSRUFU RSBUQUJMRQorLS0gd2l0aCB0aGUgaW5saW5lIElERU5USVRZIGFscmVhZHkgY3JlYXRlcyBhbiBh dXRvLU5PVC1OVUxMIHVuZGVyIHRoZQorLS0gbmV3IHRhYmxlIG5hbWUgYW5kIFBHIG9ubHkgcGVy bWl0cyBvbmUgTk9UIE5VTEwgcGVyIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBubl9yZW5hbWVkICgK KyAgICBhIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5USVRZIE5PVCBOVUxMCispOworQUxU RVIgVEFCTEUgbm5fcmVuYW1lZCBSRU5BTUUgVE8gbm5fcmVuYW1lZDI7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ25uX3JlbmFtZWQyJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNl KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ubl9yZW5hbWVkMiAoYSBp bnRlZ2VyIEdFTkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJVFkgKFNFUVVFTkNFIE5BTUUgcGd0Ymxf ZGRsX3Rlc3Qubm5fcmVuYW1lZF9hX3NlcSkgQ09OU1RSQUlOVCBubl9yZW5hbWVkX2Ffbm90X251 bGwgTk9UIE5VTEwpOworKDEgcm93KQorCitEUk9QIFRBQkxFIG5uX3JlbmFtZWQyOworLS0gTG9j YWxseS1kZWNsYXJlZCBOT1QgTlVMTCBvbiBhbiBpbmhlcml0ZWQgY29sdW1uLiAgVGhlIGNvbHVt biBpdHNlbGYKKy0tIGlzIG9taXR0ZWQgZnJvbSB0aGUgY2hpbGQncyBjb2x1bW4gbGlzdCAoYXR0 aXNsb2NhbD1mYWxzZSksIHNvIHRoZQorLS0gdXNlci1uYW1lZCBOT1QgTlVMTCBtdXN0IGNvbWUg b3V0IHZpYSB0aGUgcG9zdC1DUkVBVEUgY29uc3RyYWludAorLS0gbG9vcCByYXRoZXIgdGhhbiBp bmxpbmUuCitDUkVBVEUgVEFCTEUgbm5fcGFyIChhIGludCk7CitDUkVBVEUgVEFCTEUgbm5fY2gg KGIgaW50KSBJTkhFUklUUyAobm5fcGFyKTsKK0FMVEVSIFRBQkxFIG5uX2NoIEFERCBDT05TVFJB SU5UIG15X25uIE5PVCBOVUxMIGE7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ25u X2NoJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0 Lm5uX2NoIChiIGludGVnZXIpIElOSEVSSVRTIChwZ3RibF9kZGxfdGVzdC5ubl9wYXIpOworIEFM VEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0Lm5uX2NoIEFERCBDT05TVFJBSU5UIG15X25uIE5PVCBO VUxMIGE7CisoMiByb3dzKQorCitEUk9QIFRBQkxFIG5uX3BhciBDQVNDQURFOworTk9USUNFOiAg ZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBubl9jaAorLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxzZSBt dXN0IGRyb3AgdGhlIHNjaGVtYSBwcmVmaXggZnJvbSBERUZBVUxUCistLSBleHByZXNzaW9ucyBh bmQgaW5saW5lIENIRUNLIGJvZGllcyB0aGF0IHJlZmVyZW5jZSBzYW1lLXNjaGVtYQorLS0gb2Jq ZWN0cyAoc2VxdWVuY2UgdmlhIG5leHR2YWwsIGZ1bmN0aW9uIHZpYSBkaXJlY3QgY2FsbCkuICBU aGlzCistLSByZWxpZXMgb24gdGhlIGRlcGFyc2VyIHJlc3BlY3RpbmcgdGhlIG5hcnJvd2VkIHNl YXJjaF9wYXRoIHJhdGhlcgorLS0gdGhhbiBvbiBzdWJzdHJpbmcgc3RyaXBwaW5nLgorQ1JFQVRF IFNDSEVNQSBwZ3RibF9kZGxfeHJlZjsKK0NSRUFURSBTRVFVRU5DRSBwZ3RibF9kZGxfeHJlZi5t eXNlcTsKK0NSRUFURSBGVU5DVElPTiBwZ3RibF9kZGxfeHJlZi5mKGludCkgUkVUVVJOUyBpbnQg TEFOR1VBR0Ugc3FsIElNTVVUQUJMRQorICAgIEFTICdTRUxFQ1QgJDEnOworQ1JFQVRFIFRBQkxF IHBndGJsX2RkbF94cmVmLnQgKAorICAgIGlkICBpbnQgREVGQVVMVCBuZXh0dmFsKCdwZ3RibF9k ZGxfeHJlZi5teXNlcScpLAorICAgIHZhbCBpbnQsCisgICAgQ09OU1RSQUlOVCBjaGsgQ0hFQ0sg KHBndGJsX2RkbF94cmVmLmYodmFsKSA+IDApCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdwZ3RibF9kZGxfeHJlZi50Jzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHQgKGlk IGludGVnZXIgREVGQVVMVCBuZXh0dmFsKCdteXNlcSc6OnJlZ2NsYXNzKSwgdmFsIGludGVnZXIs IENPTlNUUkFJTlQgY2hrIENIRUNLICgoZih2YWwpID4gMCkpKTsKKygxIHJvdykKKworRFJPUCBT Q0hFTUEgcGd0YmxfZGRsX3hyZWYgQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8g MyBvdGhlciBvYmplY3RzCitERVRBSUw6ICBkcm9wIGNhc2NhZGVzIHRvIHNlcXVlbmNlIHBndGJs X2RkbF94cmVmLm15c2VxCitkcm9wIGNhc2NhZGVzIHRvIGZ1bmN0aW9uIHBndGJsX2RkbF94cmVm LmYoaW50ZWdlcikKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGd0YmxfZGRsX3hyZWYudAorLS0g c2NoZW1hX3F1YWxpZmllZD1mYWxzZSBtdXN0IE5PVCBjb3JydXB0IHN0cmluZyBsaXRlcmFscyB3 aG9zZQorLS0gY29udGVudHMgaGFwcGVuIHRvIGNvbnRhaW4gdGhlIHNjaGVtYSBuYW1lIGZvbGxv d2VkIGJ5IGEgZG90LiAgU3RyaW5nCistLSBsaXRlcmFsIHRleHQgaXMgb3V0cHV0IHZlcmJhdGlt IGJ5IHRoZSBkZXBhcnNlciBhbmQgaXMgdW5hZmZlY3RlZCBieQorLS0gc2VhcmNoX3BhdGggbmFy cm93aW5nLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfc3RyOworQ1JFQVRFIFRBQkxFIHBndGJs X2RkbF9zdHIucCAoaWQgaW50LCBub3RlIHRleHQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOwor Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF9zdHIucGMgUEFSVElUSU9OIE9GIHBndGJsX2RkbF9zdHIu cAorICAgIChDT05TVFJBSU5UIGNoayBDSEVDSyAobm90ZSA8PiAncGd0YmxfZGRsX3N0ci5zZWNy ZXQnKSkKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfc3RyLnBjJzo6cmVnY2xhc3MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGMg UEFSVElUSU9OIE9GIHAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKKyBBTFRFUiBUQUJM RSBwYyBBREQgQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKChub3RlIDw+ICdwZ3RibF9kZGxfc3RyLnNl Y3JldCc6OnRleHQpKTsKKygyIHJvd3MpCisKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9zdHIgQ0FT Q0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgcGd0YmxfZGRsX3N0ci5wCist LSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIG11c3QgTk9UIGNvcnJ1cHQgZG91YmxlLXF1b3RlZCBp ZGVudGlmaWVycworLS0gd2hvc2UgY29udGVudHMgaGFwcGVuIHRvIGNvbnRhaW4gdGhlIHNjaGVt YSBuYW1lIGZvbGxvd2VkIGJ5IGEgZG90CistLSAoZm9yIGV4YW1wbGUgYSBjb2x1bW4gbGl0ZXJh bGx5IG5hbWVkICI8c2NoZW1hPi53ZWlyZCIgaW5zaWRlIHRoYXQKKy0tIHNjaGVtYSkuICBUaGUg bWVjaGFuaXNtIGlzIHB1cmVseSBzZWFyY2hfcGF0aCBuYXJyb3dpbmc6IHRoZSBkZXBhcnNlcgor LS0gb3V0cHV0cyBhdHRyaWJ1dGUgbmFtZXMgdmVyYmF0aW0gZnJvbSBwZ19hdHRyaWJ1dGUsIHNv IHRoZSBxdW90ZWQKKy0tIGlkZW50aWZpZXIgY29udGVudCBpcyBuZXZlciBleGFtaW5lZCBmb3Ig c2NoZW1hIHByZWZpeGVzLiAgVGhpcyBob2xkcworLS0gZXZlbiB3aGVuIHRoZSBzY2hlbWEgbmFt ZSBpcyBhIHNpbmdsZSBsZXR0ZXIuCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF9xaWQ7CitDUkVB VEUgVEFCTEUgcGd0YmxfZGRsX3FpZC5wIChpZCBpbnQsICJwZ3RibF9kZGxfcWlkLndlaXJkIiBp bnQpCisgICAgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRs X3FpZC5wYyBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3FpZC5wCisgICAgKENPTlNUUkFJTlQgY2hr IENIRUNLICgicGd0YmxfZGRsX3FpZC53ZWlyZCIgPiAwKSkKKyAgICBGT1IgVkFMVUVTIEZST00g KDApIFRPICgxMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxf cWlkLnBjJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIg PT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmll ZCA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBU QUJMRSBwYyBQQVJUSVRJT04gT0YgcCBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworIEFM VEVSIFRBQkxFIHBjIEFERCBDT05TVFJBSU5UIGNoayBDSEVDSyAoKCJwZ3RibF9kZGxfcWlkLndl aXJkIiA+IDApKTsKKygyIHJvd3MpCisKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9xaWQgQ0FTQ0FE RTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgcGd0YmxfZGRsX3FpZC5wCistLSBT YW1lIHdpdGggYSBzaG9ydCAoc2luZ2xlLWxldHRlcikgc2NoZW1hIG5hbWUgdG8gY29uZmlybSB0 aGVyZSBpcyBubworLS0gbWluaW11bS1sZW5ndGggYXNzdW1wdGlvbiBpbiB0aGUgc3RyaXBwaW5n IHBhdGguCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF9xMTsKK0NSRUFURSBUQUJMRSBwZ3RibF9k ZGxfcTEucCAoaWQgaW50LCAicGd0YmxfZGRsX3ExLndlaXJkIiBpbnQpCisgICAgUEFSVElUSU9O IEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3ExLnBjIFBBUlRJVElPTiBP RiBwZ3RibF9kZGxfcTEucAorICAgIChDT05TVFJBSU5UIGNoayBDSEVDSyAoInBndGJsX2RkbF9x MS53ZWlyZCIgPiAwKSkKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfcTEucGMnOjpyZWdjbGFzcywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNlKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwYyBQQVJUSVRJT04gT0YgcCBG T1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworIEFMVEVSIFRBQkxFIHBjIEFERCBDT05TVFJB SU5UIGNoayBDSEVDSyAoKCJwZ3RibF9kZGxfcTEud2VpcmQiID4gMCkpOworKDIgcm93cykKKwor RFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3ExIENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVz IHRvIHRhYmxlIHBndGJsX2RkbF9xMS5wCistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIHdoZW4g dGhlIGJhc2Ugc2NoZW1hIG5hbWUgaXRzZWxmIHJlcXVpcmVzCistLSBxdW90aW5nIChpdHMgcHJl Zml4IHN0YXJ0cyB3aXRoICIpLiAgQm90aCBmb3JtcyBvZiB0aGUgcHJlZml4IC0KKy0tIGJhcmUt bG93ZXJjYXNlIGFuZCBxdW90ZWQgLSBtdXN0IGJlIHN0cmlwcGVkIGZyb20gb3V0ZXIKKy0tIEFM VEVSIFRBQkxFIC8gT04gLyBDUkVBVEUgSU5ERVggcHJlZml4ZXMsIHdoaWxlIGlubmVyIHF1b3Rl ZAorLS0gaWRlbnRpZmllcnMgdGhhdCBoYXBwZW4gdG8gYmVnaW4gdGhlIHNhbWUgd2F5IG11c3Qg YmUgcHJlc2VydmVkLgorQ1JFQVRFIFNDSEVNQSAiUGdUYmwtRGRsLVEiOworQ1JFQVRFIFRBQkxF ICJQZ1RibC1EZGwtUSIuIlQiIChpZCBpbnQsIHZhbCBpbnQsCisgICAgQ09OU1RSQUlOVCBjaGsg Q0hFQ0sgKHZhbCA+IDApKTsKK0NSRUFURSBJTkRFWCAiVF92YWxfaWR4IiBPTiAiUGdUYmwtRGRs LVEiLiJUIiAodmFsKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnIlBnVGJsLURk bC1RIi4iVCInOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25l ciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlm aWVkID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFi bGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBDUkVBVEUgVEFCTEUgIlQiIChpZCBpbnRlZ2VyLCB2YWwgaW50ZWdlciwgQ09OU1RS QUlOVCBjaGsgQ0hFQ0sgKCh2YWwgPiAwKSkpOworIENSRUFURSBJTkRFWCAiVF92YWxfaWR4IiBP TiAiVCIgVVNJTkcgYnRyZWUgKHZhbCk7CisoMiByb3dzKQorCitEUk9QIFNDSEVNQSAiUGdUYmwt RGRsLVEiIENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlICJQZ1RibC1E ZGwtUSIuIlQiCistLSBFcnJvcjogbm90IGFuIG9yZGluYXJ5IG9yIHBhcnRpdGlvbmVkIHRhYmxl LgorQ1JFQVRFIFZJRVcgdiBBUyBTRUxFQ1QgMSBBUyB4OworU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCd2Jzo6cmVnY2xhc3MpOworRVJST1I6ICAidiIgaXMgbm90IGFuIG9yZGluYXJ5 IG9yIHBhcnRpdGlvbmVkIHRhYmxlCitDUkVBVEUgU0VRVUVOQ0UgczsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgncyc6OnJlZ2NsYXNzKTsKK0VSUk9SOiAgInMiIGlzIG5vdCBhbiBv cmRpbmFyeSBvciBwYXJ0aXRpb25lZCB0YWJsZQorLS0gTlVMTCBhcmd1bWVudCByZXR1cm5zIG5v IHJvd3MuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoTlVMTCk7CisgcGdfZ2V0X3Rh YmxlX2RkbCAKKy0tLS0tLS0tLS0tLS0tLS0tLQorKDAgcm93cykKKworLS0gUkVQTElDQSBJREVO VElUWSBVU0lORyBJTkRFWCB2YWxpZGF0aW9uOiBpZiB0aGUgcmVmZXJlbmNlZCBpbmRleAorLS0g d291bGQgbm90IGJlIGVtaXR0ZWQgKGJlY2F1c2UgaXRzIHNvdXJjZSBraW5kIGlzIHN1cHByZXNz ZWQpIGJ1dAorLS0gcmVwbGljYV9pZGVudGl0eSBpdHNlbGYgd291bGQgYmUsIHRoZSBmdW5jdGlv biByYWlzZXMgYW4gZXJyb3Igc28KKy0tIHRoZSBlbWl0dGVkIERETCBuZXZlciBkYW5nbGVzLiAg RXhlcmNpc2UgYWxsIHRocmVlIGNvbnN0cmFpbnQtYmFja2VkCistLSBmb3JtcyAoUEssIFVOSVFV RSwgRVhDTFVTSU9OKSBhbmQgYSBiYXJlIENSRUFURSBVTklRVUUgSU5ERVgsIGluCistLSBib3Ro IHRoZSBleGNlcHQtbGlzdCBhbmQgb25seS1saXN0IHNoYXBlcy4KKy0tCistLSBQSy1iYWNrZWQ6 IGV4Y2VwdF9raW5kcz1wcmltYXJ5X2tleSB3aXRob3V0IGV4Y2VwdF9raW5kcz1yZXBsaWNhX2lk ZW50aXR5LgorQ1JFQVRFIFRBQkxFIHJpX3BrX2V4Y2wgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0FM VEVSIFRBQkxFIHJpX3BrX2V4Y2wgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9wa19l eGNsX3BrZXk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX3BrX2V4Y2wnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsncHJpbWFyeV9r ZXknXSk7CitFUlJPUjogIFJFUExJQ0EgSURFTlRJVFkgZm9yIHRhYmxlICJyaV9wa19leGNsIiBy ZXF1aXJlcyBraW5kICJwcmltYXJ5X2tleSIgdG8gYmUgZW1pdHRlZAorREVUQUlMOiAgVGhlIHRh YmxlJ3MgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByZWZlcmVuY2VzIGFuIGluZGV4IHBy b2R1Y2VkIGJ5IHRoZSAicHJpbWFyeV9rZXkiIGtpbmQsIHdoaWNoIGlzIG5vdCBpbiB0aGUgYWN0 aXZlIGZpbHRlci4KK0hJTlQ6ICBFaXRoZXIgYWRkICJwcmltYXJ5X2tleSIgdG8gdGhlIGZpbHRl ciBvciByZW1vdmUgInJlcGxpY2FfaWRlbnRpdHkiIGZyb20gaXQuCistLSBTYW1lIGNhbGwgYnV0 IGFsc28gZXhjbHVkaW5nIHJlcGxpY2FfaWRlbnRpdHkgc3VjY2VlZHMuCitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ3JpX3BrX2V4Y2wnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2Us IGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsncHJpbWFyeV9rZXknLCdyZXBsaWNhX2lkZW50aXR5J10p OworICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX3BrX2V4Y2wg KGEgaW50ZWdlciBOT1QgTlVMTCk7CisoMSByb3cpCisKK0RST1AgVEFCTEUgcmlfcGtfZXhjbDsK Ky0tIFVOSVFVRS1jb25zdHJhaW50LWJhY2tlZCByZXBsaWNhIGlkZW50aXR5IGluZGV4LgorQ1JF QVRFIFRBQkxFIHJpX3VuaXFfZXhjbCAoYSBpbnQgTk9UIE5VTEwgVU5JUVVFLCBiIGludCk7CitB TFRFUiBUQUJMRSByaV91bmlxX2V4Y2wgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV91 bmlxX2V4Y2xfYV9rZXk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX3VuaXFf ZXhjbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWyd1 bmlxdWUnXSk7CitFUlJPUjogIFJFUExJQ0EgSURFTlRJVFkgZm9yIHRhYmxlICJyaV91bmlxX2V4 Y2wiIHJlcXVpcmVzIGtpbmQgInVuaXF1ZSIgdG8gYmUgZW1pdHRlZAorREVUQUlMOiAgVGhlIHRh YmxlJ3MgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByZWZlcmVuY2VzIGFuIGluZGV4IHBy b2R1Y2VkIGJ5IHRoZSAidW5pcXVlIiBraW5kLCB3aGljaCBpcyBub3QgaW4gdGhlIGFjdGl2ZSBm aWx0ZXIuCitISU5UOiAgRWl0aGVyIGFkZCAidW5pcXVlIiB0byB0aGUgZmlsdGVyIG9yIHJlbW92 ZSAicmVwbGljYV9pZGVudGl0eSIgZnJvbSBpdC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgncmlfdW5pcV9leGNsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2lu ZHMgPT4gQVJSQVlbJ3VuaXF1ZScsJ3JlcGxpY2FfaWRlbnRpdHknXSk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5y aV91bmlxX2V4Y2wgKGEgaW50ZWdlciBOT1QgTlVMTCwgYiBpbnRlZ2VyKTsKKygxIHJvdykKKwor RFJPUCBUQUJMRSByaV91bmlxX2V4Y2w7CistLSBCYXJlIENSRUFURSBVTklRVUUgSU5ERVggKG5v IGJhY2tpbmcgY29uc3RyYWludCkgdXNlZCBhcyBSRVBMSUNBCistLSBJREVOVElUWTogdGhlIGlu ZGV4IGlzIGVtaXR0ZWQgYnkgdGhlICJpbmRleCIga2luZCwgc28gZXhjbHVkaW5nCistLSAiaW5k ZXgiIHdpdGhvdXQgYWxzbyBleGNsdWRpbmcgInJlcGxpY2FfaWRlbnRpdHkiIG11c3QgZXJyb3Iu CitDUkVBVEUgVEFCTEUgcmlfaWR4X2V4Y2wgKGEgaW50IE5PVCBOVUxMLCBiIGludCk7CitDUkVB VEUgVU5JUVVFIElOREVYIHJpX2lkeF9leGNsX2FfdW5pcSBPTiByaV9pZHhfZXhjbCAoYSk7CitB TFRFUiBUQUJMRSByaV9pZHhfZXhjbCBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHJpX2lk eF9leGNsX2FfdW5pcTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfaWR4X2V4 Y2wnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnaW5k ZXgnXSk7CitFUlJPUjogIFJFUExJQ0EgSURFTlRJVFkgZm9yIHRhYmxlICJyaV9pZHhfZXhjbCIg cmVxdWlyZXMga2luZCAiaW5kZXgiIHRvIGJlIGVtaXR0ZWQKK0RFVEFJTDogIFRoZSB0YWJsZSdz IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmVmZXJlbmNlcyBhbiBpbmRleCBwcm9kdWNl ZCBieSB0aGUgImluZGV4IiBraW5kLCB3aGljaCBpcyBub3QgaW4gdGhlIGFjdGl2ZSBmaWx0ZXIu CitISU5UOiAgRWl0aGVyIGFkZCAiaW5kZXgiIHRvIHRoZSBmaWx0ZXIgb3IgcmVtb3ZlICJyZXBs aWNhX2lkZW50aXR5IiBmcm9tIGl0LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdy aV9pZHhfZXhjbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFS UkFZWydpbmRleCcsJ3JlcGxpY2FfaWRlbnRpdHknXSk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmlfaWR4X2V4Y2wg KGEgaW50ZWdlciBOT1QgTlVMTCwgYiBpbnRlZ2VyKTsKKygxIHJvdykKKworRFJPUCBUQUJMRSBy aV9pZHhfZXhjbDsKKy0tIEluY2x1ZGUtc2lkZSBhbmFsb2c6IG9ubHlfa2luZHM9cmVwbGljYV9p ZGVudGl0eSBtdXN0IGluY2x1ZGUgdGhlIGtpbmQKKy0tIHRoYXQgZW1pdHMgdGhlIGluZGV4LCBv ciB0aGUgZnVuY3Rpb24gZXJyb3JzLgorQ1JFQVRFIFRBQkxFIHJpX29ubHkgKGEgaW50IE5PVCBO VUxMIFVOSVFVRSwgYiBpbnQpOworQUxURVIgVEFCTEUgcmlfb25seSBSRVBMSUNBIElERU5USVRZ IFVTSU5HIElOREVYIHJpX29ubHlfYV9rZXk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ3JpX29ubHknOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJS QVlbJ3JlcGxpY2FfaWRlbnRpdHknXSk7CitFUlJPUjogIFJFUExJQ0EgSURFTlRJVFkgZm9yIHRh YmxlICJyaV9vbmx5IiByZXF1aXJlcyBraW5kICJ1bmlxdWUiIHRvIGJlIGVtaXR0ZWQKK0RFVEFJ TDogIFRoZSB0YWJsZSdzIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmVmZXJlbmNlcyBh biBpbmRleCBwcm9kdWNlZCBieSB0aGUgInVuaXF1ZSIga2luZCwgd2hpY2ggaXMgbm90IGluIHRo ZSBhY3RpdmUgZmlsdGVyLgorSElOVDogIEVpdGhlciBhZGQgInVuaXF1ZSIgdG8gdGhlIGZpbHRl ciBvciByZW1vdmUgInJlcGxpY2FfaWRlbnRpdHkiIGZyb20gaXQuCistLSBJbmNsdWRpbmcgYm90 aCBraW5kcyBzdWNjZWVkcy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfb25s eSc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsndW5pcXVl JywncmVwbGljYV9pZGVudGl0eSddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX29ubHkgQURE IENPTlNUUkFJTlQgcmlfb25seV9hX2tleSBVTklRVUUgKGEpOworIEFMVEVSIFRBQkxFIHBndGJs X2RkbF90ZXN0LnJpX29ubHkgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9vbmx5X2Ff a2V5OworKDIgcm93cykKKworRFJPUCBUQUJMRSByaV9vbmx5OworLS0gUGVyLWtpbmQgb25seV9r aW5kcyAvIGV4Y2VwdF9raW5kcyBjb3ZlcmFnZS4gIEZvciBlYWNoIGtpbmQgaW4gdGhlIHZvY2Fi dWxhcnksCistLSB2ZXJpZnkgdGhhdCBvbmx5X2tpbmRzPUsgZW1pdHMganVzdCB0aGF0IGtpbmQn cyBvdXRwdXQgYW5kIHRoYXQgZXhjZXB0X2tpbmRzPUsKKy0tIG9taXRzIGp1c3QgdGhhdCBraW5k J3Mgb3V0cHV0LiAgS2luZHMgd2l0aCBubyBmaXh0dXJlIGFib3ZlICh0cmlnZ2VyLAorLS0gcG9s aWN5KSBhcmUgc3RpbGwgcmVjb2duaXplZCBidXQgY3VycmVudGx5IGVtaXQgbm90aGluZzsgb25s eV9raW5kcz1LCistLSByZXR1cm5zIHplcm8gcm93cyBmb3IgdGhlbS4gIEZpeHR1cmVzIHVzZWQ6 CistLSAgIGlkeGQ6IFBLICsgdHdvIHNlY29uZGFyeSBDUkVBVEUgSU5ERVgKKy0tICAgY29uczog UEsgKyBVTklRVUUgKyBDSEVDSyArIEZLIChjb25zdHJhaW50LWJhY2tlZCkKKy0tICAgcnQ6ICAg Q1JFQVRFIFJVTEUKKy0tICAgc3R4OiAgQ1JFQVRFIFNUQVRJU1RJQ1MKKy0tICAgcmxzOiAgRU5B QkxFL0ZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWQorLS0gICByaV9mdWxsOiBSRVBMSUNBIElERU5U SVRZIEZVTEwgKG5vIHNvdXJjZS1raW5kIGRlcGVuZGVuY3kpCitDUkVBVEUgVEFCTEUgZXhjbF9m aXggKHJuZyBpbnQ0cmFuZ2UsCisgICAgRVhDTFVERSBVU0lORyBnaXN0IChybmcgV0lUSCAmJikp OworLS0gb25seV9raW5kcz1LOiBlbWl0IG9ubHkga2luZCBLJ3Mgc3RhdGVtZW50cy4KK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxz ZSwgb25seV9raW5kcyA9PiBBUlJBWVsnaW5kZXgnXSk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIElOREVYIGlkeGRf bG93ZXIgT04gcGd0YmxfZGRsX3Rlc3QuaWR4ZCBVU0lORyBidHJlZSAobG93ZXIobmFtZSkpOwor IENSRUFURSBJTkRFWCBpZHhkX3BhcnRpYWwgT04gcGd0YmxfZGRsX3Rlc3QuaWR4ZCBVU0lORyBi dHJlZSAoaWQpIFdIRVJFIChpZCA+IDEwMCk7CisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2lu ZHMgPT4gQVJSQVlbJ3ByaW1hcnlfa2V5J10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkeGQgQUREIENPTlNU UkFJTlQgaWR4ZF9wa2V5IFBSSU1BUlkgS0VZIChpZCk7CisoMSByb3cpCisKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25s eV9raW5kcyA9PiBBUlJBWVsndW5pcXVlJ10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAg cGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyBBREQgQ09OU1RSQUlOVCBjb25z X2Jfa2V5IFVOSVFVRSAoYik7CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgnZXhjbF9maXgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4g QVJSQVlbJ2V4Y2x1c2lvbiddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmV4Y2xfZml4IEFERCBDT05TVFJBSU5U IGV4Y2xfZml4X3JuZ19leGNsIEVYQ0xVREUgVVNJTkcgZ2lzdCAocm5nIFdJVEggJiYpOworKDEg cm93KQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3J0Jzo6cmVnY2xhc3MsIG93 bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydydWxlJ10pOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBSVUxFIHJ0X2xvZ19p bnNlcnQgQVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KworICAgICBPTiBJTlNFUlQgVE8gcGd0YmxfZGRsX3Rlc3QucnQgRE8gIElOU0VSVCBJTlRPIHBn dGJsX2RkbF90ZXN0LnJ0X2xvZyAoaWQpKworICAgVkFMVUVTIChuZXcuaWQpOworKDEgcm93KQor CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0eCc6OnJlZ2NsYXNzLCBvd25lciA9 PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsnc3RhdGlzdGljcyddKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JF QVRFIFNUQVRJU1RJQ1MgcGd0YmxfZGRsX3Rlc3Quc3R4X25kdiAobmRpc3RpbmN0KSBPTiBhLCBi IEZST00gcGd0YmxfZGRsX3Rlc3Quc3R4OworKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ3Jscyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9 PiBBUlJBWVsncmxzJ10pOworICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qucmxz IEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qu cmxzIEZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWTsKKygyIHJvd3MpCisKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgncmlfZnVsbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25s eV9raW5kcyA9PiBBUlJBWVsncmVwbGljYV9pZGVudGl0eSddKTsKKyAgICAgICAgICAgICAgICAg ICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFMVEVSIFRB QkxFIHBndGJsX2RkbF90ZXN0LnJpX2Z1bGwgUkVQTElDQSBJREVOVElUWSBGVUxMOworKDEgcm93 KQorCistLSB0cmlnZ2VyIC8gcG9saWN5IGFyZSBub3QgeWV0IGltcGxlbWVudGVkOyB1bmNvbW1l bnQgd2hlbgorLS0gcGdfZ2V0X3RyaWdnZXJfZGRsIC8gcGdfZ2V0X3BvbGljeV9kZGwgaGVscGVy cyBsYW5kLgorLS0gU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2Ns YXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsndHJpZ2dlciddKTsKKy0t IFNFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIg PT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3BvbGljeSddKTsKKy0tIGV4Y2VwdF9raW5k cz1LOiBlbWl0IGV2ZXJ5dGhpbmcgZXhjZXB0IGtpbmQgSydzIHN0YXRlbWVudHMuICBQSy9VTklR VUUvCistLSBJTkRFWCBhcmUgZXhlcmNpc2VkIG9uIHRhYmxlcyB3aXRob3V0IFJFUExJQ0EgSURF TlRJVFkgVVNJTkcgSU5ERVgKKy0tIHNvIHRoZSB2YWxpZGF0aW9uIGRvZXMgbm90IHRyaXAuCitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgb3duZXIgPT4g ZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsncHJpbWFyeV9rZXknXSk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRF IFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkeGQgKGlkIGludGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4 dCk7CisgQ1JFQVRFIElOREVYIGlkeGRfbG93ZXIgT04gcGd0YmxfZGRsX3Rlc3QuaWR4ZCBVU0lO RyBidHJlZSAobG93ZXIobmFtZSkpOworIENSRUFURSBJTkRFWCBpZHhkX3BhcnRpYWwgT04gcGd0 YmxfZGRsX3Rlc3QuaWR4ZCBVU0lORyBidHJlZSAoaWQpIFdIRVJFIChpZCA+IDEwMCk7CisoMyBy b3dzKQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsndW5pcXVlJ10pOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENS RUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIChhIGludGVnZXIsIGIgaW50ZWdlciwgYyBp bnRlZ2VyLCBDT05TVFJBSU5UIGNvbnNfYV9jaGVjayBDSEVDSyAoKGEgPiAwKSkpOworIEFMVEVS IFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgQUREIENPTlNUUkFJTlQgY29uc19jX2ZrZXkgRk9S RUlHTiBLRVkgKGMpIFJFRkVSRU5DRVMgcGd0YmxfZGRsX3Rlc3QucmVmZChpZCkgREVGRVJSQUJM RSBJTklUSUFMTFkgREVGRVJSRUQ7CisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9 PiBBUlJBWVsnY2hlY2snXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMg KGEgaW50ZWdlciwgYiBpbnRlZ2VyLCBjIGludGVnZXIpOworIEFMVEVSIFRBQkxFIHBndGJsX2Rk bF90ZXN0LmNvbnMgQUREIENPTlNUUkFJTlQgY29uc19iX2tleSBVTklRVUUgKGIpOworIEFMVEVS IFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgQUREIENPTlNUUkFJTlQgY29uc19jX2ZrZXkgRk9S RUlHTiBLRVkgKGMpIFJFRkVSRU5DRVMgcGd0YmxfZGRsX3Rlc3QucmVmZChpZCkgREVGRVJSQUJM RSBJTklUSUFMTFkgREVGRVJSRUQ7CisoMyByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2V4Y2xfZml4Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2lu ZHMgPT4gQVJSQVlbJ2V4Y2x1c2lvbiddKTsKKyAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFi bGVfZGRsICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qu ZXhjbF9maXggKHJuZyBpbnQ0cmFuZ2UpOworKDEgcm93KQorCistLSB0cmlnZ2VyIC8gcG9saWN5 IGFyZSBub3QgeWV0IGltcGxlbWVudGVkOyB1bmNvbW1lbnQgd2hlbgorLS0gcGdfZ2V0X3RyaWdn ZXJfZGRsIC8gcGdfZ2V0X3BvbGljeV9kZGwgaGVscGVycyBsYW5kLgorLS0gU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhj ZXB0X2tpbmRzID0+IEFSUkFZWyd0cmlnZ2VyJ10pOworLS0gU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRz ID0+IEFSUkFZWydwb2xpY3knXSk7CistLSBleGNlcHRfa2luZHM9dGFibGUgc3VwcHJlc3NlcyB0 aGUgQ1JFQVRFIFRBQkxFICsgT1dORVIgKyBjaGlsZC1kZWZhdWx0CistLSBTRVQgREVGQVVMVCAr IGF0dG9wdGlvbnMgcGFzc2VzLCBsZWF2aW5nIG9ubHkgdGhlIHN1Yi1vYmplY3QgcGFzc2VzLgor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsIG93bmVyID0+ IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3RhYmxlJ10pOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBJTkRF WCBpZHhkX2xvd2VyIE9OIHBndGJsX2RkbF90ZXN0LmlkeGQgVVNJTkcgYnRyZWUgKGxvd2VyKG5h bWUpKTsKKyBDUkVBVEUgSU5ERVggaWR4ZF9wYXJ0aWFsIE9OIHBndGJsX2RkbF90ZXN0LmlkeGQg VVNJTkcgYnRyZWUgKGlkKSBXSEVSRSAoaWQgPiAxMDApOworIEFMVEVSIFRBQkxFIHBndGJsX2Rk bF90ZXN0LmlkeGQgQUREIENPTlNUUkFJTlQgaWR4ZF9wa2V5IFBSSU1BUlkgS0VZIChpZCk7Ciso MyByb3dzKQorCistLSBNdWx0aS1raW5kIGNvbXBvc2l0aW9ucy4KK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5k cyA9PiBBUlJBWVsndGFibGUnLCdpbmRleCddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRs X3Rlc3QuaWR4ZCAoaWQgaW50ZWdlciBOT1QgTlVMTCwgbmFtZSB0ZXh0KTsKKyBDUkVBVEUgSU5E RVggaWR4ZF9sb3dlciBPTiBwZ3RibF9kZGxfdGVzdC5pZHhkIFVTSU5HIGJ0cmVlIChsb3dlcihu YW1lKSk7CisgQ1JFQVRFIElOREVYIGlkeGRfcGFydGlhbCBPTiBwZ3RibF9kZGxfdGVzdC5pZHhk IFVTSU5HIGJ0cmVlIChpZCkgV0hFUkUgKGlkID4gMTAwKTsKKygzIHJvd3MpCisKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwg b25seV9raW5kcyA9PiBBUlJBWVsncHJpbWFyeV9rZXknLCdmb3JlaWduX2tleSddKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBB TFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIEFERCBDT05TVFJBSU5UIGNvbnNfY19ma2V5 IEZPUkVJR04gS0VZIChjKSBSRUZFUkVOQ0VTIHBndGJsX2RkbF90ZXN0LnJlZmQoaWQpIERFRkVS UkFCTEUgSU5JVElBTExZIERFRkVSUkVEOworKDEgcm93KQorCistLSBEdXBsaWNhdGUgZW50cmll cyBpbiB0aGUgbGlzdCBhcmUgc2lsZW50bHkgZGUtZHVwbGljYXRlZCBieSB0aGUKKy0tIEJpdG1h cHNldC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCBv d25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsnaW5kZXgnLCdpbmRleCddKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBDUkVBVEUgSU5ERVggaWR4ZF9sb3dlciBPTiBwZ3RibF9kZGxfdGVzdC5pZHhkIFVTSU5HIGJ0 cmVlIChsb3dlcihuYW1lKSk7CisgQ1JFQVRFIElOREVYIGlkeGRfcGFydGlhbCBPTiBwZ3RibF9k ZGxfdGVzdC5pZHhkIFVTSU5HIGJ0cmVlIChpZCkgV0hFUkUgKGlkID4gMTAwKTsKKygyIHJvd3Mp CisKK0RST1AgVEFCTEUgZXhjbF9maXg7CistLSBLaW5kLWZpbHRlciB0ZXN0cyBvbiBwYXJ0aXRp b25lZCB0YWJsZXMgd2l0aCBpbmRleGVzLgorLS0KKy0tIG9ubHlfa2luZHM9aW5kZXggb24gYSBw YXJ0aXRpb25lZCB0YWJsZTogb25seSB0aGUgcm9vdCBDUkVBVEUgSU5ERVggaXMKKy0tIGVtaXR0 ZWQ7IG5vIENSRUFURSBUQUJMRSwgbm8gcGFydGl0aW9uIGNoaWxkcmVuIChLSU5EX1BBUlRJVElP TiBhYnNlbnQpLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfbWl4ZWQn OjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgb25seV9raW5kcyA9PiBBUlJBWVsnaW5kZXgnXSk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIElOREVYIHBhcnRlZF9taXhlZF9pZCBP TiBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfbWl4ZWQgVVNJTkcgYnRyZWUgKGlkKTsKKygxIHJvdykK KworLS0gZXhjZXB0X2tpbmRzPWluZGV4IG9uIGEgcGFydGl0aW9uZWQgdGFibGU6IENSRUFURSBU QUJMRSBmb3IgdGhlIHBhcmVudAorLS0gYW5kIGFsbCBjaGlsZHJlbiBhcmUgZW1pdHRlZDsgbm8g aW5kZXggc3RhdGVtZW50cy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVk X21peGVkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnaW5kZXgnXSk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90 ZXN0LnBhcnRlZF9taXhlZCAoaWQgaW50ZWdlciwgcmVnaW9uIHRleHQpIFBBUlRJVElPTiBCWSBM SVNUIChyZWdpb24pOworIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfbWl4ZWRf YSBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Rlc3QucGFydGVkX21peGVkIEZPUiBWQUxVRVMgSU4g KCdhJyk7CisoMiByb3dzKQorCistLSBvbmx5X2tpbmRzPXByaW1hcnlfa2V5IG9uIGEgcGFydGl0 aW9uZWQgdGFibGU6IG9ubHkgdGhlIEFMVEVSIFRBQkxFIEFERAorLS0gQ09OU1RSQUlOVCBQSyBv biB0aGUgcGFyZW50OyB0aGUgY2hpbGQncyBpbmhlcml0ZWQgUEsgKGNvbmlzbG9jYWw9ZmFsc2Up CistLSBpcyBza2lwcGVkOyBubyBDUkVBVEUgVEFCTEUsIG5vIHBhcnRpdGlvbiBjaGlsZHJlbi4K K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3BrJzo6cmVnY2xhc3MsIG93 bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlfa2luZHMg PT4gQVJSQVlbJ3ByaW1hcnlfa2V5J10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFMVEVSIFRB QkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9wayBBREQgQ09OU1RSQUlOVCBwYXJ0ZWRfcGtfcGtl eSBQUklNQVJZIEtFWSAoaWQsIHJlZ2lvbik7CisoMSByb3cpCisKKy0tIG9ubHlfa2luZHM9SyBv biBhIHRhYmxlIHRoYXQgZG9lcyBub3QgaGF2ZSBhbnkgSyBvZiB0aGF0IGtpbmQgaXMgYSB2YWxp ZAorLS0gZmlsdGVyIGFuZCByZXR1cm5zIHplcm8gcm93cy4gIFRlc3RlZCBwcmV2aW91c2x5IHdp dGggZm9yZWlnbl9rZXkKKy0tIG9uICdyZWZkJzsgaGVyZSBhbHNvIHJ1bGUsIHN0YXRpc3RpY3Ms IHJscywgcmVwbGljYV9pZGVudGl0eSwgYW5kCistLSBleGNsdXNpb24gb24gJ2Jhc2ljJyAod2hp Y2ggaGFzIG9ubHkgUEsgKyBjb2x1bW5zKS4KK1NFTEVDVCBjb3VudCgqKSBBUyBydWxlX3Jvd3MK KyAgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxz ZSwgb25seV9raW5kcyA9PiBBUlJBWVsncnVsZSddKTsKKyBydWxlX3Jvd3MgCistLS0tLS0tLS0t LQorICAgICAgICAgMAorKDEgcm93KQorCitTRUxFQ1QgY291bnQoKikgQVMgc3RhdHNfcm93cwor ICBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNl LCBvbmx5X2tpbmRzID0+IEFSUkFZWydzdGF0aXN0aWNzJ10pOworIHN0YXRzX3Jvd3MgCistLS0t LS0tLS0tLS0KKyAgICAgICAgICAwCisoMSByb3cpCisKK1NFTEVDVCBjb3VudCgqKSBBUyBybHNf cm93cworICBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+ IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydybHMnXSk7CisgcmxzX3Jvd3MgCistLS0tLS0t LS0tCisgICAgICAgIDAKKygxIHJvdykKKworU0VMRUNUIGNvdW50KCopIEFTIHJpX3Jvd3MKKyAg RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwg b25seV9raW5kcyA9PiBBUlJBWVsncmVwbGljYV9pZGVudGl0eSddKTsKKyByaV9yb3dzIAorLS0t LS0tLS0tCisgICAgICAgMAorKDEgcm93KQorCitTRUxFQ1QgY291bnQoKikgQVMgZXhjbF9yb3dz CisgIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFs c2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ2V4Y2x1c2lvbiddKTsKKyBleGNsX3Jvd3MgCistLS0t LS0tLS0tLQorICAgICAgICAgMAorKDEgcm93KQorCistLSBJbnB1dC12YWxpZGF0aW9uIGVkZ2Ug Y2FzZXMgZm9yIHRoZSBraW5kIGFycmF5LiAgQWxsCistLSBvZiB0aGVzZSByYWlzZSBhbiBlcnJv cjsgdGhlIGZ1bmN0aW9uIG5ldmVyIHJlYWNoZXMgcmVsYXRpb24gb3Blbi4KKy0tIEVtcHR5IGFy cmF5OgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBv bmx5X2tpbmRzID0+IEFSUkFZW106OnRleHRbXSk7CitFUlJPUjogIHBhcmFtZXRlciAib25seV9r aW5kcyIgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBraW5kCistLSBOVUxMIGVsZW1lbnQ6CitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG9ubHlfa2lu ZHMgPT4gQVJSQVlbTlVMTDo6dGV4dF0pOworRVJST1I6ICBwYXJhbWV0ZXIgIm9ubHlfa2luZHMi IG11c3Qgbm90IGNvbnRhaW4gTlVMTCBlbGVtZW50cworLS0gVW5yZWNvZ25pemVkIGtpbmQ6CitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG9ubHlfa2lu ZHMgPT4gQVJSQVlbJ25vX3N1Y2hfa2luZCddKTsKK0VSUk9SOiAgdW5yZWNvZ25pemVkIGtpbmQg Im5vX3N1Y2hfa2luZCIgaW4gcGFyYW1ldGVyICJvbmx5X2tpbmRzIgorLS0gU2FtZSBraW5kIHNw ZWNpZmllZCB0aHJvdWdoIGJvdGggcGFyYW1ldGVycyBpcyBzdGlsbCBtdXRleC1yZWplY3RlZC4K K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5X2tpbmRzID0+IEFSUkFZWydpbmRleCddLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsncnVs ZSddKTsKK0VSUk9SOiAgIm9ubHlfa2luZHMiIGFuZCAiZXhjZXB0X2tpbmRzIiBwYXJhbWV0ZXJz IGFyZSBtdXR1YWxseSBleGNsdXNpdmUKKy0tIFJvdW5kLXRyaXAgdmVyaWZpY2F0aW9uLiAgRm9y IGV2ZXJ5IHRlc3QgdGFibGUsIGNhcHR1cmUgdGhlIERETCB0aGUKKy0tIGZ1bmN0aW9uIGVtaXRz LCBkcm9wIHRoZSBzY2hlbWEsIHJlcGxheSBlYWNoIHRhYmxlJ3MgRERMIGluCistLSBkZXBlbmRl bmN5IG9yZGVyLCBhbmQgY29uZmlybSB0aGF0IHBnX2dldF90YWJsZV9kZGwgb24gdGhlIHJlY3Jl YXRlZAorLS0gcmVsYXRpb24gbWF0Y2hlcyB0aGUgb3JpZ2luYWwgbGluZS1mb3ItbGluZS4gIFRo ZSBmaW5hbCBTRUxFQ1QgbXVzdAorLS0gcmV0dXJuIHplcm8gcm93cy4KK0NSRUFURSBURU1QIFRB QkxFIHBndGJsX2RkbF9ydF9vcmlnIChuYW1lIHRleHQsIG9yZCBpbnQsIGxpbmUgdGV4dCk7CitJ TlNFUlQgSU5UTyBwZ3RibF9kZGxfcnRfb3JpZworU0VMRUNUIHQubmFtZSwgby5vcmQsIG8ubGlu ZQorRlJPTSAoVkFMVUVTCisgICAgICAgICgnYmFzaWMnKSwgKCdpZF9jb2xzJyksICgnaWRfY3Vz dG9tJyksICgnZ2VuX2NvbHMnKSwgKCdnZW5fdmlydHVhbCcpLCAoJ3N0b3JhZ2VfY29scycpLAor ICAgICAgICAoJ3JlZmQnKSwgKCdjb25zJyksICgnbnVsbHNfbmQnKSwgKCdpZHhfaW5jJyksCisg ICAgICAgICgnZmtfYWN0c190Z3QnKSwgKCdma19hY3RzJyksICgnbm90ZW5mX3RndCcpLCAoJ25v dGVuZicpLCAoJ3NlbGZfcmVmJyksICgndGVtcG9yYWxfcGsnKSwKKyAgICAgICAgKCdpZHhkJyks CisgICAgICAgICgncGFyJyksICgnY2gnKSwgKCdhdHRvcHQnKSwKKyAgICAgICAgKCdwYXJ0ZWRf cmFuZ2UnKSwgKCdwYXJ0ZWRfcmFuZ2VfMScpLCAoJ3BhcnRlZF9yYW5nZV9kZWYnKSwKKyAgICAg ICAgKCdwYXJ0ZWRfaGFzaCcpLCAoJ3BhcnRlZF9oYXNoXzAnKSwKKyAgICAgICAgKCdwYXJ0ZWRf bGlzdCcpLAorICAgICAgICAoJ3BhcnRlZF9pZHgnKSwgKCdwYXJ0ZWRfaWR4X2EnKSwKKyAgICAg ICAgKCdwYXJ0ZWRfcGxhaW4nKSwgKCdwYXJ0ZWRfcGxhaW5fYScpLAorICAgICAgICAoJ3BhcnRl ZF9waycpLCAoJ3BhcnRlZF9wa19hJyksCisgICAgICAgICgncGFydGVkX3N1YicpLCAoJ3BhcnRl ZF9zdWJfYScpLCAoJ3BhcnRlZF9zdWJfYTEnKSwKKyAgICAgICAgKCdwYXJ0ZWRfY2hpbGRfaWR4 JyksICgncGFydGVkX2NoaWxkX2lkeF9hJyksCisgICAgICAgICgncGFydGVkX21peGVkJyksICgn cGFydGVkX21peGVkX2EnKSwKKyAgICAgICAgKCdwYXJ0ZWRfZmtfdGd0JyksICgncGFydGVkX2Zr JyksICgncGFydGVkX2ZrX2EnKSwKKyAgICAgICAgKCdydF9sb2cnKSwgKCdydCcpLAorICAgICAg ICAoJ3N0eCcpLCAoJ3JscycpLCAoJ3JpX2Z1bGwnKSwgKCdyaV9pZHgnKSwgKCd1bm8nKQorICAg ICApIEFTIHQobmFtZSksCisgICAgIExBVEVSQUwgcGdfZ2V0X3RhYmxlX2RkbCgoJ3BndGJsX2Rk bF90ZXN0LicgfHwgdC5uYW1lKTo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBvd25lciA9PiBmYWxzZSkgV0lUSCBPUkRJTkFMSVRZIG8obGluZSwgb3JkKTsKK0RPICQk CitERUNMQVJFCisgICAgdGFibGVzIENPTlNUQU5UIHRleHRbXSA6PSBBUlJBWVsKKyAgICAgICAg J2Jhc2ljJywgJ2lkX2NvbHMnLCAnaWRfY3VzdG9tJywgJ2dlbl9jb2xzJywgJ2dlbl92aXJ0dWFs JywgJ3N0b3JhZ2VfY29scycsCisgICAgICAgICdyZWZkJywgJ2NvbnMnLCAnbnVsbHNfbmQnLCAn aWR4X2luYycsCisgICAgICAgICdma19hY3RzX3RndCcsICdma19hY3RzJywgJ25vdGVuZl90Z3Qn LCAnbm90ZW5mJywgJ3NlbGZfcmVmJywgJ3RlbXBvcmFsX3BrJywKKyAgICAgICAgJ2lkeGQnLAor ICAgICAgICAncGFyJywgJ2NoJywgJ2F0dG9wdCcsCisgICAgICAgICdwYXJ0ZWRfcmFuZ2UnLCAn cGFydGVkX3JhbmdlXzEnLCAncGFydGVkX3JhbmdlX2RlZicsCisgICAgICAgICdwYXJ0ZWRfaGFz aCcsICdwYXJ0ZWRfaGFzaF8wJywKKyAgICAgICAgJ3BhcnRlZF9saXN0JywKKyAgICAgICAgJ3Bh cnRlZF9pZHgnLCAncGFydGVkX2lkeF9hJywKKyAgICAgICAgJ3BhcnRlZF9wbGFpbicsICdwYXJ0 ZWRfcGxhaW5fYScsCisgICAgICAgICdwYXJ0ZWRfcGsnLCAncGFydGVkX3BrX2EnLAorICAgICAg ICAncGFydGVkX3N1YicsICdwYXJ0ZWRfc3ViX2EnLCAncGFydGVkX3N1Yl9hMScsCisgICAgICAg ICdwYXJ0ZWRfY2hpbGRfaWR4JywgJ3BhcnRlZF9jaGlsZF9pZHhfYScsCisgICAgICAgICdwYXJ0 ZWRfbWl4ZWQnLCAncGFydGVkX21peGVkX2EnLAorICAgICAgICAncGFydGVkX2ZrX3RndCcsICdw YXJ0ZWRfZmsnLCAncGFydGVkX2ZrX2EnLAorICAgICAgICAncnRfbG9nJywgJ3J0JywKKyAgICAg ICAgJ3N0eCcsICdybHMnLCAncmlfZnVsbCcsICdyaV9pZHgnLCAndW5vJworICAgIF07CisgICAg dCB0ZXh0OworICAgIHN0bXQgdGV4dDsKK0JFR0lOCisgICAgRFJPUCBTQ0hFTUEgcGd0YmxfZGRs X3Rlc3QgQ0FTQ0FERTsKKyAgICBDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF90ZXN0OworICAgIEZP UkVBQ0ggdCBJTiBBUlJBWSB0YWJsZXMgTE9PUAorICAgICAgICBGT1Igc3RtdCBJTgorICAgICAg ICAgICAgU0VMRUNUIGxpbmUgRlJPTSBwZ3RibF9kZGxfcnRfb3JpZyBXSEVSRSBuYW1lID0gdCBP UkRFUiBCWSBvcmQKKyAgICAgICAgTE9PUAorICAgICAgICAgICAgQkVHSU4KKyAgICAgICAgICAg ICAgICBFWEVDVVRFIHN0bXQ7CisgICAgICAgICAgICBFWENFUFRJT04gV0hFTiBkdXBsaWNhdGVf dGFibGUgVEhFTgorICAgICAgICAgICAgICAgIE5VTEw7ICAtLSBwYXJ0aXRpb24gY2hpbGQgYWxy ZWFkeSBjcmVhdGVkIGJ5IGl0cyBwYXJlbnQncyBEREwKKyAgICAgICAgICAgIEVORDsKKyAgICAg ICAgRU5EIExPT1A7CisgICAgRU5EIExPT1A7CitFTkQgJCQ7CitOT1RJQ0U6ICBkcm9wIGNhc2Nh ZGVzIHRvIDQzIG90aGVyIG9iamVjdHMKK0RFVEFJTDogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUg YmFzaWMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgaWRfY29scworZHJvcCBjYXNjYWRlcyB0byB0 YWJsZSBpZF9jdXN0b20KK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgZ2VuX2NvbHMKK2Ryb3AgY2Fz Y2FkZXMgdG8gdGFibGUgZ2VuX3ZpcnR1YWwKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgc3RvcmFn ZV9jb2xzCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHJlZmQKK2Ryb3AgY2FzY2FkZXMgdG8gdGFi bGUgY29ucworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBudWxsc19uZAorZHJvcCBjYXNjYWRlcyB0 byB0YWJsZSBpZHhfaW5jCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGZrX2FjdHNfdGd0Citkcm9w IGNhc2NhZGVzIHRvIHRhYmxlIGZrX2FjdHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgbm90ZW5m X3RndAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBub3RlbmYKK2Ryb3AgY2FzY2FkZXMgdG8gdGFi bGUgc2VsZl9yZWYKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgdGVtcG9yYWxfcGsKK2Ryb3AgY2Fz Y2FkZXMgdG8gdGFibGUgaWR4ZAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXIKK2Ryb3AgY2Fz Y2FkZXMgdG8gdGFibGUgY2gKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgYXR0b3B0Citkcm9wIGNh c2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9yYW5nZQorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0 ZWRfaGFzaAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfbGlzdAorZHJvcCBjYXNjYWRl cyB0byB0YWJsZSBwYXJ0ZWRfaWR4Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9wbGFp bgorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfcGsKK2Ryb3AgY2FzY2FkZXMgdG8gdGFi bGUgcGFydGVkX3N1YgorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfY2hpbGRfaWR4Citk cm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9taXhlZAorZHJvcCBjYXNjYWRlcyB0byB0YWJs ZSBwYXJ0ZWRfZmtfdGd0Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9maworZHJvcCBj YXNjYWRlcyB0byB0YWJsZSBydAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBydF9sb2cKK2Ryb3Ag Y2FzY2FkZXMgdG8gdGFibGUgc3R4Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHJscworZHJvcCBj YXNjYWRlcyB0byB0YWJsZSByaV9mdWxsCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHJpX2lkeAor ZHJvcCBjYXNjYWRlcyB0byB0YWJsZSB1bm8KK2Ryb3AgY2FzY2FkZXMgdG8gdHlwZSB0eXBlZF90 Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHR5cGVkX3BsYWluCitkcm9wIGNhc2NhZGVzIHRvIHRh YmxlIHR5cGVkX292ZXIKK2Ryb3AgY2FzY2FkZXMgdG8gdmlldyB2Citkcm9wIGNhc2NhZGVzIHRv IHNlcXVlbmNlIHMKK1dJVEggYWZ0ZXJfZGRsIEFTICgKKyAgICBTRUxFQ1QgdC5uYW1lLCBvLm9y ZCwgby5saW5lCisgICAgRlJPTSAoU0VMRUNUIERJU1RJTkNUIG5hbWUgRlJPTSBwZ3RibF9kZGxf cnRfb3JpZykgQVMgdCwKKyAgICAgICAgIExBVEVSQUwgcGdfZ2V0X3RhYmxlX2RkbCgoJ3BndGJs X2RkbF90ZXN0LicgfHwgdC5uYW1lKTo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgb3duZXIgPT4gZmFsc2UpIFdJVEggT1JESU5BTElUWSBvKGxpbmUsIG9yZCkK KykKKyhTRUxFQ1QgJ21pc3NpbmctaW4tY29weScgQVMga2luZCwgbmFtZSwgb3JkLCBsaW5lIEZS T00gcGd0YmxfZGRsX3J0X29yaWcKKyBFWENFUFQKKyBTRUxFQ1QgJ21pc3NpbmctaW4tY29weScs IG5hbWUsIG9yZCwgbGluZSBGUk9NIGFmdGVyX2RkbCkKK1VOSU9OIEFMTAorKFNFTEVDVCAnZXh0 cmEtaW4tY29weScgQVMga2luZCwgbmFtZSwgb3JkLCBsaW5lIEZST00gYWZ0ZXJfZGRsCisgRVhD RVBUCisgU0VMRUNUICdleHRyYS1pbi1jb3B5JywgbmFtZSwgb3JkLCBsaW5lIEZST00gcGd0Ymxf ZGRsX3J0X29yaWcpCitPUkRFUiBCWSBraW5kLCBuYW1lLCBvcmQ7Cisga2luZCB8IG5hbWUgfCBv cmQgfCBsaW5lIAorLS0tLS0tKy0tLS0tLSstLS0tLSstLS0tLS0KKygwIHJvd3MpCisKKy0tIENs ZWFudXAuCitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfdGVzdCBDQVNDQURFOworTk9USUNFOiAgZHJv cCBjYXNjYWRlcyB0byAzOCBvdGhlciBvYmplY3RzCitERVRBSUw6ICBkcm9wIGNhc2NhZGVzIHRv IHRhYmxlIGJhc2ljCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGlkX2NvbHMKK2Ryb3AgY2FzY2Fk ZXMgdG8gdGFibGUgaWRfY3VzdG9tCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGdlbl9jb2xzCitk cm9wIGNhc2NhZGVzIHRvIHRhYmxlIGdlbl92aXJ0dWFsCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IHN0b3JhZ2VfY29scworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSByZWZkCitkcm9wIGNhc2NhZGVz IHRvIHRhYmxlIGNvbnMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgbnVsbHNfbmQKK2Ryb3AgY2Fz Y2FkZXMgdG8gdGFibGUgaWR4X2luYworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBma19hY3RzX3Rn dAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBma19hY3RzCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IG5vdGVuZl90Z3QKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgbm90ZW5mCitkcm9wIGNhc2NhZGVz IHRvIHRhYmxlIHNlbGZfcmVmCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHRlbXBvcmFsX3BrCitk cm9wIGNhc2NhZGVzIHRvIHRhYmxlIGlkeGQKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFyCitk cm9wIGNhc2NhZGVzIHRvIHRhYmxlIGNoCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGF0dG9wdAor ZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfcmFuZ2UKK2Ryb3AgY2FzY2FkZXMgdG8gdGFi bGUgcGFydGVkX2hhc2gKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX2xpc3QKK2Ryb3Ag Y2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX2lkeAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0 ZWRfcGxhaW4KK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX3BrCitkcm9wIGNhc2NhZGVz IHRvIHRhYmxlIHBhcnRlZF9zdWIKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX2NoaWxk X2lkeAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfbWl4ZWQKK2Ryb3AgY2FzY2FkZXMg dG8gdGFibGUgcGFydGVkX2ZrX3RndAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfZmsK K2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcnRfbG9nCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHJ0 Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHN0eAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBybHMK K2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmlfZnVsbAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBy aV9pZHgKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgdW5vCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hl ZHVsZQppbmRleCA4ZmEwYTZjNDdmYi4uOWVjYTY0Y2NhM2IgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxl bF9zY2hlZHVsZQpAQCAtODEsNyArODEsNyBAQCB0ZXN0OiBjcmVhdGVfdGFibGVfbGlrZSBhbHRl cl9nZW5lcmljIGFsdGVyX29wZXJhdG9yIG1pc2MgYXN5bmMgZGJzaXplIG1lcmdlIG1pcwogIyBj b2xsYXRlLmxpbnV4LnV0ZjggYW5kIGNvbGxhdGUuaWN1LnV0ZjggdGVzdHMgY2Fubm90IGJlIHJ1 biBpbiBwYXJhbGxlbCB3aXRoIGVhY2ggb3RoZXIKICMgcHNxbCBkZXBlbmRzIG9uIGNyZWF0ZV9h bQogIyBhbXV0aWxzIGRlcGVuZHMgb24gZ2VvbWV0cnksIGNyZWF0ZV9pbmRleF9zcGdpc3QsIGhh c2hfaW5kZXgsIGJyaW4KLXRlc3Q6IHJ1bGVzIHBzcWwgcHNxbF9jcm9zc3RhYiBwc3FsX3BpcGVs aW5lIGFtdXRpbHMgc3RhdHNfZXh0IGNvbGxhdGUubGludXgudXRmOCBjb2xsYXRlLndpbmRvd3Mu d2luMTI1MgordGVzdDogcnVsZXMgcHNxbCBwc3FsX2Nyb3NzdGFiIHBzcWxfcGlwZWxpbmUgYW11 dGlscyBzdGF0c19leHQgY29sbGF0ZS5saW51eC51dGY4IGNvbGxhdGUud2luZG93cy53aW4xMjUy IHBnX2dldF90YWJsZV9kZGwKIAogIyAtLS0tLS0tLS0tCiAjIFJ1biB0aGVzZSBhbG9uZSBzbyB0 aGV5IGRvbid0IHJ1biBvdXQgb2YgcGFyYWxsZWwgd29ya2VycwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvcGdfZ2V0X3RhYmxlX2RkbC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9wZ19nZXRfdGFibGVfZGRsLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uYmFkYzQxZmY3ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9wZ19nZXRfdGFibGVfZGRsLnNxbApAQCAtMCwwICsxLDg3OSBAQAorLS0KKy0tIHBnX2dldF90 YWJsZV9kZGwKKy0tCistLSBBbGwgdGVzdHMgcGFzcyBvd25lcj0+ZmFsc2Ugc28gdGhlIEFMVEVS IFRBQkxFIE9XTkVSIFRPIGxpbmUgaXMgbm90CistLSBlbWl0dGVkLCBrZWVwaW5nIG91dHB1dCBz dGFibGUgYWNyb3NzIHRlc3QgcnVubmVycyAod2hpY2ggbWF5IHJ1biB1bmRlcgorLS0gZGlmZmVy ZW50IHJvbGUgbmFtZXMpLgorLS0KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3Rlc3Q7CitTRVQg c2VhcmNoX3BhdGggPSBwZ3RibF9kZGxfdGVzdDsKKworLS0gQmFzaWMgdGFibGUgd2l0aCBQUklN QVJZIEtFWSwgTk9UIE5VTEwsIERFRkFVTFQsIENPTExBVEUuCitDUkVBVEUgVEFCTEUgYmFzaWMg KAorICAgIGlkIGludCBQUklNQVJZIEtFWSwKKyAgICBuYW1lIHRleHQgTk9UIE5VTEwgREVGQVVM VCAnYW5vbicgQ09MTEFURSAiQyIKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gSWRlbnRpdHkgY29sdW1u cyAod2l0aCBkZWZhdWx0IGFuZCBjdXN0b20gc2VxdWVuY2Ugb3B0aW9ucykuCitDUkVBVEUgVEFC TEUgaWRfY29scyAoCisgICAgaWRfYWx3YXlzIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5U SVRZLAorICAgIGlkX2RlZmF1bHQgaW50IEdFTkVSQVRFRCBCWSBERUZBVUxUIEFTIElERU5USVRZ CispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZF9jb2xzJzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlKTsKKworQ1JFQVRFIFRBQkxFIGlkX2N1c3RvbSAoCisgICAgdiBpbnQg R0VORVJBVEVEIEFMV0FZUyBBUyBJREVOVElUWSAoCisgICAgICAgIFNFUVVFTkNFIE5BTUUgaWRf Y3VzdG9tX3Zfc2VxCisgICAgICAgIFNUQVJUIFdJVEggMTAwIElOQ1JFTUVOVCBCWSA1CisgICAg ICAgIE1JTlZBTFVFIDUwIE1BWFZBTFVFIDEwMDAKKyAgICAgICAgQ0FDSEUgMTAgQ1lDTEUKKyAg ICApCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZF9jdXN0b20nOjpyZWdj bGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBHZW5lcmF0ZWQgc3RvcmVkIGNvbHVtbi4KK0NS RUFURSBUQUJMRSBnZW5fY29scyAoCisgICAgY2VudHMgaW50LAorICAgIGRvbGxhcnMgbnVtZXJp YyBHRU5FUkFURUQgQUxXQVlTIEFTIChjZW50cyAvIDEwMC4wKSBTVE9SRUQKKyk7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2dlbl9jb2xzJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlKTsKKworLS0gR2VuZXJhdGVkIHZpcnR1YWwgY29sdW1uLgorQ1JFQVRFIFRBQkxFIGdlbl92 aXJ0dWFsICgKKyAgICBiYXNlIGludCwKKyAgICBkZXJpdmVkIGludCBHRU5FUkFURUQgQUxXQVlT IEFTIChiYXNlICogMikgVklSVFVBTAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnZ2VuX3ZpcnR1YWwnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBTVE9SQUdF IGFuZCBDT01QUkVTU0lPTiAob25seSBlbWl0dGVkIHdoZW4gbm9uLWRlZmF1bHQgZm9yIHRoZSB0 eXBlKS4KK0NSRUFURSBUQUJMRSBzdG9yYWdlX2NvbHMgKAorICAgIGEgdGV4dCBTVE9SQUdFIEVY VEVSTkFMLAorICAgIGIgdGV4dCBTVE9SQUdFIE1BSU4sCisgICAgYyB0ZXh0IENPTVBSRVNTSU9O IHBnbHoKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0b3JhZ2VfY29scyc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIENvbnN0cmFpbnRzOiBDSEVDSywgVU5J UVVFLCBGT1JFSUdOIEtFWSAoREVGRVJSQUJMRSkuCitDUkVBVEUgVEFCTEUgcmVmZCAoaWQgaW50 IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBjb25zICgKKyAgICBhIGludCBDSEVDSyAoYSA+ IDApLAorICAgIGIgaW50IFVOSVFVRSwKKyAgICBjIGludCBSRUZFUkVOQ0VTIHJlZmQoaWQpIERF RkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVECispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gVU5JUVVFIE5V TExTIE5PVCBESVNUSU5DVCAoUEcgMTUpOiBudWxsIHZhbHVlcyBhcmUgdHJlYXRlZCBhcyBlcXVh bCBmb3IKKy0tIHVuaXF1ZW5lc3MgcHVycG9zZXMsIHNvIHRoZSBOVUxMUyBOT1QgRElTVElOQ1Qg Y2xhdXNlIG11c3QgYmUgZW1pdHRlZC4KK0NSRUFURSBUQUJMRSBudWxsc19uZCAoCisgICAgYSBp bnQsCisgICAgYiBpbnQsCisgICAgVU5JUVVFIE5VTExTIE5PVCBESVNUSU5DVCAoYSwgYikKKyk7 CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ251bGxzX25kJzo6cmVnY2xhc3MsIG93 bmVyID0+IGZhbHNlKTsKKworLS0gSU5DTFVERSBjb2x1bW5zIG9uIGEgY29uc3RyYWludC1iYWNr ZWQgVU5JUVVFIGluZGV4IChQRyAxMSk6IHRoZQorLS0gY292ZXJpbmcgY29sdW1ucyBhcHBlYXIg aW4gYW4gSU5DTFVERSAoLi4uKSBjbGF1c2Ugb24gdGhlIEFMVEVSIFRBQkxFCistLSBBREQgQ09O U1RSQUlOVCBzdGF0ZW1lbnQsIG5vdCBpbiB0aGUga2V5IGNvbHVtbiBsaXN0LgorQ1JFQVRFIFRB QkxFIGlkeF9pbmMgKAorICAgIGlkICAgaW50IFBSSU1BUlkgS0VZLAorICAgIG5hbWUgdGV4dCwK KyAgICBleHRyYSB0ZXh0LAorICAgIFVOSVFVRSAobmFtZSkgSU5DTFVERSAoZXh0cmEpCispOwor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhfaW5jJzo6cmVnY2xhc3MsIG93bmVy ID0+IGZhbHNlKTsKKworLS0gRk9SRUlHTiBLRVkgd2l0aCBPTiBERUxFVEUgLyBPTiBVUERBVEUg cmVmZXJlbnRpYWwgYWN0aW9ucyBhbmQgTUFUQ0gKKy0tIGNsYXVzZS4gIEVhY2ggdmFyaWFudCBt dXN0IGFwcGVhciB2ZXJiYXRpbSBpbiB0aGUgcmVjb25zdHJ1Y3RlZCBEREwuCitDUkVBVEUgVEFC TEUgZmtfYWN0c190Z3QgKGlkIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgZmtfYWN0 cyAoCisgICAgYSBpbnQsCisgICAgYiBpbnQsCisgICAgYyBpbnQsCisgICAgZCBpbnQsCisgICAg Q09OU1RSQUlOVCBma19jYXNjYWRlICBGT1JFSUdOIEtFWSAoYSkgUkVGRVJFTkNFUyBma19hY3Rz X3RndChpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE9OIERFTEVURSBDQVNDQURFIE9O IFVQREFURSBSRVNUUklDVCwKKyAgICBDT05TVFJBSU5UIGZrX3NldG51bGwgIEZPUkVJR04gS0VZ IChiKSBSRUZFUkVOQ0VTIGZrX2FjdHNfdGd0KGlkKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgT04gREVMRVRFIFNFVCBOVUxMLAorICAgIENPTlNUUkFJTlQgZmtfc2V0ZGVmICAgRk9SRUlH TiBLRVkgKGMpIFJFRkVSRU5DRVMgZmtfYWN0c190Z3QoaWQpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBPTiBERUxFVEUgU0VUIERFRkFVTFQsCisgICAgQ09OU1RSQUlOVCBma19tYXRjaCAg ICBGT1JFSUdOIEtFWSAoZCkgUkVGRVJFTkNFUyBma19hY3RzX3RndChpZCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIE1BVENIIEZVTEwKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ2ZrX2FjdHMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBOT1QgRU5G T1JDRUQgZm9yZWlnbiBrZXkgKFBHIDE3KTogdGhlIGNvbnN0cmFpbnQgaXMgcmVjb3JkZWQgaW4g dGhlCistLSBjYXRhbG9nIGJ1dCBub3QgdmFsaWRhdGVkIGJ5IHRoZSBlbmdpbmU7IE5PVCBFTkZP UkNFRCBtdXN0IGFwcGVhciBpbgorLS0gdGhlIHJlY29uc3RydWN0ZWQgRERMLgorQ1JFQVRFIFRB QkxFIG5vdGVuZl90Z3QgKGlkIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgbm90ZW5m ICgKKyAgICBhIGludCwKKyAgICBDT05TVFJBSU5UIG5vdGVuZl9mayBGT1JFSUdOIEtFWSAoYSkg UkVGRVJFTkNFUyBub3RlbmZfdGd0KGlkKQorICAgICAgICAgICAgICAgICAgICAgICAgIE5PVCBF TkZPUkNFRAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnbm90ZW5mJzo6cmVn Y2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gU2VsZi1yZWZlcmVuY2luZyBGSzogdGhlIFBL IG11c3QgYXBwZWFyIGJlZm9yZSB0aGUgRksgdGhhdCByZWZlcmVuY2VzIGl0LgorLS0gVGhlIGNh dGFsb2cgc2NhbiByZXR1cm5zIGNvbnN0cmFpbnRzIGluIG5hbWUgb3JkZXI7IHdpdGhvdXQgdGhl IGZpeCwKKy0tICJzZWxmX3JlZl9wYXJlbnRfaWRfZmtleSIgc29ydHMgYmVmb3JlICJzZWxmX3Jl Zl9wa2V5IiBhbmQgdGhlIEZLIEFERAorLS0gQ09OU1RSQUlOVCBmYWlscyB3aXRoICJ0aGVyZSBp cyBubyB1bmlxdWUgY29uc3RyYWludCBtYXRjaGluZyBnaXZlbiBrZXlzIi4KK0NSRUFURSBUQUJM RSBzZWxmX3JlZiAoCisgICAgaWQgICAgICAgIGludCBQUklNQVJZIEtFWSwKKyAgICBwYXJlbnRf aWQgaW50IFJFRkVSRU5DRVMgc2VsZl9yZWYoaWQpCispOworU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdzZWxmX3JlZic6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIFdJ VEhPVVQgT1ZFUkxBUFMgb24gYSBQUklNQVJZIEtFWSAoUEcgMTcpOiB0aGUgcmFuZ2UtdHlwZSBw ZXJpb2QKKy0tIGNvbHVtbiBmb3JtcyBhIHRlbXBvcmFsIHByaW1hcnkga2V5OyBXSVRIT1VUIE9W RVJMQVBTIG11c3QgYXBwZWFyCistLSBpbnNpZGUgdGhlIGtleSBjb2x1bW4gbGlzdCBpbiB0aGUg cmVjb25zdHJ1Y3RlZCBBTFRFUiBUQUJMRS4KKy0tIEJvdGggY29sdW1ucyB1c2UgcmFuZ2UgdHlw ZXMgd2l0aCBuYXRpdmUgR2lTVCBzdXBwb3J0IHNvIG5vCistLSBidHJlZV9naXN0IGV4dGVuc2lv biBpcyBuZWVkZWQuCitDUkVBVEUgVEFCTEUgdGVtcG9yYWxfcGsgKAorICAgIGdycCAgaW50NHJh bmdlLAorICAgIGR1cmluZyBkYXRlcmFuZ2UsCisgICAgUFJJTUFSWSBLRVkgKGdycCwgZHVyaW5n IFdJVEhPVVQgT1ZFUkxBUFMpCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0 ZW1wb3JhbF9wayc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIEluZGV4ZXM6IGZ1 bmN0aW9uYWwgYW5kIHBhcnRpYWwuICBDb25zdHJhaW50LWJhY2tpbmcgaW5kZXhlcyBhcmUKKy0t IHN1cHByZXNzZWQgKHRoZXkgYXJlIGVtaXR0ZWQgYnkgdGhlIGNvbnN0cmFpbnQgbG9vcCkuCitD UkVBVEUgVEFCTEUgaWR4ZCAoaWQgaW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOworQ1JFQVRF IElOREVYIGlkeGRfbG93ZXIgT04gaWR4ZCAobG93ZXIobmFtZSkpOworQ1JFQVRFIElOREVYIGlk eGRfcGFydGlhbCBPTiBpZHhkIChpZCkgV0hFUkUgaWQgPiAxMDA7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBJ bmhlcml0YW5jZSwgaW5jbHVkaW5nIGEgY2hpbGQgREVGQVVMVCBvdmVycmlkZSBvbiBhbiBpbmhl cml0ZWQgY29sdW1uLgorQ1JFQVRFIFRBQkxFIHBhciAoYSBpbnQgREVGQVVMVCAxLCBiIHRleHQp OworQ1JFQVRFIFRBQkxFIGNoIChjIGludCkgSU5IRVJJVFMgKHBhcik7CitBTFRFUiBUQUJMRSBj aCBBTFRFUiBDT0xVTU4gYSBTRVQgREVGQVVMVCA5OTk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2NoJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gUGVyLWNvbHVt biBhdHRvcHRpb25zOiBlbWl0dGVkIGFzIEFMVEVSIENPTFVNTiBTRVQgKC4uLikuCitDUkVBVEUg VEFCTEUgYXR0b3B0IChhIGludCwgYiB0ZXh0KTsKK0FMVEVSIFRBQkxFIGF0dG9wdCBBTFRFUiBD T0xVTU4gYSBTRVQgKG5fZGlzdGluY3QgPSAxMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdhdHRvcHQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBQYXJ0aXRp b25lZCB0YWJsZSBwYXJlbnRzIChSQU5HRSwgSEFTSCwgYW5kIExJU1QpLgorQ1JFQVRFIFRBQkxF IHBhcnRlZF9yYW5nZSAoaWQgaW50LCBrIGludCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZSc6OnJlZ2NsYXNzLCBv d25lciA9PiBmYWxzZSk7CisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfaGFzaCAoaWQgaW50KSBQQVJU SVRJT04gQlkgSEFTSCAoaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0 ZWRfaGFzaCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKK0NSRUFURSBUQUJMRSBwYXJ0 ZWRfbGlzdCAoaWQgaW50LCByZWdpb24gdGV4dCkgUEFSVElUSU9OIEJZIExJU1QgKHJlZ2lvbik7 CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9saXN0Jzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlKTsKKworLS0gUGFydGl0aW9uIGNoaWxkcmVuOiBGUk9NL1RPLCBXSVRI IChtb2R1bHVzLCByZW1haW5kZXIpLCBERUZBVUxULgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9yYW5n ZV8xIFBBUlRJVElPTiBPRiBwYXJ0ZWRfcmFuZ2UKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRP ICgxMDApOworQUxURVIgVEFCTEUgcGFydGVkX3JhbmdlXzEgQUxURVIgQ09MVU1OIGsgU0VUIERF RkFVTFQgNzsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlXzEn OjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCitDUkVBVEUgVEFCTEUgcGFydGVkX2hhc2hf MCBQQVJUSVRJT04gT0YgcGFydGVkX2hhc2gKKyAgICBGT1IgVkFMVUVTIFdJVEggKG1vZHVsdXMg MiwgcmVtYWluZGVyIDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRf aGFzaF8wJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKworQ1JFQVRFIFRBQkxFIHBhcnRl ZF9yYW5nZV9kZWYgUEFSVElUSU9OIE9GIHBhcnRlZF9yYW5nZSBERUZBVUxUOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2VfZGVmJzo6cmVnY2xhc3MsIG93bmVy ID0+IGZhbHNlKTsKKworLS0gTm9uLWNvbnN0cmFpbnQtYmFja2VkIGluZGV4IG9uIGEgcGFydGl0 aW9uZWQgdGFibGU6IHRoZSBwYXJlbnQncyBpbmRleCBEREwKKy0tIG11c3QgYXBwZWFyIG9uY2U7 IHRoZSBhdXRvLWNyZWF0ZWQgY2hpbGQgcGFydGl0aW9uIGluZGV4ZXMgKHJlbGlzcGFydGl0aW9u PXQpCistLSBtdXN0IGJlIHN1cHByZXNzZWQgc28gdGhlIERETCByb3VuZC10cmlwcyB3aXRob3V0 ICJyZWxhdGlvbiBhbHJlYWR5IGV4aXN0cyIuCitDUkVBVEUgVEFCTEUgcGFydGVkX2lkeCAoaWQg aW50LCByZWdpb24gdGV4dCkgUEFSVElUSU9OIEJZIExJU1QgKHJlZ2lvbik7CitDUkVBVEUgVEFC TEUgcGFydGVkX2lkeF9hIFBBUlRJVElPTiBPRiBwYXJ0ZWRfaWR4IEZPUiBWQUxVRVMgSU4gKCdh Jyk7CitDUkVBVEUgVU5JUVVFIElOREVYIHBhcnRlZF9pZHhfdWlkeCBPTiBwYXJ0ZWRfaWR4IChp ZCwgcmVnaW9uKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2lkeCc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIFBsYWluIChub24tdW5pcXVlKSBDUkVB VEUgSU5ERVggb24gcGFydGl0aW9uZWQgdGFibGU6IHRoZSBhdXRvLWNyZWF0ZWQgY2hpbGQKKy0t IGluZGV4IChyZWxpc3BhcnRpdGlvbj10cnVlKSBpcyBzdXBwcmVzc2VkLCBqdXN0IGxpa2UgdGhl IFVOSVFVRSBjYXNlLgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9wbGFpbiAoaWQgaW50LCB2YWwgdGV4 dCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcGFydGVkX3BsYWluX2Eg UEFSVElUSU9OIE9GIHBhcnRlZF9wbGFpbiBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOwor Q1JFQVRFIElOREVYIHBhcnRlZF9wbGFpbl9pZF9pZHggT04gcGFydGVkX3BsYWluIChpZCk7CitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9wbGFpbic6OnJlZ2NsYXNzLCBv d25lciA9PiBmYWxzZSk7CisKKy0tIENvbnN0cmFpbnQtYmFja2VkIFBSSU1BUlkgS0VZIG9uIHBh cnRpdGlvbmVkIHRhYmxlOiB0aGUgY2hpbGQncyBpbmhlcml0ZWQKKy0tIGNvbnN0cmFpbnQgKGNv bmlzbG9jYWw9ZmFsc2UpIGFuZCBpdHMgYmFja2luZyBpbmRleCBhcmUgYm90aCBzdXBwcmVzc2Vk LgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9wayAoaWQgaW50LCByZWdpb24gdGV4dCkgUEFSVElUSU9O IEJZIExJU1QgKHJlZ2lvbik7CitDUkVBVEUgVEFCTEUgcGFydGVkX3BrX2EgUEFSVElUSU9OIE9G IHBhcnRlZF9wayBGT1IgVkFMVUVTIElOICgnYScpOworQUxURVIgVEFCTEUgcGFydGVkX3BrIEFE RCBQUklNQVJZIEtFWSAoaWQsIHJlZ2lvbik7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ3BhcnRlZF9wayc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIE11bHRpLWxl dmVsIChzdWItcGFydGl0aW9uZWQpIHRhYmxlIHdpdGggYSBDUkVBVEUgSU5ERVggb24gdGhlIHJv b3QuCistLSBUaGUgbWlkLWxldmVsIHBhcnRpdGlvbmVkIGluZGV4IChyZWxpc3BhcnRpdGlvbj10 cnVlLCByZWxraW5kPSdJJykgYW5kIHRoZQorLS0gbGVhZiBpbmRleCAocmVsaXNwYXJ0aXRpb249 dHJ1ZSwgcmVsa2luZD0naScpIGFyZSBib3RoIHN1cHByZXNzZWQuCitDUkVBVEUgVEFCTEUgcGFy dGVkX3N1YiAoaWQgaW50LCByZWdpb24gdGV4dCkgUEFSVElUSU9OIEJZIExJU1QgKHJlZ2lvbik7 CitDUkVBVEUgVEFCTEUgcGFydGVkX3N1Yl9hIFBBUlRJVElPTiBPRiBwYXJ0ZWRfc3ViCisgICAg Rk9SIFZBTFVFUyBJTiAoJ2EnKSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJM RSBwYXJ0ZWRfc3ViX2ExIFBBUlRJVElPTiBPRiBwYXJ0ZWRfc3ViX2EgRk9SIFZBTFVFUyBGUk9N ICgwKSBUTyAoMTAwKTsKK0NSRUFURSBJTkRFWCBwYXJ0ZWRfc3ViX2lkX2lkeCBPTiBwYXJ0ZWRf c3ViIChpZCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9zdWInOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBQYXJ0aXRpb24gY2hpbGQgd2l0aCBpdHMg b3duIGxvY2FsbHktZGVmaW5lZCBpbmRleCAocmVsaXNwYXJ0aXRpb249ZmFsc2UpOgorLS0gdGhp cyBpcyBOT1QgaW5oZXJpdGVkIGZyb20gYW55IHBhcmVudCBwYXJ0aXRpb25lZCBpbmRleCBhbmQg bXVzdCBiZSBlbWl0dGVkLgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9jaGlsZF9pZHggKGlkIGludCwg cmVnaW9uIHRleHQpIFBBUlRJVElPTiBCWSBMSVNUIChyZWdpb24pOworQ1JFQVRFIFRBQkxFIHBh cnRlZF9jaGlsZF9pZHhfYSBQQVJUSVRJT04gT0YgcGFydGVkX2NoaWxkX2lkeCBGT1IgVkFMVUVT IElOICgnYScpOworQ1JFQVRFIElOREVYIHBhcnRlZF9jaGlsZF9pZHhfYV9pZCBPTiBwYXJ0ZWRf Y2hpbGRfaWR4X2EgKGlkKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVk X2NoaWxkX2lkeCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIE1peDogcGFyZW50 IGhhcyBhIENSRUFURSBJTkRFWCAoYXV0by1wcm9wYWdhdGVkIHRvIGNoaWxkLCByZWxpc3BhcnRp dGlvbj10cnVlLAorLS0gc3VwcHJlc3NlZCkgQU5EIHRoZSBjaGlsZCBoYXMgaXRzIG93biBsb2Nh bCBpbmRleCAocmVsaXNwYXJ0aXRpb249ZmFsc2UsIGVtaXR0ZWQpLgorQ1JFQVRFIFRBQkxFIHBh cnRlZF9taXhlZCAoaWQgaW50LCByZWdpb24gdGV4dCkgUEFSVElUSU9OIEJZIExJU1QgKHJlZ2lv bik7CitDUkVBVEUgVEFCTEUgcGFydGVkX21peGVkX2EgUEFSVElUSU9OIE9GIHBhcnRlZF9taXhl ZCBGT1IgVkFMVUVTIElOICgnYScpOworQ1JFQVRFIElOREVYIHBhcnRlZF9taXhlZF9pZCBPTiBw YXJ0ZWRfbWl4ZWQgKGlkKTsKK0NSRUFURSBJTkRFWCBwYXJ0ZWRfbWl4ZWRfYV9yZWdpb24gT04g cGFydGVkX21peGVkX2EgKHJlZ2lvbik7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J3BhcnRlZF9taXhlZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIEZLIG9uIGEg cGFydGl0aW9uZWQgdGFibGU6IGRlY2xhcmVkIG9uIHRoZSBwYXJlbnQ7IHBhcnRpdGlvbiBjaGls ZHJlbiBpbmhlcml0CistLSB0aGUgY29uc3RyYWludCB3aXRoIGNvbmlzbG9jYWw9ZmFsc2UgYW5k IG11c3Qgbm90IHJlLWVtaXQgaXQuCitDUkVBVEUgVEFCTEUgcGFydGVkX2ZrX3RndCAoaWQgaW50 IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfZmsgKGlkIGludCwgdGd0X2lkIGlu dCBSRUZFUkVOQ0VTIHBhcnRlZF9ma190Z3QoaWQpKQorICAgIFBBUlRJVElPTiBCWSBSQU5HRSAo aWQpOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9ma19hIFBBUlRJVElPTiBPRiBwYXJ0ZWRfZmsgRk9S IFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgncGFydGVkX2ZrJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gU3RhdGlzdGlj cyBkZWNsYXJlZCBleHBsaWNpdGx5IG9uIGEgcGFydGl0aW9uIGNoaWxkIChub3QgYXV0by1wcm9w YWdhdGVkKToKKy0tIHRoZSBjaGlsZCdzIHN0YXRpc3RpY3Mgb2JqZWN0IGFwcGVhcnMgaW5zaWRl IHRoZSBjaGlsZCdzIERETCBibG9jay4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfc3R4IChpZCBpbnQs IHJlZ2lvbiB0ZXh0LCB2YWwgZmxvYXQpIFBBUlRJVElPTiBCWSBMSVNUIChyZWdpb24pOworQ1JF QVRFIFRBQkxFIHBhcnRlZF9zdHhfYSBQQVJUSVRJT04gT0YgcGFydGVkX3N0eCBGT1IgVkFMVUVT IElOICgnYScpOworQ1JFQVRFIFNUQVRJU1RJQ1MgcGFydGVkX3N0eF9zdGF0IChuZGlzdGluY3Qp IE9OIGlkLCByZWdpb24gRlJPTSBwYXJ0ZWRfc3R4OworQ1JFQVRFIFNUQVRJU1RJQ1MgcGFydGVk X3N0eF9hX3N0YXQgKG5kaXN0aW5jdCkgT04gaWQsIHZhbCBGUk9NIHBhcnRlZF9zdHhfYTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3N0eCc6OnJlZ2NsYXNzLCBvd25l ciA9PiBmYWxzZSk7CitEUk9QIFRBQkxFIHBhcnRlZF9zdHg7CisKKy0tIE5PIElOSEVSSVQgQ0hF Q0sgY29uc3RyYWludDogdGhlIE5PIElOSEVSSVQgZmxhZyBtdXN0IGFwcGVhciB2ZXJiYXRpbSBp biB0aGUKKy0tIGlubGluZSBjb25zdHJhaW50IGRlZmluaXRpb24gaW5zaWRlIHRoZSBDUkVBVEUg VEFCTEUgYm9keS4KK0NSRUFURSBUQUJMRSBub2luaGNoayAoaWQgaW50LCB2YWwgaW50LAorICAg IENPTlNUUkFJTlQgdmFsX3BvcyBDSEVDSyAodmFsID4gMCkgTk8gSU5IRVJJVCk7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ25vaW5oY2hrJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlKTsKK0RST1AgVEFCTEUgbm9pbmhjaGs7CisKKy0tIE11bHRpcGxlIGluaGVyaXRhbmNlIHBh cmVudHM6IHRoZSBJTkhFUklUUyBjbGF1c2UgbXVzdCBsaXN0IGJvdGggcGFyZW50cyBpbgorLS0g ZGVjbGFyYXRpb24gb3JkZXI7IG9ubHkgdGhlIGxvY2FsbHktZGVmaW5lZCBjb2x1bW4gYXBwZWFy cyBpbiB0aGUgY29sdW1uIGxpc3QuCitDUkVBVEUgVEFCTEUgbWlfcDEgKGEgaW50IERFRkFVTFQg MSk7CitDUkVBVEUgVEFCTEUgbWlfcDIgKGIgdGV4dCBERUZBVUxUICd4Jyk7CitDUkVBVEUgVEFC TEUgbWlfY2hpbGQgKGMgZmxvYXQpIElOSEVSSVRTIChtaV9wMSwgbWlfcDIpOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdtaV9jaGlsZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxz ZSk7CitEUk9QIFRBQkxFIG1pX3AxLCBtaV9wMiBDQVNDQURFOworCistLSBSdWxlcy4KK0NSRUFU RSBUQUJMRSBydCAoaWQgaW50KTsKK0NSRUFURSBUQUJMRSBydF9sb2cgKGlkIGludCk7CitDUkVB VEUgUlVMRSBydF9sb2dfaW5zZXJ0IEFTIE9OIElOU0VSVCBUTyBydAorICAgIERPIEFMU08gSU5T RVJUIElOVE8gcnRfbG9nIFZBTFVFUyAoTkVXLmlkKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgncnQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBFeHRlbmRlZCBz dGF0aXN0aWNzLgorQ1JFQVRFIFRBQkxFIHN0eCAoYSBpbnQsIGIgaW50LCBjIGludCk7CitDUkVB VEUgU1RBVElTVElDUyBzdHhfbmR2IChuZGlzdGluY3QpIE9OIGEsIGIgRlJPTSBzdHg7CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0eCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxz ZSk7CisKKy0tIFJvdy1sZXZlbCBzZWN1cml0eSB0b2dnbGVzLgorQ1JFQVRFIFRBQkxFIHJscyAo aWQgaW50KTsKK0FMVEVSIFRBQkxFIHJscyBFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZOworQUxU RVIgVEFCTEUgcmxzIEZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWTsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgncmxzJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gUkVQ TElDQSBJREVOVElUWTogZW1pdHRlZCBvbmx5IHdoZW4gbm90IHRoZSBkZWZhdWx0LgorQ1JFQVRF IFRBQkxFIHJpX2Z1bGwgKGEgaW50KTsKK0FMVEVSIFRBQkxFIHJpX2Z1bGwgUkVQTElDQSBJREVO VElUWSBGVUxMOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9mdWxsJzo6cmVn Y2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKworQ1JFQVRFIFRBQkxFIHJpX2lkeCAoYSBpbnQgTk9U IE5VTEwpOworQ1JFQVRFIFVOSVFVRSBJTkRFWCByaV9pZHhfYSBPTiByaV9pZHggKGEpOworQUxU RVIgVEFCTEUgcmlfaWR4IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmlfaWR4X2E7CitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2lkeCc6OnJlZ2NsYXNzLCBvd25lciA9 PiBmYWxzZSk7CisKKy0tIFVOTE9HR0VEICsgcmVsb3B0aW9ucy4KK0NSRUFURSBVTkxPR0dFRCBU QUJMRSB1bm8gKGlkIGludCkgV0lUSCAoZmlsbGZhY3RvciA9IDcwKTsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgndW5vJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0g VHlwZWQgdGFibGUgKENSRUFURSBUQUJMRSBPRiB0eXBlX25hbWUpLiAgQ29sdW1ucyBpbmhlcml0 ZWQgZnJvbSB0aGUKKy0tIHR5cGUgZW1pdCBub3RoaW5nOyBsb2NhbGx5LWFwcGxpZWQgREVGQVVM VCwgTk9UIE5VTEwgYW5kIENIRUNLIGNvbWUKKy0tIG91dCB0aHJvdWdoIGEgc2luZ2xlICIoY29s IFdJVEggT1BUSU9OUyAuLi4pIiBsaXN0LgorQ1JFQVRFIFRZUEUgdHlwZWRfdCBBUyAoYSBpbnQs IGIgdGV4dCk7CitDUkVBVEUgVEFCTEUgdHlwZWRfcGxhaW4gT0YgdHlwZWRfdDsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndHlwZWRfcGxhaW4nOjpyZWdjbGFzcywgb3duZXIgPT4g ZmFsc2UpOworCitDUkVBVEUgVEFCTEUgdHlwZWRfb3ZlciBPRiB0eXBlZF90ICgKKyAgICBhIFdJ VEggT1BUSU9OUyBERUZBVUxUIDcgTk9UIE5VTEwsCisgICAgYiBXSVRIIE9QVElPTlMgTk9UIE5V TEwsCisgICAgQ09OU1RSQUlOVCBiX25vbmVtcHR5IENIRUNLIChsZW5ndGgoYikgPiAwKQorKTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndHlwZWRfb3Zlcic6OnJlZ2NsYXNzLCBv d25lciA9PiBmYWxzZSk7CisKKy0tIFRlbXBvcmFyeSB0YWJsZXMgKyBPTiBDT01NSVQuICBUZW1w IHRhYmxlcyBtdXN0IG5ldmVyIGJlIGVtaXR0ZWQgd2l0aAorLS0gdGhlIHNlc3Npb24tcHJpdmF0 ZSBwZ190ZW1wX05OIHNjaGVtYSBwcmVmaXggLS0gdGhlIFRFTVBPUkFSWSBrZXl3b3JkCistLSBh bHJlYWR5IHBsYWNlcyB0aGUgdGFibGUgaW4gcGdfdGVtcCBhbmQgdGhlIHByZWZpeCBpcyBub24t cmVwbGF5YWJsZS4KKy0tIE9OIENPTU1JVCBEUk9QIG9ubHkgZmlyZXMgYXQgY29tbWl0LCBzbyB0 aGUgcXVlcmllcyB0aGF0IG5lZWQgdG8gc2VlCistLSB0aGUgY2F0YWxvZyBlbnRyeSBtdXN0IHJ1 biBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiBhcyB0aGUgQ1JFQVRFLgorQkVHSU47CitDUkVBVEUg VEVNUCBUQUJMRSB0ZW1wX2RlZmF1bHQgKGlkIGludCk7CitDUkVBVEUgVEVNUCBUQUJMRSB0ZW1w X2RlbGV0ZSAoaWQgaW50KSBPTiBDT01NSVQgREVMRVRFIFJPV1M7CitDUkVBVEUgVEVNUCBUQUJM RSB0ZW1wX2Ryb3AgKGlkIGludCkgT04gQ09NTUlUIERST1A7CisKK1NFTEVDVCBsaW5lIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgndGVtcF9kZWZhdWx0Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNl KSBBUyBsaW5lCitXSEVSRSBsaW5lIExJS0UgJ0NSRUFURSAlJzsKKworU0VMRUNUIGxpbmUgRlJP TSBwZ19nZXRfdGFibGVfZGRsKCd0ZW1wX2RlbGV0ZSc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxz ZSkgQVMgbGluZQorV0hFUkUgbGluZSBMSUtFICdDUkVBVEUgJSc7CisKK1NFTEVDVCBsaW5lIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcF9kcm9wJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNl KSBBUyBsaW5lCitXSEVSRSBsaW5lIExJS0UgJ0NSRUFURSAlJzsKK1JPTExCQUNLOworCistLSBQ cmV0dHkgbW9kZS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdj bGFzcywgb3duZXIgPT4gZmFsc2UsIHByZXR0eSA9PiB0cnVlKTsKKworLS0gb25seV9raW5kcyAv IGV4Y2VwdF9raW5kcyBnYXRpbmc6IGVhY2ggZW1pdHMgZWl0aGVyIG9ubHkgdGhlIGxpc3RlZCBr aW5kcworLS0gKG9ubHlfa2luZHMpIG9yIGV2ZXJ5IGtpbmQgZXhjZXB0IHRoZSBsaXN0ZWQgb25l cyAoZXhjZXB0X2tpbmRzKS4gIFRoZSB0d28KKy0tIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuICBL aW5kIHZvY2FidWxhcnk6IHRhYmxlLCBpbmRleCwKKy0tIHByaW1hcnlfa2V5LCB1bmlxdWUsIGNo ZWNrLCBmb3JlaWduX2tleSwgZXhjbHVzaW9uLCBydWxlLAorLS0gc3RhdGlzdGljcywgdHJpZ2dl ciwgcG9saWN5LCBybHMsIHJlcGxpY2FfaWRlbnRpdHksIHBhcnRpdGlvbi4KKy0tIE5PVCBOVUxM IGlzIG5vdCBpbiB0aGUgdm9jYWJ1bGFyeSAtIGFsd2F5cyBlbWl0dGVkIHRvIHByZXZlbnQKKy0t IHByb2R1Y2luZyBzY2hlbWFzIHRoYXQgc2lsZW50bHkgYWNjZXB0IE5VTExzIHRoZSBzb3VyY2Ug d291bGQKKy0tIGhhdmUgcmVqZWN0ZWQuCistLQorLS0gZXhjZXB0X2tpbmRzPWluZGV4IGhpZGVz IHRoZSBDUkVBVEUgSU5ERVggc3RhdGVtZW50cy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFS UkFZWydpbmRleCddKTsKKworLS0gZXhjZXB0X2tpbmRzPXByaW1hcnlfa2V5LHVuaXF1ZSxjaGVj ayxmb3JlaWduX2tleSxleGNsdXNpb24gaGlkZXMgZXZlcnkKKy0tIHRhYmxlLWxldmVsIGNvbnN0 cmFpbnQuICBJbmxpbmUgQ0hFQ0sgaW4gdGhlIENSRUFURSBUQUJMRSBib2R5IGlzCistLSBzdXBw cmVzc2VkIHRvby4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2Ns YXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydwcmltYXJ5X2tleScs J3VuaXF1ZScsJ2NoZWNrJywnZm9yZWlnbl9rZXknLCdleGNsdXNpb24nXSk7CisKKy0tIGV4Y2Vw dF9raW5kcz1mb3JlaWduX2tleSBzdXBwcmVzc2VzIG9ubHkgRk9SRUlHTiBLRVkgY29uc3RyYWlu dHM7CistLSBQUklNQVJZIEtFWSwgVU5JUVVFLCBDSEVDSywgYW5kIG5hbWVkIE5PVCBOVUxMIHN0 YXkuICBUaGlzIGlzIHRoZQorLS0gZmlyc3QgcGFzcyBvZiB0aGUgdHdvLXBhc3MgRkstY2xvbmUg d29ya2Zsb3c6IGVtaXQgdGFibGVzIHdpdGhvdXQKKy0tIGNyb3NzLXRhYmxlIEZLcywgbG9hZCBk YXRhLCB0aGVuIHJlLXJ1biB3aXRoIG9ubHlfa2luZHM9Zm9yZWlnbl9rZXkKKy0tIHRvIGFkZCB0 aGVtIG9uY2UgYWxsIHRhcmdldHMgZXhpc3QuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJB WVsnZm9yZWlnbl9rZXknXSk7CisKKy0tIG9ubHlfa2luZHM9Zm9yZWlnbl9rZXkgaXMgdGhlIHNl Y29uZCBwYXNzIG9mIHRoZSB0d28tcGFzcyBGSy1jbG9uZQorLS0gd29ya2Zsb3c6IGVtaXQgb25s eSB0aGUgQUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5UIC4uLiBGT1JFSUdOCistLSBLRVkg cm93czsgdGhlIENSRUFURSBUQUJMRSBhbmQgZXZlcnkgbm9uLUZLIHN1Yi1vYmplY3QgYXJlCist LSBzdXBwcmVzc2VkICh0aGUgdGFibGUgYWxyZWFkeSBleGlzdHMgZnJvbSB0aGUgZmlyc3QgcGFz cykuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3du ZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ2ZvcmVpZ25fa2V5J10pOworCistLSBB IHRhYmxlIHdpdGggbm8gZm9yZWlnbiBrZXlzIHByb2R1Y2VzIG5vIHJvd3MgdW5kZXIKKy0tIG9u bHlfa2luZHM9Zm9yZWlnbl9rZXkuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Jl ZmQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ2ZvcmVp Z25fa2V5J10pOworCistLSBvbmx5X2tpbmRzPXRhYmxlIGVtaXRzIG9ubHkgdGhlIGJhcmUgQ1JF QVRFIFRBQkxFICh3aXRoIGFueSBpbmxpbmUKKy0tIGNvbHVtbi1sZXZlbCBOT1QgTlVMTCBhbmQg Q0hFQ0spIC0gbm8gaW5kZXhlcywgbm8gUFJJTUFSWSBLRVkgQUxURVIsCistLSBubyBvdGhlciBz dWItb2JqZWN0cy4gIFVzZWZ1bCBmb3IgY2FwdHVyaW5nIGEgdGFibGUncyBzaGFwZSB3aXRob3V0 CistLSBwdWxsaW5nIGluIGV2ZXJ5dGhpbmcgYXR0YWNoZWQgdG8gaXQuCitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlf a2luZHMgPT4gQVJSQVlbJ3RhYmxlJ10pOworCistLSBvbmx5X2tpbmRzPWNoZWNrIG9uIGEgbm9u LXBhcnRpdGlvbiB0YWJsZS4gIFRoZSBjb25zdHJhaW50IGxvb3AgbXVzdCBlbWl0CistLSBjb2x1 bW4tbGV2ZWwgYW5kIHRhYmxlLWxldmVsIENIRUNLIGNvbnN0cmFpbnRzIHZpYSBBTFRFUiBUQUJM RSBoZXJlLAorLS0gYmVjYXVzZSB0aGUgaW5saW5lIHBhdGggaW4gQ1JFQVRFIFRBQkxFIG5ldmVy IHJ1bnMgKEtJTkRfVEFCTEUgaXMKKy0tIG5vdCBpbiB0aGUgZmlsdGVyKS4KK0NSRUFURSBUQUJM RSBjaGtfb25seSAoCisgICAgaWQgIGludCBQUklNQVJZIEtFWSwKKyAgICBxdHkgaW50IENIRUNL IChxdHkgPiAwKSwKKyAgICBDT05TVFJBSU5UIGNoa19vbmx5X2lkX3BvcyBDSEVDSyAoaWQgPiAw KQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY2hrX29ubHknOjpyZWdjbGFz cywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ2NoZWNrJ10pOworRFJPUCBU QUJMRSBjaGtfb25seTsKKworLS0gb25seV9raW5kcz1wYXJ0aXRpb24gb24gYSBwYXJ0aXRpb25l ZC10YWJsZSBwYXJlbnQ6IGVhY2ggY2hpbGQncyBmdWxsIERETAorLS0gaXMgZW1pdHRlZCAoQ1JF QVRFIFRBQkxFIC4uLiBQQVJUSVRJT04gT0YgLi4uKS4gIFRoZSAicGFydGl0aW9uIgorLS0ga2V5 d29yZCBpcyBhIGdhdGUgYXQgdGhlIHBhcmVudCBsZXZlbDsgaXQgaXMgc3RyaXBwZWQgZnJvbSB0 aGUKKy0tIHByb3BhZ2F0ZWQgZmlsdGVyIHNvIHRoZSBjaGlsZCBkb2VzIG5vdCBleGNsdWRlIGl0 cyBvd24KKy0tIENSRUFURSBUQUJMRS4KK0NSRUFURSBUQUJMRSBwX29ubHkgKGlkIGludCwgdmFs IHRleHQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBfb25seV9hIFBB UlRJVElPTiBPRiBwX29ubHkgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK0NSRUFURSBU QUJMRSBwX29ubHlfYiBQQVJUSVRJT04gT0YgcF9vbmx5IEZPUiBWQUxVRVMgRlJPTSAoMTAwKSBU TyAoMjAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncF9vbmx5Jzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydwYXJ0aXRpb24nXSk7CitE Uk9QIFRBQkxFIHBfb25seTsKKworLS0gb25seV9raW5kcyBhbmQgZXhjZXB0X2tpbmRzIGFyZSBt dXR1YWxseSBleGNsdXNpdmUuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMn OjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgb25seV9raW5kcyA9PiBBUlJBWVsnZm9yZWlnbl9rZXknXSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ2ZvcmVpZ25fa2V5J10pOworCist LSBQdWIvc3ViIHNjaGVtYSBjbG9uZToga2VlcCB0aGUgdGFibGUgYW5kIGl0cyBwcmltYXJ5IGtl eSwgZHJvcCB0aGUKKy0tIHJlc3Qgb2YgdGhlIGNvbnN0cmFpbnRzIHNvIHRoZSBzdWJzY3JpYmVy IGNhbiByZXBsaWNhdGUgd2l0aG91dAorLS0gcHVsbGluZyBjcm9zcy10YWJsZSBkZXBlbmRlbmNp ZXMgYWxvbmcuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFz cywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsndW5pcXVlJywnY2hlY2sn LCdmb3JlaWduX2tleScsJ2V4Y2x1c2lvbiddKTsKKworLS0gZXhjZXB0X2tpbmRzPXJ1bGUgaGlk ZXMgdGhlIENSRUFURSBSVUxFLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdydCc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydydWxlJ10p OworCistLSBleGNlcHRfa2luZHM9c3RhdGlzdGljcyBoaWRlcyB0aGUgQ1JFQVRFIFNUQVRJU1RJ Q1MuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0eCc6OnJlZ2NsYXNzLCBvd25l ciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydzdGF0aXN0aWNzJ10pOworCistLSBl eGNlcHRfa2luZHM9cmxzIGhpZGVzIHRoZSBFTkFCTEUvRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZ IHRvZ2dsZXMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Jscyc6OnJlZ2NsYXNz LCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydybHMnXSk7CisKKy0tIGV4 Y2VwdF9raW5kcz1yZXBsaWNhX2lkZW50aXR5IGhpZGVzIHRoZSBSRVBMSUNBIElERU5USVRZIGNs YXVzZS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfZnVsbCc6OnJlZ2NsYXNz LCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydyZXBsaWNhX2lkZW50aXR5 J10pOworCistLSBQYXJ0aXRpb24gY2hpbGRyZW4gYXJlIGVtaXR0ZWQgYnkgZGVmYXVsdDsgZXhj ZXB0X2tpbmRzPXBhcnRpdGlvbgorLS0gc3VwcHJlc3NlcyB0aGVtIHNvIG9ubHkgdGhlIHBhcnRp dGlvbmVkLXRhYmxlIHBhcmVudCBjb21lcyBvdXQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ3BhcnRlZF9yYW5nZSc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tp bmRzID0+IEFSUkFZWydwYXJ0aXRpb24nXSk7CisKKy0tIFdoaXRlc3BhY2UgYXJvdW5kIGtpbmQg bmFtZXMgaXMgYWxsb3dlZDsgY2FzZSBpcyBmb2xkZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9 PiBBUlJBWVsnICBJTkRFWCAgJywnICBSVUxFICAnXSk7CisKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9 ZmFsc2Ugc3RyaXBzIHRoZSBzY2hlbWEgZnJvbSB0aGUgdGFyZ2V0IHRhYmxlIGl0c2VsZgorLS0g YW5kIGZyb20gc2FtZS1zY2hlbWEgc2libGluZyByZWZlcmVuY2VzIChpbmhlcml0YW5jZS9wYXJ0 aXRpb24KKy0tIHBhcmVudHMsIGlkZW50aXR5IHNlcXVlbmNlcyBpbiB0aGUgc2FtZSBzY2hlbWEp LCB3aGlsZSBjcm9zcy1zY2hlbWEKKy0tIHJlZmVyZW5jZXMgYXJlIGtlcHQgcXVhbGlmaWVkIGZv ciBjb3JyZWN0bmVzcy4KKy0tCistLSBCYXJlIENSRUFURSBUQUJMRSBmb3IgYW4gb3JkaW5hcnkg dGFibGUuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9x dWFsaWZpZWQgPT4gZmFsc2UpOworCistLSBJTkhFUklUUyBwYXJlbnQgaW4gdGhlIHNhbWUgc2No ZW1hIGlzIGVtaXR0ZWQgdW5xdWFsaWZpZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ2NoJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOworCistLSBQYXJ0aXRpb24gcGFy ZW50IGluIHRoZSBzYW1lIHNjaGVtYSBpcyBlbWl0dGVkIHVucXVhbGlmaWVkLgorU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2VfMSc6OnJlZ2NsYXNzLCBvd25lciA9 PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVk ID0+IGZhbHNlKTsKKworLS0gQ3Jvc3Mtc2NoZW1hIEZLIHRhcmdldCBrZWVwcyBxdWFsaWZpY2F0 aW9uLiAgVGhlICdyZWZkJyB0YWJsZSBpcyBpbgorLS0gcGd0YmxfZGRsX3Rlc3Q7IHBsYWNlIGFu IEZLIHRhcmdldCBpbiBhIGRpZmZlcmVudCBzY2hlbWEgYW5kIHZlcmlmeSBpdAorLS0gc3RheXMg cXVhbGlmaWVkIGV2ZW4gd2l0aCBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlLgorQ1JFQVRFIFNDSEVN QSBwZ3RibF9kZGxfb3RoZXI7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX290aGVyLnBhcmVudCAo aWQgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSB4c2NoZW1hX2ZrICgKKyAgICBpZCAg aW50IFBSSU1BUlkgS0VZLAorICAgIHBpZCBpbnQgUkVGRVJFTkNFUyBwZ3RibF9kZGxfb3RoZXIu cGFyZW50CispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd4c2NoZW1hX2ZrJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOworCistLSBDcm9zcy1zY2hlbWEgRksgd2hvc2Ug dGFyZ2V0IHNjaGVtYSBuYW1lIGVuZHMgd2l0aCB0aGUgYmFzZSBzY2hlbWEgbmFtZQorLS0gKGUu Zy4gInhwZ3RibF9kZGxfdGVzdCIgZW5kcyB3aXRoICJwZ3RibF9kZGxfdGVzdCIpLiAgQSBwb3N0 LWhvYyB0ZXh0CistLSBzdHJpcCB3b3VsZCBtYW5nbGUgInhwZ3RibF9kZGxfdGVzdC5yZWZ0Ymwi IGludG8gInhyZWZ0YmwiOyBkZWNpZGluZworLS0gcXVhbGlmaWNhdGlvbiBhdCBnZW5lcmF0aW9u IHRpbWUgYXZvaWRzIHRoZSBwcm9ibGVtIGVudGlyZWx5LgorQ1JFQVRFIFNDSEVNQSB4cGd0Ymxf ZGRsX3Rlc3Q7CitDUkVBVEUgVEFCTEUgeHBndGJsX2RkbF90ZXN0LnJlZnRibCAoaWQgaW50IFBS SU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBzdWZmaXhfc2NoZW1hX2ZrICgKKyAgICBpZCAgaW50 IFBSSU1BUlkgS0VZLAorICAgIHJlZiBpbnQgUkVGRVJFTkNFUyB4cGd0YmxfZGRsX3Rlc3QucmVm dGJsCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdzdWZmaXhfc2NoZW1hX2Zr Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOworRFJPUCBUQUJMRSBzdWZmaXhfc2NoZW1h X2ZrOworRFJPUCBTQ0hFTUEgeHBndGJsX2RkbF90ZXN0IENBU0NBREU7CisKKy0tIElkZW50aXR5 IGNvbHVtbiB3aXRoIGEgY3VzdG9tIHNlcXVlbmNlIG5hbWUgaW4gdGhlIHNhbWUgc2NoZW1hIGlz CistLSBlbWl0dGVkIHVucXVhbGlmaWVkLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdpZF9jdXN0b20nOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CisKKy0tIFJvdW5kLXRy aXA6IHdpdGggc2NoZW1hX3F1YWxpZmllZD1mYWxzZSwgYWZ0ZXIgU0VUIHNlYXJjaF9wYXRoIHRo ZQorLS0gRERMIGNhbiBiZSByZXBsYXllZCBpbnRvIGEgZGlmZmVyZW50IHRhcmdldCBzY2hlbWEu CitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF9yZXBsYXk7CitETyAkJAorREVDTEFSRQorICAgIHN0 bXQgdGV4dDsKK0JFR0lOCisgICAgU0VUIExPQ0FMIHNlYXJjaF9wYXRoID0gcGd0YmxfZGRsX3Jl cGxheTsKKyAgICBGT1Igc3RtdCBJTgorICAgICAgICBTRUxFQ1QgbGluZSBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ3BndGJsX2RkbF90ZXN0LmJhc2ljJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFsc2Up IEFTIGxpbmUKKyAgICBMT09QCisgICAgICAgIEVYRUNVVEUgc3RtdDsKKyAgICBFTkQgTE9PUDsK K0VORCAkJDsKK1NFTEVDVCByZWxuYW1lc3BhY2U6OnJlZ25hbWVzcGFjZTo6dGV4dCwgcmVsbmFt ZQorRlJPTSBwZ19jbGFzcyBXSEVSRSBvaWQgPSAncGd0YmxfZGRsX3JlcGxheS5iYXNpYyc6OnJl Z2NsYXNzOworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3JlcGxheSBDQVNDQURFOworRFJPUCBUQUJM RSB4c2NoZW1hX2ZrOworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX290aGVyIENBU0NBREU7CisKKy0t IENyb3NzLXNjaGVtYSBwYXJ0aXRpb24gY2hpbGQgd2l0aCBzY2hlbWFfcXVhbGlmaWVkPWZhbHNl OiB0aGUgY2hpbGQgbXVzdAorLS0gY2FycnkgaXRzIG93biBzY2hlbWEgcHJlZml4IHNvIHRoZSBv dXRwdXQgaXMgdW5hbWJpZ3VvdXMgcmVnYXJkbGVzcyBvZiB0aGUKKy0tIGNhbGxlcidzIHNlYXJj aF9wYXRoLiAgQmVmb3JlIHRoZSBmaXgsIHRoZSBjaGlsZCB3YXMgZW1pdHRlZCBhcyB0aGUgYmFy ZQorLS0gbmFtZSAicHRfYyIgKGxhbmRpbmcgaW4gd2hpY2hldmVyIHNjaGVtYSBpcyBmaXJzdCBp biBzZWFyY2hfcGF0aCkgd2hpbGUKKy0tIHRoZSBwYXJlbnQgcmVmZXJlbmNlIGluc2lkZSB0aGUg Q1JFQVRFIFRBQkxFIGNhbWUgb3V0IGFzIHRoZSBmdWxseS1xdWFsaWZpZWQKKy0tICJwZ3RibF9k ZGxfcGFydF9zLnB0IiwgbWFraW5nIHRoZSBEREwgaW5jb25zaXN0ZW50IGFuZCB1bnJlcGxheWFi bGUuCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF9wYXJ0X3M7CitDUkVBVEUgU0NIRU1BIHBndGJs X2RkbF9wYXJ0X290aGVyOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9wYXJ0X3MucHQgKGlkIGlu dCwgdmFsIGludCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcGd0Ymxf ZGRsX3BhcnRfb3RoZXIucHRfYworICAgIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfcGFydF9zLnB0 CisgICAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgncGd0YmxfZGRsX3BhcnRfcy5wdCc6OnJlZ2NsYXNzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOworRFJPUCBTQ0hFTUEgcGd0Ymxf ZGRsX3BhcnRfcyBDQVNDQURFOworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3BhcnRfb3RoZXIgQ0FT Q0FERTsKKworLS0gTG9jYWxseS1kZWNsYXJlZCBDSEVDSyBvbiBhIHBhcnRpdGlvbiBjaGlsZCBo YXMgbm8gaW5saW5lIGNvbHVtbgorLS0gbGlzdCB0byBsaXZlIGluIChQQVJUSVRJT04gT0YgZm9y bSksIHNvIGl0IG11c3QgY29tZSBvdXQgYXMgYQorLS0gc2VwYXJhdGUgQUxURVIgVEFCTEUgLi4u IEFERCBDT05TVFJBSU5UIHN0YXRlbWVudC4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfY2hrIChpZCBp bnQsIHZhbCBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBhcnRl ZF9jaGtfY2hpbGQgUEFSVElUSU9OIE9GIHBhcnRlZF9jaGsKKyAgICAoQ09OU1RSQUlOVCBjaGtf aW5saW5lIENIRUNLICh2YWwgPiAwKSkKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDAp OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfY2hrX2NoaWxkJzo6cmVn Y2xhc3MsIG93bmVyID0+IGZhbHNlKTsKK0RST1AgVEFCTEUgcGFydGVkX2NoazsKKworLS0gSW5o ZXJpdGFuY2UgY2hpbGRyZW4gb2YgYSBwYXJlbnQgd2l0aCBhIGdlbmVyYXRlZCBjb2x1bW4gc2hv dWxkIG5vdAorLS0gZW1pdCBhbiBBTFRFUiBDT0xVTU4gLi4uIFNFVCBERUZBVUxUIGZvciB0aGUg aW5oZXJpdGVkIGdlbmVyYXRlZAorLS0gY29sdW1uOiB0aGUgR0VORVJBVEVEIGV4cHJlc3Npb24g Y2FycmllcyBkb3duIHRocm91Z2ggaW5oZXJpdGFuY2UsCistLSBhbmQgU0VUIERFRkFVTFQgd291 bGQgZmFpbCBhdCByZXBsYXkgYWdhaW5zdCBhIGdlbmVyYXRlZCBjb2x1bW4uCitDUkVBVEUgVEFC TEUgcGFyX2dlbiAoCisgICAgaWQgaW50LAorICAgIGcgIGludCBHRU5FUkFURUQgQUxXQVlTIEFT IChpZCAqIDIpIFNUT1JFRAorKTsKK0NSRUFURSBUQUJMRSBjaF9nZW4gKCkgSU5IRVJJVFMgKHBh cl9nZW4pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaF9nZW4nOjpyZWdjbGFz cywgb3duZXIgPT4gZmFsc2UpOworRFJPUCBUQUJMRSBwYXJfZ2VuIENBU0NBREU7CisKKy0tIEEg dXNlci1uYW1lZCBOT1QgTlVMTCBvbiBhIGxvY2FsIGNvbHVtbiBpcyBlbWl0dGVkIGlubGluZSBh cworLS0gIkNPTlNUUkFJTlQgbmFtZSBOT1QgTlVMTCIgc28gdGhlIG9yaWdpbmFsIG5hbWUgaXMg cHJlc2VydmVkLiAgQW4KKy0tIGF1dG8tbmFtZWQgTk9UIE5VTEwgb24gYSBsb2NhbCBjb2x1bW4g aXMgZW1pdHRlZCBhcyBhIHBsYWluIGlubGluZQorLS0gIk5PVCBOVUxMIiAtIFBHIHJlLWNyZWF0 ZXMgdGhlIGF1dG8tbmFtZWQgY29uc3RyYWludCB3aGVuIENSRUFURQorLS0gVEFCTEUgcnVucywg c28gdGhlIGNvbnN0cmFpbnQgbG9vcCBza2lwcyBib3RoIGZvcm1zIHRvIGF2b2lkIHRoZQorLS0g cmVkdW5kYW50IChhbmQgb24gdGFibGUtcmVuYW1lIG9yIHNlcXVlbmNlLWNvbGxpc2lvbiwgYnJv a2VuKQorLS0gQUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5UIC4uLiBOT1QgTlVMTCBzdGF0 ZW1lbnQuCitDUkVBVEUgVEFCTEUgbm5fbmFtZWQgKAorICAgIGEgaW50IENPTlNUUkFJTlQgbXlf bm4gTk9UIE5VTEwsCisgICAgYiBpbnQgTk9UIE5VTEwKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ25uX25hbWVkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKK0RST1Ag VEFCTEUgbm5fbmFtZWQ7CisKKy0tIFJlbmFtaW5nIHRoZSB0YWJsZSBhZnRlciBhbiBJREVOVElU WSBOT1QgTlVMTCBjb2x1bW4gd2FzIGRlY2xhcmVkCistLSBsZWF2ZXMgdGhlIGF1dG8tbmFtZWQg Y29uc3RyYWludCBmcm96ZW4gYXQgdGhlIG9yaWdpbmFsIG5hbWUsIHdoaWNoCistLSBubyBsb25n ZXIgbWF0Y2hlcyB0aGUgcG9zdC1yZW5hbWUgIjx0YWJsZT5fPGNvbD5fbm90X251bGwiIHBhdHRl cm4uCistLSBUaGUgZW1pdHRlZCBEREwgbXVzdCBzdGlsbCByb3VuZC10cmlwOiB0aGUgY29uc3Ry YWludCBsb29wIG11c3Qgbm90CistLSBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgYSBz ZWNvbmQgTk9UIE5VTEwsIHNpbmNlIENSRUFURSBUQUJMRQorLS0gd2l0aCB0aGUgaW5saW5lIElE RU5USVRZIGFscmVhZHkgY3JlYXRlcyBhbiBhdXRvLU5PVC1OVUxMIHVuZGVyIHRoZQorLS0gbmV3 IHRhYmxlIG5hbWUgYW5kIFBHIG9ubHkgcGVybWl0cyBvbmUgTk9UIE5VTEwgcGVyIGNvbHVtbi4K K0NSRUFURSBUQUJMRSBubl9yZW5hbWVkICgKKyAgICBhIGludCBHRU5FUkFURUQgQUxXQVlTIEFT IElERU5USVRZIE5PVCBOVUxMCispOworQUxURVIgVEFCTEUgbm5fcmVuYW1lZCBSRU5BTUUgVE8g bm5fcmVuYW1lZDI7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ25uX3JlbmFtZWQy Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKK0RST1AgVEFCTEUgbm5fcmVuYW1lZDI7CisK Ky0tIExvY2FsbHktZGVjbGFyZWQgTk9UIE5VTEwgb24gYW4gaW5oZXJpdGVkIGNvbHVtbi4gIFRo ZSBjb2x1bW4gaXRzZWxmCistLSBpcyBvbWl0dGVkIGZyb20gdGhlIGNoaWxkJ3MgY29sdW1uIGxp c3QgKGF0dGlzbG9jYWw9ZmFsc2UpLCBzbyB0aGUKKy0tIHVzZXItbmFtZWQgTk9UIE5VTEwgbXVz dCBjb21lIG91dCB2aWEgdGhlIHBvc3QtQ1JFQVRFIGNvbnN0cmFpbnQKKy0tIGxvb3AgcmF0aGVy IHRoYW4gaW5saW5lLgorQ1JFQVRFIFRBQkxFIG5uX3BhciAoYSBpbnQpOworQ1JFQVRFIFRBQkxF IG5uX2NoIChiIGludCkgSU5IRVJJVFMgKG5uX3Bhcik7CitBTFRFUiBUQUJMRSBubl9jaCBBREQg Q09OU1RSQUlOVCBteV9ubiBOT1QgTlVMTCBhOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdubl9jaCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CitEUk9QIFRBQkxFIG5uX3Bh ciBDQVNDQURFOworCistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIG11c3QgZHJvcCB0aGUgc2No ZW1hIHByZWZpeCBmcm9tIERFRkFVTFQKKy0tIGV4cHJlc3Npb25zIGFuZCBpbmxpbmUgQ0hFQ0sg Ym9kaWVzIHRoYXQgcmVmZXJlbmNlIHNhbWUtc2NoZW1hCistLSBvYmplY3RzIChzZXF1ZW5jZSB2 aWEgbmV4dHZhbCwgZnVuY3Rpb24gdmlhIGRpcmVjdCBjYWxsKS4gIFRoaXMKKy0tIHJlbGllcyBv biB0aGUgZGVwYXJzZXIgcmVzcGVjdGluZyB0aGUgbmFycm93ZWQgc2VhcmNoX3BhdGggcmF0aGVy CistLSB0aGFuIG9uIHN1YnN0cmluZyBzdHJpcHBpbmcuCitDUkVBVEUgU0NIRU1BIHBndGJsX2Rk bF94cmVmOworQ1JFQVRFIFNFUVVFTkNFIHBndGJsX2RkbF94cmVmLm15c2VxOworQ1JFQVRFIEZV TkNUSU9OIHBndGJsX2RkbF94cmVmLmYoaW50KSBSRVRVUk5TIGludCBMQU5HVUFHRSBzcWwgSU1N VVRBQkxFCisgICAgQVMgJ1NFTEVDVCAkMSc7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3hyZWYu dCAoCisgICAgaWQgIGludCBERUZBVUxUIG5leHR2YWwoJ3BndGJsX2RkbF94cmVmLm15c2VxJyks CisgICAgdmFsIGludCwKKyAgICBDT05TVFJBSU5UIGNoayBDSEVDSyAocGd0YmxfZGRsX3hyZWYu Zih2YWwpID4gMCkKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2Rk bF94cmVmLnQnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25l ciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlm aWVkID0+IGZhbHNlKTsKK0RST1AgU0NIRU1BIHBndGJsX2RkbF94cmVmIENBU0NBREU7CisKKy0t IHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UgbXVzdCBOT1QgY29ycnVwdCBzdHJpbmcgbGl0ZXJhbHMg d2hvc2UKKy0tIGNvbnRlbnRzIGhhcHBlbiB0byBjb250YWluIHRoZSBzY2hlbWEgbmFtZSBmb2xs b3dlZCBieSBhIGRvdC4gIFN0cmluZworLS0gbGl0ZXJhbCB0ZXh0IGlzIG91dHB1dCB2ZXJiYXRp bSBieSB0aGUgZGVwYXJzZXIgYW5kIGlzIHVuYWZmZWN0ZWQgYnkKKy0tIHNlYXJjaF9wYXRoIG5h cnJvd2luZy4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3N0cjsKK0NSRUFURSBUQUJMRSBwZ3Ri bF9kZGxfc3RyLnAgKGlkIGludCwgbm90ZSB0ZXh0KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsK K0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfc3RyLnBjIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfc3Ry LnAKKyAgICAoQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKG5vdGUgPD4gJ3BndGJsX2RkbF9zdHIuc2Vj cmV0JykpCisgICAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgncGd0YmxfZGRsX3N0ci5wYyc6OnJlZ2NsYXNzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOworRFJPUCBTQ0hFTUEgcGd0 YmxfZGRsX3N0ciBDQVNDQURFOworCistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIG11c3QgTk9U IGNvcnJ1cHQgZG91YmxlLXF1b3RlZCBpZGVudGlmaWVycworLS0gd2hvc2UgY29udGVudHMgaGFw cGVuIHRvIGNvbnRhaW4gdGhlIHNjaGVtYSBuYW1lIGZvbGxvd2VkIGJ5IGEgZG90CistLSAoZm9y IGV4YW1wbGUgYSBjb2x1bW4gbGl0ZXJhbGx5IG5hbWVkICI8c2NoZW1hPi53ZWlyZCIgaW5zaWRl IHRoYXQKKy0tIHNjaGVtYSkuICBUaGUgbWVjaGFuaXNtIGlzIHB1cmVseSBzZWFyY2hfcGF0aCBu YXJyb3dpbmc6IHRoZSBkZXBhcnNlcgorLS0gb3V0cHV0cyBhdHRyaWJ1dGUgbmFtZXMgdmVyYmF0 aW0gZnJvbSBwZ19hdHRyaWJ1dGUsIHNvIHRoZSBxdW90ZWQKKy0tIGlkZW50aWZpZXIgY29udGVu dCBpcyBuZXZlciBleGFtaW5lZCBmb3Igc2NoZW1hIHByZWZpeGVzLiAgVGhpcyBob2xkcworLS0g ZXZlbiB3aGVuIHRoZSBzY2hlbWEgbmFtZSBpcyBhIHNpbmdsZSBsZXR0ZXIuCitDUkVBVEUgU0NI RU1BIHBndGJsX2RkbF9xaWQ7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3FpZC5wIChpZCBpbnQs ICJwZ3RibF9kZGxfcWlkLndlaXJkIiBpbnQpCisgICAgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7 CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3FpZC5wYyBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Fp ZC5wCisgICAgKENPTlNUUkFJTlQgY2hrIENIRUNLICgicGd0YmxfZGRsX3FpZC53ZWlyZCIgPiAw KSkKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfcWlkLnBjJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CitEUk9QIFNDSEVNQSBwZ3RibF9k ZGxfcWlkIENBU0NBREU7CistLSBTYW1lIHdpdGggYSBzaG9ydCAoc2luZ2xlLWxldHRlcikgc2No ZW1hIG5hbWUgdG8gY29uZmlybSB0aGVyZSBpcyBubworLS0gbWluaW11bS1sZW5ndGggYXNzdW1w dGlvbiBpbiB0aGUgc3RyaXBwaW5nIHBhdGguCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF9xMTsK K0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfcTEucCAoaWQgaW50LCAicGd0YmxfZGRsX3ExLndlaXJk IiBpbnQpCisgICAgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcGd0Ymxf ZGRsX3ExLnBjIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfcTEucAorICAgIChDT05TVFJBSU5UIGNo ayBDSEVDSyAoInBndGJsX2RkbF9xMS53ZWlyZCIgPiAwKSkKKyAgICBGT1IgVkFMVUVTIEZST00g KDApIFRPICgxMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxf cTEucGMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9 PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVk ID0+IGZhbHNlKTsKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9xMSBDQVNDQURFOworCistLSBzY2hl bWFfcXVhbGlmaWVkPWZhbHNlIHdoZW4gdGhlIGJhc2Ugc2NoZW1hIG5hbWUgaXRzZWxmIHJlcXVp cmVzCistLSBxdW90aW5nIChpdHMgcHJlZml4IHN0YXJ0cyB3aXRoICIpLiAgQm90aCBmb3JtcyBv ZiB0aGUgcHJlZml4IC0KKy0tIGJhcmUtbG93ZXJjYXNlIGFuZCBxdW90ZWQgLSBtdXN0IGJlIHN0 cmlwcGVkIGZyb20gb3V0ZXIKKy0tIEFMVEVSIFRBQkxFIC8gT04gLyBDUkVBVEUgSU5ERVggcHJl Zml4ZXMsIHdoaWxlIGlubmVyIHF1b3RlZAorLS0gaWRlbnRpZmllcnMgdGhhdCBoYXBwZW4gdG8g YmVnaW4gdGhlIHNhbWUgd2F5IG11c3QgYmUgcHJlc2VydmVkLgorQ1JFQVRFIFNDSEVNQSAiUGdU YmwtRGRsLVEiOworQ1JFQVRFIFRBQkxFICJQZ1RibC1EZGwtUSIuIlQiIChpZCBpbnQsIHZhbCBp bnQsCisgICAgQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKHZhbCA+IDApKTsKK0NSRUFURSBJTkRFWCAi VF92YWxfaWR4IiBPTiAiUGdUYmwtRGRsLVEiLiJUIiAodmFsKTsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnIlBnVGJsLURkbC1RIi4iVCInOjpyZWdjbGFzcywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNlKTsKK0RST1AgU0NIRU1BICJQZ1Ri bC1EZGwtUSIgQ0FTQ0FERTsKKworLS0gRXJyb3I6IG5vdCBhbiBvcmRpbmFyeSBvciBwYXJ0aXRp b25lZCB0YWJsZS4KK0NSRUFURSBWSUVXIHYgQVMgU0VMRUNUIDEgQVMgeDsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgndic6OnJlZ2NsYXNzKTsKKworQ1JFQVRFIFNFUVVFTkNFIHM7 CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3MnOjpyZWdjbGFzcyk7CisKKy0tIE5V TEwgYXJndW1lbnQgcmV0dXJucyBubyByb3dzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKE5VTEwpOworCistLSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHZhbGlkYXRpb246 IGlmIHRoZSByZWZlcmVuY2VkIGluZGV4CistLSB3b3VsZCBub3QgYmUgZW1pdHRlZCAoYmVjYXVz ZSBpdHMgc291cmNlIGtpbmQgaXMgc3VwcHJlc3NlZCkgYnV0CistLSByZXBsaWNhX2lkZW50aXR5 IGl0c2VsZiB3b3VsZCBiZSwgdGhlIGZ1bmN0aW9uIHJhaXNlcyBhbiBlcnJvciBzbworLS0gdGhl IGVtaXR0ZWQgRERMIG5ldmVyIGRhbmdsZXMuICBFeGVyY2lzZSBhbGwgdGhyZWUgY29uc3RyYWlu dC1iYWNrZWQKKy0tIGZvcm1zIChQSywgVU5JUVVFLCBFWENMVVNJT04pIGFuZCBhIGJhcmUgQ1JF QVRFIFVOSVFVRSBJTkRFWCwgaW4KKy0tIGJvdGggdGhlIGV4Y2VwdC1saXN0IGFuZCBvbmx5LWxp c3Qgc2hhcGVzLgorLS0KKy0tIFBLLWJhY2tlZDogZXhjZXB0X2tpbmRzPXByaW1hcnlfa2V5IHdp dGhvdXQgZXhjZXB0X2tpbmRzPXJlcGxpY2FfaWRlbnRpdHkuCitDUkVBVEUgVEFCTEUgcmlfcGtf ZXhjbCAoYSBpbnQgUFJJTUFSWSBLRVkpOworQUxURVIgVEFCTEUgcmlfcGtfZXhjbCBSRVBMSUNB IElERU5USVRZIFVTSU5HIElOREVYIHJpX3BrX2V4Y2xfcGtleTsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgncmlfcGtfZXhjbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhj ZXB0X2tpbmRzID0+IEFSUkFZWydwcmltYXJ5X2tleSddKTsKKy0tIFNhbWUgY2FsbCBidXQgYWxz byBleGNsdWRpbmcgcmVwbGljYV9pZGVudGl0eSBzdWNjZWVkcy4KK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgncmlfcGtfZXhjbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhj ZXB0X2tpbmRzID0+IEFSUkFZWydwcmltYXJ5X2tleScsJ3JlcGxpY2FfaWRlbnRpdHknXSk7CitE Uk9QIFRBQkxFIHJpX3BrX2V4Y2w7CisKKy0tIFVOSVFVRS1jb25zdHJhaW50LWJhY2tlZCByZXBs aWNhIGlkZW50aXR5IGluZGV4LgorQ1JFQVRFIFRBQkxFIHJpX3VuaXFfZXhjbCAoYSBpbnQgTk9U IE5VTEwgVU5JUVVFLCBiIGludCk7CitBTFRFUiBUQUJMRSByaV91bmlxX2V4Y2wgUkVQTElDQSBJ REVOVElUWSBVU0lORyBJTkRFWCByaV91bmlxX2V4Y2xfYV9rZXk7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ3JpX3VuaXFfZXhjbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwg ZXhjZXB0X2tpbmRzID0+IEFSUkFZWyd1bmlxdWUnXSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ3JpX3VuaXFfZXhjbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0 X2tpbmRzID0+IEFSUkFZWyd1bmlxdWUnLCdyZXBsaWNhX2lkZW50aXR5J10pOworRFJPUCBUQUJM RSByaV91bmlxX2V4Y2w7CisKKy0tIEJhcmUgQ1JFQVRFIFVOSVFVRSBJTkRFWCAobm8gYmFja2lu ZyBjb25zdHJhaW50KSB1c2VkIGFzIFJFUExJQ0EKKy0tIElERU5USVRZOiB0aGUgaW5kZXggaXMg ZW1pdHRlZCBieSB0aGUgImluZGV4IiBraW5kLCBzbyBleGNsdWRpbmcKKy0tICJpbmRleCIgd2l0 aG91dCBhbHNvIGV4Y2x1ZGluZyAicmVwbGljYV9pZGVudGl0eSIgbXVzdCBlcnJvci4KK0NSRUFU RSBUQUJMRSByaV9pZHhfZXhjbCAoYSBpbnQgTk9UIE5VTEwsIGIgaW50KTsKK0NSRUFURSBVTklR VUUgSU5ERVggcmlfaWR4X2V4Y2xfYV91bmlxIE9OIHJpX2lkeF9leGNsIChhKTsKK0FMVEVSIFRB QkxFIHJpX2lkeF9leGNsIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmlfaWR4X2V4Y2xf YV91bmlxOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9pZHhfZXhjbCc6OnJl Z2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydpbmRleCddKTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfaWR4X2V4Y2wnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnaW5kZXgnLCdyZXBsaWNhX2lk ZW50aXR5J10pOworRFJPUCBUQUJMRSByaV9pZHhfZXhjbDsKKworLS0gSW5jbHVkZS1zaWRlIGFu YWxvZzogb25seV9raW5kcz1yZXBsaWNhX2lkZW50aXR5IG11c3QgaW5jbHVkZSB0aGUga2luZAor LS0gdGhhdCBlbWl0cyB0aGUgaW5kZXgsIG9yIHRoZSBmdW5jdGlvbiBlcnJvcnMuCitDUkVBVEUg VEFCTEUgcmlfb25seSAoYSBpbnQgTk9UIE5VTEwgVU5JUVVFLCBiIGludCk7CitBTFRFUiBUQUJM RSByaV9vbmx5IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmlfb25seV9hX2tleTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfb25seSc6OnJlZ2NsYXNzLCBvd25lciA9 PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsncmVwbGljYV9pZGVudGl0eSddKTsKKy0tIElu Y2x1ZGluZyBib3RoIGtpbmRzIHN1Y2NlZWRzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdyaV9vbmx5Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFS UkFZWyd1bmlxdWUnLCdyZXBsaWNhX2lkZW50aXR5J10pOworRFJPUCBUQUJMRSByaV9vbmx5Owor CistLSBQZXIta2luZCBvbmx5X2tpbmRzIC8gZXhjZXB0X2tpbmRzIGNvdmVyYWdlLiAgRm9yIGVh Y2gga2luZCBpbiB0aGUgdm9jYWJ1bGFyeSwKKy0tIHZlcmlmeSB0aGF0IG9ubHlfa2luZHM9SyBl bWl0cyBqdXN0IHRoYXQga2luZCdzIG91dHB1dCBhbmQgdGhhdCBleGNlcHRfa2luZHM9SworLS0g b21pdHMganVzdCB0aGF0IGtpbmQncyBvdXRwdXQuICBLaW5kcyB3aXRoIG5vIGZpeHR1cmUgYWJv dmUgKHRyaWdnZXIsCistLSBwb2xpY3kpIGFyZSBzdGlsbCByZWNvZ25pemVkIGJ1dCBjdXJyZW50 bHkgZW1pdCBub3RoaW5nOyBvbmx5X2tpbmRzPUsKKy0tIHJldHVybnMgemVybyByb3dzIGZvciB0 aGVtLiAgRml4dHVyZXMgdXNlZDoKKy0tICAgaWR4ZDogUEsgKyB0d28gc2Vjb25kYXJ5IENSRUFU RSBJTkRFWAorLS0gICBjb25zOiBQSyArIFVOSVFVRSArIENIRUNLICsgRksgKGNvbnN0cmFpbnQt YmFja2VkKQorLS0gICBydDogICBDUkVBVEUgUlVMRQorLS0gICBzdHg6ICBDUkVBVEUgU1RBVElT VElDUworLS0gICBybHM6ICBFTkFCTEUvRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZCistLSAgIHJp X2Z1bGw6IFJFUExJQ0EgSURFTlRJVFkgRlVMTCAobm8gc291cmNlLWtpbmQgZGVwZW5kZW5jeSkK K0NSRUFURSBUQUJMRSBleGNsX2ZpeCAocm5nIGludDRyYW5nZSwKKyAgICBFWENMVURFIFVTSU5H IGdpc3QgKHJuZyBXSVRIICYmKSk7CisKKy0tIG9ubHlfa2luZHM9SzogZW1pdCBvbmx5IGtpbmQg SydzIHN0YXRlbWVudHMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ2luZGV4J10pOwor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsIG93bmVyID0+ IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydwcmltYXJ5X2tleSddKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25s eV9raW5kcyA9PiBBUlJBWVsndW5pcXVlJ10pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdleGNsX2ZpeCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBB UlJBWVsnZXhjbHVzaW9uJ10pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdydCc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsncnVsZSddKTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3R4Jzo6cmVnY2xhc3MsIG93bmVyID0+ IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydzdGF0aXN0aWNzJ10pOworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdybHMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlf a2luZHMgPT4gQVJSQVlbJ3JscyddKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn cmlfZnVsbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsn cmVwbGljYV9pZGVudGl0eSddKTsKKy0tIHRyaWdnZXIgLyBwb2xpY3kgYXJlIG5vdCB5ZXQgaW1w bGVtZW50ZWQ7IHVuY29tbWVudCB3aGVuCistLSBwZ19nZXRfdHJpZ2dlcl9kZGwgLyBwZ19nZXRf cG9saWN5X2RkbCBoZWxwZXJzIGxhbmQuCistLSBTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZ Wyd0cmlnZ2VyJ10pOworLS0gU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsncG9saWN5J10p OworCistLSBleGNlcHRfa2luZHM9SzogZW1pdCBldmVyeXRoaW5nIGV4Y2VwdCBraW5kIEsncyBz dGF0ZW1lbnRzLiAgUEsvVU5JUVVFLworLS0gSU5ERVggYXJlIGV4ZXJjaXNlZCBvbiB0YWJsZXMg d2l0aG91dCBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYCistLSBzbyB0aGUgdmFsaWRhdGlv biBkb2VzIG5vdCB0cmlwLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3ByaW1hcnlf a2V5J10pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3VuaXF1ZSddKTsKK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxz ZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydjaGVjayddKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnZXhjbF9maXgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9r aW5kcyA9PiBBUlJBWVsnZXhjbHVzaW9uJ10pOworLS0gdHJpZ2dlciAvIHBvbGljeSBhcmUgbm90 IHlldCBpbXBsZW1lbnRlZDsgdW5jb21tZW50IHdoZW4KKy0tIHBnX2dldF90cmlnZ2VyX2RkbCAv IHBnX2dldF9wb2xpY3lfZGRsIGhlbHBlcnMgbGFuZC4KKy0tIFNFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5k cyA9PiBBUlJBWVsndHJpZ2dlciddKTsKKy0tIFNFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJB WVsncG9saWN5J10pOworLS0gZXhjZXB0X2tpbmRzPXRhYmxlIHN1cHByZXNzZXMgdGhlIENSRUFU RSBUQUJMRSArIE9XTkVSICsgY2hpbGQtZGVmYXVsdAorLS0gU0VUIERFRkFVTFQgKyBhdHRvcHRp b25zIHBhc3NlcywgbGVhdmluZyBvbmx5IHRoZSBzdWItb2JqZWN0IHBhc3Nlcy4KK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwg ZXhjZXB0X2tpbmRzID0+IEFSUkFZWyd0YWJsZSddKTsKKworLS0gTXVsdGkta2luZCBjb21wb3Np dGlvbnMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3RhYmxlJywnaW5kZXgnXSk7CitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4g ZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3ByaW1hcnlfa2V5JywnZm9yZWlnbl9rZXknXSk7 CistLSBEdXBsaWNhdGUgZW50cmllcyBpbiB0aGUgbGlzdCBhcmUgc2lsZW50bHkgZGUtZHVwbGlj YXRlZCBieSB0aGUKKy0tIEJpdG1hcHNldC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnaWR4ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsn aW5kZXgnLCdpbmRleCddKTsKKworRFJPUCBUQUJMRSBleGNsX2ZpeDsKKworLS0gS2luZC1maWx0 ZXIgdGVzdHMgb24gcGFydGl0aW9uZWQgdGFibGVzIHdpdGggaW5kZXhlcy4KKy0tCistLSBvbmx5 X2tpbmRzPWluZGV4IG9uIGEgcGFydGl0aW9uZWQgdGFibGU6IG9ubHkgdGhlIHJvb3QgQ1JFQVRF IElOREVYIGlzCistLSBlbWl0dGVkOyBubyBDUkVBVEUgVEFCTEUsIG5vIHBhcnRpdGlvbiBjaGls ZHJlbiAoS0lORF9QQVJUSVRJT04gYWJzZW50KS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgncGFydGVkX21peGVkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG9ubHlfa2luZHMgPT4gQVJSQVlbJ2luZGV4J10pOworCist LSBleGNlcHRfa2luZHM9aW5kZXggb24gYSBwYXJ0aXRpb25lZCB0YWJsZTogQ1JFQVRFIFRBQkxF IGZvciB0aGUgcGFyZW50CistLSBhbmQgYWxsIGNoaWxkcmVuIGFyZSBlbWl0dGVkOyBubyBpbmRl eCBzdGF0ZW1lbnRzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfbWl4 ZWQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydpbmRleCddKTsKKworLS0gb25seV9raW5kcz1w cmltYXJ5X2tleSBvbiBhIHBhcnRpdGlvbmVkIHRhYmxlOiBvbmx5IHRoZSBBTFRFUiBUQUJMRSBB REQKKy0tIENPTlNUUkFJTlQgUEsgb24gdGhlIHBhcmVudDsgdGhlIGNoaWxkJ3MgaW5oZXJpdGVk IFBLIChjb25pc2xvY2FsPWZhbHNlKQorLS0gaXMgc2tpcHBlZDsgbm8gQ1JFQVRFIFRBQkxFLCBu byBwYXJ0aXRpb24gY2hpbGRyZW4uCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Bh cnRlZF9wayc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvbmx5X2tpbmRzID0+IEFSUkFZWydwcmltYXJ5X2tleSddKTsKKworLS0gb25s eV9raW5kcz1LIG9uIGEgdGFibGUgdGhhdCBkb2VzIG5vdCBoYXZlIGFueSBLIG9mIHRoYXQga2lu ZCBpcyBhIHZhbGlkCistLSBmaWx0ZXIgYW5kIHJldHVybnMgemVybyByb3dzLiAgVGVzdGVkIHBy ZXZpb3VzbHkgd2l0aCBmb3JlaWduX2tleQorLS0gb24gJ3JlZmQnOyBoZXJlIGFsc28gcnVsZSwg c3RhdGlzdGljcywgcmxzLCByZXBsaWNhX2lkZW50aXR5LCBhbmQKKy0tIGV4Y2x1c2lvbiBvbiAn YmFzaWMnICh3aGljaCBoYXMgb25seSBQSyArIGNvbHVtbnMpLgorU0VMRUNUIGNvdW50KCopIEFT IHJ1bGVfcm93cworICBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG93 bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydydWxlJ10pOworU0VMRUNUIGNvdW50 KCopIEFTIHN0YXRzX3Jvd3MKKyAgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2Ns YXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsnc3RhdGlzdGljcyddKTsK K1NFTEVDVCBjb3VudCgqKSBBUyBybHNfcm93cworICBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jh c2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydybHMn XSk7CitTRUxFQ1QgY291bnQoKikgQVMgcmlfcm93cworICBGUk9NIHBnX2dldF90YWJsZV9kZGwo J2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydy ZXBsaWNhX2lkZW50aXR5J10pOworU0VMRUNUIGNvdW50KCopIEFTIGV4Y2xfcm93cworICBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5 X2tpbmRzID0+IEFSUkFZWydleGNsdXNpb24nXSk7CisKKy0tIElucHV0LXZhbGlkYXRpb24gZWRn ZSBjYXNlcyBmb3IgdGhlIGtpbmQgYXJyYXkuICBBbGwKKy0tIG9mIHRoZXNlIHJhaXNlIGFuIGVy cm9yOyB0aGUgZnVuY3Rpb24gbmV2ZXIgcmVhY2hlcyByZWxhdGlvbiBvcGVuLgorLS0gRW1wdHkg YXJyYXk6CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3Ms IG9ubHlfa2luZHMgPT4gQVJSQVlbXTo6dGV4dFtdKTsKKy0tIE5VTEwgZWxlbWVudDoKK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb25seV9raW5kcyA9 PiBBUlJBWVtOVUxMOjp0ZXh0XSk7CistLSBVbnJlY29nbml6ZWQga2luZDoKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb25seV9raW5kcyA9PiBBUlJB WVsnbm9fc3VjaF9raW5kJ10pOworLS0gU2FtZSBraW5kIHNwZWNpZmllZCB0aHJvdWdoIGJvdGgg cGFyYW1ldGVycyBpcyBzdGlsbCBtdXRleC1yZWplY3RlZC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBvbmx5X2tpbmRzID0+IEFSUkFZWydpbmRleCddLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsncnVsZSddKTsKKworLS0gUm91bmQtdHJp cCB2ZXJpZmljYXRpb24uICBGb3IgZXZlcnkgdGVzdCB0YWJsZSwgY2FwdHVyZSB0aGUgRERMIHRo ZQorLS0gZnVuY3Rpb24gZW1pdHMsIGRyb3AgdGhlIHNjaGVtYSwgcmVwbGF5IGVhY2ggdGFibGUn cyBEREwgaW4KKy0tIGRlcGVuZGVuY3kgb3JkZXIsIGFuZCBjb25maXJtIHRoYXQgcGdfZ2V0X3Rh YmxlX2RkbCBvbiB0aGUgcmVjcmVhdGVkCistLSByZWxhdGlvbiBtYXRjaGVzIHRoZSBvcmlnaW5h bCBsaW5lLWZvci1saW5lLiAgVGhlIGZpbmFsIFNFTEVDVCBtdXN0CistLSByZXR1cm4gemVybyBy b3dzLgorQ1JFQVRFIFRFTVAgVEFCTEUgcGd0YmxfZGRsX3J0X29yaWcgKG5hbWUgdGV4dCwgb3Jk IGludCwgbGluZSB0ZXh0KTsKK0lOU0VSVCBJTlRPIHBndGJsX2RkbF9ydF9vcmlnCitTRUxFQ1Qg dC5uYW1lLCBvLm9yZCwgby5saW5lCitGUk9NIChWQUxVRVMKKyAgICAgICAgKCdiYXNpYycpLCAo J2lkX2NvbHMnKSwgKCdpZF9jdXN0b20nKSwgKCdnZW5fY29scycpLCAoJ2dlbl92aXJ0dWFsJyks ICgnc3RvcmFnZV9jb2xzJyksCisgICAgICAgICgncmVmZCcpLCAoJ2NvbnMnKSwgKCdudWxsc19u ZCcpLCAoJ2lkeF9pbmMnKSwKKyAgICAgICAgKCdma19hY3RzX3RndCcpLCAoJ2ZrX2FjdHMnKSwg KCdub3RlbmZfdGd0JyksICgnbm90ZW5mJyksICgnc2VsZl9yZWYnKSwgKCd0ZW1wb3JhbF9waycp LAorICAgICAgICAoJ2lkeGQnKSwKKyAgICAgICAgKCdwYXInKSwgKCdjaCcpLCAoJ2F0dG9wdCcp LAorICAgICAgICAoJ3BhcnRlZF9yYW5nZScpLCAoJ3BhcnRlZF9yYW5nZV8xJyksICgncGFydGVk X3JhbmdlX2RlZicpLAorICAgICAgICAoJ3BhcnRlZF9oYXNoJyksICgncGFydGVkX2hhc2hfMCcp LAorICAgICAgICAoJ3BhcnRlZF9saXN0JyksCisgICAgICAgICgncGFydGVkX2lkeCcpLCAoJ3Bh cnRlZF9pZHhfYScpLAorICAgICAgICAoJ3BhcnRlZF9wbGFpbicpLCAoJ3BhcnRlZF9wbGFpbl9h JyksCisgICAgICAgICgncGFydGVkX3BrJyksICgncGFydGVkX3BrX2EnKSwKKyAgICAgICAgKCdw YXJ0ZWRfc3ViJyksICgncGFydGVkX3N1Yl9hJyksICgncGFydGVkX3N1Yl9hMScpLAorICAgICAg ICAoJ3BhcnRlZF9jaGlsZF9pZHgnKSwgKCdwYXJ0ZWRfY2hpbGRfaWR4X2EnKSwKKyAgICAgICAg KCdwYXJ0ZWRfbWl4ZWQnKSwgKCdwYXJ0ZWRfbWl4ZWRfYScpLAorICAgICAgICAoJ3BhcnRlZF9m a190Z3QnKSwgKCdwYXJ0ZWRfZmsnKSwgKCdwYXJ0ZWRfZmtfYScpLAorICAgICAgICAoJ3J0X2xv ZycpLCAoJ3J0JyksCisgICAgICAgICgnc3R4JyksICgncmxzJyksICgncmlfZnVsbCcpLCAoJ3Jp X2lkeCcpLCAoJ3VubycpCisgICAgICkgQVMgdChuYW1lKSwKKyAgICAgTEFURVJBTCBwZ19nZXRf dGFibGVfZGRsKCgncGd0YmxfZGRsX3Rlc3QuJyB8fCB0Lm5hbWUpOjpyZWdjbGFzcywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0+IGZhbHNlKSBXSVRIIE9SRElOQUxJVFkg byhsaW5lLCBvcmQpOworCitETyAkJAorREVDTEFSRQorICAgIHRhYmxlcyBDT05TVEFOVCB0ZXh0 W10gOj0gQVJSQVlbCisgICAgICAgICdiYXNpYycsICdpZF9jb2xzJywgJ2lkX2N1c3RvbScsICdn ZW5fY29scycsICdnZW5fdmlydHVhbCcsICdzdG9yYWdlX2NvbHMnLAorICAgICAgICAncmVmZCcs ICdjb25zJywgJ251bGxzX25kJywgJ2lkeF9pbmMnLAorICAgICAgICAnZmtfYWN0c190Z3QnLCAn ZmtfYWN0cycsICdub3RlbmZfdGd0JywgJ25vdGVuZicsICdzZWxmX3JlZicsICd0ZW1wb3JhbF9w aycsCisgICAgICAgICdpZHhkJywKKyAgICAgICAgJ3BhcicsICdjaCcsICdhdHRvcHQnLAorICAg ICAgICAncGFydGVkX3JhbmdlJywgJ3BhcnRlZF9yYW5nZV8xJywgJ3BhcnRlZF9yYW5nZV9kZWYn LAorICAgICAgICAncGFydGVkX2hhc2gnLCAncGFydGVkX2hhc2hfMCcsCisgICAgICAgICdwYXJ0 ZWRfbGlzdCcsCisgICAgICAgICdwYXJ0ZWRfaWR4JywgJ3BhcnRlZF9pZHhfYScsCisgICAgICAg ICdwYXJ0ZWRfcGxhaW4nLCAncGFydGVkX3BsYWluX2EnLAorICAgICAgICAncGFydGVkX3BrJywg J3BhcnRlZF9wa19hJywKKyAgICAgICAgJ3BhcnRlZF9zdWInLCAncGFydGVkX3N1Yl9hJywgJ3Bh cnRlZF9zdWJfYTEnLAorICAgICAgICAncGFydGVkX2NoaWxkX2lkeCcsICdwYXJ0ZWRfY2hpbGRf aWR4X2EnLAorICAgICAgICAncGFydGVkX21peGVkJywgJ3BhcnRlZF9taXhlZF9hJywKKyAgICAg ICAgJ3BhcnRlZF9ma190Z3QnLCAncGFydGVkX2ZrJywgJ3BhcnRlZF9ma19hJywKKyAgICAgICAg J3J0X2xvZycsICdydCcsCisgICAgICAgICdzdHgnLCAncmxzJywgJ3JpX2Z1bGwnLCAncmlfaWR4 JywgJ3VubycKKyAgICBdOworICAgIHQgdGV4dDsKKyAgICBzdG10IHRleHQ7CitCRUdJTgorICAg IERST1AgU0NIRU1BIHBndGJsX2RkbF90ZXN0IENBU0NBREU7CisgICAgQ1JFQVRFIFNDSEVNQSBw Z3RibF9kZGxfdGVzdDsKKyAgICBGT1JFQUNIIHQgSU4gQVJSQVkgdGFibGVzIExPT1AKKyAgICAg ICAgRk9SIHN0bXQgSU4KKyAgICAgICAgICAgIFNFTEVDVCBsaW5lIEZST00gcGd0YmxfZGRsX3J0 X29yaWcgV0hFUkUgbmFtZSA9IHQgT1JERVIgQlkgb3JkCisgICAgICAgIExPT1AKKyAgICAgICAg ICAgIEJFR0lOCisgICAgICAgICAgICAgICAgRVhFQ1VURSBzdG10OworICAgICAgICAgICAgRVhD RVBUSU9OIFdIRU4gZHVwbGljYXRlX3RhYmxlIFRIRU4KKyAgICAgICAgICAgICAgICBOVUxMOyAg LS0gcGFydGl0aW9uIGNoaWxkIGFscmVhZHkgY3JlYXRlZCBieSBpdHMgcGFyZW50J3MgRERMCisg ICAgICAgICAgICBFTkQ7CisgICAgICAgIEVORCBMT09QOworICAgIEVORCBMT09QOworRU5EICQk OworCitXSVRIIGFmdGVyX2RkbCBBUyAoCisgICAgU0VMRUNUIHQubmFtZSwgby5vcmQsIG8ubGlu ZQorICAgIEZST00gKFNFTEVDVCBESVNUSU5DVCBuYW1lIEZST00gcGd0YmxfZGRsX3J0X29yaWcp IEFTIHQsCisgICAgICAgICBMQVRFUkFMIHBnX2dldF90YWJsZV9kZGwoKCdwZ3RibF9kZGxfdGVz dC4nIHx8IHQubmFtZSk6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG93bmVyID0+IGZhbHNlKSBXSVRIIE9SRElOQUxJVFkgbyhsaW5lLCBvcmQpCispCisoU0VM RUNUICdtaXNzaW5nLWluLWNvcHknIEFTIGtpbmQsIG5hbWUsIG9yZCwgbGluZSBGUk9NIHBndGJs X2RkbF9ydF9vcmlnCisgRVhDRVBUCisgU0VMRUNUICdtaXNzaW5nLWluLWNvcHknLCBuYW1lLCBv cmQsIGxpbmUgRlJPTSBhZnRlcl9kZGwpCitVTklPTiBBTEwKKyhTRUxFQ1QgJ2V4dHJhLWluLWNv cHknIEFTIGtpbmQsIG5hbWUsIG9yZCwgbGluZSBGUk9NIGFmdGVyX2RkbAorIEVYQ0VQVAorIFNF TEVDVCAnZXh0cmEtaW4tY29weScsIG5hbWUsIG9yZCwgbGluZSBGUk9NIHBndGJsX2RkbF9ydF9v cmlnKQorT1JERVIgQlkga2luZCwgbmFtZSwgb3JkOworCistLSBDbGVhbnVwLgorRFJPUCBTQ0hF TUEgcGd0YmxfZGRsX3Rlc3QgQ0FTQ0FERTsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXgg ZmZiNDEzYWI2MTIuLmJlNTM5ZTlhYzcyIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAt MTY0OCw2ICsxNjQ4LDcgQEAgTGlzdGVuZXJFbnRyeQogTG9JbmZvCiBMb2FkU3RtdAogTG9jYWxC dWZmZXJMb29rdXBFbnQKK0xvY2FsTm90TnVsbEVudHJ5CiBMb2NhbFBnQmFja2VuZFN0YXR1cwog TG9jYWxUcmFuc2FjdGlvbklkCiBMb2NhdGlvbgpAQCAtMzE1Miw2ICszMTUzLDcgQEAgVGFibGVG dW5jU2NhbgogVGFibGVGdW5jU2NhblN0YXRlCiBUYWJsZUZ1bmNUeXBlCiBUYWJsZUluZm8KK1Rh YmxlRGRsQ29udGV4dAogVGFibGVMaWtlQ2xhdXNlCiBUYWJsZVNhbXBsZUNsYXVzZQogVGFibGVT Y2FuRGVzYwotLSAKMi41MS4wCgo= --000000000000584fc60655ef26b1--