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 1wdOtX-0044g5-1M for pgpool-hackers@arkaria.postgresql.org; Sat, 27 Jun 2026 09:00:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wdOtW-00Esso-1M for pgpool-hackers@arkaria.postgresql.org; Sat, 27 Jun 2026 09:00:10 +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 1wdOtV-00EssZ-21 for pgpool-hackers@lists.postgresql.org; Sat, 27 Jun 2026 09:00:10 +0000 Received: from mail-yw1-x1132.google.com ([2607:f8b0:4864:20::1132]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wdOtR-00000000SGf-3AvU for pgpool-hackers@lists.postgresql.org; Sat, 27 Jun 2026 09:00:08 +0000 Received: by mail-yw1-x1132.google.com with SMTP id 00721157ae682-80b32d33596so19686217b3.2 for ; Sat, 27 Jun 2026 02:00:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1782550804; cv=none; d=google.com; s=arc-20260327; b=HLPm3Ej/xV8mLv/Yh+J9Qb/QOOmE6JaYjq8cNR9pnWmIebRadthoL70x3129PpyqEh 2Y0DgNa71E35oXJrrfQqqxKk35/kqpF8fRyZv2oY1j5biGPWAKjnw8T3+ibymjKJDIlx 4GCURWv+SqjE+lwaZz3a1Ya9u0jWWRSJtnPtMeSlbg6DJgqJm7C7i76zHBBhpQnp8Ksq 32Aa4CD8C5bSKM9tEB7hOGxvyFVFEtZVYVcjFbk9v5RTuYTsjY15idtAvmxSXH918wkZ sZGUy2OThB1BmgCvbKVt6iI+yR60iPtNrPhBfCaJ6Mf01TJe6MbdZ+fGAaHBKM4O7LMl npCQ== 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=LyyIkV3Kju0d24PiGwt9ep2GD2jLHGnloSyY3M5uYe4=; fh=m3oiE62fRN5J1XaE+5vpHZRIgCyFefxVI0mFw3d8yxA=; b=EApvuopB5f2s9tMB/5TdUp5b5mzrcEGJLY0lC8yZ0C5YWI3ruDYQEb9mZco5KIcIJY 1S0lD1NG3Vovb1AyXneEyeeJ3Vj/i407ukOvDGYja76bV5WOnMUmqc1C7moARN5AKDQk 7nUWqkLxim/E8lE6r+WjhwhxSY76X+Oq55YhKkNcwg+PNake1/ujr3PGCpJCntsbzjij x4VHdZZFvkDHHusBVdJsmkTuMnxx2YAYysRKOlr9upWi19rW582o/wKpkCGBj6D6wu75 J9r996F+Gh0ZuTc5XIibebv71n8R81Ng83L6Fj/eOcf5P3zmdBT4IinwstTEwJs879EA z+ZA==; 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=tailorbrands.com; s=google; t=1782550804; x=1783155604; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=LyyIkV3Kju0d24PiGwt9ep2GD2jLHGnloSyY3M5uYe4=; b=PsOcspTDKlmL4EZXIb1k/w+scN/L5HDNXtHuPnVEG/n1/s3LT1+ZaOzGDGSq/2Cen4 FRz9BF1o2KelXW8deePq3+0YDjXo04WHgx01DSxYy6ef3jjWM3RuCUhPUxAmMoCxj6ym NOpuVxOM1yj2h1VsxwkyujOi1T256/5fCgVYz6+MbWLCufFOjKumajwawy7VNcXYmM14 iJhLeuRaS+RC52PtDPoz1+xqBp+Lfd+QXqQX1WkLKI5p1gtvb6gIwmrZdEQ0706g5kKi eoycZjkpkQ1zI2icEcHnC1xnkS8yEiADh3k0nWwCN2dXTFSrFVK8POrY3A2puCJmQjiD 6wVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782550804; x=1783155604; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=LyyIkV3Kju0d24PiGwt9ep2GD2jLHGnloSyY3M5uYe4=; b=Z6jLfu8oMisnWZJcigw6Z/7N6O9s2zDga6soRF9Ql9deMVWqNO7JnQvi77A/zSDICt hCaDoaRLQSr22TO3IXb6lLW2GXC+qk+RQKJUfbp+OOFo3LCUuwtcj74adkHA4JT39CC/ yu9rOFcU300HaIS3MGl4svzbb7febwF1Zum1LnOvzM1z/m1M7EYnhIWF0PPKPv2tn2sO I21wLVB+TePieYmvZcPiv2GVsIcbBPl+yNkg7i76Dp//6cVR4Tpp0rHPo2jLj+NyBQfz 0lAWVuq4hyNow85I46oSPDuUcZWE2ijj0w7rORKh0QY7RtIaBf4d7NStLiOeb2/8mZK7 KPPw== X-Gm-Message-State: AOJu0Yy7OpwlT/KGGxIkeCnmedbgtmctNu5MVXRxuppYFqUx7n4s0Jl8 mMeCgJxldUpdwumDjKEXDx0g+Pdv+Sp5QAVcumVDjPq0D7xovUCOlIiGmoF/XJkCk3kQtY0u+78 0kOo+it4MuBfdSYTX/+1bM6lUxziemlGMdTffB87MOg== X-Gm-Gg: AfdE7clac0zGyRA/g1smXs/RHdzik3X1gyCtiUT8LFea/z+oDfb0Oi0sEJ4QLSa3ssG K0q527hG9C2GoRTdALc8ZLI5tLiTop7shQZH/51VsoG6/aEFh5TclMYKZ3Zal4r2mV1Ipr1L8O4 iGjvcV8/2Fg63Sms0FB7gjJvXUE8ODQCU3PnUfxAx6+NY+WhmtUFBXFXQD97bSq+IuougxnG+ZF uLxyBEerbNEPO5RwRF1V1u5whLPqA0tKq1j/OSrCmFKdVjJZNHu5yINH+uL9E0XM2dda9zKBxYy zOctHWfSN8+LXPa3KisxdZyaYdSKmNBeMjdtQO7hHvVJHbasXSdaVQwdrS+vTwLsU1jHa8wyCDv i1lvIPb3Svf9NYviXASbv4PQi+eHChnZdgNZ+lUkCgDiD58w4m4X6RMLHpAg84g== X-Received: by 2002:a05:690c:7402:b0:806:8416:6ca0 with SMTP id 00721157ae682-80c73af1188mr36121527b3.35.1782550803185; Sat, 27 Jun 2026 02:00:03 -0700 (PDT) MIME-Version: 1.0 References: <20260626.074028.806271918741516663.ishii@postgresql.org> <20260627.105108.665094997299401916.ishii@postgresql.org> In-Reply-To: <20260627.105108.665094997299401916.ishii@postgresql.org> From: Nadav Shatz Date: Sat, 27 Jun 2026 11:59:51 +0300 X-Gm-Features: AVVi8CdEiqX_6QgVAD2zHkYAuNcCOQeWpTqaCrVJEq0SnS-zgfZLyuVSS9BPJqQ Message-ID: Subject: Re: Proposal: Recent mutated table tracking in memory To: Tatsuo Ishii Cc: pgpool-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000006bb0f20655387379" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000006bb0f20655387379 Content-Type: multipart/alternative; boundary="0000000000006bb0f00655387377" --0000000000006bb0f00655387377 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Tatsuo, Thanks for the review. All addressed in v7: 1. Message format strings split across lines Restored to single-line strings in is_select_object_in_temp_write_list() and every other place in the patch (pool_query_context.c and pool_track_table_mutation.c). Long lines are left long; only the message strings were rejoined. 2. The large "else if" branch in where_to_send_main_replica() Moved into a new static subroutine, where_to_send_dml_adaptive_global(), so the routing function stays readable. The call site is now just: else if (pool_config->disable_load_balance_on_write =3D=3D DLBOW_DML_ADAPTIVE_GLOBAL) { where_to_send_dml_adaptive_global(query_context, query, node, dest); } 3. Copyright year on the two new files Changed to "Copyright (c) 2026" in pool_track_table_mutation.c and pool_track_table_mutation.h. 4. FNV-1a comment Expanded with a short explanation of what FNV-1a is (offset basis + per-byte XOR/multiply by the FNV prime, non-cryptographic, good dispersion for short keys) and a reference link. 5. get_current_time() wrapper Good point -- there was no reason for it. Removed the wrapper and call gettimeofday() directly at the call sites. Attaching the updated single patch: v7-0001-Feature-load-balancing-control-by-table-tracking.patch Builds cleanly and passes the dml_adaptive_global routing tests on a PG16 streaming-replication cluster. Thanks! On Sat, Jun 27, 2026 at 4:51=E2=80=AFAM Tatsuo Ishii = wrote: > Hi Nadav, > > > Hi Tatsuo, > > > > Sorry -- my wording was misleading. No, unpatched pgpool does NOT have > > this problem, and you're right that your test shows no hang on master. > > The hang is entirely in the new code my patch adds, not in pgpool > > itself. > > > > To be precise: the marking code that hung is the dml_adaptive_global > > branch in handle_query_context() (CommandComplete.c) that my patch > > introduces. It is gated on disable_load_balance_on_write =3D > > dml_adaptive_global, which only exists with the patch applied, so maste= r > > never runs it. > > > > It also doesn't fire for your exact sequence, for two reasons: > > > > 1. You ran it on master, which doesn't contain the branch at all. > > 2. Even on a patched build, your statements are inside an explicit > > transaction (BEGIN ... COMMIT), and that branch only runs for > > autocommit statements (the "!is_in_transaction" case). > > > > What actually hung, on a patched build with dml_adaptive_global set in > > streaming replication, was a *bare autocommit* statement (no surroundin= g > > transaction) whose table OID cannot be served from the relcache -- for > > example: > > > > DROP TABLE IF EXISTS non_existent_table; -- no BEGIN/COMMIT > > > > Because the name is unresolvable, pool_table_name_to_oid() does not cac= he > > it (no_cache_if_zero), so every lookup is a relcache miss. The marking > > branch calls pool_extract_table_oids() -> ... -> do_query() to resolve > > the OID, but handle_query_context() runs before the statement's > > CommandComplete response has been read from the backend, so injecting > > that query desyncs the protocol and the session blocks. Backtrace: > > > > #2 pool_read2 (blocked in read()) > > #3 do_query "SELECT > > COALESCE(pg_catalog.to_regclass('...')::oid, 0)" > > #4 pool_search_relcache (relcache miss) > > #5 pool_table_name_to_oid > > #6 pool_extract_table_oids query_cache/pool_memqcache.c > > #7 handle_query_context protocol/CommandComplete.c > > (!is_in_transaction branch) > > #8 CommandComplete > > > > This is the same class of issue as the one behind your original review > > comment: resolving OIDs at CommandComplete time means doing backend I/O > > while a response is in flight. > > > > v6-0001 fixes it for good by resolving the written tables' OIDs (and th= e > > database OID) at DML *routing* time -- when the connection is idle and > > do_query is safe, the same point the feature already resolves OIDs for > > the SELECT staleness check. handle_query_context() then only marks the > > already-resolved OIDs and does no backend I/O at all, for both the > > autocommit and the COMMIT paths. > > > > Verified on a PG16 streaming-replication cluster with > dml_adaptive_global: > > the bare "DROP TABLE IF EXISTS non_existent_table;" and your > > "BEGIN; DROP TABLE IF EXISTS ...; COMMIT;" both return promptly, the > > deferred-constraint COMMIT failure leaves the table unmarked (reads kee= p > > load-balancing to the standby), and a successful autocommit or COMMIT > > write marks the table and forces reads to the primary. > > Understood. > > > Sorry again for the confusing earlier phrasing. > > No problem. Thank you for detailed explanation! > > So, my review comments are below. Mostly cosmetic coding style > suggestions. > > diff --git a/src/context/pool_query_context.c > b/src/context/pool_query_context.c > index 73bc64338..a7756ec8b 100644 > --- a/src/context/pool_query_context.c > +++ b/src/context/pool_query_context.c > @@ -1848,20 +1849,26 @@ is_in_list(char *name, List *list) > static bool > is_select_object_in_temp_write_list(Node *node, void *context) > { > - if (node =3D=3D NULL || pool_config->disable_load_balance_on_writ= e !=3D > DLBOW_DML_ADAPTIVE) > + if (node =3D=3D NULL || > + > !DLBOW_IS_DML_ADAPTIVE(pool_config->disable_load_balance_on_write)) > return false; > > if (IsA(node, RangeVar)) > { > RangeVar *rgv =3D (RangeVar *) node; > - POOL_SESSION_CONTEXT *session_context =3D > pool_get_session_context(false); > + POOL_SESSION_CONTEXT *session_context; > > - if (pool_config->disable_load_balance_on_write =3D=3D > DLBOW_DML_ADAPTIVE && session_context->is_in_transaction) > + session_context =3D pool_get_session_context(false); > + > + if (session_context->is_in_transaction) > { > ereport(DEBUG1, > - > (errmsg("is_select_object_in_temp_write_list: \"%s\", found relation > \"%s\"", (char *) context, rgv->relname))); > + > (errmsg("is_select_object_in_temp_write_list:" > + " \"%s\", found > relation \"%s\"", > + (char *) context, > rgv->relname))); > > I guess you aimed to shorten the message so that it does not exceed > line length limit (78). But IMO the rule is not applied to message > format strings because this kind of style (divide the message line > into multiple lines) is hard to read. I suggest to restore to former styl= e. > > Same suggestion is applied to all other similar places. > > @@ -2169,6 +2275,153 @@ where_to_send_main_replica(POOL_QUERY_CONTEXT > *query_context, char *query, Node > { > > pool_set_node_to_be_sent(query_context, PRIMARY_NODE_ID); > } > + > + /* > + * Check track table mutation for recentl= y > written tables. If > + * in cold start or any table was recentl= y > written, route to > + * primary to avoid stale reads. > + */ > + else if > (pool_config->disable_load_balance_on_write =3D=3D > + DLBOW_DML_ADAPTIVE_GLOBA= L) > + { > > This "else if" branch is too large and hard to read. You should move > the code of the branch to a subroutine and call it from here. > > diff --git a/src/include/utils/pool_track_table_mutation.h > b/src/include/utils/pool_track_table_mutation.h > new file mode 100644 > index 000000000..dfbac666d > --- /dev/null > +++ b/src/include/utils/pool_track_table_mutation.h > @@ -0,0 +1,167 @@ > +/* -*-pgsql-c-*- */ > +/* > + * pgpool: a language independent connection pool server for PostgreSQL > + * written by Tatsuo Ishii > + * > + * Copyright (c) 2003-2026 PgPool Global Development Group > > Since this file is new, the Copyright year should be just 2026. > + * Copyright (c) 2026 PgPool Global Development Group > > diff --git a/src/protocol/CommandComplete.c > b/src/protocol/CommandComplete.c > index 1f63a0e8d..76e77fea0 100644 > --- a/src/protocol/CommandComplete.c > +++ b/src/protocol/CommandComplete.c > diff --git a/src/utils/pool_track_table_mutation.c > b/src/utils/pool_track_table_mutation.c > new file mode 100644 > index 000000000..e7771e7bf > --- /dev/null > +++ b/src/utils/pool_track_table_mutation.c > @@ -0,0 +1,902 @@ > +/* -*-pgsql-c-*- */ > +/* > + * pgpool: a language independent connection pool server for PostgreSQL > + * written by Tatsuo Ishii > + * > + * Copyright (c) 2003-2026 PgPool Global Development Group > > Since this file is new, the Copyright year should be just 2026. > + * Copyright (c) 2026 PgPool Global Development Group > > +/* ---------------- > + * Hash functions > + * ---------------- > + */ > + > +/* > + * FNV-1a hash for table/database oid pair > + */ > > Can you please add more comments regarding FNV-1a? I'm not sure > everyone is famimilar with FNV-1a (at lease I am not). > > +/* > + * Get current time > + */ > +static void > +get_current_time(struct timeval *tv) > +{ > + gettimeofday(tv, NULL); > +} > > Just out of curiosity, why you don't call gettimeofday directly? > > Regards, > -- > Tatsuo Ishii > SRA OSS K.K. > English: http://www.sraoss.co.jp/index_en/ > Japanese:http://www.sraoss.co.jp > --=20 Nadav Shatz Tailor Brands | CTO --0000000000006bb0f00655387377 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Tatsuo,

Thanks for the review. All addressed in = v7:

1. Message format strings split across lines
=C2=A0 =C2=A0Res= tored to single-line strings in is_select_object_in_temp_write_list()
= =C2=A0 =C2=A0and every other place in the patch (pool_query_context.c and=C2=A0 =C2=A0pool_track_table_mutation.c). Long lines are left long; only= the
=C2=A0 =C2=A0message strings were rejoined.

2. The large &qu= ot;else if" branch in where_to_send_main_replica()
=C2=A0 =C2=A0Mov= ed into a new static subroutine,
=C2=A0 =C2=A0where_to_send_dml_adaptive= _global(), so the routing function stays
=C2=A0 =C2=A0readable. The call= site is now just:

=C2=A0 =C2=A0 =C2=A0else if (pool_config->disa= ble_load_balance_on_write =3D=3D
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 DLBOW_DML_ADAPTIVE_GLOBAL)
=C2=A0 =C2=A0 =C2=A0{
=C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0where_to_send_dml_adaptive_global(query_context,= query, node, dest);
=C2=A0 =C2=A0 =C2=A0}

3. Copyright year on t= he two new files
=C2=A0 =C2=A0Changed to "Copyright (c) 2026" = in pool_track_table_mutation.c and
=C2=A0 =C2=A0pool_track_table_mutatio= n.h.

4. FNV-1a comment
=C2=A0 =C2=A0Expanded with a short explana= tion of what FNV-1a is (offset basis +
=C2=A0 =C2=A0per-byte XOR/multipl= y by the FNV prime, non-cryptographic, good
=C2=A0 =C2=A0dispersion for = short keys) and a reference link.

5. get_current_time() wrapper
= =C2=A0 =C2=A0Good point -- there was no reason for it. Removed the wrapper = and call
=C2=A0 =C2=A0gettimeofday() directly at the call sites.

= Attaching the updated single patch:

=C2=A0 v7-0001-Feature-load-bala= ncing-control-by-table-tracking.patch

Builds cleanly and passes the = dml_adaptive_global routing tests on a
PG16 streaming-replication cluste= r.

Thanks!

On Sat, Jun 27, 2026 at 4:51=E2=80= =AFAM Tatsuo Ishii <ishii@postgr= esql.org> wrote:
Hi Nadav,

> Hi Tatsuo,
>
> Sorry -- my wording was misleading. No, unpatched pgpool does NOT have=
> this problem, and you're right that your test shows no hang on mas= ter.
> The hang is entirely in the new code my patch adds, not in pgpool
> itself.
>
> To be precise: the marking code that hung is the dml_adaptive_global > branch in handle_query_context() (CommandComplete.c) that my patch
> introduces. It is gated on disable_load_balance_on_write =3D
> dml_adaptive_global, which only exists with the patch applied, so mast= er
> never runs it.
>
> It also doesn't fire for your exact sequence, for two reasons:
>
>=C2=A0 =C2=A01. You ran it on master, which doesn't contain the bra= nch at all.
>=C2=A0 =C2=A02. Even on a patched build, your statements are inside an = explicit
>=C2=A0 =C2=A0 =C2=A0 transaction (BEGIN ... COMMIT), and that branch on= ly runs for
>=C2=A0 =C2=A0 =C2=A0 autocommit statements (the "!is_in_transactio= n" case).
>
> What actually hung, on a patched build with dml_adaptive_global set in=
> streaming replication, was a *bare autocommit* statement (no surroundi= ng
> transaction) whose table OID cannot be served from the relcache -- for=
> example:
>
>=C2=A0 =C2=A0DROP TABLE IF EXISTS non_existent_table;=C2=A0 =C2=A0 =C2= =A0-- no BEGIN/COMMIT
>
> Because the name is unresolvable, pool_table_name_to_oid() does not ca= che
> it (no_cache_if_zero), so every lookup is a relcache miss. The marking=
> branch calls pool_extract_table_oids() -> ... -> do_query() to r= esolve
> the OID, but handle_query_context() runs before the statement's > CommandComplete response has been read from the backend, so injecting<= br> > that query desyncs the protocol and the session blocks. Backtrace:
>
>=C2=A0 =C2=A0#2=C2=A0 pool_read2=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 (blocked in read())
>=C2=A0 =C2=A0#3=C2=A0 do_query=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 "SELECT
> COALESCE(pg_catalog.to_regclass('...')::oid, 0)"
>=C2=A0 =C2=A0#4=C2=A0 pool_search_relcache=C2=A0 =C2=A0 =C2=A0 (relcach= e miss)
>=C2=A0 =C2=A0#5=C2=A0 pool_table_name_to_oid
>=C2=A0 =C2=A0#6=C2=A0 pool_extract_table_oids=C2=A0 =C2=A0query_cache/p= ool_memqcache.c
>=C2=A0 =C2=A0#7=C2=A0 handle_query_context=C2=A0 =C2=A0 =C2=A0 protocol= /CommandComplete.c
>=C2=A0 (!is_in_transaction branch)
>=C2=A0 =C2=A0#8=C2=A0 CommandComplete
>
> This is the same class of issue as the one behind your original review=
> comment: resolving OIDs at CommandComplete time means doing backend I/= O
> while a response is in flight.
>
> v6-0001 fixes it for good by resolving the written tables' OIDs (a= nd the
> database OID) at DML *routing* time -- when the connection is idle and=
> do_query is safe, the same point the feature already resolves OIDs for=
> the SELECT staleness check. handle_query_context() then only marks the=
> already-resolved OIDs and does no backend I/O at all, for both the
> autocommit and the COMMIT paths.
>
> Verified on a PG16 streaming-replication cluster with dml_adaptive_glo= bal:
> the bare "DROP TABLE IF EXISTS non_existent_table;" and your=
> "BEGIN; DROP TABLE IF EXISTS ...; COMMIT;" both return promp= tly, the
> deferred-constraint COMMIT failure leaves the table unmarked (reads ke= ep
> load-balancing to the standby), and a successful autocommit or COMMIT<= br> > write marks the table and forces reads to the primary.

Understood.

> Sorry again for the confusing earlier phrasing.

No problem. Thank you for detailed explanation!

So, my review comments are below. Mostly cosmetic coding style
suggestions.

diff --git a/src/context/pool_query_context.c b/src/context/pool_query_cont= ext.c
index 73bc64338..a7756ec8b 100644
--- a/src/context/pool_query_context.c
+++ b/src/context/pool_query_context.c
@@ -1848,20 +1849,26 @@ is_in_list(char *name, List *list)
=C2=A0static bool
=C2=A0is_select_object_in_temp_write_list(Node *node, void *context)
=C2=A0{
-=C2=A0 =C2=A0 =C2=A0 =C2=A0if (node =3D=3D NULL || pool_config->disable= _load_balance_on_write !=3D DLBOW_DML_ADAPTIVE)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0if (node =3D=3D NULL ||
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0!DLBOW_IS_DML_ADAPT= IVE(pool_config->disable_load_balance_on_write))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return false;

=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (IsA(node, RangeVar))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 RangeVar=C2=A0 =C2= =A0*rgv =3D (RangeVar *) node;
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0POOL_SESSION_CONTEX= T *session_context =3D pool_get_session_context(false);
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0POOL_SESSION_CONTEX= T *session_context;

-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (pool_config->= ;disable_load_balance_on_write =3D=3D DLBOW_DML_ADAPTIVE && session= _context->is_in_transaction)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0session_context =3D= pool_get_session_context(false);
+
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (session_context= ->is_in_transaction)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 ereport(DEBUG1,
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(errmsg(&= quot;is_select_object_in_temp_write_list: \"%s\", found relation = \"%s\"", (char *) context, rgv->relname)));
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(errmsg(&= quot;is_select_object_in_temp_write_list:"
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0" \"%s\", fo= und relation \"%s\"",
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(char *) context, rgv->r= elname)));

I guess you aimed to shorten the message so that it does not exceed
line length limit (78). But IMO the rule is not applied to message
format strings because this kind of style (divide the message line
into multiple lines) is hard to read. I suggest to restore to former style.=

Same suggestion is applied to all other similar places.

