Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pcygd-0002qi-T4 for pgsql-hackers@arkaria.postgresql.org; Fri, 17 Mar 2023 01:15:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pcygc-0006xZ-R4 for pgsql-hackers@arkaria.postgresql.org; Fri, 17 Mar 2023 01:15:14 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pcygY-0006wO-Dx for pgsql-hackers@lists.postgresql.org; Fri, 17 Mar 2023 01:15:14 +0000 Received: from relay10.mail.gandi.net ([217.70.178.230]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pcyg7-000833-Nh for pgsql-hackers@postgresql.org; Fri, 17 Mar 2023 01:15:09 +0000 Received: (Authenticated sender: adsend@dunslane.net) by mail.gandi.net (Postfix) with ESMTPSA id 31CF7240002; Fri, 17 Mar 2023 01:14:36 +0000 (UTC) Content-Type: multipart/mixed; boundary="------------MwgLFi9fcx5tDY0Wnjp80Eno" Message-ID: <6b56c64f-787b-5b2b-a7d8-b1f5c4d4dc72@dunslane.net> Date: Thu, 16 Mar 2023 21:14:35 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.5.0 Subject: Re: SQL/JSON revisited Content-Language: en-US To: Amit Langote , Peter Eisentraut Cc: Andres Freund , vignesh C , PostgreSQL-development , e.indrupskaya@postgrespro.ru References: <20230220172456.q3oshnvfk3wyhm5l@awork3.anarazel.de> <454db29b-7d81-c97a-bc1e-0e4c16609076@dunslane.net> <9bf3cbc7-f81e-d07f-f2ca-fcbfa91a11ec@enterprisedb.com> From: Andrew Dunstan In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------MwgLFi9fcx5tDY0Wnjp80Eno Content-Type: multipart/alternative; boundary="------------x60p9eo9ylx4TF7O0vhoMAhg" --------------x60p9eo9ylx4TF7O0vhoMAhg Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 2023-03-15 We 08:49, Amit Langote wrote: > Hi, > > On Thu, Mar 9, 2023 at 10:08 PM Peter Eisentraut > wrote: >> On 08.03.23 22:40, Andrew Dunstan wrote: >>> These both seem like things not worth holding up progress for, and I >>> think it would be good to get these patches committed as soon as >>> possible. My intention is to commit them (after some grammar >>> adjustments) plus their documentation in the next few days. >> If possible, the documentation for each incremental part should be part >> of that patch, not a separate all-in-one patch. > Here's a version that includes documentation of the individual bits in > their own commits. I've also merged the patch to add the PLAN clause > to JSON_TABLE into the patch that adds JSON_TABLE itself. Hi, I have taken these and done some surgery to reduce the explosion on grammar symbols. The attached set is just Amit's patches with some of this surgery done - nothing other than gram.y has been touched. Patches 2 and 5 in the series could be sanely squashed onto patches 1 and 4 respectively. I haven't done anything significant yet with the JSONTABLE patch, there is probably some more low hanging fruit there, and possibly some still in the earlier patches. cheers andrew -- Andrew Dunstan EDB:https://www.enterprisedb.com --------------x60p9eo9ylx4TF7O0vhoMAhg Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit


On 2023-03-15 We 08:49, Amit Langote wrote:
Hi,

On Thu, Mar 9, 2023 at 10:08 PM Peter Eisentraut
<peter.eisentraut@enterprisedb.com> wrote:
On 08.03.23 22:40, Andrew Dunstan wrote:
These both seem like things not worth holding up progress for, and I
think it would be good to get these patches committed as soon as
possible. My intention is to commit them (after some grammar
adjustments) plus their documentation in the next few days.
If possible, the documentation for each incremental part should be part
of that patch, not a separate all-in-one patch.
Here's a version that includes documentation of the individual bits in
their own commits.  I've also merged the patch to add the PLAN clause
to JSON_TABLE into the patch that adds JSON_TABLE itself.


Hi, I have taken these and done some surgery to reduce the explosion on grammar symbols. The attached set is just Amit's patches with some of this surgery done - nothing other than gram.y has been touched. Patches 2 and 5 in the series could be sanely squashed onto patches 1 and 4 respectively. I haven't done anything significant yet with the JSONTABLE patch, there is probably some more low hanging fruit there, and possibly some still in the earlier patches.


cheers


andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com
--------------x60p9eo9ylx4TF7O0vhoMAhg-- --------------MwgLFi9fcx5tDY0Wnjp80Eno Content-Type: text/x-patch; charset=UTF-8; name="v10-0001-SQL-JSON-constructors.patch" Content-Disposition: attachment; filename="v10-0001-SQL-JSON-constructors.patch" Content-Transfer-Encoding: base64 RnJvbSA2Mzc0ZjZmNDhlMTY1OTQyYzdkNDI1MTE5YjNiOGExZTc3ZDc0OWY3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5l Lm5ldD4KRGF0ZTogVGh1LCAzIE1hciAyMDIyIDEzOjAwOjQ5IC0wNTAwClN1YmplY3Q6IFtQ QVRDSCAxLzldIFNRTC9KU09OIGNvbnN0cnVjdG9ycwoKVGhpcyBwYXRjaCBpbnRyb2R1Y2Vz IHRoZSBTUUwvSlNPTiBzdGFuZGFyZCBjb25zdHJ1Y3RvcnMgZm9yIEpTT046CgpKU09OX0FS UkFZKCkKSlNPTl9BUlJBWUFHRygpCkpTT05fT0JKRUNUKCkKSlNPTl9PQkpFQ1RBR0coKQoK Rm9yIHRoZSBtb3N0IHBhcnQgdGhlc2UgZnVuY3Rpb25zIHByb3ZpZGUgZmFjaWxpdGllcyB0 aGF0IG1pbWljCmV4aXN0aW5nIGpzb24vanNvbmIgZnVuY3Rpb25zLiBIb3dldmVyLCB0aGV5 IGFsc28gb2ZmZXIgc29tZSB1c2VmdWwKYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5LiBJbiBh ZGRpdGlvbiB0byB0ZXh0IGlucHV0LCB0aGUgSlNPTigpIGZ1bmN0aW9uCmFjY2VwdHMgYnl0 ZWEgaW5wdXQsIHdoaWNoIGl0IHdpbGwgZGVjb2RlIGFuZCBjb25zdHVjdCBhIGpzb24gdmFs dWUgZnJvbS4KVGhlIG90aGVyIGZ1bmN0aW9ucyBwcm92aWRlIHVzZWZ1bCBvcHRpb25zIGZv ciBoYW5kbGluZyBkdXBsaWNhdGUga2V5cwphbmQgbnVsbCB2YWx1ZXMuCgpUaGlzIHNlcmll cyBvZiBwYXRjaGVzIHdpbGwgYmUgZm9sbG93ZWQgYnkgYSBjb25zb2xpZGF0ZWQgZG9jdW1l bnRhdGlvbgpwYXRjaC4KCk5pa2l0YSBHbHVraG92CgpSZXZpZXdlcnMgaGF2ZSBpbmNsdWRl ZCAoaW4gbm8gcGFydGljdWxhciBvcmRlcikgQW5kcmVzIEZyZXVuZCwgQWxleGFuZGVyCktv cm90a292LCBQYXZlbCBTdGVodWxlLCBBbmRyZXcgQWxzdXAsIEVyaWsgUmlqa2VycywgWmlo b25nIFl1LApIaW1hbnNodSBVcGFkaHlheWEsIERhbmllbCBHdXN0YWZzc29uLCBKdXN0aW4g UHJ5emJ5LgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9jZDBiYjkzNS0wMTU4 LTc4YTctMDhiNS05MDQ4ODZkZWFjNGJAcG9zdGdyZXNwcm8ucnUKRGlzY3Vzc2lvbjogaHR0 cHM6Ly9wb3N0Z3IuZXMvbS8yMDIyMDYxNjIzMzEzMC5ycGFyaXZhZmlwdDZkb2ozQGFsYXAz LmFuYXJhemVsLmRlCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vYWJkOWI4M2It YWE2Ni1mMjMwLTNkNmQtNzM0ODE3ZjA5OTVkJTQwcG9zdGdyZXNxbC5vcmcKLS0tCiBkb2Mv c3JjL3NnbWwvZnVuYy5zZ21sICAgICAgICAgICAgICAgICAgIHwgMzMyICsrKysrKysrKy0K IHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMgICAgICAgICAgfCAgOTEgKysrCiBz cmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jICAgIHwgIDQ5ICsrCiBzcmMv YmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYyAgICAgIHwgICA2ICsKIHNyYy9iYWNr ZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlwZXMuYyAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQv bm9kZXMvbWFrZWZ1bmNzLmMgICAgICAgICAgICB8ICA2OSArKwogc3JjL2JhY2tlbmQvbm9k ZXMvbm9kZUZ1bmNzLmMgICAgICAgICAgICB8IDIyMCArKysrKysrCiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMgICAgIHwgIDQ2ICsrCiBzcmMvYmFja2VuZC9wYXJz ZXIvZ3JhbS55ICAgICAgICAgICAgICAgIHwgMzMzICsrKysrKysrKy0KIHNyYy9iYWNrZW5k L3BhcnNlci9wYXJzZV9leHByLmMgICAgICAgICAgfCA3NjYgKysrKysrKysrKysrKysrKysr KysrKysKIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYyAgICAgICAgfCAgMTMg Kwogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlci5jICAgICAgICAgICAgICB8ICAxNiArCiBz cmMvYmFja2VuZC91dGlscy9hZHQvanNvbi5jICAgICAgICAgICAgIHwgNDAzICsrKysrKysr KystLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMgICAgICAgICAgICB8IDIyNiAr KysrKy0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmJfdXRpbC5jICAgICAgIHwgIDM5 ICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgICAgICAgIHwgMjU3ICsr KysrKystCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2FnZ3JlZ2F0ZS5kYXQgICAgIHwgIDIy ICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgfCAgNzQgKysr CiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oICAgICAgICAgIHwgIDI2ICsKIHNy Yy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oICAgICAgICAgICAgfCAgIDYgKwogc3JjL2lu Y2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICAgICAgICAgICB8IDEwNyArKysrCiBzcmMvaW5j bHVkZS9ub2Rlcy9wcmltbm9kZXMuaCAgICAgICAgICAgIHwgIDg1ICsrKwogc3JjL2luY2x1 ZGUvcGFyc2VyL2t3bGlzdC5oICAgICAgICAgICAgICB8ICAgOCArCiBzcmMvaW5jbHVkZS91 dGlscy9qc29uLmggICAgICAgICAgICAgICAgIHwgICA2ICsKIHNyYy9pbmNsdWRlL3V0aWxz L2pzb25iLmggICAgICAgICAgICAgICAgfCAgIDkgKwogc3JjL2ludGVyZmFjZXMvZWNwZy9w cmVwcm9jL3BhcnNlLnBsICAgICB8ICAgMiArCiBzcmMvaW50ZXJmYWNlcy9lY3BnL3ByZXBy b2MvcGFyc2VyLmMgICAgIHwgIDE0ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb3By X3Nhbml0eS5vdXQgfCAgIDYgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3FsanNv bi5vdXQgICAgfCA3NDYgKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVz cy9wYXJhbGxlbF9zY2hlZHVsZSAgICAgICB8ICAgMiArLQogc3JjL3Rlc3QvcmVncmVzcy9z cWwvb3ByX3Nhbml0eS5zcWwgICAgICB8ICAgNiArLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwv c3FsanNvbi5zcWwgICAgICAgICB8IDI4MiArKysrKysrKysKIHNyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0ICAgICAgICAgfCAgIDEgKwogMzMgZmlsZXMgY2hhbmdlZCwgNDE0 NSBpbnNlcnRpb25zKCspLCAxMjQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zcWxqc29uLm91dAogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpzb24uc3FsCgpkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL2Z1bmMuc2dtbCBiL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKaW5kZXggMTUz MTRhYTNlZS4uODY4ZDAwZTY0MyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMuc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCkBAIC0xNzYzMiw2ICsxNzYzMiwyMDkg QEAgJC4qID8gKEAgbGlrZV9yZWdleCAiXlxcZCskIikKICAgICA8L3BhcmE+CiAgICA8L3Nl Y3QzPgogICA8L3NlY3QyPgorCisgIDxzZWN0MiBpZD0iZnVuY3Rpb25zLXNxbGpzb24iPgor ICAgPHRpdGxlPlNRTC9KU09OIEZ1bmN0aW9ucyBhbmQgRXhwcmVzc2lvbnM8L3RpdGxlPgor ICAgPGluZGV4dGVybSB6b25lPSJmdW5jdGlvbnMtanNvbiI+CisgICAgPHByaW1hcnk+U1FM L0pTT048L3ByaW1hcnk+CisgICAgPHNlY29uZGFyeT5mdW5jdGlvbnMgYW5kIGV4cHJlc3Np b25zPC9zZWNvbmRhcnk+CisgICA8L2luZGV4dGVybT4KKworICAgPHBhcmE+CisgICAgVG8g cHJvdmlkZSBuYXRpdmUgc3VwcG9ydCBmb3IgSlNPTiBkYXRhIHR5cGVzIHdpdGhpbiB0aGUg U1FMIGVudmlyb25tZW50LAorICAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0 bmFtZT4gaW1wbGVtZW50cyB0aGUKKyAgICA8Zmlyc3R0ZXJtPlNRTC9KU09OIGRhdGEgbW9k ZWw8L2ZpcnN0dGVybT4uCisgICAgVGhpcyBtb2RlbCBjb21wcmlzZXMgc2VxdWVuY2VzIG9m IGl0ZW1zLiBFYWNoIGl0ZW0gY2FuIGhvbGQgU1FMIHNjYWxhcgorICAgIHZhbHVlcywgd2l0 aCBhbiBhZGRpdGlvbmFsIFNRTC9KU09OIG51bGwgdmFsdWUsIGFuZCBjb21wb3NpdGUgZGF0 YSBzdHJ1Y3R1cmVzCisgICAgdGhhdCB1c2UgSlNPTiBhcnJheXMgYW5kIG9iamVjdHMuIFRo ZSBtb2RlbCBpcyBhIGZvcm1hbGl6YXRpb24gb2YgdGhlIGltcGxpZWQKKyAgICBkYXRhIG1v ZGVsIGluIHRoZSBKU09OIHNwZWNpZmljYXRpb24KKyAgICA8dWxpbmsgdXJsPSJodHRwczov L3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzE1OSI+UkZDIDcxNTk8L3VsaW5rPi4KKyAgIDwv cGFyYT4KKworICAgPHBhcmE+CisgICAgU1FML0pTT04gYWxsb3dzIHlvdSB0byBoYW5kbGUg SlNPTiBkYXRhIGFsb25nc2lkZSByZWd1bGFyIFNRTCBkYXRhLAorICAgIHdpdGggdHJhbnNh Y3Rpb24gc3VwcG9ydCwgaW5jbHVkaW5nOgorICAgPC9wYXJhPgorCisgICA8aXRlbWl6ZWRs aXN0PgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBVcGxvYWRpbmcgSlNP TiBkYXRhIGludG8gdGhlIGRhdGFiYXNlIGFuZCBzdG9yaW5nIGl0IGluCisgICAgICByZWd1 bGFyIFNRTCBjb2x1bW5zIGFzIGNoYXJhY3RlciBvciBiaW5hcnkgc3RyaW5ncy4KKyAgICAg PC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4K KyAgICAgIEdlbmVyYXRpbmcgSlNPTiBvYmplY3RzIGFuZCBhcnJheXMgZnJvbSByZWxhdGlv bmFsIGRhdGEuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRl bT4KKyAgICAgPHBhcmE+CisgICAgICBRdWVyeWluZyBKU09OIGRhdGEgdXNpbmcgU1FML0pT T04gcXVlcnkgZnVuY3Rpb25zIGFuZAorICAgICAgU1FML0pTT04gcGF0aCBsYW5ndWFnZSBl eHByZXNzaW9ucy4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L2l0ZW1p emVkbGlzdD4KKworICAgPHBhcmE+CisgICAgVGhlcmUgYXJlIHR3byBncm91cHMgb2YgU1FM L0pTT04gZnVuY3Rpb25zLgorICAgIDxsaW5rIGxpbmtlbmQ9ImZ1bmN0aW9ucy1zcWxqc29u LXByb2R1Y2luZyI+Q29uc3RydWN0b3IgZnVuY3Rpb25zPC9saW5rPgorICAgIGdlbmVyYXRl IEpTT04gZGF0YSBmcm9tIHZhbHVlcyBvZiBTUUwgdHlwZXMuCisgICAgUXVlcnkgZnVuY3Rp b25zIGV2YWx1YXRlIFNRTC9KU09OIHBhdGggbGFuZ3VhZ2UgZXhwcmVzc2lvbnMgYWdhaW5z dCBKU09OCisgICAgdmFsdWVzIGFuZCBwcm9kdWNlIHZhbHVlcyBvZiBTUUwvSlNPTiB0eXBl cywgd2hpY2ggYXJlIGNvbnZlcnRlZCB0byBTUUwKKyAgICB0eXBlcy4KKyAgIDwvcGFyYT4K KworICAgPHBhcmE+CisgICAgTWFueSBTUUwvSlNPTiBmdW5jdGlvbnMgaGF2ZSBhbiBvcHRp b25hbCA8bGl0ZXJhbD5GT1JNQVQ8L2xpdGVyYWw+CisgICAgY2xhdXNlLiBUaGlzIGlzIHBy b3ZpZGVkIHRvIGNvbmZvcm0gd2l0aCB0aGUgU1FMIHN0YW5kYXJkLCBidXQgaGFzIG5vCisg ICAgZWZmZWN0IGV4Y2VwdCB3aGVyZSBub3RlZCBvdGhlcndpc2UuCisgICA8L3BhcmE+CisK KyAgIDxwYXJhPgorICAgIDx4cmVmIGxpbmtlbmQ9ImZ1bmN0aW9ucy1zcWxqc29uLXByb2R1 Y2luZyIgLz4gbGlzdHMgdGhlIFNRTC9KU09OCisgICAgQ29uc3RydWN0b3IgZnVuY3Rpb25z LiBFYWNoIGZ1bmN0aW9uIGhhcyBhIDxsaXRlcmFsPlJFVFVSTklORzwvbGl0ZXJhbD4KKyAg ICBjbGF1c2Ugc3BlY2lmeWluZyB0aGUgZGF0YSB0eXBlIHJldHVybmVkLiBJdCBtdXN0IGJl IG9uZSBvZiA8dHlwZT5qc29uPC90eXBlPiwKKyAgICA8dHlwZT5qc29uYjwvdHlwZT4sIDx0 eXBlPmJ5dGVhPC90eXBlPiwgYSBjaGFyYWN0ZXIgc3RyaW5nIHR5cGUgKDx0eXBlPnRleHQ8 L3R5cGU+LCA8dHlwZT5jaGFyPC90eXBlPiwKKyAgICA8dHlwZT52YXJjaGFyPC90eXBlPiwg b3IgPHR5cGU+bmNoYXI8L3R5cGU+KSwgb3IgYSB0eXBlIGZvciB3aGljaCB0aGVyZSBpcyBh IGNhc3QKKyAgICBmcm9tIDx0eXBlPmpzb248L3R5cGU+IHRvIHRoYXQgdHlwZS4KKyAgICBC eSBkZWZhdWx0LCB0aGUgPHR5cGU+anNvbjwvdHlwZT4gdHlwZSBpcyByZXR1cm5lZC4KKyAg IDwvcGFyYT4KKworICAgPG5vdGU+CisgICAgPHBhcmE+CisgICAgIE1hbnkgb2YgdGhlIHJl c3VsdHMgdGhhdCBjYW4gYmUgb2J0YWluZWQgZnJvbSB0aGUgU1FML0pTT04gQ29uc3RydWN0 b3IKKyAgICAgZnVuY3Rpb25zIGNhbiBhbHNvIGJlIG9idGFpbmVkIGJ5IGNhbGxpbmcKKyAg ICAgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPi1zcGVjaWZpYyBmdW5j dGlvbnMgZGV0YWlsZWQgaW4KKyAgICAgPHhyZWYgbGlua2VuZD0iZnVuY3Rpb25zLWpzb24t Y3JlYXRpb24tdGFibGUiIC8+IGFuZAorICAgICA8eHJlZiBsaW5rZW5kPSJmdW5jdGlvbnMt YWdncmVnYXRlLXRhYmxlIi8+LgorICAgIDwvcGFyYT4KKyAgIDwvbm90ZT4KKworICAgPHRh YmxlIGlkPSJmdW5jdGlvbnMtc3FsanNvbi1wcm9kdWNpbmciPgorICAgIDx0aXRsZT5TUUwv SlNPTiBDb25zdHJ1Y3RvciBGdW5jdGlvbnM8L3RpdGxlPgorICAgIDx0Z3JvdXAgY29scz0i MSI+CisgICAgIDx0aGVhZD4KKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5IHJvbGU9ImZ1 bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAg IEZ1bmN0aW9uIHNpZ25hdHVyZQorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgor ICAgICAgICAgRGVzY3JpcHRpb24KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4K KyAgICAgICAgIEV4YW1wbGUocykKKyAgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgIDwv cm93PgorICAgICA8L3RoZWFkPgorICAgICA8dGJvZHk+CisgICAgIDxyb3c+CisgICAgICA8 ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1 cmUiPgorICAgICAgICA8aW5kZXh0ZXJtPjxwcmltYXJ5Pmpzb25fb2JqZWN0PC9wcmltYXJ5 PjwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+anNvbl9vYmplY3Q8L2Z1bmN0aW9u PiAoCisgICAgICAgIDxvcHRpb25hbD4geyA8cmVwbGFjZWFibGU+a2V5X2V4cHJlc3Npb248 L3JlcGxhY2VhYmxlPiB7IDxsaXRlcmFsPlZBTFVFPC9saXRlcmFsPiB8ICc6JyB9CisgICAg ICAgICA8cmVwbGFjZWFibGU+dmFsdWVfZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IDxvcHRp b25hbD4gPGxpdGVyYWw+Rk9STUFUIEpTT048L2xpdGVyYWw+IDxvcHRpb25hbD4gPGxpdGVy YWw+RU5DT0RJTkcgVVRGODwvbGl0ZXJhbD4gPC9vcHRpb25hbD4gPC9vcHRpb25hbD4gfTxv cHRpb25hbD4sIC4uLjwvb3B0aW9uYWw+IDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25h bD4geyA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiB8IDxsaXRlcmFsPkFCU0VOVDwvbGl0ZXJh bD4gfSA8bGl0ZXJhbD5PTiBOVUxMPC9saXRlcmFsPiA8L29wdGlvbmFsPgorICAgICAgICA8 b3B0aW9uYWw+IHsgPGxpdGVyYWw+V0lUSDwvbGl0ZXJhbD4gfCA8bGl0ZXJhbD5XSVRIT1VU PC9saXRlcmFsPiB9IDxsaXRlcmFsPlVOSVFVRTwvbGl0ZXJhbD4gPG9wdGlvbmFsPiA8bGl0 ZXJhbD5LRVlTPC9saXRlcmFsPiA8L29wdGlvbmFsPiA8L29wdGlvbmFsPgorICAgICAgICA8 b3B0aW9uYWw+IDxsaXRlcmFsPlJFVFVSTklORzwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPmRh dGFfdHlwZTwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4gPGxpdGVyYWw+Rk9STUFUIEpTT048 L2xpdGVyYWw+IDxvcHRpb25hbD4gPGxpdGVyYWw+RU5DT0RJTkcgVVRGODwvbGl0ZXJhbD4g PC9vcHRpb25hbD4gPC9vcHRpb25hbD4gPC9vcHRpb25hbD4pCisgICAgICAgPC9wYXJhPgor ICAgICAgIDxwYXJhPgorICAgICAgICBDb25zdHJ1Y3RzIGEgSlNPTiBvYmplY3Qgb2YgYWxs IHRoZSBrZXkgdmFsdWUgcGFpcnMgZ2l2ZW4sCisgICAgICAgIG9yIGFuIGVtcHR5IG9iamVj dCBpZiBub25lIGFyZSBnaXZlbi4KKyAgICAgICAgPHJlcGxhY2VhYmxlPmtleV9leHByZXNz aW9uPC9yZXBsYWNlYWJsZT4gaXMgYSBzY2FsYXIgZXhwcmVzc2lvbgorICAgICAgICBkZWZp bmluZyB0aGUgPGFjcm9ueW0+SlNPTjwvYWNyb255bT4ga2V5LCB3aGljaCBpcworICAgICAg ICBjb252ZXJ0ZWQgdG8gdGhlIDx0eXBlPnRleHQ8L3R5cGU+IHR5cGUuCisgICAgICAgIEl0 IGNhbm5vdCBiZSA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiBub3IgY2FuIGl0CisgICAgICAg IGJlbG9uZyB0byBhIHR5cGUgdGhhdCBoYXMgYSBjYXN0IHRvIHRoZSA8dHlwZT5qc29uPC90 eXBlPi4KKyAgICAgICAgSWYgPGxpdGVyYWw+V0lUSCBVTklRVUU8L2xpdGVyYWw+IGlzIHNw ZWNpZmllZCwgdGhlcmUgbXVzdCBub3QKKyAgICAgICAgYmUgYW55IGR1cGxpY2F0ZSA8cmVw bGFjZWFibGU+a2V5X2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgSWYgPGxp dGVyYWw+QUJTRU5UIE9OIE5VTEw8L2xpdGVyYWw+IGlzIHNwZWNpZmllZCwgdGhlIGVudGly ZQorICAgICAgICBwYWlyIGlzIG9taXR0ZWQgaWYgdGhlIDxyZXBsYWNlYWJsZT52YWx1ZV9l eHByZXNzaW9uPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgaXMgPGxpdGVyYWw+TlVMTDwvbGl0 ZXJhbD4uCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICA8bGl0ZXJh bD5qc29uX29iamVjdCgnY29kZScgVkFMVUUgJ1AxMjMnLCAndGl0bGUnOiAnSmF3cycpPC9s aXRlcmFsPgorICAgICAgICA8cmV0dXJudmFsdWU+eyJjb2RlIiA6ICJQMTIzIiwgInRpdGxl IiA6ICJKYXdzIn08L3JldHVybnZhbHVlPgorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAg IDwvcm93PgorICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50 cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAgPGluZGV4dGVybT48 cHJpbWFyeT5qc29uX29iamVjdGFnZzwvcHJpbWFyeT48L2luZGV4dGVybT4KKyAgICAgICAg PGZ1bmN0aW9uPmpzb25fb2JqZWN0YWdnPC9mdW5jdGlvbj4gKAorICAgICAgICA8b3B0aW9u YWw+IHsgPHJlcGxhY2VhYmxlPmtleV9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4geyA8bGl0 ZXJhbD5WQUxVRTwvbGl0ZXJhbD4gfCAnOicgfSA8cmVwbGFjZWFibGU+dmFsdWVfZXhwcmVz c2lvbjwvcmVwbGFjZWFibGU+IH0gPC9vcHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiB7 IDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IHwgPGxpdGVyYWw+QUJTRU5UPC9saXRlcmFsPiB9 IDxsaXRlcmFsPk9OIE5VTEw8L2xpdGVyYWw+IDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRp b25hbD4geyA8bGl0ZXJhbD5XSVRIPC9saXRlcmFsPiB8IDxsaXRlcmFsPldJVEhPVVQ8L2xp dGVyYWw+IH0gPGxpdGVyYWw+VU5JUVVFPC9saXRlcmFsPiA8b3B0aW9uYWw+IDxsaXRlcmFs PktFWVM8L2xpdGVyYWw+IDwvb3B0aW9uYWw+IDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRp b25hbD4gPGxpdGVyYWw+UkVUVVJOSU5HPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+ZGF0YV90 eXBlPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5GT1JNQVQgSlNPTjwvbGl0 ZXJhbD4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5FTkNPRElORyBVVEY4PC9saXRlcmFsPiA8L29w dGlvbmFsPiA8L29wdGlvbmFsPiA8L29wdGlvbmFsPikKKyAgICAgICA8L3BhcmE+CisgICAg ICAgPHBhcmE+CisgICAgICAgIEJlaGF2ZXMgbGlrZSA8ZnVuY3Rpb24+anNvbl9vYmplY3Q8 L2Z1bmN0aW9uPiBhYm92ZSwgYnV0IGFzIGFuCisgICAgICAgIGFnZ3JlZ2F0ZSBmdW5jdGlv biwgc28gaXQgb25seSB0YWtlcyBvbmUKKyAgICAgICAgPHJlcGxhY2VhYmxlPmtleV9leHBy ZXNzaW9uPC9yZXBsYWNlYWJsZT4gYW5kIG9uZQorICAgICAgICA8cmVwbGFjZWFibGU+dmFs dWVfZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IHBhcmFtZXRlci4KKyAgICAgICA8L3BhcmE+ CisgICAgICAgPHBhcmE+CisgICAgICAgIDxsaXRlcmFsPlNFTEVDVCBqc29uX29iamVjdGFn ZyhrOnYpIEZST00gKFZBTFVFUyAoJ2EnOjp0ZXh0LGN1cnJlbnRfZGF0ZSksKCdiJyxjdXJy ZW50X2RhdGUgKyAxKSkgQVMgdChrLHYpPC9saXRlcmFsPgorICAgICAgICA8cmV0dXJudmFs dWU+eyAiYSIgOiAiMjAyMi0wNS0xMCIsICJiIiA6ICIyMDIyLTA1LTExIiB9PC9yZXR1cm52 YWx1ZT4KKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KKyAgICAgPHJvdz4K KyAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5j X3NpZ25hdHVyZSI+CisgICAgICAgIDxpbmRleHRlcm0+PHByaW1hcnk+anNvbl9hcnJheTwv cHJpbWFyeT48L2luZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9uPmpzb25fYXJyYXk8L2Z1 bmN0aW9uPiAoCisgICAgICAgIDxvcHRpb25hbD4geyA8cmVwbGFjZWFibGU+dmFsdWVfZXhw cmVzc2lvbjwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4gPGxpdGVyYWw+Rk9STUFUIEpTT048 L2xpdGVyYWw+IDwvb3B0aW9uYWw+IH0gPG9wdGlvbmFsPiwgLi4uPC9vcHRpb25hbD4gPC9v cHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiB7IDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+ IHwgPGxpdGVyYWw+QUJTRU5UPC9saXRlcmFsPiB9IDxsaXRlcmFsPk9OIE5VTEw8L2xpdGVy YWw+IDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4gPGxpdGVyYWw+UkVUVVJOSU5H PC9saXRlcmFsPiA8cmVwbGFjZWFibGU+ZGF0YV90eXBlPC9yZXBsYWNlYWJsZT4gPG9wdGlv bmFsPiA8bGl0ZXJhbD5GT1JNQVQgSlNPTjwvbGl0ZXJhbD4gPG9wdGlvbmFsPiA8bGl0ZXJh bD5FTkNPRElORyBVVEY4PC9saXRlcmFsPiA8L29wdGlvbmFsPiA8L29wdGlvbmFsPiA8L29w dGlvbmFsPikKKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmEgcm9sZT0iZnVuY19zaWdu YXR1cmUiPgorICAgICAgICA8ZnVuY3Rpb24+anNvbl9hcnJheTwvZnVuY3Rpb24+ICgKKyAg ICAgICAgPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+cXVlcnlfZXhwcmVzc2lvbjwvcmVwbGFj ZWFibGU+IDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4gPGxpdGVyYWw+UkVUVVJO SU5HPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+ZGF0YV90eXBlPC9yZXBsYWNlYWJsZT4gPG9w dGlvbmFsPiA8bGl0ZXJhbD5GT1JNQVQgSlNPTjwvbGl0ZXJhbD4gPG9wdGlvbmFsPiA8bGl0 ZXJhbD5FTkNPRElORyBVVEY4PC9saXRlcmFsPiA8L29wdGlvbmFsPiA8L29wdGlvbmFsPiA8 L29wdGlvbmFsPikKKyAgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBD b25zdHJ1Y3RzIGEgSlNPTiBhcnJheSBmcm9tIGVpdGhlciBhIHNlcmllcyBvZgorICAgICAg ICA8cmVwbGFjZWFibGU+dmFsdWVfZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IHBhcmFtZXRl cnMgb3IgZnJvbSB0aGUgcmVzdWx0cworICAgICAgICBvZiA8cmVwbGFjZWFibGU+cXVlcnlf ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+LAorICAgICAgICB3aGljaCBtdXN0IGJlIGEgU0VM RUNUIHF1ZXJ5IHJldHVybmluZyBhIHNpbmdsZSBjb2x1bW4uIElmCisgICAgICAgIDxsaXRl cmFsPkFCU0VOVCBPTiBOVUxMPC9saXRlcmFsPiBpcyBzcGVjaWZpZWQsIE5VTEwgdmFsdWVz IGFyZSBpZ25vcmVkLgorICAgICAgICBUaGlzIGlzIGFsd2F5cyB0aGUgY2FzZSBpZiBhCisg ICAgICAgIDxyZXBsYWNlYWJsZT5xdWVyeV9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gaXMg dXNlZC4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIDxsaXRlcmFs Pmpzb25fYXJyYXkoMSx0cnVlLGpzb24gJ3siYSI6bnVsbH0nKTwvbGl0ZXJhbD4KKyAgICAg ICAgPHJldHVybnZhbHVlPlsxLCB0cnVlLCB7ImEiOm51bGx9XTwvcmV0dXJudmFsdWU+Cisg ICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICA8bGl0ZXJhbD5qc29uX2Fy cmF5KFNFTEVDVCAqIEZST00gKFZBTFVFUygxKSwoMikpIHQpPC9saXRlcmFsPgorICAgICAg ICA8cmV0dXJudmFsdWU+WzEsIDJdPC9yZXR1cm52YWx1ZT4KKyAgICAgIDwvcGFyYT48L2Vu dHJ5PgorICAgICA8L3Jvdz4KKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xlPSJmdW5j X3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIDxp bmRleHRlcm0+PHByaW1hcnk+anNvbl9hcnJheWFnZzwvcHJpbWFyeT48L2luZGV4dGVybT4K KyAgICAgICAgPGZ1bmN0aW9uPmpzb25fYXJyYXlhZ2c8L2Z1bmN0aW9uPiAoCisgICAgICAg IDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPnZhbHVlX2V4cHJlc3Npb248L3JlcGxhY2VhYmxl PiA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IDxsaXRlcmFsPk9SREVSIEJZPC9s aXRlcmFsPiA8cmVwbGFjZWFibGU+c29ydF9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gPC9v cHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiB7IDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+ IHwgPGxpdGVyYWw+QUJTRU5UPC9saXRlcmFsPiB9IDxsaXRlcmFsPk9OIE5VTEw8L2xpdGVy YWw+IDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4gPGxpdGVyYWw+UkVUVVJOSU5H PC9saXRlcmFsPiA8cmVwbGFjZWFibGU+ZGF0YV90eXBlPC9yZXBsYWNlYWJsZT4gPG9wdGlv bmFsPiA8bGl0ZXJhbD5GT1JNQVQgSlNPTjwvbGl0ZXJhbD4gPG9wdGlvbmFsPiA8bGl0ZXJh bD5FTkNPRElORyBVVEY4PC9saXRlcmFsPiA8L29wdGlvbmFsPiA8L29wdGlvbmFsPiA8L29w dGlvbmFsPikKKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIEJlaGF2 ZXMgaW4gdGhlIHNhbWUgd2F5IGFzIDxmdW5jdGlvbj5qc29uX2FycmF5PC9mdW5jdGlvbj4K KyAgICAgICAgYnV0IGFzIGFuIGFnZ3JlZ2F0ZSBmdW5jdGlvbiBzbyBpdCBvbmx5IHRha2Vz IG9uZQorICAgICAgICA8cmVwbGFjZWFibGU+dmFsdWVfZXhwcmVzc2lvbjwvcmVwbGFjZWFi bGU+IHBhcmFtZXRlci4KKyAgICAgICAgSWYgPGxpdGVyYWw+QUJTRU5UIE9OIE5VTEw8L2xp dGVyYWw+IGlzIHNwZWNpZmllZCwgYW55IE5VTEwKKyAgICAgICAgdmFsdWVzIGFyZSBvbWl0 dGVkLgorICAgICAgICBJZiA8bGl0ZXJhbD5PUkRFUiBCWTwvbGl0ZXJhbD4gaXMgc3BlY2lm aWVkLCB0aGUgZWxlbWVudHMgd2lsbAorICAgICAgICBhcHBlYXIgaW4gdGhlIGFycmF5IGlu IHRoYXQgb3JkZXIgcmF0aGVyIHRoYW4gaW4gdGhlIGlucHV0IG9yZGVyLgorICAgICAgIDwv cGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgPGxpdGVyYWw+U0VMRUNUIGpzb25fYXJy YXlhZ2codikgRlJPTSAoVkFMVUVTKDIpLCgxKSkgdCh2KTwvbGl0ZXJhbD4KKyAgICAgICAg PHJldHVybnZhbHVlPlsyLCAxXTwvcmV0dXJudmFsdWU+CisgICAgICAgPC9wYXJhPjwvZW50 cnk+CisgICAgICA8L3Jvdz4KKyAgICAgPC90Ym9keT4KKyAgICA8L3Rncm91cD4KKyAgIDwv dGFibGU+CisgIDwvc2VjdDI+CiAgPC9zZWN0MT4KIAogIDxzZWN0MSBpZD0iZnVuY3Rpb25z LXNlcXVlbmNlIj4KQEAgLTIwMDQ0LDkgKzIwMjQ3LDk3IEBAIFNFTEVDVCBOVUxMSUYodmFs dWUsICcobm9uZSknKSAuLi4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAg ICAgIENvbGxlY3RzIGFsbCB0aGUga2V5L3ZhbHVlIHBhaXJzIGludG8gYSBKU09OIG9iamVj dC4gIEtleSBhcmd1bWVudHMKLSAgICAgICAgYXJlIGNvZXJjZWQgdG8gdGV4dDsgdmFsdWUg YXJndW1lbnRzIGFyZSBjb252ZXJ0ZWQgYXMKLSAgICAgICAgcGVyIDxmdW5jdGlvbj50b19q c29uPC9mdW5jdGlvbj4gb3IgPGZ1bmN0aW9uPnRvX2pzb25iPC9mdW5jdGlvbj4uCi0gICAg ICAgIFZhbHVlcyBjYW4gYmUgbnVsbCwgYnV0IG5vdCBrZXlzLgorICAgICAgICBhcmUgY29l cmNlZCB0byB0ZXh0OyB2YWx1ZSBhcmd1bWVudHMgYXJlIGNvbnZlcnRlZCBhcyBwZXIKKyAg ICAgICAgPGZ1bmN0aW9uPnRvX2pzb248L2Z1bmN0aW9uPiBvciA8ZnVuY3Rpb24+dG9fanNv bmI8L2Z1bmN0aW9uPgorICAgICAgICBWYWx1ZXMgY2FuIGJlIG51bGwsIGJ1dCBrZXlzIGNh bm5vdC4KKyAgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+Tm88L2VudHJ5 PgorICAgICAgPC9yb3c+CisKKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5IHJvbGU9ImZ1 bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAg PGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5Pmpzb25fb2JqZWN0X2FnZ19zdHJpY3Q8 L3ByaW1hcnk+CisgICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+anNv bl9vYmplY3RfYWdnX3N0cmljdDwvZnVuY3Rpb24+ICgKKyAgICAgICAgIDxwYXJhbWV0ZXI+ a2V5PC9wYXJhbWV0ZXI+IDx0eXBlPiJhbnkiPC90eXBlPiwKKyAgICAgICAgIDxwYXJhbWV0 ZXI+dmFsdWU8L3BhcmFtZXRlcj4gPHR5cGU+ImFueSI8L3R5cGU+ICkKKyAgICAgICAgPHJl dHVybnZhbHVlPmpzb248L3JldHVybnZhbHVlPgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8 cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIDxpbmRleHRlcm0+CisgICAg ICAgICA8cHJpbWFyeT5qc29uYl9vYmplY3RfYWdnX3N0cmljdDwvcHJpbWFyeT4KKyAgICAg ICAgPC9pbmRleHRlcm0+CisgICAgICAgIDxmdW5jdGlvbj5qc29uYl9vYmplY3RfYWdnX3N0 cmljdDwvZnVuY3Rpb24+ICgKKyAgICAgICAgIDxwYXJhbWV0ZXI+a2V5PC9wYXJhbWV0ZXI+ IDx0eXBlPiJhbnkiPC90eXBlPiwKKyAgICAgICAgIDxwYXJhbWV0ZXI+dmFsdWU8L3BhcmFt ZXRlcj4gPHR5cGU+ImFueSI8L3R5cGU+ICkKKyAgICAgICAgPHJldHVybnZhbHVlPmpzb25i PC9yZXR1cm52YWx1ZT4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAg IENvbGxlY3RzIGFsbCB0aGUga2V5L3ZhbHVlIHBhaXJzIGludG8gYSBKU09OIG9iamVjdC4g IEtleSBhcmd1bWVudHMKKyAgICAgICAgYXJlIGNvZXJjZWQgdG8gdGV4dDsgdmFsdWUgYXJn dW1lbnRzIGFyZSBjb252ZXJ0ZWQgYXMgcGVyCisgICAgICAgIDxmdW5jdGlvbj50b19qc29u PC9mdW5jdGlvbj4gb3IgPGZ1bmN0aW9uPnRvX2pzb25iPC9mdW5jdGlvbj4uCisgICAgICAg IFRoZSA8cGFyYW1ldGVyPmtleTwvcGFyYW1ldGVyPiBjYW4gbm90IGJlIG51bGwuIElmIHRo ZQorICAgICAgICA8cGFyYW1ldGVyPnZhbHVlPC9wYXJhbWV0ZXI+IGlzIG51bGwgdGhlbiB0 aGUgZW50cnkgaXMgc2tpcHBlZCwKKyAgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgICA8 ZW50cnk+Tm88L2VudHJ5PgorICAgICAgPC9yb3c+CisKKyAgICAgIDxyb3c+CisgICAgICAg PGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0 dXJlIj4KKyAgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5Pmpzb25fb2Jq ZWN0X2FnZ191bmlxdWU8L3ByaW1hcnk+CisgICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAg ICA8ZnVuY3Rpb24+anNvbl9vYmplY3RfYWdnX3VuaXF1ZTwvZnVuY3Rpb24+ICgKKyAgICAg ICAgIDxwYXJhbWV0ZXI+a2V5PC9wYXJhbWV0ZXI+IDx0eXBlPiJhbnkiPC90eXBlPiwKKyAg ICAgICAgIDxwYXJhbWV0ZXI+dmFsdWU8L3BhcmFtZXRlcj4gPHR5cGU+ImFueSI8L3R5cGU+ ICkKKyAgICAgICAgPHJldHVybnZhbHVlPmpzb248L3JldHVybnZhbHVlPgorICAgICAgIDwv cGFyYT4KKyAgICAgICA8cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIDxp bmRleHRlcm0+CisgICAgICAgICA8cHJpbWFyeT5qc29uYl9vYmplY3RfYWdnX3VuaXF1ZTwv cHJpbWFyeT4KKyAgICAgICAgPC9pbmRleHRlcm0+CisgICAgICAgIDxmdW5jdGlvbj5qc29u Yl9vYmplY3RfYWdnX3VuaXF1ZTwvZnVuY3Rpb24+ICgKKyAgICAgICAgIDxwYXJhbWV0ZXI+ a2V5PC9wYXJhbWV0ZXI+IDx0eXBlPiJhbnkiPC90eXBlPiwKKyAgICAgICAgIDxwYXJhbWV0 ZXI+dmFsdWU8L3BhcmFtZXRlcj4gPHR5cGU+ImFueSI8L3R5cGU+ICkKKyAgICAgICAgPHJl dHVybnZhbHVlPmpzb25iPC9yZXR1cm52YWx1ZT4KKyAgICAgICA8L3BhcmE+CisgICAgICAg PHBhcmE+CisgICAgICAgIENvbGxlY3RzIGFsbCB0aGUga2V5L3ZhbHVlIHBhaXJzIGludG8g YSBKU09OIG9iamVjdC4gIEtleSBhcmd1bWVudHMKKyAgICAgICAgYXJlIGNvZXJjZWQgdG8g dGV4dDsgdmFsdWUgYXJndW1lbnRzIGFyZSBjb252ZXJ0ZWQgYXMgcGVyCisgICAgICAgIDxm dW5jdGlvbj50b19qc29uPC9mdW5jdGlvbj4gb3IgPGZ1bmN0aW9uPnRvX2pzb25iPC9mdW5j dGlvbj4uCisgICAgICAgIFZhbHVlcyBjYW4gYmUgbnVsbCwgYnV0IGtleXMgY2Fubm90Lgor ICAgICAgICBJZiB0aGVyZSBpcyBhIGR1cGxpY2F0ZSBrZXkgYW4gZXJyb3IgaXMgdGhyb3du LgorICAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICAgIDxlbnRyeT5ObzwvZW50cnk+Cisg ICAgICA8L3Jvdz4KKworICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnkgcm9sZT0iZnVuY190 YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAgICA8aW5k ZXh0ZXJtPgorICAgICAgICAgPHByaW1hcnk+anNvbl9vYmplY3RfYWdnX3VuaXF1ZV9zdHJp Y3Q8L3ByaW1hcnk+CisgICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+ anNvbl9vYmplY3RfYWdnX3VuaXF1ZV9zdHJpY3Q8L2Z1bmN0aW9uPiAoCisgICAgICAgICA8 cGFyYW1ldGVyPmtleTwvcGFyYW1ldGVyPiA8dHlwZT4iYW55IjwvdHlwZT4sCisgICAgICAg ICA8cGFyYW1ldGVyPnZhbHVlPC9wYXJhbWV0ZXI+IDx0eXBlPiJhbnkiPC90eXBlPiApCisg ICAgICAgIDxyZXR1cm52YWx1ZT5qc29uPC9yZXR1cm52YWx1ZT4KKyAgICAgICA8L3BhcmE+ CisgICAgICAgPHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAgICA8aW5kZXh0 ZXJtPgorICAgICAgICAgPHByaW1hcnk+anNvbmJfb2JqZWN0X2FnZ191bmlxdWVfc3RyaWN0 PC9wcmltYXJ5PgorICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9uPmpz b25iX29iamVjdF9hZ2dfdW5pcXVlX3N0cmljdDwvZnVuY3Rpb24+ICgKKyAgICAgICAgIDxw YXJhbWV0ZXI+a2V5PC9wYXJhbWV0ZXI+IDx0eXBlPiJhbnkiPC90eXBlPiwKKyAgICAgICAg IDxwYXJhbWV0ZXI+dmFsdWU8L3BhcmFtZXRlcj4gPHR5cGU+ImFueSI8L3R5cGU+ICkKKyAg ICAgICAgPHJldHVybnZhbHVlPmpzb25iPC9yZXR1cm52YWx1ZT4KKyAgICAgICA8L3BhcmE+ CisgICAgICAgPHBhcmE+CisgICAgICAgIENvbGxlY3RzIGFsbCB0aGUga2V5L3ZhbHVlIHBh aXJzIGludG8gYSBKU09OIG9iamVjdC4gIEtleSBhcmd1bWVudHMKKyAgICAgICAgYXJlIGNv ZXJjZWQgdG8gdGV4dDsgdmFsdWUgYXJndW1lbnRzIGFyZSBjb252ZXJ0ZWQgYXMgcGVyCisg ICAgICAgIDxmdW5jdGlvbj50b19qc29uPC9mdW5jdGlvbj4gb3IgPGZ1bmN0aW9uPnRvX2pz b25iPC9mdW5jdGlvbj4uCisgICAgICAgIFRoZSA8cGFyYW1ldGVyPmtleTwvcGFyYW1ldGVy PiBjYW4gbm90IGJlIG51bGwuIElmIHRoZQorICAgICAgICA8cGFyYW1ldGVyPnZhbHVlPC9w YXJhbWV0ZXI+IGlzIG51bGwgdGhlbiB0aGUgZW50cnkgaXMgc2tpcHBlZCwKKyAgICAgICAg SWYgdGhlcmUgaXMgYSBkdXBsaWNhdGUga2V5IGFuIGVycm9yIGlzIHRocm93bi4KICAgICAg ICA8L3BhcmE+PC9lbnRyeT4KICAgICAgICA8ZW50cnk+Tm88L2VudHJ5PgogICAgICAgPC9y b3c+CkBAIC0yMDEyOSw2ICsyMDQyMCwyOSBAQCBTRUxFQ1QgTlVMTElGKHZhbHVlLCAnKG5v bmUpJykgLi4uCiAgICAgICAgPGVudHJ5Pk5vPC9lbnRyeT4KICAgICAgIDwvcm93PgogCisg ICAgICA8cm93PgorICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFy YSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIDxpbmRleHRlcm0+CisgICAgICAg ICA8cHJpbWFyeT5qc29uX2FnZ19zdHJpY3Q8L3ByaW1hcnk+CisgICAgICAgIDwvaW5kZXh0 ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+anNvbl9hZ2dfc3RyaWN0PC9mdW5jdGlvbj4gKCA8 dHlwZT5hbnllbGVtZW50PC90eXBlPiApCisgICAgICAgIDxyZXR1cm52YWx1ZT5qc29uPC9y ZXR1cm52YWx1ZT4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmEgcm9sZT0iZnVuY19z aWduYXR1cmUiPgorICAgICAgICA8aW5kZXh0ZXJtPgorICAgICAgICAgPHByaW1hcnk+anNv bmJfYWdnX3N0cmljdDwvcHJpbWFyeT4KKyAgICAgICAgPC9pbmRleHRlcm0+CisgICAgICAg IDxmdW5jdGlvbj5qc29uYl9hZ2dfc3RyaWN0PC9mdW5jdGlvbj4gKCA8dHlwZT5hbnllbGVt ZW50PC90eXBlPiApCisgICAgICAgIDxyZXR1cm52YWx1ZT5qc29uYjwvcmV0dXJudmFsdWU+ CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBDb2xsZWN0cyBhbGwg dGhlIGlucHV0IHZhbHVlcywgc2tpcHBpbmcgbnVsbHMsIGludG8gYSBKU09OIGFycmF5Lgor ICAgICAgICBWYWx1ZXMgYXJlIGNvbnZlcnRlZCB0byBKU09OIGFzIHBlciA8ZnVuY3Rpb24+ dG9fanNvbjwvZnVuY3Rpb24+CisgICAgICAgIG9yIDxmdW5jdGlvbj50b19qc29uYjwvZnVu Y3Rpb24+LgorICAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICAgIDxlbnRyeT5ObzwvZW50 cnk+CisgICAgICA8L3Jvdz4KKwogICAgICAgPHJvdz4KICAgICAgICA8ZW50cnkgcm9sZT0i ZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgogICAgICAg ICA8aW5kZXh0ZXJtPgpAQCAtMjAyMjQsNyArMjA1MzgsMTIgQEAgU0VMRUNUIE5VTExJRih2 YWx1ZSwgJyhub25lKScpIC4uLgogICA8cGFyYT4KICAgIFRoZSBhZ2dyZWdhdGUgZnVuY3Rp b25zIDxmdW5jdGlvbj5hcnJheV9hZ2c8L2Z1bmN0aW9uPiwKICAgIDxmdW5jdGlvbj5qc29u X2FnZzwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+anNvbmJfYWdnPC9mdW5jdGlvbj4sCisgICA8 ZnVuY3Rpb24+anNvbl9hZ2dfc3RyaWN0PC9mdW5jdGlvbj4sIDxmdW5jdGlvbj5qc29uYl9h Z2dfc3RyaWN0PC9mdW5jdGlvbj4sCiAgICA8ZnVuY3Rpb24+anNvbl9vYmplY3RfYWdnPC9m dW5jdGlvbj4sIDxmdW5jdGlvbj5qc29uYl9vYmplY3RfYWdnPC9mdW5jdGlvbj4sCisgICA8 ZnVuY3Rpb24+anNvbl9vYmplY3RfYWdnX3N0cmljdDwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+ anNvbmJfb2JqZWN0X2FnZ19zdHJpY3Q8L2Z1bmN0aW9uPiwKKyAgIDxmdW5jdGlvbj5qc29u X29iamVjdF9hZ2dfdW5pcXVlPC9mdW5jdGlvbj4sIDxmdW5jdGlvbj5qc29uYl9vYmplY3Rf YWdnX3VuaXF1ZTwvZnVuY3Rpb24+LAorICAgPGZ1bmN0aW9uPmpzb25fb2JqZWN0X2FnZ191 bmlxdWVfc3RyaWN0PC9mdW5jdGlvbj4sCisgICA8ZnVuY3Rpb24+anNvbmJfb2JqZWN0X2Fn Z191bmlxdWVfc3RyaWN0PC9mdW5jdGlvbj4sCiAgICA8ZnVuY3Rpb24+c3RyaW5nX2FnZzwv ZnVuY3Rpb24+LAogICAgYW5kIDxmdW5jdGlvbj54bWxhZ2c8L2Z1bmN0aW9uPiwgYXMgd2Vs bCBhcyBzaW1pbGFyIHVzZXItZGVmaW5lZAogICAgYWdncmVnYXRlIGZ1bmN0aW9ucywgcHJv ZHVjZSBtZWFuaW5nZnVsbHkgZGlmZmVyZW50IHJlc3VsdCB2YWx1ZXMKQEAgLTIwMjQ0LDYg KzIwNTYzLDEzIEBAIFNFTEVDVCB4bWxhZ2coeCkgRlJPTSAoU0VMRUNUIHggRlJPTSB0ZXN0 IE9SREVSIEJZIHkgREVTQykgQVMgdGFiOwogICAgc3VicXVlcnkncyBvdXRwdXQgdG8gYmUg cmVvcmRlcmVkIGJlZm9yZSB0aGUgYWdncmVnYXRlIGlzIGNvbXB1dGVkLgogICA8L3BhcmE+ CiAKKyAgPG5vdGU+CisgICA8cGFyYT4KKyAgICBJbiBhZGRpdGlvbiB0byB0aGUgSlNPTiBh Z2dyZWdhdGVzIHNob3duIGhlcmUsIHNlZSB0aGUgPGZ1bmN0aW9uPmpzb25fb2JqZWN0YWdn PC9mdW5jdGlvbj4KKyAgICBhbmQgPGZ1bmN0aW9uPmpzb25fYXJyYXlhZ2c8L2Z1bmN0aW9u PiBjb25zdHJ1Y3RvcnMgaW4gPHhyZWYgbGlua2VuZD0iZnVuY3Rpb25zLXNxbGpzb24iLz4u CisgICA8L3BhcmE+CisgIDwvbm90ZT4KKwogICA8bm90ZT4KICAgICA8aW5kZXh0ZXJtPgog ICAgICAgPHByaW1hcnk+QU5ZPC9wcmltYXJ5PgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY0V4cHIuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMK aW5kZXggYzYxZjIzYzZjMS4uMmJlYTA1ZmIxMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY0V4cHIuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhw ci5jCkBAIC0yNDA0LDYgKzI0MDQsOTcgQEAgRXhlY0luaXRFeHByUmVjKEV4cHIgKm5vZGUs IEV4cHJTdGF0ZSAqc3RhdGUsCiAJCQkJYnJlYWs7CiAJCQl9CiAKKwkJY2FzZSBUX0pzb25W YWx1ZUV4cHI6CisJCQl7CisJCQkJSnNvblZhbHVlRXhwciAqanZlID0gKEpzb25WYWx1ZUV4 cHIgKikgbm9kZTsKKworCQkJCUV4ZWNJbml0RXhwclJlYyhqdmUtPnJhd19leHByLCBzdGF0 ZSwgcmVzdiwgcmVzbnVsbCk7CisKKwkJCQlpZiAoanZlLT5mb3JtYXR0ZWRfZXhwcikKKwkJ CQl7CisJCQkJCURhdHVtCSAgICppbm5lcm1vc3RfY2FzZXZhbCA9IHN0YXRlLT5pbm5lcm1v c3RfY2FzZXZhbDsKKwkJCQkJYm9vbAkgICAqaW5uZXJtb3N0X2lzbnVsbCA9IHN0YXRlLT5p bm5lcm1vc3RfY2FzZW51bGw7CisKKwkJCQkJc3RhdGUtPmlubmVybW9zdF9jYXNldmFsID0g cmVzdjsKKwkJCQkJc3RhdGUtPmlubmVybW9zdF9jYXNlbnVsbCA9IHJlc251bGw7CisKKwkJ CQkJRXhlY0luaXRFeHByUmVjKGp2ZS0+Zm9ybWF0dGVkX2V4cHIsIHN0YXRlLCByZXN2LCBy ZXNudWxsKTsKKworCQkJCQlzdGF0ZS0+aW5uZXJtb3N0X2Nhc2V2YWwgPSBpbm5lcm1vc3Rf Y2FzZXZhbDsKKwkJCQkJc3RhdGUtPmlubmVybW9zdF9jYXNlbnVsbCA9IGlubmVybW9zdF9p c251bGw7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCisJCWNhc2UgVF9Kc29uQ29uc3Ry dWN0b3JFeHByOgorCQkJeworCQkJCUpzb25Db25zdHJ1Y3RvckV4cHIgKmN0b3IgPSAoSnNv bkNvbnN0cnVjdG9yRXhwciAqKSBub2RlOworCQkJCUxpc3QJICAgKmFyZ3MgPSBjdG9yLT5h cmdzOworCQkJCUxpc3RDZWxsICAgKmxjOworCQkJCWludAkJCW5hcmdzID0gbGlzdF9sZW5n dGgoYXJncyk7CisJCQkJaW50CQkJYXJnbm8gPSAwOworCisJCQkJaWYgKGN0b3ItPmZ1bmMp CisJCQkJeworCQkJCQlFeGVjSW5pdEV4cHJSZWMoY3Rvci0+ZnVuYywgc3RhdGUsIHJlc3Ys IHJlc251bGwpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlKc29uQ29uc3RydWN0 b3JFeHByU3RhdGUgKmpjc3RhdGU7CisKKwkJCQkJamNzdGF0ZSA9IHBhbGxvYzAoc2l6ZW9m KEpzb25Db25zdHJ1Y3RvckV4cHJTdGF0ZSkpOworCisJCQkJCXNjcmF0Y2gub3Bjb2RlID0g RUVPUF9KU09OX0NPTlNUUlVDVE9SOworCQkJCQlzY3JhdGNoLmQuanNvbl9jb25zdHJ1Y3Rv ci5qY3N0YXRlID0gamNzdGF0ZTsKKworCQkJCQlqY3N0YXRlLT5jb25zdHJ1Y3RvciA9IGN0 b3I7CisJCQkJCWpjc3RhdGUtPmFyZ192YWx1ZXMgPSBwYWxsb2Moc2l6ZW9mKERhdHVtKSAq IG5hcmdzKTsKKwkJCQkJamNzdGF0ZS0+YXJnX251bGxzID0gcGFsbG9jKHNpemVvZihib29s KSAqIG5hcmdzKTsKKwkJCQkJamNzdGF0ZS0+YXJnX3R5cGVzID0gcGFsbG9jKHNpemVvZihP aWQpICogbmFyZ3MpOworCQkJCQlqY3N0YXRlLT5uYXJncyA9IG5hcmdzOworCisJCQkJCWZv cmVhY2gobGMsIGFyZ3MpCisJCQkJCXsKKwkJCQkJCUV4cHIJICAgKmFyZyA9IChFeHByICop IGxmaXJzdChsYyk7CisKKwkJCQkJCWpjc3RhdGUtPmFyZ190eXBlc1thcmdub10gPSBleHBy VHlwZSgoTm9kZSAqKSBhcmcpOworCisJCQkJCQlpZiAoSXNBKGFyZywgQ29uc3QpKQorCQkJ CQkJeworCQkJCQkJCS8qIERvbid0IGV2YWx1YXRlIGNvbnN0IGFyZ3VtZW50cyBldmVyeSBy b3VuZCAqLworCQkJCQkJCUNvbnN0CSAgICpjb24gPSAoQ29uc3QgKikgYXJnOworCisJCQkJ CQkJamNzdGF0ZS0+YXJnX3ZhbHVlc1thcmdub10gPSBjb24tPmNvbnN0dmFsdWU7CisJCQkJ CQkJamNzdGF0ZS0+YXJnX251bGxzW2FyZ25vXSA9IGNvbi0+Y29uc3Rpc251bGw7CisJCQkJ CQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJRXhlY0luaXRFeHByUmVjKGFyZywg c3RhdGUsCisJCQkJCQkJCQkJCSZqY3N0YXRlLT5hcmdfdmFsdWVzW2FyZ25vXSwKKwkJCQkJ CQkJCQkJJmpjc3RhdGUtPmFyZ19udWxsc1thcmdub10pOworCQkJCQkJfQorCQkJCQkJYXJn bm8rKzsKKwkJCQkJfQorCisJCQkJCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsICZzY3JhdGNo KTsKKwkJCQl9CisKKwkJCQlpZiAoY3Rvci0+Y29lcmNpb24pCisJCQkJeworCQkJCQlEYXR1 bQkgICAqaW5uZXJtb3N0X2Nhc2V2YWwgPSBzdGF0ZS0+aW5uZXJtb3N0X2Nhc2V2YWw7CisJ CQkJCWJvb2wJICAgKmlubmVybW9zdF9pc251bGwgPSBzdGF0ZS0+aW5uZXJtb3N0X2Nhc2Vu dWxsOworCisJCQkJCXN0YXRlLT5pbm5lcm1vc3RfY2FzZXZhbCA9IHJlc3Y7CisJCQkJCXN0 YXRlLT5pbm5lcm1vc3RfY2FzZW51bGwgPSByZXNudWxsOworCisJCQkJCUV4ZWNJbml0RXhw clJlYyhjdG9yLT5jb2VyY2lvbiwgc3RhdGUsIHJlc3YsIHJlc251bGwpOworCisJCQkJCXN0 YXRlLT5pbm5lcm1vc3RfY2FzZXZhbCA9IGlubmVybW9zdF9jYXNldmFsOworCQkJCQlzdGF0 ZS0+aW5uZXJtb3N0X2Nhc2VudWxsID0gaW5uZXJtb3N0X2lzbnVsbDsKKwkJCQl9CisJCQl9 CisJCQlicmVhazsKKwogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXpl ZCBub2RlIHR5cGU6ICVkIiwKIAkJCQkgKGludCkgbm9kZVRhZyhub2RlKSk7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYwppbmRleCA5Y2I5NjI1Y2U5Li40NDBiNzEz OTk1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKQEAgLTcxLDYg KzcxLDggQEAKICNpbmNsdWRlICJ1dGlscy9kYXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvZGF0 dW0uaCIKICNpbmNsdWRlICJ1dGlscy9leHBhbmRlZHJlY29yZC5oIgorI2luY2x1ZGUgInV0 aWxzL2pzb24uaCIKKyNpbmNsdWRlICJ1dGlscy9qc29uYi5oIgogI2luY2x1ZGUgInV0aWxz L2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAi dXRpbHMvdGltZXN0YW1wLmgiCkBAIC00NzgsNiArNDgwLDcgQEAgRXhlY0ludGVycEV4cHIo RXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LCBib29sICppc251bGwp CiAJCSYmQ0FTRV9FRU9QX0dST1VQSU5HX0ZVTkMsCiAJCSYmQ0FTRV9FRU9QX1dJTkRPV19G VU5DLAogCQkmJkNBU0VfRUVPUF9TVUJQTEFOLAorCQkmJkNBU0VfRUVPUF9KU09OX0NPTlNU UlVDVE9SLAogCQkmJkNBU0VfRUVPUF9BR0dfU1RSSUNUX0RFU0VSSUFMSVpFLAogCQkmJkNB U0VfRUVPUF9BR0dfREVTRVJJQUxJWkUsCiAJCSYmQ0FTRV9FRU9QX0FHR19TVFJJQ1RfSU5Q VVRfQ0hFQ0tfQVJHUywKQEAgLTE4MDAsNyArMTgwMywxMyBAQCBFeGVjSW50ZXJwRXhwcihF eHByU3RhdGUgKnN0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsIGJvb2wgKmlzbnVsbCkK IAkJewogCQkJLyogdG9vIGNvbXBsZXggZm9yIGFuIGlubGluZSBpbXBsZW1lbnRhdGlvbiAq LwogCQkJRXhlY0V2YWxBZ2dPcmRlcmVkVHJhbnNUdXBsZShzdGF0ZSwgb3AsIGVjb250ZXh0 KTsKKwkJCUVFT19ORVhUKCk7CisJCX0KIAorCQlFRU9fQ0FTRShFRU9QX0pTT05fQ09OU1RS VUNUT1IpCisJCXsKKwkJCS8qIHRvbyBjb21wbGV4IGZvciBhbiBpbmxpbmUgaW1wbGVtZW50 YXRpb24gKi8KKwkJCUV4ZWNFdmFsSnNvbkNvbnN0cnVjdG9yKHN0YXRlLCBvcCwgZWNvbnRl eHQpOwogCQkJRUVPX05FWFQoKTsKIAkJfQogCkBAIC00NDMyLDMgKzQ0NDEsNDMgQEAgRXhl Y0FnZ1BsYWluVHJhbnNCeVJlZihBZ2dTdGF0ZSAqYWdnc3RhdGUsIEFnZ1N0YXRlUGVyVHJh bnMgcGVydHJhbnMsCiAKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ29udGV4dCk7CiB9 CisKKy8qCisgKiBFdmFsdWF0ZSBhIEpTT04gY29uc3RydWN0b3IgZXhwcmVzc2lvbi4KKyAq Lwordm9pZAorRXhlY0V2YWxKc29uQ29uc3RydWN0b3IoRXhwclN0YXRlICpzdGF0ZSwgRXhw ckV2YWxTdGVwICpvcCwKKwkJCQkJCUV4cHJDb250ZXh0ICplY29udGV4dCkKK3sKKwlEYXR1 bQkJcmVzOworCUpzb25Db25zdHJ1Y3RvckV4cHJTdGF0ZSAqamNzdGF0ZSA9IG9wLT5kLmpz b25fY29uc3RydWN0b3IuamNzdGF0ZTsKKwlKc29uQ29uc3RydWN0b3JFeHByICpjdG9yID0g amNzdGF0ZS0+Y29uc3RydWN0b3I7CisJYm9vbAkJaXNfanNvbmIgPSBjdG9yLT5yZXR1cm5p bmctPmZvcm1hdC0+Zm9ybWF0X3R5cGUgPT0gSlNfRk9STUFUX0pTT05COworCWJvb2wJCWlz bnVsbCA9IGZhbHNlOworCisJaWYgKGN0b3ItPnR5cGUgPT0gSlNDVE9SX0pTT05fQVJSQVkp CisJCXJlcyA9IChpc19qc29uYiA/CisJCQkgICBqc29uYl9idWlsZF9hcnJheV93b3JrZXIg OgorCQkJICAganNvbl9idWlsZF9hcnJheV93b3JrZXIpIChqY3N0YXRlLT5uYXJncywKKwkJ CQkJCQkJCQkgamNzdGF0ZS0+YXJnX3ZhbHVlcywKKwkJCQkJCQkJCQkgamNzdGF0ZS0+YXJn X251bGxzLAorCQkJCQkJCQkJCSBqY3N0YXRlLT5hcmdfdHlwZXMsCisJCQkJCQkJCQkJIGpj c3RhdGUtPmNvbnN0cnVjdG9yLT5hYnNlbnRfb25fbnVsbCk7CisJZWxzZSBpZiAoY3Rvci0+ dHlwZSA9PSBKU0NUT1JfSlNPTl9PQkpFQ1QpCisJCXJlcyA9IChpc19qc29uYiA/CisJCQkg ICBqc29uYl9idWlsZF9vYmplY3Rfd29ya2VyIDoKKwkJCSAgIGpzb25fYnVpbGRfb2JqZWN0 X3dvcmtlcikgKGpjc3RhdGUtPm5hcmdzLAorCQkJCQkJCQkJCSAgamNzdGF0ZS0+YXJnX3Zh bHVlcywKKwkJCQkJCQkJCQkgIGpjc3RhdGUtPmFyZ19udWxscywKKwkJCQkJCQkJCQkgIGpj c3RhdGUtPmFyZ190eXBlcywKKwkJCQkJCQkJCQkgIGpjc3RhdGUtPmNvbnN0cnVjdG9yLT5h YnNlbnRfb25fbnVsbCwKKwkJCQkJCQkJCQkgIGpjc3RhdGUtPmNvbnN0cnVjdG9yLT51bmlx dWUpOworCWVsc2UKKwl7CisJCXJlcyA9IChEYXR1bSkgMDsKKwkJZWxvZyhFUlJPUiwgImlu dmFsaWQgSnNvbkNvbnN0cnVjdG9yRXhwciB0eXBlICVkIiwgY3Rvci0+dHlwZSk7CisJfQor CisJKm9wLT5yZXN2YWx1ZSA9IHJlczsKKwkqb3AtPnJlc251bGwgPSBpc251bGw7Cit9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYyBiL3NyYy9i YWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jCmluZGV4IDFjNzIyYzc5NTUuLmY3MjBm ZDU3MWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5j CisrKyBiL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jCkBAIC0yMzg5LDYg KzIzODksMTIgQEAgbGx2bV9jb21waWxlX2V4cHIoRXhwclN0YXRlICpzdGF0ZSkKIAkJCQlM TFZNQnVpbGRCcihiLCBvcGJsb2Nrc1tvcG5vICsgMV0pOwogCQkJCWJyZWFrOwogCisJCQlj YXNlIEVFT1BfSlNPTl9DT05TVFJVQ1RPUjoKKwkJCQlidWlsZF9FdmFsWEZ1bmMoYiwgbW9k LCAiRXhlY0V2YWxKc29uQ29uc3RydWN0b3IiLAorCQkJCQkJCQl2X3N0YXRlLCBvcCwgdl9l Y29udGV4dCk7CisJCQkJTExWTUJ1aWxkQnIoYiwgb3BibG9ja3Nbb3BubyArIDFdKTsKKwkJ CQlicmVhazsKKwogCQkJY2FzZSBFRU9QX0xBU1Q6CiAJCQkJQXNzZXJ0KGZhbHNlKTsKIAkJ CQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlw ZXMuYyBiL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlwZXMuYwppbmRleCA4NzZm YjY0MDI5Li4zMTVlZWIxMTcyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9qaXQvbGx2bS9s bHZtaml0X3R5cGVzLmMKKysrIGIvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF90eXBl cy5jCkBAIC0xMzIsNiArMTMyLDcgQEAgdm9pZAkgICAqcmVmZXJlbmNlZF9mdW5jdGlvbnNb XSA9CiAJRXhlY0V2YWxTeXNWYXIsCiAJRXhlY0V2YWxXaG9sZVJvd1ZhciwKIAlFeGVjRXZh bFhtbEV4cHIsCisJRXhlY0V2YWxKc29uQ29uc3RydWN0b3IsCiAJTWFrZUV4cGFuZGVkT2Jq ZWN0UmVhZE9ubHlJbnRlcm5hbCwKIAlzbG90X2dldG1pc3NpbmdhdHRycywKIAlzbG90X2dl dHNvbWVhdHRyc19pbnQsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVu Y3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCmluZGV4IGZlNjdiYWYxNDIu LjFkYzY3MGEwOTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5j CisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCkBAIC0xOSw2ICsxOSw3IEBA CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1 bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCisjaW5jbHVkZSAidXRpbHMv ZXJyY29kZXMuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKIAogCkBAIC04MjAs MyArODIxLDcxIEBAIG1ha2VWYWN1dW1SZWxhdGlvbihSYW5nZVZhciAqcmVsYXRpb24sIE9p ZCBvaWQsIExpc3QgKnZhX2NvbHMpCiAJdi0+dmFfY29scyA9IHZhX2NvbHM7CiAJcmV0dXJu IHY7CiB9CisKKy8qCisgKiBtYWtlSnNvbkZvcm1hdCAtCisgKgkgIGNyZWF0ZXMgYSBKc29u Rm9ybWF0IG5vZGUKKyAqLworSnNvbkZvcm1hdCAqCittYWtlSnNvbkZvcm1hdChKc29uRm9y bWF0VHlwZSB0eXBlLCBKc29uRW5jb2RpbmcgZW5jb2RpbmcsIGludCBsb2NhdGlvbikKK3sK KwlKc29uRm9ybWF0ICpqZiA9IG1ha2VOb2RlKEpzb25Gb3JtYXQpOworCisJamYtPmZvcm1h dF90eXBlID0gdHlwZTsKKwlqZi0+ZW5jb2RpbmcgPSBlbmNvZGluZzsKKwlqZi0+bG9jYXRp b24gPSBsb2NhdGlvbjsKKworCXJldHVybiBqZjsKK30KKworLyoKKyAqIG1ha2VKc29uVmFs dWVFeHByIC0KKyAqCSAgY3JlYXRlcyBhIEpzb25WYWx1ZUV4cHIgbm9kZQorICovCitKc29u VmFsdWVFeHByICoKK21ha2VKc29uVmFsdWVFeHByKEV4cHIgKmV4cHIsIEpzb25Gb3JtYXQg KmZvcm1hdCkKK3sKKwlKc29uVmFsdWVFeHByICpqdmUgPSBtYWtlTm9kZShKc29uVmFsdWVF eHByKTsKKworCWp2ZS0+cmF3X2V4cHIgPSBleHByOworCWp2ZS0+Zm9ybWF0dGVkX2V4cHIg PSBOVUxMOworCWp2ZS0+Zm9ybWF0ID0gZm9ybWF0OworCisJcmV0dXJuIGp2ZTsKK30KKwor LyoKKyAqIG1ha2VKc29uRW5jb2RpbmcgLQorICoJICBjb252ZXJ0cyBKU09OIGVuY29kaW5n IG5hbWUgdG8gZW51bSBKc29uRW5jb2RpbmcKKyAqLworSnNvbkVuY29kaW5nCittYWtlSnNv bkVuY29kaW5nKGNoYXIgKm5hbWUpCit7CisJaWYgKCFwZ19zdHJjYXNlY21wKG5hbWUsICJ1 dGY4IikpCisJCXJldHVybiBKU19FTkNfVVRGODsKKwlpZiAoIXBnX3N0cmNhc2VjbXAobmFt ZSwgInV0ZjE2IikpCisJCXJldHVybiBKU19FTkNfVVRGMTY7CisJaWYgKCFwZ19zdHJjYXNl Y21wKG5hbWUsICJ1dGYzMiIpKQorCQlyZXR1cm4gSlNfRU5DX1VURjMyOworCisJZXJlcG9y dChFUlJPUiwKKwkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUp LAorCQkJIGVycm1zZygidW5yZWNvZ25pemVkIEpTT04gZW5jb2Rpbmc6ICVzIiwgbmFtZSkp KTsKKworCXJldHVybiBKU19FTkNfREVGQVVMVDsKK30KKworLyoKKyAqIG1ha2VKc29uS2V5 VmFsdWUgLQorICoJICBjcmVhdGVzIGEgSnNvbktleVZhbHVlIG5vZGUKKyAqLworTm9kZSAq CittYWtlSnNvbktleVZhbHVlKE5vZGUgKmtleSwgTm9kZSAqdmFsdWUpCit7CisJSnNvbktl eVZhbHVlICpuID0gbWFrZU5vZGUoSnNvbktleVZhbHVlKTsKKworCW4tPmtleSA9IChFeHBy ICopIGtleTsKKwluLT52YWx1ZSA9IGNhc3ROb2RlKEpzb25WYWx1ZUV4cHIsIHZhbHVlKTsK KworCXJldHVybiAoTm9kZSAqKSBuOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9k ZXMvbm9kZUZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwppbmRleCBk Yzg0MTVhNjkzLi4wZDNlMmNmZjIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9u b2RlRnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwpAQCAtMjQ5 LDYgKzI0OSwxNiBAQCBleHByVHlwZShjb25zdCBOb2RlICpleHByKQogCQljYXNlIFRfUGxh Y2VIb2xkZXJWYXI6CiAJCQl0eXBlID0gZXhwclR5cGUoKE5vZGUgKikgKChjb25zdCBQbGFj ZUhvbGRlclZhciAqKSBleHByKS0+cGhleHByKTsKIAkJCWJyZWFrOworCQljYXNlIFRfSnNv blZhbHVlRXhwcjoKKwkJCXsKKwkJCQljb25zdCBKc29uVmFsdWVFeHByICpqdmUgPSAoY29u c3QgSnNvblZhbHVlRXhwciAqKSBleHByOworCisJCQkJdHlwZSA9IGV4cHJUeXBlKChOb2Rl ICopIChqdmUtPmZvcm1hdHRlZF9leHByID8ganZlLT5mb3JtYXR0ZWRfZXhwciA6IGp2ZS0+ cmF3X2V4cHIpKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfSnNvbkNvbnN0cnVjdG9y RXhwcjoKKwkJCXR5cGUgPSAoKGNvbnN0IEpzb25Db25zdHJ1Y3RvckV4cHIgKikgZXhwcikt PnJldHVybmluZy0+dHlwaWQ7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJS T1IsICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlOiAlZCIsIChpbnQpIG5vZGVUYWcoZXhwcikp OwogCQkJdHlwZSA9IEludmFsaWRPaWQ7CS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KQEAg LTQ3OSw2ICs0ODksMTEgQEAgZXhwclR5cG1vZChjb25zdCBOb2RlICpleHByKQogCQkJcmV0 dXJuICgoY29uc3QgU2V0VG9EZWZhdWx0ICopIGV4cHIpLT50eXBlTW9kOwogCQljYXNlIFRf UGxhY2VIb2xkZXJWYXI6CiAJCQlyZXR1cm4gZXhwclR5cG1vZCgoTm9kZSAqKSAoKGNvbnN0 IFBsYWNlSG9sZGVyVmFyICopIGV4cHIpLT5waGV4cHIpOworCQljYXNlIFRfSnNvblZhbHVl RXhwcjoKKwkJCXJldHVybiBleHByVHlwbW9kKChOb2RlICopICgoY29uc3QgSnNvblZhbHVl RXhwciAqKSBleHByKS0+Zm9ybWF0dGVkX2V4cHIpOworCQljYXNlIFRfSnNvbkNvbnN0cnVj dG9yRXhwcjoKKwkJCXJldHVybiAtMTsJCQkvKiAoKGNvbnN0IEpzb25Db25zdHJ1Y3RvckV4 cHIgKikKKwkJCQkJCQkJICogZXhwciktPnJldHVybmluZy0+dHlwbW9kOyAqLwogCQlkZWZh dWx0OgogCQkJYnJlYWs7CiAJfQpAQCAtOTU0LDYgKzk2OSwxOSBAQCBleHByQ29sbGF0aW9u KGNvbnN0IE5vZGUgKmV4cHIpCiAJCWNhc2UgVF9QbGFjZUhvbGRlclZhcjoKIAkJCWNvbGwg PSBleHByQ29sbGF0aW9uKChOb2RlICopICgoY29uc3QgUGxhY2VIb2xkZXJWYXIgKikgZXhw ciktPnBoZXhwcik7CiAJCQlicmVhazsKKwkJY2FzZSBUX0pzb25WYWx1ZUV4cHI6CisJCQlj b2xsID0gZXhwckNvbGxhdGlvbigoTm9kZSAqKSAoKGNvbnN0IEpzb25WYWx1ZUV4cHIgKikg ZXhwciktPmZvcm1hdHRlZF9leHByKTsKKwkJCWJyZWFrOworCQljYXNlIFRfSnNvbkNvbnN0 cnVjdG9yRXhwcjoKKwkJCXsKKwkJCQljb25zdCBKc29uQ29uc3RydWN0b3JFeHByICpjdG9y ID0gKGNvbnN0IEpzb25Db25zdHJ1Y3RvckV4cHIgKikgZXhwcjsKKworCQkJCWlmIChjdG9y LT5jb2VyY2lvbikKKwkJCQkJY29sbCA9IGV4cHJDb2xsYXRpb24oKE5vZGUgKikgY3Rvci0+ Y29lcmNpb24pOworCQkJCWVsc2UKKwkJCQkJY29sbCA9IEludmFsaWRPaWQ7CisJCQl9CisJ CQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgbm9k ZSB0eXBlOiAlZCIsIChpbnQpIG5vZGVUYWcoZXhwcikpOwogCQkJY29sbCA9IEludmFsaWRP aWQ7CS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KQEAgLTExNjEsNiArMTE4OSwyMSBAQCBl eHByU2V0Q29sbGF0aW9uKE5vZGUgKmV4cHIsIE9pZCBjb2xsYXRpb24pCiAJCQkvKiBOZXh0 VmFsdWVFeHByJ3MgcmVzdWx0IGlzIGFuIGludGVnZXIgdHlwZSAuLi4gKi8KIAkJCUFzc2Vy dCghT2lkSXNWYWxpZChjb2xsYXRpb24pKTsgLyogLi4uIHNvIG5ldmVyIHNldCBhIGNvbGxh dGlvbiAqLwogCQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uVmFsdWVFeHByOgorCQkJZXhwclNl dENvbGxhdGlvbigoTm9kZSAqKSAoKEpzb25WYWx1ZUV4cHIgKikgZXhwciktPmZvcm1hdHRl ZF9leHByLAorCQkJCQkJCSBjb2xsYXRpb24pOworCQkJYnJlYWs7CisJCWNhc2UgVF9Kc29u Q29uc3RydWN0b3JFeHByOgorCQkJeworCQkJCUpzb25Db25zdHJ1Y3RvckV4cHIgKmN0b3Ig PSAoSnNvbkNvbnN0cnVjdG9yRXhwciAqKSBleHByOworCisJCQkJaWYgKGN0b3ItPmNvZXJj aW9uKQorCQkJCQlleHByU2V0Q29sbGF0aW9uKChOb2RlICopIGN0b3ItPmNvZXJjaW9uLCBj b2xsYXRpb24pOworCQkJCWVsc2UKKwkJCQkJQXNzZXJ0KCFPaWRJc1ZhbGlkKGNvbGxhdGlv bikpOyAvKiByZXN1bHQgaXMgYWx3YXlzIGEKKwkJCQkJCQkJCQkJCQkgKiBqc29uW2JdIHR5 cGUgKi8KKwkJCX0KKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVu cmVjb2duaXplZCBub2RlIHR5cGU6ICVkIiwgKGludCkgbm9kZVRhZyhleHByKSk7CiAJCQli cmVhazsKQEAgLTE2MDMsNiArMTY0NiwxMiBAQCBleHByTG9jYXRpb24oY29uc3QgTm9kZSAq ZXhwcikKIAkJY2FzZSBUX1BhcnRpdGlvblJhbmdlRGF0dW06CiAJCQlsb2MgPSAoKGNvbnN0 IFBhcnRpdGlvblJhbmdlRGF0dW0gKikgZXhwciktPmxvY2F0aW9uOwogCQkJYnJlYWs7CisJ CWNhc2UgVF9Kc29uVmFsdWVFeHByOgorCQkJbG9jID0gZXhwckxvY2F0aW9uKChOb2RlICop ICgoY29uc3QgSnNvblZhbHVlRXhwciAqKSBleHByKS0+cmF3X2V4cHIpOworCQkJYnJlYWs7 CisJCWNhc2UgVF9Kc29uQ29uc3RydWN0b3JFeHByOgorCQkJbG9jID0gKChjb25zdCBKc29u Q29uc3RydWN0b3JFeHByICopIGV4cHIpLT5sb2NhdGlvbjsKKwkJCWJyZWFrOwogCQlkZWZh dWx0OgogCQkJLyogZm9yIGFueSBvdGhlciBub2RlIHR5cGUgaXQncyBqdXN0IHVua25vd24u Li4gKi8KIAkJCWxvYyA9IC0xOwpAQCAtMjMzNCw2ICsyMzgzLDI4IEBAIGV4cHJlc3Npb25f dHJlZV93YWxrZXJfaW1wbChOb2RlICpub2RlLAogCQkJCQlyZXR1cm4gdHJ1ZTsKIAkJCX0K IAkJCWJyZWFrOworCQljYXNlIFRfSnNvblZhbHVlRXhwcjoKKwkJCXsKKwkJCQlKc29uVmFs dWVFeHByICpqdmUgPSAoSnNvblZhbHVlRXhwciAqKSBub2RlOworCisJCQkJaWYgKFdBTEso anZlLT5yYXdfZXhwcikpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxLKGp2ZS0+ Zm9ybWF0dGVkX2V4cHIpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWJyZWFrOwor CQljYXNlIFRfSnNvbkNvbnN0cnVjdG9yRXhwcjoKKwkJCXsKKwkJCQlKc29uQ29uc3RydWN0 b3JFeHByICpjdG9yID0gKEpzb25Db25zdHJ1Y3RvckV4cHIgKikgbm9kZTsKKworCQkJCWlm IChXQUxLKGN0b3ItPmFyZ3MpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhj dG9yLT5mdW5jKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEsoY3Rvci0+Y29l cmNpb24pKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWJyZWFrOwogCQlkZWZhdWx0 OgogCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBub2RlIHR5cGU6ICVkIiwKIAkJCQkg KGludCkgbm9kZVRhZyhub2RlKSk7CkBAIC0yNjY0LDYgKzI3MzUsNyBAQCBleHByZXNzaW9u X3RyZWVfbXV0YXRvcl9pbXBsKE5vZGUgKm5vZGUsCiAJCWNhc2UgVF9SYW5nZVRibFJlZjoK IAkJY2FzZSBUX1NvcnRHcm91cENsYXVzZToKIAkJY2FzZSBUX0NURVNlYXJjaENsYXVzZToK KwkJY2FzZSBUX0pzb25Gb3JtYXQ6CiAJCQlyZXR1cm4gKE5vZGUgKikgY29weU9iamVjdChu b2RlKTsKIAkJY2FzZSBUX1dpdGhDaGVja09wdGlvbjoKIAkJCXsKQEAgLTMzMDcsNiArMzM3 OSw0MSBAQCBleHByZXNzaW9uX3RyZWVfbXV0YXRvcl9pbXBsKE5vZGUgKm5vZGUsCiAJCQkJ cmV0dXJuIChOb2RlICopIG5ld25vZGU7CiAJCQl9CiAJCQlicmVhazsKKwkJY2FzZSBUX0pz b25SZXR1cm5pbmc6CisJCQl7CisJCQkJSnNvblJldHVybmluZyAqanIgPSAoSnNvblJldHVy bmluZyAqKSBub2RlOworCQkJCUpzb25SZXR1cm5pbmcgKm5ld25vZGU7CisKKwkJCQlGTEFU Q09QWShuZXdub2RlLCBqciwgSnNvblJldHVybmluZyk7CisJCQkJTVVUQVRFKG5ld25vZGUt PmZvcm1hdCwganItPmZvcm1hdCwgSnNvbkZvcm1hdCAqKTsKKworCQkJCXJldHVybiAoTm9k ZSAqKSBuZXdub2RlOworCQkJfQorCQljYXNlIFRfSnNvblZhbHVlRXhwcjoKKwkJCXsKKwkJ CQlKc29uVmFsdWVFeHByICpqdmUgPSAoSnNvblZhbHVlRXhwciAqKSBub2RlOworCQkJCUpz b25WYWx1ZUV4cHIgKm5ld25vZGU7CisKKwkJCQlGTEFUQ09QWShuZXdub2RlLCBqdmUsIEpz b25WYWx1ZUV4cHIpOworCQkJCU1VVEFURShuZXdub2RlLT5yYXdfZXhwciwganZlLT5yYXdf ZXhwciwgRXhwciAqKTsKKwkJCQlNVVRBVEUobmV3bm9kZS0+Zm9ybWF0dGVkX2V4cHIsIGp2 ZS0+Zm9ybWF0dGVkX2V4cHIsIEV4cHIgKik7CisJCQkJTVVUQVRFKG5ld25vZGUtPmZvcm1h dCwganZlLT5mb3JtYXQsIEpzb25Gb3JtYXQgKik7CisKKwkJCQlyZXR1cm4gKE5vZGUgKikg bmV3bm9kZTsKKwkJCX0KKwkJY2FzZSBUX0pzb25Db25zdHJ1Y3RvckV4cHI6CisJCQl7CisJ CQkJSnNvbkNvbnN0cnVjdG9yRXhwciAqanZlID0gKEpzb25Db25zdHJ1Y3RvckV4cHIgKikg bm9kZTsKKwkJCQlKc29uQ29uc3RydWN0b3JFeHByICpuZXdub2RlOworCisJCQkJRkxBVENP UFkobmV3bm9kZSwganZlLCBKc29uQ29uc3RydWN0b3JFeHByKTsKKwkJCQlNVVRBVEUobmV3 bm9kZS0+YXJncywganZlLT5hcmdzLCBMaXN0ICopOworCQkJCU1VVEFURShuZXdub2RlLT5m dW5jLCBqdmUtPmZ1bmMsIEV4cHIgKik7CisJCQkJTVVUQVRFKG5ld25vZGUtPmNvZXJjaW9u LCBqdmUtPmNvZXJjaW9uLCBFeHByICopOworCQkJCU1VVEFURShuZXdub2RlLT5yZXR1cm5p bmcsIGp2ZS0+cmV0dXJuaW5nLCBKc29uUmV0dXJuaW5nICopOworCisJCQkJcmV0dXJuIChO b2RlICopIG5ld25vZGU7CisJCQl9CiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAidW5y ZWNvZ25pemVkIG5vZGUgdHlwZTogJWQiLAogCQkJCSAoaW50KSBub2RlVGFnKG5vZGUpKTsK QEAgLTM1NzgsNiArMzY4NSw3IEBAIHJhd19leHByZXNzaW9uX3RyZWVfd2Fsa2VyX2ltcGwo Tm9kZSAqbm9kZSwKIAkJY2FzZSBUX1BhcmFtUmVmOgogCQljYXNlIFRfQV9Db25zdDoKIAkJ Y2FzZSBUX0FfU3RhcjoKKwkJY2FzZSBUX0pzb25Gb3JtYXQ6CiAJCQkvKiBwcmltaXRpdmUg bm9kZSB0eXBlcyB3aXRoIG5vIHN1Ym5vZGVzICovCiAJCQlicmVhazsKIAkJY2FzZSBUX0Fs aWFzOgpAQCAtNDA0MCw2ICs0MTQ4LDExOCBAQCByYXdfZXhwcmVzc2lvbl90cmVlX3dhbGtl cl9pbXBsKE5vZGUgKm5vZGUsCiAJCWNhc2UgVF9Db21tb25UYWJsZUV4cHI6CiAJCQkvKiBz ZWFyY2hfY2xhdXNlIGFuZCBjeWNsZV9jbGF1c2UgYXJlIG5vdCBpbnRlcmVzdGluZyBoZXJl ICovCiAJCQlyZXR1cm4gV0FMSygoKENvbW1vblRhYmxlRXhwciAqKSBub2RlKS0+Y3RlcXVl cnkpOworCQljYXNlIFRfSnNvblJldHVybmluZzoKKwkJCXJldHVybiBXQUxLKCgoSnNvblJl dHVybmluZyAqKSBub2RlKS0+Zm9ybWF0KTsKKwkJY2FzZSBUX0pzb25WYWx1ZUV4cHI6CisJ CQl7CisJCQkJSnNvblZhbHVlRXhwciAqanZlID0gKEpzb25WYWx1ZUV4cHIgKikgbm9kZTsK KworCQkJCWlmIChXQUxLKGp2ZS0+cmF3X2V4cHIpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJ CQlpZiAoV0FMSyhqdmUtPmZvcm1hdHRlZF9leHByKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJ CQkJaWYgKFdBTEsoanZlLT5mb3JtYXQpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJ CWJyZWFrOworCQljYXNlIFRfSnNvbkNvbnN0cnVjdG9yRXhwcjoKKwkJCXsKKwkJCQlKc29u Q29uc3RydWN0b3JFeHByICpjdG9yID0gKEpzb25Db25zdHJ1Y3RvckV4cHIgKikgbm9kZTsK KworCQkJCWlmIChXQUxLKGN0b3ItPmFyZ3MpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlp ZiAoV0FMSyhjdG9yLT5mdW5jKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEso Y3Rvci0+Y29lcmNpb24pKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhjdG9y LT5yZXR1cm5pbmcpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWJyZWFrOworCQlj YXNlIFRfSnNvbk91dHB1dDoKKwkJCXsKKwkJCQlKc29uT3V0cHV0ICpvdXQgPSAoSnNvbk91 dHB1dCAqKSBub2RlOworCisJCQkJaWYgKFdBTEsob3V0LT50eXBlTmFtZSkpCisJCQkJCXJl dHVybiB0cnVlOworCQkJCWlmIChXQUxLKG91dC0+cmV0dXJuaW5nKSkKKwkJCQkJcmV0dXJu IHRydWU7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0pzb25LZXlWYWx1ZToKKwkJCXsK KwkJCQlKc29uS2V5VmFsdWUgKmprdiA9IChKc29uS2V5VmFsdWUgKikgbm9kZTsKKworCQkJ CWlmIChXQUxLKGprdi0+a2V5KSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEso amt2LT52YWx1ZSkpCisJCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJYnJlYWs7CisJCWNh c2UgVF9Kc29uT2JqZWN0Q29uc3RydWN0b3I6CisJCQl7CisJCQkJSnNvbk9iamVjdENvbnN0 cnVjdG9yICpqb2MgPSAoSnNvbk9iamVjdENvbnN0cnVjdG9yICopIG5vZGU7CisKKwkJCQlp ZiAoV0FMSyhqb2MtPm91dHB1dCkpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxL KGpvYy0+ZXhwcnMpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWJyZWFrOworCQlj YXNlIFRfSnNvbkFycmF5Q29uc3RydWN0b3I6CisJCQl7CisJCQkJSnNvbkFycmF5Q29uc3Ry dWN0b3IgKmphYyA9IChKc29uQXJyYXlDb25zdHJ1Y3RvciAqKSBub2RlOworCisJCQkJaWYg KFdBTEsoamFjLT5vdXRwdXQpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhq YWMtPmV4cHJzKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlicmVhazsKKwkJY2Fz ZSBUX0pzb25BZ2dDb25zdHJ1Y3RvcjoKKwkJCXsKKwkJCQlKc29uQWdnQ29uc3RydWN0b3Ig KmN0b3IgPSAoSnNvbkFnZ0NvbnN0cnVjdG9yICopIG5vZGU7CisKKwkJCQlpZiAoV0FMSyhj dG9yLT5vdXRwdXQpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhjdG9yLT5h Z2dfb3JkZXIpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhjdG9yLT5hZ2df ZmlsdGVyKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEsoY3Rvci0+b3Zlcikp CisJCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uT2Jq ZWN0QWdnOgorCQkJeworCQkJCUpzb25PYmplY3RBZ2cgKmpvYSA9IChKc29uT2JqZWN0QWdn ICopIG5vZGU7CisKKwkJCQlpZiAoV0FMSyhqb2EtPmNvbnN0cnVjdG9yKSkKKwkJCQkJcmV0 dXJuIHRydWU7CisJCQkJaWYgKFdBTEsoam9hLT5hcmcpKQorCQkJCQlyZXR1cm4gdHJ1ZTsK KwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfSnNvbkFycmF5QWdnOgorCQkJeworCQkJCUpz b25BcnJheUFnZyAqamFhID0gKEpzb25BcnJheUFnZyAqKSBub2RlOworCisJCQkJaWYgKFdB TEsoamFhLT5jb25zdHJ1Y3RvcikpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxL KGphYS0+YXJnKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlicmVhazsKKwkJY2Fz ZSBUX0pzb25BcnJheVF1ZXJ5Q29uc3RydWN0b3I6CisJCQl7CisJCQkJSnNvbkFycmF5UXVl cnlDb25zdHJ1Y3RvciAqamFxYyA9IChKc29uQXJyYXlRdWVyeUNvbnN0cnVjdG9yICopIG5v ZGU7CisKKwkJCQlpZiAoV0FMSyhqYXFjLT5vdXRwdXQpKQorCQkJCQlyZXR1cm4gdHJ1ZTsK KwkJCQlpZiAoV0FMSyhqYXFjLT5xdWVyeSkpCisJCQkJCXJldHVybiB0cnVlOworCQkJfQor CQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIG5v ZGUgdHlwZTogJWQiLAogCQkJCSAoaW50KSBub2RlVGFnKG5vZGUpKTsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYyBiL3NyYy9iYWNrZW5kL29w dGltaXplci91dGlsL2NsYXVzZXMuYwppbmRleCA3NmUyNTExOGY5Li5kZmJhOGY4ZDMyIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMKKysrIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jCkBAIC01MSw2ICs1MSw4IEBA CiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5o IgogI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCisjaW5jbHVkZSAidXRpbHMvanNvbi5o IgorI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hl LmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNj YWNoZS5oIgpAQCAtMzgzLDYgKzM4NSwyNyBAQCBjb250YWluX211dGFibGVfZnVuY3Rpb25z X3dhbGtlcihOb2RlICpub2RlLCB2b2lkICpjb250ZXh0KQogCQkJCQkJCQljb250ZXh0KSkK IAkJcmV0dXJuIHRydWU7CiAKKwlpZiAoSXNBKG5vZGUsIEpzb25Db25zdHJ1Y3RvckV4cHIp KQorCXsKKwkJY29uc3QgSnNvbkNvbnN0cnVjdG9yRXhwciAqY3RvciA9IChKc29uQ29uc3Ry dWN0b3JFeHByICopIG5vZGU7CisJCUxpc3RDZWxsICAgKmxjOworCQlib29sCQlpc19qc29u YiA9CisJCWN0b3ItPnJldHVybmluZy0+Zm9ybWF0LT5mb3JtYXRfdHlwZSA9PSBKU19GT1JN QVRfSlNPTkI7CisKKwkJLyogQ2hlY2sgYXJndW1lbnRfdHlwZSA9PiBqc29uW2JdIGNvbnZl cnNpb25zICovCisJCWZvcmVhY2gobGMsIGN0b3ItPmFyZ3MpCisJCXsKKwkJCU9pZAkJCXR5 cGlkID0gZXhwclR5cGUobGZpcnN0KGxjKSk7CisKKwkJCWlmIChpc19qc29uYiA/CisJCQkJ IXRvX2pzb25iX2lzX2ltbXV0YWJsZSh0eXBpZCkgOgorCQkJCSF0b19qc29uX2lzX2ltbXV0 YWJsZSh0eXBpZCkpCisJCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQkvKiBDaGVjayBhbGwg c3Vibm9kZXMgKi8KKwl9CisKIAlpZiAoSXNBKG5vZGUsIE5leHRWYWx1ZUV4cHIpKQogCXsK IAkJLyogTmV4dFZhbHVlRXhwciBpcyB2b2xhdGlsZSAqLwpAQCAtMzUzNSw2ICszNTU4LDI5 IEBAIGV2YWxfY29uc3RfZXhwcmVzc2lvbnNfbXV0YXRvcihOb2RlICpub2RlLAogCQkJCQly ZXR1cm4gZWNlX2V2YWx1YXRlX2V4cHIoKE5vZGUgKikgbmV3Y3JlKTsKIAkJCQlyZXR1cm4g KE5vZGUgKikgbmV3Y3JlOwogCQkJfQorCQljYXNlIFRfSnNvblZhbHVlRXhwcjoKKwkJCXsK KwkJCQlKc29uVmFsdWVFeHByICpqdmUgPSAoSnNvblZhbHVlRXhwciAqKSBub2RlOworCQkJ CU5vZGUJICAgKnJhdyA9IGV2YWxfY29uc3RfZXhwcmVzc2lvbnNfbXV0YXRvcigoTm9kZSAq KSBqdmUtPnJhd19leHByLAorCQkJCQkJCQkJCQkJCQkJCSBjb250ZXh0KTsKKworCQkJCWlm IChyYXcgJiYgSXNBKHJhdywgQ29uc3QpKQorCQkJCXsKKwkJCQkJTm9kZQkgICAqZm9ybWF0 dGVkOworCQkJCQlOb2RlCSAgICpzYXZlX2Nhc2VfdmFsID0gY29udGV4dC0+Y2FzZV92YWw7 CisKKwkJCQkJY29udGV4dC0+Y2FzZV92YWwgPSByYXc7CisKKwkJCQkJZm9ybWF0dGVkID0g ZXZhbF9jb25zdF9leHByZXNzaW9uc19tdXRhdG9yKChOb2RlICopIGp2ZS0+Zm9ybWF0dGVk X2V4cHIsCisJCQkJCQkJCQkJCQkJCQkJY29udGV4dCk7CisKKwkJCQkJY29udGV4dC0+Y2Fz ZV92YWwgPSBzYXZlX2Nhc2VfdmFsOworCisJCQkJCWlmIChmb3JtYXR0ZWQgJiYgSXNBKGZv cm1hdHRlZCwgQ29uc3QpKQorCQkJCQkJcmV0dXJuIGZvcm1hdHRlZDsKKwkJCQl9CisJCQkJ YnJlYWs7CisJCQl9CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpp bmRleCBlZmU4OGNjZjlkLi5jZjc2MWI0Y2QwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9w YXJzZXIvZ3JhbS55CisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKQEAgLTY0NCw2 ICs2NDQsMzQgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIg KnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKICV0eXBlIDxkZWZlbHQ+ CQloYXNoX3BhcnRib3VuZF9lbGVtCiAKIAorJXR5cGUgPG5vZGU+CQlqc29uX2Zvcm1hdF9j bGF1c2Vfb3B0CisJCQkJCWpzb25fcmVwcmVzZW50YXRpb24KKwkJCQkJanNvbl92YWx1ZV9l eHByCisJCQkJCWpzb25fb3V0cHV0X2NsYXVzZV9vcHQKKwkJCQkJanNvbl9mdW5jX2V4cHIK KwkJCQkJanNvbl92YWx1ZV9jb25zdHJ1Y3RvcgorCQkJCQlqc29uX29iamVjdF9jb25zdHJ1 Y3RvcgorCQkJCQlqc29uX29iamVjdF9jb25zdHJ1Y3Rvcl9hcmdzCisJCQkJCWpzb25fb2Jq ZWN0X2NvbnN0cnVjdG9yX2FyZ3Nfb3B0CisJCQkJCWpzb25fb2JqZWN0X2FyZ3MKKwkJCQkJ anNvbl9vYmplY3RfZnVuY19hcmdzCisJCQkJCWpzb25fYXJyYXlfY29uc3RydWN0b3IKKwkJ CQkJanNvbl9uYW1lX2FuZF92YWx1ZQorCQkJCQlqc29uX2FnZ3JlZ2F0ZV9mdW5jCisJCQkJ CWpzb25fb2JqZWN0X2FnZ3JlZ2F0ZV9jb25zdHJ1Y3RvcgorCQkJCQlqc29uX2FycmF5X2Fn Z3JlZ2F0ZV9jb25zdHJ1Y3RvcgorCisldHlwZSA8bGlzdD4JCWpzb25fbmFtZV9hbmRfdmFs dWVfbGlzdAorCQkJCQlqc29uX3ZhbHVlX2V4cHJfbGlzdAorCQkJCQlqc29uX2FycmF5X2Fn Z3JlZ2F0ZV9vcmRlcl9ieV9jbGF1c2Vfb3B0CisKKyV0eXBlIDxpdmFsPgkJanNvbl9lbmNv ZGluZworCQkJCQlqc29uX2VuY29kaW5nX2NsYXVzZV9vcHQKKworJXR5cGUgPGJvb2xlYW4+ CQlqc29uX2tleV91bmlxdWVuZXNzX2NvbnN0cmFpbnRfb3B0CisJCQkJCWpzb25fb2JqZWN0 X2NvbnN0cnVjdG9yX251bGxfY2xhdXNlX29wdAorCQkJCQlqc29uX2FycmF5X2NvbnN0cnVj dG9yX251bGxfY2xhdXNlX29wdAorCiAvKgogICogTm9uLWtleXdvcmQgdG9rZW4gdHlwZXMu ICBUaGVzZSBhcmUgaGFyZC13aXJlZCBpbnRvIHRoZSAiZmxleCIgbGV4ZXIuCiAgKiBUaGV5 IG11c3QgYmUgbGlzdGVkIGZpcnN0IHNvIHRoYXQgdGhlaXIgbnVtZXJpYyBjb2RlcyBkbyBu b3QgZGVwZW5kIG9uCkBAIC02NjksNyArNjk3LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1 cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1 ZXJ5KTsKICAqLwogCiAvKiBvcmRpbmFyeSBrZXkgd29yZHMgaW4gYWxwaGFiZXRpY2FsIG9y ZGVyICovCi0ldG9rZW4gPGtleXdvcmQ+IEFCT1JUX1AgQUJTT0xVVEVfUCBBQ0NFU1MgQUNU SU9OIEFERF9QIEFETUlOIEFGVEVSCisldG9rZW4gPGtleXdvcmQ+IEFCT1JUX1AgQUJTRU5U IEFCU09MVVRFX1AgQUNDRVNTIEFDVElPTiBBRERfUCBBRE1JTiBBRlRFUgogCUFHR1JFR0FU RSBBTEwgQUxTTyBBTFRFUiBBTFdBWVMgQU5BTFlTRSBBTkFMWVpFIEFORCBBTlkgQVJSQVkg QVMgQVNDCiAJQVNFTlNJVElWRSBBU1NFUlRJT04gQVNTSUdOTUVOVCBBU1lNTUVUUklDIEFU T01JQyBBVCBBVFRBQ0ggQVRUUklCVVRFIEFVVEhPUklaQVRJT04KIApAQCAtNjk1LDcgKzcy Myw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxu YW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJRVhURU5TSU9OIEVYVEVSTkFM IEVYVFJBQ1QKIAogCUZBTFNFX1AgRkFNSUxZIEZFVENIIEZJTFRFUiBGSU5BTElaRSBGSVJT VF9QIEZMT0FUX1AgRk9MTE9XSU5HIEZPUgotCUZPUkNFIEZPUkVJR04gRk9SV0FSRCBGUkVF WkUgRlJPTSBGVUxMIEZVTkNUSU9OIEZVTkNUSU9OUworCUZPUkNFIEZPUkVJR04gRk9STUFU IEZPUldBUkQgRlJFRVpFIEZST00gRlVMTCBGVU5DVElPTiBGVU5DVElPTlMKIAogCUdFTkVS QVRFRCBHTE9CQUwgR1JBTlQgR1JBTlRFRCBHUkVBVEVTVCBHUk9VUF9QIEdST1VQSU5HIEdS T1VQUwogCkBAIC03MDYsOSArNzM0LDkgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVW aWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsK IAlJTk5FUl9QIElOT1VUIElOUFVUX1AgSU5TRU5TSVRJVkUgSU5TRVJUIElOU1RFQUQgSU5U X1AgSU5URUdFUgogCUlOVEVSU0VDVCBJTlRFUlZBTCBJTlRPIElOVk9LRVIgSVMgSVNOVUxM IElTT0xBVElPTgogCi0JSk9JTgorCUpPSU4gSlNPTiBKU09OX0FSUkFZIEpTT05fQVJSQVlB R0cgSlNPTl9PQkpFQ1QgSlNPTl9PQkpFQ1RBR0cKIAotCUtFWQorCUtFWSBLRVlTCiAKIAlM QUJFTCBMQU5HVUFHRSBMQVJHRV9QIExBU1RfUCBMQVRFUkFMX1AKIAlMRUFESU5HIExFQUtQ Uk9PRiBMRUFTVCBMRUZUIExFVkVMIExJS0UgTElNSVQgTElTVEVOIExPQUQgTE9DQUwKQEAg LTc3NCw3ICs4MDIsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3Qo Y2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogICogYXMgTk9U LCBhdCBsZWFzdCB3aXRoIHJlc3BlY3QgdG8gdGhlaXIgbGVmdC1oYW5kIHN1YmV4cHJlc3Np b24uCiAgKiBOVUxMU19MQSBhbmQgV0lUSF9MQSBhcmUgbmVlZGVkIHRvIG1ha2UgdGhlIGdy YW1tYXIgTEFMUigxKS4KICAqLwotJXRva2VuCQlOT1RfTEEgTlVMTFNfTEEgV0lUSF9MQQor JXRva2VuCQlOT1RfTEEgTlVMTFNfTEEgV0lUSF9MQSBXSVRIX0xBX1VOSVFVRSBXSVRIT1VU X0xBCiAKIC8qCiAgKiBUaGUgZ3JhbW1hciBsaWtld2lzZSB0aGlua3MgdGhlc2UgdG9rZW5z IGFyZSBrZXl3b3JkcywgYnV0IHRoZXkgYXJlIG5ldmVyCkBAIC03OTIsNiArODIwLDcgQEAg c3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExp c3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAogLyogUHJlY2VkZW5jZTogbG93ZXN0IHRv IGhpZ2hlc3QgKi8KICVub25hc3NvYwlTRVQJCQkJLyogc2VlIHJlbGF0aW9uX2V4cHJfb3B0 X2FsaWFzICovCislcmlnaHQJCUZPUk1BVAogJWxlZnQJCVVOSU9OIEVYQ0VQVAogJWxlZnQJ CUlOVEVSU0VDVAogJWxlZnQJCU9SCkBAIC04MjcsMTEgKzg1NiwxMyBAQCBzdGF0aWMgTm9k ZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNl cywgTm9kZSAqcXVlcnkpOwogICogVXNpbmcgdGhlIHNhbWUgcHJlY2VkZW5jZSBhcyBJREVO VCBzZWVtcyByaWdodCBmb3IgdGhlIHJlYXNvbnMgZ2l2ZW4gYWJvdmUuCiAgKi8KICVub25h c3NvYwlVTkJPVU5ERUQJCS8qIGlkZWFsbHkgd291bGQgaGF2ZSBzYW1lIHByZWNlZGVuY2Ug YXMgSURFTlQgKi8KKyVub25hc3NvYwlBQlNFTlQgVU5JUVVFCiAlbm9uYXNzb2MJSURFTlQg UEFSVElUSU9OIFJBTkdFIFJPV1MgR1JPVVBTIFBSRUNFRElORyBGT0xMT1dJTkcgQ1VCRSBS T0xMVVAKICVsZWZ0CQlPcCBPUEVSQVRPUgkJLyogbXVsdGktY2hhcmFjdGVyIG9wcyBhbmQg dXNlci1kZWZpbmVkIG9wZXJhdG9ycyAqLwogJWxlZnQJCScrJyAnLScKICVsZWZ0CQknKicg Jy8nICclJwogJWxlZnQJCSdeJworJWxlZnQJCUtFWVMJCQkJCQkvKiBVTklRVUUgWyBLRVlT IF0gKi8KIC8qIFVuYXJ5IE9wZXJhdG9ycyAqLwogJWxlZnQJCUFUCQkJCS8qIHNldHMgcHJl Y2VkZW5jZSBmb3IgQVQgVElNRSBaT05FICovCiAlbGVmdAkJQ09MTEFURQpAQCAtODQ5LDYg Kzg4MCw5IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpy ZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAgKi8KICVsZWZ0CQlKT0lO IENST1NTIExFRlQgRlVMTCBSSUdIVCBJTk5FUl9QIE5BVFVSQUwKIAorJW5vbmFzc29jCWVt cHR5X2pzb25fdW5pcXVlCislbGVmdAkJV0lUSE9VVCBXSVRIX0xBX1VOSVFVRQorCiAlJQog CiAvKgpAQCAtMTQyODcsNyArMTQzMjEsNyBAQCBDb25zdEludGVydmFsOgogCiBvcHRfdGlt ZXpvbmU6CiAJCQlXSVRIX0xBIFRJTUUgWk9ORQkJCQkJCXsgJCQgPSB0cnVlOyB9Ci0JCQl8 IFdJVEhPVVQgVElNRSBaT05FCQkJCQkJeyAkJCA9IGZhbHNlOyB9CisJCQl8IFdJVEhPVVRf TEEgVElNRSBaT05FCQkJCQl7ICQkID0gZmFsc2U7IH0KIAkJCXwgLypFTVBUWSovCQkJCQkJ CQl7ICQkID0gZmFsc2U7IH0KIAkJOwogCkBAIC0xNDkxNSw2ICsxNDk0OSwxNyBAQCBiX2V4 cHI6CQljX2V4cHIKIAkJCQl9CiAJCTsKIAoranNvbl9rZXlfdW5pcXVlbmVzc19jb25zdHJh aW50X29wdDoKKwkJCVdJVEhfTEFfVU5JUVVFIHVuaXF1ZV9rZXlzCQkJCXsgJCQgPSB0cnVl OyB9CisJCQl8IFdJVEhPVVQgdW5pcXVlX2tleXMJCQkJCXsgJCQgPSBmYWxzZTsgfQorCQkJ fCAvKiBFTVBUWSAqLyAlcHJlYyBlbXB0eV9qc29uX3VuaXF1ZQl7ICQkID0gZmFsc2U7IH0K KwkJOworCit1bmlxdWVfa2V5czoKKwkJCVVOSVFVRQorCQkJfCBVTklRVUUgS0VZUworCQk7 CisKIC8qCiAgKiBQcm9kdWN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIGluIGJvdGggYV9leHBy IGFuZCBiX2V4cHIuCiAgKgpAQCAtMTUxODUsNiArMTUyMzAsMTYgQEAgZnVuY19leHByOiBm dW5jX2FwcGxpY2F0aW9uIHdpdGhpbl9ncm91cF9jbGF1c2UgZmlsdGVyX2NsYXVzZSBvdmVy X2NsYXVzZQogCQkJCQluLT5vdmVyID0gJDQ7CiAJCQkJCSQkID0gKE5vZGUgKikgbjsKIAkJ CQl9CisJCQl8IGpzb25fYWdncmVnYXRlX2Z1bmMgZmlsdGVyX2NsYXVzZSBvdmVyX2NsYXVz ZQorCQkJCXsKKwkJCQkJSnNvbkFnZ0NvbnN0cnVjdG9yICpuID0gSXNBKCQxLCBKc29uT2Jq ZWN0QWdnKSA/CisJCQkJCQkoKEpzb25PYmplY3RBZ2cgKikgJDEpLT5jb25zdHJ1Y3RvciA6 CisJCQkJCQkoKEpzb25BcnJheUFnZyAqKSAkMSktPmNvbnN0cnVjdG9yOworCisJCQkJCW4t PmFnZ19maWx0ZXIgPSAkMjsKKwkJCQkJbi0+b3ZlciA9ICQzOworCQkJCQkkJCA9IChOb2Rl ICopICQxOworCQkJCX0KIAkJCXwgZnVuY19leHByX2NvbW1vbl9zdWJleHByCiAJCQkJeyAk JCA9ICQxOyB9CiAJCTsKQEAgLTE1MTk4LDYgKzE1MjUzLDcgQEAgZnVuY19leHByOiBmdW5j X2FwcGxpY2F0aW9uIHdpdGhpbl9ncm91cF9jbGF1c2UgZmlsdGVyX2NsYXVzZSBvdmVyX2Ns YXVzZQogZnVuY19leHByX3dpbmRvd2xlc3M6CiAJCQlmdW5jX2FwcGxpY2F0aW9uCQkJCQkJ eyAkJCA9ICQxOyB9CiAJCQl8IGZ1bmNfZXhwcl9jb21tb25fc3ViZXhwcgkJCQl7ICQkID0g JDE7IH0KKwkJCXwganNvbl9hZ2dyZWdhdGVfZnVuYwkJCQkJeyAkJCA9ICQxOyB9CiAJCTsK IAogLyoKQEAgLTE1NTQzLDYgKzE1NTk5LDggQEAgZnVuY19leHByX2NvbW1vbl9zdWJleHBy OgogCQkJCQluLT5sb2NhdGlvbiA9IEAxOwogCQkJCQkkJCA9IChOb2RlICopIG47CiAJCQkJ fQorCQkJfCBqc29uX2Z1bmNfZXhwcgorCQkJCXsgJCQgPSAkMTsgfQogCQk7CiAKIC8qCkBA IC0xNjI2Nyw2ICsxNjMyNSwyNTMgQEAgb3B0X2FzeW1tZXRyaWM6IEFTWU1NRVRSSUMKIAkJ CXwgLypFTVBUWSovCiAJCTsKIAorLyogU1FML0pTT04gc3VwcG9ydCAqLworanNvbl9mdW5j X2V4cHI6CisJCQlqc29uX3ZhbHVlX2NvbnN0cnVjdG9yCisJCTsKKworanNvbl92YWx1ZV9l eHByOgorCQkJYV9leHByIGpzb25fZm9ybWF0X2NsYXVzZV9vcHQKKwkJCXsKKwkJCQkkJCA9 IChOb2RlICopIG1ha2VKc29uVmFsdWVFeHByKChFeHByICopICQxLCBjYXN0Tm9kZShKc29u Rm9ybWF0LCAkMikpOworCQkJfQorCQk7CisKK2pzb25fZm9ybWF0X2NsYXVzZV9vcHQ6CisJ CQlGT1JNQVQganNvbl9yZXByZXNlbnRhdGlvbgorCQkJCXsKKwkJCQkJJCQgPSAkMjsKKwkJ CQkJY2FzdE5vZGUoSnNvbkZvcm1hdCwgJCQpLT5sb2NhdGlvbiA9IEAxOworCQkJCX0KKwkJ CXwgLyogRU1QVFkgKi8KKwkJCQl7CisJCQkJCSQkID0gKE5vZGUgKikgbWFrZUpzb25Gb3Jt YXQoSlNfRk9STUFUX0RFRkFVTFQsIEpTX0VOQ19ERUZBVUxULCAtMSk7CisJCQkJfQorCQk7 CisKK2pzb25fcmVwcmVzZW50YXRpb246CisJCQlKU09OIGpzb25fZW5jb2RpbmdfY2xhdXNl X29wdAorCQkJCXsKKwkJCQkJJCQgPSAoTm9kZSAqKSBtYWtlSnNvbkZvcm1hdChKU19GT1JN QVRfSlNPTiwgJDIsIEAxKTsKKwkJCQl9CisJCS8qCXwgb3RoZXIgaW1wbGVtZW50YXRpb24g ZGVmaW5lZCBKU09OIHJlcHJlc2VudGF0aW9uIG9wdGlvbnMgKEJTT04sIEFWUk8gZXRjKSAq LworCQk7CisKK2pzb25fZW5jb2RpbmdfY2xhdXNlX29wdDoKKwkJCUVOQ09ESU5HIGpzb25f ZW5jb2RpbmcJCQkJCXsgJCQgPSAkMjsgfQorCQkJfCAvKiBFTVBUWSAqLwkJCQkJCQl7ICQk ID0gSlNfRU5DX0RFRkFVTFQ7IH0KKwkJOworCitqc29uX2VuY29kaW5nOgorCQkJbmFtZQkJ CQkJCQkJCXsgJCQgPSBtYWtlSnNvbkVuY29kaW5nKCQxKTsgfQorCQk7CisKK2pzb25fb3V0 cHV0X2NsYXVzZV9vcHQ6CisJCQlSRVRVUk5JTkcgVHlwZW5hbWUganNvbl9mb3JtYXRfY2xh dXNlX29wdAorCQkJCXsKKwkJCQkJSnNvbk91dHB1dCAqbiA9IG1ha2VOb2RlKEpzb25PdXRw dXQpOworCisJCQkJCW4tPnR5cGVOYW1lID0gJDI7CisJCQkJCW4tPnJldHVybmluZyA9IG1h a2VOb2RlKEpzb25SZXR1cm5pbmcpOworCQkJCQluLT5yZXR1cm5pbmctPmZvcm1hdCA9IChK c29uRm9ybWF0ICopICQzOworCQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJfQorCQkJfCAv KiBFTVBUWSAqLwkJCQkJCQl7ICQkID0gTlVMTDsgfQorCQkJOworCitqc29uX3ZhbHVlX2Nv bnN0cnVjdG9yOgorCQkJanNvbl9vYmplY3RfY29uc3RydWN0b3IKKwkJCXwganNvbl9hcnJh eV9jb25zdHJ1Y3RvcgorCQk7CisKK2pzb25fb2JqZWN0X2NvbnN0cnVjdG9yOgorCQkJSlNP Tl9PQkpFQ1QgJygnIGpzb25fb2JqZWN0X2FyZ3MgJyknCisJCQkJeworCQkJCQkkJCA9ICQz OworCQkJCX0KKwkJOworCitqc29uX29iamVjdF9hcmdzOgorCQkJanNvbl9vYmplY3RfY29u c3RydWN0b3JfYXJncworCQkJfCBqc29uX29iamVjdF9mdW5jX2FyZ3MKKwkJOworCitqc29u X29iamVjdF9mdW5jX2FyZ3M6CisJCQlmdW5jX2FyZ19saXN0CisJCQkJeworCQkJCQlMaXN0 ICpmdW5jID0gbGlzdF9tYWtlMShtYWtlU3RyaW5nKCJqc29uX29iamVjdCIpKTsKKworCQkJ CQkkJCA9IChOb2RlICopIG1ha2VGdW5jQ2FsbChmdW5jLCAkMSwgQ09FUkNFX0VYUExJQ0lU X0NBTEwsIEAxKTsKKwkJCQl9CisJCTsKKworanNvbl9vYmplY3RfY29uc3RydWN0b3JfYXJn czoKKwkJCWpzb25fb2JqZWN0X2NvbnN0cnVjdG9yX2FyZ3Nfb3B0IGpzb25fb3V0cHV0X2Ns YXVzZV9vcHQKKwkJCQl7CisJCQkJCUpzb25PYmplY3RDb25zdHJ1Y3RvciAqbiA9IChKc29u T2JqZWN0Q29uc3RydWN0b3IgKikgJDE7CisKKwkJCQkJbi0+b3V0cHV0ID0gKEpzb25PdXRw dXQgKikgJDI7CisJCQkJCW4tPmxvY2F0aW9uID0gQDE7CisJCQkJCSQkID0gKE5vZGUgKikg bjsKKwkJCQl9CisJCTsKKworanNvbl9vYmplY3RfY29uc3RydWN0b3JfYXJnc19vcHQ6CisJ CQlqc29uX25hbWVfYW5kX3ZhbHVlX2xpc3QKKwkJCWpzb25fb2JqZWN0X2NvbnN0cnVjdG9y X251bGxfY2xhdXNlX29wdAorCQkJanNvbl9rZXlfdW5pcXVlbmVzc19jb25zdHJhaW50X29w dAorCQkJCXsKKwkJCQkJSnNvbk9iamVjdENvbnN0cnVjdG9yICpuID0gbWFrZU5vZGUoSnNv bk9iamVjdENvbnN0cnVjdG9yKTsKKworCQkJCQluLT5leHBycyA9ICQxOworCQkJCQluLT5h YnNlbnRfb25fbnVsbCA9ICQyOworCQkJCQluLT51bmlxdWUgPSAkMzsKKwkJCQkJJCQgPSAo Tm9kZSAqKSBuOworCQkJCX0KKwkJCXwgLyogRU1QVFkgKi8KKwkJCQl7CisJCQkJCUpzb25P YmplY3RDb25zdHJ1Y3RvciAqbiA9IG1ha2VOb2RlKEpzb25PYmplY3RDb25zdHJ1Y3Rvcik7 CisKKwkJCQkJbi0+ZXhwcnMgPSBOVUxMOworCQkJCQluLT5hYnNlbnRfb25fbnVsbCA9IGZh bHNlOworCQkJCQluLT51bmlxdWUgPSBmYWxzZTsKKwkJCQkJJCQgPSAoTm9kZSAqKSBuOwor CQkJCX0KKwkJOworCitqc29uX25hbWVfYW5kX3ZhbHVlX2xpc3Q6CisJCQlqc29uX25hbWVf YW5kX3ZhbHVlCisJCQkJeyAkJCA9IGxpc3RfbWFrZTEoJDEpOyB9CisJCQl8IGpzb25fbmFt ZV9hbmRfdmFsdWVfbGlzdCAnLCcganNvbl9uYW1lX2FuZF92YWx1ZQorCQkJCXsgJCQgPSBs YXBwZW5kKCQxLCAkMyk7IH0KKwkJOworCitqc29uX25hbWVfYW5kX3ZhbHVlOgorLyogVE9E TyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgZHVlIHRvIGNvbmZsaWN0cworCQkJS0VZIGNfZXhw ciBWQUxVRV9QIGpzb25fdmFsdWVfZXhwciAlcHJlYyBQT1NURklYT1AKKwkJCQl7ICQkID0g bWFrZUpzb25LZXlWYWx1ZSgkMiwgJDQpOyB9CisJCQl8CisqLworCQkJY19leHByIFZBTFVF X1AganNvbl92YWx1ZV9leHByCisJCQkJeyAkJCA9IG1ha2VKc29uS2V5VmFsdWUoJDEsICQz KTsgfQorCQkJfAorCQkJYV9leHByICc6JyBqc29uX3ZhbHVlX2V4cHIKKwkJCQl7ICQkID0g bWFrZUpzb25LZXlWYWx1ZSgkMSwgJDMpOyB9CisJCTsKKworanNvbl9vYmplY3RfY29uc3Ry dWN0b3JfbnVsbF9jbGF1c2Vfb3B0OgorCQkJTlVMTF9QIE9OIE5VTExfUAkJCQkJeyAkJCA9 IGZhbHNlOyB9CisJCQl8IEFCU0VOVCBPTiBOVUxMX1AJCQkJCXsgJCQgPSB0cnVlOyB9CisJ CQl8IC8qIEVNUFRZICovCQkJCQkJeyAkJCA9IGZhbHNlOyB9CisJCTsKKworanNvbl9hcnJh eV9jb25zdHJ1Y3RvcjoKKwkJCUpTT05fQVJSQVkgJygnCisJCQkJanNvbl92YWx1ZV9leHBy X2xpc3QKKwkJCQlqc29uX2FycmF5X2NvbnN0cnVjdG9yX251bGxfY2xhdXNlX29wdAorCQkJ CWpzb25fb3V0cHV0X2NsYXVzZV9vcHQKKwkJCScpJworCQkJCXsKKwkJCQkJSnNvbkFycmF5 Q29uc3RydWN0b3IgKm4gPSBtYWtlTm9kZShKc29uQXJyYXlDb25zdHJ1Y3Rvcik7CisKKwkJ CQkJbi0+ZXhwcnMgPSAkMzsKKwkJCQkJbi0+YWJzZW50X29uX251bGwgPSAkNDsKKwkJCQkJ bi0+b3V0cHV0ID0gKEpzb25PdXRwdXQgKikgJDU7CisJCQkJCW4tPmxvY2F0aW9uID0gQDE7 CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CisJCQl8IEpTT05fQVJSQVkgJygnCisJ CQkJc2VsZWN0X25vX3BhcmVucworCQkJCS8qIGpzb25fZm9ybWF0X2NsYXVzZV9vcHQgKi8K KwkJCQkvKiBqc29uX2FycmF5X2NvbnN0cnVjdG9yX251bGxfY2xhdXNlX29wdCAqLworCQkJ CWpzb25fb3V0cHV0X2NsYXVzZV9vcHQKKwkJCScpJworCQkJCXsKKwkJCQkJSnNvbkFycmF5 UXVlcnlDb25zdHJ1Y3RvciAqbiA9IG1ha2VOb2RlKEpzb25BcnJheVF1ZXJ5Q29uc3RydWN0 b3IpOworCisJCQkJCW4tPnF1ZXJ5ID0gJDM7CisJCQkJCW4tPmZvcm1hdCA9IG1ha2VKc29u Rm9ybWF0KEpTX0ZPUk1BVF9ERUZBVUxULCBKU19FTkNfREVGQVVMVCwgLTEpOworCQkJCQkv KiBuLT5mb3JtYXQgPSAkNDsgKi8KKwkJCQkJbi0+YWJzZW50X29uX251bGwgPSB0cnVlIC8q ICQ1ICovOworCQkJCQluLT5vdXRwdXQgPSAoSnNvbk91dHB1dCAqKSAkNDsKKwkJCQkJbi0+ bG9jYXRpb24gPSBAMTsKKwkJCQkJJCQgPSAoTm9kZSAqKSBuOworCQkJCX0KKwkJCXwgSlNP Tl9BUlJBWSAnKCcKKwkJCQlqc29uX291dHB1dF9jbGF1c2Vfb3B0CisJCQknKScKKwkJCQl7 CisJCQkJCUpzb25BcnJheUNvbnN0cnVjdG9yICpuID0gbWFrZU5vZGUoSnNvbkFycmF5Q29u c3RydWN0b3IpOworCisJCQkJCW4tPmV4cHJzID0gTklMOworCQkJCQluLT5hYnNlbnRfb25f bnVsbCA9IHRydWU7CisJCQkJCW4tPm91dHB1dCA9IChKc29uT3V0cHV0ICopICQzOworCQkJ CQluLT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJfQorCQk7 CisKK2pzb25fdmFsdWVfZXhwcl9saXN0OgorCQkJanNvbl92YWx1ZV9leHByCQkJCQkJCQl7 ICQkID0gbGlzdF9tYWtlMSgkMSk7IH0KKwkJCXwganNvbl92YWx1ZV9leHByX2xpc3QgJywn IGpzb25fdmFsdWVfZXhwcgl7ICQkID0gbGFwcGVuZCgkMSwgJDMpO30KKwkJOworCitqc29u X2FycmF5X2NvbnN0cnVjdG9yX251bGxfY2xhdXNlX29wdDoKKwkJCU5VTExfUCBPTiBOVUxM X1AJCQkJCQl7ICQkID0gZmFsc2U7IH0KKwkJCXwgQUJTRU5UIE9OIE5VTExfUAkJCQkJCXsg JCQgPSB0cnVlOyB9CisJCQl8IC8qIEVNUFRZICovCQkJCQkJCXsgJCQgPSB0cnVlOyB9CisJ CTsKKworanNvbl9hZ2dyZWdhdGVfZnVuYzoKKwkJCWpzb25fb2JqZWN0X2FnZ3JlZ2F0ZV9j b25zdHJ1Y3RvcgorCQkJfCBqc29uX2FycmF5X2FnZ3JlZ2F0ZV9jb25zdHJ1Y3RvcgorCQk7 CisKK2pzb25fb2JqZWN0X2FnZ3JlZ2F0ZV9jb25zdHJ1Y3RvcjoKKwkJCUpTT05fT0JKRUNU QUdHICcoJworCQkJCWpzb25fbmFtZV9hbmRfdmFsdWUKKwkJCQlqc29uX29iamVjdF9jb25z dHJ1Y3Rvcl9udWxsX2NsYXVzZV9vcHQKKwkJCQlqc29uX2tleV91bmlxdWVuZXNzX2NvbnN0 cmFpbnRfb3B0CisJCQkJanNvbl9vdXRwdXRfY2xhdXNlX29wdAorCQkJJyknCisJCQkJewor CQkJCQlKc29uT2JqZWN0QWdnICpuID0gbWFrZU5vZGUoSnNvbk9iamVjdEFnZyk7CisKKwkJ CQkJbi0+YXJnID0gKEpzb25LZXlWYWx1ZSAqKSAkMzsKKwkJCQkJbi0+YWJzZW50X29uX251 bGwgPSAkNDsKKwkJCQkJbi0+dW5pcXVlID0gJDU7CisJCQkJCW4tPmNvbnN0cnVjdG9yID0g bWFrZU5vZGUoSnNvbkFnZ0NvbnN0cnVjdG9yKTsKKwkJCQkJbi0+Y29uc3RydWN0b3ItPm91 dHB1dCA9IChKc29uT3V0cHV0ICopICQ2OworCQkJCQluLT5jb25zdHJ1Y3Rvci0+YWdnX29y ZGVyID0gTlVMTDsKKwkJCQkJbi0+Y29uc3RydWN0b3ItPmxvY2F0aW9uID0gQDE7CisJCQkJ CSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CisJCTsKKworanNvbl9hcnJheV9hZ2dyZWdhdGVf Y29uc3RydWN0b3I6CisJCQlKU09OX0FSUkFZQUdHICcoJworCQkJCWpzb25fdmFsdWVfZXhw cgorCQkJCWpzb25fYXJyYXlfYWdncmVnYXRlX29yZGVyX2J5X2NsYXVzZV9vcHQKKwkJCQlq c29uX2FycmF5X2NvbnN0cnVjdG9yX251bGxfY2xhdXNlX29wdAorCQkJCWpzb25fb3V0cHV0 X2NsYXVzZV9vcHQKKwkJCScpJworCQkJCXsKKwkJCQkJSnNvbkFycmF5QWdnICpuID0gbWFr ZU5vZGUoSnNvbkFycmF5QWdnKTsKKworCQkJCQluLT5hcmcgPSAoSnNvblZhbHVlRXhwciAq KSAkMzsKKwkJCQkJbi0+YWJzZW50X29uX251bGwgPSAkNTsKKwkJCQkJbi0+Y29uc3RydWN0 b3IgPSBtYWtlTm9kZShKc29uQWdnQ29uc3RydWN0b3IpOworCQkJCQluLT5jb25zdHJ1Y3Rv ci0+YWdnX29yZGVyID0gJDQ7CisJCQkJCW4tPmNvbnN0cnVjdG9yLT5vdXRwdXQgPSAoSnNv bk91dHB1dCAqKSAkNjsKKwkJCQkJbi0+Y29uc3RydWN0b3ItPmxvY2F0aW9uID0gQDE7CisJ CQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CisJCTsKKworanNvbl9hcnJheV9hZ2dyZWdh dGVfb3JkZXJfYnlfY2xhdXNlX29wdDoKKwkJCU9SREVSIEJZIHNvcnRieV9saXN0CQkJCQl7 ICQkID0gJDM7IH0KKwkJCXwgLyogRU1QVFkgKi8JCQkJCQkJeyAkJCA9IE5JTDsgfQorCQk7 CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTE2NzE4LDYgKzE3MDIzLDcg QEAgQmFyZUNvbExhYmVsOglJREVOVAkJCQkJCQkJeyAkJCA9ICQxOyB9CiAgKi8KIHVucmVz ZXJ2ZWRfa2V5d29yZDoKIAkJCSAgQUJPUlRfUAorCQkJfCBBQlNFTlQKIAkJCXwgQUJTT0xV VEVfUAogCQkJfCBBQ0NFU1MKIAkJCXwgQUNUSU9OCkBAIC0xNjgxNCw2ICsxNzEyMCw3IEBA IHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgRklSU1RfUAogCQkJfCBGT0xMT1dJTkcKIAkJ CXwgRk9SQ0UKKwkJCXwgRk9STUFUCiAJCQl8IEZPUldBUkQKIAkJCXwgRlVOQ1RJT04KIAkJ CXwgRlVOQ1RJT05TCkBAIC0xNjg0Niw3ICsxNzE1Myw5IEBAIHVucmVzZXJ2ZWRfa2V5d29y ZDoKIAkJCXwgSU5TVEVBRAogCQkJfCBJTlZPS0VSCiAJCQl8IElTT0xBVElPTgorCQkJfCBK U09OCiAJCQl8IEtFWQorCQkJfCBLRVlTCiAJCQl8IExBQkVMCiAJCQl8IExBTkdVQUdFCiAJ CQl8IExBUkdFX1AKQEAgLTE3MDU4LDYgKzE3MzY3LDEwIEBAIGNvbF9uYW1lX2tleXdvcmQ6 CiAJCQl8IElOVF9QCiAJCQl8IElOVEVHRVIKIAkJCXwgSU5URVJWQUwKKwkJCXwgSlNPTl9B UlJBWQorCQkJfCBKU09OX0FSUkFZQUdHCisJCQl8IEpTT05fT0JKRUNUCisJCQl8IEpTT05f T0JKRUNUQUdHCiAJCQl8IExFQVNUCiAJCQl8IE5BVElPTkFMCiAJCQl8IE5DSEFSCkBAIC0x NzIyNyw2ICsxNzU0MCw3IEBAIHJlc2VydmVkX2tleXdvcmQ6CiAgKi8KIGJhcmVfbGFiZWxf a2V5d29yZDoKIAkJCSAgQUJPUlRfUAorCQkJfCBBQlNFTlQKIAkJCXwgQUJTT0xVVEVfUAog CQkJfCBBQ0NFU1MKIAkJCXwgQUNUSU9OCkBAIC0xNzM2Niw2ICsxNzY4MCw3IEBAIGJhcmVf bGFiZWxfa2V5d29yZDoKIAkJCXwgRk9MTE9XSU5HCiAJCQl8IEZPUkNFCiAJCQl8IEZPUkVJ R04KKwkJCXwgRk9STUFUCiAJCQl8IEZPUldBUkQKIAkJCXwgRlJFRVpFCiAJCQl8IEZVTEwK QEAgLTE3NDExLDcgKzE3NzI2LDEzIEBAIGJhcmVfbGFiZWxfa2V5d29yZDoKIAkJCXwgSVMK IAkJCXwgSVNPTEFUSU9OCiAJCQl8IEpPSU4KKwkJCXwgSlNPTgorCQkJfCBKU09OX0FSUkFZ CisJCQl8IEpTT05fQVJSQVlBR0cKKwkJCXwgSlNPTl9PQkpFQ1QKKwkJCXwgSlNPTl9PQkpF Q1RBR0cKIAkJCXwgS0VZCisJCQl8IEtFWVMKIAkJCXwgTEFCRUwKIAkJCXwgTEFOR1VBR0UK IAkJCXwgTEFSR0VfUApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4 cHIuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMKaW5kZXggMjMzMTQxNzU1 Mi4uMWUwOTYxN2IzNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4 cHIuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCkBAIC0xNSw2ICsx NSw4IEBACiAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiY2F0YWxvZy9w Z19hZ2dyZWdhdGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJjb21tYW5kcy9kYmNvbW1hbmRzLmgi CiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCkBAIC0zNCw2ICszNiw3IEBACiAjaW5jbHVkZSAi cGFyc2VyL3BhcnNlX3R5cGUuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2lu Y2x1ZGUgInV0aWxzL2RhdGUuaCIKKyNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgogI2lu Y2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5o IgogI2luY2x1ZGUgInV0aWxzL3htbC5oIgpAQCAtNzIsNiArNzUsMTQgQEAgc3RhdGljIE5v ZGUgKnRyYW5zZm9ybVdob2xlUm93UmVmKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIHN0YXRpYyBO b2RlICp0cmFuc2Zvcm1JbmRpcmVjdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIEFfSW5kaXJl Y3Rpb24gKmluZCk7CiBzdGF0aWMgTm9kZSAqdHJhbnNmb3JtVHlwZUNhc3QoUGFyc2VTdGF0 ZSAqcHN0YXRlLCBUeXBlQ2FzdCAqdGMpOwogc3RhdGljIE5vZGUgKnRyYW5zZm9ybUNvbGxh dGVDbGF1c2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBDb2xsYXRlQ2xhdXNlICpjKTsKK3N0YXRp YyBOb2RlICp0cmFuc2Zvcm1Kc29uT2JqZWN0Q29uc3RydWN0b3IoUGFyc2VTdGF0ZSAqcHN0 YXRlLAorCQkJCQkJCQkJCQlKc29uT2JqZWN0Q29uc3RydWN0b3IgKmN0b3IpOworc3RhdGlj IE5vZGUgKnRyYW5zZm9ybUpzb25BcnJheUNvbnN0cnVjdG9yKFBhcnNlU3RhdGUgKnBzdGF0 ZSwKKwkJCQkJCQkJCQkgICBKc29uQXJyYXlDb25zdHJ1Y3RvciAqY3Rvcik7CitzdGF0aWMg Tm9kZSAqdHJhbnNmb3JtSnNvbkFycmF5UXVlcnlDb25zdHJ1Y3RvcihQYXJzZVN0YXRlICpw c3RhdGUsCisJCQkJCQkJCQkJCQlKc29uQXJyYXlRdWVyeUNvbnN0cnVjdG9yICpjdG9yKTsK K3N0YXRpYyBOb2RlICp0cmFuc2Zvcm1Kc29uT2JqZWN0QWdnKFBhcnNlU3RhdGUgKnBzdGF0 ZSwgSnNvbk9iamVjdEFnZyAqYWdnKTsKK3N0YXRpYyBOb2RlICp0cmFuc2Zvcm1Kc29uQXJy YXlBZ2coUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uQXJyYXlBZ2cgKmFnZyk7CiBzdGF0aWMg Tm9kZSAqbWFrZV9yb3dfY29tcGFyaXNvbl9vcChQYXJzZVN0YXRlICpwc3RhdGUsIExpc3Qg Km9wbmFtZSwKIAkJCQkJCQkJCUxpc3QgKmxhcmdzLCBMaXN0ICpyYXJncywgaW50IGxvY2F0 aW9uKTsKIHN0YXRpYyBOb2RlICptYWtlX3Jvd19kaXN0aW5jdF9vcChQYXJzZVN0YXRlICpw c3RhdGUsIExpc3QgKm9wbmFtZSwKQEAgLTI5NCw2ICszMDUsMjYgQEAgdHJhbnNmb3JtRXhw clJlY3Vyc2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpleHByKQogCQkJCWJyZWFrOwog CQkJfQogCisJCWNhc2UgVF9Kc29uT2JqZWN0Q29uc3RydWN0b3I6CisJCQlyZXN1bHQgPSB0 cmFuc2Zvcm1Kc29uT2JqZWN0Q29uc3RydWN0b3IocHN0YXRlLCAoSnNvbk9iamVjdENvbnN0 cnVjdG9yICopIGV4cHIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0pzb25BcnJheUNvbnN0 cnVjdG9yOgorCQkJcmVzdWx0ID0gdHJhbnNmb3JtSnNvbkFycmF5Q29uc3RydWN0b3IocHN0 YXRlLCAoSnNvbkFycmF5Q29uc3RydWN0b3IgKikgZXhwcik7CisJCQlicmVhazsKKworCQlj YXNlIFRfSnNvbkFycmF5UXVlcnlDb25zdHJ1Y3RvcjoKKwkJCXJlc3VsdCA9IHRyYW5zZm9y bUpzb25BcnJheVF1ZXJ5Q29uc3RydWN0b3IocHN0YXRlLCAoSnNvbkFycmF5UXVlcnlDb25z dHJ1Y3RvciAqKSBleHByKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9Kc29uT2JqZWN0QWdn OgorCQkJcmVzdWx0ID0gdHJhbnNmb3JtSnNvbk9iamVjdEFnZyhwc3RhdGUsIChKc29uT2Jq ZWN0QWdnICopIGV4cHIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0pzb25BcnJheUFnZzoK KwkJCXJlc3VsdCA9IHRyYW5zZm9ybUpzb25BcnJheUFnZyhwc3RhdGUsIChKc29uQXJyYXlB Z2cgKikgZXhwcik7CisJCQlicmVhazsKKwogCQlkZWZhdWx0OgogCQkJLyogc2hvdWxkIG5v dCByZWFjaCBoZXJlICovCiAJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIG5vZGUgdHlw ZTogJWQiLCAoaW50KSBub2RlVGFnKGV4cHIpKTsKQEAgLTMwNDcsMyArMzA3OCw3MzggQEAg UGFyc2VFeHByS2luZE5hbWUoUGFyc2VFeHByS2luZCBleHByS2luZCkKIAl9CiAJcmV0dXJu ICJ1bnJlY29nbml6ZWQgZXhwcmVzc2lvbiBraW5kIjsKIH0KKworLyoKKyAqIE1ha2Ugc3Ry aW5nIENvbnN0IG5vZGUgZnJvbSBKU09OIGVuY29kaW5nIG5hbWUuCisgKgorICogVVRGOCBp cyBkZWZhdWx0IGVuY29kaW5nLgorICovCitzdGF0aWMgQ29uc3QgKgorZ2V0SnNvbkVuY29k aW5nQ29uc3QoSnNvbkZvcm1hdCAqZm9ybWF0KQoreworCUpzb25FbmNvZGluZyBlbmNvZGlu ZzsKKwljb25zdCBjaGFyICplbmM7CisJTmFtZQkJZW5jbmFtZSA9IHBhbGxvYyhzaXplb2Yo TmFtZURhdGEpKTsKKworCWlmICghZm9ybWF0IHx8CisJCWZvcm1hdC0+Zm9ybWF0X3R5cGUg PT0gSlNfRk9STUFUX0RFRkFVTFQgfHwKKwkJZm9ybWF0LT5lbmNvZGluZyA9PSBKU19FTkNf REVGQVVMVCkKKwkJZW5jb2RpbmcgPSBKU19FTkNfVVRGODsKKwllbHNlCisJCWVuY29kaW5n ID0gZm9ybWF0LT5lbmNvZGluZzsKKworCXN3aXRjaCAoZW5jb2RpbmcpCisJeworCQljYXNl IEpTX0VOQ19VVEYxNjoKKwkJCWVuYyA9ICJVVEYxNiI7CisJCQlicmVhazsKKwkJY2FzZSBK U19FTkNfVVRGMzI6CisJCQllbmMgPSAiVVRGMzIiOworCQkJYnJlYWs7CisJCWNhc2UgSlNf RU5DX1VURjg6CisJCQllbmMgPSAiVVRGOCI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ CWVsb2coRVJST1IsICJpbnZhbGlkIEpTT04gZW5jb2Rpbmc6ICVkIiwgZW5jb2RpbmcpOwor CQkJYnJlYWs7CisJfQorCisJbmFtZXN0cmNweShlbmNuYW1lLCBlbmMpOworCisJcmV0dXJu IG1ha2VDb25zdChOQU1FT0lELCAtMSwgSW52YWxpZE9pZCwgTkFNRURBVEFMRU4sCisJCQkJ CSBOYW1lR2V0RGF0dW0oZW5jbmFtZSksIGZhbHNlLCBmYWxzZSk7Cit9CisKKy8qCisgKiBN YWtlIGJ5dGVhID0+IHRleHQgY29udmVyc2lvbiB1c2luZyBzcGVjaWZpZWQgSlNPTiBmb3Jt YXQgZW5jb2RpbmcuCisgKi8KK3N0YXRpYyBOb2RlICoKK21ha2VKc29uQnl0ZWFUb1RleHRD b252ZXJzaW9uKE5vZGUgKmV4cHIsIEpzb25Gb3JtYXQgKmZvcm1hdCwgaW50IGxvY2F0aW9u KQoreworCUNvbnN0CSAgICplbmNvZGluZyA9IGdldEpzb25FbmNvZGluZ0NvbnN0KGZvcm1h dCk7CisJRnVuY0V4cHIgICAqZmV4cHIgPSBtYWtlRnVuY0V4cHIoRl9DT05WRVJUX0ZST00s IFRFWFRPSUQsCisJCQkJCQkJCQkgbGlzdF9tYWtlMihleHByLCBlbmNvZGluZyksCisJCQkJ CQkJCQkgSW52YWxpZE9pZCwgSW52YWxpZE9pZCwKKwkJCQkJCQkJCSBDT0VSQ0VfRVhQTElD SVRfQ0FMTCk7CisKKwlmZXhwci0+bG9jYXRpb24gPSBsb2NhdGlvbjsKKworCXJldHVybiAo Tm9kZSAqKSBmZXhwcjsKK30KKworLyoKKyAqIE1ha2UgQ2FzZVRlc3RFeHByIG5vZGUuCisg Ki8KK3N0YXRpYyBOb2RlICoKK21ha2VDYXNlVGVzdEV4cHIoTm9kZSAqZXhwcikKK3sKKwlD YXNlVGVzdEV4cHIgKnBsYWNlaG9sZGVyID0gbWFrZU5vZGUoQ2FzZVRlc3RFeHByKTsKKwor CXBsYWNlaG9sZGVyLT50eXBlSWQgPSBleHByVHlwZShleHByKTsKKwlwbGFjZWhvbGRlci0+ dHlwZU1vZCA9IGV4cHJUeXBtb2QoZXhwcik7CisJcGxhY2Vob2xkZXItPmNvbGxhdGlvbiA9 IGV4cHJDb2xsYXRpb24oZXhwcik7CisKKwlyZXR1cm4gKE5vZGUgKikgcGxhY2Vob2xkZXI7 Cit9CisKKy8qCisgKiBUcmFuc2Zvcm0gSlNPTiB2YWx1ZSBleHByZXNzaW9uIHVzaW5nIHNw ZWNpZmllZCBpbnB1dCBKU09OIGZvcm1hdCBvcgorICogZGVmYXVsdCBmb3JtYXQgb3RoZXJ3 aXNlLgorICovCitzdGF0aWMgTm9kZSAqCit0cmFuc2Zvcm1Kc29uVmFsdWVFeHByKFBhcnNl U3RhdGUgKnBzdGF0ZSwgSnNvblZhbHVlRXhwciAqdmUsCisJCQkJCSAgIEpzb25Gb3JtYXRU eXBlIGRlZmF1bHRfZm9ybWF0KQoreworCU5vZGUJICAgKmV4cHIgPSB0cmFuc2Zvcm1FeHBy UmVjdXJzZShwc3RhdGUsIChOb2RlICopIHZlLT5yYXdfZXhwcik7CisJTm9kZQkgICAqcmF3 ZXhwcjsKKwlKc29uRm9ybWF0VHlwZSBmb3JtYXQ7CisJT2lkCQkJZXhwcnR5cGU7CisJaW50 CQkJbG9jYXRpb247CisJY2hhcgkJdHlwY2F0ZWdvcnk7CisJYm9vbAkJdHlwaXNwcmVmZXJy ZWQ7CisKKwlpZiAoZXhwclR5cGUoZXhwcikgPT0gVU5LTk9XTk9JRCkKKwkJZXhwciA9IGNv ZXJjZV90b19zcGVjaWZpY190eXBlKHBzdGF0ZSwgZXhwciwgVEVYVE9JRCwgIkpTT05fVkFM VUVfRVhQUiIpOworCisJcmF3ZXhwciA9IGV4cHI7CisJZXhwcnR5cGUgPSBleHByVHlwZShl eHByKTsKKwlsb2NhdGlvbiA9IGV4cHJMb2NhdGlvbihleHByKTsKKworCWdldF90eXBlX2Nh dGVnb3J5X3ByZWZlcnJlZChleHBydHlwZSwgJnR5cGNhdGVnb3J5LCAmdHlwaXNwcmVmZXJy ZWQpOworCisJaWYgKHZlLT5mb3JtYXQtPmZvcm1hdF90eXBlICE9IEpTX0ZPUk1BVF9ERUZB VUxUKQorCXsKKwkJaWYgKHZlLT5mb3JtYXQtPmVuY29kaW5nICE9IEpTX0VOQ19ERUZBVUxU ICYmIGV4cHJ0eXBlICE9IEJZVEVBT0lEKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVy cmNvZGUoRVJSQ09ERV9EQVRBVFlQRV9NSVNNQVRDSCksCisJCQkJCSBlcnJtc2coIkpTT04g RU5DT0RJTkcgY2xhdXNlIGlzIG9ubHkgYWxsb3dlZCBmb3IgYnl0ZWEgaW5wdXQgdHlwZSIp LAorCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgdmUtPmZvcm1hdC0+bG9jYXRp b24pKSk7CisKKwkJaWYgKGV4cHJ0eXBlID09IEpTT05PSUQgfHwgZXhwcnR5cGUgPT0gSlNP TkJPSUQpCisJCXsKKwkJCWZvcm1hdCA9IEpTX0ZPUk1BVF9ERUZBVUxUOyAvKiBkbyBub3Qg Zm9ybWF0IGpzb25bYl0gdHlwZXMgKi8KKwkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJKGVy cm1zZygiRk9STUFUIEpTT04gaGFzIG5vIGVmZmVjdCBmb3IganNvbiBhbmQganNvbmIgdHlw ZXMiKSwKKwkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIHZlLT5mb3JtYXQtPmxv Y2F0aW9uKSkpOworCQl9CisJCWVsc2UKKwkJCWZvcm1hdCA9IHZlLT5mb3JtYXQtPmZvcm1h dF90eXBlOworCX0KKwllbHNlIGlmIChleHBydHlwZSA9PSBKU09OT0lEIHx8IGV4cHJ0eXBl ID09IEpTT05CT0lEKQorCQlmb3JtYXQgPSBKU19GT1JNQVRfREVGQVVMVDsgLyogZG8gbm90 IGZvcm1hdCBqc29uW2JdIHR5cGVzICovCisJZWxzZQorCQlmb3JtYXQgPSBkZWZhdWx0X2Zv cm1hdDsKKworCWlmIChmb3JtYXQgIT0gSlNfRk9STUFUX0RFRkFVTFQpCisJeworCQlPaWQJ CQl0YXJnZXR0eXBlID0gZm9ybWF0ID09IEpTX0ZPUk1BVF9KU09OQiA/IEpTT05CT0lEIDog SlNPTk9JRDsKKwkJTm9kZQkgICAqb3JpZyA9IG1ha2VDYXNlVGVzdEV4cHIoZXhwcik7CisJ CU5vZGUJICAgKmNvZXJjZWQ7CisKKwkJZXhwciA9IG9yaWc7CisKKwkJaWYgKGV4cHJ0eXBl ICE9IEJZVEVBT0lEICYmIHR5cGNhdGVnb3J5ICE9IFRZUENBVEVHT1JZX1NUUklORykKKwkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQVRZUEVfTUlTTUFU Q0gpLAorCQkJCQkgZXJybXNnKHZlLT5mb3JtYXQtPmZvcm1hdF90eXBlID09IEpTX0ZPUk1B VF9ERUZBVUxUID8KKwkJCQkJCQkiY2Fubm90IHVzZSBub24tc3RyaW5nIHR5cGVzIHdpdGgg aW1wbGljaXQgRk9STUFUIEpTT04gY2xhdXNlIiA6CisJCQkJCQkJImNhbm5vdCB1c2Ugbm9u LXN0cmluZyB0eXBlcyB3aXRoIGV4cGxpY2l0IEZPUk1BVCBKU09OIGNsYXVzZSIpLAorCQkJ CQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgdmUtPmZvcm1hdC0+bG9jYXRpb24gPj0g MCA/CisJCQkJCQkJCQkJdmUtPmZvcm1hdC0+bG9jYXRpb24gOiBsb2NhdGlvbikpKTsKKwor CQkvKiBDb252ZXJ0IGVuY29kZWQgSlNPTiB0ZXh0IGZyb20gYnl0ZWEuICovCisJCWlmIChm b3JtYXQgPT0gSlNfRk9STUFUX0pTT04gJiYgZXhwcnR5cGUgPT0gQllURUFPSUQpCisJCXsK KwkJCWV4cHIgPSBtYWtlSnNvbkJ5dGVhVG9UZXh0Q29udmVyc2lvbihleHByLCB2ZS0+Zm9y bWF0LCBsb2NhdGlvbik7CisJCQlleHBydHlwZSA9IFRFWFRPSUQ7CisJCX0KKworCQkvKiBU cnkgdG8gY29lcmNlIHRvIHRoZSB0YXJnZXQgdHlwZS4gKi8KKwkJY29lcmNlZCA9IGNvZXJj ZV90b190YXJnZXRfdHlwZShwc3RhdGUsIGV4cHIsIGV4cHJ0eXBlLAorCQkJCQkJCQkJCXRh cmdldHR5cGUsIC0xLAorCQkJCQkJCQkJCUNPRVJDSU9OX0VYUExJQ0lULAorCQkJCQkJCQkJ CUNPRVJDRV9FWFBMSUNJVF9DQVNULAorCQkJCQkJCQkJCWxvY2F0aW9uKTsKKworCQlpZiAo IWNvZXJjZWQpCisJCXsKKwkJCS8qIElmIGNvZXJjaW9uIGZhaWxlZCwgdXNlIHRvX2pzb24o KS90b19qc29uYigpIGZ1bmN0aW9ucy4gKi8KKwkJCU9pZAkJCWZub2lkID0gdGFyZ2V0dHlw ZSA9PSBKU09OT0lEID8gRl9UT19KU09OIDogRl9UT19KU09OQjsKKwkJCUZ1bmNFeHByICAg KmZleHByID0gbWFrZUZ1bmNFeHByKGZub2lkLCB0YXJnZXR0eXBlLAorCQkJCQkJCQkJCQkg bGlzdF9tYWtlMShleHByKSwKKwkJCQkJCQkJCQkJIEludmFsaWRPaWQsIEludmFsaWRPaWQs CisJCQkJCQkJCQkJCSBDT0VSQ0VfRVhQTElDSVRfQ0FMTCk7CisKKwkJCWZleHByLT5sb2Nh dGlvbiA9IGxvY2F0aW9uOworCisJCQljb2VyY2VkID0gKE5vZGUgKikgZmV4cHI7CisJCX0K KworCQlpZiAoY29lcmNlZCA9PSBvcmlnKQorCQkJZXhwciA9IHJhd2V4cHI7CisJCWVsc2UK KwkJeworCQkJdmUgPSBjb3B5T2JqZWN0KHZlKTsKKwkJCXZlLT5yYXdfZXhwciA9IChFeHBy ICopIHJhd2V4cHI7CisJCQl2ZS0+Zm9ybWF0dGVkX2V4cHIgPSAoRXhwciAqKSBjb2VyY2Vk OworCisJCQlleHByID0gKE5vZGUgKikgdmU7CisJCX0KKwl9CisKKwlyZXR1cm4gZXhwcjsK K30KKworLyoKKyAqIENoZWNrcyBzcGVjaWZpZWQgb3V0cHV0IGZvcm1hdCBmb3IgaXRzIGFw cGxpY2FiaWxpdHkgdG8gdGhlIHRhcmdldCB0eXBlLgorICovCitzdGF0aWMgdm9pZAorY2hl Y2tKc29uT3V0cHV0Rm9ybWF0KFBhcnNlU3RhdGUgKnBzdGF0ZSwgY29uc3QgSnNvbkZvcm1h dCAqZm9ybWF0LAorCQkJCQkgIE9pZCB0YXJnZXR0eXBlLCBib29sIGFsbG93X2Zvcm1hdF9m b3Jfbm9uX3N0cmluZ3MpCit7CisJaWYgKCFhbGxvd19mb3JtYXRfZm9yX25vbl9zdHJpbmdz ICYmCisJCWZvcm1hdC0+Zm9ybWF0X3R5cGUgIT0gSlNfRk9STUFUX0RFRkFVTFQgJiYKKwkJ KHRhcmdldHR5cGUgIT0gQllURUFPSUQgJiYKKwkJIHRhcmdldHR5cGUgIT0gSlNPTk9JRCAm JgorCQkgdGFyZ2V0dHlwZSAhPSBKU09OQk9JRCkpCisJeworCQljaGFyCQl0eXBjYXRlZ29y eTsKKwkJYm9vbAkJdHlwaXNwcmVmZXJyZWQ7CisKKwkJZ2V0X3R5cGVfY2F0ZWdvcnlfcHJl ZmVycmVkKHRhcmdldHR5cGUsICZ0eXBjYXRlZ29yeSwgJnR5cGlzcHJlZmVycmVkKTsKKwor CQlpZiAodHlwY2F0ZWdvcnkgIT0gVFlQQ0FURUdPUllfU1RSSU5HKQorCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAor CQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgZm9ybWF0LT5sb2NhdGlvbiksCisJ CQkJCSBlcnJtc2coImNhbm5vdCB1c2UgSlNPTiBmb3JtYXQgd2l0aCBub24tc3RyaW5nIG91 dHB1dCB0eXBlcyIpKSk7CisJfQorCisJaWYgKGZvcm1hdC0+Zm9ybWF0X3R5cGUgPT0gSlNf Rk9STUFUX0pTT04pCisJeworCQlKc29uRW5jb2RpbmcgZW5jID0gZm9ybWF0LT5lbmNvZGlu ZyAhPSBKU19FTkNfREVGQVVMVCA/CisJCWZvcm1hdC0+ZW5jb2RpbmcgOiBKU19FTkNfVVRG ODsKKworCQlpZiAodGFyZ2V0dHlwZSAhPSBCWVRFQU9JRCAmJgorCQkJZm9ybWF0LT5lbmNv ZGluZyAhPSBKU19FTkNfREVGQVVMVCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJj b2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJIHBhcnNlcl9lcnJw b3NpdGlvbihwc3RhdGUsIGZvcm1hdC0+bG9jYXRpb24pLAorCQkJCQkgZXJybXNnKCJjYW5u b3Qgc2V0IEpTT04gZW5jb2RpbmcgZm9yIG5vbi1ieXRlYSBvdXRwdXQgdHlwZXMiKSkpOwor CisJCWlmIChlbmMgIT0gSlNfRU5DX1VURjgpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQko ZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJCSBlcnJtc2co InVuc3VwcG9ydGVkIEpTT04gZW5jb2RpbmciKSwKKwkJCQkJIGVycmhpbnQoIk9ubHkgVVRG OCBKU09OIGVuY29kaW5nIGlzIHN1cHBvcnRlZC4iKSwKKwkJCQkJIHBhcnNlcl9lcnJwb3Np dGlvbihwc3RhdGUsIGZvcm1hdC0+bG9jYXRpb24pKSk7CisJfQorfQorCisvKgorICogVHJh bnNmb3JtIEpTT04gb3V0cHV0IGNsYXVzZS4KKyAqCisgKiBBc3NpZ25zIHRhcmdldCB0eXBl IG9pZCBhbmQgbW9kaWZpZXIuCisgKiBBc3NpZ25zIGRlZmF1bHQgZm9ybWF0IG9yIGNoZWNr cyBzcGVjaWZpZWQgZm9ybWF0IGZvciBpdHMgYXBwbGljYWJpbGl0eSB0bworICogdGhlIHRh cmdldCB0eXBlLgorICovCitzdGF0aWMgSnNvblJldHVybmluZyAqCit0cmFuc2Zvcm1Kc29u T3V0cHV0KFBhcnNlU3RhdGUgKnBzdGF0ZSwgY29uc3QgSnNvbk91dHB1dCAqb3V0cHV0LAor CQkJCQlib29sIGFsbG93X2Zvcm1hdCkKK3sKKwlKc29uUmV0dXJuaW5nICpyZXQ7CisKKwkv KiBpZiBvdXRwdXQgY2xhdXNlIGlzIG5vdCBzcGVjaWZpZWQsIG1ha2UgZGVmYXVsdCBjbGF1 c2UgdmFsdWUgKi8KKwlpZiAoIW91dHB1dCkKKwl7CisJCXJldCA9IG1ha2VOb2RlKEpzb25S ZXR1cm5pbmcpOworCisJCXJldC0+Zm9ybWF0ID0gbWFrZUpzb25Gb3JtYXQoSlNfRk9STUFU X0RFRkFVTFQsIEpTX0VOQ19ERUZBVUxULCAtMSk7CisJCXJldC0+dHlwaWQgPSBJbnZhbGlk T2lkOworCQlyZXQtPnR5cG1vZCA9IC0xOworCisJCXJldHVybiByZXQ7CisJfQorCisJcmV0 ID0gY29weU9iamVjdChvdXRwdXQtPnJldHVybmluZyk7CisKKwl0eXBlbmFtZVR5cGVJZEFu ZE1vZChwc3RhdGUsIG91dHB1dC0+dHlwZU5hbWUsICZyZXQtPnR5cGlkLCAmcmV0LT50eXBt b2QpOworCisJaWYgKG91dHB1dC0+dHlwZU5hbWUtPnNldG9mKQorCQllcmVwb3J0KEVSUk9S LAorCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkg ZXJybXNnKCJyZXR1cm5pbmcgU0VUT0YgdHlwZXMgaXMgbm90IHN1cHBvcnRlZCBpbiBTUUwv SlNPTiBmdW5jdGlvbnMiKSkpOworCisJaWYgKHJldC0+Zm9ybWF0LT5mb3JtYXRfdHlwZSA9 PSBKU19GT1JNQVRfREVGQVVMVCkKKwkJLyogYXNzaWduIEpTT05CIGZvcm1hdCB3aGVuIHJl dHVybmluZyBqc29uYiwgb3IgSlNPTiBmb3JtYXQgb3RoZXJ3aXNlICovCisJCXJldC0+Zm9y bWF0LT5mb3JtYXRfdHlwZSA9CisJCQlyZXQtPnR5cGlkID09IEpTT05CT0lEID8gSlNfRk9S TUFUX0pTT05CIDogSlNfRk9STUFUX0pTT047CisJZWxzZQorCQljaGVja0pzb25PdXRwdXRG b3JtYXQocHN0YXRlLCByZXQtPmZvcm1hdCwgcmV0LT50eXBpZCwgYWxsb3dfZm9ybWF0KTsK KworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUcmFuc2Zvcm0gSlNPTiBvdXRwdXQgY2xh dXNlIG9mIEpTT04gY29uc3RydWN0b3IgZnVuY3Rpb25zLgorICoKKyAqIERlcml2ZSBSRVRV Uk5JTkcgdHlwZSwgaWYgbm90IHNwZWNpZmllZCwgZnJvbSBhcmd1bWVudCB0eXBlcy4KKyAq Lworc3RhdGljIEpzb25SZXR1cm5pbmcgKgordHJhbnNmb3JtSnNvbkNvbnN0cnVjdG9yT3V0 cHV0KFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbk91dHB1dCAqb3V0cHV0LAorCQkJCQkJCSAg IExpc3QgKmFyZ3MpCit7CisJSnNvblJldHVybmluZyAqcmV0dXJuaW5nID0gdHJhbnNmb3Jt SnNvbk91dHB1dChwc3RhdGUsIG91dHB1dCwgdHJ1ZSk7CisKKwlpZiAoIU9pZElzVmFsaWQo cmV0dXJuaW5nLT50eXBpZCkpCisJeworCQlMaXN0Q2VsbCAgICpsYzsKKwkJYm9vbAkJaGF2 ZV9qc29uYiA9IGZhbHNlOworCisJCWZvcmVhY2gobGMsIGFyZ3MpCisJCXsKKwkJCU5vZGUJ ICAgKmV4cHIgPSBsZmlyc3QobGMpOworCQkJT2lkCQkJdHlwaWQgPSBleHByVHlwZShleHBy KTsKKworCQkJaGF2ZV9qc29uYiB8PSB0eXBpZCA9PSBKU09OQk9JRDsKKworCQkJaWYgKGhh dmVfanNvbmIpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaGF2ZV9qc29uYikKKwkJewor CQkJcmV0dXJuaW5nLT50eXBpZCA9IEpTT05CT0lEOworCQkJcmV0dXJuaW5nLT5mb3JtYXQt PmZvcm1hdF90eXBlID0gSlNfRk9STUFUX0pTT05COworCQl9CisJCWVsc2UKKwkJeworCQkJ LyogWFhYIFRFWFQgaXMgZGVmYXVsdCBieSB0aGUgc3RhbmRhcmQsIGJ1dCB3ZSByZXR1cm4g SlNPTiAqLworCQkJcmV0dXJuaW5nLT50eXBpZCA9IEpTT05PSUQ7CisJCQlyZXR1cm5pbmct PmZvcm1hdC0+Zm9ybWF0X3R5cGUgPSBKU19GT1JNQVRfSlNPTjsKKwkJfQorCisJCXJldHVy bmluZy0+dHlwbW9kID0gLTE7CisJfQorCisJcmV0dXJuIHJldHVybmluZzsKK30KKworLyoK KyAqIENvZXJjZSBqc29uW2JdLXZhbHVlZCBmdW5jdGlvbiBleHByZXNzaW9uIHRvIHRoZSBv dXRwdXQgdHlwZS4KKyAqLworc3RhdGljIE5vZGUgKgorY29lcmNlSnNvbkZ1bmNFeHByKFBh cnNlU3RhdGUgKnBzdGF0ZSwgTm9kZSAqZXhwciwKKwkJCQkgICBjb25zdCBKc29uUmV0dXJu aW5nICpyZXR1cm5pbmcsIGJvb2wgcmVwb3J0X2Vycm9yKQoreworCU5vZGUJICAgKnJlczsK KwlpbnQJCQlsb2NhdGlvbjsKKwlPaWQJCQlleHBydHlwZSA9IGV4cHJUeXBlKGV4cHIpOwor CisJLyogaWYgb3V0cHV0IHR5cGUgaXMgbm90IHNwZWNpZmllZCBvciBlcXVhbHMgdG8gZnVu Y3Rpb24gdHlwZSwgcmV0dXJuICovCisJaWYgKCFPaWRJc1ZhbGlkKHJldHVybmluZy0+dHlw aWQpIHx8IHJldHVybmluZy0+dHlwaWQgPT0gZXhwcnR5cGUpCisJCXJldHVybiBleHByOwor CisJbG9jYXRpb24gPSBleHByTG9jYXRpb24oZXhwcik7CisKKwlpZiAobG9jYXRpb24gPCAw KQorCQlsb2NhdGlvbiA9IHJldHVybmluZy0+Zm9ybWF0LT5sb2NhdGlvbjsKKworCS8qIHNw ZWNpYWwgY2FzZSBmb3IgUkVUVVJOSU5HIGJ5dGVhIEZPUk1BVCBqc29uICovCisJaWYgKHJl dHVybmluZy0+Zm9ybWF0LT5mb3JtYXRfdHlwZSA9PSBKU19GT1JNQVRfSlNPTiAmJgorCQly ZXR1cm5pbmctPnR5cGlkID09IEJZVEVBT0lEKQorCXsKKwkJLyogZW5jb2RlIGpzb24gdGV4 dCBpbnRvIGJ5dGVhIHVzaW5nIHBnX2NvbnZlcnRfdG8oKSAqLworCQlOb2RlCSAgICp0ZXhw ciA9IGNvZXJjZV90b19zcGVjaWZpY190eXBlKHBzdGF0ZSwgZXhwciwgVEVYVE9JRCwKKwkJ CQkJCQkJCQkJCQkiSlNPTl9GVU5DVElPTiIpOworCQlDb25zdAkgICAqZW5jID0gZ2V0SnNv bkVuY29kaW5nQ29uc3QocmV0dXJuaW5nLT5mb3JtYXQpOworCQlGdW5jRXhwciAgICpmZXhw ciA9IG1ha2VGdW5jRXhwcihGX0NPTlZFUlRfVE8sIEJZVEVBT0lELAorCQkJCQkJCQkJCSBs aXN0X21ha2UyKHRleHByLCBlbmMpLAorCQkJCQkJCQkJCSBJbnZhbGlkT2lkLCBJbnZhbGlk T2lkLAorCQkJCQkJCQkJCSBDT0VSQ0VfRVhQTElDSVRfQ0FMTCk7CisKKwkJZmV4cHItPmxv Y2F0aW9uID0gbG9jYXRpb247CisKKwkJcmV0dXJuIChOb2RlICopIGZleHByOworCX0KKwor CS8qIHRyeSB0byBjb2VyY2UgZXhwcmVzc2lvbiB0byB0aGUgb3V0cHV0IHR5cGUgKi8KKwly ZXMgPSBjb2VyY2VfdG9fdGFyZ2V0X3R5cGUocHN0YXRlLCBleHByLCBleHBydHlwZSwKKwkJ CQkJCQkJcmV0dXJuaW5nLT50eXBpZCwgcmV0dXJuaW5nLT50eXBtb2QsCisJLyogWFhYIHRo cm93aW5nIGVycm9ycyB3aGVuIGNhc3RpbmcgdG8gY2hhcihOKSAqLworCQkJCQkJCQlDT0VS Q0lPTl9FWFBMSUNJVCwKKwkJCQkJCQkJQ09FUkNFX0VYUExJQ0lUX0NBU1QsCisJCQkJCQkJ CWxvY2F0aW9uKTsKKworCWlmICghcmVzICYmIHJlcG9ydF9lcnJvcikKKwkJZXJlcG9ydChF UlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0NBTk5PVF9DT0VSQ0UpLAorCQkJCSBlcnJt c2coImNhbm5vdCBjYXN0IHR5cGUgJXMgdG8gJXMiLAorCQkJCQkJZm9ybWF0X3R5cGVfYmUo ZXhwcnR5cGUpLAorCQkJCQkJZm9ybWF0X3R5cGVfYmUocmV0dXJuaW5nLT50eXBpZCkpLAor CQkJCSBwYXJzZXJfY29lcmNpb25fZXJycG9zaXRpb24ocHN0YXRlLCBsb2NhdGlvbiwgZXhw cikpKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBOb2RlICoKK21ha2VKc29uQ29u c3RydWN0b3JFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkNvbnN0cnVjdG9yVHlwZSB0 eXBlLAorCQkJCQkJTGlzdCAqYXJncywgRXhwciAqZmV4cHIsIEpzb25SZXR1cm5pbmcgKnJl dHVybmluZywKKwkJCQkJCWJvb2wgdW5pcXVlLCBib29sIGFic2VudF9vbl9udWxsLCBpbnQg bG9jYXRpb24pCit7CisJSnNvbkNvbnN0cnVjdG9yRXhwciAqanNjdG9yID0gbWFrZU5vZGUo SnNvbkNvbnN0cnVjdG9yRXhwcik7CisJTm9kZQkgICAqcGxhY2Vob2xkZXI7CisJTm9kZQkg ICAqY29lcmNpb247CisJT2lkCQkJaW50ZXJtZWRpYXRlX3R5cGlkID0KKwlyZXR1cm5pbmct PmZvcm1hdC0+Zm9ybWF0X3R5cGUgPT0gSlNfRk9STUFUX0pTT05CID8gSlNPTkJPSUQgOiBK U09OT0lEOworCisJanNjdG9yLT5hcmdzID0gYXJnczsKKwlqc2N0b3ItPmZ1bmMgPSBmZXhw cjsKKwlqc2N0b3ItPnR5cGUgPSB0eXBlOworCWpzY3Rvci0+cmV0dXJuaW5nID0gcmV0dXJu aW5nOworCWpzY3Rvci0+dW5pcXVlID0gdW5pcXVlOworCWpzY3Rvci0+YWJzZW50X29uX251 bGwgPSBhYnNlbnRfb25fbnVsbDsKKwlqc2N0b3ItPmxvY2F0aW9uID0gbG9jYXRpb247CisK KwlpZiAoZmV4cHIpCisJCXBsYWNlaG9sZGVyID0gbWFrZUNhc2VUZXN0RXhwcigoTm9kZSAq KSBmZXhwcik7CisJZWxzZQorCXsKKwkJQ2FzZVRlc3RFeHByICpjdGUgPSBtYWtlTm9kZShD YXNlVGVzdEV4cHIpOworCisJCWN0ZS0+dHlwZUlkID0gaW50ZXJtZWRpYXRlX3R5cGlkOwor CQljdGUtPnR5cGVNb2QgPSAtMTsKKwkJY3RlLT5jb2xsYXRpb24gPSBJbnZhbGlkT2lkOwor CisJCXBsYWNlaG9sZGVyID0gKE5vZGUgKikgY3RlOworCX0KKworCWNvZXJjaW9uID0gY29l cmNlSnNvbkZ1bmNFeHByKHBzdGF0ZSwgcGxhY2Vob2xkZXIsIHJldHVybmluZywgdHJ1ZSk7 CisKKwlpZiAoY29lcmNpb24gIT0gcGxhY2Vob2xkZXIpCisJCWpzY3Rvci0+Y29lcmNpb24g PSAoRXhwciAqKSBjb2VyY2lvbjsKKworCXJldHVybiAoTm9kZSAqKSBqc2N0b3I7Cit9CisK Ky8qCisgKiBUcmFuc2Zvcm0gSlNPTl9PQkpFQ1QoKSBjb25zdHJ1Y3Rvci4KKyAqCisgKiBK U09OX09CSkVDVCgpIGlzIHRyYW5zZm9ybWVkIGludG8ganNvbltiXV9idWlsZF9vYmplY3Rb X2V4dF0oKSBjYWxsCisgKiBkZXBlbmRpbmcgb24gdGhlIG91dHB1dCBKU09OIGZvcm1hdC4g VGhlIGZpcnN0IHR3byBhcmd1bWVudHMgb2YKKyAqIGpzb25bYl1fYnVpbGRfb2JqZWN0X2V4 dCgpIGFyZSBhYnNlbnRfb25fbnVsbCBhbmQgY2hlY2tfa2V5X3VuaXF1ZW5lc3MuCisgKgor ICogVGhlbiBmdW5jdGlvbiBjYWxsIHJlc3VsdCBpcyBjb2VyY2VkIHRvIHRoZSB0YXJnZXQg dHlwZS4KKyAqLworc3RhdGljIE5vZGUgKgordHJhbnNmb3JtSnNvbk9iamVjdENvbnN0cnVj dG9yKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbk9iamVjdENvbnN0cnVjdG9yICpjdG9yKQor eworCUpzb25SZXR1cm5pbmcgKnJldHVybmluZzsKKwlMaXN0CSAgICphcmdzID0gTklMOwor CisJLyogdHJhbnNmb3JtIGtleS12YWx1ZSBwYWlycywgaWYgYW55ICovCisJaWYgKGN0b3It PmV4cHJzKQorCXsKKwkJTGlzdENlbGwgICAqbGM7CisKKwkJLyogdHJhbnNmb3JtIGFuZCBh cHBlbmQga2V5LXZhbHVlIGFyZ3VtZW50cyAqLworCQlmb3JlYWNoKGxjLCBjdG9yLT5leHBy cykKKwkJeworCQkJSnNvbktleVZhbHVlICprdiA9IGNhc3ROb2RlKEpzb25LZXlWYWx1ZSwg bGZpcnN0KGxjKSk7CisJCQlOb2RlCSAgICprZXkgPSB0cmFuc2Zvcm1FeHByUmVjdXJzZShw c3RhdGUsIChOb2RlICopIGt2LT5rZXkpOworCQkJTm9kZQkgICAqdmFsID0gdHJhbnNmb3Jt SnNvblZhbHVlRXhwcihwc3RhdGUsIGt2LT52YWx1ZSwKKwkJCQkJCQkJCQkJCQkgSlNfRk9S TUFUX0RFRkFVTFQpOworCisJCQlhcmdzID0gbGFwcGVuZChhcmdzLCBrZXkpOworCQkJYXJn cyA9IGxhcHBlbmQoYXJncywgdmFsKTsKKwkJfQorCX0KKworCXJldHVybmluZyA9IHRyYW5z Zm9ybUpzb25Db25zdHJ1Y3Rvck91dHB1dChwc3RhdGUsIGN0b3ItPm91dHB1dCwgYXJncyk7 CisKKwlyZXR1cm4gbWFrZUpzb25Db25zdHJ1Y3RvckV4cHIocHN0YXRlLCBKU0NUT1JfSlNP Tl9PQkpFQ1QsIGFyZ3MsIE5VTEwsCisJCQkJCQkJCSAgIHJldHVybmluZywgY3Rvci0+dW5p cXVlLAorCQkJCQkJCQkgICBjdG9yLT5hYnNlbnRfb25fbnVsbCwgY3Rvci0+bG9jYXRpb24p OworfQorCisvKgorICogVHJhbnNmb3JtIEpTT05fQVJSQVkocXVlcnkgW0ZPUk1BVF0gW1JF VFVSTklOR10gW09OIE5VTExdKSBpbnRvCisgKiAgKFNFTEVDVCAgSlNPTl9BUlJBWUFHRyhh ICBbRk9STUFUXSBbUkVUVVJOSU5HXSBbT04gTlVMTF0pIEZST00gKHF1ZXJ5KSBxKGEpKQor ICovCitzdGF0aWMgTm9kZSAqCit0cmFuc2Zvcm1Kc29uQXJyYXlRdWVyeUNvbnN0cnVjdG9y KFBhcnNlU3RhdGUgKnBzdGF0ZSwKKwkJCQkJCQkJICAgSnNvbkFycmF5UXVlcnlDb25zdHJ1 Y3RvciAqY3RvcikKK3sKKwlTdWJMaW5rICAgICpzdWJsaW5rID0gbWFrZU5vZGUoU3ViTGlu ayk7CisJU2VsZWN0U3RtdCAqc2VsZWN0ID0gbWFrZU5vZGUoU2VsZWN0U3RtdCk7CisJUmFu Z2VTdWJzZWxlY3QgKnJhbmdlID0gbWFrZU5vZGUoUmFuZ2VTdWJzZWxlY3QpOworCUFsaWFz CSAgICphbGlhcyA9IG1ha2VOb2RlKEFsaWFzKTsKKwlSZXNUYXJnZXQgICp0YXJnZXQgPSBt YWtlTm9kZShSZXNUYXJnZXQpOworCUpzb25BcnJheUFnZyAqYWdnID0gbWFrZU5vZGUoSnNv bkFycmF5QWdnKTsKKwlDb2x1bW5SZWYgICpjb2xyZWYgPSBtYWtlTm9kZShDb2x1bW5SZWYp OworCVF1ZXJ5CSAgICpxdWVyeTsKKwlQYXJzZVN0YXRlICpxcHN0YXRlOworCisJLyogVHJh bnNmb3JtIHF1ZXJ5IG9ubHkgZm9yIGNvdW50aW5nIHRhcmdldCBsaXN0IGVudHJpZXMuICov CisJcXBzdGF0ZSA9IG1ha2VfcGFyc2VzdGF0ZShwc3RhdGUpOworCisJcXVlcnkgPSB0cmFu c2Zvcm1TdG10KHFwc3RhdGUsIGN0b3ItPnF1ZXJ5KTsKKworCWlmIChjb3VudF9ub25qdW5r X3RsaXN0X2VudHJpZXMocXVlcnktPnRhcmdldExpc3QpICE9IDEpCisJCWVyZXBvcnQoRVJS T1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCSBlcnJtc2co InN1YnF1ZXJ5IG11c3QgcmV0dXJuIG9ubHkgb25lIGNvbHVtbiIpLAorCQkJCSBwYXJzZXJf ZXJycG9zaXRpb24ocHN0YXRlLCBjdG9yLT5sb2NhdGlvbikpKTsKKworCWZyZWVfcGFyc2Vz dGF0ZShxcHN0YXRlKTsKKworCWNvbHJlZi0+ZmllbGRzID0gbGlzdF9tYWtlMihtYWtlU3Ry aW5nKHBzdHJkdXAoInEiKSksCisJCQkJCQkJCW1ha2VTdHJpbmcocHN0cmR1cCgiYSIpKSk7 CisJY29scmVmLT5sb2NhdGlvbiA9IGN0b3ItPmxvY2F0aW9uOworCisJYWdnLT5hcmcgPSBt YWtlSnNvblZhbHVlRXhwcigoRXhwciAqKSBjb2xyZWYsIGN0b3ItPmZvcm1hdCk7CisJYWdn LT5hYnNlbnRfb25fbnVsbCA9IGN0b3ItPmFic2VudF9vbl9udWxsOworCWFnZy0+Y29uc3Ry dWN0b3IgPSBtYWtlTm9kZShKc29uQWdnQ29uc3RydWN0b3IpOworCWFnZy0+Y29uc3RydWN0 b3ItPmFnZ19vcmRlciA9IE5JTDsKKwlhZ2ctPmNvbnN0cnVjdG9yLT5vdXRwdXQgPSBjdG9y LT5vdXRwdXQ7CisJYWdnLT5jb25zdHJ1Y3Rvci0+bG9jYXRpb24gPSBjdG9yLT5sb2NhdGlv bjsKKworCXRhcmdldC0+bmFtZSA9IE5VTEw7CisJdGFyZ2V0LT5pbmRpcmVjdGlvbiA9IE5J TDsKKwl0YXJnZXQtPnZhbCA9IChOb2RlICopIGFnZzsKKwl0YXJnZXQtPmxvY2F0aW9uID0g Y3Rvci0+bG9jYXRpb247CisKKwlhbGlhcy0+YWxpYXNuYW1lID0gcHN0cmR1cCgicSIpOwor CWFsaWFzLT5jb2xuYW1lcyA9IGxpc3RfbWFrZTEobWFrZVN0cmluZyhwc3RyZHVwKCJhIikp KTsKKworCXJhbmdlLT5sYXRlcmFsID0gZmFsc2U7CisJcmFuZ2UtPnN1YnF1ZXJ5ID0gY3Rv ci0+cXVlcnk7CisJcmFuZ2UtPmFsaWFzID0gYWxpYXM7CisKKwlzZWxlY3QtPnRhcmdldExp c3QgPSBsaXN0X21ha2UxKHRhcmdldCk7CisJc2VsZWN0LT5mcm9tQ2xhdXNlID0gbGlzdF9t YWtlMShyYW5nZSk7CisKKwlzdWJsaW5rLT5zdWJMaW5rVHlwZSA9IEVYUFJfU1VCTElOSzsK KwlzdWJsaW5rLT5zdWJMaW5rSWQgPSAwOworCXN1YmxpbmstPnRlc3RleHByID0gTlVMTDsK KwlzdWJsaW5rLT5vcGVyTmFtZSA9IE5JTDsKKwlzdWJsaW5rLT5zdWJzZWxlY3QgPSAoTm9k ZSAqKSBzZWxlY3Q7CisJc3VibGluay0+bG9jYXRpb24gPSBjdG9yLT5sb2NhdGlvbjsKKwor CXJldHVybiB0cmFuc2Zvcm1FeHByUmVjdXJzZShwc3RhdGUsIChOb2RlICopIHN1Ymxpbmsp OworfQorCisvKgorICogQ29tbW9uIGNvZGUgZm9yIEpTT05fT0JKRUNUQUdHIGFuZCBKU09O X0FSUkFZQUdHIHRyYW5zZm9ybWF0aW9uLgorICovCitzdGF0aWMgTm9kZSAqCit0cmFuc2Zv cm1Kc29uQWdnQ29uc3RydWN0b3IoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uQWdnQ29uc3Ry dWN0b3IgKmFnZ19jdG9yLAorCQkJCQkJCUpzb25SZXR1cm5pbmcgKnJldHVybmluZywgTGlz dCAqYXJncywKKwkJCQkJCQljb25zdCBjaGFyICphZ2dmbiwgT2lkIGFnZ3R5cGUsCisJCQkJ CQkJSnNvbkNvbnN0cnVjdG9yVHlwZSBjdG9yX3R5cGUsCisJCQkJCQkJYm9vbCB1bmlxdWUs IGJvb2wgYWJzZW50X29uX251bGwpCit7CisJT2lkCQkJYWdnZm5vaWQ7CisJTm9kZQkgICAq bm9kZTsKKwlFeHByCSAgICphZ2dmaWx0ZXIgPSBhZ2dfY3Rvci0+YWdnX2ZpbHRlciA/IChF eHByICopCisJdHJhbnNmb3JtV2hlcmVDbGF1c2UocHN0YXRlLCBhZ2dfY3Rvci0+YWdnX2Zp bHRlciwKKwkJCQkJCSBFWFBSX0tJTkRfRklMVEVSLCAiRklMVEVSIikgOiBOVUxMOworCisJ YWdnZm5vaWQgPSBEYXR1bUdldEludDMyKERpcmVjdEZ1bmN0aW9uQ2FsbDEocmVncHJvY2lu LAorCQkJCQkJCQkJCQkJIENTdHJpbmdHZXREYXR1bShhZ2dmbikpKTsKKworCWlmIChhZ2df Y3Rvci0+b3ZlcikKKwl7CisJCS8qIHdpbmRvdyBmdW5jdGlvbiAqLworCQlXaW5kb3dGdW5j ICp3ZnVuYyA9IG1ha2VOb2RlKFdpbmRvd0Z1bmMpOworCisJCXdmdW5jLT53aW5mbm9pZCA9 IGFnZ2Zub2lkOworCQl3ZnVuYy0+d2ludHlwZSA9IGFnZ3R5cGU7CisJCS8qIHdpbmNvbGxp ZCBhbmQgaW5wdXRjb2xsaWQgd2lsbCBiZSBzZXQgYnkgcGFyc2VfY29sbGF0ZS5jICovCisJ CXdmdW5jLT5hcmdzID0gYXJnczsKKwkJLyogd2lucmVmIHdpbGwgYmUgc2V0IGJ5IHRyYW5z Zm9ybVdpbmRvd0Z1bmNDYWxsICovCisJCXdmdW5jLT53aW5zdGFyID0gZmFsc2U7CisJCXdm dW5jLT53aW5hZ2cgPSB0cnVlOworCQl3ZnVuYy0+YWdnZmlsdGVyID0gYWdnZmlsdGVyOwor CQl3ZnVuYy0+bG9jYXRpb24gPSBhZ2dfY3Rvci0+bG9jYXRpb247CisKKwkJLyoKKwkJICog b3JkZXJlZCBhZ2dzIG5vdCBhbGxvd2VkIGluIHdpbmRvd3MgeWV0CisJCSAqLworCQlpZiAo YWdnX2N0b3ItPmFnZ19vcmRlciAhPSBOSUwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQko ZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJCSBlcnJtc2co ImFnZ3JlZ2F0ZSBPUkRFUiBCWSBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIHdpbmRvdyBmdW5j dGlvbnMiKSwKKwkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGFnZ19jdG9yLT5s b2NhdGlvbikpKTsKKworCQkvKiBwYXJzZV9hZ2cuYyBkb2VzIGFkZGl0aW9uYWwgd2luZG93 LWZ1bmMtc3BlY2lmaWMgcHJvY2Vzc2luZyAqLworCQl0cmFuc2Zvcm1XaW5kb3dGdW5jQ2Fs bChwc3RhdGUsIHdmdW5jLCBhZ2dfY3Rvci0+b3Zlcik7CisKKwkJbm9kZSA9IChOb2RlICop IHdmdW5jOworCX0KKwllbHNlCisJeworCQlBZ2dyZWYJICAgKmFnZ3JlZiA9IG1ha2VOb2Rl KEFnZ3JlZik7CisKKwkJYWdncmVmLT5hZ2dmbm9pZCA9IGFnZ2Zub2lkOworCQlhZ2dyZWYt PmFnZ3R5cGUgPSBhZ2d0eXBlOworCisJCS8qIGFnZ2NvbGxpZCBhbmQgaW5wdXRjb2xsaWQg d2lsbCBiZSBzZXQgYnkgcGFyc2VfY29sbGF0ZS5jICovCisJCWFnZ3JlZi0+YWdndHJhbnN0 eXBlID0gSW52YWxpZE9pZDsJLyogd2lsbCBiZSBzZXQgYnkgcGxhbm5lciAqLworCQkvKiBh Z2dhcmd0eXBlcyB3aWxsIGJlIHNldCBieSB0cmFuc2Zvcm1BZ2dyZWdhdGVDYWxsICovCisJ CS8qIGFnZ2RpcmVjdGFyZ3MgYW5kIGFyZ3Mgd2lsbCBiZSBzZXQgYnkgdHJhbnNmb3JtQWdn cmVnYXRlQ2FsbCAqLworCQkvKiBhZ2dvcmRlciBhbmQgYWdnZGlzdGluY3Qgd2lsbCBiZSBz ZXQgYnkgdHJhbnNmb3JtQWdncmVnYXRlQ2FsbCAqLworCQlhZ2dyZWYtPmFnZ2ZpbHRlciA9 IGFnZ2ZpbHRlcjsKKwkJYWdncmVmLT5hZ2dzdGFyID0gZmFsc2U7CisJCWFnZ3JlZi0+YWdn dmFyaWFkaWMgPSBmYWxzZTsKKwkJYWdncmVmLT5hZ2draW5kID0gQUdHS0lORF9OT1JNQUw7 CisJCS8qIGFnZ2xldmVsc3VwIHdpbGwgYmUgc2V0IGJ5IHRyYW5zZm9ybUFnZ3JlZ2F0ZUNh bGwgKi8KKwkJYWdncmVmLT5hZ2dzcGxpdCA9IEFHR1NQTElUX1NJTVBMRTsgLyogcGxhbm5l ciBtaWdodCBjaGFuZ2UgdGhpcyAqLworCQlhZ2dyZWYtPmxvY2F0aW9uID0gYWdnX2N0b3It PmxvY2F0aW9uOworCisJCXRyYW5zZm9ybUFnZ3JlZ2F0ZUNhbGwocHN0YXRlLCBhZ2dyZWYs IGFyZ3MsIGFnZ19jdG9yLT5hZ2dfb3JkZXIsIGZhbHNlKTsKKworCQlub2RlID0gKE5vZGUg KikgYWdncmVmOworCX0KKworCXJldHVybiBtYWtlSnNvbkNvbnN0cnVjdG9yRXhwcihwc3Rh dGUsIGN0b3JfdHlwZSwgTklMLCAoRXhwciAqKSBub2RlLAorCQkJCQkJCQkgICByZXR1cm5p bmcsIHVuaXF1ZSwgYWJzZW50X29uX251bGwsCisJCQkJCQkJCSAgIGFnZ19jdG9yLT5sb2Nh dGlvbik7Cit9CisKKy8qCisgKiBUcmFuc2Zvcm0gSlNPTl9PQkpFQ1RBR0coKSBhZ2dyZWdh dGUgZnVuY3Rpb24uCisgKgorICogSlNPTl9PQkpFQ1RBR0coKSBpcyB0cmFuc2Zvcm1lZCBp bnRvCisgKiBqc29uW2JdX29iamVjdGFnZyhrZXksIHZhbHVlLCBhYnNlbnRfb25fbnVsbCwg Y2hlY2tfdW5pcXVlKSBjYWxsIGRlcGVuZGluZyBvbgorICogdGhlIG91dHB1dCBKU09OIGZv cm1hdC4gIFRoZW4gdGhlIGZ1bmN0aW9uIGNhbGwgcmVzdWx0IGlzIGNvZXJjZWQgdG8gdGhl CisgKiB0YXJnZXQgb3V0cHV0IHR5cGUuCisgKi8KK3N0YXRpYyBOb2RlICoKK3RyYW5zZm9y bUpzb25PYmplY3RBZ2coUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uT2JqZWN0QWdnICphZ2cp Cit7CisJSnNvblJldHVybmluZyAqcmV0dXJuaW5nOworCU5vZGUJICAgKmtleTsKKwlOb2Rl CSAgICp2YWw7CisJTGlzdAkgICAqYXJnczsKKwljb25zdCBjaGFyICphZ2dmbm5hbWU7CisJ T2lkCQkJYWdndHlwZTsKKworCWtleSA9IHRyYW5zZm9ybUV4cHJSZWN1cnNlKHBzdGF0ZSwg KE5vZGUgKikgYWdnLT5hcmctPmtleSk7CisJdmFsID0gdHJhbnNmb3JtSnNvblZhbHVlRXhw cihwc3RhdGUsIGFnZy0+YXJnLT52YWx1ZSwgSlNfRk9STUFUX0RFRkFVTFQpOworCWFyZ3Mg PSBsaXN0X21ha2UyKGtleSwgdmFsKTsKKworCXJldHVybmluZyA9IHRyYW5zZm9ybUpzb25D b25zdHJ1Y3Rvck91dHB1dChwc3RhdGUsIGFnZy0+Y29uc3RydWN0b3ItPm91dHB1dCwKKwkJ CQkJCQkJCQkJICAgYXJncyk7CisKKwlpZiAocmV0dXJuaW5nLT5mb3JtYXQtPmZvcm1hdF90 eXBlID09IEpTX0ZPUk1BVF9KU09OQikKKwl7CisJCWlmIChhZ2ctPmFic2VudF9vbl9udWxs KQorCQkJaWYgKGFnZy0+dW5pcXVlKQorCQkJCWFnZ2ZubmFtZSA9ICJwZ19jYXRhbG9nLmpz b25iX29iamVjdF9hZ2dfdW5pcXVlX3N0cmljdCI7CS8qIEZfSlNPTkJfT0JKRUNUX0FHR19V TklRVUVfU1RSSUNUICovCisJCQllbHNlCisJCQkJYWdnZm5uYW1lID0gInBnX2NhdGFsb2cu anNvbmJfb2JqZWN0X2FnZ19zdHJpY3QiOwkvKiBGX0pTT05CX09CSkVDVF9BR0dfU1RSSUNU ICovCisJCWVsc2UgaWYgKGFnZy0+dW5pcXVlKQorCQkJYWdnZm5uYW1lID0gInBnX2NhdGFs b2cuanNvbmJfb2JqZWN0X2FnZ191bmlxdWUiOwkvKiBGX0pTT05CX09CSkVDVF9BR0dfVU5J UVVFICovCisJCWVsc2UKKwkJCWFnZ2ZubmFtZSA9ICJwZ19jYXRhbG9nLmpzb25iX29iamVj dF9hZ2ciOwkvKiBGX0pTT05CX09CSkVDVF9BR0cgKi8KKworCQlhZ2d0eXBlID0gSlNPTkJP SUQ7CisJfQorCWVsc2UKKwl7CisJCWlmIChhZ2ctPmFic2VudF9vbl9udWxsKQorCQkJaWYg KGFnZy0+dW5pcXVlKQorCQkJCWFnZ2ZubmFtZSA9ICJwZ19jYXRhbG9nLmpzb25fb2JqZWN0 X2FnZ191bmlxdWVfc3RyaWN0IjsgLyogRl9KU09OX09CSkVDVF9BR0dfVU5JUVVFX1NUUklD VCAqLworCQkJZWxzZQorCQkJCWFnZ2ZubmFtZSA9ICJwZ19jYXRhbG9nLmpzb25fb2JqZWN0 X2FnZ19zdHJpY3QiOwkvKiBGX0pTT05fT0JKRUNUX0FHR19TVFJJQ1QgKi8KKwkJZWxzZSBp ZiAoYWdnLT51bmlxdWUpCisJCQlhZ2dmbm5hbWUgPSAicGdfY2F0YWxvZy5qc29uX29iamVj dF9hZ2dfdW5pcXVlIjsJLyogRl9KU09OX09CSkVDVF9BR0dfVU5JUVVFICovCisJCWVsc2UK KwkJCWFnZ2ZubmFtZSA9ICJwZ19jYXRhbG9nLmpzb25fb2JqZWN0X2FnZyI7CS8qIEZfSlNP Tl9PQkpFQ1RfQUdHICovCisKKwkJYWdndHlwZSA9IEpTT05PSUQ7CisJfQorCisJcmV0dXJu IHRyYW5zZm9ybUpzb25BZ2dDb25zdHJ1Y3Rvcihwc3RhdGUsIGFnZy0+Y29uc3RydWN0b3Is IHJldHVybmluZywKKwkJCQkJCQkJCSAgIGFyZ3MsIGFnZ2ZubmFtZSwgYWdndHlwZSwKKwkJ CQkJCQkJCSAgIEpTQ1RPUl9KU09OX09CSkVDVEFHRywKKwkJCQkJCQkJCSAgIGFnZy0+dW5p cXVlLCBhZ2ctPmFic2VudF9vbl9udWxsKTsKK30KKworLyoKKyAqIFRyYW5zZm9ybSBKU09O X0FSUkFZQUdHKCkgYWdncmVnYXRlIGZ1bmN0aW9uLgorICoKKyAqIEpTT05fQVJSQVlBR0co KSBpcyB0cmFuc2Zvcm1lZCBpbnRvIGpzb25bYl1fYWdnW19zdHJpY3RdKCkgY2FsbCBkZXBl bmRpbmcKKyAqIG9uIHRoZSBvdXRwdXQgSlNPTiBmb3JtYXQgYW5kIGFic2VudF9vbl9udWxs LiAgVGhlbiB0aGUgZnVuY3Rpb24gY2FsbCByZXN1bHQKKyAqIGlzIGNvZXJjZWQgdG8gdGhl IHRhcmdldCBvdXRwdXQgdHlwZS4KKyAqLworc3RhdGljIE5vZGUgKgordHJhbnNmb3JtSnNv bkFycmF5QWdnKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkFycmF5QWdnICphZ2cpCit7CisJ SnNvblJldHVybmluZyAqcmV0dXJuaW5nOworCU5vZGUJICAgKmFyZzsKKwljb25zdCBjaGFy ICphZ2dmbm5hbWU7CisJT2lkCQkJYWdndHlwZTsKKworCWFyZyA9IHRyYW5zZm9ybUpzb25W YWx1ZUV4cHIocHN0YXRlLCBhZ2ctPmFyZywgSlNfRk9STUFUX0RFRkFVTFQpOworCisJcmV0 dXJuaW5nID0gdHJhbnNmb3JtSnNvbkNvbnN0cnVjdG9yT3V0cHV0KHBzdGF0ZSwgYWdnLT5j b25zdHJ1Y3Rvci0+b3V0cHV0LAorCQkJCQkJCQkJCQkgICBsaXN0X21ha2UxKGFyZykpOwor CisJaWYgKHJldHVybmluZy0+Zm9ybWF0LT5mb3JtYXRfdHlwZSA9PSBKU19GT1JNQVRfSlNP TkIpCisJeworCQlhZ2dmbm5hbWUgPSBhZ2ctPmFic2VudF9vbl9udWxsID8KKwkJCSJwZ19j YXRhbG9nLmpzb25iX2FnZ19zdHJpY3QiIDogInBnX2NhdGFsb2cuanNvbmJfYWdnIjsKKwkJ YWdndHlwZSA9IEpTT05CT0lEOworCX0KKwllbHNlCisJeworCQlhZ2dmbm5hbWUgPSBhZ2ct PmFic2VudF9vbl9udWxsID8KKwkJCSJwZ19jYXRhbG9nLmpzb25fYWdnX3N0cmljdCIgOiAi cGdfY2F0YWxvZy5qc29uX2FnZyI7CisJCWFnZ3R5cGUgPSBKU09OT0lEOworCX0KKworCXJl dHVybiB0cmFuc2Zvcm1Kc29uQWdnQ29uc3RydWN0b3IocHN0YXRlLCBhZ2ctPmNvbnN0cnVj dG9yLCByZXR1cm5pbmcsCisJCQkJCQkJCQkgICBsaXN0X21ha2UxKGFyZyksIGFnZ2ZubmFt ZSwgYWdndHlwZSwKKwkJCQkJCQkJCSAgIEpTQ1RPUl9KU09OX0FSUkFZQUdHLAorCQkJCQkJ CQkJICAgZmFsc2UsIGFnZy0+YWJzZW50X29uX251bGwpOworfQorCisvKgorICogVHJhbnNm b3JtIEpTT05fQVJSQVkoKSBjb25zdHJ1Y3Rvci4KKyAqCisgKiBKU09OX0FSUkFZKCkgaXMg dHJhbnNmb3JtZWQgaW50byBqc29uW2JdX2J1aWxkX2FycmF5W19leHRdKCkgY2FsbAorICog ZGVwZW5kaW5nIG9uIHRoZSBvdXRwdXQgSlNPTiBmb3JtYXQuIFRoZSBmaXJzdCBhcmd1bWVu dCBvZgorICoganNvbltiXV9idWlsZF9hcnJheV9leHQoKSBpcyBhYnNlbnRfb25fbnVsbC4K KyAqCisgKiBUaGVuIGZ1bmN0aW9uIGNhbGwgcmVzdWx0IGlzIGNvZXJjZWQgdG8gdGhlIHRh cmdldCB0eXBlLgorICovCitzdGF0aWMgTm9kZSAqCit0cmFuc2Zvcm1Kc29uQXJyYXlDb25z dHJ1Y3RvcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25BcnJheUNvbnN0cnVjdG9yICpjdG9y KQoreworCUpzb25SZXR1cm5pbmcgKnJldHVybmluZzsKKwlMaXN0CSAgICphcmdzID0gTklM OworCisJLyogdHJhbnNmb3JtIGVsZW1lbnQgZXhwcmVzc2lvbnMsIGlmIGFueSAqLworCWlm IChjdG9yLT5leHBycykKKwl7CisJCUxpc3RDZWxsICAgKmxjOworCisJCS8qIHRyYW5zZm9y bSBhbmQgYXBwZW5kIGVsZW1lbnQgYXJndW1lbnRzICovCisJCWZvcmVhY2gobGMsIGN0b3It PmV4cHJzKQorCQl7CisJCQlKc29uVmFsdWVFeHByICpqc3ZhbCA9IGNhc3ROb2RlKEpzb25W YWx1ZUV4cHIsIGxmaXJzdChsYykpOworCQkJTm9kZQkgICAqdmFsID0gdHJhbnNmb3JtSnNv blZhbHVlRXhwcihwc3RhdGUsIGpzdmFsLAorCQkJCQkJCQkJCQkJCSBKU19GT1JNQVRfREVG QVVMVCk7CisKKwkJCWFyZ3MgPSBsYXBwZW5kKGFyZ3MsIHZhbCk7CisJCX0KKwl9CisKKwly ZXR1cm5pbmcgPSB0cmFuc2Zvcm1Kc29uQ29uc3RydWN0b3JPdXRwdXQocHN0YXRlLCBjdG9y LT5vdXRwdXQsIGFyZ3MpOworCisJcmV0dXJuIG1ha2VKc29uQ29uc3RydWN0b3JFeHByKHBz dGF0ZSwgSlNDVE9SX0pTT05fQVJSQVksIGFyZ3MsIE5VTEwsCisJCQkJCQkJCSAgIHJldHVy bmluZywgZmFsc2UsIGN0b3ItPmFic2VudF9vbl9udWxsLAorCQkJCQkJCQkgICBjdG9yLT5s b2NhdGlvbik7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdGFy Z2V0LmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdGFyZ2V0LmMKaW5kZXggMjU3ODFk YjVjMS4uODViODM3YjA0NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNl X3RhcmdldC5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYwpAQCAt MTkwOSw2ICsxOTA5LDE5IEBAIEZpZ3VyZUNvbG5hbWVJbnRlcm5hbChOb2RlICpub2RlLCBj aGFyICoqbmFtZSkKIAkJY2FzZSBUX1htbFNlcmlhbGl6ZToKIAkJCSpuYW1lID0gInhtbHNl cmlhbGl6ZSI7CiAJCQlyZXR1cm4gMjsKKwkJY2FzZSBUX0pzb25PYmplY3RDb25zdHJ1Y3Rv cjoKKwkJCSpuYW1lID0gImpzb25fb2JqZWN0IjsKKwkJCXJldHVybiAyOworCQljYXNlIFRf SnNvbkFycmF5Q29uc3RydWN0b3I6CisJCWNhc2UgVF9Kc29uQXJyYXlRdWVyeUNvbnN0cnVj dG9yOgorCQkJKm5hbWUgPSAianNvbl9hcnJheSI7CisJCQlyZXR1cm4gMjsKKwkJY2FzZSBU X0pzb25PYmplY3RBZ2c6CisJCQkqbmFtZSA9ICJqc29uX29iamVjdGFnZyI7CisJCQlyZXR1 cm4gMjsKKwkJY2FzZSBUX0pzb25BcnJheUFnZzoKKwkJCSpuYW1lID0gImpzb25fYXJyYXlh Z2ciOworCQkJcmV0dXJuIDI7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAl9CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VyLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIv cGFyc2VyLmMKaW5kZXggYWE0ZGNlNmVlOS4uNGI5ZGRlYjUyZiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcGFyc2VyL3BhcnNlci5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZXIuYwpAQCAtMTUwLDYgKzE1MCw5IEBAIGJhc2VfeXlsZXgoWVlTVFlQRSAqbHZhbHAsIFlZ TFRZUEUgKmxsb2NwLCBjb3JlX3l5c2Nhbl90IHl5c2Nhbm5lcikKIAkJY2FzZSBVU0NPTlNU OgogCQkJY3VyX3Rva2VuX2xlbmd0aCA9IHN0cmxlbih5eWV4dHJhLT5jb3JlX3l5X2V4dHJh LnNjYW5idWYgKyAqbGxvY3ApOwogCQkJYnJlYWs7CisJCWNhc2UgV0lUSE9VVDoKKwkJCWN1 cl90b2tlbl9sZW5ndGggPSA3OworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4g Y3VyX3Rva2VuOwogCX0KQEAgLTIyMSw2ICsyMjQsMTkgQEAgYmFzZV95eWxleChZWVNUWVBF ICpsdmFscCwgWVlMVFlQRSAqbGxvY3AsIGNvcmVfeXlzY2FuX3QgeXlzY2FubmVyKQogCQkJ CWNhc2UgT1JESU5BTElUWToKIAkJCQkJY3VyX3Rva2VuID0gV0lUSF9MQTsKIAkJCQkJYnJl YWs7CisJCQkJY2FzZSBVTklRVUU6CisJCQkJCWN1cl90b2tlbiA9IFdJVEhfTEFfVU5JUVVF OworCQkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgV0lUSE9VVDoKKwkJ CS8qIFJlcGxhY2UgV0lUSE9VVCBieSBXSVRIT1VUX0xBIGlmIGl0J3MgZm9sbG93ZWQgYnkg VElNRSAqLworCQkJc3dpdGNoIChuZXh0X3Rva2VuKQorCQkJeworCQkJCWNhc2UgVElNRToK KwkJCQkJY3VyX3Rva2VuID0gV0lUSE9VVF9MQTsKKwkJCQkJYnJlYWs7CiAJCQl9CiAJCQli cmVhazsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb24uYyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uLmMKaW5kZXggMDZkOGJlYTljZC4uN2UwMzA4MTBi NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb24uYworKysgYi9zcmMv YmFja2VuZC91dGlscy9hZHQvanNvbi5jCkBAIC0xMyw3ICsxMyw5IEBACiAgKi8KICNpbmNs dWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9jLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCisjaW5jbHVkZSAiY29tbW9uL2hhc2hmbi5oIgog I2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJsaWJwcS9wcWZvcm1hdC5oIgogI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgpAQCAtNDIsNiArNDQsNDIgQEAgdHlwZWRlZiBlbnVtCQkJ CQkvKiB0eXBlIGNhdGVnb3JpZXMgZm9yIGRhdHVtX3RvX2pzb24gKi8KIAlKU09OVFlQRV9P VEhFUgkJCQkvKiBhbGwgZWxzZSAqLwogfSBKc29uVHlwZUNhdGVnb3J5OwogCisvKiBDb21t b24gY29udGV4dCBmb3Iga2V5IHVuaXF1ZW5lc3MgY2hlY2sgKi8KK3R5cGVkZWYgc3RydWN0 IEhUQUIgKkpzb25VbmlxdWVDaGVja1N0YXRlOwkvKiBoYXNoIHRhYmxlIGZvciBrZXkgbmFt ZXMgKi8KKworLyogSGFzaCBlbnRyeSBmb3IgSnNvblVuaXF1ZUNoZWNrU3RhdGUgKi8KK3R5 cGVkZWYgc3RydWN0IEpzb25VbmlxdWVIYXNoRW50cnkKK3sKKwljb25zdCBjaGFyICprZXk7 CisJaW50CQkJa2V5X2xlbjsKKwlpbnQJCQlvYmplY3RfaWQ7Cit9IEpzb25VbmlxdWVIYXNo RW50cnk7CisKKy8qIENvbnRleHQgZm9yIGtleSB1bmlxdWVuZXNzIGNoZWNrIGluIGJ1aWxk ZXIgZnVuY3Rpb25zICovCit0eXBlZGVmIHN0cnVjdCBKc29uVW5pcXVlQnVpbGRlclN0YXRl Cit7CisJSnNvblVuaXF1ZUNoZWNrU3RhdGUgY2hlY2s7IC8qIHVuaXF1ZSBjaGVjayAqLwor CVN0cmluZ0luZm9EYXRhIHNraXBwZWRfa2V5czsJLyogc2tpcHBlZCBrZXlzIHdpdGggTlVM TCB2YWx1ZXMgKi8KKwlNZW1vcnlDb250ZXh0IG1jeHQ7CQkJLyogY29udGV4dCBmb3Igc2F2 aW5nIHNraXBwZWQga2V5cyAqLworfSBKc29uVW5pcXVlQnVpbGRlclN0YXRlOworCisvKiBF bGVtZW50IG9mIG9iamVjdCBzdGFjayBmb3Iga2V5IHVuaXF1ZW5lc3MgY2hlY2sgZHVyaW5n IGpzb24gcGFyc2luZyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvblVuaXF1ZVN0YWNrRW50cnkK K3sKKwlzdHJ1Y3QgSnNvblVuaXF1ZVN0YWNrRW50cnkgKnBhcmVudDsKKwlpbnQJCQlvYmpl Y3RfaWQ7Cit9IEpzb25VbmlxdWVTdGFja0VudHJ5OworCisvKiBTdGF0ZSBmb3Iga2V5IHVu aXF1ZW5lc3MgY2hlY2sgZHVyaW5nIGpzb24gcGFyc2luZyAqLwordHlwZWRlZiBzdHJ1Y3Qg SnNvblVuaXF1ZVBhcnNpbmdTdGF0ZQoreworCUpzb25MZXhDb250ZXh0ICpsZXg7CisJSnNv blVuaXF1ZUNoZWNrU3RhdGUgY2hlY2s7CisJSnNvblVuaXF1ZVN0YWNrRW50cnkgKnN0YWNr OworCWludAkJCWlkX2NvdW50ZXI7CisJYm9vbAkJdW5pcXVlOworfSBKc29uVW5pcXVlUGFy c2luZ1N0YXRlOworCiB0eXBlZGVmIHN0cnVjdCBKc29uQWdnU3RhdGUKIHsKIAlTdHJpbmdJ bmZvCXN0cjsKQEAgLTQ5LDYgKzg3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvbkFnZ1N0YXRl CiAJT2lkCQkJa2V5X291dHB1dF9mdW5jOwogCUpzb25UeXBlQ2F0ZWdvcnkgdmFsX2NhdGVn b3J5OwogCU9pZAkJCXZhbF9vdXRwdXRfZnVuYzsKKwlKc29uVW5pcXVlQnVpbGRlclN0YXRl IHVuaXF1ZV9jaGVjazsKIH0gSnNvbkFnZ1N0YXRlOwogCiBzdGF0aWMgdm9pZCBjb21wb3Np dGVfdG9fanNvbihEYXR1bSBjb21wb3NpdGUsIFN0cmluZ0luZm8gcmVzdWx0LApAQCAtNzIz LDYgKzc2MiwzOCBAQCByb3dfdG9fanNvbl9wcmV0dHkoUEdfRlVOQ1RJT05fQVJHUykKIAlQ R19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dF93aXRoX2xlbihyZXN1bHQtPmRhdGEs IHJlc3VsdC0+bGVuKSk7CiB9CiAKK2Jvb2wKK3RvX2pzb25faXNfaW1tdXRhYmxlKE9pZCB0 eXBvaWQpCit7CisJSnNvblR5cGVDYXRlZ29yeSB0Y2F0ZWdvcnk7CisJT2lkCQkJb3V0ZnVu Y29pZDsKKworCWpzb25fY2F0ZWdvcml6ZV90eXBlKHR5cG9pZCwgJnRjYXRlZ29yeSwgJm91 dGZ1bmNvaWQpOworCisJc3dpdGNoICh0Y2F0ZWdvcnkpCisJeworCQljYXNlIEpTT05UWVBF X0JPT0w6CisJCWNhc2UgSlNPTlRZUEVfSlNPTjoKKwkJCXJldHVybiB0cnVlOworCisJCWNh c2UgSlNPTlRZUEVfREFURToKKwkJY2FzZSBKU09OVFlQRV9USU1FU1RBTVA6CisJCWNhc2Ug SlNPTlRZUEVfVElNRVNUQU1QVFo6CisJCQlyZXR1cm4gZmFsc2U7CisKKwkJY2FzZSBKU09O VFlQRV9BUlJBWToKKwkJCXJldHVybiBmYWxzZTsJCS8qIFRPRE8gcmVjdXJzZSBpbnRvIGVs ZW1lbnRzICovCisKKwkJY2FzZSBKU09OVFlQRV9DT01QT1NJVEU6CisJCQlyZXR1cm4gZmFs c2U7CQkvKiBUT0RPIHJlY3Vyc2UgaW50byBmaWVsZHMgKi8KKworCQljYXNlIEpTT05UWVBF X05VTUVSSUM6CisJCWNhc2UgSlNPTlRZUEVfQ0FTVDoKKwkJZGVmYXVsdDoKKwkJCXJldHVy biBmdW5jX3ZvbGF0aWxlKG91dGZ1bmNvaWQpID09IFBST1ZPTEFUSUxFX0lNTVVUQUJMRTsK Kwl9Cit9CisKIC8qCiAgKiBTUUwgZnVuY3Rpb24gdG9fanNvbihhbnl2YWx1ZSkKICAqLwpA QCAtNzU1LDggKzgyNiw4IEBAIHRvX2pzb24oUEdfRlVOQ1RJT05fQVJHUykKICAqCiAgKiBh Z2dyZWdhdGUgaW5wdXQgY29sdW1uIGFzIGEganNvbiBhcnJheSB2YWx1ZS4KICAqLwotRGF0 dW0KLWpzb25fYWdnX3RyYW5zZm4oUEdfRlVOQ1RJT05fQVJHUykKK3N0YXRpYyBEYXR1bQor anNvbl9hZ2dfdHJhbnNmbl93b3JrZXIoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIGJvb2wg YWJzZW50X29uX251bGwpCiB7CiAJTWVtb3J5Q29udGV4dCBhZ2djb250ZXh0LAogCQkJCW9s ZGNvbnRleHQ7CkBAIC03OTYsOSArODY3LDE0IEBAIGpzb25fYWdnX3RyYW5zZm4oUEdfRlVO Q1RJT05fQVJHUykKIAllbHNlCiAJewogCQlzdGF0ZSA9IChKc29uQWdnU3RhdGUgKikgUEdf R0VUQVJHX1BPSU5URVIoMCk7Ci0JCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoc3RhdGUtPnN0 ciwgIiwgIik7CiAJfQogCisJaWYgKGFic2VudF9vbl9udWxsICYmIFBHX0FSR0lTTlVMTCgx KSkKKwkJUEdfUkVUVVJOX1BPSU5URVIoc3RhdGUpOworCisJaWYgKHN0YXRlLT5zdHItPmxl biA+IDEpCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoc3RhdGUtPnN0ciwgIiwgIik7CisK IAkvKiBmYXN0IHBhdGggZm9yIE5VTExzICovCiAJaWYgKFBHX0FSR0lTTlVMTCgxKSkKIAl7 CkBAIC04MTAsNyArODg2LDcgQEAganNvbl9hZ2dfdHJhbnNmbihQR19GVU5DVElPTl9BUkdT KQogCXZhbCA9IFBHX0dFVEFSR19EQVRVTSgxKTsKIAogCS8qIGFkZCBzb21lIHdoaXRlc3Bh Y2UgaWYgc3RydWN0dXJlZCB0eXBlIGFuZCBub3QgZmlyc3QgaXRlbSAqLwotCWlmICghUEdf QVJHSVNOVUxMKDApICYmCisJaWYgKCFQR19BUkdJU05VTEwoMCkgJiYgc3RhdGUtPnN0ci0+ bGVuID4gMSAmJgogCQkoc3RhdGUtPnZhbF9jYXRlZ29yeSA9PSBKU09OVFlQRV9BUlJBWSB8 fAogCQkgc3RhdGUtPnZhbF9jYXRlZ29yeSA9PSBKU09OVFlQRV9DT01QT1NJVEUpKQogCXsK QEAgLTgyOCw2ICs5MDQsMjUgQEAganNvbl9hZ2dfdHJhbnNmbihQR19GVU5DVElPTl9BUkdT KQogCVBHX1JFVFVSTl9QT0lOVEVSKHN0YXRlKTsKIH0KIAorCisvKgorICoganNvbl9hZ2cg YWdncmVnYXRlIGZ1bmN0aW9uCisgKi8KK0RhdHVtCitqc29uX2FnZ190cmFuc2ZuKFBHX0ZV TkNUSU9OX0FSR1MpCit7CisJcmV0dXJuIGpzb25fYWdnX3RyYW5zZm5fd29ya2VyKGZjaW5m bywgZmFsc2UpOworfQorCisvKgorICoganNvbl9hZ2dfc3RyaWN0IGFnZ3JlZ2F0ZSBmdW5j dGlvbgorICovCitEYXR1bQoranNvbl9hZ2dfc3RyaWN0X3RyYW5zZm4oUEdfRlVOQ1RJT05f QVJHUykKK3sKKwlyZXR1cm4ganNvbl9hZ2dfdHJhbnNmbl93b3JrZXIoZmNpbmZvLCB0cnVl KTsKK30KKwogLyoKICAqIGpzb25fYWdnIGZpbmFsIGZ1bmN0aW9uCiAgKi8KQEAgLTg1MSwx OCArOTQ2LDEwOCBAQCBqc29uX2FnZ19maW5hbGZuKFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdf UkVUVVJOX1RFWFRfUChjYXRlbmF0ZV9zdHJpbmdpbmZvX3N0cmluZyhzdGF0ZS0+c3RyLCAi XSIpKTsKIH0KIAorLyogRnVuY3Rpb25zIGltcGxlbWVudGluZyBoYXNoIHRhYmxlIGZvciBr ZXkgdW5pcXVlbmVzcyBjaGVjayAqLworc3RhdGljIHVpbnQzMgoranNvbl91bmlxdWVfaGFz aChjb25zdCB2b2lkICprZXksIFNpemUga2V5c2l6ZSkKK3sKKwljb25zdCBKc29uVW5pcXVl SGFzaEVudHJ5ICplbnRyeSA9IChKc29uVW5pcXVlSGFzaEVudHJ5ICopIGtleTsKKwl1aW50 MzIJCWhhc2ggPSBoYXNoX2J5dGVzX3VpbnQzMihlbnRyeS0+b2JqZWN0X2lkKTsKKworCWhh c2ggXj0gaGFzaF9ieXRlcygoY29uc3QgdW5zaWduZWQgY2hhciAqKSBlbnRyeS0+a2V5LCBl bnRyeS0+a2V5X2xlbik7CisKKwlyZXR1cm4gRGF0dW1HZXRVSW50MzIoaGFzaCk7Cit9CisK K3N0YXRpYyBpbnQKK2pzb25fdW5pcXVlX2hhc2hfbWF0Y2goY29uc3Qgdm9pZCAqa2V5MSwg Y29uc3Qgdm9pZCAqa2V5MiwgU2l6ZSBrZXlzaXplKQoreworCWNvbnN0IEpzb25VbmlxdWVI YXNoRW50cnkgKmVudHJ5MSA9IChjb25zdCBKc29uVW5pcXVlSGFzaEVudHJ5ICopIGtleTE7 CisJY29uc3QgSnNvblVuaXF1ZUhhc2hFbnRyeSAqZW50cnkyID0gKGNvbnN0IEpzb25Vbmlx dWVIYXNoRW50cnkgKikga2V5MjsKKworCWlmIChlbnRyeTEtPm9iamVjdF9pZCAhPSBlbnRy eTItPm9iamVjdF9pZCkKKwkJcmV0dXJuIGVudHJ5MS0+b2JqZWN0X2lkID4gZW50cnkyLT5v YmplY3RfaWQgPyAxIDogLTE7CisKKwlpZiAoZW50cnkxLT5rZXlfbGVuICE9IGVudHJ5Mi0+ a2V5X2xlbikKKwkJcmV0dXJuIGVudHJ5MS0+a2V5X2xlbiA+IGVudHJ5Mi0+a2V5X2xlbiA/ IDEgOiAtMTsKKworCXJldHVybiBzdHJuY21wKGVudHJ5MS0+a2V5LCBlbnRyeTItPmtleSwg ZW50cnkxLT5rZXlfbGVuKTsKK30KKworLyogRnVuY3Rpb25zIGltcGxlbWVudGluZyBvYmpl Y3Qga2V5IHVuaXF1ZW5lc3MgY2hlY2sgKi8KK3N0YXRpYyB2b2lkCitqc29uX3VuaXF1ZV9j aGVja19pbml0KEpzb25VbmlxdWVDaGVja1N0YXRlICpjeHQpCit7CisJSEFTSENUTAkJY3Rs OworCisJbWVtc2V0KCZjdGwsIDAsIHNpemVvZihjdGwpKTsKKwljdGwua2V5c2l6ZSA9IHNp emVvZihKc29uVW5pcXVlSGFzaEVudHJ5KTsKKwljdGwuZW50cnlzaXplID0gc2l6ZW9mKEpz b25VbmlxdWVIYXNoRW50cnkpOworCWN0bC5oY3h0ID0gQ3VycmVudE1lbW9yeUNvbnRleHQ7 CisJY3RsLmhhc2ggPSBqc29uX3VuaXF1ZV9oYXNoOworCWN0bC5tYXRjaCA9IGpzb25fdW5p cXVlX2hhc2hfbWF0Y2g7CisKKwkqY3h0ID0gaGFzaF9jcmVhdGUoImpzb24gb2JqZWN0IGhh c2h0YWJsZSIsCisJCQkJCSAgIDMyLAorCQkJCQkgICAmY3RsLAorCQkJCQkgICBIQVNIX0VM RU0gfCBIQVNIX0NPTlRFWFQgfCBIQVNIX0ZVTkNUSU9OIHwgSEFTSF9DT01QQVJFKTsKK30K Kworc3RhdGljIGJvb2wKK2pzb25fdW5pcXVlX2NoZWNrX2tleShKc29uVW5pcXVlQ2hlY2tT dGF0ZSAqY3h0LCBjb25zdCBjaGFyICprZXksIGludCBvYmplY3RfaWQpCit7CisJSnNvblVu aXF1ZUhhc2hFbnRyeSBlbnRyeTsKKwlib29sCQlmb3VuZDsKKworCWVudHJ5LmtleSA9IGtl eTsKKwllbnRyeS5rZXlfbGVuID0gc3RybGVuKGtleSk7CisJZW50cnkub2JqZWN0X2lkID0g b2JqZWN0X2lkOworCisJKHZvaWQpIGhhc2hfc2VhcmNoKCpjeHQsICZlbnRyeSwgSEFTSF9F TlRFUiwgJmZvdW5kKTsKKworCXJldHVybiAhZm91bmQ7Cit9CisKK3N0YXRpYyB2b2lkCitq c29uX3VuaXF1ZV9idWlsZGVyX2luaXQoSnNvblVuaXF1ZUJ1aWxkZXJTdGF0ZSAqY3h0KQor eworCWpzb25fdW5pcXVlX2NoZWNrX2luaXQoJmN4dC0+Y2hlY2spOworCWN4dC0+bWN4dCA9 IEN1cnJlbnRNZW1vcnlDb250ZXh0OworCWN4dC0+c2tpcHBlZF9rZXlzLmRhdGEgPSBOVUxM OworfQorCisvKiBPbi1kZW1hbmQgaW5pdGlhbGl6YXRpb24gb2Ygc2tpcHBlZF9rZXlzIFN0 cmluZ0luZm8gc3RydWN0dXJlICovCitzdGF0aWMgU3RyaW5nSW5mbworanNvbl91bmlxdWVf YnVpbGRlcl9nZXRfc2tpcHBlZF9rZXlzKEpzb25VbmlxdWVCdWlsZGVyU3RhdGUgKmN4dCkK K3sKKwlTdHJpbmdJbmZvCW91dCA9ICZjeHQtPnNraXBwZWRfa2V5czsKKworCWlmICghb3V0 LT5kYXRhKQorCXsKKwkJTWVtb3J5Q29udGV4dCBvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dp dGNoVG8oY3h0LT5tY3h0KTsKKworCQlpbml0U3RyaW5nSW5mbyhvdXQpOworCQlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKwl9CisKKwlyZXR1cm4gb3V0OworfQorCiAvKgog ICoganNvbl9vYmplY3RfYWdnIHRyYW5zaXRpb24gZnVuY3Rpb24uCiAgKgogICogYWdncmVn YXRlIHR3byBpbnB1dCBjb2x1bW5zIGFzIGEgc2luZ2xlIGpzb24gb2JqZWN0IHZhbHVlLgog ICovCi1EYXR1bQotanNvbl9vYmplY3RfYWdnX3RyYW5zZm4oUEdfRlVOQ1RJT05fQVJHUykK K3N0YXRpYyBEYXR1bQoranNvbl9vYmplY3RfYWdnX3RyYW5zZm5fd29ya2VyKEZ1bmN0aW9u Q2FsbEluZm8gZmNpbmZvLAorCQkJCQkJCSAgIGJvb2wgYWJzZW50X29uX251bGwsIGJvb2wg dW5pcXVlX2tleXMpCiB7CiAJTWVtb3J5Q29udGV4dCBhZ2djb250ZXh0LAogCQkJCW9sZGNv bnRleHQ7CiAJSnNvbkFnZ1N0YXRlICpzdGF0ZTsKKwlTdHJpbmdJbmZvCW91dDsKIAlEYXR1 bQkJYXJnOworCWJvb2wJCXNraXA7CisJaW50CQkJa2V5X29mZnNldDsKIAogCWlmICghQWdn Q2hlY2tDYWxsQ29udGV4dChmY2luZm8sICZhZ2djb250ZXh0KSkKIAl7CkBAIC04ODMsNiAr MTA2OCwxMCBAQCBqc29uX29iamVjdF9hZ2dfdHJhbnNmbihQR19GVU5DVElPTl9BUkdTKQog CQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGFnZ2NvbnRleHQpOwogCQlz dGF0ZSA9IChKc29uQWdnU3RhdGUgKikgcGFsbG9jKHNpemVvZihKc29uQWdnU3RhdGUpKTsK IAkJc3RhdGUtPnN0ciA9IG1ha2VTdHJpbmdJbmZvKCk7CisJCWlmICh1bmlxdWVfa2V5cykK KwkJCWpzb25fdW5pcXVlX2J1aWxkZXJfaW5pdCgmc3RhdGUtPnVuaXF1ZV9jaGVjayk7CisJ CWVsc2UKKwkJCW1lbXNldCgmc3RhdGUtPnVuaXF1ZV9jaGVjaywgMCwgc2l6ZW9mKHN0YXRl LT51bmlxdWVfY2hlY2spKTsKIAkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQp OwogCiAJCWFyZ190eXBlID0gZ2V0X2ZuX2V4cHJfYXJndHlwZShmY2luZm8tPmZsaW5mbywg MSk7CkBAIC05MTAsNyArMTA5OSw2IEBAIGpzb25fb2JqZWN0X2FnZ190cmFuc2ZuKFBHX0ZV TkNUSU9OX0FSR1MpCiAJZWxzZQogCXsKIAkJc3RhdGUgPSAoSnNvbkFnZ1N0YXRlICopIFBH X0dFVEFSR19QT0lOVEVSKDApOwotCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHN0YXRlLT5z dHIsICIsICIpOwogCX0KIAogCS8qCkBAIC05MjYsMTEgKzExMTQsNDkgQEAganNvbl9vYmpl Y3RfYWdnX3RyYW5zZm4oUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkoZXJyY29kZShFUlJDT0RF X0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKIAkJCQkgZXJybXNnKCJmaWVsZCBuYW1lIG11 c3Qgbm90IGJlIG51bGwiKSkpOwogCisJLyogU2tpcCBudWxsIHZhbHVlcyBpZiBhYnNlbnRf b25fbnVsbCAqLworCXNraXAgPSBhYnNlbnRfb25fbnVsbCAmJiBQR19BUkdJU05VTEwoMik7 CisKKwlpZiAoc2tpcCkKKwl7CisJCS8qIElmIGtleSB1bmlxdWVuZXNzIGNoZWNrIGlzIG5l ZWRlZCB3ZSBtdXN0IHNhdmUgc2tpcHBlZCBrZXlzICovCisJCWlmICghdW5pcXVlX2tleXMp CisJCQlQR19SRVRVUk5fUE9JTlRFUihzdGF0ZSk7CisKKwkJb3V0ID0ganNvbl91bmlxdWVf YnVpbGRlcl9nZXRfc2tpcHBlZF9rZXlzKCZzdGF0ZS0+dW5pcXVlX2NoZWNrKTsKKwl9CisJ ZWxzZQorCXsKKwkJb3V0ID0gc3RhdGUtPnN0cjsKKworCQkvKgorCQkgKiBBcHBlbmQgY29t bWEgZGVsaW1pdGVyIG9ubHkgaWYgd2UgaGF2ZSBhbHJlYWR5IG91dHB1dHRlZCBzb21lCisJ CSAqIGZpZWxkcyBhZnRlciB0aGUgaW5pdGlhbCBzdHJpbmcgInsgIi4KKwkJICovCisJCWlm IChvdXQtPmxlbiA+IDIpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKG91dCwgIiwgIik7 CisJfQorCiAJYXJnID0gUEdfR0VUQVJHX0RBVFVNKDEpOwogCi0JZGF0dW1fdG9fanNvbihh cmcsIGZhbHNlLCBzdGF0ZS0+c3RyLCBzdGF0ZS0+a2V5X2NhdGVnb3J5LAorCWtleV9vZmZz ZXQgPSBvdXQtPmxlbjsKKworCWRhdHVtX3RvX2pzb24oYXJnLCBmYWxzZSwgb3V0LCBzdGF0 ZS0+a2V5X2NhdGVnb3J5LAogCQkJCSAgc3RhdGUtPmtleV9vdXRwdXRfZnVuYywgdHJ1ZSk7 CiAKKwlpZiAodW5pcXVlX2tleXMpCisJeworCQljb25zdCBjaGFyICprZXkgPSAmb3V0LT5k YXRhW2tleV9vZmZzZXRdOworCisJCWlmICghanNvbl91bmlxdWVfY2hlY2tfa2V5KCZzdGF0 ZS0+dW5pcXVlX2NoZWNrLmNoZWNrLCBrZXksIDApKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJKGVycmNvZGUoRVJSQ09ERV9EVVBMSUNBVEVfSlNPTl9PQkpFQ1RfS0VZX1ZBTFVFKSwK KwkJCQkJIGVycm1zZygiZHVwbGljYXRlIEpTT04ga2V5ICVzIiwga2V5KSkpOworCisJCWlm IChza2lwKQorCQkJUEdfUkVUVVJOX1BPSU5URVIoc3RhdGUpOworCX0KKwogCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoc3RhdGUtPnN0ciwgIiA6ICIpOwogCiAJaWYgKFBHX0FSR0lTTlVM TCgyKSkKQEAgLTk0NCw2ICsxMTcwLDQyIEBAIGpzb25fb2JqZWN0X2FnZ190cmFuc2ZuKFBH X0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX1BPSU5URVIoc3RhdGUpOwogfQogCisvKgor ICoganNvbl9vYmplY3RfYWdnIGFnZ3JlZ2F0ZSBmdW5jdGlvbgorICovCitEYXR1bQoranNv bl9vYmplY3RfYWdnX3RyYW5zZm4oUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlyZXR1cm4ganNv bl9vYmplY3RfYWdnX3RyYW5zZm5fd29ya2VyKGZjaW5mbywgZmFsc2UsIGZhbHNlKTsKK30K KworLyoKKyAqIGpzb25fb2JqZWN0X2FnZ19zdHJpY3QgYWdncmVnYXRlIGZ1bmN0aW9uCisg Ki8KK0RhdHVtCitqc29uX29iamVjdF9hZ2dfc3RyaWN0X3RyYW5zZm4oUEdfRlVOQ1RJT05f QVJHUykKK3sKKwlyZXR1cm4ganNvbl9vYmplY3RfYWdnX3RyYW5zZm5fd29ya2VyKGZjaW5m bywgdHJ1ZSwgZmFsc2UpOworfQorCisvKgorICoganNvbl9vYmplY3RfYWdnX3VuaXF1ZSBh Z2dyZWdhdGUgZnVuY3Rpb24KKyAqLworRGF0dW0KK2pzb25fb2JqZWN0X2FnZ191bmlxdWVf dHJhbnNmbihQR19GVU5DVElPTl9BUkdTKQoreworCXJldHVybiBqc29uX29iamVjdF9hZ2df dHJhbnNmbl93b3JrZXIoZmNpbmZvLCBmYWxzZSwgdHJ1ZSk7Cit9CisKKy8qCisgKiBqc29u X29iamVjdF9hZ2dfdW5pcXVlX3N0cmljdCBhZ2dyZWdhdGUgZnVuY3Rpb24KKyAqLworRGF0 dW0KK2pzb25fb2JqZWN0X2FnZ191bmlxdWVfc3RyaWN0X3RyYW5zZm4oUEdfRlVOQ1RJT05f QVJHUykKK3sKKwlyZXR1cm4ganNvbl9vYmplY3RfYWdnX3RyYW5zZm5fd29ya2VyKGZjaW5m bywgdHJ1ZSwgdHJ1ZSk7Cit9CisKIC8qCiAgKiBqc29uX29iamVjdF9hZ2cgZmluYWwgZnVu Y3Rpb24uCiAgKi8KQEAgLTk4NSwyNSArMTI0NywxNCBAQCBjYXRlbmF0ZV9zdHJpbmdpbmZv X3N0cmluZyhTdHJpbmdJbmZvIGJ1ZmZlciwgY29uc3QgY2hhciAqYWRkb24pCiAJcmV0dXJu IHJlc3VsdDsKIH0KIAotLyoKLSAqIFNRTCBmdW5jdGlvbiBqc29uX2J1aWxkX29iamVjdCh2 YXJpYWRpYyAiYW55IikKLSAqLwogRGF0dW0KLWpzb25fYnVpbGRfb2JqZWN0KFBHX0ZVTkNU SU9OX0FSR1MpCitqc29uX2J1aWxkX29iamVjdF93b3JrZXIoaW50IG5hcmdzLCBEYXR1bSAq YXJncywgYm9vbCAqbnVsbHMsIE9pZCAqdHlwZXMsCisJCQkJCQkgYm9vbCBhYnNlbnRfb25f bnVsbCwgYm9vbCB1bmlxdWVfa2V5cykKIHsKLQlpbnQJCQluYXJnczsKIAlpbnQJCQlpOwog CWNvbnN0IGNoYXIgKnNlcCA9ICIiOwogCVN0cmluZ0luZm8JcmVzdWx0OwotCURhdHVtCSAg ICphcmdzOwotCWJvb2wJICAgKm51bGxzOwotCU9pZAkJICAgKnR5cGVzOwotCi0JLyogZmV0 Y2ggYXJndW1lbnQgdmFsdWVzIHRvIGJ1aWxkIHRoZSBvYmplY3QgKi8KLQluYXJncyA9IGV4 dHJhY3RfdmFyaWFkaWNfYXJncyhmY2luZm8sIDAsIGZhbHNlLCAmYXJncywgJnR5cGVzLCAm bnVsbHMpOwotCi0JaWYgKG5hcmdzIDwgMCkKLQkJUEdfUkVUVVJOX05VTEwoKTsKKwlKc29u VW5pcXVlQnVpbGRlclN0YXRlIHVuaXF1ZV9jaGVjazsKIAogCWlmIChuYXJncyAlIDIgIT0g MCkKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTEwMTcsMTAgKzEyNjgsMzIgQEAganNvbl9idWls ZF9vYmplY3QoUEdfRlVOQ1RJT05fQVJHUykKIAogCWFwcGVuZFN0cmluZ0luZm9DaGFyKHJl c3VsdCwgJ3snKTsKIAorCWlmICh1bmlxdWVfa2V5cykKKwkJanNvbl91bmlxdWVfYnVpbGRl cl9pbml0KCZ1bmlxdWVfY2hlY2spOworCiAJZm9yIChpID0gMDsgaSA8IG5hcmdzOyBpICs9 IDIpCiAJewotCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHJlc3VsdCwgc2VwKTsKLQkJc2Vw ID0gIiwgIjsKKwkJU3RyaW5nSW5mbwlvdXQ7CisJCWJvb2wJCXNraXA7CisJCWludAkJCWtl eV9vZmZzZXQ7CisKKwkJLyogU2tpcCBudWxsIHZhbHVlcyBpZiBhYnNlbnRfb25fbnVsbCAq LworCQlza2lwID0gYWJzZW50X29uX251bGwgJiYgbnVsbHNbaSArIDFdOworCisJCWlmIChz a2lwKQorCQl7CisJCQkvKiBJZiBrZXkgdW5pcXVlbmVzcyBjaGVjayBpcyBuZWVkZWQgd2Ug bXVzdCBzYXZlIHNraXBwZWQga2V5cyAqLworCQkJaWYgKCF1bmlxdWVfa2V5cykKKwkJCQlj b250aW51ZTsKKworCQkJb3V0ID0ganNvbl91bmlxdWVfYnVpbGRlcl9nZXRfc2tpcHBlZF9r ZXlzKCZ1bmlxdWVfY2hlY2spOworCQl9CisJCWVsc2UKKwkJeworCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZyhyZXN1bHQsIHNlcCk7CisJCQlzZXAgPSAiLCAiOworCQkJb3V0ID0gcmVz dWx0OworCQl9CiAKIAkJLyogcHJvY2VzcyBrZXkgKi8KIAkJaWYgKG51bGxzW2ldKQpAQCAt MTAyOSw3ICsxMzAyLDI0IEBAIGpzb25fYnVpbGRfb2JqZWN0KFBHX0ZVTkNUSU9OX0FSR1Mp CiAJCQkJCSBlcnJtc2coImFyZ3VtZW50ICVkIGNhbm5vdCBiZSBudWxsIiwgaSArIDEpLAog CQkJCQkgZXJyaGludCgiT2JqZWN0IGtleXMgc2hvdWxkIGJlIHRleHQuIikpKTsKIAotCQlh ZGRfanNvbihhcmdzW2ldLCBmYWxzZSwgcmVzdWx0LCB0eXBlc1tpXSwgdHJ1ZSk7CisJCS8q IHNhdmUga2V5IG9mZnNldCBiZWZvcmUga2V5IGFwcGVuZGluZyAqLworCQlrZXlfb2Zmc2V0 ID0gb3V0LT5sZW47CisKKwkJYWRkX2pzb24oYXJnc1tpXSwgZmFsc2UsIG91dCwgdHlwZXNb aV0sIHRydWUpOworCisJCWlmICh1bmlxdWVfa2V5cykKKwkJeworCQkJLyogY2hlY2sga2V5 IHVuaXF1ZW5lc3MgYWZ0ZXIga2V5IGFwcGVuZGluZyAqLworCQkJY29uc3QgY2hhciAqa2V5 ID0gJm91dC0+ZGF0YVtrZXlfb2Zmc2V0XTsKKworCQkJaWYgKCFqc29uX3VuaXF1ZV9jaGVj a19rZXkoJnVuaXF1ZV9jaGVjay5jaGVjaywga2V5LCAwKSkKKwkJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9EVVBMSUNBVEVfSlNPTl9PQkpFQ1RfS0VZX1ZB TFVFKSwKKwkJCQkJCSBlcnJtc2coImR1cGxpY2F0ZSBKU09OIGtleSAlcyIsIGtleSkpKTsK KworCQkJaWYgKHNraXApCisJCQkJY29udGludWU7CisJCX0KIAogCQlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKHJlc3VsdCwgIiA6ICIpOwogCkBAIC0xMDM5LDcgKzEzMjksMjcgQEAganNv bl9idWlsZF9vYmplY3QoUEdfRlVOQ1RJT05fQVJHUykKIAogCWFwcGVuZFN0cmluZ0luZm9D aGFyKHJlc3VsdCwgJ30nKTsKIAotCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0 X3dpdGhfbGVuKHJlc3VsdC0+ZGF0YSwgcmVzdWx0LT5sZW4pKTsKKwlyZXR1cm4gUG9pbnRl ckdldERhdHVtKGNzdHJpbmdfdG9fdGV4dF93aXRoX2xlbihyZXN1bHQtPmRhdGEsIHJlc3Vs dC0+bGVuKSk7Cit9CisKKy8qCisgKiBTUUwgZnVuY3Rpb24ganNvbl9idWlsZF9vYmplY3Qo dmFyaWFkaWMgImFueSIpCisgKi8KK0RhdHVtCitqc29uX2J1aWxkX29iamVjdChQR19GVU5D VElPTl9BUkdTKQoreworCURhdHVtCSAgICphcmdzOworCWJvb2wJICAgKm51bGxzOworCU9p ZAkJICAgKnR5cGVzOworCisJLyogYnVpbGQgYXJndW1lbnQgdmFsdWVzIHRvIGJ1aWxkIHRo ZSBvYmplY3QgKi8KKwlpbnQJCQluYXJncyA9IGV4dHJhY3RfdmFyaWFkaWNfYXJncyhmY2lu Zm8sIDAsIHRydWUsCisJCQkJCQkJCQkJCSAgJmFyZ3MsICZ0eXBlcywgJm51bGxzKTsKKwor CWlmIChuYXJncyA8IDApCisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwlQR19SRVRVUk5fREFU VU0oanNvbl9idWlsZF9vYmplY3Rfd29ya2VyKG5hcmdzLCBhcmdzLCBudWxscywgdHlwZXMs IGZhbHNlLCBmYWxzZSkpOwogfQogCiAvKgpAQCAtMTA1MSwyNSArMTM2MSwxMyBAQCBqc29u X2J1aWxkX29iamVjdF9ub2FyZ3MoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fVEVY VF9QKGNzdHJpbmdfdG9fdGV4dF93aXRoX2xlbigie30iLCAyKSk7CiB9CiAKLS8qCi0gKiBT UUwgZnVuY3Rpb24ganNvbl9idWlsZF9hcnJheSh2YXJpYWRpYyAiYW55IikKLSAqLwogRGF0 dW0KLWpzb25fYnVpbGRfYXJyYXkoUEdfRlVOQ1RJT05fQVJHUykKK2pzb25fYnVpbGRfYXJy YXlfd29ya2VyKGludCBuYXJncywgRGF0dW0gKmFyZ3MsIGJvb2wgKm51bGxzLCBPaWQgKnR5 cGVzLAorCQkJCQkJYm9vbCBhYnNlbnRfb25fbnVsbCkKIHsKLQlpbnQJCQluYXJnczsKIAlp bnQJCQlpOwogCWNvbnN0IGNoYXIgKnNlcCA9ICIiOwogCVN0cmluZ0luZm8JcmVzdWx0Owot CURhdHVtCSAgICphcmdzOwotCWJvb2wJICAgKm51bGxzOwotCU9pZAkJICAgKnR5cGVzOwot Ci0JLyogZmV0Y2ggYXJndW1lbnQgdmFsdWVzIHRvIGJ1aWxkIHRoZSBhcnJheSAqLwotCW5h cmdzID0gZXh0cmFjdF92YXJpYWRpY19hcmdzKGZjaW5mbywgMCwgZmFsc2UsICZhcmdzLCAm dHlwZXMsICZudWxscyk7Ci0KLQlpZiAobmFyZ3MgPCAwKQotCQlQR19SRVRVUk5fTlVMTCgp OwogCiAJcmVzdWx0ID0gbWFrZVN0cmluZ0luZm8oKTsKIApAQCAtMTA3Nyw2ICsxMzc1LDkg QEAganNvbl9idWlsZF9hcnJheShQR19GVU5DVElPTl9BUkdTKQogCiAJZm9yIChpID0gMDsg aSA8IG5hcmdzOyBpKyspCiAJeworCQlpZiAoYWJzZW50X29uX251bGwgJiYgbnVsbHNbaV0p CisJCQljb250aW51ZTsKKwogCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHJlc3VsdCwgc2Vw KTsKIAkJc2VwID0gIiwgIjsKIAkJYWRkX2pzb24oYXJnc1tpXSwgbnVsbHNbaV0sIHJlc3Vs dCwgdHlwZXNbaV0sIGZhbHNlKTsKQEAgLTEwODQsNyArMTM4NSwyNyBAQCBqc29uX2J1aWxk X2FycmF5KFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAlhcHBlbmRTdHJpbmdJbmZvQ2hhcihyZXN1 bHQsICddJyk7CiAKLQlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dF93aXRoX2xl bihyZXN1bHQtPmRhdGEsIHJlc3VsdC0+bGVuKSk7CisJcmV0dXJuIFBvaW50ZXJHZXREYXR1 bShjc3RyaW5nX3RvX3RleHRfd2l0aF9sZW4ocmVzdWx0LT5kYXRhLCByZXN1bHQtPmxlbikp OworfQorCisvKgorICogU1FMIGZ1bmN0aW9uIGpzb25fYnVpbGRfYXJyYXkodmFyaWFkaWMg ImFueSIpCisgKi8KK0RhdHVtCitqc29uX2J1aWxkX2FycmF5KFBHX0ZVTkNUSU9OX0FSR1Mp Cit7CisJRGF0dW0JICAgKmFyZ3M7CisJYm9vbAkgICAqbnVsbHM7CisJT2lkCQkgICAqdHlw ZXM7CisKKwkvKiBidWlsZCBhcmd1bWVudCB2YWx1ZXMgdG8gYnVpbGQgdGhlIG9iamVjdCAq LworCWludAkJCW5hcmdzID0gZXh0cmFjdF92YXJpYWRpY19hcmdzKGZjaW5mbywgMCwgdHJ1 ZSwKKwkJCQkJCQkJCQkJICAmYXJncywgJnR5cGVzLCAmbnVsbHMpOworCisJaWYgKG5hcmdz IDwgMCkKKwkJUEdfUkVUVVJOX05VTEwoKTsKKworCVBHX1JFVFVSTl9EQVRVTShqc29uX2J1 aWxkX2FycmF5X3dvcmtlcihuYXJncywgYXJncywgbnVsbHMsIHR5cGVzLCBmYWxzZSkpOwog fQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYwppbmRleCAwNTM5ZjQxYzE3Li40OWYyOTky YmJiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYwpAQCAtMTQsNiArMTQsNyBAQAogCiAjaW5j bHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImFjY2Vzcy90cmFuc2Ft LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9jLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z190eXBlLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgImxpYnBxL3BxZm9y bWF0LmgiCkBAIC0xMTQ5LDYgKzExNTAsMzkgQEAgYWRkX2pzb25iKERhdHVtIHZhbCwgYm9v bCBpc19udWxsLCBKc29uYkluU3RhdGUgKnJlc3VsdCwKIAlkYXR1bV90b19qc29uYih2YWws IGlzX251bGwsIHJlc3VsdCwgdGNhdGVnb3J5LCBvdXRmdW5jb2lkLCBrZXlfc2NhbGFyKTsK IH0KIAorYm9vbAordG9fanNvbmJfaXNfaW1tdXRhYmxlKE9pZCB0eXBvaWQpCit7CisJSnNv bmJUeXBlQ2F0ZWdvcnkgdGNhdGVnb3J5OworCU9pZAkJCW91dGZ1bmNvaWQ7CisKKwlqc29u Yl9jYXRlZ29yaXplX3R5cGUodHlwb2lkLCAmdGNhdGVnb3J5LCAmb3V0ZnVuY29pZCk7CisK Kwlzd2l0Y2ggKHRjYXRlZ29yeSkKKwl7CisJCWNhc2UgSlNPTkJUWVBFX0JPT0w6CisJCWNh c2UgSlNPTkJUWVBFX0pTT046CisJCWNhc2UgSlNPTkJUWVBFX0pTT05COgorCQkJcmV0dXJu IHRydWU7CisKKwkJY2FzZSBKU09OQlRZUEVfREFURToKKwkJY2FzZSBKU09OQlRZUEVfVElN RVNUQU1QOgorCQljYXNlIEpTT05CVFlQRV9USU1FU1RBTVBUWjoKKwkJCXJldHVybiBmYWxz ZTsKKworCQljYXNlIEpTT05CVFlQRV9BUlJBWToKKwkJCXJldHVybiBmYWxzZTsJCS8qIFRP RE8gcmVjdXJzZSBpbnRvIGVsZW1lbnRzICovCisKKwkJY2FzZSBKU09OQlRZUEVfQ09NUE9T SVRFOgorCQkJcmV0dXJuIGZhbHNlOwkJLyogVE9ETyByZWN1cnNlIGludG8gZmllbGRzICov CisKKwkJY2FzZSBKU09OQlRZUEVfTlVNRVJJQzoKKwkJY2FzZSBKU09OQlRZUEVfSlNPTkNB U1Q6CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gZnVuY192b2xhdGlsZShvdXRmdW5jb2lkKSA9 PSBQUk9WT0xBVElMRV9JTU1VVEFCTEU7CisJfQorfQorCiAvKgogICogU1FMIGZ1bmN0aW9u IHRvX2pzb25iKGFueXZhbHVlKQogICovCkBAIC0xMTc2LDI0ICsxMjEwLDEyIEBAIHRvX2pz b25iKFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX1BPSU5URVIoSnNvbmJWYWx1ZVRv SnNvbmIocmVzdWx0LnJlcykpOwogfQogCi0vKgotICogU1FMIGZ1bmN0aW9uIGpzb25iX2J1 aWxkX29iamVjdCh2YXJpYWRpYyAiYW55IikKLSAqLwogRGF0dW0KLWpzb25iX2J1aWxkX29i amVjdChQR19GVU5DVElPTl9BUkdTKQoranNvbmJfYnVpbGRfb2JqZWN0X3dvcmtlcihpbnQg bmFyZ3MsIERhdHVtICphcmdzLCBib29sICpudWxscywgT2lkICp0eXBlcywKKwkJCQkJCSAg Ym9vbCBhYnNlbnRfb25fbnVsbCwgYm9vbCB1bmlxdWVfa2V5cykKIHsKLQlpbnQJCQluYXJn czsKIAlpbnQJCQlpOwogCUpzb25iSW5TdGF0ZSByZXN1bHQ7Ci0JRGF0dW0JICAgKmFyZ3M7 Ci0JYm9vbAkgICAqbnVsbHM7Ci0JT2lkCQkgICAqdHlwZXM7Ci0KLQkvKiBidWlsZCBhcmd1 bWVudCB2YWx1ZXMgdG8gYnVpbGQgdGhlIG9iamVjdCAqLwotCW5hcmdzID0gZXh0cmFjdF92 YXJpYWRpY19hcmdzKGZjaW5mbywgMCwgdHJ1ZSwgJmFyZ3MsICZ0eXBlcywgJm51bGxzKTsK LQotCWlmIChuYXJncyA8IDApCi0JCVBHX1JFVFVSTl9OVUxMKCk7CiAKIAlpZiAobmFyZ3Mg JSAyICE9IDApCiAJCWVyZXBvcnQoRVJST1IsCkBAIC0xMjA2LDE1ICsxMjI4LDI2IEBAIGpz b25iX2J1aWxkX29iamVjdChQR19GVU5DVElPTl9BUkdTKQogCW1lbXNldCgmcmVzdWx0LCAw LCBzaXplb2YoSnNvbmJJblN0YXRlKSk7CiAKIAlyZXN1bHQucmVzID0gcHVzaEpzb25iVmFs dWUoJnJlc3VsdC5wYXJzZVN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKwlyZXN1 bHQucGFyc2VTdGF0ZS0+dW5pcXVlX2tleXMgPSB1bmlxdWVfa2V5czsKKwlyZXN1bHQucGFy c2VTdGF0ZS0+c2tpcF9udWxscyA9IGFic2VudF9vbl9udWxsOwogCiAJZm9yIChpID0gMDsg aSA8IG5hcmdzOyBpICs9IDIpCiAJewogCQkvKiBwcm9jZXNzIGtleSAqLworCQlib29sCQlz a2lwOworCiAJCWlmIChudWxsc1tpXSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAogCQkJCQkgZXJybXNnKCJh cmd1bWVudCAlZDoga2V5IG11c3Qgbm90IGJlIG51bGwiLCBpICsgMSkpKTsKIAorCQkvKiBz a2lwIG51bGwgdmFsdWVzIGlmIGFic2VudF9vbl9udWxsICovCisJCXNraXAgPSBhYnNlbnRf b25fbnVsbCAmJiBudWxsc1tpICsgMV07CisKKwkJLyogd2UgbmVlZCB0byBzYXZlIHNraXBw ZWQga2V5cyBmb3IgdGhlIGtleSB1bmlxdWVuZXNzIGNoZWNrICovCisJCWlmIChza2lwICYm ICF1bmlxdWVfa2V5cykKKwkJCWNvbnRpbnVlOworCiAJCWFkZF9qc29uYihhcmdzW2ldLCBm YWxzZSwgJnJlc3VsdCwgdHlwZXNbaV0sIHRydWUpOwogCiAJCS8qIHByb2Nlc3MgdmFsdWUg Ki8KQEAgLTEyMjMsNyArMTI1NiwyNyBAQCBqc29uYl9idWlsZF9vYmplY3QoUEdfRlVOQ1RJ T05fQVJHUykKIAogCXJlc3VsdC5yZXMgPSBwdXNoSnNvbmJWYWx1ZSgmcmVzdWx0LnBhcnNl U3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKIAotCVBHX1JFVFVSTl9QT0lOVEVSKEpz b25iVmFsdWVUb0pzb25iKHJlc3VsdC5yZXMpKTsKKwlyZXR1cm4gSnNvbmJQR2V0RGF0dW0o SnNvbmJWYWx1ZVRvSnNvbmIocmVzdWx0LnJlcykpOworfQorCisvKgorICogU1FMIGZ1bmN0 aW9uIGpzb25iX2J1aWxkX29iamVjdCh2YXJpYWRpYyAiYW55IikKKyAqLworRGF0dW0KK2pz b25iX2J1aWxkX29iamVjdChQR19GVU5DVElPTl9BUkdTKQoreworCURhdHVtCSAgICphcmdz OworCWJvb2wJICAgKm51bGxzOworCU9pZAkJICAgKnR5cGVzOworCisJLyogYnVpbGQgYXJn dW1lbnQgdmFsdWVzIHRvIGJ1aWxkIHRoZSBvYmplY3QgKi8KKwlpbnQJCQluYXJncyA9IGV4 dHJhY3RfdmFyaWFkaWNfYXJncyhmY2luZm8sIDAsIHRydWUsCisJCQkJCQkJCQkJCSAgJmFy Z3MsICZ0eXBlcywgJm51bGxzKTsKKworCWlmIChuYXJncyA8IDApCisJCVBHX1JFVFVSTl9O VUxMKCk7CisKKwlQR19SRVRVUk5fREFUVU0oanNvbmJfYnVpbGRfb2JqZWN0X3dvcmtlcihu YXJncywgYXJncywgbnVsbHMsIHR5cGVzLCBmYWxzZSwgZmFsc2UpKTsKIH0KIAogLyoKQEAg LTEyNDIsMzcgKzEyOTUsNTEgQEAganNvbmJfYnVpbGRfb2JqZWN0X25vYXJncyhQR19GVU5D VElPTl9BUkdTKQogCVBHX1JFVFVSTl9QT0lOVEVSKEpzb25iVmFsdWVUb0pzb25iKHJlc3Vs dC5yZXMpKTsKIH0KIAotLyoKLSAqIFNRTCBmdW5jdGlvbiBqc29uYl9idWlsZF9hcnJheSh2 YXJpYWRpYyAiYW55IikKLSAqLwogRGF0dW0KLWpzb25iX2J1aWxkX2FycmF5KFBHX0ZVTkNU SU9OX0FSR1MpCitqc29uYl9idWlsZF9hcnJheV93b3JrZXIoaW50IG5hcmdzLCBEYXR1bSAq YXJncywgYm9vbCAqbnVsbHMsIE9pZCAqdHlwZXMsCisJCQkJCQkgYm9vbCBhYnNlbnRfb25f bnVsbCkKIHsKLQlpbnQJCQluYXJnczsKIAlpbnQJCQlpOwogCUpzb25iSW5TdGF0ZSByZXN1 bHQ7Ci0JRGF0dW0JICAgKmFyZ3M7Ci0JYm9vbAkgICAqbnVsbHM7Ci0JT2lkCQkgICAqdHlw ZXM7Ci0KLQkvKiBidWlsZCBhcmd1bWVudCB2YWx1ZXMgdG8gYnVpbGQgdGhlIGFycmF5ICov Ci0JbmFyZ3MgPSBleHRyYWN0X3ZhcmlhZGljX2FyZ3MoZmNpbmZvLCAwLCB0cnVlLCAmYXJn cywgJnR5cGVzLCAmbnVsbHMpOwotCi0JaWYgKG5hcmdzIDwgMCkKLQkJUEdfUkVUVVJOX05V TEwoKTsKIAogCW1lbXNldCgmcmVzdWx0LCAwLCBzaXplb2YoSnNvbmJJblN0YXRlKSk7CiAK IAlyZXN1bHQucmVzID0gcHVzaEpzb25iVmFsdWUoJnJlc3VsdC5wYXJzZVN0YXRlLCBXSkJf QkVHSU5fQVJSQVksIE5VTEwpOwogCiAJZm9yIChpID0gMDsgaSA8IG5hcmdzOyBpKyspCisJ eworCQlpZiAoYWJzZW50X29uX251bGwgJiYgbnVsbHNbaV0pCisJCQljb250aW51ZTsKKwog CQlhZGRfanNvbmIoYXJnc1tpXSwgbnVsbHNbaV0sICZyZXN1bHQsIHR5cGVzW2ldLCBmYWxz ZSk7CisJfQogCiAJcmVzdWx0LnJlcyA9IHB1c2hKc29uYlZhbHVlKCZyZXN1bHQucGFyc2VT dGF0ZSwgV0pCX0VORF9BUlJBWSwgTlVMTCk7CiAKLQlQR19SRVRVUk5fUE9JTlRFUihKc29u YlZhbHVlVG9Kc29uYihyZXN1bHQucmVzKSk7CisJcmV0dXJuIEpzb25iUEdldERhdHVtKEpz b25iVmFsdWVUb0pzb25iKHJlc3VsdC5yZXMpKTsKIH0KIAorLyoKKyAqIFNRTCBmdW5jdGlv biBqc29uYl9idWlsZF9hcnJheSh2YXJpYWRpYyAiYW55IikKKyAqLworRGF0dW0KK2pzb25i X2J1aWxkX2FycmF5KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJRGF0dW0JICAgKmFyZ3M7CisJ Ym9vbAkgICAqbnVsbHM7CisJT2lkCQkgICAqdHlwZXM7CisKKwkvKiBidWlsZCBhcmd1bWVu dCB2YWx1ZXMgdG8gYnVpbGQgdGhlIG9iamVjdCAqLworCWludAkJCW5hcmdzID0gZXh0cmFj dF92YXJpYWRpY19hcmdzKGZjaW5mbywgMCwgdHJ1ZSwKKwkJCQkJCQkJCQkJICAmYXJncywg JnR5cGVzLCAmbnVsbHMpOworCisJaWYgKG5hcmdzIDwgMCkKKwkJUEdfUkVUVVJOX05VTEwo KTsKKworCVBHX1JFVFVSTl9EQVRVTShqc29uYl9idWlsZF9hcnJheV93b3JrZXIobmFyZ3Ms IGFyZ3MsIG51bGxzLCB0eXBlcywgZmFsc2UpKTsKK30KKworCiAvKgogICogZGVnZW5lcmF0 ZSBjYXNlIG9mIGpzb25iX2J1aWxkX2FycmF5IHdoZXJlIGl0IGdldHMgMCBhcmd1bWVudHMu CiAgKi8KQEAgLTE1MDYsNiArMTU3Myw4IEBAIGNsb25lX3BhcnNlX3N0YXRlKEpzb25iUGFy c2VTdGF0ZSAqc3RhdGUpCiAJewogCQlvY3Vyc29yLT5jb250VmFsID0gaWN1cnNvci0+Y29u dFZhbDsKIAkJb2N1cnNvci0+c2l6ZSA9IGljdXJzb3ItPnNpemU7CisJCW9jdXJzb3ItPnVu aXF1ZV9rZXlzID0gaWN1cnNvci0+dW5pcXVlX2tleXM7CisJCW9jdXJzb3ItPnNraXBfbnVs bHMgPSBpY3Vyc29yLT5za2lwX251bGxzOwogCQlpY3Vyc29yID0gaWN1cnNvci0+bmV4dDsK IAkJaWYgKGljdXJzb3IgPT0gTlVMTCkKIAkJCWJyZWFrOwpAQCAtMTUxNywxMiArMTU4Niw4 IEBAIGNsb25lX3BhcnNlX3N0YXRlKEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUpCiAJcmV0dXJu IHJlc3VsdDsKIH0KIAotCi0vKgotICoganNvbmJfYWdnIGFnZ3JlZ2F0ZSBmdW5jdGlvbgot ICovCi1EYXR1bQotanNvbmJfYWdnX3RyYW5zZm4oUEdfRlVOQ1RJT05fQVJHUykKK3N0YXRp YyBEYXR1bQoranNvbmJfYWdnX3RyYW5zZm5fd29ya2VyKEZ1bmN0aW9uQ2FsbEluZm8gZmNp bmZvLCBib29sIGFic2VudF9vbl9udWxsKQogewogCU1lbW9yeUNvbnRleHQgb2xkY29udGV4 dCwKIAkJCQlhZ2djb250ZXh0OwpAQCAtMTU3MCw2ICsxNjM1LDkgQEAganNvbmJfYWdnX3Ry YW5zZm4oUEdfRlVOQ1RJT05fQVJHUykKIAkJcmVzdWx0ID0gc3RhdGUtPnJlczsKIAl9CiAK KwlpZiAoYWJzZW50X29uX251bGwgJiYgUEdfQVJHSVNOVUxMKDEpKQorCQlQR19SRVRVUk5f UE9JTlRFUihzdGF0ZSk7CisKIAkvKiB0dXJuIHRoZSBhcmd1bWVudCBpbnRvIGpzb25iIGlu IHRoZSBub3JtYWwgZnVuY3Rpb24gY29udGV4dCAqLwogCiAJdmFsID0gUEdfQVJHSVNOVUxM KDEpID8gKERhdHVtKSAwIDogUEdfR0VUQVJHX0RBVFVNKDEpOwpAQCAtMTYzOSw2ICsxNzA3 LDI0IEBAIGpzb25iX2FnZ190cmFuc2ZuKFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJO X1BPSU5URVIoc3RhdGUpOwogfQogCisvKgorICoganNvbmJfYWdnIGFnZ3JlZ2F0ZSBmdW5j dGlvbgorICovCitEYXR1bQoranNvbmJfYWdnX3RyYW5zZm4oUEdfRlVOQ1RJT05fQVJHUykK K3sKKwlyZXR1cm4ganNvbmJfYWdnX3RyYW5zZm5fd29ya2VyKGZjaW5mbywgZmFsc2UpOwor fQorCisvKgorICoganNvbmJfYWdnX3N0cmljdCBhZ2dyZWdhdGUgZnVuY3Rpb24KKyAqLwor RGF0dW0KK2pzb25iX2FnZ19zdHJpY3RfdHJhbnNmbihQR19GVU5DVElPTl9BUkdTKQorewor CXJldHVybiBqc29uYl9hZ2dfdHJhbnNmbl93b3JrZXIoZmNpbmZvLCB0cnVlKTsKK30KKwog RGF0dW0KIGpzb25iX2FnZ19maW5hbGZuKFBHX0ZVTkNUSU9OX0FSR1MpCiB7CkBAIC0xNjcy LDExICsxNzU4LDkgQEAganNvbmJfYWdnX2ZpbmFsZm4oUEdfRlVOQ1RJT05fQVJHUykKIAlQ R19SRVRVUk5fUE9JTlRFUihvdXQpOwogfQogCi0vKgotICoganNvbmJfb2JqZWN0X2FnZyBh Z2dyZWdhdGUgZnVuY3Rpb24KLSAqLwotRGF0dW0KLWpzb25iX29iamVjdF9hZ2dfdHJhbnNm bihQR19GVU5DVElPTl9BUkdTKQorc3RhdGljIERhdHVtCitqc29uYl9vYmplY3RfYWdnX3Ry YW5zZm5fd29ya2VyKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAorCQkJCQkJCQlib29sIGFi c2VudF9vbl9udWxsLCBib29sIHVuaXF1ZV9rZXlzKQogewogCU1lbW9yeUNvbnRleHQgb2xk Y29udGV4dCwKIAkJCQlhZ2djb250ZXh0OwpAQCAtMTY5MCw2ICsxNzc0LDcgQEAganNvbmJf b2JqZWN0X2FnZ190cmFuc2ZuKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkgICAqamJ2YWw7CiAJ SnNvbmJWYWx1ZQl2OwogCUpzb25iSXRlcmF0b3JUb2tlbiB0eXBlOworCWJvb2wJCXNraXA7 CiAKIAlpZiAoIUFnZ0NoZWNrQ2FsbENvbnRleHQoZmNpbmZvLCAmYWdnY29udGV4dCkpCiAJ ewpAQCAtMTcwOSw2ICsxNzk0LDkgQEAganNvbmJfb2JqZWN0X2FnZ190cmFuc2ZuKFBHX0ZV TkNUSU9OX0FSR1MpCiAJCXN0YXRlLT5yZXMgPSByZXN1bHQ7CiAJCXJlc3VsdC0+cmVzID0g cHVzaEpzb25iVmFsdWUoJnJlc3VsdC0+cGFyc2VTdGF0ZSwKIAkJCQkJCQkJCSBXSkJfQkVH SU5fT0JKRUNULCBOVUxMKTsKKwkJcmVzdWx0LT5wYXJzZVN0YXRlLT51bmlxdWVfa2V5cyA9 IHVuaXF1ZV9rZXlzOworCQlyZXN1bHQtPnBhcnNlU3RhdGUtPnNraXBfbnVsbHMgPSBhYnNl bnRfb25fbnVsbDsKKwogCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CiAK IAkJYXJnX3R5cGUgPSBnZXRfZm5fZXhwcl9hcmd0eXBlKGZjaW5mby0+ZmxpbmZvLCAxKTsK QEAgLTE3NDQsNiArMTgzMiwxNSBAQCBqc29uYl9vYmplY3RfYWdnX3RyYW5zZm4oUEdfRlVO Q1RJT05fQVJHUykKIAkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKIAkJCQkgZXJybXNnKCJmaWVsZCBuYW1lIG11c3Qgbm90IGJlIG51bGwiKSkpOwog CisJLyoKKwkgKiBTa2lwIG51bGwgdmFsdWVzIGlmIGFic2VudF9vbl9udWxsIHVubGVzcyBr ZXkgdW5pcXVlbmVzcyBjaGVjayBpcworCSAqIG5lZWRlZCAoYmVjYXVzZSB3ZSBtdXN0IHNh dmUga2V5cyBpbiB0aGlzIGNhc2UpLgorCSAqLworCXNraXAgPSBhYnNlbnRfb25fbnVsbCAm JiBQR19BUkdJU05VTEwoMik7CisKKwlpZiAoc2tpcCAmJiAhdW5pcXVlX2tleXMpCisJCVBH X1JFVFVSTl9QT0lOVEVSKHN0YXRlKTsKKwogCXZhbCA9IFBHX0dFVEFSR19EQVRVTSgxKTsK IAogCW1lbXNldCgmZWxlbSwgMCwgc2l6ZW9mKEpzb25iSW5TdGF0ZSkpOwpAQCAtMTc5OSw2 ICsxODk2LDE2IEBAIGpzb25iX29iamVjdF9hZ2dfdHJhbnNmbihQR19GVU5DVElPTl9BUkdT KQogCQkJCX0KIAkJCQlyZXN1bHQtPnJlcyA9IHB1c2hKc29uYlZhbHVlKCZyZXN1bHQtPnBh cnNlU3RhdGUsCiAJCQkJCQkJCQkJCSBXSkJfS0VZLCAmdik7CisKKwkJCQlpZiAoc2tpcCkK KwkJCQl7CisJCQkJCXYudHlwZSA9IGpidk51bGw7CisJCQkJCXJlc3VsdC0+cmVzID0gcHVz aEpzb25iVmFsdWUoJnJlc3VsdC0+cGFyc2VTdGF0ZSwKKwkJCQkJCQkJCQkJCSBXSkJfVkFM VUUsICZ2KTsKKwkJCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCQkJ CQlQR19SRVRVUk5fUE9JTlRFUihzdGF0ZSk7CisJCQkJfQorCiAJCQkJYnJlYWs7CiAJCQlj YXNlIFdKQl9FTkRfQVJSQVk6CiAJCQkJYnJlYWs7CkBAIC0xODcxLDYgKzE5NzgsNDMgQEAg anNvbmJfb2JqZWN0X2FnZ190cmFuc2ZuKFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJO X1BPSU5URVIoc3RhdGUpOwogfQogCisvKgorICoganNvbmJfb2JqZWN0X2FnZyBhZ2dyZWdh dGUgZnVuY3Rpb24KKyAqLworRGF0dW0KK2pzb25iX29iamVjdF9hZ2dfdHJhbnNmbihQR19G VU5DVElPTl9BUkdTKQoreworCXJldHVybiBqc29uYl9vYmplY3RfYWdnX3RyYW5zZm5fd29y a2VyKGZjaW5mbywgZmFsc2UsIGZhbHNlKTsKK30KKworCisvKgorICoganNvbmJfb2JqZWN0 X2FnZ19zdHJpY3QgYWdncmVnYXRlIGZ1bmN0aW9uCisgKi8KK0RhdHVtCitqc29uYl9vYmpl Y3RfYWdnX3N0cmljdF90cmFuc2ZuKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJcmV0dXJuIGpz b25iX29iamVjdF9hZ2dfdHJhbnNmbl93b3JrZXIoZmNpbmZvLCB0cnVlLCBmYWxzZSk7Cit9 CisKKy8qCisgKiBqc29uYl9vYmplY3RfYWdnX3VuaXF1ZSBhZ2dyZWdhdGUgZnVuY3Rpb24K KyAqLworRGF0dW0KK2pzb25iX29iamVjdF9hZ2dfdW5pcXVlX3RyYW5zZm4oUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwlyZXR1cm4ganNvbmJfb2JqZWN0X2FnZ190cmFuc2ZuX3dvcmtlcihm Y2luZm8sIGZhbHNlLCB0cnVlKTsKK30KKworLyoKKyAqIGpzb25iX29iamVjdF9hZ2dfdW5p cXVlX3N0cmljdCBhZ2dyZWdhdGUgZnVuY3Rpb24KKyAqLworRGF0dW0KK2pzb25iX29iamVj dF9hZ2dfdW5pcXVlX3N0cmljdF90cmFuc2ZuKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJcmV0 dXJuIGpzb25iX29iamVjdF9hZ2dfdHJhbnNmbl93b3JrZXIoZmNpbmZvLCB0cnVlLCB0cnVl KTsKK30KKwogRGF0dW0KIGpzb25iX29iamVjdF9hZ2dfZmluYWxmbihQR19GVU5DVElPTl9B UkdTKQogewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iX3V0aWwu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYl91dGlsLmMKaW5kZXggZTViMWViZjBj My4uZGNiOWU3NTU0ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25i X3V0aWwuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmJfdXRpbC5jCkBAIC02 NCw3ICs2NCw4IEBAIHN0YXRpYyBpbnQJbGVuZ3RoQ29tcGFyZUpzb25iU3RyaW5nVmFsdWUo Y29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYik7CiBzdGF0aWMgaW50CWxlbmd0aENvbXBh cmVKc29uYlN0cmluZyhjb25zdCBjaGFyICp2YWwxLCBpbnQgbGVuMSwKIAkJCQkJCQkJCSBj b25zdCBjaGFyICp2YWwyLCBpbnQgbGVuMik7CiBzdGF0aWMgaW50CWxlbmd0aENvbXBhcmVK c29uYlBhaXIoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwgdm9pZCAqYmluZXF1YWwp Owotc3RhdGljIHZvaWQgdW5pcXVlaWZ5SnNvbmJPYmplY3QoSnNvbmJWYWx1ZSAqb2JqZWN0 KTsKK3N0YXRpYyB2b2lkIHVuaXF1ZWlmeUpzb25iT2JqZWN0KEpzb25iVmFsdWUgKm9iamVj dCwgYm9vbCB1bmlxdWVfa2V5cywKKwkJCQkJCQkJIGJvb2wgc2tpcF9udWxscyk7CiBzdGF0 aWMgSnNvbmJWYWx1ZSAqcHVzaEpzb25iVmFsdWVTY2FsYXIoSnNvbmJQYXJzZVN0YXRlICoq cHN0YXRlLAogCQkJCQkJCQkJCUpzb25iSXRlcmF0b3JUb2tlbiBzZXEsCiAJCQkJCQkJCQkJ SnNvbmJWYWx1ZSAqc2NhbGFyVmFsKTsKQEAgLTY4OSw3ICs2OTAsOSBAQCBwdXNoSnNvbmJW YWx1ZVNjYWxhcihKc29uYlBhcnNlU3RhdGUgKipwc3RhdGUsIEpzb25iSXRlcmF0b3JUb2tl biBzZXEsCiAJCQlhcHBlbmRFbGVtZW50KCpwc3RhdGUsIHNjYWxhclZhbCk7CiAJCQlicmVh azsKIAkJY2FzZSBXSkJfRU5EX09CSkVDVDoKLQkJCXVuaXF1ZWlmeUpzb25iT2JqZWN0KCYo KnBzdGF0ZSktPmNvbnRWYWwpOworCQkJdW5pcXVlaWZ5SnNvbmJPYmplY3QoJigqcHN0YXRl KS0+Y29udFZhbCwKKwkJCQkJCQkJICgqcHN0YXRlKS0+dW5pcXVlX2tleXMsCisJCQkJCQkJ CSAoKnBzdGF0ZSktPnNraXBfbnVsbHMpOwogCQkJLyogZmFsbCB0aHJvdWdoISAqLwogCQlj YXNlIFdKQl9FTkRfQVJSQVk6CiAJCQkvKiBTdGVwcyBoZXJlIGNvbW1vbiB0byBXSkJfRU5E X09CSkVDVCBjYXNlICovCkBAIC03MzIsNiArNzM1LDkgQEAgcHVzaFN0YXRlKEpzb25iUGFy c2VTdGF0ZSAqKnBzdGF0ZSkKIAlKc29uYlBhcnNlU3RhdGUgKm5zID0gcGFsbG9jKHNpemVv ZihKc29uYlBhcnNlU3RhdGUpKTsKIAogCW5zLT5uZXh0ID0gKnBzdGF0ZTsKKwlucy0+dW5p cXVlX2tleXMgPSBmYWxzZTsKKwlucy0+c2tpcF9udWxscyA9IGZhbHNlOworCiAJcmV0dXJu IG5zOwogfQogCkBAIC0xOTM2LDcgKzE5NDIsNyBAQCBsZW5ndGhDb21wYXJlSnNvbmJQYWly KGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIHZvaWQgKmJpbmVxdWFsKQogICogU29y dCBhbmQgdW5pcXVlLWlmeSBwYWlycyBpbiBKc29uYlZhbHVlIG9iamVjdAogICovCiBzdGF0 aWMgdm9pZAotdW5pcXVlaWZ5SnNvbmJPYmplY3QoSnNvbmJWYWx1ZSAqb2JqZWN0KQordW5p cXVlaWZ5SnNvbmJPYmplY3QoSnNvbmJWYWx1ZSAqb2JqZWN0LCBib29sIHVuaXF1ZV9rZXlz LCBib29sIHNraXBfbnVsbHMpCiB7CiAJYm9vbAkJaGFzTm9uVW5pcSA9IGZhbHNlOwogCkBA IC0xOTQ2LDE1ICsxOTUyLDMyIEBAIHVuaXF1ZWlmeUpzb25iT2JqZWN0KEpzb25iVmFsdWUg Km9iamVjdCkKIAkJcXNvcnRfYXJnKG9iamVjdC0+dmFsLm9iamVjdC5wYWlycywgb2JqZWN0 LT52YWwub2JqZWN0Lm5QYWlycywgc2l6ZW9mKEpzb25iUGFpciksCiAJCQkJICBsZW5ndGhD b21wYXJlSnNvbmJQYWlyLCAmaGFzTm9uVW5pcSk7CiAKLQlpZiAoaGFzTm9uVW5pcSkKKwlp ZiAoaGFzTm9uVW5pcSAmJiB1bmlxdWVfa2V5cykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJyY29kZShFUlJDT0RFX0RVUExJQ0FURV9KU09OX09CSkVDVF9LRVlfVkFMVUUpLAorCQkJ CSBlcnJtc2coImR1cGxpY2F0ZSBKU09OIG9iamVjdCBrZXkgdmFsdWUiKSkpOworCisJaWYg KGhhc05vblVuaXEgfHwgc2tpcF9udWxscykKIAl7Ci0JCUpzb25iUGFpciAgKnB0ciA9IG9i amVjdC0+dmFsLm9iamVjdC5wYWlycyArIDEsCi0JCQkJICAgKnJlcyA9IG9iamVjdC0+dmFs Lm9iamVjdC5wYWlyczsKKwkJSnNvbmJQYWlyICAqcHRyLAorCQkJCSAgICpyZXM7CisKKwkJ d2hpbGUgKHNraXBfbnVsbHMgJiYgb2JqZWN0LT52YWwub2JqZWN0Lm5QYWlycyA+IDAgJiYK KwkJCSAgIG9iamVjdC0+dmFsLm9iamVjdC5wYWlycy0+dmFsdWUudHlwZSA9PSBqYnZOdWxs KQorCQl7CisJCQkvKiBJZiBza2lwX251bGxzIGlzIHRydWUsIHJlbW92ZSBsZWFkaW5nIGl0 ZW1zIHdpdGggbnVsbCAqLworCQkJb2JqZWN0LT52YWwub2JqZWN0LnBhaXJzKys7CisJCQlv YmplY3QtPnZhbC5vYmplY3QublBhaXJzLS07CisJCX0KKworCQlwdHIgPSBvYmplY3QtPnZh bC5vYmplY3QucGFpcnMgKyAxOworCQlyZXMgPSBvYmplY3QtPnZhbC5vYmplY3QucGFpcnM7 CiAKIAkJd2hpbGUgKHB0ciAtIG9iamVjdC0+dmFsLm9iamVjdC5wYWlycyA8IG9iamVjdC0+ dmFsLm9iamVjdC5uUGFpcnMpCiAJCXsKLQkJCS8qIEF2b2lkIGNvcHlpbmcgb3ZlciBkdXBs aWNhdGUgKi8KLQkJCWlmIChsZW5ndGhDb21wYXJlSnNvbmJTdHJpbmdWYWx1ZShwdHIsIHJl cykgIT0gMCkKKwkJCS8qIEF2b2lkIGNvcHlpbmcgb3ZlciBkdXBsaWNhdGUgb3IgbnVsbCAq LworCQkJaWYgKGxlbmd0aENvbXBhcmVKc29uYlN0cmluZ1ZhbHVlKHB0ciwgcmVzKSAhPSAw ICYmCisJCQkJKCFza2lwX251bGxzIHx8IHB0ci0+dmFsdWUudHlwZSAhPSBqYnZOdWxsKSkK IAkJCXsKIAkJCQlyZXMrKzsKIAkJCQlpZiAocHRyICE9IHJlcykKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9ydWxldXRpbHMuYwppbmRleCBiY2I0OTNiNTZjLi41N2E0MDM2OWI2IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3J1bGV1dGlscy5jCkBAIC00NjYsNiArNDY2LDEyIEBAIHN0YXRpYyB2b2lk IGdldF9jb2VyY2lvbl9leHByKE5vZGUgKmFyZywgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0 LAogCQkJCQkJCSAgTm9kZSAqcGFyZW50Tm9kZSk7CiBzdGF0aWMgdm9pZCBnZXRfY29uc3Rf ZXhwcihDb25zdCAqY29uc3R2YWwsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkJCQkJ CSAgIGludCBzaG93dHlwZSk7CitzdGF0aWMgdm9pZCBnZXRfanNvbl9jb25zdHJ1Y3RvcihK c29uQ29uc3RydWN0b3JFeHByICpjdG9yLAorCQkJCQkJCQkgZGVwYXJzZV9jb250ZXh0ICpj b250ZXh0LCBib29sIHNob3dpbXBsaWNpdCk7CitzdGF0aWMgdm9pZCBnZXRfanNvbl9hZ2df Y29uc3RydWN0b3IoSnNvbkNvbnN0cnVjdG9yRXhwciAqY3RvciwKKwkJCQkJCQkJCSBkZXBh cnNlX2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQkgY29uc3QgY2hhciAqZnVuY25hbWUs CisJCQkJCQkJCQkgYm9vbCBpc19qc29uX29iamVjdGFnZyk7CiBzdGF0aWMgdm9pZCBnZXRf Y29uc3RfY29sbGF0aW9uKENvbnN0ICpjb25zdHZhbCwgZGVwYXJzZV9jb250ZXh0ICpjb250 ZXh0KTsKIHN0YXRpYyB2b2lkIHNpbXBsZV9xdW90ZV9saXRlcmFsKFN0cmluZ0luZm8gYnVm LCBjb25zdCBjaGFyICp2YWwpOwogc3RhdGljIHZvaWQgZ2V0X3N1YmxpbmtfZXhwcihTdWJM aW5rICpzdWJsaW5rLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwpAQCAtNjMyNSw3ICs2 MzMxLDggQEAgZ2V0X3J1bGVfc29ydGdyb3VwY2xhdXNlKEluZGV4IHJlZiwgTGlzdCAqdGxp c3QsIGJvb2wgZm9yY2VfY29sbm8sCiAJCWJvb2wJCW5lZWRfcGFyZW4gPSAoUFJFVFRZX1BB UkVOKGNvbnRleHQpCiAJCQkJCQkJCSAgfHwgSXNBKGV4cHIsIEZ1bmNFeHByKQogCQkJCQkJ CQkgIHx8IElzQShleHByLCBBZ2dyZWYpCi0JCQkJCQkJCSAgfHwgSXNBKGV4cHIsIFdpbmRv d0Z1bmMpKTsKKwkJCQkJCQkJICB8fCBJc0EoZXhwciwgV2luZG93RnVuYykKKwkJCQkJCQkJ ICB8fCBJc0EoZXhwciwgSnNvbkNvbnN0cnVjdG9yRXhwcikpOwogCiAJCWlmIChuZWVkX3Bh cmVuKQogCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKCcpOwpAQCAt ODE2Miw2ICs4MTY5LDcgQEAgaXNTaW1wbGVOb2RlKE5vZGUgKm5vZGUsIE5vZGUgKnBhcmVu dE5vZGUsIGludCBwcmV0dHlGbGFncykKIAkJY2FzZSBUX0dyb3VwaW5nRnVuYzoKIAkJY2Fz ZSBUX1dpbmRvd0Z1bmM6CiAJCWNhc2UgVF9GdW5jRXhwcjoKKwkJY2FzZSBUX0pzb25Db25z dHJ1Y3RvckV4cHI6CiAJCQkvKiBmdW5jdGlvbi1saWtlOiBuYW1lKC4uKSBvciBuYW1lWy4u XSAqLwogCQkJcmV0dXJuIHRydWU7CiAKQEAgLTgzMzcsNiArODM0NSwxMSBAQCBpc1NpbXBs ZU5vZGUoTm9kZSAqbm9kZSwgTm9kZSAqcGFyZW50Tm9kZSwgaW50IHByZXR0eUZsYWdzKQog CQkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9CiAKKwkJY2FzZSBUX0pzb25WYWx1ZUV4cHI6CisJ CQkvKiBtYXliZSBzaW1wbGUsIGNoZWNrIGFyZ3MgKi8KKwkJCXJldHVybiBpc1NpbXBsZU5v ZGUoKE5vZGUgKikgKChKc29uVmFsdWVFeHByICopIG5vZGUpLT5yYXdfZXhwciwKKwkJCQkJ CQkJbm9kZSwgcHJldHR5RmxhZ3MpOworCiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAl9CkBA IC04NDQyLDYgKzg0NTUsNDggQEAgZ2V0X3J1bGVfZXhwcl9wYXJlbihOb2RlICpub2RlLCBk ZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCiAJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRl eHQtPmJ1ZiwgJyknKTsKIH0KIAorLyoKKyAqIGdldF9qc29uX2Zvcm1hdAkJCS0gUGFyc2Ug YmFjayBhIEpzb25Gb3JtYXQgbm9kZQorICovCitzdGF0aWMgdm9pZAorZ2V0X2pzb25fZm9y bWF0KEpzb25Gb3JtYXQgKmZvcm1hdCwgU3RyaW5nSW5mbyBidWYpCit7CisJaWYgKGZvcm1h dC0+Zm9ybWF0X3R5cGUgPT0gSlNfRk9STUFUX0RFRkFVTFQpCisJCXJldHVybjsKKworCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLAorCQkJCQkJICAgZm9ybWF0LT5mb3JtYXRfdHlw ZSA9PSBKU19GT1JNQVRfSlNPTkIgPworCQkJCQkJICAgIiBGT1JNQVQgSlNPTkIiIDogIiBG T1JNQVQgSlNPTiIpOworCisJaWYgKGZvcm1hdC0+ZW5jb2RpbmcgIT0gSlNfRU5DX0RFRkFV TFQpCisJeworCQljb25zdCBjaGFyICplbmNvZGluZyA9CisJCWZvcm1hdC0+ZW5jb2Rpbmcg PT0gSlNfRU5DX1VURjE2ID8gIlVURjE2IiA6CisJCWZvcm1hdC0+ZW5jb2RpbmcgPT0gSlNf RU5DX1VURjMyID8gIlVURjMyIiA6ICJVVEY4IjsKKworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1 ZiwgIiBFTkNPRElORyAlcyIsIGVuY29kaW5nKTsKKwl9Cit9CisKKy8qCisgKiBnZXRfanNv bl9yZXR1cm5pbmcJCS0gUGFyc2UgYmFjayBhIEpzb25SZXR1cm5pbmcgc3RydWN0dXJlCisg Ki8KK3N0YXRpYyB2b2lkCitnZXRfanNvbl9yZXR1cm5pbmcoSnNvblJldHVybmluZyAqcmV0 dXJuaW5nLCBTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkgICBib29sIGpzb25fZm9ybWF0X2J5X2Rl ZmF1bHQpCit7CisJaWYgKCFPaWRJc1ZhbGlkKHJldHVybmluZy0+dHlwaWQpKQorCQlyZXR1 cm47CisKKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBSRVRVUk5JTkcgJXMiLAorCQkJCQkg Zm9ybWF0X3R5cGVfd2l0aF90eXBlbW9kKHJldHVybmluZy0+dHlwaWQsCisJCQkJCQkJCQkJ CSAgcmV0dXJuaW5nLT50eXBtb2QpKTsKKworCWlmICghanNvbl9mb3JtYXRfYnlfZGVmYXVs dCB8fAorCQlyZXR1cm5pbmctPmZvcm1hdC0+Zm9ybWF0X3R5cGUgIT0KKwkJKHJldHVybmlu Zy0+dHlwaWQgPT0gSlNPTkJPSUQgPyBKU19GT1JNQVRfSlNPTkIgOiBKU19GT1JNQVRfSlNP TikpCisJCWdldF9qc29uX2Zvcm1hdChyZXR1cm5pbmctPmZvcm1hdCwgYnVmKTsKK30KIAog LyogLS0tLS0tLS0tLQogICogZ2V0X3J1bGVfZXhwcgkJCS0gUGFyc2UgYmFjayBhbiBleHBy ZXNzaW9uCkBAIC05NTQwLDYgKzk1OTUsMTkgQEAgZ2V0X3J1bGVfZXhwcihOb2RlICpub2Rl LCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCiAJCQl9CiAJCQlicmVhazsKIAorCQljYXNl IFRfSnNvblZhbHVlRXhwcjoKKwkJCXsKKwkJCQlKc29uVmFsdWVFeHByICpqdmUgPSAoSnNv blZhbHVlRXhwciAqKSBub2RlOworCisJCQkJZ2V0X3J1bGVfZXhwcigoTm9kZSAqKSBqdmUt PnJhd19leHByLCBjb250ZXh0LCBmYWxzZSk7CisJCQkJZ2V0X2pzb25fZm9ybWF0KGp2ZS0+ Zm9ybWF0LCBjb250ZXh0LT5idWYpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBUX0pz b25Db25zdHJ1Y3RvckV4cHI6CisJCQlnZXRfanNvbl9jb25zdHJ1Y3RvcigoSnNvbkNvbnN0 cnVjdG9yRXhwciAqKSBub2RlLCBjb250ZXh0LCBmYWxzZSk7CisJCQlicmVhazsKKwogCQlj YXNlIFRfTGlzdDoKIAkJCXsKIAkJCQljaGFyCSAgICpzZXA7CkBAIC05ODA3LDE3ICs5ODc1 LDkxIEBAIGdldF9mdW5jX2V4cHIoRnVuY0V4cHIgKmV4cHIsIGRlcGFyc2VfY29udGV4dCAq Y29udGV4dCwKIAlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcpJyk7CiB9CiAKK3N0YXRp YyB2b2lkCitnZXRfanNvbl9jb25zdHJ1Y3Rvcl9vcHRpb25zKEpzb25Db25zdHJ1Y3RvckV4 cHIgKmN0b3IsIFN0cmluZ0luZm8gYnVmKQoreworCWlmIChjdG9yLT5hYnNlbnRfb25fbnVs bCkKKwl7CisJCWlmIChjdG9yLT50eXBlID09IEpTQ1RPUl9KU09OX09CSkVDVCB8fAorCQkJ Y3Rvci0+dHlwZSA9PSBKU0NUT1JfSlNPTl9PQkpFQ1RBR0cpCisJCQlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKGJ1ZiwgIiBBQlNFTlQgT04gTlVMTCIpOworCX0KKwllbHNlCisJeworCQlp ZiAoY3Rvci0+dHlwZSA9PSBKU0NUT1JfSlNPTl9BUlJBWSB8fAorCQkJY3Rvci0+dHlwZSA9 PSBKU0NUT1JfSlNPTl9BUlJBWUFHRykKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVm LCAiIE5VTEwgT04gTlVMTCIpOworCX0KKworCWlmIChjdG9yLT51bmlxdWUpCisJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiIFdJVEggVU5JUVVFIEtFWVMiKTsKKworCWdldF9q c29uX3JldHVybmluZyhjdG9yLT5yZXR1cm5pbmcsIGJ1ZiwgdHJ1ZSk7Cit9CisKK3N0YXRp YyB2b2lkCitnZXRfanNvbl9jb25zdHJ1Y3RvcihKc29uQ29uc3RydWN0b3JFeHByICpjdG9y LCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCisJCQkJCSBib29sIHNob3dpbXBsaWNpdCkK K3sKKwlTdHJpbmdJbmZvCWJ1ZiA9IGNvbnRleHQtPmJ1ZjsKKwljb25zdCBjaGFyICpmdW5j bmFtZTsKKwlpbnQJCQluYXJnczsKKwlMaXN0Q2VsbCAgICpsYzsKKworCXN3aXRjaCAoY3Rv ci0+dHlwZSkKKwl7CisJCWNhc2UgSlNDVE9SX0pTT05fT0JKRUNUOgorCQkJZnVuY25hbWUg PSAiSlNPTl9PQkpFQ1QiOworCQkJYnJlYWs7CisJCWNhc2UgSlNDVE9SX0pTT05fQVJSQVk6 CisJCQlmdW5jbmFtZSA9ICJKU09OX0FSUkFZIjsKKwkJCWJyZWFrOworCQljYXNlIEpTQ1RP Ul9KU09OX09CSkVDVEFHRzoKKwkJCWdldF9qc29uX2FnZ19jb25zdHJ1Y3RvcihjdG9yLCBj b250ZXh0LCAiSlNPTl9PQkpFQ1RBR0ciLCB0cnVlKTsKKwkJCXJldHVybjsKKwkJY2FzZSBK U0NUT1JfSlNPTl9BUlJBWUFHRzoKKwkJCWdldF9qc29uX2FnZ19jb25zdHJ1Y3RvcihjdG9y LCBjb250ZXh0LCAiSlNPTl9BUlJBWUFHRyIsIGZhbHNlKTsKKwkJCXJldHVybjsKKwkJZGVm YXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIEpzb25Db25zdHJ1Y3RvckV4cHJUeXBl ICVkIiwgY3Rvci0+dHlwZSk7CisJfQorCisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcygi LCBmdW5jbmFtZSk7CisKKwluYXJncyA9IDA7CisJZm9yZWFjaChsYywgY3Rvci0+YXJncykK Kwl7CisJCWlmIChuYXJncyA+IDApCisJCXsKKwkJCWNvbnN0IGNoYXIgKnNlcCA9IGN0b3It PnR5cGUgPT0gSlNDVE9SX0pTT05fT0JKRUNUICYmCisJCQkobmFyZ3MgJSAyKSAhPSAwID8g IiA6ICIgOiAiLCAiOworCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwgc2VwKTsK KwkJfQorCisJCWdldF9ydWxlX2V4cHIoKE5vZGUgKikgbGZpcnN0KGxjKSwgY29udGV4dCwg dHJ1ZSk7CisKKwkJbmFyZ3MrKzsKKwl9CisKKwlnZXRfanNvbl9jb25zdHJ1Y3Rvcl9vcHRp b25zKGN0b3IsIGJ1Zik7CisKKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIikiKTsKK30KKwor CiAvKgotICogZ2V0X2FnZ19leHByCQkJLSBQYXJzZSBiYWNrIGFuIEFnZ3JlZiBub2RlCisg KiBnZXRfYWdnX2V4cHJfaGVscGVyCQkJLSBQYXJzZSBiYWNrIGFuIEFnZ3JlZiBub2RlCiAg Ki8KIHN0YXRpYyB2b2lkCi1nZXRfYWdnX2V4cHIoQWdncmVmICphZ2dyZWYsIGRlcGFyc2Vf Y29udGV4dCAqY29udGV4dCwKLQkJCSBBZ2dyZWYgKm9yaWdpbmFsX2FnZ3JlZikKK2dldF9h Z2dfZXhwcl9oZWxwZXIoQWdncmVmICphZ2dyZWYsIGRlcGFyc2VfY29udGV4dCAqY29udGV4 dCwKKwkJCQkJQWdncmVmICpvcmlnaW5hbF9hZ2dyZWYsIGNvbnN0IGNoYXIgKmZ1bmNuYW1l LAorCQkJCQljb25zdCBjaGFyICpvcHRpb25zLCBib29sIGlzX2pzb25fb2JqZWN0YWdnKQog ewogCVN0cmluZ0luZm8JYnVmID0gY29udGV4dC0+YnVmOwogCU9pZAkJCWFyZ3R5cGVzW0ZV TkNfTUFYX0FSR1NdOwogCWludAkJCW5hcmdzOwotCWJvb2wJCXVzZV92YXJpYWRpYzsKKwli b29sCQl1c2VfdmFyaWFkaWMgPSBmYWxzZTsKIAogCS8qCiAJICogRm9yIGEgY29tYmluaW5n IGFnZ3JlZ2F0ZSwgd2UgbG9vayB1cCBhbmQgZGVwYXJzZSB0aGUgY29ycmVzcG9uZGluZwpA QCAtOTg0NywxMyArOTk4OSwxNCBAQCBnZXRfYWdnX2V4cHIoQWdncmVmICphZ2dyZWYsIGRl cGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkvKiBFeHRyYWN0IHRoZSBhcmd1bWVudCB0eXBl cyBhcyBzZWVuIGJ5IHRoZSBwYXJzZXIgKi8KIAluYXJncyA9IGdldF9hZ2dyZWdhdGVfYXJn dHlwZXMoYWdncmVmLCBhcmd0eXBlcyk7CiAKKwlpZiAoIWZ1bmNuYW1lKQorCQlmdW5jbmFt ZSA9IGdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoYWdncmVmLT5hZ2dmbm9pZCwgbmFyZ3MsIE5J TCwKKwkJCQkJCQkJCQkgIGFyZ3R5cGVzLCBhZ2dyZWYtPmFnZ3ZhcmlhZGljLAorCQkJCQkJ CQkJCSAgJnVzZV92YXJpYWRpYywKKwkJCQkJCQkJCQkgIGNvbnRleHQtPnNwZWNpYWxfZXhw cmtpbmQpOworCiAJLyogUHJpbnQgdGhlIGFnZ3JlZ2F0ZSBuYW1lLCBzY2hlbWEtcXVhbGlm aWVkIGlmIG5lZWRlZCAqLwotCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMoJXMiLAotCQkJ CQkgZ2VuZXJhdGVfZnVuY3Rpb25fbmFtZShhZ2dyZWYtPmFnZ2Zub2lkLCBuYXJncywKLQkJ CQkJCQkJCQkJTklMLCBhcmd0eXBlcywKLQkJCQkJCQkJCQkJYWdncmVmLT5hZ2d2YXJpYWRp YywKLQkJCQkJCQkJCQkJJnVzZV92YXJpYWRpYywKLQkJCQkJCQkJCQkJY29udGV4dC0+c3Bl Y2lhbF9leHBya2luZCksCisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyglcyIsIGZ1bmNu YW1lLAogCQkJCQkgKGFnZ3JlZi0+YWdnZGlzdGluY3QgIT0gTklMKSA/ICJESVNUSU5DVCAi IDogIiIpOwogCiAJaWYgKEFHR0tJTkRfSVNfT1JERVJFRF9TRVQoYWdncmVmLT5hZ2draW5k KSkKQEAgLTk4ODksNyArMTAwMzIsMTggQEAgZ2V0X2FnZ19leHByKEFnZ3JlZiAqYWdncmVm LCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCiAJCQkJaWYgKHRsZS0+cmVzanVuaykKIAkJ CQkJY29udGludWU7CiAJCQkJaWYgKGkrKyA+IDApCi0JCQkJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoYnVmLCAiLCAiKTsKKwkJCQl7CisJCQkJCWlmIChpc19qc29uX29iamVjdGFnZykK KwkJCQkJeworCQkJCQkJaWYgKGkgPiAyKQorCQkJCQkJCWJyZWFrOwkvKiBza2lwIEFCU0VO VCBPTiBOVUxMIGFuZCBXSVRIIFVOSVFVRQorCQkJCQkJCQkJICogYXJncyAqLworCisJCQkJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiA6ICIpOworCQkJCQl9CisJCQkJCWVs c2UKKwkJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiLCAiKTsKKwkJCQl9CiAJ CQkJaWYgKHVzZV92YXJpYWRpYyAmJiBpID09IG5hcmdzKQogCQkJCQlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKGJ1ZiwgIlZBUklBRElDICIpOwogCQkJCWdldF9ydWxlX2V4cHIoYXJnLCBj b250ZXh0LCB0cnVlKTsKQEAgLTk5MDMsNiArMTAwNTcsOSBAQCBnZXRfYWdnX2V4cHIoQWdn cmVmICphZ2dyZWYsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkJfQogCX0KIAorCWlm IChvcHRpb25zKQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwgb3B0aW9ucyk7CisK IAlpZiAoYWdncmVmLT5hZ2dmaWx0ZXIgIT0gTlVMTCkKIAl7CiAJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoYnVmLCAiKSBGSUxURVIgKFdIRVJFICIpOwpAQCAtOTkxMiw2ICsxMDA2OSwx NiBAQCBnZXRfYWdnX2V4cHIoQWdncmVmICphZ2dyZWYsIGRlcGFyc2VfY29udGV4dCAqY29u dGV4dCwKIAlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcpJyk7CiB9CiAKKy8qCisgKiBn ZXRfYWdnX2V4cHIJCQktIFBhcnNlIGJhY2sgYW4gQWdncmVmIG5vZGUKKyAqLworc3RhdGlj IHZvaWQKK2dldF9hZ2dfZXhwcihBZ2dyZWYgKmFnZ3JlZiwgZGVwYXJzZV9jb250ZXh0ICpj b250ZXh0LCBBZ2dyZWYgKm9yaWdpbmFsX2FnZ3JlZikKK3sKKwlnZXRfYWdnX2V4cHJfaGVs cGVyKGFnZ3JlZiwgY29udGV4dCwgb3JpZ2luYWxfYWdncmVmLCBOVUxMLCBOVUxMLAorCQkJ CQkJZmFsc2UpOworfQorCiAvKgogICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3Ig Z2V0X2FnZ19leHByKCkuICBJdCdzIHVzZWQgd2hlbiB3ZSBkZXBhcnNlCiAgKiBhIGNvbWJp bmluZyBBZ2dyZWY7IHJlc29sdmVfc3BlY2lhbF92YXJubyBsb2NhdGVzIHRoZSBjb3JyZXNw b25kaW5nIHBhcnRpYWwKQEAgLTk5MzEsMTAgKzEwMDk4LDEyIEBAIGdldF9hZ2dfY29tYmlu ZV9leHByKE5vZGUgKm5vZGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwgdm9pZCAqY2Fs bGJhY2tfYXJnKQogfQogCiAvKgotICogZ2V0X3dpbmRvd2Z1bmNfZXhwcgktIFBhcnNlIGJh Y2sgYSBXaW5kb3dGdW5jIG5vZGUKKyAqIGdldF93aW5kb3dmdW5jX2V4cHJfaGVscGVyCS0g UGFyc2UgYmFjayBhIFdpbmRvd0Z1bmMgbm9kZQogICovCiBzdGF0aWMgdm9pZAotZ2V0X3dp bmRvd2Z1bmNfZXhwcihXaW5kb3dGdW5jICp3ZnVuYywgZGVwYXJzZV9jb250ZXh0ICpjb250 ZXh0KQorZ2V0X3dpbmRvd2Z1bmNfZXhwcl9oZWxwZXIoV2luZG93RnVuYyAqd2Z1bmMsIGRl cGFyc2VfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKmZ1bmNuYW1l LCBjb25zdCBjaGFyICpvcHRpb25zLAorCQkJCQkJICAgYm9vbCBpc19qc29uX29iamVjdGFn ZykKIHsKIAlTdHJpbmdJbmZvCWJ1ZiA9IGNvbnRleHQtPmJ1ZjsKIAlPaWQJCQlhcmd0eXBl c1tGVU5DX01BWF9BUkdTXTsKQEAgLTk5NTgsMTYgKzEwMTI3LDMwIEBAIGdldF93aW5kb3dm dW5jX2V4cHIoV2luZG93RnVuYyAqd2Z1bmMsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCkK IAkJbmFyZ3MrKzsKIAl9CiAKLQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzKCIsCi0JCQkJ CSBnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKHdmdW5jLT53aW5mbm9pZCwgbmFyZ3MsCi0JCQkJ CQkJCQkJCWFyZ25hbWVzLCBhcmd0eXBlcywKLQkJCQkJCQkJCQkJZmFsc2UsIE5VTEwsCi0J CQkJCQkJCQkJCWNvbnRleHQtPnNwZWNpYWxfZXhwcmtpbmQpKTsKKwlpZiAoIWZ1bmNuYW1l KQorCQlmdW5jbmFtZSA9IGdlbmVyYXRlX2Z1bmN0aW9uX25hbWUod2Z1bmMtPndpbmZub2lk LCBuYXJncywgYXJnbmFtZXMsCisJCQkJCQkJCQkJICBhcmd0eXBlcywgZmFsc2UsIE5VTEws CisJCQkJCQkJCQkJICBjb250ZXh0LT5zcGVjaWFsX2V4cHJraW5kKTsKKworCWFwcGVuZFN0 cmluZ0luZm8oYnVmLCAiJXMoIiwgZnVuY25hbWUpOworCiAJLyogd2luc3RhciBjYW4gYmUg c2V0IG9ubHkgaW4gemVyby1hcmd1bWVudCBhZ2dyZWdhdGVzICovCiAJaWYgKHdmdW5jLT53 aW5zdGFyKQogCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcqJyk7CiAJZWxzZQotCQln ZXRfcnVsZV9leHByKChOb2RlICopIHdmdW5jLT5hcmdzLCBjb250ZXh0LCB0cnVlKTsKKwl7 CisJCWlmIChpc19qc29uX29iamVjdGFnZykKKwkJeworCQkJZ2V0X3J1bGVfZXhwcigoTm9k ZSAqKSBsaW5pdGlhbCh3ZnVuYy0+YXJncyksIGNvbnRleHQsIGZhbHNlKTsKKwkJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiIDogIik7CisJCQlnZXRfcnVsZV9leHByKChOb2Rl ICopIGxzZWNvbmQod2Z1bmMtPmFyZ3MpLCBjb250ZXh0LCBmYWxzZSk7CisJCX0KKwkJZWxz ZQorCQkJZ2V0X3J1bGVfZXhwcigoTm9kZSAqKSB3ZnVuYy0+YXJncywgY29udGV4dCwgdHJ1 ZSk7CisJfQorCisJaWYgKG9wdGlvbnMpCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVm LCBvcHRpb25zKTsKIAogCWlmICh3ZnVuYy0+YWdnZmlsdGVyICE9IE5VTEwpCiAJewpAQCAt MTAwMzEsNiArMTAyMTQsMTUgQEAgZ2V0X2Z1bmNfc3FsX3N5bnRheF90aW1lKExpc3QgKmFy Z3MsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCkKIAl9CiB9CiAKKy8qCisgKiBnZXRfd2lu ZG93ZnVuY19leHByCS0gUGFyc2UgYmFjayBhIFdpbmRvd0Z1bmMgbm9kZQorICovCitzdGF0 aWMgdm9pZAorZ2V0X3dpbmRvd2Z1bmNfZXhwcihXaW5kb3dGdW5jICp3ZnVuYywgZGVwYXJz ZV9jb250ZXh0ICpjb250ZXh0KQoreworCWdldF93aW5kb3dmdW5jX2V4cHJfaGVscGVyKHdm dW5jLCBjb250ZXh0LCBOVUxMLCBOVUxMLCBmYWxzZSk7Cit9CisKIC8qCiAgKiBnZXRfZnVu Y19zcWxfc3ludGF4CQktIFBhcnNlIGJhY2sgYSBTUUwtc3ludGF4IGZ1bmN0aW9uIGNhbGwK ICAqCkBAIC0xMDMxMSw2ICsxMDUwMywzMSBAQCBnZXRfZnVuY19zcWxfc3ludGF4KEZ1bmNF eHByICpleHByLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpCiAJcmV0dXJuIGZhbHNlOwog fQogCisvKgorICogZ2V0X2pzb25fYWdnX2NvbnN0cnVjdG9yIC0gUGFyc2UgYmFjayBhbiBh Z2dyZWdhdGUgSnNvbkNvbnN0cnVjdG9yRXhwciBub2RlCisgKi8KK3N0YXRpYyB2b2lkCitn ZXRfanNvbl9hZ2dfY29uc3RydWN0b3IoSnNvbkNvbnN0cnVjdG9yRXhwciAqY3RvciwgZGVw YXJzZV9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJIGNvbnN0IGNoYXIgKmZ1bmNuYW1lLCBi b29sIGlzX2pzb25fb2JqZWN0YWdnKQoreworCVN0cmluZ0luZm9EYXRhIG9wdGlvbnM7CisK Kwlpbml0U3RyaW5nSW5mbygmb3B0aW9ucyk7CisJZ2V0X2pzb25fY29uc3RydWN0b3Jfb3B0 aW9ucyhjdG9yLCAmb3B0aW9ucyk7CisKKwlpZiAoSXNBKGN0b3ItPmZ1bmMsIEFnZ3JlZikp CisJCWdldF9hZ2dfZXhwcl9oZWxwZXIoKEFnZ3JlZiAqKSBjdG9yLT5mdW5jLCBjb250ZXh0 LAorCQkJCQkJCShBZ2dyZWYgKikgY3Rvci0+ZnVuYywKKwkJCQkJCQlmdW5jbmFtZSwgb3B0 aW9ucy5kYXRhLCBpc19qc29uX29iamVjdGFnZyk7CisJZWxzZSBpZiAoSXNBKGN0b3ItPmZ1 bmMsIFdpbmRvd0Z1bmMpKQorCQlnZXRfd2luZG93ZnVuY19leHByX2hlbHBlcigoV2luZG93 RnVuYyAqKSBjdG9yLT5mdW5jLCBjb250ZXh0LAorCQkJCQkJCQkgICBmdW5jbmFtZSwgb3B0 aW9ucy5kYXRhLAorCQkJCQkJCQkgICBpc19qc29uX29iamVjdGFnZyk7CisJZWxzZQorCQll bG9nKEVSUk9SLCAiaW52YWxpZCBKc29uQ29uc3RydWN0b3JFeHByIHVuZGVybHlpbmcgbm9k ZSB0eXBlOiAlZCIsCisJCQkgbm9kZVRhZyhjdG9yLT5mdW5jKSk7Cit9CisKIC8qIC0tLS0t LS0tLS0KICAqIGdldF9jb2VyY2lvbl9leHByCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19hZ2dyZWdhdGUuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19h Z2dyZWdhdGUuZGF0CmluZGV4IGQ3ODk1Y2Q2NzYuLjI4M2Y0OTRiZjUgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYWdncmVnYXRlLmRhdAorKysgYi9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX2FnZ3JlZ2F0ZS5kYXQKQEAgLTU4MCwxNCArNTgwLDM2IEBACiAjIGpz b24KIHsgYWdnZm5vaWQgPT4gJ2pzb25fYWdnJywgYWdndHJhbnNmbiA9PiAnanNvbl9hZ2df dHJhbnNmbicsCiAgIGFnZ2ZpbmFsZm4gPT4gJ2pzb25fYWdnX2ZpbmFsZm4nLCBhZ2d0cmFu c3R5cGUgPT4gJ2ludGVybmFsJyB9LAoreyBhZ2dmbm9pZCA9PiAnanNvbl9hZ2dfc3RyaWN0 JywgYWdndHJhbnNmbiA9PiAnanNvbl9hZ2dfc3RyaWN0X3RyYW5zZm4nLAorICBhZ2dmaW5h bGZuID0+ICdqc29uX2FnZ19maW5hbGZuJywgYWdndHJhbnN0eXBlID0+ICdpbnRlcm5hbCcg fSwKIHsgYWdnZm5vaWQgPT4gJ2pzb25fb2JqZWN0X2FnZycsIGFnZ3RyYW5zZm4gPT4gJ2pz b25fb2JqZWN0X2FnZ190cmFuc2ZuJywKICAgYWdnZmluYWxmbiA9PiAnanNvbl9vYmplY3Rf YWdnX2ZpbmFsZm4nLCBhZ2d0cmFuc3R5cGUgPT4gJ2ludGVybmFsJyB9LAoreyBhZ2dmbm9p ZCA9PiAnanNvbl9vYmplY3RfYWdnX3VuaXF1ZScsCisgIGFnZ3RyYW5zZm4gPT4gJ2pzb25f b2JqZWN0X2FnZ191bmlxdWVfdHJhbnNmbicsCisgIGFnZ2ZpbmFsZm4gPT4gJ2pzb25fb2Jq ZWN0X2FnZ19maW5hbGZuJywgYWdndHJhbnN0eXBlID0+ICdpbnRlcm5hbCcgfSwKK3sgYWdn Zm5vaWQgPT4gJ2pzb25fb2JqZWN0X2FnZ19zdHJpY3QnLAorICBhZ2d0cmFuc2ZuID0+ICdq c29uX29iamVjdF9hZ2dfc3RyaWN0X3RyYW5zZm4nLAorICBhZ2dmaW5hbGZuID0+ICdqc29u X29iamVjdF9hZ2dfZmluYWxmbicsIGFnZ3RyYW5zdHlwZSA9PiAnaW50ZXJuYWwnIH0sCit7 IGFnZ2Zub2lkID0+ICdqc29uX29iamVjdF9hZ2dfdW5pcXVlX3N0cmljdCcsCisgIGFnZ3Ry YW5zZm4gPT4gJ2pzb25fb2JqZWN0X2FnZ191bmlxdWVfc3RyaWN0X3RyYW5zZm4nLAorICBh Z2dmaW5hbGZuID0+ICdqc29uX29iamVjdF9hZ2dfZmluYWxmbicsIGFnZ3RyYW5zdHlwZSA9 PiAnaW50ZXJuYWwnIH0sCiAKICMganNvbmIKIHsgYWdnZm5vaWQgPT4gJ2pzb25iX2FnZycs IGFnZ3RyYW5zZm4gPT4gJ2pzb25iX2FnZ190cmFuc2ZuJywKICAgYWdnZmluYWxmbiA9PiAn anNvbmJfYWdnX2ZpbmFsZm4nLCBhZ2d0cmFuc3R5cGUgPT4gJ2ludGVybmFsJyB9LAoreyBh Z2dmbm9pZCA9PiAnanNvbmJfYWdnX3N0cmljdCcsIGFnZ3RyYW5zZm4gPT4gJ2pzb25iX2Fn Z19zdHJpY3RfdHJhbnNmbicsCisgIGFnZ2ZpbmFsZm4gPT4gJ2pzb25iX2FnZ19maW5hbGZu JywgYWdndHJhbnN0eXBlID0+ICdpbnRlcm5hbCcgfSwKIHsgYWdnZm5vaWQgPT4gJ2pzb25i X29iamVjdF9hZ2cnLCBhZ2d0cmFuc2ZuID0+ICdqc29uYl9vYmplY3RfYWdnX3RyYW5zZm4n LAogICBhZ2dmaW5hbGZuID0+ICdqc29uYl9vYmplY3RfYWdnX2ZpbmFsZm4nLCBhZ2d0cmFu c3R5cGUgPT4gJ2ludGVybmFsJyB9LAoreyBhZ2dmbm9pZCA9PiAnanNvbmJfb2JqZWN0X2Fn Z191bmlxdWUnLAorICBhZ2d0cmFuc2ZuID0+ICdqc29uYl9vYmplY3RfYWdnX3VuaXF1ZV90 cmFuc2ZuJywKKyAgYWdnZmluYWxmbiA9PiAnanNvbmJfb2JqZWN0X2FnZ19maW5hbGZuJywg YWdndHJhbnN0eXBlID0+ICdpbnRlcm5hbCcgfSwKK3sgYWdnZm5vaWQgPT4gJ2pzb25iX29i amVjdF9hZ2dfc3RyaWN0JywKKyAgYWdndHJhbnNmbiA9PiAnanNvbmJfb2JqZWN0X2FnZ19z dHJpY3RfdHJhbnNmbicsCisgIGFnZ2ZpbmFsZm4gPT4gJ2pzb25iX29iamVjdF9hZ2dfZmlu YWxmbicsIGFnZ3RyYW5zdHlwZSA9PiAnaW50ZXJuYWwnIH0sCit7IGFnZ2Zub2lkID0+ICdq c29uYl9vYmplY3RfYWdnX3VuaXF1ZV9zdHJpY3QnLAorICBhZ2d0cmFuc2ZuID0+ICdqc29u Yl9vYmplY3RfYWdnX3VuaXF1ZV9zdHJpY3RfdHJhbnNmbicsCisgIGFnZ2ZpbmFsZm4gPT4g J2pzb25iX29iamVjdF9hZ2dfZmluYWxmbicsIGFnZ3RyYW5zdHlwZSA9PiAnaW50ZXJuYWwn IH0sCiAKICMgb3JkZXJlZC1zZXQgYW5kIGh5cG90aGV0aWNhbC1zZXQgYWdncmVnYXRlcwog eyBhZ2dmbm9pZCA9PiAncGVyY2VudGlsZV9kaXNjKGZsb2F0OCxhbnllbGVtZW50KScsIGFn Z2tpbmQgPT4gJ28nLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9j LmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggZmJjNGFhZGU0 OS4uZDdlZjBiNTcxYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9j LmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC04ODkyLDYg Kzg4OTIsMTAgQEAKICAgcHJvbmFtZSA9PiAnanNvbl9hZ2dfdHJhbnNmbicsIHByb2lzc3Ry aWN0ID0+ICdmJywgcHJvdm9sYXRpbGUgPT4gJ3MnLAogICBwcm9yZXR0eXBlID0+ICdpbnRl cm5hbCcsIHByb2FyZ3R5cGVzID0+ICdpbnRlcm5hbCBhbnllbGVtZW50JywKICAgcHJvc3Jj ID0+ICdqc29uX2FnZ190cmFuc2ZuJyB9LAoreyBvaWQgPT4gJzYyMDgnLCBkZXNjciA9PiAn anNvbiBhZ2dyZWdhdGUgdHJhbnNpdGlvbiBmdW5jdGlvbicsCisgIHByb25hbWUgPT4gJ2pz b25fYWdnX3N0cmljdF90cmFuc2ZuJywgcHJvaXNzdHJpY3QgPT4gJ2YnLCBwcm92b2xhdGls ZSA9PiAncycsCisgIHByb3JldHR5cGUgPT4gJ2ludGVybmFsJywgcHJvYXJndHlwZXMgPT4g J2ludGVybmFsIGFueWVsZW1lbnQnLAorICBwcm9zcmMgPT4gJ2pzb25fYWdnX3N0cmljdF90 cmFuc2ZuJyB9LAogeyBvaWQgPT4gJzMxNzQnLCBkZXNjciA9PiAnanNvbiBhZ2dyZWdhdGUg ZmluYWwgZnVuY3Rpb24nLAogICBwcm9uYW1lID0+ICdqc29uX2FnZ19maW5hbGZuJywgcHJv aXNzdHJpY3QgPT4gJ2YnLCBwcm9yZXR0eXBlID0+ICdqc29uJywKICAgcHJvYXJndHlwZXMg PT4gJ2ludGVybmFsJywgcHJvc3JjID0+ICdqc29uX2FnZ19maW5hbGZuJyB9LApAQCAtODg5 OSwxMCArODkwMywyOSBAQAogICBwcm9uYW1lID0+ICdqc29uX2FnZycsIHByb2tpbmQgPT4g J2EnLCBwcm9pc3N0cmljdCA9PiAnZicsIHByb3ZvbGF0aWxlID0+ICdzJywKICAgcHJvcmV0 dHlwZSA9PiAnanNvbicsIHByb2FyZ3R5cGVzID0+ICdhbnllbGVtZW50JywKICAgcHJvc3Jj ID0+ICdhZ2dyZWdhdGVfZHVtbXknIH0sCit7IG9pZCA9PiAnNjIwOScsIGRlc2NyID0+ICdh Z2dyZWdhdGUgaW5wdXQgaW50byBqc29uJywKKyAgcHJvbmFtZSA9PiAnanNvbl9hZ2dfc3Ry aWN0JywgcHJva2luZCA9PiAnYScsIHByb2lzc3RyaWN0ID0+ICdmJywKKyAgcHJvdm9sYXRp bGUgPT4gJ3MnLCBwcm9yZXR0eXBlID0+ICdqc29uJywgcHJvYXJndHlwZXMgPT4gJ2FueWVs ZW1lbnQnLAorICBwcm9zcmMgPT4gJ2FnZ3JlZ2F0ZV9kdW1teScgfSwKIHsgb2lkID0+ICcz MTgwJywgZGVzY3IgPT4gJ2pzb24gb2JqZWN0IGFnZ3JlZ2F0ZSB0cmFuc2l0aW9uIGZ1bmN0 aW9uJywKICAgcHJvbmFtZSA9PiAnanNvbl9vYmplY3RfYWdnX3RyYW5zZm4nLCBwcm9pc3N0 cmljdCA9PiAnZicsIHByb3ZvbGF0aWxlID0+ICdzJywKICAgcHJvcmV0dHlwZSA9PiAnaW50 ZXJuYWwnLCBwcm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwgYW55IGFueScsCiAgIHByb3NyYyA9 PiAnanNvbl9vYmplY3RfYWdnX3RyYW5zZm4nIH0sCit7IG9pZCA9PiAnNjIxMCcsIGRlc2Ny ID0+ICdqc29uIG9iamVjdCBhZ2dyZWdhdGUgdHJhbnNpdGlvbiBmdW5jdGlvbicsCisgIHBy b25hbWUgPT4gJ2pzb25fb2JqZWN0X2FnZ19zdHJpY3RfdHJhbnNmbicsIHByb2lzc3RyaWN0 ID0+ICdmJywKKyAgcHJvdm9sYXRpbGUgPT4gJ3MnLCBwcm9yZXR0eXBlID0+ICdpbnRlcm5h bCcsCisgIHByb2FyZ3R5cGVzID0+ICdpbnRlcm5hbCBhbnkgYW55JywKKyAgcHJvc3JjID0+ ICdqc29uX29iamVjdF9hZ2dfc3RyaWN0X3RyYW5zZm4nIH0sCit7IG9pZCA9PiAnNjIxMScs IGRlc2NyID0+ICdqc29uIG9iamVjdCBhZ2dyZWdhdGUgdHJhbnNpdGlvbiBmdW5jdGlvbics CisgIHByb25hbWUgPT4gJ2pzb25fb2JqZWN0X2FnZ191bmlxdWVfdHJhbnNmbicsIHByb2lz c3RyaWN0ID0+ICdmJywKKyAgcHJvdm9sYXRpbGUgPT4gJ3MnLCBwcm9yZXR0eXBlID0+ICdp bnRlcm5hbCcsCisgIHByb2FyZ3R5cGVzID0+ICdpbnRlcm5hbCBhbnkgYW55JywKKyAgcHJv c3JjID0+ICdqc29uX29iamVjdF9hZ2dfdW5pcXVlX3RyYW5zZm4nIH0sCit7IG9pZCA9PiAn NjIxMicsIGRlc2NyID0+ICdqc29uIG9iamVjdCBhZ2dyZWdhdGUgdHJhbnNpdGlvbiBmdW5j dGlvbicsCisgIHByb25hbWUgPT4gJ2pzb25fb2JqZWN0X2FnZ191bmlxdWVfc3RyaWN0X3Ry YW5zZm4nLCBwcm9pc3N0cmljdCA9PiAnZicsCisgIHByb3ZvbGF0aWxlID0+ICdzJywgcHJv cmV0dHlwZSA9PiAnaW50ZXJuYWwnLAorICBwcm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwgYW55 IGFueScsCisgIHByb3NyYyA9PiAnanNvbl9vYmplY3RfYWdnX3VuaXF1ZV9zdHJpY3RfdHJh bnNmbicgfSwKIHsgb2lkID0+ICczMTk2JywgZGVzY3IgPT4gJ2pzb24gb2JqZWN0IGFnZ3Jl Z2F0ZSBmaW5hbCBmdW5jdGlvbicsCiAgIHByb25hbWUgPT4gJ2pzb25fb2JqZWN0X2FnZ19m aW5hbGZuJywgcHJvaXNzdHJpY3QgPT4gJ2YnLAogICBwcm9yZXR0eXBlID0+ICdqc29uJywg cHJvYXJndHlwZXMgPT4gJ2ludGVybmFsJywKQEAgLTg5MTEsNiArODkzNCwyMCBAQAogICBw cm9uYW1lID0+ICdqc29uX29iamVjdF9hZ2cnLCBwcm9raW5kID0+ICdhJywgcHJvaXNzdHJp Y3QgPT4gJ2YnLAogICBwcm92b2xhdGlsZSA9PiAncycsIHByb3JldHR5cGUgPT4gJ2pzb24n LCBwcm9hcmd0eXBlcyA9PiAnYW55IGFueScsCiAgIHByb3NyYyA9PiAnYWdncmVnYXRlX2R1 bW15JyB9LAoreyBvaWQgPT4gJzYyMTMnLCBkZXNjciA9PiAnYWdncmVnYXRlIG5vbi1OVUxM IGlucHV0IGludG8gYSBqc29uIG9iamVjdCcsCisgIHByb25hbWUgPT4gJ2pzb25fb2JqZWN0 X2FnZ19zdHJpY3QnLCBwcm9raW5kID0+ICdhJywgcHJvaXNzdHJpY3QgPT4gJ2YnLAorICBw cm92b2xhdGlsZSA9PiAncycsIHByb3JldHR5cGUgPT4gJ2pzb24nLCBwcm9hcmd0eXBlcyA9 PiAnYW55IGFueScsCisgIHByb3NyYyA9PiAnYWdncmVnYXRlX2R1bW15JyB9LAoreyBvaWQg PT4gJzYyMTQnLAorICBkZXNjciA9PiAnYWdncmVnYXRlIGlucHV0IGludG8gYSBqc29uIG9i amVjdCB3aXRoIHVuaXF1ZSBrZXlzJywKKyAgcHJvbmFtZSA9PiAnanNvbl9vYmplY3RfYWdn X3VuaXF1ZScsIHByb2tpbmQgPT4gJ2EnLCBwcm9pc3N0cmljdCA9PiAnZicsCisgIHByb3Zv bGF0aWxlID0+ICdzJywgcHJvcmV0dHlwZSA9PiAnanNvbicsIHByb2FyZ3R5cGVzID0+ICdh bnkgYW55JywKKyAgcHJvc3JjID0+ICdhZ2dyZWdhdGVfZHVtbXknIH0sCit7IG9pZCA9PiAn NjIxNScsCisgIGRlc2NyID0+ICdhZ2dyZWdhdGUgbm9uLU5VTEwgaW5wdXQgaW50byBhIGpz b24gb2JqZWN0IHdpdGggdW5pcXVlIGtleXMnLAorICBwcm9uYW1lID0+ICdqc29uX29iamVj dF9hZ2dfdW5pcXVlX3N0cmljdCcsIHByb2tpbmQgPT4gJ2EnLAorICBwcm9pc3N0cmljdCA9 PiAnZicsIHByb3ZvbGF0aWxlID0+ICdzJywgcHJvcmV0dHlwZSA9PiAnanNvbicsCisgIHBy b2FyZ3R5cGVzID0+ICdhbnkgYW55JywgcHJvc3JjID0+ICdhZ2dyZWdhdGVfZHVtbXknIH0s CiB7IG9pZCA9PiAnMzE5OCcsIGRlc2NyID0+ICdidWlsZCBhIGpzb24gYXJyYXkgZnJvbSBh bnkgaW5wdXRzJywKICAgcHJvbmFtZSA9PiAnanNvbl9idWlsZF9hcnJheScsIHByb3Zhcmlh ZGljID0+ICdhbnknLCBwcm9pc3N0cmljdCA9PiAnZicsCiAgIHByb3ZvbGF0aWxlID0+ICdz JywgcHJvcmV0dHlwZSA9PiAnanNvbicsIHByb2FyZ3R5cGVzID0+ICdhbnknLApAQCAtOTc4 Myw2ICs5ODIwLDEwIEBACiAgIHByb25hbWUgPT4gJ2pzb25iX2FnZ190cmFuc2ZuJywgcHJv aXNzdHJpY3QgPT4gJ2YnLCBwcm92b2xhdGlsZSA9PiAncycsCiAgIHByb3JldHR5cGUgPT4g J2ludGVybmFsJywgcHJvYXJndHlwZXMgPT4gJ2ludGVybmFsIGFueWVsZW1lbnQnLAogICBw cm9zcmMgPT4gJ2pzb25iX2FnZ190cmFuc2ZuJyB9LAoreyBvaWQgPT4gJzYyMTYnLCBkZXNj ciA9PiAnanNvbmIgYWdncmVnYXRlIHRyYW5zaXRpb24gZnVuY3Rpb24nLAorICBwcm9uYW1l ID0+ICdqc29uYl9hZ2dfc3RyaWN0X3RyYW5zZm4nLCBwcm9pc3N0cmljdCA9PiAnZicsIHBy b3ZvbGF0aWxlID0+ICdzJywKKyAgcHJvcmV0dHlwZSA9PiAnaW50ZXJuYWwnLCBwcm9hcmd0 eXBlcyA9PiAnaW50ZXJuYWwgYW55ZWxlbWVudCcsCisgIHByb3NyYyA9PiAnanNvbmJfYWdn X3N0cmljdF90cmFuc2ZuJyB9LAogeyBvaWQgPT4gJzMyNjYnLCBkZXNjciA9PiAnanNvbmIg YWdncmVnYXRlIGZpbmFsIGZ1bmN0aW9uJywKICAgcHJvbmFtZSA9PiAnanNvbmJfYWdnX2Zp bmFsZm4nLCBwcm9pc3N0cmljdCA9PiAnZicsIHByb3ZvbGF0aWxlID0+ICdzJywKICAgcHJv cmV0dHlwZSA9PiAnanNvbmInLCBwcm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwnLApAQCAtOTc5 MSwxMCArOTgzMiwyOSBAQAogICBwcm9uYW1lID0+ICdqc29uYl9hZ2cnLCBwcm9raW5kID0+ ICdhJywgcHJvaXNzdHJpY3QgPT4gJ2YnLAogICBwcm92b2xhdGlsZSA9PiAncycsIHByb3Jl dHR5cGUgPT4gJ2pzb25iJywgcHJvYXJndHlwZXMgPT4gJ2FueWVsZW1lbnQnLAogICBwcm9z cmMgPT4gJ2FnZ3JlZ2F0ZV9kdW1teScgfSwKK3sgb2lkID0+ICc2MjE3JywgZGVzY3IgPT4g J2FnZ3JlZ2F0ZSBpbnB1dCBpbnRvIGpzb25iIHNraXBwaW5nIG51bGxzJywKKyAgcHJvbmFt ZSA9PiAnanNvbmJfYWdnX3N0cmljdCcsIHByb2tpbmQgPT4gJ2EnLCBwcm9pc3N0cmljdCA9 PiAnZicsCisgIHByb3ZvbGF0aWxlID0+ICdzJywgcHJvcmV0dHlwZSA9PiAnanNvbmInLCBw cm9hcmd0eXBlcyA9PiAnYW55ZWxlbWVudCcsCisgIHByb3NyYyA9PiAnYWdncmVnYXRlX2R1 bW15JyB9LAogeyBvaWQgPT4gJzMyNjgnLCBkZXNjciA9PiAnanNvbmIgb2JqZWN0IGFnZ3Jl Z2F0ZSB0cmFuc2l0aW9uIGZ1bmN0aW9uJywKICAgcHJvbmFtZSA9PiAnanNvbmJfb2JqZWN0 X2FnZ190cmFuc2ZuJywgcHJvaXNzdHJpY3QgPT4gJ2YnLCBwcm92b2xhdGlsZSA9PiAncycs CiAgIHByb3JldHR5cGUgPT4gJ2ludGVybmFsJywgcHJvYXJndHlwZXMgPT4gJ2ludGVybmFs IGFueSBhbnknLAogICBwcm9zcmMgPT4gJ2pzb25iX29iamVjdF9hZ2dfdHJhbnNmbicgfSwK K3sgb2lkID0+ICc2MjE4JywgZGVzY3IgPT4gJ2pzb25iIG9iamVjdCBhZ2dyZWdhdGUgdHJh bnNpdGlvbiBmdW5jdGlvbicsCisgIHByb25hbWUgPT4gJ2pzb25iX29iamVjdF9hZ2dfc3Ry aWN0X3RyYW5zZm4nLCBwcm9pc3N0cmljdCA9PiAnZicsCisgIHByb3ZvbGF0aWxlID0+ICdz JywgcHJvcmV0dHlwZSA9PiAnaW50ZXJuYWwnLAorICBwcm9hcmd0eXBlcyA9PiAnaW50ZXJu YWwgYW55IGFueScsCisgIHByb3NyYyA9PiAnanNvbmJfb2JqZWN0X2FnZ19zdHJpY3RfdHJh bnNmbicgfSwKK3sgb2lkID0+ICc2MjE5JywgZGVzY3IgPT4gJ2pzb25iIG9iamVjdCBhZ2dy ZWdhdGUgdHJhbnNpdGlvbiBmdW5jdGlvbicsCisgIHByb25hbWUgPT4gJ2pzb25iX29iamVj dF9hZ2dfdW5pcXVlX3RyYW5zZm4nLCBwcm9pc3N0cmljdCA9PiAnZicsCisgIHByb3ZvbGF0 aWxlID0+ICdzJywgcHJvcmV0dHlwZSA9PiAnaW50ZXJuYWwnLAorICBwcm9hcmd0eXBlcyA9 PiAnaW50ZXJuYWwgYW55IGFueScsCisgIHByb3NyYyA9PiAnanNvbmJfb2JqZWN0X2FnZ191 bmlxdWVfdHJhbnNmbicgfSwKK3sgb2lkID0+ICc2MjIwJywgZGVzY3IgPT4gJ2pzb25iIG9i amVjdCBhZ2dyZWdhdGUgdHJhbnNpdGlvbiBmdW5jdGlvbicsCisgIHByb25hbWUgPT4gJ2pz b25iX29iamVjdF9hZ2dfdW5pcXVlX3N0cmljdF90cmFuc2ZuJywgcHJvaXNzdHJpY3QgPT4g J2YnLAorICBwcm92b2xhdGlsZSA9PiAncycsIHByb3JldHR5cGUgPT4gJ2ludGVybmFsJywK KyAgcHJvYXJndHlwZXMgPT4gJ2ludGVybmFsIGFueSBhbnknLAorICBwcm9zcmMgPT4gJ2pz b25iX29iamVjdF9hZ2dfdW5pcXVlX3N0cmljdF90cmFuc2ZuJyB9LAogeyBvaWQgPT4gJzMy NjknLCBkZXNjciA9PiAnanNvbmIgb2JqZWN0IGFnZ3JlZ2F0ZSBmaW5hbCBmdW5jdGlvbics CiAgIHByb25hbWUgPT4gJ2pzb25iX29iamVjdF9hZ2dfZmluYWxmbicsIHByb2lzc3RyaWN0 ID0+ICdmJywgcHJvdm9sYXRpbGUgPT4gJ3MnLAogICBwcm9yZXR0eXBlID0+ICdqc29uYics IHByb2FyZ3R5cGVzID0+ICdpbnRlcm5hbCcsCkBAIC05ODAzLDYgKzk4NjMsMjAgQEAKICAg cHJvbmFtZSA9PiAnanNvbmJfb2JqZWN0X2FnZycsIHByb2tpbmQgPT4gJ2EnLCBwcm9pc3N0 cmljdCA9PiAnZicsCiAgIHByb3JldHR5cGUgPT4gJ2pzb25iJywgcHJvYXJndHlwZXMgPT4g J2FueSBhbnknLAogICBwcm9zcmMgPT4gJ2FnZ3JlZ2F0ZV9kdW1teScgfSwKK3sgb2lkID0+ ICc2MjIxJywgZGVzY3IgPT4gJ2FnZ3JlZ2F0ZSBub24tTlVMTCBpbnB1dHMgaW50byBqc29u YiBvYmplY3QnLAorICBwcm9uYW1lID0+ICdqc29uYl9vYmplY3RfYWdnX3N0cmljdCcsIHBy b2tpbmQgPT4gJ2EnLCBwcm9pc3N0cmljdCA9PiAnZicsCisgIHByb3JldHR5cGUgPT4gJ2pz b25iJywgcHJvYXJndHlwZXMgPT4gJ2FueSBhbnknLAorICBwcm9zcmMgPT4gJ2FnZ3JlZ2F0 ZV9kdW1teScgfSwKK3sgb2lkID0+ICc2MjIyJywKKyAgZGVzY3IgPT4gJ2FnZ3JlZ2F0ZSBp bnB1dHMgaW50byBqc29uYiBvYmplY3QgY2hlY2tpbmcga2V5IHVuaXF1ZW5lc3MnLAorICBw cm9uYW1lID0+ICdqc29uYl9vYmplY3RfYWdnX3VuaXF1ZScsIHByb2tpbmQgPT4gJ2EnLCBw cm9pc3N0cmljdCA9PiAnZicsCisgIHByb3JldHR5cGUgPT4gJ2pzb25iJywgcHJvYXJndHlw ZXMgPT4gJ2FueSBhbnknLAorICBwcm9zcmMgPT4gJ2FnZ3JlZ2F0ZV9kdW1teScgfSwKK3sg b2lkID0+ICc2MjIzJywKKyAgZGVzY3IgPT4gJ2FnZ3JlZ2F0ZSBub24tTlVMTCBpbnB1dHMg aW50byBqc29uYiBvYmplY3QgY2hlY2tpbmcga2V5IHVuaXF1ZW5lc3MnLAorICBwcm9uYW1l ID0+ICdqc29uYl9vYmplY3RfYWdnX3VuaXF1ZV9zdHJpY3QnLCBwcm9raW5kID0+ICdhJywK KyAgcHJvaXNzdHJpY3QgPT4gJ2YnLCBwcm9yZXR0eXBlID0+ICdqc29uYicsIHByb2FyZ3R5 cGVzID0+ICdhbnkgYW55JywKKyAgcHJvc3JjID0+ICdhZ2dyZWdhdGVfZHVtbXknIH0sCiB7 IG9pZCA9PiAnMzI3MScsIGRlc2NyID0+ICdidWlsZCBhIGpzb25iIGFycmF5IGZyb20gYW55 IGlucHV0cycsCiAgIHByb25hbWUgPT4gJ2pzb25iX2J1aWxkX2FycmF5JywgcHJvdmFyaWFk aWMgPT4gJ2FueScsIHByb2lzc3RyaWN0ID0+ICdmJywKICAgcHJvdm9sYXRpbGUgPT4gJ3Mn LCBwcm9yZXR0eXBlID0+ICdqc29uYicsIHByb2FyZ3R5cGVzID0+ICdhbnknLApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaCBiL3NyYy9pbmNsdWRlL2V4 ZWN1dG9yL2V4ZWNFeHByLmgKaW5kZXggMDZjM2FkYzBhMS4uMjJmZDI1NWY1YSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaAorKysgYi9zcmMvaW5jbHVk ZS9leGVjdXRvci9leGVjRXhwci5oCkBAIC0yMSw2ICsyMSw3IEBACiBzdHJ1Y3QgRXhwckV2 YWxTdGVwOwogc3RydWN0IFN1YnNjcmlwdGluZ1JlZlN0YXRlOwogc3RydWN0IFNjYWxhckFy cmF5T3BFeHBySGFzaFRhYmxlOworc3RydWN0IEpzb25Db25zdHJ1Y3RvckV4cHJTdGF0ZTsK IAogLyogQml0cyBpbiBFeHByU3RhdGUtPmZsYWdzIChzZWUgYWxzbyBleGVjbm9kZXMuaCBm b3IgcHVibGljIGZsYWcgYml0cyk6ICovCiAvKiBleHByZXNzaW9uJ3MgaW50ZXJwcmV0ZXIg aGFzIGJlZW4gaW5pdGlhbGl6ZWQgKi8KQEAgLTIzOCw2ICsyMzksNyBAQCB0eXBlZGVmIGVu dW0gRXhwckV2YWxPcAogCUVFT1BfR1JPVVBJTkdfRlVOQywKIAlFRU9QX1dJTkRPV19GVU5D LAogCUVFT1BfU1VCUExBTiwKKwlFRU9QX0pTT05fQ09OU1RSVUNUT1IsCiAKIAkvKiBhZ2dy ZWdhdGlvbiByZWxhdGVkIG5vZGVzICovCiAJRUVPUF9BR0dfU1RSSUNUX0RFU0VSSUFMSVpF LApAQCAtNjY2LDYgKzY2OCwxMyBAQCB0eXBlZGVmIHN0cnVjdCBFeHByRXZhbFN0ZXAKIAkJ CWludAkJCXRyYW5zbm87CiAJCQlpbnQJCQlzZXRvZmY7CiAJCX0JCQlhZ2dfdHJhbnM7CisK KwkJLyogZm9yIEVFT1BfSlNPTl9DT05TVFJVQ1RPUiAqLworCQlzdHJ1Y3QKKwkJeworCQkJ c3RydWN0IEpzb25Db25zdHJ1Y3RvckV4cHJTdGF0ZSAqamNzdGF0ZTsKKwkJfQkJCWpzb25f Y29uc3RydWN0b3I7CisKIAl9CQkJZDsKIH0gRXhwckV2YWxTdGVwOwogCkBAIC03MTQsNiAr NzIzLDIxIEBAIHR5cGVkZWYgc3RydWN0IFN1YnNjcmlwdEV4ZWNTdGVwcwogCUV4ZWNFdmFs U3Vicm91dGluZSBzYnNfZmV0Y2hfb2xkOwkvKiBmZXRjaCBvbGQgdmFsdWUgZm9yIGFzc2ln bm1lbnQgKi8KIH0gU3Vic2NyaXB0RXhlY1N0ZXBzOwogCisvKiBFRU9QX0pTT05fQ09OU1RS VUNUT1Igc3RhdGUsIHRvbyBiaWcgdG8gaW5saW5lICovCit0eXBlZGVmIHN0cnVjdCBKc29u Q29uc3RydWN0b3JFeHByU3RhdGUKK3sKKwlKc29uQ29uc3RydWN0b3JFeHByICpjb25zdHJ1 Y3RvcjsKKwlEYXR1bQkgICAqYXJnX3ZhbHVlczsKKwlib29sCSAgICphcmdfbnVsbHM7CisJ T2lkCQkgICAqYXJnX3R5cGVzOworCXN0cnVjdAorCXsKKwkJaW50CQkJY2F0ZWdvcnk7CisJ CU9pZAkJCW91dGZ1bmNpZDsKKwl9CQkgICAqYXJnX3R5cGVfY2FjaGU7IC8qIGNhY2hlIGZv ciBkYXR1bV90b19qc29uW2JdKCkgKi8KKwlpbnQJCQluYXJnczsKK30gSnNvbkNvbnN0cnVj dG9yRXhwclN0YXRlOworCiAKIC8qIGZ1bmN0aW9ucyBpbiBleGVjRXhwci5jICovCiBleHRl cm4gdm9pZCBFeHByRXZhbFB1c2hTdGVwKEV4cHJTdGF0ZSAqZXMsIGNvbnN0IEV4cHJFdmFs U3RlcCAqcyk7CkBAIC03NzAsNiArNzk0LDggQEAgZXh0ZXJuIHZvaWQgRXhlY0V2YWxXaG9s ZVJvd1ZhcihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLAogCQkJCQkJCQlF eHByQ29udGV4dCAqZWNvbnRleHQpOwogZXh0ZXJuIHZvaWQgRXhlY0V2YWxTeXNWYXIoRXhw clN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKIAkJCQkJCSAgIEV4cHJDb250ZXh0 ICplY29udGV4dCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworZXh0ZXJuIHZvaWQgRXhlY0V2 YWxKc29uQ29uc3RydWN0b3IoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwK KwkJCQkJCQkJCUV4cHJDb250ZXh0ICplY29udGV4dCk7CiAKIGV4dGVybiB2b2lkIEV4ZWNB Z2dJbml0R3JvdXAoQWdnU3RhdGUgKmFnZ3N0YXRlLCBBZ2dTdGF0ZVBlclRyYW5zIHBlcnRy YW5zLCBBZ2dTdGF0ZVBlckdyb3VwIHBlcmdyb3VwLAogCQkJCQkJCSBFeHByQ29udGV4dCAq YWdnY29udGV4dCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3Mu aCBiL3NyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oCmluZGV4IDgwZjFkNTMzNmIuLjBi ZWM0NzM4NDkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oCisr KyBiL3NyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oCkBAIC0xMDYsNCArMTA2LDEwIEBA IGV4dGVybiBHcm91cGluZ1NldCAqbWFrZUdyb3VwaW5nU2V0KEdyb3VwaW5nU2V0S2luZCBr aW5kLCBMaXN0ICpjb250ZW50LCBpbnQgbG9jCiAKIGV4dGVybiBWYWN1dW1SZWxhdGlvbiAq bWFrZVZhY3V1bVJlbGF0aW9uKFJhbmdlVmFyICpyZWxhdGlvbiwgT2lkIG9pZCwgTGlzdCAq dmFfY29scyk7CiAKK2V4dGVybiBKc29uRm9ybWF0ICptYWtlSnNvbkZvcm1hdChKc29uRm9y bWF0VHlwZSB0eXBlLCBKc29uRW5jb2RpbmcgZW5jb2RpbmcsCisJCQkJCQkJCSAgaW50IGxv Y2F0aW9uKTsKK2V4dGVybiBKc29uVmFsdWVFeHByICptYWtlSnNvblZhbHVlRXhwcihFeHBy ICpleHByLCBKc29uRm9ybWF0ICpmb3JtYXQpOworZXh0ZXJuIE5vZGUgKm1ha2VKc29uS2V5 VmFsdWUoTm9kZSAqa2V5LCBOb2RlICp2YWx1ZSk7CitleHRlcm4gSnNvbkVuY29kaW5nIG1h a2VKc29uRW5jb2RpbmcoY2hhciAqbmFtZSk7CisKICNlbmRpZgkJCQkJCQkvKiBNQUtFRlVO Q19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggYi9z cmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXggMDI4NTg4ZmIzMy4uMWMyOTZk YTMyNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaApAQCAtMTcxMyw2ICsxNzEzLDExMyBA QCB0eXBlZGVmIHN0cnVjdCBUcmlnZ2VyVHJhbnNpdGlvbgogCWJvb2wJCWlzVGFibGU7CiB9 IFRyaWdnZXJUcmFuc2l0aW9uOwogCisvKiBOb2RlcyBmb3IgU1FML0pTT04gc3VwcG9ydCAq LworCisvKgorICogSnNvbk91dHB1dCAtCisgKgkJcmVwcmVzZW50YXRpb24gb2YgSlNPTiBv dXRwdXQgY2xhdXNlIChSRVRVUk5JTkcgdHlwZSBbRk9STUFUIGZvcm1hdF0pCisgKi8KK3R5 cGVkZWYgc3RydWN0IEpzb25PdXRwdXQKK3sKKwlOb2RlVGFnCQl0eXBlOworCVR5cGVOYW1l ICAgKnR5cGVOYW1lOwkJLyogUkVUVVJOSU5HIHR5cGUgbmFtZSwgaWYgc3BlY2lmaWVkICov CisJSnNvblJldHVybmluZyAqcmV0dXJuaW5nOwkvKiBSRVRVUk5JTkcgRk9STUFUIGNsYXVz ZSBhbmQgdHlwZSBPaWRzICovCit9IEpzb25PdXRwdXQ7CisKKy8qCisgKiBKc29uS2V5VmFs dWUgLQorICoJCXVudHJhbnNmb3JtZWQgcmVwcmVzZW50YXRpb24gb2YgSlNPTiBvYmplY3Qg a2V5LXZhbHVlIHBhaXIgZm9yCisgKgkJSlNPTl9PQkpFQ1QoKSBhbmQgSlNPTl9PQkpFQ1RB R0coKQorICovCit0eXBlZGVmIHN0cnVjdCBKc29uS2V5VmFsdWUKK3sKKwlOb2RlVGFnCQl0 eXBlOworCUV4cHIJICAgKmtleTsJCQkvKiBrZXkgZXhwcmVzc2lvbiAqLworCUpzb25WYWx1 ZUV4cHIgKnZhbHVlOwkJLyogSlNPTiB2YWx1ZSBleHByZXNzaW9uICovCit9IEpzb25LZXlW YWx1ZTsKKworLyoKKyAqIEpzb25PYmplY3RDb25zdHJ1Y3RvciAtCisgKgkJdW50cmFuc2Zv cm1lZCByZXByZXNlbnRhdGlvbiBvZiBKU09OX09CSkVDVCgpIGNvbnN0cnVjdG9yCisgKi8K K3R5cGVkZWYgc3RydWN0IEpzb25PYmplY3RDb25zdHJ1Y3RvcgoreworCU5vZGVUYWcJCXR5 cGU7CisJTGlzdAkgICAqZXhwcnM7CQkJLyogbGlzdCBvZiBKc29uS2V5VmFsdWUgcGFpcnMg Ki8KKwlKc29uT3V0cHV0ICpvdXRwdXQ7CQkJLyogUkVUVVJOSU5HIGNsYXVzZSwgaWYgc3Bl Y2lmaWVkICAqLworCWJvb2wJCWFic2VudF9vbl9udWxsOyAvKiBza2lwIE5VTEwgdmFsdWVz PyAqLworCWJvb2wJCXVuaXF1ZTsJCQkvKiBjaGVjayBrZXkgdW5pcXVlbmVzcz8gKi8KKwlp bnQJCQlsb2NhdGlvbjsJCS8qIHRva2VuIGxvY2F0aW9uLCBvciAtMSBpZiB1bmtub3duICov Cit9IEpzb25PYmplY3RDb25zdHJ1Y3RvcjsKKworLyoKKyAqIEpzb25BcnJheUNvbnN0cnVj dG9yIC0KKyAqCQl1bnRyYW5zZm9ybWVkIHJlcHJlc2VudGF0aW9uIG9mIEpTT05fQVJSQVko ZWxlbWVudCwuLi4pIGNvbnN0cnVjdG9yCisgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25BcnJh eUNvbnN0cnVjdG9yCit7CisJTm9kZVRhZwkJdHlwZTsKKwlMaXN0CSAgICpleHByczsJCQkv KiBsaXN0IG9mIEpzb25WYWx1ZUV4cHIgZWxlbWVudHMgKi8KKwlKc29uT3V0cHV0ICpvdXRw dXQ7CQkJLyogUkVUVVJOSU5HIGNsYXVzZSwgaWYgc3BlY2lmaWVkICAqLworCWJvb2wJCWFi c2VudF9vbl9udWxsOyAvKiBza2lwIE5VTEwgZWxlbWVudHM/ICovCisJaW50CQkJbG9jYXRp b247CQkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93biAqLworfSBKc29uQXJy YXlDb25zdHJ1Y3RvcjsKKworLyoKKyAqIEpzb25BcnJheVF1ZXJ5Q29uc3RydWN0b3IgLQor ICoJCXVudHJhbnNmb3JtZWQgcmVwcmVzZW50YXRpb24gb2YgSlNPTl9BUlJBWShzdWJxdWVy eSkgY29uc3RydWN0b3IKKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvbkFycmF5UXVlcnlDb25z dHJ1Y3RvcgoreworCU5vZGVUYWcJCXR5cGU7CisJTm9kZQkgICAqcXVlcnk7CQkJLyogc3Vi cXVlcnkgKi8KKwlKc29uT3V0cHV0ICpvdXRwdXQ7CQkJLyogUkVUVVJOSU5HIGNsYXVzZSwg aWYgc3BlY2lmaWVkICAqLworCUpzb25Gb3JtYXQgKmZvcm1hdDsJCQkvKiBGT1JNQVQgY2xh dXNlIGZvciBzdWJxdWVyeSwgaWYgc3BlY2lmaWVkICovCisJYm9vbAkJYWJzZW50X29uX251 bGw7IC8qIHNraXAgTlVMTCBlbGVtZW50cz8gKi8KKwlpbnQJCQlsb2NhdGlvbjsJCS8qIHRv a2VuIGxvY2F0aW9uLCBvciAtMSBpZiB1bmtub3duICovCit9IEpzb25BcnJheVF1ZXJ5Q29u c3RydWN0b3I7CisKKy8qCisgKiBKc29uQWdnQ29uc3RydWN0b3IgLQorICoJCWNvbW1vbiBm aWVsZHMgb2YgdW50cmFuc2Zvcm1lZCByZXByZXNlbnRhdGlvbiBvZgorICoJCUpTT05fQVJS QVlBR0coKSBhbmQgSlNPTl9PQkpFQ1RBR0coKQorICovCit0eXBlZGVmIHN0cnVjdCBKc29u QWdnQ29uc3RydWN0b3IKK3sKKwlOb2RlVGFnCQl0eXBlOworCUpzb25PdXRwdXQgKm91dHB1 dDsJCQkvKiBSRVRVUk5JTkcgY2xhdXNlLCBpZiBhbnkgKi8KKwlOb2RlCSAgICphZ2dfZmls dGVyOwkJLyogRklMVEVSIGNsYXVzZSwgaWYgYW55ICovCisJTGlzdAkgICAqYWdnX29yZGVy OwkJLyogT1JERVIgQlkgY2xhdXNlLCBpZiBhbnkgKi8KKwlzdHJ1Y3QgV2luZG93RGVmICpv dmVyOwkJLyogT1ZFUiBjbGF1c2UsIGlmIGFueSAqLworCWludAkJCWxvY2F0aW9uOwkJLyog dG9rZW4gbG9jYXRpb24sIG9yIC0xIGlmIHVua25vd24gKi8KK30gSnNvbkFnZ0NvbnN0cnVj dG9yOworCisvKgorICogSnNvbk9iamVjdEFnZyAtCisgKgkJdW50cmFuc2Zvcm1lZCByZXBy ZXNlbnRhdGlvbiBvZiBKU09OX09CSkVDVEFHRygpCisgKi8KK3R5cGVkZWYgc3RydWN0IEpz b25PYmplY3RBZ2cKK3sKKwlOb2RlVGFnCQl0eXBlOworCUpzb25BZ2dDb25zdHJ1Y3RvciAq Y29uc3RydWN0b3I7CS8qIGNvbW1vbiBmaWVsZHMgKi8KKwlKc29uS2V5VmFsdWUgKmFyZzsJ CQkvKiBvYmplY3Qga2V5LXZhbHVlIHBhaXIgKi8KKwlib29sCQlhYnNlbnRfb25fbnVsbDsg Lyogc2tpcCBOVUxMIHZhbHVlcz8gKi8KKwlib29sCQl1bmlxdWU7CQkJLyogY2hlY2sga2V5 IHVuaXF1ZW5lc3M/ICovCit9IEpzb25PYmplY3RBZ2c7CisKKy8qCisgKiBKc29uQXJyYXlB Z2cgLQorICoJCXVudHJhbnNmb3JtZWQgcmVwcmVzZW50YXRpb24gb2YgSlNPTl9BUlJSQVlB R0coKQorICovCit0eXBlZGVmIHN0cnVjdCBKc29uQXJyYXlBZ2cKK3sKKwlOb2RlVGFnCQl0 eXBlOworCUpzb25BZ2dDb25zdHJ1Y3RvciAqY29uc3RydWN0b3I7CS8qIGNvbW1vbiBmaWVs ZHMgKi8KKwlKc29uVmFsdWVFeHByICphcmc7CQkJLyogYXJyYXkgZWxlbWVudCBleHByZXNz aW9uICovCisJYm9vbAkJYWJzZW50X29uX251bGw7IC8qIHNraXAgTlVMTCBlbGVtZW50cz8g Ki8KK30gSnNvbkFycmF5QWdnOworCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJ CVJhdyBHcmFtbWFyIE91dHB1dCBTdGF0ZW1lbnRzCiAgKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaCBiL3NyYy9p bmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCmluZGV4IDhmYjViNGI5MTkuLmRlMTcwMWMyMTMg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCisrKyBiL3NyYy9p bmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCkBAIC0xNDk4LDYgKzE0OTgsOTEgQEAgdHlwZWRl ZiBzdHJ1Y3QgWG1sRXhwcgogCWludAkJCWxvY2F0aW9uOwogfSBYbWxFeHByOwogCisvKgor ICogSnNvbkVuY29kaW5nIC0KKyAqCQlyZXByZXNlbnRhdGlvbiBvZiBKU09OIEVOQ09ESU5H IGNsYXVzZQorICovCit0eXBlZGVmIGVudW0gSnNvbkVuY29kaW5nCit7CisJSlNfRU5DX0RF RkFVTFQsCQkJCS8qIHVuc3BlY2lmaWVkICovCisJSlNfRU5DX1VURjgsCisJSlNfRU5DX1VU RjE2LAorCUpTX0VOQ19VVEYzMiwKK30gSnNvbkVuY29kaW5nOworCisvKgorICogSnNvbkZv cm1hdFR5cGUgLQorICoJCWVudW1lcmF0aW9uIG9mIEpTT04gZm9ybWF0cyB1c2VkIGluIEpT T04gRk9STUFUIGNsYXVzZQorICovCit0eXBlZGVmIGVudW0gSnNvbkZvcm1hdFR5cGUKK3sK KwlKU19GT1JNQVRfREVGQVVMVCwJCQkvKiB1bnNwZWNpZmllZCAqLworCUpTX0ZPUk1BVF9K U09OLAkJCQkvKiBGT1JNQVQgSlNPTiBbRU5DT0RJTkcgLi4uXSAqLworCUpTX0ZPUk1BVF9K U09OQgkJCQkvKiBpbXBsaWNpdCBpbnRlcm5hbCBmb3JtYXQgZm9yIFJFVFVSTklORworCQkJ CQkJCQkgKiBqc29uYiAqLworfSBKc29uRm9ybWF0VHlwZTsKKworLyoKKyAqIEpzb25Gb3Jt YXQgLQorICoJCXJlcHJlc2VudGF0aW9uIG9mIEpTT04gRk9STUFUIGNsYXVzZQorICovCit0 eXBlZGVmIHN0cnVjdCBKc29uRm9ybWF0Cit7CisJTm9kZVRhZwkJdHlwZTsKKwlKc29uRm9y bWF0VHlwZSBmb3JtYXRfdHlwZTsgLyogZm9ybWF0IHR5cGUgKi8KKwlKc29uRW5jb2Rpbmcg ZW5jb2Rpbmc7CQkvKiBKU09OIGVuY29kaW5nICovCisJaW50CQkJbG9jYXRpb247CQkvKiB0 b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93biAqLworfSBKc29uRm9ybWF0OworCisv KgorICogSnNvblJldHVybmluZyAtCisgKgkJdHJhbnNmb3JtZWQgcmVwcmVzZW50YXRpb24g b2YgSlNPTiBSRVRVUk5JTkcgY2xhdXNlCisgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25SZXR1 cm5pbmcKK3sKKwlOb2RlVGFnCQl0eXBlOworCUpzb25Gb3JtYXQgKmZvcm1hdDsJCQkvKiBv dXRwdXQgSlNPTiBmb3JtYXQgKi8KKwlPaWQJCQl0eXBpZDsJCQkvKiB0YXJnZXQgdHlwZSBP aWQgKi8KKwlpbnQzMgkJdHlwbW9kOwkJCS8qIHRhcmdldCB0eXBlIG1vZGlmaWVyICovCit9 IEpzb25SZXR1cm5pbmc7CisKKy8qCisgKiBKc29uVmFsdWVFeHByIC0KKyAqCQlyZXByZXNl bnRhdGlvbiBvZiBKU09OIHZhbHVlIGV4cHJlc3Npb24gKGV4cHIgW0ZPUk1BVCBqc29uX2Zv cm1hdF0pCisgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25WYWx1ZUV4cHIKK3sKKwlOb2RlVGFn CQl0eXBlOworCUV4cHIJICAgKnJhd19leHByOwkJLyogcmF3IGV4cHJlc3Npb24gKi8KKwlF eHByCSAgICpmb3JtYXR0ZWRfZXhwcjsgLyogZm9ybWF0dGVkIGV4cHJlc3Npb24gb3IgTlVM TCAqLworCUpzb25Gb3JtYXQgKmZvcm1hdDsJCQkvKiBGT1JNQVQgY2xhdXNlLCBpZiBzcGVj aWZpZWQgKi8KK30gSnNvblZhbHVlRXhwcjsKKwordHlwZWRlZiBlbnVtIEpzb25Db25zdHJ1 Y3RvclR5cGUKK3sKKwlKU0NUT1JfSlNPTl9PQkpFQ1QgPSAxLAorCUpTQ1RPUl9KU09OX0FS UkFZID0gMiwKKwlKU0NUT1JfSlNPTl9PQkpFQ1RBR0cgPSAzLAorCUpTQ1RPUl9KU09OX0FS UkFZQUdHID0gNAorfSBKc29uQ29uc3RydWN0b3JUeXBlOworCisvKgorICogSnNvbkNvbnN0 cnVjdG9yRXhwciAtCisgKgkJd3JhcHBlciBvdmVyIEZ1bmNFeHByL0FnZ3JlZi9XaW5kb3dG dW5jIGZvciBTUUwvSlNPTiBjb25zdHJ1Y3RvcnMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNv bkNvbnN0cnVjdG9yRXhwcgoreworCUV4cHIJCXhwcjsKKwlKc29uQ29uc3RydWN0b3JUeXBl IHR5cGU7CS8qIGNvbnN0cnVjdG9yIHR5cGUgKi8KKwlMaXN0CSAgICphcmdzOworCUV4cHIJ ICAgKmZ1bmM7CQkJLyogdW5kZXJseWluZyBqc29uW2JdX3h4eCgpIGZ1bmN0aW9uIGNhbGwg Ki8KKwlFeHByCSAgICpjb2VyY2lvbjsJCS8qIGNvZXJjaW9uIHRvIFJFVFVSTklORyB0eXBl ICovCisJSnNvblJldHVybmluZyAqcmV0dXJuaW5nOwkvKiBSRVRVUk5JTkcgY2xhdXNlICov CisJYm9vbAkJYWJzZW50X29uX251bGw7IC8qIEFCU0VOVCBPTiBOVUxMPyAqLworCWJvb2wJ CXVuaXF1ZTsJCQkvKiBXSVRIIFVOSVFVRSBLRVlTPyAoSlNPTl9PQkpFQ1RbQUdHXSBvbmx5 KSAqLworCWludAkJCWxvY2F0aW9uOworfSBKc29uQ29uc3RydWN0b3JFeHByOworCiAvKiAt LS0tLS0tLS0tLS0tLS0tCiAgKiBOdWxsVGVzdAogICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3BhcnNlci9rd2xpc3QuaCBiL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaAppbmRl eCA3NTNlOWVlMTc0Li44NjhmMzg5YTA0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJz ZXIva3dsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCkBAIC0yNiw2 ICsyNiw3IEBACiAKIC8qIG5hbWUsIHZhbHVlLCBjYXRlZ29yeSwgaXMtYmFyZS1sYWJlbCAq LwogUEdfS0VZV09SRCgiYWJvcnQiLCBBQk9SVF9QLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJB UkVfTEFCRUwpCitQR19LRVlXT1JEKCJhYnNlbnQiLCBBQlNFTlQsIFVOUkVTRVJWRURfS0VZ V09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImFic29sdXRlIiwgQUJTT0xVVEVfUCwg VU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiYWNjZXNzIiwg QUNDRVNTLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJh Y3Rpb24iLCBBQ1RJT04sIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKQEAgLTE3 NSw2ICsxNzYsNyBAQCBQR19LRVlXT1JEKCJmb2xsb3dpbmciLCBGT0xMT1dJTkcsIFVOUkVT RVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImZvciIsIEZPUiwgUkVT RVJWRURfS0VZV09SRCwgQVNfTEFCRUwpCiBQR19LRVlXT1JEKCJmb3JjZSIsIEZPUkNFLCBV TlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJmb3JlaWduIiwg Rk9SRUlHTiwgUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQoImZv cm1hdCIsIEZPUk1BVCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZ V09SRCgiZm9yd2FyZCIsIEZPUldBUkQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJF TCkKIFBHX0tFWVdPUkQoImZyZWV6ZSIsIEZSRUVaRSwgVFlQRV9GVU5DX05BTUVfS0VZV09S RCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImZyb20iLCBGUk9NLCBSRVNFUlZFRF9LRVlX T1JELCBBU19MQUJFTCkKQEAgLTIyOCw3ICsyMzAsMTMgQEAgUEdfS0VZV09SRCgiaXMiLCBJ UywgVFlQRV9GVU5DX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImlz bnVsbCIsIElTTlVMTCwgVFlQRV9GVU5DX05BTUVfS0VZV09SRCwgQVNfTEFCRUwpCiBQR19L RVlXT1JEKCJpc29sYXRpb24iLCBJU09MQVRJT04sIFVOUkVTRVJWRURfS0VZV09SRCwgQkFS RV9MQUJFTCkKIFBHX0tFWVdPUkQoImpvaW4iLCBKT0lOLCBUWVBFX0ZVTkNfTkFNRV9LRVlX T1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgianNvbiIsIEpTT04sIFVOUkVTRVJWRURf S0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQoImpzb25fYXJyYXkiLCBKU09OX0FS UkFZLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgianNvbl9h cnJheWFnZyIsIEpTT05fQVJSQVlBR0csIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwp CitQR19LRVlXT1JEKCJqc29uX29iamVjdCIsIEpTT05fT0JKRUNULCBDT0xfTkFNRV9LRVlX T1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgianNvbl9vYmplY3RhZ2ciLCBKU09OX09C SkVDVEFHRywgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImtl eSIsIEtFWSwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgi a2V5cyIsIEtFWVMsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdP UkQoImxhYmVsIiwgTEFCRUwsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBH X0tFWVdPUkQoImxhbmd1YWdlIiwgTEFOR1VBR0UsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFS RV9MQUJFTCkKIFBHX0tFWVdPUkQoImxhcmdlIiwgTEFSR0VfUCwgVU5SRVNFUlZFRF9LRVlX T1JELCBCQVJFX0xBQkVMKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbi5o IGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbi5oCmluZGV4IDIzZTNjYzQxZDYuLmI3NWY3ZDky OWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb24uaAorKysgYi9zcmMvaW5j bHVkZS91dGlscy9qc29uLmgKQEAgLTIwLDUgKzIwLDExIEBACiBleHRlcm4gdm9pZCBlc2Nh cGVfanNvbihTdHJpbmdJbmZvIGJ1ZiwgY29uc3QgY2hhciAqc3RyKTsKIGV4dGVybiBjaGFy ICpKc29uRW5jb2RlRGF0ZVRpbWUoY2hhciAqYnVmLCBEYXR1bSB2YWx1ZSwgT2lkIHR5cGlk LAogCQkJCQkJCQljb25zdCBpbnQgKnR6cCk7CitleHRlcm4gYm9vbCB0b19qc29uX2lzX2lt bXV0YWJsZShPaWQgdHlwb2lkKTsKK2V4dGVybiBEYXR1bSBqc29uX2J1aWxkX29iamVjdF93 b3JrZXIoaW50IG5hcmdzLCBEYXR1bSAqYXJncywgYm9vbCAqbnVsbHMsCisJCQkJCQkJCQkg IE9pZCAqdHlwZXMsIGJvb2wgYWJzZW50X29uX251bGwsCisJCQkJCQkJCQkgIGJvb2wgdW5p cXVlX2tleXMpOworZXh0ZXJuIERhdHVtIGpzb25fYnVpbGRfYXJyYXlfd29ya2VyKGludCBu YXJncywgRGF0dW0gKmFyZ3MsIGJvb2wgKm51bGxzLAorCQkJCQkJCQkJIE9pZCAqdHlwZXMs IGJvb2wgYWJzZW50X29uX251bGwpOwogCiAjZW5kaWYJCQkJCQkJLyogSlNPTl9IICovCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9qc29uYi5oIGIvc3JjL2luY2x1ZGUvdXRp bHMvanNvbmIuaAppbmRleCA3MDFlMDYzYWJkLi42NDlhMTY0NGYyIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS91dGlscy9qc29uYi5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25i LmgKQEAgLTMyMSw2ICszMjEsOCBAQCB0eXBlZGVmIHN0cnVjdCBKc29uYlBhcnNlU3RhdGUK IAlKc29uYlZhbHVlCWNvbnRWYWw7CiAJU2l6ZQkJc2l6ZTsKIAlzdHJ1Y3QgSnNvbmJQYXJz ZVN0YXRlICpuZXh0OworCWJvb2wJCXVuaXF1ZV9rZXlzOwkvKiBDaGVjayBvYmplY3Qga2V5 IHVuaXF1ZW5lc3MgKi8KKwlib29sCQlza2lwX251bGxzOwkJLyogU2tpcCBudWxsIG9iamVj dCBmaWVsZHMgKi8KIH0gSnNvbmJQYXJzZVN0YXRlOwogCiAvKgpAQCAtNDI3LDQgKzQyOSwx MSBAQCBleHRlcm4gRGF0dW0ganNvbmJfc2V0X2VsZW1lbnQoSnNvbmIgKmpiLCBEYXR1bSAq cGF0aCwgaW50IHBhdGhfbGVuLAogCQkJCQkJCSAgIEpzb25iVmFsdWUgKm5ld3ZhbCk7CiBl eHRlcm4gRGF0dW0ganNvbmJfZ2V0X2VsZW1lbnQoSnNvbmIgKmpiLCBEYXR1bSAqcGF0aCwg aW50IG5wYXRoLAogCQkJCQkJCSAgIGJvb2wgKmlzbnVsbCwgYm9vbCBhc190ZXh0KTsKK2V4 dGVybiBib29sIHRvX2pzb25iX2lzX2ltbXV0YWJsZShPaWQgdHlwb2lkKTsKK2V4dGVybiBE YXR1bSBqc29uYl9idWlsZF9vYmplY3Rfd29ya2VyKGludCBuYXJncywgRGF0dW0gKmFyZ3Ms IGJvb2wgKm51bGxzLAorCQkJCQkJCQkJICAgT2lkICp0eXBlcywgYm9vbCBhYnNlbnRfb25f bnVsbCwKKwkJCQkJCQkJCSAgIGJvb2wgdW5pcXVlX2tleXMpOworZXh0ZXJuIERhdHVtIGpz b25iX2J1aWxkX2FycmF5X3dvcmtlcihpbnQgbmFyZ3MsIERhdHVtICphcmdzLCBib29sICpu dWxscywKKwkJCQkJCQkJCSAgT2lkICp0eXBlcywgYm9vbCBhYnNlbnRfb25fbnVsbCk7CisK ICNlbmRpZgkJCQkJCQkvKiBfX0pTT05CX0hfXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVy ZmFjZXMvZWNwZy9wcmVwcm9jL3BhcnNlLnBsIGIvc3JjL2ludGVyZmFjZXMvZWNwZy9wcmVw cm9jL3BhcnNlLnBsCmluZGV4IDI5NmNkNzE5M2MuLjY5YTcwMWM0YjcgMTAwNjQ0Ci0tLSBh L3NyYy9pbnRlcmZhY2VzL2VjcGcvcHJlcHJvYy9wYXJzZS5wbAorKysgYi9zcmMvaW50ZXJm YWNlcy9lY3BnL3ByZXByb2MvcGFyc2UucGwKQEAgLTU4LDYgKzU4LDggQEAgbXkgJXJlcGxh Y2Vfc3RyaW5nID0gKAogCSdOT1RfTEEnICAgICAgICAgPT4gJ25vdCcsCiAJJ05VTExTX0xB JyAgICAgICA9PiAnbnVsbHMnLAogCSdXSVRIX0xBJyAgICAgICAgPT4gJ3dpdGgnLAorCSdX SVRIX0xBX1VOSVFVRScgPT4gJ3dpdGgnLAorCSdXSVRIT1VUX0xBJyAgICAgPT4gJ3dpdGhv dXQnLAogCSdUWVBFQ0FTVCcgICAgICAgPT4gJzo6JywKIAknRE9UX0RPVCcgICAgICAgID0+ ICcuLicsCiAJJ0NPTE9OX0VRVUFMUycgICA9PiAnOj0nLApkaWZmIC0tZ2l0IGEvc3JjL2lu dGVyZmFjZXMvZWNwZy9wcmVwcm9jL3BhcnNlci5jIGIvc3JjL2ludGVyZmFjZXMvZWNwZy9w cmVwcm9jL3BhcnNlci5jCmluZGV4IGY0NDdkYzVkODQuLjlmNmU1ZjRjZDYgMTAwNjQ0Ci0t LSBhL3NyYy9pbnRlcmZhY2VzL2VjcGcvcHJlcHJvYy9wYXJzZXIuYworKysgYi9zcmMvaW50 ZXJmYWNlcy9lY3BnL3ByZXByb2MvcGFyc2VyLmMKQEAgLTgzLDYgKzgzLDcgQEAgZmlsdGVy ZWRfYmFzZV95eWxleCh2b2lkKQogCQljYXNlIFdJVEg6CiAJCWNhc2UgVUlERU5UOgogCQlj YXNlIFVTQ09OU1Q6CisJCWNhc2UgV0lUSE9VVDoKIAkJCWJyZWFrOwogCQlkZWZhdWx0Ogog CQkJcmV0dXJuIGN1cl90b2tlbjsKQEAgLTE0Myw2ICsxNDQsMTkgQEAgZmlsdGVyZWRfYmFz ZV95eWxleCh2b2lkKQogCQkJCWNhc2UgT1JESU5BTElUWToKIAkJCQkJY3VyX3Rva2VuID0g V0lUSF9MQTsKIAkJCQkJYnJlYWs7CisJCQkJY2FzZSBVTklRVUU6CisJCQkJCWN1cl90b2tl biA9IFdJVEhfTEFfVU5JUVVFOworCQkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCisJ CWNhc2UgV0lUSE9VVDoKKwkJCS8qIFJlcGxhY2UgV0lUSE9VVCBieSBXSVRIT1VUX0xBIGlm IGl0J3MgZm9sbG93ZWQgYnkgVElNRSAqLworCQkJc3dpdGNoIChuZXh0X3Rva2VuKQorCQkJ eworCQkJCWNhc2UgVElNRToKKwkJCQkJY3VyX3Rva2VuID0gV0lUSE9VVF9MQTsKKwkJCQkJ YnJlYWs7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBVSURFTlQ6CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29wcl9zYW5pdHkub3V0IGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9vcHJfc2FuaXR5Lm91dAppbmRleCAwMmY1MzQ4YWIxLi5hMWJkZjJj MGI1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29wcl9zYW5pdHku b3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb3ByX3Nhbml0eS5vdXQKQEAg LTE1MDUsOCArMTUwNSwxMCBAQCBXSEVSRSBhLmFnZ2Zub2lkID0gcC5vaWQgQU5ECiAgICAg ICAgICBOT1QgYmluYXJ5X2NvZXJjaWJsZShwLnByb2FyZ3R5cGVzWzFdLCBwdHIucHJvYXJn dHlwZXNbMl0pKQogICAgICBPUiAocC5wcm9uYXJncyA+IDIgQU5ECiAgICAgICAgICBOT1Qg YmluYXJ5X2NvZXJjaWJsZShwLnByb2FyZ3R5cGVzWzJdLCBwdHIucHJvYXJndHlwZXNbM10p KQotICAgICAtLSB3ZSBjb3VsZCBjYXJyeSB0aGUgY2hlY2sgZnVydGhlciwgYnV0IDMgYXJn cyBpcyBlbm91Z2ggZm9yIG5vdwotICAgICBPUiAocC5wcm9uYXJncyA+IDMpCisgICAgIE9S IChwLnByb25hcmdzID4gMyBBTkQKKyAgICAgICAgIE5PVCBiaW5hcnlfY29lcmNpYmxlKHAu cHJvYXJndHlwZXNbM10sIHB0ci5wcm9hcmd0eXBlc1s0XSkpCisgICAgIC0tIHdlIGNvdWxk IGNhcnJ5IHRoZSBjaGVjayBmdXJ0aGVyLCBidXQgNCBhcmdzIGlzIGVub3VnaCBmb3Igbm93 CisgICAgIE9SIChwLnByb25hcmdzID4gNCkKICAgICApOwogIGFnZ2Zub2lkIHwgcHJvbmFt ZSB8IG9pZCB8IHByb25hbWUgCiAtLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLSstLS0tLS0t LS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3FsanNvbi5vdXQg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb24ub3V0Cm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmNhODZjNWQ5YTEKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb24ub3V0CkBAIC0wLDAgKzEsNzQ2 IEBACistLSBKU09OX09CSkVDVCgpCitTRUxFQ1QgSlNPTl9PQkpFQ1QoKTsKKyBqc29uX29i amVjdCAKKy0tLS0tLS0tLS0tLS0KKyB7fQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9PQkpF Q1QoUkVUVVJOSU5HIGpzb24pOworIGpzb25fb2JqZWN0IAorLS0tLS0tLS0tLS0tLQorIHt9 CisoMSByb3cpCisKK1NFTEVDVCBKU09OX09CSkVDVChSRVRVUk5JTkcganNvbiBGT1JNQVQg SlNPTik7CisganNvbl9vYmplY3QgCistLS0tLS0tLS0tLS0tCisge30KKygxIHJvdykKKwor U0VMRUNUIEpTT05fT0JKRUNUKFJFVFVSTklORyBqc29uYik7CisganNvbl9vYmplY3QgCist LS0tLS0tLS0tLS0tCisge30KKygxIHJvdykKKworU0VMRUNUIEpTT05fT0JKRUNUKFJFVFVS TklORyBqc29uYiBGT1JNQVQgSlNPTik7CisganNvbl9vYmplY3QgCistLS0tLS0tLS0tLS0t Cisge30KKygxIHJvdykKKworU0VMRUNUIEpTT05fT0JKRUNUKFJFVFVSTklORyB0ZXh0KTsK KyBqc29uX29iamVjdCAKKy0tLS0tLS0tLS0tLS0KKyB7fQorKDEgcm93KQorCitTRUxFQ1Qg SlNPTl9PQkpFQ1QoUkVUVVJOSU5HIHRleHQgRk9STUFUIEpTT04pOworIGpzb25fb2JqZWN0 IAorLS0tLS0tLS0tLS0tLQorIHt9CisoMSByb3cpCisKK1NFTEVDVCBKU09OX09CSkVDVChS RVRVUk5JTkcgdGV4dCBGT1JNQVQgSlNPTiBFTkNPRElORyBVVEY4KTsKK0VSUk9SOiAgY2Fu bm90IHNldCBKU09OIGVuY29kaW5nIGZvciBub24tYnl0ZWEgb3V0cHV0IHR5cGVzCitMSU5F IDE6IFNFTEVDVCBKU09OX09CSkVDVChSRVRVUk5JTkcgdGV4dCBGT1JNQVQgSlNPTiBFTkNP RElORyBVVEY4KS4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXgorU0VMRUNUIEpTT05fT0JKRUNUKFJFVFVSTklORyB0ZXh0IEZPUk1BVCBKU09OIEVO Q09ESU5HIElOVkFMSURfRU5DT0RJTkcpOworRVJST1I6ICB1bnJlY29nbml6ZWQgSlNPTiBl bmNvZGluZzogaW52YWxpZF9lbmNvZGluZworU0VMRUNUIEpTT05fT0JKRUNUKFJFVFVSTklO RyBieXRlYSk7CisganNvbl9vYmplY3QgCistLS0tLS0tLS0tLS0tCisgXHg3YjdkCisoMSBy b3cpCisKK1NFTEVDVCBKU09OX09CSkVDVChSRVRVUk5JTkcgYnl0ZWEgRk9STUFUIEpTT04p OworIGpzb25fb2JqZWN0IAorLS0tLS0tLS0tLS0tLQorIFx4N2I3ZAorKDEgcm93KQorCitT RUxFQ1QgSlNPTl9PQkpFQ1QoUkVUVVJOSU5HIGJ5dGVhIEZPUk1BVCBKU09OIEVOQ09ESU5H IFVURjgpOworIGpzb25fb2JqZWN0IAorLS0tLS0tLS0tLS0tLQorIFx4N2I3ZAorKDEgcm93 KQorCitTRUxFQ1QgSlNPTl9PQkpFQ1QoUkVUVVJOSU5HIGJ5dGVhIEZPUk1BVCBKU09OIEVO Q09ESU5HIFVURjE2KTsKK0VSUk9SOiAgdW5zdXBwb3J0ZWQgSlNPTiBlbmNvZGluZworTElO RSAxOiBTRUxFQ1QgSlNPTl9PQkpFQ1QoUkVUVVJOSU5HIGJ5dGVhIEZPUk1BVCBKU09OIEVO Q09ESU5HIFVURjEuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBeCitISU5UOiAgT25seSBVVEY4IEpTT04gZW5jb2RpbmcgaXMgc3VwcG9ydGVkLgor U0VMRUNUIEpTT05fT0JKRUNUKFJFVFVSTklORyBieXRlYSBGT1JNQVQgSlNPTiBFTkNPRElO RyBVVEYzMik7CitFUlJPUjogIHVuc3VwcG9ydGVkIEpTT04gZW5jb2RpbmcKK0xJTkUgMTog U0VMRUNUIEpTT05fT0JKRUNUKFJFVFVSTklORyBieXRlYSBGT1JNQVQgSlNPTiBFTkNPRElO RyBVVEYzLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XgorSElOVDogIE9ubHkgVVRGOCBKU09OIGVuY29kaW5nIGlzIHN1cHBvcnRlZC4KK1NFTEVD VCBKU09OX09CSkVDVCgnZm9vJzogTlVMTDo6aW50IEZPUk1BVCBKU09OKTsKK0VSUk9SOiAg Y2Fubm90IHVzZSBub24tc3RyaW5nIHR5cGVzIHdpdGggZXhwbGljaXQgRk9STUFUIEpTT04g Y2xhdXNlCitMSU5FIDE6IFNFTEVDVCBKU09OX09CSkVDVCgnZm9vJzogTlVMTDo6aW50IEZP Uk1BVCBKU09OKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXgorU0VMRUNUIEpTT05fT0JKRUNUKCdmb28nOiBOVUxMOjppbnQgRk9STUFUIEpTT04g RU5DT0RJTkcgVVRGOCk7CitFUlJPUjogIEpTT04gRU5DT0RJTkcgY2xhdXNlIGlzIG9ubHkg YWxsb3dlZCBmb3IgYnl0ZWEgaW5wdXQgdHlwZQorTElORSAxOiBTRUxFQ1QgSlNPTl9PQkpF Q1QoJ2Zvbyc6IE5VTEw6OmludCBGT1JNQVQgSlNPTiBFTkNPRElORyBVVEYuLi4KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorU0VMRUNUIEpTT05f T0JKRUNUKCdmb28nOiBOVUxMOjpqc29uIEZPUk1BVCBKU09OKTsKK1dBUk5JTkc6ICBGT1JN QVQgSlNPTiBoYXMgbm8gZWZmZWN0IGZvciBqc29uIGFuZCBqc29uYiB0eXBlcworTElORSAx OiBTRUxFQ1QgSlNPTl9PQkpFQ1QoJ2Zvbyc6IE5VTEw6Ompzb24gRk9STUFUIEpTT04pOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorICBqc29u X29iamVjdCAgIAorLS0tLS0tLS0tLS0tLS0tLQorIHsiZm9vIiA6IG51bGx9CisoMSByb3cp CisKK1NFTEVDVCBKU09OX09CSkVDVCgnZm9vJzogTlVMTDo6anNvbiBGT1JNQVQgSlNPTiBF TkNPRElORyBVVEY4KTsKK0VSUk9SOiAgSlNPTiBFTkNPRElORyBjbGF1c2UgaXMgb25seSBh bGxvd2VkIGZvciBieXRlYSBpbnB1dCB0eXBlCitMSU5FIDE6IFNFTEVDVCBKU09OX09CSkVD VCgnZm9vJzogTlVMTDo6anNvbiBGT1JNQVQgSlNPTiBFTkNPRElORyBVVC4uLgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorU0VMRUNUIEpTT05f T0JKRUNUKCdmb28nOiBOVUxMOjpqc29uYiBGT1JNQVQgSlNPTik7CitXQVJOSU5HOiAgRk9S TUFUIEpTT04gaGFzIG5vIGVmZmVjdCBmb3IganNvbiBhbmQganNvbmIgdHlwZXMKK0xJTkUg MTogU0VMRUNUIEpTT05fT0JKRUNUKCdmb28nOiBOVUxMOjpqc29uYiBGT1JNQVQgSlNPTik7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorICBq c29uX29iamVjdCAgCistLS0tLS0tLS0tLS0tLS0KKyB7ImZvbyI6IG51bGx9CisoMSByb3cp CisKK1NFTEVDVCBKU09OX09CSkVDVCgnZm9vJzogTlVMTDo6anNvbmIgRk9STUFUIEpTT04g RU5DT0RJTkcgVVRGOCk7CitFUlJPUjogIEpTT04gRU5DT0RJTkcgY2xhdXNlIGlzIG9ubHkg YWxsb3dlZCBmb3IgYnl0ZWEgaW5wdXQgdHlwZQorTElORSAxOiBTRUxFQ1QgSlNPTl9PQkpF Q1QoJ2Zvbyc6IE5VTEw6Ompzb25iIEZPUk1BVCBKU09OIEVOQ09ESU5HIFUuLi4KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxFQ1QgSlNP Tl9PQkpFQ1QoTlVMTDogMSk7CitFUlJPUjogIGFyZ3VtZW50IDEgY2Fubm90IGJlIG51bGwK K0hJTlQ6ICBPYmplY3Qga2V5cyBzaG91bGQgYmUgdGV4dC4KK1NFTEVDVCBKU09OX09CSkVD VCgnYSc6IDIgKyAzKTsKKyBqc29uX29iamVjdCAKKy0tLS0tLS0tLS0tLS0KKyB7ImEiIDog NX0KKygxIHJvdykKKworU0VMRUNUIEpTT05fT0JKRUNUKCdhJyBWQUxVRSAyICsgMyk7Cisg anNvbl9vYmplY3QgCistLS0tLS0tLS0tLS0tCisgeyJhIiA6IDV9CisoMSByb3cpCisKKy0t U0VMRUNUIEpTT05fT0JKRUNUKEtFWSAnYScgVkFMVUUgMiArIDMpOworU0VMRUNUIEpTT05f T0JKRUNUKCdhJyB8fCAyOiAxKTsKKyBqc29uX29iamVjdCAKKy0tLS0tLS0tLS0tLS0KKyB7 ImEyIiA6IDF9CisoMSByb3cpCisKK1NFTEVDVCBKU09OX09CSkVDVCgoJ2EnIHx8IDIpIFZB TFVFIDEpOworIGpzb25fb2JqZWN0IAorLS0tLS0tLS0tLS0tLQorIHsiYTIiIDogMX0KKygx IHJvdykKKworLS1TRUxFQ1QgSlNPTl9PQkpFQ1QoJ2EnIHx8IDIgVkFMVUUgMSk7CistLVNF TEVDVCBKU09OX09CSkVDVChLRVkgJ2EnIHx8IDIgVkFMVUUgMSk7CitTRUxFQ1QgSlNPTl9P QkpFQ1QoJ2EnOiAyOjp0ZXh0KTsKKyBqc29uX29iamVjdCAKKy0tLS0tLS0tLS0tLS0KKyB7 ImEiIDogIjIifQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9PQkpFQ1QoJ2EnIFZBTFVFIDI6 OnRleHQpOworIGpzb25fb2JqZWN0IAorLS0tLS0tLS0tLS0tLQorIHsiYSIgOiAiMiJ9Ciso MSByb3cpCisKKy0tU0VMRUNUIEpTT05fT0JKRUNUKEtFWSAnYScgVkFMVUUgMjo6dGV4dCk7 CitTRUxFQ1QgSlNPTl9PQkpFQ1QoMTo6dGV4dDogMik7CisganNvbl9vYmplY3QgCistLS0t LS0tLS0tLS0tCisgeyIxIiA6IDJ9CisoMSByb3cpCisKK1NFTEVDVCBKU09OX09CSkVDVCgo MTo6dGV4dCkgVkFMVUUgMik7CisganNvbl9vYmplY3QgCistLS0tLS0tLS0tLS0tCisgeyIx IiA6IDJ9CisoMSByb3cpCisKKy0tU0VMRUNUIEpTT05fT0JKRUNUKDE6OnRleHQgVkFMVUUg Mik7CistLVNFTEVDVCBKU09OX09CSkVDVChLRVkgMTo6dGV4dCBWQUxVRSAyKTsKK1NFTEVD VCBKU09OX09CSkVDVChqc29uICdbMV0nOiAxMjMpOworRVJST1I6ICBrZXkgdmFsdWUgbXVz dCBiZSBzY2FsYXIsIG5vdCBhcnJheSwgY29tcG9zaXRlLCBvciBqc29uCitTRUxFQ1QgSlNP Tl9PQkpFQ1QoQVJSQVlbMSwyLDNdOiAnYWFhJyk7CitFUlJPUjogIGtleSB2YWx1ZSBtdXN0 IGJlIHNjYWxhciwgbm90IGFycmF5LCBjb21wb3NpdGUsIG9yIGpzb24KK1NFTEVDVCBKU09O X09CSkVDVCgKKwknYSc6ICcxMjMnLAorCTEuMjM6IDEyMywKKwknYyc6IGpzb24gJ1sgMSx0 cnVlLHsgfSBdJywKKwknZCc6IGpzb25iICd7ICJ4IiA6IDEyMy40NSB9JworKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBqc29uX29iamVjdCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB7ImEiOiAiMTIzIiwgImMiOiBbMSwgdHJ1ZSwg e31dLCAiZCI6IHsieCI6IDEyMy40NX0sICIxLjIzIjogMTIzfQorKDEgcm93KQorCitTRUxF Q1QgSlNPTl9PQkpFQ1QoCisJJ2EnOiAnMTIzJywKKwkxLjIzOiAxMjMsCisJJ2MnOiBqc29u ICdbIDEsdHJ1ZSx7IH0gXScsCisJJ2QnOiBqc29uYiAneyAieCIgOiAxMjMuNDUgfScKKwlS RVRVUk5JTkcganNvbmIKKyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbl9v YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgeyJh IjogIjEyMyIsICJjIjogWzEsIHRydWUsIHt9XSwgImQiOiB7IngiOiAxMjMuNDV9LCAiMS4y MyI6IDEyM30KKygxIHJvdykKKworLyoKK1NFTEVDVCBKU09OX09CSkVDVCgKKwknYSc6ICcx MjMnLAorCUtFWSAxLjIzIFZBTFVFIDEyMywKKwknYycgVkFMVUUganNvbiAnWzEsIHRydWUs IHt9XScKKyk7CisqLworU0VMRUNUIEpTT05fT0JKRUNUKCdhJzogJzEyMycsICdiJzogSlNP Tl9PQkpFQ1QoJ2EnOiAxMTEsICdiJzogJ2FhYScpKTsKKyAgICAgICAgICAgICAgICAgIGpz b25fb2JqZWN0ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHsiYSIgOiAiMTIzIiwgImIiIDogeyJhIiA6IDEx MSwgImIiIDogImFhYSJ9fQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9PQkpFQ1QoJ2EnOiAn MTIzJywgJ2InOiBKU09OX09CSkVDVCgnYSc6IDExMSwgJ2InOiAnYWFhJyBSRVRVUk5JTkcg anNvbmIpKTsKKyAgICAgICAgICAgICAgICBqc29uX29iamVjdCAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB7ImEiOiAi MTIzIiwgImIiOiB7ImEiOiAxMTEsICJiIjogImFhYSJ9fQorKDEgcm93KQorCitTRUxFQ1Qg SlNPTl9PQkpFQ1QoJ2EnOiBKU09OX09CSkVDVCgnYic6IDEgUkVUVVJOSU5HIHRleHQpKTsK KyAgICAgIGpzb25fb2JqZWN0ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHsi YSIgOiAie1wiYlwiIDogMX0ifQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9PQkpFQ1QoJ2En OiBKU09OX09CSkVDVCgnYic6IDEgUkVUVVJOSU5HIHRleHQpIEZPUk1BVCBKU09OKTsKKyAg ICBqc29uX29iamVjdCAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyB7ImEiIDogeyJiIiA6 IDF9fQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9PQkpFQ1QoJ2EnOiBKU09OX09CSkVDVCgn Yic6IDEgUkVUVVJOSU5HIGJ5dGVhKSk7CisgICAgICAgICAgIGpzb25fb2JqZWN0ICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHsiYSIgOiAiXFx4 N2IyMjYyMjIyMDNhMjAzMTdkIn0KKygxIHJvdykKKworU0VMRUNUIEpTT05fT0JKRUNUKCdh JzogSlNPTl9PQkpFQ1QoJ2InOiAxIFJFVFVSTklORyBieXRlYSkgRk9STUFUIEpTT04pOwor ICAgIGpzb25fb2JqZWN0ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLQorIHsiYSIgOiB7ImIi IDogMX19CisoMSByb3cpCisKK1NFTEVDVCBKU09OX09CSkVDVCgnYSc6ICcxJywgJ2InOiBO VUxMLCAnYyc6IDIpOworICAgICAgICAgICBqc29uX29iamVjdCAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHsiYSIgOiAiMSIsICJiIiA6IG51 bGwsICJjIiA6IDJ9CisoMSByb3cpCisKK1NFTEVDVCBKU09OX09CSkVDVCgnYSc6ICcxJywg J2InOiBOVUxMLCAnYyc6IDIgTlVMTCBPTiBOVUxMKTsKKyAgICAgICAgICAganNvbl9vYmpl Y3QgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB7 ImEiIDogIjEiLCAiYiIgOiBudWxsLCAiYyIgOiAyfQorKDEgcm93KQorCitTRUxFQ1QgSlNP Tl9PQkpFQ1QoJ2EnOiAnMScsICdiJzogTlVMTCwgJ2MnOiAyIEFCU0VOVCBPTiBOVUxMKTsK KyAgICAganNvbl9vYmplY3QgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB7ImEi IDogIjEiLCAiYyIgOiAyfQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9PQkpFQ1QoMTogMSwg JzEnOiBOVUxMIFdJVEggVU5JUVVFKTsKK0VSUk9SOiAgZHVwbGljYXRlIEpTT04ga2V5ICIx IgorU0VMRUNUIEpTT05fT0JKRUNUKDE6IDEsICcxJzogTlVMTCBBQlNFTlQgT04gTlVMTCBX SVRIIFVOSVFVRSk7CitFUlJPUjogIGR1cGxpY2F0ZSBKU09OIGtleSAiMSIKK1NFTEVDVCBK U09OX09CSkVDVCgxOiAxLCAnMSc6IE5VTEwgTlVMTCBPTiBOVUxMIFdJVEggVU5JUVVFIFJF VFVSTklORyBqc29uYik7CitFUlJPUjogIGR1cGxpY2F0ZSBKU09OIG9iamVjdCBrZXkgdmFs dWUKK1NFTEVDVCBKU09OX09CSkVDVCgxOiAxLCAnMSc6IE5VTEwgQUJTRU5UIE9OIE5VTEwg V0lUSCBVTklRVUUgUkVUVVJOSU5HIGpzb25iKTsKK0VSUk9SOiAgZHVwbGljYXRlIEpTT04g b2JqZWN0IGtleSB2YWx1ZQorU0VMRUNUIEpTT05fT0JKRUNUKDE6IDEsICcyJzogTlVMTCwg JzEnOiAxIE5VTEwgT04gTlVMTCBXSVRIIFVOSVFVRSk7CitFUlJPUjogIGR1cGxpY2F0ZSBK U09OIGtleSAiMSIKK1NFTEVDVCBKU09OX09CSkVDVCgxOiAxLCAnMic6IE5VTEwsICcxJzog MSBBQlNFTlQgT04gTlVMTCBXSVRIIFVOSVFVRSk7CitFUlJPUjogIGR1cGxpY2F0ZSBKU09O IGtleSAiMSIKK1NFTEVDVCBKU09OX09CSkVDVCgxOiAxLCAnMic6IE5VTEwsICcxJzogMSBB QlNFTlQgT04gTlVMTCBXSVRIT1VUIFVOSVFVRSk7CisgICAganNvbl9vYmplY3QgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB7IjEiIDogMSwgIjEiIDogMX0KKygxIHJvdykKKwor U0VMRUNUIEpTT05fT0JKRUNUKDE6IDEsICcyJzogTlVMTCwgJzEnOiAxIEFCU0VOVCBPTiBO VUxMIFdJVEggVU5JUVVFIFJFVFVSTklORyBqc29uYik7CitFUlJPUjogIGR1cGxpY2F0ZSBK U09OIG9iamVjdCBrZXkgdmFsdWUKK1NFTEVDVCBKU09OX09CSkVDVCgxOiAxLCAnMic6IE5V TEwsICcxJzogMSBBQlNFTlQgT04gTlVMTCBXSVRIT1VUIFVOSVFVRSBSRVRVUk5JTkcganNv bmIpOworIGpzb25fb2JqZWN0IAorLS0tLS0tLS0tLS0tLQorIHsiMSI6IDF9CisoMSByb3cp CisKK1NFTEVDVCBKU09OX09CSkVDVCgxOiAxLCAnMic6IE5VTEwsICczJzogMSwgNDogTlVM TCwgJzUnOiAnYScgQUJTRU5UIE9OIE5VTEwgV0lUSCBVTklRVUUgUkVUVVJOSU5HIGpzb25i KTsKKyAgICAgICAganNvbl9vYmplY3QgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyB7IjEiOiAxLCAiMyI6IDEsICI1IjogImEifQorKDEgcm93KQorCistLSBK U09OX0FSUkFZKCkKK1NFTEVDVCBKU09OX0FSUkFZKCk7CisganNvbl9hcnJheSAKKy0tLS0t LS0tLS0tLQorIFtdCisoMSByb3cpCisKK1NFTEVDVCBKU09OX0FSUkFZKFJFVFVSTklORyBq c29uKTsKKyBqc29uX2FycmF5IAorLS0tLS0tLS0tLS0tCisgW10KKygxIHJvdykKKworU0VM RUNUIEpTT05fQVJSQVkoUkVUVVJOSU5HIGpzb24gRk9STUFUIEpTT04pOworIGpzb25fYXJy YXkgCistLS0tLS0tLS0tLS0KKyBbXQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9BUlJBWShS RVRVUk5JTkcganNvbmIpOworIGpzb25fYXJyYXkgCistLS0tLS0tLS0tLS0KKyBbXQorKDEg cm93KQorCitTRUxFQ1QgSlNPTl9BUlJBWShSRVRVUk5JTkcganNvbmIgRk9STUFUIEpTT04p OworIGpzb25fYXJyYXkgCistLS0tLS0tLS0tLS0KKyBbXQorKDEgcm93KQorCitTRUxFQ1Qg SlNPTl9BUlJBWShSRVRVUk5JTkcgdGV4dCk7CisganNvbl9hcnJheSAKKy0tLS0tLS0tLS0t LQorIFtdCisoMSByb3cpCisKK1NFTEVDVCBKU09OX0FSUkFZKFJFVFVSTklORyB0ZXh0IEZP Uk1BVCBKU09OKTsKKyBqc29uX2FycmF5IAorLS0tLS0tLS0tLS0tCisgW10KKygxIHJvdykK KworU0VMRUNUIEpTT05fQVJSQVkoUkVUVVJOSU5HIHRleHQgRk9STUFUIEpTT04gRU5DT0RJ TkcgVVRGOCk7CitFUlJPUjogIGNhbm5vdCBzZXQgSlNPTiBlbmNvZGluZyBmb3Igbm9uLWJ5 dGVhIG91dHB1dCB0eXBlcworTElORSAxOiBTRUxFQ1QgSlNPTl9BUlJBWShSRVRVUk5JTkcg dGV4dCBGT1JNQVQgSlNPTiBFTkNPRElORyBVVEY4KTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXgorU0VMRUNUIEpTT05fQVJSQVkoUkVUVVJOSU5HIHRl eHQgRk9STUFUIEpTT04gRU5DT0RJTkcgSU5WQUxJRF9FTkNPRElORyk7CitFUlJPUjogIHVu cmVjb2duaXplZCBKU09OIGVuY29kaW5nOiBpbnZhbGlkX2VuY29kaW5nCitTRUxFQ1QgSlNP Tl9BUlJBWShSRVRVUk5JTkcgYnl0ZWEpOworIGpzb25fYXJyYXkgCistLS0tLS0tLS0tLS0K KyBceDViNWQKKygxIHJvdykKKworU0VMRUNUIEpTT05fQVJSQVkoUkVUVVJOSU5HIGJ5dGVh IEZPUk1BVCBKU09OKTsKKyBqc29uX2FycmF5IAorLS0tLS0tLS0tLS0tCisgXHg1YjVkCiso MSByb3cpCisKK1NFTEVDVCBKU09OX0FSUkFZKFJFVFVSTklORyBieXRlYSBGT1JNQVQgSlNP TiBFTkNPRElORyBVVEY4KTsKKyBqc29uX2FycmF5IAorLS0tLS0tLS0tLS0tCisgXHg1YjVk CisoMSByb3cpCisKK1NFTEVDVCBKU09OX0FSUkFZKFJFVFVSTklORyBieXRlYSBGT1JNQVQg SlNPTiBFTkNPRElORyBVVEYxNik7CitFUlJPUjogIHVuc3VwcG9ydGVkIEpTT04gZW5jb2Rp bmcKK0xJTkUgMTogU0VMRUNUIEpTT05fQVJSQVkoUkVUVVJOSU5HIGJ5dGVhIEZPUk1BVCBK U09OIEVOQ09ESU5HIFVURjE2Li4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBeCitISU5UOiAgT25seSBVVEY4IEpTT04gZW5jb2RpbmcgaXMgc3VwcG9y dGVkLgorU0VMRUNUIEpTT05fQVJSQVkoUkVUVVJOSU5HIGJ5dGVhIEZPUk1BVCBKU09OIEVO Q09ESU5HIFVURjMyKTsKK0VSUk9SOiAgdW5zdXBwb3J0ZWQgSlNPTiBlbmNvZGluZworTElO RSAxOiBTRUxFQ1QgSlNPTl9BUlJBWShSRVRVUk5JTkcgYnl0ZWEgRk9STUFUIEpTT04gRU5D T0RJTkcgVVRGMzIuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF4KK0hJTlQ6ICBPbmx5IFVURjggSlNPTiBlbmNvZGluZyBpcyBzdXBwb3J0ZWQuCitT RUxFQ1QgSlNPTl9BUlJBWSgnYWFhJywgMTExLCB0cnVlLCBhcnJheVsxLDIsM10sIE5VTEws IGpzb24gJ3siYSI6IFsxXX0nLCBqc29uYiAnWyJhIiwzXScpOworICAgICAgICAgICAgICAg ICAgICAganNvbl9hcnJheSAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgWyJhYWEiLCAxMTEs IHRydWUsIFsxLCAyLCAzXSwgeyJhIjogWzFdfSwgWyJhIiwgM11dCisoMSByb3cpCisKK1NF TEVDVCBKU09OX0FSUkFZKCdhJywgIE5VTEwsICdiJyBOVUxMICAgT04gTlVMTCk7CisgICAg anNvbl9hcnJheSAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLQorIFsiYSIsIG51bGwsICJiIl0K KygxIHJvdykKKworU0VMRUNUIEpTT05fQVJSQVkoJ2EnLCAgTlVMTCwgJ2InIEFCU0VOVCBP TiBOVUxMKTsKKyBqc29uX2FycmF5IAorLS0tLS0tLS0tLS0tCisgWyJhIiwgImIiXQorKDEg cm93KQorCitTRUxFQ1QgSlNPTl9BUlJBWShOVUxMLCBOVUxMLCAnYicgQUJTRU5UIE9OIE5V TEwpOworIGpzb25fYXJyYXkgCistLS0tLS0tLS0tLS0KKyBbImIiXQorKDEgcm93KQorCitT RUxFQ1QgSlNPTl9BUlJBWSgnYScsICBOVUxMLCAnYicgTlVMTCAgIE9OIE5VTEwgUkVUVVJO SU5HIGpzb25iKTsKKyAgICBqc29uX2FycmF5ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tCisg WyJhIiwgbnVsbCwgImIiXQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9BUlJBWSgnYScsICBO VUxMLCAnYicgQUJTRU5UIE9OIE5VTEwgUkVUVVJOSU5HIGpzb25iKTsKKyBqc29uX2FycmF5 IAorLS0tLS0tLS0tLS0tCisgWyJhIiwgImIiXQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9B UlJBWShOVUxMLCBOVUxMLCAnYicgQUJTRU5UIE9OIE5VTEwgUkVUVVJOSU5HIGpzb25iKTsK KyBqc29uX2FycmF5IAorLS0tLS0tLS0tLS0tCisgWyJiIl0KKygxIHJvdykKKworU0VMRUNU IEpTT05fQVJSQVkoSlNPTl9BUlJBWSgneyAiYSIgOiAxMjMgfScgUkVUVVJOSU5HIHRleHQp KTsKKyAgICAgICAgICBqc29uX2FycmF5ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBbIltcInsgXFxcImFcXFwiIDogMTIzIH1cIl0iXQorKDEgcm93 KQorCitTRUxFQ1QgSlNPTl9BUlJBWShKU09OX0FSUkFZKCd7ICJhIiA6IDEyMyB9JyBGT1JN QVQgSlNPTiBSRVRVUk5JTkcgdGV4dCkpOworICAgICAganNvbl9hcnJheSAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgWyJbeyBcImFcIiA6IDEyMyB9XSJdCisoMSByb3cp CisKK1NFTEVDVCBKU09OX0FSUkFZKEpTT05fQVJSQVkoJ3sgImEiIDogMTIzIH0nIEZPUk1B VCBKU09OIFJFVFVSTklORyB0ZXh0KSBGT1JNQVQgSlNPTik7CisgICAganNvbl9hcnJheSAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tCisgW1t7ICJhIiA6IDEyMyB9XV0KKygxIHJvdykK KworU0VMRUNUIEpTT05fQVJSQVkoU0VMRUNUIGkgRlJPTSAoVkFMVUVTICgxKSwgKDIpLCAo TlVMTCksICg0KSkgZm9vKGkpKTsKKyBqc29uX2FycmF5IAorLS0tLS0tLS0tLS0tCisgWzEs IDIsIDRdCisoMSByb3cpCisKK1NFTEVDVCBKU09OX0FSUkFZKFNFTEVDVCBpIEZST00gKFZB TFVFUyAoTlVMTDo6aW50W10pLCAoJ3sxLDJ9JyksIChOVUxMKSwgKE5VTEwpLCAoJ3szLDR9 JyksIChOVUxMKSkgZm9vKGkpKTsKKyBqc29uX2FycmF5IAorLS0tLS0tLS0tLS0tCisgW1sx LDJdLCAgICsKKyAgWzMsNF1dCisoMSByb3cpCisKK1NFTEVDVCBKU09OX0FSUkFZKFNFTEVD VCBpIEZST00gKFZBTFVFUyAoTlVMTDo6aW50W10pLCAoJ3sxLDJ9JyksIChOVUxMKSwgKE5V TEwpLCAoJ3szLDR9JyksIChOVUxMKSkgZm9vKGkpIFJFVFVSTklORyBqc29uYik7CisgICAg anNvbl9hcnJheSAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLQorIFtbMSwgMl0sIFszLCA0XV0K KygxIHJvdykKKworLS1TRUxFQ1QgSlNPTl9BUlJBWShTRUxFQ1QgaSBGUk9NIChWQUxVRVMg KE5VTEw6OmludFtdKSwgKCd7MSwyfScpLCAoTlVMTCksIChOVUxMKSwgKCd7Myw0fScpLCAo TlVMTCkpIGZvbyhpKSBOVUxMIE9OIE5VTEwpOworLS1TRUxFQ1QgSlNPTl9BUlJBWShTRUxF Q1QgaSBGUk9NIChWQUxVRVMgKE5VTEw6OmludFtdKSwgKCd7MSwyfScpLCAoTlVMTCksIChO VUxMKSwgKCd7Myw0fScpLCAoTlVMTCkpIGZvbyhpKSBOVUxMIE9OIE5VTEwgUkVUVVJOSU5H IGpzb25iKTsKK1NFTEVDVCBKU09OX0FSUkFZKFNFTEVDVCBpIEZST00gKFZBTFVFUyAoMyks ICgxKSwgKE5VTEwpLCAoMikpIGZvbyhpKSBPUkRFUiBCWSBpKTsKKyBqc29uX2FycmF5IAor LS0tLS0tLS0tLS0tCisgWzEsIDIsIDNdCisoMSByb3cpCisKKy0tIFNob3VsZCBmYWlsCitT RUxFQ1QgSlNPTl9BUlJBWShTRUxFQ1QgRlJPTSAoVkFMVUVTICgxKSkgZm9vKGkpKTsKK0VS Uk9SOiAgc3VicXVlcnkgbXVzdCByZXR1cm4gb25seSBvbmUgY29sdW1uCitMSU5FIDE6IFNF TEVDVCBKU09OX0FSUkFZKFNFTEVDVCBGUk9NIChWQUxVRVMgKDEpKSBmb28oaSkpOworICAg ICAgICAgICAgICAgXgorU0VMRUNUIEpTT05fQVJSQVkoU0VMRUNUIGksIGkgRlJPTSAoVkFM VUVTICgxKSkgZm9vKGkpKTsKK0VSUk9SOiAgc3VicXVlcnkgbXVzdCByZXR1cm4gb25seSBv bmUgY29sdW1uCitMSU5FIDE6IFNFTEVDVCBKU09OX0FSUkFZKFNFTEVDVCBpLCBpIEZST00g KFZBTFVFUyAoMSkpIGZvbyhpKSk7CisgICAgICAgICAgICAgICBeCitTRUxFQ1QgSlNPTl9B UlJBWShTRUxFQ1QgKiBGUk9NIChWQUxVRVMgKDEsIDIpKSBmb28oaSwgaikpOworRVJST1I6 ICBzdWJxdWVyeSBtdXN0IHJldHVybiBvbmx5IG9uZSBjb2x1bW4KK0xJTkUgMTogU0VMRUNU IEpTT05fQVJSQVkoU0VMRUNUICogRlJPTSAoVkFMVUVTICgxLCAyKSkgZm9vKGksIGopKTsK KyAgICAgICAgICAgICAgIF4KKy0tIEpTT05fQVJSQVlBR0coKQorU0VMRUNUCUpTT05fQVJS QVlBR0coaSkgSVMgTlVMTCwKKwkJSlNPTl9BUlJBWUFHRyhpIFJFVFVSTklORyBqc29uYikg SVMgTlVMTAorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMCkgaTsKKyA/Y29sdW1uPyB8ID9j b2x1bW4/IAorLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgdCAgICAgICAgfCB0CisoMSByb3cp CisKK1NFTEVDVAlKU09OX0FSUkFZQUdHKGkpLAorCQlKU09OX0FSUkFZQUdHKGkgUkVUVVJO SU5HIGpzb25iKQorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNSkgaTsKKyAganNvbl9hcnJh eWFnZyAgfCAganNvbl9hcnJheWFnZyAgCistLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLQorIFsxLCAyLCAzLCA0LCA1XSB8IFsxLCAyLCAzLCA0LCA1XQorKDEgcm93KQor CitTRUxFQ1QgSlNPTl9BUlJBWUFHRyhpIE9SREVSIEJZIGkgREVTQykKK0ZST00gZ2VuZXJh dGVfc2VyaWVzKDEsIDUpIGk7CisgIGpzb25fYXJyYXlhZ2cgIAorLS0tLS0tLS0tLS0tLS0t LS0KKyBbNSwgNCwgMywgMiwgMV0KKygxIHJvdykKKworU0VMRUNUIEpTT05fQVJSQVlBR0co aTo6dGV4dDo6anNvbikKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUpIGk7CisgIGpzb25f YXJyYXlhZ2cgIAorLS0tLS0tLS0tLS0tLS0tLS0KKyBbMSwgMiwgMywgNCwgNV0KKygxIHJv dykKKworU0VMRUNUIEpTT05fQVJSQVlBR0coSlNPTl9BUlJBWShpLCBpICsgMSBSRVRVUk5J TkcgdGV4dCkgRk9STUFUIEpTT04pCitGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA1KSBpOwor ICAgICAgICAgICAgICBqc29uX2FycmF5YWdnICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBbWzEsIDJdLCBbMiwgM10sIFsz LCA0XSwgWzQsIDVdLCBbNSwgNl1dCisoMSByb3cpCisKK1NFTEVDVAlKU09OX0FSUkFZQUdH KE5VTEwpLAorCQlKU09OX0FSUkFZQUdHKE5VTEwgUkVUVVJOSU5HIGpzb25iKQorRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwgNSk7CisganNvbl9hcnJheWFnZyB8IGpzb25fYXJyYXlhZ2cg CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tCisgW10gICAgICAgICAgICB8IFtd CisoMSByb3cpCisKK1NFTEVDVAlKU09OX0FSUkFZQUdHKE5VTEwgTlVMTCBPTiBOVUxMKSwK KwkJSlNPTl9BUlJBWUFHRyhOVUxMIE5VTEwgT04gTlVMTCBSRVRVUk5JTkcganNvbmIpCitG Uk9NIGdlbmVyYXRlX3NlcmllcygxLCA1KTsKKyAgICAgICAgIGpzb25fYXJyYXlhZ2cgICAg ICAgICAgfCAgICAgICAgIGpzb25fYXJyYXlhZ2cgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IFtudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsXSB8IFtudWxsLCBudWxsLCBudWxsLCBu dWxsLCBudWxsXQorKDEgcm93KQorCitTRUxFQ1QKKwlKU09OX0FSUkFZQUdHKGJhciksCisJ SlNPTl9BUlJBWUFHRyhiYXIgUkVUVVJOSU5HIGpzb25iKSwKKwlKU09OX0FSUkFZQUdHKGJh ciBBQlNFTlQgT04gTlVMTCksCisJSlNPTl9BUlJBWUFHRyhiYXIgQUJTRU5UIE9OIE5VTEwg UkVUVVJOSU5HIGpzb25iKSwKKwlKU09OX0FSUkFZQUdHKGJhciBOVUxMIE9OIE5VTEwpLAor CUpTT05fQVJSQVlBR0coYmFyIE5VTEwgT04gTlVMTCBSRVRVUk5JTkcganNvbmIpLAorCUpT T05fQVJSQVlBR0coZm9vKSwKKwlKU09OX0FSUkFZQUdHKGZvbyBSRVRVUk5JTkcganNvbmIp LAorCUpTT05fQVJSQVlBR0coZm9vIE9SREVSIEJZIGJhcikgRklMVEVSIChXSEVSRSBiYXIg PiAyKSwKKwlKU09OX0FSUkFZQUdHKGZvbyBPUkRFUiBCWSBiYXIgUkVUVVJOSU5HIGpzb25i KSBGSUxURVIgKFdIRVJFIGJhciA+IDIpCitGUk9NCisJKFZBTFVFUyAoTlVMTCksICgzKSwg KDEpLCAoTlVMTCksIChOVUxMKSwgKDUpLCAoMiksICg0KSwgKE5VTEwpKSBmb28oYmFyKTsK KyAganNvbl9hcnJheWFnZyAgfCAganNvbl9hcnJheWFnZyAgfCAganNvbl9hcnJheWFnZyAg fCAganNvbl9hcnJheWFnZyAgfCAgICAgICAgICAgICAganNvbl9hcnJheWFnZyAgICAgICAg ICAgICAgfCAgICAgICAgICAgICAganNvbl9hcnJheWFnZyAgICAgICAgICAgICAgfCAganNv bl9hcnJheWFnZyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGpzb25fYXJyYXlhZ2cgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBqc29uX2FycmF5YWdnIHwgICAgICAgICAg ICBqc29uX2FycmF5YWdnICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgWzEsIDIsIDMsIDQsIDVdIHwgWzEsIDIsIDMsIDQsIDVdIHwgWzEsIDIsIDMsIDQs IDVdIHwgWzEsIDIsIDMsIDQsIDVdIHwgWzEsIDIsIDMsIDQsIDUsIG51bGwsIG51bGwsIG51 bGwsIG51bGxdIHwgWzEsIDIsIDMsIDQsIDUsIG51bGwsIG51bGwsIG51bGwsIG51bGxdIHwg W3siYmFyIjoxfSwgICAgK3wgW3siYmFyIjogMX0sIHsiYmFyIjogMn0sIHsiYmFyIjogM30s IHsiYmFyIjogNH0sIHsiYmFyIjogNX0sIHsiYmFyIjogbnVsbH0sIHsiYmFyIjogbnVsbH0s IHsiYmFyIjogbnVsbH0sIHsiYmFyIjogbnVsbH1dIHwgW3siYmFyIjozfSwgICt8IFt7ImJh ciI6IDN9LCB7ImJhciI6IDR9LCB7ImJhciI6IDV9XQorICAgICAgICAgICAgICAgICB8ICAg ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB7ImJhciI6Mn0sICAgICt8ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICB7ImJhciI6NH0sICArfCAKKyAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg ICAgICAgfCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgeyJiYXIiOjN9LCAgICArfCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg eyJiYXIiOjV9XSAgIHwgCisgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwg ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgIHsiYmFyIjo0fSwgICAgK3wgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg ICAgICB8IAorICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8ICAgICAgICAg ICAgICAgICB8ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICB7ImJhciI6NX0sICAgICt8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAK KyAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg fCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgeyJi YXIiOm51bGx9LCArfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgCisgICAgICAg ICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgICAgICAg ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHsiYmFyIjpudWxs fSwgK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8IAorICAgICAgICAgICAgICAg ICB8ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB7ImJhciI6bnVsbH0sICt8ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAKKyAgICAgICAgICAgICAgICAgfCAgICAg ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgeyJiYXIiOm51bGx9XSAgfCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgICAgICAgICAgICAgIHwgCisoMSByb3cpCisKK1NFTEVDVAorCWJhciwgSlNPTl9B UlJBWUFHRyhiYXIpIEZJTFRFUiAoV0hFUkUgYmFyID4gMikgT1ZFUiAoUEFSVElUSU9OIEJZ IGZvby5iYXIgJSAyKQorRlJPTQorCShWQUxVRVMgKE5VTEwpLCAoMyksICgxKSwgKE5VTEwp LCAoTlVMTCksICg1KSwgKDIpLCAoNCksIChOVUxMKSwgKDUpLCAoNCkpIGZvbyhiYXIpOwor IGJhciB8IGpzb25fYXJyYXlhZ2cgCistLS0tLSstLS0tLS0tLS0tLS0tLS0KKyAgIDQgfCBb NCwgNF0KKyAgIDQgfCBbNCwgNF0KKyAgIDIgfCBbNCwgNF0KKyAgIDUgfCBbNSwgMywgNV0K KyAgIDMgfCBbNSwgMywgNV0KKyAgIDEgfCBbNSwgMywgNV0KKyAgIDUgfCBbNSwgMywgNV0K KyAgICAgfCAKKyAgICAgfCAKKyAgICAgfCAKKyAgICAgfCAKKygxMSByb3dzKQorCistLSBK U09OX09CSkVDVEFHRygpCitTRUxFQ1QJSlNPTl9PQkpFQ1RBR0coJ2tleSc6IDEpIElTIE5V TEwsCisJCUpTT05fT0JKRUNUQUdHKCdrZXknOiAxIFJFVFVSTklORyBqc29uYikgSVMgTlVM TAorV0hFUkUgRkFMU0U7CisgP2NvbHVtbj8gfCA/Y29sdW1uPyAKKy0tLS0tLS0tLS0rLS0t LS0tLS0tLQorIHQgICAgICAgIHwgdAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9PQkpFQ1RB R0coTlVMTDogMSk7CitFUlJPUjogIGZpZWxkIG5hbWUgbXVzdCBub3QgYmUgbnVsbAorU0VM RUNUIEpTT05fT0JKRUNUQUdHKE5VTEw6IDEgUkVUVVJOSU5HIGpzb25iKTsKK0VSUk9SOiAg ZmllbGQgbmFtZSBtdXN0IG5vdCBiZSBudWxsCitTRUxFQ1QKKwlKU09OX09CSkVDVEFHRyhp OiBpKSwKKy0tCUpTT05fT0JKRUNUQUdHKGkgVkFMVUUgaSksCistLQlKU09OX09CSkVDVEFH RyhLRVkgaSBWQUxVRSBpKSwKKwlKU09OX09CSkVDVEFHRyhpOiBpIFJFVFVSTklORyBqc29u YikKK0ZST00KKwlnZW5lcmF0ZV9zZXJpZXMoMSwgNSkgaTsKKyAgICAgICAgICAgICAgICAg anNvbl9vYmplY3RhZ2cgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICBqc29uX29i amVjdGFnZyAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIHsgIjEiIDogMSwgIjIiIDogMiwgIjMiIDogMywgIjQiIDogNCwgIjUiIDog NSB9IHwgeyIxIjogMSwgIjIiOiAyLCAiMyI6IDMsICI0IjogNCwgIjUiOiA1fQorKDEgcm93 KQorCitTRUxFQ1QKKwlKU09OX09CSkVDVEFHRyhrOiB2KSwKKwlKU09OX09CSkVDVEFHRyhr OiB2IE5VTEwgT04gTlVMTCksCisJSlNPTl9PQkpFQ1RBR0coazogdiBBQlNFTlQgT04gTlVM TCksCisJSlNPTl9PQkpFQ1RBR0coazogdiBSRVRVUk5JTkcganNvbmIpLAorCUpTT05fT0JK RUNUQUdHKGs6IHYgTlVMTCBPTiBOVUxMIFJFVFVSTklORyBqc29uYiksCisJSlNPTl9PQkpF Q1RBR0coazogdiBBQlNFTlQgT04gTlVMTCBSRVRVUk5JTkcganNvbmIpCitGUk9NCisJKFZB TFVFUyAoMSwgMSksICgxLCBOVUxMKSwgKDIsIE5VTEwpLCAoMywgMykpIGZvbyhrLCB2KTsK KyAgICAgICAgICAgICAgICBqc29uX29iamVjdGFnZyAgICAgICAgICAgICAgICB8ICAgICAg ICAgICAgICAgIGpzb25fb2JqZWN0YWdnICAgICAgICAgICAgICAgIHwgICAganNvbl9vYmpl Y3RhZ2cgICAgfCAgICAgICAgIGpzb25fb2JqZWN0YWdnICAgICAgICAgfCAgICAgICAgIGpz b25fb2JqZWN0YWdnICAgICAgICAgfCAganNvbl9vYmplY3RhZ2cgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgeyAiMSIgOiAxLCAiMSIgOiBudWxsLCAi MiIgOiBudWxsLCAiMyIgOiAzIH0gfCB7ICIxIiA6IDEsICIxIiA6IG51bGwsICIyIiA6IG51 bGwsICIzIiA6IDMgfSB8IHsgIjEiIDogMSwgIjMiIDogMyB9IHwgeyIxIjogbnVsbCwgIjIi OiBudWxsLCAiMyI6IDN9IHwgeyIxIjogbnVsbCwgIjIiOiBudWxsLCAiMyI6IDN9IHwgeyIx IjogMSwgIjMiOiAzfQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9PQkpFQ1RBR0coazogdiBX SVRIIFVOSVFVRSBLRVlTKQorRlJPTSAoVkFMVUVTICgxLCAxKSwgKDEsIE5VTEwpLCAoMiwg MikpIGZvbyhrLCB2KTsKK0VSUk9SOiAgZHVwbGljYXRlIEpTT04ga2V5ICIxIgorU0VMRUNU IEpTT05fT0JKRUNUQUdHKGs6IHYgQUJTRU5UIE9OIE5VTEwgV0lUSCBVTklRVUUgS0VZUykK K0ZST00gKFZBTFVFUyAoMSwgMSksICgxLCBOVUxMKSwgKDIsIDIpKSBmb28oaywgdik7CitF UlJPUjogIGR1cGxpY2F0ZSBKU09OIGtleSAiMSIKK1NFTEVDVCBKU09OX09CSkVDVEFHRyhr OiB2IEFCU0VOVCBPTiBOVUxMIFdJVEggVU5JUVVFIEtFWVMpCitGUk9NIChWQUxVRVMgKDEs IDEpLCAoMCwgTlVMTCksICgzLCBOVUxMKSwgKDIsIDIpLCAoNCwgTlVMTCkpIGZvbyhrLCB2 KTsKKyAgICBqc29uX29iamVjdGFnZyAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB7 ICIxIiA6IDEsICIyIiA6IDIgfQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9PQkpFQ1RBR0co azogdiBXSVRIIFVOSVFVRSBLRVlTIFJFVFVSTklORyBqc29uYikKK0ZST00gKFZBTFVFUyAo MSwgMSksICgxLCBOVUxMKSwgKDIsIDIpKSBmb28oaywgdik7CitFUlJPUjogIGR1cGxpY2F0 ZSBKU09OIG9iamVjdCBrZXkgdmFsdWUKK1NFTEVDVCBKU09OX09CSkVDVEFHRyhrOiB2IEFC U0VOVCBPTiBOVUxMIFdJVEggVU5JUVVFIEtFWVMgUkVUVVJOSU5HIGpzb25iKQorRlJPTSAo VkFMVUVTICgxLCAxKSwgKDEsIE5VTEwpLCAoMiwgMikpIGZvbyhrLCB2KTsKK0VSUk9SOiAg ZHVwbGljYXRlIEpTT04gb2JqZWN0IGtleSB2YWx1ZQorLS0gVGVzdCBKU09OX09CSkVDVCBk ZXBhcnNpbmcKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCBKU09OX09C SkVDVCgnZm9vJyA6ICcxJyBGT1JNQVQgSlNPTiwgJ2JhcicgOiAnYmF6JyBSRVRVUk5JTkcg anNvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIFJlc3VsdAorICAgT3V0cHV0OiBKU09OX09CSkVDVCgnZm9vJyA6ICcxJzo6anNv biwgJ2JhcicgOiAnYmF6Jzo6dGV4dCBSRVRVUk5JTkcganNvbikKKygyIHJvd3MpCisKK0NS RUFURSBWSUVXIGpzb25fb2JqZWN0X3ZpZXcgQVMKK1NFTEVDVCBKU09OX09CSkVDVCgnZm9v JyA6ICcxJyBGT1JNQVQgSlNPTiwgJ2JhcicgOiAnYmF6JyBSRVRVUk5JTkcganNvbik7Citc c3YganNvbl9vYmplY3RfdmlldworQ1JFQVRFIE9SIFJFUExBQ0UgVklFVyBwdWJsaWMuanNv bl9vYmplY3RfdmlldyBBUworIFNFTEVDVCBKU09OX09CSkVDVCgnZm9vJyA6ICcxJzo6dGV4 dCBGT1JNQVQgSlNPTiwgJ2JhcicgOiAnYmF6Jzo6dGV4dCBSRVRVUk5JTkcganNvbikgQVMg Impzb25fb2JqZWN0IgorRFJPUCBWSUVXIGpzb25fb2JqZWN0X3ZpZXc7CistLSBUZXN0IEpT T05fQVJSQVkgZGVwYXJzaW5nCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxF Q1QgSlNPTl9BUlJBWSgnMScgRk9STUFUIEpTT04sIDIgUkVUVVJOSU5HIGpzb24pOworICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1 bHQKKyAgIE91dHB1dDogSlNPTl9BUlJBWSgnMSc6Ompzb24sIDIgUkVUVVJOSU5HIGpzb24p CisoMiByb3dzKQorCitDUkVBVEUgVklFVyBqc29uX2FycmF5X3ZpZXcgQVMKK1NFTEVDVCBK U09OX0FSUkFZKCcxJyBGT1JNQVQgSlNPTiwgMiBSRVRVUk5JTkcganNvbik7Citcc3YganNv bl9hcnJheV92aWV3CitDUkVBVEUgT1IgUkVQTEFDRSBWSUVXIHB1YmxpYy5qc29uX2FycmF5 X3ZpZXcgQVMKKyBTRUxFQ1QgSlNPTl9BUlJBWSgnMSc6OnRleHQgRk9STUFUIEpTT04sIDIg UkVUVVJOSU5HIGpzb24pIEFTICJqc29uX2FycmF5IgorRFJPUCBWSUVXIGpzb25fYXJyYXlf dmlldzsKKy0tIFRlc3QgSlNPTl9PQkpFQ1RBR0cgZGVwYXJzaW5nCitFWFBMQUlOIChWRVJC T1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgSlNPTl9PQkpFQ1RBR0coaTogKCcxMTEnIHx8IGkp OjpieXRlYSBGT1JNQVQgSlNPTiBXSVRIIFVOSVFVRSBSRVRVUk5JTkcgdGV4dCkgRklMVEVS IChXSEVSRSBpID4gMykKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsNSkgaTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3Jl Z2F0ZQorICAgT3V0cHV0OiBKU09OX09CSkVDVEFHRyhpIDogKCgnMTExJzo6dGV4dCB8fCAo aSk6OnRleHQpKTo6Ynl0ZWEgRk9STUFUIEpTT04gV0lUSCBVTklRVUUgS0VZUyBSRVRVUk5J TkcgdGV4dCkgRklMVEVSIChXSEVSRSAoaSA+IDMpKQorICAgLT4gIEZ1bmN0aW9uIFNjYW4g b24gcGdfY2F0YWxvZy5nZW5lcmF0ZV9zZXJpZXMgaQorICAgICAgICAgT3V0cHV0OiBpCisg ICAgICAgICBGdW5jdGlvbiBDYWxsOiBnZW5lcmF0ZV9zZXJpZXMoMSwgNSkKKyg1IHJvd3Mp CisKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCBKU09OX09CSkVDVEFH RyhpOiAoJzExMScgfHwgaSk6OmJ5dGVhIEZPUk1BVCBKU09OIFdJVEggVU5JUVVFIFJFVFVS TklORyB0ZXh0KSBPVkVSIChQQVJUSVRJT04gQlkgaSAlIDIpCitGUk9NIGdlbmVyYXRlX3Nl cmllcygxLDUpIGk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBXaW5kb3dBZ2cKKyAgIE91dHB1dDogSlNPTl9PQkpFQ1RBR0coaSA6ICgo JzExMSc6OnRleHQgfHwgKGkpOjp0ZXh0KSk6OmJ5dGVhIEZPUk1BVCBKU09OIFdJVEggVU5J UVVFIEtFWVMgUkVUVVJOSU5HIHRleHQpIE9WRVIgKD8pLCAoKGkgJSAyKSkKKyAgIC0+ICBT b3J0CisgICAgICAgICBPdXRwdXQ6ICgoaSAlIDIpKSwgaQorICAgICAgICAgU29ydCBLZXk6 ICgoaS5pICUgMikpCisgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBwZ19jYXRhbG9n LmdlbmVyYXRlX3NlcmllcyBpCisgICAgICAgICAgICAgICBPdXRwdXQ6IChpICUgMiksIGkK KyAgICAgICAgICAgICAgIEZ1bmN0aW9uIENhbGw6IGdlbmVyYXRlX3NlcmllcygxLCA1KQor KDggcm93cykKKworQ1JFQVRFIFZJRVcganNvbl9vYmplY3RhZ2dfdmlldyBBUworU0VMRUNU IEpTT05fT0JKRUNUQUdHKGk6ICgnMTExJyB8fCBpKTo6Ynl0ZWEgRk9STUFUIEpTT04gV0lU SCBVTklRVUUgUkVUVVJOSU5HIHRleHQpIEZJTFRFUiAoV0hFUkUgaSA+IDMpCitGUk9NIGdl bmVyYXRlX3NlcmllcygxLDUpIGk7Citcc3YganNvbl9vYmplY3RhZ2dfdmlldworQ1JFQVRF IE9SIFJFUExBQ0UgVklFVyBwdWJsaWMuanNvbl9vYmplY3RhZ2dfdmlldyBBUworIFNFTEVD VCBKU09OX09CSkVDVEFHRyhpIDogKCcxMTEnOjp0ZXh0IHx8IGkpOjpieXRlYSBGT1JNQVQg SlNPTiBXSVRIIFVOSVFVRSBLRVlTIFJFVFVSTklORyB0ZXh0KSBGSUxURVIgKFdIRVJFIGkg PiAzKSBBUyAianNvbl9vYmplY3RhZ2ciCisgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA1 KSBpKGkpCitEUk9QIFZJRVcganNvbl9vYmplY3RhZ2dfdmlldzsKKy0tIFRlc3QgSlNPTl9B UlJBWUFHRyBkZXBhcnNpbmcKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVD VCBKU09OX0FSUkFZQUdHKCgnMTExJyB8fCBpKTo6Ynl0ZWEgRk9STUFUIEpTT04gTlVMTCBP TiBOVUxMIFJFVFVSTklORyB0ZXh0KSBGSUxURVIgKFdIRVJFIGkgPiAzKQorRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSw1KSBpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQWdncmVnYXRlCisgICBPdXRwdXQ6IEpTT05fQVJSQVlBR0coKCgnMTExJzo6dGV4 dCB8fCAoaSk6OnRleHQpKTo6Ynl0ZWEgRk9STUFUIEpTT04gTlVMTCBPTiBOVUxMIFJFVFVS TklORyB0ZXh0KSBGSUxURVIgKFdIRVJFIChpID4gMykpCisgICAtPiAgRnVuY3Rpb24gU2Nh biBvbiBwZ19jYXRhbG9nLmdlbmVyYXRlX3NlcmllcyBpCisgICAgICAgICBPdXRwdXQ6IGkK KyAgICAgICAgIEZ1bmN0aW9uIENhbGw6IGdlbmVyYXRlX3NlcmllcygxLCA1KQorKDUgcm93 cykKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIEpTT05fQVJSQVlB R0coKCcxMTEnIHx8IGkpOjpieXRlYSBGT1JNQVQgSlNPTiBOVUxMIE9OIE5VTEwgUkVUVVJO SU5HIHRleHQpIE9WRVIgKFBBUlRJVElPTiBCWSBpICUgMikKK0ZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsNSkgaTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFdpbmRvd0Fn ZworICAgT3V0cHV0OiBKU09OX0FSUkFZQUdHKCgoJzExMSc6OnRleHQgfHwgKGkpOjp0ZXh0 KSk6OmJ5dGVhIEZPUk1BVCBKU09OIE5VTEwgT04gTlVMTCBSRVRVUk5JTkcgdGV4dCkgT1ZF UiAoPyksICgoaSAlIDIpKQorICAgLT4gIFNvcnQKKyAgICAgICAgIE91dHB1dDogKChpICUg MikpLCBpCisgICAgICAgICBTb3J0IEtleTogKChpLmkgJSAyKSkKKyAgICAgICAgIC0+ICBG dW5jdGlvbiBTY2FuIG9uIHBnX2NhdGFsb2cuZ2VuZXJhdGVfc2VyaWVzIGkKKyAgICAgICAg ICAgICAgIE91dHB1dDogKGkgJSAyKSwgaQorICAgICAgICAgICAgICAgRnVuY3Rpb24gQ2Fs bDogZ2VuZXJhdGVfc2VyaWVzKDEsIDUpCisoOCByb3dzKQorCitDUkVBVEUgVklFVyBqc29u X2FycmF5YWdnX3ZpZXcgQVMKK1NFTEVDVCBKU09OX0FSUkFZQUdHKCgnMTExJyB8fCBpKTo6 Ynl0ZWEgRk9STUFUIEpTT04gTlVMTCBPTiBOVUxMIFJFVFVSTklORyB0ZXh0KSBGSUxURVIg KFdIRVJFIGkgPiAzKQorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSw1KSBpOworXHN2IGpzb25f YXJyYXlhZ2dfdmlldworQ1JFQVRFIE9SIFJFUExBQ0UgVklFVyBwdWJsaWMuanNvbl9hcnJh eWFnZ192aWV3IEFTCisgU0VMRUNUIEpTT05fQVJSQVlBR0coKCcxMTEnOjp0ZXh0IHx8IGkp OjpieXRlYSBGT1JNQVQgSlNPTiBOVUxMIE9OIE5VTEwgUkVUVVJOSU5HIHRleHQpIEZJTFRF UiAoV0hFUkUgaSA+IDMpIEFTICJqc29uX2FycmF5YWdnIgorICAgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwgNSkgaShpKQorRFJPUCBWSUVXIGpzb25fYXJyYXlhZ2dfdmlldzsKKy0tIFRl c3QgSlNPTl9BUlJBWShzdWJxdWVyeSkgZGVwYXJzaW5nCitFWFBMQUlOIChWRVJCT1NFLCBD T1NUUyBPRkYpCitTRUxFQ1QgSlNPTl9BUlJBWShTRUxFQ1QgaSBGUk9NIChWQUxVRVMgKDEp LCAoMiksIChOVUxMKSwgKDQpKSBmb28oaSkgUkVUVVJOSU5HIGpzb25iKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0CisgICBPdXRwdXQ6ICQwCisgICBJ bml0UGxhbiAxIChyZXR1cm5zICQwKQorICAgICAtPiAgQWdncmVnYXRlCisgICAgICAgICAg IE91dHB1dDogSlNPTl9BUlJBWUFHRygiKlZBTFVFUyoiLmNvbHVtbjEgUkVUVVJOSU5HIGpz b25iKQorICAgICAgICAgICAtPiAgVmFsdWVzIFNjYW4gb24gIipWQUxVRVMqIgorICAgICAg ICAgICAgICAgICBPdXRwdXQ6ICIqVkFMVUVTKiIuY29sdW1uMQorKDcgcm93cykKKworQ1JF QVRFIFZJRVcganNvbl9hcnJheV9zdWJxdWVyeV92aWV3IEFTCitTRUxFQ1QgSlNPTl9BUlJB WShTRUxFQ1QgaSBGUk9NIChWQUxVRVMgKDEpLCAoMiksIChOVUxMKSwgKDQpKSBmb28oaSkg UkVUVVJOSU5HIGpzb25iKTsKK1xzdiBqc29uX2FycmF5X3N1YnF1ZXJ5X3ZpZXcKK0NSRUFU RSBPUiBSRVBMQUNFIFZJRVcgcHVibGljLmpzb25fYXJyYXlfc3VicXVlcnlfdmlldyBBUwor IFNFTEVDVCAoIFNFTEVDVCBKU09OX0FSUkFZQUdHKHEuYSBSRVRVUk5JTkcganNvbmIpIEFT ICJqc29uX2FycmF5YWdnIgorICAgICAgICAgICBGUk9NICggU0VMRUNUIGZvby5pCisgICAg ICAgICAgICAgICAgICAgRlJPTSAoIFZBTFVFUyAoMSksICgyKSwgKE5VTEw6OmludGVnZXIp LCAoNCkpIGZvbyhpKSkgcShhKSkgQVMgImpzb25fYXJyYXkiCitEUk9QIFZJRVcganNvbl9h cnJheV9zdWJxdWVyeV92aWV3OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJh bGxlbF9zY2hlZHVsZSBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKaW5k ZXggMTVlMDE1YjNkNi4uMzYyNDAzNTYzOSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9wYXJhbGxlbF9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3Nj aGVkdWxlCkBAIC0xMDMsNyArMTAzLDcgQEAgdGVzdDogc2VsZWN0X3ZpZXdzIHBvcnRhbHNf cDIgZm9yZWlnbl9rZXkgY2x1c3RlciBkZXBlbmRlbmN5IGd1YyBiaXRtYXBvcHMgY29tYm8K ICMgLS0tLS0tLS0tLQogIyBBbm90aGVyIGdyb3VwIG9mIHBhcmFsbGVsIHRlc3RzIChKU09O IHJlbGF0ZWQpCiAjIC0tLS0tLS0tLS0KLXRlc3Q6IGpzb24ganNvbmIganNvbl9lbmNvZGlu ZyBqc29ucGF0aCBqc29ucGF0aF9lbmNvZGluZyBqc29uYl9qc29ucGF0aAordGVzdDoganNv biBqc29uYiBqc29uX2VuY29kaW5nIGpzb25wYXRoIGpzb25wYXRoX2VuY29kaW5nIGpzb25i X2pzb25wYXRoIHNxbGpzb24KIAogIyAtLS0tLS0tLS0tCiAjIEFub3RoZXIgZ3JvdXAgb2Yg cGFyYWxsZWwgdGVzdHMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL29wcl9z YW5pdHkuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvb3ByX3Nhbml0eS5zcWwKaW5kZXgg NTZiNTRiYTk4OC4uZTJkMmM3MGQ3MCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9z cWwvb3ByX3Nhbml0eS5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvb3ByX3Nhbml0 eS5zcWwKQEAgLTg4MCw4ICs4ODAsMTAgQEAgV0hFUkUgYS5hZ2dmbm9pZCA9IHAub2lkIEFO RAogICAgICAgICAgTk9UIGJpbmFyeV9jb2VyY2libGUocC5wcm9hcmd0eXBlc1sxXSwgcHRy LnByb2FyZ3R5cGVzWzJdKSkKICAgICAgT1IgKHAucHJvbmFyZ3MgPiAyIEFORAogICAgICAg ICAgTk9UIGJpbmFyeV9jb2VyY2libGUocC5wcm9hcmd0eXBlc1syXSwgcHRyLnByb2FyZ3R5 cGVzWzNdKSkKLSAgICAgLS0gd2UgY291bGQgY2FycnkgdGhlIGNoZWNrIGZ1cnRoZXIsIGJ1 dCAzIGFyZ3MgaXMgZW5vdWdoIGZvciBub3cKLSAgICAgT1IgKHAucHJvbmFyZ3MgPiAzKQor ICAgICBPUiAocC5wcm9uYXJncyA+IDMgQU5ECisgICAgICAgICBOT1QgYmluYXJ5X2NvZXJj aWJsZShwLnByb2FyZ3R5cGVzWzNdLCBwdHIucHJvYXJndHlwZXNbNF0pKQorICAgICAtLSB3 ZSBjb3VsZCBjYXJyeSB0aGUgY2hlY2sgZnVydGhlciwgYnV0IDQgYXJncyBpcyBlbm91Z2gg Zm9yIG5vdworICAgICBPUiAocC5wcm9uYXJncyA+IDQpCiAgICAgKTsKIAogLS0gQ3Jvc3Mt Y2hlY2sgZmluYWxmbiAoaWYgcHJlc2VudCkgYWdhaW5zdCBpdHMgZW50cnkgaW4gcGdfcHJv Yy4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpzb24uc3FsIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvc3FsanNvbi5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uYWFlZjJkOGFhYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3NxbGpzb24uc3FsCkBAIC0wLDAgKzEsMjgyIEBACistLSBKU09OX09C SkVDVCgpCitTRUxFQ1QgSlNPTl9PQkpFQ1QoKTsKK1NFTEVDVCBKU09OX09CSkVDVChSRVRV Uk5JTkcganNvbik7CitTRUxFQ1QgSlNPTl9PQkpFQ1QoUkVUVVJOSU5HIGpzb24gRk9STUFU IEpTT04pOworU0VMRUNUIEpTT05fT0JKRUNUKFJFVFVSTklORyBqc29uYik7CitTRUxFQ1Qg SlNPTl9PQkpFQ1QoUkVUVVJOSU5HIGpzb25iIEZPUk1BVCBKU09OKTsKK1NFTEVDVCBKU09O X09CSkVDVChSRVRVUk5JTkcgdGV4dCk7CitTRUxFQ1QgSlNPTl9PQkpFQ1QoUkVUVVJOSU5H IHRleHQgRk9STUFUIEpTT04pOworU0VMRUNUIEpTT05fT0JKRUNUKFJFVFVSTklORyB0ZXh0 IEZPUk1BVCBKU09OIEVOQ09ESU5HIFVURjgpOworU0VMRUNUIEpTT05fT0JKRUNUKFJFVFVS TklORyB0ZXh0IEZPUk1BVCBKU09OIEVOQ09ESU5HIElOVkFMSURfRU5DT0RJTkcpOworU0VM RUNUIEpTT05fT0JKRUNUKFJFVFVSTklORyBieXRlYSk7CitTRUxFQ1QgSlNPTl9PQkpFQ1Qo UkVUVVJOSU5HIGJ5dGVhIEZPUk1BVCBKU09OKTsKK1NFTEVDVCBKU09OX09CSkVDVChSRVRV Uk5JTkcgYnl0ZWEgRk9STUFUIEpTT04gRU5DT0RJTkcgVVRGOCk7CitTRUxFQ1QgSlNPTl9P QkpFQ1QoUkVUVVJOSU5HIGJ5dGVhIEZPUk1BVCBKU09OIEVOQ09ESU5HIFVURjE2KTsKK1NF TEVDVCBKU09OX09CSkVDVChSRVRVUk5JTkcgYnl0ZWEgRk9STUFUIEpTT04gRU5DT0RJTkcg VVRGMzIpOworCitTRUxFQ1QgSlNPTl9PQkpFQ1QoJ2Zvbyc6IE5VTEw6OmludCBGT1JNQVQg SlNPTik7CitTRUxFQ1QgSlNPTl9PQkpFQ1QoJ2Zvbyc6IE5VTEw6OmludCBGT1JNQVQgSlNP TiBFTkNPRElORyBVVEY4KTsKK1NFTEVDVCBKU09OX09CSkVDVCgnZm9vJzogTlVMTDo6anNv biBGT1JNQVQgSlNPTik7CitTRUxFQ1QgSlNPTl9PQkpFQ1QoJ2Zvbyc6IE5VTEw6Ompzb24g Rk9STUFUIEpTT04gRU5DT0RJTkcgVVRGOCk7CitTRUxFQ1QgSlNPTl9PQkpFQ1QoJ2Zvbyc6 IE5VTEw6Ompzb25iIEZPUk1BVCBKU09OKTsKK1NFTEVDVCBKU09OX09CSkVDVCgnZm9vJzog TlVMTDo6anNvbmIgRk9STUFUIEpTT04gRU5DT0RJTkcgVVRGOCk7CisKK1NFTEVDVCBKU09O X09CSkVDVChOVUxMOiAxKTsKK1NFTEVDVCBKU09OX09CSkVDVCgnYSc6IDIgKyAzKTsKK1NF TEVDVCBKU09OX09CSkVDVCgnYScgVkFMVUUgMiArIDMpOworLS1TRUxFQ1QgSlNPTl9PQkpF Q1QoS0VZICdhJyBWQUxVRSAyICsgMyk7CitTRUxFQ1QgSlNPTl9PQkpFQ1QoJ2EnIHx8IDI6 IDEpOworU0VMRUNUIEpTT05fT0JKRUNUKCgnYScgfHwgMikgVkFMVUUgMSk7CistLVNFTEVD VCBKU09OX09CSkVDVCgnYScgfHwgMiBWQUxVRSAxKTsKKy0tU0VMRUNUIEpTT05fT0JKRUNU KEtFWSAnYScgfHwgMiBWQUxVRSAxKTsKK1NFTEVDVCBKU09OX09CSkVDVCgnYSc6IDI6OnRl eHQpOworU0VMRUNUIEpTT05fT0JKRUNUKCdhJyBWQUxVRSAyOjp0ZXh0KTsKKy0tU0VMRUNU IEpTT05fT0JKRUNUKEtFWSAnYScgVkFMVUUgMjo6dGV4dCk7CitTRUxFQ1QgSlNPTl9PQkpF Q1QoMTo6dGV4dDogMik7CitTRUxFQ1QgSlNPTl9PQkpFQ1QoKDE6OnRleHQpIFZBTFVFIDIp OworLS1TRUxFQ1QgSlNPTl9PQkpFQ1QoMTo6dGV4dCBWQUxVRSAyKTsKKy0tU0VMRUNUIEpT T05fT0JKRUNUKEtFWSAxOjp0ZXh0IFZBTFVFIDIpOworU0VMRUNUIEpTT05fT0JKRUNUKGpz b24gJ1sxXSc6IDEyMyk7CitTRUxFQ1QgSlNPTl9PQkpFQ1QoQVJSQVlbMSwyLDNdOiAnYWFh Jyk7CisKK1NFTEVDVCBKU09OX09CSkVDVCgKKwknYSc6ICcxMjMnLAorCTEuMjM6IDEyMywK KwknYyc6IGpzb24gJ1sgMSx0cnVlLHsgfSBdJywKKwknZCc6IGpzb25iICd7ICJ4IiA6IDEy My40NSB9JworKTsKKworU0VMRUNUIEpTT05fT0JKRUNUKAorCSdhJzogJzEyMycsCisJMS4y MzogMTIzLAorCSdjJzoganNvbiAnWyAxLHRydWUseyB9IF0nLAorCSdkJzoganNvbmIgJ3sg IngiIDogMTIzLjQ1IH0nCisJUkVUVVJOSU5HIGpzb25iCispOworCisvKgorU0VMRUNUIEpT T05fT0JKRUNUKAorCSdhJzogJzEyMycsCisJS0VZIDEuMjMgVkFMVUUgMTIzLAorCSdjJyBW QUxVRSBqc29uICdbMSwgdHJ1ZSwge31dJworKTsKKyovCisKK1NFTEVDVCBKU09OX09CSkVD VCgnYSc6ICcxMjMnLCAnYic6IEpTT05fT0JKRUNUKCdhJzogMTExLCAnYic6ICdhYWEnKSk7 CitTRUxFQ1QgSlNPTl9PQkpFQ1QoJ2EnOiAnMTIzJywgJ2InOiBKU09OX09CSkVDVCgnYSc6 IDExMSwgJ2InOiAnYWFhJyBSRVRVUk5JTkcganNvbmIpKTsKKworU0VMRUNUIEpTT05fT0JK RUNUKCdhJzogSlNPTl9PQkpFQ1QoJ2InOiAxIFJFVFVSTklORyB0ZXh0KSk7CitTRUxFQ1Qg SlNPTl9PQkpFQ1QoJ2EnOiBKU09OX09CSkVDVCgnYic6IDEgUkVUVVJOSU5HIHRleHQpIEZP Uk1BVCBKU09OKTsKK1NFTEVDVCBKU09OX09CSkVDVCgnYSc6IEpTT05fT0JKRUNUKCdiJzog MSBSRVRVUk5JTkcgYnl0ZWEpKTsKK1NFTEVDVCBKU09OX09CSkVDVCgnYSc6IEpTT05fT0JK RUNUKCdiJzogMSBSRVRVUk5JTkcgYnl0ZWEpIEZPUk1BVCBKU09OKTsKKworU0VMRUNUIEpT T05fT0JKRUNUKCdhJzogJzEnLCAnYic6IE5VTEwsICdjJzogMik7CitTRUxFQ1QgSlNPTl9P QkpFQ1QoJ2EnOiAnMScsICdiJzogTlVMTCwgJ2MnOiAyIE5VTEwgT04gTlVMTCk7CitTRUxF Q1QgSlNPTl9PQkpFQ1QoJ2EnOiAnMScsICdiJzogTlVMTCwgJ2MnOiAyIEFCU0VOVCBPTiBO VUxMKTsKKworU0VMRUNUIEpTT05fT0JKRUNUKDE6IDEsICcxJzogTlVMTCBXSVRIIFVOSVFV RSk7CitTRUxFQ1QgSlNPTl9PQkpFQ1QoMTogMSwgJzEnOiBOVUxMIEFCU0VOVCBPTiBOVUxM IFdJVEggVU5JUVVFKTsKK1NFTEVDVCBKU09OX09CSkVDVCgxOiAxLCAnMSc6IE5VTEwgTlVM TCBPTiBOVUxMIFdJVEggVU5JUVVFIFJFVFVSTklORyBqc29uYik7CitTRUxFQ1QgSlNPTl9P QkpFQ1QoMTogMSwgJzEnOiBOVUxMIEFCU0VOVCBPTiBOVUxMIFdJVEggVU5JUVVFIFJFVFVS TklORyBqc29uYik7CisKK1NFTEVDVCBKU09OX09CSkVDVCgxOiAxLCAnMic6IE5VTEwsICcx JzogMSBOVUxMIE9OIE5VTEwgV0lUSCBVTklRVUUpOworU0VMRUNUIEpTT05fT0JKRUNUKDE6 IDEsICcyJzogTlVMTCwgJzEnOiAxIEFCU0VOVCBPTiBOVUxMIFdJVEggVU5JUVVFKTsKK1NF TEVDVCBKU09OX09CSkVDVCgxOiAxLCAnMic6IE5VTEwsICcxJzogMSBBQlNFTlQgT04gTlVM TCBXSVRIT1VUIFVOSVFVRSk7CitTRUxFQ1QgSlNPTl9PQkpFQ1QoMTogMSwgJzInOiBOVUxM LCAnMSc6IDEgQUJTRU5UIE9OIE5VTEwgV0lUSCBVTklRVUUgUkVUVVJOSU5HIGpzb25iKTsK K1NFTEVDVCBKU09OX09CSkVDVCgxOiAxLCAnMic6IE5VTEwsICcxJzogMSBBQlNFTlQgT04g TlVMTCBXSVRIT1VUIFVOSVFVRSBSRVRVUk5JTkcganNvbmIpOworU0VMRUNUIEpTT05fT0JK RUNUKDE6IDEsICcyJzogTlVMTCwgJzMnOiAxLCA0OiBOVUxMLCAnNSc6ICdhJyBBQlNFTlQg T04gTlVMTCBXSVRIIFVOSVFVRSBSRVRVUk5JTkcganNvbmIpOworCisKKy0tIEpTT05fQVJS QVkoKQorU0VMRUNUIEpTT05fQVJSQVkoKTsKK1NFTEVDVCBKU09OX0FSUkFZKFJFVFVSTklO RyBqc29uKTsKK1NFTEVDVCBKU09OX0FSUkFZKFJFVFVSTklORyBqc29uIEZPUk1BVCBKU09O KTsKK1NFTEVDVCBKU09OX0FSUkFZKFJFVFVSTklORyBqc29uYik7CitTRUxFQ1QgSlNPTl9B UlJBWShSRVRVUk5JTkcganNvbmIgRk9STUFUIEpTT04pOworU0VMRUNUIEpTT05fQVJSQVko UkVUVVJOSU5HIHRleHQpOworU0VMRUNUIEpTT05fQVJSQVkoUkVUVVJOSU5HIHRleHQgRk9S TUFUIEpTT04pOworU0VMRUNUIEpTT05fQVJSQVkoUkVUVVJOSU5HIHRleHQgRk9STUFUIEpT T04gRU5DT0RJTkcgVVRGOCk7CitTRUxFQ1QgSlNPTl9BUlJBWShSRVRVUk5JTkcgdGV4dCBG T1JNQVQgSlNPTiBFTkNPRElORyBJTlZBTElEX0VOQ09ESU5HKTsKK1NFTEVDVCBKU09OX0FS UkFZKFJFVFVSTklORyBieXRlYSk7CitTRUxFQ1QgSlNPTl9BUlJBWShSRVRVUk5JTkcgYnl0 ZWEgRk9STUFUIEpTT04pOworU0VMRUNUIEpTT05fQVJSQVkoUkVUVVJOSU5HIGJ5dGVhIEZP Uk1BVCBKU09OIEVOQ09ESU5HIFVURjgpOworU0VMRUNUIEpTT05fQVJSQVkoUkVUVVJOSU5H IGJ5dGVhIEZPUk1BVCBKU09OIEVOQ09ESU5HIFVURjE2KTsKK1NFTEVDVCBKU09OX0FSUkFZ KFJFVFVSTklORyBieXRlYSBGT1JNQVQgSlNPTiBFTkNPRElORyBVVEYzMik7CisKK1NFTEVD VCBKU09OX0FSUkFZKCdhYWEnLCAxMTEsIHRydWUsIGFycmF5WzEsMiwzXSwgTlVMTCwganNv biAneyJhIjogWzFdfScsIGpzb25iICdbImEiLDNdJyk7CisKK1NFTEVDVCBKU09OX0FSUkFZ KCdhJywgIE5VTEwsICdiJyBOVUxMICAgT04gTlVMTCk7CitTRUxFQ1QgSlNPTl9BUlJBWSgn YScsICBOVUxMLCAnYicgQUJTRU5UIE9OIE5VTEwpOworU0VMRUNUIEpTT05fQVJSQVkoTlVM TCwgTlVMTCwgJ2InIEFCU0VOVCBPTiBOVUxMKTsKK1NFTEVDVCBKU09OX0FSUkFZKCdhJywg IE5VTEwsICdiJyBOVUxMICAgT04gTlVMTCBSRVRVUk5JTkcganNvbmIpOworU0VMRUNUIEpT T05fQVJSQVkoJ2EnLCAgTlVMTCwgJ2InIEFCU0VOVCBPTiBOVUxMIFJFVFVSTklORyBqc29u Yik7CitTRUxFQ1QgSlNPTl9BUlJBWShOVUxMLCBOVUxMLCAnYicgQUJTRU5UIE9OIE5VTEwg UkVUVVJOSU5HIGpzb25iKTsKKworU0VMRUNUIEpTT05fQVJSQVkoSlNPTl9BUlJBWSgneyAi YSIgOiAxMjMgfScgUkVUVVJOSU5HIHRleHQpKTsKK1NFTEVDVCBKU09OX0FSUkFZKEpTT05f QVJSQVkoJ3sgImEiIDogMTIzIH0nIEZPUk1BVCBKU09OIFJFVFVSTklORyB0ZXh0KSk7CitT RUxFQ1QgSlNPTl9BUlJBWShKU09OX0FSUkFZKCd7ICJhIiA6IDEyMyB9JyBGT1JNQVQgSlNP TiBSRVRVUk5JTkcgdGV4dCkgRk9STUFUIEpTT04pOworCitTRUxFQ1QgSlNPTl9BUlJBWShT RUxFQ1QgaSBGUk9NIChWQUxVRVMgKDEpLCAoMiksIChOVUxMKSwgKDQpKSBmb28oaSkpOwor U0VMRUNUIEpTT05fQVJSQVkoU0VMRUNUIGkgRlJPTSAoVkFMVUVTIChOVUxMOjppbnRbXSks ICgnezEsMn0nKSwgKE5VTEwpLCAoTlVMTCksICgnezMsNH0nKSwgKE5VTEwpKSBmb28oaSkp OworU0VMRUNUIEpTT05fQVJSQVkoU0VMRUNUIGkgRlJPTSAoVkFMVUVTIChOVUxMOjppbnRb XSksICgnezEsMn0nKSwgKE5VTEwpLCAoTlVMTCksICgnezMsNH0nKSwgKE5VTEwpKSBmb28o aSkgUkVUVVJOSU5HIGpzb25iKTsKKy0tU0VMRUNUIEpTT05fQVJSQVkoU0VMRUNUIGkgRlJP TSAoVkFMVUVTIChOVUxMOjppbnRbXSksICgnezEsMn0nKSwgKE5VTEwpLCAoTlVMTCksICgn ezMsNH0nKSwgKE5VTEwpKSBmb28oaSkgTlVMTCBPTiBOVUxMKTsKKy0tU0VMRUNUIEpTT05f QVJSQVkoU0VMRUNUIGkgRlJPTSAoVkFMVUVTIChOVUxMOjppbnRbXSksICgnezEsMn0nKSwg KE5VTEwpLCAoTlVMTCksICgnezMsNH0nKSwgKE5VTEwpKSBmb28oaSkgTlVMTCBPTiBOVUxM IFJFVFVSTklORyBqc29uYik7CitTRUxFQ1QgSlNPTl9BUlJBWShTRUxFQ1QgaSBGUk9NIChW QUxVRVMgKDMpLCAoMSksIChOVUxMKSwgKDIpKSBmb28oaSkgT1JERVIgQlkgaSk7CistLSBT aG91bGQgZmFpbAorU0VMRUNUIEpTT05fQVJSQVkoU0VMRUNUIEZST00gKFZBTFVFUyAoMSkp IGZvbyhpKSk7CitTRUxFQ1QgSlNPTl9BUlJBWShTRUxFQ1QgaSwgaSBGUk9NIChWQUxVRVMg KDEpKSBmb28oaSkpOworU0VMRUNUIEpTT05fQVJSQVkoU0VMRUNUICogRlJPTSAoVkFMVUVT ICgxLCAyKSkgZm9vKGksIGopKTsKKworLS0gSlNPTl9BUlJBWUFHRygpCitTRUxFQ1QJSlNP Tl9BUlJBWUFHRyhpKSBJUyBOVUxMLAorCQlKU09OX0FSUkFZQUdHKGkgUkVUVVJOSU5HIGpz b25iKSBJUyBOVUxMCitGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAwKSBpOworCitTRUxFQ1QJ SlNPTl9BUlJBWUFHRyhpKSwKKwkJSlNPTl9BUlJBWUFHRyhpIFJFVFVSTklORyBqc29uYikK K0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUpIGk7CisKK1NFTEVDVCBKU09OX0FSUkFZQUdH KGkgT1JERVIgQlkgaSBERVNDKQorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNSkgaTsKKwor U0VMRUNUIEpTT05fQVJSQVlBR0coaTo6dGV4dDo6anNvbikKK0ZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsIDUpIGk7CisKK1NFTEVDVCBKU09OX0FSUkFZQUdHKEpTT05fQVJSQVkoaSwgaSAr IDEgUkVUVVJOSU5HIHRleHQpIEZPUk1BVCBKU09OKQorRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MSwgNSkgaTsKKworU0VMRUNUCUpTT05fQVJSQVlBR0coTlVMTCksCisJCUpTT05fQVJSQVlB R0coTlVMTCBSRVRVUk5JTkcganNvbmIpCitGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA1KTsK KworU0VMRUNUCUpTT05fQVJSQVlBR0coTlVMTCBOVUxMIE9OIE5VTEwpLAorCQlKU09OX0FS UkFZQUdHKE5VTEwgTlVMTCBPTiBOVUxMIFJFVFVSTklORyBqc29uYikKK0ZST00gZ2VuZXJh dGVfc2VyaWVzKDEsIDUpOworCitTRUxFQ1QKKwlKU09OX0FSUkFZQUdHKGJhciksCisJSlNP Tl9BUlJBWUFHRyhiYXIgUkVUVVJOSU5HIGpzb25iKSwKKwlKU09OX0FSUkFZQUdHKGJhciBB QlNFTlQgT04gTlVMTCksCisJSlNPTl9BUlJBWUFHRyhiYXIgQUJTRU5UIE9OIE5VTEwgUkVU VVJOSU5HIGpzb25iKSwKKwlKU09OX0FSUkFZQUdHKGJhciBOVUxMIE9OIE5VTEwpLAorCUpT T05fQVJSQVlBR0coYmFyIE5VTEwgT04gTlVMTCBSRVRVUk5JTkcganNvbmIpLAorCUpTT05f QVJSQVlBR0coZm9vKSwKKwlKU09OX0FSUkFZQUdHKGZvbyBSRVRVUk5JTkcganNvbmIpLAor CUpTT05fQVJSQVlBR0coZm9vIE9SREVSIEJZIGJhcikgRklMVEVSIChXSEVSRSBiYXIgPiAy KSwKKwlKU09OX0FSUkFZQUdHKGZvbyBPUkRFUiBCWSBiYXIgUkVUVVJOSU5HIGpzb25iKSBG SUxURVIgKFdIRVJFIGJhciA+IDIpCitGUk9NCisJKFZBTFVFUyAoTlVMTCksICgzKSwgKDEp LCAoTlVMTCksIChOVUxMKSwgKDUpLCAoMiksICg0KSwgKE5VTEwpKSBmb28oYmFyKTsKKwor U0VMRUNUCisJYmFyLCBKU09OX0FSUkFZQUdHKGJhcikgRklMVEVSIChXSEVSRSBiYXIgPiAy KSBPVkVSIChQQVJUSVRJT04gQlkgZm9vLmJhciAlIDIpCitGUk9NCisJKFZBTFVFUyAoTlVM TCksICgzKSwgKDEpLCAoTlVMTCksIChOVUxMKSwgKDUpLCAoMiksICg0KSwgKE5VTEwpLCAo NSksICg0KSkgZm9vKGJhcik7CisKKy0tIEpTT05fT0JKRUNUQUdHKCkKK1NFTEVDVAlKU09O X09CSkVDVEFHRygna2V5JzogMSkgSVMgTlVMTCwKKwkJSlNPTl9PQkpFQ1RBR0coJ2tleSc6 IDEgUkVUVVJOSU5HIGpzb25iKSBJUyBOVUxMCitXSEVSRSBGQUxTRTsKKworU0VMRUNUIEpT T05fT0JKRUNUQUdHKE5VTEw6IDEpOworCitTRUxFQ1QgSlNPTl9PQkpFQ1RBR0coTlVMTDog MSBSRVRVUk5JTkcganNvbmIpOworCitTRUxFQ1QKKwlKU09OX09CSkVDVEFHRyhpOiBpKSwK Ky0tCUpTT05fT0JKRUNUQUdHKGkgVkFMVUUgaSksCistLQlKU09OX09CSkVDVEFHRyhLRVkg aSBWQUxVRSBpKSwKKwlKU09OX09CSkVDVEFHRyhpOiBpIFJFVFVSTklORyBqc29uYikKK0ZS T00KKwlnZW5lcmF0ZV9zZXJpZXMoMSwgNSkgaTsKKworU0VMRUNUCisJSlNPTl9PQkpFQ1RB R0coazogdiksCisJSlNPTl9PQkpFQ1RBR0coazogdiBOVUxMIE9OIE5VTEwpLAorCUpTT05f T0JKRUNUQUdHKGs6IHYgQUJTRU5UIE9OIE5VTEwpLAorCUpTT05fT0JKRUNUQUdHKGs6IHYg UkVUVVJOSU5HIGpzb25iKSwKKwlKU09OX09CSkVDVEFHRyhrOiB2IE5VTEwgT04gTlVMTCBS RVRVUk5JTkcganNvbmIpLAorCUpTT05fT0JKRUNUQUdHKGs6IHYgQUJTRU5UIE9OIE5VTEwg UkVUVVJOSU5HIGpzb25iKQorRlJPTQorCShWQUxVRVMgKDEsIDEpLCAoMSwgTlVMTCksICgy LCBOVUxMKSwgKDMsIDMpKSBmb28oaywgdik7CisKK1NFTEVDVCBKU09OX09CSkVDVEFHRyhr OiB2IFdJVEggVU5JUVVFIEtFWVMpCitGUk9NIChWQUxVRVMgKDEsIDEpLCAoMSwgTlVMTCks ICgyLCAyKSkgZm9vKGssIHYpOworCitTRUxFQ1QgSlNPTl9PQkpFQ1RBR0coazogdiBBQlNF TlQgT04gTlVMTCBXSVRIIFVOSVFVRSBLRVlTKQorRlJPTSAoVkFMVUVTICgxLCAxKSwgKDEs IE5VTEwpLCAoMiwgMikpIGZvbyhrLCB2KTsKKworU0VMRUNUIEpTT05fT0JKRUNUQUdHKGs6 IHYgQUJTRU5UIE9OIE5VTEwgV0lUSCBVTklRVUUgS0VZUykKK0ZST00gKFZBTFVFUyAoMSwg MSksICgwLCBOVUxMKSwgKDMsIE5VTEwpLCAoMiwgMiksICg0LCBOVUxMKSkgZm9vKGssIHYp OworCitTRUxFQ1QgSlNPTl9PQkpFQ1RBR0coazogdiBXSVRIIFVOSVFVRSBLRVlTIFJFVFVS TklORyBqc29uYikKK0ZST00gKFZBTFVFUyAoMSwgMSksICgxLCBOVUxMKSwgKDIsIDIpKSBm b28oaywgdik7CisKK1NFTEVDVCBKU09OX09CSkVDVEFHRyhrOiB2IEFCU0VOVCBPTiBOVUxM IFdJVEggVU5JUVVFIEtFWVMgUkVUVVJOSU5HIGpzb25iKQorRlJPTSAoVkFMVUVTICgxLCAx KSwgKDEsIE5VTEwpLCAoMiwgMikpIGZvbyhrLCB2KTsKKworLS0gVGVzdCBKU09OX09CSkVD VCBkZXBhcnNpbmcKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCBKU09O X09CSkVDVCgnZm9vJyA6ICcxJyBGT1JNQVQgSlNPTiwgJ2JhcicgOiAnYmF6JyBSRVRVUk5J TkcganNvbik7CisKK0NSRUFURSBWSUVXIGpzb25fb2JqZWN0X3ZpZXcgQVMKK1NFTEVDVCBK U09OX09CSkVDVCgnZm9vJyA6ICcxJyBGT1JNQVQgSlNPTiwgJ2JhcicgOiAnYmF6JyBSRVRV Uk5JTkcganNvbik7CisKK1xzdiBqc29uX29iamVjdF92aWV3CisKK0RST1AgVklFVyBqc29u X29iamVjdF92aWV3OworCistLSBUZXN0IEpTT05fQVJSQVkgZGVwYXJzaW5nCitFWFBMQUlO IChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgSlNPTl9BUlJBWSgnMScgRk9STUFUIEpT T04sIDIgUkVUVVJOSU5HIGpzb24pOworCitDUkVBVEUgVklFVyBqc29uX2FycmF5X3ZpZXcg QVMKK1NFTEVDVCBKU09OX0FSUkFZKCcxJyBGT1JNQVQgSlNPTiwgMiBSRVRVUk5JTkcganNv bik7CisKK1xzdiBqc29uX2FycmF5X3ZpZXcKKworRFJPUCBWSUVXIGpzb25fYXJyYXlfdmll dzsKKworLS0gVGVzdCBKU09OX09CSkVDVEFHRyBkZXBhcnNpbmcKK0VYUExBSU4gKFZFUkJP U0UsIENPU1RTIE9GRikKK1NFTEVDVCBKU09OX09CSkVDVEFHRyhpOiAoJzExMScgfHwgaSk6 OmJ5dGVhIEZPUk1BVCBKU09OIFdJVEggVU5JUVVFIFJFVFVSTklORyB0ZXh0KSBGSUxURVIg KFdIRVJFIGkgPiAzKQorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSw1KSBpOworCitFWFBMQUlO IChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgSlNPTl9PQkpFQ1RBR0coaTogKCcxMTEn IHx8IGkpOjpieXRlYSBGT1JNQVQgSlNPTiBXSVRIIFVOSVFVRSBSRVRVUk5JTkcgdGV4dCkg T1ZFUiAoUEFSVElUSU9OIEJZIGkgJSAyKQorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSw1KSBp OworCitDUkVBVEUgVklFVyBqc29uX29iamVjdGFnZ192aWV3IEFTCitTRUxFQ1QgSlNPTl9P QkpFQ1RBR0coaTogKCcxMTEnIHx8IGkpOjpieXRlYSBGT1JNQVQgSlNPTiBXSVRIIFVOSVFV RSBSRVRVUk5JTkcgdGV4dCkgRklMVEVSIChXSEVSRSBpID4gMykKK0ZST00gZ2VuZXJhdGVf c2VyaWVzKDEsNSkgaTsKKworXHN2IGpzb25fb2JqZWN0YWdnX3ZpZXcKKworRFJPUCBWSUVX IGpzb25fb2JqZWN0YWdnX3ZpZXc7CisKKy0tIFRlc3QgSlNPTl9BUlJBWUFHRyBkZXBhcnNp bmcKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCBKU09OX0FSUkFZQUdH KCgnMTExJyB8fCBpKTo6Ynl0ZWEgRk9STUFUIEpTT04gTlVMTCBPTiBOVUxMIFJFVFVSTklO RyB0ZXh0KSBGSUxURVIgKFdIRVJFIGkgPiAzKQorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSw1 KSBpOworCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgSlNPTl9BUlJB WUFHRygoJzExMScgfHwgaSk6OmJ5dGVhIEZPUk1BVCBKU09OIE5VTEwgT04gTlVMTCBSRVRV Uk5JTkcgdGV4dCkgT1ZFUiAoUEFSVElUSU9OIEJZIGkgJSAyKQorRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSw1KSBpOworCitDUkVBVEUgVklFVyBqc29uX2FycmF5YWdnX3ZpZXcgQVMKK1NF TEVDVCBKU09OX0FSUkFZQUdHKCgnMTExJyB8fCBpKTo6Ynl0ZWEgRk9STUFUIEpTT04gTlVM TCBPTiBOVUxMIFJFVFVSTklORyB0ZXh0KSBGSUxURVIgKFdIRVJFIGkgPiAzKQorRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSw1KSBpOworCitcc3YganNvbl9hcnJheWFnZ192aWV3CisKK0RS T1AgVklFVyBqc29uX2FycmF5YWdnX3ZpZXc7CisKKy0tIFRlc3QgSlNPTl9BUlJBWShzdWJx dWVyeSkgZGVwYXJzaW5nCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1Qg SlNPTl9BUlJBWShTRUxFQ1QgaSBGUk9NIChWQUxVRVMgKDEpLCAoMiksIChOVUxMKSwgKDQp KSBmb28oaSkgUkVUVVJOSU5HIGpzb25iKTsKKworQ1JFQVRFIFZJRVcganNvbl9hcnJheV9z dWJxdWVyeV92aWV3IEFTCitTRUxFQ1QgSlNPTl9BUlJBWShTRUxFQ1QgaSBGUk9NIChWQUxV RVMgKDEpLCAoMiksIChOVUxMKSwgKDQpKSBmb28oaSkgUkVUVVJOSU5HIGpzb25iKTsKKwor XHN2IGpzb25fYXJyYXlfc3VicXVlcnlfdmlldworCitEUk9QIFZJRVcganNvbl9hcnJheV9z dWJxdWVyeV92aWV3OwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCAwOTdmNDJl MWIzLi5lODIwYjE3Y2FhIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTI0 Niw2ICsxMjQ2LDcgQEAgSnNvbkJlaGF2aW9yVHlwZQogSnNvbkNvZXJjaW9uCiBKc29uQ29t bW9uCiBKc29uQ29uc3RydWN0b3JFeHByCitKc29uQ29uc3RydWN0b3JFeHByU3RhdGUKIEpz b25Db25zdHJ1Y3RvclR5cGUKIEpzb25FbmNvZGluZwogSnNvbkV4cHIKLS0gCjIuMzQuMQoK --------------MwgLFi9fcx5tDY0Wnjp80Eno Content-Type: text/x-patch; charset=UTF-8; name="v10-0002-reduce-number-of-new-grammar-non-terminal-symbols.patch" Content-Disposition: attachment; filename*0="v10-0002-reduce-number-of-new-grammar-non-terminal-symbols.p"; filename*1="atch" Content-Transfer-Encoding: base64 RnJvbSBhMDJlM2M5NDEyZDAwZGE3ZDBlM2JhOGNlODIxYTYzNGJmMTY2MDkzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5l Lm5ldD4KRGF0ZTogVGh1LCAxNiBNYXIgMjAyMyAxNzozNTo0NiAtMDQwMApTdWJqZWN0OiBb UEFUQ0ggMi85XSByZWR1Y2UgbnVtYmVyIG9mIG5ldyBncmFtbWFyIG5vbi10ZXJtaW5hbCBz eW1ib2xzCgotLS0KIHNyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgfCAxNzEgKysrKysrKysr KysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA2MyBpbnNl cnRpb25zKCspLCAxMDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5kZXggY2Y3NjFi NGNkMC4uZWI0MTVkZjZhNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0u eQorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CkBAIC02NDgsMjUgKzY0OCwxNiBA QCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwg TGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCQkJCQlqc29uX3JlcHJlc2VudGF0aW9u CiAJCQkJCWpzb25fdmFsdWVfZXhwcgogCQkJCQlqc29uX291dHB1dF9jbGF1c2Vfb3B0Ci0J CQkJCWpzb25fZnVuY19leHByCi0JCQkJCWpzb25fdmFsdWVfY29uc3RydWN0b3IKLQkJCQkJ anNvbl9vYmplY3RfY29uc3RydWN0b3IKLQkJCQkJanNvbl9vYmplY3RfY29uc3RydWN0b3Jf YXJncwogCQkJCQlqc29uX29iamVjdF9jb25zdHJ1Y3Rvcl9hcmdzX29wdAogCQkJCQlqc29u X29iamVjdF9hcmdzCi0JCQkJCWpzb25fb2JqZWN0X2Z1bmNfYXJncwotCQkJCQlqc29uX2Fy cmF5X2NvbnN0cnVjdG9yCiAJCQkJCWpzb25fbmFtZV9hbmRfdmFsdWUKIAkJCQkJanNvbl9h Z2dyZWdhdGVfZnVuYwotCQkJCQlqc29uX29iamVjdF9hZ2dyZWdhdGVfY29uc3RydWN0b3IK LQkJCQkJanNvbl9hcnJheV9hZ2dyZWdhdGVfY29uc3RydWN0b3IKIAogJXR5cGUgPGxpc3Q+ CQlqc29uX25hbWVfYW5kX3ZhbHVlX2xpc3QKIAkJCQkJanNvbl92YWx1ZV9leHByX2xpc3QK IAkJCQkJanNvbl9hcnJheV9hZ2dyZWdhdGVfb3JkZXJfYnlfY2xhdXNlX29wdAogCi0ldHlw ZSA8aXZhbD4JCWpzb25fZW5jb2RpbmcKLQkJCQkJanNvbl9lbmNvZGluZ19jbGF1c2Vfb3B0 CisldHlwZSA8aXZhbD4JCWpzb25fZW5jb2RpbmdfY2xhdXNlX29wdAogCiAldHlwZSA8Ym9v bGVhbj4JCWpzb25fa2V5X3VuaXF1ZW5lc3NfY29uc3RyYWludF9vcHQKIAkJCQkJanNvbl9v YmplY3RfY29uc3RydWN0b3JfbnVsbF9jbGF1c2Vfb3B0CkBAIC0xNDk0OSwxNyArMTQ5NDAs MTUgQEAgYl9leHByOgkJY19leHByCiAJCQkJfQogCQk7CiAKKy8qIEtFWVMgaXMgYSBub2lz ZSB3b3JkIGhlcmUgKi8KIGpzb25fa2V5X3VuaXF1ZW5lc3NfY29uc3RyYWludF9vcHQ6Ci0J CQlXSVRIX0xBX1VOSVFVRSB1bmlxdWVfa2V5cwkJCQl7ICQkID0gdHJ1ZTsgfQotCQkJfCBX SVRIT1VUIHVuaXF1ZV9rZXlzCQkJCQl7ICQkID0gZmFsc2U7IH0KKwkJCVdJVEhfTEFfVU5J UVVFIFVOSVFVRSBLRVlTCQkJCXsgJCQgPSB0cnVlOyB9CisJCQl8IFdJVEhfTEFfVU5JUVVF IFVOSVFVRQkJCQkgICAgeyAkJCA9IHRydWU7IH0KKwkJCXwgV0lUSE9VVCBVTklRVUUgS0VZ UwkJCQkJeyAkJCA9IGZhbHNlOyB9CisJCQl8IFdJVEhPVVQgVU5JUVVFCQkJCQkgICAgeyAk JCA9IGZhbHNlOyB9CiAJCQl8IC8qIEVNUFRZICovICVwcmVjIGVtcHR5X2pzb25fdW5pcXVl CXsgJCQgPSBmYWxzZTsgfQogCQk7CiAKLXVuaXF1ZV9rZXlzOgotCQkJVU5JUVVFCi0JCQl8 IFVOSVFVRSBLRVlTCi0JCTsKLQogLyoKICAqIFByb2R1Y3Rpb25zIHRoYXQgY2FuIGJlIHVz ZWQgaW4gYm90aCBhX2V4cHIgYW5kIGJfZXhwci4KICAqCkBAIC0xNTU5OSw4ICsxNTU4OCw1 MyBAQCBmdW5jX2V4cHJfY29tbW9uX3N1YmV4cHI6CiAJCQkJCW4tPmxvY2F0aW9uID0gQDE7 CiAJCQkJCSQkID0gKE5vZGUgKikgbjsKIAkJCQl9Ci0JCQl8IGpzb25fZnVuY19leHByCi0J CQkJeyAkJCA9ICQxOyB9CisJCQl8IEpTT05fT0JKRUNUICcoJyBqc29uX29iamVjdF9hcmdz ICcpJworCQkJCXsKKwkJCQkJJCQgPSAkMzsKKwkJCQl9CisJCQl8IEpTT05fQVJSQVkgJygn CisJCQkJanNvbl92YWx1ZV9leHByX2xpc3QKKwkJCQlqc29uX2FycmF5X2NvbnN0cnVjdG9y X251bGxfY2xhdXNlX29wdAorCQkJCWpzb25fb3V0cHV0X2NsYXVzZV9vcHQKKwkJCScpJwor CQkJCXsKKwkJCQkJSnNvbkFycmF5Q29uc3RydWN0b3IgKm4gPSBtYWtlTm9kZShKc29uQXJy YXlDb25zdHJ1Y3Rvcik7CisKKwkJCQkJbi0+ZXhwcnMgPSAkMzsKKwkJCQkJbi0+YWJzZW50 X29uX251bGwgPSAkNDsKKwkJCQkJbi0+b3V0cHV0ID0gKEpzb25PdXRwdXQgKikgJDU7CisJ CQkJCW4tPmxvY2F0aW9uID0gQDE7CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CisJ CQl8IEpTT05fQVJSQVkgJygnCisJCQkJc2VsZWN0X25vX3BhcmVucworCQkJCS8qIGpzb25f Zm9ybWF0X2NsYXVzZV9vcHQgKi8KKwkJCQkvKiBqc29uX2FycmF5X2NvbnN0cnVjdG9yX251 bGxfY2xhdXNlX29wdCAqLworCQkJCWpzb25fb3V0cHV0X2NsYXVzZV9vcHQKKwkJCScpJwor CQkJCXsKKwkJCQkJSnNvbkFycmF5UXVlcnlDb25zdHJ1Y3RvciAqbiA9IG1ha2VOb2RlKEpz b25BcnJheVF1ZXJ5Q29uc3RydWN0b3IpOworCisJCQkJCW4tPnF1ZXJ5ID0gJDM7CisJCQkJ CW4tPmZvcm1hdCA9IG1ha2VKc29uRm9ybWF0KEpTX0ZPUk1BVF9ERUZBVUxULCBKU19FTkNf REVGQVVMVCwgLTEpOworCQkJCQkvKiBuLT5mb3JtYXQgPSAkNDsgKi8KKwkJCQkJbi0+YWJz ZW50X29uX251bGwgPSB0cnVlIC8qICQ1ICovOworCQkJCQluLT5vdXRwdXQgPSAoSnNvbk91 dHB1dCAqKSAkNDsKKwkJCQkJbi0+bG9jYXRpb24gPSBAMTsKKwkJCQkJJCQgPSAoTm9kZSAq KSBuOworCQkJCX0KKwkJCXwgSlNPTl9BUlJBWSAnKCcKKwkJCQlqc29uX291dHB1dF9jbGF1 c2Vfb3B0CisJCQknKScKKwkJCQl7CisJCQkJCUpzb25BcnJheUNvbnN0cnVjdG9yICpuID0g bWFrZU5vZGUoSnNvbkFycmF5Q29uc3RydWN0b3IpOworCisJCQkJCW4tPmV4cHJzID0gTklM OworCQkJCQluLT5hYnNlbnRfb25fbnVsbCA9IHRydWU7CisJCQkJCW4tPm91dHB1dCA9IChK c29uT3V0cHV0ICopICQzOworCQkJCQluLT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChO b2RlICopIG47CisJCQkJfQogCQk7CiAKIC8qCkBAIC0xNjMyNiwxMCArMTYzNjAsNiBAQCBv cHRfYXN5bW1ldHJpYzogQVNZTU1FVFJJQwogCQk7CiAKIC8qIFNRTC9KU09OIHN1cHBvcnQg Ki8KLWpzb25fZnVuY19leHByOgotCQkJanNvbl92YWx1ZV9jb25zdHJ1Y3RvcgotCQk7Ci0K IGpzb25fdmFsdWVfZXhwcjoKIAkJCWFfZXhwciBqc29uX2Zvcm1hdF9jbGF1c2Vfb3B0CiAJ CQl7CkBAIC0xNjM1NCwxOCArMTYzODQsMTQgQEAganNvbl9yZXByZXNlbnRhdGlvbjoKIAkJ CQl7CiAJCQkJCSQkID0gKE5vZGUgKikgbWFrZUpzb25Gb3JtYXQoSlNfRk9STUFUX0pTT04s ICQyLCBAMSk7CiAJCQkJfQotCQkvKgl8IG90aGVyIGltcGxlbWVudGF0aW9uIGRlZmluZWQg SlNPTiByZXByZXNlbnRhdGlvbiBvcHRpb25zIChCU09OLCBBVlJPIGV0YykgKi8KKwkJLyog d2Ugb25seSBzdXBwb3J0IEpTT04gZm9yIG5vdyAqLwogCQk7CiAKIGpzb25fZW5jb2Rpbmdf Y2xhdXNlX29wdDoKLQkJCUVOQ09ESU5HIGpzb25fZW5jb2RpbmcJCQkJCXsgJCQgPSAkMjsg fQorCQkJRU5DT0RJTkcgbmFtZQkJCQkJeyAkJCA9IG1ha2VKc29uRW5jb2RpbmcoJDIpOyB9 CiAJCQl8IC8qIEVNUFRZICovCQkJCQkJCXsgJCQgPSBKU19FTkNfREVGQVVMVDsgfQogCQk7 CiAKLWpzb25fZW5jb2Rpbmc6Ci0JCQluYW1lCQkJCQkJCQkJeyAkJCA9IG1ha2VKc29uRW5j b2RpbmcoJDEpOyB9Ci0JCTsKLQoganNvbl9vdXRwdXRfY2xhdXNlX29wdDoKIAkJCVJFVFVS TklORyBUeXBlbmFtZSBqc29uX2Zvcm1hdF9jbGF1c2Vfb3B0CiAJCQkJewpAQCAtMTYzNzks MzQgKzE2NDA1LDE2IEBAIGpzb25fb3V0cHV0X2NsYXVzZV9vcHQ6CiAJCQl8IC8qIEVNUFRZ ICovCQkJCQkJCXsgJCQgPSBOVUxMOyB9CiAJCQk7CiAKLWpzb25fdmFsdWVfY29uc3RydWN0 b3I6Ci0JCQlqc29uX29iamVjdF9jb25zdHJ1Y3RvcgotCQkJfCBqc29uX2FycmF5X2NvbnN0 cnVjdG9yCi0JCTsKLQotanNvbl9vYmplY3RfY29uc3RydWN0b3I6Ci0JCQlKU09OX09CSkVD VCAnKCcganNvbl9vYmplY3RfYXJncyAnKScKLQkJCQl7Ci0JCQkJCSQkID0gJDM7Ci0JCQkJ fQogCQk7CiAKIGpzb25fb2JqZWN0X2FyZ3M6Ci0JCQlqc29uX29iamVjdF9jb25zdHJ1Y3Rv cl9hcmdzCi0JCQl8IGpzb25fb2JqZWN0X2Z1bmNfYXJncwotCQk7Ci0KLWpzb25fb2JqZWN0 X2Z1bmNfYXJnczoKIAkJCWZ1bmNfYXJnX2xpc3QKIAkJCQl7CiAJCQkJCUxpc3QgKmZ1bmMg PSBsaXN0X21ha2UxKG1ha2VTdHJpbmcoImpzb25fb2JqZWN0IikpOwogCiAJCQkJCSQkID0g KE5vZGUgKikgbWFrZUZ1bmNDYWxsKGZ1bmMsICQxLCBDT0VSQ0VfRVhQTElDSVRfQ0FMTCwg QDEpOwogCQkJCX0KLQkJOwotCi1qc29uX29iamVjdF9jb25zdHJ1Y3Rvcl9hcmdzOgotCQkJ anNvbl9vYmplY3RfY29uc3RydWN0b3JfYXJnc19vcHQganNvbl9vdXRwdXRfY2xhdXNlX29w dAorCQkJfCBqc29uX29iamVjdF9jb25zdHJ1Y3Rvcl9hcmdzX29wdCBqc29uX291dHB1dF9j bGF1c2Vfb3B0CiAJCQkJewogCQkJCQlKc29uT2JqZWN0Q29uc3RydWN0b3IgKm4gPSAoSnNv bk9iamVjdENvbnN0cnVjdG9yICopICQxOwogCkBAIC0xNjQ1OSw3NSArMTY0NjcsMjUgQEAg anNvbl9uYW1lX2FuZF92YWx1ZToKIAkJCQl7ICQkID0gbWFrZUpzb25LZXlWYWx1ZSgkMSwg JDMpOyB9CiAJCTsKIAorLyogZW1wdHkgbWVhbnMgZmFsc2UgZm9yIG9iamVjdHMsIHRydWUg Zm9yIGFycmF5cyAqLwoganNvbl9vYmplY3RfY29uc3RydWN0b3JfbnVsbF9jbGF1c2Vfb3B0 OgogCQkJTlVMTF9QIE9OIE5VTExfUAkJCQkJeyAkJCA9IGZhbHNlOyB9CiAJCQl8IEFCU0VO VCBPTiBOVUxMX1AJCQkJCXsgJCQgPSB0cnVlOyB9CiAJCQl8IC8qIEVNUFRZICovCQkJCQkJ eyAkJCA9IGZhbHNlOyB9CiAJCTsKIAotanNvbl9hcnJheV9jb25zdHJ1Y3RvcjoKLQkJCUpT T05fQVJSQVkgJygnCi0JCQkJanNvbl92YWx1ZV9leHByX2xpc3QKLQkJCQlqc29uX2FycmF5 X2NvbnN0cnVjdG9yX251bGxfY2xhdXNlX29wdAotCQkJCWpzb25fb3V0cHV0X2NsYXVzZV9v cHQKLQkJCScpJwotCQkJCXsKLQkJCQkJSnNvbkFycmF5Q29uc3RydWN0b3IgKm4gPSBtYWtl Tm9kZShKc29uQXJyYXlDb25zdHJ1Y3Rvcik7Ci0KLQkJCQkJbi0+ZXhwcnMgPSAkMzsKLQkJ CQkJbi0+YWJzZW50X29uX251bGwgPSAkNDsKLQkJCQkJbi0+b3V0cHV0ID0gKEpzb25PdXRw dXQgKikgJDU7Ci0JCQkJCW4tPmxvY2F0aW9uID0gQDE7Ci0JCQkJCSQkID0gKE5vZGUgKikg bjsKLQkJCQl9Ci0JCQl8IEpTT05fQVJSQVkgJygnCi0JCQkJc2VsZWN0X25vX3BhcmVucwot CQkJCS8qIGpzb25fZm9ybWF0X2NsYXVzZV9vcHQgKi8KLQkJCQkvKiBqc29uX2FycmF5X2Nv bnN0cnVjdG9yX251bGxfY2xhdXNlX29wdCAqLwotCQkJCWpzb25fb3V0cHV0X2NsYXVzZV9v cHQKLQkJCScpJwotCQkJCXsKLQkJCQkJSnNvbkFycmF5UXVlcnlDb25zdHJ1Y3RvciAqbiA9 IG1ha2VOb2RlKEpzb25BcnJheVF1ZXJ5Q29uc3RydWN0b3IpOwotCi0JCQkJCW4tPnF1ZXJ5 ID0gJDM7Ci0JCQkJCW4tPmZvcm1hdCA9IG1ha2VKc29uRm9ybWF0KEpTX0ZPUk1BVF9ERUZB VUxULCBKU19FTkNfREVGQVVMVCwgLTEpOwotCQkJCQkvKiBuLT5mb3JtYXQgPSAkNDsgKi8K LQkJCQkJbi0+YWJzZW50X29uX251bGwgPSB0cnVlIC8qICQ1ICovOwotCQkJCQluLT5vdXRw dXQgPSAoSnNvbk91dHB1dCAqKSAkNDsKLQkJCQkJbi0+bG9jYXRpb24gPSBAMTsKLQkJCQkJ JCQgPSAoTm9kZSAqKSBuOwotCQkJCX0KLQkJCXwgSlNPTl9BUlJBWSAnKCcKLQkJCQlqc29u X291dHB1dF9jbGF1c2Vfb3B0Ci0JCQknKScKLQkJCQl7Ci0JCQkJCUpzb25BcnJheUNvbnN0 cnVjdG9yICpuID0gbWFrZU5vZGUoSnNvbkFycmF5Q29uc3RydWN0b3IpOwotCi0JCQkJCW4t PmV4cHJzID0gTklMOwotCQkJCQluLT5hYnNlbnRfb25fbnVsbCA9IHRydWU7Ci0JCQkJCW4t Pm91dHB1dCA9IChKc29uT3V0cHV0ICopICQzOwotCQkJCQluLT5sb2NhdGlvbiA9IEAxOwot CQkJCQkkJCA9IChOb2RlICopIG47Ci0JCQkJfQotCQk7Ci0KLWpzb25fdmFsdWVfZXhwcl9s aXN0OgotCQkJanNvbl92YWx1ZV9leHByCQkJCQkJCQl7ICQkID0gbGlzdF9tYWtlMSgkMSk7 IH0KLQkJCXwganNvbl92YWx1ZV9leHByX2xpc3QgJywnIGpzb25fdmFsdWVfZXhwcgl7ICQk ID0gbGFwcGVuZCgkMSwgJDMpO30KLQkJOwotCiBqc29uX2FycmF5X2NvbnN0cnVjdG9yX251 bGxfY2xhdXNlX29wdDoKIAkJCU5VTExfUCBPTiBOVUxMX1AJCQkJCQl7ICQkID0gZmFsc2U7 IH0KIAkJCXwgQUJTRU5UIE9OIE5VTExfUAkJCQkJCXsgJCQgPSB0cnVlOyB9CiAJCQl8IC8q IEVNUFRZICovCQkJCQkJCXsgJCQgPSB0cnVlOyB9CiAJCTsKIAoranNvbl92YWx1ZV9leHBy X2xpc3Q6CisJCQlqc29uX3ZhbHVlX2V4cHIJCQkJCQkJCXsgJCQgPSBsaXN0X21ha2UxKCQx KTsgfQorCQkJfCBqc29uX3ZhbHVlX2V4cHJfbGlzdCAnLCcganNvbl92YWx1ZV9leHByCXsg JCQgPSBsYXBwZW5kKCQxLCAkMyk7fQorCQk7CisKIGpzb25fYWdncmVnYXRlX2Z1bmM6Ci0J CQlqc29uX29iamVjdF9hZ2dyZWdhdGVfY29uc3RydWN0b3IKLQkJCXwganNvbl9hcnJheV9h Z2dyZWdhdGVfY29uc3RydWN0b3IKLQkJOwotCi1qc29uX29iamVjdF9hZ2dyZWdhdGVfY29u c3RydWN0b3I6CiAJCQlKU09OX09CSkVDVEFHRyAnKCcKIAkJCQlqc29uX25hbWVfYW5kX3Zh bHVlCiAJCQkJanNvbl9vYmplY3RfY29uc3RydWN0b3JfbnVsbF9jbGF1c2Vfb3B0CkBAIC0x NjU0NiwxMCArMTY1MDQsNyBAQCBqc29uX29iamVjdF9hZ2dyZWdhdGVfY29uc3RydWN0b3I6 CiAJCQkJCW4tPmNvbnN0cnVjdG9yLT5sb2NhdGlvbiA9IEAxOwogCQkJCQkkJCA9IChOb2Rl ICopIG47CiAJCQkJfQotCQk7Ci0KLWpzb25fYXJyYXlfYWdncmVnYXRlX2NvbnN0cnVjdG9y OgotCQkJSlNPTl9BUlJBWUFHRyAnKCcKKwkJCXwgSlNPTl9BUlJBWUFHRyAnKCcKIAkJCQlq c29uX3ZhbHVlX2V4cHIKIAkJCQlqc29uX2FycmF5X2FnZ3JlZ2F0ZV9vcmRlcl9ieV9jbGF1 c2Vfb3B0CiAJCQkJanNvbl9hcnJheV9jb25zdHJ1Y3Rvcl9udWxsX2NsYXVzZV9vcHQKLS0g CjIuMzQuMQoK --------------MwgLFi9fcx5tDY0Wnjp80Eno Content-Type: text/x-patch; charset=UTF-8; name="v10-0003-IS-JSON-predicate.patch" Content-Disposition: attachment; filename="v10-0003-IS-JSON-predicate.patch" Content-Transfer-Encoding: base64 RnJvbSA1NzQ1ZTRmM2NjZDY3MWYwZjI3NTkwODc0NDhhNWIzZDg3OWU4NTI0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5l Lm5ldD4KRGF0ZTogVGh1LCAxNiBNYXIgMjAyMyAxNzo1Mzo1MSAtMDQwMApTdWJqZWN0OiBb UEFUQ0ggMy85XSBJUyBKU09OIHByZWRpY2F0ZQoKVGhpcyBwYXRjaCBpbnRyZG9jdWNlcyB0 aGUgU1FMIHN0YW5kYXJkIElTIEpTT04gcHJlZGljYXRlLiBJdCBvcGVyYXRlcwpvbiB0ZXh0 IGFuZCBieXRlYSB2YWx1ZXMgcmVwcmVzZW50aW5nIEpTT04gYXMgd2VsbCBhcyBvbiB0aGUg anNvbiBhbmQKanNvbmIgdHlwZXMuIEVhY2ggdGVzdCBoYXMgYW4gSVMgYW5kIElTIE5PVCB2 YXJpYW50LiBUaGUgdGVzdHMgYXJlOgoKSVMgSlNPTiBbVkFMVUVdCklTIEpTT04gQVJSQVkK SVMgSlNPTiBPQkpFQ1QKSVMgSlNPTiBTQ0FMQVIKSVMgSlNPTiAgV0lUSCB8IFdJVEhPVVQg VU5JUVVFIEtFWVMKClRoZXNlIGFyZSBtb3N0bHkgc2VsZi1leHBsYW5hdG9yeSwgYnV0IG5v dGUgdGhhdCBJUyBKU09OIFdJVEhPVVQgVU5JUVVFCktFWVMgaXMgdHJ1ZSB3aGVuZXZlciBJ UyBKU09OIGlzIHRydWUsIGFuZCBJUyBKU09OIFdJVEggVU5JUVVFIEtFWVMgaXMKdHJ1ZSB3 aGVuZXZlciBJUyBKU09OIGlzIHRydWUgZXhjZXB0IGl0IElTIEpTT04gT0JKRUNUIGlzIHRy dWUgYW5kIHRoZXJlCmFyZSBkdXBsaWNhdGUga2V5cyAod2hpY2ggaXMgbmV2ZXIgdGhlIGNh c2Ugd2hlbiBhcHBsaWVkIHRvIGpzb25iIHZhbHVlcykuCgpOaWtpdGEgR2x1a2hvdgoKUmV2 aWV3ZXJzIGhhdmUgaW5jbHVkZWQgKGluIG5vIHBhcnRpY3VsYXIgb3JkZXIpIEFuZHJlcyBG cmV1bmQsIEFsZXhhbmRlcgpLb3JvdGtvdiwgUGF2ZWwgU3RlaHVsZSwgQW5kcmV3IEFsc3Vw LCBFcmlrIFJpamtlcnMsIFppaG9uZyBZdSwKSGltYW5zaHUgVXBhZGh5YXlhLCBEYW5pZWwg R3VzdGFmc3NvbiwgSnVzdGluIFByeXpieS4KCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdy LmVzL20vY2QwYmI5MzUtMDE1OC03OGE3LTA4YjUtOTA0ODg2ZGVhYzRiQHBvc3RncmVzcHJv LnJ1CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vMjAyMjA2MTYyMzMxMzAucnBh cml2YWZpcHQ2ZG9qM0BhbGFwMy5hbmFyYXplbC5kZQpEaXNjdXNzaW9uOiBodHRwczovL3Bv c3Rnci5lcy9tL2FiZDliODNiLWFhNjYtZjIzMC0zZDZkLTczNDgxN2YwOTk1ZCU0MHBvc3Rn cmVzcWwub3JnCi0tLQogZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbCAgICAgICAgICAgICAgICB8 ICA2MyArKysrKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYyAgICAgICB8 ICAxMyArKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYyB8ICA5NSAr KysrKysrKysrKysKIHNyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jICAgfCAg IDYgKwogc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF90eXBlcy5jICB8ICAgMSArCiBz cmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYyAgICAgICAgIHwgIDE5ICsrKwogc3JjL2Jh Y2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMgICAgICAgICB8ICAyNiArKysrCiBzcmMvYmFja2Vu ZC9wYXJzZXIvZ3JhbS55ICAgICAgICAgICAgIHwgIDY1ICsrKysrKysrLQogc3JjL2JhY2tl bmQvcGFyc2VyL3BhcnNlX2V4cHIuYyAgICAgICB8ICA3NiArKysrKysrKysrCiBzcmMvYmFj a2VuZC91dGlscy9hZHQvanNvbi5jICAgICAgICAgIHwgMTE4ICsrKysrKysrKysrKystLQog c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jICAgICB8ICAyMCArKysKIHNyYy9i YWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyAgICAgfCAgMzcgKysrKysKIHNyYy9pbmNs dWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmggICAgICAgfCAgIDggKysKIHNyYy9pbmNsdWRlL25v ZGVzL21ha2VmdW5jcy5oICAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvbm9kZXMvcHJp bW5vZGVzLmggICAgICAgICB8ICAyNiArKysrCiBzcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0 LmggICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL2pzb24uaCAgICAgICAg ICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvdXRpbHMvanNvbmZ1bmNzLmggICAgICAgICB8 ICAgMyArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb24ub3V0IHwgMTk4ICsr KysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9zcWxqc29u LnNxbCAgICAgIHwgIDk2ICsrKysrKysrKysrKysKIDIwIGZpbGVzIGNoYW5nZWQsIDg2MiBp bnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3Nn bWwvZnVuYy5zZ21sIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAppbmRleCA4NjhkMDBlNjQz Li42M2ZmZDdjNmM3IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKQEAgLTE3ODM0LDYgKzE3ODM0LDY5IEBAICQuKiA/ IChAIGxpa2VfcmVnZXggIl5cXGQrJCIpCiAgICAgIDwvdGJvZHk+CiAgICAgPC90Z3JvdXA+ CiAgICA8L3RhYmxlPgorCisgIDxwYXJhPgorICAgPHhyZWYgbGlua2VuZD0iZnVuY3Rpb25z LXNxbGpzb24tbWlzYyIgLz4gZGV0YWlscyBTUUwvSlNPTgorICAgZmFjaWxpdGllcyBmb3Ig dGVzdGluZyBKU09OLgorICA8L3BhcmE+CisKKyAgPHRhYmxlIGlkPSJmdW5jdGlvbnMtc3Fs anNvbi1taXNjIj4KKyAgIDx0aXRsZT5TUUwvSlNPTiBUZXN0aW5nIEZ1bmN0aW9uczwvdGl0 bGU+CisgICA8dGdyb3VwIGNvbHM9IjEiPgorICAgIDx0aGVhZD4KKyAgICAgPHJvdz4KKyAg ICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3Np Z25hdHVyZSI+CisgICAgICAgIEZ1bmN0aW9uIHNpZ25hdHVyZQorICAgICAgIDwvcGFyYT4K KyAgICAgICA8cGFyYT4KKyAgICAgICAgRGVzY3JpcHRpb24KKyAgICAgICA8L3BhcmE+Cisg ICAgICAgPHBhcmE+CisgICAgICAgIEV4YW1wbGUocykKKyAgICAgIDwvcGFyYT48L2VudHJ5 PgorICAgICA8L3Jvdz4KKyAgICA8L3RoZWFkPgorICAgIDx0Ym9keT4KKyAgICAgPHJvdz4K KyAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5j X3NpZ25hdHVyZSI+CisgICAgICAgIDxpbmRleHRlcm0+PHByaW1hcnk+SVMgSlNPTjwvcHJp bWFyeT48L2luZGV4dGVybT4KKyAgICAgICAgPHJlcGxhY2VhYmxlPmV4cHJlc3Npb248L3Jl cGxhY2VhYmxlPiA8bGl0ZXJhbD5JUzwvbGl0ZXJhbD4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5O T1Q8L2xpdGVyYWw+IDwvb3B0aW9uYWw+IDxsaXRlcmFsPkpTT048L2xpdGVyYWw+CisgICAg ICAgIDxvcHRpb25hbD4geyA8bGl0ZXJhbD5WQUxVRTwvbGl0ZXJhbD4gfCA8bGl0ZXJhbD5T Q0FMQVI8L2xpdGVyYWw+IHwgPGxpdGVyYWw+QVJSQVk8L2xpdGVyYWw+IHwgPGxpdGVyYWw+ T0JKRUNUPC9saXRlcmFsPiB9IDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4geyA8 bGl0ZXJhbD5XSVRIPC9saXRlcmFsPiB8IDxsaXRlcmFsPldJVEhPVVQ8L2xpdGVyYWw+IH0g PGxpdGVyYWw+VU5JUVVFPC9saXRlcmFsPiA8b3B0aW9uYWw+IDxsaXRlcmFsPktFWVM8L2xp dGVyYWw+IDwvb3B0aW9uYWw+IDwvb3B0aW9uYWw+CisgICAgICAgPC9wYXJhPgorICAgICAg IDxwYXJhPgorICAgICAgICBUaGlzIHByZWRpY2F0ZSB0ZXN0cyB3aGV0aGVyIDxyZXBsYWNl YWJsZT5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gY2FuIGJlCisgICAgICAgIHBhcnNlZCBh cyBKU09OLCBwb3NzaWJseSBvZiBhIHNwZWNpZmllZCB0eXBlLgorICAgICAgICBJZiA8bGl0 ZXJhbD5TQ0FMQVI8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPkFSUkFZPC9saXRlcmFsPiBvcgor ICAgICAgICA8bGl0ZXJhbD5PQkpFQ1Q8L2xpdGVyYWw+IGlzIHNwZWNpZmllZCwgdGhlCisg ICAgICAgIHRlc3QgaXMgd2hldGhlciBvciBub3QgdGhlIEpTT04gaXMgb2YgdGhhdCBwYXJ0 aWN1bGFyIHR5cGUuIElmCisgICAgICAgIDxsaXRlcmFsPldJVEggVU5JUVVFPC9saXRlcmFs PiBpcyBzcGVjaWZpZWQsIHRoZW4gYW55IG9iamVjdCBpbiB0aGUKKyAgICAgICAgPHJlcGxh Y2VhYmxlPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiBpcyBhbHNvIHRlc3RlZCB0byBzZWUg aWYgaXQKKyAgICAgICAgaGFzIGR1cGxpY2F0ZSBrZXlzLgorICAgICAgIDwvcGFyYT4KKyAg ICAgICA8cGFyYT4KKzxzY3JlZW4+CitTRUxFQ1QganMsCisgIGpzIElTIEpTT04gImpzb24/ IiwKKyAganMgSVMgSlNPTiBTQ0FMQVIgInNjYWxhcj8iLAorICBqcyBJUyBKU09OIE9CSkVD VCAib2JqZWN0PyIsCisgIGpzIElTIEpTT04gQVJSQVkgImFycmF5PyIKK0ZST00KKyhWQUxV RVMgKCcxMjMnKSwgKCciYWJjIicpLCAoJ3siYSI6ICJiIn0nKSwKKygnWzEsMl0nKSwoJ2Fi YycpKSBmb28oanMpOworICAgICBqcyAgICAgfCBqc29uPyB8IHNjYWxhcj8gfCBvYmplY3Q/ IHwgYXJyYXk/CistLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tCisgMTIzICAgICAgICB8IHQgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmCisg ImFiYyIgICAgICB8IHQgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmCisgeyJhIjogImIi fSB8IHQgICAgIHwgZiAgICAgICB8IHQgICAgICAgfCBmCisgWzEsMl0gICAgICB8IHQgICAg IHwgZiAgICAgICB8IGYgICAgICAgfCB0CisgYWJjICAgICAgICB8IGYgICAgIHwgZiAgICAg ICB8IGYgICAgICAgfCBmCis8L3NjcmVlbj4KKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAg ICA8L3Jvdz4KKyAgICA8L3Rib2R5PgorICAgPC90Z3JvdXA+CisgIDwvdGFibGU+CiAgIDwv c2VjdDI+CiAgPC9zZWN0MT4KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY0V4cHIuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMKaW5kZXggMmJl YTA1ZmIxMS4uMWU0MWQwNjYxOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY0V4cHIuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jCkBAIC0y NDk1LDYgKzI0OTUsMTkgQEAgRXhlY0luaXRFeHByUmVjKEV4cHIgKm5vZGUsIEV4cHJTdGF0 ZSAqc3RhdGUsCiAJCQl9CiAJCQlicmVhazsKIAorCQljYXNlIFRfSnNvbklzUHJlZGljYXRl OgorCQkJeworCQkJCUpzb25Jc1ByZWRpY2F0ZSAqcHJlZCA9IChKc29uSXNQcmVkaWNhdGUg Kikgbm9kZTsKKworCQkJCUV4ZWNJbml0RXhwclJlYygoRXhwciAqKSBwcmVkLT5leHByLCBz dGF0ZSwgcmVzdiwgcmVzbnVsbCk7CisKKwkJCQlzY3JhdGNoLm9wY29kZSA9IEVFT1BfSVNf SlNPTjsKKwkJCQlzY3JhdGNoLmQuaXNfanNvbi5wcmVkID0gcHJlZDsKKworCQkJCUV4cHJF dmFsUHVzaFN0ZXAoc3RhdGUsICZzY3JhdGNoKTsKKwkJCQlicmVhazsKKwkJCX0KKwogCQlk ZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBub2RlIHR5cGU6ICVkIiwK IAkJCQkgKGludCkgbm9kZVRhZyhub2RlKSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjRXhwckludGVycC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4 cHJJbnRlcnAuYwppbmRleCA0NDBiNzEzOTk1Li5mYjE2ZjQxMDlkIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCisrKyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKQEAgLTczLDYgKzczLDcgQEAKICNpbmNsdWRl ICJ1dGlscy9leHBhbmRlZHJlY29yZC5oIgogI2luY2x1ZGUgInV0aWxzL2pzb24uaCIKICNp bmNsdWRlICJ1dGlscy9qc29uYi5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25mdW5jcy5oIgog I2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxz LmgiCiAjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCkBAIC00ODEsNiArNDgyLDcgQEAg RXhlY0ludGVycEV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0 LCBib29sICppc251bGwpCiAJCSYmQ0FTRV9FRU9QX1dJTkRPV19GVU5DLAogCQkmJkNBU0Vf RUVPUF9TVUJQTEFOLAogCQkmJkNBU0VfRUVPUF9KU09OX0NPTlNUUlVDVE9SLAorCQkmJkNB U0VfRUVPUF9JU19KU09OLAogCQkmJkNBU0VfRUVPUF9BR0dfU1RSSUNUX0RFU0VSSUFMSVpF LAogCQkmJkNBU0VfRUVPUF9BR0dfREVTRVJJQUxJWkUsCiAJCSYmQ0FTRV9FRU9QX0FHR19T VFJJQ1RfSU5QVVRfQ0hFQ0tfQVJHUywKQEAgLTE4MTMsNiArMTgxNSwxNCBAQCBFeGVjSW50 ZXJwRXhwcihFeHByU3RhdGUgKnN0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsIGJvb2wg KmlzbnVsbCkKIAkJCUVFT19ORVhUKCk7CiAJCX0KIAorCQlFRU9fQ0FTRShFRU9QX0lTX0pT T04pCisJCXsKKwkJCS8qIHRvbyBjb21wbGV4IGZvciBhbiBpbmxpbmUgaW1wbGVtZW50YXRp b24gKi8KKwkJCUV4ZWNFdmFsSnNvbklzUHJlZGljYXRlKHN0YXRlLCBvcCk7CisKKwkJCUVF T19ORVhUKCk7CisJCX0KKwogCQlFRU9fQ0FTRShFRU9QX0xBU1QpCiAJCXsKIAkJCS8qIHVu cmVhY2hhYmxlICovCkBAIC0zODc4LDYgKzM4ODgsOTEgQEAgRXhlY0V2YWxYbWxFeHByKEV4 cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3ApCiAJfQogfQogCit2b2lkCitFeGVj RXZhbEpzb25Jc1ByZWRpY2F0ZShFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9w KQoreworCUpzb25Jc1ByZWRpY2F0ZSAqcHJlZCA9IG9wLT5kLmlzX2pzb24ucHJlZDsKKwlE YXR1bQkJanMgPSAqb3AtPnJlc3ZhbHVlOworCU9pZAkJCWV4cHJ0eXBlOworCWJvb2wJCXJl czsKKworCWlmICgqb3AtPnJlc251bGwpCisJeworCQkqb3AtPnJlc3ZhbHVlID0gQm9vbEdl dERhdHVtKGZhbHNlKTsKKwkJcmV0dXJuOworCX0KKworCWV4cHJ0eXBlID0gZXhwclR5cGUo cHJlZC0+ZXhwcik7CisKKwlpZiAoZXhwcnR5cGUgPT0gVEVYVE9JRCB8fCBleHBydHlwZSA9 PSBKU09OT0lEKQorCXsKKwkJdGV4dAkgICAqanNvbiA9IERhdHVtR2V0VGV4dFAoanMpOwor CisJCWlmIChwcmVkLT5pdGVtX3R5cGUgPT0gSlNfVFlQRV9BTlkpCisJCQlyZXMgPSB0cnVl OworCQllbHNlCisJCXsKKwkJCXN3aXRjaCAoanNvbl9nZXRfZmlyc3RfdG9rZW4oanNvbiwg ZmFsc2UpKQorCQkJeworCQkJCWNhc2UgSlNPTl9UT0tFTl9PQkpFQ1RfU1RBUlQ6CisJCQkJ CXJlcyA9IHByZWQtPml0ZW1fdHlwZSA9PSBKU19UWVBFX09CSkVDVDsKKwkJCQkJYnJlYWs7 CisJCQkJY2FzZSBKU09OX1RPS0VOX0FSUkFZX1NUQVJUOgorCQkJCQlyZXMgPSBwcmVkLT5p dGVtX3R5cGUgPT0gSlNfVFlQRV9BUlJBWTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBKU09O X1RPS0VOX1NUUklORzoKKwkJCQljYXNlIEpTT05fVE9LRU5fTlVNQkVSOgorCQkJCWNhc2Ug SlNPTl9UT0tFTl9UUlVFOgorCQkJCWNhc2UgSlNPTl9UT0tFTl9GQUxTRToKKwkJCQljYXNl IEpTT05fVE9LRU5fTlVMTDoKKwkJCQkJcmVzID0gcHJlZC0+aXRlbV90eXBlID09IEpTX1RZ UEVfU0NBTEFSOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlyZXMgPSBmYWxz ZTsKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBEbyBmdWxsIHBhcnNp bmcgcGFzcyBvbmx5IGZvciB1bmlxdWVuZXNzIGNoZWNrIG9yIGZvciBKU09OIHRleHQKKwkJ ICogdmFsaWRhdGlvbi4KKwkJICovCisJCWlmIChyZXMgJiYgKHByZWQtPnVuaXF1ZV9rZXlz IHx8IGV4cHJ0eXBlID09IFRFWFRPSUQpKQorCQkJcmVzID0ganNvbl92YWxpZGF0ZShqc29u LCBwcmVkLT51bmlxdWVfa2V5cywgZmFsc2UpOworCX0KKwllbHNlIGlmIChleHBydHlwZSA9 PSBKU09OQk9JRCkKKwl7CisJCWlmIChwcmVkLT5pdGVtX3R5cGUgPT0gSlNfVFlQRV9BTlkp CisJCQlyZXMgPSB0cnVlOworCQllbHNlCisJCXsKKwkJCUpzb25iCSAgICpqYiA9IERhdHVt R2V0SnNvbmJQKGpzKTsKKworCQkJc3dpdGNoIChwcmVkLT5pdGVtX3R5cGUpCisJCQl7CisJ CQkJY2FzZSBKU19UWVBFX09CSkVDVDoKKwkJCQkJcmVzID0gSkJfUk9PVF9JU19PQkpFQ1Qo amIpOworCQkJCQlicmVhazsKKwkJCQljYXNlIEpTX1RZUEVfQVJSQVk6CisJCQkJCXJlcyA9 IEpCX1JPT1RfSVNfQVJSQVkoamIpICYmICFKQl9ST09UX0lTX1NDQUxBUihqYik7CisJCQkJ CWJyZWFrOworCQkJCWNhc2UgSlNfVFlQRV9TQ0FMQVI6CisJCQkJCXJlcyA9IEpCX1JPT1Rf SVNfQVJSQVkoamIpICYmIEpCX1JPT1RfSVNfU0NBTEFSKGpiKTsKKwkJCQkJYnJlYWs7CisJ CQkJZGVmYXVsdDoKKwkJCQkJcmVzID0gZmFsc2U7CisJCQkJCWJyZWFrOworCQkJfQorCQl9 CisKKwkJLyogS2V5IHVuaXF1ZW5lc3MgY2hlY2sgaXMgcmVkdW5kYW50IGZvciBqc29uYiAq LworCX0KKwllbHNlCisJCXJlcyA9IGZhbHNlOworCisJKm9wLT5yZXN2YWx1ZSA9IEJvb2xH ZXREYXR1bShyZXMpOworfQorCiAvKgogICogRXhlY0V2YWxHcm91cGluZ0Z1bmMKICAqCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYyBiL3NyYy9i YWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jCmluZGV4IGY3MjBmZDU3MWIuLmE0Zjc3 MzM0MzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5j CisrKyBiL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jCkBAIC0yMzk1LDYg KzIzOTUsMTIgQEAgbGx2bV9jb21waWxlX2V4cHIoRXhwclN0YXRlICpzdGF0ZSkKIAkJCQlM TFZNQnVpbGRCcihiLCBvcGJsb2Nrc1tvcG5vICsgMV0pOwogCQkJCWJyZWFrOwogCisJCQlj YXNlIEVFT1BfSVNfSlNPTjoKKwkJCQlidWlsZF9FdmFsWEZ1bmMoYiwgbW9kLCAiRXhlY0V2 YWxKc29uSXNQcmVkaWNhdGUiLAorCQkJCQkJCQl2X3N0YXRlLCBvcCk7CisJCQkJTExWTUJ1 aWxkQnIoYiwgb3BibG9ja3Nbb3BubyArIDFdKTsKKwkJCQlicmVhazsKKwogCQkJY2FzZSBF RU9QX0xBU1Q6CiAJCQkJQXNzZXJ0KGZhbHNlKTsKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlwZXMuYyBiL3NyYy9iYWNrZW5kL2pp dC9sbHZtL2xsdm1qaXRfdHlwZXMuYwppbmRleCAzMTVlZWIxMTcyLi5mNjFkOTM5MGVlIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVzLmMKKysrIGIv c3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF90eXBlcy5jCkBAIC0xMzMsNiArMTMzLDcg QEAgdm9pZAkgICAqcmVmZXJlbmNlZF9mdW5jdGlvbnNbXSA9CiAJRXhlY0V2YWxXaG9sZVJv d1ZhciwKIAlFeGVjRXZhbFhtbEV4cHIsCiAJRXhlY0V2YWxKc29uQ29uc3RydWN0b3IsCisJ RXhlY0V2YWxKc29uSXNQcmVkaWNhdGUsCiAJTWFrZUV4cGFuZGVkT2JqZWN0UmVhZE9ubHlJ bnRlcm5hbCwKIAlzbG90X2dldG1pc3NpbmdhdHRycywKIAlzbG90X2dldHNvbWVhdHRyc19p bnQsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYyBiL3NyYy9i YWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCmluZGV4IDFkYzY3MGEwOTkuLjMwMWNiNmZhMDEg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCisrKyBiL3NyYy9i YWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCkBAIC04ODksMyArODg5LDIyIEBAIG1ha2VKc29u S2V5VmFsdWUoTm9kZSAqa2V5LCBOb2RlICp2YWx1ZSkKIAogCXJldHVybiAoTm9kZSAqKSBu OwogfQorCisvKgorICogbWFrZUpzb25Jc1ByZWRpY2F0ZSAtCisgKgkgIGNyZWF0ZXMgYSBK c29uSXNQcmVkaWNhdGUgbm9kZQorICovCitOb2RlICoKK21ha2VKc29uSXNQcmVkaWNhdGUo Tm9kZSAqZXhwciwgSnNvbkZvcm1hdCAqZm9ybWF0LCBKc29uVmFsdWVUeXBlIGl0ZW1fdHlw ZSwKKwkJCQkJYm9vbCB1bmlxdWVfa2V5cywgaW50IGxvY2F0aW9uKQoreworCUpzb25Jc1By ZWRpY2F0ZSAqbiA9IG1ha2VOb2RlKEpzb25Jc1ByZWRpY2F0ZSk7CisKKwluLT5leHByID0g ZXhwcjsKKwluLT5mb3JtYXQgPSBmb3JtYXQ7CisJbi0+aXRlbV90eXBlID0gaXRlbV90eXBl OworCW4tPnVuaXF1ZV9rZXlzID0gdW5pcXVlX2tleXM7CisJbi0+bG9jYXRpb24gPSBsb2Nh dGlvbjsKKworCXJldHVybiAoTm9kZSAqKSBuOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvbm9kZXMvbm9kZUZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwpp bmRleCAwZDNlMmNmZjIzLi5hYWQ1ZWZiZGI1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9u b2Rlcy9ub2RlRnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwpA QCAtMjU5LDYgKzI1OSw5IEBAIGV4cHJUeXBlKGNvbnN0IE5vZGUgKmV4cHIpCiAJCWNhc2Ug VF9Kc29uQ29uc3RydWN0b3JFeHByOgogCQkJdHlwZSA9ICgoY29uc3QgSnNvbkNvbnN0cnVj dG9yRXhwciAqKSBleHByKS0+cmV0dXJuaW5nLT50eXBpZDsKIAkJCWJyZWFrOworCQljYXNl IFRfSnNvbklzUHJlZGljYXRlOgorCQkJdHlwZSA9IEJPT0xPSUQ7CisJCQlicmVhazsKIAkJ ZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlOiAlZCIs IChpbnQpIG5vZGVUYWcoZXhwcikpOwogCQkJdHlwZSA9IEludmFsaWRPaWQ7CS8qIGtlZXAg Y29tcGlsZXIgcXVpZXQgKi8KQEAgLTk4Miw2ICs5ODUsOSBAQCBleHByQ29sbGF0aW9uKGNv bnN0IE5vZGUgKmV4cHIpCiAJCQkJCWNvbGwgPSBJbnZhbGlkT2lkOwogCQkJfQogCQkJYnJl YWs7CisJCWNhc2UgVF9Kc29uSXNQcmVkaWNhdGU6CisJCQljb2xsID0gSW52YWxpZE9pZDsJ LyogcmVzdWx0IGlzIGFsd2F5cyBhbiBib29sZWFuIHR5cGUgKi8KKwkJCWJyZWFrOwogCQlk ZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBub2RlIHR5cGU6ICVkIiwg KGludCkgbm9kZVRhZyhleHByKSk7CiAJCQljb2xsID0gSW52YWxpZE9pZDsJLyoga2VlcCBj b21waWxlciBxdWlldCAqLwpAQCAtMTIwNCw2ICsxMjEwLDkgQEAgZXhwclNldENvbGxhdGlv bihOb2RlICpleHByLCBPaWQgY29sbGF0aW9uKQogCQkJCQkJCQkJCQkJCSAqIGpzb25bYl0g dHlwZSAqLwogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uSXNQcmVkaWNhdGU6CisJ CQlBc3NlcnQoIU9pZElzVmFsaWQoY29sbGF0aW9uKSk7IC8qIHJlc3VsdCBpcyBhbHdheXMg Ym9vbGVhbiAqLworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAidW5y ZWNvZ25pemVkIG5vZGUgdHlwZTogJWQiLCAoaW50KSBub2RlVGFnKGV4cHIpKTsKIAkJCWJy ZWFrOwpAQCAtMTY1Miw2ICsxNjYxLDkgQEAgZXhwckxvY2F0aW9uKGNvbnN0IE5vZGUgKmV4 cHIpCiAJCWNhc2UgVF9Kc29uQ29uc3RydWN0b3JFeHByOgogCQkJbG9jID0gKChjb25zdCBK c29uQ29uc3RydWN0b3JFeHByICopIGV4cHIpLT5sb2NhdGlvbjsKIAkJCWJyZWFrOworCQlj YXNlIFRfSnNvbklzUHJlZGljYXRlOgorCQkJbG9jID0gKChjb25zdCBKc29uSXNQcmVkaWNh dGUgKikgZXhwciktPmxvY2F0aW9uOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkvKiBm b3IgYW55IG90aGVyIG5vZGUgdHlwZSBpdCdzIGp1c3QgdW5rbm93bi4uLiAqLwogCQkJbG9j ID0gLTE7CkBAIC0yNDA1LDYgKzI0MTcsOCBAQCBleHByZXNzaW9uX3RyZWVfd2Fsa2VyX2lt cGwoTm9kZSAqbm9kZSwKIAkJCQkJcmV0dXJuIHRydWU7CiAJCQl9CiAJCQlicmVhazsKKwkJ Y2FzZSBUX0pzb25Jc1ByZWRpY2F0ZToKKwkJCXJldHVybiB3YWxrZXIoKChKc29uSXNQcmVk aWNhdGUgKikgbm9kZSktPmV4cHIsIGNvbnRleHQpOwogCQlkZWZhdWx0OgogCQkJZWxvZyhF UlJPUiwgInVucmVjb2duaXplZCBub2RlIHR5cGU6ICVkIiwKIAkJCQkgKGludCkgbm9kZVRh Zyhub2RlKSk7CkBAIC0zNDEyLDYgKzM0MjYsMTYgQEAgZXhwcmVzc2lvbl90cmVlX211dGF0 b3JfaW1wbChOb2RlICpub2RlLAogCQkJCU1VVEFURShuZXdub2RlLT5jb2VyY2lvbiwganZl LT5jb2VyY2lvbiwgRXhwciAqKTsKIAkJCQlNVVRBVEUobmV3bm9kZS0+cmV0dXJuaW5nLCBq dmUtPnJldHVybmluZywgSnNvblJldHVybmluZyAqKTsKIAorCQkJCXJldHVybiAoTm9kZSAq KSBuZXdub2RlOworCQkJfQorCQljYXNlIFRfSnNvbklzUHJlZGljYXRlOgorCQkJeworCQkJ CUpzb25Jc1ByZWRpY2F0ZSAqcHJlZCA9IChKc29uSXNQcmVkaWNhdGUgKikgbm9kZTsKKwkJ CQlKc29uSXNQcmVkaWNhdGUgKm5ld25vZGU7CisKKwkJCQlGTEFUQ09QWShuZXdub2RlLCBw cmVkLCBKc29uSXNQcmVkaWNhdGUpOworCQkJCU1VVEFURShuZXdub2RlLT5leHByLCBwcmVk LT5leHByLCBOb2RlICopOworCiAJCQkJcmV0dXJuIChOb2RlICopIG5ld25vZGU7CiAJCQl9 CiAJCWRlZmF1bHQ6CkBAIC00MjYwLDYgKzQyODQsOCBAQCByYXdfZXhwcmVzc2lvbl90cmVl X3dhbGtlcl9pbXBsKE5vZGUgKm5vZGUsCiAJCQkJCXJldHVybiB0cnVlOwogCQkJfQogCQkJ YnJlYWs7CisJCWNhc2UgVF9Kc29uSXNQcmVkaWNhdGU6CisJCQlyZXR1cm4gd2Fsa2VyKCgo SnNvbklzUHJlZGljYXRlICopIG5vZGUpLT5leHByLCBjb250ZXh0KTsKIAkJZGVmYXVsdDoK IAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlOiAlZCIsCiAJCQkJIChp bnQpIG5vZGVUYWcobm9kZSkpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dy YW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5kZXggZWI0MTVkZjZhNS4uZTM0 Mzk1MjYyYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQorKysgYi9z cmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CkBAIC02NTgsNiArNjU4LDcgQEAgc3RhdGljIE5v ZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFz ZXMsIE5vZGUgKnF1ZXJ5KTsKIAkJCQkJanNvbl9hcnJheV9hZ2dyZWdhdGVfb3JkZXJfYnlf Y2xhdXNlX29wdAogCiAldHlwZSA8aXZhbD4JCWpzb25fZW5jb2RpbmdfY2xhdXNlX29wdAor CQkJCQlqc29uX3ByZWRpY2F0ZV90eXBlX2NvbnN0cmFpbnRfb3B0CiAKICV0eXBlIDxib29s ZWFuPgkJanNvbl9rZXlfdW5pcXVlbmVzc19jb25zdHJhaW50X29wdAogCQkJCQlqc29uX29i amVjdF9jb25zdHJ1Y3Rvcl9udWxsX2NsYXVzZV9vcHQKQEAgLTcyNyw3ICs3MjgsNyBAQCBz dGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlz dCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCiAJSk9JTiBKU09OIEpTT05fQVJSQVkgSlNP Tl9BUlJBWUFHRyBKU09OX09CSkVDVCBKU09OX09CSkVDVEFHRwogCi0JS0VZIEtFWVMKKwlL RVkgS0VZUyBLRUVQCiAKIAlMQUJFTCBMQU5HVUFHRSBMQVJHRV9QIExBU1RfUCBMQVRFUkFM X1AKIAlMRUFESU5HIExFQUtQUk9PRiBMRUFTVCBMRUZUIExFVkVMIExJS0UgTElNSVQgTElT VEVOIExPQUQgTE9DQUwKQEAgLTc1Nyw5ICs3NTgsOSBAQCBzdGF0aWMgTm9kZSAqbWFrZVJl Y3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAq cXVlcnkpOwogCVJFU0VUIFJFU1RBUlQgUkVTVFJJQ1QgUkVUVVJOIFJFVFVSTklORyBSRVRV Uk5TIFJFVk9LRSBSSUdIVCBST0xFIFJPTExCQUNLIFJPTExVUAogCVJPVVRJTkUgUk9VVElO RVMgUk9XIFJPV1MgUlVMRQogCi0JU0FWRVBPSU5UIFNDSEVNQSBTQ0hFTUFTIFNDUk9MTCBT RUFSQ0ggU0VDT05EX1AgU0VDVVJJVFkgU0VMRUNUIFNFUVVFTkNFIFNFUVVFTkNFUwotCVNF UklBTElaQUJMRSBTRVJWRVIgU0VTU0lPTiBTRVNTSU9OX1VTRVIgU0VUIFNFVFMgU0VUT0Yg U0hBUkUgU0hPVwotCVNJTUlMQVIgU0lNUExFIFNLSVAgU01BTExJTlQgU05BUFNIT1QgU09N RSBTUUxfUCBTVEFCTEUgU1RBTkRBTE9ORV9QCisJU0FWRVBPSU5UIFNDQUxBUiBTQ0hFTUEg U0NIRU1BUyBTQ1JPTEwgU0VBUkNIIFNFQ09ORF9QIFNFQ1VSSVRZIFNFTEVDVAorCVNFUVVF TkNFIFNFUVVFTkNFUyBTRVJJQUxJWkFCTEUgU0VSVkVSIFNFU1NJT04gU0VTU0lPTl9VU0VS IFNFVCBTRVRTIFNFVE9GCisJU0hBUkUgU0hPVyBTSU1JTEFSIFNJTVBMRSBTS0lQIFNNQUxM SU5UIFNOQVBTSE9UIFNPTUUgU1FMX1AgU1RBQkxFIFNUQU5EQUxPTkVfUAogCVNUQVJUIFNU QVRFTUVOVCBTVEFUSVNUSUNTIFNURElOIFNURE9VVCBTVE9SQUdFIFNUT1JFRCBTVFJJQ1Rf UCBTVFJJUF9QCiAJU1VCU0NSSVBUSU9OIFNVQlNUUklORyBTVVBQT1JUIFNZTU1FVFJJQyBT WVNJRCBTWVNURU1fUCBTWVNURU1fVVNFUgogCkBAIC04NDcsMTMgKzg0OCwxNCBAQCBzdGF0 aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAq YWxpYXNlcywgTm9kZSAqcXVlcnkpOwogICogVXNpbmcgdGhlIHNhbWUgcHJlY2VkZW5jZSBh cyBJREVOVCBzZWVtcyByaWdodCBmb3IgdGhlIHJlYXNvbnMgZ2l2ZW4gYWJvdmUuCiAgKi8K ICVub25hc3NvYwlVTkJPVU5ERUQJCS8qIGlkZWFsbHkgd291bGQgaGF2ZSBzYW1lIHByZWNl ZGVuY2UgYXMgSURFTlQgKi8KLSVub25hc3NvYwlBQlNFTlQgVU5JUVVFCislbm9uYXNzb2MJ QUJTRU5UIFVOSVFVRSBKU09OCiAlbm9uYXNzb2MJSURFTlQgUEFSVElUSU9OIFJBTkdFIFJP V1MgR1JPVVBTIFBSRUNFRElORyBGT0xMT1dJTkcgQ1VCRSBST0xMVVAKICVsZWZ0CQlPcCBP UEVSQVRPUgkJLyogbXVsdGktY2hhcmFjdGVyIG9wcyBhbmQgdXNlci1kZWZpbmVkIG9wZXJh dG9ycyAqLwogJWxlZnQJCScrJyAnLScKICVsZWZ0CQknKicgJy8nICclJwogJWxlZnQJCSde JwogJWxlZnQJCUtFWVMJCQkJCQkvKiBVTklRVUUgWyBLRVlTIF0gKi8KKyVsZWZ0CQlPQkpF Q1RfUCBTQ0FMQVIgVkFMVUVfUAkJLyogSlNPTiBbIE9CSkVDVCB8IFNDQUxBUiB8IFZBTFVF IF0gKi8KIC8qIFVuYXJ5IE9wZXJhdG9ycyAqLwogJWxlZnQJCUFUCQkJCS8qIHNldHMgcHJl Y2VkZW5jZSBmb3IgQVQgVElNRSBaT05FICovCiAlbGVmdAkJQ09MTEFURQpAQCAtMTQ4NTcs NiArMTQ4NTksNDggQEAgYV9leHByOgkJY19leHByCQkJCQkJCQkJeyAkJCA9ICQxOyB9CiAJ CQkJCQkJCQkJCQkJCSAgIEAyKSwKIAkJCQkJCQkJCSBAMik7CiAJCQkJfQorCQkJfCBhX2V4 cHIKKwkJCQlJUyBqc29uX3ByZWRpY2F0ZV90eXBlX2NvbnN0cmFpbnRfb3B0CisJCQkJCWpz b25fa2V5X3VuaXF1ZW5lc3NfY29uc3RyYWludF9vcHQJCSVwcmVjIElTCisJCQkJeworCQkJ CQlKc29uRm9ybWF0ICpmb3JtYXQgPSBtYWtlSnNvbkZvcm1hdChKU19GT1JNQVRfREVGQVVM VCwgSlNfRU5DX0RFRkFVTFQsIC0xKTsKKworCQkJCQkkJCA9IG1ha2VKc29uSXNQcmVkaWNh dGUoJDEsIGZvcm1hdCwgJDMsICQ0LCBAMSk7CisJCQkJfQorCQkJLyoKKwkJCSAqIFJlcXVp cmVkIGJ5IHN0YW5kYXJkLCBidXQgaXQgd291bGQgY29uZmxpY3Qgd2l0aCBleHByZXNzaW9u cworCQkJICogbGlrZTogJ3N0cicgfHwgZm9ybWF0KC4uLikKKwkJCXwgYV9leHByCisJCQkJ Rk9STUFUIGpzb25fcmVwcmVzZW50YXRpb24KKwkJCQlJUyAganNvbl9wcmVkaWNhdGVfdHlw ZV9jb25zdHJhaW50X29wdAorCQkJCQlqc29uX2tleV91bmlxdWVuZXNzX2NvbnN0cmFpbnRf b3B0CQklcHJlYyBGT1JNQVQKKwkJCQl7CisJCQkJCSQzLmxvY2F0aW9uID0gQDI7CisJCQkJ CSQkID0gbWFrZUpzb25Jc1ByZWRpY2F0ZSgkMSwgJDMsICQ1LCAkNiwgQDEpOworCQkJCX0K KwkJCSovCisJCQl8IGFfZXhwcgorCQkJCUlTIE5PVAorCQkJCQlqc29uX3ByZWRpY2F0ZV90 eXBlX2NvbnN0cmFpbnRfb3B0CisJCQkJCWpzb25fa2V5X3VuaXF1ZW5lc3NfY29uc3RyYWlu dF9vcHQJCSVwcmVjIElTCisJCQkJeworCQkJCQlKc29uRm9ybWF0ICpmb3JtYXQgPSBtYWtl SnNvbkZvcm1hdChKU19GT1JNQVRfREVGQVVMVCwgSlNfRU5DX0RFRkFVTFQsIC0xKTsKKwor CQkJCQkkJCA9IG1ha2VOb3RFeHByKG1ha2VKc29uSXNQcmVkaWNhdGUoJDEsIGZvcm1hdCwg JDQsICQ1LCBAMSksIEAxKTsKKwkJCQl9CisJCQkvKgorCQkJICogUmVxdWlyZWQgYnkgc3Rh bmRhcmQsIGJ1dCBpdCB3b3VsZCBjb25mbGljdCB3aXRoIGV4cHJlc3Npb25zCisJCQkgKiBs aWtlOiAnc3RyJyB8fCBmb3JtYXQoLi4uKQorCQkJfCBhX2V4cHIKKwkJCQlGT1JNQVQganNv bl9yZXByZXNlbnRhdGlvbgorCQkJCUlTIE5PVAorCQkJCQlqc29uX3ByZWRpY2F0ZV90eXBl X2NvbnN0cmFpbnRfb3B0CisJCQkJCWpzb25fa2V5X3VuaXF1ZW5lc3NfY29uc3RyYWludF9v cHQJCSVwcmVjIEZPUk1BVAorCQkJCXsKKwkJCQkJJDMubG9jYXRpb24gPSBAMjsKKwkJCQkJ JCQgPSBtYWtlTm90RXhwcihtYWtlSnNvbklzUHJlZGljYXRlKCQxLCAkMywgJDYsICQ3LCBA MSksIEAxKTsKKwkJCQl9CisJCQkqLwogCQkJfCBERUZBVUxUCiAJCQkJewogCQkJCQkvKgpA QCAtMTQ5NDAsNiArMTQ5ODQsMTQgQEAgYl9leHByOgkJY19leHByCiAJCQkJfQogCQk7CiAK K2pzb25fcHJlZGljYXRlX3R5cGVfY29uc3RyYWludF9vcHQ6CisJCQlKU09OCQkJCQkJCQkJ eyAkJCA9IEpTX1RZUEVfQU5ZOyB9CisJCQl8IEpTT04gVkFMVUVfUAkJCQkJCQl7ICQkID0g SlNfVFlQRV9BTlk7IH0KKwkJCXwgSlNPTiBBUlJBWQkJCQkJCQl7ICQkID0gSlNfVFlQRV9B UlJBWTsgfQorCQkJfCBKU09OIE9CSkVDVF9QCQkJCQkJCXsgJCQgPSBKU19UWVBFX09CSkVD VDsgfQorCQkJfCBKU09OIFNDQUxBUgkJCQkJCQl7ICQkID0gSlNfVFlQRV9TQ0FMQVI7IH0K KwkJOworCiAvKiBLRVlTIGlzIGEgbm9pc2Ugd29yZCBoZXJlICovCiBqc29uX2tleV91bmlx dWVuZXNzX2NvbnN0cmFpbnRfb3B0OgogCQkJV0lUSF9MQV9VTklRVUUgVU5JUVVFIEtFWVMJ CQkJeyAkJCA9IHRydWU7IH0KQEAgLTE3MjE0LDYgKzE3MjY2LDcgQEAgdW5yZXNlcnZlZF9r ZXl3b3JkOgogCQkJfCBST1dTCiAJCQl8IFJVTEUKIAkJCXwgU0FWRVBPSU5UCisJCQl8IFND QUxBUgogCQkJfCBTQ0hFTUEKIAkJCXwgU0NIRU1BUwogCQkJfCBTQ1JPTEwKQEAgLTE3Njg2 LDYgKzE3NzM5LDcgQEAgYmFyZV9sYWJlbF9rZXl3b3JkOgogCQkJfCBKU09OX0FSUkFZQUdH CiAJCQl8IEpTT05fT0JKRUNUCiAJCQl8IEpTT05fT0JKRUNUQUdHCisJCQl8IEtFRVAKIAkJ CXwgS0VZCiAJCQl8IEtFWVMKIAkJCXwgTEFCRUwKQEAgLTE3ODE2LDYgKzE3ODcwLDcgQEAg YmFyZV9sYWJlbF9rZXl3b3JkOgogCQkJfCBST1dTCiAJCQl8IFJVTEUKIAkJCXwgU0FWRVBP SU5UCisJCQl8IFNDQUxBUgogCQkJfCBTQ0hFTUEKIAkJCXwgU0NIRU1BUwogCQkJfCBTQ1JP TEwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMgYi9zcmMv YmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCmluZGV4IDFlMDk2MTdiMzUuLjY1NjIyYzUz ODAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMKKysrIGIv c3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYwpAQCAtODMsNiArODMsNyBAQCBzdGF0 aWMgTm9kZSAqdHJhbnNmb3JtSnNvbkFycmF5UXVlcnlDb25zdHJ1Y3RvcihQYXJzZVN0YXRl ICpwc3RhdGUsCiAJCQkJCQkJCQkJCQlKc29uQXJyYXlRdWVyeUNvbnN0cnVjdG9yICpjdG9y KTsKIHN0YXRpYyBOb2RlICp0cmFuc2Zvcm1Kc29uT2JqZWN0QWdnKFBhcnNlU3RhdGUgKnBz dGF0ZSwgSnNvbk9iamVjdEFnZyAqYWdnKTsKIHN0YXRpYyBOb2RlICp0cmFuc2Zvcm1Kc29u QXJyYXlBZ2coUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uQXJyYXlBZ2cgKmFnZyk7CitzdGF0 aWMgTm9kZSAqdHJhbnNmb3JtSnNvbklzUHJlZGljYXRlKFBhcnNlU3RhdGUgKnBzdGF0ZSwg SnNvbklzUHJlZGljYXRlICpwKTsKIHN0YXRpYyBOb2RlICptYWtlX3Jvd19jb21wYXJpc29u X29wKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqb3BuYW1lLAogCQkJCQkJCQkJTGlzdCAq bGFyZ3MsIExpc3QgKnJhcmdzLCBpbnQgbG9jYXRpb24pOwogc3RhdGljIE5vZGUgKm1ha2Vf cm93X2Rpc3RpbmN0X29wKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqb3BuYW1lLApAQCAt MzI1LDYgKzMyNiwxMCBAQCB0cmFuc2Zvcm1FeHByUmVjdXJzZShQYXJzZVN0YXRlICpwc3Rh dGUsIE5vZGUgKmV4cHIpCiAJCQlyZXN1bHQgPSB0cmFuc2Zvcm1Kc29uQXJyYXlBZ2cocHN0 YXRlLCAoSnNvbkFycmF5QWdnICopIGV4cHIpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBUX0pz b25Jc1ByZWRpY2F0ZToKKwkJCXJlc3VsdCA9IHRyYW5zZm9ybUpzb25Jc1ByZWRpY2F0ZShw c3RhdGUsIChKc29uSXNQcmVkaWNhdGUgKikgZXhwcik7CisJCQlicmVhazsKKwogCQlkZWZh dWx0OgogCQkJLyogc2hvdWxkIG5vdCByZWFjaCBoZXJlICovCiAJCQllbG9nKEVSUk9SLCAi dW5yZWNvZ25pemVkIG5vZGUgdHlwZTogJWQiLCAoaW50KSBub2RlVGFnKGV4cHIpKTsKQEAg LTM4MTMsMyArMzgxOCw3NCBAQCB0cmFuc2Zvcm1Kc29uQXJyYXlDb25zdHJ1Y3RvcihQYXJz ZVN0YXRlICpwc3RhdGUsIEpzb25BcnJheUNvbnN0cnVjdG9yICpjdG9yKQogCQkJCQkJCQkg ICByZXR1cm5pbmcsIGZhbHNlLCBjdG9yLT5hYnNlbnRfb25fbnVsbCwKIAkJCQkJCQkJICAg Y3Rvci0+bG9jYXRpb24pOwogfQorCitzdGF0aWMgTm9kZSAqCit0cmFuc2Zvcm1Kc29uUGFy c2VBcmcoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpqc2V4cHIsIEpzb25Gb3JtYXQgKmZv cm1hdCwKKwkJCQkJICBPaWQgKmV4cHJ0eXBlKQoreworCU5vZGUJICAgKnJhd19leHByID0g dHJhbnNmb3JtRXhwclJlY3Vyc2UocHN0YXRlLCBqc2V4cHIpOworCU5vZGUJICAgKmV4cHIg PSByYXdfZXhwcjsKKworCSpleHBydHlwZSA9IGV4cHJUeXBlKGV4cHIpOworCisJLyogcHJl cGFyZSBpbnB1dCBkb2N1bWVudCAqLworCWlmICgqZXhwcnR5cGUgPT0gQllURUFPSUQpCisJ eworCQlKc29uVmFsdWVFeHByICpqdmU7CisKKwkJZXhwciA9IG1ha2VDYXNlVGVzdEV4cHIo cmF3X2V4cHIpOworCQlleHByID0gbWFrZUpzb25CeXRlYVRvVGV4dENvbnZlcnNpb24oZXhw ciwgZm9ybWF0LCBleHByTG9jYXRpb24oZXhwcikpOworCQkqZXhwcnR5cGUgPSBURVhUT0lE OworCisJCWp2ZSA9IG1ha2VKc29uVmFsdWVFeHByKChFeHByICopIHJhd19leHByLCBmb3Jt YXQpOworCisJCWp2ZS0+Zm9ybWF0dGVkX2V4cHIgPSAoRXhwciAqKSBleHByOworCQlleHBy ID0gKE5vZGUgKikganZlOworCX0KKwllbHNlCisJeworCQljaGFyCQl0eXBjYXRlZ29yeTsK KwkJYm9vbAkJdHlwaXNwcmVmZXJyZWQ7CisKKwkJZ2V0X3R5cGVfY2F0ZWdvcnlfcHJlZmVy cmVkKCpleHBydHlwZSwgJnR5cGNhdGVnb3J5LCAmdHlwaXNwcmVmZXJyZWQpOworCisJCWlm ICgqZXhwcnR5cGUgPT0gVU5LTk9XTk9JRCB8fCB0eXBjYXRlZ29yeSA9PSBUWVBDQVRFR09S WV9TVFJJTkcpCisJCXsKKwkJCWV4cHIgPSBjb2VyY2VfdG9fdGFyZ2V0X3R5cGUocHN0YXRl LCAoTm9kZSAqKSBleHByLCAqZXhwcnR5cGUsCisJCQkJCQkJCQkJIFRFWFRPSUQsIC0xLAor CQkJCQkJCQkJCSBDT0VSQ0lPTl9JTVBMSUNJVCwKKwkJCQkJCQkJCQkgQ09FUkNFX0lNUExJ Q0lUX0NBU1QsIC0xKTsKKwkJCSpleHBydHlwZSA9IFRFWFRPSUQ7CisJCX0KKworCQlpZiAo Zm9ybWF0LT5lbmNvZGluZyAhPSBKU19FTkNfREVGQVVMVCkKKwkJCWVyZXBvcnQoRVJST1Is CisJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJ IHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGZvcm1hdC0+bG9jYXRpb24pLAorCQkJCQkg ZXJybXNnKCJjYW5ub3QgdXNlIEpTT04gRk9STUFUIEVOQ09ESU5HIGNsYXVzZSBmb3Igbm9u LWJ5dGVhIGlucHV0IHR5cGVzIikpKTsKKwl9CisKKwlyZXR1cm4gZXhwcjsKK30KKworLyoK KyAqIFRyYW5zZm9ybSBJUyBKU09OIHByZWRpY2F0ZS4KKyAqLworc3RhdGljIE5vZGUgKgor dHJhbnNmb3JtSnNvbklzUHJlZGljYXRlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbklzUHJl ZGljYXRlICpwcmVkKQoreworCU9pZAkJCWV4cHJ0eXBlOworCU5vZGUJICAgKmV4cHIgPSB0 cmFuc2Zvcm1Kc29uUGFyc2VBcmcocHN0YXRlLCBwcmVkLT5leHByLCBwcmVkLT5mb3JtYXQs CisJCQkJCQkJCQkJCSAmZXhwcnR5cGUpOworCisJLyogbWFrZSByZXN1bHRpbmcgZXhwcmVz c2lvbiAqLworCWlmIChleHBydHlwZSAhPSBURVhUT0lEICYmIGV4cHJ0eXBlICE9IEpTT05P SUQgJiYgZXhwcnR5cGUgIT0gSlNPTkJPSUQpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVy cmNvZGUoRVJSQ09ERV9EQVRBVFlQRV9NSVNNQVRDSCksCisJCQkJIGVycm1zZygiY2Fubm90 IHVzZSB0eXBlICVzIGluIElTIEpTT04gcHJlZGljYXRlIiwKKwkJCQkJCWZvcm1hdF90eXBl X2JlKGV4cHJ0eXBlKSkpKTsKKworCS8qIFRoaXMgaW50ZW50aW9uYWxseSg/KSBkcm9wcyB0 aGUgZm9ybWF0IGNsYXVzZS4gKi8KKwlyZXR1cm4gbWFrZUpzb25Jc1ByZWRpY2F0ZShleHBy LCBOVUxMLCBwcmVkLT5pdGVtX3R5cGUsCisJCQkJCQkJICAgcHJlZC0+dW5pcXVlX2tleXMs IHByZWQtPmxvY2F0aW9uKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9qc29uLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbi5jCmluZGV4IDdlMDMwODEw YjYuLmRhNGIyYTlkMWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29u LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb24uYwpAQCAtMTMsNiArMTMsNyBA QAogICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgImFjY2Vzcy9oYXNo LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9jLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z190eXBlLmgiCiAjaW5jbHVkZSAiY29tbW9uL2hhc2hmbi5oIgpAQCAtMTYzMSw2ICsxNjMy LDExMCBAQCBlc2NhcGVfanNvbihTdHJpbmdJbmZvIGJ1ZiwgY29uc3QgY2hhciAqc3RyKQog CWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oYnVmLCAnIicpOwogfQogCisvKiBTZW1hbnRp YyBhY3Rpb25zIGZvciBrZXkgdW5pcXVlbmVzcyBjaGVjayAqLworc3RhdGljIEpzb25QYXJz ZUVycm9yVHlwZQoranNvbl91bmlxdWVfb2JqZWN0X3N0YXJ0KHZvaWQgKl9zdGF0ZSkKK3sK KwlKc29uVW5pcXVlUGFyc2luZ1N0YXRlICpzdGF0ZSA9IF9zdGF0ZTsKKwlKc29uVW5pcXVl U3RhY2tFbnRyeSAqZW50cnk7CisKKwlpZiAoIXN0YXRlLT51bmlxdWUpCisJCXJldHVybiBK U09OX1NVQ0NFU1M7CisKKwkvKiBwdXNoIG9iamVjdCBlbnRyeSB0byBzdGFjayAqLworCWVu dHJ5ID0gcGFsbG9jKHNpemVvZigqZW50cnkpKTsKKwllbnRyeS0+b2JqZWN0X2lkID0gc3Rh dGUtPmlkX2NvdW50ZXIrKzsKKwllbnRyeS0+cGFyZW50ID0gc3RhdGUtPnN0YWNrOworCXN0 YXRlLT5zdGFjayA9IGVudHJ5OworCisJcmV0dXJuIEpTT05fU1VDQ0VTUzsKK30KKworc3Rh dGljIEpzb25QYXJzZUVycm9yVHlwZQoranNvbl91bmlxdWVfb2JqZWN0X2VuZCh2b2lkICpf c3RhdGUpCit7CisJSnNvblVuaXF1ZVBhcnNpbmdTdGF0ZSAqc3RhdGUgPSBfc3RhdGU7CisJ SnNvblVuaXF1ZVN0YWNrRW50cnkgKmVudHJ5OworCisJaWYgKCFzdGF0ZS0+dW5pcXVlKQor CQlyZXR1cm4gSlNPTl9TVUNDRVNTOworCisJZW50cnkgPSBzdGF0ZS0+c3RhY2s7CisJc3Rh dGUtPnN0YWNrID0gZW50cnktPnBhcmVudDsJLyogcG9wIG9iamVjdCBmcm9tIHN0YWNrICov CisJcGZyZWUoZW50cnkpOworCXJldHVybiBKU09OX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBK c29uUGFyc2VFcnJvclR5cGUKK2pzb25fdW5pcXVlX29iamVjdF9maWVsZF9zdGFydCh2b2lk ICpfc3RhdGUsIGNoYXIgKmZpZWxkLCBib29sIGlzbnVsbCkKK3sKKwlKc29uVW5pcXVlUGFy c2luZ1N0YXRlICpzdGF0ZSA9IF9zdGF0ZTsKKwlKc29uVW5pcXVlU3RhY2tFbnRyeSAqZW50 cnk7CisKKwlpZiAoIXN0YXRlLT51bmlxdWUpCisJCXJldHVybiBKU09OX1NVQ0NFU1M7CisK KwkvKiBmaW5kIGtleSBjb2xsaXNpb24gaW4gdGhlIGN1cnJlbnQgb2JqZWN0ICovCisJaWYg KGpzb25fdW5pcXVlX2NoZWNrX2tleSgmc3RhdGUtPmNoZWNrLCBmaWVsZCwgc3RhdGUtPnN0 YWNrLT5vYmplY3RfaWQpKQorCQlyZXR1cm4gSlNPTl9TVUNDRVNTOworCisJc3RhdGUtPnVu aXF1ZSA9IGZhbHNlOworCisJLyogcG9wIGFsbCBvYmplY3RzIGVudHJpZXMgKi8KKwl3aGls ZSAoKGVudHJ5ID0gc3RhdGUtPnN0YWNrKSkKKwl7CisJCXN0YXRlLT5zdGFjayA9IGVudHJ5 LT5wYXJlbnQ7CisJCXBmcmVlKGVudHJ5KTsKKwl9CisJcmV0dXJuIEpTT05fU1VDQ0VTUzsK K30KKworLyogVmFsaWRhdGUgSlNPTiB0ZXh0IGFuZCBhZGRpdGlvbmFsbHkgY2hlY2sga2V5 IHVuaXF1ZW5lc3MgKi8KK2Jvb2wKK2pzb25fdmFsaWRhdGUodGV4dCAqanNvbiwgYm9vbCBj aGVja191bmlxdWVfa2V5cywgYm9vbCB0aHJvd19lcnJvcikKK3sKKwlKc29uTGV4Q29udGV4 dCAqbGV4ID0gbWFrZUpzb25MZXhDb250ZXh0KGpzb24sIGNoZWNrX3VuaXF1ZV9rZXlzKTsK KwlKc29uU2VtQWN0aW9uIHVuaXF1ZVNlbUFjdGlvbiA9IHswfTsKKwlKc29uVW5pcXVlUGFy c2luZ1N0YXRlIHN0YXRlOworCUpzb25QYXJzZUVycm9yVHlwZSByZXN1bHQ7CisKKwlpZiAo Y2hlY2tfdW5pcXVlX2tleXMpCisJeworCQlzdGF0ZS5sZXggPSBsZXg7CisJCXN0YXRlLnN0 YWNrID0gTlVMTDsKKwkJc3RhdGUuaWRfY291bnRlciA9IDA7CisJCXN0YXRlLnVuaXF1ZSA9 IHRydWU7CisJCWpzb25fdW5pcXVlX2NoZWNrX2luaXQoJnN0YXRlLmNoZWNrKTsKKworCQl1 bmlxdWVTZW1BY3Rpb24uc2Vtc3RhdGUgPSAmc3RhdGU7CisJCXVuaXF1ZVNlbUFjdGlvbi5v YmplY3Rfc3RhcnQgPSBqc29uX3VuaXF1ZV9vYmplY3Rfc3RhcnQ7CisJCXVuaXF1ZVNlbUFj dGlvbi5vYmplY3RfZmllbGRfc3RhcnQgPSBqc29uX3VuaXF1ZV9vYmplY3RfZmllbGRfc3Rh cnQ7CisJCXVuaXF1ZVNlbUFjdGlvbi5vYmplY3RfZW5kID0ganNvbl91bmlxdWVfb2JqZWN0 X2VuZDsKKwl9CisKKwlyZXN1bHQgPSBwZ19wYXJzZV9qc29uKGxleCwgY2hlY2tfdW5pcXVl X2tleXMgPyAmdW5pcXVlU2VtQWN0aW9uIDogJm51bGxTZW1BY3Rpb24pOworCisJaWYgKHJl c3VsdCAhPSBKU09OX1NVQ0NFU1MpCisJeworCQlpZiAodGhyb3dfZXJyb3IpCisJCQlqc29u X2VycnNhdmVfZXJyb3IocmVzdWx0LCBsZXgsIE5VTEwpOworCisJCXJldHVybiBmYWxzZTsJ CQkvKiBpbnZhbGlkIGpzb24gKi8KKwl9CisKKwlpZiAoY2hlY2tfdW5pcXVlX2tleXMgJiYg IXN0YXRlLnVuaXF1ZSkKKwl7CisJCWlmICh0aHJvd19lcnJvcikKKwkJCWVyZXBvcnQoRVJS T1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfRFVQTElDQVRFX0pTT05fT0JKRUNUX0tFWV9W QUxVRSksCisJCQkJCSBlcnJtc2coImR1cGxpY2F0ZSBKU09OIG9iamVjdCBrZXkgdmFsdWUi KSkpOworCisJCXJldHVybiBmYWxzZTsJCQkvKiBub3QgdW5pcXVlIGtleXMgKi8KKwl9CisK KwlyZXR1cm4gdHJ1ZTsJCQkJLyogb2sgKi8KK30KKwogLyoKICAqIFNRTCBmdW5jdGlvbiBq c29uX3R5cGVvZihqc29uKSAtPiB0ZXh0CiAgKgpAQCAtMTY0NiwyMSArMTc1MSwxOCBAQCBl c2NhcGVfanNvbihTdHJpbmdJbmZvIGJ1ZiwgY29uc3QgY2hhciAqc3RyKQogRGF0dW0KIGpz b25fdHlwZW9mKFBHX0ZVTkNUSU9OX0FSR1MpCiB7Ci0JdGV4dAkgICAqanNvbjsKLQotCUpz b25MZXhDb250ZXh0ICpsZXg7Ci0JSnNvblRva2VuVHlwZSB0b2s7CisJdGV4dAkgICAqanNv biA9IFBHX0dFVEFSR19URVhUX1BQKDApOworCUpzb25MZXhDb250ZXh0ICpsZXggPSBtYWtl SnNvbkxleENvbnRleHQoanNvbiwgZmFsc2UpOwogCWNoYXIJICAgKnR5cGU7CisJSnNvblRv a2VuVHlwZSB0b2s7CiAJSnNvblBhcnNlRXJyb3JUeXBlIHJlc3VsdDsKIAotCWpzb24gPSBQ R19HRVRBUkdfVEVYVF9QUCgwKTsKLQlsZXggPSBtYWtlSnNvbkxleENvbnRleHQoanNvbiwg ZmFsc2UpOwotCi0JLyogTGV4IGV4YWN0bHkgb25lIHRva2VuIGZyb20gdGhlIGlucHV0IGFu ZCBjaGVjayBpdHMgdHlwZS4gKi8KKwkvKiBMZXggZXhhY3RseWkgb25lIHRva2VuIGZyb20g dGhlIGlucHV0IGFuZCBjaGVjayBpdHMgdHlwZS4gKi8KIAlyZXN1bHQgPSBqc29uX2xleChs ZXgpOwogCWlmIChyZXN1bHQgIT0gSlNPTl9TVUNDRVNTKQogCQlqc29uX2VycnNhdmVfZXJy b3IocmVzdWx0LCBsZXgsIE5VTEwpOwogCXRvayA9IGxleC0+dG9rZW5fdHlwZTsKKwogCXN3 aXRjaCAodG9rKQogCXsKIAkJY2FzZSBKU09OX1RPS0VOX09CSkVDVF9TVEFSVDoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9qc29uZnVuY3MuYwppbmRleCA3YTM2Zjc0ZGFkLi40YzVhYmFmZjI1IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jCkBAIC01NjY1LDMgKzU2NjUsMjMgQEAg dHJhbnNmb3JtX3N0cmluZ192YWx1ZXNfc2NhbGFyKHZvaWQgKnN0YXRlLCBjaGFyICp0b2tl biwgSnNvblRva2VuVHlwZSB0b2tlbnR5cGUKIAogCXJldHVybiBKU09OX1NVQ0NFU1M7CiB9 CisKK0pzb25Ub2tlblR5cGUKK2pzb25fZ2V0X2ZpcnN0X3Rva2VuKHRleHQgKmpzb24sIGJv b2wgdGhyb3dfZXJyb3IpCit7CisJSnNvbkxleENvbnRleHQgKmxleDsKKwlKc29uUGFyc2VF cnJvclR5cGUgcmVzdWx0OworCisJbGV4ID0gbWFrZUpzb25MZXhDb250ZXh0KGpzb24sIGZh bHNlKTsKKworCS8qIExleCBleGFjdGx5IG9uZSB0b2tlbiBmcm9tIHRoZSBpbnB1dCBhbmQg Y2hlY2sgaXRzIHR5cGUuICovCisJcmVzdWx0ID0ganNvbl9sZXgobGV4KTsKKworCWlmIChy ZXN1bHQgPT0gSlNPTl9TVUNDRVNTKQorCQlyZXR1cm4gbGV4LT50b2tlbl90eXBlOworCisJ aWYgKHRocm93X2Vycm9yKQorCQlqc29uX2VycnNhdmVfZXJyb3IocmVzdWx0LCBsZXgsIE5V TEwpOworCisJcmV0dXJuIEpTT05fVE9LRU5fSU5WQUxJRDsJLyogaW52YWxpZCBqc29uICov Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKaW5kZXggNTdhNDAzNjliNi4uYWQz ODRlOWE0NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwpAQCAtODI2Myw2ICs4 MjYzLDcgQEAgaXNTaW1wbGVOb2RlKE5vZGUgKm5vZGUsIE5vZGUgKnBhcmVudE5vZGUsIGlu dCBwcmV0dHlGbGFncykKIAkJY2FzZSBUX051bGxUZXN0OgogCQljYXNlIFRfQm9vbGVhblRl c3Q6CiAJCWNhc2UgVF9EaXN0aW5jdEV4cHI6CisJCWNhc2UgVF9Kc29uSXNQcmVkaWNhdGU6 CiAJCQlzd2l0Y2ggKG5vZGVUYWcocGFyZW50Tm9kZSkpCiAJCQl7CiAJCQkJY2FzZSBUX0Z1 bmNFeHByOgpAQCAtOTYwOCw2ICs5NjA5LDQyIEBAIGdldF9ydWxlX2V4cHIoTm9kZSAqbm9k ZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LAogCQkJZ2V0X2pzb25fY29uc3RydWN0b3Io KEpzb25Db25zdHJ1Y3RvckV4cHIgKikgbm9kZSwgY29udGV4dCwgZmFsc2UpOwogCQkJYnJl YWs7CiAKKwkJY2FzZSBUX0pzb25Jc1ByZWRpY2F0ZToKKwkJCXsKKwkJCQlKc29uSXNQcmVk aWNhdGUgKnByZWQgPSAoSnNvbklzUHJlZGljYXRlICopIG5vZGU7CisKKwkJCQlpZiAoIVBS RVRUWV9QQVJFTihjb250ZXh0KSkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4 dC0+YnVmLCAnKCcpOworCisJCQkJZ2V0X3J1bGVfZXhwcl9wYXJlbihwcmVkLT5leHByLCBj b250ZXh0LCB0cnVlLCBub2RlKTsKKworCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoY29u dGV4dC0+YnVmLCAiIElTIEpTT04iKTsKKworCQkJCS8qIFRPRE86IGhhbmRsZSBGT1JNQVQg Y2xhdXNlICovCisKKwkJCQlzd2l0Y2ggKHByZWQtPml0ZW1fdHlwZSkKKwkJCQl7CisJCQkJ CWNhc2UgSlNfVFlQRV9TQ0FMQVI6CisJCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGNv bnRleHQtPmJ1ZiwgIiBTQ0FMQVIiKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIEpTX1RZ UEVfQVJSQVk6CisJCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGNvbnRleHQtPmJ1Ziwg IiBBUlJBWSIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgSlNfVFlQRV9PQkpFQ1Q6CisJ CQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGNvbnRleHQtPmJ1ZiwgIiBPQkpFQ1QiKTsK KwkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJYnJlYWs7CisJCQkJfQorCisJ CQkJaWYgKHByZWQtPnVuaXF1ZV9rZXlzKQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KGNvbnRleHQtPmJ1ZiwgIiBXSVRIIFVOSVFVRSBLRVlTIik7CisKKwkJCQlpZiAoIVBSRVRU WV9QQVJFTihjb250ZXh0KSkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+ YnVmLCAnKScpOworCQkJfQorCQkJYnJlYWs7CisKIAkJY2FzZSBUX0xpc3Q6CiAJCQl7CiAJ CQkJY2hhcgkgICAqc2VwOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhl Y0V4cHIuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmgKaW5kZXggMjJmZDI1 NWY1YS4uMmYyNTFiN2Y4ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhl Y0V4cHIuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCkBAIC0yNDAs NiArMjQwLDcgQEAgdHlwZWRlZiBlbnVtIEV4cHJFdmFsT3AKIAlFRU9QX1dJTkRPV19GVU5D LAogCUVFT1BfU1VCUExBTiwKIAlFRU9QX0pTT05fQ09OU1RSVUNUT1IsCisJRUVPUF9JU19K U09OLAogCiAJLyogYWdncmVnYXRpb24gcmVsYXRlZCBub2RlcyAqLwogCUVFT1BfQUdHX1NU UklDVF9ERVNFUklBTElaRSwKQEAgLTY3NSw2ICs2NzYsMTIgQEAgdHlwZWRlZiBzdHJ1Y3Qg RXhwckV2YWxTdGVwCiAJCQlzdHJ1Y3QgSnNvbkNvbnN0cnVjdG9yRXhwclN0YXRlICpqY3N0 YXRlOwogCQl9CQkJanNvbl9jb25zdHJ1Y3RvcjsKIAorCQkvKiBmb3IgRUVPUF9JU19KU09O ICovCisJCXN0cnVjdAorCQl7CisJCQlKc29uSXNQcmVkaWNhdGUgKnByZWQ7CS8qIG9yaWdp bmFsIGV4cHJlc3Npb24gbm9kZSAqLworCQl9CQkJaXNfanNvbjsKKwogCX0JCQlkOwogfSBF eHByRXZhbFN0ZXA7CiAKQEAgLTc4Nyw2ICs3OTQsNyBAQCBleHRlcm4gdm9pZCBFeGVjRXZh bEhhc2hlZFNjYWxhckFycmF5T3AoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpv cCwKIGV4dGVybiB2b2lkIEV4ZWNFdmFsQ29uc3RyYWludE5vdE51bGwoRXhwclN0YXRlICpz dGF0ZSwgRXhwckV2YWxTdGVwICpvcCk7CiBleHRlcm4gdm9pZCBFeGVjRXZhbENvbnN0cmFp bnRDaGVjayhFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wKTsKIGV4dGVybiB2 b2lkIEV4ZWNFdmFsWG1sRXhwcihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9w KTsKK2V4dGVybiB2b2lkIEV4ZWNFdmFsSnNvbklzUHJlZGljYXRlKEV4cHJTdGF0ZSAqc3Rh dGUsIEV4cHJFdmFsU3RlcCAqb3ApOwogZXh0ZXJuIHZvaWQgRXhlY0V2YWxHcm91cGluZ0Z1 bmMoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCk7CiBleHRlcm4gdm9pZCBF eGVjRXZhbFN1YlBsYW4oRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKIAkJ CQkJCQlFeHByQ29udGV4dCAqZWNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv bm9kZXMvbWFrZWZ1bmNzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaAppbmRl eCAwYmVjNDczODQ5Li44MWY4YmY2YmFhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rl cy9tYWtlZnVuY3MuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaApAQCAt MTEwLDYgKzExMCw5IEBAIGV4dGVybiBKc29uRm9ybWF0ICptYWtlSnNvbkZvcm1hdChKc29u Rm9ybWF0VHlwZSB0eXBlLCBKc29uRW5jb2RpbmcgZW5jb2RpbmcsCiAJCQkJCQkJCSAgaW50 IGxvY2F0aW9uKTsKIGV4dGVybiBKc29uVmFsdWVFeHByICptYWtlSnNvblZhbHVlRXhwcihF eHByICpleHByLCBKc29uRm9ybWF0ICpmb3JtYXQpOwogZXh0ZXJuIE5vZGUgKm1ha2VKc29u S2V5VmFsdWUoTm9kZSAqa2V5LCBOb2RlICp2YWx1ZSk7CitleHRlcm4gTm9kZSAqbWFrZUpz b25Jc1ByZWRpY2F0ZShOb2RlICpleHByLCBKc29uRm9ybWF0ICpmb3JtYXQsCisJCQkJCQkJ CSBKc29uVmFsdWVUeXBlIGl0ZW1fdHlwZSwgYm9vbCB1bmlxdWVfa2V5cywKKwkJCQkJCQkJ IGludCBsb2NhdGlvbik7CiBleHRlcm4gSnNvbkVuY29kaW5nIG1ha2VKc29uRW5jb2Rpbmco Y2hhciAqbmFtZSk7CiAKICNlbmRpZgkJCQkJCQkvKiBNQUtFRlVOQ19IICovCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVz L3ByaW1ub2Rlcy5oCmluZGV4IGRlMTcwMWMyMTMuLmJiMmZlZGJhY2EgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVz L3ByaW1ub2Rlcy5oCkBAIC0xNTgzLDYgKzE1ODMsMzIgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNv bkNvbnN0cnVjdG9yRXhwcgogCWludAkJCWxvY2F0aW9uOwogfSBKc29uQ29uc3RydWN0b3JF eHByOwogCisvKgorICogSnNvblZhbHVlVHlwZSAtCisgKgkJcmVwcmVzZW50YXRpb24gb2Yg SlNPTiBpdGVtIHR5cGUgaW4gSVMgSlNPTiBwcmVkaWNhdGUKKyAqLwordHlwZWRlZiBlbnVt IEpzb25WYWx1ZVR5cGUKK3sKKwlKU19UWVBFX0FOWSwJCQkJLyogSVMgSlNPTiBbVkFMVUVd ICovCisJSlNfVFlQRV9PQkpFQ1QsCQkJCS8qIElTIEpTT04gT0JKRUNUICovCisJSlNfVFlQ RV9BUlJBWSwJCQkJLyogSVMgSlNPTiBBUlJBWSAqLworCUpTX1RZUEVfU0NBTEFSCQkJCS8q IElTIEpTT04gU0NBTEFSICovCit9IEpzb25WYWx1ZVR5cGU7CisKKy8qCisgKiBKc29uSXNQ cmVkaWNhdGUgLQorICoJCXJlcHJlc2VudGF0aW9uIG9mIElTIEpTT04gcHJlZGljYXRlCisg Ki8KK3R5cGVkZWYgc3RydWN0IEpzb25Jc1ByZWRpY2F0ZQoreworCU5vZGVUYWcJCXR5cGU7 CisJTm9kZQkgICAqZXhwcjsJCQkvKiBzdWJqZWN0IGV4cHJlc3Npb24gKi8KKwlKc29uRm9y bWF0ICpmb3JtYXQ7CQkJLyogRk9STUFUIGNsYXVzZSwgaWYgc3BlY2lmaWVkICovCisJSnNv blZhbHVlVHlwZSBpdGVtX3R5cGU7CS8qIEpTT04gaXRlbSB0eXBlICovCisJYm9vbAkJdW5p cXVlX2tleXM7CS8qIGNoZWNrIGtleSB1bmlxdWVuZXNzPyAqLworCWludAkJCWxvY2F0aW9u OwkJLyogdG9rZW4gbG9jYXRpb24sIG9yIC0xIGlmIHVua25vd24gKi8KK30gSnNvbklzUHJl ZGljYXRlOworCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKiBOdWxsVGVzdAogICoKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaCBiL3NyYy9pbmNsdWRlL3BhcnNl ci9rd2xpc3QuaAppbmRleCA4NjhmMzg5YTA0Li5mNWIyZTYxY2E1IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvcGFyc2VyL2t3 bGlzdC5oCkBAIC0zNzYsNiArMzc2LDcgQEAgUEdfS0VZV09SRCgicm93IiwgUk9XLCBDT0xf TkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgicm93cyIsIFJPV1MsIFVO UkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInJ1bGUiLCBSVUxF LCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJzYXZlcG9p bnQiLCBTQVZFUE9JTlQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tF WVdPUkQoInNjYWxhciIsIFNDQUxBUiwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVM KQogUEdfS0VZV09SRCgic2NoZW1hIiwgU0NIRU1BLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJB UkVfTEFCRUwpCiBQR19LRVlXT1JEKCJzY2hlbWFzIiwgU0NIRU1BUywgVU5SRVNFUlZFRF9L RVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgic2Nyb2xsIiwgU0NST0xMLCBVTlJF U0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91 dGlscy9qc29uLmggYi9zcmMvaW5jbHVkZS91dGlscy9qc29uLmgKaW5kZXggYjc1ZjdkOTI5 ZC4uMzVhOWE1NTQ1ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbi5oCisr KyBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb24uaApAQCAtMjYsNSArMjYsNiBAQCBleHRlcm4g RGF0dW0ganNvbl9idWlsZF9vYmplY3Rfd29ya2VyKGludCBuYXJncywgRGF0dW0gKmFyZ3Ms IGJvb2wgKm51bGxzLAogCQkJCQkJCQkJICBib29sIHVuaXF1ZV9rZXlzKTsKIGV4dGVybiBE YXR1bSBqc29uX2J1aWxkX2FycmF5X3dvcmtlcihpbnQgbmFyZ3MsIERhdHVtICphcmdzLCBi b29sICpudWxscywKIAkJCQkJCQkJCSBPaWQgKnR5cGVzLCBib29sIGFic2VudF9vbl9udWxs KTsKK2V4dGVybiBib29sIGpzb25fdmFsaWRhdGUodGV4dCAqanNvbiwgYm9vbCBjaGVja191 bmlxdWVfa2V5cywgYm9vbCB0aHJvd19lcnJvcik7CiAKICNlbmRpZgkJCQkJCQkvKiBKU09O X0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25mdW5jcy5oIGIvc3Jj L2luY2x1ZGUvdXRpbHMvanNvbmZ1bmNzLmgKaW5kZXggZmM2MTBmNjUwMy4uYTg1MjAzZDRh NCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbmZ1bmNzLmgKKysrIGIvc3Jj L2luY2x1ZGUvdXRpbHMvanNvbmZ1bmNzLmgKQEAgLTUwLDYgKzUwLDkgQEAgZXh0ZXJuIGJv b2wgcGdfcGFyc2VfanNvbl9vcl9lcnJzYXZlKEpzb25MZXhDb250ZXh0ICpsZXgsIEpzb25T ZW1BY3Rpb24gKnNlbSwKIGV4dGVybiB2b2lkIGpzb25fZXJyc2F2ZV9lcnJvcihKc29uUGFy c2VFcnJvclR5cGUgZXJyb3IsIEpzb25MZXhDb250ZXh0ICpsZXgsCiAJCQkJCQkJICAgc3Ry dWN0IE5vZGUgKmVzY29udGV4dCk7CiAKKy8qIGdldCBmaXJzdCBKU09OIHRva2VuICovCitl eHRlcm4gSnNvblRva2VuVHlwZSBqc29uX2dldF9maXJzdF90b2tlbih0ZXh0ICpqc29uLCBi b29sIHRocm93X2Vycm9yKTsKKwogZXh0ZXJuIHVpbnQzMiBwYXJzZV9qc29uYl9pbmRleF9m bGFncyhKc29uYiAqamIpOwogZXh0ZXJuIHZvaWQgaXRlcmF0ZV9qc29uYl92YWx1ZXMoSnNv bmIgKmpiLCB1aW50MzIgZmxhZ3MsIHZvaWQgKnN0YXRlLAogCQkJCQkJCQkgSnNvbkl0ZXJh dGVTdHJpbmdWYWx1ZXNBY3Rpb24gYWN0aW9uKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc3FsanNvbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3NxbGpzb24ub3V0CmluZGV4IGNhODZjNWQ5YTEuLjQzOWU3ZmFmNzggMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3FsanNvbi5vdXQKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zcWxqc29uLm91dApAQCAtNzQ0LDMgKzc0NCwyMDEgQEAgQ1JF QVRFIE9SIFJFUExBQ0UgVklFVyBwdWJsaWMuanNvbl9hcnJheV9zdWJxdWVyeV92aWV3IEFT CiAgICAgICAgICAgIEZST00gKCBTRUxFQ1QgZm9vLmkKICAgICAgICAgICAgICAgICAgICBG Uk9NICggVkFMVUVTICgxKSwgKDIpLCAoTlVMTDo6aW50ZWdlciksICg0KSkgZm9vKGkpKSBx KGEpKSBBUyAianNvbl9hcnJheSIKIERST1AgVklFVyBqc29uX2FycmF5X3N1YnF1ZXJ5X3Zp ZXc7CistLSBJUyBKU09OIHByZWRpY2F0ZQorU0VMRUNUIE5VTEwgSVMgSlNPTjsKKyA/Y29s dW1uPyAKKy0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIE5VTEwgSVMgTk9UIEpT T047CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBOVUxM Ojpqc29uIElTIEpTT047CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgCisoMSByb3cpCisK K1NFTEVDVCBOVUxMOjpqc29uYiBJUyBKU09OOworID9jb2x1bW4/IAorLS0tLS0tLS0tLQor IAorKDEgcm93KQorCitTRUxFQ1QgTlVMTDo6dGV4dCBJUyBKU09OOworID9jb2x1bW4/IAor LS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgTlVMTDo6Ynl0ZWEgSVMgSlNPTjsK KyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIE5VTEw6Omlu dCBJUyBKU09OOworRVJST1I6ICBjYW5ub3QgdXNlIHR5cGUgaW50ZWdlciBpbiBJUyBKU09O IHByZWRpY2F0ZQorU0VMRUNUICcnIElTIEpTT047CisgP2NvbHVtbj8gCistLS0tLS0tLS0t CisgZgorKDEgcm93KQorCitTRUxFQ1QgYnl0ZWEgJ1x4MDAnIElTIEpTT047CitFUlJPUjog IGludmFsaWQgYnl0ZSBzZXF1ZW5jZSBmb3IgZW5jb2RpbmcgIlVURjgiOiAweDAwCitDUkVB VEUgVEFCTEUgdGVzdF9pc19qc29uIChqcyB0ZXh0KTsKK0lOU0VSVCBJTlRPIHRlc3RfaXNf anNvbiBWQUxVRVMKKyAoTlVMTCksCisgKCcnKSwKKyAoJzEyMycpLAorICgnImFhYSAiJyks CisgKCd0cnVlJyksCisgKCdudWxsJyksCisgKCdbXScpLAorICgnWzEsICIyIiwge31dJyks CisgKCd7fScpLAorICgneyAiYSI6IDEsICJiIjogbnVsbCB9JyksCisgKCd7ICJhIjogMSwg ImEiOiBudWxsIH0nKSwKKyAoJ3sgImEiOiAxLCAiYiI6IFt7ICJhIjogMSB9LCB7ICJhIjog MiB9XSB9JyksCisgKCd7ICJhIjogMSwgImIiOiBbeyAiYSI6IDEsICJiIjogMCwgImEiOiAy IH1dIH0nKSwKKyAoJ2FhYScpLAorICgne2E6MX0nKSwKKyAoJ1siYSIsXScpOworU0VMRUNU CisJanMsCisJanMgSVMgSlNPTiAiSVMgSlNPTiIsCisJanMgSVMgTk9UIEpTT04gIklTIE5P VCBKU09OIiwKKwlqcyBJUyBKU09OIFZBTFVFICJJUyBWQUxVRSIsCisJanMgSVMgSlNPTiBP QkpFQ1QgIklTIE9CSkVDVCIsCisJanMgSVMgSlNPTiBBUlJBWSAiSVMgQVJSQVkiLAorCWpz IElTIEpTT04gU0NBTEFSICJJUyBTQ0FMQVIiLAorCWpzIElTIEpTT04gV0lUSE9VVCBVTklR VUUgS0VZUyAiV0lUSE9VVCBVTklRVUUiLAorCWpzIElTIEpTT04gV0lUSCBVTklRVUUgS0VZ UyAiV0lUSCBVTklRVUUiCitGUk9NCisJdGVzdF9pc19qc29uOworICAgICAgICAgICAgICAg ICAgICAgIGpzICAgICAgICAgICAgICAgICAgICAgICB8IElTIEpTT04gfCBJUyBOT1QgSlNP TiB8IElTIFZBTFVFIHwgSVMgT0JKRUNUIHwgSVMgQVJSQVkgfCBJUyBTQ0FMQVIgfCBXSVRI T1VUIFVOSVFVRSB8IFdJVEggVU5JUVVFIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICAg IHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICB8IAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGYgICAgICAgfCB0ICAg ICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAg fCBmICAgICAgICAgICAgICB8IGYKKyAxMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgICAgfCB0ICAgICAgICB8IGYg ICAgICAgICB8IGYgICAgICAgIHwgdCAgICAgICAgIHwgdCAgICAgICAgICAgICAgfCB0Cisg ImFhYSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdCAgICAg ICB8IGYgICAgICAgICAgIHwgdCAgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IHQg ICAgICAgICB8IHQgICAgICAgICAgICAgIHwgdAorIHRydWUgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgICB8IHQgICAg ICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCB0ICAgICAgICAgfCB0ICAgICAgICAgICAg ICB8IHQKKyBudWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCB0ICAgICAgIHwgZiAgICAgICAgICAgfCB0ICAgICAgICB8IGYgICAgICAgICB8IGYgICAg ICAgIHwgdCAgICAgICAgIHwgdCAgICAgICAgICAgICAgfCB0CisgW10gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICAg IHwgdCAgICAgICAgfCBmICAgICAgICAgfCB0ICAgICAgICB8IGYgICAgICAgICB8IHQgICAg ICAgICAgICAgIHwgdAorIFsxLCAiMiIsIHt9XSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgICB8IHQgICAgICAgIHwgZiAgICAgICAg IHwgdCAgICAgICAgfCBmICAgICAgICAgfCB0ICAgICAgICAgICAgICB8IHQKKyB7fSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICAgICAgfCB0ICAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAg IHwgdCAgICAgICAgICAgICAgfCB0CisgeyAiYSI6IDEsICJiIjogbnVsbCB9ICAgICAgICAg ICAgICAgICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICAgIHwgdCAgICAgICAgfCB0 ICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICB8IHQgICAgICAgICAgICAgIHwgdAor IHsgImEiOiAxLCAiYSI6IG51bGwgfSAgICAgICAgICAgICAgICAgICAgICAgICB8IHQgICAg ICAgfCBmICAgICAgICAgICB8IHQgICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBm ICAgICAgICAgfCB0ICAgICAgICAgICAgICB8IGYKKyB7ICJhIjogMSwgImIiOiBbeyAiYSI6 IDEgfSwgeyAiYSI6IDIgfV0gfSAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgICAgfCB0ICAg ICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgIHwgdCAgICAgICAgICAg ICAgfCB0CisgeyAiYSI6IDEsICJiIjogW3sgImEiOiAxLCAiYiI6IDAsICJhIjogMiB9XSB9 IHwgdCAgICAgICB8IGYgICAgICAgICAgIHwgdCAgICAgICAgfCB0ICAgICAgICAgfCBmICAg ICAgICB8IGYgICAgICAgICB8IHQgICAgICAgICAgICAgIHwgZgorIGFhYSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGYgICAgICAgfCB0ICAgICAgICAg ICB8IGYgICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgfCBmICAg ICAgICAgICAgICB8IGYKKyB7YToxfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCBmICAgICAgIHwgdCAgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAg ICB8IGYgICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgICAgICAgfCBmCisgWyJhIixd ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZiAgICAgICB8IHQg ICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAg ICB8IGYgICAgICAgICAgICAgIHwgZgorKDE2IHJvd3MpCisKK1NFTEVDVAorCWpzLAorCWpz IElTIEpTT04gIklTIEpTT04iLAorCWpzIElTIE5PVCBKU09OICJJUyBOT1QgSlNPTiIsCisJ anMgSVMgSlNPTiBWQUxVRSAiSVMgVkFMVUUiLAorCWpzIElTIEpTT04gT0JKRUNUICJJUyBP QkpFQ1QiLAorCWpzIElTIEpTT04gQVJSQVkgIklTIEFSUkFZIiwKKwlqcyBJUyBKU09OIFND QUxBUiAiSVMgU0NBTEFSIiwKKwlqcyBJUyBKU09OIFdJVEhPVVQgVU5JUVVFIEtFWVMgIldJ VEhPVVQgVU5JUVVFIiwKKwlqcyBJUyBKU09OIFdJVEggVU5JUVVFIEtFWVMgIldJVEggVU5J UVVFIgorRlJPTQorCShTRUxFQ1QganM6Ompzb24gRlJPTSB0ZXN0X2lzX2pzb24gV0hFUkUg anMgSVMgSlNPTikgZm9vKGpzKTsKKyAgICAgICAgICAgICAgICAgICAgICBqcyAgICAgICAg ICAgICAgICAgICAgICAgfCBJUyBKU09OIHwgSVMgTk9UIEpTT04gfCBJUyBWQUxVRSB8IElT IE9CSkVDVCB8IElTIEFSUkFZIHwgSVMgU0NBTEFSIHwgV0lUSE9VVCBVTklRVUUgfCBXSVRI IFVOSVFVRSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KKyAx MjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICAgICAgfCB0ICAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgdCAg ICAgICAgIHwgdCAgICAgICAgICAgICAgfCB0CisgImFhYSAiICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICAgIHwgdCAgICAg ICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IHQgICAgICAgICB8IHQgICAgICAgICAgICAg IHwgdAorIHRydWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 IHQgICAgICAgfCBmICAgICAgICAgICB8IHQgICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAg ICAgfCB0ICAgICAgICAgfCB0ICAgICAgICAgICAgICB8IHQKKyBudWxsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgICAg fCB0ICAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgdCAgICAgICAgIHwgdCAgICAg ICAgICAgICAgfCB0CisgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICAgIHwgdCAgICAgICAgfCBmICAgICAgICAg fCB0ICAgICAgICB8IGYgICAgICAgICB8IHQgICAgICAgICAgICAgIHwgdAorIFsxLCAiMiIs IHt9XSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHQgICAgICAgfCBmICAg ICAgICAgICB8IHQgICAgICAgIHwgZiAgICAgICAgIHwgdCAgICAgICAgfCBmICAgICAgICAg fCB0ICAgICAgICAgICAgICB8IHQKKyB7fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgICAgfCB0ICAgICAgICB8IHQg ICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgIHwgdCAgICAgICAgICAgICAgfCB0Cisg eyAiYSI6IDEsICJiIjogbnVsbCB9ICAgICAgICAgICAgICAgICAgICAgICAgIHwgdCAgICAg ICB8IGYgICAgICAgICAgIHwgdCAgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYg ICAgICAgICB8IHQgICAgICAgICAgICAgIHwgdAorIHsgImEiOiAxLCAiYSI6IG51bGwgfSAg ICAgICAgICAgICAgICAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgICB8IHQgICAg ICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgfCB0ICAgICAgICAgICAg ICB8IGYKKyB7ICJhIjogMSwgImIiOiBbeyAiYSI6IDEgfSwgeyAiYSI6IDIgfV0gfSAgICAg fCB0ICAgICAgIHwgZiAgICAgICAgICAgfCB0ICAgICAgICB8IHQgICAgICAgICB8IGYgICAg ICAgIHwgZiAgICAgICAgIHwgdCAgICAgICAgICAgICAgfCB0CisgeyAiYSI6IDEsICJiIjog W3sgImEiOiAxLCAiYiI6IDAsICJhIjogMiB9XSB9IHwgdCAgICAgICB8IGYgICAgICAgICAg IHwgdCAgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICB8IHQgICAg ICAgICAgICAgIHwgZgorKDExIHJvd3MpCisKK1NFTEVDVAorCWpzMCwKKwlqcyBJUyBKU09O ICJJUyBKU09OIiwKKwlqcyBJUyBOT1QgSlNPTiAiSVMgTk9UIEpTT04iLAorCWpzIElTIEpT T04gVkFMVUUgIklTIFZBTFVFIiwKKwlqcyBJUyBKU09OIE9CSkVDVCAiSVMgT0JKRUNUIiwK KwlqcyBJUyBKU09OIEFSUkFZICJJUyBBUlJBWSIsCisJanMgSVMgSlNPTiBTQ0FMQVIgIklT IFNDQUxBUiIsCisJanMgSVMgSlNPTiBXSVRIT1VUIFVOSVFVRSBLRVlTICJXSVRIT1VUIFVO SVFVRSIsCisJanMgSVMgSlNPTiBXSVRIIFVOSVFVRSBLRVlTICJXSVRIIFVOSVFVRSIKK0ZS T00KKwkoU0VMRUNUIGpzLCBqczo6Ynl0ZWEgRlJPTSB0ZXN0X2lzX2pzb24gV0hFUkUganMg SVMgSlNPTikgZm9vKGpzMCwganMpOworICAgICAgICAgICAgICAgICAgICAgIGpzMCAgICAg ICAgICAgICAgICAgICAgICB8IElTIEpTT04gfCBJUyBOT1QgSlNPTiB8IElTIFZBTFVFIHwg SVMgT0JKRUNUIHwgSVMgQVJSQVkgfCBJUyBTQ0FMQVIgfCBXSVRIT1VUIFVOSVFVRSB8IFdJ VEggVU5JUVVFIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQor IDEyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHQgICAg ICAgfCBmICAgICAgICAgICB8IHQgICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCB0 ICAgICAgICAgfCB0ICAgICAgICAgICAgICB8IHQKKyAiYWFhICIgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgICAgfCB0ICAg ICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgdCAgICAgICAgIHwgdCAgICAgICAgICAg ICAgfCB0CisgdHJ1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgdCAgICAgICB8IGYgICAgICAgICAgIHwgdCAgICAgICAgfCBmICAgICAgICAgfCBmICAg ICAgICB8IHQgICAgICAgICB8IHQgICAgICAgICAgICAgIHwgdAorIG51bGwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAg ICB8IHQgICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCB0ICAgICAgICAgfCB0ICAg ICAgICAgICAgICB8IHQKKyBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgICAgfCB0ICAgICAgICB8IGYgICAgICAg ICB8IHQgICAgICAgIHwgZiAgICAgICAgIHwgdCAgICAgICAgICAgICAgfCB0CisgWzEsICIy Iiwge31dICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdCAgICAgICB8IGYg ICAgICAgICAgIHwgdCAgICAgICAgfCBmICAgICAgICAgfCB0ICAgICAgICB8IGYgICAgICAg ICB8IHQgICAgICAgICAgICAgIHwgdAorIHt9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgICB8IHQgICAgICAgIHwg dCAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgfCB0ICAgICAgICAgICAgICB8IHQK KyB7ICJhIjogMSwgImIiOiBudWxsIH0gICAgICAgICAgICAgICAgICAgICAgICAgfCB0ICAg ICAgIHwgZiAgICAgICAgICAgfCB0ICAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwg ZiAgICAgICAgIHwgdCAgICAgICAgICAgICAgfCB0CisgeyAiYSI6IDEsICJhIjogbnVsbCB9 ICAgICAgICAgICAgICAgICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICAgIHwgdCAg ICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICB8IHQgICAgICAgICAg ICAgIHwgZgorIHsgImEiOiAxLCAiYiI6IFt7ICJhIjogMSB9LCB7ICJhIjogMiB9XSB9ICAg ICB8IHQgICAgICAgfCBmICAgICAgICAgICB8IHQgICAgICAgIHwgdCAgICAgICAgIHwgZiAg ICAgICAgfCBmICAgICAgICAgfCB0ICAgICAgICAgICAgICB8IHQKKyB7ICJhIjogMSwgImIi OiBbeyAiYSI6IDEsICJiIjogMCwgImEiOiAyIH1dIH0gfCB0ICAgICAgIHwgZiAgICAgICAg ICAgfCB0ICAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgIHwgdCAg ICAgICAgICAgICAgfCBmCisoMTEgcm93cykKKworU0VMRUNUCisJanMsCisJanMgSVMgSlNP TiAiSVMgSlNPTiIsCisJanMgSVMgTk9UIEpTT04gIklTIE5PVCBKU09OIiwKKwlqcyBJUyBK U09OIFZBTFVFICJJUyBWQUxVRSIsCisJanMgSVMgSlNPTiBPQkpFQ1QgIklTIE9CSkVDVCIs CisJanMgSVMgSlNPTiBBUlJBWSAiSVMgQVJSQVkiLAorCWpzIElTIEpTT04gU0NBTEFSICJJ UyBTQ0FMQVIiLAorCWpzIElTIEpTT04gV0lUSE9VVCBVTklRVUUgS0VZUyAiV0lUSE9VVCBV TklRVUUiLAorCWpzIElTIEpTT04gV0lUSCBVTklRVUUgS0VZUyAiV0lUSCBVTklRVUUiCitG Uk9NCisJKFNFTEVDVCBqczo6anNvbmIgRlJPTSB0ZXN0X2lzX2pzb24gV0hFUkUganMgSVMg SlNPTikgZm9vKGpzKTsKKyAgICAgICAgICAgICAgICAganMgICAgICAgICAgICAgICAgICB8 IElTIEpTT04gfCBJUyBOT1QgSlNPTiB8IElTIFZBTFVFIHwgSVMgT0JKRUNUIHwgSVMgQVJS QVkgfCBJUyBTQ0FMQVIgfCBXSVRIT1VUIFVOSVFVRSB8IFdJVEggVU5JUVVFIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgMTIzICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgICAgfCB0ICAgICAgICB8IGYgICAgICAg ICB8IGYgICAgICAgIHwgdCAgICAgICAgIHwgdCAgICAgICAgICAgICAgfCB0CisgImFhYSAi ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgICAg fCB0ICAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgdCAgICAgICAgIHwgdCAgICAg ICAgICAgICAgfCB0CisgdHJ1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICAgICAgfCB0ICAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAg IHwgdCAgICAgICAgIHwgdCAgICAgICAgICAgICAgfCB0CisgbnVsbCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgICAgfCB0ICAgICAgICB8 IGYgICAgICAgICB8IGYgICAgICAgIHwgdCAgICAgICAgIHwgdCAgICAgICAgICAgICAgfCB0 CisgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICAgICAgfCB0ICAgICAgICB8IGYgICAgICAgICB8IHQgICAgICAgIHwgZiAgICAgICAg IHwgdCAgICAgICAgICAgICAgfCB0CisgWzEsICIyIiwge31dICAgICAgICAgICAgICAgICAg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgICAgfCB0ICAgICAgICB8IGYgICAgICAgICB8 IHQgICAgICAgIHwgZiAgICAgICAgIHwgdCAgICAgICAgICAgICAgfCB0Cisge30gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgICAgfCB0 ICAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgIHwgdCAgICAgICAg ICAgICAgfCB0CisgeyJhIjogMSwgImIiOiBudWxsfSAgICAgICAgICAgICAgICAgfCB0ICAg ICAgIHwgZiAgICAgICAgICAgfCB0ICAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwg ZiAgICAgICAgIHwgdCAgICAgICAgICAgICAgfCB0CisgeyJhIjogbnVsbH0gICAgICAgICAg ICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgICAgfCB0ICAgICAgICB8IHQg ICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgIHwgdCAgICAgICAgICAgICAgfCB0Cisg eyJhIjogMSwgImIiOiBbeyJhIjogMX0sIHsiYSI6IDJ9XX0gfCB0ICAgICAgIHwgZiAgICAg ICAgICAgfCB0ICAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgIHwg dCAgICAgICAgICAgICAgfCB0CisgeyJhIjogMSwgImIiOiBbeyJhIjogMiwgImIiOiAwfV19 ICAgfCB0ICAgICAgIHwgZiAgICAgICAgICAgfCB0ICAgICAgICB8IHQgICAgICAgICB8IGYg ICAgICAgIHwgZiAgICAgICAgIHwgdCAgICAgICAgICAgICAgfCB0CisoMTEgcm93cykKKwor LS0gVGVzdCBJUyBKU09OIGRlcGFyc2luZworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZG KQorU0VMRUNUICcxJyBJUyBKU09OIEFTICJhbnkiLCAoJzEnIHx8IGkpIElTIEpTT04gU0NB TEFSIEFTICJzY2FsYXIiLCAnW10nIElTIE5PVCBKU09OIEFSUkFZIEFTICJhcnJheSIsICd7 fScgSVMgSlNPTiBPQkpFQ1QgV0lUSCBVTklRVUUgQVMgIm9iamVjdCIgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMSwgMykgaTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBGdW5jdGlvbiBTY2FuIG9uIHBnX2NhdGFsb2cuZ2VuZXJhdGVfc2VyaWVzIGkK KyAgIE91dHB1dDogKCcxJzo6dGV4dCBJUyBKU09OKSwgKCgnMSc6OnRleHQgfHwgKGkpOjp0 ZXh0KSBJUyBKU09OIFNDQUxBUiksIChOT1QgKCdbXSc6OnRleHQgSVMgSlNPTiBBUlJBWSkp LCAoJ3t9Jzo6dGV4dCBJUyBKU09OIE9CSkVDVCBXSVRIIFVOSVFVRSBLRVlTKQorICAgRnVu Y3Rpb24gQ2FsbDogZ2VuZXJhdGVfc2VyaWVzKDEsIDMpCisoMyByb3dzKQorCitDUkVBVEUg VklFVyBpc19qc29uX3ZpZXcgQVMKK1NFTEVDVCAnMScgSVMgSlNPTiBBUyAiYW55IiwgKCcx JyB8fCBpKSBJUyBKU09OIFNDQUxBUiBBUyAic2NhbGFyIiwgJ1tdJyBJUyBOT1QgSlNPTiBB UlJBWSBBUyAiYXJyYXkiLCAne30nIElTIEpTT04gT0JKRUNUIFdJVEggVU5JUVVFIEFTICJv YmplY3QiIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMpIGk7Citcc3YgaXNfanNvbl92aWV3 CitDUkVBVEUgT1IgUkVQTEFDRSBWSUVXIHB1YmxpYy5pc19qc29uX3ZpZXcgQVMKKyBTRUxF Q1QgJzEnOjp0ZXh0IElTIEpTT04gQVMgImFueSIsCisgICAgKCcxJzo6dGV4dCB8fCBpKSBJ UyBKU09OIFNDQUxBUiBBUyBzY2FsYXIsCisgICAgTk9UICdbXSc6OnRleHQgSVMgSlNPTiBB UlJBWSBBUyAiYXJyYXkiLAorICAgICd7fSc6OnRleHQgSVMgSlNPTiBPQkpFQ1QgV0lUSCBV TklRVUUgS0VZUyBBUyBvYmplY3QKKyAgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMpIGko aSkKK0RST1AgVklFVyBpc19qc29uX3ZpZXc7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9zcWxqc29uLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpzb24uc3Fs CmluZGV4IGFhZWYyZDhhYWIuLjRmM2MwNmRjYjMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL3NxbGpzb24uc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpz b24uc3FsCkBAIC0yODAsMyArMjgwLDk5IEBAIFNFTEVDVCBKU09OX0FSUkFZKFNFTEVDVCBp IEZST00gKFZBTFVFUyAoMSksICgyKSwgKE5VTEwpLCAoNCkpIGZvbyhpKSBSRVRVUk5JTkcK IFxzdiBqc29uX2FycmF5X3N1YnF1ZXJ5X3ZpZXcKIAogRFJPUCBWSUVXIGpzb25fYXJyYXlf c3VicXVlcnlfdmlldzsKKworLS0gSVMgSlNPTiBwcmVkaWNhdGUKK1NFTEVDVCBOVUxMIElT IEpTT047CitTRUxFQ1QgTlVMTCBJUyBOT1QgSlNPTjsKK1NFTEVDVCBOVUxMOjpqc29uIElT IEpTT047CitTRUxFQ1QgTlVMTDo6anNvbmIgSVMgSlNPTjsKK1NFTEVDVCBOVUxMOjp0ZXh0 IElTIEpTT047CitTRUxFQ1QgTlVMTDo6Ynl0ZWEgSVMgSlNPTjsKK1NFTEVDVCBOVUxMOjpp bnQgSVMgSlNPTjsKKworU0VMRUNUICcnIElTIEpTT047CisKK1NFTEVDVCBieXRlYSAnXHgw MCcgSVMgSlNPTjsKKworQ1JFQVRFIFRBQkxFIHRlc3RfaXNfanNvbiAoanMgdGV4dCk7CisK K0lOU0VSVCBJTlRPIHRlc3RfaXNfanNvbiBWQUxVRVMKKyAoTlVMTCksCisgKCcnKSwKKyAo JzEyMycpLAorICgnImFhYSAiJyksCisgKCd0cnVlJyksCisgKCdudWxsJyksCisgKCdbXScp LAorICgnWzEsICIyIiwge31dJyksCisgKCd7fScpLAorICgneyAiYSI6IDEsICJiIjogbnVs bCB9JyksCisgKCd7ICJhIjogMSwgImEiOiBudWxsIH0nKSwKKyAoJ3sgImEiOiAxLCAiYiI6 IFt7ICJhIjogMSB9LCB7ICJhIjogMiB9XSB9JyksCisgKCd7ICJhIjogMSwgImIiOiBbeyAi YSI6IDEsICJiIjogMCwgImEiOiAyIH1dIH0nKSwKKyAoJ2FhYScpLAorICgne2E6MX0nKSwK KyAoJ1siYSIsXScpOworCitTRUxFQ1QKKwlqcywKKwlqcyBJUyBKU09OICJJUyBKU09OIiwK KwlqcyBJUyBOT1QgSlNPTiAiSVMgTk9UIEpTT04iLAorCWpzIElTIEpTT04gVkFMVUUgIklT IFZBTFVFIiwKKwlqcyBJUyBKU09OIE9CSkVDVCAiSVMgT0JKRUNUIiwKKwlqcyBJUyBKU09O IEFSUkFZICJJUyBBUlJBWSIsCisJanMgSVMgSlNPTiBTQ0FMQVIgIklTIFNDQUxBUiIsCisJ anMgSVMgSlNPTiBXSVRIT1VUIFVOSVFVRSBLRVlTICJXSVRIT1VUIFVOSVFVRSIsCisJanMg SVMgSlNPTiBXSVRIIFVOSVFVRSBLRVlTICJXSVRIIFVOSVFVRSIKK0ZST00KKwl0ZXN0X2lz X2pzb247CisKK1NFTEVDVAorCWpzLAorCWpzIElTIEpTT04gIklTIEpTT04iLAorCWpzIElT IE5PVCBKU09OICJJUyBOT1QgSlNPTiIsCisJanMgSVMgSlNPTiBWQUxVRSAiSVMgVkFMVUUi LAorCWpzIElTIEpTT04gT0JKRUNUICJJUyBPQkpFQ1QiLAorCWpzIElTIEpTT04gQVJSQVkg IklTIEFSUkFZIiwKKwlqcyBJUyBKU09OIFNDQUxBUiAiSVMgU0NBTEFSIiwKKwlqcyBJUyBK U09OIFdJVEhPVVQgVU5JUVVFIEtFWVMgIldJVEhPVVQgVU5JUVVFIiwKKwlqcyBJUyBKU09O IFdJVEggVU5JUVVFIEtFWVMgIldJVEggVU5JUVVFIgorRlJPTQorCShTRUxFQ1QganM6Ompz b24gRlJPTSB0ZXN0X2lzX2pzb24gV0hFUkUganMgSVMgSlNPTikgZm9vKGpzKTsKKworU0VM RUNUCisJanMwLAorCWpzIElTIEpTT04gIklTIEpTT04iLAorCWpzIElTIE5PVCBKU09OICJJ UyBOT1QgSlNPTiIsCisJanMgSVMgSlNPTiBWQUxVRSAiSVMgVkFMVUUiLAorCWpzIElTIEpT T04gT0JKRUNUICJJUyBPQkpFQ1QiLAorCWpzIElTIEpTT04gQVJSQVkgIklTIEFSUkFZIiwK KwlqcyBJUyBKU09OIFNDQUxBUiAiSVMgU0NBTEFSIiwKKwlqcyBJUyBKU09OIFdJVEhPVVQg VU5JUVVFIEtFWVMgIldJVEhPVVQgVU5JUVVFIiwKKwlqcyBJUyBKU09OIFdJVEggVU5JUVVF IEtFWVMgIldJVEggVU5JUVVFIgorRlJPTQorCShTRUxFQ1QganMsIGpzOjpieXRlYSBGUk9N IHRlc3RfaXNfanNvbiBXSEVSRSBqcyBJUyBKU09OKSBmb28oanMwLCBqcyk7CisKK1NFTEVD VAorCWpzLAorCWpzIElTIEpTT04gIklTIEpTT04iLAorCWpzIElTIE5PVCBKU09OICJJUyBO T1QgSlNPTiIsCisJanMgSVMgSlNPTiBWQUxVRSAiSVMgVkFMVUUiLAorCWpzIElTIEpTT04g T0JKRUNUICJJUyBPQkpFQ1QiLAorCWpzIElTIEpTT04gQVJSQVkgIklTIEFSUkFZIiwKKwlq cyBJUyBKU09OIFNDQUxBUiAiSVMgU0NBTEFSIiwKKwlqcyBJUyBKU09OIFdJVEhPVVQgVU5J UVVFIEtFWVMgIldJVEhPVVQgVU5JUVVFIiwKKwlqcyBJUyBKU09OIFdJVEggVU5JUVVFIEtF WVMgIldJVEggVU5JUVVFIgorRlJPTQorCShTRUxFQ1QganM6Ompzb25iIEZST00gdGVzdF9p c19qc29uIFdIRVJFIGpzIElTIEpTT04pIGZvbyhqcyk7CisKKy0tIFRlc3QgSVMgSlNPTiBk ZXBhcnNpbmcKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAnMScgSVMg SlNPTiBBUyAiYW55IiwgKCcxJyB8fCBpKSBJUyBKU09OIFNDQUxBUiBBUyAic2NhbGFyIiwg J1tdJyBJUyBOT1QgSlNPTiBBUlJBWSBBUyAiYXJyYXkiLCAne30nIElTIEpTT04gT0JKRUNU IFdJVEggVU5JUVVFIEFTICJvYmplY3QiIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMpIGk7 CisKK0NSRUFURSBWSUVXIGlzX2pzb25fdmlldyBBUworU0VMRUNUICcxJyBJUyBKU09OIEFT ICJhbnkiLCAoJzEnIHx8IGkpIElTIEpTT04gU0NBTEFSIEFTICJzY2FsYXIiLCAnW10nIElT IE5PVCBKU09OIEFSUkFZIEFTICJhcnJheSIsICd7fScgSVMgSlNPTiBPQkpFQ1QgV0lUSCBV TklRVUUgQVMgIm9iamVjdCIgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMykgaTsKKworXHN2 IGlzX2pzb25fdmlldworCitEUk9QIFZJRVcgaXNfanNvbl92aWV3OwotLSAKMi4zNC4xCgo= --------------MwgLFi9fcx5tDY0Wnjp80Eno Content-Type: text/x-patch; charset=UTF-8; name="v10-0004-SQL-JSON-query-functions.patch" Content-Disposition: attachment; filename="v10-0004-SQL-JSON-query-functions.patch" Content-Transfer-Encoding: base64 RnJvbSAwMWRiMDliZGEzY2Q5N2I4MThkYWQxYTZjMGNjY2NkYmRjODg5MmQwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5l Lm5ldD4KRGF0ZTogVGh1LCAxNiBNYXIgMjAyMyAxODozMzoyNyAtMDQwMApTdWJqZWN0OiBb UEFUQ0ggNC85XSBTUUwvSlNPTiBxdWVyeSBmdW5jdGlvbnMKClRoaXMgaW50cm9kdWNlcyB0 aGUgU1FML0pTT04gZnVuY3Rpb25zIGZvciBxdWVyeWluZyBKU09OIGRhdGEgdXNpbmcKanNv bnBhdGggZXhwcmVzc2lvbnMuIFRoZSBmdW5jdGlvbnMgYXJlOgoKSlNPTl9FWElTVFMoKQpK U09OX1FVRVJZKCkKSlNPTl9WQUxVRSgpCgpBbGwgb2YgdGhlc2UgZnVuY3Rpb25zIG9ubHkg b3BlcmF0ZSBvbiBqc29uYi4gVGhlIHdvcmthcm91bmQgZm9yIG5vdyBpcwp0byBjYXN0IHRo ZSBhcmd1bWVudCB0byBqc29uYi4KCkpTT05fRVhJU1RTKCkgdGVzdHMgaWYgdGhlIGpzb25w YXRoIGV4cHJlc3Npb24gYXBwbGllZCB0byB0aGUganNvbmIKdmFsdWUgeWllbGRzIGFueSB2 YWx1ZXMuIEpTT05fVkFMVUUoKSBtdXN0IHJldHVybiBhIHNpbmdsZSB2YWx1ZSwgYW5kIGFu CmVycm9yIG9jY3VycyBpZiBpdCB0cmllcyB0byByZXR1cm4gbXVsdGlwbGUgdmFsdWVzLiBK U09OX1FVRVJZKCkgbXVzdApyZXR1cm4gYSBqc29uIG9iamVjdCBvciBhcnJheSwgYW5kIHRo ZXJlIGFyZSB2YXJpb3VzIFdSQVBQRVIgb3B0aW9ucyBmb3IKaGFuZGxpbmcgc2NhbGFyIG9y IG11bHRpLXZhbHVlIHJlc3VsdHMuIEJvdGggdGhlc2UgZnVuY3Rpb25zIGhhdmUKb3B0aW9u cyBmb3IgaGFuZGxpbmcgRU1QVFkgYW5kIEVSUk9SIGNvbmRpdGlvbnMuCgpOaWtpdGEgR2x1 a2hvdgoKUmV2aWV3ZXJzIGhhdmUgaW5jbHVkZWQgKGluIG5vIHBhcnRpY3VsYXIgb3JkZXIp IEFuZHJlcyBGcmV1bmQsIEFsZXhhbmRlcgpLb3JvdGtvdiwgUGF2ZWwgU3RlaHVsZSwgQW5k cmV3IEFsc3VwLCBFcmlrIFJpamtlcnMsIFppaG9uZyBZdSwKSGltYW5zaHUgVXBhZGh5YXlh LCBEYW5pZWwgR3VzdGFmc3NvbiwgSnVzdGluIFByeXpieS4KCkRpc2N1c3Npb246IGh0dHBz Oi8vcG9zdGdyLmVzL20vY2QwYmI5MzUtMDE1OC03OGE3LTA4YjUtOTA0ODg2ZGVhYzRiQHBv c3RncmVzcHJvLnJ1CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vMjAyMjA2MTYy MzMxMzAucnBhcml2YWZpcHQ2ZG9qM0BhbGFwMy5hbmFyYXplbC5kZQpEaXNjdXNzaW9uOiBo dHRwczovL3Bvc3Rnci5lcy9tL2FiZDliODNiLWFhNjYtZjIzMC0zZDZkLTczNDgxN2YwOTk1 ZCU0MHBvc3RncmVzcWwub3JnCi0tLQogZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbCAgICAgICAg ICAgICAgICAgICAgICB8ICAxNTMgKystCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhw ci5jICAgICAgICAgICAgIHwgIDQzMiArKysrKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY0V4cHJJbnRlcnAuYyAgICAgICB8ICA1MDQgKysrKysrKystCiBzcmMvYmFja2VuZC9q aXQvbGx2bS9sbHZtaml0X2V4cHIuYyAgICAgICAgIHwgIDI0NiArKysrKwogc3JjL2JhY2tl bmQvaml0L2xsdm0vbGx2bWppdF90eXBlcy5jICAgICAgICB8ICAgIDUgKwogc3JjL2JhY2tl bmQvbm9kZXMvbWFrZWZ1bmNzLmMgICAgICAgICAgICAgICB8ICAgMTUgKwogc3JjL2JhY2tl bmQvbm9kZXMvbm9kZUZ1bmNzLmMgICAgICAgICAgICAgICB8ICAxOTEgKysrLQogc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyAgICAgICB8ICAgIDMgKy0KIHNyYy9i YWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYyAgICAgICAgfCAgIDIwICsKIHNyYy9i YWNrZW5kL3BhcnNlci9ncmFtLnkgICAgICAgICAgICAgICAgICAgfCAgMzI5ICsrKysrLQog c3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2NvbGxhdGUuYyAgICAgICAgICB8ICAgIDcgKwog c3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYyAgICAgICAgICAgICB8ICA0OTMgKysr KysrKystCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdGFyZ2V0LmMgICAgICAgICAgIHwg ICAxNSArCiBzcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0dGluZy5jICAgICAgICAgIHwg ICA0NSArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMgICAgICAgICAgICAgICB8 ICAgNjIgKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYyAgICAgICAgICAg fCAgMTIwICsrLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoLmMgICAgICAgICAg ICB8ICAyNTcgKysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMg ICAgICAgfCAgNDAxICsrKysrKystCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxz LmMgICAgICAgICAgIHwgIDEzNiArKysKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHBy LmggICAgICAgICAgICAgfCAgMTcyICsrKysKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1 dG9yLmggICAgICAgICAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rl cy5oICAgICAgICAgICAgICAgfCAgICAzICsKIHNyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5j cy5oICAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9k ZXMuaCAgICAgICAgICAgICAgfCAgIDU5ICsrCiBzcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9k ZXMuaCAgICAgICAgICAgICAgIHwgIDEwOSArKwogc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlz dC5oICAgICAgICAgICAgICAgICB8ICAgMTEgKwogc3JjL2luY2x1ZGUvdXRpbHMvZm9ybWF0 dGluZy5oICAgICAgICAgICAgICB8ICAgIDQgKwogc3JjL2luY2x1ZGUvdXRpbHMvanNvbmIu aCAgICAgICAgICAgICAgICAgICB8ICAgIDMgKwogc3JjL2luY2x1ZGUvdXRpbHMvanNvbmZ1 bmNzLmggICAgICAgICAgICAgICB8ICAgIDYgKwogc3JjL2luY2x1ZGUvdXRpbHMvanNvbnBh dGguaCAgICAgICAgICAgICAgICB8ICAgMjcgKwogc3JjL2ludGVyZmFjZXMvZWNwZy9wcmVw cm9jL2VjcGcudHJhaWxlciAgICB8ICAgMzcgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9qc29uX3NxbGpzb24ub3V0ICB8ICAgMTggKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9qc29uYl9zcWxqc29uLm91dCB8IDEwMjAgKysrKysrKysrKysrKysrKysrKwogc3JjL3Rl c3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSAgICAgICAgICB8ICAgIDIgKy0KIHNyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25fc3FsanNvbi5zcWwgICAgICAgfCAgIDExICsKIHNyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iX3NxbGpzb24uc3FsICAgICAgfCAgMzE4ICsrKysrKwog c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICB8ICAgIDEgKwog MzcgZmlsZXMgY2hhbmdlZCwgNTEzNiBpbnNlcnRpb25zKCspLCAxMDEgZGVsZXRpb25zKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uX3Nx bGpzb24ub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9qc29uYl9zcWxqc29uLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2pzb25fc3FsanNvbi5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9y ZWdyZXNzL3NxbC9qc29uYl9zcWxqc29uLnNxbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dt bC9mdW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCmluZGV4IDYzZmZkN2M2Yzcu LjI3YTIwYzA3OTggMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKKysrIGIv ZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbApAQCAtMTc2ODAsOSArMTc2ODAsOSBAQCAkLiogPyAo QCBsaWtlX3JlZ2V4ICJeXFxkKyQiKQogICAgIFRoZXJlIGFyZSB0d28gZ3JvdXBzIG9mIFNR TC9KU09OIGZ1bmN0aW9ucy4KICAgICA8bGluayBsaW5rZW5kPSJmdW5jdGlvbnMtc3FsanNv bi1wcm9kdWNpbmciPkNvbnN0cnVjdG9yIGZ1bmN0aW9uczwvbGluaz4KICAgICBnZW5lcmF0 ZSBKU09OIGRhdGEgZnJvbSB2YWx1ZXMgb2YgU1FMIHR5cGVzLgotICAgIFF1ZXJ5IGZ1bmN0 aW9ucyBldmFsdWF0ZSBTUUwvSlNPTiBwYXRoIGxhbmd1YWdlIGV4cHJlc3Npb25zIGFnYWlu c3QgSlNPTgotICAgIHZhbHVlcyBhbmQgcHJvZHVjZSB2YWx1ZXMgb2YgU1FML0pTT04gdHlw ZXMsIHdoaWNoIGFyZSBjb252ZXJ0ZWQgdG8gU1FMCi0gICAgdHlwZXMuCisgICAgPGxpbmsg bGlua2VuZD0iZnVuY3Rpb25zLXNxbGpzb24tcXVlcnlpbmciPlF1ZXJ5IGZ1bmN0aW9uczwv bGluaz4gZXZhbHVhdGUKKyAgICBTUUwvSlNPTiBwYXRoIGxhbmd1YWdlIGV4cHJlc3Npb25z IGFnYWluc3QgSlNPTiB2YWx1ZXMgYW5kIHByb2R1Y2UgdmFsdWVzCisgICAgb2YgU1FML0pT T04gdHlwZXMsIHdoaWNoIGFyZSBjb252ZXJ0ZWQgdG8gU1FMIHR5cGVzLgogICAgPC9wYXJh PgogCiAgICA8cGFyYT4KQEAgLTE3ODk3LDYgKzE3ODk3LDE1MyBAQCBGUk9NCiAgICAgPC90 Ym9keT4KICAgIDwvdGdyb3VwPgogICA8L3RhYmxlPgorCisgIDxwYXJhPgorICAgPHhyZWYg bGlua2VuZD0iZnVuY3Rpb25zLXNxbGpzb24tcXVlcnlpbmciLz4gZGV0YWlscyB0aGUgU1FM L0pTT04KKyAgIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIHF1ZXJ5IEpTT04gZGF0 YSwgZXhjZXB0CisgICBmb3IgPGZ1bmN0aW9uPmpzb25fdGFibGU8L2Z1bmN0aW9uPi4KKyAg PC9wYXJhPgorCisgIDxub3RlPgorICAgPHBhcmE+CisgICAgU1FML0pTT04gcGF0aHMgY2Fu IG9ubHkgYmUgYXBwbGllZCB0byB0aGUgPHR5cGU+anNvbmI8L3R5cGU+IHR5cGUsIHNvIGl0 CisgICAgbWlnaHQgYmUgbmVjZXNzYXJ5IHRvIGNhc3QgdGhlIDxyZXBsYWNlYWJsZT5jb250 ZXh0X2l0ZW08L3JlcGxhY2VhYmxlPgorICAgIGFyZ3VtZW50IG9mIHRoZXNlIGZ1bmN0aW9u cyB0byA8dHlwZT5qc29uYjwvdHlwZT4uCisgICA8L3BhcmE+CisgIDwvbm90ZT4KKworICA8 dGFibGUgaWQ9ImZ1bmN0aW9ucy1zcWxqc29uLXF1ZXJ5aW5nIj4KKyAgIDx0aXRsZT5TUUwv SlNPTiBRdWVyeSBGdW5jdGlvbnM8L3RpdGxlPgorICAgPHRncm91cCBjb2xzPSIxIj4KKyAg ICA8dGhlYWQ+CisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9l bnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAgICBGdW5jdGlvbiBz aWduYXR1cmUKKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIERlc2Ny aXB0aW9uCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBFeGFtcGxl KHMpCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisgICAgPC90aGVhZD4K KyAgICA8dGJvZHk+CisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iZnVuY190YWJs ZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAgICA8aW5kZXh0 ZXJtPjxwcmltYXJ5Pmpzb25fZXhpc3RzPC9wcmltYXJ5PjwvaW5kZXh0ZXJtPgorICAgICAg ICA8ZnVuY3Rpb24+anNvbl9leGlzdHM8L2Z1bmN0aW9uPiAoCisgICAgICAgIDxyZXBsYWNl YWJsZT5jb250ZXh0X2l0ZW08L3JlcGxhY2VhYmxlPiwgPHJlcGxhY2VhYmxlPnBhdGhfZXhw cmVzc2lvbjwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4gPGxpdGVyYWw+UEFTU0lORzwvbGl0 ZXJhbD4geyA8cmVwbGFjZWFibGU+dmFsdWU8L3JlcGxhY2VhYmxlPiA8bGl0ZXJhbD5BUzwv bGl0ZXJhbD4gPHJlcGxhY2VhYmxlPnZhcm5hbWU8L3JlcGxhY2VhYmxlPiB9IDxvcHRpb25h bD4sIC4uLjwvb3B0aW9uYWw+PC9vcHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiA8bGl0 ZXJhbD5SRVRVUk5JTkc8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT5kYXRhX3R5cGU8L3JlcGxh Y2VhYmxlPiA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgPGxpdGVyYWw+VFJV RTwvbGl0ZXJhbD4gfCA8bGl0ZXJhbD5GQUxTRTwvbGl0ZXJhbD4gfDxsaXRlcmFsPiBVTktO T1dOPC9saXRlcmFsPiB8IDxsaXRlcmFsPkVSUk9SPC9saXRlcmFsPiB9IDxsaXRlcmFsPk9O IEVSUk9SPC9saXRlcmFsPiA8L29wdGlvbmFsPikKKyAgICAgICA8L3BhcmE+CisgICAgICAg PHBhcmE+CisgICAgICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgU1FML0pTT04gPHJlcGxhY2Vh YmxlPnBhdGhfZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+CisgICAgICAgIGFwcGxpZWQgdG8g dGhlIDxyZXBsYWNlYWJsZT5jb250ZXh0X2l0ZW08L3JlcGxhY2VhYmxlPiB1c2luZyB0aGUK KyAgICAgICAgPHJlcGxhY2VhYmxlPnZhbHVlPC9yZXBsYWNlYWJsZT5zIHlpZWxkcyBhbnkg aXRlbXMuCisgICAgICAgIFRoZSA8bGl0ZXJhbD5PTiBFUlJPUjwvbGl0ZXJhbD4gY2xhdXNl IHNwZWNpZmllcyB3aGF0IGlzIHJldHVybmVkIGlmCisgICAgICAgIGFuIGVycm9yIG9jY3Vy cy4gTm90ZSB0aGF0IGlmIHRoZSA8cmVwbGFjZWFibGU+cGF0aF9leHByZXNzaW9uPC9yZXBs YWNlYWJsZT4KKyAgICAgICAgaXMgPGxpdGVyYWw+c3RyaWN0PC9saXRlcmFsPiwgYW4gZXJy b3IgaXMgZ2VuZXJhdGVkIGlmIGl0IHlpZWxkcyBubyBpdGVtcy4KKyAgICAgICAgVGhlIGRl ZmF1bHQgdmFsdWUgaXMgPGxpdGVyYWw+VU5LTk9XTjwvbGl0ZXJhbD4gd2hpY2ggY2F1c2Vz IGEgTlVMTAorICAgICAgICByZXN1bHQuCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJh PgorICAgICAgICA8bGl0ZXJhbD5qc29uX2V4aXN0cyhqc29uYiAneyJrZXkxIjogWzEsMiwz XX0nLCAnc3RyaWN0ICQua2V5MVsqXSA/IChAID4gMiknKTwvbGl0ZXJhbD4KKyAgICAgICAg PHJldHVybnZhbHVlPnQ8L3JldHVybnZhbHVlPgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8 cGFyYT4KKyAgICAgICAgPGxpdGVyYWw+anNvbl9leGlzdHMoanNvbmIgJ3siYSI6IFsxLDIs M119JywgJ2xheCAkLmFbNV0nIEVSUk9SIE9OIEVSUk9SKTwvbGl0ZXJhbD4KKyAgICAgICAg PHJldHVybnZhbHVlPmY8L3JldHVybnZhbHVlPgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8 cGFyYT4KKyAgICAgICAgPGxpdGVyYWw+anNvbl9leGlzdHMoanNvbmIgJ3siYSI6IFsxLDIs M119JywgJ3N0cmljdCAkLmFbNV0nIEVSUk9SIE9OIEVSUk9SKTwvbGl0ZXJhbD4KKyAgICAg ICAgPHJldHVybnZhbHVlPkVSUk9SOiAganNvbnBhdGggYXJyYXkgc3Vic2NyaXB0IGlzIG91 dCBvZiBib3VuZHM8L3JldHVybnZhbHVlPgorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAg IDwvcm93PgorICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50 cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAgPGluZGV4dGVybT48 cHJpbWFyeT5qc29uX3ZhbHVlPC9wcmltYXJ5PjwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVu Y3Rpb24+anNvbl92YWx1ZTwvZnVuY3Rpb24+ICgKKyAgICAgICAgPHJlcGxhY2VhYmxlPmNv bnRleHRfaXRlbTwvcmVwbGFjZWFibGU+LCA8cmVwbGFjZWFibGU+cGF0aF9leHByZXNzaW9u PC9yZXBsYWNlYWJsZT4KKyAgICAgICAgPG9wdGlvbmFsPiA8bGl0ZXJhbD5QQVNTSU5HPC9s aXRlcmFsPiB7IDxyZXBsYWNlYWJsZT52YWx1ZTwvcmVwbGFjZWFibGU+IDxsaXRlcmFsPkFT PC9saXRlcmFsPiA8cmVwbGFjZWFibGU+dmFybmFtZTwvcmVwbGFjZWFibGU+IH0gPG9wdGlv bmFsPiwgLi4uPC9vcHRpb25hbD48L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IDxs aXRlcmFsPlJFVFVSTklORzwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPmRhdGFfdHlwZTwvcmVw bGFjZWFibGU+IDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4geyA8bGl0ZXJhbD5F UlJPUjwvbGl0ZXJhbD4gfCA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiB8IDxsaXRlcmFsPkRF RkFVTFQ8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4g fSA8bGl0ZXJhbD5PTiBFTVBUWTwvbGl0ZXJhbD4gPC9vcHRpb25hbD4KKyAgICAgICAgPG9w dGlvbmFsPiB7IDxsaXRlcmFsPkVSUk9SPC9saXRlcmFsPiB8IDxsaXRlcmFsPk5VTEw8L2xp dGVyYWw+IHwgPGxpdGVyYWw+REVGQVVMVDwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPmV4cHJl c3Npb248L3JlcGxhY2VhYmxlPiB9IDxsaXRlcmFsPk9OIEVSUk9SPC9saXRlcmFsPiA8L29w dGlvbmFsPikKKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFJldHVy bnMgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUKKyAgICAgICAgPHJlcGxhY2VhYmxlPnBh dGhfZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IHRvIHRoZQorICAgICAgICA8cmVwbGFjZWFi bGU+Y29udGV4dF9pdGVtPC9yZXBsYWNlYWJsZT4gdXNpbmcgdGhlCisgICAgICAgIDxyZXBs YWNlYWJsZT52YWx1ZTwvcmVwbGFjZWFibGU+cy4gVGhlIGV4dHJhY3RlZCB2YWx1ZSBtdXN0 IGJlCisgICAgICAgIGEgc2luZ2xlIDxhY3JvbnltPlNRTC9KU09OPC9hY3JvbnltPiBzY2Fs YXIgaXRlbS4gRm9yIHJlc3VsdHMgdGhhdAorICAgICAgICBhcmUgb2JqZWN0cyBvciBhcnJh eXMsIHVzZSB0aGUgPGZ1bmN0aW9uPmpzb25fcXVlcnk8L2Z1bmN0aW9uPgorICAgICAgICBm dW5jdGlvbiBpbnN0ZWFkLgorICAgICAgICBUaGUgcmV0dXJuZWQgPHJlcGxhY2VhYmxlPmRh dGFfdHlwZTwvcmVwbGFjZWFibGU+IGhhcyB0aGUgc2FtZSBzZW1hbnRpY3MKKyAgICAgICAg YXMgZm9yIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyBsaWtlIDxmdW5jdGlvbj5qc29uX29iamVj dGFnZzwvZnVuY3Rpb24+LgorICAgICAgICBUaGUgZGVmYXVsdCByZXR1cm5lZCB0eXBlIGlz IDx0eXBlPnRleHQ8L3R5cGU+LgorICAgICAgICBUaGUgPGxpdGVyYWw+T04gRU1QVFk8L2xp dGVyYWw+IGNsYXVzZSBzcGVjaWZpZXMgdGhlIGJlaGF2aW9yIGlmIHRoZQorICAgICAgICA8 cmVwbGFjZWFibGU+cGF0aF9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4geWllbGRzIG5vIHZh bHVlIGF0IGFsbC4KKyAgICAgICAgVGhlIDxsaXRlcmFsPk9OIEVSUk9SPC9saXRlcmFsPiBj bGF1c2Ugc3BlY2lmaWVzIHRoZSBiZWhhdmlvciBpZiBhbgorICAgICAgICBlcnJvciBvY2N1 cnMgYXMgYSByZXN1bHQgb2YgPHR5cGU+anNvbnBhdGg8L3R5cGU+IGV2YWx1YXRpb24KKyAg ICAgICAgKGluY2x1ZGluZyBjYXN0IHRvIHRoZSBvdXRwdXQgdHlwZSkgb3IgZXhlY3V0aW9u IG9mCisgICAgICAgIDxsaXRlcmFsPk9OIEVNUFRZPC9saXRlcmFsPiBiZWhhdmlvciAodGhh dCB3YXMgY2F1c2VkIGJ5IGVtcHR5IHJlc3VsdAorICAgICAgICBvZiA8dHlwZT5qc29ucGF0 aDwvdHlwZT4gZXZhbHVhdGlvbikuCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgor ICAgICAgICA8bGl0ZXJhbD5qc29uX3ZhbHVlKGpzb25iICciMTIzLjQ1IicsICckJyBSRVRV Uk5JTkcgZmxvYXQpPC9saXRlcmFsPgorICAgICAgICA8cmV0dXJudmFsdWU+MTIzLjQ1PC9y ZXR1cm52YWx1ZT4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIDxs aXRlcmFsPmpzb25fdmFsdWUoanNvbmIgJyIwMzowNCAyMDE1LTAyLTAxIicsICckLmRhdGV0 aW1lKCJISDI0Ok1JJm5ic3A7WVlZWS1NTS1ERCIpJyBSRVRVUk5JTkcgZGF0ZSk8L2xpdGVy YWw+CisgICAgICAgIDxyZXR1cm52YWx1ZT4yMDE1LTAyLTAxPC9yZXR1cm52YWx1ZT4KKyAg ICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIDxsaXRlcmFsPmpzb25fdmFs dWUoanNvbmIgJ1sxLDJdJywgJ3N0cmljdCAkWypdJyBERUZBVUxUIDkgT04gRVJST1IpPC9s aXRlcmFsPgorICAgICAgICA8cmV0dXJudmFsdWU+OTwvcmV0dXJudmFsdWU+CisgICAgICA8 L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisgICAgIDxyb3c+CisgICAgICA8ZW50cnkg cm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgor ICAgICAgICA8aW5kZXh0ZXJtPjxwcmltYXJ5Pmpzb25fcXVlcnk8L3ByaW1hcnk+PC9pbmRl eHRlcm0+CisgICAgICAgIDxmdW5jdGlvbj5qc29uX3F1ZXJ5PC9mdW5jdGlvbj4gKAorICAg ICAgICA8cmVwbGFjZWFibGU+Y29udGV4dF9pdGVtPC9yZXBsYWNlYWJsZT4sIDxyZXBsYWNl YWJsZT5wYXRoX2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+IDxsaXRlcmFs PlBBU1NJTkc8L2xpdGVyYWw+IHsgPHJlcGxhY2VhYmxlPnZhbHVlPC9yZXBsYWNlYWJsZT4g PGxpdGVyYWw+QVM8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT52YXJuYW1lPC9yZXBsYWNlYWJs ZT4gfSA8b3B0aW9uYWw+LCAuLi48L29wdGlvbmFsPjwvb3B0aW9uYWw+CisgICAgICAgIDxv cHRpb25hbD4gPGxpdGVyYWw+UkVUVVJOSU5HPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+ZGF0 YV90eXBlPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5GT1JNQVQgSlNPTjwv bGl0ZXJhbD4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5FTkNPRElORyBVVEY4PC9saXRlcmFsPiA8 L29wdGlvbmFsPiA8L29wdGlvbmFsPiA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+ IHsgPGxpdGVyYWw+V0lUSE9VVDwvbGl0ZXJhbD4gfCA8bGl0ZXJhbD5XSVRIPC9saXRlcmFs PiB7IDxsaXRlcmFsPkNPTkRJVElPTkFMPC9saXRlcmFsPiB8IDxvcHRpb25hbD48bGl0ZXJh bD5VTkNPTkRJVElPTkFMPC9saXRlcmFsPjwvb3B0aW9uYWw+IH0gfSA8b3B0aW9uYWw+IDxs aXRlcmFsPkFSUkFZPC9saXRlcmFsPiA8L29wdGlvbmFsPiA8bGl0ZXJhbD5XUkFQUEVSPC9s aXRlcmFsPiA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgPGxpdGVyYWw+S0VF UDwvbGl0ZXJhbD4gfCA8bGl0ZXJhbD5PTUlUPC9saXRlcmFsPiB9IDxsaXRlcmFsPlFVT1RF UzwvbGl0ZXJhbD4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5PTiBTQ0FMQVIgU1RSSU5HPC9saXRl cmFsPiA8L29wdGlvbmFsPiA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgPGxp dGVyYWw+RVJST1I8L2xpdGVyYWw+IHwgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4gfCA8bGl0 ZXJhbD5FTVBUWTwvbGl0ZXJhbD4geyA8b3B0aW9uYWw+IDxsaXRlcmFsPkFSUkFZPC9saXRl cmFsPiA8L29wdGlvbmFsPiB8IDxsaXRlcmFsPk9CSkVDVDwvbGl0ZXJhbD4gfSB8IDxsaXRl cmFsPkRFRkFVTFQ8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNl YWJsZT4gfSA8bGl0ZXJhbD5PTiBFTVBUWTwvbGl0ZXJhbD4gPC9vcHRpb25hbD4KKyAgICAg ICAgPG9wdGlvbmFsPiB7IDxsaXRlcmFsPkVSUk9SPC9saXRlcmFsPiB8IDxsaXRlcmFsPk5V TEw8L2xpdGVyYWw+IHwgPGxpdGVyYWw+RU1QVFk8L2xpdGVyYWw+IHsgPG9wdGlvbmFsPiA8 bGl0ZXJhbD5BUlJBWTwvbGl0ZXJhbD4gPC9vcHRpb25hbD4gfCA8bGl0ZXJhbD5PQkpFQ1Q8 L2xpdGVyYWw+IH0gfCA8bGl0ZXJhbD5ERUZBVUxUPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+ ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IH0gPGxpdGVyYWw+T04gRVJST1I8L2xpdGVyYWw+ IDwvb3B0aW9uYWw+KQorICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBS ZXR1cm5zIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlCisgICAgICAgIDxyZXBsYWNlYWJs ZT5wYXRoX2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPiB0byB0aGUKKyAgICAgICAgPHJlcGxh Y2VhYmxlPmNvbnRleHRfaXRlbTwvcmVwbGFjZWFibGU+IHVzaW5nIHRoZQorICAgICAgICA8 cmVwbGFjZWFibGU+dmFsdWU8L3JlcGxhY2VhYmxlPnMuCisgICAgICAgIFRoaXMgZnVuY3Rp b24gbXVzdCByZXR1cm4gYSBKU09OIHN0cmluZywgc28gaWYgdGhlIHBhdGggZXhwcmVzc2lv bgorICAgICAgICByZXR1cm5zIG11bHRpcGxlIFNRTC9KU09OIGl0ZW1zLCB5b3UgbXVzdCB3 cmFwIHRoZSByZXN1bHQgdXNpbmcgdGhlCisgICAgICAgIDxsaXRlcmFsPldJVEggV1JBUFBF UjwvbGl0ZXJhbD4gY2xhdXNlLiBJZiB0aGUgd3JhcHBlciBpcworICAgICAgICA8bGl0ZXJh bD5VTkNPTkRJVElPTkFMPC9saXRlcmFsPiwgYW4gYXJyYXkgd3JhcHBlciB3aWxsIGFsd2F5 cworICAgICAgICBiZSBhcHBsaWVkLCBldmVuIGlmIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBh bHJlYWR5IGEgc2luZ2xlIEpTT04gb2JqZWN0CisgICAgICAgIG9yIGFycmF5LCBidXQgaWYg aXQgaXMgPGxpdGVyYWw+Q09ORElUSU9OQUw8L2xpdGVyYWw+LCBpdCB3aWxsIG5vdCBiZQor ICAgICAgICBhcHBsaWVkIHRvIGEgc2luZ2xlIGFycmF5IG9yIG9iamVjdC4gPGxpdGVyYWw+ VU5DT05ESVRJT05BTDwvbGl0ZXJhbD4KKyAgICAgICAgaXMgdGhlIGRlZmF1bHQuCisgICAg ICAgIElmIHRoZSByZXN1bHQgaXMgYSBzY2FsYXIgc3RyaW5nLCBieSBkZWZhdWx0IHRoZSB2 YWx1ZSByZXR1cm5lZCB3aWxsIGhhdmUKKyAgICAgICAgc3Vycm91bmRpbmcgcXVvdGVzIG1h a2luZyBpdCBhIHZhbGlkIEpTT04gdmFsdWUuIEhvd2V2ZXIsIHRoaXMgYmVoYXZpb3IKKyAg ICAgICAgaXMgcmV2ZXJzZWQgaWYgPGxpdGVyYWw+T01JVCBRVU9URVM8L2xpdGVyYWw+IGlz IHNwZWNpZmllZC4KKyAgICAgICAgVGhlIDxsaXRlcmFsPk9OIEVSUk9SPC9saXRlcmFsPiBh bmQgPGxpdGVyYWw+T04gRU1QVFk8L2xpdGVyYWw+CisgICAgICAgIGNsYXVzZXMgaGF2ZSBz aW1pbGFyIHNlbWFudGljcyB0byB0aG9zZSBjbGF1c2VzIGZvcgorICAgICAgICA8ZnVuY3Rp b24+anNvbl92YWx1ZTwvZnVuY3Rpb24+LgorICAgICAgICBUaGUgcmV0dXJuZWQgPHJlcGxh Y2VhYmxlPmRhdGFfdHlwZTwvcmVwbGFjZWFibGU+IGhhcyB0aGUgc2FtZSBzZW1hbnRpY3MK KyAgICAgICAgYXMgZm9yIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyBsaWtlIDxmdW5jdGlvbj5q c29uX29iamVjdGFnZzwvZnVuY3Rpb24+LgorICAgICAgICBUaGUgZGVmYXVsdCByZXR1cm5l ZCB0eXBlIGlzIDx0eXBlPnRleHQ8L3R5cGU+LgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8 cGFyYT4KKyAgICAgICAgPGxpdGVyYWw+anNvbl9xdWVyeShqc29uYiAnWzEsWzIsM10sbnVs bF0nLCAnbGF4ICRbKl1bMV0nIFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUik8L2xpdGVyYWw+ CisgICAgICAgIDxyZXR1cm52YWx1ZT5bM108L3JldHVybnZhbHVlPgorICAgICAgPC9wYXJh PjwvZW50cnk+CisgICAgIDwvcm93PgorICAgIDwvdGJvZHk+CisgICA8L3Rncm91cD4KKyAg PC90YWJsZT4KICAgPC9zZWN0Mj4KICA8L3NlY3QxPgogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjRXhwci5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4 cHIuYwppbmRleCAxZTQxZDA2NjE4Li5jOGVjNGQ3OGIyIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjRXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNFeHByLmMKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgog I2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZGF0dW0uaCIK KyNpbmNsdWRlICJ1dGlscy9qc29ucGF0aC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNo ZS5oIgogI2luY2x1ZGUgInV0aWxzL3R5cGNhY2hlLmgiCiAKQEAgLTg3LDYgKzg4LDE2IEBA IHN0YXRpYyB2b2lkIEV4ZWNCdWlsZEFnZ1RyYW5zQ2FsbChFeHByU3RhdGUgKnN0YXRlLCBB Z2dTdGF0ZSAqYWdnc3RhdGUsCiAJCQkJCQkJCSAgRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8s IEFnZ1N0YXRlUGVyVHJhbnMgcGVydHJhbnMsCiAJCQkJCQkJCSAgaW50IHRyYW5zbm8sIGlu dCBzZXRubywgaW50IHNldG9mZiwgYm9vbCBpc2hhc2gsCiAJCQkJCQkJCSAgYm9vbCBudWxs Y2hlY2spOworc3RhdGljIHZvaWQgRXhlY0luaXRKc29uRXhwcihKc29uRXhwciAqamV4cHIs IEV4cHJTdGF0ZSAqc3RhdGUsCisJCQkJIERhdHVtICpyZXN2LCBib29sICpyZXNudWxsLAor CQkJCSBFeHByRXZhbFN0ZXAgKnNjcmF0Y2gpOworc3RhdGljIERhdHVtIEdldEpzb25CZWhh dmlvclZhbHVlKEpzb25CZWhhdmlvciAqYmVoYXZpb3IsIGJvb2wgKmlzX251bGwpOworc3Rh dGljIEpzb25Db2VyY2lvblN0YXRlICpFeGVjSW5pdEpzb25Db2VyY2lvbihFeHByRXZhbFN0 ZXAgKnNjcmF0Y2gsIEV4cHJTdGF0ZSAqc3RhdGUsCisJCQkJCSBKc29uQ29lcmNpb24gKmNv ZXJjaW9uLAorCQkJCQkgRGF0dW0gKnJlc3YsIGJvb2wgKnJlc251bGwpOworc3RhdGljIEpz b25JdGVtQ29lcmNpb25zU3RhdGUgKkV4ZWNJbml0SnNvbkl0ZW1Db2VyY2lvbnMoRXhwckV2 YWxTdGVwICpzY3JhdGNoLCBFeHByU3RhdGUgKnN0YXRlLAorCQkJCQkJICBKc29uSXRlbUNv ZXJjaW9ucyAqY29lcmNpb25zLAorCQkJCQkJICBEYXR1bSAqcmVzdiwgYm9vbCAqcmVzbnVs bCk7CiAKIAogLyoKQEAgLTI1MDgsNiArMjUxOSwxNCBAQCBFeGVjSW5pdEV4cHJSZWMoRXhw ciAqbm9kZSwgRXhwclN0YXRlICpzdGF0ZSwKIAkJCQlicmVhazsKIAkJCX0KIAorCQljYXNl IFRfSnNvbkV4cHI6CisJCQl7CisJCQkJSnNvbkV4cHIgICAqamV4cHIgPSBjYXN0Tm9kZShK c29uRXhwciwgbm9kZSk7CisKKwkJCQlFeGVjSW5pdEpzb25FeHByKGpleHByLCBzdGF0ZSwg cmVzdiwgcmVzbnVsbCwgJnNjcmF0Y2gpOworCQkJCWJyZWFrOworCQkJfQorCiAJCWRlZmF1 bHQ6CiAJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZTogJWQiLAogCQkJ CSAoaW50KSBub2RlVGFnKG5vZGUpKTsKQEAgLTQxNDQsMyArNDE2Myw0MTYgQEAgRXhlY0J1 aWxkUGFyYW1TZXRFcXVhbChUdXBsZURlc2MgZGVzYywKIAogCXJldHVybiBzdGF0ZTsKIH0K KworLyoKKyAqIFB1c2ggc3RlcHMgdG8gZXZhbHVhdGUgYSBKc29uRXhwciBhbmQgaXRzIHZh cmlvdXMgc3Vic2lkaWFyeSBleHByZXNzaW9ucy4KKyAqLworc3RhdGljIHZvaWQKK0V4ZWNJ bml0SnNvbkV4cHIoSnNvbkV4cHIgKmpleHByLCBFeHByU3RhdGUgKnN0YXRlLAorCQkJCSBE YXR1bSAqcmVzdiwgYm9vbCAqcmVzbnVsbCwKKwkJCQkgRXhwckV2YWxTdGVwICpzY3JhdGNo KQoreworCUpzb25FeHByU3RhdGUgKmpzZXN0YXRlID0gcGFsbG9jMChzaXplb2YoSnNvbkV4 cHJTdGF0ZSkpOworCUpzb25FeHByUHJlRXZhbFN0YXRlICpwcmVfZXZhbCA9ICZqc2VzdGF0 ZS0+cHJlX2V2YWw7CisJTGlzdENlbGwgICAqYXJnZXhwcmxjOworCUxpc3RDZWxsICAgKmFy Z25hbWVsYzsKKwlpbnQJCQlza2lwX3N0ZXBfb2ZmID0gLTE7CisJaW50CQkJcGFzc2luZ19h cmdzX3N0ZXBfb2ZmID0gLTE7CisJaW50CQkJY29lcmNpb25fc3RlcF9vZmYgPSAtMTsKKwlp bnQJCQljb2VyY2lvbl9maW5pc2hfc3RlcF9vZmYgPSAtMTsKKwlpbnQJCQliZWhhdmlvcl9z dGVwX29mZiA9IC0xOworCWludAkJCW9uZW1wdHlfZXhwcl9zdGVwX29mZiA9IC0xOworCWlu dAkJCW9uZW1wdHlfanVtcF9zdGVwX29mZiA9IC0xOworCWludAkJCW9uZXJyb3JfZXhwcl9z dGVwX29mZiA9IC0xOworCWludAkJCW9uZXJyb3JfanVtcF9zdGVwX29mZiA9IC0xOworCUxp c3QJICAgKmFkanVzdF9qdW1wcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpsYzsKKwlFeHByRXZh bFN0ZXAgKmFzOworCisJanNlc3RhdGUtPmpzZXhwciA9IGpleHByOworCisJLyoKKwkgKiBB ZGQgc3RlcHMgdG8gY29tcHV0ZSBmb3JtYXR0ZWRfZXhwciwgcGF0aHNwZWMsIGFuZCBQQVNT SU5HIGFyZworCSAqIGV4cHJlc3Npb25zIGFzIHRoaW5ncyB0aGF0IG11c3QgYmUgZXZhbHVh dGVkICpiZWZvcmUqIHRoZSBhY3R1YWwgSlNPTgorCSAqIHBhdGggZXhwcmVzc2lvbi4KKwkg Ki8KKwlFeGVjSW5pdEV4cHJSZWMoKEV4cHIgKikgamV4cHItPmZvcm1hdHRlZF9leHByLCBz dGF0ZSwKKwkJCQkJJnByZV9ldmFsLT5mb3JtYXR0ZWRfZXhwci52YWx1ZSwKKwkJCQkJJnBy ZV9ldmFsLT5mb3JtYXR0ZWRfZXhwci5pc251bGwpOworCUV4ZWNJbml0RXhwclJlYygoRXhw ciAqKSBqZXhwci0+cGF0aF9zcGVjLCBzdGF0ZSwKKwkJCQkJJnByZV9ldmFsLT5wYXRoc3Bl Yy52YWx1ZSwKKwkJCQkJJnByZV9ldmFsLT5wYXRoc3BlYy5pc251bGwpOworCisJLyoKKwkg KiBCZWZvcmUgcHVzaGluZyBzdGVwcyBmb3IgUEFTU0lORyBhcmdzLCBwdXNoIGEgc3RlcCB0 byBkZWNpZGUgd2hldGhlciB0bworCSAqIHNraXAgZXZhbHVhdGluZyB0aGUgYXJncyBhbmQg dGhlIEpTT04gcGF0aCBleHByZXNzaW9uIGRlcGVuZGluZyBvbgorCSAqIHdoZXRoZXIgZWl0 aGVyIG9mIGZvcm1hdHRlZF9leHByIGFuZCBwYXRoc3BlYyBpcyBOVUxMOyBzZWUKKwkgKiBF eGVjRXZhbEpzb25FeHByU2tpcCgpLgorCSAqLworCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1Bf SlNPTkVYUFJfU0tJUDsKKwlzY3JhdGNoLT5kLmpzb25leHByX3NraXAuanNlc3RhdGUgPSBq c2VzdGF0ZTsKKwlza2lwX3N0ZXBfb2ZmID0gc3RhdGUtPnN0ZXBzX2xlbjsKKwlFeHByRXZh bFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKKworCS8qIFBBU1NJTkcgYXJncy4gKi8KKwlq c2VzdGF0ZS0+cHJlX2V2YWwuYXJncyA9IE5JTDsKKwlwYXNzaW5nX2FyZ3Nfc3RlcF9vZmYg PSBzdGF0ZS0+c3RlcHNfbGVuOworCWZvcmJvdGgoYXJnZXhwcmxjLCBqZXhwci0+cGFzc2lu Z192YWx1ZXMsCisJCQlhcmduYW1lbGMsIGpleHByLT5wYXNzaW5nX25hbWVzKQorCXsKKwkJ RXhwcgkgICAqYXJnZXhwciA9IChFeHByICopIGxmaXJzdChhcmdleHBybGMpOworCQlTdHJp bmcJICAgKmFyZ25hbWUgPSBsZmlyc3Rfbm9kZShTdHJpbmcsIGFyZ25hbWVsYyk7CisJCUpz b25QYXRoVmFyaWFibGUgKnZhciA9IHBhbGxvYyhzaXplb2YoKnZhcikpOworCisJCXZhci0+ bmFtZSA9IHBzdHJkdXAoYXJnbmFtZS0+c3ZhbCk7CisJCXZhci0+dHlwaWQgPSBleHByVHlw ZSgoTm9kZSAqKSBhcmdleHByKTsKKwkJdmFyLT50eXBtb2QgPSBleHByVHlwbW9kKChOb2Rl ICopIGFyZ2V4cHIpOworCisJCUV4ZWNJbml0RXhwclJlYygoRXhwciAqKSBhcmdleHByLCBz dGF0ZSwgJnZhci0+dmFsdWUsICZ2YXItPmlzbnVsbCk7CisKKwkJcHJlX2V2YWwtPmFyZ3Mg PSBsYXBwZW5kKHByZV9ldmFsLT5hcmdzLCB2YXIpOworCX0KKworCS8qCisJICogU3RlcCBm b3IgdGhlIGFjdHVhbCBKU09OIHBhdGggZXZhbHVhdGlvbjsgc2VlIEV4ZWNFdmFsSnNvbigp IGFuZAorCSAqIEV4ZWNFdmFsSnNvbkV4cHIoKS4KKwkgKi8KKwlzY3JhdGNoLT5vcGNvZGUg PSBFRU9QX0pTT05FWFBSX1BBVEg7CisJc2NyYXRjaC0+ZC5qc29uZXhwci5qc2VzdGF0ZSA9 IGpzZXN0YXRlOworCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCisJLyoK KwkgKiBQdXNoIHN0ZXBzIHRvIGNvbnRyb2wgdGhlIGV2YWx1YXRpb24gb2YgZXhwcmVzc2lv bnMgYmFzZWQKKwkgKiBvbiB0aGUgcmVzdWx0IG9mIEpTT04gcGF0aCBldmFsdWF0aW9uLgor CSAqLworCisJLyoKKwkgKiBTdGVwIHRvIGhhbmRsZSBPTiBFUlJPUiBhbmQgT04gRU1QVFkg YmVoYXZpb3I7IHNlZQorCSAqIEV4ZWNFdmFsSnNvbkV4cHJCZWhhdmlvcigpLgorCSAqLwor CXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfSlNPTkVYUFJfQkVIQVZJT1I7CisJc2NyYXRjaC0+ ZC5qc29uZXhwcl9iZWhhdmlvci5qc2VzdGF0ZSA9IGpzZXN0YXRlOworCWJlaGF2aW9yX3N0 ZXBfb2ZmID0gc3RhdGUtPnN0ZXBzX2xlbjsKKwlFeHByRXZhbFB1c2hTdGVwKHN0YXRlLCBz Y3JhdGNoKTsKKworCS8qIFN0ZXAocykgdG8gZXZhbHVhdGUgT04gRU1QVFkgZXhwcmVzc2lv biAqLworCW9uZW1wdHlfZXhwcl9zdGVwX29mZiA9IHN0YXRlLT5zdGVwc19sZW47CisJaWYg KGpleHByLT5vbl9lbXB0eSAmJgorCQlqZXhwci0+b25fZW1wdHktPmJ0eXBlICE9IEpTT05f QkVIQVZJT1JfRVJST1IpCisJeworCQlpZiAoamV4cHItPm9uX2VtcHR5LT5kZWZhdWx0X2V4 cHIpCisJCXsKKwkJCUV4ZWNJbml0RXhwclJlYygoRXhwciAqKSBqZXhwci0+b25fZW1wdHkt PmRlZmF1bHRfZXhwciwKKwkJCQkJCQkgc3RhdGUsIHJlc3YsIHJlc251bGwpOworCisJCQkv KgorCQkJICogRW1pdCBKVU1QIHN0ZXAgdG8ganVtcCB0byBlbmQgb2YgSnNvbkV4cHIgY29k ZSwgYmVjYXVzZQorCQkJICogdGhlIGRlZmF1bHQgZXhwcmVzc2lvbiBoYXMgYWxyZWFkeSBi ZWVuIGNvZXJjZWQsIHNvIHRoZXJlJ3MKKwkJCSAqIG5vdGhpbmcgbW9yZSB0byBkby4KKwkJ CSAqLworCQkJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KVU1QOworCQkJc2NyYXRjaC0+ZC5q dW1wLmp1bXBkb25lID0gLTE7CS8qIHNldCBiZWxvdyAqLworCQkJRXhwckV2YWxQdXNoU3Rl cChzdGF0ZSwgc2NyYXRjaCk7CisJCQlhZGp1c3RfanVtcHMgPSBsYXBwZW5kX2ludChhZGp1 c3RfanVtcHMsIHN0YXRlLT5zdGVwc19sZW4gLSAxKTsKKwkJfQorCQllbHNlCisJCXsKKwkJ CURhdHVtCWNvbnN0dmFsdWU7CisJCQlib29sCWNvbnN0aXNudWxsOworCisJCQljb25zdHZh bHVlID0gR2V0SnNvbkJlaGF2aW9yVmFsdWUoamV4cHItPm9uX2VtcHR5LCAmY29uc3Rpc251 bGwpOworCQkJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9DT05TVDsKKwkJCXNjcmF0Y2gtPmQu Y29uc3R2YWwudmFsdWUgPSBjb25zdHZhbHVlOworCQkJc2NyYXRjaC0+ZC5jb25zdHZhbC5p c251bGwgPSBjb25zdGlzbnVsbDsKKworCQkJRXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgc2Ny YXRjaCk7CisKKwkJCS8qCisJCQkgKiBFbWl0IEpVTVAgc3RlcCB0byBqdW1wIHRvIHRoZSBj b2VyY2lvbiBzdGVwIHRvIGNvZXJjZSB0aGUgYWJvdmUKKwkJCSAqIHZhbHVlIHRvIHRoZSBk ZXNpcmVkIG91dHB1dCB0eXBlLgorCQkJICovCisJCQlvbmVtcHR5X2p1bXBfc3RlcF9vZmYg PSBzdGF0ZS0+c3RlcHNfbGVuOworCQkJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KVU1QOwor CQkJc2NyYXRjaC0+ZC5qdW1wLmp1bXBkb25lID0gLTE7CS8qIHNldCBiZWxvdyAqLworCQkJ RXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7CisJCX0KKwl9CisKKwkvKiBTdGVw KHMpIHRvIGV2YWx1YXRlIE9OIEVSUk9SIGV4cHJlc3Npb24gKi8KKwlvbmVycm9yX2V4cHJf c3RlcF9vZmYgPSBzdGF0ZS0+c3RlcHNfbGVuOworCWlmIChqZXhwci0+b25fZXJyb3IgJiYK KwkJamV4cHItPm9uX2Vycm9yLT5idHlwZSAhPSBKU09OX0JFSEFWSU9SX0VSUk9SKQorCXsK KwkJaWYgKGpleHByLT5vbl9lcnJvci0+ZGVmYXVsdF9leHByKQorCQl7CisJCQlFeGVjSW5p dEV4cHJSZWMoKEV4cHIgKikgamV4cHItPm9uX2Vycm9yLT5kZWZhdWx0X2V4cHIsCisJCQkJ CQkJIHN0YXRlLCByZXN2LCByZXNudWxsKTsKKworCQkJLyoKKwkJCSAqIEVtaXQgSlVNUCBz dGVwIHRvIGp1bXAgdG8gZW5kIG9mIEpzb25FeHByIGNvZGUsIGJlY2F1c2UKKwkJCSAqIHRo ZSBkZWZhdWx0IGV4cHJlc3Npb24gaGFzIGFscmVhZHkgYmVlbiBjb2VyY2VkLCBzbyB0aGVy ZSdzCisJCQkgKiBub3RoaW5nIG1vcmUgdG8gZG8uCisJCQkgKi8KKwkJCXNjcmF0Y2gtPm9w Y29kZSA9IEVFT1BfSlVNUDsKKwkJCXNjcmF0Y2gtPmQuanVtcC5qdW1wZG9uZSA9IC0xOwkv KiBzZXQgYmVsb3cgKi8KKwkJCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOwor CQkJYWRqdXN0X2p1bXBzID0gbGFwcGVuZF9pbnQoYWRqdXN0X2p1bXBzLCBzdGF0ZS0+c3Rl cHNfbGVuIC0gMSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlEYXR1bQljb25zdHZhbHVlOwor CQkJYm9vbAljb25zdGlzbnVsbDsKKworCQkJY29uc3R2YWx1ZSA9IEdldEpzb25CZWhhdmlv clZhbHVlKGpleHByLT5vbl9lcnJvciwgJmNvbnN0aXNudWxsKTsKKwkJCXNjcmF0Y2gtPm9w Y29kZSA9IEVFT1BfQ09OU1Q7CisJCQlzY3JhdGNoLT5kLmNvbnN0dmFsLnZhbHVlID0gY29u c3R2YWx1ZTsKKwkJCXNjcmF0Y2gtPmQuY29uc3R2YWwuaXNudWxsID0gY29uc3Rpc251bGw7 CisKKwkJCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCisJCQkvKgorCQkJ ICogRW1pdCBKVU1QIHN0ZXAgdG8ganVtcCB0byB0aGUgY29lcmNpb24gc3RlcCB0byBjb2Vy Y2UgdGhlIGFib3ZlCisJCQkgKiB2YWx1ZSB0byB0aGUgZGVzaXJlZCBvdXRwdXQgdHlwZS4K KwkJCSAqLworCQkJb25lcnJvcl9qdW1wX3N0ZXBfb2ZmID0gc3RhdGUtPnN0ZXBzX2xlbjsK KwkJCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfSlVNUDsKKwkJCXNjcmF0Y2gtPmQuanVtcC5q dW1wZG9uZSA9IC0xOwkvKiBzZXQgbGF0ZXIgKi8KKwkJCUV4cHJFdmFsUHVzaFN0ZXAoc3Rh dGUsIHNjcmF0Y2gpOworCQl9CisJfQorCisJLyoKKwkgKiBTdGVwIHRvIGhhbmRsZSBhcHBs eWluZyBjb2VyY2lvbiB0byB0aGUgSlNPTiBpdGVtIHJldHVybmVkIGJ5CisJICogRUVPUF9K U09ORVhQUl9QQVRIIG9yIHRvIHRoZSBPTiBFTVBUWS9FUlJPUiBleHByZXNzaW9uIGFzCisJ ICogRUVPUF9KU09ORVhQUl9CRUhBVklPUiBkZWNpZGVzOyBzZWUgRXhlY0V2YWxKc29uRXhw ckNvZXJjaW9uKCkuCisJICovCisJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KU09ORVhQUl9D T0VSQ0lPTjsKKwlzY3JhdGNoLT5kLmpzb25leHByX2NvZXJjaW9uLmpzZXN0YXRlID0ganNl c3RhdGU7CisJY29lcmNpb25fc3RlcF9vZmYgPSBzdGF0ZS0+c3RlcHNfbGVuOworCUV4cHJF dmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCisJLyogSW5pdGlhbGl6ZSBjb2VyY2lv biBleHByZXNzaW9uKHMpLiAqLworCWlmIChqZXhwci0+cmVzdWx0X2NvZXJjaW9uKQorCXsK KwkJanNlc3RhdGUtPnJlc3VsdF9qY3N0YXRlID0KKwkJCUV4ZWNJbml0SnNvbkNvZXJjaW9u KHNjcmF0Y2gsIHN0YXRlLCBqZXhwci0+cmVzdWx0X2NvZXJjaW9uLAorCQkJCQkJCQkgcmVz diwgcmVzbnVsbCk7CisJCS8qIFNlZSB0aGUgY29tbWVudCBhYm92ZS4gKi8KKwkJc2NyYXRj aC0+b3Bjb2RlID0gRUVPUF9KVU1QOworCQlzY3JhdGNoLT5kLmp1bXAuanVtcGRvbmUgPSAt MTsJLyogY29tcHV0ZWQgbGF0ZXIgKi8KKwkJRXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgc2Ny YXRjaCk7CisJCWFkanVzdF9qdW1wcyA9IGxhcHBlbmRfaW50KGFkanVzdF9qdW1wcywgc3Rh dGUtPnN0ZXBzX2xlbiAtIDEpOworCX0KKwlpZiAoamV4cHItPmNvZXJjaW9ucykKKwl7CisJ CS8qCisJCSAqIEV4ZWNQcmVwYXJlSnNvbkl0ZW1Db2VyY2lvbigpIGNhbGxlZCBieSBFeGVj RXZhbEpzb25FeHByKCkgY2hvb3NlcworCQkgKiBvbmUgZm9yIGEgZ2l2ZW4gSlNPTiBpdGVt IHJldHVybmVkIGJ5IEpzb25QYXRoVmFsdWUoKS4KKwkJICovCisJCWpzZXN0YXRlLT5pdGVt X2pjc3RhdGVzID0KKwkJCUV4ZWNJbml0SnNvbkl0ZW1Db2VyY2lvbnMoc2NyYXRjaCwgc3Rh dGUsIGpleHByLT5jb2VyY2lvbnMsCisJCQkJCQkJCQkgIHJlc3YsIHJlc251bGwpOworCX0K KworCS8qCisJICogQW5kIGEgc3RlcCB0byBjbGVhbiB1cCBhZnRlciB0aGUgY29lcmNpb24g c3RlcDsgc2VlCisJICogRXhlY0V2YWxKc29uRXhwckNvZXJjaW9uRmluaXNoKCkuCisJICov CisJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KU09ORVhQUl9DT0VSQ0lPTl9GSU5JU0g7CisJ c2NyYXRjaC0+ZC5qc29uZXhwcl9jb2VyY2lvbi5qc2VzdGF0ZSA9IGpzZXN0YXRlOworCWNv ZXJjaW9uX2ZpbmlzaF9zdGVwX29mZiA9IHN0YXRlLT5zdGVwc19sZW47CisJRXhwckV2YWxQ dXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7CisKKwkvKgorCSAqIEFkanVzdCBqdW1wIHRhcmdl dCBhZGRyZXNzZXMgaW4gdmFyaW91cyBwb3N0LWV2YWwgc3RlcHMgbm93IHRoYXQgd2UgaGF2 ZQorCSAqIGFsbCB0aGUgc3RlcHMgaW4gcGxhY2UuCisJICovCisKKwkvKiBFRU9QX0pTT05F WFBSX1NLSVAgKi8KKwlBc3NlcnQoc2tpcF9zdGVwX29mZiA+PSAwKTsKKwlhcyA9ICZzdGF0 ZS0+c3RlcHNbc2tpcF9zdGVwX29mZl07CisJYXMtPmQuanNvbmV4cHJfc2tpcC5qdW1wX2Nv ZXJjaW9uID0gY29lcmNpb25fc3RlcF9vZmY7CisJYXMtPmQuanNvbmV4cHJfc2tpcC5qdW1w X3Bhc3NpbmdfYXJncyA9IHBhc3NpbmdfYXJnc19zdGVwX29mZjsKKworCS8qIEVFT1BfSlNP TkVYUFJfQkVIQVZJT1IgKi8KKwlBc3NlcnQoYmVoYXZpb3Jfc3RlcF9vZmYgPj0gMCk7CisJ YXMgPSAmc3RhdGUtPnN0ZXBzW2JlaGF2aW9yX3N0ZXBfb2ZmXTsKKwlhcy0+ZC5qc29uZXhw cl9iZWhhdmlvci5qdW1wX29uZXJyb3JfZXhwciA9IG9uZXJyb3JfZXhwcl9zdGVwX29mZjsK Kwlhcy0+ZC5qc29uZXhwcl9iZWhhdmlvci5qdW1wX29uZW1wdHlfZXhwciA9IG9uZW1wdHlf ZXhwcl9zdGVwX29mZjsKKwlhcy0+ZC5qc29uZXhwcl9iZWhhdmlvci5qdW1wX2NvZXJjaW9u ID0gY29lcmNpb25fc3RlcF9vZmY7CisJYXMtPmQuanNvbmV4cHJfYmVoYXZpb3IuanVtcF9z a2lwX2NvZXJjaW9uID0gY29lcmNpb25fZmluaXNoX3N0ZXBfb2ZmICsgMTsKKworCS8qIEVF T1BfSlNPTkVYUFJfQ09FUkNJT04gKi8KKwlBc3NlcnQoY29lcmNpb25fc3RlcF9vZmYgPj0g MCk7CisJYXMgPSAmc3RhdGUtPnN0ZXBzW2NvZXJjaW9uX3N0ZXBfb2ZmXTsKKwlhcy0+ZC5q c29uZXhwcl9jb2VyY2lvbi5qdW1wX2NvZXJjaW9uX2Vycm9yID0gYmVoYXZpb3Jfc3RlcF9v ZmY7CisJYXMtPmQuanNvbmV4cHJfY29lcmNpb24uanVtcF9jb2VyY2lvbl9kb25lID0gY29l cmNpb25fZmluaXNoX3N0ZXBfb2ZmICsgMTsKKworCS8qIEVFT1BfSlNPTkVYUFJfQ09FUkNJ T05fRklOSVNIICovCisJQXNzZXJ0KGNvZXJjaW9uX2ZpbmlzaF9zdGVwX29mZiA+PSAwKTsK KwlhcyA9ICZzdGF0ZS0+c3RlcHNbY29lcmNpb25fZmluaXNoX3N0ZXBfb2ZmXTsKKwlhcy0+ ZC5qc29uZXhwcl9jb2VyY2lvbl9maW5pc2guanVtcF9jb2VyY2lvbl9lcnJvciA9IGJlaGF2 aW9yX3N0ZXBfb2ZmOworCWFzLT5kLmpzb25leHByX2NvZXJjaW9uX2ZpbmlzaC5qdW1wX2Nv ZXJjaW9uX2RvbmUgPSBjb2VyY2lvbl9maW5pc2hfc3RlcF9vZmYgKyAxOworCisJLyogRUVP UF9KVU1QIHN0ZXBzICovCisKKwkvKgorCSAqIE9uZXMgYWZ0ZXIgT04gRU1QVFkgYW5kIE9O IEVSUk9SIG5vbi1kZWZhdWx0IGV4cHJlc3Npb25zIHNob3VsZCBqdW1wIHRvCisJICogdGhl IGNvZXJjaW9uIHN0ZXAuCisJICovCisJaWYgKG9uZW1wdHlfanVtcF9zdGVwX29mZiA+PSAw KQorCXsKKwkJYXMgPSAmc3RhdGUtPnN0ZXBzW29uZW1wdHlfanVtcF9zdGVwX29mZl07CisJ CWFzLT5kLmp1bXAuanVtcGRvbmUgPSBjb2VyY2lvbl9zdGVwX29mZjsKKwl9CisJaWYgKG9u ZXJyb3JfanVtcF9zdGVwX29mZiA+PSAwKQorCXsKKwkJYXMgPSAmc3RhdGUtPnN0ZXBzW29u ZXJyb3JfanVtcF9zdGVwX29mZl07CisJCWFzLT5kLmp1bXAuanVtcGRvbmUgPSBjb2VyY2lv bl9zdGVwX29mZjsKKwl9CisKKwkvKiBUaGUgcmVzdCBzaG91bGQganVtcCB0byB0aGUgZW5k LiAqLworCWZvcmVhY2gobGMsIGFkanVzdF9qdW1wcykKKwl7CisJCWFzID0gJnN0YXRlLT5z dGVwc1tsZmlyc3RfaW50KGxjKV07CisJCWFzLT5kLmp1bXAuanVtcGRvbmUgPSBzdGF0ZS0+ c3RlcHNfbGVuOworCX0KKworCS8qCisJICogU2V0IFJFVFVSTklORyB0eXBlJ3MgaW5wdXQg ZnVuY3Rpb24gdXNlZCBieSBFeGVjRXZhbEpzb25FeHByQ29lcmNpb24oKS4KKwkgKi8KKwlp ZiAoamV4cHItPm9taXRfcXVvdGVzIHx8CisJCShqZXhwci0+cmVzdWx0X2NvZXJjaW9uICYm IGpleHByLT5yZXN1bHRfY29lcmNpb24tPnZpYV9pbykpCisJeworCQlPaWQJCQl0eXBpbnB1 dDsKKwkJRm1nckluZm8gICAqZmluZm87CisKKwkJLyogbG9va3VwIHRoZSByZXN1bHQgdHlw ZSdzIGlucHV0IGZ1bmN0aW9uICovCisJCWdldFR5cGVJbnB1dEluZm8oamV4cHItPnJldHVy bmluZy0+dHlwaWQsICZ0eXBpbnB1dCwKKwkJCQkJCSAmanNlc3RhdGUtPmlucHV0LnR5cGlv cGFyYW0pOworCQlmaW5mbyA9IHBhbGxvYzAoc2l6ZW9mKEZtZ3JJbmZvKSk7CisJCWZtZ3Jf aW5mbyh0eXBpbnB1dCwgZmluZm8pOworCQlqc2VzdGF0ZS0+aW5wdXQuZmluZm8gPSBmaW5m bzsKKwl9Cit9CisKKy8qCisgKiBFdmFsdWF0ZSBhIEpTT04gZXJyb3IvZW1wdHkgYmVoYXZp b3IgcmVzdWx0LgorICovCitzdGF0aWMgRGF0dW0KK0dldEpzb25CZWhhdmlvclZhbHVlKEpz b25CZWhhdmlvciAqYmVoYXZpb3IsIGJvb2wgKmlzX251bGwpCit7CisJKmlzX251bGwgPSBm YWxzZTsKKworCXN3aXRjaCAoYmVoYXZpb3ItPmJ0eXBlKQorCXsKKwkJY2FzZSBKU09OX0JF SEFWSU9SX0VNUFRZX0FSUkFZOgorCQkJcmV0dXJuIEpzb25iUEdldERhdHVtKEpzb25iTWFr ZUVtcHR5QXJyYXkoKSk7CisKKwkJY2FzZSBKU09OX0JFSEFWSU9SX0VNUFRZX09CSkVDVDoK KwkJCXJldHVybiBKc29uYlBHZXREYXR1bShKc29uYk1ha2VFbXB0eU9iamVjdCgpKTsKKwor CQljYXNlIEpTT05fQkVIQVZJT1JfVFJVRToKKwkJCXJldHVybiBCb29sR2V0RGF0dW0odHJ1 ZSk7CisKKwkJY2FzZSBKU09OX0JFSEFWSU9SX0ZBTFNFOgorCQkJcmV0dXJuIEJvb2xHZXRE YXR1bShmYWxzZSk7CisKKwkJY2FzZSBKU09OX0JFSEFWSU9SX05VTEw6CisJCWNhc2UgSlNP Tl9CRUhBVklPUl9VTktOT1dOOgorCQljYXNlIEpTT05fQkVIQVZJT1JfRU1QVFk6CisJCQkq aXNfbnVsbCA9IHRydWU7CisJCQlyZXR1cm4gKERhdHVtKSAwOworCisJCWNhc2UgSlNPTl9C RUhBVklPUl9ERUZBVUxUOgorCQkJLyogQWx3YXlzIGhhbmRsZWQgaW4gdGhlIGNhbGxlci4g Ki8KKwkJCUFzc2VydChmYWxzZSk7CisJCQlyZXR1cm4gKERhdHVtKSAwOworCisJCWRlZmF1 bHQ6CisJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIFNRTC9KU09OIGJlaGF2aW9yICVk IiwgYmVoYXZpb3ItPmJ0eXBlKTsKKwkJCXJldHVybiAoRGF0dW0pIDA7CisJfQorfQorCisv KiBJbml0aWFsaXplIG9uZSBKc29uQ29lcmNpb24gZm9yIGV4ZWN1dGlvbi4gKi8KK3N0YXRp YyBKc29uQ29lcmNpb25TdGF0ZSAqCitFeGVjSW5pdEpzb25Db2VyY2lvbihFeHByRXZhbFN0 ZXAgKnNjcmF0Y2gsIEV4cHJTdGF0ZSAqc3RhdGUsCisJCQkJCSBKc29uQ29lcmNpb24gKmNv ZXJjaW9uLAorCQkJCQkgRGF0dW0gKnJlc3YsIGJvb2wgKnJlc251bGwpCit7CisJSnNvbkNv ZXJjaW9uU3RhdGUgKmpjc3RhdGUgPSBwYWxsb2MwKHNpemVvZihKc29uQ29lcmNpb25TdGF0 ZSkpOworCisJamNzdGF0ZS0+Y29lcmNpb24gPSBjb2VyY2lvbjsKKwlpZiAoY29lcmNpb24g JiYgY29lcmNpb24tPmV4cHIpCisJeworCQlEYXR1bSAgICpzYXZlX2lubmVybW9zdF9jYXNl dmFsOworCQlib29sCSpzYXZlX2lubmVybW9zdF9jYXNlbnVsbDsKKworCQlqY3N0YXRlLT5q dW1wX2V2YWxfZXhwciA9IHN0YXRlLT5zdGVwc19sZW47CisKKwkJLyogUHVzaCBzdGVwKHMp IHRvIGNvbXB1dGUgY3N0YXRlLT5jb2VyY2lvbi4gKi8KKwkJc2F2ZV9pbm5lcm1vc3RfY2Fz ZXZhbCA9IHN0YXRlLT5pbm5lcm1vc3RfY2FzZXZhbDsKKwkJc2F2ZV9pbm5lcm1vc3RfY2Fz ZW51bGwgPSBzdGF0ZS0+aW5uZXJtb3N0X2Nhc2VudWxsOworCisJCXN0YXRlLT5pbm5lcm1v c3RfY2FzZXZhbCA9IHJlc3Y7CisJCXN0YXRlLT5pbm5lcm1vc3RfY2FzZW51bGwgPSByZXNu dWxsOworCisJCUV4ZWNJbml0RXhwclJlYygoRXhwciAqKSBjb2VyY2lvbi0+ZXhwciwgc3Rh dGUsIHJlc3YsIHJlc251bGwpOworCisJCXN0YXRlLT5pbm5lcm1vc3RfY2FzZXZhbCA9IHNh dmVfaW5uZXJtb3N0X2Nhc2V2YWw7CisJCXN0YXRlLT5pbm5lcm1vc3RfY2FzZW51bGwgPSBz YXZlX2lubmVybW9zdF9jYXNlbnVsbDsKKwl9CisJZWxzZQorCQlqY3N0YXRlLT5qdW1wX2V2 YWxfZXhwciA9IC0xOworCisJcmV0dXJuIGpjc3RhdGU7Cit9CisKKy8qCisgKiBQdXNoIHN0 ZXBzIHRvIGV2YWx1YXRlIGNvZXJjaW9ucyBmcm9tIGEgZ2l2ZW4gSnNvbkl0ZW1Db2VyY2lv bnMsIHdoaWNoCisgKiBjb250YWlucyBhbGwgcG9zc2libGUgY29lcmNpb25zIHRoYXQgbWF5 IG5lZWQgdG8gYmUgYXBwbGllZCB0byBKU09OCisgKiBpdGVtcyBjb21pbmcgZnJvbSBldmFs dWF0aW5nIHRoZSBwYXJlbnQgSnNvbkV4cHIuCisgKi8KK3N0YXRpYyBKc29uSXRlbUNvZXJj aW9uc1N0YXRlICoKK0V4ZWNJbml0SnNvbkl0ZW1Db2VyY2lvbnMoRXhwckV2YWxTdGVwICpz Y3JhdGNoLCBFeHByU3RhdGUgKnN0YXRlLAorCQkJCQkJICBKc29uSXRlbUNvZXJjaW9ucyAq Y29lcmNpb25zLAorCQkJCQkJICBEYXR1bSAqcmVzdiwgYm9vbCAqcmVzbnVsbCkKK3sKKwlK c29uQ29lcmNpb24gKipjb2VyY2lvbjsKKwlKc29uSXRlbUNvZXJjaW9uc1N0YXRlICppdGVt X2pjc3RhdGVzID0gcGFsbG9jMChzaXplb2YoSnNvbkl0ZW1Db2VyY2lvbnNTdGF0ZSkpOwor CUpzb25Db2VyY2lvblN0YXRlICoqaXRlbV9qY3N0YXRlOworCUV4cHJFdmFsU3RlcCAqYXM7 CisJTGlzdAkgICAqYWRqdXN0X2p1bXBzID0gTklMOworCUxpc3RDZWxsICAgKmxjOworCisJ LyogUHVzaCB0aGUgc3RlcHMgb2YgaW5kaXZpZHVhbCBjb2VyY2lvbnMuICovCisJZm9yIChj b2VyY2lvbiA9ICZjb2VyY2lvbnMtPm51bGwsCisJCSBpdGVtX2pjc3RhdGUgPSAmaXRlbV9q Y3N0YXRlcy0+bnVsbDsKKwkJIGNvZXJjaW9uIDw9ICZjb2VyY2lvbnMtPmNvbXBvc2l0ZTsK KwkJIGNvZXJjaW9uKyssIGl0ZW1famNzdGF0ZSsrKQorCXsKKwkJKml0ZW1famNzdGF0ZSA9 IEV4ZWNJbml0SnNvbkNvZXJjaW9uKHNjcmF0Y2gsIHN0YXRlLCAqY29lcmNpb24sCisJCQkJ CQkJCQkJCSByZXN2LCByZXNudWxsKTsKKworCQkvKiBFbWl0IEpVTVAgc3RlcCB0byBza2lw IHBhc3Qgb3RoZXIgY29lcmNpb25zJyBzdGVwcy4gKi8KKwkJc2NyYXRjaC0+b3Bjb2RlID0g RUVPUF9KVU1QOworCisJCS8qCisJCSAqIFJlbWVtYmVyIEpVTVAgc3RlcCBhZGRyZXNzIHRv IHNldCB0aGUgYWN0dWFsIGp1bXAgdGFyZ2V0IGFkZHJlZXNzCisJCSAqIGJlbG93LgorCQkg Ki8KKwkJYWRqdXN0X2p1bXBzID0gbGFwcGVuZF9pbnQoYWRqdXN0X2p1bXBzLCBzdGF0ZS0+ c3RlcHNfbGVuKTsKKwkJRXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7CisJfQor CisJZm9yZWFjaChsYywgYWRqdXN0X2p1bXBzKQorCXsKKwkJaW50CQlqdW1wX3N0ZXBfaWQg PSBsZmlyc3RfaW50KGxjKTsKKworCQlhcyA9ICZzdGF0ZS0+c3RlcHNbanVtcF9zdGVwX2lk XTsKKwkJYXMtPmQuanVtcC5qdW1wZG9uZSA9IHN0YXRlLT5zdGVwc19sZW47CisJfQorCisJ cmV0dXJuIGl0ZW1famNzdGF0ZXM7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjRXhwckludGVycC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJ bnRlcnAuYwppbmRleCBmYjE2ZjQxMDlkLi5jZDdjNGEzYjQ5IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKQEAgLTU3LDE0ICs1NywxOSBAQAogI2luY2x1ZGUg InBvc3RncmVzLmgiCiAKICNpbmNsdWRlICJhY2Nlc3MvaGVhcHRvYXN0LmgiCisjaW5jbHVk ZSAiYWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKICNpbmNs dWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJjb21tYW5kcy9zZXF1ZW5jZS5o IgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNFeHByLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Iv bm9kZVN1YnBsYW4uaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibWlzY2Fk bWluLmgiCisjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCisjaW5jbHVkZSAibm9kZXMv bWlzY25vZGVzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAi cGFyc2VyL3BhcnNldHJlZS5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZV9leHByLmgiCiAj aW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKICNpbmNsdWRl ICJ1dGlscy9idWlsdGlucy5oIgpAQCAtNzQsOCArNzksMTAgQEAKICNpbmNsdWRlICJ1dGls cy9qc29uLmgiCiAjaW5jbHVkZSAidXRpbHMvanNvbmIuaCIKICNpbmNsdWRlICJ1dGlscy9q c29uZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlscy9qc29ucGF0aC5oIgogI2luY2x1ZGUgInV0 aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVk ZSAidXRpbHMvcmVzb3duZXIuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKICNp bmNsdWRlICJ1dGlscy90eXBjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3htbC5oIgpAQCAt MTUyLDYgKzE1OSw5IEBAIHN0YXRpYyBUdXBsZURlc2MgZ2V0X2NhY2hlZF9yb3d0eXBlKE9p ZCB0eXBlX2lkLCBpbnQzMiB0eXBtb2QsCiAJCQkJCQkJCQlib29sICpjaGFuZ2VkKTsKIHN0 YXRpYyB2b2lkIEV4ZWNFdmFsUm93TnVsbEludChFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZh bFN0ZXAgKm9wLAogCQkJCQkJCSAgIEV4cHJDb250ZXh0ICplY29udGV4dCwgYm9vbCBjaGVj a2lzbnVsbCk7CitzdGF0aWMgRGF0dW0gRXhlY1ByZXBhcmVKc29uSXRlbUNvZXJjaW9uKEpz b25iVmFsdWUgKml0ZW0sCisJCQkJCQkJSnNvbkl0ZW1Db2VyY2lvbnNTdGF0ZSAqaXRlbV9q Y3N0YXRlcywKKwkJCQkJCQlKc29uQ29lcmNpb25TdGF0ZSAqKnBfaXRlbV9qY3N0YXRlKTsK IAogLyogZmFzdC1wYXRoIGV2YWx1YXRpb24gZnVuY3Rpb25zICovCiBzdGF0aWMgRGF0dW0g RXhlY0p1c3RJbm5lclZhcihFeHByU3RhdGUgKnN0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRl eHQsIGJvb2wgKmlzbnVsbCk7CkBAIC00ODMsNiArNDkzLDExIEBAIEV4ZWNJbnRlcnBFeHBy KEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwgYm9vbCAqaXNudWxs KQogCQkmJkNBU0VfRUVPUF9TVUJQTEFOLAogCQkmJkNBU0VfRUVPUF9KU09OX0NPTlNUUlVD VE9SLAogCQkmJkNBU0VfRUVPUF9JU19KU09OLAorCQkmJkNBU0VfRUVPUF9KU09ORVhQUl9T S0lQLAorCQkmJkNBU0VfRUVPUF9KU09ORVhQUl9QQVRILAorCQkmJkNBU0VfRUVPUF9KU09O RVhQUl9CRUhBVklPUiwKKwkJJiZDQVNFX0VFT1BfSlNPTkVYUFJfQ09FUkNJT04sCisJCSYm Q0FTRV9FRU9QX0pTT05FWFBSX0NPRVJDSU9OX0ZJTklTSCwKIAkJJiZDQVNFX0VFT1BfQUdH X1NUUklDVF9ERVNFUklBTElaRSwKIAkJJiZDQVNFX0VFT1BfQUdHX0RFU0VSSUFMSVpFLAog CQkmJkNBU0VfRUVPUF9BR0dfU1RSSUNUX0lOUFVUX0NIRUNLX0FSR1MsCkBAIC0xMTg1LDgg KzEyMDAsMTQgQEAgRXhlY0ludGVycEV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRl eHQgKmVjb250ZXh0LCBib29sICppc251bGwpCiAJCQkJLyogc2Vjb25kIGFuZCB0aGlyZCBh cmd1bWVudHMgYXJlIGFscmVhZHkgc2V0IHVwICovCiAKIAkJCQlmY2luZm9faW4tPmlzbnVs bCA9IGZhbHNlOworCisJCQkJLyogUGFzcyBkb3duIHNvZnQtZXJyb3IgY2FwdHVyZSBub2Rl IGlmIGFueS4gKi8KKwkJCQlmY2luZm9faW4tPmNvbnRleHQgPSBzdGF0ZS0+ZXNjb250ZXh0 OworCiAJCQkJZCA9IEZ1bmN0aW9uQ2FsbEludm9rZShmY2luZm9faW4pOwogCQkJCSpvcC0+ cmVzdmFsdWUgPSBkOworCQkJCWlmIChTT0ZUX0VSUk9SX09DQ1VSUkVEKHN0YXRlLT5lc2Nv bnRleHQpKQorCQkJCQkqb3AtPnJlc251bGwgPSB0cnVlOwogCiAJCQkJLyogU2hvdWxkIGdl dCBudWxsIHJlc3VsdCBpZiBhbmQgb25seSBpZiBzdHIgaXMgTlVMTCAqLwogCQkJCWlmIChz dHIgPT0gTlVMTCkKQEAgLTExOTQsNyArMTIxNSw3IEBAIEV4ZWNJbnRlcnBFeHByKEV4cHJT dGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwgYm9vbCAqaXNudWxsKQogCQkJ CQlBc3NlcnQoKm9wLT5yZXNudWxsKTsKIAkJCQkJQXNzZXJ0KGZjaW5mb19pbi0+aXNudWxs KTsKIAkJCQl9Ci0JCQkJZWxzZQorCQkJCWVsc2UgaWYgKCFTT0ZUX0VSUk9SX09DQ1VSUkVE KHN0YXRlLT5lc2NvbnRleHQpKQogCQkJCXsKIAkJCQkJQXNzZXJ0KCEqb3AtPnJlc251bGwp OwogCQkJCQlBc3NlcnQoIWZjaW5mb19pbi0+aXNudWxsKTsKQEAgLTE4MTksMTAgKzE4NDAs NDEgQEAgRXhlY0ludGVycEV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRleHQgKmVj b250ZXh0LCBib29sICppc251bGwpCiAJCXsKIAkJCS8qIHRvbyBjb21wbGV4IGZvciBhbiBp bmxpbmUgaW1wbGVtZW50YXRpb24gKi8KIAkJCUV4ZWNFdmFsSnNvbklzUHJlZGljYXRlKHN0 YXRlLCBvcCk7CisJCQlFRU9fTkVYVCgpOworCQl9CiAKKwkJRUVPX0NBU0UoRUVPUF9KU09O RVhQUl9QQVRIKQorCQl7CisJCQkvKiB0b28gY29tcGxleCBmb3IgYW4gaW5saW5lIGltcGxl bWVudGF0aW9uICovCisJCQlFeGVjRXZhbEpzb25FeHByKHN0YXRlLCBvcCwgZWNvbnRleHQp OwogCQkJRUVPX05FWFQoKTsKIAkJfQogCisJCUVFT19DQVNFKEVFT1BfSlNPTkVYUFJfU0tJ UCkKKwkJeworCQkJLyogdG9vIGNvbXBsZXggZm9yIGFuIGlubGluZSBpbXBsZW1lbnRhdGlv biAqLworCQkJRUVPX0pVTVAoRXhlY0V2YWxKc29uRXhwclNraXAoc3RhdGUsIG9wKSk7CisJ CX0KKworCQlFRU9fQ0FTRShFRU9QX0pTT05FWFBSX0JFSEFWSU9SKQorCQl7CisJCQkvKiB0 b28gY29tcGxleCBmb3IgYW4gaW5saW5lIGltcGxlbWVudGF0aW9uICovCisJCQlFRU9fSlVN UChFeGVjRXZhbEpzb25FeHByQmVoYXZpb3Ioc3RhdGUsIG9wKSk7CisJCX0KKworCQlFRU9f Q0FTRShFRU9QX0pTT05FWFBSX0NPRVJDSU9OKQorCQl7CisJCQkvKiB0b28gY29tcGxleCBm b3IgYW4gaW5saW5lIGltcGxlbWVudGF0aW9uICovCisJCQlFRU9fSlVNUChFeGVjRXZhbEpz b25FeHByQ29lcmNpb24oc3RhdGUsIG9wLCBlY29udGV4dCwKKwkJCQkJCQkJCQkJICAqb3At PnJlc3ZhbHVlLCAqb3AtPnJlc251bGwpKTsKKwkJfQorCisJCUVFT19DQVNFKEVFT1BfSlNP TkVYUFJfQ09FUkNJT05fRklOSVNIKQorCQl7CisJCQkvKiB0b28gY29tcGxleCBmb3IgYW4g aW5saW5lIGltcGxlbWVudGF0aW9uICovCisJCQlFRU9fSlVNUChFeGVjRXZhbEpzb25FeHBy Q29lcmNpb25GaW5pc2goc3RhdGUsIG9wKSk7CisJCX0KKwogCQlFRU9fQ0FTRShFRU9QX0xB U1QpCiAJCXsKIAkJCS8qIHVucmVhY2hhYmxlICovCkBAIC0zNjYxLDcgKzM3MTMsNyBAQCBF eGVjRXZhbENvbnN0cmFpbnRDaGVjayhFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAg Km9wKQogewogCWlmICghKm9wLT5kLmRvbWFpbmNoZWNrLmNoZWNrbnVsbCAmJgogCQkhRGF0 dW1HZXRCb29sKCpvcC0+ZC5kb21haW5jaGVjay5jaGVja3ZhbHVlKSkKLQkJZXJlcG9ydChF UlJPUiwKKwkJZXJyc2F2ZShzdGF0ZS0+ZXNjb250ZXh0LAogCQkJCShlcnJjb2RlKEVSUkNP REVfQ0hFQ0tfVklPTEFUSU9OKSwKIAkJCQkgZXJybXNnKCJ2YWx1ZSBmb3IgZG9tYWluICVz IHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgXCIlc1wiIiwKIAkJCQkJCWZvcm1hdF90eXBl X2JlKG9wLT5kLmRvbWFpbmNoZWNrLnJlc3VsdHR5cGUpLApAQCAtNDU3NiwzICs0NjI4LDQ1 MSBAQCBFeGVjRXZhbEpzb25Db25zdHJ1Y3RvcihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZh bFN0ZXAgKm9wLAogCSpvcC0+cmVzdmFsdWUgPSByZXM7CiAJKm9wLT5yZXNudWxsID0gaXNu dWxsOwogfQorCisvKgorICogRXZhbHVhdGUgZ2l2ZW4gSnNvbkV4cHIgYnkgcGVyZm9ybWlu ZyB0aGUgc3BlY2lmaWVkIEpTT04gb3BlcmF0aW9uLgorICoKKyAqIFRoaXMgYWxzbyBwb3B1 bGF0ZXMgdGhlIEpzb25FeHByUG9zdEV2YWxTdGF0ZSB3aXRoIHRoZSBpbmZvcm1hdGlvbiBu ZWVkZWQKKyAqIGJ5IHRoZSBzdWJzZXF1ZW50IHN0ZXBzIHRoYXQgaGFuZGxlIHRoZSBzcGVj aWZpZWQgSnNvbkJlaGF2aW9yLgorICovCit2b2lkCitFeGVjRXZhbEpzb25FeHByKEV4cHJT dGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsIEV4cHJDb250ZXh0ICplY29udGV4dCkK K3sKKwlKc29uRXhwclN0YXRlICpqc2VzdGF0ZSA9IG9wLT5kLmpzb25leHByLmpzZXN0YXRl OworCUpzb25FeHByUHJlRXZhbFN0YXRlICpwcmVfZXZhbCA9ICZqc2VzdGF0ZS0+cHJlX2V2 YWw7CisJSnNvbkV4cHJQb3N0RXZhbFN0YXRlICpwb3N0X2V2YWwgPSAmanNlc3RhdGUtPnBv c3RfZXZhbDsKKwlKc29uRXhwciAgICpqZXhwciA9IGpzZXN0YXRlLT5qc2V4cHI7CisJRGF0 dW0JCWl0ZW07CisJRGF0dW0JCXJlcyA9IChEYXR1bSkgMDsKKwlib29sCQlyZXNudWxsID0g dHJ1ZTsKKwlKc29uUGF0aCAgICpwYXRoOworCWJvb2wJICAgKmVycm9yOworCWJvb2wJICAg KmVtcHR5OworCisJaXRlbSA9IHByZV9ldmFsLT5mb3JtYXR0ZWRfZXhwci52YWx1ZTsKKwlw YXRoID0gRGF0dW1HZXRKc29uUGF0aFAocHJlX2V2YWwtPnBhdGhzcGVjLnZhbHVlKTsKKwor CS8qIFJlc2V0IEpzb25FeHByUG9zdEV2YWxTdGF0ZSBmb3IgdGhpcyBldmFsdWF0aW9uLiAq LworCW1lbXNldChwb3N0X2V2YWwsIDAsIHNpemVvZigqcG9zdF9ldmFsKSk7CisKKwkvKiBS ZXNwZWN0IE9OIEVSUk9SIGJlaGF2aW9yIGR1cmluZyBwYXRoIGV2YWx1YXRpb24uICovCisJ anNlc3RhdGUtPnRocm93X2Vycm9yID0gKGpleHByLT5vbl9lcnJvci0+YnR5cGUgPT0gSlNP Tl9CRUhBVklPUl9FUlJPUik7CisKKwkvKgorCSAqIEJlIHN1cmUgdG8gc2F2ZSB0aGUgZXJy b3IgKGlmIG5lZWRlZCkgYW5kIGVtcHR5IHN0YXR1c2VzIGZvciB0aGUKKwkgKiBFRU9QX0pT T05FWFBSX0JFSEFWSU9SIHN0ZXAgdG8gcGVydXNlLgorCSAqLworCWVycm9yID0gIWpzZXN0 YXRlLT50aHJvd19lcnJvciA/ICZwb3N0X2V2YWwtPmVycm9yIDogTlVMTDsKKwllbXB0eSA9 ICZwb3N0X2V2YWwtPmVtcHR5OworCisJc3dpdGNoIChqZXhwci0+b3ApCisJeworCQljYXNl IEpTT05fUVVFUllfT1A6CisJCQlyZXMgPSBKc29uUGF0aFF1ZXJ5KGl0ZW0sIHBhdGgsIGpl eHByLT53cmFwcGVyLCBlbXB0eSwgZXJyb3IsCisJCQkJCQkJCXByZV9ldmFsLT5hcmdzKTsK KwkJCWlmIChlcnJvciAmJiAqZXJyb3IpCisJCQl7CisJCQkJKm9wLT5yZXNudWxsID0gdHJ1 ZTsKKwkJCQkqb3AtPnJlc3ZhbHVlID0gKERhdHVtKSAwOworCQkJCXJldHVybjsKKwkJCX0K KwkJCXJlc251bGwgPSAhRGF0dW1HZXRQb2ludGVyKHJlcyk7CisJCQlicmVhazsKKworCQlj YXNlIEpTT05fVkFMVUVfT1A6CisJCQl7CisJCQkJSnNvbmJWYWx1ZSAqamJ2ID0gSnNvblBh dGhWYWx1ZShpdGVtLCBwYXRoLCBlbXB0eSwgZXJyb3IsCisJCQkJCQkJCQkJCQlwcmVfZXZh bC0+YXJncyk7CisKKwkJCQlpZiAoZXJyb3IgJiYgKmVycm9yKQorCQkJCXsKKwkJCQkJKm9w LT5yZXNudWxsID0gdHJ1ZTsKKwkJCQkJKm9wLT5yZXN2YWx1ZSA9IChEYXR1bSkgMDsKKwkJ CQkJcmV0dXJuOworCQkJCX0KKworCQkJCWlmICghamJ2KQkJLyogTlVMTCBvciBlbXB0eSAq LworCQkJCXsKKwkJCQkJcmVzbnVsbCA9IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwor CQkJCUFzc2VydCghKmVtcHR5KTsKKworCQkJCXJlc251bGwgPSBmYWxzZTsKKworCQkJCS8q IGNvZXJjZSBzY2FsYXIgaXRlbSB0byB0aGUgb3V0cHV0IHR5cGUgKi8KKwkJCQlpZiAoamV4 cHItPnJldHVybmluZy0+dHlwaWQgPT0gSlNPTk9JRCB8fAorCQkJCQlqZXhwci0+cmV0dXJu aW5nLT50eXBpZCA9PSBKU09OQk9JRCkKKwkJCQl7CisJCQkJCS8qIFVzZSByZXN1bHQgY29l cmNpb24gZnJvbSBqc29uW2JdIHRvIHRoZSBvdXRwdXQgdHlwZSAqLworCQkJCQlyZXMgPSBK c29uYlBHZXREYXR1bShKc29uYlZhbHVlVG9Kc29uYihqYnYpKTsKKwkJCQkJYnJlYWs7CisJ CQkJfQorCisJCQkJLyoKKwkJCQkgKiBFcnJvciBvdXQgaWYgbm8gY2FzdCBleGlzdHMgdG8g Y29lcmNlIFNRTC9KU09OIGl0ZW0gdG8gdGhlCisJCQkJICogdGhlIG91dHB1dCB0eXBlLgor CQkJCSAqLworCQkJCUFzc2VydChwb3N0X2V2YWwtPml0ZW1famNzdGF0ZSA9PSBOVUxMKTsK KwkJCQlyZXMgPSBFeGVjUHJlcGFyZUpzb25JdGVtQ29lcmNpb24oamJ2LAorCQkJCQkJCQkJ CQkJICBqc2VzdGF0ZS0+aXRlbV9qY3N0YXRlcywKKwkJCQkJCQkJCQkJCSAgJnBvc3RfZXZh bC0+aXRlbV9qY3N0YXRlKTsKKwkJCQlpZiAocG9zdF9ldmFsLT5pdGVtX2pjc3RhdGUgJiYK KwkJCQkJcG9zdF9ldmFsLT5pdGVtX2pjc3RhdGUtPmNvZXJjaW9uICYmCisJCQkJCShwb3N0 X2V2YWwtPml0ZW1famNzdGF0ZS0+Y29lcmNpb24tPnZpYV9pbyB8fAorCQkJCQkgcG9zdF9l dmFsLT5pdGVtX2pjc3RhdGUtPmNvZXJjaW9uLT52aWFfcG9wdWxhdGUpKQorCQkJCXsKKwkJ CQkJaWYgKGVycm9yKQorCQkJCQl7CisJCQkJCQkqZXJyb3IgPSB0cnVlOworCQkJCQkJKm9w LT5yZXNudWxsID0gdHJ1ZTsKKwkJCQkJCSpvcC0+cmVzdmFsdWUgPSAoRGF0dW0pIDA7CisJ CQkJCQlyZXR1cm47CisJCQkJCX0KKworCQkJCQkvKgorCQkJCQkgKiBDb2VyY2lvbiB2aWEg SS9PIG1lYW5zIGhlcmUgdGhhdCB0aGUgY2FzdCB0byB0aGUgdGFyZ2V0CisJCQkJCSAqIHR5 cGUgc2ltcGx5IGRvZXMgbm90IGV4aXN0LgorCQkJCQkgKi8KKwkJCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NRTF9KU09OX0lURU1fQ0FOTk9UX0JFX0NB U1RfVE9fVEFSR0VUX1RZUEUpLAorCQkJCQkJCSBlcnJtc2coIlNRTC9KU09OIGl0ZW0gY2Fu bm90IGJlIGNhc3QgdG8gdGFyZ2V0IHR5cGUiKSkpOworCQkJCX0KKwkJCQlicmVhazsKKwkJ CX0KKworCQljYXNlIEpTT05fRVhJU1RTX09QOgorCQkJeworCQkJCWJvb2wJCWV4aXN0cyA9 IEpzb25QYXRoRXhpc3RzKGl0ZW0sIHBhdGgsCisJCQkJCQkJCQkJCQkJcHJlX2V2YWwtPmFy Z3MsCisJCQkJCQkJCQkJCQkJZXJyb3IpOworCisJCQkJcmVzbnVsbCA9IGVycm9yICYmICpl cnJvcjsKKwkJCQlyZXMgPSBCb29sR2V0RGF0dW0oZXhpc3RzKTsKKwkJCQlicmVhazsKKwkJ CX0KKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBTUUwvSlNP TiBleHByZXNzaW9uIG9wICVkIiwgamV4cHItPm9wKTsKKwkJCSpvcC0+cmVzbnVsbCA9IHRy dWU7CisJCQkqb3AtPnJlc3ZhbHVlID0gKERhdHVtKSAwOworCQkJcmV0dXJuOworCX0KKwor CS8qCisJICogSWYgdGhlIE9OIEVNUFRZIGJlaGF2aW9yIGlzIHRvIGNhdXNlIGFuIGVycm9y LCBkbyBzbyBoZXJlLiAgT3RoZXIKKwkgKiBiZWhhdmlvcnMgd2lsbCBiZSBoYW5kbGVkIGJ5 IHRoZSBjYWxsZXIuCisJICovCisJaWYgKCplbXB0eSkKKwl7CisJCUFzc2VydChqZXhwci0+ b25fZW1wdHkpOwkvKiBpdCBpcyBub3QgSlNPTl9FWElTVFMgKi8KKworCQlpZiAoamV4cHIt Pm9uX2VtcHR5LT5idHlwZSA9PSBKU09OX0JFSEFWSU9SX0VSUk9SKQorCQl7CisJCQlpZiAo ZXJyb3IpCisJCQl7CisJCQkJKmVycm9yID0gdHJ1ZTsKKwkJCQkqb3AtPnJlc251bGwgPSB0 cnVlOworCQkJCSpvcC0+cmVzdmFsdWUgPSAoRGF0dW0pIDA7CisJCQkJcmV0dXJuOworCQkJ fQorCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX05PX1NRTF9K U09OX0lURU0pLAorCQkJCQkgZXJybXNnKCJubyBTUUwvSlNPTiBpdGVtIikpKTsKKwkJfQor CX0KKworCSpvcC0+cmVzdmFsdWUgPSByZXM7CisJKm9wLT5yZXNudWxsID0gcmVzbnVsbDsK K30KKworLyoKKyAqIFNraXAgY2FsbGluZyBFeGVjRXZhbEpzb24oKSBvbiB0aGUgZ2l2ZW4g SnNvbkV4cHI/CisgKgorICogUmV0dXJucyB0aGUgc3RlcCBhZGRyZXNzIHRvIGJlIHBlcmZv cm1lZCBuZXh0LgorICovCitpbnQKK0V4ZWNFdmFsSnNvbkV4cHJTa2lwKEV4cHJTdGF0ZSAq c3RhdGUsIEV4cHJFdmFsU3RlcCAqb3ApCit7CisJSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGUg PSBvcC0+ZC5qc29uZXhwcl9za2lwLmpzZXN0YXRlOworCisJLyoKKwkgKiBTa2lwIGlmIGVp dGhlciBvZiB0aGUgaW5wdXQgZXhwcmVzc2lvbnMgaGFzIHR1cm5lZCBvdXQgdG8gYmUgTlVM TCwKKwkgKiB0aG91Z2ggZG8gZXhlY3V0ZSBkb21haW4gY2hlY2tzIGZvciBOVUxMcywgd2hp Y2ggYXJlIGhhbmRsZWQgYnkgdGhlCisJICogY29lcmNpb24gc3RlcC4KKwkgKi8KKwlpZiAo anNlc3RhdGUtPnByZV9ldmFsLmZvcm1hdHRlZF9leHByLmlzbnVsbCB8fAorCQlqc2VzdGF0 ZS0+cHJlX2V2YWwucGF0aHNwZWMuaXNudWxsKQorCXsKKwkJKm9wLT5yZXN2YWx1ZSA9IDA7 CisJCSpvcC0+cmVzbnVsbCA9IHRydWU7CisJCXJldHVybiBvcC0+ZC5qc29uZXhwcl9za2lw Lmp1bXBfY29lcmNpb247CisJfQorCisJLyoKKwkgKiBHbyBldmFsdWF0ZSB0aGUgUEFTU0lO RyBhcmdzIGlmIGFueSBhbmQgc3Vic2VxdWVudGx5IEpTT04gcGF0aAorCSAqIGl0c2VsZi4K KwkgKi8KKwlyZXR1cm4gb3AtPmQuanNvbmV4cHJfc2tpcC5qdW1wX3Bhc3NpbmdfYXJnczsK K30KKworLyoKKyAqIFJldHVybnMgdGhlIHN0ZXAgYWRkcmVzcyB0byBwZXJmb3JtIHRoZSBK c29uQmVoYXZpb3IgYXBwbGljYWJsZSB0bworICogdGhlIEpTT04gaXRlbSB0aGF0IHJlc3Vs dGVkIGZyb20gZXZhbHVhdGluZyB0aGUgZ2l2ZW4gSnNvbkV4cHIuCisgKgorICogUmV0dXJu cyB0aGUgc3RlcCBhZGRyZXNzIHRvIGJlIHBlcmZvcm1lZCBuZXh0LgorICovCitpbnQKK0V4 ZWNFdmFsSnNvbkV4cHJCZWhhdmlvcihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAg Km9wKQoreworCUpzb25FeHByU3RhdGUgKmpzZXN0YXRlID0gb3AtPmQuanNvbmV4cHJfYmVo YXZpb3IuanNlc3RhdGU7CisJSnNvbkV4cHJQb3N0RXZhbFN0YXRlICpwb3N0X2V2YWwgPSAm anNlc3RhdGUtPnBvc3RfZXZhbDsKKwlKc29uQmVoYXZpb3IgKmJlaGF2aW9yID0gTlVMTDsK KwlpbnQJCWp1bXBfdG8gPSAtMTsKKworCWlmIChwb3N0X2V2YWwtPmVycm9yIHx8IHBvc3Rf ZXZhbC0+Y29lcmNpb25fZXJyb3IpCisJeworCQliZWhhdmlvciA9IGpzZXN0YXRlLT5qc2V4 cHItPm9uX2Vycm9yOworCQlqdW1wX3RvID0gb3AtPmQuanNvbmV4cHJfYmVoYXZpb3IuanVt cF9vbmVycm9yX2V4cHI7CisJfQorCWVsc2UgaWYgKHBvc3RfZXZhbC0+ZW1wdHkpCisJewor CQliZWhhdmlvciA9IGpzZXN0YXRlLT5qc2V4cHItPm9uX2VtcHR5OworCQlqdW1wX3RvID0g b3AtPmQuanNvbmV4cHJfYmVoYXZpb3IuanVtcF9vbmVtcHR5X2V4cHI7CisJfQorCWVsc2Ug aWYgKCFwb3N0X2V2YWwtPmNvZXJjaW9uX2RvbmUpCisJeworCQkvKgorCQkgKiBJZiBubyBl cnJvciBvciB0aGUgSlNPTiBpdGVtIGlzIG5vdCBlbXB0eSwgZGlyZWN0bHkgZ28gdG8gdGhl CisJCSAqIGNvZXJjaW9uIHN0ZXAgdG8gY29lcmNlIHRoZSBpdGVtIGFzIGlzLgorCQkgKi8K KwkJcmV0dXJuIG9wLT5kLmpzb25leHByX2JlaGF2aW9yLmp1bXBfY29lcmNpb247CisJfQor CisJQXNzZXJ0KGJlaGF2aW9yKTsKKworCS8qCisJICogU2V0IHVwIGZvciBjb2VyY2lvbiBz dGVwIHRoYXQgd2lsbCBydW4gdG8gY29lcmNlIGEgbm9uLWRlZmF1bHQgYmVoYXZpb3IKKwkg KiB2YWx1ZS4gIEl0IHNob3VsZCB1c2UgcmVzdWx0X2NvZXJjaW9uLCBpZiBhbnkuICBFcnJv cnMgdGhhdCBtYXkgb2NjdXIKKwkgKiBzaG91bGQgYmUgdGhyb3duIGZvciBKU09OIG9wcyBv dGhlciB0aGFuIEpTT05fVkFMVUVfT1AuCisJICovCisJaWYgKGJlaGF2aW9yLT5idHlwZSAh PSBKU09OX0JFSEFWSU9SX0RFRkFVTFQpCisJeworCQlwb3N0X2V2YWwtPml0ZW1famNzdGF0 ZSA9IE5VTEw7CisJCWpzZXN0YXRlLT50aHJvd19lcnJvciA9IChqc2VzdGF0ZS0+anNleHBy LT5vcCAhPSBKU09OX1ZBTFVFX09QKTsKKwl9CisKKwlBc3NlcnQoanVtcF90byA+PSAwKTsK KwlyZXR1cm4ganVtcF90bzsKK30KKy8qCisgKiBFdmFsdWF0ZSBvciByZXR1cm4gdGhlIHN0 ZXAgYWRkcmVzcyB0byBldmFsdWF0ZSBhIGNvZXJjaW9uIG9mIGEgSlNPTiBpdGVtCisgKiB0 byB0aGUgdGFyZ2V0IHR5cGUuICBUaGUgZm9ybWVyIGlmIHRoZSBjb2VyY2lvbiBtdXN0IGJl IGRvbmUgcmlnaHQgYXdheSBieQorICogY2FsbGluZyBpdHMgaW5wdXQgZnVuY3Rpb24gb3Ig YnkgY2FsbGluZyBqc29uX3BvcHVsYXRlX3R5cGUoKS4KKyAqCisgKiBSZXR1cm5zIHRoZSBz dGVwIGFkZHJlc3MgdG8gYmUgcGVyZm9ybWVkIG5leHQuCisgKi8KK2ludAorRXhlY0V2YWxK c29uRXhwckNvZXJjaW9uKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsCisJ CQkJCQkgRXhwckNvbnRleHQgKmVjb250ZXh0LAorCQkJCQkJIERhdHVtIHJlcywgYm9vbCBy ZXNudWxsKQoreworCUpzb25FeHByU3RhdGUgKmpzZXN0YXRlID0gb3AtPmQuanNvbmV4cHJf Y29lcmNpb24uanNlc3RhdGU7CisJSnNvbkV4cHIgKmpleHByID0ganNlc3RhdGUtPmpzZXhw cjsKKwlKc29uRXhwclBvc3RFdmFsU3RhdGUgKnBvc3RfZXZhbCA9ICZqc2VzdGF0ZS0+cG9z dF9ldmFsOworCUpzb25Db2VyY2lvblN0YXRlICppdGVtX2pjc3RhdGUgPSBwb3N0X2V2YWwt Pml0ZW1famNzdGF0ZTsKKwlKc29uQ29lcmNpb25TdGF0ZSAqcmVzdWx0X2pjc3RhdGUgPSBq c2VzdGF0ZS0+cmVzdWx0X2pjc3RhdGU7CisKKwlpZiAoaXRlbV9qY3N0YXRlID09IE5VTEwg JiYKKwkJanNlc3RhdGUtPmpzZXhwci0+b3AgIT0gSlNPTl9FWElTVFNfT1ApCisJeworCQlK c29uQ29lcmNpb24gKmNvZXJjaW9uID0gcmVzdWx0X2pjc3RhdGUgPyByZXN1bHRfamNzdGF0 ZS0+Y29lcmNpb24gOgorCQkJTlVMTDsKKwkJSnNvbmIJICAgKmpiID0gcmVzbnVsbCA/IE5V TEwgOiBEYXR1bUdldEpzb25iUChyZXMpOworCQlFcnJvclNhdmVDb250ZXh0IGVzY29udGV4 dCA9IHtUX0Vycm9yU2F2ZUNvbnRleHR9OworCQlOb2RlCSAgICplc2NvbnRleHRfcCA9ICFq c2VzdGF0ZS0+dGhyb3dfZXJyb3IgPworCQkJKE5vZGUgKikgJmVzY29udGV4dCA6IE5VTEw7 CisKKwkJaWYgKChjb2VyY2lvbiAmJiBjb2VyY2lvbi0+dmlhX2lvKSB8fAorCQkJKGpleHBy LT5vbWl0X3F1b3RlcyAmJiAhcmVzbnVsbCAmJgorCQkJIEpCX1JPT1RfSVNfU0NBTEFSKGpi KSkpCisJCXsKKwkJCS8qIHN0cmlwIHF1b3RlcyBhbmQgY2FsbCB0eXBpbnB1dCBmdW5jdGlv biAqLworCQkJY2hhcgkgICAqc3RyID0gcmVzbnVsbCA/IE5VTEwgOiBKc29uYlVucXVvdGUo amIpOworCQkJYm9vbAkJdHlwZV9pc19kb21haW4gPQorCQkJCQkJKGdldEJhc2VUeXBlKGpl eHByLT5yZXR1cm5pbmctPnR5cGlkKSAhPQorCQkJCQkJIGpleHByLT5yZXR1cm5pbmctPnR5 cGlkKTsKKworCQkJLyoKKwkJCSAqIENhdGNoIGVycm9ycyBvbmx5IGlmIHRoZSB0eXBlIGlz IG5vdCBhIGRvbWFpbiwgYmVjYXVzZSBlcnJvcnMKKwkJCSAqIGNhdXNlZCBieSBhIGRvbWFp bidzIGNvbnN0cmFpbnQgZmFpbHVyZSBtdXN0IGJlIHRocm93biByaWdodAorCQkJICogYXdh eS4KKwkJCSAqLworCQkJaWYgKCFJbnB1dEZ1bmN0aW9uQ2FsbFNhZmUoanNlc3RhdGUtPmlu cHV0LmZpbmZvLCBzdHIsCisJCQkJCQkJCQkgICBqc2VzdGF0ZS0+aW5wdXQudHlwaW9wYXJh bSwKKwkJCQkJCQkJCSAgIGpleHByLT5yZXR1cm5pbmctPnR5cG1vZCwKKwkJCQkJCQkJCSAg ICF0eXBlX2lzX2RvbWFpbiA/IGVzY29udGV4dF9wIDogTlVMTCwKKwkJCQkJCQkJCSAgIG9w LT5yZXN2YWx1ZSkpCisJCQl7CisJCQkJcG9zdF9ldmFsLT5lcnJvciA9IHRydWU7CisJCQkJ Km9wLT5yZXNudWxsID0gdHJ1ZTsKKwkJCQkqb3AtPnJlc3ZhbHVlID0gKERhdHVtKSAwOwor CQkJCXJldHVybiBvcC0+ZC5qc29uZXhwcl9jb2VyY2lvbi5qdW1wX2NvZXJjaW9uX2Vycm9y OworCQkJfQorCisJCQlwb3N0X2V2YWwtPmNvZXJjaW9uX2RvbmUgPSB0cnVlOworCQkJcmV0 dXJuIG9wLT5kLmpzb25leHByX2NvZXJjaW9uLmp1bXBfY29lcmNpb25fZG9uZTsKKwkJfQor CQllbHNlIGlmIChjb2VyY2lvbiAmJiBjb2VyY2lvbi0+dmlhX3BvcHVsYXRlKQorCQl7CisJ CQkqb3AtPnJlc3ZhbHVlID0ganNvbl9wb3B1bGF0ZV90eXBlKHJlcywgSlNPTkJPSUQsCisJ CQkJCQkJCQkJCSAgIGpleHByLT5yZXR1cm5pbmctPnR5cGlkLAorCQkJCQkJCQkJCQkgICBq ZXhwci0+cmV0dXJuaW5nLT50eXBtb2QsCisJCQkJCQkJCQkJCSAgICZwb3N0X2V2YWwtPmNh Y2hlLAorCQkJCQkJCQkJCQkgICBlY29udGV4dC0+ZWN4dF9wZXJfcXVlcnlfbWVtb3J5LAor CQkJCQkJCQkJCQkgICBvcC0+cmVzbnVsbCwKKwkJCQkJCQkJCQkJICAgZXNjb250ZXh0X3Ap OworCQkJaWYgKFNPRlRfRVJST1JfT0NDVVJSRUQoZXNjb250ZXh0X3ApKQorCQkJeworCQkJ CXBvc3RfZXZhbC0+ZXJyb3IgPSB0cnVlOworCQkJCSpvcC0+cmVzdmFsdWUgPSAoRGF0dW0p IDA7CisJCQkJKm9wLT5yZXNudWxsID0gdHJ1ZTsKKwkJCQlyZXR1cm4gb3AtPmQuanNvbmV4 cHJfY29lcmNpb24uanVtcF9jb2VyY2lvbl9lcnJvcjsKKwkJCX0KKworCQkJcG9zdF9ldmFs LT5jb2VyY2lvbl9kb25lID0gdHJ1ZTsKKwkJCXJldHVybiBvcC0+ZC5qc29uZXhwcl9jb2Vy Y2lvbi5qdW1wX2NvZXJjaW9uX2RvbmU7CisJCX0KKwl9CisKKwlpZiAoIWpzZXN0YXRlLT50 aHJvd19lcnJvcikKKwl7CisJCXBvc3RfZXZhbC0+ZXNjb250ZXh0LnR5cGUgPSBUX0Vycm9y U2F2ZUNvbnRleHQ7CisJCXN0YXRlLT5lc2NvbnRleHQgPSAoTm9kZSAqKSAmcG9zdF9ldmFs LT5lc2NvbnRleHQ7CisJfQorCisJaWYgKGl0ZW1famNzdGF0ZSAmJiBpdGVtX2pjc3RhdGUt Pmp1bXBfZXZhbF9leHByID49IDApCisJCXJldHVybiBpdGVtX2pjc3RhdGUtPmp1bXBfZXZh bF9leHByOworCWVsc2UgaWYgKHJlc3VsdF9qY3N0YXRlICYmIHJlc3VsdF9qY3N0YXRlLT5q dW1wX2V2YWxfZXhwciA+PSAwKQorCQlyZXR1cm4gcmVzdWx0X2pjc3RhdGUtPmp1bXBfZXZh bF9leHByOworCisJcG9zdF9ldmFsLT5jb2VyY2lvbl9kb25lID0gdHJ1ZTsKKwlyZXR1cm4g b3AtPmQuanNvbmV4cHJfY29lcmNpb24uanVtcF9jb2VyY2lvbl9kb25lOworfQorCisvKgor ICogQ2hlY2tzIGlmIHRoZSBjb2VyY2lvbiBldmFsdWF0aW9uIGxlZCB0byBhbiBlcnJvci4g IElmIGFuIGVycm9yIGRpZCBvY2N1ciwKKyAqIHRoaXMgcmV0dXJucyB0aGUgYWRkcmVzcyBv ZiB0aGUgc3RlcCB0aGF0IGhhbmRsZXMgdGhlIGVycm9yLCBvdGhlcndpc2UKKyAqIHRoZSBz dGVwIGFmdGVyIHRoZSBjb2VyY2lvbiBzdGVwLCB3aGljaCBmaW5pc2hlcyB0aGUgSnNvbkV4 cHIgcHJvY2Vzc2luZy4KKyAqLworaW50CitFeGVjRXZhbEpzb25FeHByQ29lcmNpb25GaW5p c2goRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCkKK3sKKwlKc29uRXhwclBv c3RFdmFsU3RhdGUgKnBvc3RfZXZhbCA9CisJCSZvcC0+ZC5qc29uZXhwcl9jb2VyY2lvbl9m aW5pc2guanNlc3RhdGUtPnBvc3RfZXZhbDsKKworCWlmIChTT0ZUX0VSUk9SX09DQ1VSUkVE KHN0YXRlLT5lc2NvbnRleHQpKQorCXsKKwkJKm9wLT5yZXN2YWx1ZSA9IDA7CisJCSpvcC0+ cmVzbnVsbCA9IHRydWU7CisJCXBvc3RfZXZhbC0+Y29lcmNpb25fZXJyb3IgPSB0cnVlOwor CQlyZXR1cm4gb3AtPmQuanNvbmV4cHJfY29lcmNpb25fZmluaXNoLmp1bXBfY29lcmNpb25f ZXJyb3I7CisJfQorCisJLyogUmVzZXQuICovCisJc3RhdGUtPmVzY29udGV4dCA9IE5VTEw7 CisJcG9zdF9ldmFsLT5jb2VyY2lvbl9kb25lID0gdHJ1ZTsKKwlyZXR1cm4gb3AtPmQuanNv bmV4cHJfY29lcmNpb25fZmluaXNoLmp1bXBfY29lcmNpb25fZG9uZTsKK30KKworLyoKKyAq IFByZXBhcmUgU1FML0pTT04gaXRlbSBjb2VyY2lvbiB0byB0aGUgb3V0cHV0IHR5cGUuIFJl dHVybmVkIGEgZGF0dW0gb2YgdGhlCisgKiBjb3JyZXNwb25kaW5nIFNRTCB0eXBlIGFuZCBh IHBvaW50ZXIgdG8gdGhlIGNvZXJjaW9uIHN0YXRlLgorICovCitzdGF0aWMgRGF0dW0KK0V4 ZWNQcmVwYXJlSnNvbkl0ZW1Db2VyY2lvbihKc29uYlZhbHVlICppdGVtLAorCQkJCQkJCUpz b25JdGVtQ29lcmNpb25zU3RhdGUgKml0ZW1famNzdGF0ZXMsCisJCQkJCQkJSnNvbkNvZXJj aW9uU3RhdGUgKipwX2l0ZW1famNzdGF0ZSkKK3sKKwlKc29uQ29lcmNpb25TdGF0ZSAqaXRl bV9qY3N0YXRlOworCURhdHVtCQlyZXM7CisJSnNvbmJWYWx1ZSAJYnVmOworCisJaWYgKGl0 ZW0tPnR5cGUgPT0gamJ2QmluYXJ5ICYmCisJCUpzb25Db250YWluZXJJc1NjYWxhcihpdGVt LT52YWwuYmluYXJ5LmRhdGEpKQorCXsKKwkJYm9vbAkJcmVzIFBHX1VTRURfRk9SX0FTU0VS VFNfT05MWTsKKworCQlyZXMgPSBKc29uYkV4dHJhY3RTY2FsYXIoaXRlbS0+dmFsLmJpbmFy eS5kYXRhLCAmYnVmKTsKKwkJaXRlbSA9ICZidWY7CisJCUFzc2VydChyZXMpOworCX0KKwor CS8qIGdldCBjb2VyY2lvbiBzdGF0ZSByZWZlcmVuY2UgYW5kIGRhdHVtIG9mIHRoZSBjb3Jy ZXNwb25kaW5nIFNRTCB0eXBlICovCisJc3dpdGNoIChpdGVtLT50eXBlKQorCXsKKwkJY2Fz ZSBqYnZOdWxsOgorCQkJaXRlbV9qY3N0YXRlID0gaXRlbV9qY3N0YXRlcy0+bnVsbDsKKwkJ CXJlcyA9IChEYXR1bSkgMDsKKwkJCWJyZWFrOworCisJCWNhc2UgamJ2U3RyaW5nOgorCQkJ aXRlbV9qY3N0YXRlID0gaXRlbV9qY3N0YXRlcy0+c3RyaW5nOworCQkJcmVzID0gUG9pbnRl ckdldERhdHVtKGNzdHJpbmdfdG9fdGV4dF93aXRoX2xlbihpdGVtLT52YWwuc3RyaW5nLnZh bCwKKwkJCQkJCQkJCQkJCQkJICAgaXRlbS0+dmFsLnN0cmluZy5sZW4pKTsKKwkJCWJyZWFr OworCisJCWNhc2UgamJ2TnVtZXJpYzoKKwkJCWl0ZW1famNzdGF0ZSA9IGl0ZW1famNzdGF0 ZXMtPm51bWVyaWM7CisJCQlyZXMgPSBOdW1lcmljR2V0RGF0dW0oaXRlbS0+dmFsLm51bWVy aWMpOworCQkJYnJlYWs7CisKKwkJY2FzZSBqYnZCb29sOgorCQkJaXRlbV9qY3N0YXRlID0g aXRlbV9qY3N0YXRlcy0+Ym9vbGVhbjsKKwkJCXJlcyA9IEJvb2xHZXREYXR1bShpdGVtLT52 YWwuYm9vbGVhbik7CisJCQlicmVhazsKKworCQljYXNlIGpidkRhdGV0aW1lOgorCQkJcmVz ID0gaXRlbS0+dmFsLmRhdGV0aW1lLnZhbHVlOworCQkJc3dpdGNoIChpdGVtLT52YWwuZGF0 ZXRpbWUudHlwaWQpCisJCQl7CisJCQkJY2FzZSBEQVRFT0lEOgorCQkJCQlpdGVtX2pjc3Rh dGUgPSBpdGVtX2pjc3RhdGVzLT5kYXRlOworCQkJCQlicmVhazsKKwkJCQljYXNlIFRJTUVP SUQ6CisJCQkJCWl0ZW1famNzdGF0ZSA9IGl0ZW1famNzdGF0ZXMtPnRpbWU7CisJCQkJCWJy ZWFrOworCQkJCWNhc2UgVElNRVRaT0lEOgorCQkJCQlpdGVtX2pjc3RhdGUgPSBpdGVtX2pj c3RhdGVzLT50aW1ldHo7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVElNRVNUQU1QT0lEOgor CQkJCQlpdGVtX2pjc3RhdGUgPSBpdGVtX2pjc3RhdGVzLT50aW1lc3RhbXA7CisJCQkJCWJy ZWFrOworCQkJCWNhc2UgVElNRVNUQU1QVFpPSUQ6CisJCQkJCWl0ZW1famNzdGF0ZSA9IGl0 ZW1famNzdGF0ZXMtPnRpbWVzdGFtcHR6OworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0Ogor CQkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBqc29uYiBkYXRldGltZSB0eXBlIG9pZCAl dSIsCisJCQkJCQkgaXRlbS0+dmFsLmRhdGV0aW1lLnR5cGlkKTsKKwkJCQkJcmV0dXJuIChE YXR1bSkgMDsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgamJ2QXJyYXk6CisJCWNhc2Ug amJ2T2JqZWN0OgorCQljYXNlIGpidkJpbmFyeToKKwkJCWl0ZW1famNzdGF0ZSA9IGl0ZW1f amNzdGF0ZXMtPmNvbXBvc2l0ZTsKKwkJCXJlcyA9IEpzb25iUEdldERhdHVtKEpzb25iVmFs dWVUb0pzb25iKGl0ZW0pKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVS Uk9SLCAidW5leHBlY3RlZCBqc29uYiB2YWx1ZSB0eXBlICVkIiwgaXRlbS0+dHlwZSk7CisJ CQlyZXR1cm4gKERhdHVtKSAwOworCX0KKworCSpwX2l0ZW1famNzdGF0ZSA9IGl0ZW1famNz dGF0ZTsKKworCXJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9qaXQv bGx2bS9sbHZtaml0X2V4cHIuYyBiL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhw ci5jCmluZGV4IGE0Zjc3MzM0MzUuLjBlYjFhMTUwNDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL2ppdC9sbHZt L2xsdm1qaXRfZXhwci5jCkBAIC0yNDAxLDYgKzI0MDEsMjUyIEBAIGxsdm1fY29tcGlsZV9l eHByKEV4cHJTdGF0ZSAqc3RhdGUpCiAJCQkJTExWTUJ1aWxkQnIoYiwgb3BibG9ja3Nbb3Bu byArIDFdKTsKIAkJCQlicmVhazsKIAorCQkJY2FzZSBFRU9QX0pTT05FWFBSX1BBVEg6CisJ CQkJYnVpbGRfRXZhbFhGdW5jKGIsIG1vZCwgIkV4ZWNFdmFsSnNvbkV4cHIiLAorCQkJCQkJ CQl2X3N0YXRlLCBvcCwgdl9lY29udGV4dCk7CisJCQkJTExWTUJ1aWxkQnIoYiwgb3BibG9j a3Nbb3BubyArIDFdKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBFRU9QX0pTT05FWFBSX1NL SVA6CisJCQkJeworCQkJCQlMTFZNVmFsdWVSZWYgcGFyYW1zWzJdOworCQkJCQlMTFZNVmFs dWVSZWYgdl9yZXQ7CisKKwkJCQkJLyoKKwkJCQkJICogQ2FsbCBFeGVjRXZhbEpzb25FeHBy U2tpcCgpIHRvIGRlY2lkZSBpZiBKU09OIHBhdGgKKwkJCQkJICogZXZhbHVhdGlvbiBjYW4g YmUgc2tpcHBlZC4gIFRoaXMgcmV0dXJucyB0aGUgc3RlcAorCQkJCQkgKiBhZGRyZXNzIHRv IGp1bXAgdG8uCisJCQkJCSAqLworCQkJCQlwYXJhbXNbMF0gPSB2X3N0YXRlOworCQkJCQlw YXJhbXNbMV0gPSBsX3B0cl9jb25zdChvcCwgbF9wdHIoU3RydWN0RXhwckV2YWxTdGVwKSk7 CisJCQkJCXZfcmV0ID0gTExWTUJ1aWxkQ2FsbChiLAorCQkJCQkJCQkJCSAgbGx2bV9wZ19m dW5jKG1vZCwgIkV4ZWNFdmFsSnNvbkV4cHJTa2lwIiksCisJCQkJCQkJCQkJICBwYXJhbXMs IGxlbmd0aG9mKHBhcmFtcyksICIiKTsKKworCQkJCQkvKgorCQkJCQkgKiBKdW1wIHRvIGNv ZXJjaW9uIHN0ZXAgaWYgdGhlIHJldHVybmVkIGFkZHJlc3MgaXMgdGhlCisJCQkJCSAqIHNh bWUgYXMganNvbmV4cHJfc2tpcC5qdW1wX2NvZXJjaW9uLCB3aGljaCBzaWduaWZpZXMKKwkJ CQkJICogc2tpcHBpbmcgb2YgSlNPTiBwYXRoIGV2YWx1YXRpb24sIGVsc2UgdG8gdGhlIG5l eHQgc3RlcAorCQkJCQkgKiB3aGljaCBtdXN0IHBvaW50IHRvIHRoZSBzdGVwcyB0byBldmFs dWF0ZSBQQVNTSU5HIGFyZ3MsCisJCQkJCSAqIGlmIGFueSwgb3IgdG8gdGhlIEpTT04gcGF0 aCBldmFsdWF0aW9uLgorCQkJCQkgKi8KKwkJCQkJTExWTUJ1aWxkQ29uZEJyKGIsCisJCQkJ CQkJCQlMTFZNQnVpbGRJQ21wKGIsCisJCQkJCQkJCQkJCQkgIExMVk1JbnRFUSwKKwkJCQkJ CQkJCQkJCSAgdl9yZXQsCisJCQkJCQkJCQkJCQkgIGxfaW50MzJfY29uc3Qob3AtPmQuanNv bmV4cHJfc2tpcC5qdW1wX2NvZXJjaW9uKSwKKwkJCQkJCQkJCQkJCSAgIiIpLAorCQkJCQkJ CQkJb3BibG9ja3Nbb3AtPmQuanNvbmV4cHJfc2tpcC5qdW1wX2NvZXJjaW9uXSwKKwkJCQkJ CQkJCW9wYmxvY2tzW29wbm8gKyAxXSk7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJY2Fz ZSBFRU9QX0pTT05FWFBSX0JFSEFWSU9SOgorCQkJCXsKKwkJCQkJTExWTVZhbHVlUmVmIHBh cmFtc1syXTsKKwkJCQkJTExWTVZhbHVlUmVmIHZfcmV0OworCQkJCQlMTFZNQmFzaWNCbG9j a1JlZiBiX2p1bXBfb25lcnJvcl9kZWZhdWx0OworCisJCQkJCS8qCisJCQkJCSAqIENhbGwg RXhlY0V2YWxKc29uRXhwckJlaGF2aW9yKCkgdG8gZGVjaWRlIGlmIE9OIEVNUFRZIG9yCisJ CQkJCSAqIE9OIEVSUk9SIGJlaGF2aW9yIG11c3QgYmUgaW52b2tlZCBkZXBlbmRpbmcgb24g d2hhdCBKU09OCisJCQkJCSAqIHBhdGggZXZhbHVhdGlvbiByZXR1cm5lZC4gIFRoaXMgcmV0 dXJucyB0aGUgc3RlcCBhZGRyZXNzCisJCQkJCSAqIHRvIGp1bXAgdG8uCisJCQkJCSAqLwor CQkJCQlwYXJhbXNbMF0gPSB2X3N0YXRlOworCQkJCQlwYXJhbXNbMV0gPSBsX3B0cl9jb25z dChvcCwgbF9wdHIoU3RydWN0RXhwckV2YWxTdGVwKSk7CisJCQkJCXZfcmV0ID0gTExWTUJ1 aWxkQ2FsbChiLAorCQkJCQkJCQkJCSAgbGx2bV9wZ19mdW5jKG1vZCwgIkV4ZWNFdmFsSnNv bkV4cHJCZWhhdmlvciIpLAorCQkJCQkJCQkJCSAgcGFyYW1zLCBsZW5ndGhvZihwYXJhbXMp LCAiIik7CisKKwkJCQkJYl9qdW1wX29uZXJyb3JfZGVmYXVsdCA9CisJCQkJCQlsX2JiX2Jl Zm9yZV92KG9wYmxvY2tzW29wbm8gKyAxXSwKKwkJCQkJCQkJCSAgIm9wLiVkLmpzb25leHBy X2JlaGF2aW9yX2p1bXBfb25lcnJvcl9kZWZhdWx0Iiwgb3Bubyk7CisKKwkJCQkJLyoKKwkJ CQkJICogSnVtcCB0byBjb2VyY2lvbiBzdGVwIGlmIHRoZSByZXR1cm5lZCBhZGRyZXNzIGlz IHRoZQorCQkJCQkgKiBzYW1lIGFzIGpzb25leHByX2JlaGF2aW9yLmp1bXBfY29lcmNpb24s IGVsc2UgdG8gdGhlCisJCQkJCSAqIG5leHQgYmxvY2ssIG9uZSB0aGF0IGNoZWNrcyB3aGV0 aGVyIHRvIGV2YWx1YXRlCisJCQkJCSAqIHRoZSBPTiBFUlJPUiBkZWZhdWx0IGV4cHJlc3Np b24uCisJCQkJCSAqLworCQkJCQlMTFZNQnVpbGRDb25kQnIoYiwKKwkJCQkJCQkJCUxMVk1C dWlsZElDbXAoYiwKKwkJCQkJCQkJCQkJCSAgTExWTUludEVRLAorCQkJCQkJCQkJCQkJICB2 X3JldCwKKwkJCQkJCQkJCQkJCSAgbF9pbnQzMl9jb25zdChvcC0+ZC5qc29uZXhwcl9iZWhh dmlvci5qdW1wX2NvZXJjaW9uKSwKKwkJCQkJCQkJCQkJCSAgIiIpLAorCQkJCQkJCQkJb3Bi bG9ja3Nbb3AtPmQuanNvbmV4cHJfYmVoYXZpb3IuanVtcF9jb2VyY2lvbl0sCisJCQkJCQkJ CQliX2p1bXBfb25lcnJvcl9kZWZhdWx0KTsKKworCQkJCQkvKgorCQkJCQkgKiBCbG9jayB0 aGF0IGNoZWNrcyB3aGV0aGVyIHRvIGV2YWx1YXRlIHRoZSBPTiBFUlJPUgorCQkJCQkgKiBk ZWZhdWx0IGV4cHJlc3Npb24uCisJCQkJCSAqCisJCQkJCSAqIEp1bXAgdG8gZXZhbHVhdGUg dGhlIE9OIEVSUk9SIGRlZmF1bHQgZXhwcmVzc2lvbiBpZiB0aGUKKwkJCQkJICogcmV0dXJu ZWQgYWRkcmVzcyBpcyB0aGUgc2FtZSBhcworCQkJCQkgKiBqc29uZXhwcl9iZWhhdmlvci5q dW1wX29uZXJyb3JfZGVmYXVsdCwgZWxzZSBqdW1wIHRvCisJCQkJCSAqIGV2YWx1YXRlIHRo ZSBPTiBFTVBUWSBkZWZhdWx0IGV4cHJlc3Npb24uCisJCQkJCSAqLworCQkJCQlMTFZNUG9z aXRpb25CdWlsZGVyQXRFbmQoYiwgYl9qdW1wX29uZXJyb3JfZGVmYXVsdCk7CisJCQkJCUxM Vk1CdWlsZENvbmRCcihiLAorCQkJCQkJCQkJTExWTUJ1aWxkSUNtcChiLAorCQkJCQkJCQkJ CQkJICBMTFZNSW50RVEsCisJCQkJCQkJCQkJCQkgIHZfcmV0LAorCQkJCQkJCQkJCQkJICBs X2ludDMyX2NvbnN0KG9wLT5kLmpzb25leHByX2JlaGF2aW9yLmp1bXBfb25lcnJvcl9leHBy KSwKKwkJCQkJCQkJCQkJCSAgIiIpLAorCQkJCQkJCQkJb3BibG9ja3Nbb3AtPmQuanNvbmV4 cHJfYmVoYXZpb3IuanVtcF9vbmVycm9yX2V4cHJdLAorCQkJCQkJCQkJb3BibG9ja3Nbb3At PmQuanNvbmV4cHJfYmVoYXZpb3IuanVtcF9vbmVtcHR5X2V4cHJdKTsKKwkJCQkJYnJlYWs7 CisJCQkJfQorCQkJY2FzZSBFRU9QX0pTT05FWFBSX0NPRVJDSU9OOgorCQkJCXsKKwkJCQkJ SnNvbkV4cHJTdGF0ZSAqanNlc3RhdGUgPSBvcC0+ZC5qc29uZXhwcl9jb2VyY2lvbi5qc2Vz dGF0ZTsKKwkJCQkJSnNvbkl0ZW1Db2VyY2lvbnNTdGF0ZSAqaXRlbV9qY3N0YXRlcyA9IGpz ZXN0YXRlLT5pdGVtX2pjc3RhdGVzOworCQkJCQlKc29uQ29lcmNpb25TdGF0ZSAqcmVzdWx0 X2pjc3RhdGUgPSBqc2VzdGF0ZS0+cmVzdWx0X2pjc3RhdGU7CisJCQkJCUxMVk1WYWx1ZVJl ZiB2X3JldDsKKwkJCQkJTExWTVZhbHVlUmVmIHBhcmFtc1s1XTsKKworCQkJCQkvKgorCQkJ CQkgKiBDYWxsIEV4ZWNFdmFsSnNvbkV4cHJDb2VyY2lvbigpIHRvIGV2YWx1YXRlIGFwcHJv cHJpYXRlCisJCQkJCSAqIGNvZXJjaW9uLiAgVGhpcyB3aWxsIHJldHVybiB0aGUgc3RlcCBh ZGRyZXNzIHRvIGp1bXAKKwkJCQkJICogdG8uCisJCQkJCSAqLworCQkJCQlwYXJhbXNbMF0g PSB2X3N0YXRlOworCQkJCQlwYXJhbXNbMV0gPSBsX3B0cl9jb25zdChvcCwgbF9wdHIoU3Ry dWN0RXhwckV2YWxTdGVwKSk7CisJCQkJCXBhcmFtc1syXSA9IHZfZWNvbnRleHQ7CisJCQkJ CXBhcmFtc1szXSA9IHZfcmVzdmFsdWVwOworCQkJCQlwYXJhbXNbNF0gPSB2X3Jlc251bGxw OworCQkJCQl2X3JldCA9IExMVk1CdWlsZENhbGwoYiwKKwkJCQkJCQkJCQkgIGxsdm1fcGdf ZnVuYyhtb2QsICJFeGVjRXZhbEpzb25FeHByQ29lcmNpb24iKSwKKwkJCQkJCQkJCQkgIHBh cmFtcywgbGVuZ3Rob2YocGFyYW1zKSwgIiIpOworCisJCQkJCS8qCisJCQkJCSAqIEp1bXAg dG8gaGFuZGxlIGEgY29lcmNpb24gZXJyb3IgaWYgdGhlIHJldHVybmVkIGFkZHJlc3MKKwkJ CQkJICogaXMgdGhlIHNhbWUgYXMganNvbmV4cHJfY29lcmNpb24uanVtcF9jb2VyY2lvbl9l cnJvciwKKwkJCQkJICogZWxzZSB0byB0aGUgc3RlcCBhZnRlciBjb2VyY2lvbiAoY29lcmNp b24gZG9uZSEpLgorCQkJCQkgKi8KKwkJCQkJTExWTUJ1aWxkQ29uZEJyKGIsCisJCQkJCQkJ CQlMTFZNQnVpbGRJQ21wKGIsCisJCQkJCQkJCQkJCQkgIExMVk1JbnRFUSwKKwkJCQkJCQkJ CQkJCSAgdl9yZXQsCisJCQkJCQkJCQkJCQkgIGxfaW50MzJfY29uc3Qob3AtPmQuanNvbmV4 cHJfY29lcmNpb24uanVtcF9jb2VyY2lvbl9lcnJvciksCisJCQkJCQkJCQkJCQkgICIiKSwK KwkJCQkJCQkJCW9wYmxvY2tzW29wLT5kLmpzb25leHByX2NvZXJjaW9uLmp1bXBfY29lcmNp b25fZXJyb3JdLAorCQkJCQkJCQkJb3BibG9ja3Nbb3AtPmQuanNvbmV4cHJfY29lcmNpb24u anVtcF9jb2VyY2lvbl9kb25lXSk7CisKKwkJCQkJaWYgKGl0ZW1famNzdGF0ZXMpCisJCQkJ CXsKKwkJCQkJCUpzb25Db2VyY2lvblN0YXRlICoqaXRlbV9qY3N0YXRlOworCQkJCQkJaW50 CQluX2NvZXJjaW9ucyA9IChpbnQpCisJCQkJCQkoaXRlbV9qY3N0YXRlcy0+Y29tcG9zaXRl IC0gaXRlbV9qY3N0YXRlcy0+bnVsbCkgKyAxOworCQkJCQkJaW50CQlpOworCQkJCQkJTExW TUJhc2ljQmxvY2tSZWYgKmJfY29lcmNpb25zOworCisKKwkJCQkJCS8qCisJCQkJCQkgKiBX aWxsIGNyZWF0ZSBhIGJsb2NrIGZvciBlYWNoIGNvZXJjaW9uIGJlbG93IHRvIGNoZWNrCisJ CQkJCQkgKiB3aGV0aGVyIHRvIGV2YWx1YXRlIHRoZSBjb2VyY2lvbidzIGV4cHJlc3Npb24g aWYgdGhlcmUncworCQkJCQkJICogb25lIG9yIHRvIHNraXAgdG8gdGhlIGVuZCBpZiBub3Qu CisJCQkJCQkgKi8KKwkJCQkJCWJfY29lcmNpb25zID0gcGFsbG9jKChuX2NvZXJjaW9ucyAr IDEpICogc2l6ZW9mKExMVk1CYXNpY0Jsb2NrUmVmKSk7CisJCQkJCQlmb3IgKGkgPSAwOyBp IDwgbl9jb2VyY2lvbnMgKyAxOyBpKyspCisJCQkJCQkJYl9jb2VyY2lvbnNbaV0gPQorCQkJ CQkJCQlsX2JiX2JlZm9yZV92KG9wYmxvY2tzW29wbm8gKyAxXSwKKwkJCQkJCQkJCQkJICAi b3AuJWQuanNvbl9pdGVtX2NvZXJjaW9uLiVkIiwKKwkJCQkJCQkJCQkJICBvcG5vLCBpKTsK KworCQkJCQkJLyogSnVtcCB0byBjaGVjayBmaXJzdCBjb2VyY2lvbiAqLworCQkJCQkJTExW TUJ1aWxkQnIoYiwgYl9jb2VyY2lvbnNbMF0pOworCisJCQkJCQkvKiBBZGQgY29uZGl0aW9u YWwgYnJhbmNoZXMgZm9yIGluZGl2aWR1YWwgY29lcmNpb24ncyBleHByZXNzaW9ucyAqLwor CQkJCQkJZm9yIChpdGVtX2pjc3RhdGUgPSAmaXRlbV9qY3N0YXRlcy0+bnVsbCwgaSA9IDA7 CisJCQkJCQkJIGl0ZW1famNzdGF0ZSA8PSAmaXRlbV9qY3N0YXRlcy0+Y29tcG9zaXRlOwor CQkJCQkJCSBpdGVtX2pjc3RhdGUrKywgaSsrKQorCQkJCQkJeworCQkJCQkJCS8qIEJsb2Nr IGZvciB0aGlzIGNvZXJjaW9uICovCisJCQkJCQkJTExWTVBvc2l0aW9uQnVpbGRlckF0RW5k KGIsIGJfY29lcmNpb25zW2ldKTsKKworCQkJCQkJCS8qCisJCQkJCQkJICogSnVtcCB0byBl dmFsdWF0ZSB0aGUgY29lcmNpb24ncyBleHByZXNzaW9uIGlmIHRoZQorCQkJCQkJCSAqIGFk ZHJlc3MgcmV0dXJuZWQgaXMgdGhlIHNhbWUgYXMgdGhpcyBjb2VyY2lvbidzCisJCQkJCQkJ ICoganVtcF9ldmFsX2V4cHIgKHRoYXQgaXMsIGlmIGl0IGlzIHZhbGlkKSwgZWxzZQorCQkJ CQkJCSAqIGNoZWNrIHRoZSBuZXh0IGNvZXJjaW9uJ3MuCisJCQkJCQkJICovCisJCQkJCQkJ TExWTUJ1aWxkQ29uZEJyKGIsCisJCQkJCQkJCQkJCUxMVk1CdWlsZElDbXAoYiwKKwkJCQkJ CQkJCQkJCQkJICBMTFZNSW50RVEsCisJCQkJCQkJCQkJCQkJCSAgdl9yZXQsCisJCQkJCQkJ CQkJCQkJCSAgbF9pbnQzMl9jb25zdCgoKml0ZW1famNzdGF0ZSktPmp1bXBfZXZhbF9leHBy KSwKKwkJCQkJCQkJCQkJCQkJICAiIiksCisJCQkJCQkJCQkJCSgqaXRlbV9qY3N0YXRlKS0+ anVtcF9ldmFsX2V4cHIgPj0gMCA/CisJCQkJCQkJCQkJCW9wYmxvY2tzWygqaXRlbV9qY3N0 YXRlKS0+anVtcF9ldmFsX2V4cHJdIDoKKwkJCQkJCQkJCQkJb3BibG9ja3Nbb3AtPmQuanNv bmV4cHJfY29lcmNpb24uanVtcF9jb2VyY2lvbl9kb25lXSwKKwkJCQkJCQkJCQkJYl9jb2Vy Y2lvbnNbaSArIDFdKTsKKwkJCQkJCX0KKworCQkJCQkJLyoKKwkJCQkJCSAqIEEgcGxhY2Vo b2xkZXIgYmxvY2sgdGhhdCB0aGUgbGFzdCBjb2VyY2lvbidzIGJsb2NrIG1pZ2h0CisJCQkJ CQkgKiBqdW1wIHRvLCB3aGljaCB1bmNvbmRpdGlvbmFsbHkganVtcHMgdG8gZW5kIG9mCisJ CQkJCQkgKiBjb2VyY2lvbnMuCisJCQkJCQkgKi8KKwkJCQkJCUxMVk1Qb3NpdGlvbkJ1aWxk ZXJBdEVuZChiLCBiX2NvZXJjaW9uc1tpXSk7CisJCQkJCQlMTFZNQnVpbGRCcihiLCBvcGJs b2Nrc1tvcC0+ZC5qc29uZXhwcl9jb2VyY2lvbi5qdW1wX2NvZXJjaW9uX2RvbmVdKTsKKwkJ CQkJfQorCisJCQkJCS8qCisJCQkJCSAqIEp1bXAgdG8gZXZhbHVhdGUgdGhlIHJlc3VsdF9j b2VyY2lvbidzIGV4cHJlc3Npb24gaWYKKwkJCQkJICogbm9uZSBvZiB0aGUgYWJvdmUgY29l cmNpb25zIG1hdGNoZWQsIHRoYXQgaXMsIGlmCisJCQkJCSAqIHRoZXJlJ3Mgb25lLgorCQkJ CQkgKi8KKwkJCQkJaWYgKHJlc3VsdF9qY3N0YXRlKQorCQkJCQl7CisJCQkJCQlMTFZNQnVp bGRDb25kQnIoYiwKKwkJCQkJCQkJCQlMTFZNQnVpbGRJQ21wKGIsCisJCQkJCQkJCQkJCQkJ ICBMTFZNSW50RVEsCisJCQkJCQkJCQkJCQkJICB2X3JldCwKKwkJCQkJCQkJCQkJCQkgIGxf aW50MzJfY29uc3QocmVzdWx0X2pjc3RhdGUtPmp1bXBfZXZhbF9leHByKSwKKwkJCQkJCQkJ CQkJCQkgICIiKSwKKwkJCQkJCQkJCQlyZXN1bHRfamNzdGF0ZS0+anVtcF9ldmFsX2V4cHIg Pj0gMCA/CisJCQkJCQkJCQkJb3BibG9ja3NbcmVzdWx0X2pjc3RhdGUtPmp1bXBfZXZhbF9l eHByXSA6CisJCQkJCQkJCQkJb3BibG9ja3Nbb3AtPmQuanNvbmV4cHJfY29lcmNpb24uanVt cF9jb2VyY2lvbl9kb25lXSwKKwkJCQkJCQkJCQlvcGJsb2Nrc1tvcC0+ZC5qc29uZXhwcl9j b2VyY2lvbi5qdW1wX2NvZXJjaW9uX2RvbmVdKTsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJ CQl9CisKKwkJCWNhc2UgRUVPUF9KU09ORVhQUl9DT0VSQ0lPTl9GSU5JU0g6CisJCQkJewor CQkJCQlMTFZNVmFsdWVSZWYgcGFyYW1zWzJdOworCQkJCQlMTFZNVmFsdWVSZWYgdl9yZXQ7 CisKKwkJCQkJLyoKKwkJCQkJICogQ2FsbCBFeGVjRXZhbEpzb25FeHByQ29lcmNpb25GaW5p c2goKSB0byBjaGVjayB3aGV0aGVyCisJCQkJCSAqIGFuIGNvZXJjaW9uIGVycm9yIG9jY3Vy cmVkLCBpbiB3aGljaCBjYXNlIHdlIG11c3QganVtcAorCQkJCQkgKiB0byB3aGF0ZXZlciBz dGVwIGhhbmRsZXMgdGhlIGVycm9yLiAgVGhpcyByZXR1cm5zIHRoZQorCQkJCQkgKiBzdGVw IGFkZHJlc3MgdG8ganVtcCB0by4KKwkJCQkJICovCisJCQkJCXBhcmFtc1swXSA9IHZfc3Rh dGU7CisJCQkJCXBhcmFtc1sxXSA9IGxfcHRyX2NvbnN0KG9wLCBsX3B0cihTdHJ1Y3RFeHBy RXZhbFN0ZXApKTsKKwkJCQkJdl9yZXQgPSBMTFZNQnVpbGRDYWxsKGIsCisJCQkJCQkJCQkJ ICBsbHZtX3BnX2Z1bmMobW9kLCAiRXhlY0V2YWxKc29uRXhwckNvZXJjaW9uRmluaXNoIiks CisJCQkJCQkJCQkJICBwYXJhbXMsIGxlbmd0aG9mKHBhcmFtcyksICIiKTsKKworCQkJCQkv KgorCQkJCQkgKiBKdW1wIHRvIHRoZSBzdGVwIHRoYXQgaGFuZGxlcyBjb2VyY2lvbiBlcnJv ciBpZiB0aGUKKwkJCQkJICogcmV0dXJuZWQgYWRkcmVzcyBpcyB0aGUgc2FtZSBhcworCQkJ CQkgKiBqc29uZXhwcl9jb2VyY2lvbl9maW5pc2guanVtcF9jb2VyY2lvbl9lcnJvciwgZWxz ZSB0bworCQkJCQkgKiBqc29uZXhwcl9jb2VyY2lvbl9maW5pc2guanVtcF9jb2VyY2lvbl9k b25lLgorCQkJCQkgKi8KKwkJCQkJTExWTUJ1aWxkQ29uZEJyKGIsCisJCQkJCQkJCQlMTFZN QnVpbGRJQ21wKGIsCisJCQkJCQkJCQkJCQkgIExMVk1JbnRFUSwKKwkJCQkJCQkJCQkJCSAg dl9yZXQsCisJCQkJCQkJCQkJCQkgIGxfaW50MzJfY29uc3Qob3AtPmQuanNvbmV4cHJfY29l cmNpb25fZmluaXNoLmp1bXBfY29lcmNpb25fZXJyb3IpLAorCQkJCQkJCQkJCQkJICAiIiks CisJCQkJCQkJCQlvcGJsb2Nrc1tvcC0+ZC5qc29uZXhwcl9jb2VyY2lvbl9maW5pc2guanVt cF9jb2VyY2lvbl9lcnJvcl0sCisJCQkJCQkJCQlvcGJsb2Nrc1tvcC0+ZC5qc29uZXhwcl9j b2VyY2lvbl9maW5pc2guanVtcF9jb2VyY2lvbl9kb25lXSk7CisJCQkJCWJyZWFrOworCQkJ CX0KIAkJCWNhc2UgRUVPUF9MQVNUOgogCQkJCUFzc2VydChmYWxzZSk7CiAJCQkJYnJlYWs7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVzLmMgYi9z cmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVzLmMKaW5kZXggZjYxZDkzOTBlZS4u ODQxZjdjYjM1OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF90 eXBlcy5jCisrKyBiL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlwZXMuYwpAQCAt MTM0LDYgKzEzNCwxMSBAQCB2b2lkCSAgICpyZWZlcmVuY2VkX2Z1bmN0aW9uc1tdID0KIAlF eGVjRXZhbFhtbEV4cHIsCiAJRXhlY0V2YWxKc29uQ29uc3RydWN0b3IsCiAJRXhlY0V2YWxK c29uSXNQcmVkaWNhdGUsCisJRXhlY0V2YWxKc29uRXhwclNraXAsCisJRXhlY0V2YWxKc29u RXhwckJlaGF2aW9yLAorCUV4ZWNFdmFsSnNvbkV4cHJDb2VyY2lvbiwKKwlFeGVjRXZhbEpz b25FeHByQ29lcmNpb25GaW5pc2gsCisJRXhlY0V2YWxKc29uRXhwciwKIAlNYWtlRXhwYW5k ZWRPYmplY3RSZWFkT25seUludGVybmFsLAogCXNsb3RfZ2V0bWlzc2luZ2F0dHJzLAogCXNs b3RfZ2V0c29tZWF0dHJzX2ludCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL21h a2VmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKaW5kZXggMzAxY2I2 ZmEwMS4uZjc4Yjk3MDM0ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1 bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKQEAgLTg1NCw2ICs4 NTQsMjEgQEAgbWFrZUpzb25WYWx1ZUV4cHIoRXhwciAqZXhwciwgSnNvbkZvcm1hdCAqZm9y bWF0KQogCXJldHVybiBqdmU7CiB9CiAKKy8qCisgKiBtYWtlSnNvbkJlaGF2aW9yIC0KKyAq CSAgY3JlYXRlcyBhIEpzb25CZWhhdmlvciBub2RlCisgKi8KK0pzb25CZWhhdmlvciAqCitt YWtlSnNvbkJlaGF2aW9yKEpzb25CZWhhdmlvclR5cGUgdHlwZSwgTm9kZSAqZGVmYXVsdF9l eHByKQoreworCUpzb25CZWhhdmlvciAqYmVoYXZpb3IgPSBtYWtlTm9kZShKc29uQmVoYXZp b3IpOworCisJYmVoYXZpb3ItPmJ0eXBlID0gdHlwZTsKKwliZWhhdmlvci0+ZGVmYXVsdF9l eHByID0gZGVmYXVsdF9leHByOworCisJcmV0dXJuIGJlaGF2aW9yOworfQorCiAvKgogICog bWFrZUpzb25FbmNvZGluZyAtCiAgKgkgIGNvbnZlcnRzIEpTT04gZW5jb2RpbmcgbmFtZSB0 byBlbnVtIEpzb25FbmNvZGluZwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvbm9k ZUZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwppbmRleCBhYWQ1ZWZi ZGI1Li5mNTcyNmEzYWMzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVu Y3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwpAQCAtMjYyLDYgKzI2 MiwxMiBAQCBleHByVHlwZShjb25zdCBOb2RlICpleHByKQogCQljYXNlIFRfSnNvbklzUHJl ZGljYXRlOgogCQkJdHlwZSA9IEJPT0xPSUQ7CiAJCQlicmVhazsKKwkJY2FzZSBUX0pzb25F eHByOgorCQkJdHlwZSA9ICgoY29uc3QgSnNvbkV4cHIgKikgZXhwciktPnJldHVybmluZy0+ dHlwaWQ7CisJCQlicmVhazsKKwkJY2FzZSBUX0pzb25Db2VyY2lvbjoKKwkJCXR5cGUgPSBl eHByVHlwZSgoKGNvbnN0IEpzb25Db2VyY2lvbiAqKSBleHByKS0+ZXhwcik7CisJCQlicmVh azsKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBl OiAlZCIsIChpbnQpIG5vZGVUYWcoZXhwcikpOwogCQkJdHlwZSA9IEludmFsaWRPaWQ7CS8q IGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KQEAgLTQ5NSw4ICs1MDEsMTEgQEAgZXhwclR5cG1v ZChjb25zdCBOb2RlICpleHByKQogCQljYXNlIFRfSnNvblZhbHVlRXhwcjoKIAkJCXJldHVy biBleHByVHlwbW9kKChOb2RlICopICgoY29uc3QgSnNvblZhbHVlRXhwciAqKSBleHByKS0+ Zm9ybWF0dGVkX2V4cHIpOwogCQljYXNlIFRfSnNvbkNvbnN0cnVjdG9yRXhwcjoKLQkJCXJl dHVybiAtMTsJCQkvKiAoKGNvbnN0IEpzb25Db25zdHJ1Y3RvckV4cHIgKikKLQkJCQkJCQkJ ICogZXhwciktPnJldHVybmluZy0+dHlwbW9kOyAqLworCQkJcmV0dXJuICgoY29uc3QgSnNv bkNvbnN0cnVjdG9yRXhwciAqKSBleHByKS0+cmV0dXJuaW5nLT50eXBtb2Q7CisJCWNhc2Ug VF9Kc29uRXhwcjoKKwkJCXJldHVybiAoKEpzb25FeHByICopIGV4cHIpLT5yZXR1cm5pbmct PnR5cG1vZDsKKwkJY2FzZSBUX0pzb25Db2VyY2lvbjoKKwkJCXJldHVybiBleHByVHlwbW9k KCgoY29uc3QgSnNvbkNvZXJjaW9uICopIGV4cHIpLT5leHByKTsKIAkJZGVmYXVsdDoKIAkJ CWJyZWFrOwogCX0KQEAgLTk4OCw2ICs5OTcsMjEgQEAgZXhwckNvbGxhdGlvbihjb25zdCBO b2RlICpleHByKQogCQljYXNlIFRfSnNvbklzUHJlZGljYXRlOgogCQkJY29sbCA9IEludmFs aWRPaWQ7CS8qIHJlc3VsdCBpcyBhbHdheXMgYW4gYm9vbGVhbiB0eXBlICovCiAJCQlicmVh azsKKwkJY2FzZSBUX0pzb25FeHByOgorCQkJeworCQkJCUpzb25FeHByICAgKmpleHByID0g KEpzb25FeHByICopIGV4cHI7CisJCQkJSnNvbkNvZXJjaW9uICpjb2VyY2lvbiA9IGpleHBy LT5yZXN1bHRfY29lcmNpb247CisKKwkJCQlpZiAoIWNvZXJjaW9uKQorCQkJCQljb2xsID0g SW52YWxpZE9pZDsKKwkJCQllbHNlIGlmIChjb2VyY2lvbi0+ZXhwcikKKwkJCQkJY29sbCA9 IGV4cHJDb2xsYXRpb24oY29lcmNpb24tPmV4cHIpOworCQkJCWVsc2UgaWYgKGNvZXJjaW9u LT52aWFfaW8gfHwgY29lcmNpb24tPnZpYV9wb3B1bGF0ZSkKKwkJCQkJY29sbCA9IGNvZXJj aW9uLT5jb2xsYXRpb247CisJCQkJZWxzZQorCQkJCQljb2xsID0gSW52YWxpZE9pZDsKKwkJ CX0KKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXpl ZCBub2RlIHR5cGU6ICVkIiwgKGludCkgbm9kZVRhZyhleHByKSk7CiAJCQljb2xsID0gSW52 YWxpZE9pZDsJLyoga2VlcCBjb21waWxlciBxdWlldCAqLwpAQCAtMTIxMyw2ICsxMjM3LDIx IEBAIGV4cHJTZXRDb2xsYXRpb24oTm9kZSAqZXhwciwgT2lkIGNvbGxhdGlvbikKIAkJY2Fz ZSBUX0pzb25Jc1ByZWRpY2F0ZToKIAkJCUFzc2VydCghT2lkSXNWYWxpZChjb2xsYXRpb24p KTsgLyogcmVzdWx0IGlzIGFsd2F5cyBib29sZWFuICovCiAJCQlicmVhazsKKwkJY2FzZSBU X0pzb25FeHByOgorCQkJeworCQkJCUpzb25FeHByICAgKmpleHByID0gKEpzb25FeHByICop IGV4cHI7CisJCQkJSnNvbkNvZXJjaW9uICpjb2VyY2lvbiA9IGpleHByLT5yZXN1bHRfY29l cmNpb247CisKKwkJCQlpZiAoIWNvZXJjaW9uKQorCQkJCQlBc3NlcnQoIU9pZElzVmFsaWQo Y29sbGF0aW9uKSk7CisJCQkJZWxzZSBpZiAoY29lcmNpb24tPmV4cHIpCisJCQkJCWV4cHJT ZXRDb2xsYXRpb24oY29lcmNpb24tPmV4cHIsIGNvbGxhdGlvbik7CisJCQkJZWxzZSBpZiAo Y29lcmNpb24tPnZpYV9pbyB8fCBjb2VyY2lvbi0+dmlhX3BvcHVsYXRlKQorCQkJCQljb2Vy Y2lvbi0+Y29sbGF0aW9uID0gY29sbGF0aW9uOworCQkJCWVsc2UKKwkJCQkJQXNzZXJ0KCFP aWRJc1ZhbGlkKGNvbGxhdGlvbikpOworCQkJfQorCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJ CQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZTogJWQiLCAoaW50KSBub2Rl VGFnKGV4cHIpKTsKIAkJCWJyZWFrOwpAQCAtMTY2NCw2ICsxNzAzLDE1IEBAIGV4cHJMb2Nh dGlvbihjb25zdCBOb2RlICpleHByKQogCQljYXNlIFRfSnNvbklzUHJlZGljYXRlOgogCQkJ bG9jID0gKChjb25zdCBKc29uSXNQcmVkaWNhdGUgKikgZXhwciktPmxvY2F0aW9uOwogCQkJ YnJlYWs7CisJCWNhc2UgVF9Kc29uRXhwcjoKKwkJCXsKKwkJCQljb25zdCBKc29uRXhwciAq anNleHByID0gKGNvbnN0IEpzb25FeHByICopIGV4cHI7CisKKwkJCQkvKiBjb25zaWRlciBi b3RoIGZ1bmN0aW9uIG5hbWUgYW5kIGxlZnRtb3N0IGFyZyAqLworCQkJCWxvYyA9IGxlZnRt b3N0TG9jKGpzZXhwci0+bG9jYXRpb24sCisJCQkJCQkJCSAgZXhwckxvY2F0aW9uKGpzZXhw ci0+Zm9ybWF0dGVkX2V4cHIpKTsKKwkJCX0KKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJ LyogZm9yIGFueSBvdGhlciBub2RlIHR5cGUgaXQncyBqdXN0IHVua25vd24uLi4gKi8KIAkJ CWxvYyA9IC0xOwpAQCAtMjQxOCw3ICsyNDY2LDU1IEBAIGV4cHJlc3Npb25fdHJlZV93YWxr ZXJfaW1wbChOb2RlICpub2RlLAogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgVF9Kc29uSXNQ cmVkaWNhdGU6Ci0JCQlyZXR1cm4gd2Fsa2VyKCgoSnNvbklzUHJlZGljYXRlICopIG5vZGUp LT5leHByLCBjb250ZXh0KTsKKwkJCXJldHVybiBXQUxLKCgoSnNvbklzUHJlZGljYXRlICop IG5vZGUpLT5leHByKTsKKwkJY2FzZSBUX0pzb25FeHByOgorCQkJeworCQkJCUpzb25FeHBy ICAgKmpleHByID0gKEpzb25FeHByICopIG5vZGU7CisKKwkJCQlpZiAoV0FMSyhqZXhwci0+ Zm9ybWF0dGVkX2V4cHIpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhqZXhw ci0+cmVzdWx0X2NvZXJjaW9uKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEso amV4cHItPnBhc3NpbmdfdmFsdWVzKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJLyogd2Ug YXNzdW1lIHdhbGtlciBkb2Vzbid0IGNhcmUgYWJvdXQgcGFzc2luZ19uYW1lcyAqLworCQkJ CWlmIChqZXhwci0+b25fZW1wdHkgJiYKKwkJCQkJV0FMSyhqZXhwci0+b25fZW1wdHktPmRl ZmF1bHRfZXhwcikpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxLKGpleHByLT5v bl9lcnJvci0+ZGVmYXVsdF9leHByKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdB TEsoamV4cHItPmNvZXJjaW9ucykpCisJCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJYnJl YWs7CisJCWNhc2UgVF9Kc29uQ29lcmNpb246CisJCQlyZXR1cm4gV0FMSygoKEpzb25Db2Vy Y2lvbiAqKSBub2RlKS0+ZXhwcik7CisJCWNhc2UgVF9Kc29uSXRlbUNvZXJjaW9uczoKKwkJ CXsKKwkJCQlKc29uSXRlbUNvZXJjaW9ucyAqY29lcmNpb25zID0gKEpzb25JdGVtQ29lcmNp b25zICopIG5vZGU7CisKKwkJCQlpZiAoV0FMSyhjb2VyY2lvbnMtPm51bGwpKQorCQkJCQly ZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhjb2VyY2lvbnMtPnN0cmluZykpCisJCQkJCXJl dHVybiB0cnVlOworCQkJCWlmIChXQUxLKGNvZXJjaW9ucy0+bnVtZXJpYykpCisJCQkJCXJl dHVybiB0cnVlOworCQkJCWlmIChXQUxLKGNvZXJjaW9ucy0+Ym9vbGVhbikpCisJCQkJCXJl dHVybiB0cnVlOworCQkJCWlmIChXQUxLKGNvZXJjaW9ucy0+ZGF0ZSkpCisJCQkJCXJldHVy biB0cnVlOworCQkJCWlmIChXQUxLKGNvZXJjaW9ucy0+dGltZSkpCisJCQkJCXJldHVybiB0 cnVlOworCQkJCWlmIChXQUxLKGNvZXJjaW9ucy0+dGltZXR6KSkKKwkJCQkJcmV0dXJuIHRy dWU7CisJCQkJaWYgKFdBTEsoY29lcmNpb25zLT50aW1lc3RhbXApKQorCQkJCQlyZXR1cm4g dHJ1ZTsKKwkJCQlpZiAoV0FMSyhjb2VyY2lvbnMtPnRpbWVzdGFtcHR6KSkKKwkJCQkJcmV0 dXJuIHRydWU7CisJCQkJaWYgKFdBTEsoY29lcmNpb25zLT5jb21wb3NpdGUpKQorCQkJCQly ZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJP UiwgInVucmVjb2duaXplZCBub2RlIHR5cGU6ICVkIiwKIAkJCQkgKGludCkgbm9kZVRhZyhu b2RlKSk7CkBAIC0zNDI4LDYgKzM1MjQsNyBAQCBleHByZXNzaW9uX3RyZWVfbXV0YXRvcl9p bXBsKE5vZGUgKm5vZGUsCiAKIAkJCQlyZXR1cm4gKE5vZGUgKikgbmV3bm9kZTsKIAkJCX0K KwkJCWJyZWFrOwogCQljYXNlIFRfSnNvbklzUHJlZGljYXRlOgogCQkJewogCQkJCUpzb25J c1ByZWRpY2F0ZSAqcHJlZCA9IChKc29uSXNQcmVkaWNhdGUgKikgbm9kZTsKQEAgLTM0Mzgs NiArMzUzNSw1NSBAQCBleHByZXNzaW9uX3RyZWVfbXV0YXRvcl9pbXBsKE5vZGUgKm5vZGUs CiAKIAkJCQlyZXR1cm4gKE5vZGUgKikgbmV3bm9kZTsKIAkJCX0KKwkJCWJyZWFrOworCQlj YXNlIFRfSnNvbkV4cHI6CisJCQl7CisJCQkJSnNvbkV4cHIgICAqamV4cHIgPSAoSnNvbkV4 cHIgKikgbm9kZTsKKwkJCQlKc29uRXhwciAgICpuZXdub2RlOworCisJCQkJRkxBVENPUFko bmV3bm9kZSwgamV4cHIsIEpzb25FeHByKTsKKwkJCQlNVVRBVEUobmV3bm9kZS0+cGF0aF9z cGVjLCBqZXhwci0+cGF0aF9zcGVjLCBOb2RlICopOworCQkJCU1VVEFURShuZXdub2RlLT5m b3JtYXR0ZWRfZXhwciwgamV4cHItPmZvcm1hdHRlZF9leHByLCBOb2RlICopOworCQkJCU1V VEFURShuZXdub2RlLT5yZXN1bHRfY29lcmNpb24sIGpleHByLT5yZXN1bHRfY29lcmNpb24s IEpzb25Db2VyY2lvbiAqKTsKKwkJCQlNVVRBVEUobmV3bm9kZS0+cGFzc2luZ192YWx1ZXMs IGpleHByLT5wYXNzaW5nX3ZhbHVlcywgTGlzdCAqKTsKKwkJCQkvKiBhc3N1bWUgbXV0YXRv ciBkb2VzIG5vdCBjYXJlIGFib3V0IHBhc3NpbmdfbmFtZXMgKi8KKwkJCQlpZiAobmV3bm9k ZS0+b25fZW1wdHkpCisJCQkJCU1VVEFURShuZXdub2RlLT5vbl9lbXB0eS0+ZGVmYXVsdF9l eHByLAorCQkJCQkJICAgamV4cHItPm9uX2VtcHR5LT5kZWZhdWx0X2V4cHIsIE5vZGUgKik7 CisJCQkJTVVUQVRFKG5ld25vZGUtPm9uX2Vycm9yLT5kZWZhdWx0X2V4cHIsCisJCQkJCSAg IGpleHByLT5vbl9lcnJvci0+ZGVmYXVsdF9leHByLCBOb2RlICopOworCQkJCXJldHVybiAo Tm9kZSAqKSBuZXdub2RlOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uQ29lcmNp b246CisJCQl7CisJCQkJSnNvbkNvZXJjaW9uICpjb2VyY2lvbiA9IChKc29uQ29lcmNpb24g Kikgbm9kZTsKKwkJCQlKc29uQ29lcmNpb24gKm5ld25vZGU7CisKKwkJCQlGTEFUQ09QWShu ZXdub2RlLCBjb2VyY2lvbiwgSnNvbkNvZXJjaW9uKTsKKwkJCQlNVVRBVEUobmV3bm9kZS0+ ZXhwciwgY29lcmNpb24tPmV4cHIsIE5vZGUgKik7CisJCQkJcmV0dXJuIChOb2RlICopIG5l d25vZGU7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0pzb25JdGVtQ29lcmNpb25zOgor CQkJeworCQkJCUpzb25JdGVtQ29lcmNpb25zICpjb2VyY2lvbnMgPSAoSnNvbkl0ZW1Db2Vy Y2lvbnMgKikgbm9kZTsKKwkJCQlKc29uSXRlbUNvZXJjaW9ucyAqbmV3bm9kZTsKKworCQkJ CUZMQVRDT1BZKG5ld25vZGUsIGNvZXJjaW9ucywgSnNvbkl0ZW1Db2VyY2lvbnMpOworCQkJ CU1VVEFURShuZXdub2RlLT5udWxsLCBjb2VyY2lvbnMtPm51bGwsIEpzb25Db2VyY2lvbiAq KTsKKwkJCQlNVVRBVEUobmV3bm9kZS0+c3RyaW5nLCBjb2VyY2lvbnMtPnN0cmluZywgSnNv bkNvZXJjaW9uICopOworCQkJCU1VVEFURShuZXdub2RlLT5udW1lcmljLCBjb2VyY2lvbnMt Pm51bWVyaWMsIEpzb25Db2VyY2lvbiAqKTsKKwkJCQlNVVRBVEUobmV3bm9kZS0+Ym9vbGVh biwgY29lcmNpb25zLT5ib29sZWFuLCBKc29uQ29lcmNpb24gKik7CisJCQkJTVVUQVRFKG5l d25vZGUtPmRhdGUsIGNvZXJjaW9ucy0+ZGF0ZSwgSnNvbkNvZXJjaW9uICopOworCQkJCU1V VEFURShuZXdub2RlLT50aW1lLCBjb2VyY2lvbnMtPnRpbWUsIEpzb25Db2VyY2lvbiAqKTsK KwkJCQlNVVRBVEUobmV3bm9kZS0+dGltZXR6LCBjb2VyY2lvbnMtPnRpbWV0eiwgSnNvbkNv ZXJjaW9uICopOworCQkJCU1VVEFURShuZXdub2RlLT50aW1lc3RhbXAsIGNvZXJjaW9ucy0+ dGltZXN0YW1wLCBKc29uQ29lcmNpb24gKik7CisJCQkJTVVUQVRFKG5ld25vZGUtPnRpbWVz dGFtcHR6LCBjb2VyY2lvbnMtPnRpbWVzdGFtcHR6LCBKc29uQ29lcmNpb24gKik7CisJCQkJ TVVUQVRFKG5ld25vZGUtPmNvbXBvc2l0ZSwgY29lcmNpb25zLT5jb21wb3NpdGUsIEpzb25D b2VyY2lvbiAqKTsKKwkJCQlyZXR1cm4gKE5vZGUgKikgbmV3bm9kZTsKKwkJCX0KKwkJCWJy ZWFrOwogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBub2RlIHR5 cGU6ICVkIiwKIAkJCQkgKGludCkgbm9kZVRhZyhub2RlKSk7CkBAIC00Mjg1LDcgKzQ0MzEs NDQgQEAgcmF3X2V4cHJlc3Npb25fdHJlZV93YWxrZXJfaW1wbChOb2RlICpub2RlLAogCQkJ fQogCQkJYnJlYWs7CiAJCWNhc2UgVF9Kc29uSXNQcmVkaWNhdGU6Ci0JCQlyZXR1cm4gd2Fs a2VyKCgoSnNvbklzUHJlZGljYXRlICopIG5vZGUpLT5leHByLCBjb250ZXh0KTsKKwkJCXJl dHVybiBXQUxLKCgoSnNvbklzUHJlZGljYXRlICopIG5vZGUpLT5leHByKTsKKwkJY2FzZSBU X0pzb25Bcmd1bWVudDoKKwkJCXJldHVybiBXQUxLKCgoSnNvbkFyZ3VtZW50ICopIG5vZGUp LT52YWwpOworCQljYXNlIFRfSnNvbkNvbW1vbjoKKwkJCXsKKwkJCQlKc29uQ29tbW9uICpq YyA9IChKc29uQ29tbW9uICopIG5vZGU7CisKKwkJCQlpZiAoV0FMSyhqYy0+ZXhwcikpCisJ CQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxLKGpjLT5wYXRoc3BlYykpCisJCQkJCXJl dHVybiB0cnVlOworCQkJCWlmIChXQUxLKGpjLT5wYXNzaW5nKSkKKwkJCQkJcmV0dXJuIHRy dWU7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0pzb25CZWhhdmlvcjoKKwkJCXsKKwkJ CQlKc29uQmVoYXZpb3IgKmpiID0gKEpzb25CZWhhdmlvciAqKSBub2RlOworCisJCQkJaWYg KGpiLT5idHlwZSA9PSBKU09OX0JFSEFWSU9SX0RFRkFVTFQgJiYKKwkJCQkJV0FMSyhqYi0+ ZGVmYXVsdF9leHByKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlicmVhazsKKwkJ Y2FzZSBUX0pzb25GdW5jRXhwcjoKKwkJCXsKKwkJCQlKc29uRnVuY0V4cHIgKmpmZSA9IChK c29uRnVuY0V4cHIgKikgbm9kZTsKKworCQkJCWlmIChXQUxLKGpmZS0+Y29tbW9uKSkKKwkJ CQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKGpmZS0+b3V0cHV0ICYmIFdBTEsoamZlLT5vdXRw dXQpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhqZmUtPm9uX2VtcHR5KSkK KwkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEsoamZlLT5vbl9lcnJvcikpCisJCQkJ CXJldHVybiB0cnVlOworCQkJfQorCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVS Uk9SLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZTogJWQiLAogCQkJCSAoaW50KSBub2RlVGFn KG5vZGUpKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3Rz aXplLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCmluZGV4IDc5 MThiYjZmMGQuLjJjZjY0MzM5ZGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2Nvc3RzaXplLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29z dHNpemUuYwpAQCAtNDYwNCw3ICs0NjA0LDggQEAgY29zdF9xdWFsX2V2YWxfd2Fsa2VyKE5v ZGUgKm5vZGUsIGNvc3RfcXVhbF9ldmFsX2NvbnRleHQgKmNvbnRleHQpCiAJZWxzZSBpZiAo SXNBKG5vZGUsIE1pbk1heEV4cHIpIHx8CiAJCQkgSXNBKG5vZGUsIFhtbEV4cHIpIHx8CiAJ CQkgSXNBKG5vZGUsIENvZXJjZVRvRG9tYWluKSB8fAotCQkJIElzQShub2RlLCBOZXh0VmFs dWVFeHByKSkKKwkJCSBJc0Eobm9kZSwgTmV4dFZhbHVlRXhwcikgfHwKKwkJCSBJc0Eobm9k ZSwgSnNvbkV4cHIpKQogCXsKIAkJLyogVHJlYXQgYWxsIHRoZXNlIGFzIGhhdmluZyBjb3N0 IDEgKi8KIAkJY29udGV4dC0+dG90YWwucGVyX3R1cGxlICs9IGNwdV9vcGVyYXRvcl9jb3N0 OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jCmluZGV4IGRmYmE4ZjhkMzIu LmIxNWM5N2EzMDcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2Ns YXVzZXMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMKQEAg LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRl ICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2Z1bmN0aW9ucy5o IgorI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNFeHByLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5o IgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5o IgpAQCAtNTMsNiArNTQsNyBAQAogI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCiAjaW5j bHVkZSAidXRpbHMvanNvbi5oIgogI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCisjaW5jbHVk ZSAidXRpbHMvanNvbnBhdGguaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNp bmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgi CkBAIC00MDYsNiArNDA4LDI0IEBAIGNvbnRhaW5fbXV0YWJsZV9mdW5jdGlvbnNfd2Fsa2Vy KE5vZGUgKm5vZGUsIHZvaWQgKmNvbnRleHQpCiAJCS8qIENoZWNrIGFsbCBzdWJub2RlcyAq LwogCX0KIAorCWlmIChJc0Eobm9kZSwgSnNvbkV4cHIpKQorCXsKKwkJSnNvbkV4cHIgICAq amV4cHIgPSBjYXN0Tm9kZShKc29uRXhwciwgbm9kZSk7CisJCUNvbnN0CSAgICpjbnN0Owor CisJCWlmICghSXNBKGpleHByLT5wYXRoX3NwZWMsIENvbnN0KSkKKwkJCXJldHVybiB0cnVl OworCisJCWNuc3QgPSBjYXN0Tm9kZShDb25zdCwgamV4cHItPnBhdGhfc3BlYyk7CisKKwkJ QXNzZXJ0KGNuc3QtPmNvbnN0dHlwZSA9PSBKU09OUEFUSE9JRCk7CisJCWlmIChjbnN0LT5j b25zdGlzbnVsbCkKKwkJCXJldHVybiBmYWxzZTsKKworCQlyZXR1cm4ganNwSXNNdXRhYmxl KERhdHVtR2V0SnNvblBhdGhQKGNuc3QtPmNvbnN0dmFsdWUpLAorCQkJCQkJCWpleHByLT5w YXNzaW5nX25hbWVzLCBqZXhwci0+cGFzc2luZ192YWx1ZXMpOworCX0KKwogCWlmIChJc0Eo bm9kZSwgTmV4dFZhbHVlRXhwcikpCiAJewogCQkvKiBOZXh0VmFsdWVFeHByIGlzIHZvbGF0 aWxlICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2Jh Y2tlbmQvcGFyc2VyL2dyYW0ueQppbmRleCBlMzQzOTUyNjJjLi42MDFkYjgzNzY5IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CisrKyBiL3NyYy9iYWNrZW5kL3Bh cnNlci9ncmFtLnkKQEAgLTI3Niw2ICsyNzYsMTMgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1 cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1 ZXJ5KTsKIAlNZXJnZVdoZW5DbGF1c2UgKm1lcmdld2hlbjsKIAlzdHJ1Y3QgS2V5QWN0aW9u cyAqa2V5YWN0aW9uczsKIAlzdHJ1Y3QgS2V5QWN0aW9uICprZXlhY3Rpb247CisJSnNvbkJl aGF2aW9yICpqc2JlaGF2aW9yOworCXN0cnVjdAorCXsKKwkJSnNvbkJlaGF2aW9yICpvbl9l bXB0eTsKKwkJSnNvbkJlaGF2aW9yICpvbl9lcnJvcjsKKwl9CQkJb25fYmVoYXZpb3I7CisJ SnNvblF1b3Rlcwlqc19xdW90ZXM7CiB9CiAKICV0eXBlIDxub2RlPglzdG10IHRvcGxldmVs X3N0bXQgc2NoZW1hX3N0bXQgcm91dGluZV9ib2R5X3N0bXQKQEAgLTY0NywxOCArNjU0LDUw IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1l LCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAldHlwZSA8bm9kZT4JCWpzb25fZm9y bWF0X2NsYXVzZV9vcHQKIAkJCQkJanNvbl9yZXByZXNlbnRhdGlvbgogCQkJCQlqc29uX3Zh bHVlX2V4cHIKKwkJCQkJanNvbl9hcGlfY29tbW9uX3N5bnRheAorCQkJCQlqc29uX2NvbnRl eHRfaXRlbQorCQkJCQlqc29uX2FyZ3VtZW50CisJCQkJCWpzb25fcmV0dXJuaW5nX2NsYXVz ZV9vcHQKIAkJCQkJanNvbl9vdXRwdXRfY2xhdXNlX29wdAogCQkJCQlqc29uX29iamVjdF9j b25zdHJ1Y3Rvcl9hcmdzX29wdAogCQkJCQlqc29uX29iamVjdF9hcmdzCiAJCQkJCWpzb25f bmFtZV9hbmRfdmFsdWUKIAkJCQkJanNvbl9hZ2dyZWdhdGVfZnVuYworCQkJCQlqc29uX3Bh dGhfc3BlY2lmaWNhdGlvbgogCiAldHlwZSA8bGlzdD4JCWpzb25fbmFtZV9hbmRfdmFsdWVf bGlzdAogCQkJCQlqc29uX3ZhbHVlX2V4cHJfbGlzdAogCQkJCQlqc29uX2FycmF5X2FnZ3Jl Z2F0ZV9vcmRlcl9ieV9jbGF1c2Vfb3B0CisJCQkJCWpzb25fYXJndW1lbnRzCisJCQkJCWpz b25fcGFzc2luZ19jbGF1c2Vfb3B0CisKKyV0eXBlIDxzdHI+CQkJanNvbl90YWJsZV9wYXRo X25hbWUKKwkJCQkJanNvbl9hc19wYXRoX25hbWVfY2xhdXNlX29wdAogCiAldHlwZSA8aXZh bD4JCWpzb25fZW5jb2RpbmdfY2xhdXNlX29wdAogCQkJCQlqc29uX3ByZWRpY2F0ZV90eXBl X2NvbnN0cmFpbnRfb3B0CisJCQkJCWpzb25fd3JhcHBlcl9jbGF1c2Vfb3B0CisJCQkJCWpz b25fd3JhcHBlcl9iZWhhdmlvcgorCQkJCQlqc29uX2NvbmRpdGlvbmFsX29yX3VuY29uZGl0 aW9uYWxfb3B0CisKKyV0eXBlIDxqc2JlaGF2aW9yPglqc29uX2JlaGF2aW9yX2Vycm9yCisJ CQkJCWpzb25fYmVoYXZpb3JfbnVsbAorCQkJCQlqc29uX2JlaGF2aW9yX3RydWUKKwkJCQkJ anNvbl9iZWhhdmlvcl9mYWxzZQorCQkJCQlqc29uX2JlaGF2aW9yX3Vua25vd24KKwkJCQkJ anNvbl9iZWhhdmlvcl9lbXB0eV9hcnJheQorCQkJCQlqc29uX2JlaGF2aW9yX2VtcHR5X29i amVjdAorCQkJCQlqc29uX2JlaGF2aW9yX2RlZmF1bHQKKwkJCQkJanNvbl92YWx1ZV9iZWhh dmlvcgorCQkJCQlqc29uX3F1ZXJ5X2JlaGF2aW9yCisJCQkJCWpzb25fZXhpc3RzX2Vycm9y X2JlaGF2aW9yCisJCQkJCWpzb25fZXhpc3RzX2Vycm9yX2NsYXVzZV9vcHQKKworJXR5cGUg PG9uX2JlaGF2aW9yPiBqc29uX3ZhbHVlX29uX2JlaGF2aW9yX2NsYXVzZV9vcHQKKwkJCQkJ anNvbl9xdWVyeV9vbl9iZWhhdmlvcl9jbGF1c2Vfb3B0CisKKyV0eXBlIDxqc19xdW90ZXM+ CWpzb25fcXVvdGVzX2JlaGF2aW9yCisJCQkJCWpzb25fcXVvdGVzX2NsYXVzZV9vcHQKIAog JXR5cGUgPGJvb2xlYW4+CQlqc29uX2tleV91bmlxdWVuZXNzX2NvbnN0cmFpbnRfb3B0CiAJ CQkJCWpzb25fb2JqZWN0X2NvbnN0cnVjdG9yX251bGxfY2xhdXNlX29wdApAQCAtNjk5LDcg KzczOCw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpy ZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJQ0FDSEUgQ0FMTCBDQUxM RUQgQ0FTQ0FERSBDQVNDQURFRCBDQVNFIENBU1QgQ0FUQUxPR19QIENIQUlOIENIQVJfUAog CUNIQVJBQ1RFUiBDSEFSQUNURVJJU1RJQ1MgQ0hFQ0sgQ0hFQ0tQT0lOVCBDTEFTUyBDTE9T RQogCUNMVVNURVIgQ09BTEVTQ0UgQ09MTEFURSBDT0xMQVRJT04gQ09MVU1OIENPTFVNTlMg Q09NTUVOVCBDT01NRU5UUyBDT01NSVQKLQlDT01NSVRURUQgQ09NUFJFU1NJT04gQ09OQ1VS UkVOVExZIENPTkZJR1VSQVRJT04gQ09ORkxJQ1QKKwlDT01NSVRURUQgQ09NUFJFU1NJT04g Q09OQ1VSUkVOVExZIENPTkRJVElPTkFMIENPTkZJR1VSQVRJT04gQ09ORkxJQ1QKIAlDT05O RUNUSU9OIENPTlNUUkFJTlQgQ09OU1RSQUlOVFMgQ09OVEVOVF9QIENPTlRJTlVFX1AgQ09O VkVSU0lPTl9QIENPUFkKIAlDT1NUIENSRUFURSBDUk9TUyBDU1YgQ1VCRSBDVVJSRU5UX1AK IAlDVVJSRU5UX0NBVEFMT0cgQ1VSUkVOVF9EQVRFIENVUlJFTlRfUk9MRSBDVVJSRU5UX1ND SEVNQQpAQCAtNzEwLDggKzc0OSw4IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmll d1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJ REVUQUNIIERJQ1RJT05BUlkgRElTQUJMRV9QIERJU0NBUkQgRElTVElOQ1QgRE8gRE9DVU1F TlRfUCBET01BSU5fUAogCURPVUJMRV9QIERST1AKIAotCUVBQ0ggRUxTRSBFTkFCTEVfUCBF TkNPRElORyBFTkNSWVBURUQgRU5EX1AgRU5VTV9QIEVTQ0FQRSBFVkVOVCBFWENFUFQKLQlF WENMVURFIEVYQ0xVRElORyBFWENMVVNJVkUgRVhFQ1VURSBFWElTVFMgRVhQTEFJTiBFWFBS RVNTSU9OCisJRUFDSCBFTFNFIEVNUFRZX1AgRU5BQkxFX1AgRU5DT0RJTkcgRU5DUllQVEVE IEVORF9QIEVOVU1fUCBFUlJPUl9QIEVTQ0FQRQorCUVWRU5UIEVYQ0VQVCBFWENMVURFIEVY Q0xVRElORyBFWENMVVNJVkUgRVhFQ1VURSBFWElTVFMgRVhQTEFJTiBFWFBSRVNTSU9OCiAJ RVhURU5TSU9OIEVYVEVSTkFMIEVYVFJBQ1QKIAogCUZBTFNFX1AgRkFNSUxZIEZFVENIIEZJ TFRFUiBGSU5BTElaRSBGSVJTVF9QIEZMT0FUX1AgRk9MTE9XSU5HIEZPUgpAQCAtNzI2LDcg Kzc2NSw4IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpy ZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJSU5ORVJfUCBJTk9VVCBJ TlBVVF9QIElOU0VOU0lUSVZFIElOU0VSVCBJTlNURUFEIElOVF9QIElOVEVHRVIKIAlJTlRF UlNFQ1QgSU5URVJWQUwgSU5UTyBJTlZPS0VSIElTIElTTlVMTCBJU09MQVRJT04KIAotCUpP SU4gSlNPTiBKU09OX0FSUkFZIEpTT05fQVJSQVlBR0cgSlNPTl9PQkpFQ1QgSlNPTl9PQkpF Q1RBR0cKKwlKT0lOIEpTT04gSlNPTl9BUlJBWSBKU09OX0FSUkFZQUdHIEpTT05fRVhJU1RT IEpTT05fT0JKRUNUIEpTT05fT0JKRUNUQUdHCisJSlNPTl9RVUVSWSBKU09OX1ZBTFVFCiAK IAlLRVkgS0VZUyBLRUVQCiAKQEAgLTc0Miw3ICs3ODIsNyBAQCBzdGF0aWMgTm9kZSAqbWFr ZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9k ZSAqcXVlcnkpOwogCU5PVCBOT1RISU5HIE5PVElGWSBOT1ROVUxMIE5PV0FJVCBOVUxMX1Ag TlVMTElGCiAJTlVMTFNfUCBOVU1FUklDCiAKLQlPQkpFQ1RfUCBPRiBPRkYgT0ZGU0VUIE9J RFMgT0xEIE9OIE9OTFkgT1BFUkFUT1IgT1BUSU9OIE9QVElPTlMgT1IKKwlPQkpFQ1RfUCBP RiBPRkYgT0ZGU0VUIE9JRFMgT0xEIE9NSVQgT04gT05MWSBPUEVSQVRPUiBPUFRJT04gT1BU SU9OUyBPUgogCU9SREVSIE9SRElOQUxJVFkgT1RIRVJTIE9VVF9QIE9VVEVSX1AKIAlPVkVS IE9WRVJMQVBTIE9WRVJMQVkgT1ZFUlJJRElORyBPV05FRCBPV05FUgogCkBAIC03NTEsNyAr NzkxLDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJl bG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlQT1NJVElPTiBQUkVDRURJ TkcgUFJFQ0lTSU9OIFBSRVNFUlZFIFBSRVBBUkUgUFJFUEFSRUQgUFJJTUFSWQogCVBSSU9S IFBSSVZJTEVHRVMgUFJPQ0VEVVJBTCBQUk9DRURVUkUgUFJPQ0VEVVJFUyBQUk9HUkFNIFBV QkxJQ0FUSU9OCiAKLQlRVU9URQorCVFVT1RFIFFVT1RFUwogCiAJUkFOR0UgUkVBRCBSRUFM IFJFQVNTSUdOIFJFQ0hFQ0sgUkVDVVJTSVZFIFJFRl9QIFJFRkVSRU5DRVMgUkVGRVJFTkNJ TkcKIAlSRUZSRVNIIFJFSU5ERVggUkVMQVRJVkVfUCBSRUxFQVNFIFJFTkFNRSBSRVBFQVRB QkxFIFJFUExBQ0UgUkVQTElDQQpAQCAtNzYxLDcgKzgwMSw3IEBAIHN0YXRpYyBOb2RlICpt YWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBO b2RlICpxdWVyeSk7CiAJU0FWRVBPSU5UIFNDQUxBUiBTQ0hFTUEgU0NIRU1BUyBTQ1JPTEwg U0VBUkNIIFNFQ09ORF9QIFNFQ1VSSVRZIFNFTEVDVAogCVNFUVVFTkNFIFNFUVVFTkNFUyBT RVJJQUxJWkFCTEUgU0VSVkVSIFNFU1NJT04gU0VTU0lPTl9VU0VSIFNFVCBTRVRTIFNFVE9G CiAJU0hBUkUgU0hPVyBTSU1JTEFSIFNJTVBMRSBTS0lQIFNNQUxMSU5UIFNOQVBTSE9UIFNP TUUgU1FMX1AgU1RBQkxFIFNUQU5EQUxPTkVfUAotCVNUQVJUIFNUQVRFTUVOVCBTVEFUSVNU SUNTIFNURElOIFNURE9VVCBTVE9SQUdFIFNUT1JFRCBTVFJJQ1RfUCBTVFJJUF9QCisJU1RB UlQgU1RBVEVNRU5UIFNUQVRJU1RJQ1MgU1RESU4gU1RET1VUIFNUT1JBR0UgU1RPUkVEIFNU UklDVF9QIFNUUklOR19QIFNUUklQX1AKIAlTVUJTQ1JJUFRJT04gU1VCU1RSSU5HIFNVUFBP UlQgU1lNTUVUUklDIFNZU0lEIFNZU1RFTV9QIFNZU1RFTV9VU0VSCiAKIAlUQUJMRSBUQUJM RVMgVEFCTEVTQU1QTEUgVEFCTEVTUEFDRSBURU1QIFRFTVBMQVRFIFRFTVBPUkFSWSBURVhU X1AgVEhFTgpAQCAtNzY5LDcgKzgwOSw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZl Vmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7 CiAJVFJFQVQgVFJJR0dFUiBUUklNIFRSVUVfUAogCVRSVU5DQVRFIFRSVVNURUQgVFlQRV9Q IFRZUEVTX1AKIAotCVVFU0NBUEUgVU5CT1VOREVEIFVOQ09NTUlUVEVEIFVORU5DUllQVEVE IFVOSU9OIFVOSVFVRSBVTktOT1dOCisJVUVTQ0FQRSBVTkJPVU5ERUQgVU5DT05ESVRJT05B TCBVTkNPTU1JVFRFRCBVTkVOQ1JZUFRFRCBVTklPTiBVTklRVUUgVU5LTk9XTgogCVVOTElT VEVOIFVOTE9HR0VEIFVOVElMIFVQREFURSBVU0VSIFVTSU5HCiAKIAlWQUNVVU0gVkFMSUQg VkFMSURBVEUgVkFMSURBVE9SIFZBTFVFX1AgVkFMVUVTIFZBUkNIQVIgVkFSSUFESUMgVkFS WUlORwpAQCAtODQ4LDcgKzg4OCw4IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmll d1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAg KiBVc2luZyB0aGUgc2FtZSBwcmVjZWRlbmNlIGFzIElERU5UIHNlZW1zIHJpZ2h0IGZvciB0 aGUgcmVhc29ucyBnaXZlbiBhYm92ZS4KICAqLwogJW5vbmFzc29jCVVOQk9VTkRFRAkJLyog aWRlYWxseSB3b3VsZCBoYXZlIHNhbWUgcHJlY2VkZW5jZSBhcyBJREVOVCAqLwotJW5vbmFz c29jCUFCU0VOVCBVTklRVUUgSlNPTgorJW5vbmFzc29jCUVSUk9SX1AgRU1QVFlfUCBERUZB VUxUIEFCU0VOVCAvKiBKU09OIGVycm9yL2VtcHR5IGJlaGF2aW9yICovCislbm9uYXNzb2MJ RkFMU0VfUCBLRUVQIE9NSVQgUEFTU0lORyBUUlVFX1AgVU5LTk9XTiBVTklRVUUgSlNPTgog JW5vbmFzc29jCUlERU5UIFBBUlRJVElPTiBSQU5HRSBST1dTIEdST1VQUyBQUkVDRURJTkcg Rk9MTE9XSU5HIENVQkUgUk9MTFVQCiAlbGVmdAkJT3AgT1BFUkFUT1IJCS8qIG11bHRpLWNo YXJhY3RlciBvcHMgYW5kIHVzZXItZGVmaW5lZCBvcGVyYXRvcnMgKi8KICVsZWZ0CQknKycg Jy0nCkBAIC0xNTY4Nyw3ICsxNTcyOCw2MyBAQCBmdW5jX2V4cHJfY29tbW9uX3N1YmV4cHI6 CiAJCQkJCW4tPmxvY2F0aW9uID0gQDE7CiAJCQkJCSQkID0gKE5vZGUgKikgbjsKIAkJCQl9 Ci0JCTsKKwkJCXwgSlNPTl9RVUVSWSAnKCcKKwkJCQlqc29uX2FwaV9jb21tb25fc3ludGF4 CisJCQkJanNvbl9vdXRwdXRfY2xhdXNlX29wdAorCQkJCWpzb25fd3JhcHBlcl9jbGF1c2Vf b3B0CisJCQkJanNvbl9xdW90ZXNfY2xhdXNlX29wdAorCQkJCWpzb25fcXVlcnlfb25fYmVo YXZpb3JfY2xhdXNlX29wdAorCQkJJyknCisJCQkJeworCQkJCQlKc29uRnVuY0V4cHIgKm4g PSBtYWtlTm9kZShKc29uRnVuY0V4cHIpOworCisJCQkJCW4tPm9wID0gSlNPTl9RVUVSWV9P UDsKKwkJCQkJbi0+Y29tbW9uID0gKEpzb25Db21tb24gKikgJDM7CisJCQkJCW4tPm91dHB1 dCA9IChKc29uT3V0cHV0ICopICQ0OworCQkJCQluLT53cmFwcGVyID0gJDU7CisJCQkJCWlm IChuLT53cmFwcGVyICE9IEpTV19OT05FICYmICQ2ICE9IEpTX1FVT1RFU19VTlNQRUMpCisJ CQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9F UlJPUiksCisJCQkJCQkJCSBlcnJtc2coIlNRTC9KU09OIFFVT1RFUyBiZWhhdmlvciBtdXN0 IG5vdCBiZSBzcGVjaWZpZWQgd2hlbiBXSVRIIFdSQVBQRVIgaXMgdXNlZCIpLAorCQkJCQkJ CQkgcGFyc2VyX2VycnBvc2l0aW9uKEA2KSkpOworCQkJCQluLT5vbWl0X3F1b3RlcyA9ICQ2 ID09IEpTX1FVT1RFU19PTUlUOworCQkJCQluLT5vbl9lbXB0eSA9ICQ3Lm9uX2VtcHR5Owor CQkJCQluLT5vbl9lcnJvciA9ICQ3Lm9uX2Vycm9yOworCQkJCQluLT5sb2NhdGlvbiA9IEAx OworCQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJfQorCQkJfCBKU09OX0VYSVNUUyAnKCcK KwkJCQlqc29uX2FwaV9jb21tb25fc3ludGF4CisJCQkJanNvbl9yZXR1cm5pbmdfY2xhdXNl X29wdAorCQkJCWpzb25fZXhpc3RzX2Vycm9yX2NsYXVzZV9vcHQKKwkJCScpJworCQkJCXsK KwkJCQkJSnNvbkZ1bmNFeHByICpwID0gbWFrZU5vZGUoSnNvbkZ1bmNFeHByKTsKKworCQkJ CQlwLT5vcCA9IEpTT05fRVhJU1RTX09QOworCQkJCQlwLT5jb21tb24gPSAoSnNvbkNvbW1v biAqKSAkMzsKKwkJCQkJcC0+b3V0cHV0ID0gKEpzb25PdXRwdXQgKikgJDQ7CisJCQkJCXAt Pm9uX2Vycm9yID0gJDU7CisJCQkJCXAtPmxvY2F0aW9uID0gQDE7CisJCQkJCSQkID0gKE5v ZGUgKikgcDsKKwkJCQl9CisJCQl8IEpTT05fVkFMVUUgJygnCisJCQkJanNvbl9hcGlfY29t bW9uX3N5bnRheAorCQkJCWpzb25fcmV0dXJuaW5nX2NsYXVzZV9vcHQKKwkJCQlqc29uX3Zh bHVlX29uX2JlaGF2aW9yX2NsYXVzZV9vcHQKKwkJCScpJworCQkJCXsKKwkJCQkJSnNvbkZ1 bmNFeHByICpuID0gbWFrZU5vZGUoSnNvbkZ1bmNFeHByKTsKKworCQkJCQluLT5vcCA9IEpT T05fVkFMVUVfT1A7CisJCQkJCW4tPmNvbW1vbiA9IChKc29uQ29tbW9uICopICQzOworCQkJ CQluLT5vdXRwdXQgPSAoSnNvbk91dHB1dCAqKSAkNDsKKwkJCQkJbi0+b25fZW1wdHkgPSAk NS5vbl9lbXB0eTsKKwkJCQkJbi0+b25fZXJyb3IgPSAkNS5vbl9lcnJvcjsKKwkJCQkJbi0+ bG9jYXRpb24gPSBAMTsKKwkJCQkJJCQgPSAoTm9kZSAqKSBuOworCQkJCX0gCisJCQk7CiAK IC8qCiAgKiBTUUwvWE1MIHN1cHBvcnQKQEAgLTE2NDEyLDYgKzE2NTA5LDcyIEBAIG9wdF9h c3ltbWV0cmljOiBBU1lNTUVUUklDCiAJCTsKIAogLyogU1FML0pTT04gc3VwcG9ydCAqLwor anNvbl9hcGlfY29tbW9uX3N5bnRheDoKKwkJCWpzb25fY29udGV4dF9pdGVtICcsJyBqc29u X3BhdGhfc3BlY2lmaWNhdGlvbgorCQkJanNvbl9hc19wYXRoX25hbWVfY2xhdXNlX29wdAor CQkJanNvbl9wYXNzaW5nX2NsYXVzZV9vcHQKKwkJCQl7CisJCQkJCUpzb25Db21tb24gKm4g PSBtYWtlTm9kZShKc29uQ29tbW9uKTsKKworCQkJCQluLT5leHByID0gKEpzb25WYWx1ZUV4 cHIgKikgJDE7CisJCQkJCW4tPnBhdGhzcGVjID0gJDM7CisJCQkJCW4tPnBhdGhuYW1lID0g JDQ7CisJCQkJCW4tPnBhc3NpbmcgPSAkNTsKKwkJCQkJbi0+bG9jYXRpb24gPSBAMTsKKwkJ CQkJJCQgPSAoTm9kZSAqKSBuOworCQkJCX0KKwkJOworCitqc29uX2NvbnRleHRfaXRlbToK KwkJCWpzb25fdmFsdWVfZXhwcgkJCQkJCQl7ICQkID0gJDE7IH0KKwkJOworCitqc29uX3Bh dGhfc3BlY2lmaWNhdGlvbjoKKwkJCWFfZXhwcgkJCQkJCQkJCXsgJCQgPSAkMTsgfQorCQk7 CisKK2pzb25fYXNfcGF0aF9uYW1lX2NsYXVzZV9vcHQ6CisJCQkgQVMganNvbl90YWJsZV9w YXRoX25hbWUJCQkJeyAkJCA9ICQyOyB9CisJCQkgfCAvKiBFTVBUWSAqLwkJCQkJCQl7ICQk ID0gTlVMTDsgfQorCQk7CisKK2pzb25fdGFibGVfcGF0aF9uYW1lOgorCQkJbmFtZQkJCQkJ CQkJCXsgJCQgPSAkMTsgfQorCQk7CisKK2pzb25fcGFzc2luZ19jbGF1c2Vfb3B0OgorCQkJ UEFTU0lORyBqc29uX2FyZ3VtZW50cwkJCQkJeyAkJCA9ICQyOyB9CisJCQl8IC8qIEVNUFRZ ICovCQkJCQkJCXsgJCQgPSBOSUw7IH0KKwkJOworCitqc29uX2FyZ3VtZW50czoKKwkJCWpz b25fYXJndW1lbnQJCQkJCQkJeyAkJCA9IGxpc3RfbWFrZTEoJDEpOyB9CisJCQl8IGpzb25f YXJndW1lbnRzICcsJyBqc29uX2FyZ3VtZW50CQl7ICQkID0gbGFwcGVuZCgkMSwgJDMpOyB9 CisJCTsKKworanNvbl9hcmd1bWVudDoKKwkJCWpzb25fdmFsdWVfZXhwciBBUyBDb2xMYWJl bAorCQkJeworCQkJCUpzb25Bcmd1bWVudCAqbiA9IG1ha2VOb2RlKEpzb25Bcmd1bWVudCk7 CisKKwkJCQluLT52YWwgPSAoSnNvblZhbHVlRXhwciAqKSAkMTsKKwkJCQluLT5uYW1lID0g JDM7CisJCQkJJCQgPSAoTm9kZSAqKSBuOworCQkJfQorIAkJOworCitqc29uX2V4aXN0c19l cnJvcl9jbGF1c2Vfb3B0OgorCQkJanNvbl9leGlzdHNfZXJyb3JfYmVoYXZpb3IgT04gRVJS T1JfUAkJeyAkJCA9ICQxOyB9CisJCQl8IC8qIEVNUFRZICovCQkJCQkJCQl7ICQkID0gTlVM TDsgfQorCQk7CisKK2pzb25fZXhpc3RzX2Vycm9yX2JlaGF2aW9yOgorCQkJanNvbl9iZWhh dmlvcl9lcnJvcgorCQkJfCBqc29uX2JlaGF2aW9yX3RydWUKKwkJCXwganNvbl9iZWhhdmlv cl9mYWxzZQorCQkJfCBqc29uX2JlaGF2aW9yX3Vua25vd24KKwkJOworCiBqc29uX3ZhbHVl X2V4cHI6CiAJCQlhX2V4cHIganNvbl9mb3JtYXRfY2xhdXNlX29wdAogCQkJewpAQCAtMTY0 NDQsNiArMTY2MDcsMTI5IEBAIGpzb25fZW5jb2RpbmdfY2xhdXNlX29wdDoKIAkJCXwgLyog RU1QVFkgKi8JCQkJCQkJeyAkJCA9IEpTX0VOQ19ERUZBVUxUOyB9CiAJCTsKIAoranNvbl9i ZWhhdmlvcl9lcnJvcjoKKwkJCUVSUk9SX1AJCXsgJCQgPSBtYWtlSnNvbkJlaGF2aW9yKEpT T05fQkVIQVZJT1JfRVJST1IsIE5VTEwpOyB9CisJCTsKKworanNvbl9iZWhhdmlvcl9udWxs OgorCQkJTlVMTF9QCQl7ICQkID0gbWFrZUpzb25CZWhhdmlvcihKU09OX0JFSEFWSU9SX05V TEwsIE5VTEwpOyB9CisJCTsKKworanNvbl9iZWhhdmlvcl90cnVlOgorCQkJVFJVRV9QCQl7 ICQkID0gbWFrZUpzb25CZWhhdmlvcihKU09OX0JFSEFWSU9SX1RSVUUsIE5VTEwpOyB9CisJ CTsKKworanNvbl9iZWhhdmlvcl9mYWxzZToKKwkJCUZBTFNFX1AJCXsgJCQgPSBtYWtlSnNv bkJlaGF2aW9yKEpTT05fQkVIQVZJT1JfRkFMU0UsIE5VTEwpOyB9CisJCTsKKworanNvbl9i ZWhhdmlvcl91bmtub3duOgorCQkJVU5LTk9XTgkJeyAkJCA9IG1ha2VKc29uQmVoYXZpb3Io SlNPTl9CRUhBVklPUl9VTktOT1dOLCBOVUxMKTsgfQorCQk7CisKK2pzb25fYmVoYXZpb3Jf ZW1wdHlfYXJyYXk6CisJCQlFTVBUWV9QIEFSUkFZCXsgJCQgPSBtYWtlSnNvbkJlaGF2aW9y KEpTT05fQkVIQVZJT1JfRU1QVFlfQVJSQVksIE5VTEwpOyB9CisJCQkvKiBub24tc3RhbmRh cmQsIGZvciBPcmFjbGUgY29tcGF0aWJpbGl0eSBvbmx5ICovCisJCQl8IEVNUFRZX1AJCXsg JCQgPSBtYWtlSnNvbkJlaGF2aW9yKEpTT05fQkVIQVZJT1JfRU1QVFlfQVJSQVksIE5VTEwp OyB9CisJCTsKKworanNvbl9iZWhhdmlvcl9lbXB0eV9vYmplY3Q6CisJCQlFTVBUWV9QIE9C SkVDVF9QCXsgJCQgPSBtYWtlSnNvbkJlaGF2aW9yKEpTT05fQkVIQVZJT1JfRU1QVFlfT0JK RUNULCBOVUxMKTsgfQorCQk7CisKK2pzb25fYmVoYXZpb3JfZGVmYXVsdDoKKwkJCURFRkFV TFQgYV9leHByCXsgJCQgPSBtYWtlSnNvbkJlaGF2aW9yKEpTT05fQkVIQVZJT1JfREVGQVVM VCwgJDIpOyB9CisJCTsKKworCitqc29uX3ZhbHVlX2JlaGF2aW9yOgorCQkJanNvbl9iZWhh dmlvcl9udWxsCisJCQl8IGpzb25fYmVoYXZpb3JfZXJyb3IKKwkJCXwganNvbl9iZWhhdmlv cl9kZWZhdWx0CisJCTsKKworanNvbl92YWx1ZV9vbl9iZWhhdmlvcl9jbGF1c2Vfb3B0Ogor CQkJanNvbl92YWx1ZV9iZWhhdmlvciBPTiBFTVBUWV9QCisJCQkJCQkJCQl7ICQkLm9uX2Vt cHR5ID0gJDE7ICQkLm9uX2Vycm9yID0gTlVMTDsgfQorCQkJfCBqc29uX3ZhbHVlX2JlaGF2 aW9yIE9OIEVNUFRZX1AganNvbl92YWx1ZV9iZWhhdmlvciBPTiBFUlJPUl9QCisJCQkJCQkJ CQl7ICQkLm9uX2VtcHR5ID0gJDE7ICQkLm9uX2Vycm9yID0gJDQ7IH0KKwkJCXwganNvbl92 YWx1ZV9iZWhhdmlvciBPTiBFUlJPUl9QCisJCQkJCQkJCQl7ICQkLm9uX2VtcHR5ID0gTlVM TDsgJCQub25fZXJyb3IgPSAkMTsgfQorCQkJfCAgLyogRU1QVFkgKi8KKwkJCQkJCQkJCXsg JCQub25fZW1wdHkgPSBOVUxMOyAkJC5vbl9lcnJvciA9IE5VTEw7IH0KKwkJOworCisJCTsK KworanNvbl93cmFwcGVyX2NsYXVzZV9vcHQ6CisJCQlqc29uX3dyYXBwZXJfYmVoYXZpb3Ig V1JBUFBFUgkJCXsgJCQgPSAkMTsgfQorCQkJfCAvKiBFTVBUWSAqLwkJCQkJCQl7ICQkID0g MDsgfQorCQk7CisKK2pzb25fd3JhcHBlcl9iZWhhdmlvcjoKKwkJCVdJVEhPVVQgYXJyYXlf b3B0CQkJCQkJeyAkJCA9IEpTV19OT05FOyB9CisJCQl8IFdJVEgganNvbl9jb25kaXRpb25h bF9vcl91bmNvbmRpdGlvbmFsX29wdCBhcnJheV9vcHQgeyAkJCA9ICQyOyB9CisJCTsKKwor YXJyYXlfb3B0OgorCQkJQVJSQVkJCQkJCQkJCQl7IH0KKwkJCXwgLyogRU1QVFkgKi8JCQkJ CQkJeyB9CisJCTsKKworanNvbl9jb25kaXRpb25hbF9vcl91bmNvbmRpdGlvbmFsX29wdDoK KwkJCUNPTkRJVElPTkFMCQkJCQkJCQl7ICQkID0gSlNXX0NPTkRJVElPTkFMOyB9CisJCQl8 IFVOQ09ORElUSU9OQUwJCQkJCQkJeyAkJCA9IEpTV19VTkNPTkRJVElPTkFMOyB9CisJCQl8 IC8qIEVNUFRZICovCQkJCQkJCXsgJCQgPSBKU1dfVU5DT05ESVRJT05BTDsgfQorCQk7CisK K2pzb25fcXVvdGVzX2NsYXVzZV9vcHQ6CisJCQlqc29uX3F1b3Rlc19iZWhhdmlvciBRVU9U RVMganNvbl9vbl9zY2FsYXJfc3RyaW5nX29wdCB7ICQkID0gJDE7IH0KKwkJCXwgLyogRU1Q VFkgKi8JCQkJCQkJeyAkJCA9IEpTX1FVT1RFU19VTlNQRUM7IH0KKwkJOworCitqc29uX3F1 b3Rlc19iZWhhdmlvcjoKKwkJCUtFRVAJCQkJCQkJCQl7ICQkID0gSlNfUVVPVEVTX0tFRVA7 IH0KKwkJCXwgT01JVAkJCQkJCQkJCXsgJCQgPSBKU19RVU9URVNfT01JVDsgfQorCQk7CisK K2pzb25fb25fc2NhbGFyX3N0cmluZ19vcHQ6CisJCQlPTiBTQ0FMQVIgU1RSSU5HX1AJCQkJ CQl7IH0KKwkJCXwgLyogRU1QVFkgKi8JCQkJCQkJeyB9CisJCTsKKworanNvbl9xdWVyeV9i ZWhhdmlvcjoKKwkJCWpzb25fYmVoYXZpb3JfZXJyb3IKKwkJCXwganNvbl9iZWhhdmlvcl9u dWxsCisJCQl8IGpzb25fYmVoYXZpb3JfZW1wdHlfYXJyYXkKKwkJCXwganNvbl9iZWhhdmlv cl9lbXB0eV9vYmplY3QKKwkJCXwganNvbl9iZWhhdmlvcl9kZWZhdWx0CisJCTsKKworanNv bl9xdWVyeV9vbl9iZWhhdmlvcl9jbGF1c2Vfb3B0OgorCQkJanNvbl9xdWVyeV9iZWhhdmlv ciBPTiBFTVBUWV9QCisJCQkJCQkJCQl7ICQkLm9uX2VtcHR5ID0gJDE7ICQkLm9uX2Vycm9y ID0gTlVMTDsgfQorCQkJfCBqc29uX3F1ZXJ5X2JlaGF2aW9yIE9OIEVNUFRZX1AganNvbl9x dWVyeV9iZWhhdmlvciBPTiBFUlJPUl9QCisJCQkJCQkJCQl7ICQkLm9uX2VtcHR5ID0gJDE7 ICQkLm9uX2Vycm9yID0gJDQ7IH0KKwkJCXwganNvbl9xdWVyeV9iZWhhdmlvciBPTiBFUlJP Ul9QCisJCQkJCQkJCQl7ICQkLm9uX2VtcHR5ID0gTlVMTDsgJCQub25fZXJyb3IgPSAkMTsg fQorCQkJfCAgLyogRU1QVFkgKi8KKwkJCQkJCQkJCXsgJCQub25fZW1wdHkgPSBOVUxMOyAk JC5vbl9lcnJvciA9IE5VTEw7IH0KKwkJOworCitqc29uX3JldHVybmluZ19jbGF1c2Vfb3B0 OgorCQkJUkVUVVJOSU5HIFR5cGVuYW1lCisJCQkJeworCQkJCQlKc29uT3V0cHV0ICpuID0g bWFrZU5vZGUoSnNvbk91dHB1dCk7CisKKwkJCQkJbi0+dHlwZU5hbWUgPSAkMjsKKwkJCQkJ bi0+cmV0dXJuaW5nID0gbWFrZU5vZGUoSnNvblJldHVybmluZyk7CisJCQkJCW4tPnJldHVy bmluZy0+Zm9ybWF0ID0KKwkJCQkJCW1ha2VKc29uRm9ybWF0KEpTX0ZPUk1BVF9ERUZBVUxU LCBKU19FTkNfREVGQVVMVCwgQDIpOworCQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJfQor CQkJfCAvKiBFTVBUWSAqLwkJCQkJCQl7ICQkID0gTlVMTDsgfQorCQkJOworCiBqc29uX291 dHB1dF9jbGF1c2Vfb3B0OgogCQkJUkVUVVJOSU5HIFR5cGVuYW1lIGpzb25fZm9ybWF0X2Ns YXVzZV9vcHQKIAkJCQl7CkBAIC0xNjQ2Miw3ICsxNjc0OCw3IEBAIGpzb25fb3V0cHV0X2Ns YXVzZV9vcHQ6CiBqc29uX29iamVjdF9hcmdzOgogCQkJZnVuY19hcmdfbGlzdAogCQkJCXsK LQkJCQkJTGlzdCAqZnVuYyA9IGxpc3RfbWFrZTEobWFrZVN0cmluZygianNvbl9vYmplY3Qi KSk7CisJCQkJCUxpc3QJICAgKmZ1bmMgPSBsaXN0X21ha2UxKG1ha2VTdHJpbmcoImpzb25f b2JqZWN0IikpOwogCiAJCQkJCSQkID0gKE5vZGUgKikgbWFrZUZ1bmNDYWxsKGZ1bmMsICQx LCBDT0VSQ0VfRVhQTElDSVRfQ0FMTCwgQDEpOwogCQkJCX0KQEAgLTE3MDcxLDYgKzE3MzU3 LDcgQEAgdW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJfCBDT01NSVQKIAkJCXwgQ09NTUlUVEVE CiAJCQl8IENPTVBSRVNTSU9OCisJCQl8IENPTkRJVElPTkFMCiAJCQl8IENPTkZJR1VSQVRJ T04KIAkJCXwgQ09ORkxJQ1QKIAkJCXwgQ09OTkVDVElPTgpAQCAtMTcxMDcsMTAgKzE3Mzk0 LDEyIEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgRE9VQkxFX1AKIAkJCXwgRFJPUAog CQkJfCBFQUNICisJCQl8IEVNUFRZX1AKIAkJCXwgRU5BQkxFX1AKIAkJCXwgRU5DT0RJTkcK IAkJCXwgRU5DUllQVEVECiAJCQl8IEVOVU1fUAorCQkJfCBFUlJPUl9QCiAJCQl8IEVTQ0FQ RQogCQkJfCBFVkVOVAogCQkJfCBFWENMVURFCkBAIC0xNzE2MSw2ICsxNzQ1MCw3IEBAIHVu cmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgSU5WT0tFUgogCQkJfCBJU09MQVRJT04KIAkJCXwg SlNPTgorCQkJfCBLRUVQCiAJCQl8IEtFWQogCQkJfCBLRVlTCiAJCQl8IExBQkVMCkBAIC0x NzIwNyw2ICsxNzQ5Nyw3IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgT0ZGCiAJCQl8 IE9JRFMKIAkJCXwgT0xECisJCQl8IE9NSVQKIAkJCXwgT1BFUkFUT1IKIAkJCXwgT1BUSU9O CiAJCQl8IE9QVElPTlMKQEAgLTE3MjM3LDYgKzE3NTI4LDcgQEAgdW5yZXNlcnZlZF9rZXl3 b3JkOgogCQkJfCBQUk9HUkFNCiAJCQl8IFBVQkxJQ0FUSU9OCiAJCQl8IFFVT1RFCisJCQl8 IFFVT1RFUwogCQkJfCBSQU5HRQogCQkJfCBSRUFECiAJCQl8IFJFQVNTSUdOCkBAIC0xNzI5 Niw2ICsxNzU4OCw3IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgU1RPUkFHRQogCQkJ fCBTVE9SRUQKIAkJCXwgU1RSSUNUX1AKKwkJCXwgU1RSSU5HX1AKIAkJCXwgU1RSSVBfUAog CQkJfCBTVUJTQ1JJUFRJT04KIAkJCXwgU1VQUE9SVApAQCAtMTczMTgsNiArMTc2MTEsNyBA QCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IFVFU0NBUEUKIAkJCXwgVU5CT1VOREVECiAJ CQl8IFVOQ09NTUlUVEVECisJCQl8IFVOQ09ORElUSU9OQUwKIAkJCXwgVU5FTkNSWVBURUQK IAkJCXwgVU5LTk9XTgogCQkJfCBVTkxJU1RFTgpAQCAtMTczNzcsOCArMTc2NzEsMTEgQEAg Y29sX25hbWVfa2V5d29yZDoKIAkJCXwgSU5URVJWQUwKIAkJCXwgSlNPTl9BUlJBWQogCQkJ fCBKU09OX0FSUkFZQUdHCisJCQl8IEpTT05fRVhJU1RTCiAJCQl8IEpTT05fT0JKRUNUCiAJ CQl8IEpTT05fT0JKRUNUQUdHCisJCQl8IEpTT05fUVVFUlkKKwkJCXwgSlNPTl9WQUxVRQog CQkJfCBMRUFTVAogCQkJfCBOQVRJT05BTAogCQkJfCBOQ0hBUgpAQCAtMTc2MTEsNiArMTc5 MDgsNyBAQCBiYXJlX2xhYmVsX2tleXdvcmQ6CiAJCQl8IENPTU1JVFRFRAogCQkJfCBDT01Q UkVTU0lPTgogCQkJfCBDT05DVVJSRU5UTFkKKwkJCXwgQ09ORElUSU9OQUwKIAkJCXwgQ09O RklHVVJBVElPTgogCQkJfCBDT05GTElDVAogCQkJfCBDT05ORUNUSU9OCkBAIC0xNzY2Mywx MSArMTc5NjEsMTMgQEAgYmFyZV9sYWJlbF9rZXl3b3JkOgogCQkJfCBEUk9QCiAJCQl8IEVB Q0gKIAkJCXwgRUxTRQorCQkJfCBFTVBUWV9QCiAJCQl8IEVOQUJMRV9QCiAJCQl8IEVOQ09E SU5HCiAJCQl8IEVOQ1JZUFRFRAogCQkJfCBFTkRfUAogCQkJfCBFTlVNX1AKKwkJCXwgRVJS T1JfUAogCQkJfCBFU0NBUEUKIAkJCXwgRVZFTlQKIAkJCXwgRVhDTFVERQpAQCAtMTc3Mzcs OCArMTgwMzcsMTEgQEAgYmFyZV9sYWJlbF9rZXl3b3JkOgogCQkJfCBKU09OCiAJCQl8IEpT T05fQVJSQVkKIAkJCXwgSlNPTl9BUlJBWUFHRworCQkJfCBKU09OX0VYSVNUUwogCQkJfCBK U09OX09CSkVDVAogCQkJfCBKU09OX09CSkVDVEFHRworCQkJfCBKU09OX1FVRVJZCisJCQl8 IEpTT05fVkFMVUUKIAkJCXwgS0VFUAogCQkJfCBLRVkKIAkJCXwgS0VZUwpAQCAtMTc4MDAs NiArMTgxMDMsNyBAQCBiYXJlX2xhYmVsX2tleXdvcmQ6CiAJCQl8IE9GRgogCQkJfCBPSURT CiAJCQl8IE9MRAorCQkJfCBPTUlUCiAJCQl8IE9OTFkKIAkJCXwgT1BFUkFUT1IKIAkJCXwg T1BUSU9OCkBAIC0xNzgzNyw2ICsxODE0MSw3IEBAIGJhcmVfbGFiZWxfa2V5d29yZDoKIAkJ CXwgUFJPR1JBTQogCQkJfCBQVUJMSUNBVElPTgogCQkJfCBRVU9URQorCQkJfCBRVU9URVMK IAkJCXwgUkFOR0UKIAkJCXwgUkVBRAogCQkJfCBSRUFMCkBAIC0xNzkwNSw2ICsxODIxMCw3 IEBAIGJhcmVfbGFiZWxfa2V5d29yZDoKIAkJCXwgU1RPUkFHRQogCQkJfCBTVE9SRUQKIAkJ CXwgU1RSSUNUX1AKKwkJCXwgU1RSSU5HX1AKIAkJCXwgU1RSSVBfUAogCQkJfCBTVUJTQ1JJ UFRJT04KIAkJCXwgU1VCU1RSSU5HCkBAIC0xNzkzOSw2ICsxODI0NSw3IEBAIGJhcmVfbGFi ZWxfa2V5d29yZDoKIAkJCXwgVUVTQ0FQRQogCQkJfCBVTkJPVU5ERUQKIAkJCXwgVU5DT01N SVRURUQKKwkJCXwgVU5DT05ESVRJT05BTAogCQkJfCBVTkVOQ1JZUFRFRAogCQkJfCBVTklR VUUKIAkJCXwgVU5LTk9XTgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNl X2NvbGxhdGUuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9jb2xsYXRlLmMKaW5kZXgg OWY2YWZjMzUxYy4uNjkyZTVkMTIyNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2Vy L3BhcnNlX2NvbGxhdGUuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfY29sbGF0 ZS5jCkBAIC02OTEsNiArNjkxLDEzIEBAIGFzc2lnbl9jb2xsYXRpb25zX3dhbGtlcihOb2Rl ICpub2RlLCBhc3NpZ25fY29sbGF0aW9uc19jb250ZXh0ICpjb250ZXh0KQogCQkJCQkJCQkJ CQkJCQkJJmxvY2NvbnRleHQpOwogCQkJCQkJfQogCQkJCQkJYnJlYWs7CisJCQkJCWNhc2Ug VF9Kc29uRXhwcjoKKworCQkJCQkJLyoKKwkJCQkJCSAqIENvbnRleHQgaXRlbSBhbmQgUEFT U0lORyBhcmd1bWVudHMgYXJlIGFscmVhZHkKKwkJCQkJCSAqIG1hcmtlZCB3aXRoIGNvbGxh dGlvbnMgaW4gcGFyc2VfZXhwci5jLgorCQkJCQkJICovCisJCQkJCQlicmVhazsKIAkJCQkJ ZGVmYXVsdDoKIAogCQkJCQkJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9w YXJzZV9leHByLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCmluZGV4IDY1 NjIyYzUzODAuLmY3MzBhMzQyZjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9w YXJzZV9leHByLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYwpAQCAt ODQsNiArODQsOCBAQCBzdGF0aWMgTm9kZSAqdHJhbnNmb3JtSnNvbkFycmF5UXVlcnlDb25z dHJ1Y3RvcihQYXJzZVN0YXRlICpwc3RhdGUsCiBzdGF0aWMgTm9kZSAqdHJhbnNmb3JtSnNv bk9iamVjdEFnZyhQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25PYmplY3RBZ2cgKmFnZyk7CiBz dGF0aWMgTm9kZSAqdHJhbnNmb3JtSnNvbkFycmF5QWdnKFBhcnNlU3RhdGUgKnBzdGF0ZSwg SnNvbkFycmF5QWdnICphZ2cpOwogc3RhdGljIE5vZGUgKnRyYW5zZm9ybUpzb25Jc1ByZWRp Y2F0ZShQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25Jc1ByZWRpY2F0ZSAqcCk7CitzdGF0aWMg Tm9kZSAqdHJhbnNmb3JtSnNvbkZ1bmNFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkZ1 bmNFeHByICpwKTsKK3N0YXRpYyBOb2RlICp0cmFuc2Zvcm1Kc29uVmFsdWVFeHByKFBhcnNl U3RhdGUgKnBzdGF0ZSwgSnNvblZhbHVlRXhwciAqanZlKTsKIHN0YXRpYyBOb2RlICptYWtl X3Jvd19jb21wYXJpc29uX29wKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqb3BuYW1lLAog CQkJCQkJCQkJTGlzdCAqbGFyZ3MsIExpc3QgKnJhcmdzLCBpbnQgbG9jYXRpb24pOwogc3Rh dGljIE5vZGUgKm1ha2Vfcm93X2Rpc3RpbmN0X29wKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlz dCAqb3BuYW1lLApAQCAtMzMwLDYgKzMzMiwxNCBAQCB0cmFuc2Zvcm1FeHByUmVjdXJzZShQ YXJzZVN0YXRlICpwc3RhdGUsIE5vZGUgKmV4cHIpCiAJCQlyZXN1bHQgPSB0cmFuc2Zvcm1K c29uSXNQcmVkaWNhdGUocHN0YXRlLCAoSnNvbklzUHJlZGljYXRlICopIGV4cHIpOwogCQkJ YnJlYWs7CiAKKwkJY2FzZSBUX0pzb25GdW5jRXhwcjoKKwkJCXJlc3VsdCA9IHRyYW5zZm9y bUpzb25GdW5jRXhwcihwc3RhdGUsIChKc29uRnVuY0V4cHIgKikgZXhwcik7CisJCQlicmVh azsKKworCQljYXNlIFRfSnNvblZhbHVlRXhwcjoKKwkJCXJlc3VsdCA9IHRyYW5zZm9ybUpz b25WYWx1ZUV4cHIocHN0YXRlLCAoSnNvblZhbHVlRXhwciAqKSBleHByKTsKKwkJCWJyZWFr OworCiAJCWRlZmF1bHQ6CiAJCQkvKiBzaG91bGQgbm90IHJlYWNoIGhlcmUgKi8KIAkJCWVs b2coRVJST1IsICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlOiAlZCIsIChpbnQpIG5vZGVUYWco ZXhwcikpOwpAQCAtMzE2Miw4ICszMTcyLDggQEAgbWFrZUNhc2VUZXN0RXhwcihOb2RlICpl eHByKQogICogZGVmYXVsdCBmb3JtYXQgb3RoZXJ3aXNlLgogICovCiBzdGF0aWMgTm9kZSAq Ci10cmFuc2Zvcm1Kc29uVmFsdWVFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvblZhbHVl RXhwciAqdmUsCi0JCQkJCSAgIEpzb25Gb3JtYXRUeXBlIGRlZmF1bHRfZm9ybWF0KQordHJh bnNmb3JtSnNvblZhbHVlRXhwckV4dChQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25WYWx1ZUV4 cHIgKnZlLAorCQkJCQkJICBKc29uRm9ybWF0VHlwZSBkZWZhdWx0X2Zvcm1hdCwgYm9vbCBp c2FyZykKIHsKIAlOb2RlCSAgICpleHByID0gdHJhbnNmb3JtRXhwclJlY3Vyc2UocHN0YXRl LCAoTm9kZSAqKSB2ZS0+cmF3X2V4cHIpOwogCU5vZGUJICAgKnJhd2V4cHI7CkBAIC0zMTgy LDYgKzMxOTIsOCBAQCB0cmFuc2Zvcm1Kc29uVmFsdWVFeHByKFBhcnNlU3RhdGUgKnBzdGF0 ZSwgSnNvblZhbHVlRXhwciAqdmUsCiAKIAlnZXRfdHlwZV9jYXRlZ29yeV9wcmVmZXJyZWQo ZXhwcnR5cGUsICZ0eXBjYXRlZ29yeSwgJnR5cGlzcHJlZmVycmVkKTsKIAorCXJhd2V4cHIg PSBleHByOworCiAJaWYgKHZlLT5mb3JtYXQtPmZvcm1hdF90eXBlICE9IEpTX0ZPUk1BVF9E RUZBVUxUKQogCXsKIAkJaWYgKHZlLT5mb3JtYXQtPmVuY29kaW5nICE9IEpTX0VOQ19ERUZB VUxUICYmIGV4cHJ0eXBlICE9IEJZVEVBT0lEKQpAQCAtMzIwMCwxMiArMzIxMiw0NCBAQCB0 cmFuc2Zvcm1Kc29uVmFsdWVFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvblZhbHVlRXhw ciAqdmUsCiAJCWVsc2UKIAkJCWZvcm1hdCA9IHZlLT5mb3JtYXQtPmZvcm1hdF90eXBlOwog CX0KKwllbHNlIGlmIChpc2FyZykKKwl7CisJCS8qIFBhc3MgU1FML0pTT04gaXRlbSB0eXBl cyBkaXJlY3RseSB3aXRob3V0IGNvbnZlcnNpb24gdG8ganNvbltiXS4gKi8KKwkJc3dpdGNo IChleHBydHlwZSkKKwkJeworCQkJY2FzZSBURVhUT0lEOgorCQkJY2FzZSBOVU1FUklDT0lE OgorCQkJY2FzZSBCT09MT0lEOgorCQkJY2FzZSBJTlQyT0lEOgorCQkJY2FzZSBJTlQ0T0lE OgorCQkJY2FzZSBJTlQ4T0lEOgorCQkJY2FzZSBGTE9BVDRPSUQ6CisJCQljYXNlIEZMT0FU OE9JRDoKKwkJCWNhc2UgREFURU9JRDoKKwkJCWNhc2UgVElNRU9JRDoKKwkJCWNhc2UgVElN RVRaT0lEOgorCQkJY2FzZSBUSU1FU1RBTVBPSUQ6CisJCQljYXNlIFRJTUVTVEFNUFRaT0lE OgorCQkJCXJldHVybiBleHByOworCisJCQlkZWZhdWx0OgorCQkJCWlmICh0eXBjYXRlZ29y eSA9PSBUWVBDQVRFR09SWV9TVFJJTkcpCisJCQkJCXJldHVybiBjb2VyY2VfdG9fc3BlY2lm aWNfdHlwZShwc3RhdGUsIGV4cHIsIFRFWFRPSUQsCisJCQkJCQkJCQkJCQkgICAiSlNPTl9W QUxVRV9FWFBSIik7CisJCQkJLyogZWxzZSBjb252ZXJ0IGFyZ3VtZW50IHRvIGpzb25bYl0g dHlwZSAqLworCQkJCWJyZWFrOworCQl9CisKKwkJZm9ybWF0ID0gZGVmYXVsdF9mb3JtYXQ7 CisJfQogCWVsc2UgaWYgKGV4cHJ0eXBlID09IEpTT05PSUQgfHwgZXhwcnR5cGUgPT0gSlNP TkJPSUQpCiAJCWZvcm1hdCA9IEpTX0ZPUk1BVF9ERUZBVUxUOyAvKiBkbyBub3QgZm9ybWF0 IGpzb25bYl0gdHlwZXMgKi8KIAllbHNlCiAJCWZvcm1hdCA9IGRlZmF1bHRfZm9ybWF0Owog Ci0JaWYgKGZvcm1hdCAhPSBKU19GT1JNQVRfREVGQVVMVCkKKwlpZiAoZm9ybWF0ID09IEpT X0ZPUk1BVF9ERUZBVUxUKQorCQlleHByID0gcmF3ZXhwcjsKKwllbHNlCiAJewogCQlPaWQJ CQl0YXJnZXR0eXBlID0gZm9ybWF0ID09IEpTX0ZPUk1BVF9KU09OQiA/IEpTT05CT0lEIDog SlNPTk9JRDsKIAkJTm9kZQkgICAqb3JpZyA9IG1ha2VDYXNlVGVzdEV4cHIoZXhwcik7CkBA IC0zMjEzLDcgKzMyNTcsNyBAQCB0cmFuc2Zvcm1Kc29uVmFsdWVFeHByKFBhcnNlU3RhdGUg KnBzdGF0ZSwgSnNvblZhbHVlRXhwciAqdmUsCiAKIAkJZXhwciA9IG9yaWc7CiAKLQkJaWYg KGV4cHJ0eXBlICE9IEJZVEVBT0lEICYmIHR5cGNhdGVnb3J5ICE9IFRZUENBVEVHT1JZX1NU UklORykKKwkJaWYgKCFpc2FyZyAmJiBleHBydHlwZSAhPSBCWVRFQU9JRCAmJiB0eXBjYXRl Z29yeSAhPSBUWVBDQVRFR09SWV9TVFJJTkcpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQko ZXJyY29kZShFUlJDT0RFX0RBVEFUWVBFX01JU01BVENIKSwKIAkJCQkJIGVycm1zZyh2ZS0+ Zm9ybWF0LT5mb3JtYXRfdHlwZSA9PSBKU19GT1JNQVRfREVGQVVMVCA/CkBAIC0zMjY1LDYg KzMzMDksMjQgQEAgdHJhbnNmb3JtSnNvblZhbHVlRXhwcihQYXJzZVN0YXRlICpwc3RhdGUs IEpzb25WYWx1ZUV4cHIgKnZlLAogCXJldHVybiBleHByOwogfQogCisvKgorICogVHJhbnNm b3JtIEpTT04gdmFsdWUgZXhwcmVzc2lvbiB1c2luZyBGT1JNQVQgSlNPTiBieSBkZWZhdWx0 LgorICovCitzdGF0aWMgTm9kZSAqCit0cmFuc2Zvcm1Kc29uVmFsdWVFeHByKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgSnNvblZhbHVlRXhwciAqanZlKQoreworCXJldHVybiB0cmFuc2Zvcm1K c29uVmFsdWVFeHByRXh0KHBzdGF0ZSwganZlLCBKU19GT1JNQVRfSlNPTiwgZmFsc2UpOwor fQorCisvKgorICogVHJhbnNmb3JtIEpTT04gdmFsdWUgZXhwcmVzc2lvbiB1c2luZyB1bnNw ZWNpZmllZCBmb3JtYXQgYnkgZGVmYXVsdC4KKyAqLworc3RhdGljIE5vZGUgKgordHJhbnNm b3JtSnNvblZhbHVlRXhwckRlZmF1bHQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uVmFsdWVF eHByICpqdmUpCit7CisJcmV0dXJuIHRyYW5zZm9ybUpzb25WYWx1ZUV4cHJFeHQocHN0YXRl LCBqdmUsIEpTX0ZPUk1BVF9ERUZBVUxULCBmYWxzZSk7Cit9CisKIC8qCiAgKiBDaGVja3Mg c3BlY2lmaWVkIG91dHB1dCBmb3JtYXQgZm9yIGl0cyBhcHBsaWNhYmlsaXR5IHRvIHRoZSB0 YXJnZXQgdHlwZS4KICAqLwpAQCAtMzUyMiw4ICszNTg0LDcgQEAgdHJhbnNmb3JtSnNvbk9i amVjdENvbnN0cnVjdG9yKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbk9iamVjdENvbnN0cnVj dG9yICpjdG9yKQogCQl7CiAJCQlKc29uS2V5VmFsdWUgKmt2ID0gY2FzdE5vZGUoSnNvbktl eVZhbHVlLCBsZmlyc3QobGMpKTsKIAkJCU5vZGUJICAgKmtleSA9IHRyYW5zZm9ybUV4cHJS ZWN1cnNlKHBzdGF0ZSwgKE5vZGUgKikga3YtPmtleSk7Ci0JCQlOb2RlCSAgICp2YWwgPSB0 cmFuc2Zvcm1Kc29uVmFsdWVFeHByKHBzdGF0ZSwga3YtPnZhbHVlLAotCQkJCQkJCQkJCQkJ CSBKU19GT1JNQVRfREVGQVVMVCk7CisJCQlOb2RlCSAgICp2YWwgPSB0cmFuc2Zvcm1Kc29u VmFsdWVFeHByRGVmYXVsdChwc3RhdGUsIGt2LT52YWx1ZSk7CiAKIAkJCWFyZ3MgPSBsYXBw ZW5kKGFyZ3MsIGtleSk7CiAJCQlhcmdzID0gbGFwcGVuZChhcmdzLCB2YWwpOwpAQCAtMzcw MSw3ICszNzYyLDcgQEAgdHJhbnNmb3JtSnNvbk9iamVjdEFnZyhQYXJzZVN0YXRlICpwc3Rh dGUsIEpzb25PYmplY3RBZ2cgKmFnZykKIAlPaWQJCQlhZ2d0eXBlOwogCiAJa2V5ID0gdHJh bnNmb3JtRXhwclJlY3Vyc2UocHN0YXRlLCAoTm9kZSAqKSBhZ2ctPmFyZy0+a2V5KTsKLQl2 YWwgPSB0cmFuc2Zvcm1Kc29uVmFsdWVFeHByKHBzdGF0ZSwgYWdnLT5hcmctPnZhbHVlLCBK U19GT1JNQVRfREVGQVVMVCk7CisJdmFsID0gdHJhbnNmb3JtSnNvblZhbHVlRXhwckRlZmF1 bHQocHN0YXRlLCBhZ2ctPmFyZy0+dmFsdWUpOwogCWFyZ3MgPSBsaXN0X21ha2UyKGtleSwg dmFsKTsKIAogCXJldHVybmluZyA9IHRyYW5zZm9ybUpzb25Db25zdHJ1Y3Rvck91dHB1dChw c3RhdGUsIGFnZy0+Y29uc3RydWN0b3ItPm91dHB1dCwKQEAgLTM3NTcsNyArMzgxOCw3IEBA IHRyYW5zZm9ybUpzb25BcnJheUFnZyhQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25BcnJheUFn ZyAqYWdnKQogCWNvbnN0IGNoYXIgKmFnZ2ZubmFtZTsKIAlPaWQJCQlhZ2d0eXBlOwogCi0J YXJnID0gdHJhbnNmb3JtSnNvblZhbHVlRXhwcihwc3RhdGUsIGFnZy0+YXJnLCBKU19GT1JN QVRfREVGQVVMVCk7CisJYXJnID0gdHJhbnNmb3JtSnNvblZhbHVlRXhwckRlZmF1bHQocHN0 YXRlLCBhZ2ctPmFyZyk7CiAKIAlyZXR1cm5pbmcgPSB0cmFuc2Zvcm1Kc29uQ29uc3RydWN0 b3JPdXRwdXQocHN0YXRlLCBhZ2ctPmNvbnN0cnVjdG9yLT5vdXRwdXQsCiAJCQkJCQkJCQkJ CSAgIGxpc3RfbWFrZTEoYXJnKSk7CkBAIC0zODA1LDggKzM4NjYsNyBAQCB0cmFuc2Zvcm1K c29uQXJyYXlDb25zdHJ1Y3RvcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25BcnJheUNvbnN0 cnVjdG9yICpjdG9yKQogCQlmb3JlYWNoKGxjLCBjdG9yLT5leHBycykKIAkJewogCQkJSnNv blZhbHVlRXhwciAqanN2YWwgPSBjYXN0Tm9kZShKc29uVmFsdWVFeHByLCBsZmlyc3QobGMp KTsKLQkJCU5vZGUJICAgKnZhbCA9IHRyYW5zZm9ybUpzb25WYWx1ZUV4cHIocHN0YXRlLCBq c3ZhbCwKLQkJCQkJCQkJCQkJCQkgSlNfRk9STUFUX0RFRkFVTFQpOworCQkJTm9kZQkgICAq dmFsID0gdHJhbnNmb3JtSnNvblZhbHVlRXhwckRlZmF1bHQocHN0YXRlLCBqc3ZhbCk7CiAK IAkJCWFyZ3MgPSBsYXBwZW5kKGFyZ3MsIHZhbCk7CiAJCX0KQEAgLTM4ODksMyArMzk0OSw0 MTYgQEAgdHJhbnNmb3JtSnNvbklzUHJlZGljYXRlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNv bklzUHJlZGljYXRlICpwcmVkKQogCXJldHVybiBtYWtlSnNvbklzUHJlZGljYXRlKGV4cHIs IE5VTEwsIHByZWQtPml0ZW1fdHlwZSwKIAkJCQkJCQkgICBwcmVkLT51bmlxdWVfa2V5cywg cHJlZC0+bG9jYXRpb24pOwogfQorCisvKgorICogVHJhbnNmb3JtIGEgSlNPTiBQQVNTSU5H IGNsYXVzZS4KKyAqLworc3RhdGljIHZvaWQKK3RyYW5zZm9ybUpzb25QYXNzaW5nQXJncyhQ YXJzZVN0YXRlICpwc3RhdGUsIEpzb25Gb3JtYXRUeXBlIGZvcm1hdCwgTGlzdCAqYXJncywK KwkJCQkJCSBMaXN0ICoqcGFzc2luZ192YWx1ZXMsIExpc3QgKipwYXNzaW5nX25hbWVzKQor eworCUxpc3RDZWxsICAgKmxjOworCisJKnBhc3NpbmdfdmFsdWVzID0gTklMOworCSpwYXNz aW5nX25hbWVzID0gTklMOworCisJZm9yZWFjaChsYywgYXJncykKKwl7CisJCUpzb25Bcmd1 bWVudCAqYXJnID0gY2FzdE5vZGUoSnNvbkFyZ3VtZW50LCBsZmlyc3QobGMpKTsKKwkJTm9k ZQkgICAqZXhwciA9IHRyYW5zZm9ybUpzb25WYWx1ZUV4cHJFeHQocHN0YXRlLCBhcmctPnZh bCwKKwkJCQkJCQkJCQkJCQkgZm9ybWF0LCB0cnVlKTsKKworCQlhc3NpZ25fZXhwcl9jb2xs YXRpb25zKHBzdGF0ZSwgZXhwcik7CisKKwkJKnBhc3NpbmdfdmFsdWVzID0gbGFwcGVuZCgq cGFzc2luZ192YWx1ZXMsIGV4cHIpOworCQkqcGFzc2luZ19uYW1lcyA9IGxhcHBlbmQoKnBh c3NpbmdfbmFtZXMsIG1ha2VTdHJpbmcoYXJnLT5uYW1lKSk7CisJfQorfQorCisvKgorICog VHJhbnNmb3JtIGEgSlNPTiBCRUhBVklPUiBjbGF1c2UuCisgKi8KK3N0YXRpYyBKc29uQmVo YXZpb3IgKgordHJhbnNmb3JtSnNvbkJlaGF2aW9yKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNv bkJlaGF2aW9yICpiZWhhdmlvciwKKwkJCQkJICBKc29uQmVoYXZpb3JUeXBlIGRlZmF1bHRf YmVoYXZpb3IpCit7CisJSnNvbkJlaGF2aW9yVHlwZSBiZWhhdmlvcl90eXBlID0gZGVmYXVs dF9iZWhhdmlvcjsKKwlOb2RlCSAgICpkZWZhdWx0X2V4cHIgPSBOVUxMOworCisJaWYgKGJl aGF2aW9yKQorCXsKKwkJYmVoYXZpb3JfdHlwZSA9IGJlaGF2aW9yLT5idHlwZTsKKwkJaWYg KGJlaGF2aW9yX3R5cGUgPT0gSlNPTl9CRUhBVklPUl9ERUZBVUxUKQorCQkJZGVmYXVsdF9l eHByID0gdHJhbnNmb3JtRXhwclJlY3Vyc2UocHN0YXRlLCBiZWhhdmlvci0+ZGVmYXVsdF9l eHByKTsKKwl9CisJcmV0dXJuIG1ha2VKc29uQmVoYXZpb3IoYmVoYXZpb3JfdHlwZSwgZGVm YXVsdF9leHByKTsKK30KKworLyoKKyAqIENvbW1vbiBjb2RlIGZvciBKU09OX1ZBTFVFLCBK U09OX1FVRVJZLCBKU09OX0VYSVNUUyB0cmFuc2Zvcm1hdGlvbgorICogaW50byBhIEpzb25F eHByIG5vZGUuCisgKi8KK3N0YXRpYyBKc29uRXhwciAqCit0cmFuc2Zvcm1Kc29uRXhwckNv bW1vbihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYykKK3sKKwlKc29u RXhwciAgICpqc2V4cHIgPSBtYWtlTm9kZShKc29uRXhwcik7CisJTm9kZQkgICAqcGF0aHNw ZWM7CisJSnNvbkZvcm1hdFR5cGUgZm9ybWF0OworCisJaWYgKGZ1bmMtPmNvbW1vbi0+cGF0 aG5hbWUpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhf RVJST1IpLAorCQkJCSBlcnJtc2coIkpTT05fVEFCTEUgcGF0aCBuYW1lIGlzIG5vdCBhbGxv d2VkIGhlcmUiKSwKKwkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgZnVuYy0+bG9j YXRpb24pKSk7CisKKwlqc2V4cHItPmxvY2F0aW9uID0gZnVuYy0+bG9jYXRpb247CisJanNl eHByLT5vcCA9IGZ1bmMtPm9wOworCWpzZXhwci0+Zm9ybWF0dGVkX2V4cHIgPSB0cmFuc2Zv cm1Kc29uVmFsdWVFeHByKHBzdGF0ZSwgZnVuYy0+Y29tbW9uLT5leHByKTsKKworCWFzc2ln bl9leHByX2NvbGxhdGlvbnMocHN0YXRlLCBqc2V4cHItPmZvcm1hdHRlZF9leHByKTsKKwor CS8qIGZvcm1hdCBpcyBkZXRlcm1pbmVkIGJ5IGNvbnRleHQgaXRlbSB0eXBlICovCisJZm9y bWF0ID0gZXhwclR5cGUoanNleHByLT5mb3JtYXR0ZWRfZXhwcikgPT0gSlNPTkJPSUQgPyBK U19GT1JNQVRfSlNPTkIgOiBKU19GT1JNQVRfSlNPTjsKKworCWpzZXhwci0+cmVzdWx0X2Nv ZXJjaW9uID0gTlVMTDsKKwlqc2V4cHItPm9taXRfcXVvdGVzID0gZmFsc2U7CisKKwlqc2V4 cHItPmZvcm1hdCA9IGZ1bmMtPmNvbW1vbi0+ZXhwci0+Zm9ybWF0OworCisJcGF0aHNwZWMg PSB0cmFuc2Zvcm1FeHByUmVjdXJzZShwc3RhdGUsIGZ1bmMtPmNvbW1vbi0+cGF0aHNwZWMp OworCisJanNleHByLT5wYXRoX3NwZWMgPQorCQljb2VyY2VfdG9fdGFyZ2V0X3R5cGUocHN0 YXRlLCBwYXRoc3BlYywgZXhwclR5cGUocGF0aHNwZWMpLAorCQkJCQkJCSAgSlNPTlBBVEhP SUQsIC0xLAorCQkJCQkJCSAgQ09FUkNJT05fRVhQTElDSVQsIENPRVJDRV9JTVBMSUNJVF9D QVNULAorCQkJCQkJCSAgZXhwckxvY2F0aW9uKHBhdGhzcGVjKSk7CisJaWYgKCFqc2V4cHIt PnBhdGhfc3BlYykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0RB VEFUWVBFX01JU01BVENIKSwKKwkJCQkgZXJybXNnKCJKU09OIHBhdGggZXhwcmVzc2lvbiBt dXN0IGJlIHR5cGUgJXMsIG5vdCB0eXBlICVzIiwKKwkJCQkJCSJqc29ucGF0aCIsIGZvcm1h dF90eXBlX2JlKGV4cHJUeXBlKHBhdGhzcGVjKSkpLAorCQkJCSBwYXJzZXJfZXJycG9zaXRp b24ocHN0YXRlLCBleHByTG9jYXRpb24ocGF0aHNwZWMpKSkpOworCisJLyogdHJhbnNmb3Jt IGFuZCBjb2VyY2UgdG8ganNvbltiXSBwYXNzaW5nIGFyZ3VtZW50cyAqLworCXRyYW5zZm9y bUpzb25QYXNzaW5nQXJncyhwc3RhdGUsIGZvcm1hdCwgZnVuYy0+Y29tbW9uLT5wYXNzaW5n LAorCQkJCQkJCSAmanNleHByLT5wYXNzaW5nX3ZhbHVlcywgJmpzZXhwci0+cGFzc2luZ19u YW1lcyk7CisKKwlpZiAoZnVuYy0+b3AgIT0gSlNPTl9FWElTVFNfT1ApCisJCWpzZXhwci0+ b25fZW1wdHkgPSB0cmFuc2Zvcm1Kc29uQmVoYXZpb3IocHN0YXRlLCBmdW5jLT5vbl9lbXB0 eSwKKwkJCQkJCQkJCQkJCSBKU09OX0JFSEFWSU9SX05VTEwpOworCisJanNleHByLT5vbl9l cnJvciA9IHRyYW5zZm9ybUpzb25CZWhhdmlvcihwc3RhdGUsIGZ1bmMtPm9uX2Vycm9yLAor CQkJCQkJCQkJCQkgZnVuYy0+b3AgPT0gSlNPTl9FWElTVFNfT1AgPworCQkJCQkJCQkJCQkg SlNPTl9CRUhBVklPUl9GQUxTRSA6CisJCQkJCQkJCQkJCSBKU09OX0JFSEFWSU9SX05VTEwp OworCisJcmV0dXJuIGpzZXhwcjsKK30KKworLyoKKyAqIEFzc2lnbiBkZWZhdWx0IEpTT04g cmV0dXJuaW5nIHR5cGUgZnJvbSB0aGUgc3BlY2lmaWVkIGZvcm1hdCBvciBmcm9tCisgKiB0 aGUgY29udGV4dCBpdGVtIHR5cGUuCisgKi8KK3N0YXRpYyB2b2lkCithc3NpZ25EZWZhdWx0 SnNvblJldHVybmluZ1R5cGUoTm9kZSAqY29udGV4dF9pdGVtLCBKc29uRm9ybWF0ICpjb250 ZXh0X2Zvcm1hdCwKKwkJCQkJCQkgICBKc29uUmV0dXJuaW5nICpyZXQpCit7CisJYm9vbAkJ aXNfanNvbmI7CisKKwlyZXQtPmZvcm1hdCA9IGNvcHlPYmplY3QoY29udGV4dF9mb3JtYXQp OworCisJaWYgKHJldC0+Zm9ybWF0LT5mb3JtYXRfdHlwZSA9PSBKU19GT1JNQVRfREVGQVVM VCkKKwkJaXNfanNvbmIgPSBleHByVHlwZShjb250ZXh0X2l0ZW0pID09IEpTT05CT0lEOwor CWVsc2UKKwkJaXNfanNvbmIgPSByZXQtPmZvcm1hdC0+Zm9ybWF0X3R5cGUgPT0gSlNfRk9S TUFUX0pTT05COworCisJcmV0LT50eXBpZCA9IGlzX2pzb25iID8gSlNPTkJPSUQgOiBKU09O T0lEOworCXJldC0+dHlwbW9kID0gLTE7Cit9CisKKy8qCisgKiBUcnkgdG8gY29lcmNlIGV4 cHJlc3Npb24gdG8gdGhlIG91dHB1dCB0eXBlIG9yCisgKiB1c2UganNvbl9wb3B1bGF0ZV90 eXBlKCkgZm9yIGNvbXBvc2l0ZSwgYXJyYXkgYW5kIGRvbWFpbiB0eXBlcyBvcgorICogdXNl IGNvZXJjaW9uIHZpYSBJL08uCisgKi8KK3N0YXRpYyBKc29uQ29lcmNpb24gKgorY29lcmNl SnNvbkV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpleHByLCBjb25zdCBKc29uUmV0 dXJuaW5nICpyZXR1cm5pbmcpCit7CisJY2hhcgkJdHlwdHlwZTsKKwlKc29uQ29lcmNpb24g KmNvZXJjaW9uID0gbWFrZU5vZGUoSnNvbkNvZXJjaW9uKTsKKworCWNvZXJjaW9uLT5leHBy ID0gY29lcmNlSnNvbkZ1bmNFeHByKHBzdGF0ZSwgZXhwciwgcmV0dXJuaW5nLCBmYWxzZSk7 CisKKwlpZiAoY29lcmNpb24tPmV4cHIpCisJeworCQlpZiAoY29lcmNpb24tPmV4cHIgPT0g ZXhwcikKKwkJCWNvZXJjaW9uLT5leHByID0gTlVMTDsKKworCQlyZXR1cm4gY29lcmNpb247 CisJfQorCisJdHlwdHlwZSA9IGdldF90eXB0eXBlKHJldHVybmluZy0+dHlwaWQpOworCisJ aWYgKHJldHVybmluZy0+dHlwaWQgPT0gUkVDT1JET0lEIHx8CisJCXR5cHR5cGUgPT0gVFlQ VFlQRV9DT01QT1NJVEUgfHwKKwkJdHlwdHlwZSA9PSBUWVBUWVBFX0RPTUFJTiB8fAorCQl0 eXBlX2lzX2FycmF5KHJldHVybmluZy0+dHlwaWQpKQorCQljb2VyY2lvbi0+dmlhX3BvcHVs YXRlID0gdHJ1ZTsKKwllbHNlCisJCWNvZXJjaW9uLT52aWFfaW8gPSB0cnVlOworCisJcmV0 dXJuIGNvZXJjaW9uOworfQorCisvKgorICogVHJhbnNmb3JtIGEgSlNPTiBvdXRwdXQgY2xh dXNlIG9mIEpTT05fVkFMVUUgYW5kIEpTT05fUVVFUlkuCisgKi8KK3N0YXRpYyB2b2lkCit0 cmFuc2Zvcm1Kc29uRnVuY0V4cHJPdXRwdXQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRnVu Y0V4cHIgKmZ1bmMsCisJCQkJCQkJSnNvbkV4cHIgKmpzZXhwcikKK3sKKwlOb2RlCSAgICpl eHByID0ganNleHByLT5mb3JtYXR0ZWRfZXhwcjsKKworCWpzZXhwci0+cmV0dXJuaW5nID0g dHJhbnNmb3JtSnNvbk91dHB1dChwc3RhdGUsIGZ1bmMtPm91dHB1dCwgZmFsc2UpOworCisJ LyogSlNPTl9WQUxVRSByZXR1cm5zIHRleHQgYnkgZGVmYXVsdCAqLworCWlmIChmdW5jLT5v cCA9PSBKU09OX1ZBTFVFX09QICYmICFPaWRJc1ZhbGlkKGpzZXhwci0+cmV0dXJuaW5nLT50 eXBpZCkpCisJeworCQlqc2V4cHItPnJldHVybmluZy0+dHlwaWQgPSBURVhUT0lEOworCQlq c2V4cHItPnJldHVybmluZy0+dHlwbW9kID0gLTE7CisJfQorCisJaWYgKE9pZElzVmFsaWQo anNleHByLT5yZXR1cm5pbmctPnR5cGlkKSkKKwl7CisJCUpzb25SZXR1cm5pbmcgcmV0Owor CisJCWlmIChmdW5jLT5vcCA9PSBKU09OX1ZBTFVFX09QICYmCisJCQlqc2V4cHItPnJldHVy bmluZy0+dHlwaWQgIT0gSlNPTk9JRCAmJgorCQkJanNleHByLT5yZXR1cm5pbmctPnR5cGlk ICE9IEpTT05CT0lEKQorCQl7CisJCQkvKiBGb3JjZWQgY29lcmNpb24gdmlhIEkvTyBmb3Ig SlNPTl9WQUxVRSBmb3Igbm9uLUpTT04gdHlwZXMgKi8KKwkJCWpzZXhwci0+cmVzdWx0X2Nv ZXJjaW9uID0gbWFrZU5vZGUoSnNvbkNvZXJjaW9uKTsKKwkJCWpzZXhwci0+cmVzdWx0X2Nv ZXJjaW9uLT5leHByID0gTlVMTDsKKwkJCWpzZXhwci0+cmVzdWx0X2NvZXJjaW9uLT52aWFf aW8gPSB0cnVlOworCQkJcmV0dXJuOworCQl9CisKKwkJYXNzaWduRGVmYXVsdEpzb25SZXR1 cm5pbmdUeXBlKGpzZXhwci0+Zm9ybWF0dGVkX2V4cHIsIGpzZXhwci0+Zm9ybWF0LCAmcmV0 KTsKKworCQlpZiAocmV0LnR5cGlkICE9IGpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCB8fAor CQkJcmV0LnR5cG1vZCAhPSBqc2V4cHItPnJldHVybmluZy0+dHlwbW9kKQorCQl7CisJCQlO b2RlCSAgICpwbGFjZWhvbGRlciA9IG1ha2VDYXNlVGVzdEV4cHIoZXhwcik7CisKKwkJCUFz c2VydCgoKENhc2VUZXN0RXhwciAqKSBwbGFjZWhvbGRlciktPnR5cGVJZCA9PSByZXQudHlw aWQpOworCQkJQXNzZXJ0KCgoQ2FzZVRlc3RFeHByICopIHBsYWNlaG9sZGVyKS0+dHlwZU1v ZCA9PSByZXQudHlwbW9kKTsKKworCQkJanNleHByLT5yZXN1bHRfY29lcmNpb24gPSBjb2Vy Y2VKc29uRXhwcihwc3RhdGUsIHBsYWNlaG9sZGVyLAorCQkJCQkJCQkJCQkJCSBqc2V4cHIt PnJldHVybmluZyk7CisJCX0KKwl9CisJZWxzZQorCQlhc3NpZ25EZWZhdWx0SnNvblJldHVy bmluZ1R5cGUoanNleHByLT5mb3JtYXR0ZWRfZXhwciwganNleHByLT5mb3JtYXQsCisJCQkJ CQkJCQkgICBqc2V4cHItPnJldHVybmluZyk7Cit9CisKKy8qCisgKiBDb2VyY2UgYW4gZXhw cmVzc2lvbiBpbiBKU09OIERFRkFVTFQgYmVoYXZpb3IgdG8gdGhlIHRhcmdldCBvdXRwdXQg dHlwZS4KKyAqLworc3RhdGljIE5vZGUgKgorY29lcmNlRGVmYXVsdEpzb25FeHByKFBhcnNl U3RhdGUgKnBzdGF0ZSwgSnNvbkV4cHIgKmpzZXhwciwgTm9kZSAqZGVmZXhwcikKK3sKKwlp bnQJCQlsb2NhdGlvbjsKKwlPaWQJCQlleHBydHlwZTsKKworCWlmICghZGVmZXhwcikKKwkJ cmV0dXJuIE5VTEw7CisKKwlleHBydHlwZSA9IGV4cHJUeXBlKGRlZmV4cHIpOworCWxvY2F0 aW9uID0gZXhwckxvY2F0aW9uKGRlZmV4cHIpOworCisJaWYgKGxvY2F0aW9uIDwgMCkKKwkJ bG9jYXRpb24gPSBqc2V4cHItPmxvY2F0aW9uOworCisJZGVmZXhwciA9IGNvZXJjZV90b190 YXJnZXRfdHlwZShwc3RhdGUsCisJCQkJCQkJCQlkZWZleHByLAorCQkJCQkJCQkJZXhwcnR5 cGUsCisJCQkJCQkJCQlqc2V4cHItPnJldHVybmluZy0+dHlwaWQsCisJCQkJCQkJCQlqc2V4 cHItPnJldHVybmluZy0+dHlwbW9kLAorCQkJCQkJCQkJQ09FUkNJT05fRVhQTElDSVQsCisJ CQkJCQkJCQlDT0VSQ0VfSU1QTElDSVRfQ0FTVCwKKwkJCQkJCQkJCWxvY2F0aW9uKTsKKwor CWlmICghZGVmZXhwcikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X0NBTk5PVF9DT0VSQ0UpLAorCQkJCSBlcnJtc2coImNhbm5vdCBjYXN0IERFRkFVTFQgZXhw cmVzc2lvbiB0eXBlICVzIHRvICVzIiwKKwkJCQkJCWZvcm1hdF90eXBlX2JlKGV4cHJ0eXBl KSwKKwkJCQkJCWZvcm1hdF90eXBlX2JlKGpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCkpLAor CQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBsb2NhdGlvbikpKTsKKworCXJldHVy biBkZWZleHByOworfQorCisvKgorICogSW5pdGlhbGl6ZSBTUUwvSlNPTiBpdGVtIGNvZXJj aW9uIGZyb20gdGhlIFNRTCB0eXBlICJ0eXBpZCIgdG8gdGhlIHRhcmdldAorICogInJldHVy bmluZyIgdHlwZS4KKyAqLworc3RhdGljIEpzb25Db2VyY2lvbiAqCitpbml0SnNvbkl0ZW1D b2VyY2lvbihQYXJzZVN0YXRlICpwc3RhdGUsIE9pZCB0eXBpZCwKKwkJCQkJIGNvbnN0IEpz b25SZXR1cm5pbmcgKnJldHVybmluZykKK3sKKwlOb2RlCSAgICpleHByOworCisJaWYgKHR5 cGlkID09IFVOS05PV05PSUQpCisJeworCQlleHByID0gKE5vZGUgKikgbWFrZU51bGxDb25z dChVTktOT1dOT0lELCAtMSwgSW52YWxpZE9pZCk7CisJfQorCWVsc2UKKwl7CisJCUNhc2VU ZXN0RXhwciAqcGxhY2Vob2xkZXIgPSBtYWtlTm9kZShDYXNlVGVzdEV4cHIpOworCisJCXBs YWNlaG9sZGVyLT50eXBlSWQgPSB0eXBpZDsKKwkJcGxhY2Vob2xkZXItPnR5cGVNb2QgPSAt MTsKKwkJcGxhY2Vob2xkZXItPmNvbGxhdGlvbiA9IEludmFsaWRPaWQ7CisKKwkJZXhwciA9 IChOb2RlICopIHBsYWNlaG9sZGVyOworCX0KKworCXJldHVybiBjb2VyY2VKc29uRXhwcihw c3RhdGUsIGV4cHIsIHJldHVybmluZyk7Cit9CisKK3N0YXRpYyB2b2lkCitpbml0SnNvbkl0 ZW1Db2VyY2lvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uSXRlbUNvZXJjaW9ucyAqY29l cmNpb25zLAorCQkJCQkgIGNvbnN0IEpzb25SZXR1cm5pbmcgKnJldHVybmluZywgT2lkIGNv bnRleHRJdGVtVHlwZUlkKQoreworCXN0cnVjdAorCXsKKwkJSnNvbkNvZXJjaW9uICoqY29l cmNpb247CisJCU9pZAkJCXR5cGlkOworCX0JCSAgICpwLAorCQkJCWNvZXJjaW9uVHlwaWRz W10gPQorCXsKKwkJeyZjb2VyY2lvbnMtPm51bGwsIFVOS05PV05PSUR9LAorCQl7JmNvZXJj aW9ucy0+c3RyaW5nLCBURVhUT0lEfSwKKwkJeyZjb2VyY2lvbnMtPm51bWVyaWMsIE5VTUVS SUNPSUR9LAorCQl7JmNvZXJjaW9ucy0+Ym9vbGVhbiwgQk9PTE9JRH0sCisJCXsmY29lcmNp b25zLT5kYXRlLCBEQVRFT0lEfSwKKwkJeyZjb2VyY2lvbnMtPnRpbWUsIFRJTUVPSUR9LAor CQl7JmNvZXJjaW9ucy0+dGltZXR6LCBUSU1FVFpPSUR9LAorCQl7JmNvZXJjaW9ucy0+dGlt ZXN0YW1wLCBUSU1FU1RBTVBPSUR9LAorCQl7JmNvZXJjaW9ucy0+dGltZXN0YW1wdHosIFRJ TUVTVEFNUFRaT0lEfSwKKwkJeyZjb2VyY2lvbnMtPmNvbXBvc2l0ZSwgY29udGV4dEl0ZW1U eXBlSWR9LAorCQl7TlVMTCwgSW52YWxpZE9pZH0KKwl9OworCisJZm9yIChwID0gY29lcmNp b25UeXBpZHM7IHAtPmNvZXJjaW9uOyBwKyspCisJCSpwLT5jb2VyY2lvbiA9IGluaXRKc29u SXRlbUNvZXJjaW9uKHBzdGF0ZSwgcC0+dHlwaWQsIHJldHVybmluZyk7Cit9CisKKy8qCisg KiBUcmFuc2Zvcm0gSlNPTl9WQUxVRSwgSlNPTl9RVUVSWSwgSlNPTl9FWElTVFMgZnVuY3Rp b25zIGludG8gYSBKc29uRXhwciBub2RlLgorICovCitzdGF0aWMgTm9kZSAqCit0cmFuc2Zv cm1Kc29uRnVuY0V4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRnVuY0V4cHIgKmZ1bmMp Cit7CisJSnNvbkV4cHIgICAqanNleHByID0gdHJhbnNmb3JtSnNvbkV4cHJDb21tb24ocHN0 YXRlLCBmdW5jKTsKKwljb25zdCBjaGFyICpmdW5jX25hbWUgPSBOVUxMOworCU5vZGUJICAg KmNvbnRleHRJdGVtRXhwciA9IGpzZXhwci0+Zm9ybWF0dGVkX2V4cHI7CisKKwlzd2l0Y2gg KGZ1bmMtPm9wKQorCXsKKwkJY2FzZSBKU09OX1ZBTFVFX09QOgorCQkJZnVuY19uYW1lID0g IkpTT05fVkFMVUUiOworCisJCQl0cmFuc2Zvcm1Kc29uRnVuY0V4cHJPdXRwdXQocHN0YXRl LCBmdW5jLCBqc2V4cHIpOworCisJCQlqc2V4cHItPnJldHVybmluZy0+Zm9ybWF0LT5mb3Jt YXRfdHlwZSA9IEpTX0ZPUk1BVF9ERUZBVUxUOworCQkJanNleHByLT5yZXR1cm5pbmctPmZv cm1hdC0+ZW5jb2RpbmcgPSBKU19FTkNfREVGQVVMVDsKKworCQkJanNleHByLT5vbl9lbXB0 eS0+ZGVmYXVsdF9leHByID0KKwkJCQljb2VyY2VEZWZhdWx0SnNvbkV4cHIocHN0YXRlLCBq c2V4cHIsCisJCQkJCQkJCQkgIGpzZXhwci0+b25fZW1wdHktPmRlZmF1bHRfZXhwcik7CisK KwkJCWpzZXhwci0+b25fZXJyb3ItPmRlZmF1bHRfZXhwciA9CisJCQkJY29lcmNlRGVmYXVs dEpzb25FeHByKHBzdGF0ZSwganNleHByLAorCQkJCQkJCQkJICBqc2V4cHItPm9uX2Vycm9y LT5kZWZhdWx0X2V4cHIpOworCisJCQlqc2V4cHItPmNvZXJjaW9ucyA9IG1ha2VOb2RlKEpz b25JdGVtQ29lcmNpb25zKTsKKwkJCWluaXRKc29uSXRlbUNvZXJjaW9ucyhwc3RhdGUsIGpz ZXhwci0+Y29lcmNpb25zLCBqc2V4cHItPnJldHVybmluZywKKwkJCQkJCQkJICBleHByVHlw ZShjb250ZXh0SXRlbUV4cHIpKTsKKworCQkJYnJlYWs7CisKKwkJY2FzZSBKU09OX1FVRVJZ X09QOgorCQkJZnVuY19uYW1lID0gIkpTT05fUVVFUlkiOworCisJCQl0cmFuc2Zvcm1Kc29u RnVuY0V4cHJPdXRwdXQocHN0YXRlLCBmdW5jLCBqc2V4cHIpOworCisJCQlqc2V4cHItPm9u X2VtcHR5LT5kZWZhdWx0X2V4cHIgPQorCQkJCWNvZXJjZURlZmF1bHRKc29uRXhwcihwc3Rh dGUsIGpzZXhwciwKKwkJCQkJCQkJCSAganNleHByLT5vbl9lbXB0eS0+ZGVmYXVsdF9leHBy KTsKKworCQkJanNleHByLT5vbl9lcnJvci0+ZGVmYXVsdF9leHByID0KKwkJCQljb2VyY2VE ZWZhdWx0SnNvbkV4cHIocHN0YXRlLCBqc2V4cHIsCisJCQkJCQkJCQkgIGpzZXhwci0+b25f ZXJyb3ItPmRlZmF1bHRfZXhwcik7CisKKwkJCWpzZXhwci0+d3JhcHBlciA9IGZ1bmMtPndy YXBwZXI7CisJCQlqc2V4cHItPm9taXRfcXVvdGVzID0gZnVuYy0+b21pdF9xdW90ZXM7CisK KwkJCWJyZWFrOworCisJCWNhc2UgSlNPTl9FWElTVFNfT1A6CisJCQlmdW5jX25hbWUgPSAi SlNPTl9FWElTVFMiOworCisJCQlqc2V4cHItPnJldHVybmluZyA9IHRyYW5zZm9ybUpzb25P dXRwdXQocHN0YXRlLCBmdW5jLT5vdXRwdXQsIGZhbHNlKTsKKworCQkJanNleHByLT5yZXR1 cm5pbmctPmZvcm1hdC0+Zm9ybWF0X3R5cGUgPSBKU19GT1JNQVRfREVGQVVMVDsKKwkJCWpz ZXhwci0+cmV0dXJuaW5nLT5mb3JtYXQtPmVuY29kaW5nID0gSlNfRU5DX0RFRkFVTFQ7CisK KwkJCWlmICghT2lkSXNWYWxpZChqc2V4cHItPnJldHVybmluZy0+dHlwaWQpKQorCQkJewor CQkJCWpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCA9IEJPT0xPSUQ7CisJCQkJanNleHByLT5y ZXR1cm5pbmctPnR5cG1vZCA9IC0xOworCQkJfQorCQkJZWxzZSBpZiAoanNleHByLT5yZXR1 cm5pbmctPnR5cGlkICE9IEJPT0xPSUQpCisJCQl7CisJCQkJQ2FzZVRlc3RFeHByICpwbGFj ZWhvbGRlciA9IG1ha2VOb2RlKENhc2VUZXN0RXhwcik7CisJCQkJaW50CQkJbG9jYXRpb24g PSBleHByTG9jYXRpb24oKE5vZGUgKikganNleHByKTsKKworCQkJCXBsYWNlaG9sZGVyLT50 eXBlSWQgPSBCT09MT0lEOworCQkJCXBsYWNlaG9sZGVyLT50eXBlTW9kID0gLTE7CisJCQkJ cGxhY2Vob2xkZXItPmNvbGxhdGlvbiA9IEludmFsaWRPaWQ7CisKKwkJCQlqc2V4cHItPnJl c3VsdF9jb2VyY2lvbiA9IG1ha2VOb2RlKEpzb25Db2VyY2lvbik7CisJCQkJanNleHByLT5y ZXN1bHRfY29lcmNpb24tPmV4cHIgPQorCQkJCQljb2VyY2VfdG9fdGFyZ2V0X3R5cGUocHN0 YXRlLCAoTm9kZSAqKSBwbGFjZWhvbGRlciwgQk9PTE9JRCwKKwkJCQkJCQkJCQkgIGpzZXhw ci0+cmV0dXJuaW5nLT50eXBpZCwKKwkJCQkJCQkJCQkgIGpzZXhwci0+cmV0dXJuaW5nLT50 eXBtb2QsCisJCQkJCQkJCQkJICBDT0VSQ0lPTl9FWFBMSUNJVCwKKwkJCQkJCQkJCQkgIENP RVJDRV9JTVBMSUNJVF9DQVNULAorCQkJCQkJCQkJCSAgbG9jYXRpb24pOworCisJCQkJaWYg KCFqc2V4cHItPnJlc3VsdF9jb2VyY2lvbi0+ZXhwcikKKwkJCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0NBTk5PVF9DT0VSQ0UpLAorCQkJCQkJCSBlcnJt c2coImNhbm5vdCBjYXN0IHR5cGUgJXMgdG8gJXMiLAorCQkJCQkJCQkJZm9ybWF0X3R5cGVf YmUoQk9PTE9JRCksCisJCQkJCQkJCQlmb3JtYXRfdHlwZV9iZShqc2V4cHItPnJldHVybmlu Zy0+dHlwaWQpKSwKKwkJCQkJCQkgcGFyc2VyX2NvZXJjaW9uX2VycnBvc2l0aW9uKHBzdGF0 ZSwgbG9jYXRpb24sIChOb2RlICopIGpzZXhwcikpKTsKKworCQkJCWlmIChqc2V4cHItPnJl c3VsdF9jb2VyY2lvbi0+ZXhwciA9PSAoTm9kZSAqKSBwbGFjZWhvbGRlcikKKwkJCQkJanNl eHByLT5yZXN1bHRfY29lcmNpb24tPmV4cHIgPSBOVUxMOworCQkJfQorCQkJYnJlYWs7CisJ fQorCisJaWYgKGV4cHJUeXBlKGNvbnRleHRJdGVtRXhwcikgIT0gSlNPTkJPSUQpCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JU RUQpLAorCQkJCSBlcnJtc2coIiVzKCkgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBmb3IgdGhl IGpzb24gdHlwZSIsIGZ1bmNfbmFtZSksCisJCQkJIGVycmhpbnQoIlRyeSBjYXN0aW5nIHRo ZSBhcmd1bWVudCB0byBqc29uYiIpLAorCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRl LCBmdW5jLT5sb2NhdGlvbikpKTsKKworCXJldHVybiAoTm9kZSAqKSBqc2V4cHI7Cit9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdGFyZ2V0LmMgYi9zcmMvYmFj a2VuZC9wYXJzZXIvcGFyc2VfdGFyZ2V0LmMKaW5kZXggODViODM3YjA0Ni4uYmM3ZTQ0ZDhh OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jCisrKyBi L3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYwpAQCAtMTkyMiw2ICsxOTIyLDIx IEBAIEZpZ3VyZUNvbG5hbWVJbnRlcm5hbChOb2RlICpub2RlLCBjaGFyICoqbmFtZSkKIAkJ Y2FzZSBUX0pzb25BcnJheUFnZzoKIAkJCSpuYW1lID0gImpzb25fYXJyYXlhZ2ciOwogCQkJ cmV0dXJuIDI7CisJCWNhc2UgVF9Kc29uRnVuY0V4cHI6CisJCQkvKiBtYWtlIFNRTC9KU09O IGZ1bmN0aW9ucyBhY3QgbGlrZSBhIHJlZ3VsYXIgZnVuY3Rpb24gKi8KKwkJCXN3aXRjaCAo KChKc29uRnVuY0V4cHIgKikgbm9kZSktPm9wKQorCQkJeworCQkJCWNhc2UgSlNPTl9RVUVS WV9PUDoKKwkJCQkJKm5hbWUgPSAianNvbl9xdWVyeSI7CisJCQkJCXJldHVybiAyOworCQkJ CWNhc2UgSlNPTl9WQUxVRV9PUDoKKwkJCQkJKm5hbWUgPSAianNvbl92YWx1ZSI7CisJCQkJ CXJldHVybiAyOworCQkJCWNhc2UgSlNPTl9FWElTVFNfT1A6CisJCQkJCSpuYW1lID0gImpz b25fZXhpc3RzIjsKKwkJCQkJcmV0dXJuIDI7CisJCQl9CisJCQlicmVhazsKIAkJZGVmYXVs dDoKIAkJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9m b3JtYXR0aW5nLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0dGluZy5jCmluZGV4 IGU2MjQ2ZGM0NGIuLjU4ODc0NDBkODQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9mb3JtYXR0aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdHRp bmcuYwpAQCAtMTAxMSwxMSArMTAxMSw2IEBAIHR5cGVkZWYgc3RydWN0IE5VTVByb2MKIAkJ CSAgICpMX2N1cnJlbmN5X3N5bWJvbDsKIH0gTlVNUHJvYzsKIAotLyogUmV0dXJuIGZsYWdz IGZvciBEQ0hfZnJvbV9jaGFyKCkgKi8KLSNkZWZpbmUgRENIX0RBVEVECTB4MDEKLSNkZWZp bmUgRENIX1RJTUVECTB4MDIKLSNkZWZpbmUgRENIX1pPTkVECTB4MDQKLQogLyogLS0tLS0t LS0tLQogICogRnVuY3Rpb25zCiAgKiAtLS0tLS0tLS0tCkBAIC02NjkxLDMgKzY2ODYsNDMg QEAgZmxvYXQ4X3RvX2NoYXIoUEdfRlVOQ1RJT05fQVJHUykKIAlOVU1fVE9DSEFSX2Zpbmlz aDsKIAlQR19SRVRVUk5fVEVYVF9QKHJlc3VsdCk7CiB9CisKK2ludAorZGF0ZXRpbWVfZm9y bWF0X2ZsYWdzKGNvbnN0IGNoYXIgKmZtdF9zdHIpCit7CisJYm9vbAkJaW5jYWNoZTsKKwlp bnQJCQlmbXRfbGVuID0gc3RybGVuKGZtdF9zdHIpOworCWludAkJCXJlc3VsdDsKKwlGb3Jt YXROb2RlICpmb3JtYXQ7CisKKwlpZiAoZm10X2xlbiA+IERDSF9DQUNIRV9TSVpFKQorCXsK KwkJLyoKKwkJICogQWxsb2NhdGUgbmV3IG1lbW9yeSBpZiBmb3JtYXQgcGljdHVyZSBpcyBi aWdnZXIgdGhhbiBzdGF0aWMgY2FjaGUKKwkJICogYW5kIGRvIG5vdCB1c2UgY2FjaGUgKGNh bGwgcGFyc2VyIGFsd2F5cykKKwkJICovCisJCWluY2FjaGUgPSBmYWxzZTsKKworCQlmb3Jt YXQgPSAoRm9ybWF0Tm9kZSAqKSBwYWxsb2MoKGZtdF9sZW4gKyAxKSAqIHNpemVvZihGb3Jt YXROb2RlKSk7CisKKwkJcGFyc2VfZm9ybWF0KGZvcm1hdCwgZm10X3N0ciwgRENIX2tleXdv cmRzLAorCQkJCQkgRENIX3N1ZmYsIERDSF9pbmRleCwgRENIX0ZMQUcsIE5VTEwpOworCX0K KwllbHNlCisJeworCQkvKgorCQkgKiBVc2UgY2FjaGUgYnVmZmVycworCQkgKi8KKwkJRENI Q2FjaGVFbnRyeSAqZW50ID0gRENIX2NhY2hlX2ZldGNoKGZtdF9zdHIsIGZhbHNlKTsKKwor CQlpbmNhY2hlID0gdHJ1ZTsKKwkJZm9ybWF0ID0gZW50LT5mb3JtYXQ7CisJfQorCisJcmVz dWx0ID0gRENIX2RhdGV0aW1lX3R5cGUoZm9ybWF0KTsKKworCWlmICghaW5jYWNoZSkKKwkJ cGZyZWUoZm9ybWF0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9hZHQvanNvbmIuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29u Yi5jCmluZGV4IDQ5ZjI5OTJiYmIuLjJkZGIzZDhhNTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9qc29uYi5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29u Yi5jCkBAIC0yMjQ3LDMgKzIyNDcsNjUgQEAganNvbmJfZmxvYXQ4KFBHX0ZVTkNUSU9OX0FS R1MpCiAKIAlQR19SRVRVUk5fREFUVU0ocmV0VmFsdWUpOwogfQorCisvKgorICogQ29uc3Ry dWN0IGFuIGVtcHR5IGFycmF5IGpzb25iLgorICovCitKc29uYiAqCitKc29uYk1ha2VFbXB0 eUFycmF5KHZvaWQpCit7CisJSnNvbmJWYWx1ZQlqYnY7CisKKwlqYnYudHlwZSA9IGpidkFy cmF5OworCWpidi52YWwuYXJyYXkuZWxlbXMgPSBOVUxMOworCWpidi52YWwuYXJyYXkubkVs ZW1zID0gMDsKKwlqYnYudmFsLmFycmF5LnJhd1NjYWxhciA9IGZhbHNlOworCisJcmV0dXJu IEpzb25iVmFsdWVUb0pzb25iKCZqYnYpOworfQorCisvKgorICogQ29uc3RydWN0IGFuIGVt cHR5IG9iamVjdCBqc29uYi4KKyAqLworSnNvbmIgKgorSnNvbmJNYWtlRW1wdHlPYmplY3Qo dm9pZCkKK3sKKwlKc29uYlZhbHVlCWpidjsKKworCWpidi50eXBlID0gamJ2T2JqZWN0Owor CWpidi52YWwub2JqZWN0LnBhaXJzID0gTlVMTDsKKwlqYnYudmFsLm9iamVjdC5uUGFpcnMg PSAwOworCisJcmV0dXJuIEpzb25iVmFsdWVUb0pzb25iKCZqYnYpOworfQorCisvKgorICog Q29udmVydCBqc29uYiB0byBhIEMtc3RyaW5nIHN0cmlwcGluZyBxdW90ZXMgZnJvbSBzY2Fs YXIgc3RyaW5ncy4KKyAqLworY2hhciAqCitKc29uYlVucXVvdGUoSnNvbmIgKmpiKQorewor CWlmIChKQl9ST09UX0lTX1NDQUxBUihqYikpCisJeworCQlKc29uYlZhbHVlCXY7CisKKwkJ KHZvaWQpIEpzb25iRXh0cmFjdFNjYWxhcigmamItPnJvb3QsICZ2KTsKKworCQlpZiAodi50 eXBlID09IGpidlN0cmluZykKKwkJCXJldHVybiBwbnN0cmR1cCh2LnZhbC5zdHJpbmcudmFs LCB2LnZhbC5zdHJpbmcubGVuKTsKKwkJZWxzZSBpZiAodi50eXBlID09IGpidkJvb2wpCisJ CQlyZXR1cm4gcHN0cmR1cCh2LnZhbC5ib29sZWFuID8gInRydWUiIDogImZhbHNlIik7CisJ CWVsc2UgaWYgKHYudHlwZSA9PSBqYnZOdW1lcmljKQorCQkJcmV0dXJuIERhdHVtR2V0Q1N0 cmluZyhEaXJlY3RGdW5jdGlvbkNhbGwxKG51bWVyaWNfb3V0LAorCQkJCQkJCQkJCQkJCSAg IFBvaW50ZXJHZXREYXR1bSh2LnZhbC5udW1lcmljKSkpOworCQllbHNlIGlmICh2LnR5cGUg PT0gamJ2TnVsbCkKKwkJCXJldHVybiBwc3RyZHVwKCJudWxsIik7CisJCWVsc2UKKwkJewor CQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBqc29uYiB2YWx1ZSB0eXBlICVkIiwgdi50 eXBlKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCWVsc2UKKwkJcmV0dXJuIEpzb25i VG9DU3RyaW5nKE5VTEwsICZqYi0+cm9vdCwgVkFSU0laRShqYikpOworfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2pzb25mdW5jcy5jCmluZGV4IDRjNWFiYWZmMjUuLmRjMjU1MzU0ZjAgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMKQEAgLTI2NCw2ICsyNjQsOCBAQCB0eXBlZGVm IHN0cnVjdCBQb3B1bGF0ZUFycmF5Q29udGV4dAogCWludAkJICAgKmRpbXM7CQkJLyogZGlt ZW5zaW9ucyAqLwogCWludAkJICAgKnNpemVzOwkJCS8qIGN1cnJlbnQgZGltZW5zaW9uIGNv dW50ZXJzICovCiAJaW50CQkJbmRpbXM7CQkJLyogbnVtYmVyIG9mIGRpbWVuc2lvbnMgKi8K KwlOb2RlCSAgICplc2NvbnRleHQ7CQkvKiBGb3Igc29mdC1lcnJvciBjYXB0dXJlICovCisJ Ym9vbAkJZXJyb3I7CQkJLyogQ2F1Z2h0IGEgc29mdC1lcnJvcj8gKi8KIH0gUG9wdWxhdGVB cnJheUNvbnRleHQ7CiAKIC8qIHN0YXRlIGZvciBwb3B1bGF0ZV9hcnJheV9qc29uKCkgKi8K QEAgLTQ0MSwxMiArNDQzLDEzIEBAIHN0YXRpYyB2b2lkIEpzVmFsdWVUb0pzT2JqZWN0KEpz VmFsdWUgKmpzdiwgSnNPYmplY3QgKmpzbyk7CiBzdGF0aWMgRGF0dW0gcG9wdWxhdGVfY29t cG9zaXRlKENvbXBvc2l0ZUlPRGF0YSAqaW8sIE9pZCB0eXBpZCwKIAkJCQkJCQkJY29uc3Qg Y2hhciAqY29sbmFtZSwgTWVtb3J5Q29udGV4dCBtY3h0LAogCQkJCQkJCQlIZWFwVHVwbGVI ZWFkZXIgZGVmYXVsdHZhbCwgSnNWYWx1ZSAqanN2LCBib29sIGlzbnVsbCk7Ci1zdGF0aWMg RGF0dW0gcG9wdWxhdGVfc2NhbGFyKFNjYWxhcklPRGF0YSAqaW8sIE9pZCB0eXBpZCwgaW50 MzIgdHlwbW9kLCBKc1ZhbHVlICpqc3YpOworc3RhdGljIERhdHVtIHBvcHVsYXRlX3NjYWxh cihTY2FsYXJJT0RhdGEgKmlvLCBPaWQgdHlwaWQsIGludDMyIHR5cG1vZCwgSnNWYWx1ZSAq anN2LAorCQkJCQkJCSBOb2RlICplc2NvbnRleHQpOwogc3RhdGljIHZvaWQgcHJlcGFyZV9j b2x1bW5fY2FjaGUoQ29sdW1uSU9EYXRhICpjb2x1bW4sIE9pZCB0eXBpZCwgaW50MzIgdHlw bW9kLAogCQkJCQkJCQkgTWVtb3J5Q29udGV4dCBtY3h0LCBib29sIG5lZWRfc2NhbGFyKTsK IHN0YXRpYyBEYXR1bSBwb3B1bGF0ZV9yZWNvcmRfZmllbGQoQ29sdW1uSU9EYXRhICpjb2ws IE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kLAogCQkJCQkJCQkgICBjb25zdCBjaGFyICpjb2xu YW1lLCBNZW1vcnlDb250ZXh0IG1jeHQsIERhdHVtIGRlZmF1bHR2YWwsCi0JCQkJCQkJCSAg IEpzVmFsdWUgKmpzdiwgYm9vbCAqaXNudWxsKTsKKwkJCQkJCQkJICAgSnNWYWx1ZSAqanN2 LCBib29sICppc251bGwsIE5vZGUgKmVzY29udGV4dCk7CiBzdGF0aWMgUmVjb3JkSU9EYXRh ICphbGxvY2F0ZV9yZWNvcmRfaW5mbyhNZW1vcnlDb250ZXh0IG1jeHQsIGludCBuY29sdW1u cyk7CiBzdGF0aWMgYm9vbCBKc09iamVjdEdldEZpZWxkKEpzT2JqZWN0ICpvYmosIGNoYXIg KmZpZWxkLCBKc1ZhbHVlICpqc3YpOwogc3RhdGljIHZvaWQgcG9wdWxhdGVfcmVjb3Jkc2V0 X3JlY29yZChQb3B1bGF0ZVJlY29yZHNldFN0YXRlICpzdGF0ZSwgSnNPYmplY3QgKm9iaik7 CkBAIC00NTgsNyArNDYxLDcgQEAgc3RhdGljIHZvaWQgcG9wdWxhdGVfYXJyYXlfYXNzaWdu X25kaW1zKFBvcHVsYXRlQXJyYXlDb250ZXh0ICpjdHgsIGludCBuZGltcyk7CiBzdGF0aWMg dm9pZCBwb3B1bGF0ZV9hcnJheV9jaGVja19kaW1lbnNpb24oUG9wdWxhdGVBcnJheUNvbnRl eHQgKmN0eCwgaW50IG5kaW0pOwogc3RhdGljIHZvaWQgcG9wdWxhdGVfYXJyYXlfZWxlbWVu dChQb3B1bGF0ZUFycmF5Q29udGV4dCAqY3R4LCBpbnQgbmRpbSwgSnNWYWx1ZSAqanN2KTsK IHN0YXRpYyBEYXR1bSBwb3B1bGF0ZV9hcnJheShBcnJheUlPRGF0YSAqYWlvLCBjb25zdCBj aGFyICpjb2xuYW1lLAotCQkJCQkJCU1lbW9yeUNvbnRleHQgbWN4dCwgSnNWYWx1ZSAqanN2 KTsKKwkJCQkJCQlNZW1vcnlDb250ZXh0IG1jeHQsIEpzVmFsdWUgKmpzdiwgTm9kZSAqZXNj b250ZXh0KTsKIHN0YXRpYyBEYXR1bSBwb3B1bGF0ZV9kb21haW4oRG9tYWluSU9EYXRhICpp bywgT2lkIHR5cGlkLCBjb25zdCBjaGFyICpjb2xuYW1lLAogCQkJCQkJCSBNZW1vcnlDb250 ZXh0IG1jeHQsIEpzVmFsdWUgKmpzdiwgYm9vbCBpc251bGwpOwogCkBAIC0yNDgzLDEyICsy NDg2LDEyIEBAIHBvcHVsYXRlX2FycmF5X3JlcG9ydF9leHBlY3RlZF9hcnJheShQb3B1bGF0 ZUFycmF5Q29udGV4dCAqY3R4LCBpbnQgbmRpbSkKIAlpZiAobmRpbSA8PSAwKQogCXsKIAkJ aWYgKGN0eC0+Y29sbmFtZSkKLQkJCWVyZXBvcnQoRVJST1IsCisJCQllcnJzYXZlKGN0eC0+ ZXNjb250ZXh0LAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfVEVYVF9SRVBSRVNF TlRBVElPTiksCiAJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gYXJyYXkiKSwKIAkJCQkJ IGVycmhpbnQoIlNlZSB0aGUgdmFsdWUgb2Yga2V5IFwiJXNcIi4iLCBjdHgtPmNvbG5hbWUp KSk7CiAJCWVsc2UKLQkJCWVyZXBvcnQoRVJST1IsCisJCQllcnJzYXZlKGN0eC0+ZXNjb250 ZXh0LAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfVEVYVF9SRVBSRVNFTlRBVElP TiksCiAJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gYXJyYXkiKSkpOwogCX0KQEAgLTI1 MDUsMTggKzI1MDgsMjAgQEAgcG9wdWxhdGVfYXJyYXlfcmVwb3J0X2V4cGVjdGVkX2FycmF5 KFBvcHVsYXRlQXJyYXlDb250ZXh0ICpjdHgsIGludCBuZGltKQogCQkJYXBwZW5kU3RyaW5n SW5mbygmaW5kaWNlcywgIlslZF0iLCBjdHgtPnNpemVzW2ldKTsKIAogCQlpZiAoY3R4LT5j b2xuYW1lKQotCQkJZXJlcG9ydChFUlJPUiwKKwkJCWVycnNhdmUoY3R4LT5lc2NvbnRleHQs CiAJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9URVhUX1JFUFJFU0VOVEFUSU9OKSwK IAkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBhcnJheSIpLAogCQkJCQkgZXJyaGludCgi U2VlIHRoZSBhcnJheSBlbGVtZW50ICVzIG9mIGtleSBcIiVzXCIuIiwKIAkJCQkJCQkgaW5k aWNlcy5kYXRhLCBjdHgtPmNvbG5hbWUpKSk7CiAJCWVsc2UKLQkJCWVyZXBvcnQoRVJST1Is CisJCQllcnJzYXZlKGN0eC0+ZXNjb250ZXh0LAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfVEVYVF9SRVBSRVNFTlRBVElPTiksCiAJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpT T04gYXJyYXkiKSwKIAkJCQkJIGVycmhpbnQoIlNlZSB0aGUgYXJyYXkgZWxlbWVudCAlcy4i LAogCQkJCQkJCSBpbmRpY2VzLmRhdGEpKSk7CiAJfQorCisJY3R4LT5lcnJvciA9IFNPRlRf RVJST1JfT0NDVVJSRUQoY3R4LT5lc2NvbnRleHQpOwogfQogCiAvKiBzZXQgdGhlIG51bWJl ciBvZiBkaW1lbnNpb25zIG9mIHRoZSBwb3B1bGF0ZWQgYXJyYXkgd2hlbiBpdCBiZWNvbWVz IGtub3duICovCkBAIC0yNTMwLDYgKzI1MzUsOSBAQCBwb3B1bGF0ZV9hcnJheV9hc3NpZ25f bmRpbXMoUG9wdWxhdGVBcnJheUNvbnRleHQgKmN0eCwgaW50IG5kaW1zKQogCWlmIChuZGlt cyA8PSAwKQogCQlwb3B1bGF0ZV9hcnJheV9yZXBvcnRfZXhwZWN0ZWRfYXJyYXkoY3R4LCBu ZGltcyk7CiAKKwlpZiAoY3R4LT5lcnJvcikKKwkJcmV0dXJuOworCiAJY3R4LT5uZGltcyA9 IG5kaW1zOwogCWN0eC0+ZGltcyA9IHBhbGxvYyhzaXplb2YoaW50KSAqIG5kaW1zKTsKIAlj dHgtPnNpemVzID0gcGFsbG9jMChzaXplb2YoaW50KSAqIG5kaW1zKTsKQEAgLTI1NDcsNyAr MjU1NSw3IEBAIHBvcHVsYXRlX2FycmF5X2NoZWNrX2RpbWVuc2lvbihQb3B1bGF0ZUFycmF5 Q29udGV4dCAqY3R4LCBpbnQgbmRpbSkKIAlpZiAoY3R4LT5kaW1zW25kaW1dID09IC0xKQog CQljdHgtPmRpbXNbbmRpbV0gPSBkaW07CS8qIGFzc2lnbiBkaW1lbnNpb24gaWYgbm90IHll dCBrbm93biAqLwogCWVsc2UgaWYgKGN0eC0+ZGltc1tuZGltXSAhPSBkaW0pCi0JCWVyZXBv cnQoRVJST1IsCisJCWVycnNhdmUoY3R4LT5lc2NvbnRleHQsCiAJCQkJKGVycmNvZGUoRVJS Q09ERV9JTlZBTElEX1RFWFRfUkVQUkVTRU5UQVRJT04pLAogCQkJCSBlcnJtc2coIm1hbGZv cm1lZCBKU09OIGFycmF5IiksCiAJCQkJIGVycmRldGFpbCgiTXVsdGlkaW1lbnNpb25hbCBh cnJheXMgbXVzdCBoYXZlICIKQEAgLTI1NzIsNyArMjU4MCw3IEBAIHBvcHVsYXRlX2FycmF5 X2VsZW1lbnQoUG9wdWxhdGVBcnJheUNvbnRleHQgKmN0eCwgaW50IG5kaW0sIEpzVmFsdWUg KmpzdikKIAkJCQkJCQkJCWN0eC0+YWlvLT5lbGVtZW50X3R5cGUsCiAJCQkJCQkJCQljdHgt PmFpby0+ZWxlbWVudF90eXBtb2QsCiAJCQkJCQkJCQlOVUxMLCBjdHgtPm1jeHQsIFBvaW50 ZXJHZXREYXR1bShOVUxMKSwKLQkJCQkJCQkJCWpzdiwgJmVsZW1lbnRfaXNudWxsKTsKKwkJ CQkJCQkJCWpzdiwgJmVsZW1lbnRfaXNudWxsLCBOVUxMKTsKIAogCWFjY3VtQXJyYXlSZXN1 bHQoY3R4LT5hc3RhdGUsIGVsZW1lbnQsIGVsZW1lbnRfaXNudWxsLAogCQkJCQkgY3R4LT5h aW8tPmVsZW1lbnRfdHlwZSwgY3R4LT5hY3h0KTsKQEAgLTI3MTQsNyArMjcyMiw3IEBAIHBv cHVsYXRlX2FycmF5X2pzb24oUG9wdWxhdGVBcnJheUNvbnRleHQgKmN0eCwgY2hhciAqanNv biwgaW50IGxlbikKIAlzZW0uYXJyYXlfZWxlbWVudF9lbmQgPSBwb3B1bGF0ZV9hcnJheV9l bGVtZW50X2VuZDsKIAlzZW0uc2NhbGFyID0gcG9wdWxhdGVfYXJyYXlfc2NhbGFyOwogCi0J cGdfcGFyc2VfanNvbl9vcl9lcmVwb3J0KHN0YXRlLmxleCwgJnNlbSk7CisJcGdfcGFyc2Vf anNvbl9vcl9lcnJzYXZlKHN0YXRlLmxleCwgJnNlbSwgY3R4LT5lc2NvbnRleHQpOwogCiAJ LyogbnVtYmVyIG9mIGRpbWVuc2lvbnMgc2hvdWxkIGJlIGFscmVhZHkga25vd24gKi8KIAlB c3NlcnQoY3R4LT5uZGltcyA+IDAgJiYgY3R4LT5kaW1zKTsKQEAgLTI3MzksMTAgKzI3NDcs MTMgQEAgcG9wdWxhdGVfYXJyYXlfZGltX2pzb25iKFBvcHVsYXRlQXJyYXlDb250ZXh0ICpj dHgsIC8qIGNvbnRleHQgKi8KIAogCWNoZWNrX3N0YWNrX2RlcHRoKCk7CiAKLQlpZiAoamJ2 LT50eXBlICE9IGpidkJpbmFyeSB8fCAhSnNvbkNvbnRhaW5lcklzQXJyYXkoamJjKSkKKwlp ZiAoamJ2LT50eXBlICE9IGpidkJpbmFyeSB8fAorCQkhSnNvbkNvbnRhaW5lcklzQXJyYXko amJjKSB8fAorCQlKc29uQ29udGFpbmVySXNTY2FsYXIoamJjKSkKIAkJcG9wdWxhdGVfYXJy YXlfcmVwb3J0X2V4cGVjdGVkX2FycmF5KGN0eCwgbmRpbSAtIDEpOwogCi0JQXNzZXJ0KCFK c29uQ29udGFpbmVySXNTY2FsYXIoamJjKSk7CisJaWYgKGN0eC0+ZXJyb3IpCisJCXJldHVy bjsKIAogCWl0ID0gSnNvbmJJdGVyYXRvckluaXQoamJjKTsKIApAQCAtMjc4MCw2ICsyNzkx LDkgQEAgcG9wdWxhdGVfYXJyYXlfZGltX2pzb25iKFBvcHVsYXRlQXJyYXlDb250ZXh0ICpj dHgsIC8qIGNvbnRleHQgKi8KIAkJCS8qIHBvcHVsYXRlIGNoaWxkIHN1Yi1hcnJheSAqLwog CQkJcG9wdWxhdGVfYXJyYXlfZGltX2pzb25iKGN0eCwgJnZhbCwgbmRpbSArIDEpOwogCisJ CQlpZiAoY3R4LT5lcnJvcikKKwkJCQlyZXR1cm47CisKIAkJCS8qIG51bWJlciBvZiBkaW1l bnNpb25zIHNob3VsZCBiZSBhbHJlYWR5IGtub3duICovCiAJCQlBc3NlcnQoY3R4LT5uZGlt cyA+IDAgJiYgY3R4LT5kaW1zKTsKIApAQCAtMjgwMSw3ICsyODE1LDggQEAgc3RhdGljIERh dHVtCiBwb3B1bGF0ZV9hcnJheShBcnJheUlPRGF0YSAqYWlvLAogCQkJICAgY29uc3QgY2hh ciAqY29sbmFtZSwKIAkJCSAgIE1lbW9yeUNvbnRleHQgbWN4dCwKLQkJCSAgIEpzVmFsdWUg KmpzdikKKwkJCSAgIEpzVmFsdWUgKmpzdiwKKwkJCSAgIE5vZGUgKmVzY29udGV4dCkKIHsK IAlQb3B1bGF0ZUFycmF5Q29udGV4dCBjdHg7CiAJRGF0dW0JCXJlc3VsdDsKQEAgLTI4MTYs NiArMjgzMSw4IEBAIHBvcHVsYXRlX2FycmF5KEFycmF5SU9EYXRhICphaW8sCiAJY3R4Lm5k aW1zID0gMDsJCQkJLyogdW5rbm93biB5ZXQgKi8KIAljdHguZGltcyA9IE5VTEw7CiAJY3R4 LnNpemVzID0gTlVMTDsKKwljdHguZXNjb250ZXh0ID0gZXNjb250ZXh0OworCWN0eC5lcnJv ciA9IGZhbHNlOwogCiAJaWYgKGpzdi0+aXNfanNvbikKIAkJcG9wdWxhdGVfYXJyYXlfanNv bigmY3R4LCBqc3YtPnZhbC5qc29uLnN0ciwKQEAgLTI4MjQsOSArMjg0MSwxNCBAQCBwb3B1 bGF0ZV9hcnJheShBcnJheUlPRGF0YSAqYWlvLAogCWVsc2UKIAl7CiAJCXBvcHVsYXRlX2Fy cmF5X2RpbV9qc29uYigmY3R4LCBqc3YtPnZhbC5qc29uYiwgMSk7Ci0JCWN0eC5kaW1zWzBd ID0gY3R4LnNpemVzWzBdOworCQlpZiAoIWN0eC5lcnJvcikKKwkJCWN0eC5kaW1zWzBdID0g Y3R4LnNpemVzWzBdOwogCX0KIAorCS8qIENhbGxlciBzaG91bGQgY2hlY2sgU09GVF9FUlJP Ul9PQ0NVUlJFRChlc2NvbnRleHQpISAqLworCWlmIChjdHguZXJyb3IpCisJCXJldHVybiAo RGF0dW0pIDA7CisKIAlBc3NlcnQoY3R4Lm5kaW1zID4gMCk7CiAKIAlsYnMgPSBwYWxsb2Mo c2l6ZW9mKGludCkgKiBjdHgubmRpbXMpOwpAQCAtMjk1Niw3ICsyOTc4LDggQEAgcG9wdWxh dGVfY29tcG9zaXRlKENvbXBvc2l0ZUlPRGF0YSAqaW8sCiAKIC8qIHBvcHVsYXRlIG5vbi1u dWxsIHNjYWxhciB2YWx1ZSBmcm9tIGpzb24vanNvbmIgdmFsdWUgKi8KIHN0YXRpYyBEYXR1 bQotcG9wdWxhdGVfc2NhbGFyKFNjYWxhcklPRGF0YSAqaW8sIE9pZCB0eXBpZCwgaW50MzIg dHlwbW9kLCBKc1ZhbHVlICpqc3YpCitwb3B1bGF0ZV9zY2FsYXIoU2NhbGFySU9EYXRhICpp bywgT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsIEpzVmFsdWUgKmpzdiwKKwkJCQlOb2RlICpl c2NvbnRleHQpCiB7CiAJRGF0dW0JCXJlczsKIAljaGFyCSAgICpzdHIgPSBOVUxMOwpAQCAt MzAyNyw3ICszMDUwLDExIEBAIHBvcHVsYXRlX3NjYWxhcihTY2FsYXJJT0RhdGEgKmlvLCBP aWQgdHlwaWQsIGludDMyIHR5cG1vZCwgSnNWYWx1ZSAqanN2KQogCQkJZWxvZyhFUlJPUiwg InVucmVjb2duaXplZCBqc29uYiB0eXBlOiAlZCIsIChpbnQpIGpidi0+dHlwZSk7CiAJfQog Ci0JcmVzID0gSW5wdXRGdW5jdGlvbkNhbGwoJmlvLT50eXBpb2Z1bmMsIHN0ciwgaW8tPnR5 cGlvcGFyYW0sIHR5cG1vZCk7CisJaWYgKCFJbnB1dEZ1bmN0aW9uQ2FsbFNhZmUoJmlvLT50 eXBpb2Z1bmMsIHN0ciwgaW8tPnR5cGlvcGFyYW0sIHR5cG1vZCwKKwkJCQkJCQkgICBlc2Nv bnRleHQsICZyZXMpKQorCXsKKwkJcmVzID0gKERhdHVtKSAwOworCX0KIAogCS8qIGZyZWUg dGVtcG9yYXJ5IGJ1ZmZlciAqLwogCWlmIChzdHIgIT0ganNvbikKQEAgLTMwNTMsNyArMzA4 MCw3IEBAIHBvcHVsYXRlX2RvbWFpbihEb21haW5JT0RhdGEgKmlvLAogCQlyZXMgPSBwb3B1 bGF0ZV9yZWNvcmRfZmllbGQoaW8tPmJhc2VfaW8sCiAJCQkJCQkJCQlpby0+YmFzZV90eXBp ZCwgaW8tPmJhc2VfdHlwbW9kLAogCQkJCQkJCQkJY29sbmFtZSwgbWN4dCwgUG9pbnRlckdl dERhdHVtKE5VTEwpLAotCQkJCQkJCQkJanN2LCAmaXNudWxsKTsKKwkJCQkJCQkJCWpzdiwg JmlzbnVsbCwgTlVMTCk7CiAJCUFzc2VydCghaXNudWxsKTsKIAl9CiAKQEAgLTMxNTgsNyAr MzE4NSw4IEBAIHBvcHVsYXRlX3JlY29yZF9maWVsZChDb2x1bW5JT0RhdGEgKmNvbCwKIAkJ CQkJICBNZW1vcnlDb250ZXh0IG1jeHQsCiAJCQkJCSAgRGF0dW0gZGVmYXVsdHZhbCwKIAkJ CQkJICBKc1ZhbHVlICpqc3YsCi0JCQkJCSAgYm9vbCAqaXNudWxsKQorCQkJCQkgIGJvb2wg KmlzbnVsbCwKKwkJCQkJICBOb2RlICplc2NvbnRleHQpCiB7CiAJVHlwZUNhdAkJdHlwY2F0 OwogCkBAIC0zMTkxLDEwICszMjE5LDEyIEBAIHBvcHVsYXRlX3JlY29yZF9maWVsZChDb2x1 bW5JT0RhdGEgKmNvbCwKIAlzd2l0Y2ggKHR5cGNhdCkKIAl7CiAJCWNhc2UgVFlQRUNBVF9T Q0FMQVI6Ci0JCQlyZXR1cm4gcG9wdWxhdGVfc2NhbGFyKCZjb2wtPnNjYWxhcl9pbywgdHlw aWQsIHR5cG1vZCwganN2KTsKKwkJCXJldHVybiBwb3B1bGF0ZV9zY2FsYXIoJmNvbC0+c2Nh bGFyX2lvLCB0eXBpZCwgdHlwbW9kLCBqc3YsCisJCQkJCQkJCSAgIGVzY29udGV4dCk7CiAK IAkJY2FzZSBUWVBFQ0FUX0FSUkFZOgotCQkJcmV0dXJuIHBvcHVsYXRlX2FycmF5KCZjb2wt PmlvLmFycmF5LCBjb2xuYW1lLCBtY3h0LCBqc3YpOworCQkJcmV0dXJuIHBvcHVsYXRlX2Fy cmF5KCZjb2wtPmlvLmFycmF5LCBjb2xuYW1lLCBtY3h0LCBqc3YsCisJCQkJCQkJCSAgZXNj b250ZXh0KTsKIAogCQljYXNlIFRZUEVDQVRfQ09NUE9TSVRFOgogCQljYXNlIFRZUEVDQVRf Q09NUE9TSVRFX0RPTUFJTjoKQEAgLTMyMTUsNiArMzI0NSw1MyBAQCBwb3B1bGF0ZV9yZWNv cmRfZmllbGQoQ29sdW1uSU9EYXRhICpjb2wsCiAJfQogfQogCisvKiByZWN1cnNpdmVseSBw b3B1bGF0ZSBzcGVjaWZpZWQgdHlwZSBmcm9tIGEganNvbi9qc29uYiB2YWx1ZSAqLworRGF0 dW0KK2pzb25fcG9wdWxhdGVfdHlwZShEYXR1bSBqc29uX3ZhbCwgT2lkIGpzb25fdHlwZSwg T2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsCisJCQkJICAgdm9pZCAqKmNhY2hlLCBNZW1vcnlD b250ZXh0IG1jeHQsIGJvb2wgKmlzbnVsbCwKKwkJCQkgICBOb2RlICplc2NvbnRleHQpCit7 CisJSnNWYWx1ZQkJanN2ID0gezB9OworCUpzb25iVmFsdWUJamJ2OworCisJanN2LmlzX2pz b24gPSBqc29uX3R5cGUgPT0gSlNPTk9JRDsKKworCWlmICgqaXNudWxsKQorCXsKKwkJaWYg KGpzdi5pc19qc29uKQorCQkJanN2LnZhbC5qc29uLnN0ciA9IE5VTEw7CisJCWVsc2UKKwkJ CWpzdi52YWwuanNvbmIgPSBOVUxMOworCX0KKwllbHNlIGlmIChqc3YuaXNfanNvbikKKwl7 CisJCXRleHQJICAgKmpzb24gPSBEYXR1bUdldFRleHRQUChqc29uX3ZhbCk7CisKKwkJanN2 LnZhbC5qc29uLnN0ciA9IFZBUkRBVEFfQU5ZKGpzb24pOworCQlqc3YudmFsLmpzb24ubGVu ID0gVkFSU0laRV9BTllfRVhIRFIoanNvbik7CisJCWpzdi52YWwuanNvbi50eXBlID0gSlNP Tl9UT0tFTl9JTlZBTElEOyAvKiBub3QgdXNlZCBpbgorCQkJCQkJCQkJCQkJICogcG9wdWxh dGVfY29tcG9zaXRlKCkgKi8KKwl9CisJZWxzZQorCXsKKwkJSnNvbmIJICAgKmpzb25iID0g RGF0dW1HZXRKc29uYlAoanNvbl92YWwpOworCisJCWpzdi52YWwuanNvbmIgPSAmamJ2Owor CisJCS8qIGZpbGwgYmluYXJ5IGpzb25iIHZhbHVlIHBvaW50aW5nIHRvIGpiICovCisJCWpi di50eXBlID0gamJ2QmluYXJ5OworCQlqYnYudmFsLmJpbmFyeS5kYXRhID0gJmpzb25iLT5y b290OworCQlqYnYudmFsLmJpbmFyeS5sZW4gPSBWQVJTSVpFKGpzb25iKSAtIFZBUkhEUlNa OworCX0KKworCWlmICghKmNhY2hlKQorCQkqY2FjaGUgPSBNZW1vcnlDb250ZXh0QWxsb2Na ZXJvKG1jeHQsIHNpemVvZihDb2x1bW5JT0RhdGEpKTsKKworCXJldHVybiBwb3B1bGF0ZV9y ZWNvcmRfZmllbGQoKmNhY2hlLCB0eXBpZCwgdHlwbW9kLCBOVUxMLCBtY3h0LAorCQkJCQkJ CQkgUG9pbnRlckdldERhdHVtKE5VTEwpLCAmanN2LCBpc251bGwsCisJCQkJCQkJCSBlc2Nv bnRleHQpOworfQorCiBzdGF0aWMgUmVjb3JkSU9EYXRhICoKIGFsbG9jYXRlX3JlY29yZF9p bmZvKE1lbW9yeUNvbnRleHQgbWN4dCwgaW50IG5jb2x1bW5zKQogewpAQCAtMzM1Niw3ICsz NDMzLDggQEAgcG9wdWxhdGVfcmVjb3JkKFR1cGxlRGVzYyB0dXBkZXNjLAogCQkJCQkJCQkJ CSAgbWN4dCwKIAkJCQkJCQkJCQkgIG51bGxzW2ldID8gKERhdHVtKSAwIDogdmFsdWVzW2ld LAogCQkJCQkJCQkJCSAgJmZpZWxkLAotCQkJCQkJCQkJCSAgJm51bGxzW2ldKTsKKwkJCQkJ CQkJCQkgICZudWxsc1tpXSwKKwkJCQkJCQkJCQkgIE5VTEwpOwogCX0KIAogCXJlcyA9IGhl YXBfZm9ybV90dXBsZSh0dXBkZXNjLCB2YWx1ZXMsIG51bGxzKTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2pzb25wYXRoLmMKaW5kZXggMDAyMWIwMTgzMC4uNWE5YmUxYzhhOSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2pzb25wYXRoLmMKQEAgLTY4LDcgKzY4LDkgQEAKICNpbmNsdWRlICJsaWJwcS9w cWZvcm1hdC5oIgogI2luY2x1ZGUgIm5vZGVzL21pc2Nub2Rlcy5oIgogI2luY2x1ZGUgIm1p c2NhZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgogI2luY2x1ZGUgInV0 aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZm9ybWF0dGluZy5oIgogI2luY2x1 ZGUgInV0aWxzL2pzb24uaCIKICNpbmNsdWRlICJ1dGlscy9qc29ucGF0aC5oIgogCkBAIC0x MTA5LDMgKzExMTEsMjU4IEBAIGpzcEdldEFycmF5U3Vic2NyaXB0KEpzb25QYXRoSXRlbSAq diwgSnNvblBhdGhJdGVtICpmcm9tLCBKc29uUGF0aEl0ZW0gKnRvLAogCiAJcmV0dXJuIHRy dWU7CiB9CisKKy8qIFNRTC9KU09OIGRhdGF0eXBlIHN0YXR1czogKi8KK3R5cGVkZWYgZW51 bSBKc29uUGF0aERhdGF0eXBlU3RhdHVzCit7CisJanBkc05vbkRhdGVUaW1lLAkJCS8qIG51 bGwsIGJvb2wsIG51bWVyaWMsIHN0cmluZywgYXJyYXksIG9iamVjdCAqLworCWpwZHNVbmtu b3duRGF0ZVRpbWUsCQkvKiB1bmtub3duIGRhdGV0aW1lIHR5cGUgKi8KKwlqcGRzRGF0ZVRp bWVab25lZCwJCQkvKiB0aW1ldHosIHRpbWVzdGFtcHR6ICovCisJanBkc0RhdGVUaW1lTm9u Wm9uZWQJCS8qIHRpbWUsIHRpbWVzdGFtcCwgZGF0ZSAqLworfSBKc29uUGF0aERhdGF0eXBl U3RhdHVzOworCisvKiBDb250ZXh0IGZvciBqc3BJc011dGFibGVXYWxrZXIoKSAqLwordHlw ZWRlZiBzdHJ1Y3QgSnNvblBhdGhNdXRhYmxlQ29udGV4dAoreworCUxpc3QJICAgKnZhcm5h bWVzOwkJLyogbGlzdCBvZiB2YXJpYWJsZSBuYW1lcyAqLworCUxpc3QJICAgKnZhcmV4cHJz OwkJLyogbGlzdCBvZiB2YXJpYWJsZSBleHByZXNzaW9ucyAqLworCUpzb25QYXRoRGF0YXR5 cGVTdGF0dXMgY3VycmVudDsgLyogc3RhdHVzIG9mIEAgaXRlbSAqLworCWJvb2wJCWxheDsJ CQkvKiBqc29ucGF0aCBpcyBsYXggb3Igc3RyaWN0ICovCisJYm9vbAkJbXV0YWJsZTsJCS8q IHJlc3VsdGluZyBtdXRhYmlsaXR5IHN0YXR1cyAqLworfSBKc29uUGF0aE11dGFibGVDb250 ZXh0OworCisvKgorICogUmVjdXJzaXZlIHdhbGtlciBmb3IganNwSXNNdXRhYmxlKCkKKyAq Lworc3RhdGljIEpzb25QYXRoRGF0YXR5cGVTdGF0dXMKK2pzcElzTXV0YWJsZVdhbGtlcihK c29uUGF0aEl0ZW0gKmpwaSwgSnNvblBhdGhNdXRhYmxlQ29udGV4dCAqY3h0KQoreworCUpz b25QYXRoSXRlbSBuZXh0OworCUpzb25QYXRoRGF0YXR5cGVTdGF0dXMgc3RhdHVzID0ganBk c05vbkRhdGVUaW1lOworCisJd2hpbGUgKCFjeHQtPm11dGFibGUpCisJeworCQlKc29uUGF0 aEl0ZW0gYXJnOworCQlKc29uUGF0aERhdGF0eXBlU3RhdHVzIGxlZnRTdGF0dXM7CisJCUpz b25QYXRoRGF0YXR5cGVTdGF0dXMgcmlnaHRTdGF0dXM7CisKKwkJc3dpdGNoIChqcGktPnR5 cGUpCisJCXsKKwkJCWNhc2UganBpUm9vdDoKKwkJCQlBc3NlcnQoc3RhdHVzID09IGpwZHNO b25EYXRlVGltZSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UganBpQ3VycmVudDoKKwkJCQlB c3NlcnQoc3RhdHVzID09IGpwZHNOb25EYXRlVGltZSk7CisJCQkJc3RhdHVzID0gY3h0LT5j dXJyZW50OworCQkJCWJyZWFrOworCisJCQljYXNlIGpwaUZpbHRlcjoKKwkJCQl7CisJCQkJ CUpzb25QYXRoRGF0YXR5cGVTdGF0dXMgcHJldlN0YXR1cyA9IGN4dC0+Y3VycmVudDsKKwor CQkJCQljeHQtPmN1cnJlbnQgPSBzdGF0dXM7CisJCQkJCWpzcEdldEFyZyhqcGksICZhcmcp OworCQkJCQlqc3BJc011dGFibGVXYWxrZXIoJmFyZywgY3h0KTsKKworCQkJCQljeHQtPmN1 cnJlbnQgPSBwcmV2U3RhdHVzOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCWNhc2UganBp VmFyaWFibGU6CisJCQkJeworCQkJCQlpbnQzMgkJbGVuOworCQkJCQljb25zdCBjaGFyICpu YW1lID0ganNwR2V0U3RyaW5nKGpwaSwgJmxlbik7CisJCQkJCUxpc3RDZWxsICAgKmxjMTsK KwkJCQkJTGlzdENlbGwgICAqbGMyOworCisJCQkJCUFzc2VydChzdGF0dXMgPT0ganBkc05v bkRhdGVUaW1lKTsKKworCQkJCQlmb3Jib3RoKGxjMSwgY3h0LT52YXJuYW1lcywgbGMyLCBj eHQtPnZhcmV4cHJzKQorCQkJCQl7CisJCQkJCQlTdHJpbmcJICAgKnZhcm5hbWUgPSBsZmly c3Rfbm9kZShTdHJpbmcsIGxjMSk7CisJCQkJCQlOb2RlCSAgICp2YXJleHByID0gbGZpcnN0 KGxjMik7CisKKwkJCQkJCWlmIChzdHJuY21wKHZhcm5hbWUtPnN2YWwsIG5hbWUsIGxlbikp CisJCQkJCQkJY29udGludWU7CisKKwkJCQkJCXN3aXRjaCAoZXhwclR5cGUodmFyZXhwcikp CisJCQkJCQl7CisJCQkJCQkJY2FzZSBEQVRFT0lEOgorCQkJCQkJCWNhc2UgVElNRU9JRDoK KwkJCQkJCQljYXNlIFRJTUVTVEFNUE9JRDoKKwkJCQkJCQkJc3RhdHVzID0ganBkc0RhdGVU aW1lTm9uWm9uZWQ7CisJCQkJCQkJCWJyZWFrOworCisJCQkJCQkJY2FzZSBUSU1FVFpPSUQ6 CisJCQkJCQkJY2FzZSBUSU1FU1RBTVBUWk9JRDoKKwkJCQkJCQkJc3RhdHVzID0ganBkc0Rh dGVUaW1lWm9uZWQ7CisJCQkJCQkJCWJyZWFrOworCisJCQkJCQkJZGVmYXVsdDoKKwkJCQkJ CQkJc3RhdHVzID0ganBkc05vbkRhdGVUaW1lOworCQkJCQkJCQlicmVhazsKKwkJCQkJCX0K KworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNl IGpwaUVxdWFsOgorCQkJY2FzZSBqcGlOb3RFcXVhbDoKKwkJCWNhc2UganBpTGVzczoKKwkJ CWNhc2UganBpR3JlYXRlcjoKKwkJCWNhc2UganBpTGVzc09yRXF1YWw6CisJCQljYXNlIGpw aUdyZWF0ZXJPckVxdWFsOgorCQkJCUFzc2VydChzdGF0dXMgPT0ganBkc05vbkRhdGVUaW1l KTsKKwkJCQlqc3BHZXRMZWZ0QXJnKGpwaSwgJmFyZyk7CisJCQkJbGVmdFN0YXR1cyA9IGpz cElzTXV0YWJsZVdhbGtlcigmYXJnLCBjeHQpOworCisJCQkJanNwR2V0UmlnaHRBcmcoanBp LCAmYXJnKTsKKwkJCQlyaWdodFN0YXR1cyA9IGpzcElzTXV0YWJsZVdhbGtlcigmYXJnLCBj eHQpOworCisJCQkJLyoKKwkJCQkgKiBDb21wYXJpc29uIG9mIGRhdGV0aW1lIHR5cGUgd2l0 aCBkaWZmZXJlbnQgdGltZXpvbmUgc3RhdHVzCisJCQkJICogaXMgbXV0YWJsZS4KKwkJCQkg Ki8KKwkJCQlpZiAobGVmdFN0YXR1cyAhPSBqcGRzTm9uRGF0ZVRpbWUgJiYKKwkJCQkJcmln aHRTdGF0dXMgIT0ganBkc05vbkRhdGVUaW1lICYmCisJCQkJCShsZWZ0U3RhdHVzID09IGpw ZHNVbmtub3duRGF0ZVRpbWUgfHwKKwkJCQkJIHJpZ2h0U3RhdHVzID09IGpwZHNVbmtub3du RGF0ZVRpbWUgfHwKKwkJCQkJIGxlZnRTdGF0dXMgIT0gcmlnaHRTdGF0dXMpKQorCQkJCQlj eHQtPm11dGFibGUgPSB0cnVlOworCQkJCWJyZWFrOworCisJCQljYXNlIGpwaU5vdDoKKwkJ CWNhc2UganBpSXNVbmtub3duOgorCQkJY2FzZSBqcGlFeGlzdHM6CisJCQljYXNlIGpwaVBs dXM6CisJCQljYXNlIGpwaU1pbnVzOgorCQkJCUFzc2VydChzdGF0dXMgPT0ganBkc05vbkRh dGVUaW1lKTsKKwkJCQlqc3BHZXRBcmcoanBpLCAmYXJnKTsKKwkJCQlqc3BJc011dGFibGVX YWxrZXIoJmFyZywgY3h0KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBqcGlBbmQ6CisJCQlj YXNlIGpwaU9yOgorCQkJY2FzZSBqcGlBZGQ6CisJCQljYXNlIGpwaVN1YjoKKwkJCWNhc2Ug anBpTXVsOgorCQkJY2FzZSBqcGlEaXY6CisJCQljYXNlIGpwaU1vZDoKKwkJCWNhc2UganBp U3RhcnRzV2l0aDoKKwkJCQlBc3NlcnQoc3RhdHVzID09IGpwZHNOb25EYXRlVGltZSk7CisJ CQkJanNwR2V0TGVmdEFyZyhqcGksICZhcmcpOworCQkJCWpzcElzTXV0YWJsZVdhbGtlcigm YXJnLCBjeHQpOworCQkJCWpzcEdldFJpZ2h0QXJnKGpwaSwgJmFyZyk7CisJCQkJanNwSXNN dXRhYmxlV2Fsa2VyKCZhcmcsIGN4dCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UganBpSW5k ZXhBcnJheToKKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IGpwaS0+Y29udGVudC5hcnJheS5u ZWxlbXM7IGkrKykKKwkJCQl7CisJCQkJCUpzb25QYXRoSXRlbSBmcm9tOworCQkJCQlKc29u UGF0aEl0ZW0gdG87CisKKwkJCQkJaWYgKGpzcEdldEFycmF5U3Vic2NyaXB0KGpwaSwgJmZy b20sICZ0bywgaSkpCisJCQkJCQlqc3BJc011dGFibGVXYWxrZXIoJnRvLCBjeHQpOworCisJ CQkJCWpzcElzTXV0YWJsZVdhbGtlcigmZnJvbSwgY3h0KTsKKwkJCQl9CisJCQkJLyogRkFM TFRIUk9VR0ggKi8KKworCQkJY2FzZSBqcGlBbnlBcnJheToKKwkJCQlpZiAoIWN4dC0+bGF4 KQorCQkJCQlzdGF0dXMgPSBqcGRzTm9uRGF0ZVRpbWU7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UganBpQW55OgorCQkJCWlmIChqcGktPmNvbnRlbnQuYW55Ym91bmRzLmZpcnN0ID4gMCkK KwkJCQkJc3RhdHVzID0ganBkc05vbkRhdGVUaW1lOworCQkJCWJyZWFrOworCisJCQljYXNl IGpwaURhdGV0aW1lOgorCQkJCWlmIChqcGktPmNvbnRlbnQuYXJnKQorCQkJCXsKKwkJCQkJ Y2hhcgkgICAqdGVtcGxhdGU7CisJCQkJCWludAkJCWZsYWdzOworCisJCQkJCWpzcEdldEFy ZyhqcGksICZhcmcpOworCQkJCQlpZiAoYXJnLnR5cGUgIT0ganBpU3RyaW5nKQorCQkJCQl7 CisJCQkJCQlzdGF0dXMgPSBqcGRzTm9uRGF0ZVRpbWU7CisJCQkJCQlicmVhazsJLyogdGhl cmUgd2lsbCBiZSBydW50aW1lIGVycm9yICovCisJCQkJCX0KKworCQkJCQl0ZW1wbGF0ZSA9 IGpzcEdldFN0cmluZygmYXJnLCBOVUxMKTsKKwkJCQkJZmxhZ3MgPSBkYXRldGltZV9mb3Jt YXRfZmxhZ3ModGVtcGxhdGUpOworCQkJCQlpZiAoZmxhZ3MgJiBEQ0hfWk9ORUQpCisJCQkJ CQlzdGF0dXMgPSBqcGRzRGF0ZVRpbWVab25lZDsKKwkJCQkJZWxzZQorCQkJCQkJc3RhdHVz ID0ganBkc0RhdGVUaW1lTm9uWm9uZWQ7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJ CXN0YXR1cyA9IGpwZHNVbmtub3duRGF0ZVRpbWU7CisJCQkJfQorCQkJCWJyZWFrOworCisJ CQljYXNlIGpwaUxpa2VSZWdleDoKKwkJCQlBc3NlcnQoc3RhdHVzID09IGpwZHNOb25EYXRl VGltZSk7CisJCQkJanNwSW5pdEJ5QnVmZmVyKCZhcmcsIGpwaS0+YmFzZSwganBpLT5jb250 ZW50Lmxpa2VfcmVnZXguZXhwcik7CisJCQkJanNwSXNNdXRhYmxlV2Fsa2VyKCZhcmcsIGN4 dCk7CisJCQkJYnJlYWs7CisKKwkJCQkvKiBsaXRlcmFscyAqLworCQkJY2FzZSBqcGlOdWxs OgorCQkJY2FzZSBqcGlTdHJpbmc6CisJCQljYXNlIGpwaU51bWVyaWM6CisJCQljYXNlIGpw aUJvb2w6CisJCQkJLyogYWNjZXNzb3JzICovCisJCQljYXNlIGpwaUtleToKKwkJCWNhc2Ug anBpQW55S2V5OgorCQkJCS8qIHNwZWNpYWwgaXRlbXMgKi8KKwkJCWNhc2UganBpU3Vic2Ny aXB0OgorCQkJY2FzZSBqcGlMYXN0OgorCQkJCS8qIGl0ZW0gbWV0aG9kcyAqLworCQkJY2Fz ZSBqcGlUeXBlOgorCQkJY2FzZSBqcGlTaXplOgorCQkJY2FzZSBqcGlBYnM6CisJCQljYXNl IGpwaUZsb29yOgorCQkJY2FzZSBqcGlDZWlsaW5nOgorCQkJY2FzZSBqcGlEb3VibGU6CisJ CQljYXNlIGpwaUtleVZhbHVlOgorCQkJCXN0YXR1cyA9IGpwZHNOb25EYXRlVGltZTsKKwkJ CQlicmVhazsKKwkJfQorCisJCWlmICghanNwR2V0TmV4dChqcGksICZuZXh0KSkKKwkJCWJy ZWFrOworCisJCWpwaSA9ICZuZXh0OworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8q CisgKiBDaGVjayB3aGV0aGVyIGpzb25wYXRoIGV4cHJlc3Npb24gaXMgaW1tdXRhYmxlIG9y IG5vdC4KKyAqLworYm9vbAoranNwSXNNdXRhYmxlKEpzb25QYXRoICpwYXRoLCBMaXN0ICp2 YXJuYW1lcywgTGlzdCAqdmFyZXhwcnMpCit7CisJSnNvblBhdGhNdXRhYmxlQ29udGV4dCBj eHQ7CisJSnNvblBhdGhJdGVtIGpwaTsKKworCWN4dC52YXJuYW1lcyA9IHZhcm5hbWVzOwor CWN4dC52YXJleHBycyA9IHZhcmV4cHJzOworCWN4dC5jdXJyZW50ID0ganBkc05vbkRhdGVU aW1lOworCWN4dC5sYXggPSAocGF0aC0+aGVhZGVyICYgSlNPTlBBVEhfTEFYKSAhPSAwOwor CWN4dC5tdXRhYmxlID0gZmFsc2U7CisKKwlqc3BJbml0KCZqcGksIHBhdGgpOworCWpzcElz TXV0YWJsZVdhbGtlcigmanBpLCAmY3h0KTsKKworCXJldHVybiBjeHQubXV0YWJsZTsKK30K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jCmluZGV4IGI1NjFmMGU3ZTgu LjliODdhZGRiYzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0 aF9leGVjLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMuYwpA QCAtODcsMTIgKzg3LDE2IEBAIHR5cGVkZWYgc3RydWN0IEpzb25CYXNlT2JqZWN0SW5mbwog CWludAkJCWlkOwogfSBKc29uQmFzZU9iamVjdEluZm87CiAKK3R5cGVkZWYgaW50ICgqSnNv blBhdGhWYXJDYWxsYmFjaykgKHZvaWQgKnZhcnMsIGNoYXIgKnZhck5hbWUsIGludCB2YXJO YW1lTGVuLAorCQkJCQkJCQkJSnNvbmJWYWx1ZSAqdmFsLCBKc29uYlZhbHVlICpiYXNlT2Jq ZWN0KTsKKwogLyoKICAqIENvbnRleHQgb2YganNvbnBhdGggZXhlY3V0aW9uLgogICovCiB0 eXBlZGVmIHN0cnVjdCBKc29uUGF0aEV4ZWNDb250ZXh0CiB7Ci0JSnNvbmIJICAgKnZhcnM7 CQkJLyogdmFyaWFibGVzIHRvIHN1YnN0aXR1dGUgaW50byBqc29ucGF0aCAqLworCXZvaWQJ ICAgKnZhcnM7CQkJLyogdmFyaWFibGVzIHRvIHN1YnN0aXR1dGUgaW50byBqc29ucGF0aCAq LworCUpzb25QYXRoVmFyQ2FsbGJhY2sgZ2V0VmFyOwogCUpzb25iVmFsdWUgKnJvb3Q7CQkJ LyogZm9yICQgZXZhbHVhdGlvbiAqLwogCUpzb25iVmFsdWUgKmN1cnJlbnQ7CQkvKiBmb3Ig QCBldmFsdWF0aW9uICovCiAJSnNvbkJhc2VPYmplY3RJbmZvIGJhc2VPYmplY3Q7CS8qICJi YXNlIG9iamVjdCIgZm9yIC5rZXl2YWx1ZSgpCkBAIC0xNzQsNyArMTc4LDggQEAgdHlwZWRl ZiBKc29uUGF0aEJvb2wgKCpKc29uUGF0aFByZWRpY2F0ZUNhbGxiYWNrKSAoSnNvblBhdGhJ dGVtICpqc3AsCiAJCQkJCQkJCQkJCQkgICB2b2lkICpwYXJhbSk7CiB0eXBlZGVmIE51bWVy aWMgKCpCaW5hcnlBcml0aG1GdW5jKSAoTnVtZXJpYyBudW0xLCBOdW1lcmljIG51bTIsIGJv b2wgKmVycm9yKTsKIAotc3RhdGljIEpzb25QYXRoRXhlY1Jlc3VsdCBleGVjdXRlSnNvblBh dGgoSnNvblBhdGggKnBhdGgsIEpzb25iICp2YXJzLAorc3RhdGljIEpzb25QYXRoRXhlY1Jl c3VsdCBleGVjdXRlSnNvblBhdGgoSnNvblBhdGggKnBhdGgsIHZvaWQgKnZhcnMsCisJCQkJ CQkJCQkJICBKc29uUGF0aFZhckNhbGxiYWNrIGdldFZhciwKIAkJCQkJCQkJCQkgIEpzb25i ICpqc29uLCBib29sIHRocm93RXJyb3JzLAogCQkJCQkJCQkJCSAgSnNvblZhbHVlTGlzdCAq cmVzdWx0LCBib29sIHVzZVR6KTsKIHN0YXRpYyBKc29uUGF0aEV4ZWNSZXN1bHQgZXhlY3V0 ZUl0ZW0oSnNvblBhdGhFeGVjQ29udGV4dCAqY3h0LApAQCAtMjI1LDggKzIzMCwxMyBAQCBz dGF0aWMgSnNvblBhdGhFeGVjUmVzdWx0IGFwcGVuZEJvb2xSZXN1bHQoSnNvblBhdGhFeGVj Q29udGV4dCAqY3h0LAogCQkJCQkJCQkJCSAgIEpzb25QYXRoSXRlbSAqanNwLCBKc29uVmFs dWVMaXN0ICpmb3VuZCwgSnNvblBhdGhCb29sIHJlcyk7CiBzdGF0aWMgdm9pZCBnZXRKc29u UGF0aEl0ZW0oSnNvblBhdGhFeGVjQ29udGV4dCAqY3h0LCBKc29uUGF0aEl0ZW0gKml0ZW0s CiAJCQkJCQkJSnNvbmJWYWx1ZSAqdmFsdWUpOworc3RhdGljIGludAlHZXRKc29uUGF0aFZh cih2b2lkICp2YXJzLCBjaGFyICp2YXJOYW1lLCBpbnQgdmFyTmFtZUxlbiwKKwkJCQkJCSAg IEpzb25iVmFsdWUgKnZhbCwgSnNvbmJWYWx1ZSAqYmFzZU9iamVjdCk7CiBzdGF0aWMgdm9p ZCBnZXRKc29uUGF0aFZhcmlhYmxlKEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwKLQkJCQkJ CQkJSnNvblBhdGhJdGVtICp2YXJpYWJsZSwgSnNvbmIgKnZhcnMsIEpzb25iVmFsdWUgKnZh bHVlKTsKKwkJCQkJCQkJSnNvblBhdGhJdGVtICp2YXJpYWJsZSwgSnNvbmJWYWx1ZSAqdmFs dWUpOworc3RhdGljIGludAlnZXRKc29uUGF0aFZhcmlhYmxlRnJvbUpzb25iKHZvaWQgKnZh cnNKc29uYiwgY2hhciAqdmFyTmFtZSwKKwkJCQkJCQkJCQkgaW50IHZhck5hbWVMZW4sIEpz b25iVmFsdWUgKnZhbCwKKwkJCQkJCQkJCQkgSnNvbmJWYWx1ZSAqYmFzZU9iamVjdCk7CiBz dGF0aWMgaW50CUpzb25iQXJyYXlTaXplKEpzb25iVmFsdWUgKmpiKTsKIHN0YXRpYyBKc29u UGF0aEJvb2wgZXhlY3V0ZUNvbXBhcmlzb24oSnNvblBhdGhJdGVtICpjbXAsIEpzb25iVmFs dWUgKmx2LAogCQkJCQkJCQkJICBKc29uYlZhbHVlICpydiwgdm9pZCAqcCk7CkBAIC0yODQs NyArMjk0LDggQEAganNvbmJfcGF0aF9leGlzdHNfaW50ZXJuYWwoRnVuY3Rpb25DYWxsSW5m byBmY2luZm8sIGJvb2wgdHopCiAJCXNpbGVudCA9IFBHX0dFVEFSR19CT09MKDMpOwogCX0K IAotCXJlcyA9IGV4ZWN1dGVKc29uUGF0aChqcCwgdmFycywgamIsICFzaWxlbnQsIE5VTEws IHR6KTsKKwlyZXMgPSBleGVjdXRlSnNvblBhdGgoanAsIHZhcnMsIGdldEpzb25QYXRoVmFy aWFibGVGcm9tSnNvbmIsCisJCQkJCQkgIGpiLCAhc2lsZW50LCBOVUxMLCB0eik7CiAKIAlQ R19GUkVFX0lGX0NPUFkoamIsIDApOwogCVBHX0ZSRUVfSUZfQ09QWShqcCwgMSk7CkBAIC0z MzksNyArMzUwLDggQEAganNvbmJfcGF0aF9tYXRjaF9pbnRlcm5hbChGdW5jdGlvbkNhbGxJ bmZvIGZjaW5mbywgYm9vbCB0eikKIAkJc2lsZW50ID0gUEdfR0VUQVJHX0JPT0woMyk7CiAJ fQogCi0JKHZvaWQpIGV4ZWN1dGVKc29uUGF0aChqcCwgdmFycywgamIsICFzaWxlbnQsICZm b3VuZCwgdHopOworCSh2b2lkKSBleGVjdXRlSnNvblBhdGgoanAsIHZhcnMsIGdldEpzb25Q YXRoVmFyaWFibGVGcm9tSnNvbmIsCisJCQkJCQkgICBqYiwgIXNpbGVudCwgJmZvdW5kLCB0 eik7CiAKIAlQR19GUkVFX0lGX0NPUFkoamIsIDApOwogCVBHX0ZSRUVfSUZfQ09QWShqcCwg MSk7CkBAIC00MTcsNyArNDI5LDggQEAganNvbmJfcGF0aF9xdWVyeV9pbnRlcm5hbChGdW5j dGlvbkNhbGxJbmZvIGZjaW5mbywgYm9vbCB0eikKIAkJdmFycyA9IFBHX0dFVEFSR19KU09O Ql9QX0NPUFkoMik7CiAJCXNpbGVudCA9IFBHX0dFVEFSR19CT09MKDMpOwogCi0JCSh2b2lk KSBleGVjdXRlSnNvblBhdGgoanAsIHZhcnMsIGpiLCAhc2lsZW50LCAmZm91bmQsIHR6KTsK KwkJKHZvaWQpIGV4ZWN1dGVKc29uUGF0aChqcCwgdmFycywgZ2V0SnNvblBhdGhWYXJpYWJs ZUZyb21Kc29uYiwKKwkJCQkJCQkgICBqYiwgIXNpbGVudCwgJmZvdW5kLCB0eik7CiAKIAkJ ZnVuY2N0eC0+dXNlcl9mY3R4ID0gSnNvblZhbHVlTGlzdEdldExpc3QoJmZvdW5kKTsKIApA QCAtNDY0LDcgKzQ3Nyw4IEBAIGpzb25iX3BhdGhfcXVlcnlfYXJyYXlfaW50ZXJuYWwoRnVu Y3Rpb25DYWxsSW5mbyBmY2luZm8sIGJvb2wgdHopCiAJSnNvbmIJICAgKnZhcnMgPSBQR19H RVRBUkdfSlNPTkJfUCgyKTsKIAlib29sCQlzaWxlbnQgPSBQR19HRVRBUkdfQk9PTCgzKTsK IAotCSh2b2lkKSBleGVjdXRlSnNvblBhdGgoanAsIHZhcnMsIGpiLCAhc2lsZW50LCAmZm91 bmQsIHR6KTsKKwkodm9pZCkgZXhlY3V0ZUpzb25QYXRoKGpwLCB2YXJzLCBnZXRKc29uUGF0 aFZhcmlhYmxlRnJvbUpzb25iLAorCQkJCQkJICAgamIsICFzaWxlbnQsICZmb3VuZCwgdHop OwogCiAJUEdfUkVUVVJOX0pTT05CX1AoSnNvbmJWYWx1ZVRvSnNvbmIod3JhcEl0ZW1zSW5B cnJheSgmZm91bmQpKSk7CiB9CkBAIC00OTUsNyArNTA5LDggQEAganNvbmJfcGF0aF9xdWVy eV9maXJzdF9pbnRlcm5hbChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgYm9vbCB0eikKIAlK c29uYgkgICAqdmFycyA9IFBHX0dFVEFSR19KU09OQl9QKDIpOwogCWJvb2wJCXNpbGVudCA9 IFBHX0dFVEFSR19CT09MKDMpOwogCi0JKHZvaWQpIGV4ZWN1dGVKc29uUGF0aChqcCwgdmFy cywgamIsICFzaWxlbnQsICZmb3VuZCwgdHopOworCSh2b2lkKSBleGVjdXRlSnNvblBhdGgo anAsIHZhcnMsIGdldEpzb25QYXRoVmFyaWFibGVGcm9tSnNvbmIsCisJCQkJCQkgICBqYiwg IXNpbGVudCwgJmZvdW5kLCB0eik7CiAKIAlpZiAoSnNvblZhbHVlTGlzdExlbmd0aCgmZm91 bmQpID49IDEpCiAJCVBHX1JFVFVSTl9KU09OQl9QKEpzb25iVmFsdWVUb0pzb25iKEpzb25W YWx1ZUxpc3RIZWFkKCZmb3VuZCkpKTsKQEAgLTUzNyw4ICs1NTIsOSBAQCBqc29uYl9wYXRo X3F1ZXJ5X2ZpcnN0X3R6KFBHX0ZVTkNUSU9OX0FSR1MpCiAgKiBJbiBvdGhlciBjYXNlIGl0 IHRyaWVzIHRvIGZpbmQgYWxsIHRoZSBzYXRpc2ZpZWQgcmVzdWx0IGl0ZW1zLgogICovCiBz dGF0aWMgSnNvblBhdGhFeGVjUmVzdWx0Ci1leGVjdXRlSnNvblBhdGgoSnNvblBhdGggKnBh dGgsIEpzb25iICp2YXJzLCBKc29uYiAqanNvbiwgYm9vbCB0aHJvd0Vycm9ycywKLQkJCQlK c29uVmFsdWVMaXN0ICpyZXN1bHQsIGJvb2wgdXNlVHopCitleGVjdXRlSnNvblBhdGgoSnNv blBhdGggKnBhdGgsIHZvaWQgKnZhcnMsIEpzb25QYXRoVmFyQ2FsbGJhY2sgZ2V0VmFyLAor CQkJCUpzb25iICpqc29uLCBib29sIHRocm93RXJyb3JzLCBKc29uVmFsdWVMaXN0ICpyZXN1 bHQsCisJCQkJYm9vbCB1c2VUeikKIHsKIAlKc29uUGF0aEV4ZWNDb250ZXh0IGN4dDsKIAlK c29uUGF0aEV4ZWNSZXN1bHQgcmVzOwpAQCAtNTUwLDIyICs1NjYsMTYgQEAgZXhlY3V0ZUpz b25QYXRoKEpzb25QYXRoICpwYXRoLCBKc29uYiAqdmFycywgSnNvbmIgKmpzb24sIGJvb2wg dGhyb3dFcnJvcnMsCiAJaWYgKCFKc29uYkV4dHJhY3RTY2FsYXIoJmpzb24tPnJvb3QsICZq YnYpKQogCQlKc29uYkluaXRCaW5hcnkoJmpidiwganNvbik7CiAKLQlpZiAodmFycyAmJiAh SnNvbkNvbnRhaW5lcklzT2JqZWN0KCZ2YXJzLT5yb290KSkKLQl7Ci0JCWVyZXBvcnQoRVJS T1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCi0J CQkJIGVycm1zZygiXCJ2YXJzXCIgYXJndW1lbnQgaXMgbm90IGFuIG9iamVjdCIpLAotCQkJ CSBlcnJkZXRhaWwoIkpzb25wYXRoIHBhcmFtZXRlcnMgc2hvdWxkIGJlIGVuY29kZWQgYXMg a2V5LXZhbHVlIHBhaXJzIG9mIFwidmFyc1wiIG9iamVjdC4iKSkpOwotCX0KLQogCWN4dC52 YXJzID0gdmFyczsKKwljeHQuZ2V0VmFyID0gZ2V0VmFyOwogCWN4dC5sYXhNb2RlID0gKHBh dGgtPmhlYWRlciAmIEpTT05QQVRIX0xBWCkgIT0gMDsKIAljeHQuaWdub3JlU3RydWN0dXJh bEVycm9ycyA9IGN4dC5sYXhNb2RlOwogCWN4dC5yb290ID0gJmpidjsKIAljeHQuY3VycmVu dCA9ICZqYnY7CiAJY3h0LmJhc2VPYmplY3QuamJjID0gTlVMTDsKIAljeHQuYmFzZU9iamVj dC5pZCA9IDA7Ci0JY3h0Lmxhc3RHZW5lcmF0ZWRPYmplY3RJZCA9IHZhcnMgPyAyIDogMTsK KwkvKiAxICsgbnVtYmVyIG9mIGJhc2Ugb2JqZWN0cyBpbiB2YXJzICovCisJY3h0Lmxhc3RH ZW5lcmF0ZWRPYmplY3RJZCA9IDEgKyBnZXRWYXIodmFycywgTlVMTCwgMCwgTlVMTCwgTlVM TCk7CiAJY3h0LmlubmVybW9zdEFycmF5U2l6ZSA9IC0xOwogCWN4dC50aHJvd0Vycm9ycyA9 IHRocm93RXJyb3JzOwogCWN4dC51c2VUeiA9IHVzZVR6OwpAQCAtMjA5OSw1NCArMjEwOSwx MTggQEAgZ2V0SnNvblBhdGhJdGVtKEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwgSnNvblBh dGhJdGVtICppdGVtLAogCQkJCQkJCQkJCQkJICZ2YWx1ZS0+dmFsLnN0cmluZy5sZW4pOwog CQkJYnJlYWs7CiAJCWNhc2UganBpVmFyaWFibGU6Ci0JCQlnZXRKc29uUGF0aFZhcmlhYmxl KGN4dCwgaXRlbSwgY3h0LT52YXJzLCB2YWx1ZSk7CisJCQlnZXRKc29uUGF0aFZhcmlhYmxl KGN4dCwgaXRlbSwgdmFsdWUpOwogCQkJcmV0dXJuOwogCQlkZWZhdWx0OgogCQkJZWxvZyhF UlJPUiwgInVuZXhwZWN0ZWQganNvbnBhdGggaXRlbSB0eXBlIik7CiAJfQogfQogCisvKgor ICogUmV0dXJucyB0aGUgY29tcHV0ZWQgdmFsdWUgb2YgYSBKU09OIHBhdGggdmFyaWFibGUg d2l0aCBnaXZlbiBuYW1lLgorICovCitzdGF0aWMgaW50CitHZXRKc29uUGF0aFZhcih2b2lk ICpjeHQsIGNoYXIgKnZhck5hbWUsIGludCB2YXJOYW1lTGVuLAorCQkJICAgSnNvbmJWYWx1 ZSAqdmFsLCBKc29uYlZhbHVlICpiYXNlT2JqZWN0KQoreworCUpzb25QYXRoVmFyaWFibGUg KnZhciA9IE5VTEw7CisJTGlzdAkgICAqdmFycyA9IGN4dDsKKwlMaXN0Q2VsbCAgICpsYzsK KwlpbnQJCQlpZCA9IDE7CisKKwlpZiAoIXZhck5hbWUpCisJCXJldHVybiBsaXN0X2xlbmd0 aCh2YXJzKTsKKworCWZvcmVhY2gobGMsIHZhcnMpCisJeworCQlKc29uUGF0aFZhcmlhYmxl ICpjdXJ2YXIgPSBsZmlyc3QobGMpOworCisJCWlmICghc3RybmNtcChjdXJ2YXItPm5hbWUs IHZhck5hbWUsIHZhck5hbWVMZW4pKQorCQl7CisJCQl2YXIgPSBjdXJ2YXI7CisJCQlicmVh azsKKwkJfQorCisJCWlkKys7CisJfQorCisJaWYgKCF2YXIpCisJCXJldHVybiAtMTsKKwor CWlmICh2YXItPmlzbnVsbCkKKwl7CisJCXZhbC0+dHlwZSA9IGpidk51bGw7CisJCXJldHVy biAwOworCX0KKworCUpzb25JdGVtRnJvbURhdHVtKHZhci0+dmFsdWUsIHZhci0+dHlwaWQs IHZhci0+dHlwbW9kLCB2YWwpOworCisJKmJhc2VPYmplY3QgPSAqdmFsOworCXJldHVybiBp ZDsKK30KKwogLyoKICAqIEdldCB0aGUgdmFsdWUgb2YgdmFyaWFibGUgcGFzc2VkIHRvIGpz b25wYXRoIGV4ZWN1dG9yCiAgKi8KIHN0YXRpYyB2b2lkCiBnZXRKc29uUGF0aFZhcmlhYmxl KEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwgSnNvblBhdGhJdGVtICp2YXJpYWJsZSwKLQkJ CQkJSnNvbmIgKnZhcnMsIEpzb25iVmFsdWUgKnZhbHVlKQorCQkJCQlKc29uYlZhbHVlICp2 YWx1ZSkKIHsKIAljaGFyCSAgICp2YXJOYW1lOwogCWludAkJCXZhck5hbWVMZW5ndGg7Ci0J SnNvbmJWYWx1ZQl0bXA7Ci0JSnNvbmJWYWx1ZSAqdjsKLQotCWlmICghdmFycykKLQl7Ci0J CXZhbHVlLT50eXBlID0gamJ2TnVsbDsKLQkJcmV0dXJuOwotCX0KKwlKc29uYlZhbHVlCWJh c2VPYmplY3Q7CisJaW50CQkJYmFzZU9iamVjdElkOwogCiAJQXNzZXJ0KHZhcmlhYmxlLT50 eXBlID09IGpwaVZhcmlhYmxlKTsKIAl2YXJOYW1lID0ganNwR2V0U3RyaW5nKHZhcmlhYmxl LCAmdmFyTmFtZUxlbmd0aCk7CisKKwlpZiAoIWN4dC0+dmFycyB8fAorCQkoYmFzZU9iamVj dElkID0gY3h0LT5nZXRWYXIoY3h0LT52YXJzLCB2YXJOYW1lLCB2YXJOYW1lTGVuZ3RoLCB2 YWx1ZSwKKwkJCQkJCQkJCSZiYXNlT2JqZWN0KSkgPCAwKQorCQllcmVwb3J0KEVSUk9SLAor CQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX09CSkVDVCksCisJCQkJIGVycm1zZygi Y291bGQgbm90IGZpbmQganNvbnBhdGggdmFyaWFibGUgXCIlc1wiIiwKKwkJCQkJCXBuc3Ry ZHVwKHZhck5hbWUsIHZhck5hbWVMZW5ndGgpKSkpOworCisJaWYgKGJhc2VPYmplY3RJZCA+ IDApCisJCXNldEJhc2VPYmplY3QoY3h0LCAmYmFzZU9iamVjdCwgYmFzZU9iamVjdElkKTsK K30KKworc3RhdGljIGludAorZ2V0SnNvblBhdGhWYXJpYWJsZUZyb21Kc29uYih2b2lkICp2 YXJzSnNvbmIsIGNoYXIgKnZhck5hbWUsIGludCB2YXJOYW1lTGVuZ3RoLAorCQkJCQkJCSBK c29uYlZhbHVlICp2YWx1ZSwgSnNvbmJWYWx1ZSAqYmFzZU9iamVjdCkKK3sKKwlKc29uYgkg ICAqdmFycyA9IHZhcnNKc29uYjsKKwlKc29uYlZhbHVlCXRtcDsKKwlKc29uYlZhbHVlICp2 OworCisJaWYgKCF2YXJOYW1lKQorCXsKKwkJaWYgKHZhcnMgJiYgIUpzb25Db250YWluZXJJ c09iamVjdCgmdmFycy0+cm9vdCkpCisJCXsKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShl cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNn KCJcInZhcnNcIiBhcmd1bWVudCBpcyBub3QgYW4gb2JqZWN0IiksCisJCQkJCSBlcnJkZXRh aWwoIkpzb25wYXRoIHBhcmFtZXRlcnMgc2hvdWxkIGJlIGVuY29kZWQgYXMga2V5LXZhbHVl IHBhaXJzIG9mIFwidmFyc1wiIG9iamVjdC4iKSkpOworCQl9CisKKwkJcmV0dXJuIHZhcnMg PyAxIDogMDsJLyogY291bnQgb2YgYmFzZSBvYmplY3RzICovCisJfQorCiAJdG1wLnR5cGUg PSBqYnZTdHJpbmc7CiAJdG1wLnZhbC5zdHJpbmcudmFsID0gdmFyTmFtZTsKIAl0bXAudmFs LnN0cmluZy5sZW4gPSB2YXJOYW1lTGVuZ3RoOwogCiAJdiA9IGZpbmRKc29uYlZhbHVlRnJv bUNvbnRhaW5lcigmdmFycy0+cm9vdCwgSkJfRk9CSkVDVCwgJnRtcCk7CiAKLQlpZiAodikK LQl7Ci0JCSp2YWx1ZSA9ICp2OwotCQlwZnJlZSh2KTsKLQl9Ci0JZWxzZQotCXsKLQkJZXJl cG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAot CQkJCSBlcnJtc2coImNvdWxkIG5vdCBmaW5kIGpzb25wYXRoIHZhcmlhYmxlIFwiJXNcIiIs Ci0JCQkJCQlwbnN0cmR1cCh2YXJOYW1lLCB2YXJOYW1lTGVuZ3RoKSkpKTsKLQl9CisJaWYg KCF2KQorCQlyZXR1cm4gLTE7CiAKLQlKc29uYkluaXRCaW5hcnkoJnRtcCwgdmFycyk7Ci0J c2V0QmFzZU9iamVjdChjeHQsICZ0bXAsIDEpOworCSp2YWx1ZSA9ICp2OworCXBmcmVlKHYp OworCisJSnNvbmJJbml0QmluYXJ5KGJhc2VPYmplY3QsIHZhcnMpOworCXJldHVybiAxOwog fQogCiAvKioqKioqKioqKioqKioqKiBTdXBwb3J0IGZ1bmN0aW9ucyBmb3IgSnNvblBhdGgg ZXhlY3V0aW9uICoqKioqKioqKioqKioqKioqLwpAQCAtMjgwMywzICsyODc3LDI0NCBAQCBj b21wYXJlRGF0ZXRpbWUoRGF0dW0gdmFsMSwgT2lkIHR5cGlkMSwgRGF0dW0gdmFsMiwgT2lk IHR5cGlkMiwKIAogCXJldHVybiBEYXR1bUdldEludDMyKERpcmVjdEZ1bmN0aW9uQ2FsbDIo Y21wZnVuYywgdmFsMSwgdmFsMikpOwogfQorCisvKioqKioqKioqKioqKioqKioqKipJbnRl cmZhY2UgdG8gcGdzcWwncyBleGVjdXRvcioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K KworYm9vbAorSnNvblBhdGhFeGlzdHMoRGF0dW0gamIsIEpzb25QYXRoICpqcCwgTGlzdCAq dmFycywgYm9vbCAqZXJyb3IpCit7CisJSnNvblBhdGhFeGVjUmVzdWx0IHJlcyA9IGV4ZWN1 dGVKc29uUGF0aChqcCwgdmFycywgR2V0SnNvblBhdGhWYXIsCisJCQkJCQkJCQkJCSBEYXR1 bUdldEpzb25iUChqYiksICFlcnJvciwgTlVMTCwKKwkJCQkJCQkJCQkJIHRydWUpOworCisJ QXNzZXJ0KGVycm9yIHx8ICFqcGVySXNFcnJvcihyZXMpKTsKKworCWlmIChlcnJvciAmJiBq cGVySXNFcnJvcihyZXMpKQorCQkqZXJyb3IgPSB0cnVlOworCisJcmV0dXJuIHJlcyA9PSBq cGVyT2s7Cit9CisKK0RhdHVtCitKc29uUGF0aFF1ZXJ5KERhdHVtIGpiLCBKc29uUGF0aCAq anAsIEpzb25XcmFwcGVyIHdyYXBwZXIsIGJvb2wgKmVtcHR5LAorCQkJICBib29sICplcnJv ciwgTGlzdCAqdmFycykKK3sKKwlKc29uYlZhbHVlICpmaXJzdDsKKwlib29sCQl3cmFwOwor CUpzb25WYWx1ZUxpc3QgZm91bmQgPSB7MH07CisJSnNvblBhdGhFeGVjUmVzdWx0IHJlcyBQ R19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7CisJaW50CQkJY291bnQ7CisKKwlyZXMgPSBleGVj dXRlSnNvblBhdGgoanAsIHZhcnMsIEdldEpzb25QYXRoVmFyLCBEYXR1bUdldEpzb25iUChq YiksCisJCQkJCQkgICFlcnJvciwgJmZvdW5kLCB0cnVlKTsKKworCUFzc2VydChlcnJvciB8 fCAhanBlcklzRXJyb3IocmVzKSk7CisKKwlpZiAoZXJyb3IgJiYganBlcklzRXJyb3IocmVz KSkKKwl7CisJCSplcnJvciA9IHRydWU7CisJCSplbXB0eSA9IGZhbHNlOworCQlyZXR1cm4g KERhdHVtKSAwOworCX0KKworCWNvdW50ID0gSnNvblZhbHVlTGlzdExlbmd0aCgmZm91bmQp OworCisJZmlyc3QgPSBjb3VudCA/IEpzb25WYWx1ZUxpc3RIZWFkKCZmb3VuZCkgOiBOVUxM OworCisJaWYgKCFmaXJzdCkKKwkJd3JhcCA9IGZhbHNlOworCWVsc2UgaWYgKHdyYXBwZXIg PT0gSlNXX05PTkUpCisJCXdyYXAgPSBmYWxzZTsKKwllbHNlIGlmICh3cmFwcGVyID09IEpT V19VTkNPTkRJVElPTkFMKQorCQl3cmFwID0gdHJ1ZTsKKwllbHNlIGlmICh3cmFwcGVyID09 IEpTV19DT05ESVRJT05BTCkKKwkJd3JhcCA9IGNvdW50ID4gMSB8fAorCQkJSXNBSnNvbmJT Y2FsYXIoZmlyc3QpIHx8CisJCQkoZmlyc3QtPnR5cGUgPT0gamJ2QmluYXJ5ICYmCisJCQkg SnNvbkNvbnRhaW5lcklzU2NhbGFyKGZpcnN0LT52YWwuYmluYXJ5LmRhdGEpKTsKKwllbHNl CisJeworCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGpzb24gd3JhcHBlciAlZCIsIHdy YXBwZXIpOworCQl3cmFwID0gZmFsc2U7CisJfQorCisJaWYgKHdyYXApCisJCXJldHVybiBK c29uYlBHZXREYXR1bShKc29uYlZhbHVlVG9Kc29uYih3cmFwSXRlbXNJbkFycmF5KCZmb3Vu ZCkpKTsKKworCWlmIChjb3VudCA+IDEpCisJeworCQlpZiAoZXJyb3IpCisJCXsKKwkJCSpl cnJvciA9IHRydWU7CisJCQlyZXR1cm4gKERhdHVtKSAwOworCQl9CisKKwkJZXJlcG9ydChF UlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX01PUkVfVEhBTl9PTkVfU1FMX0pTT05fSVRF TSksCisJCQkJIGVycm1zZygiSlNPTiBwYXRoIGV4cHJlc3Npb24gaW4gSlNPTl9RVUVSWSBz aG91bGQgcmV0dXJuICIKKwkJCQkJCSJzaW5nbGV0b24gaXRlbSB3aXRob3V0IHdyYXBwZXIi KSwKKwkJCQkgZXJyaGludCgiVXNlIFdJVEggV1JBUFBFUiBjbGF1c2UgdG8gd3JhcCBTUUwv SlNPTiBpdGVtICIKKwkJCQkJCSAic2VxdWVuY2UgaW50byBhcnJheS4iKSkpOworCX0KKwor CWlmIChmaXJzdCkKKwkJcmV0dXJuIEpzb25iUEdldERhdHVtKEpzb25iVmFsdWVUb0pzb25i KGZpcnN0KSk7CisKKwkqZW1wdHkgPSB0cnVlOworCXJldHVybiBQb2ludGVyR2V0RGF0dW0o TlVMTCk7Cit9CisKK0pzb25iVmFsdWUgKgorSnNvblBhdGhWYWx1ZShEYXR1bSBqYiwgSnNv blBhdGggKmpwLCBib29sICplbXB0eSwgYm9vbCAqZXJyb3IsIExpc3QgKnZhcnMpCit7CisJ SnNvbmJWYWx1ZSAqcmVzOworCUpzb25WYWx1ZUxpc3QgZm91bmQgPSB7MH07CisJSnNvblBh dGhFeGVjUmVzdWx0IGpwZXIgUEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZOworCWludAkJCWNv dW50OworCisJanBlciA9IGV4ZWN1dGVKc29uUGF0aChqcCwgdmFycywgR2V0SnNvblBhdGhW YXIsIERhdHVtR2V0SnNvbmJQKGpiKSwKKwkJCQkJCSAgICFlcnJvciwgJmZvdW5kLCB0cnVl KTsKKworCUFzc2VydChlcnJvciB8fCAhanBlcklzRXJyb3IoanBlcikpOworCisJaWYgKGVy cm9yICYmIGpwZXJJc0Vycm9yKGpwZXIpKQorCXsKKwkJKmVycm9yID0gdHJ1ZTsKKwkJKmVt cHR5ID0gZmFsc2U7CisJCXJldHVybiBOVUxMOworCX0KKworCWNvdW50ID0gSnNvblZhbHVl TGlzdExlbmd0aCgmZm91bmQpOworCisJKmVtcHR5ID0gIWNvdW50OworCisJaWYgKCplbXB0 eSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoY291bnQgPiAxKQorCXsKKwkJaWYgKGVycm9y KQorCQl7CisJCQkqZXJyb3IgPSB0cnVlOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQll cmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfTU9SRV9USEFOX09ORV9TUUxf SlNPTl9JVEVNKSwKKwkJCQkgZXJybXNnKCJKU09OIHBhdGggZXhwcmVzc2lvbiBpbiBKU09O X1ZBTFVFIHNob3VsZCByZXR1cm4gIgorCQkJCQkJInNpbmdsZXRvbiBzY2FsYXIgaXRlbSIp KSk7CisJfQorCisJcmVzID0gSnNvblZhbHVlTGlzdEhlYWQoJmZvdW5kKTsKKworCWlmIChy ZXMtPnR5cGUgPT0gamJ2QmluYXJ5ICYmCisJCUpzb25Db250YWluZXJJc1NjYWxhcihyZXMt PnZhbC5iaW5hcnkuZGF0YSkpCisJCUpzb25iRXh0cmFjdFNjYWxhcihyZXMtPnZhbC5iaW5h cnkuZGF0YSwgcmVzKTsKKworCWlmICghSXNBSnNvbmJTY2FsYXIocmVzKSkKKwl7CisJCWlm IChlcnJvcikKKwkJeworCQkJKmVycm9yID0gdHJ1ZTsKKwkJCXJldHVybiBOVUxMOworCQl9 CisKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1NRTF9KU09OX1ND QUxBUl9SRVFVSVJFRCksCisJCQkJIGVycm1zZygiSlNPTiBwYXRoIGV4cHJlc3Npb24gaW4g SlNPTl9WQUxVRSBzaG91bGQgcmV0dXJuICIKKwkJCQkJCSJzaW5nbGV0b24gc2NhbGFyIGl0 ZW0iKSkpOworCX0KKworCWlmIChyZXMtPnR5cGUgPT0gamJ2TnVsbCkKKwkJcmV0dXJuIE5V TEw7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZAorSnNvbmJWYWx1ZUluaXRO dW1lcmljRGF0dW0oSnNvbmJWYWx1ZSAqamJ2LCBEYXR1bSBudW0pCit7CisJamJ2LT50eXBl ID0gamJ2TnVtZXJpYzsKKwlqYnYtPnZhbC5udW1lcmljID0gRGF0dW1HZXROdW1lcmljKG51 bSk7Cit9CisKK3ZvaWQKK0pzb25JdGVtRnJvbURhdHVtKERhdHVtIHZhbCwgT2lkIHR5cGlk LCBpbnQzMiB0eXBtb2QsIEpzb25iVmFsdWUgKnJlcykKK3sKKwlzd2l0Y2ggKHR5cGlkKQor CXsKKwkJY2FzZSBCT09MT0lEOgorCQkJcmVzLT50eXBlID0gamJ2Qm9vbDsKKwkJCXJlcy0+ dmFsLmJvb2xlYW4gPSBEYXR1bUdldEJvb2wodmFsKTsKKwkJCWJyZWFrOworCQljYXNlIE5V TUVSSUNPSUQ6CisJCQlKc29uYlZhbHVlSW5pdE51bWVyaWNEYXR1bShyZXMsIHZhbCk7CisJ CQlicmVhazsKKwkJY2FzZSBJTlQyT0lEOgorCQkJSnNvbmJWYWx1ZUluaXROdW1lcmljRGF0 dW0ocmVzLCBEaXJlY3RGdW5jdGlvbkNhbGwxKGludDJfbnVtZXJpYywgdmFsKSk7CisJCQli cmVhazsKKwkJY2FzZSBJTlQ0T0lEOgorCQkJSnNvbmJWYWx1ZUluaXROdW1lcmljRGF0dW0o cmVzLCBEaXJlY3RGdW5jdGlvbkNhbGwxKGludDRfbnVtZXJpYywgdmFsKSk7CisJCQlicmVh azsKKwkJY2FzZSBJTlQ4T0lEOgorCQkJSnNvbmJWYWx1ZUluaXROdW1lcmljRGF0dW0ocmVz LCBEaXJlY3RGdW5jdGlvbkNhbGwxKGludDhfbnVtZXJpYywgdmFsKSk7CisJCQlicmVhazsK KwkJY2FzZSBGTE9BVDRPSUQ6CisJCQlKc29uYlZhbHVlSW5pdE51bWVyaWNEYXR1bShyZXMs IERpcmVjdEZ1bmN0aW9uQ2FsbDEoZmxvYXQ0X251bWVyaWMsIHZhbCkpOworCQkJYnJlYWs7 CisJCWNhc2UgRkxPQVQ4T0lEOgorCQkJSnNvbmJWYWx1ZUluaXROdW1lcmljRGF0dW0ocmVz LCBEaXJlY3RGdW5jdGlvbkNhbGwxKGZsb2F0OF9udW1lcmljLCB2YWwpKTsKKwkJCWJyZWFr OworCQljYXNlIFRFWFRPSUQ6CisJCWNhc2UgVkFSQ0hBUk9JRDoKKwkJCXJlcy0+dHlwZSA9 IGpidlN0cmluZzsKKwkJCXJlcy0+dmFsLnN0cmluZy52YWwgPSBWQVJEQVRBX0FOWSh2YWwp OworCQkJcmVzLT52YWwuc3RyaW5nLmxlbiA9IFZBUlNJWkVfQU5ZX0VYSERSKHZhbCk7CisJ CQlicmVhazsKKwkJY2FzZSBEQVRFT0lEOgorCQljYXNlIFRJTUVPSUQ6CisJCWNhc2UgVElN RVRaT0lEOgorCQljYXNlIFRJTUVTVEFNUE9JRDoKKwkJY2FzZSBUSU1FU1RBTVBUWk9JRDoK KwkJCXJlcy0+dHlwZSA9IGpidkRhdGV0aW1lOworCQkJcmVzLT52YWwuZGF0ZXRpbWUudmFs dWUgPSB2YWw7CisJCQlyZXMtPnZhbC5kYXRldGltZS50eXBpZCA9IHR5cGlkOworCQkJcmVz LT52YWwuZGF0ZXRpbWUudHlwbW9kID0gdHlwbW9kOworCQkJcmVzLT52YWwuZGF0ZXRpbWUu dHogPSAwOworCQkJYnJlYWs7CisJCWNhc2UgSlNPTkJPSUQ6CisJCQl7CisJCQkJSnNvbmJW YWx1ZSAqamJ2ID0gcmVzOworCQkJCUpzb25iCSAgICpqYiA9IERhdHVtR2V0SnNvbmJQKHZh bCk7CisKKwkJCQlpZiAoSnNvbkNvbnRhaW5lcklzU2NhbGFyKCZqYi0+cm9vdCkpCisJCQkJ eworCQkJCQlib29sCQlyZXN1bHQgUEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZOworCisJCQkJ CXJlc3VsdCA9IEpzb25iRXh0cmFjdFNjYWxhcigmamItPnJvb3QsIGpidik7CisJCQkJCUFz c2VydChyZXN1bHQpOworCQkJCX0KKwkJCQllbHNlCisJCQkJCUpzb25iSW5pdEJpbmFyeShq YnYsIGpiKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJY2FzZSBKU09OT0lEOgorCQkJeworCQkJ CXRleHQJICAgKnR4dCA9IERhdHVtR2V0VGV4dFAodmFsKTsKKwkJCQljaGFyCSAgICpzdHIg PSB0ZXh0X3RvX2NzdHJpbmcodHh0KTsKKwkJCQlKc29uYgkgICAqamIgPQorCQkJCURhdHVt R2V0SnNvbmJQKERpcmVjdEZ1bmN0aW9uQ2FsbDEoanNvbmJfaW4sCisJCQkJCQkJCQkJCQkg ICBDU3RyaW5nR2V0RGF0dW0oc3RyKSkpOworCisJCQkJcGZyZWUoc3RyKTsKKworCQkJCUpz b25JdGVtRnJvbURhdHVtKEpzb25iUEdldERhdHVtKGpiKSwgSlNPTkJPSUQsIC0xLCByZXMp OworCQkJCWJyZWFrOworCQkJfQorCQlkZWZhdWx0OgorCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBl cnJtc2coIm9ubHkgYm9vbCwgbnVtZXJpYywgYW5kIHRleHQgdHlwZXMgY291bGQgYmUgIgor CQkJCQkJCSJjYXN0ZWQgdG8gc3VwcG9ydGVkIGpzb25wYXRoIHR5cGVzLiIpKSk7CisJfQor fQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCmluZGV4IGFkMzg0ZTlhNDcuLjhjNWVj Yzc0MDIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwor KysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKQEAgLTUwNyw2ICs1MDcs OCBAQCBzdGF0aWMgY2hhciAqZ2VuZXJhdGVfcXVhbGlmaWVkX3R5cGVfbmFtZShPaWQgdHlw aWQpOwogc3RhdGljIHRleHQgKnN0cmluZ190b190ZXh0KGNoYXIgKnN0cik7CiBzdGF0aWMg Y2hhciAqZmxhdHRlbl9yZWxvcHRpb25zKE9pZCByZWxpZCk7CiBzdGF0aWMgdm9pZCBnZXRf cmVsb3B0aW9ucyhTdHJpbmdJbmZvIGJ1ZiwgRGF0dW0gcmVsb3B0aW9ucyk7CitzdGF0aWMg dm9pZCBnZXRfanNvbl9wYXRoX3NwZWMoTm9kZSAqcGF0aF9zcGVjLCBkZXBhcnNlX2NvbnRl eHQgKmNvbnRleHQsCisJCQkJCQkJICAgYm9vbCBzaG93aW1wbGljaXQpOwogCiAjZGVmaW5l IG9ubHlfbWFya2VyKHJ0ZSkgICgocnRlKS0+aW5oID8gIiIgOiAiT05MWSAiKQogCkBAIC04 MTcwLDYgKzgxNzIsNyBAQCBpc1NpbXBsZU5vZGUoTm9kZSAqbm9kZSwgTm9kZSAqcGFyZW50 Tm9kZSwgaW50IHByZXR0eUZsYWdzKQogCQljYXNlIFRfV2luZG93RnVuYzoKIAkJY2FzZSBU X0Z1bmNFeHByOgogCQljYXNlIFRfSnNvbkNvbnN0cnVjdG9yRXhwcjoKKwkJY2FzZSBUX0pz b25FeHByOgogCQkJLyogZnVuY3Rpb24tbGlrZTogbmFtZSguLikgb3IgbmFtZVsuLl0gKi8K IAkJCXJldHVybiB0cnVlOwogCkBAIC04Mjg5LDYgKzgyOTIsNyBAQCBpc1NpbXBsZU5vZGUo Tm9kZSAqbm9kZSwgTm9kZSAqcGFyZW50Tm9kZSwgaW50IHByZXR0eUZsYWdzKQogCQkJCWNh c2UgVF9Hcm91cGluZ0Z1bmM6CS8qIG93biBwYXJlbnRoZXNlcyAqLwogCQkJCWNhc2UgVF9X aW5kb3dGdW5jOgkvKiBvd24gcGFyZW50aGVzZXMgKi8KIAkJCQljYXNlIFRfQ2FzZUV4cHI6 CS8qIG90aGVyIHNlcGFyYXRvcnMgKi8KKwkJCQljYXNlIFRfSnNvbkV4cHI6CS8qIG93biBw YXJlbnRoZXNlcyAqLwogCQkJCQlyZXR1cm4gdHJ1ZTsKIAkJCQlkZWZhdWx0OgogCQkJCQly ZXR1cm4gZmFsc2U7CkBAIC04NDU2LDYgKzg0NjAsMTkgQEAgZ2V0X3J1bGVfZXhwcl9wYXJl bihOb2RlICpub2RlLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCiAJCWFwcGVuZFN0cmlu Z0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKIH0KIAorCisvKgorICogZ2V0X2pzb25f cGF0aF9zcGVjCQktIFBhcnNlIGJhY2sgYSBKU09OIHBhdGggc3BlY2lmaWNhdGlvbgorICov CitzdGF0aWMgdm9pZAorZ2V0X2pzb25fcGF0aF9zcGVjKE5vZGUgKnBhdGhfc3BlYywgZGVw YXJzZV9jb250ZXh0ICpjb250ZXh0LCBib29sIHNob3dpbXBsaWNpdCkKK3sKKwlpZiAoSXNB KHBhdGhfc3BlYywgQ29uc3QpKQorCQlnZXRfY29uc3RfZXhwcigoQ29uc3QgKikgcGF0aF9z cGVjLCBjb250ZXh0LCAtMSk7CisJZWxzZQorCQlnZXRfcnVsZV9leHByKHBhdGhfc3BlYywg Y29udGV4dCwgc2hvd2ltcGxpY2l0KTsKK30KKwogLyoKICAqIGdldF9qc29uX2Zvcm1hdAkJ CS0gUGFyc2UgYmFjayBhIEpzb25Gb3JtYXQgbm9kZQogICovCkBAIC04NDk5LDYgKzg1MTYs NjYgQEAgZ2V0X2pzb25fcmV0dXJuaW5nKEpzb25SZXR1cm5pbmcgKnJldHVybmluZywgU3Ry aW5nSW5mbyBidWYsCiAJCWdldF9qc29uX2Zvcm1hdChyZXR1cm5pbmctPmZvcm1hdCwgYnVm KTsKIH0KIAorc3RhdGljIHZvaWQKK2dldF9qc29uX2JlaGF2aW9yKEpzb25CZWhhdmlvciAq YmVoYXZpb3IsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKKwkJCQkgIGNvbnN0IGNoYXIg Km9uKQoreworCS8qCisJICogVGhlIG9yZGVyIG9mIGFycmF5IGVsZW1lbnRzIG11c3QgY29y cmVzcG9uZCB0byB0aGUgb3JkZXIgb2YKKwkgKiBKc29uQmVoYXZpb3JUeXBlIG1lbWJlcnMu CisJICovCisJY29uc3QgY2hhciAqYmVoYXZpb3JfbmFtZXNbXSA9CisJeworCQkiIE5VTEwi LAorCQkiIEVSUk9SIiwKKwkJIiBFTVBUWSIsCisJCSIgVFJVRSIsCisJCSIgRkFMU0UiLAor CQkiIFVOS05PV04iLAorCQkiIEVNUFRZIEFSUkFZIiwKKwkJIiBFTVBUWSBPQkpFQ1QiLAor CQkiIERFRkFVTFQgIgorCX07CisKKwlpZiAoKGludCkgYmVoYXZpb3ItPmJ0eXBlIDwgMCB8 fCBiZWhhdmlvci0+YnR5cGUgPj0gbGVuZ3Rob2YoYmVoYXZpb3JfbmFtZXMpKQorCQllbG9n KEVSUk9SLCAiaW52YWxpZCBqc29uIGJlaGF2aW9yIHR5cGU6ICVkIiwgYmVoYXZpb3ItPmJ0 eXBlKTsKKworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoY29udGV4dC0+YnVmLCBiZWhhdmlv cl9uYW1lc1tiZWhhdmlvci0+YnR5cGVdKTsKKworCWlmIChiZWhhdmlvci0+YnR5cGUgPT0g SlNPTl9CRUhBVklPUl9ERUZBVUxUKQorCQlnZXRfcnVsZV9leHByKGJlaGF2aW9yLT5kZWZh dWx0X2V4cHIsIGNvbnRleHQsIGZhbHNlKTsKKworCWFwcGVuZFN0cmluZ0luZm8oY29udGV4 dC0+YnVmLCAiIE9OICVzIiwgb24pOworfQorCisvKgorICogZ2V0X2pzb25fZXhwcl9vcHRp b25zCisgKgorICogUGFyc2UgYmFjayBjb21tb24gb3B0aW9ucyBmb3IgSlNPTl9RVUVSWSwg SlNPTl9WQUxVRSwgSlNPTl9FWElTVFMuCisgKi8KK3N0YXRpYyB2b2lkCitnZXRfanNvbl9l eHByX29wdGlvbnMoSnNvbkV4cHIgKmpzZXhwciwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0 LAorCQkJCQkgIEpzb25CZWhhdmlvclR5cGUgZGVmYXVsdF9iZWhhdmlvcikKK3sKKwlpZiAo anNleHByLT5vcCA9PSBKU09OX1FVRVJZX09QKQorCXsKKwkJaWYgKGpzZXhwci0+d3JhcHBl ciA9PSBKU1dfQ09ORElUSU9OQUwpCisJCQlhcHBlbmRTdHJpbmdJbmZvKGNvbnRleHQtPmJ1 ZiwgIiBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIiKTsKKwkJZWxzZSBpZiAoanNleHByLT53 cmFwcGVyID09IEpTV19VTkNPTkRJVElPTkFMKQorCQkJYXBwZW5kU3RyaW5nSW5mbyhjb250 ZXh0LT5idWYsICIgV0lUSCBVTkNPTkRJVElPTkFMIFdSQVBQRVIiKTsKKworCQlpZiAoanNl eHByLT5vbWl0X3F1b3RlcykKKwkJCWFwcGVuZFN0cmluZ0luZm8oY29udGV4dC0+YnVmLCAi IE9NSVQgUVVPVEVTIik7CisJfQorCisJaWYgKGpzZXhwci0+b3AgIT0gSlNPTl9FWElTVFNf T1AgJiYKKwkJanNleHByLT5vbl9lbXB0eS0+YnR5cGUgIT0gZGVmYXVsdF9iZWhhdmlvcikK KwkJZ2V0X2pzb25fYmVoYXZpb3IoanNleHByLT5vbl9lbXB0eSwgY29udGV4dCwgIkVNUFRZ Iik7CisKKwlpZiAoanNleHByLT5vbl9lcnJvci0+YnR5cGUgIT0gZGVmYXVsdF9iZWhhdmlv cikKKwkJZ2V0X2pzb25fYmVoYXZpb3IoanNleHByLT5vbl9lcnJvciwgY29udGV4dCwgIkVS Uk9SIik7Cit9CisKIC8qIC0tLS0tLS0tLS0KICAqIGdldF9ydWxlX2V4cHIJCQktIFBhcnNl IGJhY2sgYW4gZXhwcmVzc2lvbgogICoKQEAgLTk1OTYsNiArOTY3Myw3IEBAIGdldF9ydWxl X2V4cHIoTm9kZSAqbm9kZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LAogCQkJfQogCQkJ YnJlYWs7CiAKKwogCQljYXNlIFRfSnNvblZhbHVlRXhwcjoKIAkJCXsKIAkJCQlKc29uVmFs dWVFeHByICpqdmUgPSAoSnNvblZhbHVlRXhwciAqKSBub2RlOwpAQCAtOTY0NSw2ICs5NzIz LDYzIEBAIGdldF9ydWxlX2V4cHIoTm9kZSAqbm9kZSwgZGVwYXJzZV9jb250ZXh0ICpjb250 ZXh0LAogCQkJfQogCQkJYnJlYWs7CiAKKwkJY2FzZSBUX0pzb25FeHByOgorCQkJeworCQkJ CUpzb25FeHByICAgKmpleHByID0gKEpzb25FeHByICopIG5vZGU7CisKKwkJCQlzd2l0Y2gg KGpleHByLT5vcCkKKwkJCQl7CisJCQkJCWNhc2UgSlNPTl9RVUVSWV9PUDoKKwkJCQkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiSlNPTl9RVUVSWSgiKTsKKwkJCQkJCWJyZWFr OworCQkJCQljYXNlIEpTT05fVkFMVUVfT1A6CisJCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKGJ1ZiwgIkpTT05fVkFMVUUoIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBKU09O X0VYSVNUU19PUDoKKwkJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiSlNPTl9F WElTVFMoIik7CisJCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlnZXRfcnVsZV9leHByKGpl eHByLT5mb3JtYXR0ZWRfZXhwciwgY29udGV4dCwgc2hvd2ltcGxpY2l0KTsKKworCQkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiLCAiKTsKKworCQkJCWdldF9qc29uX3BhdGhf c3BlYyhqZXhwci0+cGF0aF9zcGVjLCBjb250ZXh0LCBzaG93aW1wbGljaXQpOworCisJCQkJ aWYgKGpleHByLT5wYXNzaW5nX3ZhbHVlcykKKwkJCQl7CisJCQkJCUxpc3RDZWxsICAgKmxj MSwKKwkJCQkJCQkgICAqbGMyOworCQkJCQlib29sCQluZWVkY29tbWEgPSBmYWxzZTsKKwor CQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiBQQVNTSU5HICIpOworCisJCQkJ CWZvcmJvdGgobGMxLCBqZXhwci0+cGFzc2luZ19uYW1lcywKKwkJCQkJCQlsYzIsIGpleHBy LT5wYXNzaW5nX3ZhbHVlcykKKwkJCQkJeworCQkJCQkJaWYgKG5lZWRjb21tYSkKKwkJCQkJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiwgIik7CisJCQkJCQluZWVkY29tbWEg PSB0cnVlOworCisJCQkJCQlnZXRfcnVsZV9leHByKChOb2RlICopIGxmaXJzdChsYzIpLCBj b250ZXh0LCBzaG93aW1wbGljaXQpOworCQkJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIg QVMgJXMiLAorCQkJCQkJCQkJCSAoKFN0cmluZyAqKSBsZmlyc3Rfbm9kZShTdHJpbmcsIGxj MSkpLT5zdmFsKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCWlmIChqZXhwci0+b3AgIT0gSlNP Tl9FWElTVFNfT1AgfHwKKwkJCQkJamV4cHItPnJldHVybmluZy0+dHlwaWQgIT0gQk9PTE9J RCkKKwkJCQkJZ2V0X2pzb25fcmV0dXJuaW5nKGpleHByLT5yZXR1cm5pbmcsIGNvbnRleHQt PmJ1ZiwKKwkJCQkJCQkJCSAgIGpleHByLT5vcCA9PSBKU09OX1FVRVJZX09QKTsKKworCQkJ CWdldF9qc29uX2V4cHJfb3B0aW9ucyhqZXhwciwgY29udGV4dCwKKwkJCQkJCQkJCSAgamV4 cHItPm9wID09IEpTT05fRVhJU1RTX09QID8KKwkJCQkJCQkJCSAgSlNPTl9CRUhBVklPUl9G QUxTRSA6IEpTT05fQkVIQVZJT1JfTlVMTCk7CisKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKGJ1ZiwgIikiKTsKKwkJCX0KKwkJCWJyZWFrOworCiAJCWNhc2UgVF9MaXN0OgogCQkJ ewogCQkJCWNoYXIJICAgKnNlcDsKQEAgLTk3NjcsNiArOTkwMiw3IEBAIGxvb2tzX2xpa2Vf ZnVuY3Rpb24oTm9kZSAqbm9kZSkKIAkJY2FzZSBUX0NvYWxlc2NlRXhwcjoKIAkJY2FzZSBU X01pbk1heEV4cHI6CiAJCWNhc2UgVF9YbWxFeHByOgorCQljYXNlIFRfSnNvbkV4cHI6CiAJ CQkvKiB0aGVzZSBhcmUgYWxsIGFjY2VwdGVkIGJ5IGZ1bmNfZXhwcl9jb21tb25fc3ViZXhw ciAqLwogCQkJcmV0dXJuIHRydWU7CiAJCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9leGVjdXRvci9leGVjRXhwci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4 cHIuaAppbmRleCAyZjI1MWI3ZjhlLi42MmQxM2M2ZTQwIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9leGVjdXRvci9leGVjRXhwci5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4 ZWNFeHByLmgKQEAgLTE2LDEyICsxNiwxNSBAQAogCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9k ZUFnZy5oIgogI2luY2x1ZGUgIm5vZGVzL2V4ZWNub2Rlcy5oIgorI2luY2x1ZGUgIm5vZGVz L21pc2Nub2Rlcy5oIgogCiAvKiBmb3J3YXJkIHJlZmVyZW5jZXMgdG8gYXZvaWQgY2lyY3Vs YXJpdHkgKi8KIHN0cnVjdCBFeHByRXZhbFN0ZXA7CiBzdHJ1Y3QgU3Vic2NyaXB0aW5nUmVm U3RhdGU7CiBzdHJ1Y3QgU2NhbGFyQXJyYXlPcEV4cHJIYXNoVGFibGU7CiBzdHJ1Y3QgSnNv bkNvbnN0cnVjdG9yRXhwclN0YXRlOworc3RydWN0IEpzb25iVmFsdWU7CitzdHJ1Y3QgSnNv bkV4cHJTdGF0ZTsKIAogLyogQml0cyBpbiBFeHByU3RhdGUtPmZsYWdzIChzZWUgYWxzbyBl eGVjbm9kZXMuaCBmb3IgcHVibGljIGZsYWcgYml0cyk6ICovCiAvKiBleHByZXNzaW9uJ3Mg aW50ZXJwcmV0ZXIgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgKi8KQEAgLTI0MSw2ICsyNDQsMTEg QEAgdHlwZWRlZiBlbnVtIEV4cHJFdmFsT3AKIAlFRU9QX1NVQlBMQU4sCiAJRUVPUF9KU09O X0NPTlNUUlVDVE9SLAogCUVFT1BfSVNfSlNPTiwKKwlFRU9QX0pTT05FWFBSX1NLSVAsCisJ RUVPUF9KU09ORVhQUl9QQVRILAorCUVFT1BfSlNPTkVYUFJfQkVIQVZJT1IsCisJRUVPUF9K U09ORVhQUl9DT0VSQ0lPTiwKKwlFRU9QX0pTT05FWFBSX0NPRVJDSU9OX0ZJTklTSCwKIAog CS8qIGFnZ3JlZ2F0aW9uIHJlbGF0ZWQgbm9kZXMgKi8KIAlFRU9QX0FHR19TVFJJQ1RfREVT RVJJQUxJWkUsCkBAIC02ODIsNiArNjkwLDU3IEBAIHR5cGVkZWYgc3RydWN0IEV4cHJFdmFs U3RlcAogCQkJSnNvbklzUHJlZGljYXRlICpwcmVkOwkvKiBvcmlnaW5hbCBleHByZXNzaW9u IG5vZGUgKi8KIAkJfQkJCWlzX2pzb247CiAKKwkJLyogZm9yIEVFT1BfSlNPTkVYUFJfUEFU SCAqLworCQlzdHJ1Y3QKKwkJeworCQkJc3RydWN0IEpzb25FeHByU3RhdGUgKmpzZXN0YXRl OworCQl9CQkJanNvbmV4cHI7CisKKwkJLyogZm9yIEVFT1BfSlNPTkVYUFJfU0tJUCAqLwor CQlzdHJ1Y3QKKwkJeworCQkJLyogU2FtZSBhcyBqc29uZXhwci5qc2VzdGF0ZSAqLworCQkJ c3RydWN0IEpzb25FeHByU3RhdGUgKmpzZXN0YXRlOworCisJCQkvKiBTZWUgRXhlY0V2YWxK c29uRXhwclNraXAoKSAqLworCQkJaW50CQlqdW1wX2NvZXJjaW9uOworCQkJaW50CQlqdW1w X3Bhc3NpbmdfYXJnczsKKwkJfQkJCWpzb25leHByX3NraXA7CisKKwkJLyogZm9yIEVFT1Bf SlNPTkVYUFJfQkVIQVZJT1IgKi8KKwkJc3RydWN0CisJCXsKKwkJCS8qIFNhbWUgYXMganNv bmV4cHIuanNlc3RhdGUgKi8KKwkJCXN0cnVjdCBKc29uRXhwclN0YXRlICpqc2VzdGF0ZTsK KworCQkJLyogU2VlIEV4ZWNFdmFsSnNvbkV4cHJCZWhhdmlvcigpICovCisJCQlpbnQJCWp1 bXBfb25lcnJvcl9leHByOworCQkJaW50CQlqdW1wX29uZW1wdHlfZXhwcjsKKwkJCWludAkJ anVtcF9jb2VyY2lvbjsKKwkJCWludAkJanVtcF9za2lwX2NvZXJjaW9uOworCQl9CQlqc29u ZXhwcl9iZWhhdmlvcjsKKworCQkvKiBmb3IgRUVPUF9KU09ORVhQUl9DT0VSQ0lPTiAqLwor CQlzdHJ1Y3QKKwkJeworCQkJLyogU2FtZSBhcyBqc29uZXhwci5qc2VzdGF0ZSAqLworCQkJ c3RydWN0IEpzb25FeHByU3RhdGUgKmpzZXN0YXRlOworCisJCQkvKiBTZWUgRXhlY0V2YWxK c29uRXhwckNvZXJjaW9uKCkgKi8KKwkJCWludAkJanVtcF9jb2VyY2lvbl9lcnJvcjsKKwkJ CWludAkJanVtcF9jb2VyY2lvbl9kb25lOworCQl9CQlqc29uZXhwcl9jb2VyY2lvbjsKKwor CQkvKiBmb3IgRUVPUF9KU09ORVhQUl9DT0VSQ0lPTl9GSU5JU0ggKi8KKwkJc3RydWN0CisJ CXsKKwkJCS8qIFNhbWUgYXMganNvbmV4cHIuanNlc3RhdGUgKi8KKwkJCXN0cnVjdCBKc29u RXhwclN0YXRlICpqc2VzdGF0ZTsKKworCQkJLyogU2VlIEV4ZWNFdmFsSnNvbkV4cHJDb2Vy Y2lvbigpICovCisJCQlpbnQJCWp1bXBfY29lcmNpb25fZXJyb3I7CisJCQlpbnQJCWp1bXBf Y29lcmNpb25fZG9uZTsKKwkJfQkJanNvbmV4cHJfY29lcmNpb25fZmluaXNoOwogCX0JCQlk OwogfSBFeHByRXZhbFN0ZXA7CiAKQEAgLTc0NSw2ICs4MDQsMTExIEBAIHR5cGVkZWYgc3Ry dWN0IEpzb25Db25zdHJ1Y3RvckV4cHJTdGF0ZQogCWludAkJCW5hcmdzOwogfSBKc29uQ29u c3RydWN0b3JFeHByU3RhdGU7CiAKKy8qCisgKiBJbmZvcm1hdGlvbiBjb21wdXRlZCBiZWZv cmUgZXZhbHVhdGluZyBhIEpzb25FeHByIGV4cHJlc3Npb24uCisgKi8KK3R5cGVkZWYgc3Ry dWN0IEpzb25FeHByUHJlRXZhbFN0YXRlCit7CisJLyogdmFsdWUvaXNudWxsIGZvciBKc29u RXhwci5mb3JtYXR0ZWRfZXhwciAqLworCU51bGxhYmxlRGF0dW0JZm9ybWF0dGVkX2V4cHI7 CisKKwkvKiB2YWx1ZS9pc251bGwgZm9yIEpzb25FeHByLnBhdGhzcGVjICovCisJTnVsbGFi bGVEYXR1bQlwYXRoc3BlYzsKKworCS8qIEpzb25QYXRoVmFyaWFibGUgZW50cmllcyBmb3Ig SnNvbkV4cHIucGFzc2luZ192YWx1ZXMgKi8KKwlMaXN0CQkgICAqYXJnczsKK30JSnNvbkV4 cHJQcmVFdmFsU3RhdGU7CisKKy8qCisgKiBTdGF0ZSBmb3IgYSBnaXZlbiBtZW1iZXIgb2Yg SnNvbkl0ZW1Db2VyY2lvbnMuCisgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25Db2VyY2lvblN0 YXRlCit7CisJLyogRXhwcmVzc2lvbiB1c2VkIHRvIGV2YWx1YXRlIHRoZSBjb2VyY2lvbiAq LworCUpzb25Db2VyY2lvbiAgICpjb2VyY2lvbjsKKworCS8qIEV4cHJFdmFsU3RlcCB0byBj b21wdXRlIHRoaXMgY29lcmNpb24ncyBleHByZXNzaW9uICovCisJaW50CQkJCWp1bXBfZXZh bF9leHByOworfSBKc29uQ29lcmNpb25TdGF0ZTsKKworLyoKKyAqIFN0YXRlIGZvciBldmFs dWF0aW5nIHRoZSBjb2VyY2lvbiBmb3IgYSBnaXZlbiBKU09OIGl0ZW0gdXNpbmcgb25lIG9m CisgKiB0aGUgZm9sbG93aW5nIGNvZXJjaW9ucy4KKyAqCisgKiBOb3RlIHRoYXQgd2hpbGUg RXhlY0luaXRFeHByUmVjKCkgZm9yIEpzb25JdGVtQ29lcmNpb25zIHdpbGwgaW5pdGlhbGl6 ZQorICogRXhwckV2YWxTdGVwcyBmb3IgYWxsIG9mIHRoZSBtZW1iZXJzIHRoYXQgbmVlZCBp dCwgb25seSBvbmUgd2lsbCBnZXQgcnVuCisgKiBkdXJpbmcgYSBnaXZlbiBldmFsdWF0aW9u IG9mIHRoZSBlbmNsb3NpbmcgSnNvbkV4cHIgZGVwZW5kaW5nIG9uIHRoZSB0eXBlCisgKiBv ZiB0aGUgcmVzdWx0IEpTT04gaXRlbS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvbkl0ZW1D b2VyY2lvbnNTdGF0ZQoreworCUpzb25Db2VyY2lvblN0YXRlICAqbnVsbDsKKwlKc29uQ29l cmNpb25TdGF0ZSAgKnN0cmluZzsKKwlKc29uQ29lcmNpb25TdGF0ZSAgKm51bWVyaWM7CisJ SnNvbkNvZXJjaW9uU3RhdGUgICpib29sZWFuOworCUpzb25Db2VyY2lvblN0YXRlICAqZGF0 ZTsKKwlKc29uQ29lcmNpb25TdGF0ZSAgKnRpbWU7CisJSnNvbkNvZXJjaW9uU3RhdGUgICp0 aW1ldHo7CisJSnNvbkNvZXJjaW9uU3RhdGUgICp0aW1lc3RhbXA7CisJSnNvbkNvZXJjaW9u U3RhdGUgICp0aW1lc3RhbXB0ejsKKwlKc29uQ29lcmNpb25TdGF0ZSAgKmNvbXBvc2l0ZTsK K30gSnNvbkl0ZW1Db2VyY2lvbnNTdGF0ZTsKKworLyoKKyAqIFN0YXRlIGZvciBzb21lIHBv c3QtSnNvbkV4cHItZXZhbHVhdGlvbiBwcm9jZXNzaW5nIHN0ZXBzIHRoYXQgZ2V0cyBmaWxs ZWQKKyAqIGluIEpzb25FeHByIGV2YWx1YXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IEpz b25FeHByUG9zdEV2YWxTdGF0ZQoreworCS8qIElzIEpTT04gaXRlbSBlbXB0eT8gKi8KKwli b29sCQllbXB0eTsKKworCS8qIERpZCBKU09OIGl0ZW0gZXZhbHVhdGlvbiBjYXVzZSBhbiBl cnJvcj8gKi8KKwlib29sCQllcnJvcjsKKworCS8qIENhY2hlIGZvciBqc29uX3BvcHVsYXRl X3R5cGUoKSBjYWxsZWQgZm9yIGNvZXJjaW9uIGluIHNvbWUgY2FzZXMgKi8KKwl2b2lkCSAg ICpjYWNoZTsKKworCS8qCisJICogU3RhdGUgZm9yIGV2YWx1YXRpbmcgYSBKU09OIGl0ZW0g Y29lcmNpb24uICBQb2ludHMgdG8gb25lIG9mIHRob3NlIGluCisJICogSnNvbkV4cHJTdGF0 ZS5jb2VyY2lvbnMgY2hvc2VuIGJ5IEV4ZWNQcmVwYXJlSnNvbkl0ZW1Db2VyY2lvbigpLgor CSAqLworCUpzb25Db2VyY2lvblN0YXRlICAgKml0ZW1famNzdGF0ZTsKKwlib29sCQljb2Vy Y2lvbl9lcnJvcjsKKwlib29sCQljb2VyY2lvbl9kb25lOworCisJRXJyb3JTYXZlQ29udGV4 dCBlc2NvbnRleHQ7Cit9CUpzb25FeHByUG9zdEV2YWxTdGF0ZTsKKworLyogRUVPUF9KU09O RVhQUiBzdGF0ZSwgdG9vIGJpZyB0byBpbmxpbmUgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25F eHByU3RhdGUKK3sKKwkvKiBvcmlnaW5hbCBleHByZXNzaW9uIG5vZGUgKi8KKwlKc29uRXhw ciAgICpqc2V4cHI7CisKKwkvKgorCSAqIFNob3VsZCBlcnJvcnMgYmUgdGhyb3duIG9yIGhh bmRsZWQgc29mdGx5PyAgRGlmZmVyZW50IHBhcnRzIG9mCisJICogZXZhbHVhdGluZyBhIGdp dmVuIEpzb25FeHByIG1heSByZXF1aXJlIGRpZmZlcmVudCB0cmVhdG1lbnQKKwkgKiBkZXBl bmRpbmcgb24gdGhlIEpzb25FeHByT3A7IHNlZSBFeGVjRXZhbEpzb25FeHByQmVoYXZpb3Io KS4KKwkgKi8KKwlib29sCQl0aHJvd19lcnJvcjsKKworCUpzb25FeHByUHJlRXZhbFN0YXRl CXByZV9ldmFsOworCUpzb25FeHByUG9zdEV2YWxTdGF0ZQlwb3N0X2V2YWw7CisKKwlzdHJ1 Y3QKKwl7CisJCUZtZ3JJbmZvCSpmaW5mbzsJLyogdHlwaW5wdXQgZnVuY3Rpb24gZm9yIG91 dHB1dCB0eXBlICovCisJCU9pZAkJCXR5cGlvcGFyYW07CisJfQkJCWlucHV0OwkJCS8qIEkv TyBpbmZvIGZvciBvdXRwdXQgdHlwZSAqLworCisJLyoKKwkgKiBFaXRoZXIgb2YgdGhlIGZv bGxvd2luZyB0d28gaXMgdXNlZCBieSBFeGVjRXZhbEpzb25Db2VyY2lvbigpIHRvIGFwcGx5 CisJICogY29lcmNpb24gdG8gdGhlIGZpbmFsIHJlc3VsdCBpZiBuZWVkZWQuCisJICovCisJ SnNvbkNvZXJjaW9uU3RhdGUgICpyZXN1bHRfamNzdGF0ZTsKKwlKc29uSXRlbUNvZXJjaW9u c1N0YXRlICppdGVtX2pjc3RhdGVzOworfSBKc29uRXhwclN0YXRlOwogCiAvKiBmdW5jdGlv bnMgaW4gZXhlY0V4cHIuYyAqLwogZXh0ZXJuIHZvaWQgRXhwckV2YWxQdXNoU3RlcChFeHBy U3RhdGUgKmVzLCBjb25zdCBFeHByRXZhbFN0ZXAgKnMpOwpAQCAtODA0LDYgKzk2OCwxNCBA QCBleHRlcm4gdm9pZCBFeGVjRXZhbFN5c1ZhcihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZh bFN0ZXAgKm9wLAogCQkJCQkJICAgRXhwckNvbnRleHQgKmVjb250ZXh0LCBUdXBsZVRhYmxl U2xvdCAqc2xvdCk7CiBleHRlcm4gdm9pZCBFeGVjRXZhbEpzb25Db25zdHJ1Y3RvcihFeHBy U3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLAogCQkJCQkJCQkJRXhwckNvbnRleHQg KmVjb250ZXh0KTsKK2V4dGVybiBpbnQgRXhlY0V2YWxKc29uRXhwclNraXAoRXhwclN0YXRl ICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCk7CitleHRlcm4gaW50IEV4ZWNFdmFsSnNvbkV4 cHJCZWhhdmlvcihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wKTsKK2V4dGVy biBpbnQgRXhlY0V2YWxKc29uRXhwckNvZXJjaW9uKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJF dmFsU3RlcCAqb3AsCisJCQkJCQkJCQlFeHByQ29udGV4dCAqZWNvbnRleHQsCisJCQkJCQkJ CQlEYXR1bSByZXMsIGJvb2wgcmVzbnVsbCk7CitleHRlcm4gaW50IEV4ZWNFdmFsSnNvbkV4 cHJDb2VyY2lvbkZpbmlzaChFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wKTsK K2V4dGVybiB2b2lkIEV4ZWNFdmFsSnNvbkV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2 YWxTdGVwICpvcCwKKwkJCQkJCSBFeHByQ29udGV4dCAqZWNvbnRleHQpOwogCiBleHRlcm4g dm9pZCBFeGVjQWdnSW5pdEdyb3VwKEFnZ1N0YXRlICphZ2dzdGF0ZSwgQWdnU3RhdGVQZXJU cmFucyBwZXJ0cmFucywgQWdnU3RhdGVQZXJHcm91cCBwZXJncm91cCwKIAkJCQkJCQkgRXhw ckNvbnRleHQgKmFnZ2NvbnRleHQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0 b3IvZXhlY3V0b3IuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKaW5kZXgg OTQ2YWJjMDA1MS4uNDk5MmQzYWJjOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0 b3IvZXhlY3V0b3IuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCkBA IC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY2Rlc2MuaCIKICNpbmNs dWRlICJmbWdyLmgiCiAjaW5jbHVkZSAibm9kZXMvbG9ja29wdGlvbnMuaCIKKyNpbmNsdWRl ICJub2Rlcy9taXNjbm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCiAj aW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv bm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRl eCBiYzY3Y2I5ZWQ4Li4wYjQwODRiZGMxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rl cy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAt MTI5LDYgKzEyOSw5IEBAIHR5cGVkZWYgc3RydWN0IEV4cHJTdGF0ZQogCiAJRGF0dW0JICAg KmlubmVybW9zdF9kb21haW52YWw7CiAJYm9vbAkgICAqaW5uZXJtb3N0X2RvbWFpbm51bGw7 CisKKwkvKiBFcnJvclNhdmVDb250ZXh0IGZvciBzb2Z0LWVycm9yIGNhcHR1cmUuICovCisJ Tm9kZQkgICAqZXNjb250ZXh0OwogfSBFeHByU3RhdGU7CiAKIApkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVu Y3MuaAppbmRleCA4MWY4YmY2YmFhLi42OTMyZDJmMTNkIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9ub2Rlcy9tYWtlZnVuY3MuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVu Y3MuaApAQCAtMTA5LDYgKzEwOSw3IEBAIGV4dGVybiBWYWN1dW1SZWxhdGlvbiAqbWFrZVZh Y3V1bVJlbGF0aW9uKFJhbmdlVmFyICpyZWxhdGlvbiwgT2lkIG9pZCwgTGlzdCAqdmFfCiBl eHRlcm4gSnNvbkZvcm1hdCAqbWFrZUpzb25Gb3JtYXQoSnNvbkZvcm1hdFR5cGUgdHlwZSwg SnNvbkVuY29kaW5nIGVuY29kaW5nLAogCQkJCQkJCQkgIGludCBsb2NhdGlvbik7CiBleHRl cm4gSnNvblZhbHVlRXhwciAqbWFrZUpzb25WYWx1ZUV4cHIoRXhwciAqZXhwciwgSnNvbkZv cm1hdCAqZm9ybWF0KTsKK2V4dGVybiBKc29uQmVoYXZpb3IgKm1ha2VKc29uQmVoYXZpb3Io SnNvbkJlaGF2aW9yVHlwZSB0eXBlLCBOb2RlICpleHByKTsKIGV4dGVybiBOb2RlICptYWtl SnNvbktleVZhbHVlKE5vZGUgKmtleSwgTm9kZSAqdmFsdWUpOwogZXh0ZXJuIE5vZGUgKm1h a2VKc29uSXNQcmVkaWNhdGUoTm9kZSAqZXhwciwgSnNvbkZvcm1hdCAqZm9ybWF0LAogCQkJ CQkJCQkgSnNvblZhbHVlVHlwZSBpdGVtX3R5cGUsIGJvb2wgdW5pcXVlX2tleXMsCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggYi9zcmMvaW5jbHVkZS9u b2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXggMWMyOTZkYTMyNi4uMDFlZDE5NmUyNCAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRl L25vZGVzL3BhcnNlbm9kZXMuaApAQCAtMTcxNSw2ICsxNzE1LDIzIEBAIHR5cGVkZWYgc3Ry dWN0IFRyaWdnZXJUcmFuc2l0aW9uCiAKIC8qIE5vZGVzIGZvciBTUUwvSlNPTiBzdXBwb3J0 ICovCiAKKy8qCisgKiBKc29uUXVvdGVzIC0KKyAqCQlyZXByZXNlbnRhdGlvbiBvZiBbS0VF UHxPTUlUXSBRVU9URVMgY2xhdXNlIGZvciBKU09OX1FVRVJZKCkKKyAqLwordHlwZWRlZiBl bnVtIEpzb25RdW90ZXMKK3sKKwlKU19RVU9URVNfVU5TUEVDLAkJCS8qIHVuc3BlY2lmaWVk ICovCisJSlNfUVVPVEVTX0tFRVAsCQkJCS8qIEtFRVAgUVVPVEVTICovCisJSlNfUVVPVEVT X09NSVQJCQkJLyogT01JVCBRVU9URVMgKi8KK30gSnNvblF1b3RlczsKKworLyoKKyAqIEpz b25QYXRoU3BlYyAtCisgKgkJcmVwcmVzZW50YXRpb24gb2YgSlNPTiBwYXRoIGNvbnN0YW50 CisgKi8KK3R5cGVkZWYgY2hhciAqSnNvblBhdGhTcGVjOworCiAvKgogICogSnNvbk91dHB1 dCAtCiAgKgkJcmVwcmVzZW50YXRpb24gb2YgSlNPTiBvdXRwdXQgY2xhdXNlIChSRVRVUk5J TkcgdHlwZSBbRk9STUFUIGZvcm1hdF0pCkBAIC0xNzI2LDYgKzE3NDMsNDggQEAgdHlwZWRl ZiBzdHJ1Y3QgSnNvbk91dHB1dAogCUpzb25SZXR1cm5pbmcgKnJldHVybmluZzsJLyogUkVU VVJOSU5HIEZPUk1BVCBjbGF1c2UgYW5kIHR5cGUgT2lkcyAqLwogfSBKc29uT3V0cHV0Owog CisvKgorICogSnNvbkFyZ3VtZW50IC0KKyAqCQlyZXByZXNlbnRhdGlvbiBvZiBhcmd1bWVu dCBmcm9tIEpTT04gUEFTU0lORyBjbGF1c2UKKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvbkFy Z3VtZW50Cit7CisJTm9kZVRhZwkJdHlwZTsKKwlKc29uVmFsdWVFeHByICp2YWw7CQkJLyog YXJndW1lbnQgdmFsdWUgZXhwcmVzc2lvbiAqLworCWNoYXIJICAgKm5hbWU7CQkJLyogYXJn dW1lbnQgbmFtZSAqLworfSBKc29uQXJndW1lbnQ7CisKKy8qCisgKiBKc29uQ29tbW9uIC0K KyAqCQlyZXByZXNlbnRhdGlvbiBvZiBjb21tb24gc3ludGF4IG9mIGZ1bmN0aW9ucyB1c2lu ZyBKU09OIHBhdGgKKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvbkNvbW1vbgoreworCU5vZGVU YWcJCXR5cGU7CisJSnNvblZhbHVlRXhwciAqZXhwcjsJCS8qIGNvbnRleHQgaXRlbSBleHBy ZXNzaW9uICovCisJTm9kZQkgICAqcGF0aHNwZWM7CQkvKiBKU09OIHBhdGggc3BlY2lmaWNh dGlvbiBleHByZXNzaW9uICovCisJY2hhcgkgICAqcGF0aG5hbWU7CQkvKiBwYXRoIG5hbWUs IGlmIGFueSAqLworCUxpc3QJICAgKnBhc3Npbmc7CQkvKiBsaXN0IG9mIFBBU1NJTkcgY2xh dXNlIGFyZ3VtZW50cywgaWYgYW55ICovCisJaW50CQkJbG9jYXRpb247CQkvKiB0b2tlbiBs b2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93biAqLworfSBKc29uQ29tbW9uOworCisvKgorICog SnNvbkZ1bmNFeHByIC0KKyAqCQl1bnRyYW5zZm9ybWVkIHJlcHJlc2VudGF0aW9uIG9mIEpT T04gZnVuY3Rpb24gZXhwcmVzc2lvbnMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvbkZ1bmNF eHByCit7CisJTm9kZVRhZwkJdHlwZTsKKwlKc29uRXhwck9wCW9wOwkJCQkvKiBleHByZXNz aW9uIHR5cGUgKi8KKwlKc29uQ29tbW9uICpjb21tb247CQkJLyogY29tbW9uIHN5bnRheCAq LworCUpzb25PdXRwdXQgKm91dHB1dDsJCQkvKiBvdXRwdXQgY2xhdXNlLCBpZiBzcGVjaWZp ZWQgKi8KKwlKc29uQmVoYXZpb3IgKm9uX2VtcHR5OwkJLyogT04gRU1QVFkgYmVoYXZpb3Is IGlmIHNwZWNpZmllZCAqLworCUpzb25CZWhhdmlvciAqb25fZXJyb3I7CQkvKiBPTiBFUlJP UiBiZWhhdmlvciwgaWYgc3BlY2lmaWVkICovCisJSnNvbldyYXBwZXIgd3JhcHBlcjsJCS8q IGFycmF5IHdyYXBwZXIgYmVoYXZpb3IgKEpTT05fUVVFUlkgb25seSkgKi8KKwlib29sCQlv bWl0X3F1b3RlczsJLyogb21pdCBvciBrZWVwIHF1b3Rlcz8gKEpTT05fUVVFUlkgb25seSkg Ki8KKwlpbnQJCQlsb2NhdGlvbjsJCS8qIHRva2VuIGxvY2F0aW9uLCBvciAtMSBpZiB1bmtu b3duICovCit9IEpzb25GdW5jRXhwcjsKKwogLyoKICAqIEpzb25LZXlWYWx1ZSAtCiAgKgkJ dW50cmFuc2Zvcm1lZCByZXByZXNlbnRhdGlvbiBvZiBKU09OIG9iamVjdCBrZXktdmFsdWUg cGFpciBmb3IKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oIGIv c3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKaW5kZXggYmIyZmVkYmFjYS4uYzkyMzIy MWYyNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKQEAgLTE0OTgsNiArMTQ5OCwxNyBAQCB0 eXBlZGVmIHN0cnVjdCBYbWxFeHByCiAJaW50CQkJbG9jYXRpb247CiB9IFhtbEV4cHI7CiAK Ky8qCisgKiBKc29uRXhwck9wIC0KKyAqCQllbnVtZXJhdGlvbiBvZiBKU09OIGZ1bmN0aW9u cyB1c2luZyBKU09OIHBhdGgKKyAqLwordHlwZWRlZiBlbnVtIEpzb25FeHByT3AKK3sKKwlK U09OX1ZBTFVFX09QLAkJCQkvKiBKU09OX1ZBTFVFKCkgKi8KKwlKU09OX1FVRVJZX09QLAkJ CQkvKiBKU09OX1FVRVJZKCkgKi8KKwlKU09OX0VYSVNUU19PUAkJCQkvKiBKU09OX0VYSVNU UygpICovCit9IEpzb25FeHByT3A7CisKIC8qCiAgKiBKc29uRW5jb2RpbmcgLQogICoJCXJl cHJlc2VudGF0aW9uIG9mIEpTT04gRU5DT0RJTkcgY2xhdXNlCkBAIC0xNTIyLDYgKzE1MzMs MzcgQEAgdHlwZWRlZiBlbnVtIEpzb25Gb3JtYXRUeXBlCiAJCQkJCQkJCSAqIGpzb25iICov CiB9IEpzb25Gb3JtYXRUeXBlOwogCisvKgorICogSnNvbkJlaGF2aW9yVHlwZSAtCisgKgkJ ZW51bWVyYXRpb24gb2YgYmVoYXZpb3IgdHlwZXMgdXNlZCBpbiBKU09OIE9OIC4uLiBCRUhB VklPUiBjbGF1c2UKKyAqCisgKiAJCUlmIGVudW0gbWVtYmVycyBhcmUgcmVvcmRlcmVkLCBn ZXRfanNvbl9iZWhhdmlvcigpIGZyb20gcnVsZXV0aWxzLmMKKyAqIAkJbXVzdCBiZSB1cGRh dGVkIGFjY29yZGluZ2x5LgorICovCit0eXBlZGVmIGVudW0gSnNvbkJlaGF2aW9yVHlwZQor eworCUpTT05fQkVIQVZJT1JfTlVMTCA9IDAsCisJSlNPTl9CRUhBVklPUl9FUlJPUiwKKwlK U09OX0JFSEFWSU9SX0VNUFRZLAorCUpTT05fQkVIQVZJT1JfVFJVRSwKKwlKU09OX0JFSEFW SU9SX0ZBTFNFLAorCUpTT05fQkVIQVZJT1JfVU5LTk9XTiwKKwlKU09OX0JFSEFWSU9SX0VN UFRZX0FSUkFZLAorCUpTT05fQkVIQVZJT1JfRU1QVFlfT0JKRUNULAorCUpTT05fQkVIQVZJ T1JfREVGQVVMVAorfSBKc29uQmVoYXZpb3JUeXBlOworCisvKgorICogSnNvbldyYXBwZXIg LQorICoJCXJlcHJlc2VudGF0aW9uIG9mIFdSQVBQRVIgY2xhdXNlIGZvciBKU09OX1FVRVJZ KCkKKyAqLwordHlwZWRlZiBlbnVtIEpzb25XcmFwcGVyCit7CisJSlNXX05PTkUsCisJSlNX X0NPTkRJVElPTkFMLAorCUpTV19VTkNPTkRJVElPTkFMLAorfSBKc29uV3JhcHBlcjsKKwog LyoKICAqIEpzb25Gb3JtYXQgLQogICoJCXJlcHJlc2VudGF0aW9uIG9mIEpTT04gRk9STUFU IGNsYXVzZQpAQCAtMTYwOSw2ICsxNjUxLDczIEBAIHR5cGVkZWYgc3RydWN0IEpzb25Jc1By ZWRpY2F0ZQogCWludAkJCWxvY2F0aW9uOwkJLyogdG9rZW4gbG9jYXRpb24sIG9yIC0xIGlm IHVua25vd24gKi8KIH0gSnNvbklzUHJlZGljYXRlOwogCisvKgorICogSnNvbkJlaGF2aW9y IC0KKyAqCQlyZXByZXNlbnRhdGlvbiBvZiBKU09OIE9OIC4uLiBCRUhBVklPUiBjbGF1c2UK KyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvbkJlaGF2aW9yCit7CisJTm9kZVRhZwkJdHlwZTsK KwlKc29uQmVoYXZpb3JUeXBlIGJ0eXBlOwkJLyogYmVoYXZpb3IgdHlwZSAqLworCU5vZGUJ ICAgKmRlZmF1bHRfZXhwcjsJLyogZGVmYXVsdCBleHByZXNzaW9uLCBpZiBhbnkgKi8KK30g SnNvbkJlaGF2aW9yOworCisvKgorICogSnNvbkNvZXJjaW9uIC0KKyAqCQljb2VyY2lvbiBm cm9tIFNRTC9KU09OIGl0ZW0gdHlwZXMgdG8gU1FMIHR5cGVzCisgKi8KK3R5cGVkZWYgc3Ry dWN0IEpzb25Db2VyY2lvbgoreworCU5vZGVUYWcJCXR5cGU7CisJTm9kZQkgICAqZXhwcjsJ CQkvKiByZXN1bHRpbmcgZXhwcmVzc2lvbiBjb2VyY2VkIHRvIHRhcmdldCB0eXBlICovCisJ Ym9vbAkJdmlhX3BvcHVsYXRlOwkvKiBjb2VyY2UgcmVzdWx0IHVzaW5nIGpzb25fcG9wdWxh dGVfdHlwZSgpPyAqLworCWJvb2wJCXZpYV9pbzsJCQkvKiBjb2VyY2UgcmVzdWx0IHVzaW5n IHR5cGUgaW5wdXQgZnVuY3Rpb24/ICovCisJT2lkCQkJY29sbGF0aW9uOwkJLyogY29sbGF0 aW9uIGZvciBjb2VyY2lvbiB2aWEgSS9PIG9yIHBvcHVsYXRlICovCit9IEpzb25Db2VyY2lv bjsKKworLyoKKyAqIEpzb25JdGVtQ29lcmNpb25zIC0KKyAqCQlleHByZXNzaW9ucyBmb3Ig Y29lcmNpb24gZnJvbSBTUUwvSlNPTiBpdGVtIHR5cGVzIGRpcmVjdGx5IHRvIHRoZQorICoJ CW91dHB1dCBTUUwgdHlwZQorICovCit0eXBlZGVmIHN0cnVjdCBKc29uSXRlbUNvZXJjaW9u cworeworCU5vZGVUYWcJCXR5cGU7CisJSnNvbkNvZXJjaW9uICpudWxsOworCUpzb25Db2Vy Y2lvbiAqc3RyaW5nOworCUpzb25Db2VyY2lvbiAqbnVtZXJpYzsKKwlKc29uQ29lcmNpb24g KmJvb2xlYW47CisJSnNvbkNvZXJjaW9uICpkYXRlOworCUpzb25Db2VyY2lvbiAqdGltZTsK KwlKc29uQ29lcmNpb24gKnRpbWV0ejsKKwlKc29uQ29lcmNpb24gKnRpbWVzdGFtcDsKKwlK c29uQ29lcmNpb24gKnRpbWVzdGFtcHR6OworCUpzb25Db2VyY2lvbiAqY29tcG9zaXRlOwkv KiBhcnJheXMgYW5kIG9iamVjdHMgKi8KK30gSnNvbkl0ZW1Db2VyY2lvbnM7CisKKy8qCisg KiBKc29uRXhwciAtCisgKgkJdHJhbnNmb3JtZWQgcmVwcmVzZW50YXRpb24gb2YgSlNPTl9W QUxVRSgpLCBKU09OX1FVRVJZKCksIEpTT05fRVhJU1RTKCkKKyAqLwordHlwZWRlZiBzdHJ1 Y3QgSnNvbkV4cHIKK3sKKwlFeHByCQl4cHI7CisJSnNvbkV4cHJPcAlvcDsJCQkJLyoganNv biBmdW5jdGlvbiBJRCAqLworCU5vZGUJICAgKmZvcm1hdHRlZF9leHByOyAvKiBmb3JtYXR0 ZWQgY29udGV4dCBpdGVtIGV4cHJlc3Npb24gKi8KKwlKc29uQ29lcmNpb24gKnJlc3VsdF9j b2VyY2lvbjsJLyogcmVzdWx0aW5nIGNvZXJjaW9uIHRvIFJFVFVSTklORyB0eXBlICovCisJ SnNvbkZvcm1hdCAqZm9ybWF0OwkJCS8qIGNvbnRleHQgaXRlbSBmb3JtYXQgKEpTT04vSlNP TkIpICovCisJTm9kZQkgICAqcGF0aF9zcGVjOwkJLyogSlNPTiBwYXRoIHNwZWNpZmljYXRp b24gZXhwcmVzc2lvbiAqLworCUxpc3QJICAgKnBhc3NpbmdfbmFtZXM7CS8qIFBBU1NJTkcg YXJndW1lbnQgbmFtZXMgKi8KKwlMaXN0CSAgICpwYXNzaW5nX3ZhbHVlczsgLyogUEFTU0lO RyBhcmd1bWVudCB2YWx1ZXMgKi8KKwlKc29uUmV0dXJuaW5nICpyZXR1cm5pbmc7CS8qIFJF VFVSTklORyBjbGF1c2UgdHlwZS9mb3JtYXQgaW5mbyAqLworCUpzb25CZWhhdmlvciAqb25f ZW1wdHk7CQkvKiBPTiBFTVBUWSBiZWhhdmlvciAqLworCUpzb25CZWhhdmlvciAqb25fZXJy b3I7CQkvKiBPTiBFUlJPUiBiZWhhdmlvciAqLworCUpzb25JdGVtQ29lcmNpb25zICpjb2Vy Y2lvbnM7CS8qIGNvZXJjaW9ucyBmb3IgSlNPTl9WQUxVRSAqLworCUpzb25XcmFwcGVyIHdy YXBwZXI7CQkvKiBXUkFQUEVSIGZvciBKU09OX1FVRVJZICovCisJYm9vbAkJb21pdF9xdW90 ZXM7CS8qIEtFRVAvT01JVCBRVU9URVMgZm9yIEpTT05fUVVFUlkgKi8KKwlpbnQJCQlsb2Nh dGlvbjsJCS8qIHRva2VuIGxvY2F0aW9uLCBvciAtMSBpZiB1bmtub3duICovCit9IEpzb25F eHByOworCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKiBOdWxsVGVzdAogICoKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaCBiL3NyYy9pbmNsdWRlL3BhcnNlci9r d2xpc3QuaAppbmRleCBmNWIyZTYxY2E1Li5iNTU1NmUzMzFhIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9wYXJzZXIva3dsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlz dC5oCkBAIC05Myw2ICs5Myw3IEBAIFBHX0tFWVdPUkQoImNvbW1pdCIsIENPTU1JVCwgVU5S RVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiY29tbWl0dGVkIiwg Q09NTUlUVEVELCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JE KCJjb21wcmVzc2lvbiIsIENPTVBSRVNTSU9OLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVf TEFCRUwpCiBQR19LRVlXT1JEKCJjb25jdXJyZW50bHkiLCBDT05DVVJSRU5UTFksIFRZUEVf RlVOQ19OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JEKCJjb25kaXRpb25h bCIsIENPTkRJVElPTkFMLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19L RVlXT1JEKCJjb25maWd1cmF0aW9uIiwgQ09ORklHVVJBVElPTiwgVU5SRVNFUlZFRF9LRVlX T1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiY29uZmxpY3QiLCBDT05GTElDVCwgVU5S RVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiY29ubmVjdGlvbiIs IENPTk5FQ1RJT04sIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKQEAgLTE0Nywx MSArMTQ4LDEzIEBAIFBHX0tFWVdPUkQoImRvdWJsZSIsIERPVUJMRV9QLCBVTlJFU0VSVkVE X0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJkcm9wIiwgRFJPUCwgVU5SRVNF UlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiZWFjaCIsIEVBQ0gsIFVO UkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImVsc2UiLCBFTFNF LCBSRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgiZW1wdHkiLCBF TVBUWV9QLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJl bmFibGUiLCBFTkFCTEVfUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdf S0VZV09SRCgiZW5jb2RpbmciLCBFTkNPRElORywgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJF X0xBQkVMKQogUEdfS0VZV09SRCgiZW5jcnlwdGVkIiwgRU5DUllQVEVELCBVTlJFU0VSVkVE X0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJlbmQiLCBFTkRfUCwgUkVTRVJW RURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImVudW0iLCBFTlVNX1AsIFVO UkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQoImVycm9yIiwgRVJS T1JfUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiZXNj YXBlIiwgRVNDQVBFLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlX T1JEKCJldmVudCIsIEVWRU5ULCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQ R19LRVlXT1JEKCJleGNlcHQiLCBFWENFUFQsIFJFU0VSVkVEX0tFWVdPUkQsIEFTX0xBQkVM KQpAQCAtMjMzLDggKzIzNiwxMiBAQCBQR19LRVlXT1JEKCJqb2luIiwgSk9JTiwgVFlQRV9G VU5DX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImpzb24iLCBKU09O LCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJqc29uX2Fy cmF5IiwgSlNPTl9BUlJBWSwgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tF WVdPUkQoImpzb25fYXJyYXlhZ2ciLCBKU09OX0FSUkFZQUdHLCBDT0xfTkFNRV9LRVlXT1JE LCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgianNvbl9leGlzdHMiLCBKU09OX0VYSVNUUywg Q09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImpzb25fb2JqZWN0 IiwgSlNPTl9PQkpFQ1QsIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlX T1JEKCJqc29uX29iamVjdGFnZyIsIEpTT05fT0JKRUNUQUdHLCBDT0xfTkFNRV9LRVlXT1JE LCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgianNvbl9xdWVyeSIsIEpTT05fUVVFUlksIENP TF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JEKCJqc29uX3ZhbHVlIiwg SlNPTl9WQUxVRSwgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQo ImtlZXAiLCBLRUVQLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlX T1JEKCJrZXkiLCBLRVksIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tF WVdPUkQoImtleXMiLCBLRVlTLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQ R19LRVlXT1JEKCJsYWJlbCIsIExBQkVMLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFC RUwpCkBAIC0zMDAsNiArMzA3LDcgQEAgUEdfS0VZV09SRCgib2ZmIiwgT0ZGLCBVTlJFU0VS VkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJvZmZzZXQiLCBPRkZTRVQs IFJFU0VSVkVEX0tFWVdPUkQsIEFTX0xBQkVMKQogUEdfS0VZV09SRCgib2lkcyIsIE9JRFMs IFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoIm9sZCIsIE9M RCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgib21pdCIs IE9NSVQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoIm9u IiwgT04sIFJFU0VSVkVEX0tFWVdPUkQsIEFTX0xBQkVMKQogUEdfS0VZV09SRCgib25seSIs IE9OTFksIFJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJvcGVy YXRvciIsIE9QRVJBVE9SLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCkBAIC0z NDIsNiArMzUwLDcgQEAgUEdfS0VZV09SRCgicHJvY2VkdXJlcyIsIFBST0NFRFVSRVMsIFVO UkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInByb2dyYW0iLCBQ Uk9HUkFNLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJw dWJsaWNhdGlvbiIsIFBVQkxJQ0FUSU9OLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFC RUwpCiBQR19LRVlXT1JEKCJxdW90ZSIsIFFVT1RFLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJB UkVfTEFCRUwpCitQR19LRVlXT1JEKCJxdW90ZXMiLCBRVU9URVMsIFVOUkVTRVJWRURfS0VZ V09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInJhbmdlIiwgUkFOR0UsIFVOUkVTRVJW RURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInJlYWQiLCBSRUFELCBVTlJF U0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJyZWFsIiwgUkVBTCwg Q09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKQEAgLTQxMiw2ICs0MjEsNyBAQCBQR19L RVlXT1JEKCJzdGRvdXQiLCBTVERPVVQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJF TCkKIFBHX0tFWVdPUkQoInN0b3JhZ2UiLCBTVE9SQUdFLCBVTlJFU0VSVkVEX0tFWVdPUkQs IEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJzdG9yZWQiLCBTVE9SRUQsIFVOUkVTRVJWRURf S0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInN0cmljdCIsIFNUUklDVF9QLCBV TlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JEKCJzdHJpbmciLCBT VFJJTkdfUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgi c3RyaXAiLCBTVFJJUF9QLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19L RVlXT1JEKCJzdWJzY3JpcHRpb24iLCBTVUJTQ1JJUFRJT04sIFVOUkVTRVJWRURfS0VZV09S RCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInN1YnN0cmluZyIsIFNVQlNUUklORywgQ09M X05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKQEAgLTQ0Nyw2ICs0NTcsNyBAQCBQR19LRVlX T1JEKCJ0eXBlcyIsIFRZUEVTX1AsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkK IFBHX0tFWVdPUkQoInVlc2NhcGUiLCBVRVNDQVBFLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJB UkVfTEFCRUwpCiBQR19LRVlXT1JEKCJ1bmJvdW5kZWQiLCBVTkJPVU5ERUQsIFVOUkVTRVJW RURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInVuY29tbWl0dGVkIiwgVU5D T01NSVRURUQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQo InVuY29uZGl0aW9uYWwiLCBVTkNPTkRJVElPTkFMLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJB UkVfTEFCRUwpCiBQR19LRVlXT1JEKCJ1bmVuY3J5cHRlZCIsIFVORU5DUllQVEVELCBVTlJF U0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJ1bmlvbiIsIFVOSU9O LCBSRVNFUlZFRF9LRVlXT1JELCBBU19MQUJFTCkKIFBHX0tFWVdPUkQoInVuaXF1ZSIsIFVO SVFVRSwgUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3V0aWxzL2Zvcm1hdHRpbmcuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2Zvcm1hdHRp bmcuaAppbmRleCAwY2FkM2EyNzA5Li5iOTE5ZGRhNGFiIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS91dGlscy9mb3JtYXR0aW5nLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvZm9ybWF0 dGluZy5oCkBAIC0xNyw2ICsxNyw5IEBACiAjaWZuZGVmIF9GT1JNQVRUSU5HX0hfCiAjZGVm aW5lIF9GT1JNQVRUSU5HX0hfCiAKKyNkZWZpbmUgRENIX0RBVEVECTB4MDEKKyNkZWZpbmUg RENIX1RJTUVECTB4MDIKKyNkZWZpbmUgRENIX1pPTkVECTB4MDQKIAogZXh0ZXJuIGNoYXIg KnN0cl90b2xvd2VyKGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0ZXMsIE9pZCBjb2xs aWQpOwogZXh0ZXJuIGNoYXIgKnN0cl90b3VwcGVyKGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVf dCBuYnl0ZXMsIE9pZCBjb2xsaWQpOwpAQCAtMjksNSArMzIsNiBAQCBleHRlcm4gY2hhciAq YXNjX2luaXRjYXAoY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IG5ieXRlcyk7CiBleHRlcm4g RGF0dW0gcGFyc2VfZGF0ZXRpbWUodGV4dCAqZGF0ZV90eHQsIHRleHQgKmZtdCwgT2lkIGNv bGxpZCwgYm9vbCBzdHJpY3QsCiAJCQkJCQkJT2lkICp0eXBpZCwgaW50MzIgKnR5cG1vZCwg aW50ICp0eiwKIAkJCQkJCQlzdHJ1Y3QgTm9kZSAqZXNjb250ZXh0KTsKK2V4dGVybiBpbnQJ ZGF0ZXRpbWVfZm9ybWF0X2ZsYWdzKGNvbnN0IGNoYXIgKmZtdF9zdHIpOwogCiAjZW5kaWYK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25iLmggYi9zcmMvaW5jbHVkZS91 dGlscy9qc29uYi5oCmluZGV4IDY0OWExNjQ0ZjIuLmFjMjc5ZWU1MzUgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3V0aWxzL2pzb25iLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNv bmIuaApAQCAtNDIyLDYgKzQyMiw5IEBAIGV4dGVybiBjaGFyICpKc29uYlRvQ1N0cmluZyhT dHJpbmdJbmZvIG91dCwgSnNvbmJDb250YWluZXIgKmluLAogCQkJCQkJCWludCBlc3RpbWF0 ZWRfbGVuKTsKIGV4dGVybiBjaGFyICpKc29uYlRvQ1N0cmluZ0luZGVudChTdHJpbmdJbmZv IG91dCwgSnNvbmJDb250YWluZXIgKmluLAogCQkJCQkJCQkgIGludCBlc3RpbWF0ZWRfbGVu KTsKK2V4dGVybiBKc29uYiAqSnNvbmJNYWtlRW1wdHlBcnJheSh2b2lkKTsKK2V4dGVybiBK c29uYiAqSnNvbmJNYWtlRW1wdHlPYmplY3Qodm9pZCk7CitleHRlcm4gY2hhciAqSnNvbmJV bnF1b3RlKEpzb25iICpqYik7CiBleHRlcm4gYm9vbCBKc29uYkV4dHJhY3RTY2FsYXIoSnNv bmJDb250YWluZXIgKmpiYywgSnNvbmJWYWx1ZSAqcmVzKTsKIGV4dGVybiBjb25zdCBjaGFy ICpKc29uYlR5cGVOYW1lKEpzb25iVmFsdWUgKnZhbCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3V0aWxzL2pzb25mdW5jcy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbmZ1bmNz LmgKaW5kZXggYTg1MjAzZDRhNC4uY2Q5Y2MxNDgwZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvdXRpbHMvanNvbmZ1bmNzLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbmZ1bmNz LmgKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgSlNPTkZVTkNTX0gKIAogI2luY2x1ZGUg ImNvbW1vbi9qc29uYXBpLmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKICNpbmNsdWRl ICJ1dGlscy9qc29uYi5oIgogCiAvKgpAQCAtNjMsNCArNjQsOSBAQCBleHRlcm4gSnNvbmIg KnRyYW5zZm9ybV9qc29uYl9zdHJpbmdfdmFsdWVzKEpzb25iICpqc29uYiwgdm9pZCAqYWN0 aW9uX3N0YXRlLAogZXh0ZXJuIHRleHQgKnRyYW5zZm9ybV9qc29uX3N0cmluZ192YWx1ZXMo dGV4dCAqanNvbiwgdm9pZCAqYWN0aW9uX3N0YXRlLAogCQkJCQkJCQkJCSAgSnNvblRyYW5z Zm9ybVN0cmluZ1ZhbHVlc0FjdGlvbiB0cmFuc2Zvcm1fYWN0aW9uKTsKIAorZXh0ZXJuIERh dHVtIGpzb25fcG9wdWxhdGVfdHlwZShEYXR1bSBqc29uX3ZhbCwgT2lkIGpzb25fdHlwZSwK KwkJCQkJCQkJT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsCisJCQkJCQkJCXZvaWQgKipjYWNo ZSwgTWVtb3J5Q29udGV4dCBtY3h0LCBib29sICppc251bGwsCisJCQkJCQkJCU5vZGUgKmVz Y29udGV4dCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvanNv bnBhdGguaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25wYXRoLmgKaW5kZXggZjAxODFlMDQ1 Zi4uNGRhZTc4YTk4YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbnBhdGgu aAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9qc29ucGF0aC5oCkBAIC0xNiw3ICsxNiw5IEBA CiAKICNpbmNsdWRlICJmbWdyLmgiCiAjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgorI2lu Y2x1ZGUgIm5vZGVzL3ByaW1ub2Rlcy5oIgogI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCisj aW5jbHVkZSAidXRpbHMvanNvbmZ1bmNzLmgiCiAKIHR5cGVkZWYgc3RydWN0CiB7CkBAIC0x ODQsNiArMTg2LDcgQEAgZXh0ZXJuIGJvb2wganNwR2V0Qm9vbChKc29uUGF0aEl0ZW0gKnYp OwogZXh0ZXJuIGNoYXIgKmpzcEdldFN0cmluZyhKc29uUGF0aEl0ZW0gKnYsIGludDMyICps ZW4pOwogZXh0ZXJuIGJvb2wganNwR2V0QXJyYXlTdWJzY3JpcHQoSnNvblBhdGhJdGVtICp2 LCBKc29uUGF0aEl0ZW0gKmZyb20sCiAJCQkJCQkJCSBKc29uUGF0aEl0ZW0gKnRvLCBpbnQg aSk7CitleHRlcm4gYm9vbCBqc3BJc011dGFibGUoSnNvblBhdGggKnBhdGgsIExpc3QgKnZh cm5hbWVzLCBMaXN0ICp2YXJleHBycyk7CiAKIGV4dGVybiBjb25zdCBjaGFyICpqc3BPcGVy YXRpb25OYW1lKEpzb25QYXRoSXRlbVR5cGUgdHlwZSk7CiAKQEAgLTI2MSw0ICsyNjQsMjgg QEAgZXh0ZXJuIGJvb2wganNwQ29udmVydFJlZ2V4RmxhZ3ModWludDMyIHhmbGFncywgaW50 ICpyZXN1bHQsCiAJCQkJCQkJCSBzdHJ1Y3QgTm9kZSAqZXNjb250ZXh0KTsKIAogCisvKgor ICogRXZhbHVhdGlvbiBvZiBqc29ucGF0aAorICovCisKKy8qIEV4dGVybmFsIHZhcmlhYmxl IHBhc3NlZCBpbnRvIGpzb25wYXRoLiAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvblBhdGhWYXJp YWJsZQoreworCWNoYXIJICAgKm5hbWU7CisJT2lkCQkJdHlwaWQ7CisJaW50MzIJCXR5cG1v ZDsKKwlEYXR1bQkJdmFsdWU7CisJYm9vbAkJaXNudWxsOworfSBKc29uUGF0aFZhcmlhYmxl OworCisvKiBTUUwvSlNPTiBpdGVtICovCitleHRlcm4gdm9pZCBKc29uSXRlbUZyb21EYXR1 bShEYXR1bSB2YWwsIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kLAorCQkJCQkJCSAgSnNvbmJW YWx1ZSAqcmVzKTsKKworZXh0ZXJuIGJvb2wgSnNvblBhdGhFeGlzdHMoRGF0dW0gamIsIEpz b25QYXRoICpwYXRoLCBMaXN0ICp2YXJzLCBib29sICplcnJvcik7CitleHRlcm4gRGF0dW0g SnNvblBhdGhRdWVyeShEYXR1bSBqYiwgSnNvblBhdGggKmpwLCBKc29uV3JhcHBlciB3cmFw cGVyLAorCQkJCQkJICAgYm9vbCAqZW1wdHksIGJvb2wgKmVycm9yLCBMaXN0ICp2YXJzKTsK K2V4dGVybiBKc29uYlZhbHVlICpKc29uUGF0aFZhbHVlKERhdHVtIGpiLCBKc29uUGF0aCAq anAsIGJvb2wgKmVtcHR5LAorCQkJCQkJCQkgYm9vbCAqZXJyb3IsIExpc3QgKnZhcnMpOwor CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2VjcGcvcHJlcHJvYy9lY3Bn LnRyYWlsZXIgYi9zcmMvaW50ZXJmYWNlcy9lY3BnL3ByZXByb2MvZWNwZy50cmFpbGVyCmlu ZGV4IDQzNWMxMzllYzIuLmY2MDgxODcwNjIgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2Vz L2VjcGcvcHJlcHJvYy9lY3BnLnRyYWlsZXIKKysrIGIvc3JjL2ludGVyZmFjZXMvZWNwZy9w cmVwcm9jL2VjcGcudHJhaWxlcgpAQCAtNzc5LDYgKzc3OSw0MyBAQCB2YXJfdHlwZToJc2lt cGxlX3R5cGUKIAkJCQlzdHJ1Y3RfbWVtYmVyX2xpc3Rbc3RydWN0X2xldmVsXSA9IEVDUEdz dHJ1Y3RfbWVtYmVyX2R1cCh0aGlzLT5zdHJ1Y3RfbWVtYmVyX2xpc3QpOwogCQkJfQogCQl9 CisJCXwgU1RSSU5HX1AKKwkJeworCQkJLyoKKwkJCSAqIEl0J3MgcXVpdGUgaG9ycmlkIHRo YXQgRUNQR0NvbExhYmVsQ29tbW9uIGV4Y2x1ZGVzCisJCQkgKiB1bnJlc2VydmVkX2tleXdv cmQsIG1lYW5pbmcgdGhhdCB1bnJlc2VydmVkIGtleXdvcmRzIGNhbid0IGJlCisJCQkgKiB1 c2VkIGFzIHR5cGUgbmFtZXMgaW4gdmFyX3R5cGUuICBIb3dldmVyLCB0aGlzIGlzIGhhcmQg dG8gYXZvaWQKKwkJCSAqIHNpbmNlIHdoYXQgZm9sbG93cyBlY3Bnc3RhcnQgY2FuIGJlIGVp dGhlciBhIHJhbmRvbSBTUUwKKwkJCSAqIHN0YXRlbWVudCBvciBhbiBFQ1BHVmFyRGVjbGFy YXRpb24gKGJlZ2lubmluZyB3aXRoIHZhcl90eXBlKS4KKwkJCSAqIFBlbmRpbmcgYSBicmln aHQgaWRlYSBhYm91dCBob3cgdG8gZml4IHRoYXQsIHdlIG11c3QKKwkJCSAqIHNwZWNpYWwt Y2FzZSBTVFJJTkcgKGFuZCBhbnkgb3RoZXIgdW5yZXNlcnZlZCBrZXl3b3JkcyB0aGF0IGFy ZQorCQkJICogbGlrZWx5IHRvIGJlIG5lZWRlZCBoZXJlKS4KKwkJCSAqLworCQkJaWYgKElO Rk9STUlYX01PREUpCisJCQl7CisJCQkJJCQudHlwZV9lbnVtID0gRUNQR3Rfc3RyaW5nOwor CQkJCSQkLnR5cGVfc3RyID0gbW1fc3RyZHVwKCJjaGFyIik7CisJCQkJJCQudHlwZV9kaW1l bnNpb24gPSBtbV9zdHJkdXAoIi0xIik7CisJCQkJJCQudHlwZV9pbmRleCA9IG1tX3N0cmR1 cCgiLTEiKTsKKwkJCQkkJC50eXBlX3NpemVvZiA9IE5VTEw7CisJCQl9CisJCQllbHNlCisJ CQl7CisJCQkJLyogdGhpcyBpcyBmb3IgdHlwZWRlZidlZCB0eXBlcyAqLworCQkJCXN0cnVj dCB0eXBlZGVmcyAqdGhpcyA9IGdldF90eXBlZGVmKCJzdHJpbmciLCBmYWxzZSk7CisKKwkJ CQkkJC50eXBlX3N0ciA9ICh0aGlzLT50eXBlLT50eXBlX2VudW0gPT0gRUNQR3RfdmFyY2hh ciB8fCB0aGlzLT50eXBlLT50eXBlX2VudW0gPT0gRUNQR3RfYnl0ZWEpID8gRU1QVFkgOiBt bV9zdHJkdXAodGhpcy0+bmFtZSk7CisJCQkJJCQudHlwZV9lbnVtID0gdGhpcy0+dHlwZS0+ dHlwZV9lbnVtOworCQkJCSQkLnR5cGVfZGltZW5zaW9uID0gdGhpcy0+dHlwZS0+dHlwZV9k aW1lbnNpb247CisJCQkJJCQudHlwZV9pbmRleCA9IHRoaXMtPnR5cGUtPnR5cGVfaW5kZXg7 CisJCQkJaWYgKHRoaXMtPnR5cGUtPnR5cGVfc2l6ZW9mICYmIHN0cmxlbih0aGlzLT50eXBl LT50eXBlX3NpemVvZikgIT0gMCkKKwkJCQkJJCQudHlwZV9zaXplb2YgPSB0aGlzLT50eXBl LT50eXBlX3NpemVvZjsKKwkJCQllbHNlCisJCQkJCSQkLnR5cGVfc2l6ZW9mID0gY2F0X3N0 cigzLCBtbV9zdHJkdXAoInNpemVvZigiKSwgbW1fc3RyZHVwKHRoaXMtPm5hbWUpLCBtbV9z dHJkdXAoIikiKSk7CisKKwkJCQlzdHJ1Y3RfbWVtYmVyX2xpc3Rbc3RydWN0X2xldmVsXSA9 IEVDUEdzdHJ1Y3RfbWVtYmVyX2R1cCh0aGlzLT5zdHJ1Y3RfbWVtYmVyX2xpc3QpOworCQkJ fQorCQl9CiAJCXwgc19zdHJ1Y3RfdW5pb25fc3ltYm9sCiAJCXsKIAkJCS8qIHRoaXMgaXMg Zm9yIG5hbWVkIHN0cnVjdHMvdW5pb25zICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2pzb25fc3FsanNvbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2pzb25fc3FsanNvbi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMC4uOGI4NzU4MDc1MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvanNvbl9zcWxqc29uLm91dApAQCAtMCwwICsxLDE4IEBACistLSBKU09OX0VY SVNUUworU0VMRUNUIEpTT05fRVhJU1RTKE5VTEwgRk9STUFUIEpTT04sICckJyk7CitFUlJP UjogIEpTT05fRVhJU1RTKCkgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBmb3IgdGhlIGpzb24g dHlwZQorTElORSAxOiBTRUxFQ1QgSlNPTl9FWElTVFMoTlVMTCBGT1JNQVQgSlNPTiwgJyQn KTsKKyAgICAgICAgICAgICAgIF4KK0hJTlQ6ICBUcnkgY2FzdGluZyB0aGUgYXJndW1lbnQg dG8ganNvbmIKKy0tIEpTT05fVkFMVUUKK1NFTEVDVCBKU09OX1ZBTFVFKE5VTEwgRk9STUFU IEpTT04sICckJyk7CitFUlJPUjogIEpTT05fVkFMVUUoKSBpcyBub3QgeWV0IGltcGxlbWVu dGVkIGZvciB0aGUganNvbiB0eXBlCitMSU5FIDE6IFNFTEVDVCBKU09OX1ZBTFVFKE5VTEwg Rk9STUFUIEpTT04sICckJyk7CisgICAgICAgICAgICAgICBeCitISU5UOiAgVHJ5IGNhc3Rp bmcgdGhlIGFyZ3VtZW50IHRvIGpzb25iCistLSBKU09OX1FVRVJZCitTRUxFQ1QgSlNPTl9R VUVSWShOVUxMIEZPUk1BVCBKU09OLCAnJCcpOworRVJST1I6ICBKU09OX1FVRVJZKCkgaXMg bm90IHlldCBpbXBsZW1lbnRlZCBmb3IgdGhlIGpzb24gdHlwZQorTElORSAxOiBTRUxFQ1Qg SlNPTl9RVUVSWShOVUxMIEZPUk1BVCBKU09OLCAnJCcpOworICAgICAgICAgICAgICAgXgor SElOVDogIFRyeSBjYXN0aW5nIHRoZSBhcmd1bWVudCB0byBqc29uYgpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9zcWxqc29uLm91dCBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfc3FsanNvbi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMC4uMjRhMWUzZWFiZgotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfc3FsanNvbi5vdXQKQEAgLTAsMCArMSwx MDIwIEBACistLSBKU09OX0VYSVNUUworU0VMRUNUIEpTT05fRVhJU1RTKE5VTEw6Ompzb25i LCAnJCcpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitT RUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ1tdJywgJyQnKTsKKyBqc29uX2V4aXN0cyAKKy0t LS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhKU09OX09C SkVDVChSRVRVUk5JTkcganNvbmIpLCAnJCcpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0t LS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJyQn KTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVD VCBKU09OX0VYSVNUUyhqc29uYiAnbnVsbCcsICckJyk7CisganNvbl9leGlzdHMgCistLS0t LS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ1td JywgJyQnKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisK K1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICckLmEnKTsKKyBqc29uX2V4aXN0cyAK Ky0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29u YiAnMScsICdzdHJpY3QgJC5hJyk7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisg ZgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnc3RyaWN0ICQu YScgRVJST1IgT04gRVJST1IpOworRVJST1I6ICBqc29ucGF0aCBtZW1iZXIgYWNjZXNzb3Ig Y2FuIG9ubHkgYmUgYXBwbGllZCB0byBhbiBvYmplY3QKK1NFTEVDVCBKU09OX0VYSVNUUyhq c29uYiAnbnVsbCcsICckLmEnKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyBm CisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnW10nLCAnJC5hJyk7Cisg anNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgZgorKDEgcm93KQorCitTRUxFQ1QgSlNP Tl9FWElTVFMoanNvbmIgJ1sxLCAiYWFhIiwgeyJhIjogMX1dJywgJ3N0cmljdCAkLmEnKTsK KyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKK1NFTEVDVCBK U09OX0VYSVNUUyhqc29uYiAnWzEsICJhYWEiLCB7ImEiOiAxfV0nLCAnbGF4ICQuYScpOwor IGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIEpT T05fRVhJU1RTKGpzb25iICd7fScsICckLmEnKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0t LS0tLS0KKyBmCisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAneyJiIjog MSwgImEiOiAyfScsICckLmEnKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyB0 CisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICckLmEuYicpOwor IGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIGYKKygxIHJvdykKKworU0VMRUNUIEpT T05fRVhJU1RTKGpzb25iICd7ImEiOiB7ImIiOiAxfX0nLCAnJC5hLmInKTsKKyBqc29uX2V4 aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNU Uyhqc29uYiAneyJhIjogMSwgImIiOiAyfScsICckLmEuYicpOworIGpzb25fZXhpc3RzIAor LS0tLS0tLS0tLS0tLQorIGYKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25i ICd7ImEiOiAxLCAiYiI6IDJ9JywgJyQuKiA/IChAID4gJHgpJyBQQVNTSU5HIDEgQVMgeCk7 CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1Qg SlNPTl9FWElTVFMoanNvbmIgJ3siYSI6IDEsICJiIjogMn0nLCAnJC4qID8gKEAgPiAkeCkn IFBBU1NJTkcgJzEnIEFTIHgpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIGYK KygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7ImEiOiAxLCAiYiI6IDJ9 JywgJyQuKiA/IChAID4gJHggJiYgQCA8ICR5KScgUEFTU0lORyAwIEFTIHgsIDIgQVMgeSk7 CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1Qg SlNPTl9FWElTVFMoanNvbmIgJ3siYSI6IDEsICJiIjogMn0nLCAnJC4qID8gKEAgPiAkeCAm JiBAIDwgJHkpJyBQQVNTSU5HIDAgQVMgeCwgMSBBUyB5KTsKKyBqc29uX2V4aXN0cyAKKy0t LS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKKy0tIGV4dGVuc2lvbjogYm9vbGVhbiBleHBy ZXNzaW9ucworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJyQgPiAyJyk7CisganNv bl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9F WElTVFMoanNvbmIgJzEnLCAnJC5hID4gMicgRVJST1IgT04gRVJST1IpOworIGpzb25fZXhp c3RzIAorLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworLS0gZXh0ZW5zaW9uOiBSRVRV Uk5JTkcgY2xhdXNlCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJFswXScgUkVU VVJOSU5HIGJvb2wpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIHQKKygxIHJv dykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJyRbMV0nIFJFVFVSTklORyBi b29sKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKK1NF TEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICckWzBdJyBSRVRVUk5JTkcgaW50KTsKKyBq c29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgMQorKDEgcm93KQorCitT RUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJFsxXScgUkVUVVJOSU5HIGludCk7Cisg anNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgICAgICAgICAgIDAKKygxIHJvdykKKwor U0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJyRbMF0nIFJFVFVSTklORyB0ZXh0KTsK KyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyB0cnVlCisoMSByb3cpCisKK1NFTEVD VCBKU09OX0VYSVNUUyhqc29uYiAnMScsICckWzFdJyBSRVRVUk5JTkcgdGV4dCk7CisganNv bl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgZmFsc2UKKygxIHJvdykKKworU0VMRUNUIEpT T05fRVhJU1RTKGpzb25iICcxJywgJ3N0cmljdCAkWzFdJyBSRVRVUk5JTkcgdGV4dCBGQUxT RSBPTiBFUlJPUik7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgZmFsc2UKKygx IHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJyRbMF0nIFJFVFVSTklO RyBqc29uYik7CitFUlJPUjogIGNhbm5vdCBjYXN0IHR5cGUgYm9vbGVhbiB0byBqc29uYgor TElORSAxOiBTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJFswXScgUkVUVVJOSU5H IGpzb25iKTsKKyAgICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAn MScsICckWzBdJyBSRVRVUk5JTkcgZmxvYXQ0KTsKK0VSUk9SOiAgY2Fubm90IGNhc3QgdHlw ZSBib29sZWFuIHRvIHJlYWwKK0xJTkUgMTogU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcx JywgJyRbMF0nIFJFVFVSTklORyBmbG9hdDQpOworICAgICAgICAgICAgICAgXgorLS0gSlNP Tl9WQUxVRQorU0VMRUNUIEpTT05fVkFMVUUoTlVMTDo6anNvbmIsICckJyk7CisganNvbl92 YWx1ZSAKKy0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShq c29uYiAnbnVsbCcsICckJyk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIAorKDEg cm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckJyBSRVRVUk5JTkcg aW50KTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgICAgICAgICAgIAorKDEgcm93 KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAndHJ1ZScsICckJyk7CisganNvbl92YWx1 ZSAKKy0tLS0tLS0tLS0tLQorIHRydWUKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUo anNvbmIgJ3RydWUnLCAnJCcgUkVUVVJOSU5HIGJvb2wpOworIGpzb25fdmFsdWUgCistLS0t LS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxMjMn LCAnJCcpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAxMjMKKygxIHJvdykKKwor U0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEyMycsICckJyBSRVRVUk5JTkcgaW50KSArIDIz NDsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAgICAgIDM1NworKDEgcm93KQorCitTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAnMTIzJywgJyQnIFJFVFVSTklORyB0ZXh0KTsKKyBqc29u X3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgMTIzCisoMSByb3cpCisKKy8qIGpzb25iIGJ5dGVh ID8/PyAqLworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEyMycsICckJyBSRVRVUk5JTkcg Ynl0ZWEgRVJST1IgT04gRVJST1IpOworRVJST1I6ICBTUUwvSlNPTiBpdGVtIGNhbm5vdCBi ZSBjYXN0IHRvIHRhcmdldCB0eXBlCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMS4yMycs ICckJyk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIDEuMjMKKygxIHJvdykKKwor U0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEuMjMnLCAnJCcgUkVUVVJOSU5HIGludCk7Cisg anNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorICAgICAgICAgIDEKKygxIHJvdykKKworU0VM RUNUIEpTT05fVkFMVUUoanNvbmIgJyIxLjIzIicsICckJyBSRVRVUk5JTkcgbnVtZXJpYyk7 CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorICAgICAgIDEuMjMKKygxIHJvdykKKwor U0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyIxLjIzIicsICckJyBSRVRVUk5JTkcgaW50IEVS Uk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUg aW50ZWdlcjogIjEuMjMiCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcp OworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyBhYWEKKygxIHJvdykKKworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyB0ZXh0KTsKKyBqc29u X3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgYWFhCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgY2hhcig1KSk7CisganNvbl92YWx1 ZSAKKy0tLS0tLS0tLS0tLQorIGFhYSAgCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVF KGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgY2hhcigyKSk7CisganNvbl92YWx1ZSAK Ky0tLS0tLS0tLS0tLQorIGFhCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25i ICciYWFhIicsICckJyBSRVRVUk5JTkcganNvbik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0t LS0tLQorICJhYWEiCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFh IicsICckJyBSRVRVUk5JTkcganNvbmIpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0K KyAiYWFhIgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAn JCcgUkVUVVJOSU5HIGpzb24gRVJST1IgT04gRVJST1IpOworIGpzb25fdmFsdWUgCistLS0t LS0tLS0tLS0KKyAiYWFhIgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAn ImFhYSInLCAnJCcgUkVUVVJOSU5HIGpzb25iIEVSUk9SIE9OIEVSUk9SKTsKKyBqc29uX3Zh bHVlIAorLS0tLS0tLS0tLS0tCisgImFhYSIKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFM VUUoanNvbmIgJyJcImFhYVwiIicsICckJyBSRVRVUk5JTkcganNvbik7CisganNvbl92YWx1 ZSAKKy0tLS0tLS0tLS0tLQorICJcImFhYVwiIgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAnIlwiYWFhXCIiJywgJyQnIFJFVFVSTklORyBqc29uYik7CisganNvbl92 YWx1ZSAKKy0tLS0tLS0tLS0tLQorICJcImFhYVwiIgorKDEgcm93KQorCitTRUxFQ1QgSlNP Tl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGludCk7CisganNvbl92YWx1 ZSAKKy0tLS0tLS0tLS0tLQorICAgICAgICAgICAKKygxIHJvdykKKworU0VMRUNUIEpTT05f VkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBpbnQgRVJST1IgT04gRVJST1Ip OworRVJST1I6ICBpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSBpbnRlZ2VyOiAiYWFh IgorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBpbnQg REVGQVVMVCAxMTEgT04gRVJST1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAg ICAgICAgMTExCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciMTIzIics ICckJyBSRVRVUk5JTkcgaW50KSArIDIzNDsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAg ICAgIDM1NworKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIjIwMTctMDIt MjAiJywgJyQnIFJFVFVSTklORyBkYXRlKSArIDk7CisgID9jb2x1bW4/ICAKKy0tLS0tLS0t LS0tLQorIDAzLTAxLTIwMTcKKygxIHJvdykKKworLS0gVGVzdCBOVUxMIGNoZWNrcyBleGVj dXRpb24gaW4gZG9tYWluIHR5cGVzCitDUkVBVEUgRE9NQUlOIHNxbGpzb25iX2ludF9ub3Rf bnVsbCBBUyBpbnQgTk9UIE5VTEw7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICck LmEnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwpOworRVJST1I6ICBkb21haW4g c3FsanNvbmJfaW50X25vdF9udWxsIGRvZXMgbm90IGFsbG93IG51bGwgdmFsdWVzCitTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9pbnRf bm90X251bGwgTlVMTCBPTiBFUlJPUik7CitFUlJPUjogIGRvbWFpbiBzcWxqc29uYl9pbnRf bm90X251bGwgZG9lcyBub3QgYWxsb3cgbnVsbCB2YWx1ZXMKK1NFTEVDVCBKU09OX1ZBTFVF KGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCBERUZB VUxUIE5VTEwgT04gRVJST1IpOworRVJST1I6ICBkb21haW4gc3FsanNvbmJfaW50X25vdF9u dWxsIGRvZXMgbm90IGFsbG93IG51bGwgdmFsdWVzCitTRUxFQ1QgSlNPTl9WQUxVRShqc29u YiAnW10nLCAnJCcpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAKKygxIHJvdykK KworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ1tdJywgJyQnIEVSUk9SIE9OIEVSUk9SKTsK K0VSUk9SOiAgSlNPTiBwYXRoIGV4cHJlc3Npb24gaW4gSlNPTl9WQUxVRSBzaG91bGQgcmV0 dXJuIHNpbmdsZXRvbiBzY2FsYXIgaXRlbQorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ3t9 JywgJyQnKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NF TEVDVCBKU09OX1ZBTFVFKGpzb25iICd7fScsICckJyBFUlJPUiBPTiBFUlJPUik7CitFUlJP UjogIEpTT04gcGF0aCBleHByZXNzaW9uIGluIEpTT05fVkFMVUUgc2hvdWxkIHJldHVybiBz aW5nbGV0b24gc2NhbGFyIGl0ZW0KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQu YScpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJzEnLCAnc3RyaWN0ICQuYScgRVJST1IgT04gRVJST1IpOwor RVJST1I6ICBqc29ucGF0aCBtZW1iZXIgYWNjZXNzb3IgY2FuIG9ubHkgYmUgYXBwbGllZCB0 byBhbiBvYmplY3QKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJ3N0cmljdCAkLmEn IERFRkFVTFQgJ2Vycm9yJyBPTiBFUlJPUik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0t LQorIGVycm9yCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJ2xh eCAkLmEnIEVSUk9SIE9OIEVSUk9SKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisg CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJ2xheCAkLmEnIEVS Uk9SIE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgbm8gU1FML0pTT04gaXRl bQorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnc3RyaWN0ICQuYScgREVGQVVMVCAy IE9OIEVSUk9SKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgMgorKDEgcm93KQor CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICdsYXggJC5hJyBERUZBVUxUIDIgT04g RVJST1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VM RUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnbGF4ICQuYScgREVGQVVMVCAnMicgT04gRVJS T1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJzEnLCAnbGF4ICQuYScgTlVMTCBPTiBFTVBUWSBERUZBVUxU ICcyJyBPTiBFUlJPUik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIAorKDEgcm93 KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICdsYXggJC5hJyBERUZBVUxUICcy JyBPTiBFTVBUWSBERUZBVUxUICczJyBPTiBFUlJPUik7CisganNvbl92YWx1ZSAKKy0tLS0t LS0tLS0tLQorIDIKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAn bGF4ICQuYScgRVJST1IgT04gRU1QVFkgREVGQVVMVCAnMycgT04gRVJST1IpOworIGpzb25f dmFsdWUgCistLS0tLS0tLS0tLS0KKyAzCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVF KGpzb25iICdbMSwyXScsICckWypdJyBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIEpTT04g cGF0aCBleHByZXNzaW9uIGluIEpTT05fVkFMVUUgc2hvdWxkIHJldHVybiBzaW5nbGV0b24g c2NhbGFyIGl0ZW0KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbMSwyXScsICckWypdJyBE RUZBVUxUICcwJyBPTiBFUlJPUik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIDAK KygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ1siICJdJywgJyRbKl0nIFJF VFVSTklORyBpbnQgRVJST1IgT04gRVJST1IpOworRVJST1I6ICBpbnZhbGlkIGlucHV0IHN5 bnRheCBmb3IgdHlwZSBpbnRlZ2VyOiAiICIKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdb IiAiXScsICckWypdJyBSRVRVUk5JTkcgaW50IERFRkFVTFQgMiArIDMgT04gRVJST1IpOwor IGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAgICAgICAgICA1CisoMSByb3cpCisKK1NF TEVDVCBKU09OX1ZBTFVFKGpzb25iICdbIjEiXScsICckWypdJyBSRVRVUk5JTkcgaW50IERF RkFVTFQgMiArIDMgT04gRVJST1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAg ICAgICAgICAxCisoMSByb3cpCisKK1NFTEVDVAorCXgsCisJSlNPTl9WQUxVRSgKKwkJanNv bmIgJ3siYSI6IDEsICJiIjogMn0nLAorCQknJC4qID8gKEAgPiAkeCknIFBBU1NJTkcgeCBB UyB4CisJCVJFVFVSTklORyBpbnQKKwkJREVGQVVMVCAtMSBPTiBFTVBUWQorCQlERUZBVUxU IC0yIE9OIEVSUk9SCisJKSB5CitGUk9NCisJZ2VuZXJhdGVfc2VyaWVzKDAsIDIpIHg7Cisg eCB8IHkgIAorLS0tKy0tLS0KKyAwIHwgLTIKKyAxIHwgIDIKKyAyIHwgLTEKKygzIHJvd3Mp CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyRhJyBQQVNTSU5HIHBvaW50 ICcgKDEsIDIgKScgQVMgYSk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorICgxLDIp CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyRhJyBQQVNT SU5HIHBvaW50ICcgKDEsIDIgKScgQVMgYSBSRVRVUk5JTkcgcG9pbnQpOworIGpzb25fdmFs dWUgCistLS0tLS0tLS0tLS0KKyAoMSwyKQorKDEgcm93KQorCistLSBUZXN0IHRpbWVzdGFt cHR6IHBhc3NpbmcgYW5kIG91dHB1dAorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwn LCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcg QVMgdHMpOworICAgICAgICAgIGpzb25fdmFsdWUgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBUdWUgRmViIDIwIDE4OjM0OjU2IDIwMTggUFNUCisoMSBy b3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0 aW1lc3RhbXB0eiAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyB0 aW1lc3RhbXB0eik7CisgICAgICAgICAganNvbl92YWx1ZSAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFR1ZSBGZWIgMjAgMTg6MzQ6NTYgMjAxOCBQU1QK KygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNT SU5HIHRpbWVzdGFtcHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJO SU5HIHRpbWVzdGFtcCk7CisgICAgICAgIGpzb25fdmFsdWUgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBUdWUgRmViIDIwIDE4OjM0OjU2IDIwMTgKKygxIHJvdykK KworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVz dGFtcHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5HIGpzb24p OworICAgICAgICAganNvbl92YWx1ZSAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgIjIwMTgtMDItMjFUMDI6MzQ6NTYrMDA6MDAiCisoMSByb3cpCisKK1NF TEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0 eiAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyBqc29uYik7Cisg ICAgICAgICBqc29uX3ZhbHVlICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAiMjAxOC0wMi0yMVQwMjozNDo1NiswMDowMCIKKygxIHJvdykKKworLS0gSlNP Tl9RVUVSWQorU0VMRUNUCisJSlNPTl9RVUVSWShqcywgJyQnKSwKKwlKU09OX1FVRVJZKGpz LCAnJCcgV0lUSE9VVCBXUkFQUEVSKSwKKwlKU09OX1FVRVJZKGpzLCAnJCcgV0lUSCBDT05E SVRJT05BTCBXUkFQUEVSKSwKKwlKU09OX1FVRVJZKGpzLCAnJCcgV0lUSCBVTkNPTkRJVElP TkFMIEFSUkFZIFdSQVBQRVIpLAorCUpTT05fUVVFUlkoanMsICckJyBXSVRIIEFSUkFZIFdS QVBQRVIpCitGUk9NCisJKFZBTFVFUworCQkoanNvbmIgJ251bGwnKSwKKwkJKCcxMi4zJyks CisJCSgndHJ1ZScpLAorCQkoJyJhYWEiJyksCisJCSgnWzEsIG51bGwsICIyIl0nKSwKKwkJ KCd7ImEiOiAxLCAiYiI6IFsyXX0nKQorCSkgZm9vKGpzKTsKKyAgICAganNvbl9xdWVyeSAg ICAgfCAgICAganNvbl9xdWVyeSAgICAgfCAgICAganNvbl9xdWVyeSAgICAgfCAgICAgIGpz b25fcXVlcnkgICAgICB8ICAgICAganNvbl9xdWVyeSAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgbnVsbCAgICAgICAg ICAgICAgIHwgbnVsbCAgICAgICAgICAgICAgIHwgW251bGxdICAgICAgICAgICAgIHwgW251 bGxdICAgICAgICAgICAgICAgfCBbbnVsbF0KKyAxMi4zICAgICAgICAgICAgICAgfCAxMi4z ICAgICAgICAgICAgICAgfCBbMTIuM10gICAgICAgICAgICAgfCBbMTIuM10gICAgICAgICAg ICAgICB8IFsxMi4zXQorIHRydWUgICAgICAgICAgICAgICB8IHRydWUgICAgICAgICAgICAg ICB8IFt0cnVlXSAgICAgICAgICAgICB8IFt0cnVlXSAgICAgICAgICAgICAgIHwgW3RydWVd CisgImFhYSIgICAgICAgICAgICAgIHwgImFhYSIgICAgICAgICAgICAgIHwgWyJhYWEiXSAg ICAgICAgICAgIHwgWyJhYWEiXSAgICAgICAgICAgICAgfCBbImFhYSJdCisgWzEsIG51bGws ICIyIl0gICAgIHwgWzEsIG51bGwsICIyIl0gICAgIHwgWzEsIG51bGwsICIyIl0gICAgIHwg W1sxLCBudWxsLCAiMiJdXSAgICAgfCBbWzEsIG51bGwsICIyIl1dCisgeyJhIjogMSwgImIi OiBbMl19IHwgeyJhIjogMSwgImIiOiBbMl19IHwgeyJhIjogMSwgImIiOiBbMl19IHwgW3si YSI6IDEsICJiIjogWzJdfV0gfCBbeyJhIjogMSwgImIiOiBbMl19XQorKDYgcm93cykKKwor U0VMRUNUCisJSlNPTl9RVUVSWShqcywgJ3N0cmljdCAkWypdJykgQVMgInVuc3BlYyIsCisJ SlNPTl9RVUVSWShqcywgJ3N0cmljdCAkWypdJyBXSVRIT1VUIFdSQVBQRVIpIEFTICJ3aXRo b3V0IiwKKwlKU09OX1FVRVJZKGpzLCAnc3RyaWN0ICRbKl0nIFdJVEggQ09ORElUSU9OQUwg V1JBUFBFUikgQVMgIndpdGggY29uZCIsCisJSlNPTl9RVUVSWShqcywgJ3N0cmljdCAkWypd JyBXSVRIIFVOQ09ORElUSU9OQUwgQVJSQVkgV1JBUFBFUikgQVMgIndpdGggdW5jb25kIiwK KwlKU09OX1FVRVJZKGpzLCAnc3RyaWN0ICRbKl0nIFdJVEggQVJSQVkgV1JBUFBFUikgQVMg IndpdGgiCitGUk9NCisJKFZBTFVFUworCQkoanNvbmIgJzEnKSwKKwkJKCdbXScpLAorCQko J1tudWxsXScpLAorCQkoJ1sxMi4zXScpLAorCQkoJ1t0cnVlXScpLAorCQkoJ1siYWFhIl0n KSwKKwkJKCdbWzEsIDIsIDNdXScpLAorCQkoJ1t7ImEiOiAxLCAiYiI6IFsyXX1dJyksCisJ CSgnWzEsICIyIiwgbnVsbCwgWzNdXScpCisJKSBmb28oanMpOworICAgICAgIHVuc3BlYyAg ICAgICB8ICAgICAgd2l0aG91dCAgICAgICB8ICAgICAgd2l0aCBjb25kICAgICAgfCAgICAg d2l0aCB1bmNvbmQgICAgICB8ICAgICAgICAgd2l0aCAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAg ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg fCAgICAgICAgICAgICAgICAgICAgICB8IAorICAgICAgICAgICAgICAgICAgICB8ICAgICAg ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg ICAgICB8IAorIG51bGwgICAgICAgICAgICAgICB8IG51bGwgICAgICAgICAgICAgICB8IFtu dWxsXSAgICAgICAgICAgICAgfCBbbnVsbF0gICAgICAgICAgICAgICB8IFtudWxsXQorIDEy LjMgICAgICAgICAgICAgICB8IDEyLjMgICAgICAgICAgICAgICB8IFsxMi4zXSAgICAgICAg ICAgICAgfCBbMTIuM10gICAgICAgICAgICAgICB8IFsxMi4zXQorIHRydWUgICAgICAgICAg ICAgICB8IHRydWUgICAgICAgICAgICAgICB8IFt0cnVlXSAgICAgICAgICAgICAgfCBbdHJ1 ZV0gICAgICAgICAgICAgICB8IFt0cnVlXQorICJhYWEiICAgICAgICAgICAgICB8ICJhYWEi ICAgICAgICAgICAgICB8IFsiYWFhIl0gICAgICAgICAgICAgfCBbImFhYSJdICAgICAgICAg ICAgICB8IFsiYWFhIl0KKyBbMSwgMiwgM10gICAgICAgICAgfCBbMSwgMiwgM10gICAgICAg ICAgfCBbMSwgMiwgM10gICAgICAgICAgIHwgW1sxLCAyLCAzXV0gICAgICAgICAgfCBbWzEs IDIsIDNdXQorIHsiYSI6IDEsICJiIjogWzJdfSB8IHsiYSI6IDEsICJiIjogWzJdfSB8IHsi YSI6IDEsICJiIjogWzJdfSAgfCBbeyJhIjogMSwgImIiOiBbMl19XSB8IFt7ImEiOiAxLCAi YiI6IFsyXX1dCisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwg WzEsICIyIiwgbnVsbCwgWzNdXSB8IFsxLCAiMiIsIG51bGwsIFszXV0gIHwgWzEsICIyIiwg bnVsbCwgWzNdXQorKDkgcm93cykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEi JywgJyQnIFJFVFVSTklORyB0ZXh0KTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisg ImFhYSIKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEiJywgJyQn IFJFVFVSTklORyB0ZXh0IEtFRVAgUVVPVEVTKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0t LS0tCisgImFhYSIKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEi JywgJyQnIFJFVFVSTklORyB0ZXh0IEtFRVAgUVVPVEVTIE9OIFNDQUxBUiBTVFJJTkcpOwor IGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyAiYWFhIgorKDEgcm93KQorCitTRUxFQ1Qg SlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIHRleHQgT01JVCBRVU9U RVMpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyBhYWEKKygxIHJvdykKKworU0VM RUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyB0ZXh0IE9NSVQg UVVPVEVTIE9OIFNDQUxBUiBTVFJJTkcpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0K KyBhYWEKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEiJywgJyQn IE9NSVQgUVVPVEVTIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgaW52YWxpZCBpbnB1dCBz eW50YXggZm9yIHR5cGUganNvbgorREVUQUlMOiAgVG9rZW4gImFhYSIgaXMgaW52YWxpZC4K K0NPTlRFWFQ6ICBKU09OIGRhdGEsIGxpbmUgMTogYWFhCitTRUxFQ1QgSlNPTl9RVUVSWShq c29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGpzb24gT01JVCBRVU9URVMgRVJST1IgT04g RVJST1IpOworRVJST1I6ICBpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSBqc29uCitE RVRBSUw6ICBUb2tlbiAiYWFhIiBpcyBpbnZhbGlkLgorQ09OVEVYVDogIEpTT04gZGF0YSwg bGluZSAxOiBhYWEKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciYWFhIicsICckJyBSRVRV Uk5JTkcgYnl0ZWEgRk9STUFUIEpTT04gT01JVCBRVU9URVMgRVJST1IgT04gRVJST1IpOwor IGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyBceDYxNjE2MQorKDEgcm93KQorCistLSBR VU9URVMgYmVoYXZpb3Igc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQgd2hlbiBXSVRIIFdSQVBQ RVIgdXNlZDoKKy0tIFNob3VsZCBmYWlsCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzFd JywgJyQnIFdJVEggV1JBUFBFUiBPTUlUIFFVT1RFUyk7CitFUlJPUjogIFNRTC9KU09OIFFV T1RFUyBiZWhhdmlvciBtdXN0IG5vdCBiZSBzcGVjaWZpZWQgd2hlbiBXSVRIIFdSQVBQRVIg aXMgdXNlZAorTElORSAxOiBTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzFdJywgJyQnIFdJ VEggV1JBUFBFUiBPTUlUIFFVT1RFUykuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorU0VMRUNUIEpTT05fUVVFUlkoanNv bmIgJ1sxXScsICckJyBXSVRIIFdSQVBQRVIgS0VFUCBRVU9URVMpOworRVJST1I6ICBTUUwv SlNPTiBRVU9URVMgYmVoYXZpb3IgbXVzdCBub3QgYmUgc3BlY2lmaWVkIHdoZW4gV0lUSCBX UkFQUEVSIGlzIHVzZWQKK0xJTkUgMTogU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScs ICckJyBXSVRIIFdSQVBQRVIgS0VFUCBRVU9URVMpLi4uCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09OX1FV RVJZKGpzb25iICdbMV0nLCAnJCcgV0lUSCBDT05ESVRJT05BTCBXUkFQUEVSIEtFRVAgUVVP VEVTKTsKK0VSUk9SOiAgU1FML0pTT04gUVVPVEVTIGJlaGF2aW9yIG11c3Qgbm90IGJlIHNw ZWNpZmllZCB3aGVuIFdJVEggV1JBUFBFUiBpcyB1c2VkCitMSU5FIDE6IC4uLk5fUVVFUlko anNvbmIgJ1sxXScsICckJyBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIgS0VFUCBRVU9URS4u LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF4KK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMV0nLCAnJCcgV0lUSCBD T05ESVRJT05BTCBXUkFQUEVSIE9NSVQgUVVPVEVTKTsKK0VSUk9SOiAgU1FML0pTT04gUVVP VEVTIGJlaGF2aW9yIG11c3Qgbm90IGJlIHNwZWNpZmllZCB3aGVuIFdJVEggV1JBUFBFUiBp cyB1c2VkCitMSU5FIDE6IC4uLk5fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRIIENPTkRJ VElPTkFMIFdSQVBQRVIgT01JVCBRVU9URS4uLgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKy0tIFNob3VsZCBzdWNj ZWVkCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzFdJywgJyQnIFdJVEhPVVQgV1JBUFBF UiBPTUlUIFFVT1RFUyk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIFsxXQorKDEg cm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzFdJywgJyQnIFdJVEhPVVQgV1JB UFBFUiBLRUVQIFFVT1RFUyk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIFsxXQor KDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScpOworIGpz b25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVF UlkoanNvbmIgJ1tdJywgJyRbKl0nIE5VTEwgT04gRU1QVFkpOworIGpzb25fcXVlcnkgCist LS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1td JywgJyRbKl0nIEVNUFRZIE9OIEVNUFRZKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0t CisgW10KKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0n IEVNUFRZIEFSUkFZIE9OIEVNUFRZKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisg W10KKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIEVN UFRZIE9CSkVDVCBPTiBFTVBUWSk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIHt9 CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBFUlJP UiBPTiBFTVBUWSk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIAorKDEgcm93KQor CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgREVGQVVMVCAnImVtcHR5 IicgT04gRU1QVFkpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyAiZW1wdHkiCiso MSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBFUlJPUiBP TiBFTVBUWSBOVUxMIE9OIEVSUk9SKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisg CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBFUlJP UiBPTiBFTVBUWSBFTVBUWSBBUlJBWSBPTiBFUlJPUik7CisganNvbl9xdWVyeSAKKy0tLS0t LS0tLS0tLQorIFtdCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScs ICckWypdJyBFUlJPUiBPTiBFTVBUWSBFTVBUWSBPQkpFQ1QgT04gRVJST1IpOworIGpzb25f cXVlcnkgCistLS0tLS0tLS0tLS0KKyB7fQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVS WShqc29uYiAnW10nLCAnJFsqXScgRVJST1IgT04gRU1QVFkgRVJST1IgT04gRVJST1IpOwor RVJST1I6ICBubyBTUUwvSlNPTiBpdGVtCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10n LCAnJFsqXScgRVJST1IgT04gRVJST1IpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0K KyAKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0n IEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgSlNPTiBwYXRoIGV4cHJlc3Npb24gaW4gSlNP Tl9RVUVSWSBzaG91bGQgcmV0dXJuIHNpbmdsZXRvbiBpdGVtIHdpdGhvdXQgd3JhcHBlcgor SElOVDogIFVzZSBXSVRIIFdSQVBQRVIgY2xhdXNlIHRvIHdyYXAgU1FML0pTT04gaXRlbSBz ZXF1ZW5jZSBpbnRvIGFycmF5LgorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywg JyRbKl0nIERFRkFVTFQgJyJlbXB0eSInIE9OIEVSUk9SKTsKKyBqc29uX3F1ZXJ5IAorLS0t LS0tLS0tLS0tCisgImVtcHR5IgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29u YiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIGpzb24pOworIGpzb25fcXVlcnkgCistLS0tLS0t LS0tLS0KKyBbMSwgMl0KKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sx LDJdJywgJyQnIFJFVFVSTklORyBqc29uIEZPUk1BVCBKU09OKTsKKyBqc29uX3F1ZXJ5IAor LS0tLS0tLS0tLS0tCisgWzEsIDJdCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpz b25iICdbMSwyXScsICckJyBSRVRVUk5JTkcganNvbmIpOworIGpzb25fcXVlcnkgCistLS0t LS0tLS0tLS0KKyBbMSwgMl0KKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIg J1sxLDJdJywgJyQnIFJFVFVSTklORyBqc29uYiBGT1JNQVQgSlNPTik7CisganNvbl9xdWVy eSAKKy0tLS0tLS0tLS0tLQorIFsxLCAyXQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVS WShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIHRleHQpOworIGpzb25fcXVlcnkgCist LS0tLS0tLS0tLS0KKyBbMSwgMl0KKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNv bmIgJ1sxLDJdJywgJyQnIFJFVFVSTklORyBjaGFyKDEwKSk7CisganNvbl9xdWVyeSAKKy0t LS0tLS0tLS0tLQorIFsxLCAyXSAgICAKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlko anNvbmIgJ1sxLDJdJywgJyQnIFJFVFVSTklORyBjaGFyKDMpKTsKKyBqc29uX3F1ZXJ5IAor LS0tLS0tLS0tLS0tCisgWzEsCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25i ICdbMSwyXScsICckJyBSRVRVUk5JTkcgdGV4dCBGT1JNQVQgSlNPTik7CisganNvbl9xdWVy eSAKKy0tLS0tLS0tLS0tLQorIFsxLCAyXQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVS WShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIGJ5dGVhKTsKKyAgIGpzb25fcXVlcnkg ICAKKy0tLS0tLS0tLS0tLS0tLS0KKyBceDViMzEyYzIwMzI1ZAorKDEgcm93KQorCitTRUxF Q1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIGJ5dGVhIEZPUk1B VCBKU09OKTsKKyAgIGpzb25fcXVlcnkgICAKKy0tLS0tLS0tLS0tLS0tLS0KKyBceDViMzEy YzIwMzI1ZAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAn JFsqXScgUkVUVVJOSU5HIGJ5dGVhIEVNUFRZIE9CSkVDVCBPTiBFUlJPUik7CisganNvbl9x dWVyeSAKKy0tLS0tLS0tLS0tLQorIFx4N2I3ZAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9R VUVSWShqc29uYiAnWzEsMl0nLCAnJFsqXScgUkVUVVJOSU5HIGJ5dGVhIEZPUk1BVCBKU09O IEVNUFRZIE9CSkVDVCBPTiBFUlJPUik7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQor IFx4N2I3ZAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAn JFsqXScgUkVUVVJOSU5HIGpzb24gRU1QVFkgT0JKRUNUIE9OIEVSUk9SKTsKKyBqc29uX3F1 ZXJ5IAorLS0tLS0tLS0tLS0tCisge30KKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlko anNvbmIgJ1sxLDJdJywgJyRbKl0nIFJFVFVSTklORyBqc29uYiBFTVBUWSBPQkpFQ1QgT04g RVJST1IpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyB7fQorKDEgcm93KQorCitT RUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzMsNF0nLCAnJFsqXScgUkVUVVJOSU5HIGJpZ2lu dFtdIEVNUFRZIE9CSkVDVCBPTiBFUlJPUik7CitFUlJPUjogIGV4cGVjdGVkIEpTT04gYXJy YXkKK1NFTEVDVAorCXgsIHksCisJSlNPTl9RVUVSWSgKKwkJanNvbmIgJ1sxLDIsMyw0LDUs bnVsbF0nLAorCQknJFsqXSA/IChAID49ICR4ICYmIEAgPD0gJHkpJworCQlQQVNTSU5HIHgg QVMgeCwgeSBBUyB5CisJCVdJVEggQ09ORElUSU9OQUwgV1JBUFBFUgorCQlFTVBUWSBBUlJB WSBPTiBFTVBUWQorCSkgbGlzdAorRlJPTQorCWdlbmVyYXRlX3NlcmllcygwLCA0KSB4LAor CWdlbmVyYXRlX3NlcmllcygwLCA0KSB5OworIHggfCB5IHwgICAgIGxpc3QgICAgIAorLS0t Ky0tLSstLS0tLS0tLS0tLS0tLQorIDAgfCAwIHwgW10KKyAwIHwgMSB8IFsxXQorIDAgfCAy IHwgWzEsIDJdCisgMCB8IDMgfCBbMSwgMiwgM10KKyAwIHwgNCB8IFsxLCAyLCAzLCA0XQor IDEgfCAwIHwgW10KKyAxIHwgMSB8IFsxXQorIDEgfCAyIHwgWzEsIDJdCisgMSB8IDMgfCBb MSwgMiwgM10KKyAxIHwgNCB8IFsxLCAyLCAzLCA0XQorIDIgfCAwIHwgW10KKyAyIHwgMSB8 IFtdCisgMiB8IDIgfCBbMl0KKyAyIHwgMyB8IFsyLCAzXQorIDIgfCA0IHwgWzIsIDMsIDRd CisgMyB8IDAgfCBbXQorIDMgfCAxIHwgW10KKyAzIHwgMiB8IFtdCisgMyB8IDMgfCBbM10K KyAzIHwgNCB8IFszLCA0XQorIDQgfCAwIHwgW10KKyA0IHwgMSB8IFtdCisgNCB8IDIgfCBb XQorIDQgfCAzIHwgW10KKyA0IHwgNCB8IFs0XQorKDI1IHJvd3MpCisKKy0tIEV4dGVuc2lv bjogcmVjb3JkIHR5cGVzIHJldHVybmluZworQ1JFQVRFIFRZUEUgc3FsanNvbmJfcmVjIEFT IChhIGludCwgdCB0ZXh0LCBqcyBqc29uLCBqYiBqc29uYiwganNhIGpzb25bXSk7CitDUkVB VEUgVFlQRSBzcWxqc29uYl9yZWNhIEFTIChyZWNhIHNxbGpzb25iX3JlY1tdKTsKK1NFTEVD VCBKU09OX1FVRVJZKGpzb25iICdbeyJhIjogMSwgImIiOiAiZm9vIiwgInQiOiAiYWFhIiwg ImpzIjogWzEsICIyIiwge31dLCAiamIiOiB7IngiOiBbMSwgIjIiLCB7fV19fSwgIHsiYSI6 IDJ9XScsICckWzBdJyBSRVRVUk5JTkcgc3FsanNvbmJfcmVjKTsKKyAgICAgICAgICAgICAg ICAgICAgIGpzb25fcXVlcnkgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICgxLGFhYSwiWzEs ICIiMiIiLCB7fV0iLCJ7IiJ4IiI6IFsxLCAiIjIiIiwge31dfSIsKQorKDEgcm93KQorCitT RUxFQ1QgKiBGUk9NIHVubmVzdCgoSlNPTl9RVUVSWShqc29uYiAneyJqc2EiOiAgW3siYSI6 IDEsICJiIjogWyJmb28iXX0sIHsiYSI6IDIsICJjIjoge319LCAxMjNdfScsICckJyBSRVRV Uk5JTkcgc3FsanNvbmJfcmVjKSkuanNhKTsKKyAgICAgICAgIHVubmVzdCAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgeyJhIjogMSwgImIiOiBbImZvbyJdfQorIHsi YSI6IDIsICJjIjoge319CisgMTIzCisoMyByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHVubmVz dCgoSlNPTl9RVUVSWShqc29uYiAneyJyZWNhIjogW3siYSI6IDEsICJ0IjogWyJmb28iLCBb XV19LCB7ImEiOiAyLCAiamIiOiBbe30sIHRydWVdfV19JywgJyQnIFJFVFVSTklORyBzcWxq c29uYl9yZWNhKSkucmVjYSk7CisgYSB8ICAgICAgdCAgICAgIHwganMgfCAgICAgamIgICAg IHwganNhIAorLS0tKy0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0KKyAx IHwgWyJmb28iLCBbXV0gfCAgICB8ICAgICAgICAgICAgfCAKKyAyIHwgICAgICAgICAgICAg fCAgICB8IFt7fSwgdHJ1ZV0gfCAKKygyIHJvd3MpCisKKy0tIEV4dGVuc2lvbjogYXJyYXkg dHlwZXMgcmV0dXJuaW5nCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMixudWxsLCIz Il0nLCAnJFsqXScgUkVUVVJOSU5HIGludFtdIFdJVEggV1JBUFBFUik7CisgIGpzb25fcXVl cnkgIAorLS0tLS0tLS0tLS0tLS0KKyB7MSwyLE5VTEwsM30KKygxIHJvdykKKworU0VMRUNU ICogRlJPTSB1bm5lc3QoSlNPTl9RVUVSWShqc29uYiAnW3siYSI6IDEsICJ0IjogWyJmb28i LCBbXV19LCB7ImEiOiAyLCAiamIiOiBbe30sIHRydWVdfV0nLCAnJCcgUkVUVVJOSU5HIHNx bGpzb25iX3JlY1tdKSk7CisgYSB8ICAgICAgdCAgICAgIHwganMgfCAgICAgamIgICAgIHwg anNhIAorLS0tKy0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0KKyAxIHwg WyJmb28iLCBbXV0gfCAgICB8ICAgICAgICAgICAgfCAKKyAyIHwgICAgICAgICAgICAgfCAg ICB8IFt7fSwgdHJ1ZV0gfCAKKygyIHJvd3MpCisKKy0tIEV4dGVuc2lvbjogZG9tYWluIHR5 cGVzIHJldHVybmluZworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDF9JywgJyQu YScgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCk7CisganNvbl9xdWVyeSAKKy0t LS0tLS0tLS0tLQorICAgICAgICAgIDEKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlko anNvbmIgJ3siYSI6IDF9JywgJyQuYicgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVs bCk7CitFUlJPUjogIGRvbWFpbiBzcWxqc29uYl9pbnRfbm90X251bGwgZG9lcyBub3QgYWxs b3cgbnVsbCB2YWx1ZXMKKy0tIFRlc3QgdGltZXN0YW1wdHogcGFzc2luZyBhbmQgb3V0cHV0 CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0 YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyk7CisgICAgICAgICBqc29u X3F1ZXJ5ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAiMjAx OC0wMi0yMVQwMjozNDo1NiswMDowMCIKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlko anNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4LTAyLTIxIDEy OjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5HIGpzb24pOworICAgICAgICAganNvbl9xdWVy eSAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIjIwMTgtMDIt MjFUMDI6MzQ6NTYrMDA6MDAiCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25i ICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAxOC0wMi0yMSAxMjozNDo1 NiArMTAnIEFTIHRzIFJFVFVSTklORyBqc29uYik7CisgICAgICAgICBqc29uX3F1ZXJ5ICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAiMjAxOC0wMi0yMVQw MjozNDo1NiswMDowMCIKKygxIHJvdykKKworLS0gVGVzdCBjb25zdHJhaW50cworQ1JFQVRF IFRBQkxFIHRlc3RfanNvbmJfY29uc3RyYWludHMgKAorCWpzIHRleHQsCisJaSBpbnQsCisJ eCBqc29uYiBERUZBVUxUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIFdJVEgg V1JBUFBFUikKKwlDT05TVFJBSU5UIHRlc3RfanNvbmJfY29uc3RyYWludDEKKwkJQ0hFQ0sg KGpzIElTIEpTT04pCisJQ09OU1RSQUlOVCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQyCisJCUNI RUNLIChKU09OX0VYSVNUUyhqczo6anNvbmIsICckLmEnIFBBU1NJTkcgaSArIDUgQVMgaW50 LCBpOjp0ZXh0IEFTIHR4dCwgYXJyYXlbMSwyLDNdIGFzIGFycikpCisJQ09OU1RSQUlOVCB0 ZXN0X2pzb25iX2NvbnN0cmFpbnQzCisJCUNIRUNLIChKU09OX1ZBTFVFKGpzOjpqc29uYiwg JyQuYScgUkVUVVJOSU5HIGludCBERUZBVUxUICgnMTInIHx8IGkpOjppbnQgT04gRU1QVFkg RVJST1IgT04gRVJST1IpID4gaSkKKwlDT05TVFJBSU5UIHRlc3RfanNvbmJfY29uc3RyYWlu dDQKKwkJQ0hFQ0sgKEpTT05fUVVFUlkoanM6Ompzb25iLCAnJC5hJyBXSVRIIENPTkRJVElP TkFMIFdSQVBQRVIgRU1QVFkgT0JKRUNUIE9OIEVSUk9SKSA8IGpzb25iICdbMTBdJykKKwlD T05TVFJBSU5UIHRlc3RfanNvbmJfY29uc3RyYWludDUKKwkJQ0hFQ0sgKEpTT05fUVVFUlko anM6Ompzb25iLCAnJC5hJyBSRVRVUk5JTkcgY2hhcig1KSBPTUlUIFFVT1RFUyBFTVBUWSBB UlJBWSBPTiBFTVBUWSkgPiAgJ2EnIENPTExBVEUgIkMiKQorCUNPTlNUUkFJTlQgdGVzdF9q c29uYl9jb25zdHJhaW50NgorCQlDSEVDSyAoSlNPTl9FWElTVFMoanM6Ompzb25iLCAnc3Ry aWN0ICQuYScgUkVUVVJOSU5HIGludCBUUlVFIE9OIEVSUk9SKSA8IDIpCispOworXGQgdGVz dF9qc29uYl9jb25zdHJhaW50cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVGFibGUgInB1YmxpYy50ZXN0X2pzb25iX2NvbnN0cmFpbnRzIgorIENvbHVt biB8ICBUeXBlICAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRGVmYXVsdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisganMgICAgIHwgdGV4dCAgICB8ICAgICAgICAg ICB8ICAgICAgICAgIHwgCisgaSAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAg ICAgIHwgCisgeCAgICAgIHwganNvbmIgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgSlNP Tl9RVUVSWSgnWzEsIDJdJzo6anNvbmIsICckWypdJyBSRVRVUk5JTkcganNvbmIgV0lUSCBV TkNPTkRJVElPTkFMIFdSQVBQRVIpCitDaGVjayBjb25zdHJhaW50czoKKyAgICAidGVzdF9q c29uYl9jb25zdHJhaW50MSIgQ0hFQ0sgKGpzIElTIEpTT04pCisgICAgInRlc3RfanNvbmJf Y29uc3RyYWludDIiIENIRUNLIChKU09OX0VYSVNUUyhqczo6anNvbmIsICckLiJhIicgUEFT U0lORyBpICsgNSBBUyBpbnQsIGk6OnRleHQgQVMgdHh0LCBBUlJBWVsxLCAyLCAzXSBBUyBh cnIpKQorICAgICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnQzIiBDSEVDSyAoSlNPTl9WQUxVRShq czo6anNvbmIsICckLiJhIicgUkVUVVJOSU5HIGludGVnZXIgREVGQVVMVCAoJzEyJzo6dGV4 dCB8fCBpKTo6aW50ZWdlciBPTiBFTVBUWSBFUlJPUiBPTiBFUlJPUikgPiBpKQorICAgICJ0 ZXN0X2pzb25iX2NvbnN0cmFpbnQ0IiBDSEVDSyAoSlNPTl9RVUVSWShqczo6anNvbmIsICck LiJhIicgUkVUVVJOSU5HIGpzb25iIFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUiBFTVBUWSBP QkpFQ1QgT04gRVJST1IpIDwgJ1sxMF0nOjpqc29uYikKKyAgICAidGVzdF9qc29uYl9jb25z dHJhaW50NSIgQ0hFQ0sgKEpTT05fUVVFUlkoanM6Ompzb25iLCAnJC4iYSInIFJFVFVSTklO RyBjaGFyYWN0ZXIoNSkgT01JVCBRVU9URVMgRU1QVFkgQVJSQVkgT04gRU1QVFkpID4gKCdh Jzo6YnBjaGFyIENPTExBVEUgIkMiKSkKKyAgICAidGVzdF9qc29uYl9jb25zdHJhaW50NiIg Q0hFQ0sgKEpTT05fRVhJU1RTKGpzOjpqc29uYiwgJ3N0cmljdCAkLiJhIicgUkVUVVJOSU5H IGludGVnZXIgVFJVRSBPTiBFUlJPUikgPCAyKQorCitTRUxFQ1QgY2hlY2tfY2xhdXNlCitG Uk9NIGluZm9ybWF0aW9uX3NjaGVtYS5jaGVja19jb25zdHJhaW50cworV0hFUkUgY29uc3Ry YWludF9uYW1lIExJS0UgJ3Rlc3RfanNvbmJfY29uc3RyYWludCUnOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2NsYXVz ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKChqcyBJUyBKU09OKSkKKyAoSlNPTl9FWElTVFMoKGpz KTo6anNvbmIsICckLiJhIicgUEFTU0lORyAoaSArIDUpIEFTIGludCwgKGkpOjp0ZXh0IEFT IHR4dCwgQVJSQVlbMSwgMiwgM10gQVMgYXJyKSkKKyAoKEpTT05fVkFMVUUoKGpzKTo6anNv bmIsICckLiJhIicgUkVUVVJOSU5HIGludGVnZXIgREVGQVVMVCAoKCcxMic6OnRleHQgfHwg aSkpOjppbnRlZ2VyIE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9SKSA+IGkpKQorICgoSlNPTl9R VUVSWSgoanMpOjpqc29uYiwgJyQuImEiJyBSRVRVUk5JTkcganNvbmIgV0lUSCBDT05ESVRJ T05BTCBXUkFQUEVSIEVNUFRZIE9CSkVDVCBPTiBFUlJPUikgPCAnWzEwXSc6Ompzb25iKSkK KyAoKEpTT05fUVVFUlkoKGpzKTo6anNvbmIsICckLiJhIicgUkVUVVJOSU5HIGNoYXJhY3Rl cig1KSBPTUlUIFFVT1RFUyBFTVBUWSBBUlJBWSBPTiBFTVBUWSkgPiAoJ2EnOjpicGNoYXIg Q09MTEFURSAiQyIpKSkKKyAoKEpTT05fRVhJU1RTKChqcyk6Ompzb25iLCAnc3RyaWN0ICQu ImEiJyBSRVRVUk5JTkcgaW50ZWdlciBUUlVFIE9OIEVSUk9SKSA8IDIpKQorKDYgcm93cykK KworU0VMRUNUIHBnX2dldF9leHByKGFkYmluLCBhZHJlbGlkKSBGUk9NIHBnX2F0dHJkZWYg V0hFUkUgYWRyZWxpZCA9ICd0ZXN0X2pzb25iX2NvbnN0cmFpbnRzJzo6cmVnY2xhc3M7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X2V4cHIgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBKU09OX1FVRVJZKCdbMSwgMl0nOjpqc29uYiwgJyRbKl0nIFJFVFVSTklORyBqc29uYiBX SVRIIFVOQ09ORElUSU9OQUwgV1JBUFBFUikKKygxIHJvdykKKworSU5TRVJUIElOVE8gdGVz dF9qc29uYl9jb25zdHJhaW50cyBWQUxVRVMgKCcnLCAxKTsKK0VSUk9SOiAgbmV3IHJvdyBm b3IgcmVsYXRpb24gInRlc3RfanNvbmJfY29uc3RyYWludHMiIHZpb2xhdGVzIGNoZWNrIGNv bnN0cmFpbnQgInRlc3RfanNvbmJfY29uc3RyYWludDEiCitERVRBSUw6ICBGYWlsaW5nIHJv dyBjb250YWlucyAoLCAxLCBbMSwgMl0pLgorSU5TRVJUIElOVE8gdGVzdF9qc29uYl9jb25z dHJhaW50cyBWQUxVRVMgKCcxJywgMSk7CitFUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9u ICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0 ZXN0X2pzb25iX2NvbnN0cmFpbnQyIgorREVUQUlMOiAgRmFpbGluZyByb3cgY29udGFpbnMg KDEsIDEsIFsxLCAyXSkuCitJTlNFUlQgSU5UTyB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIFZB TFVFUyAoJ1tdJyk7CitFUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0ZXN0X2pzb25i X2NvbnN0cmFpbnRzIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0ZXN0X2pzb25iX2Nv bnN0cmFpbnQyIgorREVUQUlMOiAgRmFpbGluZyByb3cgY29udGFpbnMgKFtdLCBudWxsLCBb MSwgMl0pLgorSU5TRVJUIElOVE8gdGVzdF9qc29uYl9jb25zdHJhaW50cyBWQUxVRVMgKCd7 ImIiOiAxfScsIDEpOworRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidGVzdF9qc29u Yl9jb25zdHJhaW50cyIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidGVzdF9qc29uYl9j b25zdHJhaW50MiIKK0RFVEFJTDogIEZhaWxpbmcgcm93IGNvbnRhaW5zICh7ImIiOiAxfSwg MSwgWzEsIDJdKS4KK0lOU0VSVCBJTlRPIHRlc3RfanNvbmJfY29uc3RyYWludHMgVkFMVUVT ICgneyJhIjogMX0nLCAxKTsKK0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRpb24gInRlc3Rf anNvbmJfY29uc3RyYWludHMiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRlc3RfanNv bmJfY29uc3RyYWludDMiCitERVRBSUw6ICBGYWlsaW5nIHJvdyBjb250YWlucyAoeyJhIjog MX0sIDEsIFsxLCAyXSkuCitJTlNFUlQgSU5UTyB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIFZB TFVFUyAoJ3siYSI6IDd9JywgMSk7CitFUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0 ZXN0X2pzb25iX2NvbnN0cmFpbnRzIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0ZXN0 X2pzb25iX2NvbnN0cmFpbnQ1IgorREVUQUlMOiAgRmFpbGluZyByb3cgY29udGFpbnMgKHsi YSI6IDd9LCAxLCBbMSwgMl0pLgorSU5TRVJUIElOVE8gdGVzdF9qc29uYl9jb25zdHJhaW50 cyBWQUxVRVMgKCd7ImEiOiAxMH0nLCAxKTsKK0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRp b24gInRlc3RfanNvbmJfY29uc3RyYWludHMiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQg InRlc3RfanNvbmJfY29uc3RyYWludDQiCitERVRBSUw6ICBGYWlsaW5nIHJvdyBjb250YWlu cyAoeyJhIjogMTB9LCAxLCBbMSwgMl0pLgorRFJPUCBUQUJMRSB0ZXN0X2pzb25iX2NvbnN0 cmFpbnRzOworLS0gVGVzdCBtdXRhYmlsaWx5IG9kIHF1ZXJ5IGZ1bmN0aW9ucworQ1JFQVRF IFRBQkxFIHRlc3RfanNvbmJfbXV0YWJpbGl0eShqcyBqc29uYik7CitDUkVBVEUgSU5ERVgg T04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJCcpKTsKK0NSRUFU RSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmFb MF0nKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FV RVJZKGpzLCAnJC5kYXRldGltZSgpJykpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJf bXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuYSA/IChAIDwgJC5kYXRldGltZSgpKScp KTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlko anMsICckLmEgPyAoQC5kYXRldGltZSgpIDwgJC5kYXRldGltZSgpKScpKTsKK0VSUk9SOiAg ZnVuY3Rpb25zIGluIGluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRBQkxF CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpz LCAnJC5hID8gKEAuZGF0ZXRpbWUoKSA8ICQuZGF0ZXRpbWUoIkhIOk1JIFRaSCIpKScpKTsK K0VSUk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQg SU1NVVRBQkxFCitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09O X1FVRVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRpbWUoIkhIOk1JIFRaSCIpIDwgJC5kYXRldGlt ZSgiSEg6TUkgVFpIIikpJykpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJp bGl0eSAoSlNPTl9RVUVSWShqcywgJyQuYSA/IChALmRhdGV0aW1lKCJISDpNSSIpIDwgJC5k YXRldGltZSgiWVktTU0tREQgSEg6TUkiKSknKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9q c29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRpbWUoIkhI Ok1JIFRaSCIpIDwgJC5kYXRldGltZSgiWVktTU0tREQgSEg6TUkiKSknKSk7CitFUlJPUjog IGZ1bmN0aW9ucyBpbiBpbmRleCBleHByZXNzaW9uIG11c3QgYmUgbWFya2VkIElNTVVUQUJM RQorQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShq cywgJyQuZGF0ZXRpbWUoIkhIOk1JIFRaSCIpIDwgJHgnIFBBU1NJTkcgJzEyOjM0Jzo6dGlt ZXR6IEFTIHgpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpT T05fUVVFUlkoanMsICckLmRhdGV0aW1lKCJISDpNSSBUWkgiKSA8ICR5JyBQQVNTSU5HICcx MjozNCc6OnRpbWV0eiBBUyB4KSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRh YmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5kYXRldGltZSgpIDwgJHgnIFBBU1NJTkcgJzEy OjM0Jzo6dGltZXR6IEFTIHgpKTsKK0VSUk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJl c3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRBQkxFCitDUkVBVEUgSU5ERVggT04gdGVzdF9q c29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5kYXRldGltZSgpIDwgJHgnIFBB U1NJTkcgJzEyMzQnOjppbnQgQVMgeCkpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJf bXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuZGF0ZXRpbWUoKSA/IChAID09ICR4KScg UEFTU0lORyAnMTI6MzQnOjp0aW1lIEFTIHgpKTsKK0VSUk9SOiAgZnVuY3Rpb25zIGluIGlu ZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRBQkxFCitDUkVBVEUgSU5ERVgg T04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5kYXRldGltZSgi WVktTU0tREQiKSA/IChAID09ICR4KScgUEFTU0lORyAnMjAyMC0wNy0xNCc6OmRhdGUgQVMg eCkpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVS WShqcywgJyRbMSwgJC5hID8gKEAuZGF0ZXRpbWUoKSA9PSAkeCldJyBQQVNTSU5HICcxMjoz NCc6OnRpbWUgQVMgeCkpOworRVJST1I6ICBmdW5jdGlvbnMgaW4gaW5kZXggZXhwcmVzc2lv biBtdXN0IGJlIG1hcmtlZCBJTU1VVEFCTEUKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25i X211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckWzEsIDAgdG8gJC5hID8gKEAuZGF0ZXRp bWUoKSA9PSAkeCldJyBQQVNTSU5HICcxMjozNCc6OnRpbWUgQVMgeCkpOworRVJST1I6ICBm dW5jdGlvbnMgaW4gaW5kZXggZXhwcmVzc2lvbiBtdXN0IGJlIG1hcmtlZCBJTU1VVEFCTEUK K0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMs ICckWzEsICQuYSA/IChALmRhdGV0aW1lKCJISDpNSSIpID09ICR4KV0nIFBBU1NJTkcgJzEy OjM0Jzo6dGltZSBBUyB4KSk7CitEUk9QIFRBQkxFIHRlc3RfanNvbmJfbXV0YWJpbGl0eTsK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgYi9zcmMv dGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCmluZGV4IDM2MjQwMzU2MzkuLmRkOTFj YTE2Y2YgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQpAQCAtMTAzLDcgKzEw Myw3IEBAIHRlc3Q6IHNlbGVjdF92aWV3cyBwb3J0YWxzX3AyIGZvcmVpZ25fa2V5IGNsdXN0 ZXIgZGVwZW5kZW5jeSBndWMgYml0bWFwb3BzIGNvbWJvCiAjIC0tLS0tLS0tLS0KICMgQW5v dGhlciBncm91cCBvZiBwYXJhbGxlbCB0ZXN0cyAoSlNPTiByZWxhdGVkKQogIyAtLS0tLS0t LS0tCi10ZXN0OiBqc29uIGpzb25iIGpzb25fZW5jb2RpbmcganNvbnBhdGgganNvbnBhdGhf ZW5jb2RpbmcganNvbmJfanNvbnBhdGggc3FsanNvbgordGVzdDoganNvbiBqc29uYiBqc29u X2VuY29kaW5nIGpzb25wYXRoIGpzb25wYXRoX2VuY29kaW5nIGpzb25iX2pzb25wYXRoIHNx bGpzb24ganNvbl9zcWxqc29uIGpzb25iX3NxbGpzb24KIAogIyAtLS0tLS0tLS0tCiAjIEFu b3RoZXIgZ3JvdXAgb2YgcGFyYWxsZWwgdGVzdHMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2pzb25fc3FsanNvbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29u X3NxbGpzb24uc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjRm MzBmYTQ2YjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29u X3NxbGpzb24uc3FsCkBAIC0wLDAgKzEsMTEgQEAKKy0tIEpTT05fRVhJU1RTCisKK1NFTEVD VCBKU09OX0VYSVNUUyhOVUxMIEZPUk1BVCBKU09OLCAnJCcpOworCistLSBKU09OX1ZBTFVF CisKK1NFTEVDVCBKU09OX1ZBTFVFKE5VTEwgRk9STUFUIEpTT04sICckJyk7CisKKy0tIEpT T05fUVVFUlkKKworU0VMRUNUIEpTT05fUVVFUlkoTlVMTCBGT1JNQVQgSlNPTiwgJyQnKTsK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iX3NxbGpzb24uc3FsIGIv c3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmJfc3FsanNvbi5zcWwKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMGMzYTdjYzU5NwotLS0gL2Rldi9udWxsCisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iX3NxbGpzb24uc3FsCkBAIC0wLDAgKzEsMzE4 IEBACistLSBKU09OX0VYSVNUUworCitTRUxFQ1QgSlNPTl9FWElTVFMoTlVMTDo6anNvbmIs ICckJyk7CisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnW10nLCAnJCcpOworU0VMRUNU IEpTT05fRVhJU1RTKEpTT05fT0JKRUNUKFJFVFVSTklORyBqc29uYiksICckJyk7CisKK1NF TEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICckJyk7CitTRUxFQ1QgSlNPTl9FWElTVFMo anNvbmIgJ251bGwnLCAnJCcpOworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICdbXScsICck Jyk7CisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICckLmEnKTsKK1NFTEVDVCBK U09OX0VYSVNUUyhqc29uYiAnMScsICdzdHJpY3QgJC5hJyk7CitTRUxFQ1QgSlNPTl9FWElT VFMoanNvbmIgJzEnLCAnc3RyaWN0ICQuYScgRVJST1IgT04gRVJST1IpOworU0VMRUNUIEpT T05fRVhJU1RTKGpzb25iICdudWxsJywgJyQuYScpOworU0VMRUNUIEpTT05fRVhJU1RTKGpz b25iICdbXScsICckLmEnKTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnWzEsICJhYWEi LCB7ImEiOiAxfV0nLCAnc3RyaWN0ICQuYScpOworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25i ICdbMSwgImFhYSIsIHsiYSI6IDF9XScsICdsYXggJC5hJyk7CitTRUxFQ1QgSlNPTl9FWElT VFMoanNvbmIgJ3t9JywgJyQuYScpOworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7ImIi OiAxLCAiYSI6IDJ9JywgJyQuYScpOworCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEn LCAnJC5hLmInKTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAneyJhIjogeyJiIjogMX19 JywgJyQuYS5iJyk7CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ3siYSI6IDEsICJiIjog Mn0nLCAnJC5hLmInKTsKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7ImEiOiAxLCAi YiI6IDJ9JywgJyQuKiA/IChAID4gJHgpJyBQQVNTSU5HIDEgQVMgeCk7CitTRUxFQ1QgSlNP Tl9FWElTVFMoanNvbmIgJ3siYSI6IDEsICJiIjogMn0nLCAnJC4qID8gKEAgPiAkeCknIFBB U1NJTkcgJzEnIEFTIHgpOworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7ImEiOiAxLCAi YiI6IDJ9JywgJyQuKiA/IChAID4gJHggJiYgQCA8ICR5KScgUEFTU0lORyAwIEFTIHgsIDIg QVMgeSk7CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ3siYSI6IDEsICJiIjogMn0nLCAn JC4qID8gKEAgPiAkeCAmJiBAIDwgJHkpJyBQQVNTSU5HIDAgQVMgeCwgMSBBUyB5KTsKKwor LS0gZXh0ZW5zaW9uOiBib29sZWFuIGV4cHJlc3Npb25zCitTRUxFQ1QgSlNPTl9FWElTVFMo anNvbmIgJzEnLCAnJCA+IDInKTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICck LmEgPiAyJyBFUlJPUiBPTiBFUlJPUik7CisKKy0tIGV4dGVuc2lvbjogUkVUVVJOSU5HIGNs YXVzZQorU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJyRbMF0nIFJFVFVSTklORyBi b29sKTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICckWzFdJyBSRVRVUk5JTkcg Ym9vbCk7CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJFswXScgUkVUVVJOSU5H IGludCk7CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJFsxXScgUkVUVVJOSU5H IGludCk7CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJFswXScgUkVUVVJOSU5H IHRleHQpOworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJyRbMV0nIFJFVFVSTklO RyB0ZXh0KTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICdzdHJpY3QgJFsxXScg UkVUVVJOSU5HIHRleHQgRkFMU0UgT04gRVJST1IpOworU0VMRUNUIEpTT05fRVhJU1RTKGpz b25iICcxJywgJyRbMF0nIFJFVFVSTklORyBqc29uYik7CitTRUxFQ1QgSlNPTl9FWElTVFMo anNvbmIgJzEnLCAnJFswXScgUkVUVVJOSU5HIGZsb2F0NCk7CisKKworLS0gSlNPTl9WQUxV RQorCitTRUxFQ1QgSlNPTl9WQUxVRShOVUxMOjpqc29uYiwgJyQnKTsKKworU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg J251bGwnLCAnJCcgUkVUVVJOSU5HIGludCk7CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25i ICd0cnVlJywgJyQnKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICd0cnVlJywgJyQnIFJF VFVSTklORyBib29sKTsKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEyMycsICckJyk7 CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMTIzJywgJyQnIFJFVFVSTklORyBpbnQpICsg MjM0OworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEyMycsICckJyBSRVRVUk5JTkcgdGV4 dCk7CisvKiBqc29uYiBieXRlYSA/Pz8gKi8KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcx MjMnLCAnJCcgUkVUVVJOSU5HIGJ5dGVhIEVSUk9SIE9OIEVSUk9SKTsKKworU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJzEuMjMnLCAnJCcpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg JzEuMjMnLCAnJCcgUkVUVVJOSU5HIGludCk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAn IjEuMjMiJywgJyQnIFJFVFVSTklORyBudW1lcmljKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpz b25iICciMS4yMyInLCAnJCcgUkVUVVJOSU5HIGludCBFUlJPUiBPTiBFUlJPUik7CisKK1NF TEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICckJyk7CitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIHRleHQpOworU0VMRUNUIEpTT05fVkFM VUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBjaGFyKDUpKTsKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgY2hhcigyKSk7CitTRUxFQ1Qg SlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGpzb24pOworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBqc29uYik7CitTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGpzb24gRVJST1Ig T04gRVJST1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVS TklORyBqc29uYiBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAn IlwiYWFhXCIiJywgJyQnIFJFVFVSTklORyBqc29uKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpz b25iICciXCJhYWFcIiInLCAnJCcgUkVUVVJOSU5HIGpzb25iKTsKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgaW50KTsKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgaW50IEVSUk9SIE9OIEVSUk9SKTsK K1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgaW50IERF RkFVTFQgMTExIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciMTIzIics ICckJyBSRVRVUk5JTkcgaW50KSArIDIzNDsKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg JyIyMDE3LTAyLTIwIicsICckJyBSRVRVUk5JTkcgZGF0ZSkgKyA5OworCistLSBUZXN0IE5V TEwgY2hlY2tzIGV4ZWN1dGlvbiBpbiBkb21haW4gdHlwZXMKK0NSRUFURSBET01BSU4gc3Fs anNvbmJfaW50X25vdF9udWxsIEFTIGludCBOT1QgTlVMTDsKK1NFTEVDVCBKU09OX1ZBTFVF KGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCk7CitT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9p bnRfbm90X251bGwgTlVMTCBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAn MScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwgREVGQVVMVCBOVUxM IE9OIEVSUk9SKTsKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ1tdJywgJyQnKTsKK1NF TEVDVCBKU09OX1ZBTFVFKGpzb25iICdbXScsICckJyBFUlJPUiBPTiBFUlJPUik7CitTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAne30nLCAnJCcpOworU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJ3t9JywgJyQnIEVSUk9SIE9OIEVSUk9SKTsKKworU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJzEnLCAnJC5hJyk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICdzdHJpY3Qg JC5hJyBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICdz dHJpY3QgJC5hJyBERUZBVUxUICdlcnJvcicgT04gRVJST1IpOworU0VMRUNUIEpTT05fVkFM VUUoanNvbmIgJzEnLCAnbGF4ICQuYScgRVJST1IgT04gRVJST1IpOworU0VMRUNUIEpTT05f VkFMVUUoanNvbmIgJzEnLCAnbGF4ICQuYScgRVJST1IgT04gRU1QVFkgRVJST1IgT04gRVJS T1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnc3RyaWN0ICQuYScgREVGQVVM VCAyIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJ2xheCAkLmEn IERFRkFVTFQgMiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICds YXggJC5hJyBERUZBVUxUICcyJyBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29u YiAnMScsICdsYXggJC5hJyBOVUxMIE9OIEVNUFRZIERFRkFVTFQgJzInIE9OIEVSUk9SKTsK K1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJ2xheCAkLmEnIERFRkFVTFQgJzInIE9O IEVNUFRZIERFRkFVTFQgJzMnIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25i ICcxJywgJ2xheCAkLmEnIEVSUk9SIE9OIEVNUFRZIERFRkFVTFQgJzMnIE9OIEVSUk9SKTsK KworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ1sxLDJdJywgJyRbKl0nIEVSUk9SIE9OIEVS Uk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbMSwyXScsICckWypdJyBERUZBVUxU ICcwJyBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnWyIgIl0nLCAnJFsq XScgUkVUVVJOSU5HIGludCBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShq c29uYiAnWyIgIl0nLCAnJFsqXScgUkVUVVJOSU5HIGludCBERUZBVUxUIDIgKyAzIE9OIEVS Uk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbIjEiXScsICckWypdJyBSRVRVUk5J TkcgaW50IERFRkFVTFQgMiArIDMgT04gRVJST1IpOworCitTRUxFQ1QKKwl4LAorCUpTT05f VkFMVUUoCisJCWpzb25iICd7ImEiOiAxLCAiYiI6IDJ9JywKKwkJJyQuKiA/IChAID4gJHgp JyBQQVNTSU5HIHggQVMgeAorCQlSRVRVUk5JTkcgaW50CisJCURFRkFVTFQgLTEgT04gRU1Q VFkKKwkJREVGQVVMVCAtMiBPTiBFUlJPUgorCSkgeQorRlJPTQorCWdlbmVyYXRlX3Nlcmll cygwLCAyKSB4OworCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckYScgUEFT U0lORyBwb2ludCAnICgxLCAyICknIEFTIGEpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg J251bGwnLCAnJGEnIFBBU1NJTkcgcG9pbnQgJyAoMSwgMiApJyBBUyBhIFJFVFVSTklORyBw b2ludCk7CisKKy0tIFRlc3QgdGltZXN0YW1wdHogcGFzc2luZyBhbmQgb3V0cHV0CitTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHog JzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyk7CitTRUxFQ1QgSlNPTl9WQUxVRShq c29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6 MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcgdGltZXN0YW1wdHopOworU0VMRUNUIEpTT05f VkFMVUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4LTAy LTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5HIHRpbWVzdGFtcCk7CitTRUxFQ1Qg SlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIw MTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcganNvbik7CitTRUxFQ1Qg SlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIw MTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcganNvbmIpOworCistLSBK U09OX1FVRVJZCisKK1NFTEVDVAorCUpTT05fUVVFUlkoanMsICckJyksCisJSlNPTl9RVUVS WShqcywgJyQnIFdJVEhPVVQgV1JBUFBFUiksCisJSlNPTl9RVUVSWShqcywgJyQnIFdJVEgg Q09ORElUSU9OQUwgV1JBUFBFUiksCisJSlNPTl9RVUVSWShqcywgJyQnIFdJVEggVU5DT05E SVRJT05BTCBBUlJBWSBXUkFQUEVSKSwKKwlKU09OX1FVRVJZKGpzLCAnJCcgV0lUSCBBUlJB WSBXUkFQUEVSKQorRlJPTQorCShWQUxVRVMKKwkJKGpzb25iICdudWxsJyksCisJCSgnMTIu MycpLAorCQkoJ3RydWUnKSwKKwkJKCciYWFhIicpLAorCQkoJ1sxLCBudWxsLCAiMiJdJyks CisJCSgneyJhIjogMSwgImIiOiBbMl19JykKKwkpIGZvbyhqcyk7CisKK1NFTEVDVAorCUpT T05fUVVFUlkoanMsICdzdHJpY3QgJFsqXScpIEFTICJ1bnNwZWMiLAorCUpTT05fUVVFUlko anMsICdzdHJpY3QgJFsqXScgV0lUSE9VVCBXUkFQUEVSKSBBUyAid2l0aG91dCIsCisJSlNP Tl9RVUVSWShqcywgJ3N0cmljdCAkWypdJyBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIpIEFT ICJ3aXRoIGNvbmQiLAorCUpTT05fUVVFUlkoanMsICdzdHJpY3QgJFsqXScgV0lUSCBVTkNP TkRJVElPTkFMIEFSUkFZIFdSQVBQRVIpIEFTICJ3aXRoIHVuY29uZCIsCisJSlNPTl9RVUVS WShqcywgJ3N0cmljdCAkWypdJyBXSVRIIEFSUkFZIFdSQVBQRVIpIEFTICJ3aXRoIgorRlJP TQorCShWQUxVRVMKKwkJKGpzb25iICcxJyksCisJCSgnW10nKSwKKwkJKCdbbnVsbF0nKSwK KwkJKCdbMTIuM10nKSwKKwkJKCdbdHJ1ZV0nKSwKKwkJKCdbImFhYSJdJyksCisJCSgnW1sx LCAyLCAzXV0nKSwKKwkJKCdbeyJhIjogMSwgImIiOiBbMl19XScpLAorCQkoJ1sxLCAiMiIs IG51bGwsIFszXV0nKQorCSkgZm9vKGpzKTsKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIg JyJhYWEiJywgJyQnIFJFVFVSTklORyB0ZXh0KTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25i ICciYWFhIicsICckJyBSRVRVUk5JTkcgdGV4dCBLRUVQIFFVT1RFUyk7CitTRUxFQ1QgSlNP Tl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIHRleHQgS0VFUCBRVU9URVMg T04gU0NBTEFSIFNUUklORyk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAn JCcgUkVUVVJOSU5HIHRleHQgT01JVCBRVU9URVMpOworU0VMRUNUIEpTT05fUVVFUlkoanNv bmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyB0ZXh0IE9NSVQgUVVPVEVTIE9OIFNDQUxBUiBT VFJJTkcpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEiJywgJyQnIE9NSVQgUVVP VEVTIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciYWFhIics ICckJyBSRVRVUk5JTkcganNvbiBPTUlUIFFVT1RFUyBFUlJPUiBPTiBFUlJPUik7CitTRUxF Q1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGJ5dGVhIEZPUk1B VCBKU09OIE9NSVQgUVVPVEVTIEVSUk9SIE9OIEVSUk9SKTsKKworLS0gUVVPVEVTIGJlaGF2 aW9yIHNob3VsZCBub3QgYmUgc3BlY2lmaWVkIHdoZW4gV0lUSCBXUkFQUEVSIHVzZWQ6Cist LSBTaG91bGQgZmFpbAorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRI IFdSQVBQRVIgT01JVCBRVU9URVMpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScs ICckJyBXSVRIIFdSQVBQRVIgS0VFUCBRVU9URVMpOworU0VMRUNUIEpTT05fUVVFUlkoanNv bmIgJ1sxXScsICckJyBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIgS0VFUCBRVU9URVMpOwor U0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRIIENPTkRJVElPTkFMIFdS QVBQRVIgT01JVCBRVU9URVMpOworLS0gU2hvdWxkIHN1Y2NlZWQKK1NFTEVDVCBKU09OX1FV RVJZKGpzb25iICdbMV0nLCAnJCcgV0lUSE9VVCBXUkFQUEVSIE9NSVQgUVVPVEVTKTsKK1NF TEVDVCBKU09OX1FVRVJZKGpzb25iICdbMV0nLCAnJCcgV0lUSE9VVCBXUkFQUEVSIEtFRVAg UVVPVEVTKTsKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nKTsKK1NF TEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBOVUxMIE9OIEVNUFRZKTsKK1NF TEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBFTVBUWSBPTiBFTVBUWSk7CitT RUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgRU1QVFkgQVJSQVkgT04gRU1Q VFkpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIEVNUFRZIE9CSkVD VCBPTiBFTVBUWSk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgRVJS T1IgT04gRU1QVFkpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIERF RkFVTFQgJyJlbXB0eSInIE9OIEVNUFRZKTsKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIg J1tdJywgJyRbKl0nIEVSUk9SIE9OIEVNUFRZIE5VTEwgT04gRVJST1IpOworU0VMRUNUIEpT T05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIEVSUk9SIE9OIEVNUFRZIEVNUFRZIEFSUkFZ IE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBFUlJP UiBPTiBFTVBUWSBFTVBUWSBPQkpFQ1QgT04gRVJST1IpOworU0VMRUNUIEpTT05fUVVFUlko anNvbmIgJ1tdJywgJyRbKl0nIEVSUk9SIE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9SKTsKK1NF TEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBFUlJPUiBPTiBFUlJPUik7CisK K1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckWypdJyBFUlJPUiBPTiBFUlJP Uik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJFsqXScgREVGQVVMVCAn ImVtcHR5IicgT04gRVJST1IpOworCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0n LCAnJCcgUkVUVVJOSU5HIGpzb24pOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJd JywgJyQnIFJFVFVSTklORyBqc29uIEZPUk1BVCBKU09OKTsKK1NFTEVDVCBKU09OX1FVRVJZ KGpzb25iICdbMSwyXScsICckJyBSRVRVUk5JTkcganNvbmIpOworU0VMRUNUIEpTT05fUVVF UlkoanNvbmIgJ1sxLDJdJywgJyQnIFJFVFVSTklORyBqc29uYiBGT1JNQVQgSlNPTik7CitT RUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIHRleHQpOwor U0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyQnIFJFVFVSTklORyBjaGFyKDEw KSk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIGNo YXIoMykpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyQnIFJFVFVSTklO RyB0ZXh0IEZPUk1BVCBKU09OKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScs ICckJyBSRVRVUk5JTkcgYnl0ZWEpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJd JywgJyQnIFJFVFVSTklORyBieXRlYSBGT1JNQVQgSlNPTik7CisKK1NFTEVDVCBKU09OX1FV RVJZKGpzb25iICdbMSwyXScsICckWypdJyBSRVRVUk5JTkcgYnl0ZWEgRU1QVFkgT0JKRUNU IE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckWypdJyBS RVRVUk5JTkcgYnl0ZWEgRk9STUFUIEpTT04gRU1QVFkgT0JKRUNUIE9OIEVSUk9SKTsKK1NF TEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckWypdJyBSRVRVUk5JTkcganNvbiBF TVBUWSBPQkpFQ1QgT04gRVJST1IpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJd JywgJyRbKl0nIFJFVFVSTklORyBqc29uYiBFTVBUWSBPQkpFQ1QgT04gRVJST1IpOworU0VM RUNUIEpTT05fUVVFUlkoanNvbmIgJ1szLDRdJywgJyRbKl0nIFJFVFVSTklORyBiaWdpbnRb XSBFTVBUWSBPQkpFQ1QgT04gRVJST1IpOworCitTRUxFQ1QKKwl4LCB5LAorCUpTT05fUVVF UlkoCisJCWpzb25iICdbMSwyLDMsNCw1LG51bGxdJywKKwkJJyRbKl0gPyAoQCA+PSAkeCAm JiBAIDw9ICR5KScKKwkJUEFTU0lORyB4IEFTIHgsIHkgQVMgeQorCQlXSVRIIENPTkRJVElP TkFMIFdSQVBQRVIKKwkJRU1QVFkgQVJSQVkgT04gRU1QVFkKKwkpIGxpc3QKK0ZST00KKwln ZW5lcmF0ZV9zZXJpZXMoMCwgNCkgeCwKKwlnZW5lcmF0ZV9zZXJpZXMoMCwgNCkgeTsKKwor LS0gRXh0ZW5zaW9uOiByZWNvcmQgdHlwZXMgcmV0dXJuaW5nCitDUkVBVEUgVFlQRSBzcWxq c29uYl9yZWMgQVMgKGEgaW50LCB0IHRleHQsIGpzIGpzb24sIGpiIGpzb25iLCBqc2EganNv bltdKTsKK0NSRUFURSBUWVBFIHNxbGpzb25iX3JlY2EgQVMgKHJlY2Egc3FsanNvbmJfcmVj W10pOworCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW3siYSI6IDEsICJiIjogImZvbyIs ICJ0IjogImFhYSIsICJqcyI6IFsxLCAiMiIsIHt9XSwgImpiIjogeyJ4IjogWzEsICIyIiwg e31dfX0sICB7ImEiOiAyfV0nLCAnJFswXScgUkVUVVJOSU5HIHNxbGpzb25iX3JlYyk7CitT RUxFQ1QgKiBGUk9NIHVubmVzdCgoSlNPTl9RVUVSWShqc29uYiAneyJqc2EiOiAgW3siYSI6 IDEsICJiIjogWyJmb28iXX0sIHsiYSI6IDIsICJjIjoge319LCAxMjNdfScsICckJyBSRVRV Uk5JTkcgc3FsanNvbmJfcmVjKSkuanNhKTsKK1NFTEVDVCAqIEZST00gdW5uZXN0KChKU09O X1FVRVJZKGpzb25iICd7InJlY2EiOiBbeyJhIjogMSwgInQiOiBbImZvbyIsIFtdXX0sIHsi YSI6IDIsICJqYiI6IFt7fSwgdHJ1ZV19XX0nLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX3Jl Y2EpKS5yZWNhKTsKKworLS0gRXh0ZW5zaW9uOiBhcnJheSB0eXBlcyByZXR1cm5pbmcKK1NF TEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyLG51bGwsIjMiXScsICckWypdJyBSRVRVUk5J TkcgaW50W10gV0lUSCBXUkFQUEVSKTsKK1NFTEVDVCAqIEZST00gdW5uZXN0KEpTT05fUVVF UlkoanNvbmIgJ1t7ImEiOiAxLCAidCI6IFsiZm9vIiwgW11dfSwgeyJhIjogMiwgImpiIjog W3t9LCB0cnVlXX1dJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9yZWNbXSkpOworCistLSBF eHRlbnNpb246IGRvbWFpbiB0eXBlcyByZXR1cm5pbmcKK1NFTEVDVCBKU09OX1FVRVJZKGpz b25iICd7ImEiOiAxfScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwp OworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDF9JywgJyQuYicgUkVUVVJOSU5H IHNxbGpzb25iX2ludF9ub3RfbnVsbCk7CisKKy0tIFRlc3QgdGltZXN0YW1wdHogcGFzc2lu ZyBhbmQgb3V0cHV0CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnbnVsbCcsICckdHMnIFBB U1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyk7CitT RUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1w dHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcganNvbik7CitT RUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1w dHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcganNvbmIpOwor CistLSBUZXN0IGNvbnN0cmFpbnRzCisKK0NSRUFURSBUQUJMRSB0ZXN0X2pzb25iX2NvbnN0 cmFpbnRzICgKKwlqcyB0ZXh0LAorCWkgaW50LAorCXgganNvbmIgREVGQVVMVCBKU09OX1FV RVJZKGpzb25iICdbMSwyXScsICckWypdJyBXSVRIIFdSQVBQRVIpCisJQ09OU1RSQUlOVCB0 ZXN0X2pzb25iX2NvbnN0cmFpbnQxCisJCUNIRUNLIChqcyBJUyBKU09OKQorCUNPTlNUUkFJ TlQgdGVzdF9qc29uYl9jb25zdHJhaW50MgorCQlDSEVDSyAoSlNPTl9FWElTVFMoanM6Ompz b25iLCAnJC5hJyBQQVNTSU5HIGkgKyA1IEFTIGludCwgaTo6dGV4dCBBUyB0eHQsIGFycmF5 WzEsMiwzXSBhcyBhcnIpKQorCUNPTlNUUkFJTlQgdGVzdF9qc29uYl9jb25zdHJhaW50Mwor CQlDSEVDSyAoSlNPTl9WQUxVRShqczo6anNvbmIsICckLmEnIFJFVFVSTklORyBpbnQgREVG QVVMVCAoJzEyJyB8fCBpKTo6aW50IE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9SKSA+IGkpCisJ Q09OU1RSQUlOVCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQ0CisJCUNIRUNLIChKU09OX1FVRVJZ KGpzOjpqc29uYiwgJyQuYScgV0lUSCBDT05ESVRJT05BTCBXUkFQUEVSIEVNUFRZIE9CSkVD VCBPTiBFUlJPUikgPCBqc29uYiAnWzEwXScpCisJQ09OU1RSQUlOVCB0ZXN0X2pzb25iX2Nv bnN0cmFpbnQ1CisJCUNIRUNLIChKU09OX1FVRVJZKGpzOjpqc29uYiwgJyQuYScgUkVUVVJO SU5HIGNoYXIoNSkgT01JVCBRVU9URVMgRU1QVFkgQVJSQVkgT04gRU1QVFkpID4gICdhJyBD T0xMQVRFICJDIikKKwlDT05TVFJBSU5UIHRlc3RfanNvbmJfY29uc3RyYWludDYKKwkJQ0hF Q0sgKEpTT05fRVhJU1RTKGpzOjpqc29uYiwgJ3N0cmljdCAkLmEnIFJFVFVSTklORyBpbnQg VFJVRSBPTiBFUlJPUikgPCAyKQorKTsKKworXGQgdGVzdF9qc29uYl9jb25zdHJhaW50cwor CitTRUxFQ1QgY2hlY2tfY2xhdXNlCitGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS5jaGVja19j b25zdHJhaW50cworV0hFUkUgY29uc3RyYWludF9uYW1lIExJS0UgJ3Rlc3RfanNvbmJfY29u c3RyYWludCUnOworCitTRUxFQ1QgcGdfZ2V0X2V4cHIoYWRiaW4sIGFkcmVsaWQpIEZST00g cGdfYXR0cmRlZiBXSEVSRSBhZHJlbGlkID0gJ3Rlc3RfanNvbmJfY29uc3RyYWludHMnOjpy ZWdjbGFzczsKKworSU5TRVJUIElOVE8gdGVzdF9qc29uYl9jb25zdHJhaW50cyBWQUxVRVMg KCcnLCAxKTsKK0lOU0VSVCBJTlRPIHRlc3RfanNvbmJfY29uc3RyYWludHMgVkFMVUVTICgn MScsIDEpOworSU5TRVJUIElOVE8gdGVzdF9qc29uYl9jb25zdHJhaW50cyBWQUxVRVMgKCdb XScpOworSU5TRVJUIElOVE8gdGVzdF9qc29uYl9jb25zdHJhaW50cyBWQUxVRVMgKCd7ImIi OiAxfScsIDEpOworSU5TRVJUIElOVE8gdGVzdF9qc29uYl9jb25zdHJhaW50cyBWQUxVRVMg KCd7ImEiOiAxfScsIDEpOworSU5TRVJUIElOVE8gdGVzdF9qc29uYl9jb25zdHJhaW50cyBW QUxVRVMgKCd7ImEiOiA3fScsIDEpOworSU5TRVJUIElOVE8gdGVzdF9qc29uYl9jb25zdHJh aW50cyBWQUxVRVMgKCd7ImEiOiAxMH0nLCAxKTsKKworRFJPUCBUQUJMRSB0ZXN0X2pzb25i X2NvbnN0cmFpbnRzOworCistLSBUZXN0IG11dGFiaWxpbHkgb2QgcXVlcnkgZnVuY3Rpb25z CitDUkVBVEUgVEFCTEUgdGVzdF9qc29uYl9tdXRhYmlsaXR5KGpzIGpzb25iKTsKK0NSRUFU RSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckJykp OworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShq cywgJyQuYVswXScpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkg KEpTT05fUVVFUlkoanMsICckLmRhdGV0aW1lKCknKSk7CitDUkVBVEUgSU5ERVggT04gdGVz dF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5hID8gKEAgPCAkLmRhdGV0 aW1lKCkpJykpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNP Tl9RVUVSWShqcywgJyQuYSA/IChALmRhdGV0aW1lKCkgPCAkLmRhdGV0aW1lKCkpJykpOwor Q1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywg JyQuYSA/IChALmRhdGV0aW1lKCkgPCAkLmRhdGV0aW1lKCJISDpNSSBUWkgiKSknKSk7CitD UkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAn JC5hID8gKEAuZGF0ZXRpbWUoIkhIOk1JIFRaSCIpIDwgJC5kYXRldGltZSgiSEg6TUkgVFpI IikpJykpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9R VUVSWShqcywgJyQuYSA/IChALmRhdGV0aW1lKCJISDpNSSIpIDwgJC5kYXRldGltZSgiWVkt TU0tREQgSEg6TUkiKSknKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmls aXR5IChKU09OX1FVRVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRpbWUoIkhIOk1JIFRaSCIpIDwg JC5kYXRldGltZSgiWVktTU0tREQgSEg6TUkiKSknKSk7CitDUkVBVEUgSU5ERVggT04gdGVz dF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5kYXRldGltZSgiSEg6TUkg VFpIIikgPCAkeCcgUEFTU0lORyAnMTI6MzQnOjp0aW1ldHogQVMgeCkpOworQ1JFQVRFIElO REVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuZGF0ZXRp bWUoIkhIOk1JIFRaSCIpIDwgJHknIFBBU1NJTkcgJzEyOjM0Jzo6dGltZXR6IEFTIHgpKTsK K0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMs ICckLmRhdGV0aW1lKCkgPCAkeCcgUEFTU0lORyAnMTI6MzQnOjp0aW1ldHogQVMgeCkpOwor Q1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywg JyQuZGF0ZXRpbWUoKSA8ICR4JyBQQVNTSU5HICcxMjM0Jzo6aW50IEFTIHgpKTsKK0NSRUFU RSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmRh dGV0aW1lKCkgPyAoQCA9PSAkeCknIFBBU1NJTkcgJzEyOjM0Jzo6dGltZSBBUyB4KSk7CitD UkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAn JC5kYXRldGltZSgiWVktTU0tREQiKSA/IChAID09ICR4KScgUEFTU0lORyAnMjAyMC0wNy0x NCc6OmRhdGUgQVMgeCkpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0 eSAoSlNPTl9RVUVSWShqcywgJyRbMSwgJC5hID8gKEAuZGF0ZXRpbWUoKSA9PSAkeCldJyBQ QVNTSU5HICcxMjozNCc6OnRpbWUgQVMgeCkpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNv bmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyRbMSwgMCB0byAkLmEgPyAoQC5kYXRl dGltZSgpID09ICR4KV0nIFBBU1NJTkcgJzEyOjM0Jzo6dGltZSBBUyB4KSk7CitDUkVBVEUg SU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJFsxLCAk LmEgPyAoQC5kYXRldGltZSgiSEg6TUkiKSA9PSAkeCldJyBQQVNTSU5HICcxMjozNCc6OnRp bWUgQVMgeCkpOworRFJPUCBUQUJMRSB0ZXN0X2pzb25iX211dGFiaWxpdHk7CmRpZmYgLS1n aXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGU4MjBiMTdjYWEuLjFiNWE4OGRkNWQgMTAwNjQ0 Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xMjUxLDYgKzEyNTEsNyBAQCBKc29uQ29u c3RydWN0b3JUeXBlCiBKc29uRW5jb2RpbmcKIEpzb25FeHByCiBKc29uRXhwck9wCitKc29u RXhwclN0YXRlCiBKc29uRm9ybWF0CiBKc29uRm9ybWF0VHlwZQogSnNvbkZ1bmMKLS0gCjIu MzQuMQoK --------------MwgLFi9fcx5tDY0Wnjp80Eno Content-Type: text/x-patch; charset=UTF-8; name="v10-0005-remove-more-non-terminal-grammar-symbols.patch" Content-Disposition: attachment; filename="v10-0005-remove-more-non-terminal-grammar-symbols.patch" Content-Transfer-Encoding: base64 RnJvbSA0ZWEzOGI3MTNiNmQ5YjAxMmU5OTQwMWM2YTNlMDY2ODNkMzhiYmEyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5l Lm5ldD4KRGF0ZTogVGh1LCAxNiBNYXIgMjAyMyAyMDoyMzo0NCAtMDQwMApTdWJqZWN0OiBb UEFUQ0ggNS85XSByZW1vdmUgbW9yZSBub24tdGVybWluYWwgZ3JhbW1hciBzeW1ib2xzCgot LS0KIHNyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgfCAxMjQgKysrKysrKysrLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCsp LCA5NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3Jh bS55IGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQppbmRleCA2MDFkYjgzNzY5Li41YjMy ZWVkMmNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CisrKyBiL3Ny Yy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKQEAgLTY1NSw3ICs2NTUsNiBAQCBzdGF0aWMgTm9k ZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNl cywgTm9kZSAqcXVlcnkpOwogCQkJCQlqc29uX3JlcHJlc2VudGF0aW9uCiAJCQkJCWpzb25f dmFsdWVfZXhwcgogCQkJCQlqc29uX2FwaV9jb21tb25fc3ludGF4Ci0JCQkJCWpzb25fY29u dGV4dF9pdGVtCiAJCQkJCWpzb25fYXJndW1lbnQKIAkJCQkJanNvbl9yZXR1cm5pbmdfY2xh dXNlX29wdAogCQkJCQlqc29uX291dHB1dF9jbGF1c2Vfb3B0CkBAIC02NjMsNyArNjYyLDYg QEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUs IExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAkJCQkJanNvbl9vYmplY3RfYXJncwog CQkJCQlqc29uX25hbWVfYW5kX3ZhbHVlCiAJCQkJCWpzb25fYWdncmVnYXRlX2Z1bmMKLQkJ CQkJanNvbl9wYXRoX3NwZWNpZmljYXRpb24KIAogJXR5cGUgPGxpc3Q+CQlqc29uX25hbWVf YW5kX3ZhbHVlX2xpc3QKIAkJCQkJanNvbl92YWx1ZV9leHByX2xpc3QKQEAgLTY3MSw4ICs2 NjksNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVs bmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCQkJCQlqc29uX2FyZ3VtZW50 cwogCQkJCQlqc29uX3Bhc3NpbmdfY2xhdXNlX29wdAogCi0ldHlwZSA8c3RyPgkJCWpzb25f dGFibGVfcGF0aF9uYW1lCi0JCQkJCWpzb25fYXNfcGF0aF9uYW1lX2NsYXVzZV9vcHQKKyV0 eXBlIDxzdHI+CQkJanNvbl9hc19wYXRoX25hbWVfY2xhdXNlX29wdAogCiAldHlwZSA8aXZh bD4JCWpzb25fZW5jb2RpbmdfY2xhdXNlX29wdAogCQkJCQlqc29uX3ByZWRpY2F0ZV90eXBl X2NvbnN0cmFpbnRfb3B0CkBAIC02ODAsMTUgKzY3Nyw3IEBAIHN0YXRpYyBOb2RlICptYWtl UmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2Rl ICpxdWVyeSk7CiAJCQkJCWpzb25fd3JhcHBlcl9iZWhhdmlvcgogCQkJCQlqc29uX2NvbmRp dGlvbmFsX29yX3VuY29uZGl0aW9uYWxfb3B0CiAKLSV0eXBlIDxqc2JlaGF2aW9yPglqc29u X2JlaGF2aW9yX2Vycm9yCi0JCQkJCWpzb25fYmVoYXZpb3JfbnVsbAotCQkJCQlqc29uX2Jl aGF2aW9yX3RydWUKLQkJCQkJanNvbl9iZWhhdmlvcl9mYWxzZQotCQkJCQlqc29uX2JlaGF2 aW9yX3Vua25vd24KLQkJCQkJanNvbl9iZWhhdmlvcl9lbXB0eV9hcnJheQotCQkJCQlqc29u X2JlaGF2aW9yX2VtcHR5X29iamVjdAotCQkJCQlqc29uX2JlaGF2aW9yX2RlZmF1bHQKLQkJ CQkJanNvbl92YWx1ZV9iZWhhdmlvcgorJXR5cGUgPGpzYmVoYXZpb3I+CWpzb25fdmFsdWVf YmVoYXZpb3IKIAkJCQkJanNvbl9xdWVyeV9iZWhhdmlvcgogCQkJCQlqc29uX2V4aXN0c19l cnJvcl9iZWhhdmlvcgogCQkJCQlqc29uX2V4aXN0c19lcnJvcl9jbGF1c2Vfb3B0CkBAIC02 OTYsOCArNjg1LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNo YXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKICV0eXBlIDxvbl9i ZWhhdmlvcj4ganNvbl92YWx1ZV9vbl9iZWhhdmlvcl9jbGF1c2Vfb3B0CiAJCQkJCWpzb25f cXVlcnlfb25fYmVoYXZpb3JfY2xhdXNlX29wdAogCi0ldHlwZSA8anNfcXVvdGVzPglqc29u X3F1b3Rlc19iZWhhdmlvcgotCQkJCQlqc29uX3F1b3Rlc19jbGF1c2Vfb3B0CisldHlwZSA8 anNfcXVvdGVzPglqc29uX3F1b3Rlc19jbGF1c2Vfb3B0CiAKICV0eXBlIDxib29sZWFuPgkJ anNvbl9rZXlfdW5pcXVlbmVzc19jb25zdHJhaW50X29wdAogCQkJCQlqc29uX29iamVjdF9j b25zdHJ1Y3Rvcl9udWxsX2NsYXVzZV9vcHQKQEAgLTE2NTEwLDcgKzE2NDk4LDcgQEAgb3B0 X2FzeW1tZXRyaWM6IEFTWU1NRVRSSUMKIAogLyogU1FML0pTT04gc3VwcG9ydCAqLwoganNv bl9hcGlfY29tbW9uX3N5bnRheDoKLQkJCWpzb25fY29udGV4dF9pdGVtICcsJyBqc29uX3Bh dGhfc3BlY2lmaWNhdGlvbgorCQkJanNvbl92YWx1ZV9leHByICcsJyBhX2V4cHIgLyogaS5l LiBhIGpzb25fcGF0aCAqLwogCQkJanNvbl9hc19wYXRoX25hbWVfY2xhdXNlX29wdAogCQkJ anNvbl9wYXNzaW5nX2NsYXVzZV9vcHQKIAkJCQl7CkBAIC0xNjUyNSwyMyArMTY1MTMsMTEg QEAganNvbl9hcGlfY29tbW9uX3N5bnRheDoKIAkJCQl9CiAJCTsKIAotanNvbl9jb250ZXh0 X2l0ZW06Ci0JCQlqc29uX3ZhbHVlX2V4cHIJCQkJCQkJeyAkJCA9ICQxOyB9Ci0JCTsKLQot anNvbl9wYXRoX3NwZWNpZmljYXRpb246Ci0JCQlhX2V4cHIJCQkJCQkJCQl7ICQkID0gJDE7 IH0KLQkJOwotCiBqc29uX2FzX3BhdGhfbmFtZV9jbGF1c2Vfb3B0OgotCQkJIEFTIGpzb25f dGFibGVfcGF0aF9uYW1lCQkJCXsgJCQgPSAkMjsgfQorCQkJIEFTIG5hbWUJCQkJICAgICAg ICAgICAgICAgIHsgJCQgPSAkMjsgfQogCQkJIHwgLyogRU1QVFkgKi8JCQkJCQkJeyAkJCA9 IE5VTEw7IH0KIAkJOwogCi1qc29uX3RhYmxlX3BhdGhfbmFtZToKLQkJCW5hbWUJCQkJCQkJ CQl7ICQkID0gJDE7IH0KLQkJOwotCiBqc29uX3Bhc3NpbmdfY2xhdXNlX29wdDoKIAkJCVBB U1NJTkcganNvbl9hcmd1bWVudHMJCQkJCXsgJCQgPSAkMjsgfQogCQkJfCAvKiBFTVBUWSAq LwkJCQkJCQl7ICQkID0gTklMOyB9CkBAIC0xNjU2OSwxMCArMTY1NDUsMTAgQEAganNvbl9l eGlzdHNfZXJyb3JfY2xhdXNlX29wdDoKIAkJOwogCiBqc29uX2V4aXN0c19lcnJvcl9iZWhh dmlvcjoKLQkJCWpzb25fYmVoYXZpb3JfZXJyb3IKLQkJCXwganNvbl9iZWhhdmlvcl90cnVl Ci0JCQl8IGpzb25fYmVoYXZpb3JfZmFsc2UKLQkJCXwganNvbl9iZWhhdmlvcl91bmtub3du CisJCQlFUlJPUl9QCQl7ICQkID0gbWFrZUpzb25CZWhhdmlvcihKU09OX0JFSEFWSU9SX0VS Uk9SLCBOVUxMKTsgfQorCQkJfCBUUlVFX1AJCXsgJCQgPSBtYWtlSnNvbkJlaGF2aW9yKEpT T05fQkVIQVZJT1JfVFJVRSwgTlVMTCk7IH0KKwkJCXwgRkFMU0VfUAkJeyAkJCA9IG1ha2VK c29uQmVoYXZpb3IoSlNPTl9CRUhBVklPUl9GQUxTRSwgTlVMTCk7IH0KKwkJCXwgVU5LTk9X TgkJeyAkJCA9IG1ha2VKc29uQmVoYXZpb3IoSlNPTl9CRUhBVklPUl9VTktOT1dOLCBOVUxM KTsgfQogCQk7CiAKIGpzb25fdmFsdWVfZXhwcjoKQEAgLTE2NjA3LDQ1ICsxNjU4MywxMCBA QCBqc29uX2VuY29kaW5nX2NsYXVzZV9vcHQ6CiAJCQl8IC8qIEVNUFRZICovCQkJCQkJCXsg JCQgPSBKU19FTkNfREVGQVVMVDsgfQogCQk7CiAKLWpzb25fYmVoYXZpb3JfZXJyb3I6Ci0J CQlFUlJPUl9QCQl7ICQkID0gbWFrZUpzb25CZWhhdmlvcihKU09OX0JFSEFWSU9SX0VSUk9S LCBOVUxMKTsgfQotCQk7Ci0KLWpzb25fYmVoYXZpb3JfbnVsbDoKLQkJCU5VTExfUAkJeyAk JCA9IG1ha2VKc29uQmVoYXZpb3IoSlNPTl9CRUhBVklPUl9OVUxMLCBOVUxMKTsgfQotCQk7 Ci0KLWpzb25fYmVoYXZpb3JfdHJ1ZToKLQkJCVRSVUVfUAkJeyAkJCA9IG1ha2VKc29uQmVo YXZpb3IoSlNPTl9CRUhBVklPUl9UUlVFLCBOVUxMKTsgfQotCQk7Ci0KLWpzb25fYmVoYXZp b3JfZmFsc2U6Ci0JCQlGQUxTRV9QCQl7ICQkID0gbWFrZUpzb25CZWhhdmlvcihKU09OX0JF SEFWSU9SX0ZBTFNFLCBOVUxMKTsgfQotCQk7Ci0KLWpzb25fYmVoYXZpb3JfdW5rbm93bjoK LQkJCVVOS05PV04JCXsgJCQgPSBtYWtlSnNvbkJlaGF2aW9yKEpTT05fQkVIQVZJT1JfVU5L Tk9XTiwgTlVMTCk7IH0KLQkJOwotCi1qc29uX2JlaGF2aW9yX2VtcHR5X2FycmF5OgotCQkJ RU1QVFlfUCBBUlJBWQl7ICQkID0gbWFrZUpzb25CZWhhdmlvcihKU09OX0JFSEFWSU9SX0VN UFRZX0FSUkFZLCBOVUxMKTsgfQotCQkJLyogbm9uLXN0YW5kYXJkLCBmb3IgT3JhY2xlIGNv bXBhdGliaWxpdHkgb25seSAqLwotCQkJfCBFTVBUWV9QCQl7ICQkID0gbWFrZUpzb25CZWhh dmlvcihKU09OX0JFSEFWSU9SX0VNUFRZX0FSUkFZLCBOVUxMKTsgfQotCQk7Ci0KLWpzb25f YmVoYXZpb3JfZW1wdHlfb2JqZWN0OgotCQkJRU1QVFlfUCBPQkpFQ1RfUAl7ICQkID0gbWFr ZUpzb25CZWhhdmlvcihKU09OX0JFSEFWSU9SX0VNUFRZX09CSkVDVCwgTlVMTCk7IH0KLQkJ OwotCi1qc29uX2JlaGF2aW9yX2RlZmF1bHQ6Ci0JCQlERUZBVUxUIGFfZXhwcgl7ICQkID0g bWFrZUpzb25CZWhhdmlvcihKU09OX0JFSEFWSU9SX0RFRkFVTFQsICQyKTsgfQotCQk7Ci0K LQoganNvbl92YWx1ZV9iZWhhdmlvcjoKLQkJCWpzb25fYmVoYXZpb3JfbnVsbAotCQkJfCBq c29uX2JlaGF2aW9yX2Vycm9yCi0JCQl8IGpzb25fYmVoYXZpb3JfZGVmYXVsdAorCQkJTlVM TF9QCQl7ICQkID0gbWFrZUpzb25CZWhhdmlvcihKU09OX0JFSEFWSU9SX05VTEwsIE5VTEwp OyB9CisJCQl8IEVSUk9SX1AJCXsgJCQgPSBtYWtlSnNvbkJlaGF2aW9yKEpTT05fQkVIQVZJ T1JfRVJST1IsIE5VTEwpOyB9CisJCQl8IERFRkFVTFQgYV9leHByCXsgJCQgPSBtYWtlSnNv bkJlaGF2aW9yKEpTT05fQkVIQVZJT1JfREVGQVVMVCwgJDIpOyB9CiAJCTsKIAoganNvbl92 YWx1ZV9vbl9iZWhhdmlvcl9jbGF1c2Vfb3B0OgpAQCAtMTY2NjYsMTQgKzE2NjA3LDEyIEBA IGpzb25fd3JhcHBlcl9jbGF1c2Vfb3B0OgogCQkJfCAvKiBFTVBUWSAqLwkJCQkJCQl7ICQk ID0gMDsgfQogCQk7CiAKKy8qIEFSUkFZIGlzIGEgbm9pc2Ugd29yZCAqLwoganNvbl93cmFw cGVyX2JlaGF2aW9yOgotCQkJV0lUSE9VVCBhcnJheV9vcHQJCQkJCQl7ICQkID0gSlNXX05P TkU7IH0KLQkJCXwgV0lUSCBqc29uX2NvbmRpdGlvbmFsX29yX3VuY29uZGl0aW9uYWxfb3B0 IGFycmF5X29wdCB7ICQkID0gJDI7IH0KLQkJOwotCi1hcnJheV9vcHQ6Ci0JCQlBUlJBWQkJ CQkJCQkJCXsgfQotCQkJfCAvKiBFTVBUWSAqLwkJCQkJCQl7IH0KKwkJCVdJVEhPVVQgQVJS QVkJCQkJCQl7ICQkID0gSlNXX05PTkU7IH0KKwkJCXwgV0lUSE9VVCAJCQkJCQkgICAgeyAk JCA9IEpTV19OT05FOyB9CisJCQl8IFdJVEgganNvbl9jb25kaXRpb25hbF9vcl91bmNvbmRp dGlvbmFsX29wdCBBUlJBWSB7ICQkID0gJDI7IH0KKwkJCXwgV0lUSCBqc29uX2NvbmRpdGlv bmFsX29yX3VuY29uZGl0aW9uYWxfb3B0ICB7ICQkID0gJDI7IH0KIAkJOwogCiBqc29uX2Nv bmRpdGlvbmFsX29yX3VuY29uZGl0aW9uYWxfb3B0OgpAQCAtMTY2ODMsMjYgKzE2NjIyLDIx IEBAIGpzb25fY29uZGl0aW9uYWxfb3JfdW5jb25kaXRpb25hbF9vcHQ6CiAJCTsKIAoganNv bl9xdW90ZXNfY2xhdXNlX29wdDoKLQkJCWpzb25fcXVvdGVzX2JlaGF2aW9yIFFVT1RFUyBq c29uX29uX3NjYWxhcl9zdHJpbmdfb3B0IHsgJCQgPSAkMTsgfQotCQkJfCAvKiBFTVBUWSAq LwkJCQkJCQl7ICQkID0gSlNfUVVPVEVTX1VOU1BFQzsgfQotCQk7Ci0KLWpzb25fcXVvdGVz X2JlaGF2aW9yOgotCQkJS0VFUAkJCQkJCQkJCXsgJCQgPSBKU19RVU9URVNfS0VFUDsgfQot CQkJfCBPTUlUCQkJCQkJCQkJeyAkJCA9IEpTX1FVT1RFU19PTUlUOyB9Ci0JCTsKLQotanNv bl9vbl9zY2FsYXJfc3RyaW5nX29wdDoKLQkJCU9OIFNDQUxBUiBTVFJJTkdfUAkJCQkJCXsg fQotCQkJfCAvKiBFTVBUWSAqLwkJCQkJCQl7IH0KKwkJCUtFRVAgUVVPVEVTIE9OIFNDQUxB UiBTVFJJTkdfUCAgICAgeyAkJCA9IEpTX1FVT1RFU19LRUVQOyB9CisJCQl8IEtFRVAgUVVP VEVTICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBKU19RVU9URVNfS0VFUDsgfQorCQkJ fCBPTUlUIFFVT1RFUyBPTiBTQ0FMQVIgU1RSSU5HX1AgICB7ICQkID0gSlNfUVVPVEVTX09N SVQ7IH0KKwkJCXwgT01JVCBRVU9URVMgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IEpT X1FVT1RFU19PTUlUOyB9CisJCQl8IC8qIEVNUFRZICovCQkJCQkgICB7ICQkID0gSlNfUVVP VEVTX1VOU1BFQzsgfQogCQk7CiAKIGpzb25fcXVlcnlfYmVoYXZpb3I6Ci0JCQlqc29uX2Jl aGF2aW9yX2Vycm9yCi0JCQl8IGpzb25fYmVoYXZpb3JfbnVsbAotCQkJfCBqc29uX2JlaGF2 aW9yX2VtcHR5X2FycmF5Ci0JCQl8IGpzb25fYmVoYXZpb3JfZW1wdHlfb2JqZWN0Ci0JCQl8 IGpzb25fYmVoYXZpb3JfZGVmYXVsdAorCQkJRVJST1JfUAkJeyAkJCA9IG1ha2VKc29uQmVo YXZpb3IoSlNPTl9CRUhBVklPUl9FUlJPUiwgTlVMTCk7IH0KKwkJCXwgTlVMTF9QCQl7ICQk ID0gbWFrZUpzb25CZWhhdmlvcihKU09OX0JFSEFWSU9SX05VTEwsIE5VTEwpOyB9CisJCQl8 IEVNUFRZX1AgQVJSQVkJeyAkJCA9IG1ha2VKc29uQmVoYXZpb3IoSlNPTl9CRUhBVklPUl9F TVBUWV9BUlJBWSwgTlVMTCk7IH0KKwkJCS8qIG5vbi1zdGFuZGFyZCwgZm9yIE9yYWNsZSBj b21wYXRpYmlsaXR5IG9ubHkgKi8KKwkJCXwgRU1QVFlfUAkJeyAkJCA9IG1ha2VKc29uQmVo YXZpb3IoSlNPTl9CRUhBVklPUl9FTVBUWV9BUlJBWSwgTlVMTCk7IH0KKwkJCXwgRU1QVFlf UCBPQkpFQ1RfUAl7ICQkID0gbWFrZUpzb25CZWhhdmlvcihKU09OX0JFSEFWSU9SX0VNUFRZ X09CSkVDVCwgTlVMTCk7IH0KKwkJCXwgREVGQVVMVCBhX2V4cHIJeyAkJCA9IG1ha2VKc29u QmVoYXZpb3IoSlNPTl9CRUhBVklPUl9ERUZBVUxULCAkMik7IH0KIAkJOwogCiBqc29uX3F1 ZXJ5X29uX2JlaGF2aW9yX2NsYXVzZV9vcHQ6Ci0tIAoyLjM0LjEKCg== --------------MwgLFi9fcx5tDY0Wnjp80Eno Content-Type: text/x-patch; charset=UTF-8; name="v10-0006-SQL-JSON-functions.patch" Content-Disposition: attachment; filename="v10-0006-SQL-JSON-functions.patch" Content-Transfer-Encoding: base64 RnJvbSAwNWIwYjg1YzJkNmM4ZmViNzVmYWJmMWI2NWFiZTYwOGNmZGI2MDFlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5l Lm5ldD4KRGF0ZTogVGh1LCAxNiBNYXIgMjAyMyAyMDozMzoyNSAtMDQwMApTdWJqZWN0OiBb UEFUQ0ggNi85XSBTUUwgSlNPTiBmdW5jdGlvbnMKClRoaXMgUGF0Y2ggaW50cm9kdWNlcyB0 aHJlZSBTUUwgc3RhbmRhcmQgSlNPTiBmdW5jdGlvbnM6CgpKU09OKCkKSlNPTl9TQ0FMQVIo KQpKU09OX1NFUklBTElaRSgpCgpKU09OKCkgcHJvZHVjZXMganNvbiB2YWx1ZXMgZnJvbSB0 ZXh0LCBieXRlYSwganNvbiBvciBqc29uYiB2YWx1ZXMsIGFuZApoYXMgZmFjaWxpdGl0ZXMg Zm9yIGhhbmRsaW5nIGR1cGxpY2F0ZSBrZXlzLgpKU09OX1NDQUxBUigpIHByb2R1Y2VzIGEg anNvbiB2YWx1ZSBmcm9tIGFueSBzY2FsYXIgc3FsIHZhbHVlLCBpbmNsdWRpbmcKanNvbiBh bmQganNvbmIuCkpTT05fU0VSSUFMSVpFKCkgcHJvZHVjZXMgdGV4dCBvciBieXRlYSBmcm9t IGlucHV0IHdoaWNoIGNvbnRhaW5pcyBvcgpyZXByZXNlbnRzIGpzb24gb3IganNvbmI7CgpG b3IgdGhlIG1vc3QgcGFydCB0aGVzZSBmdW5jdGlvbnMgZG9uJ3QgYWRkIGFueSBzaWduaWZp Y2FudCBuZXcKY2FwYWJpbGl0aWVzLCBidXQgdGhleSB3aWxsIGJlIG9mIHVzZSB0byB1c2Vy cyB3YW50aW5nIHN0YW5kYXJkCmNvbXBsaWFudCBKU09OIGhhbmRsaW5nLgoKTmlraXRhIEds dWtob3YKClJldmlld2VycyBoYXZlIGluY2x1ZGVkIChpbiBubyBwYXJ0aWN1bGFyIG9yZGVy KSBBbmRyZXMgRnJldW5kLCBBbGV4YW5kZXIKS29yb3Rrb3YsIFBhdmVsIFN0ZWh1bGUsIEFu ZHJldyBBbHN1cCwgRXJpayBSaWprZXJzLCBaaWhvbmcgWXUsCkhpbWFuc2h1IFVwYWRoeWF5 YSwgRGFuaWVsIEd1c3RhZnNzb24sIEp1c3RpbiBQcnl6YnkuCgpEaXNjdXNzaW9uOiBodHRw czovL3Bvc3Rnci5lcy9tL2NkMGJiOTM1LTAxNTgtNzhhNy0wOGI1LTkwNDg4NmRlYWM0YkBw b3N0Z3Jlc3Byby5ydQpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLzIwMjIwNjE2 MjMzMTMwLnJwYXJpdmFmaXB0NmRvajNAYWxhcDMuYW5hcmF6ZWwuZGUKRGlzY3Vzc2lvbjog aHR0cHM6Ly9wb3N0Z3IuZXMvbS9hYmQ5YjgzYi1hYTY2LWYyMzAtM2Q2ZC03MzQ4MTdmMDk5 NWQlNDBwb3N0Z3Jlc3FsLm9yZwotLS0KIGRvYy9zcmMvc2dtbC9mdW5jLnNnbWwgICAgICAg ICAgICAgICAgICAgICAgICB8ICA2OSArKystCiBkb2Mvc3JjL3NnbWwva2V5d29yZHMvc3Fs MjAxNi0wMi1yZXNlcnZlZC50eHQgfCAgIDMgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y0V4cHIuYyAgICAgICAgICAgICAgIHwgIDQ1ICsrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY0V4cHJJbnRlcnAuYyAgICAgICAgIHwgIDQ2ICsrLQogc3JjL2JhY2tlbmQvbm9kZXMv bm9kZUZ1bmNzLmMgICAgICAgICAgICAgICAgIHwgIDE0ICsKIHNyYy9iYWNrZW5kL3BhcnNl ci9ncmFtLnkgICAgICAgICAgICAgICAgICAgICB8ICA0NSArKy0KIHNyYy9iYWNrZW5kL3Bh cnNlci9wYXJzZV9leHByLmMgICAgICAgICAgICAgICB8IDE2OSArKysrKysrKystCiBzcmMv YmFja2VuZC9wYXJzZXIvcGFyc2VfdGFyZ2V0LmMgICAgICAgICAgICAgfCAgIDkgKwogc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMgICAgICAgICAgIHwgICA0ICsKIHNy Yy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uLmMgICAgICAgICAgICAgICAgICB8ICAzNyArLQog c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMgICAgICAgICAgICAgICAgIHwgIDY2ICsr LS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyAgICAgICAgICAgICB8ICAx MyArLQogc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICAgICAgICAgICAgICAgIHwg IDM1ICsrCiBzcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaCAgICAgICAgICAgICAgICAg fCAgIDUgKy0KIHNyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaCAgICAgICAgICAgICAgICAg ICB8ICAgNCArLQogc3JjL2luY2x1ZGUvdXRpbHMvanNvbi5oICAgICAgICAgICAgICAgICAg ICAgIHwgIDE5ICsrCiBzcmMvaW5jbHVkZS91dGlscy9qc29uYi5oICAgICAgICAgICAgICAg ICAgICAgfCAgMjEgKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfc3FsanNv bi5vdXQgICB8ICAxNiArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zcWxqc29uLm91 dCAgICAgICAgIHwgMzE5ICsrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9z cWwvanNvbmJfc3FsanNvbi5zcWwgICAgICAgIHwgICA4ICstCiBzcmMvdGVzdC9yZWdyZXNz L3NxbC9zcWxqc29uLnNxbCAgICAgICAgICAgICAgfCAgODMgKysrKysKIHNyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMSArCiAyMiBmaWxlcyBj aGFuZ2VkLCA5NDAgaW5zZXJ0aW9ucygrKSwgOTEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbCBiL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKaW5k ZXggMjdhMjBjMDc5OC4uMDAwYTg2YzI5NCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1 bmMuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCkBAIC0xNzY5NCw3ICsxNzY5 NCw5IEBAICQuKiA/IChAIGxpa2VfcmVnZXggIl5cXGQrJCIpCiAgICA8cGFyYT4KICAgICA8 eHJlZiBsaW5rZW5kPSJmdW5jdGlvbnMtc3FsanNvbi1wcm9kdWNpbmciIC8+IGxpc3RzIHRo ZSBTUUwvSlNPTgogICAgIENvbnN0cnVjdG9yIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiBo YXMgYSA8bGl0ZXJhbD5SRVRVUk5JTkc8L2xpdGVyYWw+Ci0gICAgY2xhdXNlIHNwZWNpZnlp bmcgdGhlIGRhdGEgdHlwZSByZXR1cm5lZC4gSXQgbXVzdCBiZSBvbmUgb2YgPHR5cGU+anNv bjwvdHlwZT4sCisgICAgY2xhdXNlIHNwZWNpZnlpbmcgdGhlIGRhdGEgdHlwZSByZXR1cm5l ZC4gRm9yIHRoZSA8ZnVuY3Rpb24+anNvbjwvZnVuY3Rpb24+IGFuZAorICAgIDxmdW5jdGlv bj5qc29uX3NjYWxhcjwvZnVuY3Rpb24+IGZ1bmN0aW9ucywgdGhpcyBuZWVkcyB0byBiZSBl aXRoZXIgPHR5cGU+anNvbjwvdHlwZT4gb3IKKyAgICA8dHlwZT5qc29uYjwvdHlwZT4uIEZv ciB0aGUgb3RoZXIgY29uc3RydWN0b3IgZnVuY3Rpb25zLCBpdCBtdXN0IGJlIG9uZSBvZiA8 dHlwZT5qc29uPC90eXBlPiwKICAgICA8dHlwZT5qc29uYjwvdHlwZT4sIDx0eXBlPmJ5dGVh PC90eXBlPiwgYSBjaGFyYWN0ZXIgc3RyaW5nIHR5cGUgKDx0eXBlPnRleHQ8L3R5cGU+LCA8 dHlwZT5jaGFyPC90eXBlPiwKICAgICA8dHlwZT52YXJjaGFyPC90eXBlPiwgb3IgPHR5cGU+ bmNoYXI8L3R5cGU+KSwgb3IgYSB0eXBlIGZvciB3aGljaCB0aGVyZSBpcyBhIGNhc3QKICAg ICBmcm9tIDx0eXBlPmpzb248L3R5cGU+IHRvIHRoYXQgdHlwZS4KQEAgLTE3NzI4LDYgKzE3 NzMwLDcxIEBAICQuKiA/IChAIGxpa2VfcmVnZXggIl5cXGQrJCIpCiAgICAgICA8L3Jvdz4K ICAgICAgPC90aGVhZD4KICAgICAgPHRib2R5PgorICAgICAgPHJvdz4KKyAgICAgICA8ZW50 cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+CisgICAgICAgIDxwYXJhIHJvbGU9ImZ1bmNf c2lnbmF0dXJlIj4KKyAgICAgICAgIDxpbmRleHRlcm0+PHByaW1hcnk+anNvbiBjb25zdHJ1 Y3RvcjwvcHJpbWFyeT48L2luZGV4dGVybT4KKyAgICAgICAgIDxmdW5jdGlvbj5qc29uPC9m dW5jdGlvbj4gKAorICAgICAgICAgPHJlcGxhY2VhYmxlPmV4cHJlc3Npb248L3JlcGxhY2Vh YmxlPgorICAgICAgICAgPG9wdGlvbmFsPiA8bGl0ZXJhbD5GT1JNQVQgSlNPTjwvbGl0ZXJh bD4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5FTkNPRElORyBVVEY4PC9saXRlcmFsPiA8L29wdGlv bmFsPjwvb3B0aW9uYWw+CisgICAgICAgICA8b3B0aW9uYWw+IHsgPGxpdGVyYWw+V0lUSDwv bGl0ZXJhbD4gfCA8bGl0ZXJhbD5XSVRIT1VUPC9saXRlcmFsPiB9IDxsaXRlcmFsPlVOSVFV RTwvbGl0ZXJhbD4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5LRVlTPC9saXRlcmFsPiA8L29wdGlv bmFsPjwvb3B0aW9uYWw+KQorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAg ICAgICAgVGhlIDxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gY2FuIGJl IGFueSB0ZXh0IHR5cGUgb3IgYQorICAgICAgICAgPHR5cGU+Ynl0ZWE8L3R5cGU+IGluIFVU RjggZW5jb2RpbmcuIElmIHRoZQorICAgICAgICAgPHJlcGxhY2VhYmxlPmV4cHJlc3Npb248 L3JlcGxhY2VhYmxlPiBpcyBOVUxMLCBhbgorICAgICAgICAgPGFjcm9ueW0+U1FMPC9hY3Jv bnltPiBudWxsIHZhbHVlIGlzIHJldHVybmVkLgorICAgICAgICAgSWYgPGxpdGVyYWw+V0lU SCBVTklRVUU8L2xpdGVyYWw+IGlzIHNwZWNpZmllZCwgdGhlCisgICAgICAgICA8cmVwbGFj ZWFibGU+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IG11c3Qgbm90IGNvbnRhaW4gYW55IGR1 cGxpY2F0ZQorICAgICAgICAgb2JqZWN0IGtleXMuCisgICAgICAgIDwvcGFyYT4KKyAgICAg ICAgPHBhcmE+CisgICAgICAgICA8bGl0ZXJhbD5qc29uKCd7ImEiOjEyMywgImIiOlt0cnVl LCJmb28iXSwgImEiOiJiYXIifScpPC9saXRlcmFsPgorICAgICAgICAgPHJldHVybnZhbHVl PnsiYSI6MTIzLCAiYiI6W3RydWUsImZvbyJdLCAiYSI6ImJhciJ9PC9yZXR1cm52YWx1ZT4K KyAgICAgICAgPC9wYXJhPgorICAgICAgIDwvZW50cnk+CisgICAgICA8L3Jvdz4KKyAgICAg IDxyb3c+CisgICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPgorICAgICAg ICA8cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIDxpbmRleHRlcm0+PHBy aW1hcnk+anNvbl9zY2FsYXI8L3ByaW1hcnk+PC9pbmRleHRlcm0+CisgICAgICAgIDxmdW5j dGlvbj5qc29uX3NjYWxhcjwvZnVuY3Rpb24+ICg8cmVwbGFjZWFibGU+ZXhwcmVzc2lvbjwv cmVwbGFjZWFibGU+KQorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAg UmV0dXJucyBhIEpTT04gc2NhbGFyIHZhbHVlIHJlcHJlc2VudGluZworICAgICAgICA8cmVw bGFjZWFibGU+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+LgorICAgICAgICBJZiB0aGUgaW5w dXQgaXMgTlVMTCwgYW4gU1FMIE5VTEwgaXMgcmV0dXJuZWQuIElmIHRoZSBpbnB1dCBpcyBh IG51bWJlcgorICAgICAgICBvciBhIGJvb2xlYW4gdmFsdWUsIGEgY29ycmVzcG9uZGluZyBK U09OIG51bWJlciBvciBib29sZWFuIHZhbHVlIGlzCisgICAgICAgIHJldHVybmVkLiBGb3Ig YW55IG90aGVyIHZhbHVlIGEgSlNPTiBzdHJpbmcgaXMgcmV0dXJuZWQuCisgICAgICAgPC9w YXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICA8bGl0ZXJhbD5qc29uX3NjYWxhcigxMjMu NDUpPC9saXRlcmFsPgorICAgICAgICA8cmV0dXJudmFsdWU+MTIzLjQ1PC9yZXR1cm52YWx1 ZT4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIDxsaXRlcmFsPmpz b25fc2NhbGFyKENVUlJFTlRfVElNRVNUQU1QKTwvbGl0ZXJhbD4KKyAgICAgICAgPHJldHVy bnZhbHVlPiIyMDIyLTA1LTEwVDEwOjUxOjA0LjYyMTI4LTA0OjAwIjwvcmV0dXJudmFsdWU+ CisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisgICAgIDxyb3c+CisgICAg ICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+CisgICAgICAgPHBhcmEgcm9sZT0i ZnVuY19zaWduYXR1cmUiPgorICAgICAgICA8ZnVuY3Rpb24+anNvbl9zZXJpYWxpemU8L2Z1 bmN0aW9uPiAoCisgICAgICAgIDxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNlYWJs ZT4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5GT1JNQVQgSlNPTjwvbGl0ZXJhbD4gPG9wdGlvbmFs PiA8bGl0ZXJhbD5FTkNPRElORyBVVEY4PC9saXRlcmFsPiA8L29wdGlvbmFsPiA8L29wdGlv bmFsPgorICAgICAgICA8b3B0aW9uYWw+IDxsaXRlcmFsPlJFVFVSTklORzwvbGl0ZXJhbD4g PHJlcGxhY2VhYmxlPmRhdGFfdHlwZTwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4gPGxpdGVy YWw+Rk9STUFUIEpTT048L2xpdGVyYWw+IDxvcHRpb25hbD4gPGxpdGVyYWw+RU5DT0RJTkcg VVRGODwvbGl0ZXJhbD4gPC9vcHRpb25hbD4gPC9vcHRpb25hbD4gPC9vcHRpb25hbD4pCisg ICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUcmFuc2Zvcm1zIGFuIFNR TC9KU09OIHZhbHVlIGludG8gYSBjaGFyYWN0ZXIgb3IgYmluYXJ5IHN0cmluZy4gVGhlCisg ICAgICAgIDxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gY2FuIGJlIG9m IGFueSBKU09OIHR5cGUsIGFueQorICAgICAgICBjaGFyYWN0ZXIgc3RyaW5nIHR5cGUsIG9y IDx0eXBlPmJ5dGVhPC90eXBlPiBpbiBVVEY4IGVuY29kaW5nLgorICAgICAgICBUaGUgcmV0 dXJuZWQgdHlwZSBjYW4gYmUgYW55IGNoYXJhY3RlciBzdHJpbmcgdHlwZSBvcgorICAgICAg ICA8dHlwZT5ieXRlYTwvdHlwZT4uIFRoZSBkZWZhdWx0IGlzIDx0eXBlPnRleHQ8L3R5cGU+ LgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgPGxpdGVyYWw+anNv bl9zZXJpYWxpemUoJ3sgImEiIDogMSB9ICcgUkVUVVJOSU5HIGJ5dGVhKTwvbGl0ZXJhbD4K KyAgICAgICAgPHJldHVybnZhbHVlPlx4N2IyMDIyNjEyMjIwM2EyMDMxMjA3ZDIwPC9yZXR1 cm52YWx1ZT4KKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KICAgICAgPHJv dz4KICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJm dW5jX3NpZ25hdHVyZSI+CiAgICAgICAgIDxpbmRleHRlcm0+PHByaW1hcnk+anNvbl9vYmpl Y3Q8L3ByaW1hcnk+PC9pbmRleHRlcm0+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwva2V5 d29yZHMvc3FsMjAxNi0wMi1yZXNlcnZlZC50eHQgYi9kb2Mvc3JjL3NnbWwva2V5d29yZHMv c3FsMjAxNi0wMi1yZXNlcnZlZC50eHQKaW5kZXggZjY1ZGQ0ZDU3Ny4uM2VlOTQ5MjAyNCAx MDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2tleXdvcmRzL3NxbDIwMTYtMDItcmVzZXJ2ZWQu dHh0CisrKyBiL2RvYy9zcmMvc2dtbC9rZXl3b3Jkcy9zcWwyMDE2LTAyLXJlc2VydmVkLnR4 dApAQCAtMTU3LDEyICsxNTcsMTUgQEAgSU5URVJWQUwKIElOVE8KIElTCiBKT0lOCitKU09O CiBKU09OX0FSUkFZCiBKU09OX0FSUkFZQUdHCiBKU09OX0VYSVNUUwogSlNPTl9PQkpFQ1QK IEpTT05fT0JKRUNUQUdHCiBKU09OX1FVRVJZCitKU09OX1NDQUxBUgorSlNPTl9TRVJJQUxJ WkUKIEpTT05fVEFCTEUKIEpTT05fVEFCTEVfUFJJTUlUSVZFCiBKU09OX1ZBTFVFCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY0V4cHIuYwppbmRleCBjOGVjNGQ3OGIyLi5jZDQ4YmM2YTA0IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMKQEAgLTQ4LDYgKzQ4LDggQEAKICNpbmNsdWRlICJ1 dGlscy9hcnJheS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAi dXRpbHMvZGF0dW0uaCIKKyNpbmNsdWRlICJ1dGlscy9qc29uLmgiCisjaW5jbHVkZSAidXRp bHMvanNvbmIuaCIKICNpbmNsdWRlICJ1dGlscy9qc29ucGF0aC5oIgogI2luY2x1ZGUgInV0 aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3R5cGNhY2hlLmgiCkBAIC0yNDQ5 LDYgKzI0NTEsMTIgQEAgRXhlY0luaXRFeHByUmVjKEV4cHIgKm5vZGUsIEV4cHJTdGF0ZSAq c3RhdGUsCiAJCQkJewogCQkJCQlFeGVjSW5pdEV4cHJSZWMoY3Rvci0+ZnVuYywgc3RhdGUs IHJlc3YsIHJlc251bGwpOwogCQkJCX0KKwkJCQllbHNlIGlmICgoY3Rvci0+dHlwZSA9PSBK U0NUT1JfSlNPTl9QQVJTRSAmJiAhY3Rvci0+dW5pcXVlKSB8fAorCQkJCQkJIGN0b3ItPnR5 cGUgPT0gSlNDVE9SX0pTT05fU0VSSUFMSVpFKQorCQkJCXsKKwkJCQkJLyogVXNlIHRoZSB2 YWx1ZSBvZiB0aGUgZmlyc3QgYXJndW1lbnQgYXMgYSByZXN1bHQgKi8KKwkJCQkJRXhlY0lu aXRFeHByUmVjKGxpbml0aWFsKGFyZ3MpLCBzdGF0ZSwgcmVzdiwgcmVzbnVsbCk7CisJCQkJ fQogCQkJCWVsc2UKIAkJCQl7CiAJCQkJCUpzb25Db25zdHJ1Y3RvckV4cHJTdGF0ZSAqamNz dGF0ZTsKQEAgLTI0ODcsNiArMjQ5NSw0MyBAQCBFeGVjSW5pdEV4cHJSZWMoRXhwciAqbm9k ZSwgRXhwclN0YXRlICpzdGF0ZSwKIAkJCQkJCWFyZ25vKys7CiAJCQkJCX0KIAorCQkJCQkv KiBwcmVwYXJlIHR5cGUgY2FjaGUgZm9yIGRhdHVtX3RvX2pzb25bYl0oKSAqLworCQkJCQlp ZiAoY3Rvci0+dHlwZSA9PSBKU0NUT1JfSlNPTl9TQ0FMQVIpCisJCQkJCXsKKwkJCQkJCWJv b2wJCWlzX2pzb25iID0KKwkJCQkJCWN0b3ItPnJldHVybmluZy0+Zm9ybWF0LT5mb3JtYXRf dHlwZSA9PSBKU19GT1JNQVRfSlNPTkI7CisKKwkJCQkJCWpjc3RhdGUtPmFyZ190eXBlX2Nh Y2hlID0KKwkJCQkJCQlwYWxsb2Moc2l6ZW9mKCpqY3N0YXRlLT5hcmdfdHlwZV9jYWNoZSkg KiBuYXJncyk7CisKKwkJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgbmFyZ3M7IGkrKykKKwkJ CQkJCXsKKwkJCQkJCQlpbnQJCQljYXRlZ29yeTsKKwkJCQkJCQlPaWQJCQlvdXRmdW5jaWQ7 CisJCQkJCQkJT2lkCQkJdHlwaWQgPSBqY3N0YXRlLT5hcmdfdHlwZXNbaV07CisKKwkJCQkJ CQlpZiAoaXNfanNvbmIpCisJCQkJCQkJeworCQkJCQkJCQlKc29uYlR5cGVDYXRlZ29yeSBq YmNhdDsKKworCQkJCQkJCQlqc29uYl9jYXRlZ29yaXplX3R5cGUodHlwaWQsICZqYmNhdCwg Jm91dGZ1bmNpZCk7CisKKwkJCQkJCQkJY2F0ZWdvcnkgPSAoaW50KSBqYmNhdDsKKwkJCQkJ CQl9CisJCQkJCQkJZWxzZQorCQkJCQkJCXsKKwkJCQkJCQkJSnNvblR5cGVDYXRlZ29yeSBq c2NhdDsKKworCQkJCQkJCQlqc29uX2NhdGVnb3JpemVfdHlwZSh0eXBpZCwgJmpzY2F0LCAm b3V0ZnVuY2lkKTsKKworCQkJCQkJCQljYXRlZ29yeSA9IChpbnQpIGpzY2F0OworCQkJCQkJ CX0KKworCQkJCQkJCWpjc3RhdGUtPmFyZ190eXBlX2NhY2hlW2ldLm91dGZ1bmNpZCA9IG91 dGZ1bmNpZDsKKwkJCQkJCQlqY3N0YXRlLT5hcmdfdHlwZV9jYWNoZVtpXS5jYXRlZ29yeSA9 IGNhdGVnb3J5OworCQkJCQkJfQorCQkJCQl9CisKIAkJCQkJRXhwckV2YWxQdXNoU3RlcChz dGF0ZSwgJnNjcmF0Y2gpOwogCQkJCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY0V4cHJJbnRlcnAuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBy SW50ZXJwLmMKaW5kZXggY2Q3YzRhM2I0OS4uZTMyYjA4NDljMiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYworKysgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjRXhwckludGVycC5jCkBAIC00NjA5LDcgKzQ2MDksNyBAQCBFeGVjRXZh bEpzb25Db25zdHJ1Y3RvcihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLAog CQkJCQkJCQkJCSBqY3N0YXRlLT5hcmdfdmFsdWVzLAogCQkJCQkJCQkJCSBqY3N0YXRlLT5h cmdfbnVsbHMsCiAJCQkJCQkJCQkJIGpjc3RhdGUtPmFyZ190eXBlcywKLQkJCQkJCQkJCQkg amNzdGF0ZS0+Y29uc3RydWN0b3ItPmFic2VudF9vbl9udWxsKTsKKwkJCQkJCQkJCQkgY3Rv ci0+YWJzZW50X29uX251bGwpOwogCWVsc2UgaWYgKGN0b3ItPnR5cGUgPT0gSlNDVE9SX0pT T05fT0JKRUNUKQogCQlyZXMgPSAoaXNfanNvbmIgPwogCQkJICAganNvbmJfYnVpbGRfb2Jq ZWN0X3dvcmtlciA6CkBAIC00NjE3LDggKzQ2MTcsNDggQEAgRXhlY0V2YWxKc29uQ29uc3Ry dWN0b3IoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKIAkJCQkJCQkJCQkg IGpjc3RhdGUtPmFyZ192YWx1ZXMsCiAJCQkJCQkJCQkJICBqY3N0YXRlLT5hcmdfbnVsbHMs CiAJCQkJCQkJCQkJICBqY3N0YXRlLT5hcmdfdHlwZXMsCi0JCQkJCQkJCQkJICBqY3N0YXRl LT5jb25zdHJ1Y3Rvci0+YWJzZW50X29uX251bGwsCi0JCQkJCQkJCQkJICBqY3N0YXRlLT5j b25zdHJ1Y3Rvci0+dW5pcXVlKTsKKwkJCQkJCQkJCQkgIGN0b3ItPmFic2VudF9vbl9udWxs LAorCQkJCQkJCQkJCSAgY3Rvci0+dW5pcXVlKTsKKwllbHNlIGlmIChjdG9yLT50eXBlID09 IEpTQ1RPUl9KU09OX1NDQUxBUikKKwl7CisJCWlmIChqY3N0YXRlLT5hcmdfbnVsbHNbMF0p CisJCXsKKwkJCXJlcyA9IChEYXR1bSkgMDsKKwkJCWlzbnVsbCA9IHRydWU7CisJCX0KKwkJ ZWxzZQorCQl7CisJCQlEYXR1bQkJdmFsdWUgPSBqY3N0YXRlLT5hcmdfdmFsdWVzWzBdOwor CQkJaW50CQkJY2F0ZWdvcnkgPSBqY3N0YXRlLT5hcmdfdHlwZV9jYWNoZVswXS5jYXRlZ29y eTsKKwkJCU9pZAkJCW91dGZ1bmNpZCA9IGpjc3RhdGUtPmFyZ190eXBlX2NhY2hlWzBdLm91 dGZ1bmNpZDsKKworCQkJaWYgKGlzX2pzb25iKQorCQkJCXJlcyA9IHRvX2pzb25iX3dvcmtl cih2YWx1ZSwgY2F0ZWdvcnksIG91dGZ1bmNpZCk7CisJCQllbHNlCisJCQkJcmVzID0gdG9f anNvbl93b3JrZXIodmFsdWUsIGNhdGVnb3J5LCBvdXRmdW5jaWQpOworCQl9CisJfQorCWVs c2UgaWYgKGN0b3ItPnR5cGUgPT0gSlNDVE9SX0pTT05fUEFSU0UpCisJeworCQlpZiAoamNz dGF0ZS0+YXJnX251bGxzWzBdKQorCQl7CisJCQlyZXMgPSAoRGF0dW0pIDA7CisJCQlpc251 bGwgPSB0cnVlOworCQl9CisJCWVsc2UKKwkJeworCQkJRGF0dW0JCXZhbHVlID0gamNzdGF0 ZS0+YXJnX3ZhbHVlc1swXTsKKwkJCXRleHQJICAgKmpzID0gRGF0dW1HZXRUZXh0UCh2YWx1 ZSk7CisKKwkJCWlmIChpc19qc29uYikKKwkJCQlyZXMgPSBqc29uYl9mcm9tX3RleHQoanMs IHRydWUpOworCQkJZWxzZQorCQkJeworCQkJCSh2b2lkKSBqc29uX3ZhbGlkYXRlKGpzLCB0 cnVlLCB0cnVlKTsKKwkJCQlyZXMgPSB2YWx1ZTsKKwkJCX0KKwkJfQorCX0KIAllbHNlCiAJ ewogCQlyZXMgPSAoRGF0dW0pIDA7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9u b2RlRnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCmluZGV4IGY1NzI2 YTNhYzMuLmI3YTEwMWNmY2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL25vZGVG dW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCkBAIC00MzMyLDYg KzQzMzIsMjAgQEAgcmF3X2V4cHJlc3Npb25fdHJlZV93YWxrZXJfaW1wbChOb2RlICpub2Rl LAogCQkJCQlyZXR1cm4gdHJ1ZTsKIAkJCX0KIAkJCWJyZWFrOworCQljYXNlIFRfSnNvblBh cnNlRXhwcjoKKwkJCXJldHVybiBXQUxLKCgoSnNvblBhcnNlRXhwciAqKSBub2RlKS0+ZXhw cik7CisJCWNhc2UgVF9Kc29uU2NhbGFyRXhwcjoKKwkJCXJldHVybiBXQUxLKCgoSnNvblNj YWxhckV4cHIgKikgbm9kZSktPmV4cHIpOworCQljYXNlIFRfSnNvblNlcmlhbGl6ZUV4cHI6 CisJCQl7CisJCQkJSnNvblNlcmlhbGl6ZUV4cHIgKmpzZSA9IChKc29uU2VyaWFsaXplRXhw ciAqKSBub2RlOworCisJCQkJaWYgKFdBTEsoanNlLT5leHByKSkKKwkJCQkJcmV0dXJuIHRy dWU7CisJCQkJaWYgKFdBTEsoanNlLT5vdXRwdXQpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJ CX0KKwkJCWJyZWFrOwogCQljYXNlIFRfSnNvbkNvbnN0cnVjdG9yRXhwcjoKIAkJCXsKIAkJ CQlKc29uQ29uc3RydWN0b3JFeHByICpjdG9yID0gKEpzb25Db25zdHJ1Y3RvckV4cHIgKikg bm9kZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgYi9zcmMvYmFj a2VuZC9wYXJzZXIvZ3JhbS55CmluZGV4IDViMzJlZWQyY2QuLmQ1MTdiNDhlMjIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKKysrIGIvc3JjL2JhY2tlbmQvcGFy c2VyL2dyYW0ueQpAQCAtNTcxLDcgKzU3MSw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJz aXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVy eSk7CiAldHlwZSA8bGlzdD4JY29weV9vcHRpb25zCiAKICV0eXBlIDx0eXBuYW0+CVR5cGVu YW1lIFNpbXBsZVR5cGVuYW1lIENvbnN0VHlwZW5hbWUKLQkJCQlHZW5lcmljVHlwZSBOdW1l cmljIG9wdF9mbG9hdAorCQkJCUdlbmVyaWNUeXBlIE51bWVyaWMgb3B0X2Zsb2F0IEpzb25U eXBlCiAJCQkJQ2hhcmFjdGVyIENvbnN0Q2hhcmFjdGVyCiAJCQkJQ2hhcmFjdGVyV2l0aExl bmd0aCBDaGFyYWN0ZXJXaXRob3V0TGVuZ3RoCiAJCQkJQ29uc3REYXRldGltZSBDb25zdElu dGVydmFsCkBAIC03NTQsNyArNzU0LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVW aWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsK IAlJTlRFUlNFQ1QgSU5URVJWQUwgSU5UTyBJTlZPS0VSIElTIElTTlVMTCBJU09MQVRJT04K IAogCUpPSU4gSlNPTiBKU09OX0FSUkFZIEpTT05fQVJSQVlBR0cgSlNPTl9FWElTVFMgSlNP Tl9PQkpFQ1QgSlNPTl9PQkpFQ1RBR0cKLQlKU09OX1FVRVJZIEpTT05fVkFMVUUKKwlKU09O X1FVRVJZIEpTT05fU0NBTEFSIEpTT05fU0VSSUFMSVpFIEpTT05fVkFMVUUKIAogCUtFWSBL RVlTIEtFRVAKIApAQCAtMTQwMzIsNiArMTQwMzIsNyBAQCBTaW1wbGVUeXBlbmFtZToKIAkJ CQkJJCQtPnR5cG1vZHMgPSBsaXN0X21ha2UyKG1ha2VJbnRDb25zdChJTlRFUlZBTF9GVUxM X1JBTkdFLCAtMSksCiAJCQkJCQkJCQkJCSBtYWtlSW50Q29uc3QoJDMsIEAzKSk7CiAJCQkJ fQorCQkJfCBKc29uVHlwZQkJCQkJCQkJeyAkJCA9ICQxOyB9CiAJCTsKIAogLyogV2UgaGF2 ZSBhIHNlcGFyYXRlIENvbnN0VHlwZW5hbWUgdG8gYWxsb3cgZGVmYXVsdGluZyBmaXhlZC1s ZW5ndGgKQEAgLTE0MDUwLDYgKzE0MDUxLDcgQEAgQ29uc3RUeXBlbmFtZToKIAkJCXwgQ29u c3RCaXQJCQkJCQkJCXsgJCQgPSAkMTsgfQogCQkJfCBDb25zdENoYXJhY3RlcgkJCQkJCXsg JCQgPSAkMTsgfQogCQkJfCBDb25zdERhdGV0aW1lCQkJCQkJCXsgJCQgPSAkMTsgfQorCQkJ fCBKc29uVHlwZQkJCQkJCQkJeyAkJCA9ICQxOyB9CiAJCTsKIAogLyoKQEAgLTE0NDE4LDYg KzE0NDIwLDEzIEBAIGludGVydmFsX3NlY29uZDoKIAkJCQl9CiAJCTsKIAorSnNvblR5cGU6 CisJCQlKU09OCisJCQkJeworCQkJCQkkJCA9IFN5c3RlbVR5cGVOYW1lKCJqc29uIik7CisJ CQkJCSQkLT5sb2NhdGlvbiA9IEAxOworCQkJCX0KKwkJOwogCiAvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKICAqCkBAIC0xNTc3Miw2ICsxNTc4MSwzMiBAQCBmdW5jX2V4cHJfY29tbW9u X3N1YmV4cHI6CiAJCQkJCW4tPmxvY2F0aW9uID0gQDE7CiAJCQkJCSQkID0gKE5vZGUgKikg bjsKIAkJCQl9IAorCQkJfCBKU09OICcoJyBqc29uX3ZhbHVlX2V4cHIganNvbl9rZXlfdW5p cXVlbmVzc19jb25zdHJhaW50X29wdCAnKScKKwkJCQl7CisJCQkJCUpzb25QYXJzZUV4cHIg Km4gPSBtYWtlTm9kZShKc29uUGFyc2VFeHByKTsKKworCQkJCQluLT5leHByID0gKEpzb25W YWx1ZUV4cHIgKikgJDM7CisJCQkJCW4tPnVuaXF1ZV9rZXlzID0gJDQ7CisJCQkJCW4tPmxv Y2F0aW9uID0gQDE7CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CisJCQl8IEpTT05f U0NBTEFSICcoJyBhX2V4cHIgJyknCisJCQkJeworCQkJCQlKc29uU2NhbGFyRXhwciAqbiA9 IG1ha2VOb2RlKEpzb25TY2FsYXJFeHByKTsKKworCQkJCQluLT5leHByID0gKEV4cHIgKikg JDM7CisJCQkJCW4tPmxvY2F0aW9uID0gQDE7CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJ CQl9CisJCQl8IEpTT05fU0VSSUFMSVpFICcoJyBqc29uX3ZhbHVlX2V4cHIganNvbl9vdXRw dXRfY2xhdXNlX29wdCAnKScKKwkJCQl7CisJCQkJCUpzb25TZXJpYWxpemVFeHByICpuID0g bWFrZU5vZGUoSnNvblNlcmlhbGl6ZUV4cHIpOworCisJCQkJCW4tPmV4cHIgPSAoSnNvblZh bHVlRXhwciAqKSAkMzsKKwkJCQkJbi0+b3V0cHV0ID0gKEpzb25PdXRwdXQgKikgJDQ7CisJ CQkJCW4tPmxvY2F0aW9uID0gQDE7CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CiAJ CQk7CiAKIC8qCkBAIC0xNzM4Myw3ICsxNzQxOCw2IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoK IAkJCXwgSU5TVEVBRAogCQkJfCBJTlZPS0VSCiAJCQl8IElTT0xBVElPTgotCQkJfCBKU09O CiAJCQl8IEtFRVAKIAkJCXwgS0VZCiAJCQl8IEtFWVMKQEAgLTE3NjAzLDEyICsxNzYzNywx NSBAQCBjb2xfbmFtZV9rZXl3b3JkOgogCQkJfCBJTlRfUAogCQkJfCBJTlRFR0VSCiAJCQl8 IElOVEVSVkFMCisJCQl8IEpTT04KIAkJCXwgSlNPTl9BUlJBWQogCQkJfCBKU09OX0FSUkFZ QUdHCiAJCQl8IEpTT05fRVhJU1RTCiAJCQl8IEpTT05fT0JKRUNUCiAJCQl8IEpTT05fT0JK RUNUQUdHCiAJCQl8IEpTT05fUVVFUlkKKwkJCXwgSlNPTl9TQ0FMQVIKKwkJCXwgSlNPTl9T RVJJQUxJWkUKIAkJCXwgSlNPTl9WQUxVRQogCQkJfCBMRUFTVAogCQkJfCBOQVRJT05BTApA QCAtMTc5NzUsNiArMTgwMTIsOCBAQCBiYXJlX2xhYmVsX2tleXdvcmQ6CiAJCQl8IEpTT05f T0JKRUNUCiAJCQl8IEpTT05fT0JKRUNUQUdHCiAJCQl8IEpTT05fUVVFUlkKKwkJCXwgSlNP Tl9TQ0FMQVIKKwkJCXwgSlNPTl9TRVJJQUxJWkUKIAkJCXwgSlNPTl9WQUxVRQogCQkJfCBL RUVQCiAJCQl8IEtFWQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4 cHIuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMKaW5kZXggZjczMGEzNDJm MC4uMmE3YTBlMjhmOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4 cHIuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCkBAIC04Niw2ICs4 NiwxMCBAQCBzdGF0aWMgTm9kZSAqdHJhbnNmb3JtSnNvbkFycmF5QWdnKFBhcnNlU3RhdGUg KnBzdGF0ZSwgSnNvbkFycmF5QWdnICphZ2cpOwogc3RhdGljIE5vZGUgKnRyYW5zZm9ybUpz b25Jc1ByZWRpY2F0ZShQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25Jc1ByZWRpY2F0ZSAqcCk7 CiBzdGF0aWMgTm9kZSAqdHJhbnNmb3JtSnNvbkZ1bmNFeHByKFBhcnNlU3RhdGUgKnBzdGF0 ZSwgSnNvbkZ1bmNFeHByICpwKTsKIHN0YXRpYyBOb2RlICp0cmFuc2Zvcm1Kc29uVmFsdWVF eHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvblZhbHVlRXhwciAqanZlKTsKK3N0YXRpYyBO b2RlICp0cmFuc2Zvcm1Kc29uUGFyc2VFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvblBh cnNlRXhwciAqZXhwcik7CitzdGF0aWMgTm9kZSAqdHJhbnNmb3JtSnNvblNjYWxhckV4cHIo UGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uU2NhbGFyRXhwciAqZXhwcik7CitzdGF0aWMgTm9k ZSAqdHJhbnNmb3JtSnNvblNlcmlhbGl6ZUV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLAorCQkJ CQkJCQkJCUpzb25TZXJpYWxpemVFeHByICogZXhwcik7CiBzdGF0aWMgTm9kZSAqbWFrZV9y b3dfY29tcGFyaXNvbl9vcChQYXJzZVN0YXRlICpwc3RhdGUsIExpc3QgKm9wbmFtZSwKIAkJ CQkJCQkJCUxpc3QgKmxhcmdzLCBMaXN0ICpyYXJncywgaW50IGxvY2F0aW9uKTsKIHN0YXRp YyBOb2RlICptYWtlX3Jvd19kaXN0aW5jdF9vcChQYXJzZVN0YXRlICpwc3RhdGUsIExpc3Qg Km9wbmFtZSwKQEAgLTM0MCw2ICszNDQsMTggQEAgdHJhbnNmb3JtRXhwclJlY3Vyc2UoUGFy c2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpleHByKQogCQkJcmVzdWx0ID0gdHJhbnNmb3JtSnNv blZhbHVlRXhwcihwc3RhdGUsIChKc29uVmFsdWVFeHByICopIGV4cHIpOwogCQkJYnJlYWs7 CiAKKwkJY2FzZSBUX0pzb25QYXJzZUV4cHI6CisJCQlyZXN1bHQgPSB0cmFuc2Zvcm1Kc29u UGFyc2VFeHByKHBzdGF0ZSwgKEpzb25QYXJzZUV4cHIgKikgZXhwcik7CisJCQlicmVhazsK KworCQljYXNlIFRfSnNvblNjYWxhckV4cHI6CisJCQlyZXN1bHQgPSB0cmFuc2Zvcm1Kc29u U2NhbGFyRXhwcihwc3RhdGUsIChKc29uU2NhbGFyRXhwciAqKSBleHByKTsKKwkJCWJyZWFr OworCisJCWNhc2UgVF9Kc29uU2VyaWFsaXplRXhwcjoKKwkJCXJlc3VsdCA9IHRyYW5zZm9y bUpzb25TZXJpYWxpemVFeHByKHBzdGF0ZSwgKEpzb25TZXJpYWxpemVFeHByICopIGV4cHIp OworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCS8qIHNob3VsZCBub3QgcmVhY2ggaGVy ZSAqLwogCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBub2RlIHR5cGU6ICVkIiwgKGlu dCkgbm9kZVRhZyhleHByKSk7CkBAIC0zMTczLDcgKzMxODksOCBAQCBtYWtlQ2FzZVRlc3RF eHByKE5vZGUgKmV4cHIpCiAgKi8KIHN0YXRpYyBOb2RlICoKIHRyYW5zZm9ybUpzb25WYWx1 ZUV4cHJFeHQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uVmFsdWVFeHByICp2ZSwKLQkJCQkJ CSAgSnNvbkZvcm1hdFR5cGUgZGVmYXVsdF9mb3JtYXQsIGJvb2wgaXNhcmcpCisJCQkJCQkg IEpzb25Gb3JtYXRUeXBlIGRlZmF1bHRfZm9ybWF0LCBib29sIGlzYXJnLAorCQkJCQkJICBP aWQgdGFyZ2V0dHlwZSkKIHsKIAlOb2RlCSAgICpleHByID0gdHJhbnNmb3JtRXhwclJlY3Vy c2UocHN0YXRlLCAoTm9kZSAqKSB2ZS0+cmF3X2V4cHIpOwogCU5vZGUJICAgKnJhd2V4cHI7 CkBAIC0zMjQ3LDE3ICszMjY0LDE3IEBAIHRyYW5zZm9ybUpzb25WYWx1ZUV4cHJFeHQoUGFy c2VTdGF0ZSAqcHN0YXRlLCBKc29uVmFsdWVFeHByICp2ZSwKIAllbHNlCiAJCWZvcm1hdCA9 IGRlZmF1bHRfZm9ybWF0OwogCi0JaWYgKGZvcm1hdCA9PSBKU19GT1JNQVRfREVGQVVMVCkK KwlpZiAoZm9ybWF0ID09IEpTX0ZPUk1BVF9ERUZBVUxUICYmCisJCSghT2lkSXNWYWxpZCh0 YXJnZXR0eXBlKSB8fCBleHBydHlwZSA9PSB0YXJnZXR0eXBlKSkKIAkJZXhwciA9IHJhd2V4 cHI7CiAJZWxzZQogCXsKLQkJT2lkCQkJdGFyZ2V0dHlwZSA9IGZvcm1hdCA9PSBKU19GT1JN QVRfSlNPTkIgPyBKU09OQk9JRCA6IEpTT05PSUQ7CiAJCU5vZGUJICAgKm9yaWcgPSBtYWtl Q2FzZVRlc3RFeHByKGV4cHIpOwogCQlOb2RlCSAgICpjb2VyY2VkOworCQlib29sCQljYXN0 X2lzX25lZWRlZCA9IE9pZElzVmFsaWQodGFyZ2V0dHlwZSk7CiAKLQkJZXhwciA9IG9yaWc7 Ci0KLQkJaWYgKCFpc2FyZyAmJiBleHBydHlwZSAhPSBCWVRFQU9JRCAmJiB0eXBjYXRlZ29y eSAhPSBUWVBDQVRFR09SWV9TVFJJTkcpCisJCWlmICghaXNhcmcgJiYgIWNhc3RfaXNfbmVl ZGVkICYmCisJCQlleHBydHlwZSAhPSBCWVRFQU9JRCAmJiB0eXBjYXRlZ29yeSAhPSBUWVBD QVRFR09SWV9TVFJJTkcpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJD T0RFX0RBVEFUWVBFX01JU01BVENIKSwKIAkJCQkJIGVycm1zZyh2ZS0+Zm9ybWF0LT5mb3Jt YXRfdHlwZSA9PSBKU19GT1JNQVRfREVGQVVMVCA/CkBAIC0zMjY2LDYgKzMyODMsOCBAQCB0 cmFuc2Zvcm1Kc29uVmFsdWVFeHByRXh0KFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvblZhbHVl RXhwciAqdmUsCiAJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCB2ZS0+Zm9ybWF0 LT5sb2NhdGlvbiA+PSAwID8KIAkJCQkJCQkJCQl2ZS0+Zm9ybWF0LT5sb2NhdGlvbiA6IGxv Y2F0aW9uKSkpOwogCisJCWV4cHIgPSBvcmlnOworCiAJCS8qIENvbnZlcnQgZW5jb2RlZCBK U09OIHRleHQgZnJvbSBieXRlYS4gKi8KIAkJaWYgKGZvcm1hdCA9PSBKU19GT1JNQVRfSlNP TiAmJiBleHBydHlwZSA9PSBCWVRFQU9JRCkKIAkJewpAQCAtMzI3Myw2ICszMjkyLDkgQEAg dHJhbnNmb3JtSnNvblZhbHVlRXhwckV4dChQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25WYWx1 ZUV4cHIgKnZlLAogCQkJZXhwcnR5cGUgPSBURVhUT0lEOwogCQl9CiAKKwkJaWYgKCFPaWRJ c1ZhbGlkKHRhcmdldHR5cGUpKQorCQkJdGFyZ2V0dHlwZSA9IGZvcm1hdCA9PSBKU19GT1JN QVRfSlNPTkIgPyBKU09OQk9JRCA6IEpTT05PSUQ7CisKIAkJLyogVHJ5IHRvIGNvZXJjZSB0 byB0aGUgdGFyZ2V0IHR5cGUuICovCiAJCWNvZXJjZWQgPSBjb2VyY2VfdG9fdGFyZ2V0X3R5 cGUocHN0YXRlLCBleHByLCBleHBydHlwZSwKIAkJCQkJCQkJCQl0YXJnZXR0eXBlLCAtMSwK QEAgLTMyODMsMTEgKzMzMDUsMjAgQEAgdHJhbnNmb3JtSnNvblZhbHVlRXhwckV4dChQYXJz ZVN0YXRlICpwc3RhdGUsIEpzb25WYWx1ZUV4cHIgKnZlLAogCQlpZiAoIWNvZXJjZWQpCiAJ CXsKIAkJCS8qIElmIGNvZXJjaW9uIGZhaWxlZCwgdXNlIHRvX2pzb24oKS90b19qc29uYigp IGZ1bmN0aW9ucy4gKi8KLQkJCU9pZAkJCWZub2lkID0gdGFyZ2V0dHlwZSA9PSBKU09OT0lE ID8gRl9UT19KU09OIDogRl9UT19KU09OQjsKLQkJCUZ1bmNFeHByICAgKmZleHByID0gbWFr ZUZ1bmNFeHByKGZub2lkLCB0YXJnZXR0eXBlLAotCQkJCQkJCQkJCQkgbGlzdF9tYWtlMShl eHByKSwKLQkJCQkJCQkJCQkJIEludmFsaWRPaWQsIEludmFsaWRPaWQsCi0JCQkJCQkJCQkJ CSBDT0VSQ0VfRVhQTElDSVRfQ0FMTCk7CisJCQlGdW5jRXhwciAgICpmZXhwcjsKKwkJCU9p ZAkJCWZub2lkOworCisJCQlpZiAoY2FzdF9pc19uZWVkZWQpIC8qIG9ubHkgQ0FTVCBpcyBh bGxvd2VkICovCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVf Q0FOTk9UX0NPRVJDRSksCisJCQkJCQkgZXJybXNnKCJjYW5ub3QgY2FzdCB0eXBlICVzIHRv ICVzIiwKKwkJCQkJCQkJZm9ybWF0X3R5cGVfYmUoZXhwcnR5cGUpLAorCQkJCQkJCQlmb3Jt YXRfdHlwZV9iZSh0YXJnZXR0eXBlKSksCisJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBz dGF0ZSwgbG9jYXRpb24pKSk7CisKKwkJCWZub2lkID0gdGFyZ2V0dHlwZSA9PSBKU09OT0lE ID8gRl9UT19KU09OIDogRl9UT19KU09OQjsKKwkJCWZleHByID0gbWFrZUZ1bmNFeHByKGZu b2lkLCB0YXJnZXR0eXBlLCBsaXN0X21ha2UxKGV4cHIpLAorCQkJCQkJCQkgSW52YWxpZE9p ZCwgSW52YWxpZE9pZCwgQ09FUkNFX0VYUExJQ0lUX0NBTEwpOwogCiAJCQlmZXhwci0+bG9j YXRpb24gPSBsb2NhdGlvbjsKIApAQCAtMzMxNSw3ICszMzQ2LDggQEAgdHJhbnNmb3JtSnNv blZhbHVlRXhwckV4dChQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25WYWx1ZUV4cHIgKnZlLAog c3RhdGljIE5vZGUgKgogdHJhbnNmb3JtSnNvblZhbHVlRXhwcihQYXJzZVN0YXRlICpwc3Rh dGUsIEpzb25WYWx1ZUV4cHIgKmp2ZSkKIHsKLQlyZXR1cm4gdHJhbnNmb3JtSnNvblZhbHVl RXhwckV4dChwc3RhdGUsIGp2ZSwgSlNfRk9STUFUX0pTT04sIGZhbHNlKTsKKwlyZXR1cm4g dHJhbnNmb3JtSnNvblZhbHVlRXhwckV4dChwc3RhdGUsIGp2ZSwgSlNfRk9STUFUX0pTT04s IGZhbHNlLAorCQkJCQkJCQkJIEludmFsaWRPaWQpOwogfQogCiAvKgpAQCAtMzMyNCw3ICsz MzU2LDggQEAgdHJhbnNmb3JtSnNvblZhbHVlRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpz b25WYWx1ZUV4cHIgKmp2ZSkKIHN0YXRpYyBOb2RlICoKIHRyYW5zZm9ybUpzb25WYWx1ZUV4 cHJEZWZhdWx0KFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvblZhbHVlRXhwciAqanZlKQogewot CXJldHVybiB0cmFuc2Zvcm1Kc29uVmFsdWVFeHByRXh0KHBzdGF0ZSwganZlLCBKU19GT1JN QVRfREVGQVVMVCwgZmFsc2UpOworCXJldHVybiB0cmFuc2Zvcm1Kc29uVmFsdWVFeHByRXh0 KHBzdGF0ZSwganZlLCBKU19GT1JNQVRfREVGQVVMVCwgZmFsc2UsCisJCQkJCQkJCQkgSW52 YWxpZE9pZCk7CiB9CiAKIC8qCkBAIC0zOTY2LDcgKzM5OTksNyBAQCB0cmFuc2Zvcm1Kc29u UGFzc2luZ0FyZ3MoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRm9ybWF0VHlwZSBmb3JtYXQs IExpc3QgKmFyZ3MsCiAJewogCQlKc29uQXJndW1lbnQgKmFyZyA9IGNhc3ROb2RlKEpzb25B cmd1bWVudCwgbGZpcnN0KGxjKSk7CiAJCU5vZGUJICAgKmV4cHIgPSB0cmFuc2Zvcm1Kc29u VmFsdWVFeHByRXh0KHBzdGF0ZSwgYXJnLT52YWwsCi0JCQkJCQkJCQkJCQkJIGZvcm1hdCwg dHJ1ZSk7CisJCQkJCQkJCQkJCQkJIGZvcm1hdCwgdHJ1ZSwgSW52YWxpZE9pZCk7CiAKIAkJ YXNzaWduX2V4cHJfY29sbGF0aW9ucyhwc3RhdGUsIGV4cHIpOwogCkBAIC00MzYyLDMgKzQz OTUsMTExIEBAIHRyYW5zZm9ybUpzb25GdW5jRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpz b25GdW5jRXhwciAqZnVuYykKIAogCXJldHVybiAoTm9kZSAqKSBqc2V4cHI7CiB9CisKKy8q CisgKiBUcmFuc2Zvcm0gYSBKU09OKCkgZXhwcmVzc2lvbi4KKyAqLworc3RhdGljIE5vZGUg KgordHJhbnNmb3JtSnNvblBhcnNlRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25QYXJz ZUV4cHIgKmpzZXhwcikKK3sKKwlKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcgPSBtYWtlTm9k ZShKc29uUmV0dXJuaW5nKTsKKwlOb2RlCSAgICphcmc7CisKKwlyZXR1cm5pbmctPmZvcm1h dCA9IG1ha2VKc29uRm9ybWF0KEpTX0ZPUk1BVF9KU09OLCBKU19FTkNfREVGQVVMVCwgLTEp OworCXJldHVybmluZy0+dHlwaWQgPSBKU09OT0lEOworCXJldHVybmluZy0+dHlwbW9kID0g LTE7CisKKwlpZiAoanNleHByLT51bmlxdWVfa2V5cykKKwl7CisJCS8qCisJCSAqIENvZXJj ZSBzdHJpbmcgYXJndW1lbnQgdG8gdGV4dCBhbmQgdGhlbiB0byBqc29uW2JdIGluIHRoZSBl eGVjdXRvcgorCQkgKiBub2RlIHdpdGgga2V5IHVuaXF1ZW5lc3MgY2hlY2suCisJCSAqLwor CQlKc29uVmFsdWVFeHByICpqdmUgPSBqc2V4cHItPmV4cHI7CisJCU9pZAkJCWFyZ190eXBl OworCisJCWFyZyA9IHRyYW5zZm9ybUpzb25QYXJzZUFyZyhwc3RhdGUsIChOb2RlICopIGp2 ZS0+cmF3X2V4cHIsIGp2ZS0+Zm9ybWF0LAorCQkJCQkJCQkJJmFyZ190eXBlKTsKKworCQlp ZiAoYXJnX3R5cGUgIT0gVEVYVE9JRCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJj b2RlKEVSUkNPREVfREFUQVRZUEVfTUlTTUFUQ0gpLAorCQkJCQkgZXJybXNnKCJjYW5ub3Qg dXNlIG5vbi1zdHJpbmcgdHlwZXMgd2l0aCBXSVRIIFVOSVFVRSBLRVlTIGNsYXVzZSIpLAor CQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwganNleHByLT5sb2NhdGlvbikpKTsK Kwl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogQ29lcmNlIGFyZ3VtZW50IHRvIHRhcmdldCB0 eXBlIHVzaW5nIENBU1QgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBQRworCQkgKiBmdW5jdGlv bi1saWtlIENBU1RzLgorCQkgKi8KKwkJYXJnID0gdHJhbnNmb3JtSnNvblZhbHVlRXhwckV4 dChwc3RhdGUsIGpzZXhwci0+ZXhwciwgSlNfRk9STUFUX0pTT04sCisJCQkJCQkJCQkJZmFs c2UsIHJldHVybmluZy0+dHlwaWQpOworCX0KKworCXJldHVybiBtYWtlSnNvbkNvbnN0cnVj dG9yRXhwcihwc3RhdGUsIEpTQ1RPUl9KU09OX1BBUlNFLCBsaXN0X21ha2UxKGFyZyksIE5V TEwsCisJCQkJCQkJCSAgIHJldHVybmluZywganNleHByLT51bmlxdWVfa2V5cywgZmFsc2Us CisJCQkJCQkJCSAgIGpzZXhwci0+bG9jYXRpb24pOworfQorCisvKgorICogVHJhbnNmb3Jt IGEgSlNPTl9TQ0FMQVIoKSBleHByZXNzaW9uLgorICovCitzdGF0aWMgTm9kZSAqCit0cmFu c2Zvcm1Kc29uU2NhbGFyRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25TY2FsYXJFeHBy ICpqc2V4cHIpCit7CisJSnNvblJldHVybmluZyAqcmV0dXJuaW5nID0gbWFrZU5vZGUoSnNv blJldHVybmluZyk7CisJTm9kZQkgICAqYXJnID0gdHJhbnNmb3JtRXhwclJlY3Vyc2UocHN0 YXRlLCAoTm9kZSAqKSBqc2V4cHItPmV4cHIpOworCisJcmV0dXJuaW5nLT5mb3JtYXQgPSBt YWtlSnNvbkZvcm1hdChKU19GT1JNQVRfSlNPTiwgSlNfRU5DX0RFRkFVTFQsIC0xKTsKKwly ZXR1cm5pbmctPnR5cGlkID0gSlNPTk9JRDsKKwlyZXR1cm5pbmctPnR5cG1vZCA9IC0xOwor CisJaWYgKGV4cHJUeXBlKGFyZykgPT0gVU5LTk9XTk9JRCkKKwkJYXJnID0gY29lcmNlX3Rv X3NwZWNpZmljX3R5cGUocHN0YXRlLCBhcmcsIFRFWFRPSUQsICJKU09OX1NDQUxBUiIpOwor CisJcmV0dXJuIG1ha2VKc29uQ29uc3RydWN0b3JFeHByKHBzdGF0ZSwgSlNDVE9SX0pTT05f U0NBTEFSLCBsaXN0X21ha2UxKGFyZyksIE5VTEwsCisJCQkJCQkJCSAgIHJldHVybmluZywg ZmFsc2UsIGZhbHNlLCBqc2V4cHItPmxvY2F0aW9uKTsKK30KKworLyoKKyAqIFRyYW5zZm9y bSBhIEpTT05fU0VSSUFMSVpFKCkgZXhwcmVzc2lvbi4KKyAqLworc3RhdGljIE5vZGUgKgor dHJhbnNmb3JtSnNvblNlcmlhbGl6ZUV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uU2Vy aWFsaXplRXhwciAqIGV4cHIpCit7CisJTm9kZQkgICAqYXJnID0gdHJhbnNmb3JtSnNvblZh bHVlRXhwcihwc3RhdGUsIGV4cHItPmV4cHIpOworCUpzb25SZXR1cm5pbmcgKnJldHVybmlu ZzsKKworCWlmIChleHByLT5vdXRwdXQpCisJeworCQlyZXR1cm5pbmcgPSB0cmFuc2Zvcm1K c29uT3V0cHV0KHBzdGF0ZSwgZXhwci0+b3V0cHV0LCB0cnVlKTsKKworCQlpZiAocmV0dXJu aW5nLT50eXBpZCAhPSBCWVRFQU9JRCkKKwkJeworCQkJY2hhcgkJdHlwY2F0ZWdvcnk7CisJ CQlib29sCQl0eXBpc3ByZWZlcnJlZDsKKworCQkJZ2V0X3R5cGVfY2F0ZWdvcnlfcHJlZmVy cmVkKHJldHVybmluZy0+dHlwaWQsICZ0eXBjYXRlZ29yeSwKKwkJCQkJCQkJCQkmdHlwaXNw cmVmZXJyZWQpOworCQkJaWYgKHR5cGNhdGVnb3J5ICE9IFRZUENBVEVHT1JZX1NUUklORykK KwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBVFlQRV9N SVNNQVRDSCksCisJCQkJCQkgZXJybXNnKCJjYW5ub3QgdXNlIFJFVFVSTklORyB0eXBlICVz IGluICVzIiwKKwkJCQkJCQkJZm9ybWF0X3R5cGVfYmUocmV0dXJuaW5nLT50eXBpZCksCisJ CQkJCQkJCSJKU09OX1NFUklBTElaRSgpIiksCisJCQkJCQkgZXJyaGludCgiVHJ5IHJldHVy bmluZyBhIHN0cmluZyB0eXBlIG9yIGJ5dGVhLiIpKSk7CisJCX0KKwl9CisJZWxzZQorCXsK KwkJLyogUkVUVVJOSU5HIFRFWFQgRk9STUFUIEpTT04gaXMgYnkgZGVmYXVsdCAqLworCQly ZXR1cm5pbmcgPSBtYWtlTm9kZShKc29uUmV0dXJuaW5nKTsKKwkJcmV0dXJuaW5nLT5mb3Jt YXQgPSBtYWtlSnNvbkZvcm1hdChKU19GT1JNQVRfSlNPTiwgSlNfRU5DX0RFRkFVTFQsIC0x KTsKKwkJcmV0dXJuaW5nLT50eXBpZCA9IFRFWFRPSUQ7CisJCXJldHVybmluZy0+dHlwbW9k ID0gLTE7CisJfQorCisJcmV0dXJuIG1ha2VKc29uQ29uc3RydWN0b3JFeHByKHBzdGF0ZSwg SlNDVE9SX0pTT05fU0VSSUFMSVpFLCBsaXN0X21ha2UxKGFyZyksCisJCQkJCQkJCSAgIE5V TEwsIHJldHVybmluZywgZmFsc2UsIGZhbHNlLCBleHByLT5sb2NhdGlvbik7Cit9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdGFyZ2V0LmMgYi9zcmMvYmFja2Vu ZC9wYXJzZXIvcGFyc2VfdGFyZ2V0LmMKaW5kZXggYmM3ZTQ0ZDhhOS4uMzRlNzA5NGFjZiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jCisrKyBiL3Ny Yy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYwpAQCAtMTkwOSw2ICsxOTA5LDE1IEBA IEZpZ3VyZUNvbG5hbWVJbnRlcm5hbChOb2RlICpub2RlLCBjaGFyICoqbmFtZSkKIAkJY2Fz ZSBUX1htbFNlcmlhbGl6ZToKIAkJCSpuYW1lID0gInhtbHNlcmlhbGl6ZSI7CiAJCQlyZXR1 cm4gMjsKKwkJY2FzZSBUX0pzb25QYXJzZUV4cHI6CisJCQkqbmFtZSA9ICJqc29uIjsKKwkJ CXJldHVybiAyOworCQljYXNlIFRfSnNvblNjYWxhckV4cHI6CisJCQkqbmFtZSA9ICJqc29u X3NjYWxhciI7CisJCQlyZXR1cm4gMjsKKwkJY2FzZSBUX0pzb25TZXJpYWxpemVFeHByOgor CQkJKm5hbWUgPSAianNvbl9zZXJpYWxpemUiOworCQkJcmV0dXJuIDI7CiAJCWNhc2UgVF9K c29uT2JqZWN0Q29uc3RydWN0b3I6CiAJCQkqbmFtZSA9ICJqc29uX29iamVjdCI7CiAJCQly ZXR1cm4gMjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlw ZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMKaW5kZXggMTI0MDJh MDYzNy4uMzZjNDVhMzk3OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zv cm1hdF90eXBlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMK QEAgLTI5NCw2ICsyOTQsMTAgQEAgZm9ybWF0X3R5cGVfZXh0ZW5kZWQoT2lkIHR5cGVfb2lk LCBpbnQzMiB0eXBlbW9kLCBiaXRzMTYgZmxhZ3MpCiAJCQllbHNlCiAJCQkJYnVmID0gcHN0 cmR1cCgiY2hhcmFjdGVyIHZhcnlpbmciKTsKIAkJCWJyZWFrOworCisJCWNhc2UgSlNPTk9J RDoKKwkJCWJ1ZiA9IHBzdHJkdXAoImpzb24iKTsKKwkJCWJyZWFrOwogCX0KIAogCWlmIChi dWYgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uLmMg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbi5jCmluZGV4IGRhNGIyYTlkMWIuLmRkNTgw NDQxMTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb24uYwpAQCAtMzAsMjEgKzMwLDYgQEAKICNpbmNs dWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy90eXBjYWNoZS5oIgog Ci10eXBlZGVmIGVudW0JCQkJCS8qIHR5cGUgY2F0ZWdvcmllcyBmb3IgZGF0dW1fdG9fanNv biAqLwotewotCUpTT05UWVBFX05VTEwsCQkJCS8qIG51bGwsIHNvIHdlIGRpZG4ndCBib3Ro ZXIgdG8gaWRlbnRpZnkgKi8KLQlKU09OVFlQRV9CT09MLAkJCQkvKiBib29sZWFuIChidWls dC1pbiB0eXBlcyBvbmx5KSAqLwotCUpTT05UWVBFX05VTUVSSUMsCQkJLyogbnVtZXJpYyAo ZGl0dG8pICovCi0JSlNPTlRZUEVfREFURSwJCQkJLyogd2UgdXNlIHNwZWNpYWwgZm9ybWF0 dGluZyBmb3IgZGF0ZXRpbWVzICovCi0JSlNPTlRZUEVfVElNRVNUQU1QLAotCUpTT05UWVBF X1RJTUVTVEFNUFRaLAotCUpTT05UWVBFX0pTT04sCQkJCS8qIEpTT04gaXRzZWxmIChhbmQg SlNPTkIpICovCi0JSlNPTlRZUEVfQVJSQVksCQkJCS8qIGFycmF5ICovCi0JSlNPTlRZUEVf Q09NUE9TSVRFLAkJCS8qIGNvbXBvc2l0ZSAqLwotCUpTT05UWVBFX0NBU1QsCQkJCS8qIHNv bWV0aGluZyB3aXRoIGFuIGV4cGxpY2l0IGNhc3QgdG8gSlNPTiAqLwotCUpTT05UWVBFX09U SEVSCQkJCS8qIGFsbCBlbHNlICovCi19IEpzb25UeXBlQ2F0ZWdvcnk7Ci0KIC8qIENvbW1v biBjb250ZXh0IGZvciBrZXkgdW5pcXVlbmVzcyBjaGVjayAqLwogdHlwZWRlZiBzdHJ1Y3Qg SFRBQiAqSnNvblVuaXF1ZUNoZWNrU3RhdGU7CS8qIGhhc2ggdGFibGUgZm9yIGtleSBuYW1l cyAqLwogCkBAIC05OSw5ICs4NCw2IEBAIHN0YXRpYyB2b2lkIGFycmF5X2RpbV90b19qc29u KFN0cmluZ0luZm8gcmVzdWx0LCBpbnQgZGltLCBpbnQgbmRpbXMsIGludCAqZGltcywKIAkJ CQkJCQkgIGJvb2wgdXNlX2xpbmVfZmVlZHMpOwogc3RhdGljIHZvaWQgYXJyYXlfdG9fanNv bl9pbnRlcm5hbChEYXR1bSBhcnJheSwgU3RyaW5nSW5mbyByZXN1bHQsCiAJCQkJCQkJCSAg IGJvb2wgdXNlX2xpbmVfZmVlZHMpOwotc3RhdGljIHZvaWQganNvbl9jYXRlZ29yaXplX3R5 cGUoT2lkIHR5cG9pZCwKLQkJCQkJCQkJIEpzb25UeXBlQ2F0ZWdvcnkgKnRjYXRlZ29yeSwK LQkJCQkJCQkJIE9pZCAqb3V0ZnVuY29pZCk7CiBzdGF0aWMgdm9pZCBkYXR1bV90b19qc29u KERhdHVtIHZhbCwgYm9vbCBpc19udWxsLCBTdHJpbmdJbmZvIHJlc3VsdCwKIAkJCQkJCSAg SnNvblR5cGVDYXRlZ29yeSB0Y2F0ZWdvcnksIE9pZCBvdXRmdW5jb2lkLAogCQkJCQkJICBi b29sIGtleV9zY2FsYXIpOwpAQCAtMTgxLDcgKzE2Myw3IEBAIGpzb25fcmVjdihQR19GVU5D VElPTl9BUkdTKQogICogb3V0cHV0IGZ1bmN0aW9uIE9JRC4gIElmIHRoZSByZXR1cm5lZCBj YXRlZ29yeSBpcyBKU09OVFlQRV9DQVNULCB3ZQogICogcmV0dXJuIHRoZSBPSUQgb2YgdGhl IHR5cGUtPkpTT04gY2FzdCBmdW5jdGlvbiBpbnN0ZWFkLgogICovCi1zdGF0aWMgdm9pZAor dm9pZAoganNvbl9jYXRlZ29yaXplX3R5cGUoT2lkIHR5cG9pZCwKIAkJCQkJIEpzb25UeXBl Q2F0ZWdvcnkgKnRjYXRlZ29yeSwKIAkJCQkJIE9pZCAqb3V0ZnVuY29pZCkKQEAgLTc2Myw2 ICs3NDUsMTYgQEAgcm93X3RvX2pzb25fcHJldHR5KFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdf UkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHRfd2l0aF9sZW4ocmVzdWx0LT5kYXRhLCBy ZXN1bHQtPmxlbikpOwogfQogCitEYXR1bQordG9fanNvbl93b3JrZXIoRGF0dW0gdmFsLCBK c29uVHlwZUNhdGVnb3J5IHRjYXRlZ29yeSwgT2lkIG91dGZ1bmNvaWQpCit7CisJU3RyaW5n SW5mbwlyZXN1bHQgPSBtYWtlU3RyaW5nSW5mbygpOworCisJZGF0dW1fdG9fanNvbih2YWws IGZhbHNlLCByZXN1bHQsIHRjYXRlZ29yeSwgb3V0ZnVuY29pZCwgZmFsc2UpOworCisJcmV0 dXJuIFBvaW50ZXJHZXREYXR1bShjc3RyaW5nX3RvX3RleHRfd2l0aF9sZW4ocmVzdWx0LT5k YXRhLCByZXN1bHQtPmxlbikpOworfQorCiBib29sCiB0b19qc29uX2lzX2ltbXV0YWJsZShP aWQgdHlwb2lkKQogewpAQCAtODAzLDcgKzc5NSw2IEBAIHRvX2pzb24oUEdfRlVOQ1RJT05f QVJHUykKIHsKIAlEYXR1bQkJdmFsID0gUEdfR0VUQVJHX0RBVFVNKDApOwogCU9pZAkJCXZh bF90eXBlID0gZ2V0X2ZuX2V4cHJfYXJndHlwZShmY2luZm8tPmZsaW5mbywgMCk7Ci0JU3Ry aW5nSW5mbwlyZXN1bHQ7CiAJSnNvblR5cGVDYXRlZ29yeSB0Y2F0ZWdvcnk7CiAJT2lkCQkJ b3V0ZnVuY29pZDsKIApAQCAtODE1LDExICs4MDYsNyBAQCB0b19qc29uKFBHX0ZVTkNUSU9O X0FSR1MpCiAJanNvbl9jYXRlZ29yaXplX3R5cGUodmFsX3R5cGUsCiAJCQkJCQkgJnRjYXRl Z29yeSwgJm91dGZ1bmNvaWQpOwogCi0JcmVzdWx0ID0gbWFrZVN0cmluZ0luZm8oKTsKLQot CWRhdHVtX3RvX2pzb24odmFsLCBmYWxzZSwgcmVzdWx0LCB0Y2F0ZWdvcnksIG91dGZ1bmNv aWQsIGZhbHNlKTsKLQotCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0X3dpdGhf bGVuKHJlc3VsdC0+ZGF0YSwgcmVzdWx0LT5sZW4pKTsKKwlQR19SRVRVUk5fREFUVU0odG9f anNvbl93b3JrZXIodmFsLCB0Y2F0ZWdvcnksIG91dGZ1bmNvaWQpKTsKIH0KIAogLyoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYi5jIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L2pzb25iLmMKaW5kZXggMmRkYjNkOGE1OC4uNGUzN2I3NTAwYSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L2pzb25iLmMKQEAgLTM0LDI2ICszNCwxMCBAQCB0eXBlZGVmIHN0cnVjdCBK c29uYkluU3RhdGUKIHsKIAlKc29uYlBhcnNlU3RhdGUgKnBhcnNlU3RhdGU7CiAJSnNvbmJW YWx1ZSAqcmVzOworCWJvb2wJCXVuaXF1ZV9rZXlzOwogCU5vZGUJICAgKmVzY29udGV4dDsK IH0gSnNvbmJJblN0YXRlOwogCi0vKiB1bmxpa2Ugd2l0aCBqc29uIGNhdGVnb3JpZXMsIHdl IG5lZWQgdG8gdHJlYXQganNvbiBhbmQganNvbmIgZGlmZmVyZW50bHkgKi8KLXR5cGVkZWYg ZW51bQkJCQkJLyogdHlwZSBjYXRlZ29yaWVzIGZvciBkYXR1bV90b19qc29uYiAqLwotewot CUpTT05CVFlQRV9OVUxMLAkJCQkvKiBudWxsLCBzbyB3ZSBkaWRuJ3QgYm90aGVyIHRvIGlk ZW50aWZ5ICovCi0JSlNPTkJUWVBFX0JPT0wsCQkJCS8qIGJvb2xlYW4gKGJ1aWx0LWluIHR5 cGVzIG9ubHkpICovCi0JSlNPTkJUWVBFX05VTUVSSUMsCQkJLyogbnVtZXJpYyAoZGl0dG8p ICovCi0JSlNPTkJUWVBFX0RBVEUsCQkJCS8qIHdlIHVzZSBzcGVjaWFsIGZvcm1hdHRpbmcg Zm9yIGRhdGV0aW1lcyAqLwotCUpTT05CVFlQRV9USU1FU1RBTVAsCQkvKiB3ZSB1c2Ugc3Bl Y2lhbCBmb3JtYXR0aW5nIGZvciB0aW1lc3RhbXAgKi8KLQlKU09OQlRZUEVfVElNRVNUQU1Q VFosCQkvKiAuLi4gYW5kIHRpbWVzdGFtcHR6ICovCi0JSlNPTkJUWVBFX0pTT04sCQkJCS8q IEpTT04gKi8KLQlKU09OQlRZUEVfSlNPTkIsCQkJLyogSlNPTkIgKi8KLQlKU09OQlRZUEVf QVJSQVksCQkJLyogYXJyYXkgKi8KLQlKU09OQlRZUEVfQ09NUE9TSVRFLAkJLyogY29tcG9z aXRlICovCi0JSlNPTkJUWVBFX0pTT05DQVNULAkJCS8qIHNvbWV0aGluZyB3aXRoIGFuIGV4 cGxpY2l0IGNhc3QgdG8gSlNPTiAqLwotCUpTT05CVFlQRV9PVEhFUgkJCQkvKiBhbGwgZWxz ZSAqLwotfSBKc29uYlR5cGVDYXRlZ29yeTsKLQogdHlwZWRlZiBzdHJ1Y3QgSnNvbmJBZ2dT dGF0ZQogewogCUpzb25iSW5TdGF0ZSAqcmVzOwpAQCAtNjMsNyArNDcsOCBAQCB0eXBlZGVm IHN0cnVjdCBKc29uYkFnZ1N0YXRlCiAJT2lkCQkJdmFsX291dHB1dF9mdW5jOwogfSBKc29u YkFnZ1N0YXRlOwogCi1zdGF0aWMgaW5saW5lIERhdHVtIGpzb25iX2Zyb21fY3N0cmluZyhj aGFyICpqc29uLCBpbnQgbGVuLCBOb2RlICplc2NvbnRleHQpOworc3RhdGljIGlubGluZSBE YXR1bSBqc29uYl9mcm9tX2NzdHJpbmcoY2hhciAqanNvbiwgaW50IGxlbiwgYm9vbCB1bmlx dWVfa2V5cywKKwkJCQkJCQkJCSAgIE5vZGUgKmVzY29udGV4dCk7CiBzdGF0aWMgYm9vbCBj aGVja1N0cmluZ0xlbihzaXplX3QgbGVuLCBOb2RlICplc2NvbnRleHQpOwogc3RhdGljIEpz b25QYXJzZUVycm9yVHlwZSBqc29uYl9pbl9vYmplY3Rfc3RhcnQodm9pZCAqcHN0YXRlKTsK IHN0YXRpYyBKc29uUGFyc2VFcnJvclR5cGUganNvbmJfaW5fb2JqZWN0X2VuZCh2b2lkICpw c3RhdGUpOwpAQCAtNzIsMTcgKzU3LDExIEBAIHN0YXRpYyBKc29uUGFyc2VFcnJvclR5cGUg anNvbmJfaW5fYXJyYXlfZW5kKHZvaWQgKnBzdGF0ZSk7CiBzdGF0aWMgSnNvblBhcnNlRXJy b3JUeXBlIGpzb25iX2luX29iamVjdF9maWVsZF9zdGFydCh2b2lkICpwc3RhdGUsIGNoYXIg KmZuYW1lLCBib29sIGlzbnVsbCk7CiBzdGF0aWMgdm9pZCBqc29uYl9wdXRfZXNjYXBlZF92 YWx1ZShTdHJpbmdJbmZvIG91dCwgSnNvbmJWYWx1ZSAqc2NhbGFyVmFsKTsKIHN0YXRpYyBK c29uUGFyc2VFcnJvclR5cGUganNvbmJfaW5fc2NhbGFyKHZvaWQgKnBzdGF0ZSwgY2hhciAq dG9rZW4sIEpzb25Ub2tlblR5cGUgdG9rZW50eXBlKTsKLXN0YXRpYyB2b2lkIGpzb25iX2Nh dGVnb3JpemVfdHlwZShPaWQgdHlwb2lkLAotCQkJCQkJCQkgIEpzb25iVHlwZUNhdGVnb3J5 ICp0Y2F0ZWdvcnksCi0JCQkJCQkJCSAgT2lkICpvdXRmdW5jb2lkKTsKIHN0YXRpYyB2b2lk IGNvbXBvc2l0ZV90b19qc29uYihEYXR1bSBjb21wb3NpdGUsIEpzb25iSW5TdGF0ZSAqcmVz dWx0KTsKIHN0YXRpYyB2b2lkIGFycmF5X2RpbV90b19qc29uYihKc29uYkluU3RhdGUgKnJl c3VsdCwgaW50IGRpbSwgaW50IG5kaW1zLCBpbnQgKmRpbXMsCiAJCQkJCQkJICAgRGF0dW0g KnZhbHMsIGJvb2wgKm51bGxzLCBpbnQgKnZhbGNvdW50LAogCQkJCQkJCSAgIEpzb25iVHlw ZUNhdGVnb3J5IHRjYXRlZ29yeSwgT2lkIG91dGZ1bmNvaWQpOwogc3RhdGljIHZvaWQgYXJy YXlfdG9fanNvbmJfaW50ZXJuYWwoRGF0dW0gYXJyYXksIEpzb25iSW5TdGF0ZSAqcmVzdWx0 KTsKLXN0YXRpYyB2b2lkIGpzb25iX2NhdGVnb3JpemVfdHlwZShPaWQgdHlwb2lkLAotCQkJ CQkJCQkgIEpzb25iVHlwZUNhdGVnb3J5ICp0Y2F0ZWdvcnksCi0JCQkJCQkJCSAgT2lkICpv dXRmdW5jb2lkKTsKIHN0YXRpYyB2b2lkIGRhdHVtX3RvX2pzb25iKERhdHVtIHZhbCwgYm9v bCBpc19udWxsLCBKc29uYkluU3RhdGUgKnJlc3VsdCwKIAkJCQkJCSAgIEpzb25iVHlwZUNh dGVnb3J5IHRjYXRlZ29yeSwgT2lkIG91dGZ1bmNvaWQsCiAJCQkJCQkgICBib29sIGtleV9z Y2FsYXIpOwpAQCAtMTAwLDcgKzc5LDcgQEAganNvbmJfaW4oUEdfRlVOQ1RJT05fQVJHUykK IHsKIAljaGFyCSAgICpqc29uID0gUEdfR0VUQVJHX0NTVFJJTkcoMCk7CiAKLQlyZXR1cm4g anNvbmJfZnJvbV9jc3RyaW5nKGpzb24sIHN0cmxlbihqc29uKSwgZmNpbmZvLT5jb250ZXh0 KTsKKwlyZXR1cm4ganNvbmJfZnJvbV9jc3RyaW5nKGpzb24sIHN0cmxlbihqc29uKSwgZmFs c2UsIGZjaW5mby0+Y29udGV4dCk7CiB9CiAKIC8qCkBAIC0xMjQsNyArMTAzLDcgQEAganNv bmJfcmVjdihQR19GVU5DVElPTl9BUkdTKQogCWVsc2UKIAkJZWxvZyhFUlJPUiwgInVuc3Vw cG9ydGVkIGpzb25iIHZlcnNpb24gbnVtYmVyICVkIiwgdmVyc2lvbik7CiAKLQlyZXR1cm4g anNvbmJfZnJvbV9jc3RyaW5nKHN0ciwgbmJ5dGVzLCBOVUxMKTsKKwlyZXR1cm4ganNvbmJf ZnJvbV9jc3RyaW5nKHN0ciwgbmJ5dGVzLCBmYWxzZSwgTlVMTCk7CiB9CiAKIC8qCkBAIC0x NjUsNiArMTQ0LDE1IEBAIGpzb25iX3NlbmQoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRV Uk5fQllURUFfUChwcV9lbmR0eXBzZW5kKCZidWYpKTsKIH0KIAorRGF0dW0KK2pzb25iX2Zy b21fdGV4dCh0ZXh0ICpqcywgYm9vbCB1bmlxdWVfa2V5cykKK3sKKwlyZXR1cm4ganNvbmJf ZnJvbV9jc3RyaW5nKFZBUkRBVEFfQU5ZKGpzKSwKKwkJCQkJCQkgIFZBUlNJWkVfQU5ZX0VY SERSKGpzKSwKKwkJCQkJCQkgIHVuaXF1ZV9rZXlzLAorCQkJCQkJCSAgTlVMTCk7Cit9CisK IC8qCiAgKiBHZXQgdGhlIHR5cGUgbmFtZSBvZiBhIGpzb25iIGNvbnRhaW5lci4KICAqLwpA QCAtMjU4LDcgKzI0Niw3IEBAIGpzb25iX3R5cGVvZihQR19GVU5DVElPTl9BUkdTKQogICog aW5zdGVhZCBvZiBiZWluZyB0aHJvd24uCiAgKi8KIHN0YXRpYyBpbmxpbmUgRGF0dW0KLWpz b25iX2Zyb21fY3N0cmluZyhjaGFyICpqc29uLCBpbnQgbGVuLCBOb2RlICplc2NvbnRleHQp Citqc29uYl9mcm9tX2NzdHJpbmcoY2hhciAqanNvbiwgaW50IGxlbiwgYm9vbCB1bmlxdWVf a2V5cywgTm9kZSAqZXNjb250ZXh0KQogewogCUpzb25MZXhDb250ZXh0ICpsZXg7CiAJSnNv bmJJblN0YXRlIHN0YXRlOwpAQCAtMjY4LDcgKzI1Niw5IEBAIGpzb25iX2Zyb21fY3N0cmlu ZyhjaGFyICpqc29uLCBpbnQgbGVuLCBOb2RlICplc2NvbnRleHQpCiAJbWVtc2V0KCZzZW0s IDAsIHNpemVvZihzZW0pKTsKIAlsZXggPSBtYWtlSnNvbkxleENvbnRleHRDc3RyaW5nTGVu KGpzb24sIGxlbiwgR2V0RGF0YWJhc2VFbmNvZGluZygpLCB0cnVlKTsKIAorCXN0YXRlLnVu aXF1ZV9rZXlzID0gdW5pcXVlX2tleXM7CiAJc3RhdGUuZXNjb250ZXh0ID0gZXNjb250ZXh0 OworCiAJc2VtLnNlbXN0YXRlID0gKHZvaWQgKikgJnN0YXRlOwogCiAJc2VtLm9iamVjdF9z dGFydCA9IGpzb25iX2luX29iamVjdF9zdGFydDsKQEAgLTMwNCw2ICsyOTQsNyBAQCBqc29u Yl9pbl9vYmplY3Rfc3RhcnQodm9pZCAqcHN0YXRlKQogCUpzb25iSW5TdGF0ZSAqX3N0YXRl ID0gKEpzb25iSW5TdGF0ZSAqKSBwc3RhdGU7CiAKIAlfc3RhdGUtPnJlcyA9IHB1c2hKc29u YlZhbHVlKCZfc3RhdGUtPnBhcnNlU3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOwor CV9zdGF0ZS0+cGFyc2VTdGF0ZS0+dW5pcXVlX2tleXMgPSBfc3RhdGUtPnVuaXF1ZV9rZXlz OwogCiAJcmV0dXJuIEpTT05fU1VDQ0VTUzsKIH0KQEAgLTY0MCw3ICs2MzEsNyBAQCBhZGRf aW5kZW50KFN0cmluZ0luZm8gb3V0LCBib29sIGluZGVudCwgaW50IGxldmVsKQogICogb3V0 cHV0IGZ1bmN0aW9uIE9JRC4gIElmIHRoZSByZXR1cm5lZCBjYXRlZ29yeSBpcyBKU09OQlRZ UEVfSlNPTkNBU1QsCiAgKiB3ZSByZXR1cm4gdGhlIE9JRCBvZiB0aGUgcmVsZXZhbnQgY2Fz dCBmdW5jdGlvbiBpbnN0ZWFkLgogICovCi1zdGF0aWMgdm9pZAordm9pZAoganNvbmJfY2F0 ZWdvcml6ZV90eXBlKE9pZCB0eXBvaWQsCiAJCQkJCSAgSnNvbmJUeXBlQ2F0ZWdvcnkgKnRj YXRlZ29yeSwKIAkJCQkJICBPaWQgKm91dGZ1bmNvaWQpCkBAIC0xMTUwLDYgKzExNDEsMTgg QEAgYWRkX2pzb25iKERhdHVtIHZhbCwgYm9vbCBpc19udWxsLCBKc29uYkluU3RhdGUgKnJl c3VsdCwKIAlkYXR1bV90b19qc29uYih2YWwsIGlzX251bGwsIHJlc3VsdCwgdGNhdGVnb3J5 LCBvdXRmdW5jb2lkLCBrZXlfc2NhbGFyKTsKIH0KIAorRGF0dW0KK3RvX2pzb25iX3dvcmtl cihEYXR1bSB2YWwsIEpzb25iVHlwZUNhdGVnb3J5IHRjYXRlZ29yeSwgT2lkIG91dGZ1bmNv aWQpCit7CisJSnNvbmJJblN0YXRlIHJlc3VsdDsKKworCW1lbXNldCgmcmVzdWx0LCAwLCBz aXplb2YoSnNvbmJJblN0YXRlKSk7CisKKwlkYXR1bV90b19qc29uYih2YWwsIGZhbHNlLCAm cmVzdWx0LCB0Y2F0ZWdvcnksIG91dGZ1bmNvaWQsIGZhbHNlKTsKKworCXJldHVybiBKc29u YlBHZXREYXR1bShKc29uYlZhbHVlVG9Kc29uYihyZXN1bHQucmVzKSk7Cit9CisKIGJvb2wK IHRvX2pzb25iX2lzX2ltbXV0YWJsZShPaWQgdHlwb2lkKQogewpAQCAtMTE5MSw3ICsxMTk0 LDYgQEAgdG9fanNvbmIoUEdfRlVOQ1RJT05fQVJHUykKIHsKIAlEYXR1bQkJdmFsID0gUEdf R0VUQVJHX0RBVFVNKDApOwogCU9pZAkJCXZhbF90eXBlID0gZ2V0X2ZuX2V4cHJfYXJndHlw ZShmY2luZm8tPmZsaW5mbywgMCk7Ci0JSnNvbmJJblN0YXRlIHJlc3VsdDsKIAlKc29uYlR5 cGVDYXRlZ29yeSB0Y2F0ZWdvcnk7CiAJT2lkCQkJb3V0ZnVuY29pZDsKIApAQCAtMTIwMywx MSArMTIwNSw3IEBAIHRvX2pzb25iKFBHX0ZVTkNUSU9OX0FSR1MpCiAJanNvbmJfY2F0ZWdv cml6ZV90eXBlKHZhbF90eXBlLAogCQkJCQkJICAmdGNhdGVnb3J5LCAmb3V0ZnVuY29pZCk7 CiAKLQltZW1zZXQoJnJlc3VsdCwgMCwgc2l6ZW9mKEpzb25iSW5TdGF0ZSkpOwotCi0JZGF0 dW1fdG9fanNvbmIodmFsLCBmYWxzZSwgJnJlc3VsdCwgdGNhdGVnb3J5LCBvdXRmdW5jb2lk LCBmYWxzZSk7Ci0KLQlQR19SRVRVUk5fUE9JTlRFUihKc29uYlZhbHVlVG9Kc29uYihyZXN1 bHQucmVzKSk7CisJUEdfUkVUVVJOX0RBVFVNKHRvX2pzb25iX3dvcmtlcih2YWwsIHRjYXRl Z29yeSwgb3V0ZnVuY29pZCkpOwogfQogCiBEYXR1bQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1 dGlscy5jCmluZGV4IDhjNWVjYzc0MDIuLmEwMmVkYmRkMTcgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvcnVsZXV0aWxzLmMKQEAgLTEwMDY3LDcgKzEwMDY3LDkgQEAgZ2V0X2pzb25fY29uc3Ry dWN0b3Jfb3B0aW9ucyhKc29uQ29uc3RydWN0b3JFeHByICpjdG9yLCBTdHJpbmdJbmZvIGJ1 ZikKIAlpZiAoY3Rvci0+dW5pcXVlKQogCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwg IiBXSVRIIFVOSVFVRSBLRVlTIik7CiAKLQlnZXRfanNvbl9yZXR1cm5pbmcoY3Rvci0+cmV0 dXJuaW5nLCBidWYsIHRydWUpOworCWlmIChjdG9yLT50eXBlICE9IEpTQ1RPUl9KU09OX1BB UlNFICYmCisJCWN0b3ItPnR5cGUgIT0gSlNDVE9SX0pTT05fU0NBTEFSKQorCQlnZXRfanNv bl9yZXR1cm5pbmcoY3Rvci0+cmV0dXJuaW5nLCBidWYsIHRydWUpOwogfQogCiBzdGF0aWMg dm9pZApAQCAtMTAwODEsNiArMTAwODMsMTUgQEAgZ2V0X2pzb25fY29uc3RydWN0b3IoSnNv bkNvbnN0cnVjdG9yRXhwciAqY3RvciwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LAogCiAJ c3dpdGNoIChjdG9yLT50eXBlKQogCXsKKwkJY2FzZSBKU0NUT1JfSlNPTl9QQVJTRToKKwkJ CWZ1bmNuYW1lID0gIkpTT04iOworCQkJYnJlYWs7CisJCWNhc2UgSlNDVE9SX0pTT05fU0NB TEFSOgorCQkJZnVuY25hbWUgPSAiSlNPTl9TQ0FMQVIiOworCQkJYnJlYWs7CisJCWNhc2Ug SlNDVE9SX0pTT05fU0VSSUFMSVpFOgorCQkJZnVuY25hbWUgPSAiSlNPTl9TRVJJQUxJWkUi OworCQkJYnJlYWs7CiAJCWNhc2UgSlNDVE9SX0pTT05fT0JKRUNUOgogCQkJZnVuY25hbWUg PSAiSlNPTl9PQkpFQ1QiOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9u b2Rlcy9wYXJzZW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKaW5k ZXggMDFlZDE5NmUyNC4uNWFhMGMzOTIwZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9k ZXMvcGFyc2Vub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaApA QCAtMTc5Nyw2ICsxNzk3LDQxIEBAIHR5cGVkZWYgc3RydWN0IEpzb25LZXlWYWx1ZQogCUpz b25WYWx1ZUV4cHIgKnZhbHVlOwkJLyogSlNPTiB2YWx1ZSBleHByZXNzaW9uICovCiB9IEpz b25LZXlWYWx1ZTsKIAorLyoKKyAqIEpzb25QYXJzZUV4cHIgLQorICoJCXVudHJhbnNmb3Jt ZWQgcmVwcmVzZW50YXRpb24gb2YgSlNPTigpCisgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25Q YXJzZUV4cHIKK3sKKwlOb2RlVGFnCQl0eXBlOworCUpzb25WYWx1ZUV4cHIgKmV4cHI7CQkv KiBzdHJpbmcgZXhwcmVzc2lvbiAqLworCWJvb2wJCXVuaXF1ZV9rZXlzOwkvKiBXSVRIIFVO SVFVRSBLRVlTPyAqLworCWludAkJCWxvY2F0aW9uOwkJLyogdG9rZW4gbG9jYXRpb24sIG9y IC0xIGlmIHVua25vd24gKi8KK30gSnNvblBhcnNlRXhwcjsKKworLyoKKyAqIEpzb25TY2Fs YXJFeHByIC0KKyAqCQl1bnRyYW5zZm9ybWVkIHJlcHJlc2VudGF0aW9uIG9mIEpTT05fU0NB TEFSKCkKKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvblNjYWxhckV4cHIKK3sKKwlOb2RlVGFn CQl0eXBlOworCUV4cHIJICAgKmV4cHI7CQkJLyogc2NhbGFyIGV4cHJlc3Npb24gKi8KKwlp bnQJCQlsb2NhdGlvbjsJCS8qIHRva2VuIGxvY2F0aW9uLCBvciAtMSBpZiB1bmtub3duICov Cit9IEpzb25TY2FsYXJFeHByOworCisvKgorICogSnNvblNlcmlhbGl6ZUV4cHIgLQorICoJ CXVudHJhbnNmb3JtZWQgcmVwcmVzZW50YXRpb24gb2YgSlNPTl9TRVJJQUxJWkUoKSBmdW5j dGlvbgorICovCit0eXBlZGVmIHN0cnVjdCBKc29uU2VyaWFsaXplRXhwcgoreworCU5vZGVU YWcJCXR5cGU7CisJSnNvblZhbHVlRXhwciAqZXhwcjsJCS8qIGpzb24gdmFsdWUgZXhwcmVz c2lvbiAqLworCUpzb25PdXRwdXQgKm91dHB1dDsJCQkvKiBSRVRVUk5JTkcgY2xhdXNlLCBp ZiBzcGVjaWZpZWQgICovCisJaW50CQkJbG9jYXRpb247CQkvKiB0b2tlbiBsb2NhdGlvbiwg b3IgLTEgaWYgdW5rbm93biAqLworfQkJCUpzb25TZXJpYWxpemVFeHByOworCiAvKgogICog SnNvbk9iamVjdENvbnN0cnVjdG9yIC0KICAqCQl1bnRyYW5zZm9ybWVkIHJlcHJlc2VudGF0 aW9uIG9mIEpTT05fT0JKRUNUKCkgY29uc3RydWN0b3IKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL25vZGVzL3ByaW1ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgK aW5kZXggYzkyMzIyMWYyNi4uOTZhNzlkMTY2NSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv bm9kZXMvcHJpbW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgK QEAgLTE2MDUsNyArMTYwNSwxMCBAQCB0eXBlZGVmIGVudW0gSnNvbkNvbnN0cnVjdG9yVHlw ZQogCUpTQ1RPUl9KU09OX09CSkVDVCA9IDEsCiAJSlNDVE9SX0pTT05fQVJSQVkgPSAyLAog CUpTQ1RPUl9KU09OX09CSkVDVEFHRyA9IDMsCi0JSlNDVE9SX0pTT05fQVJSQVlBR0cgPSA0 CisJSlNDVE9SX0pTT05fQVJSQVlBR0cgPSA0LAorCUpTQ1RPUl9KU09OX1NDQUxBUiA9IDUs CisJSlNDVE9SX0pTT05fU0VSSUFMSVpFID0gNiwKKwlKU0NUT1JfSlNPTl9QQVJTRSA9IDcK IH0gSnNvbkNvbnN0cnVjdG9yVHlwZTsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3BhcnNlci9rd2xpc3QuaCBiL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaAppbmRleCBi NTU1NmUzMzFhLi4wOTU0ZDlmYzdiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJzZXIv a3dsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCkBAIC0yMzMsMTMg KzIzMywxNSBAQCBQR19LRVlXT1JEKCJpcyIsIElTLCBUWVBFX0ZVTkNfTkFNRV9LRVlXT1JE LCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiaXNudWxsIiwgSVNOVUxMLCBUWVBFX0ZVTkNf TkFNRV9LRVlXT1JELCBBU19MQUJFTCkKIFBHX0tFWVdPUkQoImlzb2xhdGlvbiIsIElTT0xB VElPTiwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiam9p biIsIEpPSU4sIFRZUEVfRlVOQ19OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCi1QR19LRVlX T1JEKCJqc29uIiwgSlNPTiwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdf S0VZV09SRCgianNvbiIsIEpTT04sIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQ R19LRVlXT1JEKCJqc29uX2FycmF5IiwgSlNPTl9BUlJBWSwgQ09MX05BTUVfS0VZV09SRCwg QkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImpzb25fYXJyYXlhZ2ciLCBKU09OX0FSUkFZQUdH LCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgianNvbl9leGlz dHMiLCBKU09OX0VYSVNUUywgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tF WVdPUkQoImpzb25fb2JqZWN0IiwgSlNPTl9PQkpFQ1QsIENPTF9OQU1FX0tFWVdPUkQsIEJB UkVfTEFCRUwpCiBQR19LRVlXT1JEKCJqc29uX29iamVjdGFnZyIsIEpTT05fT0JKRUNUQUdH LCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgianNvbl9xdWVy eSIsIEpTT05fUVVFUlksIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlX T1JEKCJqc29uX3NjYWxhciIsIEpTT05fU0NBTEFSLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJF X0xBQkVMKQorUEdfS0VZV09SRCgianNvbl9zZXJpYWxpemUiLCBKU09OX1NFUklBTElaRSwg Q09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImpzb25fdmFsdWUi LCBKU09OX1ZBTFVFLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09S RCgia2VlcCIsIEtFRVAsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tF WVdPUkQoImtleSIsIEtFWSwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbi5oIGIvc3JjL2luY2x1ZGUvdXRpbHMv anNvbi5oCmluZGV4IDM1YTlhNTU0NWQuLjRjMGUwYmQwOWQgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3V0aWxzL2pzb24uaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9qc29uLmgKQEAg LTE2LDExICsxNiwzMCBAQAogCiAjaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKIAordHlw ZWRlZiBlbnVtCQkJCQkvKiB0eXBlIGNhdGVnb3JpZXMgZm9yIGRhdHVtX3RvX2pzb24gKi8K K3sKKwlKU09OVFlQRV9OVUxMLAkJCQkvKiBudWxsLCBzbyB3ZSBkaWRuJ3QgYm90aGVyIHRv IGlkZW50aWZ5ICovCisJSlNPTlRZUEVfQk9PTCwJCQkJLyogYm9vbGVhbiAoYnVpbHQtaW4g dHlwZXMgb25seSkgKi8KKwlKU09OVFlQRV9OVU1FUklDLAkJCS8qIG51bWVyaWMgKGRpdHRv KSAqLworCUpTT05UWVBFX0RBVEUsCQkJCS8qIHdlIHVzZSBzcGVjaWFsIGZvcm1hdHRpbmcg Zm9yIGRhdGV0aW1lcyAqLworCUpTT05UWVBFX1RJTUVTVEFNUCwKKwlKU09OVFlQRV9USU1F U1RBTVBUWiwKKwlKU09OVFlQRV9KU09OLAkJCQkvKiBKU09OIGl0c2VsZiAoYW5kIEpTT05C KSAqLworCUpTT05UWVBFX0FSUkFZLAkJCQkvKiBhcnJheSAqLworCUpTT05UWVBFX0NPTVBP U0lURSwJCQkvKiBjb21wb3NpdGUgKi8KKwlKU09OVFlQRV9DQVNULAkJCQkvKiBzb21ldGhp bmcgd2l0aCBhbiBleHBsaWNpdCBjYXN0IHRvIEpTT04gKi8KKwlKU09OVFlQRV9PVEhFUgkJ CQkvKiBhbGwgZWxzZSAqLworfSBKc29uVHlwZUNhdGVnb3J5OworCiAvKiBmdW5jdGlvbnMg aW4ganNvbi5jICovCiBleHRlcm4gdm9pZCBlc2NhcGVfanNvbihTdHJpbmdJbmZvIGJ1Ziwg Y29uc3QgY2hhciAqc3RyKTsKIGV4dGVybiBjaGFyICpKc29uRW5jb2RlRGF0ZVRpbWUoY2hh ciAqYnVmLCBEYXR1bSB2YWx1ZSwgT2lkIHR5cGlkLAogCQkJCQkJCQljb25zdCBpbnQgKnR6 cCk7CiBleHRlcm4gYm9vbCB0b19qc29uX2lzX2ltbXV0YWJsZShPaWQgdHlwb2lkKTsKK2V4 dGVybiB2b2lkIGpzb25fY2F0ZWdvcml6ZV90eXBlKE9pZCB0eXBvaWQsIEpzb25UeXBlQ2F0 ZWdvcnkgKnRjYXRlZ29yeSwKKwkJCQkJCQkJIE9pZCAqb3V0ZnVuY29pZCk7CitleHRlcm4g RGF0dW0gdG9fanNvbl93b3JrZXIoRGF0dW0gdmFsLCBKc29uVHlwZUNhdGVnb3J5IHRjYXRl Z29yeSwKKwkJCQkJCQlPaWQgb3V0ZnVuY29pZCk7CiBleHRlcm4gRGF0dW0ganNvbl9idWls ZF9vYmplY3Rfd29ya2VyKGludCBuYXJncywgRGF0dW0gKmFyZ3MsIGJvb2wgKm51bGxzLAog CQkJCQkJCQkJICBPaWQgKnR5cGVzLCBib29sIGFic2VudF9vbl9udWxsLAogCQkJCQkJCQkJ ICBib29sIHVuaXF1ZV9rZXlzKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2pz b25iLmggYi9zcmMvaW5jbHVkZS91dGlscy9qc29uYi5oCmluZGV4IGFjMjc5ZWU1MzUuLmQ5 ZTI4ZDE0Y2UgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25iLmgKKysrIGIv c3JjL2luY2x1ZGUvdXRpbHMvanNvbmIuaApAQCAtMzY4LDYgKzM2OCwyMiBAQCB0eXBlZGVm IHN0cnVjdCBKc29uYkl0ZXJhdG9yCiAJc3RydWN0IEpzb25iSXRlcmF0b3IgKnBhcmVudDsK IH0gSnNvbmJJdGVyYXRvcjsKIAorLyogdW5saWtlIHdpdGgganNvbiBjYXRlZ29yaWVzLCB3 ZSBuZWVkIHRvIHRyZWF0IGpzb24gYW5kIGpzb25iIGRpZmZlcmVudGx5ICovCit0eXBlZGVm IGVudW0JCQkJCS8qIHR5cGUgY2F0ZWdvcmllcyBmb3IgZGF0dW1fdG9fanNvbmIgKi8KK3sK KwlKU09OQlRZUEVfTlVMTCwJCQkJLyogbnVsbCwgc28gd2UgZGlkbid0IGJvdGhlciB0byBp ZGVudGlmeSAqLworCUpTT05CVFlQRV9CT09MLAkJCQkvKiBib29sZWFuIChidWlsdC1pbiB0 eXBlcyBvbmx5KSAqLworCUpTT05CVFlQRV9OVU1FUklDLAkJCS8qIG51bWVyaWMgKGRpdHRv KSAqLworCUpTT05CVFlQRV9EQVRFLAkJCQkvKiB3ZSB1c2Ugc3BlY2lhbCBmb3JtYXR0aW5n IGZvciBkYXRldGltZXMgKi8KKwlKU09OQlRZUEVfVElNRVNUQU1QLAkJLyogd2UgdXNlIHNw ZWNpYWwgZm9ybWF0dGluZyBmb3IgdGltZXN0YW1wICovCisJSlNPTkJUWVBFX1RJTUVTVEFN UFRaLAkJLyogLi4uIGFuZCB0aW1lc3RhbXB0eiAqLworCUpTT05CVFlQRV9KU09OLAkJCQkv KiBKU09OICovCisJSlNPTkJUWVBFX0pTT05CLAkJCS8qIEpTT05CICovCisJSlNPTkJUWVBF X0FSUkFZLAkJCS8qIGFycmF5ICovCisJSlNPTkJUWVBFX0NPTVBPU0lURSwJCS8qIGNvbXBv c2l0ZSAqLworCUpTT05CVFlQRV9KU09OQ0FTVCwJCQkvKiBzb21ldGhpbmcgd2l0aCBhbiBl eHBsaWNpdCBjYXN0IHRvIEpTT04gKi8KKwlKU09OQlRZUEVfT1RIRVIJCQkJLyogYWxsIGVs c2UgKi8KK30gSnNvbmJUeXBlQ2F0ZWdvcnk7CiAKIC8qIENvbnZlbmllbmNlIG1hY3JvcyAq Lwogc3RhdGljIGlubGluZSBKc29uYiAqCkBAIC00MTgsNiArNDM0LDcgQEAgZXh0ZXJuIHZv aWQgSnNvbmJIYXNoU2NhbGFyVmFsdWVFeHRlbmRlZChjb25zdCBKc29uYlZhbHVlICpzY2Fs YXJWYWwsCiAJCQkJCQkJCQkJIHVpbnQ2NCAqaGFzaCwgdWludDY0IHNlZWQpOwogCiAvKiBq c29uYi5jIHN1cHBvcnQgZnVuY3Rpb25zICovCitleHRlcm4gRGF0dW0ganNvbmJfZnJvbV90 ZXh0KHRleHQgKmpzLCBib29sIHVuaXF1ZV9rZXlzKTsKIGV4dGVybiBjaGFyICpKc29uYlRv Q1N0cmluZyhTdHJpbmdJbmZvIG91dCwgSnNvbmJDb250YWluZXIgKmluLAogCQkJCQkJCWlu dCBlc3RpbWF0ZWRfbGVuKTsKIGV4dGVybiBjaGFyICpKc29uYlRvQ1N0cmluZ0luZGVudChT dHJpbmdJbmZvIG91dCwgSnNvbmJDb250YWluZXIgKmluLApAQCAtNDMzLDYgKzQ1MCwxMCBA QCBleHRlcm4gRGF0dW0ganNvbmJfc2V0X2VsZW1lbnQoSnNvbmIgKmpiLCBEYXR1bSAqcGF0 aCwgaW50IHBhdGhfbGVuLAogZXh0ZXJuIERhdHVtIGpzb25iX2dldF9lbGVtZW50KEpzb25i ICpqYiwgRGF0dW0gKnBhdGgsIGludCBucGF0aCwKIAkJCQkJCQkgICBib29sICppc251bGws IGJvb2wgYXNfdGV4dCk7CiBleHRlcm4gYm9vbCB0b19qc29uYl9pc19pbW11dGFibGUoT2lk IHR5cG9pZCk7CitleHRlcm4gdm9pZCBqc29uYl9jYXRlZ29yaXplX3R5cGUoT2lkIHR5cG9p ZCwgSnNvbmJUeXBlQ2F0ZWdvcnkgKnRjYXRlZ29yeSwKKwkJCQkJCQkJICBPaWQgKm91dGZ1 bmNvaWQpOworZXh0ZXJuIERhdHVtIHRvX2pzb25iX3dvcmtlcihEYXR1bSB2YWwsIEpzb25i VHlwZUNhdGVnb3J5IHRjYXRlZ29yeSwKKwkJCQkJCQkgT2lkIG91dGZ1bmNvaWQpOwogZXh0 ZXJuIERhdHVtIGpzb25iX2J1aWxkX29iamVjdF93b3JrZXIoaW50IG5hcmdzLCBEYXR1bSAq YXJncywgYm9vbCAqbnVsbHMsCiAJCQkJCQkJCQkgICBPaWQgKnR5cGVzLCBib29sIGFic2Vu dF9vbl9udWxsLAogCQkJCQkJCQkJICAgYm9vbCB1bmlxdWVfa2V5cyk7CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iX3NxbGpzb24ub3V0IGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9zcWxqc29uLm91dAppbmRleCAyNGExZTNlYWJm Li4zMDRkMTM1Mzk0IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pz b25iX3NxbGpzb24ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJf c3FsanNvbi5vdXQKQEAgLTk1MSwxOCArOTUxLDIyIEBAIENoZWNrIGNvbnN0cmFpbnRzOgog CiBTRUxFQ1QgY2hlY2tfY2xhdXNlCiBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS5jaGVja19j b25zdHJhaW50cwotV0hFUkUgY29uc3RyYWludF9uYW1lIExJS0UgJ3Rlc3RfanNvbmJfY29u c3RyYWludCUnOworV0hFUkUgY29uc3RyYWludF9uYW1lIExJS0UgJ3Rlc3RfanNvbmJfY29u c3RyYWludCUnCitPUkRFUiBCWSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2NsYXVzZSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKChKU09OX0VYSVNUUygoanMpOjpqc29uYiwgJ3N0cmljdCAkLiJhIicgUkVUVVJOSU5H IGludGVnZXIgVFJVRSBPTiBFUlJPUikgPCAyKSkKKyAoKEpTT05fUVVFUlkoKGpzKTo6anNv bmIsICckLiJhIicgUkVUVVJOSU5HIGNoYXJhY3Rlcig1KSBPTUlUIFFVT1RFUyBFTVBUWSBB UlJBWSBPTiBFTVBUWSkgPiAoJ2EnOjpicGNoYXIgQ09MTEFURSAiQyIpKSkKKyAoKEpTT05f UVVFUlkoKGpzKTo6anNvbmIsICckLiJhIicgUkVUVVJOSU5HIGpzb25iIFdJVEggQ09ORElU SU9OQUwgV1JBUFBFUiBFTVBUWSBPQkpFQ1QgT04gRVJST1IpIDwgJ1sxMF0nOjpqc29uYikp CisgKChKU09OX1ZBTFVFKChqcyk6Ompzb25iLCAnJC4iYSInIFJFVFVSTklORyBpbnRlZ2Vy IERFRkFVTFQgKCgnMTInOjp0ZXh0IHx8IGkpKTo6aW50ZWdlciBPTiBFTVBUWSBFUlJPUiBP TiBFUlJPUikgPiBpKSkKICAoKGpzIElTIEpTT04pKQogIChKU09OX0VYSVNUUygoanMpOjpq c29uYiwgJyQuImEiJyBQQVNTSU5HIChpICsgNSkgQVMgaW50LCAoaSk6OnRleHQgQVMgdHh0 LCBBUlJBWVsxLCAyLCAzXSBBUyBhcnIpKQotICgoSlNPTl9WQUxVRSgoanMpOjpqc29uYiwg JyQuImEiJyBSRVRVUk5JTkcgaW50ZWdlciBERUZBVUxUICgoJzEyJzo6dGV4dCB8fCBpKSk6 OmludGVnZXIgT04gRU1QVFkgRVJST1IgT04gRVJST1IpID4gaSkpCi0gKChKU09OX1FVRVJZ KChqcyk6Ompzb25iLCAnJC4iYSInIFJFVFVSTklORyBqc29uYiBXSVRIIENPTkRJVElPTkFM IFdSQVBQRVIgRU1QVFkgT0JKRUNUIE9OIEVSUk9SKSA8ICdbMTBdJzo6anNvbmIpKQotICgo SlNPTl9RVUVSWSgoanMpOjpqc29uYiwgJyQuImEiJyBSRVRVUk5JTkcgY2hhcmFjdGVyKDUp IE9NSVQgUVVPVEVTIEVNUFRZIEFSUkFZIE9OIEVNUFRZKSA+ICgnYSc6OmJwY2hhciBDT0xM QVRFICJDIikpKQotICgoSlNPTl9FWElTVFMoKGpzKTo6anNvbmIsICdzdHJpY3QgJC4iYSIn IFJFVFVSTklORyBpbnRlZ2VyIFRSVUUgT04gRVJST1IpIDwgMikpCiAoNiByb3dzKQogCi1T RUxFQ1QgcGdfZ2V0X2V4cHIoYWRiaW4sIGFkcmVsaWQpIEZST00gcGdfYXR0cmRlZiBXSEVS RSBhZHJlbGlkID0gJ3Rlc3RfanNvbmJfY29uc3RyYWludHMnOjpyZWdjbGFzczsKK1NFTEVD VCBwZ19nZXRfZXhwcihhZGJpbiwgYWRyZWxpZCkKK0ZST00gcGdfYXR0cmRlZgorV0hFUkUg YWRyZWxpZCA9ICd0ZXN0X2pzb25iX2NvbnN0cmFpbnRzJzo6cmVnY2xhc3MKK09SREVSIEJZ IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X2V4cHIgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KICBKU09OX1FVRVJZKCdbMSwgMl0nOjpqc29uYiwgJyRbKl0nIFJFVFVSTklORyBq c29uYiBXSVRIIFVOQ09ORElUSU9OQUwgV1JBUFBFUikKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvc3FsanNvbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3NxbGpzb24ub3V0CmluZGV4IDQzOWU3ZmFmNzguLjYxNWFmNDJiOGEgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3FsanNvbi5vdXQKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9zcWxqc29uLm91dApAQCAtMSwzICsxLDI4MCBAQAorLS0g SlNPTigpCitTRUxFQ1QgSlNPTigpOworRVJST1I6ICBzeW50YXggZXJyb3IgYXQgb3IgbmVh ciAiKSIKK0xJTkUgMTogU0VMRUNUIEpTT04oKTsKKyAgICAgICAgICAgICAgICAgICAgXgor U0VMRUNUIEpTT04oTlVMTCk7CisganNvbiAKKy0tLS0tLQorIAorKDEgcm93KQorCitTRUxF Q1QgSlNPTigneyAiYSIgOiAxIH0gJyk7CisgICAgIGpzb24gICAgIAorLS0tLS0tLS0tLS0t LS0KKyB7ICJhIiA6IDEgfSAKKygxIHJvdykKKworU0VMRUNUIEpTT04oJ3sgImEiIDogMSB9 ICcgRk9STUFUIEpTT04pOworICAgICBqc29uICAgICAKKy0tLS0tLS0tLS0tLS0tCisgeyAi YSIgOiAxIH0gCisoMSByb3cpCisKK1NFTEVDVCBKU09OKCd7ICJhIiA6IDEgfSAnIEZPUk1B VCBKU09OIEVOQ09ESU5HIFVURjgpOworRVJST1I6ICBKU09OIEVOQ09ESU5HIGNsYXVzZSBp cyBvbmx5IGFsbG93ZWQgZm9yIGJ5dGVhIGlucHV0IHR5cGUKK0xJTkUgMTogU0VMRUNUIEpT T04oJ3sgImEiIDogMSB9ICcgRk9STUFUIEpTT04gRU5DT0RJTkcgVVRGOCk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09OKCd7ICJhIiA6IDEg fSAnOjpieXRlYSBGT1JNQVQgSlNPTiBFTkNPRElORyBVVEY4KTsKKyAgICAganNvbiAgICAg CistLS0tLS0tLS0tLS0tLQorIHsgImEiIDogMSB9IAorKDEgcm93KQorCitTRUxFQ1QgcGdf dHlwZW9mKEpTT04oJ3sgImEiIDogMSB9ICcpKTsKKyBwZ190eXBlb2YgCistLS0tLS0tLS0t LQorIGpzb24KKygxIHJvdykKKworU0VMRUNUIEpTT04oJyAgIDEgICAnOjpqc29uKTsKKyAg anNvbiAgIAorLS0tLS0tLS0tCisgICAgMSAgIAorKDEgcm93KQorCitTRUxFQ1QgSlNPTign ICAgMSAgICc6Ompzb25iKTsKKyBqc29uIAorLS0tLS0tCisgMQorKDEgcm93KQorCitTRUxF Q1QgSlNPTignICAgMSAgICc6Ompzb24gV0lUSCBVTklRVUUgS0VZUyk7CitFUlJPUjogIGNh bm5vdCB1c2Ugbm9uLXN0cmluZyB0eXBlcyB3aXRoIFdJVEggVU5JUVVFIEtFWVMgY2xhdXNl CitMSU5FIDE6IFNFTEVDVCBKU09OKCcgICAxICAgJzo6anNvbiBXSVRIIFVOSVFVRSBLRVlT KTsKKyAgICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09OKDEyMyk7CitFUlJPUjogIGNhbm5v dCBjYXN0IHR5cGUgaW50ZWdlciB0byBqc29uCitMSU5FIDE6IFNFTEVDVCBKU09OKDEyMyk7 CisgICAgICAgICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09OKCd7ImEiOiAxLCAiYSI6IDJ9 Jyk7CisgICAgICAganNvbiAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLQorIHsiYSI6IDEs ICJhIjogMn0KKygxIHJvdykKKworU0VMRUNUIEpTT04oJ3siYSI6IDEsICJhIjogMn0nIFdJ VEggVU5JUVVFIEtFWVMpOworRVJST1I6ICBkdXBsaWNhdGUgSlNPTiBvYmplY3Qga2V5IHZh bHVlCitTRUxFQ1QgSlNPTigneyJhIjogMSwgImEiOiAyfScgV0lUSE9VVCBVTklRVUUgS0VZ Uyk7CisgICAgICAganNvbiAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLQorIHsiYSI6IDEs ICJhIjogMn0KKygxIHJvdykKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxF Q1QgSlNPTignMTIzJyk7CisgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyAgIE91dHB1dDogSlNPTignMTIz Jzo6anNvbikKKygyIHJvd3MpCisKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VM RUNUIEpTT04oJzEyMycgRk9STUFUIEpTT04pOworICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0CisgICBPdXRw dXQ6IEpTT04oJzEyMyc6Ompzb24pCisoMiByb3dzKQorCitFWFBMQUlOIChWRVJCT1NFLCBD T1NUUyBPRkYpIFNFTEVDVCBKU09OKCcxMjMnOjpieXRlYSBGT1JNQVQgSlNPTik7CisgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyAgIE91 dHB1dDogSlNPTignXHgzMTMyMzMnOjpieXRlYSBGT1JNQVQgSlNPTikKKygyIHJvd3MpCisK K0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUIEpTT04oJzEyMyc6OmJ5dGVh IEZPUk1BVCBKU09OIEVOQ09ESU5HIFVURjgpOworICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3Vs dAorICAgT3V0cHV0OiBKU09OKCdceDMxMzIzMyc6OmJ5dGVhIEZPUk1BVCBKU09OIEVOQ09E SU5HIFVURjgpCisoMiByb3dzKQorCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNF TEVDVCBKU09OKCcxMjMnIFdJVEggVU5JUVVFIEtFWVMpOworICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdAorICAgT3V0cHV0OiBKU09OKCcxMjMn Ojp0ZXh0IFdJVEggVU5JUVVFIEtFWVMpCisoMiByb3dzKQorCitFWFBMQUlOIChWRVJCT1NF LCBDT1NUUyBPRkYpIFNFTEVDVCBKU09OKCcxMjMnIFdJVEhPVVQgVU5JUVVFIEtFWVMpOwor ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgUmVzdWx0CisgICBPdXRwdXQ6IEpTT04oJzEyMyc6Ompzb24pCisoMiByb3dz KQorCistLSBKU09OX1NDQUxBUigpCitTRUxFQ1QgSlNPTl9TQ0FMQVIoKTsKK0VSUk9SOiAg c3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIikiCitMSU5FIDE6IFNFTEVDVCBKU09OX1NDQUxB UigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorU0VMRUNUIEpTT05fU0NBTEFS KE5VTEwpOworIGpzb25fc2NhbGFyIAorLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitT RUxFQ1QgSlNPTl9TQ0FMQVIoTlVMTDo6aW50KTsKKyBqc29uX3NjYWxhciAKKy0tLS0tLS0t LS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIEpTT05fU0NBTEFSKDEyMyk7CisganNvbl9z Y2FsYXIgCistLS0tLS0tLS0tLS0tCisgMTIzCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ND QUxBUigxMjMuNDUpOworIGpzb25fc2NhbGFyIAorLS0tLS0tLS0tLS0tLQorIDEyMy40NQor KDEgcm93KQorCitTRUxFQ1QgSlNPTl9TQ0FMQVIoMTIzLjQ1OjpudW1lcmljKTsKKyBqc29u X3NjYWxhciAKKy0tLS0tLS0tLS0tLS0KKyAxMjMuNDUKKygxIHJvdykKKworU0VMRUNUIEpT T05fU0NBTEFSKHRydWUpOworIGpzb25fc2NhbGFyIAorLS0tLS0tLS0tLS0tLQorIHRydWUK KygxIHJvdykKKworU0VMRUNUIEpTT05fU0NBTEFSKGZhbHNlKTsKKyBqc29uX3NjYWxhciAK Ky0tLS0tLS0tLS0tLS0KKyBmYWxzZQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9TQ0FMQVIo JyAxMjMuNDUnKTsKKyBqc29uX3NjYWxhciAKKy0tLS0tLS0tLS0tLS0KKyAiIDEyMy40NSIK KygxIHJvdykKKworU0VMRUNUIEpTT05fU0NBTEFSKCcyMDIwLTA2LTA3Jzo6ZGF0ZSk7Cisg anNvbl9zY2FsYXIgIAorLS0tLS0tLS0tLS0tLS0KKyAiMjAyMC0wNi0wNyIKKygxIHJvdykK KworU0VMRUNUIEpTT05fU0NBTEFSKCcyMDIwLTA2LTA3IDAxOjAyOjAzJzo6dGltZXN0YW1w KTsKKyAgICAgIGpzb25fc2NhbGFyICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICIyMDIwLTA2LTA3VDAxOjAyOjAzIgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9TQ0FMQVIo J3t9Jzo6anNvbik7CisganNvbl9zY2FsYXIgCistLS0tLS0tLS0tLS0tCisge30KKygxIHJv dykKKworU0VMRUNUIEpTT05fU0NBTEFSKCd7fSc6Ompzb25iKTsKKyBqc29uX3NjYWxhciAK Ky0tLS0tLS0tLS0tLS0KKyB7fQorKDEgcm93KQorCitFWFBMQUlOIChWRVJCT1NFLCBDT1NU UyBPRkYpIFNFTEVDVCBKU09OX1NDQUxBUigxMjMpOworICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdAorICAgT3V0 cHV0OiBKU09OX1NDQUxBUigxMjMpCisoMiByb3dzKQorCitFWFBMQUlOIChWRVJCT1NFLCBD T1NUUyBPRkYpIFNFTEVDVCBKU09OX1NDQUxBUignMTIzJyk7CisgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIFJlc3VsdAorICAgT3V0cHV0OiBKU09OX1NDQUxBUignMTIzJzo6dGV4dCkKKygy IHJvd3MpCisKKy0tIEpTT05fU0VSSUFMSVpFKCkKK1NFTEVDVCBKU09OX1NFUklBTElaRSgp OworRVJST1I6ICBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAiKSIKK0xJTkUgMTogU0VMRUNU IEpTT05fU0VSSUFMSVpFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitT RUxFQ1QgSlNPTl9TRVJJQUxJWkUoTlVMTCk7CisganNvbl9zZXJpYWxpemUgCistLS0tLS0t LS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1NFUklBTElaRShKU09OKCd7 ICJhIiA6IDEgfSAnKSk7CisganNvbl9zZXJpYWxpemUgCistLS0tLS0tLS0tLS0tLS0tCisg eyAiYSIgOiAxIH0gCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1NFUklBTElaRSgneyAiYSIg OiAxIH0gJyk7CisganNvbl9zZXJpYWxpemUgCistLS0tLS0tLS0tLS0tLS0tCisgeyAiYSIg OiAxIH0gCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1NFUklBTElaRSgnMScpOworIGpzb25f c2VyaWFsaXplIAorLS0tLS0tLS0tLS0tLS0tLQorIDEKKygxIHJvdykKKworU0VMRUNUIEpT T05fU0VSSUFMSVpFKCcxJyBGT1JNQVQgSlNPTik7CisganNvbl9zZXJpYWxpemUgCistLS0t LS0tLS0tLS0tLS0tCisgMQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9TRVJJQUxJWkUoJ3sg ImEiIDogMSB9ICcgUkVUVVJOSU5HIGJ5dGVhKTsKKyAgICAgICBqc29uX3NlcmlhbGl6ZSAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBceDdiMjAyMjYxMjIyMDNh MjAzMTIwN2QyMAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9TRVJJQUxJWkUoJ3sgImEiIDog MSB9ICcgUkVUVVJOSU5HIHZhcmNoYXIpOworIGpzb25fc2VyaWFsaXplIAorLS0tLS0tLS0t LS0tLS0tLQorIHsgImEiIDogMSB9IAorKDEgcm93KQorCitTRUxFQ1QgcGdfdHlwZW9mKEpT T05fU0VSSUFMSVpFKE5VTEwpKTsKKyBwZ190eXBlb2YgCistLS0tLS0tLS0tLQorIHRleHQK KygxIHJvdykKKworLS0gb25seSBzdHJpbmcgdHlwZXMgb3IgYnl0ZWEgYWxsb3dlZAorU0VM RUNUIEpTT05fU0VSSUFMSVpFKCd7ICJhIiA6IDEgfSAnIFJFVFVSTklORyBqc29uYik7CitF UlJPUjogIGNhbm5vdCB1c2UgUkVUVVJOSU5HIHR5cGUganNvbmIgaW4gSlNPTl9TRVJJQUxJ WkUoKQorSElOVDogIFRyeSByZXR1cm5pbmcgYSBzdHJpbmcgdHlwZSBvciBieXRlYS4KK0VY UExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUIEpTT05fU0VSSUFMSVpFKCd7fScp OworICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgUmVzdWx0CisgICBPdXRwdXQ6IEpTT05fU0VSSUFMSVpFKCd7fSc6Ompzb24gUkVU VVJOSU5HIHRleHQpCisoMiByb3dzKQorCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYp IFNFTEVDVCBKU09OX1NFUklBTElaRSgne30nIFJFVFVSTklORyBieXRlYSk7CisgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJl c3VsdAorICAgT3V0cHV0OiBKU09OX1NFUklBTElaRSgne30nOjpqc29uIFJFVFVSTklORyBi eXRlYSkKKygyIHJvd3MpCisKIC0tIEpTT05fT0JKRUNUKCkKIFNFTEVDVCBKU09OX09CSkVD VCgpOwogIGpzb25fb2JqZWN0IApAQCAtNjIwLDYgKzg5NywxMyBAQCBFUlJPUjogIGR1cGxp Y2F0ZSBKU09OIG9iamVjdCBrZXkgdmFsdWUKIFNFTEVDVCBKU09OX09CSkVDVEFHRyhrOiB2 IEFCU0VOVCBPTiBOVUxMIFdJVEggVU5JUVVFIEtFWVMgUkVUVVJOSU5HIGpzb25iKQogRlJP TSAoVkFMVUVTICgxLCAxKSwgKDEsIE5VTEwpLCAoMiwgMikpIGZvbyhrLCB2KTsKIEVSUk9S OiAgZHVwbGljYXRlIEpTT04gb2JqZWN0IGtleSB2YWx1ZQorU0VMRUNUIEpTT05fT0JKRUNU QUdHKGs6IHYgQUJTRU5UIE9OIE5VTEwgV0lUSCBVTklRVUUgS0VZUyBSRVRVUk5JTkcganNv bmIpCitGUk9NIChWQUxVRVMgKDEsIDEpLCAoMCwgTlVMTCksKDQsIG51bGwpLCAoNSwgbnVs bCksKDYsIG51bGwpLCgyLCAyKSkgZm9vKGssIHYpOworICBqc29uX29iamVjdGFnZyAgCist LS0tLS0tLS0tLS0tLS0tLS0KKyB7IjEiOiAxLCAiMiI6IDJ9CisoMSByb3cpCisKIC0tIFRl c3QgSlNPTl9PQkpFQ1QgZGVwYXJzaW5nCiBFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYp CiBTRUxFQ1QgSlNPTl9PQkpFQ1QoJ2ZvbycgOiAnMScgRk9STUFUIEpTT04sICdiYXInIDog J2JheicgUkVUVVJOSU5HIGpzb24pOwpAQCAtNjM1LDYgKzkxOSw0MSBAQCBTRUxFQ1QgSlNP Tl9PQkpFQ1QoJ2ZvbycgOiAnMScgRk9STUFUIEpTT04sICdiYXInIDogJ2JheicgUkVUVVJO SU5HIGpzb24pOwogQ1JFQVRFIE9SIFJFUExBQ0UgVklFVyBwdWJsaWMuanNvbl9vYmplY3Rf dmlldyBBUwogIFNFTEVDVCBKU09OX09CSkVDVCgnZm9vJyA6ICcxJzo6dGV4dCBGT1JNQVQg SlNPTiwgJ2JhcicgOiAnYmF6Jzo6dGV4dCBSRVRVUk5JTkcganNvbikgQVMgImpzb25fb2Jq ZWN0IgogRFJPUCBWSUVXIGpzb25fb2JqZWN0X3ZpZXc7CitTRUxFQ1QgdG9fanNvbihhKSBB UyBhLCBKU09OX09CSkVDVEFHRyhrIDogdiBXSVRIIFVOSVFVRSBLRVlTKSBPVkVSIChPUkRF UiBCWSBrKQorRlJPTSAoVkFMVUVTICgxLDEpLCAoMiwyKSkgYShrLHYpOworICAgICAgIGEg ICAgICAgfCAgICBqc29uX29iamVjdGFnZyAgICAKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgeyJrIjoxLCJ2IjoxfSB8IHsgIjEiIDogMSB9CisgeyJrIjoy LCJ2IjoyfSB8IHsgIjEiIDogMSwgIjIiIDogMiB9CisoMiByb3dzKQorCitTRUxFQ1QgdG9f anNvbihhKSBBUyBhLCBKU09OX09CSkVDVEFHRyhrIDogdiBXSVRIIFVOSVFVRSBLRVlTKSBP VkVSIChPUkRFUiBCWSBrKQorRlJPTSAoVkFMVUVTICgxLDEpLCAoMSwyKSwgKDIsMikpIGEo ayx2KTsKK0VSUk9SOiAgZHVwbGljYXRlIEpTT04ga2V5ICIxIgorU0VMRUNUIHRvX2pzb24o YSkgQVMgYSwgSlNPTl9PQkpFQ1RBR0coayA6IHYgQUJTRU5UIE9OIE5VTEwgV0lUSCBVTklR VUUgS0VZUykKKyAgIE9WRVIgKE9SREVSIEJZIGspCitGUk9NIChWQUxVRVMgKDEsMSksICgx LG51bGwpLCAoMiwyKSkgYShrLHYpOworRVJST1I6ICBkdXBsaWNhdGUgSlNPTiBrZXkgIjEi CitTRUxFQ1QgdG9fanNvbihhKSBBUyBhLCBKU09OX09CSkVDVEFHRyhrIDogdiBBQlNFTlQg T04gTlVMTCkKK09WRVIgKE9SREVSIEJZIGspCitGUk9NIChWQUxVRVMgKDEsMSksICgxLG51 bGwpLCAoMiwyKSkgYShrLHYpOworICAgICAgICBhICAgICAgICAgfCAgICBqc29uX29iamVj dGFnZyAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg eyJrIjoxLCJ2IjoxfSAgICB8IHsgIjEiIDogMSB9CisgeyJrIjoxLCJ2IjpudWxsfSB8IHsg IjEiIDogMSB9CisgeyJrIjoyLCJ2IjoyfSAgICB8IHsgIjEiIDogMSwgIjIiIDogMiB9Ciso MyByb3dzKQorCitTRUxFQ1QgdG9fanNvbihhKSBBUyBhLCBKU09OX09CSkVDVEFHRyhrIDog diBBQlNFTlQgT04gTlVMTCkKK09WRVIgKE9SREVSIEJZIGsgUkFOR0UgQkVUV0VFTiBVTkJP VU5ERUQgUFJFQ0VESU5HIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HKQorRlJPTSAoVkFMVUVT ICgxLDEpLCAoMSxudWxsKSwgKDIsMikpIGEoayx2KTsKKyAgICAgICAgYSAgICAgICAgIHwg ICAganNvbl9vYmplY3RhZ2cgICAgCistLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIHsiayI6MSwidiI6MX0gICAgfCB7ICIxIiA6IDEsICIyIiA6IDIgfQor IHsiayI6MSwidiI6bnVsbH0gfCB7ICIxIiA6IDEsICIyIiA6IDIgfQorIHsiayI6MiwidiI6 Mn0gICAgfCB7ICIxIiA6IDEsICIyIiA6IDIgfQorKDMgcm93cykKKwogLS0gVGVzdCBKU09O X0FSUkFZIGRlcGFyc2luZwogRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQogU0VMRUNU IEpTT05fQVJSQVkoJzEnIEZPUk1BVCBKU09OLCAyIFJFVFVSTklORyBqc29uKTsKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iX3NxbGpzb24uc3FsIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvanNvbmJfc3FsanNvbi5zcWwKaW5kZXggMGMzYTdjYzU5Ny4uYTNl MTZmZTcwMyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmJfc3FsanNv bi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmJfc3FsanNvbi5zcWwKQEAg LTI4MSw5ICsyODEsMTMgQEAgQ1JFQVRFIFRBQkxFIHRlc3RfanNvbmJfY29uc3RyYWludHMg KAogCiBTRUxFQ1QgY2hlY2tfY2xhdXNlCiBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS5jaGVj a19jb25zdHJhaW50cwotV0hFUkUgY29uc3RyYWludF9uYW1lIExJS0UgJ3Rlc3RfanNvbmJf Y29uc3RyYWludCUnOworV0hFUkUgY29uc3RyYWludF9uYW1lIExJS0UgJ3Rlc3RfanNvbmJf Y29uc3RyYWludCUnCitPUkRFUiBCWSAxOwogCi1TRUxFQ1QgcGdfZ2V0X2V4cHIoYWRiaW4s IGFkcmVsaWQpIEZST00gcGdfYXR0cmRlZiBXSEVSRSBhZHJlbGlkID0gJ3Rlc3RfanNvbmJf Y29uc3RyYWludHMnOjpyZWdjbGFzczsKK1NFTEVDVCBwZ19nZXRfZXhwcihhZGJpbiwgYWRy ZWxpZCkKK0ZST00gcGdfYXR0cmRlZgorV0hFUkUgYWRyZWxpZCA9ICd0ZXN0X2pzb25iX2Nv bnN0cmFpbnRzJzo6cmVnY2xhc3MKK09SREVSIEJZIDE7CiAKIElOU0VSVCBJTlRPIHRlc3Rf anNvbmJfY29uc3RyYWludHMgVkFMVUVTICgnJywgMSk7CiBJTlNFUlQgSU5UTyB0ZXN0X2pz b25iX2NvbnN0cmFpbnRzIFZBTFVFUyAoJzEnLCAxKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3NxbGpzb24uc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3FsanNv bi5zcWwKaW5kZXggNGYzYzA2ZGNiMy4uYzhkM2I4MGM5ZSAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvc3FsanNvbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv c3FsanNvbi5zcWwKQEAgLTEsMyArMSw2NSBAQAorLS0gSlNPTigpCitTRUxFQ1QgSlNPTigp OworU0VMRUNUIEpTT04oTlVMTCk7CitTRUxFQ1QgSlNPTigneyAiYSIgOiAxIH0gJyk7CitT RUxFQ1QgSlNPTigneyAiYSIgOiAxIH0gJyBGT1JNQVQgSlNPTik7CitTRUxFQ1QgSlNPTign eyAiYSIgOiAxIH0gJyBGT1JNQVQgSlNPTiBFTkNPRElORyBVVEY4KTsKK1NFTEVDVCBKU09O KCd7ICJhIiA6IDEgfSAnOjpieXRlYSBGT1JNQVQgSlNPTiBFTkNPRElORyBVVEY4KTsKK1NF TEVDVCBwZ190eXBlb2YoSlNPTigneyAiYSIgOiAxIH0gJykpOworCitTRUxFQ1QgSlNPTign ICAgMSAgICc6Ompzb24pOworU0VMRUNUIEpTT04oJyAgIDEgICAnOjpqc29uYik7CitTRUxF Q1QgSlNPTignICAgMSAgICc6Ompzb24gV0lUSCBVTklRVUUgS0VZUyk7CitTRUxFQ1QgSlNP TigxMjMpOworCitTRUxFQ1QgSlNPTigneyJhIjogMSwgImEiOiAyfScpOworU0VMRUNUIEpT T04oJ3siYSI6IDEsICJhIjogMn0nIFdJVEggVU5JUVVFIEtFWVMpOworU0VMRUNUIEpTT04o J3siYSI6IDEsICJhIjogMn0nIFdJVEhPVVQgVU5JUVVFIEtFWVMpOworCitFWFBMQUlOIChW RVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCBKU09OKCcxMjMnKTsKK0VYUExBSU4gKFZFUkJP U0UsIENPU1RTIE9GRikgU0VMRUNUIEpTT04oJzEyMycgRk9STUFUIEpTT04pOworRVhQTEFJ TiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgSlNPTignMTIzJzo6Ynl0ZWEgRk9STUFU IEpTT04pOworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgSlNPTignMTIz Jzo6Ynl0ZWEgRk9STUFUIEpTT04gRU5DT0RJTkcgVVRGOCk7CitFWFBMQUlOIChWRVJCT1NF LCBDT1NUUyBPRkYpIFNFTEVDVCBKU09OKCcxMjMnIFdJVEggVU5JUVVFIEtFWVMpOworRVhQ TEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgSlNPTignMTIzJyBXSVRIT1VUIFVO SVFVRSBLRVlTKTsKKworCistLSBKU09OX1NDQUxBUigpCitTRUxFQ1QgSlNPTl9TQ0FMQVIo KTsKK1NFTEVDVCBKU09OX1NDQUxBUihOVUxMKTsKK1NFTEVDVCBKU09OX1NDQUxBUihOVUxM OjppbnQpOworU0VMRUNUIEpTT05fU0NBTEFSKDEyMyk7CitTRUxFQ1QgSlNPTl9TQ0FMQVIo MTIzLjQ1KTsKK1NFTEVDVCBKU09OX1NDQUxBUigxMjMuNDU6Om51bWVyaWMpOworU0VMRUNU IEpTT05fU0NBTEFSKHRydWUpOworU0VMRUNUIEpTT05fU0NBTEFSKGZhbHNlKTsKK1NFTEVD VCBKU09OX1NDQUxBUignIDEyMy40NScpOworU0VMRUNUIEpTT05fU0NBTEFSKCcyMDIwLTA2 LTA3Jzo6ZGF0ZSk7CitTRUxFQ1QgSlNPTl9TQ0FMQVIoJzIwMjAtMDYtMDcgMDE6MDI6MDMn Ojp0aW1lc3RhbXApOworU0VMRUNUIEpTT05fU0NBTEFSKCd7fSc6Ompzb24pOworU0VMRUNU IEpTT05fU0NBTEFSKCd7fSc6Ompzb25iKTsKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMg T0ZGKSBTRUxFQ1QgSlNPTl9TQ0FMQVIoMTIzKTsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RT IE9GRikgU0VMRUNUIEpTT05fU0NBTEFSKCcxMjMnKTsKKworLS0gSlNPTl9TRVJJQUxJWkUo KQorU0VMRUNUIEpTT05fU0VSSUFMSVpFKCk7CitTRUxFQ1QgSlNPTl9TRVJJQUxJWkUoTlVM TCk7CitTRUxFQ1QgSlNPTl9TRVJJQUxJWkUoSlNPTigneyAiYSIgOiAxIH0gJykpOworU0VM RUNUIEpTT05fU0VSSUFMSVpFKCd7ICJhIiA6IDEgfSAnKTsKK1NFTEVDVCBKU09OX1NFUklB TElaRSgnMScpOworU0VMRUNUIEpTT05fU0VSSUFMSVpFKCcxJyBGT1JNQVQgSlNPTik7CitT RUxFQ1QgSlNPTl9TRVJJQUxJWkUoJ3sgImEiIDogMSB9ICcgUkVUVVJOSU5HIGJ5dGVhKTsK K1NFTEVDVCBKU09OX1NFUklBTElaRSgneyAiYSIgOiAxIH0gJyBSRVRVUk5JTkcgdmFyY2hh cik7CitTRUxFQ1QgcGdfdHlwZW9mKEpTT05fU0VSSUFMSVpFKE5VTEwpKTsKKworLS0gb25s eSBzdHJpbmcgdHlwZXMgb3IgYnl0ZWEgYWxsb3dlZAorU0VMRUNUIEpTT05fU0VSSUFMSVpF KCd7ICJhIiA6IDEgfSAnIFJFVFVSTklORyBqc29uYik7CisKKworRVhQTEFJTiAoVkVSQk9T RSwgQ09TVFMgT0ZGKSBTRUxFQ1QgSlNPTl9TRVJJQUxJWkUoJ3t9Jyk7CitFWFBMQUlOIChW RVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCBKU09OX1NFUklBTElaRSgne30nIFJFVFVSTklO RyBieXRlYSk7CisKIC0tIEpTT05fT0JKRUNUKCkKIFNFTEVDVCBKU09OX09CSkVDVCgpOwog U0VMRUNUIEpTT05fT0JKRUNUKFJFVFVSTklORyBqc29uKTsKQEAgLTIxNCw2ICsyNzYsOSBA QCBGUk9NIChWQUxVRVMgKDEsIDEpLCAoMSwgTlVMTCksICgyLCAyKSkgZm9vKGssIHYpOwog U0VMRUNUIEpTT05fT0JKRUNUQUdHKGs6IHYgQUJTRU5UIE9OIE5VTEwgV0lUSCBVTklRVUUg S0VZUyBSRVRVUk5JTkcganNvbmIpCiBGUk9NIChWQUxVRVMgKDEsIDEpLCAoMSwgTlVMTCks ICgyLCAyKSkgZm9vKGssIHYpOwogCitTRUxFQ1QgSlNPTl9PQkpFQ1RBR0coazogdiBBQlNF TlQgT04gTlVMTCBXSVRIIFVOSVFVRSBLRVlTIFJFVFVSTklORyBqc29uYikKK0ZST00gKFZB TFVFUyAoMSwgMSksICgwLCBOVUxMKSwoNCwgbnVsbCksICg1LCBudWxsKSwoNiwgbnVsbCks KDIsIDIpKSBmb28oaywgdik7CisKIC0tIFRlc3QgSlNPTl9PQkpFQ1QgZGVwYXJzaW5nCiBF WFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCiBTRUxFQ1QgSlNPTl9PQkpFQ1QoJ2Zvbycg OiAnMScgRk9STUFUIEpTT04sICdiYXInIDogJ2JheicgUkVUVVJOSU5HIGpzb24pOwpAQCAt MjI1LDYgKzI5MCwyNCBAQCBTRUxFQ1QgSlNPTl9PQkpFQ1QoJ2ZvbycgOiAnMScgRk9STUFU IEpTT04sICdiYXInIDogJ2JheicgUkVUVVJOSU5HIGpzb24pOwogCiBEUk9QIFZJRVcganNv bl9vYmplY3RfdmlldzsKIAorU0VMRUNUIHRvX2pzb24oYSkgQVMgYSwgSlNPTl9PQkpFQ1RB R0coayA6IHYgV0lUSCBVTklRVUUgS0VZUykgT1ZFUiAoT1JERVIgQlkgaykKK0ZST00gKFZB TFVFUyAoMSwxKSwgKDIsMikpIGEoayx2KTsKKworU0VMRUNUIHRvX2pzb24oYSkgQVMgYSwg SlNPTl9PQkpFQ1RBR0coayA6IHYgV0lUSCBVTklRVUUgS0VZUykgT1ZFUiAoT1JERVIgQlkg aykKK0ZST00gKFZBTFVFUyAoMSwxKSwgKDEsMiksICgyLDIpKSBhKGssdik7CisKK1NFTEVD VCB0b19qc29uKGEpIEFTIGEsIEpTT05fT0JKRUNUQUdHKGsgOiB2IEFCU0VOVCBPTiBOVUxM IFdJVEggVU5JUVVFIEtFWVMpCisgICBPVkVSIChPUkRFUiBCWSBrKQorRlJPTSAoVkFMVUVT ICgxLDEpLCAoMSxudWxsKSwgKDIsMikpIGEoayx2KTsKKworU0VMRUNUIHRvX2pzb24oYSkg QVMgYSwgSlNPTl9PQkpFQ1RBR0coayA6IHYgQUJTRU5UIE9OIE5VTEwpCitPVkVSIChPUkRF UiBCWSBrKQorRlJPTSAoVkFMVUVTICgxLDEpLCAoMSxudWxsKSwgKDIsMikpIGEoayx2KTsK KworU0VMRUNUIHRvX2pzb24oYSkgQVMgYSwgSlNPTl9PQkpFQ1RBR0coayA6IHYgQUJTRU5U IE9OIE5VTEwpCitPVkVSIChPUkRFUiBCWSBrIFJBTkdFIEJFVFdFRU4gVU5CT1VOREVEIFBS RUNFRElORyBBTkQgVU5CT1VOREVEIEZPTExPV0lORykKK0ZST00gKFZBTFVFUyAoMSwxKSwg KDEsbnVsbCksICgyLDIpKSBhKGssdik7CisKIC0tIFRlc3QgSlNPTl9BUlJBWSBkZXBhcnNp bmcKIEVYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKIFNFTEVDVCBKU09OX0FSUkFZKCcx JyBGT1JNQVQgSlNPTiwgMiBSRVRVUk5JTkcganNvbik7CmRpZmYgLS1naXQgYS9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CmluZGV4IDFiNWE4OGRkNWQuLjU1MTRkMTllNTMgMTAwNjQ0Ci0tLSBhL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CkBAIC0xMzAwLDYgKzEzMDAsNyBAQCBKc29uUXVvdGVzCiBKc29uUmV0 dXJuaW5nCiBKc29uU2NhbGFyRXhwcgogSnNvblNlbUFjdGlvbgorSnNvblNlcmlhbGl6ZUV4 cHIKIEpzb25Ub2tlblR5cGUKIEpzb25UcmFuc2Zvcm1TdHJpbmdWYWx1ZXNBY3Rpb24KIEpz b25UeXBlQ2F0ZWdvcnkKLS0gCjIuMzQuMQoK --------------MwgLFi9fcx5tDY0Wnjp80Eno Content-Type: text/x-patch; charset=UTF-8; name="v10-0007-RETURNING-clause-for-JSON-and-JSON_SCALAR.patch" Content-Disposition: attachment; filename="v10-0007-RETURNING-clause-for-JSON-and-JSON_SCALAR.patch" Content-Transfer-Encoding: base64 RnJvbSA5N2FlNWU0MjIwYWE2NDc1ZTQ3MTFlZmU3MTAxNmUyNjhkYTA3MWI4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5l Lm5ldD4KRGF0ZTogVGh1LCAxNiBNYXIgMjAyMyAyMDo0MjoxMyAtMDQwMApTdWJqZWN0OiBb UEFUQ0ggNy85XSBSRVRVUk5JTkcgY2xhdXNlIGZvciBKU09OKCkgYW5kIEpTT05fU0NBTEFS KCkKClRoaXMgcGF0Y2ggaXMgZXh0cmFjdGVkIGZyb20gYSBsYXJnZXIgcGF0Y2ggdGhhdCBh bGxvd2VkIHNldHRpbmcgdGhlCmRlZmF1bHQgcmV0dXJuZWQgdmFsdWUgZnJvbSB0aGVzZSBm dW5jdGlvbnMgdG8ganNvbiBvciBqc29uYi4gVGhhdCBoYWQKcHJvYmxlbXMsIGJ1dCB0aGlz IHBpZWNlIG9mIGl0IGlzIGZpbmUuIEZvciB0aGVzZSBmdW5jdGlvbnMgb25seSBqc29uIG9y Cmpzb25iIGNhbiBiZSBzcGVjaWZpZWQgaW4gdGhlIFJFVFVSTklORyBjbGF1c2UuCgpFeHRy YWN0ZWQgZnJvbSBhbiBvcmlnaW5hbCBwYXRjaCBmcm9tIE5pa2l0YSBHbHVraG92CgpSZXZp ZXdlcnMgaGF2ZSBpbmNsdWRlZCAoaW4gbm8gcGFydGljdWxhciBvcmRlcikgQW5kcmVzIEZy ZXVuZCwgQWxleGFuZGVyCktvcm90a292LCBQYXZlbCBTdGVodWxlLCBBbmRyZXcgQWxzdXAs IEVyaWsgUmlqa2VycywgWmlob25nIFl1LApIaW1hbnNodSBVcGFkaHlheWEsIERhbmllbCBH dXN0YWZzc29uLCBKdXN0aW4gUHJ5emJ5LgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3Iu ZXMvbS9jZDBiYjkzNS0wMTU4LTc4YTctMDhiNS05MDQ4ODZkZWFjNGJAcG9zdGdyZXNwcm8u cnUKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8yMDIyMDYxNjIzMzEzMC5ycGFy aXZhZmlwdDZkb2ozQGFsYXAzLmFuYXJhemVsLmRlCkRpc2N1c3Npb246IGh0dHBzOi8vcG9z dGdyLmVzL20vYWJkOWI4M2ItYWE2Ni1mMjMwLTNkNmQtNzM0ODE3ZjA5OTVkJTQwcG9zdGdy ZXNxbC5vcmcKLS0tCiBkb2Mvc3JjL3NnbWwvZnVuYy5zZ21sICAgICAgICAgICAgICAgIHwg MTAgKysrKy0KIHNyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jICAgICAgICAgfCAyMCAr KysrKysrKystCiBzcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55ICAgICAgICAgICAgIHwgIDcg KysrLQogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYyAgICAgICB8IDQ2ICsrKysr KysrKysrKysrKystLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAg ICB8ICA1ICsrLQogc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICAgICAgICB8ICA4 ICstLS0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3FsanNvbi5vdXQgfCA1NyArKysr KysrKysrKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpzb24u c3FsICAgICAgfCAxMCArKysrKwogOCBmaWxlcyBjaGFuZ2VkLCAxMzkgaW5zZXJ0aW9ucygr KSwgMjQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2Z1bmMuc2dt bCBiL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKaW5kZXggMDAwYTg2YzI5NC4uM2YzOWI1ODgw MiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvZnVuYy5zZ21sCkBAIC0xNzczNyw3ICsxNzczNyw4IEBAICQuKiA/IChAIGxpa2VfcmVn ZXggIl5cXGQrJCIpCiAgICAgICAgICA8ZnVuY3Rpb24+anNvbjwvZnVuY3Rpb24+ICgKICAg ICAgICAgIDxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4KICAgICAgICAg IDxvcHRpb25hbD4gPGxpdGVyYWw+Rk9STUFUIEpTT048L2xpdGVyYWw+IDxvcHRpb25hbD4g PGxpdGVyYWw+RU5DT0RJTkcgVVRGODwvbGl0ZXJhbD4gPC9vcHRpb25hbD48L29wdGlvbmFs PgotICAgICAgICAgPG9wdGlvbmFsPiB7IDxsaXRlcmFsPldJVEg8L2xpdGVyYWw+IHwgPGxp dGVyYWw+V0lUSE9VVDwvbGl0ZXJhbD4gfSA8bGl0ZXJhbD5VTklRVUU8L2xpdGVyYWw+IDxv cHRpb25hbD4gPGxpdGVyYWw+S0VZUzwvbGl0ZXJhbD4gPC9vcHRpb25hbD48L29wdGlvbmFs PikKKyAgICAgICAgIDxvcHRpb25hbD4geyA8bGl0ZXJhbD5XSVRIPC9saXRlcmFsPiB8IDxs aXRlcmFsPldJVEhPVVQ8L2xpdGVyYWw+IH0gPGxpdGVyYWw+VU5JUVVFPC9saXRlcmFsPiA8 b3B0aW9uYWw+IDxsaXRlcmFsPktFWVM8L2xpdGVyYWw+IDwvb3B0aW9uYWw+PC9vcHRpb25h bD4KKyAgICAgICAgIDxvcHRpb25hbD4gPGxpdGVyYWw+UkVUVVJOSU5HPC9saXRlcmFsPiA8 cmVwbGFjZWFibGU+anNvbl9kYXRhX3R5cGU8L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPikK ICAgICAgICAgPC9wYXJhPgogICAgICAgICA8cGFyYT4KICAgICAgICAgIFRoZSA8cmVwbGFj ZWFibGU+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IGNhbiBiZSBhbnkgdGV4dCB0eXBlIG9y IGEKQEAgLTE3NzUyLDEzICsxNzc1MywxOCBAQCAkLiogPyAoQCBsaWtlX3JlZ2V4ICJeXFxk KyQiKQogICAgICAgICAgPGxpdGVyYWw+anNvbigneyJhIjoxMjMsICJiIjpbdHJ1ZSwiZm9v Il0sICJhIjoiYmFyIn0nKTwvbGl0ZXJhbD4KICAgICAgICAgIDxyZXR1cm52YWx1ZT57ImEi OjEyMywgImIiOlt0cnVlLCJmb28iXSwgImEiOiJiYXIifTwvcmV0dXJudmFsdWU+CiAgICAg ICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICA8bGl0ZXJhbD5qc29uKCd7 ImEiOjEyMywiYiI6W3RydWUsImZvbyJdLCJhIjoiYmFyIn0nIHJldHVybmluZyBqc29uYik8 L2xpdGVyYWw+CisgICAgICAgICA8cmV0dXJudmFsdWU+eyJhIjogImJhciIsICJiIjogW3Ry dWUsICJmb28iXX08L3JldHVybnZhbHVlPgorICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9l bnRyeT4KICAgICAgIDwvcm93PgogICAgICAgPHJvdz4KICAgICAgICA8ZW50cnkgcm9sZT0i ZnVuY190YWJsZV9lbnRyeSI+CiAgICAgICAgIDxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJl Ij4KICAgICAgICAgPGluZGV4dGVybT48cHJpbWFyeT5qc29uX3NjYWxhcjwvcHJpbWFyeT48 L2luZGV4dGVybT4KLSAgICAgICAgPGZ1bmN0aW9uPmpzb25fc2NhbGFyPC9mdW5jdGlvbj4g KDxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4pCisgICAgICAgIDxmdW5j dGlvbj5qc29uX3NjYWxhcjwvZnVuY3Rpb24+ICg8cmVwbGFjZWFibGU+ZXhwcmVzc2lvbjwv cmVwbGFjZWFibGU+CisgICAgICAgIDxvcHRpb25hbD4gPGxpdGVyYWw+UkVUVVJOSU5HPC9s aXRlcmFsPiA8cmVwbGFjZWFibGU+anNvbl9kYXRhX3R5cGU8L3JlcGxhY2VhYmxlPiA8L29w dGlvbmFsPikKICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgIFJldHVy bnMgYSBKU09OIHNjYWxhciB2YWx1ZSByZXByZXNlbnRpbmcKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL25vZGVzL25vZGVGdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNz LmMKaW5kZXggYjdhMTAxY2ZjYy4uYzc5YmQwMzUwOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvbm9kZXMvbm9kZUZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNz LmMKQEAgLTQzMzMsOSArNDMzMywyNSBAQCByYXdfZXhwcmVzc2lvbl90cmVlX3dhbGtlcl9p bXBsKE5vZGUgKm5vZGUsCiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBUX0pzb25QYXJzZUV4 cHI6Ci0JCQlyZXR1cm4gV0FMSygoKEpzb25QYXJzZUV4cHIgKikgbm9kZSktPmV4cHIpOwor CQkJeworCQkJCUpzb25QYXJzZUV4cHIgKmpwZSA9IChKc29uUGFyc2VFeHByICopIG5vZGU7 CisKKwkJCQlpZiAoV0FMSyhqcGUtPmV4cHIpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlp ZiAoV0FMSyhqcGUtPm91dHB1dCkpCisJCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJYnJl YWs7CiAJCWNhc2UgVF9Kc29uU2NhbGFyRXhwcjoKLQkJCXJldHVybiBXQUxLKCgoSnNvblNj YWxhckV4cHIgKikgbm9kZSktPmV4cHIpOworCQkJeworCQkJCUpzb25TY2FsYXJFeHByICpq c2UgPSAoSnNvblNjYWxhckV4cHIgKikgbm9kZTsKKworCQkJCWlmIChXQUxLKGpzZS0+ZXhw cikpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxLKGpzZS0+b3V0cHV0KSkKKwkJ CQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlicmVhazsKIAkJY2FzZSBUX0pzb25TZXJpYWxp emVFeHByOgogCQkJewogCQkJCUpzb25TZXJpYWxpemVFeHByICpqc2UgPSAoSnNvblNlcmlh bGl6ZUV4cHIgKikgbm9kZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFt LnkgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CmluZGV4IGQ1MTdiNDhlMjIuLjg5ZWVk YTQ2Y2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKKysrIGIvc3Jj L2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpAQCAtMTU3ODEsMjAgKzE1NzgxLDIzIEBAIGZ1bmNf ZXhwcl9jb21tb25fc3ViZXhwcjoKIAkJCQkJbi0+bG9jYXRpb24gPSBAMTsKIAkJCQkJJCQg PSAoTm9kZSAqKSBuOwogCQkJCX0gCi0JCQl8IEpTT04gJygnIGpzb25fdmFsdWVfZXhwciBq c29uX2tleV91bmlxdWVuZXNzX2NvbnN0cmFpbnRfb3B0ICcpJworCQkJfCBKU09OICcoJyBq c29uX3ZhbHVlX2V4cHIganNvbl9rZXlfdW5pcXVlbmVzc19jb25zdHJhaW50X29wdAorCQkJ ICAgICAgICAgICBqc29uX3JldHVybmluZ19jbGF1c2Vfb3B0ICcpJwogCQkJCXsKIAkJCQkJ SnNvblBhcnNlRXhwciAqbiA9IG1ha2VOb2RlKEpzb25QYXJzZUV4cHIpOwogCiAJCQkJCW4t PmV4cHIgPSAoSnNvblZhbHVlRXhwciAqKSAkMzsKIAkJCQkJbi0+dW5pcXVlX2tleXMgPSAk NDsKKwkJCQkJbi0+b3V0cHV0ID0gKEpzb25PdXRwdXQgKikgJDU7CiAJCQkJCW4tPmxvY2F0 aW9uID0gQDE7CiAJCQkJCSQkID0gKE5vZGUgKikgbjsKIAkJCQl9Ci0JCQl8IEpTT05fU0NB TEFSICcoJyBhX2V4cHIgJyknCisJCQl8IEpTT05fU0NBTEFSICcoJyBhX2V4cHIganNvbl9y ZXR1cm5pbmdfY2xhdXNlX29wdCAnKScKIAkJCQl7CiAJCQkJCUpzb25TY2FsYXJFeHByICpu ID0gbWFrZU5vZGUoSnNvblNjYWxhckV4cHIpOwogCiAJCQkJCW4tPmV4cHIgPSAoRXhwciAq KSAkMzsKKwkJCQkJbi0+b3V0cHV0ID0gKEpzb25PdXRwdXQgKikgJDQ7CiAJCQkJCW4tPmxv Y2F0aW9uID0gQDE7CiAJCQkJCSQkID0gKE5vZGUgKikgbjsKIAkJCQl9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jIGIvc3JjL2JhY2tlbmQvcGFyc2Vy L3BhcnNlX2V4cHIuYwppbmRleCAyYTdhMGUyOGY5Li41YTU4YTZkNzdmIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bh cnNlci9wYXJzZV9leHByLmMKQEAgLTQzOTYsMTkgKzQzOTYsNDggQEAgdHJhbnNmb3JtSnNv bkZ1bmNFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHByICpmdW5jKQogCXJl dHVybiAoTm9kZSAqKSBqc2V4cHI7CiB9CiAKK3N0YXRpYyBKc29uUmV0dXJuaW5nICoKK3Ry YW5zZm9ybUpzb25Db25zdHJ1Y3RvclJldChQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25PdXRw dXQgKm91dHB1dCwgY29uc3QgY2hhciAqZm5hbWUpCit7CisJSnNvblJldHVybmluZyAqcmV0 dXJuaW5nOworCisJaWYgKG91dHB1dCkKKwl7CisJCXJldHVybmluZyA9IHRyYW5zZm9ybUpz b25PdXRwdXQocHN0YXRlLCBvdXRwdXQsIGZhbHNlKTsKKworCQlBc3NlcnQoT2lkSXNWYWxp ZChyZXR1cm5pbmctPnR5cGlkKSk7CisKKwkJaWYgKHJldHVybmluZy0+dHlwaWQgIT0gSlNP Tk9JRCAmJiByZXR1cm5pbmctPnR5cGlkICE9IEpTT05CT0lEKQorCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBVFlQRV9NSVNNQVRDSCksCisJCQkJCSBl cnJtc2coImNhbm5vdCB1c2UgUkVUVVJOSU5HIHR5cGUgJXMgaW4gJXMiLAorCQkJCQkJCWZv cm1hdF90eXBlX2JlKHJldHVybmluZy0+dHlwaWQpLCBmbmFtZSksCisJCQkJCSBwYXJzZXJf ZXJycG9zaXRpb24ocHN0YXRlLCBvdXRwdXQtPnR5cGVOYW1lLT5sb2NhdGlvbikpKTsKKwl9 CisJZWxzZQorCXsKKwkJT2lkCQkJdGFyZ2V0dHlwZSA9IEpTT05PSUQ7CisJCUpzb25Gb3Jt YXRUeXBlIGZvcm1hdCA9IEpTX0ZPUk1BVF9KU09OOworCisJCXJldHVybmluZyA9IG1ha2VO b2RlKEpzb25SZXR1cm5pbmcpOworCQlyZXR1cm5pbmctPmZvcm1hdCA9IG1ha2VKc29uRm9y bWF0KGZvcm1hdCwgSlNfRU5DX0RFRkFVTFQsIC0xKTsKKwkJcmV0dXJuaW5nLT50eXBpZCA9 IHRhcmdldHR5cGU7CisJCXJldHVybmluZy0+dHlwbW9kID0gLTE7CisJfQorCisJcmV0dXJu IHJldHVybmluZzsKK30KKwogLyoKICAqIFRyYW5zZm9ybSBhIEpTT04oKSBleHByZXNzaW9u LgogICovCiBzdGF0aWMgTm9kZSAqCiB0cmFuc2Zvcm1Kc29uUGFyc2VFeHByKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgSnNvblBhcnNlRXhwciAqanNleHByKQogewotCUpzb25SZXR1cm5pbmcg KnJldHVybmluZyA9IG1ha2VOb2RlKEpzb25SZXR1cm5pbmcpOworCUpzb25SZXR1cm5pbmcg KnJldHVybmluZyA9IHRyYW5zZm9ybUpzb25Db25zdHJ1Y3RvclJldChwc3RhdGUsIGpzZXhw ci0+b3V0cHV0LAorCQkJCQkJCQkJCQkJCQkgICAiSlNPTigpIik7CiAJTm9kZQkgICAqYXJn OwogCi0JcmV0dXJuaW5nLT5mb3JtYXQgPSBtYWtlSnNvbkZvcm1hdChKU19GT1JNQVRfSlNP TiwgSlNfRU5DX0RFRkFVTFQsIC0xKTsKLQlyZXR1cm5pbmctPnR5cGlkID0gSlNPTk9JRDsK LQlyZXR1cm5pbmctPnR5cG1vZCA9IC0xOwotCiAJaWYgKGpzZXhwci0+dW5pcXVlX2tleXMp CiAJewogCQkvKgpAQCAtNDQ0OCwxMiArNDQ3Nyw5IEBAIHRyYW5zZm9ybUpzb25QYXJzZUV4 cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uUGFyc2VFeHByICpqc2V4cHIpCiBzdGF0aWMg Tm9kZSAqCiB0cmFuc2Zvcm1Kc29uU2NhbGFyRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpz b25TY2FsYXJFeHByICpqc2V4cHIpCiB7Ci0JSnNvblJldHVybmluZyAqcmV0dXJuaW5nID0g bWFrZU5vZGUoSnNvblJldHVybmluZyk7CiAJTm9kZQkgICAqYXJnID0gdHJhbnNmb3JtRXhw clJlY3Vyc2UocHN0YXRlLCAoTm9kZSAqKSBqc2V4cHItPmV4cHIpOwotCi0JcmV0dXJuaW5n LT5mb3JtYXQgPSBtYWtlSnNvbkZvcm1hdChKU19GT1JNQVRfSlNPTiwgSlNfRU5DX0RFRkFV TFQsIC0xKTsKLQlyZXR1cm5pbmctPnR5cGlkID0gSlNPTk9JRDsKLQlyZXR1cm5pbmctPnR5 cG1vZCA9IC0xOworCUpzb25SZXR1cm5pbmcgKnJldHVybmluZyA9IHRyYW5zZm9ybUpzb25D b25zdHJ1Y3RvclJldChwc3RhdGUsIGpzZXhwci0+b3V0cHV0LAorCQkJCQkJCQkJCQkJCQkg ICAiSlNPTl9TQ0FMQVIoKSIpOwogCiAJaWYgKGV4cHJUeXBlKGFyZykgPT0gVU5LTk9XTk9J RCkKIAkJYXJnID0gY29lcmNlX3RvX3NwZWNpZmljX3R5cGUocHN0YXRlLCBhcmcsIFRFWFRP SUQsICJKU09OX1NDQUxBUiIpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCmluZGV4 IGEwMmVkYmRkMTcuLjkzMzhiZTA1NzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxz LmMKQEAgLTEwMDY3LDggKzEwMDY3LDkgQEAgZ2V0X2pzb25fY29uc3RydWN0b3Jfb3B0aW9u cyhKc29uQ29uc3RydWN0b3JFeHByICpjdG9yLCBTdHJpbmdJbmZvIGJ1ZikKIAlpZiAoY3Rv ci0+dW5pcXVlKQogCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiBXSVRIIFVOSVFV RSBLRVlTIik7CiAKLQlpZiAoY3Rvci0+dHlwZSAhPSBKU0NUT1JfSlNPTl9QQVJTRSAmJgot CQljdG9yLT50eXBlICE9IEpTQ1RPUl9KU09OX1NDQUxBUikKKwlpZiAoISgoY3Rvci0+dHlw ZSA9PSBKU0NUT1JfSlNPTl9QQVJTRSB8fAorCQkgICBjdG9yLT50eXBlID09IEpTQ1RPUl9K U09OX1NDQUxBUikgJiYKKwkJICBjdG9yLT5yZXR1cm5pbmctPnR5cGlkID09IEpTT05PSUQp KQogCQlnZXRfanNvbl9yZXR1cm5pbmcoY3Rvci0+cmV0dXJuaW5nLCBidWYsIHRydWUpOwog fQogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggYi9zcmMv aW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXggNWFhMGMzOTIwZi4uNmZmYTQ1MGFi MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisrKyBiL3Ny Yy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaApAQCAtMTcyNiwxMiArMTcyNiw2IEBAIHR5 cGVkZWYgZW51bSBKc29uUXVvdGVzCiAJSlNfUVVPVEVTX09NSVQJCQkJLyogT01JVCBRVU9U RVMgKi8KIH0gSnNvblF1b3RlczsKIAotLyoKLSAqIEpzb25QYXRoU3BlYyAtCi0gKgkJcmVw cmVzZW50YXRpb24gb2YgSlNPTiBwYXRoIGNvbnN0YW50Ci0gKi8KLXR5cGVkZWYgY2hhciAq SnNvblBhdGhTcGVjOwotCiAvKgogICogSnNvbk91dHB1dCAtCiAgKgkJcmVwcmVzZW50YXRp b24gb2YgSlNPTiBvdXRwdXQgY2xhdXNlIChSRVRVUk5JTkcgdHlwZSBbRk9STUFUIGZvcm1h dF0pCkBAIC0xODA1LDYgKzE3OTksNyBAQCB0eXBlZGVmIHN0cnVjdCBKc29uUGFyc2VFeHBy CiB7CiAJTm9kZVRhZwkJdHlwZTsKIAlKc29uVmFsdWVFeHByICpleHByOwkJLyogc3RyaW5n IGV4cHJlc3Npb24gKi8KKwlKc29uT3V0cHV0ICpvdXRwdXQ7CQkJLyogUkVUVVJOSU5HIGNs YXVzZSwgaWYgc3BlY2lmaWVkICovCiAJYm9vbAkJdW5pcXVlX2tleXM7CS8qIFdJVEggVU5J UVVFIEtFWVM/ICovCiAJaW50CQkJbG9jYXRpb247CQkvKiB0b2tlbiBsb2NhdGlvbiwgb3Ig LTEgaWYgdW5rbm93biAqLwogfSBKc29uUGFyc2VFeHByOwpAQCAtMTgxNyw2ICsxODEyLDcg QEAgdHlwZWRlZiBzdHJ1Y3QgSnNvblNjYWxhckV4cHIKIHsKIAlOb2RlVGFnCQl0eXBlOwog CUV4cHIJICAgKmV4cHI7CQkJLyogc2NhbGFyIGV4cHJlc3Npb24gKi8KKwlKc29uT3V0cHV0 ICpvdXRwdXQ7CQkJLyogUkVUVVJOSU5HIGNsYXVzZSwgaWYgc3BlY2lmaWVkICovCiAJaW50 CQkJbG9jYXRpb247CQkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93biAqLwog fSBKc29uU2NhbGFyRXhwcjsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9zcWxqc29uLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3FsanNvbi5v dXQKaW5kZXggNjE1YWY0MmI4YS4uNTg2NmEwYWQxNCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zcWxqc29uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3NxbGpzb24ub3V0CkBAIC0xMTMsNiArMTEzLDQ5IEBAIEVYUExBSU4gKFZFUkJP U0UsIENPU1RTIE9GRikgU0VMRUNUIEpTT04oJzEyMycgV0lUSE9VVCBVTklRVUUgS0VZUyk7 CiAgICBPdXRwdXQ6IEpTT04oJzEyMyc6Ompzb24pCiAoMiByb3dzKQogCitTRUxFQ1QgSlNP TignMTIzJyBSRVRVUk5JTkcgdGV4dCk7CitFUlJPUjogIGNhbm5vdCB1c2UgUkVUVVJOSU5H IHR5cGUgdGV4dCBpbiBKU09OKCkKK0xJTkUgMTogU0VMRUNUIEpTT04oJzEyMycgUkVUVVJO SU5HIHRleHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorRVhQ TEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgSlNPTignMTIzJyk7CisgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBSZXN1bHQKKyAgIE91dHB1dDogSlNPTignMTIzJzo6anNvbikKKygyIHJvd3MpCisKK0VY UExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUIEpTT04oJzEyMycgUkVUVVJOSU5H IGpzb24pOworICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0CisgICBPdXRwdXQ6IEpTT04oJzEyMyc6Ompzb24p CisoMiByb3dzKQorCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCBKU09O KCcxMjMnIFJFVFVSTklORyBqc29uYik7CisgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgUmVzdWx0CisgICBPdXRwdXQ6IEpTT04oJzEyMyc6Ompzb25iIFJF VFVSTklORyBqc29uYikKKygyIHJvd3MpCisKK1NFTEVDVCBwZ190eXBlb2YoSlNPTignMTIz JykpOworIHBnX3R5cGVvZiAKKy0tLS0tLS0tLS0tCisganNvbgorKDEgcm93KQorCitTRUxF Q1QgcGdfdHlwZW9mKEpTT04oJzEyMycgUkVUVVJOSU5HIGpzb24pKTsKKyBwZ190eXBlb2Yg CistLS0tLS0tLS0tLQorIGpzb24KKygxIHJvdykKKworU0VMRUNUIHBnX3R5cGVvZihKU09O KCcxMjMnIFJFVFVSTklORyBqc29uYikpOworIHBnX3R5cGVvZiAKKy0tLS0tLS0tLS0tCisg anNvbmIKKygxIHJvdykKKwogLS0gSlNPTl9TQ0FMQVIoKQogU0VMRUNUIEpTT05fU0NBTEFS KCk7CiBFUlJPUjogIHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIpIgpAQCAtMjA0LDYgKzI0 NywyMCBAQCBFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCBKU09OX1NDQUxB UignMTIzJyk7CiAgICBPdXRwdXQ6IEpTT05fU0NBTEFSKCcxMjMnOjp0ZXh0KQogKDIgcm93 cykKIAorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgSlNPTl9TQ0FMQVIo MTIzIFJFVFVSTklORyBqc29uKTsKKyAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyAgIE91dHB1dDogSlNPTl9T Q0FMQVIoMTIzKQorKDIgcm93cykKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBT RUxFQ1QgSlNPTl9TQ0FMQVIoMTIzIFJFVFVSTklORyBqc29uYik7CisgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyAgIE91dHB1dDogSlNPTl9TQ0FM QVIoMTIzIFJFVFVSTklORyBqc29uYikKKygyIHJvd3MpCisKIC0tIEpTT05fU0VSSUFMSVpF KCkKIFNFTEVDVCBKU09OX1NFUklBTElaRSgpOwogRVJST1I6ICBzeW50YXggZXJyb3IgYXQg b3IgbmVhciAiKSIKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpzb24u c3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3FsanNvbi5zcWwKaW5kZXggYzhkM2I4MGM5 ZS4uYzI3NDJiNDBmMSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3FsanNv bi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3FsanNvbi5zcWwKQEAgLTIzLDYg KzIzLDE0IEBAIEVYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUIEpTT04oJzEy Myc6OmJ5dGVhIEZPUk1BVCBKU09OIEVOQ09ESU5HIFVURjgpCiBFWFBMQUlOIChWRVJCT1NF LCBDT1NUUyBPRkYpIFNFTEVDVCBKU09OKCcxMjMnIFdJVEggVU5JUVVFIEtFWVMpOwogRVhQ TEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgSlNPTignMTIzJyBXSVRIT1VUIFVO SVFVRSBLRVlTKTsKIAorU0VMRUNUIEpTT04oJzEyMycgUkVUVVJOSU5HIHRleHQpOworCitF WFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCBKU09OKCcxMjMnKTsKK0VYUExB SU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUIEpTT04oJzEyMycgUkVUVVJOSU5HIGpz b24pOworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgSlNPTignMTIzJyBS RVRVUk5JTkcganNvbmIpOworU0VMRUNUIHBnX3R5cGVvZihKU09OKCcxMjMnKSk7CitTRUxF Q1QgcGdfdHlwZW9mKEpTT04oJzEyMycgUkVUVVJOSU5HIGpzb24pKTsKK1NFTEVDVCBwZ190 eXBlb2YoSlNPTignMTIzJyBSRVRVUk5JTkcganNvbmIpKTsKIAogLS0gSlNPTl9TQ0FMQVIo KQogU0VMRUNUIEpTT05fU0NBTEFSKCk7CkBAIC00MSw2ICs0OSw4IEBAIFNFTEVDVCBKU09O X1NDQUxBUigne30nOjpqc29uYik7CiAKIEVYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikg U0VMRUNUIEpTT05fU0NBTEFSKDEyMyk7CiBFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYp IFNFTEVDVCBKU09OX1NDQUxBUignMTIzJyk7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBP RkYpIFNFTEVDVCBKU09OX1NDQUxBUigxMjMgUkVUVVJOSU5HIGpzb24pOworRVhQTEFJTiAo VkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgSlNPTl9TQ0FMQVIoMTIzIFJFVFVSTklORyBq c29uYik7CiAKIC0tIEpTT05fU0VSSUFMSVpFKCkKIFNFTEVDVCBKU09OX1NFUklBTElaRSgp OwotLSAKMi4zNC4xCgo= --------------MwgLFi9fcx5tDY0Wnjp80Eno Content-Type: text/x-patch; charset=UTF-8; name="v10-0008-JSON_TABLE.patch" Content-Disposition: attachment; filename="v10-0008-JSON_TABLE.patch" Content-Transfer-Encoding: base64 RnJvbSBmYzVmNjFlYTBlNzg3MWVjMWY3ZjA4NDFhYjczYWYyNzlkMmY2MjVhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5l Lm5ldD4KRGF0ZTogVGh1LCAxNiBNYXIgMjAyMyAyMTowMjoxMCAtMDQwMApTdWJqZWN0OiBb UEFUQ0ggOC85XSBKU09OX1RBQkxFCgpUaGlzIGZlYXR1cmUgYWxsb3dzIGpzb25iIGRhdGEg dG8gYmUgdHJlYXRlZCBhcyBhIHRhYmxlIGFuZCB0aHVzIHVzZWQgaW4KYSBGUk9NIGNsYXVz ZSBsaWtlIG90aGVyIHRhYnVsYXIgZGF0YS4gRGF0YSBjYW4gYmUgc2VsZWN0ZWQgZnJvbSB0 aGUKanNvbmIgdXNpbmcganNvbnBhdGggZXhwcmVzc2lvbnMsIGFuZCBob2lzdGVkIG91dCBv ZiBuZXN0ZWQgc3RydWN0dXJlcwppbiB0aGUganNvbmIgdG8gZm9ybSBtdWx0aXBsZSByb3dz LCBtb3JlIG9yIGxlc3MgbGlrZSBhbiBvdXRlciBqb2luLgoKVGhpcyBhbHNvIGFkZHMgdGhl IFBMQU4gY2xhdXNlcyBmb3IgSlNPTl9UQUJMRSwgd2hpY2ggYWxsb3cgdGhlIHVzZXIgdG8K c3BlY2lmeSBob3cgZGF0YSBmcm9tIG5lc3RlZCBwYXRocyBhcmUgam9pbmVkLCBhbGxvd2lu ZyBjb25zaWRlcmFibGUKZnJlZWRvbSBpbiBzaGFwaW5nIHRoZSB0YWJ1bGFyIG91dHB1dCBv ZiBKU09OX1RBQkxFLiAgUExBTiBERUZBVUxUCmFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5 IHRoZSBnbG9iYWwgc3RyYXRlZ2llcyB3aGVuIGRlYWxpbmcgd2l0aApzaWJsaW5nIG9yIGNo aWxkIG5lc3RlZCBwYXRocy4gVGhlIGlzIG9mdGVuIHN1ZmZpY2llbnQgdG8gYWNoaWV2ZSB0 aGUKbmVjZXNzYXJ5IGdvYWwsIGFuZCBpcyBjb25zaWRlcmFibHkgc2ltcGxlciB0aGFuIHRo ZSBmdWxsIFBMQU4gY2xhdXNlLAp3aGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB0 aGUgc3RyYXRlZ3kgdG8gYmUgdXNlZCBmb3IgZWFjaApuYW1lZCBuZXN0ZWQgcGF0aC4KCk5p a2l0YSBHbHVraG92CgpSZXZpZXdlcnMgaGF2ZSBpbmNsdWRlZCAoaW4gbm8gcGFydGljdWxh ciBvcmRlcikgQW5kcmVzIEZyZXVuZCwgQWxleGFuZGVyCktvcm90a292LCBQYXZlbCBTdGVo dWxlLCBBbmRyZXcgQWxzdXAsIEVyaWsgUmlqa2VycywgWmhpaG9uZyBZdSAod2hvc2UKbmFt ZSBJIHByZXZpb3VzbHkgbWlzc3BlbGxlZCksIEhpbWFuc2h1IFVwYWRoeWF5YSwgRGFuaWVs IEd1c3RhZnNzb24sCkp1c3RpbiBQcnl6YnkuCgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rn ci5lcy9tLzdlMmNiODVkLTI0Y2YtNGFiYi0zMGE1LTFhMzM3MTU5NTliZEBwb3N0Z3Jlc3By by5ydQpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLzIwMjIwNjE2MjMzMTMwLnJw YXJpdmFmaXB0NmRvajNAYWxhcDMuYW5hcmF6ZWwuZGUKRGlzY3Vzc2lvbjogaHR0cHM6Ly9w b3N0Z3IuZXMvbS9hYmQ5YjgzYi1hYTY2LWYyMzAtM2Q2ZC03MzQ4MTdmMDk5NWQlNDBwb3N0 Z3Jlc3FsLm9yZwotLS0KIGRvYy9zcmMvc2dtbC9mdW5jLnNnbWwgICAgICAgICAgICAgICAg ICAgICAgfCAgNDQ4ICsrKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMg ICAgICAgICAgICAgIHwgICAgOCArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJ bnRlcnAuYyAgICAgICB8ICAgIDUgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVRhYmxl RnVuY3NjYW4uYyAgICB8ICAgMjcgKy0KIHNyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5j ICAgICAgICAgICAgICAgfCAgIDE5ICsKIHNyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5j ICAgICAgICAgICAgICAgfCAgIDMwICsKIHNyYy9iYWNrZW5kL3BhcnNlci9NYWtlZmlsZSAg ICAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgICAg ICAgICAgICAgICAgICAgfCAgMzI4ICsrKysrLQogc3JjL2JhY2tlbmQvcGFyc2VyL21lc29u LmJ1aWxkICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNl X2NsYXVzZS5jICAgICAgICAgICB8ICAgMTQgKy0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV9leHByLmMgICAgICAgICAgICAgfCAgIDMyICstCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFy c2VfanNvbnRhYmxlLmMgICAgICAgIHwgIDczOSArKysrKysrKysrKysrCiBzcmMvYmFja2Vu ZC9wYXJzZXIvcGFyc2VfcmVsYXRpb24uYyAgICAgICAgIHwgICAgNSArLQogc3JjL2JhY2tl bmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jICAgICAgICAgICB8ICAgIDMgKwogc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMuYyAgICAgICB8ICA1NDMgKysrKysrKysrKwog c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICAgICAgICB8ICAyNzkgKysr Ky0KIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgICAgICAgfCAgICAy ICsKIHNyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oICAgICAgICAgICAgICAgfCAgICAy ICsKIHNyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCAgICAgICAgICAgICAgfCAgIDkw ICsrCiBzcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaCAgICAgICAgICAgICAgIHwgICA2 MSArLQogc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oICAgICAgICAgICAgICAgICB8ICAg IDQgKwogc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX2NsYXVzZS5oICAgICAgICAgICB8ICAg IDMgKwogc3JjL2luY2x1ZGUvdXRpbHMvanNvbnBhdGguaCAgICAgICAgICAgICAgICB8ICAg IDMgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uX3NxbGpzb24ub3V0ICB8ICAg IDYgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9zcWxqc29uLm91dCB8IDEw NjkgKysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbl9zcWxq c29uLnNxbCAgICAgICB8ICAgIDQgKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmJfc3Fs anNvbi5zcWwgICAgICB8ICA2MjkgKysrKysrKysrKysKIHNyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0ICAgICAgICAgICAgfCAgIDEzICsKIDI4IGZpbGVzIGNoYW5nZWQsIDQz MzQgaW5zZXJ0aW9ucygrKSwgMzQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2pzb250YWJsZS5jCgpkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL2Z1bmMuc2dtbCBiL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKaW5kZXggM2Yz OWI1ODgwMi4uMDI1MDM3ODQ3ZCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMuc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCkBAIC0xODExNyw2ICsxODExNyw0NTQg QEAgRlJPTQogICAgIDwvdGJvZHk+CiAgICA8L3Rncm91cD4KICAgPC90YWJsZT4KKyA8L3Nl Y3QyPgorCisgPHNlY3QyIGlkPSJmdW5jdGlvbnMtc3FsanNvbi10YWJsZSI+CisgIDx0aXRs ZT5KU09OX1RBQkxFPC90aXRsZT4KKyAgPGluZGV4dGVybT4KKyAgIDxwcmltYXJ5Pmpzb25f dGFibGU8L3ByaW1hcnk+CisgIDwvaW5kZXh0ZXJtPgorCisgIDxwYXJhPgorICAgPGZ1bmN0 aW9uPmpzb25fdGFibGU8L2Z1bmN0aW9uPiBpcyBhbiBTUUwvSlNPTiBmdW5jdGlvbiB3aGlj aAorICAgcXVlcmllcyA8YWNyb255bT5KU09OPC9hY3JvbnltPiBkYXRhCisgICBhbmQgcHJl c2VudHMgdGhlIHJlc3VsdHMgYXMgYSByZWxhdGlvbmFsIHZpZXcsIHdoaWNoIGNhbiBiZSBh Y2Nlc3NlZCBhcyBhCisgICByZWd1bGFyIFNRTCB0YWJsZS4gWW91IGNhbiBvbmx5IHVzZSA8 ZnVuY3Rpb24+anNvbl90YWJsZTwvZnVuY3Rpb24+IGluc2lkZSB0aGUKKyAgIDxsaXRlcmFs PkZST008L2xpdGVyYWw+IGNsYXVzZSBvZiBhIDxsaXRlcmFsPlNFTEVDVDwvbGl0ZXJhbD4g c3RhdGVtZW50LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUYWtpbmcgSlNPTiBkYXRh IGFzIGlucHV0LCA8ZnVuY3Rpb24+anNvbl90YWJsZTwvZnVuY3Rpb24+IHVzZXMKKyAgIGEg cGF0aCBleHByZXNzaW9uIHRvIGV4dHJhY3QgYSBwYXJ0IG9mIHRoZSBwcm92aWRlZCBkYXRh IHRoYXQKKyAgIHdpbGwgYmUgdXNlZCBhcyBhIDxmaXJzdHRlcm0+cm93IHBhdHRlcm48L2Zp cnN0dGVybT4gZm9yIHRoZQorICAgY29uc3RydWN0ZWQgdmlldy4gRWFjaCBTUUwvSlNPTiBp dGVtIGF0IHRoZSB0b3AgbGV2ZWwgb2YgdGhlIHJvdyBwYXR0ZXJuIHNlcnZlcworICAgYXMg dGhlIHNvdXJjZSBmb3IgYSBzZXBhcmF0ZSByb3cgaW4gdGhlIGNvbnN0cnVjdGVkIHJlbGF0 aW9uYWwgdmlldy4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVG8gc3BsaXQgdGhlIHJv dyBwYXR0ZXJuIGludG8gY29sdW1ucywgPGZ1bmN0aW9uPmpzb25fdGFibGU8L2Z1bmN0aW9u PgorICAgcHJvdmlkZXMgdGhlIDxsaXRlcmFsPkNPTFVNTlM8L2xpdGVyYWw+IGNsYXVzZSB0 aGF0IGRlZmluZXMgdGhlCisgICBzY2hlbWEgb2YgdGhlIGNyZWF0ZWQgdmlldy4gRm9yIGVh Y2ggY29sdW1uIHRvIGJlIGNvbnN0cnVjdGVkLAorICAgdGhpcyBjbGF1c2UgcHJvdmlkZXMg YSBzZXBhcmF0ZSBwYXRoIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMKKyAgIHRoZSByb3cg cGF0dGVybiwgZXh0cmFjdHMgYSBKU09OIGl0ZW0sIGFuZCByZXR1cm5zIGl0IGFzIGEKKyAg IHNlcGFyYXRlIFNRTCB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBjb2x1bW4uIElmIHRoZSBy ZXF1aXJlZCB2YWx1ZQorICAgaXMgc3RvcmVkIGluIGEgbmVzdGVkIGxldmVsIG9mIHRoZSBy b3cgcGF0dGVybiwgaXQgY2FuIGJlIGV4dHJhY3RlZAorICAgdXNpbmcgdGhlIDxsaXRlcmFs Pk5FU1RFRCBQQVRIPC9saXRlcmFsPiBzdWJjbGF1c2UuIEpvaW5pbmcgdGhlCisgICBjb2x1 bW5zIHJldHVybmVkIGJ5IDxsaXRlcmFsPk5FU1RFRCBQQVRIPC9saXRlcmFsPiBjYW4gYWRk IG11bHRpcGxlCisgICBuZXcgcm93cyB0byB0aGUgY29uc3RydWN0ZWQgdmlldy4gU3VjaCBy b3dzIGFyZSBjYWxsZWQKKyAgIDxmaXJzdHRlcm0+Y2hpbGQgcm93czwvZmlyc3R0ZXJtPiwg YXMgb3Bwb3NlZCB0byB0aGUgPGZpcnN0dGVybT5wYXJlbnQgcm93PC9maXJzdHRlcm0+Cisg ICB0aGF0IGdlbmVyYXRlcyB0aGVtLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUg cm93cyBwcm9kdWNlZCBieSA8ZnVuY3Rpb24+SlNPTl9UQUJMRTwvZnVuY3Rpb24+IGFyZSBs YXRlcmFsbHkKKyAgIGpvaW5lZCB0byB0aGUgcm93IHRoYXQgZ2VuZXJhdGVkIHRoZW0sIHNv IHlvdSBkbyBub3QgaGF2ZSB0byBleHBsaWNpdGx5IGpvaW4KKyAgIHRoZSBjb25zdHJ1Y3Rl ZCB2aWV3IHdpdGggdGhlIG9yaWdpbmFsIHRhYmxlIGhvbGRpbmcgPGFjcm9ueW0+SlNPTjwv YWNyb255bT4KKyAgIGRhdGEuIE9wdGlvbmFsbHksIHlvdSBjYW4gc3BlY2lmeSBob3cgdG8g am9pbiB0aGUgY29sdW1ucyByZXR1cm5lZAorICAgYnkgPGxpdGVyYWw+TkVTVEVEIFBBVEg8 L2xpdGVyYWw+IHVzaW5nIHRoZSA8bGl0ZXJhbD5QTEFOPC9saXRlcmFsPiBjbGF1c2UuCisg IDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEVhY2ggPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xp dGVyYWw+IGNsYXVzZSBjYW4gZ2VuZXJhdGUgb25lIG9yIG1vcmUKKyAgIGNvbHVtbnMuIENv bHVtbnMgcHJvZHVjZWQgYnkgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+cyBhdCB0 aGUKKyAgIHNhbWUgbGV2ZWwgYXJlIGNvbnNpZGVyZWQgdG8gYmUgPGZpcnN0dGVybT5zaWJs aW5nczwvZmlyc3R0ZXJtPiwKKyAgIHdoaWxlIGEgY29sdW1uIHByb2R1Y2VkIGJ5IGEgPGxp dGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+IGlzCisgICBjb25zaWRlcmVkIHRvIGJlIGEg Y2hpbGQgb2YgdGhlIGNvbHVtbiBwcm9kdWNlZCBieSBhCisgICA8bGl0ZXJhbD5ORVNURUQg UEFUSDwvbGl0ZXJhbD4gb3Igcm93IGV4cHJlc3Npb24gYXQgYSBoaWdoZXIgbGV2ZWwuCisg ICBTaWJsaW5nIGNvbHVtbnMgYXJlIGFsd2F5cyBqb2luZWQgZmlyc3QuIE9uY2UgdGhleSBh cmUgcHJvY2Vzc2VkLAorICAgdGhlIHJlc3VsdGluZyByb3dzIGFyZSBqb2luZWQgdG8gdGhl IHBhcmVudCByb3cuCisgIDwvcGFyYT4KKworICA8dmFyaWFibGVsaXN0PgorICAgPHZhcmxp c3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGxpdGVyYWw+PHJlcGxhY2VhYmxlPmNvbnRl eHRfaXRlbTwvcmVwbGFjZWFibGU+LCA8cmVwbGFjZWFibGU+cGF0aF9leHByZXNzaW9uPC9y ZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5BUzwvbGl0ZXJhbD4gPHJlcGxhY2Vh YmxlPmpzb25fcGF0aF9uYW1lPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4gPG9wdGlvbmFs PiA8bGl0ZXJhbD5QQVNTSU5HPC9saXRlcmFsPiB7IDxyZXBsYWNlYWJsZT52YWx1ZTwvcmVw bGFjZWFibGU+IDxsaXRlcmFsPkFTPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+dmFybmFtZTwv cmVwbGFjZWFibGU+IH0gPG9wdGlvbmFsPiwgLi4uPC9vcHRpb25hbD48L29wdGlvbmFsPjwv bGl0ZXJhbD4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAg ICBUaGUgaW5wdXQgZGF0YSB0byBxdWVyeSwgdGhlIEpTT04gcGF0aCBleHByZXNzaW9uIGRl ZmluaW5nIHRoZSBxdWVyeSwKKyAgICAgYW5kIGFuIG9wdGlvbmFsIDxsaXRlcmFsPlBBU1NJ Tkc8L2xpdGVyYWw+IGNsYXVzZSwgd2hpY2ggY2FuIHByb3ZpZGUgZGF0YQorICAgICB2YWx1 ZXMgdG8gdGhlIDxyZXBsYWNlYWJsZT5wYXRoX2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPi4K KyAgICAgVGhlIHJlc3VsdCBvZiB0aGUgaW5wdXQgZGF0YQorICAgICBldmFsdWF0aW9uIGlz IGNhbGxlZCB0aGUgPGZpcnN0dGVybT5yb3cgcGF0dGVybjwvZmlyc3R0ZXJtPi4gVGhlIHJv dworICAgICBwYXR0ZXJuIGlzIHVzZWQgYXMgdGhlIHNvdXJjZSBmb3Igcm93IHZhbHVlcyBp biB0aGUgY29uc3RydWN0ZWQgdmlldy4KKyAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4K KyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgor ICAgICA8bGl0ZXJhbD5DT0xVTU5TPC9saXRlcmFsPiggPHJlcGxhY2VhYmxlPmpzb25fdGFi bGVfY29sdW1uPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiwgLi4uPC9vcHRpb25hbD4gKQor ICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisKKyAgICA8cGFyYT4KKyAgICAgVGhlIDxs aXRlcmFsPkNPTFVNTlM8L2xpdGVyYWw+IGNsYXVzZSBkZWZpbmluZyB0aGUgc2NoZW1hIG9m IHRoZQorICAgICBjb25zdHJ1Y3RlZCB2aWV3LiBJbiB0aGlzIGNsYXVzZSwgeW91IG11c3Qg c3BlY2lmeSBhbGwgdGhlIGNvbHVtbnMKKyAgICAgdG8gYmUgZmlsbGVkIHdpdGggU1FML0pT T04gaXRlbXMuCisgICAgIFRoZSA8cmVwbGFjZWFibGU+anNvbl90YWJsZV9jb2x1bW48L3Jl cGxhY2VhYmxlPgorICAgICBleHByZXNzaW9uIGhhcyB0aGUgZm9sbG93aW5nIHN5bnRheCB2 YXJpYW50czoKKyAgICA8L3BhcmE+CisKKyAgPHZhcmlhYmxlbGlzdD4KKyAgIDx2YXJsaXN0 ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxsaXRlcmFsPjxyZXBsYWNlYWJsZT5uYW1lPC9y ZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnR5cGU8L3JlcGxhY2VhYmxlPgorICAgICAgICAg IDxvcHRpb25hbD4gPGxpdGVyYWw+UEFUSDwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPmpzb25f cGF0aF9zcGVjaWZpY2F0aW9uPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD48L2xpdGVyYWw+ CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKworICAgIDxwYXJhPgorICAgICBJbnNl cnRzIGEgc2luZ2xlIFNRTC9KU09OIGl0ZW0gaW50byBlYWNoIHJvdyBvZgorICAgICB0aGUg c3BlY2lmaWVkIGNvbHVtbi4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgIFRoZSBw cm92aWRlZCA8bGl0ZXJhbD5QQVRIPC9saXRlcmFsPiBleHByZXNzaW9uIHBhcnNlcyB0aGUK KyAgICAgcm93IHBhdHRlcm4gZGVmaW5lZCBieSA8cmVwbGFjZWFibGU+anNvbl9hcGlfY29t bW9uX3N5bnRheDwvcmVwbGFjZWFibGU+CisgICAgIGFuZCBmaWxscyB0aGUgY29sdW1uIHdp dGggcHJvZHVjZWQgU1FML0pTT04gaXRlbXMsIG9uZSBmb3IgZWFjaCByb3cuCisgICAgIElm IHRoZSA8bGl0ZXJhbD5QQVRIPC9saXRlcmFsPiBleHByZXNzaW9uIGlzIG9taXR0ZWQsCisg ICAgIDxmdW5jdGlvbj5KU09OX1RBQkxFPC9mdW5jdGlvbj4gdXNlcyB0aGUKKyAgICAgPGxp dGVyYWw+JC48cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+PC9saXRlcmFsPiBwYXRo IGV4cHJlc3Npb24sCisgICAgIHdoZXJlIDxyZXBsYWNlYWJsZT5uYW1lPC9yZXBsYWNlYWJs ZT4gaXMgdGhlIHByb3ZpZGVkIGNvbHVtbiBuYW1lLgorICAgICBJbiB0aGlzIGNhc2UsIHRo ZSBjb2x1bW4gbmFtZSBtdXN0IGNvcnJlc3BvbmQgdG8gb25lIG9mIHRoZQorICAgICBrZXlz IHdpdGhpbiB0aGUgU1FML0pTT04gaXRlbSBwcm9kdWNlZCBieSB0aGUgcm93IHBhdHRlcm4u CisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICBPcHRpb25hbGx5LCB5b3UgY2FuIGFk ZCA8bGl0ZXJhbD5PTiBFTVBUWTwvbGl0ZXJhbD4gYW5kCisgICAgIDxsaXRlcmFsPk9OIEVS Uk9SPC9saXRlcmFsPiBjbGF1c2VzIHRvIGRlZmluZSBob3cgdG8gaGFuZGxlIG1pc3Npbmcg dmFsdWVzCisgICAgIG9yIHN0cnVjdHVyYWwgZXJyb3JzLgorICAgICA8bGl0ZXJhbD5XUkFQ UEVSPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+UVVPVEVTPC9saXRlcmFsPiBjbGF1c2VzIGNh biBvbmx5CisgICAgIGJlIHVzZWQgd2l0aCBKU09OLCBhcnJheSwgYW5kIGNvbXBvc2l0ZSB0 eXBlcy4KKyAgICAgVGhlc2UgY2xhdXNlcyBoYXZlIHRoZSBzYW1lIHN5bnRheCBhbmQgc2Vt YW50aWNzIGFzIGZvcgorICAgICA8ZnVuY3Rpb24+anNvbl92YWx1ZTwvZnVuY3Rpb24+IGFu ZCA8ZnVuY3Rpb24+anNvbl9xdWVyeTwvZnVuY3Rpb24+LgorICAgIDwvcGFyYT4KKyAgICA8 L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+Cisg ICAgPHRlcm0+CisgICAgIDxyZXBsYWNlYWJsZT5uYW1lPC9yZXBsYWNlYWJsZT4gPHJlcGxh Y2VhYmxlPnR5cGU8L3JlcGxhY2VhYmxlPiA8bGl0ZXJhbD5GT1JNQVQ8L2xpdGVyYWw+IDxy ZXBsYWNlYWJsZT5qc29uX3JlcHJlc2VudGF0aW9uPC9yZXBsYWNlYWJsZT4KKyAgICAgICAg ICA8b3B0aW9uYWw+IDxsaXRlcmFsPlBBVEg8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT5qc29u X3BhdGhfc3BlY2lmaWNhdGlvbjwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+CisgICAgPC90 ZXJtPgorICAgIDxsaXN0aXRlbT4KKworICAgIDxwYXJhPgorICAgICBHZW5lcmF0ZXMgYSBj b2x1bW4gYW5kIGluc2VydHMgYSBjb21wb3NpdGUgU1FML0pTT04KKyAgICAgaXRlbSBpbnRv IGVhY2ggcm93IG9mIHRoaXMgY29sdW1uLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAg ICAgVGhlIHByb3ZpZGVkIDxsaXRlcmFsPlBBVEg8L2xpdGVyYWw+IGV4cHJlc3Npb24gcGFy c2VzIHRoZQorICAgICByb3cgcGF0dGVybiBkZWZpbmVkIGJ5IDxyZXBsYWNlYWJsZT5qc29u X2FwaV9jb21tb25fc3ludGF4PC9yZXBsYWNlYWJsZT4KKyAgICAgYW5kIGZpbGxzIHRoZSBj b2x1bW4gd2l0aCBwcm9kdWNlZCBTUUwvSlNPTiBpdGVtcywgb25lIGZvciBlYWNoIHJvdy4K KyAgICAgSWYgdGhlIDxsaXRlcmFsPlBBVEg8L2xpdGVyYWw+IGV4cHJlc3Npb24gaXMgb21p dHRlZCwKKyAgICAgPGZ1bmN0aW9uPkpTT05fVEFCTEU8L2Z1bmN0aW9uPiB1c2VzIHRoZQor ICAgICA8bGl0ZXJhbD4kLjxyZXBsYWNlYWJsZT5uYW1lPC9yZXBsYWNlYWJsZT48L2xpdGVy YWw+IHBhdGggZXhwcmVzc2lvbiwKKyAgICAgd2hlcmUgPHJlcGxhY2VhYmxlPm5hbWU8L3Jl cGxhY2VhYmxlPiBpcyB0aGUgcHJvdmlkZWQgY29sdW1uIG5hbWUuCisgICAgIEluIHRoaXMg Y2FzZSwgdGhlIGNvbHVtbiBuYW1lIG11c3QgY29ycmVzcG9uZCB0byBvbmUgb2YgdGhlCisg ICAgIGtleXMgd2l0aGluIHRoZSBTUUwvSlNPTiBpdGVtIHByb2R1Y2VkIGJ5IHRoZSByb3cg cGF0dGVybi4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgIE9wdGlvbmFsbHksIHlv dSBjYW4gYWRkIDxsaXRlcmFsPldSQVBQRVI8L2xpdGVyYWw+LCA8bGl0ZXJhbD5RVU9URVM8 L2xpdGVyYWw+LAorICAgICA8bGl0ZXJhbD5PTiBFTVBUWTwvbGl0ZXJhbD4gYW5kIDxsaXRl cmFsPk9OIEVSUk9SPC9saXRlcmFsPiBjbGF1c2VzCisgICAgIHRvIGRlZmluZSBhZGRpdGlv bmFsIHNldHRpbmdzIGZvciB0aGUgcmV0dXJuZWQgU1FML0pTT04gaXRlbXMuCisgICAgIFRo ZXNlIGNsYXVzZXMgaGF2ZSB0aGUgc2FtZSBzeW50YXggYW5kIHNlbWFudGljcyBhcworICAg ICBmb3IgPGZ1bmN0aW9uPmpzb25fcXVlcnk8L2Z1bmN0aW9uPi4KKyAgICA8L3BhcmE+Cisg ICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5 PgorICAgIDx0ZXJtPgorICAgICAgIDxyZXBsYWNlYWJsZT5uYW1lPC9yZXBsYWNlYWJsZT4g PHJlcGxhY2VhYmxlPnR5cGU8L3JlcGxhY2VhYmxlPgorICAgICAgIDxsaXRlcmFsPkVYSVNU UzwvbGl0ZXJhbD4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5QQVRIPC9saXRlcmFsPiA8cmVwbGFj ZWFibGU+anNvbl9wYXRoX3NwZWNpZmljYXRpb248L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFs PgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisKKyAgICA8cGFyYT4KKyAgICAgR2Vu ZXJhdGVzIGEgY29sdW1uIGFuZCBpbnNlcnRzIGEgYm9vbGVhbiBpdGVtIGludG8gZWFjaCBy b3cgb2YgdGhpcyBjb2x1bW4uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICBUaGUg cHJvdmlkZWQgPGxpdGVyYWw+UEFUSDwvbGl0ZXJhbD4gZXhwcmVzc2lvbiBwYXJzZXMgdGhl CisgICAgIHJvdyBwYXR0ZXJuIGRlZmluZWQgYnkgPHJlcGxhY2VhYmxlPmpzb25fYXBpX2Nv bW1vbl9zeW50YXg8L3JlcGxhY2VhYmxlPiwKKyAgICAgY2hlY2tzIHdoZXRoZXIgYW55IFNR TC9KU09OIGl0ZW1zIHdlcmUgcmV0dXJuZWQsIGFuZCBmaWxscyB0aGUgY29sdW1uIHdpdGgK KyAgICAgcmVzdWx0aW5nIGJvb2xlYW4gdmFsdWUsIG9uZSBmb3IgZWFjaCByb3cuCisgICAg IFRoZSBzcGVjaWZpZWQgPHJlcGxhY2VhYmxlPnR5cGU8L3JlcGxhY2VhYmxlPiBzaG91bGQg aGF2ZSBjYXN0IGZyb20KKyAgICAgPHR5cGU+Ym9vbGVhbjwvdHlwZT4uCisgICAgIElmIHRo ZSA8bGl0ZXJhbD5QQVRIPC9saXRlcmFsPiBleHByZXNzaW9uIGlzIG9taXR0ZWQsCisgICAg IDxmdW5jdGlvbj5KU09OX1RBQkxFPC9mdW5jdGlvbj4gdXNlcyB0aGUKKyAgICAgPGxpdGVy YWw+JC48cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+PC9saXRlcmFsPiBwYXRoIGV4 cHJlc3Npb24sCisgICAgIHdoZXJlIDxyZXBsYWNlYWJsZT5uYW1lPC9yZXBsYWNlYWJsZT4g aXMgdGhlIHByb3ZpZGVkIGNvbHVtbiBuYW1lLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4K KyAgICAgT3B0aW9uYWxseSwgeW91IGNhbiBhZGQgPGxpdGVyYWw+T04gRVJST1I8L2xpdGVy YWw+IGNsYXVzZSB0byBkZWZpbmUKKyAgICAgZXJyb3IgYmVoYXZpb3IuICBUaGlzIGNsYXVz ZSBoYXMgdGhlIHNhbWUgc3ludGF4IGFuZCBzZW1hbnRpY3MgYXMKKyAgICAgZm9yIDxmdW5j dGlvbj5qc29uX2V4aXN0czwvZnVuY3Rpb24+LgorICAgIDwvcGFyYT4KKyAgICA8L2xpc3Rp dGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRl cm0+CisgICAgICA8bGl0ZXJhbD5ORVNURUQgUEFUSDwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxl Pmpzb25fcGF0aF9zcGVjaWZpY2F0aW9uPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiA8bGl0 ZXJhbD5BUzwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPmpzb25fcGF0aF9uYW1lPC9yZXBsYWNl YWJsZT4gPC9vcHRpb25hbD4KKyAgICAgICAgICA8bGl0ZXJhbD5DT0xVTU5TPC9saXRlcmFs PiAoIDxyZXBsYWNlYWJsZT5qc29uX3RhYmxlX2NvbHVtbjwvcmVwbGFjZWFibGU+IDxvcHRp b25hbD4sIC4uLjwvb3B0aW9uYWw+ICkKKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgor CisgICAgPHBhcmE+CisgICAgIEV4dHJhY3RzIFNRTC9KU09OIGl0ZW1zIGZyb20gbmVzdGVk IGxldmVscyBvZiB0aGUgcm93IHBhdHRlcm4sCisgICAgIGdlbmVyYXRlcyBvbmUgb3IgbW9y ZSBjb2x1bW5zIGFzIGRlZmluZWQgYnkgdGhlIDxsaXRlcmFsPkNPTFVNTlM8L2xpdGVyYWw+ CisgICAgIHN1YmNsYXVzZSwgYW5kIGluc2VydHMgdGhlIGV4dHJhY3RlZCBTUUwvSlNPTiBp dGVtcyBpbnRvIGVhY2ggcm93IG9mIHRoZXNlIGNvbHVtbnMuCisgICAgIFRoZSA8cmVwbGFj ZWFibGU+anNvbl90YWJsZV9jb2x1bW48L3JlcGxhY2VhYmxlPiBleHByZXNzaW9uIGluIHRo ZQorICAgICA8bGl0ZXJhbD5DT0xVTU5TPC9saXRlcmFsPiBzdWJjbGF1c2UgdXNlcyB0aGUg c2FtZSBzeW50YXggYXMgaW4gdGhlCisgICAgIHBhcmVudCA8bGl0ZXJhbD5DT0xVTU5TPC9s aXRlcmFsPiBjbGF1c2UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgIFRoZSA8 bGl0ZXJhbD5ORVNURUQgUEFUSDwvbGl0ZXJhbD4gc3ludGF4IGlzIHJlY3Vyc2l2ZSwKKyAg ICAgc28geW91IGNhbiBnbyBkb3duIG11bHRpcGxlIG5lc3RlZCBsZXZlbHMgYnkgc3BlY2lm eWluZyBzZXZlcmFsCisgICAgIDxsaXRlcmFsPk5FU1RFRCBQQVRIPC9saXRlcmFsPiBzdWJj bGF1c2VzIHdpdGhpbiBlYWNoIG90aGVyLgorICAgICBJdCBhbGxvd3MgdG8gdW5uZXN0IHRo ZSBoaWVyYXJjaHkgb2YgSlNPTiBvYmplY3RzIGFuZCBhcnJheXMKKyAgICAgaW4gYSBzaW5n bGUgZnVuY3Rpb24gaW52b2NhdGlvbiByYXRoZXIgdGhhbiBjaGFpbmluZyBzZXZlcmFsCisg ICAgIDxmdW5jdGlvbj5KU09OX1RBQkxFPC9mdW5jdGlvbj4gZXhwcmVzc2lvbnMgaW4gYW4g U1FMIHN0YXRlbWVudC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgWW91IGNh biB1c2UgdGhlIDxsaXRlcmFsPlBMQU48L2xpdGVyYWw+IGNsYXVzZSB0byBkZWZpbmUgaG93 CisgICAgIHRvIGpvaW4gdGhlIGNvbHVtbnMgcmV0dXJuZWQgYnkgPGxpdGVyYWw+TkVTVEVE IFBBVEg8L2xpdGVyYWw+IGNsYXVzZXMuCisgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+ CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4K KyAgICAgPHJlcGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPiA8bGl0ZXJhbD5GT1IgT1JE SU5BTElUWTwvbGl0ZXJhbD4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorCisgICAg PHBhcmE+CisgICAgIEFkZHMgYW4gb3JkaW5hbGl0eSBjb2x1bW4gdGhhdCBwcm92aWRlcyBz ZXF1ZW50aWFsIHJvdyBudW1iZXJpbmcuCisgICAgIFlvdSBjYW4gaGF2ZSBvbmx5IG9uZSBv cmRpbmFsaXR5IGNvbHVtbiBwZXIgdGFibGUuIFJvdyBudW1iZXJpbmcKKyAgICAgaXMgMS1i YXNlZC4gRm9yIGNoaWxkIHJvd3MgdGhhdCByZXN1bHQgZnJvbSB0aGUgPGxpdGVyYWw+TkVT VEVEIFBBVEg8L2xpdGVyYWw+CisgICAgIGNsYXVzZXMsIHRoZSBwYXJlbnQgcm93IG51bWJl ciBpcyByZXBlYXRlZC4KKyAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFy bGlzdGVudHJ5PgorICA8L3ZhcmlhYmxlbGlzdD4KKworICAgIDwvbGlzdGl0ZW0+CisgICA8 L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAg PGxpdGVyYWw+QVM8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT5qc29uX3BhdGhfbmFtZTwvcmVw bGFjZWFibGU+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKworICAgIDxwYXJhPgor ICAgICBUaGUgb3B0aW9uYWwgPHJlcGxhY2VhYmxlPmpzb25fcGF0aF9uYW1lPC9yZXBsYWNl YWJsZT4gc2VydmVzIGFzIGFuCisgICAgIGlkZW50aWZpZXIgb2YgdGhlIHByb3ZpZGVkIDxy ZXBsYWNlYWJsZT5qc29uX3BhdGhfc3BlY2lmaWNhdGlvbjwvcmVwbGFjZWFibGU+LgorICAg ICBUaGUgcGF0aCBuYW1lIG11c3QgYmUgdW5pcXVlIGFuZCBkaXN0aW5jdCBmcm9tIHRoZSBj b2x1bW4gbmFtZXMuCisgICAgIFdoZW4gdXNpbmcgdGhlIDxsaXRlcmFsPlBMQU48L2xpdGVy YWw+IGNsYXVzZSwgeW91IG11c3Qgc3BlY2lmeSB0aGUgbmFtZXMKKyAgICAgZm9yIGFsbCB0 aGUgcGF0aHMsIGluY2x1ZGluZyB0aGUgcm93IHBhdHRlcm4uIEVhY2ggcGF0aCBuYW1lIGNh biBhcHBlYXIgaW4KKyAgICAgdGhlIDxsaXRlcmFsPlBMQU48L2xpdGVyYWw+IGNsYXVzZSBv bmx5IG9uY2UuCisgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3Rl bnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGxpdGVyYWw+ UExBTjwvbGl0ZXJhbD4gKCA8cmVwbGFjZWFibGU+anNvbl90YWJsZV9wbGFuPC9yZXBsYWNl YWJsZT4gKQorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisKKyAgICA8cGFyYT4KKyAg ICAgRGVmaW5lcyBob3cgdG8gam9pbiB0aGUgZGF0YSByZXR1cm5lZCBieSA8bGl0ZXJhbD5O RVNURUQgUEFUSDwvbGl0ZXJhbD4KKyAgICAgY2xhdXNlcyB0byB0aGUgY29uc3RydWN0ZWQg dmlldy4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgIFRvIGpvaW4gY29sdW1ucyB3 aXRoIHBhcmVudC9jaGlsZCByZWxhdGlvbnNoaXAsIHlvdSBjYW4gdXNlOgorICAgIDwvcGFy YT4KKyAgPHZhcmlhYmxlbGlzdD4KKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+Cisg ICAgIDxsaXRlcmFsPklOTkVSPC9saXRlcmFsPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0 ZW0+CisKKyAgICA8cGFyYT4KKyAgICAgVXNlIDxsaXRlcmFsPklOTkVSIEpPSU48L2xpdGVy YWw+LCBzbyB0aGF0IHRoZSBwYXJlbnQgcm93CisgICAgIGlzIG9taXR0ZWQgZnJvbSB0aGUg b3V0cHV0IGlmIGl0IGRvZXMgbm90IGhhdmUgYW55IGNoaWxkIHJvd3MKKyAgICAgYWZ0ZXIg am9pbmluZyB0aGUgZGF0YSByZXR1cm5lZCBieSA8bGl0ZXJhbD5ORVNURUQgUEFUSDwvbGl0 ZXJhbD4uCisgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRy eT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGxpdGVyYWw+T1VU RVI8L2xpdGVyYWw+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKworICAgIDxwYXJh PgorICAgICBVc2UgPGxpdGVyYWw+TEVGVCBPVVRFUiBKT0lOPC9saXRlcmFsPiwgc28gdGhh dCB0aGUgcGFyZW50IHJvdworICAgICBpcyBhbHdheXMgaW5jbHVkZWQgaW50byB0aGUgb3V0 cHV0IGV2ZW4gaWYgaXQgZG9lcyBub3QgaGF2ZSBhbnkgY2hpbGQgcm93cworICAgICBhZnRl ciBqb2luaW5nIHRoZSBkYXRhIHJldHVybmVkIGJ5IDxsaXRlcmFsPk5FU1RFRCBQQVRIPC9s aXRlcmFsPiwgd2l0aCBOVUxMIHZhbHVlcworICAgICBpbnNlcnRlZCBpbnRvIHRoZSBjaGls ZCBjb2x1bW5zIGlmIHRoZSBjb3JyZXNwb25kaW5nCisgICAgIHZhbHVlcyBhcmUgbWlzc2lu Zy4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgIFRoaXMgaXMgdGhlIGRlZmF1bHQg b3B0aW9uIGZvciBqb2luaW5nIGNvbHVtbnMgd2l0aCBwYXJlbnQvY2hpbGQgcmVsYXRpb25z aGlwLgorICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+ CisgIDwvdmFyaWFibGVsaXN0PgorCisgICAgIDxwYXJhPgorICAgICBUbyBqb2luIHNpYmxp bmcgY29sdW1ucywgeW91IGNhbiB1c2U6CisgICAgPC9wYXJhPgorCisgIDx2YXJpYWJsZWxp c3Q+CisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8bGl0ZXJhbD5VTklP TjwvbGl0ZXJhbD4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorCisgICAgPHBhcmE+ CisgICAgIEdlbmVyYXRlIG9uZSByb3cgZm9yIGVhY2ggdmFsdWUgcHJvZHVjZWQgYnkgZWFj aCBvZiB0aGUgc2libGluZworICAgICBjb2x1bW5zLiBUaGUgY29sdW1ucyBmcm9tIHRoZSBv dGhlciBzaWJsaW5ncyBhcmUgc2V0IHRvIG51bGwuCisgICAgPC9wYXJhPgorICAgIDxwYXJh PgorICAgICBUaGlzIGlzIHRoZSBkZWZhdWx0IG9wdGlvbiBmb3Igam9pbmluZyBzaWJsaW5n IGNvbHVtbnMuCisgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3Rl bnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGxpdGVyYWw+ Q1JPU1M8L2xpdGVyYWw+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKworICAgIDxw YXJhPgorICAgICBHZW5lcmF0ZSBvbmUgcm93IGZvciBlYWNoIGNvbWJpbmF0aW9uIG9mIHZh bHVlcyBmcm9tIHRoZSBzaWJsaW5nIGNvbHVtbnMuCisgICAgPC9wYXJhPgorICAgIDwvbGlz dGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICA8L3ZhcmlhYmxlbGlzdD4KKworICAg IDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4K KyAgICA8dGVybT4KKyAgICAgPGxpdGVyYWw+UExBTiBERUZBVUxUPC9saXRlcmFsPiAoIDxs aXRlcmFsPjxyZXBsYWNlYWJsZT5PVVRFUiB8IElOTkVSPC9yZXBsYWNlYWJsZT4gPG9wdGlv bmFsPiwgPHJlcGxhY2VhYmxlPlVOSU9OIHwgQ1JPU1M8L3JlcGxhY2VhYmxlPiA8L29wdGlv bmFsPjwvbGl0ZXJhbD4gKQorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxw YXJhPgorICAgICAgVGhlIHRlcm1zIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBpbiByZXZlcnNl IG9yZGVyLiBUaGUKKyAgICAgIDxsaXRlcmFsPklOTkVSPC9saXRlcmFsPiBvciA8bGl0ZXJh bD5PVVRFUjwvbGl0ZXJhbD4gb3B0aW9uIGRlZmluZXMgdGhlCisgICAgICBqb2luaW5nIHBs YW4gZm9yIHBhcmVudC9jaGlsZCBjb2x1bW5zLCB3aGlsZSA8bGl0ZXJhbD5VTklPTjwvbGl0 ZXJhbD4gb3IKKyAgICAgIDxsaXRlcmFsPkNST1NTPC9saXRlcmFsPiBhZmZlY3RzIGpvaW5z IG9mIHNpYmxpbmcgY29sdW1ucy4gVGhpcyBmb3JtCisgICAgICBvZiA8bGl0ZXJhbD5QTEFO PC9saXRlcmFsPiBvdmVycmlkZXMgdGhlIGRlZmF1bHQgcGxhbiBmb3IKKyAgICAgIGFsbCBj b2x1bW5zIGF0IG9uY2UuIEV2ZW4gdGhvdWdoIHRoZSBwYXRoIG5hbWVzIGFyZSBub3QgaW5j bHVkZWQgaW4gdGhlCisgICAgICA8bGl0ZXJhbD5QTEFOIERFRkFVTFQ8L2xpdGVyYWw+IGZv cm0sIHRvIGNvbmZvcm0gdG8gdGhlIFNRTC9KU09OIHN0YW5kYXJkCisgICAgICB0aGV5IG11 c3QgYmUgcHJvdmlkZWQgZm9yIGFsbCB0aGUgcGF0aHMgaWYgdGhlIDxsaXRlcmFsPlBMQU48 L2xpdGVyYWw+CisgICAgICBjbGF1c2UgaXMgdXNlZC4KKyAgICAgPC9wYXJhPgorICAgICA8 cGFyYT4KKyAgICAgIDxsaXRlcmFsPlBMQU4gREVGQVVMVDwvbGl0ZXJhbD4gaXMgc2ltcGxl ciB0aGFuIHNwZWNpZnlpbmcgYSBjb21wbGV0ZQorICAgICAgPGxpdGVyYWw+UExBTjwvbGl0 ZXJhbD4sIGFuZCBpcyBvZnRlbiBhbGwgdGhhdCBpcyByZXF1aXJlZCB0byBnZXQgdGhlIGRl c2lyZWQKKyAgICAgIG91dHB1dC4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+Cisg ICA8L3Zhcmxpc3RlbnRyeT4KKyAgPC92YXJpYWJsZWxpc3Q+CisKKyAgPHBhcmE+RXhhbXBs ZXM8L3BhcmE+CisKKyAgICAgPHBhcmE+CisgICAgIEluIHRoZXNlIGV4YW1wbGVzIHRoZSBm b2xsb3dpbmcgc21hbGwgdGFibGUgc3RvcmluZyBzb21lIEpTT04gZGF0YSB3aWxsIGJlIHVz ZWQ6Cis8cHJvZ3JhbWxpc3Rpbmc+CitDUkVBVEUgVEFCTEUgbXlfZmlsbXMgKCBqcyBqc29u YiApOworCitJTlNFUlQgSU5UTyBteV9maWxtcyBWQUxVRVMgKAorJ3sgImZhdm9yaXRlcyIg OiBbCisgICB7ICJraW5kIiA6ICJjb21lZHkiLCAiZmlsbXMiIDogWworICAgICB7ICJ0aXRs ZSIgOiAiQmFuYW5hcyIsCisgICAgICAgImRpcmVjdG9yIiA6ICJXb29keSBBbGxlbiJ9LAor ICAgICB7ICJ0aXRsZSIgOiAiVGhlIERpbm5lciBHYW1lIiwKKyAgICAgICAiZGlyZWN0b3Ii IDogIkZyYW5jaXMgVmViZXIiIH0gXSB9LAorICAgeyAia2luZCIgOiAiaG9ycm9yIiwgImZp bG1zIiA6IFsKKyAgICAgeyAidGl0bGUiIDogIlBzeWNobyIsCisgICAgICAgImRpcmVjdG9y IiA6ICJBbGZyZWQgSGl0Y2hjb2NrIiB9IF0gfSwKKyAgIHsgImtpbmQiIDogInRocmlsbGVy IiwgImZpbG1zIiA6IFsKKyAgICAgeyAidGl0bGUiIDogIlZlcnRpZ28iLAorICAgICAgICJk aXJlY3RvciIgOiAiQWxmcmVkIEhpdGNoY29jayIgfSBdIH0sCisgICB7ICJraW5kIiA6ICJk cmFtYSIsICJmaWxtcyIgOiBbCisgICAgIHsgInRpdGxlIiA6ICJZb2ppbWJvIiwKKyAgICAg ICAiZGlyZWN0b3IiIDogIkFraXJhIEt1cm9zYXdhIiB9IF0gfQorICBdIH0nKTsKKzwvcHJv Z3JhbWxpc3Rpbmc+CisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBRdWVyeSB0 aGUgPHN0cnVjdG5hbWU+bXlfZmlsbXM8L3N0cnVjdG5hbWU+IHRhYmxlIGhvbGRpbmcKKyAg ICAgIHNvbWUgSlNPTiBkYXRhIGFib3V0IHRoZSBmaWxtcyBhbmQgY3JlYXRlIGEgdmlldyB0 aGF0CisgICAgICBkaXN0cmlidXRlcyB0aGUgZmlsbSBnZW5yZSwgdGl0bGUsIGFuZCBkaXJl Y3RvciBiZXR3ZWVuIHNlcGFyYXRlIGNvbHVtbnM6Cis8c2NyZWVuPgorU0VMRUNUIGp0Liog RlJPTQorIG15X2ZpbG1zLAorIEpTT05fVEFCTEUgKCBqcywgJyQuZmF2b3JpdGVzWypdJyBD T0xVTU5TICgKKyAgIGlkIEZPUiBPUkRJTkFMSVRZLAorICAga2luZCB0ZXh0IFBBVEggJyQu a2luZCcsCisgICBORVNURUQgUEFUSCAnJC5maWxtc1sqXScgQ09MVU1OUyAoCisgICAgIHRp dGxlIHRleHQgUEFUSCAnJC50aXRsZScsCisgICAgIGRpcmVjdG9yIHRleHQgUEFUSCAnJC5k aXJlY3RvcicpKSkgQVMganQ7CistLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0KKyBpZCB8ICAga2luZCAgIHwgICAgICAgdGl0bGUgICAg ICB8ICAgIGRpcmVjdG9yCistLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0KKyAxICB8IGNvbWVkeSAgIHwgQmFuYW5hcyAgICAgICAgICB8 IFdvb2R5IEFsbGVuCisgMSAgfCBjb21lZHkgICB8IFRoZSBEaW5uZXIgR2FtZSAgfCBGcmFu Y2lzIFZlYmVyCisgMiAgfCBob3Jyb3IgICB8IFBzeWNobyAgICAgICAgICAgfCBBbGZyZWQg SGl0Y2hjb2NrCisgMyAgfCB0aHJpbGxlciB8IFZlcnRpZ28gICAgICAgICAgfCBBbGZyZWQg SGl0Y2hjb2NrCisgNCAgfCBkcmFtYSAgICB8IFlvamltYm8gICAgICAgICAgfCBBa2lyYSBL dXJvc2F3YQorICg1IHJvd3MpCis8L3NjcmVlbj4KKyAgICAgPC9wYXJhPgorCisgICAgIDxw YXJhPgorICAgICAgRmluZCBhIGRpcmVjdG9yIHRoYXQgaGFzIGRvbmUgZmlsbXMgaW4gdHdv IGRpZmZlcmVudCBnZW5yZXM6Cis8c2NyZWVuPgorU0VMRUNUCisgIGRpcmVjdG9yMSBBUyBk aXJlY3RvciwgdGl0bGUxLCBraW5kMSwgdGl0bGUyLCBraW5kMgorRlJPTQorICBteV9maWxt cywKKyAgSlNPTl9UQUJMRSAoIGpzLCAnJC5mYXZvcml0ZXMnIEFTIGZhdnMgQ09MVU1OUyAo CisgICAgTkVTVEVEIFBBVEggJyRbKl0nIEFTIGZpbG1zMSBDT0xVTU5TICgKKyAgICAgIGtp bmQxIHRleHQgUEFUSCAnJC5raW5kJywKKyAgICAgIE5FU1RFRCBQQVRIICckLmZpbG1zWypd JyBBUyBmaWxtMSBDT0xVTU5TICgKKyAgICAgICAgdGl0bGUxIHRleHQgUEFUSCAnJC50aXRs ZScsCisgICAgICAgIGRpcmVjdG9yMSB0ZXh0IFBBVEggJyQuZGlyZWN0b3InKQorICAgICks CisgICAgTkVTVEVEIFBBVEggJyRbKl0nIEFTIGZpbG1zMiBDT0xVTU5TICgKKyAgICAgIGtp bmQyIHRleHQgUEFUSCAnJC5raW5kJywKKyAgICAgIE5FU1RFRCBQQVRIICckLmZpbG1zWypd JyBBUyBmaWxtMiBDT0xVTU5TICgKKyAgICAgICAgdGl0bGUyIHRleHQgUEFUSCAnJC50aXRs ZScsCisgICAgICAgIGRpcmVjdG9yMiB0ZXh0IFBBVEggJyQuZGlyZWN0b3InCisgICAgICAp CisgICAgKQorICAgKQorICAgUExBTiAoZmF2cyBPVVRFUiAoKGZpbG1zMSBJTk5FUiBmaWxt MSkgQ1JPU1MgKGZpbG1zMiBJTk5FUiBmaWxtMikpKQorICApIEFTIGp0CisgV0hFUkUga2lu ZDEgPiBraW5kMiBBTkQgZGlyZWN0b3IxID0gZGlyZWN0b3IyOworCisgICAgIGRpcmVjdG9y ICAgICB8IHRpdGxlMSAgfCAga2luZDEgICB8IHRpdGxlMiB8IGtpbmQyCistLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0KKyBBbGZy ZWQgSGl0Y2hjb2NrIHwgVmVydGlnbyB8IHRocmlsbGVyIHwgUHN5Y2hvIHwgaG9ycm9yCiso MSByb3cpCis8L3NjcmVlbj4KKyAgICAgPC9wYXJhPgogICA8L3NlY3QyPgogIDwvc2VjdDE+ CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCBlNTdiZGE3YjYyLi5hYWMzYWE4Yzlk IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCkBAIC0zODQ4LDcgKzM4NDgsMTMgQEAgRXhw bGFpblRhcmdldFJlbChQbGFuICpwbGFuLCBJbmRleCBydGksIEV4cGxhaW5TdGF0ZSAqZXMp CiAJCQlicmVhazsKIAkJY2FzZSBUX1RhYmxlRnVuY1NjYW46CiAJCQlBc3NlcnQocnRlLT5y dGVraW5kID09IFJURV9UQUJMRUZVTkMpOwotCQkJb2JqZWN0bmFtZSA9ICJ4bWx0YWJsZSI7 CisJCQlpZiAocnRlLT50YWJsZWZ1bmMpCisJCQkJaWYgKHJ0ZS0+dGFibGVmdW5jLT5mdW5j dHlwZSA9PSBURlRfWE1MVEFCTEUpCisJCQkJCW9iamVjdG5hbWUgPSAieG1sdGFibGUiOwor CQkJCWVsc2UJCQkvKiBNdXN0IGJlIFRGVF9KU09OX1RBQkxFICovCisJCQkJCW9iamVjdG5h bWUgPSAianNvbl90YWJsZSI7CisJCQllbHNlCisJCQkJb2JqZWN0bmFtZSA9IE5VTEw7CiAJ CQlvYmplY3R0YWcgPSAiVGFibGUgRnVuY3Rpb24gTmFtZSI7CiAJCQlicmVhazsKIAkJY2Fz ZSBUX1ZhbHVlc1NjYW46CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj RXhwckludGVycC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYwpp bmRleCBlMzJiMDg0OWMyLi45M2JkMDU3MDc2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjRXhwckludGVycC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNFeHBySW50ZXJwLmMKQEAgLTQ3OTMsNiArNDc5MywxMSBAQCBFeGVjRXZhbEpzb25FeHBy KEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsIEV4cHJDb250ZXh0ICplY29u dGV4dCkKIAkJCQlicmVhazsKIAkJCX0KIAorCQljYXNlIEpTT05fVEFCTEVfT1A6CisJCQly ZXMgPSBpdGVtOworCQkJcmVzbnVsbCA9IGZhbHNlOworCQkJYnJlYWs7CisKIAkJZGVmYXVs dDoKIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgU1FML0pTT04gZXhwcmVzc2lvbiBv cCAlZCIsIGpleHByLT5vcCk7CiAJCQkqb3AtPnJlc251bGwgPSB0cnVlOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVRhYmxlRnVuY3NjYW4uYyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVUYWJsZUZ1bmNzY2FuLmMKaW5kZXggMGM2YzkxMjc3OC4uMTRh MWE4NGU5NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVRhYmxlRnVu Y3NjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlVGFibGVGdW5jc2Nhbi5j CkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAi bm9kZXMvZXhlY25vZGVzLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNs dWRlICJ1dGlscy9qc29ucGF0aC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgog I2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMveG1sLmgiCkBA IC0xNjEsOCArMTYyLDkgQEAgRXhlY0luaXRUYWJsZUZ1bmNTY2FuKFRhYmxlRnVuY1NjYW4g Km5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCXNjYW5zdGF0ZS0+c3MucHMu cXVhbCA9CiAJCUV4ZWNJbml0UXVhbChub2RlLT5zY2FuLnBsYW4ucXVhbCwgJnNjYW5zdGF0 ZS0+c3MucHMpOwogCi0JLyogT25seSBYTUxUQUJMRSBpcyBzdXBwb3J0ZWQgY3VycmVudGx5 ICovCi0Jc2NhbnN0YXRlLT5yb3V0aW5lID0gJlhtbFRhYmxlUm91dGluZTsKKwkvKiBPbmx5 IFhNTFRBQkxFIGFuZCBKU09OX1RBQkxFIGFyZSBzdXBwb3J0ZWQgY3VycmVudGx5ICovCisJ c2NhbnN0YXRlLT5yb3V0aW5lID0KKwkJdGYtPmZ1bmN0eXBlID09IFRGVF9YTUxUQUJMRSA/ ICZYbWxUYWJsZVJvdXRpbmUgOiAmSnNvbmJUYWJsZVJvdXRpbmU7CiAKIAlzY2Fuc3RhdGUt PnBlclRhYmxlQ3h0ID0KIAkJQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlD b250ZXh0LApAQCAtMTgyLDYgKzE4NCwxMCBAQCBFeGVjSW5pdFRhYmxlRnVuY1NjYW4oVGFi bGVGdW5jU2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCUV4ZWNJ bml0RXhwckxpc3QodGYtPmNvbGV4cHJzLCAoUGxhblN0YXRlICopIHNjYW5zdGF0ZSk7CiAJ c2NhbnN0YXRlLT5jb2xkZWZleHBycyA9CiAJCUV4ZWNJbml0RXhwckxpc3QodGYtPmNvbGRl ZmV4cHJzLCAoUGxhblN0YXRlICopIHNjYW5zdGF0ZSk7CisJc2NhbnN0YXRlLT5jb2x2YWxl eHBycyA9CisJCUV4ZWNJbml0RXhwckxpc3QodGYtPmNvbHZhbGV4cHJzLCAoUGxhblN0YXRl ICopIHNjYW5zdGF0ZSk7CisJc2NhbnN0YXRlLT5wYXNzaW5ndmFsZXhwcnMgPQorCQlFeGVj SW5pdEV4cHJMaXN0KHRmLT5wYXNzaW5ndmFsZXhwcnMsIChQbGFuU3RhdGUgKikgc2NhbnN0 YXRlKTsKIAogCXNjYW5zdGF0ZS0+bm90bnVsbHMgPSB0Zi0+bm90bnVsbHM7CiAKQEAgLTM4 MSwxNCArMzg3LDE3IEBAIHRmdW5jSW5pdGlhbGl6ZShUYWJsZUZ1bmNTY2FuU3RhdGUgKnRz dGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LCBEYXR1bSBkb2MpCiAJCXJvdXRpbmUtPlNl dE5hbWVzcGFjZSh0c3RhdGUsIG5zX25hbWUsIG5zX3VyaSk7CiAJfQogCi0JLyogSW5zdGFs bCB0aGUgcm93IGZpbHRlciBleHByZXNzaW9uIGludG8gdGhlIHRhYmxlIGJ1aWxkZXIgY29u dGV4dCAqLwotCXZhbHVlID0gRXhlY0V2YWxFeHByKHRzdGF0ZS0+cm93ZXhwciwgZWNvbnRl eHQsICZpc251bGwpOwotCWlmIChpc251bGwpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVy cmNvZGUoRVJSQ09ERV9OVUxMX1ZBTFVFX05PVF9BTExPV0VEKSwKLQkJCQkgZXJybXNnKCJy b3cgZmlsdGVyIGV4cHJlc3Npb24gbXVzdCBub3QgYmUgbnVsbCIpKSk7CisJaWYgKHJvdXRp bmUtPlNldFJvd0ZpbHRlcikKKwl7CisJCS8qIEluc3RhbGwgdGhlIHJvdyBmaWx0ZXIgZXhw cmVzc2lvbiBpbnRvIHRoZSB0YWJsZSBidWlsZGVyIGNvbnRleHQgKi8KKwkJdmFsdWUgPSBF eGVjRXZhbEV4cHIodHN0YXRlLT5yb3dleHByLCBlY29udGV4dCwgJmlzbnVsbCk7CisJCWlm IChpc251bGwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX05V TExfVkFMVUVfTk9UX0FMTE9XRUQpLAorCQkJCQkgZXJybXNnKCJyb3cgZmlsdGVyIGV4cHJl c3Npb24gbXVzdCBub3QgYmUgbnVsbCIpKSk7CiAKLQlyb3V0aW5lLT5TZXRSb3dGaWx0ZXIo dHN0YXRlLCBUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbHVlKSk7CisJCXJvdXRpbmUtPlNldFJv d0ZpbHRlcih0c3RhdGUsIFRleHREYXR1bUdldENTdHJpbmcodmFsdWUpKTsKKwl9CiAKIAkv KgogCSAqIEluc3RhbGwgdGhlIGNvbHVtbiBmaWx0ZXIgZXhwcmVzc2lvbnMgaW50byB0aGUg dGFibGUgYnVpbGRlciBjb250ZXh0LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMv bWFrZWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYwppbmRleCBmNzhi OTcwMzRkLi42ZWU2YzdkMmJiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9tYWtl ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYwpAQCAtODY5LDYg Kzg2OSwyNSBAQCBtYWtlSnNvbkJlaGF2aW9yKEpzb25CZWhhdmlvclR5cGUgdHlwZSwgTm9k ZSAqZGVmYXVsdF9leHByKQogCXJldHVybiBiZWhhdmlvcjsKIH0KIAorLyoKKyAqIG1ha2VK c29uVGFibGVKb2luZWRQbGFuIC0KKyAqCSAgIGNyZWF0ZXMgYSBqb2luZWQgSnNvblRhYmxl UGxhbiBub2RlCisgKi8KK05vZGUgKgorbWFrZUpzb25UYWJsZUpvaW5lZFBsYW4oSnNvblRh YmxlUGxhbkpvaW5UeXBlIHR5cGUsIE5vZGUgKnBsYW4xLCBOb2RlICpwbGFuMiwKKwkJCQkJ CWludCBsb2NhdGlvbikKK3sKKwlKc29uVGFibGVQbGFuICpuID0gbWFrZU5vZGUoSnNvblRh YmxlUGxhbik7CisKKwluLT5wbGFuX3R5cGUgPSBKU1RQX0pPSU5FRDsKKwluLT5qb2luX3R5 cGUgPSB0eXBlOworCW4tPnBsYW4xID0gY2FzdE5vZGUoSnNvblRhYmxlUGxhbiwgcGxhbjEp OworCW4tPnBsYW4yID0gY2FzdE5vZGUoSnNvblRhYmxlUGxhbiwgcGxhbjIpOworCW4tPmxv Y2F0aW9uID0gbG9jYXRpb247CisKKwlyZXR1cm4gKE5vZGUgKikgbjsKK30KKwogLyoKICAq IG1ha2VKc29uRW5jb2RpbmcgLQogICoJICBjb252ZXJ0cyBKU09OIGVuY29kaW5nIG5hbWUg dG8gZW51bSBKc29uRW5jb2RpbmcKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL25v ZGVGdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMKaW5kZXggYzc5YmQw MzUwOS4uN2JiNzE0YTBiNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1 bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMKQEAgLTI0NDEsNiAr MjQ0MSwxMCBAQCBleHByZXNzaW9uX3RyZWVfd2Fsa2VyX2ltcGwoTm9kZSAqbm9kZSwKIAkJ CQkJcmV0dXJuIHRydWU7CiAJCQkJaWYgKFdBTEsodGYtPmNvbGRlZmV4cHJzKSkKIAkJCQkJ cmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEsodGYtPmNvbHZhbGV4cHJzKSkKKwkJCQkJcmV0 dXJuIHRydWU7CisJCQkJaWYgKFdBTEsodGYtPnBhc3Npbmd2YWxleHBycykpCisJCQkJCXJl dHVybiB0cnVlOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgVF9Kc29uVmFsdWVFeHByOgpA QCAtMzQ4Niw2ICszNDkwLDggQEAgZXhwcmVzc2lvbl90cmVlX211dGF0b3JfaW1wbChOb2Rl ICpub2RlLAogCQkJCU1VVEFURShuZXdub2RlLT5yb3dleHByLCB0Zi0+cm93ZXhwciwgTm9k ZSAqKTsKIAkJCQlNVVRBVEUobmV3bm9kZS0+Y29sZXhwcnMsIHRmLT5jb2xleHBycywgTGlz dCAqKTsKIAkJCQlNVVRBVEUobmV3bm9kZS0+Y29sZGVmZXhwcnMsIHRmLT5jb2xkZWZleHBy cywgTGlzdCAqKTsKKwkJCQlNVVRBVEUobmV3bm9kZS0+Y29sdmFsZXhwcnMsIHRmLT5jb2x2 YWxleHBycywgTGlzdCAqKTsKKwkJCQlNVVRBVEUobmV3bm9kZS0+cGFzc2luZ3ZhbGV4cHJz LCB0Zi0+cGFzc2luZ3ZhbGV4cHJzLCBMaXN0ICopOwogCQkJCXJldHVybiAoTm9kZSAqKSBu ZXdub2RlOwogCQkJfQogCQkJYnJlYWs7CkBAIC00NDk5LDYgKzQ1MDUsMzAgQEAgcmF3X2V4 cHJlc3Npb25fdHJlZV93YWxrZXJfaW1wbChOb2RlICpub2RlLAogCQkJCQlyZXR1cm4gdHJ1 ZTsKIAkJCX0KIAkJCWJyZWFrOworCQljYXNlIFRfSnNvblRhYmxlOgorCQkJeworCQkJCUpz b25UYWJsZSAgKmp0ID0gKEpzb25UYWJsZSAqKSBub2RlOworCisJCQkJaWYgKFdBTEsoanQt PmNvbW1vbikpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxLKGp0LT5jb2x1bW5z KSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0pzb25U YWJsZUNvbHVtbjoKKwkJCXsKKwkJCQlKc29uVGFibGVDb2x1bW4gKmp0YyA9IChKc29uVGFi bGVDb2x1bW4gKikgbm9kZTsKKworCQkJCWlmIChXQUxLKGp0Yy0+dHlwZU5hbWUpKQorCQkJ CQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhqdGMtPm9uX2VtcHR5KSkKKwkJCQkJcmV0 dXJuIHRydWU7CisJCQkJaWYgKFdBTEsoanRjLT5vbl9lcnJvcikpCisJCQkJCXJldHVybiB0 cnVlOworCQkJCWlmIChqdGMtPmNvbHR5cGUgPT0gSlRDX05FU1RFRCAmJiBXQUxLKGp0Yy0+ Y29sdW1ucykpCisJCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJYnJlYWs7CiAJCWRlZmF1 bHQ6CiAJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZTogJWQiLAogCQkJ CSAoaW50KSBub2RlVGFnKG5vZGUpKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNl ci9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL3BhcnNlci9NYWtlZmlsZQppbmRleCA5ZjFjNDAy MmJiLi5mNGMwY2M3ZjEwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvTWFrZWZp bGUKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL01ha2VmaWxlCkBAIC0yMyw2ICsyMyw3IEBA IE9CSlMgPSBcCiAJcGFyc2VfZW5yLm8gXAogCXBhcnNlX2V4cHIubyBcCiAJcGFyc2VfZnVu Yy5vIFwKKwlwYXJzZV9qc29udGFibGUubyBcCiAJcGFyc2VfbWVyZ2UubyBcCiAJcGFyc2Vf bm9kZS5vIFwKIAlwYXJzZV9vcGVyLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFy c2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5kZXggODllZWRhNDZj ZS4uOWQyZjBhMDE1NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQor KysgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CkBAIC02NjIsMTcgKzY2Miw0MiBAQCBz dGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlz dCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCQkJCQlqc29uX29iamVjdF9hcmdzCiAJCQkJ CWpzb25fbmFtZV9hbmRfdmFsdWUKIAkJCQkJanNvbl9hZ2dyZWdhdGVfZnVuYworCQkJCQlq c29uX3RhYmxlCisJCQkJCWpzb25fdGFibGVfY29sdW1uX2RlZmluaXRpb24KKwkJCQkJanNv bl90YWJsZV9vcmRpbmFsaXR5X2NvbHVtbl9kZWZpbml0aW9uCisJCQkJCWpzb25fdGFibGVf cmVndWxhcl9jb2x1bW5fZGVmaW5pdGlvbgorCQkJCQlqc29uX3RhYmxlX2Zvcm1hdHRlZF9j b2x1bW5fZGVmaW5pdGlvbgorCQkJCQlqc29uX3RhYmxlX2V4aXN0c19jb2x1bW5fZGVmaW5p dGlvbgorCQkJCQlqc29uX3RhYmxlX25lc3RlZF9jb2x1bW5zCisJCQkJCWpzb25fdGFibGVf cGxhbl9jbGF1c2Vfb3B0CisJCQkJCWpzb25fdGFibGVfc3BlY2lmaWNfcGxhbgorCQkJCQlq c29uX3RhYmxlX3BsYW4KKwkJCQkJanNvbl90YWJsZV9wbGFuX3NpbXBsZQorCQkJCQlqc29u X3RhYmxlX3BsYW5fcGFyZW50X2NoaWxkCisJCQkJCWpzb25fdGFibGVfcGxhbl9vdXRlcgor CQkJCQlqc29uX3RhYmxlX3BsYW5faW5uZXIKKwkJCQkJanNvbl90YWJsZV9wbGFuX3NpYmxp bmcKKwkJCQkJanNvbl90YWJsZV9wbGFuX3VuaW9uCisJCQkJCWpzb25fdGFibGVfcGxhbl9j cm9zcworCQkJCQlqc29uX3RhYmxlX3BsYW5fcHJpbWFyeQorCQkJCQlqc29uX3RhYmxlX2Rl ZmF1bHRfcGxhbgogCiAldHlwZSA8bGlzdD4JCWpzb25fbmFtZV9hbmRfdmFsdWVfbGlzdAog CQkJCQlqc29uX3ZhbHVlX2V4cHJfbGlzdAogCQkJCQlqc29uX2FycmF5X2FnZ3JlZ2F0ZV9v cmRlcl9ieV9jbGF1c2Vfb3B0CiAJCQkJCWpzb25fYXJndW1lbnRzCiAJCQkJCWpzb25fcGFz c2luZ19jbGF1c2Vfb3B0CisJCQkJCWpzb25fdGFibGVfY29sdW1uc19jbGF1c2UKKwkJCQkJ anNvbl90YWJsZV9jb2x1bW5fZGVmaW5pdGlvbl9saXN0CiAKICV0eXBlIDxzdHI+CQkJanNv bl9hc19wYXRoX25hbWVfY2xhdXNlX29wdAorCQkJCQlqc29uX3RhYmxlX2NvbHVtbl9wYXRo X3NwZWNpZmljYXRpb25fY2xhdXNlX29wdAogCiAldHlwZSA8aXZhbD4JCWpzb25fZW5jb2Rp bmdfY2xhdXNlX29wdAogCQkJCQlqc29uX3ByZWRpY2F0ZV90eXBlX2NvbnN0cmFpbnRfb3B0 CisJCQkJCWpzb25fdGFibGVfZGVmYXVsdF9wbGFuX2Nob2ljZXMKKwkJCQkJanNvbl90YWJs ZV9kZWZhdWx0X3BsYW5faW5uZXJfb3V0ZXIKKwkJCQkJanNvbl90YWJsZV9kZWZhdWx0X3Bs YW5fdW5pb25fY3Jvc3MKIAkJCQkJanNvbl93cmFwcGVyX2NsYXVzZV9vcHQKIAkJCQkJanNv bl93cmFwcGVyX2JlaGF2aW9yCiAJCQkJCWpzb25fY29uZGl0aW9uYWxfb3JfdW5jb25kaXRp b25hbF9vcHQKQEAgLTY4MSw2ICs3MDYsOCBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2 ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkp OwogCQkJCQlqc29uX3F1ZXJ5X2JlaGF2aW9yCiAJCQkJCWpzb25fZXhpc3RzX2Vycm9yX2Jl aGF2aW9yCiAJCQkJCWpzb25fZXhpc3RzX2Vycm9yX2NsYXVzZV9vcHQKKwkJCQkJanNvbl90 YWJsZV9lcnJvcl9iZWhhdmlvcgorCQkJCQlqc29uX3RhYmxlX2Vycm9yX2NsYXVzZV9vcHQK IAogJXR5cGUgPG9uX2JlaGF2aW9yPiBqc29uX3ZhbHVlX29uX2JlaGF2aW9yX2NsYXVzZV9v cHQKIAkJCQkJanNvbl9xdWVyeV9vbl9iZWhhdmlvcl9jbGF1c2Vfb3B0CkBAIC03NTQsNyAr NzgxLDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJl bG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlJTlRFUlNFQ1QgSU5URVJW QUwgSU5UTyBJTlZPS0VSIElTIElTTlVMTCBJU09MQVRJT04KIAogCUpPSU4gSlNPTiBKU09O X0FSUkFZIEpTT05fQVJSQVlBR0cgSlNPTl9FWElTVFMgSlNPTl9PQkpFQ1QgSlNPTl9PQkpF Q1RBR0cKLQlKU09OX1FVRVJZIEpTT05fU0NBTEFSIEpTT05fU0VSSUFMSVpFIEpTT05fVkFM VUUKKwlKU09OX1FVRVJZIEpTT05fU0NBTEFSIEpTT05fU0VSSUFMSVpFIEpTT05fVEFCTEUg SlNPTl9WQUxVRQogCiAJS0VZIEtFWVMgS0VFUAogCkBAIC03NjUsOCArNzkyLDggQEAgc3Rh dGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3Qg KmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlNQVBQSU5HIE1BVENIIE1BVENIRUQgTUFURVJJ QUxJWkVEIE1BWFZBTFVFIE1FUkdFIE1FVEhPRAogCU1JTlVURV9QIE1JTlZBTFVFIE1PREUg TU9OVEhfUCBNT1ZFCiAKLQlOQU1FX1AgTkFNRVMgTkFUSU9OQUwgTkFUVVJBTCBOQ0hBUiBO RVcgTkVYVCBORkMgTkZEIE5GS0MgTkZLRCBOTyBOT05FCi0JTk9STUFMSVpFIE5PUk1BTEla RUQKKwlOQU1FX1AgTkFNRVMgTkFUSU9OQUwgTkFUVVJBTCBOQ0hBUiBORVNURUQgTkVXIE5F WFQgTkZDIE5GRCBORktDIE5GS0QgTk8KKwlOT05FIE5PUk1BTElaRSBOT1JNQUxJWkVECiAJ Tk9UIE5PVEhJTkcgTk9USUZZIE5PVE5VTEwgTk9XQUlUIE5VTExfUCBOVUxMSUYKIAlOVUxM U19QIE5VTUVSSUMKIApAQCAtNzc0LDggKzgwMSw4IEBAIHN0YXRpYyBOb2RlICptYWtlUmVj dXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpx dWVyeSk7CiAJT1JERVIgT1JESU5BTElUWSBPVEhFUlMgT1VUX1AgT1VURVJfUAogCU9WRVIg T1ZFUkxBUFMgT1ZFUkxBWSBPVkVSUklESU5HIE9XTkVEIE9XTkVSCiAKLQlQQVJBTExFTCBQ QVJBTUVURVIgUEFSU0VSIFBBUlRJQUwgUEFSVElUSU9OIFBBU1NJTkcgUEFTU1dPUkQKLQlQ TEFDSU5HIFBMQU5TIFBPTElDWQorCVBBUkFMTEVMIFBBUkFNRVRFUiBQQVJTRVIgUEFSVElB TCBQQVJUSVRJT04gUEFTU0lORyBQQVNTV09SRCBQQVRICisJUExBQ0lORyBQTEFOIFBMQU5T IFBPTElDWQogCVBPU0lUSU9OIFBSRUNFRElORyBQUkVDSVNJT04gUFJFU0VSVkUgUFJFUEFS RSBQUkVQQVJFRCBQUklNQVJZCiAJUFJJT1IgUFJJVklMRUdFUyBQUk9DRURVUkFMIFBST0NF RFVSRSBQUk9DRURVUkVTIFBST0dSQU0gUFVCTElDQVRJT04KIApAQCAtODc3LDcgKzkwNCw3 IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1l LCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAgKi8KICVub25hc3NvYwlVTkJPVU5E RUQJCS8qIGlkZWFsbHkgd291bGQgaGF2ZSBzYW1lIHByZWNlZGVuY2UgYXMgSURFTlQgKi8K ICVub25hc3NvYwlFUlJPUl9QIEVNUFRZX1AgREVGQVVMVCBBQlNFTlQgLyogSlNPTiBlcnJv ci9lbXB0eSBiZWhhdmlvciAqLwotJW5vbmFzc29jCUZBTFNFX1AgS0VFUCBPTUlUIFBBU1NJ TkcgVFJVRV9QIFVOS05PV04gVU5JUVVFIEpTT04KKyVub25hc3NvYwlGQUxTRV9QIEtFRVAg T01JVCBQQVNTSU5HIFRSVUVfUCBVTktOT1dOIFVOSVFVRSBKU09OIENPTFVNTlMKICVub25h c3NvYwlJREVOVCBQQVJUSVRJT04gUkFOR0UgUk9XUyBHUk9VUFMgUFJFQ0VESU5HIEZPTExP V0lORyBDVUJFIFJPTExVUAogJWxlZnQJCU9wIE9QRVJBVE9SCQkvKiBtdWx0aS1jaGFyYWN0 ZXIgb3BzIGFuZCB1c2VyLWRlZmluZWQgb3BlcmF0b3JzICovCiAlbGVmdAkJJysnICctJwpA QCAtOTAyLDYgKzkyOSwxMCBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxl Y3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogICovCiAl bGVmdAkJSk9JTiBDUk9TUyBMRUZUIEZVTEwgUklHSFQgSU5ORVJfUCBOQVRVUkFMCiAKKyVu b25hc3NvYwlqc29uX3RhYmxlX2NvbHVtbgorJW5vbmFzc29jCU5FU1RFRAorJWxlZnQJCVBB VEgKKwogJW5vbmFzc29jCWVtcHR5X2pzb25fdW5pcXVlCiAlbGVmdAkJV0lUSE9VVCBXSVRI X0xBX1VOSVFVRQogCkBAIC0xMzM2NSw2ICsxMzM5NiwyMSBAQCB0YWJsZV9yZWY6CXJlbGF0 aW9uX2V4cHIgb3B0X2FsaWFzX2NsYXVzZQogCQkJCQkkMi0+YWxpYXMgPSAkNDsKIAkJCQkJ JCQgPSAoTm9kZSAqKSAkMjsKIAkJCQl9CisJCQl8IGpzb25fdGFibGUgb3B0X2FsaWFzX2Ns YXVzZQorCQkJCXsKKwkJCQkJSnNvblRhYmxlICAqanQgPSBjYXN0Tm9kZShKc29uVGFibGUs ICQxKTsKKworCQkJCQlqdC0+YWxpYXMgPSAkMjsKKwkJCQkJJCQgPSAoTm9kZSAqKSBqdDsK KwkJCQl9CisJCQl8IExBVEVSQUxfUCBqc29uX3RhYmxlIG9wdF9hbGlhc19jbGF1c2UKKwkJ CQl7CisJCQkJCUpzb25UYWJsZSAgKmp0ID0gY2FzdE5vZGUoSnNvblRhYmxlLCAkMik7CisK KwkJCQkJanQtPmFsaWFzID0gJDM7CisJCQkJCWp0LT5sYXRlcmFsID0gdHJ1ZTsKKwkJCQkJ JCQgPSAoTm9kZSAqKSBqdDsKKwkJCQl9CiAJCTsKIAogCkBAIC0xMzkzMiw2ICsxMzk3OCw4 IEBAIHhtbHRhYmxlX2NvbHVtbl9vcHRpb25fZWw6CiAJCQkJeyAkJCA9IG1ha2VEZWZFbGVt KCJpc19ub3RfbnVsbCIsIChOb2RlICopIG1ha2VCb29sZWFuKHRydWUpLCBAMSk7IH0KIAkJ CXwgTlVMTF9QCiAJCQkJeyAkJCA9IG1ha2VEZWZFbGVtKCJpc19ub3RfbnVsbCIsIChOb2Rl ICopIG1ha2VCb29sZWFuKGZhbHNlKSwgQDEpOyB9CisJCQl8IFBBVEggYl9leHByCisJCQkJ eyAkJCA9IG1ha2VEZWZFbGVtKCJwYXRoIiwgJDIsIEAxKTsgfQogCQk7CiAKIHhtbF9uYW1l c3BhY2VfbGlzdDoKQEAgLTE2Njg4LDYgKzE2NzM2LDI2NiBAQCBqc29uX3F1ZXJ5X29uX2Jl aGF2aW9yX2NsYXVzZV9vcHQ6CiAJCQkJCQkJCQl7ICQkLm9uX2VtcHR5ID0gTlVMTDsgJCQu b25fZXJyb3IgPSBOVUxMOyB9CiAJCTsKIAoranNvbl90YWJsZToKKwkJCUpTT05fVEFCTEUg JygnCisJCQkJanNvbl9hcGlfY29tbW9uX3N5bnRheAorCQkJCWpzb25fdGFibGVfY29sdW1u c19jbGF1c2UKKwkJCQlqc29uX3RhYmxlX3BsYW5fY2xhdXNlX29wdAorCQkJCWpzb25fdGFi bGVfZXJyb3JfY2xhdXNlX29wdAorCQkJJyknCisJCQkJeworCQkJCQlKc29uVGFibGUgKm4g PSBtYWtlTm9kZShKc29uVGFibGUpOworCisJCQkJCW4tPmNvbW1vbiA9IChKc29uQ29tbW9u ICopICQzOworCQkJCQluLT5jb2x1bW5zID0gJDQ7CisJCQkJCW4tPnBsYW4gPSAoSnNvblRh YmxlUGxhbiAqKSAkNTsKKwkJCQkJbi0+b25fZXJyb3IgPSAkNjsKKwkJCQkJbi0+bG9jYXRp b24gPSBAMTsKKwkJCQkJJCQgPSAoTm9kZSAqKSBuOworCQkJCX0KKwkJOworCitqc29uX3Rh YmxlX2NvbHVtbnNfY2xhdXNlOgorCQkJQ09MVU1OUyAnKCcJanNvbl90YWJsZV9jb2x1bW5f ZGVmaW5pdGlvbl9saXN0ICcpJyB7ICQkID0gJDM7IH0KKwkJOworCitqc29uX3RhYmxlX2Nv bHVtbl9kZWZpbml0aW9uX2xpc3Q6CisJCQlqc29uX3RhYmxlX2NvbHVtbl9kZWZpbml0aW9u CisJCQkJeyAkJCA9IGxpc3RfbWFrZTEoJDEpOyB9CisJCQl8IGpzb25fdGFibGVfY29sdW1u X2RlZmluaXRpb25fbGlzdCAnLCcganNvbl90YWJsZV9jb2x1bW5fZGVmaW5pdGlvbgorCQkJ CXsgJCQgPSBsYXBwZW5kKCQxLCAkMyk7IH0KKwkJOworCitqc29uX3RhYmxlX2NvbHVtbl9k ZWZpbml0aW9uOgorCQkJanNvbl90YWJsZV9vcmRpbmFsaXR5X2NvbHVtbl9kZWZpbml0aW9u CQklcHJlYyBqc29uX3RhYmxlX2NvbHVtbgorCQkJfCBqc29uX3RhYmxlX3JlZ3VsYXJfY29s dW1uX2RlZmluaXRpb24JCSVwcmVjIGpzb25fdGFibGVfY29sdW1uCisJCQl8IGpzb25fdGFi bGVfZm9ybWF0dGVkX2NvbHVtbl9kZWZpbml0aW9uCSVwcmVjIGpzb25fdGFibGVfY29sdW1u CisJCQl8IGpzb25fdGFibGVfZXhpc3RzX2NvbHVtbl9kZWZpbml0aW9uCQklcHJlYyBqc29u X3RhYmxlX2NvbHVtbgorCQkJfCBqc29uX3RhYmxlX25lc3RlZF9jb2x1bW5zCisJCTsKKwor anNvbl90YWJsZV9vcmRpbmFsaXR5X2NvbHVtbl9kZWZpbml0aW9uOgorCQkJQ29sSWQgRk9S IE9SRElOQUxJVFkKKwkJCQl7CisJCQkJCUpzb25UYWJsZUNvbHVtbiAqbiA9IG1ha2VOb2Rl KEpzb25UYWJsZUNvbHVtbik7CisKKwkJCQkJbi0+Y29sdHlwZSA9IEpUQ19GT1JfT1JESU5B TElUWTsKKwkJCQkJbi0+bmFtZSA9ICQxOworCQkJCQluLT5sb2NhdGlvbiA9IEAxOworCQkJ CQkkJCA9IChOb2RlICopIG47CisJCQkJfQorCQk7CisKK2pzb25fdGFibGVfcmVndWxhcl9j b2x1bW5fZGVmaW5pdGlvbjoKKwkJCUNvbElkIFR5cGVuYW1lCisJCQlqc29uX3RhYmxlX2Nv bHVtbl9wYXRoX3NwZWNpZmljYXRpb25fY2xhdXNlX29wdAorCQkJanNvbl93cmFwcGVyX2Ns YXVzZV9vcHQKKwkJCWpzb25fcXVvdGVzX2NsYXVzZV9vcHQKKwkJCWpzb25fdmFsdWVfb25f YmVoYXZpb3JfY2xhdXNlX29wdAorCQkJCXsKKwkJCQkJSnNvblRhYmxlQ29sdW1uICpuID0g bWFrZU5vZGUoSnNvblRhYmxlQ29sdW1uKTsKKworCQkJCQluLT5jb2x0eXBlID0gSlRDX1JF R1VMQVI7CisJCQkJCW4tPm5hbWUgPSAkMTsKKwkJCQkJbi0+dHlwZU5hbWUgPSAkMjsKKwkJ CQkJbi0+Zm9ybWF0ID0gbWFrZUpzb25Gb3JtYXQoSlNfRk9STUFUX0RFRkFVTFQsIEpTX0VO Q19ERUZBVUxULCAtMSk7CisJCQkJCW4tPndyYXBwZXIgPSAkNDsgLyogSlNXX05PTkUgKi8K KwkJCQkJbi0+b21pdF9xdW90ZXMgPSAkNTsgLyogZmFsc2UgKi8KKwkJCQkJbi0+cGF0aHNw ZWMgPSAkMzsKKwkJCQkJbi0+b25fZW1wdHkgPSAkNi5vbl9lbXB0eTsKKwkJCQkJbi0+b25f ZXJyb3IgPSAkNi5vbl9lcnJvcjsKKwkJCQkJbi0+bG9jYXRpb24gPSBAMTsKKwkJCQkJJCQg PSAoTm9kZSAqKSBuOworCQkJCX0KKwkJOworCitqc29uX3RhYmxlX2V4aXN0c19jb2x1bW5f ZGVmaW5pdGlvbjoKKwkJCUNvbElkIFR5cGVuYW1lCisJCQlFWElTVFMganNvbl90YWJsZV9j b2x1bW5fcGF0aF9zcGVjaWZpY2F0aW9uX2NsYXVzZV9vcHQKKwkJCWpzb25fZXhpc3RzX2Vy cm9yX2NsYXVzZV9vcHQKKwkJCQl7CisJCQkJCUpzb25UYWJsZUNvbHVtbiAqbiA9IG1ha2VO b2RlKEpzb25UYWJsZUNvbHVtbik7CisKKwkJCQkJbi0+Y29sdHlwZSA9IEpUQ19FWElTVFM7 CisJCQkJCW4tPm5hbWUgPSAkMTsKKwkJCQkJbi0+dHlwZU5hbWUgPSAkMjsKKwkJCQkJbi0+ Zm9ybWF0ID0gbWFrZUpzb25Gb3JtYXQoSlNfRk9STUFUX0RFRkFVTFQsIEpTX0VOQ19ERUZB VUxULCAtMSk7CisJCQkJCW4tPndyYXBwZXIgPSBKU1dfTk9ORTsKKwkJCQkJbi0+b21pdF9x dW90ZXMgPSBmYWxzZTsKKwkJCQkJbi0+cGF0aHNwZWMgPSAkNDsKKwkJCQkJbi0+b25fZW1w dHkgPSBOVUxMOworCQkJCQluLT5vbl9lcnJvciA9ICQ1OworCQkJCQluLT5sb2NhdGlvbiA9 IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJfQorCQk7CisKK2pzb25fdGFibGVf ZXJyb3JfYmVoYXZpb3I6CisJCQlFUlJPUl9QCQl7ICQkID0gbWFrZUpzb25CZWhhdmlvcihK U09OX0JFSEFWSU9SX0VSUk9SLCBOVUxMKTsgfQorCQkJfCBFTVBUWV9QCXsgJCQgPSBtYWtl SnNvbkJlaGF2aW9yKEpTT05fQkVIQVZJT1JfRU1QVFlfT0JKRUNULCBOVUxMKTsgfQorCQk7 CisKK2pzb25fdGFibGVfZXJyb3JfY2xhdXNlX29wdDoKKwkJCWpzb25fdGFibGVfZXJyb3Jf YmVoYXZpb3IgT04gRVJST1JfUAl7ICQkID0gJDE7IH0KKwkJCXwgLyogRU1QVFkgKi8JCQkJ CQkJeyAkJCA9IE5VTEw7IH0KKwkJOworCitqc29uX3RhYmxlX2NvbHVtbl9wYXRoX3NwZWNp ZmljYXRpb25fY2xhdXNlX29wdDoKKwkJCVBBVEggU2NvbnN0CQkJCQkJCQl7ICQkID0gJDI7 IH0KKwkJCXwgLyogRU1QVFkgKi8gJXByZWMganNvbl90YWJsZV9jb2x1bW4JeyAkJCA9IE5V TEw7IH0KKwkJOworCitqc29uX3RhYmxlX2Zvcm1hdHRlZF9jb2x1bW5fZGVmaW5pdGlvbjoK KwkJCUNvbElkIFR5cGVuYW1lIEZPUk1BVCBqc29uX3JlcHJlc2VudGF0aW9uCisJCQlqc29u X3RhYmxlX2NvbHVtbl9wYXRoX3NwZWNpZmljYXRpb25fY2xhdXNlX29wdAorCQkJanNvbl93 cmFwcGVyX2NsYXVzZV9vcHQKKwkJCWpzb25fcXVvdGVzX2NsYXVzZV9vcHQKKwkJCWpzb25f cXVlcnlfb25fYmVoYXZpb3JfY2xhdXNlX29wdAorCQkJCXsKKwkJCQkJSnNvblRhYmxlQ29s dW1uICpuID0gbWFrZU5vZGUoSnNvblRhYmxlQ29sdW1uKTsKKworCQkJCQluLT5jb2x0eXBl ID0gSlRDX0ZPUk1BVFRFRDsKKwkJCQkJbi0+bmFtZSA9ICQxOworCQkJCQluLT50eXBlTmFt ZSA9ICQyOworCQkJCQluLT5mb3JtYXQgPSBjYXN0Tm9kZShKc29uRm9ybWF0LCAkNCk7CisJ CQkJCW4tPnBhdGhzcGVjID0gJDU7CisJCQkJCW4tPndyYXBwZXIgPSAkNjsKKwkJCQkJaWYg KG4tPndyYXBwZXIgIT0gSlNXX05PTkUgJiYgJDcgIT0gSlNfUVVPVEVTX1VOU1BFQykKKwkJ CQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VS Uk9SKSwKKwkJCQkJCQkJIGVycm1zZygiU1FML0pTT04gUVVPVEVTIGJlaGF2aW9yIG11c3Qg bm90IGJlIHNwZWNpZmllZCB3aGVuIFdJVEggV1JBUFBFUiBpcyB1c2VkIiksCisJCQkJCQkJ CSBwYXJzZXJfZXJycG9zaXRpb24oQDcpKSk7CisJCQkJCW4tPm9taXRfcXVvdGVzID0gJDcg PT0gSlNfUVVPVEVTX09NSVQ7CisJCQkJCW4tPm9uX2VtcHR5ID0gJDgub25fZW1wdHk7CisJ CQkJCW4tPm9uX2Vycm9yID0gJDgub25fZXJyb3I7CisJCQkJCW4tPmxvY2F0aW9uID0gQDE7 CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CisJCTsKKworanNvbl90YWJsZV9uZXN0 ZWRfY29sdW1uczoKKwkJCU5FU1RFRCBwYXRoX29wdCBTY29uc3QKKwkJCQkJCQlqc29uX2Fz X3BhdGhfbmFtZV9jbGF1c2Vfb3B0CisJCQkJCQkJanNvbl90YWJsZV9jb2x1bW5zX2NsYXVz ZQorCQkJCXsKKwkJCQkJSnNvblRhYmxlQ29sdW1uICpuID0gbWFrZU5vZGUoSnNvblRhYmxl Q29sdW1uKTsKKworCQkJCQluLT5jb2x0eXBlID0gSlRDX05FU1RFRDsKKwkJCQkJbi0+cGF0 aHNwZWMgPSAkMzsKKwkJCQkJbi0+cGF0aG5hbWUgPSAkNDsKKwkJCQkJbi0+Y29sdW1ucyA9 ICQ1OworCQkJCQluLT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47CisJ CQkJfQorCQk7CisKK3BhdGhfb3B0OgorCQkJUEFUSAkJCQkJCQkJCXsgfQorCQkJfCAvKiBF TVBUWSAqLwkJCQkJCQl7IH0KKwkJOworCitqc29uX3RhYmxlX3BsYW5fY2xhdXNlX29wdDoK KwkJCWpzb25fdGFibGVfc3BlY2lmaWNfcGxhbgkJCQl7ICQkID0gJDE7IH0KKwkJCXwganNv bl90YWJsZV9kZWZhdWx0X3BsYW4JCQkJeyAkJCA9ICQxOyB9CisJCQl8IC8qIEVNUFRZICov CQkJCQkJCXsgJCQgPSBOVUxMOyB9CisJCTsKKworanNvbl90YWJsZV9zcGVjaWZpY19wbGFu OgorCQkJUExBTiAnKCcganNvbl90YWJsZV9wbGFuICcpJwkJCXsgJCQgPSAkMzsgfQorCQk7 CisKK2pzb25fdGFibGVfcGxhbjoKKwkJCWpzb25fdGFibGVfcGxhbl9zaW1wbGUKKwkJCXwg anNvbl90YWJsZV9wbGFuX3BhcmVudF9jaGlsZAorCQkJfCBqc29uX3RhYmxlX3BsYW5fc2li bGluZworCQk7CisKK2pzb25fdGFibGVfcGxhbl9zaW1wbGU6CisJCQluYW1lCisJCQkJewor CQkJCQlKc29uVGFibGVQbGFuICpuID0gbWFrZU5vZGUoSnNvblRhYmxlUGxhbik7CisKKwkJ CQkJbi0+cGxhbl90eXBlID0gSlNUUF9TSU1QTEU7CisJCQkJCW4tPnBhdGhuYW1lID0gJDE7 CisJCQkJCW4tPmxvY2F0aW9uID0gQDE7CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9 CisJCTsKKworanNvbl90YWJsZV9wbGFuX3BhcmVudF9jaGlsZDoKKwkJCWpzb25fdGFibGVf cGxhbl9vdXRlcgorCQkJfCBqc29uX3RhYmxlX3BsYW5faW5uZXIKKwkJOworCitqc29uX3Rh YmxlX3BsYW5fb3V0ZXI6CisJCQlqc29uX3RhYmxlX3BsYW5fc2ltcGxlIE9VVEVSX1AganNv bl90YWJsZV9wbGFuX3ByaW1hcnkKKwkJCQl7ICQkID0gbWFrZUpzb25UYWJsZUpvaW5lZFBs YW4oSlNUUEpfT1VURVIsICQxLCAkMywgQDEpOyB9CisJCTsKKworanNvbl90YWJsZV9wbGFu X2lubmVyOgorCQkJanNvbl90YWJsZV9wbGFuX3NpbXBsZSBJTk5FUl9QIGpzb25fdGFibGVf cGxhbl9wcmltYXJ5CisJCQkJeyAkJCA9IG1ha2VKc29uVGFibGVKb2luZWRQbGFuKEpTVFBK X0lOTkVSLCAkMSwgJDMsIEAxKTsgfQorCQk7CisKK2pzb25fdGFibGVfcGxhbl9zaWJsaW5n OgorCQkJanNvbl90YWJsZV9wbGFuX3VuaW9uCisJCQl8IGpzb25fdGFibGVfcGxhbl9jcm9z cworCQk7CisKK2pzb25fdGFibGVfcGxhbl91bmlvbjoKKwkJCWpzb25fdGFibGVfcGxhbl9w cmltYXJ5IFVOSU9OIGpzb25fdGFibGVfcGxhbl9wcmltYXJ5CisJCQkJeyAkJCA9IG1ha2VK c29uVGFibGVKb2luZWRQbGFuKEpTVFBKX1VOSU9OLCAkMSwgJDMsIEAxKTsgfQorCQkJfCBq c29uX3RhYmxlX3BsYW5fdW5pb24gVU5JT04ganNvbl90YWJsZV9wbGFuX3ByaW1hcnkKKwkJ CQl7ICQkID0gbWFrZUpzb25UYWJsZUpvaW5lZFBsYW4oSlNUUEpfVU5JT04sICQxLCAkMywg QDEpOyB9CisJCTsKKworanNvbl90YWJsZV9wbGFuX2Nyb3NzOgorCQkJanNvbl90YWJsZV9w bGFuX3ByaW1hcnkgQ1JPU1MganNvbl90YWJsZV9wbGFuX3ByaW1hcnkKKwkJCQl7ICQkID0g bWFrZUpzb25UYWJsZUpvaW5lZFBsYW4oSlNUUEpfQ1JPU1MsICQxLCAkMywgQDEpOyB9CisJ CQl8IGpzb25fdGFibGVfcGxhbl9jcm9zcyBDUk9TUyBqc29uX3RhYmxlX3BsYW5fcHJpbWFy eQorCQkJCXsgJCQgPSBtYWtlSnNvblRhYmxlSm9pbmVkUGxhbihKU1RQSl9DUk9TUywgJDEs ICQzLCBAMSk7IH0KKwkJOworCitqc29uX3RhYmxlX3BsYW5fcHJpbWFyeToKKwkJCWpzb25f dGFibGVfcGxhbl9zaW1wbGUJCQkJCQl7ICQkID0gJDE7IH0KKwkJCXwgJygnIGpzb25fdGFi bGVfcGxhbiAnKScKKwkJCQl7CisJCQkJCWNhc3ROb2RlKEpzb25UYWJsZVBsYW4sICQyKS0+ bG9jYXRpb24gPSBAMTsKKwkJCQkJJCQgPSAkMjsKKwkJCQl9CisJCTsKKworanNvbl90YWJs ZV9kZWZhdWx0X3BsYW46CisJCQlQTEFOIERFRkFVTFQgJygnIGpzb25fdGFibGVfZGVmYXVs dF9wbGFuX2Nob2ljZXMgJyknCisJCQl7CisJCQkJSnNvblRhYmxlUGxhbiAqbiA9IG1ha2VO b2RlKEpzb25UYWJsZVBsYW4pOworCisJCQkJbi0+cGxhbl90eXBlID0gSlNUUF9ERUZBVUxU OworCQkJCW4tPmpvaW5fdHlwZSA9ICQ0OworCQkJCW4tPmxvY2F0aW9uID0gQDE7CisJCQkJ JCQgPSAoTm9kZSAqKSBuOworCQkJfQorCQk7CisKK2pzb25fdGFibGVfZGVmYXVsdF9wbGFu X2Nob2ljZXM6CisJCQlqc29uX3RhYmxlX2RlZmF1bHRfcGxhbl9pbm5lcl9vdXRlcgkJCXsg JCQgPSAkMSB8IEpTVFBKX1VOSU9OOyB9CisJCQl8IGpzb25fdGFibGVfZGVmYXVsdF9wbGFu X2lubmVyX291dGVyICcsJworCQkJICBqc29uX3RhYmxlX2RlZmF1bHRfcGxhbl91bmlvbl9j cm9zcwkJeyAkJCA9ICQxIHwgJDM7IH0KKwkJCXwganNvbl90YWJsZV9kZWZhdWx0X3BsYW5f dW5pb25fY3Jvc3MJCXsgJCQgPSAkMSB8IEpTVFBKX09VVEVSOyB9CisJCQl8IGpzb25fdGFi bGVfZGVmYXVsdF9wbGFuX3VuaW9uX2Nyb3NzICcsJworCQkJICBqc29uX3RhYmxlX2RlZmF1 bHRfcGxhbl9pbm5lcl9vdXRlcgkJeyAkJCA9ICQxIHwgJDM7IH0KKwkJOworCitqc29uX3Rh YmxlX2RlZmF1bHRfcGxhbl9pbm5lcl9vdXRlcjoKKwkJCUlOTkVSX1AJCQkJCQkJCQkJeyAk JCA9IEpTVFBKX0lOTkVSOyB9CisJCQl8IE9VVEVSX1AJCQkJCQkJCQl7ICQkID0gSlNUUEpf T1VURVI7IH0KKwkJOworCitqc29uX3RhYmxlX2RlZmF1bHRfcGxhbl91bmlvbl9jcm9zczoK KwkJCVVOSU9OCQkJCQkJCQkJCXsgJCQgPSBKU1RQSl9VTklPTjsgfQorCQkJfCBDUk9TUwkJ CQkJCQkJCQl7ICQkID0gSlNUUEpfQ1JPU1M7IH0KKwkJOworCiBqc29uX3JldHVybmluZ19j bGF1c2Vfb3B0OgogCQkJUkVUVVJOSU5HIFR5cGVuYW1lCiAJCQkJewpAQCAtMTc0NTEsNiAr MTc3NTksNyBAQCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IE1PVkUKIAkJCXwgTkFNRV9Q CiAJCQl8IE5BTUVTCisJCQl8IE5FU1RFRAogCQkJfCBORVcKIAkJCXwgTkVYVAogCQkJfCBO RkMKQEAgLTE3NDg1LDYgKzE3Nzk0LDggQEAgdW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJfCBQ QVJUSVRJT04KIAkJCXwgUEFTU0lORwogCQkJfCBQQVNTV09SRAorCQkJfCBQQVRICisJCQl8 IFBMQU4KIAkJCXwgUExBTlMKIAkJCXwgUE9MSUNZCiAJCQl8IFBSRUNFRElORwpAQCAtMTc2 NDksNiArMTc5NjAsNyBAQCBjb2xfbmFtZV9rZXl3b3JkOgogCQkJfCBKU09OX1FVRVJZCiAJ CQl8IEpTT05fU0NBTEFSCiAJCQl8IEpTT05fU0VSSUFMSVpFCisJCQl8IEpTT05fVEFCTEUK IAkJCXwgSlNPTl9WQUxVRQogCQkJfCBMRUFTVAogCQkJfCBOQVRJT05BTApAQCAtMTgwMTcs NiArMTgzMjksNyBAQCBiYXJlX2xhYmVsX2tleXdvcmQ6CiAJCQl8IEpTT05fUVVFUlkKIAkJ CXwgSlNPTl9TQ0FMQVIKIAkJCXwgSlNPTl9TRVJJQUxJWkUKKwkJCXwgSlNPTl9UQUJMRQog CQkJfCBKU09OX1ZBTFVFCiAJCQl8IEtFRVAKIAkJCXwgS0VZCkBAIC0xODA1Niw2ICsxODM2 OSw3IEBAIGJhcmVfbGFiZWxfa2V5d29yZDoKIAkJCXwgTkFUSU9OQUwKIAkJCXwgTkFUVVJB TAogCQkJfCBOQ0hBUgorCQkJfCBORVNURUQKIAkJCXwgTkVXCiAJCQl8IE5FWFQKIAkJCXwg TkZDCkBAIC0xODEwMCw3ICsxODQxNCw5IEBAIGJhcmVfbGFiZWxfa2V5d29yZDoKIAkJCXwg UEFSVElUSU9OCiAJCQl8IFBBU1NJTkcKIAkJCXwgUEFTU1dPUkQKKwkJCXwgUEFUSAogCQkJ fCBQTEFDSU5HCisJCQl8IFBMQU4KIAkJCXwgUExBTlMKIAkJCXwgUE9MSUNZCiAJCQl8IFBP U0lUSU9OCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvbWVzb24uYnVpbGQgYi9z cmMvYmFja2VuZC9wYXJzZXIvbWVzb24uYnVpbGQKaW5kZXggOTQ1MTdhN2Y3ZC4uMGYwZTRh YzdjYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL21lc29uLmJ1aWxkCisrKyBi L3NyYy9iYWNrZW5kL3BhcnNlci9tZXNvbi5idWlsZApAQCAtMTAsNiArMTAsNyBAQCBiYWNr ZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdwYXJzZV9lbnIuYycsCiAgICdwYXJzZV9leHBy LmMnLAogICAncGFyc2VfZnVuYy5jJywKKyAgJ3BhcnNlX2pzb250YWJsZS5jJywKICAgJ3Bh cnNlX21lcmdlLmMnLAogICAncGFyc2Vfbm9kZS5jJywKICAgJ3BhcnNlX29wZXIuYycsCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfY2xhdXNlLmMgYi9zcmMvYmFj a2VuZC9wYXJzZXIvcGFyc2VfY2xhdXNlLmMKaW5kZXggZjYxZjc5NDc1NS4uYjQ0ZmY0NDk5 MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2NsYXVzZS5jCisrKyBi L3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9jbGF1c2UuYwpAQCAtNjk3LDcgKzY5NywxMSBA QCB0cmFuc2Zvcm1SYW5nZVRhYmxlRnVuYyhQYXJzZVN0YXRlICpwc3RhdGUsIFJhbmdlVGFi bGVGdW5jICpydGYpCiAJY2hhcgkgICoqbmFtZXM7CiAJaW50CQkJY29sbm87CiAKLQkvKiBD dXJyZW50bHkgb25seSBYTUxUQUJMRSBpcyBzdXBwb3J0ZWQgKi8KKwkvKgorCSAqIEN1cnJl bnRseSB3ZSBvbmx5IHN1cHBvcnQgWE1MVEFCTEUgaGVyZS4gIFNlZSB0cmFuc2Zvcm1Kc29u VGFibGUoKSBmb3IKKwkgKiBKU09OX1RBQkxFIHN1cHBvcnQuCisJICovCisJdGYtPmZ1bmN0 eXBlID0gVEZUX1hNTFRBQkxFOwogCWNvbnN0cnVjdE5hbWUgPSAiWE1MVEFCTEUiOwogCWRv Y1R5cGUgPSBYTUxPSUQ7CiAKQEAgLTExMDQsMTMgKzExMDgsMTcgQEAgdHJhbnNmb3JtRnJv bUNsYXVzZUl0ZW0oUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpuLAogCQlydHItPnJ0aW5k ZXggPSBuc2l0ZW0tPnBfcnRpbmRleDsKIAkJcmV0dXJuIChOb2RlICopIHJ0cjsKIAl9Ci0J ZWxzZSBpZiAoSXNBKG4sIFJhbmdlVGFibGVGdW5jKSkKKwllbHNlIGlmIChJc0EobiwgUmFu Z2VUYWJsZUZ1bmMpIHx8IElzQShuLCBKc29uVGFibGUpKQogCXsKIAkJLyogdGFibGUgZnVu Y3Rpb24gaXMgbGlrZSBhIHBsYWluIHJlbGF0aW9uICovCiAJCVJhbmdlVGJsUmVmICpydHI7 CiAJCVBhcnNlTmFtZXNwYWNlSXRlbSAqbnNpdGVtOwogCi0JCW5zaXRlbSA9IHRyYW5zZm9y bVJhbmdlVGFibGVGdW5jKHBzdGF0ZSwgKFJhbmdlVGFibGVGdW5jICopIG4pOworCQlpZiAo SXNBKG4sIFJhbmdlVGFibGVGdW5jKSkKKwkJCW5zaXRlbSA9IHRyYW5zZm9ybVJhbmdlVGFi bGVGdW5jKHBzdGF0ZSwgKFJhbmdlVGFibGVGdW5jICopIG4pOworCQllbHNlCisJCQluc2l0 ZW0gPSB0cmFuc2Zvcm1Kc29uVGFibGUocHN0YXRlLCAoSnNvblRhYmxlICopIG4pOworCiAJ CSp0b3BfbnNpdGVtID0gbnNpdGVtOwogCQkqbmFtZXNwYWNlID0gbGlzdF9tYWtlMShuc2l0 ZW0pOwogCQlydHIgPSBtYWtlTm9kZShSYW5nZVRibFJlZik7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNl X2V4cHIuYwppbmRleCA1YTU4YTZkNzdmLi45ZDRmMzQ5MDk5IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9w YXJzZV9leHByLmMKQEAgLTQwMzgsNyArNDAzOCw3IEBAIHRyYW5zZm9ybUpzb25FeHByQ29t bW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHByICpmdW5jKQogCU5vZGUJICAg KnBhdGhzcGVjOwogCUpzb25Gb3JtYXRUeXBlIGZvcm1hdDsKIAotCWlmIChmdW5jLT5jb21t b24tPnBhdGhuYW1lKQorCWlmIChmdW5jLT5jb21tb24tPnBhdGhuYW1lICYmIGZ1bmMtPm9w ICE9IEpTT05fVEFCTEVfT1ApCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJS Q09ERV9TWU5UQVhfRVJST1IpLAogCQkJCSBlcnJtc2coIkpTT05fVEFCTEUgcGF0aCBuYW1l IGlzIG5vdCBhbGxvd2VkIGhlcmUiKSwKQEAgLTQwNzYsMTQgKzQwNzYsMTkgQEAgdHJhbnNm b3JtSnNvbkV4cHJDb21tb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRnVuY0V4cHIgKmZ1 bmMpCiAJdHJhbnNmb3JtSnNvblBhc3NpbmdBcmdzKHBzdGF0ZSwgZm9ybWF0LCBmdW5jLT5j b21tb24tPnBhc3NpbmcsCiAJCQkJCQkJICZqc2V4cHItPnBhc3NpbmdfdmFsdWVzLCAmanNl eHByLT5wYXNzaW5nX25hbWVzKTsKIAotCWlmIChmdW5jLT5vcCAhPSBKU09OX0VYSVNUU19P UCkKKwlpZiAoZnVuYy0+b3AgIT0gSlNPTl9FWElTVFNfT1AgJiYgZnVuYy0+b3AgIT0gSlNP Tl9UQUJMRV9PUCkKIAkJanNleHByLT5vbl9lbXB0eSA9IHRyYW5zZm9ybUpzb25CZWhhdmlv cihwc3RhdGUsIGZ1bmMtPm9uX2VtcHR5LAogCQkJCQkJCQkJCQkJIEpTT05fQkVIQVZJT1Jf TlVMTCk7CiAKLQlqc2V4cHItPm9uX2Vycm9yID0gdHJhbnNmb3JtSnNvbkJlaGF2aW9yKHBz dGF0ZSwgZnVuYy0+b25fZXJyb3IsCi0JCQkJCQkJCQkJCSBmdW5jLT5vcCA9PSBKU09OX0VY SVNUU19PUCA/Ci0JCQkJCQkJCQkJCSBKU09OX0JFSEFWSU9SX0ZBTFNFIDoKLQkJCQkJCQkJ CQkJIEpTT05fQkVIQVZJT1JfTlVMTCk7CisJaWYgKGZ1bmMtPm9wID09IEpTT05fRVhJU1RT X09QKQorCQlqc2V4cHItPm9uX2Vycm9yID0gdHJhbnNmb3JtSnNvbkJlaGF2aW9yKHBzdGF0 ZSwgZnVuYy0+b25fZXJyb3IsCisJCQkJCQkJCQkJCQkgSlNPTl9CRUhBVklPUl9GQUxTRSk7 CisJZWxzZSBpZiAoZnVuYy0+b3AgPT0gSlNPTl9UQUJMRV9PUCkKKwkJanNleHByLT5vbl9l cnJvciA9IHRyYW5zZm9ybUpzb25CZWhhdmlvcihwc3RhdGUsIGZ1bmMtPm9uX2Vycm9yLAor CQkJCQkJCQkJCQkJIEpTT05fQkVIQVZJT1JfRU1QVFkpOworCWVsc2UKKwkJanNleHByLT5v bl9lcnJvciA9IHRyYW5zZm9ybUpzb25CZWhhdmlvcihwc3RhdGUsIGZ1bmMtPm9uX2Vycm9y LAorCQkJCQkJCQkJCQkJIEpTT05fQkVIQVZJT1JfTlVMTCk7CiAKIAlyZXR1cm4ganNleHBy OwogfQpAQCAtNDM4NCw2ICs0Mzg5LDIxIEBAIHRyYW5zZm9ybUpzb25GdW5jRXhwcihQYXJz ZVN0YXRlICpwc3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYykKIAkJCQkJanNleHByLT5yZXN1 bHRfY29lcmNpb24tPmV4cHIgPSBOVUxMOwogCQkJfQogCQkJYnJlYWs7CisKKwkJY2FzZSBK U09OX1RBQkxFX09QOgorCQkJanNleHByLT5yZXR1cm5pbmcgPSBtYWtlTm9kZShKc29uUmV0 dXJuaW5nKTsKKwkJCWpzZXhwci0+cmV0dXJuaW5nLT5mb3JtYXQgPSBtYWtlSnNvbkZvcm1h dChKU19GT1JNQVRfREVGQVVMVCwgSlNfRU5DX0RFRkFVTFQsIC0xKTsKKwkJCWpzZXhwci0+ cmV0dXJuaW5nLT50eXBpZCA9IGV4cHJUeXBlKGNvbnRleHRJdGVtRXhwcik7CisJCQlqc2V4 cHItPnJldHVybmluZy0+dHlwbW9kID0gLTE7CisKKwkJCWlmIChqc2V4cHItPnJldHVybmlu Zy0+dHlwaWQgIT0gSlNPTkJPSUQpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJj b2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJCSBlcnJtc2coIkpT T05fVEFCTEUoKSBpcyBub3QgeWV0IGltcGxlbWVudGVkIGZvciB0aGUganNvbiB0eXBlIiks CisJCQkJCQkgZXJyaGludCgiVHJ5IGNhc3RpbmcgdGhlIGFyZ3VtZW50IHRvIGpzb25iIiks CisJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgZnVuYy0+bG9jYXRpb24pKSk7 CisKKwkJCWJyZWFrOwogCX0KIAogCWlmIChleHByVHlwZShjb250ZXh0SXRlbUV4cHIpICE9 IEpTT05CT0lEKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2pzb250 YWJsZS5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2pzb250YWJsZS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmE3ODAyZTA0OTkKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfanNvbnRhYmxlLmMKQEAgLTAsMCAr MSw3MzkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBhcnNlX2pzb250YWJs ZS5jCisgKgkgIHBhcnNpbmcgb2YgSlNPTl9UQUJMRQorICoKKyAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2 ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAg c3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2pzb250YWJsZS5jCisgKgorICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJj YXRhbG9nL3BnX2NvbGxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgor I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgor I2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9vcHRp bWl6ZXIuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY2xhdXNlLmgiCisjaW5jbHVkZSAi cGFyc2VyL3BhcnNlX2NvbGxhdGUuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VfZXhwci5o IgorI2luY2x1ZGUgInBhcnNlci9wYXJzZV9yZWxhdGlvbi5oIgorI2luY2x1ZGUgInBhcnNl ci9wYXJzZV90eXBlLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRl ICJ1dGlscy9qc29uLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisKKy8qIENv bnRleHQgZm9yIEpTT05fVEFCTEUgdHJhbnNmb3JtYXRpb24gKi8KK3R5cGVkZWYgc3RydWN0 IEpzb25UYWJsZVBhcnNlQ29udGV4dAoreworCVBhcnNlU3RhdGUgKnBzdGF0ZTsJCQkvKiBw YXJzaW5nIHN0YXRlICovCisJSnNvblRhYmxlICAqdGFibGU7CQkJLyogdW50cmFuc2Zvcm1l ZCBub2RlICovCisJVGFibGVGdW5jICAqdGFibGVmdW5jOwkJLyogdHJhbnNmb3JtZWQgbm9k ZQkqLworCUxpc3QJICAgKnBhdGhOYW1lczsJCS8qIGxpc3Qgb2YgYWxsIHBhdGggYW5kIGNv bHVtbnMgbmFtZXMgKi8KKwlpbnQJCQlwYXRoTmFtZUlkOwkJLyogcGF0aCBuYW1lIGlkIGNv dW50ZXIgKi8KKwlPaWQJCQljb250ZXh0SXRlbVR5cGlkOwkvKiB0eXBlIG9pZCBvZiBjb250 ZXh0IGl0ZW0gKGpzb24vanNvbmIpICovCit9IEpzb25UYWJsZVBhcnNlQ29udGV4dDsKKwor c3RhdGljIEpzb25UYWJsZVBhcmVudCAqdHJhbnNmb3JtSnNvblRhYmxlQ29sdW1ucyhKc29u VGFibGVQYXJzZUNvbnRleHQgKmN4dCwKKwkJCQkJCQkJCQkJCSAgSnNvblRhYmxlUGxhbiAq cGxhbiwKKwkJCQkJCQkJCQkJCSAgTGlzdCAqY29sdW1ucywKKwkJCQkJCQkJCQkJCSAgY2hh ciAqcGF0aFNwZWMsCisJCQkJCQkJCQkJCQkgIGNoYXIgKipwYXRoTmFtZSwKKwkJCQkJCQkJ CQkJCSAgaW50IGxvY2F0aW9uKTsKKworc3RhdGljIE5vZGUgKgorbWFrZVN0cmluZ0NvbnN0 KGNoYXIgKnN0ciwgaW50IGxvY2F0aW9uKQoreworCUFfQ29uc3QgICAgKm4gPSBtYWtlTm9k ZShBX0NvbnN0KTsKKworCW4tPnZhbC5ub2RlLnR5cGUgPSBUX1N0cmluZzsKKwluLT52YWwu c3ZhbC5zdmFsID0gc3RyOworCW4tPmxvY2F0aW9uID0gbG9jYXRpb247CisKKwlyZXR1cm4g KE5vZGUgKikgbjsKK30KKworLyoKKyAqIFRyYW5zZm9ybSBKU09OX1RBQkxFIGNvbHVtbgor ICogICAtIHJlZ3VsYXIgY29sdW1uIGludG8gSlNPTl9WQUxVRSgpCisgKiAgIC0gRk9STUFU IEpTT04gY29sdW1uIGludG8gSlNPTl9RVUVSWSgpCisgKiAgIC0gRVhJU1RTIGNvbHVtbiBp bnRvIEpTT05fRVhJU1RTKCkKKyAqLworc3RhdGljIE5vZGUgKgordHJhbnNmb3JtSnNvblRh YmxlQ29sdW1uKEpzb25UYWJsZUNvbHVtbiAqanRjLCBOb2RlICpjb250ZXh0SXRlbUV4cHIs CisJCQkJCQkgTGlzdCAqcGFzc2luZ0FyZ3MsIGJvb2wgZXJyb3JPbkVycm9yKQoreworCUpz b25GdW5jRXhwciAqamZleHByID0gbWFrZU5vZGUoSnNvbkZ1bmNFeHByKTsKKwlKc29uQ29t bW9uICpjb21tb24gPSBtYWtlTm9kZShKc29uQ29tbW9uKTsKKwlKc29uT3V0cHV0ICpvdXRw dXQgPSBtYWtlTm9kZShKc29uT3V0cHV0KTsKKwljaGFyCSAgICpwYXRoc3BlYzsKKwlKc29u Rm9ybWF0ICpkZWZhdWx0X2Zvcm1hdDsKKworCWpmZXhwci0+b3AgPQorCQlqdGMtPmNvbHR5 cGUgPT0gSlRDX1JFR1VMQVIgPyBKU09OX1ZBTFVFX09QIDoKKwkJanRjLT5jb2x0eXBlID09 IEpUQ19FWElTVFMgPyBKU09OX0VYSVNUU19PUCA6IEpTT05fUVVFUllfT1A7CisJamZleHBy LT5jb21tb24gPSBjb21tb247CisJamZleHByLT5vdXRwdXQgPSBvdXRwdXQ7CisJamZleHBy LT5vbl9lbXB0eSA9IGp0Yy0+b25fZW1wdHk7CisJamZleHByLT5vbl9lcnJvciA9IGp0Yy0+ b25fZXJyb3I7CisJaWYgKCFqZmV4cHItPm9uX2Vycm9yICYmIGVycm9yT25FcnJvcikKKwkJ amZleHByLT5vbl9lcnJvciA9IG1ha2VKc29uQmVoYXZpb3IoSlNPTl9CRUhBVklPUl9FUlJP UiwgTlVMTCk7CisJamZleHByLT5vbWl0X3F1b3RlcyA9IGp0Yy0+b21pdF9xdW90ZXM7CisJ amZleHByLT53cmFwcGVyID0ganRjLT53cmFwcGVyOworCWpmZXhwci0+bG9jYXRpb24gPSBq dGMtPmxvY2F0aW9uOworCisJb3V0cHV0LT50eXBlTmFtZSA9IGp0Yy0+dHlwZU5hbWU7CisJ b3V0cHV0LT5yZXR1cm5pbmcgPSBtYWtlTm9kZShKc29uUmV0dXJuaW5nKTsKKwlvdXRwdXQt PnJldHVybmluZy0+Zm9ybWF0ID0ganRjLT5mb3JtYXQ7CisKKwlkZWZhdWx0X2Zvcm1hdCA9 IG1ha2VKc29uRm9ybWF0KEpTX0ZPUk1BVF9ERUZBVUxULCBKU19FTkNfREVGQVVMVCwgLTEp OworCisJY29tbW9uLT5wYXRobmFtZSA9IE5VTEw7CisJY29tbW9uLT5leHByID0gbWFrZUpz b25WYWx1ZUV4cHIoKEV4cHIgKikgY29udGV4dEl0ZW1FeHByLCBkZWZhdWx0X2Zvcm1hdCk7 CisJY29tbW9uLT5wYXNzaW5nID0gcGFzc2luZ0FyZ3M7CisKKwlpZiAoanRjLT5wYXRoc3Bl YykKKwkJcGF0aHNwZWMgPSBqdGMtPnBhdGhzcGVjOworCWVsc2UKKwl7CisJCS8qIENvbnN0 cnVjdCBkZWZhdWx0IHBhdGggYXMgJyQuImNvbHVtbl9uYW1lIicgKi8KKwkJU3RyaW5nSW5m b0RhdGEgcGF0aDsKKworCQlpbml0U3RyaW5nSW5mbygmcGF0aCk7CisKKwkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmcGF0aCwgIiQuIik7CisJCWVzY2FwZV9qc29uKCZwYXRoLCBqdGMt Pm5hbWUpOworCisJCXBhdGhzcGVjID0gcGF0aC5kYXRhOworCX0KKworCWNvbW1vbi0+cGF0 aHNwZWMgPSBtYWtlU3RyaW5nQ29uc3QocGF0aHNwZWMsIC0xKTsKKworCXJldHVybiAoTm9k ZSAqKSBqZmV4cHI7Cit9CisKK3N0YXRpYyBib29sCitpc0pzb25UYWJsZVBhdGhOYW1lRHVw bGljYXRlKEpzb25UYWJsZVBhcnNlQ29udGV4dCAqY3h0LCBjb25zdCBjaGFyICpwYXRobmFt ZSkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVhY2gobGMsIGN4dC0+cGF0aE5hbWVz KQorCXsKKwkJaWYgKCFzdHJjbXAocGF0aG5hbWUsIChjb25zdCBjaGFyICopIGxmaXJzdChs YykpKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKiBS ZWdpc3RlciB0aGUgY29sdW1uIG5hbWUgaW4gdGhlIHBhdGggbmFtZSBsaXN0LiAqLworc3Rh dGljIHZvaWQKK3JlZ2lzdGVySnNvblRhYmxlQ29sdW1uKEpzb25UYWJsZVBhcnNlQ29udGV4 dCAqY3h0LCBjaGFyICpjb2xuYW1lKQoreworCWlmIChpc0pzb25UYWJsZVBhdGhOYW1lRHVw bGljYXRlKGN4dCwgY29sbmFtZSkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUo RVJSQ09ERV9EVVBMSUNBVEVfQUxJQVMpLAorCQkJCSBlcnJtc2coImR1cGxpY2F0ZSBKU09O X1RBQkxFIGNvbHVtbiBuYW1lOiAlcyIsIGNvbG5hbWUpLAorCQkJCSBlcnJoaW50KCJKU09O X1RBQkxFIGNvbHVtbiBuYW1lcyBtdXN0IGJlIGRpc3RpbmN0IGZyb20gb25lIGFub3RoZXIu IikpKTsKKworCWN4dC0+cGF0aE5hbWVzID0gbGFwcGVuZChjeHQtPnBhdGhOYW1lcywgY29s bmFtZSk7Cit9CisKKy8qIFJlY3Vyc2l2ZWx5IHJlZ2lzdGVyIGFsbCBuZXN0ZWQgY29sdW1u IG5hbWVzIGluIHRoZSBwYXRoIG5hbWUgbGlzdC4gKi8KK3N0YXRpYyB2b2lkCityZWdpc3Rl ckFsbEpzb25UYWJsZUNvbHVtbnMoSnNvblRhYmxlUGFyc2VDb250ZXh0ICpjeHQsIExpc3Qg KmNvbHVtbnMpCit7CisJTGlzdENlbGwgICAqbGM7CisKKwlmb3JlYWNoKGxjLCBjb2x1bW5z KQorCXsKKwkJSnNvblRhYmxlQ29sdW1uICpqdGMgPSBjYXN0Tm9kZShKc29uVGFibGVDb2x1 bW4sIGxmaXJzdChsYykpOworCisJCWlmIChqdGMtPmNvbHR5cGUgPT0gSlRDX05FU1RFRCkK KwkJeworCQkJaWYgKGp0Yy0+cGF0aG5hbWUpCisJCQkJcmVnaXN0ZXJKc29uVGFibGVDb2x1 bW4oY3h0LCBqdGMtPnBhdGhuYW1lKTsKKworCQkJcmVnaXN0ZXJBbGxKc29uVGFibGVDb2x1 bW5zKGN4dCwganRjLT5jb2x1bW5zKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXJlZ2lzdGVy SnNvblRhYmxlQ29sdW1uKGN4dCwganRjLT5uYW1lKTsKKwkJfQorCX0KK30KKworLyogR2Vu ZXJhdGUgYSBuZXcgdW5pcXVlIEpTT05fVEFCTEUgcGF0aCBuYW1lLiAqLworc3RhdGljIGNo YXIgKgorZ2VuZXJhdGVKc29uVGFibGVQYXRoTmFtZShKc29uVGFibGVQYXJzZUNvbnRleHQg KmN4dCkKK3sKKwljaGFyCQluYW1lYnVmWzMyXTsKKwljaGFyCSAgICpuYW1lID0gbmFtZWJ1 ZjsKKworCWRvCisJeworCQlzbnByaW50ZihuYW1lYnVmLCBzaXplb2YobmFtZWJ1ZiksICJq c29uX3RhYmxlX3BhdGhfJWQiLAorCQkJCSArK2N4dC0+cGF0aE5hbWVJZCk7CisJfSB3aGls ZSAoaXNKc29uVGFibGVQYXRoTmFtZUR1cGxpY2F0ZShjeHQsIG5hbWUpKTsKKworCW5hbWUg PSBwc3RyZHVwKG5hbWUpOworCWN4dC0+cGF0aE5hbWVzID0gbGFwcGVuZChjeHQtPnBhdGhO YW1lcywgbmFtZSk7CisKKwlyZXR1cm4gbmFtZTsKK30KKworLyogQ29sbGVjdCBzaWJsaW5n IHBhdGggbmFtZXMgZnJvbSBwbGFuIHRvIHRoZSBzcGVjaWZpZWQgbGlzdC4gKi8KK3N0YXRp YyB2b2lkCitjb2xsZWN0U2libGluZ1BhdGhzSW5Kc29uVGFibGVQbGFuKEpzb25UYWJsZVBs YW4gKnBsYW4sIExpc3QgKipwYXRocykKK3sKKwlpZiAocGxhbi0+cGxhbl90eXBlID09IEpT VFBfU0lNUExFKQorCQkqcGF0aHMgPSBsYXBwZW5kKCpwYXRocywgcGxhbi0+cGF0aG5hbWUp OworCWVsc2UgaWYgKHBsYW4tPnBsYW5fdHlwZSA9PSBKU1RQX0pPSU5FRCkKKwl7CisJCWlm IChwbGFuLT5qb2luX3R5cGUgPT0gSlNUUEpfSU5ORVIgfHwKKwkJCXBsYW4tPmpvaW5fdHlw ZSA9PSBKU1RQSl9PVVRFUikKKwkJeworCQkJQXNzZXJ0KHBsYW4tPnBsYW4xLT5wbGFuX3R5 cGUgPT0gSlNUUF9TSU1QTEUpOworCQkJKnBhdGhzID0gbGFwcGVuZCgqcGF0aHMsIHBsYW4t PnBsYW4xLT5wYXRobmFtZSk7CisJCX0KKwkJZWxzZSBpZiAocGxhbi0+am9pbl90eXBlID09 IEpTVFBKX0NST1NTIHx8CisJCQkJIHBsYW4tPmpvaW5fdHlwZSA9PSBKU1RQSl9VTklPTikK KwkJeworCQkJY29sbGVjdFNpYmxpbmdQYXRoc0luSnNvblRhYmxlUGxhbihwbGFuLT5wbGFu MSwgcGF0aHMpOworCQkJY29sbGVjdFNpYmxpbmdQYXRoc0luSnNvblRhYmxlUGxhbihwbGFu LT5wbGFuMiwgcGF0aHMpOworCQl9CisJCWVsc2UKKwkJCWVsb2coRVJST1IsICJpbnZhbGlk IEpTT05fVEFCTEUgam9pbiB0eXBlICVkIiwKKwkJCQkgcGxhbi0+am9pbl90eXBlKTsKKwl9 Cit9CisKKy8qCisgKiBWYWxpZGF0ZSBjaGlsZCBKU09OX1RBQkxFIHBsYW4gYnkgY2hlY2tp bmcgdGhhdDoKKyAqICAtIGFsbCBuZXN0ZWQgY29sdW1ucyBoYXZlIHBhdGggbmFtZXMgc3Bl Y2lmaWVkCisgKiAgLSBhbGwgbmVzdGVkIGNvbHVtbnMgaGF2ZSBjb3JyZXNwb25kaW5nIG5v ZGUgaW4gdGhlIHNpYmxpbmcgcGxhbgorICogIC0gcGxhbiBkb2VzIG5vdCBjb250YWluIGR1 cGxpY2F0ZSBvciBleHRyYSBub2RlcworICovCitzdGF0aWMgdm9pZAordmFsaWRhdGVKc29u VGFibGVDaGlsZFBsYW4oUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uVGFibGVQbGFuICpwbGFu LAorCQkJCQkJICAgTGlzdCAqY29sdW1ucykKK3sKKwlMaXN0Q2VsbCAgICpsYzE7CisJTGlz dAkgICAqc2libGluZ3MgPSBOSUw7CisJaW50CQkJbmNoaWxkcmVuID0gMDsKKworCWlmIChw bGFuKQorCQljb2xsZWN0U2libGluZ1BhdGhzSW5Kc29uVGFibGVQbGFuKHBsYW4sICZzaWJs aW5ncyk7CisKKwlmb3JlYWNoKGxjMSwgY29sdW1ucykKKwl7CisJCUpzb25UYWJsZUNvbHVt biAqanRjID0gY2FzdE5vZGUoSnNvblRhYmxlQ29sdW1uLCBsZmlyc3QobGMxKSk7CisKKwkJ aWYgKGp0Yy0+Y29sdHlwZSA9PSBKVENfTkVTVEVEKQorCQl7CisJCQlMaXN0Q2VsbCAgICps YzI7CisJCQlib29sCQlmb3VuZCA9IGZhbHNlOworCisJCQlpZiAoIWp0Yy0+cGF0aG5hbWUp CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VS Uk9SKSwKKwkJCQkJCSBlcnJtc2coIm5lc3RlZCBKU09OX1RBQkxFIGNvbHVtbnMgbXVzdCBj b250YWluIGFuIGV4cGxpY2l0IEFTIHBhdGhuYW1lIHNwZWNpZmljYXRpb24gaWYgYW4gZXhw bGljaXQgUExBTiBjbGF1c2UgaXMgdXNlZCIpLAorCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlv bihwc3RhdGUsIGp0Yy0+bG9jYXRpb24pKSk7CisKKwkJCS8qIGZpbmQgbmVzdGVkIHBhdGgg bmFtZSBpbiB0aGUgbGlzdCBvZiBzaWJsaW5nIHBhdGggbmFtZXMgKi8KKwkJCWZvcmVhY2go bGMyLCBzaWJsaW5ncykKKwkJCXsKKwkJCQlpZiAoKGZvdW5kID0gIXN0cmNtcChqdGMtPnBh dGhuYW1lLCBsZmlyc3QobGMyKSkpKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKCFm b3VuZCkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5U QVhfRVJST1IpLAorCQkJCQkJIGVycm1zZygiaW52YWxpZCBKU09OX1RBQkxFIHBsYW4iKSwK KwkJCQkJCSBlcnJkZXRhaWwoIlBsYW4gbm9kZSBmb3IgbmVzdGVkIHBhdGggJXMgd2FzIG5v dCBmb3VuZCBpbiBwbGFuLiIsIGp0Yy0+cGF0aG5hbWUpLAorCQkJCQkJIHBhcnNlcl9lcnJw b3NpdGlvbihwc3RhdGUsIGp0Yy0+bG9jYXRpb24pKSk7CisKKwkJCW5jaGlsZHJlbisrOwor CQl9CisJfQorCisJaWYgKGxpc3RfbGVuZ3RoKHNpYmxpbmdzKSA+IG5jaGlsZHJlbikKKwkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJ CQkJIGVycm1zZygiaW52YWxpZCBKU09OX1RBQkxFIHBsYW4iKSwKKwkJCQkgZXJyZGV0YWls KCJQbGFuIG5vZGUgY29udGFpbnMgc29tZSBleHRyYSBvciBkdXBsaWNhdGUgc2libGluZyBu b2Rlcy4iKSwKKwkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgcGxhbiA/IHBsYW4t PmxvY2F0aW9uIDogLTEpKSk7Cit9CisKK3N0YXRpYyBKc29uVGFibGVDb2x1bW4gKgorZmlu ZE5lc3RlZEpzb25UYWJsZUNvbHVtbihMaXN0ICpjb2x1bW5zLCBjb25zdCBjaGFyICpwYXRo bmFtZSkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVhY2gobGMsIGNvbHVtbnMpCisJ eworCQlKc29uVGFibGVDb2x1bW4gKmp0YyA9IGNhc3ROb2RlKEpzb25UYWJsZUNvbHVtbiwg bGZpcnN0KGxjKSk7CisKKwkJaWYgKGp0Yy0+Y29sdHlwZSA9PSBKVENfTkVTVEVEICYmCisJ CQlqdGMtPnBhdGhuYW1lICYmCisJCQkhc3RyY21wKGp0Yy0+cGF0aG5hbWUsIHBhdGhuYW1l KSkKKwkJCXJldHVybiBqdGM7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBO b2RlICoKK3RyYW5zZm9ybU5lc3RlZEpzb25UYWJsZUNvbHVtbihKc29uVGFibGVQYXJzZUNv bnRleHQgKmN4dCwgSnNvblRhYmxlQ29sdW1uICpqdGMsCisJCQkJCQkJICAgSnNvblRhYmxl UGxhbiAqcGxhbikKK3sKKwlKc29uVGFibGVQYXJlbnQgKm5vZGU7CisJY2hhcgkgICAqcGF0 aG5hbWUgPSBqdGMtPnBhdGhuYW1lOworCisJbm9kZSA9IHRyYW5zZm9ybUpzb25UYWJsZUNv bHVtbnMoY3h0LCBwbGFuLCBqdGMtPmNvbHVtbnMsIGp0Yy0+cGF0aHNwZWMsCisJCQkJCQkJ CQkgJnBhdGhuYW1lLCBqdGMtPmxvY2F0aW9uKTsKKworCXJldHVybiAoTm9kZSAqKSBub2Rl OworfQorCitzdGF0aWMgTm9kZSAqCittYWtlSnNvblRhYmxlU2libGluZ0pvaW4oYm9vbCBj cm9zcywgTm9kZSAqbG5vZGUsIE5vZGUgKnJub2RlKQoreworCUpzb25UYWJsZVNpYmxpbmcg KmpvaW4gPSBtYWtlTm9kZShKc29uVGFibGVTaWJsaW5nKTsKKworCWpvaW4tPmxhcmcgPSBs bm9kZTsKKwlqb2luLT5yYXJnID0gcm5vZGU7CisJam9pbi0+Y3Jvc3MgPSBjcm9zczsKKwor CXJldHVybiAoTm9kZSAqKSBqb2luOworfQorCisvKgorICogUmVjdXJzaXZlbHkgdHJhbnNm b3JtIGNoaWxkIEpTT05fVEFCTEUgcGxhbi4KKyAqCisgKiBEZWZhdWx0IHBsYW4gaXMgdHJh bnNmb3JtZWQgaW50byBhIGNyb3NzL3VuaW9uIGpvaW4gb2YgaXRzIG5lc3RlZCBjb2x1bW5z LgorICogU2ltcGxlIGFuZCBvdXRlci9pbm5lciBwbGFucyBhcmUgdHJhbnNmb3JtZWQgaW50 byBhIEpzb25UYWJsZVBhcmVudCBieQorICogZmluZGluZyBhbmQgdHJhbnNmb3JtaW5nIGNv cnJlc3BvbmRpbmcgbmVzdGVkIGNvbHVtbi4KKyAqIFNpYmxpbmcgcGxhbnMgYXJlIHJlY3Vy c2l2ZWx5IHRyYW5zZm9ybWVkIGludG8gYSBKc29uVGFibGVTaWJsaW5nLgorICovCitzdGF0 aWMgTm9kZSAqCit0cmFuc2Zvcm1Kc29uVGFibGVDaGlsZFBsYW4oSnNvblRhYmxlUGFyc2VD b250ZXh0ICpjeHQsIEpzb25UYWJsZVBsYW4gKnBsYW4sCisJCQkJCQkJTGlzdCAqY29sdW1u cykKK3sKKwlKc29uVGFibGVDb2x1bW4gKmp0YyA9IE5VTEw7CisKKwlpZiAoIXBsYW4gfHwg cGxhbi0+cGxhbl90eXBlID09IEpTVFBfREVGQVVMVCkKKwl7CisJCS8qIHVuc3BlY2lmaWVk IG9yIGRlZmF1bHQgcGxhbiAqLworCQlOb2RlCSAgICpyZXMgPSBOVUxMOworCQlMaXN0Q2Vs bCAgICpsYzsKKwkJYm9vbAkJY3Jvc3MgPSBwbGFuICYmIChwbGFuLT5qb2luX3R5cGUgJiBK U1RQSl9DUk9TUyk7CisKKwkJLyogdHJhbnNmb3JtIGFsbCBuZXN0ZWQgY29sdW1ucyBpbnRv IGNyb3NzL3VuaW9uIGpvaW4gKi8KKwkJZm9yZWFjaChsYywgY29sdW1ucykKKwkJeworCQkJ SnNvblRhYmxlQ29sdW1uICpjb2wgPSBjYXN0Tm9kZShKc29uVGFibGVDb2x1bW4sIGxmaXJz dChsYykpOworCQkJTm9kZQkgICAqbm9kZTsKKworCQkJaWYgKGNvbC0+Y29sdHlwZSAhPSBK VENfTkVTVEVEKQorCQkJCWNvbnRpbnVlOworCisJCQlub2RlID0gdHJhbnNmb3JtTmVzdGVk SnNvblRhYmxlQ29sdW1uKGN4dCwgY29sLCBwbGFuKTsKKworCQkJLyogam9pbiB0cmFuc2Zv cm1lZCBub2RlIHdpdGggcHJldmlvdXMgc2libGluZyBub2RlcyAqLworCQkJcmVzID0gcmVz ID8gbWFrZUpzb25UYWJsZVNpYmxpbmdKb2luKGNyb3NzLCByZXMsIG5vZGUpIDogbm9kZTsK KwkJfQorCisJCXJldHVybiByZXM7CisJfQorCWVsc2UgaWYgKHBsYW4tPnBsYW5fdHlwZSA9 PSBKU1RQX1NJTVBMRSkKKwl7CisJCWp0YyA9IGZpbmROZXN0ZWRKc29uVGFibGVDb2x1bW4o Y29sdW1ucywgcGxhbi0+cGF0aG5hbWUpOworCX0KKwllbHNlIGlmIChwbGFuLT5wbGFuX3R5 cGUgPT0gSlNUUF9KT0lORUQpCisJeworCQlpZiAocGxhbi0+am9pbl90eXBlID09IEpTVFBK X0lOTkVSIHx8CisJCQlwbGFuLT5qb2luX3R5cGUgPT0gSlNUUEpfT1VURVIpCisJCXsKKwkJ CUFzc2VydChwbGFuLT5wbGFuMS0+cGxhbl90eXBlID09IEpTVFBfU0lNUExFKTsKKwkJCWp0 YyA9IGZpbmROZXN0ZWRKc29uVGFibGVDb2x1bW4oY29sdW1ucywgcGxhbi0+cGxhbjEtPnBh dGhuYW1lKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCU5vZGUJICAgKm5vZGUxID0gdHJhbnNm b3JtSnNvblRhYmxlQ2hpbGRQbGFuKGN4dCwgcGxhbi0+cGxhbjEsCisJCQkJCQkJCQkJCQkJ CQljb2x1bW5zKTsKKwkJCU5vZGUJICAgKm5vZGUyID0gdHJhbnNmb3JtSnNvblRhYmxlQ2hp bGRQbGFuKGN4dCwgcGxhbi0+cGxhbjIsCisJCQkJCQkJCQkJCQkJCQljb2x1bW5zKTsKKwor CQkJcmV0dXJuIG1ha2VKc29uVGFibGVTaWJsaW5nSm9pbihwbGFuLT5qb2luX3R5cGUgPT0g SlNUUEpfQ1JPU1MsCisJCQkJCQkJCQkJCW5vZGUxLCBub2RlMik7CisJCX0KKwl9CisJZWxz ZQorCQllbG9nKEVSUk9SLCAiaW52YWxpZCBKU09OX1RBQkxFIHBsYW4gdHlwZSAlZCIsIHBs YW4tPnBsYW5fdHlwZSk7CisKKwlpZiAoIWp0YykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJIGVycm1zZygiaW52YWxpZCBK U09OX1RBQkxFIHBsYW4iKSwKKwkJCQkgZXJyZGV0YWlsKCJQYXRoIG5hbWUgd2FzICVzIG5v dCBmb3VuZCBpbiBuZXN0ZWQgY29sdW1ucyBsaXN0LiIsCisJCQkJCQkgICBwbGFuLT5wYXRo bmFtZSksCisJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihjeHQtPnBzdGF0ZSwgcGxhbi0+bG9j YXRpb24pKSk7CisKKwlyZXR1cm4gdHJhbnNmb3JtTmVzdGVkSnNvblRhYmxlQ29sdW1uKGN4 dCwganRjLCBwbGFuKTsKK30KKworLyogQ2hlY2sgd2hldGhlciB0eXBlIGlzIGpzb24vanNv bmIsIGFycmF5LCBvciByZWNvcmQuICovCitzdGF0aWMgYm9vbAordHlwZUlzQ29tcG9zaXRl KE9pZCB0eXBpZCkKK3sKKwljaGFyCQl0eXB0eXBlOworCisJaWYgKHR5cGlkID09IEpTT05P SUQgfHwKKwkJdHlwaWQgPT0gSlNPTkJPSUQgfHwKKwkJdHlwaWQgPT0gUkVDT1JET0lEIHx8 CisJCXR5cGVfaXNfYXJyYXkodHlwaWQpKQorCQlyZXR1cm4gdHJ1ZTsKKworCXR5cHR5cGUg PSBnZXRfdHlwdHlwZSh0eXBpZCk7CisKKwlpZiAodHlwdHlwZSA9PSBUWVBUWVBFX0NPTVBP U0lURSkKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAodHlwdHlwZSA9PSBUWVBUWVBFX0RPTUFJ TikKKwkJcmV0dXJuIHR5cGVJc0NvbXBvc2l0ZShnZXRCYXNlVHlwZSh0eXBpZCkpOworCisJ cmV0dXJuIGZhbHNlOworfQorCisvKiBBcHBlbmQgdHJhbnNmb3JtZWQgbm9uLW5lc3RlZCBK U09OX1RBQkxFIGNvbHVtbnMgdG8gdGhlIFRhYmxlRnVuYyBub2RlICovCitzdGF0aWMgdm9p ZAorYXBwZW5kSnNvblRhYmxlQ29sdW1ucyhKc29uVGFibGVQYXJzZUNvbnRleHQgKmN4dCwg TGlzdCAqY29sdW1ucykKK3sKKwlMaXN0Q2VsbCAgICpjb2w7CisJUGFyc2VTdGF0ZSAqcHN0 YXRlID0gY3h0LT5wc3RhdGU7CisJSnNvblRhYmxlICAqanQgPSBjeHQtPnRhYmxlOworCVRh YmxlRnVuYyAgKnRmID0gY3h0LT50YWJsZWZ1bmM7CisJYm9vbAkJZXJyb3JPbkVycm9yID0g anQtPm9uX2Vycm9yICYmCisJanQtPm9uX2Vycm9yLT5idHlwZSA9PSBKU09OX0JFSEFWSU9S X0VSUk9SOworCisJZm9yZWFjaChjb2wsIGNvbHVtbnMpCisJeworCQlKc29uVGFibGVDb2x1 bW4gKnJhd2MgPSBjYXN0Tm9kZShKc29uVGFibGVDb2x1bW4sIGxmaXJzdChjb2wpKTsKKwkJ T2lkCQkJdHlwaWQ7CisJCWludDMyCQl0eXBtb2Q7CisJCU5vZGUJICAgKmNvbGV4cHI7CisK KwkJaWYgKHJhd2MtPm5hbWUpCisJCXsKKwkJCS8qIG1ha2Ugc3VyZSBjb2x1bW4gbmFtZXMg YXJlIHVuaXF1ZSAqLworCQkJTGlzdENlbGwgICAqY29sbmFtZTsKKworCQkJZm9yZWFjaChj b2xuYW1lLCB0Zi0+Y29sbmFtZXMpCisJCQkJaWYgKCFzdHJjbXAoKGNvbnN0IGNoYXIgKikg Y29sbmFtZSwgcmF3Yy0+bmFtZSkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJj b2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJCSBlcnJtc2coImNvbHVtbiBuYW1l IFwiJXNcIiBpcyBub3QgdW5pcXVlIiwKKwkJCQkJCQkJcmF3Yy0+bmFtZSksCisJCQkJCQkg cGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgcmF3Yy0+bG9jYXRpb24pKSk7CisKKwkJCXRm LT5jb2xuYW1lcyA9IGxhcHBlbmQodGYtPmNvbG5hbWVzLAorCQkJCQkJCQkgICBtYWtlU3Ry aW5nKHBzdHJkdXAocmF3Yy0+bmFtZSkpKTsKKwkJfQorCisJCS8qCisJCSAqIERldGVybWlu ZSB0aGUgdHlwZSBhbmQgdHlwbW9kIGZvciB0aGUgbmV3IGNvbHVtbi4gRk9SIE9SRElOQUxJ VFkKKwkJICogY29sdW1ucyBhcmUgSU5URUdFUiBieSBzdGFuZGFyZDsgdGhlIG90aGVycyBh cmUgdXNlci1zcGVjaWZpZWQuCisJCSAqLworCQlzd2l0Y2ggKHJhd2MtPmNvbHR5cGUpCisJ CXsKKwkJCWNhc2UgSlRDX0ZPUl9PUkRJTkFMSVRZOgorCQkJCWNvbGV4cHIgPSBOVUxMOwor CQkJCXR5cGlkID0gSU5UNE9JRDsKKwkJCQl0eXBtb2QgPSAtMTsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBKVENfUkVHVUxBUjoKKwkJCQl0eXBlbmFtZVR5cGVJZEFuZE1vZChwc3RhdGUs IHJhd2MtPnR5cGVOYW1lLCAmdHlwaWQsICZ0eXBtb2QpOworCisJCQkJLyoKKwkJCQkgKiBV c2UgaW1wbGljaXQgRk9STUFUIEpTT04gZm9yIGNvbXBvc2l0ZSB0eXBlcyAoYXJyYXlzIGFu ZAorCQkJCSAqIHJlY29yZHMpCisJCQkJICovCisJCQkJaWYgKHR5cGVJc0NvbXBvc2l0ZSh0 eXBpZCkpCisJCQkJCXJhd2MtPmNvbHR5cGUgPSBKVENfRk9STUFUVEVEOworCQkJCWVsc2Ug aWYgKHJhd2MtPndyYXBwZXIgIT0gSlNXX05PTkUpCisJCQkJCWVyZXBvcnQoRVJST1IsCisJ CQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkJCSBlcnJtc2co ImNhbm5vdCB1c2UgV0lUSCBXUkFQUEVSIGNsYXVzZSB3aXRoIHNjYWxhciBjb2x1bW5zIiks CisJCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIHJhd2MtPmxvY2F0aW9uKSkp OworCQkJCWVsc2UgaWYgKHJhd2MtPm9taXRfcXVvdGVzKQorCQkJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJCQkgZXJy bXNnKCJjYW5ub3QgdXNlIE9NSVQgUVVPVEVTIGNsYXVzZSB3aXRoIHNjYWxhciBjb2x1bW5z IiksCisJCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIHJhd2MtPmxvY2F0aW9u KSkpOworCisJCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJCWNhc2UgSlRDX0VYSVNUUzoKKwkJ CWNhc2UgSlRDX0ZPUk1BVFRFRDoKKwkJCQl7CisJCQkJCU5vZGUJICAgKmplOworCQkJCQlD YXNlVGVzdEV4cHIgKnBhcmFtID0gbWFrZU5vZGUoQ2FzZVRlc3RFeHByKTsKKworCQkJCQlw YXJhbS0+Y29sbGF0aW9uID0gSW52YWxpZE9pZDsKKwkJCQkJcGFyYW0tPnR5cGVJZCA9IGN4 dC0+Y29udGV4dEl0ZW1UeXBpZDsKKwkJCQkJcGFyYW0tPnR5cGVNb2QgPSAtMTsKKworCQkJ CQlqZSA9IHRyYW5zZm9ybUpzb25UYWJsZUNvbHVtbihyYXdjLCAoTm9kZSAqKSBwYXJhbSwK KwkJCQkJCQkJCQkJCSAgTklMLCBlcnJvck9uRXJyb3IpOworCisJCQkJCWNvbGV4cHIgPSB0 cmFuc2Zvcm1FeHByKHBzdGF0ZSwgamUsIEVYUFJfS0lORF9GUk9NX0ZVTkNUSU9OKTsKKwkJ CQkJYXNzaWduX2V4cHJfY29sbGF0aW9ucyhwc3RhdGUsIGNvbGV4cHIpOworCisJCQkJCXR5 cGlkID0gZXhwclR5cGUoY29sZXhwcik7CisJCQkJCXR5cG1vZCA9IGV4cHJUeXBtb2QoY29s ZXhwcik7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJY2FzZSBKVENfTkVTVEVEOgorCQkJ CWNvbnRpbnVlOworCisJCQlkZWZhdWx0OgorCQkJCWVsb2coRVJST1IsICJ1bmtub3duIEpT T05fVEFCTEUgY29sdW1uIHR5cGU6ICVkIiwgcmF3Yy0+Y29sdHlwZSk7CisJCQkJYnJlYWs7 CisJCX0KKworCQl0Zi0+Y29sdHlwZXMgPSBsYXBwZW5kX29pZCh0Zi0+Y29sdHlwZXMsIHR5 cGlkKTsKKwkJdGYtPmNvbHR5cG1vZHMgPSBsYXBwZW5kX2ludCh0Zi0+Y29sdHlwbW9kcywg dHlwbW9kKTsKKwkJdGYtPmNvbGNvbGxhdGlvbnMgPSBsYXBwZW5kX29pZCh0Zi0+Y29sY29s bGF0aW9ucywgZ2V0X3R5cGNvbGxhdGlvbih0eXBpZCkpOworCQl0Zi0+Y29sdmFsZXhwcnMg PSBsYXBwZW5kKHRmLT5jb2x2YWxleHBycywgY29sZXhwcik7CisJfQorfQorCisvKgorICog Q3JlYXRlIHRyYW5zZm9ybWVkIEpTT05fVEFCTEUgcGFyZW50IHBsYW4gbm9kZSBieSBhcHBl bmRpbmcgYWxsIG5vbi1uZXN0ZWQKKyAqIGNvbHVtbnMgdG8gdGhlIFRhYmxlRnVuYyBub2Rl IGFuZCByZW1lbWJlcmluZyB0aGVpciBpbmRpY2VzIGluIHRoZQorICogY29sdmFsZXhwcnMg bGlzdC4KKyAqLworc3RhdGljIEpzb25UYWJsZVBhcmVudCAqCittYWtlUGFyZW50SnNvblRh YmxlTm9kZShKc29uVGFibGVQYXJzZUNvbnRleHQgKmN4dCwgY2hhciAqcGF0aFNwZWMsIGNo YXIgKnBhdGhOYW1lLAorCQkJCQkJTGlzdCAqY29sdW1ucykKK3sKKwlKc29uVGFibGVQYXJl bnQgKm5vZGUgPSBtYWtlTm9kZShKc29uVGFibGVQYXJlbnQpOworCisJbm9kZS0+cGF0aCA9 IG1ha2VOb2RlKEpzb25UYWJsZVBhdGgpOworCW5vZGUtPnBhdGgtPnZhbHVlID0gbWFrZUNv bnN0KEpTT05QQVRIT0lELCAtMSwgSW52YWxpZE9pZCwgLTEsCisJCQkJCQkJCSBEaXJlY3RG dW5jdGlvbkNhbGwxKGpzb25wYXRoX2luLAorCQkJCQkJCQkJCQkJCSBDU3RyaW5nR2V0RGF0 dW0ocGF0aFNwZWMpKSwKKwkJCQkJCQkJIGZhbHNlLCBmYWxzZSk7CisJaWYgKHBhdGhOYW1l KQorCQlub2RlLT5wYXRoLT5uYW1lID0gcHN0cmR1cChwYXRoTmFtZSk7CisKKwkvKiBzYXZl IHN0YXJ0IG9mIGNvbHVtbiByYW5nZSAqLworCW5vZGUtPmNvbE1pbiA9IGxpc3RfbGVuZ3Ro KGN4dC0+dGFibGVmdW5jLT5jb2x2YWxleHBycyk7CisKKwlhcHBlbmRKc29uVGFibGVDb2x1 bW5zKGN4dCwgY29sdW1ucyk7CisKKwkvKiBzYXZlIGVuZCBvZiBjb2x1bW4gcmFuZ2UgKi8K Kwlub2RlLT5jb2xNYXggPSBsaXN0X2xlbmd0aChjeHQtPnRhYmxlZnVuYy0+Y29sdmFsZXhw cnMpIC0gMTsKKworCW5vZGUtPmVycm9yT25FcnJvciA9CisJCWN4dC0+dGFibGUtPm9uX2Vy cm9yICYmCisJCWN4dC0+dGFibGUtPm9uX2Vycm9yLT5idHlwZSA9PSBKU09OX0JFSEFWSU9S X0VSUk9SOworCisJcmV0dXJuIG5vZGU7Cit9CisKK3N0YXRpYyBKc29uVGFibGVQYXJlbnQg KgordHJhbnNmb3JtSnNvblRhYmxlQ29sdW1ucyhKc29uVGFibGVQYXJzZUNvbnRleHQgKmN4 dCwgSnNvblRhYmxlUGxhbiAqcGxhbiwKKwkJCQkJCSAgTGlzdCAqY29sdW1ucywgY2hhciAq cGF0aFNwZWMsIGNoYXIgKipwYXRoTmFtZSwKKwkJCQkJCSAgaW50IGxvY2F0aW9uKQorewor CUpzb25UYWJsZVBhcmVudCAqbm9kZTsKKwlKc29uVGFibGVQbGFuICpjaGlsZFBsYW47CisJ Ym9vbAkJZGVmYXVsdFBsYW4gPSAhcGxhbiB8fCBwbGFuLT5wbGFuX3R5cGUgPT0gSlNUUF9E RUZBVUxUOworCisJaWYgKCEqcGF0aE5hbWUpCisJeworCQlpZiAoY3h0LT50YWJsZS0+cGxh bikKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VS Uk9SKSwKKwkJCQkJIGVycm1zZygiaW52YWxpZCBKU09OX1RBQkxFIGV4cHJlc3Npb24iKSwK KwkJCQkJIGVycmRldGFpbCgiSlNPTl9UQUJMRSBjb2x1bW5zIG11c3QgY29udGFpbiAiCisJ CQkJCQkJICAgImV4cGxpY2l0IEFTIHBhdGhuYW1lIHNwZWNpZmljYXRpb24gaWYgIgorCQkJ CQkJCSAgICJleHBsaWNpdCBQTEFOIGNsYXVzZSBpcyB1c2VkIiksCisJCQkJCSBwYXJzZXJf ZXJycG9zaXRpb24oY3h0LT5wc3RhdGUsIGxvY2F0aW9uKSkpOworCisJCSpwYXRoTmFtZSA9 IGdlbmVyYXRlSnNvblRhYmxlUGF0aE5hbWUoY3h0KTsKKwl9CisKKwlpZiAoZGVmYXVsdFBs YW4pCisJCWNoaWxkUGxhbiA9IHBsYW47CisJZWxzZQorCXsKKwkJLyogdmFsaWRhdGUgcGFy ZW50IGFuZCBjaGlsZCBwbGFucyAqLworCQlKc29uVGFibGVQbGFuICpwYXJlbnRQbGFuOwor CisJCWlmIChwbGFuLT5wbGFuX3R5cGUgPT0gSlNUUF9KT0lORUQpCisJCXsKKwkJCWlmIChw bGFuLT5qb2luX3R5cGUgIT0gSlNUUEpfSU5ORVIgJiYKKwkJCQlwbGFuLT5qb2luX3R5cGUg IT0gSlNUUEpfT1VURVIpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVS UkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJCSBlcnJtc2coImludmFsaWQgSlNPTl9UQUJM RSBwbGFuIiksCisJCQkJCQkgZXJyZGV0YWlsKCJFeHBlY3RlZCBJTk5FUiBvciBPVVRFUiBK U09OX1RBQkxFIHBsYW4gbm9kZS4iKSwKKwkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24oY3h0 LT5wc3RhdGUsIHBsYW4tPmxvY2F0aW9uKSkpOworCisJCQlwYXJlbnRQbGFuID0gcGxhbi0+ cGxhbjE7CisJCQljaGlsZFBsYW4gPSBwbGFuLT5wbGFuMjsKKworCQkJQXNzZXJ0KHBhcmVu dFBsYW4tPnBsYW5fdHlwZSAhPSBKU1RQX0pPSU5FRCk7CisJCQlBc3NlcnQocGFyZW50UGxh bi0+cGF0aG5hbWUpOworCQl9CisJCWVsc2UKKwkJeworCQkJcGFyZW50UGxhbiA9IHBsYW47 CisJCQljaGlsZFBsYW4gPSBOVUxMOworCQl9CisKKwkJaWYgKHN0cmNtcChwYXJlbnRQbGFu LT5wYXRobmFtZSwgKnBhdGhOYW1lKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJj b2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJIGVycm1zZygiaW52YWxpZCBKU09O X1RBQkxFIHBsYW4iKSwKKwkJCQkJIGVycmRldGFpbCgiUGF0aCBuYW1lIG1pc21hdGNoOiBl eHBlY3RlZCAlcyBidXQgJXMgaXMgZ2l2ZW4uIiwKKwkJCQkJCQkgICAqcGF0aE5hbWUsIHBh cmVudFBsYW4tPnBhdGhuYW1lKSwKKwkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihjeHQtPnBz dGF0ZSwgcGxhbi0+bG9jYXRpb24pKSk7CisKKwkJdmFsaWRhdGVKc29uVGFibGVDaGlsZFBs YW4oY3h0LT5wc3RhdGUsIGNoaWxkUGxhbiwgY29sdW1ucyk7CisJfQorCisJLyogdHJhbnNm b3JtIG9ubHkgbm9uLW5lc3RlZCBjb2x1bW5zICovCisJbm9kZSA9IG1ha2VQYXJlbnRKc29u VGFibGVOb2RlKGN4dCwgcGF0aFNwZWMsICpwYXRoTmFtZSwgY29sdW1ucyk7CisKKwlpZiAo Y2hpbGRQbGFuIHx8IGRlZmF1bHRQbGFuKQorCXsKKwkJLyogdHJhbnNmb3JtIHJlY3Vyc2l2 ZWx5IG5lc3RlZCBjb2x1bW5zICovCisJCW5vZGUtPmNoaWxkID0gdHJhbnNmb3JtSnNvblRh YmxlQ2hpbGRQbGFuKGN4dCwgY2hpbGRQbGFuLCBjb2x1bW5zKTsKKwkJaWYgKG5vZGUtPmNo aWxkKQorCQkJbm9kZS0+b3V0ZXJKb2luID0gIXBsYW4gfHwgKHBsYW4tPmpvaW5fdHlwZSAm IEpTVFBKX09VVEVSKTsKKwkJLyogZWxzZTogZGVmYXVsdCBwbGFuIGNhc2UsIG5vIGNoaWxk cmVuIGZvdW5kICovCisJfQorCisJcmV0dXJuIG5vZGU7Cit9CisKKy8qCisgKiB0cmFuc2Zv cm1Kc29uVGFibGUgLQorICoJCQlUcmFuc2Zvcm0gYSByYXcgSnNvblRhYmxlIGludG8gVGFi bGVGdW5jLgorICoKKyAqIFRyYW5zZm9ybSB0aGUgZG9jdW1lbnQtZ2VuZXJhdGluZyBleHBy ZXNzaW9uLCB0aGUgcm93LWdlbmVyYXRpbmcgZXhwcmVzc2lvbiwKKyAqIHRoZSBjb2x1bW4t Z2VuZXJhdGluZyBleHByZXNzaW9ucywgYW5kIHRoZSBkZWZhdWx0IHZhbHVlIGV4cHJlc3Np b25zLgorICovCitQYXJzZU5hbWVzcGFjZUl0ZW0gKgordHJhbnNmb3JtSnNvblRhYmxlKFBh cnNlU3RhdGUgKnBzdGF0ZSwgSnNvblRhYmxlICpqdCkKK3sKKwlKc29uVGFibGVQYXJzZUNv bnRleHQgY3h0OworCVRhYmxlRnVuYyAgKnRmID0gbWFrZU5vZGUoVGFibGVGdW5jKTsKKwlK c29uRnVuY0V4cHIgKmpmZSA9IG1ha2VOb2RlKEpzb25GdW5jRXhwcik7CisJSnNvbkV4cHIg ICAqamU7CisJSnNvblRhYmxlUGxhbiAqcGxhbiA9IGp0LT5wbGFuOworCUpzb25Db21tb24g KmpzY29tbW9uOworCWNoYXIJICAgKnJvb3RQYXRoTmFtZSA9IGp0LT5jb21tb24tPnBhdGhu YW1lOworCWNoYXIJICAgKnJvb3RQYXRoOworCWJvb2wJCWlzX2xhdGVyYWw7CisKKwljeHQu cHN0YXRlID0gcHN0YXRlOworCWN4dC50YWJsZSA9IGp0OworCWN4dC50YWJsZWZ1bmMgPSB0 ZjsKKwljeHQucGF0aE5hbWVzID0gTklMOworCWN4dC5wYXRoTmFtZUlkID0gMDsKKworCWlm IChyb290UGF0aE5hbWUpCisJCXJlZ2lzdGVySnNvblRhYmxlQ29sdW1uKCZjeHQsIHJvb3RQ YXRoTmFtZSk7CisKKwlyZWdpc3RlckFsbEpzb25UYWJsZUNvbHVtbnMoJmN4dCwganQtPmNv bHVtbnMpOworCisjaWYgMAkJCQkJCQkvKiBYWFggaXQnIHVuY2xlYXIgZnJvbSB0aGUgc3Rh bmRhcmQgd2hldGhlcgorCQkJCQkJCQkgKiByb290IHBhdGggbmFtZSBpcyBtYW5kYXRvcnkg b3Igbm90ICovCisJaWYgKHBsYW4gJiYgcGxhbi0+cGxhbl90eXBlICE9IEpTVFBfREVGQVVM VCAmJiAhcm9vdFBhdGhOYW1lKQorCXsKKwkJLyogQXNzaWduIHJvb3QgcGF0aCBuYW1lIGFu ZCBjcmVhdGUgY29ycmVzcG9uZGluZyBwbGFuIG5vZGUgKi8KKwkJSnNvblRhYmxlUGxhbiAq cm9vdE5vZGUgPSBtYWtlTm9kZShKc29uVGFibGVQbGFuKTsKKwkJSnNvblRhYmxlUGxhbiAq cm9vdFBsYW4gPSAoSnNvblRhYmxlUGxhbiAqKQorCQltYWtlSnNvblRhYmxlSm9pbmVkUGxh bihKU1RQSl9PVVRFUiwgKE5vZGUgKikgcm9vdE5vZGUsCisJCQkJCQkJCShOb2RlICopIHBs YW4sIGp0LT5sb2NhdGlvbik7CisKKwkJcm9vdFBhdGhOYW1lID0gZ2VuZXJhdGVKc29uVGFi bGVQYXRoTmFtZSgmY3h0KTsKKworCQlyb290Tm9kZS0+cGxhbl90eXBlID0gSlNUUF9TSU1Q TEU7CisJCXJvb3ROb2RlLT5wYXRobmFtZSA9IHJvb3RQYXRoTmFtZTsKKworCQlwbGFuID0g cm9vdFBsYW47CisJfQorI2VuZGlmCisKKwlqc2NvbW1vbiA9IGNvcHlPYmplY3QoanQtPmNv bW1vbik7CisJanNjb21tb24tPnBhdGhzcGVjID0gbWFrZVN0cmluZ0NvbnN0KHBzdHJkdXAo IiQiKSwgLTEpOworCisJamZlLT5vcCA9IEpTT05fVEFCTEVfT1A7CisJamZlLT5jb21tb24g PSBqc2NvbW1vbjsKKwlqZmUtPm9uX2Vycm9yID0ganQtPm9uX2Vycm9yOworCWpmZS0+bG9j YXRpb24gPSBqdC0+Y29tbW9uLT5sb2NhdGlvbjsKKworCS8qCisJICogV2UgbWFrZSBsYXRl cmFsX29ubHkgbmFtZXMgb2YgdGhpcyBsZXZlbCB2aXNpYmxlLCB3aGV0aGVyIG9yIG5vdCB0 aGUKKwkgKiBSYW5nZVRhYmxlRnVuYyBpcyBleHBsaWNpdGx5IG1hcmtlZCBMQVRFUkFMLiAg VGhpcyBpcyBuZWVkZWQgZm9yIFNRTAorCSAqIHNwZWMgY29tcGxpYW5jZSBhbmQgc2VlbXMg dXNlZnVsIG9uIGNvbnZlbmllbmNlIGdyb3VuZHMgZm9yIGFsbAorCSAqIGZ1bmN0aW9ucyBp biBGUk9NLgorCSAqCisJICogKExBVEVSQUwgY2FuJ3QgbmVzdCB3aXRoaW4gYSBzaW5nbGUg cHN0YXRlIGxldmVsLCBzbyB3ZSBkb24ndCBuZWVkCisJICogc2F2ZS9yZXN0b3JlIGxvZ2lj IGhlcmUuKQorCSAqLworCUFzc2VydCghcHN0YXRlLT5wX2xhdGVyYWxfYWN0aXZlKTsKKwlw c3RhdGUtPnBfbGF0ZXJhbF9hY3RpdmUgPSB0cnVlOworCisJdGYtPmZ1bmN0eXBlID0gVEZU X0pTT05fVEFCTEU7CisJdGYtPmRvY2V4cHIgPSB0cmFuc2Zvcm1FeHByKHBzdGF0ZSwgKE5v ZGUgKikgamZlLCBFWFBSX0tJTkRfRlJPTV9GVU5DVElPTik7CisKKwljeHQuY29udGV4dEl0 ZW1UeXBpZCA9IGV4cHJUeXBlKHRmLT5kb2NleHByKTsKKworCWlmICghSXNBKGp0LT5jb21t b24tPnBhdGhzcGVjLCBBX0NvbnN0KSB8fAorCQljYXN0Tm9kZShBX0NvbnN0LCBqdC0+Y29t bW9uLT5wYXRoc3BlYyktPnZhbC5ub2RlLnR5cGUgIT0gVF9TdHJpbmcpCisJCWVyZXBvcnQo RVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAor CQkJCSBlcnJtc2coIm9ubHkgc3RyaW5nIGNvbnN0YW50cyBzdXBwb3J0ZWQgaW4gSlNPTl9U QUJMRSBwYXRoIHNwZWNpZmljYXRpb24iKSwKKwkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBz dGF0ZSwKKwkJCQkJCQkJCWV4cHJMb2NhdGlvbihqdC0+Y29tbW9uLT5wYXRoc3BlYykpKSk7 CisKKwlyb290UGF0aCA9IGNhc3ROb2RlKEFfQ29uc3QsIGp0LT5jb21tb24tPnBhdGhzcGVj KS0+dmFsLnN2YWwuc3ZhbDsKKworCXRmLT5wbGFuID0gKE5vZGUgKikgdHJhbnNmb3JtSnNv blRhYmxlQ29sdW1ucygmY3h0LCBwbGFuLCBqdC0+Y29sdW1ucywKKwkJCQkJCQkJCQkJCSAg cm9vdFBhdGgsICZyb290UGF0aE5hbWUsCisJCQkJCQkJCQkJCQkgIGp0LT5jb21tb24tPmxv Y2F0aW9uKTsKKworCS8qIEFsc28gc2F2ZSBhIGNvcHkgb2YgdGhlIFBBU1NJTkcgYXJndW1l bnRzIGluIHRoZSBUYWJsZUZ1bmMgbm9kZS4gKi8KKwlqZSA9IChKc29uRXhwciAqKSB0Zi0+ ZG9jZXhwcjsKKwl0Zi0+cGFzc2luZ3ZhbGV4cHJzID0gY29weU9iamVjdChqZS0+cGFzc2lu Z192YWx1ZXMpOworCisJdGYtPm9yZGluYWxpdHljb2wgPSAtMTsJCS8qIHVuZGVmaW5lIG9y ZGluYWxpdHkgY29sdW1uIG51bWJlciAqLworCXRmLT5sb2NhdGlvbiA9IGp0LT5sb2NhdGlv bjsKKworCXBzdGF0ZS0+cF9sYXRlcmFsX2FjdGl2ZSA9IGZhbHNlOworCisJLyoKKwkgKiBN YXJrIHRoZSBSVEUgYXMgTEFURVJBTCBpZiB0aGUgdXNlciBzYWlkIExBVEVSQUwgZXhwbGlj aXRseSwgb3IgaWYKKwkgKiB0aGVyZSBhcmUgYW55IGxhdGVyYWwgY3Jvc3MtcmVmZXJlbmNl cyBpbiBpdC4KKwkgKi8KKwlpc19sYXRlcmFsID0ganQtPmxhdGVyYWwgfHwgY29udGFpbl92 YXJzX29mX2xldmVsKChOb2RlICopIHRmLCAwKTsKKworCXJldHVybiBhZGRSYW5nZVRhYmxl RW50cnlGb3JUYWJsZUZ1bmMocHN0YXRlLAorCQkJCQkJCQkJCSAgdGYsIGp0LT5hbGlhcywg aXNfbGF0ZXJhbCwgdHJ1ZSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIv cGFyc2VfcmVsYXRpb24uYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9yZWxhdGlvbi5j CmluZGV4IDQxZDYwNDk0YjkuLjdkYTQyYzQ3NzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3BhcnNlci9wYXJzZV9yZWxhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV9yZWxhdGlvbi5jCkBAIC0yMDcyLDcgKzIwNzIsOCBAQCBhZGRSYW5nZVRhYmxlRW50cnlG b3JUYWJsZUZ1bmMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCUFzc2VydChsaXN0X2xlbmd0aCh0 Zi0+Y29sdHlwbW9kcykgPT0gbGlzdF9sZW5ndGgodGYtPmNvbG5hbWVzKSk7CiAJQXNzZXJ0 KGxpc3RfbGVuZ3RoKHRmLT5jb2xjb2xsYXRpb25zKSA9PSBsaXN0X2xlbmd0aCh0Zi0+Y29s bmFtZXMpKTsKIAotCXJlZm5hbWUgPSBhbGlhcyA/IGFsaWFzLT5hbGlhc25hbWUgOiBwc3Ry ZHVwKCJ4bWx0YWJsZSIpOworCXJlZm5hbWUgPSBhbGlhcyA/IGFsaWFzLT5hbGlhc25hbWUg OgorCQlwc3RyZHVwKHRmLT5mdW5jdHlwZSA9PSBURlRfWE1MVEFCTEUgPyAieG1sdGFibGUi IDogImpzb25fdGFibGUiKTsKIAogCXJ0ZS0+cnRla2luZCA9IFJURV9UQUJMRUZVTkM7CiAJ cnRlLT5yZWxpZCA9IEludmFsaWRPaWQ7CkBAIC0yMDk1LDcgKzIwOTYsNyBAQCBhZGRSYW5n ZVRhYmxlRW50cnlGb3JUYWJsZUZ1bmMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQllcmVwb3J0 KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9DT0xVTU5fUkVGRVJFTkNF KSwKIAkJCQkgZXJybXNnKCIlcyBmdW5jdGlvbiBoYXMgJWQgY29sdW1ucyBhdmFpbGFibGUg YnV0ICVkIGNvbHVtbnMgc3BlY2lmaWVkIiwKLQkJCQkJCSJYTUxUQUJMRSIsCisJCQkJCQl0 Zi0+ZnVuY3R5cGUgPT0gVEZUX1hNTFRBQkxFID8gIlhNTFRBQkxFIiA6ICJKU09OX1RBQkxF IiwKIAkJCQkJCWxpc3RfbGVuZ3RoKHRmLT5jb2xuYW1lcyksIG51bWFsaWFzZXMpKSk7CiAK IAlydGUtPmVyZWYgPSBlcmVmOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3Bh cnNlX3RhcmdldC5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jCmluZGV4 IDM0ZTcwOTRhY2YuLmFjN2ViZjA0NjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNl ci9wYXJzZV90YXJnZXQuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdGFyZ2V0 LmMKQEAgLTE5NDQsNiArMTk0NCw5IEBAIEZpZ3VyZUNvbG5hbWVJbnRlcm5hbChOb2RlICpu b2RlLCBjaGFyICoqbmFtZSkKIAkJCQljYXNlIEpTT05fRVhJU1RTX09QOgogCQkJCQkqbmFt ZSA9ICJqc29uX2V4aXN0cyI7CiAJCQkJCXJldHVybiAyOworCQkJCWNhc2UgSlNPTl9UQUJM RV9PUDoKKwkJCQkJKm5hbWUgPSAianNvbl90YWJsZSI7CisJCQkJCXJldHVybiAyOwogCQkJ fQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9hZHQvanNvbnBhdGhfZXhlYy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRo X2V4ZWMuYwppbmRleCA5Yjg3YWRkYmM1Li44NGYxMjM4MTkwIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9qc29ucGF0aF9leGVjLmMKQEAgLTYxLDEwICs2MSwxMiBAQAogCiAjaW5jbHVk ZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUu aCIKKyNpbmNsdWRlICJleGVjdXRvci9leGVjRXhwci5oIgogI2luY2x1ZGUgImZ1bmNhcGku aCIKICNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgogI2luY2x1ZGUgIm5vZGVzL21pc2Nub2Rlcy5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVG dW5jcy5oIgogI2luY2x1ZGUgInJlZ2V4L3JlZ2V4LmgiCiAjaW5jbHVkZSAidXRpbHMvYnVp bHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXRlLmgiCkBAIC03NSw2ICs3Nyw4IEBACiAj aW5jbHVkZSAidXRpbHMvZ3VjLmgiCiAjaW5jbHVkZSAidXRpbHMvanNvbi5oIgogI2luY2x1 ZGUgInV0aWxzL2pzb25wYXRoLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisj aW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAu aCIKICNpbmNsdWRlICJ1dGlscy92YXJsZW5hLmgiCiAKQEAgLTE1Niw2ICsxNjAsNjEgQEAg dHlwZWRlZiBzdHJ1Y3QgSnNvblZhbHVlTGlzdEl0ZXJhdG9yCiAJTGlzdENlbGwgICAqbmV4 dDsKIH0gSnNvblZhbHVlTGlzdEl0ZXJhdG9yOwogCisvKiBTdHJ1Y3R1cmVzIGZvciBKU09O X1RBQkxFIGV4ZWN1dGlvbiAgKi8KKwordHlwZWRlZiBlbnVtIEpzb25UYWJsZVBsYW5TdGF0 ZVR5cGUKK3sKKwlKU09OX1RBQkxFX1NDQU5fU1RBVEUgPSAwLAorCUpTT05fVEFCTEVfSk9J Tl9TVEFURQorfSBKc29uVGFibGVQbGFuU3RhdGVUeXBlOworCit0eXBlZGVmIHN0cnVjdCBK c29uVGFibGVQbGFuU3RhdGUKK3sKKwlKc29uVGFibGVQbGFuU3RhdGVUeXBlCXR5cGU7CisK KwlzdHJ1Y3QgSnNvblRhYmxlUGxhblN0YXRlICpwYXJlbnQ7CisJc3RydWN0IEpzb25UYWJs ZVBsYW5TdGF0ZSAqbmVzdGVkOworfSBKc29uVGFibGVQbGFuU3RhdGU7CisKK3R5cGVkZWYg c3RydWN0IEpzb25UYWJsZVNjYW5TdGF0ZQoreworCUpzb25UYWJsZVBsYW5TdGF0ZQlwbGFu OworCisJTWVtb3J5Q29udGV4dCBtY3h0OworCUpzb25QYXRoICAgKnBhdGg7CisJTGlzdAkg ICAqYXJnczsKKwlKc29uVmFsdWVMaXN0IGZvdW5kOworCUpzb25WYWx1ZUxpc3RJdGVyYXRv ciBpdGVyOworCURhdHVtCQljdXJyZW50OworCWludAkJCW9yZGluYWw7CisJYm9vbAkJY3Vy cmVudElzTnVsbDsKKwlib29sCQlvdXRlckpvaW47CisJYm9vbAkJZXJyb3JPbkVycm9yOwor CWJvb2wJCWFkdmFuY2VOZXN0ZWQ7CisJYm9vbAkJcmVzZXQ7Cit9IEpzb25UYWJsZVNjYW5T dGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgSnNvblRhYmxlSm9pblN0YXRlCit7CisJSnNvblRh YmxlUGxhblN0YXRlCXBsYW47CisKKwlKc29uVGFibGVQbGFuU3RhdGUgKmxlZnQ7CisJSnNv blRhYmxlUGxhblN0YXRlICpyaWdodDsKKwlib29sCQljcm9zczsKKwlib29sCQlhZHZhbmNl UmlnaHQ7Cit9IEpzb25UYWJsZUpvaW5TdGF0ZTsKKworLyogcmFuZG9tIG51bWJlciB0byBp ZGVudGlmeSBKc29uVGFibGVFeGVjQ29udGV4dCAqLworI2RlZmluZSBKU09OX1RBQkxFX0VY RUNfQ09OVEVYVF9NQUdJQwkJNDE4MzUyODY3CisKK3R5cGVkZWYgc3RydWN0IEpzb25UYWJs ZUV4ZWNDb250ZXh0Cit7CisJaW50CQkJbWFnaWM7CisJSnNvblRhYmxlU2NhblN0YXRlICoq Y29sZXhwcnNjYW5zOworCUpzb25UYWJsZVNjYW5TdGF0ZSAqcm9vdDsKKwlib29sCQllbXB0 eTsKK30gSnNvblRhYmxlRXhlY0NvbnRleHQ7CisKIC8qIHN0cmljdC9sYXggZmxhZ3MgaXMg ZGVjb21wb3NlZCBpbnRvIGZvdXIgW3VuXXdyYXAvZXJyb3IgZmxhZ3MgKi8KICNkZWZpbmUg anNwU3RyaWN0QWJzZW5zZU9mRXJyb3JzKGN4dCkJKCEoY3h0KS0+bGF4TW9kZSkKICNkZWZp bmUganNwQXV0b1Vud3JhcChjeHQpCQkJCSgoY3h0KS0+bGF4TW9kZSkKQEAgLTI0OCw2ICsz MDcsNyBAQCBzdGF0aWMgSnNvblBhdGhFeGVjUmVzdWx0IGdldEFycmF5SW5kZXgoSnNvblBh dGhFeGVjQ29udGV4dCAqY3h0LAogCQkJCQkJCQkJCUpzb25QYXRoSXRlbSAqanNwLCBKc29u YlZhbHVlICpqYiwgaW50MzIgKmluZGV4KTsKIHN0YXRpYyBKc29uQmFzZU9iamVjdEluZm8g c2V0QmFzZU9iamVjdChKc29uUGF0aEV4ZWNDb250ZXh0ICpjeHQsCiAJCQkJCQkJCQkJSnNv bmJWYWx1ZSAqamJ2LCBpbnQzMiBpZCk7CitzdGF0aWMgdm9pZCBKc29uVmFsdWVMaXN0Q2xl YXIoSnNvblZhbHVlTGlzdCAqanZsKTsKIHN0YXRpYyB2b2lkIEpzb25WYWx1ZUxpc3RBcHBl bmQoSnNvblZhbHVlTGlzdCAqanZsLCBKc29uYlZhbHVlICpqYnYpOwogc3RhdGljIGludAlK c29uVmFsdWVMaXN0TGVuZ3RoKGNvbnN0IEpzb25WYWx1ZUxpc3QgKmp2bCk7CiBzdGF0aWMg Ym9vbCBKc29uVmFsdWVMaXN0SXNFbXB0eShKc29uVmFsdWVMaXN0ICpqdmwpOwpAQCAtMjY1 LDYgKzMyNSwxNCBAQCBzdGF0aWMgSnNvbmJWYWx1ZSAqd3JhcEl0ZW1zSW5BcnJheShjb25z dCBKc29uVmFsdWVMaXN0ICppdGVtcyk7CiBzdGF0aWMgaW50CWNvbXBhcmVEYXRldGltZShE YXR1bSB2YWwxLCBPaWQgdHlwaWQxLCBEYXR1bSB2YWwyLCBPaWQgdHlwaWQyLAogCQkJCQkJ CWJvb2wgdXNlVHosIGJvb2wgKmNhc3RfZXJyb3IpOwogCisKK3N0YXRpYyBKc29uVGFibGVQ bGFuU3RhdGUgKkpzb25UYWJsZUluaXRQbGFuU3RhdGUoSnNvblRhYmxlRXhlY0NvbnRleHQg KmN4dCwKKwkJCQkJCQkJCQkJCSAgTm9kZSAqcGxhbiwKKwkJCQkJCQkJCQkJCSAgSnNvblRh YmxlUGxhblN0YXRlICpwYXJlbnQpOworc3RhdGljIGJvb2wgSnNvblRhYmxlUGxhbk5leHRS b3coSnNvblRhYmxlUGxhblN0YXRlICpzdGF0ZSk7CitzdGF0aWMgYm9vbCBKc29uVGFibGVT Y2FuTmV4dFJvdyhKc29uVGFibGVTY2FuU3RhdGUgKnNjYW4pOworCisKIC8qKioqKioqKioq KioqKioqKiogVXNlciBpbnRlcmZhY2UgdG8gSnNvblBhdGggZXhlY3V0b3IgKioqKioqKioq KioqKioqKioqKiovCiAKIC8qCkBAIC0yNTA5LDYgKzI1NzcsMTMgQEAgc2V0QmFzZU9iamVj dChKc29uUGF0aEV4ZWNDb250ZXh0ICpjeHQsIEpzb25iVmFsdWUgKmpidiwgaW50MzIgaWQp CiAJcmV0dXJuIGJhc2VPYmplY3Q7CiB9CiAKK3N0YXRpYyB2b2lkCitKc29uVmFsdWVMaXN0 Q2xlYXIoSnNvblZhbHVlTGlzdCAqanZsKQoreworCWp2bC0+c2luZ2xldG9uID0gTlVMTDsK KwlqdmwtPmxpc3QgPSBOVUxMOworfQorCiBzdGF0aWMgdm9pZAogSnNvblZhbHVlTGlzdEFw cGVuZChKc29uVmFsdWVMaXN0ICpqdmwsIEpzb25iVmFsdWUgKmpidikKIHsKQEAgLTMxMTgs MyArMzE5Myw0NzEgQEAgSnNvbkl0ZW1Gcm9tRGF0dW0oRGF0dW0gdmFsLCBPaWQgdHlwaWQs IGludDMyIHR5cG1vZCwgSnNvbmJWYWx1ZSAqcmVzKQogCQkJCQkJCSJjYXN0ZWQgdG8gc3Vw cG9ydGVkIGpzb25wYXRoIHR5cGVzLiIpKSk7CiAJfQogfQorCisvKioqKioqKioqKioqKioq KioqKioqKioqIEpTT05fVEFCTEUgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioq KioqKi8KKworLyoKKyAqIFJldHVybnMgcHJpdmF0ZSBkYXRhIGZyb20gZXhlY3V0b3Igc3Rh dGUuIEVuc3VyZSB2YWxpZGl0eSBieSBjaGVjayB3aXRoCisgKiBNQUdJQyBudW1iZXIuCisg Ki8KK3N0YXRpYyBpbmxpbmUgSnNvblRhYmxlRXhlY0NvbnRleHQgKgorR2V0SnNvblRhYmxl RXhlY0NvbnRleHQoVGFibGVGdW5jU2NhblN0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqZm5h bWUpCit7CisJSnNvblRhYmxlRXhlY0NvbnRleHQgKnJlc3VsdDsKKworCWlmICghSXNBKHN0 YXRlLCBUYWJsZUZ1bmNTY2FuU3RhdGUpKQorCQllbG9nKEVSUk9SLCAiJXMgY2FsbGVkIHdp dGggaW52YWxpZCBUYWJsZUZ1bmNTY2FuU3RhdGUiLCBmbmFtZSk7CisJcmVzdWx0ID0gKEpz b25UYWJsZUV4ZWNDb250ZXh0ICopIHN0YXRlLT5vcGFxdWU7CisJaWYgKHJlc3VsdC0+bWFn aWMgIT0gSlNPTl9UQUJMRV9FWEVDX0NPTlRFWFRfTUFHSUMpCisJCWVsb2coRVJST1IsICIl cyBjYWxsZWQgd2l0aCBpbnZhbGlkIFRhYmxlRnVuY1NjYW5TdGF0ZSIsIGZuYW1lKTsKKwor CXJldHVybiByZXN1bHQ7Cit9CisKKy8qIFJlY3Vyc2l2ZWx5IGluaXRpYWxpemUgSlNPTl9U QUJMRSBzY2FuIC8gam9pbiBzdGF0ZSAqLworc3RhdGljIEpzb25UYWJsZUpvaW5TdGF0ZSAq CitKc29uVGFibGVJbml0Sm9pblN0YXRlKEpzb25UYWJsZUV4ZWNDb250ZXh0ICpjeHQsIEpz b25UYWJsZVNpYmxpbmcgKnBsYW4sCisJCQkJCSAgIEpzb25UYWJsZVBsYW5TdGF0ZSAqcGFy ZW50KQoreworCUpzb25UYWJsZUpvaW5TdGF0ZSAqam9pbiA9IHBhbGxvYzAoc2l6ZW9mKCpq b2luKSk7CisKKwlqb2luLT5wbGFuLnR5cGUgPSBKU09OX1RBQkxFX0pPSU5fU1RBVEU7CisJ LyogcGFyZW50IGFuZCBuZXN0ZWQgbm90IHNldC4gKi8KKworCWpvaW4tPmNyb3NzID0gcGxh bi0+Y3Jvc3M7CisJam9pbi0+bGVmdCA9IEpzb25UYWJsZUluaXRQbGFuU3RhdGUoY3h0LCBw bGFuLT5sYXJnLCBwYXJlbnQpOworCWpvaW4tPnJpZ2h0ID0gSnNvblRhYmxlSW5pdFBsYW5T dGF0ZShjeHQsIHBsYW4tPnJhcmcsIHBhcmVudCk7CisKKwlyZXR1cm4gam9pbjsKK30KKwor c3RhdGljIEpzb25UYWJsZVNjYW5TdGF0ZSAqCitKc29uVGFibGVJbml0U2NhblN0YXRlKEpz b25UYWJsZUV4ZWNDb250ZXh0ICpjeHQsIEpzb25UYWJsZVBhcmVudCAqcGxhbiwKKwkJCQkJ ICAgSnNvblRhYmxlUGxhblN0YXRlICpwYXJlbnQsCisJCQkJCSAgIExpc3QgKmFyZ3MsIE1l bW9yeUNvbnRleHQgbWN4dCkKK3sKKwlKc29uVGFibGVTY2FuU3RhdGUgKnNjYW4gPSBwYWxs b2MwKHNpemVvZigqc2NhbikpOworCWludAkJCWk7CisKKwlzY2FuLT5wbGFuLnR5cGUgPSBK U09OX1RBQkxFX1NDQU5fU1RBVEU7CisJc2Nhbi0+cGxhbi5wYXJlbnQgPSBwYXJlbnQ7CisK KwlzY2FuLT5vdXRlckpvaW4gPSBwbGFuLT5vdXRlckpvaW47CisJc2Nhbi0+ZXJyb3JPbkVy cm9yID0gcGxhbi0+ZXJyb3JPbkVycm9yOworCXNjYW4tPnBhdGggPSBEYXR1bUdldEpzb25Q YXRoUChwbGFuLT5wYXRoLT52YWx1ZS0+Y29uc3R2YWx1ZSk7CisJc2Nhbi0+YXJncyA9IGFy Z3M7CisJc2Nhbi0+bWN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShtY3h0LCAiSnNvblRh YmxlRXhlY0NvbnRleHQiLAorCQkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7 CisKKwkvKgorCSAqIFNldCBhZnRlciBzZXR0aW5ncyBzY2FuLT5hcmdzIGFuZCBzY2FuLT5t Y3h0LCBiZWNhdXNlIHRoZSByZWN1cnNpdmUgY2FsbAorCSAqIHdhbnRzIHRvIHVzZSB0aG9z ZSB2YWx1ZXMuCisJICovCisJc2Nhbi0+cGxhbi5uZXN0ZWQgPSBwbGFuLT5jaGlsZCA/CisJ CUpzb25UYWJsZUluaXRQbGFuU3RhdGUoY3h0LCBwbGFuLT5jaGlsZCwgKEpzb25UYWJsZVBs YW5TdGF0ZSAqKSBzY2FuKSA6CisJCU5VTEw7CisKKwlzY2FuLT5jdXJyZW50ID0gUG9pbnRl ckdldERhdHVtKE5VTEwpOworCXNjYW4tPmN1cnJlbnRJc051bGwgPSB0cnVlOworCisJZm9y IChpID0gcGxhbi0+Y29sTWluOyBpIDw9IHBsYW4tPmNvbE1heDsgaSsrKQorCQljeHQtPmNv bGV4cHJzY2Fuc1tpXSA9IHNjYW47CisKKwlyZXR1cm4gc2NhbjsKK30KKworLyogUmVjdXJz aXZlbHkgaW5pdGlhbGl6ZSBKU09OX1RBQkxFIHNjYW4gc3RhdGUgKi8KK3N0YXRpYyBKc29u VGFibGVQbGFuU3RhdGUgKgorSnNvblRhYmxlSW5pdFBsYW5TdGF0ZShKc29uVGFibGVFeGVj Q29udGV4dCAqY3h0LCBOb2RlICpwbGFuLAorCQkJCQkgICBKc29uVGFibGVQbGFuU3RhdGUg KnBhcmVudCkKK3sKKwlKc29uVGFibGVQbGFuU3RhdGUgKnN0YXRlOworCisJaWYgKElzQShw bGFuLCBKc29uVGFibGVTaWJsaW5nKSkKKwl7CisJCUpzb25UYWJsZVNpYmxpbmcgKmpvaW4g PSBjYXN0Tm9kZShKc29uVGFibGVTaWJsaW5nLCBwbGFuKTsKKworCQlzdGF0ZSA9IChKc29u VGFibGVQbGFuU3RhdGUgKikKKwkJCUpzb25UYWJsZUluaXRKb2luU3RhdGUoY3h0LCBqb2lu LCBwYXJlbnQpOworCX0KKwllbHNlCisJeworCQlKc29uVGFibGVQYXJlbnQgKnNjYW4gPSBj YXN0Tm9kZShKc29uVGFibGVQYXJlbnQsIHBsYW4pOworCQlKc29uVGFibGVTY2FuU3RhdGUg KnBhcmVudF9zY2FuID0gKEpzb25UYWJsZVNjYW5TdGF0ZSAqKSBwYXJlbnQ7CisKKwkJQXNz ZXJ0KHBhcmVudF9zY2FuKTsKKwkJc3RhdGUgPSAoSnNvblRhYmxlUGxhblN0YXRlICopCisJ CQlKc29uVGFibGVJbml0U2NhblN0YXRlKGN4dCwgc2NhbiwgcGFyZW50LCBwYXJlbnRfc2Nh bi0+YXJncywKKwkJCQkJCQkJICAgcGFyZW50X3NjYW4tPm1jeHQpOworCX0KKworCXJldHVy biBzdGF0ZTsKK30KKworLyoKKyAqIEpzb25UYWJsZUluaXRPcGFxdWUKKyAqCQlGaWxsIGlu IFRhYmxlRnVuY1NjYW5TdGF0ZS0+b3BhcXVlIGZvciBKc29uVGFibGUgcHJvY2Vzc29yCisg Ki8KK3N0YXRpYyB2b2lkCitKc29uVGFibGVJbml0T3BhcXVlKFRhYmxlRnVuY1NjYW5TdGF0 ZSAqc3RhdGUsIGludCBuYXR0cykKK3sKKwlKc29uVGFibGVFeGVjQ29udGV4dCAqY3h0Owor CVBsYW5TdGF0ZSAgKnBzID0gJnN0YXRlLT5zcy5wczsKKwlUYWJsZUZ1bmNTY2FuICp0ZnMg PSBjYXN0Tm9kZShUYWJsZUZ1bmNTY2FuLCBwcy0+cGxhbik7CisJVGFibGVGdW5jICAqdGYg PSB0ZnMtPnRhYmxlZnVuYzsKKwlKc29uVGFibGVQYXJlbnQgKnJvb3QgPSBjYXN0Tm9kZShK c29uVGFibGVQYXJlbnQsIHRmLT5wbGFuKTsKKwlKc29uRXhwciAgICpqZSA9IGNhc3ROb2Rl KEpzb25FeHByLCB0Zi0+ZG9jZXhwcik7CisJTGlzdAkgICAqYXJncyA9IE5JTDsKKworCWN4 dCA9IHBhbGxvYzAoc2l6ZW9mKEpzb25UYWJsZUV4ZWNDb250ZXh0KSk7CisJY3h0LT5tYWdp YyA9IEpTT05fVEFCTEVfRVhFQ19DT05URVhUX01BR0lDOworCisJaWYgKHN0YXRlLT5wYXNz aW5ndmFsZXhwcnMpCisJeworCQlMaXN0Q2VsbCAgICpleHBybGM7CisJCUxpc3RDZWxsICAg Km5hbWVsYzsKKworCQlBc3NlcnQobGlzdF9sZW5ndGgoc3RhdGUtPnBhc3Npbmd2YWxleHBy cykgPT0KKwkJCSAgIGxpc3RfbGVuZ3RoKGplLT5wYXNzaW5nX25hbWVzKSk7CisJCWZvcmJv dGgoZXhwcmxjLCBzdGF0ZS0+cGFzc2luZ3ZhbGV4cHJzLAorCQkJCW5hbWVsYywgamUtPnBh c3NpbmdfbmFtZXMpCisJCXsKKwkJCUV4cHJTdGF0ZSAgKnN0YXRlID0gbGZpcnN0X25vZGUo RXhwclN0YXRlLCBleHBybGMpOworCQkJU3RyaW5nCSAgICpuYW1lID0gbGZpcnN0X25vZGUo U3RyaW5nLCBuYW1lbGMpOworCQkJSnNvblBhdGhWYXJpYWJsZSAqdmFyID0gcGFsbG9jKHNp emVvZigqdmFyKSk7CisKKwkJCXZhci0+bmFtZSA9IHBzdHJkdXAobmFtZS0+c3ZhbCk7CisJ CQl2YXItPnR5cGlkID0gZXhwclR5cGUoKE5vZGUgKikgc3RhdGUtPmV4cHIpOworCQkJdmFy LT50eXBtb2QgPSBleHByVHlwbW9kKChOb2RlICopIHN0YXRlLT5leHByKTsKKworCQkJLyoK KwkJCSAqIEV2YWx1YXRlIHRoZSBleHByZXNzaW9uIGFuZCBzYXZlIHRoZSB2YWx1ZSB0byBi ZSByZXR1cm5lZCBieQorCQkJICogR2V0SnNvblBhdGhWYXIoKS4KKwkJCSAqLworCQkJdmFy LT52YWx1ZSA9IEV4ZWNFdmFsRXhwcihzdGF0ZSwgcHMtPnBzX0V4cHJDb250ZXh0LAorCQkJ CQkJCQkJICAmdmFyLT5pc251bGwpOworCisJCQlhcmdzID0gbGFwcGVuZChhcmdzLCB2YXIp OworCQl9CisJfQorCisJY3h0LT5jb2xleHByc2NhbnMgPSBwYWxsb2Moc2l6ZW9mKEpzb25U YWJsZVNjYW5TdGF0ZSAqKSAqCisJCQkJCQkJICAgbGlzdF9sZW5ndGgodGYtPmNvbHZhbGV4 cHJzKSk7CisKKwljeHQtPnJvb3QgPSBKc29uVGFibGVJbml0U2NhblN0YXRlKGN4dCwgcm9v dCwgTlVMTCwgYXJncywKKwkJCQkJCQkJCSAgIEN1cnJlbnRNZW1vcnlDb250ZXh0KTsKKwlz dGF0ZS0+b3BhcXVlID0gY3h0OworfQorCisvKiBSZXNldCBzY2FuIGl0ZXJhdG9yIHRvIHRo ZSBiZWdpbm5pbmcgb2YgdGhlIGl0ZW0gbGlzdCAqLworc3RhdGljIHZvaWQKK0pzb25UYWJs ZVJlc2NhbihKc29uVGFibGVTY2FuU3RhdGUgKnNjYW4pCit7CisJSnNvblZhbHVlTGlzdElu aXRJdGVyYXRvcigmc2Nhbi0+Zm91bmQsICZzY2FuLT5pdGVyKTsKKwlzY2FuLT5jdXJyZW50 ID0gUG9pbnRlckdldERhdHVtKE5VTEwpOworCXNjYW4tPmN1cnJlbnRJc051bGwgPSB0cnVl OworCXNjYW4tPmFkdmFuY2VOZXN0ZWQgPSBmYWxzZTsKKwlzY2FuLT5vcmRpbmFsID0gMDsK K30KKworLyogUmVzZXQgY29udGV4dCBpdGVtIG9mIGEgc2NhbiwgZXhlY3V0ZSBKU09OIHBh dGggYW5kIHJlc2V0IGEgc2NhbiAqLworc3RhdGljIHZvaWQKK0pzb25UYWJsZVJlc2V0Q29u dGV4dEl0ZW0oSnNvblRhYmxlU2NhblN0YXRlICpzY2FuLCBEYXR1bSBpdGVtKQoreworCU1l bW9yeUNvbnRleHQgb2xkY3h0OworCUpzb25QYXRoRXhlY1Jlc3VsdCByZXM7CisJSnNvbmIJ ICAgKmpzID0gKEpzb25iICopIERhdHVtR2V0SnNvbmJQKGl0ZW0pOworCisJSnNvblZhbHVl TGlzdENsZWFyKCZzY2FuLT5mb3VuZCk7CisKKwlNZW1vcnlDb250ZXh0UmVzZXRPbmx5KHNj YW4tPm1jeHQpOworCisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHNjYW4tPm1j eHQpOworCisJcmVzID0gZXhlY3V0ZUpzb25QYXRoKHNjYW4tPnBhdGgsIHNjYW4tPmFyZ3Ms IEdldEpzb25QYXRoVmFyLCBqcywKKwkJCQkJCSAgc2Nhbi0+ZXJyb3JPbkVycm9yLCAmc2Nh bi0+Zm91bmQsCisJCQkJCQkgIGZhbHNlIC8qIEZJWE1FICovICk7CisKKwlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKworCWlmIChqcGVySXNFcnJvcihyZXMpKQorCXsKKwkJ QXNzZXJ0KCFzY2FuLT5lcnJvck9uRXJyb3IpOworCQlKc29uVmFsdWVMaXN0Q2xlYXIoJnNj YW4tPmZvdW5kKTsJLyogRU1QVFkgT04gRVJST1IgY2FzZSAqLworCX0KKworCUpzb25UYWJs ZVJlc2NhbihzY2FuKTsKK30KKworLyoKKyAqIEpzb25UYWJsZVNldERvY3VtZW50CisgKgkJ SW5zdGFsbCB0aGUgaW5wdXQgZG9jdW1lbnQKKyAqLworc3RhdGljIHZvaWQKK0pzb25UYWJs ZVNldERvY3VtZW50KFRhYmxlRnVuY1NjYW5TdGF0ZSAqc3RhdGUsIERhdHVtIHZhbHVlKQor eworCUpzb25UYWJsZUV4ZWNDb250ZXh0ICpjeHQgPQorCQlHZXRKc29uVGFibGVFeGVjQ29u dGV4dChzdGF0ZSwgIkpzb25UYWJsZVNldERvY3VtZW50Iik7CisKKwlKc29uVGFibGVSZXNl dENvbnRleHRJdGVtKGN4dC0+cm9vdCwgdmFsdWUpOworfQorCisvKiBSZWN1cnNpdmVseSBy ZXNldCBzY2FuIGFuZCBpdHMgY2hpbGQgbm9kZXMgKi8KK3N0YXRpYyB2b2lkCitKc29uVGFi bGVSZXNjYW5SZWN1cnNpdmUoSnNvblRhYmxlUGxhblN0YXRlICpzdGF0ZSkKK3sKKwlpZiAo c3RhdGUtPnR5cGUgPT0gSlNPTl9UQUJMRV9KT0lOX1NUQVRFKQorCXsKKwkJSnNvblRhYmxl Sm9pblN0YXRlICpqb2luID0gKEpzb25UYWJsZUpvaW5TdGF0ZSAqKSBzdGF0ZTsKKworCQlK c29uVGFibGVSZXNjYW5SZWN1cnNpdmUoam9pbi0+bGVmdCk7CisJCUpzb25UYWJsZVJlc2Nh blJlY3Vyc2l2ZShqb2luLT5yaWdodCk7CisJCWpvaW4tPmFkdmFuY2VSaWdodCA9IGZhbHNl OworCX0KKwllbHNlCisJeworCQlKc29uVGFibGVTY2FuU3RhdGUgKnNjYW4gPSAoSnNvblRh YmxlU2NhblN0YXRlICopIHN0YXRlOworCisJCUFzc2VydChzdGF0ZS0+dHlwZSA9PSBKU09O X1RBQkxFX1NDQU5fU1RBVEUpOworCQlKc29uVGFibGVSZXNjYW4oc2Nhbik7CisJCWlmIChz Y2FuLT5wbGFuLm5lc3RlZCkKKwkJCUpzb25UYWJsZVJlc2NhblJlY3Vyc2l2ZShzY2FuLT5w bGFuLm5lc3RlZCk7CisJfQorfQorCisvKgorICogRmV0Y2ggbmV4dCByb3cgZnJvbSBhIGNy b3NzL3VuaW9uIGpvaW5lZCBzY2FuLgorICoKKyAqIFJldHVybnMgZmFsc2UgYXQgdGhlIGVu ZCBvZiBhIHNjYW4sIHRydWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbAorSnNvblRh YmxlUGxhbk5leHRSb3coSnNvblRhYmxlUGxhblN0YXRlICpzdGF0ZSkKK3sKKwlKc29uVGFi bGVKb2luU3RhdGUgKmpvaW47CisKKwlpZiAoc3RhdGUtPnR5cGUgPT0gSlNPTl9UQUJMRV9T Q0FOX1NUQVRFKQorCQlyZXR1cm4gSnNvblRhYmxlU2Nhbk5leHRSb3coKEpzb25UYWJsZVNj YW5TdGF0ZSAqKSBzdGF0ZSk7CisKKwlqb2luID0gKEpzb25UYWJsZUpvaW5TdGF0ZSAqKSBz dGF0ZTsKKwlpZiAoam9pbi0+YWR2YW5jZVJpZ2h0KQorCXsKKwkJLyogZmV0Y2ggbmV4dCBp bm5lciByb3cgKi8KKwkJaWYgKEpzb25UYWJsZVBsYW5OZXh0Um93KGpvaW4tPnJpZ2h0KSkK KwkJCXJldHVybiB0cnVlOworCisJCS8qIGlubmVyIHJvd3MgYXJlIGV4aGF1c3RlZCAqLwor CQlpZiAoam9pbi0+Y3Jvc3MpCisJCQlqb2luLT5hZHZhbmNlUmlnaHQgPSBmYWxzZTsgLyog bmV4dCBvdXRlciByb3cgKi8KKwkJZWxzZQorCQkJcmV0dXJuIGZhbHNlOwkJLyogZW5kIG9m IHNjYW4gKi8KKwl9CisKKwl3aGlsZSAoIWpvaW4tPmFkdmFuY2VSaWdodCkKKwl7CisJCS8q IGZldGNoIG5leHQgb3V0ZXIgcm93ICovCisJCWJvb2wJCWxlZnQgPSBKc29uVGFibGVQbGFu TmV4dFJvdyhqb2luLT5sZWZ0KTsKKworCQlpZiAoam9pbi0+Y3Jvc3MpCisJCXsKKwkJCWlm ICghbGVmdCkKKwkJCQlyZXR1cm4gZmFsc2U7CS8qIGVuZCBvZiBzY2FuICovCisKKwkJCUpz b25UYWJsZVJlc2NhblJlY3Vyc2l2ZShqb2luLT5yaWdodCk7CisKKwkJCWlmICghSnNvblRh YmxlUGxhbk5leHRSb3coam9pbi0+cmlnaHQpKQorCQkJCWNvbnRpbnVlOwkJLyogbmV4dCBv dXRlciByb3cgKi8KKworCQkJam9pbi0+YWR2YW5jZVJpZ2h0ID0gdHJ1ZTsJLyogbmV4dCBp bm5lciByb3cgKi8KKwkJfQorCQllbHNlIGlmICghbGVmdCkKKwkJeworCQkJaWYgKCFKc29u VGFibGVQbGFuTmV4dFJvdyhqb2luLT5yaWdodCkpCisJCQkJcmV0dXJuIGZhbHNlOwkvKiBl bmQgb2Ygc2NhbiAqLworCisJCQlqb2luLT5hZHZhbmNlUmlnaHQgPSB0cnVlOwkvKiBuZXh0 IGlubmVyIHJvdyAqLworCQl9CisKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHRydWU7Cit9 CisKKy8qIFJlY3Vyc2l2ZWx5IHNldCAncmVzZXQnIGZsYWcgb2Ygc2NhbiBhbmQgaXRzIGNo aWxkIG5vZGVzICovCitzdGF0aWMgdm9pZAorSnNvblRhYmxlUGxhblJlc2V0KEpzb25UYWJs ZVBsYW5TdGF0ZSAqc3RhdGUpCit7CisJaWYgKHN0YXRlLT50eXBlID09IEpTT05fVEFCTEVf Sk9JTl9TVEFURSkKKwl7CisJCUpzb25UYWJsZUpvaW5TdGF0ZSAqam9pbiA9IChKc29uVGFi bGVKb2luU3RhdGUgKikgc3RhdGU7CisKKwkJSnNvblRhYmxlUGxhblJlc2V0KGpvaW4tPmxl ZnQpOworCQlKc29uVGFibGVQbGFuUmVzZXQoam9pbi0+cmlnaHQpOworCQlqb2luLT5hZHZh bmNlUmlnaHQgPSBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJSnNvblRhYmxlU2NhblN0YXRl ICpzY2FuOworCisJCUFzc2VydChzdGF0ZS0+dHlwZSA9PSBKU09OX1RBQkxFX1NDQU5fU1RB VEUpOworCQlzY2FuID0gKEpzb25UYWJsZVNjYW5TdGF0ZSAqKSBzdGF0ZTsKKwkJc2Nhbi0+ cmVzZXQgPSB0cnVlOworCQlzY2FuLT5hZHZhbmNlTmVzdGVkID0gZmFsc2U7CisKKwkJaWYg KHNjYW4tPnBsYW4ubmVzdGVkKQorCQkJSnNvblRhYmxlUGxhblJlc2V0KHNjYW4tPnBsYW4u bmVzdGVkKTsKKwl9Cit9CisKKy8qCisgKiBGZXRjaCBuZXh0IHJvdyBmcm9tIGEgc2ltcGxl IHNjYW4gd2l0aCBvdXRlci9pbm5lciBqb2luZWQgbmVzdGVkIHN1YnNjYW5zLgorICoKKyAq IFJldHVybnMgZmFsc2UgYXQgdGhlIGVuZCBvZiBhIHNjYW4sIHRydWUgb3RoZXJ3aXNlLgor ICovCitzdGF0aWMgYm9vbAorSnNvblRhYmxlU2Nhbk5leHRSb3coSnNvblRhYmxlU2NhblN0 YXRlICpzY2FuKQoreworCS8qIHJlc2V0IGNvbnRleHQgaXRlbSBpZiByZXF1ZXN0ZWQgKi8K KwlpZiAoc2Nhbi0+cmVzZXQpCisJeworCQlKc29uVGFibGVTY2FuU3RhdGUgKnBhcmVudF9z Y2FuID0KKwkJCShKc29uVGFibGVTY2FuU3RhdGUgKikgc2Nhbi0+cGxhbi5wYXJlbnQ7CisK KwkJQXNzZXJ0KHBhcmVudF9zY2FuICYmICFwYXJlbnRfc2Nhbi0+Y3VycmVudElzTnVsbCk7 CisJCUpzb25UYWJsZVJlc2V0Q29udGV4dEl0ZW0oc2NhbiwgcGFyZW50X3NjYW4tPmN1cnJl bnQpOworCQlzY2FuLT5yZXNldCA9IGZhbHNlOworCX0KKworCWlmIChzY2FuLT5hZHZhbmNl TmVzdGVkKQorCXsKKwkJLyogZmV0Y2ggbmV4dCBuZXN0ZWQgcm93ICovCisJCXNjYW4tPmFk dmFuY2VOZXN0ZWQgPSBKc29uVGFibGVQbGFuTmV4dFJvdyhzY2FuLT5wbGFuLm5lc3RlZCk7 CisKKwkJaWYgKHNjYW4tPmFkdmFuY2VOZXN0ZWQpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisK Kwlmb3IgKDs7KQorCXsKKwkJLyogZmV0Y2ggbmV4dCByb3cgKi8KKwkJSnNvbmJWYWx1ZSAq amJ2ID0gSnNvblZhbHVlTGlzdE5leHQoJnNjYW4tPmZvdW5kLCAmc2Nhbi0+aXRlcik7CisJ CU1lbW9yeUNvbnRleHQgb2xkY3h0OworCisJCWlmICghamJ2KQorCQl7CisJCQlzY2FuLT5j dXJyZW50ID0gUG9pbnRlckdldERhdHVtKE5VTEwpOworCQkJc2Nhbi0+Y3VycmVudElzTnVs bCA9IHRydWU7CisJCQlyZXR1cm4gZmFsc2U7CQkvKiBlbmQgb2Ygc2NhbiAqLworCQl9CisK KwkJLyogc2V0IGN1cnJlbnQgcm93IGl0ZW0gKi8KKwkJb2xkY3h0ID0gTWVtb3J5Q29udGV4 dFN3aXRjaFRvKHNjYW4tPm1jeHQpOworCQlzY2FuLT5jdXJyZW50ID0gSnNvbmJQR2V0RGF0 dW0oSnNvbmJWYWx1ZVRvSnNvbmIoamJ2KSk7CisJCXNjYW4tPmN1cnJlbnRJc051bGwgPSBm YWxzZTsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisKKwkJc2Nhbi0+b3Jk aW5hbCsrOworCisJCWlmICghc2Nhbi0+cGxhbi5uZXN0ZWQpCisJCQlicmVhazsKKworCQlK c29uVGFibGVQbGFuUmVzZXQoc2Nhbi0+cGxhbi5uZXN0ZWQpOworCisJCXNjYW4tPmFkdmFu Y2VOZXN0ZWQgPSBKc29uVGFibGVQbGFuTmV4dFJvdyhzY2FuLT5wbGFuLm5lc3RlZCk7CisK KwkJaWYgKHNjYW4tPmFkdmFuY2VOZXN0ZWQgfHwgc2Nhbi0+b3V0ZXJKb2luKQorCQkJYnJl YWs7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBKc29uVGFibGVGZXRjaFJv dworICoJCVByZXBhcmUgdGhlIG5leHQgImN1cnJlbnQiIHR1cGxlIGZvciB1cGNvbWluZyBH ZXRWYWx1ZSBjYWxscy4KKyAqCQlSZXR1cm5zIEZBTFNFIGlmIHRoZSByb3ctZmlsdGVyIGV4 cHJlc3Npb24gcmV0dXJuZWQgbm8gbW9yZSByb3dzLgorICovCitzdGF0aWMgYm9vbAorSnNv blRhYmxlRmV0Y2hSb3coVGFibGVGdW5jU2NhblN0YXRlICpzdGF0ZSkKK3sKKwlKc29uVGFi bGVFeGVjQ29udGV4dCAqY3h0ID0KKwkJR2V0SnNvblRhYmxlRXhlY0NvbnRleHQoc3RhdGUs ICJKc29uVGFibGVGZXRjaFJvdyIpOworCisJaWYgKGN4dC0+ZW1wdHkpCisJCXJldHVybiBm YWxzZTsKKworCXJldHVybiBKc29uVGFibGVTY2FuTmV4dFJvdyhjeHQtPnJvb3QpOworfQor CisvKgorICogSnNvblRhYmxlR2V0VmFsdWUKKyAqCQlSZXR1cm4gdGhlIHZhbHVlIGZvciBj b2x1bW4gbnVtYmVyICdjb2xudW0nIGZvciB0aGUgY3VycmVudCByb3cuCisgKgorICogVGhp cyBsZWFrcyBtZW1vcnksIHNvIGJlIHN1cmUgdG8gcmVzZXQgb2Z0ZW4gdGhlIGNvbnRleHQg aW4gd2hpY2ggaXQncworICogY2FsbGVkLgorICovCitzdGF0aWMgRGF0dW0KK0pzb25UYWJs ZUdldFZhbHVlKFRhYmxlRnVuY1NjYW5TdGF0ZSAqc3RhdGUsIGludCBjb2xudW0sCisJCQkJ ICBPaWQgdHlwaWQsIGludDMyIHR5cG1vZCwgYm9vbCAqaXNudWxsKQoreworCUpzb25UYWJs ZUV4ZWNDb250ZXh0ICpjeHQgPQorCQlHZXRKc29uVGFibGVFeGVjQ29udGV4dChzdGF0ZSwg Ikpzb25UYWJsZUdldFZhbHVlIik7CisJRXhwckNvbnRleHQgKmVjb250ZXh0ID0gc3RhdGUt PnNzLnBzLnBzX0V4cHJDb250ZXh0OworCUV4cHJTdGF0ZSAgKmVzdGF0ZSA9IGxpc3RfbnRo KHN0YXRlLT5jb2x2YWxleHBycywgY29sbnVtKTsKKwlKc29uVGFibGVTY2FuU3RhdGUgKnNj YW4gPSBjeHQtPmNvbGV4cHJzY2Fuc1tjb2xudW1dOworCURhdHVtCQlyZXN1bHQ7CisKKwlp ZiAoc2Nhbi0+Y3VycmVudElzTnVsbCkJLyogTlVMTCBmcm9tIG91dGVyL3VuaW9uIGpvaW4g Ki8KKwl7CisJCXJlc3VsdCA9IChEYXR1bSkgMDsKKwkJKmlzbnVsbCA9IHRydWU7CisJfQor CWVsc2UgaWYgKGVzdGF0ZSkJCQkvKiByZWd1bGFyIGNvbHVtbiAqLworCXsKKwkJRGF0dW0J c2F2ZWRfY2FzZVZhbHVlID0gZWNvbnRleHQtPmNhc2VWYWx1ZV9kYXR1bTsKKwkJYm9vbAlz YXZlZF9jYXNlSXNOdWxsID0gZWNvbnRleHQtPmNhc2VWYWx1ZV9pc051bGw7CisKKwkJLyog UGFzcyB0aGUgdmFsdWUgZm9yIENhc2VUZXN0RXhwciB0aGF0IG1heSBiZSBwcmVzZW50IGlu IGNvbGV4cHIgKi8KKwkJZWNvbnRleHQtPmNhc2VWYWx1ZV9kYXR1bSA9IHNjYW4tPmN1cnJl bnQ7CisJCWVjb250ZXh0LT5jYXNlVmFsdWVfaXNOdWxsID0gZmFsc2U7CisKKwkJcmVzdWx0 ID0gRXhlY0V2YWxFeHByKGVzdGF0ZSwgZWNvbnRleHQsIGlzbnVsbCk7CisKKwkJZWNvbnRl eHQtPmNhc2VWYWx1ZV9kYXR1bSA9IHNhdmVkX2Nhc2VWYWx1ZTsKKwkJZWNvbnRleHQtPmNh c2VWYWx1ZV9pc051bGwgPSBzYXZlZF9jYXNlSXNOdWxsOworCX0KKwllbHNlCisJeworCQly ZXN1bHQgPSBJbnQzMkdldERhdHVtKHNjYW4tPm9yZGluYWwpOwkvKiBvcmRpbmFsaXR5IGNv bHVtbiAqLworCQkqaXNudWxsID0gZmFsc2U7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30K KworLyoKKyAqIEpzb25UYWJsZURlc3Ryb3lPcGFxdWUKKyAqLworc3RhdGljIHZvaWQKK0pz b25UYWJsZURlc3Ryb3lPcGFxdWUoVGFibGVGdW5jU2NhblN0YXRlICpzdGF0ZSkKK3sKKwlK c29uVGFibGVFeGVjQ29udGV4dCAqY3h0ID0KKwkJR2V0SnNvblRhYmxlRXhlY0NvbnRleHQo c3RhdGUsICJKc29uVGFibGVEZXN0cm95T3BhcXVlIik7CisKKwkvKiBub3QgdmFsaWQgYW55 bW9yZSAqLworCWN4dC0+bWFnaWMgPSAwOworCisJc3RhdGUtPm9wYXF1ZSA9IE5VTEw7Cit9 CisKK2NvbnN0IFRhYmxlRnVuY1JvdXRpbmUgSnNvbmJUYWJsZVJvdXRpbmUgPQoreworCUpz b25UYWJsZUluaXRPcGFxdWUsCisJSnNvblRhYmxlU2V0RG9jdW1lbnQsCisJTlVMTCwKKwlO VUxMLAorCU5VTEwsCisJSnNvblRhYmxlRmV0Y2hSb3csCisJSnNvblRhYmxlR2V0VmFsdWUs CisJSnNvblRhYmxlRGVzdHJveU9wYXF1ZQorfTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRp bHMuYwppbmRleCA5MzM4YmUwNTcxLi4xYWNmMmNhYmE2IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3J1bGV1dGlscy5jCkBAIC01MDksNiArNTA5LDggQEAgc3RhdGljIGNoYXIgKmZsYXR0ZW5f cmVsb3B0aW9ucyhPaWQgcmVsaWQpOwogc3RhdGljIHZvaWQgZ2V0X3JlbG9wdGlvbnMoU3Ry aW5nSW5mbyBidWYsIERhdHVtIHJlbG9wdGlvbnMpOwogc3RhdGljIHZvaWQgZ2V0X2pzb25f cGF0aF9zcGVjKE5vZGUgKnBhdGhfc3BlYywgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LAog CQkJCQkJCSAgIGJvb2wgc2hvd2ltcGxpY2l0KTsKK3N0YXRpYyB2b2lkIGdldF9qc29uX3Rh YmxlX2NvbHVtbnMoVGFibGVGdW5jICp0ZiwgSnNvblRhYmxlUGFyZW50ICpub2RlLAorCQkJ CQkJCQkgICBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsIGJvb2wgc2hvd2ltcGxpY2l0KTsK IAogI2RlZmluZSBvbmx5X21hcmtlcihydGUpICAoKHJ0ZSktPmluaCA/ICIiIDogIk9OTFkg IikKIApAQCAtODU1MSw3ICs4NTUzLDggQEAgZ2V0X2pzb25fYmVoYXZpb3IoSnNvbkJlaGF2 aW9yICpiZWhhdmlvciwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LAogLyoKICAqIGdldF9q c29uX2V4cHJfb3B0aW9ucwogICoKLSAqIFBhcnNlIGJhY2sgY29tbW9uIG9wdGlvbnMgZm9y IEpTT05fUVVFUlksIEpTT05fVkFMVUUsIEpTT05fRVhJU1RTLgorICogUGFyc2UgYmFjayBj b21tb24gb3B0aW9ucyBmb3IgSlNPTl9RVUVSWSwgSlNPTl9WQUxVRSwgSlNPTl9FWElTVFMg YW5kCisgKiBKU09OX1RBQkxFIGNvbHVtbnMuCiAgKi8KIHN0YXRpYyB2b2lkCiBnZXRfanNv bl9leHByX29wdGlvbnMoSnNvbkV4cHIgKmpzZXhwciwgZGVwYXJzZV9jb250ZXh0ICpjb250 ZXh0LApAQCAtOTczOCw2ICs5NzQxLDkgQEAgZ2V0X3J1bGVfZXhwcihOb2RlICpub2RlLCBk ZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCiAJCQkJCWNhc2UgSlNPTl9FWElTVFNfT1A6CiAJ CQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIkpTT05fRVhJU1RTKCIpOwogCQkJ CQkJYnJlYWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQllbG9nKEVSUk9SLCAidW5leHBlY3Rl ZCBKc29uRXhwciB0eXBlOiAlZCIsIGpleHByLT5vcCk7CisJCQkJCQlicmVhazsKIAkJCQl9 CiAKIAkJCQlnZXRfcnVsZV9leHByKGpleHByLT5mb3JtYXR0ZWRfZXhwciwgY29udGV4dCwg c2hvd2ltcGxpY2l0KTsKQEAgLTExMDgyLDE2ICsxMTA4OCwxNCBAQCBnZXRfc3VibGlua19l eHByKFN1YkxpbmsgKnN1YmxpbmssIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCkKIAogCiAv KiAtLS0tLS0tLS0tCi0gKiBnZXRfdGFibGVmdW5jCQkJLSBQYXJzZSBiYWNrIGEgdGFibGUg ZnVuY3Rpb24KKyAqIGdldF94bWx0YWJsZQkJCS0gUGFyc2UgYmFjayBhIFhNTFRBQkxFIGZ1 bmN0aW9uCiAgKiAtLS0tLS0tLS0tCiAgKi8KIHN0YXRpYyB2b2lkCi1nZXRfdGFibGVmdW5j KFRhYmxlRnVuYyAqdGYsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwgYm9vbCBzaG93aW1w bGljaXQpCitnZXRfeG1sdGFibGUoVGFibGVGdW5jICp0ZiwgZGVwYXJzZV9jb250ZXh0ICpj b250ZXh0LCBib29sIHNob3dpbXBsaWNpdCkKIHsKIAlTdHJpbmdJbmZvCWJ1ZiA9IGNvbnRl eHQtPmJ1ZjsKIAotCS8qIFhNTFRBQkxFIGlzIHRoZSBvbmx5IGV4aXN0aW5nIGltcGxlbWVu dGF0aW9uLiAgKi8KLQogCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiWE1MVEFCTEUo Iik7CiAKIAlpZiAodGYtPm5zX3VyaXMgIT0gTklMKQpAQCAtMTExODIsNiArMTExODYsMjcx IEBAIGdldF90YWJsZWZ1bmMoVGFibGVGdW5jICp0ZiwgZGVwYXJzZV9jb250ZXh0ICpjb250 ZXh0LCBib29sIHNob3dpbXBsaWNpdCkKIAlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcp Jyk7CiB9CiAKKy8qCisgKiBnZXRfanNvbl9uZXN0ZWRfY29sdW1ucyAtIFBhcnNlIGJhY2sg bmVzdGVkIEpTT05fVEFCTEUgY29sdW1ucworICovCitzdGF0aWMgdm9pZAorZ2V0X2pzb25f dGFibGVfbmVzdGVkX2NvbHVtbnMoVGFibGVGdW5jICp0ZiwgTm9kZSAqbm9kZSwKKwkJCQkJ CQkgIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwgYm9vbCBzaG93aW1wbGljaXQsCisJCQkJ CQkJICBib29sIG5lZWRjb21tYSkKK3sKKwlpZiAoSXNBKG5vZGUsIEpzb25UYWJsZVNpYmxp bmcpKQorCXsKKwkJSnNvblRhYmxlU2libGluZyAqbiA9IChKc29uVGFibGVTaWJsaW5nICop IG5vZGU7CisKKwkJZ2V0X2pzb25fdGFibGVfbmVzdGVkX2NvbHVtbnModGYsIG4tPmxhcmcs IGNvbnRleHQsIHNob3dpbXBsaWNpdCwKKwkJCQkJCQkJCSAgbmVlZGNvbW1hKTsKKwkJZ2V0 X2pzb25fdGFibGVfbmVzdGVkX2NvbHVtbnModGYsIG4tPnJhcmcsIGNvbnRleHQsIHNob3dp bXBsaWNpdCwgdHJ1ZSk7CisJfQorCWVsc2UKKwl7CisJCUpzb25UYWJsZVBhcmVudCAqbiA9 IGNhc3ROb2RlKEpzb25UYWJsZVBhcmVudCwgbm9kZSk7CisKKwkJaWYgKG5lZWRjb21tYSkK KwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJywnKTsKKworCQlhcHBl bmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCWFwcGVuZENvbnRleHRL ZXl3b3JkKGNvbnRleHQsICJORVNURUQgUEFUSCAiLCAwLCAwLCAwKTsKKwkJZ2V0X2NvbnN0 X2V4cHIobi0+cGF0aC0+dmFsdWUsIGNvbnRleHQsIC0xKTsKKwkJYXBwZW5kU3RyaW5nSW5m byhjb250ZXh0LT5idWYsICIgQVMgJXMiLCBxdW90ZV9pZGVudGlmaWVyKG4tPnBhdGgtPm5h bWUpKTsKKwkJZ2V0X2pzb25fdGFibGVfY29sdW1ucyh0ZiwgbiwgY29udGV4dCwgc2hvd2lt cGxpY2l0KTsKKwl9Cit9CisKKy8qCisgKiBnZXRfanNvbl90YWJsZV9wbGFuIC0gUGFyc2Ug YmFjayBhIEpTT05fVEFCTEUgcGxhbgorICovCitzdGF0aWMgdm9pZAorZ2V0X2pzb25fdGFi bGVfcGxhbihUYWJsZUZ1bmMgKnRmLCBOb2RlICpub2RlLCBkZXBhcnNlX2NvbnRleHQgKmNv bnRleHQsCisJCQkJCWJvb2wgcGFyZW50aGVzaXplKQoreworCWlmIChwYXJlbnRoZXNpemUp CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJygnKTsKKworCWlmIChJ c0Eobm9kZSwgSnNvblRhYmxlU2libGluZykpCisJeworCQlKc29uVGFibGVTaWJsaW5nICpu ID0gKEpzb25UYWJsZVNpYmxpbmcgKikgbm9kZTsKKworCQlnZXRfanNvbl90YWJsZV9wbGFu KHRmLCBuLT5sYXJnLCBjb250ZXh0LAorCQkJCQkJCUlzQShuLT5sYXJnLCBKc29uVGFibGVT aWJsaW5nKSB8fAorCQkJCQkJCWNhc3ROb2RlKEpzb25UYWJsZVBhcmVudCwgbi0+bGFyZykt PmNoaWxkKTsKKworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGNvbnRleHQtPmJ1Ziwgbi0+ Y3Jvc3MgPyAiIENST1NTICIgOiAiIFVOSU9OICIpOworCisJCWdldF9qc29uX3RhYmxlX3Bs YW4odGYsIG4tPnJhcmcsIGNvbnRleHQsCisJCQkJCQkJSXNBKG4tPnJhcmcsIEpzb25UYWJs ZVNpYmxpbmcpIHx8CisJCQkJCQkJY2FzdE5vZGUoSnNvblRhYmxlUGFyZW50LCBuLT5yYXJn KS0+Y2hpbGQpOworCX0KKwllbHNlCisJeworCQlKc29uVGFibGVQYXJlbnQgKm4gPSBjYXN0 Tm9kZShKc29uVGFibGVQYXJlbnQsIG5vZGUpOworCisJCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoY29udGV4dC0+YnVmLCBxdW90ZV9pZGVudGlmaWVyKG4tPnBhdGgtPm5hbWUpKTsKKwor CQlpZiAobi0+Y2hpbGQpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoY29udGV4 dC0+YnVmLAorCQkJCQkJCQkgICBuLT5vdXRlckpvaW4gPyAiIE9VVEVSICIgOiAiIElOTkVS ICIpOworCQkJZ2V0X2pzb25fdGFibGVfcGxhbih0Ziwgbi0+Y2hpbGQsIGNvbnRleHQsCisJ CQkJCQkJCUlzQShuLT5jaGlsZCwgSnNvblRhYmxlU2libGluZykpOworCQl9CisJfQorCisJ aWYgKHBhcmVudGhlc2l6ZSkKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVm LCAnKScpOworfQorCisvKgorICogZ2V0X2pzb25fdGFibGVfY29sdW1ucyAtIFBhcnNlIGJh Y2sgSlNPTl9UQUJMRSBjb2x1bW5zCisgKi8KK3N0YXRpYyB2b2lkCitnZXRfanNvbl90YWJs ZV9jb2x1bW5zKFRhYmxlRnVuYyAqdGYsIEpzb25UYWJsZVBhcmVudCAqbm9kZSwKKwkJCQkJ ICAgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LCBib29sIHNob3dpbXBsaWNpdCkKK3sKKwlT dHJpbmdJbmZvCWJ1ZiA9IGNvbnRleHQtPmJ1ZjsKKwlKc29uRXhwciAgICpqZXhwciA9IGNh c3ROb2RlKEpzb25FeHByLCB0Zi0+ZG9jZXhwcik7CisJTGlzdENlbGwgICAqbGNfY29sbmFt ZTsKKwlMaXN0Q2VsbCAgICpsY19jb2x0eXBlOworCUxpc3RDZWxsICAgKmxjX2NvbHR5cG1v ZDsKKwlMaXN0Q2VsbCAgICpsY19jb2x2YWxleHByOworCWludAkJCWNvbG51bSA9IDA7CisK KwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcgJyk7CisJYXBwZW5kQ29udGV4dEtleXdv cmQoY29udGV4dCwgIkNPTFVNTlMgKCIsIDAsIDAsIDApOworCisJaWYgKFBSRVRUWV9JTkRF TlQoY29udGV4dCkpCisJCWNvbnRleHQtPmluZGVudExldmVsICs9IFBSRVRUWUlOREVOVF9W QVI7CisKKwlmb3Jmb3VyKGxjX2NvbG5hbWUsIHRmLT5jb2xuYW1lcywKKwkJCWxjX2NvbHR5 cGUsIHRmLT5jb2x0eXBlcywKKwkJCWxjX2NvbHR5cG1vZCwgdGYtPmNvbHR5cG1vZHMsCisJ CQlsY19jb2x2YWxleHByLCB0Zi0+Y29sdmFsZXhwcnMpCisJeworCQljaGFyCSAgICpjb2xu YW1lID0gc3RyVmFsKGxmaXJzdChsY19jb2xuYW1lKSk7CisJCUpzb25FeHByICAgKmNvbGV4 cHI7CisJCU9pZAkJCXR5cGlkOworCQlpbnQzMgkJdHlwbW9kOworCQlib29sCQlvcmRpbmFs aXR5OworCQlKc29uQmVoYXZpb3JUeXBlIGRlZmF1bHRfYmVoYXZpb3I7CisKKwkJdHlwaWQg PSBsZmlyc3Rfb2lkKGxjX2NvbHR5cGUpOworCQl0eXBtb2QgPSBsZmlyc3RfaW50KGxjX2Nv bHR5cG1vZCk7CisJCWNvbGV4cHIgPSBjYXN0Tm9kZShKc29uRXhwciwgbGZpcnN0KGxjX2Nv bHZhbGV4cHIpKTsKKworCQlpZiAoY29sbnVtIDwgbm9kZS0+Y29sTWluKQorCQl7CisJCQlj b2xudW0rKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGNvbG51bSA+IG5vZGUtPmNv bE1heCkKKwkJCWJyZWFrOworCisJCWlmIChjb2xudW0gPiBub2RlLT5jb2xNaW4pCisJCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiwgIik7CisKKwkJY29sbnVtKys7CisKKwkJ b3JkaW5hbGl0eSA9ICFjb2xleHByOworCisJCWFwcGVuZENvbnRleHRLZXl3b3JkKGNvbnRl eHQsICIiLCAwLCAwLCAwKTsKKworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzICVzIiwg cXVvdGVfaWRlbnRpZmllcihjb2xuYW1lKSwKKwkJCQkJCSBvcmRpbmFsaXR5ID8gIkZPUiBP UkRJTkFMSVRZIiA6CisJCQkJCQkgZm9ybWF0X3R5cGVfd2l0aF90eXBlbW9kKHR5cGlkLCB0 eXBtb2QpKTsKKwkJaWYgKG9yZGluYWxpdHkpCisJCQljb250aW51ZTsKKworCQlpZiAoY29s ZXhwci0+b3AgPT0gSlNPTl9FWElTVFNfT1ApCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoYnVmLCAiIEVYSVNUUyIpOworCQkJZGVmYXVsdF9iZWhhdmlvciA9IEpTT05fQkVI QVZJT1JfRkFMU0U7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAoY29sZXhwci0+b3AgPT0g SlNPTl9RVUVSWV9PUCkKKwkJCXsKKwkJCQljaGFyCQl0eXBjYXRlZ29yeTsKKwkJCQlib29s CQl0eXBpc3ByZWZlcnJlZDsKKworCQkJCWdldF90eXBlX2NhdGVnb3J5X3ByZWZlcnJlZCh0 eXBpZCwgJnR5cGNhdGVnb3J5LCAmdHlwaXNwcmVmZXJyZWQpOworCisJCQkJaWYgKHR5cGNh dGVnb3J5ID09IFRZUENBVEVHT1JZX1NUUklORykKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZyhidWYsCisJCQkJCQkJCQkJICAgY29sZXhwci0+Zm9ybWF0LT5mb3JtYXRfdHlwZSA9 PSBKU19GT1JNQVRfSlNPTkIgPworCQkJCQkJCQkJCSAgICIgRk9STUFUIEpTT05CIiA6ICIg Rk9STUFUIEpTT04iKTsKKwkJCX0KKworCQkJZGVmYXVsdF9iZWhhdmlvciA9IEpTT05fQkVI QVZJT1JfTlVMTDsKKwkJfQorCisJCWlmIChqZXhwci0+b25fZXJyb3ItPmJ0eXBlID09IEpT T05fQkVIQVZJT1JfRVJST1IpCisJCQlkZWZhdWx0X2JlaGF2aW9yID0gSlNPTl9CRUhBVklP Ul9FUlJPUjsKKworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiBQQVRIICIpOwor CisJCWdldF9qc29uX3BhdGhfc3BlYyhjb2xleHByLT5wYXRoX3NwZWMsIGNvbnRleHQsIHNo b3dpbXBsaWNpdCk7CisKKwkJZ2V0X2pzb25fZXhwcl9vcHRpb25zKGNvbGV4cHIsIGNvbnRl eHQsIGRlZmF1bHRfYmVoYXZpb3IpOworCX0KKworCWlmIChub2RlLT5jaGlsZCkKKwkJZ2V0 X2pzb25fdGFibGVfbmVzdGVkX2NvbHVtbnModGYsIG5vZGUtPmNoaWxkLCBjb250ZXh0LCBz aG93aW1wbGljaXQsCisJCQkJCQkJCQkgIG5vZGUtPmNvbE1heCA+PSBub2RlLT5jb2xNaW4p OworCisJaWYgKFBSRVRUWV9JTkRFTlQoY29udGV4dCkpCisJCWNvbnRleHQtPmluZGVudExl dmVsIC09IFBSRVRUWUlOREVOVF9WQVI7CisKKwlhcHBlbmRDb250ZXh0S2V5d29yZChjb250 ZXh0LCAiKSIsIDAsIDAsIDApOworfQorCisvKiAtLS0tLS0tLS0tCisgKiBnZXRfanNvbl90 YWJsZQkJCS0gUGFyc2UgYmFjayBhIEpTT05fVEFCTEUgZnVuY3Rpb24KKyAqIC0tLS0tLS0t LS0KKyAqLworc3RhdGljIHZvaWQKK2dldF9qc29uX3RhYmxlKFRhYmxlRnVuYyAqdGYsIGRl cGFyc2VfY29udGV4dCAqY29udGV4dCwgYm9vbCBzaG93aW1wbGljaXQpCit7CisJU3RyaW5n SW5mbwlidWYgPSBjb250ZXh0LT5idWY7CisJSnNvbkV4cHIgICAqamV4cHIgPSBjYXN0Tm9k ZShKc29uRXhwciwgdGYtPmRvY2V4cHIpOworCUpzb25UYWJsZVBhcmVudCAqcm9vdCA9IGNh c3ROb2RlKEpzb25UYWJsZVBhcmVudCwgdGYtPnBsYW4pOworCisJYXBwZW5kU3RyaW5nSW5m b1N0cmluZyhidWYsICJKU09OX1RBQkxFKCIpOworCisJaWYgKFBSRVRUWV9JTkRFTlQoY29u dGV4dCkpCisJCWNvbnRleHQtPmluZGVudExldmVsICs9IFBSRVRUWUlOREVOVF9WQVI7CisK KwlhcHBlbmRDb250ZXh0S2V5d29yZChjb250ZXh0LCAiIiwgMCwgMCwgMCk7CisKKwlnZXRf cnVsZV9leHByKGpleHByLT5mb3JtYXR0ZWRfZXhwciwgY29udGV4dCwgc2hvd2ltcGxpY2l0 KTsKKworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiLCAiKTsKKworCWdldF9jb25z dF9leHByKHJvb3QtPnBhdGgtPnZhbHVlLCBjb250ZXh0LCAtMSk7CisKKwlhcHBlbmRTdHJp bmdJbmZvKGJ1ZiwgIiBBUyAlcyIsIHF1b3RlX2lkZW50aWZpZXIocm9vdC0+cGF0aC0+bmFt ZSkpOworCisJaWYgKGpleHByLT5wYXNzaW5nX3ZhbHVlcykKKwl7CisJCUxpc3RDZWxsICAg KmxjMSwKKwkJCQkgICAqbGMyOworCQlib29sCQluZWVkY29tbWEgPSBmYWxzZTsKKworCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcgJyk7CisJCWFwcGVuZENvbnRleHRLZXl3b3Jk KGNvbnRleHQsICJQQVNTSU5HICIsIDAsIDAsIDApOworCisJCWlmIChQUkVUVFlfSU5ERU5U KGNvbnRleHQpKQorCQkJY29udGV4dC0+aW5kZW50TGV2ZWwgKz0gUFJFVFRZSU5ERU5UX1ZB UjsKKworCQlmb3Jib3RoKGxjMSwgamV4cHItPnBhc3NpbmdfbmFtZXMsCisJCQkJbGMyLCBq ZXhwci0+cGFzc2luZ192YWx1ZXMpCisJCXsKKwkJCWlmIChuZWVkY29tbWEpCisJCQkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIsICIpOworCQkJbmVlZGNvbW1hID0gdHJ1ZTsK KworCQkJYXBwZW5kQ29udGV4dEtleXdvcmQoY29udGV4dCwgIiIsIDAsIDAsIDApOworCisJ CQlnZXRfcnVsZV9leHByKChOb2RlICopIGxmaXJzdChsYzIpLCBjb250ZXh0LCBmYWxzZSk7 CisJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBBUyAlcyIsCisJCQkJCQkJIHF1b3RlX2lk ZW50aWZpZXIoKGxmaXJzdF9ub2RlKFN0cmluZywgbGMxKSktPnN2YWwpCisJCQkJKTsKKwkJ fQorCisJCWlmIChQUkVUVFlfSU5ERU5UKGNvbnRleHQpKQorCQkJY29udGV4dC0+aW5kZW50 TGV2ZWwgLT0gUFJFVFRZSU5ERU5UX1ZBUjsKKwl9CisKKwlnZXRfanNvbl90YWJsZV9jb2x1 bW5zKHRmLCByb290LCBjb250ZXh0LCBzaG93aW1wbGljaXQpOworCisJYXBwZW5kU3RyaW5n SW5mb0NoYXIoYnVmLCAnICcpOworCWFwcGVuZENvbnRleHRLZXl3b3JkKGNvbnRleHQsICJQ TEFOICIsIDAsIDAsIDApOworCWdldF9qc29uX3RhYmxlX3BsYW4odGYsIChOb2RlICopIHJv b3QsIGNvbnRleHQsIHRydWUpOworCisJaWYgKGpleHByLT5vbl9lcnJvci0+YnR5cGUgIT0g SlNPTl9CRUhBVklPUl9FTVBUWSkKKwkJZ2V0X2pzb25fYmVoYXZpb3IoamV4cHItPm9uX2Vy cm9yLCBjb250ZXh0LCAiRVJST1IiKTsKKworCWlmIChQUkVUVFlfSU5ERU5UKGNvbnRleHQp KQorCQljb250ZXh0LT5pbmRlbnRMZXZlbCAtPSBQUkVUVFlJTkRFTlRfVkFSOworCisJYXBw ZW5kQ29udGV4dEtleXdvcmQoY29udGV4dCwgIikiLCAwLCAwLCAwKTsKK30KKworLyogLS0t LS0tLS0tLQorICogZ2V0X3RhYmxlZnVuYwkJCS0gUGFyc2UgYmFjayBhIHRhYmxlIGZ1bmN0 aW9uCisgKiAtLS0tLS0tLS0tCisgKi8KK3N0YXRpYyB2b2lkCitnZXRfdGFibGVmdW5jKFRh YmxlRnVuYyAqdGYsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwgYm9vbCBzaG93aW1wbGlj aXQpCit7CisJLyogWE1MVEFCTEUgYW5kIEpTT05fVEFCTEUgYXJlIHRoZSBvbmx5IGV4aXN0 aW5nIGltcGxlbWVudGF0aW9ucy4gICovCisKKwlpZiAodGYtPmZ1bmN0eXBlID09IFRGVF9Y TUxUQUJMRSkKKwkJZ2V0X3htbHRhYmxlKHRmLCBjb250ZXh0LCBzaG93aW1wbGljaXQpOwor CWVsc2UgaWYgKHRmLT5mdW5jdHlwZSA9PSBURlRfSlNPTl9UQUJMRSkKKwkJZ2V0X2pzb25f dGFibGUodGYsIGNvbnRleHQsIHNob3dpbXBsaWNpdCk7Cit9CisKIC8qIC0tLS0tLS0tLS0K ICAqIGdldF9mcm9tX2NsYXVzZQkJCS0gUGFyc2UgYmFjayBhIEZST00gY2xhdXNlCiAgKgpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCAwYjQwODRiZGMxLi45ZjJmOWMzZDFlIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTg2NCw2ICsxODY0LDggQEAgdHlwZWRlZiBzdHJ1 Y3QgVGFibGVGdW5jU2NhblN0YXRlCiAJRXhwclN0YXRlICAqcm93ZXhwcjsJCS8qIHN0YXRl IGZvciByb3ctZ2VuZXJhdGluZyBleHByZXNzaW9uICovCiAJTGlzdAkgICAqY29sZXhwcnM7 CQkvKiBzdGF0ZSBmb3IgY29sdW1uLWdlbmVyYXRpbmcgZXhwcmVzc2lvbiAqLwogCUxpc3QJ ICAgKmNvbGRlZmV4cHJzOwkvKiBzdGF0ZSBmb3IgY29sdW1uIGRlZmF1bHQgZXhwcmVzc2lv bnMgKi8KKwlMaXN0CSAgICpjb2x2YWxleHByczsJLyogc3RhdGUgZm9yIGNvbHVtbiB2YWx1 ZSBleHByZXNzaW9uICovCisJTGlzdAkgICAqcGFzc2luZ3ZhbGV4cHJzOyAvKiBzdGF0ZSBm b3IgUEFTU0lORyBhcmd1bWVudCBleHByZXNzaW9uICovCiAJTGlzdAkgICAqbnNfbmFtZXM7 CQkvKiBzYW1lIGFzIFRhYmxlRnVuYy5uc19uYW1lcyAqLwogCUxpc3QJICAgKm5zX3VyaXM7 CQkvKiBsaXN0IG9mIHN0YXRlcyBvZiBuYW1lc3BhY2UgVVJJIGV4cHJzICovCiAJQml0bWFw c2V0ICAqbm90bnVsbHM7CQkvKiBudWxsYWJpbGl0eSBmbGFnIGZvciBlYWNoIG91dHB1dCBj b2x1bW4gKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oIGIv c3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKaW5kZXggNjkzMmQyZjEzZC4uM2MxMjBk N2JhZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKQEAgLTExMCw2ICsxMTAsOCBAQCBleHRl cm4gSnNvbkZvcm1hdCAqbWFrZUpzb25Gb3JtYXQoSnNvbkZvcm1hdFR5cGUgdHlwZSwgSnNv bkVuY29kaW5nIGVuY29kaW5nLAogCQkJCQkJCQkgIGludCBsb2NhdGlvbik7CiBleHRlcm4g SnNvblZhbHVlRXhwciAqbWFrZUpzb25WYWx1ZUV4cHIoRXhwciAqZXhwciwgSnNvbkZvcm1h dCAqZm9ybWF0KTsKIGV4dGVybiBKc29uQmVoYXZpb3IgKm1ha2VKc29uQmVoYXZpb3IoSnNv bkJlaGF2aW9yVHlwZSB0eXBlLCBOb2RlICpleHByKTsKK2V4dGVybiBOb2RlICptYWtlSnNv blRhYmxlSm9pbmVkUGxhbihKc29uVGFibGVQbGFuSm9pblR5cGUgdHlwZSwKKwkJCQkJCQkJ CSBOb2RlICpwbGFuMSwgTm9kZSAqcGxhbjIsIGludCBsb2NhdGlvbik7CiBleHRlcm4gTm9k ZSAqbWFrZUpzb25LZXlWYWx1ZShOb2RlICprZXksIE5vZGUgKnZhbHVlKTsKIGV4dGVybiBO b2RlICptYWtlSnNvbklzUHJlZGljYXRlKE5vZGUgKmV4cHIsIEpzb25Gb3JtYXQgKmZvcm1h dCwKIAkJCQkJCQkJIEpzb25WYWx1ZVR5cGUgaXRlbV90eXBlLCBib29sIHVuaXF1ZV9rZXlz LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCmluZGV4IDZmZmE0NTBhYjEuLmQzODUzNjY2MjIg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMv aW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKQEAgLTE3MjYsNiArMTcyNiwxOSBAQCB0eXBl ZGVmIGVudW0gSnNvblF1b3RlcwogCUpTX1FVT1RFU19PTUlUCQkJCS8qIE9NSVQgUVVPVEVT ICovCiB9IEpzb25RdW90ZXM7CiAKKy8qCisgKiBKc29uVGFibGVDb2x1bW5UeXBlIC0KKyAq CQllbnVtZXJhdGlvbiBvZiBKU09OX1RBQkxFIGNvbHVtbiB0eXBlcworICovCit0eXBlZGVm IGVudW0gSnNvblRhYmxlQ29sdW1uVHlwZQoreworCUpUQ19GT1JfT1JESU5BTElUWSwKKwlK VENfUkVHVUxBUiwKKwlKVENfRVhJU1RTLAorCUpUQ19GT1JNQVRURUQsCisJSlRDX05FU1RF RCwKK30gSnNvblRhYmxlQ29sdW1uVHlwZTsKKwogLyoKICAqIEpzb25PdXRwdXQgLQogICoJ CXJlcHJlc2VudGF0aW9uIG9mIEpTT04gb3V0cHV0IGNsYXVzZSAoUkVUVVJOSU5HIHR5cGUg W0ZPUk1BVCBmb3JtYXRdKQpAQCAtMTc3OSw2ICsxNzkyLDgzIEBAIHR5cGVkZWYgc3RydWN0 IEpzb25GdW5jRXhwcgogCWludAkJCWxvY2F0aW9uOwkJLyogdG9rZW4gbG9jYXRpb24sIG9y IC0xIGlmIHVua25vd24gKi8KIH0gSnNvbkZ1bmNFeHByOwogCisvKgorICogSnNvblRhYmxl Q29sdW1uIC0KKyAqCQl1bnRyYW5zZm9ybWVkIHJlcHJlc2VudGF0aW9uIG9mIEpTT05fVEFC TEUgY29sdW1uCisgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25UYWJsZUNvbHVtbgoreworCU5v ZGVUYWcJCXR5cGU7CisJSnNvblRhYmxlQ29sdW1uVHlwZSBjb2x0eXBlOwkvKiBjb2x1bW4g dHlwZSAqLworCWNoYXIJICAgKm5hbWU7CQkJLyogY29sdW1uIG5hbWUgKi8KKwlUeXBlTmFt ZSAgICp0eXBlTmFtZTsJCS8qIGNvbHVtbiB0eXBlIG5hbWUgKi8KKwljaGFyCSAgICpwYXRo c3BlYzsJCS8qIHBhdGggc3BlY2lmaWNhdGlvbiwgaWYgYW55ICovCisJY2hhcgkgICAqcGF0 aG5hbWU7CQkvKiBwYXRoIG5hbWUsIGlmIGFueSAqLworCUpzb25Gb3JtYXQgKmZvcm1hdDsJ CQkvKiBKU09OIGZvcm1hdCBjbGF1c2UsIGlmIHNwZWNpZmllZCAqLworCUpzb25XcmFwcGVy IHdyYXBwZXI7CQkvKiBXUkFQUEVSIGJlaGF2aW9yIGZvciBmb3JtYXR0ZWQgY29sdW1ucyAq LworCWJvb2wJCW9taXRfcXVvdGVzOwkvKiBvbWl0IG9yIGtlZXAgcXVvdGVzIG9uIHNjYWxh ciBzdHJpbmdzPyAqLworCUxpc3QJICAgKmNvbHVtbnM7CQkvKiBuZXN0ZWQgY29sdW1ucyAq LworCUpzb25CZWhhdmlvciAqb25fZW1wdHk7CQkvKiBPTiBFTVBUWSBiZWhhdmlvciAqLwor CUpzb25CZWhhdmlvciAqb25fZXJyb3I7CQkvKiBPTiBFUlJPUiBiZWhhdmlvciAqLworCWlu dAkJCWxvY2F0aW9uOwkJLyogdG9rZW4gbG9jYXRpb24sIG9yIC0xIGlmIHVua25vd24gKi8K K30gSnNvblRhYmxlQ29sdW1uOworCisvKgorICogSnNvblRhYmxlUGxhblR5cGUgLQorICoJ CWZsYWdzIGZvciBKU09OX1RBQkxFIHBsYW4gbm9kZSB0eXBlcyByZXByZXNlbnRhdGlvbgor ICovCit0eXBlZGVmIGVudW0gSnNvblRhYmxlUGxhblR5cGUKK3sKKwlKU1RQX0RFRkFVTFQs CisJSlNUUF9TSU1QTEUsCisJSlNUUF9KT0lORUQsCit9IEpzb25UYWJsZVBsYW5UeXBlOwor CisvKgorICogSnNvblRhYmxlUGxhbkpvaW5UeXBlIC0KKyAqCQlmbGFncyBmb3IgSlNPTl9U QUJMRSBqb2luIHR5cGVzIHJlcHJlc2VudGF0aW9uCisgKi8KK3R5cGVkZWYgZW51bSBKc29u VGFibGVQbGFuSm9pblR5cGUKK3sKKwlKU1RQSl9JTk5FUiA9IDB4MDEsCisJSlNUUEpfT1VU RVIgPSAweDAyLAorCUpTVFBKX0NST1NTID0gMHgwNCwKKwlKU1RQSl9VTklPTiA9IDB4MDgs Cit9IEpzb25UYWJsZVBsYW5Kb2luVHlwZTsKKwordHlwZWRlZiBzdHJ1Y3QgSnNvblRhYmxl UGxhbiBKc29uVGFibGVQbGFuOworCisvKgorICogSnNvblRhYmxlUGxhbiAtCisgKgkJdW50 cmFuc2Zvcm1lZCByZXByZXNlbnRhdGlvbiBvZiBKU09OX1RBQkxFIHBsYW4gbm9kZQorICov CitzdHJ1Y3QgSnNvblRhYmxlUGxhbgoreworCU5vZGVUYWcJCXR5cGU7CisJSnNvblRhYmxl UGxhblR5cGUgcGxhbl90eXBlOwkvKiBwbGFuIHR5cGUgKi8KKwlKc29uVGFibGVQbGFuSm9p blR5cGUgam9pbl90eXBlOwkvKiBqb2luIHR5cGUgKGZvciBqb2luZWQgcGxhbiBvbmx5KSAq LworCUpzb25UYWJsZVBsYW4gKnBsYW4xOwkJLyogZmlyc3Qgam9pbmVkIHBsYW4gKi8KKwlK c29uVGFibGVQbGFuICpwbGFuMjsJCS8qIHNlY29uZCBqb2luZWQgcGxhbiAqLworCWNoYXIJ ICAgKnBhdGhuYW1lOwkJLyogcGF0aCBuYW1lIChmb3Igc2ltcGxlIHBsYW4gb25seSkgKi8K KwlpbnQJCQlsb2NhdGlvbjsJCS8qIHRva2VuIGxvY2F0aW9uLCBvciAtMSBpZiB1bmtub3du ICovCit9OworCisvKgorICogSnNvblRhYmxlIC0KKyAqCQl1bnRyYW5zZm9ybWVkIHJlcHJl c2VudGF0aW9uIG9mIEpTT05fVEFCTEUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvblRhYmxl Cit7CisJTm9kZVRhZwkJdHlwZTsKKwlKc29uQ29tbW9uICpjb21tb247CQkJLyogY29tbW9u IEpTT04gcGF0aCBzeW50YXggZmllbGRzICovCisJTGlzdAkgICAqY29sdW1uczsJCS8qIGxp c3Qgb2YgSnNvblRhYmxlQ29sdW1uICovCisJSnNvblRhYmxlUGxhbiAqcGxhbjsJCS8qIGpv aW4gcGxhbiwgaWYgc3BlY2lmaWVkICovCisJSnNvbkJlaGF2aW9yICpvbl9lcnJvcjsJCS8q IE9OIEVSUk9SIGJlaGF2aW9yLCBpZiBzcGVjaWZpZWQgKi8KKwlBbGlhcwkgICAqYWxpYXM7 CQkJLyogdGFibGUgYWxpYXMgaW4gRlJPTSBjbGF1c2UgKi8KKwlib29sCQlsYXRlcmFsOwkJ LyogZG9lcyBpdCBoYXZlIExBVEVSQUwgcHJlZml4PyAqLworCWludAkJCWxvY2F0aW9uOwkJ LyogdG9rZW4gbG9jYXRpb24sIG9yIC0xIGlmIHVua25vd24gKi8KK30gSnNvblRhYmxlOwor CiAvKgogICogSnNvbktleVZhbHVlIC0KICAqCQl1bnRyYW5zZm9ybWVkIHJlcHJlc2VudGF0 aW9uIG9mIEpTT04gb2JqZWN0IGtleS12YWx1ZSBwYWlyIGZvcgpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9k ZXMuaAppbmRleCA5NmE3OWQxNjY1Li42M2VmZDczYzAzIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9ub2Rlcy9wcmltbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9k ZXMuaApAQCAtODYsOCArODYsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgUmFuZ2VWYXIKIAlpbnQJ CQlsb2NhdGlvbjsKIH0gUmFuZ2VWYXI7CiAKK3R5cGVkZWYgZW51bSBUYWJsZUZ1bmNUeXBl Cit7CisJVEZUX1hNTFRBQkxFLAorCVRGVF9KU09OX1RBQkxFCit9IFRhYmxlRnVuY1R5cGU7 CisKIC8qCi0gKiBUYWJsZUZ1bmMgLSBub2RlIGZvciBhIHRhYmxlIGZ1bmN0aW9uLCBzdWNo IGFzIFhNTFRBQkxFLgorICogVGFibGVGdW5jIC0gbm9kZSBmb3IgYSB0YWJsZSBmdW5jdGlv biwgc3VjaCBhcyBYTUxUQUJMRSBvciBKU09OX1RBQkxFLgogICoKICAqIEVudHJpZXMgaW4g dGhlIG5zX25hbWVzIGxpc3QgYXJlIGVpdGhlciBTdHJpbmcgbm9kZXMgY29udGFpbmluZwog ICogbGl0ZXJhbCBuYW1lc3BhY2UgbmFtZXMsIG9yIE5VTEwgcG9pbnRlcnMgdG8gcmVwcmVz ZW50IERFRkFVTFQuCkBAIC05NSw2ICsxMDEsOCBAQCB0eXBlZGVmIHN0cnVjdCBSYW5nZVZh cgogdHlwZWRlZiBzdHJ1Y3QgVGFibGVGdW5jCiB7CiAJTm9kZVRhZwkJdHlwZTsKKwkvKiBY TUxUQUJMRSBvciBKU09OX1RBQkxFICovCisJVGFibGVGdW5jVHlwZSBmdW5jdHlwZTsKIAkv KiBsaXN0IG9mIG5hbWVzcGFjZSBVUkkgZXhwcmVzc2lvbnMgKi8KIAlMaXN0CSAgICpuc191 cmlzIHBnX25vZGVfYXR0cihxdWVyeV9qdW1ibGVfaWdub3JlKTsKIAkvKiBsaXN0IG9mIG5h bWVzcGFjZSBuYW1lcyBvciBOVUxMICovCkBAIC0xMTUsOCArMTIzLDE0IEBAIHR5cGVkZWYg c3RydWN0IFRhYmxlRnVuYwogCUxpc3QJICAgKmNvbGV4cHJzOwogCS8qIGxpc3Qgb2YgY29s dW1uIGRlZmF1bHQgZXhwcmVzc2lvbnMgKi8KIAlMaXN0CSAgICpjb2xkZWZleHBycyBwZ19u b2RlX2F0dHIocXVlcnlfanVtYmxlX2lnbm9yZSk7CisJLyogbGlzdCBvZiBjb2x1bW4gdmFs dWUgZXhwcmVzc2lvbnMgKi8KKwlMaXN0CSAgICpjb2x2YWxleHBycyBwZ19ub2RlX2F0dHIo cXVlcnlfanVtYmxlX2lnbm9yZSk7CisJLyogbGlzdCBvZiBQQVNTSU5HIGFyZ3VtZW50IGV4 cHJlc3Npb25zICovCisJTGlzdAkgICAqcGFzc2luZ3ZhbGV4cHJzIHBnX25vZGVfYXR0cihx dWVyeV9qdW1ibGVfaWdub3JlKTsKIAkvKiBudWxsYWJpbGl0eSBmbGFnIGZvciBlYWNoIG91 dHB1dCBjb2x1bW4gKi8KIAlCaXRtYXBzZXQgICpub3RudWxscyBwZ19ub2RlX2F0dHIocXVl cnlfanVtYmxlX2lnbm9yZSk7CisJLyogSlNPTl9UQUJMRSBwbGFuICovCisJTm9kZQkgICAq cGxhbiBwZ19ub2RlX2F0dHIocXVlcnlfanVtYmxlX2lnbm9yZSk7CiAJLyogY291bnRzIGZy b20gMDsgLTEgaWYgbm9uZSBzcGVjaWZpZWQgKi8KIAlpbnQJCQlvcmRpbmFsaXR5Y29sIHBn X25vZGVfYXR0cihxdWVyeV9qdW1ibGVfaWdub3JlKTsKIAkvKiB0b2tlbiBsb2NhdGlvbiwg b3IgLTEgaWYgdW5rbm93biAqLwpAQCAtMTUwNiw3ICsxNTIwLDggQEAgdHlwZWRlZiBlbnVt IEpzb25FeHByT3AKIHsKIAlKU09OX1ZBTFVFX09QLAkJCQkvKiBKU09OX1ZBTFVFKCkgKi8K IAlKU09OX1FVRVJZX09QLAkJCQkvKiBKU09OX1FVRVJZKCkgKi8KLQlKU09OX0VYSVNUU19P UAkJCQkvKiBKU09OX0VYSVNUUygpICovCisJSlNPTl9FWElTVFNfT1AsCQkJCS8qIEpTT05f RVhJU1RTKCkgKi8KKwlKU09OX1RBQkxFX09QCQkJCS8qIEpTT05fVEFCTEUoKSAqLwogfSBK c29uRXhwck9wOwogCiAvKgpAQCAtMTcyMSw2ICsxNzM2LDQ4IEBAIHR5cGVkZWYgc3RydWN0 IEpzb25FeHByCiAJaW50CQkJbG9jYXRpb247CQkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEg aWYgdW5rbm93biAqLwogfSBKc29uRXhwcjsKIAorLyoKKyAqIEpzb25UYWJsZVBhdGgKKyAq CQlBIEpTT04gcGF0aCBleHByZXNzaW9uIHRvIGJlIGNvbXB1dGVkIGFzIHBhcnQgb2YgZXZh bHVhdGluZworICoJCWEgSlNPTl9UQUJMRSBwbGFuIG5vZGUKKyAqLwordHlwZWRlZiBzdHJ1 Y3QgSnNvblRhYmxlUGF0aAoreworCU5vZGVUYWcJCXR5cGU7CisKKwlDb25zdAkgICAqdmFs dWU7CisJY2hhcgkgICAqbmFtZTsKK30gSnNvblRhYmxlUGF0aDsKKworLyoKKyAqIEpzb25U YWJsZVBhcmVudCAtCisgKgkJdHJhbnNmb3JtZWQgcmVwcmVzZW50YXRpb24gb2YgcGFyZW50 IEpTT05fVEFCTEUgcGxhbiBub2RlCisgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25UYWJsZVBh cmVudAoreworCU5vZGVUYWcJCQl0eXBlOworCUpzb25UYWJsZVBhdGggICpwYXRoOworCU5v ZGUJCSAgICpjaGlsZDsJCS8qIG5lc3RlZCBjb2x1bW5zLCBpZiBhbnkgKi8KKwlib29sCQkJ b3V0ZXJKb2luOwkvKiBvdXRlciBvciBpbm5lciBqb2luIGZvciBuZXN0ZWQgY29sdW1ucz8g Ki8KKwlpbnQJCQkJY29sTWluOwkJLyogbWluIGNvbHVtbiBpbmRleCBpbiB0aGUgcmVzdWx0 aW5nIGNvbHVtbgorCQkJCQkJCQkgKiBsaXN0ICovCisJaW50CQkJCWNvbE1heDsJCS8qIG1h eCBjb2x1bW4gaW5kZXggaW4gdGhlIHJlc3VsdGluZyBjb2x1bW4KKwkJCQkJCQkJICogbGlz dCAqLworCWJvb2wJCQllcnJvck9uRXJyb3I7CS8qIEVSUk9SL0VNUFRZIE9OIEVSUk9SIGJl aGF2aW9yICovCit9IEpzb25UYWJsZVBhcmVudDsKKworLyoKKyAqIEpzb25UYWJsZVNpYmxp bmcgLQorICoJCXRyYW5zZm9ybWVkIHJlcHJlc2VudGF0aW9uIG9mIGpvaW5lZCBzaWJsaW5n IEpTT05fVEFCTEUgcGxhbiBub2RlCisgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25UYWJsZVNp YmxpbmcKK3sKKwlOb2RlVGFnCQl0eXBlOworCU5vZGUJICAgKmxhcmc7CQkJLyogbGVmdCBq b2luIG5vZGUgKi8KKwlOb2RlCSAgICpyYXJnOwkJCS8qIHJpZ2h0IGpvaW4gbm9kZSAqLwor CWJvb2wJCWNyb3NzOwkJCS8qIGNyb3NzIG9yIHVuaW9uIGpvaW4/ICovCit9IEpzb25UYWJs ZVNpYmxpbmc7CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqIE51bGxUZXN0CiAgKgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oIGIvc3JjL2luY2x1ZGUvcGFy c2VyL2t3bGlzdC5oCmluZGV4IDA5NTRkOWZjN2IuLmY4OGE2YzlhYzYgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9wYXJzZXIv a3dsaXN0LmgKQEAgLTI0Miw2ICsyNDIsNyBAQCBQR19LRVlXT1JEKCJqc29uX29iamVjdGFn ZyIsIEpTT05fT0JKRUNUQUdHLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdf S0VZV09SRCgianNvbl9xdWVyeSIsIEpTT05fUVVFUlksIENPTF9OQU1FX0tFWVdPUkQsIEJB UkVfTEFCRUwpCiBQR19LRVlXT1JEKCJqc29uX3NjYWxhciIsIEpTT05fU0NBTEFSLCBDT0xf TkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgianNvbl9zZXJpYWxpemUi LCBKU09OX1NFUklBTElaRSwgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tF WVdPUkQoImpzb25fdGFibGUiLCBKU09OX1RBQkxFLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJF X0xBQkVMKQogUEdfS0VZV09SRCgianNvbl92YWx1ZSIsIEpTT05fVkFMVUUsIENPTF9OQU1F X0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJrZWVwIiwgS0VFUCwgVU5SRVNF UlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgia2V5IiwgS0VZLCBVTlJF U0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCkBAIC0yODQsNiArMjg1LDcgQEAgUEdfS0VZ V09SRCgibmFtZXMiLCBOQU1FUywgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQog UEdfS0VZV09SRCgibmF0aW9uYWwiLCBOQVRJT05BTCwgQ09MX05BTUVfS0VZV09SRCwgQkFS RV9MQUJFTCkKIFBHX0tFWVdPUkQoIm5hdHVyYWwiLCBOQVRVUkFMLCBUWVBFX0ZVTkNfTkFN RV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgibmNoYXIiLCBOQ0hBUiwgQ09M X05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQoIm5lc3RlZCIsIE5FU1RF RCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgibmV3Iiwg TkVXLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJuZXh0 IiwgTkVYVCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgi bmZjIiwgTkZDLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCkBAIC0zMzQsNyAr MzM2LDkgQEAgUEdfS0VZV09SRCgicGFydGlhbCIsIFBBUlRJQUwsIFVOUkVTRVJWRURfS0VZ V09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInBhcnRpdGlvbiIsIFBBUlRJVElPTiwg VU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgicGFzc2luZyIs IFBBU1NJTkcsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQo InBhc3N3b3JkIiwgUEFTU1dPUkQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkK K1BHX0tFWVdPUkQoInBhdGgiLCBQQVRILCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFC RUwpCiBQR19LRVlXT1JEKCJwbGFjaW5nIiwgUExBQ0lORywgUkVTRVJWRURfS0VZV09SRCwg QkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQoInBsYW4iLCBQTEFOLCBVTlJFU0VSVkVEX0tFWVdP UkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJwbGFucyIsIFBMQU5TLCBVTlJFU0VSVkVE X0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJwb2xpY3kiLCBQT0xJQ1ksIFVO UkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInBvc2l0aW9uIiwg UE9TSVRJT04sIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9wYXJzZXIvcGFyc2VfY2xhdXNlLmggYi9zcmMvaW5jbHVkZS9wYXJzZXIv cGFyc2VfY2xhdXNlLmgKaW5kZXggOGUyNjQ4MmRiNC4uNzE1MmE4ZWY0OCAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX2NsYXVzZS5oCisrKyBiL3NyYy9pbmNsdWRl L3BhcnNlci9wYXJzZV9jbGF1c2UuaApAQCAtNTEsNCArNTEsNyBAQCBleHRlcm4gTGlzdCAq YWRkVGFyZ2V0VG9Tb3J0TGlzdChQYXJzZVN0YXRlICpwc3RhdGUsIFRhcmdldEVudHJ5ICp0 bGUsCiBleHRlcm4gSW5kZXggYXNzaWduU29ydEdyb3VwUmVmKFRhcmdldEVudHJ5ICp0bGUs IExpc3QgKnRsaXN0KTsKIGV4dGVybiBib29sIHRhcmdldElzSW5Tb3J0TGlzdChUYXJnZXRF bnRyeSAqdGxlLCBPaWQgc29ydG9wLCBMaXN0ICpzb3J0TGlzdCk7CiAKKy8qIGZ1bmN0aW9u cyBpbiBwYXJzZV9qc29udGFibGUuYyAqLworZXh0ZXJuIFBhcnNlTmFtZXNwYWNlSXRlbSAq dHJhbnNmb3JtSnNvblRhYmxlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvblRhYmxlICpqdCk7 CisKICNlbmRpZgkJCQkJCQkvKiBQQVJTRV9DTEFVU0VfSCAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvdXRpbHMvanNvbnBhdGguaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25wYXRo LmgKaW5kZXggNGRhZTc4YTk4Yy4uYjdhZGE3N2NiMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvdXRpbHMvanNvbnBhdGguaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9qc29ucGF0aC5o CkBAIC0xNSw2ICsxNSw3IEBACiAjZGVmaW5lIEpTT05QQVRIX0gKIAogI2luY2x1ZGUgImZt Z3IuaCIKKyNpbmNsdWRlICJleGVjdXRvci90YWJsZWZ1bmMuaCIKICNpbmNsdWRlICJub2Rl cy9wZ19saXN0LmgiCiAjaW5jbHVkZSAibm9kZXMvcHJpbW5vZGVzLmgiCiAjaW5jbHVkZSAi dXRpbHMvanNvbmIuaCIKQEAgLTI4OCw0ICsyODksNiBAQCBleHRlcm4gRGF0dW0gSnNvblBh dGhRdWVyeShEYXR1bSBqYiwgSnNvblBhdGggKmpwLCBKc29uV3JhcHBlciB3cmFwcGVyLAog ZXh0ZXJuIEpzb25iVmFsdWUgKkpzb25QYXRoVmFsdWUoRGF0dW0gamIsIEpzb25QYXRoICpq cCwgYm9vbCAqZW1wdHksCiAJCQkJCQkJCSBib29sICplcnJvciwgTGlzdCAqdmFycyk7CiAK K2V4dGVybiBQR0RMTElNUE9SVCBjb25zdCBUYWJsZUZ1bmNSb3V0aW5lIEpzb25iVGFibGVS b3V0aW5lOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvanNvbl9zcWxqc29uLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbl9z cWxqc29uLm91dAppbmRleCA4Yjg3NTgwNzUyLi45OTVmMjY3NDA0IDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25fc3FsanNvbi5vdXQKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9qc29uX3NxbGpzb24ub3V0CkBAIC0xNiwzICsxNiw5IEBA IEVSUk9SOiAgSlNPTl9RVUVSWSgpIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yIHRoZSBq c29uIHR5cGUKIExJTkUgMTogU0VMRUNUIEpTT05fUVVFUlkoTlVMTCBGT1JNQVQgSlNPTiwg JyQnKTsKICAgICAgICAgICAgICAgIF4KIEhJTlQ6ICBUcnkgY2FzdGluZyB0aGUgYXJndW1l bnQgdG8ganNvbmIKKy0tIEpTT05fVEFCTEUKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShO VUxMIEZPUk1BVCBKU09OLCAnJCcgQ09MVU1OUyAoZm9vIHRleHQpKTsKK0VSUk9SOiAgSlNP Tl9UQUJMRSgpIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yIHRoZSBqc29uIHR5cGUKK0xJ TkUgMTogU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKE5VTEwgRk9STUFUIEpTT04sICckJyBD T0xVTU5TIChmb28gLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitI SU5UOiAgVHJ5IGNhc3RpbmcgdGhlIGFyZ3VtZW50IHRvIGpzb25iCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iX3NxbGpzb24ub3V0IGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9qc29uYl9zcWxqc29uLm91dAppbmRleCAzMDRkMTM1Mzk0Li4x ZjAwNDRlZDZiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25i X3NxbGpzb24ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfc3Fs anNvbi5vdXQKQEAgLTEwMjIsMyArMTAyMiwxMDcyIEBAIENSRUFURSBJTkRFWCBPTiB0ZXN0 X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckWzEsIDAgdG8gJC5hID8gKEAu ZGF0ZXRpCiBFUlJPUjogIGZ1bmN0aW9ucyBpbiBpbmRleCBleHByZXNzaW9uIG11c3QgYmUg bWFya2VkIElNTVVUQUJMRQogQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0 eSAoSlNPTl9RVUVSWShqcywgJyRbMSwgJC5hID8gKEAuZGF0ZXRpbWUoIkhIOk1JIikgPT0g JHgpXScgUEFTU0lORyAnMTI6MzQnOjp0aW1lIEFTIHgpKTsKIERST1AgVEFCTEUgdGVzdF9q c29uYl9tdXRhYmlsaXR5OworLS0gSlNPTl9UQUJMRQorLS0gU2hvdWxkIGZhaWwgKEpTT05f VEFCTEUgY2FuIGJlIHVzZWQgb25seSBpbiBGUk9NIGNsYXVzZSkKK1NFTEVDVCBKU09OX1RB QkxFKCdbXScsICckJyk7CitFUlJPUjogIHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIoIgor TElORSAxOiBTRUxFQ1QgSlNPTl9UQUJMRSgnW10nLCAnJCcpOworICAgICAgICAgICAgICAg ICAgICAgICAgIF4KKy0tIFNob3VsZCBmYWlsIChubyBjb2x1bW5zKQorU0VMRUNUICogRlJP TSBKU09OX1RBQkxFKE5VTEwsICckJyBDT0xVTU5TICgpKTsKK0VSUk9SOiAgc3ludGF4IGVy cm9yIGF0IG9yIG5lYXIgIikiCitMSU5FIDE6IFNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShO VUxMLCAnJCcgQ09MVU1OUyAoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXgorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFIChOVUxM Ojpqc29uYiwgJyQnIENPTFVNTlMgKHYxIHRpbWVzdGFtcCkpIEFTIGYgKHYxLCB2Mik7CitF UlJPUjogIEpTT05fVEFCTEUgZnVuY3Rpb24gaGFzIDEgY29sdW1ucyBhdmFpbGFibGUgYnV0 IDIgY29sdW1ucyBzcGVjaWZpZWQKKy0tIE5VTEwgPT4gZW1wdHkgdGFibGUKK1NFTEVDVCAq IEZST00gSlNPTl9UQUJMRShOVUxMOjpqc29uYiwgJyQnIENPTFVNTlMgKGZvbyBpbnQpKSBi YXI7CisgZm9vIAorLS0tLS0KKygwIHJvd3MpCisKKy0tCitTRUxFQ1QgKiBGUk9NIEpTT05f VEFCTEUoanNvbmIgJzEyMycsICckJworCUNPTFVNTlMgKGl0ZW0gaW50IFBBVEggJyQnLCBm b28gaW50KSkgYmFyOworIGl0ZW0gfCBmb28gCistLS0tLS0rLS0tLS0KKyAgMTIzIHwgICAg CisoMSByb3cpCisKKy0tIEpTT05fVEFCTEU6IGJhc2ljIGZ1bmN0aW9uYWxpdHkKK0NSRUFU RSBET01BSU4ganNvbmJfdGVzdF9kb21haW4gQVMgdGV4dCBDSEVDSyAodmFsdWUgPD4gJ2Zv bycpOworU0VMRUNUICoKK0ZST00KKwkoVkFMVUVTCisJCSgnMScpLAorCQkoJ1tdJyksCisJ CSgne30nKSwKKwkJKCdbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBm YWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdJykKKwkpIHZh bHMoanMpCisJTEVGVCBPVVRFUiBKT0lOCistLSBKU09OX1RBQkxFIGlzIGltcGxpY2l0bHkg bGF0ZXJhbAorCUpTT05fVEFCTEUoCisJCXZhbHMuanM6Ompzb25iLCAnbGF4ICRbKl0nCisJ CUNPTFVNTlMgKAorCQkJaWQgRk9SIE9SRElOQUxJVFksCisJCQlpZDIgRk9SIE9SRElOQUxJ VFksIC0tIGFsbG93ZWQgYWRkaXRpb25hbCBvcmRpbmFsaXR5IGNvbHVtbnMKKwkJCSJpbnQi IGludCBQQVRIICckJywKKwkJCSJ0ZXh0IiB0ZXh0IFBBVEggJyQnLAorCQkJImNoYXIoNCki IGNoYXIoNCkgUEFUSCAnJCcsCisJCQkiYm9vbCIgYm9vbCBQQVRIICckJywKKwkJCSJudW1l cmljIiBudW1lcmljIFBBVEggJyQnLAorCQkJImRvbWFpbiIganNvbmJfdGVzdF9kb21haW4g UEFUSCAnJCcsCisJCQlqcyBqc29uIFBBVEggJyQnLAorCQkJamIganNvbmIgUEFUSCAnJCcs CisJCQlqc3QgdGV4dCAgICBGT1JNQVQgSlNPTiAgUEFUSCAnJCcsCisJCQlqc2MgY2hhcig0 KSBGT1JNQVQgSlNPTiAgUEFUSCAnJCcsCisJCQlqc3YgdmFyY2hhcig0KSBGT1JNQVQgSlNP TiAgUEFUSCAnJCcsCisJCQlqc2IganNvbmIgRk9STUFUIEpTT04gUEFUSCAnJCcsCisJCQlq c2JxIGpzb25iIEZPUk1BVCBKU09OIFBBVEggJyQnIE9NSVQgUVVPVEVTLAorCQkJYWFhIGlu dCwgLS0gaW1wbGljaXQgcGF0aCAnJC4iYWFhIicsCisJCQlhYWExIGludCBQQVRIICckLmFh YScsCisJCQlleGlzdHMxIGJvb2wgRVhJU1RTIFBBVEggJyQuYWFhJywKKwkJCWV4aXN0czIg aW50IEVYSVNUUyBQQVRIICckLmFhYScsCisJCQlleGlzdHMzIGludCBFWElTVFMgUEFUSCAn c3RyaWN0ICQuYWFhJyBVTktOT1dOIE9OIEVSUk9SLAorCQkJZXhpc3RzNCB0ZXh0IEVYSVNU UyBQQVRIICdzdHJpY3QgJC5hYWEnIEZBTFNFIE9OIEVSUk9SLAorCQkJanMyIGpzb24gUEFU SCAnJCcsCisJCQlqc2IydyBqc29uYiBQQVRIICckJyBXSVRIIFdSQVBQRVIsCisJCQlqc2Iy cSBqc29uYiBQQVRIICckJyBPTUlUIFFVT1RFUywKKwkJCWlhIGludFtdIFBBVEggJyQnLAor CQkJdGEgdGV4dFtdIFBBVEggJyQnLAorCQkJamJhIGpzb25iW10gUEFUSCAnJCcKKwkJKQor CSkganQKKwlPTiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAganMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBp ZCB8IGlkMiB8IGludCB8ICB0ZXh0ICAgfCBjaGFyKDQpIHwgYm9vbCB8IG51bWVyaWMgfCBk b21haW4gIHwgICAgICBqcyAgICAgIHwgICAgICBqYiAgICAgIHwgICAgIGpzdCAgICAgIHwg anNjICB8IGpzdiAgfCAgICAganNiICAgICAgfCAgICAganNicSAgICAgfCBhYWEgfCBhYWEx IHwgZXhpc3RzMSB8IGV4aXN0czIgfCBleGlzdHMzIHwgZXhpc3RzNCB8ICAgICBqczIgICAg ICB8ICAgICBqc2IydyAgICAgIHwgICAganNiMnEgICAgIHwgaWEgfCB0YSB8IGpiYSAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tKy0tLS0tKy0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0rLS0tLSstLS0tKy0tLS0tCisgMSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAxIHwgICAxIHwgICAxIHwgMSAgICAgICB8IDEgICAgICAgfCAgICAg IHwgICAgICAgMSB8IDEgICAgICAgfCAxICAgICAgICAgICAgfCAxICAgICAgICAgICAgfCAx ICAgICAgICAgICAgfCAxICAgIHwgMSAgICB8IDEgICAgICAgICAgICB8IDEgICAgICAgICAg ICB8ICAgICB8ICAgICAgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBmYWxzZSAg IHwgMSAgICAgICAgICAgIHwgWzFdICAgICAgICAgICAgfCAxICAgICAgICAgICAgfCAgICB8 ICAgIHwgCisgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwgICAgIHwg ICAgIHwgICAgICAgICB8ICAgICAgICAgfCAgICAgIHwgICAgICAgICB8ICAgICAgICAgfCAg ICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgIHwgICAg ICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICB8ICAgICAgfCAgICAgICAg IHwgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAg ICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICB8ICAgIHwgCisge30gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAxIHwgICAxIHwgICAgIHwgICAgICAgICB8ICAgICAgICAg fCAgICAgIHwgICAgICAgICB8ICAgICAgICAgfCB7fSAgICAgICAgICAgfCB7fSAgICAgICAg ICAgfCB7fSAgICAgICAgICAgfCB7fSAgIHwge30gICB8IHt9ICAgICAgICAgICB8IHt9ICAg ICAgICAgICB8ICAgICB8ICAgICAgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBm YWxzZSAgIHwge30gICAgICAgICAgIHwgW3t9XSAgICAgICAgICAgfCB7fSAgICAgICAgICAg fCAgICB8ICAgIHwgCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwg ZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICAxIHwg ICAxIHwgICAxIHwgMSAgICAgICB8IDEgICAgICAgfCAgICAgIHwgICAgICAgMSB8IDEgICAg ICAgfCAxICAgICAgICAgICAgfCAxICAgICAgICAgICAgfCAxICAgICAgICAgICAgfCAxICAg IHwgMSAgICB8IDEgICAgICAgICAgICB8IDEgICAgICAgICAgICB8ICAgICB8ICAgICAgfCBm ICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBmYWxzZSAgIHwgMSAgICAgICAgICAgIHwg WzFdICAgICAgICAgICAgfCAxICAgICAgICAgICAgfCAgICB8ICAgIHwgCisgWzEsIDEuMjMs ICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIz fSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICAyIHwgICAyIHwgICAxIHwgMS4yMyAgICB8IDEu MjMgICAgfCAgICAgIHwgICAgMS4yMyB8IDEuMjMgICAgfCAxLjIzICAgICAgICAgfCAxLjIz ICAgICAgICAgfCAxLjIzICAgICAgICAgfCAxLjIzIHwgMS4yMyB8IDEuMjMgICAgICAgICB8 IDEuMjMgICAgICAgICB8ICAgICB8ICAgICAgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAg ICAgfCBmYWxzZSAgIHwgMS4yMyAgICAgICAgIHwgWzEuMjNdICAgICAgICAgfCAxLjIzICAg ICAgICAgfCAgICB8ICAgIHwgCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwg bnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8 ICAzIHwgICAzIHwgICAyIHwgMiAgICAgICB8IDIgICAgICAgfCAgICAgIHwgICAgICAgMiB8 IDIgICAgICAgfCAiMiIgICAgICAgICAgfCAiMiIgICAgICAgICAgfCAiMiIgICAgICAgICAg fCAiMiIgIHwgIjIiICB8ICIyIiAgICAgICAgICB8IDIgICAgICAgICAgICB8ICAgICB8ICAg ICAgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBmYWxzZSAgIHwgIjIiICAgICAg ICAgIHwgWyIyIl0gICAgICAgICAgfCAyICAgICAgICAgICAgfCAgICB8ICAgIHwgCisgWzEs IDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFh IjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA0IHwgICA0IHwgICAgIHwgYWFhYWFh YSB8IGFhYWEgICAgfCAgICAgIHwgICAgICAgICB8IGFhYWFhYWEgfCAiYWFhYWFhYSIgICAg fCAiYWFhYWFhYSIgICAgfCAiYWFhYWFhYSIgICAgfCAiYWFhIHwgImFhYSB8ICJhYWFhYWFh IiAgICB8ICAgICAgICAgICAgICB8ICAgICB8ICAgICAgfCBmICAgICAgIHwgICAgICAgMCB8 ICAgICAgICAgfCBmYWxzZSAgIHwgImFhYWFhYWEiICAgIHwgWyJhYWFhYWFhIl0gICAgfCAg ICAgICAgICAgICAgfCAgICB8ICAgIHwgCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAi Zm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3Ry XCIiXSB8ICA1IHwgICA1IHwgICAgIHwgZm9vICAgICB8IGZvbyAgICAgfCAgICAgIHwgICAg ICAgICB8ICAgICAgICAgfCAiZm9vIiAgICAgICAgfCAiZm9vIiAgICAgICAgfCAiZm9vIiAg ICAgICAgfCAiZm9vIHwgImZvbyB8ICJmb28iICAgICAgICB8ICAgICAgICAgICAgICB8ICAg ICB8ICAgICAgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBmYWxzZSAgIHwgImZv byIgICAgICAgIHwgWyJmb28iXSAgICAgICAgfCAgICAgICAgICAgICAgfCAgICB8ICAgIHwg CisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUs IHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA2IHwgICA2IHwgICAgIHwg ICAgICAgICB8ICAgICAgICAgfCAgICAgIHwgICAgICAgICB8ICAgICAgICAgfCBudWxsICAg ICAgICAgfCBudWxsICAgICAgICAgfCBudWxsICAgICAgICAgfCBudWxsIHwgbnVsbCB8IG51 bGwgICAgICAgICB8IG51bGwgICAgICAgICB8ICAgICB8ICAgICAgfCBmICAgICAgIHwgICAg ICAgMCB8ICAgICAgICAgfCBmYWxzZSAgIHwgbnVsbCAgICAgICAgIHwgW251bGxdICAgICAg ICAgfCBudWxsICAgICAgICAgfCAgICB8ICAgIHwgCisgWzEsIDEuMjMsICIyIiwgImFhYWFh YWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwg Ilwic3RyXCIiXSB8ICA3IHwgICA3IHwgICAwIHwgZmFsc2UgICB8IGZhbHMgICAgfCBmICAg IHwgICAgICAgICB8IGZhbHNlICAgfCBmYWxzZSAgICAgICAgfCBmYWxzZSAgICAgICAgfCBm YWxzZSAgICAgICAgfCBmYWxzIHwgZmFscyB8IGZhbHNlICAgICAgICB8IGZhbHNlICAgICAg ICB8ICAgICB8ICAgICAgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBmYWxzZSAg IHwgZmFsc2UgICAgICAgIHwgW2ZhbHNlXSAgICAgICAgfCBmYWxzZSAgICAgICAgfCAgICB8 ICAgIHwgCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2Us IHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA4IHwgICA4IHwg ICAxIHwgdHJ1ZSAgICB8IHRydWUgICAgfCB0ICAgIHwgICAgICAgICB8IHRydWUgICAgfCB0 cnVlICAgICAgICAgfCB0cnVlICAgICAgICAgfCB0cnVlICAgICAgICAgfCB0cnVlIHwgdHJ1 ZSB8IHRydWUgICAgICAgICB8IHRydWUgICAgICAgICB8ICAgICB8ICAgICAgfCBmICAgICAg IHwgICAgICAgMCB8ICAgICAgICAgfCBmYWxzZSAgIHwgdHJ1ZSAgICAgICAgIHwgW3RydWVd ICAgICAgICAgfCB0cnVlICAgICAgICAgfCAgICB8ICAgIHwgCisgWzEsIDEuMjMsICIyIiwg ImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsx LDJdIiwgIlwic3RyXCIiXSB8ICA5IHwgICA5IHwgICAgIHwgICAgICAgICB8ICAgICAgICAg fCAgICAgIHwgICAgICAgICB8ICAgICAgICAgfCB7ImFhYSI6IDEyM30gfCB7ImFhYSI6IDEy M30gfCB7ImFhYSI6IDEyM30gfCB7ImFhIHwgeyJhYSB8IHsiYWFhIjogMTIzfSB8IHsiYWFh IjogMTIzfSB8IDEyMyB8ICAxMjMgfCB0ICAgICAgIHwgICAgICAgMSB8ICAgICAgIDEgfCB0 cnVlICAgIHwgeyJhYWEiOiAxMjN9IHwgW3siYWFhIjogMTIzfV0gfCB7ImFhYSI6IDEyM30g fCAgICB8ICAgIHwgCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwg ZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8IDEwIHwg IDEwIHwgICAgIHwgWzEsMl0gICB8IFsxLDIgICAgfCAgICAgIHwgICAgICAgICB8IFsxLDJd ICAgfCAiWzEsMl0iICAgICAgfCAiWzEsMl0iICAgICAgfCAiWzEsMl0iICAgICAgfCAiWzEs IHwgIlsxLCB8ICJbMSwyXSIgICAgICB8IFsxLCAyXSAgICAgICB8ICAgICB8ICAgICAgfCBm ICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBmYWxzZSAgIHwgIlsxLDJdIiAgICAgIHwg WyJbMSwyXSJdICAgICAgfCBbMSwgMl0gICAgICAgfCAgICB8ICAgIHwgCisgWzEsIDEuMjMs ICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIz fSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8IDExIHwgIDExIHwgICAgIHwgInN0ciIgICB8ICJz dHIgICAgfCAgICAgIHwgICAgICAgICB8ICJzdHIiICAgfCAiXCJzdHJcIiIgICAgfCAiXCJz dHJcIiIgICAgfCAiXCJzdHJcIiIgICAgfCAiXCJzIHwgIlwicyB8ICJcInN0clwiIiAgICB8 ICJzdHIiICAgICAgICB8ICAgICB8ICAgICAgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAg ICAgfCBmYWxzZSAgIHwgIlwic3RyXCIiICAgIHwgWyJcInN0clwiIl0gICAgfCAic3RyIiAg ICAgICAgfCAgICB8ICAgIHwgCisoMTQgcm93cykKKworLS0gSlNPTl9UQUJMRTogVGVzdCBi YWNrd2FyZCBwYXJzaW5nCitDUkVBVEUgVklFVyBqc29uYl90YWJsZV92aWV3IEFTCitTRUxF Q1QgKiBGUk9NCisJSlNPTl9UQUJMRSgKKwkJanNvbmIgJ251bGwnLCAnbGF4ICRbKl0nIFBB U1NJTkcgMSArIDIgQVMgYSwganNvbiAnImZvbyInIEFTICJiIGMiCisJCUNPTFVNTlMgKAor CQkJaWQgRk9SIE9SRElOQUxJVFksCisJCQlpZDIgRk9SIE9SRElOQUxJVFksIC0tIGFsbG93 ZWQgYWRkaXRpb25hbCBvcmRpbmFsaXR5IGNvbHVtbnMKKwkJCSJpbnQiIGludCBQQVRIICck JywKKwkJCSJ0ZXh0IiB0ZXh0IFBBVEggJyQnLAorCQkJImNoYXIoNCkiIGNoYXIoNCkgUEFU SCAnJCcsCisJCQkiYm9vbCIgYm9vbCBQQVRIICckJywKKwkJCSJudW1lcmljIiBudW1lcmlj IFBBVEggJyQnLAorCQkJImRvbWFpbiIganNvbmJfdGVzdF9kb21haW4gUEFUSCAnJCcsCisJ CQlqcyBqc29uIFBBVEggJyQnLAorCQkJamIganNvbmIgUEFUSCAnJCcsCisJCQlqc3QgdGV4 dCAgICBGT1JNQVQgSlNPTiAgUEFUSCAnJCcsCisJCQlqc2MgY2hhcig0KSBGT1JNQVQgSlNP TiAgUEFUSCAnJCcsCisJCQlqc3YgdmFyY2hhcig0KSBGT1JNQVQgSlNPTiAgUEFUSCAnJCcs CisJCQlqc2IganNvbmIgICBGT1JNQVQgSlNPTiBQQVRIICckJywKKwkJCWpzYnEganNvbmIg Rk9STUFUIEpTT04gUEFUSCAnJCcgT01JVCBRVU9URVMsCisJCQlhYWEgaW50LCAtLSBpbXBs aWNpdCBwYXRoICckLiJhYWEiJywKKwkJCWFhYTEgaW50IFBBVEggJyQuYWFhJywKKwkJCWV4 aXN0czEgYm9vbCBFWElTVFMgUEFUSCAnJC5hYWEnLAorCQkJZXhpc3RzMiBpbnQgRVhJU1RT IFBBVEggJyQuYWFhJyBUUlVFIE9OIEVSUk9SLAorCQkJZXhpc3RzMyB0ZXh0IEVYSVNUUyBQ QVRIICdzdHJpY3QgJC5hYWEnIFVOS05PV04gT04gRVJST1IsCisJCQlqczIganNvbiBQQVRI ICckJywKKwkJCWpzYjJ3IGpzb25iIFBBVEggJyQnIFdJVEggV1JBUFBFUiwKKwkJCWpzYjJx IGpzb25iIFBBVEggJyQnIE9NSVQgUVVPVEVTLAorCQkJaWEgaW50W10gUEFUSCAnJCcsCisJ CQl0YSB0ZXh0W10gUEFUSCAnJCcsCisJCQlqYmEganNvbmJbXSBQQVRIICckJywKKwkJCU5F U1RFRCBQQVRIICckWzFdJyBBUyBwMSBDT0xVTU5TICgKKwkJCQlhMSBpbnQsCisJCQkJTkVT VEVEIFBBVEggJyRbKl0nIEFTICJwMSAxIiBDT0xVTU5TICgKKwkJCQkJYTExIHRleHQKKwkJ CQkpLAorCQkJCWIxIHRleHQKKwkJCSksCisJCQlORVNURUQgUEFUSCAnJFsyXScgQVMgcDIg Q09MVU1OUyAoCisJCQkJTkVTVEVEIFBBVEggJyRbKl0nIEFTICJwMjoxIiBDT0xVTU5TICgK KwkJCQkJYTIxIHRleHQKKwkJCQkpLAorCQkJCU5FU1RFRCBQQVRIICckWypdJyBBUyBwMjIg Q09MVU1OUyAoCisJCQkJCWEyMiB0ZXh0CisJCQkJKQorCQkJKQorCQkpCisJKTsKK1xzdiBq c29uYl90YWJsZV92aWV3CitDUkVBVEUgT1IgUkVQTEFDRSBWSUVXIHB1YmxpYy5qc29uYl90 YWJsZV92aWV3IEFTCisgU0VMRUNUIGlkLAorICAgIGlkMiwKKyAgICAiaW50IiwKKyAgICB0 ZXh0LAorICAgICJjaGFyKDQpIiwKKyAgICBib29sLAorICAgICJudW1lcmljIiwKKyAgICBk b21haW4sCisgICAganMsCisgICAgamIsCisgICAganN0LAorICAgIGpzYywKKyAgICBqc3Ys CisgICAganNiLAorICAgIGpzYnEsCisgICAgYWFhLAorICAgIGFhYTEsCisgICAgZXhpc3Rz MSwKKyAgICBleGlzdHMyLAorICAgIGV4aXN0czMsCisgICAganMyLAorICAgIGpzYjJ3LAor ICAgIGpzYjJxLAorICAgIGlhLAorICAgIHRhLAorICAgIGpiYSwKKyAgICBhMSwKKyAgICBi MSwKKyAgICBhMTEsCisgICAgYTIxLAorICAgIGEyMgorICAgRlJPTSBKU09OX1RBQkxFKAor ICAgICAgICAgICAgJ251bGwnOjpqc29uYiwgJyRbKl0nIEFTIGpzb25fdGFibGVfcGF0aF8x CisgICAgICAgICAgICBQQVNTSU5HCisgICAgICAgICAgICAgICAgMSArIDIgQVMgYSwKKyAg ICAgICAgICAgICAgICAnImZvbyInOjpqc29uIEFTICJiIGMiCisgICAgICAgICAgICBDT0xV TU5TICgKKyAgICAgICAgICAgICAgICBpZCBGT1IgT1JESU5BTElUWSwKKyAgICAgICAgICAg ICAgICBpZDIgRk9SIE9SRElOQUxJVFksCisgICAgICAgICAgICAgICAgImludCIgaW50ZWdl ciBQQVRIICckJywKKyAgICAgICAgICAgICAgICB0ZXh0IHRleHQgUEFUSCAnJCcsCisgICAg ICAgICAgICAgICAgImNoYXIoNCkiIGNoYXJhY3Rlcig0KSBQQVRIICckJywKKyAgICAgICAg ICAgICAgICBib29sIGJvb2xlYW4gUEFUSCAnJCcsCisgICAgICAgICAgICAgICAgIm51bWVy aWMiIG51bWVyaWMgUEFUSCAnJCcsCisgICAgICAgICAgICAgICAgZG9tYWluIGpzb25iX3Rl c3RfZG9tYWluIFBBVEggJyQnLAorICAgICAgICAgICAgICAgIGpzIGpzb24gUEFUSCAnJCcs CisgICAgICAgICAgICAgICAgamIganNvbmIgUEFUSCAnJCcsCisgICAgICAgICAgICAgICAg anN0IHRleHQgRk9STUFUIEpTT04gUEFUSCAnJCcsCisgICAgICAgICAgICAgICAganNjIGNo YXJhY3Rlcig0KSBGT1JNQVQgSlNPTiBQQVRIICckJywKKyAgICAgICAgICAgICAgICBqc3Yg Y2hhcmFjdGVyIHZhcnlpbmcoNCkgRk9STUFUIEpTT04gUEFUSCAnJCcsCisgICAgICAgICAg ICAgICAganNiIGpzb25iIFBBVEggJyQnLAorICAgICAgICAgICAgICAgIGpzYnEganNvbmIg UEFUSCAnJCcgT01JVCBRVU9URVMsCisgICAgICAgICAgICAgICAgYWFhIGludGVnZXIgUEFU SCAnJC4iYWFhIicsCisgICAgICAgICAgICAgICAgYWFhMSBpbnRlZ2VyIFBBVEggJyQuImFh YSInLAorICAgICAgICAgICAgICAgIGV4aXN0czEgYm9vbGVhbiBFWElTVFMgUEFUSCAnJC4i YWFhIicsCisgICAgICAgICAgICAgICAgZXhpc3RzMiBpbnRlZ2VyIEVYSVNUUyBQQVRIICck LiJhYWEiJyBUUlVFIE9OIEVSUk9SLAorICAgICAgICAgICAgICAgIGV4aXN0czMgdGV4dCBF WElTVFMgUEFUSCAnc3RyaWN0ICQuImFhYSInIFVOS05PV04gT04gRVJST1IsCisgICAgICAg ICAgICAgICAganMyIGpzb24gUEFUSCAnJCcsCisgICAgICAgICAgICAgICAganNiMncganNv bmIgUEFUSCAnJCcgV0lUSCBVTkNPTkRJVElPTkFMIFdSQVBQRVIsCisgICAgICAgICAgICAg ICAganNiMnEganNvbmIgUEFUSCAnJCcgT01JVCBRVU9URVMsCisgICAgICAgICAgICAgICAg aWEgaW50ZWdlcltdIFBBVEggJyQnLAorICAgICAgICAgICAgICAgIHRhIHRleHRbXSBQQVRI ICckJywKKyAgICAgICAgICAgICAgICBqYmEganNvbmJbXSBQQVRIICckJywKKyAgICAgICAg ICAgICAgICBORVNURUQgUEFUSCAnJFsxXScgQVMgcDEKKyAgICAgICAgICAgICAgICBDT0xV TU5TICgKKyAgICAgICAgICAgICAgICAgICAgYTEgaW50ZWdlciBQQVRIICckLiJhMSInLAor ICAgICAgICAgICAgICAgICAgICBiMSB0ZXh0IFBBVEggJyQuImIxIicsCisgICAgICAgICAg ICAgICAgICAgIE5FU1RFRCBQQVRIICckWypdJyBBUyAicDEgMSIKKyAgICAgICAgICAgICAg ICAgICAgQ09MVU1OUyAoCisgICAgICAgICAgICAgICAgICAgICAgICBhMTEgdGV4dCBQQVRI ICckLiJhMTEiJworICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgKSwK KyAgICAgICAgICAgICAgICBORVNURUQgUEFUSCAnJFsyXScgQVMgcDIKKyAgICAgICAgICAg ICAgICBDT0xVTU5TICgKKyAgICAgICAgICAgICAgICAgICAgTkVTVEVEIFBBVEggJyRbKl0n IEFTICJwMjoxIgorICAgICAgICAgICAgICAgICAgICBDT0xVTU5TICgKKyAgICAgICAgICAg ICAgICAgICAgICAgIGEyMSB0ZXh0IFBBVEggJyQuImEyMSInCisgICAgICAgICAgICAgICAg ICAgICksCisgICAgICAgICAgICAgICAgICAgIE5FU1RFRCBQQVRIICckWypdJyBBUyBwMjIK KyAgICAgICAgICAgICAgICAgICAgQ09MVU1OUyAoCisgICAgICAgICAgICAgICAgICAgICAg ICBhMjIgdGV4dCBQQVRIICckLiJhMjIiJworICAgICAgICAgICAgICAgICAgICApCisgICAg ICAgICAgICAgICAgKQorICAgICAgICAgICAgKQorICAgICAgICAgICAgUExBTiAoanNvbl90 YWJsZV9wYXRoXzEgT1VURVIgKChwMSBPVVRFUiAicDEgMSIpIFVOSU9OIChwMiBPVVRFUiAo InAyOjEiIFVOSU9OIHAyMikpKSkKKyAgICAgICAgKQorRVhQTEFJTiAoQ09TVFMgT0ZGLCBW RVJCT1NFKSBTRUxFQ1QgKiBGUk9NIGpzb25iX3RhYmxlX3ZpZXc7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgVGFibGUgRnVuY3Rpb24gU2NhbiBvbiAianNvbl90YWJsZSIK KyAgIE91dHB1dDogImpzb25fdGFibGUiLmlkLCAianNvbl90YWJsZSIuaWQyLCAianNvbl90 YWJsZSIuImludCIsICJqc29uX3RhYmxlIi50ZXh0LCAianNvbl90YWJsZSIuImNoYXIoNCki LCAianNvbl90YWJsZSIuYm9vbCwgImpzb25fdGFibGUiLiJudW1lcmljIiwgImpzb25fdGFi bGUiLmRvbWFpbiwgImpzb25fdGFibGUiLmpzLCAianNvbl90YWJsZSIuamIsICJqc29uX3Rh YmxlIi5qc3QsICJqc29uX3RhYmxlIi5qc2MsICJqc29uX3RhYmxlIi5qc3YsICJqc29uX3Rh YmxlIi5qc2IsICJqc29uX3RhYmxlIi5qc2JxLCAianNvbl90YWJsZSIuYWFhLCAianNvbl90 YWJsZSIuYWFhMSwgImpzb25fdGFibGUiLmV4aXN0czEsICJqc29uX3RhYmxlIi5leGlzdHMy LCAianNvbl90YWJsZSIuZXhpc3RzMywgImpzb25fdGFibGUiLmpzMiwgImpzb25fdGFibGUi LmpzYjJ3LCAianNvbl90YWJsZSIuanNiMnEsICJqc29uX3RhYmxlIi5pYSwgImpzb25fdGFi bGUiLnRhLCAianNvbl90YWJsZSIuamJhLCAianNvbl90YWJsZSIuYTEsICJqc29uX3RhYmxl Ii5iMSwgImpzb25fdGFibGUiLmExMSwgImpzb25fdGFibGUiLmEyMSwgImpzb25fdGFibGUi LmEyMgorICAgVGFibGUgRnVuY3Rpb24gQ2FsbDogSlNPTl9UQUJMRSgnbnVsbCc6Ompzb25i LCAnJFsqXScgQVMganNvbl90YWJsZV9wYXRoXzEgUEFTU0lORyAzIEFTIGEsICciZm9vIic6 Ompzb25iIEFTICJiIGMiIENPTFVNTlMgKGlkIEZPUiBPUkRJTkFMSVRZLCBpZDIgRk9SIE9S RElOQUxJVFksICJpbnQiIGludGVnZXIgUEFUSCAnJCcsIHRleHQgdGV4dCBQQVRIICckJywg ImNoYXIoNCkiIGNoYXJhY3Rlcig0KSBQQVRIICckJywgYm9vbCBib29sZWFuIFBBVEggJyQn LCAibnVtZXJpYyIgbnVtZXJpYyBQQVRIICckJywgZG9tYWluIGpzb25iX3Rlc3RfZG9tYWlu IFBBVEggJyQnLCBqcyBqc29uIFBBVEggJyQnLCBqYiBqc29uYiBQQVRIICckJywganN0IHRl eHQgRk9STUFUIEpTT04gUEFUSCAnJCcsIGpzYyBjaGFyYWN0ZXIoNCkgRk9STUFUIEpTT04g UEFUSCAnJCcsIGpzdiBjaGFyYWN0ZXIgdmFyeWluZyg0KSBGT1JNQVQgSlNPTiBQQVRIICck JywganNiIGpzb25iIFBBVEggJyQnLCBqc2JxIGpzb25iIFBBVEggJyQnIE9NSVQgUVVPVEVT LCBhYWEgaW50ZWdlciBQQVRIICckLiJhYWEiJywgYWFhMSBpbnRlZ2VyIFBBVEggJyQuImFh YSInLCBleGlzdHMxIGJvb2xlYW4gRVhJU1RTIFBBVEggJyQuImFhYSInLCBleGlzdHMyIGlu dGVnZXIgRVhJU1RTIFBBVEggJyQuImFhYSInIFRSVUUgT04gRVJST1IsIGV4aXN0czMgdGV4 dCBFWElTVFMgUEFUSCAnc3RyaWN0ICQuImFhYSInIFVOS05PV04gT04gRVJST1IsIGpzMiBq c29uIFBBVEggJyQnLCBqc2IydyBqc29uYiBQQVRIICckJyBXSVRIIFVOQ09ORElUSU9OQUwg V1JBUFBFUiwganNiMnEganNvbmIgUEFUSCAnJCcgT01JVCBRVU9URVMsIGlhIGludGVnZXJb XSBQQVRIICckJywgdGEgdGV4dFtdIFBBVEggJyQnLCBqYmEganNvbmJbXSBQQVRIICckJywg TkVTVEVEIFBBVEggJyRbMV0nIEFTIHAxIENPTFVNTlMgKGExIGludGVnZXIgUEFUSCAnJC4i YTEiJywgYjEgdGV4dCBQQVRIICckLiJiMSInLCBORVNURUQgUEFUSCAnJFsqXScgQVMgInAx IDEiIENPTFVNTlMgKGExMSB0ZXh0IFBBVEggJyQuImExMSInKSksIE5FU1RFRCBQQVRIICck WzJdJyBBUyBwMiBDT0xVTU5TICggTkVTVEVEIFBBVEggJyRbKl0nIEFTICJwMjoxIiBDT0xV TU5TIChhMjEgdGV4dCBQQVRIICckLiJhMjEiJyksIE5FU1RFRCBQQVRIICckWypdJyBBUyBw MjIgQ09MVU1OUyAoYTIyIHRleHQgUEFUSCAnJC4iYTIyIicpKSkgUExBTiAoanNvbl90YWJs ZV9wYXRoXzEgT1VURVIgKChwMSBPVVRFUiAicDEgMSIpIFVOSU9OIChwMiBPVVRFUiAoInAy OjEiIFVOSU9OIHAyMikpKSkpCisoMyByb3dzKQorCitEUk9QIFZJRVcganNvbmJfdGFibGVf dmlldzsKK0RST1AgRE9NQUlOIGpzb25iX3Rlc3RfZG9tYWluOworLS0gSlNPTl9UQUJMRTog T04gRU1QVFkvT04gRVJST1IgYmVoYXZpb3IKK1NFTEVDVCAqCitGUk9NCisJKFZBTFVFUyAo JzEnKSwgKCciZXJyIicpKSB2YWxzKGpzKSwKKwlKU09OX1RBQkxFKHZhbHMuanM6Ompzb25i LCAnJCcgQ09MVU1OUyAoYSBpbnQgUEFUSCAnJCcpKSBqdDsKKyAganMgICB8IGEgCistLS0t LS0tKy0tLQorIDEgICAgIHwgMQorICJlcnIiIHwgIAorKDIgcm93cykKKworU0VMRUNUICoK K0ZST00KKwkoVkFMVUVTICgnMScpLCAoJyJlcnIiJykpIHZhbHMoanMpCisJCUxFRlQgT1VU RVIgSk9JTgorCUpTT05fVEFCTEUodmFscy5qczo6anNvbmIsICckJyBDT0xVTU5TIChhIGlu dCBQQVRIICckJykgRVJST1IgT04gRVJST1IpIGp0CisJCU9OIHRydWU7CitFUlJPUjogIGlu dmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVnZXI6ICJlcnIiCitTRUxFQ1QgKgor RlJPTQorCShWQUxVRVMgKCcxJyksICgnImVyciInKSkgdmFscyhqcykKKwkJTEVGVCBPVVRF UiBKT0lOCisJSlNPTl9UQUJMRSh2YWxzLmpzOjpqc29uYiwgJyQnIENPTFVNTlMgKGEgaW50 IFBBVEggJyQnIEVSUk9SIE9OIEVSUk9SKSkganQKKwkJT04gdHJ1ZTsKK0VSUk9SOiAgaW52 YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgaW50ZWdlcjogImVyciIKK1NFTEVDVCAqIEZS T00gSlNPTl9UQUJMRShqc29uYiAnMScsICckJyBDT0xVTU5TIChhIGludCBQQVRIICckLmEn IEVSUk9SIE9OIEVNUFRZKSkganQ7CisgYSAKKy0tLQorICAKKygxIHJvdykKKworU0VMRUNU ICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcxJywgJyQnIENPTFVNTlMgKGEgaW50IFBBVEgg J3N0cmljdCAkLmEnIEVSUk9SIE9OIEVNUFRZKSBFUlJPUiBPTiBFUlJPUikganQ7CitFUlJP UjogIGpzb25wYXRoIG1lbWJlciBhY2Nlc3NvciBjYW4gb25seSBiZSBhcHBsaWVkIHRvIGFu IG9iamVjdAorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcxJywgJyQnIENPTFVN TlMgKGEgaW50IFBBVEggJ2xheCAkLmEnIEVSUk9SIE9OIEVNUFRZKSBFUlJPUiBPTiBFUlJP UikganQ7CitFUlJPUjogIG5vIFNRTC9KU09OIGl0ZW0KK1NFTEVDVCAqIEZST00gSlNPTl9U QUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgaW50IFBBVEggJyQnICAgREVGQVVM VCAxIE9OIEVNUFRZIERFRkFVTFQgMiBPTiBFUlJPUikpIGp0OworIGEgCistLS0KKyAyCiso MSByb3cpCisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENP TFVNTlMgKGEgaW50IFBBVEggJ3N0cmljdCAkLmEnIERFRkFVTFQgMSBPTiBFTVBUWSBERUZB VUxUIDIgT04gRVJST1IpKSBqdDsKKyBhIAorLS0tCisgMgorKDEgcm93KQorCitTRUxFQ1Qg KiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGludCBQQVRI ICdsYXggJC5hJyBERUZBVUxUIDEgT04gRU1QVFkgREVGQVVMVCAyIE9OIEVSUk9SKSkganQ7 CisgYSAKKy0tLQorIDEKKygxIHJvdykKKworLS0gSlNPTl9UQUJMRTogRVhJU1RTIFBBVEgg dHlwZXMKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVN TlMgKGEgaW50NCBFWElTVFMgUEFUSCAnJC5hJykpOworIGEgCistLS0KKyAwCisoMSByb3cp CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMg KGEgaW50MiBFWElTVFMgUEFUSCAnJC5hJykpOworRVJST1I6ICBjYW5ub3QgY2FzdCB0eXBl IGJvb2xlYW4gdG8gc21hbGxpbnQKK0xJTkUgMTogLi4uRUxFQ1QgKiBGUk9NIEpTT05fVEFC TEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGludDIgRVhJLi4uCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgor U0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBp bnQ4IEVYSVNUUyBQQVRIICckLmEnKSk7CitFUlJPUjogIGNhbm5vdCBjYXN0IHR5cGUgYm9v bGVhbiB0byBiaWdpbnQKK0xJTkUgMTogLi4uRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNv bmIgJyJhIicsICckJyBDT0xVTU5TIChhIGludDggRVhJLi4uCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorU0VMRUNU ICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBmbG9hdDQg RVhJU1RTIFBBVEggJyQuYScpKTsKK0VSUk9SOiAgY2Fubm90IGNhc3QgdHlwZSBib29sZWFu IHRvIHJlYWwKK0xJTkUgMTogLi4uRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJh IicsICckJyBDT0xVTU5TIChhIGZsb2F0NCBFLi4uCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorU0VMRUNUICogRlJP TSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBjaGFyKDMpIEVYSVNU UyBQQVRIICckLmEnKSk7CisgIGEgIAorLS0tLS0KKyBmYWwKKygxIHJvdykKKworU0VMRUNU ICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBqc29uIEVY SVNUUyBQQVRIICckLmEnKSk7CitFUlJPUjogIGNhbm5vdCBjYXN0IHR5cGUgYm9vbGVhbiB0 byBqc29uCitMSU5FIDE6IC4uLkVMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSIn LCAnJCcgQ09MVU1OUyAoYSBqc29uIEVYSS4uLgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK1NFTEVDVCAqIEZST00g SlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEganNvbmIgRVhJU1RTIFBB VEggJyQuYScpKTsKK0VSUk9SOiAgY2Fubm90IGNhc3QgdHlwZSBib29sZWFuIHRvIGpzb25i CitMSU5FIDE6IC4uLkVMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcg Q09MVU1OUyAoYSBqc29uYiBFWC4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKy0tIEpTT05fVEFCTEU6IG5lc3Rl ZCBwYXRocyBhbmQgcGxhbnMKKy0tIFNob3VsZCBmYWlsIChKU09OX1RBQkxFIGNvbHVtbnMg bXVzdCBjb250YWluIGV4cGxpY2l0IEFTIHBhdGgKKy0tIHNwZWNpZmljYXRpb25zIGlmIGV4 cGxpY2l0IFBMQU4gY2xhdXNlIGlzIHVzZWQpCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUo CisJanNvbmIgJ1tdJywgJyQnIC0tIEFTIDxwYXRoIG5hbWU+IHJlcXVpcmVkIGhlcmUKKwlD T0xVTU5TICgKKwkJZm9vIGludCBQQVRIICckJworCSkKKwlQTEFOIERFRkFVTFQgKFVOSU9O KQorKSBqdDsKK0VSUk9SOiAgaW52YWxpZCBKU09OX1RBQkxFIGV4cHJlc3Npb24KK0xJTkUg MjogIGpzb25iICdbXScsICckJyAtLSBBUyA8cGF0aCBuYW1lPiByZXF1aXJlZCBoZXJlCisg ICAgICAgICBeCitERVRBSUw6ICBKU09OX1RBQkxFIGNvbHVtbnMgbXVzdCBjb250YWluIGV4 cGxpY2l0IEFTIHBhdGhuYW1lIHNwZWNpZmljYXRpb24gaWYgZXhwbGljaXQgUExBTiBjbGF1 c2UgaXMgdXNlZAorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdbXScsICck JyBBUyBwYXRoMQorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQ09MVU1OUyAoIC0t IEFTIDxwYXRoIG5hbWU+IHJlcXVpcmVkIGhlcmUKKwkJCWZvbyBpbnQgUEFUSCAnJCcKKwkJ KQorCSkKKwlQTEFOIERFRkFVTFQgKFVOSU9OKQorKSBqdDsKK0VSUk9SOiAgaW52YWxpZCBK U09OX1RBQkxFIGV4cHJlc3Npb24KK0xJTkUgNDogICBORVNURUQgUEFUSCAnJCcgQ09MVU1O UyAoIC0tIEFTIDxwYXRoIG5hbWU+IHJlcXVpcmVkIGhlcmUKKyAgICAgICAgICBeCitERVRB SUw6ICBKU09OX1RBQkxFIGNvbHVtbnMgbXVzdCBjb250YWluIGV4cGxpY2l0IEFTIHBhdGhu YW1lIHNwZWNpZmljYXRpb24gaWYgZXhwbGljaXQgUExBTiBjbGF1c2UgaXMgdXNlZAorLS0g U2hvdWxkIGZhaWwgKGNvbHVtbiBuYW1lcyBtdXN0IGJlIGRpc3RpbmN0KQorU0VMRUNUICog RlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdbXScsICckJyBBUyBhCisJQ09MVU1OUyAoCisJ CWEgaW50CisJKQorKSBqdDsKK0VSUk9SOiAgZHVwbGljYXRlIEpTT05fVEFCTEUgY29sdW1u IG5hbWU6IGEKK0hJTlQ6ICBKU09OX1RBQkxFIGNvbHVtbiBuYW1lcyBtdXN0IGJlIGRpc3Rp bmN0IGZyb20gb25lIGFub3RoZXIuCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNv bmIgJ1tdJywgJyQnIEFTIGEKKwlDT0xVTU5TICgKKwkJYiBpbnQsCisJCU5FU1RFRCBQQVRI ICckJyBBUyBhCisJCUNPTFVNTlMgKAorCQkJYyBpbnQKKwkJKQorCSkKKykganQ7CitFUlJP UjogIGR1cGxpY2F0ZSBKU09OX1RBQkxFIGNvbHVtbiBuYW1lOiBhCitISU5UOiAgSlNPTl9U QUJMRSBjb2x1bW4gbmFtZXMgbXVzdCBiZSBkaXN0aW5jdCBmcm9tIG9uZSBhbm90aGVyLgor U0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdbXScsICckJworCUNPTFVNTlMg KAorCQliIGludCwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIGIKKwkJQ09MVU1OUyAoCisJCQlj IGludAorCQkpCisJKQorKSBqdDsKK0VSUk9SOiAgZHVwbGljYXRlIEpTT05fVEFCTEUgY29s dW1uIG5hbWU6IGIKK0hJTlQ6ICBKU09OX1RBQkxFIGNvbHVtbiBuYW1lcyBtdXN0IGJlIGRp c3RpbmN0IGZyb20gb25lIGFub3RoZXIuCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJ anNvbmIgJ1tdJywgJyQnCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBBUyBhCisJ CUNPTFVNTlMgKAorCQkJYiBpbnQKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnCisJCUNPTFVN TlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIGEKKwkJCUNPTFVNTlMgKAorCQkJCWMgaW50 CisJCQkpCisJCSkKKwkpCispIGp0OworRVJST1I6ICBkdXBsaWNhdGUgSlNPTl9UQUJMRSBj b2x1bW4gbmFtZTogYQorSElOVDogIEpTT05fVEFCTEUgY29sdW1uIG5hbWVzIG11c3QgYmUg ZGlzdGluY3QgZnJvbSBvbmUgYW5vdGhlci4KKy0tIEpTT05fVEFCTEU6IHBsYW4gdmFsaWRh dGlvbgorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJyRbKl0n IEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgK KwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5F U1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNU RUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIx IENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMSkKKykganQ7CitFUlJP UjogIGludmFsaWQgSlNPTl9UQUJMRSBwbGFuCitMSU5FIDEyOiAgUExBTiAocDEpCisgICAg ICAgICAgICAgICAgXgorREVUQUlMOiAgUGF0aCBuYW1lIG1pc21hdGNoOiBleHBlY3RlZCBw MCBidXQgcDEgaXMgZ2l2ZW4uCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIg J251bGwnLCAnJFsqXScgQVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFT IHAxIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9v IGludCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCAp CisJCSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQ QVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAw KQorKSBqdDsKK0VSUk9SOiAgaW52YWxpZCBKU09OX1RBQkxFIHBsYW4KK0xJTkUgNDogICBO RVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisgICAgICAgICAgXgorREVUQUlMOiAg UGxhbiBub2RlIGZvciBuZXN0ZWQgcGF0aCBwMSB3YXMgbm90IGZvdW5kIGluIHBsYW4uCitT RUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMgcDAK KwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVT VEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBB VEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRI ICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1O UyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAwIE9VVEVSIHAzKQorKSBqdDsKK0VS Uk9SOiAgaW52YWxpZCBKU09OX1RBQkxFIHBsYW4KK0xJTkUgNDogICBORVNURUQgUEFUSCAn JCcgQVMgcDEgQ09MVU1OUyAoCisgICAgICAgICAgXgorREVUQUlMOiAgUGxhbiBub2RlIGZv ciBuZXN0ZWQgcGF0aCBwMSB3YXMgbm90IGZvdW5kIGluIHBsYW4uCitTRUxFQ1QgKiBGUk9N IEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMgcDAKKwlDT0xVTU5TICgK KwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQn IEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAx MiBDT0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBD T0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQg KQorCQkpCisJKQorCVBMQU4gKHAwIFVOSU9OIHAxIFVOSU9OIHAxMSkKKykganQ7CitFUlJP UjogIGludmFsaWQgSlNPTl9UQUJMRSBwbGFuCitMSU5FIDEyOiAgUExBTiAocDAgVU5JT04g cDEgVU5JT04gcDExKQorICAgICAgICAgICAgICAgIF4KK0RFVEFJTDogIEV4cGVjdGVkIElO TkVSIG9yIE9VVEVSIEpTT05fVEFCTEUgcGxhbiBub2RlLgorU0VMRUNUICogRlJPTSBKU09O X1RBQkxFKAorCWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5F U1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBw MTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09M VU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1O UyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJ KQorCSkKKwlQTEFOIChwMCBPVVRFUiAocDEgQ1JPU1MgcDEzKSkKKykganQ7CitFUlJPUjog IGludmFsaWQgSlNPTl9UQUJMRSBwbGFuCitMSU5FIDg6ICAgTkVTVEVEIFBBVEggJyQnIEFT IHAyIENPTFVNTlMgKAorICAgICAgICAgIF4KK0RFVEFJTDogIFBsYW4gbm9kZSBmb3IgbmVz dGVkIHBhdGggcDIgd2FzIG5vdCBmb3VuZCBpbiBwbGFuLgorU0VMRUNUICogRlJPTSBKU09O X1RBQkxFKAorCWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5F U1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBw MTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09M VU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1O UyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJ KQorCSkKKwlQTEFOIChwMCBPVVRFUiAocDEgQ1JPU1MgcDIpKQorKSBqdDsKK0VSUk9SOiAg aW52YWxpZCBKU09OX1RBQkxFIHBsYW4KK0xJTkUgNTogICAgTkVTVEVEIFBBVEggJyQnIEFT IHAxMSBDT0xVTU5TICggZm9vIGludCApLAorICAgICAgICAgICBeCitERVRBSUw6ICBQbGFu IG5vZGUgZm9yIG5lc3RlZCBwYXRoIHAxMSB3YXMgbm90IGZvdW5kIGluIHBsYW4uCitTRUxF Q1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMgcDAKKwlD T0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVE IFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBBVEgg JyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICck JyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAo IGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAwIE9VVEVSICgocDEgVU5JT04gcDExKSBD Uk9TUyBwMikpCispIGp0OworRVJST1I6ICBpbnZhbGlkIEpTT05fVEFCTEUgcGxhbgorTElO RSAxMjogIFBMQU4gKHAwIE9VVEVSICgocDEgVU5JT04gcDExKSBDUk9TUyBwMikpCisgICAg ICAgICAgICAgICAgICAgICAgICAgXgorREVUQUlMOiAgUGxhbiBub2RlIGNvbnRhaW5zIHNv bWUgZXh0cmEgb3IgZHVwbGljYXRlIHNpYmxpbmcgbm9kZXMuCitTRUxFQ1QgKiBGUk9NIEpT T05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMgcDAKKwlDT0xVTU5TICgKKwkJ TkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFT IHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBD T0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xV TU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQor CQkpCisJKQorCVBMQU4gKHAwIE9VVEVSICgocDEgSU5ORVIgcDExKSBDUk9TUyBwMikpCisp IGp0OworRVJST1I6ICBpbnZhbGlkIEpTT05fVEFCTEUgcGxhbgorTElORSA2OiAgICBORVNU RUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKyAgICAgICAgICAgXgor REVUQUlMOiAgUGxhbiBub2RlIGZvciBuZXN0ZWQgcGF0aCBwMTIgd2FzIG5vdCBmb3VuZCBp biBwbGFuLgorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJyRb Kl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5T ICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJ CU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlO RVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMg cDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRFUiAoKHAx IElOTkVSIChwMTIgQ1JPU1MgcDExKSkgQ1JPU1MgcDIpKQorKSBqdDsKK0VSUk9SOiAgaW52 YWxpZCBKU09OX1RBQkxFIHBsYW4KK0xJTkUgOTogICAgTkVTVEVEIFBBVEggJyQnIEFTIHAy MSBDT0xVTU5TICggYmF6IGludCApCisgICAgICAgICAgIF4KK0RFVEFJTDogIFBsYW4gbm9k ZSBmb3IgbmVzdGVkIHBhdGggcDIxIHdhcyBub3QgZm91bmQgaW4gcGxhbi4KK1NFTEVDVCAq IEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnbnVsbCcsICdzdHJpY3QgJFsqXScgQVMgcDAK KwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVT VEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBB VEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRI ICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1O UyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAwIE9VVEVSICgocDEgSU5ORVIgKHAx MiBDUk9TUyBwMTEpKSBDUk9TUyAocDIgSU5ORVIgcDIxKSkpCispIGp0OworIGJhciB8IGZv byB8IGJheiAKKy0tLS0tKy0tLS0tKy0tLS0tCisoMCByb3dzKQorCitTRUxFQ1QgKiBGUk9N IEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnc3RyaWN0ICRbKl0nIC0tIHdpdGhvdXQg cm9vdCBwYXRoIG5hbWUKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENP TFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGludCAp LAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJCSks CisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICck JyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKChwMSBJTk5F UiAocDEyIENST1NTIHAxMSkpIENST1NTIChwMiBJTk5FUiBwMjEpKQorKSBqdDsKK0VSUk9S OiAgaW52YWxpZCBKU09OX1RBQkxFIGV4cHJlc3Npb24KK0xJTkUgMjogIGpzb25iICdudWxs JywgJ3N0cmljdCAkWypdJyAtLSB3aXRob3V0IHJvb3QgcGF0aCBuYW1lCisgICAgICAgICBe CitERVRBSUw6ICBKU09OX1RBQkxFIGNvbHVtbnMgbXVzdCBjb250YWluIGV4cGxpY2l0IEFT IHBhdGhuYW1lIHNwZWNpZmljYXRpb24gaWYgZXhwbGljaXQgUExBTiBjbGF1c2UgaXMgdXNl ZAorLS0gSlNPTl9UQUJMRTogcGxhbiBleGVjdXRpb24KK0NSRUFURSBURU1QIFRBQkxFIGpz b25iX3RhYmxlX3Rlc3QgKGpzIGpzb25iKTsKK0lOU0VSVCBJTlRPIGpzb25iX3RhYmxlX3Rl c3QKK1ZBTFVFUyAoCisJJ1sKKwkJeyJhIjogIDEsICAiYiI6IFtdLCAiYyI6IFtdfSwKKwkJ eyJhIjogIDIsICAiYiI6IFsxLCAyLCAzXSwgImMiOiBbMTAsIG51bGwsIDIwXX0sCisJCXsi YSI6ICAzLCAgImIiOiBbMSwgMl0sICJjIjogW119LAorCQl7IngiOiAiNCIsICJiIjogWzEs IDJdLCAiYyI6IDEyM30KKwkgXScKKyk7CistLSB1bnNwZWNpZmllZCBwbGFuIChvdXRlciwg dW5pb24pCitzZWxlY3QKKwlqdC4qCitmcm9tCisJanNvbmJfdGFibGVfdGVzdCBqdHQsCisJ anNvbl90YWJsZSAoCisJCWp0dC5qcywnc3RyaWN0ICRbKl0nIGFzIHAKKwkJY29sdW1ucyAo CisJCQluIGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVs dCAtMSBvbiBlbXB0eSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBj b2x1bW5zICggYiBpbnQgcGF0aCAnJCcgKSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5j WypdJyBhcyBwYyBjb2x1bW5zICggYyBpbnQgcGF0aCAnJCcgKQorCQkpCisJKSBqdDsKKyBu IHwgYSAgfCBiIHwgYyAgCistLS0rLS0tLSstLS0rLS0tLQorIDEgfCAgMSB8ICAgfCAgIAor IDIgfCAgMiB8IDEgfCAgIAorIDIgfCAgMiB8IDIgfCAgIAorIDIgfCAgMiB8IDMgfCAgIAor IDIgfCAgMiB8ICAgfCAxMAorIDIgfCAgMiB8ICAgfCAgIAorIDIgfCAgMiB8ICAgfCAyMAor IDMgfCAgMyB8IDEgfCAgIAorIDMgfCAgMyB8IDIgfCAgIAorIDQgfCAtMSB8IDEgfCAgIAor IDQgfCAtMSB8IDIgfCAgIAorKDExIHJvd3MpCisKKy0tIGRlZmF1bHQgcGxhbiAob3V0ZXIs IHVuaW9uKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAor CWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMg KAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1 bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIg Y29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQu Y1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIGRl ZmF1bHQgKG91dGVyLCB1bmlvbikKKwkpIGp0OworIG4gfCBhICB8IGIgfCBjICAKKy0tLSst LS0tKy0tLSstLS0tCisgMSB8ICAxIHwgICB8ICAgCisgMiB8ICAyIHwgMSB8ICAgCisgMiB8 ICAyIHwgMiB8ICAgCisgMiB8ICAyIHwgMyB8ICAgCisgMiB8ICAyIHwgICB8IDEwCisgMiB8 ICAyIHwgICB8ICAgCisgMiB8ICAyIHwgICB8IDIwCisgMyB8ICAzIHwgMSB8ICAgCisgMyB8 ICAzIHwgMiB8ICAgCisgNCB8IC0xIHwgMSB8ICAgCisgNCB8IC0xIHwgMiB8ICAgCisoMTEg cm93cykKKworLS0gc3BlY2lmaWMgcGxhbiAocCBvdXRlciAocGIgdW5pb24gcGMpKQorc2Vs ZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUg KAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Ig b3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1w dHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIg aW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMg Y29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChwIG91dGVyIChwYiB1 bmlvbiBwYykpCisJKSBqdDsKKyBuIHwgYSAgfCBiIHwgYyAgCistLS0rLS0tLSstLS0rLS0t LQorIDEgfCAgMSB8ICAgfCAgIAorIDIgfCAgMiB8IDEgfCAgIAorIDIgfCAgMiB8IDIgfCAg IAorIDIgfCAgMiB8IDMgfCAgIAorIDIgfCAgMiB8ICAgfCAxMAorIDIgfCAgMiB8ICAgfCAg IAorIDIgfCAgMiB8ICAgfCAyMAorIDMgfCAgMyB8IDEgfCAgIAorIDMgfCAgMyB8IDIgfCAg IAorIDQgfCAtMSB8IDEgfCAgIAorIDQgfCAtMSB8IDIgfCAgIAorKDExIHJvd3MpCisKKy0t IHNwZWNpZmljIHBsYW4gKHAgb3V0ZXIgKHBjIHVuaW9uIHBiKSkKK3NlbGVjdAorCWp0LioK K2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJanR0Lmpz LCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHks CisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJbmVz dGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICck JyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBj IGludCBwYXRoICckJyApCisJCSkKKwkJcGxhbiAocCBvdXRlciAocGMgdW5pb24gcGIpKQor CSkganQ7CisgbiB8IGEgIHwgYyAgfCBiIAorLS0tKy0tLS0rLS0tLSstLS0KKyAxIHwgIDEg fCAgICB8ICAKKyAyIHwgIDIgfCAxMCB8ICAKKyAyIHwgIDIgfCAgICB8ICAKKyAyIHwgIDIg fCAyMCB8ICAKKyAyIHwgIDIgfCAgICB8IDEKKyAyIHwgIDIgfCAgICB8IDIKKyAyIHwgIDIg fCAgICB8IDMKKyAzIHwgIDMgfCAgICB8IDEKKyAzIHwgIDMgfCAgICB8IDIKKyA0IHwgLTEg fCAgICB8IDEKKyA0IHwgLTEgfCAgICB8IDIKKygxMSByb3dzKQorCistLSBkZWZhdWx0IHBs YW4gKGlubmVyLCB1bmlvbikKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90 ZXN0IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAor CQljb2x1bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXgg JC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJb Kl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICckJyApLAorCQkJbmVzdGVkIHBhdGgg J3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyApCisJCSkK KwkJcGxhbiBkZWZhdWx0IChpbm5lcikKKwkpIGp0OworIG4gfCBhICB8IGIgfCBjICAKKy0t LSstLS0tKy0tLSstLS0tCisgMiB8ICAyIHwgMSB8ICAgCisgMiB8ICAyIHwgMiB8ICAgCisg MiB8ICAyIHwgMyB8ICAgCisgMiB8ICAyIHwgICB8IDEwCisgMiB8ICAyIHwgICB8ICAgCisg MiB8ICAyIHwgICB8IDIwCisgMyB8ICAzIHwgMSB8ICAgCisgMyB8ICAzIHwgMiB8ICAgCisg NCB8IC0xIHwgMSB8ICAgCisgNCB8IC0xIHwgMiB8ICAgCisoMTAgcm93cykKKworLS0gc3Bl Y2lmaWMgcGxhbiAocCBpbm5lciAocGIgdW5pb24gcGMpKQorc2VsZWN0CisJanQuKgorZnJv bQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0 cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJ CWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQg cGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICks CisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50 IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChwIGlubmVyIChwYiB1bmlvbiBwYykpCisJKSBq dDsKKyBuIHwgYSAgfCBiIHwgYyAgCistLS0rLS0tLSstLS0rLS0tLQorIDIgfCAgMiB8IDEg fCAgIAorIDIgfCAgMiB8IDIgfCAgIAorIDIgfCAgMiB8IDMgfCAgIAorIDIgfCAgMiB8ICAg fCAxMAorIDIgfCAgMiB8ICAgfCAgIAorIDIgfCAgMiB8ICAgfCAyMAorIDMgfCAgMyB8IDEg fCAgIAorIDMgfCAgMyB8IDIgfCAgIAorIDQgfCAtMSB8IDEgfCAgIAorIDQgfCAtMSB8IDIg fCAgIAorKDEwIHJvd3MpCisKKy0tIGRlZmF1bHQgcGxhbiAoaW5uZXIsIGNyb3NzKQorc2Vs ZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUg KAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Ig b3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1w dHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIg aW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMg Y29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIGRlZmF1bHQgKGNyb3Nz LCBpbm5lcikKKwkpIGp0OworIG4gfCBhIHwgYiB8IGMgIAorLS0tKy0tLSstLS0rLS0tLQor IDIgfCAyIHwgMSB8IDEwCisgMiB8IDIgfCAxIHwgICAKKyAyIHwgMiB8IDEgfCAyMAorIDIg fCAyIHwgMiB8IDEwCisgMiB8IDIgfCAyIHwgICAKKyAyIHwgMiB8IDIgfCAyMAorIDIgfCAy IHwgMyB8IDEwCisgMiB8IDIgfCAzIHwgICAKKyAyIHwgMiB8IDMgfCAyMAorKDkgcm93cykK KworLS0gc3BlY2lmaWMgcGxhbiAocCBpbm5lciAocGIgY3Jvc3MgcGMpKQorc2VsZWN0CisJ anQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlq dHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5h bGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJ CQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBh dGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1u cyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChwIGlubmVyIChwYiBjcm9zcyBw YykpCisJKSBqdDsKKyBuIHwgYSB8IGIgfCBjICAKKy0tLSstLS0rLS0tKy0tLS0KKyAyIHwg MiB8IDEgfCAxMAorIDIgfCAyIHwgMSB8ICAgCisgMiB8IDIgfCAxIHwgMjAKKyAyIHwgMiB8 IDIgfCAxMAorIDIgfCAyIHwgMiB8ICAgCisgMiB8IDIgfCAyIHwgMjAKKyAyIHwgMiB8IDMg fCAxMAorIDIgfCAyIHwgMyB8ICAgCisgMiB8IDIgfCAzIHwgMjAKKyg5IHJvd3MpCisKKy0t IGRlZmF1bHQgcGxhbiAob3V0ZXIsIGNyb3NzKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpz b25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAk WypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50 IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAn c3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQlu ZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGgg JyQnICkKKwkJKQorCQlwbGFuIGRlZmF1bHQgKG91dGVyLCBjcm9zcykKKwkpIGp0OworIG4g fCBhICB8IGIgfCBjICAKKy0tLSstLS0tKy0tLSstLS0tCisgMSB8ICAxIHwgICB8ICAgCisg MiB8ICAyIHwgMSB8IDEwCisgMiB8ICAyIHwgMSB8ICAgCisgMiB8ICAyIHwgMSB8IDIwCisg MiB8ICAyIHwgMiB8IDEwCisgMiB8ICAyIHwgMiB8ICAgCisgMiB8ICAyIHwgMiB8IDIwCisg MiB8ICAyIHwgMyB8IDEwCisgMiB8ICAyIHwgMyB8ICAgCisgMiB8ICAyIHwgMyB8IDIwCisg MyB8ICAzIHwgICB8ICAgCisgNCB8IC0xIHwgICB8ICAgCisoMTIgcm93cykKKworLS0gc3Bl Y2lmaWMgcGxhbiAocCBvdXRlciAocGIgY3Jvc3MgcGMpKQorc2VsZWN0CisJanQuKgorZnJv bQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0 cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJ CWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQg cGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICks CisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50 IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChwIG91dGVyIChwYiBjcm9zcyBwYykpCisJKSBq dDsKKyBuIHwgYSAgfCBiIHwgYyAgCistLS0rLS0tLSstLS0rLS0tLQorIDEgfCAgMSB8ICAg fCAgIAorIDIgfCAgMiB8IDEgfCAxMAorIDIgfCAgMiB8IDEgfCAgIAorIDIgfCAgMiB8IDEg fCAyMAorIDIgfCAgMiB8IDIgfCAxMAorIDIgfCAgMiB8IDIgfCAgIAorIDIgfCAgMiB8IDIg fCAyMAorIDIgfCAgMiB8IDMgfCAxMAorIDIgfCAgMiB8IDMgfCAgIAorIDIgfCAgMiB8IDMg fCAyMAorIDMgfCAgMyB8ICAgfCAgIAorIDQgfCAtMSB8ICAgfCAgIAorKDEyIHJvd3MpCisK K3NlbGVjdAorCWp0LiosIGIxICsgMTAwIGFzIGIKK2Zyb20KKwlqc29uX3RhYmxlIChqc29u YgorCQknWworCQkJeyJhIjogIDEsICAiYiI6IFtbMSwgMTBdLCBbMl0sIFszLCAzMCwgMzAw XV0sICJjIjogWzEsIG51bGwsIDJdfSwKKwkJCXsiYSI6ICAyLCAgImIiOiBbMTAsIDIwXSwg ImMiOiBbMSwgbnVsbCwgMl19LAorCQkJeyJ4IjogIjMiLCAiYiI6IFsxMSwgMjIsIDMzLCA0 NF19CisJCSBdJywKKwkJJyRbKl0nIGFzIHAKKwkJY29sdW1ucyAoCisJCQluIGZvciBvcmRp bmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBvbiBlcnJvciwK KwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5zICgKKwkJCQli IHRleHQgZm9ybWF0IGpzb24gcGF0aCAnJCcsCisJCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAk WypdJyBhcyBwYjEgY29sdW1ucyAoCisJCQkJCWIxIGludCBwYXRoICckJworCQkJCSkKKwkJ CSksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoCisJ CQkJYyB0ZXh0IGZvcm1hdCBqc29uIHBhdGggJyQnLAorCQkJCW5lc3RlZCBwYXRoICdzdHJp Y3QgJFsqXScgYXMgcGMxIGNvbHVtbnMgKAorCQkJCQljMSBpbnQgcGF0aCAnJCcKKwkJCQkp CisJCQkpCisJCSkKKwkJLS1wbGFuIGRlZmF1bHQob3V0ZXIsIGNyb3NzKQorCQlwbGFuKHAg b3V0ZXIgKChwYiBpbm5lciBwYjEpIGNyb3NzIChwYyBvdXRlciBwYzEpKSkKKwkpIGp0Owor IG4gfCBhIHwgICAgICBiICAgICAgIHwgYjEgIHwgIGMgICB8IGMxIHwgIGIgIAorLS0tKy0t LSstLS0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLSstLS0tLQorIDEgfCAxIHwgWzEs IDEwXSAgICAgIHwgICAxIHwgMSAgICB8ICAgIHwgMTAxCisgMSB8IDEgfCBbMSwgMTBdICAg ICAgfCAgIDEgfCBudWxsIHwgICAgfCAxMDEKKyAxIHwgMSB8IFsxLCAxMF0gICAgICB8ICAg MSB8IDIgICAgfCAgICB8IDEwMQorIDEgfCAxIHwgWzEsIDEwXSAgICAgIHwgIDEwIHwgMSAg ICB8ICAgIHwgMTEwCisgMSB8IDEgfCBbMSwgMTBdICAgICAgfCAgMTAgfCBudWxsIHwgICAg fCAxMTAKKyAxIHwgMSB8IFsxLCAxMF0gICAgICB8ICAxMCB8IDIgICAgfCAgICB8IDExMAor IDEgfCAxIHwgWzJdICAgICAgICAgIHwgICAyIHwgMSAgICB8ICAgIHwgMTAyCisgMSB8IDEg fCBbMl0gICAgICAgICAgfCAgIDIgfCBudWxsIHwgICAgfCAxMDIKKyAxIHwgMSB8IFsyXSAg ICAgICAgICB8ICAgMiB8IDIgICAgfCAgICB8IDEwMgorIDEgfCAxIHwgWzMsIDMwLCAzMDBd IHwgICAzIHwgMSAgICB8ICAgIHwgMTAzCisgMSB8IDEgfCBbMywgMzAsIDMwMF0gfCAgIDMg fCBudWxsIHwgICAgfCAxMDMKKyAxIHwgMSB8IFszLCAzMCwgMzAwXSB8ICAgMyB8IDIgICAg fCAgICB8IDEwMworIDEgfCAxIHwgWzMsIDMwLCAzMDBdIHwgIDMwIHwgMSAgICB8ICAgIHwg MTMwCisgMSB8IDEgfCBbMywgMzAsIDMwMF0gfCAgMzAgfCBudWxsIHwgICAgfCAxMzAKKyAx IHwgMSB8IFszLCAzMCwgMzAwXSB8ICAzMCB8IDIgICAgfCAgICB8IDEzMAorIDEgfCAxIHwg WzMsIDMwLCAzMDBdIHwgMzAwIHwgMSAgICB8ICAgIHwgNDAwCisgMSB8IDEgfCBbMywgMzAs IDMwMF0gfCAzMDAgfCBudWxsIHwgICAgfCA0MDAKKyAxIHwgMSB8IFszLCAzMCwgMzAwXSB8 IDMwMCB8IDIgICAgfCAgICB8IDQwMAorIDIgfCAyIHwgICAgICAgICAgICAgIHwgICAgIHwg ICAgICB8ICAgIHwgICAgCisgMyB8ICAgfCAgICAgICAgICAgICAgfCAgICAgfCAgICAgIHwg ICAgfCAgICAKKygyMCByb3dzKQorCistLSBTaG91bGQgc3VjY2VlZCAoSlNPTiBhcmd1bWVu dHMgYXJlIHBhc3NlZCB0byByb290IGFuZCBuZXN0ZWQgcGF0aHMpCitTRUxFQ1QgKgorRlJP TQorCWdlbmVyYXRlX3NlcmllcygxLCA0KSB4LAorCWdlbmVyYXRlX3NlcmllcygxLCAzKSB5 LAorCUpTT05fVEFCTEUoanNvbmIKKwkJJ1tbMSwyLDNdLFsyLDMsNCw1XSxbMyw0LDUsNl1d JywKKwkJJ3N0cmljdCAkWypdID8gKEBbKl0gPCAkeCknCisJCVBBU1NJTkcgeCBBUyB4LCB5 IEFTIHkKKwkJQ09MVU1OUyAoCisJCQl5IHRleHQgRk9STUFUIEpTT04gUEFUSCAnJCcsCisJ CQlORVNURUQgUEFUSCAnc3RyaWN0ICRbKl0gPyAoQCA+PSAkeSknCisJCQlDT0xVTU5TICgK KwkJCQl6IGludCBQQVRIICckJworCQkJKQorCQkpCisJKSBqdDsKKyB4IHwgeSB8ICAgICAg eSAgICAgICB8IHogCistLS0rLS0tKy0tLS0tLS0tLS0tLS0tKy0tLQorIDIgfCAxIHwgWzEs IDIsIDNdICAgIHwgMQorIDIgfCAxIHwgWzEsIDIsIDNdICAgIHwgMgorIDIgfCAxIHwgWzEs IDIsIDNdICAgIHwgMworIDMgfCAxIHwgWzEsIDIsIDNdICAgIHwgMQorIDMgfCAxIHwgWzEs IDIsIDNdICAgIHwgMgorIDMgfCAxIHwgWzEsIDIsIDNdICAgIHwgMworIDMgfCAxIHwgWzIs IDMsIDQsIDVdIHwgMgorIDMgfCAxIHwgWzIsIDMsIDQsIDVdIHwgMworIDMgfCAxIHwgWzIs IDMsIDQsIDVdIHwgNAorIDMgfCAxIHwgWzIsIDMsIDQsIDVdIHwgNQorIDQgfCAxIHwgWzEs IDIsIDNdICAgIHwgMQorIDQgfCAxIHwgWzEsIDIsIDNdICAgIHwgMgorIDQgfCAxIHwgWzEs IDIsIDNdICAgIHwgMworIDQgfCAxIHwgWzIsIDMsIDQsIDVdIHwgMgorIDQgfCAxIHwgWzIs IDMsIDQsIDVdIHwgMworIDQgfCAxIHwgWzIsIDMsIDQsIDVdIHwgNAorIDQgfCAxIHwgWzIs IDMsIDQsIDVdIHwgNQorIDQgfCAxIHwgWzMsIDQsIDUsIDZdIHwgMworIDQgfCAxIHwgWzMs IDQsIDUsIDZdIHwgNAorIDQgfCAxIHwgWzMsIDQsIDUsIDZdIHwgNQorIDQgfCAxIHwgWzMs IDQsIDUsIDZdIHwgNgorIDIgfCAyIHwgWzEsIDIsIDNdICAgIHwgMgorIDIgfCAyIHwgWzEs IDIsIDNdICAgIHwgMworIDMgfCAyIHwgWzEsIDIsIDNdICAgIHwgMgorIDMgfCAyIHwgWzEs IDIsIDNdICAgIHwgMworIDMgfCAyIHwgWzIsIDMsIDQsIDVdIHwgMgorIDMgfCAyIHwgWzIs IDMsIDQsIDVdIHwgMworIDMgfCAyIHwgWzIsIDMsIDQsIDVdIHwgNAorIDMgfCAyIHwgWzIs IDMsIDQsIDVdIHwgNQorIDQgfCAyIHwgWzEsIDIsIDNdICAgIHwgMgorIDQgfCAyIHwgWzEs IDIsIDNdICAgIHwgMworIDQgfCAyIHwgWzIsIDMsIDQsIDVdIHwgMgorIDQgfCAyIHwgWzIs IDMsIDQsIDVdIHwgMworIDQgfCAyIHwgWzIsIDMsIDQsIDVdIHwgNAorIDQgfCAyIHwgWzIs IDMsIDQsIDVdIHwgNQorIDQgfCAyIHwgWzMsIDQsIDUsIDZdIHwgMworIDQgfCAyIHwgWzMs IDQsIDUsIDZdIHwgNAorIDQgfCAyIHwgWzMsIDQsIDUsIDZdIHwgNQorIDQgfCAyIHwgWzMs IDQsIDUsIDZdIHwgNgorIDIgfCAzIHwgWzEsIDIsIDNdICAgIHwgMworIDMgfCAzIHwgWzEs IDIsIDNdICAgIHwgMworIDMgfCAzIHwgWzIsIDMsIDQsIDVdIHwgMworIDMgfCAzIHwgWzIs IDMsIDQsIDVdIHwgNAorIDMgfCAzIHwgWzIsIDMsIDQsIDVdIHwgNQorIDQgfCAzIHwgWzEs IDIsIDNdICAgIHwgMworIDQgfCAzIHwgWzIsIDMsIDQsIDVdIHwgMworIDQgfCAzIHwgWzIs IDMsIDQsIDVdIHwgNAorIDQgfCAzIHwgWzIsIDMsIDQsIDVdIHwgNQorIDQgfCAzIHwgWzMs IDQsIDUsIDZdIHwgMworIDQgfCAzIHwgWzMsIDQsIDUsIDZdIHwgNAorIDQgfCAzIHwgWzMs IDQsIDUsIDZdIHwgNQorIDQgfCAzIHwgWzMsIDQsIDUsIDZdIHwgNgorKDUyIHJvd3MpCisK Ky0tIFNob3VsZCBmYWlsIChKU09OIGFyZ3VtZW50cyBhcmUgbm90IHBhc3NlZCB0byBjb2x1 bW4gcGF0aHMpCitTRUxFQ1QgKgorRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdbMSwyLDNd JywKKwknJFsqXSA/IChAIDwgJHgpJworCQlQQVNTSU5HIDEwIEFTIHgKKwkJQ09MVU1OUyAo eSB0ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQgPyAoQCA8ICR4KScpCisJKSBqdDsKK0VSUk9S OiAgY291bGQgbm90IGZpbmQganNvbnBhdGggdmFyaWFibGUgIngiCistLSBFeHRlbnNpb246 IG5vbi1jb25zdGFudCBKU09OIHBhdGgKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAneyJh IjogMTIzfScsICckJyB8fCAnLicgfHwgJ2EnKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0t LS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICd7ImEiOiAx MjN9JywgJyQnIHx8ICcuJyB8fCAnYScpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0K KyAxMjMKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ3siYSI6IDEyM30n LCAnJCcgfHwgJy4nIHx8ICdiJyBERUZBVUxUICdmb28nIE9OIEVNUFRZKTsKKyBqc29uX3Zh bHVlIAorLS0tLS0tLS0tLS0tCisgZm9vCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZ KGpzb25iICd7ImEiOiAxMjN9JywgJyQnIHx8ICcuJyB8fCAnYScpOworIGpzb25fcXVlcnkg CistLS0tLS0tLS0tLS0KKyAxMjMKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNv bmIgJ3siYSI6IDEyM30nLCAnJCcgfHwgJy4nIHx8ICdhJyBXSVRIIFdSQVBQRVIpOworIGpz b25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyBbMTIzXQorKDEgcm93KQorCistLSBTaG91bGQg ZmFpbCAoaW52YWxpZCBwYXRoKQorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDEy M30nLCAnZXJyb3InIHx8ICcgJyB8fCAnZXJyb3InKTsKK0VSUk9SOiAgc3ludGF4IGVycm9y IGF0IG9yIG5lYXIgIiAiIG9mIGpzb25wYXRoIGlucHV0CistLSBTaG91bGQgZmFpbCAobm90 IHN1cHBvcnRlZCkKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAneyJhIjogMTIz fScsICckJyB8fCAnLicgfHwgJ2EnIENPTFVNTlMgKGZvbyBpbnQpKTsKK0VSUk9SOiAgb25s eSBzdHJpbmcgY29uc3RhbnRzIHN1cHBvcnRlZCBpbiBKU09OX1RBQkxFIHBhdGggc3BlY2lm aWNhdGlvbgorTElORSAxOiBTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJ3siYSI6 IDEyM30nLCAnJCcgfHwgJy4nIHx8ICcuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvanNvbl9zcWxqc29uLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25f c3FsanNvbi5zcWwKaW5kZXggNGYzMGZhNDZiOS4uZGY0YTQzMGQ4OCAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbl9zcWxqc29uLnNxbAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9qc29uX3NxbGpzb24uc3FsCkBAIC05LDMgKzksNyBAQCBTRUxFQ1QgSlNP Tl9WQUxVRShOVUxMIEZPUk1BVCBKU09OLCAnJCcpOwogLS0gSlNPTl9RVUVSWQogCiBTRUxF Q1QgSlNPTl9RVUVSWShOVUxMIEZPUk1BVCBKU09OLCAnJCcpOworCistLSBKU09OX1RBQkxF CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShOVUxMIEZPUk1BVCBKU09OLCAnJCcgQ09M VU1OUyAoZm9vIHRleHQpKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pz b25iX3NxbGpzb24uc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmJfc3FsanNvbi5z cWwKaW5kZXggYTNlMTZmZTcwMy4uOTQzNzY5Y2MwNSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvanNvbmJfc3FsanNvbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9z cWwvanNvbmJfc3FsanNvbi5zcWwKQEAgLTMyMCwzICszMjAsNjMyIEBAIENSRUFURSBJTkRF WCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckWzEsICQuYSA/ IChALmRhdGV0aW1lKCkKIENSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkg KEpTT05fUVVFUlkoanMsICckWzEsIDAgdG8gJC5hID8gKEAuZGF0ZXRpbWUoKSA9PSAkeCld JyBQQVNTSU5HICcxMjozNCc6OnRpbWUgQVMgeCkpOwogQ1JFQVRFIElOREVYIE9OIHRlc3Rf anNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyRbMSwgJC5hID8gKEAuZGF0ZXRp bWUoIkhIOk1JIikgPT0gJHgpXScgUEFTU0lORyAnMTI6MzQnOjp0aW1lIEFTIHgpKTsKIERS T1AgVEFCTEUgdGVzdF9qc29uYl9tdXRhYmlsaXR5OworCistLSBKU09OX1RBQkxFCisKKy0t IFNob3VsZCBmYWlsIChKU09OX1RBQkxFIGNhbiBiZSB1c2VkIG9ubHkgaW4gRlJPTSBjbGF1 c2UpCitTRUxFQ1QgSlNPTl9UQUJMRSgnW10nLCAnJCcpOworCistLSBTaG91bGQgZmFpbCAo bm8gY29sdW1ucykKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShOVUxMLCAnJCcgQ09MVU1O UyAoKSk7CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSAoTlVMTDo6anNvbmIsICckJyBD T0xVTU5TICh2MSB0aW1lc3RhbXApKSBBUyBmICh2MSwgdjIpOworCistLSBOVUxMID0+IGVt cHR5IHRhYmxlCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoTlVMTDo6anNvbmIsICckJyBD T0xVTU5TIChmb28gaW50KSkgYmFyOworCistLQorU0VMRUNUICogRlJPTSBKU09OX1RBQkxF KGpzb25iICcxMjMnLCAnJCcKKwlDT0xVTU5TIChpdGVtIGludCBQQVRIICckJywgZm9vIGlu dCkpIGJhcjsKKworLS0gSlNPTl9UQUJMRTogYmFzaWMgZnVuY3Rpb25hbGl0eQorQ1JFQVRF IERPTUFJTiBqc29uYl90ZXN0X2RvbWFpbiBBUyB0ZXh0IENIRUNLICh2YWx1ZSA8PiAnZm9v Jyk7CisKK1NFTEVDVCAqCitGUk9NCisJKFZBTFVFUworCQkoJzEnKSwKKwkJKCdbXScpLAor CQkoJ3t9JyksCisJCSgnWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwg ZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXScpCisJKSB2 YWxzKGpzKQorCUxFRlQgT1VURVIgSk9JTgorLS0gSlNPTl9UQUJMRSBpcyBpbXBsaWNpdGx5 IGxhdGVyYWwKKwlKU09OX1RBQkxFKAorCQl2YWxzLmpzOjpqc29uYiwgJ2xheCAkWypdJwor CQlDT0xVTU5TICgKKwkJCWlkIEZPUiBPUkRJTkFMSVRZLAorCQkJaWQyIEZPUiBPUkRJTkFM SVRZLCAtLSBhbGxvd2VkIGFkZGl0aW9uYWwgb3JkaW5hbGl0eSBjb2x1bW5zCisJCQkiaW50 IiBpbnQgUEFUSCAnJCcsCisJCQkidGV4dCIgdGV4dCBQQVRIICckJywKKwkJCSJjaGFyKDQp IiBjaGFyKDQpIFBBVEggJyQnLAorCQkJImJvb2wiIGJvb2wgUEFUSCAnJCcsCisJCQkibnVt ZXJpYyIgbnVtZXJpYyBQQVRIICckJywKKwkJCSJkb21haW4iIGpzb25iX3Rlc3RfZG9tYWlu IFBBVEggJyQnLAorCQkJanMganNvbiBQQVRIICckJywKKwkJCWpiIGpzb25iIFBBVEggJyQn LAorCQkJanN0IHRleHQgICAgRk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanNjIGNoYXIo NCkgRk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanN2IHZhcmNoYXIoNCkgRk9STUFUIEpT T04gIFBBVEggJyQnLAorCQkJanNiIGpzb25iIEZPUk1BVCBKU09OIFBBVEggJyQnLAorCQkJ anNicSBqc29uYiBGT1JNQVQgSlNPTiBQQVRIICckJyBPTUlUIFFVT1RFUywKKwkJCWFhYSBp bnQsIC0tIGltcGxpY2l0IHBhdGggJyQuImFhYSInLAorCQkJYWFhMSBpbnQgUEFUSCAnJC5h YWEnLAorCQkJZXhpc3RzMSBib29sIEVYSVNUUyBQQVRIICckLmFhYScsCisJCQlleGlzdHMy IGludCBFWElTVFMgUEFUSCAnJC5hYWEnLAorCQkJZXhpc3RzMyBpbnQgRVhJU1RTIFBBVEgg J3N0cmljdCAkLmFhYScgVU5LTk9XTiBPTiBFUlJPUiwKKwkJCWV4aXN0czQgdGV4dCBFWElT VFMgUEFUSCAnc3RyaWN0ICQuYWFhJyBGQUxTRSBPTiBFUlJPUiwKKworCQkJanMyIGpzb24g UEFUSCAnJCcsCisJCQlqc2IydyBqc29uYiBQQVRIICckJyBXSVRIIFdSQVBQRVIsCisJCQlq c2IycSBqc29uYiBQQVRIICckJyBPTUlUIFFVT1RFUywKKwkJCWlhIGludFtdIFBBVEggJyQn LAorCQkJdGEgdGV4dFtdIFBBVEggJyQnLAorCQkJamJhIGpzb25iW10gUEFUSCAnJCcKKwkJ KQorCSkganQKKwlPTiB0cnVlOworCistLSBKU09OX1RBQkxFOiBUZXN0IGJhY2t3YXJkIHBh cnNpbmcKKworQ1JFQVRFIFZJRVcganNvbmJfdGFibGVfdmlldyBBUworU0VMRUNUICogRlJP TQorCUpTT05fVEFCTEUoCisJCWpzb25iICdudWxsJywgJ2xheCAkWypdJyBQQVNTSU5HIDEg KyAyIEFTIGEsIGpzb24gJyJmb28iJyBBUyAiYiBjIgorCQlDT0xVTU5TICgKKwkJCWlkIEZP UiBPUkRJTkFMSVRZLAorCQkJaWQyIEZPUiBPUkRJTkFMSVRZLCAtLSBhbGxvd2VkIGFkZGl0 aW9uYWwgb3JkaW5hbGl0eSBjb2x1bW5zCisJCQkiaW50IiBpbnQgUEFUSCAnJCcsCisJCQki dGV4dCIgdGV4dCBQQVRIICckJywKKwkJCSJjaGFyKDQpIiBjaGFyKDQpIFBBVEggJyQnLAor CQkJImJvb2wiIGJvb2wgUEFUSCAnJCcsCisJCQkibnVtZXJpYyIgbnVtZXJpYyBQQVRIICck JywKKwkJCSJkb21haW4iIGpzb25iX3Rlc3RfZG9tYWluIFBBVEggJyQnLAorCQkJanMganNv biBQQVRIICckJywKKwkJCWpiIGpzb25iIFBBVEggJyQnLAorCQkJanN0IHRleHQgICAgRk9S TUFUIEpTT04gIFBBVEggJyQnLAorCQkJanNjIGNoYXIoNCkgRk9STUFUIEpTT04gIFBBVEgg JyQnLAorCQkJanN2IHZhcmNoYXIoNCkgRk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanNi IGpzb25iICAgRk9STUFUIEpTT04gUEFUSCAnJCcsCisJCQlqc2JxIGpzb25iIEZPUk1BVCBK U09OIFBBVEggJyQnIE9NSVQgUVVPVEVTLAorCQkJYWFhIGludCwgLS0gaW1wbGljaXQgcGF0 aCAnJC4iYWFhIicsCisJCQlhYWExIGludCBQQVRIICckLmFhYScsCisJCQlleGlzdHMxIGJv b2wgRVhJU1RTIFBBVEggJyQuYWFhJywKKwkJCWV4aXN0czIgaW50IEVYSVNUUyBQQVRIICck LmFhYScgVFJVRSBPTiBFUlJPUiwKKwkJCWV4aXN0czMgdGV4dCBFWElTVFMgUEFUSCAnc3Ry aWN0ICQuYWFhJyBVTktOT1dOIE9OIEVSUk9SLAorCisJCQlqczIganNvbiBQQVRIICckJywK KwkJCWpzYjJ3IGpzb25iIFBBVEggJyQnIFdJVEggV1JBUFBFUiwKKwkJCWpzYjJxIGpzb25i IFBBVEggJyQnIE9NSVQgUVVPVEVTLAorCQkJaWEgaW50W10gUEFUSCAnJCcsCisJCQl0YSB0 ZXh0W10gUEFUSCAnJCcsCisJCQlqYmEganNvbmJbXSBQQVRIICckJywKKworCQkJTkVTVEVE IFBBVEggJyRbMV0nIEFTIHAxIENPTFVNTlMgKAorCQkJCWExIGludCwKKwkJCQlORVNURUQg UEFUSCAnJFsqXScgQVMgInAxIDEiIENPTFVNTlMgKAorCQkJCQlhMTEgdGV4dAorCQkJCSks CisJCQkJYjEgdGV4dAorCQkJKSwKKwkJCU5FU1RFRCBQQVRIICckWzJdJyBBUyBwMiBDT0xV TU5TICgKKwkJCQlORVNURUQgUEFUSCAnJFsqXScgQVMgInAyOjEiIENPTFVNTlMgKAorCQkJ CQlhMjEgdGV4dAorCQkJCSksCisJCQkJTkVTVEVEIFBBVEggJyRbKl0nIEFTIHAyMiBDT0xV TU5TICgKKwkJCQkJYTIyIHRleHQKKwkJCQkpCisJCQkpCisJCSkKKwkpOworCitcc3YganNv bmJfdGFibGVfdmlldworCitFWFBMQUlOIChDT1NUUyBPRkYsIFZFUkJPU0UpIFNFTEVDVCAq IEZST00ganNvbmJfdGFibGVfdmlldzsKKworRFJPUCBWSUVXIGpzb25iX3RhYmxlX3ZpZXc7 CitEUk9QIERPTUFJTiBqc29uYl90ZXN0X2RvbWFpbjsKKworLS0gSlNPTl9UQUJMRTogT04g RU1QVFkvT04gRVJST1IgYmVoYXZpb3IKK1NFTEVDVCAqCitGUk9NCisJKFZBTFVFUyAoJzEn KSwgKCciZXJyIicpKSB2YWxzKGpzKSwKKwlKU09OX1RBQkxFKHZhbHMuanM6Ompzb25iLCAn JCcgQ09MVU1OUyAoYSBpbnQgUEFUSCAnJCcpKSBqdDsKKworU0VMRUNUICoKK0ZST00KKwko VkFMVUVTICgnMScpLCAoJyJlcnIiJykpIHZhbHMoanMpCisJCUxFRlQgT1VURVIgSk9JTgor CUpTT05fVEFCTEUodmFscy5qczo6anNvbmIsICckJyBDT0xVTU5TIChhIGludCBQQVRIICck JykgRVJST1IgT04gRVJST1IpIGp0CisJCU9OIHRydWU7CisKK1NFTEVDVCAqCitGUk9NCisJ KFZBTFVFUyAoJzEnKSwgKCciZXJyIicpKSB2YWxzKGpzKQorCQlMRUZUIE9VVEVSIEpPSU4K KwlKU09OX1RBQkxFKHZhbHMuanM6Ompzb25iLCAnJCcgQ09MVU1OUyAoYSBpbnQgUEFUSCAn JCcgRVJST1IgT04gRVJST1IpKSBqdAorCQlPTiB0cnVlOworCitTRUxFQ1QgKiBGUk9NIEpT T05fVEFCTEUoanNvbmIgJzEnLCAnJCcgQ09MVU1OUyAoYSBpbnQgUEFUSCAnJC5hJyBFUlJP UiBPTiBFTVBUWSkpIGp0OworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcxJywg JyQnIENPTFVNTlMgKGEgaW50IFBBVEggJ3N0cmljdCAkLmEnIEVSUk9SIE9OIEVNUFRZKSBF UlJPUiBPTiBFUlJPUikganQ7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJzEn LCAnJCcgQ09MVU1OUyAoYSBpbnQgUEFUSCAnbGF4ICQuYScgRVJST1IgT04gRU1QVFkpIEVS Uk9SIE9OIEVSUk9SKSBqdDsKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICci YSInLCAnJCcgQ09MVU1OUyAoYSBpbnQgUEFUSCAnJCcgICBERUZBVUxUIDEgT04gRU1QVFkg REVGQVVMVCAyIE9OIEVSUk9SKSkganQ7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNv bmIgJyJhIicsICckJyBDT0xVTU5TIChhIGludCBQQVRIICdzdHJpY3QgJC5hJyBERUZBVUxU IDEgT04gRU1QVFkgREVGQVVMVCAyIE9OIEVSUk9SKSkganQ7CitTRUxFQ1QgKiBGUk9NIEpT T05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGludCBQQVRIICdsYXggJC5h JyBERUZBVUxUIDEgT04gRU1QVFkgREVGQVVMVCAyIE9OIEVSUk9SKSkganQ7CisKKy0tIEpT T05fVEFCTEU6IEVYSVNUUyBQQVRIIHR5cGVzCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUo anNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGludDQgRVhJU1RTIFBBVEggJyQuYScpKTsK K1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEg aW50MiBFWElTVFMgUEFUSCAnJC5hJykpOworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpz b25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBpbnQ4IEVYSVNUUyBQQVRIICckLmEnKSk7CitT RUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGZs b2F0NCBFWElTVFMgUEFUSCAnJC5hJykpOworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpz b25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBjaGFyKDMpIEVYSVNUUyBQQVRIICckLmEnKSk7 CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChh IGpzb24gRVhJU1RTIFBBVEggJyQuYScpKTsKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShq c29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEganNvbmIgRVhJU1RTIFBBVEggJyQuYScpKTsK KworLS0gSlNPTl9UQUJMRTogbmVzdGVkIHBhdGhzIGFuZCBwbGFucworCistLSBTaG91bGQg ZmFpbCAoSlNPTl9UQUJMRSBjb2x1bW5zIG11c3QgY29udGFpbiBleHBsaWNpdCBBUyBwYXRo CistLSBzcGVjaWZpY2F0aW9ucyBpZiBleHBsaWNpdCBQTEFOIGNsYXVzZSBpcyB1c2VkKQor U0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdbXScsICckJyAtLSBBUyA8cGF0 aCBuYW1lPiByZXF1aXJlZCBoZXJlCisJQ09MVU1OUyAoCisJCWZvbyBpbnQgUEFUSCAnJCcK KwkpCisJUExBTiBERUZBVUxUIChVTklPTikKKykganQ7CisKK1NFTEVDVCAqIEZST00gSlNP Tl9UQUJMRSgKKwlqc29uYiAnW10nLCAnJCcgQVMgcGF0aDEKKwlDT0xVTU5TICgKKwkJTkVT VEVEIFBBVEggJyQnIENPTFVNTlMgKCAtLSBBUyA8cGF0aCBuYW1lPiByZXF1aXJlZCBoZXJl CisJCQlmb28gaW50IFBBVEggJyQnCisJCSkKKwkpCisJUExBTiBERUZBVUxUIChVTklPTikK KykganQ7CisKKy0tIFNob3VsZCBmYWlsIChjb2x1bW4gbmFtZXMgbXVzdCBiZSBkaXN0aW5j dCkKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnW10nLCAnJCcgQVMgYQor CUNPTFVNTlMgKAorCQlhIGludAorCSkKKykganQ7CisKK1NFTEVDVCAqIEZST00gSlNPTl9U QUJMRSgKKwlqc29uYiAnW10nLCAnJCcgQVMgYQorCUNPTFVNTlMgKAorCQliIGludCwKKwkJ TkVTVEVEIFBBVEggJyQnIEFTIGEKKwkJQ09MVU1OUyAoCisJCQljIGludAorCQkpCisJKQor KSBqdDsKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdbXScsICckJwor CUNPTFVNTlMgKAorCQliIGludCwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIGIKKwkJQ09MVU1O UyAoCisJCQljIGludAorCQkpCisJKQorKSBqdDsKKworU0VMRUNUICogRlJPTSBKU09OX1RB QkxFKAorCWpzb25iICdbXScsICckJworCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcg QVMgYQorCQlDT0xVTU5TICgKKwkJCWIgaW50CisJCSksCisJCU5FU1RFRCBQQVRIICckJwor CQlDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBhCisJCQlDT0xVTU5TICgKKwkJ CQljIGludAorCQkJKQorCQkpCisJKQorKSBqdDsKKworLS0gSlNPTl9UQUJMRTogcGxhbiB2 YWxpZGF0aW9uCisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnbnVsbCcs ICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09M VU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICks CisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwK KwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQn IEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDEpCispIGp0 OworCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScg QVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAor CQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVT VEVEIFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RF RCBQQVRIICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEg Q09MVU1OUyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAwKQorKSBqdDsKKworU0VM RUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJ Q09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RF RCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRI ICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAn JCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMg KCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRFUiBwMykKKykganQ7CisKK1NF TEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnbnVsbCcsICckWypdJyBBUyBwMAor CUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNU RUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFU SCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEgg JyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5T ICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDAgVU5JT04gcDEgVU5JT04gcDExKQor KSBqdDsKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJyRb Kl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5T ICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJ CU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlO RVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMg cDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRFUiAocDEg Q1JPU1MgcDEzKSkKKykganQ7CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29u YiAnbnVsbCcsICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcg QVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBm b28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50 ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVE IFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAo cDAgT1VURVIgKHAxIENST1NTIHAyKSkKKykganQ7CisKK1NFTEVDVCAqIEZST00gSlNPTl9U QUJMRSgKKwlqc29uYiAnbnVsbCcsICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNU RUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEx IENPTFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVN TlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMg KAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkK KwkpCisJUExBTiAocDAgT1VURVIgKChwMSBVTklPTiBwMTEpIENST1NTIHAyKSkKKykganQ7 CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnbnVsbCcsICckWypdJyBB UyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJ CQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlORVNU RUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVE IFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBD T0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDAgT1VURVIgKChwMSBJTk5F UiBwMTEpIENST1NTIHAyKSkKKykganQ7CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgK Kwlqc29uYiAnbnVsbCcsICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFU SCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVN TlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBi YXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJ TkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJ UExBTiAocDAgT1VURVIgKChwMSBJTk5FUiAocDEyIENST1NTIHAxMSkpIENST1NTIHAyKSkK KykganQ7CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnbnVsbCcsICdz dHJpY3QgJFsqXScgQVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAx IENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGlu dCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJ CSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRI ICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAwIE9V VEVSICgocDEgSU5ORVIgKHAxMiBDUk9TUyBwMTEpKSBDUk9TUyAocDIgSU5ORVIgcDIxKSkp CispIGp0OworCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAn c3RyaWN0ICRbKl0nIC0tIHdpdGhvdXQgcm9vdCBwYXRoIG5hbWUKKwlDT0xVTU5TICgKKwkJ TkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFT IHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBD T0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xV TU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQor CQkpCisJKQorCVBMQU4gKChwMSBJTk5FUiAocDEyIENST1NTIHAxMSkpIENST1NTIChwMiBJ Tk5FUiBwMjEpKQorKSBqdDsKKworLS0gSlNPTl9UQUJMRTogcGxhbiBleGVjdXRpb24KKwor Q1JFQVRFIFRFTVAgVEFCTEUganNvbmJfdGFibGVfdGVzdCAoanMganNvbmIpOworCitJTlNF UlQgSU5UTyBqc29uYl90YWJsZV90ZXN0CitWQUxVRVMgKAorCSdbCisJCXsiYSI6ICAxLCAg ImIiOiBbXSwgImMiOiBbXX0sCisJCXsiYSI6ICAyLCAgImIiOiBbMSwgMiwgM10sICJjIjog WzEwLCBudWxsLCAyMF19LAorCQl7ImEiOiAgMywgICJiIjogWzEsIDJdLCAiYyI6IFtdfSwK KwkJeyJ4IjogIjQiLCAiYiI6IFsxLCAyXSwgImMiOiAxMjN9CisJIF0nCispOworCistLSB1 bnNwZWNpZmllZCBwbGFuIChvdXRlciwgdW5pb24pCitzZWxlY3QKKwlqdC4qCitmcm9tCisJ anNvbmJfdGFibGVfdGVzdCBqdHQsCisJanNvbl90YWJsZSAoCisJCWp0dC5qcywnc3RyaWN0 ICRbKl0nIGFzIHAKKwkJY29sdW1ucyAoCisJCQluIGZvciBvcmRpbmFsaXR5LAorCQkJYSBp bnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBvbiBlbXB0eSwKKwkJCW5lc3RlZCBwYXRo ICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5zICggYiBpbnQgcGF0aCAnJCcgKSwKKwkJ CW5lc3RlZCBwYXRoICdzdHJpY3QgJC5jWypdJyBhcyBwYyBjb2x1bW5zICggYyBpbnQgcGF0 aCAnJCcgKQorCQkpCisJKSBqdDsKKworLS0gZGVmYXVsdCBwbGFuIChvdXRlciwgdW5pb24p CitzZWxlY3QKKwlqdC4qCitmcm9tCisJanNvbmJfdGFibGVfdGVzdCBqdHQsCisJanNvbl90 YWJsZSAoCisJCWp0dC5qcywnc3RyaWN0ICRbKl0nIGFzIHAKKwkJY29sdW1ucyAoCisJCQlu IGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBv biBlbXB0eSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5z ICggYiBpbnQgcGF0aCAnJCcgKSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5jWypdJyBh cyBwYyBjb2x1bW5zICggYyBpbnQgcGF0aCAnJCcgKQorCQkpCisJCXBsYW4gZGVmYXVsdCAo b3V0ZXIsIHVuaW9uKQorCSkganQ7CisKKy0tIHNwZWNpZmljIHBsYW4gKHAgb3V0ZXIgKHBi IHVuaW9uIHBjKSkKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0 dCwKKwlqc29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1 bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBk ZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFz IHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmlj dCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyApCisJCSkKKwkJcGxh biAocCBvdXRlciAocGIgdW5pb24gcGMpKQorCSkganQ7CisKKy0tIHNwZWNpZmljIHBsYW4g KHAgb3V0ZXIgKHBjIHVuaW9uIHBiKSkKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90 YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScg YXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRo ICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmlj dCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICckJyApLAorCQkJbmVzdGVk IHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyAp CisJCSkKKwkJcGxhbiAocCBvdXRlciAocGMgdW5pb24gcGIpKQorCSkganQ7CisKKy0tIGRl ZmF1bHQgcGxhbiAoaW5uZXIsIHVuaW9uKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25i X3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypd JyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBh dGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3Ry aWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0 ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQn ICkKKwkJKQorCQlwbGFuIGRlZmF1bHQgKGlubmVyKQorCSkganQ7CisKKy0tIHNwZWNpZmlj IHBsYW4gKHAgaW5uZXIgKHBiIHVuaW9uIHBjKSkKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlq c29uYl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3Qg JFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGlu dCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBhdGgg J3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICckJyApLAorCQkJ bmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRo ICckJyApCisJCSkKKwkJcGxhbiAocCBpbm5lciAocGIgdW5pb24gcGMpKQorCSkganQ7CisK Ky0tIGRlZmF1bHQgcGxhbiAoaW5uZXIsIGNyb3NzKQorc2VsZWN0CisJanQuKgorZnJvbQor CWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmlj dCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEg aW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0 aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJ CQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBh dGggJyQnICkKKwkJKQorCQlwbGFuIGRlZmF1bHQgKGNyb3NzLCBpbm5lcikKKwkpIGp0Owor CistLSBzcGVjaWZpYyBwbGFuIChwIGlubmVyIChwYiBjcm9zcyBwYykpCitzZWxlY3QKKwlq dC4qCitmcm9tCisJanNvbmJfdGFibGVfdGVzdCBqdHQsCisJanNvbl90YWJsZSAoCisJCWp0 dC5qcywnc3RyaWN0ICRbKl0nIGFzIHAKKwkJY29sdW1ucyAoCisJCQluIGZvciBvcmRpbmFs aXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBvbiBlbXB0eSwKKwkJ CW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5zICggYiBpbnQgcGF0 aCAnJCcgKSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5jWypdJyBhcyBwYyBjb2x1bW5z ICggYyBpbnQgcGF0aCAnJCcgKQorCQkpCisJCXBsYW4gKHAgaW5uZXIgKHBiIGNyb3NzIHBj KSkKKwkpIGp0OworCistLSBkZWZhdWx0IHBsYW4gKG91dGVyLCBjcm9zcykKK3NlbGVjdAor CWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJ anR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9yZGlu YWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAor CQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBw YXRoICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVt bnMgKCBjIGludCBwYXRoICckJyApCisJCSkKKwkJcGxhbiBkZWZhdWx0IChvdXRlciwgY3Jv c3MpCisJKSBqdDsKKworLS0gc3BlY2lmaWMgcGxhbiAocCBvdXRlciAocGIgY3Jvc3MgcGMp KQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25f dGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJ biBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEg b24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1u cyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScg YXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChwIG91dGVy IChwYiBjcm9zcyBwYykpCisJKSBqdDsKKworCitzZWxlY3QKKwlqdC4qLCBiMSArIDEwMCBh cyBiCitmcm9tCisJanNvbl90YWJsZSAoanNvbmIKKwkJJ1sKKwkJCXsiYSI6ICAxLCAgImIi OiBbWzEsIDEwXSwgWzJdLCBbMywgMzAsIDMwMF1dLCAiYyI6IFsxLCBudWxsLCAyXX0sCisJ CQl7ImEiOiAgMiwgICJiIjogWzEwLCAyMF0sICJjIjogWzEsIG51bGwsIDJdfSwKKwkJCXsi eCI6ICIzIiwgImIiOiBbMTEsIDIyLCAzMywgNDRdfQorCQkgXScsCisJCSckWypdJyBhcyBw CisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xh eCAkLmEnIGRlZmF1bHQgLTEgb24gZXJyb3IsCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQu YlsqXScgYXMgcGIgY29sdW1ucyAoCisJCQkJYiB0ZXh0IGZvcm1hdCBqc29uIHBhdGggJyQn LAorCQkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJFsqXScgYXMgcGIxIGNvbHVtbnMgKAorCQkJ CQliMSBpbnQgcGF0aCAnJCcKKwkJCQkpCisJCQkpLAorCQkJbmVzdGVkIHBhdGggJ3N0cmlj dCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKAorCQkJCWMgdGV4dCBmb3JtYXQganNvbiBwYXRo ICckJywKKwkJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICRbKl0nIGFzIHBjMSBjb2x1bW5zICgK KwkJCQkJYzEgaW50IHBhdGggJyQnCisJCQkJKQorCQkJKQorCQkpCisJCS0tcGxhbiBkZWZh dWx0KG91dGVyLCBjcm9zcykKKwkJcGxhbihwIG91dGVyICgocGIgaW5uZXIgcGIxKSBjcm9z cyAocGMgb3V0ZXIgcGMxKSkpCisJKSBqdDsKKworLS0gU2hvdWxkIHN1Y2NlZWQgKEpTT04g YXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gcm9vdCBhbmQgbmVzdGVkIHBhdGhzKQorU0VMRUNU ICoKK0ZST00KKwlnZW5lcmF0ZV9zZXJpZXMoMSwgNCkgeCwKKwlnZW5lcmF0ZV9zZXJpZXMo MSwgMykgeSwKKwlKU09OX1RBQkxFKGpzb25iCisJCSdbWzEsMiwzXSxbMiwzLDQsNV0sWzMs NCw1LDZdXScsCisJCSdzdHJpY3QgJFsqXSA/IChAWypdIDwgJHgpJworCQlQQVNTSU5HIHgg QVMgeCwgeSBBUyB5CisJCUNPTFVNTlMgKAorCQkJeSB0ZXh0IEZPUk1BVCBKU09OIFBBVEgg JyQnLAorCQkJTkVTVEVEIFBBVEggJ3N0cmljdCAkWypdID8gKEAgPj0gJHkpJworCQkJQ09M VU1OUyAoCisJCQkJeiBpbnQgUEFUSCAnJCcKKwkJCSkKKwkJKQorCSkganQ7CisKKy0tIFNo b3VsZCBmYWlsIChKU09OIGFyZ3VtZW50cyBhcmUgbm90IHBhc3NlZCB0byBjb2x1bW4gcGF0 aHMpCitTRUxFQ1QgKgorRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdbMSwyLDNdJywKKwkn JFsqXSA/IChAIDwgJHgpJworCQlQQVNTSU5HIDEwIEFTIHgKKwkJQ09MVU1OUyAoeSB0ZXh0 IEZPUk1BVCBKU09OIFBBVEggJyQgPyAoQCA8ICR4KScpCisJKSBqdDsKKworLS0gRXh0ZW5z aW9uOiBub24tY29uc3RhbnQgSlNPTiBwYXRoCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIg J3siYSI6IDEyM30nLCAnJCcgfHwgJy4nIHx8ICdhJyk7CitTRUxFQ1QgSlNPTl9WQUxVRShq c29uYiAneyJhIjogMTIzfScsICckJyB8fCAnLicgfHwgJ2EnKTsKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICd7ImEiOiAxMjN9JywgJyQnIHx8ICcuJyB8fCAnYicgREVGQVVMVCAnZm9v JyBPTiBFTVBUWSk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAneyJhIjogMTIzfScsICck JyB8fCAnLicgfHwgJ2EnKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICd7ImEiOiAxMjN9 JywgJyQnIHx8ICcuJyB8fCAnYScgV0lUSCBXUkFQUEVSKTsKKy0tIFNob3VsZCBmYWlsIChp bnZhbGlkIHBhdGgpCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAneyJhIjogMTIzfScsICdl cnJvcicgfHwgJyAnIHx8ICdlcnJvcicpOworLS0gU2hvdWxkIGZhaWwgKG5vdCBzdXBwb3J0 ZWQpCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJ3siYSI6IDEyM30nLCAnJCcg fHwgJy4nIHx8ICdhJyBDT0xVTU5TIChmb28gaW50KSk7CmRpZmYgLS1naXQgYS9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CmluZGV4IDU1MTRkMTllNTMuLjY4OGVjZTZkMWYgMTAwNjQ0Ci0tLSBhL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CkBAIC0xMjkzLDYgKzEyOTMsNyBAQCBKc29uUGF0aE11dGFibGVDb250 ZXh0CiBKc29uUGF0aFBhcnNlSXRlbQogSnNvblBhdGhQYXJzZVJlc3VsdAogSnNvblBhdGhQ cmVkaWNhdGVDYWxsYmFjaworSnNvblBhdGhTcGVjCiBKc29uUGF0aFN0cmluZwogSnNvblBh dGhWYXJDYWxsYmFjawogSnNvblBhdGhWYXJpYWJsZUV2YWxDb250ZXh0CkBAIC0xMzAxLDYg KzEzMDIsMTcgQEAgSnNvblJldHVybmluZwogSnNvblNjYWxhckV4cHIKIEpzb25TZW1BY3Rp b24KIEpzb25TZXJpYWxpemVFeHByCitKc29uVGFibGUKK0pzb25UYWJsZUNvbHVtbgorSnNv blRhYmxlQ29sdW1uVHlwZQorSnNvblRhYmxlQ29udGV4dAorSnNvblRhYmxlSm9pblN0YXRl CitKc29uVGFibGVQYXJlbnQKK0pzb25UYWJsZVBsYW4KK0pzb25UYWJsZVBsYW5Kb2luVHlw ZQorSnNvblRhYmxlUGxhblR5cGUKK0pzb25UYWJsZVNjYW5TdGF0ZQorSnNvblRhYmxlU2li bGluZwogSnNvblRva2VuVHlwZQogSnNvblRyYW5zZm9ybVN0cmluZ1ZhbHVlc0FjdGlvbgog SnNvblR5cGVDYXRlZ29yeQpAQCAtMjczMSw2ICsyNzQzLDcgQEAgVGFibGVGdW5jCiBUYWJs ZUZ1bmNSb3V0aW5lCiBUYWJsZUZ1bmNTY2FuCiBUYWJsZUZ1bmNTY2FuU3RhdGUKK1RhYmxl RnVuY1R5cGUKIFRhYmxlSW5mbwogVGFibGVMaWtlQ2xhdXNlCiBUYWJsZVNhbXBsZUNsYXVz ZQotLSAKMi4zNC4xCgo= --------------MwgLFi9fcx5tDY0Wnjp80Eno Content-Type: text/x-patch; charset=UTF-8; name="v10-0009-Claim-SQL-standard-compliance-for-SQL-JSON-features.patch" Content-Disposition: attachment; filename*0="v10-0009-Claim-SQL-standard-compliance-for-SQL-JSON-features"; filename*1=".patch" Content-Transfer-Encoding: base64 RnJvbSAyMmZlNzQ4MjBkMmY0MjMwNzkzODdlNzBlZjUwN2Y1MjVmZGU3MzgwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5l Lm5ldD4KRGF0ZTogRnJpLCAyOSBBcHIgMjAyMiAwOTowMTowNSAtMDQwMApTdWJqZWN0OiBb UEFUQ0ggOS85XSBDbGFpbSBTUUwgc3RhbmRhcmQgY29tcGxpYW5jZSBmb3IgU1FML0pTT04g ZmVhdHVyZXMKCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vZDAzZDgwOWMtZDBm Yi1mZDZhLTE0NzYtZDZkYzE4ZWM5NDBlQGR1bnNsYW5lLm5ldAotLS0KIHNyYy9iYWNrZW5k L2NhdGFsb2cvc3FsX2ZlYXR1cmVzLnR4dCB8IDMwICsrKysrKysrKysrKysrLS0tLS0tLS0t LS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50eHQg Yi9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50eHQKaW5kZXggYmI0YzEzNWE3 Zi4uMTM1NTY3ZjI2OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zcWxfZmVh dHVyZXMudHh0CisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1cmVzLnR4dApA QCAtNTMwLDIwICs1MzAsMjAgQEAgVDY1NAlTUUwtZHluYW1pYyBzdGF0ZW1lbnRzIGluIGV4 dGVybmFsIHJvdXRpbmVzCQkJTk8KIFQ2NTUJQ3ljbGljYWxseSBkZXBlbmRlbnQgcm91dGlu ZXMJCQlZRVMJCiBUNjYxCU5vbi1kZWNpbWFsIGludGVnZXIgbGl0ZXJhbHMJCQlZRVMJU1FM OjIwMnggZHJhZnQKIFQ2NjIJVW5kZXJzY29yZXMgaW4gaW50ZWdlciBsaXRlcmFscwkJCVlF UwlTUUw6MjAyeCBkcmFmdAotVDgxMQlCYXNpYyBTUUwvSlNPTiBjb25zdHJ1Y3RvciBmdW5j dGlvbnMJCQlOTwkKLVQ4MTIJU1FML0pTT046IEpTT05fT0JKRUNUQUdHCQkJTk8JCi1UODEz CVNRTC9KU09OOiBKU09OX0FSUkFZQUdHIHdpdGggT1JERVIgQlkJCQlOTwkKLVQ4MTQJQ29s b24gaW4gSlNPTl9PQkpFQ1Qgb3IgSlNPTl9PQkpFQ1RBR0cJCQlOTwkKLVQ4MjEJQmFzaWMg U1FML0pTT04gcXVlcnkgb3BlcmF0b3JzCQkJTk8JCi1UODIyCVNRTC9KU09OOiBJUyBKU09O IFdJVEggVU5JUVVFIEtFWVMgcHJlZGljYXRlCQkJTk8JCi1UODIzCVNRTC9KU09OOiBQQVNT SU5HIGNsYXVzZQkJCU5PCQotVDgyNAlKU09OX1RBQkxFOiBzcGVjaWZpYyBQTEFOIGNsYXVz ZQkJCU5PCQotVDgyNQlTUUwvSlNPTjogT04gRU1QVFkgYW5kIE9OIEVSUk9SIGNsYXVzZXMJ CQlOTwkKLVQ4MjYJR2VuZXJhbCB2YWx1ZSBleHByZXNzaW9uIGluIE9OIEVSUk9SIG9yIE9O IEVNUFRZIGNsYXVzZXMJCQlOTwkKLVQ4MjcJSlNPTl9UQUJMRTogc2libGluZyBORVNURUQg Q09MVU1OUyBjbGF1c2VzCQkJTk8JCi1UODI4CUpTT05fUVVFUlkJCQlOTwkKLVQ4MjkJSlNP Tl9RVUVSWTogYXJyYXkgd3JhcHBlciBvcHRpb25zCQkJTk8JCi1UODMwCUVuZm9yY2luZyB1 bmlxdWUga2V5cyBpbiBTUUwvSlNPTiBjb25zdHJ1Y3RvciBmdW5jdGlvbnMJCQlOTwkKK1Q4 MTEJQmFzaWMgU1FML0pTT04gY29uc3RydWN0b3IgZnVuY3Rpb25zCQkJWUVTCQorVDgxMglT UUwvSlNPTjogSlNPTl9PQkpFQ1RBR0cJCQlZRVMJCitUODEzCVNRTC9KU09OOiBKU09OX0FS UkFZQUdHIHdpdGggT1JERVIgQlkJCQlZRVMJCitUODE0CUNvbG9uIGluIEpTT05fT0JKRUNU IG9yIEpTT05fT0JKRUNUQUdHCQkJWUVTCQorVDgyMQlCYXNpYyBTUUwvSlNPTiBxdWVyeSBv cGVyYXRvcnMJCQlZRVMJCitUODIyCVNRTC9KU09OOiBJUyBKU09OIFdJVEggVU5JUVVFIEtF WVMgcHJlZGljYXRlCQkJWUVTCQorVDgyMwlTUUwvSlNPTjogUEFTU0lORyBjbGF1c2UJCQlZ RVMJCitUODI0CUpTT05fVEFCTEU6IHNwZWNpZmljIFBMQU4gY2xhdXNlCQkJWUVTCQorVDgy NQlTUUwvSlNPTjogT04gRU1QVFkgYW5kIE9OIEVSUk9SIGNsYXVzZXMJCQlZRVMJCitUODI2 CUdlbmVyYWwgdmFsdWUgZXhwcmVzc2lvbiBpbiBPTiBFUlJPUiBvciBPTiBFTVBUWSBjbGF1 c2VzCQkJWUVTCQorVDgyNwlKU09OX1RBQkxFOiBzaWJsaW5nIE5FU1RFRCBDT0xVTU5TIGNs YXVzZXMJCQlZRVMJCitUODI4CUpTT05fUVVFUlkJCQlZRVMJCitUODI5CUpTT05fUVVFUlk6 IGFycmF5IHdyYXBwZXIgb3B0aW9ucwkJCVlFUwkKK1Q4MzAJRW5mb3JjaW5nIHVuaXF1ZSBr ZXlzIGluIFNRTC9KU09OIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucwkJCVlFUwkKIFQ4MzEJU1FM L0pTT04gcGF0aCBsYW5ndWFnZTogc3RyaWN0IG1vZGUJCQlZRVMJCiBUODMyCVNRTC9KU09O IHBhdGggbGFuZ3VhZ2U6IGl0ZW0gbWV0aG9kCQkJWUVTCQogVDgzMwlTUUwvSlNPTiBwYXRo IGxhbmd1YWdlOiBtdWx0aXBsZSBzdWJzY3JpcHRzCQkJWUVTCQpAQCAtNTUxLDcgKzU1MSw3 IEBAIFQ4MzQJU1FML0pTT04gcGF0aCBsYW5ndWFnZTogd2lsZGNhcmQgbWVtYmVyIGFjY2Vz c29yCQkJWUVTCiBUODM1CVNRTC9KU09OIHBhdGggbGFuZ3VhZ2U6IGZpbHRlciBleHByZXNz aW9ucwkJCVlFUwkKIFQ4MzYJU1FML0pTT04gcGF0aCBsYW5ndWFnZTogc3RhcnRzIHdpdGgg cHJlZGljYXRlCQkJWUVTCQogVDgzNwlTUUwvSlNPTiBwYXRoIGxhbmd1YWdlOiByZWdleF9s aWtlIHByZWRpY2F0ZQkJCVlFUwkKLVQ4MzgJSlNPTl9UQUJMRTogUExBTiBERUZBVUxUIGNs YXVzZQkJCU5PCQorVDgzOAlKU09OX1RBQkxFOiBQTEFOIERFRkFVTFQgY2xhdXNlCQkJWUVT CQogVDgzOQlGb3JtYXR0ZWQgY2FzdCBvZiBkYXRldGltZXMgdG8vZnJvbSBjaGFyYWN0ZXIg c3RyaW5ncwkJCU5PCQogVDg0MAlIZXggaW50ZWdlciBsaXRlcmFscyBpbiBTUUwvSlNPTiBw YXRoIGxhbmd1YWdlCQkJWUVTCVNRTDoyMDJ4IGRyYWZ0CiBNMDAxCURhdGFsaW5rcwkJCU5P CQotLSAKMi4zNC4xCgo= --------------MwgLFi9fcx5tDY0Wnjp80Eno--