Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pY6Ck-0005nY-Ai for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Mar 2023 14:16:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pY6Ch-0003DP-77 for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Mar 2023 14:16:11 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pY6Cg-0003DF-9P for pgsql-hackers@lists.postgresql.org; Fri, 03 Mar 2023 14:16:10 +0000 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pY6CZ-00066R-2z for pgsql-hackers@lists.postgresql.org; Fri, 03 Mar 2023 14:16:09 +0000 Received: by mail-pl1-x631.google.com with SMTP id n6so2794782plf.5 for ; Fri, 03 Mar 2023 06:16:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=7rsFgSftLdu7uO9kxMCf+Uq0UyxEEJg0+Lx9DjCwioM=; b=gibExfFjNpfE0VM0GJd8o1YgbJKry9f9j0VtcTLI2GLJghNoJGj/WktlSVJbrm+tYK fL+BYewX/Vt6FJlighTOZULSZIwIiETRQIt59VQGgOTuYxaGhgaPGnrpRf/zsYOu5k96 hwyXT8W21L+r3Q054za9+VtFmJYm2r0sS6WNfvt9KzIxahTXzsRcX/iAkzsCCmbsPqhd 5ZgQM8liy8qpm0uwNLUAIe67Qnh0bqCEkcWqIFRouUYD+T+58YacYYaT+2k8gRSx6mT2 70iXsNdaWNnjshzlr8kKGExFN+L4+49i99wdAZybb9egMKackgqoOCf/8N35QFMMMRF9 28MQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=7rsFgSftLdu7uO9kxMCf+Uq0UyxEEJg0+Lx9DjCwioM=; b=ScvKSX9WGq6e0bcO4B2pqBVryAmr6rGQS/TOrBnp6mbLRGbKNxgpyMk9x65cnPQt/d 2nQBBpnc68B3FQVyQ21TY52lowXHiC3j/cCjzYzFL4v43XQ+REGssTqtOd8tDvsKXGio EPe/oEEkyn+QEFfpebEJ3gzEL3H2h6xxp73PkzUa02Xq6CiIbccFR4gcF/hNvpc5kHX9 xTtMTaiDfKYapx0937TqD2CM5b0xAa46wADiN5qG+dLeDmSCwX5A6iSWAgJVhnAlzrVT 1pq2kLV85q/Fj/h74ia0isvyNwSSvrx6U1x957AKNBzWkZ+oh/GwIOkcNZTzI9SpDZ/J XVbg== X-Gm-Message-State: AO0yUKVAEqRnzmh/BeAXZSnzdlPxwaUQDdtlDhmuqszQn8yhRhSDBL8q JDCofPzCpT5fzb6NXi9Rg3Qd7F7Ko+/JuVdDoyY= X-Google-Smtp-Source: AK7set+b169NOJ+NlSJbjkORnzeZS+mewW6vW6nqIjYxLdI6ESr4yGTMmm0CdLBY/Uaju1Qh2YRqQIxfmwjyth7HVK0= X-Received: by 2002:a17:902:784d:b0:196:7567:ae2b with SMTP id e13-20020a170902784d00b001967567ae2bmr760877pln.3.1677852961731; Fri, 03 Mar 2023 06:16:01 -0800 (PST) MIME-Version: 1.0 References: <20221206184756.2fdpd4epvyftutoe@awork3.anarazel.de> <3466340.1673117404@sss.pgh.pa.us> <20230109200347.ps43ri7llrxusgu5@awork3.anarazel.de> <4184492.1673296630@sss.pgh.pa.us> In-Reply-To: From: =?UTF-8?B?w5ZuZGVyIEthbGFjxLE=?= Date: Fri, 3 Mar 2023 17:15:49 +0300 Message-ID: Subject: Re: [PATCH] Use indexes on the subscriber when REPLICA IDENTITY is full on the publisher To: "Hayato Kuroda (Fujitsu)" , Amit Kapila Cc: "shiy.fnst@fujitsu.com" , "wangw.fnst@fujitsu.com" , Marco Slot , Tom Lane , Andres Freund , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000c5224205f5ff9514" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c5224205f5ff9514 Content-Type: multipart/alternative; boundary="000000000000c5223e05f5ff9512" --000000000000c5223e05f5ff9512 Content-Type: text/plain; charset="UTF-8" Hi Hayato, Amit, all > > > ``` > + /* Build scankey for every non-expression attribute in the index. > */ > ``` > > I think that single line comments should not terminated by ".". > Hmm, looking into execReplication.c, many of the single line comments terminated by ".". Also, On the HEAD, the same comment has single line comment. So, I'd rather stick to that? > > ``` > + /* There should always be at least one attribute for the index > scan. */ > ``` > > Same as above. > Same as above :) > > > ``` > +#ifdef USE_ASSERT_CHECKING > + IndexInfo *indexInfo = BuildIndexInfo(idxrel); > + > + Assert(!IsIndexOnlyOnExpression(indexInfo)); > +#endif > ``` > > I may misunderstand, but the condition of usable index has alteady been > checked > when the oid was set but anyway the you confirmed the condition again > before > really using that, right? > So is it OK not to check another assumption that the index is b-tree, > non-partial, > and one column reference? IIUC we can do that by adding new function like > IsIndexUsableForReplicaIdentityFull() > that checks these condition, and then call at > RelationFindReplTupleByIndex() if > idxIsRelationIdentityOrPK is false. > I think adding a function like IsIndexUsableForReplicaIdentityFull is useful. I can use it inside FindUsableIndexForReplicaIdentityFull() and assert here. Also good for readability. So, I mainly moved this assert to a more generic place with a more generic check to RelationFindReplTupleByIndex > > 032_subscribe_use_index.pl > > ``` > +# Testcase start: SUBSCRIPTION CREATE/DROP INDEX WORKS WITHOUT ISSUES > ... > +# Testcase end: SUBSCRIPTION RE-CALCULATES INDEX AFTER CREATE/DROP INDEX > ``` > > There is still non-consistent case. > > Fixed, thanks Anyway, I see your point, so > if you want to keep the naming as you proposed at least don't change > the ordering for get_opclass_input_type() call because that looks odd > to me. (A small comment from Amit's previous e-mail) Sure, applied now. Attaching v31. Thanks for the reviews! Onder KALACI --000000000000c5223e05f5ff9512 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Hayato, Amit, all




```
+=C2=A0 =C2=A0 =C2=A0 =C2=A0/* Build scankey for every non-expression attri= bute in the index. */
```

I think that single line comments should not terminated by ".".

Hmm, looking into execReplication.c, man= y of the single line comments
terminated=C2=A0by ".".= =C2=A0 Also, On the HEAD, the same comment has single
line commen= t. So, I'd rather stick to that?

=C2=A0
<= blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-l= eft:1px solid rgb(204,204,204);padding-left:1ex">
```
+=C2=A0 =C2=A0 =C2=A0 =C2=A0/* There should always be at least one attribut= e for the index scan. */
```

Same as above.

Same as above :)=C2=A0
=C2=A0


```
+#ifdef USE_ASSERT_CHECKING
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0IndexInfo=C2=A0 *indexInfo =3D BuildIndexInfo(idxrel);
+
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0Assert(!IsIndexOnlyOnExpression(indexInfo));
+#endif
```

I may misunderstand, but the condition of usable index has alteady been che= cked
when the oid was set but anyway the you confirmed the condition again befor= e
really using that, right?
So is it OK not to check another assumption that the index is b-tree, non-p= artial,
and one column reference?
IIUC we can do that by adding new function like IsIndexUsableForReplicaIden= tityFull()
that checks these condition, and then call at RelationFindReplTupleByIndex(= ) if
idxIsRelationIdentityOrPK is false.

I t= hink adding a function like IsIndexUsableForReplicaIdentityFull is useful. = I can use it inside
FindUsableIndexForReplicaIdentityFull() and a= ssert here. Also good for readability.

So, I m= ainly moved this assert to a more generic place with a more generic check
to=C2=A0RelationFindReplTupleByIndex
=C2=A0

032_subscribe_use_index.pl

```
+# Testcase start: SUBSCRIPTION CREATE/DROP INDEX WORKS WITHOUT ISSUES
...
+# Testcase end: SUBSCRIPTION RE-CALCULATES INDEX AFTER CREATE/DROP INDEX ```

There is still non-consistent case.


Fixed, thanks

Anyway, I see your point, so
if you want to keep the naming a= s you proposed at least don't change
the ordering for get_opclass_in= put_type() call because that looks odd
to me.