@@ -2169,6 +2275,153 @@ where_to_send_main_replica(POOL_QUERY_CONTEXT *quer= y_context, char *query, Node
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 pool_set= _node_to_be_sent(query_context, PRIMARY_NODE_ID);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 }
+
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0/*
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 * Check track table mutation for rec= ently written tables.=C2=A0 If
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 * in cold start or any table was rec= ently written, route to
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 * primary to avoid stale reads.
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 */
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0else if (pool_config->disable_load= _balance_on_write =3D=3D
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 DLBOW_DML_ADAPTIVE_GLOBAL)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0{

This "else if" branch is too large and hard to read. You should m= ove
the code of the branch to a subroutine and call it from here.

diff --git a/src/include/utils/pool_track_table_mutation.h b/src/include/ut= ils/pool_track_table_mutation.h
new file mode 100644
index 000000000..dfbac666d
--- /dev/null
+++ b/src/include/utils/pool_track_table_mutation.h
@@ -0,0 +1,167 @@
+/* -*-pgsql-c-*- */
+/*
+ * pgpool: a language independent connection pool server for PostgreSQL + * written by Tatsuo Ishii
+ *
+ * Copyright (c) 2003-2026=C2=A0 =C2=A0 =C2=A0PgPool Global Development Gr= oup

Since this file is new, the Copyright year should be just 2026.
+ * Copyright (c) 2026=C2=A0 PgPool Global Development Group

diff --git a/src/protocol/CommandComplete.c b/src/protocol/CommandComplete.= c
index 1f63a0e8d..76e77fea0 100644
--- a/src/protocol/CommandComplete.c
+++ b/src/protocol/CommandComplete.c
diff --git a/src/utils/pool_track_table_mutation.c b/src/utils/pool_track_t= able_mutation.c
new file mode 100644
index 000000000..e7771e7bf
--- /dev/null
+++ b/src/utils/pool_track_table_mutation.c
@@ -0,0 +1,902 @@
+/* -*-pgsql-c-*- */
+/*
+ * pgpool: a language independent connection pool server for PostgreSQL + * written by Tatsuo Ishii
+ *
+ * Copyright (c) 2003-2026=C2=A0 =C2=A0 =C2=A0PgPool Global Development Gr= oup

Since this file is new, the Copyright year should be just 2026.
+ * Copyright (c) 2026=C2=A0 PgPool Global Development Group

+/* ----------------
+ * Hash functions
+ * ----------------
+ */
+
+/*
+ * FNV-1a hash for table/database oid pair
+ */

Can you please add more comments regarding FNV-1a? I'm not sure
everyone is famimilar with FNV-1a (at lease I am not).

+/*
+ * Get current time
+ */
+static void
+get_current_time(struct timeval *tv)
+{
+=C2=A0 =C2=A0 =C2=A0 =C2=A0gettimeofday(tv, NULL);
+}

Just out of curiosity, why you don't call gettimeofday directly?

Regards,
--
Tatsuo Ishii
SRA OSS K.K.
English: http://www.sraoss.co.jp/index_en/
Japanese:http://www.sraoss.co.jp


--
Nadav Shatz
<= font color=3D"#000000">Tailor Brands=C2=A0| CTO
--0000000000006bb0f00655387377-- --0000000000006bb0f20655387379 Content-Type: application/octet-stream; name="v7-0001-Feature-load-balancing-control-by-table-tracking.patch" Content-Disposition: attachment; filename="v7-0001-Feature-load-balancing-control-by-table-tracking.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqw4pq5q0 RnJvbSBjYmQyMDAwOTU3ODNlYjYwZmFjM2YwYjI5Y2E5Zjg3NzBkNTM5YzBlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYWRhdiBTaGF0eiA8bmFkYXZAdGFpbG9yYnJhbmRzLmNvbT4K RGF0ZTogU3VuLCAxOSBBcHIgMjAyNiAxNzoxMDoyNCArMDMwMApTdWJqZWN0OiBbUEFUQ0ggdjdd IEZlYXR1cmU6IGxvYWQgYmFsYW5jaW5nIGNvbnRyb2wgYnkgdGFibGUgdHJhY2tpbmcuCgpQcmV2 ZW50IHJvdXRpbmcgb2YgcmVhZCBvbmx5IHF1ZXJpZXMgdG8gc3RhbmRieSBpZiByZXBsaWNhdGlv biBkZWxheQpvZiB0YWJsZXMgdXNlZCBpbiB0aGUgcXVlcnkgZXhjZWVkcyBjZXJ0YWluIGFtb3Vu dCBvZiB2YWx1ZQpjb2xsZWN0ZWQgYnkgc3RyZWFtaW5nIHJlcGxpY2F0aW9uIHByb2Nlc3MuIFRv IGVuYWJsZSB0aGlzIGZlYXR1cmUsCnNldCBkaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSB0 byBkbWxfYWRhcHRpdmVfZ2xvYmFsLgoKSW4gdGhpcyBtb2RlLCB3aGVuIHRhYmxlcyBhcmUgbW9k aWZpZWQgYnkKSU5TRVJUL1VQREFURS9ERUxFVEUvVFJVTkNBVEUvTUVSR0UvZGF0YSBtb2RpZmlj YXRpb24gV0lUSCwgZm9yCmNlcnRhaW4gcGVvcmlvZCBTRUxFQ1RzIHVzaW5nIHRoZSB0YWJsZXMg YXJlIG5vdCBsb2FkIGJhbGFuY2VkOgppLmUuIHJvdXRlZCB0byB0aGUgcHJpbWFyeSBQb3N0Z3Jl U1FMIHNlcnZlciB0byBhdm9pZCB0aGUgZGF0YQpzdGFsZW5lc3MgYnkgcmVwbGljYXRpb24gZGVs YXkuCgpVbmxpa2UgZG1sX2FkYXB0aXZlIG1vZGUsIGFueSB0YWJsZSBtb2RpZmljYXRpb25zIGRl Y3JpYmVkIGFib3ZlIGFyZQpkZXRlY3RlZCBldmVuIHRoZXkgaGFwcG4gaW4gb3RoZXIgc2Vzc2lv bnMgKGluIGRtbF9hZGFwdGl2ZSwgdGFibGUKbW9kaWZpY2F0aW9ucyBhcmUgb25seSBkZXRlY3Rl ZCBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbikuIE5vdGUsCmhvd2V2ZXIsIHlvdSBjYW5ub3QgdXNl IGRtbF9hZGFwdGl2ZV9vYmplY3RfcmVsYXRpb25zaGlwX2xpc3QgdG8gdHJhY2sKZGVwZW5kZW5j eSBhbW9uZyB0YWJsZSBhbmQgb3RoZXIgb2JqZWN0cy4KCkJlc2lkZXMgZG1sX2FkYXB0aXZlX2ds b2JhbCwgdGhlcmUgYXJlIHNvbWUgdHVuaW5nIGtub2JzIGZvciB0aGUKZmVhdHVyZToKCi0gdHJh Y2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvcgogIFBhcmFtZXRlciB0byBjYWxjdWxhdGUgVFRM IG9mIGVhY2ggdHJhY2tpbmcgZGF0YS4KCi0gdHJhY2tfdGFibGVfbXV0YXRpb25fbWF4X3N0YWxl bmVzcwogIE1heGltdW0gZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzIHRoYXQgYSBzaW5nbGUgdGFi bGUgZW50cnkgY2FuCiAgY29udGludW91c2x5IGZvcmNlIHF1ZXJpZXMgdG8gcHJpbWFyeS4KCi0g dHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9kdXJhdGlvbgogIER1cmF0aW9uIGluIG1p bGxpc2Vjb25kcyB0byByb3V0ZSBhbGwgcXVlcmllcyB0byBwcmltYXJ5IGFmdGVyIGEKICBjaGls ZCBwcm9jZXNzIHN0YXJ0cy4KCi0gdHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0cwog IE51bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIHRoZSB0cmFjayB0YWJsZSBtdXRhdGlvbiBoYXNo IHRhYmxlLgoKLSB0cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9zaXplCiAgTWF4aW11bSBudW1i ZXIgb2YgdGFibGVzIHRoYXQgY2FuIGJlIHRyYWNrZWQgc2ltdWx0YW5lb3VzbHkgaW4gdGhlCiAg dHJhY2sgdGFibGUgbXV0YXRpb24uCgpBdXRob3I6IE5hZGF2IFNoYXR6IDxuYWRhdkB0YWlsb3Ji cmFuZHMuY29tPgpSZXZpZXdlZC1ieTogVGF0c3VvIElzaGlpIDxpc2hpaUBwb3N0Z3Jlc3FsLm9y Zz4KRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9mbGF0 LzIwMjYwNDA3LjE4MTAwOS4xNzYyMjA0MDMzMDc0MTY0ODQxLmlzaGlpJTQwcG9zdGdyZXNxbC5v cmcjNThjMTM5YzFhN2Y4ZDU1NjI4NjU5MjFkMDczMzY2N2IKLS0tCiBkb2Mvc3JjL3NnbWwvbG9h ZGJhbGFuY2Uuc2dtbCAgICAgICAgICAgICAgICAgfCAyODggKysrKysrCiBzcmMvTWFrZWZpbGUu YW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2NvbmZpZy9wb29s X2NvbmZpZ192YXJpYWJsZXMuYyAgICAgICAgICAgIHwgIDY1ICsrCiBzcmMvY29udGV4dC9wb29s X3F1ZXJ5X2NvbnRleHQuYyAgICAgICAgICAgICAgfCAyNjIgKysrKystCiBzcmMvY29udGV4dC9w b29sX3Nlc3Npb25fY29udGV4dC5jICAgICAgICAgICAgfCAgMTkgKy0KIHNyYy9pbmNsdWRlL2Nv bnRleHQvcG9vbF9zZXNzaW9uX2NvbnRleHQuaCAgICB8ICAxOCArLQogc3JjL2luY2x1ZGUvcG9v bC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzICstCiBzcmMvaW5jbHVkZS9wb29s X2NvbmZpZy5oICAgICAgICAgICAgICAgICAgICAgfCAgMjQgKy0KIHNyYy9pbmNsdWRlL3V0aWxz L3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uaCB8IDE2NyArKysrCiBzcmMvbWFpbi9wZ3Bvb2xf bWFpbi5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgMjkgKy0KIHNyYy9wcm90b2NvbC9Db21t YW5kQ29tcGxldGUuYyAgICAgICAgICAgICAgICB8ICA1MyArKwogc3JjL3Byb3RvY29sL2NoaWxk LmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA4ICsKIHNyYy9wcm90b2NvbC9wb29sX3By b3RvX21vZHVsZXMuYyAgICAgICAgICAgICB8ICAgNiArLQogc3JjL3NhbXBsZS9wZ3Bvb2wuY29u Zi5zYW1wbGUtc3RyZWFtICAgICAgICAgIHwgIDQ1ICsKIHNyYy9zdHJlYW1pbmdfcmVwbGljYXRp b24vcG9vbF93b3JrZXJfY2hpbGQuYyB8ICAyNCArCiBzcmMvdGVzdC9yZWdyZXNzaW9uL2xpYnMu c2ggICAgICAgICAgICAgICAgICAgfCAgIDIgKwogLi4uL3Rlc3RzLzA0My50cmFja190YWJsZV9t dXRhdGlvbi90ZXN0LnNoICAgIHwgMzU0ICsrKysrKysKIC4uLi8wNDQudHJhY2tfdGFibGVfbXV0 YXRpb25fd2F0Y2hkb2cvdGVzdC5zaCB8IDE4NCArKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDQgKwogc3JjL3V0aWxzL3Bvb2xfdHJhY2tfdGFi bGVfbXV0YXRpb24uYyAgICAgICAgIHwgODg1ICsrKysrKysrKysrKysrKysrKwogMjAgZmlsZXMg Y2hhbmdlZCwgMjQwNiBpbnNlcnRpb25zKCspLCAzNSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvaW5jbHVkZS91dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmgKIGNy ZWF0ZSBtb2RlIDEwMDc1NSBzcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0My50cmFja190YWJs ZV9tdXRhdGlvbi90ZXN0LnNoCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3JjL3Rlc3QvcmVncmVzc2lv bi90ZXN0cy8wNDQudHJhY2tfdGFibGVfbXV0YXRpb25fd2F0Y2hkb2cvdGVzdC5zaAogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy91dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmMKCmRpZmYg LS1naXQgYS9kb2Mvc3JjL3NnbWwvbG9hZGJhbGFuY2Uuc2dtbCBiL2RvYy9zcmMvc2dtbC9sb2Fk YmFsYW5jZS5zZ21sCmluZGV4IDllMWU3YjM5Yi4uZDRmYmNmMWE1IDEwMDY0NAotLS0gYS9kb2Mv c3JjL3NnbWwvbG9hZGJhbGFuY2Uuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvbG9hZGJhbGFuY2Uu c2dtbApAQCAtMTExMCw2ICsxMTEwLDE4IEBAIGFwcF9uYW1lX3JlZGlyZWN0X3ByZWZlcmVuY2Vf bGlzdCAmZ3Q7IGRhdGFiYXNlX3JlZGlyZWN0X3ByZWZlcmVuY2VfbGlzdCAmZ3Q7IHVzCiAJCURl cGVuZGVudCBmdW5jdGlvbnMsIHRyaWdnZXJzLCBhbmQgdmlld3Mgb24gdGhlIHRhYmxlcyBjYW4g YmUgY29uZmlndXJlZAogCQl1c2luZyA8eHJlZiBsaW5rZW5kPSJndWMtZG1sLWFkYXB0aXZlLW9i amVjdC1yZWxhdGlvbnNoaXAtbGlzdCI+CiAgICAgIDwvcGFyYT4KKworICAgICA8cGFyYT4KKwkJ SWYgdGhpcyBwYXJhbWV0ZXIgaXMgc2V0IHRvIDx2YXJuYW1lPmRtbF9hZGFwdGl2ZV9nbG9iYWw8 L3Zhcm5hbWU+LAorCQk8cHJvZHVjdG5hbWU+UGdwb29sLUlJPC8+IGJlaGF2ZXMgbGlrZSA8dmFy bmFtZT5kbWxfYWRhcHRpdmU8L3Zhcm5hbWU+CisJCShwZXItdHJhbnNhY3Rpb24gd3JpdGUgdHJh Y2tpbmcpIGFuZCBhZGRpdGlvbmFsbHkgdXNlcyBzaGFyZWQgbWVtb3J5IHRvIHRyYWNrCisJCXJl Y2VudGx5IHdyaXR0ZW4gdGFibGVzIGFjcm9zcyBhbGwgc2Vzc2lvbnMgY2x1c3Rlci13aWRlLiBX aGVuIGEgdGFibGUgaXMKKwkJd3JpdHRlbiBpbiBhbnkgc2Vzc2lvbiwgc3Vic2VxdWVudCByZWFk cyBvZiB0aGF0IHRhYmxlIGZyb20gYW55IHNlc3Npb24gYXJlCisJCXJvdXRlZCB0byBwcmltYXJ5 IHVudGlsIGEgVFRMIChiYXNlZCBvbiBtZWFzdXJlZCByZXBsaWNhdGlvbiBkZWxheSkgZXhwaXJl cy4KKwkJVGhpcyBwcmV2ZW50cyBzdGFsZSByZWFkcyBhZnRlciB3cml0ZXMgZXZlbiBhY3Jvc3Mg ZGlmZmVyZW50IGNvbm5lY3Rpb25zLgorCQlTZWUgPHhyZWYgbGlua2VuZD0icnVudGltZS1jb25m aWctdGFibGUtbXV0YXRpb24tbWFwIj4gZm9yIHRoZSBzdWItcGFyYW1ldGVycworCQl0aGF0IGNv bnRyb2wgdGhlIHNoYXJlZC1tZW1vcnkgdHJhY2tpbmcgYmVoYXZpb3IuCisgICAgIDwvcGFyYT4K ICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAKQEAgLTExOTUsNCArMTIwNywy ODAgQEAgZG1sX2FkYXB0aXZlX29iamVjdF9yZWxhdGlvbnNoaXBfbGlzdCA9ICd0YWJsZV8xOnRh YmxlXzInCiAKICAgPC92YXJpYWJsZWxpc3Q+CiAgPC9zZWN0Mj4KKworIDxzZWN0MiBpZD0icnVu dGltZS1jb25maWctdGFibGUtbXV0YXRpb24tbWFwIj4KKyAgPHRpdGxlPlRhYmxlIE11dGF0aW9u IFRyYWNraW5nIENvbmZpZ3VyYXRpb248L3RpdGxlPgorCisgIDxwYXJhPgorICAgVGhlc2UgcGFy YW1ldGVycyBjb25maWd1cmUgdGhlIHRyYWNrIHRhYmxlIG11dGF0aW9uIGZlYXR1cmUsIHdoaWNo IGlzIGFjdGl2YXRlZCBieSBzZXR0aW5nCisgICA8eHJlZiBsaW5rZW5kPSJndWMtZGlzYWJsZS1s b2FkLWJhbGFuY2Utb24td3JpdGUiPiB0byA8bGl0ZXJhbD5kbWxfYWRhcHRpdmVfZ2xvYmFsPC9s aXRlcmFsPi4KKyAgIFRoZSBmZWF0dXJlIHRyYWNrcyByZWNlbnRseSB3cml0dGVuIHRhYmxlcyB0 byBwcmV2ZW50IHN0YWxlIHJlYWRzIGZyb20gcmVwbGljYSBub2RlcyBkdXJpbmcKKyAgIHJlcGxp Y2F0aW9uIGxhZy4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgV2hlbiBhIHRhYmxlIGlzIG1v ZGlmaWVkIChJTlNFUlQvVVBEQVRFL0RFTEVURSksIGl0IGlzIG1hcmtlZCBhcyAic3RhbGUiIGZv ciBhIFRUTCBwZXJpb2QKKyAgICg8bGl0ZXJhbD5yZXBsaWNhdGlvbl9kZWxheSAqIHRyYWNrX3Rh YmxlX211dGF0aW9uX3R0bF9mYWN0b3I8L2xpdGVyYWw+KS4gQW55IFNFTEVDVCBxdWVyaWVzIG9u IHN0YWxlIHRhYmxlcyBhcmUgcm91dGVkCisgICB0byB0aGUgcHJpbWFyeSBub2RlIGluc3RlYWQg b2YgcmVwbGljYXMsIGVuc3VyaW5nIHJlYWQtYWZ0ZXItd3JpdGUgY29uc2lzdGVuY3kuCisgIDwv cGFyYT4KKworICA8cGFyYT4KKyAgIFRoaXMgZmVhdHVyZSByZXF1aXJlcyB0aW1lLWJhc2VkIHJl cGxpY2F0aW9uIGRlbGF5IG1vbml0b3JpbmcuIFRoaXMgY2FuIGJlIHByb3ZpZGVkIGJ5IGVpdGhl cgorICAgPHhyZWYgbGlua2VuZD0iZ3VjLXJlcGxpY2F0aW9uLWRlbGF5LXNvdXJjZS1jbWQiPiAo ZXh0ZXJuYWwgY29tbWFuZCBtb2RlKSBvciBieSBzZXR0aW5nCisgICA8eHJlZiBsaW5rZW5kPSJn dWMtZGVsYXktdGhyZXNob2xkLWJ5LXRpbWUiPiAod2hpY2ggdXNlcyA8bGl0ZXJhbD5wZ19zdGF0 X3JlcGxpY2F0aW9uLnJlcGxheV9sYWc8L2xpdGVyYWw+CisgICBmcm9tIFBvc3RncmVTUUwgMTAr KS4gSWYgbmVpdGhlciBpcyBjb25maWd1cmVkLCB0aGUgVFRMIHJlbWFpbnMgYXQgaXRzIGRlZmF1 bHQgbWluaW11bSB2YWx1ZQorICAgKDEwMCBtaWxsaXNlY29uZHMpIGFuZCBpcyBuZXZlciB1cGRh dGVkIGJhc2VkIG9uIGFjdHVhbCByZXBsaWNhdGlvbiBkZWxheSwgd2hpY2ggbWF5IHJlc3VsdAor ICAgaW4gc3Vib3B0aW1hbCByb3V0aW5nIGRlY2lzaW9ucy4KKyAgPC9wYXJhPgorCisgIDx3YXJu aW5nPgorICAgPHBhcmE+CisgICAgRW5hYmxpbmcgPGxpdGVyYWw+ZG1sX2FkYXB0aXZlX2dsb2Jh bDwvbGl0ZXJhbD4gaW5jcmVhc2VzIHNoYXJlZCBtZW1vcnkgY29uc3VtcHRpb24uIFdpdGggZGVm YXVsdCBzZXR0aW5ncywKKyAgICB0aGUgZmVhdHVyZSByZXF1aXJlcyBhcHByb3hpbWF0ZWx5IDgw IEtCIG9mIHNoYXJlZCBtZW1vcnkgZm9yIHRhYmxlIHRyYWNraW5nOgorICAgIDxsaXRlcmFsPnRy YWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemUgKiA0MCBieXRlczwvbGl0ZXJhbD4gKGRlZmF1 bHQ6IDIwNDggKiA0MCA9IH44MCBLQikuCisgICA8L3BhcmE+CisgIDwvd2FybmluZz4KKworICA8 dmFyaWFibGVsaXN0PgorCisgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtdHJhY2stdGFibGUtbXV0 YXRpb24tdHRsLWZhY3RvciIgeHJlZmxhYmVsPSJ0cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFj dG9yIj4KKyAgICA8dGVybT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9y PC92YXJuYW1lPiAoPHR5cGU+ZmxvYXRpbmcgcG9pbnQ8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJt PgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+dHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3Rv cjwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5k ZXh0ZXJtPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAg TXVsdGlwbGllciBmb3IgY2FsY3VsYXRpbmcgdGhlIFRUTDogPGxpdGVyYWw+VFRMID0gcmVwbGlj YXRpb25fZGVsYXkgKiB0cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yPC9saXRlcmFsPi4K KyAgICAgIEhpZ2hlciB2YWx1ZXMgcHJvdmlkZSBtb3JlIHNhZmV0eSBtYXJnaW4gYnV0IG1heSBy ZWR1Y2UgcmVhZCByZXBsaWNhIHV0aWxpemF0aW9uLgorICAgICA8L3BhcmE+CisgICAgIDxwYXJh PgorICAgICAgVmFsaWQgcmFuZ2U6IDEuMC0xMDAuMC4gRGVmYXVsdCBpcyA8bGl0ZXJhbD41LjA8 L2xpdGVyYWw+LgorICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGNoYW5nZWQgYnkgcmVsb2Fk aW5nIHRoZSA8cHJvZHVjdG5hbWU+UGdwb29sLUlJPC8+IGNvbmZpZ3VyYXRpb25zLgorICAgICA8 L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlz dGVudHJ5IGlkPSJndWMtdHJhY2stdGFibGUtbXV0YXRpb24tbWF4LXN0YWxlbmVzcyIgeHJlZmxh YmVsPSJ0cmFja190YWJsZV9tdXRhdGlvbl9tYXhfc3RhbGVuZXNzIj4KKyAgICA8dGVybT48dmFy bmFtZT50cmFja190YWJsZV9tdXRhdGlvbl9tYXhfc3RhbGVuZXNzPC92YXJuYW1lPiAoPHR5cGU+ aW50ZWdlcjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFt ZT50cmFja190YWJsZV9tdXRhdGlvbl9tYXhfc3RhbGVuZXNzPC92YXJuYW1lPiBjb25maWd1cmF0 aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgor ICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBNYXhpbXVtIGR1cmF0aW9uIGluIG1p bGxpc2Vjb25kcyB0aGF0IGEgc2luZ2xlIHRhYmxlIGVudHJ5IGNhbiBjb250aW51b3VzbHkgZm9y Y2UgcXVlcmllcyB0byBwcmltYXJ5LAorICAgICAgbWVhc3VyZWQgZnJvbSB3aGVuIHRoZSB0YWJs ZSB3YXMgZmlyc3QgbWFya2VkIHN0YWxlLiBXaGVuIHRoaXMgY2FwIGlzIHJlYWNoZWQsIHRoZSBl bnRyeSBpcyBleHBpcmVkCisgICAgICByZWdhcmRsZXNzIG9mIHJlY2VudCB3cml0ZXMuIElmIHRo ZSB0YWJsZSBpcyB3cml0dGVuIHRvIGFnYWluIGFmdGVyIGV4cGlyeSwgYSBmcmVzaCB0cmFja2lu ZyBlbnRyeQorICAgICAgaXMgY3JlYXRlZC4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAg ICAgIFRoaXMgcGFyYW1ldGVyIGJvdW5kcyB0aGUgY3Jvc3Mtc2Vzc2lvbiBpbXBhY3Qgb2YgdGFi bGUgbXV0YXRpb24gdHJhY2tpbmcuIEV2ZW4gaWYgYSB0YWJsZSBpcyB3cml0dGVuCisgICAgICB0 byBpbiBhIHRpZ2h0IGxvb3AsIGl0cyBlZmZlY3Qgb24gb3RoZXIgc2Vzc2lvbnMnIGxvYWQgYmFs YW5jaW5nIGlzIGxpbWl0ZWQgdG8gdGhpcyBkdXJhdGlvbi4gRm9yCisgICAgICBsZWdpdGltYXRl bHkgYnVzeSB0YWJsZXMsIHRoZSBnYXAgYmV0d2VlbiBmb3JjZWQgZXhwaXJ5IGFuZCB0aGUgbmV4 dCB3cml0ZSByZS1tYXJraW5nIHRoZSB0YWJsZSBpcworICAgICAgbmVnbGlnaWJsZSAodHlwaWNh bGx5IG1pbGxpc2Vjb25kcykuCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBTZXQg dG8gMCB0byBkaXNhYmxlIHRoZSBjYXAgKG5vdCByZWNvbW1lbmRlZCBmb3IgcHJvZHVjdGlvbiku CisgICAgICBWYWxpZCByYW5nZTogMC0zNjAwMDAwIG1zLiBEZWZhdWx0IGlzIDxsaXRlcmFsPjYw MDAwPC9saXRlcmFsPiAoNjAgc2Vjb25kcykuCisgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUg Y2hhbmdlZCBieSByZWxvYWRpbmcgdGhlIDxwcm9kdWN0bmFtZT5QZ3Bvb2wtSUk8Lz4gY29uZmln dXJhdGlvbnMuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50 cnk+CisKKyAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy10cmFjay10YWJsZS1tdXRhdGlvbi1jb2xk LXN0YXJ0LWR1cmF0aW9uIiB4cmVmbGFiZWw9InRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3Rh cnRfZHVyYXRpb24iPgorICAgIDx0ZXJtPjx2YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0aW9uX2Nv bGRfc3RhcnRfZHVyYXRpb248L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAg PGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0aW9u X2NvbGRfc3RhcnRfZHVyYXRpb248L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9w cmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgor ICAgICA8cGFyYT4KKyAgICAgIER1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyB0byByb3V0ZSBhbGwg cXVlcmllcyB0byBwcmltYXJ5IGFmdGVyIGEgY2hpbGQgcHJvY2VzcyBzdGFydHMuCisgICAgICBU aGlzIHByZXZlbnRzIHN0YWxlIHJlYWRzIHdoZW4gYSBuZXcgY29ubmVjdGlvbiBpcyBlc3RhYmxp c2hlZCBiZWZvcmUgdGhlIHRyYWNrIHRhYmxlIG11dGF0aW9uCisgICAgICBpcyBwb3B1bGF0ZWQg d2l0aCByZWNlbnQgd3JpdGUgaGlzdG9yeS4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAg ICAgIFdoZW4gd2F0Y2hkb2cgaXMgZW5hYmxlZCBhbmQgdGhlIGxvY2FsIG5vZGUgYmVjb21lcyB0 aGUgbGVhZGVyLCBQZ3Bvb2wtSUkgYWxzbyB0cmlnZ2VycyBhCisgICAgICBnbG9iYWwgY29sZCBz dGFydCBmb3IgdGhpcyBkdXJhdGlvbiB0byBhdm9pZCBzdGFsZSByZWFkcyBhZnRlciBsZWFkZXJz aGlwIGNoYW5nZXMuCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBWYWxpZCByYW5n ZTogMC02MDAwMCBtcy4gRGVmYXVsdCBpcyA8bGl0ZXJhbD4yMDAwPC9saXRlcmFsPiAoMiBzZWNv bmRzKS4KKyAgICAgIFNldCB0byAwIHRvIGRpc2FibGUgY29sZCBzdGFydCBiZWhhdmlvci4KKyAg ICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBjaGFuZ2VkIGJ5IHJlbG9hZGluZyB0aGUgPHByb2R1 Y3RuYW1lPlBncG9vbC1JSTwvPiBjb25maWd1cmF0aW9ucy4KKyAgICAgPC9wYXJhPgorICAgIDwv bGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3Vj LXRyYWNrLXRhYmxlLW11dGF0aW9uLXRhYmxlLWJ1Y2tldHMiIHhyZWZsYWJlbD0idHJhY2tfdGFi bGVfbXV0YXRpb25fdGFibGVfYnVja2V0cyI+CisgICAgPHRlcm0+PHZhcm5hbWU+dHJhY2tfdGFi bGVfbXV0YXRpb25fdGFibGVfYnVja2V0czwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+ KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+dHJhY2tfdGFibGVf bXV0YXRpb25fdGFibGVfYnVja2V0czwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8 L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+ CisgICAgIDxwYXJhPgorICAgICAgTnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgdGhlIHRyYWNr IHRhYmxlIG11dGF0aW9uIGhhc2ggdGFibGUuCisgICAgICBIaWdoZXIgdmFsdWVzIHJlZHVjZSBo YXNoIGNvbGxpc2lvbnMgYW5kIGltcHJvdmUgbG9va3VwIHBlcmZvcm1hbmNlLgorICAgICA8L3Bh cmE+CisgICAgIDxwYXJhPgorICAgICAgVmFsaWQgcmFuZ2U6IDY0LTY1NTM2LiBEZWZhdWx0IGlz IDxsaXRlcmFsPjEwMjQ8L2xpdGVyYWw+LgorICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIG9ubHkg YmUgc2V0IGF0IHNlcnZlciBzdGFydC4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+Cisg ICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLXRyYWNrLXRhYmxl LW11dGF0aW9uLXRhYmxlLXNpemUiIHhyZWZsYWJlbD0idHJhY2tfdGFibGVfbXV0YXRpb25fdGFi bGVfc2l6ZSI+CisgICAgPHRlcm0+PHZhcm5hbWU+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVf c2l6ZTwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgor ICAgICAgPHByaW1hcnk+PHZhcm5hbWU+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZTwv dmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0 ZXJtPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgTWF4 aW11bSBudW1iZXIgb2YgdGFibGVzIHRoYXQgY2FuIGJlIHRyYWNrZWQgc2ltdWx0YW5lb3VzbHkg aW4gdGhlIHRyYWNrIHRhYmxlIG11dGF0aW9uLgorICAgICAgV2hlbiBmdWxsLCBvbGRlc3QgZW50 cmllcyBhcmUgZXZpY3RlZCB1c2luZyBhIHNpbXBsZSBldmljdGlvbiBzdHJhdGVneS4KKyAgICAg PC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFZhbGlkIHJhbmdlOiAxMjgtMTMxMDcyLiBEZWZh dWx0IGlzIDxsaXRlcmFsPjIwNDg8L2xpdGVyYWw+LgorICAgICAgTWVtb3J5IHVzYWdlOiBhcHBy b3hpbWF0ZWx5IDQwIGJ5dGVzIHBlciBlbnRyeS4KKyAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBv bmx5IGJlIHNldCBhdCBzZXJ2ZXIgc3RhcnQuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVt PgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgPC92YXJpYWJsZWxpc3Q+CisKKyAgPHNlY3QzIGlk PSJydW50aW1lLWNvbmZpZy10cmFjay10YWJsZS1tdXRhdGlvbi1leGFtcGxlIj4KKyAgIDx0aXRs ZT5UcmFjayBUYWJsZSBNdXRhdGlvbiBDb25maWd1cmF0aW9uIEV4YW1wbGU8L3RpdGxlPgorICAg PHBhcmE+CisgICAgVG8gZW5hYmxlIHRyYWNrIHRhYmxlIG11dGF0aW9uIHdpdGggcmVwbGljYXRp b24gZGVsYXkgbW9uaXRvcmluZzoKKyAgIDwvcGFyYT4KKyAgIDxwcm9ncmFtbGlzdGluZz4KKyMg RW5hYmxlIGRtbF9hZGFwdGl2ZV9nbG9iYWwgbW9kZSAoaW5jbHVkZXMgdHJhY2sgdGFibGUgbXV0 YXRpb24pCitkaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9ICdkbWxfYWRhcHRpdmVfZ2xv YmFsJwordHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvciA9IDUuMAordHJhY2tfdGFibGVf bXV0YXRpb25fbWF4X3N0YWxlbmVzcyA9IDYwMDAwCit0cmFja190YWJsZV9tdXRhdGlvbl9jb2xk X3N0YXJ0X2R1cmF0aW9uID0gMjAwMAorCisjIE9wdGlvbiBBOiBVc2UgZXh0ZXJuYWwgY29tbWFu ZCBmb3IgcmVwbGljYXRpb24gZGVsYXkKK3JlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQgPSAn L3BhdGgvdG8vZ2V0LXJlcGxpY2F0aW9uLWRlbGF5LnNoJworcmVwbGljYXRpb25fZGVsYXlfc291 cmNlX3RpbWVvdXQgPSAxMAorCisjIE9wdGlvbiBCOiBVc2UgcGdfc3RhdF9yZXBsaWNhdGlvbiBy ZXBsYXlfbGFnIChQRyAxMCspCisjIGRlbGF5X3RocmVzaG9sZF9ieV90aW1lID0gMTAwMAorCisj IEFkanVzdCB0YWJsZSBtYXAgc2l6ZSBiYXNlZCBvbiB3b3JrbG9hZAordHJhY2tfdGFibGVfbXV0 YXRpb25fdGFibGVfc2l6ZSA9IDQwOTYKKyAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICA8cGFyYT4K KyAgICBTaGFyZWQgbWVtb3J5IHJlcXVpcmVkIGZvciBhYm92ZSBjb25maWd1cmF0aW9uOiBhcHBy b3hpbWF0ZWx5IDE2MCBLQiBmb3IgdGhlIHRhYmxlIG1hcC4KKyAgICBEZWZhdWx0IGNvbmZpZ3Vy YXRpb24gKDIwNDggdGFibGVzKSByZXF1aXJlcyBhcHByb3hpbWF0ZWx5IDgwIEtCLgorICAgPC9w YXJhPgorICA8L3NlY3QzPgorCisgIDxzZWN0MyBpZD0icnVudGltZS1jb25maWctdHJhY2stdGFi bGUtbXV0YXRpb24tbGltaXRhdGlvbnMiPgorICAgPHRpdGxlPkxpbWl0YXRpb25zPC90aXRsZT4K KyAgIDxwYXJhPgorICAgIFRoZSB0cmFjayB0YWJsZSBtdXRhdGlvbiBmZWF0dXJlIGhhcyB0aGUg Zm9sbG93aW5nIGxpbWl0YXRpb25zOgorICAgPC9wYXJhPgorICAgPGl0ZW1pemVkbGlzdD4KKyAg ICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGxpdGVyYWw+UFJFUEFSRTwvbGl0ZXJh bD4gc3RhdGVtZW50cyBhcmUgbm90IHRyYWNrZWQuIFdoZW4gYSBwcmVwYXJlZCBzdGF0ZW1lbnQK KyAgICAgIGNvbnRhaW5pbmcgZGF0YSBtb2RpZmljYXRpb24gaXMgZXhlY3V0ZWQsIHRoZSB0YWJs ZSBtdXRhdGlvbiBpcyBub3QgcmVjb3JkZWQuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVt PgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBBIG1heGltdW0gb2YgMTI4IHRh YmxlcyBjYW4gYmUgdHJhY2tlZCBwZXIgU0VMRUNUIHF1ZXJ5IGZvciBzdGFsZW5lc3MgY2hlY2tp bmcuCisgICAgICBUaGlzIGxpbWl0IGlzIHNoYXJlZCB3aXRoIHRoZSBxdWVyeSBjYWNoZSBzdWJz eXN0ZW0KKyAgICAgICg8bGl0ZXJhbD5QT09MX01BWF9TRUxFQ1RfT0lEUzwvbGl0ZXJhbD4pLgor ICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvaXRlbWl6ZWRsaXN0PgorICAgPHBh cmE+CisgICAgSWYgeW91ciBhcHBsaWNhdGlvbiB1c2VzIHByZXBhcmVkIHN0YXRlbWVudHMgYW5k IHJlcXVpcmVzIHJlYWQtYWZ0ZXItd3JpdGUgY29uc2lzdGVuY3ksCisgICAgY29uc2lkZXIgdXNp bmcgZXhwbGljaXQgdHJhbnNhY3Rpb24gcm91dGluZyBvciB0aGUgPGxpdGVyYWw+LypOTyBMT0FE IEJBTEFOQ0UqLzwvbGl0ZXJhbD4KKyAgICBjb21tZW50IGRpcmVjdGl2ZSBmb3IgYWZmZWN0ZWQg cXVlcmllcy4KKyAgIDwvcGFyYT4KKyAgIDxwYXJhPgorICAgIFRoZSBmb2xsb3dpbmcgc3RhdGVt ZW50IHR5cGVzIDxlbXBoYXNpcz5hcmU8L2VtcGhhc2lzPiB0cmFja2VkIGFuZCB3aWxsIG1hcmsg dGFibGVzIGFzIHN0YWxlOgorICAgPC9wYXJhPgorICAgPGl0ZW1pemVkbGlzdD4KKyAgICA8bGlz dGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGxpdGVyYWw+SU5TRVJUPC9saXRlcmFsPiwgPGxp dGVyYWw+VVBEQVRFPC9saXRlcmFsPiwgPGxpdGVyYWw+REVMRVRFPC9saXRlcmFsPgorICAgICAg c3RhdGVtZW50cyAoaW5jbHVkaW5nIHRob3NlIHdpdGggPGxpdGVyYWw+UkVUVVJOSU5HPC9saXRl cmFsPiBjbGF1c2VzKS4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3Rp dGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPlRSVU5DQVRFPC9saXRlcmFsPiBzdGF0 ZW1lbnRzIChpbmNsdWRpbmcgbXVsdGlwbGUgdGFibGVzKS4KKyAgICAgPC9wYXJhPgorICAgIDwv bGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPk1F UkdFPC9saXRlcmFsPiBzdGF0ZW1lbnRzIChQb3N0Z3JlU1FMIDE1KykuCisgICAgIDwvcGFyYT4K KyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0 ZXJhbD5XSVRIPC9saXRlcmFsPiBjbGF1c2VzIGNvbnRhaW5pbmcgZGF0YSBtb2RpZmljYXRpb25z IChDb21tb24gVGFibGUgRXhwcmVzc2lvbnMKKyAgICAgIHdpdGggPGxpdGVyYWw+SU5TRVJUPC9s aXRlcmFsPiwgPGxpdGVyYWw+VVBEQVRFPC9saXRlcmFsPiwgb3IgPGxpdGVyYWw+REVMRVRFPC9s aXRlcmFsPikuCisgICAgICBGb3IgZXhhbXBsZSwgPGxpdGVyYWw+V0lUSCBkZWxldGVkIEFTIChE RUxFVEUgRlJPTSB0MSBSRVRVUk5JTkcgKikgU0VMRUNUICogRlJPTSBkZWxldGVkPC9saXRlcmFs PgorICAgICAgd2lsbCBwcm9wZXJseSBtYXJrIHRhYmxlIDxsaXRlcmFsPnQxPC9saXRlcmFsPiBh cyBzdGFsZS4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L2l0ZW1pemVkbGlz dD4KKyAgIDxwYXJhPgorICAgIDxlbXBoYXNpcz5UcmFuc2FjdGlvbiBSb2xsYmFjayBCZWhhdmlv cjo8L2VtcGhhc2lzPiBXaXRoaW4gZXhwbGljaXQgdHJhbnNhY3Rpb25zLCB0YWJsZXMKKyAgICBh cmUgb25seSBtYXJrZWQgYXMgc3RhbGUgaW4gc2hhcmVkIG1lbW9yeSB3aGVuIHRoZSB0cmFuc2Fj dGlvbiBpcyBjb21taXR0ZWQuIElmIHRoZQorICAgIHRyYW5zYWN0aW9uIGlzIHJvbGxlZCBiYWNr LCBubyB0YWJsZXMgYXJlIG1hcmtlZCwgc2luY2Ugbm8gYWN0dWFsIGRhdGEgbW9kaWZpY2F0aW9u CisgICAgb2NjdXJyZWQgb24gcmVwbGljYXMuIFRoaXMgcHJldmVudHMgcm9sbGVkLWJhY2sgdHJh bnNhY3Rpb25zIGZyb20gdW5uZWNlc3NhcmlseQorICAgIGRpc2FibGluZyBsb2FkIGJhbGFuY2lu Zy4gRm9yIGF1dG9jb21taXQgc3RhdGVtZW50cyAob3V0c2lkZSBleHBsaWNpdCB0cmFuc2FjdGlv bnMpLAorICAgIHRhYmxlcyBhcmUgbWFya2VkIGltbWVkaWF0ZWx5IHVwb24gY29tbWFuZCBjb21w bGV0aW9uLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICA8ZW1waGFzaXM+Q3Jvc3MtU2Vz c2lvbiBJbXBhY3QgYW5kIFNhZmV0eSBCb3VuZHM6PC9lbXBoYXNpcz4KKyAgICBVbmxpa2UgPGxp dGVyYWw+ZG1sX2FkYXB0aXZlPC9saXRlcmFsPiAod2hpY2ggb25seSBhZmZlY3RzIHRoZSBzZXNz aW9uIHRoYXQgaXNzdWVkIHRoZSB3cml0ZSksCisgICAgPGxpdGVyYWw+ZG1sX2FkYXB0aXZlX2ds b2JhbDwvbGl0ZXJhbD4gYWZmZWN0cyBhbGwgc2Vzc2lvbnMgcmVhZGluZyB0aGUgc2FtZSB0YWJs ZSBpbiB0aGUgc2FtZSBkYXRhYmFzZS4KKyAgICBUaGUgZm9sbG93aW5nIHNhZmV0eSBtZWNoYW5p c21zIGJvdW5kIHRoaXMgY3Jvc3Mtc2Vzc2lvbiBpbXBhY3Q6CisgICA8L3BhcmE+CisgICA8aXRl bWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8ZW1waGFzaXM+ TWF4aW11bSBzdGFsZW5lc3MgY2FwOjwvZW1waGFzaXM+IFRoZSA8eHJlZiBsaW5rZW5kPSJndWMt dHJhY2stdGFibGUtbXV0YXRpb24tbWF4LXN0YWxlbmVzcyI+CisgICAgICBwYXJhbWV0ZXIgKGRl ZmF1bHQ6IDYwIHNlY29uZHMpIGxpbWl0cyBob3cgbG9uZyBhbnkgc2luZ2xlIHRhYmxlIGVudHJ5 IGNhbiBjb250aW51b3VzbHkgZm9yY2UgcHJpbWFyeQorICAgICAgcm91dGluZy4gRXZlbiB1bmRl ciBzdXN0YWluZWQgd3JpdGVzLCB0aGUgZW50cnkgZXhwaXJlcyBhZnRlciB0aGlzIHBlcmlvZCBh bmQgaXMgb25seSByZW5ld2VkIGJ5CisgICAgICBzdWJzZXF1ZW50IGNvbW1pdHRlZCB3cml0ZXMu CisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBh cmE+CisgICAgICA8ZW1waGFzaXM+RGF0YWJhc2UgaXNvbGF0aW9uOjwvZW1waGFzaXM+IFRhYmxl IHN0YWxlbmVzcyB0cmFja2luZyBpcyBzY29wZWQgYnkgZGF0YWJhc2UgT0lELiBXcml0ZXMKKyAg ICAgIGluIG9uZSBkYXRhYmFzZSBuZXZlciBhZmZlY3QgbG9hZCBiYWxhbmNpbmcgZGVjaXNpb25z IGZvciBzZXNzaW9ucyBjb25uZWN0ZWQgdG8gYSBkaWZmZXJlbnQgZGF0YWJhc2UuCisgICAgICBJ biBtdWx0aS10ZW5hbnQgZGVwbG95bWVudHMgd2hlcmUgdGVuYW50cyB1c2Ugc2VwYXJhdGUgZGF0 YWJhc2VzLCBvbmUgdGVuYW50J3Mgd3JpdGUgYWN0aXZpdHkgY2Fubm90CisgICAgICBpbmZsdWVu Y2UgYW5vdGhlciB0ZW5hbnQncyBxdWVyeSByb3V0aW5nLgorICAgICA8L3BhcmE+CisgICAgPC9s aXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGVtcGhhc2lzPkNv bW1pdHRlZCB3cml0ZXMgb25seTo8L2VtcGhhc2lzPiBPbmx5IGNvbW1pdHRlZCB0cmFuc2FjdGlv bnMgbWFyayB0YWJsZXMgYXMgc3RhbGUuCisgICAgICBSb2xsZWQtYmFjayB0cmFuc2FjdGlvbnMg aGF2ZSBubyBlZmZlY3Qgb24gdGhlIHNoYXJlZCB0cmFja2luZyBzdGF0ZS4KKyAgICAgPC9wYXJh PgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxl bXBoYXNpcz5Cb3VuZGVkIHRhYmxlIG1hcCBzaXplOjwvZW1waGFzaXM+IFRoZSBzaGFyZWQgbWVt b3J5IHRhYmxlIG1hcCBoYXMgYSBmaXhlZCBtYXhpbXVtIHNpemUKKyAgICAgICg8eHJlZiBsaW5r ZW5kPSJndWMtdHJhY2stdGFibGUtbXV0YXRpb24tdGFibGUtc2l6ZSI+KS4gQXQgbW9zdCB0aGlz IG1hbnkgdGFibGVzIGNhbiBiZSBtYXJrZWQgc3RhbGUKKyAgICAgIHNpbXVsdGFuZW91c2x5LCBw cm92aWRpbmcgYSBuYXR1cmFsIGNlaWxpbmcgb24gdGhlIGZlYXR1cmUncyBpbXBhY3QuCisgICAg IDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC9pdGVtaXplZGxpc3Q+CisgIDwvc2VjdDM+ CisKKyA8L3NlY3QyPgorCiA8L3NlY3QxPgpkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlLmFtIGIv c3JjL01ha2VmaWxlLmFtCmluZGV4IDQ2NzhhYjUzMC4uMzk1ODhhZjU4IDEwMDY0NAotLS0gYS9z cmMvTWFrZWZpbGUuYW0KKysrIGIvc3JjL01ha2VmaWxlLmFtCkBAIC0zNSw2ICszNSw3IEBAIHBn cG9vbF9TT1VSQ0VTID0gbWFpbi9tYWluLmMgXAogCXJld3JpdGUvcG9vbF90aW1lc3RhbXAuYyBc CiAJcmV3cml0ZS9wb29sX2xvYmouYyBcCiAJdXRpbHMvcG9vbF9zZWxlY3Rfd2Fsa2VyLmMgXAor CXV0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uYyBcCiAJdXRpbHMvc3RybGNweS5jIFwK IAl1dGlscy9wc3ByaW50Zi5jIFwKIAl1dGlscy9wb29sX3BhcmFtcy5jIFwKZGlmZiAtLWdpdCBh L3NyYy9jb25maWcvcG9vbF9jb25maWdfdmFyaWFibGVzLmMgYi9zcmMvY29uZmlnL3Bvb2xfY29u ZmlnX3ZhcmlhYmxlcy5jCmluZGV4IGI3NzViMjEwNi4uMzAzOWUzMmYwIDEwMDY0NAotLS0gYS9z cmMvY29uZmlnL3Bvb2xfY29uZmlnX3ZhcmlhYmxlcy5jCisrKyBiL3NyYy9jb25maWcvcG9vbF9j b25maWdfdmFyaWFibGVzLmMKQEAgLTI5MCw2ICsyOTAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 IGNvbmZpZ19lbnVtX2VudHJ5IGRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlX29wdGlvbnNb XSA9CiAJeyJ0cmFuc190cmFuc2FjdGlvbiIsIERMQk9XX1RSQU5TX1RSQU5TQUNUSU9OLCBmYWxz ZX0sCiAJeyJhbHdheXMiLCBETEJPV19BTFdBWVMsIGZhbHNlfSwKIAl7ImRtbF9hZGFwdGl2ZSIs IERMQk9XX0RNTF9BREFQVElWRSwgZmFsc2V9LAorCXsiZG1sX2FkYXB0aXZlX2dsb2JhbCIsIERM Qk9XX0RNTF9BREFQVElWRV9HTE9CQUwsIGZhbHNlfSwKIAl7TlVMTCwgMCwgZmFsc2V9CiB9Owog CkBAIC0xNzc3LDYgKzE3NzgsMTkgQEAgc3RhdGljIHN0cnVjdCBjb25maWdfaW50X2FycmF5IENv bmZpZ3VyZU5hbWVzSW50QXJyYXlbXSA9CiAKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2RvdWJsZSBD b25maWd1cmVOYW1lc0RvdWJsZVtdID0KIHsKKwl7CisJCXsidHJhY2tfdGFibGVfbXV0YXRpb25f dHRsX2ZhY3RvciIsCisJCQlDRkdDWFRfUkVMT0FELCBMT0FEX0JBTEFOQ0VfQ09ORklHLAorCQkJ IlRUTCBtdWx0aXBsaWVyIGZvciB0cmFjayB0YWJsZSBtdXRhdGlvbiAiCisJCQkiKFRUTCA9IHJl cGxpY2F0aW9uX2RlbGF5ICogZmFjdG9yKSIsCisJCQlDT05GSUdfVkFSX1RZUEVfRE9VQkxFLCBm YWxzZSwgMAorCQl9LAorCQkmZ19wb29sX2NvbmZpZy50cmFja190YWJsZV9tdXRhdGlvbl90dGxf ZmFjdG9yLAorCQk1LjAsCQkJCQkvKiBib290IHZhbHVlOiA1eCByZXBsaWNhdGlvbiBkZWxheSAq LworCQkxLjAsIDEwMC4wLAkJCQkvKiBtaW4sIG1heCAqLworCQlOVUxMLCBOVUxMLCBOVUxMCisJ fSwKKwogCS8qIEVuZC1vZi1saXN0IG1hcmtlciAqLwogCUVNUFRZX0NPTkZJR19ET1VCTEUKIH07 CkBAIC0yMzk3LDYgKzI0MTEsNTcgQEAgc3RhdGljIHN0cnVjdCBjb25maWdfaW50IENvbmZpZ3Vy ZU5hbWVzSW50W10gPQogCQlOVUxMLCBOVUxMLCBOVUxMCiAJfSwKIAorCXsKKwkJeyJ0cmFja190 YWJsZV9tdXRhdGlvbl9tYXhfc3RhbGVuZXNzIiwKKwkJCUNGR0NYVF9SRUxPQUQsIExPQURfQkFM QU5DRV9DT05GSUcsCisJCQkiTWF4aW11bSBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgdGhhdCBh ICIKKwkJCSJ0YWJsZSBjYW4gYmUgbWFya2VkIHN0YWxlIGZyb20gaXRzIGZpcnN0ICIKKwkJCSJ3 cml0ZS4gMCBkaXNhYmxlcyB0aGUgY2FwLiIsCisJCQlDT05GSUdfVkFSX1RZUEVfSU5ULCBmYWxz ZSwgR1VDX1VOSVRfTVMKKwkJfSwKKwkJJmdfcG9vbF9jb25maWcudHJhY2tfdGFibGVfbXV0YXRp b25fbWF4X3N0YWxlbmVzcywKKwkJNjAwMDAsCQkJCQkvKiA2MCBzZWNvbmRzICovCisJCTAsIDM2 MDAwMDAsCQkJCS8qIDAgdG8gMSBob3VyICovCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCisJ eworCQl7InRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb24iLAorCQkJQ0ZH Q1hUX1JFTE9BRCwgTE9BRF9CQUxBTkNFX0NPTkZJRywKKwkJCSJEdXJhdGlvbiBpbiBtaWxsaXNl Y29uZHMgdG8gZm9yY2UgcXVlcmllcyAiCisJCQkidG8gcHJpbWFyeSBhZnRlciBjaGlsZCBwcm9j ZXNzIHN0YXJ0cy4iLAorCQkJQ09ORklHX1ZBUl9UWVBFX0lOVCwgZmFsc2UsIEdVQ19VTklUX01T CisJCX0sCisJCSZnX3Bvb2xfY29uZmlnLnRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRf ZHVyYXRpb24sCisJCTIwMDAsCQkJCQkvKiAyIHNlY29uZHMgKi8KKwkJMCwgNjAwMDAsCQkJCS8q IDAgdG8gNjAgc2Vjb25kcyAqLworCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKworCXsKKwkJeyJ0 cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9idWNrZXRzIiwKKwkJCUNGR0NYVF9JTklULCBMT0FE X0JBTEFOQ0VfQ09ORklHLAorCQkJIk51bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIHRyYWNrIHRh YmxlIG11dGF0aW9uLiIsCisJCQlDT05GSUdfVkFSX1RZUEVfSU5ULCBmYWxzZSwgMAorCQl9LAor CQkmZ19wb29sX2NvbmZpZy50cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9idWNrZXRzLAorCQkx MDI0LAorCQk2NCwgNjU1MzYsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCisJeworCQl7InRy YWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemUiLAorCQkJQ0ZHQ1hUX0lOSVQsIExPQURfQkFM QU5DRV9DT05GSUcsCisJCQkiTWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBpbiB0cmFjayB0YWJs ZSBtdXRhdGlvbi4iLAorCQkJQ09ORklHX1ZBUl9UWVBFX0lOVCwgZmFsc2UsIDAKKwkJfSwKKwkJ JmdfcG9vbF9jb25maWcudHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZSwKKwkJMjA0OCwK KwkJMTI4LCAxMzEwNzIsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCiAJLyogRW5kLW9mLWxp c3QgbWFya2VyICovCiAJRU1QVFlfQ09ORklHX0lOVAogfTsKZGlmZiAtLWdpdCBhL3NyYy9jb250 ZXh0L3Bvb2xfcXVlcnlfY29udGV4dC5jIGIvc3JjL2NvbnRleHQvcG9vbF9xdWVyeV9jb250ZXh0 LmMKaW5kZXggNzNiYzY0MzM4Li4xNmFjMzQ4MjUgMTAwNjQ0Ci0tLSBhL3NyYy9jb250ZXh0L3Bv b2xfcXVlcnlfY29udGV4dC5jCisrKyBiL3NyYy9jb250ZXh0L3Bvb2xfcXVlcnlfY29udGV4dC5j CkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAidXRpbHMvc3RhdGlzdGljcy5oIgogI2luY2x1 ZGUgInV0aWxzL3Bvb2xfc2VsZWN0X3dhbGtlci5oIgogI2luY2x1ZGUgInV0aWxzL3Bvb2xfc3Ry ZWFtLmgiCisjaW5jbHVkZSAidXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5oIgogI2lu Y2x1ZGUgImNvbnRleHQvcG9vbF9zZXNzaW9uX2NvbnRleHQuaCIKICNpbmNsdWRlICJjb250ZXh0 L3Bvb2xfcXVlcnlfY29udGV4dC5oIgogI2luY2x1ZGUgInBhcnNlci9ub2Rlcy5oIgpAQCAtNzEs NiArNzIsOCBAQCBzdGF0aWMgYm9vbCBhZGRfb2JqZWN0X2ludG9fdGVtcF93cml0ZV9saXN0KE5v ZGUgKm5vZGUsIHZvaWQgKmNvbnRleHQpOwogc3RhdGljIHZvaWQgZG1sX2FkYXB0aXZlKE5vZGUg Km5vZGUsIGNoYXIgKnF1ZXJ5KTsKIHN0YXRpYyBjaGFyICpnZXRfYXNzb2NpYXRlZF9vYmplY3Rf ZnJvbV9kbWxfYWRhcHRpdmVfcmVsYXRpb25zCiAJCQkoY2hhciAqbGVmdF90b2tlbiwgREJPYmpl Y3RUeXBlcyBvYmplY3RfdHlwZSk7CitzdGF0aWMgdm9pZCB3aGVyZV90b19zZW5kX2RtbF9hZGFw dGl2ZV9nbG9iYWwoUE9PTF9RVUVSWV9DT05URVhUICpxdWVyeV9jb250ZXh0LAorCQkJCQkJCQkJ CQkgIGNoYXIgKnF1ZXJ5LCBOb2RlICpub2RlLCBQT09MX0RFU1QgZGVzdCk7CiAKIC8qCiAgKiBD cmVhdGUgYW5kIGluaXRpYWxpemUgcGVyIHF1ZXJ5IHNlc3Npb24gY29udGV4dApAQCAtODgsMTMg KzkxLDEzIEBAIHBvb2xfaW5pdF9xdWVyeV9jb250ZXh0KHZvaWQpCiAJICogUGFyZW50IHRoZSBx dWVyeSBjb250ZXh0IHVuZGVyIHRoZSBzZXNzaW9uIG1lbW9yeSBjb250ZXh0IHJhdGhlciB0aGFu CiAJICogdGhlIHBlci1pdGVyYXRpb24gUXVlcnlDb250ZXh0LiAgQSBxdWVyeSBjb250ZXh0IGlz IHJlZmVyZW5jZWQgZnJvbSB0aGUKIAkgKiBzZXNzaW9uIHNjb3BlZCBzZW50IG1lc3NhZ2UgbGlz dCBhbmQgcGVuZGluZyBtZXNzYWdlIGxpc3QuICBUaGVzZSBsaXN0cwotCSAqIG91dGxpdmUgdGhl IFF1ZXJ5Q29udGV4dCwgd2hpY2ggZG9fY2hpbGQoKSByZXNldHMgYmV0d2VlbiB0aGUgaXRlcmF0 aW9ucwotCSAqIG9mIGl0cyBxdWVyeSBwcm9jZXNzaW5nIGxvb3AgKGZvciBpbnN0YW5jZSB3aGVu IHBvb2xfcHJvY2Vzc19xdWVyeSgpCi0JICogcmV0dXJucyBhZnRlciBhIGJhY2tlbmQgbm9kZSB3 YXMgc2h1dCBkb3duKS4gIElmIHRoZSBxdWVyeSBjb250ZXh0IGxpdmVkCi0JICogaW4gUXVlcnlD b250ZXh0LCBzdWNoIGEgcmVzZXQgd291bGQgZnJlZSBpdCB3aGlsZSB0aGUgbWVzc2FnZSBsaXN0 cwotCSAqIHN0aWxsIHJlZmVyZW5jZSBpdCwgcmVzdWx0aW5nIGluIGEgdXNlLWFmdGVyLWZyZWUu ICBXaGVuIHRoZXJlIGlzIG5vCi0JICogc2Vzc2lvbiBjb250ZXh0IChlLmcuIGludGVybmFsIHF1 ZXJpZXMgaXNzdWVkIGJlZm9yZSBhIHNlc3Npb24gZXhpc3RzKSwKLQkgKiBmYWxsIGJhY2sgdG8g UXVlcnlDb250ZXh0LgorCSAqIG91dGxpdmUgdGhlIFF1ZXJ5Q29udGV4dCwgd2hpY2ggZG9fY2hp bGQoKSByZXNldHMgYmV0d2VlbiB0aGUKKwkgKiBpdGVyYXRpb25zIG9mIGl0cyBxdWVyeSBwcm9j ZXNzaW5nIGxvb3AgKGZvciBpbnN0YW5jZSB3aGVuCisJICogcG9vbF9wcm9jZXNzX3F1ZXJ5KCkg cmV0dXJucyBhZnRlciBhIGJhY2tlbmQgbm9kZSB3YXMgc2h1dCBkb3duKS4gIElmCisJICogdGhl IHF1ZXJ5IGNvbnRleHQgbGl2ZWQgaW4gUXVlcnlDb250ZXh0LCBzdWNoIGEgcmVzZXQgd291bGQg ZnJlZSBpdAorCSAqIHdoaWxlIHRoZSBtZXNzYWdlIGxpc3RzIHN0aWxsIHJlZmVyZW5jZSBpdCwg cmVzdWx0aW5nIGluIGEKKwkgKiB1c2UtYWZ0ZXItZnJlZS4gIFdoZW4gdGhlcmUgaXMgbm8gc2Vz c2lvbiBjb250ZXh0IChlLmcuIGludGVybmFsCisJICogcXVlcmllcyBpc3N1ZWQgYmVmb3JlIGEg c2Vzc2lvbiBleGlzdHMpLCBmYWxsIGJhY2sgdG8gUXVlcnlDb250ZXh0LgogCSAqLwogCXNlc3Np b25fY29udGV4dCA9IHBvb2xfZ2V0X3Nlc3Npb25fY29udGV4dCh0cnVlKTsKIAlwYXJlbnQgPSBz ZXNzaW9uX2NvbnRleHQgPyBzZXNzaW9uX2NvbnRleHQtPm1lbW9yeV9jb250ZXh0IDogUXVlcnlD b250ZXh0OwpAQCAtMTg0OCwyMCArMTg1MSwyNSBAQCBpc19pbl9saXN0KGNoYXIgKm5hbWUsIExp c3QgKmxpc3QpCiBzdGF0aWMgYm9vbAogaXNfc2VsZWN0X29iamVjdF9pbl90ZW1wX3dyaXRlX2xp c3QoTm9kZSAqbm9kZSwgdm9pZCAqY29udGV4dCkKIHsKLQlpZiAobm9kZSA9PSBOVUxMIHx8IHBv b2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSAhPSBETEJPV19ETUxfQURB UFRJVkUpCisJaWYgKG5vZGUgPT0gTlVMTCB8fAorCQkhRExCT1dfSVNfRE1MX0FEQVBUSVZFKHBv b2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSkpCiAJCXJldHVybiBmYWxz ZTsKIAogCWlmIChJc0Eobm9kZSwgUmFuZ2VWYXIpKQogCXsKIAkJUmFuZ2VWYXIgICAqcmd2ID0g KFJhbmdlVmFyICopIG5vZGU7Ci0JCVBPT0xfU0VTU0lPTl9DT05URVhUICpzZXNzaW9uX2NvbnRl eHQgPSBwb29sX2dldF9zZXNzaW9uX2NvbnRleHQoZmFsc2UpOworCQlQT09MX1NFU1NJT05fQ09O VEVYVCAqc2Vzc2lvbl9jb250ZXh0OwogCi0JCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2Fk X2JhbGFuY2Vfb25fd3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFICYmIHNlc3Npb25fY29udGV4 dC0+aXNfaW5fdHJhbnNhY3Rpb24pCisJCXNlc3Npb25fY29udGV4dCA9IHBvb2xfZ2V0X3Nlc3Np b25fY29udGV4dChmYWxzZSk7CisKKwkJaWYgKHNlc3Npb25fY29udGV4dC0+aXNfaW5fdHJhbnNh Y3Rpb24pCiAJCXsKIAkJCWVyZXBvcnQoREVCVUcxLAotCQkJCQkoZXJybXNnKCJpc19zZWxlY3Rf b2JqZWN0X2luX3RlbXBfd3JpdGVfbGlzdDogXCIlc1wiLCBmb3VuZCByZWxhdGlvbiBcIiVzXCIi LCAoY2hhciAqKSBjb250ZXh0LCByZ3YtPnJlbG5hbWUpKSk7CisJCQkJCShlcnJtc2coImlzX3Nl bGVjdF9vYmplY3RfaW5fdGVtcF93cml0ZV9saXN0OiBcIiVzXCIsIGZvdW5kIHJlbGF0aW9uIFwi JXNcIiIsCisJCQkJCQkJKGNoYXIgKikgY29udGV4dCwgcmd2LT5yZWxuYW1lKSkpOwogCi0JCQly ZXR1cm4gaXNfaW5fbGlzdChyZ3YtPnJlbG5hbWUsIHNlc3Npb25fY29udGV4dC0+dHJhbnNhY3Rp b25fdGVtcF93cml0ZV9saXN0KTsKKwkJCXJldHVybiBpc19pbl9saXN0KHJndi0+cmVsbmFtZSwK KwkJCQkJCQkgIHNlc3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9saXN0KTsK IAkJfQogCX0KIApAQCAtMTkwMCw3ICsxOTA4LDE0IEBAIHN0YXRpYyBjaGFyICpnZXRfYXNzb2Np YXRlZF9vYmplY3RfZnJvbV9kbWxfYWRhcHRpdmVfcmVsYXRpb25zCiB2b2lkCiBjaGVja19vYmpl Y3RfcmVsYXRpb25zaGlwX2xpc3QoY2hhciAqbmFtZSwgYm9vbCBpc19mdW5jX25hbWUpCiB7Ci0J aWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9PSBETEJPV19E TUxfQURBUFRJVkUgJiYgcG9vbF9jb25maWctPnBhcnNlZF9kbWxfYWRhcHRpdmVfb2JqZWN0X3Jl bGF0aW9uc2hpcF9saXN0KQorCWJvb2wJCWlzX2FkYXB0aXZlOworCisJaXNfYWRhcHRpdmUgPQor CQkocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09CisJCSBETEJP V19ETUxfQURBUFRJVkUpOworCisJaWYgKGlzX2FkYXB0aXZlICYmCisJCXBvb2xfY29uZmlnLT5w YXJzZWRfZG1sX2FkYXB0aXZlX29iamVjdF9yZWxhdGlvbnNoaXBfbGlzdCkKIAl7CiAJCVBPT0xf U0VTU0lPTl9DT05URVhUICpzZXNzaW9uX2NvbnRleHQgPSBwb29sX2dldF9zZXNzaW9uX2NvbnRl eHQoZmFsc2UpOwogCkBAIC0xOTY3LDcgKzE5ODIsNyBAQCBhZGRfb2JqZWN0X2ludG9fdGVtcF93 cml0ZV9saXN0KE5vZGUgKm5vZGUsIHZvaWQgKmNvbnRleHQpCiBzdGF0aWMgdm9pZAogZG1sX2Fk YXB0aXZlKE5vZGUgKm5vZGUsIGNoYXIgKnF1ZXJ5KQogewotCWlmIChwb29sX2NvbmZpZy0+ZGlz YWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFKQorCWlmIChE TEJPV19JU19ETUxfQURBUFRJVkUocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29u X3dyaXRlKSkKIAl7CiAJCS8qIFNldC9VbnNldCB0cmFuc2FjdGlvbiBzdGF0dXMgZmxhZ3MgKi8K IAkJaWYgKElzQShub2RlLCBUcmFuc2FjdGlvblN0bXQpKQpAQCAtMTk4MSwxNyArMTk5Niw0NSBA QCBkbWxfYWRhcHRpdmUoTm9kZSAqbm9kZSwgY2hhciAqcXVlcnkpCiAKIAkJCQlpZiAoc2Vzc2lv bl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX2xpc3QgIT0gTklMKQogCQkJCQlsaXN0 X2ZyZWVfZGVlcChzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVfbGlzdCk7 Ci0KIAkJCQlzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVfbGlzdCA9IE5J TDsKKworCQkJCWlmIChzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVfb2lk X2xpc3QgIT0gTklMKQorCQkJCQlsaXN0X2ZyZWUoc2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlv bl90ZW1wX3dyaXRlX29pZF9saXN0KTsKKwkJCQlzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0aW9u X3RlbXBfd3JpdGVfb2lkX2xpc3QgPSBOSUw7CisJCQkJc2Vzc2lvbl9jb250ZXh0LT50cmFuc2Fj dGlvbl90ZW1wX3dyaXRlX2Rib2lkID0gMDsKIAkJCX0KIAkJCWVsc2UgaWYgKGlzX2NvbW1pdF9v cl9yb2xsYmFja19xdWVyeShub2RlKSkKIAkJCXsKIAkJCQlzZXNzaW9uX2NvbnRleHQtPmlzX2lu X3RyYW5zYWN0aW9uID0gZmFsc2U7CiAKKwkJCQkvKiBUaGUgbmFtZSBsaXN0IGlzIG9ubHkgdXNl ZCBkdXJpbmcgdGhlIHRyYW5zYWN0aW9uLiAqLwogCQkJCWlmIChzZXNzaW9uX2NvbnRleHQtPnRy YW5zYWN0aW9uX3RlbXBfd3JpdGVfbGlzdCAhPSBOSUwpCiAJCQkJCWxpc3RfZnJlZV9kZWVwKHNl c3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9saXN0KTsKLQogCQkJCXNlc3Np b25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9saXN0ID0gTklMOworCisJCQkJLyoK KwkJCQkgKiBGb3IgZG1sX2FkYXB0aXZlX2dsb2JhbCB0aGUgcmVzb2x2ZWQgd3JpdGUgT0lEcyBt dXN0IGJlCisJCQkJICogZmx1c2hlZCB0byBzaGFyZWQgbWVtb3J5IG9ubHkgYWZ0ZXIgdGhlIGJh Y2tlbmQgY29uZmlybXMKKwkJCQkgKiB0aGUgQ09NTUlUIHN1Y2NlZWRlZC4gIFRoaXMgY29kZSBy dW5zIHdoaWxlIHJvdXRpbmcgdGhlCisJCQkJICogQ09NTUlULCBiZWZvcmUgaXQgaXMgc2VudCB0 byB0aGUgYmFja2VuZCwgc28gdGhlIENPTU1JVCBtYXkKKwkJCQkgKiBzdGlsbCBmYWlsIChlLmcu IGEgZGVmZXJyZWQgY29uc3RyYWludCB2aW9sYXRpb24pLCByb2xsaW5nCisJCQkJICogYmFjayB0 aGUgd3JpdGVzIC0tIHdoaWNoIG11c3QgdGhlbiBub3QgYmUgcmVjb3JkZWQuICBXZQorCQkJCSAq IHRoZXJlZm9yZSBrZWVwIHRyYW5zYWN0aW9uX3RlbXBfd3JpdGVfb2lkX2xpc3QgaW50YWN0IG9u CisJCQkJICogQ09NTUlUIGFuZCBsZXQgaGFuZGxlX3F1ZXJ5X2NvbnRleHQoKSBmbHVzaCBpdCBv biBzdWNjZXNzCisJCQkJICogKGEgZmFpbGVkIENPTU1JVCBsZWF2ZXMgaXQgdG8gYmUgZGlzY2Fy ZGVkIGJ5IHRoZSBuZXh0CisJCQkJICogQkVHSU4pLgorCQkJCSAqCisJCQkJICogSW4gZXZlcnkg b3RoZXIgY2FzZSAocGxhaW4gZG1sX2FkYXB0aXZlLCBvciBST0xMQkFDSykKKwkJCQkgKiBkaXNj YXJkIGl0IG5vdy4KKwkJCQkgKi8KKwkJCQlpZiAoIShwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2Fk X2JhbGFuY2Vfb25fd3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JBTCAmJgorCQkJCQkg IGlzX2NvbW1pdF9xdWVyeShub2RlKSkpCisJCQkJeworCQkJCQlpZiAoc2Vzc2lvbl9jb250ZXh0 LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX29pZF9saXN0ICE9IE5JTCkKKwkJCQkJCWxpc3RfZnJl ZShzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVfb2lkX2xpc3QpOworCQkJ CQlzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVfb2lkX2xpc3QgPSBOSUw7 CisJCQkJCXNlc3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9kYm9pZCA9IDA7 CisJCQkJfQogCQkJfQogCiAJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkX2NvbnRleHQpOwpA QCAtMjAwMyw4ICsyMDQ2LDE2MCBAQCBkbWxfYWRhcHRpdmUoTm9kZSAqbm9kZSwgY2hhciAqcXVl cnkpCiAJCSAqIHRlbXAgd3JpdGUgbGlzdC4KIAkJICovCiAJCWlmICghaXNfc2VsZWN0X3F1ZXJ5 KG5vZGUsIHF1ZXJ5KSkKKwkJewogCQkJYWRkX29iamVjdF9pbnRvX3RlbXBfd3JpdGVfbGlzdChu b2RlLCBxdWVyeSk7CiAKKwkJCS8qCisJCQkgKiBGb3IgZG1sX2FkYXB0aXZlX2dsb2JhbCwgcmVz b2x2ZSB0aGUgT0lEcyBvZiB0aGUgdGFibGVzCisJCQkgKiBhY3R1YWxseSB3cml0dGVuIGJ5IHRo aXMgc3RhdGVtZW50IG5vdywgd2hpbGUgd2UgYXJlIHJvdXRpbmcgaXQKKwkJCSAqIGFuZCB0aGUg YmFja2VuZCBjb25uZWN0aW9uIGlzIGlkbGUgc28gZG9fcXVlcnkgKHVzZWQgYnkgdGhlCisJCQkg KiByZWxjYWNoZSBsb29rdXBzKSBpcyBzYWZlLiAgVGhlIE9JRHMgYXJlIG1hcmtlZCBpbiBzaGFy ZWQKKwkJCSAqIG1lbW9yeSBvbmx5IGFmdGVyIHRoZSBiYWNrZW5kIGNvbmZpcm1zIHN1Y2Nlc3Ms IGluCisJCQkgKiBoYW5kbGVfcXVlcnlfY29udGV4dCgpOyByZXNvbHZpbmcgdGhlbSB0aGVyZSB3 b3VsZCBpc3N1ZQorCQkJICogZG9fcXVlcnkgaW50byB0aGUgaW4tZmxpZ2h0IHN0YXRlbWVudC9D T01NSVQgcmVzcG9uc2UgYW5kIGhhbmcKKwkJCSAqIHRoZSBzZXNzaW9uLgorCQkJICovCisJCQlp ZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RN TF9BREFQVElWRV9HTE9CQUwpCisJCQl7CisJCQkJUE9PTF9TRVNTSU9OX0NPTlRFWFQgKnNlc3Np b25fY29udGV4dCA9IHBvb2xfZ2V0X3Nlc3Npb25fY29udGV4dChmYWxzZSk7CisJCQkJTWVtb3J5 Q29udGV4dCBvbGRfY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhzZXNzaW9uX2NvbnRl eHQtPm1lbW9yeV9jb250ZXh0KTsKKwkJCQlpbnQJCSAgICpvaWRzOworCQkJCWludAkJCW51bV9v aWRzOworCQkJCWludAkJCWk7CisKKwkJCQkvKgorCQkJCSAqIE91dHNpZGUgYW4gZXhwbGljaXQg dHJhbnNhY3Rpb24gZWFjaCBzdGF0ZW1lbnQgc3RhbmRzCisJCQkJICogYWxvbmU6IGRpc2NhcmQg YW55IE9JRHMgbGVmdCBvdmVyIGZyb20gYSBwcmV2aW91cyAoZS5nLgorCQkJCSAqIGZhaWxlZCkg YXV0b2NvbW1pdCBzdGF0ZW1lbnQgc28gdGhleSBhcmUgbm90IG1hcmtlZCBieSB0aGlzCisJCQkJ ICogb25lLiBJbnNpZGUgYSB0cmFuc2FjdGlvbiB3ZSBhY2N1bXVsYXRlIHVudGlsIENPTU1JVC4K KwkJCQkgKi8KKwkJCQlpZiAoIXNlc3Npb25fY29udGV4dC0+aXNfaW5fdHJhbnNhY3Rpb24pCisJ CQkJeworCQkJCQlpZiAoc2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX29p ZF9saXN0ICE9IE5JTCkKKwkJCQkJCWxpc3RfZnJlZShzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0 aW9uX3RlbXBfd3JpdGVfb2lkX2xpc3QpOworCQkJCQlzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0 aW9uX3RlbXBfd3JpdGVfb2lkX2xpc3QgPSBOSUw7CisJCQkJCXNlc3Npb25fY29udGV4dC0+dHJh bnNhY3Rpb25fdGVtcF93cml0ZV9kYm9pZCA9IDA7CisJCQkJfQorCisJCQkJbnVtX29pZHMgPSBw b29sX2V4dHJhY3RfdGFibGVfb2lkcyhub2RlLCAmb2lkcyk7CisJCQkJZm9yIChpID0gMDsgaSA8 IG51bV9vaWRzOyBpKyspCisJCQkJeworCQkJCQlpZiAob2lkc1tpXSA+IDApCisJCQkJCQlzZXNz aW9uX2NvbnRleHQtPnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVfb2lkX2xpc3QgPQorCQkJCQkJCWxp c3RfYXBwZW5kX3VuaXF1ZV9pbnQoc2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dy aXRlX29pZF9saXN0LCBvaWRzW2ldKTsKKwkJCQl9CisKKwkJCQlpZiAoc2Vzc2lvbl9jb250ZXh0 LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX29pZF9saXN0ICE9IE5JTCAmJgorCQkJCQlzZXNzaW9u X2NvbnRleHQtPnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVfZGJvaWQgPD0gMCkKKwkJCQkJc2Vzc2lv bl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX2Rib2lkID0KKwkJCQkJCXBvb2xfdHJh Y2tfdGFibGVfbXV0YXRpb25fZ2V0X2RhdGFiYXNlX29pZCgpOworCisJCQkJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKG9sZF9jb250ZXh0KTsKKwkJCX0KKwkJfQorCisJfQorfQorCisvKgorICogRGVj aWRlIHRoZSBiYWNrZW5kIG5vZGUgZm9yIGEgbG9hZC1iYWxhbmNlYWJsZSBTRUxFQ1Qgd2hlbgor ICogZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPSBkbWxfYWRhcHRpdmVfZ2xvYmFsLiAg SWYgdGhlIGNoaWxkIGlzIGluIGl0cworICogY29sZCBzdGFydCB3aW5kb3csIHRoZSBkYXRhYmFz ZSBPSUQgY2Fubm90IGJlIHJlc29sdmVkLCBvciBhbnkgdGFibGUgdXNlZCBieQorICogdGhlIFNF TEVDVCB3YXMgcmVjZW50bHkgd3JpdHRlbiAodHJhY2tlZCBpbiBzaGFyZWQgbWVtb3J5KSwgdGhl IHF1ZXJ5IGlzCisgKiByb3V0ZWQgdG8gdGhlIHByaW1hcnkgdG8gYXZvaWQgYSBzdGFsZSByZWFk LiAgT3RoZXJ3aXNlIHRoZSB1c3VhbCBsb2FkCisgKiBiYWxhbmNpbmcgbG9naWMgKHN0YXRlbWVu dCBsZXZlbCBsb2FkIGJhbGFuY2luZyBhbmQgcmVwbGljYXRpb24gZGVsYXkKKyAqIGhhbmRsaW5n KSBpcyBhcHBsaWVkLiAgRmFjdG9yZWQgb3V0IG9mIHdoZXJlX3RvX3NlbmRfbWFpbl9yZXBsaWNh KCkgdG8ga2VlcAorICogdGhhdCBmdW5jdGlvbiByZWFkYWJsZS4KKyAqLworc3RhdGljIHZvaWQK K3doZXJlX3RvX3NlbmRfZG1sX2FkYXB0aXZlX2dsb2JhbChQT09MX1FVRVJZX0NPTlRFWFQgKnF1 ZXJ5X2NvbnRleHQsCisJCQkJCQkJCSAgY2hhciAqcXVlcnksIE5vZGUgKm5vZGUsIFBPT0xfREVT VCBkZXN0KQoreworCVBPT0xfU0VTU0lPTl9DT05URVhUICpzZXNzaW9uX2NvbnRleHQgPSBwb29s X2dldF9zZXNzaW9uX2NvbnRleHQoZmFsc2UpOworCVBPT0xfUVVFUllfQ09OVEVYVCAqcWN0eCA9 IHNlc3Npb25fY29udGV4dC0+cXVlcnlfY29udGV4dDsKKwlib29sCQlmb3JjZV9wcmltYXJ5ID0g ZmFsc2U7CisJaW50CQkJbGJfbm9kZTsKKworCWlmIChwb29sX3RyYWNrX3RhYmxlX211dGF0aW9u X2luX2NvbGRfc3RhcnQoKSkKKwl7CisJCWVyZXBvcnQoREVCVUcxLAorCQkJCShlcnJtc2coImNv dWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSBvZiB0cmFjayB0YWJsZSBtdXRhdGlvbiBjb2xk IHN0YXJ0IiksCisJCQkJIGVycmRldGFpbCgiZGVzdGluYXRpb24gPSBQUklNQVJZIGZvciBxdWVy eT0gXCIlc1wiIiwgcXVlcnkpKSk7CisJCWZvcmNlX3ByaW1hcnkgPSB0cnVlOworCX0KKwllbHNl CisJeworCQlTZWxlY3RDb250ZXh0IGN0eDsKKwkJaW50CQkJZGJvaWQ7CisJCWludAkJCW51bV9v aWRzOworCQlpbnQJCQlpOworCisJCW1lbXNldCgmY3R4LCAwLCBzaXplb2YoY3R4KSk7CisJCW51 bV9vaWRzID0gcG9vbF9leHRyYWN0X3RhYmxlX29pZHNfZnJvbV9zZWxlY3Rfc3RtdChub2RlLCAm Y3R4KTsKKwkJaWYgKG51bV9vaWRzID4gMCkKKwkJeworCQkJZGJvaWQgPSBwb29sX3RyYWNrX3Rh YmxlX211dGF0aW9uX2dldF9kYXRhYmFzZV9vaWQoKTsKKworCQkJaWYgKGRib2lkIDw9IDApCisJ CQl7CisJCQkJZXJlcG9ydChERUJVRzEsCisJCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgbG9hZCBi YWxhbmNlIGJlY2F1c2UgZGF0YWJhc2Ugb2lkIHdhcyB1bmF2YWlsYWJsZSIpLAorCQkJCQkJIGVy cmRldGFpbCgiZGVzdGluYXRpb24gPSBQUklNQVJZIGZvciBxdWVyeT0gXCIlc1wiIiwgcXVlcnkp KSk7CisJCQkJZm9yY2VfcHJpbWFyeSA9IHRydWU7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJ Zm9yIChpID0gMDsgaSA8IG51bV9vaWRzOyBpKyspCisJCQkJeworCQkJCQlpZiAocG9vbF90cmFj a190YWJsZV9tdXRhdGlvbl90YWJsZV9pc19zdGFsZShjdHgudGFibGVfb2lkc1tpXSwgZGJvaWQp KQorCQkJCQl7CisJCQkJCQllcmVwb3J0KERFQlVHMSwKKwkJCQkJCQkJKGVycm1zZygiY291bGQg bm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlIFwiJXNcIiB3YXMgcmVjZW50bHkgd3JpdHRl biIsIGN0eC50YWJsZV9uYW1lc1tpXSksCisJCQkJCQkJCSBlcnJkZXRhaWwoImRlc3RpbmF0aW9u ID0gUFJJTUFSWSBmb3IgcXVlcnk9IFwiJXNcIiIsIHF1ZXJ5KSkpOworCQkJCQkJZm9yY2VfcHJp bWFyeSA9IHRydWU7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0K KworCWlmIChmb3JjZV9wcmltYXJ5KQorCXsKKwkJcG9vbF9zZXRfbm9kZV90b19iZV9zZW50KHF1 ZXJ5X2NvbnRleHQsIFBSSU1BUllfTk9ERV9JRCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAocG9v bF9jb25maWctPnN0YXRlbWVudF9sZXZlbF9sb2FkX2JhbGFuY2UpCisJCXNlc3Npb25fY29udGV4 dC0+bG9hZF9iYWxhbmNlX25vZGVfaWQgPSBzZWxlY3RfbG9hZF9iYWxhbmNpbmdfbm9kZSgpOwor CisJLyoKKwkgKiBJZiByZXBsaWNhdGlvbiBkZWxheSBpcyB0b28gbXVjaCwgYW5kIHByZWZlcl9s b3dlcl9kZWxheV9zdGFuZGJ5IGlzCisJICogdHJ1ZSB0aGVuIGVsZWN0IHRoZSBsb3dlc3QtZGVs YXllZCBub2RlLCBvdGhlcndpc2Ugc2VuZCB0byBwcmltYXJ5LgorCSAqLworCWxiX25vZGUgPSBz ZXNzaW9uX2NvbnRleHQtPmxvYWRfYmFsYW5jZV9ub2RlX2lkOworCWlmIChTVFJFQU0gJiYgY2hl Y2tfcmVwbGljYXRpb25fZGVsYXkobGJfbm9kZSkpCisJeworCQllcmVwb3J0KERFQlVHMSwKKwkJ CQkoZXJybXNnKCJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2Ugb2YgdG9vIG11Y2ggcmVw bGljYXRpb24gZGVsYXkiKSwKKwkJCQkgZXJyZGV0YWlsKCJkZXN0aW5hdGlvbiA9ICVkIGZvciBx dWVyeT0gXCIlc1wiIiwgZGVzdCwgcXVlcnkpKSk7CisKKwkJaWYgKHBvb2xfY29uZmlnLT5wcmVm ZXJfbG93ZXJfZGVsYXlfc3RhbmRieSkKKwkJeworCQkJbGJfbm9kZSA9IHNlbGVjdF9sb2FkX2Jh bGFuY2luZ19ub2RlKCk7CisJCQlzZXNzaW9uX2NvbnRleHQtPmxvYWRfYmFsYW5jZV9ub2RlX2lk ID0gbGJfbm9kZTsKKwkJCXFjdHgtPmxvYWRfYmFsYW5jZV9ub2RlX2lkID0gbGJfbm9kZTsKKwkJ CXBvb2xfc2V0X25vZGVfdG9fYmVfc2VudChxdWVyeV9jb250ZXh0LCBsYl9ub2RlKTsKKwkJfQor CQllbHNlCisJCXsKKwkJCXBvb2xfc2V0X25vZGVfdG9fYmVfc2VudChxdWVyeV9jb250ZXh0LCBQ UklNQVJZX05PREVfSUQpOworCQl9CisJfQorCWVsc2UKKwl7CisJCXFjdHgtPmxvYWRfYmFsYW5j ZV9ub2RlX2lkID0gc2Vzc2lvbl9jb250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9pZDsKKwkJcG9v bF9zZXRfbm9kZV90b19iZV9zZW50KHF1ZXJ5X2NvbnRleHQsIHFjdHgtPmxvYWRfYmFsYW5jZV9u b2RlX2lkKTsKIAl9CiB9CiAKQEAgLTIwMjgsNyArMjIyMyw3IEBAIHdoZXJlX3RvX3NlbmRfbWFp bl9yZXBsaWNhKFBPT0xfUVVFUllfQ09OVEVYVCAqcXVlcnlfY29udGV4dCwgY2hhciAqcXVlcnks IE5vZGUKIAlzZXNzaW9uX2NvbnRleHQgPSBwb29sX2dldF9zZXNzaW9uX2NvbnRleHQoZmFsc2Up OwogCWJhY2tlbmQgPSBzZXNzaW9uX2NvbnRleHQtPmJhY2tlbmQ7CiAKLQkvKiAKKwkvKgogCSAq IENvbGxlY3QvZGlzY2FyZCBpbmZvcm1hdGlvbiBmb3IgZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25f d3JpdGUgPQogCSAqIGRtbF9hZGFwdGl2ZSBjYXNlLgogCSAqLwpAQCAtMjA0Miw2ICsyMjM3LDIw IEBAIHdoZXJlX3RvX3NlbmRfbWFpbl9yZXBsaWNhKFBPT0xfUVVFUllfQ09OVEVYVCAqcXVlcnlf Y29udGV4dCwgY2hhciAqcXVlcnksIE5vZGUKIAlpZiAoZGVzdCA9PSBQT09MX1BSSU1BUlkpCiAJ ewogCQlwb29sX3NldF9ub2RlX3RvX2JlX3NlbnQocXVlcnlfY29udGV4dCwgUFJJTUFSWV9OT0RF X0lEKTsKKworCQkvKgorCQkgKiBSZXNvbHZlIHRhYmxlIGFuZCBkYXRhYmFzZSBPSURzIG5vdyB0 byBwb3B1bGF0ZSByZWxjYWNoZS4gVGhpcworCQkgKiBhdm9pZHMgcG90ZW50aWFsIGhhbmdzIGlu IENvbW1hbmRDb21wbGV0ZSB3aGVyZSB3ZSBzaG91bGRuJ3QgYmUKKwkJICogcnVubmluZyBuZXcg cXVlcmllcyBhZ2FpbnN0IHRoZSBiYWNrZW5kLgorCQkgKi8KKwkJaWYgKHBvb2xfY29uZmlnLT5k aXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9PQorCQkJRExCT1dfRE1MX0FEQVBUSVZFX0dM T0JBTCkKKwkJeworCQkJaW50CQkgICAqb2lkczsKKworCQkJcG9vbF9leHRyYWN0X3RhYmxlX29p ZHMobm9kZSwgJm9pZHMpOworCQkJcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9nZXRfZGF0YWJh c2Vfb2lkKCk7CisJCX0KIAl9CiAJLyogU2hvdWxkIGJlIHNlbnQgdG8gYm90aCBwcmltYXJ5IGFu ZCBzdGFuZGJ5PyAqLwogCWVsc2UgaWYgKGRlc3QgPT0gUE9PTF9CT1RIKQpAQCAtMjE2OSw2ICsy Mzc4LDE3IEBAIHdoZXJlX3RvX3NlbmRfbWFpbl9yZXBsaWNhKFBPT0xfUVVFUllfQ09OVEVYVCAq cXVlcnlfY29udGV4dCwgY2hhciAqcXVlcnksIE5vZGUKIAkJCQl7CiAJCQkJCXBvb2xfc2V0X25v ZGVfdG9fYmVfc2VudChxdWVyeV9jb250ZXh0LCBQUklNQVJZX05PREVfSUQpOwogCQkJCX0KKwor CQkJCS8qCisJCQkJICogQ2hlY2sgdHJhY2sgdGFibGUgbXV0YXRpb24gZm9yIHJlY2VudGx5IHdy aXR0ZW4gdGFibGVzLiAgSWYKKwkJCQkgKiBpbiBjb2xkIHN0YXJ0IG9yIGFueSB0YWJsZSB3YXMg cmVjZW50bHkgd3JpdHRlbiwgcm91dGUgdG8KKwkJCQkgKiBwcmltYXJ5IHRvIGF2b2lkIHN0YWxl IHJlYWRzLgorCQkJCSAqLworCQkJCWVsc2UgaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRf YmFsYW5jZV9vbl93cml0ZSA9PQorCQkJCQkJIERMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwpCisJ CQkJeworCQkJCQl3aGVyZV90b19zZW5kX2RtbF9hZGFwdGl2ZV9nbG9iYWwocXVlcnlfY29udGV4 dCwgcXVlcnksIG5vZGUsIGRlc3QpOworCQkJCX0KIAkJCQllbHNlCiAJCQkJewogCQkJCQlpZiAo cG9vbF9jb25maWctPnN0YXRlbWVudF9sZXZlbF9sb2FkX2JhbGFuY2UpCkBAIC0yMTg5LDcgKzI0 MDksOCBAQCB3aGVyZV90b19zZW5kX21haW5fcmVwbGljYShQT09MX1FVRVJZX0NPTlRFWFQgKnF1 ZXJ5X2NvbnRleHQsIGNoYXIgKnF1ZXJ5LCBOb2RlCiAJCQkJCQkJCSBlcnJkZXRhaWwoImRlc3Rp bmF0aW9uID0gJWQgZm9yIHF1ZXJ5PSBcIiVzXCIiLCBkZXN0LCBxdWVyeSkpKTsKIAogCQkJCQkJ LyoKLQkJCQkJCSAqIElmIHByZWZlcl9sb3dlcl9kZWxheV9zdGFuZGJ5IGlzIG9uLCBjaG9vc2Ug bG93ZXIgZGVsYXkgc3RhbmRieS4KKwkJCQkJCSAqIElmIHByZWZlcl9sb3dlcl9kZWxheV9zdGFu ZGJ5IGlzIG9uLCBjaG9vc2UgbG93ZXIKKwkJCQkJCSAqIGRlbGF5IHN0YW5kYnkuCiAJCQkJCQkg Ki8KIAkJCQkJCWlmIChwb29sX2NvbmZpZy0+cHJlZmVyX2xvd2VyX2RlbGF5X3N0YW5kYnkpCiAJ CQkJCQl7CkBAIC0yMTk5LDcgKzI0MjAsOCBAQCB3aGVyZV90b19zZW5kX21haW5fcmVwbGljYShQ T09MX1FVRVJZX0NPTlRFWFQgKnF1ZXJ5X2NvbnRleHQsIGNoYXIgKnF1ZXJ5LCBOb2RlCiAJCQkJ CQkJc2Vzc2lvbl9jb250ZXh0LT5xdWVyeV9jb250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9pZCA9 IHNlc3Npb25fY29udGV4dC0+bG9hZF9iYWxhbmNlX25vZGVfaWQ7CiAJCQkJCQkJcG9vbF9zZXRf bm9kZV90b19iZV9zZW50KHF1ZXJ5X2NvbnRleHQsIHNlc3Npb25fY29udGV4dC0+cXVlcnlfY29u dGV4dC0+bG9hZF9iYWxhbmNlX25vZGVfaWQpOwogCQkJCQkJfQotCQkJCQkJZWxzZQkvKiBkZWxh eSBpcyB0b28gbXVjaC4gcHJlZmVyIHRvIHNlbmQgdG8gcHJpbWFyeSAqLworCQkJCQkJZWxzZQkv KiBkZWxheSBpcyB0b28gbXVjaC4gcHJlZmVyIHRvIHNlbmQgdG8KKwkJCQkJCQkJICogcHJpbWFy eSAqLwogCQkJCQkJewogCQkJCQkJCXBvb2xfc2V0X25vZGVfdG9fYmVfc2VudChxdWVyeV9jb250 ZXh0LCBQUklNQVJZX05PREVfSUQpOwogCQkJCQkJfQpAQCAtMjIwOSw3ICsyNDMxLDcgQEAgd2hl cmVfdG9fc2VuZF9tYWluX3JlcGxpY2EoUE9PTF9RVUVSWV9DT05URVhUICpxdWVyeV9jb250ZXh0 LCBjaGFyICpxdWVyeSwgTm9kZQogCQkJCQkgKiBOb3Qgc3RyZWFtaW5nIHJlcGxpY2F0aW9uIG1v ZGUsIG9yIGRlbGF5X3RocmVzaG9sZCBpcyAwCiAJCQkJCSAqIG9yIHJlcGxpY2F0aW9uIGRlbGF5 IGlzIHNtYWxsIGVub3VnaC4KIAkJCQkJICovCi0JCQkJCWVsc2UJCisJCQkJCWVsc2UKIAkJCQkJ ewogCQkJCQkJc2Vzc2lvbl9jb250ZXh0LT5xdWVyeV9jb250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9k ZV9pZCA9IHNlc3Npb25fY29udGV4dC0+bG9hZF9iYWxhbmNlX25vZGVfaWQ7CiAJCQkJCQlwb29s X3NldF9ub2RlX3RvX2JlX3NlbnQocXVlcnlfY29udGV4dCwKZGlmZiAtLWdpdCBhL3NyYy9jb250 ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmMgYi9zcmMvY29udGV4dC9wb29sX3Nlc3Npb25fY29u dGV4dC5jCmluZGV4IDJhOWI5MGQwNS4uMGJhYjc1ZWE2IDEwMDY0NAotLS0gYS9zcmMvY29udGV4 dC9wb29sX3Nlc3Npb25fY29udGV4dC5jCisrKyBiL3NyYy9jb250ZXh0L3Bvb2xfc2Vzc2lvbl9j b250ZXh0LmMKQEAgLTUzNiwyMCArNTM2LDI2IEBAIGR1bXBfc2VudF9tZXNzYWdlKGNoYXIgKmNh bGxlciwgUE9PTF9TRU5UX01FU1NBR0UgKm0pCiBzdGF0aWMgdm9pZAogZG1sX2FkYXB0aXZlX2lu aXQodm9pZCkKIHsKLQlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dy aXRlID09IERMQk9XX0RNTF9BREFQVElWRSkKKwlpZiAoRExCT1dfSVNfRE1MX0FEQVBUSVZFKHBv b2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSkpCiAJewogCQlzZXNzaW9u X2NvbnRleHQtPmlzX2luX3RyYW5zYWN0aW9uID0gZmFsc2U7CiAJCXNlc3Npb25fY29udGV4dC0+ dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9saXN0ID0gTklMOworCQlzZXNzaW9uX2NvbnRleHQtPnRy YW5zYWN0aW9uX3RlbXBfd3JpdGVfb2lkX2xpc3QgPSBOSUw7CisJCXNlc3Npb25fY29udGV4dC0+ dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9kYm9pZCA9IDA7CiAJfQogfQogCiBzdGF0aWMgdm9pZAog ZG1sX2FkYXB0aXZlX2Rlc3Ryb3kodm9pZCkKIHsKLQlpZiAocG9vbF9jb25maWctPmRpc2FibGVf bG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RNTF9BREFQVElWRSAmJiBzZXNzaW9uX2Nv bnRleHQpCisJaWYgKERMQk9XX0lTX0RNTF9BREFQVElWRSgKKwkJCQkJCQkgIHBvb2xfY29uZmln LT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSkgJiYKKwkJc2Vzc2lvbl9jb250ZXh0KQog CXsKIAkJaWYgKHNlc3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9saXN0ICE9 IE5JTCkKIAkJCWxpc3RfZnJlZV9kZWVwKHNlc3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVt cF93cml0ZV9saXN0KTsKKwkJaWYgKHNlc3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93 cml0ZV9vaWRfbGlzdCAhPSBOSUwpCisJCQlsaXN0X2ZyZWUoc2Vzc2lvbl9jb250ZXh0LT50cmFu c2FjdGlvbl90ZW1wX3dyaXRlX29pZF9saXN0KTsKIAl9CiB9CiAKQEAgLTc0OCwxMCArNzU0LDEz IEBAIHZvaWQKIHBvb2xfc2V0X3dyaXRpbmdfdHJhbnNhY3Rpb24odm9pZCkKIHsKIAkvKgotCSAq IElmIGRpc2FibGVfdHJhbnNhY3Rpb25fb25fd3JpdGUgaXMgJ29mZicgb3IgJ2RtbF9hZGFwdGl2 ZScsIHRoZW4gbmV2ZXIKLQkgKiB0dXJuIG9uIHdyaXRpbmcgdHJhbnNhY3Rpb24gZmxhZy4KKwkg KiBJZiBkaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSBpcyAnb2ZmJyBvciAnZG1sX2FkYXB0 aXZlJyBvcgorCSAqICdkbWxfYWRhcHRpdmVfZ2xvYmFsJywgdGhlbiBuZXZlciB0dXJuIG9uIHdy aXRpbmcgdHJhbnNhY3Rpb24gZmxhZy4KIAkgKi8KLQlpZiAocG9vbF9jb25maWctPmRpc2FibGVf bG9hZF9iYWxhbmNlX29uX3dyaXRlICE9IERMQk9XX09GRiAmJiBwb29sX2NvbmZpZy0+ZGlzYWJs ZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgIT0gRExCT1dfRE1MX0FEQVBUSVZFKQorCWlmIChwb29s X2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgIT0KKwkJRExCT1dfT0ZGICYm CisJCSFETEJPV19JU19ETUxfQURBUFRJVkUoCisJCQkJCQkJICAgcG9vbF9jb25maWctPmRpc2Fi bGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlKSkKIAl7CiAJCXBvb2xfZ2V0X3Nlc3Npb25fY29udGV4 dChmYWxzZSktPndyaXRpbmdfdHJhbnNhY3Rpb24gPSB0cnVlOwogCQllcmVwb3J0KERFQlVHNSwK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbnRleHQvcG9vbF9zZXNzaW9uX2NvbnRleHQuaCBi L3NyYy9pbmNsdWRlL2NvbnRleHQvcG9vbF9zZXNzaW9uX2NvbnRleHQuaAppbmRleCA4ZjNlM2I4 OTYuLmNmN2ExZmJlOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29udGV4dC9wb29sX3Nlc3Np b25fY29udGV4dC5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbnRleHQvcG9vbF9zZXNzaW9uX2NvbnRl eHQuaApAQCAtMjIzLDcgKzIyMyw3IEBAIHR5cGVkZWYgc3RydWN0CiAJICogcXVlcnkgaXMgaXNz dWVkIGluIGFuIGV4cGxpY2l0IHRyYW5zYWN0aW9uLCBhbmQgaXMgdHVybmVkIG9mZiB3aGVuIHRo ZQogCSAqIHRyYW5zYWN0aW9uIGlzIGNsb3NlZC4gT2YgY291cnNlIHR1cm5lZCBvZmYgd2hlbiBu ZXcgdHJhbnNhY3Rpb24KIAkgKiBzdGFydHMuIFRoaXMgZmxhZyBpcyByZWZlcmVuY2VkIGJ5IHF1 ZXJ5IGNhY2hlLgotCSovCisJICovCiAJYm9vbAkJcmVhbGx5X3dyaXRpbmdfdHJhbnNhY3Rpb247 CiAKIAkvKiBJZiB0cnVlLCBlcnJvciBvY2N1cnJlZCBpbiB0aGlzIHRyYW5zYWN0aW9uICovCkBA IC0zMjgsNiArMzI4LDE5IEBAIHR5cGVkZWYgc3RydWN0CiAJICovCiAJTGlzdAkgICAqdHJhbnNh Y3Rpb25fdGVtcF93cml0ZV9saXN0OwogCisJLyoKKwkgKiBGb3IgZGlzYWJsZV9sb2FkX2JhbGFu Y2Vfb25fd3JpdGUgPSBkbWxfYWRhcHRpdmVfZ2xvYmFsOiB0aGUgdGFibGUgT0lEcworCSAqIHdy aXR0ZW4gaW4gdGhlIGN1cnJlbnQgZXhwbGljaXQgdHJhbnNhY3Rpb24sIHBsdXMgdGhlIGRhdGFi YXNlIE9JRCB0aGV5CisJICogYmVsb25nIHRvLiAgQm90aCBhcmUgcmVzb2x2ZWQgYXQgRE1MIHJv dXRpbmcgdGltZSAod2hlbiB0aGUgYmFja2VuZAorCSAqIGNvbm5lY3Rpb24gaXMgaWRsZSBhbmQg ZG9fcXVlcnkgaXMgc2FmZSkgYW5kIGNvbnN1bWVkIG9uIENPTU1JVCBieQorCSAqIGhhbmRsZV9x dWVyeV9jb250ZXh0KCkgdG8gbWFyayB0aGUgdGFibGVzIGFzIHdyaXR0ZW4gaW4gc2hhcmVkIG1l bW9yeS4KKwkgKiBSZXNvbHZpbmcgaGVyZSAtLSByYXRoZXIgdGhhbiBhdCBDT01NSVQgLS0gYXZv aWRzIGlzc3VpbmcgZG9fcXVlcnkKKwkgKiB3aGlsZSB0aGUgQ09NTUlUIHJlc3BvbnNlIGlzIHN0 aWxsIGluIGZsaWdodCwgd2hpY2ggd291bGQgZGVzeW5jIHRoZQorCSAqIHByb3RvY29sIGFuZCBo YW5nIHRoZSBzZXNzaW9uLgorCSAqLworCUxpc3QJICAgKnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVf b2lkX2xpc3Q7CisJaW50CQkJdHJhbnNhY3Rpb25fdGVtcF93cml0ZV9kYm9pZDsKKwogI2lmZGVm IE5PVF9VU0VECiAJLyogUHJlZmVycmVkICJtYWluIiBub2RlIGlkLiBPbmx5IHVzZWQgZm9yIFNp bXBsZUZvcndhcmRUb0Zyb250ZW5kLiAqLwogCWludAkJCXByZWZlcnJlZF9tYWluX25vZGVfaWQ7 CkBAIC0zNzAsOCArMzgzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlib29sCQlzeW5jX21hcFtNQVhf TlVNX0JBQ0tFTkRTXTsKIAogCS8qCi0JICogQmFja2VuZCBub2RlIGlkIG1hcCBkb19xdWVyeSBz ZW50IHRvLCB3aXRob3V0IHNlbmRpbmcgYSBzeW5jCi0JICogbWVzc2FnZS4KKwkgKiBCYWNrZW5k IG5vZGUgaWQgbWFwIGRvX3F1ZXJ5IHNlbnQgdG8sIHdpdGhvdXQgc2VuZGluZyBhIHN5bmMgbWVz c2FnZS4KIAkgKi8KIAlib29sCQlwZW5kaW5nX3N5bmNfbWFwW01BWF9OVU1fQkFDS0VORFNdOwog fSBQT09MX1NFU1NJT05fQ09OVEVYVDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvb2wuaCBi L3NyYy9pbmNsdWRlL3Bvb2wuaAppbmRleCBmZWE1NzQ0ZjMuLjU0OWFlZDMwZiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvcG9vbC5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvb2wuaApAQCAtNDI0LDcg KzQyNCw3IEBAIHR5cGVkZWYgZW51bQogI2RlZmluZSBNaW4oeCwgeSkJCSgoeCkgPCAoeSkgPyAo eCkgOiAoeSkpCiAKIAotI2RlZmluZSBNQVhfTlVNX1NFTUFQSE9SRVMJCTgKKyNkZWZpbmUgTUFY X05VTV9TRU1BUEhPUkVTCQk5CiAjZGVmaW5lIENPTk5fQ09VTlRFUl9TRU0JCTAKICNkZWZpbmUg UkVRVUVTVF9JTkZPX1NFTQkJMQogI2RlZmluZSBRVUVSWV9DQUNIRV9TVEFUU19TRU0JMgpAQCAt NDM0LDYgKzQzNCw3IEBAIHR5cGVkZWYgZW51bQogI2RlZmluZSBGT0xMT1dfUFJJTUFSWV9TRU0J CTYKICNkZWZpbmUgTUFJTl9FWElUX0hBTkRMRVJfU0VNCTcJLyogdXNlZCBpbiBleGl0X2hhbmRl ciBpbiBwZ3Bvb2wgbWFpbgogCQkJCQkJCQkJICogcHJvY2VzcyAqLworI2RlZmluZSBUUkFDS19U QUJMRV9NVVRBVElPTl9UQUJMRV9TRU0JOAogI2RlZmluZSBNQVhfUkVRVUVTVF9RVUVVRV9TSVpF CTEwCiAKICNkZWZpbmUgTUFYX1NFQ19XQUlUX0ZPUl9DTFVTVEVSX1RSQU5TQUNUSU9OIDEwIC8q IHRpbWUgaW4gc2Vjb25kcyB0byBrZWVwCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb29sX2Nv bmZpZy5oIGIvc3JjL2luY2x1ZGUvcG9vbF9jb25maWcuaAppbmRleCA5YTM5N2QxNjYuLmI4YWJh ZGQ1MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9vbF9jb25maWcuaAorKysgYi9zcmMvaW5j bHVkZS9wb29sX2NvbmZpZy5oCkBAIC0xMDUsOSArMTA1LDEzIEBAIHR5cGVkZWYgZW51bSBETEJP V19PUFRJT04KIAlETEJPV19UUkFOU0FDVElPTiwKIAlETEJPV19UUkFOU19UUkFOU0FDVElPTiwK IAlETEJPV19BTFdBWVMsCi0JRExCT1dfRE1MX0FEQVBUSVZFCisJRExCT1dfRE1MX0FEQVBUSVZF LAorCURMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwKIH0gRExCT1dfT1BUSU9OOwogCisjZGVmaW5l IERMQk9XX0lTX0RNTF9BREFQVElWRShvcHQpIFwKKwkoKG9wdCkgPT0gRExCT1dfRE1MX0FEQVBU SVZFIHx8IChvcHQpID09IERMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwpCisKIHR5cGVkZWYgZW51 bSBSRUxRVEFSR0VUX09QVElPTgogewogCVJFTFFUQVJHRVRfUFJJTUFSWSA9IDEsCkBAIC0zNjMs OCArMzY3LDIyIEBAIHR5cGVkZWYgc3RydWN0CiAJY2hhcgkgICAqc3JfY2hlY2tfcGFzc3dvcmQ7 CS8qIHBhc3N3b3JkIGZvciBzcl9jaGVja191c2VyICovCiAJY2hhcgkgICAqc3JfY2hlY2tfZGF0 YWJhc2U7CS8qIFBvc3RncmVTUUwgZGF0YWJhc2UgbmFtZSBmb3Igc3RyZWFtaW5nCiAJCQkJCQkJ CQkgKiByZXBsaWNhdGlvbiBjaGVjayAqLwotCWNoYXIJICAgKnJlcGxpY2F0aW9uX2RlbGF5X3Nv dXJjZV9jbWQ7CS8qIGV4dGVybmFsIGNvbW1hbmQgZm9yIHJlcGxpY2F0aW9uIGRlbGF5ICovCi0J aW50CQkJcmVwbGljYXRpb25fZGVsYXlfc291cmNlX3RpbWVvdXQ7CS8qIHRpbWVvdXQgZm9yIGV4 dGVybmFsIGNvbW1hbmQgaW4gc2Vjb25kcyAqLworCWNoYXIJICAgKnJlcGxpY2F0aW9uX2RlbGF5 X3NvdXJjZV9jbWQ7CS8qIGV4dGVybmFsIGNvbW1hbmQgZm9yCisJCQkJCQkJCQkJCQkgKiByZXBs aWNhdGlvbiBkZWxheSAqLworCWludAkJCXJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV90aW1lb3V0 OwkvKiB0aW1lb3V0IGZvciBleHRlcm5hbAorCQkJCQkJCQkJCQkJCSAqIGNvbW1hbmQgaW4gc2Vj b25kcyAqLworCisJLyogVHJhY2sgdGFibGUgbXV0YXRpb24gY29uZmlndXJhdGlvbiAqLworCWRv dWJsZQkJdHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvcjsJLyogVFRMIG11bHRpcGxpZXIg Zm9yCisJCQkJCQkJCQkJCQkJICogcmVwbGljYXRpb24gZGVsYXkgKi8KKwlpbnQJCQl0cmFja190 YWJsZV9tdXRhdGlvbl9tYXhfc3RhbGVuZXNzOyAvKiBtYXggc3RhbGVuZXNzIGR1cmF0aW9uCisJ CQkJCQkJCQkJCQkJICogbXMgKi8KKwlpbnQJCQl0cmFja190YWJsZV9tdXRhdGlvbl9jb2xkX3N0 YXJ0X2R1cmF0aW9uOwkvKiBjb2xkIHN0YXJ0IGR1cmF0aW9uCisJCQkJCQkJCQkJCQkJCQkgKiBt cyAqLworCWludAkJCXRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHM7IC8qIGhhc2gg YnVja2V0cyBmb3IgdGFibGUKKwkJCQkJCQkJCQkJCQkgKiBtYXAgKi8KKwlpbnQJCQl0cmFja190 YWJsZV9tdXRhdGlvbl90YWJsZV9zaXplOwkvKiBtYXggdGFibGUgbWFwIGVudHJpZXMgKi8KKwog CWNoYXIJICAgKmZhaWxvdmVyX2NvbW1hbmQ7CS8qIGV4ZWN1dGUgY29tbWFuZCB3aGVuIGZhaWxv dmVyIGhhcHBlbnMgKi8KIAljaGFyCSAgICpmb2xsb3dfcHJpbWFyeV9jb21tYW5kOyAvKiBleGVj dXRlIGNvbW1hbmQgd2hlbiBmYWlsb3ZlciBpcwogCQkJCQkJCQkJCSAqIGVuZGVkICovCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmggYi9z cmMvaW5jbHVkZS91dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5iNjAwODhjMDYKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvaW5jbHVkZS91dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmgKQEAgLTAsMCArMSwx NjcgQEAKKy8qIC0qLXBnc3FsLWMtKi0gKi8KKy8qCisgKiBwZ3Bvb2w6IGEgbGFuZ3VhZ2UgaW5k ZXBlbmRlbnQgY29ubmVjdGlvbiBwb29sIHNlcnZlciBmb3IgUG9zdGdyZVNRTAorICogd3JpdHRl biBieSBUYXRzdW8gSXNoaWkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjYJUGdQb29sIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCisgKiBpdHMgZG9jdW1lbnRhdGlv biBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieQorICogZ3JhbnRlZCwg cHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsCisg KiBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy bWlzc2lvbgorICogbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFu ZCB0aGF0IHRoZSBuYW1lIG9mIHRoZQorICogYXV0aG9yIG5vdCBiZSB1c2VkIGluIGFkdmVydGlz aW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCisgKiBkaXN0cmlidXRpb24gb2YgdGhlIHNv ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKKyAqIHBlcm1pc3Npb24uIFRo ZSBhdXRob3IgbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZQorICogc3VpdGFiaWxp dHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMK KyAqIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKiBwb29s X3RyYWNrX3RhYmxlX211dGF0aW9uLmg6IEluLW1lbW9yeSB0cmFja2luZyBvZgorICogICByZWNl bnRseSB3cml0dGVuIHRhYmxlcyB0byBwcmV2ZW50IHN0YWxlIHJlYWRzLgorICovCisKKyNpZm5k ZWYgUE9PTF9UUkFDS19UQUJMRV9NVVRBVElPTl9ICisjZGVmaW5lIFBPT0xfVFJBQ0tfVEFCTEVf TVVUQVRJT05fSAorCisjaW5jbHVkZSAicG9vbC5oIgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisK Ky8qCisgKiBJbnZhbGlkIGluZGV4IG1hcmtlciBmb3IgbGlua2VkIGxpc3RzCisgKi8KKyNkZWZp bmUgVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWAkoLTEpCisKKy8qCisgKiBEZWZh dWx0IFRUTCBpbiBtaWNyb3NlY29uZHMgKDEwMG1zKSB1c2VkIHdoZW4gcmVwbGljYXRpb24gZGVs YXkgaXMgdW5rbm93bgorICovCisjZGVmaW5lIFRSQUNLX1RBQkxFX01VVEFUSU9OX0RFRkFVTFRf VFRMX1VTCSgxMDAgKiAxMDAwKQorCisvKgorICogRW50cnkgaW4gdGhlIHRhYmxlIG11dGF0aW9u IGhhc2ggdGFibGUgKGtleWVkIGJ5IHRhYmxlL2RhdGFiYXNlIG9pZHMpCisgKi8KK3R5cGVkZWYg c3RydWN0IFRyYWNrVGFibGVNdXRhdGlvbkVudHJ5Cit7CisJaW50CQkJdGFibGVfb2lkOwkJLyog VGFibGUgb2lkICovCisJaW50CQkJZGJvaWQ7CQkJLyogRGF0YWJhc2Ugb2lkICovCisJc3RydWN0 IHRpbWV2YWwgZmlyc3Rfd3JpdGVfdGltZTsJLyogV2hlbiB0aGUgZW50cnkgd2FzIGZpcnN0IGNy ZWF0ZWQgKi8KKwlzdHJ1Y3QgdGltZXZhbCBsYXN0X3dyaXRlX3RpbWU7IC8qIFdoZW4gdGhlIHRh YmxlIHdhcyBsYXN0IHdyaXR0ZW4gKi8KKwl1aW50MzIJCWhhc2g7CQkJLyogUHJlLWNvbXB1dGVk IGhhc2ggdmFsdWUgKi8KKwlpbnQJCQluZXh0OwkJCS8qIE5leHQgaW4gY29sbGlzaW9uIGNoYWlu ICovCisJYm9vbAkJaW5fdXNlOwkJCS8qIElzIHRoaXMgZW50cnkgaW4gdXNlPyAqLworfSBUcmFj a1RhYmxlTXV0YXRpb25FbnRyeTsKKworLyoKKyAqIEhlYWRlciBmb3IgdGhlIHRhYmxlIG11dGF0 aW9uIGhhc2ggdGFibGUgaW4gc2hhcmVkIG1lbW9yeQorICovCit0eXBlZGVmIHN0cnVjdCBUcmFj a1RhYmxlTXV0YXRpb25IYXNoVGFibGUKK3sKKwlpbnQJCQludW1fYnVja2V0czsJLyogTnVtYmVy IG9mIGhhc2ggYnVja2V0cyAqLworCWludAkJCW1heF9lbnRyaWVzOwkvKiBNYXhpbXVtIGVudHJp ZXMgYWxsb3dlZCAqLworCWludAkJCW51bV9lbnRyaWVzOwkvKiBDdXJyZW50IG51bWJlciBvZiBl bnRyaWVzICovCisJaW50CQkJZnJlZV9saXN0X2hlYWQ7IC8qIEhlYWQgb2YgZnJlZSBlbnRyeSBs aXN0ICovCisKKwkvKgorCSAqIEZsZXhpYmxlIGFycmF5IG1lbWJlcnMgZm9sbG93IGluIHNoYXJl ZCBtZW1vcnk6IGludAorCSAqIGJ1Y2tldHNbbnVtX2J1Y2tldHNdOyBUcmFja1RhYmxlTXV0YXRp b25FbnRyeSBlbnRyaWVzW21heF9lbnRyaWVzXTsKKwkgKi8KK30gVHJhY2tUYWJsZU11dGF0aW9u SGFzaFRhYmxlOworCisvKgorICogR2xvYmFsIHN0YXRlIGZvciB0cmFjayB0YWJsZSBtdXRhdGlv biBmZWF0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0IFRyYWNrVGFibGVNdXRhdGlvblN0YXRlCit7 CisJYm9vbAkJaW5pdGlhbGl6ZWQ7CS8qIFNobWVtIGluaXRpYWxpemVkPyAqLworCXVpbnQ2NAkJ Y3VycmVudF90dGxfdXM7IC8qIEN1cnJlbnQgVFRMIGluIG1pY3Jvc2Vjb25kcyAqLworCXN0cnVj dCB0aW1ldmFsIHR0bF9sYXN0X3VwZGF0ZWQ7CS8qIFdoZW4gVFRMIHdhcyBsYXN0IHVwZGF0ZWQg Ki8KKwlzdHJ1Y3QgdGltZXZhbCBsYXN0X2NsZWFudXBfdGltZTsJLyogV2hlbiBsYXN0IGV4cGly ZWQgY2xlYW51cCByYW4gKi8KKwlzdHJ1Y3QgdGltZXZhbCBnbG9iYWxfY29sZF9zdGFydF91bnRp bDsgLyogR2xvYmFsIGNvbGQgc3RhcnQgZW5kIHRpbWUgKi8KKwl1aW50MzIJCXN0YXRzX3F1ZXJp ZXNfY2hlY2tlZDsJLyogUXVlcmllcyBjaGVja2VkICovCisJdWludDMyCQlzdGF0c19mb3JjZWRf cHJpbWFyeTsJLyogRm9yY2VkIHRvIHByaW1hcnkgKi8KKwl1aW50MzIJCXN0YXRzX2FsbG93ZWRf cmVwbGljYTsJLyogQWxsb3dlZCB0byByZXBsaWNhICovCit9IFRyYWNrVGFibGVNdXRhdGlvblN0 YXRlOworCisvKgorICogTWFpbiBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZSBjb250YWluaW5nIGFs bCBjb21wb25lbnRzCisgKi8KK3R5cGVkZWYgc3RydWN0IFRyYWNrVGFibGVNdXRhdGlvblNobWVt Cit7CisJVHJhY2tUYWJsZU11dGF0aW9uU3RhdGUgc3RhdGU7CisJVHJhY2tUYWJsZU11dGF0aW9u SGFzaFRhYmxlICp0YWJsZV9tYXA7Cit9IFRyYWNrVGFibGVNdXRhdGlvblNobWVtOworCisvKiAt LS0tLS0tLS0tLS0tLS0tCisgKiBQdWJsaWMgQVBJIGZ1bmN0aW9ucworICogLS0tLS0tLS0tLS0t LS0tLQorICovCisKKy8qCisgKiBJbml0aWFsaXplIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlcyBm b3IgdHJhY2sgdGFibGUgbXV0YXRpb24uCisgKiBDYWxsZWQgZnJvbSBwZ3Bvb2xfbWFpbi5jIGFm dGVyIHBvb2xfaW5pdF9wb29sX2luZm8oKS4KKyAqLworZXh0ZXJuIHZvaWQgcG9vbF90cmFja190 YWJsZV9tdXRhdGlvbl9pbml0KHZvaWQpOworCisvKgorICogSW5pdGlhbGl6ZSBwZXItY2hpbGQg cHJvY2VzcyBzdGF0ZSBmb3IgdHJhY2sgdGFibGUgbXV0YXRpb24uCisgKiBDYWxsZWQgZnJvbSBj aGlsZC5jIHdoZW4gYSBuZXcgY2hpbGQgcHJvY2VzcyBzdGFydHMuCisgKiBTZXRzIHVwIGNvbGQg c3RhcnQgdHJhY2tpbmcuCisgKi8KK2V4dGVybiB2b2lkIHBvb2xfdHJhY2tfdGFibGVfbXV0YXRp b25fY2hpbGRfaW5pdCh2b2lkKTsKKworLyoKKyAqIENoZWNrIGlmIHRoZSBjaGlsZCBwcm9jZXNz IGlzIGluIGNvbGQgc3RhcnQgcGVyaW9kLgorICogRHVyaW5nIGNvbGQgc3RhcnQsIGFsbCBxdWVy aWVzIGFyZSByb3V0ZWQgdG8gcHJpbWFyeS4KKyAqIFJldHVybnMgdHJ1ZSBpZiBpbiBjb2xkIHN0 YXJ0LCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2V4dGVybiBib29sIHBvb2xfdHJhY2tfdGFibGVf bXV0YXRpb25faW5fY29sZF9zdGFydCh2b2lkKTsKKworLyoKKyAqIFRyaWdnZXIgYSBnbG9iYWwg Y29sZCBzdGFydCBwZXJpb2QgZm9yIGFsbCBwcm9jZXNzZXMuCisgKiBVc2VkIGFmdGVyIHdhdGNo ZG9nIGxlYWRlciBjaGFuZ2UgdG8gYXZvaWQgc3RhbGUgcmVhZHMuCisgKi8KK2V4dGVybiB2b2lk IHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fdHJpZ2dlcl9nbG9iYWxfY29sZF9zdGFydCh2b2lk KTsKKworLyoKKyAqIEdldCBvaWQgb2YgY3VycmVudCBkYXRhYmFzZS4KKyAqLworZXh0ZXJuIGlu dAlwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2dldF9kYXRhYmFzZV9vaWQodm9pZCk7CisKKy8q CisgKiBDaGVjayBpZiBhIHRhYmxlIHdhcyByZWNlbnRseSB3cml0dGVuIHRvIChpcyAic3RhbGUi KS4KKyAqIElmIHN0YWxlLCByZWFkcyBmcm9tIHRoaXMgdGFibGUgc2hvdWxkIGdvIHRvIHByaW1h cnkuCisgKiBSZXR1cm5zIHRydWUgaWYgdGFibGUgaXMgc3RhbGUgKHJlY2VudGx5IHdyaXR0ZW4p LCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2V4dGVybiBib29sIHBvb2xfdHJhY2tfdGFibGVfbXV0 YXRpb25fdGFibGVfaXNfc3RhbGUoCisJCQkJCQkJCQkJCQkJIGludCB0YWJsZV9vaWQsIGludCBk Ym9pZCk7CisKKy8qCisgKiBNYXJrIHRhYmxlcyBhcyByZWNlbnRseSB3cml0dGVuLgorICogQ2Fs bGVkIGFmdGVyIElOU0VSVC9VUERBVEUvREVMRVRFIHF1ZXJpZXMgY29tcGxldGUuCisgKiB0YWJs ZV9vaWRzOiBhcnJheSBvZiB0YWJsZSBvaWRzCisgKiBudW1fdGFibGVzOiBudW1iZXIgb2YgdGFi bGVzIGluIGFycmF5CisgKiBkYm9pZDogZGF0YWJhc2Ugb2lkCisgKi8KK2V4dGVybiB2b2lkIHBv b2xfdHJhY2tfdGFibGVfbXV0YXRpb25fbWFya190YWJsZXNfd3JpdHRlbigKKwkJCQkJCQkJCQkJ CQkJICBjb25zdCBpbnQgKnRhYmxlX29pZHMsIGludCBudW1fdGFibGVzLCBpbnQgZGJvaWQpOwor CisvKgorICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gbWFyayBhIHNpbmdsZSB0YWJsZSBhcyB3 cml0dGVuLgorICogdGFibGVfb2lkOiB0YWJsZSBvaWQKKyAqIGRib2lkOiBkYXRhYmFzZSBvaWQK KyAqLworZXh0ZXJuIHZvaWQgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9tYXJrX3RhYmxlX3dy aXR0ZW4oCisJCQkJCQkJCQkJCQkJCSBpbnQgdGFibGVfb2lkLCBpbnQgZGJvaWQpOworCisvKgor ICogVXBkYXRlIHRoZSBUVEwgYmFzZWQgb24gY3VycmVudCByZXBsaWNhdGlvbiBkZWxheS4KKyAq IENhbGxlZCBmcm9tIHBvb2xfd29ya2VyX2NoaWxkLmMgd2hlbiByZXBsaWNhdGlvbiBkZWxheSBp cyB1cGRhdGVkLgorICogZGVsYXlfdXM6IHJlcGxpY2F0aW9uIGRlbGF5IGluIG1pY3Jvc2Vjb25k cworICovCitleHRlcm4gdm9pZCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3VwZGF0ZV90dGwo dWludDY0IGRlbGF5X3VzKTsKKworLyoKKyAqIENhbGN1bGF0ZSByZXF1aXJlZCBzaGFyZWQgbWVt b3J5IHNpemUgZm9yIHRyYWNrIHRhYmxlIG11dGF0aW9uLgorICovCitleHRlcm4gU2l6ZSBwb29s X3RyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtX3NpemUodm9pZCk7CisKKyNlbmRpZgkJCQkJCQkv KiBQT09MX1RSQUNLX1RBQkxFX01VVEFUSU9OX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9tYWluL3Bn cG9vbF9tYWluLmMgYi9zcmMvbWFpbi9wZ3Bvb2xfbWFpbi5jCmluZGV4IGRiZjFiZmQxNC4uZjE2 ZTBmNTc2IDEwMDY0NAotLS0gYS9zcmMvbWFpbi9wZ3Bvb2xfbWFpbi5jCisrKyBiL3NyYy9tYWlu L3BncG9vbF9tYWluLmMKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJhdXRoL3Bvb2xfcGFz c3dkLmgiCiAjaW5jbHVkZSAiYXV0aC9wb29sX2hiYS5oIgogI2luY2x1ZGUgInF1ZXJ5X2NhY2hl L3Bvb2xfbWVtcWNhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRh dGlvbi5oIgogI2luY2x1ZGUgIndhdGNoZG9nL3dkX2ludGVybmFsX2NvbW1hbmRzLmgiCiAjaW5j bHVkZSAid2F0Y2hkb2cvd2RfbGlmZWNoZWNrLmgiCiAjaW5jbHVkZSAid2F0Y2hkb2cvd2F0Y2hk b2cuaCIKQEAgLTE1MDEsMTEgKzE1MDIsMTQgQEAgc2lndXNyMV9pbnRlcnJ1cHRfcHJvY2Vzc29y KHZvaWQpCiAKIAlpZiAodXNlcjFTaWduYWxTbG90LT5zaWduYWxGbGFnc1tTSUdfV0FUQ0hET0df U1RBVEVfQ0hBTkdFRF0pCiAJeworCQlXRF9TVEFURVMJd2Rfc3RhdGU7CisKIAkJZXJlcG9ydChM T0csCiAJCQkJKGVycm1zZygiUGdwb29sLUlJIHBhcmVudCBwcm9jZXNzIHJlY2VpdmVkIHdhdGNo ZG9nIHN0YXRlIGNoYW5nZSBzaWduYWwgZnJvbSB3YXRjaGRvZyIpKSk7CiAKIAkJdXNlcjFTaWdu YWxTbG90LT5zaWduYWxGbGFnc1tTSUdfV0FUQ0hET0dfU1RBVEVfQ0hBTkdFRF0gPSBmYWxzZTsK LQkJaWYgKHdkX2ludGVybmFsX2dldF93YXRjaGRvZ19sb2NhbF9ub2RlX3N0YXRlKCkgPT0gV0Rf U1RBTkRCWSkKKwkJd2Rfc3RhdGUgPSB3ZF9pbnRlcm5hbF9nZXRfd2F0Y2hkb2dfbG9jYWxfbm9k ZV9zdGF0ZSgpOworCQlpZiAod2Rfc3RhdGUgPT0gV0RfU1RBTkRCWSkKIAkJewogCQkJZXJlcG9y dChMT0csCiAJCQkJCShlcnJtc2coIndlIGhhdmUgam9pbmVkIHRoZSB3YXRjaGRvZyBjbHVzdGVy IGFzIFNUQU5EQlkgbm9kZSIpLApAQCAtMTUxOSw2ICsxNTIzLDEyIEBAIHNpZ3VzcjFfaW50ZXJy dXB0X3Byb2Nlc3Nvcih2b2lkKQogCQkJICovCiAJCQlwb29sX3JlbGVhc2VfZm9sbG93X3ByaW1h cnlfbG9jayh0cnVlKTsKIAkJfQorCQllbHNlIGlmICh3ZF9zdGF0ZSA9PSBXRF9DT09SRElOQVRP UiAmJgorCQkJCSBwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0K KwkJCQkgRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JBTCkKKwkJeworCQkJcG9vbF90cmFja190YWJs ZV9tdXRhdGlvbl90cmlnZ2VyX2dsb2JhbF9jb2xkX3N0YXJ0KCk7CisJCX0KIAl9CiAJaWYgKHVz ZXIxU2lnbmFsU2xvdC0+c2lnbmFsRmxhZ3NbU0lHX0ZBSUxPVkVSX0lOVEVSUlVQVF0pCiAJewpA QCAtMzA4NCw2ICszMDk0LDE2IEBAIGluaXRpYWxpemVfc2hhcmVkX21lbV9vYmplY3RzKGJvb2wg Y2xlYXJfbWVtY2FjaGVfb2lkbWFwcykKIAkJZWxvZyhERUJVRzEsICJ3YXRjaGRvZzogJXp1IGJ5 dGVzIHJlcXVlc3RlZCBmb3Igc2hhcmVkIG1lbW9yeSIsIE1BWEFMSUdOKHdkX2lwY19nZXRfc2hh cmVkX21lbV9zaXplKCkpKTsKIAl9CiAKKwlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9i YWxhbmNlX29uX3dyaXRlID09CisJCURMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwpCisJeworCQlz aXplICs9IE1BWEFMSUdOKHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW1fc2l6ZSgpKTsK KwkJZWxvZyhERUJVRzEsCisJCQkgInRyYWNrX3RhYmxlX211dGF0aW9uOiAlenUgYnl0ZXMgcmVx dWVzdGVkIgorCQkJICIgZm9yIHNoYXJlZCBtZW1vcnkiLAorCQkJIE1BWEFMSUdOKHBvb2xfdHJh Y2tfdGFibGVfbXV0YXRpb25fc2htZW1fc2l6ZSgpKSk7CisJfQorCiAJaW5pdGlhbGl6ZV9zaGFy ZWRfbWVtb3J5X21haW5fc2VnbWVudChzaXplKTsKIAogCS8qIE1vdmUgdGhlIGJhY2tlbmQgZGVz Y3JpcHRvcnMgdG8gc2hhcmVkIG1lbW9yeSAqLwpAQCAtMzIwMiw2ICszMjIyLDEzIEBAIGluaXRp YWxpemVfc2hhcmVkX21lbV9vYmplY3RzKGJvb2wgY2xlYXJfbWVtY2FjaGVfb2lkbWFwcykKIAog CS8qIGluaXRpYWxpemUgcGNwIHdvcmtlciBjaGlsZCBwaWRzICovCiAJbWVtc2V0KFJlcV9pbmZv LT5wY3Bfd29ya2VyX3BpZHMsIDAsIHNpemVvZihSZXFfaW5mby0+cGNwX3dvcmtlcl9waWRzKSk7 CisKKwkvKiBJbml0aWFsaXplIHRyYWNrIHRhYmxlIG11dGF0aW9uIGZvciByZWNlbnRseSB3cml0 dGVuIHRhYmxlcyAqLworCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25f d3JpdGUgPT0KKwkJRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JBTCkKKwl7CisJCXBvb2xfdHJhY2tf dGFibGVfbXV0YXRpb25faW5pdCgpOworCX0KIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9wcm90 b2NvbC9Db21tYW5kQ29tcGxldGUuYyBiL3NyYy9wcm90b2NvbC9Db21tYW5kQ29tcGxldGUuYwpp bmRleCAxZjYzYTBlOGQuLjc2ZTc3ZmVhMCAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvY29sL0NvbW1h bmRDb21wbGV0ZS5jCisrKyBiL3NyYy9wcm90b2NvbC9Db21tYW5kQ29tcGxldGUuYwpAQCAtMzgs NiArMzgsOCBAQAogI2luY2x1ZGUgInV0aWxzL3BhbGxvYy5oIgogI2luY2x1ZGUgInV0aWxzL21l bXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcG9vbF9zdHJlYW0uaCIKKyNpbmNsdWRlICJ1dGls cy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmgiCisjaW5jbHVkZSAicXVlcnlfY2FjaGUvcG9v bF9tZW1xY2FjaGUuaCIKIAogc3RhdGljIGludAlleHRyYWN0X250dXBsZXMoY2hhciAqbWVzc2Fn ZSk7CiBzdGF0aWMgUE9PTF9TVEFUVVMgaGFuZGxlX21pc21hdGNoX3R1cGxlcyhQT09MX0NPTk5F Q1RJT04gKmZyb250ZW5kLCBQT09MX0NPTk5FQ1RJT05fUE9PTCAqYmFja2VuZCwgY2hhciAqcGFj a2V0LCBpbnQgcGFja2V0bGVuLCBib29sIGNvbW1hbmRfY29tcGxldGUpOwpAQCAtMzA0LDYgKzMw Niw1NyBAQCBoYW5kbGVfcXVlcnlfY29udGV4dChQT09MX0NPTk5FQ1RJT05fUE9PTCAqYmFja2Vu ZCkKIAogCW5vZGUgPSBzZXNzaW9uX2NvbnRleHQtPnF1ZXJ5X2NvbnRleHQtPnBhcnNlX3RyZWU7 CiAKKwkvKgorCSAqIFRyYWNrIHRhYmxlIHdyaXRlcyBmb3IgdGhlIGRtbF9hZGFwdGl2ZV9nbG9i YWwgZmVhdHVyZS4gIE9ubHkKKwkgKiBtZWFuaW5nZnVsIGluIHN0cmVhbWluZyByZXBsaWNhdGlv biBtb2RlIChNQUlOX1JFUExJQ0EpLgorCSAqCisJICogVGhlIE9JRHMgb2YgdGhlIHRhYmxlcyB3 cml0dGVuIChhbmQgdGhlaXIgZGF0YWJhc2UgT0lEKSB3ZXJlIHJlc29sdmVkCisJICogYnkgZG1s X2FkYXB0aXZlKCkgYXQgRE1MIHJvdXRpbmcgdGltZSwgd2hpbGUgdGhlIGJhY2tlbmQgY29ubmVj dGlvbiB3YXMKKwkgKiBpZGxlLCBhbmQgc3Rhc2hlZCBpbiB0cmFuc2FjdGlvbl90ZW1wX3dyaXRl X29pZF9saXN0LiAgV2UgbWFyayB0aGVtIGluCisJICogc2hhcmVkIG1lbW9yeSBvbmx5IG5vdywg b25jZSB0aGUgYmFja2VuZCBoYXMgY29uZmlybWVkIHRoZSBzdGF0ZW1lbnQgb3IKKwkgKiB0cmFu c2FjdGlvbiBzdWNjZWVkZWQgLS0gYSBmYWlsZWQgYXV0b2NvbW1pdCBzdGF0ZW1lbnQsIG9yIGEg ZmFpbGVkIC8KKwkgKiByb2xsZWQtYmFjayBDT01NSVQsIHByb2R1Y2VzIGFuIEVycm9yUmVzcG9u c2UgYW5kIG5ldmVyIHJlYWNoZXMKKwkgKiBDb21tYW5kQ29tcGxldGUsIGFuZCBhIFJPTExCQUNL IGNsZWFycyB0aGUgbGlzdCB3aGlsZSByb3V0aW5nLCBzbyBpbgorCSAqIGFsbCB0aG9zZSBjYXNl cyB0aGUgd3JpdGVzIGFyZSBjb3JyZWN0bHkgbm90IHJlY29yZGVkLgorCSAqCisJICogV2UgcmVh Y2ggdGhpcyBwb2ludCB3aXRoIGlzX2luX3RyYW5zYWN0aW9uID09IGZhbHNlIGJvdGggZm9yIGFu CisJICogYXV0b2NvbW1pdCBzdGF0ZW1lbnQgYW5kIGZvciBhIENPTU1JVCAoZG1sX2FkYXB0aXZl KCkgY2xlYXJzIHRoZSBmbGFnCisJICogd2hpbGUgcm91dGluZyB0aGUgQ09NTUlULCBhbmQga2Vl cHMgdGhlIE9JRCBsaXN0IGludGFjdCBmb3IgdGhlIENPTU1JVAorCSAqIG9ubHkpLiAgQW4gaW4t dHJhbnNhY3Rpb24gRE1MIHN0aWxsIGhhcyB0aGUgZmxhZyBzZXQgaGVyZSBhbmQgaXMKKwkgKiBj b3JyZWN0bHkgc2tpcHBlZCwgaXRzIHdyaXRlcyBkZWZlcnJlZCB0byB0aGUgQ09NTUlULgorCSAq CisJICogQ3J1Y2lhbGx5IHRoaXMgcGF0aCBkb2VzIE5PIGJhY2tlbmQgSS9POiByZXNvbHZpbmcg T0lEcyBoZXJlIHZpYQorCSAqIGRvX3F1ZXJ5IHdvdWxkIGluamVjdCBhIHF1ZXJ5IHdoaWxlIHRo ZSBzdGF0ZW1lbnQvQ09NTUlUIHJlc3BvbnNlIGlzCisJICogc3RpbGwgYmVpbmcgcmVhZCBmcm9t IHRoZSBiYWNrZW5kLCBkZXN5bmNpbmcgdGhlIHByb3RvY29sIGFuZCBoYW5naW5nCisJICogdGhl IHNlc3Npb24uICBUaGF0IGlzIHdoeSByZXNvbHV0aW9uIGhhcHBlbnMgYXQgcm91dGluZyB0aW1l IGluc3RlYWQuCisJICovCisJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9v bl93cml0ZSA9PQorCQlETEJPV19ETUxfQURBUFRJVkVfR0xPQkFMICYmCisJCU1BSU5fUkVQTElD QSAmJgorCQlub2RlICE9IE5VTEwgJiYKKwkJIXNlc3Npb25fY29udGV4dC0+aXNfaW5fdHJhbnNh Y3Rpb24gJiYKKwkJc2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX29pZF9s aXN0ICE9IE5JTCkKKwl7CisJCWludAkJCWRib2lkID0gc2Vzc2lvbl9jb250ZXh0LT50cmFuc2Fj dGlvbl90ZW1wX3dyaXRlX2Rib2lkOworCisJCWlmIChkYm9pZCA+IDApCisJCXsKKwkJCUxpc3RD ZWxsICAgKmNlbGw7CisKKwkJCWZvcmVhY2goY2VsbCwgc2Vzc2lvbl9jb250ZXh0LT50cmFuc2Fj dGlvbl90ZW1wX3dyaXRlX29pZF9saXN0KQorCQkJeworCQkJCWludAkJCXRvaWQgPSBsZmlyc3Rf aW50KGNlbGwpOworCisJCQkJaWYgKHRvaWQgPiAwKQorCQkJCQlwb29sX3RyYWNrX3RhYmxlX211 dGF0aW9uX21hcmtfdGFibGVfd3JpdHRlbih0b2lkLCBkYm9pZCk7CisJCQl9CisJCX0KKworCQls aXN0X2ZyZWUoc2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX29pZF9saXN0 KTsKKwkJc2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX29pZF9saXN0ID0g TklMOworCQlzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVfZGJvaWQgPSAw OworCX0KKwogCWlmIChJc0Eobm9kZSwgUHJlcGFyZVN0bXQpKQogCXsKIAkJaWYgKHNlc3Npb25f Y29udGV4dC0+dW5jb21wbGV0ZWRfbWVzc2FnZSkKZGlmZiAtLWdpdCBhL3NyYy9wcm90b2NvbC9j aGlsZC5jIGIvc3JjL3Byb3RvY29sL2NoaWxkLmMKaW5kZXggNzYxODc2ZjUzLi40YTUyN2M4NGMg MTAwNjQ0Ci0tLSBhL3NyYy9wcm90b2NvbC9jaGlsZC5jCisrKyBiL3NyYy9wcm90b2NvbC9jaGls ZC5jCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAidXRpbHMvZWxvZy5oIgogI2luY2x1ZGUg InV0aWxzL3BzX3N0YXR1cy5oIgogI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgorI2luY2x1 ZGUgInV0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uaCIKIAogI2luY2x1ZGUgImNvbnRl eHQvcG9vbF9wcm9jZXNzX2NvbnRleHQuaCIKICNpbmNsdWRlICJjb250ZXh0L3Bvb2xfc2Vzc2lv bl9jb250ZXh0LmgiCkBAIC0yMTMsNiArMjE0LDEzIEBAIGRvX2NoaWxkKGludCAqZmRzKQogCS8q IEluaXRpYWxpemUgcGVyIHByb2Nlc3MgY29udGV4dCAqLwogCXBvb2xfaW5pdF9wcm9jZXNzX2Nv bnRleHQoKTsKIAorCS8qIEluaXRpYWxpemUgdHJhY2sgdGFibGUgbXV0YXRpb24gY2hpbGQgc3Rh dGUgZm9yIGNvbGQgc3RhcnQgdHJhY2tpbmcgKi8KKwlpZiAocG9vbF9jb25maWctPmRpc2FibGVf bG9hZF9iYWxhbmNlX29uX3dyaXRlID09CisJCURMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwpCisJ eworCQlwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2NoaWxkX2luaXQoKTsKKwl9CisKIAkvKiBp bml0aWFsaXplIGNvbm5lY3Rpb24gcG9vbCAqLwogCWlmIChwb29sX2luaXRfY3AoKSkKIAl7CmRp ZmYgLS1naXQgYS9zcmMvcHJvdG9jb2wvcG9vbF9wcm90b19tb2R1bGVzLmMgYi9zcmMvcHJvdG9j b2wvcG9vbF9wcm90b19tb2R1bGVzLmMKaW5kZXggNTBhMGUzODMwLi45ZjM1NTI1MTUgMTAwNjQ0 Ci0tLSBhL3NyYy9wcm90b2NvbC9wb29sX3Byb3RvX21vZHVsZXMuYworKysgYi9zcmMvcHJvdG9j b2wvcG9vbF9wcm90b19tb2R1bGVzLmMKQEAgLTE0NzgsNyArMTQ3OCw5IEBAIFBhcnNlKFBPT0xf Q09OTkVDVElPTiAqZnJvbnRlbmQsIFBPT0xfQ09OTkVDVElPTl9QT09MICpiYWNrZW5kLAogCQlw b29sX3doZXJlX3RvX3NlbmQocXVlcnlfY29udGV4dCwgcXVlcnlfY29udGV4dC0+b3JpZ2luYWxf cXVlcnksCiAJCQkJCQkgICBxdWVyeV9jb250ZXh0LT5wYXJzZV90cmVlKTsKIAotCQlpZiAocG9v bF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RNTF9BREFQ VElWRSAmJiBzdHJsZW4obmFtZSkgIT0gMCkKKwkJaWYgKERMQk9XX0lTX0RNTF9BREFQVElWRSgK KwkJCQkJCQkJICBwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUpCisJ CQkmJiBzdHJsZW4obmFtZSkgIT0gMCkKIAkJCXBvb2xfc2V0YWxsX25vZGVfdG9fYmVfc2VudChx dWVyeV9jb250ZXh0KTsKIAogCQlpZiAoUkVQTElDQVRJT04pCkBAIC0xODIyLDcgKzE4MjQsNyBA QCBCaW5kKFBPT0xfQ09OTkVDVElPTiAqZnJvbnRlbmQsIFBPT0xfQ09OTkVDVElPTl9QT09MICpi YWNrZW5kLAogCQkJcmV0dXJuIFBPT0xfRU5EOwogCX0KIAotCWlmIChwb29sX2NvbmZpZy0+ZGlz YWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFICYmCisJaWYg KERMQk9XX0lTX0RNTF9BREFQVElWRShwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vf b25fd3JpdGUpICYmCiAJCVRTVEFURShiYWNrZW5kLCBNQUlOX1JFUExJQ0EgPyBQUklNQVJZX05P REVfSUQgOiBSRUFMX01BSU5fTk9ERV9JRCkgPT0gJ1QnKQogCXsKIAkJcG9vbF93aGVyZV90b19z ZW5kKHF1ZXJ5X2NvbnRleHQsIHF1ZXJ5X2NvbnRleHQtPm9yaWdpbmFsX3F1ZXJ5LApkaWZmIC0t Z2l0IGEvc3JjL3NhbXBsZS9wZ3Bvb2wuY29uZi5zYW1wbGUtc3RyZWFtIGIvc3JjL3NhbXBsZS9w Z3Bvb2wuY29uZi5zYW1wbGUtc3RyZWFtCmluZGV4IDFhYzk4MjkwNy4uY2U5YjkyZGEwIDEwMDY0 NAotLS0gYS9zcmMvc2FtcGxlL3BncG9vbC5jb25mLnNhbXBsZS1zdHJlYW0KKysrIGIvc3JjL3Nh bXBsZS9wZ3Bvb2wuY29uZi5zYW1wbGUtc3RyZWFtCkBAIC00NzgsNiArNDc4LDE0IEBAIGJhY2tl bmRfY2x1c3RlcmluZ19tb2RlID0gc3RyZWFtaW5nX3JlcGxpY2F0aW9uCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICMgICAgIG1vZGlmaWVkIHdpdGhpbiB0aGUgY3VycmVudCBl eHBsaWNpdCB0cmFuc2FjdGlvbiB3aWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgICAgIG5vdCBiZSBsb2FkIGJhbGFuY2VkIHVudGlsIHRoZSBlbmQgb2YgdGhlIHRyYW5z YWN0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICMgZG1sX2FkYXB0aXZlX2dsb2JhbDoKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgU3VwZXJzZXQgb2YgZG1sX2FkYXB0aXZl LiBJbiBhZGRpdGlvbiB0byBwZXItdHJhbnNhY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIyAgICAgdHJhY2tpbmcsIHVzZXMgc2hhcmVkIG1lbW9yeSB0byB0cmFjayBy ZWNlbnRseSB3cml0dGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAg IHRhYmxlcyBhY3Jvc3MgYWxsIHNlc3Npb25zLiBSZWFkcyBmcm9tIHJlY2VudGx5IHdyaXR0ZW4K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgdGFibGVzIGFyZSByb3V0 ZWQgdG8gcHJpbWFyeSB1bnRpbCBhIFRUTCAoYmFzZWQgb24KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyAgICAgcmVwbGljYXRpb24gZGVsYXkpIGV4cGlyZXMuIFJlcXVpcmVz IGFkZGl0aW9uYWwgc2hhcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg ICAgIG1lbW9yeS4gU2VlIHRyYWNrX3RhYmxlX211dGF0aW9uXyogcGFyYW1ldGVycyBiZWxvdy4K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjIGFsd2F5czoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIyAgICAgaWYgYSB3cml0ZSBxdWVyeSBpcyBpc3N1ZWQsIHJlYWQgcXVlcmllcyB3aWxs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vdCBiZSBsb2FkIGJh bGFuY2VkIHVudGlsIHRoZSBzZXNzaW9uIGVuZHMuCkBAIC00OTksNiArNTA3LDQzIEBAIGJhY2tl bmRfY2x1c3RlcmluZ19tb2RlID0gc3RyZWFtaW5nX3JlcGxpY2F0aW9uCiAjc3RhdGVtZW50X2xl dmVsX2xvYWRfYmFsYW5jZSA9IG9mZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjIEVuYWJsZXMgc3RhdGVtZW50IGxldmVsIGxvYWQgYmFsYW5jaW5nCiAKKyMgLSBUcmFjayBU YWJsZSBNdXRhdGlvbiAodXNlZCBieSBkbWxfYWRhcHRpdmVfZ2xvYmFsKSAtCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICMgV0FSTklORzogZG1sX2FkYXB0aXZlX2dsb2JhbCBp bmNyZWFzZXMgc2hhcmVkIG1lbW9yeSB1c2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjIERlZmF1bHQgc2V0dGluZ3MgcmVxdWlyZSB+ODAgS0Igc2hhcmVkIG1lbW9yeSBm b3IgdGFibGUgdHJhY2tpbmcKKworI3RyYWNrX3RhYmxlX211dGF0aW9uX3R0bF9mYWN0b3IgPSA1 LjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUVEwgbXVsdGlwbGllcjog VFRMID0gcmVwbGljYXRpb25fZGVsYXkgKiBmYWN0b3IKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIyBIaWdoZXIgdmFsdWVzIHByb3ZpZGUgbW9yZSBzYWZldHkgbWFyZ2luCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUmFuZ2U6IDEuMC0xMDAuMCAoZGVm YXVsdDogNS4wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChjaGFuZ2Ug cmVxdWlyZXMgcmVsb2FkKQorCisjdHJhY2tfdGFibGVfbXV0YXRpb25fbWF4X3N0YWxlbmVzcyA9 IDYwMDAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWF4aW11bSBkdXJh dGlvbiAobXMpIGEgdGFibGUgY2FuIGJlIG1hcmtlZCBzdGFsZQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjIGZyb20gaXRzIGZpcnN0IHdyaXRlLiBCb3VuZHMgY3Jvc3Mtc2Vz c2lvbiBpbXBhY3Q6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZXZlbiB1 bmRlciBjb250aW51b3VzIHdyaXRlcywgc3RhbGVuZXNzIGV4cGlyZXMKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIyBhZnRlciB0aGlzIHBlcmlvZCBhbmQgaXMgb25seSByZW5l d2VkIGJ5IG5ldyB3cml0ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg MCBkaXNhYmxlcyB0aGUgY2FwLiBSYW5nZTogMC0zNjAwMDAwIChkZWZhdWx0OiA2MDAwMCA9IDYw cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAoY2hhbmdlIHJlcXVpcmVz IHJlbG9hZCkKKworI3RyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb24gPSAy MDAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRHVyYXRpb24gaW4gbWls bGlzZWNvbmRzIHRvIHJvdXRlIGFsbCBxdWVyaWVzIHRvIHByaW1hcnkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIyBhZnRlciBjaGlsZCBwcm9jZXNzIHN0YXJ0cyAoY29sZCBz dGFydCBwZXJpb2QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUmFuZ2U6 IDAtNjAwMDAgbXMgKGRlZmF1bHQ6IDIwMDAgbXMgPSAyIHNlY29uZHMpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICMgU2V0IHRvIDAgdG8gZGlzYWJsZSBjb2xkIHN0YXJ0IGJl aGF2aW9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1 aXJlcyByZWxvYWQpCisKKyN0cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9idWNrZXRzID0gMTAy NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE51bWJlciBvZiBoYXNoIGJ1 Y2tldHMgZm9yIHRyYWNrIHRhYmxlIG11dGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICMgSGlnaGVyIHZhbHVlcyByZWR1Y2UgaGFzaCBjb2xsaXNpb25zCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUmFuZ2U6IDY0LTY1NTM2IChkZWZhdWx0OiAx MDI0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChjaGFuZ2UgcmVxdWly ZXMgcmVzdGFydCkKKworI3RyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemUgPSAyMDQ4Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWF4aW11bSBudW1iZXIgb2YgdGFi bGVzIHRvIHRyYWNrIHNpbXVsdGFuZW91c2x5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICMgUmFuZ2U6IDEyOC0xMzEwNzIgKGRlZmF1bHQ6IDIwNDgpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQorCisKICMt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgU1RSRUFNSU5HIFJFUExJQ0FUSU9OIE1PREUKICMtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9zdHJlYW1pbmdfcmVwbGljYXRpb24v cG9vbF93b3JrZXJfY2hpbGQuYyBiL3NyYy9zdHJlYW1pbmdfcmVwbGljYXRpb24vcG9vbF93b3Jr ZXJfY2hpbGQuYwppbmRleCAzMTFiNjM4NjUuLmNkZDU3MDM5NiAxMDA2NDQKLS0tIGEvc3JjL3N0 cmVhbWluZ19yZXBsaWNhdGlvbi9wb29sX3dvcmtlcl9jaGlsZC5jCisrKyBiL3NyYy9zdHJlYW1p bmdfcmVwbGljYXRpb24vcG9vbF93b3JrZXJfY2hpbGQuYwpAQCAtNTgsNiArNTgsNyBAQAogI2lu Y2x1ZGUgInV0aWxzL3Bvb2xfaXAuaCIKICNpbmNsdWRlICJ1dGlscy9wc19zdGF0dXMuaCIKICNp bmNsdWRlICJ1dGlscy9wb29sX3N0cmVhbS5oIgorI2luY2x1ZGUgInV0aWxzL3Bvb2xfdHJhY2tf dGFibGVfbXV0YXRpb24uaCIKIAogI2luY2x1ZGUgImNvbnRleHQvcG9vbF9wcm9jZXNzX2NvbnRl eHQuaCIKICNpbmNsdWRlICJjb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmgiCkBAIC00MTks NiArNDIwLDcgQEAgY2hlY2tfcmVwbGljYXRpb25fdGltZV9sYWcodm9pZCkKIAlCYWNrZW5kSW5m byAqYmtpbmZvOwogCXVpbnQ2NAkJbGFnOwogCXVpbnQ2NAkJZGVsYXlfdGhyZXNob2xkX2J5X3Rp bWU7CisJdWludDY0CQltYXhfZGVsYXlfdXMgPSAwOwogCUVycm9yQ29udGV4dENhbGxiYWNrIGNh bGxiYWNrOwogCWludAkJCWFjdGl2ZV9zdGFuZGJ5X25vZGU7CiAJYm9vbAkJcmVwbGljYXRpb25f ZGVsYXlfYnlfdGltZTsKQEAgLTY0Myw2ICs2NDUsMTAgQEAgY2hlY2tfcmVwbGljYXRpb25fdGlt ZV9sYWcodm9pZCkKIAkJCQkJCQkJCQkJCQkgKiBzZWNvbmRzIHRvIG1pY3JvCiAJCQkJCQkJCQkJ CQkJICogc2Vjb25kcyAqLwogCisJCQkJLyogVHJhY2sgbWF4IGRlbGF5IGZvciBtdXRhdGlvbiBU VEwgKi8KKwkJCQlpZiAobGFnID4gbWF4X2RlbGF5X3VzKQorCQkJCQltYXhfZGVsYXlfdXMgPSBs YWc7CisKIAkJCQkvKiBMb2cgZGVsYXkgaWYgbmVjZXNzYXJ5ICovCiAJCQkJaWYgKChwb29sX2Nv bmZpZy0+bG9nX3N0YW5kYnlfZGVsYXkgPT0gTFNEX0FMV0FZUyAmJiBsYWcgPiAwKSB8fAogCQkJ CQkocG9vbF9jb25maWctPmxvZ19zdGFuZGJ5X2RlbGF5ID09IExTRF9PVkVSX1RIUkVTSE9MRCAm JgpAQCAtNjY4LDYgKzY3NCwxMyBAQCBjaGVja19yZXBsaWNhdGlvbl90aW1lX2xhZyh2b2lkKQog CQl9CiAJfQogCisJLyoKKwkgKiBVcGRhdGUgdHJhY2sgdGFibGUgbXV0YXRpb24gVFRMIGZyb20g dGhlIG1heCBvYnNlcnZlZCB0aW1lLWJhc2VkCisJICogcmVwbGljYXRpb24gZGVsYXkuCisJICov CisJaWYgKHJlcGxpY2F0aW9uX2RlbGF5X2J5X3RpbWUgJiYgbWF4X2RlbGF5X3VzID4gMCkKKwkJ cG9vbF90cmFja190YWJsZV9tdXRhdGlvbl91cGRhdGVfdHRsKG1heF9kZWxheV91cyk7CisKIAll cnJvcl9jb250ZXh0X3N0YWNrID0gY2FsbGJhY2sucHJldmlvdXM7CiB9CiAKQEAgLTY5NSw2ICs3 MDgsNyBAQCBjaGVja19yZXBsaWNhdGlvbl90aW1lX2xhZ193aXRoX2NtZCh2b2lkKQogCWRvdWJs ZQkJZGVsYXlfbXM7CiAJdWludDY0CQlkZWxheTsKIAl1aW50NjQJCWRlbGF5X3RocmVzaG9sZF9i eV90aW1lOworCXVpbnQ2NAkJbWF4X2RlbGF5X3VzID0gMDsJLyogVHJhY2sgbWF4IGRlbGF5IGZv ciBtdXRhdGlvbiBtYXAgKi8KIAlpbnQJCQl0b2tlbl9jb3VudCA9IDA7CiAJaW50CQkJcHJpbWFy eV9ub2RlX2lkOwogCWludAkJCXNhdmVfZXJybm87CkBAIC0xMDAzLDYgKzEwMTcsMTAgQEAgY2hl Y2tfcmVwbGljYXRpb25fdGltZV9sYWdfd2l0aF9jbWQodm9pZCkKIAkJCWJraW5mby0+c3RhbmRi eV9kZWxheSA9IGRlbGF5OwogCQkJYmtpbmZvLT5zdGFuZGJ5X2RlbGF5X2J5X3RpbWUgPSB0cnVl OwogCisJCQkvKiBUcmFjayBtYXhpbXVtIGRlbGF5IGZvciB0YWJsZSBtdXRhdGlvbiBtYXAgVFRM IGNhbGN1bGF0aW9uICovCisJCQlpZiAoZGVsYXkgPiBtYXhfZGVsYXlfdXMpCisJCQkJbWF4X2Rl bGF5X3VzID0gZGVsYXk7CisKIAkJCS8qCiAJCQkgKiBMb2cgZGVsYXkgaWYgbmVjZXNzYXJ5LiB0 aHJlc2hvbGQgaXMgaW4gbWlsbGlzZWNvbmRzLCBjb252ZXJ0CiAJCQkgKiB0byBtaWNyb3NlY29u ZHMuCkBAIC0xMDIxLDYgKzEwMzksMTIgQEAgY2hlY2tfcmVwbGljYXRpb25fdGltZV9sYWdfd2l0 aF9jbWQodm9pZCkKIAkJCXRva2VuID0gc3RydG9rX3IoTlVMTCwgIiBcdFxuIiwgJnNhdmVwdHIp OwogCQl9CiAKKwkJLyogVXBkYXRlIHRhYmxlIG11dGF0aW9uIFRUTCBiYXNlZCBvbiBtYXggb2Jz ZXJ2ZWQgZGVsYXkgKi8KKwkJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9v bl93cml0ZSA9PQorCQkJRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JBTCAmJgorCQkJbWF4X2RlbGF5 X3VzID4gMCkKKwkJCXBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fdXBkYXRlX3R0bChtYXhfZGVs YXlfdXMpOworCiAJfQogCVBHX0NBVENIKCk7CiAJewpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzc2lvbi9saWJzLnNoIGIvc3JjL3Rlc3QvcmVncmVzc2lvbi9saWJzLnNoCmluZGV4IDdjNWEw YzE4Mi4uMWM4YWUzOTJkIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzaW9uL2xpYnMuc2gK KysrIGIvc3JjL3Rlc3QvcmVncmVzc2lvbi9saWJzLnNoCkBAIC00Miw2ICs0Miw4IEBAIGZ1bmN0 aW9uIHdhaXRfZm9yX2ZhaWxvdmVyX2RvbmUgewogZnVuY3Rpb24gY2xlYW5fYWxsIHsKIAlwZ3Jl cCBwZ3Bvb2wgfCB4YXJncyBraWxsIC05ID4gL2Rldi9udWxsIDI+JjEKIAlwZ3JlcCBwb3N0Z3Jl cyB8IHhhcmdzIGtpbGwgLTkgPiAvZGV2L251bGwgMj4mMQorCSMgQ2xlYW4gdXAgbGVha2VkIFN5 c1YgSVBDIHJlc291cmNlcyBsZWZ0IGJlaGluZCBieSBraWxsIC05CisJaXBjcm0gLS1hbGwgMj4v ZGV2L251bGwgfHwgdHJ1ZQogCXJtIC1mICRQR1NPQ0tFVF9ESVIvLnMuUEdTUUwuKgogCW5ldHN0 YXQgLXQgLXAgMj4vZGV2L251bGx8Z3JlcCBwZ3Bvb2wKIH0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNrX3RhYmxlX211dGF0aW9uL3Rlc3Quc2ggYi9zcmMv dGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0My50cmFja190YWJsZV9tdXRhdGlvbi90ZXN0LnNoCm5l dyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMC4uOGI0ZGQxN2I4Ci0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzc2lvbi90ZXN0cy8wNDMudHJhY2tfdGFibGVfbXV0YXRp b24vdGVzdC5zaApAQCAtMCwwICsxLDM1NCBAQAorIyEvdXNyL2Jpbi9lbnYgYmFzaAorIy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyMgdGVzdCBzY3JpcHQgZm9yIHRyYWNrIHRhYmxlIG11dGF0aW9uIGZlYXR1cmUgKGlu LW1lbW9yeSB0YWJsZSB0cmFja2luZykuCisjIFRlc3RzIHJvdXRpbmcgb2YgcXVlcmllcyBiYXNl ZCBvbiByZWNlbnRseSB3cml0dGVuIHRhYmxlcy4KKyMKK3NvdXJjZSAkVEVTVExJQlMKK1RFU1RE SVI9dGVzdGRpcgorUFNRTD0kUEdCSU4vcHNxbAorUFNRTE9QVFM9Ii1hIC1xIC1YIgorUEdQT09M QklOPSRQR1BPT0xfSU5TVEFMTF9ESVIvYmluCitleHBvcnQgUEdEQVRBQkFTRT10ZXN0CisKKyMg T25seSBydW4gaW4gc3RyZWFtaW5nIHJlcGxpY2F0aW9uIG1vZGUgc2luY2UgdGhhdCdzIHRoZSB0 YXJnZXQgdXNlIGNhc2UKK2ZvciBtb2RlIGluIHMKK2RvCisgICAgcm0gLWZyICRURVNURElSCisg ICAgbWtkaXIgJFRFU1RESVIKKyAgICBjZCAkVEVTVERJUgorCisgICAgIyBDcmVhdGUgdGVzdCBl bnZpcm9ubWVudCB3aXRoIDIgbm9kZXMKKyAgICBlY2hvIC1uICJjcmVhdGluZyB0ZXN0IGVudmly b25tZW50Li4uIgorICAgICRQR1BPT0xfU0VUVVAgLW0gJG1vZGUgLW4gMiB8fCBleGl0IDEKKyAg ICBlY2hvICJkb25lLiIKKworICAgIHNvdXJjZSAuL2Jhc2hyYy5wb3J0cworCisgICAgIyBDb25m aWd1cmUgdHJhY2sgdGFibGUgbXV0YXRpb24gZmVhdHVyZSB2aWEgZG1sX2FkYXB0aXZlX2dsb2Jh bAorICAgIGVjaG8gImRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID0gJ2RtbF9hZGFwdGl2 ZV9nbG9iYWwnIiA+PiBldGMvcGdwb29sLmNvbmYKKyAgICBlY2hvICJ0cmFja190YWJsZV9tdXRh dGlvbl90dGxfZmFjdG9yID0gNS4wIiA+PiBldGMvcGdwb29sLmNvbmYKKyAgICBlY2hvICJ0cmFj a190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uID0gMTAwMDAiID4+IGV0Yy9wZ3Bv b2wuY29uZgorCisgICAgIyBFbmFibGUgbG9hZCBiYWxhbmNpbmcgZXhwbGljaXRseQorICAgIGVj aG8gImxvYWRfYmFsYW5jZV9tb2RlID0gb24iID4+IGV0Yy9wZ3Bvb2wuY29uZgorCisgICAgIyBD b25maWd1cmUgd2VpZ2h0cyBzbyB3ZSBjYW4gZGlzdGluZ3Vpc2ggcm91dGluZworICAgICMgQmFj a2VuZCAwIChwcmltYXJ5KSB3ZWlnaHQ9MCwgQmFja2VuZCAxIChzdGFuZGJ5KSB3ZWlnaHQ9MQor ICAgICMgVGhpcyBtZWFucyBsb2FkIGJhbGFuY2VkIHF1ZXJpZXMgZ28gdG8gbm9kZSAxIGJ5IGRl ZmF1bHQKKyAgICBlY2hvICJiYWNrZW5kX3dlaWdodDAgPSAwIiA+PiBldGMvcGdwb29sLmNvbmYK KyAgICBlY2hvICJiYWNrZW5kX3dlaWdodDEgPSAxIiA+PiBldGMvcGdwb29sLmNvbmYKKworICAg ICMgRW5hYmxlIGRlYnVnIGxvZ2dpbmcgdG8gc2VlIHJvdXRpbmcgZGVjaXNpb25zCisgICAgZWNo byAibG9nX21pbl9tZXNzYWdlcyA9IGRlYnVnMSIgPj4gZXRjL3BncG9vbC5jb25mCisKKyAgICAu L3N0YXJ0YWxsCisKKyAgICBleHBvcnQgUEdQT1JUPSRQR1BPT0xfUE9SVAorICAgIGV4cG9ydCBQ R0hPU1Q9bG9jYWxob3N0CisKKyAgICB3YWl0X2Zvcl9wZ3Bvb2xfc3RhcnR1cAorCisgICAgIyBD cmVhdGUgdGVzdCB0YWJsZXMKKyAgICAkUFNRTCB0ZXN0IDw8RU9GCitDUkVBVEUgVEFCTEUgdDEo aSBJTlRFR0VSKTsKK0NSRUFURSBUQUJMRSB0MihpIElOVEVHRVIpOworQ1JFQVRFIFRBQkxFIHQz KGkgSU5URUdFUik7CitFT0YKKworICAgIGVjaG8gIj09PSBUZXN0IDE6IENvbGQgU3RhcnQgUm91 dGluZyA9PT0iCisgICAgIyBEdXJpbmcgY29sZCBzdGFydCwgYWxsIHF1ZXJpZXMgc2hvdWxkIGdv IHRvIHByaW1hcnkKKyAgICAjIFJlc3RhcnQgcGdwb29sIHRvIHRyaWdnZXIgY29sZCBzdGFydAor ICAgIC4vc2h1dGRvd25hbGwKKyAgICAuL3N0YXJ0YWxsCisgICAgd2FpdF9mb3JfcGdwb29sX3N0 YXJ0dXAKKworICAgICMgSW1tZWRpYXRlbHkgcXVlcnkgLSBzaG91bGQgZ28gdG8gcHJpbWFyeSBk dWUgdG8gY29sZCBzdGFydAorICAgICRQU1FMIHRlc3QgLWMgIlNFTEVDVCAnY29sZF9zdGFydF90 ZXN0JyBhcyBtYXJrZXIsICogRlJPTSB0MTsiID4gL2Rldi9udWxsIDI+JjEKKworICAgICMgQ2hl Y2sgbG9nIGZvciBjb2xkIHN0YXJ0IG1lc3NhZ2UgKHVzZSAtYSB0byBoYW5kbGUgYmluYXJ5IGxv ZyBmaWxlcykKKyAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1 c2Ugb2YgdHJhY2sgdGFibGUgbXV0YXRpb24gY29sZCBzdGFydCIgbG9nL3BncG9vbC5sb2c7IHRo ZW4KKyAgICAgICAgZWNobyAiVGVzdCAxIFBBU1NFRDogQ29sZCBzdGFydCByb3V0aW5nIHdvcmtz IgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiVGVzdCAxIEZBSUxFRDogQ29sZCBzdGFydCByb3V0 aW5nIG5vdCBkZXRlY3RlZCIKKyAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAgICBleGl0IDEK KyAgICBmaQorCisgICAgZWNobyAiPT09IFRlc3QgMjogV2FpdCBmb3IgY29sZCBzdGFydCB0byBl bmQgPT09IgorICAgICMgV2FpdCBmb3IgY29sZCBzdGFydCBwZXJpb2QgdG8gZW5kICgxMCBzZWNv bmRzKS4KKyAgICAjIFVzZSBnZW5lcm91cyBtYXJnaW4gdG8gYXZvaWQgZmxha2luZXNzIHVuZGVy IGxvYWQgKGUuZy4gZnVsbCByZWdyZXNzaW9uIHN1aXRlKS4KKyAgICBzbGVlcCAxMgorCisgICAg IyBDbGVhciB0aGUgbG9nCisgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgIyBOb3cgYSBjbGVh biB0YWJsZSBxdWVyeSBzaG91bGQgbG9hZCBiYWxhbmNlIChnbyB0byBub2RlIDEpCisgICAgJFBT UUwgdGVzdCAtYyAiU0VMRUNUICdhZnRlcl9jb2xkX3N0YXJ0JyBhcyBtYXJrZXIsICogRlJPTSB0 MzsiID4gL2Rldi9udWxsIDI+JjEKKworICAgICMgQWZ0ZXIgY29sZCBzdGFydCwgcXVlcmllcyB0 byBjbGVhbiB0YWJsZXMgc2hvdWxkIGxvYWQgYmFsYW5jZQorICAgICMgQ2hlY2sgdGhhdCBpdCBk aWQgTk9UIGdldCBmb3JjZWQgdG8gcHJpbWFyeSBkdWUgdG8gdHJhY2sgdGFibGUgbXV0YXRpb24K KyAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2Ugb2YgdHJh Y2sgdGFibGUgbXV0YXRpb24gY29sZCBzdGFydCIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAg ICAgZWNobyAiVGVzdCAyIEZBSUxFRDogU3RpbGwgaW4gY29sZCBzdGFydCBhZnRlciB3YWl0aW5n IgorICAgICAgICAuL3NodXRkb3duYWxsCisgICAgICAgIGV4aXQgMQorICAgIGZpCisgICAgZWNo byAiVGVzdCAyIFBBU1NFRDogQ29sZCBzdGFydCBlbmRlZCBjb3JyZWN0bHkiCisKKyAgICBlY2hv ICI9PT0gVGVzdCAzOiBXcml0ZS10aGVuLVJlYWQgUm91dGluZyA9PT0iCisgICAgIyBDbGVhciB0 aGUgbG9nCisgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgIyBXcml0ZSB0byB0MSBhbmQgdGhl biByZWFkIC0gdXNlIHNpbmdsZSBjb25uZWN0aW9uIHRvIGVuc3VyZSBzYW1lIHNlc3Npb24KKyAg ICAkUFNRTCB0ZXN0IDw8RU9GCitJTlNFUlQgSU5UTyB0MSBWQUxVRVMgKDEpOworU0VMRUNUICd3 cml0ZV9yZWFkX3Rlc3QnIGFzIG1hcmtlciwgKiBGUk9NIHQxOworRU9GCisKKyAgICAjIFNtYWxs IGRlbGF5IHRvIGVuc3VyZSBsb2cgaXMgZmx1c2hlZAorICAgIHNsZWVwIDAuNQorCisgICAgIyBD aGVjayBsb2cgZm9yIHRhYmxlIHN0YWxlbmVzcyBtZXNzYWdlCisgICAgaWYgZ3JlcCAtYSAtcSAi Y291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlLip3YXMgcmVjZW50bHkgd3JpdHRl biIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAgICAgZWNobyAiVGVzdCAzIFBBU1NFRDogV3Jp dGUtdGhlbi1yZWFkIHJvdXRpbmcgd29ya3MiCisgICAgZWxzZQorICAgICAgICBlY2hvICJUZXN0 IDMgRkFJTEVEOiBUYWJsZSBzdGFsZW5lc3Mgbm90IGRldGVjdGVkIGFmdGVyIHdyaXRlIgorICAg ICAgICAjIFNob3cgcmVsZXZhbnQgbG9nIGVudHJpZXMgZm9yIGRlYnVnZ2luZworICAgICAgICBn cmVwIC1hIC1pICJ0cmFja190YWJsZV9tdXRhdGlvbiIgbG9nL3BncG9vbC5sb2cgfCB0YWlsIC0y MAorICAgICAgICAuL3NodXRkb3duYWxsCisgICAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBl Y2hvICI9PT0gVGVzdCA0OiBDbGVhbiBUYWJsZSBTdGlsbCBMb2FkIEJhbGFuY2VzID09PSIKKyAg ICAjIENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIFJlYWQgZnJv bSB0MiAobmV2ZXIgd3JpdHRlbiB0bykgLSBzaG91bGQgbG9hZCBiYWxhbmNlCisgICAgJFBTUUwg dGVzdCAtYyAiU0VMRUNUICdjbGVhbl90YWJsZV90ZXN0JyBhcyBtYXJrZXIsICogRlJPTSB0Mjsi ID4gL2Rldi9udWxsIDI+JjEKKworICAgICMgU2hvdWxkIE5PVCBzZWUgdHJhY2sgdGFibGUgbXV0 YXRpb24gYmxvY2tpbmcgbWVzc2FnZSBmb3IgdDIKKyAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBu b3QgbG9hZCBiYWxhbmNlIGJlY2F1c2UgdGFibGUuKnQyLip3YXMgcmVjZW50bHkgd3JpdHRlbiIg bG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAgICAgZWNobyAiVGVzdCA0IEZBSUxFRDogQ2xlYW4g dGFibGUgaW5jb3JyZWN0bHkgbWFya2VkIGFzIHN0YWxlIgorICAgICAgICAuL3NodXRkb3duYWxs CisgICAgICAgIGV4aXQgMQorICAgIGZpCisgICAgZWNobyAiVGVzdCA0IFBBU1NFRDogQ2xlYW4g dGFibGVzIHN0aWxsIGxvYWQgYmFsYW5jZSIKKworICAgIGVjaG8gIj09PSBUZXN0IDU6IFVQREFU RSBNYXJrcyBUYWJsZSBhcyBTdGFsZSA9PT0iCisgICAgIyBDbGVhciB0aGUgbG9nCisgICAgPiBs b2cvcGdwb29sLmxvZworCisgICAgIyBVcGRhdGUgdDIgYW5kIHRoZW4gcmVhZCAtIHVzZSBzaW5n bGUgY29ubmVjdGlvbgorICAgICRQU1FMIHRlc3QgPDxFT0YKK1VQREFURSB0MiBTRVQgaSA9IDk5 OSBXSEVSRSBpID0gMDsKK1NFTEVDVCAndXBkYXRlX3Rlc3QnIGFzIG1hcmtlciwgKiBGUk9NIHQy OworRU9GCisKKyAgICAjIFNtYWxsIGRlbGF5IHRvIGVuc3VyZSBsb2cgaXMgZmx1c2hlZAorICAg IHNsZWVwIDAuNQorCisgICAgaWYgZ3JlcCAtYSAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBi ZWNhdXNlIHRhYmxlLip3YXMgcmVjZW50bHkgd3JpdHRlbiIgbG9nL3BncG9vbC5sb2c7IHRoZW4K KyAgICAgICAgZWNobyAiVGVzdCA1IFBBU1NFRDogVVBEQVRFIG1hcmtzIHRhYmxlIGFzIHN0YWxl IgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiVGVzdCA1IEZBSUxFRDogVVBEQVRFIGRpZCBub3Qg bWFyayB0YWJsZSBhcyBzdGFsZSIKKyAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAgICBleGl0 IDEKKyAgICBmaQorCisgICAgZWNobyAiPT09IFRlc3QgNjogREVMRVRFIE1hcmtzIFRhYmxlIGFz IFN0YWxlID09PSIKKyAgICAjIENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisK KyAgICAjIERlbGV0ZSBmcm9tIHQzIGFuZCB0aGVuIHJlYWQgLSB1c2Ugc2luZ2xlIGNvbm5lY3Rp b24KKyAgICAkUFNRTCB0ZXN0IDw8RU9GCitERUxFVEUgRlJPTSB0MyBXSEVSRSBpID0gMDsKK1NF TEVDVCAnZGVsZXRlX3Rlc3QnIGFzIG1hcmtlciwgKiBGUk9NIHQzOworRU9GCisKKyAgICAjIFNt YWxsIGRlbGF5IHRvIGVuc3VyZSBsb2cgaXMgZmx1c2hlZAorICAgIHNsZWVwIDAuNQorCisgICAg aWYgZ3JlcCAtYSAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlLip3YXMg cmVjZW50bHkgd3JpdHRlbiIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAgICAgZWNobyAiVGVz dCA2IFBBU1NFRDogREVMRVRFIG1hcmtzIHRhYmxlIGFzIHN0YWxlIgorICAgIGVsc2UKKyAgICAg ICAgZWNobyAiVGVzdCA2IEZBSUxFRDogREVMRVRFIGRpZCBub3QgbWFyayB0YWJsZSBhcyBzdGFs ZSIKKyAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAgICBleGl0IDEKKyAgICBmaQorCisgICAg ZWNobyAiPT09IFRlc3QgNzogVFJVTkNBVEUgTWFya3MgVGFibGUgYXMgU3RhbGUgPT09IgorICAg ICMgQ2xlYXIgdGhlIGxvZworICAgID4gbG9nL3BncG9vbC5sb2cKKworICAgICMgQ3JlYXRlIGEg ZnJlc2ggdGFibGUgZm9yIFRSVU5DQVRFIHRlc3QKKyAgICAkUFNRTCB0ZXN0IC1jICJDUkVBVEUg VEFCTEUgdF90cnVuY2F0ZShpIElOVEVHRVIpOyIgPiAvZGV2L251bGwgMj4mMQorICAgICRQU1FM IHRlc3QgLWMgIklOU0VSVCBJTlRPIHRfdHJ1bmNhdGUgVkFMVUVTICgxKSwgKDIpLCAoMyk7IiA+ IC9kZXYvbnVsbCAyPiYxCisKKyAgICAjIFdhaXQgZm9yIGFueSBUVEwgdG8gZXhwaXJlCisgICAg c2xlZXAgMworCisgICAgIyBDbGVhciB0aGUgbG9nIGFnYWluCisgICAgPiBsb2cvcGdwb29sLmxv ZworCisgICAgIyBUcnVuY2F0ZSBhbmQgdGhlbiByZWFkIC0gdXNlIHNpbmdsZSBjb25uZWN0aW9u CisgICAgJFBTUUwgdGVzdCA8PEVPRgorVFJVTkNBVEUgdF90cnVuY2F0ZTsKK1NFTEVDVCAndHJ1 bmNhdGVfdGVzdCcgYXMgbWFya2VyLCAqIEZST00gdF90cnVuY2F0ZTsKK0VPRgorCisgICAgIyBT bWFsbCBkZWxheSB0byBlbnN1cmUgbG9nIGlzIGZsdXNoZWQKKyAgICBzbGVlcCAwLjUKKworICAg IGlmIGdyZXAgLWEgLXEgImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4qd2Fz IHJlY2VudGx5IHdyaXR0ZW4iIGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisgICAgICAgIGVjaG8gIlRl c3QgNyBQQVNTRUQ6IFRSVU5DQVRFIG1hcmtzIHRhYmxlIGFzIHN0YWxlIgorICAgIGVsc2UKKyAg ICAgICAgZWNobyAiVGVzdCA3IEZBSUxFRDogVFJVTkNBVEUgZGlkIG5vdCBtYXJrIHRhYmxlIGFz IHN0YWxlIgorICAgICAgICBncmVwIC1hIC1pICJ0cmFja190YWJsZV9tdXRhdGlvbiIgbG9nL3Bn cG9vbC5sb2cgfCB0YWlsIC0yMAorICAgICAgICAuL3NodXRkb3duYWxsCisgICAgICAgIGV4aXQg MQorICAgIGZpCisKKyAgICBlY2hvICI9PT0gVGVzdCA4OiBXSVRIIENsYXVzZSAoQ1RFIHdpdGgg REVMRVRFKSBNYXJrcyBUYWJsZSBhcyBTdGFsZSA9PT0iCisgICAgIyBDbGVhciB0aGUgbG9nCisg ICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgIyBDcmVhdGUgYSBmcmVzaCB0YWJsZSBmb3IgV0lU SCB0ZXN0CisgICAgJFBTUUwgdGVzdCAtYyAiQ1JFQVRFIFRBQkxFIHRfY3RlKGkgSU5URUdFUik7 IiA+IC9kZXYvbnVsbCAyPiYxCisgICAgJFBTUUwgdGVzdCAtYyAiSU5TRVJUIElOVE8gdF9jdGUg VkFMVUVTICgxKSwgKDIpLCAoMyk7IiA+IC9kZXYvbnVsbCAyPiYxCisKKyAgICAjIFdhaXQgZm9y IGFueSBUVEwgdG8gZXhwaXJlCisgICAgc2xlZXAgMworCisgICAgIyBDbGVhciB0aGUgbG9nIGFn YWluCisgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgIyBVc2UgV0lUSCBjbGF1c2Ugd2l0aCBE RUxFVEUsIHRoZW4gcmVhZCBmcm9tIHRoZSB0YWJsZQorICAgICRQU1FMIHRlc3QgPDxFT0YKK1dJ VEggZGVsZXRlZCBBUyAoREVMRVRFIEZST00gdF9jdGUgV0hFUkUgaSA9IDEgUkVUVVJOSU5HICop CitTRUxFQ1QgKiBGUk9NIGRlbGV0ZWQ7CitTRUxFQ1QgJ2N0ZV90ZXN0JyBhcyBtYXJrZXIsICog RlJPTSB0X2N0ZTsKK0VPRgorCisgICAgIyBTbWFsbCBkZWxheSB0byBlbnN1cmUgbG9nIGlzIGZs dXNoZWQKKyAgICBzbGVlcCAwLjUKKworICAgIGlmIGdyZXAgLWEgLXEgImNvdWxkIG5vdCBsb2Fk IGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4qd2FzIHJlY2VudGx5IHdyaXR0ZW4iIGxvZy9wZ3Bvb2wu bG9nOyB0aGVuCisgICAgICAgIGVjaG8gIlRlc3QgOCBQQVNTRUQ6IFdJVEggY2xhdXNlIChDVEUp IG1hcmtzIHRhYmxlIGFzIHN0YWxlIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiVGVzdCA4IEZB SUxFRDogV0lUSCBjbGF1c2UgKENURSkgZGlkIG5vdCBtYXJrIHRhYmxlIGFzIHN0YWxlIgorICAg ICAgICBncmVwIC1hIC1pICJ0cmFja190YWJsZV9tdXRhdGlvbiIgbG9nL3BncG9vbC5sb2cgfCB0 YWlsIC0yMAorICAgICAgICAuL3NodXRkb3duYWxsCisgICAgICAgIGV4aXQgMQorICAgIGZpCisK KyAgICAjIFRlc3QgOTogTUVSR0UgKFBvc3RncmVTUUwgMTUrIG9ubHkpCisgICAgUEdfTUFKT1Jf VkVSU0lPTj0kKCRQU1FMIC10IC1jICJTRUxFQ1Qgc3Vic3RyaW5nKHZlcnNpb24oKSBmcm9tICdQ b3N0Z3JlU1FMIChbMC05XSspJyk7IiB8IHRyIC1kICcgJykKKyAgICBpZiBbICIkUEdfTUFKT1Jf VkVSU0lPTiIgLWdlIDE1IF0gMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgZWNobyAiPT09IFRl c3QgOTogTUVSR0UgTWFya3MgVGFibGUgYXMgU3RhbGUgKFBvc3RncmVTUUwgJFBHX01BSk9SX1ZF UlNJT04pID09PSIKKyAgICAgICAgIyBDbGVhciB0aGUgbG9nCisgICAgICAgID4gbG9nL3BncG9v bC5sb2cKKworICAgICAgICAjIENyZWF0ZSB0YWJsZXMgZm9yIE1FUkdFIHRlc3QKKyAgICAgICAg JFBTUUwgdGVzdCAtYyAiQ1JFQVRFIFRBQkxFIHRfbWVyZ2VfdGFyZ2V0KGlkIElOVEVHRVIgUFJJ TUFSWSBLRVksIHZhbCBURVhUKTsiID4gL2Rldi9udWxsIDI+JjEKKyAgICAgICAgJFBTUUwgdGVz dCAtYyAiQ1JFQVRFIFRBQkxFIHRfbWVyZ2Vfc291cmNlKGlkIElOVEVHRVIsIHZhbCBURVhUKTsi ID4gL2Rldi9udWxsIDI+JjEKKyAgICAgICAgJFBTUUwgdGVzdCAtYyAiSU5TRVJUIElOVE8gdF9t ZXJnZV90YXJnZXQgVkFMVUVTICgxLCAnb2xkJyk7IiA+IC9kZXYvbnVsbCAyPiYxCisgICAgICAg ICRQU1FMIHRlc3QgLWMgIklOU0VSVCBJTlRPIHRfbWVyZ2Vfc291cmNlIFZBTFVFUyAoMSwgJ25l dycpLCAoMiwgJ2luc2VydCcpOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgICAgICMgV2FpdCBm b3IgYW55IFRUTCB0byBleHBpcmUKKyAgICAgICAgc2xlZXAgMworCisgICAgICAgICMgQ2xlYXIg dGhlIGxvZyBhZ2FpbgorICAgICAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAgICAgIyBVc2Ug TUVSR0UsIHRoZW4gcmVhZCBmcm9tIHRoZSB0YXJnZXQgdGFibGUKKyAgICAgICAgJFBTUUwgdGVz dCA8PEVPRgorTUVSR0UgSU5UTyB0X21lcmdlX3RhcmdldCB0CitVU0lORyB0X21lcmdlX3NvdXJj ZSBzIE9OIHQuaWQgPSBzLmlkCitXSEVOIE1BVENIRUQgVEhFTiBVUERBVEUgU0VUIHZhbCA9IHMu dmFsCitXSEVOIE5PVCBNQVRDSEVEIFRIRU4gSU5TRVJUIFZBTFVFUyAocy5pZCwgcy52YWwpOwor U0VMRUNUICdtZXJnZV90ZXN0JyBhcyBtYXJrZXIsICogRlJPTSB0X21lcmdlX3RhcmdldDsKK0VP RgorCisgICAgICAgICMgU21hbGwgZGVsYXkgdG8gZW5zdXJlIGxvZyBpcyBmbHVzaGVkCisgICAg ICAgIHNsZWVwIDAuNQorCisgICAgICAgIGlmIGdyZXAgLWEgLXEgImNvdWxkIG5vdCBsb2FkIGJh bGFuY2UgYmVjYXVzZSB0YWJsZS4qd2FzIHJlY2VudGx5IHdyaXR0ZW4iIGxvZy9wZ3Bvb2wubG9n OyB0aGVuCisgICAgICAgICAgICBlY2hvICJUZXN0IDkgUEFTU0VEOiBNRVJHRSBtYXJrcyB0YWJs ZSBhcyBzdGFsZSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZWNobyAiVGVzdCA5IEZBSUxF RDogTUVSR0UgZGlkIG5vdCBtYXJrIHRhYmxlIGFzIHN0YWxlIgorICAgICAgICAgICAgZ3JlcCAt YSAtaSAidHJhY2tfdGFibGVfbXV0YXRpb24iIGxvZy9wZ3Bvb2wubG9nIHwgdGFpbCAtMjAKKyAg ICAgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQor ICAgIGVsc2UKKyAgICAgICAgZWNobyAiPT09IFRlc3QgOTogTUVSR0Ugc2tpcHBlZCAocmVxdWly ZXMgUG9zdGdyZVNRTCAxNSssIGhhdmUgJFBHX01BSk9SX1ZFUlNJT04pID09PSIKKyAgICBmaQor CisgICAgZWNobyAiPT09IFRlc3QgMTA6IFJPTExCQUNLIERvZXMgTk9UIE1hcmsgVGFibGUgYXMg U3RhbGUgPT09IgorICAgICMgQ3JlYXRlIGEgZnJlc2ggdGFibGUgZm9yIHJvbGxiYWNrIHRlc3QK KyAgICAkUFNRTCB0ZXN0IC1jICJDUkVBVEUgVEFCTEUgdF9yb2xsYmFjayhpIElOVEVHRVIpOyIg PiAvZGV2L251bGwgMj4mMQorCisgICAgIyBXYWl0IGZvciBhbnkgVFRMIHRvIGV4cGlyZQorICAg IHNsZWVwIDMKKworICAgICMgQ2xlYXIgdGhlIGxvZworICAgID4gbG9nL3BncG9vbC5sb2cKKwor ICAgICMgV3JpdGUgaW5zaWRlIGEgdHJhbnNhY3Rpb24sIHRoZW4gcm9sbGJhY2sKKyAgICAkUFNR TCB0ZXN0IDw8RU9GCitCRUdJTjsKK0lOU0VSVCBJTlRPIHRfcm9sbGJhY2sgVkFMVUVTICgxKTsK K1JPTExCQUNLOworU0VMRUNUICdyb2xsYmFja190ZXN0JyBhcyBtYXJrZXIsICogRlJPTSB0X3Jv bGxiYWNrOworRU9GCisKKyAgICAjIFNtYWxsIGRlbGF5IHRvIGVuc3VyZSBsb2cgaXMgZmx1c2hl ZAorICAgIHNsZWVwIDAuNQorCisgICAgIyBTaG91bGQgTk9UIHNlZSB0X3JvbGxiYWNrIG1hcmtl ZCBhcyBzdGFsZSBzaW5jZSB0aGUgd3JpdGUgd2FzIHJvbGxlZCBiYWNrCisgICAgaWYgZ3JlcCAt YSAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlLip0X3JvbGxiYWNrLip3 YXMgcmVjZW50bHkgd3JpdHRlbiIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAgICAgZWNobyAi VGVzdCAxMCBGQUlMRUQ6IFJvbGxlZC1iYWNrIHdyaXRlIGluY29ycmVjdGx5IG1hcmtlZCB0YWJs ZSBhcyBzdGFsZSIKKyAgICAgICAgZ3JlcCAtYSAtaSAidHJhY2tfdGFibGVfbXV0YXRpb24iIGxv Zy9wZ3Bvb2wubG9nIHwgdGFpbCAtMjAKKyAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAgICBl eGl0IDEKKyAgICBmaQorICAgIGVjaG8gIlRlc3QgMTAgUEFTU0VEOiBST0xMQkFDSyBkb2VzIG5v dCBtYXJrIHRhYmxlIGFzIHN0YWxlIgorCisgICAgZWNobyAiPT09IFRlc3QgMTE6IENPTU1JVCBN YXJrcyBUYWJsZSBhcyBTdGFsZSA9PT0iCisgICAgIyBDcmVhdGUgYSBmcmVzaCB0YWJsZSBmb3Ig Y29tbWl0IHRlc3QKKyAgICAkUFNRTCB0ZXN0IC1jICJDUkVBVEUgVEFCTEUgdF9jb21taXQoaSBJ TlRFR0VSKTsiID4gL2Rldi9udWxsIDI+JjEKKworICAgICMgV2FpdCBmb3IgYW55IFRUTCB0byBl eHBpcmUKKyAgICBzbGVlcCAzCisKKyAgICAjIENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bv b2wubG9nCisKKyAgICAjIFdyaXRlIGluc2lkZSBhIHRyYW5zYWN0aW9uLCB0aGVuIGNvbW1pdCwg dGhlbiByZWFkCisgICAgJFBTUUwgdGVzdCA8PEVPRgorQkVHSU47CitJTlNFUlQgSU5UTyB0X2Nv bW1pdCBWQUxVRVMgKDEpOworQ09NTUlUOworU0VMRUNUICdjb21taXRfdGVzdCcgYXMgbWFya2Vy LCAqIEZST00gdF9jb21taXQ7CitFT0YKKworICAgICMgU21hbGwgZGVsYXkgdG8gZW5zdXJlIGxv ZyBpcyBmbHVzaGVkCisgICAgc2xlZXAgMC41CisKKyAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBu b3QgbG9hZCBiYWxhbmNlIGJlY2F1c2UgdGFibGUuKndhcyByZWNlbnRseSB3cml0dGVuIiBsb2cv cGdwb29sLmxvZzsgdGhlbgorICAgICAgICBlY2hvICJUZXN0IDExIFBBU1NFRDogQ09NTUlUIG1h cmtzIHRhYmxlIGFzIHN0YWxlIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiVGVzdCAxMSBGQUlM RUQ6IENvbW1pdHRlZCB3cml0ZSBkaWQgbm90IG1hcmsgdGFibGUgYXMgc3RhbGUiCisgICAgICAg IGdyZXAgLWEgLWkgInRyYWNrX3RhYmxlX211dGF0aW9uIiBsb2cvcGdwb29sLmxvZyB8IHRhaWwg LTIwCisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKworICAg IGVjaG8gIiIKKyAgICBlY2hvICI9PT0gQWxsIFRyYWNrIFRhYmxlIE11dGF0aW9uIFRlc3RzIFBB U1NFRCA9PT0iCisKKyAgICAuL3NodXRkb3duYWxsCisKKyAgICBjZCAuLgorZG9uZQorCitleGl0 IDAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQ0LnRyYWNrX3RhYmxl X211dGF0aW9uX3dhdGNoZG9nL3Rlc3Quc2ggYi9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0 NC50cmFja190YWJsZV9tdXRhdGlvbl93YXRjaGRvZy90ZXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAw NzU1CmluZGV4IDAwMDAwMDAwMC4uYzUwYzIxM2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvcmVncmVzc2lvbi90ZXN0cy8wNDQudHJhY2tfdGFibGVfbXV0YXRpb25fd2F0Y2hkb2cvdGVz dC5zaApAQCAtMCwwICsxLDE4NCBAQAorIyEvdXNyL2Jpbi9lbnYgYmFzaAorIy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyMgVGVzdCBzY3JpcHQgZm9yIHRyYWNrIHRhYmxlIG11dGF0aW9uIGdsb2JhbCBjb2xkIHN0YXJ0 CisjIG9uIHdhdGNoZG9nIGxlYWRlciBjaGFuZ2UuCisjCisjIFVzZXMgJFdBVENIRE9HX1NFVFVQ IHRvIGNyZWF0ZSBhIDItbm9kZSB3YXRjaGRvZyBjbHVzdGVyLAorIyB0aGVuIHZlcmlmaWVzIHRo YXQgd2hlbiB0aGUgbGVhZGVyIGlzIHN0b3BwZWQgdGhlIG5ldworIyBsZWFkZXIgdHJpZ2dlcnMg YSBnbG9iYWwgY29sZCBzdGFydC4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzb3VyY2UgJFRFU1RMSUJTCitURVNU RElSPXRlc3RkaXIKK1BTUUw9JFBHQklOL3BzcWwKK3N1Y2Nlc3NfY291bnQ9MAorCitkaXI9YHB3 ZGAKK3JtIC1mciAkVEVTVERJUgorbWtkaXIgJFRFU1RESVIKK2NkICRURVNURElSCisKKyMgQ3Jl YXRlIDItbm9kZSB3YXRjaGRvZyBjbHVzdGVyCiskV0FUQ0hET0dfU0VUVVAgLXduIDIgfHwgZXhp dCAxCisKKyMgRW5zdXJlIHBlci1ub2RlIHNjcmlwdHMgYXJlIGV4ZWN1dGFibGUKKyMgKHNlZCAt aSBpbiB3YXRjaGRvZ19zZXR1cCBjYW4gc3RyaXAgcGVybWlzc2lvbnMpCitjaG1vZCA3NTUgcGdw b29sKi9zdGFydGFsbCBwZ3Bvb2wqL3NodXRkb3duYWxsCisKKyMgQXBwZW5kIHRyYWNrX3RhYmxl X211dGF0aW9uIGNvbmZpZyB0byBib3RoIG5vZGVzCitmb3IgaSBpbiAwIDEKK2RvCisJY2F0ID4+ IHBncG9vbCR7aX0vZXRjL3BncG9vbC5jb25mIDw8RU9GCitkaXNhYmxlX2xvYWRfYmFsYW5jZV9v bl93cml0ZSA9ICdkbWxfYWRhcHRpdmVfZ2xvYmFsJwordHJhY2tfdGFibGVfbXV0YXRpb25fY29s ZF9zdGFydF9kdXJhdGlvbiA9IDIwMDAKK2VuYWJsZV9jb25zZW5zdXNfd2l0aF9oYWxmX3ZvdGVz ID0gb24KK2xvZ19taW5fbWVzc2FnZXMgPSBkZWJ1ZzEKK0VPRgorZG9uZQorCisuL3N0YXJ0YWxs CitleHBvcnQgUENQUEFTU0ZJTEU9JGRpci8kVEVTVERJUi9wZ3Bvb2wwL3BjcHBhc3MKKworIyBX YWl0IGZvciB3YXRjaGRvZyBsaWZlY2hlY2sgb24gbm9kZSAwCitlY2hvIC1uICJ3YWl0aW5nIGZv ciB3YXRjaGRvZyBub2RlIDAgc3RhcnRpbmcgdXAuLi4iCitmb3IgaSBpbiAxIDIgMyA0IDUgNiA3 IDggOSAxMAorZG8KKwlncmVwICJsaWZlY2hlY2sgc3RhcnRlZCIgXAorCQlwZ3Bvb2wwL2xvZy9w Z3Bvb2wubG9nID4gL2Rldi9udWxsIDI+JjEKKwlpZiBbICQ/ID0gMCBdOyB0aGVuCisJCWJyZWFr CisJZmkKKwlzbGVlcCAyCitkb25lCitlY2hvICJkb25lLiIKKworIyBUZXN0IDE6IFZlcmlmeSBs ZWFkZXIgY2FtZSB1cAorZWNobyAiPT09IFRlc3QgMTogV2FpdGluZyBmb3IgdGhlIHBncG9vbCBs ZWFkZXIuLi4gPT09IgorZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAKK2RvCisJZ3JlcCAi SSBhbSB0aGUgY2x1c3RlciBsZWFkZXIgbm9kZSIgXAorCQlwZ3Bvb2wwL2xvZy9wZ3Bvb2wubG9n ID4gL2Rldi9udWxsIDI+JjEKKwlpZiBbICQ/ID0gMCBdOyB0aGVuCisJCXN1Y2Nlc3NfY291bnQ9 JCgoIHN1Y2Nlc3NfY291bnQgKyAxICkpCisJCWVjaG8gIlRlc3QgMSBQQVNTRUQ6IExlYWRlciBi cm91Z2h0IHVwLiIKKwkJYnJlYWsKKwlmaQorCWVjaG8gIltjaGVja10gJGkgdGltZXMiCisJc2xl ZXAgMgorZG9uZQorCitpZiBbICRzdWNjZXNzX2NvdW50IC1sdCAxIF07IHRoZW4KKwllY2hvICJU ZXN0IDEgRkFJTEVEOiBMZWFkZXIgZGlkIG5vdCBzdGFydCIKKwkuL3NodXRkb3duYWxsCisJZXhp dCAxCitmaQorCisjIFRlc3QgMjogVmVyaWZ5IHN0YW5kYnkgam9pbmVkIGNsdXN0ZXIKK2VjaG8g Ij09PSBUZXN0IDI6IFdhaXRpbmcgZm9yIHN0YW5kYnkgdG8gam9pbi4uLiA9PT0iCitmb3IgaSBp biAxIDIgMyA0IDUgNiA3IDggOSAxMAorZG8KKwlncmVwICJzdWNjZXNzZnVsbHkgam9pbmVkIHRo ZSB3YXRjaGRvZyBjbHVzdGVyIiBcCisJCXBncG9vbDEvbG9nL3BncG9vbC5sb2cgPiAvZGV2L251 bGwgMj4mMQorCWlmIFsgJD8gPSAwIF07IHRoZW4KKwkJc3VjY2Vzc19jb3VudD0kKCggc3VjY2Vz c19jb3VudCArIDEgKSkKKwkJZWNobyAiVGVzdCAyIFBBU1NFRDogU3RhbmRieSBqb2luZWQuIgor CQlicmVhaworCWZpCisJZWNobyAiW2NoZWNrXSAkaSB0aW1lcyIKKwlzbGVlcCAyCitkb25lCisK K2lmIFsgJHN1Y2Nlc3NfY291bnQgLWx0IDIgXTsgdGhlbgorCWVjaG8gIlRlc3QgMiBGQUlMRUQ6 IFN0YW5kYnkgZGlkIG5vdCBqb2luIgorCS4vc2h1dGRvd25hbGwKKwlleGl0IDEKK2ZpCisKKyMg VGVzdCAzOiBWZXJpZnkgdHJhY2tfdGFibGVfbXV0YXRpb24gaW5pdGlhbGl6ZWQKK2VjaG8gIj09 PSBUZXN0IDM6IFZlcmlmeSBmZWF0dXJlIGluaXRpYWxpemVkID09PSIKK2lmIGdyZXAgLWEgInRy YWNrX3RhYmxlX211dGF0aW9uOiBpbml0aWFsaXplZCIgXAorCXBncG9vbDAvbG9nL3BncG9vbC5s b2cgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorCXN1Y2Nlc3NfY291bnQ9JCgoIHN1Y2Nlc3NfY291 bnQgKyAxICkpCisJZWNobyAiVGVzdCAzIFBBU1NFRDogRmVhdHVyZSBpbml0aWFsaXplZC4iCitl bHNlCisJZWNobyAiVGVzdCAzIEZBSUxFRDogRmVhdHVyZSBub3QgaW5pdGlhbGl6ZWQiCisJLi9z aHV0ZG93bmFsbAorCWV4aXQgMQorZmkKKworIyBUZXN0IDQ6IFN0b3AgbGVhZGVyIChwZ3Bvb2ww KSB0byB0cmlnZ2VyIGZhaWxvdmVyCitlY2hvICI9PT0gVGVzdCA0OiBTdG9wcGluZyBsZWFkZXIu Li4gPT09IgorY2QgcGdwb29sMAorc291cmNlIC4vYmFzaHJjLnBvcnRzCiskUEdQT09MX0lOU1RB TExfRElSL2Jpbi9wZ3Bvb2wgXAorCS1mIGV0Yy9wZ3Bvb2wuY29uZiAtbSBmIHN0b3AKK2NkIC4u CisKK2VjaG8gIkNoZWNraW5nIHN0YW5kYnkgZGV0ZWN0ZWQgc2h1dGRvd24uLi4iCitmb3IgaSBp biAxIDIgMyA0IDUgNiA3IDggOSAxMAorZG8KKwlncmVwIC1hICJpcyBzaHV0dGluZyBkb3duIiBc CisJCXBncG9vbDEvbG9nL3BncG9vbC5sb2cgPiAvZGV2L251bGwgMj4mMQorCWlmIFsgJD8gPSAw IF07IHRoZW4KKwkJc3VjY2Vzc19jb3VudD0kKCggc3VjY2Vzc19jb3VudCArIDEgKSkKKwkJZWNo byAiVGVzdCA0IFBBU1NFRDogU2h1dGRvd24gZGV0ZWN0ZWQuIgorCQlicmVhaworCWZpCisJZWNo byAiW2NoZWNrXSAkaSB0aW1lcyIKKwlzbGVlcCAyCitkb25lCisKK2lmIFsgJHN1Y2Nlc3NfY291 bnQgLWx0IDQgXTsgdGhlbgorCWVjaG8gIlRlc3QgNCBGQUlMRUQ6IFNodXRkb3duIG5vdCBkZXRl Y3RlZCIKKwkuL3NodXRkb3duYWxsCisJZXhpdCAxCitmaQorCisjIFRlc3QgNTogVmVyaWZ5IHN0 YW5kYnkgYmVjYW1lIG5ldyBsZWFkZXIKK2VjaG8gIj09PSBUZXN0IDU6IENoZWNraW5nIHN0YW5k YnkgdGFrZXMgb3Zlci4uLiA9PT0iCitmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOSAxMAorZG8K KwlncmVwIC1hICJJIGFtIHRoZSBjbHVzdGVyIGxlYWRlciBub2RlIiBcCisJCXBncG9vbDEvbG9n L3BncG9vbC5sb2cgPiAvZGV2L251bGwgMj4mMQorCWlmIFsgJD8gPSAwIF07IHRoZW4KKwkJc3Vj Y2Vzc19jb3VudD0kKCggc3VjY2Vzc19jb3VudCArIDEgKSkKKwkJZWNobyAiVGVzdCA1IFBBU1NF RDogU3RhbmRieSBiZWNhbWUgbGVhZGVyLiIKKwkJYnJlYWsKKwlmaQorCWVjaG8gIltjaGVja10g JGkgdGltZXMiCisJc2xlZXAgMgorZG9uZQorCitpZiBbICRzdWNjZXNzX2NvdW50IC1sdCA1IF07 IHRoZW4KKwllY2hvICJUZXN0IDUgRkFJTEVEOiBTdGFuZGJ5IGRpZCBub3QgYmVjb21lIGxlYWRl ciIKKwkuL3NodXRkb3duYWxsCisJZXhpdCAxCitmaQorCisjIFRlc3QgNjogVmVyaWZ5IGdsb2Jh bCBjb2xkIHN0YXJ0IHdhcyB0cmlnZ2VyZWQKK2VjaG8gIj09PSBUZXN0IDY6IENoZWNraW5nIGds b2JhbCBjb2xkIHN0YXJ0Li4uID09PSIKK2ZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwCitk bworCWdyZXAgLWEgInRyYWNrX3RhYmxlX211dGF0aW9uOiBnbG9iYWwgY29sZCBzdGFydCIgXAor CQlwZ3Bvb2wxL2xvZy9wZ3Bvb2wubG9nID4gL2Rldi9udWxsIDI+JjEKKwlpZiBbICQ/ID0gMCBd OyB0aGVuCisJCXN1Y2Nlc3NfY291bnQ9JCgoIHN1Y2Nlc3NfY291bnQgKyAxICkpCisJCWVjaG8g IlRlc3QgNiBQQVNTRUQ6IEdsb2JhbCBjb2xkIHN0YXJ0IHRyaWdnZXJlZC4iCisJCWJyZWFrCisJ ZmkKKwllY2hvICJbY2hlY2tdICRpIHRpbWVzIgorCXNsZWVwIDIKK2RvbmUKKworIyBDbGVhbnVw CisuL3NodXRkb3duYWxsCisKK2VjaG8gIiIKK2VjaG8gIiRzdWNjZXNzX2NvdW50IG91dCBvZiA2 IHN1Y2Nlc3NmdWwiCisKK2lmIHRlc3QgJHN1Y2Nlc3NfY291bnQgLWVxIDYKK3RoZW4KKwllY2hv ICI9PT0gQWxsIFdhdGNoZG9nIFRlc3RzIFBBU1NFRCA9PT0iCisJZXhpdCAwCitmaQorCitleGl0 IDEKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggOTM5MjAwOTY1Li40NjdlYzExNGMgMTAw NjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC01MTksNiArNTE5LDEwIEBAIFRhYmxlTGlrZUNs YXVzZQogVGFibGVTYW1wbGVDbGF1c2UKIFRhcmdldEVudHJ5CiBUb2tlbml6ZWRMaW5lCitUcmFj a1RhYmxlTXV0YXRpb25FbnRyeQorVHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxlCitUcmFja1Rh YmxlTXV0YXRpb25TaG1lbQorVHJhY2tUYWJsZU11dGF0aW9uU3RhdGUKIFRyYW5zYWN0aW9uSWQK IFRyYW5zYWN0aW9uU3RtdAogVHJhbnNhY3Rpb25TdG10S2luZApkaWZmIC0tZ2l0IGEvc3JjL3V0 aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uYyBiL3NyYy91dGlscy9wb29sX3RyYWNrX3Rh YmxlX211dGF0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5kZDU0 NzkyZDEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRh dGlvbi5jCkBAIC0wLDAgKzEsODg1IEBACisvKiAtKi1wZ3NxbC1jLSotICovCisvKgorICogcGdw b29sOiBhIGxhbmd1YWdlIGluZGVwZW5kZW50IGNvbm5lY3Rpb24gcG9vbCBzZXJ2ZXIgZm9yIFBv c3RncmVTUUwKKyAqIHdyaXR0ZW4gYnkgVGF0c3VvIElzaGlpCisgKgorICogQ29weXJpZ2h0IChj KSAyMDI2CVBnUG9vbCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBQZXJtaXNzaW9u IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAor ICogaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBo ZXJlYnkKKyAqIGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UgYXBwZWFyIGluIGFsbAorICogY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQg bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24KKyAqIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGlu ZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiB0aGUKKyAqIGF1dGhvciBub3Qg YmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworICogZGlz dHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9y CisgKiBwZXJtaXNzaW9uLiBUaGUgYXV0aG9yIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91 dCB0aGUKKyAqIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAg SXQgaXMgcHJvdmlkZWQgImFzCisgKiBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2Fy cmFudHkuCisgKgorICogcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5jOiBJbi1tZW1vcnkgdHJh Y2tpbmcgb2YgcmVjZW50bHkKKyAqICAgd3JpdHRlbiB0YWJsZXMgdG8gcHJldmVudCBzdGFsZSBy ZWFkcyBmcm9tIHJlcGxpY2FzLgorICoKKyAqIEJhc2VkIG9uIHRoZSAibGFnbGVzcyIgYXJjaGl0 ZWN0dXJlIGZyb20gVGFpbG9yIEJyYW5kcy4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+Cisj aW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx1bmlz dGQuaD4KKworI2luY2x1ZGUgInBvb2wuaCIKKyNpbmNsdWRlICJwb29sX2NvbmZpZy5oIgorI2lu Y2x1ZGUgImNvbnRleHQvcG9vbF9zZXNzaW9uX2NvbnRleHQuaCIKKyNpbmNsdWRlICJ1dGlscy9w b29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmgiCisjaW5jbHVkZSAidXRpbHMvZWxvZy5oIgorI2lu Y2x1ZGUgInV0aWxzL3Bvb2xfaXBjLmgiCisjaW5jbHVkZSAidXRpbHMvcGFsbG9jLmgiCisjaW5j bHVkZSAidXRpbHMvcG9vbF9yZWxjYWNoZS5oIgorCisjZGVmaW5lIERBVEFCQVNFX1RPX09JRF9R VUVSWSBcCisJIlNFTEVDVCBvaWQgRlJPTSBwZ19jYXRhbG9nLnBnX2RhdGFiYXNlIiBcCisJIiBX SEVSRSBkYXRuYW1lID0gJyVzJyIKKworLyoKKyAqIEhlbHBlciBtYWNybzogdHJ1ZSB3aGVuIHRo ZSBmZWF0dXJlIGlzIG5vdCBhY3RpdmUuCisgKi8KKyNkZWZpbmUgVFJBQ0tfVEFCTEVfTVVUQVRJ T05fRElTQUJMRUQoKSBcCisJKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93 cml0ZSAhPSBcCisJIERMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwgfHwgXAorCSB0cmFja190YWJs ZV9tdXRhdGlvbl9zaG1lbSA9PSBOVUxMKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBMb2Nh bCB2YXJpYWJsZXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKiBQb2ludGVyIHRvIHNo YXJlZCBtZW1vcnkgc3RydWN0dXJlICovCitzdGF0aWMgVHJhY2tUYWJsZU11dGF0aW9uU2htZW0g KnRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtID0gTlVMTDsKKworLyogUGVyLXByb2Nlc3MgY29s ZCBzdGFydCB0cmFja2luZyAobm90IGluIHNoYXJlZCBtZW1vcnkpICovCitzdGF0aWMgc3RydWN0 IHRpbWV2YWwgcHJvY2Vzc19zdGFydF90aW1lOworc3RhdGljIGJvb2wgY29sZF9zdGFydF9pbml0 aWFsaXplZCA9IGZhbHNlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBIZWxwZXIgbWFjcm9z IGZvciBmbGV4aWJsZSBhcnJheXMgaW4gc2hhcmVkIG1lbW9yeQorICogLS0tLS0tLS0tLS0tLS0t LQorICovCisKKy8qIEdldCBwb2ludGVyIHRvIGJ1Y2tldCBhcnJheSBpbiB0YWJsZSBtYXAgKi8K KyNkZWZpbmUgVEFCTEVfTUFQX0JVQ0tFVFMobWFwKSBcCisJKChpbnQgKikoKGNoYXIgKikobWFw KSArIFwKKwkJc2l6ZW9mKFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSkpKQorCisvKiBHZXQg cG9pbnRlciB0byBlbnRyeSBhcnJheSBpbiB0YWJsZSBtYXAgKi8KKyNkZWZpbmUgVEFCTEVfTUFQ X0VOVFJJRVMobWFwKSBcCisJKChUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAqKSgoY2hhciAqKSht YXApICsgXAorCQlzaXplb2YoVHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxlKSArIFwKKwkJKG1h cCktPm51bV9idWNrZXRzICogc2l6ZW9mKGludCkpKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisg KiBTZW1hcGhvcmUgbG9jayBoZWxwZXJzCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3Rh dGljIGlubGluZSB2b2lkCit0YWJsZV9tYXBfbG9jayh2b2lkKQoreworCXBvb2xfc2VtYXBob3Jl X2xvY2soVFJBQ0tfVEFCTEVfTVVUQVRJT05fVEFCTEVfU0VNKTsKK30KKworc3RhdGljIGlubGlu ZSB2b2lkCit0YWJsZV9tYXBfdW5sb2NrKHZvaWQpCit7CisJcG9vbF9zZW1hcGhvcmVfdW5sb2Nr KFRSQUNLX1RBQkxFX01VVEFUSU9OX1RBQkxFX1NFTSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0t LS0KKyAqIEhhc2ggZnVuY3Rpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAq IEZOVi0xYSBoYXNoIGZvciBhICh0YWJsZSBvaWQsIGRhdGFiYXNlIG9pZCkgcGFpci4KKyAqCisg KiBGTlYtMWEgKEZvd2xlci1Ob2xsLVZvLCAiMWEiIHZhcmlhbnQpIGlzIGEgc2ltcGxlLCBmYXN0 IG5vbi1jcnlwdG9ncmFwaGljCisgKiBoYXNoOiBzdGFydGluZyBmcm9tIGEgZml4ZWQgMzItYml0 ICJvZmZzZXQgYmFzaXMiLCBmb3IgZXZlcnkgaW5wdXQgYnl0ZSBpdAorICogWE9ScyB0aGUgYnl0 ZSBpbnRvIHRoZSBhY2N1bXVsYXRvciBhbmQgdGhlbiBtdWx0aXBsaWVzIGJ5IGEgZml4ZWQgIkZO VgorICogcHJpbWUiLiAgSXQgaGFzIGdvb2QgZGlzcGVyc2lvbiBmb3Igc2hvcnQga2V5cyBhbmQg bmVlZHMgbm8gdGFibGUgb3Igc2VlZCwKKyAqIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCBmaXQgZm9y IHNwcmVhZGluZyBvaWQgcGFpcnMgYWNyb3NzIHRoZSBoYXNoIGJ1Y2tldHMKKyAqIGhlcmUuICBU aGUgdHdvIG1hZ2ljIGNvbnN0YW50cyBiZWxvdyBhcmUgdGhlIHN0YW5kYXJkIDMyLWJpdCBGTlYg b2Zmc2V0CisgKiBiYXNpcyBhbmQgcHJpbWUuICBTZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3Jn L3dpa2kvRm93bGVyLU5vbGwtVm9faGFzaF9mdW5jdGlvbgorICovCitzdGF0aWMgdWludDMyCitm bnYxYV9oYXNoX3RhYmxlX2tleShpbnQgdGFibGVfb2lkLCBpbnQgZGJvaWQpCit7CisJdWludDMy CQloYXNoID0gMjE2NjEzNjI2MXU7IC8qIDMyLWJpdCBGTlYgb2Zmc2V0IGJhc2lzICovCisJdWlu dDMyCQlkYXRhWzJdOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzOworCXNpemVfdAkJaTsK KworCWRhdGFbMF0gPSAodWludDMyKSB0YWJsZV9vaWQ7CisJZGF0YVsxXSA9ICh1aW50MzIpIGRi b2lkOworCWJ5dGVzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgZGF0YTsKKworCWZvciAoaSA9 IDA7IGkgPCBzaXplb2YoZGF0YSk7IGkrKykKKwl7CisJCWhhc2ggXj0gYnl0ZXNbaV07CisJCWhh c2ggKj0gMTY3Nzc2MTl1OwkJLyogRk5WIHByaW1lICovCisJfQorCisJcmV0dXJuIGhhc2g7Cit9 CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqIFRpbWUgdXRpbGl0aWVzCisgKiAtLS0tLS0tLS0t LS0tLS0tCisgKi8KKworLyoKKyAqIEdldCBlbGFwc2VkIHRpbWUgaW4gbWljcm9zZWNvbmRzIGJl dHdlZW4gdHdvIHRpbWV2YWxzCisgKi8KK3N0YXRpYyBpbnQ2NAorZWxhcHNlZF91cyhzdHJ1Y3Qg dGltZXZhbCAqc3RhcnQsIHN0cnVjdCB0aW1ldmFsICplbmQpCit7CisJcmV0dXJuICgoaW50NjQp IChlbmQtPnR2X3NlYyAtIHN0YXJ0LT50dl9zZWMpICogMTAwMDAwMCkKKwkJKyAoZW5kLT50dl91 c2VjIC0gc3RhcnQtPnR2X3VzZWMpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBEYXRh YmFzZSBvaWQgbG9va3VwCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3RhdGljIGludAor dHJhY2tfdGFibGVfbXV0YXRpb25fZ2V0X2RhdGFiYXNlX29pZF9pbnRlcm5hbCh2b2lkKQorewor CWludAkJCW9pZCA9IDA7CisJc3RhdGljIFBPT0xfUkVMQ0FDSEUgKnJlbGNhY2hlOworCVBPT0xf Q09OTkVDVElPTl9QT09MICpiYWNrZW5kOworCVBPT0xfU0VTU0lPTl9DT05URVhUICpzZXNzaW9u X2NvbnRleHQ7CisKKwkvKiBTYWZldHkgY2hlY2s6IG11c3QgaGF2ZSBzaG1lbSBpbml0aWFsaXpl ZCAqLworCWlmICh0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbSA9PSBOVUxMKQorCQlyZXR1cm4g b2lkOworCisJc2Vzc2lvbl9jb250ZXh0ID0gcG9vbF9nZXRfc2Vzc2lvbl9jb250ZXh0KGZhbHNl KTsKKwlpZiAoc2Vzc2lvbl9jb250ZXh0ID09IE5VTEwpCisJCXJldHVybiBvaWQ7CisKKwliYWNr ZW5kID0gc2Vzc2lvbl9jb250ZXh0LT5iYWNrZW5kOworCWlmIChiYWNrZW5kID09IE5VTEwgfHwK KwkJTUFJTl9DT05ORUNUSU9OKGJhY2tlbmQpID09IE5VTEwgfHwKKwkJTUFJTl9DT05ORUNUSU9O KGJhY2tlbmQpLT5zcCA9PSBOVUxMKQorCQlyZXR1cm4gb2lkOworCisJLyogRW5zdXJlIGRhdGFi YXNlIG5hbWUgaXMgdmFsaWQgKi8KKwlpZiAoTUFJTl9DT05ORUNUSU9OKGJhY2tlbmQpLT5zcC0+ ZGF0YWJhc2UgPT0gTlVMTCkKKwkJcmV0dXJuIG9pZDsKKworCWlmICghcmVsY2FjaGUpCisJewor CQlyZWxjYWNoZSA9IHBvb2xfY3JlYXRlX3JlbGNhY2hlKAorCQkJCQkJCQkJCXBvb2xfY29uZmln LT5yZWxjYWNoZV9zaXplLAorCQkJCQkJCQkJCURBVEFCQVNFX1RPX09JRF9RVUVSWSwKKwkJCQkJ CQkJCQlpbnRfcmVnaXN0ZXJfZnVuYywKKwkJCQkJCQkJCQlpbnRfdW5yZWdpc3Rlcl9mdW5jLAor CQkJCQkJCQkJCWZhbHNlKTsKKwkJaWYgKHJlbGNhY2hlID09IE5VTEwpCisJCXsKKwkJCWVyZXBv cnQoTE9HLAorCQkJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogZXJyb3IgY3JlYXRp bmcgcmVsY2FjaGUiKSkpOworCQkJcmV0dXJuIG9pZDsKKwkJfQorCX0KKworCW9pZCA9IChpbnQp IChpbnRwdHJfdCkgcG9vbF9zZWFyY2hfcmVsY2FjaGUoCisJCQkJCQkJCQkJCQlyZWxjYWNoZSwg YmFja2VuZCwKKwkJCQkJCQkJCQkJCU1BSU5fQ09OTkVDVElPTihiYWNrZW5kKS0+c3AtPmRhdGFi YXNlKTsKKwlyZXR1cm4gb2lkOworfQorCitpbnQKK3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25f Z2V0X2RhdGFiYXNlX29pZCh2b2lkKQoreworCXJldHVybiB0cmFja190YWJsZV9tdXRhdGlvbl9n ZXRfZGF0YWJhc2Vfb2lkX2ludGVybmFsKCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAq IFRhYmxlIG11dGF0aW9uIGhhc2ggdGFibGUgb3BlcmF0aW9ucworICogLS0tLS0tLS0tLS0tLS0t LQorICovCisKKy8qCisgKiBJbml0aWFsaXplIHRhYmxlIG11dGF0aW9uIGhhc2ggdGFibGUKKyAq Lworc3RhdGljIHZvaWQKK3RhYmxlX21hcF9pbml0KFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJs ZSAqbWFwLAorCQkJICAgaW50IG51bV9idWNrZXRzLCBpbnQgbWF4X2VudHJpZXMpCit7CisJaW50 CQkgICAqYnVja2V0czsKKwlUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAqZW50cmllczsKKwlpbnQJ CQlpOworCWludAkJCWludmFsaWQgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVY OworCisJbWFwLT5udW1fYnVja2V0cyA9IG51bV9idWNrZXRzOworCW1hcC0+bWF4X2VudHJpZXMg PSBtYXhfZW50cmllczsKKwltYXAtPm51bV9lbnRyaWVzID0gMDsKKwltYXAtPmZyZWVfbGlzdF9o ZWFkID0gMDsKKworCWJ1Y2tldHMgPSBUQUJMRV9NQVBfQlVDS0VUUyhtYXApOworCWVudHJpZXMg PSBUQUJMRV9NQVBfRU5UUklFUyhtYXApOworCisJLyogSW5pdGlhbGl6ZSBhbGwgYnVja2V0cyB0 byBlbXB0eSAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fYnVja2V0czsgaSsrKQorCQlidWNrZXRz W2ldID0gaW52YWxpZDsKKworCS8qIEluaXRpYWxpemUgZnJlZSBsaXN0IC0gY2hhaW4gYWxsIGVu dHJpZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2VudHJpZXM7IGkrKykKKwl7CisJCWVudHJp ZXNbaV0uaW5fdXNlID0gZmFsc2U7CisJCWVudHJpZXNbaV0ubmV4dCA9IChpIDwgbWF4X2VudHJp ZXMgLSAxKSA/CisJCQlpICsgMSA6IGludmFsaWQ7CisJfQorCisJZXJlcG9ydChERUJVRzEsCisJ CQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogdGFibGUgbWFwIGluaXQgJWQgYnVja2V0 cywgJWQgbWF4IGVudHJpZXMiLAorCQkJCQludW1fYnVja2V0cywgbWF4X2VudHJpZXMpKSk7Cit9 CisKKy8qCisgKiBBbGxvY2F0ZSBhbiBlbnRyeSBmcm9tIHRoZSBmcmVlIGxpc3QKKyAqLworc3Rh dGljIGludAordGFibGVfbWFwX2FsbG9jX2VudHJ5KFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJs ZSAqbWFwKQoreworCVRyYWNrVGFibGVNdXRhdGlvbkVudHJ5ICplbnRyaWVzOworCWludAkJCWlk eDsKKwlpbnQJCQlpbnZhbGlkID0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsK KworCWVudHJpZXMgPSBUQUJMRV9NQVBfRU5UUklFUyhtYXApOworCisJaWYgKG1hcC0+ZnJlZV9s aXN0X2hlYWQgPT0gaW52YWxpZCkKKwkJcmV0dXJuIGludmFsaWQ7CisKKwlpZHggPSBtYXAtPmZy ZWVfbGlzdF9oZWFkOworCW1hcC0+ZnJlZV9saXN0X2hlYWQgPSBlbnRyaWVzW2lkeF0ubmV4dDsK KwllbnRyaWVzW2lkeF0uaW5fdXNlID0gdHJ1ZTsKKwllbnRyaWVzW2lkeF0ubmV4dCA9IGludmFs aWQ7CisJbWFwLT5udW1fZW50cmllcysrOworCisJcmV0dXJuIGlkeDsKK30KKworLyoKKyAqIEZy ZWUgYW4gZW50cnkgYmFjayB0byB0aGUgZnJlZSBsaXN0CisgKi8KK3N0YXRpYyB2b2lkCit0YWJs ZV9tYXBfZnJlZV9lbnRyeShUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUgKm1hcCwKKwkJCQkJ IGludCBpZHgpCit7CisJVHJhY2tUYWJsZU11dGF0aW9uRW50cnkgKmVudHJpZXM7CisKKwllbnRy aWVzID0gVEFCTEVfTUFQX0VOVFJJRVMobWFwKTsKKworCWVudHJpZXNbaWR4XS5pbl91c2UgPSBm YWxzZTsKKwllbnRyaWVzW2lkeF0ubmV4dCA9IG1hcC0+ZnJlZV9saXN0X2hlYWQ7CisJbWFwLT5m cmVlX2xpc3RfaGVhZCA9IGlkeDsKKwltYXAtPm51bV9lbnRyaWVzLS07Cit9CisKKy8qCisgKiBM b29rIHVwIGEgdGFibGUgaW4gdGhlIGhhc2ggdGFibGUuCisgKiBSZXR1cm5zIGVudHJ5IGluZGV4 IG9yIElOVkFMSURfSU5ERVggaWYgbm90IGZvdW5kLgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBs b2NrIGhlbGQuCisgKi8KK3N0YXRpYyBpbnQKK3RhYmxlX21hcF9sb29rdXAoVHJhY2tUYWJsZU11 dGF0aW9uSGFzaFRhYmxlICptYXAsCisJCQkJIGludCB0YWJsZV9vaWQsIGludCBkYm9pZCwKKwkJ CQkgdWludDMyIGhhc2gpCit7CisJaW50CQkgICAqYnVja2V0cyA9IFRBQkxFX01BUF9CVUNLRVRT KG1hcCk7CisJVHJhY2tUYWJsZU11dGF0aW9uRW50cnkgKmVudHJpZXM7CisJaW50CQkJYnVja2V0 ID0gaGFzaCAlIG1hcC0+bnVtX2J1Y2tldHM7CisJaW50CQkJaWR4ID0gYnVja2V0c1tidWNrZXRd OworCWludAkJCWludmFsaWQgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYOwor CisJZW50cmllcyA9IFRBQkxFX01BUF9FTlRSSUVTKG1hcCk7CisKKwl3aGlsZSAoaWR4ICE9IGlu dmFsaWQpCisJeworCQlpZiAoZW50cmllc1tpZHhdLmhhc2ggPT0gaGFzaCAmJgorCQkJZW50cmll c1tpZHhdLnRhYmxlX29pZCA9PSB0YWJsZV9vaWQgJiYKKwkJCWVudHJpZXNbaWR4XS5kYm9pZCA9 PSBkYm9pZCkKKwkJeworCQkJcmV0dXJuIGlkeDsKKwkJfQorCQlpZHggPSBlbnRyaWVzW2lkeF0u bmV4dDsKKwl9CisKKwlyZXR1cm4gaW52YWxpZDsKK30KKworLyoKKyAqIEluc2VydCBvciB1cGRh dGUgYSB0YWJsZSBlbnRyeS4KKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggbG9jayBoZWxkLgorICov CitzdGF0aWMgdm9pZAordGFibGVfbWFwX2luc2VydChUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFi bGUgKm1hcCwKKwkJCQkgaW50IHRhYmxlX29pZCwgaW50IGRib2lkLAorCQkJCSB1aW50MzIgaGFz aCwKKwkJCQkgc3RydWN0IHRpbWV2YWwgKndyaXRlX3RpbWUpCit7CisJaW50CQkgICAqYnVja2V0 cyA9IFRBQkxFX01BUF9CVUNLRVRTKG1hcCk7CisJVHJhY2tUYWJsZU11dGF0aW9uRW50cnkgKmVu dHJpZXM7CisJaW50CQkJYnVja2V0ID0gaGFzaCAlIG1hcC0+bnVtX2J1Y2tldHM7CisJaW50CQkJ aWR4OworCWludAkJCWludmFsaWQgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVY OworCisJZW50cmllcyA9IFRBQkxFX01BUF9FTlRSSUVTKG1hcCk7CisKKwkvKiBDaGVjayBpZiBl bnRyeSBhbHJlYWR5IGV4aXN0cyAqLworCWlkeCA9IHRhYmxlX21hcF9sb29rdXAobWFwLCB0YWJs ZV9vaWQsIGRib2lkLCBoYXNoKTsKKwlpZiAoaWR4ICE9IGludmFsaWQpCisJeworCQkvKiBVcGRh dGUgbGFzdCB3cml0ZSB0aW1lOyBrZWVwIGZpcnN0X3dyaXRlX3RpbWUgKi8KKwkJZW50cmllc1tp ZHhdLmxhc3Rfd3JpdGVfdGltZSA9ICp3cml0ZV90aW1lOworCQlyZXR1cm47CisJfQorCisJLyog QWxsb2NhdGUgbmV3IGVudHJ5ICovCisJaWR4ID0gdGFibGVfbWFwX2FsbG9jX2VudHJ5KG1hcCk7 CisJaWYgKGlkeCA9PSBpbnZhbGlkKQorCXsKKwkJaW50CQkJYjsKKworCQkvKiBUYWJsZSBpcyBm dWxsIC0gZXZpY3QgZmlyc3Qgbm9uLWVtcHR5IGJ1Y2tldCAqLworCQlmb3IgKGIgPSAwOyBiIDwg bWFwLT5udW1fYnVja2V0czsgYisrKQorCQl7CisJCQlpZiAoYnVja2V0c1tiXSAhPSBpbnZhbGlk KQorCQkJeworCQkJCWludAkJCXZpY3RpbSA9IGJ1Y2tldHNbYl07CisKKwkJCQlidWNrZXRzW2Jd ID0gZW50cmllc1t2aWN0aW1dLm5leHQ7CisJCQkJdGFibGVfbWFwX2ZyZWVfZW50cnkobWFwLCB2 aWN0aW0pOworCQkJCWlkeCA9IHRhYmxlX21hcF9hbGxvY19lbnRyeShtYXApOworCQkJCWJyZWFr OworCQkJfQorCQl9CisKKwkJaWYgKGlkeCA9PSBpbnZhbGlkKQorCQl7CisJCQllcmVwb3J0KFdB Uk5JTkcsCisJCQkJCShlcnJtc2coInRyYWNrX3RhYmxlX211dGF0aW9uOiBmYWlsZWQgdG8gYWxs b2NhdGUgZW50cnkgZm9yIG9pZCAlZCAoZGJvaWQgJWQpIiwKKwkJCQkJCQl0YWJsZV9vaWQsIGRi b2lkKSkpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogSW5pdGlhbGl6ZSBuZXcgZW50cnkg Ki8KKwllbnRyaWVzW2lkeF0udGFibGVfb2lkID0gdGFibGVfb2lkOworCWVudHJpZXNbaWR4XS5k Ym9pZCA9IGRib2lkOworCWVudHJpZXNbaWR4XS5oYXNoID0gaGFzaDsKKwllbnRyaWVzW2lkeF0u Zmlyc3Rfd3JpdGVfdGltZSA9ICp3cml0ZV90aW1lOworCWVudHJpZXNbaWR4XS5sYXN0X3dyaXRl X3RpbWUgPSAqd3JpdGVfdGltZTsKKworCS8qIEluc2VydCBhdCBoZWFkIG9mIGJ1Y2tldCBjaGFp biAqLworCWVudHJpZXNbaWR4XS5uZXh0ID0gYnVja2V0c1tidWNrZXRdOworCWJ1Y2tldHNbYnVj a2V0XSA9IGlkeDsKKworCWVyZXBvcnQoREVCVUcyLAorCQkJKGVycm1zZygidHJhY2tfdGFibGVf bXV0YXRpb246IG1hcmtlZCBvaWQgJWQgKGRib2lkICVkKSB3cml0dGVuIiwKKwkJCQkJdGFibGVf b2lkLCBkYm9pZCkpKTsKK30KKworLyoKKyAqIFJlbW92ZSBleHBpcmVkIGVudHJpZXMgZnJvbSB0 aGUgdGFibGUgbWFwLgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBsb2NrIGhlbGQuCisgKi8KK3N0 YXRpYyB2b2lkCit0YWJsZV9tYXBfY2xlYW51cF9leHBpcmVkKAorCQkJCQkJICBUcmFja1RhYmxl TXV0YXRpb25IYXNoVGFibGUgKm1hcCwgdWludDY0IHR0bF91cykKK3sKKwlpbnQJCSAgICpidWNr ZXRzID0gVEFCTEVfTUFQX0JVQ0tFVFMobWFwKTsKKwlUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAq ZW50cmllczsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJaW50NjQJCW1heF9zdGFsZV91czsKKwlp bnQJCQlyZW1vdmVkID0gMDsKKwlpbnQJCQliOworCWludAkJCWludmFsaWQgPSBUUkFDS19UQUJM RV9NVVRBVElPTl9JTlZBTElEX0lOREVYOworCisJZW50cmllcyA9IFRBQkxFX01BUF9FTlRSSUVT KG1hcCk7CisJZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOworCisJbWF4X3N0YWxlX3VzID0gKGlu dDY0KSBwb29sX2NvbmZpZworCQktPnRyYWNrX3RhYmxlX211dGF0aW9uX21heF9zdGFsZW5lc3Mg KiAxMDAwTEw7CisKKwlmb3IgKGIgPSAwOyBiIDwgbWFwLT5udW1fYnVja2V0czsgYisrKQorCXsK KwkJaW50CQkgICAqcHJldl9wdHIgPSAmYnVja2V0c1tiXTsKKwkJaW50CQkJaWR4ID0gYnVja2V0 c1tiXTsKKworCQl3aGlsZSAoaWR4ICE9IGludmFsaWQpCisJCXsKKwkJCWludDY0CQlhZ2U7CisJ CQlpbnQ2NAkJdG90YWxfYWdlOworCQkJYm9vbAkJZXhwaXJlZDsKKworCQkJYWdlID0gZWxhcHNl ZF91cygKKwkJCQkJCQkgJmVudHJpZXNbaWR4XS5sYXN0X3dyaXRlX3RpbWUsICZub3cpOworCQkJ ZXhwaXJlZCA9IChhZ2UgPiAoaW50NjQpIHR0bF91cyk7CisKKwkJCS8qCisJCQkgKiBBbHNvIGV2 aWN0IGVudHJpZXMgdGhhdCBleGNlZWQgbWF4X3N0YWxlbmVzcyBmcm9tIGZpcnN0IHdyaXRlLgor CQkJICovCisJCQlpZiAoIWV4cGlyZWQgJiYgbWF4X3N0YWxlX3VzID4gMCkKKwkJCXsKKwkJCQl0 b3RhbF9hZ2UgPSBlbGFwc2VkX3VzKAorCQkJCQkJCQkJICAgJmVudHJpZXNbaWR4XS5maXJzdF93 cml0ZV90aW1lLAorCQkJCQkJCQkJICAgJm5vdyk7CisJCQkJZXhwaXJlZCA9ICh0b3RhbF9hZ2Ug Pj0gbWF4X3N0YWxlX3VzKTsKKwkJCX0KKworCQkJaWYgKGV4cGlyZWQpCisJCQl7CisJCQkJLyog RW50cnkgaGFzIGV4cGlyZWQgLSByZW1vdmUgaXQgKi8KKwkJCQlpbnQJCQluZXh0ID0gZW50cmll c1tpZHhdLm5leHQ7CisKKwkJCQkqcHJldl9wdHIgPSBuZXh0OworCQkJCXRhYmxlX21hcF9mcmVl X2VudHJ5KG1hcCwgaWR4KTsKKwkJCQlpZHggPSBuZXh0OworCQkJCXJlbW92ZWQrKzsKKwkJCX0K KwkJCWVsc2UKKwkJCXsKKwkJCQlwcmV2X3B0ciA9ICZlbnRyaWVzW2lkeF0ubmV4dDsKKwkJCQlp ZHggPSBlbnRyaWVzW2lkeF0ubmV4dDsKKwkJCX0KKwkJfQorCX0KKworCWlmIChyZW1vdmVkID4g MCkKKwl7CisJCWVyZXBvcnQoREVCVUcxLAorCQkJCShlcnJtc2coInRyYWNrX3RhYmxlX211dGF0 aW9uOiBjbGVhbmVkIHVwICVkIGV4cGlyZWQgZW50cmllcyIsCisJCQkJCQlyZW1vdmVkKSkpOwor CX0KK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBQdWJsaWMgQVBJIGltcGxlbWVudGF0 aW9uCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIENhbGN1bGF0ZSB0aGUgdG90 YWwgc2hhcmVkIG1lbW9yeSBzaXplIHJlcXVpcmVkCisgKiBmb3IgdGhlIHRyYWNrIHRhYmxlIG11 dGF0aW9uIGZlYXR1cmUuCisgKi8KK1NpemUKK3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fc2ht ZW1fc2l6ZSh2b2lkKQoreworCVNpemUJCXNpemUgPSAwOworCWludAkJCXRibF9ia3Q7CisJaW50 CQkJdGJsX3N6OworCisJdGJsX2JrdCA9IHBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlv bl90YWJsZV9idWNrZXRzOworCXRibF9zeiA9IHBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRh dGlvbl90YWJsZV9zaXplOworCisJLyogTWFpbiBzdHJ1Y3R1cmUgKi8KKwlzaXplICs9IHNpemVv ZihUcmFja1RhYmxlTXV0YXRpb25TaG1lbSk7CisKKwkvKiBUYWJsZSBtdXRhdGlvbiBoYXNoIHRh YmxlICovCisJc2l6ZSArPSBzaXplb2YoVHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxlKTsKKwlz aXplICs9IHRibF9ia3QgKiBzaXplb2YoaW50KTsKKwlzaXplICs9IHRibF9zeiAqIHNpemVvZihU cmFja1RhYmxlTXV0YXRpb25FbnRyeSk7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworLyoKKyAqIElu aXRpYWxpemUgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmVzIGZvciB0aGUKKyAqIHRyYWNrIHRhYmxl IG11dGF0aW9uIGZlYXR1cmUuICBBbGxvY2F0ZXMgYW5kIHNldHMKKyAqIHVwIHRoZSB0YWJsZSBt YXAgYW5kIHBhcnNlIGNhY2hlIGluIHNoYXJlZCBtZW1vcnkuCisgKiBDYWxsZWQgb25jZSBmcm9t IHBncG9vbCBtYWluIHByb2Nlc3MgYXQgc3RhcnR1cC4KKyAqLwordm9pZAorcG9vbF90cmFja190 YWJsZV9tdXRhdGlvbl9pbml0KHZvaWQpCit7CisjaWZuZGVmIFBPT0xfUFJJVkFURQorCVNpemUJ CXNobWVtX3NpemU7CisJY2hhcgkgICAqc2htZW1fcHRyOworCVRyYWNrVGFibGVNdXRhdGlvblN0 YXRlICpzdDsKKwlpbnQJCQl0YmxfYmt0OworCWludAkJCXRibF9zejsKKworCWlmIChwb29sX2Nv bmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgIT0KKwkJRExCT1dfRE1MX0FEQVBU SVZFX0dMT0JBTCkKKwl7CisJCWVyZXBvcnQoREVCVUcxLAorCQkJCShlcnJtc2coInRyYWNrX3Rh YmxlX211dGF0aW9uOiBmZWF0dXJlIGRpc2FibGVkIikpKTsKKwkJcmV0dXJuOworCX0KKworCXRi bF9ia3QgPSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0czsK Kwl0Ymxfc3ogPSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZTsK KworCXNobWVtX3NpemUgPSBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtX3NpemUoKTsK KworCS8qCisJICogQWxsb2NhdGUgZnJvbSB0aGUgbWFpbiBzaGFyZWQgbWVtb3J5IHNlZ21lbnQu IE1lbW9yeSBpcyB6ZXJvZWQgYnkKKwkgKiBpbml0aWFsaXplX3NoYXJlZF9tZW1vcnlfbWFpbl9z ZWdtZW50KCkuCisJICovCisJc2htZW1fcHRyID0gcG9vbF9zaGFyZWRfbWVtb3J5X3NlZ21lbnRf Z2V0X2NodW5rKAorCQkJCQkJCQkJCQkJCSBzaG1lbV9zaXplKTsKKwlpZiAoc2htZW1fcHRyID09 IE5VTEwpCisJeworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJtc2coInRyYWNrX3RhYmxlX211 dGF0aW9uOiBmYWlsZWQgdG8gYWxsb2NhdGUgJXp1IGJ5dGVzIiwKKwkJCQkJCXNobWVtX3NpemUp KSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBTZXQgdXAgcG9pbnRlcnMgd2l0aGluIHNoYXJlZCBt ZW1vcnkgKi8KKwl0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbSA9CisJCShUcmFja1RhYmxlTXV0 YXRpb25TaG1lbSAqKSBzaG1lbV9wdHI7CisJc2htZW1fcHRyICs9IHNpemVvZihUcmFja1RhYmxl TXV0YXRpb25TaG1lbSk7CisKKwl0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+dGFibGVfbWFw ID0KKwkJKFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqKSBzaG1lbV9wdHI7CisKKwkvKiBJ bml0aWFsaXplIHRhYmxlIG1hcCAqLworCXRhYmxlX21hcF9pbml0KAorCQkJCSAgIHRyYWNrX3Rh YmxlX211dGF0aW9uX3NobWVtLT50YWJsZV9tYXAsCisJCQkJICAgdGJsX2JrdCwgdGJsX3N6KTsK KworCS8qIEluaXRpYWxpemUgZ2xvYmFsIHN0YXRlICovCisJc3QgPSAmdHJhY2tfdGFibGVfbXV0 YXRpb25fc2htZW0tPnN0YXRlOworCXN0LT5pbml0aWFsaXplZCA9IHRydWU7CisJc3QtPmN1cnJl bnRfdHRsX3VzID0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fREVGQVVMVF9UVExfVVM7CisJZ2V0dGlt ZW9mZGF5KCZzdC0+dHRsX2xhc3RfdXBkYXRlZCwgTlVMTCk7CisJZ2V0dGltZW9mZGF5KCZzdC0+ bGFzdF9jbGVhbnVwX3RpbWUsIE5VTEwpOworCXN0LT5nbG9iYWxfY29sZF9zdGFydF91bnRpbC50 dl9zZWMgPSAwOworCXN0LT5nbG9iYWxfY29sZF9zdGFydF91bnRpbC50dl91c2VjID0gMDsKKwlz dC0+c3RhdHNfcXVlcmllc19jaGVja2VkID0gMDsKKwlzdC0+c3RhdHNfZm9yY2VkX3ByaW1hcnkg PSAwOworCXN0LT5zdGF0c19hbGxvd2VkX3JlcGxpY2EgPSAwOworCisJZXJlcG9ydChMT0csCisJ CQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogaW5pdGlhbGl6ZWQgd2l0aCAlenUgYnl0 ZXMgc2htZW0iLAorCQkJCQlzaG1lbV9zaXplKSkpOworI2VuZGlmCit9CisKKy8qCisgKiBJbml0 aWFsaXplIHBlci1jaGlsZCBwcm9jZXNzIHN0YXRlLgorICogUmVjb3JkcyB0aGUgcHJvY2VzcyBz dGFydCB0aW1lIGZvciBjb2xkIHN0YXJ0CisgKiBwZXJpb2QgdHJhY2tpbmcuICBDYWxsZWQgd2hl biBhIGNoaWxkIHByb2Nlc3Mgc3RhcnRzLgorICovCit2b2lkCitwb29sX3RyYWNrX3RhYmxlX211 dGF0aW9uX2NoaWxkX2luaXQodm9pZCkKK3sKKwlpbnQJCQlkdXI7CisKKwlpZiAoVFJBQ0tfVEFC TEVfTVVUQVRJT05fRElTQUJMRUQoKSkKKwkJcmV0dXJuOworCisJZ2V0dGltZW9mZGF5KCZwcm9j ZXNzX3N0YXJ0X3RpbWUsIE5VTEwpOworCWNvbGRfc3RhcnRfaW5pdGlhbGl6ZWQgPSB0cnVlOwor CWR1ciA9IHBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0 aW9uOworCisJZXJlcG9ydChERUJVRzEsCisJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlv bjogY2hpbGQgaW5pdCwgY29sZCBzdGFydCAlZCBtcyIsCisJCQkJCWR1cikpKTsKK30KKworLyoK KyAqIENoZWNrIGlmIHRoZSBwcm9jZXNzIGlzIGluIGNvbGQgc3RhcnQgcGVyaW9kLgorICogRHVy aW5nIGNvbGQgc3RhcnQsIGFsbCBxdWVyaWVzIGFyZSByb3V0ZWQgdG8KKyAqIHByaW1hcnkgdG8g YXZvaWQgc3RhbGUgcmVhZHMuICBDaGVja3MgYm90aAorICogcGVyLXByb2Nlc3MgYW5kIGdsb2Jh bCAod2F0Y2hkb2cpIGNvbGQgc3RhcnQuCisgKi8KK2Jvb2wKK3Bvb2xfdHJhY2tfdGFibGVfbXV0 YXRpb25faW5fY29sZF9zdGFydCh2b2lkKQoreworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwlpbnQ2 NAkJZWxhcHNlZF9tczsKKwlpbnQJCQlkdXI7CisJVHJhY2tUYWJsZU11dGF0aW9uU3RhdGUgKnN0 OworCisJaWYgKFRSQUNLX1RBQkxFX01VVEFUSU9OX0RJU0FCTEVEKCkpCisJCXJldHVybiBmYWxz ZTsKKworCWR1ciA9IHBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0 X2R1cmF0aW9uOworCWlmIChkdXIgPD0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJZ2V0dGltZW9m ZGF5KCZub3csIE5VTEwpOworCXN0ID0gJnRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0 ZTsKKworCS8qIENoZWNrIHdhdGNoZG9nLXRyaWdnZXJlZCBnbG9iYWwgY29sZCBzdGFydCAqLwor CWlmIChzdC0+Z2xvYmFsX2NvbGRfc3RhcnRfdW50aWwudHZfc2VjICE9IDAgJiYKKwkJZWxhcHNl ZF91cygmbm93LAorCQkJCSAgICZzdC0+Z2xvYmFsX2NvbGRfc3RhcnRfdW50aWwpID4gMCkKKwl7 CisJCXJldHVybiB0cnVlOworCX0KKworCS8qIENoZWNrIHBlci1wcm9jZXNzIGNvbGQgc3RhcnQg Ki8KKwlpZiAoIWNvbGRfc3RhcnRfaW5pdGlhbGl6ZWQpCisJCXJldHVybiBmYWxzZTsKKworCWVs YXBzZWRfbXMgPSBlbGFwc2VkX3VzKCZwcm9jZXNzX3N0YXJ0X3RpbWUsICZub3cpIC8gMTAwMDsK KworCWlmIChlbGFwc2VkX21zIDwgZHVyKQorCXsKKwkJZXJlcG9ydChERUJVRzIsCisJCQkJKGVy cm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246IGNvbGQgc3RhcnQgKCVsZC8lZCBtcykiLAorCQkJ CQkJKGxvbmcpIGVsYXBzZWRfbXMsIGR1cikpKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0 dXJuIGZhbHNlOworfQorCisvKgorICogVHJpZ2dlciBhIGdsb2JhbCBjb2xkIHN0YXJ0IGZvciBh bGwgcHJvY2Vzc2VzLgorICogU2V0cyB0aGUgY29sZCBzdGFydCBlbmQgdGltZSBpbiBzaGFyZWQg bWVtb3J5LgorICogQ2FsbGVkIGFmdGVyIHdhdGNoZG9nIGxlYWRlciBjaGFuZ2UgdG8gZm9yY2Ug YWxsCisgKiBxdWVyaWVzIHRvIHByaW1hcnkgZHVyaW5nIHRoZSB0cmFuc2l0aW9uLgorICovCit2 b2lkCitwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3RyaWdnZXJfZ2xvYmFsX2NvbGRfc3RhcnQo dm9pZCkKK3sKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJc3RydWN0IHRpbWV2YWwgKnVudGlsOwor CWludAkJCWR1cjsKKworCWlmIChUUkFDS19UQUJMRV9NVVRBVElPTl9ESVNBQkxFRCgpKQorCQly ZXR1cm47CisKKwlkdXIgPSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9z dGFydF9kdXJhdGlvbjsKKwlpZiAoZHVyIDw9IDApCisJCXJldHVybjsKKworCWdldHRpbWVvZmRh eSgmbm93LCBOVUxMKTsKKwl1bnRpbCA9ICZ0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3Rh dGUKKwkJLmdsb2JhbF9jb2xkX3N0YXJ0X3VudGlsOworCSp1bnRpbCA9IG5vdzsKKwl1bnRpbC0+ dHZfc2VjICs9IGR1ciAvIDEwMDA7CisJdW50aWwtPnR2X3VzZWMgKz0gKGR1ciAlIDEwMDApICog MTAwMDsKKwlpZiAodW50aWwtPnR2X3VzZWMgPj0gMTAwMDAwMCkKKwl7CisJCXVudGlsLT50dl9z ZWMgKz0gdW50aWwtPnR2X3VzZWMgLyAxMDAwMDAwOworCQl1bnRpbC0+dHZfdXNlYyAlPSAxMDAw MDAwOworCX0KKworCWVyZXBvcnQoTE9HLAorCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRp b246IGdsb2JhbCBjb2xkIHN0YXJ0IGZvciAlZCBtcyIsCisJCQkJCWR1cikpKTsKK30KKworLyoK KyAqIENoZWNrIGlmIGEgdGFibGUgd2FzIHJlY2VudGx5IHdyaXR0ZW4gKGlzICJzdGFsZSIpLgor ICogUmV0dXJucyB0cnVlIGlmIHJlYWRzIHNob3VsZCBnbyB0byBwcmltYXJ5IGJlY2F1c2UKKyAq IHRoZSB0YWJsZSB3YXMgd3JpdHRlbiB3aXRoaW4gdGhlIGN1cnJlbnQgVFRMIHdpbmRvdy4KKyAq LworYm9vbAorcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9pc19zdGFsZSgKKwkJCQkJ CQkJCQkgaW50IHRhYmxlX29pZCwgaW50IGRib2lkKQoreworCVRyYWNrVGFibGVNdXRhdGlvbkhh c2hUYWJsZSAqbWFwOworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwl1aW50NjQJCXR0bF91czsKKwl1 aW50MzIJCWhhc2g7CisJaW50CQkJaWR4OworCWJvb2wJCWlzX3N0YWxlID0gZmFsc2U7CisKKwlp ZiAoVFJBQ0tfVEFCTEVfTVVUQVRJT05fRElTQUJMRUQoKSkKKwkJcmV0dXJuIGZhbHNlOworCisJ aWYgKHRhYmxlX29pZCA8PSAwIHx8IGRib2lkIDw9IDApCisJeworCQlpc19zdGFsZSA9IHRydWU7 CisJCWdvdG8gdXBkYXRlX3N0YXRzOworCX0KKworCW1hcCA9IHRyYWNrX3RhYmxlX211dGF0aW9u X3NobWVtLT50YWJsZV9tYXA7CisJaGFzaCA9IGZudjFhX2hhc2hfdGFibGVfa2V5KHRhYmxlX29p ZCwgZGJvaWQpOworCisJdGFibGVfbWFwX2xvY2soKTsKKworCWlkeCA9IHRhYmxlX21hcF9sb29r dXAobWFwLCB0YWJsZV9vaWQsIGRib2lkLCBoYXNoKTsKKwlpZiAoaWR4ICE9IFRSQUNLX1RBQkxF X01VVEFUSU9OX0lOVkFMSURfSU5ERVgpCisJeworCQlUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAq ZW50cmllczsKKwkJaW50NjQJCWFnZTsKKwkJaW50NjQJCXRvdGFsX2FnZTsKKwkJaW50NjQJCW1h eF9zdGFsZV91czsKKworCQllbnRyaWVzID0gVEFCTEVfTUFQX0VOVFJJRVMobWFwKTsKKwkJZ2V0 dGltZW9mZGF5KCZub3csIE5VTEwpOworCQl0dGxfdXMgPSB0cmFja190YWJsZV9tdXRhdGlvbl9z aG1lbS0+c3RhdGUKKwkJCS5jdXJyZW50X3R0bF91czsKKworCQlhZ2UgPSBlbGFwc2VkX3VzKAor CQkJCQkJICZlbnRyaWVzW2lkeF0ubGFzdF93cml0ZV90aW1lLCAmbm93KTsKKwkJaXNfc3RhbGUg PSAoYWdlIDwgKGludDY0KSB0dGxfdXMpOworCisJCS8qCisJCSAqIEVuZm9yY2UgbWF4X3N0YWxl bmVzcyBoYXJkIGNhcDogbm8gZW50cnkgY2FuIGZvcmNlIHByaW1hcnkgcm91dGluZworCQkgKiBs b25nZXIgdGhhbiBtYXhfc3RhbGVuZXNzIGZyb20gaXRzIGZpcnN0IHdyaXRlLgorCQkgKi8KKwkJ aWYgKGlzX3N0YWxlKQorCQl7CisJCQltYXhfc3RhbGVfdXMgPSAoaW50NjQpIHBvb2xfY29uZmln CisJCQkJLT50cmFja190YWJsZV9tdXRhdGlvbl9tYXhfc3RhbGVuZXNzCisJCQkJKiAxMDAwTEw7 CisJCQlpZiAobWF4X3N0YWxlX3VzID4gMCkKKwkJCXsKKwkJCQl0b3RhbF9hZ2UgPSBlbGFwc2Vk X3VzKAorCQkJCQkJCQkJICAgJmVudHJpZXNbaWR4XS5maXJzdF93cml0ZV90aW1lLAorCQkJCQkJ CQkJICAgJm5vdyk7CisJCQkJaWYgKHRvdGFsX2FnZSA+PSBtYXhfc3RhbGVfdXMpCisJCQkJCWlz X3N0YWxlID0gZmFsc2U7CisJCQl9CisJCX0KKworCQllcmVwb3J0KERFQlVHMiwKKwkJCQkoZXJy bXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogb2lkICVkIGRib2lkICVkIGVsYXBzZWQ9JWxkIHR0 bD0lbHUgc3RhbGU9JWQiLAorCQkJCQkJdGFibGVfb2lkLCBkYm9pZCwKKwkJCQkJCShsb25nKSBh Z2UsCisJCQkJCQkodW5zaWduZWQgbG9uZykgdHRsX3VzLAorCQkJCQkJaXNfc3RhbGUpKSk7CisJ fQorCisJdGFibGVfbWFwX3VubG9jaygpOworCit1cGRhdGVfc3RhdHM6CisJLyogVXBkYXRlIHN0 YXRpc3RpY3MgdXNpbmcgc2VtYXBob3JlICovCisJaWYgKHRyYWNrX3RhYmxlX211dGF0aW9uX3No bWVtICE9IE5VTEwpCisJeworCQlUcmFja1RhYmxlTXV0YXRpb25TdGF0ZSAqc3Q7CisKKwkJdGFi bGVfbWFwX2xvY2soKTsKKwkJc3QgPSAmdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRl OworCQlzdC0+c3RhdHNfcXVlcmllc19jaGVja2VkKys7CisJCWlmIChpc19zdGFsZSkKKwkJCXN0 LT5zdGF0c19mb3JjZWRfcHJpbWFyeSsrOworCQllbHNlCisJCQlzdC0+c3RhdHNfYWxsb3dlZF9y ZXBsaWNhKys7CisJCXRhYmxlX21hcF91bmxvY2soKTsKKwl9CisKKwlyZXR1cm4gaXNfc3RhbGU7 Cit9CisKKy8qCisgKiBNYXJrIG11bHRpcGxlIHRhYmxlcyBhcyByZWNlbnRseSB3cml0dGVuLgor ICogQ2FsbGVkIGFmdGVyIERNTCBxdWVyaWVzIGNvbXBsZXRlIHRvIHJlY29yZAorICogd2hpY2gg dGFibGVzIHdlcmUgbW9kaWZpZWQuCisgKi8KK3ZvaWQKK3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRp b25fbWFya190YWJsZXNfd3JpdHRlbigKKwkJCQkJCQkJCQkJICBjb25zdCBpbnQgKnRhYmxlX29p ZHMsIGludCBudW1fdGFibGVzLCBpbnQgZGJvaWQpCit7CisJVHJhY2tUYWJsZU11dGF0aW9uSGFz aFRhYmxlICptYXA7CisJVHJhY2tUYWJsZU11dGF0aW9uU3RhdGUgKnN0OworCXN0cnVjdCB0aW1l dmFsIG5vdzsKKwlpbnQJCQlpOworCisJaWYgKFRSQUNLX1RBQkxFX01VVEFUSU9OX0RJU0FCTEVE KCkpCisJCXJldHVybjsKKworCWlmIChudW1fdGFibGVzIDw9IDAgfHwgdGFibGVfb2lkcyA9PSBO VUxMIHx8CisJCWRib2lkIDw9IDApCisJCXJldHVybjsKKworCW1hcCA9IHRyYWNrX3RhYmxlX211 dGF0aW9uX3NobWVtLT50YWJsZV9tYXA7CisJc3QgPSAmdHJhY2tfdGFibGVfbXV0YXRpb25fc2ht ZW0tPnN0YXRlOworCWdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKKworCXRhYmxlX21hcF9sb2Nr KCk7CisKKwkvKiBQZXJpb2RpY2FsbHkgY2xlYW4gdXAgZXhwaXJlZCBlbnRyaWVzICovCisJaWYg KG1hcC0+bnVtX2VudHJpZXMgPiBtYXAtPm1heF9lbnRyaWVzICogMyAvIDQpCisJeworCQlpbnQ2 NAkJc2luY2VfY2xlYW51cDsKKworCQlzaW5jZV9jbGVhbnVwID0gZWxhcHNlZF91cygKKwkJCQkJ CQkJICAgJnN0LT5sYXN0X2NsZWFudXBfdGltZSwgJm5vdyk7CisJCS8qIDEwMG1zIGludGVydmFs ICovCisJCWlmIChzaW5jZV9jbGVhbnVwID4gMTAwMDAwKQorCQl7CisJCQl0YWJsZV9tYXBfY2xl YW51cF9leHBpcmVkKAorCQkJCQkJCQkJICBtYXAsIHN0LT5jdXJyZW50X3R0bF91cyk7CisJCQlz dC0+bGFzdF9jbGVhbnVwX3RpbWUgPSBub3c7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwg bnVtX3RhYmxlczsgaSsrKQorCXsKKwkJdWludDMyCQloYXNoOworCQlpbnQJCQl0YWJsZV9vaWQg PSB0YWJsZV9vaWRzW2ldOworCisJCWlmICh0YWJsZV9vaWQgPiAwKQorCQl7CisJCQloYXNoID0g Zm52MWFfaGFzaF90YWJsZV9rZXkoCisJCQkJCQkJCQkJdGFibGVfb2lkLCBkYm9pZCk7CisJCQl0 YWJsZV9tYXBfaW5zZXJ0KG1hcCwgdGFibGVfb2lkLAorCQkJCQkJCSBkYm9pZCwgaGFzaCwgJm5v dyk7CisJCX0KKwl9CisKKwl0YWJsZV9tYXBfdW5sb2NrKCk7Cit9CisKKy8qCisgKiBNYXJrIGEg c2luZ2xlIHRhYmxlIGFzIHJlY2VudGx5IHdyaXR0ZW4uCisgKi8KK3ZvaWQKK3Bvb2xfdHJhY2tf dGFibGVfbXV0YXRpb25fbWFya190YWJsZV93cml0dGVuKAorCQkJCQkJCQkJCQkgaW50IHRhYmxl X29pZCwgaW50IGRib2lkKQoreworCWlmICh0YWJsZV9vaWQgPiAwICYmIGRib2lkID4gMCkKKwl7 CisJCWNvbnN0IGludAl0YWJsZXNbMV0gPSB7dGFibGVfb2lkfTsKKworCQlwb29sX3RyYWNrX3Rh YmxlX211dGF0aW9uX21hcmtfdGFibGVzX3dyaXR0ZW4oCisJCQkJCQkJCQkJCQkJICB0YWJsZXMs IDEsIGRib2lkKTsKKwl9Cit9CisKKy8qCisgKiBVcGRhdGUgdGhlIHN0YWxlbmVzcyBUVEwgYmFz ZWQgb24gb2JzZXJ2ZWQKKyAqIHJlcGxpY2F0aW9uIGRlbGF5LiAgTmV3IFRUTCA9IGRlbGF5ICog ZmFjdG9yLAorICogY2xhbXBlZCB0byBbZGVmYXVsdF90dGwsIDEgaG91cl0uCisgKi8KK3ZvaWQK K3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fdXBkYXRlX3R0bCh1aW50NjQgZGVsYXlfdXMpCit7 CisJdWludDY0CQluZXdfdHRsOworCWRvdWJsZQkJZmFjdG9yOworCVRyYWNrVGFibGVNdXRhdGlv blN0YXRlICpzdDsKKworCWlmIChUUkFDS19UQUJMRV9NVVRBVElPTl9ESVNBQkxFRCgpKQorCQly ZXR1cm47CisKKwlmYWN0b3IgPSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fdHRs X2ZhY3RvcjsKKwluZXdfdHRsID0gKHVpbnQ2NCkgKGRlbGF5X3VzICogZmFjdG9yKTsKKwlpZiAo bmV3X3R0bCA8IFRSQUNLX1RBQkxFX01VVEFUSU9OX0RFRkFVTFRfVFRMX1VTKQorCQluZXdfdHRs ID0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fREVGQVVMVF9UVExfVVM7CisKKwkvKiBNYXhpbXVtIFRU TCBvZiAxIGhvdXIgKi8KKwlpZiAobmV3X3R0bCA+IDM2MDBVTEwgKiAxMDAwMDAwVUxMKQorCQlu ZXdfdHRsID0gMzYwMFVMTCAqIDEwMDAwMDBVTEw7CisKKwlzdCA9ICZ0cmFja190YWJsZV9tdXRh dGlvbl9zaG1lbS0+c3RhdGU7CisJc3QtPmN1cnJlbnRfdHRsX3VzID0gbmV3X3R0bDsKKwlnZXR0 aW1lb2ZkYXkoJnN0LT50dGxfbGFzdF91cGRhdGVkLCBOVUxMKTsKKworCWVyZXBvcnQoREVCVUcx LAorCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246IFRUTD0lbHUgdXMgKGRlbGF5PSVs dSBmYWN0b3I9JS4xZikiLAorCQkJCQkodW5zaWduZWQgbG9uZykgbmV3X3R0bCwKKwkJCQkJKHVu c2lnbmVkIGxvbmcpIGRlbGF5X3VzLAorCQkJCQlmYWN0b3IpKSk7Cit9Ci0tIAoyLjU0LjAKCg== --0000000000006bb0f20655387379--