Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1raoh3-00Bayj-78 for pgsql-hackers@arkaria.postgresql.org; Fri, 16 Feb 2024 03:15:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1raoh1-00GwEH-VE for pgsql-hackers@arkaria.postgresql.org; Fri, 16 Feb 2024 03:15:15 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1raoh0-00GwDy-7e for pgsql-hackers@lists.postgresql.org; Fri, 16 Feb 2024 03:15:15 +0000 Received: from fout1-smtp.messagingengine.com ([103.168.172.144]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1raogt-007R5L-HL for pgsql-hackers@lists.postgresql.org; Fri, 16 Feb 2024 03:15:13 +0000 Received: from compute2.internal (compute2.nyi.internal [10.202.2.46]) by mailfout.nyi.internal (Postfix) with ESMTP id 1AC7813800A1; Thu, 15 Feb 2024 22:15:05 -0500 (EST) Received: from imap49 ([10.202.2.99]) by compute2.internal (MEProxy); Thu, 15 Feb 2024 22:15:05 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=eulerto.com; h= cc:cc:content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm2; t=1708053305; x=1708139705; bh=SNhGs10a0m c2niX1YHwigi2+etgubcOQ1EX1QfwchiQ=; b=THXSGP+KV+RjwOVWDw7mcEhKO8 MmxpTXlWeFe/BIV2Y6vv2th4LmeACR13umeKfZ4LygbrTTNhkvCprDS1AnMkEzTw 8wbPxCSVbFw68g5kqOJjxNUAUJxUP9JC+PG1QlY0x+y9iVcZXRvgocBOoqLtvMuZ cbcKdoeIdQl8Ltwf1QZ1BJg27aYwt/rfvfWp7DprAkV/Mf8zoY2xwdFqzJcO2dsX hEpvxstjvLiO2MIwTDAVRFmT9rLBgIxZHu2nhxe/0fD6HDYsdu0HqS3Qxfcxtk4A v/cXdxgNWfHSOTZ4Up9E2tlRxSzzbkrpUT9ycX1SllBG+G6N3Y/qMqzaKeIA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm1; t=1708053305; x=1708139705; bh=SNhGs10a0mc2niX1YHwigi2+etgu bcOQ1EX1QfwchiQ=; b=kCfbpSxveCgy2Pzk15fjS/aaywfAIFFZNlVhIts/b7rD UwLcel6eD8qGQIB3oYPLWQePWio2kxvzb5x/yE2bk8s9y8olm24r6G1gMF4InL6h rSMHP/7Ake/ckWkoLSQ6JX0LsQ2B2wzi+h3+ntYAjcgwhwYm7yG5uxXLB6OLyOAI gqOFum4HP9H2MwRvgj2b5QGbZmz/7ycQwz0+xTd2yhNTceJP8Q+KKahG0hHfHtu7 H5nb8HYDr38Dm5NaA41r9pTtyKrJEM9wO/oj/dzI6CCCC3Z0/seJZ/PELgf/I1pv QK+NTzPwDAKgdacrNykSRoxXBHs7Gl+rFA3788hPlw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvddugdehkecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefofgggkfgjfhffhffvvefutgesmhdtreerreertdenucfhrhhomhepfdfguhhl vghrucfvrghvvghirhgrfdcuoegvuhhlvghrsegvuhhlvghrthhordgtohhmqeenucggtf frrghtthgvrhhnpeeuhfejfedufeefuefgheetledvgeekkeeuueduvefgudfhlefghfel ueehtdeihfenucffohhmrghinhepvghnthgvrhhprhhishgvuggsrdgtohhmnecuvehluh hsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepvghulhgvrhesvghu lhgvrhhtohdrtghomh X-ME-Proxy: Feedback-ID: i0c21471d:Fastmail Received: by mailuser.nyi.internal (Postfix, from userid 501) id C70DC15A0093; Thu, 15 Feb 2024 22:15:04 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface User-Agent: Cyrus-JMAP/3.11.0-alpha0-144-ge5821d614e-fm-20240125.002-ge5821d61 MIME-Version: 1.0 Message-Id: <2231a04b-f2d4-4a4e-b5cd-56be8b002427@app.fastmail.com> In-Reply-To: References: <9a9c7e65-c47b-4400-a63e-ac6169c0860e@app.fastmail.com> <8d8d9960-8130-4216-b0e4-adf36b8b1c43@app.fastmail.com> <370673e8-e2da-4249-8f07-cb67e9d9c20e@app.fastmail.com> <34075bd4-c85d-4654-a782-0cd6713b2c89@app.fastmail.com> <2edde173-5ff9-45fd-b881-cd04eb13049f@app.fastmail.com> Date: Fri, 16 Feb 2024 00:14:38 -0300 From: "Euler Taveira" To: "kuroda.hayato@fujitsu.com" Cc: "pgsql-hackers@lists.postgresql.org" , "vignesh C" , "Michael Paquier" , "Peter Eisentraut" , "Andres Freund" , "Ashutosh Bapat" , "Amit Kapila" , "Shlok Kyal" , =?UTF-8?Q?Fabr=C3=ADzio_de_Royes_Mello?= Subject: Re: speed up a logical replica setup Content-Type: multipart/mixed; boundary=a6a5fa72800745fab7ab24fea6cb5c0c List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --a6a5fa72800745fab7ab24fea6cb5c0c Content-Type: multipart/alternative; boundary=66581bd93d384489b801de935d647a28 --66581bd93d384489b801de935d647a28 Content-Type: text/plain On Thu, Feb 15, 2024, at 8:23 AM, Hayato Kuroda (Fujitsu) wrote: > > Points raised by me [1] are not solved yet. > > > > * What if the target version is PG16-? pg_ctl and pg_resetwal won't work. $ pg_ctl start -D /tmp/blah waiting for server to start.... 2024-02-15 23:50:03.448 -03 [364610] FATAL: database files are incompatible with server 2024-02-15 23:50:03.448 -03 [364610] DETAIL: The data directory was initialized by PostgreSQL version 16, which is not compatible with this version 17devel. stopped waiting pg_ctl: could not start server Examine the log output. $ pg_resetwal -D /tmp/blah pg_resetwal: error: data directory is of wrong version pg_resetwal: detail: File "PG_VERSION" contains "16", which is not compatible with this program's version "17". > > * What if the found executables have diffent version with pg_createsubscriber? The new code take care of it. > > * What if the target is sending WAL to another server? > > I.e., there are clusters like `node1->node2-.node3`, and the target is node2. The new code detects if the server is in recovery and aborts as you suggested. A new option can be added to ignore the fact there are servers receiving WAL from it. > > * Can we really cleanup the standby in case of failure? > > Shouldn't we suggest to remove the target once? If it finishes the promotion, no. I adjusted the cleanup routine a bit to avoid it. However, we should provide instructions to inform the user that it should create a fresh standby and try again. > > * Can we move outputs to stdout? Are you suggesting to use another logging framework? It is not a good idea because each client program is already using common/logging.c. > 1. > Cfbot got angry [1]. This is because WIFEXITED and others are defined in , > but the inclusion was removed per comment. Added the inclusion again. Ok. > 2. > As Shubham pointed out [3], when we convert an intermediate node of cascading replication, > the last node would stuck. This is because a walreciever process requires nodes have the same > system identifier (in WalReceiverMain), but it would be changed by pg_createsubscriebr. Hopefully it was fixed. > 3. > Moreover, when we convert a last node of cascade, it won't work well. Because we cannot create > publications on the standby node. Ditto. > 4. > If the standby server was initialized as PG16-, this command would fail. > Because the API of pg_logical_create_replication_slot() were changed. See comment above. > 5. > Also, used pg_ctl commands must have same versions with the instance. > I think we should require all the executables and servers must be a same major version. It is enforced by the new code. See find_other_exec() in get_exec_path(). > Based on them, below part describes attached ones: Thanks for another review. I'm sharing a new patch to merge a bunch of improvements and fixes. Comments are below. v20-0002: I did some extensive documentation changes (including some of them related to the changes in the new patch). I will defer its update to check v20-0002. It will be included in the next one. v20-0003: I included most of it. There are a few things that pgindent reverted so I didn't apply. I also didn't like some SQL commands that were broken into multiple lines with spaces at the beginning. It seems nice in the code but it is not in the output. v20-0004: Nice catch. Applied. v20-0005: Applied. v20-0006: I prefer to remove the comment. v20-0007: I partially applied it. I only removed the states that were not used and propose another dry run mode message. Maybe it is clear than it was. v20-0008: I refactored the get_bin_directory code. Under reflection, I reverted the unified binary directory that we agreed a few days ago. The main reason is to provide a specific error message for each program it is using. The get_exec_path will check if the program is available in the same directory as pg_createsubscriber and if it has the same version. An absolute path is returned and is used by some functions. v20-0009: to be reviewed. v20-0010: As I said above, this code was refactored so I didn't apply this one. v20-0011: Do we really want to interrupt the recovery if the network was momentarily interrupted or if the OS killed walsender? Recovery is critical for the process. I think we should do our best to be resilient and deliver all changes required by the new subscriber. The proposal is not correct because the query return no tuples if it is disconnected so you cannot PQgetvalue(). The retry interval (the time that ServerLoop() will create another walreceiver) is determined by DetermineSleepTime() and it is a maximum of 5 seconds (SIGKILL_CHILDREN_AFTER_SECS). One idea is to retry 2 or 3 times before give up using the pg_stat_wal_receiver query. Do you have a better plan? v20-0012: I applied a different patch to accomplish the same thing. I included a refactor around pg_is_in_recovery() function to be used in other 2 points. Besides that, I changed some SQL commands to avoid having superfluous whitespace in it. I also added a test for cascaded replication scenario. And clean up 041 test a bit. I didn't provide an updated documentation because I want to check v20-0002. It is on my list to check v20-0009. -- Euler Taveira EDB https://www.enterprisedb.com/ --66581bd93d384489b801de935d647a28 Content-Type: text/html Content-Transfer-Encoding: quoted-printable
On Thu, Feb 15,= 2024, at 8:23 AM, Hayato Kuroda (Fujitsu) wrote:
> Points raised by me [1] are = not solved yet.

> * What if th= e target version is PG16-?

pg_= ctl and pg_resetwal won't work.

$ pg_ctl st= art -D /tmp/blah
waiting for server to start....
=
2024-02-15 23:50:03.448 -03 [364610] FATAL:  database files ar= e incompatible with server
2024-02-15 23:50:03.448 -03 [36= 4610] DETAIL:  The data directory was initialized by PostgreSQL ver= sion 16, which is not compatible with this version 17devel.
stopped waiting
pg_ctl: could not start server
=
Examine the log output.

$ pg_resetwal = -D /tmp/blah
pg_resetwal: error: data directory is of wron= g version
pg_resetwal: detail: File "PG_VERSION" contains = "16", which is not compatible with this program's version "17".

>= * What if the found executables have diffent version with pg_createsubs= criber?

The new code take care= of it.

> * What if the target is sending WAL to another server?<= br>
>    I.e., there are clusters like `node= 1->node2-.node3`, and the target is node2.

The new code detects if the server is in recovery and ab= orts as you suggested.
A new option can be added to ignore= the fact there are servers receiving WAL
from it.

>= ; * Can we really cleanup the standby in case of failure?
= >    Shouldn't we suggest to remove the target once?

If it finishes the promotion, n= o. I adjusted the cleanup routine a bit to avoid
it. Howev= er, we should provide instructions to inform the user that it should
=
create a fresh standby and try again.

> * Can we move = outputs to stdout?

Are you sug= gesting to use another logging framework? It is not a good idea
because each client program is already using common/logging.c.
=

1.
Cfbot got angry [1]. This is because WIFEXITED and oth= ers are defined in <sys/wait.h>,
but the inclusion w= as removed per comment. Added the inclusion again.

Ok.

2.
As Shubham pointed out [3], wh= en we convert an intermediate node of cascading replication,
the last node would stuck. This is because a walreciever process requ= ires nodes have the same
system identifier (in WalReceiver= Main), but it would be changed by pg_createsubscriebr.

Hopefully it was fixed.

3.
Moreov= er, when we convert a last node of cascade, it won't work well. Because = we cannot create
publications on the standby node.

Ditto.

4.
If the standb= y server was initialized as PG16-, this command would fail.
Because the API of pg_logical_create_replication_slot() were changed.<= br>

See comment above.
<= br>
5.
Also, used pg_ctl commands must have same versions with the instan= ce.
I think we should require all the executables and serv= ers must be a same major version.

<= div>It is enforced by the new code. See find_other_exec() in get_exec_pa= th().

Based on them, below part describes attached ones:

Thanks for another review. I'm sharing a new = patch to merge a bunch of
improvements and fixes. Comments= are below.

v20-0002: I did some extensive = documentation changes (including some of them
related to t= he changes in the new patch). I will defer its update to check
=
v20-0002. It will be included in the next one.

v20-0003: I included most of it. There are a few things that pg= indent reverted
so I didn't apply. I also didn't like some= SQL commands that were broken into
multiple lines with sp= aces at the beginning. It seems nice in the code but it
is= not in the output.

v20-0004: Nice catch. A= pplied.

v20-0005: Applied.
v20-0006: I prefer to remove the comment.
v20-0007: I partially applied it. I only removed the states = that were not used
and propose another dry run mode messag= e. Maybe it is clear than it was.

v20-0008:= I refactored the get_bin_directory code. Under reflection, I reverted
the unified binary directory that we agreed a few days ago.= The main reason is
to provide a specific error message fo= r each program it is using. The
get_exec_path will check i= f the program is available in the same directory as
pg_cre= atesubscriber and if it has the same version. An absolute path is
returned and is used by some functions.

=
v20-0009: to be reviewed.

v20-0010: As= I said above, this code was refactored so I didn't apply this one.
<= /div>

v20-0011: Do we really want to interrupt the re= covery if the network was
momentarily interrupted or if th= e OS killed walsender? Recovery is critical for
the proces= s. I think we should do our best to be resilient and deliver all
changes required by the new subscriber. The proposal is not corre= ct because the
query return no tuples if it is disconnecte= d so you cannot PQgetvalue(). The
retry interval (the time= that ServerLoop() will create another walreceiver) is
det= ermined by DetermineSleepTime() and it is a maximum of 5 seconds
(SIGKILL_CHILDREN_AFTER_SECS). One idea is to retry 2 or 3 times = before give up
using the pg_stat_wal_receiver query. Do yo= u have a better plan?

v20-0012: I applied a= different patch to accomplish the same thing. I included
= a refactor around pg_is_in_recovery() function to be used in other 2 poi= nts.

Besides that, I changed some SQL comma= nds to avoid having superfluous
whitespace in it. I also a= dded a test for cascaded replication scenario. And
clean u= p 041 test a bit.

I didn't provide an updat= ed documentation because I want to check v20-0002. It
is o= n my list to check v20-0009.


--
Euler Taveira

--66581bd93d384489b801de935d647a28-- --a6a5fa72800745fab7ab24fea6cb5c0c Content-Disposition: attachment; filename*0="v21-0001-Creates-a-new-logical-replica-from-a-standby-ser.pat"; filename*1="ch" Content-Type: text/x-patch; name="=?UTF-8?Q?v21-0001-Creates-a-new-logical-replica-from-a-standby-ser.patc?= =?UTF-8?Q?h?=" Content-Transfer-Encoding: BASE64 RnJvbSAwMDczZTFmN2VhNWIxYzIyNWU3NzM3MDdjYmJlNjdjYjE1OTM4MjNlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBFdWxlciBUYXZlaXJhIDxldWxlci50YXZlaXJhQGVu dGVycHJpc2VkYi5jb20+CkRhdGU6IE1vbiwgNSBKdW4gMjAyMyAxNDozOTo0MCAtMDQwMApT dWJqZWN0OiBbUEFUQ0ggdjIxXSBDcmVhdGVzIGEgbmV3IGxvZ2ljYWwgcmVwbGljYSBmcm9t IGEgc3RhbmRieSBzZXJ2ZXIKCkEgbmV3IHRvb2wgY2FsbGVkIHBnX2NyZWF0ZXN1YnNjcmli ZXIgY2FuIGNvbnZlcnQgYSBwaHlzaWNhbCByZXBsaWNhCmludG8gYSBsb2dpY2FsIHJlcGxp Y2EuIEl0IHJ1bnMgb24gdGhlIHRhcmdldCBzZXJ2ZXIgYW5kIHNob3VsZCBiZSBhYmxlCnRv IGNvbm5lY3QgdG8gdGhlIHNvdXJjZSBzZXJ2ZXIgKHB1Ymxpc2hlcikgYW5kIHRoZSB0YXJn ZXQgc2VydmVyCihzdWJzY3JpYmVyKS4KClRoZSBjb252ZXJzaW9uIHJlcXVpcmVzIGEgZmV3 IHN0ZXBzLiBDaGVjayBpZiB0aGUgdGFyZ2V0IGRhdGEgZGlyZWN0b3J5CmhhcyB0aGUgc2Ft ZSBzeXN0ZW0gaWRlbnRpZmllciB0aGFuIHRoZSBzb3VyY2UgZGF0YSBkaXJlY3RvcnkuIFN0 b3AgdGhlCnRhcmdldCBzZXJ2ZXIgaWYgaXQgaXMgcnVubmluZyBhcyBhIHN0YW5kYnkgc2Vy dmVyLiBDcmVhdGUgb25lCnJlcGxpY2F0aW9uIHNsb3QgcGVyIHNwZWNpZmllZCBkYXRhYmFz ZSBvbiB0aGUgc291cmNlIHNlcnZlci4gT25lCmFkZGl0aW9uYWwgcmVwbGljYXRpb24gc2xv dCBpcyBjcmVhdGVkIGF0IHRoZSBlbmQgdG8gZ2V0IHRoZSBjb25zaXN0ZW50CkxTTiAoVGhp cyBjb25zaXN0ZW50IExTTiB3aWxsIGJlIHVzZWQgYXMgKGEpIGEgc3RvcHBpbmcgcG9pbnQg Zm9yIHRoZQpyZWNvdmVyeSBwcm9jZXNzIGFuZCAoYikgYSBzdGFydGluZyBwb2ludCBmb3Ig dGhlIHN1YnNjcmlwdGlvbnMpLiBXcml0ZQpyZWNvdmVyeSBwYXJhbWV0ZXJzIGludG8gdGhl IHRhcmdldCBkYXRhIGRpcmVjdG9yeSBhbmQgc3RhcnQgdGhlIHRhcmdldApzZXJ2ZXIgKFdh aXQgdW50aWwgdGhlIHRhcmdldCBzZXJ2ZXIgaXMgcHJvbW90ZWQpLiBDcmVhdGUgb25lCnB1 YmxpY2F0aW9uIChGT1IgQUxMIFRBQkxFUykgcGVyIHNwZWNpZmllZCBkYXRhYmFzZSBvbiB0 aGUgc291cmNlCnNlcnZlci4gQ3JlYXRlIG9uZSBzdWJzY3JpcHRpb24gcGVyIHNwZWNpZmll ZCBkYXRhYmFzZSBvbiB0aGUgdGFyZ2V0CnNlcnZlciAoVXNlIHJlcGxpY2F0aW9uIHNsb3Qg YW5kIHB1YmxpY2F0aW9uIGNyZWF0ZWQgaW4gYSBwcmV2aW91cyBzdGVwLgpEb24ndCBlbmFi bGUgdGhlIHN1YnNjcmlwdGlvbnMgeWV0KS4gU2V0cyB0aGUgcmVwbGljYXRpb24gcHJvZ3Jl c3MgdG8KdGhlIGNvbnNpc3RlbnQgTFNOIHRoYXQgd2FzIGdvdCBpbiBhIHByZXZpb3VzIHN0 ZXAuIEVuYWJsZSB0aGUKc3Vic2NyaXB0aW9uIGZvciBlYWNoIHNwZWNpZmllZCBkYXRhYmFz ZSBvbiB0aGUgdGFyZ2V0IHNlcnZlci4gIFN0b3AgdGhlCnRhcmdldCBzZXJ2ZXIuIENoYW5n ZSB0aGUgc3lzdGVtIGlkZW50aWZpZXIgZnJvbSB0aGUgdGFyZ2V0IHNlcnZlci4KCkRlcGVu ZGluZyBvbiB5b3VyIHdvcmtsb2FkIGFuZCBkYXRhYmFzZSBzaXplLCBjcmVhdGluZyBhIGxv Z2ljYWwgcmVwbGljYQpjb3VsZG4ndCBiZSBhbiBvcHRpb24gZHVlIHRvIHJlc291cmNlIGNv bnN0cmFpbnRzIChXQUwgYmFja2xvZyBzaG91bGQgYmUKYXZhaWxhYmxlIHVudGlsIGFsbCB0 YWJsZSBkYXRhIGlzIHN5bmNocm9uaXplZCkuIFRoZSBpbml0aWFsIGRhdGEgY29weQphbmQg dGhlIHJlcGxpY2F0aW9uIHByb2dyZXNzIHRlbmRzIHRvIGJlIGZhc3RlciBvbiBhIHBoeXNp Y2FsIHJlcGxpY2EuClRoZSBwdXJwb3NlIG9mIHRoaXMgdG9vbCBpcyB0byBzcGVlZCB1cCBh IGxvZ2ljYWwgcmVwbGljYSBzZXR1cC4KLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL2FsbGZpbGVz LnNnbWwgICAgICAgICAgICAgICAgfCAgICAxICsKIGRvYy9zcmMvc2dtbC9yZWYvcGdfY3Jl YXRlc3Vic2NyaWJlci5zZ21sICAgICB8ICAzMjAgKysrCiBkb2Mvc3JjL3NnbWwvcmVmZXJl bmNlLnNnbWwgICAgICAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9iaW4vcGdfYmFzZWJh Y2t1cC8uZ2l0aWdub3JlICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL2Jpbi9wZ19iYXNl YmFja3VwL01ha2VmaWxlICAgICAgICAgICAgICAgIHwgICAgOCArLQogc3JjL2Jpbi9wZ19i YXNlYmFja3VwL21lc29uLmJ1aWxkICAgICAgICAgICAgIHwgICAxOSArCiBzcmMvYmluL3Bn X2Jhc2ViYWNrdXAvcGdfY3JlYXRlc3Vic2NyaWJlci5jICAgfCAxOTcyICsrKysrKysrKysr KysrKysrCiAuLi4vdC8wNDBfcGdfY3JlYXRlc3Vic2NyaWJlci5wbCAgICAgICAgICAgICAg fCAgIDM5ICsKIC4uLi90LzA0MV9wZ19jcmVhdGVzdWJzY3JpYmVyX3N0YW5kYnkucGwgICAg ICB8ICAyMTcgKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAg ICAgICB8ICAgIDIgKwogMTAgZmlsZXMgY2hhbmdlZCwgMjU3OSBpbnNlcnRpb25zKCspLCAx IGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZG9jL3NyYy9zZ21sL3JlZi9wZ19j cmVhdGVzdWJzY3JpYmVyLnNnbWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2Jh c2ViYWNrdXAvcGdfY3JlYXRlc3Vic2NyaWJlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L2Jpbi9wZ19iYXNlYmFja3VwL3QvMDQwX3BnX2NyZWF0ZXN1YnNjcmliZXIucGwKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2Jhc2ViYWNrdXAvdC8wNDFfcGdfY3JlYXRlc3Vi c2NyaWJlcl9zdGFuZGJ5LnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9hbGxm aWxlcy5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9hbGxmaWxlcy5zZ21sCmluZGV4IDRhNDI5 OTliMTguLmEyYjVlZWEwZTAgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmls ZXMuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2FsbGZpbGVzLnNnbWwKQEAgLTIxNCw2 ICsyMTQsNyBAQCBDb21wbGV0ZSBsaXN0IG9mIHVzYWJsZSBzZ21sIHNvdXJjZSBmaWxlcyBp biB0aGlzIGRpcmVjdG9yeS4KIDwhRU5USVRZIHBnUmVzZXR3YWwgICAgICAgICBTWVNURU0g InBnX3Jlc2V0d2FsLnNnbWwiPgogPCFFTlRJVFkgcGdSZXN0b3JlICAgICAgICAgIFNZU1RF TSAicGdfcmVzdG9yZS5zZ21sIj4KIDwhRU5USVRZIHBnUmV3aW5kICAgICAgICAgICBTWVNU RU0gInBnX3Jld2luZC5zZ21sIj4KKzwhRU5USVRZIHBnQ3JlYXRlU3Vic2NyaWJlciBTWVNU RU0gInBnX2NyZWF0ZXN1YnNjcmliZXIuc2dtbCI+CiA8IUVOVElUWSBwZ1ZlcmlmeUJhY2t1 cCAgICAgU1lTVEVNICJwZ192ZXJpZnliYWNrdXAuc2dtbCI+CiA8IUVOVElUWSBwZ3Rlc3Rm c3luYyAgICAgICAgU1lTVEVNICJwZ3Rlc3Rmc3luYy5zZ21sIj4KIDwhRU5USVRZIHBndGVz dHRpbWluZyAgICAgICBTWVNURU0gInBndGVzdHRpbWluZy5zZ21sIj4KZGlmZiAtLWdpdCBh L2RvYy9zcmMvc2dtbC9yZWYvcGdfY3JlYXRlc3Vic2NyaWJlci5zZ21sIGIvZG9jL3NyYy9z Z21sL3JlZi9wZ19jcmVhdGVzdWJzY3JpYmVyLnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uZjUyMzg3NzFiNwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9z cmMvc2dtbC9yZWYvcGdfY3JlYXRlc3Vic2NyaWJlci5zZ21sCkBAIC0wLDAgKzEsMzIwIEBA Cis8IS0tCitkb2Mvc3JjL3NnbWwvcmVmL3BnX2NyZWF0ZXN1YnNjcmliZXIuc2dtbAorUG9z dGdyZVNRTCBkb2N1bWVudGF0aW9uCistLT4KKworPHJlZmVudHJ5IGlkPSJhcHAtcGdjcmVh dGVzdWJzY3JpYmVyIj4KKyA8aW5kZXh0ZXJtIHpvbmU9ImFwcC1wZ2NyZWF0ZXN1YnNjcmli ZXIiPgorICA8cHJpbWFyeT5wZ19jcmVhdGVzdWJzY3JpYmVyPC9wcmltYXJ5PgorIDwvaW5k ZXh0ZXJtPgorCisgPHJlZm1ldGE+CisgIDxyZWZlbnRyeXRpdGxlPjxhcHBsaWNhdGlvbj5w Z19jcmVhdGVzdWJzY3JpYmVyPC9hcHBsaWNhdGlvbj48L3JlZmVudHJ5dGl0bGU+CisgIDxt YW52b2xudW0+MTwvbWFudm9sbnVtPgorICA8cmVmbWlzY2luZm8+QXBwbGljYXRpb248L3Jl Zm1pc2NpbmZvPgorIDwvcmVmbWV0YT4KKworIDxyZWZuYW1lZGl2PgorICA8cmVmbmFtZT5w Z19jcmVhdGVzdWJzY3JpYmVyPC9yZWZuYW1lPgorICA8cmVmcHVycG9zZT5jb252ZXJ0IGEg cGh5c2ljYWwgcmVwbGljYSBpbnRvIGEgbmV3IGxvZ2ljYWwgcmVwbGljYTwvcmVmcHVycG9z ZT4KKyA8L3JlZm5hbWVkaXY+CisKKyA8cmVmc3lub3BzaXNkaXY+CisgIDxjbWRzeW5vcHNp cz4KKyAgIDxjb21tYW5kPnBnX2NyZWF0ZXN1YnNjcmliZXI8L2NvbW1hbmQ+CisgICA8YXJn IHJlcD0icmVwZWF0Ij48cmVwbGFjZWFibGU+b3B0aW9uPC9yZXBsYWNlYWJsZT48L2FyZz4K KyAgIDxncm91cCBjaG9pY2U9InBsYWluIj4KKyAgICA8Z3JvdXAgY2hvaWNlPSJyZXEiPgor ICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LUQ8L29wdGlvbj4gPC9hcmc+Cisg ICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLXBnZGF0YTwvb3B0aW9uPjwvYXJn PgorICAgIDwvZ3JvdXA+CisgICAgPHJlcGxhY2VhYmxlPmRhdGFkaXI8L3JlcGxhY2VhYmxl PgorICAgIDxncm91cCBjaG9pY2U9InJlcSI+CisgICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+ PG9wdGlvbj4tUDwvb3B0aW9uPjwvYXJnPgorICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxv cHRpb24+LS1wdWJsaXNoZXItc2VydmVyPC9vcHRpb24+PC9hcmc+CisgICAgPC9ncm91cD4K KyAgICA8cmVwbGFjZWFibGU+Y29ubnN0cjwvcmVwbGFjZWFibGU+CisgICAgPGdyb3VwIGNo b2ljZT0icmVxIj4KKyAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi1TPC9vcHRp b24+PC9hcmc+CisgICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLXN1YnNjcmli ZXItc2VydmVyPC9vcHRpb24+PC9hcmc+CisgICAgPC9ncm91cD4KKyAgICA8cmVwbGFjZWFi bGU+Y29ubnN0cjwvcmVwbGFjZWFibGU+CisgICAgPGdyb3VwIGNob2ljZT0icmVxIj4KKyAg ICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi1kPC9vcHRpb24+PC9hcmc+CisgICAg IDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLWRhdGFiYXNlPC9vcHRpb24+PC9hcmc+ CisgICAgPC9ncm91cD4KKyAgICA8cmVwbGFjZWFibGU+ZGJuYW1lPC9yZXBsYWNlYWJsZT4K KyAgIDwvZ3JvdXA+CisgIDwvY21kc3lub3BzaXM+CisgPC9yZWZzeW5vcHNpc2Rpdj4KKwor IDxyZWZzZWN0MT4KKyAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKyAgPHBhcmE+Cisg ICAgPGFwcGxpY2F0aW9uPnBnX2NyZWF0ZXN1YnNjcmliZXI8L2FwcGxpY2F0aW9uPiBjcmVh dGVzIGEgbmV3IGxvZ2ljYWwKKyAgICByZXBsaWNhIGZyb20gYSBwaHlzaWNhbCBzdGFuZGJ5 IHNlcnZlci4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxhcHBsaWNhdGlvbj5w Z19jcmVhdGVzdWJzY3JpYmVyPC9hcHBsaWNhdGlvbj4gc2hvdWxkIGJlIHJ1biBhdCB0aGUg dGFyZ2V0CisgICBzZXJ2ZXIuIFRoZSBzb3VyY2Ugc2VydmVyIChrbm93biBhcyBwdWJsaXNo ZXIgc2VydmVyKSBzaG91bGQgYWNjZXB0IGxvZ2ljYWwKKyAgIHJlcGxpY2F0aW9uIGNvbm5l Y3Rpb25zIGZyb20gdGhlIHRhcmdldCBzZXJ2ZXIgKGtub3duIGFzIHN1YnNjcmliZXIgc2Vy dmVyKS4KKyAgIFRoZSB0YXJnZXQgc2VydmVyIHNob3VsZCBhY2NlcHQgbG9jYWwgbG9naWNh bCByZXBsaWNhdGlvbiBjb25uZWN0aW9uLgorICA8L3BhcmE+CisgPC9yZWZzZWN0MT4KKwor IDxyZWZzZWN0MT4KKyAgPHRpdGxlPk9wdGlvbnM8L3RpdGxlPgorCisgICA8cGFyYT4KKyAg ICA8YXBwbGljYXRpb24+cGdfY3JlYXRlc3Vic2NyaWJlcjwvYXBwbGljYXRpb24+IGFjY2Vw dHMgdGhlIGZvbGxvd2luZworICAgIGNvbW1hbmQtbGluZSBhcmd1bWVudHM6CisKKyAgICA8 dmFyaWFibGVsaXN0PgorICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlv bj4tRCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZGlyZWN0b3J5PC9yZXBsYWNl YWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tcGdkYXRhPTxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5kaXJlY3Rvcnk8L3JlcGxhY2VhYmxlPjwv b3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAg ICAgVGhlIHRhcmdldCBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBhIGNsdXN0ZXIgZGlyZWN0 b3J5IGZyb20gYSBwaHlzaWNhbAorICAgICAgICByZXBsaWNhLgorICAgICAgIDwvcGFyYT4K KyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgIDx2YXJs aXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1QIDxyZXBsYWNlYWJsZSBjbGFzcz0i cGFyYW1ldGVyIj5jb25uc3RyPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAg ICA8dGVybT48b3B0aW9uPi0tcHVibGlzaGVyLXNlcnZlcj08cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+Y29ubnN0cjwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAg ICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgY29ubmVjdGlvbiBz dHJpbmcgdG8gdGhlIHB1Ymxpc2hlci4gRm9yIGRldGFpbHMgc2VlIDx4cmVmIGxpbmtlbmQ9 ImxpYnBxLWNvbm5zdHJpbmciLz4uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRl bT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAg IDx0ZXJtPjxvcHRpb24+LVMgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNvbm5z dHI8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+ LS1zdWJzY3JpYmVyLXNlcnZlcj08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Y29u bnN0cjwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgor ICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgY29ubmVjdGlvbiBzdHJpbmcgdG8gdGhlIHN1 YnNjcmliZXIuIEZvciBkZXRhaWxzIHNlZSA8eHJlZiBsaW5rZW5kPSJsaWJwcS1jb25uc3Ry aW5nIi8+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFy bGlzdGVudHJ5PgorCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9u Pi1kIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5kYm5hbWU8L3JlcGxhY2VhYmxl Pjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1kYXRhYmFzZT08cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZGJuYW1lPC9yZXBsYWNlYWJsZT48L29wdGlv bj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRo ZSBkYXRhYmFzZSBuYW1lIHRvIGNyZWF0ZSB0aGUgc3Vic2NyaXB0aW9uLiBNdWx0aXBsZSBk YXRhYmFzZXMgY2FuIGJlCisgICAgICAgIHNlbGVjdGVkIGJ5IHdyaXRpbmcgbXVsdGlwbGUg PG9wdGlvbj4tZDwvb3B0aW9uPiBzd2l0Y2hlcy4KKyAgICAgICA8L3BhcmE+CisgICAgICA8 L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFybGlzdGVudHJ5 PgorICAgICAgPHRlcm0+PG9wdGlvbj4tbjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJt PjxvcHRpb24+LS1kcnktcnVuPC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgor ICAgICAgIDxwYXJhPgorICAgICAgICBEbyBldmVyeXRoaW5nIGV4Y2VwdCBhY3R1YWxseSBt b2RpZnlpbmcgdGhlIHRhcmdldCBkaXJlY3RvcnkuCisgICAgICAgPC9wYXJhPgorICAgICAg PC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZhcmxpc3RlbnRy eT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LXI8L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVy bT48b3B0aW9uPi0tcmV0YWluPC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgor ICAgICAgIDxwYXJhPgorICAgICAgICBSZXRhaW4gbG9nIGZpbGUgZXZlbiBhZnRlciBzdWNj ZXNzZnVsIGNvbXBsZXRpb24uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4K KyAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICA8 dGVybT48b3B0aW9uPi10IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5zZWNvbmRz PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICAgPHRlcm0+PG9wdGlvbj4t LXJlY292ZXJ5LXRpbWVvdXQ9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnNlY29u ZHM8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzZWNvbmRzIHRv IHdhaXQgZm9yIHJlY292ZXJ5IHRvIGVuZC4gU2V0dGluZyB0byAwCisgICAgICAgIGRpc2Fi bGVzLiBUaGUgZGVmYXVsdCBpcyAwLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xpc3Rp dGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFybGlzdGVudHJ5PgorICAg ICAgPHRlcm0+PG9wdGlvbj4tdjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRp b24+LS12ZXJib3NlPC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAg IDxwYXJhPgorICAgICAgICBFbmFibGVzIHZlcmJvc2UgbW9kZS4gVGhpcyB3aWxsIGNhdXNl CisgICAgICAgIDxhcHBsaWNhdGlvbj5wZ19jcmVhdGVzdWJzY3JpYmVyPC9hcHBsaWNhdGlv bj4gdG8gb3V0cHV0IHByb2dyZXNzIG1lc3NhZ2VzCisgICAgICAgIGFuZCBkZXRhaWxlZCBp bmZvcm1hdGlvbiBhYm91dCBlYWNoIHN0ZXAgdG8gc3RhbmRhcmQgZXJyb3IuCisgICAgICAg IFJlcGVhdGluZyB0aGUgb3B0aW9uIGNhdXNlcyBhZGRpdGlvbmFsIGRlYnVnLWxldmVsIG1l c3NhZ2VzIHRvIGFwcGVhciBvbgorICAgICAgICBzdGFuZGFyZCBlcnJvci4KKyAgICAgICA8 L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8 L3ZhcmlhYmxlbGlzdD4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgT3RoZXIgb3B0 aW9ucyBhcmUgYWxzbyBhdmFpbGFibGU6CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICA8 dmFybGlzdGVudHJ5PgorICAgICAgIDx0ZXJtPjxvcHRpb24+LVY8L29wdGlvbj48L3Rlcm0+ CisgICAgICAgPHRlcm0+PG9wdGlvbj4tLXZlcnNpb248L29wdGlvbj48L3Rlcm0+CisgICAg ICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgIFByaW50IHRoZSA8YXBwbGlj YXRpb24+cGdfY3JlYXRlc3Vic2NyaWJlcjwvYXBwbGljYXRpb24+IHZlcnNpb24gYW5kIGV4 aXQuCisgICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlz dGVudHJ5PgorCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgPHRlcm0+PG9wdGlvbj4t Pzwvb3B0aW9uPjwvdGVybT4KKyAgICAgICA8dGVybT48b3B0aW9uPi0taGVscDwvb3B0aW9u PjwvdGVybT4KKyAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgU2hv dyBoZWxwIGFib3V0IDxhcHBsaWNhdGlvbj5wZ19jcmVhdGVzdWJzY3JpYmVyPC9hcHBsaWNh dGlvbj4gY29tbWFuZAorICAgICAgIGxpbmUgYXJndW1lbnRzLCBhbmQgZXhpdC4KKyAgICAg ICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisK KyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgIDwvcGFyYT4KKworIDwvcmVmc2VjdDE+CisKKyA8 cmVmc2VjdDE+CisgIDx0aXRsZT5Ob3RlczwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBUaGUg dHJhbnNmb3JtYXRpb24gcHJvY2VlZHMgaW4gdGhlIGZvbGxvd2luZyBzdGVwczoKKyAgPC9w YXJhPgorCisgIDxwcm9jZWR1cmU+CisgICA8c3RlcD4KKyAgICA8cGFyYT4KKyAgICAgPGFw cGxpY2F0aW9uPnBnX2NyZWF0ZXN1YnNjcmliZXI8L2FwcGxpY2F0aW9uPiBjaGVja3MgaWYg dGhlIGdpdmVuIHRhcmdldCBkYXRhCisgICAgIGRpcmVjdG9yeSBoYXMgdGhlIHNhbWUgc3lz dGVtIGlkZW50aWZpZXIgdGhhbiB0aGUgc291cmNlIGRhdGEgZGlyZWN0b3J5LgorICAgICBT aW5jZSBpdCB1c2VzIHRoZSByZWNvdmVyeSBwcm9jZXNzIGFzIG9uZSBvZiB0aGUgc3RlcHMs IGl0IHN0YXJ0cyB0aGUKKyAgICAgdGFyZ2V0IHNlcnZlciBhcyBhIHJlcGxpY2EgZnJvbSB0 aGUgc291cmNlIHNlcnZlci4gSWYgdGhlIHN5c3RlbQorICAgICBpZGVudGlmaWVyIGlzIG5v dCB0aGUgc2FtZSwgPGFwcGxpY2F0aW9uPnBnX2NyZWF0ZXN1YnNjcmliZXI8L2FwcGxpY2F0 aW9uPiB3aWxsCisgICAgIHRlcm1pbmF0ZSB3aXRoIGFuIGVycm9yLgorICAgIDwvcGFyYT4K KyAgIDwvc3RlcD4KKworICAgPHN0ZXA+CisgICAgPHBhcmE+CisgICAgIDxhcHBsaWNhdGlv bj5wZ19jcmVhdGVzdWJzY3JpYmVyPC9hcHBsaWNhdGlvbj4gY2hlY2tzIGlmIHRoZSB0YXJn ZXQgZGF0YQorICAgICBkaXJlY3RvcnkgaXMgdXNlZCBieSBhIHBoeXNpY2FsIHJlcGxpY2Eu IFN0b3AgdGhlIHBoeXNpY2FsIHJlcGxpY2EgaWYgaXQgaXMKKyAgICAgcnVubmluZy4gT25l IG9mIHRoZSBuZXh0IHN0ZXBzIGlzIHRvIGFkZCBzb21lIHJlY292ZXJ5IHBhcmFtZXRlcnMg dGhhdAorICAgICByZXF1aXJlcyBhIHNlcnZlciBzdGFydC4gVGhpcyBzdGVwIGF2b2lkcyBh biBlcnJvci4KKyAgICA8L3BhcmE+CisgICA8L3N0ZXA+CisKKyAgIDxzdGVwPgorICAgIDxw YXJhPgorICAgICA8YXBwbGljYXRpb24+cGdfY3JlYXRlc3Vic2NyaWJlcjwvYXBwbGljYXRp b24+IGNyZWF0ZXMgb25lIHJlcGxpY2F0aW9uIHNsb3QgZm9yCisgICAgIGVhY2ggc3BlY2lm aWVkIGRhdGFiYXNlIG9uIHRoZSBzb3VyY2Ugc2VydmVyLiBUaGUgcmVwbGljYXRpb24gc2xv dCBuYW1lCisgICAgIGNvbnRhaW5zIGEgPGxpdGVyYWw+cGdfY3JlYXRlc3Vic2NyaWJlcjwv bGl0ZXJhbD4gcHJlZml4LiBUaGVzZSByZXBsaWNhdGlvbgorICAgICBzbG90cyB3aWxsIGJl IHVzZWQgYnkgdGhlIHN1YnNjcmlwdGlvbnMgaW4gYSBmdXR1cmUgc3RlcC4gIEEgdGVtcG9y YXJ5CisgICAgIHJlcGxpY2F0aW9uIHNsb3QgaXMgdXNlZCB0byBnZXQgYSBjb25zaXN0ZW50 IHN0YXJ0IGxvY2F0aW9uLiBUaGlzCisgICAgIGNvbnNpc3RlbnQgTFNOIHdpbGwgYmUgdXNl ZCBhcyBhIHN0b3BwaW5nIHBvaW50IGluIHRoZSA8eHJlZgorICAgICBsaW5rZW5kPSJndWMt cmVjb3ZlcnktdGFyZ2V0LWxzbiIvPiBwYXJhbWV0ZXIgYW5kIGJ5IHRoZQorICAgICBzdWJz Y3JpcHRpb25zIGFzIGEgcmVwbGljYXRpb24gc3RhcnRpbmcgcG9pbnQuIEl0IGd1YXJhbnRl ZXMgdGhhdCBubworICAgICB0cmFuc2FjdGlvbiB3aWxsIGJlIGxvc3QuCisgICAgPC9wYXJh PgorICAgPC9zdGVwPgorCisgICA8c3RlcD4KKyAgICA8cGFyYT4KKyAgICAgPGFwcGxpY2F0 aW9uPnBnX2NyZWF0ZXN1YnNjcmliZXI8L2FwcGxpY2F0aW9uPiB3cml0ZXMgcmVjb3Zlcnkg cGFyYW1ldGVycyBpbnRvCisgICAgIHRoZSB0YXJnZXQgZGF0YSBkaXJlY3RvcnkgYW5kIHN0 YXJ0IHRoZSB0YXJnZXQgc2VydmVyLiBJdCBzcGVjaWZpZXMgYSBMU04KKyAgICAgKGNvbnNp c3RlbnQgTFNOIHRoYXQgd2FzIG9idGFpbmVkIGluIHRoZSBwcmV2aW91cyBzdGVwKSBvZiB3 cml0ZS1haGVhZAorICAgICBsb2cgbG9jYXRpb24gdXAgdG8gd2hpY2ggcmVjb3Zlcnkgd2ls bCBwcm9jZWVkLiBJdCBhbHNvIHNwZWNpZmllcworICAgICA8bGl0ZXJhbD5wcm9tb3RlPC9s aXRlcmFsPiBhcyB0aGUgYWN0aW9uIHRoYXQgdGhlIHNlcnZlciBzaG91bGQgdGFrZSBvbmNl CisgICAgIHRoZSByZWNvdmVyeSB0YXJnZXQgaXMgcmVhY2hlZC4gVGhpcyBzdGVwIGZpbmlz aGVzIG9uY2UgdGhlIHNlcnZlciBlbmRzCisgICAgIHN0YW5kYnkgbW9kZSBhbmQgaXMgYWNj ZXB0aW5nIHJlYWQtd3JpdGUgb3BlcmF0aW9ucy4KKyAgICA8L3BhcmE+CisgICA8L3N0ZXA+ CisKKyAgIDxzdGVwPgorICAgIDxwYXJhPgorICAgICBOZXh0LCA8YXBwbGljYXRpb24+cGdf Y3JlYXRlc3Vic2NyaWJlcjwvYXBwbGljYXRpb24+IGNyZWF0ZXMgb25lIHB1YmxpY2F0aW9u CisgICAgIGZvciBlYWNoIHNwZWNpZmllZCBkYXRhYmFzZSBvbiB0aGUgc291cmNlIHNlcnZl ci4gRWFjaCBwdWJsaWNhdGlvbgorICAgICByZXBsaWNhdGVzIGNoYW5nZXMgZm9yIGFsbCB0 YWJsZXMgaW4gdGhlIGRhdGFiYXNlLiBUaGUgcHVibGljYXRpb24gbmFtZQorICAgICBjb250 YWlucyBhIDxsaXRlcmFsPnBnX2NyZWF0ZXN1YnNjcmliZXI8L2xpdGVyYWw+IHByZWZpeC4g VGhlc2UgcHVibGljYXRpb24KKyAgICAgd2lsbCBiZSB1c2VkIGJ5IGEgY29ycmVzcG9uZGlu ZyBzdWJzY3JpcHRpb24gaW4gYSBuZXh0IHN0ZXAuCisgICAgPC9wYXJhPgorICAgPC9zdGVw PgorCisgICA8c3RlcD4KKyAgICA8cGFyYT4KKyAgICAgPGFwcGxpY2F0aW9uPnBnX2NyZWF0 ZXN1YnNjcmliZXI8L2FwcGxpY2F0aW9uPiBjcmVhdGVzIG9uZSBzdWJzY3JpcHRpb24gZm9y CisgICAgIGVhY2ggc3BlY2lmaWVkIGRhdGFiYXNlIG9uIHRoZSB0YXJnZXQgc2VydmVyLiBF YWNoIHN1YnNjcmlwdGlvbiBuYW1lCisgICAgIGNvbnRhaW5zIGEgPGxpdGVyYWw+cGdfY3Jl YXRlc3Vic2NyaWJlcjwvbGl0ZXJhbD4gcHJlZml4LiBUaGUgcmVwbGljYXRpb24gc2xvdAor ICAgICBuYW1lIGlzIGlkZW50aWNhbCB0byB0aGUgc3Vic2NyaXB0aW9uIG5hbWUuIEl0IGRv ZXMgbm90IGNvcHkgZXhpc3RpbmcgZGF0YQorICAgICBmcm9tIHRoZSBzb3VyY2Ugc2VydmVy LiBJdCBkb2VzIG5vdCBjcmVhdGUgYSByZXBsaWNhdGlvbiBzbG90LiBJbnN0ZWFkLCBpdAor ICAgICB1c2VzIHRoZSByZXBsaWNhdGlvbiBzbG90IHRoYXQgd2FzIGNyZWF0ZWQgaW4gYSBw cmV2aW91cyBzdGVwLiBUaGUKKyAgICAgc3Vic2NyaXB0aW9uIGlzIGNyZWF0ZWQgYnV0IGl0 IGlzIG5vdCBlbmFibGVkIHlldC4gVGhlIHJlYXNvbiBpcyB0aGUKKyAgICAgcmVwbGljYXRp b24gcHJvZ3Jlc3MgbXVzdCBiZSBzZXQgdG8gdGhlIGNvbnNpc3RlbnQgTFNOIGJ1dCByZXBs aWNhdGlvbgorICAgICBvcmlnaW4gbmFtZSBjb250YWlucyB0aGUgc3Vic2NyaXB0aW9uIG9p ZCBpbiBpdHMgbmFtZS4gSGVuY2UsIHRoZQorICAgICBzdWJzY3JpcHRpb24gd2lsbCBiZSBl bmFibGVkIGluIGEgc2VwYXJhdGUgc3RlcC4KKyAgICA8L3BhcmE+CisgICA8L3N0ZXA+CisK KyAgIDxzdGVwPgorICAgIDxwYXJhPgorICAgICA8YXBwbGljYXRpb24+cGdfY3JlYXRlc3Vi c2NyaWJlcjwvYXBwbGljYXRpb24+IHNldHMgdGhlIHJlcGxpY2F0aW9uIHByb2dyZXNzIHRv CisgICAgIHRoZSBjb25zaXN0ZW50IExTTiB0aGF0IHdhcyBvYnRhaW5lZCBpbiBhIHByZXZp b3VzIHN0ZXAuIFdoZW4gdGhlIHRhcmdldAorICAgICBzZXJ2ZXIgc3RhcnRlZCB0aGUgcmVj b3ZlcnkgcHJvY2VzcywgaXQgY2F1Z2h0IHVwIHRvIHRoZSBjb25zaXN0ZW50IExTTi4KKyAg ICAgVGhpcyBpcyB0aGUgZXhhY3QgTFNOIHRvIGJlIHVzZWQgYXMgYSBpbml0aWFsIGxvY2F0 aW9uIGZvciBlYWNoCisgICAgIHN1YnNjcmlwdGlvbi4KKyAgICA8L3BhcmE+CisgICA8L3N0 ZXA+CisKKyAgIDxzdGVwPgorICAgIDxwYXJhPgorICAgICBGaW5hbGx5LCA8YXBwbGljYXRp b24+cGdfY3JlYXRlc3Vic2NyaWJlcjwvYXBwbGljYXRpb24+IGVuYWJsZXMgdGhlIHN1YnNj cmlwdGlvbgorICAgICBmb3IgZWFjaCBzcGVjaWZpZWQgZGF0YWJhc2Ugb24gdGhlIHRhcmdl dCBzZXJ2ZXIuIFRoZSBzdWJzY3JpcHRpb24gc3RhcnRzCisgICAgIHN0cmVhbWluZyBmcm9t IHRoZSBjb25zaXN0ZW50IExTTi4KKyAgICA8L3BhcmE+CisgICA8L3N0ZXA+CisKKyAgIDxz dGVwPgorICAgIDxwYXJhPgorICAgICA8YXBwbGljYXRpb24+cGdfY3JlYXRlc3Vic2NyaWJl cjwvYXBwbGljYXRpb24+IHN0b3BzIHRoZSB0YXJnZXQgc2VydmVyIHRvIGNoYW5nZQorICAg ICBpdHMgc3lzdGVtIGlkZW50aWZpZXIuCisgICAgPC9wYXJhPgorICAgPC9zdGVwPgorICA8 L3Byb2NlZHVyZT4KKyA8L3JlZnNlY3QxPgorCisgPHJlZnNlY3QxPgorICA8dGl0bGU+RXhh bXBsZXM8L3RpdGxlPgorCisgIDxwYXJhPgorICAgVG8gY3JlYXRlIGEgbG9naWNhbCByZXBs aWNhIGZvciBkYXRhYmFzZXMgPGxpdGVyYWw+aHI8L2xpdGVyYWw+IGFuZAorICAgPGxpdGVy YWw+ZmluYW5jZTwvbGl0ZXJhbD4gZnJvbSBhIHBoeXNpY2FsIHJlcGxpY2EgYXQgPGxpdGVy YWw+Zm9vPC9saXRlcmFsPjoKKzxzY3JlZW4+Cis8cHJvbXB0PiQ8L3Byb21wdD4gPHVzZXJp bnB1dD5wZ19jcmVhdGVzdWJzY3JpYmVyIC1EIC91c3IvbG9jYWwvcGdzcWwvZGF0YSAtUCAi aG9zdD1mb28iIC1TICJob3N0PWxvY2FsaG9zdCIgLWQgaHIgLWQgZmluYW5jZTwvdXNlcmlu cHV0PgorPC9zY3JlZW4+CisgIDwvcGFyYT4KKworIDwvcmVmc2VjdDE+CisKKyA8cmVmc2Vj dDE+CisgIDx0aXRsZT5TZWUgQWxzbzwvdGl0bGU+CisKKyAgPHNpbXBsZWxpc3QgdHlwZT0i aW5saW5lIj4KKyAgIDxtZW1iZXI+PHhyZWYgbGlua2VuZD0iYXBwLXBnYmFzZWJhY2t1cCIv PjwvbWVtYmVyPgorICA8L3NpbXBsZWxpc3Q+CisgPC9yZWZzZWN0MT4KKworPC9yZWZlbnRy eT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWZlcmVuY2Uuc2dtbCBiL2RvYy9zcmMv c2dtbC9yZWZlcmVuY2Uuc2dtbAppbmRleCBhYTk0ZjZhZGY2Li5jNWVkZDI0NGVmIDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmZXJlbmNlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21s L3JlZmVyZW5jZS5zZ21sCkBAIC0yODUsNiArMjg1LDcgQEAKICAgICZwZ0N0bDsKICAgICZw Z1Jlc2V0d2FsOwogICAgJnBnUmV3aW5kOworICAgJnBnQ3JlYXRlU3Vic2NyaWJlcjsKICAg ICZwZ3Rlc3Rmc3luYzsKICAgICZwZ3Rlc3R0aW1pbmc7CiAgICAmcGd1cGdyYWRlOwpkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwLy5naXRpZ25vcmUgYi9zcmMvYmluL3Bn X2Jhc2ViYWNrdXAvLmdpdGlnbm9yZQppbmRleCAyNjA0OGJkYmQ4Li4xNGQ1ZGU2YzAxIDEw MDY0NAotLS0gYS9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvLmdpdGlnbm9yZQorKysgYi9zcmMv YmluL3BnX2Jhc2ViYWNrdXAvLmdpdGlnbm9yZQpAQCAtMSw0ICsxLDUgQEAKIC9wZ19iYXNl YmFja3VwCisvcGdfY3JlYXRlc3Vic2NyaWJlcgogL3BnX3JlY2VpdmV3YWwKIC9wZ19yZWN2 bG9naWNhbAogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvTWFrZWZpbGUg Yi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvTWFrZWZpbGUKaW5kZXggYWJmYjY0NDBlYy4uZGVk NDM0YjY4MyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL01ha2VmaWxlCisr KyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9NYWtlZmlsZQpAQCAtNDQsNyArNDQsNyBAQCBC Qk9CSlMgPSBcCiAJYmJzdHJlYW1lcl90YXIubyBcCiAJYmJzdHJlYW1lcl96c3RkLm8KIAot YWxsOiBwZ19iYXNlYmFja3VwIHBnX3JlY2VpdmV3YWwgcGdfcmVjdmxvZ2ljYWwKK2FsbDog cGdfYmFzZWJhY2t1cCBwZ19yZWNlaXZld2FsIHBnX3JlY3Zsb2dpY2FsIHBnX2NyZWF0ZXN1 YnNjcmliZXIKIAogcGdfYmFzZWJhY2t1cDogJChCQk9CSlMpICQoT0JKUykgfCBzdWJtYWtl LWxpYnBxIHN1Ym1ha2UtbGlicGdwb3J0IHN1Ym1ha2UtbGlicGdmZXV0aWxzCiAJJChDQykg JChDRkxBR1MpICQoQkJPQkpTKSAkKE9CSlMpICQoTERGTEFHUykgJChMREZMQUdTX0VYKSAk KExJQlMpIC1vICRAJChYKQpAQCAtNTUsMTAgKzU1LDE0IEBAIHBnX3JlY2VpdmV3YWw6IHBn X3JlY2VpdmV3YWwubyAkKE9CSlMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9y dCBzdWJtYWtlCiBwZ19yZWN2bG9naWNhbDogcGdfcmVjdmxvZ2ljYWwubyAkKE9CSlMpIHwg c3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscwog CSQoQ0MpICQoQ0ZMQUdTKSBwZ19yZWN2bG9naWNhbC5vICQoT0JKUykgJChMREZMQUdTKSAk KExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCiAKK3BnX2NyZWF0ZXN1YnNjcmliZXI6 ICQoV0lOMzJSRVMpIHBnX2NyZWF0ZXN1YnNjcmliZXIubyB8IHN1Ym1ha2UtbGlicHEgc3Vi bWFrZS1saWJwZ3BvcnQgc3VibWFrZS1saWJwZ2ZldXRpbHMKKwkkKENDKSAkKENGTEFHUykg JF4gJChMREZMQUdTKSAkKExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCisKIGluc3Rh bGw6IGFsbCBpbnN0YWxsZGlycwogCSQoSU5TVEFMTF9QUk9HUkFNKSBwZ19iYXNlYmFja3Vw JChYKSAnJChERVNURElSKSQoYmluZGlyKS9wZ19iYXNlYmFja3VwJChYKScKIAkkKElOU1RB TExfUFJPR1JBTSkgcGdfcmVjZWl2ZXdhbCQoWCkgJyQoREVTVERJUikkKGJpbmRpcikvcGdf cmVjZWl2ZXdhbCQoWCknCiAJJChJTlNUQUxMX1BST0dSQU0pIHBnX3JlY3Zsb2dpY2FsJChY KSAnJChERVNURElSKSQoYmluZGlyKS9wZ19yZWN2bG9naWNhbCQoWCknCisJJChJTlNUQUxM X1BST0dSQU0pIHBnX2NyZWF0ZXN1YnNjcmliZXIkKFgpICckKERFU1RESVIpJChiaW5kaXIp L3BnX2NyZWF0ZXN1YnNjcmliZXIkKFgpJwogCiBpbnN0YWxsZGlyczoKIAkkKE1LRElSX1Ap ICckKERFU1RESVIpJChiaW5kaXIpJwpAQCAtNjcsMTAgKzcxLDEyIEBAIHVuaW5zdGFsbDoK IAlybSAtZiAnJChERVNURElSKSQoYmluZGlyKS9wZ19iYXNlYmFja3VwJChYKScKIAlybSAt ZiAnJChERVNURElSKSQoYmluZGlyKS9wZ19yZWNlaXZld2FsJChYKScKIAlybSAtZiAnJChE RVNURElSKSQoYmluZGlyKS9wZ19yZWN2bG9naWNhbCQoWCknCisJcm0gLWYgJyQoREVTVERJ UikkKGJpbmRpcikvcGdfY3JlYXRlc3Vic2NyaWJlciQoWCknCiAKIGNsZWFuIGRpc3RjbGVh bjoKIAlybSAtZiBwZ19iYXNlYmFja3VwJChYKSBwZ19yZWNlaXZld2FsJChYKSBwZ19yZWN2 bG9naWNhbCQoWCkgXAogCQkkKEJCT0JKUykgcGdfcmVjZWl2ZXdhbC5vIHBnX3JlY3Zsb2dp Y2FsLm8gXAorCQlwZ19jcmVhdGVzdWJzY3JpYmVyJChYKSBwZ19jcmVhdGVzdWJzY3JpYmVy Lm8gXAogCQkkKE9CSlMpCiAJcm0gLXJmIHRtcF9jaGVjawogCmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2Jhc2ViYWNrdXAvbWVzb24uYnVpbGQgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAv bWVzb24uYnVpbGQKaW5kZXggZjdlNjBlNjY3MC4uMzQ1YTJkNmZjZCAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wZ19iYXNlYmFja3VwL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iaW4vcGdfYmFz ZWJhY2t1cC9tZXNvbi5idWlsZApAQCAtNzUsNiArNzUsMjMgQEAgcGdfcmVjdmxvZ2ljYWwg PSBleGVjdXRhYmxlKCdwZ19yZWN2bG9naWNhbCcsCiApCiBiaW5fdGFyZ2V0cyArPSBwZ19y ZWN2bG9naWNhbAogCitwZ19jcmVhdGVzdWJzY3JpYmVyX3NvdXJjZXMgPSBmaWxlcygKKyAg J3BnX2NyZWF0ZXN1YnNjcmliZXIuYycKKykKKworaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRv d3MnCisgIHBnX2NyZWF0ZXN1YnNjcmliZXJfc291cmNlcyArPSByY19iaW5fZ2VuLnByb2Nl c3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKwknLS1OQU1FJywgJ3BnX2NyZWF0ZXN1 YnNjcmliZXInLAorCSctLUZJTEVERVNDJywgJ3BnX2NyZWF0ZXN1YnNjcmliZXIgLSBjcmVh dGUgYSBuZXcgbG9naWNhbCByZXBsaWNhIGZyb20gYSBzdGFuZGJ5IHNlcnZlcicsXSkKK2Vu ZGlmCisKK3BnX2NyZWF0ZXN1YnNjcmliZXIgPSBleGVjdXRhYmxlKCdwZ19jcmVhdGVzdWJz Y3JpYmVyJywKKyAgcGdfY3JlYXRlc3Vic2NyaWJlcl9zb3VyY2VzLAorICBkZXBlbmRlbmNp ZXM6IFtmcm9udGVuZF9jb2RlLCBsaWJwcV0sCisgIGt3YXJnczogZGVmYXVsdF9iaW5fYXJn cywKKykKK2Jpbl90YXJnZXRzICs9IHBnX2NyZWF0ZXN1YnNjcmliZXIKKwogdGVzdHMgKz0g ewogICAnbmFtZSc6ICdwZ19iYXNlYmFja3VwJywKICAgJ3NkJzogbWVzb24uY3VycmVudF9z b3VyY2VfZGlyKCksCkBAIC04OSw2ICsxMDYsOCBAQCB0ZXN0cyArPSB7CiAgICAgICAndC8w MTFfaW5fcGxhY2VfdGFibGVzcGFjZS5wbCcsCiAgICAgICAndC8wMjBfcGdfcmVjZWl2ZXdh bC5wbCcsCiAgICAgICAndC8wMzBfcGdfcmVjdmxvZ2ljYWwucGwnLAorICAgICAgJ3QvMDQw X3BnX2NyZWF0ZXN1YnNjcmliZXIucGwnLAorICAgICAgJ3QvMDQxX3BnX2NyZWF0ZXN1YnNj cmliZXJfc3RhbmRieS5wbCcsCiAgICAgXSwKICAgfSwKIH0KZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfYmFzZWJhY2t1cC9wZ19jcmVhdGVzdWJzY3JpYmVyLmMgYi9zcmMvYmluL3BnX2Jh c2ViYWNrdXAvcGdfY3JlYXRlc3Vic2NyaWJlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAuLjIwNWE4MzVkMzYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmlu L3BnX2Jhc2ViYWNrdXAvcGdfY3JlYXRlc3Vic2NyaWJlci5jCkBAIC0wLDAgKzEsMTk3MiBA QAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdfY3JlYXRlc3Vic2NyaWJlci5j CisgKgkgIENyZWF0ZSBhIG5ldyBsb2dpY2FsIHJlcGxpY2EgZnJvbSBhIHN0YW5kYnkgc2Vy dmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iaW4vcGdf YmFzZWJhY2t1cC9wZ19jcmVhdGVzdWJzY3JpYmVyLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKworI2luY2x1ZGUgPHN5 cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisK KyNpbmNsdWRlICJjYXRhbG9nL3BnX2F1dGhpZF9kLmgiCisjaW5jbHVkZSAiY29tbW9uL2Nv bm5lY3QuaCIKKyNpbmNsdWRlICJjb21tb24vY29udHJvbGRhdGFfdXRpbHMuaCIKKyNpbmNs dWRlICJjb21tb24vZmlsZV9wZXJtLmgiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaCIK KyNpbmNsdWRlICJjb21tb24vcmVzdHJpY3RlZF90b2tlbi5oIgorI2luY2x1ZGUgImZlX3V0 aWxzL3JlY292ZXJ5X2dlbi5oIgorI2luY2x1ZGUgImZlX3V0aWxzL3NpbXBsZV9saXN0Lmgi CisjaW5jbHVkZSAiZ2V0b3B0X2xvbmcuaCIKKworI2RlZmluZQlQR1NfT1VUUFVUX0RJUgki cGdfY3JlYXRlc3Vic2NyaWJlcl9vdXRwdXQuZCIKKworLyogQ29tbWFuZC1saW5lIG9wdGlv bnMgKi8KK3R5cGVkZWYgc3RydWN0IENyZWF0ZVN1YnNjcmliZXJPcHRpb25zCit7CisJY2hh cgkgICAqc3Vic2NyaWJlcl9kaXI7IC8qIHN0YW5kYnkvc3Vic2NyaWJlciBkYXRhIGRpcmVj dG9yeSAqLworCWNoYXIJICAgKnB1Yl9jb25uaW5mb19zdHI7CS8qIHB1Ymxpc2hlciBjb25u ZWN0aW9uIHN0cmluZyAqLworCWNoYXIJICAgKnN1Yl9jb25uaW5mb19zdHI7CS8qIHN1YnNj cmliZXIgY29ubmVjdGlvbiBzdHJpbmcgKi8KKwlTaW1wbGVTdHJpbmdMaXN0IGRhdGFiYXNl X25hbWVzOwkvKiBsaXN0IG9mIGRhdGFiYXNlIG5hbWVzICovCisJYm9vbAkJcmV0YWluOwkJ CS8qIHJldGFpbiBsb2cgZmlsZT8gKi8KKwlpbnQJCQlyZWNvdmVyeV90aW1lb3V0OwkvKiBz dG9wIHJlY292ZXJ5IGFmdGVyIHRoaXMgdGltZSAqLworfSBDcmVhdGVTdWJzY3JpYmVyT3B0 aW9uczsKKwordHlwZWRlZiBzdHJ1Y3QgTG9naWNhbFJlcEluZm8KK3sKKwlPaWQJCQlvaWQ7 CQkJLyogZGF0YWJhc2UgT0lEICovCisJY2hhcgkgICAqZGJuYW1lOwkJCS8qIGRhdGFiYXNl IG5hbWUgKi8KKwljaGFyCSAgICpwdWJjb25uaW5mbzsJLyogcHVibGlzaGVyIGNvbm5lY3Rp b24gc3RyaW5nICovCisJY2hhcgkgICAqc3ViY29ubmluZm87CS8qIHN1YnNjcmliZXIgY29u bmVjdGlvbiBzdHJpbmcgKi8KKwljaGFyCSAgICpwdWJuYW1lOwkJLyogcHVibGljYXRpb24g bmFtZSAqLworCWNoYXIJICAgKnN1Ym5hbWU7CQkvKiBzdWJzY3JpcHRpb24gbmFtZSAvIHJl cGxpY2F0aW9uIHNsb3QgbmFtZSAqLworCisJYm9vbAkJbWFkZV9yZXBsc2xvdDsJLyogcmVw bGljYXRpb24gc2xvdCB3YXMgY3JlYXRlZCAqLworCWJvb2wJCW1hZGVfcHVibGljYXRpb247 CS8qIHB1YmxpY2F0aW9uIHdhcyBjcmVhdGVkICovCisJYm9vbAkJbWFkZV9zdWJzY3JpcHRp b247CS8qIHN1YnNjcmlwdGlvbiB3YXMgY3JlYXRlZCAqLworfSBMb2dpY2FsUmVwSW5mbzsK Kworc3RhdGljIHZvaWQgY2xlYW51cF9vYmplY3RzX2F0ZXhpdCh2b2lkKTsKK3N0YXRpYyB2 b2lkIHVzYWdlKCk7CitzdGF0aWMgY2hhciAqZ2V0X2Jhc2VfY29ubmluZm8oY2hhciAqY29u bmluZm8sIGNoYXIgKipkYm5hbWUpOworc3RhdGljIGNoYXIgKmdldF9leGVjX3BhdGgoY29u c3QgY2hhciAqYXJndjAsIGNvbnN0IGNoYXIgKnByb2duYW1lKTsKK3N0YXRpYyBib29sIGNo ZWNrX2RhdGFfZGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRhdGFkaXIpOworc3RhdGljIGNoYXIg KmNvbmNhdF9jb25uaW5mb19kYm5hbWUoY29uc3QgY2hhciAqY29ubmluZm8sIGNvbnN0IGNo YXIgKmRibmFtZSk7CitzdGF0aWMgTG9naWNhbFJlcEluZm8gKnN0b3JlX3B1Yl9zdWJfaW5m byhTaW1wbGVTdHJpbmdMaXN0IGRibmFtZXMsCisJCQkJCQkJCQkJICBjb25zdCBjaGFyICpw dWJfYmFzZV9jb25uaW5mbywKKwkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnN1Yl9iYXNlX2Nv bm5pbmZvKTsKK3N0YXRpYyBQR2Nvbm4gKmNvbm5lY3RfZGF0YWJhc2UoY29uc3QgY2hhciAq Y29ubmluZm8pOworc3RhdGljIHZvaWQgZGlzY29ubmVjdF9kYXRhYmFzZShQR2Nvbm4gKmNv bm4pOworc3RhdGljIHVpbnQ2NCBnZXRfcHJpbWFyeV9zeXNpZChjb25zdCBjaGFyICpjb25u aW5mbyk7CitzdGF0aWMgdWludDY0IGdldF9zdGFuZGJ5X3N5c2lkKGNvbnN0IGNoYXIgKmRh dGFkaXIpOworc3RhdGljIHZvaWQgbW9kaWZ5X3N1YnNjcmliZXJfc3lzaWQoY29uc3QgY2hh ciAqcGdfcmVzZXR3YWxfcGF0aCwKKwkJCQkJCQkJCUNyZWF0ZVN1YnNjcmliZXJPcHRpb25z ICpvcHQpOworc3RhdGljIGludAlzZXJ2ZXJfaXNfaW5fcmVjb3ZlcnkoUEdjb25uICpjb25u KTsKK3N0YXRpYyBib29sIGNoZWNrX3B1Ymxpc2hlcihMb2dpY2FsUmVwSW5mbyAqZGJpbmZv KTsKK3N0YXRpYyBib29sIHNldHVwX3B1Ymxpc2hlcihMb2dpY2FsUmVwSW5mbyAqZGJpbmZv KTsKK3N0YXRpYyBib29sIGNoZWNrX3N1YnNjcmliZXIoTG9naWNhbFJlcEluZm8gKmRiaW5m byk7CitzdGF0aWMgYm9vbCBzZXR1cF9zdWJzY3JpYmVyKExvZ2ljYWxSZXBJbmZvICpkYmlu Zm8sCisJCQkJCQkJIGNvbnN0IGNoYXIgKmNvbnNpc3RlbnRfbHNuKTsKK3N0YXRpYyBjaGFy ICpjcmVhdGVfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90KFBHY29ubiAqY29ubiwKKwkJCQkJ CQkJCQkJIExvZ2ljYWxSZXBJbmZvICpkYmluZm8sCisJCQkJCQkJCQkJCSBib29sIHRlbXBv cmFyeSk7CitzdGF0aWMgdm9pZCBkcm9wX3JlcGxpY2F0aW9uX3Nsb3QoUEdjb25uICpjb25u LCBMb2dpY2FsUmVwSW5mbyAqZGJpbmZvLAorCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnNsb3Rf bmFtZSk7CitzdGF0aWMgY2hhciAqc2V0dXBfc2VydmVyX2xvZ2ZpbGUoY29uc3QgY2hhciAq ZGF0YWRpcik7CitzdGF0aWMgdm9pZCBzdGFydF9zdGFuZGJ5X3NlcnZlcihjb25zdCBjaGFy ICpwZ19jdGxfcGF0aCwgY29uc3QgY2hhciAqZGF0YWRpciwKKwkJCQkJCQkJIGNvbnN0IGNo YXIgKmxvZ2ZpbGUpOworc3RhdGljIHZvaWQgc3RvcF9zdGFuZGJ5X3NlcnZlcihjb25zdCBj aGFyICpwZ19jdGxfcGF0aCwgY29uc3QgY2hhciAqZGF0YWRpcik7CitzdGF0aWMgdm9pZCBw Z19jdGxfc3RhdHVzKGNvbnN0IGNoYXIgKnBnX2N0bF9jbWQsIGludCByYywgaW50IGFjdGlv bik7CitzdGF0aWMgdm9pZCB3YWl0X2Zvcl9lbmRfcmVjb3ZlcnkoY29uc3QgY2hhciAqY29u bmluZm8sIGNvbnN0IGNoYXIgKnBnX2N0bF9wYXRoLAorCQkJCQkJCQkgIENyZWF0ZVN1YnNj cmliZXJPcHRpb25zICpvcHQpOworc3RhdGljIHZvaWQgY3JlYXRlX3B1YmxpY2F0aW9uKFBH Y29ubiAqY29ubiwgTG9naWNhbFJlcEluZm8gKmRiaW5mbyk7CitzdGF0aWMgdm9pZCBkcm9w X3B1YmxpY2F0aW9uKFBHY29ubiAqY29ubiwgTG9naWNhbFJlcEluZm8gKmRiaW5mbyk7Citz dGF0aWMgdm9pZCBjcmVhdGVfc3Vic2NyaXB0aW9uKFBHY29ubiAqY29ubiwgTG9naWNhbFJl cEluZm8gKmRiaW5mbyk7CitzdGF0aWMgdm9pZCBkcm9wX3N1YnNjcmlwdGlvbihQR2Nvbm4g KmNvbm4sIExvZ2ljYWxSZXBJbmZvICpkYmluZm8pOworc3RhdGljIHZvaWQgc2V0X3JlcGxp Y2F0aW9uX3Byb2dyZXNzKFBHY29ubiAqY29ubiwgTG9naWNhbFJlcEluZm8gKmRiaW5mbywK KwkJCQkJCQkJCSBjb25zdCBjaGFyICpsc24pOworc3RhdGljIHZvaWQgZW5hYmxlX3N1YnNj cmlwdGlvbihQR2Nvbm4gKmNvbm4sIExvZ2ljYWxSZXBJbmZvICpkYmluZm8pOworCisjZGVm aW5lCVVTRUNfUEVSX1NFQwkxMDAwMDAwCisjZGVmaW5lCVdBSVRfSU5URVJWQUwJMQkJLyog MSBzZWNvbmQgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKnByb2duYW1lOworCitzdGF0aWMg Y2hhciAqcHJpbWFyeV9zbG90X25hbWUgPSBOVUxMOworc3RhdGljIGJvb2wgZHJ5X3J1biA9 IGZhbHNlOworCitzdGF0aWMgYm9vbCBzdWNjZXNzID0gZmFsc2U7CisKK3N0YXRpYyBMb2dp Y2FsUmVwSW5mbyAqZGJpbmZvOworc3RhdGljIGludAludW1fZGJzID0gMDsKKworc3RhdGlj IGJvb2wgcmVjb3ZlcnlfZW5kZWQgPSBmYWxzZTsKKworZW51bSBXYWl0UE1SZXN1bHQKK3sK KwlQT1NUTUFTVEVSX1JFQURZLAorCVBPU1RNQVNURVJfU1RJTExfU1RBUlRJTkcKK307CisK KworLyoKKyAqIENsZWFudXAgb2JqZWN0cyB0aGF0IHdlcmUgY3JlYXRlZCBieSBwZ19jcmVh dGVzdWJzY3JpYmVyIGlmIHRoZXJlIGlzIGFuCisgKiBlcnJvci4KKyAqCisgKiBSZXBsaWNh dGlvbiBzbG90cywgcHVibGljYXRpb25zIGFuZCBzdWJzY3JpcHRpb25zIGFyZSBjcmVhdGVk LiBEZXBlbmRpbmcgb24KKyAqIHRoZSBzdGVwIGl0IGZhaWxlZCwgaXQgc2hvdWxkIHJlbW92 ZSB0aGUgYWxyZWFkeSBjcmVhdGVkIG9iamVjdHMgaWYgaXQgaXMKKyAqIHBvc3NpYmxlIChz b21ldGltZXMgaXQgd29uJ3Qgd29yayBkdWUgdG8gYSBjb25uZWN0aW9uIGlzc3VlKS4KKyAq Lworc3RhdGljIHZvaWQKK2NsZWFudXBfb2JqZWN0c19hdGV4aXQodm9pZCkKK3sKKwlQR2Nv bm4JICAgKmNvbm47CisJaW50CQkJaTsKKworCWlmIChzdWNjZXNzKQorCQlyZXR1cm47CisK Kwlmb3IgKGkgPSAwOyBpIDwgbnVtX2RiczsgaSsrKQorCXsKKwkJaWYgKGRiaW5mb1tpXS5t YWRlX3N1YnNjcmlwdGlvbiB8fCByZWNvdmVyeV9lbmRlZCkKKwkJeworCQkJY29ubiA9IGNv bm5lY3RfZGF0YWJhc2UoZGJpbmZvW2ldLnN1YmNvbm5pbmZvKTsKKwkJCWlmIChjb25uICE9 IE5VTEwpCisJCQl7CisJCQkJaWYgKGRiaW5mb1tpXS5tYWRlX3N1YnNjcmlwdGlvbikKKwkJ CQkJZHJvcF9zdWJzY3JpcHRpb24oY29ubiwgJmRiaW5mb1tpXSk7CisKKwkJCQkvKgorCQkJ CSAqIFB1YmxpY2F0aW9ucyBhcmUgY3JlYXRlZCBvbiBwdWJsaXNoZXIgYmVmb3JlIHByb21v dGlvbiBzbworCQkJCSAqIGl0IG1pZ2h0IGV4aXN0IG9uIHN1YnNjcmliZXIgYWZ0ZXIgcmVj b3ZlcnkgZW5kcy4KKwkJCQkgKi8KKwkJCQlpZiAocmVjb3ZlcnlfZW5kZWQpCisJCQkJCWRy b3BfcHVibGljYXRpb24oY29ubiwgJmRiaW5mb1tpXSk7CisJCQkJZGlzY29ubmVjdF9kYXRh YmFzZShjb25uKTsKKwkJCX0KKwkJfQorCisJCWlmIChkYmluZm9baV0ubWFkZV9wdWJsaWNh dGlvbiB8fCBkYmluZm9baV0ubWFkZV9yZXBsc2xvdCkKKwkJeworCQkJY29ubiA9IGNvbm5l Y3RfZGF0YWJhc2UoZGJpbmZvW2ldLnB1YmNvbm5pbmZvKTsKKwkJCWlmIChjb25uICE9IE5V TEwpCisJCQl7CisJCQkJaWYgKGRiaW5mb1tpXS5tYWRlX3B1YmxpY2F0aW9uKQorCQkJCQlk cm9wX3B1YmxpY2F0aW9uKGNvbm4sICZkYmluZm9baV0pOworCQkJCWlmIChkYmluZm9baV0u bWFkZV9yZXBsc2xvdCkKKwkJCQkJZHJvcF9yZXBsaWNhdGlvbl9zbG90KGNvbm4sICZkYmlu Zm9baV0sIGRiaW5mb1tpXS5zdWJuYW1lKTsKKwkJCQlkaXNjb25uZWN0X2RhdGFiYXNlKGNv bm4pOworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgdm9pZAordXNhZ2Uodm9pZCkKK3sK KwlwcmludGYoXygiJXMgY3JlYXRlcyBhIG5ldyBsb2dpY2FsIHJlcGxpY2EgZnJvbSBhIHN0 YW5kYnkgc2VydmVyLlxuXG4iKSwKKwkJICAgcHJvZ25hbWUpOworCXByaW50ZihfKCJVc2Fn ZTpcbiIpKTsKKwlwcmludGYoXygiICAlcyBbT1BUSU9OXS4uLlxuIiksIHByb2duYW1lKTsK KwlwcmludGYoXygiXG5PcHRpb25zOlxuIikpOworCXByaW50ZihfKCIgLUQsIC0tcGdkYXRh PURBVEFESVIgICAgICAgICAgICAgICAgbG9jYXRpb24gZm9yIHRoZSBzdWJzY3JpYmVyIGRh dGEgZGlyZWN0b3J5XG4iKSk7CisJcHJpbnRmKF8oIiAtUCwgLS1wdWJsaXNoZXItc2VydmVy PUNPTk5TVFIgICAgICBwdWJsaXNoZXIgY29ubmVjdGlvbiBzdHJpbmdcbiIpKTsKKwlwcmlu dGYoXygiIC1TLCAtLXN1YnNjcmliZXItc2VydmVyPUNPTk5TVFIgICAgIHN1YnNjcmliZXIg Y29ubmVjdGlvbiBzdHJpbmdcbiIpKTsKKwlwcmludGYoXygiIC1kLCAtLWRhdGFiYXNlPURC TkFNRSAgICAgICAgICAgICAgIGRhdGFiYXNlIHRvIGNyZWF0ZSBhIHN1YnNjcmlwdGlvblxu IikpOworCXByaW50ZihfKCIgLW4sIC0tZHJ5LXJ1biAgICAgICAgICAgICAgICAgICAgICAg ZHJ5IHJ1biwganVzdCBzaG93IHdoYXQgd291bGQgYmUgZG9uZVxuIikpOworCXByaW50Zihf KCIgLXQsIC0tcmVjb3ZlcnktdGltZW91dD1TRUNTICAgICAgICAgc2Vjb25kcyB0byB3YWl0 IGZvciByZWNvdmVyeSB0byBlbmRcbiIpKTsKKwlwcmludGYoXygiIC1yLCAtLXJldGFpbiAg ICAgICAgICAgICAgICAgICAgICAgIHJldGFpbiBsb2cgZmlsZSBhZnRlciBzdWNjZXNzXG4i KSk7CisJcHJpbnRmKF8oIiAtdiwgLS12ZXJib3NlICAgICAgICAgICAgICAgICAgICAgICBv dXRwdXQgdmVyYm9zZSBtZXNzYWdlc1xuIikpOworCXByaW50ZihfKCIgLVYsIC0tdmVyc2lv biAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24sIHRo ZW4gZXhpdFxuIikpOworCXByaW50ZihfKCIgLT8sIC0taGVscCAgICAgICAgICAgICAgICAg ICAgICAgICAgc2hvdyB0aGlzIGhlbHAsIHRoZW4gZXhpdFxuIikpOworCXByaW50ZihfKCJc blJlcG9ydCBidWdzIHRvIDwlcz4uXG4iKSwgUEFDS0FHRV9CVUdSRVBPUlQpOworCXByaW50 ZihfKCIlcyBob21lIHBhZ2U6IDwlcz5cbiIpLCBQQUNLQUdFX05BTUUsIFBBQ0tBR0VfVVJM KTsKK30KKworLyoKKyAqIFZhbGlkYXRlIGEgY29ubmVjdGlvbiBzdHJpbmcuIFJldHVybnMg YSBiYXNlIGNvbm5lY3Rpb24gc3RyaW5nIHRoYXQgaXMgYQorICogY29ubmVjdGlvbiBzdHJp bmcgd2l0aG91dCBhIGRhdGFiYXNlIG5hbWUuCisgKgorICogU2luY2Ugd2UgbWlnaHQgcHJv Y2VzcyBtdWx0aXBsZSBkYXRhYmFzZXMsIGVhY2ggZGF0YWJhc2UgbmFtZSB3aWxsIGJlCisg KiBhcHBlbmRlZCB0byB0aGlzIGJhc2UgY29ubmVjdGlvbiBzdHJpbmcgdG8gcHJvdmlkZSBh IGZpbmFsIGNvbm5lY3Rpb24KKyAqIHN0cmluZy4gSWYgdGhlIHNlY29uZCBhcmd1bWVudCAo ZGJuYW1lKSBpcyBub3QgbnVsbCwgcmV0dXJucyBkYm5hbWUgaWYgdGhlCisgKiBwcm92aWRl ZCBjb25uZWN0aW9uIHN0cmluZyBjb250YWlucyBpdC4gSWYgb3B0aW9uIC0tZGF0YWJhc2Ug aXMgbm90CisgKiBwcm92aWRlZCwgdXNlcyBkYm5hbWUgYXMgdGhlIG9ubHkgZGF0YWJhc2Ug dG8gc2V0dXAgdGhlIGxvZ2ljYWwgcmVwbGljYS4KKyAqCisgKiBJdCBpcyB0aGUgY2FsbGVy J3MgcmVzcG9uc2liaWxpdHkgdG8gZnJlZSB0aGUgcmV0dXJuZWQgY29ubmVjdGlvbiBzdHJp bmcgYW5kCisgKiBkYm5hbWUuCisgKi8KK3N0YXRpYyBjaGFyICoKK2dldF9iYXNlX2Nvbm5p bmZvKGNoYXIgKmNvbm5pbmZvLCBjaGFyICoqZGJuYW1lKQoreworCVBRRXhwQnVmZmVyIGJ1 ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJUFFjb25uaW5mb09wdGlvbiAqY29ubl9vcHRz ID0gTlVMTDsKKwlQUWNvbm5pbmZvT3B0aW9uICpjb25uX29wdDsKKwljaGFyCSAgICplcnJt c2cgPSBOVUxMOworCWNoYXIJICAgKnJldDsKKwlpbnQJCQlpOworCisJY29ubl9vcHRzID0g UFFjb25uaW5mb1BhcnNlKGNvbm5pbmZvLCAmZXJybXNnKTsKKwlpZiAoY29ubl9vcHRzID09 IE5VTEwpCisJeworCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBwYXJzZSBjb25uZWN0aW9u IHN0cmluZzogJXMiLCBlcnJtc2cpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpID0gMDsK Kwlmb3IgKGNvbm5fb3B0ID0gY29ubl9vcHRzOyBjb25uX29wdC0+a2V5d29yZCAhPSBOVUxM OyBjb25uX29wdCsrKQorCXsKKwkJaWYgKHN0cmNtcChjb25uX29wdC0+a2V5d29yZCwgImRi bmFtZSIpID09IDAgJiYgY29ubl9vcHQtPnZhbCAhPSBOVUxMKQorCQl7CisJCQlpZiAoZGJu YW1lKQorCQkJCSpkYm5hbWUgPSBwZ19zdHJkdXAoY29ubl9vcHQtPnZhbCk7CisJCQljb250 aW51ZTsKKwkJfQorCisJCWlmIChjb25uX29wdC0+dmFsICE9IE5VTEwgJiYgY29ubl9vcHQt PnZhbFswXSAhPSAnXDAnKQorCQl7CisJCQlpZiAoaSA+IDApCisJCQkJYXBwZW5kUFFFeHBC dWZmZXJDaGFyKGJ1ZiwgJyAnKTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKGJ1ZiwgIiVzPSVz IiwgY29ubl9vcHQtPmtleXdvcmQsIGNvbm5fb3B0LT52YWwpOworCQkJaSsrOworCQl9CisJ fQorCisJcmV0ID0gcGdfc3RyZHVwKGJ1Zi0+ZGF0YSk7CisKKwlkZXN0cm95UFFFeHBCdWZm ZXIoYnVmKTsKKwlQUWNvbm5pbmZvRnJlZShjb25uX29wdHMpOworCisJcmV0dXJuIHJldDsK K30KKworLyoKKyAqIFZlcmlmeSBpZiBhIFBvc3RncmVTUUwgYmluYXJ5IChwcm9nbmFtZSkg aXMgYXZhaWxhYmxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcworICogcGdfY3JlYXRlc3Vi c2NyaWJlciBhbmQgaXQgaGFzIHRoZSBzYW1lIHZlcnNpb24uICBJdCByZXR1cm5zIHRoZSBh YnNvbHV0ZQorICogcGF0aCBvZiB0aGUgcHJvZ25hbWUuCisgKi8KK3N0YXRpYyBjaGFyICoK K2dldF9leGVjX3BhdGgoY29uc3QgY2hhciAqYXJndjAsIGNvbnN0IGNoYXIgKnByb2duYW1l KQoreworCWNoYXIJICAgKnZlcnNpb25zdHI7CisJY2hhcgkgICAqZXhlY19wYXRoOworCWlu dAkJCXJldDsKKworCXZlcnNpb25zdHIgPSBwc3ByaW50ZigiJXMgKFBvc3RncmVTUUwpICVz XG4iLCBwcm9nbmFtZSwgUEdfVkVSU0lPTik7CisJZXhlY19wYXRoID0gcGdfbWFsbG9jKE1B WFBHUEFUSCk7CisJcmV0ID0gZmluZF9vdGhlcl9leGVjKGFyZ3YwLCBwcm9nbmFtZSwgdmVy c2lvbnN0ciwgZXhlY19wYXRoKTsKKworCWlmIChyZXQgPCAwKQorCXsKKwkJY2hhcgkJZnVs bF9wYXRoW01BWFBHUEFUSF07CisKKwkJaWYgKGZpbmRfbXlfZXhlYyhhcmd2MCwgZnVsbF9w YXRoKSA8IDApCisJCQlzdHJsY3B5KGZ1bGxfcGF0aCwgcHJvZ25hbWUsIHNpemVvZihmdWxs X3BhdGgpKTsKKworCQlpZiAocmV0ID09IC0xKQorCQkJcGdfZmF0YWwoInByb2dyYW0gXCIl c1wiIGlzIG5lZWRlZCBieSAlcyBidXQgd2FzIG5vdCBmb3VuZCBpbiB0aGUgc2FtZSBkaXJl Y3RvcnkgYXMgXCIlc1wiIiwKKwkJCQkJIHByb2duYW1lLCAicGdfY3JlYXRlc3Vic2NyaWJl ciIsIGZ1bGxfcGF0aCk7CisJCWVsc2UKKwkJCXBnX2ZhdGFsKCJwcm9ncmFtIFwiJXNcIiB3 YXMgZm91bmQgYnkgXCIlc1wiIGJ1dCB3YXMgbm90IHRoZSBzYW1lIHZlcnNpb24gYXMgJXMi LAorCQkJCQkgcHJvZ25hbWUsIGZ1bGxfcGF0aCwgInBnX2NyZWF0ZXN1YnNjcmliZXIiKTsK Kwl9CisKKwlwZ19sb2dfZGVidWcoIiVzIHBhdGggaXM6ICAlcyIsIHByb2duYW1lLCBleGVj X3BhdGgpOworCisJcmV0dXJuIGV4ZWNfcGF0aDsKK30KKworLyoKKyAqIElzIGl0IGEgY2x1 c3RlciBkaXJlY3Rvcnk/IFRoZXNlIGFyZSBwcmVsaW1pbmFyeSBjaGVja3MuIEl0IGlzIGZh ciBmcm9tCisgKiBtYWtpbmcgYW4gYWNjdXJhdGUgY2hlY2suIElmIGl0IGlzIG5vdCBhIGNs b25lIGZyb20gdGhlIHB1Ymxpc2hlciwgaXQgd2lsbAorICogZXZlbnR1YWxseSBmYWlsIGlu IGEgZnV0dXJlIHN0ZXAuCisgKi8KK3N0YXRpYyBib29sCitjaGVja19kYXRhX2RpcmVjdG9y eShjb25zdCBjaGFyICpkYXRhZGlyKQoreworCXN0cnVjdCBzdGF0IHN0YXRidWY7CisJY2hh cgkJdmVyc2lvbmZpbGVbTUFYUEdQQVRIXTsKKworCXBnX2xvZ19pbmZvKCJjaGVja2luZyBp ZiBkaXJlY3RvcnkgXCIlc1wiIGlzIGEgY2x1c3RlciBkYXRhIGRpcmVjdG9yeSIsCisJCQkJ ZGF0YWRpcik7CisKKwlpZiAoc3RhdChkYXRhZGlyLCAmc3RhdGJ1ZikgIT0gMCkKKwl7CisJ CWlmIChlcnJubyA9PSBFTk9FTlQpCisJCQlwZ19sb2dfZXJyb3IoImRhdGEgZGlyZWN0b3J5 IFwiJXNcIiBkb2VzIG5vdCBleGlzdCIsIGRhdGFkaXIpOworCQllbHNlCisJCQlwZ19sb2df ZXJyb3IoImNvdWxkIG5vdCBhY2Nlc3MgZGlyZWN0b3J5IFwiJXNcIjogJXMiLCBkYXRhZGly LAorCQkJCQkJIHN0cmVycm9yKGVycm5vKSk7CisKKwkJcmV0dXJuIGZhbHNlOworCX0KKwor CXNucHJpbnRmKHZlcnNpb25maWxlLCBNQVhQR1BBVEgsICIlcy9QR19WRVJTSU9OIiwgZGF0 YWRpcik7CisJaWYgKHN0YXQodmVyc2lvbmZpbGUsICZzdGF0YnVmKSAhPSAwICYmIGVycm5v ID09IEVOT0VOVCkKKwl7CisJCXBnX2xvZ19lcnJvcigiZGlyZWN0b3J5IFwiJXNcIiBpcyBu b3QgYSBkYXRhYmFzZSBjbHVzdGVyIGRpcmVjdG9yeSIsCisJCQkJCSBkYXRhZGlyKTsKKwkJ cmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKgorICogQXBwZW5k IGRhdGFiYXNlIG5hbWUgaW50byBhIGJhc2UgY29ubmVjdGlvbiBzdHJpbmcuCisgKgorICog ZGJuYW1lIGlzIHRoZSBvbmx5IHBhcmFtZXRlciB0aGF0IGNoYW5nZXMgc28gaXQgaXMgbm90 IGluY2x1ZGVkIGluIHRoZSBiYXNlCisgKiBjb25uZWN0aW9uIHN0cmluZy4gVGhpcyBmdW5j dGlvbiBjb25jYXRlbmF0ZXMgZGJuYW1lIHRvIGJ1aWxkIGEgInJlYWwiCisgKiBjb25uZWN0 aW9uIHN0cmluZy4KKyAqLworc3RhdGljIGNoYXIgKgorY29uY2F0X2Nvbm5pbmZvX2RibmFt ZShjb25zdCBjaGFyICpjb25uaW5mbywgY29uc3QgY2hhciAqZGJuYW1lKQoreworCVBRRXhw QnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJY2hhcgkgICAqcmV0OworCisJ QXNzZXJ0KGNvbm5pbmZvICE9IE5VTEwpOworCisJYXBwZW5kUFFFeHBCdWZmZXJTdHIoYnVm LCBjb25uaW5mbyk7CisJYXBwZW5kUFFFeHBCdWZmZXIoYnVmLCAiIGRibmFtZT0lcyIsIGRi bmFtZSk7CisKKwlyZXQgPSBwZ19zdHJkdXAoYnVmLT5kYXRhKTsKKwlkZXN0cm95UFFFeHBC dWZmZXIoYnVmKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBTdG9yZSBwdWJsaWNh dGlvbiBhbmQgc3Vic2NyaXB0aW9uIGluZm9ybWF0aW9uLgorICovCitzdGF0aWMgTG9naWNh bFJlcEluZm8gKgorc3RvcmVfcHViX3N1Yl9pbmZvKFNpbXBsZVN0cmluZ0xpc3QgZGJuYW1l cywgY29uc3QgY2hhciAqcHViX2Jhc2VfY29ubmluZm8sCisJCQkJICAgY29uc3QgY2hhciAq c3ViX2Jhc2VfY29ubmluZm8pCit7CisJTG9naWNhbFJlcEluZm8gKmRiaW5mbzsKKwlTaW1w bGVTdHJpbmdMaXN0Q2VsbCAqY2VsbDsKKwlpbnQJCQlpID0gMDsKKworCWRiaW5mbyA9IChM b2dpY2FsUmVwSW5mbyAqKSBwZ19tYWxsb2MobnVtX2RicyAqIHNpemVvZihMb2dpY2FsUmVw SW5mbykpOworCisJZm9yIChjZWxsID0gZGJuYW1lcy5oZWFkOyBjZWxsOyBjZWxsID0gY2Vs bC0+bmV4dCkKKwl7CisJCWNoYXIJICAgKmNvbm5pbmZvOworCisJCS8qIEZpbGwgcHVibGlz aGVyIGF0dHJpYnV0ZXMgKi8KKwkJY29ubmluZm8gPSBjb25jYXRfY29ubmluZm9fZGJuYW1l KHB1Yl9iYXNlX2Nvbm5pbmZvLCBjZWxsLT52YWwpOworCQlkYmluZm9baV0ucHViY29ubmlu Zm8gPSBjb25uaW5mbzsKKwkJZGJpbmZvW2ldLmRibmFtZSA9IGNlbGwtPnZhbDsKKwkJZGJp bmZvW2ldLm1hZGVfcmVwbHNsb3QgPSBmYWxzZTsKKwkJZGJpbmZvW2ldLm1hZGVfcHVibGlj YXRpb24gPSBmYWxzZTsKKwkJLyogRmlsbCBzdWJzY3JpYmVyIGF0dHJpYnV0ZXMgKi8KKwkJ Y29ubmluZm8gPSBjb25jYXRfY29ubmluZm9fZGJuYW1lKHN1Yl9iYXNlX2Nvbm5pbmZvLCBj ZWxsLT52YWwpOworCQlkYmluZm9baV0uc3ViY29ubmluZm8gPSBjb25uaW5mbzsKKwkJZGJp bmZvW2ldLm1hZGVfc3Vic2NyaXB0aW9uID0gZmFsc2U7CisJCS8qIE90aGVyIGZpZWxkcyB3 aWxsIGJlIGZpbGxlZCBsYXRlciAqLworCisJCWkrKzsKKwl9CisKKwlyZXR1cm4gZGJpbmZv OworfQorCitzdGF0aWMgUEdjb25uICoKK2Nvbm5lY3RfZGF0YWJhc2UoY29uc3QgY2hhciAq Y29ubmluZm8pCit7CisJUEdjb25uCSAgICpjb25uOworCVBHcmVzdWx0ICAgKnJlczsKKwor CWNvbm4gPSBQUWNvbm5lY3RkYihjb25uaW5mbyk7CisJaWYgKFBRc3RhdHVzKGNvbm4pICE9 IENPTk5FQ1RJT05fT0spCisJeworCQlwZ19sb2dfZXJyb3IoImNvbm5lY3Rpb24gdG8gZGF0 YWJhc2UgZmFpbGVkOiAlcyIsCisJCQkJCSBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJCXJl dHVybiBOVUxMOworCX0KKworCS8qIFNlY3VyZSBzZWFyY2hfcGF0aCAqLworCXJlcyA9IFBR ZXhlYyhjb25uLCBBTFdBWVNfU0VDVVJFX1NFQVJDSF9QQVRIX1NRTCk7CisJaWYgKFBRcmVz dWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQorCXsKKwkJcGdfbG9nX2Vycm9y KCJjb3VsZCBub3QgY2xlYXIgc2VhcmNoX3BhdGg6ICVzIiwKKwkJCQkJIFBRcmVzdWx0RXJy b3JNZXNzYWdlKHJlcykpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJUFFjbGVhcihyZXMpOwor CisJcmV0dXJuIGNvbm47Cit9CisKK3N0YXRpYyB2b2lkCitkaXNjb25uZWN0X2RhdGFiYXNl KFBHY29ubiAqY29ubikKK3sKKwlBc3NlcnQoY29ubiAhPSBOVUxMKTsKKworCVBRZmluaXNo KGNvbm4pOworfQorCisvKgorICogT2J0YWluIHRoZSBzeXN0ZW0gaWRlbnRpZmllciB1c2lu ZyB0aGUgcHJvdmlkZWQgY29ubmVjdGlvbi4gSXQgd2lsbCBiZSB1c2VkCisgKiB0byBjb21w YXJlIGlmIGEgZGF0YSBkaXJlY3RvcnkgaXMgYSBjbG9uZSBvZiBhbm90aGVyIG9uZS4KKyAq Lworc3RhdGljIHVpbnQ2NAorZ2V0X3ByaW1hcnlfc3lzaWQoY29uc3QgY2hhciAqY29ubmlu Zm8pCit7CisJUEdjb25uCSAgICpjb25uOworCVBHcmVzdWx0ICAgKnJlczsKKwl1aW50NjQJ CXN5c2lkOworCisJcGdfbG9nX2luZm8oImdldHRpbmcgc3lzdGVtIGlkZW50aWZpZXIgZnJv bSBwdWJsaXNoZXIiKTsKKworCWNvbm4gPSBjb25uZWN0X2RhdGFiYXNlKGNvbm5pbmZvKTsK KwlpZiAoY29ubiA9PSBOVUxMKQorCQlleGl0KDEpOworCisJcmVzID0gUFFleGVjKGNvbm4s ICJTRUxFQ1Qgc3lzdGVtX2lkZW50aWZpZXIgRlJPTSBwZ19jb250cm9sX3N5c3RlbSgpIik7 CisJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQorCXsKKwkJ UFFjbGVhcihyZXMpOworCQlkaXNjb25uZWN0X2RhdGFiYXNlKGNvbm4pOworCQlwZ19mYXRh bCgiY291bGQgbm90IGdldCBzeXN0ZW0gaWRlbnRpZmllcjogJXMiLAorCQkJCSBQUXJlc3Vs dEVycm9yTWVzc2FnZShyZXMpKTsKKwl9CisJaWYgKFBRbnR1cGxlcyhyZXMpICE9IDEpCisJ eworCQlQUWNsZWFyKHJlcyk7CisJCWRpc2Nvbm5lY3RfZGF0YWJhc2UoY29ubik7CisJCXBn X2ZhdGFsKCJjb3VsZCBub3QgZ2V0IHN5c3RlbSBpZGVudGlmaWVyOiBnb3QgJWQgcm93cywg ZXhwZWN0ZWQgJWQgcm93IiwKKwkJCQkgUFFudHVwbGVzKHJlcyksIDEpOworCX0KKworCXN5 c2lkID0gc3RydG91NjQoUFFnZXR2YWx1ZShyZXMsIDAsIDApLCBOVUxMLCAxMCk7CisKKwlw Z19sb2dfaW5mbygic3lzdGVtIGlkZW50aWZpZXIgaXMgJWxsdSBvbiBwdWJsaXNoZXIiLAor CQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHN5c2lkKTsKKworCVBRY2xlYXIocmVzKTsKKwlk aXNjb25uZWN0X2RhdGFiYXNlKGNvbm4pOworCisJcmV0dXJuIHN5c2lkOworfQorCisvKgor ICogT2J0YWluIHRoZSBzeXN0ZW0gaWRlbnRpZmllciBmcm9tIGNvbnRyb2wgZmlsZS4gSXQg d2lsbCBiZSB1c2VkIHRvIGNvbXBhcmUKKyAqIGlmIGEgZGF0YSBkaXJlY3RvcnkgaXMgYSBj bG9uZSBvZiBhbm90aGVyIG9uZS4gVGhpcyByb3V0aW5lIGlzIHVzZWQgbG9jYWxseQorICog YW5kIGF2b2lkcyBhIGNvbm5lY3Rpb24uCisgKi8KK3N0YXRpYyB1aW50NjQKK2dldF9zdGFu ZGJ5X3N5c2lkKGNvbnN0IGNoYXIgKmRhdGFkaXIpCit7CisJQ29udHJvbEZpbGVEYXRhICpj ZjsKKwlib29sCQljcmNfb2s7CisJdWludDY0CQlzeXNpZDsKKworCXBnX2xvZ19pbmZvKCJn ZXR0aW5nIHN5c3RlbSBpZGVudGlmaWVyIGZyb20gc3Vic2NyaWJlciIpOworCisJY2YgPSBn ZXRfY29udHJvbGZpbGUoZGF0YWRpciwgJmNyY19vayk7CisJaWYgKCFjcmNfb2spCisJCXBn X2ZhdGFsKCJjb250cm9sIGZpbGUgYXBwZWFycyB0byBiZSBjb3JydXB0Iik7CisKKwlzeXNp ZCA9IGNmLT5zeXN0ZW1faWRlbnRpZmllcjsKKworCXBnX2xvZ19pbmZvKCJzeXN0ZW0gaWRl bnRpZmllciBpcyAlbGx1IG9uIHN1YnNjcmliZXIiLAorCQkJCSh1bnNpZ25lZCBsb25nIGxv bmcpIHN5c2lkKTsKKworCXBmcmVlKGNmKTsKKworCXJldHVybiBzeXNpZDsKK30KKworLyoK KyAqIE1vZGlmeSB0aGUgc3lzdGVtIGlkZW50aWZpZXIuIFNpbmNlIGEgc3RhbmRieSBzZXJ2 ZXIgcHJlc2VydmVzIHRoZSBzeXN0ZW0KKyAqIGlkZW50aWZpZXIsIGl0IG1ha2VzIHNlbnNl IHRvIGNoYW5nZSBpdCB0byBhdm9pZCBzaXR1YXRpb25zIGluIHdoaWNoIFdBTAorICogZmls ZXMgZnJvbSBvbmUgb2YgdGhlIHN5c3RlbXMgbWlnaHQgYmUgdXNlZCBpbiB0aGUgb3RoZXIg b25lLgorICovCitzdGF0aWMgdm9pZAorbW9kaWZ5X3N1YnNjcmliZXJfc3lzaWQoY29uc3Qg Y2hhciAqcGdfcmVzZXR3YWxfcGF0aCwgQ3JlYXRlU3Vic2NyaWJlck9wdGlvbnMgKm9wdCkK K3sKKwlDb250cm9sRmlsZURhdGEgKmNmOworCWJvb2wJCWNyY19vazsKKwlzdHJ1Y3QgdGlt ZXZhbCB0djsKKworCWNoYXIJICAgKmNtZF9zdHI7CisJaW50CQkJcmM7CisKKwlwZ19sb2df aW5mbygibW9kaWZ5aW5nIHN5c3RlbSBpZGVudGlmaWVyIGZyb20gc3Vic2NyaWJlciIpOwor CisJY2YgPSBnZXRfY29udHJvbGZpbGUob3B0LT5zdWJzY3JpYmVyX2RpciwgJmNyY19vayk7 CisJaWYgKCFjcmNfb2spCisJCXBnX2ZhdGFsKCJjb250cm9sIGZpbGUgYXBwZWFycyB0byBi ZSBjb3JydXB0Iik7CisKKwkvKgorCSAqIFNlbGVjdCBhIG5ldyBzeXN0ZW0gaWRlbnRpZmll ci4KKwkgKgorCSAqIFhYWCB0aGlzIGNvZGUgd2FzIGV4dHJhY3RlZCBmcm9tIEJvb3RTdHJh cFhMT0coKS4KKwkgKi8KKwlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKKwljZi0+c3lzdGVt X2lkZW50aWZpZXIgPSAoKHVpbnQ2NCkgdHYudHZfc2VjKSA8PCAzMjsKKwljZi0+c3lzdGVt X2lkZW50aWZpZXIgfD0gKCh1aW50NjQpIHR2LnR2X3VzZWMpIDw8IDEyOworCWNmLT5zeXN0 ZW1faWRlbnRpZmllciB8PSBnZXRwaWQoKSAmIDB4RkZGOworCisJaWYgKCFkcnlfcnVuKQor CQl1cGRhdGVfY29udHJvbGZpbGUob3B0LT5zdWJzY3JpYmVyX2RpciwgY2YsIHRydWUpOwor CisJcGdfbG9nX2luZm8oInN5c3RlbSBpZGVudGlmaWVyIGlzICVsbHUgb24gc3Vic2NyaWJl ciIsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgY2YtPnN5c3RlbV9pZGVudGlmaWVyKTsK KworCXBnX2xvZ19pbmZvKCJydW5uaW5nIHBnX3Jlc2V0d2FsIG9uIHRoZSBzdWJzY3JpYmVy Iik7CisKKwljbWRfc3RyID0gcHNwcmludGYoIlwiJXNcIiAtRCBcIiVzXCIgPiBcIiVzXCIi LCBwZ19yZXNldHdhbF9wYXRoLAorCQkJCQkgICBvcHQtPnN1YnNjcmliZXJfZGlyLCBERVZO VUxMKTsKKworCXBnX2xvZ19kZWJ1ZygiY29tbWFuZCBpczogJXMiLCBjbWRfc3RyKTsKKwor CWlmICghZHJ5X3J1bikKKwl7CisJCXJjID0gc3lzdGVtKGNtZF9zdHIpOworCQlpZiAocmMg PT0gMCkKKwkJCXBnX2xvZ19pbmZvKCJzdWJzY3JpYmVyIHN1Y2Nlc3NmdWxseSBjaGFuZ2Vk IHRoZSBzeXN0ZW0gaWRlbnRpZmllciIpOworCQllbHNlCisJCQlwZ19mYXRhbCgic3Vic2Ny aWJlciBmYWlsZWQgdG8gY2hhbmdlIHN5c3RlbSBpZGVudGlmaWVyOiBleGl0IGNvZGU6ICVk IiwgcmMpOworCX0KKworCXBmcmVlKGNmKTsKK30KKworLyoKKyAqIENyZWF0ZSB0aGUgcHVi bGljYXRpb25zIGFuZCByZXBsaWNhdGlvbiBzbG90cyBpbiBwcmVwYXJhdGlvbiBmb3IgbG9n aWNhbAorICogcmVwbGljYXRpb24uCisgKi8KK3N0YXRpYyBib29sCitzZXR1cF9wdWJsaXNo ZXIoTG9naWNhbFJlcEluZm8gKmRiaW5mbykKK3sKKwlQR2Nvbm4JICAgKmNvbm47CisJUEdy ZXN1bHQgICAqcmVzOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fZGJzOyBpKyspCisJ eworCQljaGFyCQlwdWJuYW1lW05BTUVEQVRBTEVOXTsKKwkJY2hhcgkJcmVwbHNsb3RuYW1l W05BTUVEQVRBTEVOXTsKKworCQljb25uID0gY29ubmVjdF9kYXRhYmFzZShkYmluZm9baV0u cHViY29ubmluZm8pOworCQlpZiAoY29ubiA9PSBOVUxMKQorCQkJZXhpdCgxKTsKKworCQly ZXMgPSBQUWV4ZWMoY29ubiwKKwkJCQkJICJTRUxFQ1Qgb2lkIEZST00gcGdfY2F0YWxvZy5w Z19kYXRhYmFzZSAiCisJCQkJCSAiV0hFUkUgZGF0bmFtZSA9IHBnX2NhdGFsb2cuY3VycmVu dF9kYXRhYmFzZSgpIik7CisJCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX1RV UExFU19PSykKKwkJeworCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3Qgb2J0YWluIGRhdGFi YXNlIE9JRDogJXMiLAorCQkJCQkJIFBRcmVzdWx0RXJyb3JNZXNzYWdlKHJlcykpOworCQkJ cmV0dXJuIGZhbHNlOworCQl9CisKKwkJaWYgKFBRbnR1cGxlcyhyZXMpICE9IDEpCisJCXsK KwkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IG9idGFpbiBkYXRhYmFzZSBPSUQ6IGdvdCAl ZCByb3dzLCBleHBlY3RlZCAlZCByb3dzIiwKKwkJCQkJCSBQUW50dXBsZXMocmVzKSwgMSk7 CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKiBSZW1lbWJlciBkYXRhYmFzZSBPSUQg Ki8KKwkJZGJpbmZvW2ldLm9pZCA9IHN0cnRvdWwoUFFnZXR2YWx1ZShyZXMsIDAsIDApLCBO VUxMLCAxMCk7CisKKwkJUFFjbGVhcihyZXMpOworCisJCS8qCisJCSAqIEJ1aWxkIHRoZSBw dWJsaWNhdGlvbiBuYW1lLiBUaGUgbmFtZSBtdXN0IG5vdCBleGNlZWQgTkFNRURBVEFMRU4g LQorCQkgKiAxLiBUaGlzIGN1cnJlbnQgc2NoZW1hIHVzZXMgYSBtYXhpbXVtIG9mIDMxIGNo YXJhY3RlcnMgKDIwICsgMTAgKworCQkgKiAnXDAnKS4KKwkJICovCisJCXNucHJpbnRmKHB1 Ym5hbWUsIHNpemVvZihwdWJuYW1lKSwgInBnX2NyZWF0ZXN1YnNjcmliZXJfJXUiLAorCQkJ CSBkYmluZm9baV0ub2lkKTsKKwkJZGJpbmZvW2ldLnB1Ym5hbWUgPSBwZ19zdHJkdXAocHVi bmFtZSk7CisKKwkJLyoKKwkJICogQ3JlYXRlIHB1YmxpY2F0aW9uIG9uIHB1Ymxpc2hlci4g VGhpcyBzdGVwIHNob3VsZCBiZSBleGVjdXRlZAorCQkgKiAqYmVmb3JlKiBwcm9tb3Rpbmcg dGhlIHN1YnNjcmliZXIgdG8gYXZvaWQgYW55IHRyYW5zYWN0aW9ucyBiZXR3ZWVuCisJCSAq IGNvbnNpc3RlbnQgTFNOIGFuZCB0aGUgbmV3IHB1YmxpY2F0aW9uIHJvd3MgKHN1Y2ggdHJh bnNhY3Rpb25zCisJCSAqIHdvdWxkbid0IHNlZSB0aGUgbmV3IHB1YmxpY2F0aW9uIHJvd3Mg cmVzdWx0aW5nIGluIGFuIGVycm9yKS4KKwkJICovCisJCWNyZWF0ZV9wdWJsaWNhdGlvbihj b25uLCAmZGJpbmZvW2ldKTsKKworCQkvKgorCQkgKiBCdWlsZCB0aGUgcmVwbGljYXRpb24g c2xvdCBuYW1lLiBUaGUgbmFtZSBtdXN0IG5vdCBleGNlZWQKKwkJICogTkFNRURBVEFMRU4g LSAxLiBUaGlzIGN1cnJlbnQgc2NoZW1hIHVzZXMgYSBtYXhpbXVtIG9mIDQyCisJCSAqIGNo YXJhY3RlcnMgKDIwICsgMTAgKyAxICsgMTAgKyAnXDAnKS4gUElEIGlzIGluY2x1ZGVkIHRv IHJlZHVjZSB0aGUKKwkJICogcHJvYmFiaWxpdHkgb2YgY29sbGlzaW9uLiBCeSBkZWZhdWx0 LCBzdWJzY3JpcHRpb24gbmFtZSBpcyB1c2VkIGFzCisJCSAqIHJlcGxpY2F0aW9uIHNsb3Qg bmFtZS4KKwkJICovCisJCXNucHJpbnRmKHJlcGxzbG90bmFtZSwgc2l6ZW9mKHJlcGxzbG90 bmFtZSksCisJCQkJICJwZ19jcmVhdGVzdWJzY3JpYmVyXyV1XyVkIiwKKwkJCQkgZGJpbmZv W2ldLm9pZCwKKwkJCQkgKGludCkgZ2V0cGlkKCkpOworCQlkYmluZm9baV0uc3VibmFtZSA9 IHBnX3N0cmR1cChyZXBsc2xvdG5hbWUpOworCisJCS8qIENyZWF0ZSByZXBsaWNhdGlvbiBz bG90IG9uIHB1Ymxpc2hlciAqLworCQlpZiAoY3JlYXRlX2xvZ2ljYWxfcmVwbGljYXRpb25f c2xvdChjb25uLCAmZGJpbmZvW2ldLCBmYWxzZSkgIT0gTlVMTCB8fAorCQkJZHJ5X3J1bikK KwkJCXBnX2xvZ19pbmZvKCJjcmVhdGUgcmVwbGljYXRpb24gc2xvdCBcIiVzXCIgb24gcHVi bGlzaGVyIiwKKwkJCQkJCXJlcGxzbG90bmFtZSk7CisJCWVsc2UKKwkJCXJldHVybiBmYWxz ZTsKKworCQlkaXNjb25uZWN0X2RhdGFiYXNlKGNvbm4pOworCX0KKworCXJldHVybiB0cnVl OworfQorCisvKgorICogSXMgcmVjb3Zlcnkgc3RpbGwgaW4gcHJvZ3Jlc3M/CisgKiBJZiB0 aGUgYW5zd2VyIGlzIHllcywgaXQgcmV0dXJucyAxLCBvdGhlcndpc2UsIHJldHVybnMgMC4g SWYgYW4gZXJyb3Igb2NjdXJzCisgKiB3aGlsZSBleGVjdXRpbmcgdGhlIHF1ZXJ5LCBpdCBy ZXR1cm5zIC0xLgorICovCitzdGF0aWMgaW50CitzZXJ2ZXJfaXNfaW5fcmVjb3ZlcnkoUEdj b25uICpjb25uKQoreworCVBHcmVzdWx0ICAgKnJlczsKKwlpbnQJCQlyZXQ7CisKKwlyZXMg PSBQUWV4ZWMoY29ubiwgIlNFTEVDVCBwZ19jYXRhbG9nLnBnX2lzX2luX3JlY292ZXJ5KCki KTsKKworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKKwl7 CisJCVBRY2xlYXIocmVzKTsKKwkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3Qgb2J0YWluIHJl Y292ZXJ5IHByb2dyZXNzIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXQgPSBzdHJjbXAo InQiLCBQUWdldHZhbHVlKHJlcywgMCwgMCkpOworCisJUFFjbGVhcihyZXMpOworCisJaWYg KHJldCA9PSAwKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmIChyZXQgPiAwKQorCQlyZXR1cm4g MDsKKwllbHNlCisJCXJldHVybiAtMTsJCQkJLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8KK30K KworLyoKKyAqIElzIHRoZSBwcmltYXJ5IHNlcnZlciByZWFkeSBmb3IgbG9naWNhbCByZXBs aWNhdGlvbj8KKyAqLworc3RhdGljIGJvb2wKK2NoZWNrX3B1Ymxpc2hlcihMb2dpY2FsUmVw SW5mbyAqZGJpbmZvKQoreworCVBHY29ubgkgICAqY29ubjsKKwlQR3Jlc3VsdCAgICpyZXM7 CisJUFFFeHBCdWZmZXIgc3RyID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCWNoYXIJICAg KndhbF9sZXZlbDsKKwlpbnQJCQltYXhfcmVwc2xvdHM7CisJaW50CQkJY3VyX3JlcHNsb3Rz OworCWludAkJCW1heF93YWxzZW5kZXJzOworCWludAkJCWN1cl93YWxzZW5kZXJzOworCisJ cGdfbG9nX2luZm8oImNoZWNraW5nIHNldHRpbmdzIG9uIHB1Ymxpc2hlciIpOworCisJY29u biA9IGNvbm5lY3RfZGF0YWJhc2UoZGJpbmZvWzBdLnB1YmNvbm5pbmZvKTsKKwlpZiAoY29u biA9PSBOVUxMKQorCQlleGl0KDEpOworCisJLyoKKwkgKiBJZiB0aGUgcHJpbWFyeSBzZXJ2 ZXIgaXMgaW4gcmVjb3ZlcnkgKGkuZS4gY2FzY2FkaW5nIHJlcGxpY2F0aW9uKSwKKwkgKiBv YmplY3RzIChwdWJsaWNhdGlvbikgY2Fubm90IGJlIGNyZWF0ZWQgYmVjYXVzZSBpdCBpcyBy ZWFkIG9ubHkuCisJICovCisJaWYgKHNlcnZlcl9pc19pbl9yZWNvdmVyeShjb25uKSA9PSAx KQorCQlwZ19mYXRhbCgicHJpbWFyeSBzZXJ2ZXIgY2Fubm90IGJlIGluIHJlY292ZXJ5Iik7 CisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIExvZ2ljYWwgcmVwbGljYXRpb24gcmVx dWlyZXMgYSBmZXcgcGFyYW1ldGVycyB0byBiZSBzZXQgb24gcHVibGlzaGVyLgorCSAqIFNp bmNlIHRoZXNlIHBhcmFtZXRlcnMgYXJlIG5vdCBhIHJlcXVpcmVtZW50IGZvciBwaHlzaWNh bCByZXBsaWNhdGlvbiwKKwkgKiB3ZSBzaG91bGQgY2hlY2sgaXQgdG8gbWFrZSBzdXJlIGl0 IHdvbid0IGZhaWwuCisJICoKKwkgKiAtIHdhbF9sZXZlbCA9IGxvZ2ljYWwKKwkgKiAtIG1h eF9yZXBsaWNhdGlvbl9zbG90cyA+PSBjdXJyZW50ICsgbnVtYmVyIG9mIGRicyB0byBiZSBj b252ZXJ0ZWQKKwkgKiAtIG1heF93YWxfc2VuZGVycyA+PSBjdXJyZW50ICsgbnVtYmVyIG9m IGRicyB0byBiZSBjb252ZXJ0ZWQKKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqLworCXJl cyA9IFBRZXhlYyhjb25uLAorCQkJCSAiV0lUSCB3bCBBUyAiCisJCQkJICIoU0VMRUNUIHNl dHRpbmcgQVMgd2FsbGV2ZWwgRlJPTSBwZ19jYXRhbG9nLnBnX3NldHRpbmdzICIKKwkJCQkg IldIRVJFIG5hbWUgPSAnd2FsX2xldmVsJyksICIKKwkJCQkgInRvdGFsX21ycyBBUyAiCisJ CQkJICIoU0VMRUNUIHNldHRpbmcgQVMgdG1ycyBGUk9NIHBnX2NhdGFsb2cucGdfc2V0dGlu Z3MgIgorCQkJCSAiV0hFUkUgbmFtZSA9ICdtYXhfcmVwbGljYXRpb25fc2xvdHMnKSwgIgor CQkJCSAiY3VyX21ycyBBUyAiCisJCQkJICIoU0VMRUNUIGNvdW50KCopIEFTIGNtcnMgIgor CQkJCSAiRlJPTSBwZ19jYXRhbG9nLnBnX3JlcGxpY2F0aW9uX3Nsb3RzKSwgIgorCQkJCSAi dG90YWxfbXdzIEFTICIKKwkJCQkgIihTRUxFQ1Qgc2V0dGluZyBBUyB0bXdzIEZST00gcGdf Y2F0YWxvZy5wZ19zZXR0aW5ncyAiCisJCQkJICJXSEVSRSBuYW1lID0gJ21heF93YWxfc2Vu ZGVycycpLCAiCisJCQkJICJjdXJfbXdzIEFTICIKKwkJCQkgIihTRUxFQ1QgY291bnQoKikg QVMgY213cyBGUk9NIHBnX2NhdGFsb2cucGdfc3RhdF9hY3Rpdml0eSAiCisJCQkJICJXSEVS RSBiYWNrZW5kX3R5cGUgPSAnd2Fsc2VuZGVyJykgIgorCQkJCSAiU0VMRUNUIHdhbGxldmVs LCB0bXJzLCBjbXJzLCB0bXdzLCBjbXdzICIKKwkJCQkgIkZST00gd2wsIHRvdGFsX21ycywg Y3VyX21ycywgdG90YWxfbXdzLCBjdXJfbXdzIik7CisKKwlpZiAoUFFyZXN1bHRTdGF0dXMo cmVzKSAhPSBQR1JFU19UVVBMRVNfT0spCisJeworCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5v dCBvYnRhaW4gcHVibGlzaGVyIHNldHRpbmdzOiAlcyIsCisJCQkJCSBQUXJlc3VsdEVycm9y TWVzc2FnZShyZXMpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXdhbF9sZXZlbCA9IHN0 cmR1cChQUWdldHZhbHVlKHJlcywgMCwgMCkpOworCW1heF9yZXBzbG90cyA9IGF0b2koUFFn ZXR2YWx1ZShyZXMsIDAsIDEpKTsKKwljdXJfcmVwc2xvdHMgPSBhdG9pKFBRZ2V0dmFsdWUo cmVzLCAwLCAyKSk7CisJbWF4X3dhbHNlbmRlcnMgPSBhdG9pKFBRZ2V0dmFsdWUocmVzLCAw LCAzKSk7CisJY3VyX3dhbHNlbmRlcnMgPSBhdG9pKFBRZ2V0dmFsdWUocmVzLCAwLCA0KSk7 CisKKwlQUWNsZWFyKHJlcyk7CisKKwlwZ19sb2dfZGVidWcoInB1Ymxpc2hlcjogd2FsX2xl dmVsOiAlcyIsIHdhbF9sZXZlbCk7CisJcGdfbG9nX2RlYnVnKCJwdWJsaXNoZXI6IG1heF9y ZXBsaWNhdGlvbl9zbG90czogJWQiLCBtYXhfcmVwc2xvdHMpOworCXBnX2xvZ19kZWJ1Zygi cHVibGlzaGVyOiBjdXJyZW50IHJlcGxpY2F0aW9uIHNsb3RzOiAlZCIsIGN1cl9yZXBzbG90 cyk7CisJcGdfbG9nX2RlYnVnKCJwdWJsaXNoZXI6IG1heF93YWxfc2VuZGVyczogJWQiLCBt YXhfd2Fsc2VuZGVycyk7CisJcGdfbG9nX2RlYnVnKCJwdWJsaXNoZXI6IGN1cnJlbnQgd2Fs IHNlbmRlcnM6ICVkIiwgY3VyX3dhbHNlbmRlcnMpOworCisJLyoKKwkgKiBJZiBzdGFuZGJ5 IHNldHMgcHJpbWFyeV9zbG90X25hbWUsIGNoZWNrIGlmIHRoaXMgcmVwbGljYXRpb24gc2xv dCBpcyBpbgorCSAqIHVzZSBvbiBwcmltYXJ5IGZvciBXQUwgcmV0ZW50aW9uIHB1cnBvc2Vz LiBUaGlzIHJlcGxpY2F0aW9uIHNsb3QgaGFzIG5vCisJICogdXNlIGFmdGVyIHRoZSB0cmFu c2Zvcm1hdGlvbiwgaGVuY2UsIGl0IHdpbGwgYmUgcmVtb3ZlZCBhdCB0aGUgZW5kIG9mCisJ ICogdGhpcyBwcm9jZXNzLgorCSAqLworCWlmIChwcmltYXJ5X3Nsb3RfbmFtZSkKKwl7CisJ CWFwcGVuZFBRRXhwQnVmZmVyKHN0ciwKKwkJCQkJCSAgIlNFTEVDVCAxIEZST00gcGdfcmVw bGljYXRpb25fc2xvdHMgIgorCQkJCQkJICAiV0hFUkUgYWN0aXZlIEFORCBzbG90X25hbWUg PSAnJXMnIiwKKwkJCQkJCSAgcHJpbWFyeV9zbG90X25hbWUpOworCisJCXBnX2xvZ19kZWJ1 ZygiY29tbWFuZCBpczogJXMiLCBzdHItPmRhdGEpOworCisJCXJlcyA9IFBRZXhlYyhjb25u LCBzdHItPmRhdGEpOworCQlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19UVVBM RVNfT0spCisJCXsKKwkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IG9idGFpbiByZXBsaWNh dGlvbiBzbG90IGluZm9ybWF0aW9uOiAlcyIsCisJCQkJCQkgUFFyZXN1bHRFcnJvck1lc3Nh Z2UocmVzKSk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQlpZiAoUFFudHVwbGVzKHJl cykgIT0gMSkKKwkJeworCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3Qgb2J0YWluIHJlcGxp Y2F0aW9uIHNsb3QgaW5mb3JtYXRpb246IGdvdCAlZCByb3dzLCBleHBlY3RlZCAlZCByb3ci LAorCQkJCQkJIFBRbnR1cGxlcyhyZXMpLCAxKTsKKwkJCXBnX2ZyZWUocHJpbWFyeV9zbG90 X25hbWUpOyAvKiBpdCBpcyBub3QgYmVpbmcgdXNlZC4gKi8KKwkJCXByaW1hcnlfc2xvdF9u YW1lID0gTlVMTDsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQllbHNlCisJCQlwZ19sb2df aW5mbygicHJpbWFyeSBoYXMgcmVwbGljYXRpb24gc2xvdCBcIiVzXCIiLAorCQkJCQkJcHJp bWFyeV9zbG90X25hbWUpOworCisJCVBRY2xlYXIocmVzKTsKKwl9CisKKwlkaXNjb25uZWN0 X2RhdGFiYXNlKGNvbm4pOworCisJaWYgKHN0cmNtcCh3YWxfbGV2ZWwsICJsb2dpY2FsIikg IT0gMCkKKwl7CisJCXBnX2xvZ19lcnJvcigicHVibGlzaGVyIHJlcXVpcmVzIHdhbF9sZXZl bCA+PSBsb2dpY2FsIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAobWF4X3JlcHNs b3RzIC0gY3VyX3JlcHNsb3RzIDwgbnVtX2RicykKKwl7CisJCXBnX2xvZ19lcnJvcigicHVi bGlzaGVyIHJlcXVpcmVzICVkIHJlcGxpY2F0aW9uIHNsb3RzLCBidXQgb25seSAlZCByZW1h aW4iLAorCQkJCQkgbnVtX2RicywgbWF4X3JlcHNsb3RzIC0gY3VyX3JlcHNsb3RzKTsKKwkJ cGdfbG9nX2Vycm9yX2hpbnQoIkNvbnNpZGVyIGluY3JlYXNpbmcgbWF4X3JlcGxpY2F0aW9u X3Nsb3RzIHRvIGF0IGxlYXN0ICVkLiIsCisJCQkJCQkgIGN1cl9yZXBzbG90cyArIG51bV9k YnMpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKG1heF93YWxzZW5kZXJzIC0gY3Vy X3dhbHNlbmRlcnMgPCBudW1fZGJzKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJwdWJsaXNoZXIg cmVxdWlyZXMgJWQgd2FsIHNlbmRlciBwcm9jZXNzZXMsIGJ1dCBvbmx5ICVkIHJlbWFpbiIs CisJCQkJCSBudW1fZGJzLCBtYXhfd2Fsc2VuZGVycyAtIGN1cl93YWxzZW5kZXJzKTsKKwkJ cGdfbG9nX2Vycm9yX2hpbnQoIkNvbnNpZGVyIGluY3JlYXNpbmcgbWF4X3dhbF9zZW5kZXJz IHRvIGF0IGxlYXN0ICVkLiIsCisJCQkJCQkgIGN1cl93YWxzZW5kZXJzICsgbnVtX2Ricyk7 CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIElz IHRoZSBzdGFuZGJ5IHNlcnZlciByZWFkeSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbj8KKyAq Lworc3RhdGljIGJvb2wKK2NoZWNrX3N1YnNjcmliZXIoTG9naWNhbFJlcEluZm8gKmRiaW5m bykKK3sKKwlQR2Nvbm4JICAgKmNvbm47CisJUEdyZXN1bHQgICAqcmVzOworCVBRRXhwQnVm ZmVyIHN0ciA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwlpbnQJCQltYXhfbHJ3b3JrZXJz OworCWludAkJCW1heF9yZXBzbG90czsKKwlpbnQJCQltYXhfd3Byb2NzOworCisJcGdfbG9n X2luZm8oImNoZWNraW5nIHNldHRpbmdzIG9uIHN1YnNjcmliZXIiKTsKKworCWNvbm4gPSBj b25uZWN0X2RhdGFiYXNlKGRiaW5mb1swXS5zdWJjb25uaW5mbyk7CisJaWYgKGNvbm4gPT0g TlVMTCkKKwkJZXhpdCgxKTsKKworCS8qIFRoZSB0YXJnZXQgc2VydmVyIG11c3QgYmUgYSBz dGFuZGJ5ICovCisJaWYgKHNlcnZlcl9pc19pbl9yZWNvdmVyeShjb25uKSA9PSAwKQorCXsK KwkJcGdfbG9nX2Vycm9yKCJUaGUgdGFyZ2V0IHNlcnZlciBpcyBub3QgYSBzdGFuZGJ5Iik7 CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKgorCSAqIFN1YnNjcmlwdGlvbnMgY2FuIG9u bHkgYmUgY3JlYXRlZCBieSByb2xlcyB0aGF0IGhhdmUgdGhlIHByaXZpbGVnZXMgb2YKKwkg KiBwZ19jcmVhdGVfc3Vic2NyaXB0aW9uIHJvbGUgYW5kIENSRUFURSBwcml2aWxlZ2VzIG9u IHRoZSBzcGVjaWZpZWQKKwkgKiBkYXRhYmFzZS4KKwkgKi8KKwlhcHBlbmRQUUV4cEJ1ZmZl cihzdHIsCisJCQkJCSAgIlNFTEVDVCBwZ19jYXRhbG9nLnBnX2hhc19yb2xlKGN1cnJlbnRf dXNlciwgJXUsICdNRU1CRVInKSwgIgorCQkJCQkgICJwZ19jYXRhbG9nLmhhc19kYXRhYmFz ZV9wcml2aWxlZ2UoY3VycmVudF91c2VyLCAnJXMnLCAnQ1JFQVRFJyksICIKKwkJCQkJICAi cGdfY2F0YWxvZy5oYXNfZnVuY3Rpb25fcHJpdmlsZWdlKGN1cnJlbnRfdXNlciwgJ3BnX2Nh dGFsb2cucGdfcmVwbGljYXRpb25fb3JpZ2luX2FkdmFuY2UodGV4dCwgcGdfbHNuKScsICdF WEVDVVRFJykiLAorCQkJCQkgIFJPTEVfUEdfQ1JFQVRFX1NVQlNDUklQVElPTiwgZGJpbmZv WzBdLmRibmFtZSk7CisKKwlwZ19sb2dfZGVidWcoImNvbW1hbmQgaXM6ICVzIiwgc3RyLT5k YXRhKTsKKworCXJlcyA9IFBRZXhlYyhjb25uLCBzdHItPmRhdGEpOworCisJaWYgKFBRcmVz dWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQorCXsKKwkJcGdfbG9nX2Vycm9y KCJjb3VsZCBub3Qgb2J0YWluIGFjY2VzcyBwcml2aWxlZ2UgaW5mb3JtYXRpb246ICVzIiwK KwkJCQkJIFBRcmVzdWx0RXJyb3JNZXNzYWdlKHJlcykpOworCQlyZXR1cm4gZmFsc2U7CisJ fQorCisJaWYgKHN0cmNtcChQUWdldHZhbHVlKHJlcywgMCwgMCksICJ0IikgIT0gMCkKKwl7 CisJCXBnX2xvZ19lcnJvcigicGVybWlzc2lvbiBkZW5pZWQgdG8gY3JlYXRlIHN1YnNjcmlw dGlvbiIpOworCQlwZ19sb2dfZXJyb3JfaGludCgiT25seSByb2xlcyB3aXRoIHByaXZpbGVn ZXMgb2YgdGhlIFwiJXNcIiByb2xlIG1heSBjcmVhdGUgc3Vic2NyaXB0aW9ucy4iLAorCQkJ CQkJICAicGdfY3JlYXRlX3N1YnNjcmlwdGlvbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQor CWlmIChzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIDAsIDEpLCAidCIpICE9IDApCisJeworCQlw Z19sb2dfZXJyb3IoInBlcm1pc3Npb24gZGVuaWVkIGZvciBkYXRhYmFzZSAlcyIsIGRiaW5m b1swXS5kYm5hbWUpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCWlmIChzdHJjbXAoUFFnZXR2 YWx1ZShyZXMsIDAsIDEpLCAidCIpICE9IDApCisJeworCQlwZ19sb2dfZXJyb3IoInBlcm1p c3Npb24gZGVuaWVkIGZvciBmdW5jdGlvbiBcIiVzXCIiLAorCQkJCQkgInBnX2NhdGFsb2cu cGdfcmVwbGljYXRpb25fb3JpZ2luX2FkdmFuY2UodGV4dCwgcGdfbHNuKSIpOworCQlyZXR1 cm4gZmFsc2U7CisJfQorCisJZGVzdHJveVBRRXhwQnVmZmVyKHN0cik7CisJUFFjbGVhcihy ZXMpOworCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiBMb2dpY2FsIHJlcGxpY2F0aW9u IHJlcXVpcmVzIGEgZmV3IHBhcmFtZXRlcnMgdG8gYmUgc2V0IG9uIHN1YnNjcmliZXIuCisJ ICogU2luY2UgdGhlc2UgcGFyYW1ldGVycyBhcmUgbm90IGEgcmVxdWlyZW1lbnQgZm9yIHBo eXNpY2FsIHJlcGxpY2F0aW9uLAorCSAqIHdlIHNob3VsZCBjaGVjayBpdCB0byBtYWtlIHN1 cmUgaXQgd29uJ3QgZmFpbC4KKwkgKgorCSAqIC0gbWF4X3JlcGxpY2F0aW9uX3Nsb3RzID49 IG51bWJlciBvZiBkYnMgdG8gYmUgY29udmVydGVkCisJICogLSBtYXhfbG9naWNhbF9yZXBs aWNhdGlvbl93b3JrZXJzID49IG51bWJlciBvZiBkYnMgdG8gYmUgY29udmVydGVkCisJICog LSBtYXhfd29ya2VyX3Byb2Nlc3NlcyA+PSAxICsgbnVtYmVyIG9mIGRicyB0byBiZSBjb252 ZXJ0ZWQKKwkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqLworCXJlcyA9IFBRZXhlYyhjb25u LAorCQkJCSAiU0VMRUNUIHNldHRpbmcgRlJPTSBwZ19zZXR0aW5ncyBXSEVSRSBuYW1lIElO ICgiCisJCQkJICInbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VycycsICIKKwkJCQkg IidtYXhfcmVwbGljYXRpb25fc2xvdHMnLCAiCisJCQkJICInbWF4X3dvcmtlcl9wcm9jZXNz ZXMnLCAiCisJCQkJICIncHJpbWFyeV9zbG90X25hbWUnKSAiCisJCQkJICJPUkRFUiBCWSBu YW1lIik7CisKKwlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19UVVBMRVNfT0sp CisJeworCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBvYnRhaW4gc3Vic2NyaWJlciBzZXR0 aW5nczogJXMiLAorCQkJCQkgUFFyZXN1bHRFcnJvck1lc3NhZ2UocmVzKSk7CisJCXJldHVy biBmYWxzZTsKKwl9CisKKwltYXhfbHJ3b3JrZXJzID0gYXRvaShQUWdldHZhbHVlKHJlcywg MCwgMCkpOworCW1heF9yZXBzbG90cyA9IGF0b2koUFFnZXR2YWx1ZShyZXMsIDEsIDApKTsK KwltYXhfd3Byb2NzID0gYXRvaShQUWdldHZhbHVlKHJlcywgMiwgMCkpOworCWlmIChzdHJj bXAoUFFnZXR2YWx1ZShyZXMsIDMsIDApLCAiIikgIT0gMCkKKwkJcHJpbWFyeV9zbG90X25h bWUgPSBwZ19zdHJkdXAoUFFnZXR2YWx1ZShyZXMsIDMsIDApKTsKKworCXBnX2xvZ19kZWJ1 Zygic3Vic2NyaWJlcjogbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VyczogJWQiLAor CQkJCSBtYXhfbHJ3b3JrZXJzKTsKKwlwZ19sb2dfZGVidWcoInN1YnNjcmliZXI6IG1heF9y ZXBsaWNhdGlvbl9zbG90czogJWQiLCBtYXhfcmVwc2xvdHMpOworCXBnX2xvZ19kZWJ1Zygi c3Vic2NyaWJlcjogbWF4X3dvcmtlcl9wcm9jZXNzZXM6ICVkIiwgbWF4X3dwcm9jcyk7CisJ cGdfbG9nX2RlYnVnKCJzdWJzY3JpYmVyOiBwcmltYXJ5X3Nsb3RfbmFtZTogJXMiLCBwcmlt YXJ5X3Nsb3RfbmFtZSk7CisKKwlQUWNsZWFyKHJlcyk7CisKKwlkaXNjb25uZWN0X2RhdGFi YXNlKGNvbm4pOworCisJaWYgKG1heF9yZXBzbG90cyA8IG51bV9kYnMpCisJeworCQlwZ19s b2dfZXJyb3IoInN1YnNjcmliZXIgcmVxdWlyZXMgJWQgcmVwbGljYXRpb24gc2xvdHMsIGJ1 dCBvbmx5ICVkIHJlbWFpbiIsCisJCQkJCSBudW1fZGJzLCBtYXhfcmVwc2xvdHMpOworCQlw Z19sb2dfZXJyb3JfaGludCgiQ29uc2lkZXIgaW5jcmVhc2luZyBtYXhfcmVwbGljYXRpb25f c2xvdHMgdG8gYXQgbGVhc3QgJWQuIiwKKwkJCQkJCSAgbnVtX2Ricyk7CisJCXJldHVybiBm YWxzZTsKKwl9CisKKwlpZiAobWF4X2xyd29ya2VycyA8IG51bV9kYnMpCisJeworCQlwZ19s b2dfZXJyb3IoInN1YnNjcmliZXIgcmVxdWlyZXMgJWQgbG9naWNhbCByZXBsaWNhdGlvbiB3 b3JrZXJzLCBidXQgb25seSAlZCByZW1haW4iLAorCQkJCQkgbnVtX2RicywgbWF4X2xyd29y a2Vycyk7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJDb25zaWRlciBpbmNyZWFzaW5nIG1heF9s b2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnMgdG8gYXQgbGVhc3QgJWQuIiwKKwkJCQkJCSAg bnVtX2Ricyk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAobWF4X3dwcm9jcyA8IG51 bV9kYnMgKyAxKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJzdWJzY3JpYmVyIHJlcXVpcmVzICVk IHdvcmtlciBwcm9jZXNzZXMsIGJ1dCBvbmx5ICVkIHJlbWFpbiIsCisJCQkJCSBudW1fZGJz ICsgMSwgbWF4X3dwcm9jcyk7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJDb25zaWRlciBpbmNy ZWFzaW5nIG1heF93b3JrZXJfcHJvY2Vzc2VzIHRvIGF0IGxlYXN0ICVkLiIsCisJCQkJCQkg IG51bV9kYnMgKyAxKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOwor fQorCisvKgorICogQ3JlYXRlIHRoZSBzdWJzY3JpcHRpb25zLCBhZGp1c3QgdGhlIGluaXRp YWwgbG9jYXRpb24gZm9yIGxvZ2ljYWwKKyAqIHJlcGxpY2F0aW9uIGFuZCBlbmFibGUgdGhl IHN1YnNjcmlwdGlvbnMuIFRoYXQncyB0aGUgbGFzdCBzdGVwIGZvciBsb2dpY2FsCisgKiBy ZXBsaWF0aW9uIHNldHVwLgorICovCitzdGF0aWMgYm9vbAorc2V0dXBfc3Vic2NyaWJlcihM b2dpY2FsUmVwSW5mbyAqZGJpbmZvLCBjb25zdCBjaGFyICpjb25zaXN0ZW50X2xzbikKK3sK KwlQR2Nvbm4JICAgKmNvbm47CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG51bV9kYnM7IGkr KykKKwl7CisJCS8qIENvbm5lY3QgdG8gc3Vic2NyaWJlci4gKi8KKwkJY29ubiA9IGNvbm5l Y3RfZGF0YWJhc2UoZGJpbmZvW2ldLnN1YmNvbm5pbmZvKTsKKwkJaWYgKGNvbm4gPT0gTlVM TCkKKwkJCWV4aXQoMSk7CisKKwkJLyoKKwkJICogU2luY2UgdGhlIHB1YmxpY2F0aW9uIHdh cyBjcmVhdGVkIGJlZm9yZSB0aGUgY29uc2lzdGVudCBMU04sIGl0IGlzCisJCSAqIGF2YWls YWJsZSBvbiB0aGUgc3Vic2NyaWJlciB3aGVuIHRoZSBwaHlzaWNhbCByZXBsaWNhIGlzIHBy b21vdGVkLgorCQkgKiBSZW1vdmUgcHVibGljYXRpb25zIGZyb20gdGhlIHN1YnNjcmliZXIg YmVjYXVzZSBpdCBoYXMgbm8gdXNlLgorCQkgKi8KKwkJZHJvcF9wdWJsaWNhdGlvbihjb25u LCAmZGJpbmZvW2ldKTsKKworCQljcmVhdGVfc3Vic2NyaXB0aW9uKGNvbm4sICZkYmluZm9b aV0pOworCisJCS8qIFNldCB0aGUgcmVwbGljYXRpb24gcHJvZ3Jlc3MgdG8gdGhlIGNvcnJl Y3QgTFNOICovCisJCXNldF9yZXBsaWNhdGlvbl9wcm9ncmVzcyhjb25uLCAmZGJpbmZvW2ld LCBjb25zaXN0ZW50X2xzbik7CisKKwkJLyogRW5hYmxlIHN1YnNjcmlwdGlvbiAqLworCQll bmFibGVfc3Vic2NyaXB0aW9uKGNvbm4sICZkYmluZm9baV0pOworCisJCWRpc2Nvbm5lY3Rf ZGF0YWJhc2UoY29ubik7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBDcmVh dGUgYSBsb2dpY2FsIHJlcGxpY2F0aW9uIHNsb3QgYW5kIHJldHVybnMgYSBMU04uCisgKgor ICogQ3JlYXRlUmVwbGljYXRpb25TbG90KCkgaXMgbm90IHVzZWQgYmVjYXVzZSBpdCBkb2Vz IG5vdCBwcm92aWRlIHRoZSBvbmUtcm93CisgKiByZXN1bHQgc2V0IHRoYXQgY29udGFpbnMg dGhlIExTTi4KKyAqLworc3RhdGljIGNoYXIgKgorY3JlYXRlX2xvZ2ljYWxfcmVwbGljYXRp b25fc2xvdChQR2Nvbm4gKmNvbm4sIExvZ2ljYWxSZXBJbmZvICpkYmluZm8sCisJCQkJCQkJ CWJvb2wgdGVtcG9yYXJ5KQoreworCVBRRXhwQnVmZmVyIHN0ciA9IGNyZWF0ZVBRRXhwQnVm ZmVyKCk7CisJUEdyZXN1bHQgICAqcmVzID0gTlVMTDsKKwljaGFyCQlzbG90X25hbWVbTkFN RURBVEFMRU5dOworCWNoYXIJICAgKmxzbiA9IE5VTEw7CisKKwlBc3NlcnQoY29ubiAhPSBO VUxMKTsKKworCS8qIFRoaXMgdGVtcG9yYXJ5IHJlcGxpY2F0aW9uIHNsb3QgaXMgb25seSB1 c2VkIGZvciBjYXRjaHVwIHB1cnBvc2VzICovCisJaWYgKHRlbXBvcmFyeSkKKwl7CisJCXNu cHJpbnRmKHNsb3RfbmFtZSwgTkFNRURBVEFMRU4sICJwZ19jcmVhdGVzdWJzY3JpYmVyXyVk X3N0YXJ0cG9pbnQiLAorCQkJCSAoaW50KSBnZXRwaWQoKSk7CisJfQorCWVsc2UKKwkJc25w cmludGYoc2xvdF9uYW1lLCBOQU1FREFUQUxFTiwgIiVzIiwgZGJpbmZvLT5zdWJuYW1lKTsK KworCXBnX2xvZ19pbmZvKCJjcmVhdGluZyB0aGUgcmVwbGljYXRpb24gc2xvdCBcIiVzXCIg b24gZGF0YWJhc2UgXCIlc1wiIiwKKwkJCQlzbG90X25hbWUsIGRiaW5mby0+ZGJuYW1lKTsK KworCWFwcGVuZFBRRXhwQnVmZmVyKHN0ciwKKwkJCQkJICAiU0VMRUNUIGxzbiBGUk9NIHBn X2NyZWF0ZV9sb2dpY2FsX3JlcGxpY2F0aW9uX3Nsb3QoJyVzJywgJyVzJywgJXMsIGZhbHNl LCBmYWxzZSkiLAorCQkJCQkgIHNsb3RfbmFtZSwgInBnb3V0cHV0IiwgdGVtcG9yYXJ5ID8g InRydWUiIDogImZhbHNlIik7CisKKwlwZ19sb2dfZGVidWcoImNvbW1hbmQgaXM6ICVzIiwg c3RyLT5kYXRhKTsKKworCWlmICghZHJ5X3J1bikKKwl7CisJCXJlcyA9IFBRZXhlYyhjb25u LCBzdHItPmRhdGEpOworCQlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19UVVBM RVNfT0spCisJCXsKKwkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGNyZWF0ZSByZXBsaWNh dGlvbiBzbG90IFwiJXNcIiBvbiBkYXRhYmFzZSBcIiVzXCI6ICVzIiwKKwkJCQkJCSBzbG90 X25hbWUsIGRiaW5mby0+ZGJuYW1lLAorCQkJCQkJIFBRcmVzdWx0RXJyb3JNZXNzYWdlKHJl cykpOworCQkJcmV0dXJuIGxzbjsKKwkJfQorCX0KKworCS8qIENsZWFudXAgaWYgdGhlcmUg aXMgYW55IGZhaWx1cmUgKi8KKwlpZiAoIXRlbXBvcmFyeSkKKwkJZGJpbmZvLT5tYWRlX3Jl cGxzbG90ID0gdHJ1ZTsKKworCWlmICghZHJ5X3J1bikKKwl7CisJCWxzbiA9IHBnX3N0cmR1 cChQUWdldHZhbHVlKHJlcywgMCwgMCkpOworCQlQUWNsZWFyKHJlcyk7CisJfQorCisJZGVz dHJveVBRRXhwQnVmZmVyKHN0cik7CisKKwlyZXR1cm4gbHNuOworfQorCitzdGF0aWMgdm9p ZAorZHJvcF9yZXBsaWNhdGlvbl9zbG90KFBHY29ubiAqY29ubiwgTG9naWNhbFJlcEluZm8g KmRiaW5mbywKKwkJCQkJICBjb25zdCBjaGFyICpzbG90X25hbWUpCit7CisJUFFFeHBCdWZm ZXIgc3RyID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlQR3Jlc3VsdCAgICpyZXM7CisKKwlB c3NlcnQoY29ubiAhPSBOVUxMKTsKKworCXBnX2xvZ19pbmZvKCJkcm9wcGluZyB0aGUgcmVw bGljYXRpb24gc2xvdCBcIiVzXCIgb24gZGF0YWJhc2UgXCIlc1wiIiwKKwkJCQlzbG90X25h bWUsIGRiaW5mby0+ZGJuYW1lKTsKKworCWFwcGVuZFBRRXhwQnVmZmVyKHN0ciwgIlNFTEVD VCBwZ19kcm9wX3JlcGxpY2F0aW9uX3Nsb3QoJyVzJykiLCBzbG90X25hbWUpOworCisJcGdf bG9nX2RlYnVnKCJjb21tYW5kIGlzOiAlcyIsIHN0ci0+ZGF0YSk7CisKKwlpZiAoIWRyeV9y dW4pCisJeworCQlyZXMgPSBQUWV4ZWMoY29ubiwgc3RyLT5kYXRhKTsKKwkJaWYgKFBRcmVz dWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQorCQkJcGdfbG9nX2Vycm9yKCJj b3VsZCBub3QgZHJvcCByZXBsaWNhdGlvbiBzbG90IFwiJXNcIiBvbiBkYXRhYmFzZSBcIiVz XCI6ICVzIiwKKwkJCQkJCSBzbG90X25hbWUsIGRiaW5mby0+ZGJuYW1lLCBQUWVycm9yTWVz c2FnZShjb25uKSk7CisKKwkJUFFjbGVhcihyZXMpOworCX0KKworCWRlc3Ryb3lQUUV4cEJ1 ZmZlcihzdHIpOworfQorCisvKgorICogQ3JlYXRlIGEgZGlyZWN0b3J5IHRvIHN0b3JlIGFu eSBsb2cgaW5mb3JtYXRpb24uIEFkanVzdCB0aGUgcGVybWlzc2lvbnMuCisgKiBSZXR1cm4g YSBmaWxlIG5hbWUgKGZ1bGwgcGF0aCkgdGhhdCdzIHVzZWQgYnkgdGhlIHN0YW5kYnkgc2Vy dmVyIHdoZW4gaXQgaXMKKyAqIHJ1bi4KKyAqLworc3RhdGljIGNoYXIgKgorc2V0dXBfc2Vy dmVyX2xvZ2ZpbGUoY29uc3QgY2hhciAqZGF0YWRpcikKK3sKKwljaGFyCQl0aW1lYnVmWzEy OF07CisJc3RydWN0IHRpbWV2YWwgdGltZTsKKwl0aW1lX3QJCXR0OworCWludAkJCWxlbjsK KwljaGFyCSAgICpiYXNlX2RpcjsKKwljaGFyCSAgICpmaWxlbmFtZTsKKworCWJhc2VfZGly ID0gKGNoYXIgKikgcGdfbWFsbG9jMChNQVhQR1BBVEgpOworCWxlbiA9IHNucHJpbnRmKGJh c2VfZGlyLCBNQVhQR1BBVEgsICIlcy8lcyIsIGRhdGFkaXIsIFBHU19PVVRQVVRfRElSKTsK KwlpZiAobGVuID49IE1BWFBHUEFUSCkKKwkJcGdfZmF0YWwoImRpcmVjdG9yeSBwYXRoIGZv ciBzdWJzY3JpYmVyIGlzIHRvbyBsb25nIik7CisKKwlpZiAoIUdldERhdGFEaXJlY3RvcnlD cmVhdGVQZXJtKGRhdGFkaXIpKQorCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgcGVybWlz c2lvbnMgb2YgZGlyZWN0b3J5IFwiJXNcIjogJW0iLAorCQkJCSBkYXRhZGlyKTsKKworCWlm IChta2RpcihiYXNlX2RpciwgcGdfZGlyX2NyZWF0ZV9tb2RlKSA8IDAgJiYgZXJybm8gIT0g RUVYSVNUKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIlc1wi OiAlbSIsIGJhc2VfZGlyKTsKKworCS8qIEFwcGVuZCB0aW1lc3RhbXAgd2l0aCBJU08gODYw MSBmb3JtYXQgKi8KKwlnZXR0aW1lb2ZkYXkoJnRpbWUsIE5VTEwpOworCXR0ID0gKHRpbWVf dCkgdGltZS50dl9zZWM7CisJc3RyZnRpbWUodGltZWJ1Ziwgc2l6ZW9mKHRpbWVidWYpLCAi JVklbSVkVCVIJU0lUyIsIGxvY2FsdGltZSgmdHQpKTsKKwlzbnByaW50Zih0aW1lYnVmICsg c3RybGVuKHRpbWVidWYpLCBzaXplb2YodGltZWJ1ZikgLSBzdHJsZW4odGltZWJ1ZiksCisJ CQkgIi4lMDNkIiwgKGludCkgKHRpbWUudHZfdXNlYyAvIDEwMDApKTsKKworCWZpbGVuYW1l ID0gKGNoYXIgKikgcGdfbWFsbG9jMChNQVhQR1BBVEgpOworCWxlbiA9IHNucHJpbnRmKGZp bGVuYW1lLCBNQVhQR1BBVEgsICIlcy8lcy9zZXJ2ZXJfc3RhcnRfJXMubG9nIiwgZGF0YWRp ciwKKwkJCQkgICBQR1NfT1VUUFVUX0RJUiwgdGltZWJ1Zik7CisJaWYgKGxlbiA+PSBNQVhQ R1BBVEgpCisJCXBnX2ZhdGFsKCJsb2cgZmlsZSBwYXRoIGlzIHRvbyBsb25nIik7CisKKwly ZXR1cm4gZmlsZW5hbWU7Cit9CisKK3N0YXRpYyB2b2lkCitzdGFydF9zdGFuZGJ5X3NlcnZl cihjb25zdCBjaGFyICpwZ19jdGxfcGF0aCwgY29uc3QgY2hhciAqZGF0YWRpciwKKwkJCQkJ IGNvbnN0IGNoYXIgKmxvZ2ZpbGUpCit7CisJY2hhcgkgICAqcGdfY3RsX2NtZDsKKwlpbnQJ CQlyYzsKKworCXBnX2N0bF9jbWQgPSBwc3ByaW50ZigiXCIlc1wiIHN0YXJ0IC1EIFwiJXNc IiAtcyAtbCBcIiVzXCIiLAorCQkJCQkJICBwZ19jdGxfcGF0aCwgZGF0YWRpciwgbG9nZmls ZSk7CisJcmMgPSBzeXN0ZW0ocGdfY3RsX2NtZCk7CisJcGdfY3RsX3N0YXR1cyhwZ19jdGxf Y21kLCByYywgMSk7Cit9CisKK3N0YXRpYyB2b2lkCitzdG9wX3N0YW5kYnlfc2VydmVyKGNv bnN0IGNoYXIgKnBnX2N0bF9wYXRoLCBjb25zdCBjaGFyICpkYXRhZGlyKQoreworCWNoYXIJ ICAgKnBnX2N0bF9jbWQ7CisJaW50CQkJcmM7CisKKwlwZ19jdGxfY21kID0gcHNwcmludGYo IlwiJXNcIiBzdG9wIC1EIFwiJXNcIiAtcyIsIHBnX2N0bF9wYXRoLAorCQkJCQkJICBkYXRh ZGlyKTsKKwlyYyA9IHN5c3RlbShwZ19jdGxfY21kKTsKKwlwZ19jdGxfc3RhdHVzKHBnX2N0 bF9jbWQsIHJjLCAwKTsKK30KKworLyoKKyAqIFJlcG9ydHMgYSBzdWl0YWJsZSBtZXNzYWdl IGlmIHBnX2N0bCBmYWlscy4KKyAqLworc3RhdGljIHZvaWQKK3BnX2N0bF9zdGF0dXMoY29u c3QgY2hhciAqcGdfY3RsX2NtZCwgaW50IHJjLCBpbnQgYWN0aW9uKQoreworCWlmIChyYyAh PSAwKQorCXsKKwkJaWYgKFdJRkVYSVRFRChyYykpCisJCXsKKwkJCXBnX2xvZ19lcnJvcigi cGdfY3RsIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAlZCIsIFdFWElUU1RBVFVTKHJjKSk7CisJ CX0KKwkJZWxzZSBpZiAoV0lGU0lHTkFMRUQocmMpKQorCQl7CisjaWYgZGVmaW5lZChXSU4z MikKKwkJCXBnX2xvZ19lcnJvcigicGdfY3RsIHdhcyB0ZXJtaW5hdGVkIGJ5IGV4Y2VwdGlv biAweCVYIiwKKwkJCQkJCSBXVEVSTVNJRyhyYykpOworCQkJcGdfbG9nX2Vycm9yX2RldGFp bCgiU2VlIEMgaW5jbHVkZSBmaWxlIFwibnRzdGF0dXMuaFwiIGZvciBhIGRlc2NyaXB0aW9u IG9mIHRoZSBoZXhhZGVjaW1hbCB2YWx1ZS4iKTsKKyNlbHNlCisJCQlwZ19sb2dfZXJyb3Io InBnX2N0bCB3YXMgdGVybWluYXRlZCBieSBzaWduYWwgJWQ6ICVzIiwKKwkJCQkJCSBXVEVS TVNJRyhyYyksIHBnX3N0cnNpZ25hbChXVEVSTVNJRyhyYykpKTsKKyNlbmRpZgorCQl9CisJ CWVsc2UKKwkJeworCQkJcGdfbG9nX2Vycm9yKCJwZ19jdGwgZXhpdGVkIHdpdGggdW5yZWNv Z25pemVkIHN0YXR1cyAlZCIsIHJjKTsKKwkJfQorCisJCXBnX2xvZ19lcnJvcl9kZXRhaWwo IlRoZSBmYWlsZWQgY29tbWFuZCB3YXM6ICVzIiwgcGdfY3RsX2NtZCk7CisJCWV4aXQoMSk7 CisJfQorCisJaWYgKGFjdGlvbikKKwkJcGdfbG9nX2luZm8oInBvc3RtYXN0ZXIgd2FzIHN0 YXJ0ZWQiKTsKKwllbHNlCisJCXBnX2xvZ19pbmZvKCJwb3N0bWFzdGVyIHdhcyBzdG9wcGVk Iik7Cit9CisKKy8qCisgKiBSZXR1cm5zIGFmdGVyIHRoZSBzZXJ2ZXIgZmluaXNoZXMgdGhl IHJlY292ZXJ5IHByb2Nlc3MuCisgKgorICogSWYgcmVjb3ZlcnlfdGltZW91dCBvcHRpb24g aXMgc2V0LCB0ZXJtaW5hdGUgYWJub3JtYWxseSB3aXRob3V0IGZpbmlzaGluZworICogdGhl IHJlY292ZXJ5IHByb2Nlc3MuIEJ5IGRlZmF1bHQsIGl0IHdhaXRzIGZvcmV2ZXIuCisgKi8K K3N0YXRpYyB2b2lkCit3YWl0X2Zvcl9lbmRfcmVjb3ZlcnkoY29uc3QgY2hhciAqY29ubmlu Zm8sIGNvbnN0IGNoYXIgKnBnX2N0bF9wYXRoLAorCQkJCQkgIENyZWF0ZVN1YnNjcmliZXJP cHRpb25zICpvcHQpCit7CisJUEdjb25uCSAgICpjb25uOworCWludAkJCXN0YXR1cyA9IFBP U1RNQVNURVJfU1RJTExfU1RBUlRJTkc7CisJaW50CQkJdGltZXIgPSAwOworCisJcGdfbG9n X2luZm8oIndhaXRpbmcgdGhlIHBvc3RtYXN0ZXIgdG8gcmVhY2ggdGhlIGNvbnNpc3RlbnQg c3RhdGUiKTsKKworCWNvbm4gPSBjb25uZWN0X2RhdGFiYXNlKGNvbm5pbmZvKTsKKwlpZiAo Y29ubiA9PSBOVUxMKQorCQlleGl0KDEpOworCisJZm9yICg7OykKKwl7CisJCWludAkJCWlu X3JlY292ZXJ5OworCisJCWluX3JlY292ZXJ5ID0gc2VydmVyX2lzX2luX3JlY292ZXJ5KGNv bm4pOworCisJCS8qCisJCSAqIERvZXMgdGhlIHJlY292ZXJ5IHByb2Nlc3MgZmluaXNoPyBJ biBkcnkgcnVuIG1vZGUsIHRoZXJlIGlzIG5vCisJCSAqIHJlY292ZXJ5IG1vZGUuIEJhaWwg b3V0IGFzIHRoZSByZWNvdmVyeSBwcm9jZXNzIGhhcyBlbmRlZC4KKwkJICovCisJCWlmIChp bl9yZWNvdmVyeSA9PSAwIHx8IGRyeV9ydW4pCisJCXsKKwkJCXN0YXR1cyA9IFBPU1RNQVNU RVJfUkVBRFk7CisJCQlyZWNvdmVyeV9lbmRlZCA9IHRydWU7CisJCQlicmVhazsKKwkJfQor CisJCS8qIEJhaWwgb3V0IGFmdGVyIHJlY292ZXJ5X3RpbWVvdXQgc2Vjb25kcyBpZiB0aGlz IG9wdGlvbiBpcyBzZXQgKi8KKwkJaWYgKG9wdC0+cmVjb3ZlcnlfdGltZW91dCA+IDAgJiYg dGltZXIgPj0gb3B0LT5yZWNvdmVyeV90aW1lb3V0KQorCQl7CisJCQlzdG9wX3N0YW5kYnlf c2VydmVyKHBnX2N0bF9wYXRoLCBvcHQtPnN1YnNjcmliZXJfZGlyKTsKKwkJCXBnX2ZhdGFs KCJyZWNvdmVyeSB0aW1lZCBvdXQiKTsKKwkJfQorCisJCS8qIEtlZXAgd2FpdGluZyAqLwor CQlwZ191c2xlZXAoV0FJVF9JTlRFUlZBTCAqIFVTRUNfUEVSX1NFQyk7CisKKwkJdGltZXIg Kz0gV0FJVF9JTlRFUlZBTDsKKwl9CisKKwlkaXNjb25uZWN0X2RhdGFiYXNlKGNvbm4pOwor CisJaWYgKHN0YXR1cyA9PSBQT1NUTUFTVEVSX1NUSUxMX1NUQVJUSU5HKQorCQlwZ19mYXRh bCgic2VydmVyIGRpZCBub3QgZW5kIHJlY292ZXJ5Iik7CisKKwlwZ19sb2dfaW5mbygicG9z dG1hc3RlciByZWFjaGVkIHRoZSBjb25zaXN0ZW50IHN0YXRlIik7Cit9CisKKy8qCisgKiBD cmVhdGUgYSBwdWJsaWNhdGlvbiB0aGF0IGluY2x1ZGVzIGFsbCB0YWJsZXMgaW4gdGhlIGRh dGFiYXNlLgorICovCitzdGF0aWMgdm9pZAorY3JlYXRlX3B1YmxpY2F0aW9uKFBHY29ubiAq Y29ubiwgTG9naWNhbFJlcEluZm8gKmRiaW5mbykKK3sKKwlQUUV4cEJ1ZmZlciBzdHIgPSBj cmVhdGVQUUV4cEJ1ZmZlcigpOworCVBHcmVzdWx0ICAgKnJlczsKKworCUFzc2VydChjb25u ICE9IE5VTEwpOworCisJLyogQ2hlY2sgaWYgdGhlIHB1YmxpY2F0aW9uIG5lZWRzIHRvIGJl IGNyZWF0ZWQgKi8KKwlhcHBlbmRQUUV4cEJ1ZmZlcihzdHIsCisJCQkJCSAgIlNFTEVDVCBw dWJhbGx0YWJsZXMgRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uICIKKwkJCQkJICAi V0hFUkUgcHVibmFtZSA9ICclcyciLAorCQkJCQkgIGRiaW5mby0+cHVibmFtZSk7CisJcmVz ID0gUFFleGVjKGNvbm4sIHN0ci0+ZGF0YSk7CisJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykg IT0gUEdSRVNfVFVQTEVTX09LKQorCXsKKwkJUFFjbGVhcihyZXMpOworCQlQUWZpbmlzaChj b25uKTsKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBvYnRhaW4gcHVibGljYXRpb24gaW5mb3Jt YXRpb246ICVzIiwKKwkJCQkgUFFyZXN1bHRFcnJvck1lc3NhZ2UocmVzKSk7CisJfQorCisJ aWYgKFBRbnR1cGxlcyhyZXMpID09IDEpCisJeworCQkvKgorCQkgKiBJZiBwdWJsaWNhdGlv biBuYW1lIGFscmVhZHkgZXhpc3RzIGFuZCBwdWJhbGx0YWJsZXMgaXMgdHJ1ZSwgbGV0J3MK KwkJICogdXNlIGl0LiBBIHByZXZpb3VzIHJ1biBvZiBwZ19jcmVhdGVzdWJzY3JpYmVyIG11 c3QgaGF2ZSBjcmVhdGVkCisJCSAqIHRoaXMgcHVibGljYXRpb24uIEJhaWwgb3V0LgorCQkg Ki8KKwkJaWYgKHN0cmNtcChQUWdldHZhbHVlKHJlcywgMCwgMCksICJ0IikgPT0gMCkKKwkJ eworCQkJcGdfbG9nX2luZm8oInB1YmxpY2F0aW9uIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIs IGRiaW5mby0+cHVibmFtZSk7CisJCQlyZXR1cm47CisJCX0KKwkJZWxzZQorCQl7CisJCQkv KgorCQkJICogVW5mb3J0dW5hdGVseSwgaWYgaXQgcmVhY2hlcyB0aGlzIGNvZGUgcGF0aCwg aXQgd2lsbCBhbHdheXMKKwkJCSAqIGZhaWwgKHVubGVzcyB5b3UgZGVjaWRlIHRvIGNoYW5n ZSB0aGUgZXhpc3RpbmcgcHVibGljYXRpb24KKwkJCSAqIG5hbWUpLiBUaGF0J3MgYmFkIGJ1 dCBpdCBpcyB2ZXJ5IHVubGlrZWx5IHRoYXQgdGhlIHVzZXIgd2lsbAorCQkJICogY2hvb3Nl IGEgbmFtZSB3aXRoIHBnX2NyZWF0ZXN1YnNjcmliZXJfIHByZWZpeCBmb2xsb3dlZCBieSB0 aGUKKwkJCSAqIGV4YWN0IGRhdGFiYXNlIG9pZCBpbiB3aGljaCBwdWJhbGx0YWJsZXMgaXMg ZmFsc2UuCisJCQkgKi8KKwkJCXBnX2xvZ19lcnJvcigicHVibGljYXRpb24gXCIlc1wiIGRv ZXMgbm90IHJlcGxpY2F0ZSBjaGFuZ2VzIGZvciBhbGwgdGFibGVzIiwKKwkJCQkJCSBkYmlu Zm8tPnB1Ym5hbWUpOworCQkJcGdfbG9nX2Vycm9yX2hpbnQoIkNvbnNpZGVyIHJlbmFtaW5n IHRoaXMgcHVibGljYXRpb24uIik7CisJCQlQUWNsZWFyKHJlcyk7CisJCQlQUWZpbmlzaChj b25uKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwlQUWNsZWFyKHJlcyk7CisJcmVzZXRQ UUV4cEJ1ZmZlcihzdHIpOworCisJcGdfbG9nX2luZm8oImNyZWF0aW5nIHB1YmxpY2F0aW9u IFwiJXNcIiBvbiBkYXRhYmFzZSBcIiVzXCIiLAorCQkJCWRiaW5mby0+cHVibmFtZSwgZGJp bmZvLT5kYm5hbWUpOworCisJYXBwZW5kUFFFeHBCdWZmZXIoc3RyLCAiQ1JFQVRFIFBVQkxJ Q0FUSU9OICVzIEZPUiBBTEwgVEFCTEVTIiwKKwkJCQkJICBkYmluZm8tPnB1Ym5hbWUpOwor CisJcGdfbG9nX2RlYnVnKCJjb21tYW5kIGlzOiAlcyIsIHN0ci0+ZGF0YSk7CisKKwlpZiAo IWRyeV9ydW4pCisJeworCQlyZXMgPSBQUWV4ZWMoY29ubiwgc3RyLT5kYXRhKTsKKwkJaWYg KFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJeworCQkJUFFm aW5pc2goY29ubik7CisJCQlwZ19mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBwdWJsaWNhdGlv biBcIiVzXCIgb24gZGF0YWJhc2UgXCIlc1wiOiAlcyIsCisJCQkJCSBkYmluZm8tPnB1Ym5h bWUsIGRiaW5mby0+ZGJuYW1lLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJCX0KKwl9CisK KwkvKiBmb3IgY2xlYW51cCBwdXJwb3NlcyAqLworCWRiaW5mby0+bWFkZV9wdWJsaWNhdGlv biA9IHRydWU7CisKKwlpZiAoIWRyeV9ydW4pCisJCVBRY2xlYXIocmVzKTsKKworCWRlc3Ry b3lQUUV4cEJ1ZmZlcihzdHIpOworfQorCisvKgorICogUmVtb3ZlIHB1YmxpY2F0aW9uIGlm IGl0IGNvdWxkbid0IGZpbmlzaCBhbGwgc3RlcHMuCisgKi8KK3N0YXRpYyB2b2lkCitkcm9w X3B1YmxpY2F0aW9uKFBHY29ubiAqY29ubiwgTG9naWNhbFJlcEluZm8gKmRiaW5mbykKK3sK KwlQUUV4cEJ1ZmZlciBzdHIgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCVBHcmVzdWx0ICAg KnJlczsKKworCUFzc2VydChjb25uICE9IE5VTEwpOworCisJcGdfbG9nX2luZm8oImRyb3Bw aW5nIHB1YmxpY2F0aW9uIFwiJXNcIiBvbiBkYXRhYmFzZSBcIiVzXCIiLAorCQkJCWRiaW5m by0+cHVibmFtZSwgZGJpbmZvLT5kYm5hbWUpOworCisJYXBwZW5kUFFFeHBCdWZmZXIoc3Ry LCAiRFJPUCBQVUJMSUNBVElPTiAlcyIsIGRiaW5mby0+cHVibmFtZSk7CisKKwlwZ19sb2df ZGVidWcoImNvbW1hbmQgaXM6ICVzIiwgc3RyLT5kYXRhKTsKKworCWlmICghZHJ5X3J1bikK Kwl7CisJCXJlcyA9IFBRZXhlYyhjb25uLCBzdHItPmRhdGEpOworCQlpZiAoUFFyZXN1bHRT dGF0dXMocmVzKSAhPSBQR1JFU19DT01NQU5EX09LKQorCQkJcGdfbG9nX2Vycm9yKCJjb3Vs ZCBub3QgZHJvcCBwdWJsaWNhdGlvbiBcIiVzXCIgb24gZGF0YWJhc2UgXCIlc1wiOiAlcyIs CisJCQkJCQkgZGJpbmZvLT5wdWJuYW1lLCBkYmluZm8tPmRibmFtZSwgUFFlcnJvck1lc3Nh Z2UoY29ubikpOworCisJCVBRY2xlYXIocmVzKTsKKwl9CisKKwlkZXN0cm95UFFFeHBCdWZm ZXIoc3RyKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIHN1YnNjcmlwdGlvbiB3aXRoIHNvbWUg cHJlZGVmaW5lZCBvcHRpb25zLgorICoKKyAqIEEgcmVwbGljYXRpb24gc2xvdCB3YXMgYWxy ZWFkeSBjcmVhdGVkIGluIGEgcHJldmlvdXMgc3RlcC4gTGV0J3MgdXNlIGl0LiBCeQorICog ZGVmYXVsdCwgdGhlIHN1YnNjcmlwdGlvbiBuYW1lIGlzIHVzZWQgYXMgcmVwbGljYXRpb24g c2xvdCBuYW1lLiBJdCBpcworICogbm90IHJlcXVpcmVkIHRvIGNvcHkgZGF0YS4gVGhlIHN1 YnNjcmlwdGlvbiB3aWxsIGJlIGNyZWF0ZWQgYnV0IGl0IHdpbGwgbm90CisgKiBiZSBlbmFi bGVkIG5vdy4gVGhhdCdzIGJlY2F1c2UgdGhlIHJlcGxpY2F0aW9uIHByb2dyZXNzIG11c3Qg YmUgc2V0IGFuZCB0aGUKKyAqIHJlcGxpY2F0aW9uIG9yaWdpbiBuYW1lIChvbmUgb2YgdGhl IGZ1bmN0aW9uIGFyZ3VtZW50cykgY29udGFpbnMgdGhlCisgKiBzdWJzY3JpcHRpb24gT0lE IGluIGl0cyBuYW1lLiBPbmNlIHRoZSBzdWJzY3JpcHRpb24gaXMgY3JlYXRlZCwKKyAqIHNl dF9yZXBsaWNhdGlvbl9wcm9ncmVzcygpIGNhbiBvYnRhaW4gdGhlIGNob3NlbiBvcmlnaW4g bmFtZSBhbmQgc2V0IHVwIGl0cworICogaW5pdGlhbCBsb2NhdGlvbi4KKyAqLworc3RhdGlj IHZvaWQKK2NyZWF0ZV9zdWJzY3JpcHRpb24oUEdjb25uICpjb25uLCBMb2dpY2FsUmVwSW5m byAqZGJpbmZvKQoreworCVBRRXhwQnVmZmVyIHN0ciA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7 CisJUEdyZXN1bHQgICAqcmVzOworCisJQXNzZXJ0KGNvbm4gIT0gTlVMTCk7CisKKwlwZ19s b2dfaW5mbygiY3JlYXRpbmcgc3Vic2NyaXB0aW9uIFwiJXNcIiBvbiBkYXRhYmFzZSBcIiVz XCIiLAorCQkJCWRiaW5mby0+c3VibmFtZSwgZGJpbmZvLT5kYm5hbWUpOworCisJYXBwZW5k UFFFeHBCdWZmZXIoc3RyLAorCQkJCQkgICJDUkVBVEUgU1VCU0NSSVBUSU9OICVzIENPTk5F Q1RJT04gJyVzJyBQVUJMSUNBVElPTiAlcyAiCisJCQkJCSAgIldJVEggKGNyZWF0ZV9zbG90 ID0gZmFsc2UsIGNvcHlfZGF0YSA9IGZhbHNlLCBlbmFibGVkID0gZmFsc2UpIiwKKwkJCQkJ ICBkYmluZm8tPnN1Ym5hbWUsIGRiaW5mby0+cHViY29ubmluZm8sIGRiaW5mby0+cHVibmFt ZSk7CisKKwlwZ19sb2dfZGVidWcoImNvbW1hbmQgaXM6ICVzIiwgc3RyLT5kYXRhKTsKKwor CWlmICghZHJ5X3J1bikKKwl7CisJCXJlcyA9IFBRZXhlYyhjb25uLCBzdHItPmRhdGEpOwor CQlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19DT01NQU5EX09LKQorCQl7CisJ CQlQUWZpbmlzaChjb25uKTsKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRlIHN1YnNj cmlwdGlvbiBcIiVzXCIgb24gZGF0YWJhc2UgXCIlc1wiOiAlcyIsCisJCQkJCSBkYmluZm8t PnN1Ym5hbWUsIGRiaW5mby0+ZGJuYW1lLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJCX0K Kwl9CisKKwkvKiBmb3IgY2xlYW51cCBwdXJwb3NlcyAqLworCWRiaW5mby0+bWFkZV9zdWJz Y3JpcHRpb24gPSB0cnVlOworCisJaWYgKCFkcnlfcnVuKQorCQlQUWNsZWFyKHJlcyk7CisK KwlkZXN0cm95UFFFeHBCdWZmZXIoc3RyKTsKK30KKworLyoKKyAqIFJlbW92ZSBzdWJzY3Jp cHRpb24gaWYgaXQgY291bGRuJ3QgZmluaXNoIGFsbCBzdGVwcy4KKyAqLworc3RhdGljIHZv aWQKK2Ryb3Bfc3Vic2NyaXB0aW9uKFBHY29ubiAqY29ubiwgTG9naWNhbFJlcEluZm8gKmRi aW5mbykKK3sKKwlQUUV4cEJ1ZmZlciBzdHIgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCVBH cmVzdWx0ICAgKnJlczsKKworCUFzc2VydChjb25uICE9IE5VTEwpOworCisJcGdfbG9nX2lu Zm8oImRyb3BwaW5nIHN1YnNjcmlwdGlvbiBcIiVzXCIgb24gZGF0YWJhc2UgXCIlc1wiIiwK KwkJCQlkYmluZm8tPnN1Ym5hbWUsIGRiaW5mby0+ZGJuYW1lKTsKKworCWFwcGVuZFBRRXhw QnVmZmVyKHN0ciwgIkRST1AgU1VCU0NSSVBUSU9OICVzIiwgZGJpbmZvLT5zdWJuYW1lKTsK KworCXBnX2xvZ19kZWJ1ZygiY29tbWFuZCBpczogJXMiLCBzdHItPmRhdGEpOworCisJaWYg KCFkcnlfcnVuKQorCXsKKwkJcmVzID0gUFFleGVjKGNvbm4sIHN0ci0+ZGF0YSk7CisJCWlm IChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1BTkRfT0spCisJCQlwZ19sb2df ZXJyb3IoImNvdWxkIG5vdCBkcm9wIHN1YnNjcmlwdGlvbiBcIiVzXCIgb24gZGF0YWJhc2Ug XCIlc1wiOiAlcyIsCisJCQkJCQkgZGJpbmZvLT5zdWJuYW1lLCBkYmluZm8tPmRibmFtZSwg UFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJCVBRY2xlYXIocmVzKTsKKwl9CisKKwlkZXN0 cm95UFFFeHBCdWZmZXIoc3RyKTsKK30KKworLyoKKyAqIFNldHMgdGhlIHJlcGxpY2F0aW9u IHByb2dyZXNzIHRvIHRoZSBjb25zaXN0ZW50IExTTi4KKyAqCisgKiBUaGUgc3Vic2NyaWJl ciBjYXVnaHQgdXAgdG8gdGhlIGNvbnNpc3RlbnQgTFNOIHByb3ZpZGVkIGJ5IHRoZSB0ZW1w b3JhcnkKKyAqIHJlcGxpY2F0aW9uIHNsb3QuIFRoZSBnb2FsIGlzIHRvIHNldCB1cCB0aGUg aW5pdGlhbCBsb2NhdGlvbiBmb3IgdGhlIGxvZ2ljYWwKKyAqIHJlcGxpY2F0aW9uIHRoYXQg aXMgdGhlIGV4YWN0IExTTiB0aGF0IHRoZSBzdWJzY3JpYmVyIHdhcyBwcm9tb3RlZC4gT25j ZSB0aGUKKyAqIHN1YnNjcmlwdGlvbiBpcyBlbmFibGVkIGl0IHdpbGwgc3RhcnQgc3RyZWFt aW5nIGZyb20gdGhhdCBsb2NhdGlvbiBvbndhcmRzLgorICogSW4gZHJ5IHJ1biBtb2RlLCB0 aGUgc3Vic2NyaXB0aW9uIE9JRCBhbmQgTFNOIGFyZSBzZXQgdG8gaW52YWxpZCB2YWx1ZXMg Zm9yCisgKiBwcmludGluZyBwdXJwb3Nlcy4KKyAqLworc3RhdGljIHZvaWQKK3NldF9yZXBs aWNhdGlvbl9wcm9ncmVzcyhQR2Nvbm4gKmNvbm4sIExvZ2ljYWxSZXBJbmZvICpkYmluZm8s IGNvbnN0IGNoYXIgKmxzbikKK3sKKwlQUUV4cEJ1ZmZlciBzdHIgPSBjcmVhdGVQUUV4cEJ1 ZmZlcigpOworCVBHcmVzdWx0ICAgKnJlczsKKwlPaWQJCQlzdWJvaWQ7CisJY2hhcgkJb3Jp Z2lubmFtZVtOQU1FREFUQUxFTl07CisJY2hhcgkJbHNuc3RyWzE3ICsgMV07IC8qIE1BWFBH X0xTTkxFTiA9IDE3ICovCisKKwlBc3NlcnQoY29ubiAhPSBOVUxMKTsKKworCWFwcGVuZFBR RXhwQnVmZmVyKHN0ciwKKwkJCQkJICAiU0VMRUNUIG9pZCBGUk9NIHBnX2NhdGFsb2cucGdf c3Vic2NyaXB0aW9uICIKKwkJCQkJICAiV0hFUkUgc3VibmFtZSA9ICclcyciLAorCQkJCQkg IGRiaW5mby0+c3VibmFtZSk7CisKKwlyZXMgPSBQUWV4ZWMoY29ubiwgc3RyLT5kYXRhKTsK KwlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19UVVBMRVNfT0spCisJeworCQlQ UWNsZWFyKHJlcyk7CisJCVBRZmluaXNoKGNvbm4pOworCQlwZ19mYXRhbCgiY291bGQgbm90 IG9idGFpbiBzdWJzY3JpcHRpb24gT0lEOiAlcyIsCisJCQkJIFBRcmVzdWx0RXJyb3JNZXNz YWdlKHJlcykpOworCX0KKworCWlmIChQUW50dXBsZXMocmVzKSAhPSAxICYmICFkcnlfcnVu KQorCXsKKwkJUFFjbGVhcihyZXMpOworCQlQUWZpbmlzaChjb25uKTsKKwkJcGdfZmF0YWwo ImNvdWxkIG5vdCBvYnRhaW4gc3Vic2NyaXB0aW9uIE9JRDogZ290ICVkIHJvd3MsIGV4cGVj dGVkICVkIHJvd3MiLAorCQkJCSBQUW50dXBsZXMocmVzKSwgMSk7CisJfQorCisJaWYgKGRy eV9ydW4pCisJeworCQlzdWJvaWQgPSBJbnZhbGlkT2lkOworCQlzbnByaW50Zihsc25zdHIs IHNpemVvZihsc25zdHIpLCAiJVgvJVgiLAorCQkJCSBMU05fRk9STUFUX0FSR1MoKFhMb2dS ZWNQdHIpIEludmFsaWRYTG9nUmVjUHRyKSk7CisJfQorCWVsc2UKKwl7CisJCXN1Ym9pZCA9 IHN0cnRvdWwoUFFnZXR2YWx1ZShyZXMsIDAsIDApLCBOVUxMLCAxMCk7CisJCXNucHJpbnRm KGxzbnN0ciwgc2l6ZW9mKGxzbnN0ciksICIlcyIsIGxzbik7CisJfQorCisJLyoKKwkgKiBU aGUgb3JpZ2luIG5hbWUgaXMgZGVmaW5lZCBhcyBwZ18ldS4gJXUgaXMgdGhlIHN1YnNjcmlw dGlvbiBPSUQuIFNlZQorCSAqIEFwcGx5V29ya2VyTWFpbigpLgorCSAqLworCXNucHJpbnRm KG9yaWdpbm5hbWUsIHNpemVvZihvcmlnaW5uYW1lKSwgInBnXyV1Iiwgc3Vib2lkKTsKKwor CVBRY2xlYXIocmVzKTsKKworCXBnX2xvZ19pbmZvKCJzZXR0aW5nIHRoZSByZXBsaWNhdGlv biBwcm9ncmVzcyAobm9kZSBuYW1lIFwiJXNcIiA7IExTTiAlcykgb24gZGF0YWJhc2UgXCIl c1wiIiwKKwkJCQlvcmlnaW5uYW1lLCBsc25zdHIsIGRiaW5mby0+ZGJuYW1lKTsKKworCXJl c2V0UFFFeHBCdWZmZXIoc3RyKTsKKwlhcHBlbmRQUUV4cEJ1ZmZlcihzdHIsCisJCQkJCSAg IlNFTEVDVCBwZ19jYXRhbG9nLnBnX3JlcGxpY2F0aW9uX29yaWdpbl9hZHZhbmNlKCclcycs ICclcycpIiwKKwkJCQkJICBvcmlnaW5uYW1lLCBsc25zdHIpOworCisJcGdfbG9nX2RlYnVn KCJjb21tYW5kIGlzOiAlcyIsIHN0ci0+ZGF0YSk7CisKKwlpZiAoIWRyeV9ydW4pCisJewor CQlyZXMgPSBQUWV4ZWMoY29ubiwgc3RyLT5kYXRhKTsKKwkJaWYgKFBRcmVzdWx0U3RhdHVz KHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQorCQl7CisJCQlQUWZpbmlzaChjb25uKTsKKwkJ CXBnX2ZhdGFsKCJjb3VsZCBub3Qgc2V0IHJlcGxpY2F0aW9uIHByb2dyZXNzIGZvciB0aGUg c3Vic2NyaXB0aW9uIFwiJXNcIjogJXMiLAorCQkJCQkgZGJpbmZvLT5zdWJuYW1lLCBQUXJl c3VsdEVycm9yTWVzc2FnZShyZXMpKTsKKwkJfQorCisJCVBRY2xlYXIocmVzKTsKKwl9CisK KwlkZXN0cm95UFFFeHBCdWZmZXIoc3RyKTsKK30KKworLyoKKyAqIEVuYWJsZXMgdGhlIHN1 YnNjcmlwdGlvbi4KKyAqCisgKiBUaGUgc3Vic2NyaXB0aW9uIHdhcyBjcmVhdGVkIGluIGEg cHJldmlvdXMgc3RlcCBidXQgaXQgd2FzIGRpc2FibGVkLiBBZnRlcgorICogYWRqdXN0aW5n IHRoZSBpbml0aWFsIGxvY2F0aW9uLCBlbmFibGluZyB0aGUgc3Vic2NyaXB0aW9uIGlzIHRo ZSBsYXN0IHN0ZXAKKyAqIG9mIHRoaXMgc2V0dXAuCisgKi8KK3N0YXRpYyB2b2lkCitlbmFi bGVfc3Vic2NyaXB0aW9uKFBHY29ubiAqY29ubiwgTG9naWNhbFJlcEluZm8gKmRiaW5mbykK K3sKKwlQUUV4cEJ1ZmZlciBzdHIgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCVBHcmVzdWx0 ICAgKnJlczsKKworCUFzc2VydChjb25uICE9IE5VTEwpOworCisJcGdfbG9nX2luZm8oImVu YWJsaW5nIHN1YnNjcmlwdGlvbiBcIiVzXCIgb24gZGF0YWJhc2UgXCIlc1wiIiwKKwkJCQlk YmluZm8tPnN1Ym5hbWUsIGRiaW5mby0+ZGJuYW1lKTsKKworCWFwcGVuZFBRRXhwQnVmZmVy KHN0ciwgIkFMVEVSIFNVQlNDUklQVElPTiAlcyBFTkFCTEUiLCBkYmluZm8tPnN1Ym5hbWUp OworCisJcGdfbG9nX2RlYnVnKCJjb21tYW5kIGlzOiAlcyIsIHN0ci0+ZGF0YSk7CisKKwlp ZiAoIWRyeV9ydW4pCisJeworCQlyZXMgPSBQUWV4ZWMoY29ubiwgc3RyLT5kYXRhKTsKKwkJ aWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJeworCQkJ UFFmaW5pc2goY29ubik7CisJCQlwZ19mYXRhbCgiY291bGQgbm90IGVuYWJsZSBzdWJzY3Jp cHRpb24gXCIlc1wiOiAlcyIsCisJCQkJCSBkYmluZm8tPnN1Ym5hbWUsIFBRZXJyb3JNZXNz YWdlKGNvbm4pKTsKKwkJfQorCisJCVBRY2xlYXIocmVzKTsKKwl9CisKKwlkZXN0cm95UFFF eHBCdWZmZXIoc3RyKTsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK K3sKKwlzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9CisJeworCQl7Imhl bHAiLCBub19hcmd1bWVudCwgTlVMTCwgJz8nfSwKKwkJeyJ2ZXJzaW9uIiwgbm9fYXJndW1l bnQsIE5VTEwsICdWJ30sCisJCXsicGdkYXRhIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEws ICdEJ30sCisJCXsicHVibGlzaGVyLXNlcnZlciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxM LCAnUCd9LAorCQl7InN1YnNjcmliZXItc2VydmVyIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5V TEwsICdTJ30sCisJCXsiZGF0YWJhc2UiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ2Qn fSwKKwkJeyJkcnktcnVuIiwgbm9fYXJndW1lbnQsIE5VTEwsICduJ30sCisJCXsicmVjb3Zl cnktdGltZW91dCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAndCd9LAorCQl7InJldGFp biIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncid9LAorCQl7InZlcmJvc2UiLCBub19hcmd1bWVu dCwgTlVMTCwgJ3YnfSwKKwkJe05VTEwsIDAsIE5VTEwsIDB9CisJfTsKKworCUNyZWF0ZVN1 YnNjcmliZXJPcHRpb25zIG9wdCA9IHswfTsKKworCWludAkJCWM7CisJaW50CQkJb3B0aW9u X2luZGV4OworCisJY2hhcgkgICAqcGdfY3RsX3BhdGggPSBOVUxMOworCWNoYXIJICAgKnBn X3Jlc2V0d2FsX3BhdGggPSBOVUxMOworCisJY2hhcgkgICAqc2VydmVyX3N0YXJ0X2xvZzsK KworCWNoYXIJICAgKnB1Yl9iYXNlX2Nvbm5pbmZvID0gTlVMTDsKKwljaGFyCSAgICpzdWJf YmFzZV9jb25uaW5mbyA9IE5VTEw7CisJY2hhcgkgICAqZGJuYW1lX2Nvbm5pbmZvID0gTlVM TDsKKworCXVpbnQ2NAkJcHViX3N5c2lkOworCXVpbnQ2NAkJc3ViX3N5c2lkOworCXN0cnVj dCBzdGF0IHN0YXRidWY7CisKKwlQR2Nvbm4JICAgKmNvbm47CisJY2hhcgkgICAqY29uc2lz dGVudF9sc247CisKKwlQUUV4cEJ1ZmZlciByZWNvdmVyeWNvbmZjb250ZW50cyA9IE5VTEw7 CisKKwljaGFyCQlwaWRmaWxlW01BWFBHUEFUSF07CisKKwlwZ19sb2dnaW5nX2luaXQoYXJn dlswXSk7CisJcGdfbG9nZ2luZ19zZXRfbGV2ZWwoUEdfTE9HX1dBUk5JTkcpOworCXByb2du YW1lID0gZ2V0X3Byb2duYW1lKGFyZ3ZbMF0pOworCXNldF9wZ2xvY2FsZV9wZ3NlcnZpY2Uo YXJndlswXSwgUEdfVEVYVERPTUFJTigicGdfY3JlYXRlc3Vic2NyaWJlciIpKTsKKworCWlm IChhcmdjID4gMSkKKwl7CisJCWlmIChzdHJjbXAoYXJndlsxXSwgIi0taGVscCIpID09IDAg fHwgc3RyY21wKGFyZ3ZbMV0sICItPyIpID09IDApCisJCXsKKwkJCXVzYWdlKCk7CisJCQll eGl0KDApOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChhcmd2WzFdLCAiLVYiKSA9PSAwCisJ CQkJIHx8IHN0cmNtcChhcmd2WzFdLCAiLS12ZXJzaW9uIikgPT0gMCkKKwkJeworCQkJcHV0 cygicGdfY3JlYXRlc3Vic2NyaWJlciAoUG9zdGdyZVNRTCkgIiBQR19WRVJTSU9OKTsKKwkJ CWV4aXQoMCk7CisJCX0KKwl9CisKKwkvKiBEZWZhdWx0IHNldHRpbmdzICovCisJb3B0LnN1 YnNjcmliZXJfZGlyID0gTlVMTDsKKwlvcHQucHViX2Nvbm5pbmZvX3N0ciA9IE5VTEw7CisJ b3B0LnN1Yl9jb25uaW5mb19zdHIgPSBOVUxMOworCW9wdC5kYXRhYmFzZV9uYW1lcyA9IChT aW1wbGVTdHJpbmdMaXN0KQorCXsKKwkJTlVMTCwgTlVMTAorCX07CisJb3B0LnJldGFpbiA9 IGZhbHNlOworCW9wdC5yZWNvdmVyeV90aW1lb3V0ID0gMDsKKworCS8qCisJICogRG9uJ3Qg YWxsb3cgaXQgdG8gYmUgcnVuIGFzIHJvb3QuIEl0IHVzZXMgcGdfY3RsIHdoaWNoIGRvZXMg bm90IGFsbG93CisJICogaXQgZWl0aGVyLgorCSAqLworI2lmbmRlZiBXSU4zMgorCWlmIChn ZXRldWlkKCkgPT0gMCkKKwl7CisJCXBnX2xvZ19lcnJvcigiY2Fubm90IGJlIGV4ZWN1dGVk IGJ5IFwicm9vdFwiIik7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJZb3UgbXVzdCBydW4gJXMg YXMgdGhlIFBvc3RncmVTUUwgc3VwZXJ1c2VyLiIsCisJCQkJCQkgIHByb2duYW1lKTsKKwkJ ZXhpdCgxKTsKKwl9CisjZW5kaWYKKworCWdldF9yZXN0cmljdGVkX3Rva2VuKCk7CisKKwl3 aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiRDpQOlM6ZDpucnQ6diIsCisJ CQkJCQkJbG9uZ19vcHRpb25zLCAmb3B0aW9uX2luZGV4KSkgIT0gLTEpCisJeworCQlzd2l0 Y2ggKGMpCisJCXsKKwkJCWNhc2UgJ0QnOgorCQkJCW9wdC5zdWJzY3JpYmVyX2RpciA9IHBn X3N0cmR1cChvcHRhcmcpOworCQkJCWNhbm9uaWNhbGl6ZV9wYXRoKG9wdC5zdWJzY3JpYmVy X2Rpcik7CisJCQkJYnJlYWs7CisJCQljYXNlICdQJzoKKwkJCQlvcHQucHViX2Nvbm5pbmZv X3N0ciA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCWJyZWFrOworCQkJY2FzZSAnUyc6CisJ CQkJb3B0LnN1Yl9jb25uaW5mb19zdHIgPSBwZ19zdHJkdXAob3B0YXJnKTsKKwkJCQlicmVh azsKKwkJCWNhc2UgJ2QnOgorCQkJCS8qIElnbm9yZSBkdXBsaWNhdGVkIGRhdGFiYXNlIG5h bWVzICovCisJCQkJaWYgKCFzaW1wbGVfc3RyaW5nX2xpc3RfbWVtYmVyKCZvcHQuZGF0YWJh c2VfbmFtZXMsIG9wdGFyZykpCisJCQkJeworCQkJCQlzaW1wbGVfc3RyaW5nX2xpc3RfYXBw ZW5kKCZvcHQuZGF0YWJhc2VfbmFtZXMsIG9wdGFyZyk7CisJCQkJCW51bV9kYnMrKzsKKwkJ CQl9CisJCQkJYnJlYWs7CisJCQljYXNlICduJzoKKwkJCQlkcnlfcnVuID0gdHJ1ZTsKKwkJ CQlicmVhazsKKwkJCWNhc2UgJ3InOgorCQkJCW9wdC5yZXRhaW4gPSB0cnVlOworCQkJCWJy ZWFrOworCQkJY2FzZSAndCc6CisJCQkJb3B0LnJlY292ZXJ5X3RpbWVvdXQgPSBhdG9pKG9w dGFyZyk7CisJCQkJYnJlYWs7CisJCQljYXNlICd2JzoKKwkJCQlwZ19sb2dnaW5nX2luY3Jl YXNlX3ZlcmJvc2l0eSgpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBnZXRv cHRfbG9uZyBhbHJlYWR5IGVtaXR0ZWQgYSBjb21wbGFpbnQgKi8KKwkJCQlwZ19sb2dfZXJy b3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJv Z25hbWUpOworCQkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwkvKgorCSAqIEFueSBub24tb3B0 aW9uIGFyZ3VtZW50cz8KKwkgKi8KKwlpZiAob3B0aW5kIDwgYXJnYykKKwl7CisJCXBnX2xv Z19lcnJvcigidG9vIG1hbnkgY29tbWFuZC1saW5lIGFyZ3VtZW50cyAoZmlyc3QgaXMgXCIl c1wiKSIsCisJCQkJCSBhcmd2W29wdGluZF0pOworCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5 IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQll eGl0KDEpOworCX0KKworCS8qCisJICogUmVxdWlyZWQgYXJndW1lbnRzCisJICovCisJaWYg KG9wdC5zdWJzY3JpYmVyX2RpciA9PSBOVUxMKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJubyBz dWJzY3JpYmVyIGRhdGEgZGlyZWN0b3J5IHNwZWNpZmllZCIpOworCQlwZ19sb2dfZXJyb3Jf aGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25h bWUpOworCQlleGl0KDEpOworCX0KKworCS8qCisJICogUGFyc2UgY29ubmVjdGlvbiBzdHJp bmcuIEJ1aWxkIGEgYmFzZSBjb25uZWN0aW9uIHN0cmluZyB0aGF0IG1pZ2h0IGJlCisJICog cmV1c2VkIGJ5IG11bHRpcGxlIGRhdGFiYXNlcy4KKwkgKi8KKwlpZiAob3B0LnB1Yl9jb25u aW5mb19zdHIgPT0gTlVMTCkKKwl7CisJCS8qCisJCSAqIFRPRE8gdXNlIHByaW1hcnlfY29u bmluZm8gKGlmIGF2YWlsYWJsZSkgZnJvbSBzdWJzY3JpYmVyIGFuZAorCQkgKiBleHRyYWN0 IHB1Ymxpc2hlciBjb25uZWN0aW9uIHN0cmluZy4gQXNzdW1lIHRoYXQgdGhlcmUgYXJlCisJ CSAqIGlkZW50aWNhbCBlbnRyaWVzIGZvciBwaHlzaWNhbCBhbmQgbG9naWNhbCByZXBsaWNh dGlvbi4gSWYgdGhlcmUgaXMKKwkJICogbm90LCB3ZSB3b3VsZCBmYWlsIGFueXdheS4KKwkJ ICovCisJCXBnX2xvZ19lcnJvcigibm8gcHVibGlzaGVyIGNvbm5lY3Rpb24gc3RyaW5nIHNw ZWNpZmllZCIpOworCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9y IG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQlleGl0KDEpOworCX0KKwlwZ19s b2dfaW5mbygidmFsaWRhdGluZyBjb25uZWN0aW9uIHN0cmluZyBvbiBwdWJsaXNoZXIiKTsK KwlwdWJfYmFzZV9jb25uaW5mbyA9IGdldF9iYXNlX2Nvbm5pbmZvKG9wdC5wdWJfY29ubmlu Zm9fc3RyLAorCQkJCQkJCQkJCSAgJmRibmFtZV9jb25uaW5mbyk7CisJaWYgKHB1Yl9iYXNl X2Nvbm5pbmZvID09IE5VTEwpCisJCWV4aXQoMSk7CisKKwlpZiAob3B0LnN1Yl9jb25uaW5m b19zdHIgPT0gTlVMTCkKKwl7CisJCXBnX2xvZ19lcnJvcigibm8gc3Vic2NyaWJlciBjb25u ZWN0aW9uIHN0cmluZyBzcGVjaWZpZWQiKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBc IiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJZXhp dCgxKTsKKwl9CisJcGdfbG9nX2luZm8oInZhbGlkYXRpbmcgY29ubmVjdGlvbiBzdHJpbmcg b24gc3Vic2NyaWJlciIpOworCXN1Yl9iYXNlX2Nvbm5pbmZvID0gZ2V0X2Jhc2VfY29ubmlu Zm8ob3B0LnN1Yl9jb25uaW5mb19zdHIsIE5VTEwpOworCWlmIChzdWJfYmFzZV9jb25uaW5m byA9PSBOVUxMKQorCQlleGl0KDEpOworCisJaWYgKG9wdC5kYXRhYmFzZV9uYW1lcy5oZWFk ID09IE5VTEwpCisJeworCQlwZ19sb2dfaW5mbygibm8gZGF0YWJhc2Ugd2FzIHNwZWNpZmll ZCIpOworCisJCS8qCisJCSAqIElmIC0tZGF0YWJhc2Ugb3B0aW9uIGlzIG5vdCBwcm92aWRl ZCwgdHJ5IHRvIG9idGFpbiB0aGUgZGJuYW1lIGZyb20KKwkJICogdGhlIHB1Ymxpc2hlciBj b25uaW5mby4gSWYgZGJuYW1lIHBhcmFtZXRlciBpcyBub3QgYXZhaWxhYmxlLCBlcnJvcgor CQkgKiBvdXQuCisJCSAqLworCQlpZiAoZGJuYW1lX2Nvbm5pbmZvKQorCQl7CisJCQlzaW1w bGVfc3RyaW5nX2xpc3RfYXBwZW5kKCZvcHQuZGF0YWJhc2VfbmFtZXMsIGRibmFtZV9jb25u aW5mbyk7CisJCQludW1fZGJzKys7CisKKwkJCXBnX2xvZ19pbmZvKCJkYXRhYmFzZSBcIiVz XCIgd2FzIGV4dHJhY3RlZCBmcm9tIHRoZSBwdWJsaXNoZXIgY29ubmVjdGlvbiBzdHJpbmci LAorCQkJCQkJZGJuYW1lX2Nvbm5pbmZvKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBnX2xv Z19lcnJvcigibm8gZGF0YWJhc2UgbmFtZSBzcGVjaWZpZWQiKTsKKwkJCXBnX2xvZ19lcnJv cl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLAorCQkJ CQkJCSAgcHJvZ25hbWUpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKworCS8qIEdldCB0aGUg YWJzb2x1dGUgcGF0aCBvZiBwZ19jdGwgYW5kIHBnX3Jlc2V0d2FsIG9uIHRoZSBzdWJzY3Jp YmVyICovCisJcGdfY3RsX3BhdGggPSBnZXRfZXhlY19wYXRoKGFyZ3ZbMF0sICJwZ19jdGwi KTsKKwlwZ19yZXNldHdhbF9wYXRoID0gZ2V0X2V4ZWNfcGF0aChhcmd2WzBdLCAicGdfcmVz ZXR3YWwiKTsKKworCS8qIHJ1ZGltZW50YXJ5IGNoZWNrIGZvciBhIGRhdGEgZGlyZWN0b3J5 LiAqLworCWlmICghY2hlY2tfZGF0YV9kaXJlY3Rvcnkob3B0LnN1YnNjcmliZXJfZGlyKSkK KwkJZXhpdCgxKTsKKworCS8qIFN0b3JlIGRhdGFiYXNlIGluZm9ybWF0aW9uIGZvciBwdWJs aXNoZXIgYW5kIHN1YnNjcmliZXIgKi8KKwlkYmluZm8gPSBzdG9yZV9wdWJfc3ViX2luZm8o b3B0LmRhdGFiYXNlX25hbWVzLCBwdWJfYmFzZV9jb25uaW5mbywKKwkJCQkJCQkJc3ViX2Jh c2VfY29ubmluZm8pOworCisJLyogUmVnaXN0ZXIgYSBmdW5jdGlvbiB0byBjbGVhbiB1cCBv YmplY3RzIGluIGNhc2Ugb2YgZmFpbHVyZSAqLworCWF0ZXhpdChjbGVhbnVwX29iamVjdHNf YXRleGl0KTsKKworCS8qCisJICogQ2hlY2sgaWYgdGhlIHN1YnNjcmliZXIgZGF0YSBkaXJl Y3RvcnkgaGFzIHRoZSBzYW1lIHN5c3RlbSBpZGVudGlmaWVyCisJICogdGhhbiB0aGUgcHVi bGlzaGVyIGRhdGEgZGlyZWN0b3J5LgorCSAqLworCXB1Yl9zeXNpZCA9IGdldF9wcmltYXJ5 X3N5c2lkKGRiaW5mb1swXS5wdWJjb25uaW5mbyk7CisJc3ViX3N5c2lkID0gZ2V0X3N0YW5k Ynlfc3lzaWQob3B0LnN1YnNjcmliZXJfZGlyKTsKKwlpZiAocHViX3N5c2lkICE9IHN1Yl9z eXNpZCkKKwkJcGdfZmF0YWwoInN1YnNjcmliZXIgZGF0YSBkaXJlY3RvcnkgaXMgbm90IGEg Y29weSBvZiB0aGUgc291cmNlIGRhdGFiYXNlIGNsdXN0ZXIiKTsKKworCS8qIENyZWF0ZSB0 aGUgb3V0cHV0IGRpcmVjdG9yeSB0byBzdG9yZSBhbnkgZGF0YSBnZW5lcmF0ZWQgYnkgdGhp cyB0b29sICovCisJc2VydmVyX3N0YXJ0X2xvZyA9IHNldHVwX3NlcnZlcl9sb2dmaWxlKG9w dC5zdWJzY3JpYmVyX2Rpcik7CisKKwkvKiBzdWJzY3JpYmVyIFBJRCBmaWxlLiAqLworCXNu cHJpbnRmKHBpZGZpbGUsIE1BWFBHUEFUSCwgIiVzL3Bvc3RtYXN0ZXIucGlkIiwgb3B0LnN1 YnNjcmliZXJfZGlyKTsKKworCS8qCisJICogVGhlIHN0YW5kYnkgc2VydmVyIG11c3QgYmUg cnVubmluZy4gVGhhdCdzIGJlY2F1c2Ugc29tZSBjaGVja3Mgd2lsbCBiZQorCSAqIGRvbmUg KGlzIGl0IHJlYWR5IGZvciBhIGxvZ2ljYWwgcmVwbGljYXRpb24gc2V0dXA/KS4gQWZ0ZXIg dGhhdCwgc3RvcAorCSAqIHRoZSBzdWJzY3JpYmVyIGluIHByZXBhcmF0aW9uIHRvIG1vZGlm eSBzb21lIHJlY292ZXJ5IHBhcmFtZXRlcnMgdGhhdAorCSAqIHJlcXVpcmUgYSByZXN0YXJ0 LgorCSAqLworCWlmIChzdGF0KHBpZGZpbGUsICZzdGF0YnVmKSA9PSAwKQorCXsKKwkJLyog Q2hlY2sgaWYgdGhlIHN0YW5kYnkgc2VydmVyIGlzIHJlYWR5IGZvciBsb2dpY2FsIHJlcGxp Y2F0aW9uICovCisJCWlmICghY2hlY2tfc3Vic2NyaWJlcihkYmluZm8pKQorCQkJZXhpdCgx KTsKKworCQkvKgorCQkgKiBDaGVjayBpZiB0aGUgcHJpbWFyeSBzZXJ2ZXIgaXMgcmVhZHkg Zm9yIGxvZ2ljYWwgcmVwbGljYXRpb24uIFRoaXMKKwkJICogcm91dGluZSBjaGVja3MgaWYg YSByZXBsaWNhdGlvbiBzbG90IGlzIGluIHVzZSBvbiBwcmltYXJ5IHNvIGl0CisJCSAqIHJl bGllcyBvbiBjaGVja19zdWJzY3JpYmVyKCkgdG8gb2J0YWluIHRoZSBwcmltYXJ5X3Nsb3Rf bmFtZS4KKwkJICogVGhhdCdzIHdoeSBpdCBpcyBjYWxsZWQgYWZ0ZXIgaXQuCisJCSAqLwor CQlpZiAoIWNoZWNrX3B1Ymxpc2hlcihkYmluZm8pKQorCQkJZXhpdCgxKTsKKworCQkvKgor CQkgKiBDcmVhdGUgdGhlIHJlcXVpcmVkIG9iamVjdHMgZm9yIGVhY2ggZGF0YWJhc2Ugb24g cHVibGlzaGVyLiBUaGlzCisJCSAqIHN0ZXAgaXMgaGVyZSBtYWlubHkgYmVjYXVzZSBpZiB3 ZSBzdG9wIHRoZSBzdGFuZGJ5IHdlIGNhbm5vdCB2ZXJpZnkKKwkJICogaWYgdGhlIHByaW1h cnkgc2xvdCBpcyBpbiB1c2UuIFdlIGNvdWxkIHVzZSBhbiBleHRyYSBjb25uZWN0aW9uIGZv cgorCQkgKiBpdCBidXQgaXQgZG9lc24ndCBzZWVtIHdvcnRoLgorCQkgKi8KKwkJaWYgKCFz ZXR1cF9wdWJsaXNoZXIoZGJpbmZvKSkKKwkJCWV4aXQoMSk7CisKKwkJLyogU3RvcCB0aGUg c3RhbmRieSBzZXJ2ZXIgKi8KKwkJcGdfbG9nX2luZm8oInN0YW5kYnkgaXMgdXAgYW5kIHJ1 bm5pbmciKTsKKwkJcGdfbG9nX2luZm8oInN0b3BwaW5nIHRoZSBzZXJ2ZXIgdG8gc3RhcnQg dGhlIHRyYW5zZm9ybWF0aW9uIHN0ZXBzIik7CisJCWlmICghZHJ5X3J1bikKKwkJCXN0b3Bf c3RhbmRieV9zZXJ2ZXIocGdfY3RsX3BhdGgsIG9wdC5zdWJzY3JpYmVyX2Rpcik7CisJfQor CWVsc2UKKwl7CisJCXBnX2xvZ19lcnJvcigic3RhbmRieSBpcyBub3QgcnVubmluZyIpOwor CQlwZ19sb2dfZXJyb3JfaGludCgiU3RhcnQgdGhlIHN0YW5kYnkgYW5kIHRyeSBhZ2Fpbi4i KTsKKwkJZXhpdCgxKTsKKwl9CisKKwkvKgorCSAqIENyZWF0ZSBhIHRlbXBvcmFyeSBsb2dp Y2FsIHJlcGxpY2F0aW9uIHNsb3QgdG8gZ2V0IGEgY29uc2lzdGVudCBMU04uCisJICoKKwkg KiBUaGlzIGNvbnNpc3RlbnQgTFNOIHdpbGwgYmUgdXNlZCBsYXRlciB0byBhZHZhbmNlZCB0 aGUgcmVjZW50bHkgY3JlYXRlZAorCSAqIHJlcGxpY2F0aW9uIHNsb3RzLiBJdCBpcyBvayB0 byB1c2UgYSB0ZW1wb3JhcnkgcmVwbGljYXRpb24gc2xvdCBoZXJlCisJICogYmVjYXVzZSBp dCB3aWxsIGhhdmUgYSBzaG9ydCBsaWZldGltZSBhbmQgaXQgaXMgb25seSB1c2VkIGFzIGEg bWFyayB0bworCSAqIHN0YXJ0IHRoZSBsb2dpY2FsIHJlcGxpY2F0aW9uLgorCSAqCisJICog WFhYIHdlIHNob3VsZCBwcm9iYWJseSB1c2UgdGhlIGxhc3QgY3JlYXRlZCByZXBsaWNhdGlv biBzbG90IHRvIGdldCBhCisJICogY29uc2lzdGVudCBMU04gYnV0IGl0IHNob3VsZCBiZSBj aGFuZ2VkIGFmdGVyIGFkZGluZyBwZ19iYXNlYmFja3VwCisJICogc3VwcG9ydC4KKwkgKi8K Kwljb25uID0gY29ubmVjdF9kYXRhYmFzZShkYmluZm9bMF0ucHViY29ubmluZm8pOworCWlm IChjb25uID09IE5VTEwpCisJCWV4aXQoMSk7CisJY29uc2lzdGVudF9sc24gPSBjcmVhdGVf bG9naWNhbF9yZXBsaWNhdGlvbl9zbG90KGNvbm4sICZkYmluZm9bMF0sIHRydWUpOworCisJ LyoKKwkgKiBXcml0ZSByZWNvdmVyeSBwYXJhbWV0ZXJzLgorCSAqCisJICogRGVzcGl0ZSBv ZiB0aGUgcmVjb3ZlcnkgcGFyYW1ldGVycyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHN1YnNj cmliZXIsCisJICogdXNlIGEgcHVibGlzaGVyIGNvbm5lY3Rpb24gZm9yIHRoZSBmb2xsb3dp bmcgcmVjb3ZlcnkgZnVuY3Rpb25zLiBUaGUKKwkgKiBjb25uZWN0aW9uIGlzIG9ubHkgdXNl ZCB0byBjaGVjayB0aGUgY3VycmVudCBzZXJ2ZXIgdmVyc2lvbiAocGh5c2ljYWwKKwkgKiBy ZXBsaWNhLCBzYW1lIHNlcnZlciB2ZXJzaW9uKS4gVGhlIHN1YnNjcmliZXIgaXMgbm90IHJ1 bm5pbmcgeWV0LiBJbgorCSAqIGRyeSBydW4gbW9kZSwgdGhlIHJlY292ZXJ5IHBhcmFtZXRl cnMgKndvbid0KiBiZSB3cml0dGVuLiBBbiBpbnZhbGlkCisJICogTFNOIGlzIHVzZWQgZm9y IHByaW50aW5nIHB1cnBvc2VzLiBBZGRpdGlvbmFsIHJlY292ZXJ5IHBhcmFtZXRlcnMgYXJl CisJICogYWRkZWQgaGVyZS4gSXQgYXZvaWRzIHVuZXhwZWN0ZWQgYmVoYXZpb3Igc3VjaCBh cyBlbmQgb2YgcmVjb3ZlcnkgYXMKKwkgKiBzb29uIGFzIGEgY29uc2lzdGVudCBzdGF0ZSBp cyByZWFjaGVkIChyZWNvdmVyeV90YXJnZXQpIGFuZCBmYWlsdXJlIGR1ZQorCSAqIHRvIG11 bHRpcGxlIHJlY292ZXJ5IHRhcmdldHMgKG5hbWUsIHRpbWUsIHhpZCwgTFNOKS4KKwkgKi8K KwlyZWNvdmVyeWNvbmZjb250ZW50cyA9IEdlbmVyYXRlUmVjb3ZlcnlDb25maWcoY29ubiwg TlVMTCk7CisJYXBwZW5kUFFFeHBCdWZmZXIocmVjb3Zlcnljb25mY29udGVudHMsICJyZWNv dmVyeV90YXJnZXQgPSAnJ1xuIik7CisJYXBwZW5kUFFFeHBCdWZmZXIocmVjb3Zlcnljb25m Y29udGVudHMsCisJCQkJCSAgInJlY292ZXJ5X3RhcmdldF90aW1lbGluZSA9ICdsYXRlc3Qn XG4iKTsKKwlhcHBlbmRQUUV4cEJ1ZmZlcihyZWNvdmVyeWNvbmZjb250ZW50cywKKwkJCQkJ ICAicmVjb3ZlcnlfdGFyZ2V0X2luY2x1c2l2ZSA9IHRydWVcbiIpOworCWFwcGVuZFBRRXhw QnVmZmVyKHJlY292ZXJ5Y29uZmNvbnRlbnRzLAorCQkJCQkgICJyZWNvdmVyeV90YXJnZXRf YWN0aW9uID0gcHJvbW90ZVxuIik7CisJYXBwZW5kUFFFeHBCdWZmZXIocmVjb3Zlcnljb25m Y29udGVudHMsICJyZWNvdmVyeV90YXJnZXRfbmFtZSA9ICcnXG4iKTsKKwlhcHBlbmRQUUV4 cEJ1ZmZlcihyZWNvdmVyeWNvbmZjb250ZW50cywgInJlY292ZXJ5X3RhcmdldF90aW1lID0g JydcbiIpOworCWFwcGVuZFBRRXhwQnVmZmVyKHJlY292ZXJ5Y29uZmNvbnRlbnRzLCAicmVj b3ZlcnlfdGFyZ2V0X3hpZCA9ICcnXG4iKTsKKworCWlmIChkcnlfcnVuKQorCXsKKwkJYXBw ZW5kUFFFeHBCdWZmZXIocmVjb3Zlcnljb25mY29udGVudHMsICIjIGRyeSBydW4gbW9kZSIp OworCQlhcHBlbmRQUUV4cEJ1ZmZlcihyZWNvdmVyeWNvbmZjb250ZW50cywKKwkJCQkJCSAg InJlY292ZXJ5X3RhcmdldF9sc24gPSAnJVgvJVgnXG4iLAorCQkJCQkJICBMU05fRk9STUFU X0FSR1MoKFhMb2dSZWNQdHIpIEludmFsaWRYTG9nUmVjUHRyKSk7CisJfQorCWVsc2UKKwl7 CisJCWFwcGVuZFBRRXhwQnVmZmVyKHJlY292ZXJ5Y29uZmNvbnRlbnRzLCAicmVjb3Zlcnlf dGFyZ2V0X2xzbiA9ICclcydcbiIsCisJCQkJCQkgIGNvbnNpc3RlbnRfbHNuKTsKKwkJV3Jp dGVSZWNvdmVyeUNvbmZpZyhjb25uLCBvcHQuc3Vic2NyaWJlcl9kaXIsIHJlY292ZXJ5Y29u ZmNvbnRlbnRzKTsKKwl9CisJZGlzY29ubmVjdF9kYXRhYmFzZShjb25uKTsKKworCXBnX2xv Z19kZWJ1ZygicmVjb3ZlcnkgcGFyYW1ldGVyczpcbiVzIiwgcmVjb3Zlcnljb25mY29udGVu dHMtPmRhdGEpOworCisJLyogU3RhcnQgc3Vic2NyaWJlciBhbmQgd2FpdCB1bnRpbCBhY2Nl cHRpbmcgY29ubmVjdGlvbnMgKi8KKwlwZ19sb2dfaW5mbygic3RhcnRpbmcgdGhlIHN1YnNj cmliZXIiKTsKKwlpZiAoIWRyeV9ydW4pCisJCXN0YXJ0X3N0YW5kYnlfc2VydmVyKHBnX2N0 bF9wYXRoLCBvcHQuc3Vic2NyaWJlcl9kaXIsIHNlcnZlcl9zdGFydF9sb2cpOworCisJLyog V2FpdGluZyB0aGUgc3Vic2NyaWJlciB0byBiZSBwcm9tb3RlZCAqLworCXdhaXRfZm9yX2Vu ZF9yZWNvdmVyeShkYmluZm9bMF0uc3ViY29ubmluZm8sIHBnX2N0bF9wYXRoLCAmb3B0KTsK KworCS8qCisJICogQ3JlYXRlIHRoZSBzdWJzY3JpcHRpb24gZm9yIGVhY2ggZGF0YWJhc2Ug b24gc3Vic2NyaWJlci4gSXQgZG9lcyBub3QKKwkgKiBlbmFibGUgaXQgaW1tZWRpYXRlbHkg YmVjYXVzZSBpdCBuZWVkcyB0byBhZGp1c3QgdGhlIGxvZ2ljYWwKKwkgKiByZXBsaWNhdGlv biBzdGFydCBwb2ludCB0byB0aGUgTFNOIHJlcG9ydGVkIGJ5IGNvbnNpc3RlbnRfbHNuIChz ZWUKKwkgKiBzZXRfcmVwbGljYXRpb25fcHJvZ3Jlc3MpLiBJdCBhbHNvIGNsZWFucyB1cCBw dWJsaWNhdGlvbnMgY3JlYXRlZCBieQorCSAqIHRoaXMgdG9vbCBhbmQgcmVwbGljYXRpb24g dG8gdGhlIHN0YW5kYnkuCisJICovCisJaWYgKCFzZXR1cF9zdWJzY3JpYmVyKGRiaW5mbywg Y29uc2lzdGVudF9sc24pKQorCQlleGl0KDEpOworCisJLyoKKwkgKiBJZiB0aGUgcHJpbWFy eV9zbG90X25hbWUgZXhpc3RzIG9uIHByaW1hcnksIGRyb3AgaXQuCisJICoKKwkgKiBYWFgg d2UgbWlnaHQgbm90IGZhaWwgaGVyZS4gSW5zdGVhZCwgd2UgcHJvdmlkZSBhIHdhcm5pbmcg c28gdGhlIHVzZXIKKwkgKiBldmVudHVhbGx5IGRyb3BzIHRoaXMgcmVwbGljYXRpb24gc2xv dCBsYXRlci4KKwkgKi8KKwlpZiAocHJpbWFyeV9zbG90X25hbWUgIT0gTlVMTCkKKwl7CisJ CWNvbm4gPSBjb25uZWN0X2RhdGFiYXNlKGRiaW5mb1swXS5wdWJjb25uaW5mbyk7CisJCWlm IChjb25uICE9IE5VTEwpCisJCXsKKwkJCWRyb3BfcmVwbGljYXRpb25fc2xvdChjb25uLCAm ZGJpbmZvWzBdLCBwcmltYXJ5X3Nsb3RfbmFtZSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlw Z19sb2dfd2FybmluZygiY291bGQgbm90IGRyb3AgcmVwbGljYXRpb24gc2xvdCBcIiVzXCIg b24gcHJpbWFyeSIsCisJCQkJCQkgICBwcmltYXJ5X3Nsb3RfbmFtZSk7CisJCQlwZ19sb2df d2FybmluZ19oaW50KCJEcm9wIHRoaXMgcmVwbGljYXRpb24gc2xvdCBzb29uIHRvIGF2b2lk IHJldGVudGlvbiBvZiBXQUwgZmlsZXMuIik7CisJCX0KKwkJZGlzY29ubmVjdF9kYXRhYmFz ZShjb25uKTsKKwl9CisKKwkvKiBTdG9wIHRoZSBzdWJzY3JpYmVyICovCisJcGdfbG9nX2lu Zm8oInN0b3BwaW5nIHRoZSBzdWJzY3JpYmVyIik7CisJaWYgKCFkcnlfcnVuKQorCQlzdG9w X3N0YW5kYnlfc2VydmVyKHBnX2N0bF9wYXRoLCBvcHQuc3Vic2NyaWJlcl9kaXIpOworCisJ LyogQ2hhbmdlIHN5c3RlbSBpZGVudGlmaWVyIGZyb20gc3Vic2NyaWJlciAqLworCW1vZGlm eV9zdWJzY3JpYmVyX3N5c2lkKHBnX3Jlc2V0d2FsX3BhdGgsICZvcHQpOworCisJLyoKKwkg KiBUaGUgbG9nIGZpbGUgaXMga2VwdCBpZiByZXRhaW4gb3B0aW9uIGlzIHNwZWNpZmllZCBv ciB0aGlzIHRvb2wgZG9lcworCSAqIG5vdCBydW4gc3VjY2Vzc2Z1bGx5LiBPdGhlcndpc2Us IGxvZyBmaWxlIGlzIHJlbW92ZWQuCisJICovCisJaWYgKCFvcHQucmV0YWluKQorCQl1bmxp bmsoc2VydmVyX3N0YXJ0X2xvZyk7CisKKwlzdWNjZXNzID0gdHJ1ZTsKKworCXBnX2xvZ19p bmZvKCJEb25lISIpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2Jhc2ViYWNrdXAvdC8wNDBfcGdfY3JlYXRlc3Vic2NyaWJlci5wbCBiL3NyYy9iaW4vcGdf YmFzZWJhY2t1cC90LzA0MF9wZ19jcmVhdGVzdWJzY3JpYmVyLnBsCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjk1ZWI0ZTcwYWMKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvdC8wNDBfcGdfY3JlYXRlc3Vic2NyaWJlci5wbApA QCAtMCwwICsxLDM5IEBACisjIENvcHlyaWdodCAoYykgMjAyNCwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworIworIyBUZXN0IGNoZWNraW5nIG9wdGlvbnMgb2Yg cGdfY3JlYXRlc3Vic2NyaWJlci4KKyMKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsK K3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitwcm9n cmFtX2hlbHBfb2soJ3BnX2NyZWF0ZXN1YnNjcmliZXInKTsKK3Byb2dyYW1fdmVyc2lvbl9v aygncGdfY3JlYXRlc3Vic2NyaWJlcicpOworcHJvZ3JhbV9vcHRpb25zX2hhbmRsaW5nX29r KCdwZ19jcmVhdGVzdWJzY3JpYmVyJyk7CisKK215ICRkYXRhZGlyID0gUG9zdGdyZVNRTDo6 VGVzdDo6VXRpbHM6OnRlbXBkaXI7CisKK2NvbW1hbmRfZmFpbHMoWydwZ19jcmVhdGVzdWJz Y3JpYmVyJ10sCisJJ25vIHN1YnNjcmliZXIgZGF0YSBkaXJlY3Rvcnkgc3BlY2lmaWVkJyk7 Citjb21tYW5kX2ZhaWxzKAorCVsgJ3BnX2NyZWF0ZXN1YnNjcmliZXInLCAnLS1wZ2RhdGEn LCAkZGF0YWRpciBdLAorCSdubyBwdWJsaXNoZXIgY29ubmVjdGlvbiBzdHJpbmcgc3BlY2lm aWVkJyk7Citjb21tYW5kX2ZhaWxzKAorCVsKKwkJJ3BnX2NyZWF0ZXN1YnNjcmliZXInLCAn LS1kcnktcnVuJywKKwkJJy0tcGdkYXRhJywgJGRhdGFkaXIsCisJCSctLXB1Ymxpc2hlci1z ZXJ2ZXInLCAnZGJuYW1lPXBvc3RncmVzJworCV0sCisJJ25vIHN1YnNjcmliZXIgY29ubmVj dGlvbiBzdHJpbmcgc3BlY2lmaWVkJyk7Citjb21tYW5kX2ZhaWxzKAorCVsKKwkJJ3BnX2Ny ZWF0ZXN1YnNjcmliZXInLCAnLS12ZXJib3NlJywKKwkJJy0tcGdkYXRhJywgJGRhdGFkaXIs CisJCSctLXB1Ymxpc2hlci1zZXJ2ZXInLCAnZGJuYW1lPXBvc3RncmVzJywKKwkJJy0tc3Vi c2NyaWJlci1zZXJ2ZXInLCAnZGJuYW1lPXBvc3RncmVzJworCV0sCisJJ25vIGRhdGFiYXNl IG5hbWUgc3BlY2lmaWVkJyk7CisKK2RvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19iYXNlYmFja3VwL3QvMDQxX3BnX2NyZWF0ZXN1YnNjcmliZXJfc3RhbmRieS5w bCBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC90LzA0MV9wZ19jcmVhdGVzdWJzY3JpYmVyX3N0 YW5kYnkucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTI4MDdk M2ZhYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC90LzA0MV9w Z19jcmVhdGVzdWJzY3JpYmVyX3N0YW5kYnkucGwKQEAgLTAsMCArMSwyMTcgQEAKKyMgQ29w eXJpZ2h0IChjKSAyMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor CisjCisjIFRlc3QgdXNpbmcgYSBzdGFuZGJ5IHNlcnZlciBhcyB0aGUgc3Vic2NyaWJlci4K KwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpD bHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7 CisKK215ICRub2RlX3A7CitteSAkbm9kZV9mOworbXkgJG5vZGVfczsKK215ICRub2RlX2M7 CitteSAkcmVzdWx0OworbXkgJHNsb3RuYW1lOworCisjIFNldCB1cCBub2RlIFAgYXMgcHJp bWFyeQorJG5vZGVfcCA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbm9kZV9w Jyk7Ciskbm9kZV9wLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRu b2RlX3AtPnN0YXJ0OworCisjIFNldCB1cCBub2RlIEYgYXMgYWJvdXQtdG8tZmFpbCBub2Rl CisjIEZvcmNlIGl0IHRvIGluaXRpYWxpemUgYSBuZXcgY2x1c3RlciBpbnN0ZWFkIG9mIGNv cHlpbmcgYQorIyBwcmV2aW91c2x5IGluaXRkYidkIGNsdXN0ZXIuCit7CisJbG9jYWwgJEVO VnsnSU5JVERCX1RFTVBMQVRFJ30gPSB1bmRlZjsKKworCSRub2RlX2YgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGVfZicpOworCSRub2RlX2YtPmluaXQoYWxsb3dz X3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOworCSRub2RlX2YtPnN0YXJ0OworfQorCisjIE9u IG5vZGUgUAorIyAtIGNyZWF0ZSBkYXRhYmFzZXMKKyMgLSBjcmVhdGUgdGVzdCB0YWJsZXMK KyMgLSBpbnNlcnQgYSByb3cKKyMgLSBjcmVhdGUgYSBwaHlzaWNhbCByZXBsaWNhdGlvbiBz bG90Ciskbm9kZV9wLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcSgKKwlDUkVBVEUgREFU QUJBU0UgcGcxOworCUNSRUFURSBEQVRBQkFTRSBwZzI7CispKTsKKyRub2RlX3AtPnNhZmVf cHNxbCgncGcxJywgJ0NSRUFURSBUQUJMRSB0YmwxIChhIHRleHQpJyk7Ciskbm9kZV9wLT5z YWZlX3BzcWwoJ3BnMScsICJJTlNFUlQgSU5UTyB0YmwxIFZBTFVFUygnZmlyc3Qgcm93Jyki KTsKKyRub2RlX3AtPnNhZmVfcHNxbCgncGcyJywgJ0NSRUFURSBUQUJMRSB0YmwyIChhIHRl eHQpJyk7Ciskc2xvdG5hbWUgPSAncGh5c2ljYWxfc2xvdCc7Ciskbm9kZV9wLT5zYWZlX3Bz cWwoJ3BnMicsCisJIlNFTEVDVCBwZ19jcmVhdGVfcGh5c2ljYWxfcmVwbGljYXRpb25fc2xv dCgnJHNsb3RuYW1lJykiKTsKKworIyBTZXQgdXAgbm9kZSBTIGFzIHN0YW5kYnkgbGlua2lu ZyB0byBub2RlIFAKKyRub2RlX3AtPmJhY2t1cCgnYmFja3VwXzEnKTsKKyRub2RlX3MgPSBQ b3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGVfcycpOworJG5vZGVfcy0+aW5p dF9mcm9tX2JhY2t1cCgkbm9kZV9wLCAnYmFja3VwXzEnLCBoYXNfc3RyZWFtaW5nID0+IDEp OworJG5vZGVfcy0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsIHFxWworbG9n X21pbl9tZXNzYWdlcyA9IGRlYnVnMgorcHJpbWFyeV9zbG90X25hbWUgPSAnJHNsb3RuYW1l JworXSk7Ciskbm9kZV9zLT5zZXRfc3RhbmRieV9tb2RlKCk7CisKKyMgUnVuIHBnX2NyZWF0 ZXN1YnNjcmliZXIgb24gYWJvdXQtdG8tZmFpbCBub2RlIEYKK2NvbW1hbmRfZmFpbHMoCisJ WworCQkncGdfY3JlYXRlc3Vic2NyaWJlcicsICctLXZlcmJvc2UnLAorCQknLS1wZ2RhdGEn LCAkbm9kZV9mLT5kYXRhX2RpciwKKwkJJy0tcHVibGlzaGVyLXNlcnZlcicsICRub2RlX3At PmNvbm5zdHIoJ3BnMScpLAorCQknLS1zdWJzY3JpYmVyLXNlcnZlcicsICRub2RlX2YtPmNv bm5zdHIoJ3BnMScpLAorCQknLS1kYXRhYmFzZScsICdwZzEnLAorCQknLS1kYXRhYmFzZScs ICdwZzInCisJXSwKKwknc3Vic2NyaWJlciBkYXRhIGRpcmVjdG9yeSBpcyBub3QgYSBjb3B5 IG9mIHRoZSBzb3VyY2UgZGF0YWJhc2UgY2x1c3RlcicpOworCisjIFJ1biBwZ19jcmVhdGVz dWJzY3JpYmVyIG9uIHRoZSBzdG9wcGVkIG5vZGUKK2NvbW1hbmRfZmFpbHMoCisJWworCQkn cGdfY3JlYXRlc3Vic2NyaWJlcicsICctLXZlcmJvc2UnLAorCQknLS1kcnktcnVuJywgJy0t cGdkYXRhJywKKwkJJG5vZGVfcy0+ZGF0YV9kaXIsICctLXB1Ymxpc2hlci1zZXJ2ZXInLAor CQkkbm9kZV9wLT5jb25uc3RyKCdwZzEnKSwgJy0tc3Vic2NyaWJlci1zZXJ2ZXInLAorCQkk bm9kZV9zLT5jb25uc3RyKCdwZzEnKSwgJy0tZGF0YWJhc2UnLAorCQkncGcxJywgJy0tZGF0 YWJhc2UnLAorCQkncGcyJworCV0sCisJJ3RhcmdldCBzZXJ2ZXIgbXVzdCBiZSBydW5uaW5n Jyk7CisKKyRub2RlX3MtPnN0YXJ0OworCisjIFNldCB1cCBub2RlIEMgYXMgc3RhbmRieSBs aW5raW5nIHRvIG5vZGUgUworJG5vZGVfcy0+YmFja3VwKCdiYWNrdXBfMicpOworJG5vZGVf YyA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbm9kZV9jJyk7Ciskbm9kZV9j LT5pbml0X2Zyb21fYmFja3VwKCRub2RlX3MsICdiYWNrdXBfMicsIGhhc19zdHJlYW1pbmcg PT4gMSk7Ciskbm9kZV9jLT5hcHBlbmRfY29uZigKKwkncG9zdGdyZXNxbC5jb25mJywgcXFb Citsb2dfbWluX21lc3NhZ2VzID0gZGVidWcyCitdKTsKKyRub2RlX2MtPnNldF9zdGFuZGJ5 X21vZGUoKTsKKyRub2RlX2MtPnN0YXJ0OworCisjIFJ1biBwZ19jcmVhdGVzdWJzY3JpYmVy IG9uIG5vZGUgQyAoUCAtPiBTIC0+IEMpCitjb21tYW5kX2ZhaWxzKAorCVsKKwkJJ3BnX2Ny ZWF0ZXN1YnNjcmliZXInLCAnLS12ZXJib3NlJywKKwkJJy0tZHJ5LXJ1bicsICctLXBnZGF0 YScsCisJCSRub2RlX2MtPmRhdGFfZGlyLCAnLS1wdWJsaXNoZXItc2VydmVyJywKKwkJJG5v ZGVfcy0+Y29ubnN0cigncGcxJyksICctLXN1YnNjcmliZXItc2VydmVyJywKKwkJJG5vZGVf Yy0+Y29ubnN0cigncGcxJyksICctLWRhdGFiYXNlJywKKwkJJ3BnMScsICctLWRhdGFiYXNl JywKKwkJJ3BnMicKKwldLAorCSdwcmltYXJ5IHNlcnZlciBpcyBpbiByZWNvdmVyeScpOwor CisjIFN0b3Agbm9kZSBDCiskbm9kZV9jLT50ZWFyZG93bl9ub2RlOworCisjIEluc2VydCBh bm90aGVyIHJvdyBvbiBub2RlIFAgYW5kIHdhaXQgbm9kZSBTIHRvIGNhdGNoIHVwCiskbm9k ZV9wLT5zYWZlX3BzcWwoJ3BnMScsICJJTlNFUlQgSU5UTyB0YmwxIFZBTFVFUygnc2Vjb25k IHJvdycpIik7Ciskbm9kZV9wLT53YWl0X2Zvcl9yZXBsYXlfY2F0Y2h1cCgkbm9kZV9zKTsK KworIyBkcnkgcnVuIG1vZGUgb24gbm9kZSBTCitjb21tYW5kX29rKAorCVsKKwkJJ3BnX2Ny ZWF0ZXN1YnNjcmliZXInLCAnLS12ZXJib3NlJywKKwkJJy0tZHJ5LXJ1bicsICctLXBnZGF0 YScsCisJCSRub2RlX3MtPmRhdGFfZGlyLCAnLS1wdWJsaXNoZXItc2VydmVyJywKKwkJJG5v ZGVfcC0+Y29ubnN0cigncGcxJyksICctLXN1YnNjcmliZXItc2VydmVyJywKKwkJJG5vZGVf cy0+Y29ubnN0cigncGcxJyksICctLWRhdGFiYXNlJywKKwkJJ3BnMScsICctLWRhdGFiYXNl JywKKwkJJ3BnMicKKwldLAorCSdydW4gcGdfY3JlYXRlc3Vic2NyaWJlciAtLWRyeS1ydW4g b24gbm9kZSBTJyk7CisKKyMgQ2hlY2sgaWYgbm9kZSBTIGlzIHN0aWxsIGEgc3RhbmRieQor aXMoJG5vZGVfcy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdTRUxFQ1QgcGdfY2F0YWxvZy5w Z19pc19pbl9yZWNvdmVyeSgpJyksCisJJ3QnLCAnc3RhbmRieSBpcyBpbiByZWNvdmVyeScp OworCisjIHBnX2NyZWF0ZXN1YnNjcmliZXIgY2FuIHJ1biB3aXRob3V0IC0tZGF0YWJhc2Vz IG9wdGlvbgorY29tbWFuZF9vaygKKwlbCisJCSdwZ19jcmVhdGVzdWJzY3JpYmVyJywgJy0t dmVyYm9zZScsCisJCSctLWRyeS1ydW4nLCAnLS1wZ2RhdGEnLAorCQkkbm9kZV9zLT5kYXRh X2RpciwgJy0tcHVibGlzaGVyLXNlcnZlcicsCisJCSRub2RlX3AtPmNvbm5zdHIoJ3BnMScp LCAnLS1zdWJzY3JpYmVyLXNlcnZlcicsCisJCSRub2RlX3MtPmNvbm5zdHIoJ3BnMScpCisJ XSwKKwkncnVuIHBnX2NyZWF0ZXN1YnNjcmliZXIgd2l0aG91dCAtLWRhdGFiYXNlcycpOwor CisjIFJ1biBwZ19jcmVhdGVzdWJzY3JpYmVyIG9uIG5vZGUgUworY29tbWFuZF9vaygKKwlb CisJCSdwZ19jcmVhdGVzdWJzY3JpYmVyJywgJy0tdmVyYm9zZScsCisJCSctLXZlcmJvc2Un LCAnLS1wZ2RhdGEnLAorCQkkbm9kZV9zLT5kYXRhX2RpciwgJy0tcHVibGlzaGVyLXNlcnZl cicsCisJCSRub2RlX3AtPmNvbm5zdHIoJ3BnMScpLCAnLS1zdWJzY3JpYmVyLXNlcnZlcics CisJCSRub2RlX3MtPmNvbm5zdHIoJ3BnMScpLCAnLS1kYXRhYmFzZScsCisJCSdwZzEnLCAn LS1kYXRhYmFzZScsCisJCSdwZzInCisJXSwKKwkncnVuIHBnX2NyZWF0ZXN1YnNjcmliZXIg b24gbm9kZSBTJyk7CisKK29rKCAtZCAkbm9kZV9zLT5kYXRhX2RpciAuICIvcGdfY3JlYXRl c3Vic2NyaWJlcl9vdXRwdXQuZCIsCisJInBnX2NyZWF0ZXN1YnNjcmliZXJfb3V0cHV0LmQv IHJlbW92ZWQgYWZ0ZXIgcGdfY3JlYXRlc3Vic2NyaWJlciBzdWNjZXNzIgorKTsKKworIyBD b25maXJtIHRoZSBwaHlzaWNhbCByZXBsaWNhdGlvbiBzbG90IGhhcyBiZWVuIHJlbW92ZWQK KyRyZXN1bHQgPSAkbm9kZV9wLT5zYWZlX3BzcWwoJ3BnMScsCisJIlNFTEVDVCBjb3VudCgq KSBGUk9NIHBnX3JlcGxpY2F0aW9uX3Nsb3RzIFdIRVJFIHNsb3RfbmFtZSA9ICckc2xvdG5h bWUnIgorKTsKK2lzKCRyZXN1bHQsIHFxKDApLAorCSd0aGUgcGh5c2ljYWwgcmVwbGljYXRp b24gc2xvdCB1c2VkIGFzIHByaW1hcnlfc2xvdF9uYW1lIGhhcyBiZWVuIHJlbW92ZWQnCisp OworCisjIEluc2VydCByb3dzIG9uIFAKKyRub2RlX3AtPnNhZmVfcHNxbCgncGcxJywgIklO U0VSVCBJTlRPIHRibDEgVkFMVUVTKCd0aGlyZCByb3cnKSIpOworJG5vZGVfcC0+c2FmZV9w c3FsKCdwZzInLCAiSU5TRVJUIElOVE8gdGJsMiBWQUxVRVMoJ3JvdyAxJykiKTsKKworIyBQ SUQgc2V0cyB0byB1bmRlZmluZWQgYmVjYXVzZSBzdWJzY3JpYmVyIHdhcyBzdG9wcGVkIGJl aGluZCB0aGUgc2NlbmVzLgorIyBTdGFydCBzdWJzY3JpYmVyCiskbm9kZV9zLT57X3BpZH0g PSB1bmRlZjsKKyRub2RlX3MtPnN0YXJ0OworCisjIEdldCBzdWJzY3JpcHRpb24gbmFtZXMK KyRyZXN1bHQgPSAkbm9kZV9zLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXEoCisJU0VM RUNUIHN1Ym5hbWUgRlJPTSBwZ19zdWJzY3JpcHRpb24gV0hFUkUgc3VibmFtZSB+ICdecGdf Y3JlYXRlc3Vic2NyaWJlcl8nCispKTsKK215IEBzdWJuYW1lcyA9IHNwbGl0KCJcbiIsICRy ZXN1bHQpOworCisjIFdhaXQgc3Vic2NyaWJlciB0byBjYXRjaCB1cAorJG5vZGVfcy0+d2Fp dF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfcCwgJHN1Ym5hbWVzWzBdKTsKKyRub2Rl X3MtPndhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3AsICRzdWJuYW1lc1sxXSk7 CisKKyMgQ2hlY2sgcmVzdWx0IG9uIGRhdGFiYXNlIHBnMQorJHJlc3VsdCA9ICRub2RlX3Mt PnNhZmVfcHNxbCgncGcxJywgJ1NFTEVDVCAqIEZST00gdGJsMScpOworaXMoICRyZXN1bHQs IHFxKGZpcnN0IHJvdworc2Vjb25kIHJvdwordGhpcmQgcm93KSwKKwknbG9naWNhbCByZXBs aWNhdGlvbiB3b3JrcyBvbiBkYXRhYmFzZSBwZzEnKTsKKworIyBDaGVjayByZXN1bHQgb24g ZGF0YWJhc2UgcGcyCiskcmVzdWx0ID0gJG5vZGVfcy0+c2FmZV9wc3FsKCdwZzInLCAnU0VM RUNUICogRlJPTSB0YmwyJyk7CitpcygkcmVzdWx0LCBxcShyb3cgMSksICdsb2dpY2FsIHJl cGxpY2F0aW9uIHdvcmtzIG9uIGRhdGFiYXNlIHBnMicpOworCisjIERpZmZlcmVudCBzeXN0 ZW0gaWRlbnRpZmllcj8KK215ICRzeXNpZF9wID0gJG5vZGVfcC0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJJ1NFTEVDVCBzeXN0ZW1faWRlbnRpZmllciBGUk9NIHBnX2NvbnRyb2xfc3lz dGVtKCknKTsKK215ICRzeXNpZF9zID0gJG5vZGVfcy0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJJ1NFTEVDVCBzeXN0ZW1faWRlbnRpZmllciBGUk9NIHBnX2NvbnRyb2xfc3lzdGVtKCkn KTsKK29rKCRzeXNpZF9wICE9ICRzeXNpZF9zLCAnc3lzdGVtIGlkZW50aWZpZXIgd2FzIGNo YW5nZWQnKTsKKworIyBjbGVhbiB1cAorJG5vZGVfcC0+dGVhcmRvd25fbm9kZTsKKyRub2Rl X3MtPnRlYXJkb3duX25vZGU7Ciskbm9kZV9mLT50ZWFyZG93bl9ub2RlOworCitkb25lX3Rl c3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggZDgwOGFhZDhiMC4u MDhkZTJiZjRlNiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTUxNyw2ICs1 MTcsNyBAQCBDcmVhdGVTZXFTdG10CiBDcmVhdGVTdGF0c1N0bXQKIENyZWF0ZVN0bXQKIENy ZWF0ZVN0bXRDb250ZXh0CitDcmVhdGVTdWJzY3JpYmVyT3B0aW9ucwogQ3JlYXRlU3Vic2Ny aXB0aW9uU3RtdAogQ3JlYXRlVGFibGVBc1N0bXQKIENyZWF0ZVRhYmxlU3BhY2VTdG10CkBA IC0xNTA1LDYgKzE1MDYsNyBAQCBMb2dpY2FsUmVwQmVnaW5EYXRhCiBMb2dpY2FsUmVwQ29t bWl0RGF0YQogTG9naWNhbFJlcENvbW1pdFByZXBhcmVkVHhuRGF0YQogTG9naWNhbFJlcEN0 eFN0cnVjdAorTG9naWNhbFJlcEluZm8KIExvZ2ljYWxSZXBNc2dUeXBlCiBMb2dpY2FsUmVw UGFydE1hcEVudHJ5CiBMb2dpY2FsUmVwUHJlcGFyZWRUeG5EYXRhCi0tIAoyLjMwLjIKCg== --a6a5fa72800745fab7ab24fea6cb5c0c--