(A small comment from Amit's previous e-mail)

Sure, applied now.

Attaching v31.
<= div>
Thanks for the reviews!
Onder KALACI
=C2=A0
--000000000000c5223e05f5ff9512-- --000000000000c5224205f5ff9514 Content-Type: application/octet-stream; name="v31_0001_use_index_on_subs_when_pub_rep_ident_full.patch" Content-Disposition: attachment; filename="v31_0001_use_index_on_subs_when_pub_rep_ident_full.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_leslw5xd0 RnJvbSBlNzE0N2Y4OWVkOTVkZWUwODdhZTk2OTNlNWZlMzFmOGVmOTIxY2EwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBPbmRlciBLYWxhY2kgPG9uZGVya2FsYWNpQGdtYWlsLmNvbT4K RGF0ZTogV2VkLCAyMiBGZWIgMjAyMyAxNDoxMjo1NiArMDMwMApTdWJqZWN0OiBbUEFUQ0ggdjEw NF0gVXNlIGluZGV4ZXMgb24gdGhlIHN1YnNjcmliZXIgd2hlbiBSRVBMSUNBIElERU5USVRZIGlz CiBmdWxsIG9uIHRoZSBwdWJsaXNoZXIKClVzaW5nIGBSRVBMSUNBIElERU5USVRZIEZVTExgIG9u IHRoZSBwdWJsaWNhdGlvbiBsZWFkcyB0byBhIGZ1bGwgdGFibGUKc2NhbiBwZXIgdHVwbGUgY2hh bmdlIG9uIHRoZSBzdWJzY3JpcHRpb24uIFRoaXMgbWFrZXMgYFJFUExJQ0EKSURFTlRJVFkgRlVM TGAgaW1wcmFjdGljYWJsZSAtLSBwcm9iYWJseSBvdGhlciB0aGFuIHNvbWUgc21hbGwgbnVtYmVy Cm9mIHVzZSBjYXNlcy4KCldpdGggdGhpcyBwYXRjaCwgSSdtIHByb3Bvc2luZyB0aGUgZm9sbG93 aW5nIGNoYW5nZTogSWYgdGhlcmUgaXMgYW55CmluZGV4IG9uIHRoZSBzdWJzY3JpYmVyLCBsZXQg dGhlIGFwcGx5IHdvcmtlciB1c2UgYW4gaW5kZXguIFRoZSBpbmRleApzaG91bGQgYmUgYSBidHJl ZSBpbmRleCwgbm90IGEgcGFydGlhbCBpbmRleCwgYW5kIGl0IHNob3VsZCBoYXZlIGF0CmxlYXN0 IG9uZSBjb2x1bW4gcmVmZXJlbmNlIChlLmcuLCBjYW5ub3QgY29uc2lzdCBvZiBvbmx5IGV4cHJl c3Npb25zKS4KClRoZXJlIGlzIG5vIHNtYXJ0IG1lY2hhbmlzbSB0byBwaWNrIHRoZSBpbmRleC4g SWYgdGhlcmUgaXMgbW9yZSB0aGFuCm9uZSBpbmRleCB0aGF0IHNhdGlzZmllcyB0aGVzZSByZXF1 aXJlbWVudHMsIHdlIGp1c3QgcGljayB0aGUgZmlyc3QKb25lLgoKVGhlIG1ham9yaXR5IG9mIHRo ZSBsb2dpYyBvbiB0aGUgc3Vic2NyaWJlciBzaWRlIGFscmVhZHkgZXhpc3RzIGluCnRoZSBjb2Rl LiBUaGUgc3Vic2NyaWJlciBpcyBhbHJlYWR5IGNhcGFibGUgb2YgZG9pbmcgKHVuaXF1ZSkgaW5k ZXgKc2NhbnMuICBXaXRoIHRoaXMgcGF0Y2gsIHdlIGFyZSBhbGxvd2luZyB0aGUgaW5kZXggdG8g aXRlcmF0ZSBvdmVyIHRoZQp0dXBsZXMgZmV0Y2hlZCBhbmQgb25seSBhY3Qgd2hlbiB0dXBsZXMg YXJlIGVxdWFsLiBBbnlvbmUgZmFtaWxpYXIKd2l0aCB0aGlzIHBhcnQgb2YgdGhlIGNvZGUgbWln aHQgcmVjb2duaXplIHRoYXQgdGhlIHNlcXVlbnRpYWwgc2Nhbgpjb2RlIG9uIHRoZSBzdWJzY3Jp YmVyIGFscmVhZHkgaW1wbGVtZW50cyB0aGUgYHR1cGxlc19lcXVhbCgpYApmdW5jdGlvbi4gSW4g c2hvcnQsIHRoZSBjaGFuZ2VzIG9uIHRoZSBzdWJzY3JpYmVyIGFyZSBtb3N0bHkKY29tYmluaW5n IHBhcnRzIG9mICh1bmlxdWUpIGluZGV4IHNjYW4gYW5kIHNlcXVlbnRpYWwgc2NhbiBjb2Rlcy4K CkZyb20gdGhlIHBlcmZvcm1hbmNlIHBvaW50IG9mIHZpZXcsIHRoZXJlIGFyZSBhIGZldyB0aGlu Z3MgdG8gbm90ZS4KRmlyc3QsIHRoZSBwYXRjaCBhaW1zIG5vdCB0byBjaGFuZ2UgdGhlIGJlaGF2 aW9yIHdoZW4gUFJJTUFSWSBLRVkKb3IgVU5JUVVFIElOREVYIGlzIHVzZWQuIFNlY29uZCwgd2hl biBSRVBMSUNBIElERU5USVRZIEZVTEwgaXMgb24KdGhlIHB1Ymxpc2hlciBhbmQgYW4gaW5kZXgg aXMgdXNlZCBvbiB0aGUgc3Vic2NyaWJlciwgdGhlCmRpZmZlcmVuY2UgbW9zdGx5IGNvbWVzIGRv d24gdG8gYGluZGV4IHNjYW5gIHZzIGBzZXF1ZW50aWFsIHNjYW5gLgpUaGF0J3Mgd2h5IGl0IGlz IGhhcmQgdG8gY2xhaW0gY2VydGFpbiBudW1iZXIgb2YgaW1wcm92ZW1lbnRzLgpJdCBtb3N0bHkg ZGVwZW5kcyBvbiB0aGUgZGF0YSBzaXplLCBpbmRleCBhbmQgdGhlIGRhdGEgZGlzdHJpYnV0aW9u LgoKU3RpbGwsIGJlbG93IEkgdHJ5IHRvIHNob3djYXNlIHRoZSBwb3RlbnRpYWwgaW1wcm92ZW1l bnRzIHVzaW5nIGFuCmluZGV4IG9uIHRoZSBzdWJzY3JpYmVyIGBwZ2JlbmNoX2FjY291bnRzKGJp ZClgLiBXaXRoIHRoZSBpbmRleCwKYWxsIHRoZSBjaGFuZ2VzIGFyZSByZXBsaWNhdGVkIHdpdGhp biB+NSBzZWNvbmRzLiBXaGVuIHRoZSBpbmRleAppcyBkcm9wcGVkLCB0aGUgc2FtZSBvcGVyYXRp b24gdGFrZXMgYXJvdW5kIH4zMDAgc2Vjb25kcy4KCi8vIGluaXQgc291cmNlIGRiCnBnYmVuY2gg LWkgLXMgMTAwIC1wIDU0MzIgcG9zdGdyZXMKcHNxbCAtYyAiQUxURVIgVEFCTEUgcGdiZW5jaF9h Y2NvdW50cyBEUk9QIENPTlNUUkFJTlQgcGdiZW5jaF9hY2NvdW50c19wa2V5OyIgLXAgNTQzMiBw b3N0Z3Jlcwpwc3FsIC1jICJDUkVBVEUgSU5ERVggaTEgT04gcGdiZW5jaF9hY2NvdW50cyhhaWQp OyIgLXAgNTQzMiBwb3N0Z3Jlcwpwc3FsIC1jICJBTFRFUiBUQUJMRSBwZ2JlbmNoX2FjY291bnRz IFJFUExJQ0EgSURFTlRJVFkgRlVMTDsiIC1wIDU0MzIgcG9zdGdyZXMKcHNxbCAtYyAiQ1JFQVRF IFBVQkxJQ0FUSU9OIHB1Yl90ZXN0XzEgRk9SIFRBQkxFIHBnYmVuY2hfYWNjb3VudHM7IiAtcCA1 NDMyIHBvc3RncmVzCgovLyBpbml0IHRhcmdldCBkYiwgZHJvcCBleGlzdGluZyBwcmltYXJ5IGtl eQpwZ2JlbmNoIC1pIC1wIDk3MDAgcG9zdGdyZXMKcHNxbCAtYyAiVFJVTkNBVEUgcGdiZW5jaF9h Y2NvdW50czsiIC1wIDk3MDAgcG9zdGdyZXMKcHNxbCAtYyAiQUxURVIgVEFCTEUgcGdiZW5jaF9h Y2NvdW50cyBEUk9QIENPTlNUUkFJTlQgcGdiZW5jaF9hY2NvdW50c19wa2V5OyIgLXAgOTcwMCBw b3N0Z3Jlcwpwc3FsIC1jICJDUkVBVEUgU1VCU0NSSVBUSU9OIHN1Yl90ZXN0XzEgQ09OTkVDVElP TiAnaG9zdD1sb2NhbGhvc3QgcG9ydD01NDMyIHVzZXI9b25kZXJrYWxhY2kgZGJuYW1lPXBvc3Rn cmVzJyBQVUJMSUNBVElPTiBwdWJfdGVzdF8xOyIgLXAgOTcwMCBwb3N0Z3JlcwoKLy8gY3JlYXRl IG9uZSBpbmRleCwgZXZlbiBvbiBhIGxvdyBjYXJkaW5hbGl0eSBjb2x1bW4KcHNxbCAtYyAiQ1JF QVRFIElOREVYIGkyIE9OIHBnYmVuY2hfYWNjb3VudHMoYmlkKTsiIC1wIDk3MDAgcG9zdGdyZXMK Ci8vIG5vdywgcnVuIHNvbWUgcGdiZW5jaCB0ZXN0cyBhbmQgb2JzZXJ2ZSByZXBsaWNhdGlvbgpw Z2JlbmNoIC10IDUwMCAtYiB0cGNiLWxpa2UgLXAgNTQzMiBwb3N0Z3JlcwotLS0KIGRvYy9zcmMv c2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgICAgICAgICB8ICAyMiArLQogc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMgICAgICAgIHwgMTI5ICsrLQogc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jICAgIHwgMjAwICsrKysKIHNyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgICAgICB8ICA2OCArLQogc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vbG9naWNhbHJlbGF0aW9uLmggICAgIHwgICA1ICsKIHNyYy90ZXN0L3N1 YnNjcmlwdGlvbi9tZXNvbi5idWlsZCAgICAgICAgICAgICB8ICAgMSArCiAuLi4vc3Vic2NyaXB0 aW9uL3QvMDMyX3N1YnNjcmliZV91c2VfaW5kZXgucGwgfCA5MzMgKysrKysrKysrKysrKysrKysr CiA3IGZpbGVzIGNoYW5nZWQsIDEyOTMgaW5zZXJ0aW9ucygrKSwgNjUgZGVsZXRpb25zKC0pCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX3N1YnNjcmliZV91 c2VfaW5kZXgucGwKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlv bi5zZ21sIGIvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbAppbmRleCAxYmQ1 NjYwYzg3Li5mNTE5YWU4YzU0IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBs aWNhdGlvbi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwK QEAgLTEyNCwxOSArMTI0LDI3IEBACiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIEEgcHVibGlz aGVkIHRhYmxlIG11c3QgaGF2ZSBhIDxxdW90ZT5yZXBsaWNhIGlkZW50aXR5PC9xdW90ZT4gY29u ZmlndXJlZCBpbgorICAgQSBwdWJsaXNoZWQgdGFibGUgbXVzdCBoYXZlIGEgPGZpcnN0dGVybT5y ZXBsaWNhIGlkZW50aXR5PC9maXJzdHRlcm0+IGNvbmZpZ3VyZWQgaW4KICAgIG9yZGVyIHRvIGJl IGFibGUgdG8gcmVwbGljYXRlIDxjb21tYW5kPlVQREFURTwvY29tbWFuZD4KICAgIGFuZCA8Y29t bWFuZD5ERUxFVEU8L2NvbW1hbmQ+IG9wZXJhdGlvbnMsIHNvIHRoYXQgYXBwcm9wcmlhdGUgcm93 cyB0bwogICAgdXBkYXRlIG9yIGRlbGV0ZSBjYW4gYmUgaWRlbnRpZmllZCBvbiB0aGUgc3Vic2Ny aWJlciBzaWRlLiAgQnkgZGVmYXVsdCwKICAgIHRoaXMgaXMgdGhlIHByaW1hcnkga2V5LCBpZiB0 aGVyZSBpcyBvbmUuICBBbm90aGVyIHVuaXF1ZSBpbmRleCAod2l0aAogICAgY2VydGFpbiBhZGRp dGlvbmFsIHJlcXVpcmVtZW50cykgY2FuIGFsc28gYmUgc2V0IHRvIGJlIHRoZSByZXBsaWNhCi0g ICBpZGVudGl0eS4gIElmIHRoZSB0YWJsZSBkb2VzIG5vdCBoYXZlIGFueSBzdWl0YWJsZSBrZXks IHRoZW4gaXQgY2FuIGJlIHNldAorICAgaWRlbnRpdHkuIElmIHRoZSB0YWJsZSBkb2VzIG5vdCBo YXZlIGFueSBzdWl0YWJsZSBrZXksIHRoZW4gaXQgY2FuIGJlIHNldAogICAgdG8gcmVwbGljYSBp ZGVudGl0eSA8cXVvdGU+ZnVsbDwvcXVvdGU+LCB3aGljaCBtZWFucyB0aGUgZW50aXJlIHJvdyBi ZWNvbWVzCi0gICB0aGUga2V5LiAgVGhpcywgaG93ZXZlciwgaXMgdmVyeSBpbmVmZmljaWVudCBh bmQgc2hvdWxkIG9ubHkgYmUgdXNlZCBhcyBhCi0gICBmYWxsYmFjayBpZiBubyBvdGhlciBzb2x1 dGlvbiBpcyBwb3NzaWJsZS4gIElmIGEgcmVwbGljYSBpZGVudGl0eSBvdGhlcgotICAgdGhhbiA8 cXVvdGU+ZnVsbDwvcXVvdGU+IGlzIHNldCBvbiB0aGUgcHVibGlzaGVyIHNpZGUsIGEgcmVwbGlj YSBpZGVudGl0eQotICAgY29tcHJpc2luZyB0aGUgc2FtZSBvciBmZXdlciBjb2x1bW5zIG11c3Qg YWxzbyBiZSBzZXQgb24gdGhlIHN1YnNjcmliZXIKLSAgIHNpZGUuICBTZWUgPHhyZWYgbGlua2Vu ZD0ic3FsLWFsdGVydGFibGUtcmVwbGljYS1pZGVudGl0eSIvPiBmb3IgZGV0YWlscyBvbgorICAg dGhlIGtleS4gV2hlbiByZXBsaWNhIGlkZW50aXR5IDxsaXRlcmFsPkZVTEw8L2xpdGVyYWw+IGlz IHNwZWNpZmllZCwKKyAgIGluZGV4ZXMgY2FuIGJlIHVzZWQgb24gdGhlIHN1YnNjcmliZXIgc2lk ZSBmb3Igc2VhcmNoaW5nIHRoZSByb3dzLiBUaGVzZQorICAgaW5kZXhlcyBzaG91bGQgYmUgYnRy ZWUsIG5vbi1wYXJ0aWFsIGFuZCBoYXZlIGF0IGxlYXN0IG9uZSBjb2x1bW4KKyAgIHJlZmVyZW5j ZSAoZS5nLiwgc2hvdWxkIG5vdCBjb25zaXN0IG9mIG9ubHkgZXhwcmVzc2lvbnMpLiBUaGVzZSBy ZXN0cmljdGlvbnMKKyAgIG9uIHRoZSBub24tdW5pcXVlIGluZGV4IHByb3BlcnRpZXMgYXJlIGlu IGVzc2VuY2UgdGhlIHNhbWUgcmVzdHJpY3Rpb25zIHRoYXQKKyAgIGFyZSBlbmZvcmNlZCBmb3Ig cHJpbWFyeSBrZXlzLiBJbnRlcm5hbGx5LCB3ZSBmb2xsb3cgdGhlIHNhbWUgYXBwcm9hY2ggZm9y CisgICBzdXBwb3J0aW5nIGluZGV4IHNjYW5zIHdpdGhpbiBsb2dpY2FsIHJlcGxpY2F0aW9uIHNj b3BlLiBJZiB0aGVyZSBhcmUgbm8KKyAgIHN1Y2ggc3VpdGFibGUgaW5kZXhlcywgdGhlIHNlYXJj aCBvbiB0aGUgc3Vic2NyaWJlciBzaWRlIGNhbiBiZSB2ZXJ5IGluZWZmaWNpZW50LAorICAgdGhl cmVmb3JlIHJlcGxpY2EgaWRlbnRpdHkgPGxpdGVyYWw+RlVMTDwvbGl0ZXJhbD4gc2hvdWxkIG9u bHkgYmUgdXNlZCBhcyBhCisgICBmYWxsYmFjayBpZiBubyBvdGhlciBzb2x1dGlvbiBpcyBwb3Nz aWJsZS4gSWYgYSByZXBsaWNhIGlkZW50aXR5IG90aGVyCisgICB0aGFuIDxsaXRlcmFsPmZ1bGw8 L2xpdGVyYWw+IGlzIHNldCBvbiB0aGUgcHVibGlzaGVyIHNpZGUsIGEgcmVwbGljYSBpZGVudGl0 eQorICAgY29tcHJpc2luZyB0aGUgc2FtZSBvciBmZXdlciBjb2x1bW5zIG11c3QgYWxzbyBiZSBz ZXQgb24gdGhlIHN1YnNjcmliZXIgc2lkZS4KKyAgIFNlZSA8eHJlZiBsaW5rZW5kPSJzcWwtYWx0 ZXJ0YWJsZS1yZXBsaWNhLWlkZW50aXR5Ii8+IGZvciBkZXRhaWxzIG9uCiAgICBob3cgdG8gc2V0 IHRoZSByZXBsaWNhIGlkZW50aXR5LiAgSWYgYSB0YWJsZSB3aXRob3V0IGEgcmVwbGljYSBpZGVu dGl0eSBpcwogICAgYWRkZWQgdG8gYSBwdWJsaWNhdGlvbiB0aGF0IHJlcGxpY2F0ZXMgPGNvbW1h bmQ+VVBEQVRFPC9jb21tYW5kPgogICAgb3IgPGNvbW1hbmQ+REVMRVRFPC9jb21tYW5kPiBvcGVy YXRpb25zIHRoZW4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNh dGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKaW5kZXggYzQ4 NGY1YzMwMS4uMzUwZTgxZjYwMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1JlcGxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9u LmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNs dWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVl LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHJlbGF0aW9uLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJ1 dGlscy9idWlsdGlucy5oIgpAQCAtMzcsNDkgKzM4LDc2IEBACiAjaW5jbHVkZSAidXRpbHMvdHlw Y2FjaGUuaCIKIAogCitzdGF0aWMgYm9vbCB0dXBsZXNfZXF1YWwoVHVwbGVUYWJsZVNsb3QgKnNs b3QxLCBUdXBsZVRhYmxlU2xvdCAqc2xvdDIsCisJCQkJCQkgVHlwZUNhY2hlRW50cnkgKiplcSk7 CisKIC8qCiAgKiBTZXR1cCBhIFNjYW5LZXkgZm9yIGEgc2VhcmNoIGluIHRoZSByZWxhdGlvbiAn cmVsJyBmb3IgYSB0dXBsZSAna2V5JyB0aGF0CiAgKiBpcyBzZXR1cCB0byBtYXRjaCAncmVsJyAo Kk5PVCogaWR4cmVsISkuCiAgKgotICogUmV0dXJucyB3aGV0aGVyIGFueSBjb2x1bW4gY29udGFp bnMgTlVMTHMuCisgKiBSZXR1cm5zIGhvdyBtYW55IGNvbHVtbnMgc2hvdWxkIGJlIHVzZWQgZm9y IHRoZSBpbmRleCBzY2FuLgorICoKKyAqIFRoaXMgaXMgbm90IGdlbmVyaWMgcm91dGluZSwgaXQg ZXhwZWN0cyB0aGUgaWR4cmVsIHRvIGJlIGEgYnRyZWUsIG5vbi1wYXJ0aWFsCisgKiBhbmQgaGF2 ZSBhdCBsZWFzdCBvbmUgY29sdW1uIHJlZmVyZW5jZSAoZS5nLiwgc2hvdWxkIG5vdCBjb25zaXN0 IG9mIG9ubHkKKyAqIGV4cHJlc3Npb25zKS4KICAqCi0gKiBUaGlzIGlzIG5vdCBnZW5lcmljIHJv dXRpbmUsIGl0IGV4cGVjdHMgdGhlIGlkeHJlbCB0byBiZSByZXBsaWNhdGlvbgotICogaWRlbnRp dHkgb2YgYSByZWwgYW5kIG1lZXQgYWxsIGxpbWl0YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGF0 LgorICogQnkgZGVmaW5pdGlvbiwgcmVwbGljYXRpb24gaWRlbnRpdHkgb2YgYSByZWwgbWVldHMg YWxsIGxpbWl0YXRpb25zIGFzc29jaWF0ZWQKKyAqIHdpdGggdGhhdC4gTm90ZSB0aGF0IGFueSBv dGhlciBpbmRleCBjb3VsZCBhbHNvIG1lZXQgdGhlc2UgbGltaXRhdGlvbnMuCiAgKi8KLXN0YXRp YyBib29sCitzdGF0aWMgaW50CiBidWlsZF9yZXBsaW5kZXhfc2Nhbl9rZXkoU2NhbktleSBza2V5 LCBSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGlkeHJlbCwKIAkJCQkJCSBUdXBsZVRhYmxlU2xvdCAq c2VhcmNoc2xvdCkKIHsKLQlpbnQJCQlhdHRvZmY7CisJaW50CQkJaW5kZXhfYXR0b2ZmOworCWlu dAkJCXNrZXlfYXR0b2ZmID0gMDsKIAlib29sCQlpc251bGw7CiAJRGF0dW0JCWluZGNsYXNzRGF0 dW07CiAJb2lkdmVjdG9yICAqb3BjbGFzczsKIAlpbnQydmVjdG9yICppbmRrZXkgPSAmaWR4cmVs LT5yZF9pbmRleC0+aW5ka2V5OwotCWJvb2wJCWhhc251bGxzID0gZmFsc2U7Ci0KLQlBc3NlcnQo UmVsYXRpb25HZXRSZXBsaWNhSW5kZXgocmVsKSA9PSBSZWxhdGlvbkdldFJlbGlkKGlkeHJlbCkg fHwKLQkJICAgUmVsYXRpb25HZXRQcmltYXJ5S2V5SW5kZXgocmVsKSA9PSBSZWxhdGlvbkdldFJl bGlkKGlkeHJlbCkpOwogCiAJaW5kY2xhc3NEYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJF TElELCBpZHhyZWwtPnJkX2luZGV4dHVwbGUsCiAJCQkJCQkJCQlBbnVtX3BnX2luZGV4X2luZGNs YXNzLCAmaXNudWxsKTsKIAlBc3NlcnQoIWlzbnVsbCk7CiAJb3BjbGFzcyA9IChvaWR2ZWN0b3Ig KikgRGF0dW1HZXRQb2ludGVyKGluZGNsYXNzRGF0dW0pOwogCi0JLyogQnVpbGQgc2NhbmtleSBm b3IgZXZlcnkgYXR0cmlidXRlIGluIHRoZSBpbmRleC4gKi8KLQlmb3IgKGF0dG9mZiA9IDA7IGF0 dG9mZiA8IEluZGV4UmVsYXRpb25HZXROdW1iZXJPZktleUF0dHJpYnV0ZXMoaWR4cmVsKTsgYXR0 b2ZmKyspCisJLyogQnVpbGQgc2NhbmtleSBmb3IgZXZlcnkgbm9uLWV4cHJlc3Npb24gYXR0cmli dXRlIGluIHRoZSBpbmRleC4gKi8KKwlmb3IgKGluZGV4X2F0dG9mZiA9IDA7IGluZGV4X2F0dG9m ZiA8IEluZGV4UmVsYXRpb25HZXROdW1iZXJPZktleUF0dHJpYnV0ZXMoaWR4cmVsKTsKKwkJIGlu ZGV4X2F0dG9mZisrKQogCXsKIAkJT2lkCQkJb3BlcmF0b3I7CiAJCU9pZAkJCW9wZmFtaWx5Owog CQlSZWdQcm9jZWR1cmUgcmVnb3A7Ci0JCWludAkJCXBrYXR0bm8gPSBhdHRvZmYgKyAxOwotCQlp bnQJCQltYWluYXR0bm8gPSBpbmRrZXktPnZhbHVlc1thdHRvZmZdOwotCQlPaWQJCQlvcHR5cGUg PSBnZXRfb3BjbGFzc19pbnB1dF90eXBlKG9wY2xhc3MtPnZhbHVlc1thdHRvZmZdKTsKKwkJaW50 CQkJdGFibGVfYXR0bm8gPSBpbmRrZXktPnZhbHVlc1tpbmRleF9hdHRvZmZdOworCQlPaWQJCQlv cHR5cGUgPSBnZXRfb3BjbGFzc19pbnB1dF90eXBlKG9wY2xhc3MtPnZhbHVlc1tpbmRleF9hdHRv ZmZdKTsKKworCQlpZiAoIUF0dHJpYnV0ZU51bWJlcklzVmFsaWQodGFibGVfYXR0bm8pKQorCQl7 CisJCQkvKgorCQkJICogVGhpcyBhdHRyaWJ1dGUgaXMgYW4gZXhwcmVzc2lvbiwgYW5kCisJCQkg KiBGaW5kVXNhYmxlSW5kZXhGb3JSZXBsaWNhSWRlbnRpdHlGdWxsKCkgd2FzIGNhbGxlZCBlYXJs aWVyCisJCQkgKiB3aGVuIHRoZSBpbmRleCBmb3Igc3Vic2NyaWJlciB3YXMgc2VsZWN0ZWQuIFRo ZXJlLCB0aGUgaW5kZXhlcworCQkJICogY29tcHJpc2luZyAqb25seSogZXhwcmVzc2lvbnMgaGF2 ZSBhbHJlYWR5IGJlZW4gZWxpbWluYXRlZC4KKwkJCSAqCisJCQkgKiBBbHNvLCBiZWNhdXNlIFBL L1JJIGNhbid0IGluY2x1ZGUgZXhwcmVzc2lvbnMgd2UKKwkJCSAqIHNhbml0eSBjaGVjayB0aGUg aW5kZXggaXMgbmVpdGhlciBvZiB0aG9zZSBraW5kcy4KKwkJCSAqLworCQkJQXNzZXJ0KCFJZHhJ c1JlbGF0aW9uSWRlbnRpdHlPclBLKHJlbCwgaWR4cmVsLT5yZF9pZCkpOworCisJCQkvKgorCQkJ ICogWFhYOiBGb3IgYSBub24tcHJpbWFyeS91bmlxdWUgaW5kZXggd2l0aCBhbiBhZGRpdGlvbmFs CisJCQkgKiBleHByZXNzaW9uLCB3ZSBkbyBub3QgaGF2ZSB0byBjb250aW51ZSBhdCB0aGlzIHBv aW50LiBIb3dldmVyLAorCQkJICogdGhlIGJlbG93IGNvZGUgYXNzdW1lcyB0aGUgaW5kZXggc2Nh biBpcyBvbmx5IGRvbmUgZm9yIHNpbXBsZQorCQkJICogY29sdW1uIHJlZmVyZW5jZXMuIElmIHdl IGNhbiByZWxheCB0aGUgYXNzdW1wdGlvbiBpbiB0aGUgYmVsb3cKKwkJCSAqIGNvZGUtYmxvY2ss IHdlIGNhbiBhbHNvIHJlbW92ZSB0aGUgY29udGludWUuCisJCQkgKi8KKwkJCWNvbnRpbnVlOwor CQl9CiAKIAkJLyoKIAkJICogTG9hZCB0aGUgb3BlcmF0b3IgaW5mby4gIFdlIG5lZWQgdGhpcyB0 byBnZXQgdGhlIGVxdWFsaXR5IG9wZXJhdG9yCiAJCSAqIGZ1bmN0aW9uIGZvciB0aGUgc2NhbiBr ZXkuCiAJCSAqLwotCQlvcGZhbWlseSA9IGdldF9vcGNsYXNzX2ZhbWlseShvcGNsYXNzLT52YWx1 ZXNbYXR0b2ZmXSk7CisJCW9wZmFtaWx5ID0gZ2V0X29wY2xhc3NfZmFtaWx5KG9wY2xhc3MtPnZh bHVlc1tpbmRleF9hdHRvZmZdKTsKIAogCQlvcGVyYXRvciA9IGdldF9vcGZhbWlseV9tZW1iZXIo b3BmYW1pbHksIG9wdHlwZSwKIAkJCQkJCQkJCSAgIG9wdHlwZSwKQEAgLTkxLDIzICsxMTksMjUg QEAgYnVpbGRfcmVwbGluZGV4X3NjYW5fa2V5KFNjYW5LZXkgc2tleSwgUmVsYXRpb24gcmVsLCBS ZWxhdGlvbiBpZHhyZWwsCiAJCXJlZ29wID0gZ2V0X29wY29kZShvcGVyYXRvcik7CiAKIAkJLyog SW5pdGlhbGl6ZSB0aGUgc2NhbmtleS4gKi8KLQkJU2NhbktleUluaXQoJnNrZXlbYXR0b2ZmXSwK LQkJCQkJcGthdHRubywKKwkJU2NhbktleUluaXQoJnNrZXlbc2tleV9hdHRvZmZdLAorCQkJCQlp bmRleF9hdHRvZmYgKyAxLAogCQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsCiAJCQkJCXJlZ29w LAotCQkJCQlzZWFyY2hzbG90LT50dHNfdmFsdWVzW21haW5hdHRubyAtIDFdKTsKKwkJCQkJc2Vh cmNoc2xvdC0+dHRzX3ZhbHVlc1t0YWJsZV9hdHRubyAtIDFdKTsKIAotCQlza2V5W2F0dG9mZl0u c2tfY29sbGF0aW9uID0gaWR4cmVsLT5yZF9pbmRjb2xsYXRpb25bYXR0b2ZmXTsKKwkJc2tleVtz a2V5X2F0dG9mZl0uc2tfY29sbGF0aW9uID0gaWR4cmVsLT5yZF9pbmRjb2xsYXRpb25baW5kZXhf YXR0b2ZmXTsKIAogCQkvKiBDaGVjayBmb3IgbnVsbCB2YWx1ZS4gKi8KLQkJaWYgKHNlYXJjaHNs b3QtPnR0c19pc251bGxbbWFpbmF0dG5vIC0gMV0pCi0JCXsKLQkJCWhhc251bGxzID0gdHJ1ZTsK LQkJCXNrZXlbYXR0b2ZmXS5za19mbGFncyB8PSBTS19JU05VTEw7Ci0JCX0KKwkJaWYgKHNlYXJj aHNsb3QtPnR0c19pc251bGxbdGFibGVfYXR0bm8gLSAxXSkKKwkJCXNrZXlbc2tleV9hdHRvZmZd LnNrX2ZsYWdzIHw9IChTS19JU05VTEwgfCBTS19TRUFSQ0hOVUxMKTsKKworCQlza2V5X2F0dG9m ZisrOwogCX0KIAotCXJldHVybiBoYXNudWxsczsKKwkvKiBUaGVyZSBzaG91bGQgYWx3YXlzIGJl IGF0IGxlYXN0IG9uZSBhdHRyaWJ1dGUgZm9yIHRoZSBpbmRleCBzY2FuLiAqLworCUFzc2VydChz a2V5X2F0dG9mZiA+IDApOworCisJcmV0dXJuIHNrZXlfYXR0b2ZmOwogfQogCiAvKgpAQCAtMTIz LDMzICsxNTMsNjIgQEAgUmVsYXRpb25GaW5kUmVwbFR1cGxlQnlJbmRleChSZWxhdGlvbiByZWws IE9pZCBpZHhvaWQsCiAJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpvdXRzbG90KQogewogCVNjYW5L ZXlEYXRhIHNrZXlbSU5ERVhfTUFYX0tFWVNdOworCWludAkJCXNrZXlfYXR0b2ZmOwogCUluZGV4 U2NhbkRlc2Mgc2NhbjsKIAlTbmFwc2hvdERhdGEgc25hcDsKIAlUcmFuc2FjdGlvbklkIHh3YWl0 OwogCVJlbGF0aW9uCWlkeHJlbDsKIAlib29sCQlmb3VuZDsKKwlUeXBlQ2FjaGVFbnRyeSAqKmVx ID0gTlVMTDsKKwlib29sCQlpZHhJc1JlbGF0aW9uSWRlbnRpdHlPclBLOwogCiAJLyogT3BlbiB0 aGUgaW5kZXguICovCiAJaWR4cmVsID0gaW5kZXhfb3BlbihpZHhvaWQsIFJvd0V4Y2x1c2l2ZUxv Y2spOwogCi0JLyogU3RhcnQgYW4gaW5kZXggc2Nhbi4gKi8KKwlpZHhJc1JlbGF0aW9uSWRlbnRp dHlPclBLID0gSWR4SXNSZWxhdGlvbklkZW50aXR5T3JQSyhyZWwsIGlkeG9pZCk7CisKIAlJbml0 RGlydHlTbmFwc2hvdChzbmFwKTsKLQlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJlbCwgaWR4cmVs LCAmc25hcCwKLQkJCQkJCSAgIEluZGV4UmVsYXRpb25HZXROdW1iZXJPZktleUF0dHJpYnV0ZXMo aWR4cmVsKSwKLQkJCQkJCSAgIDApOwogCiAJLyogQnVpbGQgc2NhbiBrZXkuICovCi0JYnVpbGRf cmVwbGluZGV4X3NjYW5fa2V5KHNrZXksIHJlbCwgaWR4cmVsLCBzZWFyY2hzbG90KTsKKwlza2V5 X2F0dG9mZiA9IGJ1aWxkX3JlcGxpbmRleF9zY2FuX2tleShza2V5LCByZWwsIGlkeHJlbCwgc2Vh cmNoc2xvdCk7CisKKwkvKiBTdGFydCBhbiBpbmRleCBzY2FuLiAqLworCXNjYW4gPSBpbmRleF9i ZWdpbnNjYW4ocmVsLCBpZHhyZWwsICZzbmFwLCBza2V5X2F0dG9mZiwgMCk7CiAKIHJldHJ5Ogog CWZvdW5kID0gZmFsc2U7CiAKLQlpbmRleF9yZXNjYW4oc2Nhbiwgc2tleSwgSW5kZXhSZWxhdGlv bkdldE51bWJlck9mS2V5QXR0cmlidXRlcyhpZHhyZWwpLCBOVUxMLCAwKTsKKwlpbmRleF9yZXNj YW4oc2Nhbiwgc2tleSwgc2tleV9hdHRvZmYsIE5VTEwsIDApOwogCiAJLyogVHJ5IHRvIGZpbmQg dGhlIHR1cGxlICovCi0JaWYgKGluZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJkU2NhbkRp cmVjdGlvbiwgb3V0c2xvdCkpCisJd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3 YXJkU2NhbkRpcmVjdGlvbiwgb3V0c2xvdCkpCiAJewotCQlmb3VuZCA9IHRydWU7CisJCS8qCisJ CSAqIEF2b2lkIGV4cGVuc2l2ZSBlcXVhbGl0eSBjaGVjayBpZiB0aGUgaW5kZXggaXMgcHJpbWFy eSBrZXkgb3IKKwkJICogcmVwbGljYSBpZGVudGl0eSBpbmRleC4KKwkJICovCisJCWlmICghaWR4 SXNSZWxhdGlvbklkZW50aXR5T3JQSykKKwkJeworCQkJaWYgKGVxID09IE5VTEwpCisJCQl7Cisj aWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCQkJCS8qIGFwcGx5IGFzc2VydGlvbnMgb25seSBv bmNlIGZvciB0aGUgaW5wdXQgaWR4b2lkICovCisJCQkJSW5kZXhJbmZvICAqaW5kZXhJbmZvID0g QnVpbGRJbmRleEluZm8oaWR4cmVsKTsKKwkJCQlBc3NlcnQoSXNJbmRleFVzYWJsZUZvclJlcGxp Y2FJZGVudGl0eUZ1bGwoaW5kZXhJbmZvKSk7CisjZW5kaWYKKworCQkJCS8qCisJCQkJICogV2Ug b25seSBuZWVkIHRvIGFsbG9jYXRlIG9uY2UuIFRoaXMgaXMgYWxsb2NhdGVkIHdpdGhpbiBwZXIK KwkJCQkgKiB0dXBsZSBjb250ZXh0IC0tIEFwcGx5TWVzc2FnZUNvbnRleHQgLS0gaGVuY2Ugbm8g bmVlZCB0bworCQkJCSAqIGV4cGxpY2l0bHkgcGZyZWUoKS4KKwkJCQkgKi8KKwkJCQllcSA9IHBh bGxvYzAoc2l6ZW9mKCplcSkgKiBvdXRzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yLT5uYXR0cyk7 CisJCQl9CisKKwkJCWlmICghdHVwbGVzX2VxdWFsKG91dHNsb3QsIHNlYXJjaHNsb3QsIGVxKSkK KwkJCQljb250aW51ZTsKKwkJfQorCiAJCUV4ZWNNYXRlcmlhbGl6ZVNsb3Qob3V0c2xvdCk7CiAK IAkJeHdhaXQgPSBUcmFuc2FjdGlvbklkSXNWYWxpZChzbmFwLnhtaW4pID8KQEAgLTE2NCw2ICsy MjMsMTAgQEAgcmV0cnk6CiAJCQlYYWN0TG9ja1RhYmxlV2FpdCh4d2FpdCwgTlVMTCwgTlVMTCwg WExUV19Ob25lKTsKIAkJCWdvdG8gcmV0cnk7CiAJCX0KKworCQkvKiBGb3VuZCBvdXIgdHVwbGUg YW5kIGl0J3Mgbm90IGxvY2tlZCAqLworCQlmb3VuZCA9IHRydWU7CisJCWJyZWFrOwogCX0KIAog CS8qIEZvdW5kIHR1cGxlLCB0cnkgdG8gbG9jayBpdCBpbiB0aGUgbG9ja21vZGUuICovCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKaW5kZXggNTViZmEwNzg3MS4u YzI5MjdkMTg5ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9y ZWxhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24u YwpAQCAtMTcsMTEgKzE3LDE0IEBACiAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVk ZSAiYWNjZXNzL2dlbmFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2FtX2QuaCIKICNpbmNs dWRlICJjYXRhbG9nL3BnX3N1YnNjcmlwdGlvbl9yZWwuaCIKICNpbmNsdWRlICJleGVjdXRvci9l eGVjdXRvci5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgorI2luY2x1ZGUgIm9wdGlt aXplci9jb3N0LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHJlbGF0aW9uLmgiCiAj aW5jbHVkZSAicmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgiCiAjaW5jbHVkZSAidXRpbHMv aW52YWwuaCIKQEAgLTUwLDYgKzUzLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgTG9naWNhbFJlcFBhcnRN YXBFbnRyeQogCUxvZ2ljYWxSZXBSZWxNYXBFbnRyeSByZWxtYXBlbnRyeTsKIH0gTG9naWNhbFJl cFBhcnRNYXBFbnRyeTsKIAorc3RhdGljIE9pZAlGaW5kTG9naWNhbFJlcFVzYWJsZUluZGV4KFJl bGF0aW9uIGxvY2FscmVsLAorCQkJCQkJCQkJICBMb2dpY2FsUmVwUmVsYXRpb24gKnJlbW90ZXJl bCk7CisKIC8qCiAgKiBSZWxjYWNoZSBpbnZhbGlkYXRpb24gY2FsbGJhY2sgZm9yIG91ciByZWxh dGlvbiBtYXAgY2FjaGUuCiAgKi8KQEAgLTQzOSw2ICs0NDUsMTQgQEAgbG9naWNhbHJlcF9yZWxf b3BlbihMb2dpY2FsUmVwUmVsSWQgcmVtb3RlaWQsIExPQ0tNT0RFIGxvY2ttb2RlKQogCQkgKi8K IAkJbG9naWNhbHJlcF9yZWxfbWFya191cGRhdGFibGUoZW50cnkpOwogCisJCS8qCisJCSAqIEZp bmRpbmcgYSB1c2FibGUgaW5kZXggaXMgYW4gaW5mcmVxdWVudCB0YXNrLiBJdCBvY2N1cnMgd2hl biBhbgorCQkgKiBvcGVyYXRpb24gaXMgZmlyc3QgcGVyZm9ybWVkIG9uIHRoZSByZWxhdGlvbiwg b3IgYWZ0ZXIgaW52YWxpZGF0aW9uCisJCSAqIG9mIHRoZSByZWxhdGlvbiBjYWNoZSBlbnRyeSAo c3VjaCBhcyBBTkFMWVpFIG9yIENSRUFURS9EUk9QIGluZGV4CisJCSAqIG9uIHRoZSByZWxhdGlv bikuCisJCSAqLworCQllbnRyeS0+dXNhYmxlSW5kZXhPaWQgPSBGaW5kTG9naWNhbFJlcFVzYWJs ZUluZGV4KGVudHJ5LT5sb2NhbHJlbCwgcmVtb3RlcmVsKTsKKwogCQllbnRyeS0+bG9jYWxyZWx2 YWxpZCA9IHRydWU7CiAJfQogCkBAIC02OTcsNiArNzExLDE0IEBAIGxvZ2ljYWxyZXBfcGFydGl0 aW9uX29wZW4oTG9naWNhbFJlcFJlbE1hcEVudHJ5ICpyb290LAogCS8qIFNldCBpZiB0aGUgdGFi bGUncyByZXBsaWNhIGlkZW50aXR5IGlzIGVub3VnaCB0byBhcHBseSB1cGRhdGUvZGVsZXRlLiAq LwogCWxvZ2ljYWxyZXBfcmVsX21hcmtfdXBkYXRhYmxlKGVudHJ5KTsKIAorCS8qCisJICogRmlu ZGluZyBhIHVzYWJsZSBpbmRleCBpcyBhbiBpbmZyZXF1ZW50IHRhc2suIEl0IG9jY3VycyB3aGVu IGFuCisJICogb3BlcmF0aW9uIGlzIGZpcnN0IHBlcmZvcm1lZCBvbiB0aGUgcmVsYXRpb24sIG9y IGFmdGVyIGludmFsaWRhdGlvbiBvZgorCSAqIHRoZSByZWxhdGlvbiBjYWNoZSBlbnRyeSAoc3Vj aCBhcyBBTkFMWVpFIG9yIENSRUFURS9EUk9QIGluZGV4IG9uIHRoZQorCSAqIHJlbGF0aW9uKS4K KwkgKi8KKwllbnRyeS0+dXNhYmxlSW5kZXhPaWQgPSBGaW5kTG9naWNhbFJlcFVzYWJsZUluZGV4 KHBhcnRyZWwsIHJlbW90ZXJlbCk7CisKIAllbnRyeS0+bG9jYWxyZWx2YWxpZCA9IHRydWU7CiAK IAkvKiBzdGF0ZSBhbmQgc3RhdGVsc24gYXJlIGxlZnQgc2V0IHRvIDAuICovCkBAIC03MDQsMyAr NzI2LDE4MSBAQCBsb2dpY2FscmVwX3BhcnRpdGlvbl9vcGVuKExvZ2ljYWxSZXBSZWxNYXBFbnRy eSAqcm9vdCwKIAogCXJldHVybiBlbnRyeTsKIH0KKworLyoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0 aGUgZ2l2ZW4gaW5kZXggY29uc2lzdHMgb25seSBvZiBleHByZXNzaW9ucyBzdWNoIGFzOgorICog CUNSRUFURSBJTkRFWCBpZHggT04gdGFibGUoZm9vKGNvbCkpOworICoKKyAqIFJldHVybnMgZmFs c2UgZXZlbiBpZiB0aGVyZSBpcyBvbmUgY29sdW1uIHJlZmVyZW5jZToKKyAqIAkgQ1JFQVRFIElO REVYIGlkeCBPTiB0YWJsZShmb28oY29sKSwgY29sXzIpOworICovCitzdGF0aWMgYm9vbAorSXNJ bmRleE9ubHlPbkV4cHJlc3Npb24oSW5kZXhJbmZvICppbmRleEluZm8pCit7CisJZm9yIChpbnQg aSA9IDA7IGkgPCBpbmRleEluZm8tPmlpX051bUluZGV4S2V5QXR0cnM7IGkrKykKKwl7CisJCUF0 dHJOdW1iZXIJYXR0bnVtID0gaW5kZXhJbmZvLT5paV9JbmRleEF0dHJOdW1iZXJzW2ldOworCisJ CWlmIChBdHRyaWJ1dGVOdW1iZXJJc1ZhbGlkKGF0dG51bSkpCisJCQlyZXR1cm4gZmFsc2U7CisJ fQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBvaWQgb2YgYW4gaW5k ZXggdGhhdCBjYW4gYmUgdXNlZCB2aWEgdGhlIGFwcGx5IHdvcmtlci4gVGhlIGluZGV4CisgKiBz aG91bGQgYmUgYnRyZWUsIG5vbi1wYXJ0aWFsIGFuZCBoYXZlIGF0IGxlYXN0IG9uZSBjb2x1bW4g cmVmZXJlbmNlIChlLmcuLAorICogc2hvdWxkIG5vdCBjb25zaXN0IG9mIG9ubHkgZXhwcmVzc2lv bnMpLiBUaGUgbGltaXRhdGlvbnMgYXJpc2UgZnJvbQorICogUmVsYXRpb25GaW5kUmVwbFR1cGxl QnlJbmRleCgpLCB3aGljaCBpcyBkZXNpZ25lZCB0byBoYW5kbGUgUEsvUkkgYW5kIHRoZXNlCisg KiBsaW1pdGF0aW9ucyBhcmUgaW5oZXJlbnQgdG8gUEsvUkkuCisgKgorICogSWYgbm8gc3VpdGFi bGUgaW5kZXggaXMgZm91bmQsIHJldHVybnMgSW52YWxpZE9pZC4KKyAqCisgKiBYWFg6IFRoZXJl IGFyZSBubyBmdW5kYW1lbnRhbCBwcm9ibGVtcyBmb3Igc3VwcG9ydGluZyBub24tYnRyZWUgaW5k ZXhlcy4gV2UKKyAqIHNob3VsZCBtb3N0bHkgcmVsYXggdGhlIGxpbWl0YXRpb25zIGluIFJlbGF0 aW9uRmluZFJlcGxUdXBsZUJ5SW5kZXgoKS4gRm9yCisgKiBwYXJ0aWFsIGluZGV4ZXMsIHRoZSBy ZXF1aXJlZCBjaGFuZ2VzIGxpa2VseSB0byBiZSBsYXJnZXIuIElmIG5vbmUgb2YgdGhlCisgKiB0 dXBsZXMgc2F0aXNmeSB0aGUgZXhwcmVzc2lvbiBmb3IgdGhlIGluZGV4IHNjYW4sIHdlIHNob3Vs ZCBmYWxsLWJhY2sgdG8KKyAqIHNlcXVlbnRpYWwgZXhlY3V0aW9uLCB3aGljaCBtaWdodCBub3Qg YmUgYSBnb29kIGlkZWEgaW4gc29tZSBjYXNlcy4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBpcyBu b3QgYSBnZW5lcmljIGZ1bmN0aW9uLCBpdCBleHBlY3RzIFJFUExJQ0EgSURFTlRJVFkgRlVMTAor ICogZm9yIHRoZSByZW1vdGUgcmVsYXRpb24uCisgKi8KK3N0YXRpYyBPaWQKK0ZpbmRVc2FibGVJ bmRleEZvclJlcGxpY2FJZGVudGl0eUZ1bGwoUmVsYXRpb24gbG9jYWxyZWwsIExpc3QgKmluZGV4 bGlzdCkKK3sKKwlPaWQJCQl1c2FibGVJbmRleCA9IEludmFsaWRPaWQ7CisJTGlzdENlbGwgICAq bGM7CisKKwlBc3NlcnQoaW5kZXhsaXN0ICE9IE5JTCk7CisKKwlmb3JlYWNoKGxjLCBpbmRleGxp c3QpCisJeworCQlPaWQJCQlpZHhvaWQgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJUmVsYXRpb24JaW5k ZXhSZWxhdGlvbiA9IGluZGV4X29wZW4oaWR4b2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCQlJbmRl eEluZm8gICppbmRleEluZm8gPSBCdWlsZEluZGV4SW5mbyhpbmRleFJlbGF0aW9uKTsKKworCQli b29sCQlpc1VzYWJsZUluZGV4ID0KKwkJCUlzSW5kZXhVc2FibGVGb3JSZXBsaWNhSWRlbnRpdHlG dWxsKGluZGV4SW5mbyk7CisKKwkJaW5kZXhfY2xvc2UoaW5kZXhSZWxhdGlvbiwgQWNjZXNzU2hh cmVMb2NrKTsKKworCQlpZiAoaXNVc2FibGVJbmRleCkKKwkJeworCQkJLyogd2UgZm91bmQgb25l IGVsaWdpYmxlIGluZGV4LCBkb24ndCBuZWVkIHRvIGNvbnRpbnVlICovCisJCQl1c2FibGVJbmRl eCA9IGlkeG9pZDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHVzYWJsZUluZGV4Owor fQorCisvKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBpbmRleCBpcyB1c2FibGUgZm9yIHJlcGxp Y2EgaWRlbnRpdHkgZnVsbC4gRm9yIGRldGFpbHMsCisgKiBzZWUgRmluZFVzYWJsZUluZGV4Rm9y UmVwbGljYUlkZW50aXR5RnVsbC4KKyAqLworYm9vbAorSXNJbmRleFVzYWJsZUZvclJlcGxpY2FJ ZGVudGl0eUZ1bGwoSW5kZXhJbmZvICppbmRleEluZm8pCit7CisJYm9vbAkJaXNfYnRyZWUgPSAo aW5kZXhJbmZvLT5paV9BbSA9PSBCVFJFRV9BTV9PSUQpOworCWJvb2wJCWlzX3BhcnRpYWwgPSAo aW5kZXhJbmZvLT5paV9QcmVkaWNhdGUgIT0gTklMKTsKKwlib29sCQlpc19vbmx5X29uX2V4cHJl c3Npb24gPSBJc0luZGV4T25seU9uRXhwcmVzc2lvbihpbmRleEluZm8pOworCisJaWYgKGlzX2J0 cmVlICYmICFpc19wYXJ0aWFsICYmICFpc19vbmx5X29uX2V4cHJlc3Npb24pCisJeworCQlyZXR1 cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBHZXQgcmVwbGljYSBp ZGVudGl0eSBpbmRleCBvciBpZiBpdCBpcyBub3QgZGVmaW5lZCBhIHByaW1hcnkga2V5LgorICoK KyAqIElmIG5laXRoZXIgaXMgZGVmaW5lZCwgcmV0dXJucyBJbnZhbGlkT2lkCisgKi8KK09pZAor R2V0UmVsYXRpb25JZGVudGl0eU9yUEsoUmVsYXRpb24gcmVsKQoreworCU9pZAkJCWlkeG9pZDsK KworCWlkeG9pZCA9IFJlbGF0aW9uR2V0UmVwbGljYUluZGV4KHJlbCk7CisKKwlpZiAoIU9pZElz VmFsaWQoaWR4b2lkKSkKKwkJaWR4b2lkID0gUmVsYXRpb25HZXRQcmltYXJ5S2V5SW5kZXgocmVs KTsKKworCXJldHVybiBpZHhvaWQ7Cit9CisKKy8qCisgKiBHaXZlbiBhIHJlbGF0aW9uIGFuZCBP SUQgb2YgYW4gaW5kZXgsIHJldHVybnMgdHJ1ZSBpZiB0aGUgaW5kZXggaXMgcmVsYXRpb24ncwor ICogcmVwbGljYSBpZGVudGl0eSBpbmRleCBvciByZWxhdGlvbidzIHByaW1hcnkga2V5J3MgaW5k ZXguCisgKgorICogUmV0dXJucyBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wKK0lkeElzUmVs YXRpb25JZGVudGl0eU9yUEsoUmVsYXRpb24gcmVsLCBPaWQgaWR4b2lkKQoreworCUFzc2VydChP aWRJc1ZhbGlkKGlkeG9pZCkpOworCisJcmV0dXJuIEdldFJlbGF0aW9uSWRlbnRpdHlPclBLKHJl bCkgPT0gaWR4b2lkOworfQorCisvKgorICogUmV0dXJucyB0aGUgaW5kZXggb2lkIGlmIHdlIGNh biB1c2UgYW4gaW5kZXggZm9yIHN1YnNjcmliZXIuIE90aGVyd2lzZSwKKyAqIHJldHVybnMgSW52 YWxpZE9pZC4KKyAqLworc3RhdGljIE9pZAorRmluZExvZ2ljYWxSZXBVc2FibGVJbmRleChSZWxh dGlvbiBsb2NhbHJlbCwgTG9naWNhbFJlcFJlbGF0aW9uICpyZW1vdGVyZWwpCit7CisJT2lkCQkJ aWR4b2lkOworCUxpc3QJICAgKmluZGV4bGlzdDsKKworCS8qCisJICogV2UgbmV2ZXIgbmVlZCBp bmRleCBvaWQgZm9yIHBhcnRpdGlvbmVkIHRhYmxlcywgYWx3YXlzIHJlbHkgb24gbGVhZgorCSAq IHBhcnRpdGlvbidzIGluZGV4LgorCSAqLworCWlmIChsb2NhbHJlbC0+cmRfcmVsLT5yZWxraW5k ID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCXJldHVybiBJbnZhbGlkT2lkOworCisJ LyoKKwkgKiBTaW1wbGUgY2FzZSwgd2UgYWxyZWFkeSBoYXZlIGEgcHJpbWFyeSBrZXkgb3IgYSBy ZXBsaWNhIGlkZW50aXR5IGluZGV4LgorCSAqLworCWlkeG9pZCA9IEdldFJlbGF0aW9uSWRlbnRp dHlPclBLKGxvY2FscmVsKTsKKwlpZiAoT2lkSXNWYWxpZChpZHhvaWQpKQorCQlyZXR1cm4gaWR4 b2lkOworCisJLyoKKwkgKiBJZiBpbmRleCBzY2FucyBhcmUgZGlzYWJsZWQsIHVzZSBhIHNlcXVl bnRpYWwgc2Nhbi4KKwkgKgorCSAqIE5vdGUgdGhhdCB3ZSBkbyBub3QgdXNlIGluZGV4IHNjYW5z IGJlbG93IHdoZW4gZW5hYmxlX2luZGV4c2NhbiBpcworCSAqIGZhbHNlLiBBbGxvd2luZyBwcmlt YXJ5IGtleSBvciByZXBsaWNhIGlkZW50aXR5IGV2ZW4gd2hlbiBpbmRleCBzY2FuIGlzCisJICog ZGlzYWJsZWQgaXMgdGhlIGxlZ2FjeSBiZWhhdmlvdXIuIFNvIHdlIGhlc2l0YXRlIHRvIG1vdmUg dGhlIGJlbG93CisJICogZW5hYmxlX2luZGV4c2NhbiBjaGVjayB0byBiZSBkb25lIGVhcmxpZXIg aW4gdGhpcyBmdW5jdGlvbi4KKwkgKi8KKwlpZiAoIWVuYWJsZV9pbmRleHNjYW4pCisJCXJldHVy biBJbnZhbGlkT2lkOworCisJaW5kZXhsaXN0ID0gUmVsYXRpb25HZXRJbmRleExpc3QobG9jYWxy ZWwpOworCWlmIChyZW1vdGVyZWwtPnJlcGxpZGVudCA9PSBSRVBMSUNBX0lERU5USVRZX0ZVTEwg JiYgaW5kZXhsaXN0ICE9IE5JTCkKKwl7CisJCS8qCisJCSAqIElmIHdlIGhhZCBhIHByaW1hcnkg a2V5IG9yIHJlbGF0aW9uIGlkZW50aXR5IHdpdGggYSB1bmlxdWUgaW5kZXgsCisJCSAqIHdlIHdv dWxkIGhhdmUgYWxyZWFkeSBmb3VuZCBhbmQgcmV0dXJuZWQgdGhhdCBvaWQuIEF0IHRoaXMgcG9p bnQsCisJCSAqIHRoZSByZW1vdGUgcmVsYXRpb24gaGFzIHJlcGxpY2EgaWRlbnRpdHkgZnVsbCBh bmQgd2UgaGF2ZSBhdCBsZWFzdAorCQkgKiBvbmUgbG9jYWwgaW5kZXggZGVmaW5lZC4KKwkJICoK KwkJICogV2UgYXJlIGxvb2tpbmcgZm9yIG9uZSBtb3JlIG9wcG9ydHVuaXR5IGZvciB1c2luZyBh biBpbmRleC4gSWYKKwkJICogdGhlcmUgYXJlIGFueSBpbmRleGVzIGRlZmluZWQgb24gdGhlIGxv Y2FsIHJlbGF0aW9uLCB0cnkgdG8gcGljayBhCisJCSAqIHN1aXRhYmxlIGluZGV4LgorCQkgKgor CQkgKiBUaGUgaW5kZXggc2VsZWN0aW9uIHNhZmVseSBhc3N1bWVzIHRoYXQgYWxsIHRoZSBjb2x1 bW5zIGFyZSBnb2luZworCQkgKiB0byBiZSBhdmFpbGFibGUgZm9yIHRoZSBpbmRleCBzY2FuIGdp dmVuIHRoYXQgcmVtb3RlIHJlbGF0aW9uIGhhcworCQkgKiByZXBsaWNhIGlkZW50aXR5IGZ1bGwu CisJCSAqLworCQlyZXR1cm4gRmluZFVzYWJsZUluZGV4Rm9yUmVwbGljYUlkZW50aXR5RnVsbChs b2NhbHJlbCwgaW5kZXhsaXN0KTsKKwl9CisKKwlyZXR1cm4gSW52YWxpZE9pZDsKK30KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmluZGV4IGNmYjJhYjYyNDguLmU5NTY5 ZTU5ZDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2Vy LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwpAQCAtMzk3 LDYgKzM5Nyw4IEBAIHN0YXRpYyB2b2lkIGFwcGx5X2hhbmRsZV9jb21taXRfaW50ZXJuYWwoTG9n aWNhbFJlcENvbW1pdERhdGEgKmNvbW1pdF9kYXRhKTsKIHN0YXRpYyB2b2lkIGFwcGx5X2hhbmRs ZV9pbnNlcnRfaW50ZXJuYWwoQXBwbHlFeGVjdXRpb25EYXRhICplZGF0YSwKIAkJCQkJCQkJCQkg UmVzdWx0UmVsSW5mbyAqcmVsaW5mbywKIAkJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnJlbW90 ZXNsb3QpOworc3RhdGljIE9pZAlnZXRfdXNhYmxlX2luZGV4b2lkKEFwcGx5RXhlY3V0aW9uRGF0 YSAqZWRhdGEsCisJCQkJCQkJCVJlc3VsdFJlbEluZm8gKnJlbGluZm8pOwogc3RhdGljIHZvaWQg YXBwbHlfaGFuZGxlX3VwZGF0ZV9pbnRlcm5hbChBcHBseUV4ZWN1dGlvbkRhdGEgKmVkYXRhLAog CQkJCQkJCQkJCSBSZXN1bHRSZWxJbmZvICpyZWxpbmZvLAogCQkJCQkJCQkJCSBUdXBsZVRhYmxl U2xvdCAqcmVtb3Rlc2xvdCwKQEAgLTQwNiw2ICs0MDgsNyBAQCBzdGF0aWMgdm9pZCBhcHBseV9o YW5kbGVfZGVsZXRlX2ludGVybmFsKEFwcGx5RXhlY3V0aW9uRGF0YSAqZWRhdGEsCiAJCQkJCQkJ CQkJIFR1cGxlVGFibGVTbG90ICpyZW1vdGVzbG90KTsKIHN0YXRpYyBib29sIEZpbmRSZXBsVHVw bGVJbkxvY2FsUmVsKEVTdGF0ZSAqZXN0YXRlLCBSZWxhdGlvbiBsb2NhbHJlbCwKIAkJCQkJCQkJ CUxvZ2ljYWxSZXBSZWxhdGlvbiAqcmVtb3RlcmVsLAorCQkJCQkJCQkJT2lkIGxvY2FsaWR4b2lk LAogCQkJCQkJCQkJVHVwbGVUYWJsZVNsb3QgKnJlbW90ZXNsb3QsCiAJCQkJCQkJCQlUdXBsZVRh YmxlU2xvdCAqKmxvY2Fsc2xvdCk7CiBzdGF0aWMgdm9pZCBhcHBseV9oYW5kbGVfdHVwbGVfcm91 dGluZyhBcHBseUV4ZWN1dGlvbkRhdGEgKmVkYXRhLApAQCAtMjM0OCwyNCArMjM1MSw2IEBAIGFw cGx5X2hhbmRsZV90eXBlKFN0cmluZ0luZm8gcykKIAlsb2dpY2FscmVwX3JlYWRfdHlwKHMsICZ0 eXApOwogfQogCi0vKgotICogR2V0IHJlcGxpY2EgaWRlbnRpdHkgaW5kZXggb3IgaWYgaXQgaXMg bm90IGRlZmluZWQgYSBwcmltYXJ5IGtleS4KLSAqCi0gKiBJZiBuZWl0aGVyIGlzIGRlZmluZWQs IHJldHVybnMgSW52YWxpZE9pZAotICovCi1zdGF0aWMgT2lkCi1HZXRSZWxhdGlvbklkZW50aXR5 T3JQSyhSZWxhdGlvbiByZWwpCi17Ci0JT2lkCQkJaWR4b2lkOwotCi0JaWR4b2lkID0gUmVsYXRp b25HZXRSZXBsaWNhSW5kZXgocmVsKTsKLQotCWlmICghT2lkSXNWYWxpZChpZHhvaWQpKQotCQlp ZHhvaWQgPSBSZWxhdGlvbkdldFByaW1hcnlLZXlJbmRleChyZWwpOwotCi0JcmV0dXJuIGlkeG9p ZDsKLX0KLQogLyoKICAqIENoZWNrIHRoYXQgd2UgKHRoZSBzdWJzY3JpcHRpb24gb3duZXIpIGhh dmUgc3VmZmljaWVudCBwcml2aWxlZ2VzIG9uIHRoZQogICogdGFyZ2V0IHJlbGF0aW9uIHRvIHBl cmZvcm0gdGhlIGdpdmVuIG9wZXJhdGlvbi4KQEAgLTI2NTUsMTIgKzI2NDAsMTQgQEAgYXBwbHlf aGFuZGxlX3VwZGF0ZV9pbnRlcm5hbChBcHBseUV4ZWN1dGlvbkRhdGEgKmVkYXRhLAogCVR1cGxl VGFibGVTbG90ICpsb2NhbHNsb3Q7CiAJYm9vbAkJZm91bmQ7CiAJTWVtb3J5Q29udGV4dCBvbGRj dHg7CisJT2lkCQkJdXNhYmxlSW5kZXhPaWQgPSBnZXRfdXNhYmxlX2luZGV4b2lkKGVkYXRhLCBy ZWxpbmZvKTsKIAogCUV2YWxQbGFuUXVhbEluaXQoJmVwcXN0YXRlLCBlc3RhdGUsIE5VTEwsIE5J TCwgLTEpOwogCUV4ZWNPcGVuSW5kaWNlcyhyZWxpbmZvLCBmYWxzZSk7CiAKIAlmb3VuZCA9IEZp bmRSZXBsVHVwbGVJbkxvY2FsUmVsKGVzdGF0ZSwgbG9jYWxyZWwsCiAJCQkJCQkJCQkmcmVsbWFw ZW50cnktPnJlbW90ZXJlbCwKKwkJCQkJCQkJCXVzYWJsZUluZGV4T2lkLAogCQkJCQkJCQkJcmVt b3Rlc2xvdCwgJmxvY2Fsc2xvdCk7CiAJRXhlY0NsZWFyVHVwbGUocmVtb3Rlc2xvdCk7CiAKQEAg LTI3OTMsMTEgKzI3ODAsMTIgQEAgYXBwbHlfaGFuZGxlX2RlbGV0ZV9pbnRlcm5hbChBcHBseUV4 ZWN1dGlvbkRhdGEgKmVkYXRhLAogCUVQUVN0YXRlCWVwcXN0YXRlOwogCVR1cGxlVGFibGVTbG90 ICpsb2NhbHNsb3Q7CiAJYm9vbAkJZm91bmQ7CisJT2lkCQkJdXNhYmxlSW5kZXhPaWQgPSBnZXRf dXNhYmxlX2luZGV4b2lkKGVkYXRhLCByZWxpbmZvKTsKIAogCUV2YWxQbGFuUXVhbEluaXQoJmVw cXN0YXRlLCBlc3RhdGUsIE5VTEwsIE5JTCwgLTEpOwogCUV4ZWNPcGVuSW5kaWNlcyhyZWxpbmZv LCBmYWxzZSk7CiAKLQlmb3VuZCA9IEZpbmRSZXBsVHVwbGVJbkxvY2FsUmVsKGVzdGF0ZSwgbG9j YWxyZWwsIHJlbW90ZXJlbCwKKwlmb3VuZCA9IEZpbmRSZXBsVHVwbGVJbkxvY2FsUmVsKGVzdGF0 ZSwgbG9jYWxyZWwsIHJlbW90ZXJlbCwgdXNhYmxlSW5kZXhPaWQsCiAJCQkJCQkJCQlyZW1vdGVz bG90LCAmbG9jYWxzbG90KTsKIAogCS8qIElmIGZvdW5kIGRlbGV0ZSBpdC4gKi8KQEAgLTI4Mjgs MjAgKzI4MTYsNTAgQEAgYXBwbHlfaGFuZGxlX2RlbGV0ZV9pbnRlcm5hbChBcHBseUV4ZWN1dGlv bkRhdGEgKmVkYXRhLAogCUV2YWxQbGFuUXVhbEVuZCgmZXBxc3RhdGUpOwogfQogCisvKgorICog RGVjaWRlIHdoZXRoZXIgd2UgY2FuIHBpY2sgYW4gaW5kZXggZm9yIHRoZSByZWxpbmZvIChpLmUg dGhlIHJlbGF0aW9uKSB3ZSdyZQorICogYWN0dWFsbHkgZGVsZXRpbmcvdXBkYXRpbmcgZnJvbS4g SWYgaXQgaXMgYSBjaGlsZCBwYXJ0aXRpb24gb2YKKyAqIGVkYXRhLT50YXJnZXRSZWxJbmZvLCBm aW5kIHRoZSBpbmRleCBvbiB0aGUgcGFydGl0aW9uLgorICoKKyAqIE5vdGUgdGhhdCBpZiB0aGUg Y29ycmVzcG9uZGluZyByZWxtYXBlbnRyeSBoYXMgaW52YWxpZCB1c2FibGVJbmRleE9pZCwgdGhl CisgKiBmdW5jdGlvbiByZXR1cm5zIEludmFsaWRPaWQuCisgKi8KK3N0YXRpYyBPaWQKK2dldF91 c2FibGVfaW5kZXhvaWQoQXBwbHlFeGVjdXRpb25EYXRhICplZGF0YSwgUmVzdWx0UmVsSW5mbyAq cmVsaW5mbykKK3sKKwlSZXN1bHRSZWxJbmZvICp0YXJnZXRSZXN1bHRSZWxJbmZvID0gZWRhdGEt PnRhcmdldFJlbEluZm87CisJTG9naWNhbFJlcFJlbE1hcEVudHJ5ICpyZWxtYXBlbnRyeSA9IGVk YXRhLT50YXJnZXRSZWw7CisKKwljaGFyCQl0YXJnZXRyZWxraW5kID0gdGFyZ2V0UmVzdWx0UmVs SW5mby0+cmlfUmVsYXRpb25EZXNjLT5yZF9yZWwtPnJlbGtpbmQ7CisKKwlpZiAodGFyZ2V0cmVs a2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCXsKKwkJLyogVGFyZ2V0IGlzIGEg cGFydGl0aW9uZWQgdGFibGUsIHNvIGZpbmQgcmVsbWFwZW50cnkgb2YgdGhlIHBhcnRpdGlvbiAq LworCQlUdXBsZUNvbnZlcnNpb25NYXAgKm1hcCA9IEV4ZWNHZXRSb290VG9DaGlsZE1hcChyZWxp bmZvLCBlZGF0YS0+ZXN0YXRlKTsKKwkJQXR0ck1hcCAgICAqYXR0cm1hcCA9IG1hcCA/IG1hcC0+ YXR0ck1hcCA6IE5VTEw7CisKKwkJcmVsbWFwZW50cnkgPQorCQkJbG9naWNhbHJlcF9wYXJ0aXRp b25fb3BlbihyZWxtYXBlbnRyeSwgcmVsaW5mby0+cmlfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkJ ICBhdHRybWFwKTsKKwl9CisKKwlyZXR1cm4gcmVsbWFwZW50cnktPnVzYWJsZUluZGV4T2lkOwor fQorCiAvKgogICogVHJ5IHRvIGZpbmQgYSB0dXBsZSByZWNlaXZlZCBmcm9tIHRoZSBwdWJsaWNh dGlvbiBzaWRlIChpbiAncmVtb3Rlc2xvdCcpIGluCiAgKiB0aGUgY29ycmVzcG9uZGluZyBsb2Nh bCByZWxhdGlvbiB1c2luZyBlaXRoZXIgcmVwbGljYSBpZGVudGl0eSBpbmRleCwKLSAqIHByaW1h cnkga2V5IG9yIGlmIG5lZWRlZCwgc2VxdWVudGlhbCBzY2FuLgorICogcHJpbWFyeSBrZXksIGlu ZGV4IG9yIGlmIG5lZWRlZCwgc2VxdWVudGlhbCBzY2FuLgogICoKICAqIExvY2FsIHR1cGxlLCBp ZiBmb3VuZCwgaXMgcmV0dXJuZWQgaW4gJypsb2NhbHNsb3QnLgogICovCiBzdGF0aWMgYm9vbAog RmluZFJlcGxUdXBsZUluTG9jYWxSZWwoRVN0YXRlICplc3RhdGUsIFJlbGF0aW9uIGxvY2FscmVs LAogCQkJCQkJTG9naWNhbFJlcFJlbGF0aW9uICpyZW1vdGVyZWwsCisJCQkJCQlPaWQgbG9jYWxp ZHhvaWQsCiAJCQkJCQlUdXBsZVRhYmxlU2xvdCAqcmVtb3Rlc2xvdCwKIAkJCQkJCVR1cGxlVGFi bGVTbG90ICoqbG9jYWxzbG90KQogewotCU9pZAkJCWlkeG9pZDsKIAlib29sCQlmb3VuZDsKIAog CS8qCkBAIC0yODUyLDEyICsyODcwLDExIEBAIEZpbmRSZXBsVHVwbGVJbkxvY2FsUmVsKEVTdGF0 ZSAqZXN0YXRlLCBSZWxhdGlvbiBsb2NhbHJlbCwKIAogCSpsb2NhbHNsb3QgPSB0YWJsZV9zbG90 X2NyZWF0ZShsb2NhbHJlbCwgJmVzdGF0ZS0+ZXNfdHVwbGVUYWJsZSk7CiAKLQlpZHhvaWQgPSBH ZXRSZWxhdGlvbklkZW50aXR5T3JQSyhsb2NhbHJlbCk7Ci0JQXNzZXJ0KE9pZElzVmFsaWQoaWR4 b2lkKSB8fAorCUFzc2VydChPaWRJc1ZhbGlkKGxvY2FsaWR4b2lkKSB8fAogCQkgICAocmVtb3Rl cmVsLT5yZXBsaWRlbnQgPT0gUkVQTElDQV9JREVOVElUWV9GVUxMKSk7CiAKLQlpZiAoT2lkSXNW YWxpZChpZHhvaWQpKQotCQlmb3VuZCA9IFJlbGF0aW9uRmluZFJlcGxUdXBsZUJ5SW5kZXgobG9j YWxyZWwsIGlkeG9pZCwKKwlpZiAoT2lkSXNWYWxpZChsb2NhbGlkeG9pZCkpCisJCWZvdW5kID0g UmVsYXRpb25GaW5kUmVwbFR1cGxlQnlJbmRleChsb2NhbHJlbCwgbG9jYWxpZHhvaWQsCiAJCQkJ CQkJCQkJCSBMb2NrVHVwbGVFeGNsdXNpdmUsCiAJCQkJCQkJCQkJCSByZW1vdGVzbG90LCAqbG9j YWxzbG90KTsKIAllbHNlCkBAIC0yOTc4LDYgKzI5OTUsNyBAQCBhcHBseV9oYW5kbGVfdHVwbGVf cm91dGluZyhBcHBseUV4ZWN1dGlvbkRhdGEgKmVkYXRhLAogCQkJCS8qIEdldCB0aGUgbWF0Y2hp bmcgbG9jYWwgdHVwbGUgZnJvbSB0aGUgcGFydGl0aW9uLiAqLwogCQkJCWZvdW5kID0gRmluZFJl cGxUdXBsZUluTG9jYWxSZWwoZXN0YXRlLCBwYXJ0cmVsLAogCQkJCQkJCQkJCQkJJnBhcnRfZW50 cnktPnJlbW90ZXJlbCwKKwkJCQkJCQkJCQkJCXBhcnRfZW50cnktPnVzYWJsZUluZGV4T2lkLAog CQkJCQkJCQkJCQkJcmVtb3Rlc2xvdF9wYXJ0LCAmbG9jYWxzbG90KTsKIAkJCQlpZiAoIWZvdW5k KQogCQkJCXsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxyZWxh dGlvbi5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHJlbGF0aW9uLmgKaW5kZXgg OWMzNDA1NGJiNy4uNTVjYmM0NTgwYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vbG9naWNhbHJlbGF0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNh bHJlbGF0aW9uLmgKQEAgLTEzLDYgKzEzLDcgQEAKICNkZWZpbmUgTE9HSUNBTFJFTEFUSU9OX0gK IAogI2luY2x1ZGUgImFjY2Vzcy9hdHRtYXAuaCIKKyNpbmNsdWRlICJjYXRhbG9nL2luZGV4Lmgi CiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgiCiAKIHR5cGVkZWYgc3RydWN0 IExvZ2ljYWxSZXBSZWxNYXBFbnRyeQpAQCAtMzEsNiArMzIsNyBAQCB0eXBlZGVmIHN0cnVjdCBM b2dpY2FsUmVwUmVsTWFwRW50cnkKIAlSZWxhdGlvbglsb2NhbHJlbDsJCS8qIHJlbGNhY2hlIGVu dHJ5IChOVUxMIHdoZW4gY2xvc2VkKSAqLwogCUF0dHJNYXAgICAgKmF0dHJtYXA7CQkvKiBtYXAg b2YgbG9jYWwgYXR0cmlidXRlcyB0byByZW1vdGUgb25lcyAqLwogCWJvb2wJCXVwZGF0YWJsZTsJ CS8qIENhbiBhcHBseSB1cGRhdGVzL2RlbGV0ZXM/ICovCisJT2lkCQkJdXNhYmxlSW5kZXhPaWQ7 IC8qIHdoaWNoIGluZGV4IHRvIHVzZSwgb3IgSW52YWxpZE9pZCBpZiBub25lICovCiAKIAkvKiBT eW5jIHN0YXRlLiAqLwogCWNoYXIJCXN0YXRlOwpAQCAtNDYsNSArNDgsOCBAQCBleHRlcm4gTG9n aWNhbFJlcFJlbE1hcEVudHJ5ICpsb2dpY2FscmVwX3BhcnRpdGlvbl9vcGVuKExvZ2ljYWxSZXBS ZWxNYXBFbnRyeSAqcgogCQkJCQkJCQkJCQkJCQlSZWxhdGlvbiBwYXJ0cmVsLCBBdHRyTWFwICpt YXApOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF9yZWxfY2xvc2UoTG9naWNhbFJlcFJlbE1hcEVu dHJ5ICpyZWwsCiAJCQkJCQkJCSBMT0NLTU9ERSBsb2NrbW9kZSk7CitleHRlcm4gYm9vbCBJc0lu ZGV4VXNhYmxlRm9yUmVwbGljYUlkZW50aXR5RnVsbChJbmRleEluZm8gKmluZGV4SW5mbyk7Citl eHRlcm4gT2lkIEdldFJlbGF0aW9uSWRlbnRpdHlPclBLKFJlbGF0aW9uIHJlbCk7CitleHRlcm4g Ym9vbCBJZHhJc1JlbGF0aW9uSWRlbnRpdHlPclBLKFJlbGF0aW9uIHJlbCwgT2lkIGlkeG9pZCk7 CiAKICNlbmRpZgkJCQkJCQkvKiBMT0dJQ0FMUkVMQVRJT05fSCAqLwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21l c29uLmJ1aWxkCmluZGV4IDNkYjBmZGZkOTYuLmY4NWJmOTJiNmYgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3N1YnNjcmlwdGlvbi9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24v bWVzb24uYnVpbGQKQEAgLTM4LDYgKzM4LDcgQEAgdGVzdHMgKz0gewogICAgICAgJ3QvMDI5X29u X2Vycm9yLnBsJywKICAgICAgICd0LzAzMF9vcmlnaW4ucGwnLAogICAgICAgJ3QvMDMxX2NvbHVt bl9saXN0LnBsJywKKyAgICAgICd0LzAzMl9zdWJzY3JpYmVfdXNlX2luZGV4LnBsJywKICAgICAg ICd0LzEwMF9idWdzLnBsJywKICAgICBdLAogICB9LApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vi c2NyaXB0aW9uL3QvMDMyX3N1YnNjcmliZV91c2VfaW5kZXgucGwgYi9zcmMvdGVzdC9zdWJzY3Jp cHRpb24vdC8wMzJfc3Vic2NyaWJlX3VzZV9pbmRleC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi5iMGViOTU5MWQwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv c3Vic2NyaXB0aW9uL3QvMDMyX3N1YnNjcmliZV91c2VfaW5kZXgucGwKQEAgLTAsMCArMSw5MzMg QEAKKyMgQ29weXJpZ2h0IChjKSAyMDIyLTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisKKyMgVGVzdCBsb2dpY2FsIHJlcGxpY2F0aW9uIGJlaGF2aW9yIHdpdGggc3Vi c2NyaWJlciB1c2VzIGF2YWlsYWJsZSBpbmRleAordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsK K3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0 aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMgY3JlYXRlIHB1Ymxpc2hlciBub2RlCitteSAkbm9k ZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicp OworJG5vZGVfcHVibGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsK KyRub2RlX3B1Ymxpc2hlci0+c3RhcnQ7CisKKyMgY3JlYXRlIHN1YnNjcmliZXIgbm9kZQorbXkg JG5vZGVfc3Vic2NyaWJlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3Vic2Ny aWJlcicpOworJG5vZGVfc3Vic2NyaWJlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dp Y2FsJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywK Kwkid2FsX3JldHJpZXZlX3JldHJ5X2ludGVydmFsID0gMW1zIik7Ciskbm9kZV9zdWJzY3JpYmVy LT5zdGFydDsKKworbXkgJHB1Ymxpc2hlcl9jb25uc3RyID0gJG5vZGVfcHVibGlzaGVyLT5jb25u c3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworbXkgJGFwcG5hbWUgICAgICAgICAgID0gJ3RhcF9z dWInOworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisjIFRlc3RjYXNlIHN0YXJ0OiBTVUJTQ1JJUFRJT04gVVNF UyBJTkRFWAorIworIyBCYXNpYyB0ZXN0IHdoZXJlIHRoZSBzdWJzY3JpYmVyIHVzZXMgaW5kZXgK KyMgYW5kIG9ubHkgdXBkYXRlcyAxIHJvdyBhbmQgZGVsZXRlcworIyAxIG90aGVyIHJvdworIwor CisjIGNyZWF0ZSB0YWJsZXMgcHViIGFuZCBzdWIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSB0ZXN0X3JlcGxpY2FfaWRfZnVsbCAoeCBpbnQp Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBUQUJM RSB0ZXN0X3JlcGxpY2FfaWRfZnVsbCBSRVBMSUNBIElERU5USVRZIEZVTEw7Iik7Ciskbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHRlc3RfcmVw bGljYV9pZF9mdWxsICh4IGludCkiKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJDUkVBVEUgSU5ERVggdGVzdF9yZXBsaWNhX2lkX2Z1bGxfaWR4IE9OIHRlc3Rf cmVwbGljYV9pZF9mdWxsKHgpIik7CisKKyMgaW5zZXJ0IHNvbWUgaW5pdGlhbCBkYXRhCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0ZXN0X3Jl cGxpY2FfaWRfZnVsbCBTRUxFQ1QgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygwLDIxKWk7Iik7CisK KyMgY3JlYXRlIHB1Yi9zdWIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIkNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViX3JlcF9mdWxsIEZPUiBUQUJMRSB0ZXN0X3Jl cGxpY2FfaWRfZnVsbCIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9yZXBfZnVsbCBDT05ORUNUSU9OICckcHVi bGlzaGVyX2Nvbm5zdHIgYXBwbGljYXRpb25fbmFtZT0kYXBwbmFtZScgUFVCTElDQVRJT04gdGFw X3B1Yl9yZXBfZnVsbCIKKyk7CisKKyMgd2FpdCBmb3IgaW5pdGlhbCB0YWJsZSBzeW5jaHJvbml6 YXRpb24gdG8gZmluaXNoCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9zdWJzY3JpcHRpb25f c3luYzsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiVVBEQVRF IHRlc3RfcmVwbGljYV9pZF9mdWxsIFNFVCB4ID0geCArIDEgV0hFUkUgeCA9IDE1OyIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworIyB3YWl0IHVudGls IHRoZSBpbmRleCBpcyB1c2VkIG9uIHRoZSBzdWJzY3JpYmVyCiskbm9kZV9zdWJzY3JpYmVyLT5w b2xsX3F1ZXJ5X3VudGlsKAorCSdwb3N0Z3JlcycsIHF7c2VsZWN0IChpZHhfc2NhbiA9IDEpIGZy b20gcGdfc3RhdF9hbGxfaW5kZXhlcyB3aGVyZSBpbmRleHJlbG5hbWUgPSAndGVzdF9yZXBsaWNh X2lkX2Z1bGxfaWR4Jzt9CispIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGNo ZWNrIHN1YnNjcmliZXIgdGFwX3N1Yl9yZXBfZnVsbCB1cGRhdGVzIG9uZSByb3cgdmlhIGluZGV4 IjsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiREVMRVRFIEZS T00gdGVzdF9yZXBsaWNhX2lkX2Z1bGwgV0hFUkUgeCA9IDIwOyIpOworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworIyB3YWl0IHVudGlsIHRoZSBpbmRleCBp cyB1c2VkIG9uIHRoZSBzdWJzY3JpYmVyCiskbm9kZV9zdWJzY3JpYmVyLT5wb2xsX3F1ZXJ5X3Vu dGlsKAorCSdwb3N0Z3JlcycsIHF7c2VsZWN0IChpZHhfc2NhbiA9IDIpIGZyb20gcGdfc3RhdF9h bGxfaW5kZXhlcyB3aGVyZSBpbmRleHJlbG5hbWUgPSAndGVzdF9yZXBsaWNhX2lkX2Z1bGxfaWR4 Jzt9CispIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGNoZWNrIHN1YnNjcmli ZXIgdGFwX3N1Yl9yZXBfZnVsbCBkZWxldGVzIG9uZSByb3cgdmlhIGluZGV4IjsKKworIyBtYWtl IHN1cmUgdGhhdCB0aGUgc3Vic2NyaWJlciBoYXMgdGhlIGNvcnJlY3QgZGF0YQorbXkgJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgY291 bnQoRElTVElOQ1QgeCkgRlJPTSB0ZXN0X3JlcGxpY2FfaWRfZnVsbCIpOworaXMoJHJlc3VsdCwg cXEoMjApLCAnZW5zdXJlIHN1YnNjcmliZXIgaGFzIHRoZSBjb3JyZWN0IGRhdGEgYXQgdGhlIGVu ZCBvZiB0aGUgdGVzdCcpOworCisjIGNsZWFudXAgcHViCiskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiRFJPUCBQVUJMSUNBVElPTiB0YXBfcHViX3JlcF9mdWxsIik7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0ZXN0X3Jl cGxpY2FfaWRfZnVsbCIpOworIyBjbGVhbnVwIHN1YgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJEUk9QIFNVQlNDUklQVElPTiB0YXBfc3ViX3JlcF9mdWxsIik7Cisk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdGVzdF9y ZXBsaWNhX2lkX2Z1bGwiKTsKKworIyBUZXN0Y2FzZSBlbmQ6IFNVQlNDUklQVElPTiBVU0VTIElO REVYCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVGVzdGNhc2Ugc3RhcnQ6IFNV QlNDUklQVElPTiBDUkVBVEUvRFJPUCBJTkRFWCBXT1JLUyBXSVRIT1VUIElTU1VFUworIworIyBU aGlzIHRlc3QgZW5zdXJlcyB0aGF0IGFmdGVyIENSRUFURSBJTkRFWCwgdGhlIHN1YnNjcmliZXIg Y2FuIGF1dG9tYXRpY2FsbHkKKyMgdXNlIG9uZSBvZiB0aGUgaW5kZXhlcyAocHJvdmlkZWQgdGhh dCBpdCBmdWxmaWxzIHRoZSByZXF1aXJlbWVudHMpLgorIyBTaW1pbGFybHksIGFmdGVyIERST1Ag aW5kZXgsIHRoZSBzdWJzY3JpYmVyIGNhbiBhdXRvbWF0aWNhbGx5IHN3aXRjaCB0bworIyBzZXF1 ZW50aWFsIHNjYW4KKworIyBjcmVhdGUgdGFibGVzIHB1YiBhbmQgc3ViCiskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdGVzdF9yZXBsaWNhX2lk X2Z1bGwgKHggaW50IE5PVCBOVUxMLCB5IGludCkiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFRBQkxFIHRlc3RfcmVwbGljYV9pZF9mdWxsIFJFUExJ Q0EgSURFTlRJVFkgRlVMTDsiKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJDUkVBVEUgVEFCTEUgdGVzdF9yZXBsaWNhX2lkX2Z1bGwgKHggaW50IE5PVCBOVUxM LCB5IGludCkiKTsKKworIyBpbnNlcnQgc29tZSBpbml0aWFsIGRhdGEKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHRlc3RfcmVwbGljYV9pZF9m dWxsIFNFTEVDVCBpLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDAsMjEwMClpOyIpOworCisjIGNy ZWF0ZSBwdWIvc3ViCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJD UkVBVEUgUFVCTElDQVRJT04gdGFwX3B1Yl9yZXBfZnVsbCBGT1IgVEFCTEUgdGVzdF9yZXBsaWNh X2lkX2Z1bGwiKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJD UkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9zdWJfcmVwX2Z1bGwgQ09OTkVDVElPTiAnJHB1Ymxpc2hl cl9jb25uc3RyIGFwcGxpY2F0aW9uX25hbWU9JGFwcG5hbWUnIFBVQkxJQ0FUSU9OIHRhcF9wdWJf cmVwX2Z1bGwiCispOworCisjIHdhaXQgZm9yIGluaXRpYWwgdGFibGUgc3luY2hyb25pemF0aW9u IHRvIGZpbmlzaAorJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmM7 CisKKyMgbm93LCBjcmVhdGUgaW5kZXggYW5kIHNlZSB0aGF0IHRoZSBpbmRleCBpcyB1c2VkCisk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIElOREVYIHRl c3RfcmVwbGljYV9pZF9mdWxsX2lkeCBPTiB0ZXN0X3JlcGxpY2FfaWRfZnVsbCh4KSIpOworCisj IHdhaXQgdW50aWwgdGhlIGluZGV4IGlzIGNyZWF0ZWQKKyRub2RlX3N1YnNjcmliZXItPnBvbGxf cXVlcnlfdW50aWwoCisJJ3Bvc3RncmVzJywgcXtzZWxlY3QgY291bnQoKik9MSBmcm9tIHBnX3N0 YXRfYWxsX2luZGV4ZXMgd2hlcmUgaW5kZXhyZWxuYW1lID0gJ3Rlc3RfcmVwbGljYV9pZF9mdWxs X2lkeCc7fQorKSBvciBkaWUgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBjcmVhdGluZyBp bmRleCB0ZXN0X3JlcGxpY2FfaWRfZnVsbF9pZHgiOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJVUERBVEUgdGVzdF9yZXBsaWNhX2lkX2Z1bGwgU0VUIHggPSB4 ICsgMSBXSEVSRSB4ID0gMTU7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo JGFwcG5hbWUpOworCisKKyMgd2FpdCB1bnRpbCB0aGUgaW5kZXggaXMgdXNlZCBvbiB0aGUgc3Vi c2NyaWJlcgorJG5vZGVfc3Vic2NyaWJlci0+cG9sbF9xdWVyeV91bnRpbCgKKwkncG9zdGdyZXMn LCBxe3NlbGVjdCAoaWR4X3NjYW4gPSAxKSBmcm9tIHBnX3N0YXRfYWxsX2luZGV4ZXMgd2hlcmUg aW5kZXhyZWxuYW1lID0gJ3Rlc3RfcmVwbGljYV9pZF9mdWxsX2lkeCc7fQorKSBvciBkaWUgIlRp bWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBjaGVjayBzdWJzY3JpYmVyIHRhcF9zdWJfcmVwX2Z1 bGwgdXBkYXRlcyBvbmUgcm93IHZpYSBpbmRleCI7CisKKworIyBub3csIGNyZWF0ZSBpbmRleCBv biBjb2x1bW4geSBhcyB3ZWxsCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkiQ1JFQVRFIElOREVYIHRlc3RfcmVwbGljYV9pZF9mdWxsX2lkeSBPTiB0ZXN0X3JlcGxp Y2FfaWRfZnVsbCh5KSIpOworCisjIHdhaXQgdW50aWwgdGhlIGluZGV4IGlzIGNyZWF0ZWQKKyRu b2RlX3N1YnNjcmliZXItPnBvbGxfcXVlcnlfdW50aWwoCisJJ3Bvc3RncmVzJywgcXtzZWxlY3Qg Y291bnQoKik9MSBmcm9tIHBnX3N0YXRfYWxsX2luZGV4ZXMgd2hlcmUgaW5kZXhyZWxuYW1lID0g J3Rlc3RfcmVwbGljYV9pZF9mdWxsX2lkeSc7fQorKSBvciBkaWUgIlRpbWVkIG91dCB3aGlsZSB3 YWl0aW5nIGZvciBjcmVhdGluZyBpbmRleCB0ZXN0X3JlcGxpY2FfaWRfZnVsbF9pZHkiOworCisj IG5vdywgdGhlIHVwZGF0ZSBjb3VsZCBlaXRoZXIgdXNlIHRoZSB0ZXN0X3JlcGxpY2FfaWRfZnVs bF9pZHkgb3IgdGVzdF9yZXBsaWNhX2lkX2Z1bGxfaWR5IGluZGV4CisjIGl0IGlzIG5vdCBwb3Nz aWJsZSBmb3IgdXNlciB0byBjb250cm9sIHdoaWNoIGluZGV4IHRvIHVzZQorJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiVVBEQVRFIHRlc3RfcmVwbGljYV9pZF9mdWxs IFNFVCB5ID0geSArIDEgV0hFUkUgeSA9IDMwMDA7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisjIHdhaXQgdW50aWwgdGhlIGluZGV4IGlzIHVzZWQg b24gdGhlIHN1YnNjcmliZXIKKyRub2RlX3N1YnNjcmliZXItPnBvbGxfcXVlcnlfdW50aWwoCisJ J3Bvc3RncmVzJywgcXtzZWxlY3QgY291bnQoaWR4X3NjYW4pID0gMiBmcm9tIHBnX3N0YXRfYWxs X2luZGV4ZXMgd2hlcmUgaW5kZXhyZWxuYW1lIElOICgndGVzdF9yZXBsaWNhX2lkX2Z1bGxfaWR5 JywgJ3Rlc3RfcmVwbGljYV9pZF9mdWxsX2lkeCcpO30KKykgb3IgZGllICJUaW1lZCBvdXQgd2hp bGUgd2FpdGluZyBmb3IgY2hlY2sgc3Vic2NyaWJlciB0YXBfc3ViX3JlcF9mdWxsIGRlbGV0ZXMg b25lIHJvdyB2aWEgaW5kZXgiOworCisjIGxldCdzIGFsc28gdGVzdCBkcm9wcGluZyB0ZXN0X3Jl cGxpY2FfaWRfZnVsbF9pZHkgYW5kCisjIGhlbmNlIHVzZSB0ZXN0X3JlcGxpY2FfaWRfZnVsbF9p ZHgKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJEUk9QIElOREVY IHRlc3RfcmVwbGljYV9pZF9mdWxsX2lkeTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJIlVQREFURSB0ZXN0X3JlcGxpY2FfaWRfZnVsbCBTRVQgeCA9IHggKyAx IFdIRVJFIHggPSAyNTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBw bmFtZSk7CisKKyMgbWFrZSBzdXJlIHRoYXQgdGhlIHN1YnNjcmliZXIgaGFzIHRoZSBjb3JyZWN0 IGRhdGEKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF9yZXBsaWNhX2lkX2Z1bGwgV0hFUkUgeCA9IDE1 IE9SIHggPSAyNSBPUiB5ID0gMzAwMDsiKTsKK2lzKCRyZXN1bHQsIHFxKDApLCAnZW5zdXJlIHN1 YnNjcmliZXIgaGFzIHRoZSBjb3JyZWN0IGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgdGVzdCcpOwor CisjIGNsZWFudXAgcHViCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi RFJPUCBQVUJMSUNBVElPTiB0YXBfcHViX3JlcF9mdWxsIik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0ZXN0X3JlcGxpY2FfaWRfZnVsbCIpOwor IyBjbGVhbnVwIHN1YgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE Uk9QIFNVQlNDUklQVElPTiB0YXBfc3ViX3JlcF9mdWxsIik7Ciskbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdGVzdF9yZXBsaWNhX2lkX2Z1bGwiKTsK KworIyBUZXN0Y2FzZSBlbmQ6IFNVQlNDUklQVElPTiBDUkVBVEUvRFJPUCBJTkRFWCBXT1JLUyBX SVRIT1VUIElTU1VFUworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRlc3RjYXNl IHN0YXJ0OiBTVUJTQ1JJUFRJT04gVVNFUyBJTkRFWCBVUERBVEVzIE1VTFRJUExFIFJPV1MKKyMK KyMgQmFzaWMgdGVzdCB3aGVyZSB0aGUgc3Vic2NyaWJlciB1c2VzIGluZGV4CisjIGFuZCB1cGRh dGVzIDUwIHJvd3MKKyMKKworIyBjcmVhdGUgdGFibGVzIHB1YiBhbmQgc3ViCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdGVzdF9yZXBsaWNh X2lkX2Z1bGwgKHggaW50KSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkiQUxURVIgVEFCTEUgdGVzdF9yZXBsaWNhX2lkX2Z1bGwgUkVQTElDQSBJREVOVElUWSBG VUxMOyIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFU RSBUQUJMRSB0ZXN0X3JlcGxpY2FfaWRfZnVsbCAoeCBpbnQpIik7Ciskbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIElOREVYIHRlc3RfcmVwbGljYV9pZF9m dWxsX2lkeCBPTiB0ZXN0X3JlcGxpY2FfaWRfZnVsbCh4KSIpOworCisjIGluc2VydCBzb21lIGlu aXRpYWwgZGF0YSB3aXRoaW4gdGhlIHJhbmdlIDAtMTkKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHRlc3RfcmVwbGljYV9pZF9mdWxsIFNFTEVD VCBpJTIwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDAsMTAwMClpOyIKKyk7CisKKyMgY3JlYXRlIHB1 Yi9zdWIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBQ VUJMSUNBVElPTiB0YXBfcHViX3JlcF9mdWxsIEZPUiBUQUJMRSB0ZXN0X3JlcGxpY2FfaWRfZnVs bCIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBT VUJTQ1JJUFRJT04gdGFwX3N1Yl9yZXBfZnVsbCBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5z dHIgYXBwbGljYXRpb25fbmFtZT0kYXBwbmFtZScgUFVCTElDQVRJT04gdGFwX3B1Yl9yZXBfZnVs bCIKKyk7CisKKyMgd2FpdCBmb3IgaW5pdGlhbCB0YWJsZSBzeW5jaHJvbml6YXRpb24gdG8gZmlu aXNoCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYzsKKworIyB1 cGRhdGVzIDUwIHJvd3MKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ IlVQREFURSB0ZXN0X3JlcGxpY2FfaWRfZnVsbCBTRVQgeCA9IHggKyAxIFdIRVJFIHggPSAxNTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKyMgd2Fp dCB1bnRpbCB0aGUgaW5kZXggaXMgdXNlZCBvbiB0aGUgc3Vic2NyaWJlcgorJG5vZGVfc3Vic2Ny aWJlci0+cG9sbF9xdWVyeV91bnRpbCgKKwkncG9zdGdyZXMnLCBxe3NlbGVjdCAoaWR4X3NjYW4g PSA1MCkgZnJvbSBwZ19zdGF0X2FsbF9pbmRleGVzIHdoZXJlIGluZGV4cmVsbmFtZSA9ICd0ZXN0 X3JlcGxpY2FfaWRfZnVsbF9pZHgnO30KKykgb3IgZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGlu ZyBmb3IgY2hlY2sgc3Vic2NyaWJlciB0YXBfc3ViX3JlcF9mdWxsIHVwZGF0ZXMgNTAgcm93cyB2 aWEgaW5kZXgiOworCisjIG1ha2Ugc3VyZSB0aGF0IHRoZSBzdWJzY3JpYmVyIGhhcyB0aGUgY29y cmVjdCBkYXRhCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJInNlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3RfcmVwbGljYV9pZF9mdWxsIHdoZXJlIHgg PSAxNTsiKTsKK2lzKCRyZXN1bHQsIHFxKDApLCAnZW5zdXJlIHN1YnNjcmliZXIgaGFzIHRoZSBj b3JyZWN0IGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgdGVzdCcpOworCisjIGNsZWFudXAgcHViCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBQVUJMSUNBVElPTiB0 YXBfcHViX3JlcF9mdWxsIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUQUJMRSB0ZXN0X3JlcGxpY2FfaWRfZnVsbCIpOworIyBjbGVhbnVwIHN1YgorJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFNVQlNDUklQVElPTiB0 YXBfc3ViX3JlcF9mdWxsIik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkRST1AgVEFCTEUgdGVzdF9yZXBsaWNhX2lkX2Z1bGwiKTsKKworIyBUZXN0Y2FzZSBlbmQ6 IFNVQlNDUklQVElPTiBVU0VTIElOREVYIFVQREFURXMgTVVMVElQTEUgUk9XUworIyA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVGVzdGNhc2Ugc3RhcnQ6IFNVQlNDUklQVElPTiBV U0VTIElOREVYIFdJVEggTVVMVElQTEUgQ09MVU1OUworIworIyBCYXNpYyB0ZXN0IHdoZXJlIHRo ZSBzdWJzY3JpYmVyIHVzZXMgaW5kZXgKKyMgYW5kIGRlbGV0ZXMgMjAwIHJvd3MKKyMKKworIyBj cmVhdGUgdGFibGVzIHB1YiBhbmQgc3ViCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdGVzdF9yZXBsaWNhX2lkX2Z1bGwgKHggaW50LCB5IHRl eHQpIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBU QUJMRSB0ZXN0X3JlcGxpY2FfaWRfZnVsbCBSRVBMSUNBIElERU5USVRZIEZVTEw7Iik7Ciskbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHRlc3Rf cmVwbGljYV9pZF9mdWxsICh4IGludCwgeSB0ZXh0KSIpOworJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBJTkRFWCB0ZXN0X3JlcGxpY2FfaWRfZnVsbF9p ZHggT04gdGVzdF9yZXBsaWNhX2lkX2Z1bGwoeCx5KSIpOworCisjIGluc2VydCBzb21lIGluaXRp YWwgZGF0YSB3aXRoaW4gdGhlIHJhbmdlIDAtOQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gdGVzdF9yZXBsaWNhX2lkX2Z1bGwgU0VMRUNUIChp JTEwKSwgKGklMTApOjp0ZXh0IEZST00gZ2VuZXJhdGVfc2VyaWVzKDAsMTAwMClpOyIKKyk7CisK KyMgY3JlYXRlIHB1Yi9zdWIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIkNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViX3JlcF9mdWxsIEZPUiBUQUJMRSB0ZXN0X3Jl cGxpY2FfaWRfZnVsbCIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9yZXBfZnVsbCBDT05ORUNUSU9OICckcHVi bGlzaGVyX2Nvbm5zdHIgYXBwbGljYXRpb25fbmFtZT0kYXBwbmFtZScgUFVCTElDQVRJT04gdGFw X3B1Yl9yZXBfZnVsbCIKKyk7CisKKyMgd2FpdCBmb3IgaW5pdGlhbCB0YWJsZSBzeW5jaHJvbml6 YXRpb24gdG8gZmluaXNoCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9zdWJzY3JpcHRpb25f c3luYzsKKworIyBkZWxldGVzIDIwMCByb3dzCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJERUxFVEUgRlJPTSB0ZXN0X3JlcGxpY2FfaWRfZnVsbCBXSEVSRSB4IElO ICg1LCA2KTsiKTsKKworIyB3YWl0IHVudGlsIHRoZSBpbmRleCBpcyB1c2VkIG9uIHRoZSBzdWJz Y3JpYmVyCiskbm9kZV9zdWJzY3JpYmVyLT5wb2xsX3F1ZXJ5X3VudGlsKAorCSdwb3N0Z3Jlcycs IHF7c2VsZWN0IChpZHhfc2NhbiA9IDIwMCkgZnJvbSBwZ19zdGF0X2FsbF9pbmRleGVzIHdoZXJl IGluZGV4cmVsbmFtZSA9ICd0ZXN0X3JlcGxpY2FfaWRfZnVsbF9pZHgnO30KKykgb3IgZGllICJU aW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgY2hlY2sgc3Vic2NyaWJlciB0YXBfc3ViX3JlcF9m dWxsIGRlbGV0ZXMgMjAwIHJvd3MgdmlhIGluZGV4IjsKKworIyBtYWtlIHN1cmUgdGhhdCB0aGUg c3Vic2NyaWJlciBoYXMgdGhlIGNvcnJlY3QgZGF0YQorJHJlc3VsdCA9ICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJzZWxlY3QgY291bnQoKikgZnJvbSB0ZXN0X3Jl cGxpY2FfaWRfZnVsbCB3aGVyZSB4IGluICg1LCA2KTsiKTsKK2lzKCRyZXN1bHQsIHFxKDApLCAn ZW5zdXJlIHN1YnNjcmliZXIgaGFzIHRoZSBjb3JyZWN0IGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUg dGVzdCcpOworCisjIGNsZWFudXAgcHViCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiRFJPUCBQVUJMSUNBVElPTiB0YXBfcHViX3JlcF9mdWxsIik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0ZXN0X3JlcGxpY2FfaWRf ZnVsbCIpOworIyBjbGVhbnVwIHN1YgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJEUk9QIFNVQlNDUklQVElPTiB0YXBfc3ViX3JlcF9mdWxsIik7Ciskbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdGVzdF9yZXBsaWNhX2lk X2Z1bGwiKTsKKworIyBUZXN0Y2FzZSBlbmQ6IFNVQlNDUklQVElPTiBVU0VTIElOREVYIFdJVEgg TVVMVElQTEUgQ09MVU1OUworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRlc3Rj YXNlIHN0YXJ0OiBTVUJTQ1JJUFRJT04gVVNFUyBJTkRFWCBXSVRIIERST1BQRUQgQ09MVU1OUwor IworIyBCYXNpYyB0ZXN0IHdoZXJlIHRoZSBzdWJzY3JpYmVyIHVzZXMgaW5kZXgKKyMgYW5kIHVw ZGF0ZXMgbXVsdGlwbGUgcm93cyB3aXRoIGEgdGFibGUgdGhhdCBoYXMKKyMgZHJvcHBlZCBjb2x1 bW5zCisjCisKKyMgY3JlYXRlIHRhYmxlcyBwdWIgYW5kIHN1YgorJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHRlc3RfcmVwbGljYV9pZF9mdWxs IChkcm9wXzEganNvbmIsIHggaW50LCBkcm9wXzIgcG9pbnQsIHkgdGV4dCwgZHJvcF8zIHRpbWVz dGFtcHR6KSIKKyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJB TFRFUiBUQUJMRSB0ZXN0X3JlcGxpY2FfaWRfZnVsbCBEUk9QIENPTFVNTiBkcm9wXzEiKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFRBQkxFIHRlc3Rf cmVwbGljYV9pZF9mdWxsIERST1AgQ09MVU1OIGRyb3BfMiIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgVEFCTEUgdGVzdF9yZXBsaWNhX2lkX2Z1bGwg RFJPUCBDT0xVTU4gZHJvcF8zIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJBTFRFUiBUQUJMRSB0ZXN0X3JlcGxpY2FfaWRfZnVsbCBSRVBMSUNBIElERU5USVRZ IEZVTEw7Iik7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJD UkVBVEUgVEFCTEUgdGVzdF9yZXBsaWNhX2lkX2Z1bGwgKGRyb3BfMSBqc29uYiwgeCBpbnQsIGRy b3BfMiBwb2ludCwgeSB0ZXh0LCBkcm9wXzMgdGltZXN0YW1wdHopIgorKTsKKyRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBUQUJMRSB0ZXN0X3JlcGxpY2Ff aWRfZnVsbCBEUk9QIENPTFVNTiBkcm9wXzEiKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJBTFRFUiBUQUJMRSB0ZXN0X3JlcGxpY2FfaWRfZnVsbCBEUk9QIENP TFVNTiBkcm9wXzIiKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CSJBTFRFUiBUQUJMRSB0ZXN0X3JlcGxpY2FfaWRfZnVsbCBEUk9QIENPTFVNTiBkcm9wXzMiKTsK KworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBJTkRF WCB0ZXN0X3JlcGxpY2FfaWRfZnVsbF9pZHggT04gdGVzdF9yZXBsaWNhX2lkX2Z1bGwoeCx5KSIp OworCisjIGluc2VydCBzb21lIGluaXRpYWwgZGF0YSB3aXRoaW4gdGhlIHJhbmdlIDAtOQorJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gdGVzdF9y ZXBsaWNhX2lkX2Z1bGwgU0VMRUNUIChpJTEwKSwgKGklMTApOjp0ZXh0IEZST00gZ2VuZXJhdGVf c2VyaWVzKDAsMTAwMClpOyIKKyk7CisKKyMgY3JlYXRlIHB1Yi9zdWIKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViX3Jl cF9mdWxsIEZPUiBUQUJMRSB0ZXN0X3JlcGxpY2FfaWRfZnVsbCIpOworJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9y ZXBfZnVsbCBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIgYXBwbGljYXRpb25fbmFtZT0k YXBwbmFtZScgUFVCTElDQVRJT04gdGFwX3B1Yl9yZXBfZnVsbCIKKyk7CisKKyMgd2FpdCBmb3Ig aW5pdGlhbCB0YWJsZSBzeW5jaHJvbml6YXRpb24gdG8gZmluaXNoCiskbm9kZV9zdWJzY3JpYmVy LT53YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYzsKKworIyB1cGRhdGVzIDIwMCByb3dzCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJVUERBVEUgdGVzdF9yZXBsaWNh X2lkX2Z1bGwgU0VUIHggPSB4ICsgMSBXSEVSRSB4IElOICg1LCA2KTsiKTsKKworIyB3YWl0IHVu dGlsIHRoZSBpbmRleCBpcyB1c2VkIG9uIHRoZSBzdWJzY3JpYmVyCiskbm9kZV9zdWJzY3JpYmVy LT5wb2xsX3F1ZXJ5X3VudGlsKAorCSdwb3N0Z3JlcycsIHF7c2VsZWN0IChpZHhfc2NhbiA9IDIw MCkgZnJvbSBwZ19zdGF0X2FsbF9pbmRleGVzIHdoZXJlIGluZGV4cmVsbmFtZSA9ICd0ZXN0X3Jl cGxpY2FfaWRfZnVsbF9pZHgnO30KKykgb3IgZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBm b3IgY2hlY2sgc3Vic2NyaWJlciB0YXBfc3ViX3JlcF9mdWxsIHVwZGF0ZXMgMjAwIHJvd3Mgdmlh IGluZGV4IjsKKworIyBtYWtlIHN1cmUgdGhhdCB0aGUgc3Vic2NyaWJlciBoYXMgdGhlIGNvcnJl Y3QgZGF0YQorJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCSJzZWxlY3Qgc3VtKHgreTo6aW50KSBmcm9tIHRlc3RfcmVwbGljYV9pZF9mdWxsOyIpOwor aXMoJHJlc3VsdCwgcXEoOTIwMCksICdlbnN1cmUgc3Vic2NyaWJlciBoYXMgdGhlIGNvcnJlY3Qg ZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0Jyk7CisKKyMgY2xlYW51cCBwdWIKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFBVQkxJQ0FUSU9OIHRhcF9wdWJf cmVwX2Z1bGwiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9Q IFRBQkxFIHRlc3RfcmVwbGljYV9pZF9mdWxsIik7CisjIGNsZWFudXAgc3ViCiskbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgU1VCU0NSSVBUSU9OIHRhcF9zdWJf cmVwX2Z1bGwiKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0ZXN0X3JlcGxpY2FfaWRfZnVsbCIpOworCisjIFRlc3RjYXNlIGVuZDogU1VCU0NS SVBUSU9OIFVTRVMgSU5ERVggV0lUSCBEUk9QUEVEIENPTFVNTlMKKyMgPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwor IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorIyBUZXN0Y2FzZSBzdGFydDogU1VCU0NSSVBUSU9OIFVTRVMgSU5ERVgg T04gUEFSVElUSU9ORUQgVEFCTEVTCisKKyMgY3JlYXRlIHRhYmxlcyBwdWIgYW5kIHN1YgorJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHVzZXJz X3RhYmxlX3BhcnQodXNlcl9pZCBiaWdpbnQsIHZhbHVlXzEgaW50LCB2YWx1ZV8yIGludCkgUEFS VElUSU9OIEJZIFJBTkdFICh2YWx1ZV8xKTsiCispOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHVzZXJzX3RhYmxlX3BhcnRfMCBQQVJUSVRJ T04gT0YgdXNlcnNfdGFibGVfcGFydCBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMCk7IgorKTsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSB1 c2Vyc190YWJsZV9wYXJ0XzEgUEFSVElUSU9OIE9GIHVzZXJzX3RhYmxlX3BhcnQgRk9SIFZBTFVF UyBGUk9NICgxMCkgVE8gKDIwKTsiCispOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJBTFRFUiBUQUJMRSB1c2Vyc190YWJsZV9wYXJ0IFJFUExJQ0EgSURFTlRJ VFkgRlVMTDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFM VEVSIFRBQkxFIHVzZXJzX3RhYmxlX3BhcnRfMCBSRVBMSUNBIElERU5USVRZIEZVTEw7Iik7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBUQUJMRSB1c2Vy c190YWJsZV9wYXJ0XzEgUkVQTElDQSBJREVOVElUWSBGVUxMOyIpOworCiskbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHVzZXJzX3RhYmxlX3Bh cnQodXNlcl9pZCBiaWdpbnQsIHZhbHVlXzEgaW50LCB2YWx1ZV8yIGludCkgUEFSVElUSU9OIEJZ IFJBTkdFICh2YWx1ZV8xKTsiCispOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJIkNSRUFURSBUQUJMRSB1c2Vyc190YWJsZV9wYXJ0XzAgUEFSVElUSU9OIE9GIHVz ZXJzX3RhYmxlX3BhcnQgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTApOyIKKyk7Ciskbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHVzZXJzX3Rh YmxlX3BhcnRfMSBQQVJUSVRJT04gT0YgdXNlcnNfdGFibGVfcGFydCBGT1IgVkFMVUVTIEZST00g KDEwKSBUTyAoMjApOyIKKyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkiQ1JFQVRFIElOREVYIHVzZXJzX3RhYmxlX3BhcnRfaWR4IE9OIHVzZXJzX3RhYmxlX3Bh cnQodXNlcl9pZCwgdmFsdWVfMSkiCispOworCisjIGluc2VydCBzb21lIGluaXRpYWwgZGF0YQor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gdXNl cnNfdGFibGVfcGFydCBTRUxFQ1QgKGklMTAwKSwgKGklMjApLCBpIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDAsMTAwMClpOyIKKyk7CisKKyMgY3JlYXRlIHB1Yi9zdWIKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViX3JlcF9m dWxsIEZPUiBUQUJMRSB1c2Vyc190YWJsZV9wYXJ0Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFNVQlNDUklQVElPTiB0YXBfc3ViX3JlcF9mdWxs IENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0ciBhcHBsaWNhdGlvbl9uYW1lPSRhcHBuYW1l JyBQVUJMSUNBVElPTiB0YXBfcHViX3JlcF9mdWxsIgorKTsKKworIyB3YWl0IGZvciBpbml0aWFs IHRhYmxlIHN5bmNocm9uaXphdGlvbiB0byBmaW5pc2gKKyRub2RlX3N1YnNjcmliZXItPndhaXRf Zm9yX3N1YnNjcmlwdGlvbl9zeW5jOworCisjIHVwZGF0ZXMgcm93cyBhbmQgbW92ZXMgYmV0d2Vl biBwYXJ0aXRpb25zCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJV UERBVEUgdXNlcnNfdGFibGVfcGFydCBTRVQgdmFsdWVfMSA9IDAgV0hFUkUgdXNlcl9pZCA9IDQ7 Iik7CisKKyMgd2FpdCB1bnRpbCB0aGUgaW5kZXggaXMgdXNlZCBvbiB0aGUgc3Vic2NyaWJlcgor JG5vZGVfc3Vic2NyaWJlci0+cG9sbF9xdWVyeV91bnRpbCgKKwkncG9zdGdyZXMnLCBxe3NlbGVj dCBzdW0oaWR4X3NjYW4pPTEwIGZyb20gcGdfc3RhdF9hbGxfaW5kZXhlcyB3aGVyZSBpbmRleHJl bG5hbWUgaWxpa2UgJ3VzZXJzX3RhYmxlX3BhcnRfJSc7fQorKSBvciBkaWUgIlRpbWVkIG91dCB3 aGlsZSB3YWl0aW5nIGZvciB1cGRhdGVzIG9uIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGggaW5kZXgi OworCisjIGRlbGV0ZXMgcm93cyBmcm9tIGRpZmZlcmVudCBwYXJ0aXRpb25zCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJERUxFVEUgRlJPTSB1c2Vyc190YWJsZV9w YXJ0IFdIRVJFIHVzZXJfaWQgPSAxIGFuZCB2YWx1ZV8xID0gMTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkRFTEVURSBGUk9NIHVzZXJzX3RhYmxlX3BhcnQg V0hFUkUgdXNlcl9pZCA9IDEyIGFuZCB2YWx1ZV8xID0gMTI7Iik7CisKKyMgd2FpdCB1bnRpbCB0 aGUgaW5kZXggaXMgdXNlZCBvbiB0aGUgc3Vic2NyaWJlcgorJG5vZGVfc3Vic2NyaWJlci0+cG9s bF9xdWVyeV91bnRpbCgKKwkncG9zdGdyZXMnLCBxe3NlbGVjdCBzdW0oaWR4X3NjYW4pPTMwIGZy b20gcGdfc3RhdF9hbGxfaW5kZXhlcyB3aGVyZSBpbmRleHJlbG5hbWUgaWxpa2UgJ3VzZXJzX3Rh YmxlX3BhcnRfJSc7fQorKSBvciBkaWUgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBjaGVj ayBzdWJzY3JpYmVyIHRhcF9zdWJfcmVwX2Z1bGwgdXBkYXRlcyBwYXJ0aXRpb25lZCB0YWJsZSI7 CisKKyMgbWFrZSBzdXJlIHRoYXQgdGhlIHN1YnNjcmliZXIgaGFzIHRoZSBjb3JyZWN0IGRhdGEK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkic2Vs ZWN0IHN1bSh1c2VyX2lkK3ZhbHVlXzErdmFsdWVfMikgZnJvbSB1c2Vyc190YWJsZV9wYXJ0OyIp OworaXMoJHJlc3VsdCwgcXEoNTUwMDcwKSwgJ2Vuc3VyZSBzdWJzY3JpYmVyIGhhcyB0aGUgY29y cmVjdCBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIHRlc3QnKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkic2VsZWN0IGNvdW50KERJU1RJTkNUKHVz ZXJfaWQsdmFsdWVfMSwgdmFsdWVfMikpIGZyb20gdXNlcnNfdGFibGVfcGFydDsiKTsKK2lzKCRy ZXN1bHQsIHFxKDk4MSksICdlbnN1cmUgc3Vic2NyaWJlciBoYXMgdGhlIGNvcnJlY3QgZGF0YSBh dCB0aGUgZW5kIG9mIHRoZSB0ZXN0Jyk7CisKKyMgY2xlYW51cCBwdWIKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFBVQkxJQ0FUSU9OIHRhcF9wdWJfcmVwX2Z1 bGwiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxF IHVzZXJzX3RhYmxlX3BhcnQiKTsKKworIyBjbGVhbnVwIHN1YgorJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFNVQlNDUklQVElPTiB0YXBfc3ViX3JlcF9mdWxs Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUg dXNlcnNfdGFibGVfcGFydCIpOworCisjIFRlc3RjYXNlIGVuZDogU1VCU0NSSVBUSU9OIFVTRVMg SU5ERVggT04gUEFSVElUSU9ORUQgVEFCTEVTCisjID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKyMgVGVzdGNhc2Ugc3RhcnQ6IFNVQlNDUklQVElPTiBET0VTIE5PVCBVU0UgUEFSVElBTCBJ TkRFWAorCisjIGNyZWF0ZSB0YWJsZXMgcHViIGFuZCBzdWIKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSB0ZXN0X3JlcGxpY2FfaWRfZnVsbF9w YXJ0X2luZGV4ICh4IGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJBTFRFUiBUQUJMRSB0ZXN0X3JlcGxpY2FfaWRfZnVsbF9wYXJ0X2luZGV4IFJFUExJ Q0EgSURFTlRJVFkgRlVMTDsiKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJDUkVBVEUgVEFCTEUgdGVzdF9yZXBsaWNhX2lkX2Z1bGxfcGFydF9pbmRleCAoeCBp bnQpOyIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFU RSBJTkRFWCB0ZXN0X3JlcGxpY2FfaWRfZnVsbF9wYXJ0X2lkeCBPTiB0ZXN0X3JlcGxpY2FfaWRf ZnVsbF9wYXJ0X2luZGV4KHgpIFdIRVJFICh4ID0gNSk7Iik7CisKKyMgaW5zZXJ0IHNvbWUgaW5p dGlhbCBkYXRhCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNF UlQgSU5UTyB0ZXN0X3JlcGxpY2FfaWRfZnVsbF9wYXJ0X2luZGV4IFNFTEVDVCBpIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDAsMjEpaTsiKTsKKworIyBjcmVhdGUgcHViL3N1YgorJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWJf cmVwX2Z1bGwgRk9SIFRBQkxFIHRlc3RfcmVwbGljYV9pZF9mdWxsX3BhcnRfaW5kZXgiKTsKKyRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgU1VCU0NSSVBU SU9OIHRhcF9zdWJfcmVwX2Z1bGwgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyIGFwcGxp Y2F0aW9uX25hbWU9JGFwcG5hbWUnIFBVQkxJQ0FUSU9OIHRhcF9wdWJfcmVwX2Z1bGwiCispOwor CisjIHdhaXQgZm9yIGluaXRpYWwgdGFibGUgc3luY2hyb25pemF0aW9uIHRvIGZpbmlzaAorJG5v ZGVfc3Vic2NyaWJlci0+d2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmM7CisKKyMgdXBkYXRlIDIg cm93cywgb25lIG9mIHRoZW0gaXMgaW5kZXhlZAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkiVVBEQVRFIHRlc3RfcmVwbGljYV9pZF9mdWxsX3BhcnRfaW5kZXggU0VU IHggPSB4ICsgMSBXSEVSRSB4ID0gNTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJIlVQREFURSB0ZXN0X3JlcGxpY2FfaWRfZnVsbF9wYXJ0X2luZGV4IFNFVCB4 ID0geCArIDEgV0hFUkUgeCA9IDE1OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCRhcHBuYW1lKTsKKworIyBtYWtlIHN1cmUgdGhhdCB0aGUgaW5kZXggaXMgbm90IHVzZWQK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkic2Vs ZWN0IGlkeF9zY2FuIGZyb20gcGdfc3RhdF9hbGxfaW5kZXhlcyB3aGVyZSBpbmRleHJlbG5hbWUg PSAndGVzdF9yZXBsaWNhX2lkX2Z1bGxfcGFydF9pZHgnIik7CitpcygkcmVzdWx0LCBxcSgwKSwg J2Vuc3VyZSBzdWJzY3JpYmVyIHRhcF9zdWJfcmVwX2Z1bGwgdXBkYXRlcyBvbmUgcm93IHZpYSBz ZXEuIHNjYW4gd2l0aCB3aXRoIHBhcnRpYWwgaW5kZXgnKTsKKworIyBtYWtlIHN1cmUgdGhhdCB0 aGUgc3Vic2NyaWJlciBoYXMgdGhlIGNvcnJlY3QgZGF0YQorJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0 X3JlcGxpY2FfaWRfZnVsbF9wYXJ0X2luZGV4OyIpOworaXMoJHJlc3VsdCwgcXEoMjIpLCAnZW5z dXJlIHN1YnNjcmliZXIgaGFzIHRoZSBjb3JyZWN0IGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgdGVz dCcpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIlNFTEVDVCBjb3VudChESVNUSU5DVCB4KSBGUk9NIHRlc3RfcmVwbGljYV9pZF9mdWxsX3Bh cnRfaW5kZXg7Iik7CitpcygkcmVzdWx0LCBxcSgyMCksICdlbnN1cmUgc3Vic2NyaWJlciBoYXMg dGhlIGNvcnJlY3QgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0Jyk7CisKKyMgY2xlYW51cCBw dWIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFBVQkxJQ0FU SU9OIHRhcF9wdWJfcmVwX2Z1bGwiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJEUk9QIFRBQkxFIHRlc3RfcmVwbGljYV9pZF9mdWxsX3BhcnRfaW5kZXgiKTsKKyMg Y2xlYW51cCBzdWIKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9yZXBfZnVsbCIpOworJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRlc3RfcmVwbGljYV9pZF9mdWxsX3BhcnRf aW5kZXgiKTsKKworIyBUZXN0Y2FzZSBlbmQ6IFNVQlNDUklQVElPTiBET0VTIE5PVCBVU0UgUEFS VElBTCBJTkRFWAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRlc3RjYXNlIHN0 YXJ0OiBTVUJTQ1JJUFRJT04gRE9FUyBOT1QgVVNFIElOREVYRVMgV0lUSCBPTkxZIEVYUFJFU1NJ T05TCisKKyMgY3JlYXRlIHRhYmxlcyBwdWIgYW5kIHN1YgorJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHBlb3BsZSAoZmlyc3RuYW1lIHRleHQs IGxhc3RuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkiQUxURVIgVEFCTEUgcGVvcGxlIFJFUExJQ0EgSURFTlRJVFkgRlVMTDsiKTsKKyRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgcGVvcGxl IChmaXJzdG5hbWUgdGV4dCwgbGFzdG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIElOREVYIHBlb3BsZV9uYW1lcyBPTiBwZW9w bGUgKChmaXJzdG5hbWUgfHwgJyAnIHx8IGxhc3RuYW1lKSk7Iik7CisKKyMgaW5zZXJ0IHNvbWUg aW5pdGlhbCBkYXRhCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJ TlNFUlQgSU5UTyBwZW9wbGUgU0VMRUNUICdmaXJzdF9uYW1lXycgfHwgaTo6dGV4dCwgJ2xhc3Rf bmFtZV8nIHx8IGk6OnRleHQgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMCwyMDApaTsiKTsKKworIyBj cmVhdGUgcHViL3N1YgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki Q1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWJfcmVwX2Z1bGwgRk9SIFRBQkxFIHBlb3BsZSIpOwor JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJ UFRJT04gdGFwX3N1Yl9yZXBfZnVsbCBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIgYXBw bGljYXRpb25fbmFtZT0kYXBwbmFtZScgUFVCTElDQVRJT04gdGFwX3B1Yl9yZXBfZnVsbCIKKyk7 CisKKyMgd2FpdCBmb3IgaW5pdGlhbCB0YWJsZSBzeW5jaHJvbml6YXRpb24gdG8gZmluaXNoCisk bm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYzsKKworIyB1cGRhdGUg MiByb3dzCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJVUERBVEUg cGVvcGxlIFNFVCBmaXJzdG5hbWUgPSAnTmFuJyBXSEVSRSBmaXJzdG5hbWUgPSAnZmlyc3RfbmFt ZV8xJzsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlVQREFU RSBwZW9wbGUgU0VUIGZpcnN0bmFtZSA9ICdOYW4nIFdIRVJFIGZpcnN0bmFtZSA9ICdmaXJzdF9u YW1lXzInIEFORCBsYXN0bmFtZSA9ICdsYXN0X25hbWVfMic7Iik7CisKKyMgbWFrZSBzdXJlIHRo ZSBpbmRleCBpcyBub3QgdXNlZCBvbiB0aGUgc3Vic2NyaWJlcgorJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJzZWxlY3QgaWR4X3NjYW4gZnJvbSBw Z19zdGF0X2FsbF9pbmRleGVzIHdoZXJlIGluZGV4cmVsbmFtZSA9ICdwZW9wbGVfbmFtZXMnIik7 CitpcygkcmVzdWx0LCBxcSgwKSwgJ2Vuc3VyZSBzdWJzY3JpYmVyIHRhcF9zdWJfcmVwX2Z1bGwg dXBkYXRlcyB0d28gcm93cyB2aWEgc2VxLiBzY2FuIHdpdGggaW5kZXggb24gZXhwcmVzc2lvbnMn KTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiREVMRVRFIEZS T00gcGVvcGxlIFdIRVJFIGZpcnN0bmFtZSA9ICdmaXJzdF9uYW1lXzMnOyIpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiREVMRVRFIEZST00gcGVvcGxlIFdIRVJF IGZpcnN0bmFtZSA9ICdmaXJzdF9uYW1lXzQnIEFORCBsYXN0bmFtZSA9ICdsYXN0X25hbWVfNCc7 Iik7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKyMg bWFrZSBzdXJlIHRoZSBpbmRleCBpcyBub3QgdXNlZCBvbiB0aGUgc3Vic2NyaWJlcgorJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJzZWxlY3QgaWR4 X3NjYW4gZnJvbSBwZ19zdGF0X2FsbF9pbmRleGVzIHdoZXJlIGluZGV4cmVsbmFtZSA9ICdwZW9w bGVfbmFtZXMnIik7CitpcygkcmVzdWx0LCBxcSgwKSwgJ2Vuc3VyZSBzdWJzY3JpYmVyIHRhcF9z dWJfcmVwX2Z1bGwgdXBkYXRlcyB0d28gcm93cyB2aWEgc2VxLiBzY2FuIHdpdGggaW5kZXggb24g ZXhwcmVzc2lvbnMnKTsKKworIyBtYWtlIHN1cmUgdGhhdCB0aGUgc3Vic2NyaWJlciBoYXMgdGhl IGNvcnJlY3QgZGF0YQorJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZW9wbGU7Iik7CitpcygkcmVzdWx0LCBx cSgxOTkpLCAnZW5zdXJlIHN1YnNjcmliZXIgaGFzIHRoZSBjb3JyZWN0IGRhdGEgYXQgdGhlIGVu ZCBvZiB0aGUgdGVzdCcpOworCisjIGNsZWFudXAgcHViCiskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiRFJPUCBQVUJMSUNBVElPTiB0YXBfcHViX3JlcF9mdWxsIik7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBwZW9wbGUi KTsKKyMgY2xlYW51cCBzdWIKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9yZXBfZnVsbCIpOworJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHBlb3BsZSIpOworCisjIFRlc3Rj YXNlIGVuZDogU1VCU0NSSVBUSU9OIERPRVMgTk9UIFVTRSBJTkRFWEVTIFdJVEggT05MWSBFWFBS RVNTSU9OUworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRlc3RjYXNlIHN0YXJ0 OiBTVUJTQ1JJUFRJT04gQ0FOIFVTRSBJTkRFWEVTIFdJVEggRVhQUkVTU0lPTlMgQU5EIENPTFVN TlMKKworIyBjcmVhdGUgdGFibGVzIHB1YiBhbmQgc3ViCiskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgcGVvcGxlIChmaXJzdG5hbWUgdGV4dCwg bGFzdG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCSJBTFRFUiBUQUJMRSBwZW9wbGUgUkVQTElDQSBJREVOVElUWSBGVUxMOyIpOworJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSBwZW9wbGUg KGZpcnN0bmFtZSB0ZXh0LCBsYXN0bmFtZSB0ZXh0KTsiKTsKKyRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgSU5ERVggcGVvcGxlX25hbWVzIE9OIHBlb3Bs ZSAoZmlyc3RuYW1lLCBsYXN0bmFtZSwgKGZpcnN0bmFtZSB8fCAnICcgfHwgbGFzdG5hbWUpKTsi KTsKKworIyBpbnNlcnQgc29tZSBpbml0aWFsIGRhdGEKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHBlb3BsZSBTRUxFQ1QgJ2ZpcnN0X25hbWVf JyB8fCBpOjp0ZXh0LCAnbGFzdF9uYW1lXycgfHwgaTo6dGV4dCBGUk9NIGdlbmVyYXRlX3Nlcmll cygwLCAyMDApaTsiKTsKKworIyBjcmVhdGUgcHViL3N1YgorJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWJfcmVwX2Z1bGwg Rk9SIFRBQkxFIHBlb3BsZSIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9yZXBfZnVsbCBDT05ORUNUSU9OICck cHVibGlzaGVyX2Nvbm5zdHIgYXBwbGljYXRpb25fbmFtZT0kYXBwbmFtZScgUFVCTElDQVRJT04g dGFwX3B1Yl9yZXBfZnVsbCIKKyk7CisKKyMgd2FpdCBmb3IgaW5pdGlhbCB0YWJsZSBzeW5jaHJv bml6YXRpb24gdG8gZmluaXNoCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9zdWJzY3JpcHRp b25fc3luYzsKKworIyB1cGRhdGUgMiByb3dzCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJVUERBVEUgcGVvcGxlIFNFVCBmaXJzdG5hbWUgPSAnTmFuJyBXSEVSRSBm aXJzdG5hbWUgPSAnZmlyc3RfbmFtZV8xJzsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJIlVQREFURSBwZW9wbGUgU0VUIGZpcnN0bmFtZSA9ICdOYW4nIFdIRVJF IGZpcnN0bmFtZSA9ICdmaXJzdF9uYW1lXzMnIEFORCBsYXN0bmFtZSA9ICdsYXN0X25hbWVfMyc7 Iik7CisKKyMgd2FpdCB1bnRpbCB0aGUgaW5kZXggaXMgdXNlZCBvbiB0aGUgc3Vic2NyaWJlcgor JG5vZGVfc3Vic2NyaWJlci0+cG9sbF9xdWVyeV91bnRpbCgKKwkncG9zdGdyZXMnLCBxe3NlbGVj dCBpZHhfc2Nhbj0yIGZyb20gcGdfc3RhdF9hbGxfaW5kZXhlcyB3aGVyZSBpbmRleHJlbG5hbWUg PSAncGVvcGxlX25hbWVzJzt9CispIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9y IGNoZWNrIHN1YnNjcmliZXIgdGFwX3N1Yl9yZXBfZnVsbCB1cGRhdGVzIHR3byByb3dzIHZpYSBp bmRleCBzY2FuIHdpdGggaW5kZXggb24gZXhwcmVzc2lvbnMgYW5kIGNvbHVtbnMiOworCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJERUxFVEUgRlJPTSBwZW9wbGUg V0hFUkUgZmlyc3RuYW1lID0gJ05hbic7Iik7CisKKyMgd2FpdCB1bnRpbCB0aGUgaW5kZXggaXMg dXNlZCBvbiB0aGUgc3Vic2NyaWJlcgorJG5vZGVfc3Vic2NyaWJlci0+cG9sbF9xdWVyeV91bnRp bCgKKwkncG9zdGdyZXMnLCBxe3NlbGVjdCBpZHhfc2Nhbj00IGZyb20gcGdfc3RhdF9hbGxfaW5k ZXhlcyB3aGVyZSBpbmRleHJlbG5hbWUgPSAncGVvcGxlX25hbWVzJzt9CispIG9yIGRpZSAiVGlt ZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGNoZWNrIHN1YnNjcmliZXIgdGFwX3N1Yl9yZXBfZnVs bCBkZWxldGVzIHR3byByb3dzIHZpYSBpbmRleCBzY2FuIHdpdGggaW5kZXggb24gZXhwcmVzc2lv bnMgYW5kIGNvbHVtbnMiOworCisjIG1ha2Ugc3VyZSB0aGF0IHRoZSBzdWJzY3JpYmVyIGhhcyB0 aGUgY29ycmVjdCBkYXRhCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBlb3BsZTsiKTsKK2lzKCRyZXN1bHQs IHFxKDE5OSksICdlbnN1cmUgc3Vic2NyaWJlciBoYXMgdGhlIGNvcnJlY3QgZGF0YSBhdCB0aGUg ZW5kIG9mIHRoZSB0ZXN0Jyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGNvdW50KCopIEZST00gcGVvcGxlIFdIRVJFIGZpcnN0 bmFtZSA9ICdOYU4nOyIpOworaXMoJHJlc3VsdCwgcXEoMCksICdlbnN1cmUgc3Vic2NyaWJlciBo YXMgdGhlIGNvcnJlY3QgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0Jyk7CisKKyMgY2xlYW51 cCBwdWIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFBVQkxJ Q0FUSU9OIHRhcF9wdWJfcmVwX2Z1bGwiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJEUk9QIFRBQkxFIHBlb3BsZSIpOworIyBjbGVhbnVwIHN1YgorJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFNVQlNDUklQVElPTiB0YXBfc3Vi X3JlcF9mdWxsIik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRS T1AgVEFCTEUgcGVvcGxlIik7CisKKyMgVGVzdGNhc2UgZW5kOiBTVUJTQ1JJUFRJT04gQ0FOIFVT RSBJTkRFWEVTIFdJVEggRVhQUkVTU0lPTlMgQU5EIENPTFVNTlMKKyMgPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwor IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorIyBUZXN0Y2FzZSBzdGFydDogU29tZSBOVUxMIHZhbHVlcworCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdGVzdF9y ZXBsaWNhX2lkX2Z1bGwgKHggaW50KTsiCispOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJBTFRFUiBUQUJMRSB0ZXN0X3JlcGxpY2FfaWRfZnVsbCBSRVBMSUNB IElERU5USVRZIEZVTEw7Iik7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJDUkVBVEUgVEFCTEUgdGVzdF9yZXBsaWNhX2lkX2Z1bGwgKHggaW50LCB5IGludCk7 IgorKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFU RSBJTkRFWCB0ZXN0X3JlcGxpY2FfaWRfZnVsbF9pZHggT04gdGVzdF9yZXBsaWNhX2lkX2Z1bGwo eCx5KTsiCispOworCisjIGNyZWF0ZSBwdWIvc3ViCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1Yl9yZXBfZnVsbCBGT1Ig VEFCTEUgdGVzdF9yZXBsaWNhX2lkX2Z1bGwiKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9yZXBfZnVsbCBD T05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIgYXBwbGljYXRpb25fbmFtZT0kYXBwbmFtZScg UFVCTElDQVRJT04gdGFwX3B1Yl9yZXBfZnVsbCIKKyk7CisKKyMgd2FpdCBmb3IgaW5pdGlhbCB0 YWJsZSBzeW5jaHJvbml6YXRpb24gdG8gZmluaXNoCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zv cl9zdWJzY3JpcHRpb25fc3luYzsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkiSU5TRVJUIElOVE8gdGVzdF9yZXBsaWNhX2lkX2Z1bGwgVkFMVUVTICgxKSwgKDIp LCAoMyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJVUERB VEUgdGVzdF9yZXBsaWNhX2lkX2Z1bGwgU0VUIHggPSB4ICsgMSBXSEVSRSB4ID0gMTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlVQREFURSB0ZXN0X3JlcGxp Y2FfaWRfZnVsbCBTRVQgeCA9IHggKyAxIFdIRVJFIHggPSAzOyIpOworCisjIGNoZWNrIGlmIHRo ZSBpbmRleCBpcyB1c2VkIGV2ZW4gd2hlbiB0aGUgaW5kZXggaGFzIE5VTEwgdmFsdWVzCiskbm9k ZV9zdWJzY3JpYmVyLT5wb2xsX3F1ZXJ5X3VudGlsKAorCSdwb3N0Z3JlcycsIHF7c2VsZWN0IGlk eF9zY2FuPTIgZnJvbSBwZ19zdGF0X2FsbF9pbmRleGVzIHdoZXJlIGluZGV4cmVsbmFtZSA9ICd0 ZXN0X3JlcGxpY2FfaWRfZnVsbF9pZHgnO30KKykgb3IgZGllICJUaW1lZCBvdXQgd2hpbGUgd2Fp dGluZyBmb3IgY2hlY2sgc3Vic2NyaWJlciB0YXBfc3ViX3JlcF9mdWxsIHVwZGF0ZXMgdGVzdF9y ZXBsaWNhX2lkX2Z1bGwgdGFibGUiOworCisjIG1ha2Ugc3VyZSB0aGF0IHRoZSBzdWJzY3JpYmVy IGhhcyB0aGUgY29ycmVjdCBkYXRhCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJInNlbGVjdCBzdW0oeCkgZnJvbSB0ZXN0X3JlcGxpY2FfaWRfZnVs bCBXSEVSRSB5IElTIE5VTEw7Iik7CitpcygkcmVzdWx0LCBxcSg4KSwgJ2Vuc3VyZSBzdWJzY3Jp YmVyIGhhcyB0aGUgY29ycmVjdCBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIHRlc3QnKTsKKworIyBt YWtlIHN1cmUgdGhhdCB0aGUgc3Vic2NyaWJlciBoYXMgdGhlIGNvcnJlY3QgZGF0YQorJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJzZWxlY3QgY291 bnQoKikgZnJvbSB0ZXN0X3JlcGxpY2FfaWRfZnVsbCBXSEVSRSB5IElTIE5VTEw7Iik7Citpcygk cmVzdWx0LCBxcSgzKSwgJ2Vuc3VyZSBzdWJzY3JpYmVyIGhhcyB0aGUgY29ycmVjdCBkYXRhIGF0 IHRoZSBlbmQgb2YgdGhlIHRlc3QnKTsKKworIyBjbGVhbnVwIHB1YgorJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgUFVCTElDQVRJT04gdGFwX3B1Yl9yZXBfZnVs bCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUg dGVzdF9yZXBsaWNhX2lkX2Z1bGwiKTsKKworIyBjbGVhbnVwIHN1YgorJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFNVQlNDUklQVElPTiB0YXBfc3ViX3JlcF9m dWxsIik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFC TEUgdGVzdF9yZXBsaWNhX2lkX2Z1bGwiKTsKKworIyBUZXN0Y2FzZSBlbmQ6IFNvbWUgTlVMTCB2 YWx1ZXMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUZXN0Y2FzZSBzdGFydDog VW5pcXVlIGluZGV4IHRoYXQgaXMgbm90IHByaW1hcnkga2V5IG9yIHJlcGxpY2EgaWRlbnRpdHkK KworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxF IHRlc3RfcmVwbGljYV9pZF9mdWxsICh4IGludCwgeSBpbnQpOyIKKyk7CisKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFRBQkxFIHRlc3RfcmVwbGljYV9p ZF9mdWxsIFJFUExJQ0EgSURFTlRJVFkgRlVMTDsiKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSB0ZXN0X3JlcGxpY2FfaWRfZnVsbCAo eCBpbnQsIHkgaW50KTsiCispOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkiQ1JFQVRFIFVOSVFVRSBJTkRFWCB0ZXN0X3JlcGxpY2FfaWRfZnVsbF91bmlxdWVf aWR4IE9OIHRlc3RfcmVwbGljYV9pZF9mdWxsKHgpOyIKKyk7CisKKyMgY3JlYXRlIHB1Yi9zdWIK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBQVUJMSUNB VElPTiB0YXBfcHViX3JlcF9mdWxsIEZPUiBUQUJMRSB0ZXN0X3JlcGxpY2FfaWRfZnVsbCIpOwor Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFNVQlND UklQVElPTiB0YXBfc3ViX3JlcF9mdWxsIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0ciBh cHBsaWNhdGlvbl9uYW1lPSRhcHBuYW1lJyBQVUJMSUNBVElPTiB0YXBfcHViX3JlcF9mdWxsIgor KTsKKworIyB3YWl0IGZvciBpbml0aWFsIHRhYmxlIHN5bmNocm9uaXphdGlvbiB0byBmaW5pc2gK KyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jOworCiskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0ZXN0X3JlcGxp Y2FfaWRfZnVsbCAoeCwgeSkgVkFMVUVTIChOVUxMLCAxKSwgKE5VTEwsIDIpLCAoTlVMTCwgMyk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJVUERBVEUgdGVz dF9yZXBsaWNhX2lkX2Z1bGwgU0VUIHggPSAxIFdIRVJFIHkgPSAyOyIpOworCisjIGNoZWNrIGlm IHRoZSBpbmRleCBpcyB1c2VkIGV2ZW4gd2hlbiB0aGUgaW5kZXggaGFzIE5VTEwgdmFsdWVzCisk bm9kZV9zdWJzY3JpYmVyLT5wb2xsX3F1ZXJ5X3VudGlsKAorCSdwb3N0Z3JlcycsIHF7c2VsZWN0 IGlkeF9zY2FuPTEgZnJvbSBwZ19zdGF0X2FsbF9pbmRleGVzIHdoZXJlIGluZGV4cmVsbmFtZSA9 ICd0ZXN0X3JlcGxpY2FfaWRfZnVsbF91bmlxdWVfaWR4Jzt9CispIG9yIGRpZSAiVGltZWQgb3V0 IHdoaWxlIHdhaXRpbmcgZm9yIGNoZWNrIHN1YnNjcmliZXIgdGFwX3N1Yl9yZXBfZnVsbCB1cGRh dGVzIHRlc3RfcmVwbGljYV9pZF9mdWxsIHRhYmxlIjsKKworIyBtYWtlIHN1cmUgdGhhdCB0aGUg c3Vic2NyaWJlciBoYXMgdGhlIGNvcnJlY3QgZGF0YQorJHJlc3VsdCA9ICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJzZWxlY3Qgc3VtKHkpIGZyb20gdGVzdF9yZXBs aWNhX2lkX2Z1bGw7Iik7CitpcygkcmVzdWx0LCBxcSg2KSwgJ2Vuc3VyZSBzdWJzY3JpYmVyIGhh cyB0aGUgY29ycmVjdCBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIHRlc3QnKTsKKworIyBjbGVhbnVw IHB1YgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgUFVCTElD QVRJT04gdGFwX3B1Yl9yZXBfZnVsbCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdGVzdF9yZXBsaWNhX2lkX2Z1bGwiKTsKKworIyBjbGVhbnVw IHN1YgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFNVQlND UklQVElPTiB0YXBfc3ViX3JlcF9mdWxsIik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdGVzdF9yZXBsaWNhX2lkX2Z1bGwiKTsKKworIyBUZXN0 Y2FzZSBlbmQ6IFVuaXF1ZSBpbmRleCB0aGF0IGlzIG5vdCBwcmltYXJ5IGtleSBvciByZXBsaWNh IGlkZW50aXR5CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVGVzdGNhc2Ugc3Rh cnQ6IFNVQlNDUklQVElPTiBCRUhBVklPUiBXSVRIIEVOQUJMRV9JTkRFWFNDQU4KKyMKKyMgRXZl biBpZiBlbmFibGVfaW5kZXhzY2FuID0gZmFsc2UsIHdlIGRvIHVzZSB0aGUgcHJpbWFyeSBrZXlz LCB0aGlzCisjIGlzIHRoZSBsZWdhY3kgYmVoYXZpb3IuIEhvd2V2ZXIsIHdlIGRvIG5vdCB1c2Ug bm9uLXByaW1hcnkvbm9uIHJlcGxpY2EKKyMgaWRlbnRpdHkgY29sdW1ucy4KKyMKKworIyBjcmVh dGUgdGFibGVzIHB1YiBhbmQgc3ViCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJDUkVBVEUgVEFCTEUgdGVzdF9yZXBsaWNhX2lkX2Z1bGwgKHggaW50IE5PVCBOVUxM KSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgVEFC TEUgdGVzdF9yZXBsaWNhX2lkX2Z1bGwgUkVQTElDQSBJREVOVElUWSBGVUxMOyIpOworJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSB0ZXN0X3Jl cGxpY2FfaWRfZnVsbCAoeCBpbnQgTk9UIE5VTEwpIik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIElOREVYIHRlc3RfcmVwbGljYV9pZF9mdWxsX2lk eCBPTiB0ZXN0X3JlcGxpY2FfaWRfZnVsbCh4KSIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFNZU1RFTSBTRVQgZW5hYmxlX2luZGV4c2NhbiBUTyBv ZmY7Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNU IHBnX3JlbG9hZF9jb25mKCk7Iik7CisKKyMgaW5zZXJ0IHNvbWUgaW5pdGlhbCBkYXRhCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0ZXN0X3Jl cGxpY2FfaWRfZnVsbCBTRUxFQ1QgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygwLDIxKWk7Iik7CisK KyMgY3JlYXRlIHB1Yi9zdWIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIkNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViX3JlcF9mdWxsIEZPUiBUQUJMRSB0ZXN0X3Jl cGxpY2FfaWRfZnVsbCIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9yZXBfZnVsbCBDT05ORUNUSU9OICckcHVi bGlzaGVyX2Nvbm5zdHIgYXBwbGljYXRpb25fbmFtZT0kYXBwbmFtZScgUFVCTElDQVRJT04gdGFw X3B1Yl9yZXBfZnVsbCIKKyk7CisKKyMgd2FpdCBmb3IgaW5pdGlhbCB0YWJsZSBzeW5jaHJvbml6 YXRpb24gdG8gZmluaXNoCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9zdWJzY3JpcHRpb25f c3luYzsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiVVBEQVRF IHRlc3RfcmVwbGljYV9pZF9mdWxsIFNFVCB4ID0geCArIDEwMDAwIFdIRVJFIHggPSAxNTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKyMgc2hvdyB0 aGF0IGluZGV4IGlzIG5vdCB1c2VkIHdoZW4gZW5hYmxlX2luZGV4c2Nhbj1mYWxzZQorJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJzZWxlY3QgaWR4 X3NjYW4gZnJvbSBwZ19zdGF0X2FsbF9pbmRleGVzIHdoZXJlIGluZGV4cmVsbmFtZSA9ICd0ZXN0 X3JlcGxpY2FfaWRfZnVsbF9pZHgnIik7CitpcygkcmVzdWx0LCBxcSgwKSwgJ2Vuc3VyZSBzdWJz Y3JpYmVyIGhhcyBub3QgdXNlZCBpbmRleCB3aXRoIGVuYWJsZV9pbmRleHNjYW49ZmFsc2UnKTsK KworIyB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgaW5kZXgsIGRyb3AgdG8gc2ltcGxpZnkgdGhlIHRl c3RzCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiRFJPUCBJTkRF WCB0ZXN0X3JlcGxpY2FfaWRfZnVsbF9pZHgiKTsKKworIyBub3csIGNyZWF0ZSBhIHVuaXF1ZSBp bmRleCBhbmQgc2V0IHRoZSByZXBsaWNhCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJDUkVBVEUgVU5JUVVFIElOREVYIHRlc3RfcmVwbGljYV9pZF9mdWxsX3VuaXF1 ZSBPTiB0ZXN0X3JlcGxpY2FfaWRfZnVsbCh4KTsiKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVU5JUVVFIElOREVYIHRlc3RfcmVwbGljYV9pZF9m dWxsX3VuaXF1ZSBPTiB0ZXN0X3JlcGxpY2FfaWRfZnVsbCh4KTsiKTsKKworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgVEFCTEUgdGVzdF9yZXBsaWNhX2lk X2Z1bGwgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0X3JlcGxpY2FfaWRfZnVsbF91 bmlxdWU7Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxU RVIgVEFCTEUgdGVzdF9yZXBsaWNhX2lkX2Z1bGwgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRF WCB0ZXN0X3JlcGxpY2FfaWRfZnVsbF91bmlxdWU7Iik7CisKKyMgd2FpdCBmb3IgdGhlIHN5bmNo cm9uaXphdGlvbiB0byBmaW5pc2gKKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX3N1YnNjcmlw dGlvbl9zeW5jOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJV UERBVEUgdGVzdF9yZXBsaWNhX2lkX2Z1bGwgU0VUIHggPSB4ICsgMTAwMDAgV0hFUkUgeCA9IDE0 OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworIyBz aG93IHRoYXQgdGhlIHVuaXF1ZSBpbmRleCBvbiByZXBsaWNhIGlkZW50aXR5IGlzIHVzZWQgZXZl biB3aGVuIGVuYWJsZV9pbmRleHNjYW49ZmFsc2UKKyMgdGhpcyBpcyBhIGxlZ2FjeSBiZWhhdmlv cgorJG5vZGVfc3Vic2NyaWJlci0+cG9sbF9xdWVyeV91bnRpbCgKKwkncG9zdGdyZXMnLCBxe3Nl bGVjdCAoaWR4X3NjYW49MSkgZnJvbSBwZ19zdGF0X2FsbF9pbmRleGVzIHdoZXJlIGluZGV4cmVs bmFtZSA9ICd0ZXN0X3JlcGxpY2FfaWRfZnVsbF91bmlxdWUnfQorKSBvciBkaWUgIlRpbWVkIG91 dCB3aGlsZSB3YWl0aW5nIGVuc3VyaW5nIHN1YnNjcmliZXIgdXNlZCB1bmlxdWUgaW5kZXggYXMg cmVwbGljYSBpZGVudGl0eSBldmVuIHdpdGggZW5hYmxlX2luZGV4c2Nhbj1mYWxzZSI7CisKKyRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNU IGNvdW50KCopIEZST00gdGVzdF9yZXBsaWNhX2lkX2Z1bGwgV0hFUkUgeCBJTiAoMTQsMTUpIik7 CitpcygkcmVzdWx0LCBxcSgwKSwgJ2Vuc3VyZSB0aGUgcmVzdWx0cyBhcmUgYWNjdXJhdGUgZXZl biB3aXRoIGVuYWJsZV9pbmRleHNjYW49ZmFsc2UnKTsKKworIyBjbGVhbnVwIHB1YgorJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgUFVCTElDQVRJT04gdGFwX3B1 Yl9yZXBfZnVsbCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRS T1AgVEFCTEUgdGVzdF9yZXBsaWNhX2lkX2Z1bGwiKTsKKyMgY2xlYW51cCBzdWIKKyRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBTVUJTQ1JJUFRJT04gdGFwX3N1 Yl9yZXBfZnVsbCIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE Uk9QIFRBQkxFIHRlc3RfcmVwbGljYV9pZF9mdWxsIik7CisKKyRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBTWVNURU0gUkVTRVQgZW5hYmxlX2luZGV4c2Nh bjsiKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1Qg cGdfcmVsb2FkX2NvbmYoKTsiKTsKKworIyBUZXN0Y2FzZSBlbmQ6IFNVQlNDUklQVElPTiBCRUhB VklPUiBXSVRIIEVOQUJMRV9JTkRFWFNDQU4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorIyBUZXN0Y2FzZSBzdGFydDogU1VCU0NSSVBUSU9OIFVTRVMgSU5ERVggV0lUSCBQVUIvU1VC IGRpZmZlcmVudCBkYXRhCisjCisjIFRoZSBzdWJzY3JpYmVyIGhhcyBkdXBsaWNhdGUgdHVwbGVz IHRoYXQgcHVibGlzaGVyIGRvZXMgbm90IGhhdmUuCisjIFdoZW4gcHVibHNoZXIgdXBkYXRlcy9k ZWxldGVzIDEgcm93LCBzdWJzY3JpYmVyIHVzZXMgaW5kZXhlcyBhbmQKKyMgZXhhY3RseSB1cGRh dGVzL2RlbGV0ZXMgMSByb3cuCisjCisKKyMgY3JlYXRlIHRhYmxlcyBwdWIgYW5kIHN1YgorJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHRlc3Rf cmVwbGljYV9pZF9mdWxsICh4IGludCkiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJIkFMVEVSIFRBQkxFIHRlc3RfcmVwbGljYV9pZF9mdWxsIFJFUExJQ0EgSURF TlRJVFkgRlVMTDsiKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CSJDUkVBVEUgVEFCTEUgdGVzdF9yZXBsaWNhX2lkX2Z1bGwgKHggaW50KSIpOworJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBJTkRFWCB0ZXN0X3JlcGxp Y2FfaWRfZnVsbF9pZHggT04gdGVzdF9yZXBsaWNhX2lkX2Z1bGwoeCkiKTsKKworIyBpbnNlcnQg c29tZSBpbml0aWFsIGRhdGEKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIklOU0VSVCBJTlRPIHRlc3RfcmVwbGljYV9pZF9mdWxsIFNFTEVDVCBpIEZST00gZ2VuZXJh dGVfc2VyaWVzKDAsMjEpaTsiKTsKKworIyBjcmVhdGUgcHViL3N1YgorJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWJfcmVw X2Z1bGwgRk9SIFRBQkxFIHRlc3RfcmVwbGljYV9pZF9mdWxsIik7Ciskbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFNVQlNDUklQVElPTiB0YXBfc3ViX3Jl cF9mdWxsIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0ciBhcHBsaWNhdGlvbl9uYW1lPSRh cHBuYW1lJyBQVUJMSUNBVElPTiB0YXBfcHViX3JlcF9mdWxsIgorKTsKKworIyB3YWl0IGZvciBp bml0aWFsIHRhYmxlIHN5bmNocm9uaXphdGlvbiB0byBmaW5pc2gKKyRub2RlX3N1YnNjcmliZXIt PndhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jOworCisKKyMgZHVwbGljYXRlIHRoZSBkYXRhIGlu IHN1YnNjcmliZXIKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJ TlNFUlQgSU5UTyB0ZXN0X3JlcGxpY2FfaWRfZnVsbCBTRUxFQ1QgaSBGUk9NIGdlbmVyYXRlX3Nl cmllcygwLDIxKWk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5h bWUpOworCisjIG5vdywgd2UgdXBkYXRlIG9ubHkgMSByb3cgb24gdGhlIHB1Ymxpc2hlciBhbmQg ZXhwZWN0CisjIHRoZSBzdWJzY3JpYmVyIHRvIG9ubHkgdXBkYXRlIDEgcm93Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJVUERBVEUgdGVzdF9yZXBsaWNhX2lkX2Z1 bGwgU0VUIHggPSB4ICsgMSBXSEVSRSB4ID0gMTU7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisjIHdhaXQgdW50aWwgdGhlIGluZGV4IGlzIHVzZWQg b24gdGhlIHN1YnNjcmliZXIKKyRub2RlX3N1YnNjcmliZXItPnBvbGxfcXVlcnlfdW50aWwoCisJ J3Bvc3RncmVzJywgcXtzZWxlY3QgKGlkeF9zY2FuID0gMSkgZnJvbSBwZ19zdGF0X2FsbF9pbmRl eGVzIHdoZXJlIGluZGV4cmVsbmFtZSA9ICd0ZXN0X3JlcGxpY2FfaWRfZnVsbF9pZHgnO30KKykg b3IgZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgY2hlY2sgc3Vic2NyaWJlciB0YXBf c3ViX3JlcF9mdWxsIHVwZGF0ZXMgb25lIHJvdyB2aWEgaW5kZXgiOworCisjIHNpbWlsYXJseSBm b3IgZGVsZXRlCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJERUxF VEUgRlJPTSB0ZXN0X3JlcGxpY2FfaWRfZnVsbCBXSEVSRSB4ID0gMjA7Iik7Ciskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisjIHdhaXQgdW50aWwgdGhlIGlu ZGV4IGlzIHVzZWQgb24gdGhlIHN1YnNjcmliZXIKKyRub2RlX3N1YnNjcmliZXItPnBvbGxfcXVl cnlfdW50aWwoCisJJ3Bvc3RncmVzJywgcXtzZWxlY3QgKGlkeF9zY2FuID0gMikgZnJvbSBwZ19z dGF0X2FsbF9pbmRleGVzIHdoZXJlIGluZGV4cmVsbmFtZSA9ICd0ZXN0X3JlcGxpY2FfaWRfZnVs bF9pZHgnO30KKykgb3IgZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgY2hlY2sgc3Vi c2NyaWJlciB0YXBfc3ViX3JlcF9mdWxsIGRlbGV0ZXMgb25lIHJvdyB2aWEgaW5kZXgiOworCisj IG1ha2Ugc3VyZSB0aGF0IHRoZSBzdWJzY3JpYmVyIGhhcyB0aGUgY29ycmVjdCBkYXRhCisjIHdl IG9ubHkgZGVsZXRlZCAxIHJvdworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcGxpY2FfaWRfZnVs bCIpOworaXMoJHJlc3VsdCwgcXEoNDMpLCAnZW5zdXJlIHN1YnNjcmliZXIgaGFzIHRoZSBjb3Jy ZWN0IGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgdGVzdCcpOworCisjIGNsZWFudXAgcHViCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBQVUJMSUNBVElPTiB0YXBf cHViX3JlcF9mdWxsIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi RFJPUCBUQUJMRSB0ZXN0X3JlcGxpY2FfaWRfZnVsbCIpOworIyBjbGVhbnVwIHN1YgorJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFNVQlNDUklQVElPTiB0YXBf c3ViX3JlcF9mdWxsIik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkRST1AgVEFCTEUgdGVzdF9yZXBsaWNhX2lkX2Z1bGwiKTsKKworIyBUZXN0Y2FzZSBlbmQ6IFNV QlNDUklQVElPTiBVU0VTIElOREVYIFdJVEggUFVCL1NVQiBkaWZmZXJlbnQgZGF0YQorIyA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorCiskbm9kZV9zdWJzY3JpYmVyLT5zdG9wKCdmYXN0Jyk7Ciskbm9kZV9wdWJsaXNo ZXItPnN0b3AoJ2Zhc3QnKTsKKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjM0LjEKCg== --000000000000c5224205f5ff9514--