Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1f8lgT-0000Mb-Md for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Apr 2018 11:55:34 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1f8lgS-0000TM-8r for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Apr 2018 11:55:32 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1f8lgR-0000TC-6D for pgsql-hackers@lists.postgresql.org; Wed, 18 Apr 2018 11:55:32 +0000 Received: from mail-wr0-x241.google.com ([2a00:1450:400c:c0c::241]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1f8lgN-0007RF-DU for pgsql-hackers@postgresql.org; Wed, 18 Apr 2018 11:55:29 +0000 Received: by mail-wr0-x241.google.com with SMTP id q13-v6so4060732wre.3 for ; Wed, 18 Apr 2018 04:55:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=czqrwyyA8KnRYn+bhuIDgJD3hJLsnVQ/grXoXjoOti0=; b=h/Y22bmgQPf3L82T0/deYvKLDMSa92/XOlvqjaayFQ2R2/9nrI8Orb330bz1zV9zRy 97BOqdHLI16+cUDQ7iEt1+oVjc7djcnzsIzQWRnhXUFQy4wYh5jxfOJrpceLdhvsYmPd 6FNz2A9/8tXF89PnUMlULcpj7ysva25vcFU2hPwlllE8vDaz4Us7zp+Oym8zyhaEoqLs Xl0jDFc1iIRSdzP9D1Euw4e63X+M2GyQkA3BnL8gWuFUL9h9zqL56Nv/kw1y+hU7E7Mw JLkE9gI2wutezt0pgn80Tb+t+L4t6eyjbq1ij+o9j95yQAmXa+ZGfSTGk8cJyA6peB3f LaJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=czqrwyyA8KnRYn+bhuIDgJD3hJLsnVQ/grXoXjoOti0=; b=V5xgRBE1RjjOCgH40uSJFfXGvGRnfCb8gQcaic4bVYXLQ4dl44JaGXUeC8a8WQ3/Sz hVH/5uFEjVoJwuLnCRKJ1HyIxSaHnIUraXEh3NbW2hr/X6BaGf+cSWpfrnEByQN7sz3U shUjQAjqgxMA6GrMq3w1vConDA1LFVvG5Hl0dR9fHNr3gxVMr9DDFrSiH+kMaNeCJUc2 qoBedO1J4cxI+z0ZXiBAD9ww5DVdDPR7lpajUUnu/q/W50AUEjOBE37lBDoD8hcV/nUC QcRBGddtzL3zDX7z6vscz4peLyMMH4Fjnphf5yOi+rhFhYFD4g5uKaftfX0JASGbTOCy e4jQ== X-Gm-Message-State: ALQs6tAh9tKOCqDfjJOsFZcNvIwPFfqa1XhrFZH5/iq00VtZX7l6TCPa cXUjh03M1guCsXYP0oaspwPUUtKy0znr/gavy20= X-Google-Smtp-Source: AIpwx481vNK/wsHDJOmvBX1MY3kyfKMliTomLJNo+8EWc8uxh1iEiLlotXNPMo+rMwmSOB5kgfFYiWCHwGsKeqC48Ss= X-Received: by 10.28.50.130 with SMTP id y124mr1495188wmy.22.1524052525305; Wed, 18 Apr 2018 04:55:25 -0700 (PDT) MIME-Version: 1.0 Received: by 10.223.166.197 with HTTP; Wed, 18 Apr 2018 04:54:44 -0700 (PDT) In-Reply-To: <20180418113710.GA8232@zakirov.localdomain> References: <20180417141410.GA7917@zakirov.localdomain> <20180418113710.GA8232@zakirov.localdomain> From: Pavel Stehule Date: Wed, 18 Apr 2018 13:54:44 +0200 Message-ID: Subject: Re: [HACKERS] proposal: schema variables To: Arthur Zakirov Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="001a114117706457c1056a1e2131" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --001a114117706457c1056a1e2131 Content-Type: multipart/alternative; boundary="001a114117706457bd056a1e212f" --001a114117706457bd056a1e212f Content-Type: text/plain; charset="UTF-8" Hi I am sending rebased patch 2018-04-18 13:37 GMT+02:00 Arthur Zakirov : > On Tue, Apr 17, 2018 at 06:28:19PM +0200, Pavel Stehule wrote: > > I though about it, and I am inclined to prefer pg_class instead separate > > tables. > > > > It true, so there are lot of "unused" attributes for this purpose, but > > there is lot of shared attributes, and lot of shared code. Semantically, > I > > see variables in family of sequences, tables, indexes, views. Now, it > > shares code, and I hope in next steps more code can be shared - > > constraints, triggers. > > > > There are two objective arguments for using pg_class: > > > > 1. unique name in schema - it reduces risk of collisions > > 2. sharing lot of code > > > > So in this case I don't see well benefits of separate table. > > Understood. I haven't strong opinion here though. But I thought that > pg_class approach may limit extensibility of variables. > I didn't touch limit (I don't know if there will be some issue - still is far to upstream). This is technology, but workable, demo. I though so some users had a problem to imagine what is persistent variable in my view. But almost all code and tests can be used for final version - only storage implementation is nothing more than workaround. > > BTW: > - there is unitialized variable 'j' in pg_dump.c:15422 > - in tab-complete.c:1268 initialization needs extra NULL before > &Query_for_list_of_variables > I found it too today when I did rebase. But thank you for report. > > Also I think makeRangeVarForTargetOfSchemaVariable() has non friendly > argument names 'field1', 'field2', 'field2'. > yes, I hadn't better names :( In this routine I am doing diagnostic what semantic has sense for current values. the field1, field2 can be schema.variable or variable.field. So when I used semantic names: schema, varname, fieldname, then it was more messy (for me). Regards Pavel > > -- > Arthur Zakirov > Postgres Professional: http://www.postgrespro.com > Russian Postgres Company > --001a114117706457bd056a1e212f Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi

I am sending rebased patch

2018-04-18 13:= 37 GMT+02:00 Arthur Zakirov <a.zakirov@postgrespro.ru>:
On Tue, Apr 17, 2018 = at 06:28:19PM +0200, Pavel Stehule wrote:
> I though about it, and I am inclined to prefer pg_class instead separa= te
> tables.
>
> It true, so there are lot of "unused" attributes for this pu= rpose, but
> there is lot of shared attributes, and lot of shared code. Semanticall= y, I
> see variables in family of sequences, tables, indexes, views. Now, it<= br> > shares code, and I hope in next steps more code can be shared -
> constraints, triggers.
>
> There are two objective arguments for using pg_class:
>
> 1. unique name in schema - it reduces risk of collisions
> 2. sharing lot of code
>
> So in this case I don't see well benefits of separate table.

Understood. I haven't strong opinion here though. But I thought = that
pg_class approach may limit extensibility of variables.

I didn't touch limit (I don't know if there will b= e some issue - still is far to upstream). This is technology, but workable,= demo. I though so some users had a problem to imagine what is persistent v= ariable in my view.

But almost all code and tests can be= used for final version - only storage implementation is nothing more than = workaround.
=C2=A0

BTW:
- there is unitialized variable 'j' in pg_dump.c:15422
- in tab-complete.c:1268 initialization needs extra NULL before
=C2=A0 &Query_for_list_of_variables

I found it too today when I did rebase. But thank you for report.
=C2= =A0

Also I think makeRangeVarForTargetOfSchemaVariable() has non friendly<= br> argument names 'field1', 'field2', 'field2'.

yes, I hadn't better names :(

In this routine I am doing diagnostic what semantic has sense for cu= rrent values. the field1, field2 can be schema.variable or variable.field. = So when I used semantic names: schema, varname, fieldname, then it was more= messy (for me).

Regards

Pavel
=C2=A0

--
Arthur Zakirov
Postgres Professional: http://www.postgrespro.com
Russian Postgres Company

--001a114117706457bd056a1e212f-- --001a114117706457c1056a1e2131 Content-Type: application/octet-stream; name=schema-variables-poc-180418-01-diff Content-Disposition: attachment; filename=schema-variables-poc-180418-01-diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_jg51550s0 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sIGIvZG9jL3NyYy9zZ21sL2Nh dGFsb2dzLnNnbWwKaW5kZXggMTRhZWVkMzA3Ni4uYjhjOTBhZThhZiAxMDA2NDQKLS0tIGEvZG9j L3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwK QEAgLTE4NDAsNyArMTg0MCw4IEBAIFNDUkFNLVNIQS0yNTYkPHJlcGxhY2VhYmxlPiZsdDtpdGVy YXRpb24gY291bnQmZ3Q7PC9yZXBsYWNlYWJsZT46PHJlcGxhY2VhYmxlPiZsCiAgICAgICAgPGxp dGVyYWw+bTwvbGl0ZXJhbD4gPSBtYXRlcmlhbGl6ZWQgdmlldywKICAgICAgICA8bGl0ZXJhbD5j PC9saXRlcmFsPiA9IGNvbXBvc2l0ZSB0eXBlLAogICAgICAgIDxsaXRlcmFsPmY8L2xpdGVyYWw+ ID0gZm9yZWlnbiB0YWJsZSwKLSAgICAgICA8bGl0ZXJhbD5wPC9saXRlcmFsPiA9IHBhcnRpdGlv bmVkIHRhYmxlCisgICAgICAgPGxpdGVyYWw+cDwvbGl0ZXJhbD4gPSBwYXJ0aXRpb25lZCB0YWJs ZSwKKyAgICAgICA8bGl0ZXJhbD5WPC9saXRlcmFsPiA9IHNjaGVtYSB2YXJpYWJsZQogICAgICAg PC9lbnRyeT4KICAgICAgPC9yb3c+CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jLnNn bWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCmluZGV4IDUzYTQwZGRlZWMuLjkyODQ4ZGVhZDIg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1 bmMuc2dtbApAQCAtMTU4ODMsNiArMTU4ODMsODMgQEAgU0VMRUNUICogRlJPTSBwZ19sc19kaXIo Jy4nKSBXSVRIIE9SRElOQUxJVFkgQVMgdChscyxuKTsKIAogIDwvc2VjdDE+CiAKKyA8c2VjdDEg aWQ9ImZ1bmN0aW9ucy1zY2hlbWF2YXIiPgorICA8dGl0bGU+U2NoZW1hIFZhcmlhYmxlIEZ1bmN0 aW9uczwvdGl0bGU+CisKKyAgPGluZGV4dGVybSB6b25lPSJmdW5jdGlvbnMtc2NoZW1hdmFyIj4K KyAgIDxwcmltYXJ5PlNjaGVtYSBWYXJpYWJsZSBGdW5jdGlvbnM8L3ByaW1hcnk+CisgICA8c2Vj b25kYXJ5PmZ1bmN0aW9uczwvc2Vjb25kYXJ5PgorICA8L2luZGV4dGVybT4KKworICA8aW5kZXh0 ZXJtPgorICAgPHByaW1hcnk+Z2V0X3NjaGVtYV92YXJpYWJsZTwvcHJpbWFyeT4KKyAgPC9pbmRl eHRlcm0+CisKKyAgPGluZGV4dGVybT4KKyAgIDxwcmltYXJ5PnNldF9zY2hlbWFfdmFyaWFibGU8 L3ByaW1hcnk+CisgIDwvaW5kZXh0ZXJtPgorCisgIDxwYXJhPgorICAgVGhlc2UgZnVuY3Rpb25z IGFsbG93IHJlYWRpbmcgYW5kIHdyaXRpbmcgc2NoZW1hIHZhcmlhYmxlcyB2YWx1ZXMuCisgICBJ ZiB0aGUgc2NoZW1hIHZhcmlhYmxlIHJlZmVyZW5jZWQgZG9lcyBub3QgZXhpc3QgKGNyZWF0ZWQg dXNpbmcgPHhyZWYgbGlua2VuZD0ic3FsLWNyZWF0ZXZhcmlhYmxlIi8+KQorICAgdGhlc2UgZnVu Y3Rpb25zIHdpbGwgKGRvIHNvbWV0aGluZy4uLikuCisgIDwvcGFyYT4KKworICA8dGFibGUgaWQ9 ImZ1bmN0aW9ucy1zY2hlbWF2YXItdGFiIj4KKyAgIDx0aXRsZT5GdW5jdGlvbnMgZm9yIGFjY2Vz cyB0byBzY2hlbWEgdmFyaWFibGVzPC90aXRsZT4KKyAgIDx0Z3JvdXAgY29scz0iNCI+CisgICAg PHRoZWFkPgorICAgICA8cm93PgorICAgICAgPGVudHJ5PkZ1bmN0aW9uPC9lbnRyeT4KKyAgICAg IDxlbnRyeT5Bcmd1bWVudCBUeXBlPC9lbnRyeT4KKyAgICAgIDxlbnRyeT5SZXR1cm4gVHlwZTwv ZW50cnk+CisgICAgICA8ZW50cnk+RGVzY3JpcHRpb248L2VudHJ5PgorICAgICA8L3Jvdz4KKyAg ICA8L3RoZWFkPgorICAgIDx0Ym9keT4KKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeT48bGl0ZXJh bD48ZnVuY3Rpb24+Z2V0X3NjaGVtYV92YXJpYWJsZSg8cGFyYW1ldGVyPnZhcmlhYmxlPC9wYXJh bWV0ZXI+LCA8cGFyYW1ldGVyPmV4cGVjdGVkIHR5cGU8L3BhcmFtZXRlcj4pPC9mdW5jdGlvbj48 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgIDxlbnRyeT48dHlwZT5yZWdjbGFzczwvdHlwZT4sIDx0 eXBlPmFueWVsZW1lbnQ8L3R5cGU+PC9lbnRyeT4KKyAgICAgIDxlbnRyeT48dHlwZT5hbnllbGVt ZW50PC90eXBlPjwvZW50cnk+CisgICAgICA8ZW50cnk+CisgICAgICAgUmV0dXJucyB2YWx1ZSBv ZiBzY2hlbWEgdmFyaWFibGUgY29udmVydGVkIHRvIGV4cGVjdGVkIHR5cGUuCisgICAgICA8L2Vu dHJ5PgorICAgICA8L3Jvdz4KKworICAgICA8cm93PgorICAgICAgPGVudHJ5PjxsaXRlcmFsPjxm dW5jdGlvbj5zZXRfc2NoZW1hX3ZhcmlhYmxlKDxwYXJhbWV0ZXI+dmFyaWFibGU8L3BhcmFtZXRl cj4sIDxwYXJhbWV0ZXI+dmFsdWU8L3BhcmFtZXRlcj4pPC9mdW5jdGlvbj48L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgIDxlbnRyeT48dHlwZT5yZWdjbGFzczwvdHlwZT4sIDx0eXBlPmFueWVsZW1l bnQ8L3R5cGU+PC9lbnRyeT4KKyAgICAgIDxlbnRyeT48dHlwZT52b2lkPC90eXBlPjwvZW50cnk+ CisgICAgICA8ZW50cnk+CisgICAgICAgU2V0cyB0aGUgdmFsdWUgb2Ygc2NoZW1hIHZhcmlhYmxl IHRvIHZhbHVlLCBhZnRlciBjb252ZXJ0aW5nIHRoZSBpbnB1dCB0byB0aGUgY29ycmVjdCB0eXBl LgorICAgICAgPC9lbnRyeT4KKyAgICAgPC9yb3c+CisKKyAgICA8L3Rib2R5PgorICAgPC90Z3Jv dXA+CisgIDwvdGFibGU+CisgIDxwYXJhPgorICBBbiBleGFtcGxlOgorCis8cHJvZ3JhbWxpc3Rp bmc+CitDUkVBVEUgVEVNUCBWQVJJQUJMRSBmb28gQVMgbnVtZXJpYzsKK1NFTEVDVCBzZXRfc2No ZW1hX3ZhcmlhYmxlKCdmb28nLCAzNDUuNDQ1KTsKKyBzZXRfc2NoZW1hX3ZhcmlhYmxlIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBnZXRfc2NoZW1hX3Zhcmlh YmxlKCdmb28nLCBudWxsOjpudW1lcmljKTsKKworIGdldF9zY2hlbWFfdmFyaWFibGUgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAzNDUuNDQ1CisoMSByb3cpCis8L3Byb2dy YW1saXN0aW5nPgorICA8L3BhcmE+CisKKyA8L3NlY3QxPgorCiAgPHNlY3QxIGlkPSJmdW5jdGlv bnMtaW5mbyI+CiAgIDx0aXRsZT5TeXN0ZW0gSW5mb3JtYXRpb24gRnVuY3Rpb25zPC90aXRsZT4K IApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9hbGxmaWxlcy5zZ21sIGIvZG9jL3NyYy9z Z21sL3JlZi9hbGxmaWxlcy5zZ21sCmluZGV4IGM4MWM4N2VmNDEuLmE3M2FkMDFkNDEgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv cmVmL2FsbGZpbGVzLnNnbWwKQEAgLTk5LDYgKzk5LDcgQEAgQ29tcGxldGUgbGlzdCBvZiB1c2Fi bGUgc2dtbCBzb3VyY2UgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuCiA8IUVOVElUWSBjcmVhdGVU eXBlICAgICAgICAgU1lTVEVNICJjcmVhdGVfdHlwZS5zZ21sIj4KIDwhRU5USVRZIGNyZWF0ZVVz ZXIgICAgICAgICBTWVNURU0gImNyZWF0ZV91c2VyLnNnbWwiPgogPCFFTlRJVFkgY3JlYXRlVXNl ck1hcHBpbmcgIFNZU1RFTSAiY3JlYXRlX3VzZXJfbWFwcGluZy5zZ21sIj4KKzwhRU5USVRZIGNy ZWF0ZVZhcmlhYmxlICAgICBTWVNURU0gImNyZWF0ZV92YXJpYWJsZS5zZ21sIj4KIDwhRU5USVRZ IGNyZWF0ZVZpZXcgICAgICAgICBTWVNURU0gImNyZWF0ZV92aWV3LnNnbWwiPgogPCFFTlRJVFkg ZGVhbGxvY2F0ZSAgICAgICAgIFNZU1RFTSAiZGVhbGxvY2F0ZS5zZ21sIj4KIDwhRU5USVRZIGRl Y2xhcmUgICAgICAgICAgICBTWVNURU0gImRlY2xhcmUuc2dtbCI+CkBAIC0xNDcsNiArMTQ4LDcg QEAgQ29tcGxldGUgbGlzdCBvZiB1c2FibGUgc2dtbCBzb3VyY2UgZmlsZXMgaW4gdGhpcyBkaXJl Y3RvcnkuCiA8IUVOVElUWSBkcm9wVHlwZSAgICAgICAgICAgU1lTVEVNICJkcm9wX3R5cGUuc2dt bCI+CiA8IUVOVElUWSBkcm9wVXNlciAgICAgICAgICAgU1lTVEVNICJkcm9wX3VzZXIuc2dtbCI+ CiA8IUVOVElUWSBkcm9wVXNlck1hcHBpbmcgICAgU1lTVEVNICJkcm9wX3VzZXJfbWFwcGluZy5z Z21sIj4KKzwhRU5USVRZIGRyb3BWYXJpYWJsZSAgICAgICBTWVNURU0gImRyb3BfdmFyaWFibGUu c2dtbCI+CiA8IUVOVElUWSBkcm9wVmlldyAgICAgICAgICAgU1lTVEVNICJkcm9wX3ZpZXcuc2dt bCI+CiA8IUVOVElUWSBlbmQgICAgICAgICAgICAgICAgU1lTVEVNICJlbmQuc2dtbCI+CiA8IUVO VElUWSBleGVjdXRlICAgICAgICAgICAgU1lTVEVNICJleGVjdXRlLnNnbWwiPgpAQCAtMTU1LDYg KzE1Nyw3IEBAIENvbXBsZXRlIGxpc3Qgb2YgdXNhYmxlIHNnbWwgc291cmNlIGZpbGVzIGluIHRo aXMgZGlyZWN0b3J5LgogPCFFTlRJVFkgZ3JhbnQgICAgICAgICAgICAgIFNZU1RFTSAiZ3JhbnQu c2dtbCI+CiA8IUVOVElUWSBpbXBvcnRGb3JlaWduU2NoZW1hIFNZU1RFTSAiaW1wb3J0X2ZvcmVp Z25fc2NoZW1hLnNnbWwiPgogPCFFTlRJVFkgaW5zZXJ0ICAgICAgICAgICAgIFNZU1RFTSAiaW5z ZXJ0LnNnbWwiPgorPCFFTlRJVFkgbGV0ICAgICAgICAgICAgICAgIFNZU1RFTSAibGV0LnNnbWwi PgogPCFFTlRJVFkgbGlzdGVuICAgICAgICAgICAgIFNZU1RFTSAibGlzdGVuLnNnbWwiPgogPCFF TlRJVFkgbG9hZCAgICAgICAgICAgICAgIFNZU1RFTSAibG9hZC5zZ21sIj4KIDwhRU5USVRZIGxv Y2sgICAgICAgICAgICAgICBTWVNURU0gImxvY2suc2dtbCI+CmRpZmYgLS1naXQgYS9kb2Mvc3Jj L3NnbWwvcmVmL2NyZWF0ZV92YXJpYWJsZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVf dmFyaWFibGUuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4wMjA1 ZTQzNjVhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdmFyaWFi bGUuc2dtbApAQCAtMCwwICsxLDE0OSBAQAorPCEtLQorZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVf dmFyaWFibGUuc2dtbAorUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCistLT4KKworPHJlZmVudHJ5 IGlkPSJzcWwtY3JlYXRldmFyaWFibGUiPgorIDxpbmRleHRlcm0gem9uZT0ic3FsLWNyZWF0ZXZh cmlhYmxlIj4KKyAgPHByaW1hcnk+Q1JFQVRFIFZBUklBQkxFPC9wcmltYXJ5PgorIDwvaW5kZXh0 ZXJtPgorCisgPHJlZm1ldGE+CisgIDxyZWZlbnRyeXRpdGxlPkNSRUFURSBWQVJJQUJMRTwvcmVm ZW50cnl0aXRsZT4KKyAgPG1hbnZvbG51bT43PC9tYW52b2xudW0+CisgIDxyZWZtaXNjaW5mbz5T UUwgLSBMYW5ndWFnZSBTdGF0ZW1lbnRzPC9yZWZtaXNjaW5mbz4KKyA8L3JlZm1ldGE+CisKKyA8 cmVmbmFtZWRpdj4KKyAgPHJlZm5hbWU+Q1JFQVRFIFZBUklBQkxFPC9yZWZuYW1lPgorICA8cmVm cHVycG9zZT5kZWZpbmUgYSBuZXcgcGVybWlzc2lvbmVkIHR5cGVkIHNjaGVtYSB2YXJpYWJsZTwv cmVmcHVycG9zZT4KKyA8L3JlZm5hbWVkaXY+CisKKyA8cmVmc3lub3BzaXNkaXY+Cis8c3lub3Bz aXM+CitDUkVBVEUgVkFSSUFCTEUgWyBJRiBOT1QgRVhJU1RTIF0gPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBbIEFTIF0gPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPmRhdGFfdHlwZTwvcmVwbGFjZWFibGU+IF0KKzwvc3lub3BzaXM+CisgPC9y ZWZzeW5vcHNpc2Rpdj4KKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+ CisKKyAgPHBhcmE+CisgICA8Y29tbWFuZD5DUkVBVEUgVkFSSUFCTEU8L2NvbW1hbmQ+IGNyZWF0 ZXMgYSBuZXcgc2NoZW1hIHZhcmlhYmxlLgorICAgVGhlc2UgdmFyaWFibGVzIGFyZSBzY2FsYXIg dHlwZWQsIG5vbi10cmFuc2FjdGlvbmFsLCBhbmQsIGxpa2UgcmVsYXRpb25zLAorICAgZXhpc3Qg d2l0aGluIGEgc2NoZW1hIHdpdGggYWNjZXNzIGNvbnRyb2xsZWQgdmlhCisgICA8Y29tbWFuZD5H UkFOVDwvY29tbWFuZD4gYW5kIDxjb21tYW5kPlJFVk9LRTwvY29tbWFuZD4uCisgIDwvcGFyYT4K KworICA8cGFyYT4KKyAgIFRoZSB2YWx1ZSBvZiBhIHNjaGVtYSB2YXJpYWJsZSBpcyBzZXNzaW9u LWxvY2FsLiBSZXRyaWV2aW5nCisgICBhIHZhcmlhYmxlJ3MgdmFsdWUgd2lsbCByZXR1cm4gTlVM TCB1bmxlc3MgaXRzIHZhbHVlIGhhcyBiZWVuIHNldAorICAgdG8gc29tZXRoaW5nIGVsc2UgaW4g dGhlIGN1cnJlbnQgc2Vzc2lvbi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgUmV0cmlldmFs IGlzIGRvbmUgdmlhIHRoZSA8ZnVuY3Rpb24+Z2V0X3NjaGVtYV92YXJpYWJsZTwvZnVuY3Rpb24+ ZHVueHJpb24gb3IgdGhlIFNRTAorICAgY29tbWFuZCA8Y29tbWFuZD5TRUxFQ1Q8L2NvbW1hbmQ+ LiAgU2V0dGluZyBvZiB2YWx1ZXMgaXMgZG9uZSB2aWEgdGhlCisgICA8ZnVuY3Rpb24+c2V0X3Nj aGVtYV92YXJpYWJsZTwvZnVuY3Rpb24+IGZ1bmN0aW9uIG9yIHRoZSBTUUwgY29tbWFuZAorICAg PGNvbW1hbmQ+TEVUPC9jb21tYW5kPi4KKyAgIE5vdGFibHksIHdoaWxlIHNjaGVtYSB2YXJpYWJs ZXMgYXJlIGluIG1hbnkgd2F5cyBhIGtpbmQgb2YgdGFibGUgeW91IGNhbm5vdCB1c2UKKyAgIDxj b21tYW5kPlVQREFURTwvY29tbWFuZD4gb24gdGhlbS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgor ICAgRm9yIHB1cnBvc2VzIG9mIG5hbWUgdW5pcXVlbmVzcyByZWxhdGlvbi1saWtlIG9iamVjdHMg KGUuZy4sIHRhYmxlcywgaW5kZXhlcykKKyAgIHdpdGhpbiB0aGUgc2FtZSBzY2hlbWEgYXJlIGNv bnNpZGVyZWQuICBpLmUuLCB5b3UgY2Fubm90IGdpdmUgYSB0YWJsZSBhbmQgYQorICAgc2NoZW1h IHZhcmlhYmxlIHRoZSBzYW1lIG5hbWUuICBUaGlzIGlzIGEgY29uc2VxdWVuY2Ugb2YgdGhlbSBi ZWluZyB0cmVhdGVkCisgICBsaWtlIHJlbGF0aW9ucyBmb3IgcHVycG9zZXMgb2YgPGNvbW1hbmQ+ U0VMRUNUPC9jb21tYW5kPi4KKyAgPC9wYXJhPgorIDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+ CisgIDx0aXRsZT5QYXJhbWV0ZXJzPC90aXRsZT4KKworICA8dmFyaWFibGVsaXN0PgorICAgPHZh cmxpc3RlbnRyeT4KKyAgICA8dGVybT48bGl0ZXJhbD5JRiBOT1QgRVhJU1RTPC9saXRlcmFsPjwv dGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgRG8gbm90IHRocm93IGFu IGVycm9yIGlmIHRoZSBuYW1lIGFscmVhZHkgZXhpc3RzLiBBIG5vdGljZSBpcyBpc3N1ZWQgaW4g dGhpcyBjYXNlLgorICAgICAgTm90ZSB0aGF0IHR5cGUgb2YgdGhlIHZhcmlhYmxlIGlzIG5vdCBj b25zaWRlcmVkLCBub3IgY291bGQgaXQgYmUgc2luY2UgdGhlIG5hbWVzcGFjZQorICAgICAgc2Vh cmNoZWQgY29udGFpbnMgbm9uLXZhcmlhYmxlIG9iamVjdHMuCisgICAgIDwvcGFyYT4KKyAgICA8 L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAg PHRlcm0+PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPjwv dGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgVGhlIG5hbWUgKG9wdGlv bmFsbHkgc2NoZW1hLXF1YWxpZmllZCkgb2YgdGhlIHZhcmlhYmxlIHRvIGJlIGNyZWF0ZWQuCisg ICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2 YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmRh dGFfdHlwZTwvcmVwbGFjZWFibGU+PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+ CisgICAgICBUaGUgbmFtZSAob3B0aW9uYWxseSBzY2hlbWEtcXVhbGlmaWVkKSBvZiB0aGUgZGF0 YSB0eXBlIG9mIHRoZSB2YXJpYWJsZSB0byBiZSBjcmVhdGVkLgorICAgICA8L3BhcmE+CisgICAg PC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorICA8L3ZhcmlhYmxlbGlzdD4KKyA8L3Jl ZnNlY3QxPgorCisgPHJlZnNlY3QxPgorICA8dGl0bGU+Tm90ZXM8L3RpdGxlPgorCisgIDxwYXJh PgorICAgVXNlIDxjb21tYW5kPkRST1AgVkFSSUFCTEU8L2NvbW1hbmQ+IHRvIHJlbW92ZSBhIHZh cmlhYmxlLgorICA8L3BhcmE+CisgPC9yZWZzZWN0MT4KKworIDxyZWZzZWN0MT4KKyAgPHRpdGxl PkV4YW1wbGVzPC90aXRsZT4KKworICA8cGFyYT4KKyAgIENyZWF0ZSBhbiBpbnRlZ2VyIHZhcmlh YmxlIDxsaXRlcmFsPnZhcjE8L2xpdGVyYWw+OgorPHByb2dyYW1saXN0aW5nPgorQ1JFQVRFIFZB UklBQkxFIHZhcjEgQVMgaW50ZWdlcjsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgIDwvcGFyYT4KKwor ICA8cGFyYT4KKyAgIFNldCB0aGlzIHZhcmlhYmxlJ3MgdmFsdWU7IHRoZW4gcmV0cmlldmUgaXQg Y29udmVydGVkIHRvIG51bWVyaWMuCis8cHJvZ3JhbWxpc3Rpbmc+CitDUkVBVEUgVkFSSUFCTEUK K3Bvc3RncmVzPSMgc2VsZWN0IHNldF9zY2hlbWFfdmFyaWFibGUoJ3ZhcjEnLCAxMCk7Cisgc2V0 X3NjaGVtYV92YXJpYWJsZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitw b3N0Z3Jlcz0jIHNlbGVjdCBnZXRfc2NoZW1hX3ZhcmlhYmxlKCd2YXIxJywgbnVsbDo6bnVtZXJp Yyk7CisgZ2V0X3NjaGVtYV92YXJpYWJsZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAg ICAgICAgICAgICAgMTAKKygxIHJvdykKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgIDwvcGFyYT4KKyA8 L3JlZnNlY3QxPgorCisgPHJlZnNlY3QxPgorICA8dGl0bGU+Q29tcGF0aWJpbGl0eTwvdGl0bGU+ CisKKyAgPHBhcmE+CisgICA8Y29tbWFuZD5DUkVBVEUgVkFSSUFCTEU8L2NvbW1hbmQ+IGlzIGEg UG9zdGdyZVNRTCBmZWF0dXJlLgorICAgPCEtLSBUaGUgY2hvaWNlIG9mIHdvcmRpbmcgaGVyZSBz ZWVtcyB0byBiZSBsZWZ0IHRvIHBlcnNvbmFsIHByZWZlcmVuY2UuLi4gLS0+CisgIDwvcGFyYT4K KyA8L3JlZnNlY3QxPgorCisgPHJlZnNlY3QxPgorICA8dGl0bGU+U2VlIEFsc288L3RpdGxlPgor CisgIDxzaW1wbGVsaXN0IHR5cGU9ImlubGluZSI+CisgICA8bWVtYmVyPjx4cmVmIGxpbmtlbmQ9 InNxbC1kcm9wdmFyaWFibGUiLz48L21lbWJlcj4KKyAgPC9zaW1wbGVsaXN0PgorIDwvcmVmc2Vj dDE+CisKKzwvcmVmZW50cnk+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2Rpc2NhcmQu c2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvZGlzY2FyZC5zZ21sCmluZGV4IDZiOTA5YjcyMzIuLjM5 NTQ1M2JiYTAgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvZGlzY2FyZC5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9yZWYvZGlzY2FyZC5zZ21sCkBAIC0yMSw3ICsyMSw3IEBAIFBvc3RncmVT UUwgZG9jdW1lbnRhdGlvbgogCiAgPHJlZnN5bm9wc2lzZGl2PgogPHN5bm9wc2lzPgotRElTQ0FS RCB7IEFMTCB8IFBMQU5TIHwgU0VRVUVOQ0VTIHwgVEVNUE9SQVJZIHwgVEVNUCB9CitESVNDQVJE IHsgQUxMIHwgUExBTlMgfCBTRVFVRU5DRVMgfCBURU1QT1JBUlkgfCBURU1QIHwgVkFSSUFCTEVT fQogPC9zeW5vcHNpcz4KICA8L3JlZnN5bm9wc2lzZGl2PgogCkBAIC03NSw2ICs3NSwxNiBAQCBE SVNDQVJEIHsgQUxMIHwgUExBTlMgfCBTRVFVRU5DRVMgfCBURU1QT1JBUlkgfCBURU1QIH0KICAg ICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgIDx2YXJsaXN0ZW50cnk+Cisg ICAgPHRlcm0+PGxpdGVyYWw+VkFSSUFCTEVTPC9saXRlcmFsPjwvdGVybT4KKyAgICA8bGlzdGl0 ZW0+CisgICAgIDxwYXJhPgorICAgICAgU2V0cyB0aGUgdmFsdWUgb2YgYWxsIHNjaGVtYSB2YXJp YWJsZXMgdG8gTlVMTC4KKyAgICAgIDwhLS0gV2hhdCBoYXBwZW5zIHRvIHRlbXBvcmFyeSBzY2hl bWEgdmFyaWFibGVzIC0tPgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFy bGlzdGVudHJ5PgorCiAgICA8dmFybGlzdGVudHJ5PgogICAgIDx0ZXJtPjxsaXRlcmFsPkFMTDwv bGl0ZXJhbD48L3Rlcm0+CiAgICAgPGxpc3RpdGVtPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L3JlZi9kcm9wX3ZhcmlhYmxlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2Ryb3BfdmFyaWFibGUu c2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4wNjEzMGZkNTEwCi0t LSAvZGV2L251bGwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9kcm9wX3ZhcmlhYmxlLnNnbWwKQEAg LTAsMCArMSw5MiBAQAorPCEtLQorZG9jL3NyYy9zZ21sL3JlZi9kcm9wX3ZhcmlhYmxlLnNnbWwK K1Bvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgorLS0+CisKKzxyZWZlbnRyeSBpZD0ic3FsLWRyb3B2 YXJpYWJsZSI+CisgPGluZGV4dGVybSB6b25lPSJzcWwtZHJvcHZhcmlhYmxlIj4KKyAgPHByaW1h cnk+RFJPUCBWQVJJQUJMRTwvcHJpbWFyeT4KKyA8L2luZGV4dGVybT4KKworIDxyZWZtZXRhPgor ICA8cmVmZW50cnl0aXRsZT5EUk9QIFZBUklBQkxFPC9yZWZlbnRyeXRpdGxlPgorICA8bWFudm9s bnVtPjc8L21hbnZvbG51bT4KKyAgPHJlZm1pc2NpbmZvPlNRTCAtIExhbmd1YWdlIFN0YXRlbWVu dHM8L3JlZm1pc2NpbmZvPgorIDwvcmVmbWV0YT4KKworIDxyZWZuYW1lZGl2PgorICA8cmVmbmFt ZT5EUk9QIFZBUklBQkxFPC9yZWZuYW1lPgorICA8cmVmcHVycG9zZT5yZW1vdmUgYSBzY2hlbWEg dmFyaWFibGU8L3JlZnB1cnBvc2U+CisgPC9yZWZuYW1lZGl2PgorCisgPHJlZnN5bm9wc2lzZGl2 PgorPHN5bm9wc2lzPgorRFJPUCBWQVJJQUJMRSBbIElGIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4gWywgLi4uXSBbIENBU0NBREUgfCBS RVNUUklDVCBdCis8L3N5bm9wc2lzPgorIDwvcmVmc3lub3BzaXNkaXY+CisKKyA8cmVmc2VjdDE+ CisgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgPHBhcmE+CisgICA8Y29tbWFuZD5E Uk9QIFZBUklBQkxFPC9jb21tYW5kPiByZW1vdmVzIGEgc2NoZW1hIHZhcmlhYmxlLgorICAgQSB2 YXJpYWJsZSBjYW4gb25seSBiZSBkcm9wcGVkIGJ5IGl0cyBvd25lciBvciBhIHN1cGVydXNlci4K KyAgIDwhLS0gdGhpcyB3b3VsZCBzdWdnZXN0IHRoYXQgd2UgbmVlZCBhbiBhbHRlciB2YXJpYWJs ZSBvd25lciB0byBjb21tYW5kIC0tPgorICA8L3BhcmE+CisgPC9yZWZzZWN0MT4KKworIDxyZWZz ZWN0MT4KKyAgPHRpdGxlPlBhcmFtZXRlcnM8L3RpdGxlPgorCisgIDx2YXJpYWJsZWxpc3Q+Cisg ICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPjxsaXRlcmFsPklGIEVYSVNUUzwvbGl0ZXJhbD48 L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIERvIG5vdCB0aHJvdyBh biBlcnJvciBpZiB0aGUgdmFyaWFibGUgZG9lcyBub3QgZXhpc3QuIEEgbm90aWNlIGlzIGlzc3Vl ZAorICAgICAgaW4gdGhpcyBjYXNlLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAg IDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPjxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT48L3Rlcm0+CisgICAgPGxp c3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFRoZSBuYW1lIChvcHRpb25hbGx5IHNjaGVtYS1x dWFsaWZpZWQpIG9mIGEgc2NoZW1hIHZhcmlhYmxlLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0 aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorICA8L3ZhcmlhYmxlbGlzdD4KKyA8L3JlZnNlY3Qx PgorCisgPHJlZnNlY3QxPgorICA8dGl0bGU+RXhhbXBsZXM8L3RpdGxlPgorCisgIDxwYXJhPgor ICAgVG8gcmVtb3ZlIHRoZSBzY2hlbWEgdmFyaWFibGUgPGxpdGVyYWw+dmFyMTwvbGl0ZXJhbD46 CisKKzxwcm9ncmFtbGlzdGluZz4KK0RST1AgVkFSSUFCTEUgdmFyMTsKKzwvcHJvZ3JhbWxpc3Rp bmc+PC9wYXJhPgorIDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5Db21wYXRp YmlsaXR5PC90aXRsZT4KKworICA8cGFyYT4KKyAgIDxjb21tYW5kPkRST1AgVkFSSUFCTEU8L2Nv bW1hbmQ+IGlzIHByb3ByaWV0YXJ5IFBvc3RncmVTUUwgY29tbWFuZC4KKyAgIDwhLS0gY3JlYXRl IHZhcmlhYmxlIGlzIGEgIlBvc3RncmVTUUwgZmVhdHVyZSIsCisgICAgICAgIHRoaXMgaXMgYSAi cHJvcHJpZXRhcnkgUG9zdGdyZVNRTCBjb21tYW5kIiAuLi4gLS0+CisgIDwvcGFyYT4KKyA8L3Jl ZnNlY3QxPgorCisgPHJlZnNlY3QxPgorICA8dGl0bGU+U2VlIEFsc288L3RpdGxlPgorCisgIDxz aW1wbGVsaXN0IHR5cGU9ImlubGluZSI+CisgICA8bWVtYmVyPjx4cmVmIGxpbmtlbmQ9InNxbC1j cmVhdGV2YXJpYWJsZSIvPjwvbWVtYmVyPgorICA8L3NpbXBsZWxpc3Q+CisgPC9yZWZzZWN0MT4K KworPC9yZWZlbnRyeT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvZ3JhbnQuc2dtbCBi L2RvYy9zcmMvc2dtbC9yZWYvZ3JhbnQuc2dtbAppbmRleCBmZjY0YzdhM2JhLi4wMDYzNjRlYmU1 IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2dyYW50LnNnbWwKKysrIGIvZG9jL3NyYy9z Z21sL3JlZi9ncmFudC5zZ21sCkBAIC03OSw2ICs3OSwxMiBAQCBHUkFOVCB7IFVTQUdFIHwgQUxM IFsgUFJJVklMRUdFUyBdIH0KICAgICBPTiBUWVBFIDxyZXBsYWNlYWJsZT50eXBlX25hbWU8L3Jl cGxhY2VhYmxlPiBbLCAuLi5dCiAgICAgVE8gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PnJvbGVfc3BlY2lmaWNhdGlvbjwvcmVwbGFjZWFibGU+IFssIC4uLl0gWyBXSVRIIEdSQU5UIE9Q VElPTiBdCiAKK0dSQU5UIHsgeyBTRUxFQ1QgfCBVUERBVEUgfQorICAgIFssIC4uLl0gfCBBTEwg WyBQUklWSUxFR0VTIF0gfQorICAgIE9OIHsgVkFSSUFCTEUgPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPnZhcmlhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbLCAuLi5dCisgICAgICAgICB8 IEFMTCBWQVJJQUJMRVMgSU4gU0NIRU1BIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5z Y2hlbWFfbmFtZTwvcmVwbGFjZWFibGU+IFssIC4uLl0gfQorICAgIFRPIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5yb2xlX3NwZWNpZmljYXRpb248L3JlcGxhY2VhYmxlPiBbLCAuLi5d IFsgV0lUSCBHUkFOVCBPUFRJT04gXQorCiA8cGhyYXNlPndoZXJlIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5yb2xlX3NwZWNpZmljYXRpb248L3JlcGxhY2VhYmxlPiBjYW4gYmU6PC9w aHJhc2U+CiAKICAgICBbIEdST1VQIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnJv bGVfbmFtZTwvcmVwbGFjZWFibGU+CkBAIC0xNjcsNiArMTczLDcgQEAgR1JBTlQgPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnJvbGVfbmFtZTwvcmVwbGFjZWFibGU+IFssIC4uLl0gVE8g PHJlcGxhY2UKICAgIGZvcmVpZ24gc2VydmVycywKICAgIGxhcmdlIG9iamVjdHMsCiAgICBzY2hl bWFzLAorICAgc2NoZW1hIHZhcmlhYmxlcywKICAgIG9yIHRhYmxlc3BhY2VzLgogICAgRm9yIG90 aGVyIHR5cGVzIG9mIG9iamVjdHMsIHRoZSBkZWZhdWx0IHByaXZpbGVnZXMKICAgIGdyYW50ZWQg dG8gPGxpdGVyYWw+UFVCTElDPC9saXRlcmFsPiBhcmUgYXMgZm9sbG93czoKQEAgLTIwNCw2ICsy MTEsOCBAQCBHUkFOVCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cm9sZV9uYW1lPC9y ZXBsYWNlYWJsZT4gWywgLi4uXSBUTyA8cmVwbGFjZQogICAgICAgIEZvciBzZXF1ZW5jZXMsIHRo aXMgcHJpdmlsZWdlIGFsc28gYWxsb3dzIHRoZSB1c2Ugb2YgdGhlCiAgICAgICAgPGZ1bmN0aW9u PmN1cnJ2YWw8L2Z1bmN0aW9uPiBmdW5jdGlvbi4KICAgICAgICBGb3IgbGFyZ2Ugb2JqZWN0cywg dGhpcyBwcml2aWxlZ2UgYWxsb3dzIHRoZSBvYmplY3QgdG8gYmUgcmVhZC4KKyAgICAgICBGb3Ig c2NoZW1hIHZhcmlhYmxlcywgdGhpcyBwcml2aWxlZ2UgYWxsb3dzIHRoZSA8ZnVuY3Rpb24+Z2V0 X3NjaGVtYV92YXJpYWJsZTwvZnVuY3Rpb24+CisgICAgICAgdG8gcmVhZCB0aGUgdmFyaWFibGUn cyB2YWx1ZS4KICAgICAgIDwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgICA8L3Zhcmxpc3Rl bnRyeT4KQEAgLTIzOSw2ICsyNDgsOSBAQCBHUkFOVCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+cm9sZV9uYW1lPC9yZXBsYWNlYWJsZT4gWywgLi4uXSBUTyA8cmVwbGFjZQogICAgICAg IDxmdW5jdGlvbj5zZXR2YWw8L2Z1bmN0aW9uPiBmdW5jdGlvbnMuCiAgICAgICAgRm9yIGxhcmdl IG9iamVjdHMsIHRoaXMgcHJpdmlsZWdlIGFsbG93cyB3cml0aW5nIG9yIHRydW5jYXRpbmcgdGhl CiAgICAgICAgb2JqZWN0LgorICAgICAgIEZvciBzY2hlbWEgdmFyaWFibGVzLCB0aGlzIHByaXZp bGVnZSBhbGxvd3MgPGNvbW1hbmQ+TEVUPC9jb21tYW5kPgorICAgICAgIGFuZCA8ZnVuY3Rpb24+ c2V0X3NjaGVtYV92YXJpYWJsZTwvZnVuY3Rpb24+IHRvIG1vZGlmeSB0aGUgc2NoZW1hIHZhcmlh YmxlJ3MKKyAgICAgICB2YWx1ZS4KICAgICAgIDwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAg ICA8L3Zhcmxpc3RlbnRyeT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvbGV0LnNnbWwg Yi9kb2Mvc3JjL3NnbWwvcmVmL2xldC5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAuLmU4YmYzZjZkZDQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVm L2xldC5zZ21sCkBAIC0wLDAgKzEsOTAgQEAKKzwhLS0KK2RvYy9zcmMvc2dtbC9yZWYvbGV0LnNn bWwKK1Bvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgorLS0+CisKKzxyZWZlbnRyeSBpZD0ic3FsLWxl dCI+CisgPGluZGV4dGVybSB6b25lPSJzcWwtbGV0Ij4KKyAgPHByaW1hcnk+TEVUPC9wcmltYXJ5 PgorIDwvaW5kZXh0ZXJtPgorCisgPHJlZm1ldGE+CisgIDxyZWZlbnRyeXRpdGxlPkxFVDwvcmVm ZW50cnl0aXRsZT4KKyAgPG1hbnZvbG51bT43PC9tYW52b2xudW0+CisgIDxyZWZtaXNjaW5mbz5T UUwgLSBMYW5ndWFnZSBTdGF0ZW1lbnRzPC9yZWZtaXNjaW5mbz4KKyA8L3JlZm1ldGE+CisKKyA8 cmVmbmFtZWRpdj4KKyAgPHJlZm5hbWU+TEVUPC9yZWZuYW1lPgorICA8cmVmcHVycG9zZT5jaGFu Z2UgYSBzY2hlbWEgdmFyaWFibGUncyB2YWx1ZTwvcmVmcHVycG9zZT4KKyA8L3JlZm5hbWVkaXY+ CisKKyA8cmVmc3lub3BzaXNkaXY+Cis8c3lub3BzaXM+CitMRVQgPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPnNjaGVtYV92YXJpYWJsZTwvcmVwbGFjZWFibGU+ID0gPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPnNxbF9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4KKzwvc3lub3Bz aXM+CisgPC9yZWZzeW5vcHNpc2Rpdj4KKworIDxyZWZzZWN0MT4KKyAgPHRpdGxlPkRlc2NyaXB0 aW9uPC90aXRsZT4KKworICA8cGFyYT4KKyAgIFRoZSA8Y29tbWFuZD5MRVQ8L2NvbW1hbmQ+IGNv bW1hbmQgdXBkYXRlcyB0aGUgc3BlY2lmaWVkIHNjaGVtYSB2YXJpYWJsZScgdmFsdWUuCisgIDwv cGFyYT4KKworIDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5QYXJhbWV0ZXJz PC90aXRsZT4KKworICA8dmFyaWFibGVsaXN0PgorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVy bT48bGl0ZXJhbD5zY2hlbWFfdmFyaWFibGU8L2xpdGVyYWw+PC90ZXJtPgorICAgIDxsaXN0aXRl bT4KKyAgICAgPHBhcmE+CisgICAgICBUaGUgbmFtZSBvZiBzY2hlbWEgdmFyaWFibGUuCisgICAg IDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJs aXN0ZW50cnk+CisgICAgPHRlcm0+PGxpdGVyYWw+c3FsIGV4cHJlc3Npb248L2xpdGVyYWw+PC90 ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBBbiBTUUwgZXhwcmVzc2lv biwgdGhlIHJlc3VsdCBpcyBjYXN0IHRvIHRoZSBzY2hlbWEgdmFyaWFibGUncyB0eXBlLgorICAg ICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorICA8L3Zhcmlh YmxlbGlzdD4KKworICA8cGFyYT4KKyAgIEV4YW1wbGU6Cis8cHJvZ3JhbWxpc3Rpbmc+CitDUkVB VEUgVkFSSUFCTEUgbXl2YXIgQVMgaW50ZWdlcjsKK0xFVCBteXZhciA9IDEwOworTEVUIG15dmFy ID0gKFNFTEVDVCBzdW0odmFsKSBGUk9NIHRhYik7Cis8L3Byb2dyYW1saXN0aW5nPgorICA8L3Bh cmE+CisgPC9yZWZzZWN0MT4KKworIDxyZWZzZWN0MT4KKyAgPHRpdGxlPkNvbXBhdGliaWxpdHk8 L3RpdGxlPgorCisgIDxwYXJhPgorICAgPCEtLSB0aGlzIGZlZWxzIGxpa2UgaXQgbmVlZHMgdG8g YmUgbW9yZSBzcGVjaWZpYywKKyAgICAgICAgYnV0IEkgZG9uJ3Qga25vdyBlbm91Z2ggdG8gbWFr ZSBpdCBzbyAtLT4KKyAgIDxsaXRlcmFsPkxFVDwvbGl0ZXJhbD4gZXh0ZW5kcyBzeW50YXggZGVm aW5lZCBpbiB0aGUgU1FMCisgICBzdGFuZGFyZC4gVGhlIHN0YW5kYXJkIGtub3dzIDxsaXRlcmFs PlNFVDwvbGl0ZXJhbD4gY29tbWFuZCwKKyAgIHRoYXQgaXMgdXNlZCBmb3IgZGlmZmVyZW50IHB1 cnBvdXNlIGluIFBvc3RncmVTUUwuCisgIDwvcGFyYT4KKyA8L3JlZnNlY3QxPgorCisgPHJlZnNl Y3QxPgorICA8dGl0bGU+U2VlIEFsc288L3RpdGxlPgorCisgIDxzaW1wbGVsaXN0IHR5cGU9Imlu bGluZSI+CisgICA8bWVtYmVyPjx4cmVmIGxpbmtlbmQ9InNxbC1jcmVhdGV2YXJpYWJsZSIvPjwv bWVtYmVyPgorICAgPG1lbWJlcj48eHJlZiBsaW5rZW5kPSJzcWwtZHJvcHZhcmlhYmxlIi8+PC9t ZW1iZXI+CisgIDwvc2ltcGxlbGlzdD4KKyA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KZGlmZiAt LWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcmV2b2tlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3Jl dm9rZS5zZ21sCmluZGV4IDcwMTgyMDJmMTQuLjczNzc4ZjAxZjkgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9yZWYvcmV2b2tlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9yZXZva2Uuc2dt bApAQCAtMTA4LDYgKzEwOCwxNCBAQCBSRVZPS0UgWyBHUkFOVCBPUFRJT04gRk9SIF0KIFJFVk9L RSBbIEFETUlOIE9QVElPTiBGT1IgXQogICAgIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVy Ij5yb2xlX25hbWU8L3JlcGxhY2VhYmxlPiBbLCAuLi5dIEZST00gPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPnJvbGVfbmFtZTwvcmVwbGFjZWFibGU+IFssIC4uLl0KICAgICBbIENBU0NB REUgfCBSRVNUUklDVCBdCisKK1JFVk9LRSBbIEdSQU5UIE9QVElPTiBGT1IgXQorICAgIHsgeyBT RUxFQ1QgfCBVUERBVEUgfQorICAgIFssIC4uLl0gfCBBTEwgWyBQUklWSUxFR0VTIF0gfQorICAg IE9OIHsgVkFSSUFCTEUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnZhcmlhYmxlX25h bWU8L3JlcGxhY2VhYmxlPiBbLCAuLi5dCisgICAgICAgICB8IEFMTCBWQVJJQUJMRVMgSU4gU0NI RU1BIDxyZXBsYWNlYWJsZT5zY2hlbWFfbmFtZTwvcmVwbGFjZWFibGU+IFssIC4uLl0gfQorICAg IEZST00geyBbIEdST1VQIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnJvbGVfbmFt ZTwvcmVwbGFjZWFibGU+IHwgUFVCTElDIH0gWywgLi4uXQorICAgIFsgQ0FTQ0FERSB8IFJFU1RS SUNUIF0KIDwvc3lub3BzaXM+CiAgPC9yZWZzeW5vcHNpc2Rpdj4KIApkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL3JlZmVyZW5jZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZmVyZW5jZS5zZ21sCmlu ZGV4IDczZWYyMTJjMDguLmMzYzVkOWQxMDYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWZl cmVuY2Uuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmZXJlbmNlLnNnbWwKQEAgLTEyNyw2ICsx MjcsNyBAQAogICAgJmNyZWF0ZVR5cGU7CiAgICAmY3JlYXRlVXNlcjsKICAgICZjcmVhdGVVc2Vy TWFwcGluZzsKKyAgICZjcmVhdGVWYXJpYWJsZTsKICAgICZjcmVhdGVWaWV3OwogICAgJmRlYWxs b2NhdGU7CiAgICAmZGVjbGFyZTsKQEAgLTE3NSw2ICsxNzYsNyBAQAogICAgJmRyb3BUeXBlOwog ICAgJmRyb3BVc2VyOwogICAgJmRyb3BVc2VyTWFwcGluZzsKKyAgICZkcm9wVmFyaWFibGU7CiAg ICAmZHJvcFZpZXc7CiAgICAmZW5kOwogICAgJmV4ZWN1dGU7CkBAIC0xODMsNiArMTg1LDcgQEAK ICAgICZncmFudDsKICAgICZpbXBvcnRGb3JlaWduU2NoZW1hOwogICAgJmluc2VydDsKKyAgICZs ZXQ7CiAgICAmbGlzdGVuOwogICAgJmxvYWQ7CiAgICAmbG9jazsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jCmlu ZGV4IDBhY2UxOTY4ZGYuLmMwZTVlY2IzZTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFs b2cvYWNsY2hrLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYwpAQCAtMjg0LDYg KzI4NCw5IEBAIHJlc3RyaWN0X2FuZF9jaGVja19ncmFudChib29sIGlzX2dyYW50LCBBY2xNb2Rl IGF2YWlsX2dvcHRpb25zLCBib29sIGFsbF9wcml2cywKIAkJY2FzZSBPQkpFQ1RfVFlQRToKIAkJ CXdob2xlX21hc2sgPSBBQ0xfQUxMX1JJR0hUU19UWVBFOwogCQkJYnJlYWs7CisJCWNhc2UgT0JK RUNUX1ZBUklBQkxFOgorCQkJd2hvbGVfbWFzayA9IEFDTF9BTExfUklHSFRTX1ZBUklBQkxFOwor CQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIG9iamVj dCB0eXBlOiAlZCIsIG9ianR5cGUpOwogCQkJLyogbm90IHJlYWNoZWQsIGJ1dCBrZWVwIGNvbXBp bGVyIHF1aWV0ICovCkBAIC01MDYsNiArNTA5LDEwIEBAIEV4ZWN1dGVHcmFudFN0bXQoR3JhbnRT dG10ICpzdG10KQogCQkJYWxsX3ByaXZpbGVnZXMgPSBBQ0xfQUxMX1JJR0hUU19GT1JFSUdOX1NF UlZFUjsKIAkJCWVycm9ybXNnID0gZ2V0dGV4dF9ub29wKCJpbnZhbGlkIHByaXZpbGVnZSB0eXBl ICVzIGZvciBmb3JlaWduIHNlcnZlciIpOwogCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX1ZBUklB QkxFOgorCQkJYWxsX3ByaXZpbGVnZXMgPSBBQ0xfQUxMX1JJR0hUU19WQVJJQUJMRTsKKwkJCWVy cm9ybXNnID0gZ2V0dGV4dF9ub29wKCJpbnZhbGlkIHByaXZpbGVnZSB0eXBlICVzIGZvciBzY2hl bWEgdmFyaWFibGUiKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVu cmVjb2duaXplZCBHcmFudFN0bXQub2JqdHlwZTogJWQiLAogCQkJCSAoaW50KSBzdG10LT5vYmp0 eXBlKTsKQEAgLTU3Niw2ICs1ODMsNyBAQCBFeGVjR3JhbnRTdG10X29pZHMoSW50ZXJuYWxHcmFu dCAqaXN0bXQpCiAJewogCQljYXNlIE9CSkVDVF9UQUJMRToKIAkJY2FzZSBPQkpFQ1RfU0VRVUVO Q0U6CisJCWNhc2UgT0JKRUNUX1ZBUklBQkxFOgogCQkJRXhlY0dyYW50X1JlbGF0aW9uKGlzdG10 KTsKIAkJCWJyZWFrOwogCQljYXNlIE9CSkVDVF9EQVRBQkFTRToKQEAgLTY0NSw2ICs2NTMsNyBA QCBvYmplY3ROYW1lc1RvT2lkcyhPYmplY3RUeXBlIG9ianR5cGUsIExpc3QgKm9iam5hbWVzKQog CXsKIAkJY2FzZSBPQkpFQ1RfVEFCTEU6CiAJCWNhc2UgT0JKRUNUX1NFUVVFTkNFOgorCQljYXNl IE9CSkVDVF9WQVJJQUJMRToKIAkJCWZvcmVhY2goY2VsbCwgb2JqbmFtZXMpCiAJCQl7CiAJCQkJ UmFuZ2VWYXIgICAqcmVsdmFyID0gKFJhbmdlVmFyICopIGxmaXJzdChjZWxsKTsKQEAgLTEwMTcs NiArMTAyNiwxMCBAQCBFeGVjQWx0ZXJEZWZhdWx0UHJpdmlsZWdlc1N0bXQoUGFyc2VTdGF0ZSAq cHN0YXRlLCBBbHRlckRlZmF1bHRQcml2aWxlZ2VzU3RtdCAqcwogCQkJYWxsX3ByaXZpbGVnZXMg PSBBQ0xfQUxMX1JJR0hUU19TQ0hFTUE7CiAJCQllcnJvcm1zZyA9IGdldHRleHRfbm9vcCgiaW52 YWxpZCBwcml2aWxlZ2UgdHlwZSAlcyBmb3Igc2NoZW1hIik7CiAJCQlicmVhazsKKwkJY2FzZSBP QkpFQ1RfVkFSSUFCTEU6CisJCQlhbGxfcHJpdmlsZWdlcyA9IEFDTF9BTExfUklHSFRTX1ZBUklB QkxFOworCQkJZXJyb3Jtc2cgPSBnZXR0ZXh0X25vb3AoImludmFsaWQgcHJpdmlsZWdlIHR5cGUg JXMgZm9yIHNjaGVtYSB2YXJpYWJsZSIpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllbG9n KEVSUk9SLCAidW5yZWNvZ25pemVkIEdyYW50U3RtdC5vYmp0eXBlOiAlZCIsCiAJCQkJIChpbnQp IGFjdGlvbi0+b2JqdHlwZSk7CkBAIC0xMjE0LDYgKzEyMjcsMTIgQEAgU2V0RGVmYXVsdEFDTChJ bnRlcm5hbERlZmF1bHRBQ0wgKmlhY2xzKQogCQkJCXRoaXNfcHJpdmlsZWdlcyA9IEFDTF9BTExf UklHSFRTX1NDSEVNQTsKIAkJCWJyZWFrOwogCisJCWNhc2UgT0JKRUNUX1ZBUklBQkxFOgorCQkJ b2JqdHlwZSA9IERFRkFDTE9CSl9WQVJJQUJMRTsKKwkJCWlmIChpYWNscy0+YWxsX3ByaXZzICYm IHRoaXNfcHJpdmlsZWdlcyA9PSBBQ0xfTk9fUklHSFRTKQorCQkJCXRoaXNfcHJpdmlsZWdlcyA9 IEFDTF9BTExfUklHSFRTX1ZBUklBQkxFOworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCWVs b2coRVJST1IsICJ1bnJlY29nbml6ZWQgb2JqdHlwZTogJWQiLAogCQkJCSAoaW50KSBpYWNscy0+ b2JqdHlwZSk7CkBAIC0xNDQwLDYgKzE0NTksOSBAQCBSZW1vdmVSb2xlRnJvbU9iamVjdEFDTChP aWQgcm9sZWlkLCBPaWQgY2xhc3NpZCwgT2lkIG9iamlkKQogCQkJY2FzZSBERUZBQ0xPQkpfTkFN RVNQQUNFOgogCQkJCWlhY2xzLm9ianR5cGUgPSBPQkpFQ1RfU0NIRU1BOwogCQkJCWJyZWFrOwor CQkJY2FzZSBERUZBQ0xPQkpfVkFSSUFCTEU6CisJCQkJaWFjbHMub2JqdHlwZSA9IE9CSkVDVF9W QVJJQUJMRTsKKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJLyogU2hvdWxkbid0IGdldCBo ZXJlICovCiAJCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgZGVmYXVsdCBBQ0wgdHlwZTogJWQi LApAQCAtMTYxMSw4ICsxNjMzLDkgQEAgZXhwYW5kX2FsbF9jb2xfcHJpdmlsZWdlcyhPaWQgdGFi bGVfb2lkLCBGb3JtX3BnX2NsYXNzIGNsYXNzRm9ybSwKIAkJaWYgKGN1cnJfYXR0ID09IE9iamVj dElkQXR0cmlidXRlTnVtYmVyICYmICFjbGFzc0Zvcm0tPnJlbGhhc29pZHMpCiAJCQljb250aW51 ZTsKIAotCQkvKiBWaWV3cyBkb24ndCBoYXZlIGFueSBzeXN0ZW0gY29sdW1ucyBhdCBhbGwgKi8K LQkJaWYgKGNsYXNzRm9ybS0+cmVsa2luZCA9PSBSRUxLSU5EX1ZJRVcgJiYgY3Vycl9hdHQgPCAw KQorCQkvKiBWaWV3cyBhbmQgdmFyaWFibGVzIGRvbid0IGhhdmUgYW55IHN5c3RlbSBjb2x1bW5z IGF0IGFsbCAqLworCQlpZiAoKGNsYXNzRm9ybS0+cmVsa2luZCA9PSBSRUxLSU5EX1ZJRVcgIHx8 IGNsYXNzRm9ybS0+cmVsa2luZCA9PSBSRUxLSU5EX1ZBUklBQkxFKSAmJgorCQkJY3Vycl9hdHQg PCAwKQogCQkJY29udGludWU7CiAKIAkJYXR0VHVwbGUgPSBTZWFyY2hTeXNDYWNoZTIoQVRUTlVN LApAQCAtMzQ1NSw2ICszNDc4LDkgQEAgYWNsY2hlY2tfZXJyb3IoQWNsUmVzdWx0IGFjbGVyciwg T2JqZWN0VHlwZSBvYmp0eXBlLAogCQkJCQljYXNlIE9CSkVDVF9UWVBFOgogCQkJCQkJbXNnID0g Z2V0dGV4dF9ub29wKCJwZXJtaXNzaW9uIGRlbmllZCBmb3IgdHlwZSAlcyIpOwogCQkJCQkJYnJl YWs7CisJCQkJCWNhc2UgT0JKRUNUX1ZBUklBQkxFOgorCQkJCQkJbXNnID0gZ2V0dGV4dF9ub29w KCJwZXJtaXNzaW9uIGRlbmllZCBmb3Igc2NoZW1hIHZhcmlhYmxlICVzIik7CisJCQkJCQlicmVh azsKIAkJCQkJY2FzZSBPQkpFQ1RfVklFVzoKIAkJCQkJCW1zZyA9IGdldHRleHRfbm9vcCgicGVy bWlzc2lvbiBkZW5pZWQgZm9yIHZpZXcgJXMiKTsKIAkJCQkJCWJyZWFrOwpAQCAtMzU2NSw2ICsz NTkxLDkgQEAgYWNsY2hlY2tfZXJyb3IoQWNsUmVzdWx0IGFjbGVyciwgT2JqZWN0VHlwZSBvYmp0 eXBlLAogCQkJCQljYXNlIE9CSkVDVF9UWVBFOgogCQkJCQkJbXNnID0gZ2V0dGV4dF9ub29wKCJt dXN0IGJlIG93bmVyIG9mIHR5cGUgJXMiKTsKIAkJCQkJCWJyZWFrOworCQkJCQljYXNlIE9CSkVD VF9WQVJJQUJMRToKKwkJCQkJCW1zZyA9IGdldHRleHRfbm9vcCgibXVzdCBiZSBvd25lciBvZiBz Y2hlbWEgdmFyaWFibGUgJXMiKTsKKwkJCQkJCWJyZWFrOwogCQkJCQljYXNlIE9CSkVDVF9WSUVX OgogCQkJCQkJbXNnID0gZ2V0dGV4dF9ub29wKCJtdXN0IGJlIG93bmVyIG9mIHZpZXcgJXMiKTsK IAkJCQkJCWJyZWFrOwpAQCAtMzY3OSw2ICszNzA4LDcgQEAgcGdfYWNsbWFzayhPYmplY3RUeXBl IG9ianR5cGUsIE9pZCB0YWJsZV9vaWQsIEF0dHJOdW1iZXIgYXR0bnVtLCBPaWQgcm9sZWlkLAog CQkJCXBnX2F0dHJpYnV0ZV9hY2xtYXNrKHRhYmxlX29pZCwgYXR0bnVtLCByb2xlaWQsIG1hc2ss IGhvdyk7CiAJCWNhc2UgT0JKRUNUX1RBQkxFOgogCQljYXNlIE9CSkVDVF9TRVFVRU5DRToKKwkJ Y2FzZSBPQkpFQ1RfVkFSSUFCTEU6CiAJCQlyZXR1cm4gcGdfY2xhc3NfYWNsbWFzayh0YWJsZV9v aWQsIHJvbGVpZCwgbWFzaywgaG93KTsKIAkJY2FzZSBPQkpFQ1RfREFUQUJBU0U6CiAJCQlyZXR1 cm4gcGdfZGF0YWJhc2VfYWNsbWFzayh0YWJsZV9vaWQsIHJvbGVpZCwgbWFzaywgaG93KTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaGVhcC5jIGIvc3JjL2JhY2tlbmQvY2F0YWxv Zy9oZWFwLmMKaW5kZXggMzk4MTNkZTk5MS4uZjFhY2MwYWE3MCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9oZWFwLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9oZWFwLmMKQEAg LTI5NCw2ICsyOTQsNyBAQCBoZWFwX2NyZWF0ZShjb25zdCBjaGFyICpyZWxuYW1lLAogCXN3aXRj aCAocmVsa2luZCkKIAl7CiAJCWNhc2UgUkVMS0lORF9WSUVXOgorCQljYXNlIFJFTEtJTkRfVkFS SUFCTEU6CiAJCWNhc2UgUkVMS0lORF9DT01QT1NJVEVfVFlQRToKIAkJY2FzZSBSRUxLSU5EX0ZP UkVJR05fVEFCTEU6CiAJCWNhc2UgUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRToKQEAgLTQzMSw3 ICs0MzIsOCBAQCBDaGVja0F0dHJpYnV0ZU5hbWVzVHlwZXMoVHVwbGVEZXNjIHR1cGRlc2MsIGNo YXIgcmVsa2luZCwKIAkgKiBTa2lwIHRoaXMgZm9yIGEgdmlldyBvciB0eXBlIHJlbGF0aW9uLCBz aW5jZSB0aG9zZSBkb24ndCBoYXZlIHN5c3RlbQogCSAqIGF0dHJpYnV0ZXMuCiAJICovCi0JaWYg KHJlbGtpbmQgIT0gUkVMS0lORF9WSUVXICYmIHJlbGtpbmQgIT0gUkVMS0lORF9DT01QT1NJVEVf VFlQRSkKKwlpZiAocmVsa2luZCAhPSBSRUxLSU5EX1ZJRVcgJiYgcmVsa2luZCAhPSBSRUxLSU5E X0NPTVBPU0lURV9UWVBFICYmCisJCXJlbGtpbmQgIT0gUkVMS0lORF9WQVJJQUJMRSkKIAl7CiAJ CWZvciAoaSA9IDA7IGkgPCBuYXR0czsgaSsrKQogCQl7CkBAIC03MjAsNyArNzIyLDggQEAgQWRk TmV3QXR0cmlidXRlVHVwbGVzKE9pZCBuZXdfcmVsX29pZCwKIAkgKiBhbGwgZm9yIGEgdmlldyBv ciB0eXBlIHJlbGF0aW9uLiAgV2UgZG9uJ3QgYm90aGVyIHdpdGggbWFraW5nIGRhdGF0eXBlCiAJ ICogZGVwZW5kZW5jaWVzIGhlcmUsIHNpbmNlIHByZXN1bWFibHkgYWxsIHRoZXNlIHR5cGVzIGFy ZSBwaW5uZWQuCiAJICovCi0JaWYgKHJlbGtpbmQgIT0gUkVMS0lORF9WSUVXICYmIHJlbGtpbmQg IT0gUkVMS0lORF9DT01QT1NJVEVfVFlQRSkKKwlpZiAocmVsa2luZCAhPSBSRUxLSU5EX1ZJRVcg JiYgcmVsa2luZCAhPSBSRUxLSU5EX0NPTVBPU0lURV9UWVBFICYmCisJCXJlbGtpbmQgIT0gUkVM S0lORF9WQVJJQUJMRSkKIAl7CiAJCWZvciAoaSA9IDA7IGkgPCAoaW50KSBsZW5ndGhvZihTeXNB dHQpOyBpKyspCiAJCXsKQEAgLTEwNzMsNyArMTA3Niw5IEBAIGhlYXBfY3JlYXRlX3dpdGhfY2F0 YWxvZyhjb25zdCBjaGFyICpyZWxuYW1lLAogCWlmIChleGlzdGluZ19yZWxpZCAhPSBJbnZhbGlk T2lkKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfRFVQTElDQVRFX1RB QkxFKSwKLQkJCQkgZXJybXNnKCJyZWxhdGlvbiBcIiVzXCIgYWxyZWFkeSBleGlzdHMiLCByZWxu YW1lKSkpOworCQkJCSBlcnJtc2coIiVzIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIsCisJCQkJCQly ZWxraW5kID09IFJFTEtJTkRfVkFSSUFCTEUgPyAidmFyaWFibGUiIDogInJlbGF0aW9uIiwKKwkJ CQkJCXJlbG5hbWUpKSk7CiAKIAkvKgogCSAqIFNpbmNlIHdlIGFyZSBnb2luZyB0byBjcmVhdGUg YSByb3d0eXBlIGFzIHdlbGwsIGFsc28gY2hlY2sgZm9yCkBAIC0xMTE0LDcgKzExMTksNyBAQCBo ZWFwX2NyZWF0ZV93aXRoX2NhdGFsb2coY29uc3QgY2hhciAqcmVsbmFtZSwKIAkJCShyZWxraW5k ID09IFJFTEtJTkRfUkVMQVRJT04gfHwgcmVsa2luZCA9PSBSRUxLSU5EX1NFUVVFTkNFIHx8CiAJ CQkgcmVsa2luZCA9PSBSRUxLSU5EX1ZJRVcgfHwgcmVsa2luZCA9PSBSRUxLSU5EX01BVFZJRVcg fHwKIAkJCSByZWxraW5kID09IFJFTEtJTkRfQ09NUE9TSVRFX1RZUEUgfHwgcmVsa2luZCA9PSBS RUxLSU5EX0ZPUkVJR05fVEFCTEUgfHwKLQkJCSByZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9O RURfVEFCTEUpKQorCQkJIHJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSB8fCBy ZWxraW5kID09IFJFTEtJTkRfVkFSSUFCTEUpKQogCQl7CiAJCQlpZiAoIU9pZElzVmFsaWQoYmlu YXJ5X3VwZ3JhZGVfbmV4dF9oZWFwX3BnX2NsYXNzX29pZCkpCiAJCQkJZXJlcG9ydChFUlJPUiwK QEAgLTExNTYsNiArMTE2MSwxMCBAQCBoZWFwX2NyZWF0ZV93aXRoX2NhdGFsb2coY29uc3QgY2hh ciAqcmVsbmFtZSwKIAkJCQlyZWxhY2wgPSBnZXRfdXNlcl9kZWZhdWx0X2FjbChPQkpFQ1RfU0VR VUVOQ0UsIG93bmVyaWQsCiAJCQkJCQkJCQkJCSAgcmVsbmFtZXNwYWNlKTsKIAkJCQlicmVhazsK KwkJCWNhc2UgUkVMS0lORF9WQVJJQUJMRToKKwkJCQlyZWxhY2wgPSBnZXRfdXNlcl9kZWZhdWx0 X2FjbChPQkpFQ1RfVkFSSUFCTEUsIG93bmVyaWQsCisJCQkJCQkJCQkJCSAgcmVsbmFtZXNwYWNl KTsKKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJcmVsYWNsID0gTlVMTDsKIAkJCQlicmVh azsKQEAgLTExODksMTQgKzExOTgsMTYgQEAgaGVhcF9jcmVhdGVfd2l0aF9jYXRhbG9nKGNvbnN0 IGNoYXIgKnJlbG5hbWUsCiAJICogRGVjaWRlIHdoZXRoZXIgdG8gY3JlYXRlIGFuIGFycmF5IHR5 cGUgb3ZlciB0aGUgcmVsYXRpb24ncyByb3d0eXBlLiBXZQogCSAqIGRvIG5vdCBjcmVhdGUgYW55 IGFycmF5IHR5cGVzIGZvciBzeXN0ZW0gY2F0YWxvZ3MgKGllLCB0aG9zZSBtYWRlCiAJICogZHVy aW5nIGluaXRkYikuIFdlIGRvIG5vdCBjcmVhdGUgdGhlbSB3aGVyZSB0aGUgdXNlIG9mIGEgcmVs YXRpb24gYXMKLQkgKiBzdWNoIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbDogdG9hc3QgdGFi bGVzLCBzZXF1ZW5jZXMgYW5kIGluZGV4ZXMuCisJICogc3VjaCBpcyBhbiBpbXBsZW1lbnRhdGlv biBkZXRhaWw6IHRvYXN0IHRhYmxlcywgc2VxdWVuY2VzLCBpbmRleGVzIGFuZAorCSAqIHZhcmlh Ymxlcy4KIAkgKi8KIAlpZiAoSXNVbmRlclBvc3RtYXN0ZXIgJiYgKHJlbGtpbmQgPT0gUkVMS0lO RF9SRUxBVElPTiB8fAogCQkJCQkJCSAgcmVsa2luZCA9PSBSRUxLSU5EX1ZJRVcgfHwKIAkJCQkJ CQkgIHJlbGtpbmQgPT0gUkVMS0lORF9NQVRWSUVXIHx8CiAJCQkJCQkJICByZWxraW5kID09IFJF TEtJTkRfRk9SRUlHTl9UQUJMRSB8fAogCQkJCQkJCSAgcmVsa2luZCA9PSBSRUxLSU5EX0NPTVBP U0lURV9UWVBFIHx8Ci0JCQkJCQkJICByZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFC TEUpKQorCQkJCQkJCSAgcmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFIHx8CisJ CQkJCQkJICByZWxraW5kID09IFJFTEtJTkRfVkFSSUFCTEUpKQogCQluZXdfYXJyYXlfb2lkID0g QXNzaWduVHlwZUFycmF5T2lkKCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0 YWxvZy9vYmplY3RhZGRyZXNzLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJlc3Mu YwppbmRleCAzY2JlZTEwOGMzLi5iNDFhMDI5YzgxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j YXRhbG9nL29iamVjdGFkZHJlc3MuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFk ZHJlc3MuYwpAQCAtNTE5LDYgKzUxOSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2JqZWN0X3R5 cGVfbWFwCiAJewogCQkic2VxdWVuY2UiLCBPQkpFQ1RfU0VRVUVOQ0UKIAl9LAorCXsKKwkJInZh cmlhYmxlIiwgT0JKRUNUX1ZBUklBQkxFCisJfSwKIAl7CiAJCSJ0b2FzdCB0YWJsZSIsIC0xCiAJ fSwJCQkJCQkJLyogdW5tYXBwZWQgKi8KQEAgLTgyMyw2ICs4MjYsNyBAQCBnZXRfb2JqZWN0X2Fk ZHJlc3MoT2JqZWN0VHlwZSBvYmp0eXBlLCBOb2RlICpvYmplY3QsCiAJCQljYXNlIE9CSkVDVF9W SUVXOgogCQkJY2FzZSBPQkpFQ1RfTUFUVklFVzoKIAkJCWNhc2UgT0JKRUNUX0ZPUkVJR05fVEFC TEU6CisJCQljYXNlIE9CSkVDVF9WQVJJQUJMRToKIAkJCQlhZGRyZXNzID0KIAkJCQkJZ2V0X3Jl bGF0aW9uX2J5X3F1YWxpZmllZF9uYW1lKG9ianR5cGUsIGNhc3ROb2RlKExpc3QsIG9iamVjdCks CiAJCQkJCQkJCQkJCQkgICAmcmVsYXRpb24sIGxvY2ttb2RlLApAQCAtMTI1OSw2ICsxMjYzLDE0 IEBAIGdldF9yZWxhdGlvbl9ieV9xdWFsaWZpZWRfbmFtZShPYmplY3RUeXBlIG9ianR5cGUsIExp c3QgKm9iamVjdCwKIAkJCQkJCSBlcnJtc2coIlwiJXNcIiBpcyBub3QgYSBmb3JlaWduIHRhYmxl IiwKIAkJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKSkpOwogCQkJYnJl YWs7CisJCWNhc2UgT0JKRUNUX1ZBUklBQkxFOgorCQkJaWYgKHJlbGF0aW9uLT5yZF9yZWwtPnJl bGtpbmQgIT0gUkVMS0lORF9WQVJJQUJMRSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCisJCQkJCQkgZXJybXNnKCJcIiVzXCIg aXMgbm90IGEgc2NoZW1hIHZhcmlhYmxlIiwKKwkJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5h bWUocmVsYXRpb24pKSkpOworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1Is ICJ1bnJlY29nbml6ZWQgb2JqdHlwZTogJWQiLCAoaW50KSBvYmp0eXBlKTsKIAkJCWJyZWFrOwpA QCAtMTg0OCw2ICsxODYwLDggQEAgZ2V0X29iamVjdF9hZGRyZXNzX2RlZmFjbChMaXN0ICpvYmpl Y3QsIGJvb2wgbWlzc2luZ19vaykKIAkJY2FzZSBERUZBQ0xPQkpfTkFNRVNQQUNFOgogCQkJb2Jq dHlwZV9zdHIgPSAic2NoZW1hcyI7CiAJCQlicmVhazsKKwkJY2FzZSBERUZBQ0xPQkpfVkFSSUFC TEU6CisJCQlvYmp0eXBlX3N0ciA9ICJ2YXJpYWJsZXMiOwogCQlkZWZhdWx0OgogCQkJZXJlcG9y dChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSks CkBAIC0yMTEwLDYgKzIxMjQsNyBAQCBwZ19nZXRfb2JqZWN0X2FkZHJlc3MoUEdfRlVOQ1RJT05f QVJHUykKIAl7CiAJCWNhc2UgT0JKRUNUX1RBQkxFOgogCQljYXNlIE9CSkVDVF9TRVFVRU5DRToK KwkJY2FzZSBPQkpFQ1RfVkFSSUFCTEU6CiAJCWNhc2UgT0JKRUNUX1ZJRVc6CiAJCWNhc2UgT0JK RUNUX01BVFZJRVc6CiAJCWNhc2UgT0JKRUNUX0lOREVYOgpAQCAtMjIzNCw2ICsyMjQ5LDcgQEAg Y2hlY2tfb2JqZWN0X293bmVyc2hpcChPaWQgcm9sZWlkLCBPYmplY3RUeXBlIG9ianR5cGUsIE9i amVjdEFkZHJlc3MgYWRkcmVzcywKIAkJY2FzZSBPQkpFQ1RfSU5ERVg6CiAJCWNhc2UgT0JKRUNU X1NFUVVFTkNFOgogCQljYXNlIE9CSkVDVF9UQUJMRToKKwkJY2FzZSBPQkpFQ1RfVkFSSUFCTEU6 CiAJCWNhc2UgT0JKRUNUX1ZJRVc6CiAJCWNhc2UgT0JKRUNUX01BVFZJRVc6CiAJCWNhc2UgT0JK RUNUX0ZPUkVJR05fVEFCTEU6CkBAIC0zMzAxLDYgKzMzMTcsMTEgQEAgZ2V0T2JqZWN0RGVzY3Jp cHRpb24oY29uc3QgT2JqZWN0QWRkcmVzcyAqb2JqZWN0KQogCQkJCQkJCQkJCSBfKCJkZWZhdWx0 IHByaXZpbGVnZXMgb24gbmV3IHNjaGVtYXMgYmVsb25naW5nIHRvIHJvbGUgJXMiKSwKIAkJCQkJ CQkJCQkgR2V0VXNlck5hbWVGcm9tSWQoZGVmYWNsLT5kZWZhY2xyb2xlLCBmYWxzZSkpOwogCQkJ CQkJYnJlYWs7CisJCQkJCWNhc2UgREVGQUNMT0JKX1ZBUklBQkxFOgorCQkJCQkJYXBwZW5kU3Ry aW5nSW5mbygmYnVmZmVyLAorCQkJCQkJCQkJCSBfKCJkZWZhdWx0IHByaXZpbGVnZXMgb24gbmV3 IHNjaGVtYSB2YXJpYWJsZXMgYmVsb25naW5nIHRvIHJvbGUgJXMiKSwKKwkJCQkJCQkJCQkgR2V0 VXNlck5hbWVGcm9tSWQoZGVmYWNsLT5kZWZhY2xyb2xlLCBmYWxzZSkpOworCQkJCQkJYnJlYWs7 CiAJCQkJCWRlZmF1bHQ6CiAJCQkJCQkvKiBzaG91bGRuJ3QgZ2V0IGhlcmUgKi8KIAkJCQkJCWFw cGVuZFN0cmluZ0luZm8oJmJ1ZmZlciwKQEAgLTM1MDQsNiArMzUyNSwxMCBAQCBnZXRSZWxhdGlv bkRlc2NyaXB0aW9uKFN0cmluZ0luZm8gYnVmZmVyLCBPaWQgcmVsaWQpCiAJCQlhcHBlbmRTdHJp bmdJbmZvKGJ1ZmZlciwgXygic2VxdWVuY2UgJXMiKSwKIAkJCQkJCQkgcmVsbmFtZSk7CiAJCQli cmVhazsKKwkJY2FzZSBSRUxLSU5EX1ZBUklBQkxFOgorCQkJYXBwZW5kU3RyaW5nSW5mbyhidWZm ZXIsIF8oInZhcmlhYmxlICVzIiksCisJCQkJCQkJIHJlbG5hbWUpOworCQkJYnJlYWs7CiAJCWNh c2UgUkVMS0lORF9UT0FTVFZBTFVFOgogCQkJYXBwZW5kU3RyaW5nSW5mbyhidWZmZXIsIF8oInRv YXN0IHRhYmxlICVzIiksCiAJCQkJCQkJIHJlbG5hbWUpOwpAQCAtNDgzMiw2ICs0ODU3LDEwIEBA IGdldE9iamVjdElkZW50aXR5UGFydHMoY29uc3QgT2JqZWN0QWRkcmVzcyAqb2JqZWN0LAogCQkJ CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmYnVmZmVyLAogCQkJCQkJCQkJCQkgICAiIG9uIHNj aGVtYXMiKTsKIAkJCQkJCWJyZWFrOworCQkJCQljYXNlIERFRkFDTE9CSl9WQVJJQUJMRToKKwkJ CQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmJ1ZmZlciwKKwkJCQkJCQkJCQkJICAgIiBvbiBz Y2hlbWEgdmFyaWFibGVzIik7CisJCQkJCQlicmVhazsKIAkJCQl9CiAKIAkJCQlpZiAob2JqbmFt ZSkKQEAgLTUxMjQsNiArNTE1Myw4IEBAIGdldF9yZWxraW5kX29ianR5cGUoY2hhciByZWxraW5k KQogCQkJcmV0dXJuIE9CSkVDVF9JTkRFWDsKIAkJY2FzZSBSRUxLSU5EX1NFUVVFTkNFOgogCQkJ cmV0dXJuIE9CSkVDVF9TRVFVRU5DRTsKKwkJY2FzZSBSRUxLSU5EX1ZBUklBQkxFOgorCQkJcmV0 dXJuIE9CSkVDVF9WQVJJQUJMRTsKIAkJY2FzZSBSRUxLSU5EX1ZJRVc6CiAJCQlyZXR1cm4gT0JK RUNUX1ZJRVc7CiAJCWNhc2UgUkVMS0lORF9NQVRWSUVXOgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQppbmRl eCA0YTZjOTllMDkwLi41NzQ3MjcyYzlhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5k cy9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQpAQCAtMTgsNyAr MTgsNyBAQCBPQkpTID0gYW1jbWRzLm8gYWdncmVnYXRlY21kcy5vIGFsdGVyLm8gYW5hbHl6ZS5v IGFzeW5jLm8gY2x1c3Rlci5vIGNvbW1lbnQubyBcCiAJZXZlbnRfdHJpZ2dlci5vIGV4cGxhaW4u byBleHRlbnNpb24ubyBmb3JlaWduY21kcy5vIGZ1bmN0aW9uY21kcy5vIFwKIAlpbmRleGNtZHMu byBsb2NrY21kcy5vIG1hdHZpZXcubyBvcGVyYXRvcmNtZHMubyBvcGNsYXNzY21kcy5vIFwKIAlw b2xpY3kubyBwb3J0YWxjbWRzLm8gcHJlcGFyZS5vIHByb2NsYW5nLm8gcHVibGljYXRpb25jbWRz Lm8gXAotCXNjaGVtYWNtZHMubyBzZWNsYWJlbC5vIHNlcXVlbmNlLm8gc3RhdHNjbWRzLm8gc3Vi c2NyaXB0aW9uY21kcy5vIFwKKwlzY2hlbWFjbWRzLm8gc2NoZW1hdmFyLm8gc2VjbGFiZWwubyBz ZXF1ZW5jZS5vIHN0YXRzY21kcy5vIHN1YnNjcmlwdGlvbmNtZHMubyBcCiAJdGFibGVjbWRzLm8g dGFibGVzcGFjZS5vIHRyaWdnZXIubyB0c2VhcmNoY21kcy5vIHR5cGVjbWRzLm8gdXNlci5vIFwK IAl2YWN1dW0ubyB2YWN1dW1sYXp5Lm8gdmFyaWFibGUubyB2aWV3Lm8KIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvYWx0ZXIuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FsdGVy LmMKaW5kZXggMGQ2Mzg2NmZiMC4uZTE3NGUyNDBiNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvYWx0ZXIuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hbHRlci5jCkBAIC0z NDgsNiArMzQ4LDcgQEAgRXhlY1JlbmFtZVN0bXQoUmVuYW1lU3RtdCAqc3RtdCkKIAkJY2FzZSBP QkpFQ1RfTUFUVklFVzoKIAkJY2FzZSBPQkpFQ1RfSU5ERVg6CiAJCWNhc2UgT0JKRUNUX0ZPUkVJ R05fVEFCTEU6CisJCWNhc2UgT0JKRUNUX1ZBUklBQkxFOgogCQkJcmV0dXJuIFJlbmFtZVJlbGF0 aW9uKHN0bXQpOwogCiAJCWNhc2UgT0JKRUNUX0NPTFVNTjoKQEAgLTQ3OCw2ICs0NzksNyBAQCBF eGVjQWx0ZXJPYmplY3RTY2hlbWFTdG10KEFsdGVyT2JqZWN0U2NoZW1hU3RtdCAqc3RtdCwKIAkJ Y2FzZSBPQkpFQ1RfVEFCTEU6CiAJCWNhc2UgT0JKRUNUX1ZJRVc6CiAJCWNhc2UgT0JKRUNUX01B VFZJRVc6CisJCWNhc2UgT0JKRUNUX1ZBUklBQkxFOgogCQkJYWRkcmVzcyA9IEFsdGVyVGFibGVO YW1lc3BhY2Uoc3RtdCwKIAkJCQkJCQkJCQkgIG9sZFNjaGVtYUFkZHIgPyAmb2xkTnNwT2lkIDog TlVMTCk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbW1l bnQuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbW1lbnQuYwppbmRleCAyZjJlNjliNGE4Li5m NGEzY2FlNmI0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb21tZW50LmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29tbWVudC5jCkBAIC04Myw3ICs4Myw3IEBAIENvbW1l bnRPYmplY3QoQ29tbWVudFN0bXQgKnN0bXQpCiAKIAkJCS8qCiAJCQkgKiBBbGxvdyBjb21tZW50 cyBvbmx5IG9uIGNvbHVtbnMgb2YgdGFibGVzLCB2aWV3cywgbWF0ZXJpYWxpemVkCi0JCQkgKiB2 aWV3cywgY29tcG9zaXRlIHR5cGVzLCBhbmQgZm9yZWlnbiB0YWJsZXMgKHdoaWNoIGFyZSB0aGUg b25seQorCQkJICogdmlld3MsIGNvbXBvc2l0ZSB0eXBlcywgdmFyaWFibGVzIGFuZCBmb3JlaWdu IHRhYmxlcyAod2hpY2ggYXJlIHRoZSBvbmx5CiAJCQkgKiByZWxraW5kcyBmb3Igd2hpY2ggcGdf ZHVtcCB3aWxsIGR1bXAgcGVyLWNvbHVtbiBjb21tZW50cykuICBJbgogCQkJICogcGFydGljdWxh ciB3ZSB3aXNoIHRvIGRpc2FsbG93IGNvbW1lbnRzIG9uIGluZGV4IGNvbHVtbnMsCiAJCQkgKiBi ZWNhdXNlIHRoZSBuYW1pbmcgb2YgYW4gaW5kZXgncyBjb2x1bW5zIG1heSBjaGFuZ2UgYWNyb3Nz IFBHCkBAIC05NSwxMCArOTUsMTEgQEAgQ29tbWVudE9iamVjdChDb21tZW50U3RtdCAqc3RtdCkK IAkJCQlyZWxhdGlvbi0+cmRfcmVsLT5yZWxraW5kICE9IFJFTEtJTkRfTUFUVklFVyAmJgogCQkJ CXJlbGF0aW9uLT5yZF9yZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9DT01QT1NJVEVfVFlQRSAmJgog CQkJCXJlbGF0aW9uLT5yZF9yZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9GT1JFSUdOX1RBQkxFICYm Ci0JCQkJcmVsYXRpb24tPnJkX3JlbC0+cmVsa2luZCAhPSBSRUxLSU5EX1BBUlRJVElPTkVEX1RB QkxFKQorCQkJCXJlbGF0aW9uLT5yZF9yZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9QQVJUSVRJT05F RF9UQUJMRSAmJgorCQkJCXJlbGF0aW9uLT5yZF9yZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9WQVJJ QUJMRSkKIAkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19P QkpFQ1RfVFlQRSksCi0JCQkJCQkgZXJybXNnKCJcIiVzXCIgaXMgbm90IGEgdGFibGUsIHZpZXcs IG1hdGVyaWFsaXplZCB2aWV3LCBjb21wb3NpdGUgdHlwZSwgb3IgZm9yZWlnbiB0YWJsZSIsCisJ CQkJCQkgZXJybXNnKCJcIiVzXCIgaXMgbm90IGEgdGFibGUsIHZpZXcsIG1hdGVyaWFsaXplZCB2 aWV3LCBjb21wb3NpdGUgdHlwZSwgc2NoZW1hIHZhcmlhYmxlIG9yIGZvcmVpZ24gdGFibGUiLAog CQkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbikpKSk7CiAJCQlicmVhazsK IAkJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYwppbmRleCA5OTQ3OWVlZDY2Li42ZTRkZTRhMTk5IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY29weS5jCkBAIC0xNTAzLDYgKzE1MDMsOSBAQCBCZWdpbkNvcHkoUGFyc2VTdGF0 ZSAqcHN0YXRlLAogCiAJCUFzc2VydChxdWVyeS0+dXRpbGl0eVN0bXQgPT0gTlVMTCk7CiAKKwkJ LyogRG9uJ3QgZXhwZWN0IExFVCBzdG10IGhlcmUsIGlzIG5vdCBwb3NzaWJsZSB0byBkbyB3cml0 ZSBpdCAqLworCQlBc3NlcnQocXVlcnktPmNvbW1hbmRUeXBlICE9IENNRF9MRVQpOworCiAJCS8q CiAJCSAqIFNpbWlsYXJseSB0aGUgZ3JhbW1hciBkb2Vzbid0IGVuZm9yY2UgdGhlIHByZXNlbmNl IG9mIGEgUkVUVVJOSU5HCiAJCSAqIGNsYXVzZSwgYnV0IHRoaXMgaXMgcmVxdWlyZWQgaGVyZS4K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Rpc2NhcmQuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2Rpc2NhcmQuYwppbmRleCAwMWE5OTljMmFjLi43YWE3ZDgzNWY4IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kaXNjYXJkLmMKKysrIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvZGlzY2FyZC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5 bmMuaCIKICNpbmNsdWRlICJjb21tYW5kcy9kaXNjYXJkLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMv cHJlcGFyZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3NjaGVtYXZhci5oIgogI2luY2x1ZGUgImNv bW1hbmRzL3NlcXVlbmNlLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCiAjaW5jbHVkZSAidXRp bHMvcG9ydGFsLmgiCkBAIC0yNSw3ICsyNiw3IEBACiBzdGF0aWMgdm9pZCBEaXNjYXJkQWxsKGJv b2wgaXNUb3BMZXZlbCk7CiAKIC8qCi0gKiBESVNDQVJEIHsgQUxMIHwgU0VRVUVOQ0VTIHwgVEVN UCB8IFBMQU5TIH0KKyAqIERJU0NBUkQgeyBBTEwgfCBTRVFVRU5DRVMgfCBURU1QIHwgUExBTlMg fCBWQVJJQUJMRVN9CiAgKi8KIHZvaWQKIERpc2NhcmRDb21tYW5kKERpc2NhcmRTdG10ICpzdG10 LCBib29sIGlzVG9wTGV2ZWwpCkBAIC00OCw2ICs0OSwxMCBAQCBEaXNjYXJkQ29tbWFuZChEaXNj YXJkU3RtdCAqc3RtdCwgYm9vbCBpc1RvcExldmVsKQogCQkJUmVzZXRUZW1wVGFibGVOYW1lc3Bh Y2UoKTsKIAkJCWJyZWFrOwogCisJCWNhc2UgRElTQ0FSRF9WQVJJQUJMRVM6CisJCQlSZXNldFNj aGVtYVZhcmlhYmxlc0NhY2hlKCk7CisJCQlicmVhazsKKwogCQlkZWZhdWx0OgogCQkJZWxvZyhF UlJPUiwgInVucmVjb2duaXplZCBESVNDQVJEIHRhcmdldDogJWQiLCBzdG10LT50YXJnZXQpOwog CX0KQEAgLTc1LDQgKzgwLDUgQEAgRGlzY2FyZEFsbChib29sIGlzVG9wTGV2ZWwpCiAJUmVzZXRQ bGFuQ2FjaGUoKTsKIAlSZXNldFRlbXBUYWJsZU5hbWVzcGFjZSgpOwogCVJlc2V0U2VxdWVuY2VD YWNoZXMoKTsKKwlSZXNldFNjaGVtYVZhcmlhYmxlc0NhY2hlKCk7CiB9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9ldmVudF90cmlnZ2VyLmMKaW5kZXggNTQ5YzdlYTUxZC4uYzhlMmI4MjJlMSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwpAQCAtMTI2LDYgKzEyNiw3IEBAIHN0YXRpYyBldmVu dF90cmlnZ2VyX3N1cHBvcnRfZGF0YSBldmVudF90cmlnZ2VyX3N1cHBvcnRbXSA9IHsKIAl7IlRF WFQgU0VBUkNIIFRFTVBMQVRFIiwgdHJ1ZX0sCiAJeyJUWVBFIiwgdHJ1ZX0sCiAJeyJVU0VSIE1B UFBJTkciLCB0cnVlfSwKKwl7IlZBUklBQkxFIiwgdHJ1ZX0sCiAJeyJWSUVXIiwgdHJ1ZX0sCiAJ e05VTEwsIGZhbHNlfQogfTsKQEAgLTExMjQsNiArMTEyNSw3IEBAIEV2ZW50VHJpZ2dlclN1cHBv cnRzT2JqZWN0VHlwZShPYmplY3RUeXBlIG9idHlwZSkKIAkJY2FzZSBPQkpFQ1RfVFNURU1QTEFU RToKIAkJY2FzZSBPQkpFQ1RfVFlQRToKIAkJY2FzZSBPQkpFQ1RfVVNFUl9NQVBQSU5HOgorCQlj YXNlIE9CSkVDVF9WQVJJQUJMRToKIAkJY2FzZSBPQkpFQ1RfVklFVzoKIAkJCXJldHVybiB0cnVl OwogCkBAIC0yMjIyLDYgKzIyMjQsOCBAQCBzdHJpbmdpZnlfZ3JhbnRfb2JqdHlwZShPYmplY3RU eXBlIG9ianR5cGUpCiAJCQlyZXR1cm4gIlRBQkxFU1BBQ0UiOwogCQljYXNlIE9CSkVDVF9UWVBF OgogCQkJcmV0dXJuICJUWVBFIjsKKwkJY2FzZSBPQkpFQ1RfVkFSSUFCTEU6CisJCQlyZXR1cm4g IlZBUklBQkxFIjsKIAkJLyogdGhlc2UgY3VycmVudGx5IGFyZW4ndCB1c2VkICovCiAJCWNhc2Ug T0JKRUNUX0FDQ0VTU19NRVRIT0Q6CiAJCWNhc2UgT0JKRUNUX0FHR1JFR0FURToKQEAgLTIzMDQs NiArMjMwOCw4IEBAIHN0cmluZ2lmeV9hZGVmcHJpdnNfb2JqdHlwZShPYmplY3RUeXBlIG9ianR5 cGUpCiAJCQlyZXR1cm4gIlRBQkxFU1BBQ0VTIjsKIAkJY2FzZSBPQkpFQ1RfVFlQRToKIAkJCXJl dHVybiAiVFlQRVMiOworCQljYXNlIE9CSkVDVF9WQVJJQUJMRToKKwkJCXJldHVybiAiVkFSSUFC TEVTIjsKIAkJLyogdGhlc2UgY3VycmVudGx5IGFyZW4ndCB1c2VkICovCiAJCWNhc2UgT0JKRUNU X0FDQ0VTU19NRVRIT0Q6CiAJCWNhc2UgT0JKRUNUX0FHR1JFR0FURToKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxh aW4uYwppbmRleCBlMWE2MmExYmNlLi5mYzQ0NjljYjZjIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5j CkBAIC05NDYsNiArOTQ2LDkgQEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExp c3QgKmFuY2VzdG9ycywKIAkJCQljYXNlIENNRF9ERUxFVEU6CiAJCQkJCXBuYW1lID0gb3BlcmF0 aW9uID0gIkRlbGV0ZSI7CiAJCQkJCWJyZWFrOworCQkJCWNhc2UgQ01EX0xFVDoKKwkJCQkJcG5h bWUgPSBvcGVyYXRpb24gPSAiTGV0IjsKKwkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKIAkJCQkJ cG5hbWUgPSAiPz8/IjsKIAkJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9wcmVwYXJlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wcmVwYXJlLmMKaW5kZXggYjk0 NWIxNTU2YS4uYTY5NDcxZTkyNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJl cGFyZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYwpAQCAtMTUxLDYgKzE1 MSw3IEBAIFByZXBhcmVRdWVyeShQcmVwYXJlU3RtdCAqc3RtdCwgY29uc3QgY2hhciAqcXVlcnlT dHJpbmcsCiAJCWNhc2UgQ01EX0lOU0VSVDoKIAkJY2FzZSBDTURfVVBEQVRFOgogCQljYXNlIENN RF9ERUxFVEU6CisJCWNhc2UgQ01EX0xFVDoKIAkJCS8qIE9LICovCiAJCQlicmVhazsKIAkJZGVm YXVsdDoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NjaGVtYXZhci5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvc2NoZW1hdmFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uN2RkZjkxNzA4ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3NjaGVtYXZhci5jCkBAIC0wLDAgKzEsMTI3OSBAQAorLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKgorICogc2NoZW1hdmFyLmMKKyAqCSAgUG9zdGdyZVNRTCBzZXNzaW9uIHZhcmlhYmxlIHN1 cHBvcnQgY29kZS4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAxOCwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAo YykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICoK KyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3NjaGVtYXZhci5j CisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKworI2luY2x1ZGUgImFj Y2Vzcy9odHVwX2RldGFpbHMuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgorI2luY2x1ZGUg ImNhdGFsb2cvb2JqZWN0YWRkcmVzcy5oIgorI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jYXN0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jbGFz cy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2Rl ZnJlbS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlY21kcy5oIgorI2luY2x1ZGUgImNvbW1h bmRzL3NjaGVtYXZhci5oIgorI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgorI2luY2x1ZGUg Im9wdGltaXplci9wbGFubmVyLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NvZXJjZS5oIgor I2luY2x1ZGUgInBhcnNlci9wYXJzZV90eXBlLmgiCisjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRl SGFuZGxlci5oIgorI2luY2x1ZGUgInV0aWxzL2FjbC5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0 aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZGF0dW0uaCIKKyNpbmNsdWRlICJ1dGlscy9oc2VhcmNo LmgiCisjaW5jbHVkZSAidXRpbHMvaW52YWwuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUu aCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgor I2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvdHlwY2FjaGUuaCIK KworLyoKKyAqIFRoaXMgc2NoZW1hIHZhcmlhYmxlIGNhY2hlIG1peGVzIHRoZSBjYWNoZSBhbmQg c3RvcmFnZXMgYmVoYXZlLiBUaGF0IGlzIG5vdAorICogY29ycmVjdCBhbmQgaXQgaXMgcHJvYmxl bWF0aWMsIHdoZW4gdmFyaWFibGUgaXMgcmVtb3ZlZC4gVGhlIG93biBzdG9yYWdlCisgKiBiYXNl ZCBvbiBzdG9yYWdlIG1hbmFnZXIgY2FuIGJlIGltcGxlbWVudGVkLCBSZWxGaWxlTm9kZSBjYW4g YmUgZGVmaW5lZCBhbmQKKyAqIG1lY2hhbmlzbSBiYXNlZCBvbiBQZW5kaW5nUmVsRGVsZXRlIHN0 cnVjdCBjYW4gYmUgdXNlZC4gVGhpcyBpcyBhIGFyZ3VtZW50CisgKiBmb3IgaW1wbGVtZW50YXRp b24gc2NoZW1hIHZhcmlhYmxlcyBiYXNlZCBvbiBwZ19jbGFzcy4KKyAqIEFsdGVybmF0aXZlIHNv bHV0aW9uIGNhbiBiZSBkZXRlY3Rpb24gb2Ygc2NoZW1hIGNoYW5nZXMgYW5kIHJlY2hlY2sgYXQg YW5kCisgKiBvZiB0cmFuc2FjdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU2NoZW1hVmFyRGF0 YQoreworCU9pZAkJCXZhcmlkOwkJCS8qIHBnX2NsYXNzIE9JRCBvZiB0aGlzIHNlcXVlbmNlICho YXNoIGtleSkgKi8KKwlPaWQJCQl0eXBpZDsJCQkvKiBPSUQgb2YgdGhlIGRhdGEgdHlwZSAqLwor CWludDMyCQl0eXBtb2Q7CisJaW50MTYJCXR5cGxlbjsKKwlib29sCQl0eXBieXZhbDsKKwlib29s CQlpc251bGw7CisJYm9vbAkJZnJlZXZhbDsKKwlEYXR1bQkJdmFsdWU7CisJYm9vbAkJaXNfcm93 dHlwZTsJCS8qIHRydWUgd2hlbiB2YXJpYWJsZSBpcyBjb21wb3NpdGUgKi8KK30gU2NoZW1hVmFy RGF0YTsKKwordHlwZWRlZiBTY2hlbWFWYXJEYXRhICpTY2hlbWFWYXI7CisKK3N0YXRpYyBIVEFC ICpzY2hlbWF2YXJoYXNodGFiID0gTlVMTDsJCS8qIGhhc2ggdGFibGUgZm9yIHNlc3Npb24gdmFy aWFibGVzICovCitzdGF0aWMgTWVtb3J5Q29udGV4dCBTY2hlbWFWYXJNZW1vcnlDb250ZXh0ID0g TlVMTDsKKworc3RhdGljIERhdHVtIGRhdHVtQ2FzdChEYXR1bSB2YWx1ZSwKKwkJCQkJCSAgT2lk IHRhcmdldF90eXBpZCwgaW50IHRhcmdldF90eXBtb2QsCisJCQkJCQkgIE9pZCBzb3VyY2VfdHlw aWQsIGludCBzb3VyY2VfdHlwbW9kKTsKKworc3RhdGljIGJvb2wJZmlyc3RfdGltZSA9IHRydWU7 CitzdGF0aWMgYm9vbAljYWNoZV9pc192YWxpZCA9IHRydWU7CisKK3N0YXRpYyB2b2lkIEludmFs aWRhdGVTY2hlbWFWYXJDYWNoZUNhbGxiYWNrKERhdHVtIGFyZywgaW50IGNhY2hlaWQsIHVpbnQz MiBoYXNodmFsdWUpOworc3RhdGljIHZvaWQgY3JlYXRlX3NjaGVtYXZhcl9oYXNodGFibGUodm9p ZCk7CisKKy8qIGp1c3QgbWFyayBjYWNoZSB0byByZWNoZWNrICovCitzdGF0aWMgdm9pZAorSW52 YWxpZGF0ZVNjaGVtYVZhckNhY2hlQ2FsbGJhY2soRGF0dW0gYXJnLCBpbnQgY2FjaGVpZCwgdWlu dDMyIGhhc2h2YWx1ZSkKK3sKKwkvKgorCSAqIGJlY2F1c2UgdGhpcyBjYWNoZSBob2xkcyB2YWx1 ZXMgb2Ygc2NoZW1hIHZhcmlhYmxlcywgdGhlbgorCSAqIHRoZSBjb250ZW50IGNhbm5vdCBiZSBy ZW1vdmVkIGluIHRoaXMgbW9tZW10LiBXZSBzaG91bGQgdG8KKwkgKiB3YWl0IG9uIHRyYW5zYWN0 aW9uIGVuZC4KKwkgKi8KKwljYWNoZV9pc192YWxpZCA9IGZhbHNlOworfQorCisvKgorICogQ2Fz dCBkYXR1bQorICovCitzdGF0aWMgRGF0dW0KK2RhdHVtQ2FzdChEYXR1bSB2YWx1ZSwKKwkJICBP aWQgdGFyZ2V0X3R5cGlkLCBpbnQgdGFyZ2V0X3R5cG1vZCwKKwkJICBPaWQgc291cmNlX3R5cGlk LCBpbnQgc291cmNlX3R5cG1vZCkKK3sKKwlDb2VyY2lvblBhdGhUeXBlIGNwYXRodHlwZTsKKwlP aWQJCWNmdW5jaWQ7CisJRGF0dW0JcmVzdWx0ID0gKERhdHVtKSAwOworCWJvb2wJaXNfYmluYXJ5 X2Nhc3QgPSBmYWxzZTsKKworCWlmICh0YXJnZXRfdHlwaWQgIT0gc291cmNlX3R5cGlkKQorCXsK KwkJY3BhdGh0eXBlID0gZmluZF9jb2VyY2lvbl9wYXRod2F5KHRhcmdldF90eXBpZCwgc291cmNl X3R5cGlkLAorCQkJCQkJCQkJCQlDT0VSQ0lPTl9FWFBMSUNJVCwKKwkJCQkJCQkJCQkJJmNmdW5j aWQpOworCisJCWlmIChjcGF0aHR5cGUgPT0gQ09FUkNJT05fUEFUSF9OT05FKQorCQkJZWxvZyhF UlJPUiwgImNvdWxkIG5vdCBmaW5kIGNhc3QgZnJvbSAlcyB0byAlcyIsCisJCQkJCQlmb3JtYXRf dHlwZV9iZShzb3VyY2VfdHlwaWQpLAorCQkJCQkJZm9ybWF0X3R5cGVfYmUodGFyZ2V0X3R5cGlk KSk7CisKKwkJaWYgKGNwYXRodHlwZSA9PSBDT0VSQ0lPTl9QQVRIX1JFTEFCRUxUWVBFKQorCQl7 CisJCQlyZXN1bHQgPSB2YWx1ZTsKKwkJCWlzX2JpbmFyeV9jYXN0ID0gdHJ1ZTsKKwkJfQorCQll bHNlIGlmIChjcGF0aHR5cGUgPT0gQ09FUkNJT05fUEFUSF9DT0VSQ0VWSUFJTykKKwkJeworCQkJ T2lkCQlvdXRmdW5jOworCQkJT2lkCQlpbmZ1bmM7CisJCQlPaWQJCWlvcGFyYW07CisJCQlib29s CWlzVmFybGVuYTsKKwkJCWNoYXIJKnN0cjsKKworCQkJZ2V0VHlwZU91dHB1dEluZm8oc291cmNl X3R5cGlkLCAmb3V0ZnVuYywgJmlzVmFybGVuYSk7CisJCQlzdHIgPSBPaWRPdXRwdXRGdW5jdGlv bkNhbGwob3V0ZnVuYywgdmFsdWUpOworCisJCQlnZXRUeXBlSW5wdXRJbmZvKHRhcmdldF90eXBp ZCwgJmluZnVuYywgJmlvcGFyYW0pOworCQkJcmVzdWx0ID0gT2lkSW5wdXRGdW5jdGlvbkNhbGwo aW5mdW5jLCBzdHIsIGlvcGFyYW0sIC0xKTsKKwkJfQorCQllbHNlIGlmIChjcGF0aHR5cGUgPT0g Q09FUkNJT05fUEFUSF9GVU5DKQorCQl7CisJCQlyZXN1bHQgPSBPaWRGdW5jdGlvbkNhbGwzKGNm dW5jaWQsCisJCQkJCQkJdmFsdWUsCisJCQkJCQkJSW50MzJHZXREYXR1bSh0YXJnZXRfdHlwbW9k KSwKKwkJCQkJCQlCb29sR2V0RGF0dW0oZmFsc2UpKTsKKwkJfQorCX0KKwllbHNlCisJeworCQly ZXN1bHQgPSB2YWx1ZTsKKwkJaXNfYmluYXJ5X2Nhc3QgPSB0cnVlOworCX0KKworCWlmICh0YXJn ZXRfdHlwbW9kIDwgMSB8fCAodGFyZ2V0X3R5cG1vZCA9PSBzb3VyY2VfdHlwbW9kICYmIGlzX2Jp bmFyeV9jYXN0KSkKKwkJcmV0dXJuIHJlc3VsdDsKKworCWNwYXRodHlwZSA9IGZpbmRfdHlwbW9k X2NvZXJjaW9uX2Z1bmN0aW9uKHRhcmdldF90eXBpZCwgJmNmdW5jaWQpOworCWlmIChjcGF0aHR5 cGUgPT0gQ09FUkNJT05fUEFUSF9GVU5DKQorCXsKKwkJcmVzdWx0ID0gT2lkRnVuY3Rpb25DYWxs MyhjZnVuY2lkLAorCQkJCQkJCQkJCQlyZXN1bHQsCisJCQkJCQkJCQkJCUludDMyR2V0RGF0dW0o dGFyZ2V0X3R5cG1vZCksCisJCQkJCQkJCQkJCUJvb2xHZXREYXR1bShmYWxzZSkpOworCX0KKwor CXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBib29sCitzdl9nZXRfdHlwX3R5cG1vZChGb3Jt X3BnX2NsYXNzIGNsYXNzZm9ybSwgT2lkICp0eXAsIGludDMyICp0eXBtb2QpCit7CisJaWYgKGNs YXNzZm9ybS0+cmVsa2luZCAhPSBSRUxLSU5EX1ZBUklBQkxFKQorCQlyZXR1cm4gZmFsc2U7CisK KwlpZiAoY2xhc3Nmb3JtLT5yZWxvZnR5cGUgIT0gSW52YWxpZE9pZCkKKwl7CisJCU9pZAkJdHlw b2lkID0gY2xhc3Nmb3JtLT5yZWxvZnR5cGU7CisKKwkJaWYgKGdldF90eXB0eXBlKHR5cG9pZCkg PT0gVFlQVFlQRV9DT01QT1NJVEUpCisJCXsKKwkJCSp0eXAgPSBjbGFzc2Zvcm0tPnJlbG9mdHlw ZTsKKwkJCSp0eXBtb2QgPSAtMTsKKwkJfQorCQllbHNlCisJCXsKKwkJCVR1cGxlRGVzYwl0dXBk ZXNjOworCQkJUmVsYXRpb24JcmVsOworCQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0clN0cnVjdDsK KworCQkJLyogZmluZCBmaXJzdCBmaWVsZCAqLworCQkJcmVsID0gcmVsYXRpb25fb3Blbih0eXBl aWRUeXBlUmVsaWQoY2xhc3Nmb3JtLT5yZWx0eXBlKSwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCXR1 cGRlc2MgPSBDcmVhdGVUdXBsZURlc2NDb3B5KFJlbGF0aW9uR2V0RGVzY3IocmVsKSk7CisKKwkJ CWF0dHJTdHJ1Y3QgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2MsIDApOworCisJCQkqdHlwID0gYXR0 clN0cnVjdC0+YXR0dHlwaWQ7CisJCQkqdHlwbW9kID0gYXR0clN0cnVjdC0+YXR0dHlwbW9kOwor CisJCQlGcmVlVHVwbGVEZXNjKHR1cGRlc2MpOworCQkJcmVsYXRpb25fY2xvc2UocmVsLCBBY2Nl c3NTaGFyZUxvY2spOworCQl9CisJfQorCWVsc2UKKwl7CisJCSp0eXAgPSBjbGFzc2Zvcm0tPnJl bHR5cGU7CisJCSp0eXBtb2QgPSAtMTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9pZAor c2NoZW1hdmFyX2dldF90eXBfdHlwbW9kKE9pZCB2YXJpZCwgT2lkICp0eXAsIGludDMyICp0eXBt b2QpCit7CisJSGVhcFR1cGxlCXRwOworCUZvcm1fcGdfY2xhc3MJY2xhc3Nmb3JtOworCisJLyog bm93LCB0eXBlIGluZm8gZm9yIHNjaGVtYSB2YXJpYWJsZSBpcyBjb2xsZWN0ZWQgKi8KKwl0cCA9 IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIE9iamVjdElkR2V0RGF0dW0odmFyaWQpKTsKKwlpZiAo IUhlYXBUdXBsZUlzVmFsaWQodHApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxk IGZvciB2YXJpYWJsZSAldSIsIHZhcmlkKTsKKworCWNsYXNzZm9ybSA9IChGb3JtX3BnX2NsYXNz KSBHRVRTVFJVQ1QodHApOworCisJaWYgKCFzdl9nZXRfdHlwX3R5cG1vZChjbGFzc2Zvcm0sIHR5 cCwgdHlwbW9kKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1dST05H X09CSkVDVF9UWVBFKSwKKwkJCQkgZXJybXNnKCJvYmplY3QgJXUgaXMgbm90IGEgc2NoZW1hIHZh cmlhYmxlIiwgdmFyaWQpKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHApOworfQorCitib29sCitp c19zY2hlbWF2YXIoT2lkIHZhcmlkLCBib29sICppc19yb3d0eXBlKQoreworCUhlYXBUdXBsZQl0 cDsKKwlGb3JtX3BnX2NsYXNzCWNsYXNzZm9ybTsKKwlib29sCQlyZXN1bHQ7CisJT2lkCQkJdHlw OworCWludDMyCQl0eXBtb2Q7CisKKwlpZiAoIU9pZElzVmFsaWQodmFyaWQpKQorCQlyZXR1cm4g ZmFsc2U7CisKKwkvKiBub3csIHR5cGUgaW5mbyBmb3Igc2NoZW1hIHZhcmlhYmxlIGlzIGNvbGxl Y3RlZCAqLworCXRwID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgT2JqZWN0SWRHZXREYXR1bSh2 YXJpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0cCkpCisJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGQgZm9yIHZhcmlhYmxlICV1IiwgdmFyaWQpOworCisJY2xhc3Nmb3JtID0g KEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVDVCh0cCk7CisKKwlyZXN1bHQgPSBzdl9nZXRfdHlwX3R5 cG1vZChjbGFzc2Zvcm0sICZ0eXAsICZ0eXBtb2QpOworCisJaWYgKHJlc3VsdCAmJiBpc19yb3d0 eXBlKQorCQkqaXNfcm93dHlwZSA9IHR5cGVfaXNfcm93dHlwZSh0eXApOworCisJUmVsZWFzZVN5 c0NhY2hlKHRwKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIFNjaGVtYVZhcgor UHJlcGFyZVNjaGVtYVZhcihPaWQgdmFyaWQpCit7CisJU2NoZW1hVmFyCXZhcjsKKwlib29sCQlm b3VuZDsKKworCWlmIChzY2hlbWF2YXJoYXNodGFiID09IE5VTEwpCisJCWNyZWF0ZV9zY2hlbWF2 YXJfaGFzaHRhYmxlKCk7CisKKwl2YXIgPSAoU2NoZW1hVmFyKSBoYXNoX3NlYXJjaChzY2hlbWF2 YXJoYXNodGFiLCAmdmFyaWQsCisJCQkJCQkJCQkJCSAgSEFTSF9FTlRFUiwgJmZvdW5kKTsKKwlp ZiAoIWZvdW5kKQorCXsKKwkJUmVsYXRpb24JcmVsOworCQlUdXBsZURlc2MJZGVzYzsKKwkJaW50 CQkJbmF0dHM7CisJCURhdHVtCSAgICp2YWx1ZXM7CisJCWJvb2wJICAgKm51bGxzOworCQlFU3Rh dGUJICAgKmVzdGF0ZSA9IE5VTEw7CisJCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dCA9IE5VTEw7 CisJCWludAkJCW5ub3RudWxscyA9IDA7CisJCWludAkJaTsKKworCQl2YXItPnZhcmlkID0gdmFy aWQ7CisKKwkJc2NoZW1hdmFyX2dldF90eXBfdHlwbW9kKHZhcmlkLCAmdmFyLT50eXBpZCwgJnZh ci0+dHlwbW9kKTsKKwkJZ2V0X3R5cGxlbmJ5dmFsKHZhci0+dHlwaWQsICZ2YXItPnR5cGxlbiwg JnZhci0+dHlwYnl2YWwpOworCisJCXZhci0+aXNfcm93dHlwZSA9IHR5cGVfaXNfcm93dHlwZSh2 YXItPnR5cGlkKTsKKworCQkvKiBwcmVwYXJlIGRlZmF1bHQgdmFsdWUgKi8KKwkJcmVsID0gcmVs YXRpb25fb3Blbih2YXJpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJZGVzYyA9IFJlbGF0aW9uR2V0 RGVzY3IocmVsKTsKKwkJbmF0dHMgPSBkZXNjLT5uYXR0czsKKworCQllc3RhdGUgPSBDcmVhdGVF eGVjdXRvclN0YXRlKCk7CisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZXN0 YXRlLT5lc19xdWVyeV9jeHQpOworCisJCXZhbHVlcyA9IChEYXR1bSAqKSBwYWxsb2MwKG5hdHRz ICogc2l6ZW9mKERhdHVtKSk7CisJCW51bGxzID0gKGJvb2wgKikgcGFsbG9jMChuYXR0cyAqIHNp emVvZihib29sKSk7CisKKwkJZm9yIChpID0gMDsgaSA8IG5hdHRzOyBpKyspCisJCXsKKwkJCUV4 cHIJICAgKmRlZmV4cHI7CisJCQlFeHByU3RhdGUgICpkZWZleHByczsKKworCQkJaWYgKFR1cGxl RGVzY0F0dHIoZGVzYywgaSktPmF0dGlzZHJvcHBlZCkKKwkJCXsKKwkJCQludWxsc1tpXSA9IHRy dWU7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWRlZmV4cHIgPSAoRXhwciAqKSBidWlsZF9j b2x1bW5fZGVmYXVsdChyZWwsIGkgKyAxKTsKKwkJCWlmIChkZWZleHByICE9IE5VTEwpCisJCQl7 CisJCQkJZGVmZXhwciA9IGV4cHJlc3Npb25fcGxhbm5lcihkZWZleHByKTsKKwkJCQlkZWZleHBy cyA9IEV4ZWNJbml0RXhwcihkZWZleHByLCBOVUxMKTsKKworCQkJCXZhbHVlc1tpXSA9IEV4ZWNF dmFsRXhwclN3aXRjaENvbnRleHQoZGVmZXhwcnMsIEdldFBlclR1cGxlRXhwckNvbnRleHQoZXN0 YXRlKSwgJm51bGxzW2ldKTsKKwkJCQlpZiAoIW51bGxzW2ldKQorCQkJCQlubm90bnVsbHMrKzsK KwkJCX0KKwkJCWVsc2UKKwkJCQludWxsc1tpXSA9IHRydWU7CisJCX0KKworCQlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwkJaWYgKG5ub3RudWxscyA+IDApCisJCXsKKwkJ CURhdHVtCQl2YWx1ZTsKKworCQkJaWYgKHZhci0+aXNfcm93dHlwZSkKKwkJCXsKKwkJCQlIZWFw VHVwbGUJdHVwbGU7CisKKwkJCQl0dXBsZSA9IGhlYXBfZm9ybV90dXBsZShkZXNjLCB2YWx1ZXMs IG51bGxzKTsKKwkJCQl2YWx1ZSA9IEhlYXBUdXBsZUhlYWRlckdldERhdHVtKChIZWFwVHVwbGVI ZWFkZXIpIHR1cGxlLT50X2RhdGEpOworCQkJfQorCQkJZWxzZQorCQkJCXZhbHVlID0gdmFsdWVz WzBdOworCisJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8oU2NoZW1hVmFyTWVtb3J5Q29udGV4dCk7 CisJCQl2YXItPnZhbHVlID0gZGF0dW1Db3B5KHZhbHVlLCB2YXItPnR5cGJ5dmFsLCB2YXItPnR5 cGxlbik7CisJCQl2YXItPmlzbnVsbCA9IGZhbHNlOworCQkJdmFyLT5mcmVldmFsID0gdmFyLT52 YWx1ZSAhPSB2YWx1ZXNbMF07CisKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQp OworCQl9CisJCWVsc2UKKwkJeworCQkJdmFyLT52YWx1ZSA9IChEYXR1bSkgMDsKKwkJCXZhci0+ aXNudWxsID0gdHJ1ZTsKKwkJCXZhci0+ZnJlZXZhbCA9IGZhbHNlOworCQl9CisKKwkJRnJlZUV4 ZWN1dG9yU3RhdGUoZXN0YXRlKTsKKwkJcmVsYXRpb25fY2xvc2UocmVsLCBBY2Nlc3NTaGFyZUxv Y2spOworCX0KKworCXJldHVybiB2YXI7Cit9CisKKy8qCisgKiBXYWl0IG9uIGNvbW1pdCBvciBy b2xsYmFjayBhbmQgY2xlYW4gdmFsdWVzIHRoYXQgbWlzcyBlbnRyeSBpbiBzeXN0ZW0KKyAqIGNh dGFsb2cuIEl0IGlzIHRlbXBvcmFyeSBzb2x1dGlvbiAoYWx0aG91Z2ggaXQgaXMgd29ya2luZyku IFN0b3JhZ2UgbWFuYWdlcgorICogYmFzZWQgc29sdXRpb24gd2lsbCBiZSBiZXR0ZXIsIGJ1dCBp dCBpcyBub3QgbmVjZXNzYXJ5IGZvciB0aGlzIFBvQy4KKyAqCisgKiByZW1vdmVzIHVuY29tbWl0 dGVkIG9yIGRyb3BwZWQgc2NoZW1hIHZhcmlhYmxlcywgc28gZXZlbnQgY2FuIGJlIGlnbm9yZWQu CisgKi8KK3N0YXRpYyB2b2lkCityZWNoZWNrX3NjaGVtYV92YXJpYWJsZXMoWGFjdEV2ZW50IGV2 ZW50LCB2b2lkICphcmcpCit7CisJSEFTSF9TRVFfU1RBVFVTIHN0YXR1czsKKwlTY2hlbWFWYXIJ CXZhcjsKKworCWlmIChjYWNoZV9pc192YWxpZCB8fCBzY2hlbWF2YXJoYXNodGFiID09IE5VTEwg fHwgIUlzVHJhbnNhY3Rpb25TdGF0ZSgpKQorCQlyZXR1cm47CisKKwloYXNoX3NlcV9pbml0KCZz dGF0dXMsIHNjaGVtYXZhcmhhc2h0YWIpOworCisJd2hpbGUgKCh2YXIgPSAoU2NoZW1hVmFyKSBo YXNoX3NlcV9zZWFyY2goJnN0YXR1cykpICE9IE5VTEwpCisJeworCQlIZWFwVHVwbGUJdHAgPSBJ bnZhbGlkT2lkOworCisJCXRwID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgT2JqZWN0SWRHZXRE YXR1bSh2YXItPnZhcmlkKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0cCkpCisJCXsKKwkJ CWVsb2coREVCVUcxLCAidmFyaWFibGUgJWQgaXMgcmVtb3ZlZCBmcm9tIGNhY2hlIiwgdmFyLT52 YXJpZCk7CisKKwkJCWlmICh2YXItPmZyZWV2YWwpCisJCQl7CisJCQkJcGZyZWUoRGF0dW1HZXRQ b2ludGVyKHZhci0+dmFsdWUpKTsKKwkJCQl2YXItPmZyZWV2YWwgPSBmYWxzZTsKKwkJCX0KKwor CQkJaWYgKGhhc2hfc2VhcmNoKHNjaGVtYXZhcmhhc2h0YWIsCisJCQkJCQkJCSh2b2lkICopICZ2 YXItPnZhcmlkLAorCQkJCQkJCQlIQVNIX1JFTU9WRSwKKwkJCQkJCQkJTlVMTCkgPT0gTlVMTCkK KwkJCQllbG9nKEVSUk9SLCAiaGFzaCB0YWJsZSBjb3JydXB0ZWQiKTsKKwkJfQorCQllbHNlCisJ CQlSZWxlYXNlU3lzQ2FjaGUodHApOworCX0KKwljYWNoZV9pc192YWxpZCA9IHRydWU7Cit9CisK Ky8qCisgKiBEZWZpbmVTZXNzaW9uVmFyaWFibGUKKyAqCQkJCUNyZWF0ZXMgYSBuZXcgdmFyaWFi bGUgcmVsYXRlZCByZWxhdGlvbgorICovCitPYmplY3RBZGRyZXNzCitEZWZpbmVTY2hlbWFWYXJp YWJsZShQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVNjaGVtYVZhclN0bXQgKnZhcikKK3sKKwlD cmVhdGVTdG10ICpzdG10ID0gbWFrZU5vZGUoQ3JlYXRlU3RtdCk7CisJT2lkCQkJdHlwb2lkOwor CU9pZAkJCXZhcm9pZDsKKwlPYmplY3RBZGRyZXNzIGFkZHJlc3M7CisJYm9vbAkJY3JlYXRlX2Nh c3Q7CisKKwkvKgorCSAqIElmIGlmX25vdF9leGlzdHMgd2FzIGdpdmVuIGFuZCBhIHJlbGF0aW9u IHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5CisJICogZXhpc3RzLCBiYWlsIG91dC4gKE5vdGU6 IHdlIG5lZWRuJ3QgY2hlY2sgdGhpcyB3aGVuIG5vdCBpZl9ub3RfZXhpc3RzLAorCSAqIGJlY2F1 c2UgRGVmaW5lUmVsYXRpb24gd2lsbCBjb21wbGFpbiBhbnl3YXkuKQorCSAqLworCWlmICh2YXIt PmlmX25vdF9leGlzdHMpCisJeworCQlSYW5nZVZhckdldEFuZENoZWNrQ3JlYXRpb25OYW1lc3Bh Y2UodmFyLT52YXJpYWJsZSwgTm9Mb2NrLCAmdmFyb2lkKTsKKwkJaWYgKE9pZElzVmFsaWQodmFy b2lkKSkKKwkJeworCQkJZXJlcG9ydChOT1RJQ0UsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfRFVQ TElDQVRFX1RBQkxFKSwKKwkJCQkJIGVycm1zZygidmFyaWFibGUgXCIlc1wiIGFscmVhZHkgZXhp c3RzLCBza2lwcGluZyIsCisJCQkJCQkJdmFyLT52YXJpYWJsZS0+cmVsbmFtZSkpKTsKKwkJCXJl dHVybiBJbnZhbGlkT2JqZWN0QWRkcmVzczsKKwkJfQorCX0KKworCS8qCisJICogVmFyaWFibGUg Y2FuIGJlIGRlZmluZWQgYnkgdHlwZSAoc2NhbGFyLCBjb21wb3NpdGUpIG9yIGJ5CisJICogZmll bGQgbGlzdC4gV2hlbiBpcyBkZWZpbmVkIGJ5IGZpZWxkIGxpc3QsIHdlIHNob3VsZCB0byBjcmVh dGUKKwkgKiBuZXcgdHlwZSByZWxhdGVkIHRvIHRoaXMgdmFyaWFibGUuCisJICovCisJaWYgKHZh ci0+dHlwZU5hbWUgIT0gTlVMTCkKKwl7CisJCU9pZAkJdHlwcmVsaWQ7CisKKwkJQXNzZXJ0KHZh ci0+ZmllbGRzID09IE5JTCk7CisKKwkJdHlwb2lkID0gTG9va3VwVHlwZU5hbWVPaWQocHN0YXRl LCB2YXItPnR5cGVOYW1lLCBmYWxzZSk7CisKKwkJaWYgKGdldF90eXB0eXBlKHR5cG9pZCkgPT0g VFlQVFlQRV9QU0VVRE8pCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RF X0RBVEFUWVBFX01JU01BVENIKSwKKwkJCQkJIGVycm1zZygidmFyaWFibGUgY2Fubm90IGJlICVz IiwKKwkJCQkJCQlmb3JtYXRfdHlwZV9iZSh2YXJvaWQpKSkpOworCisJCXR5cHJlbGlkID0gdHlw ZWlkVHlwZVJlbGlkKHR5cG9pZCk7CisKKwkJaWYgKCFPaWRJc1ZhbGlkKHR5cHJlbGlkKSkKKwkJ eworCQkJLyoKKwkJCSAqIHdoZW4gdmFyaWFibGUgdHlwZSBpcyBub3QgY29tcG9zaXRlIHR5cGUs IHdlIHNob3VsZCB0byBjcmVhdGUKKwkJCSAqIGF1eCBjb21wb3NpdGUgdHlwZS4KKwkJCSAqLwor CQkJQ29sdW1uRGVmICpjb2xkZWYgPSBtYWtlTm9kZShDb2x1bW5EZWYpOworCisJCQljb2xkZWYt PmluaGNvdW50ID0gMDsKKwkJCWNvbGRlZi0+aXNfbG9jYWwgPSB0cnVlOworCQkJY29sZGVmLT5p c19ub3RfbnVsbCA9IGZhbHNlOworCQkJY29sZGVmLT5pc19mcm9tX3R5cGUgPSBmYWxzZTsKKwkJ CWNvbGRlZi0+c3RvcmFnZSA9IDA7CisJCQljb2xkZWYtPnJhd19kZWZhdWx0ID0gdmFyLT5kZWZl eHByOworCQkJY29sZGVmLT5jb29rZWRfZGVmYXVsdCA9IE5VTEw7CisJCQljb2xkZWYtPmNvbGxD bGF1c2UgPSBOVUxMOworCQkJY29sZGVmLT5jb2xsT2lkID0gSW52YWxpZE9pZDsKKwkJCWNvbGRl Zi0+Y29uc3RyYWludHMgPSBOSUw7CisJCQljb2xkZWYtPmxvY2F0aW9uID0gLTE7CisKKwkJCS8q IFVzZSBpbXBsaXQgbmFtZSBzYW1lIGxpa2UgdmFyaWFibGUgbmFtZSAqLworCQkJY29sZGVmLT5j b2xuYW1lID0gdmFyLT52YXJpYWJsZS0+cmVsbmFtZTsKKwkJCWNvbGRlZi0+dHlwZU5hbWUgPSB2 YXItPnR5cGVOYW1lOworCisJCQlzdG10LT50YWJsZUVsdHMgPSBsYXBwZW5kKHN0bXQtPnRhYmxl RWx0cywgY29sZGVmKTsKKworCQkJY3JlYXRlX2Nhc3QgPSBmYWxzZTsKKwkJfQorCQllbHNlCisJ CXsKKwkJCVR1cGxlRGVzYwl0dXBkZXNjOworCQkJUmVsYXRpb24JcmVsOworCQkJaW50CQkJaTsK KworCQkJcmVsID0gcmVsYXRpb25fb3Blbih0eXByZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJ CXR1cGRlc2MgPSBDcmVhdGVUdXBsZURlc2NDb3B5KFJlbGF0aW9uR2V0RGVzY3IocmVsKSk7CisK KwkJCWZvciAoaSA9IDA7IGkgPCB0dXBkZXNjLT5uYXR0czsgaSsrKQorCQkJeworCQkJCUZvcm1f cGdfYXR0cmlidXRlIGF0dHJTdHJ1Y3QgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGkpOworCisJ CQkJaWYgKCFhdHRyU3RydWN0LT5hdHRpc2Ryb3BwZWQpCisJCQkJeworCQkJCQlDb2x1bW5EZWYg KmNvbGRlZiA9IG1ha2VOb2RlKENvbHVtbkRlZik7CisKKwkJCQkJY29sZGVmLT5pbmhjb3VudCA9 IDA7CisJCQkJCWNvbGRlZi0+aXNfbG9jYWwgPSB0cnVlOworCQkJCQljb2xkZWYtPmlzX25vdF9u dWxsID0gZmFsc2U7CisJCQkJCWNvbGRlZi0+aXNfZnJvbV90eXBlID0gZmFsc2U7CisJCQkJCWNv bGRlZi0+c3RvcmFnZSA9IDA7CisJCQkJCWNvbGRlZi0+cmF3X2RlZmF1bHQgPSBOVUxMOworCQkJ CQljb2xkZWYtPmNvb2tlZF9kZWZhdWx0ID0gTlVMTDsKKwkJCQkJY29sZGVmLT5jb2xsQ2xhdXNl ID0gTlVMTDsKKwkJCQkJY29sZGVmLT5jb2xsT2lkID0gSW52YWxpZE9pZDsKKwkJCQkJY29sZGVm LT5jb25zdHJhaW50cyA9IE5JTDsKKwkJCQkJY29sZGVmLT5sb2NhdGlvbiA9IC0xOworCisJCQkJ CWNvbGRlZi0+Y29sbmFtZSA9IHBzdHJkdXAoTmFtZVN0cihhdHRyU3RydWN0LT5hdHRuYW1lKSk7 CisJCQkJCWNvbGRlZi0+dHlwZU5hbWUgPSBtYWtlVHlwZU5hbWVGcm9tT2lkKGF0dHJTdHJ1Y3Qt PmF0dHR5cGlkLAorCQkJCQkJCQkJCQkJCQkgICBhdHRyU3RydWN0LT5hdHR0eXBtb2QpOworCisJ CQkJCXN0bXQtPnRhYmxlRWx0cyA9IGxhcHBlbmQoc3RtdC0+dGFibGVFbHRzLCBjb2xkZWYpOwor CQkJCX0KKwkJCX0KKworCQkJRnJlZVR1cGxlRGVzYyh0dXBkZXNjKTsKKwkJCXJlbGF0aW9uX2Ns b3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQkJY3JlYXRlX2Nhc3QgPSB0cnVlOworCQl9 CisJfQorCWVsc2UKKwl7CisJCUFzc2VydCh2YXItPnR5cGVOYW1lID09IE5VTEwpOworCQlBc3Nl cnQodmFyLT5maWVsZHMgIT0gTklMKTsKKworCQlzdG10LT50YWJsZUVsdHMgPSB2YXItPmZpZWxk czsKKworCQljcmVhdGVfY2FzdCA9IGZhbHNlOworCX0KKworCXN0bXQtPnJlbGF0aW9uID0gdmFy LT52YXJpYWJsZTsKKwlzdG10LT5pbmhSZWxhdGlvbnMgPSBOSUw7CisJc3RtdC0+Y29uc3RyYWlu dHMgPSBOSUw7CisJc3RtdC0+b3B0aW9ucyA9IE5JTDsKKwlzdG10LT5vbmNvbW1pdCA9IE9OQ09N TUlUX05PT1A7CisJc3RtdC0+dGFibGVzcGFjZW5hbWUgPSBOVUxMOworCXN0bXQtPmlmX25vdF9l eGlzdHMgPSB2YXItPmlmX25vdF9leGlzdHM7CisKKwkvKgorCSAqIFNjaGVtYSB2YXJpYWJsZXMg dXNlcyByZWx0eXBlIGFuZCByZWxvZnR5cGUgZmllbGRzLiBUaGUgcmVsdHlwZSBpcworCSAqIGNv bXBvc2l0ZSBhbHdheXMgZm9yIHNjYWxhciBhbmQgbm9uIHNjYWxhciB2YXJpYWJsZXMuIEl0IGlz IHVzZWQgd2hlbgorCSAqIHdlIG5lZWQgYSB2YXJpYWJsZSdzIHR1cGxlIGRlc2NyaXByaW9uLiBX aGVuIHZhcmlhYmxlIHR5cGUgaXMgY29tcG9zaXRlLAorCSAqIHRoZW4gaXMgcmVmZXJlbmNlZCB3 aXRob3V0IGNoYW5nZS4gU2NhbGFyIHZhcmlhYmxlIFYgaXMgdHJhbnNsYXRlZCB0bworCSAqIGNv bXBvc2l0ZSB0eXBlICh2X25hbWUgdl90eXBlKS4KKwkgKiBUaGUgcmVsdHlwZSBpcyBhbHdheXMg Y29tcG9zaXRlIC0gc2VlIGNhdGFsb2cvaGVhcC5jIEFkZE5ld1JlbGF0aW9uVHlwZSwKKwkgKiBi dXQgZm9yIHNjaGVtYSB2YXJpYWJsZXMgYmFzZWQgb24gc29tZSB0eXBlIGlzIHRoaXMgYmVoYXZl IHVud2FudGVkLgorCSAqIHZhcmlhYmxlIHR5cGUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBiYXNl IHR5cGUuIFNvIGluIHRoaXMgY2FzZSBpcyBiZXR0ZXIKKwkgKiBkZWZpbmUgcmVsdHlwZSBhcyBk b21haW4gb2YgYmFzZSB0eXBlLiBCdXQgdGhpcyBjaGFuZ2UgYnJlYWsgY29uc2lzdGVuY3kKKwkg KiBvZiByZWx0eXBlIC0gc28gSSBjaGFuZ2VkIG5vdGhpbmcgYW5kIGltcGxpY2l0bHkgZ2VuZXJh dGUgbmVjZXNzYXJ5IGNhc3RzLgorCSAqLworCXN0bXQtPm9mVHlwZW5hbWUgPSB2YXItPnR5cGVO YW1lOworCisJYWRkcmVzcyA9IERlZmluZVJlbGF0aW9uKHN0bXQsIFJFTEtJTkRfVkFSSUFCTEUs IEludmFsaWRPaWQsIE5VTEwsIE5VTEwpOworCUFzc2VydChhZGRyZXNzLm9iamVjdElkICE9IElu dmFsaWRPaWQpOworCisJaWYgKGNyZWF0ZV9jYXN0KQorCXsKKwkJT2JqZWN0QWRkcmVzcyBjMSwg YzIsIHJlZmVyZW5jZWRfdDEsIHJlZmVyZW5jZWRfdDI7CisJCVR5cGVOYW1lICp0MSA9IHZhci0+ dHlwZU5hbWU7CisJCVR5cGVOYW1lICp0MiA9IG1ha2VUeXBlTmFtZUZyb21PaWQoZ2V0X3JlbF90 eXBlX2lkKGFkZHJlc3Mub2JqZWN0SWQpLCAtMSk7CisKKwkJLyoKKwkJICogVGhpcyBpcyB1Z2x5 IHBhcnQgLSBidXQgSSBzaG91bGQgdG8gdGVhY2ggUG9zdGdyZXMsIHNvIHQxIGFuZCB0MiB0eXBl cworCQkgKiBhcmUgY2FzdGFibGUuIFVuZm9ydHVuYXRlbGx5LCBDcmVhdGVDYXN0IGNhbm5vdCB0 byBjaGFuZ2UgZGVwZW5kZW5jeSwKKwkJICogc28gZnJlc2ggZGVwZW5kZW5jeSBzaG91bGQgYmUg cmVtb3ZlZCBhbmQgcmVjcmVhdGVkIHdpdGggREVQRU5ERU5DWV9BVVRPCisJCSAqIGZsYWcuIElu IHRoaXMgY2FzZSwgd2UgYXJlIHN1cmUgc28gYm90aCB0eXBlcyBhcmUgY29tcG9zaXRlLCBzbyBt YXliZSBsZXNzCisJCSAqIHVnbHkgY2FuIGJlIHVzZSByZWx0eXBlIGFzIGRvbWFpbiB0eXBlIG9m IGJhc2UgdHlwZSBpbnN0ZWFkIGNvcHkuCisJCSAqLworCQlDcmVhdGVDYXN0U3RtdCAqbiA9IG1h a2VOb2RlKENyZWF0ZUNhc3RTdG10KTsKKworCQluLT5zb3VyY2V0eXBlID0gdDE7CisJCW4tPnRh cmdldHR5cGUgPSB0MjsKKwkJbi0+ZnVuYyA9IE5VTEw7CisJCW4tPmNvbnRleHQgPSBDT0VSQ0lP Tl9JTVBMSUNJVDsKKwkJbi0+aW5vdXQgPSB0cnVlOworCisJCWMxID0gQ3JlYXRlQ2FzdChuKTsK KworCQluLT5zb3VyY2V0eXBlID0gdDI7CisJCW4tPnRhcmdldHR5cGUgPSB0MTsKKworCQljMiA9 IENyZWF0ZUNhc3Qobik7CisKKwkJZGVsZXRlRGVwZW5kZW5jeVJlY29yZHNGb3IoQ2FzdFJlbGF0 aW9uSWQsIGMxLm9iamVjdElkLCBmYWxzZSk7CisJCWRlbGV0ZURlcGVuZGVuY3lSZWNvcmRzRm9y KENhc3RSZWxhdGlvbklkLCBjMi5vYmplY3RJZCwgZmFsc2UpOworCisJCXJlZmVyZW5jZWRfdDEu Y2xhc3NJZCA9IFR5cGVSZWxhdGlvbklkOworCQlyZWZlcmVuY2VkX3QxLm9iamVjdElkID0gZ2V0 X3JlbF90eXBlX2lkKGFkZHJlc3Mub2JqZWN0SWQpOworCQlyZWZlcmVuY2VkX3QxLm9iamVjdFN1 YklkID0gMDsKKworCQlyZWZlcmVuY2VkX3QyLmNsYXNzSWQgPSBUeXBlUmVsYXRpb25JZDsKKwkJ cmVmZXJlbmNlZF90Mi5vYmplY3RJZCA9IExvb2t1cFR5cGVOYW1lT2lkKHBzdGF0ZSwgdmFyLT50 eXBlTmFtZSwgZmFsc2UpOworCQlyZWZlcmVuY2VkX3QyLm9iamVjdFN1YklkID0gMDsKKworCQly ZWNvcmREZXBlbmRlbmN5T24oJmMxLCAmcmVmZXJlbmNlZF90MSwgREVQRU5ERU5DWV9BVVRPKTsK KwkJcmVjb3JkRGVwZW5kZW5jeU9uKCZjMSwgJnJlZmVyZW5jZWRfdDIsIERFUEVOREVOQ1lfQVVU Tyk7CisJCXJlY29yZERlcGVuZGVuY3lPbigmYzIsICZyZWZlcmVuY2VkX3QxLCBERVBFTkRFTkNZ X0FVVE8pOworCQlyZWNvcmREZXBlbmRlbmN5T24oJmMyLCAmcmVmZXJlbmNlZF90MiwgREVQRU5E RU5DWV9BVVRPKTsKKwl9CisKKwlyZXR1cm4gYWRkcmVzczsKK30KKworLyoKKyAqIEltcGxlbWVu dGF0aW9uIG9mIHNjaGVtYXZhciBjYWNoZS4gSXQgaXMgcXVlc3Rpb24gaWYgaXQgc2hvdWxkIGJl IGluIHRoaXMgcGxhY2UsIG9yCisgKiBpdCBzaG91bGQgYmUgc3RvcmFnZSByZWxhdGVkIG9yIGNh Y2hlIHJlbGF0ZWQgcGxhY2U/IEJ1dCBmb3IgdGhpcyBtb21lbnQgKFBvQykgaXQKKyAqIGNhbiBi ZSBoZXJlLiBDYWNoZSBpcyBpbXBsZW1lbnRlZCBhcyBoYXNoIHRhYmxlIHdpdGggb3duIG1lbW9y eSBjb250ZXh0LgorICovCisKKy8qCisgKiBDcmVhdGUgdGhlIGhhc2ggdGFibGUgZm9yIHN0b3Jp bmcgc2NoZW1hIHZhcmlhYmxlcworICovCitzdGF0aWMgdm9pZAorY3JlYXRlX3NjaGVtYXZhcl9o YXNodGFibGUodm9pZCkKK3sKKwlIQVNIQ1RMCQljdGw7CisKKwkvKiBzZXQgY2FsbGJhY2tzICov CisJaWYgKGZpcnN0X3RpbWUpCisJeworCisJCUNhY2hlUmVnaXN0ZXJTeXNjYWNoZUNhbGxiYWNr KFJFTE9JRCwKKwkJCQkJCQkJCSAgSW52YWxpZGF0ZVNjaGVtYVZhckNhY2hlQ2FsbGJhY2ssCisJ CQkJCQkJCQkgIChEYXR1bSkgMCk7CisJCVJlZ2lzdGVyWGFjdENhbGxiYWNrKHJlY2hlY2tfc2No ZW1hX3ZhcmlhYmxlcywgTlVMTCk7CisKKwkJZmlyc3RfdGltZSA9IGZhbHNlOworCX0KKworCS8q IG5lZWRzIG93biBsb25nIGxpZmUgbWVtb3J5IGNvbnRleHQgKi8KKwlpZiAoU2NoZW1hVmFyTWVt b3J5Q29udGV4dCA9PSBOVUxMKQorCXsKKwkJU2NoZW1hVmFyTWVtb3J5Q29udGV4dCA9IEFsbG9j U2V0Q29udGV4dENyZWF0ZShUb3BNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCQkJCQkJInNjaGVt YSB2YXJpYWJsZXMiLAorCQkJCQkJCQkJCQkJCQkJQUxMT0NTRVRfU1RBUlRfU01BTExfU0laRVMp OworCX0KKworCW1lbXNldCgmY3RsLCAwLCBzaXplb2YoY3RsKSk7CisJY3RsLmtleXNpemUgPSBz aXplb2YoT2lkKTsKKwljdGwuZW50cnlzaXplID0gc2l6ZW9mKFNjaGVtYVZhckRhdGEpOworCWN0 bC5oY3h0ID0gU2NoZW1hVmFyTWVtb3J5Q29udGV4dDsKKworCXNjaGVtYXZhcmhhc2h0YWIgPSBo YXNoX2NyZWF0ZSgiU2NoZW1hIHZhcmlhYmxlcyIsIDY0LCAmY3RsLAorCQkJCQkJCQkJCUhBU0hf RUxFTSB8IEhBU0hfQkxPQlMgfCBIQVNIX0NPTlRFWFQpOworCWNhY2hlX2lzX3ZhbGlkID0gdHJ1 ZTsKK30KKworLyoKKyAqIEZhc3QgZHJvcCBjb21wbGV0ZSBjb250ZW50IG9mIHNjaGVtYSB2YXJp YWJsZXMKKyAqLwordm9pZAorUmVzZXRTY2hlbWFWYXJpYWJsZXNDYWNoZSh2b2lkKQoreworCWlm IChzY2hlbWF2YXJoYXNodGFiKQorCXsKKwkJaGFzaF9kZXN0cm95KHNjaGVtYXZhcmhhc2h0YWIp OworCQlzY2hlbWF2YXJoYXNodGFiID0gTlVMTDsKKwl9CisKKwlpZiAoU2NoZW1hVmFyTWVtb3J5 Q29udGV4dCAhPSBOVUxMKQorCXsKKwkJTWVtb3J5Q29udGV4dFJlc2V0KFNjaGVtYVZhck1lbW9y eUNvbnRleHQpOworCX0KK30KKworLyoKKyAqIENvcHkgZGF0dW0gdmFsdWUgdG8gc2NoZW1hIHZh cmlhYmxlcyBjYWNoZSBwbGFjZQorICovCitzdGF0aWMgdm9pZAorU2V0VmFsdWUoU2NoZW1hVmFy IHZhciwKKwkJIERhdHVtIHZhbHVlLCBib29sIGlzTnVsbCwKKwkJIE9pZCB0eXBpZCwgaW50MzIg dHlwbW9kKQoreworCS8qIHJlbGVhc2UgcHJldmlvdXNseSBzdG9yZWQgdmFsdWUgKi8KKwlpZiAo dmFyLT5mcmVldmFsKQorCXsKKwkJcGZyZWUoRGF0dW1HZXRQb2ludGVyKHZhci0+dmFsdWUpKTsK KwkJdmFyLT5mcmVldmFsID0gZmFsc2U7CisJfQorCisJaWYgKCFpc051bGwpCisJeworCQlNZW1v cnlDb250ZXh0IG9sZGN4dDsKKworCQkvKgorCQkgKiBjYXN0IHRoZSB2YWx1ZSBpZiBjb252ZXJz aW9uIGlzIG5lY2Vzc2FyeS4KKwkJICogRXhwZWN0aW5nOiBjdXJyZW50IGNvbnRleHQgaXMgc2hv cnQgY29udGV4dC4KKwkJICoKKwkJICogUVVFU1RJT046IGhvdyBtdWNoIHNob3VsZCBiZSB0aGlz IGNhc3QgdG9sZXJhbnQvc3RyaWN0PworCQkgKi8KKwkJaWYgKHZhci0+dHlwaWQgIT0gdHlwaWQg fHwgdmFyLT50eXBtb2QgIT0gdHlwbW9kKQorCQl7CisJCQl2YWx1ZSA9IGRhdHVtQ2FzdCh2YWx1 ZSwKKwkJCQkJCQkJdmFyLT50eXBpZCwgdmFyLT50eXBtb2QsCisJCQkJCQkJCXR5cGlkLCB0eXBt b2QpOworCQl9CisKKwkJdmFyLT5pc251bGwgPSBmYWxzZTsKKworCQlvbGRjeHQgPSBNZW1vcnlD b250ZXh0U3dpdGNoVG8oU2NoZW1hVmFyTWVtb3J5Q29udGV4dCk7CisKKwkJdmFyLT52YWx1ZSA9 IGRhdHVtQ29weSh2YWx1ZSwgdmFyLT50eXBieXZhbCwgdmFyLT50eXBsZW4pOworCQlpZiAodmFy LT52YWx1ZSAhPSB2YWx1ZSkKKwkJCXZhci0+ZnJlZXZhbCA9IHRydWU7CisKKwkJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG9sZGN4dCk7CisJfQorCWVsc2UKKwl7CisJCXZhci0+dmFsdWUgPSAoRGF0 dW0pIDA7CisJCXZhci0+aXNudWxsID0gdHJ1ZTsKKwl9Cit9CisKKy8qCisgKiBSZXR1cm5zIHZh cmlhYmxlIG5hbWUKKyAqLworY2hhciAqCitnZXRfc2NoZW1hdmFyX25hbWUoT2lkIHZhcmlkKQor eworCUhlYXBUdXBsZQkJcmVsVHVwOworCUZvcm1fcGdfY2xhc3MJcmVsRm9ybTsKKwljaGFyCSAg ICpuc3BuYW1lOworCWNoYXIJICAgKnJlbG5hbWU7CisKKwlyZWxUdXAgPSBTZWFyY2hTeXNDYWNo ZTEoUkVMT0lELAorCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bSh2YXJpZCkpOworCWlmICghSGVh cFR1cGxlSXNWYWxpZChyZWxUdXApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIHNjaGVtYSB2YXJpYWJsZSAldSIsIHZhcmlkKTsKKwlyZWxGb3JtID0gKEZvcm1fcGdf Y2xhc3MpIEdFVFNUUlVDVChyZWxUdXApOworCisJLyogUXVhbGlmeSB0aGUgbmFtZSBpZiBub3Qg dmlzaWJsZSBpbiBzZWFyY2ggcGF0aCAqLworCWlmIChSZWxhdGlvbklzVmlzaWJsZSh2YXJpZCkp CisJCW5zcG5hbWUgPSBOVUxMOworCWVsc2UKKwkJbnNwbmFtZSA9IGdldF9uYW1lc3BhY2VfbmFt ZShyZWxGb3JtLT5yZWxuYW1lc3BhY2UpOworCisJcmVsbmFtZSA9IHF1b3RlX3F1YWxpZmllZF9p ZGVudGlmaWVyKG5zcG5hbWUsIE5hbWVTdHIocmVsRm9ybS0+cmVsbmFtZSkpOworCisJUmVsZWFz ZVN5c0NhY2hlKHJlbFR1cCk7CisKKwlyZXR1cm4gcmVsbmFtZTsKK30KKworLyoKKyAqIEFjY2Vz cyBmdW5jdGlvbnMgdG8gc2NoZW1hIHZhcmlhYmxlcy4KKyAqLwordm9pZAorU2V0U2NoZW1hVmFy aWFibGUoT2lkIHZhcmlkLCBEYXR1bSB2YWx1ZSwgYm9vbCBpc051bGwsIE9pZCB0eXBpZCwgaW50 MzIgdHlwbW9kKQoreworCVNjaGVtYVZhcgl2YXI7CisKKwl2YXIgPSBQcmVwYXJlU2NoZW1hVmFy KHZhcmlkKTsKKwlTZXRWYWx1ZSh2YXIsIHZhbHVlLCBpc051bGwsIHR5cGlkLCB0eXBtb2QpOwor fQorCisvKgorICogU2VjdXJpemVkIHZlcnNpb25zIFNldFNjaGVtYVZhcmlhYmxlCisgKi8KK3Zv aWQKK1NldFNjaGVtYVZhcmlhYmxlU2VjdXJlKE9pZCB2YXJpZCwgRGF0dW0gdmFsdWUsIGJvb2wg aXNOdWxsLCBPaWQgdHlwaWQsIGludDMyIHR5cG1vZCkKK3sKKwlBY2xSZXN1bHQJCWFjbHJlc3Vs dDsKKworCS8qIENoZWNrIHBlcm1pc3Npb25zICovCisJYWNscmVzdWx0ID0gcGdfY2xhc3NfYWNs Y2hlY2sodmFyaWQsIEdldFVzZXJJZCgpLCBBQ0xfVVBEQVRFKTsKKwlpZiAoYWNscmVzdWx0ICE9 IEFDTENIRUNLX09LKQorCQlhY2xjaGVja19lcnJvcihhY2xyZXN1bHQsIE9CSkVDVF9WQVJJQUJM RSwgZ2V0X3NjaGVtYXZhcl9uYW1lKHZhcmlkKSk7CisKKwlTZXRTY2hlbWFWYXJpYWJsZSh2YXJp ZCwgdmFsdWUsIGlzTnVsbCwgdHlwaWQsIHR5cG1vZCk7Cit9CisKK0RhdHVtCitHZXRTY2hlbWFW YXJpYWJsZShPaWQgdmFyaWQsIGJvb2wgKmlzTnVsbCwKKwkJCQkJCU9pZCB0eXBpZCwgaW50MzIg dHlwbW9kLAorCQkJCQkJaW50MTYgdHlwbGVuLCBib29sIHR5cGJ5dmFsKQoreworCVNjaGVtYVZh cgl2YXI7CisJRGF0dW0JCXJlc3VsdCA9IChEYXR1bSkgMDsKKworCXZhciA9IFByZXBhcmVTY2hl bWFWYXIodmFyaWQpOworCisJaWYgKCF2YXItPmlzbnVsbCkKKwl7CisJCXJlc3VsdCA9IGRhdHVt Q2FzdCh2YXItPnZhbHVlLCB0eXBpZCwgdHlwbW9kLAorCQkJCQkJCQl2YXItPnR5cGlkLCB2YXIt PnR5cG1vZCk7CisJCSppc051bGwgPSBmYWxzZTsKKworCQlpZiAocmVzdWx0ID09IHZhci0+dmFs dWUpCisJCQlyZXN1bHQgPSBkYXR1bUNvcHkocmVzdWx0LCB0eXBieXZhbCwgdHlwbGVuKTsKKwl9 CisJZWxzZQorCQkqaXNOdWxsID0gdHJ1ZTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisg KiBTZWN1cml6ZWQgdmVyc2lvbiBvZiBHZXRTY2hlbWFWYXJpYWJsZQorICovCitEYXR1bQorR2V0 U2NoZW1hVmFyaWFibGVTZWN1cmUoT2lkIHZhcmlkLCBib29sICppc051bGwsCisJCQkJCQlPaWQg dHlwaWQsIGludDMyIHR5cG1vZCwKKwkJCQkJCWludDE2IHR5cGxlbiwgYm9vbCB0eXBieXZhbCkK K3sKKwlBY2xSZXN1bHQgYWNscmVzdWx0OworCisJLyogQ2hlY2sgcGVybWlzc2lvbnMgKi8KKwlh Y2xyZXN1bHQgPSBwZ19jbGFzc19hY2xjaGVjayh2YXJpZCwgR2V0VXNlcklkKCksIEFDTF9TRUxF Q1QpOworCWlmIChhY2xyZXN1bHQgIT0gQUNMQ0hFQ0tfT0spCisJCWFjbGNoZWNrX2Vycm9yKGFj bHJlc3VsdCwgT0JKRUNUX1ZBUklBQkxFLCBnZXRfc2NoZW1hdmFyX25hbWUodmFyaWQpKTsKKwor CXJldHVybiBHZXRTY2hlbWFWYXJpYWJsZSh2YXJpZCwgaXNOdWxsLCB0eXBpZCwgdHlwbW9kLCB0 eXBsZW4sIHR5cGJ5dmFsKTsKK30KKworLyoKKyAqIFYxIGZ1bmN0aW9uIEFQSQorICoKKyAqIHZv aWQgc2V0X3NjaGVtYV92YXJpYWJsZSh2YXIgcmVnY2xhc3MsIHZhbHVlIGFueWVsZW1lbnQpOwor ICogYW55ZWxlbWVudCBnZXRfc2NoZW1hX3ZhcmlhYmxlKHZhciByZWdjbGFzcywgZXhwZWN0ZWRf dHlwZSBhbnllbGVtZW50KQorICoKKyAqLworRGF0dW0KK3NldF9zY2hlbWFfdmFyaWFibGUoUEdf RlVOQ1RJT05fQVJHUykKK3sKKwlPaWQJCXZhcmlkOworCURhdHVtCXZhbHVlOworCWJvb2wJaXNO dWxsOworCU9pZAkJdHlwaWQ7CisJaW50MTYJdHlwbGVuOworCWJvb2wJdHlwYnl2YWw7CisKKwlp ZiAoUEdfQVJHSVNOVUxMKDApKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNP REVfTlVMTF9WQUxVRV9OT1RfQUxMT1dFRCksCisJCQkJIGVycm1zZygibnVsbCB2YWx1ZSBub3Qg YWxsb3dlZCBmb3IgdmFyaWFibGUgaWRlbnRpdHkiKSkpOworCisJdmFyaWQgPSBQR19HRVRBUkdf T0lEKDApOworCisJaWYgKCFQR19BUkdJU05VTEwoMSkpCisJeworCQl2YWx1ZSA9IFBHX0dFVEFS R19EQVRVTSgxKTsKKwkJaXNOdWxsID0gZmFsc2U7CisJfQorCWVsc2UKKwl7CisJCXZhbHVlID0g KERhdHVtKSAwOworCQlpc051bGwgPSB0cnVlOworCX0KKworCXR5cGlkID0gZ2V0X2ZuX2V4cHJf YXJndHlwZShmY2luZm8tPmZsaW5mbywgMSk7CisJaWYgKHR5cGlkID09IEludmFsaWRPaWQpCisJ CWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCisJCQkJIGVycm1zZygiY291bGQgbm90IGRldGVybWluZSBpbnB1dCBkYXRhIHR5cGUi KSkpOworCisJZ2V0X3R5cGxlbmJ5dmFsKHR5cGlkLCAmdHlwbGVuLCAmdHlwYnl2YWwpOworCVNl dFNjaGVtYVZhcmlhYmxlU2VjdXJlKHZhcmlkLCB2YWx1ZSwgaXNOdWxsLCB0eXBpZCwgLTEpOwor CisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworRGF0dW0KK2dldF9zY2hlbWFfdmFyaWFibGUoUEdf RlVOQ1RJT05fQVJHUykKK3sKKwlPaWQJCXZhcmlkOworCU9pZAkJdHlwaWQ7CisJaW50MTYJdHlw bGVuOworCWJvb2wJdHlwYnl2YWw7CisJYm9vbAlpc051bGw7CisJRGF0dW0JcmVzdWx0OworCisJ aWYgKFBHX0FSR0lTTlVMTCgwKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJD T0RFX05VTExfVkFMVUVfTk9UX0FMTE9XRUQpLAorCQkJCSBlcnJtc2coIm51bGwgdmFsdWUgbm90 IGFsbG93ZWQgZm9yIHZhcmlhYmxlIGlkZW50aXR5IikpKTsKKworCXZhcmlkID0gUEdfR0VUQVJH X09JRCgwKTsKKworCXR5cGlkID0gZ2V0X2ZuX2V4cHJfYXJndHlwZShmY2luZm8tPmZsaW5mbywg MSk7CisJaWYgKHR5cGlkID09IEludmFsaWRPaWQpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiY291 bGQgbm90IGRldGVybWluZSBpbnB1dCBkYXRhIHR5cGUiKSkpOworCisJZ2V0X3R5cGxlbmJ5dmFs KHR5cGlkLCAmdHlwbGVuLCAmdHlwYnl2YWwpOworCXJlc3VsdCA9IEdldFNjaGVtYVZhcmlhYmxl U2VjdXJlKHZhcmlkLCAmaXNOdWxsLCB0eXBpZCwgLTEsIHR5cGxlbiwgdHlwYnl2YWwpOworCisJ aWYgKGlzTnVsbCkKKwkJUEdfUkVUVVJOX05VTEwoKTsKKwllbHNlCisJCVBHX1JFVFVSTl9EQVRV TShyZXN1bHQpOworfQorCisvKgorICogQWNjZXNzIGZ1bmN0aW9ucyB0byBmaWVsZHMgb2YgY29t cG9zaXRlIHZhcmlhYmxlcworICovCit2b2lkCitTZXRTY2hlbWFWYXJpYWJsZUZpZWxkKE9pZCB2 YXJpZCwgY29uc3QgY2hhciAqZmllbGRuYW1lLAorCQkJCQkJRGF0dW0gdmFsdWUsIGJvb2wgaXNO dWxsLAorCQkJCQkJT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QpCit7CisKKwlTY2hlbWFWYXIJdmFy OworCVR1cGxlRGVzYwl0dXBEZXNjOworCUZvcm1fcGdfYXR0cmlidXRlCXNhdHRyID0gTlVMTDsK KwlEYXR1bQkgICAqdmFsdWVzOworCWJvb2wJICAgKm51bGxzOworCWludAkJCW5hdHRzOworCUhl YXBUdXBsZQkJdHVwbGU7CisJaW50CQkJaTsKKworCXZhciA9IFByZXBhcmVTY2hlbWFWYXIodmFy aWQpOworCisJaWYgKCF2YXItPmlzX3Jvd3R5cGUpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVy cmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCisJCQkJIGVycm1zZygidGhlIHZhcmlh YmxlIFwiJXNcIiBpcyBub3Qgb2Ygcm93IHR5cGUiLAorCQkJCQkJICBnZXRfc2NoZW1hdmFyX25h bWUodmFyaWQpKSkpOworCisJdHVwRGVzYyA9IGxvb2t1cF9yb3d0eXBlX3R1cGRlc2ModmFyLT50 eXBpZCwgdmFyLT50eXBtb2QpOworCW5hdHRzID0gdHVwRGVzYy0+bmF0dHM7CisKKwkvKgorCSAq IFdlIHNob3VsZCB0byBjaGVjayBjb3JyZWN0IGZpZWxkIG5hbWUsIGFsdGhvdWdoIHJlc3VsdCBj YW4gYmUgTlVMTCwKKwkgKiBhbmQgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIG5vdCBiZSB1c2VkLgor CSAqLworCWZvciAoaSA9IDA7IGkgPCBuYXR0czsgaSsrKQorCXsKKwkJaWYgKG5hbWVzdHJjbXAo JihUdXBsZURlc2NBdHRyKHR1cERlc2MsIGkpLT5hdHRuYW1lKSwgZmllbGRuYW1lKSA9PSAwICYm CisJCQkhVHVwbGVEZXNjQXR0cih0dXBEZXNjLCBpKS0+YXR0aXNkcm9wcGVkKQorCQl7CisJCQlz YXR0ciA9IFR1cGxlRGVzY0F0dHIodHVwRGVzYywgaSk7CisJCQlicmVhazsKKwkJfQorCX0KKwor CWlmIChzYXR0ciA9PSBOVUxMKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNP REVfVU5ERUZJTkVEX0NPTFVNTiksCisJCQkJIGVycm1zZygidGhlIHZhcmlhYmxlIFwiJXNcIiBo YXMgbm90IGZpZWxkIFwiJXNcIiIsCisJCQkJCQkJZ2V0X3NjaGVtYXZhcl9uYW1lKHZhcmlkKSwK KwkJCQkJCQlmaWVsZG5hbWUpKSk7CisKKwkvKiBsZWF2ZSwgd2hlbiB3ZSBkb24ndCBuZWVkIHRv IGNoYW5nZSBjb21wb3NpdGUgKi8KKwlpZiAodmFyLT5pc251bGwgJiYgaXNOdWxsKQorCXsKKwkJ RnJlZVR1cGxlRGVzYyh0dXBEZXNjKTsKKwkJcmV0dXJuOworCX0KKworCXZhbHVlcyA9IChEYXR1 bSAqKSBwYWxsb2MwKG5hdHRzICogc2l6ZW9mKERhdHVtKSk7CisJbnVsbHMgPSAoYm9vbCAqKSBw YWxsb2MwKG5hdHRzICogc2l6ZW9mKGJvb2wpKTsKKworCWlmICghdmFyLT5pc251bGwpCisJewor CQlIZWFwVHVwbGVIZWFkZXIgcmVjID0gRGF0dW1HZXRIZWFwVHVwbGVIZWFkZXIodmFyLT52YWx1 ZSk7CisJCUhlYXBUdXBsZURhdGEJdHVwOworCisJCS8qIEJ1aWxkIGEgdGVtcG9yYXJ5IEhlYXBU dXBsZSBjb250cm9sIHN0cnVjdHVyZSAqLworCQl0dXAudF9sZW4gPSBIZWFwVHVwbGVIZWFkZXJH ZXREYXR1bUxlbmd0aChyZWMpOworCQlJdGVtUG9pbnRlclNldEludmFsaWQoJih0dXAudF9zZWxm KSk7CisJCXR1cC50X3RhYmxlT2lkID0gSW52YWxpZE9pZDsKKwkJdHVwLnRfZGF0YSA9IHJlYzsK KworCQloZWFwX2RlZm9ybV90dXBsZSgmdHVwLCB0dXBEZXNjLCB2YWx1ZXMsIG51bGxzKTsKKwl9 CisJZWxzZQorCXsKKwkJZm9yIChpID0gMDsgaSA8IG5hdHRzOyBpKyspCisJCQludWxsc1tpXSA9 IHRydWU7CisJfQorCisJaWYgKCFpc051bGwpCisJeworCQl2YWx1ZXNbc2F0dHItPmF0dG51bSAt IDFdID0gZGF0dW1DYXN0KHZhbHVlLAorCQkJCQkJCQkJCSAgc2F0dHItPmF0dHR5cGlkLCBzYXR0 ci0+YXR0dHlwbW9kLAorCQkJCQkJCQkJCSAgdHlwaWQsIHR5cG1vZCk7CisJCW51bGxzW3NhdHRy LT5hdHRudW0gLSAxXSA9IGZhbHNlOworCX0KKwllbHNlCisJeworCQl2YWx1ZXNbc2F0dHItPmF0 dG51bSAtIDFdID0gKERhdHVtKSAwOworCQludWxsc1tzYXR0ci0+YXR0bnVtIC0gMV0gPSB0cnVl OworCX0KKworCXR1cGxlID0gaGVhcF9mb3JtX3R1cGxlKHR1cERlc2MsIHZhbHVlcywgbnVsbHMp OworCVNldFZhbHVlKHZhciwKKwkJCSAgSGVhcFR1cGxlSGVhZGVyR2V0RGF0dW0oKEhlYXBUdXBs ZUhlYWRlcikgdHVwbGUtPnRfZGF0YSksCisJCQkgIGZhbHNlLAorCQkJICB2YXItPnR5cGlkLCB2 YXItPnR5cG1vZCk7CisKKwloZWFwX2ZyZWV0dXBsZSh0dXBsZSk7CisJUmVsZWFzZVR1cGxlRGVz Yyh0dXBEZXNjKTsKK30KKworRGF0dW0KK0dldFNjaGVtYVZhcmlhYmxlRmllbGQoT2lkIHZhcmlk LCBjb25zdCBjaGFyICpmaWVsZG5hbWUsCisJCQkJCQlib29sICppc051bGwsCisJCQkJCQlPaWQg dHlwaWQsIGludDMyIHR5cG1vZCwKKwkJCQkJCWludDE2IHR5cGxlbiwgYm9vbCB0eXBieXZhbCkK K3sKKwlEYXR1bQkJcmVzdWx0ID0gKERhdHVtKSAwOworCURhdHVtCQl2YWx1ZSA9IChEYXR1bSkg MDsKKwlUdXBsZURlc2MJCXR1cERlc2M7CisJRm9ybV9wZ19hdHRyaWJ1dGUJc2F0dHIgPSBOVUxM OworCVNjaGVtYVZhcgkJdmFyOworCWludAkJCWk7CisKKwlBc3NlcnQodmFyaWQgIT0gSW52YWxp ZE9pZCk7CisKKwl2YXIgPSBQcmVwYXJlU2NoZW1hVmFyKHZhcmlkKTsKKworCWlmICghdmFyLT5p c19yb3d0eXBlKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfV1JPTkdf T0JKRUNUX1RZUEUpLAorCQkJCSBlcnJtc2coInRoZSB2YXJpYWJsZSBcIiVzXCIgaXMgbm90IG9m IHJvdyB0eXBlIiwKKwkJCQkJCSAgZ2V0X3NjaGVtYXZhcl9uYW1lKHZhcmlkKSkpKTsKKworCXR1 cERlc2MgPSBsb29rdXBfcm93dHlwZV90dXBkZXNjKHZhci0+dHlwaWQsIHZhci0+dHlwbW9kKTsK KworCS8qCisJICogV2Ugc2hvdWxkIHRvIGNoZWNrIGNvcnJlY3QgZmllbGQgbmFtZSwgYWx0aG91 Z2ggcmVzdWx0IGNhbiBiZSBOVUxMLAorCSAqIGFuZCB0aGlzIGluZm9ybWF0aW9uIHdpbGwgbm90 IGJlIHVzZWQuCisJICovCisJZm9yIChpID0gMDsgaSA8IHR1cERlc2MtPm5hdHRzOyBpKyspCisJ eworCQlpZiAobmFtZXN0cmNtcCgmKFR1cGxlRGVzY0F0dHIodHVwRGVzYywgaSktPmF0dG5hbWUp LCBmaWVsZG5hbWUpID09IDAgJiYKKwkJCSFUdXBsZURlc2NBdHRyKHR1cERlc2MsIGkpLT5hdHRp c2Ryb3BwZWQpCisJCXsKKwkJCXNhdHRyID0gVHVwbGVEZXNjQXR0cih0dXBEZXNjLCBpKTsKKwkJ CWJyZWFrOworCQl9CisJfQorCisJaWYgKHNhdHRyID09IE5VTEwpCisJCWVyZXBvcnQoRVJST1Is CisJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfQ09MVU1OKSwKKwkJCQkgZXJybXNnKCJ0 aGUgdmFyaWFibGUgXCIlc1wiIGhhcyBub3QgZmllbGQgXCIlc1wiIiwKKwkJCQkJCQlnZXRfc2No ZW1hdmFyX25hbWUodmFyaWQpLAorCQkJCQkJCWZpZWxkbmFtZSkpKTsKKworCS8qCisJICogVGhl b3JldGljYWxseSwgd2UgY2hlY2sgYSBwb3NzaWJpbGl0eSB0byBjYXN0IHRvIHRhcmdldCB0eXBl IGV2ZXJ5dGltZSwKKwkgKiBidXQgY2FuIGJlIGlnbm9yZWQsIHdoZW4gcmVzdWx0IHdpbGwgYmUg bnVsbC4KKwkgKi8KKwlpZiAoIXZhci0+aXNudWxsKQorCXsKKwkJSGVhcFR1cGxlSGVhZGVyCXR1 cGxlOworCQlIZWFwVHVwbGVEYXRhCXRtcHR1cDsKKworCQl0dXBsZSA9IERhdHVtR2V0SGVhcFR1 cGxlSGVhZGVyKHZhci0+dmFsdWUpOworCisJCS8qCisJCSAqIGhlYXBfZ2V0YXR0ciBuZWVkcyBh IEhlYXBUdXBsZSBub3QgYSBiYXJlIEhlYXBUdXBsZUhlYWRlci4gIFdlIHNldCBhbGwKKwkJICog dGhlIGZpZWxkcyBpbiB0aGUgc3RydWN0IGp1c3QgaW4gY2FzZSB1c2VyIHRyaWVzIHRvIGluc3Bl Y3Qgc3lzdGVtCisJCSAqIGNvbHVtbnMuCisJCSAqLworCQl0bXB0dXAudF9sZW4gPSBIZWFwVHVw bGVIZWFkZXJHZXREYXR1bUxlbmd0aCh0dXBsZSk7CisJCUl0ZW1Qb2ludGVyU2V0SW52YWxpZCgm KHRtcHR1cC50X3NlbGYpKTsKKwkJdG1wdHVwLnRfdGFibGVPaWQgPSBJbnZhbGlkT2lkOworCQl0 bXB0dXAudF9kYXRhID0gdHVwbGU7CisKKwkJdmFsdWUgPSBoZWFwX2dldGF0dHIoJnRtcHR1cCwK KwkJCQkJCQkgIHNhdHRyLT5hdHRudW0sCisJCQkJCQkJICB0dXBEZXNjLAorCQkJCQkJCSAgaXNO dWxsKTsKKworCQlpZiAoISppc051bGwpCisJCXsKKwkJCXJlc3VsdCA9IGRhdHVtQ2FzdCh2YWx1 ZSwgdHlwaWQsIHR5cG1vZCwKKwkJCQkJCQkJc2F0dHItPmF0dHR5cGlkLCBzYXR0ci0+YXR0dHlw bW9kKTsKKworCQkJaWYgKHJlc3VsdCA9PSB2YWx1ZSkKKwkJCQlyZXN1bHQgPSBkYXR1bUNvcHko cmVzdWx0LCB0eXBieXZhbCwgdHlwbGVuKTsKKwkJfQorCX0KKworCVJlbGVhc2VUdXBsZURlc2Mo dHVwRGVzYyk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCit2b2lkCitTZXRTY2hlbWFWYXJpYWJs ZUZpZWxkU2VjdXJlKE9pZCB2YXJpZCwgY29uc3QgY2hhciAqZmllbGRuYW1lLAorCQkJCQkJRGF0 dW0gdmFsdWUsIGJvb2wgaXNOdWxsLAorCQkJCQkJT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QpCit7 CisJQWNsUmVzdWx0CQlhY2xyZXN1bHQ7CisKKwkvKiBDaGVjayBwZXJtaXNzaW9ucyAqLworCWFj bHJlc3VsdCA9IHBnX2NsYXNzX2FjbGNoZWNrKHZhcmlkLCBHZXRVc2VySWQoKSwgQUNMX1VQREFU RSk7CisJaWYgKGFjbHJlc3VsdCAhPSBBQ0xDSEVDS19PSykKKwkJYWNsY2hlY2tfZXJyb3IoYWNs cmVzdWx0LCBPQkpFQ1RfVkFSSUFCTEUsIGdldF9zY2hlbWF2YXJfbmFtZSh2YXJpZCkpOworCisJ U2V0U2NoZW1hVmFyaWFibGVGaWVsZCh2YXJpZCwgZmllbGRuYW1lLCB2YWx1ZSwgaXNOdWxsLCB0 eXBpZCwgdHlwbW9kKTsKK30KKworRGF0dW0KK0dldFNjaGVtYVZhcmlhYmxlRmllbGRTZWN1cmUo T2lkIHZhcmlkLCBjb25zdCBjaGFyICpmaWVsZG5hbWUsCisJCQkJCQlib29sICppc051bGwsCisJ CQkJCQlPaWQgdHlwaWQsIGludDMyIHR5cG1vZCwKKwkJCQkJCWludDE2IHR5cGxlbiwgYm9vbCB0 eXBieXZhbCkKK3sKKwlBY2xSZXN1bHQgYWNscmVzdWx0OworCisJLyoKKwkgKiBUaGVyZSBhcmUg bm90IGFueSBzcGVjaWFsIGFjY2VzcyB0byBmaWVsZHMuIEp1c3QgY2hlY2sgYQorCSAqIGFjY2Vz cyB0byB2YXJpYWJsZS4KKwkgKi8KKwlhY2xyZXN1bHQgPSBwZ19jbGFzc19hY2xjaGVjayh2YXJp ZCwgR2V0VXNlcklkKCksIEFDTF9TRUxFQ1QpOworCWlmIChhY2xyZXN1bHQgIT0gQUNMQ0hFQ0tf T0spCisJCWFjbGNoZWNrX2Vycm9yKGFjbHJlc3VsdCwgT0JKRUNUX1ZBUklBQkxFLCBnZXRfc2No ZW1hdmFyX25hbWUodmFyaWQpKTsKKworCXJldHVybiBHZXRTY2hlbWFWYXJpYWJsZUZpZWxkKHZh cmlkLCBmaWVsZG5hbWUsIGlzTnVsbCwgdHlwaWQsIHR5cG1vZCwgdHlwbGVuLCB0eXBieXZhbCk7 Cit9CisKK0RhdHVtCitzZXRfc2NoZW1hX3ZhcmlhYmxlX2ZpZWxkKFBHX0ZVTkNUSU9OX0FSR1Mp Cit7CisJT2lkCQl2YXJpZDsKKwlEYXR1bQl2YWx1ZTsKKwlib29sCWlzTnVsbDsKKwlPaWQJCXR5 cGlkOworCWludDE2CXR5cGxlbjsKKwlib29sCXR5cGJ5dmFsOworCWNvbnN0IGNoYXIgICAqZmll bGRuYW1lOworCisJaWYgKFBHX0FSR0lTTlVMTCgwKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJyY29kZShFUlJDT0RFX05VTExfVkFMVUVfTk9UX0FMTE9XRUQpLAorCQkJCSBlcnJtc2coIm51 bGwgdmFsdWUgbm90IGFsbG93ZWQgZm9yIHZhcmlhYmxlIGlkZW50aXR5IikpKTsKKworCXZhcmlk ID0gUEdfR0VUQVJHX09JRCgwKTsKKworCWlmIChQR19BUkdJU05VTEwoMSkpCisJCWVyZXBvcnQo RVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9OVUxMX1ZBTFVFX05PVF9BTExPV0VEKSwKKwkJ CQkgZXJybXNnKCJudWxsIHZhbHVlIG5vdCBhbGxvd2VkIGZvciBmaWVsZCBuYW1lIikpKTsKKwor CWZpZWxkbmFtZSA9IE5hbWVTdHIoKlBHX0dFVEFSR19OQU1FKDEpKTsKKworCWlmICghUEdfQVJH SVNOVUxMKDIpKQorCXsKKwkJdmFsdWUgPSBQR19HRVRBUkdfREFUVU0oMik7CisJCWlzTnVsbCA9 IGZhbHNlOworCX0KKwllbHNlCisJeworCQl2YWx1ZSA9IChEYXR1bSkgMDsKKwkJaXNOdWxsID0g dHJ1ZTsKKwl9CisKKwl0eXBpZCA9IGdldF9mbl9leHByX2FyZ3R5cGUoZmNpbmZvLT5mbGluZm8s IDIpOworCWlmICh0eXBpZCA9PSBJbnZhbGlkT2lkKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShl cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImNv dWxkIG5vdCBkZXRlcm1pbmUgaW5wdXQgZGF0YSB0eXBlIikpKTsKKworCWdldF90eXBsZW5ieXZh bCh0eXBpZCwgJnR5cGxlbiwgJnR5cGJ5dmFsKTsKKwlTZXRTY2hlbWFWYXJpYWJsZUZpZWxkU2Vj dXJlKHZhcmlkLCBmaWVsZG5hbWUsIHZhbHVlLCBpc051bGwsIHR5cGlkLCAtMSk7CisKKwlQR19S RVRVUk5fVk9JRCgpOworfQorCitEYXR1bQorZ2V0X3NjaGVtYV92YXJpYWJsZV9maWVsZChQR19G VU5DVElPTl9BUkdTKQoreworCU9pZAkJdmFyaWQ7CisJT2lkCQl0eXBpZDsKKwlpbnQxNgl0eXBs ZW47CisJYm9vbAl0eXBieXZhbDsKKwlib29sCWlzTnVsbDsKKwlEYXR1bQlyZXN1bHQ7CisJY29u c3QgY2hhciAgICpmaWVsZG5hbWU7CisKKwlpZiAoUEdfQVJHSVNOVUxMKDApKQorCQllcmVwb3J0 KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfTlVMTF9WQUxVRV9OT1RfQUxMT1dFRCksCisJ CQkJIGVycm1zZygibnVsbCB2YWx1ZSBub3QgYWxsb3dlZCBmb3IgdmFyaWFibGUgaWRlbnRpdHki KSkpOworCisJdmFyaWQgPSBQR19HRVRBUkdfT0lEKDApOworCisJaWYgKFBHX0FSR0lTTlVMTCgx KSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX05VTExfVkFMVUVfTk9U X0FMTE9XRUQpLAorCQkJCSBlcnJtc2coIm51bGwgdmFsdWUgbm90IGFsbG93ZWQgZm9yIGZpZWxk IG5hbWUiKSkpOworCisJZmllbGRuYW1lID0gTmFtZVN0cigqUEdfR0VUQVJHX05BTUUoMSkpOwor CisJdHlwaWQgPSBnZXRfZm5fZXhwcl9hcmd0eXBlKGZjaW5mby0+ZmxpbmZvLCAyKTsKKwlpZiAo dHlwaWQgPT0gSW52YWxpZE9pZCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgZGV0 ZXJtaW5lIGlucHV0IGRhdGEgdHlwZSIpKSk7CisKKwlnZXRfdHlwbGVuYnl2YWwodHlwaWQsICZ0 eXBsZW4sICZ0eXBieXZhbCk7CisJcmVzdWx0ID0gR2V0U2NoZW1hVmFyaWFibGVGaWVsZFNlY3Vy ZSh2YXJpZCwgZmllbGRuYW1lLCAmaXNOdWxsLCB0eXBpZCwgLTEsIHR5cGxlbiwgdHlwYnl2YWwp OworCisJaWYgKGlzTnVsbCkKKwkJUEdfUkVUVVJOX05VTEwoKTsKKwllbHNlCisJCVBHX1JFVFVS Tl9EQVRVTShyZXN1bHQpOworCisJUEdfUkVUVVJOX05VTEwoKTsKK30KKworLyoKKyAqIFJlc3Vs dHM6CisgKj0KKyAKKzEuIFRoZSBzY2hlbWEgdmFyaWFibGVzIGFyZSBzaW1pbGFyIHRvIHRlbXBv cmFyeSB0YWJsZXMgLSBidXQgdGhlIGRhdGEgYXJlIG5vdCBzYXZlZAorICAgaW4gOEtCIGJsb2Nr cywgc28gbmV3IHN0b3JhZ2UgYW5kIHNvbWUgc2ltcGxlIHN0b3JhZ2UgbWFuYWdlciBzaG91bGQg YmUgY3JlYXRlZC4gV2UKKyAgIHdvdWxkIG5vdCB0byB1c2UgbG9jYWwgYnVmZmVyIGR1ZSBhbGxv Y2F0aW9uIDhLQiBhcyBtaW5pbXVuLCBjcmVhdGluZyB0ZW1wIGZpbGUuCisKKzIuIFdlIHNob3Vs ZCB0byB3b3JrIHdpdGggdHlwbW9kLCBzbyBwZ19hdHRyaWJ1dGUgZW50cnkgc2hvdWxkIGJlIGNy ZWF0ZWQgYW55dGltZS4KKworMy4gQSByaXNrIG9mIGNvbGxpc2lvbnMgb2YgdmFyaWFibGUgYW5k IHRhYmxlIG5hbWUgd2lsbCBiZSByZWR1Y2VkLCB3aGVuIHZhcmlhYmxlcworICAgYW5kIHRhYmxl cyBjYW5ub3QgdG8gaGF2ZSBzYW1lIG5hbWUuCisKKzQuIElmIHNjaGVtYSB2YXJpYWJsZXMgYXJl IHBnX2NsYXNzIGJhc2VkLCB0aGVuIHNvbWUgY3VycmVudCBzeW50YXggaGFzIHNlbnNlCisKKyAg ICBXZSBjYW4gc3VwcG9ydCBVUERBVEUgYW5kIFNFTEVDVCBjb21tYW5kcyBvbiB2YXJpYWJsZXMu CisKKyAgICBwb3NzaWJsZSBzeW50YXhlczoKKworICAgICAgICAtLSB0aGVyZSBjYW4gYmUgYSBh bmFsb2d5IHdpdGggcmVjb3JkIGZ1bmN0aW9ucworICAgICAgICBTRUxFQ1QgdmFybmFtZTsKKyAg ICAgICAgU0VMRUNUIHZhcm5hbWUuZmllbGQ7CisgICAgICAgIFNFTEVDVCB2YXJuYW1lIEZST00g dmFybmFtZTsgLS0gd2hlbiB2YXIgaXMgc2NhbGFyLCB0aGVuIHZhcm5hbWUgaW4gdGFyZ2V0IGxp c3QgaXMgc2NhbGFyCisKKyAgICAgICAgVVBEQVRFIHZhcm5hbWUgU0VUIHZhcm5hbWUgPSAxMDsg LS0gc2NhbGFyIHZlcnNpb24KKyAgICAgICAgVVBEQVRFIHZhcm5hbWUgU0VUIHZhcm5hbWUgPSAo eCx5LHopIC0tIGNvbXBvc2l0ZSB2ZXJzaW9uCisgICAgICAgIFVQREFURSB2YXJuYW1lIFNFVCB2 YXJuYW1lLmZpZWxkMSA9IHgsIHZhcm5hbWUuZmllbGQyID0geSwgLi4KKworICAgICAgICBMRVQg dmFybmFtZSA9IGV4cHI7CisgICAgICAgIExFVCB2YXJuYW1lLmZpZWxkMSA9IGV4cHI7CisgICAg ICAgIExFVCB2YXJuYW1lID0gKHgsIHksIHopOyAtLSBjb21wb3NpdGUgdmVyc2lvbgorCisgICBQ b3NzaWJsZQorICAgCisgICAgICAgIExFVCB2YXJuYW1lKGEsYikgPSAoc2VsZWN0ICgxMCwgMjAp IEZST00gLi4uICkKKworCis1LiBMRVQgY21kIGNhbiBiZSBpbXBsZW1lbnRlZCBhcyBDTUQgKGxp a2UgSU5TRVJULCBVUERBVEUsIERFTEVURSkgb3IgVXRpbGl0eSAobGlrZQorICAgQ3JlYXRlVGFi bGVBc1NlbGVjdCkuIFByZWZlciBmaXJzdCBvcHRpb24sIGJlY2F1c2UgdGhlcmUgY2FuIGJlIHBy ZXBhcmVkLCBjYW4gYmUKKyAgIHVzZWQgdG9nZXRoZXIgd2l0aCBFWFBMQUlOLCBldGMuCisKKyAg IEV4cGVjdGVkIGZvcm06CisgICAgIExFVCBmb28gPSAoU0VMRUNUIGlkIEZST00gYm9vIFdIRVJF IHNvbWUgPSAnaGVsbG8nKTsKKworICAgc28gcG9zc2liaWxpdHkgdG8gcnVuIEVYUExBSU4gTEVU IC4uIGhhcyBnb29kIGVub3VnaCBiZW5lZml0CisKKzYuIFdoYXQgc2hvdWxkIGJlIG1lY2hhbmlz bSBvZiBjb21wYXRpYmlsaXR5IGJldHdlZW4gYmFzZSB0eXBlIGFuZCB2YXJpYWJsZSB0eXBlPwor CisgICAgIENSRUFURSBWQVJJQUJMRSB4eCBBUyBCVAorCisgICBFeGFtcGxlOiBDUkVBVEUgVFlQ RSBjdCBBUyAoeCBpbnQsIGludCk7IENSRUFURSBWQVJJQUJMRSB2YXIgQVMgY3Q7CisgICB2YXIg dHlwZSAoaW1wbGljaXRseSBjcmVhdGVkKSBzaG91bGQgYmUgY29tcGF0aWJsZSB3aXRoIGN0IHR5 cGUsIGJlY2F1c2Ugd2Ugd2FudAorCisgICAgIExFVCB2YXIgPSAoMTAsMjApOjp2YXI7IExFVCB2 YXIgPSAoMTAsMjApOjpjdDsKKworNy4gV2hlbiBMRVQgY29tbWFuZCBhbGxvd3MgdG8gc3BlY2lm eSB0YXJnZXQgZmllbGQsIHRoZW4gdGhlcmUgaXMgcG9zc2libGUgY29sbGlzaW9uCisgICBJMS5J MiBjYW4gYmUgc2NoZW1hLnZhcmlhYmxlLCBidXQgc2hvdWxkIGJlIHZhcmlhYmxlLmZpZWxkIHRv by4gSXQgc2hvdWxkIGJlIHRlc3RlZAorICAgYW5kIGlmIGJvdGggdmFyaWFudHMgYXJlIHBvc3Np YmxlLCB0aGVuIGV4Y2VwdGlvbiBzaG91bGQgYmUgcmFpc2VkLiBMRVQgdmFyLmZpZWxkID0gZXhw cgorICAgaXMgYSBhbmFsb2d5IHRvIFVQREFURSB2YXIgU0VUIGZpZWxkID0gZXhwci4KKworCisq LwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5k ZXggYzFhOWJkYTQzMy4uZDJmYzYxYjM5OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAg LTI3Miw2ICsyNzIsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm9wbXNnc3RyaW5ncyBkcm9w bXNnc3RyaW5nYXJyYXlbXSA9IHsKIAkJZ2V0dGV4dF9ub29wKCJpbmRleCBcIiVzXCIgZG9lcyBu b3QgZXhpc3QsIHNraXBwaW5nIiksCiAJCWdldHRleHRfbm9vcCgiXCIlc1wiIGlzIG5vdCBhbiBp bmRleCIpLAogCWdldHRleHRfbm9vcCgiVXNlIERST1AgSU5ERVggdG8gcmVtb3ZlIGFuIGluZGV4 LiIpfSwKKwl7UkVMS0lORF9WQVJJQUJMRSwKKwkJRVJSQ09ERV9VTkRFRklORURfVEFCTEUsCisJ CWdldHRleHRfbm9vcCgic2NoZW1hIHZhcmlhYmxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIpLAor CQlnZXR0ZXh0X25vb3AoInNjaGVtYSB2YXJpYWJsZSBcIiVzXCIgZG9lcyBub3QgZXhpc3QsIHNr aXBwaW5nIiksCisJCWdldHRleHRfbm9vcCgiXCIlc1wiIGlzIG5vdCBhIHNjaGVtYSB2YXJpYWJs ZSIpLAorCWdldHRleHRfbm9vcCgiVXNlIERST1AgVkFSSUFCTEUgdG8gcmVtb3ZlIGEgdmFyaWFi bGUuIil9LAogCXsnXDAnLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfQogfTsKIApAQCAtMTAy NjcsNiArMTAyNzMsNyBAQCBBVEV4ZWNDaGFuZ2VPd25lcihPaWQgcmVsYXRpb25PaWQsIE9pZCBu ZXdPd25lcklkLCBib29sIHJlY3Vyc2luZywgTE9DS01PREUgbG9jawogCQljYXNlIFJFTEtJTkRf TUFUVklFVzoKIAkJY2FzZSBSRUxLSU5EX0ZPUkVJR05fVEFCTEU6CiAJCWNhc2UgUkVMS0lORF9Q QVJUSVRJT05FRF9UQUJMRToKKwkJY2FzZSBSRUxLSU5EX1ZBUklBQkxFOgogCQkJLyogb2sgdG8g Y2hhbmdlIG93bmVyICovCiAJCQlicmVhazsKIAkJY2FzZSBSRUxLSU5EX0lOREVYOgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNFeHByLmMKaW5kZXggZTI4NGZkNzFkNy4uNmY1YWEzOTkzZSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjRXhwci5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL25idHJlZS5o IgogI2luY2x1ZGUgImNhdGFsb2cvb2JqZWN0YWNjZXNzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z190eXBlLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvc2NoZW1hdmFyLmgiCiAjaW5jbHVkZSAiZXhl Y3V0b3IvZXhlY0V4cHIuaCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlU3VicGxhbi5oIgogI2lu Y2x1ZGUgImZ1bmNhcGkuaCIKQEAgLTcyNyw2ICs3MjgsNyBAQCBFeGVjSW5pdEV4cHJSZWMoRXhw ciAqbm9kZSwgRXhwclN0YXRlICpzdGF0ZSwKIAkJCXsKIAkJCQlQYXJhbQkgICAqcGFyYW0gPSAo UGFyYW0gKikgbm9kZTsKIAkJCQlQYXJhbUxpc3RJbmZvIHBhcmFtczsKKwkJCQlBY2xSZXN1bHQJ YWNscmVzdWx0OwogCiAJCQkJc3dpdGNoIChwYXJhbS0+cGFyYW1raW5kKQogCQkJCXsKQEAgLTcz NCw2ICs3MzYsMjMgQEAgRXhlY0luaXRFeHByUmVjKEV4cHIgKm5vZGUsIEV4cHJTdGF0ZSAqc3Rh dGUsCiAJCQkJCQlzY3JhdGNoLm9wY29kZSA9IEVFT1BfUEFSQU1fRVhFQzsKIAkJCQkJCXNjcmF0 Y2guZC5wYXJhbS5wYXJhbWlkID0gcGFyYW0tPnBhcmFtaWQ7CiAJCQkJCQlzY3JhdGNoLmQucGFy YW0ucGFyYW10eXBlID0gcGFyYW0tPnBhcmFtdHlwZTsKKwkJCQkJCUV4cHJFdmFsUHVzaFN0ZXAo c3RhdGUsICZzY3JhdGNoKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFBBUkFNX1NDSEVNQV9W QVJJQUJMRToKKwkJCQkJCS8qIENoZWNrIHBlcm1pc3Npb24gdG8gcmVhZCBzY2hlbWEgdmFyaWFi bGUgKi8KKwkJCQkJCWFjbHJlc3VsdCA9IHBnX2NsYXNzX2FjbGNoZWNrKHBhcmFtLT5wYXJhbWlk LCBHZXRVc2VySWQoKSwgQUNMX1NFTEVDVCk7CisJCQkJCQlpZiAoYWNscmVzdWx0ICE9IEFDTENI RUNLX09LKQorCQkJCQkJCWFjbGNoZWNrX2Vycm9yKGFjbHJlc3VsdCwgT0JKRUNUX1ZBUklBQkxF LCBnZXRfc2NoZW1hdmFyX25hbWUocGFyYW0tPnBhcmFtaWQpKTsKKworCQkJCQkJc2NyYXRjaC5v cGNvZGUgPSBFRU9QX1BBUkFNX1NDSEVNQV9WQVJJQUJMRTsKKwkJCQkJCXNjcmF0Y2guZC5wYXJh bS5wYXJhbWlkID0gcGFyYW0tPnBhcmFtaWQ7CisJCQkJCQlzY3JhdGNoLmQucGFyYW0ucGFyYW10 eXBlID0gcGFyYW0tPnBhcmFtdHlwZTsKKwkJCQkJCXNjcmF0Y2guZC5wYXJhbS5wYXJhbXR5cG1v ZCA9IHBhcmFtLT5wYXJhbXR5cG1vZDsKKworCQkJCQkJZ2V0X3R5cGxlbmJ5dmFsKHBhcmFtLT5w YXJhbXR5cGUsCisJCQkJCQkJCQkJCQkmc2NyYXRjaC5kLnBhcmFtLnBhcmFtdHlwbGVuLAorCQkJ CQkJCQkJCQkJJnNjcmF0Y2guZC5wYXJhbS5wYXJhbXR5cGJ5dmFsKTsKKwogCQkJCQkJRXhwckV2 YWxQdXNoU3RlcChzdGF0ZSwgJnNjcmF0Y2gpOwogCQkJCQkJYnJlYWs7CiAJCQkJCWNhc2UgUEFS QU1fRVhURVJOOgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRl cnAuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKaW5kZXggZTUzMGIy NjJkYS4uYTJiYjlhMDZjMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4 cHJJbnRlcnAuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCkBA IC01OSw2ICs1OSw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3R1cHRvYXN0ZXIuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJjb21tYW5kcy9zZXF1ZW5jZS5oIgorI2lu Y2x1ZGUgImNvbW1hbmRzL3NjaGVtYXZhci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNFeHBy LmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZVN1YnBsYW4uaCIKICNpbmNsdWRlICJmdW5jYXBp LmgiCkBAIC0zNTEsNiArMzUyLDcgQEAgRXhlY0ludGVycEV4cHIoRXhwclN0YXRlICpzdGF0ZSwg RXhwckNvbnRleHQgKmVjb250ZXh0LCBib29sICppc251bGwpCiAJCSYmQ0FTRV9FRU9QX1BBUkFN X0VYRUMsCiAJCSYmQ0FTRV9FRU9QX1BBUkFNX0VYVEVSTiwKIAkJJiZDQVNFX0VFT1BfUEFSQU1f Q0FMTEJBQ0ssCisJCSYmQ0FTRV9FRU9QX1BBUkFNX1NDSEVNQV9WQVJJQUJMRSwKIAkJJiZDQVNF X0VFT1BfQ0FTRV9URVNUVkFMLAogCQkmJkNBU0VfRUVPUF9NQUtFX1JFQURPTkxZLAogCQkmJkNB U0VfRUVPUF9JT0NPRVJDRSwKQEAgLTEwMDAsNiArMTAwMiwyMyBAQCBFeGVjSW50ZXJwRXhwcihF eHByU3RhdGUgKnN0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsIGJvb2wgKmlzbnVsbCkKIAkJ CUVFT19ORVhUKCk7CiAJCX0KIAorCQlFRU9fQ0FTRShFRU9QX1BBUkFNX1NDSEVNQV9WQVJJQUJM RSkKKwkJeworCQkJRGF0dW0JZDsKKwkJCWJvb2wJaXNudWxsOworCisJCQlkID0gR2V0U2NoZW1h VmFyaWFibGUob3AtPmQucGFyYW0ucGFyYW1pZCwgJmlzbnVsbCwKKwkJCQkJCQkJCQkJCQkgIG9w LT5kLnBhcmFtLnBhcmFtdHlwZSwKKwkJCQkJCQkJCQkJCQkgIC0xLAorCQkJCQkJCQkJCQkJCSAg b3AtPmQucGFyYW0ucGFyYW10eXBsZW4sCisJCQkJCQkJCQkJCQkJICBvcC0+ZC5wYXJhbS5wYXJh bXR5cGJ5dmFsKTsKKworCQkJKm9wLT5yZXN2YWx1ZSA9IGQ7CisJCQkqb3AtPnJlc251bGwgPSBp c251bGw7CisKKwkJCUVFT19ORVhUKCk7CisJCX0KKwogCQlFRU9fQ0FTRShFRU9QX1BBUkFNX0NB TExCQUNLKQogCQl7CiAJCQkvKiBhbGxvdyBhbiBleHRlbnNpb24gbW9kdWxlIHRvIHN1cHBseSBh IFBBUkFNX0VYVEVSTiB2YWx1ZSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY01haW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKaW5kZXggYWQ4ZWNh MGE5ZC4uMjNlNDQ4OWM5YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01h aW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCkBAIC0yMTEsNiArMjEx LDcgQEAgc3RhbmRhcmRfRXhlY3V0b3JTdGFydChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVm bGFncykKIAlzd2l0Y2ggKHF1ZXJ5RGVzYy0+b3BlcmF0aW9uKQogCXsKIAkJY2FzZSBDTURfU0VM RUNUOgorCQljYXNlIENNRF9MRVQ6CiAKIAkJCS8qCiAJCQkgKiBTRUxFQ1QgRk9SIFtLRVldIFVQ REFURS9TSEFSRSBhbmQgbW9kaWZ5aW5nIENURXMgbmVlZCB0byBtYXJrCkBAIC03NzUsNyArNzc2 LDggQEAgRXhlY0NoZWNrWGFjdFJlYWRPbmx5KFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCkKIAog CS8qCiAJICogRmFpbCBpZiB3cml0ZSBwZXJtaXNzaW9ucyBhcmUgcmVxdWVzdGVkIGluIHBhcmFs bGVsIG1vZGUgZm9yIHRhYmxlCi0JICogKHRlbXAgb3Igbm9uLXRlbXApLCBvdGhlcndpc2UgZmFp bCBmb3IgYW55IG5vbi10ZW1wIHRhYmxlLgorCSAqICh0ZW1wIG9yIG5vbi10ZW1wKSwgb3RoZXJ3 aXNlIGZhaWwgZm9yIGFueSBub24tdGVtcCB0YWJsZS4gQWxsb3cgdG8KKwkgKiBtb2RpZnkgY29u dGVudCBvZiBzY2hlbWEgdmFyaWFibGVzLgogCSAqLwogCWZvcmVhY2gobCwgcGxhbm5lZHN0bXQt PnJ0YWJsZSkKIAl7CkBAIC03OTAsNiArNzkyLDkgQEAgRXhlY0NoZWNrWGFjdFJlYWRPbmx5KFBs YW5uZWRTdG10ICpwbGFubmVkc3RtdCkKIAkJaWYgKGlzVGVtcE5hbWVzcGFjZShnZXRfcmVsX25h bWVzcGFjZShydGUtPnJlbGlkKSkpCiAJCQljb250aW51ZTsKIAorCQlpZiAocnRlLT5yZWxraW5k ID09IFJFTEtJTkRfVkFSSUFCTEUpCisJCQljb250aW51ZTsKKwogCQlQcmV2ZW50Q29tbWFuZElm UmVhZE9ubHkoQ3JlYXRlQ29tbWFuZFRhZygoTm9kZSAqKSBwbGFubmVkc3RtdCkpOwogCX0KIApA QCAtMTEyNSw2ICsxMTMwLDE0IEBAIENoZWNrVmFsaWRSZXN1bHRSZWwoUmVzdWx0UmVsSW5mbyAq cmVzdWx0UmVsSW5mbywgQ21kVHlwZSBvcGVyYXRpb24pCiAJCQkJCSBlcnJtc2coImNhbm5vdCBj aGFuZ2UgVE9BU1QgcmVsYXRpb24gXCIlc1wiIiwKIAkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShyZXN1bHRSZWwpKSkpOwogCQkJYnJlYWs7CisJCWNhc2UgUkVMS0lORF9WQVJJQUJMRToK KwkJCS8qIG9ubHkgTEVUIGNvbW1hbmQgY2FuIGNoYW5nZSBhIHZhcmlhYmxlICovCisJCQlpZiAo b3BlcmF0aW9uICE9IENNRF9MRVQpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2Rl KEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAorCQkJCQkJIGVycm1zZygiY2Fubm90IGNoYW5n ZSBzY2hlbWEgdmFyaWFibGUgXCIlc1wiIiwKKwkJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5h bWUocmVzdWx0UmVsKSkpKTsKKwkJCWJyZWFrOwogCQljYXNlIFJFTEtJTkRfVklFVzoKIAogCQkJ LyoKQEAgLTEyODUsNiArMTI5OCwxMyBAQCBDaGVja1ZhbGlkUm93TWFya1JlbChSZWxhdGlvbiBy ZWwsIFJvd01hcmtUeXBlIG1hcmtUeXBlKQogCQkJCQkJIGVycm1zZygiY2Fubm90IGxvY2sgcm93 cyBpbiBmb3JlaWduIHRhYmxlIFwiJXNcIiIsCiAJCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25O YW1lKHJlbCkpKSk7CiAJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX1ZBUklBQkxFOgorCQkJLyog TXVzdCBkaXNhbGxvdyB0aGlzIGJlY2F1c2Ugd2UgdGhlcmUgYXJlIG5vdCByb3dzICovCisJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1dST05HX09CSkVDVF9UWVBFKSwK KwkJCQkJIGVycm1zZygiY2Fubm90IGxvY2sgcm93cyBpbiBzY2hlbWEgdmFyaWFibGUgXCIlc1wi IiwKKwkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSkpOworCQkJYnJlYWs7CiAJ CWRlZmF1bHQ6CiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX1dST05H X09CSkVDVF9UWVBFKSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2Rp ZnlUYWJsZS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKaW5kZXgg N2VjMmM2YmNhYS4uMGI1ZTY1YTkyOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZU1vZGlmeVRhYmxlLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRh YmxlLmMKQEAgLTM5LDYgKzM5LDcgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMu aCIKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3NjaGVtYXZh ci5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3RyaWdnZXIuaCIKICNpbmNsdWRlICJleGVjdXRvci9l eGVjUGFydGl0aW9uLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKQEAgLTczLDYg Kzc0LDcgQEAgc3RhdGljIHZvaWQgRXhlY1NldHVwQ2hpbGRQYXJlbnRNYXBGb3JTdWJwbGFuKE1v ZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUpOwogc3RhdGljIFR1cGxlQ29udmVyc2lvbk1hcCAqdHVw Y29udl9tYXBfZm9yX3N1YnBsYW4oTW9kaWZ5VGFibGVTdGF0ZSAqbm9kZSwKIAkJCQkJCWludCB3 aGljaHBsYW4pOwogCisKIC8qCiAgKiBWZXJpZnkgdGhhdCB0aGUgdHVwbGVzIHRvIGJlIHByb2R1 Y2VkIGJ5IElOU0VSVCBvciBVUERBVEUgbWF0Y2ggdGhlCiAgKiB0YXJnZXQgcmVsYXRpb24ncyBy b3d0eXBlCkBAIC0xNTE2LDYgKzE1MTgsNzIgQEAgRXhlY09uQ29uZmxpY3RVcGRhdGUoTW9kaWZ5 VGFibGVTdGF0ZSAqbXRzdGF0ZSwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJ CUV4ZWNMZXQKKyAqCisgKgkJRm9yIExFVCwgd2UgaGF2ZSB0byB1cGRhdGUgdGFyZ2V0IHZhcmlh YmxlLAorICogICAgICBSZXR1cm5zIE5VTEwsIHRoZXJlIGFyZSBub3QgUkVUVVJOSU5HIGNsYXVz ZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIFR1cGxlVGFibGVTbG90ICoKK0V4ZWNMZXQoTW9k aWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSwKKwkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCisJCSAg IEVTdGF0ZSAqZXN0YXRlLAorCQkgICBib29sIGNhblNldFRhZykKK3sKKwlSZXN1bHRSZWxJbmZv ICpyZXN1bHRSZWxJbmZvOworCVJlbGF0aW9uCXJlc3VsdFJlbGF0aW9uRGVzYzsKKwlUdXBsZURl c2MJdHVwZGVzYzsKKwlib29sCQlpc251bGwgPSB0cnVlOworCURhdHVtCQl2YWx1ZTsKKwlGb3Jt X3BnX2F0dHJpYnV0ZSBhdHRyID0gTlVMTDsKKwlPaWQJCQl2YXJpZDsKKworCWlmIChzbG90ICE9 IE5VTEwgJiYgIXNsb3QtPnR0c19pc2VtcHR5KQorCXsKKwkJdHVwZGVzYyA9IHNsb3QtPnR0c190 dXBsZURlc2NyaXB0b3I7CisKKwkJQXNzZXJ0KHR1cGRlc2MgIT0gTlVMTCk7CisKKwkJLyogc2hv dWxkIGJlIGNoZWNrZWQgYmVmb3JlICovCisJCWlmICh0dXBkZXNjLT5uYXR0cyAhPSAxKQorCQkJ ZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgbnVtYmVyIG9mIGF0dHJpYnV0ZXMiKTsKKworCQlhdHRy ID0gVHVwbGVEZXNjQXR0cih0dXBkZXNjLCAwKTsKKworCQlpZiAoIXNsb3QtPnR0c19pc251bGxb MF0pCisJCXsKKwkJCWlzbnVsbCA9IGZhbHNlOworCQkJdmFsdWUgPSBzbG90LT50dHNfdmFsdWVz WzBdOworCQl9CisJfQorCisJLyoKKwkgKiBOb3csIGVzX3Jlc3VsdF9yZWxhdGlvbl9pbmZvIGlz IGVtcHR5LCBidXQgY2FuIGJlIGluaXRpYWxpemVkCisJICogdG8gc3RydWN0dXJlIG9mIHVzZWQg c2NoZW1hIHZhcmlhYmxlLgorCSAqLworCXJlc3VsdFJlbEluZm8gPSBlc3RhdGUtPmVzX3Jlc3Vs dF9yZWxhdGlvbl9pbmZvOworCXJlc3VsdFJlbGF0aW9uRGVzYyA9IHJlc3VsdFJlbEluZm8tPnJp X1JlbGF0aW9uRGVzYzsKKwl2YXJpZCA9IHJlc3VsdFJlbGF0aW9uRGVzYy0+cmRfaWQ7CisKKwlp ZiAoIWlzbnVsbCkKKwl7CisJCS8qIGV4cGVjdGluZyBzbyB2YXJpYWJsZSBhbmQgZXhwcmVzc2lv biBhcmUgZXF1YWwgKi8KKwkJU2V0U2NoZW1hVmFyaWFibGUodmFyaWQsIHZhbHVlLCBpc251bGws IGF0dHItPmF0dHR5cGlkLCAtMSk7CisJfQorCWVsc2UKKwl7CisJCVNldFNjaGVtYVZhcmlhYmxl KHZhcmlkLCAoRGF0dW0pIDAsIHRydWUsIEludmFsaWRPaWQsIC0xKTsKKwl9CisKKwlpZiAoY2Fu U2V0VGFnKQorCXsKKwkJQXNzZXJ0KGVzdGF0ZS0+ZXNfcHJvY2Vzc2VkID09IDApOworCQkoZXN0 YXRlLT5lc19wcm9jZXNzZWQpKys7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CiAKIC8qCiAgKiBQ cm9jZXNzIEJFRk9SRSBFQUNIIFNUQVRFTUVOVCB0cmlnZ2VycwpAQCAtMTU0OCw2ICsxNjE2LDkg QEAgZmlyZUJTVHJpZ2dlcnMoTW9kaWZ5VGFibGVTdGF0ZSAqbm9kZSkKIAkJY2FzZSBDTURfREVM RVRFOgogCQkJRXhlY0JTRGVsZXRlVHJpZ2dlcnMobm9kZS0+cHMuc3RhdGUsIHJlc3VsdFJlbElu Zm8pOwogCQkJYnJlYWs7CisJCWNhc2UgQ01EX0xFVDoKKwkJCS8qIHRoZXJlIGFyZSBubyB0cmln Z2VyICovCisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bmtub3duIG9w ZXJhdGlvbiIpOwogCQkJYnJlYWs7CkBAIC0xNjAzLDYgKzE2NzQsOSBAQCBmaXJlQVNUcmlnZ2Vy cyhNb2RpZnlUYWJsZVN0YXRlICpub2RlKQogCQkJRXhlY0FTRGVsZXRlVHJpZ2dlcnMobm9kZS0+ cHMuc3RhdGUsIHJlc3VsdFJlbEluZm8sCiAJCQkJCQkJCSBub2RlLT5tdF90cmFuc2l0aW9uX2Nh cHR1cmUpOwogCQkJYnJlYWs7CisJCWNhc2UgQ01EX0xFVDoKKwkJCS8qIHZhcmlhYmxlcyBoYXMg bm90IHRyaWdnZXJzICovCisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1 bmtub3duIG9wZXJhdGlvbiIpOwogCQkJYnJlYWs7CkBAIC0yMTQyLDYgKzIyMTYsOSBAQCBFeGVj TW9kaWZ5VGFibGUoUGxhblN0YXRlICpwc3RhdGUpCiAJCQkJCQkJCSAgTlVMTCwgdHJ1ZSwgbm9k ZS0+Y2FuU2V0VGFnLAogCQkJCQkJCQkgIGZhbHNlIC8qIGNoYW5naW5nUGFydCAqLyk7CiAJCQkJ YnJlYWs7CisJCQljYXNlIENNRF9MRVQ6CisJCQkJc2xvdCA9IEV4ZWNMZXQobm9kZSwgc2xvdCwg ZXN0YXRlLCBub2RlLT5jYW5TZXRUYWcpOworCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQll bG9nKEVSUk9SLCAidW5rbm93biBvcGVyYXRpb24iKTsKIAkJCQlicmVhazsKQEAgLTI1NTIsNiAr MjYyOSw3IEBAIEV4ZWNJbml0TW9kaWZ5VGFibGUoTW9kaWZ5VGFibGUgKm5vZGUsIEVTdGF0ZSAq ZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkJCWJyZWFrOwogCQkJY2FzZSBDTURfVVBEQVRFOgogCQkJ Y2FzZSBDTURfREVMRVRFOgorCQkJY2FzZSBDTURfTEVUOgogCQkJCWp1bmtfZmlsdGVyX25lZWRl ZCA9IHRydWU7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivc3BpLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9zcGkuYwppbmRleCAwOGY2 ZjY3YTE1Li5lMTA3YWJmNmFmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9zcGku YworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9zcGkuYwpAQCAtMjQyMCw2ICsyNDIwLDkgQEAg X1NQSV9wcXVlcnkoUXVlcnlEZXNjICpxdWVyeURlc2MsIGJvb2wgZmlyZV90cmlnZ2VycywgdWlu dDY0IHRjb3VudCkKIAkJCWVsc2UKIAkJCQlyZXMgPSBTUElfT0tfVVBEQVRFOwogCQkJYnJlYWs7 CisJCWNhc2UgQ01EX0xFVDoKKwkJCXJlcyA9IFNQSV9PS19VVElMSVRZOworCQkJYnJlYWs7CiAJ CWRlZmF1bHQ6CiAJCQlyZXR1cm4gU1BJX0VSUk9SX09QVU5LTk9XTjsKIAl9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlm dW5jcy5jCmluZGV4IDdjMDQ1YTdhZmUuLmNmYTY1MjNjOWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL25vZGVzL2NvcHlmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5j CkBAIC0zMTAzLDYgKzMxMDMsMTggQEAgX2NvcHlTZWxlY3RTdG10KGNvbnN0IFNlbGVjdFN0bXQg KmZyb20pCiAJcmV0dXJuIG5ld25vZGU7CiB9CiAKK3N0YXRpYyBMZXRTdG10ICoKK19jb3B5TGV0 U3RtdChjb25zdCBMZXRTdG10ICpmcm9tKQoreworCUxldFN0bXQgKm5ld25vZGUgPSBtYWtlTm9k ZShMZXRTdG10KTsKKworCUNPUFlfTk9ERV9GSUVMRCh0YXJnZXQpOworCUNPUFlfTk9ERV9GSUVM RChzZWxlY3RTdG10KTsKKwlDT1BZX0xPQ0FUSU9OX0ZJRUxEKGxvY2F0aW9uKTsKKworCXJldHVy biBuZXdub2RlOworfQorCiBzdGF0aWMgU2V0T3BlcmF0aW9uU3RtdCAqCiBfY29weVNldE9wZXJh dGlvblN0bXQoY29uc3QgU2V0T3BlcmF0aW9uU3RtdCAqZnJvbSkKIHsKQEAgLTUxNDgsNiArNTE2 MCw5IEBAIGNvcHlPYmplY3RJbXBsKGNvbnN0IHZvaWQgKmZyb20pCiAJCWNhc2UgVF9TZWxlY3RT dG10OgogCQkJcmV0dmFsID0gX2NvcHlTZWxlY3RTdG10KGZyb20pOwogCQkJYnJlYWs7CisJCWNh c2UgVF9MZXRTdG10OgorCQkJcmV0dmFsID0gX2NvcHlMZXRTdG10KGZyb20pOworCQkJYnJlYWs7 CiAJCWNhc2UgVF9TZXRPcGVyYXRpb25TdG10OgogCQkJcmV0dmFsID0gX2NvcHlTZXRPcGVyYXRp b25TdG10KGZyb20pOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9l cXVhbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNzLmMKaW5kZXggNmE5NzFk MDE0MS4uYzcwMWFlZGRmMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5j cy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVuY3MuYwpAQCAtMTA1Nyw2ICsxMDU3 LDE2IEBAIF9lcXVhbFNlbGVjdFN0bXQoY29uc3QgU2VsZWN0U3RtdCAqYSwgY29uc3QgU2VsZWN0 U3RtdCAqYikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIGJvb2wKK19lcXVhbExldFN0bXQo Y29uc3QgTGV0U3RtdCAqYSwgY29uc3QgTGV0U3RtdCAqYikKK3sKKwlDT01QQVJFX05PREVfRklF TEQodGFyZ2V0KTsKKwlDT01QQVJFX05PREVfRklFTEQoc2VsZWN0U3RtdCk7CisJQ09NUEFSRV9M T0NBVElPTl9GSUVMRChsb2NhdGlvbik7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIGJv b2wKIF9lcXVhbFNldE9wZXJhdGlvblN0bXQoY29uc3QgU2V0T3BlcmF0aW9uU3RtdCAqYSwgY29u c3QgU2V0T3BlcmF0aW9uU3RtdCAqYikKIHsKQEAgLTMyMjUsNiArMzIzNSw5IEBAIGVxdWFsKGNv bnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCiAJCWNhc2UgVF9TZWxlY3RTdG10OgogCQkJcmV0 dmFsID0gX2VxdWFsU2VsZWN0U3RtdChhLCBiKTsKIAkJCWJyZWFrOworCQljYXNlIFRfTGV0U3Rt dDoKKwkJCXJldHZhbCA9IF9lcXVhbExldFN0bXQoYSwgYik7CisJCQlicmVhazsKIAkJY2FzZSBU X1NldE9wZXJhdGlvblN0bXQ6CiAJCQlyZXR2YWwgPSBfZXF1YWxTZXRPcGVyYXRpb25TdG10KGEs IGIpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3Mu YyBiL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCmluZGV4IGExMDAxNGY3NTUuLmE5MzEy MzdjMWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCkBAIC0zNDY5LDYgKzM0NjksMTYgQEAgcmF3X2V4 cHJlc3Npb25fdHJlZV93YWxrZXIoTm9kZSAqbm9kZSwKIAkJCQkJcmV0dXJuIHRydWU7CiAJCQl9 CiAJCQlicmVhazsKKwkJY2FzZSBUX0xldFN0bXQ6CisJCQl7CisJCQkJTGV0U3RtdCAqc3RtdCA9 IChMZXRTdG10ICopIG5vZGU7CisKKwkJCQlpZiAod2Fsa2VyKHN0bXQtPnRhcmdldCwgY29udGV4 dCkpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmICh3YWxrZXIoc3RtdC0+c2VsZWN0U3RtdCwg Y29udGV4dCkpCisJCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJYnJlYWs7CiAJCWNhc2UgVF9B X0V4cHI6CiAJCQl7CiAJCQkJQV9FeHByCSAgICpleHByID0gKEFfRXhwciAqKSBub2RlOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jCmluZGV4IDUwNWFlMGFmODUuLmFlZTE2ZjQ2NzYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYworKysgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMKQEAgLTEyNDksMTIgKzEyNDksMTUg QEAgbWF4X3BhcmFsbGVsX2hhemFyZF93YWxrZXIoTm9kZSAqbm9kZSwgbWF4X3BhcmFsbGVsX2hh emFyZF9jb250ZXh0ICpjb250ZXh0KQogCSAqIFBBUkFNX0VYRUMgUGFyYW1zIGxpc3RlZCBpbiBz YWZlX3BhcmFtX2lkcywgbWVhbmluZyB0aGV5IGNvdWxkIGJlCiAJICogZWl0aGVyIGdlbmVyYXRl ZCB3aXRoaW4gdGhlIHdvcmtlciBvciBjYW4gYmUgY29tcHV0ZWQgaW4gbWFzdGVyIGFuZAogCSAq IHRoZW4gdGhlaXIgdmFsdWUgY2FuIGJlIHBhc3NlZCB0byB0aGUgd29ya2VyLgorCSAqIFBBUkFN X1NDSEVNQV9WQVJJQUJMRSBwYXJhbXMgYXJlIG5ld2VyIGNoYW5nZWQgYnkgd29ya2Vycywgc28g dGhleSBjYW4gYmUKKwkgKiBzYWZlLgogCSAqLwogCWVsc2UgaWYgKElzQShub2RlLCBQYXJhbSkp CiAJewogCQlQYXJhbQkgICAqcGFyYW0gPSAoUGFyYW0gKikgbm9kZTsKIAotCQlpZiAocGFyYW0t PnBhcmFta2luZCA9PSBQQVJBTV9FWFRFUk4pCisJCWlmIChwYXJhbS0+cGFyYW1raW5kID09IFBB UkFNX0VYVEVSTiB8fAorCQkJcGFyYW0tPnBhcmFta2luZCA9PSBQQVJBTV9TQ0hFTUFfVkFSSUFC TEUpCiAJCQlyZXR1cm4gZmFsc2U7CiAKIAkJaWYgKHBhcmFtLT5wYXJhbWtpbmQgIT0gUEFSQU1f RVhFQyB8fApAQCAtNDc5Myw3ICs0Nzk2LDcgQEAgc3Vic3RpdHV0ZV9hY3R1YWxfcGFyYW1ldGVy c19tdXRhdG9yKE5vZGUgKm5vZGUsCiB7CiAJaWYgKG5vZGUgPT0gTlVMTCkKIAkJcmV0dXJuIE5V TEw7Ci0JaWYgKElzQShub2RlLCBQYXJhbSkpCisJaWYgKElzQShub2RlLCBQYXJhbSkgJiYgKChQ YXJhbSAqKSBub2RlKS0+cGFyYW1raW5kICE9IFBBUkFNX1NDSEVNQV9WQVJJQUJMRSkKIAl7CiAJ CVBhcmFtCSAgICpwYXJhbSA9IChQYXJhbSAqKSBub2RlOwogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9wYXJzZXIvYW5hbHl6ZS5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYwppbmRl eCAwYzY2ZWExZGZjLi5hOWYzOWI1YWE3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIv YW5hbHl6ZS5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9hbmFseXplLmMKQEAgLTI0LDYgKzI0 LDcgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlICJhY2Nlc3MvaGVhcGFt LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3N5c2F0dHIuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5 cGUuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKQEAgLTQyLDggKzQzLDEyIEBACiAjaW5jbHVk ZSAicGFyc2VyL3BhcnNlX3BhcmFtLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0aW9u LmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3RhcmdldC5oIgorI2luY2x1ZGUgInBhcnNlci9w YXJzZV90eXBlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgogI2luY2x1ZGUgInJl d3JpdGUvcmV3cml0ZU1hbmlwLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNs dWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy90eXBjYWNoZS5oIgogI2lu Y2x1ZGUgInV0aWxzL3JlbC5oIgogCiAKQEAgLTU2LDYgKzYxLDcgQEAgc3RhdGljIFF1ZXJ5ICp0 cmFuc2Zvcm1JbnNlcnRTdG10KFBhcnNlU3RhdGUgKnBzdGF0ZSwgSW5zZXJ0U3RtdCAqc3RtdCk7 CiBzdGF0aWMgTGlzdCAqdHJhbnNmb3JtSW5zZXJ0Um93KFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlz dCAqZXhwcmxpc3QsCiAJCQkJICAgTGlzdCAqc3RtdGNvbHMsIExpc3QgKmljb2x1bW5zLCBMaXN0 ICphdHRybm9zLAogCQkJCSAgIGJvb2wgc3RyaXBfaW5kaXJlY3Rpb24pOworc3RhdGljIFF1ZXJ5 ICp0cmFuc2Zvcm1MZXRTdG10KFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGV0U3RtdCAqc3RtdCk7CiBz dGF0aWMgT25Db25mbGljdEV4cHIgKnRyYW5zZm9ybU9uQ29uZmxpY3RDbGF1c2UoUGFyc2VTdGF0 ZSAqcHN0YXRlLAogCQkJCQkJICBPbkNvbmZsaWN0Q2xhdXNlICpvbkNvbmZsaWN0Q2xhdXNlKTsK IHN0YXRpYyBpbnQJY291bnRfcm93ZXhwcl9jb2x1bW5zKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTm9k ZSAqZXhwcik7CkBAIC0yNjcsNiArMjczLDcgQEAgdHJhbnNmb3JtU3RtdChQYXJzZVN0YXRlICpw c3RhdGUsIE5vZGUgKnBhcnNlVHJlZSkKIAkJY2FzZSBUX0luc2VydFN0bXQ6CiAJCWNhc2UgVF9V cGRhdGVTdG10OgogCQljYXNlIFRfRGVsZXRlU3RtdDoKKwkJY2FzZSBUX0xldFN0bXQ6CiAJCQko dm9pZCkgdGVzdF9yYXdfZXhwcmVzc2lvbl9jb3ZlcmFnZShwYXJzZVRyZWUsIE5VTEwpOwogCQkJ YnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC0zMDQsNiArMzExLDEwIEBAIHRyYW5zZm9ybVN0bXQoUGFy c2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpwYXJzZVRyZWUpCiAJCQl9CiAJCQlicmVhazsKIAorCQlj YXNlIFRfTGV0U3RtdDoKKwkJCXJlc3VsdCA9IHRyYW5zZm9ybUxldFN0bXQocHN0YXRlLCAoTGV0 U3RtdCAqKSBwYXJzZVRyZWUpOworCQkJYnJlYWs7CisKIAkJCS8qCiAJCQkgKiBTcGVjaWFsIGNh c2VzCiAJCQkgKi8KQEAgLTM2Nyw2ICszNzgsNyBAQCBhbmFseXplX3JlcXVpcmVzX3NuYXBzaG90 KFJhd1N0bXQgKnBhcnNlVHJlZSkKIAkJY2FzZSBUX0RlbGV0ZVN0bXQ6CiAJCWNhc2UgVF9VcGRh dGVTdG10OgogCQljYXNlIFRfU2VsZWN0U3RtdDoKKwkJY2FzZSBUX0xldFN0bXQ6CiAJCQlyZXN1 bHQgPSB0cnVlOwogCQkJYnJlYWs7CiAKQEAgLTE1NDEsNiArMTU1MywzNTQgQEAgdHJhbnNmb3Jt VmFsdWVzQ2xhdXNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgU2VsZWN0U3RtdCAqc3RtdCkKIAlyZXR1 cm4gcXJ5OwogfQogCisvKgorICogdHJhbnNmb3JtTGV0U3RtdCAtCisgKgkgIHRyYW5zZm9ybSBh biBMZXQgU3RhdGVtZW50CisgKi8KK3N0YXRpYyBRdWVyeSAqCit0cmFuc2Zvcm1MZXRTdG10KFBh cnNlU3RhdGUgKnBzdGF0ZSwgTGV0U3RtdCAqc3RtdCkKK3sKKwlRdWVyeQkgICAqcXJ5ID0gbWFr ZU5vZGUoUXVlcnkpOworCUxpc3QJICAgKmV4cHJMaXN0ID0gTklMOworCUxpc3QJICAgKmV4cHJM aXN0Q29lciA9IE5JTDsKKwlMaXN0CSAgICpzdWJfcnRhYmxlOworCUxpc3QJICAgKnN1Yl9uYW1l c3BhY2U7CisJUmFuZ2VUYmxFbnRyeSAqcnRlOworCVJhbmdlVGJsUmVmICpydHI7CisJTGlzdENl bGwgICAqbGM7CisJQWNsTW9kZQkJdGFyZ2V0UGVybXM7CisJUGFyc2VTdGF0ZSAqc3ViX3BzdGF0 ZTsKKwlRdWVyeQkgICAqc2VsZWN0UXVlcnk7CisJaW50CQkJaSA9IDA7CisKKwlSYW5nZVZhciAg ICpydmFyOworCWNoYXIJICAgKnN0cjEgPSBOVUxMOworCWNoYXIJICAgKnN0cjIgPSBOVUxMOwor CWNoYXIJICAgKnN0cjMgPSBOVUxMOworCWNoYXIJICAgKmZpZWxkbmFtZTsKKwlpbnQJCQlmaWVs ZG5hbWVfcG9zOworCUxpc3QJICAgKmluZGlyZWN0aW9uID0gTklMOworCWludAkJCWluZGlyZWN0 aW9uX3BvcyA9IC0xOworCisJUmVsYXRpb24JcmQ7CisJT2lkCQkJdmFydHlwaWQgPSBJbnZhbGlk T2lkOworCWludDMyCQl2YXJ0eXBtb2QgPSAtMTsKKwlPaWQJCQl2YXJpZDsKKworCVBhcnNlRXhw cktpbmQgc3ZfZXhwcl9raW5kOworCisJc3ZfZXhwcl9raW5kID0gcHN0YXRlLT5wX2V4cHJfa2lu ZDsKKwlwc3RhdGUtPnBfZXhwcl9raW5kID0gRVhQUl9LSU5EX1VQREFURV9UQVJHRVQ7CisKKwkv KiBUaGVyZSBjYW4ndCBiZSBhbnkgb3V0ZXIgV0lUSCB0byB3b3JyeSBhYm91dCAqLworCUFzc2Vy dChwc3RhdGUtPnBfY3RlbmFtZXNwYWNlID09IE5JTCk7CisKKwlxcnktPmNvbW1hbmRUeXBlID0g Q01EX0xFVDsKKwlwc3RhdGUtPnBfaXNfbGV0ID0gdHJ1ZTsKKworCXN3aXRjaCAobGlzdF9sZW5n dGgoc3RtdC0+dGFyZ2V0KSkKKwl7CisJCWNhc2UgMToKKwkJCXsKKwkJCQlOb2RlCSpmaWVsZDEg PSAoTm9kZSAqKSBsaW5pdGlhbChzdG10LT50YXJnZXQpOworCisJCQkJQXNzZXJ0KElzQShmaWVs ZDEsIFN0cmluZykpOworCQkJCXN0cjIgPSBzdHJWYWwoZmllbGQxKTsKKwkJCX0KKwkJCWJyZWFr OworCQljYXNlIDI6CisJCQl7CisJCQkJTm9kZQkqZmllbGQxID0gKE5vZGUgKikgbGluaXRpYWwo c3RtdC0+dGFyZ2V0KTsKKwkJCQlOb2RlCSpmaWVsZDIgPSAoTm9kZSAqKSBsc2Vjb25kKHN0bXQt PnRhcmdldCk7CisKKwkJCQlBc3NlcnQoSXNBKGZpZWxkMSwgU3RyaW5nKSk7CisKKwkJCQlpZiAo SXNBKGZpZWxkMiwgU3RyaW5nKSkKKwkJCQl7CisJCQkJCXN0cjEgPSBzdHJWYWwoZmllbGQxKTsK KwkJCQkJc3RyMiA9IHN0clZhbChmaWVsZDIpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJ CQlzdHIyID0gc3RyVmFsKGZpZWxkMSk7CisJCQkJCWluZGlyZWN0aW9uX3BvcyA9IDI7CisJCQkJ fQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXsKKwkJCQlOb2RlCSpmaWVsZDEgPSAo Tm9kZSAqKSBsaW5pdGlhbChzdG10LT50YXJnZXQpOworCQkJCU5vZGUJKmZpZWxkMiA9IChOb2Rl ICopIGxzZWNvbmQoc3RtdC0+dGFyZ2V0KTsKKwkJCQlOb2RlCSpmaWVsZDMgPSAoTm9kZSAqKSBs dGhpcmQoc3RtdC0+dGFyZ2V0KTsKKworCQkJCUFzc2VydChJc0EoZmllbGQxLCBTdHJpbmcpKTsK KworCQkJCWlmICghSXNBKGZpZWxkMiwgU3RyaW5nKSkKKwkJCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJCSBlcnJtc2coImJyb2tl biBzY2hlbWEgdmFyaWFibGUgaWRlbnRpZmllciIpLAorCQkJCQkJCSBwYXJzZXJfZXJycG9zaXRp b24ocHN0YXRlLCBzdG10LT5sb2NhdGlvbikpKTsKKworCQkJCWlmIChJc0EoZmllbGQyLCBTdHJp bmcpICYmIElzQShmaWVsZDMsIFN0cmluZykpCisJCQkJeworCQkJCQlzdHIxID0gc3RyVmFsKGZp ZWxkMSk7CisJCQkJCXN0cjIgPSBzdHJWYWwoZmllbGQyKTsKKwkJCQkJc3RyMyA9IHN0clZhbChm aWVsZDMpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlzdHIxID0gc3RyVmFsKGZpZWxk MSk7CisJCQkJCXN0cjIgPSBzdHJWYWwoZmllbGQyKTsKKwkJCQkJaW5kaXJlY3Rpb25fcG9zID0g MzsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJeworCQkJCU5vZGUJKmZp ZWxkMSA9IChOb2RlICopIGxpbml0aWFsKHN0bXQtPnRhcmdldCk7CisJCQkJTm9kZQkqZmllbGQy ID0gKE5vZGUgKikgbHNlY29uZChzdG10LT50YXJnZXQpOworCQkJCU5vZGUJKmZpZWxkMyA9IChO b2RlICopIGx0aGlyZChzdG10LT50YXJnZXQpOworCQkJCU5vZGUJKmZpZWxkNCA9IChOb2RlICop IGxmb3VydGgoc3RtdC0+dGFyZ2V0KTsKKworCQkJCUFzc2VydChJc0EoZmllbGQxLCBTdHJpbmcp KTsKKworCQkJCWlmIChJc0EoZmllbGQyLCBTdHJpbmcpICYmIElzQShmaWVsZDMsIFN0cmluZykg JiYgIUlzQShmaWVsZDQsIFN0cmluZykpCisJCQkJeworCQkJCQlzdHIxID0gc3RyVmFsKGZpZWxk MSk7CisJCQkJCXN0cjIgPSBzdHJWYWwoZmllbGQyKTsKKwkJCQkJc3RyMyA9IHN0clZhbChmaWVs ZDMpOworCQkJCQlpbmRpcmVjdGlvbl9wb3MgPSA0OworCQkJCX0KKwkJCQllbHNlCisJCQkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJ CQkgZXJybXNnKCJicm9rZW4gc2NoZW1hIHZhcmlhYmxlIGlkZW50aWZpZXIiKSwKKwkJCQkJCQkg cGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgc3RtdC0+bG9jYXRpb24pKSk7CisJCQl9CisJCQli cmVhazsKKworCisJCWRlZmF1bHQ6CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShF UlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCSBlcnJtc2coImltcHJvcGVyIHF1YWxpZmllZCBu YW1lIiksCisJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgc3RtdC0+bG9jYXRpb24p KSk7CisJfQorCisJcnZhciA9IG1ha2VSYW5nZVZhckZvclRhcmdldE9mU2NoZW1hVmFyaWFibGUo cHN0YXRlLCBzdHIxLCBzdHIyLCBzdHIzLAorCQkJCQkJCQkJCQkJICBzdG10LT5sb2NhdGlvbiwg JmZpZWxkbmFtZSwKKwkJCQkJCQkJCQkJCSAgJmZpZWxkbmFtZV9wb3MsIGZhbHNlKTsKKworCS8q CisJICogSWYgYSBub24tbmlsIHJhbmdldGFibGUvbmFtZXNwYWNlIHdhcyBwYXNzZWQgaW4sIGFu ZCB3ZSBhcmUgZG9pbmcKKwkgKiBJTlNFUlQvU0VMRUNULCBhcnJhbmdlIHRvIHBhc3MgdGhlIHJh bmdldGFibGUvbmFtZXNwYWNlIGRvd24gdG8gdGhlCisJICogU0VMRUNULiAgVGhpcyBjYW4gb25s eSBoYXBwZW4gaWYgd2UgYXJlIGluc2lkZSBhIENSRUFURSBSVUxFLCBhbmQgaW4KKwkgKiB0aGF0 IGNhc2Ugd2Ugd2FudCB0aGUgcnVsZSdzIE9MRCBhbmQgTkVXIHJ0YWJsZSBlbnRyaWVzIHRvIGFw cGVhciBhcworCSAqIHBhcnQgb2YgdGhlIFNFTEVDVCdzIHJ0YWJsZSwgbm90IGFzIG91dGVyIHJl ZmVyZW5jZXMgZm9yIGl0LiAgKEtsdWdlISkKKwkgKiBUaGUgU0VMRUNUJ3Mgam9pbmxpc3QgaXMg bm90IGFmZmVjdGVkIGhvd2V2ZXIuICBXZSBtdXN0IGRvIHRoaXMgYmVmb3JlCisJICogYWRkaW5n IHRoZSB0YXJnZXQgdGFibGUgdG8gdGhlIElOU0VSVCdzIHJ0YWJsZS4KKwkgKi8KKwlzdWJfcnRh YmxlID0gcHN0YXRlLT5wX3J0YWJsZTsKKwlwc3RhdGUtPnBfcnRhYmxlID0gTklMOworCXN1Yl9u YW1lc3BhY2UgPSBwc3RhdGUtPnBfbmFtZXNwYWNlOworCXBzdGF0ZS0+cF9uYW1lc3BhY2UgPSBO SUw7CisKKwl0YXJnZXRQZXJtcyA9IEFDTF9VUERBVEU7CisJcXJ5LT5yZXN1bHRSZWxhdGlvbiA9 IHNldFRhcmdldFRhYmxlKHBzdGF0ZSwgcnZhciwKKwkJCQkJCQkJCQkgZmFsc2UsIGZhbHNlLCB0 YXJnZXRQZXJtcyk7CisKKwlyZCA9IHBzdGF0ZS0+cF90YXJnZXRfcmVsYXRpb247CisKKwl2YXJ0 eXBpZCA9IHJkLT5yZF9yZWwtPnJlbG9mdHlwZTsKKwl2YXJpZCA9IHJkLT5yZF9pZDsKKworCWlm ICh2YXJ0eXBpZCAhPSBJbnZhbGlkT2lkKQorCXsKKwkJaWYgKGdldF90eXB0eXBlKHZhcnR5cGlk KSAhPSBUWVBUWVBFX0NPTVBPU0lURSkKKwkJeworCQkJVHVwbGVEZXNjCXR1cGRlc2M7CisJCQlS ZWxhdGlvbglyZWw7CisJCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyU3RydWN0OworCisJCQkvKiBm aW5kIGZpcnN0IGZpZWxkICovCisJCQlyZWwgPSByZWxhdGlvbl9vcGVuKHR5cGVpZFR5cGVSZWxp ZChyZC0+cmRfcmVsLT5yZWx0eXBlKSwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCXR1cGRlc2MgPSBD cmVhdGVUdXBsZURlc2NDb3B5KFJlbGF0aW9uR2V0RGVzY3IocmVsKSk7CisKKwkJCWF0dHJTdHJ1 Y3QgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2MsIDApOworCisJCQl2YXJ0eXBpZCA9IGF0dHJTdHJ1 Y3QtPmF0dHR5cGlkOworCQkJdmFydHlwbW9kID0gYXR0clN0cnVjdC0+YXR0dHlwbW9kOworCisJ CQlGcmVlVHVwbGVEZXNjKHR1cGRlc2MpOworCQkJcmVsYXRpb25fY2xvc2UocmVsLCBBY2Nlc3NT aGFyZUxvY2spOworCQl9CisJCWVsc2UKKwkJeworCQkJdmFydHlwaWQgPSByZC0+cmRfcmVsLT5y ZWxvZnR5cGU7CisJCQl2YXJ0eXBtb2QgPSAtMTsKKwkJfQorCX0KKwllbHNlCisJeworCQl2YXJ0 eXBpZCA9IHJkLT5yZF9yZWwtPnJlbHR5cGU7CisJCXZhcnR5cG1vZCA9IC0xOworCX0KKworCWlm IChmaWVsZG5hbWUgIT0gTlVMTCkKKwkJaW5kaXJlY3Rpb24gPSBsaXN0X2NvcHlfdGFpbChzdG10 LT50YXJnZXQsIGZpZWxkbmFtZV9wb3MgLSAxKTsKKwllbHNlIGlmIChpbmRpcmVjdGlvbl9wb3Mg Pj0gMikKKwkJaW5kaXJlY3Rpb24gPSBsaXN0X2NvcHlfdGFpbChzdG10LT50YXJnZXQsIGluZGly ZWN0aW9uX3BvcyAtIDEpOworCisJLyoKKwkgKiBXZSBtYWtlIHRoZSBzdWItcHN0YXRlIGEgY2hp bGQgb2YgdGhlIG91dGVyIHBzdGF0ZSBzbyB0aGF0IGl0IGNhbgorCSAqIHNlZSBhbnkgUGFyYW0g ZGVmaW5pdGlvbnMgc3VwcGxpZWQgZnJvbSBhYm92ZS4gIFNpbmNlIHRoZSBvdXRlcgorCSAqIHBz dGF0ZSdzIHJ0YWJsZSBhbmQgbmFtZXNwYWNlIGFyZSBwcmVzZW50bHkgZW1wdHksIHRoZXJlIGFy ZSBubworCSAqIHNpZGUtZWZmZWN0cyBvZiBleHBvc2luZyBuYW1lcyB0aGUgc3ViLVNFTEVDVCBz aG91bGRuJ3QgYmUgYWJsZSB0bworCSAqIHNlZS4KKwkgKi8KKwlzdWJfcHN0YXRlID0gbWFrZV9w YXJzZXN0YXRlKHBzdGF0ZSk7CisKKwkvKgorCSAqIFByb2Nlc3MgdGhlIHNvdXJjZSBTRUxFQ1Qu CisJICoKKwkgKiBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGlzIGJlIGhhbmRsZWQganVzdCBsaWtl IGEgc3RhbmRhbG9uZSBTRUxFQ1Q7CisJICogb3RoZXJ3aXNlIHRoZSBiZWhhdmlvciBvZiBTRUxF Q1Qgd2l0aGluIElOU0VSVCBtaWdodCBiZSBkaWZmZXJlbnQKKwkgKiBmcm9tIGEgc3RhbmQtYWxv bmUgU0VMRUNULiAoSW5kZWVkLCBQb3N0Z3JlcyB1cCB0aHJvdWdoIDYuNSBoYWQKKwkgKiBidWdz IG9mIGp1c3QgdGhhdCBuYXR1cmUuLi4pCisJICoKKwkgKiBUaGUgc29sZSBleGNlcHRpb24gaXMg dGhhdCB3ZSBwcmV2ZW50IHJlc29sdmluZyB1bmtub3duLXR5cGUKKwkgKiBvdXRwdXRzIGFzIFRF WFQuICBUaGlzIGRvZXMgbm90IGNoYW5nZSB0aGUgc2VtYW50aWNzIHNpbmNlIGlmIHRoZQorCSAq IGNvbHVtbiB0eXBlIG1hdHRlcnMgc2VtYW50aWNhbGx5LCBpdCB3b3VsZCBoYXZlIGJlZW4gcmVz b2x2ZWQgdG8KKwkgKiBzb21ldGhpbmcgZWxzZSBhbnl3YXkuICBEb2luZyB0aGlzIGxldHMgdXMg cmVzb2x2ZSBzdWNoIG91dHB1dHMgYXMKKwkgKiB0aGUgdGFyZ2V0IGNvbHVtbidzIHR5cGUsIHdo aWNoIHdlIGhhbmRsZSBiZWxvdy4KKwkgKi8KKwlzdWJfcHN0YXRlLT5wX3J0YWJsZSA9IHN1Yl9y dGFibGU7CisJc3ViX3BzdGF0ZS0+cF9qb2luZXhwcnMgPSBOSUw7CS8qIHN1Yl9ydGFibGUgaGFz IG5vIGpvaW5zICovCisJc3ViX3BzdGF0ZS0+cF9uYW1lc3BhY2UgPSBzdWJfbmFtZXNwYWNlOwor CXN1Yl9wc3RhdGUtPnBfcmVzb2x2ZV91bmtub3ducyA9IGZhbHNlOworCisJc2VsZWN0UXVlcnkg PSB0cmFuc2Zvcm1TdG10KHN1Yl9wc3RhdGUsIHN0bXQtPnNlbGVjdFN0bXQpOworCisJZnJlZV9w YXJzZXN0YXRlKHN1Yl9wc3RhdGUpOworCisJLyogVGhlIGdyYW1tYXIgc2hvdWxkIGhhdmUgcHJv ZHVjZWQgYSBTRUxFQ1QgKi8KKwlpZiAoIUlzQShzZWxlY3RRdWVyeSwgUXVlcnkpIHx8CisJCXNl bGVjdFF1ZXJ5LT5jb21tYW5kVHlwZSAhPSBDTURfU0VMRUNUKQorCQllbG9nKEVSUk9SLCAidW5l eHBlY3RlZCBub24tU0VMRUNUIGNvbW1hbmQgaW4gTEVUIC4uLiBTRUxFQ1QiKTsKKworCS8qCisJ ICogTWFrZSB0aGUgc291cmNlIGJlIGEgc3VicXVlcnkgaW4gdGhlIExFVCdzIHJhbmdldGFibGUs IGFuZCBhZGQKKwkgKiBpdCB0byB0aGUgTEVUJ3Mgam9pbmxpc3QuCisJICovCisJcnRlID0gYWRk UmFuZ2VUYWJsZUVudHJ5Rm9yU3VicXVlcnkocHN0YXRlLAorCQkJCQkJCQkJCXNlbGVjdFF1ZXJ5 LAorCQkJCQkJCQkJCW1ha2VBbGlhcygiKlNFTEVDVCoiLCBOSUwpLAorCQkJCQkJCQkJCWZhbHNl LAorCQkJCQkJCQkJCWZhbHNlKTsKKwlydHIgPSBtYWtlTm9kZShSYW5nZVRibFJlZik7CisJLyog YXNzdW1lIG5ldyBydGUgaXMgYXQgZW5kICovCisJcnRyLT5ydGluZGV4ID0gbGlzdF9sZW5ndGgo cHN0YXRlLT5wX3J0YWJsZSk7CisJQXNzZXJ0KHJ0ZSA9PSBydF9mZXRjaChydHItPnJ0aW5kZXgs IHBzdGF0ZS0+cF9ydGFibGUpKTsKKwlwc3RhdGUtPnBfam9pbmxpc3QgPSBsYXBwZW5kKHBzdGF0 ZS0+cF9qb2lubGlzdCwgcnRyKTsKKworCS8qLS0tLS0tLS0tLQorCSAqIEdlbmVyYXRlIGFuIGV4 cHJlc3Npb24gbGlzdCBmb3IgdGhlIExFVCB0aGF0IHNlbGVjdHMgYWxsIHRoZQorCSAqIG5vbi1y ZXNqdW5rIGNvbHVtbnMgZnJvbSB0aGUgc3VicXVlcnkuCisJICotLS0tLS0tLS0tCisJICovCisK KwlleHByTGlzdCA9IE5JTDsKKwlmb3JlYWNoKGxjLCBzZWxlY3RRdWVyeS0+dGFyZ2V0TGlzdCkK Kwl7CisJCVRhcmdldEVudHJ5ICp0bGUgPSAoVGFyZ2V0RW50cnkgKikgbGZpcnN0KGxjKTsKKwor CQlpZiAodGxlLT5yZXNqdW5rKQorCQkJY29udGludWU7CisKKwkJZXhwckxpc3QgPSBsYXBwZW5k KGV4cHJMaXN0LCB0bGUtPmV4cHIpOworCX0KKworCS8qCisJICogQmVjYXVzZSBkb2Vzbid0IHN1 cHBvcnQgcGF0dGVybiBtYXRjaGluZywgZG9uJ3QgYWxsb3cgbXVsdGljb2x1bW4gcmVzdWx0CisJ ICovCisJaWYgKGxpc3RfbGVuZ3RoKGV4cHJMaXN0KSAhPSAxKQorCQllcmVwb3J0KEVSUk9SLAor CQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkgZXJybXNnKCJleHByZXNz aW9uIGlzIG5vdCBzY2FsYXIgdmFsdWUiKSwKKwkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0 ZSwKKwkJCQkJCQkJCWV4cHJMb2NhdGlvbigoTm9kZSAqKSBleHByTGlzdCkpKSk7CisKKwlleHBy TGlzdENvZXIgPSBOSUw7CisJZm9yZWFjaChsYywgZXhwckxpc3QpCisJeworCQlOb2RlCSAgICpv cmlnX2V4cHIgPSAoTm9kZSopIGxmaXJzdChsYyk7CisJCU9pZAkJCWV4cHJ0eXBpZCA9IGV4cHJU eXBlKChOb2RlICopIG9yaWdfZXhwcik7CisJCUV4cHIJICAgKmV4cHIgPSBOVUxMOworCQlQYXJh bSAqcGFyYW0gPSBtYWtlTm9kZShQYXJhbSk7CisKKwkJcGFyYW0tPnBhcmFta2luZCA9IFBBUkFN X1NDSEVNQV9WQVJJQUJMRTsKKwkJcGFyYW0tPnBhcmFtaWQgPSB2YXJpZDsKKwkJcGFyYW0tPnBh cmFtdHlwZSA9IHZhcnR5cGlkOworCQlwYXJhbS0+cGFyYW10eXBtb2QgPSB2YXJ0eXBtb2Q7CisK KwkJZXhwciA9IChFeHByICopCisJCQl0cmFuc2Zvcm1Bc3NpZ25tZW50SW5kaXJlY3Rpb24ocHN0 YXRlLAorCQkJCQkJCQkJCQkoTm9kZSAqKSBwYXJhbSwKKwkJCQkJCQkJCQkJZmllbGRuYW1lLAor CQkJCQkJCQkJCQlmYWxzZSwKKwkJCQkJCQkJCQkJdmFydHlwaWQsCisJCQkJCQkJCQkJCXZhcnR5 cG1vZCwKKwkJCQkJCQkJCQkJSW52YWxpZE9pZCwKKwkJCQkJCQkJCQkJbGlzdF9oZWFkKGluZGly ZWN0aW9uKSwKKwkJCQkJCQkJCQkJKE5vZGUgKikgb3JpZ19leHByLAorCQkJCQkJCQkJCQktMSk7 CisKKwkJaWYgKGV4cHIgPT0gTlVMTCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2Rl KEVSUkNPREVfREFUQVRZUEVfTUlTTUFUQ0gpLAorCQkJCQkgZXJybXNnKCJ2YXJpYWJsZSBcIiVz XCIgaXMgb2YgdHlwZSAlcyIKKwkJCQkJCQkgICIgYnV0IGV4cHJlc3Npb24gaXMgb2YgdHlwZSAl cyIsCisJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmQpLAorCQkJCQkJCWZvcm1hdF90 eXBlX2JlKHZhcnR5cGlkKSwKKwkJCQkJCQlmb3JtYXRfdHlwZV9iZShleHBydHlwaWQpKSwKKwkJ CQkgZXJyaGludCgiWW91IHdpbGwgbmVlZCB0byByZXdyaXRlIG9yIGNhc3QgdGhlIGV4cHJlc3Np b24uIiksCisJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGV4cHJMb2NhdGlvbigoTm9k ZSAqKSBvcmlnX2V4cHIpKSkpOworCisJCWV4cHJMaXN0Q29lciA9IGxhcHBlbmQoZXhwckxpc3RD b2VyLCBleHByKTsKKwl9CisKKwkvKgorCSAqIEdlbmVyYXRlIHF1ZXJ5J3MgdGFyZ2V0IGxpc3Qg dXNpbmcgdGhlIGNvbXB1dGVkIGxpc3Qgb2YgZXhwcmVzc2lvbnMuCisJICogQWxzbywgbWFyayBh bGwgdGhlIHRhcmdldCBjb2x1bW5zIGFzIG5lZWRpbmcgaW5zZXJ0IHBlcm1pc3Npb25zLgorCSAq LworCXJ0ZSA9IHBzdGF0ZS0+cF90YXJnZXRfcmFuZ2V0YmxlbnRyeTsKKwlxcnktPnRhcmdldExp c3QgPSBOSUw7CisJZm9yZWFjaChsYywgZXhwckxpc3RDb2VyKQorCXsKKwkJRXhwcgkgICAqZXhw ciA9IChFeHByICopIGxmaXJzdChsYyk7CisJCVRhcmdldEVudHJ5ICp0bGU7CisKKwkJdGxlID0g bWFrZVRhcmdldEVudHJ5KGV4cHIsCisJCQkJCQkJICBpICsgMSwKKwkJCQkJCQkgIEZpZ3VyZUNv bG5hbWUoKE5vZGUgKilleHByKSwKKwkJCQkJCQkgIGZhbHNlKTsKKwkJcXJ5LT50YXJnZXRMaXN0 ID0gbGFwcGVuZChxcnktPnRhcmdldExpc3QsIHRsZSk7CisJfQorCisJLyogZG9uZSBidWlsZGlu ZyB0aGUgcmFuZ2UgdGFibGUgYW5kIGpvaW50cmVlICovCisJcXJ5LT5ydGFibGUgPSBwc3RhdGUt PnBfcnRhYmxlOworCXFyeS0+am9pbnRyZWUgPSBtYWtlRnJvbUV4cHIocHN0YXRlLT5wX2pvaW5s aXN0LCBOVUxMKTsKKworCXFyeS0+aGFzVGFyZ2V0U1JGcyA9IHBzdGF0ZS0+cF9oYXNUYXJnZXRT UkZzOworCXFyeS0+aGFzU3ViTGlua3MgPSBwc3RhdGUtPnBfaGFzU3ViTGlua3M7CisKKwlhc3Np Z25fcXVlcnlfY29sbGF0aW9ucyhwc3RhdGUsIHFyeSk7CisKKwlwc3RhdGUtPnBfZXhwcl9raW5k ID0gc3ZfZXhwcl9raW5kOworCisJcmV0dXJuIHFyeTsKK30KKwogLyoKICAqIHRyYW5zZm9ybVNl dE9wZXJhdGlvblN0bXQgLQogICoJICB0cmFuc2Zvcm1zIGEgc2V0LW9wZXJhdGlvbnMgdHJlZQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNl ci9ncmFtLnkKaW5kZXggZTU0ODQ3NjYyMy4uYmQwODU2NjExYiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvcGFyc2VyL2dyYW0ueQorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CkBAIC0x NTcsNiArMTU3LDggQEAgc3RhdGljIFJvbGVTcGVjICptYWtlUm9sZVNwZWMoUm9sZVNwZWNUeXBl IHR5cGUsIGludCBsb2NhdGlvbik7CiBzdGF0aWMgdm9pZCBjaGVja19xdWFsaWZpZWRfbmFtZShM aXN0ICpuYW1lcywgY29yZV95eXNjYW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIExpc3QgKmNoZWNr X2Z1bmNfbmFtZShMaXN0ICpuYW1lcywgY29yZV95eXNjYW5fdCB5eXNjYW5uZXIpOwogc3RhdGlj IExpc3QgKmNoZWNrX2luZGlyZWN0aW9uKExpc3QgKmluZGlyZWN0aW9uLCBjb3JlX3l5c2Nhbl90 IHl5c2Nhbm5lcik7CitzdGF0aWMgTGlzdCAqY2hlY2tfaW5kaXJlY3Rpb25fbGV0KExpc3QgKmlu ZGlyZWN0aW9uLCBjb3JlX3l5c2Nhbl90IHl5c2Nhbm5lcik7CisKIHN0YXRpYyBMaXN0ICpleHRy YWN0QXJnVHlwZXMoTGlzdCAqcGFyYW1ldGVycyk7CiBzdGF0aWMgTGlzdCAqZXh0cmFjdEFnZ3JB cmdUeXBlcyhMaXN0ICphZ2dyYXJncyk7CiBzdGF0aWMgTGlzdCAqbWFrZU9yZGVyZWRTZXRBcmdz KExpc3QgKmRpcmVjdGFyZ3MsIExpc3QgKm9yZGVyZWRhcmdzLApAQCAtMjU3LDggKzI1OSw4IEBA IHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0 ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJCUNvbnN0cmFpbnRzU2V0U3RtdCBDb3B5U3RtdCBD cmVhdGVBc1N0bXQgQ3JlYXRlQ2FzdFN0bXQKIAkJQ3JlYXRlRG9tYWluU3RtdCBDcmVhdGVFeHRl bnNpb25TdG10IENyZWF0ZUdyb3VwU3RtdCBDcmVhdGVPcENsYXNzU3RtdAogCQlDcmVhdGVPcEZh bWlseVN0bXQgQWx0ZXJPcEZhbWlseVN0bXQgQ3JlYXRlUExhbmdTdG10Ci0JCUNyZWF0ZVNjaGVt YVN0bXQgQ3JlYXRlU2VxU3RtdCBDcmVhdGVTdG10IENyZWF0ZVN0YXRzU3RtdCBDcmVhdGVUYWJs ZVNwYWNlU3RtdAotCQlDcmVhdGVGZHdTdG10IENyZWF0ZUZvcmVpZ25TZXJ2ZXJTdG10IENyZWF0 ZUZvcmVpZ25UYWJsZVN0bXQKKwkJQ3JlYXRlU2NoZW1hU3RtdCBDcmVhdGVTY2hlbWFWYXJTdG10 IENyZWF0ZVNlcVN0bXQgQ3JlYXRlU3RtdCBDcmVhdGVTdGF0c1N0bXQKKwkJQ3JlYXRlVGFibGVT cGFjZVN0bXQgQ3JlYXRlRmR3U3RtdCBDcmVhdGVGb3JlaWduU2VydmVyU3RtdCBDcmVhdGVGb3Jl aWduVGFibGVTdG10CiAJCUNyZWF0ZUFzc2VydFN0bXQgQ3JlYXRlVHJhbnNmb3JtU3RtdCBDcmVh dGVUcmlnU3RtdCBDcmVhdGVFdmVudFRyaWdTdG10CiAJCUNyZWF0ZVVzZXJTdG10IENyZWF0ZVVz ZXJNYXBwaW5nU3RtdCBDcmVhdGVSb2xlU3RtdCBDcmVhdGVQb2xpY3lTdG10CiAJCUNyZWF0ZWRi U3RtdCBEZWNsYXJlQ3Vyc29yU3RtdCBEZWZpbmVTdG10IERlbGV0ZVN0bXQgRGlzY2FyZFN0bXQg RG9TdG10CkBAIC0yNjgsNyArMjcwLDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3 U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAkJRHJv cFRyYW5zZm9ybVN0bXQKIAkJRHJvcFVzZXJNYXBwaW5nU3RtdCBFeHBsYWluU3RtdCBGZXRjaFN0 bXQKIAkJR3JhbnRTdG10IEdyYW50Um9sZVN0bXQgSW1wb3J0Rm9yZWlnblNjaGVtYVN0bXQgSW5k ZXhTdG10IEluc2VydFN0bXQKLQkJTGlzdGVuU3RtdCBMb2FkU3RtdCBMb2NrU3RtdCBOb3RpZnlT dG10IEV4cGxhaW5hYmxlU3RtdCBQcmVwYXJhYmxlU3RtdAorCQlMZXRTdG10IExpc3RlblN0bXQg TG9hZFN0bXQgTG9ja1N0bXQgTm90aWZ5U3RtdCBFeHBsYWluYWJsZVN0bXQgUHJlcGFyYWJsZVN0 bXQKIAkJQ3JlYXRlRnVuY3Rpb25TdG10IEFsdGVyRnVuY3Rpb25TdG10IFJlaW5kZXhTdG10IFJl bW92ZUFnZ3JTdG10CiAJCVJlbW92ZUZ1bmNTdG10IFJlbW92ZU9wZXJTdG10IFJlbmFtZVN0bXQg UmV2b2tlU3RtdCBSZXZva2VSb2xlU3RtdAogCQlSdWxlQWN0aW9uU3RtdCBSdWxlQWN0aW9uU3Rt dE9yRW1wdHkgUnVsZVN0bXQKQEAgLTU4NCw2ICs1ODYsOSBAQCBzdGF0aWMgTm9kZSAqbWFrZVJl Y3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVl cnkpOwogJXR5cGUgPG5vZGU+CQlwYXJ0Ym91bmRfZGF0dW0gUGFydGl0aW9uUmFuZ2VEYXR1bQog JXR5cGUgPGxpc3Q+CQloYXNoX3BhcnRib3VuZCBwYXJ0Ym91bmRfZGF0dW1fbGlzdCByYW5nZV9k YXR1bV9saXN0CiAldHlwZSA8ZGVmZWx0PgkJaGFzaF9wYXJ0Ym91bmRfZWxlbQorJXR5cGUgPGxp c3Q+CWZpZWxkTGlzdAorJXR5cGUgPG5vZGU+CWZpZWxkRGVmIG9wdFNjaGVtYVZhckRlZkV4cHIK KyV0eXBlIDxsaXN0PglzY2hlbWF2YXJfbmFtZQogCiAvKgogICogTm9uLWtleXdvcmQgdG9rZW4g dHlwZXMuICBUaGVzZSBhcmUgaGFyZC13aXJlZCBpbnRvIHRoZSAiZmxleCIgbGV4ZXIuCkBAIC02 NDksNyArNjU0LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIg KnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlLRVkKIAogCUxBQkVMIExB TkdVQUdFIExBUkdFX1AgTEFTVF9QIExBVEVSQUxfUAotCUxFQURJTkcgTEVBS1BST09GIExFQVNU IExFRlQgTEVWRUwgTElLRSBMSU1JVCBMSVNURU4gTE9BRCBMT0NBTAorCUxFQURJTkcgTEVBS1BS T09GIExFQVNUIExFRlQgTEVUIExFVkVMIExJS0UgTElNSVQgTElTVEVOIExPQUQgTE9DQUwKIAlM T0NBTFRJTUUgTE9DQUxUSU1FU1RBTVAgTE9DQVRJT04gTE9DS19QIExPQ0tFRCBMT0dHRUQKIAog CU1BUFBJTkcgTUFUQ0ggTUFURVJJQUxJWkVEIE1BWFZBTFVFIE1FVEhPRCBNSU5VVEVfUCBNSU5W QUxVRSBNT0RFIE1PTlRIX1AgTU9WRQpAQCAtNjg3LDggKzY5Miw4IEBAIHN0YXRpYyBOb2RlICpt YWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2Rl ICpxdWVyeSk7CiAJVU5CT1VOREVEIFVOQ09NTUlUVEVEIFVORU5DUllQVEVEIFVOSU9OIFVOSVFV RSBVTktOT1dOIFVOTElTVEVOIFVOTE9HR0VECiAJVU5USUwgVVBEQVRFIFVTRVIgVVNJTkcKIAot CVZBQ1VVTSBWQUxJRCBWQUxJREFURSBWQUxJREFUT1IgVkFMVUVfUCBWQUxVRVMgVkFSQ0hBUiBW QVJJQURJQyBWQVJZSU5HCi0JVkVSQk9TRSBWRVJTSU9OX1AgVklFVyBWSUVXUyBWT0xBVElMRQor CVZBQ1VVTSBWQUxJRCBWQUxJREFURSBWQUxJREFUT1IgVkFMVUVfUCBWQUxVRVMgVkFSQ0hBUiBW QVJJQUJMRSBWQVJJQUJMRVMKKwlWQVJJQURJQyBWQVJZSU5HIFZFUkJPU0UgVkVSU0lPTl9QIFZJ RVcgVklFV1MgVk9MQVRJTEUKIAogCVdIRU4gV0hFUkUgV0hJVEVTUEFDRV9QIFdJTkRPVyBXSVRI IFdJVEhJTiBXSVRIT1VUIFdPUksgV1JBUFBFUiBXUklURQogCkBAIC04NzksNiArODg0LDcgQEAg c3RtdCA6CiAJCQl8IENyZWF0ZVBMYW5nU3RtdAogCQkJfCBDcmVhdGVTY2hlbWFTdG10CiAJCQl8 IENyZWF0ZVNlcVN0bXQKKwkJCXwgQ3JlYXRlU2NoZW1hVmFyU3RtdAogCQkJfCBDcmVhdGVTdG10 CiAJCQl8IENyZWF0ZVN1YnNjcmlwdGlvblN0bXQKIAkJCXwgQ3JlYXRlU3RhdHNTdG10CkBAIC05 MjAsNiArOTI2LDcgQEAgc3RtdCA6CiAJCQl8IExpc3RlblN0bXQKIAkJCXwgUmVmcmVzaE1hdFZp ZXdTdG10CiAJCQl8IExvYWRTdG10CisJCQl8IExldFN0bXQKIAkJCXwgTG9ja1N0bXQKIAkJCXwg Tm90aWZ5U3RtdAogCQkJfCBQcmVwYXJlU3RtdApAQCAtMTM4MCw2ICsxMzg3LDcgQEAgc2NoZW1h X3N0bXQ6CiAJCQlDcmVhdGVTdG10CiAJCQl8IEluZGV4U3RtdAogCQkJfCBDcmVhdGVTZXFTdG10 CisJCQl8IENyZWF0ZVNjaGVtYVZhclN0bXQKIAkJCXwgQ3JlYXRlVHJpZ1N0bXQKIAkJCXwgR3Jh bnRTdG10CiAJCQl8IFZpZXdTdG10CkBAIC0xODA4LDcgKzE4MTYsMTIgQEAgRGlzY2FyZFN0bXQ6 CiAJCQkJCW4tPnRhcmdldCA9IERJU0NBUkRfU0VRVUVOQ0VTOwogCQkJCQkkJCA9IChOb2RlICop IG47CiAJCQkJfQotCisJCQl8IERJU0NBUkQgVkFSSUFCTEVTCisJCQkJeworCQkJCQlEaXNjYXJk U3RtdCAqbiA9IG1ha2VOb2RlKERpc2NhcmRTdG10KTsKKwkJCQkJbi0+dGFyZ2V0ID0gRElTQ0FS RF9WQVJJQUJMRVM7CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CiAJCTsKIAogCkBAIC0y MDA0LDYgKzIwMTcsMjQgQEAgQWx0ZXJUYWJsZVN0bXQ6CiAJCQkJCW4tPm5vd2FpdCA9ICQxNDsK IAkJCQkJJCQgPSAoTm9kZSAqKW47CiAJCQkJfQorCQl8CUFMVEVSIFZBUklBQkxFIHF1YWxpZmll ZF9uYW1lIGFsdGVyX3RhYmxlX2NtZHMKKwkJCQl7CisJCQkJCUFsdGVyVGFibGVTdG10ICpuID0g bWFrZU5vZGUoQWx0ZXJUYWJsZVN0bXQpOworCQkJCQluLT5yZWxhdGlvbiA9ICQzOworCQkJCQlu LT5jbWRzID0gJDQ7CisJCQkJCW4tPnJlbGtpbmQgPSBPQkpFQ1RfVkFSSUFCTEU7CisJCQkJCW4t Pm1pc3Npbmdfb2sgPSBmYWxzZTsKKwkJCQkJJCQgPSAoTm9kZSAqKW47CisJCQkJfQorCQl8CUFM VEVSIFZBUklBQkxFIElGX1AgRVhJU1RTIHF1YWxpZmllZF9uYW1lIGFsdGVyX3RhYmxlX2NtZHMK KwkJCQl7CisJCQkJCUFsdGVyVGFibGVTdG10ICpuID0gbWFrZU5vZGUoQWx0ZXJUYWJsZVN0bXQp OworCQkJCQluLT5yZWxhdGlvbiA9ICQ1OworCQkJCQluLT5jbWRzID0gJDY7CisJCQkJCW4tPnJl bGtpbmQgPSBPQkpFQ1RfVkFSSUFCTEU7CisJCQkJCW4tPm1pc3Npbmdfb2sgPSB0cnVlOworCQkJ CQkkJCA9IChOb2RlICopbjsKKwkJCQl9CiAJCTsKIAogYWx0ZXJfdGFibGVfY21kczoKQEAgLTQy ODUsNiArNDMxNiw4NiBAQCBOdW1lcmljT25seV9saXN0OglOdW1lcmljT25seQkJCQkJCXsgJCQg PSBsaXN0X21ha2UxKCQxKTsgfQogCQkJCXwgTnVtZXJpY09ubHlfbGlzdCAnLCcgTnVtZXJpY09u bHkJeyAkJCA9IGxhcHBlbmQoJDEsICQzKTsgfQogCQk7CiAKKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgorICoKKyAqCQlRVUVSWSA6CisgKgkJCQlDUkVBVEUgVkFSSUFCTEUgc2VxbmFtZSBbQVNdIHR5 cGUKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0NyZWF0ZVNjaGVtYVZhclN0bXQ6CisJ CQlDUkVBVEUgT3B0VGVtcCBWQVJJQUJMRSBxdWFsaWZpZWRfbmFtZSBvcHRfYXMgVHlwZW5hbWUg b3B0U2NoZW1hVmFyRGVmRXhwcgorCQkJCXsKKwkJCQkJQ3JlYXRlU2NoZW1hVmFyU3RtdCAqbiA9 IG1ha2VOb2RlKENyZWF0ZVNjaGVtYVZhclN0bXQpOworCQkJCQkkNC0+cmVscGVyc2lzdGVuY2Ug PSAkMjsKKwkJCQkJbi0+dmFyaWFibGUgPSAkNDsKKwkJCQkJbi0+dHlwZU5hbWUgPSAkNjsKKwkJ CQkJbi0+ZGVmZXhwciA9ICQ3OworCQkJCQluLT5maWVsZHMgPSBOVUxMOworCQkJCQluLT5pZl9u b3RfZXhpc3RzID0gZmFsc2U7CisJCQkJCSQkID0gKE5vZGUgKiluOworCQkJCX0KKwkJCXwgQ1JF QVRFIE9wdFRlbXAgVkFSSUFCTEUgSUZfUCBOT1QgRVhJU1RTIHF1YWxpZmllZF9uYW1lIG9wdF9h cyBUeXBlbmFtZSBvcHRTY2hlbWFWYXJEZWZFeHByCisJCQkJeworCQkJCQlDcmVhdGVTY2hlbWFW YXJTdG10ICpuID0gbWFrZU5vZGUoQ3JlYXRlU2NoZW1hVmFyU3RtdCk7CisJCQkJCSQ3LT5yZWxw ZXJzaXN0ZW5jZSA9ICQyOworCQkJCQluLT52YXJpYWJsZSA9ICQ3OworCQkJCQluLT50eXBlTmFt ZSA9ICQ5OworCQkJCQluLT5kZWZleHByID0gJDEwOworCQkJCQluLT5maWVsZHMgPSBOVUxMOwor CQkJCQluLT5pZl9ub3RfZXhpc3RzID0gdHJ1ZTsKKwkJCQkJJCQgPSAoTm9kZSAqKW47CisJCQkJ fQorCQkJfCBDUkVBVEUgT3B0VGVtcCBWQVJJQUJMRSBxdWFsaWZpZWRfbmFtZSBvcHRfYXMgJygn IGZpZWxkTGlzdCAnKScKKwkJCQl7CisJCQkJCUNyZWF0ZVNjaGVtYVZhclN0bXQgKm4gPSBtYWtl Tm9kZShDcmVhdGVTY2hlbWFWYXJTdG10KTsKKwkJCQkJJDQtPnJlbHBlcnNpc3RlbmNlID0gJDI7 CisJCQkJCW4tPnZhcmlhYmxlID0gJDQ7CisJCQkJCW4tPnR5cGVOYW1lID0gTlVMTDsKKwkJCQkJ bi0+ZmllbGRzID0gJDc7CisJCQkJCW4tPmlmX25vdF9leGlzdHMgPSBmYWxzZTsKKwkJCQkJJCQg PSAoTm9kZSAqKW47CisJCQkJfQorCQkJfCBDUkVBVEUgT3B0VGVtcCBWQVJJQUJMRSBJRl9QIE5P VCBFWElTVFMgcXVhbGlmaWVkX25hbWUgb3B0X2FzICcoJyBmaWVsZExpc3QgJyknCisJCQkJewor CQkJCQlDcmVhdGVTY2hlbWFWYXJTdG10ICpuID0gbWFrZU5vZGUoQ3JlYXRlU2NoZW1hVmFyU3Rt dCk7CisJCQkJCSQ3LT5yZWxwZXJzaXN0ZW5jZSA9ICQyOworCQkJCQluLT52YXJpYWJsZSA9ICQ3 OworCQkJCQluLT50eXBlTmFtZSA9IE5VTEw7CisJCQkJCW4tPmZpZWxkcyA9ICQxMDsKKwkJCQkJ bi0+aWZfbm90X2V4aXN0cyA9IHRydWU7CisJCQkJCSQkID0gKE5vZGUgKiluOworCQkJCX0KKwkJ OworCitvcHRTY2hlbWFWYXJEZWZFeHByOiBERUZBVUxUIGJfZXhwcgkJCQkJeyAkJCA9ICQyOyB9 CisJCQl8IC8qIEVNUFRZICovCQkJCQkJCXsgJCQgPSBOVUxMOyB9CisJCTsKKworZmllbGRMaXN0 OgorCQkJZmllbGREZWYJCQkJCQkJCXsgJCQgPSBsaXN0X21ha2UxKCQxKTsgfQorCQkJfCBmaWVs ZExpc3QgJywnIGZpZWxkRGVmCQkJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMyk7IH0KKwkJOworCitm aWVsZERlZjoJQ29sSWQgVHlwZW5hbWUgb3B0U2NoZW1hVmFyRGVmRXhwcgorCQkJCXsKKwkJCQkJ Q29sdW1uRGVmICpuID0gbWFrZU5vZGUoQ29sdW1uRGVmKTsKKwkJCQkJbi0+Y29sbmFtZSA9ICQx OworCQkJCQluLT50eXBlTmFtZSA9ICQyOworCQkJCQluLT5pbmhjb3VudCA9IDA7CisJCQkJCW4t PmlzX2xvY2FsID0gdHJ1ZTsKKwkJCQkJbi0+aXNfbm90X251bGwgPSBmYWxzZTsKKwkJCQkJbi0+ aXNfZnJvbV90eXBlID0gZmFsc2U7CisJCQkJCW4tPmlzX2Zyb21fcGFyZW50ID0gZmFsc2U7CisJ CQkJCW4tPnN0b3JhZ2UgPSAwOworCQkJCQluLT5yYXdfZGVmYXVsdCA9ICQzOworCQkJCQluLT5j b29rZWRfZGVmYXVsdCA9IE5VTEw7CisJCQkJCW4tPmNvbGxPaWQgPSBJbnZhbGlkT2lkOworCQkJ CQluLT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChOb2RlICopbjsKKwkJCQl9CisJCTsKKwog LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCiAgKgogICoJCVFVRVJJRVMgOgpAQCAtNjMzMyw2ICs2NDQ0 LDcgQEAgZHJvcF90eXBlX2FueV9uYW1lOgogCQkJfCBURVhUX1AgU0VBUkNIIERJQ1RJT05BUlkJ CQkJeyAkJCA9IE9CSkVDVF9UU0RJQ1RJT05BUlk7IH0KIAkJCXwgVEVYVF9QIFNFQVJDSCBURU1Q TEFURQkJCQl7ICQkID0gT0JKRUNUX1RTVEVNUExBVEU7IH0KIAkJCXwgVEVYVF9QIFNFQVJDSCBD T05GSUdVUkFUSU9OCQkJeyAkJCA9IE9CSkVDVF9UU0NPTkZJR1VSQVRJT047IH0KKwkJCXwgVkFS SUFCTEUJCQkJCQkJCXsgJCQgPSBPQkpFQ1RfVkFSSUFCTEU7IH0KIAkJOwogCiAvKiBvYmplY3Qg dHlwZXMgdGFraW5nIG5hbWVfbGlzdCAqLwpAQCAtNjYwMiw2ICs2NzE0LDcgQEAgY29tbWVudF90 eXBlX2FueV9uYW1lOgogCQkJfCBURVhUX1AgU0VBUkNIIERJQ1RJT05BUlkJCQl7ICQkID0gT0JK RUNUX1RTRElDVElPTkFSWTsgfQogCQkJfCBURVhUX1AgU0VBUkNIIFBBUlNFUgkJCQl7ICQkID0g T0JKRUNUX1RTUEFSU0VSOyB9CiAJCQl8IFRFWFRfUCBTRUFSQ0ggVEVNUExBVEUJCQl7ICQkID0g T0JKRUNUX1RTVEVNUExBVEU7IH0KKwkJCXwgVkFSSUFCTEUJCQkJCQkJeyAkJCA9IE9CSkVDVF9W QVJJQUJMRTsgfQogCQk7CiAKIC8qIG9iamVjdCB0eXBlcyB0YWtpbmcgbmFtZSAqLwpAQCAtNjc0 MCw2ICs2ODUzLDcgQEAgc2VjdXJpdHlfbGFiZWxfdHlwZV9hbnlfbmFtZToKIAkJCXwgVEFCTEUJ CQkJCQkJCXsgJCQgPSBPQkpFQ1RfVEFCTEU7IH0KIAkJCXwgVklFVwkJCQkJCQkJeyAkJCA9IE9C SkVDVF9WSUVXOyB9CiAJCQl8IE1BVEVSSUFMSVpFRCBWSUVXCQkJCQl7ICQkID0gT0JKRUNUX01B VFZJRVc7IH0KKwkJCXwgVkFSSUFCTEUJCQkJCQkJeyAkJCA9IE9CSkVDVF9WQVJJQUJMRTsgfQog CQk7CiAKIC8qIG9iamVjdCB0eXBlcyB0YWtpbmcgbmFtZSAqLwpAQCAtNzA2NSw2ICs3MTc5LDE0 IEBAIHByaXZpbGVnZV90YXJnZXQ6CiAJCQkJCW4tPm9ianMgPSAkMjsKIAkJCQkJJCQgPSBuOwog CQkJCX0KKwkJCXwgVkFSSUFCTEUgcXVhbGlmaWVkX25hbWVfbGlzdAorCQkJCXsKKwkJCQkJUHJp dlRhcmdldCAqbiA9IChQcml2VGFyZ2V0ICopIHBhbGxvYyhzaXplb2YoUHJpdlRhcmdldCkpOwor CQkJCQluLT50YXJndHlwZSA9IEFDTF9UQVJHRVRfT0JKRUNUOworCQkJCQluLT5vYmp0eXBlID0g T0JKRUNUX1ZBUklBQkxFOworCQkJCQluLT5vYmpzID0gJDI7CisJCQkJCSQkID0gbjsKKwkJCQl9 CiAJCQl8IEZPUkVJR04gREFUQV9QIFdSQVBQRVIgbmFtZV9saXN0CiAJCQkJewogCQkJCQlQcml2 VGFyZ2V0ICpuID0gKFByaXZUYXJnZXQgKikgcGFsbG9jKHNpemVvZihQcml2VGFyZ2V0KSk7CkBA IC03MTc3LDYgKzcyOTksMTQgQEAgcHJpdmlsZWdlX3RhcmdldDoKIAkJCQkJbi0+b2JqcyA9ICQ1 OwogCQkJCQkkJCA9IG47CiAJCQkJfQorCQkJfCBBTEwgVkFSSUFCTEVTIElOX1AgU0NIRU1BIG5h bWVfbGlzdAorCQkJCXsKKwkJCQkJUHJpdlRhcmdldCAqbiA9IChQcml2VGFyZ2V0ICopIHBhbGxv YyhzaXplb2YoUHJpdlRhcmdldCkpOworCQkJCQluLT50YXJndHlwZSA9IEFDTF9UQVJHRVRfQUxM X0lOX1NDSEVNQTsKKwkJCQkJbi0+b2JqdHlwZSA9IE9CSkVDVF9WQVJJQUJMRTsKKwkJCQkJbi0+ b2JqcyA9ICQ1OworCQkJCQkkJCA9IG47CisJCQkJfQogCQkJfCBBTEwgRlVOQ1RJT05TIElOX1Ag U0NIRU1BIG5hbWVfbGlzdAogCQkJCXsKIAkJCQkJUHJpdlRhcmdldCAqbiA9IChQcml2VGFyZ2V0 ICopIHBhbGxvYyhzaXplb2YoUHJpdlRhcmdldCkpOwpAQCAtNzM1OSw2ICs3NDg5LDcgQEAgZGVm YWNsX3ByaXZpbGVnZV90YXJnZXQ6CiAJCQl8IEZVTkNUSU9OUwkJeyAkJCA9IE9CSkVDVF9GVU5D VElPTjsgfQogCQkJfCBST1VUSU5FUwkJeyAkJCA9IE9CSkVDVF9GVU5DVElPTjsgfQogCQkJfCBT RVFVRU5DRVMJCXsgJCQgPSBPQkpFQ1RfU0VRVUVOQ0U7IH0KKwkJCXwgVkFSSUFCTEVTCQl7ICQk ID0gT0JKRUNUX1ZBUklBQkxFOyB9CiAJCQl8IFRZUEVTX1AJCXsgJCQgPSBPQkpFQ1RfVFlQRTsg fQogCQkJfCBTQ0hFTUFTCQl7ICQkID0gT0JKRUNUX1NDSEVNQTsgfQogCQk7CkBAIC04OTU3LDYg KzkwODgsMjYgQEAgUmVuYW1lU3RtdDogQUxURVIgQUdHUkVHQVRFIGFnZ3JlZ2F0ZV93aXRoX2Fy Z3R5cGVzIFJFTkFNRSBUTyBuYW1lCiAJCQkJCW4tPm1pc3Npbmdfb2sgPSBmYWxzZTsKIAkJCQkJ JCQgPSAoTm9kZSAqKW47CiAJCQkJfQorCQkJfCBBTFRFUiBWQVJJQUJMRSBxdWFsaWZpZWRfbmFt ZSBSRU5BTUUgVE8gbmFtZQorCQkJCXsKKwkJCQkJUmVuYW1lU3RtdCAqbiA9IG1ha2VOb2RlKFJl bmFtZVN0bXQpOworCQkJCQluLT5yZW5hbWVUeXBlID0gT0JKRUNUX1ZBUklBQkxFOworCQkJCQlu LT5yZWxhdGlvbiA9ICQzOworCQkJCQluLT5zdWJuYW1lID0gTlVMTDsKKwkJCQkJbi0+bmV3bmFt ZSA9ICQ2OworCQkJCQluLT5taXNzaW5nX29rID0gZmFsc2U7CisJCQkJCSQkID0gKE5vZGUgKilu OworCQkJCX0KKwkJCXwgQUxURVIgVkFSSUFCTEUgSUZfUCBFWElTVFMgcXVhbGlmaWVkX25hbWUg UkVOQU1FIFRPIG5hbWUKKwkJCQl7CisJCQkJCVJlbmFtZVN0bXQgKm4gPSBtYWtlTm9kZShSZW5h bWVTdG10KTsKKwkJCQkJbi0+cmVuYW1lVHlwZSA9IE9CSkVDVF9WQVJJQUJMRTsKKwkJCQkJbi0+ cmVsYXRpb24gPSAkNTsKKwkJCQkJbi0+c3VibmFtZSA9IE5VTEw7CisJCQkJCW4tPm5ld25hbWUg PSAkODsKKwkJCQkJbi0+bWlzc2luZ19vayA9IHRydWU7CisJCQkJCSQkID0gKE5vZGUgKiluOwor CQkJCX0KIAkJOwogCiBvcHRfY29sdW1uOiBDT0xVTU4JCQkJCQkJCQl7ICQkID0gQ09MVU1OOyB9 CkBAIC0xMDY4NCw3ICsxMDgzNSw4IEBAIEV4cGxhaW5hYmxlU3RtdDoKIAkJCXwgQ3JlYXRlQXNT dG10CiAJCQl8IENyZWF0ZU1hdFZpZXdTdG10CiAJCQl8IFJlZnJlc2hNYXRWaWV3U3RtdAotCQkJ fCBFeGVjdXRlU3RtdAkJCQkJLyogYnkgZGVmYXVsdCBhbGwgYXJlICQkPSQxICovCisJCQl8IEV4 ZWN1dGVTdG10CisJCQl8IExldFN0bXQJCQkJCS8qIGJ5IGRlZmF1bHQgYWxsIGFyZSAkJD0kMSAq LwogCQk7CiAKIGV4cGxhaW5fb3B0aW9uX2xpc3Q6CkBAIC0xMDc0MSw3ICsxMDg5Myw4IEBAIFBy ZXBhcmFibGVTdG10OgogCQkJU2VsZWN0U3RtdAogCQkJfCBJbnNlcnRTdG10CiAJCQl8IFVwZGF0 ZVN0bXQKLQkJCXwgRGVsZXRlU3RtdAkJCQkJLyogYnkgZGVmYXVsdCBhbGwgYXJlICQkPSQxICov CisJCQl8IERlbGV0ZVN0bXQKKwkJCXwgTGV0U3RtdAkJCQkJLyogYnkgZGVmYXVsdCBhbGwgYXJl ICQkPSQxICovCiAJCTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMTE0MCw2ICsxMTI5 Myw1MCBAQCBvcHRfaG9sZDogLyogRU1QVFkgKi8JCQkJCQl7ICQkID0gMDsgfQogCQkJfCBXSVRI T1VUIEhPTEQJCQkJCXsgJCQgPSAwOyB9CiAJCTsKIAorLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisg KgorICoJCVFVRVJZOgorICoJCQkJTEVUIFNUQVRFTUVOVFMKKyAqCisgKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCitMZXRTdG10OglMRVQgc2NoZW1hdmFyX25hbWUgJz0nIGFfZXhwcgorCQkJCXsKKwkJ CQkJTGV0U3RtdCAqbiA9IG1ha2VOb2RlKExldFN0bXQpOworCQkJCQlTZWxlY3RTdG10ICpzZWxl Y3QgPSBtYWtlTm9kZShTZWxlY3RTdG10KTsKKwkJCQkJUmVzVGFyZ2V0CSpyZXMgPSBtYWtlTm9k ZShSZXNUYXJnZXQpOworCisJCQkJCXJlcy0+bmFtZSA9IE5VTEw7CisJCQkJCXJlcy0+aW5kaXJl Y3Rpb24gPSBOSUw7CisJCQkJCXJlcy0+dmFsID0gKE5vZGUgKikgJDQ7CisJCQkJCXJlcy0+bG9j YXRpb24gPSBANDsKKwkJCQkJc2VsZWN0LT50YXJnZXRMaXN0ID0gbGlzdF9tYWtlMShyZXMpOwor CQkJCQluLT50YXJnZXQgPSAkMjsKKwkJCQkJbi0+c2VsZWN0U3RtdCA9IChOb2RlICopIHNlbGVj dDsKKwkJCQkJbi0+bG9jYXRpb24gPSBAMjsKKworCQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJ fQorCQk7CisKK3NjaGVtYXZhcl9uYW1lOgorCQkJQ29sSWQKKwkJCQl7CisJCQkJCSQkID0gbGlz dF9tYWtlMShtYWtlU3RyaW5nKCQxKSk7CisJCQkJfQorCQkJfCBDb2xJZCBpbmRpcmVjdGlvbgor CQkJCXsKKwkJCQkJY2hlY2tfaW5kaXJlY3Rpb25fbGV0KCQyLCB5eXNjYW5uZXIpOworCQkJCQlp ZiAobGlzdF9sZW5ndGgoJDIpID4gMykKKwkJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCShl cnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJCQkJIGVycm1zZygiaW1wcm9wZXIg cXVhbGlmaWVkIG5hbWUiKSwKKwkJCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihAMSkpKTsKKwor CQkJCQkkJCA9IGxjb25zKG1ha2VTdHJpbmcoJDEpLCAkMik7CisJCQkJCSQkID0gbGlzdF91bmlv bigkJCwgJDIpOworCQkJCX0KKwkJOworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKgkJ UVVFUlk6CkBAIC0xNTA5OSw2ICsxNTI5Niw3IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwg TEFSR0VfUAogCQkJfCBMQVNUX1AKIAkJCXwgTEVBS1BST09GCisJCQl8IExFVAogCQkJfCBMRVZF TAogCQkJfCBMSVNURU4KIAkJCXwgTE9BRApAQCAtMTUyNDcsNiArMTU0NDUsOCBAQCB1bnJlc2Vy dmVkX2tleXdvcmQ6CiAJCQl8IFZBTElEQVRFCiAJCQl8IFZBTElEQVRPUgogCQkJfCBWQUxVRV9Q CisJCQl8IFZBUklBQkxFCisJCQl8IFZBUklBQkxFUwogCQkJfCBWQVJZSU5HCiAJCQl8IFZFUlNJ T05fUAogCQkJfCBWSUVXCkBAIC0xNTcxMSw2ICsxNTkxMSwyNSBAQCBjaGVja19mdW5jX25hbWUo TGlzdCAqbmFtZXMsIGNvcmVfeXlzY2FuX3QgeXlzY2FubmVyKQogICogV2Ugb25seSBhbGxvdyAn KicgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCwgYnV0IGl0J3MgaGFyZCB0byBlbmZvcmNlIHRoYXQK ICAqIGluIHRoZSBncmFtbWFyLCBzbyBkbyBpdCBoZXJlLgogICovCitzdGF0aWMgTGlzdCAqCitj aGVja19pbmRpcmVjdGlvbl9sZXQoTGlzdCAqaW5kaXJlY3Rpb24sIGNvcmVfeXlzY2FuX3QgeXlz Y2FubmVyKQoreworCUxpc3RDZWxsICpsOworCisJZm9yZWFjaChsLCBpbmRpcmVjdGlvbikKKwl7 CisJCWlmIChJc0EobGZpcnN0KGwpLCBBX1N0YXIpKQorCQkJcGFyc2VyX3l5ZXJyb3IoInN5bnRh eCBlcnJvciIpOworCisJCWlmIChJc0EobGZpcnN0KGwpLCBBX0luZGljZXMpKQorCQl7CisJCQlp ZiAobG5leHQobCkgIT0gTlVMTCkKKwkJCQlwYXJzZXJfeXllcnJvcigiaW1wcm9wZXIgdXNlIG9m IFtdIik7CisJCX0KKwl9CisJcmV0dXJuIGluZGlyZWN0aW9uOworfQorCiBzdGF0aWMgTGlzdCAq CiBjaGVja19pbmRpcmVjdGlvbihMaXN0ICppbmRpcmVjdGlvbiwgY29yZV95eXNjYW5fdCB5eXNj YW5uZXIpCiB7CkBAIC0xNTcyNyw2ICsxNTk0Niw3IEBAIGNoZWNrX2luZGlyZWN0aW9uKExpc3Qg KmluZGlyZWN0aW9uLCBjb3JlX3l5c2Nhbl90IHl5c2Nhbm5lcikKIAlyZXR1cm4gaW5kaXJlY3Rp b247CiB9CiAKKwogLyogZXh0cmFjdEFyZ1R5cGVzKCkKICAqIEdpdmVuIGEgbGlzdCBvZiBGdW5j dGlvblBhcmFtZXRlciBub2RlcywgZXh0cmFjdCBhIGxpc3Qgb2YganVzdCB0aGUKICAqIGFyZ3Vt ZW50IHR5cGVzIChUeXBlTmFtZXMpIGZvciBpbnB1dCBwYXJhbWV0ZXJzIG9ubHkuICBUaGlzIGlz IHdoYXQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMgYi9zcmMv YmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCmluZGV4IDM4NWU1NGE5YjYuLjhmNmUyOGRhOGYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMKKysrIGIvc3JjL2Jh Y2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYwpAQCAtMzcxLDcgKzM3MSw3IEBAIHRyYW5zZm9ybUV4 cHJSZWN1cnNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTm9kZSAqZXhwcikKIAogCQlkZWZhdWx0Ogog CQkJLyogc2hvdWxkIG5vdCByZWFjaCBoZXJlICovCi0JCQllbG9nKEVSUk9SLCAidW5yZWNvZ25p emVkIG5vZGUgdHlwZTogJWQiLCAoaW50KSBub2RlVGFnKGV4cHIpKTsKKwkJCWVsb2coRVJST1Is ICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlOiAlZCAlZCIsIChpbnQpIG5vZGVUYWcoZXhwciksIFRf Q29uc3QpOwogCQkJcmVzdWx0ID0gTlVMTDsJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KIAkJ CWJyZWFrOwogCX0KQEAgLTUwOSw2ICs1MDksNyBAQCBzdGF0aWMgTm9kZSAqCiB0cmFuc2Zvcm1D b2x1bW5SZWYoUGFyc2VTdGF0ZSAqcHN0YXRlLCBDb2x1bW5SZWYgKmNyZWYpCiB7CiAJTm9kZQkg ICAqbm9kZSA9IE5VTEw7CisJTm9kZQkgICAqdmFyaWFibGUgPSBOVUxMOwogCWNoYXIJICAgKm5z cG5hbWUgPSBOVUxMOwogCWNoYXIJICAgKnJlbG5hbWUgPSBOVUxMOwogCWNoYXIJICAgKmNvbG5h bWUgPSBOVUxMOwpAQCAtNzQ5LDYgKzc1MCwxMzMgQEAgdHJhbnNmb3JtQ29sdW1uUmVmKFBhcnNl U3RhdGUgKnBzdGF0ZSwgQ29sdW1uUmVmICpjcmVmKQogCQkJYnJlYWs7CiAJfQogCisJLyoKKwkg KiBUcnkgdG8gaWRlbnRpZnkgY29sdW1uIHJlZiBhcyB2YXJpYWJsZS4gUG9zc2libGUgdmFyaWFu dHMgYXJlCisJICoKKwkgKiBBIC4uIHZhcmlhYmxlIG5hbWUKKwkgKiBBLkIgLi4gcXVhbGlmaWVk IHZhcmlhYmxlIG5hbWUKKwkgKiBBLkIgLi4gdmFyaWFibGUuZmllbGQKKwkgKiBBLkIuQyAuLiBz Y2hlbWEudmFyaWFibGUuZmllbGQKKwkgKiBBLkIuQy5EIC4uIGNhdGFsb2d1ZS5zY2hlbWEudmFy aWFibGUuZmllbGQKKwkgKi8KKwlzd2l0Y2ggKGxpc3RfbGVuZ3RoKGNyZWYtPmZpZWxkcykpCisJ eworCQljYXNlIDE6CisJCQl7CisJCQkJTm9kZQkgICAqZmllbGQxID0gKE5vZGUgKikgbGluaXRp YWwoY3JlZi0+ZmllbGRzKTsKKworCQkJCWlmIChJc0EoZmllbGQxLCBTdHJpbmcpKQorCQkJCXsK KwkJCQkJY2hhciAqdmFybmFtZSAgPSBzdHJWYWwoZmllbGQxKTsKKworCQkJCQkvKiBUcnkgdG8g aWRlbnRpZnkgYXMgYW4gdW5xdWFsaWZpZWQgY29sdW1uICovCisJCQkJCXZhcmlhYmxlID0gdG9T Y2hlbWFWYXJpYWJsZShwc3RhdGUsCisJCQkJCQkJCQkJCQkJTlVMTCwgdmFybmFtZSwgTlVMTCwK KwkJCQkJCQkJCQkJCQljcmVmLT5sb2NhdGlvbik7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQor CQljYXNlIDI6CisJCQl7CisJCQkJTm9kZQkgICAqZmllbGQxID0gKE5vZGUgKikgbGluaXRpYWwo Y3JlZi0+ZmllbGRzKTsKKwkJCQlOb2RlCSAgICpmaWVsZDIgPSAoTm9kZSAqKSBsc2Vjb25kKGNy ZWYtPmZpZWxkcyk7CisKKwkJCQlpZiAoSXNBKGZpZWxkMSwgU3RyaW5nKSAmJiBJc0EoZmllbGQy LCBTdHJpbmcpKQorCQkJCXsKKwkJCQkJY2hhciAqbnNwbmFtZSA9IHN0clZhbChmaWVsZDEpOwor CQkJCQljaGFyICp2YXJuYW1lID0gc3RyVmFsKGZpZWxkMik7CisKKwkJCQkJLyogVHJ5IHRvIGlk ZW50aWZ5IGFzIGFuIHVucXVhbGlmaWVkIGNvbHVtbiAqLworCQkJCQl2YXJpYWJsZSA9IHRvU2No ZW1hVmFyaWFibGUocHN0YXRlLAorCQkJCQkJCQkJCQkJCW5zcG5hbWUsIHZhcm5hbWUsIE5VTEws CisJCQkJCQkJCQkJCQkJY3JlZi0+bG9jYXRpb24pOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0K KwkJY2FzZSAzOgorCQkJeworCQkJCU5vZGUJICAgKmZpZWxkMSA9IChOb2RlICopIGxpbml0aWFs KGNyZWYtPmZpZWxkcyk7CisJCQkJTm9kZQkgICAqZmllbGQyID0gKE5vZGUgKikgbHNlY29uZChj cmVmLT5maWVsZHMpOworCQkJCU5vZGUJICAgKmZpZWxkMyA9IChOb2RlICopIGx0aGlyZChjcmVm LT5maWVsZHMpOworCisJCQkJaWYgKElzQShmaWVsZDEsIFN0cmluZykgJiYgSXNBKGZpZWxkMiwg U3RyaW5nKSAmJiBJc0EoZmllbGQyLCBTdHJpbmcpKQorCQkJCXsKKwkJCQkJY2hhciAqbnNwbmFt ZSA9IHN0clZhbChmaWVsZDEpOworCQkJCQljaGFyICp2YXJuYW1lID0gc3RyVmFsKGZpZWxkMik7 CisJCQkJCWNoYXIgKmZpZWxkbmFtZSA9IHN0clZhbChmaWVsZDMpOworCisJCQkJCS8qIFRyeSB0 byBpZGVudGlmeSBhcyBhbiB1bnF1YWxpZmllZCBjb2x1bW4gKi8KKwkJCQkJdmFyaWFibGUgPSB0 b1NjaGVtYVZhcmlhYmxlKHBzdGF0ZSwKKwkJCQkJCQkJCQkJCQluc3BuYW1lLCB2YXJuYW1lLCBm aWVsZG5hbWUsCisJCQkJCQkJCQkJCQkJY3JlZi0+bG9jYXRpb24pOworCQkJCX0KKwkJCQlicmVh azsKKwkJCX0KKwkJY2FzZSA0OgorCQkJeworCQkJCU5vZGUJICAgKmZpZWxkMSA9IChOb2RlICop IGxpbml0aWFsKGNyZWYtPmZpZWxkcyk7CisJCQkJTm9kZQkgICAqZmllbGQyID0gKE5vZGUgKikg bHNlY29uZChjcmVmLT5maWVsZHMpOworCQkJCU5vZGUJICAgKmZpZWxkMyA9IChOb2RlICopIGx0 aGlyZChjcmVmLT5maWVsZHMpOworCQkJCU5vZGUJICAgKmZpZWxkNCA9IChOb2RlICopIGxmb3Vy dGgoY3JlZi0+ZmllbGRzKTsKKwkJCQljaGFyCSAgICpjYXRuYW1lOworCisJCQkJQXNzZXJ0KElz QShmaWVsZDEsIFN0cmluZykpOworCQkJCWNhdG5hbWUgPSBzdHJWYWwoZmllbGQxKTsKKworCQkJ CS8qCisJCQkJICogV2UgY2hlY2sgdGhlIGNhdGFsb2cgbmFtZSBhbmQgdGhlbiBpZ25vcmUgaXQu CisJCQkJICovCisJCQkJaWYgKHN0cmNtcChjYXRuYW1lLCBnZXRfZGF0YWJhc2VfbmFtZShNeURh dGFiYXNlSWQpKSAhPSAwKQorCQkJCXsKKwkJCQkJY3JlcnIgPSBDUkVSUl9XUk9OR19EQjsKKwkJ CQkJYnJlYWs7CisJCQkJfQorCisJCQkJaWYgKElzQShmaWVsZDEsIFN0cmluZykgJiYgSXNBKGZp ZWxkMiwgU3RyaW5nKSAmJiBJc0EoZmllbGQyLCBTdHJpbmcpKQorCQkJCXsKKwkJCQkJY2hhciAq bnNwbmFtZSA9IHN0clZhbChmaWVsZDIpOworCQkJCQljaGFyICp2YXJuYW1lID0gc3RyVmFsKGZp ZWxkMyk7CisJCQkJCWNoYXIgKmZpZWxkbmFtZSA9IHN0clZhbChmaWVsZDQpOworCisJCQkJCS8q IFRyeSB0byBpZGVudGlmeSBhcyBhbiB1bnF1YWxpZmllZCBjb2x1bW4gKi8KKwkJCQkJdmFyaWFi bGUgPSB0b1NjaGVtYVZhcmlhYmxlKHBzdGF0ZSwKKwkJCQkJCQkJCQkJCQluc3BuYW1lLCB2YXJu YW1lLCBmaWVsZG5hbWUsCisJCQkJCQkJCQkJCQkJY3JlZi0+bG9jYXRpb24pOworCQkJCX0KKwkJ CQlicmVhazsKKwkJCX0KKwkJZGVmYXVsdDoKKworCQkJLyoKKwkJCSAqIFRoZXJlIGNhbiBiZSBh bm90aGVyIHZhcmlhbnRzLCBtb3JlIHdoZW4gY29tcG9zaXRlIHZhcmlhYmxlcworCQkJICogd2ls bCBiZSBzdXBwb3J0ZWQuIEN1cnJlbnRseSBvbmx5IHNjYWxhcnMgYXJlIHN1cHBvcnRlZCwgc28K KwkJCSAqIHRoZXJlIGFyZSBub3QgbmVjZXNzYXJ5IHRvIHNvbHZlIG90aGVyIHF1ZXN0aW9ucy4K KwkJCSAqCisJCQkgKiBkbyBub3RoaW5nCisJCQkgKi8KKwkJCWNyZXJyID0gQ1JFUlJfVE9PX01B Tlk7IC8qIHRvbyBtYW55IGRvdHRlZCBuYW1lcyAqLworCQkJYnJlYWs7CisJfQorCisJaWYgKHZh cmlhYmxlICE9IE5VTEwpCisJeworCQkvKgorCQkgKiBXaGVuIHdlIGFsbG93IHZhcmlhYmxlcyBp biBGUk9NIGNsYXVzZSwgdGhlbiBoZXJlIGNhbiBiZSBjaGVjaywKKwkJICogaWYgdmFyaWFibGUg YW5kIG5vZGUgYXJlIHNhbWUuIE9yIGJldHRlciwgd2hlbiBub2RlIHdpbGwgYmUKKwkJICogcmVm ZXJlbmNlZCB0byB2YXJpYWJsZSwgdGhlbiB0b1NjaGVtYVZhcmlhYmxlIHdpbGwgbm90IGJlIGNh bGxlZC4KKwkJICogQnV0IG5vdywgd2UgZG9uJ3QgYWxsb3cgc2NoZW1hIHZhcmlhYmxlIGluIEZS T00gY2xhdXNlLCBzbyB0aGUKKwkJICogY29uZmxpY3QgaXMgbm90IHBvc3NpYmxlLgorCQkgKi8K KwkJaWYgKG5vZGUgIT0gTlVMTCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVS UkNPREVfQU1CSUdVT1VTX0NPTFVNTiksCisJCQkJCSBlcnJtc2coImNvbHVtbiByZWZlcmVuY2Ug XCIlc1wiIGlzIGFtYmlndW91cyIsCisJCQkJCQkJTmFtZUxpc3RUb1N0cmluZyhjcmVmLT5maWVs ZHMpKSwKKwkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGNyZWYtPmxvY2F0aW9uKSkp OworCisJCW5vZGUgPSB2YXJpYWJsZTsKKwl9CisKIAkvKgogCSAqIE5vdyBnaXZlIHRoZSBQb3N0 UGFyc2VDb2x1bW5SZWZIb29rLCBpZiBhbnksIGEgY2hhbmNlLiAgV2UgcGFzcyB0aGUKIAkgKiB0 cmFuc2xhdGlvbi1zby1mYXIgc28gdGhhdCBpdCBjYW4gdGhyb3cgYW4gZXJyb3IgaWYgaXQgd2lz aGVzIGluIHRoZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3JlbGF0aW9u LmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVsYXRpb24uYwppbmRleCBiZjVkZjI2MDA5 Li41MTJlMzY0ZmEyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVsYXRp b24uYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVsYXRpb24uYwpAQCAtMjEsNiAr MjEsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvaGVhcC5oIgogI2luY2x1ZGUgImNhdGFsb2cvbmFt ZXNwYWNlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCisjaW5jbHVkZSAiY29tbWFu ZHMvc2NoZW1hdmFyLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgIm5vZGVzL21h a2VmdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgpAQCAtMzIsNiArMzMsNyBA QAogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgog I2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvdHlwY2FjaGUuaCIK ICNpbmNsdWRlICJ1dGlscy92YXJsZW5hLmgiCiAKIApAQCAtMTE1MCw2ICsxMTUyLDcgQEAgcGFy c2VyT3BlblRhYmxlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgY29uc3QgUmFuZ2VWYXIgKnJlbGF0aW9u LCBpbnQgbG9ja21vZGUpCiAKIAlzZXR1cF9wYXJzZXJfZXJycG9zaXRpb25fY2FsbGJhY2soJnBj YnN0YXRlLCBwc3RhdGUsIHJlbGF0aW9uLT5sb2NhdGlvbik7CiAJcmVsID0gaGVhcF9vcGVucnZf ZXh0ZW5kZWQocmVsYXRpb24sIGxvY2ttb2RlLCB0cnVlKTsKKwogCWlmIChyZWwgPT0gTlVMTCkK IAl7CiAJCWlmIChyZWxhdGlvbi0+c2NoZW1hbmFtZSkKQEAgLTExODAsNiArMTE4MywyNCBAQCBw YXJzZXJPcGVuVGFibGUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBjb25zdCBSYW5nZVZhciAqcmVsYXRp b24sIGludCBsb2NrbW9kZSkKIAkJCQkJCQkJcmVsYXRpb24tPnJlbG5hbWUpKSk7CiAJCX0KIAl9 CisKKwkvKgorCSAqIFJFTEtJTkRfVkFSSUFCTEUgY2FuIGJlIHVzZWQgb25seSBpbiBMRVQgY29t bWFuZC4KKwkgKiBQcm9iYWJseSB0aGlzIGNoZWNrIGNhbiBiZSBkb25lIGVsc2V3aGVyZSwgYnV0 IGhlcmUgSQorCSAqIGhhdmUgYSB1c2VkIHJlbGF0aW9uIGFuZCBwYXJzZSBzdGF0ZSB0b2dldGhl ciBmaXJzdCB0aW1lLgorCSAqLworCWlmIChyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5E X1ZBUklBQkxFICYmICFwc3RhdGUtPnBfaXNfbGV0KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShl cnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAorCQkJCSBlcnJtc2coIlwiJXNcIiBp cyBhbiBzY2hlbWEgdmFyaWFibGUiLAorCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVs KSkpKTsKKworCWlmIChwc3RhdGUtPnBfaXNfbGV0ICYmIHJlbC0+cmRfcmVsLT5yZWxraW5kICE9 IFJFTEtJTkRfVkFSSUFCTEUpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09E RV9XUk9OR19PQkpFQ1RfVFlQRSksCisJCQkJIGVycm1zZygiXCIlc1wiIGlzIG5vdCBhbiBzY2hl bWEgdmFyaWFibGUiLAorCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSkpKTsKKwog CWNhbmNlbF9wYXJzZXJfZXJycG9zaXRpb25fY2FsbGJhY2soJnBjYnN0YXRlKTsKIAlyZXR1cm4g cmVsOwogfQpAQCAtMzM2MCwzICszMzgxLDE2MCBAQCBpc1F1ZXJ5VXNpbmdUZW1wUmVsYXRpb25f d2Fsa2VyKE5vZGUgKm5vZGUsIHZvaWQgKmNvbnRleHQpCiAJCQkJCQkJCSAgaXNRdWVyeVVzaW5n VGVtcFJlbGF0aW9uX3dhbGtlciwKIAkJCQkJCQkJICBjb250ZXh0KTsKIH0KKworUmFuZ2VWYXIg KgorbWFrZVJhbmdlVmFyRm9yVGFyZ2V0T2ZTY2hlbWFWYXJpYWJsZShQYXJzZVN0YXRlICpwc3Rh dGUsCisJCQkJCQkJCQkgIGNoYXIgKmZpZWxkMSwgY2hhciAqZmllbGQyLCBjaGFyICpmaWVsZDMs CisJCQkJCQkJCQkgIGludCBsb2NhdGlvbiwgY2hhciAqKmZpZWxkbmFtZSwgaW50ICpmaWVsZG5h bWVfcG9zLCBib29sIG5vZXJyb3IpCit7CisJUmFuZ2VWYXIJKnJ2MTsKKwlPaWQJCQl2YXJpZDE7 CisJYm9vbAkJaXNfcm93dHlwZTE7CisKKwlydjEgPSBtYWtlUmFuZ2VWYXIoZmllbGQxLCBmaWVs ZDIsIGxvY2F0aW9uKTsKKwl2YXJpZDEgPSBSYW5nZVZhckdldFJlbGlkKHJ2MSwgTm9Mb2NrLCB0 cnVlKTsKKwl2YXJpZDEgPSBpc19zY2hlbWF2YXIodmFyaWQxLCAmaXNfcm93dHlwZTEpID8gdmFy aWQxIDogSW52YWxpZE9pZDsKKworCWlmIChmaWVsZDEgIT0gTlVMTCAmJiBmaWVsZDMgPT0gTlVM TCkKKwl7CisJCVJhbmdlVmFyICAgKnJ2MjsKKwkJYm9vbAlpc19yb3d0eXBlMjsKKwkJT2lkCQl2 YXJpZDI7CisKKwkJcnYyID0gbWFrZVJhbmdlVmFyKE5VTEwsIGZpZWxkMSwgbG9jYXRpb24pOwor CQl2YXJpZDIgPSBSYW5nZVZhckdldFJlbGlkKHJ2MiwgTm9Mb2NrLCB0cnVlKTsKKworCQkvKiB2 YXJpZDIgaGFzIHNlbnNlIG9ubHkgYXMgcm93IHR5cGUgdmFyaWFibGUgKi8KKwkJdmFyaWQyID0g aXNfc2NoZW1hdmFyKHZhcmlkMiwgJmlzX3Jvd3R5cGUyKSA/IHZhcmlkMiA6IEludmFsaWRPaWQ7 CisJCXZhcmlkMiA9IGlzX3Jvd3R5cGUyID8gdmFyaWQyIDogSW52YWxpZE9pZDsKKworCQlpZiAo T2lkSXNWYWxpZCh2YXJpZDEpICYmIE9pZElzVmFsaWQodmFyaWQyKSkKKwkJCWVyZXBvcnQoRVJS T1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfQU1CSUdVT1VTX0NPTFVNTiksCisJCQkgZXJybXNn KCJ2YXJpYWJsZSByZWZlcmVuY2UgXCIlc1wiLlwiJXNcIiBpcyBhbWJpZ3VvdXMiLCBmaWVsZDEs IGZpZWxkMiksCisJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBsb2NhdGlvbikpKTsK KworCQlpZiAoT2lkSXNWYWxpZCh2YXJpZDIpKQorCQl7CisJCQkqZmllbGRuYW1lID0gZmllbGQy OworCQkJKmZpZWxkbmFtZV9wb3MgPSAyOworCQkJcmV0dXJuIHJ2MjsKKwkJfQorCX0KKworCWlm ICghT2lkSXNWYWxpZCh2YXJpZDEpKQorCXsKKwkJaWYgKCFub2Vycm9yKQorCQl7CisJCQlpZiAo ZmllbGQxICE9IE5VTEwpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNP REVfVU5ERUZJTkVEX1RBQkxFKSwKKwkJCQkJCSBlcnJtc2coInNjaGVtYSB2YXJpYWJsZSBcIiVz LiVzXCIgZG9lc24ndCBleGlzdHMiLCBmaWVsZDEsIGZpZWxkMiksCisJCQkJCQkgcGFyc2VyX2Vy cnBvc2l0aW9uKHBzdGF0ZSwgbG9jYXRpb24pKSk7CisJCQllbHNlCisJCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX1RBQkxFKSwKKwkJCQkJCSBlcnJt c2coInNjaGVtYSB2YXJpYWJsZSBcIiVzXCIgZG9lc24ndCBleGlzdHMiLCBmaWVsZDIpLAorCQkJ CQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGxvY2F0aW9uKSkpOworCQl9CisKKwkJcmV0 dXJuIE5VTEw7CisJfQorCisJKmZpZWxkbmFtZSA9IGZpZWxkMzsKKwkqZmllbGRuYW1lX3BvcyA9 IDM7CisKKwlpZiAoZmllbGQzICE9IE5VTEwgJiYgIWlzX3Jvd3R5cGUxKQorCXsKKwkJaWYgKCFu b2Vycm9yKQorCQl7CisJCQlpZiAoZmllbGQxICE9IE5VTEwpCisJCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJCShlcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAorCQkJCQkJIGVycm1z ZygidmFyaWFibGUgXCIlcy4lc1wiIGlzIG5vdCByb3cgdHlwZSIsIGZpZWxkMSwgZmllbGQyKSwK KwkJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgbG9jYXRpb24pKSk7CisJCQllbHNl CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNU X1RZUEUpLAorCQkJCQkJIGVycm1zZygidmFyaWFibGUgXCIlc1wiIGlzIG5vdCByb3cgdHlwZSIs IGZpZWxkMiksCisJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgbG9jYXRpb24pKSk7 CisJCX0KKworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gcnYxOworfQorCisvKgorICog VHJ5IHRvIHJlcGxhY2UgQ29sdW1uUmVmIGJ5IFBhcmFtIHJlbGF0ZWQgdG8gdmFyaWFibGUKKyAq CisgKi8KK05vZGUgKgordG9TY2hlbWFWYXJpYWJsZShQYXJzZVN0YXRlICpwc3RhdGUsIGNoYXIg Km5zcG5hbWUsIGNoYXIgKnZhcm5hbWUsIGNoYXIgKmZpZWxkbmFtZSwgaW50IGxvY2F0aW9uKQor eworCWNoYXIJICAgKnVzZWRfZmllbGRuYW1lOworCVJhbmdlVmFyICAgKnJ2OworCU9pZAkJCXZh cmlkOworCWludAkJCWZpZWxkbmFtZV9wb3M7CisJT2lkCQkJdmFydHlwOworCWludDMyCQl2YXJ0 eXBtb2Q7CisJUGFyYW0JICAgKnBhcmFtOworCisJcnYgPSBtYWtlUmFuZ2VWYXJGb3JUYXJnZXRP ZlNjaGVtYVZhcmlhYmxlKHBzdGF0ZSwKKwkJCQkJCQkJCQkJICAgbnNwbmFtZSwgdmFybmFtZSwg ZmllbGRuYW1lLCBsb2NhdGlvbiwKKwkJCQkJCQkJCQkJICAgJnVzZWRfZmllbGRuYW1lLCAmZmll bGRuYW1lX3BvcywgdHJ1ZSk7CisKKwlpZiAocnYgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisK Kwl2YXJpZCA9IFJhbmdlVmFyR2V0UmVsaWQocnYsIE5vTG9jaywgdHJ1ZSk7CisJaWYgKCFPaWRJ c1ZhbGlkKHZhcmlkKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlwYXJhbSA9IG1ha2VOb2RlKFBhcmFt KTsKKworCXNjaGVtYXZhcl9nZXRfdHlwX3R5cG1vZCh2YXJpZCwgJnZhcnR5cCwgJnZhcnR5cG1v ZCk7CisKKwlwYXJhbS0+cGFyYW1raW5kID0gUEFSQU1fU0NIRU1BX1ZBUklBQkxFOworCXBhcmFt LT5wYXJhbWlkID0gdmFyaWQ7CisJcGFyYW0tPnBhcmFtdHlwZSA9IHZhcnR5cDsKKwlwYXJhbS0+ cGFyYW10eXBtb2QgPSB2YXJ0eXBtb2Q7CisKKwlpZiAodXNlZF9maWVsZG5hbWUgIT0gTlVMTCkK Kwl7CisJCVR1cGxlRGVzYwkJdHVwZGVzYzsKKwkJaW50CQlpOworCisJCXR1cGRlc2MgPSBsb29r dXBfcm93dHlwZV90dXBkZXNjKHBhcmFtLT5wYXJhbXR5cGUsIHBhcmFtLT5wYXJhbXR5cG1vZCk7 CisKKwkJZm9yIChpID0gMDsgaSA8IHR1cGRlc2MtPm5hdHRzOyBpKyspCisJCXsKKwkJCUZvcm1f cGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaSk7CisKKwkJCWlmIChz dHJjbXAodXNlZF9maWVsZG5hbWUsIE5hbWVTdHIoYXR0LT5hdHRuYW1lKSkgPT0gMCAmJgorCQkJ CSFhdHQtPmF0dGlzZHJvcHBlZCkKKwkJCXsKKwkJCQkvKiBTdWNjZXNzLCBzbyBnZW5lcmF0ZSBh IEZpZWxkU2VsZWN0IGV4cHJlc3Npb24gKi8KKwkJCQlGaWVsZFNlbGVjdCAqZnNlbGVjdCA9IG1h a2VOb2RlKEZpZWxkU2VsZWN0KTsKKworCQkJCWZzZWxlY3QtPmFyZyA9IChFeHByICopIHBhcmFt OworCQkJCWZzZWxlY3QtPmZpZWxkbnVtID0gaSArIDE7CisJCQkJZnNlbGVjdC0+cmVzdWx0dHlw ZSA9IGF0dC0+YXR0dHlwaWQ7CisJCQkJZnNlbGVjdC0+cmVzdWx0dHlwbW9kID0gYXR0LT5hdHR0 eXBtb2Q7CisJCQkJLyogc2F2ZSBhdHRyaWJ1dGUncyBjb2xsYXRpb24gZm9yIHBhcnNlX2NvbGxh dGUuYyAqLworCQkJCWZzZWxlY3QtPnJlc3VsdGNvbGxpZCA9IGF0dC0+YXR0Y29sbGF0aW9uOwor CisJCQkJUmVsZWFzZVR1cGxlRGVzYyh0dXBkZXNjKTsKKwkJCQlyZXR1cm4gKE5vZGUgKikgZnNl bGVjdDsKKwkJCX0KKwkJfQorCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09E RV9VTkRFRklORURfQ09MVU1OKSwKKwkJIGVycm1zZygiY291bGQgbm90IGlkZW50aWZ5IGNvbHVt biBcIiVzXCIgaW4gdmFyaWFibGUiLCB1c2VkX2ZpZWxkbmFtZSksCisJCQkJIHBhcnNlcl9lcnJw b3NpdGlvbihwc3RhdGUsIGxvY2F0aW9uKSkpOworCX0KKworCXJldHVybiAoTm9kZSAqKSBwYXJh bTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYyBiL3Ny Yy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYwppbmRleCA0OTMyZTU4MDIyLi44NTQ5OTA4 MDk1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdGFyZ2V0LmMKKysrIGIv c3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jCkBAIC0zNSwxNiArMzUsNiBAQAogCiBz dGF0aWMgdm9pZCBtYXJrVGFyZ2V0TGlzdE9yaWdpbihQYXJzZVN0YXRlICpwc3RhdGUsIFRhcmdl dEVudHJ5ICp0bGUsCiAJCQkJCSBWYXIgKnZhciwgaW50IGxldmVsc3VwKTsKLXN0YXRpYyBOb2Rl ICp0cmFuc2Zvcm1Bc3NpZ25tZW50SW5kaXJlY3Rpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLAotCQkJ CQkJCSAgIE5vZGUgKmJhc2Vub2RlLAotCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnRhcmdldE5hbWUs Ci0JCQkJCQkJICAgYm9vbCB0YXJnZXRJc0FycmF5LAotCQkJCQkJCSAgIE9pZCB0YXJnZXRUeXBl SWQsCi0JCQkJCQkJICAgaW50MzIgdGFyZ2V0VHlwTW9kLAotCQkJCQkJCSAgIE9pZCB0YXJnZXRD b2xsYXRpb24sCi0JCQkJCQkJICAgTGlzdENlbGwgKmluZGlyZWN0aW9uLAotCQkJCQkJCSAgIE5v ZGUgKnJocywKLQkJCQkJCQkgICBpbnQgbG9jYXRpb24pOwogc3RhdGljIE5vZGUgKnRyYW5zZm9y bUFzc2lnbm1lbnRTdWJzY3JpcHRzKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQkgIE5vZGUg KmJhc2Vub2RlLAogCQkJCQkJCSAgY29uc3QgY2hhciAqdGFyZ2V0TmFtZSwKQEAgLTU5Niw3ICs1 ODYsNiBAQCB0cmFuc2Zvcm1Bc3NpZ25lZEV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCXJldHVy biBleHByOwogfQogCi0KIC8qCiAgKiB1cGRhdGVUYXJnZXRMaXN0RW50cnkoKQogICoJVGhpcyBp cyB1c2VkIGluIFVQREFURSBzdGF0ZW1lbnRzIChhbmQgT04gQ09ORkxJQ1QgRE8gVVBEQVRFKQpA QCAtNjcyLDcgKzY2MSw3IEBAIHVwZGF0ZVRhcmdldExpc3RFbnRyeShQYXJzZVN0YXRlICpwc3Rh dGUsCiAgKiBtaWdodCB3YW50IHRvIGRlY29yYXRlIGluZGlyZWN0aW9uIGNlbGxzIHdpdGggdGhl aXIgb3duIGxvY2F0aW9uIGluZm8sCiAgKiBpbiB3aGljaCBjYXNlIHRoZSBsb2NhdGlvbiBhcmd1 bWVudCBjb3VsZCBwcm9iYWJseSBiZSBkcm9wcGVkLikKICAqLwotc3RhdGljIE5vZGUgKgorTm9k ZSAqCiB0cmFuc2Zvcm1Bc3NpZ25tZW50SW5kaXJlY3Rpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLAog CQkJCQkJCSAgIE5vZGUgKmJhc2Vub2RlLAogCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnRhcmdldE5h bWUsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jIGIvc3Jj L2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYwppbmRleCBjNmYzNjI4ZGVmLi41NjEwOGNj N2EyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jCisrKyBi L3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV91dGlsY21kLmMKQEAgLTEwOCw2ICsxMDgsNyBAQCB0 eXBlZGVmIHN0cnVjdAogCUxpc3QJICAgKnZpZXdzOwkJCS8qIENSRUFURSBWSUVXIGl0ZW1zICov CiAJTGlzdAkgICAqaW5kZXhlczsJCS8qIENSRUFURSBJTkRFWCBpdGVtcyAqLwogCUxpc3QJICAg KnRyaWdnZXJzOwkJLyogQ1JFQVRFIFRSSUdHRVIgaXRlbXMgKi8KKwlMaXN0CSAgICp2YXJpYWJs ZXM7CQkvKiBDUkVBVEUgVkFSSUFCTEUgaXRlbXMgKi8KIAlMaXN0CSAgICpncmFudHM7CQkJLyog R1JBTlQgaXRlbXMgKi8KIH0gQ3JlYXRlU2NoZW1hU3RtdENvbnRleHQ7CiAKQEAgLTM0MzgsNiAr MzQzOSw3IEBAIHRyYW5zZm9ybUNyZWF0ZVNjaGVtYVN0bXQoQ3JlYXRlU2NoZW1hU3RtdCAqc3Rt dCkKIAljeHQudmlld3MgPSBOSUw7CiAJY3h0LmluZGV4ZXMgPSBOSUw7CiAJY3h0LnRyaWdnZXJz ID0gTklMOworCWN4dC52YXJpYWJsZXMgPSBOSUw7CiAJY3h0LmdyYW50cyA9IE5JTDsKIAogCS8q CkBAIC0zNTAzLDYgKzM1MDUsMTQgQEAgdHJhbnNmb3JtQ3JlYXRlU2NoZW1hU3RtdChDcmVhdGVT Y2hlbWFTdG10ICpzdG10KQogCQkJCX0KIAkJCQlicmVhazsKIAorCQkJY2FzZSBUX0NyZWF0ZVNj aGVtYVZhclN0bXQ6CisJCQkJeworCQkJCQlDcmVhdGVTY2hlbWFWYXJTdG10ICplbHAgPSAoQ3Jl YXRlU2NoZW1hVmFyU3RtdCAqKSBlbGVtZW50OworCisJCQkJCXNldFNjaGVtYU5hbWUoY3h0LnNj aGVtYW5hbWUsICZlbHAtPnZhcmlhYmxlLT5zY2hlbWFuYW1lKTsKKwkJCQkJY3h0LnZhcmlhYmxl cyA9IGxhcHBlbmQoY3h0LnZhcmlhYmxlcywgZWxlbWVudCk7CisJCQkJfQorCiAJCQljYXNlIFRf R3JhbnRTdG10OgogCQkJCWN4dC5ncmFudHMgPSBsYXBwZW5kKGN4dC5ncmFudHMsIGVsZW1lbnQp OwogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlSGFu ZGxlci5jIGIvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlSGFuZGxlci5jCmluZGV4IDViODdj NTU0ZjUuLjJkNjM0YzdkZDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0 ZUhhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmMKQEAg LTMzNDIsNyArMzM0Miw3IEBAIFJld3JpdGVRdWVyeShRdWVyeSAqcGFyc2V0cmVlLCBMaXN0ICpy ZXdyaXRlX2V2ZW50cykKIAkJCQkJCQkJCXJ0X2VudHJ5X3JlbGF0aW9uLAogCQkJCQkJCQkJcGFy c2V0cmVlLT5yZXN1bHRSZWxhdGlvbiwgTlVMTCk7CiAJCX0KLQkJZWxzZSBpZiAoZXZlbnQgPT0g Q01EX0RFTEVURSkKKwkJZWxzZSBpZiAoZXZlbnQgPT0gQ01EX0RFTEVURSB8fCBldmVudCA9PSBD TURfTEVUKQogCQl7CiAJCQkvKiBOb3RoaW5nIHRvIGRvIGhlcmUgKi8KIAkJfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMK aW5kZXggNjZjYzVjMzVjNi4uMzRkZGI3OWEzZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNv cC9wcXVlcnkuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3BxdWVyeS5jCkBAIC0xOTMsNiArMTkz LDEwIEBAIFByb2Nlc3NRdWVyeShQbGFubmVkU3RtdCAqcGxhbiwKIAkJCQkJCSAiREVMRVRFICIg VUlOVDY0X0ZPUk1BVCwKIAkJCQkJCSBxdWVyeURlc2MtPmVzdGF0ZS0+ZXNfcHJvY2Vzc2VkKTsK IAkJCQlicmVhazsKKwkJCWNhc2UgQ01EX0xFVDoKKwkJCQlzbnByaW50Zihjb21wbGV0aW9uVGFn LCBDT01QTEVUSU9OX1RBR19CVUZTSVpFLAorCQkJCQkJICJMRVQgIik7CisJCQkJYnJlYWs7CiAJ CQlkZWZhdWx0OgogCQkJCXN0cmNweShjb21wbGV0aW9uVGFnLCAiPz8/Iik7CiAJCQkJYnJlYWs7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYyBiL3NyYy9iYWNrZW5kL3Rj b3AvdXRpbGl0eS5jCmluZGV4IDZlN2Y0NTQ1YWQuLmEwMjkxMmEwYzggMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5j CkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvcHJvY2xhbmcuaCIKICNpbmNs dWRlICJjb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuaCIKICNpbmNsdWRlICJjb21tYW5kcy9zY2hl bWFjbWRzLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvc2NoZW1hdmFyLmgiCiAjaW5jbHVkZSAiY29t bWFuZHMvc2VjbGFiZWwuaCIKICNpbmNsdWRlICJjb21tYW5kcy9zZXF1ZW5jZS5oIgogI2luY2x1 ZGUgImNvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuaCIKQEAgLTExMyw2ICsxMTQsNyBAQCBDb21t YW5kSXNSZWFkT25seShQbGFubmVkU3RtdCAqcHN0bXQpCiAJCWNhc2UgQ01EX0RFTEVURToKIAkJ CXJldHVybiBmYWxzZTsKIAkJY2FzZSBDTURfVVRJTElUWToKKwkJY2FzZSBDTURfTEVUOgogCQkJ LyogRm9yIG5vdywgdHJlYXQgYWxsIHV0aWxpdHkgY29tbWFuZHMgYXMgcmVhZC93cml0ZSAqLwog CQkJcmV0dXJuIGZhbHNlOwogCQlkZWZhdWx0OgpAQCAtMTc4LDYgKzE4MCw3IEBAIGNoZWNrX3hh Y3RfcmVhZG9ubHkoTm9kZSAqcGFyc2V0cmVlKQogCQljYXNlIFRfQ3JlYXRlU2NoZW1hU3RtdDoK IAkJY2FzZSBUX0NyZWF0ZVNlcVN0bXQ6CiAJCWNhc2UgVF9DcmVhdGVTdG10OgorCQljYXNlIFRf Q3JlYXRlU2NoZW1hVmFyU3RtdDoKIAkJY2FzZSBUX0NyZWF0ZVRhYmxlQXNTdG10OgogCQljYXNl IFRfUmVmcmVzaE1hdFZpZXdTdG10OgogCQljYXNlIFRfQ3JlYXRlVGFibGVTcGFjZVN0bXQ6CkBA IC0xNDU5LDYgKzE0NjIsMTAgQEAgUHJvY2Vzc1V0aWxpdHlTbG93KFBhcnNlU3RhdGUgKnBzdGF0 ZSwKIAkJCQlhZGRyZXNzID0gQWx0ZXJTZXF1ZW5jZShwc3RhdGUsIChBbHRlclNlcVN0bXQgKikg cGFyc2V0cmVlKTsKIAkJCQlicmVhazsKIAorCQkJY2FzZSBUX0NyZWF0ZVNjaGVtYVZhclN0bXQ6 CisJCQkJYWRkcmVzcyA9IERlZmluZVNjaGVtYVZhcmlhYmxlKHBzdGF0ZSwgKENyZWF0ZVNjaGVt YVZhclN0bXQgKikgcGFyc2V0cmVlKTsKKwkJCQlicmVhazsKKwogCQkJY2FzZSBUX0NyZWF0ZVRh YmxlQXNTdG10OgogCQkJCWFkZHJlc3MgPSBFeGVjQ3JlYXRlVGFibGVBcygoQ3JlYXRlVGFibGVB c1N0bXQgKikgcGFyc2V0cmVlLAogCQkJCQkJCQkJCQlxdWVyeVN0cmluZywgcGFyYW1zLCBxdWVy eUVudiwKQEAgLTIwMzIsNiArMjAzOSw5IEBAIEFsdGVyT2JqZWN0VHlwZUNvbW1hbmRUYWcoT2Jq ZWN0VHlwZSBvYmp0eXBlKQogCQljYXNlIE9CSkVDVF9TVEFUSVNUSUNfRVhUOgogCQkJdGFnID0g IkFMVEVSIFNUQVRJU1RJQ1MiOwogCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX1ZBUklBQkxFOgor CQkJdGFnID0gIkFMVEVSIFZBUklBQkxFIjsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJdGFn ID0gIj8/PyI7CiAJCQlicmVhazsKQEAgLTIwODEsNiArMjA5MSwxMCBAQCBDcmVhdGVDb21tYW5k VGFnKE5vZGUgKnBhcnNldHJlZSkKIAkJCXRhZyA9ICJTRUxFQ1QiOwogCQkJYnJlYWs7CiAKKwkJ Y2FzZSBUX0xldFN0bXQ6CisJCQl0YWcgPSAiTEVUIjsKKwkJCWJyZWFrOworCiAJCQkvKiB1dGls aXR5IHN0YXRlbWVudHMgLS0tIHNhbWUgd2hldGhlciByYXcgb3IgY29va2VkICovCiAJCWNhc2Ug VF9UcmFuc2FjdGlvblN0bXQ6CiAJCQl7CkBAIC0yMjQ1LDYgKzIyNTksOSBAQCBDcmVhdGVDb21t YW5kVGFnKE5vZGUgKnBhcnNldHJlZSkKIAkJCQljYXNlIE9CSkVDVF9JTkRFWDoKIAkJCQkJdGFn ID0gIkRST1AgSU5ERVgiOwogCQkJCQlicmVhazsKKwkJCQljYXNlIE9CSkVDVF9WQVJJQUJMRToK KwkJCQkJdGFnID0gIkRST1AgVkFSSUFCTEUiOworCQkJCQlicmVhazsKIAkJCQljYXNlIE9CSkVD VF9UWVBFOgogCQkJCQl0YWcgPSAiRFJPUCBUWVBFIjsKIAkJCQkJYnJlYWs7CkBAIC0yNDk5LDYg KzI1MTYsMTAgQEAgQ3JlYXRlQ29tbWFuZFRhZyhOb2RlICpwYXJzZXRyZWUpCiAJCQl0YWcgPSAi QUxURVIgU0VRVUVOQ0UiOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBUX0NyZWF0ZVNjaGVtYVZhclN0 bXQ6CisJCQl0YWcgPSAiQ1JFQVRFIFZBUklBQkxFIjsKKwkJCWJyZWFrOworCiAJCWNhc2UgVF9E b1N0bXQ6CiAJCQl0YWcgPSAiRE8iOwogCQkJYnJlYWs7CkBAIC0yNjE2LDYgKzI2MzcsOSBAQCBD cmVhdGVDb21tYW5kVGFnKE5vZGUgKnBhcnNldHJlZSkKIAkJCQljYXNlIERJU0NBUkRfU0VRVUVO Q0VTOgogCQkJCQl0YWcgPSAiRElTQ0FSRCBTRVFVRU5DRVMiOwogCQkJCQlicmVhazsKKwkJCQlj YXNlIERJU0NBUkRfVkFSSUFCTEVTOgorCQkJCQl0YWcgPSAiRElTQ0FSRCBWQVJJQUJMRVMiOwor CQkJCQlicmVhazsKIAkJCQlkZWZhdWx0OgogCQkJCQl0YWcgPSAiPz8/IjsKIAkJCX0KQEAgLTI4 MjAsNiArMjg0NCw5IEBAIENyZWF0ZUNvbW1hbmRUYWcoTm9kZSAqcGFyc2V0cmVlKQogCQkJCQlj YXNlIENNRF9ERUxFVEU6CiAJCQkJCQl0YWcgPSAiREVMRVRFIjsKIAkJCQkJCWJyZWFrOworCQkJ CQljYXNlIENNRF9MRVQ6CisJCQkJCQl0YWcgPSAiTEVUIjsKKwkJCQkJCWJyZWFrOwogCQkJCQlj YXNlIENNRF9VVElMSVRZOgogCQkJCQkJdGFnID0gQ3JlYXRlQ29tbWFuZFRhZyhzdG10LT51dGls aXR5U3RtdCk7CiAJCQkJCQlicmVhazsKQEAgLTI5MzgsNiArMjk2NSwxMCBAQCBHZXRDb21tYW5k TG9nTGV2ZWwoTm9kZSAqcGFyc2V0cmVlKQogCQkJCWxldiA9IExPR1NUTVRfQUxMOwogCQkJYnJl YWs7CiAKKwkJY2FzZSBUX0xldFN0bXQ6CisJCQlsZXYgPSBMT0dTVE1UX0FMTDsKKwkJCWJyZWFr OworCiAJCQkvKiB1dGlsaXR5IHN0YXRlbWVudHMgLS0tIHNhbWUgd2hldGhlciByYXcgb3IgY29v a2VkICovCiAJCWNhc2UgVF9UcmFuc2FjdGlvblN0bXQ6CiAJCQlsZXYgPSBMT0dTVE1UX0FMTDsK QEAgLTMzOTEsNiArMzQyMiw3IEBAIEdldENvbW1hbmRMb2dMZXZlbChOb2RlICpwYXJzZXRyZWUp CiAJCQkJc3dpdGNoIChzdG10LT5jb21tYW5kVHlwZSkKIAkJCQl7CiAJCQkJCWNhc2UgQ01EX1NF TEVDVDoKKwkJCQkJY2FzZSBDTURfTEVUOgogCQkJCQkJbGV2ID0gTE9HU1RNVF9BTEw7CiAJCQkJ CQlicmVhazsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FjbC5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2FjbC5jCmluZGV4IDBjZmMyOTdiNjUuLmZjZDY5NTgzNmEgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hY2wuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvYWNsLmMKQEAgLTgwOCw2ICs4MDgsMTAgQEAgYWNsZGVmYXVsdChPYmplY3RUeXBl IG9ianR5cGUsIE9pZCBvd25lcklkKQogCQkJd29ybGRfZGVmYXVsdCA9IEFDTF9VU0FHRTsKIAkJ CW93bmVyX2RlZmF1bHQgPSBBQ0xfQUxMX1JJR0hUU19UWVBFOwogCQkJYnJlYWs7CisJCWNhc2Ug T0JKRUNUX1ZBUklBQkxFOgorCQkJd29ybGRfZGVmYXVsdCA9IEFDTF9OT19SSUdIVFM7CisJCQlv d25lcl9kZWZhdWx0ID0gQUNMX0FMTF9SSUdIVFNfVkFSSUFCTEU7CisJCQlicmVhazsKIAkJZGVm YXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgb2JqdHlwZTogJWQiLCAoaW50KSBv Ymp0eXBlKTsKIAkJCXdvcmxkX2RlZmF1bHQgPSBBQ0xfTk9fUklHSFRTOwkvKiBrZWVwIGNvbXBp bGVyIHF1aWV0ICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxz LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKaW5kZXggNzRlMWNkOGFmYi4u NWQzZDc0NTFiOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwpAQCAtNDAsNiArNDAsNyBA QAogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2RlZnJl bS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIKKyNpbmNsdWRlICJjb21tYW5k cy9zY2hlbWF2YXIuaCIKICNpbmNsdWRlICJjb21tb24va2V5d29yZHMuaCIKICNpbmNsdWRlICJl eGVjdXRvci9zcGkuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCkBAIC0zODIsNiArMzgzLDcgQEAg c3RhdGljIHZvaWQgZ2V0X3VwZGF0ZV9xdWVyeV90YXJnZXRsaXN0X2RlZihRdWVyeSAqcXVlcnks IExpc3QgKnRhcmdldExpc3QsCiAJCQkJCQkJCWRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkJ CQkJCQkJUmFuZ2VUYmxFbnRyeSAqcnRlKTsKIHN0YXRpYyB2b2lkIGdldF9kZWxldGVfcXVlcnlf ZGVmKFF1ZXJ5ICpxdWVyeSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKK3N0YXRpYyB2b2lk IGdldF9sZXRfcXVlcnlfZGVmKFF1ZXJ5ICpxdWVyeSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0 KTsKIHN0YXRpYyB2b2lkIGdldF91dGlsaXR5X3F1ZXJ5X2RlZihRdWVyeSAqcXVlcnksIGRlcGFy c2VfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgdm9pZCBnZXRfYmFzaWNfc2VsZWN0X3F1ZXJ5 KFF1ZXJ5ICpxdWVyeSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LAogCQkJCQkgICBUdXBsZURl c2MgcmVzdWx0RGVzYyk7CkBAIC00OTg5LDYgKzQ5OTEsMTAgQEAgZ2V0X3F1ZXJ5X2RlZihRdWVy eSAqcXVlcnksIFN0cmluZ0luZm8gYnVmLCBMaXN0ICpwYXJlbnRuYW1lc3BhY2UsCiAJCQlnZXRf ZGVsZXRlX3F1ZXJ5X2RlZihxdWVyeSwgJmNvbnRleHQpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBD TURfTEVUOgorCQkJZ2V0X2xldF9xdWVyeV9kZWYocXVlcnksICZjb250ZXh0KTsKKwkJCWJyZWFr OworCiAJCWNhc2UgQ01EX05PVEhJTkc6CiAJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwg Ik5PVEhJTkciKTsKIAkJCWJyZWFrOwpAQCAtNjIwNiw2ICs2MjEyLDU4IEBAIGdldF9pbnNlcnRf cXVlcnlfZGVmKFF1ZXJ5ICpxdWVyeSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KQogCX0KIH0K IAorLyogLS0tLS0tLS0tLQorICogZ2V0X2xldF9xdWVyeV9kZWYJCQktIFBhcnNlIGJhY2sgYW4g TEVUIHBhcnNldHJlZQorICogLS0tLS0tLS0tLQorICovCitzdGF0aWMgdm9pZAorZ2V0X2xldF9x dWVyeV9kZWYoUXVlcnkgKnF1ZXJ5LCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpCit7CisJU3Ry aW5nSW5mbwlidWYgPSBjb250ZXh0LT5idWY7CisJUmFuZ2VUYmxFbnRyeSAqc2VsZWN0X3J0ZSA9 IE5VTEw7CisJUmFuZ2VUYmxFbnRyeSAqcnRlOworCUxpc3RDZWxsICAgKmw7CisKKwkvKgorCSAq IElmIGl0J3MgYW4gSU5TRVJUIC4uLiBTRUxFQ1Qgb3IgbXVsdGktcm93IFZBTFVFUywgdGhlcmUg d2lsbCBiZSBhCisJICogc2luZ2xlIFJURSBmb3IgdGhlIFNFTEVDVCBvciBWQUxVRVMuICBQbGFp biBWQUxVRVMgaGFzIG5laXRoZXIuCisJICovCisJZm9yZWFjaChsLCBxdWVyeS0+cnRhYmxlKQor CXsKKwkJcnRlID0gKFJhbmdlVGJsRW50cnkgKikgbGZpcnN0KGwpOworCisJCWlmIChydGUtPnJ0 ZWtpbmQgPT0gUlRFX1NVQlFVRVJZKQorCQl7CisJCQlpZiAoc2VsZWN0X3J0ZSkKKwkJCQllbG9n KEVSUk9SLCAidG9vIG1hbnkgc3VicXVlcnkgUlRFcyBpbiBJTlNFUlQiKTsKKwkJCXNlbGVjdF9y dGUgPSBydGU7CisJCX0KKwl9CisKKwkvKgorCSAqIFN0YXJ0IHRoZSBxdWVyeSB3aXRoIElOU0VS VCBJTlRPIHJlbG5hbWUKKwkgKi8KKwlydGUgPSBydF9mZXRjaChxdWVyeS0+cmVzdWx0UmVsYXRp b24sIHF1ZXJ5LT5ydGFibGUpOworCUFzc2VydChydGUtPnJ0ZWtpbmQgPT0gUlRFX1JFTEFUSU9O KTsKKworCWlmIChQUkVUVFlfSU5ERU5UKGNvbnRleHQpKQorCXsKKwkJY29udGV4dC0+aW5kZW50 TGV2ZWwgKz0gUFJFVFRZSU5ERU5UX1NURDsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAn ICcpOworCX0KKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIkxFVCAlcyAiLAorCQkJCQkgZ2VuZXJh dGVfcmVsYXRpb25fbmFtZShydGUtPnJlbGlkLCBOSUwpKTsKKworCWFwcGVuZFN0cmluZ0luZm8o YnVmLCAiID0gIik7CisKKwlpZiAoc2VsZWN0X3J0ZSkKKwl7CisJCS8qIEFkZCB0aGUgU0VMRUNU ICovCisJCWdldF9xdWVyeV9kZWYoc2VsZWN0X3J0ZS0+c3VicXVlcnksIGJ1ZiwgTklMLCBOVUxM LAorCQkJCQkgIGNvbnRleHQtPnByZXR0eUZsYWdzLCBjb250ZXh0LT53cmFwQ29sdW1uLAorCQkJ CQkgIGNvbnRleHQtPmluZGVudExldmVsKTsKKwl9Cit9CiAKIC8qIC0tLS0tLS0tLS0KICAqIGdl dF91cGRhdGVfcXVlcnlfZGVmCQkJLSBQYXJzZSBiYWNrIGFuIFVQREFURSBwYXJzZXRyZWUKQEAg LTcyODEsNiArNzMzOSwxMyBAQCBnZXRfcGFyYW1ldGVyKFBhcmFtICpwYXJhbSwgZGVwYXJzZV9j b250ZXh0ICpjb250ZXh0KQogCWRlcGFyc2VfbmFtZXNwYWNlICpkcG5zOwogCUxpc3RDZWxsICAg KmFuY2VzdG9yX2NlbGw7CiAKKwlpZiAocGFyYW0tPnBhcmFta2luZCA9PSBQQVJBTV9TQ0hFTUFf VkFSSUFCTEUpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGNvbnRleHQtPmJ1ZiwgIiVzIiwgZ2V0 X3NjaGVtYXZhcl9uYW1lKHBhcmFtLT5wYXJhbWlkKSk7CisKKwkJcmV0dXJuOworCX0KKwogCS8q CiAJICogSWYgaXQncyBhIFBBUkFNX0VYRUMgcGFyYW1ldGVyLCB0cnkgdG8gbG9jYXRlIHRoZSBl eHByZXNzaW9uIGZyb20gd2hpY2gKIAkgKiB0aGUgcGFyYW1ldGVyIHdhcyBjb21wdXRlZC4gIE5v dGUgdGhhdCBmYWlsaW5nIHRvIGZpbmQgYSByZWZlcmVudCBpc24ndApkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19kdW1wL2NvbW1vbi5jIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbi5jCmluZGV4IGU3 ZGI3OGIwZmYuLmNlYWJjMGUwNmEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9jb21tb24u YworKysgYi9zcmMvYmluL3BnX2R1bXAvY29tbW9uLmMKQEAgLTMyNiw3ICszMjYsOCBAQCBmbGFn SW5oVGFibGVzKEFyY2hpdmUgKmZvdXQsIFRhYmxlSW5mbyAqdGJsaW5mbywgaW50IG51bVRhYmxl cywKIAkJLyogU29tZSBraW5kcyBuZXZlciBoYXZlIHBhcmVudHMgKi8KIAkJaWYgKHRibGluZm9b aV0ucmVsa2luZCA9PSBSRUxLSU5EX1NFUVVFTkNFIHx8CiAJCQl0YmxpbmZvW2ldLnJlbGtpbmQg PT0gUkVMS0lORF9WSUVXIHx8Ci0JCQl0YmxpbmZvW2ldLnJlbGtpbmQgPT0gUkVMS0lORF9NQVRW SUVXKQorCQkJdGJsaW5mb1tpXS5yZWxraW5kID09IFJFTEtJTkRfTUFUVklFVyB8fAorCQkJdGJs aW5mb1tpXS5yZWxraW5kID09IFJFTEtJTkRfVkFSSUFCTEUpCiAJCQljb250aW51ZTsKIAogCQkv KgpAQCAtNDc1LDcgKzQ3Niw4IEBAIGZsYWdJbmhBdHRycyhEdW1wT3B0aW9ucyAqZG9wdCwgVGFi bGVJbmZvICp0YmxpbmZvLCBpbnQgbnVtVGFibGVzKQogCQkvKiBTb21lIGtpbmRzIG5ldmVyIGhh dmUgcGFyZW50cyAqLwogCQlpZiAodGJpbmZvLT5yZWxraW5kID09IFJFTEtJTkRfU0VRVUVOQ0Ug fHwKIAkJCXRiaW5mby0+cmVsa2luZCA9PSBSRUxLSU5EX1ZJRVcgfHwKLQkJCXRiaW5mby0+cmVs a2luZCA9PSBSRUxLSU5EX01BVFZJRVcpCisJCQl0YmluZm8tPnJlbGtpbmQgPT0gUkVMS0lORF9N QVRWSUVXIHx8CisJCQl0YmluZm8tPnJlbGtpbmQgPT0gUkVMS0lORF9WQVJJQUJMRSkKIAkJCWNv bnRpbnVlOwogCiAJCS8qIERvbid0IGJvdGhlciBjb21wdXRpbmcgYW55dGhpbmcgZm9yIG5vbi10 YXJnZXQgdGFibGVzLCBlaXRoZXIgKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfYXJjaGl2ZXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwpp bmRleCA4M2M5NzZlYWY3Li43MGIzZGE5YzkzIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX2FyY2hpdmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNo aXZlci5jCkBAIC0zNDgwLDcgKzM0ODAsOCBAQCBfZ2V0T2JqZWN0RGVzY3JpcHRpb24oUFFFeHBC dWZmZXIgYnVmLCBUb2NFbnRyeSAqdGUsIEFyY2hpdmVIYW5kbGUgKkFIKQogCQlzdHJjbXAodHlw ZSwgIlNFUlZFUiIpID09IDAgfHwKIAkJc3RyY21wKHR5cGUsICJQVUJMSUNBVElPTiIpID09IDAg fHwKIAkJc3RyY21wKHR5cGUsICJTVUJTQ1JJUFRJT04iKSA9PSAwIHx8Ci0JCXN0cmNtcCh0eXBl LCAiVVNFUiBNQVBQSU5HIikgPT0gMCkKKwkJc3RyY21wKHR5cGUsICJVU0VSIE1BUFBJTkciKSA9 PSAwIHx8CisJCXN0cmNtcCh0eXBlLCAiVkFSSUFCTEUiKSA9PSAwKQogCXsKIAkJYXBwZW5kUFFF eHBCdWZmZXIoYnVmLCAiJXMgIiwgdHlwZSk7CiAJCWlmICh0ZS0+bmFtZXNwYWNlICYmICp0ZS0+ bmFtZXNwYWNlKQpAQCAtMzY2MSw2ICszNjYyLDcgQEAgX3ByaW50VG9jRW50cnkoQXJjaGl2ZUhh bmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwgYm9vbCBpc0RhdGEpCiAJCQlzdHJjbXAodGUtPmRlc2Ms ICJUQUJMRSIpID09IDAgfHwKIAkJCXN0cmNtcCh0ZS0+ZGVzYywgIlRZUEUiKSA9PSAwIHx8CiAJ CQlzdHJjbXAodGUtPmRlc2MsICJWSUVXIikgPT0gMCB8fAorCQkJc3RyY21wKHRlLT5kZXNjLCAi VkFSSUFCTEUiKSA9PSAwIHx8CiAJCQlzdHJjbXAodGUtPmRlc2MsICJNQVRFUklBTElaRUQgVklF VyIpID09IDAgfHwKIAkJCXN0cmNtcCh0ZS0+ZGVzYywgIlNFUVVFTkNFIikgPT0gMCB8fAogCQkJ c3RyY21wKHRlLT5kZXNjLCAiRk9SRUlHTiBUQUJMRSIpID09IDAgfHwKZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4 IGIxMWZlOTQyMTIuLjk3ZWE5NjgwMGQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19k dW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAtMTMyNSwxMCArMTMyNSwx MSBAQCBleHBhbmRfdGFibGVfbmFtZV9wYXR0ZXJucyhBcmNoaXZlICpmb3V0LAogCQkJCQkJICAi XG4gICAgIExFRlQgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIgogCQkJCQkJICAiXG4g ICAgIE9OIG4ub2lkIE9QRVJBVE9SKHBnX2NhdGFsb2cuPSkgYy5yZWxuYW1lc3BhY2UiCiAJCQkJ CQkgICJcbldIRVJFIGMucmVsa2luZCBPUEVSQVRPUihwZ19jYXRhbG9nLj0pIEFOWSIKLQkJCQkJ CSAgIlxuICAgIChhcnJheVsnJWMnLCAnJWMnLCAnJWMnLCAnJWMnLCAnJWMnLCAnJWMnXSlcbiIs CisJCQkJCQkgICJcbiAgICAoYXJyYXlbJyVjJywgJyVjJywgJyVjJywgJyVjJywgJyVjJywgJyVj LCAlYyddKVxuIiwKIAkJCQkJCSAgUkVMS0lORF9SRUxBVElPTiwgUkVMS0lORF9TRVFVRU5DRSwg UkVMS0lORF9WSUVXLAogCQkJCQkJICBSRUxLSU5EX01BVFZJRVcsIFJFTEtJTkRfRk9SRUlHTl9U QUJMRSwKLQkJCQkJCSAgUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSk7CisJCQkJCQkgIFJFTEtJ TkRfUEFSVElUSU9ORURfVEFCTEUsCisJCQkJCQkgIFJFTEtJTkRfVkFSSUFCTEUpOwogCQlwcm9j ZXNzU1FMTmFtZVBhdHRlcm4oR2V0Q29ubmVjdGlvbihmb3V0KSwgcXVlcnksIGNlbGwtPnZhbCwg dHJ1ZSwKIAkJCQkJCQkgIGZhbHNlLCAibi5uc3BuYW1lIiwgImMucmVsbmFtZSIsIE5VTEwsCiAJ CQkJCQkJICAicGdfY2F0YWxvZy5wZ190YWJsZV9pc192aXNpYmxlKGMub2lkKSIpOwpAQCAtMjI1 Niw2ICsyMjU3LDEwIEBAIG1ha2VUYWJsZURhdGFJbmZvKER1bXBPcHRpb25zICpkb3B0LCBUYWJs ZUluZm8gKnRiaW5mbywgYm9vbCBvaWRzKQogCQlkb3B0LT5ub191bmxvZ2dlZF90YWJsZV9kYXRh KQogCQlyZXR1cm47CiAKKwkvKiBEb24ndCBkdW1wIGRhdGEgb2YgdmFyaWFibGVzICovCisJaWYg KHRiaW5mby0+cmVsa2luZCA9PSBSRUxLSU5EX1ZBUklBQkxFKQorCQlyZXR1cm47CisKIAkvKiBD aGVjayB0aGF0IHRoZSBkYXRhIGlzIG5vdCBleHBsaWNpdGx5IGV4Y2x1ZGVkICovCiAJaWYgKHNp bXBsZV9vaWRfbGlzdF9tZW1iZXIoJnRhYmxlZGF0YV9leGNsdWRlX29pZHMsCiAJCQkJCQkJICAg dGJpbmZvLT5kb2JqLmNhdElkLm9pZCkpCkBAIC0yNDc3LDkgKzI0ODIsMTAgQEAgZ3Vlc3NDb25z dHJhaW50SW5oZXJpdGFuY2UoVGFibGVJbmZvICp0YmxpbmZvLCBpbnQgbnVtVGFibGVzKQogCQlU YWJsZUluZm8gKipwYXJlbnRzOwogCQlUYWJsZUluZm8gICpwYXJlbnQ7CiAKLQkJLyogU2VxdWVu Y2VzIGFuZCB2aWV3cyBuZXZlciBoYXZlIHBhcmVudHMgKi8KKwkJLyogU2VxdWVuY2VzLCB2YXJp YWJsZXMgYW5kIHZpZXdzIG5ldmVyIGhhdmUgcGFyZW50cyAqLwogCQlpZiAodGJpbmZvLT5yZWxr aW5kID09IFJFTEtJTkRfU0VRVUVOQ0UgfHwKLQkJCXRiaW5mby0+cmVsa2luZCA9PSBSRUxLSU5E X1ZJRVcpCisJCQl0YmluZm8tPnJlbGtpbmQgPT0gUkVMS0lORF9WSUVXIHx8CisJCQl0YmluZm8t PnJlbGtpbmQgPT0gUkVMS0lORF9WQVJJQUJMRSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIERvbid0 IGJvdGhlciBjb21wdXRpbmcgYW55dGhpbmcgZm9yIG5vbi10YXJnZXQgdGFibGVzLCBlaXRoZXIg Ki8KQEAgLTU5ODksNyArNTk5NSw3IEBAIGdldFRhYmxlcyhBcmNoaXZlICpmb3V0LCBpbnQgKm51 bVRhYmxlcykKIAkJCQkJCSAgIihjLm9pZCA9IHBpcC5vYmpvaWQgIgogCQkJCQkJICAiQU5EIHBp cC5jbGFzc29pZCA9ICdwZ19jbGFzcyc6OnJlZ2NsYXNzICIKIAkJCQkJCSAgIkFORCBwaXAub2Jq c3ViaWQgPSAwKSAiCi0JCQkJCQkgICJXSEVSRSBjLnJlbGtpbmQgaW4gKCclYycsICclYycsICcl YycsICclYycsICclYycsICclYycsICclYycpICIKKwkJCQkJCSAgIldIRVJFIGMucmVsa2luZCBp biAoJyVjJywgJyVjJywgJyVjJywgJyVjJywgJyVjJywgJyVjJywgJyVjJywgJyVjJykgIgogCQkJ CQkJICAiT1JERVIgQlkgYy5vaWQiLAogCQkJCQkJICBhY2xfc3VicXVlcnktPmRhdGEsCiAJCQkJ CQkgIHJhY2xfc3VicXVlcnktPmRhdGEsCkBAIC02MDA4LDcgKzYwMTQsOCBAQCBnZXRUYWJsZXMo QXJjaGl2ZSAqZm91dCwgaW50ICpudW1UYWJsZXMpCiAJCQkJCQkgIFJFTEtJTkRfUkVMQVRJT04s IFJFTEtJTkRfU0VRVUVOQ0UsCiAJCQkJCQkgIFJFTEtJTkRfVklFVywgUkVMS0lORF9DT01QT1NJ VEVfVFlQRSwKIAkJCQkJCSAgUkVMS0lORF9NQVRWSUVXLCBSRUxLSU5EX0ZPUkVJR05fVEFCTEUs Ci0JCQkJCQkgIFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpOworCQkJCQkJICBSRUxLSU5EX1BB UlRJVElPTkVEX1RBQkxFLAorCQkJCQkJICBSRUxLSU5EX1ZBUklBQkxFKTsKIAogCQlkZXN0cm95 UFFFeHBCdWZmZXIoYWNsX3N1YnF1ZXJ5KTsKIAkJZGVzdHJveVBRRXhwQnVmZmVyKHJhY2xfc3Vi cXVlcnkpOwpAQCAtMTU0MTYsNiArMTU0MjMsMTEgQEAgZHVtcFRhYmxlU2NoZW1hKEFyY2hpdmUg KmZvdXQsIFRhYmxlSW5mbyAqdGJpbmZvKQogCQkJCXNydm5hbWUgPSBOVUxMOwogCQkJCWZ0b3B0 aW9ucyA9IE5VTEw7CiAJCQkJYnJlYWs7CisJCQljYXNlIFJFTEtJTkRfVkFSSUFCTEU6CisJCQkJ cmVsdHlwZW5hbWUgPSAiVkFSSUFCTEUiOworCQkJCXNydm5hbWUgPSBOVUxMOworCQkJCWZ0b3B0 aW9ucyA9IE5VTEw7CisJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCXJlbHR5cGVuYW1lID0g IlRBQkxFIjsKIAkJCQlzcnZuYW1lID0gTlVMTDsKQEAgLTE1NDM3LDEyICsxNTQ0OSwyOCBAQCBk dW1wVGFibGVTY2hlbWEoQXJjaGl2ZSAqZm91dCwgVGFibGVJbmZvICp0YmluZm8pCiAJCQkJCQkg IHJlbHR5cGVuYW1lLAogCQkJCQkJICBxdWFscmVsbmFtZSk7CiAKKwkJLyoKKwkJICogQmluYXJ5 IHVwZ3JhZGUgb2YgdmFyaWFibGVzIHNob3VsZCB0byBiZSBmaXhlZCB3aXRoIHN1cHBvcnQKKwkJ ICogY29tcG9zaXRlIHR5cGVzLCBhbmQgc2hvdWxkIGJlIHRlc3RlZCBUb0RvCisJCSAqLworCQlp ZiAodGJpbmZvLT5yZWxraW5kID09IFJFTEtJTkRfVkFSSUFCTEUpCisJCXsKKwkJCQlhcHBlbmRQ UUV4cEJ1ZmZlcihxLCAiIEFTIik7CisJCQkJaWYgKHRiaW5mby0+cmVsb2Z0eXBlICE9IE5VTEwp CisJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKHEsICIgJXMiLAorCQkJCQkJCQkJICB0YmluZm8tPmF0 dHR5cG5hbWVzWzBdKTsKKwkJCQlpZiAodGJpbmZvLT5hdHRyZGVmc1swXSAhPSBOVUxMICYmIHRi aW5mby0+YXR0cmRlZnNbMF0tPmFkZWZfZXhwciAhPSBOVUxMKQorCQkJCQlhcHBlbmRQUUV4cEJ1 ZmZlcihxLCAiIERFRkFVTFQgJXMiLAorCQkJCQkJCQkJICB0YmluZm8tPmF0dHJkZWZzWzBdLT5h ZGVmX2V4cHIpOworCQl9CisKIAkJLyoKIAkJICogQXR0YWNoIHRvIHR5cGUsIGlmIHJlbG9mdHlw ZTsgZXhjZXB0IGluIGNhc2Ugb2YgYSBiaW5hcnkgdXBncmFkZSwKIAkJICogd2UgZHVtcCB0aGUg dGFibGUgbm9ybWFsbHkgYW5kIGF0dGFjaCBpdCB0byB0aGUgdHlwZSBhZnRlcndhcmQuCiAJCSAq LwotCQlpZiAodGJpbmZvLT5yZWxvZnR5cGUgJiYgIWRvcHQtPmJpbmFyeV91cGdyYWRlKQotCQkJ YXBwZW5kUFFFeHBCdWZmZXIocSwgIiBPRiAlcyIsIHRiaW5mby0+cmVsb2Z0eXBlKTsKKwkJZWxz ZSBpZiAodGJpbmZvLT5yZWxvZnR5cGUgJiYgIWRvcHQtPmJpbmFyeV91cGdyYWRlKQorCQkJYXBw ZW5kUFFFeHBCdWZmZXIocSwgIiBPRiAlcyIsCisJCQkJCQkJICB0YmluZm8tPnJlbG9mdHlwZSk7 CiAKIAkJLyoKIAkJICogSWYgdGhlIHRhYmxlIGlzIGEgcGFydGl0aW9uLCBkdW1wIGl0IGFzIHN1 Y2g7IGV4Y2VwdCBpbiB0aGUgY2FzZSBvZgpAQCAtMTU0NjUsNyArMTU0OTMsOCBAQCBkdW1wVGFi bGVTY2hlbWEoQXJjaGl2ZSAqZm91dCwgVGFibGVJbmZvICp0YmluZm8pCiAJCQkJCQkJICBmbXRR dWFsaWZpZWREdW1wYWJsZShwYXJlbnRSZWwpKTsKIAkJfQogCi0JCWlmICh0YmluZm8tPnJlbGtp bmQgIT0gUkVMS0lORF9NQVRWSUVXKQorCQlpZiAodGJpbmZvLT5yZWxraW5kICE9IFJFTEtJTkRf TUFUVklFVyAmJgorCQkJISh0YmluZm8tPnJlbGtpbmQgPT0gUkVMS0lORF9WQVJJQUJMRSAmJiB0 YmluZm8tPnJlbG9mdHlwZSAhPSBOVUxMKSkKIAkJewogCQkJLyogRHVtcCB0aGUgYXR0cmlidXRl cyAqLwogCQkJYWN0dWFsX2F0dHMgPSAwOwpAQCAtMTU1OTEsNyArMTU2MjAsOCBAQCBkdW1wVGFi bGVTY2hlbWEoQXJjaGl2ZSAqZm91dCwgVGFibGVJbmZvICp0YmluZm8pCiAJCQkJICogV2UgbXVz dCBoYXZlIGEgcGFyZW50aGVzaXplZCBhdHRyaWJ1dGUgbGlzdCwgZXZlbiB0aG91Z2gKIAkJCQkg KiBlbXB0eSwgd2hlbiBub3QgdXNpbmcgdGhlIE9GIFRZUEUgb3IgUEFSVElUSU9OIE9GIHN5bnRh eC4KIAkJCQkgKi8KLQkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxLCAiIChcbikiKTsKKwkJCQlp ZiAodGJpbmZvLT5yZWxraW5kICE9IFJFTEtJTkRfVkFSSUFCTEUpCisJCQkJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKHEsICIgKFxuKSIpOwogCQkJfQogCiAJCQlpZiAodGJpbmZvLT5pc3BhcnRpdGlv biAmJiAhZG9wdC0+YmluYXJ5X3VwZ3JhZGUpCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv cGdfZHVtcC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAppbmRleCBlOTZjNjYyYjFlLi43 OGViODc4Y2ZjIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCisrKyBiL3Ny Yy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKQEAgLTg0LDcgKzg0LDcgQEAgdHlwZWRlZiBlbnVtCiAJ RE9fUE9MSUNZLAogCURPX1BVQkxJQ0FUSU9OLAogCURPX1BVQkxJQ0FUSU9OX1JFTCwKLQlET19T VUJTQ1JJUFRJT04KKwlET19TVUJTQ1JJUFRJT04sCiB9IER1bXBhYmxlT2JqZWN0VHlwZTsKIAog LyogY29tcG9uZW50IHR5cGVzIG9mIGFuIG9iamVjdCB3aGljaCBjYW4gYmUgc2VsZWN0ZWQgZm9y IGR1bXBpbmcgKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBs IGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKaW5kZXggMjU4NTJiOTAzYy4uZDMw ZjQwMGRjYyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKKysr IGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKQEAgLTI1MDgsNiArMjUwOCw3NSBA QCBxci9DUkVBVEUgVFJBTlNGT1JNIEZPUiBpbnRlZ2VyIExBTkdVQUdFIHNxbCBcKEZST00gU1FM IFdJVEggRlVOQ1RJT04gcGdfY2F0YWxvZwogCQl1bmxpa2UgPT4gewogCQkJZXhjbHVkZV9kdW1w X3Rlc3Rfc2NoZW1hID0+IDEsIH0sIH0sCiAKKwknQ1JFQVRFIFZBUklBQkxFIHRlc3RfdmFyaWFi bGUnID0+IHsKKwkJYWxsX3J1bnMgICAgID0+IDEsCisJCWNhdGNoX2FsbCAgICA9PiAnQ1JFQVRF IC4uLiBjb21tYW5kcycsCisJCWNyZWF0ZV9vcmRlciA9PiA2MSwKKwkJY3JlYXRlX3NxbCAgID0+ ICdDUkVBVEUgVkFSSUFCTEUgZHVtcF90ZXN0LnZhcmlhYmxlIEFTIGludGVnZXI7JywKKwkJcmVn ZXhwID0+IHFyL14KKwkJCVxRQ1JFQVRFIFZBUklBQkxFIGR1bXBfdGVzdC52YXJpYWJsZSBBUyBp bnRlZ2VyO1xFL3htLAorCQlsaWtlID0+IHsKKwkJCWJpbmFyeV91cGdyYWRlICAgICAgICAgID0+ IDEsCisJCQljbGVhbiAgICAgICAgICAgICAgICAgICA9PiAxLAorCQkJY2xlYW5faWZfZXhpc3Rz ICAgICAgICAgPT4gMSwKKwkJCWNyZWF0ZWRiICAgICAgICAgICAgICAgID0+IDEsCisJCQlkZWZh dWx0cyAgICAgICAgICAgICAgICA9PiAxLAorCQkJZXhjbHVkZV90ZXN0X3RhYmxlICAgICAgPT4g MSwKKwkJCWV4Y2x1ZGVfdGVzdF90YWJsZV9kYXRhID0+IDEsCisJCQlub19ibG9icyAgICAgICAg ICAgICAgICA9PiAxLAorCQkJbm9fcHJpdnMgICAgICAgICAgICAgICAgPT4gMSwKKwkJCW5vX293 bmVyICAgICAgICAgICAgICAgID0+IDEsCisJCQlvbmx5X2R1bXBfdGVzdF9zY2hlbWEgICA9PiAx LAorCQkJcGdfZHVtcGFsbF9kYnByaXZzICAgICAgPT4gMSwKKwkJCXNjaGVtYV9vbmx5ICAgICAg ICAgICAgID0+IDEsCisJCQlzZWN0aW9uX3ByZV9kYXRhICAgICAgICA9PiAxLAorCQkJdGVzdF9z Y2hlbWFfcGx1c19ibG9icyAgPT4gMSwKKwkJCXdpdGhfb2lkcyAgICAgICAgICAgICAgID0+IDEs IH0sCisJCXVubGlrZSA9PiB7CisJCQlleGNsdWRlX2R1bXBfdGVzdF9zY2hlbWEgPT4gMSwKKwkJ CW9ubHlfZHVtcF90ZXN0X3RhYmxlICAgICA9PiAxLAorCQkJcGdfZHVtcGFsbF9nbG9iYWxzICAg ICAgID0+IDEsCisJCQlwZ19kdW1wYWxsX2dsb2JhbHNfY2xlYW4gPT4gMSwKKwkJCXJvbGUgICAg ICAgICAgICAgICAgICAgICA9PiAxLAorCQkJc2VjdGlvbl9wb3N0X2RhdGEgICAgICAgID0+IDEs IH0sIH0sCisKKwknQ1JFQVRFIFZBUklBQkxFIHRlc3RfdmFyaWFibGUgd2l0aCBmaWVsZCBsaXN0 JyA9PiB7CisJCWFsbF9ydW5zICAgICA9PiAxLAorCQljYXRjaF9hbGwgICAgPT4gJ0NSRUFURSAu Li4gY29tbWFuZHMnLAorCQljcmVhdGVfb3JkZXIgPT4gNjEsCisJCWNyZWF0ZV9zcWwgICA9PiAn Q1JFQVRFIFZBUklBQkxFIGR1bXBfdGVzdC52YXJpYWJsZTEgQVMgKGEgaW50LCBiIG51bWVyaWMo MTAsMikpOycsCisJCXJlZ2V4cCA9PiBxci9eCisJCQlcUUNSRUFURSBWQVJJQUJMRSBkdW1wX3Rl c3QudmFyaWFibGUxIEFTIChcRQorCQkJXG5ccytcUWEgaW50ZWdlcixcRQorCQkJXG5ccytcUWIg bnVtZXJpYygxMCwyKVxFCisJCQlcblwpOworCQkJL3htLAorCQlsaWtlID0+IHsKKwkJCWJpbmFy eV91cGdyYWRlICAgICAgICAgID0+IDEsCisJCQljbGVhbiAgICAgICAgICAgICAgICAgICA9PiAx LAorCQkJY2xlYW5faWZfZXhpc3RzICAgICAgICAgPT4gMSwKKwkJCWNyZWF0ZWRiICAgICAgICAg ICAgICAgID0+IDEsCisJCQlkZWZhdWx0cyAgICAgICAgICAgICAgICA9PiAxLAorCQkJZXhjbHVk ZV90ZXN0X3RhYmxlICAgICAgPT4gMSwKKwkJCWV4Y2x1ZGVfdGVzdF90YWJsZV9kYXRhID0+IDEs CisJCQlub19ibG9icyAgICAgICAgICAgICAgICA9PiAxLAorCQkJbm9fcHJpdnMgICAgICAgICAg ICAgICAgPT4gMSwKKwkJCW5vX293bmVyICAgICAgICAgICAgICAgID0+IDEsCisJCQlvbmx5X2R1 bXBfdGVzdF9zY2hlbWEgICA9PiAxLAorCQkJcGdfZHVtcGFsbF9kYnByaXZzICAgICAgPT4gMSwK KwkJCXNjaGVtYV9vbmx5ICAgICAgICAgICAgID0+IDEsCisJCQlzZWN0aW9uX3ByZV9kYXRhICAg ICAgICA9PiAxLAorCQkJdGVzdF9zY2hlbWFfcGx1c19ibG9icyAgPT4gMSwKKwkJCXdpdGhfb2lk cyAgICAgICAgICAgICAgID0+IDEsIH0sCisJCXVubGlrZSA9PiB7CisJCQlleGNsdWRlX2R1bXBf dGVzdF9zY2hlbWEgPT4gMSwKKwkJCW9ubHlfZHVtcF90ZXN0X3RhYmxlICAgICA9PiAxLAorCQkJ cGdfZHVtcGFsbF9nbG9iYWxzICAgICAgID0+IDEsCisJCQlwZ19kdW1wYWxsX2dsb2JhbHNfY2xl YW4gPT4gMSwKKwkJCXJvbGUgICAgICAgICAgICAgICAgICAgICA9PiAxLAorCQkJc2VjdGlvbl9w b3N0X2RhdGEgICAgICAgID0+IDEsIH0sIH0sCisKKwogCSdBTFRFUiBWSUVXIHRlc3RfdmlldyBT RVQgREVGQVVMVCcgPT4gewogCQljcmVhdGVfb3JkZXIgPT4gNjIsCiAJCWNyZWF0ZV9zcWwgPT4K ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9jb21tYW5kLmMgYi9zcmMvYmluL3BzcWwvY29tbWFu ZC5jCmluZGV4IDRjODVmNDNmMDkuLjYzNDExYTVmYTQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNx bC9jb21tYW5kLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2NvbW1hbmQuYwpAQCAtNzk0LDYgKzc5NCw3 IEBAIGV4ZWNfY29tbWFuZF9kKFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVf YnJhbmNoLCBjb25zdCBjaGFyICpjbWQpCiAJCQljYXNlICdpJzoKIAkJCWNhc2UgJ3MnOgogCQkJ Y2FzZSAnRSc6CisJCQljYXNlICdWJzoKIAkJCQlzdWNjZXNzID0gbGlzdFRhYmxlcygmY21kWzFd LCBwYXR0ZXJuLCBzaG93X3ZlcmJvc2UsIHNob3dfc3lzdGVtKTsKIAkJCQlicmVhazsKIAkJCWNh c2UgJ3InOgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMgYi9zcmMvYmluL3Bz cWwvZGVzY3JpYmUuYwppbmRleCA0MTAxMzFlNWM3Li5iMTkzZDNjY2Y4IDEwMDY0NAotLS0gYS9z cmMvYmluL3BzcWwvZGVzY3JpYmUuYworKysgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwpAQCAt MTgyOCw2ICsxODI4LDEwIEBAIGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNj aGVtYW5hbWUsCiAJCQlwcmludGZQUUV4cEJ1ZmZlcigmdGl0bGUsIF8oIkZvcmVpZ24gdGFibGUg XCIlcy4lc1wiIiksCiAJCQkJCQkJICBzY2hlbWFuYW1lLCByZWxhdGlvbm5hbWUpOwogCQkJYnJl YWs7CisJCWNhc2UgUkVMS0lORF9WQVJJQUJMRToKKwkJCXByaW50ZlBRRXhwQnVmZmVyKCZ0aXRs ZSwgXygic2NoZW1hIHZhcmlhYmxlIFwiJXMuJXNcIiIpLAorCQkJCQkJCSAgc2NoZW1hbmFtZSwg cmVsYXRpb25uYW1lKTsKKwkJCWJyZWFrOwogCQljYXNlIFJFTEtJTkRfUEFSVElUSU9ORURfVEFC TEU6CiAJCQlpZiAodGFibGVpbmZvLnJlbHBlcnNpc3RlbmNlID09ICd1JykKIAkJCQlwcmludGZQ UUV4cEJ1ZmZlcigmdGl0bGUsIF8oIlVubG9nZ2VkIHRhYmxlIFwiJXMuJXNcIiIpLApAQCAtMzQw MSw2ICszNDA1LDcgQEAgbGlzdERiUm9sZVNldHRpbmdzKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNv bnN0IGNoYXIgKnBhdHRlcm4yKQogICogbSAtIG1hdGVyaWFsaXplZCB2aWV3cwogICogcyAtIHNl cXVlbmNlcwogICogRSAtIGZvcmVpZ24gdGFibGUgKE5vdGU6IGRpZmZlcmVudCBmcm9tICdmJywg dGhlIHJlbGtpbmQgdmFsdWUpCisgKiBWIC0gc2NoZW1hIHZhcmlhYmxlCiAgKiAoYW55IG9yZGVy IG9mIHRoZSBhYm92ZSBpcyBmaW5lKQogICovCiBib29sCkBAIC0zNDEyLDYgKzM0MTcsNyBAQCBs aXN0VGFibGVzKGNvbnN0IGNoYXIgKnRhYnR5cGVzLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBib29s IHZlcmJvc2UsIGJvb2wgc2hvd1N5cwogCWJvb2wJCXNob3dNYXRWaWV3cyA9IHN0cmNocih0YWJ0 eXBlcywgJ20nKSAhPSBOVUxMOwogCWJvb2wJCXNob3dTZXEgPSBzdHJjaHIodGFidHlwZXMsICdz JykgIT0gTlVMTDsKIAlib29sCQlzaG93Rm9yZWlnbiA9IHN0cmNocih0YWJ0eXBlcywgJ0UnKSAh PSBOVUxMOworCWJvb2wJCXNob3dWYXJpYWJsZXMgPSBzdHJjaHIodGFidHlwZXMsICdWJykgIT0g TlVMTDsKIAogCVBRRXhwQnVmZmVyRGF0YSBidWY7CiAJUEdyZXN1bHQgICAqcmVzOwpAQCAtMzQx OSw4ICszNDI1LDggQEAgbGlzdFRhYmxlcyhjb25zdCBjaGFyICp0YWJ0eXBlcywgY29uc3QgY2hh ciAqcGF0dGVybiwgYm9vbCB2ZXJib3NlLCBib29sIHNob3dTeXMKIAlzdGF0aWMgY29uc3QgYm9v bCB0cmFuc2xhdGVfY29sdW1uc1tdID0ge2ZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNl LCBmYWxzZSwgZmFsc2V9OwogCiAJLyogSWYgdGFidHlwZXMgaXMgZW1wdHksIHdlIGRlZmF1bHQg dG8gXGR0dm1zRSAoYnV0IHNlZSBhbHNvIGNvbW1hbmQuYykgKi8KLQlpZiAoIShzaG93VGFibGVz IHx8IHNob3dJbmRleGVzIHx8IHNob3dWaWV3cyB8fCBzaG93TWF0Vmlld3MgfHwgc2hvd1NlcSB8 fCBzaG93Rm9yZWlnbikpCi0JCXNob3dUYWJsZXMgPSBzaG93Vmlld3MgPSBzaG93TWF0Vmlld3Mg PSBzaG93U2VxID0gc2hvd0ZvcmVpZ24gPSB0cnVlOworCWlmICghKHNob3dUYWJsZXMgfHwgc2hv d0luZGV4ZXMgfHwgc2hvd1ZpZXdzIHx8IHNob3dNYXRWaWV3cyB8fCBzaG93U2VxIHx8IHNob3dG b3JlaWduIHx8IHNob3dWYXJpYWJsZXMpKQorCQlzaG93VGFibGVzID0gc2hvd1ZpZXdzID0gc2hv d01hdFZpZXdzID0gc2hvd1NlcSA9IHNob3dGb3JlaWduID0gc2hvd1ZhcmlhYmxlcyA9IHRydWU7 CiAKIAlpbml0UFFFeHBCdWZmZXIoJmJ1Zik7CiAKQEAgLTM0NDEsNiArMzQ0Nyw3IEBAIGxpc3RU YWJsZXMoY29uc3QgY2hhciAqdGFidHlwZXMsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGJvb2wgdmVy Ym9zZSwgYm9vbCBzaG93U3lzCiAJCQkJCSAgIiBXSEVOICIgQ3BwQXNTdHJpbmcyKFJFTEtJTkRf Rk9SRUlHTl9UQUJMRSkgIiBUSEVOICclcyciCiAJCQkJCSAgIiBXSEVOICIgQ3BwQXNTdHJpbmcy KFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpICIgVEhFTiAnJXMnIgogCQkJCQkgICIgV0hFTiAi IENwcEFzU3RyaW5nMihSRUxLSU5EX1BBUlRJVElPTkVEX0lOREVYKSAiIFRIRU4gJyVzJyIKKwkJ CQkJICAiIFdIRU4gIiBDcHBBc1N0cmluZzIoUkVMS0lORF9WQVJJQUJMRSkgIiBUSEVOICclcyci CiAJCQkJCSAgIiBFTkQgYXMgXCIlc1wiLFxuIgogCQkJCQkgICIgIHBnX2NhdGFsb2cucGdfZ2V0 X3VzZXJieWlkKGMucmVsb3duZXIpIGFzIFwiJXNcIiIsCiAJCQkJCSAgZ2V0dGV4dF9ub29wKCJT Y2hlbWEiKSwKQEAgLTM0NTQsNiArMzQ2MSw3IEBAIGxpc3RUYWJsZXMoY29uc3QgY2hhciAqdGFi dHlwZXMsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGJvb2wgdmVyYm9zZSwgYm9vbCBzaG93U3lzCiAJ CQkJCSAgZ2V0dGV4dF9ub29wKCJmb3JlaWduIHRhYmxlIiksCiAJCQkJCSAgZ2V0dGV4dF9ub29w KCJ0YWJsZSIpLAkvKiBwYXJ0aXRpb25lZCB0YWJsZSAqLwogCQkJCQkgIGdldHRleHRfbm9vcCgi aW5kZXgiKSwJLyogcGFydGl0aW9uZWQgaW5kZXggKi8KKwkJCQkJICBnZXR0ZXh0X25vb3AoInNj aGVtYSB2YXJpYWJsZSIpLAogCQkJCQkgIGdldHRleHRfbm9vcCgiVHlwZSIpLAogCQkJCQkgIGdl dHRleHRfbm9vcCgiT3duZXIiKSk7CiAKQEAgLTM1MDcsNiArMzUxNSw4IEBAIGxpc3RUYWJsZXMo Y29uc3QgY2hhciAqdGFidHlwZXMsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGJvb2wgdmVyYm9zZSwg Ym9vbCBzaG93U3lzCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsICIncycsIik7IC8qIHdh cyBSRUxLSU5EX1NQRUNJQUwgKi8KIAlpZiAoc2hvd0ZvcmVpZ24pCiAJCWFwcGVuZFBRRXhwQnVm ZmVyU3RyKCZidWYsIENwcEFzU3RyaW5nMihSRUxLSU5EX0ZPUkVJR05fVEFCTEUpICIsIik7CisJ aWYgKHNob3dWYXJpYWJsZXMpCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsIENwcEFzU3Ry aW5nMihSRUxLSU5EX1ZBUklBQkxFKSAiLCIpOwogCiAJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1 ZiwgIicnIik7CS8qIGR1bW15ICovCiAJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwgIilcbiIp OwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmggYi9zcmMvYmluL3BzcWwvZGVz Y3JpYmUuaAppbmRleCBhNGNjNWVmYWUwLi5jNWYxMDdkODE0IDEwMDY0NAotLS0gYS9zcmMvYmlu L3BzcWwvZGVzY3JpYmUuaAorKysgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuaApAQCAtNjAsNyAr NjAsNyBAQCBleHRlcm4gYm9vbCBsaXN0VFNUZW1wbGF0ZXMoY29uc3QgY2hhciAqcGF0dGVybiwg Ym9vbCB2ZXJib3NlKTsKIC8qIFxsICovCiBleHRlcm4gYm9vbCBsaXN0QWxsRGJzKGNvbnN0IGNo YXIgKnBhdHRlcm4sIGJvb2wgdmVyYm9zZSk7CiAKLS8qIFxkdCwgXGRpLCBcZHMsIFxkUywgZXRj LiAqLworLyogXGR0LCBcZGksIFxkcywgXGRTLCBcZHZhciBldGMuICovCiBleHRlcm4gYm9vbCBs aXN0VGFibGVzKGNvbnN0IGNoYXIgKnRhYnR5cGVzLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBib29s IHZlcmJvc2UsIGJvb2wgc2hvd1N5c3RlbSk7CiAKIC8qIFxkRCAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wc3FsL2hlbHAuYyBiL3NyYy9iaW4vcHNxbC9oZWxwLmMKaW5kZXggNzAyZTc0MmFmNC4u MmRhNTBmNzI5MCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2hlbHAuYworKysgYi9zcmMvYmlu L3BzcWwvaGVscC5jCkBAIC0xNjcsNyArMTY3LDcgQEAgc2xhc2hVc2FnZSh1bnNpZ25lZCBzaG9y dCBpbnQgcGFnZXIpCiAJICogVXNlICJwc3FsIC0taGVscD1jb21tYW5kcyB8IHdjIiB0byBjb3Vu dCBjb3JyZWN0bHkuICBJdCdzIG9rYXkgdG8gY291bnQKIAkgKiB0aGUgVVNFX1JFQURMSU5FIGxp bmUgZXZlbiBpbiBidWlsZHMgd2l0aG91dCB0aGF0LgogCSAqLwotCW91dHB1dCA9IFBhZ2VPdXRw dXQoMTI1LCBwYWdlciA/ICYocHNldC5wb3B0LnRvcHQpIDogTlVMTCk7CisJb3V0cHV0ID0gUGFn ZU91dHB1dCgxMjYsIHBhZ2VyID8gJihwc2V0LnBvcHQudG9wdCkgOiBOVUxMKTsKIAogCWZwcmlu dGYob3V0cHV0LCBfKCJHZW5lcmFsXG4iKSk7CiAJZnByaW50ZihvdXRwdXQsIF8oIiAgXFxjb3B5 cmlnaHQgICAgICAgICAgICAgc2hvdyBQb3N0Z3JlU1FMIHVzYWdlIGFuZCBkaXN0cmlidXRpb24g dGVybXNcbiIpKTsKQEAgLTI1Nyw2ICsyNTcsNyBAQCBzbGFzaFVzYWdlKHVuc2lnbmVkIHNob3J0 IGludCBwYWdlcikKIAlmcHJpbnRmKG91dHB1dCwgXygiICBcXGRUW1MrXSBbUEFUVEVSTl0gICAg ICBsaXN0IGRhdGEgdHlwZXNcbiIpKTsKIAlmcHJpbnRmKG91dHB1dCwgXygiICBcXGR1W1MrXSBb UEFUVEVSTl0gICAgICBsaXN0IHJvbGVzXG4iKSk7CiAJZnByaW50ZihvdXRwdXQsIF8oIiAgXFxk dltTK10gW1BBVFRFUk5dICAgICAgbGlzdCB2aWV3c1xuIikpOworCWZwcmludGYob3V0cHV0LCBf KCIgIFxcZFZbUytdIFtQQVRURVJOXSAgICAgIGxpc3Qgc2NoZW1hIHZhcmlhYmxlc1xuIikpOwog CWZwcmludGYob3V0cHV0LCBfKCIgIFxcZHhbK10gIFtQQVRURVJOXSAgICAgIGxpc3QgZXh0ZW5z aW9uc1xuIikpOwogCWZwcmludGYob3V0cHV0LCBfKCIgIFxcZHkgICAgIFtQQVRURVJOXSAgICAg IGxpc3QgZXZlbnQgdHJpZ2dlcnNcbiIpKTsKIAlmcHJpbnRmKG91dHB1dCwgXygiICBcXGxbK10g ICBbUEFUVEVSTl0gICAgICBsaXN0IGRhdGFiYXNlc1xuIikpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wc3FsL3RhYi1jb21wbGV0ZS5jIGIvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jCmluZGV4 IDI2NDcyODIxMmYuLmFmMmQyMDQxMzUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC90YWItY29t cGxldGUuYworKysgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMKQEAgLTgwNSw2ICs4MDUs MjIgQEAgc3RhdGljIGNvbnN0IFNjaGVtYVF1ZXJ5IFF1ZXJ5X2Zvcl9saXN0X29mX3N0YXRpc3Rp Y3MgPSB7CiAJTlVMTAogfTsKIAorc3RhdGljIGNvbnN0IFNjaGVtYVF1ZXJ5IFF1ZXJ5X2Zvcl9s aXN0X29mX3ZhcmlhYmxlcyA9IHsKKwkvKiBtaW5fc2VydmVyX3ZlcnNpb24gKi8KKwkwLAorCS8q IGNhdG5hbWUgKi8KKwkicGdfY2F0YWxvZy5wZ19jbGFzcyBjIiwKKwkvKiBzZWxjb25kaXRpb24g Ki8KKwkiYy5yZWxraW5kIElOICgnVicpIiwKKwkvKiB2aXNjb25kaXRpb24gKi8KKwkicGdfY2F0 YWxvZy5wZ190YWJsZV9pc192aXNpYmxlKGMub2lkKSIsCisJLyogbmFtZXNwYWNlICovCisJImMu cmVsbmFtZXNwYWNlIiwKKwkvKiByZXN1bHQgKi8KKwkicGdfY2F0YWxvZy5xdW90ZV9pZGVudChj LnJlbG5hbWUpIiwKKwkvKiBxdWFscmVzdWx0ICovCisJTlVMTAorfTsKIAogLyoKICAqIFF1ZXJp ZXMgdG8gZ2V0IGxpc3RzIG9mIG5hbWVzIG9mIHZhcmlvdXMga2luZHMgb2YgdGhpbmdzLCBwb3Nz aWJseQpAQCAtMTI0OSw2ICsxMjY1LDcgQEAgc3RhdGljIGNvbnN0IHBnc3FsX3RoaW5nX3Qgd29y ZHNfYWZ0ZXJfY3JlYXRlW10gPSB7CiAJCQkJCQkJCQkJCQkJCQkJCSAqIFRBQkxFIC4uLiAqLwog CXsiVVNFUiIsIFF1ZXJ5X2Zvcl9saXN0X29mX3JvbGVzICIgVU5JT04gU0VMRUNUICdNQVBQSU5H IEZPUicifSwKIAl7IlVTRVIgTUFQUElORyBGT1IiLCBOVUxMLCBOVUxMLCBOVUxMfSwKKwl7IlZB UklBQkxFIiwgTlVMTCwgJlF1ZXJ5X2Zvcl9saXN0X29mX3ZhcmlhYmxlc30sCiAJeyJWSUVXIiwg TlVMTCwgTlVMTCwgJlF1ZXJ5X2Zvcl9saXN0X29mX3ZpZXdzfSwKIAl7TlVMTH0JCQkJCQkvKiBl bmQgb2YgbGlzdCAqLwogfTsKQEAgLTE2MDQsNyArMTYyMSw3IEBAIHBzcWxfY29tcGxldGlvbihj b25zdCBjaGFyICp0ZXh0LCBpbnQgc3RhcnQsIGludCBlbmQpCiAJCSJBQk9SVCIsICJBTFRFUiIs ICJBTkFMWVpFIiwgIkJFR0lOIiwgIkNBTEwiLCAiQ0hFQ0tQT0lOVCIsICJDTE9TRSIsICJDTFVT VEVSIiwKIAkJIkNPTU1FTlQiLCAiQ09NTUlUIiwgIkNPUFkiLCAiQ1JFQVRFIiwgIkRFQUxMT0NB VEUiLCAiREVDTEFSRSIsCiAJCSJERUxFVEUgRlJPTSIsICJESVNDQVJEIiwgIkRPIiwgIkRST1Ai LCAiRU5EIiwgIkVYRUNVVEUiLCAiRVhQTEFJTiIsCi0JCSJGRVRDSCIsICJHUkFOVCIsICJJTVBP UlQiLCAiSU5TRVJUIiwgIkxJU1RFTiIsICJMT0FEIiwgIkxPQ0siLAorCQkiRkVUQ0giLCAiR1JB TlQiLCAiSU1QT1JUIiwgIklOU0VSVCIsICJMRVQiLCAiTElTVEVOIiwgIkxPQUQiLCAiTE9DSyIs CiAJCSJNT1ZFIiwgIk5PVElGWSIsICJQUkVQQVJFIiwKIAkJIlJFQVNTSUdOIiwgIlJFRlJFU0gg TUFURVJJQUxJWkVEIFZJRVciLCAiUkVJTkRFWCIsICJSRUxFQVNFIiwKIAkJIlJFU0VUIiwgIlJF Vk9LRSIsICJST0xMQkFDSyIsCkBAIC0xNjIzLDcgKzE2NDAsNyBAQCBwc3FsX2NvbXBsZXRpb24o Y29uc3QgY2hhciAqdGV4dCwgaW50IHN0YXJ0LCBpbnQgZW5kKQogCQkiXFxkRiIsICJcXGRGZCIs ICJcXGRGcCIsICJcXGRGdCIsICJcXGRnIiwgIlxcZGkiLCAiXFxkbCIsICJcXGRMIiwKIAkJIlxc ZG0iLCAiXFxkbiIsICJcXGRvIiwgIlxcZE8iLCAiXFxkcCIsCiAJCSJcXGRyZHMiLCAiXFxkUnMi LCAiXFxkUnAiLCAiXFxkcyIsICJcXGRTIiwKLQkJIlxcZHQiLCAiXFxkVCIsICJcXGR2IiwgIlxc ZHUiLCAiXFxkeCIsICJcXGR5IiwKKwkJIlxcZHQiLCAiXFxkVCIsICJcXGR2IiwgIlxcZHUiLCAi XFxkeCIsICJcXGR5IiwgIlxcZHZhciIsCiAJCSJcXGUiLCAiXFxlY2hvIiwgIlxcZWYiLCAiXFxl bGlmIiwgIlxcZWxzZSIsICJcXGVuY29kaW5nIiwKIAkJIlxcZW5kaWYiLCAiXFxlcnJ2ZXJib3Nl IiwgIlxcZXYiLAogCQkiXFxmIiwKQEAgLTI4MzQsNiArMjg1MSwxNCBAQCBwc3FsX2NvbXBsZXRp b24oY29uc3QgY2hhciAqdGV4dCwgaW50IHN0YXJ0LCBpbnQgZW5kKQogCWVsc2UgaWYgKE1hdGNo ZXM0KCJDUkVBVEUiLCAiUk9MRXxVU0VSfEdST1VQIiwgTWF0Y2hBbnksICJJTiIpKQogCQlDT01Q TEVURV9XSVRIX0xJU1QyKCJHUk9VUCIsICJST0xFIik7CiAKKy8qIENSRUFURSBWQVJJQUJMRSAt LS0gaXMgYWxsb3dlZCBpbnNpZGUgQ1JFQVRFIFNDSEVNQSwgc28gdXNlIFRhaWxNYXRjaGVzICov CisJLyogQ29tcGxldGUgQ1JFQVRFIFZBUklBQkxFIDxuYW1lPiB3aXRoIEFTICovCisJZWxzZSBp ZiAoVGFpbE1hdGNoZXMzKCJDUkVBVEUiLCAiVkFSSUFCTEUiLCBNYXRjaEFueSkpCisJCUNPTVBM RVRFX1dJVEhfQ09OU1QoIkFTIik7CisJLyogQ29tcGxldGUgQ1JFQVRFIFZBUklBQkxFIDxuYW1l PiB3aXRoIEFTIHR5cGVzKi8KKwllbHNlIGlmIChUYWlsTWF0Y2hlczQoIkNSRUFURSIsICJWQVJJ QUJMRSIsIE1hdGNoQW55LCAiQVMiKSkKKwkJQ09NUExFVEVfV0lUSF9TQ0hFTUFfUVVFUlkoUXVl cnlfZm9yX2xpc3Rfb2ZfZGF0YXR5cGVzLCBOVUxMKTsKKwogLyogQ1JFQVRFIFZJRVcgLS0tIGlz IGFsbG93ZWQgaW5zaWRlIENSRUFURSBTQ0hFTUEsIHNvIHVzZSBUYWlsTWF0Y2hlcyAqLwogCS8q IENvbXBsZXRlIENSRUFURSBWSUVXIDxuYW1lPiB3aXRoIEFTICovCiAJZWxzZSBpZiAoVGFpbE1h dGNoZXMzKCJDUkVBVEUiLCAiVklFVyIsIE1hdGNoQW55KSkKQEAgLTI5ODksNiArMzAxNCwxMiBA QCBwc3FsX2NvbXBsZXRpb24oY29uc3QgY2hhciAqdGV4dCwgaW50IHN0YXJ0LCBpbnQgZW5kKQog CWVsc2UgaWYgKE1hdGNoZXM1KCJEUk9QIiwgIlJVTEUiLCBNYXRjaEFueSwgIk9OIiwgTWF0Y2hB bnkpKQogCQlDT01QTEVURV9XSVRIX0xJU1QyKCJDQVNDQURFIiwgIlJFU1RSSUNUIik7CiAKKwkv KiBEUk9QIFZBUklBQkxFICovCisJZWxzZSBpZiAoTWF0Y2hlczIoIkRST1AiLCAiVkFSSUFCTEUi KSkKKwkJQ09NUExFVEVfV0lUSF9TQ0hFTUFfUVVFUlkoUXVlcnlfZm9yX2xpc3Rfb2ZfdmFyaWFi bGVzLCBOVUxMKTsKKwllbHNlIGlmIChNYXRjaGVzMygiRFJPUCIsICJWQVJJQUJMRSIsIE1hdGNo QW55KSkKKwkJQ09NUExFVEVfV0lUSF9MSVNUMigiQ0FTQ0FERSIsICJSRVNUUklDVCIpOworCiAv KiBFWEVDVVRFICovCiAJZWxzZSBpZiAoTWF0Y2hlczEoIkVYRUNVVEUiKSkKIAkJQ09NUExFVEVf V0lUSF9RVUVSWShRdWVyeV9mb3JfbGlzdF9vZl9wcmVwYXJlZF9zdGF0ZW1lbnRzKTsKQEAgLTI5 OTksMTQgKzMwMzAsMTQgQEAgcHNxbF9jb21wbGV0aW9uKGNvbnN0IGNoYXIgKnRleHQsIGludCBz dGFydCwgaW50IGVuZCkKIAkgKiBDb21wbGV0ZSBFWFBMQUlOIFtBTkFMWVpFXSBbVkVSQk9TRV0g d2l0aCBsaXN0IG9mIEVYUExBSU4tYWJsZSBjb21tYW5kcwogCSAqLwogCWVsc2UgaWYgKE1hdGNo ZXMxKCJFWFBMQUlOIikpCi0JCUNPTVBMRVRFX1dJVEhfTElTVDcoIlNFTEVDVCIsICJJTlNFUlQi LCAiREVMRVRFIiwgIlVQREFURSIsICJERUNMQVJFIiwKLQkJCQkJCQkiQU5BTFlaRSIsICJWRVJC T1NFIik7CisJCUNPTVBMRVRFX1dJVEhfTElTVDgoIlNFTEVDVCIsICJJTlNFUlQiLCAiREVMRVRF IiwgIlVQREFURSIsICJERUNMQVJFIiwKKwkJCQkJCQkiQU5BTFlaRSIsICJWRVJCT1NFIiwgIkxF VCIpOwogCWVsc2UgaWYgKE1hdGNoZXMyKCJFWFBMQUlOIiwgIkFOQUxZWkUiKSkKLQkJQ09NUExF VEVfV0lUSF9MSVNUNigiU0VMRUNUIiwgIklOU0VSVCIsICJERUxFVEUiLCAiVVBEQVRFIiwgIkRF Q0xBUkUiLAotCQkJCQkJCSJWRVJCT1NFIik7CisJCUNPTVBMRVRFX1dJVEhfTElTVDcoIlNFTEVD VCIsICJJTlNFUlQiLCAiREVMRVRFIiwgIlVQREFURSIsICJERUNMQVJFIiwKKwkJCQkJCQkiVkVS Qk9TRSIsICJMRVQiKTsKIAllbHNlIGlmIChNYXRjaGVzMigiRVhQTEFJTiIsICJWRVJCT1NFIikg fHwKIAkJCSBNYXRjaGVzMygiRVhQTEFJTiIsICJBTkFMWVpFIiwgIlZFUkJPU0UiKSkKLQkJQ09N UExFVEVfV0lUSF9MSVNUNSgiU0VMRUNUIiwgIklOU0VSVCIsICJERUxFVEUiLCAiVVBEQVRFIiwg IkRFQ0xBUkUiKTsKKwkJQ09NUExFVEVfV0lUSF9MSVNUNigiU0VMRUNUIiwgIklOU0VSVCIsICJE RUxFVEUiLCAiVVBEQVRFIiwgIkRFQ0xBUkUiLCAiTEVUIik7CiAKIC8qIEZFVENIICYmIE1PVkUg Ki8KIAkvKiBDb21wbGV0ZSBGRVRDSCB3aXRoIG9uZSBvZiBGT1JXQVJELCBCQUNLV0FSRCwgUkVM QVRJVkUgKi8KQEAgLTMxMTUsNiArMzE0Niw3IEBAIHBzcWxfY29tcGxldGlvbihjb25zdCBjaGFy ICp0ZXh0LCBpbnQgc3RhcnQsIGludCBlbmQpCiAJCQkJCQkJCQkgICAiIFVOSU9OIFNFTEVDVCAn QUxMIFJPVVRJTkVTIElOIFNDSEVNQSciCiAJCQkJCQkJCQkgICAiIFVOSU9OIFNFTEVDVCAnQUxM IFNFUVVFTkNFUyBJTiBTQ0hFTUEnIgogCQkJCQkJCQkJICAgIiBVTklPTiBTRUxFQ1QgJ0FMTCBU QUJMRVMgSU4gU0NIRU1BJyIKKwkJCQkJCQkJCSAgICIgVU5JT04gU0VMRUNUICdBTEwgVkFSSUFC TEVTIElOIFNDSEVNQSciCiAJCQkJCQkJCQkgICAiIFVOSU9OIFNFTEVDVCAnREFUQUJBU0UnIgog CQkJCQkJCQkJICAgIiBVTklPTiBTRUxFQ1QgJ0RPTUFJTiciCiAJCQkJCQkJCQkgICAiIFVOSU9O IFNFTEVDVCAnRk9SRUlHTiBEQVRBIFdSQVBQRVInIgpAQCAtMzEyOCwxNCArMzE2MCwxNiBAQCBw c3FsX2NvbXBsZXRpb24oY29uc3QgY2hhciAqdGV4dCwgaW50IHN0YXJ0LCBpbnQgZW5kKQogCQkJ CQkJCQkJICAgIiBVTklPTiBTRUxFQ1QgJ1NFUVVFTkNFJyIKIAkJCQkJCQkJCSAgICIgVU5JT04g U0VMRUNUICdUQUJMRSciCiAJCQkJCQkJCQkgICAiIFVOSU9OIFNFTEVDVCAnVEFCTEVTUEFDRSci Ci0JCQkJCQkJCQkgICAiIFVOSU9OIFNFTEVDVCAnVFlQRSciKTsKKwkJCQkJCQkJCSAgICIgVU5J T04gU0VMRUNUICdUWVBFJyIKKwkJCQkJCQkJCSAgICIgVU5JT04gU0VMRUNUICdWQVJJQUJMRSci KTsKIAl9CiAJZWxzZSBpZiAoVGFpbE1hdGNoZXM0KCJHUkFOVHxSRVZPS0UiLCBNYXRjaEFueSwg Ik9OIiwgIkFMTCIpKQotCQlDT01QTEVURV9XSVRIX0xJU1Q1KCJGVU5DVElPTlMgSU4gU0NIRU1B IiwKKwkJQ09NUExFVEVfV0lUSF9MSVNUNigiRlVOQ1RJT05TIElOIFNDSEVNQSIsCiAJCQkJCQkJ IlBST0NFRFVSRVMgSU4gU0NIRU1BIiwKIAkJCQkJCQkiUk9VVElORVMgSU4gU0NIRU1BIiwKIAkJ CQkJCQkiU0VRVUVOQ0VTIElOIFNDSEVNQSIsCi0JCQkJCQkJIlRBQkxFUyBJTiBTQ0hFTUEiKTsK KwkJCQkJCQkiVEFCTEVTIElOIFNDSEVNQSIsCisJCQkJCQkJIlZBUklBQkxFUyBJTiBTQ0hFTUEi KTsKIAllbHNlIGlmIChUYWlsTWF0Y2hlczQoIkdSQU5UfFJFVk9LRSIsIE1hdGNoQW55LCAiT04i LCAiRk9SRUlHTiIpKQogCQlDT01QTEVURV9XSVRIX0xJU1QyKCJEQVRBIFdSQVBQRVIiLCAiU0VS VkVSIik7CiAKQEAgLTMxNjUsNiArMzE5OSw4IEBAIHBzcWxfY29tcGxldGlvbihjb25zdCBjaGFy ICp0ZXh0LCBpbnQgc3RhcnQsIGludCBlbmQpCiAJCQlDT01QTEVURV9XSVRIX1NDSEVNQV9RVUVS WShRdWVyeV9mb3JfbGlzdF9vZl9zZXF1ZW5jZXMsIE5VTEwpOwogCQllbHNlIGlmIChUYWlsTWF0 Y2hlczEoIlRBQkxFIikpCiAJCQlDT01QTEVURV9XSVRIX1NDSEVNQV9RVUVSWShRdWVyeV9mb3Jf bGlzdF9vZl90c3ZtZiwgTlVMTCk7CisJCWVsc2UgaWYgKFRhaWxNYXRjaGVzMSgiVkFSSUFCTEUi KSkKKwkJCUNPTVBMRVRFX1dJVEhfU0NIRU1BX1FVRVJZKFF1ZXJ5X2Zvcl9saXN0X29mX3Zhcmlh YmxlcywgTlVMTCk7CiAJCWVsc2UgaWYgKFRhaWxNYXRjaGVzMSgiVEFCTEVTUEFDRSIpKQogCQkJ Q09NUExFVEVfV0lUSF9RVUVSWShRdWVyeV9mb3JfbGlzdF9vZl90YWJsZXNwYWNlcyk7CiAJCWVs c2UgaWYgKFRhaWxNYXRjaGVzMSgiVFlQRSIpKQpAQCAtMzMyMSw3ICszMzU3LDcgQEAgcHNxbF9j b21wbGV0aW9uKGNvbnN0IGNoYXIgKnRleHQsIGludCBzdGFydCwgaW50IGVuZCkKIAogLyogUFJF UEFSRSB4eCBBUyAqLwogCWVsc2UgaWYgKE1hdGNoZXMzKCJQUkVQQVJFIiwgTWF0Y2hBbnksICJB UyIpKQotCQlDT01QTEVURV9XSVRIX0xJU1Q0KCJTRUxFQ1QiLCAiVVBEQVRFIiwgIklOU0VSVCIs ICJERUxFVEUgRlJPTSIpOworCQlDT01QTEVURV9XSVRIX0xJU1Q1KCJTRUxFQ1QiLCAiVVBEQVRF IiwgIklOU0VSVCIsICJERUxFVEUgRlJPTSIsICJMRVQiKTsKIAogLyoKICAqIFBSRVBBUkUgVFJB TlNBQ1RJT04gaXMgbWlzc2luZyBvbiBwdXJwb3NlLiBJdCdzIGludGVuZGVkIGZvciB0cmFuc2Fj dGlvbgpAQCAtMzU0MCw2ICszNTc2LDE0IEBAIHBzcWxfY29tcGxldGlvbihjb25zdCBjaGFyICp0 ZXh0LCBpbnQgc3RhcnQsIGludCBlbmQpCiAJZWxzZSBpZiAoVGFpbE1hdGNoZXM0KCJVUERBVEUi LCBNYXRjaEFueSwgIlNFVCIsIE1hdGNoQW55KSkKIAkJQ09NUExFVEVfV0lUSF9DT05TVCgiPSIp OwogCisvKiBMRVQgLS0tIGNhbiBiZSBpbnNpZGUgRVhQTEFJTiwgUFJFUEFSRSBldGMgKi8KKwkv KiBJZiBwcmV2LiB3b3JkIGlzIExFVCBzdWdnZXN0IGEgbGlzdCBvZiB2YXJpYWJsZXMgKi8KKwll bHNlIGlmIChUYWlsTWF0Y2hlczEoIkxFVCIpKQorCQlDT01QTEVURV9XSVRIX1NDSEVNQV9RVUVS WShRdWVyeV9mb3JfbGlzdF9vZl92YXJpYWJsZXMsIE5VTEwpOworCS8qIENvbXBsZXRlIExFVCA8 dmFyaWFibGU+IHdpdGggIj0iICovCisJZWxzZSBpZiAoVGFpbE1hdGNoZXMyKCJMRVQiLCBNYXRj aEFueSkpCisJCUNPTVBMRVRFX1dJVEhfQ09OU1QoIj0iKTsKKwogLyogVVNFUiBNQVBQSU5HICov CiAJZWxzZSBpZiAoTWF0Y2hlczMoIkFMVEVSfENSRUFURXxEUk9QIiwgIlVTRVIiLCAiTUFQUElO RyIpKQogCQlDT01QTEVURV9XSVRIX0NPTlNUKCJGT1IiKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfY2xhc3MuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfY2xhc3MuaApp bmRleCBlZjYyYzMwY2Y5Li5hNjQzMmQ3OTZmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX2NsYXNzLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19jbGFzcy5oCkBAIC0x MDMsNiArMTAzLDcgQEAgdHlwZWRlZiBGb3JtRGF0YV9wZ19jbGFzcyAqRm9ybV9wZ19jbGFzczsK ICNkZWZpbmUJCSAgUkVMS0lORF9GT1JFSUdOX1RBQkxFICAgJ2YnCS8qIGZvcmVpZ24gdGFibGUg Ki8KICNkZWZpbmUJCSAgUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSAncCcgLyogcGFydGl0aW9u ZWQgdGFibGUgKi8KICNkZWZpbmUJCSAgUkVMS0lORF9QQVJUSVRJT05FRF9JTkRFWCAnSScgLyog cGFydGl0aW9uZWQgaW5kZXggKi8KKyNkZWZpbmUJCSAgUkVMS0lORF9WQVJJQUJMRQkJICAnVicJ Lyogc2NoZW1hIHZhcmlhYmxlICovCiAKICNkZWZpbmUJCSAgUkVMUEVSU0lTVEVOQ0VfUEVSTUFO RU5UCSdwJyAvKiByZWd1bGFyIHRhYmxlICovCiAjZGVmaW5lCQkgIFJFTFBFUlNJU1RFTkNFX1VO TE9HR0VECSd1JyAvKiB1bmxvZ2dlZCBwZXJtYW5lbnQgdGFibGUgKi8KZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfZGVmYXVsdF9hY2wuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfZGVmYXVsdF9hY2wuaAppbmRleCBkNjcyZDViM2Y4Li45MWJiZDAyNjA3IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2RlZmF1bHRfYWNsLmgKKysrIGIvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19kZWZhdWx0X2FjbC5oCkBAIC01Niw2ICs1Niw3IEBAIHR5cGVkZWYgRm9ybURh dGFfcGdfZGVmYXVsdF9hY2wgKkZvcm1fcGdfZGVmYXVsdF9hY2w7CiAjZGVmaW5lIERFRkFDTE9C Sl9GVU5DVElPTgkJJ2YnIC8qIGZ1bmN0aW9uICovCiAjZGVmaW5lIERFRkFDTE9CSl9UWVBFCQkJ J1QnIC8qIHR5cGUgKi8KICNkZWZpbmUgREVGQUNMT0JKX05BTUVTUEFDRQkJJ24nIC8qIG5hbWVz cGFjZSAqLworI2RlZmluZSBERUZBQ0xPQkpfVkFSSUFCTEUJCSdWJyAvKiB2YXJpYWJsZSAqLwog CiAjZW5kaWYJCQkJCQkJLyogRVhQT1NFX1RPX0NMSUVOVF9DT0RFICovCiAKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3Byb2MuZGF0CmluZGV4IDliNTM4NTUyMzYuLjZjNDliY2JjNTAgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdApAQCAtMTAxOTksNCArMTAxOTksMTggQEAKICAgcHJvaXNzdHJpY3QgPT4gJ2YnLCBw cm9yZXR0eXBlID0+ICdib29sJywgcHJvYXJndHlwZXMgPT4gJ29pZCBpbnQ0IGludDQgYW55JywK ICAgcHJvYXJnbW9kZXMgPT4gJ3tpLGksaSx2fScsIHByb3NyYyA9PiAnc2F0aXNmaWVzX2hhc2hf cGFydGl0aW9uJyB9LAogCisjc2NoZW1hIHZhcmlhYmxlcyBmdW5jdGlvbiBpbnRlcmZhY2UKK3sg b2lkID0+ICc2MTIyJywgZGVzY3IgPT4gJ3JldHVybnMgdmFsdWUgb2Ygc2NoZW1hIHZhcmlhYmxl JywKKyAgcHJvbmFtZSA9PiAnZ2V0X3NjaGVtYV92YXJpYWJsZScsIHByb2lzc3RyaWN0ID0+ICdm JywgcHJvcmV0dHlwZSA9PiAnYW55ZWxlbWVudCcsCisgIHByb2FyZ3R5cGVzID0+ICdyZWdjbGFz cyBhbnllbGVtZW50JywgcHJvc3JjID0+ICdnZXRfc2NoZW1hX3ZhcmlhYmxlJyB9LAoreyBvaWQg PT4gJzYxMjMnLCBkZXNjciA9PiAnc2V0IHZhbHVlIG9mIHNjaGVtYSB2YXJpYWJsZScsCisgIHBy b25hbWUgPT4gJ3NldF9zY2hlbWFfdmFyaWFibGUnLCBwcm9pc3N0cmljdCA9PiAnZicsIHByb3Jl dHR5cGUgPT4gJ3ZvaWQnLAorICBwcm9hcmd0eXBlcyA9PiAncmVnY2xhc3MgYW55ZWxlbWVudCcs IHByb3NyYyA9PiAnc2V0X3NjaGVtYV92YXJpYWJsZScgfSwKK3sgb2lkID0+ICc2MTI0JywgZGVz Y3IgPT4gJ2dldCB2YWx1ZSBvZiBmaWVsZCBvZiBzY2hlbWEgdmFyaWFibGUgb2YgY29tcG9zaXRl IHR5cGUnLAorICBwcm9uYW1lID0+ICdnZXRfc2NoZW1hX3ZhcmlhYmxlJywgcHJvaXNzdHJpY3Qg PT4gJ2YnLCBwcm9yZXR0eXBlID0+ICdhbnllbGVtZW50JywKKyAgcHJvYXJndHlwZXMgPT4gJ3Jl Z2NsYXNzIG5hbWUgYW55ZWxlbWVudCcsIHByb3NyYyA9PiAnZ2V0X3NjaGVtYV92YXJpYWJsZV9m aWVsZCcgfSwKK3sgb2lkID0+ICc2MTI1JywgZGVzY3IgPT4gJ3NldCB2YWx1ZSBvZiBmaWVsZCBv ZiBzY2hlbWEgdmFyaWFibGUgb2YgY29tcG9zaXRlIHR5cGUnLAorICBwcm9uYW1lID0+ICdzZXRf c2NoZW1hX3ZhcmlhYmxlJywgcHJvaXNzdHJpY3QgPT4gJ2YnLCBwcm9yZXR0eXBlID0+ICd2b2lk JywKKyAgcHJvYXJndHlwZXMgPT4gJ3JlZ2NsYXNzIG5hbWUgYW55ZWxlbWVudCcsIHByb3NyYyA9 PiAnc2V0X3NjaGVtYV92YXJpYWJsZV9maWVsZCcgfSwKKwogXQpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvc2NoZW1hdmFyLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9zY2hlbWF2 YXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5mY2Q1MTZkMTkyCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2NoZW1hdmFyLmgKQEAgLTAs MCArMSwzOSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogc2NoZW1hdmFyLmgKKyAqCSAg cHJvdG90eXBlcyBmb3Igc2NoZW1hdmFyLmMuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj KSAxOTk2LTIwMTgsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2Fs aWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3NjaGVtYXZhci5oCisgKgorICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgU0NIRU1BVkFSX0gKKyNkZWZpbmUgU0NIRU1B VkFSX0gKKworI2luY2x1ZGUgImNhdGFsb2cvb2JqZWN0YWRkcmVzcy5oIgorI2luY2x1ZGUgIm5v ZGVzL3BhcnNlbm9kZXMuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2Vfbm9kZS5oIgorCitleHRl cm4gT2JqZWN0QWRkcmVzcyBEZWZpbmVTY2hlbWFWYXJpYWJsZShQYXJzZVN0YXRlICpwc3RhdGUs IENyZWF0ZVNjaGVtYVZhclN0bXQgKnZhcik7CisKK2V4dGVybiB2b2lkIFJlc2V0U2NoZW1hVmFy aWFibGVzQ2FjaGUodm9pZCk7CisKK2V4dGVybiBjaGFyICpnZXRfc2NoZW1hdmFyX25hbWUoT2lk IHZhcmlkKTsKKworZXh0ZXJuIHZvaWQgU2V0U2NoZW1hVmFyaWFibGUoT2lkIHZhcmlkLCBEYXR1 bSB2YWx1ZSwgYm9vbCBpc051bGwsIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kKTsKK2V4dGVybiBE YXR1bSBHZXRTY2hlbWFWYXJpYWJsZShPaWQgdmFyaWQsIGJvb2wgKmlzTnVsbCwgT2lkIHR5cGlk LCBpbnQzMiB0eXBtb2QsICBpbnQxNiB0eXBsZW4sIGJvb2wgdHlwYnl2YWwpOworZXh0ZXJuIHZv aWQgU2V0U2NoZW1hVmFyaWFibGVTZWN1cmUoT2lkIHZhcmlkLCBEYXR1bSB2YWx1ZSwgYm9vbCBp c051bGwsIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kKTsKK2V4dGVybiBEYXR1bSBHZXRTY2hlbWFW YXJpYWJsZVNlY3VyZShPaWQgdmFyaWQsIGJvb2wgKmlzTnVsbCwgT2lkIHR5cGlkLCBpbnQzMiB0 eXBtb2QsIGludDE2IHR5cGxlbiwgYm9vbCB0eXBieXZhbCk7CisKK2V4dGVybiB2b2lkIFNldFNj aGVtYVZhcmlhYmxlRmllbGQoT2lkIHZhcmlkLCBjb25zdCBjaGFyICpmaWVsZG5hbWUsIERhdHVt IHZhbHVlLCBib29sIGlzTnVsbCwgT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QpOworZXh0ZXJuIERh dHVtIEdldFNjaGVtYVZhcmlhYmxlRmllbGQoT2lkIHZhcmlkLCBjb25zdCBjaGFyICpmaWVsZG5h bWUsIGJvb2wgKmlzTnVsbCwgT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsIGludDE2IHR5cGxlbiwg Ym9vbCB0eXBieXZhbCk7CitleHRlcm4gdm9pZCBTZXRTY2hlbWFWYXJpYWJsZUZpZWxkU2VjdXJl KE9pZCB2YXJpZCwgY29uc3QgY2hhciAqZmllbGRuYW1lLCBEYXR1bSB2YWx1ZSwgYm9vbCBpc051 bGwsIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kKTsKK2V4dGVybiBEYXR1bSBHZXRTY2hlbWFWYXJp YWJsZUZpZWxkU2VjdXJlKE9pZCB2YXJpZCwgY29uc3QgY2hhciAqZmllbGRuYW1lLCBib29sICpp c051bGwsIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kLCBpbnQxNiB0eXBsZW4sIGJvb2wgdHlwYnl2 YWwpOworCitleHRlcm4gdm9pZCBzY2hlbWF2YXJfZ2V0X3R5cF90eXBtb2QoT2lkIHZhcmlkLCBP aWQgKnR5cCwgaW50MzIgKnR5cG1vZCk7CitleHRlcm4gYm9vbCBpc19zY2hlbWF2YXIoT2lkIHZh cmlkLCBib29sICppc19yb3d0eXBlKTsKKworI2VuZGlmClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg ZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaCBiL3NyYy9p bmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmgKaW5kZXggZjQ2MTdhMjhmYS4uMWQ4MmVlMTM5MiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaAorKysgYi9zcmMvaW5j bHVkZS9leGVjdXRvci9leGVjRXhwci5oCkBAIC0xMzgsNiArMTM4LDcgQEAgdHlwZWRlZiBlbnVt IEV4cHJFdmFsT3AKIAlFRU9QX1BBUkFNX0VYRUMsCiAJRUVPUF9QQVJBTV9FWFRFUk4sCiAJRUVP UF9QQVJBTV9DQUxMQkFDSywKKwlFRU9QX1BBUkFNX1NDSEVNQV9WQVJJQUJMRSwKIAogCS8qIHJl dHVybiBDYXNlVGVzdEV4cHIgdmFsdWUgKi8KIAlFRU9QX0NBU0VfVEVTVFZBTCwKQEAgLTM0NCwx MSArMzQ1LDE0IEBAIHR5cGVkZWYgc3RydWN0IEV4cHJFdmFsU3RlcAogCQkJVHVwbGVEZXNjCWFy Z2Rlc2M7CiAJCX0JCQludWxsdGVzdF9yb3c7CiAKLQkJLyogZm9yIEVFT1BfUEFSQU1fRVhFQy9F WFRFUk4gKi8KKwkJLyogZm9yIEVFT1BfUEFSQU1fRVhFQy9FWFRFUk4vVkFSSUFCTEUgKi8KIAkJ c3RydWN0CiAJCXsKLQkJCWludAkJCXBhcmFtaWQ7CS8qIG51bWVyaWMgSUQgZm9yIHBhcmFtZXRl ciAqLwotCQkJT2lkCQkJcGFyYW10eXBlOwkvKiBPSUQgb2YgcGFyYW1ldGVyJ3MgZGF0YXR5cGUg Ki8KKwkJCWludAkJCXBhcmFtaWQ7CQkvKiBudW1lcmljIElEIGZvciBwYXJhbWV0ZXIgKi8KKwkJ CU9pZAkJCXBhcmFtdHlwZTsJCS8qIE9JRCBvZiBwYXJhbWV0ZXIncyBkYXRhdHlwZSAqLworCQkJ aW50MzIJCXBhcmFtdHlwbW9kOwkvKiB0eXBtb2Qgb2YgcGFyYW0gKG5vdCB1c2VkIHlldCkgKi8K KwkJCWludDE2CQlwYXJhbXR5cGxlbjsJLyogZXhwZWN0ZWQgbGVuZ3RoICovCisJCQlib29sCQlw YXJhbXR5cGJ5dmFsOwkvKiBpcyBwYXNzZWQgYnkgdmFsdWUgKi8KIAkJfQkJCXBhcmFtOwogCiAJ CS8qIGZvciBFRU9QX1BBUkFNX0NBTExCQUNLICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9u b2Rlcy9ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaAppbmRleCBhZGIxNTlhNmRh Li44MDZiNThmNmNhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKQEAgLTM0OCw2ICszNDgsNyBAQCB0eXBlZGVmIGVu dW0gTm9kZVRhZwogCVRfQ3JlYXRlVGFibGVBc1N0bXQsCiAJVF9DcmVhdGVTZXFTdG10LAogCVRf QWx0ZXJTZXFTdG10LAorCVRfQ3JlYXRlU2NoZW1hVmFyU3RtdCwKIAlUX1ZhcmlhYmxlU2V0U3Rt dCwKIAlUX1ZhcmlhYmxlU2hvd1N0bXQsCiAJVF9EaXNjYXJkU3RtdCwKQEAgLTQxOSw2ICs0MjAs NyBAQCB0eXBlZGVmIGVudW0gTm9kZVRhZwogCVRfQ3JlYXRlU3RhdHNTdG10LAogCVRfQWx0ZXJD b2xsYXRpb25TdG10LAogCVRfQ2FsbFN0bXQsCisJVF9MZXRTdG10LAogCiAJLyoKIAkgKiBUQUdT IEZPUiBQQVJTRSBUUkVFIE5PREVTIChwYXJzZW5vZGVzLmgpCkBAIC02NjEsNiArNjYzLDcgQEAg dHlwZWRlZiBlbnVtIENtZFR5cGUKIAlDTURfVVBEQVRFLAkJCQkJLyogdXBkYXRlIHN0bXQgKi8K IAlDTURfSU5TRVJULAkJCQkJLyogaW5zZXJ0IHN0bXQgKi8KIAlDTURfREVMRVRFLAorCUNNRF9M RVQsCiAJQ01EX1VUSUxJVFksCQkJCS8qIGNtZHMgbGlrZSBjcmVhdGUsIGRlc3Ryb3ksIGNvcHks IHZhY3V1bSwKIAkJCQkJCQkJICogZXRjLiAqLwogCUNNRF9OT1RISU5HCQkJCQkvKiBkdW1teSBj b21tYW5kIGZvciBpbnN0ZWFkIG5vdGhpbmcgcnVsZXMKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L25vZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAppbmRl eCBjYmJlMDY1MDc4Li4wM2UwMzk2NmEwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9w YXJzZW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC0xNTA1 LDYgKzE1MDUsMTUgQEAgdHlwZWRlZiBzdHJ1Y3QgVXBkYXRlU3RtdAogCVdpdGhDbGF1c2UgKndp dGhDbGF1c2U7CQkvKiBXSVRIIGNsYXVzZSAqLwogfSBVcGRhdGVTdG10OwogCit0eXBlZGVmIHN0 cnVjdCBMZXRTdG10Cit7CisJTm9kZVRhZwkJdHlwZTsKKwlMaXN0CSAgKnRhcmdldDsJCQkvKiBs aXN0IG9mIGZpZWxkcyAgKi8KKwlOb2RlCSAgICpzZWxlY3RTdG10OwkJLyogdGhlIHNvdXJjZSBT RUxFQ1QvVkFMVUVTLCBvciBOVUxMICovCisJaW50CQkJbG9jYXRpb247Cit9IExldFN0bXQ7CisK KwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCVNlbGVjdCBTdGF0ZW1lbnQKICAqCkBA IC0xNjgyLDYgKzE2OTEsNyBAQCB0eXBlZGVmIGVudW0gT2JqZWN0VHlwZQogCU9CSkVDVF9UU1RF TVBMQVRFLAogCU9CSkVDVF9UWVBFLAogCU9CSkVDVF9VU0VSX01BUFBJTkcsCisJT0JKRUNUX1ZB UklBQkxFLAogCU9CSkVDVF9WSUVXCiB9IE9iamVjdFR5cGU7CiAKQEAgLTI0OTcsNiArMjUwNywy MCBAQCB0eXBlZGVmIHN0cnVjdCBBbHRlclNlcVN0bXQKIAlib29sCQltaXNzaW5nX29rOwkJLyog c2tpcCBlcnJvciBpZiBhIHJvbGUgaXMgbWlzc2luZz8gKi8KIH0gQWx0ZXJTZXFTdG10OwogCisv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkJQ3JlYXRlIFZBUklBQkxFIFN0YXRlbWVudAor ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit0eXBlZGVmIHN0cnVjdCBDcmVhdGVTY2hl bWFWYXJTdG10Cit7CisJTm9kZVRhZwkJdHlwZTsKKwlSYW5nZVZhciAgICp2YXJpYWJsZTsJCS8q IHRoZSB2YXJpYWJsZSB0byBjcmVhdGUgKi8KKwlUeXBlTmFtZSAgICp0eXBlTmFtZTsJCS8qIHRo ZSBzY2FsYXIgdmFyaWFibGUgdHlwZSAqLworCU5vZGUJICAgKmRlZmV4cHI7CQkvKiBkZWZhdWx0 IGV4cHJlc3Npb24gKi8KKwlMaXN0CSAgICpmaWVsZHM7CQkJLyogdGhlIGZpZWxkcyBvZiBjb21w b3NpdGUgdmFyaWFibGUgdHlwZSAqLworCWJvb2wJCWlmX25vdF9leGlzdHM7CS8qIGp1c3QgZG8g bm90aGluZyBpZiBpdCBhbHJlYWR5IGV4aXN0cz8gKi8KK30gQ3JlYXRlU2NoZW1hVmFyU3RtdDsK KwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCUNyZWF0ZSB7QWdncmVnYXRlfE9wZXJh dG9yfFR5cGV9IFN0YXRlbWVudAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzIzMSw3 ICszMjU1LDggQEAgdHlwZWRlZiBlbnVtIERpc2NhcmRNb2RlCiAJRElTQ0FSRF9BTEwsCiAJRElT Q0FSRF9QTEFOUywKIAlESVNDQVJEX1NFUVVFTkNFUywKLQlESVNDQVJEX1RFTVAKKwlESVNDQVJE X1RFTVAsCisJRElTQ0FSRF9WQVJJQUJMRVMKIH0gRGlzY2FyZE1vZGU7CiAKIHR5cGVkZWYgc3Ry dWN0IERpc2NhcmRTdG10CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMu aCBiL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCmluZGV4IGY5MGFhN2IyYTEuLjQ0YWY3 YzNmYmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCisrKyBiL3Ny Yy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCkBAIC0yMzAsMTMgKzIzMCwxNyBAQCB0eXBlZGVm IHN0cnVjdCBDb25zdAogICoJCQkJb2YgdGhlIGBwYXJhbWlkJyBmaWVsZCBjb250YWluIHRoZSBT dWJMaW5rJ3Mgc3ViTGlua0lkLCBhbmQKICAqCQkJCXRoZSBsb3ctb3JkZXIgMTYgYml0cyBjb250 YWluIHRoZSBjb2x1bW4gbnVtYmVyLiAgKFRoaXMgdHlwZQogICoJCQkJb2YgUGFyYW0gaXMgYWxz byBjb252ZXJ0ZWQgdG8gUEFSQU1fRVhFQyBkdXJpbmcgcGxhbm5pbmcuKQorICoKKyAqCQlQQVJB TV9TQ0hFTUFfVkFSSUFCTEU6ICBUaGUgcGFyYW1ldGVyIGlzIGEgYWNjZXNzIHRvIHNjaGVtYSB2 YXJpYWJsZQorICoJCQkJcGFyYW1pZCBob2xkcyB2YXJpZC4KICAqLwogdHlwZWRlZiBlbnVtIFBh cmFtS2luZAogewogCVBBUkFNX0VYVEVSTiwKIAlQQVJBTV9FWEVDLAogCVBBUkFNX1NVQkxJTkss Ci0JUEFSQU1fTVVMVElFWFBSCisJUEFSQU1fTVVMVElFWFBSLAorCVBBUkFNX1NDSEVNQV9WQVJJ QUJMRQogfSBQYXJhbUtpbmQ7CiAKIHR5cGVkZWYgc3RydWN0IFBhcmFtCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmggYi9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmgK aW5kZXggMjNkYjQwMTQ3Yi4uZDNlZDNmNGQwZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGFy c2VyL2t3bGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaApAQCAtMjMxLDYg KzIzMSw3IEBAIFBHX0tFWVdPUkQoImxlYWRpbmciLCBMRUFESU5HLCBSRVNFUlZFRF9LRVlXT1JE KQogUEdfS0VZV09SRCgibGVha3Byb29mIiwgTEVBS1BST09GLCBVTlJFU0VSVkVEX0tFWVdPUkQp CiBQR19LRVlXT1JEKCJsZWFzdCIsIExFQVNULCBDT0xfTkFNRV9LRVlXT1JEKQogUEdfS0VZV09S RCgibGVmdCIsIExFRlQsIFRZUEVfRlVOQ19OQU1FX0tFWVdPUkQpCitQR19LRVlXT1JEKCJsZXQi LCBMRVQsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoImxldmVsIiwgTEVWRUwsIFVO UkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoImxpa2UiLCBMSUtFLCBUWVBFX0ZVTkNfTkFN RV9LRVlXT1JEKQogUEdfS0VZV09SRCgibGltaXQiLCBMSU1JVCwgUkVTRVJWRURfS0VZV09SRCkK QEAgLTQzNCw2ICs0MzUsOCBAQCBQR19LRVlXT1JEKCJ2YWxpZGF0b3IiLCBWQUxJREFUT1IsIFVO UkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInZhbHVlIiwgVkFMVUVfUCwgVU5SRVNFUlZF RF9LRVlXT1JEKQogUEdfS0VZV09SRCgidmFsdWVzIiwgVkFMVUVTLCBDT0xfTkFNRV9LRVlXT1JE KQogUEdfS0VZV09SRCgidmFyY2hhciIsIFZBUkNIQVIsIENPTF9OQU1FX0tFWVdPUkQpCitQR19L RVlXT1JEKCJ2YXJpYWJsZSIsIFZBUklBQkxFLCBVTlJFU0VSVkVEX0tFWVdPUkQpCitQR19LRVlX T1JEKCJ2YXJpYWJsZXMiLCBWQVJJQUJMRVMsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdP UkQoInZhcmlhZGljIiwgVkFSSUFESUMsIFJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJ2 YXJ5aW5nIiwgVkFSWUlORywgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgidmVyYm9z ZSIsIFZFUkJPU0UsIFRZUEVfRlVOQ19OQU1FX0tFWVdPUkQpCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9wYXJzZXIvcGFyc2Vfbm9kZS5oIGIvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX25vZGUu aAppbmRleCAwMjMwNTQzODEwLi5kMjVjMDYxMDg4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9w YXJzZXIvcGFyc2Vfbm9kZS5oCisrKyBiL3NyYy9pbmNsdWRlL3BhcnNlci9wYXJzZV9ub2RlLmgK QEAgLTEzNSw2ICsxMzUsOCBAQCB0eXBlZGVmIE5vZGUgKigqQ29lcmNlUGFyYW1Ib29rKSAoUGFy c2VTdGF0ZSAqcHN0YXRlLCBQYXJhbSAqcGFyYW0sCiAgKiB0byBwcm9jZXNzIHRoZW0gbGlrZSBV UERBVEUuICAoTm90ZSB0aGlzIGNhbiBjaGFuZ2UgaW50cmEtc3RhdGVtZW50LCBmb3IKICAqIGNh c2VzIGxpa2UgSU5TRVJUIE9OIENPTkZMSUNUIFVQREFURS4pCiAgKgorICogcF9pc19sZXQ6IHRy dWUgdG8gcHJvY2VzcyBhc3NpZ25tZW50IGV4cHJlc3Npb25zIGxpa2UgTEVULgorICoKICAqIHBf d2luZG93ZGVmczogbGlzdCBvZiBXaW5kb3dEZWZzIHJlcHJlc2VudGluZyBXSU5ET1cgYW5kIE9W RVIgY2xhdXNlcy4KICAqIFdlIGNvbGxlY3QgdGhlc2Ugd2hpbGUgdHJhbnNmb3JtaW5nIGV4cHJl c3Npb25zIGFuZCB0aGVuIHRyYW5zZm9ybSB0aGVtCiAgKiBhZnRlcndhcmRzIChzbyB0aGF0IGFu eSByZXNqdW5rIHRsaXN0IGl0ZW1zIG5lZWRlZCBmb3IgdGhlIHNvcnQvZ3JvdXAKQEAgLTE4NCw2 ICsxODYsNyBAQCBzdHJ1Y3QgUGFyc2VTdGF0ZQogCVJlbGF0aW9uCXBfdGFyZ2V0X3JlbGF0aW9u OwkvKiBJTlNFUlQvVVBEQVRFL0RFTEVURSB0YXJnZXQgcmVsICovCiAJUmFuZ2VUYmxFbnRyeSAq cF90YXJnZXRfcmFuZ2V0YmxlbnRyeTsJLyogdGFyZ2V0IHJlbCdzIFJURSAqLwogCWJvb2wJCXBf aXNfaW5zZXJ0OwkvKiBwcm9jZXNzIGFzc2lnbm1lbnQgbGlrZSBJTlNFUlQgbm90IFVQREFURSAq LworCWJvb2wJCXBfaXNfbGV0OwkJLyogcHJvY2VzcyBhc3NpZ25tZW50IExFVCBzdG10ICovCiAJ TGlzdAkgICAqcF93aW5kb3dkZWZzOwkvKiByYXcgcmVwcmVzZW50YXRpb25zIG9mIHdpbmRvdyBj bGF1c2VzICovCiAJUGFyc2VFeHByS2luZCBwX2V4cHJfa2luZDsJLyogd2hhdCBraW5kIG9mIGV4 cHJlc3Npb24gd2UncmUgcGFyc2luZyAqLwogCWludAkJCXBfbmV4dF9yZXNubzsJLyogbmV4dCB0 YXJnZXRsaXN0IHJlc25vIHRvIGFzc2lnbiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGFy c2VyL3BhcnNlX3JlbGF0aW9uLmggYi9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2VfcmVsYXRpb24u aAppbmRleCBiOTc5MmFjZGFlLi5jODk0MTQ3ZDA2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9w YXJzZXIvcGFyc2VfcmVsYXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2VfcmVs YXRpb24uaApAQCAtMTI5LDQgKzEyOSwxMCBAQCBleHRlcm4gT2lkCWF0dG51bVR5cGVJZChSZWxh dGlvbiByZCwgaW50IGF0dGlkKTsKIGV4dGVybiBPaWQJYXR0bnVtQ29sbGF0aW9uSWQoUmVsYXRp b24gcmQsIGludCBhdHRpZCk7CiBleHRlcm4gYm9vbCBpc1F1ZXJ5VXNpbmdUZW1wUmVsYXRpb24o UXVlcnkgKnF1ZXJ5KTsKIAorZXh0ZXJuIFJhbmdlVmFyICptYWtlUmFuZ2VWYXJGb3JUYXJnZXRP ZlNjaGVtYVZhcmlhYmxlKFBhcnNlU3RhdGUgKnBzdGF0ZSwKKwkJCQkgIGNoYXIgKmZpZWxkMSwg Y2hhciAqZmllbGQyLCBjaGFyICpmaWVsZDMsCisJCQkJICBpbnQgbG9jYXRpb24sIGNoYXIgKipm aWVsZG5hbWUsIGludCAqZmllbGRuYW1lX3BvcywgYm9vbCBub2Vycm9yKTsKKworZXh0ZXJuIE5v ZGUgKnRvU2NoZW1hVmFyaWFibGUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBjaGFyICpuc3BuYW1lLCBj aGFyICp2YXJuYW1lLCBjaGFyICpmaWVsZG5hbWUsIGludCBsb2NhdGlvbik7CisKICNlbmRpZgkJ CQkJCQkvKiBQQVJTRV9SRUxBVElPTl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wYXJz ZXIvcGFyc2VfdGFyZ2V0LmggYi9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2VfdGFyZ2V0LmgKaW5k ZXggZWM2ZTBjMTAyZi4uNzJlYjNjZDdiNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGFyc2Vy L3BhcnNlX3RhcmdldC5oCisrKyBiL3NyYy9pbmNsdWRlL3BhcnNlci9wYXJzZV90YXJnZXQuaApA QCAtNDMsNCArNDMsMTYgQEAgZXh0ZXJuIFR1cGxlRGVzYyBleHBhbmRSZWNvcmRWYXJpYWJsZShQ YXJzZVN0YXRlICpwc3RhdGUsIFZhciAqdmFyLAogZXh0ZXJuIGNoYXIgKkZpZ3VyZUNvbG5hbWUo Tm9kZSAqbm9kZSk7CiBleHRlcm4gY2hhciAqRmlndXJlSW5kZXhDb2xuYW1lKE5vZGUgKm5vZGUp OwogCitleHRlcm4gTm9kZSAqdHJhbnNmb3JtQXNzaWdubWVudEluZGlyZWN0aW9uKFBhcnNlU3Rh dGUgKnBzdGF0ZSwKKwkJCQkJCQkgICBOb2RlICpiYXNlbm9kZSwKKwkJCQkJCQkgICBjb25zdCBj aGFyICp0YXJnZXROYW1lLAorCQkJCQkJCSAgIGJvb2wgdGFyZ2V0SXNBcnJheSwKKwkJCQkJCQkg ICBPaWQgdGFyZ2V0VHlwZUlkLAorCQkJCQkJCSAgIGludDMyIHRhcmdldFR5cE1vZCwKKwkJCQkJ CQkgICBPaWQgdGFyZ2V0Q29sbGF0aW9uLAorCQkJCQkJCSAgIExpc3RDZWxsICppbmRpcmVjdGlv biwKKwkJCQkJCQkgICBOb2RlICpyaHMsCisJCQkJCQkJICAgaW50IGxvY2F0aW9uKTsKKworCiAj ZW5kaWYJCQkJCQkJLyogUEFSU0VfVEFSR0VUX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3V0aWxzL2FjbC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvYWNsLmgKaW5kZXggZjRkNGJlOGQwZC4u ZDA3MzdhOWU0YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvYWNsLmgKKysrIGIvc3Jj L2luY2x1ZGUvdXRpbHMvYWNsLmgKQEAgLTE2Niw2ICsxNjYsNyBAQCB0eXBlZGVmIEFycmF5VHlw ZSBBY2w7CiAjZGVmaW5lIEFDTF9BTExfUklHSFRTX1NDSEVNQQkJKEFDTF9VU0FHRXxBQ0xfQ1JF QVRFKQogI2RlZmluZSBBQ0xfQUxMX1JJR0hUU19UQUJMRVNQQUNFCShBQ0xfQ1JFQVRFKQogI2Rl ZmluZSBBQ0xfQUxMX1JJR0hUU19UWVBFCQkJKEFDTF9VU0FHRSkKKyNkZWZpbmUgQUNMX0FMTF9S SUdIVFNfVkFSSUFCTEUJCShBQ0xfU0VMRUNUfEFDTF9VUERBVEUpCiAKIC8qIG9wZXJhdGlvbiBj b2RlcyBmb3IgcGdfKl9hY2xtYXNrICovCiB0eXBlZGVmIGVudW0KZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc2NoZW1hX3ZhcmlhYmxlcy5vdXQgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3NjaGVtYV92YXJpYWJsZXMub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAuLmFiMWQzYWM2NmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3NjaGVtYV92YXJpYWJsZXMub3V0CkBAIC0wLDAgKzEsNDU2IEBACitD UkVBVEUgVkFSSUFCTEUgdmFyMSBBUyBpbnRlZ2VyOworQ1JFQVRFIFRFTVAgVkFSSUFCTEUgdmFy MiBBUyB0ZXh0OworRFJPUCBWQVJJQUJMRSB2YXIxLCB2YXIyOworLS0gZnVuY3Rpb25hbCBpbnRl cmZhY2UKK0NSRUFURSBWQVJJQUJMRSB2YXIxIEFTIG51bWVyaWM7CitTRUxFQ1Qgc2V0X3NjaGVt YV92YXJpYWJsZSgndmFyMScsIDMzMyk7Cisgc2V0X3NjaGVtYV92YXJpYWJsZSAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgZ2V0X3NjaGVtYV92YXJpYWJsZSgn dmFyMScsIG51bGw6Om51bWVyaWMpOworIGdldF9zY2hlbWFfdmFyaWFibGUgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgMzMzCisoMSByb3cpCisKK1NFTEVDVCBzZXRf c2NoZW1hX3ZhcmlhYmxlKCd2YXIxJywgMzMzOjppbnRlZ2VyKTsKKyBzZXRfc2NoZW1hX3Zhcmlh YmxlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBnZXRfc2No ZW1hX3ZhcmlhYmxlKCd2YXIxJywgbnVsbDo6bnVtZXJpYyk7CisgZ2V0X3NjaGVtYV92YXJpYWJs ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAzMzMKKygxIHJvdykK KworU0VMRUNUIHNldF9zY2hlbWFfdmFyaWFibGUoJ3ZhcjEnLCAnMzMzLjU1Jzo6dGV4dCk7Cisg c2V0X3NjaGVtYV92YXJpYWJsZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQor CitTRUxFQ1QgZ2V0X3NjaGVtYV92YXJpYWJsZSgndmFyMScsIG51bGw6Om51bWVyaWMpOworIGdl dF9zY2hlbWFfdmFyaWFibGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAg MzMzLjU1CisoMSByb3cpCisKK1NFTEVDVCBnZXRfc2NoZW1hX3ZhcmlhYmxlKCd2YXIxJywgbnVs bDo6aW50KTsKKyBnZXRfc2NoZW1hX3ZhcmlhYmxlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg ICAgICAgICAgICAgICAgIDMzNAorKDEgcm93KQorCitTRUxFQ1QgZ2V0X3NjaGVtYV92YXJpYWJs ZSgndmFyMScsIG51bGw6OnRleHQpOworIGdldF9zY2hlbWFfdmFyaWFibGUgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAzMzMuNTUKKygxIHJvdykKKworLS0gYWNjZXNzIHJpZ2h0cyB0ZXN0CitD UkVBVEUgUk9MRSB2YXJfdGVzdF9yb2xlOworU0VUIFJPTEUgVE8gdmFyX3Rlc3Rfcm9sZTsKKy0t IHNob3VsZCB0byBmYWlsCitTRUxFQ1Qgc2V0X3NjaGVtYV92YXJpYWJsZSgndmFyMScsICcxMDAw Jzo6dGV4dCk7CitFUlJPUjogIHBlcm1pc3Npb24gZGVuaWVkIGZvciBzY2hlbWEgdmFyaWFibGUg dmFyMQorU0VMRUNUIGdldF9zY2hlbWFfdmFyaWFibGUoJ3ZhcjEnLCBudWxsOjpudW1lcmljKTsK K0VSUk9SOiAgcGVybWlzc2lvbiBkZW5pZWQgZm9yIHNjaGVtYSB2YXJpYWJsZSB2YXIxCitTRVQg Uk9MRSBUTyBERUZBVUxUOworR1JBTlQgU0VMRUNUIE9OIFZBUklBQkxFIHZhcjEgVE8gdmFyX3Rl c3Rfcm9sZTsKK1NFVCBST0xFIFRPIHZhcl90ZXN0X3JvbGU7CistLSBzaG91bGQgdG8gZmFpbAor U0VMRUNUIHNldF9zY2hlbWFfdmFyaWFibGUoJ3ZhcjEnLCAnMTAwMCc6OnRleHQpOworRVJST1I6 ICBwZXJtaXNzaW9uIGRlbmllZCBmb3Igc2NoZW1hIHZhcmlhYmxlIHZhcjEKKy0tIHNob3VsZCB0 byB3b3JrCitTRUxFQ1QgZ2V0X3NjaGVtYV92YXJpYWJsZSgndmFyMScsIG51bGw6Om51bWVyaWMp OworIGdldF9zY2hlbWFfdmFyaWFibGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAg ICAgICAgMzMzLjU1CisoMSByb3cpCisKK1NFVCBST0xFIFRPIERFRkFVTFQ7CitHUkFOVCBVUERB VEUgT04gVkFSSUFCTEUgdmFyMSBUTyB2YXJfdGVzdF9yb2xlOworU0VUIFJPTEUgVE8gdmFyX3Rl c3Rfcm9sZTsKKy0tIHNob3VsZCB0byB3b3JrCitTRUxFQ1Qgc2V0X3NjaGVtYV92YXJpYWJsZSgn dmFyMScsICcxMDAwJzo6dGV4dCk7Cisgc2V0X3NjaGVtYV92YXJpYWJsZSAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgZ2V0X3NjaGVtYV92YXJpYWJsZSgndmFy MScsIG51bGw6Om51bWVyaWMpOworIGdldF9zY2hlbWFfdmFyaWFibGUgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAgICAgICAgICAgICAgICAxMDAwCisoMSByb3cpCisKK1NFVCBST0xFIFRPIERF RkFVTFQ7CitSRVZPS0UgQUxMIE9OIFZBUklBQkxFIHZhcjEgRlJPTSB2YXJfdGVzdF9yb2xlOwor Q1JFQVRFIFZBUklBQkxFIHZhciBBUyBpbnRlZ2VyOworU0VMRUNUIHNldF9zY2hlbWFfdmFyaWFi bGUoJ3B1YmxpYy52YXInLCAxMjM0KTsKKyBzZXRfc2NoZW1hX3ZhcmlhYmxlIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBwdWJsaWMudmFyOworIHZhciAgCist LS0tLS0KKyAxMjM0CisoMSByb3cpCisKK0RPICQkCitCRUdJTgorICBSQUlTRSBOT1RJQ0UgJ3B1 YmxpYy52YXIgaXMgPSAlJywgcHVibGljLnZhcjsKK0VORDsKKyQkOworTk9USUNFOiAgcHVibGlj LnZhciBpcyA9IDEyMzQKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHNlY3VyZV92YXIoKQor UkVUVVJOUyBpbnQgQVMgJCQKKyAgU0VMRUNUIHB1YmxpYy52YXI7CiskJCBMQU5HVUFHRSBzcWwg U0VDVVJJVFkgREVGSU5FUjsKK1NFTEVDVCBzZWN1cmVfdmFyKCk7Cisgc2VjdXJlX3ZhciAKKy0t LS0tLS0tLS0tLQorICAgICAgIDEyMzQKKygxIHJvdykKKworU0VUIFJPTEUgVE8gdmFyX3Rlc3Rf cm9sZTsKKy0tIHNob3VsZCB0byBmYWlsCitTRUxFQ1QgcHVibGljLnZhcjsKK0VSUk9SOiAgcGVy bWlzc2lvbiBkZW5pZWQgZm9yIHNjaGVtYSB2YXJpYWJsZSB2YXIKKy0tIHNob3VsZCB0byB3b3Jr OworU0VMRUNUIHNlY3VyZV92YXIoKTsKKyBzZWN1cmVfdmFyIAorLS0tLS0tLS0tLS0tCisgICAg ICAgMTIzNAorKDEgcm93KQorCitTRVQgUk9MRSBUTyBERUZBVUxUOworRVhQTEFJTiAoVkVSQk9T RSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkgZyh2KSBX SEVSRSB2ID0gdmFyOworICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg RnVuY3Rpb24gU2NhbiBvbiBwZ19jYXRhbG9nLmdlbmVyYXRlX3NlcmllcyBnCisgICBPdXRwdXQ6 IHYKKyAgIEZ1bmN0aW9uIENhbGw6IGdlbmVyYXRlX3NlcmllcygxLCAxMDApCisgICBGaWx0ZXI6 IChnLnYgPSB2YXIpCisoNCByb3dzKQorCitDUkVBVEUgVklFVyBzY2hlbWFfdmFyX3ZpZXcgQVMg U0VMRUNUIHZhcjsKK1NFTEVDVCAqIEZST00gc2NoZW1hX3Zhcl92aWV3OworIHZhciAgCistLS0t LS0KKyAxMjM0CisoMSByb3cpCisKK1xjIC0KKy0tIHNob3VsZCB0byB3b3JrIHN0aWxsLCBidXQg dmFyIHdpbGwgYmUgZW1wdHkKK1NFTEVDVCAqIEZST00gc2NoZW1hX3Zhcl92aWV3OworIHZhciAK Ky0tLS0tCisgICAgCisoMSByb3cpCisKK0xFVCB2YXIxID0gcGkoKTsKK1NFTEVDVCB2YXIxOwor ICAgICAgIHZhcjEgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAzLjE0MTU5MjY1MzU4OTc5 CisoMSByb3cpCisKKy0tIHdlIGNhbiBsb29rIG9uIGV4ZWN1dGlvbiBwbGFuCitFWFBMQUlOIChW RVJCT1NFLCBDT1NUUyBPRkYpIExFVCB2YXIxID0gcGkoKTsKKyAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBMZXQg b24gcHVibGljLnZhcjEKKyAgIC0+ICBSZXN1bHQKKyAgICAgICAgIE91dHB1dDogMy4xNDE1OTI2 NTM1ODk3OQorKDMgcm93cykKKworLS0gTEVUIGNhbiBiZSBwcmVwYXJlZAorUFJFUEFSRSB2YXJf cHAoaW50LCBudW1lcmljKSBBUyBMRVQgdmFyMSA9ICQxICsgJDI7CitFWEVDVVRFIHZhcl9wcCgx MDAsIDEuMjM0NTYpOworU0VMRUNUIHZhcjE7CisgICB2YXIxICAgIAorLS0tLS0tLS0tLS0KKyAx MDEuMjM0NTYKKygxIHJvdykKKworQ1JFQVRFIFZBUklBQkxFIHZhcjMgQVMgaW50OworQ1JFQVRF IE9SIFJFUExBQ0UgRlVOQ1RJT04gaW5jKGludCkKK1JFVFVSTlMgaW50IEFTICQkCitCRUdJTgor ICBMRVQgcHVibGljLnZhcjMgPSBDT0FMRVNDRShwdWJsaWMudmFyMyArICQxLCAkMSk7CisgIFJF VFVSTiB2YXIzOworRU5EOworJCQgTEFOR1VBR0UgcGxwZ3NxbDsKK1NFTEVDVCBpbmMoMSk7Cisg aW5jIAorLS0tLS0KKyAgIDEKKygxIHJvdykKKworU0VMRUNUIGluYygxKTsKKyBpbmMgCistLS0t LQorICAgMgorKDEgcm93KQorCitTRUxFQ1QgaW5jKDEpOworIGluYyAKKy0tLS0tCisgICAzCiso MSByb3cpCisKK1NFTEVDVCBpbmMoMSkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMCk7CisgaW5j IAorLS0tLS0KKyAgIDQKKyAgIDUKKyAgIDYKKyAgIDcKKyAgIDgKKyAgIDkKKyAgMTAKKyAgMTEK KyAgMTIKKyAgMTMKKygxMCByb3dzKQorCitTRVQgUk9MRSBUTyB2YXJfdGVzdF9yb2xlOworLS0g c2hvdWxkIHRvIGZhaWwKK0xFVCB2YXIzID0gMDsKK0VSUk9SOiAgcGVybWlzc2lvbiBkZW5pZWQg Zm9yIHNjaGVtYSB2YXJpYWJsZSB2YXIzCitTRVQgUk9MRSBUTyBERUZBVUxUOworRFJPUCBWSUVX IHNjaGVtYV92YXJfdmlldzsKK0RST1AgVkFSSUFCTEUgdmFyIENBU0NBREU7CitEUk9QIFZBUklB QkxFIHZhcjEgQ0FTQ0FERTsKK0RST1AgVkFSSUFCTEUgdmFyMyBDQVNDQURFOworLS0gY29tcG9z aXRlIHZhcmlhYmxlcworQ1JFQVRFIFRZUEUgc3ZfeHl6IEFTICh4IGludCwgeSBpbnQsIHogbnVt ZXJpYygxMCwyKSk7CitDUkVBVEUgVkFSSUFCTEUgdjEgQVMgc3ZfeHl6OworQ1JFQVRFIFZBUklB QkxFIHYyIEFTICh4IGludCwgeSBpbnQsIHogbnVtZXJpYygxMCwyKSk7CitcZCB2MQorc2NoZW1h IHZhcmlhYmxlICJwdWJsaWMudjEiCisgQ29sdW1uIHwgICAgIFR5cGUgICAgICAKKy0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLQorIHggICAgICB8IGludGVnZXIKKyB5ICAgICAgfCBpbnRlZ2VyCisg eiAgICAgIHwgbnVtZXJpYygxMCwyKQorCitcZCB2Mgorc2NoZW1hIHZhcmlhYmxlICJwdWJsaWMu djIiCisgQ29sdW1uIHwgICAgIFR5cGUgICAgICAKKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLQor IHggICAgICB8IGludGVnZXIKKyB5ICAgICAgfCBpbnRlZ2VyCisgeiAgICAgIHwgbnVtZXJpYygx MCwyKQorCistLSBleHBsaWNpdCBjYXN0aW5nIGlzIG5lY2Vzc2FyeQorTEVUIHYxID0gKDEsMiwz LjE0KTo6c3ZfeHl6OworTEVUIHYyID0gKDEwLDIwLDMuMTQqMTApOjp2MjsKKy0tIHNob3VsZCB0 byB3b3JrIHRvbyAtIHRoZXJlIGFyZSBwcmVwYXJlZCBjYXN0cworTEVUIHYxID0gKDEsMiwzLjE0 KTo6djE7CitTRUxFQ1QgdjE7CisgICAgIHYxICAgICAKKy0tLS0tLS0tLS0tLQorICgxLDIsMy4x NCkKKygxIHJvdykKKworU0VMRUNUIHYyOworICAgICAgdjIgICAgICAgCistLS0tLS0tLS0tLS0t LS0KKyAoMTAsMjAsMzEuNDApCisoMSByb3cpCisKK1NFTEVDVCAodjEpLio7CisgeCB8IHkgfCAg eiAgIAorLS0tKy0tLSstLS0tLS0KKyAxIHwgMiB8IDMuMTQKKygxIHJvdykKKworU0VMRUNUICh2 MikuKjsKKyB4ICB8IHkgIHwgICB6ICAgCistLS0tKy0tLS0rLS0tLS0tLQorIDEwIHwgMjAgfCAz MS40MAorKDEgcm93KQorCitTRUxFQ1QgZ2V0X3NjaGVtYV92YXJpYWJsZSgndjEnLCAneicsIG51 bGw6OmRvdWJsZSBwcmVjaXNpb24pOworIGdldF9zY2hlbWFfdmFyaWFibGUgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAzLjE0CisoMSByb3cpCisKK1NFTEVDVCBnZXRf c2NoZW1hX3ZhcmlhYmxlKCd2MicsICd6JywgbnVsbDo6ZG91YmxlIHByZWNpc2lvbik7CisgZ2V0 X3NjaGVtYV92YXJpYWJsZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAg IDMxLjQKKygxIHJvdykKKworLS0gc2hvdWxkIHRvIGZhaWwKK1NFTEVDVCBnZXRfc2NoZW1hX3Zh cmlhYmxlKCd2MScsICd3JywgbnVsbDo6ZG91YmxlIHByZWNpc2lvbik7CitFUlJPUjogIHRoZSB2 YXJpYWJsZSAidjEiIGhhcyBub3QgZmllbGQgInciCitTRUxFQ1QgZ2V0X3NjaGVtYV92YXJpYWJs ZSgndjInLCAndycsIG51bGw6OmRvdWJsZSBwcmVjaXNpb24pOworRVJST1I6ICB0aGUgdmFyaWFi bGUgInYyIiBoYXMgbm90IGZpZWxkICJ3IgorQ1JFQVRFIFZBUklBQkxFIHYzIEFTIGludGVnZXI7 CitTRUxFQ1QgZ2V0X3NjaGVtYV92YXJpYWJsZSgndjMnLCAndycsIG51bGw6OmRvdWJsZSBwcmVj aXNpb24pOworRVJST1I6ICB0aGUgdmFyaWFibGUgInYzIiBpcyBub3Qgb2Ygcm93IHR5cGUKK1NF TEVDVCBzZXRfc2NoZW1hX3ZhcmlhYmxlKCd2MScsICd6JywgMy4xNCAqIDIpOworIHNldF9zY2hl bWFfdmFyaWFibGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNU IHYxOworICAgICB2MSAgICAgCistLS0tLS0tLS0tLS0KKyAoMSwyLDYuMjgpCisoMSByb3cpCisK K1NFTEVDVCBzZXRfc2NoZW1hX3ZhcmlhYmxlKCd2MScsICd6JywgbnVsbDo6ZG91YmxlIHByZWNp c2lvbik7Cisgc2V0X3NjaGVtYV92YXJpYWJsZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAor KDEgcm93KQorCitTRUxFQ1QgdjE7CisgICB2MSAgIAorLS0tLS0tLS0KKyAoMSwyLCkKKygxIHJv dykKKworU0VMRUNUIHNldF9zY2hlbWFfdmFyaWFibGUoJ3YxJywgJ3onLCAzLjMzMzM6OmRvdWJs ZSBwcmVjaXNpb24pOworIHNldF9zY2hlbWFfdmFyaWFibGUgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAKKygxIHJvdykKKworU0VMRUNUIHNldF9zY2hlbWFfdmFyaWFibGUoJ3YxJywgJ3gnLCAx MDAwMC4yMik7Cisgc2V0X3NjaGVtYV92YXJpYWJsZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IAorKDEgcm93KQorCitTRUxFQ1QgdjE7CisgICAgICAgdjEgICAgICAgCistLS0tLS0tLS0tLS0t LS0tCisgKDEwMDAwLDIsMy4zMykKKygxIHJvdykKKworU0VMRUNUIHYxLnggKyB2MS56OworID9j b2x1bW4/IAorLS0tLS0tLS0tLQorIDEwMDAzLjMzCisoMSByb3cpCisKK1NFTEVDVCB2Mi54ICsg djIuejsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAgICA0MS40MAorKDEgcm93KQorCistLSBh Y2Nlc3MgdG8gY29tcG9zaXRlIGZpZWxkcyBzaG91bGQgYmUgc2FmZSB0b28KKy0tIHNob3VsZCB0 byBmYWlsCitTRVQgUk9MRSBUTyB2YXJfdGVzdF9yb2xlOworU0VMRUNUIHYyLng7CitFUlJPUjog IHBlcm1pc3Npb24gZGVuaWVkIGZvciBzY2hlbWEgdmFyaWFibGUgdjIKK1NFVCBST0xFIFRPIERF RkFVTFQ7CitEUk9QIFZBUklBQkxFIHYxOworRFJPUCBWQVJJQUJMRSB2MjsKK0RST1AgVkFSSUFC TEUgdjM7CitEUk9QIFJPTEUgdmFyX3Rlc3Rfcm9sZTsKKy0tIHNjYWxhciB2YXJpYWJsZXMgc2hv dWxkIG5vdCBiZSBpbiBjb25mbGljdCB3aXRoIHF1YWxpZmllZCBjb2x1bW4KK0NSRUFURSBWQVJJ QUJMRSB2YXJ4IEFTIHRleHQ7CitTRUxFQ1QgdmFyeC5yZWxuYW1lIEZST00gcGdfY2xhc3MgdmFy eCBXSEVSRSB2YXJ4LnJlbG5hbWUgPSAncGdfY2xhc3MnOworIHJlbG5hbWUgIAorLS0tLS0tLS0t LQorIHBnX2NsYXNzCisoMSByb3cpCisKKy0tIHNob3VsZCB0byBmYWlsCitTRUxFQ1QgdmFyeC54 eHg7CitFUlJPUjogIG1pc3NpbmcgRlJPTS1jbGF1c2UgZW50cnkgZm9yIHRhYmxlICJ2YXJ4Igor TElORSAxOiBTRUxFQ1QgdmFyeC54eHg7CisgICAgICAgICAgICAgICBeCistLSB2YXJpYWJsZXMg Y2FuIGJlIHVwZGF0ZWQgdW5kZXIgUk8gdHJhbnNhY3Rpb24KK0JFR0lOOworU0VUIFRSQU5TQUNU SU9OIFJFQUQgT05MWTsKK0xFVCB2YXJ4ID0gJ2hlbGxvJzsKK0NPTU1JVDsKK1NFTEVDVCB2YXJ4 OworIHZhcnggIAorLS0tLS0tLQorIGhlbGxvCisoMSByb3cpCisKK0RST1AgVkFSSUFCTEUgdmFy eDsKK0NSRUFURSBWQVJJQUJMRSB2MSBBUyAoYSBpbnQsIGIgbnVtZXJpYywgYyB0ZXh0KTsKK0xF VCB2MSA9ICgxLCBwaSgpLCAnaGVsbG8nKTsKK1NFTEVDVCB2MTsKKyAgICAgICAgICAgICB2MSAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAoMSwzLjE0MTU5MjY1 MzU4OTc5LGhlbGxvKQorKDEgcm93KQorCitMRVQgdjEuYiA9IDEwLjIyMjI7CitTRUxFQ1QgdjE7 CisgICAgICAgIHYxICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tCisgKDEsMTAuMjIyMixo ZWxsbykKKygxIHJvdykKKworLS0gc2hvdWxkIHRvIGZhaWwKK0xFVCB2MS54ID0gMTA7CitFUlJP UjogIGNhbm5vdCBhc3NpZ24gdG8gZmllbGQgIngiIG9mIGNvbHVtbiAieCIgYmVjYXVzZSB0aGVy ZSBpcyBubyBzdWNoIGNvbHVtbiBpbiBkYXRhIHR5cGUgdjEKK0RST1AgVkFSSUFCTEUgdjE7Cist LSBhcnJheXMgYXJlIHN1cHBvcnRlZAorQ1JFQVRFIFZBUklBQkxFIHZhMSBBUyBudW1lcmljW107 CitMRVQgdmExID0gQVJSQVlbMS4xLDIuMV07CitMRVQgdmExWzFdID0gMTAuMTsKK1NFTEVDVCB2 YTE7CisgICAgdmExICAgICAKKy0tLS0tLS0tLS0tLQorIHsxMC4xLDIuMX0KKygxIHJvdykKKwor Q1JFQVRFIFZBUklBQkxFIHZhMiBBUyAoYSBudW1lcmljLCBiIG51bWVyaWNbXSk7CitMRVQgdmEy ID0gKDEwLjEsIEFSUkFZWzAuMCwgMC4wXSk7CitMRVQgdmEyLmEgPSAxMC4yOworU0VMRUNUIHZh MjsKKyAgICAgICAgdmEyICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLQorICgxMC4yLCJ7 MC4wLDAuMH0iKQorKDEgcm93KQorCitMRVQgdmEyLmJbMV0gPSAxMC4zOworU0VMRUNUIHZhMjsK KyAgICAgICAgIHZhMiAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKDEwLjIsInsx MC4zLDAuMH0iKQorKDEgcm93KQorCitEUk9QIFZBUklBQkxFIHZhMTsKK0RST1AgVkFSSUFCTEUg dmEyOworLS0gZGVmYXVsdCB2YWx1ZXMKK0NSRUFURSBWQVJJQUJMRSB2MSBBUyBudW1lcmljIERF RkFVTFQgcGkoKTsKK0xFVCB2MSA9IHYxICogMjsKK1NFTEVDVCB2MTsKKyAgICAgICAgdjEgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tCisgNi4yODMxODUzMDcxNzk1OAorKDEgcm93KQorCitD UkVBVEUgVkFSSUFCTEUgdjIgQVMgKGEgbnVtZXJpYywgYiB0ZXh0IERFRkFVTFQgJ2hlbGxvJyk7 CitMRVQgcHVibGljLnYyLmEgPSBwaSgpOworU0VMRUNUIHYyOworICAgICAgICAgICAgdjIgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKDMuMTQxNTkyNjUzNTg5Nzks aGVsbG8pCisoMSByb3cpCisKK0RST1AgVkFSSUFCTEUgdjE7CitEUk9QIFZBUklBQkxFIHYyOwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSBiL3NyYy90ZXN0 L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKaW5kZXggYzA3MDgzYmQ0NC4uYzc3Njk4OWVlZiAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQorKysgYi9zcmMv dGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCkBAIC0xMTEsNyArMTExLDcgQEAgdGVzdDog c2VsZWN0X3ZpZXdzIHBvcnRhbHNfcDIgZm9yZWlnbl9rZXkgY2x1c3RlciBkZXBlbmRlbmN5IGd1 YyBiaXRtYXBvcHMgY29tYm8KICMgTkI6IHRlbXAuc3FsIGRvZXMgYSByZWNvbm5lY3Qgd2hpY2gg dHJhbnNpZW50bHkgdXNlcyAyIGNvbm5lY3Rpb25zLAogIyBzbyBrZWVwIHRoaXMgcGFyYWxsZWwg Z3JvdXAgdG8gYXQgbW9zdCAxOSB0ZXN0cwogIyAtLS0tLS0tLS0tCi10ZXN0OiBwbGFuY2FjaGUg bGltaXQgcGxwZ3NxbCBjb3B5MiB0ZW1wIGRvbWFpbiByYW5nZWZ1bmNzIHByZXBhcmUgd2l0aG91 dF9vaWQgY29udmVyc2lvbiB0cnVuY2F0ZSBhbHRlcl90YWJsZSBzZXF1ZW5jZSBwb2x5bW9ycGhp c20gcm93dHlwZXMgcmV0dXJuaW5nIGxhcmdlb2JqZWN0IHdpdGggeG1sCit0ZXN0OiBwbGFuY2Fj aGUgbGltaXQgcGxwZ3NxbCBjb3B5MiB0ZW1wIGRvbWFpbiByYW5nZWZ1bmNzIHByZXBhcmUgd2l0 aG91dF9vaWQgY29udmVyc2lvbiB0cnVuY2F0ZSBhbHRlcl90YWJsZSBzZXF1ZW5jZSBwb2x5bW9y cGhpc20gcm93dHlwZXMgcmV0dXJuaW5nIGxhcmdlb2JqZWN0IHdpdGggeG1sIHNjaGVtYV92YXJp YWJsZXMKIAogIyAtLS0tLS0tLS0tCiAjIEFub3RoZXIgZ3JvdXAgb2YgcGFyYWxsZWwgdGVzdHMK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc2VyaWFsX3NjaGVkdWxlIGIvc3JjL3Rlc3Qv cmVncmVzcy9zZXJpYWxfc2NoZWR1bGUKaW5kZXggZTZlNmE0NjA4Yi4uOGVjNGI1OTBiNiAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zZXJpYWxfc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9zZXJpYWxfc2NoZWR1bGUKQEAgLTE5MSwzICsxOTEsNCBAQCB0ZXN0OiBwYXJ0aXRp b25fYWdncmVnYXRlCiB0ZXN0OiBmYXN0X2RlZmF1bHQKIHRlc3Q6IGV2ZW50X3RyaWdnZXIKIHRl c3Q6IHN0YXRzCit0ZXN0OiBzY2hlbWFfdmFyaWFibGVzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9zY2hlbWFfdmFyaWFibGVzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Nj aGVtYV92YXJpYWJsZXMuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LjI3YmJkMWZkYzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zY2hl bWFfdmFyaWFibGVzLnNxbApAQCAtMCwwICsxLDI1MSBAQAorQ1JFQVRFIFZBUklBQkxFIHZhcjEg QVMgaW50ZWdlcjsKK0NSRUFURSBURU1QIFZBUklBQkxFIHZhcjIgQVMgdGV4dDsKKworRFJPUCBW QVJJQUJMRSB2YXIxLCB2YXIyOworCistLSBmdW5jdGlvbmFsIGludGVyZmFjZQorQ1JFQVRFIFZB UklBQkxFIHZhcjEgQVMgbnVtZXJpYzsKK1NFTEVDVCBzZXRfc2NoZW1hX3ZhcmlhYmxlKCd2YXIx JywgMzMzKTsKK1NFTEVDVCBnZXRfc2NoZW1hX3ZhcmlhYmxlKCd2YXIxJywgbnVsbDo6bnVtZXJp Yyk7CisKK1NFTEVDVCBzZXRfc2NoZW1hX3ZhcmlhYmxlKCd2YXIxJywgMzMzOjppbnRlZ2VyKTsK K1NFTEVDVCBnZXRfc2NoZW1hX3ZhcmlhYmxlKCd2YXIxJywgbnVsbDo6bnVtZXJpYyk7CisKK1NF TEVDVCBzZXRfc2NoZW1hX3ZhcmlhYmxlKCd2YXIxJywgJzMzMy41NSc6OnRleHQpOworU0VMRUNU IGdldF9zY2hlbWFfdmFyaWFibGUoJ3ZhcjEnLCBudWxsOjpudW1lcmljKTsKK1NFTEVDVCBnZXRf c2NoZW1hX3ZhcmlhYmxlKCd2YXIxJywgbnVsbDo6aW50KTsKK1NFTEVDVCBnZXRfc2NoZW1hX3Zh cmlhYmxlKCd2YXIxJywgbnVsbDo6dGV4dCk7CisKKy0tIGFjY2VzcyByaWdodHMgdGVzdAorCitD UkVBVEUgUk9MRSB2YXJfdGVzdF9yb2xlOworCitTRVQgUk9MRSBUTyB2YXJfdGVzdF9yb2xlOwor CistLSBzaG91bGQgdG8gZmFpbAorU0VMRUNUIHNldF9zY2hlbWFfdmFyaWFibGUoJ3ZhcjEnLCAn MTAwMCc6OnRleHQpOworU0VMRUNUIGdldF9zY2hlbWFfdmFyaWFibGUoJ3ZhcjEnLCBudWxsOjpu dW1lcmljKTsKKworU0VUIFJPTEUgVE8gREVGQVVMVDsKKworR1JBTlQgU0VMRUNUIE9OIFZBUklB QkxFIHZhcjEgVE8gdmFyX3Rlc3Rfcm9sZTsKKworU0VUIFJPTEUgVE8gdmFyX3Rlc3Rfcm9sZTsK Ky0tIHNob3VsZCB0byBmYWlsCitTRUxFQ1Qgc2V0X3NjaGVtYV92YXJpYWJsZSgndmFyMScsICcx MDAwJzo6dGV4dCk7CistLSBzaG91bGQgdG8gd29yaworU0VMRUNUIGdldF9zY2hlbWFfdmFyaWFi bGUoJ3ZhcjEnLCBudWxsOjpudW1lcmljKTsKKworU0VUIFJPTEUgVE8gREVGQVVMVDsKKworR1JB TlQgVVBEQVRFIE9OIFZBUklBQkxFIHZhcjEgVE8gdmFyX3Rlc3Rfcm9sZTsKKworU0VUIFJPTEUg VE8gdmFyX3Rlc3Rfcm9sZTsKKworLS0gc2hvdWxkIHRvIHdvcmsKK1NFTEVDVCBzZXRfc2NoZW1h X3ZhcmlhYmxlKCd2YXIxJywgJzEwMDAnOjp0ZXh0KTsKK1NFTEVDVCBnZXRfc2NoZW1hX3Zhcmlh YmxlKCd2YXIxJywgbnVsbDo6bnVtZXJpYyk7CisKK1NFVCBST0xFIFRPIERFRkFVTFQ7CisKK1JF Vk9LRSBBTEwgT04gVkFSSUFCTEUgdmFyMSBGUk9NIHZhcl90ZXN0X3JvbGU7CisKK0NSRUFURSBW QVJJQUJMRSB2YXIgQVMgaW50ZWdlcjsKKworU0VMRUNUIHNldF9zY2hlbWFfdmFyaWFibGUoJ3B1 YmxpYy52YXInLCAxMjM0KTsKKworU0VMRUNUIHB1YmxpYy52YXI7CisKK0RPICQkCitCRUdJTgor ICBSQUlTRSBOT1RJQ0UgJ3B1YmxpYy52YXIgaXMgPSAlJywgcHVibGljLnZhcjsKK0VORDsKKyQk OworCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBzZWN1cmVfdmFyKCkKK1JFVFVSTlMgaW50 IEFTICQkCisgIFNFTEVDVCBwdWJsaWMudmFyOworJCQgTEFOR1VBR0Ugc3FsIFNFQ1VSSVRZIERF RklORVI7CisKK1NFTEVDVCBzZWN1cmVfdmFyKCk7CisKK1NFVCBST0xFIFRPIHZhcl90ZXN0X3Jv bGU7CisKKy0tIHNob3VsZCB0byBmYWlsCitTRUxFQ1QgcHVibGljLnZhcjsKKworLS0gc2hvdWxk IHRvIHdvcms7CitTRUxFQ1Qgc2VjdXJlX3ZhcigpOworCitTRVQgUk9MRSBUTyBERUZBVUxUOwor CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsMTAwKSBnKHYpIFdIRVJFIHYgPSB2YXI7CisKK0NSRUFURSBWSUVXIHNjaGVtYV92YXJf dmlldyBBUyBTRUxFQ1QgdmFyOworCitTRUxFQ1QgKiBGUk9NIHNjaGVtYV92YXJfdmlldzsKKwor XGMgLQorCistLSBzaG91bGQgdG8gd29yayBzdGlsbCwgYnV0IHZhciB3aWxsIGJlIGVtcHR5CitT RUxFQ1QgKiBGUk9NIHNjaGVtYV92YXJfdmlldzsKKworTEVUIHZhcjEgPSBwaSgpOworCitTRUxF Q1QgdmFyMTsKKworLS0gd2UgY2FuIGxvb2sgb24gZXhlY3V0aW9uIHBsYW4KK0VYUExBSU4gKFZF UkJPU0UsIENPU1RTIE9GRikgTEVUIHZhcjEgPSBwaSgpOworCistLSBMRVQgY2FuIGJlIHByZXBh cmVkCitQUkVQQVJFIHZhcl9wcChpbnQsIG51bWVyaWMpIEFTIExFVCB2YXIxID0gJDEgKyAkMjsK KworRVhFQ1VURSB2YXJfcHAoMTAwLCAxLjIzNDU2KTsKKworU0VMRUNUIHZhcjE7CisKK0NSRUFU RSBWQVJJQUJMRSB2YXIzIEFTIGludDsKKworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gaW5j KGludCkKK1JFVFVSTlMgaW50IEFTICQkCitCRUdJTgorICBMRVQgcHVibGljLnZhcjMgPSBDT0FM RVNDRShwdWJsaWMudmFyMyArICQxLCAkMSk7CisgIFJFVFVSTiB2YXIzOworRU5EOworJCQgTEFO R1VBR0UgcGxwZ3NxbDsKKworU0VMRUNUIGluYygxKTsKK1NFTEVDVCBpbmMoMSk7CitTRUxFQ1Qg aW5jKDEpOworCitTRUxFQ1QgaW5jKDEpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTApOworCitT RVQgUk9MRSBUTyB2YXJfdGVzdF9yb2xlOworCistLSBzaG91bGQgdG8gZmFpbAorTEVUIHZhcjMg PSAwOworCitTRVQgUk9MRSBUTyBERUZBVUxUOworCitEUk9QIFZJRVcgc2NoZW1hX3Zhcl92aWV3 OworCitEUk9QIFZBUklBQkxFIHZhciBDQVNDQURFOworRFJPUCBWQVJJQUJMRSB2YXIxIENBU0NB REU7CitEUk9QIFZBUklBQkxFIHZhcjMgQ0FTQ0FERTsKKworLS0gY29tcG9zaXRlIHZhcmlhYmxl cworCitDUkVBVEUgVFlQRSBzdl94eXogQVMgKHggaW50LCB5IGludCwgeiBudW1lcmljKDEwLDIp KTsKKworQ1JFQVRFIFZBUklBQkxFIHYxIEFTIHN2X3h5ejsKK0NSRUFURSBWQVJJQUJMRSB2MiBB UyAoeCBpbnQsIHkgaW50LCB6IG51bWVyaWMoMTAsMikpOworCitcZCB2MQorXGQgdjIKKworLS0g ZXhwbGljaXQgY2FzdGluZyBpcyBuZWNlc3NhcnkKK0xFVCB2MSA9ICgxLDIsMy4xNCk6OnN2X3h5 ejsKK0xFVCB2MiA9ICgxMCwyMCwzLjE0KjEwKTo6djI7CisKKy0tIHNob3VsZCB0byB3b3JrIHRv byAtIHRoZXJlIGFyZSBwcmVwYXJlZCBjYXN0cworTEVUIHYxID0gKDEsMiwzLjE0KTo6djE7CisK K1NFTEVDVCB2MTsKK1NFTEVDVCB2MjsKK1NFTEVDVCAodjEpLio7CitTRUxFQ1QgKHYyKS4qOwor CitTRUxFQ1QgZ2V0X3NjaGVtYV92YXJpYWJsZSgndjEnLCAneicsIG51bGw6OmRvdWJsZSBwcmVj aXNpb24pOworU0VMRUNUIGdldF9zY2hlbWFfdmFyaWFibGUoJ3YyJywgJ3onLCBudWxsOjpkb3Vi bGUgcHJlY2lzaW9uKTsKKworLS0gc2hvdWxkIHRvIGZhaWwKK1NFTEVDVCBnZXRfc2NoZW1hX3Zh cmlhYmxlKCd2MScsICd3JywgbnVsbDo6ZG91YmxlIHByZWNpc2lvbik7CitTRUxFQ1QgZ2V0X3Nj aGVtYV92YXJpYWJsZSgndjInLCAndycsIG51bGw6OmRvdWJsZSBwcmVjaXNpb24pOworCitDUkVB VEUgVkFSSUFCTEUgdjMgQVMgaW50ZWdlcjsKK1NFTEVDVCBnZXRfc2NoZW1hX3ZhcmlhYmxlKCd2 MycsICd3JywgbnVsbDo6ZG91YmxlIHByZWNpc2lvbik7CisKK1NFTEVDVCBzZXRfc2NoZW1hX3Zh cmlhYmxlKCd2MScsICd6JywgMy4xNCAqIDIpOworU0VMRUNUIHYxOworU0VMRUNUIHNldF9zY2hl bWFfdmFyaWFibGUoJ3YxJywgJ3onLCBudWxsOjpkb3VibGUgcHJlY2lzaW9uKTsKK1NFTEVDVCB2 MTsKK1NFTEVDVCBzZXRfc2NoZW1hX3ZhcmlhYmxlKCd2MScsICd6JywgMy4zMzMzOjpkb3VibGUg cHJlY2lzaW9uKTsKK1NFTEVDVCBzZXRfc2NoZW1hX3ZhcmlhYmxlKCd2MScsICd4JywgMTAwMDAu MjIpOworU0VMRUNUIHYxOworCitTRUxFQ1QgdjEueCArIHYxLno7CitTRUxFQ1QgdjIueCArIHYy Lno7CisKKy0tIGFjY2VzcyB0byBjb21wb3NpdGUgZmllbGRzIHNob3VsZCBiZSBzYWZlIHRvbwor LS0gc2hvdWxkIHRvIGZhaWwKK1NFVCBST0xFIFRPIHZhcl90ZXN0X3JvbGU7CisKK1NFTEVDVCB2 Mi54OworCitTRVQgUk9MRSBUTyBERUZBVUxUOworCisKK0RST1AgVkFSSUFCTEUgdjE7CitEUk9Q IFZBUklBQkxFIHYyOworRFJPUCBWQVJJQUJMRSB2MzsKKworRFJPUCBST0xFIHZhcl90ZXN0X3Jv bGU7CisKKy0tIHNjYWxhciB2YXJpYWJsZXMgc2hvdWxkIG5vdCBiZSBpbiBjb25mbGljdCB3aXRo IHF1YWxpZmllZCBjb2x1bW4KK0NSRUFURSBWQVJJQUJMRSB2YXJ4IEFTIHRleHQ7CitTRUxFQ1Qg dmFyeC5yZWxuYW1lIEZST00gcGdfY2xhc3MgdmFyeCBXSEVSRSB2YXJ4LnJlbG5hbWUgPSAncGdf Y2xhc3MnOworCistLSBzaG91bGQgdG8gZmFpbAorU0VMRUNUIHZhcngueHh4OworCisKKy0tIHZh cmlhYmxlcyBjYW4gYmUgdXBkYXRlZCB1bmRlciBSTyB0cmFuc2FjdGlvbgorCitCRUdJTjsKK1NF VCBUUkFOU0FDVElPTiBSRUFEIE9OTFk7CitMRVQgdmFyeCA9ICdoZWxsbyc7CitDT01NSVQ7CisK K1NFTEVDVCB2YXJ4OworCitEUk9QIFZBUklBQkxFIHZhcng7CisKK0NSRUFURSBWQVJJQUJMRSB2 MSBBUyAoYSBpbnQsIGIgbnVtZXJpYywgYyB0ZXh0KTsKK0xFVCB2MSA9ICgxLCBwaSgpLCAnaGVs bG8nKTsKK1NFTEVDVCB2MTsKK0xFVCB2MS5iID0gMTAuMjIyMjsKK1NFTEVDVCB2MTsKKworLS0g c2hvdWxkIHRvIGZhaWwKK0xFVCB2MS54ID0gMTA7CisKK0RST1AgVkFSSUFCTEUgdjE7CisKKy0t IGFycmF5cyBhcmUgc3VwcG9ydGVkCitDUkVBVEUgVkFSSUFCTEUgdmExIEFTIG51bWVyaWNbXTsK K0xFVCB2YTEgPSBBUlJBWVsxLjEsMi4xXTsKK0xFVCB2YTFbMV0gPSAxMC4xOworU0VMRUNUIHZh MTsKKworQ1JFQVRFIFZBUklBQkxFIHZhMiBBUyAoYSBudW1lcmljLCBiIG51bWVyaWNbXSk7CitM RVQgdmEyID0gKDEwLjEsIEFSUkFZWzAuMCwgMC4wXSk7CitMRVQgdmEyLmEgPSAxMC4yOworU0VM RUNUIHZhMjsKK0xFVCB2YTIuYlsxXSA9IDEwLjM7CitTRUxFQ1QgdmEyOworCitEUk9QIFZBUklB QkxFIHZhMTsKK0RST1AgVkFSSUFCTEUgdmEyOworCistLSBkZWZhdWx0IHZhbHVlcworQ1JFQVRF IFZBUklBQkxFIHYxIEFTIG51bWVyaWMgREVGQVVMVCBwaSgpOworTEVUIHYxID0gdjEgKiAyOwor U0VMRUNUIHYxOworCitDUkVBVEUgVkFSSUFCTEUgdjIgQVMgKGEgbnVtZXJpYywgYiB0ZXh0IERF RkFVTFQgJ2hlbGxvJyk7CitMRVQgcHVibGljLnYyLmEgPSBwaSgpOworU0VMRUNUIHYyOworCitE Uk9QIFZBUklBQkxFIHYxOworRFJPUCBWQVJJQUJMRSB2MjsKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdAppbmRleCBhYmMxMGE4ZmZkLi5kN2FjMTEyYjkzIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdApAQCAtNDI0LDYgKzQyNCw3IEBAIENyZWF0ZVJlcGxpY2F0aW9uU2xvdENtZAogQ3JlYXRl Um9sZVN0bXQKIENyZWF0ZVNjaGVtYVN0bXQKIENyZWF0ZVNjaGVtYVN0bXRDb250ZXh0CitDcmVh dGVTY2hlbWFWYXJTdG10CiBDcmVhdGVTZXFTdG10CiBDcmVhdGVTdGF0c1N0bXQKIENyZWF0ZVN0 bXQK --001a114117706457c1056a1e2131--