Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1h4C4u-0002wJ-3l for pgsql-hackers@arkaria.postgresql.org; Wed, 13 Mar 2019 22:10:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1h4C4s-0000SX-Sw for pgsql-hackers@arkaria.postgresql.org; Wed, 13 Mar 2019 22:10:22 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1h4C4r-0000F3-Bx for pgsql-hackers@lists.postgresql.org; Wed, 13 Mar 2019 22:10:22 +0000 Received: from out2-smtp.messagingengine.com ([66.111.4.26]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1h4C4k-0004JN-DB for pgsql-hackers@lists.postgresql.org; Wed, 13 Mar 2019 22:10:19 +0000 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id 5727421FA9; Wed, 13 Mar 2019 18:10:13 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Wed, 13 Mar 2019 18:10:13 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=0aO/gx DD7pjRQo/7071YzVfQYwyuUVSmhbw6hgTNWEM=; b=rSipakCIEPWjnHuLc9Dl5J sa6LZ1PYTS44Qu0riT1mpr7SKbxE5kvy/T9HBIUC/rV7cNLW2XsNmpYrf+e3fehA vv5wKOs6k0Zz9vMuS/RSDmunEiTuBRlAslhio3aKgfl+gRCpgXcm6pdsgUWHlulv aOgSGQjU+auzCnudZgiasrIXuUHL7ZPF1/s1NdwBUVZ/P3R53lYnXoT3k+mRBxH+ HA4NCBbY4b0PEqBPizLf/OI5X4/INNtMBpbLfPaZYOy0aMMCxbSYbTF2/u4Gmyvj prNUIZy39xrQ1QpA3zHZMcyrK88tkmuM//i984HoYvGGKvwEDQ2yUCpxAM7RZUWg == X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddrhedtgdduheekucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepuffvfhfhohfkffgfgggjtgesmhdtreertdefjeenucfhrhhomheprfgvthgv rhcugfhishgvnhhtrhgruhhtuceophgvthgvrhdrvghishgvnhhtrhgruhhtsedvnhguqh hurggurhgrnhhtrdgtohhmqeenucffohhmrghinhepvdhnughquhgrughrrghnthdrtgho mhenucfkphepleefrddvgeefrddukeekrdduvddvnecurfgrrhgrmhepmhgrihhlfhhroh hmpehpvghtvghrrdgvihhsvghnthhrrghuthesvdhnughquhgrughrrghnthdrtghomhen ucevlhhushhtvghrufhiiigvpedt X-ME-Proxy: Received: from april.pezone.net (p5df3bc7a.dip0.t-ipconnect.de [93.243.188.122]) by mail.messagingengine.com (Postfix) with ESMTPA id 17B0C10331; Wed, 13 Mar 2019 18:10:10 -0400 (EDT) Subject: Re: REINDEX CONCURRENTLY 2.0 To: Sergei Kornilov , "pgsql-hackers@lists.postgresql.org" References: <154954968565.11785.6973123402105637191.pgcf@coridan.postgresql.org> <1730471552486423@myt1-cd60b8ae9bb9.qloud-c.yandex.net> From: Peter Eisentraut Openpgp: preference=signencrypt Autocrypt: addr=peter.eisentraut@2ndquadrant.com; prefer-encrypt=mutual; keydata= xsFNBFUUt6kBEADZd9NNTBJbHmAXXJgPGOdd6Q73l80oifIVgn2tRxP9dYkCfTlo/yLqbKTl JNqTcyM6XrJDnB2sMEUGYCewYZXl+9C4bBJWyNqcEI1ae9u71vEq/fknFLArJ+2wN+f7QuRx Q8d94ZJAiJQ5g3fNk2HVeedCQCKP5dCzU+ZLt2dbsx1PDZLjTO9gf+JswWuGFb5wY5PZVM5V hq66Xk7ZJzHuARacza2RT7J2fkMmQBY+kr7L98Perb0GhafnlhXB0PvUB+N3xpmggMfwuhTu BngS/G/r3GvemxJuFxouw8xsMqrsfdksJXA2gLXYtwRCssdPV3PO0rlD9twqDo8URfIJ5fb6 1g/MV8aTOKjg3Q8MpJPtkwJqN4o3PvbwYdedeFnOVkkYAJdu/aX1v1BeCBDu7Hy3sF52scD3 pQbyQSl9vUDpTLarASAxNbAV0NRJE8dp4vfW6AH1ccryGiFqw/czPK/iN0+MT8wsjAW6WW4w hvjm5UPA1KTwi3ZT8eT5uycuH7QpuNk7LnGGXQ6KaRALFywzkr0A0V0AvFNa+l4wstMaXaB6 dmMXyF0/hfryqyOeu1gAdq4q0/PNC2dPgb/6uoh4eMjN6A5GXcprilhz5DulmsilY21hfSoU S64ODed96pKhprsOxjZiDRsN1QM5MwB+uwVWUNfsX7fIxE0BrwARAQABzSdQZXRlciBFaXNl bnRyYXV0IDxwZXRlckBlaXNlbnRyYXV0Lm9yZz7CwXoEEwEIACQCGwMFCwkIBwMFFQoJCAsF FgIDAQACHgECF4AFAlUUuKQCGQEACgkQoZ8SQ+xBJp8llw//RbGoXnF72FZTlOFsnNyxnWbF vViPCfdAlZl1GGK9OYCvV1dp/956HuhB0wpaGQHiBmQfOPJf/jLOPjXFYm2iEChEycrBChuE j4TSYemMp5BSPILYk9Uwd16kVD/+U6fQfK6H5pOhfBvbM6asMnmpY2wQuvktxHvaGlytFw84 EzFWNZtAZfxkw28w3AhIQkKe9hJanfyDL750RcbyEr8AAHty5IErrvS7tM5vQwIeh5BF26ND CyKPRdZgOgMpcwFfROKBDpAt052CgWIpNdhBdfIKlkCs4/ILxmC3rT/Mb/qZiHcoMMwEu6k+ T7vRAFZZAk62Yrr/U8/vUGKlzRZQoo86fyojCfI0ibCIc0z8rwCVY9P40G9wD9BTCZS/z8Vh jjpBlNnIKw2hM6hbxavKndCJjFFJD08rXrTyrLF/of18xD37vNdYooP9VATB5QjOWFRrscSZ 4a89e+to3m7YVnd4xdXwGp47dYusoax84C8tg1gZrH38ol9dPmnKX6GZrXeS7tH9k8VeUpJ8 HQbRThQRWAT936QpYbLConBmOtmbLmjQOGtiXPo1oK57X/7U/WBja5vWmm2q+Yxtt+3uHGVg DdDU4CJpXo4lX0v2n3QV5EBSW9hjdF3bNfl6GFBb1pPEhqNcMDUc7zkx/2uENdAdk/BnqMgH umip7b0pVfvOwU0EVRS3qQEQAJf6p0P7D+hMYUgCPkvgrcz6OJYsAYdUMUmokfqmkKwK0oJM ew8TNGM53ocKAgQGma5f10rwbZNPlpVPNRX5hwUmwVlcwSut0oE+JfUBH7mpysWvpF05RKIy q9RCoJZrAbXS7Tig56A1QD8IcM00rERZMcCOlI1+q9m4u9AOI+0LyGGSH+VvoyDHD/Jew4R2 TmPEF8Pu7lYiNYK88Q6u0kBkc+Tz3BNlyc6fi3HxnFfp0b75HLXPSTu2SwA/0Q31wHZXwrEU BR9KgSn/qbgy8ydPc97i82fhiFE3cbGexfPrQSMYmDGi+dcQ0s+AMQwC3XyMC0JkHpYUuFkR QdlIvaIhgFUUN2Vr4xF2ADaNTNFc4DYaiPHFAgHZw+3pZWqS4uIiWgJynrEaHw4F3QWU8/JB iyEWDhNq4WBrRA0u914TCCAoFOOKMnRdl8eJrRQKM/5/lXbHFjjlI/LDKhLRFsuQsnJJ3331 RjCzpHPZG5/p5KR1RHiAXa0p/DW5lXyq21hS3kjDlleoHqOxCN/cy0Jgz7qLDq1vZoCl67Sy RAH60c2Xu4may9SVltmot0OzWVHdrfS+85FQGp9580DaeLio7YMFKy2bfEvwQJ/c9xD2QPB+ oSb3V8ueSznXBG5+dyfOsZFRPxceA0wA2rSWZSjxLdKxvyGTj9vsCjaDu13rABEBAAHCwV8E GAEIAAkFAlUUt6kCGwwACgkQoZ8SQ+xBJp+HJhAAxmSTsC5y7p9Zu+nnLpucv/h88oEx985e qWeXzQiwM3pfRZS+PdTH9TyzHK0KOgKoAiubk0vt+BrT91D9d0G5kVQaTctAErGBoMkTaZJT XVEcNphiPzysdSqvprjojMp1y7rG8AP+Xd6m0rE1LRnkRRm8HyI8vdXsuLQPITGWXDLMjaNq AOV3BUnzkgtjMuIYw7SCr+12ZOb5dEKvaG4kjC4kaJ/TLbuBhVANcXkC90yp0AOZLs/cB1Dj OAXno/RUUruJ3r27a+pFv768UAi9QWcdw58yPxreMNMLqAgsS9oTHwHfGNWcB2dJ4UW+GMLJ hTf9TjQ2f+N/sIx5XMQ9pYw6CAJMK29qPx6/ZayrPxf22EXf0D3zTwIEZgwfSkynFVwV25L7 awQq60fifdMYheSxq7GbhpsixmcD+e161cCmLIt75YDt5bQ0B1yf7EmxG8n7pGZAOM6LoNsU fkSldba5XVwh8LuN5mK0nQBELGW6Os4TDq4REggLpfcvFC215zpuo0iCGnmE/Bns4nowqUSP u4tkWL+nxW4qgv8wo8HJ52jd79EJ8iqfIBoidBfy9AIUiEUApGQzWPu6yWcI8fY0rN5D+tc+ Yw1Zt6Mm+huYJpgCRsTcfzEcahnBn521CWcWvhW1ff3KFileFMtNmnBBhMncmRKHphtTKEpN 3jI= Organization: 2ndQuadrant Message-ID: <3b33640c-5493-4eea-fd5f-71d37626fe2f@2ndquadrant.com> Date: Wed, 13 Mar 2019 23:10:09 +0100 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <1730471552486423@myt1-cd60b8ae9bb9.qloud-c.yandex.net> Content-Type: multipart/mixed; boundary="------------0DE6C76EFD23B48A3820CDFE" Content-Language: en-US List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. --------------0DE6C76EFD23B48A3820CDFE Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit On 2019-03-13 15:13, Sergei Kornilov wrote: > Patch is marked as target version 12, but is inactive few weeks long. I think many users want this feature and patch is in good shape. We have open questions on this thread? > > Latest patch still can be aplied cleanly; it builds and pass tests. Here is an updated patch. It includes the typo fix in the documentation from you, some small bug fixes, a new reindexdb --concurrently option, and based on that some whole-database tests, as discussed recently. I think this addresses all open issues. -- Peter Eisentraut http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services --------------0DE6C76EFD23B48A3820CDFE Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="v9-0001-REINDEX-CONCURRENTLY.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v9-0001-REINDEX-CONCURRENTLY.patch" RnJvbSA4M2RmOTliMjg2MmYwMmUxYjIwMGIyZGIwYzAzNmQ3NWY1ZGY5MzZhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogV2VkLCAxMyBNYXIgMjAxOSAyMzowMToyOSArMDEwMApTdWJqZWN0 OiBbUEFUQ0ggdjldIFJFSU5ERVggQ09OQ1VSUkVOVExZCgpUaGlzIGFkZHMgdGhlIENPTkNV UlJFTlRMWSBvcHRpb24gdG8gdGhlIFJFSU5ERVggY29tbWFuZC4gIEEgUkVJTkRFWApDT05D VVJSRU5UTFkgb24gYSBzcGVjaWZpYyBpbmRleCBiZWhhdmVzIGxpa2UKCiAgICBDUkVBVEUg SU5ERVggQ09OQ1VSUkVOVExZIG5ldwogICAgRFJPUCBJTkRFWCBDT05DVVJSRU5UTFkgb2xk CiAgICBBTFRFUiBJTkRFWCBuZXcgUkVOQU1FIFRPIG9sZAoKYmFzZWQgb24gZXhpc3Rpbmcg ZnVuY3Rpb25hbGl0eS4gIFRoZSBSRUlOREVYIGNvbW1hbmQgYWxzbyBoYXMgdGhlCmNhcGFi aWxpdHkgdG8gcnVuIGl0cyBvdGhlciB2YXJpYW50cyAoVEFCTEUsIERBVEFCQVNFLCBTWVNU RU0pIHdpdGgKdGhlIENPTkNVUlJFTlRMWSBvcHRpb24gKGFsdGhvdWdoIFNZU1RFTSB3aWxs IGVuZCB1cCBza2lwcGluZyBhbGwKc3lzdGVtIHRhYmxlcykuCgpUaGUgcmVpbmRleGRiIGNv bW1hbmQgZ2V0cyB0aGUgLS1jb25jdXJyZW50bHkgb3B0aW9uLgoKQXV0aG9yOiBUT0RPClJl dmlld2VkLWJ5OiBUT0RPCkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3Jn L21lc3NhZ2UtaWQvZmxhdC82MDA1Mjk4Ni05NTZiLTQ0NzgtNDVlZC04YmQxMTllOWI5Y2Yl NDAybmRxdWFkcmFudC5jb20jNzQ5NDhhMTA0NGM1NmM1ZTgxN2E1MDUwZjU1NGRkZWUKLS0t CiBkb2Mvc3JjL3NnbWwvbXZjYy5zZ21sICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEg KwogZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwgICAgICAgICAgICAgICAgIHwgMTg1 ICsrKy0KIGRvYy9zcmMvc2dtbC9yZWYvcmVpbmRleGRiLnNnbWwgICAgICAgICAgICAgICB8 ICAxMCArCiBzcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMgICAgICAgICAgICAgICAgICAg fCA1NDQgKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvcGdfZGVwZW5kLmMgICAg ICAgICAgICAgICB8IDE0MyArKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5j ICAgICAgICAgICAgICB8IDg3OSArKysrKysrKysrKysrKystLS0KIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL3RhYmxlY21kcy5jICAgICAgICAgICAgICB8ICAzMiArLQogc3JjL2JhY2tlbmQv bm9kZXMvY29weWZ1bmNzLmMgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5k L25vZGVzL2VxdWFsZnVuY3MuYyAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2Vu ZC9wYXJzZXIvZ3JhbS55ICAgICAgICAgICAgICAgICAgICAgfCAgMjIgKy0KIHNyYy9iYWNr ZW5kL3Rjb3AvdXRpbGl0eS5jICAgICAgICAgICAgICAgICAgICB8ICAxMCArLQogc3JjL2Jp bi9wc3FsL2NvbW1vbi5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICsKIHNyYy9i aW4vcHNxbC90YWItY29tcGxldGUuYyAgICAgICAgICAgICAgICAgICB8ICAxOCArLQogc3Jj L2Jpbi9zY3JpcHRzL3JlaW5kZXhkYi5jICAgICAgICAgICAgICAgICAgIHwgIDQyICstCiBz cmMvYmluL3NjcmlwdHMvdC8wOTBfcmVpbmRleGRiLnBsICAgICAgICAgICAgfCAgMzAgKy0K IHNyYy9pbmNsdWRlL2NhdGFsb2cvZGVwZW5kZW5jeS5oICAgICAgICAgICAgICB8ICAgNSAr CiBzcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmggICAgICAgICAgICAgICAgICAgfCAgMTYg Kwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZGVmcmVtLmggICAgICAgICAgICAgICAgIHwgICA2 ICstCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggICAgICAgICAgICAgICAgfCAg IDEgKwogLi4uL2V4cGVjdGVkL3JlaW5kZXgtY29uY3VycmVudGx5Lm91dCAgICAgICAgIHwg IDc4ICsrCiBzcmMvdGVzdC9pc29sYXRpb24vaXNvbGF0aW9uX3NjaGVkdWxlICAgICAgICAg fCAgIDEgKwogLi4uL2lzb2xhdGlvbi9zcGVjcy9yZWluZGV4LWNvbmN1cnJlbnRseS5zcGVj IHwgIDQwICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dCAg ICB8ICA5NyArKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbCAgICAg ICAgIHwgIDYzICsrCiAyNCBmaWxlcyBjaGFuZ2VkLCAyMDU5IGluc2VydGlvbnMoKyksIDE4 MiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9pc29sYXRpb24v ZXhwZWN0ZWQvcmVpbmRleC1jb25jdXJyZW50bHkub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL3JlaW5kZXgtY29uY3VycmVudGx5LnNwZWMKCmRp ZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbXZjYy5zZ21sIGIvZG9jL3NyYy9zZ21sL212Y2Mu c2dtbAppbmRleCBiZWRkOWEwMDhkLi45YjdlZjhiZjA5IDEwMDY0NAotLS0gYS9kb2Mvc3Jj L3NnbWwvbXZjYy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9tdmNjLnNnbWwKQEAgLTkyNiw2 ICs5MjYsNyBAQCA8dGl0bGU+VGFibGUtbGV2ZWwgTG9jayBNb2RlczwvdGl0bGU+CiAgICAg ICAgIDxwYXJhPgogICAgICAgICAgQWNxdWlyZWQgYnkgPGNvbW1hbmQ+VkFDVVVNPC9jb21t YW5kPiAod2l0aG91dCA8b3B0aW9uPkZVTEw8L29wdGlvbj4pLAogICAgICAgICAgPGNvbW1h bmQ+QU5BTFlaRTwvY29tbWFuZD4sIDxjb21tYW5kPkNSRUFURSBJTkRFWCBDT05DVVJSRU5U TFk8L2NvbW1hbmQ+LAorICAgICAgICAgPGNvbW1hbmQ+UkVJTkRFWCBDT05DVVJSRU5UTFk8 L2NvbW1hbmQ+LAogICAgICAgICAgPGNvbW1hbmQ+Q1JFQVRFIFNUQVRJU1RJQ1M8L2NvbW1h bmQ+LCBhbmQgY2VydGFpbiA8Y29tbWFuZD5BTFRFUgogICAgICAgICAgSU5ERVg8L2NvbW1h bmQ+IGFuZCA8Y29tbWFuZD5BTFRFUiBUQUJMRTwvY29tbWFuZD4gdmFyaWFudHMgKGZvciBm dWxsCiAgICAgICAgICBkZXRhaWxzIHNlZSA8eHJlZiBsaW5rZW5kPSJzcWwtYWx0ZXJpbmRl eCIvPiBhbmQgPHhyZWYKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcmVpbmRleC5z Z21sIGIvZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwKaW5kZXggNDdjZWY5ODdkNC4u YTYwNDg4YzZhMCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwK KysrIGIvZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwKQEAgLTIxLDcgKzIxLDcgQEAK IAogIDxyZWZzeW5vcHNpc2Rpdj4KIDxzeW5vcHNpcz4KLVJFSU5ERVggWyAoIFZFUkJPU0Ug KSBdIHsgSU5ERVggfCBUQUJMRSB8IFNDSEVNQSB8IERBVEFCQVNFIHwgU1lTVEVNIH0gPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPgorUkVJTkRF WCBbICggVkVSQk9TRSApIF0geyBJTkRFWCB8IFRBQkxFIHwgU0NIRU1BIHwgREFUQUJBU0Ug fCBTWVNURU0gfSBbIENPTkNVUlJFTlRMWSBdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4KIDwvc3lub3BzaXM+CiAgPC9yZWZzeW5vcHNpc2Rp dj4KIApAQCAtNjcsMTAgKzY3LDcgQEAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KICAg ICAgPHBhcmE+CiAgICAgICBBbiBpbmRleCBidWlsZCB3aXRoIHRoZSA8bGl0ZXJhbD5DT05D VVJSRU5UTFk8L2xpdGVyYWw+IG9wdGlvbiBmYWlsZWQsIGxlYXZpbmcKICAgICAgIGFuIDxx dW90ZT5pbnZhbGlkPC9xdW90ZT4gaW5kZXguIFN1Y2ggaW5kZXhlcyBhcmUgdXNlbGVzcyBi dXQgaXQgY2FuIGJlCi0gICAgICBjb252ZW5pZW50IHRvIHVzZSA8Y29tbWFuZD5SRUlOREVY PC9jb21tYW5kPiB0byByZWJ1aWxkIHRoZW0uIE5vdGUgdGhhdAotICAgICAgPGNvbW1hbmQ+ UkVJTkRFWDwvY29tbWFuZD4gd2lsbCBub3QgcGVyZm9ybSBhIGNvbmN1cnJlbnQgYnVpbGQu IFRvIGJ1aWxkIHRoZQotICAgICAgaW5kZXggd2l0aG91dCBpbnRlcmZlcmluZyB3aXRoIHBy b2R1Y3Rpb24geW91IHNob3VsZCBkcm9wIHRoZSBpbmRleCBhbmQKLSAgICAgIHJlaXNzdWUg dGhlIDxjb21tYW5kPkNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+IGNvbW1h bmQuCisgICAgICBjb252ZW5pZW50IHRvIHVzZSA8Y29tbWFuZD5SRUlOREVYPC9jb21tYW5k PiB0byByZWJ1aWxkIHRoZW0uCiAgICAgIDwvcGFyYT4KICAgICA8L2xpc3RpdGVtPgogCkBA IC0xNTEsNiArMTQ4LDIxIEBAIDx0aXRsZT5QYXJhbWV0ZXJzPC90aXRsZT4KICAgICA8L2xp c3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAg PHRlcm0+PGxpdGVyYWw+Q09OQ1VSUkVOVExZPC9saXRlcmFsPjwvdGVybT4KKyAgICA8bGlz dGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgV2hlbiB0aGlzIG9wdGlvbiBpcyB1c2VkLCA8 cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IHdpbGwgcmVidWlsZCB0aGUK KyAgICAgIGluZGV4IHdpdGhvdXQgdGFraW5nIGFueSBsb2NrcyB0aGF0IHByZXZlbnQgY29u Y3VycmVudCBpbnNlcnRzLAorICAgICAgdXBkYXRlcywgb3IgZGVsZXRlcyBvbiB0aGUgdGFi bGU7IHdoZXJlYXMgYSBzdGFuZGFyZCByZWluZGV4IGJ1aWxkCisgICAgICBsb2NrcyBvdXQg d3JpdGVzIChidXQgbm90IHJlYWRzKSBvbiB0aGUgdGFibGUgdW50aWwgaXQncyBkb25lLgor ICAgICAgVGhlcmUgYXJlIHNldmVyYWwgY2F2ZWF0cyB0byBiZSBhd2FyZSBvZiB3aGVuIHVz aW5nIHRoaXMgb3B0aW9uCisgICAgICAmbWRhc2g7IHNlZSA8eHJlZiBsaW5rZW5kPSJzcWwt cmVpbmRleC1jb25jdXJyZW50bHkiCisgICAgICBlbmR0ZXJtPSJzcWwtcmVpbmRleC1jb25j dXJyZW50bHktdGl0bGUiLz4uCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAg PC92YXJsaXN0ZW50cnk+CisKICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgPHRlcm0+PGxpdGVy YWw+VkVSQk9TRTwvbGl0ZXJhbD48L3Rlcm0+CiAgICAgPGxpc3RpdGVtPgpAQCAtMjQxLDYg KzI1MywxNjEgQEAgPHRpdGxlPk5vdGVzPC90aXRsZT4KICAgIEVhY2ggaW5kaXZpZHVhbCBw YXJ0aXRpb24gY2FuIGJlIHJlaW5kZXhlZCBzZXBhcmF0ZWx5IGluc3RlYWQuCiAgIDwvcGFy YT4KIAorICA8cmVmc2VjdDIgaWQ9InNxbC1yZWluZGV4LWNvbmN1cnJlbnRseSI+CisgICA8 dGl0bGUgaWQ9InNxbC1yZWluZGV4LWNvbmN1cnJlbnRseS10aXRsZSI+UmVidWlsZGluZyBJ bmRleGVzIENvbmN1cnJlbnRseTwvdGl0bGU+CisKKyAgIDxpbmRleHRlcm0gem9uZT0ic3Fs LXJlaW5kZXgtY29uY3VycmVudGx5Ij4KKyAgICA8cHJpbWFyeT5pbmRleDwvcHJpbWFyeT4K KyAgICA8c2Vjb25kYXJ5PnJlYnVpbGRpbmcgY29uY3VycmVudGx5PC9zZWNvbmRhcnk+Cisg ICA8L2luZGV4dGVybT4KKworICAgPHBhcmE+CisgICAgUmVidWlsZGluZyBhbiBpbmRleCBj YW4gaW50ZXJmZXJlIHdpdGggcmVndWxhciBvcGVyYXRpb24gb2YgYSBkYXRhYmFzZS4KKyAg ICBOb3JtYWxseSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGxvY2tz IHRoZSB0YWJsZSB3aG9zZSBpbmRleCBpcyByZWJ1aWx0CisgICAgYWdhaW5zdCB3cml0ZXMg YW5kIHBlcmZvcm1zIHRoZSBlbnRpcmUgaW5kZXggYnVpbGQgd2l0aCBhIHNpbmdsZSBzY2Fu IG9mIHRoZQorICAgIHRhYmxlLiBPdGhlciB0cmFuc2FjdGlvbnMgY2FuIHN0aWxsIHJlYWQg dGhlIHRhYmxlLCBidXQgaWYgdGhleSB0cnkgdG8KKyAgICBpbnNlcnQsIHVwZGF0ZSwgb3Ig ZGVsZXRlIHJvd3MgaW4gdGhlIHRhYmxlIHRoZXkgd2lsbCBibG9jayB1bnRpbCB0aGUKKyAg ICBpbmRleCByZWJ1aWxkIGlzIGZpbmlzaGVkLiBUaGlzIGNvdWxkIGhhdmUgYSBzZXZlcmUg ZWZmZWN0IGlmIHRoZSBzeXN0ZW0gaXMKKyAgICBhIGxpdmUgcHJvZHVjdGlvbiBkYXRhYmFz ZS4gVmVyeSBsYXJnZSB0YWJsZXMgY2FuIHRha2UgbWFueSBob3VycyB0byBiZQorICAgIGlu ZGV4ZWQsIGFuZCBldmVuIGZvciBzbWFsbGVyIHRhYmxlcywgYW4gaW5kZXggcmVidWlsZCBj YW4gbG9jayBvdXQgd3JpdGVycworICAgIGZvciBwZXJpb2RzIHRoYXQgYXJlIHVuYWNjZXB0 YWJseSBsb25nIGZvciBhIHByb2R1Y3Rpb24gc3lzdGVtLgorICAgPC9wYXJhPgorCisgICA8 cGFyYT4KKyAgICA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IHN1cHBv cnRzIHJlYnVpbGRpbmcgaW5kZXhlcyB3aXRoIG1pbmltdW0gbG9ja2luZworICAgIG9mIHdy aXRlcy4gIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgYnkgc3BlY2lmeWluZyB0aGUKKyAgICA8 bGl0ZXJhbD5DT05DVVJSRU5UTFk8L2xpdGVyYWw+IG9wdGlvbiBvZiA8Y29tbWFuZD5SRUlO REVYPC9jb21tYW5kPi4gV2hlbiB0aGlzIG9wdGlvbgorICAgIGlzIHVzZWQsIDxwcm9kdWN0 bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gbXVzdCBwZXJmb3JtIHR3byBzY2FucyBv ZiB0aGUgdGFibGUKKyAgICBmb3IgZWFjaCBpbmRleCB0aGF0IG5lZWRzIHRvIGJlIHJlYnVp bGQgYW5kIGluIGFkZGl0aW9uIGl0IG11c3Qgd2FpdCBmb3IKKyAgICBhbGwgZXhpc3Rpbmcg dHJhbnNhY3Rpb25zIHRoYXQgY291bGQgcG90ZW50aWFsbHkgdXNlIHRoZSBpbmRleCB0bwor ICAgIHRlcm1pbmF0ZS4gVGhpcyBtZXRob2QgcmVxdWlyZXMgbW9yZSB0b3RhbCB3b3JrIHRo YW4gYSBzdGFuZGFyZCBpbmRleAorICAgIHJlYnVpbGQgYW5kIHRha2VzIHNpZ25pZmljYW50 bHkgbG9uZ2VyIHRvIGNvbXBsZXRlIGFzIGl0IG5lZWRzIHRvIHdhaXQKKyAgICBmb3IgdW5m aW5pc2hlZCB0cmFuc2FjdGlvbnMgdGhhdCBtaWdodCBtb2RpZnkgdGhlIGluZGV4LiBIb3dl dmVyLCBzaW5jZQorICAgIGl0IGFsbG93cyBub3JtYWwgb3BlcmF0aW9ucyB0byBjb250aW51 ZSB3aGlsZSB0aGUgaW5kZXggaXMgcmVidWlsdCwgdGhpcworICAgIG1ldGhvZCBpcyB1c2Vm dWwgZm9yIHJlYnVpbGRpbmcgaW5kZXhlcyBpbiBhIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQu IE9mCisgICAgY291cnNlLCB0aGUgZXh0cmEgQ1BVLCBtZW1vcnkgYW5kIEkvTyBsb2FkIGlt cG9zZWQgYnkgdGhlIGluZGV4IHJlYnVpbGQKKyAgICBtYXkgc2xvdyBkb3duIG90aGVyIG9w ZXJhdGlvbnMuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFRoZSBmb2xsb3dpbmcg c3RlcHMgb2NjdXIgaW4gYSBjb25jdXJyZW50IGluZGV4IGJ1aWxkLCBlYWNoIGluIGEgc2Vw YXJhdGUKKyAgICB0cmFuc2FjdGlvbiBleGNlcHQgd2hlbiB0aGUgbmV3IGluZGV4IGRlZmlu aXRpb25zIGFyZSBjcmVhdGVkLCB3aGVyZSBhbGwKKyAgICB0aGUgY29uY3VycmVudCBlbnRy aWVzIGFyZSBjcmVhdGVkIHVzaW5nIG9ubHkgb25lIHRyYW5zYWN0aW9uLiBOb3RlIHRoYXQK KyAgICBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgaW5kZXhlcyB0byBiZSByZWJ1aWx0IHRoZW4g ZWFjaCBzdGVwIGxvb3BzIHRocm91Z2gKKyAgICBhbGwgdGhlIGluZGV4ZXMgd2UncmUgcmVi dWlsZGluZywgdXNpbmcgYSBzZXBhcmF0ZSB0cmFuc2FjdGlvbiBmb3IgZWFjaCBvbmUuCisg ICAgPGNvbW1hbmQ+UkVJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+IHByb2NlZWRzIGFz IGZvbGxvd3Mgd2hlbiByZWJ1aWxkaW5nCisgICAgaW5kZXhlczoKKworICAgIDxvcmRlcmVk bGlzdD4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgQSBuZXcgdGVt cG9yYXJ5IGluZGV4IGRlZmluaXRpb24gaXMgYWRkZWQgaW50byB0aGUgY2F0YWxvZworICAg ICAgIDxsaXRlcmFsPnBnX2luZGV4PC9saXRlcmFsPi4gVGhpcyBkZWZpbml0aW9uIHdpbGwg YmUgdXNlZCB0byByZXBsYWNlIHRoZQorICAgICAgIG9sZCBpbmRleC4gVGhpcyBzdGVwIGlz IGRvbmUgYXMgYSBzaW5nbGUgdHJhbnNhY3Rpb24gZm9yIGFsbCB0aGUgaW5kZXhlcworICAg ICAgIGludm9sdmVkIGluIHRoaXMgcHJvY2VzcywgbWVhbmluZyB0aGF0IGlmCisgICAgICAg PGNvbW1hbmQ+UkVJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+IGlzIHJ1biBvbiBhIHRh YmxlIHdpdGggbXVsdGlwbGUKKyAgICAgICBpbmRleGVzLCBhbGwgdGhlIGNhdGFsb2cgZW50 cmllcyBvZiB0aGUgbmV3IGluZGV4ZXMgYXJlIGNyZWF0ZWQgd2l0aGluIGEKKyAgICAgICBz aW5nbGUgdHJhbnNhY3Rpb24uIEEgPGxpdGVyYWw+U0hBUkUgVVBEQVRFIEVYQ0xVU0lWRTwv bGl0ZXJhbD4gbG9jayBhdAorICAgICAgIHNlc3Npb24gbGV2ZWwgaXMgdGFrZW4gb24gdGhl IGluZGV4ZXMgYmVpbmcgcmVpbmRleGVkIGFzIHdlbGwgYXMgaXRzCisgICAgICAgcGFyZW50 IHRhYmxlIHRvIHByZXZlbnQgYW55IHNjaGVtYSBtb2RpZmljYXRpb24gd2hpbGUgcHJvY2Vz c2luZy4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0aXRlbT4KKyAgICAgPGxpc3RpdGVt PgorICAgICAgPHBhcmE+CisgICAgICAgQSBmaXJzdCBwYXNzIHRvIGJ1aWxkIHRoZSBpbmRl eCBpcyBkb25lIGZvciBlYWNoIG5ldyBpbmRleCBlbnRyeS4KKyAgICAgICBPbmNlIHRoZSBp bmRleCBpcyBidWlsdCwgaXRzIGZsYWcgPGxpdGVyYWw+cGdfaW5kZXguaW5kaXNyZWFkeTwv bGl0ZXJhbD4gaXMKKyAgICAgICBzd2l0Y2hlZCB0byA8cXVvdGU+dHJ1ZTwvcXVvdGU+IHRv IG1ha2UgcmVhZHkgZm9yIGluc2VydHMsIG1ha2luZyBpdAorICAgICAgIHZpc2libGUgdG8g b3RoZXIgc2Vzc2lvbnMgb25jZSB0aGUgdHJhbnNhY3Rpb24gdGhhdCBwZXJmb3JtZWQgdGhl CisgICAgICAgYnVpbGQgaXMgZmluaXNoZWQuIFRoaXMgc3RlcCBpcyBkb25lIHdpdGhpbiBh IHNpbmdsZSB0cmFuc2FjdGlvbgorICAgICAgIGZvciBlYWNoIGVudHJ5LgorICAgICAgPC9w YXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4K KyAgICAgICBUaGVuIGEgc2Vjb25kIHBhc3MgaXMgcGVyZm9ybWVkIHRvIGFkZCB0dXBsZXMg dGhhdCB3ZXJlIGFkZGVkIHdoaWxlCisgICAgICAgdGhlIGZpcnN0IHBhc3MgYnVpbGQgd2Fz IHJ1bm5pbmcuIFRoaXMgc3RlcCBpcyBwZXJmb3JtZWQgd2l0aGluIGEgc2luZ2xlCisgICAg ICAgdHJhbnNhY3Rpb24gZm9yIGVhY2ggdGVtcG9yYXJ5IGVudHJ5LgorICAgICAgPC9wYXJh PgorICAgICA8L2xpc3RpdGVtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAg ICAgICBBbGwgdGhlIGNvbnN0cmFpbnRzIGFuZCBmb3JlaWduIGtleXMgd2hpY2ggcmVmZXIg dG8gdGhlIGluZGV4IGFyZSBzd2FwcGVkCisgICAgICAgdG8gcmVmZXIgdG8gdGhlIG5ldyBp bmRleCBkZWZpbml0aW9uLCBhbmQgdGhlIG5hbWVzIG9mIHRoZSBpbmRleGVzIGFyZQorICAg ICAgIGNoYW5nZWQuIEF0IHRoaXMgcG9pbnQgPGxpdGVyYWw+cGdfaW5kZXguaW5kaXN2YWxp ZDwvbGl0ZXJhbD4gaXMgc3dpdGNoZWQgdG8KKyAgICAgICA8cXVvdGU+dHJ1ZTwvcXVvdGU+ IGZvciB0aGUgbmV3IGluZGV4IGFuZCB0byA8cXVvdGU+ZmFsc2U8L3F1b3RlPiBmb3IgdGhl IG9sZCwgYW5kCisgICAgICAgYSBjYWNoZSBpbnZhbGlkYXRpb24gaXMgZG9uZSBzbyBhcyBh bGwgdGhlIHNlc3Npb25zIHRoYXQgcmVmZXJlbmNlZCB0aGUKKyAgICAgICBvbGQgaW5kZXgg YXJlIGludmFsaWRhdGVkLiBUaGlzIHN0ZXAgaXMgZG9uZSB3aXRoaW4gYSBzaW5nbGUgdHJh bnNhY3Rpb24KKyAgICAgICBmb3IgZWFjaCB0ZW1wb3JhcnkgZW50cnkuCisgICAgICA8L3Bh cmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgor ICAgICAgIE9sZCBpbmRleGVzIGhhdmUgPGxpdGVyYWw+cGdfaW5kZXguaW5kaXNyZWFkeTwv bGl0ZXJhbD4gc3dpdGNoZWQgdG8gPHF1b3RlPmZhbHNlPC9xdW90ZT4KKyAgICAgICB0byBw cmV2ZW50IGFueSBuZXcgdHVwbGUgaW5zZXJ0aW9ucyBhZnRlciB3YWl0aW5nIGZvciBydW5u aW5nIHF1ZXJpZXMgd2hpY2gKKyAgICAgICBtYXkgcmVmZXJlbmNlIHRoZSBvbGQgaW5kZXgg dG8gY29tcGxldGUuIFRoaXMgc3RlcCBpcyBkb25lIHdpdGhpbiBhIHNpbmdsZQorICAgICAg IHRyYW5zYWN0aW9uIGZvciBlYWNoIHRlbXBvcmFyeSBlbnRyeS4KKyAgICAgIDwvcGFyYT4K KyAgICAgPC9saXN0aXRlbT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAg ICAgVGhlIG9sZCBpbmRleCBkZWZpbml0aW9uIGFuZCBpdHMgZGF0YSBhcmUgZHJvcHBlZC4g VGhpcyBzdGVwIGlzIGRvbmUgd2l0aGluCisgICAgICAgYSBzaW5nbGUgdHJhbnNhY3Rpb24g Zm9yIGVhY2ggdGVtcG9yYXJ5IGVudHJ5LgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3Rp dGVtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICBUaGUgPGxpdGVy YWw+U0hBUkUgVVBEQVRFIEVYQ0xVU0lWRTwvbGl0ZXJhbD4gc2Vzc2lvbiBsb2NrIGlzIHJl bGVhc2VkCisgICAgICAgZm9yIGFsbCB0aGUgaW5kZXhlcyBwcm9jZXNzZWQgYXMgd2VsbCBh cyB0aGVpciBwYXJlbnQgdGFibGVzLgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVt PgorICAgIDwvb3JkZXJlZGxpc3Q+CisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIElm IGEgcHJvYmxlbSBhcmlzZXMgd2hpbGUgcmVidWlsZGluZyB0aGUgaW5kZXhlcywgc3VjaCBh cyBhCisgICAgdW5pcXVlbmVzcyB2aW9sYXRpb24gaW4gYSB1bmlxdWUgaW5kZXgsIHRoZSA8 Y29tbWFuZD5SRUlOREVYPC9jb21tYW5kPgorICAgIGNvbW1hbmQgd2lsbCBmYWlsIGJ1dCBs ZWF2ZSBiZWhpbmQgYW4gPHF1b3RlPmludmFsaWQ8L3F1b3RlPiBuZXcgaW5kZXggb24gdG9w CisgICAgb2YgdGhlIGV4aXN0aW5nIG9uZS4gVGhpcyBpbmRleCB3aWxsIGJlIGlnbm9yZWQg Zm9yIHF1ZXJ5aW5nIHB1cnBvc2VzCisgICAgYmVjYXVzZSBpdCBtaWdodCBiZSBpbmNvbXBs ZXRlOyBob3dldmVyIGl0IHdpbGwgc3RpbGwgY29uc3VtZSB1cGRhdGUKKyAgICBvdmVyaGVh ZC4gVGhlIDxhcHBsaWNhdGlvbj5wc3FsPC9hcHBsaWNhdGlvbj4gPGNvbW1hbmQ+XGQ8L2Nv bW1hbmQ+IGNvbW1hbmQgd2lsbCByZXBvcnQKKyAgICBzdWNoIGFuIGluZGV4IGFzIDxsaXRl cmFsPklOVkFMSUQ8L2xpdGVyYWw+OgorCis8cHJvZ3JhbWxpc3Rpbmc+Citwb3N0Z3Jlcz0j IFxkIHRhYgorICAgICAgIFRhYmxlICJwdWJsaWMudGFiIgorIENvbHVtbiB8ICBUeXBlICAg fCBNb2RpZmllcnMKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLQorIGNvbCAgICB8 IGludGVnZXIgfAorSW5kZXhlczoKKyAgICAiaWR4IiBidHJlZSAoY29sKQorICAgICJpZHhf Y2NuZXciIGJ0cmVlIChjb2wpIElOVkFMSUQKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgICBU aGUgcmVjb21tZW5kZWQgcmVjb3ZlcnkgbWV0aG9kIGluIHN1Y2ggY2FzZXMgaXMgdG8gZHJv cCB0aGUgaW52YWxpZCBpbmRleAorICAgIGFuZCB0cnkgYWdhaW4gdG8gcGVyZm9ybSA8Y29t bWFuZD5SRUlOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4uICBUaGUKKyAgICBjb25jdXJy ZW50IGluZGV4IGNyZWF0ZWQgZHVyaW5nIHRoZSBwcm9jZXNzaW5nIGhhcyBhIG5hbWUgZW5k aW5nIGluIHRoZQorICAgIHN1ZmZpeCA8bGl0ZXJhbD5jY25ldzwvbGl0ZXJhbD4sIG9yIDxs aXRlcmFsPmNjb2xkPC9saXRlcmFsPiBpZiBpdCBpcyBhbgorICAgIG9sZCBpbmRleCBkZWZp bml0aW9uIHdoaWNoIHdlIGZhaWxlZCB0byBkcm9wLiBJbnZhbGlkIGluZGV4ZXMgY2FuIGJl CisgICAgZHJvcHBlZCB1c2luZyA8bGl0ZXJhbD5EUk9QIElOREVYPC9saXRlcmFsPiwgaW5j bHVkaW5nIGludmFsaWQgdG9hc3QKKyAgICBpbmRleGVzLgorICAgPC9wYXJhPgorCisgICA8 cGFyYT4KKyAgICBSZWd1bGFyIGluZGV4IGJ1aWxkcyBwZXJtaXQgb3RoZXIgcmVndWxhciBp bmRleCBidWlsZHMgb24gdGhlIHNhbWUgdGFibGUKKyAgICB0byBvY2N1ciBpbiBwYXJhbGxl bCwgYnV0IG9ubHkgb25lIGNvbmN1cnJlbnQgaW5kZXggYnVpbGQgY2FuIG9jY3VyIG9uIGEK KyAgICB0YWJsZSBhdCBhIHRpbWUuIEluIGJvdGggY2FzZXMsIG5vIG90aGVyIHR5cGVzIG9m IHNjaGVtYSBtb2RpZmljYXRpb24gb24KKyAgICB0aGUgdGFibGUgYXJlIGFsbG93ZWQgbWVh bndoaWxlLiAgQW5vdGhlciBkaWZmZXJlbmNlIGlzIHRoYXQgYSByZWd1bGFyCisgICAgPGNv bW1hbmQ+UkVJTkRFWCBUQUJMRTwvY29tbWFuZD4gb3IgPGNvbW1hbmQ+UkVJTkRFWCBJTkRF WDwvY29tbWFuZD4KKyAgICBjb21tYW5kIGNhbiBiZSBwZXJmb3JtZWQgd2l0aGluIGEgdHJh bnNhY3Rpb24gYmxvY2ssIGJ1dCA8Y29tbWFuZD5SRUlOREVYCisgICAgQ09OQ1VSUkVOVExZ PC9jb21tYW5kPiBjYW5ub3QuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIDxjb21t YW5kPlJFSU5ERVggU1lTVEVNPC9jb21tYW5kPiBkb2VzIG5vdCBzdXBwb3J0CisgICAgPGNv bW1hbmQ+Q09OQ1VSUkVOVExZPC9jb21tYW5kPiBzaW5jZSBzeXN0ZW0gY2F0YWxvZ3MgY2Fu bm90IGJlIHJlaW5kZXhlZAorICAgIGNvbmN1cnJlbnRseS4KKyAgIDwvcGFyYT4KKyAgPC9y ZWZzZWN0Mj4KICA8L3JlZnNlY3QxPgogCiAgPHJlZnNlY3QxPgpAQCAtMjcyLDYgKzQzOSwx NCBAQCA8dGl0bGU+RXhhbXBsZXM8L3RpdGxlPgogLi4uCiBicm9rZW5fZGI9Jmd0OyBSRUlO REVYIERBVEFCQVNFIGJyb2tlbl9kYjsKIGJyb2tlbl9kYj0mZ3Q7IFxxCis8L3Byb2dyYW1s aXN0aW5nPjwvcGFyYT4KKworICA8cGFyYT4KKyAgIFJlYnVpbGQgYSB0YWJsZSB3aGlsZSBh dXRob3JpemluZyByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG9uIGludm9sdmVkCisgICBy ZWxhdGlvbnMgd2hlbiBwZXJmb3JtZWQ6CisKKzxwcm9ncmFtbGlzdGluZz4KK1JFSU5ERVgg VEFCTEUgQ09OQ1VSUkVOVExZIG15X2Jyb2tlbl90YWJsZTsKIDwvcHJvZ3JhbWxpc3Rpbmc+ PC9wYXJhPgogIDwvcmVmc2VjdDE+CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYv cmVpbmRleGRiLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3JlaW5kZXhkYi5zZ21sCmluZGV4 IDEyNzNkYWQ4MDcuLmNkZmFjM2ZlNGYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYv cmVpbmRleGRiLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4ZGIuc2dtbApA QCAtMTE4LDYgKzExOCwxNiBAQCA8dGl0bGU+T3B0aW9uczwvdGl0bGU+CiAgICAgICA8L2xp c3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5Pgor ICAgICAgPHRlcm0+PG9wdGlvbj4tLWNvbmN1cnJlbnRseTwvb3B0aW9uPjwvdGVybT4KKyAg ICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVXNlIHRoZSA8bGl0ZXJh bD5DT05DVVJSRU5UTFk8L2xpdGVyYWw+IG9wdGlvbi4gIFNlZSA8eHJlZgorICAgICAgICBs aW5rZW5kPSJzcWwtcmVpbmRleCIvPiBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4KKyAgICAg ICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwog ICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj48b3B0aW9uYWw+LWQ8 L29wdGlvbmFsPiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZGJuYW1lPC9yZXBs YWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAgICAgICA8dGVybT48b3B0aW9uPjxvcHRpb25h bD4tLWRibmFtZT08L29wdGlvbmFsPjxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5k Ym5hbWU8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NhdGFsb2cvaW5kZXguYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwpp bmRleCBjMzM5YTJiYjc3Li5kYTc3MjU0MDkyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j YXRhbG9nL2luZGV4LmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCkBAIC00 Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5oIgogI2luY2x1ZGUgImNh dGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb25zdHJhaW50 LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19kZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgImNh dGFsb2cvcGdfZGVwZW5kLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19pbmhlcml0cy5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3IuaCIKQEAgLTc5MSwxMSArNzkyLDEzIEBA IGluZGV4X2NyZWF0ZShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJIGVycm1zZygidXNl ci1kZWZpbmVkIGluZGV4ZXMgb24gc3lzdGVtIGNhdGFsb2cgdGFibGVzIGFyZSBub3Qgc3Vw cG9ydGVkIikpKTsKIAogCS8qCi0JICogY29uY3VycmVudCBpbmRleCBidWlsZCBvbiBhIHN5 c3RlbSBjYXRhbG9nIGlzIHVuc2FmZSBiZWNhdXNlIHdlIHRlbmQgdG8KLQkgKiByZWxlYXNl IGxvY2tzIGJlZm9yZSBjb21taXR0aW5nIGluIGNhdGFsb2dzCisJICogQ29uY3VycmVudCBp bmRleCBidWlsZCBvbiBhIHN5c3RlbSBjYXRhbG9nIGlzIHVuc2FmZSBiZWNhdXNlIHdlIHRl bmQgdG8KKwkgKiByZWxlYXNlIGxvY2tzIGJlZm9yZSBjb21taXR0aW5nIGluIGNhdGFsb2dz LiAgVG9hc3QgY2F0YWxvZ3MgYXJlIGZpbmUKKwkgKiB0aG91Z2ggYXMgdGhleSBhcmUgYXNz b2NpYXRlZCB3aXRoIGEgcm9vdCByZWxhdGlvbiB3aGljaCBjb3VsZCBiZQorCSAqIHJlaW5k ZXhlZCBjb25jdXJyZW50bHkuCiAJICovCiAJaWYgKGNvbmN1cnJlbnQgJiYKLQkJSXNTeXN0 ZW1SZWxhdGlvbihoZWFwUmVsYXRpb24pKQorCQlJc1N5c3RlbU5hbWVzcGFjZShnZXRfcmVs X25hbWVzcGFjZShoZWFwUmVsYXRpb25JZCkpKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShl cnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkgZXJybXNnKCJj b25jdXJyZW50IGluZGV4IGNyZWF0aW9uIG9uIHN5c3RlbSBjYXRhbG9nIHRhYmxlcyBpcyBu b3Qgc3VwcG9ydGVkIikpKTsKQEAgLTEyMTAsNiArMTIxMyw1MDkgQEAgaW5kZXhfY3JlYXRl KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAlyZXR1cm4gaW5kZXhSZWxhdGlvbklkOwogfQog CisvKgorICogaW5kZXhfY29uY3VycmVudGx5X2NyZWF0ZV9jb3B5CisgKgorICogQ3JlYXRl IGNvbmN1cnJlbnRseSBhbiBpbmRleCBiYXNlZCBvbiB0aGUgZGVmaW5pdGlvbiBvZiB0aGUg b25lIHByb3ZpZGVkIGJ5CisgKiBjYWxsZXIuICBUaGUgaW5kZXggaXMgaW5zZXJ0ZWQgaW50 byBjYXRhbG9ncyBhbmQgbmVlZHMgdG8gYmUgYnVpbHQgbGF0ZXIKKyAqIG9uLiAgVGhpcyBp cyBjYWxsZWQgZHVyaW5nIGNvbmN1cnJlbnQgcmVpbmRleCBwcm9jZXNzaW5nLgorICovCitP aWQKK2luZGV4X2NvbmN1cnJlbnRseV9jcmVhdGVfY29weShSZWxhdGlvbiBoZWFwUmVsYXRp b24sIE9pZCBvbGRJbmRleElkLCBjb25zdCBjaGFyICpuZXdOYW1lKQoreworCVJlbGF0aW9u CWluZGV4UmVsYXRpb247CisJSW5kZXhJbmZvICAqaW5kZXhJbmZvOworCU9pZAkJCW5ld0lu ZGV4SWQgPSBJbnZhbGlkT2lkOworCUhlYXBUdXBsZQlpbmRleFR1cGxlLAorCQkJCWNsYXNz VHVwbGU7CisJRGF0dW0JCWluZGNsYXNzRGF0dW0sCisJCQkJY29sT3B0aW9uRGF0dW0sCisJ CQkJb3B0aW9uRGF0dW07CisJb2lkdmVjdG9yICAqaW5kY2xhc3M7CisJaW50MnZlY3RvciAq aW5kY29sb3B0aW9uczsKKwlib29sCQlpc251bGw7CisJTGlzdAkgICAqaW5kZXhDb2xOYW1l cyA9IE5JTDsKKworCWluZGV4UmVsYXRpb24gPSBpbmRleF9vcGVuKG9sZEluZGV4SWQsIFJv d0V4Y2x1c2l2ZUxvY2spOworCisJLyogTmV3IGluZGV4IHVzZXMgdGhlIHNhbWUgaW5kZXgg aW5mb3JtYXRpb24gYXMgb2xkIGluZGV4ICovCisJaW5kZXhJbmZvID0gQnVpbGRJbmRleElu Zm8oaW5kZXhSZWxhdGlvbik7CisKKwkvKiBEbyBub3QgY29weSBleGNsdXNpb24gY29uc3Ry YWludCAqLworCWluZGV4SW5mby0+aWlfRXhjbHVzaW9uT3BzID0gTlVMTDsKKwlpbmRleElu Zm8tPmlpX0V4Y2x1c2lvblByb2NzID0gTlVMTDsKKwlpbmRleEluZm8tPmlpX0V4Y2x1c2lv blN0cmF0cyA9IE5VTEw7CisKKwkvKiBHZXQgdGhlIGFycmF5IG9mIGNsYXNzIGFuZCBjb2x1 bW4gb3B0aW9ucyBJRHMgZnJvbSBpbmRleCBpbmZvICovCisJaW5kZXhUdXBsZSA9IFNlYXJj aFN5c0NhY2hlMShJTkRFWFJFTElELCBPYmplY3RJZEdldERhdHVtKG9sZEluZGV4SWQpKTsK KwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoaW5kZXhUdXBsZSkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBpbmRleCAldSIsIG9sZEluZGV4SWQpOworCWluZGNs YXNzRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaW5kZXhUdXBsZSwKKwkJ CQkJCQkJCUFudW1fcGdfaW5kZXhfaW5kY2xhc3MsICZpc251bGwpOworCUFzc2VydCghaXNu dWxsKTsKKwlpbmRjbGFzcyA9IChvaWR2ZWN0b3IgKikgRGF0dW1HZXRQb2ludGVyKGluZGNs YXNzRGF0dW0pOworCisJY29sT3B0aW9uRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhS RUxJRCwgaW5kZXhUdXBsZSwKKwkJCQkJCQkJCSBBbnVtX3BnX2luZGV4X2luZG9wdGlvbiwg JmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwpOworCWluZGNvbG9wdGlvbnMgPSAoaW50MnZl Y3RvciAqKSBEYXR1bUdldFBvaW50ZXIoY29sT3B0aW9uRGF0dW0pOworCisJLyogRmV0Y2gg b3B0aW9ucyBvZiBpbmRleCBpZiBhbnkgKi8KKwljbGFzc1R1cGxlID0gU2VhcmNoU3lzQ2Fj aGUxKFJFTE9JRCwgb2xkSW5kZXhJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNsYXNz VHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmVsYXRp b24gJXUiLCBvbGRJbmRleElkKTsKKwlvcHRpb25EYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihS RUxPSUQsIGNsYXNzVHVwbGUsCisJCQkJCQkJCSAgQW51bV9wZ19jbGFzc19yZWxvcHRpb25z LCAmaXNudWxsKTsKKworCS8qCisJICogRXh0cmFjdCB0aGUgbGlzdCBvZiBjb2x1bW4gbmFt ZXMgdG8gYmUgdXNlZCBmb3IgdGhlIGluZGV4CisJICogY3JlYXRpb24uCisJICovCisJZm9y IChpbnQgaSA9IDA7IGkgPCBpbmRleEluZm8tPmlpX051bUluZGV4QXR0cnM7IGkrKykKKwl7 CisJCVR1cGxlRGVzYwlpbmRleFR1cERlc2MgPSBSZWxhdGlvbkdldERlc2NyKGluZGV4UmVs YXRpb24pOworCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKGluZGV4 VHVwRGVzYywgaSk7CisKKwkJaW5kZXhDb2xOYW1lcyA9IGxhcHBlbmQoaW5kZXhDb2xOYW1l cywgTmFtZVN0cihhdHQtPmF0dG5hbWUpKTsKKwl9CisKKwkvKiBOb3cgY3JlYXRlIHRoZSBu ZXcgaW5kZXggKi8KKwluZXdJbmRleElkID0gaW5kZXhfY3JlYXRlKGhlYXBSZWxhdGlvbiwK KwkJCQkJCQkgIG5ld05hbWUsCisJCQkJCQkJICBJbnZhbGlkT2lkLAkvKiBpbmRleFJlbGF0 aW9uSWQgKi8KKwkJCQkJCQkgIEludmFsaWRPaWQsCS8qIHBhcmVudEluZGV4UmVsaWQgKi8K KwkJCQkJCQkgIEludmFsaWRPaWQsCS8qIHBhcmVudENvbnN0cmFpbnRJZCAqLworCQkJCQkJ CSAgSW52YWxpZE9pZCwJLyogcmVsRmlsZU5vZGUgKi8KKwkJCQkJCQkgIGluZGV4SW5mbywK KwkJCQkJCQkgIGluZGV4Q29sTmFtZXMsCisJCQkJCQkJICBpbmRleFJlbGF0aW9uLT5yZF9y ZWwtPnJlbGFtLAorCQkJCQkJCSAgaW5kZXhSZWxhdGlvbi0+cmRfcmVsLT5yZWx0YWJsZXNw YWNlLAorCQkJCQkJCSAgaW5kZXhSZWxhdGlvbi0+cmRfaW5kY29sbGF0aW9uLAorCQkJCQkJ CSAgaW5kY2xhc3MtPnZhbHVlcywKKwkJCQkJCQkgIGluZGNvbG9wdGlvbnMtPnZhbHVlcywK KwkJCQkJCQkgIG9wdGlvbkRhdHVtLAorCQkJCQkJCSAgSU5ERVhfQ1JFQVRFX1NLSVBfQlVJ TEQgfCBJTkRFWF9DUkVBVEVfQ09OQ1VSUkVOVCwKKwkJCQkJCQkgIDAsCisJCQkJCQkJICB0 cnVlLAkvKiBhbGxvdyB0YWJsZSB0byBiZSBhIHN5c3RlbSBjYXRhbG9nPyAqLworCQkJCQkJ CSAgZmFsc2UsIC8qIGlzX2ludGVybmFsPyAqLworCQkJCQkJCSAgTlVMTCk7CisKKwkvKiBD bG9zZSB0aGUgcmVsYXRpb25zIHVzZWQgYW5kIGNsZWFuIHVwICovCisJaW5kZXhfY2xvc2Uo aW5kZXhSZWxhdGlvbiwgTm9Mb2NrKTsKKwlSZWxlYXNlU3lzQ2FjaGUoaW5kZXhUdXBsZSk7 CisJUmVsZWFzZVN5c0NhY2hlKGNsYXNzVHVwbGUpOworCisJcmV0dXJuIG5ld0luZGV4SWQ7 Cit9CisKKy8qCisgKiBpbmRleF9jb25jdXJyZW50bHlfYnVpbGQKKyAqCisgKiBCdWlsZCBp bmRleCBmb3IgYSBjb25jdXJyZW50IG9wZXJhdGlvbi4gIExvdy1sZXZlbCBsb2NrcyBhcmUg dGFrZW4gd2hlbgorICogdGhpcyBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIHRvIHByZXZlbnQg b25seSBzY2hlbWEgY2hhbmdlcywgYnV0IHRoZXkgbmVlZAorICogdG8gYmUga2VwdCB1bnRp bCB0aGUgZW5kIG9mIHRoZSB0cmFuc2FjdGlvbiBwZXJmb3JtaW5nIHRoaXMgb3BlcmF0aW9u LgorICogJ2luZGV4T2lkJyByZWZlcnMgdG8gYW4gaW5kZXggcmVsYXRpb24gT0lEIGFscmVh ZHkgY3JlYXRlZCBhcyBwYXJ0IG9mCisgKiBwcmV2aW91cyBwcm9jZXNzaW5nLCBhbmQgJ2hl YXBPaWQnIHJlZmVycyB0byBpdHMgcGFyZW50IGhlYXAgcmVsYXRpb24uCisgKi8KK3ZvaWQK K2luZGV4X2NvbmN1cnJlbnRseV9idWlsZChPaWQgaGVhcE9pZCwKKwkJCQkJCSBPaWQgaW5k ZXhPaWQpCit7CisJUmVsYXRpb24JaGVhcFJlbCwKKwkJCQlpbmRleFJlbGF0aW9uOworCUlu ZGV4SW5mbyAgKmluZGV4SW5mbzsKKworCS8qIFRoaXMgaGFkIGJldHRlciBtYWtlIHN1cmUg dGhhdCBhIHNuYXBzaG90IGlzIGFjdGl2ZSAqLworCUFzc2VydChBY3RpdmVTbmFwc2hvdFNl dCgpKTsKKworCS8qIE9wZW4gYW5kIGxvY2sgdGhlIHBhcmVudCBoZWFwIHJlbGF0aW9uICov CisJaGVhcFJlbCA9IHRhYmxlX29wZW4oaGVhcE9pZCwgU2hhcmVVcGRhdGVFeGNsdXNpdmVM b2NrKTsKKworCS8qIEFuZCB0aGUgdGFyZ2V0IGluZGV4IHJlbGF0aW9uICovCisJaW5kZXhS ZWxhdGlvbiA9IGluZGV4X29wZW4oaW5kZXhPaWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJ LyoKKwkgKiBXZSBoYXZlIHRvIHJlLWJ1aWxkIHRoZSBJbmRleEluZm8gc3RydWN0LCBzaW5j ZSBpdCB3YXMgbG9zdCBpbiB0aGUKKwkgKiBjb21taXQgb2YgdGhlIHRyYW5zYWN0aW9uIHdo ZXJlIHRoaXMgY29uY3VycmVudCBpbmRleCB3YXMgY3JlYXRlZCBhdAorCSAqIHRoZSBjYXRh bG9nIGxldmVsLgorCSAqLworCWluZGV4SW5mbyA9IEJ1aWxkSW5kZXhJbmZvKGluZGV4UmVs YXRpb24pOworCUFzc2VydCghaW5kZXhJbmZvLT5paV9SZWFkeUZvckluc2VydHMpOworCWlu ZGV4SW5mby0+aWlfQ29uY3VycmVudCA9IHRydWU7CisJaW5kZXhJbmZvLT5paV9Ccm9rZW5I b3RDaGFpbiA9IGZhbHNlOworCisJLyogTm93IGJ1aWxkIHRoZSBpbmRleCAqLworCWluZGV4 X2J1aWxkKGhlYXBSZWwsIGluZGV4UmVsYXRpb24sIGluZGV4SW5mbywgZmFsc2UsIHRydWUp OworCisJLyogQ2xvc2UgYm90aCByZWxhdGlvbnMsIGFuZCBrZWVwIHRoZSBsb2NrcyAqLwor CXRhYmxlX2Nsb3NlKGhlYXBSZWwsIE5vTG9jayk7CisJaW5kZXhfY2xvc2UoaW5kZXhSZWxh dGlvbiwgTm9Mb2NrKTsKKworCS8qCisJICogVXBkYXRlIHRoZSBwZ19pbmRleCByb3cgdG8g bWFyayB0aGUgaW5kZXggYXMgcmVhZHkgZm9yIGluc2VydHMuICBPbmNlCisJICogd2UgY29t bWl0IHRoaXMgdHJhbnNhY3Rpb24sIGFueSBuZXcgdHJhbnNhY3Rpb25zIHRoYXQgb3BlbiB0 aGUgdGFibGUKKwkgKiBtdXN0IGluc2VydCBuZXcgZW50cmllcyBpbnRvIHRoZSBpbmRleCBm b3IgaW5zZXJ0aW9ucyBhbmQgbm9uLUhPVAorCSAqIHVwZGF0ZXMuCisJICovCisJaW5kZXhf c2V0X3N0YXRlX2ZsYWdzKGluZGV4T2lkLCBJTkRFWF9DUkVBVEVfU0VUX1JFQURZKTsKK30K KworLyoKKyAqIGluZGV4X2NvbmN1cnJlbnRseV9zd2FwCisgKgorICogU3dhcCBuYW1lLCBk ZXBlbmRlbmNpZXMsIGFuZCBjb25zdHJhaW50cyBvZiB0aGUgb2xkIGluZGV4IG92ZXIgdG8g dGhlIG5ldworICogaW5kZXgsIHdoaWxlIG1hcmtpbmcgdGhlIG9sZCBpbmRleCBhcyBpbnZh bGlkIGFuZCB0aGUgbmV3IGFzIHZhbGlkLgorICovCit2b2lkCitpbmRleF9jb25jdXJyZW50 bHlfc3dhcChPaWQgbmV3SW5kZXhJZCwgT2lkIG9sZEluZGV4SWQsIGNvbnN0IGNoYXIgKm9s ZE5hbWUpCit7CisJUmVsYXRpb24JcGdfY2xhc3MsCisJCQkJcGdfaW5kZXgsCisJCQkJcGdf Y29uc3RyYWludCwKKwkJCQlwZ190cmlnZ2VyOworCVJlbGF0aW9uCW9sZENsYXNzUmVsLAor CQkJCW5ld0NsYXNzUmVsOworCUhlYXBUdXBsZQlvbGRDbGFzc1R1cGxlLAorCQkJCW5ld0Ns YXNzVHVwbGU7CisJRm9ybV9wZ19jbGFzcyBvbGRDbGFzc0Zvcm0sCisJCQkJbmV3Q2xhc3NG b3JtOworCUhlYXBUdXBsZQlvbGRJbmRleFR1cGxlLAorCQkJCW5ld0luZGV4VHVwbGU7CisJ Rm9ybV9wZ19pbmRleCBvbGRJbmRleEZvcm0sCisJCQkJbmV3SW5kZXhGb3JtOworCU9pZAkJ CWluZGV4Q29uc3RyYWludE9pZDsKKwlMaXN0CSAgICpjb25zdHJhaW50T2lkcyA9IE5JTDsK KwlMaXN0Q2VsbCAgICpsYzsKKworCS8qCisJICogVGFrZSBhIG5lY2Vzc2FyeSBsb2NrIG9u IHRoZSBvbGQgYW5kIG5ldyBpbmRleCBiZWZvcmUgc3dhcHBpbmcgdGhlbS4KKwkgKi8KKwlv bGRDbGFzc1JlbCA9IHJlbGF0aW9uX29wZW4ob2xkSW5kZXhJZCwgU2hhcmVVcGRhdGVFeGNs dXNpdmVMb2NrKTsKKwluZXdDbGFzc1JlbCA9IHJlbGF0aW9uX29wZW4obmV3SW5kZXhJZCwg U2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrKTsKKworCS8qIE5vdyBzd2FwIG5hbWVzIGFuZCBk ZXBlbmRlbmNpZXMgb2YgdGhvc2UgaW5kZXhlcyAqLworCXBnX2NsYXNzID0gdGFibGVfb3Bl bihSZWxhdGlvblJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJb2xkQ2xhc3NU dXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29weTEoUkVMT0lELAorCQkJCQkJCQkJCU9iamVjdElk R2V0RGF0dW0ob2xkSW5kZXhJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChvbGRDbGFz c1R1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBmaW5kIHR1cGxlIGZvciByZWxh dGlvbiAldSIsIG9sZEluZGV4SWQpOworCW5ld0NsYXNzVHVwbGUgPSBTZWFyY2hTeXNDYWNo ZUNvcHkxKFJFTE9JRCwKKwkJCQkJCQkJCQlPYmplY3RJZEdldERhdHVtKG5ld0luZGV4SWQp KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQobmV3Q2xhc3NUdXBsZSkpCisJCWVsb2coRVJS T1IsICJjb3VsZCBub3QgZmluZCB0dXBsZSBmb3IgcmVsYXRpb24gJXUiLCBuZXdJbmRleElk KTsKKworCW9sZENsYXNzRm9ybSA9IChGb3JtX3BnX2NsYXNzKSBHRVRTVFJVQ1Qob2xkQ2xh c3NUdXBsZSk7CisJbmV3Q2xhc3NGb3JtID0gKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVDVChu ZXdDbGFzc1R1cGxlKTsKKworCS8qIFN3YXAgdGhlIG5hbWVzICovCisJbmFtZXN0cmNweSgm bmV3Q2xhc3NGb3JtLT5yZWxuYW1lLCBOYW1lU3RyKG9sZENsYXNzRm9ybS0+cmVsbmFtZSkp OworCW5hbWVzdHJjcHkoJm9sZENsYXNzRm9ybS0+cmVsbmFtZSwgb2xkTmFtZSk7CisKKwlD YXRhbG9nVHVwbGVVcGRhdGUocGdfY2xhc3MsICZvbGRDbGFzc1R1cGxlLT50X3NlbGYsIG9s ZENsYXNzVHVwbGUpOworCUNhdGFsb2dUdXBsZVVwZGF0ZShwZ19jbGFzcywgJm5ld0NsYXNz VHVwbGUtPnRfc2VsZiwgbmV3Q2xhc3NUdXBsZSk7CisKKwloZWFwX2ZyZWV0dXBsZShvbGRD bGFzc1R1cGxlKTsKKwloZWFwX2ZyZWV0dXBsZShuZXdDbGFzc1R1cGxlKTsKKworCS8qIE5v dyBzd2FwIGluZGV4IGluZm8gKi8KKwlwZ19pbmRleCA9IHRhYmxlX29wZW4oSW5kZXhSZWxh dGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCW9sZEluZGV4VHVwbGUgPSBTZWFyY2hT eXNDYWNoZUNvcHkxKElOREVYUkVMSUQsCisJCQkJCQkJCQkJT2JqZWN0SWRHZXREYXR1bShv bGRJbmRleElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9sZEluZGV4VHVwbGUpKQor CQllbG9nKEVSUk9SLCAiY291bGQgbm90IGZpbmQgdHVwbGUgZm9yIHJlbGF0aW9uICV1Iiwg b2xkSW5kZXhJZCk7CisJbmV3SW5kZXhUdXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29weTEoSU5E RVhSRUxJRCwKKwkJCQkJCQkJCQlPYmplY3RJZEdldERhdHVtKG5ld0luZGV4SWQpKTsKKwlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQobmV3SW5kZXhUdXBsZSkpCisJCWVsb2coRVJST1IsICJj b3VsZCBub3QgZmluZCB0dXBsZSBmb3IgcmVsYXRpb24gJXUiLCBuZXdJbmRleElkKTsKKwor CW9sZEluZGV4Rm9ybSA9IChGb3JtX3BnX2luZGV4KSBHRVRTVFJVQ1Qob2xkSW5kZXhUdXBs ZSk7CisJbmV3SW5kZXhGb3JtID0gKEZvcm1fcGdfaW5kZXgpIEdFVFNUUlVDVChuZXdJbmRl eFR1cGxlKTsKKworCS8qCisJICogQ29weSBjb25zdHJhaW50IGZsYWdzIGZyb20gdGhlIG9s ZCBpbmRleC4gVGhpcyBpcyBzYWZlIGJlY2F1c2UgdGhlIG9sZAorCSAqIGluZGV4IGd1YXJh bnRlZWQgdW5pcXVlbmVzcy4KKwkgKi8KKwluZXdJbmRleEZvcm0tPmluZGlzcHJpbWFyeSA9 IG9sZEluZGV4Rm9ybS0+aW5kaXNwcmltYXJ5OworCW9sZEluZGV4Rm9ybS0+aW5kaXNwcmlt YXJ5ID0gZmFsc2U7CisJbmV3SW5kZXhGb3JtLT5pbmRpc2V4Y2x1c2lvbiA9IG9sZEluZGV4 Rm9ybS0+aW5kaXNleGNsdXNpb247CisJb2xkSW5kZXhGb3JtLT5pbmRpc2V4Y2x1c2lvbiA9 IGZhbHNlOworCW5ld0luZGV4Rm9ybS0+aW5kaW1tZWRpYXRlID0gb2xkSW5kZXhGb3JtLT5p bmRpbW1lZGlhdGU7CisJb2xkSW5kZXhGb3JtLT5pbmRpbW1lZGlhdGUgPSB0cnVlOworCisJ LyogTWFyayBvbGQgaW5kZXggYXMgdmFsaWQgYW5kIG5ldyBhcyBpbnZhbGlkIGFzIGluZGV4 X3NldF9zdGF0ZV9mbGFncyAqLworCW5ld0luZGV4Rm9ybS0+aW5kaXN2YWxpZCA9IHRydWU7 CisJb2xkSW5kZXhGb3JtLT5pbmRpc3ZhbGlkID0gZmFsc2U7CisJb2xkSW5kZXhGb3JtLT5p bmRpc2NsdXN0ZXJlZCA9IGZhbHNlOworCisJQ2F0YWxvZ1R1cGxlVXBkYXRlKHBnX2luZGV4 LCAmb2xkSW5kZXhUdXBsZS0+dF9zZWxmLCBvbGRJbmRleFR1cGxlKTsKKwlDYXRhbG9nVHVw bGVVcGRhdGUocGdfaW5kZXgsICZuZXdJbmRleFR1cGxlLT50X3NlbGYsIG5ld0luZGV4VHVw bGUpOworCisJaGVhcF9mcmVldHVwbGUob2xkSW5kZXhUdXBsZSk7CisJaGVhcF9mcmVldHVw bGUobmV3SW5kZXhUdXBsZSk7CisKKwkvKgorCSAqIE1vdmUgY29uc3RyYWludHMgYW5kIHRy aWdnZXJzIG92ZXIgdG8gdGhlIG5ldyBpbmRleAorCSAqLworCisJY29uc3RyYWludE9pZHMg PSBnZXRfaW5kZXhfcmVmX2NvbnN0cmFpbnRzKG9sZEluZGV4SWQpOworCisJaW5kZXhDb25z dHJhaW50T2lkID0gZ2V0X2luZGV4X2NvbnN0cmFpbnQob2xkSW5kZXhJZCk7CisKKwlpZiAo T2lkSXNWYWxpZChpbmRleENvbnN0cmFpbnRPaWQpKQorCQljb25zdHJhaW50T2lkcyA9IGxh cHBlbmRfb2lkKGNvbnN0cmFpbnRPaWRzLCBpbmRleENvbnN0cmFpbnRPaWQpOworCisJcGdf Y29uc3RyYWludCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIFJvd0V4Y2x1 c2l2ZUxvY2spOworCXBnX3RyaWdnZXIgPSB0YWJsZV9vcGVuKFRyaWdnZXJSZWxhdGlvbklk LCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCWZvcmVhY2gobGMsIGNvbnN0cmFpbnRPaWRzKQor CXsKKwkJSGVhcFR1cGxlCWNvbnN0cmFpbnRUdXBsZSwKKwkJCQkJdHJpZ2dlclR1cGxlOwor CQlGb3JtX3BnX2NvbnN0cmFpbnQgY29uRm9ybTsKKwkJU2NhbktleURhdGEga2V5WzFdOwor CQlTeXNTY2FuRGVzYyBzY2FuOworCQlPaWQJCQljb25zdHJhaW50T2lkID0gbGZpcnN0X29p ZChsYyk7CisKKwkJLyogTW92ZSB0aGUgY29uc3RyYWludCBmcm9tIHRoZSBvbGQgdG8gdGhl IG5ldyBpbmRleCAqLworCQljb25zdHJhaW50VHVwbGUgPSBTZWFyY2hTeXNDYWNoZUNvcHkx KENPTlNUUk9JRCwKKwkJCQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKGNvbnN0cmFpbnRP aWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNvbnN0cmFpbnRUdXBsZSkpCisJCQll bG9nKEVSUk9SLCAiY291bGQgbm90IGZpbmQgdHVwbGUgZm9yIGNvbnN0cmFpbnQgJXUiLCBj b25zdHJhaW50T2lkKTsKKworCQljb25Gb3JtID0gKChGb3JtX3BnX2NvbnN0cmFpbnQpIEdF VFNUUlVDVChjb25zdHJhaW50VHVwbGUpKTsKKworCQlpZiAoY29uRm9ybS0+Y29uaW5kaWQg PT0gb2xkSW5kZXhJZCkKKwkJeworCQkJY29uRm9ybS0+Y29uaW5kaWQgPSBuZXdJbmRleElk OworCisJCQlDYXRhbG9nVHVwbGVVcGRhdGUocGdfY29uc3RyYWludCwgJmNvbnN0cmFpbnRU dXBsZS0+dF9zZWxmLCBjb25zdHJhaW50VHVwbGUpOworCQl9CisKKwkJaGVhcF9mcmVldHVw bGUoY29uc3RyYWludFR1cGxlKTsKKworCQkvKiBTZWFyY2ggZm9yIHRyaWdnZXIgcmVjb3Jk cyAqLworCQlTY2FuS2V5SW5pdCgma2V5WzBdLAorCQkJCQlBbnVtX3BnX3RyaWdnZXJfdGdj b25zdHJhaW50LAorCQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJ CU9iamVjdElkR2V0RGF0dW0oY29uc3RyYWludE9pZCkpOworCisJCXNjYW4gPSBzeXN0YWJs ZV9iZWdpbnNjYW4ocGdfdHJpZ2dlciwgVHJpZ2dlckNvbnN0cmFpbnRJbmRleElkLCB0cnVl LAorCQkJCQkJCQkgIE5VTEwsIDEsIGtleSk7CisKKwkJd2hpbGUgKEhlYXBUdXBsZUlzVmFs aWQoKHRyaWdnZXJUdXBsZSA9IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKSkKKwkJeworCQkJ Rm9ybV9wZ190cmlnZ2VyIHRnRm9ybSA9IChGb3JtX3BnX3RyaWdnZXIpIEdFVFNUUlVDVCh0 cmlnZ2VyVHVwbGUpOworCisJCQlpZiAodGdGb3JtLT50Z2NvbnN0cmluZGlkICE9IG9sZElu ZGV4SWQpCisJCQkJY29udGludWU7CisKKwkJCS8qIE1ha2UgYSBtb2RpZmlhYmxlIGNvcHkg Ki8KKwkJCXRyaWdnZXJUdXBsZSA9IGhlYXBfY29weXR1cGxlKHRyaWdnZXJUdXBsZSk7CisJ CQl0Z0Zvcm0gPSAoRm9ybV9wZ190cmlnZ2VyKSBHRVRTVFJVQ1QodHJpZ2dlclR1cGxlKTsK KworCQkJdGdGb3JtLT50Z2NvbnN0cmluZGlkID0gbmV3SW5kZXhJZDsKKworCQkJQ2F0YWxv Z1R1cGxlVXBkYXRlKHBnX3RyaWdnZXIsICZ0cmlnZ2VyVHVwbGUtPnRfc2VsZiwgdHJpZ2dl clR1cGxlKTsKKworCQkJaGVhcF9mcmVldHVwbGUodHJpZ2dlclR1cGxlKTsKKwkJfQorCisJ CXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJfQorCisJLyoKKwkgKiBNb3ZlIGNvbW1lbnQg aWYgYW55CisJICovCisJeworCQlSZWxhdGlvbglkZXNjcmlwdGlvbjsKKwkJU2NhbktleURh dGEgc2tleVszXTsKKwkJU3lzU2NhbkRlc2Mgc2Q7CisJCUhlYXBUdXBsZQl0dXBsZTsKKwkJ RGF0dW0JCXZhbHVlc1tOYXR0c19wZ19kZXNjcmlwdGlvbl0gPSB7MH07CisJCWJvb2wJCW51 bGxzW05hdHRzX3BnX2Rlc2NyaXB0aW9uXSA9IHswfTsKKwkJYm9vbAkJcmVwbGFjZXNbTmF0 dHNfcGdfZGVzY3JpcHRpb25dID0gezB9OworCisJCXZhbHVlc1tBbnVtX3BnX2Rlc2NyaXB0 aW9uX29iam9pZCAtIDFdID0gT2JqZWN0SWRHZXREYXR1bShuZXdJbmRleElkKTsKKwkJcmVw bGFjZXNbQW51bV9wZ19kZXNjcmlwdGlvbl9vYmpvaWQgLSAxXSA9IHRydWU7CisKKwkJU2Nh bktleUluaXQoJnNrZXlbMF0sCisJCQkJCUFudW1fcGdfZGVzY3JpcHRpb25fb2Jqb2lkLAor CQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJCU9iamVjdElkR2V0 RGF0dW0ob2xkSW5kZXhJZCkpOworCQlTY2FuS2V5SW5pdCgmc2tleVsxXSwKKwkJCQkJQW51 bV9wZ19kZXNjcmlwdGlvbl9jbGFzc29pZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVy LCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERhdHVtKFJlbGF0aW9uUmVsYXRpb25JZCkp OworCQlTY2FuS2V5SW5pdCgmc2tleVsyXSwKKwkJCQkJQW51bV9wZ19kZXNjcmlwdGlvbl9v YmpzdWJpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX0lOVDRFUSwKKwkJCQkJ SW50MzJHZXREYXR1bSgwKSk7CisKKwkJZGVzY3JpcHRpb24gPSB0YWJsZV9vcGVuKERlc2Ny aXB0aW9uUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwkJc2QgPSBzeXN0YWJs ZV9iZWdpbnNjYW4oZGVzY3JpcHRpb24sIERlc2NyaXB0aW9uT2JqSW5kZXhJZCwgdHJ1ZSwK KwkJCQkJCQkJTlVMTCwgMywgc2tleSk7CisKKwkJd2hpbGUgKCh0dXBsZSA9IHN5c3RhYmxl X2dldG5leHQoc2QpKSAhPSBOVUxMKQorCQl7CisJCQl0dXBsZSA9IGhlYXBfbW9kaWZ5X3R1 cGxlKHR1cGxlLCBSZWxhdGlvbkdldERlc2NyKGRlc2NyaXB0aW9uKSwKKwkJCQkJCQkJCSAg dmFsdWVzLCBudWxscywgcmVwbGFjZXMpOworCQkJQ2F0YWxvZ1R1cGxlVXBkYXRlKGRlc2Ny aXB0aW9uLCAmdHVwbGUtPnRfc2VsZiwgdHVwbGUpOworCisJCQlicmVhazsJCQkJCS8qIEFz c3VtZSB0aGVyZSBjYW4gYmUgb25seSBvbmUgbWF0Y2ggKi8KKwkJfQorCisJCXN5c3RhYmxl X2VuZHNjYW4oc2QpOworCQl0YWJsZV9jbG9zZShkZXNjcmlwdGlvbiwgTm9Mb2NrKTsKKwl9 CisKKwkvKgorCSAqIE1vdmUgYWxsIGRlcGVuZGVuY2llcyBvbiB0aGUgb2xkIGluZGV4IHRv IHRoZSBuZXcgb25lCisJICovCisKKwlpZiAoT2lkSXNWYWxpZChpbmRleENvbnN0cmFpbnRP aWQpKQorCXsKKwkJT2JqZWN0QWRkcmVzcyBteXNlbGYsCisJCQkJCXJlZmVyZW5jZWQ7CisK KwkJLyogQ2hhbmdlIHRvIGhhdmluZyB0aGUgbmV3IGluZGV4IGRlcGVuZCBvbiB0aGUgY29u c3RyYWludCAqLworCQlkZWxldGVEZXBlbmRlbmN5UmVjb3Jkc0ZvckNsYXNzKFJlbGF0aW9u UmVsYXRpb25JZCwgb2xkSW5kZXhJZCwKKwkJCQkJCQkJCQlDb25zdHJhaW50UmVsYXRpb25J ZCwgREVQRU5ERU5DWV9JTlRFUk5BTCk7CisKKwkJbXlzZWxmLmNsYXNzSWQgPSBSZWxhdGlv blJlbGF0aW9uSWQ7CisJCW15c2VsZi5vYmplY3RJZCA9IG5ld0luZGV4SWQ7CisJCW15c2Vs Zi5vYmplY3RTdWJJZCA9IDA7CisKKwkJcmVmZXJlbmNlZC5jbGFzc0lkID0gQ29uc3RyYWlu dFJlbGF0aW9uSWQ7CisJCXJlZmVyZW5jZWQub2JqZWN0SWQgPSBpbmRleENvbnN0cmFpbnRP aWQ7CisJCXJlZmVyZW5jZWQub2JqZWN0U3ViSWQgPSAwOworCisJCXJlY29yZERlcGVuZGVu Y3lPbigmbXlzZWxmLCAmcmVmZXJlbmNlZCwgREVQRU5ERU5DWV9JTlRFUk5BTCk7CisJfQor CisJY2hhbmdlRGVwZW5kZW5jaWVzT24oUmVsYXRpb25SZWxhdGlvbklkLCBvbGRJbmRleElk LCBuZXdJbmRleElkKTsKKworCS8qIENsb3NlIHJlbGF0aW9ucyAqLworCXRhYmxlX2Nsb3Nl KHBnX2NsYXNzLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwl0YWJsZV9jbG9zZShwZ19pbmRleCwg Um93RXhjbHVzaXZlTG9jayk7CisJdGFibGVfY2xvc2UocGdfY29uc3RyYWludCwgUm93RXhj bHVzaXZlTG9jayk7CisJdGFibGVfY2xvc2UocGdfdHJpZ2dlciwgUm93RXhjbHVzaXZlTG9j ayk7CisKKwkvKiBUaGUgbG9jayB0YWtlbiBwcmV2aW91c2x5IGlzIG5vdCByZWxlYXNlZCB1 bnRpbCB0aGUgZW5kIG9mIHRyYW5zYWN0aW9uICovCisJcmVsYXRpb25fY2xvc2Uob2xkQ2xh c3NSZWwsIE5vTG9jayk7CisJcmVsYXRpb25fY2xvc2UobmV3Q2xhc3NSZWwsIE5vTG9jayk7 Cit9CisKKy8qCisgKiBpbmRleF9jb25jdXJyZW50bHlfc2V0X2RlYWQKKyAqCisgKiBQZXJm b3JtIHRoZSBsYXN0IGludmFsaWRhdGlvbiBzdGFnZSBvZiBEUk9QIElOREVYIENPTkNVUlJF TlRMWSBvciBSRUlOREVYCisgKiBDT05DVVJSRU5UTFkgYmVmb3JlIGFjdHVhbGx5IGRyb3Bw aW5nIHRoZSBpbmRleC4gQWZ0ZXIgY2FsbGluZyB0aGlzCisgKiBmdW5jdGlvbiB0aGUgaW5k ZXggaXMgc2VlbiBieSBhbGwgdGhlIGJhY2tlbmRzIGFzIGRlYWQuIExvdy1sZXZlbCBsb2Nr cworICogdGFrZW4gaGVyZSBhcmUga2VwdCB1bnRpbCB0aGUgZW5kIG9mIHRoZSB0cmFuc2Fj dGlvbiBkb2luZyBjYWxsaW5nIHRoaXMKKyAqIGZ1bmN0aW9uLgorICovCit2b2lkCitpbmRl eF9jb25jdXJyZW50bHlfc2V0X2RlYWQoT2lkIGhlYXBPaWQsIE9pZCBpbmRleE9pZCkKK3sK KwlSZWxhdGlvbgloZWFwUmVsYXRpb24sCisJCQkJaW5kZXhSZWxhdGlvbjsKKworCS8qCisJ ICogTm8gbW9yZSBwcmVkaWNhdGUgbG9ja3Mgd2lsbCBiZSBhY3F1aXJlZCBvbiB0aGlzIGlu ZGV4LCBhbmQgd2UncmUgYWJvdXQKKwkgKiB0byBzdG9wIGRvaW5nIGluc2VydHMgaW50byB0 aGUgaW5kZXggd2hpY2ggY291bGQgc2hvdyBjb25mbGljdHMgd2l0aAorCSAqIGV4aXN0aW5n IHByZWRpY2F0ZSBsb2Nrcywgc28gbm93IGlzIHRoZSB0aW1lIHRvIG1vdmUgdGhlbSB0byB0 aGUgaGVhcAorCSAqIHJlbGF0aW9uLgorCSAqLworCWhlYXBSZWxhdGlvbiA9IHRhYmxlX29w ZW4oaGVhcE9pZCwgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrKTsKKwlpbmRleFJlbGF0aW9u ID0gaW5kZXhfb3BlbihpbmRleE9pZCwgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrKTsKKwlU cmFuc2ZlclByZWRpY2F0ZUxvY2tzVG9IZWFwUmVsYXRpb24oaW5kZXhSZWxhdGlvbik7CisK KwkvKgorCSAqIE5vdyB3ZSBhcmUgc3VyZSB0aGF0IG5vYm9keSB1c2VzIHRoZSBpbmRleCBm b3IgcXVlcmllczsgdGhleSBqdXN0IG1pZ2h0CisJICogaGF2ZSBpdCBvcGVuIGZvciB1cGRh dGluZyBpdC4gIFNvIG5vdyB3ZSBjYW4gdW5zZXQgaW5kaXNyZWFkeSBhbmQKKwkgKiBpbmRp c2xpdmUsIHRoZW4gd2FpdCB0aWxsIG5vYm9keSBjb3VsZCBiZSB1c2luZyBpdCBhdCBhbGwg YW55bW9yZS4KKwkgKi8KKwlpbmRleF9zZXRfc3RhdGVfZmxhZ3MoaW5kZXhPaWQsIElOREVY X0RST1BfU0VUX0RFQUQpOworCisJLyoKKwkgKiBJbnZhbGlkYXRlIHRoZSByZWxjYWNoZSBm b3IgdGhlIHRhYmxlLCBzbyB0aGF0IGFmdGVyIHRoaXMgY29tbWl0IGFsbAorCSAqIHNlc3Np b25zIHdpbGwgcmVmcmVzaCB0aGUgdGFibGUncyBpbmRleCBsaXN0LiAgRm9yZ2V0dGluZyBq dXN0IHRoZQorCSAqIGluZGV4J3MgcmVsY2FjaGUgZW50cnkgaXMgbm90IGVub3VnaC4KKwkg Ki8KKwlDYWNoZUludmFsaWRhdGVSZWxjYWNoZShoZWFwUmVsYXRpb24pOworCisJLyoKKwkg KiBDbG9zZSB0aGUgcmVsYXRpb25zIGFnYWluLCB0aG91Z2ggc3RpbGwgaG9sZGluZyBzZXNz aW9uIGxvY2suCisJICovCisJdGFibGVfY2xvc2UoaGVhcFJlbGF0aW9uLCBOb0xvY2spOwor CWluZGV4X2Nsb3NlKGluZGV4UmVsYXRpb24sIE5vTG9jayk7Cit9CisKKy8qCisgKiBpbmRl eF9jb25jdXJyZW50bHlfZHJvcAorICoKKyAqIERyb3AgYSBzaW5nbGUgaW5kZXggY29uY3Vy cmVudGx5IGFzIHRoZSBsYXN0IHN0ZXAgb2YgYW4gaW5kZXggY29uY3VycmVudAorICogcHJv Y2Vzcy4gRGVsZXRpb24gaXMgZG9uZSB0aHJvdWdoIHBlcmZvcm1EZWxldGlvbiBvciBkZXBl bmRlbmNpZXMgb2YgdGhlCisgKiBpbmRleCB3b3VsZCBub3QgZ2V0IGRyb3BwZWQuIEF0IHRo aXMgcG9pbnQgYWxsIHRoZSBpbmRleGVzIGFyZSBhbHJlYWR5CisgKiBjb25zaWRlcmVkIGFz IGludmFsaWQgYW5kIGRlYWQgc28gdGhleSBjYW4gYmUgZHJvcHBlZCB3aXRob3V0IHVzaW5n IGFueQorICogY29uY3VycmVudCBvcHRpb25zIGFzIGl0IGlzIGNlcnRhaW4gdGhhdCB0aGV5 IHdpbGwgbm90IGludGVyYWN0IHdpdGggb3RoZXIKKyAqIHNlcnZlciBzZXNzaW9ucy4KKyAq Lwordm9pZAoraW5kZXhfY29uY3VycmVudGx5X2Ryb3AoT2lkIGluZGV4SWQpCit7CisJT2lk CQkJY29uc3RyYWludE9pZCA9IGdldF9pbmRleF9jb25zdHJhaW50KGluZGV4SWQpOworCU9i amVjdEFkZHJlc3Mgb2JqZWN0OworCUZvcm1fcGdfaW5kZXggaW5kZXhGb3JtOworCVJlbGF0 aW9uCXBnX2luZGV4OworCUhlYXBUdXBsZQlpbmRleFR1cGxlOworCisJLyoKKwkgKiBDaGVj ayB0aGF0IHRoZSBpbmRleCBkcm9wcGVkIGhlcmUgaXMgbm90IGFsaXZlLCBpdCBtaWdodCBi ZSB1c2VkIGJ5CisJICogb3RoZXIgYmFja2VuZHMgaW4gdGhpcyBjYXNlLgorCSAqLworCXBn X2luZGV4ID0gdGFibGVfb3BlbihJbmRleFJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2sp OworCisJaW5kZXhUdXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29weTEoSU5ERVhSRUxJRCwKKwkJ CQkJCQkJCSBPYmplY3RJZEdldERhdHVtKGluZGV4SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQoaW5kZXhUdXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciBpbmRleCAldSIsIGluZGV4SWQpOworCWluZGV4Rm9ybSA9IChGb3JtX3BnX2luZGV4 KSBHRVRTVFJVQ1QoaW5kZXhUdXBsZSk7CisKKwkvKgorCSAqIFRoaXMgaXMgb25seSBhIHNh ZmV0eSBjaGVjaywganVzdCB0byBhdm9pZCBsaXZlIGluZGV4ZXMgZnJvbSBiZWluZworCSAq IGRyb3BwZWQuCisJICovCisJaWYgKGluZGV4Rm9ybS0+aW5kaXNsaXZlKQorCQllbG9nKEVS Uk9SLCAiY2Fubm90IGRyb3AgbGl2ZSBpbmRleCB3aXRoIE9JRCAldSIsIGluZGV4SWQpOwor CisJLyogQ2xlYW4gdXAgKi8KKwl0YWJsZV9jbG9zZShwZ19pbmRleCwgUm93RXhjbHVzaXZl TG9jayk7CisKKwkvKgorCSAqIFdlIGFyZSBzdXJlIHRvIGhhdmUgYSBkZWFkIGluZGV4LCBz byBiZWdpbiB0aGUgZHJvcCBwcm9jZXNzLiBSZWdpc3RlcgorCSAqIGNvbnN0cmFpbnQgb3Ig aW5kZXggZm9yIGRyb3AuCisJICovCisJaWYgKE9pZElzVmFsaWQoY29uc3RyYWludE9pZCkp CisJeworCQlvYmplY3QuY2xhc3NJZCA9IENvbnN0cmFpbnRSZWxhdGlvbklkOworCQlvYmpl Y3Qub2JqZWN0SWQgPSBjb25zdHJhaW50T2lkOworCX0KKwllbHNlCisJeworCQlvYmplY3Qu Y2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsKKwkJb2JqZWN0Lm9iamVjdElkID0gaW5k ZXhJZDsKKwl9CisKKwlvYmplY3Qub2JqZWN0U3ViSWQgPSAwOworCisJLyogUGVyZm9ybSBk ZWxldGlvbiBmb3Igbm9ybWFsIGFuZCB0b2FzdCBpbmRleGVzICovCisJcGVyZm9ybURlbGV0 aW9uKCZvYmplY3QsIERST1BfUkVTVFJJQ1QsIDApOworfQorCiAvKgogICogaW5kZXhfY29u c3RyYWludF9jcmVhdGUKICAqCkBAIC0xNjAxLDM2ICsyMTA3LDggQEAgaW5kZXhfZHJvcChP aWQgaW5kZXhJZCwgYm9vbCBjb25jdXJyZW50KQogCQkgKi8KIAkJV2FpdEZvckxvY2tlcnMo aGVhcGxvY2t0YWcsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOwogCi0JCS8qCi0JCSAqIE5vIG1v cmUgcHJlZGljYXRlIGxvY2tzIHdpbGwgYmUgYWNxdWlyZWQgb24gdGhpcyBpbmRleCwgYW5k IHdlJ3JlCi0JCSAqIGFib3V0IHRvIHN0b3AgZG9pbmcgaW5zZXJ0cyBpbnRvIHRoZSBpbmRl eCB3aGljaCBjb3VsZCBzaG93Ci0JCSAqIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIHByZWRp Y2F0ZSBsb2Nrcywgc28gbm93IGlzIHRoZSB0aW1lIHRvIG1vdmUKLQkJICogdGhlbSB0byB0 aGUgaGVhcCByZWxhdGlvbi4KLQkJICovCi0JCXVzZXJIZWFwUmVsYXRpb24gPSB0YWJsZV9v cGVuKGhlYXBJZCwgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrKTsKLQkJdXNlckluZGV4UmVs YXRpb24gPSBpbmRleF9vcGVuKGluZGV4SWQsIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7 Ci0JCVRyYW5zZmVyUHJlZGljYXRlTG9ja3NUb0hlYXBSZWxhdGlvbih1c2VySW5kZXhSZWxh dGlvbik7Ci0KLQkJLyoKLQkJICogTm93IHdlIGFyZSBzdXJlIHRoYXQgbm9ib2R5IHVzZXMg dGhlIGluZGV4IGZvciBxdWVyaWVzOyB0aGV5IGp1c3QKLQkJICogbWlnaHQgaGF2ZSBpdCBv cGVuIGZvciB1cGRhdGluZyBpdC4gIFNvIG5vdyB3ZSBjYW4gdW5zZXQgaW5kaXNyZWFkeQot CQkgKiBhbmQgaW5kaXNsaXZlLCB0aGVuIHdhaXQgdGlsbCBub2JvZHkgY291bGQgYmUgdXNp bmcgaXQgYXQgYWxsCi0JCSAqIGFueW1vcmUuCi0JCSAqLwotCQlpbmRleF9zZXRfc3RhdGVf ZmxhZ3MoaW5kZXhJZCwgSU5ERVhfRFJPUF9TRVRfREVBRCk7Ci0KLQkJLyoKLQkJICogSW52 YWxpZGF0ZSB0aGUgcmVsY2FjaGUgZm9yIHRoZSB0YWJsZSwgc28gdGhhdCBhZnRlciB0aGlz IGNvbW1pdAotCQkgKiBhbGwgc2Vzc2lvbnMgd2lsbCByZWZyZXNoIHRoZSB0YWJsZSdzIGlu ZGV4IGxpc3QuICBGb3JnZXR0aW5nIGp1c3QKLQkJICogdGhlIGluZGV4J3MgcmVsY2FjaGUg ZW50cnkgaXMgbm90IGVub3VnaC4KLQkJICovCi0JCUNhY2hlSW52YWxpZGF0ZVJlbGNhY2hl KHVzZXJIZWFwUmVsYXRpb24pOwotCi0JCS8qCi0JCSAqIENsb3NlIHRoZSByZWxhdGlvbnMg YWdhaW4sIHRob3VnaCBzdGlsbCBob2xkaW5nIHNlc3Npb24gbG9jay4KLQkJICovCi0JCXRh YmxlX2Nsb3NlKHVzZXJIZWFwUmVsYXRpb24sIE5vTG9jayk7Ci0JCWluZGV4X2Nsb3NlKHVz ZXJJbmRleFJlbGF0aW9uLCBOb0xvY2spOworCQkvKiBGaW5pc2ggaW52YWxpZGF0aW9uIG9m IGluZGV4IGFuZCBtYXJrIGl0IGFzIGRlYWQgKi8KKwkJaW5kZXhfY29uY3VycmVudGx5X3Nl dF9kZWFkKGhlYXBJZCwgaW5kZXhJZCk7CiAKIAkJLyoKIAkJICogQWdhaW4sIGNvbW1pdCB0 aGUgdHJhbnNhY3Rpb24gdG8gbWFrZSB0aGUgcGdfaW5kZXggdXBkYXRlIHZpc2libGUKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfZGVwZW5kLmMgYi9zcmMvYmFja2Vu ZC9jYXRhbG9nL3BnX2RlcGVuZC5jCmluZGV4IDIzYjAxZjg0MWUuLmQ2M2JmNWU1NmQgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfZGVwZW5kLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9wZ19kZXBlbmQuYwpAQCAtMzk1LDYgKzM5NSw5NCBAQCBjaGFuZ2VE ZXBlbmRlbmN5Rm9yKE9pZCBjbGFzc0lkLCBPaWQgb2JqZWN0SWQsCiAJcmV0dXJuIGNvdW50 OwogfQogCisvKgorICogQWRqdXN0IGFsbCBkZXBlbmRlbmN5IHJlY29yZHMgdG8gcG9pbnQg dG8gYSBkaWZmZXJlbnQgb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUKKyAqCisgKiByZWZDbGFz c0lkL29sZFJlZk9iamVjdElkIHNwZWNpZnkgdGhlIG9sZCByZWZlcmVuY2VkIG9iamVjdC4K KyAqIG5ld1JlZk9iamVjdElkIGlzIHRoZSBuZXcgcmVmZXJlbmNlZCBvYmplY3QgKG11c3Qg YmUgb2YgY2xhc3MgcmVmQ2xhc3NJZCkuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9m IHJlY29yZHMgdXBkYXRlZC4KKyAqLworbG9uZworY2hhbmdlRGVwZW5kZW5jaWVzT24oT2lk IHJlZkNsYXNzSWQsIE9pZCBvbGRSZWZPYmplY3RJZCwKKwkJCQkJIE9pZCBuZXdSZWZPYmpl Y3RJZCkKK3sKKwlsb25nCQljb3VudCA9IDA7CisJUmVsYXRpb24JZGVwUmVsOworCVNjYW5L ZXlEYXRhIGtleVsyXTsKKwlTeXNTY2FuRGVzYyBzY2FuOworCUhlYXBUdXBsZQl0dXA7CisJ T2JqZWN0QWRkcmVzcyBvYmpBZGRyOworCWJvb2wJCW5ld0lzUGlubmVkOworCisJZGVwUmVs ID0gdGFibGVfb3BlbihEZXBlbmRSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwor CS8qCisJICogSWYgb2xkUmVmT2JqZWN0SWQgaXMgcGlubmVkLCB0aGVyZSB3b24ndCBiZSBh bnkgZGVwZW5kZW5jeSBlbnRyaWVzIG9uCisJICogaXQgLS0tIHdlIGNhbid0IGNvcGUgaW4g dGhhdCBjYXNlLiAgKFRoaXMgaXNuJ3QgcmVhbGx5IHdvcnRoIGV4cGVuZGluZworCSAqIGNv ZGUgdG8gZml4LCBpbiBjdXJyZW50IHVzYWdlOyBpdCBqdXN0IG1lYW5zIHlvdSBjYW4ndCBy ZW5hbWUgc3R1ZmYgb3V0CisJICogb2YgcGdfY2F0YWxvZywgd2hpY2ggd291bGQgbGlrZWx5 IGJlIGEgYmFkIG1vdmUgYW55d2F5LikKKwkgKi8KKwlvYmpBZGRyLmNsYXNzSWQgPSByZWZD bGFzc0lkOworCW9iakFkZHIub2JqZWN0SWQgPSBvbGRSZWZPYmplY3RJZDsKKwlvYmpBZGRy Lm9iamVjdFN1YklkID0gMDsKKworCWlmIChpc09iamVjdFBpbm5lZCgmb2JqQWRkciwgZGVw UmVsKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVf Tk9UX1NVUFBPUlRFRCksCisJCQkJIGVycm1zZygiY2Fubm90IHJlbW92ZSBkZXBlbmRlbmN5 IG9uICVzIGJlY2F1c2UgaXQgaXMgYSBzeXN0ZW0gb2JqZWN0IiwKKwkJCQkJCWdldE9iamVj dERlc2NyaXB0aW9uKCZvYmpBZGRyKSkpKTsKKworCS8qCisJICogV2UgY2FuIGhhbmRsZSBh ZGRpbmcgYSBkZXBlbmRlbmN5IG9uIHNvbWV0aGluZyBwaW5uZWQsIHRob3VnaCwgc2luY2UK KwkgKiB0aGF0IGp1c3QgbWVhbnMgZGVsZXRpbmcgdGhlIGRlcGVuZGVuY3kgZW50cnkuCisJ ICovCisJb2JqQWRkci5vYmplY3RJZCA9IG5ld1JlZk9iamVjdElkOworCisJbmV3SXNQaW5u ZWQgPSBpc09iamVjdFBpbm5lZCgmb2JqQWRkciwgZGVwUmVsKTsKKworCS8qIE5vdyBzZWFy Y2ggZm9yIGRlcGVuZGVuY3kgcmVjb3JkcyAqLworCVNjYW5LZXlJbml0KCZrZXlbMF0sCisJ CQkJQW51bV9wZ19kZXBlbmRfcmVmY2xhc3NpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1i ZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShyZWZDbGFzc0lkKSk7CisJU2Nh bktleUluaXQoJmtleVsxXSwKKwkJCQlBbnVtX3BnX2RlcGVuZF9yZWZvYmppZCwKKwkJCQlC VEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShv bGRSZWZPYmplY3RJZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihkZXBSZWws IERlcGVuZFJlZmVyZW5jZUluZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAyLCBrZXkp OworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQoKHR1cCA9IHN5c3RhYmxlX2dldG5leHQo c2NhbikpKSkKKwl7CisJCUZvcm1fcGdfZGVwZW5kIGRlcGZvcm0gPSAoRm9ybV9wZ19kZXBl bmQpIEdFVFNUUlVDVCh0dXApOworCisJCWlmIChuZXdJc1Bpbm5lZCkKKwkJCUNhdGFsb2dU dXBsZURlbGV0ZShkZXBSZWwsICZ0dXAtPnRfc2VsZik7CisJCWVsc2UKKwkJeworCQkJLyog bWFrZSBhIG1vZGlmaWFibGUgY29weSAqLworCQkJdHVwID0gaGVhcF9jb3B5dHVwbGUodHVw KTsKKwkJCWRlcGZvcm0gPSAoRm9ybV9wZ19kZXBlbmQpIEdFVFNUUlVDVCh0dXApOworCisJ CQlkZXBmb3JtLT5yZWZvYmppZCA9IG5ld1JlZk9iamVjdElkOworCisJCQlDYXRhbG9nVHVw bGVVcGRhdGUoZGVwUmVsLCAmdHVwLT50X3NlbGYsIHR1cCk7CisKKwkJCWhlYXBfZnJlZXR1 cGxlKHR1cCk7CisJCX0KKworCQljb3VudCsrOworCX0KKworCXN5c3RhYmxlX2VuZHNjYW4o c2Nhbik7CisKKwl0YWJsZV9jbG9zZShkZXBSZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJ cmV0dXJuIGNvdW50OworfQorCiAvKgogICogaXNPYmplY3RQaW5uZWQoKQogICoKQEAgLTc1 NCwzICs4NDIsNTggQEAgZ2V0X2luZGV4X2NvbnN0cmFpbnQoT2lkIGluZGV4SWQpCiAKIAly ZXR1cm4gY29uc3RyYWludElkOwogfQorCisvKgorICogZ2V0X2luZGV4X3JlZl9jb25zdHJh aW50cworICoJCUdpdmVuIHRoZSBPSUQgb2YgYW4gaW5kZXgsIHJldHVybiB0aGUgT0lEIG9m IGFsbCBmb3JlaWduIGtleQorICoJCWNvbnN0cmFpbnRzIHdoaWNoIHJlZmVyZW5jZSB0aGUg aW5kZXguCisgKi8KK0xpc3QgKgorZ2V0X2luZGV4X3JlZl9jb25zdHJhaW50cyhPaWQgaW5k ZXhJZCkKK3sKKwlMaXN0CSAgICpyZXN1bHQgPSBOSUw7CisJUmVsYXRpb24JZGVwUmVsOwor CVNjYW5LZXlEYXRhIGtleVszXTsKKwlTeXNTY2FuRGVzYyBzY2FuOworCUhlYXBUdXBsZQl0 dXA7CisKKwkvKiBTZWFyY2ggdGhlIGRlcGVuZGVuY3kgdGFibGUgZm9yIHRoZSBpbmRleCAq LworCWRlcFJlbCA9IHRhYmxlX29wZW4oRGVwZW5kUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVM b2NrKTsKKworCVNjYW5LZXlJbml0KCZrZXlbMF0sCisJCQkJQW51bV9wZ19kZXBlbmRfcmVm Y2xhc3NpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2Jq ZWN0SWRHZXREYXR1bShSZWxhdGlvblJlbGF0aW9uSWQpKTsKKwlTY2FuS2V5SW5pdCgma2V5 WzFdLAorCQkJCUFudW1fcGdfZGVwZW5kX3JlZm9iamlkLAorCQkJCUJURXF1YWxTdHJhdGVn eU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKGluZGV4SWQpKTsKKwlT Y2FuS2V5SW5pdCgma2V5WzJdLAorCQkJCUFudW1fcGdfZGVwZW5kX3JlZm9ianN1YmlkLAor CQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9JTlQ0RVEsCisJCQkJSW50MzJHZXREYXR1 bSgwKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGRlcFJlbCwgRGVwZW5kUmVm ZXJlbmNlSW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDMsIGtleSk7CisKKwl3aGls ZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKKwl7 CisJCUZvcm1fcGdfZGVwZW5kIGRlcHJlYyA9IChGb3JtX3BnX2RlcGVuZCkgR0VUU1RSVUNU KHR1cCk7CisKKwkJLyoKKwkJICogV2UgYXNzdW1lIGFueSBub3JtYWwgZGVwZW5kZW5jeSBm cm9tIGEgY29uc3RyYWludCBtdXN0IGJlIHdoYXQgd2UKKwkJICogYXJlIGxvb2tpbmcgZm9y LgorCQkgKi8KKwkJaWYgKGRlcHJlYy0+Y2xhc3NpZCA9PSBDb25zdHJhaW50UmVsYXRpb25J ZCAmJgorCQkJZGVwcmVjLT5vYmpzdWJpZCA9PSAwICYmCisJCQlkZXByZWMtPmRlcHR5cGUg PT0gREVQRU5ERU5DWV9OT1JNQUwpCisJCXsKKwkJCXJlc3VsdCA9IGxhcHBlbmRfb2lkKHJl c3VsdCwgZGVwcmVjLT5vYmppZCk7CisJCX0KKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNj YW4pOworCXRhYmxlX2Nsb3NlKGRlcFJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVy biByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNt ZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCmluZGV4IDk0MDA2YzEx ODkuLjYyY2M2NjIwZmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4 Y21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCkBAIC01OCw2 ICs1OCw3IEBACiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRp bHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9wYXJ0Y2FjaGUuaCIKKyNpbmNsdWRl ICJ1dGlscy9wZ19ydXNhZ2UuaCIKICNpbmNsdWRlICJ1dGlscy9yZWdwcm9jLmgiCiAjaW5j bHVkZSAidXRpbHMvc25hcG1nci5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCkBA IC04Myw2ICs4NCw3IEBAIHN0YXRpYyBjaGFyICpDaG9vc2VJbmRleE5hbWVBZGRpdGlvbihM aXN0ICpjb2xuYW1lcyk7CiBzdGF0aWMgTGlzdCAqQ2hvb3NlSW5kZXhDb2x1bW5OYW1lcyhM aXN0ICppbmRleEVsZW1zKTsKIHN0YXRpYyB2b2lkIFJhbmdlVmFyQ2FsbGJhY2tGb3JSZWlu ZGV4SW5kZXgoY29uc3QgUmFuZ2VWYXIgKnJlbGF0aW9uLAogCQkJCQkJCQlPaWQgcmVsSWQs IE9pZCBvbGRSZWxJZCwgdm9pZCAqYXJnKTsKK3N0YXRpYyBib29sIFJlaW5kZXhSZWxhdGlv bkNvbmN1cnJlbnRseShPaWQgcmVsYXRpb25PaWQsIGludCBvcHRpb25zKTsKIHN0YXRpYyB2 b2lkIFJlaW5kZXhQYXJ0aXRpb25lZEluZGV4KFJlbGF0aW9uIHBhcmVudElkeCk7CiAKIC8q CkBAIC0yOTcsNiArMjk5LDkwIEBAIENoZWNrSW5kZXhDb21wYXRpYmxlKE9pZCBvbGRJZCwK IAlyZXR1cm4gcmV0OwogfQogCisKKy8qCisgKiBXYWl0Rm9yT2xkZXJTbmFwc2hvdHMKKyAq CisgKiBXYWl0IGZvciB0cmFuc2FjdGlvbnMgdGhhdCBtaWdodCBoYXZlIGFuIG9sZGVyIHNu YXBzaG90IHRoYW4gdGhlIGdpdmVuIHhtaW4KKyAqIGxpbWl0LCBiZWNhdXNlIGl0IG1pZ2h0 IG5vdCBjb250YWluIHR1cGxlcyBkZWxldGVkIGp1c3QgYmVmb3JlIGl0IGhhcworICogYmVl biB0YWtlbi4gT2J0YWluIGEgbGlzdCBvZiBWWElEcyBvZiBzdWNoIHRyYW5zYWN0aW9ucywg YW5kIHdhaXQgZm9yIHRoZW0KKyAqIGluZGl2aWR1YWxseS4gVGhpcyBpcyB1c2VkIHdoZW4g YnVpbGRpbmcgYW4gaW5kZXggY29uY3VycmVudGx5LgorICoKKyAqIFdlIGNhbiBleGNsdWRl IGFueSBydW5uaW5nIHRyYW5zYWN0aW9ucyB0aGF0IGhhdmUgeG1pbiA+IHRoZSB4bWluIGdp dmVuOworICogdGhlaXIgb2xkZXN0IHNuYXBzaG90IG11c3QgYmUgbmV3ZXIgdGhhbiBvdXIg eG1pbiBsaW1pdC4KKyAqIFdlIGNhbiBhbHNvIGV4Y2x1ZGUgYW55IHRyYW5zYWN0aW9ucyB0 aGF0IGhhdmUgeG1pbiA9IHplcm8sIHNpbmNlIHRoZXkKKyAqIGV2aWRlbnRseSBoYXZlIG5v IGxpdmUgc25hcHNob3QgYXQgYWxsIChhbmQgYW55IG9uZSB0aGV5IG1pZ2h0IGJlIGluCisg KiBwcm9jZXNzIG9mIHRha2luZyBpcyBjZXJ0YWlubHkgbmV3ZXIgdGhhbiBvdXJzKS4gIFRy YW5zYWN0aW9ucyBpbiBvdGhlcgorICogREJzIGNhbiBiZSBpZ25vcmVkIHRvbywgc2luY2Ug dGhleSdsbCBuZXZlciBldmVuIGJlIGFibGUgdG8gc2VlIHRoZQorICogaW5kZXggYmVpbmcg d29ya2VkIG9uLgorICoKKyAqIFdlIGNhbiBhbHNvIGV4Y2x1ZGUgYXV0b3ZhY3V1bSBwcm9j ZXNzZXMgYW5kIHByb2Nlc3NlcyBydW5uaW5nIG1hbnVhbAorICogbGF6eSBWQUNVVU1zLCBi ZWNhdXNlIHRoZXkgd29uJ3QgYmUgZmF6ZWQgYnkgbWlzc2luZyBpbmRleCBlbnRyaWVzCisg KiBlaXRoZXIuIChNYW51YWwgQU5BTFlaRXMsIGhvd2V2ZXIsIGNhbid0IGJlIGV4Y2x1ZGVk IGJlY2F1c2UgdGhleQorICogbWlnaHQgYmUgd2l0aGluIHRyYW5zYWN0aW9ucyB0aGF0IGFy ZSBnb2luZyB0byBkbyBhcmJpdHJhcnkgb3BlcmF0aW9ucworICogbGF0ZXIuKQorICoKKyAq IEFsc28sIEdldEN1cnJlbnRWaXJ0dWFsWElEcyBuZXZlciByZXBvcnRzIG91ciBvd24gdnhp ZCwgc28gd2UgbmVlZCBub3QKKyAqIGNoZWNrIGZvciB0aGF0LgorICoKKyAqIElmIGEgcHJv Y2VzcyBnb2VzIGlkbGUtaW4tdHJhbnNhY3Rpb24gd2l0aCB4bWluIHplcm8sIHdlIGRvIG5v dCBuZWVkIHRvCisgKiB3YWl0IGZvciBpdCBhbnltb3JlLCBwZXIgdGhlIGFib3ZlIGFyZ3Vt ZW50LiAgV2UgZG8gbm90IGhhdmUgdGhlCisgKiBpbmZyYXN0cnVjdHVyZSByaWdodCBub3cg dG8gc3RvcCB3YWl0aW5nIGlmIHRoYXQgaGFwcGVucywgYnV0IHdlIGNhbiBhdAorICogbGVh c3QgYXZvaWQgdGhlIGZvbGx5IG9mIHdhaXRpbmcgd2hlbiBpdCBpcyBpZGxlIGF0IHRoZSB0 aW1lIHdlIHdvdWxkCisgKiBiZWdpbiB0byB3YWl0LiAgV2UgZG8gdGhpcyBieSByZXBlYXRl ZGx5IHJlY2hlY2tpbmcgdGhlIG91dHB1dCBvZgorICogR2V0Q3VycmVudFZpcnR1YWxYSURz LiAgSWYsIGR1cmluZyBhbnkgaXRlcmF0aW9uLCBhIHBhcnRpY3VsYXIgdnhpZAorICogZG9l c24ndCBzaG93IHVwIGluIHRoZSBvdXRwdXQsIHdlIGtub3cgd2UgY2FuIGZvcmdldCBhYm91 dCBpdC4KKyAqLworc3RhdGljIHZvaWQKK1dhaXRGb3JPbGRlclNuYXBzaG90cyhUcmFuc2Fj dGlvbklkIGxpbWl0WG1pbikKK3sKKwlpbnQJCQlpLAorCQkJCW5fb2xkX3NuYXBzaG90czsK KwlWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqb2xkX3NuYXBzaG90czsKKworCW9sZF9zbmFwc2hv dHMgPSBHZXRDdXJyZW50VmlydHVhbFhJRHMobGltaXRYbWluLCB0cnVlLCBmYWxzZSwKKwkJ CQkJCQkJCQkgIFBST0NfSVNfQVVUT1ZBQ1VVTSB8IFBST0NfSU5fVkFDVVVNLAorCQkJCQkJ CQkJCSAgJm5fb2xkX3NuYXBzaG90cyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbl9vbGRfc25h cHNob3RzOyBpKyspCisJeworCQlpZiAoIVZpcnR1YWxUcmFuc2FjdGlvbklkSXNWYWxpZChv bGRfc25hcHNob3RzW2ldKSkKKwkJCWNvbnRpbnVlOwkJCS8qIGZvdW5kIHVuaW50ZXJlc3Rp bmcgaW4gcHJldmlvdXMgY3ljbGUgKi8KKworCQlpZiAoaSA+IDApCisJCXsKKwkJCS8qIHNl ZSBpZiBhbnl0aGluZydzIGNoYW5nZWQgLi4uICovCisJCQlWaXJ0dWFsVHJhbnNhY3Rpb25J ZCAqbmV3ZXJfc25hcHNob3RzOworCQkJaW50CQkJbl9uZXdlcl9zbmFwc2hvdHM7CisJCQlp bnQJCQlqOworCQkJaW50CQkJazsKKworCQkJbmV3ZXJfc25hcHNob3RzID0gR2V0Q3VycmVu dFZpcnR1YWxYSURzKGxpbWl0WG1pbiwKKwkJCQkJCQkJCQkJCQl0cnVlLCBmYWxzZSwKKwkJ CQkJCQkJCQkJCQlQUk9DX0lTX0FVVE9WQUNVVU0gfCBQUk9DX0lOX1ZBQ1VVTSwKKwkJCQkJ CQkJCQkJCQkmbl9uZXdlcl9zbmFwc2hvdHMpOworCQkJZm9yIChqID0gaTsgaiA8IG5fb2xk X3NuYXBzaG90czsgaisrKQorCQkJeworCQkJCWlmICghVmlydHVhbFRyYW5zYWN0aW9uSWRJ c1ZhbGlkKG9sZF9zbmFwc2hvdHNbal0pKQorCQkJCQljb250aW51ZTsJLyogZm91bmQgdW5p bnRlcmVzdGluZyBpbiBwcmV2aW91cyBjeWNsZSAqLworCQkJCWZvciAoayA9IDA7IGsgPCBu X25ld2VyX3NuYXBzaG90czsgaysrKQorCQkJCXsKKwkJCQkJaWYgKFZpcnR1YWxUcmFuc2Fj dGlvbklkRXF1YWxzKG9sZF9zbmFwc2hvdHNbal0sCisJCQkJCQkJCQkJCQkgICBuZXdlcl9z bmFwc2hvdHNba10pKQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChrID49IG5fbmV3 ZXJfc25hcHNob3RzKSAvKiBub3QgdGhlcmUgYW55bW9yZSAqLworCQkJCQlTZXRJbnZhbGlk VmlydHVhbFRyYW5zYWN0aW9uSWQob2xkX3NuYXBzaG90c1tqXSk7CisJCQl9CisJCQlwZnJl ZShuZXdlcl9zbmFwc2hvdHMpOworCQl9CisKKwkJaWYgKFZpcnR1YWxUcmFuc2FjdGlvbklk SXNWYWxpZChvbGRfc25hcHNob3RzW2ldKSkKKwkJCVZpcnR1YWxYYWN0TG9jayhvbGRfc25h cHNob3RzW2ldLCB0cnVlKTsKKwl9Cit9CisKKwogLyoKICAqIERlZmluZUluZGV4CiAgKgkJ Q3JlYXRlcyBhIG5ldyBpbmRleC4KQEAgLTM0NSw3ICs0MzEsNiBAQCBEZWZpbmVJbmRleChP aWQgcmVsYXRpb25JZCwKIAlMaXN0CSAgICppbmRleENvbE5hbWVzOwogCUxpc3QJICAgKmFs bEluZGV4UGFyYW1zOwogCVJlbGF0aW9uCXJlbDsKLQlSZWxhdGlvbglpbmRleFJlbGF0aW9u OwogCUhlYXBUdXBsZQl0dXBsZTsKIAlGb3JtX3BnX2FtCWFjY2Vzc01ldGhvZEZvcm07CiAJ SW5kZXhBbVJvdXRpbmUgKmFtUm91dGluZTsKQEAgLTM2MCw5ICs0NDUsNyBAQCBEZWZpbmVJ bmRleChPaWQgcmVsYXRpb25JZCwKIAlpbnQJCQludW1iZXJPZkF0dHJpYnV0ZXM7CiAJaW50 CQkJbnVtYmVyT2ZLZXlBdHRyaWJ1dGVzOwogCVRyYW5zYWN0aW9uSWQgbGltaXRYbWluOwot CVZpcnR1YWxUcmFuc2FjdGlvbklkICpvbGRfc25hcHNob3RzOwogCU9iamVjdEFkZHJlc3Mg YWRkcmVzczsKLQlpbnQJCQluX29sZF9zbmFwc2hvdHM7CiAJTG9ja1JlbElkCWhlYXByZWxp ZDsKIAlMT0NLVEFHCQloZWFwbG9ja3RhZzsKIAlMT0NLTU9ERQlsb2NrbW9kZTsKQEAgLTEx NTIsMzQgKzEyMzUsMTEgQEAgRGVmaW5lSW5kZXgoT2lkIHJlbGF0aW9uSWQsCiAJICogSE9U LWNoYWluIG9yIHRoZSBleHRlbnNpb24gb2YgdGhlIGNoYWluIGlzIEhPVC1zYWZlIGZvciB0 aGlzIGluZGV4LgogCSAqLwogCi0JLyogT3BlbiBhbmQgbG9jayB0aGUgcGFyZW50IGhlYXAg cmVsYXRpb24gKi8KLQlyZWwgPSB0YWJsZV9vcGVuKHJlbGF0aW9uSWQsIFNoYXJlVXBkYXRl RXhjbHVzaXZlTG9jayk7Ci0KLQkvKiBBbmQgdGhlIHRhcmdldCBpbmRleCByZWxhdGlvbiAq LwotCWluZGV4UmVsYXRpb24gPSBpbmRleF9vcGVuKGluZGV4UmVsYXRpb25JZCwgUm93RXhj bHVzaXZlTG9jayk7Ci0KIAkvKiBTZXQgQWN0aXZlU25hcHNob3Qgc2luY2UgZnVuY3Rpb25z IGluIHRoZSBpbmRleGVzIG1heSBuZWVkIGl0ICovCiAJUHVzaEFjdGl2ZVNuYXBzaG90KEdl dFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CiAKLQkvKiBXZSBoYXZlIHRvIHJlLWJ1aWxkIHRo ZSBJbmRleEluZm8gc3RydWN0LCBzaW5jZSBpdCB3YXMgbG9zdCBpbiBjb21taXQgKi8KLQlp bmRleEluZm8gPSBCdWlsZEluZGV4SW5mbyhpbmRleFJlbGF0aW9uKTsKLQlBc3NlcnQoIWlu ZGV4SW5mby0+aWlfUmVhZHlGb3JJbnNlcnRzKTsKLQlpbmRleEluZm8tPmlpX0NvbmN1cnJl bnQgPSB0cnVlOwotCWluZGV4SW5mby0+aWlfQnJva2VuSG90Q2hhaW4gPSBmYWxzZTsKLQot CS8qIE5vdyBidWlsZCB0aGUgaW5kZXggKi8KLQlpbmRleF9idWlsZChyZWwsIGluZGV4UmVs YXRpb24sIGluZGV4SW5mbywgZmFsc2UsIHRydWUpOwotCi0JLyogQ2xvc2UgYm90aCB0aGUg cmVsYXRpb25zLCBidXQga2VlcCB0aGUgbG9ja3MgKi8KLQl0YWJsZV9jbG9zZShyZWwsIE5v TG9jayk7Ci0JaW5kZXhfY2xvc2UoaW5kZXhSZWxhdGlvbiwgTm9Mb2NrKTsKLQotCS8qCi0J ICogVXBkYXRlIHRoZSBwZ19pbmRleCByb3cgdG8gbWFyayB0aGUgaW5kZXggYXMgcmVhZHkg Zm9yIGluc2VydHMuIE9uY2Ugd2UKLQkgKiBjb21taXQgdGhpcyB0cmFuc2FjdGlvbiwgYW55 IG5ldyB0cmFuc2FjdGlvbnMgdGhhdCBvcGVuIHRoZSB0YWJsZSBtdXN0Ci0JICogaW5zZXJ0 IG5ldyBlbnRyaWVzIGludG8gdGhlIGluZGV4IGZvciBpbnNlcnRpb25zIGFuZCBub24tSE9U IHVwZGF0ZXMuCi0JICovCi0JaW5kZXhfc2V0X3N0YXRlX2ZsYWdzKGluZGV4UmVsYXRpb25J ZCwgSU5ERVhfQ1JFQVRFX1NFVF9SRUFEWSk7CisJLyogUGVyZm9ybSBjb25jdXJyZW50IGJ1 aWxkIG9mIGluZGV4ICovCisJaW5kZXhfY29uY3VycmVudGx5X2J1aWxkKHJlbGF0aW9uSWQs IGluZGV4UmVsYXRpb25JZCk7CiAKIAkvKiB3ZSBjYW4gZG8gYXdheSB3aXRoIG91ciBzbmFw c2hvdCAqLwogCVBvcEFjdGl2ZVNuYXBzaG90KCk7CkBAIC0xMjUxLDc0ICsxMzExLDkgQEAg RGVmaW5lSW5kZXgoT2lkIHJlbGF0aW9uSWQsCiAJICogVGhlIGluZGV4IGlzIG5vdyB2YWxp ZCBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBjb250YWlucyBhbGwgY3VycmVudGx5CiAJICogaW50 ZXJlc3RpbmcgdHVwbGVzLiAgQnV0IHNpbmNlIGl0IG1pZ2h0IG5vdCBjb250YWluIHR1cGxl cyBkZWxldGVkIGp1c3QKIAkgKiBiZWZvcmUgdGhlIHJlZmVyZW5jZSBzbmFwIHdhcyB0YWtl biwgd2UgaGF2ZSB0byB3YWl0IG91dCBhbnkKLQkgKiB0cmFuc2FjdGlvbnMgdGhhdCBtaWdo dCBoYXZlIG9sZGVyIHNuYXBzaG90cy4gIE9idGFpbiBhIGxpc3Qgb2YgVlhJRHMKLQkgKiBv ZiBzdWNoIHRyYW5zYWN0aW9ucywgYW5kIHdhaXQgZm9yIHRoZW0gaW5kaXZpZHVhbGx5Lgot CSAqCi0JICogV2UgY2FuIGV4Y2x1ZGUgYW55IHJ1bm5pbmcgdHJhbnNhY3Rpb25zIHRoYXQg aGF2ZSB4bWluID4gdGhlIHhtaW4gb2YKLQkgKiBvdXIgcmVmZXJlbmNlIHNuYXBzaG90OyB0 aGVpciBvbGRlc3Qgc25hcHNob3QgbXVzdCBiZSBuZXdlciB0aGFuIG91cnMuCi0JICogV2Ug Y2FuIGFsc28gZXhjbHVkZSBhbnkgdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSB4bWluID0gemVy bywgc2luY2UgdGhleQotCSAqIGV2aWRlbnRseSBoYXZlIG5vIGxpdmUgc25hcHNob3QgYXQg YWxsIChhbmQgYW55IG9uZSB0aGV5IG1pZ2h0IGJlIGluCi0JICogcHJvY2VzcyBvZiB0YWtp bmcgaXMgY2VydGFpbmx5IG5ld2VyIHRoYW4gb3VycykuICBUcmFuc2FjdGlvbnMgaW4gb3Ro ZXIKLQkgKiBEQnMgY2FuIGJlIGlnbm9yZWQgdG9vLCBzaW5jZSB0aGV5J2xsIG5ldmVyIGV2 ZW4gYmUgYWJsZSB0byBzZWUgdGhpcwotCSAqIGluZGV4LgotCSAqCi0JICogV2UgY2FuIGFs c28gZXhjbHVkZSBhdXRvdmFjdXVtIHByb2Nlc3NlcyBhbmQgcHJvY2Vzc2VzIHJ1bm5pbmcg bWFudWFsCi0JICogbGF6eSBWQUNVVU1zLCBiZWNhdXNlIHRoZXkgd29uJ3QgYmUgZmF6ZWQg YnkgbWlzc2luZyBpbmRleCBlbnRyaWVzCi0JICogZWl0aGVyLiAgKE1hbnVhbCBBTkFMWVpF cywgaG93ZXZlciwgY2FuJ3QgYmUgZXhjbHVkZWQgYmVjYXVzZSB0aGV5Ci0JICogbWlnaHQg YmUgd2l0aGluIHRyYW5zYWN0aW9ucyB0aGF0IGFyZSBnb2luZyB0byBkbyBhcmJpdHJhcnkg b3BlcmF0aW9ucwotCSAqIGxhdGVyLikKLQkgKgotCSAqIEFsc28sIEdldEN1cnJlbnRWaXJ0 dWFsWElEcyBuZXZlciByZXBvcnRzIG91ciBvd24gdnhpZCwgc28gd2UgbmVlZCBub3QKLQkg KiBjaGVjayBmb3IgdGhhdC4KLQkgKgotCSAqIElmIGEgcHJvY2VzcyBnb2VzIGlkbGUtaW4t dHJhbnNhY3Rpb24gd2l0aCB4bWluIHplcm8sIHdlIGRvIG5vdCBuZWVkIHRvCi0JICogd2Fp dCBmb3IgaXQgYW55bW9yZSwgcGVyIHRoZSBhYm92ZSBhcmd1bWVudC4gIFdlIGRvIG5vdCBo YXZlIHRoZQotCSAqIGluZnJhc3RydWN0dXJlIHJpZ2h0IG5vdyB0byBzdG9wIHdhaXRpbmcg aWYgdGhhdCBoYXBwZW5zLCBidXQgd2UgY2FuIGF0Ci0JICogbGVhc3QgYXZvaWQgdGhlIGZv bGx5IG9mIHdhaXRpbmcgd2hlbiBpdCBpcyBpZGxlIGF0IHRoZSB0aW1lIHdlIHdvdWxkCi0J ICogYmVnaW4gdG8gd2FpdC4gIFdlIGRvIHRoaXMgYnkgcmVwZWF0ZWRseSByZWNoZWNraW5n IHRoZSBvdXRwdXQgb2YKLQkgKiBHZXRDdXJyZW50VmlydHVhbFhJRHMuICBJZiwgZHVyaW5n IGFueSBpdGVyYXRpb24sIGEgcGFydGljdWxhciB2eGlkCi0JICogZG9lc24ndCBzaG93IHVw IGluIHRoZSBvdXRwdXQsIHdlIGtub3cgd2UgY2FuIGZvcmdldCBhYm91dCBpdC4KKwkgKiB0 cmFuc2FjdGlvbnMgdGhhdCBtaWdodCBoYXZlIG9sZGVyIHNuYXBzaG90cy4KIAkgKi8KLQlv bGRfc25hcHNob3RzID0gR2V0Q3VycmVudFZpcnR1YWxYSURzKGxpbWl0WG1pbiwgdHJ1ZSwg ZmFsc2UsCi0JCQkJCQkJCQkJICBQUk9DX0lTX0FVVE9WQUNVVU0gfCBQUk9DX0lOX1ZBQ1VV TSwKLQkJCQkJCQkJCQkgICZuX29sZF9zbmFwc2hvdHMpOwotCi0JZm9yIChpID0gMDsgaSA8 IG5fb2xkX3NuYXBzaG90czsgaSsrKQotCXsKLQkJaWYgKCFWaXJ0dWFsVHJhbnNhY3Rpb25J ZElzVmFsaWQob2xkX3NuYXBzaG90c1tpXSkpCi0JCQljb250aW51ZTsJCQkvKiBmb3VuZCB1 bmludGVyZXN0aW5nIGluIHByZXZpb3VzIGN5Y2xlICovCi0KLQkJaWYgKGkgPiAwKQotCQl7 Ci0JCQkvKiBzZWUgaWYgYW55dGhpbmcncyBjaGFuZ2VkIC4uLiAqLwotCQkJVmlydHVhbFRy YW5zYWN0aW9uSWQgKm5ld2VyX3NuYXBzaG90czsKLQkJCWludAkJCW5fbmV3ZXJfc25hcHNo b3RzOwotCQkJaW50CQkJajsKLQkJCWludAkJCWs7Ci0KLQkJCW5ld2VyX3NuYXBzaG90cyA9 IEdldEN1cnJlbnRWaXJ0dWFsWElEcyhsaW1pdFhtaW4sCi0JCQkJCQkJCQkJCQkJdHJ1ZSwg ZmFsc2UsCi0JCQkJCQkJCQkJCQkJUFJPQ19JU19BVVRPVkFDVVVNIHwgUFJPQ19JTl9WQUNV VU0sCi0JCQkJCQkJCQkJCQkJJm5fbmV3ZXJfc25hcHNob3RzKTsKLQkJCWZvciAoaiA9IGk7 IGogPCBuX29sZF9zbmFwc2hvdHM7IGorKykKLQkJCXsKLQkJCQlpZiAoIVZpcnR1YWxUcmFu c2FjdGlvbklkSXNWYWxpZChvbGRfc25hcHNob3RzW2pdKSkKLQkJCQkJY29udGludWU7CS8q IGZvdW5kIHVuaW50ZXJlc3RpbmcgaW4gcHJldmlvdXMgY3ljbGUgKi8KLQkJCQlmb3IgKGsg PSAwOyBrIDwgbl9uZXdlcl9zbmFwc2hvdHM7IGsrKykKLQkJCQl7Ci0JCQkJCWlmIChWaXJ0 dWFsVHJhbnNhY3Rpb25JZEVxdWFscyhvbGRfc25hcHNob3RzW2pdLAotCQkJCQkJCQkJCQkJ ICAgbmV3ZXJfc25hcHNob3RzW2tdKSkKLQkJCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlpZiAo ayA+PSBuX25ld2VyX3NuYXBzaG90cykgLyogbm90IHRoZXJlIGFueW1vcmUgKi8KLQkJCQkJ U2V0SW52YWxpZFZpcnR1YWxUcmFuc2FjdGlvbklkKG9sZF9zbmFwc2hvdHNbal0pOwotCQkJ fQotCQkJcGZyZWUobmV3ZXJfc25hcHNob3RzKTsKLQkJfQotCi0JCWlmIChWaXJ0dWFsVHJh bnNhY3Rpb25JZElzVmFsaWQob2xkX3NuYXBzaG90c1tpXSkpCi0JCQlWaXJ0dWFsWGFjdExv Y2sob2xkX3NuYXBzaG90c1tpXSwgdHJ1ZSk7Ci0JfQorCVdhaXRGb3JPbGRlclNuYXBzaG90 cyhsaW1pdFhtaW4pOwogCiAJLyoKIAkgKiBJbmRleCBjYW4gbm93IGJlIG1hcmtlZCB2YWxp ZCAtLSB1cGRhdGUgaXRzIHBnX2luZGV4IGVudHJ5CkBAIC0yMjA0LDcgKzIxOTksNyBAQCBD aG9vc2VJbmRleENvbHVtbk5hbWVzKExpc3QgKmluZGV4RWxlbXMpCiAgKgkJUmVjcmVhdGUg YSBzcGVjaWZpYyBpbmRleC4KICAqLwogdm9pZAotUmVpbmRleEluZGV4KFJhbmdlVmFyICpp bmRleFJlbGF0aW9uLCBpbnQgb3B0aW9ucykKK1JlaW5kZXhJbmRleChSYW5nZVZhciAqaW5k ZXhSZWxhdGlvbiwgaW50IG9wdGlvbnMsIGJvb2wgY29uY3VycmVudCkKIHsKIAlPaWQJCQlp bmRPaWQ7CiAJT2lkCQkJaGVhcE9pZCA9IEludmFsaWRPaWQ7CkBAIC0yMjE2LDcgKzIyMTEs OCBAQCBSZWluZGV4SW5kZXgoUmFuZ2VWYXIgKmluZGV4UmVsYXRpb24sIGludCBvcHRpb25z KQogCSAqIG9idGFpbiBsb2NrIG9uIHRhYmxlIGZpcnN0LCB0byBhdm9pZCBkZWFkbG9jayBo YXphcmQuICBUaGUgbG9jayBsZXZlbAogCSAqIHVzZWQgaGVyZSBtdXN0IG1hdGNoIHRoZSBp bmRleCBsb2NrIG9idGFpbmVkIGluIHJlaW5kZXhfaW5kZXgoKS4KIAkgKi8KLQlpbmRPaWQg PSBSYW5nZVZhckdldFJlbGlkRXh0ZW5kZWQoaW5kZXhSZWxhdGlvbiwgQWNjZXNzRXhjbHVz aXZlTG9jaywKKwlpbmRPaWQgPSBSYW5nZVZhckdldFJlbGlkRXh0ZW5kZWQoaW5kZXhSZWxh dGlvbiwKKwkJCQkJCQkJCSAgY29uY3VycmVudCA/IFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9j ayA6IEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssCiAJCQkJCQkJCQkgIDAsCiAJCQkJCQkJCQkgIFJh bmdlVmFyQ2FsbGJhY2tGb3JSZWluZGV4SW5kZXgsCiAJCQkJCQkJCQkgICh2b2lkICopICZo ZWFwT2lkKTsKQEAgLTIyMzYsNyArMjIzMiwxMCBAQCBSZWluZGV4SW5kZXgoUmFuZ2VWYXIg KmluZGV4UmVsYXRpb24sIGludCBvcHRpb25zKQogCXBlcnNpc3RlbmNlID0gaXJlbC0+cmRf cmVsLT5yZWxwZXJzaXN0ZW5jZTsKIAlpbmRleF9jbG9zZShpcmVsLCBOb0xvY2spOwogCi0J cmVpbmRleF9pbmRleChpbmRPaWQsIGZhbHNlLCBwZXJzaXN0ZW5jZSwgb3B0aW9ucyk7CisJ aWYgKGNvbmN1cnJlbnQpCisJCVJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShpbmRPaWQs IG9wdGlvbnMpOworCWVsc2UKKwkJcmVpbmRleF9pbmRleChpbmRPaWQsIGZhbHNlLCBwZXJz aXN0ZW5jZSwgb3B0aW9ucyk7CiB9CiAKIC8qCkBAIC0yMzA0LDE4ICsyMzAzLDI2IEBAIFJh bmdlVmFyQ2FsbGJhY2tGb3JSZWluZGV4SW5kZXgoY29uc3QgUmFuZ2VWYXIgKnJlbGF0aW9u LAogICoJCVJlY3JlYXRlIGFsbCBpbmRleGVzIG9mIGEgdGFibGUgKGFuZCBvZiBpdHMgdG9h c3QgdGFibGUsIGlmIGFueSkKICAqLwogT2lkCi1SZWluZGV4VGFibGUoUmFuZ2VWYXIgKnJl bGF0aW9uLCBpbnQgb3B0aW9ucykKK1JlaW5kZXhUYWJsZShSYW5nZVZhciAqcmVsYXRpb24s IGludCBvcHRpb25zLCBib29sIGNvbmN1cnJlbnQpCiB7CiAJT2lkCQkJaGVhcE9pZDsKKwli b29sCQlyZXN1bHQ7CiAKIAkvKiBUaGUgbG9jayBsZXZlbCB1c2VkIGhlcmUgc2hvdWxkIG1h dGNoIHJlaW5kZXhfcmVsYXRpb24oKS4gKi8KLQloZWFwT2lkID0gUmFuZ2VWYXJHZXRSZWxp ZEV4dGVuZGVkKHJlbGF0aW9uLCBTaGFyZUxvY2ssIDAsCisJaGVhcE9pZCA9IFJhbmdlVmFy R2V0UmVsaWRFeHRlbmRlZChyZWxhdGlvbiwKKwkJCQkJCQkJCSAgIGNvbmN1cnJlbnQgPyBT aGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sgOiBTaGFyZUxvY2ssCisJCQkJCQkJCQkgICAwLAog CQkJCQkJCQkJICAgUmFuZ2VWYXJDYWxsYmFja093bnNUYWJsZSwgTlVMTCk7CiAKLQlpZiAo IXJlaW5kZXhfcmVsYXRpb24oaGVhcE9pZCwKLQkJCQkJCSAgUkVJTkRFWF9SRUxfUFJPQ0VT U19UT0FTVCB8Ci0JCQkJCQkgIFJFSU5ERVhfUkVMX0NIRUNLX0NPTlNUUkFJTlRTLAotCQkJ CQkJICBvcHRpb25zKSkKKwlpZiAoY29uY3VycmVudCkKKwkJcmVzdWx0ID0gUmVpbmRleFJl bGF0aW9uQ29uY3VycmVudGx5KGhlYXBPaWQsIG9wdGlvbnMpOworCWVsc2UKKwkJcmVzdWx0 ID0gcmVpbmRleF9yZWxhdGlvbihoZWFwT2lkLAorCQkJCQkJCQkgIFJFSU5ERVhfUkVMX1BS T0NFU1NfVE9BU1QgfAorCQkJCQkJCQkgIFJFSU5ERVhfUkVMX0NIRUNLX0NPTlNUUkFJTlRT LAorCQkJCQkJCQkgIG9wdGlvbnMpOworCisJaWYgKCFyZXN1bHQpCiAJCWVyZXBvcnQoTk9U SUNFLAogCQkJCShlcnJtc2coInRhYmxlIFwiJXNcIiBoYXMgbm8gaW5kZXhlcyIsCiAJCQkJ CQlyZWxhdGlvbi0+cmVsbmFtZSkpKTsKQEAgLTIzMzMsNyArMjM0MCw3IEBAIFJlaW5kZXhU YWJsZShSYW5nZVZhciAqcmVsYXRpb24sIGludCBvcHRpb25zKQogICovCiB2b2lkCiBSZWlu ZGV4TXVsdGlwbGVUYWJsZXMoY29uc3QgY2hhciAqb2JqZWN0TmFtZSwgUmVpbmRleE9iamVj dFR5cGUgb2JqZWN0S2luZCwKLQkJCQkJICBpbnQgb3B0aW9ucykKKwkJCQkJICBpbnQgb3B0 aW9ucywgYm9vbCBjb25jdXJyZW50KQogewogCU9pZAkJCW9iamVjdE9pZDsKIAlSZWxhdGlv bglyZWxhdGlvblJlbGF0aW9uOwpAQCAtMjM0NSw2ICsyMzUyLDcgQEAgUmVpbmRleE11bHRp cGxlVGFibGVzKGNvbnN0IGNoYXIgKm9iamVjdE5hbWUsIFJlaW5kZXhPYmplY3RUeXBlIG9i amVjdEtpbmQsCiAJTGlzdAkgICAqcmVsaWRzID0gTklMOwogCUxpc3RDZWxsICAgKmw7CiAJ aW50CQkJbnVtX2tleXM7CisJYm9vbAkJY29uY3VycmVudF93YXJuaW5nID0gZmFsc2U7CiAK IAlBc3NlcnRBcmcob2JqZWN0TmFtZSk7CiAJQXNzZXJ0KG9iamVjdEtpbmQgPT0gUkVJTkRF WF9PQkpFQ1RfU0NIRU1BIHx8CkBAIC0yNDUzLDYgKzI0NjEsMjAgQEAgUmVpbmRleE11bHRp cGxlVGFibGVzKGNvbnN0IGNoYXIgKm9iamVjdE5hbWUsIFJlaW5kZXhPYmplY3RUeXBlIG9i amVjdEtpbmQsCiAJCQkhcGdfY2xhc3Nfb3duZXJjaGVjayhyZWxpZCwgR2V0VXNlcklkKCkp KQogCQkJY29udGludWU7CiAKKwkJLyoKKwkJICogU2tpcCBzeXN0ZW0gdGFibGVzIHRoYXQg aW5kZXhfY3JlYXRlKCkgd291bGQgcmVqZWN0IHRvIGluZGV4CisJCSAqIGNvbmN1cnJlbnRs eS4KKwkJICovCisJCWlmIChjb25jdXJyZW50ICYmIElzU3lzdGVtTmFtZXNwYWNlKGdldF9y ZWxfbmFtZXNwYWNlKHJlbGlkKSkpCisJCXsKKwkJCWlmICghY29uY3VycmVudF93YXJuaW5n KQorCQkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVS RV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJCSBlcnJtc2coImNvbmN1cnJlbnQgcmVpbmRleCBp cyBub3Qgc3VwcG9ydGVkIGZvciBjYXRhbG9nIHJlbGF0aW9ucywgc2tpcHBpbmcgYWxsIikp KTsKKwkJCWNvbmN1cnJlbnRfd2FybmluZyA9IHRydWU7CisJCQljb250aW51ZTsKKwkJfQor CiAJCS8qIFNhdmUgdGhlIGxpc3Qgb2YgcmVsYXRpb24gT0lEcyBpbiBwcml2YXRlIGNvbnRl eHQgKi8KIAkJb2xkID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHByaXZhdGVfY29udGV4dCk7 CiAKQEAgLTI0NzksMjYgKzI1MDEsNjYzIEBAIFJlaW5kZXhNdWx0aXBsZVRhYmxlcyhjb25z dCBjaGFyICpvYmplY3ROYW1lLCBSZWluZGV4T2JqZWN0VHlwZSBvYmplY3RLaW5kLAogCWZv cmVhY2gobCwgcmVsaWRzKQogCXsKIAkJT2lkCQkJcmVsaWQgPSBsZmlyc3Rfb2lkKGwpOwor CQlib29sCQlyZXN1bHQ7CiAKIAkJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIAkJLyog ZnVuY3Rpb25zIGluIGluZGV4ZXMgbWF5IHdhbnQgYSBzbmFwc2hvdCBzZXQgKi8KIAkJUHVz aEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7Ci0JCWlmIChyZWlu ZGV4X3JlbGF0aW9uKHJlbGlkLAotCQkJCQkJCSBSRUlOREVYX1JFTF9QUk9DRVNTX1RPQVNU IHwKLQkJCQkJCQkgUkVJTkRFWF9SRUxfQ0hFQ0tfQ09OU1RSQUlOVFMsCi0JCQkJCQkJIG9w dGlvbnMpKQogCi0JCQlpZiAob3B0aW9ucyAmIFJFSU5ERVhPUFRfVkVSQk9TRSkKKwkJaWYg KGNvbmN1cnJlbnQpCisJCXsKKwkJCXJlc3VsdCA9IFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJl bnRseShyZWxpZCwgb3B0aW9ucyk7CisJCQkvKiBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50 bHkoKSBkb2VzIHRoZSB2ZXJib3NlIG91dHB1dCAqLworCQl9CisJCWVsc2UKKwkJeworCQkJ cmVzdWx0ID0gcmVpbmRleF9yZWxhdGlvbihyZWxpZCwKKwkJCQkJCQkJCSAgUkVJTkRFWF9S RUxfUFJPQ0VTU19UT0FTVCB8CisJCQkJCQkJCQkgIFJFSU5ERVhfUkVMX0NIRUNLX0NPTlNU UkFJTlRTLAorCQkJCQkJCQkJICBvcHRpb25zKTsKKworCQkJaWYgKHJlc3VsdCAmJiAob3B0 aW9ucyAmIFJFSU5ERVhPUFRfVkVSQk9TRSkpCiAJCQkJZXJlcG9ydChJTkZPLAogCQkJCQkJ KGVycm1zZygidGFibGUgXCIlcy4lc1wiIHdhcyByZWluZGV4ZWQiLAogCQkJCQkJCQlnZXRf bmFtZXNwYWNlX25hbWUoZ2V0X3JlbF9uYW1lc3BhY2UocmVsaWQpKSwKIAkJCQkJCQkJZ2V0 X3JlbF9uYW1lKHJlbGlkKSkpKTsKKworCQkJUG9wQWN0aXZlU25hcHNob3QoKTsKKwkJfQor CisJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCX0KKwlTdGFydFRyYW5zYWN0aW9u Q29tbWFuZCgpOworCisJTWVtb3J5Q29udGV4dERlbGV0ZShwcml2YXRlX2NvbnRleHQpOwor fQorCisKKy8qCisgKiBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkKKyAqCisgKiBQcm9j ZXNzIFJFSU5ERVggQ09OQ1VSUkVOVExZIGZvciBnaXZlbiByZWxhdGlvbiBPaWQuIFRoZSBy ZWxhdGlvbiBjYW4gYmUKKyAqIGVpdGhlciBhbiBpbmRleCBvciBhIHRhYmxlLiBJZiBhIHRh YmxlIGlzIHNwZWNpZmllZCwgZWFjaCBwaGFzZSBpcyBwcm9jZXNzZWQKKyAqIG9uZSBieSBv bmUgZm9yIGVhY2ggdGFibGUncyBpbmRleGVzIGFzIHdlbGwgYXMgaXRzIGRlcGVuZGVudCB0 b2FzdCBpbmRleGVzCisgKiBpZiB0aGlzIHRhYmxlIGhhcyBhIHRvYXN0IHJlbGF0aW9uIGRl ZmluZWQuCisgKi8KK3N0YXRpYyBib29sCitSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHko T2lkIHJlbGF0aW9uT2lkLCBpbnQgb3B0aW9ucykKK3sKKwlMaXN0CSAgICpwYXJlbnRSZWxh dGlvbklkcyA9IE5JTDsKKwlMaXN0CSAgICppbmRleElkcyA9IE5JTDsKKwlMaXN0CSAgICpu ZXdJbmRleElkcyA9IE5JTDsKKwlMaXN0CSAgICpyZWxhdGlvbkxvY2tzID0gTklMOworCUxp c3QJICAgKmxvY2tUYWdzID0gTklMOworCUxpc3RDZWxsICAgKmxjLAorCQkJICAgKmxjMjsK KwlNZW1vcnlDb250ZXh0IHByaXZhdGVfY29udGV4dDsKKwlNZW1vcnlDb250ZXh0IG9sZDsK KwljaGFyCQlyZWxraW5kOworCWNoYXIJICAgKnJlbGF0aW9uTmFtZSA9IE5VTEw7CisJY2hh cgkgICAqcmVsYXRpb25OYW1lc3BhY2UgPSBOVUxMOworCVBHUlVzYWdlCXJ1MDsKKworCS8q CisJICogQ3JlYXRlIGEgbWVtb3J5IGNvbnRleHQgdGhhdCB3aWxsIHN1cnZpdmUgZm9yY2Vk IHRyYW5zYWN0aW9uIGNvbW1pdHMgd2UKKwkgKiBkbyBiZWxvdy4gIFNpbmNlIGl0IGlzIGEg Y2hpbGQgb2YgUG9ydGFsQ29udGV4dCwgaXQgd2lsbCBnbyBhd2F5CisJICogZXZlbnR1YWxs eSBldmVuIGlmIHdlIHN1ZmZlciBhbiBlcnJvcjsgdGhlcmUncyBubyBuZWVkIGZvciBzcGVj aWFsCisJICogYWJvcnQgY2xlYW51cCBsb2dpYy4KKwkgKi8KKwlwcml2YXRlX2NvbnRleHQg PSBBbGxvY1NldENvbnRleHRDcmVhdGUoUG9ydGFsQ29udGV4dCwKKwkJCQkJCQkJCQkJIlJl aW5kZXhDb25jdXJyZW50IiwKKwkJCQkJCQkJCQkJQUxMT0NTRVRfU01BTExfU0laRVMpOwor CisJaWYgKG9wdGlvbnMgJiBSRUlOREVYT1BUX1ZFUkJPU0UpCisJeworCQkvKiBTYXZlIGRh dGEgbmVlZGVkIGJ5IFJFSU5ERVggVkVSQk9TRSBpbiBwcml2YXRlIGNvbnRleHQgKi8KKwkJ b2xkID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHByaXZhdGVfY29udGV4dCk7CisKKwkJcmVs YXRpb25OYW1lID0gZ2V0X3JlbF9uYW1lKHJlbGF0aW9uT2lkKTsKKwkJcmVsYXRpb25OYW1l c3BhY2UgPSBnZXRfbmFtZXNwYWNlX25hbWUoZ2V0X3JlbF9uYW1lc3BhY2UocmVsYXRpb25P aWQpKTsKKworCQlwZ19ydXNhZ2VfaW5pdCgmcnUwKTsKKworCQlNZW1vcnlDb250ZXh0U3dp dGNoVG8ob2xkKTsKKwl9CisKKwlyZWxraW5kID0gZ2V0X3JlbF9yZWxraW5kKHJlbGF0aW9u T2lkKTsKKworCS8qCisJICogRXh0cmFjdCB0aGUgbGlzdCBvZiBpbmRleGVzIHRoYXQgYXJl IGdvaW5nIHRvIGJlIHJlYnVpbHQgYmFzZWQgb24gdGhlCisJICogbGlzdCBvZiByZWxhdGlv biBPaWRzIGdpdmVuIGJ5IGNhbGxlci4gRm9yIGVhY2ggZWxlbWVudCBpbiBnaXZlbiBsaXN0 LAorCSAqIGlmIHRoZSByZWxraW5kIG9mIGdpdmVuIHJlbGF0aW9uIE9pZCBpcyBhIHRhYmxl LCBhbGwgaXRzIHZhbGlkIGluZGV4ZXMKKwkgKiB3aWxsIGJlIHJlYnVpbHQsIGluY2x1ZGlu ZyBpdHMgYXNzb2NpYXRlZCB0b2FzdCB0YWJsZSBpbmRleGVzLiBJZgorCSAqIHJlbGtpbmQg aXMgYW4gaW5kZXgsIHRoaXMgaW5kZXggaXRzZWxmIHdpbGwgYmUgcmVidWlsdC4gVGhlIGxv Y2tzIHRha2VuCisJICogb24gcGFyZW50IHJlbGF0aW9ucyBhbmQgaW52b2x2ZWQgaW5kZXhl cyBhcmUga2VwdCB1bnRpbCB0aGlzCisJICogdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIHRv IHByb3RlY3QgYWdhaW5zdCBzY2hlbWEgY2hhbmdlcyB0aGF0IG1pZ2h0CisJICogb2NjdXIg dW50aWwgdGhlIHNlc3Npb24gbG9jayBpcyB0YWtlbiBvbiBlYWNoIHJlbGF0aW9uLCBzZXNz aW9uIGxvY2sKKwkgKiB1c2VkIHRvIHNpbWlsYXJseSBwcm90ZWN0IGZyb20gYW55IHNjaGVt YSBjaGFuZ2UgdGhhdCBjb3VsZCBoYXBwZW4KKwkgKiB3aXRoaW4gdGhlIG11bHRpcGxlIHRy YW5zYWN0aW9ucyB0aGF0IGFyZSB1c2VkIGR1cmluZyB0aGlzIHByb2Nlc3MuCisJICovCisJ c3dpdGNoIChyZWxraW5kKQorCXsKKwkJY2FzZSBSRUxLSU5EX1JFTEFUSU9OOgorCQljYXNl IFJFTEtJTkRfTUFUVklFVzoKKwkJY2FzZSBSRUxLSU5EX1RPQVNUVkFMVUU6CisJCQl7CisJ CQkJLyoKKwkJCQkgKiBJbiB0aGUgY2FzZSBvZiBhIHJlbGF0aW9uLCBmaW5kIGFsbCBpdHMg aW5kZXhlcyBpbmNsdWRpbmcKKwkJCQkgKiB0b2FzdCBpbmRleGVzLgorCQkJCSAqLworCQkJ CVJlbGF0aW9uCWhlYXBSZWxhdGlvbjsKKworCQkJCS8qIFNhdmUgdGhlIGxpc3Qgb2YgcmVs YXRpb24gT0lEcyBpbiBwcml2YXRlIGNvbnRleHQgKi8KKwkJCQlvbGQgPSBNZW1vcnlDb250 ZXh0U3dpdGNoVG8ocHJpdmF0ZV9jb250ZXh0KTsKKworCQkJCS8qIFRyYWNrIHRoaXMgcmVs YXRpb24gZm9yIHNlc3Npb24gbG9ja3MgKi8KKwkJCQlwYXJlbnRSZWxhdGlvbklkcyA9IGxh cHBlbmRfb2lkKHBhcmVudFJlbGF0aW9uSWRzLCByZWxhdGlvbk9pZCk7CisKKwkJCQlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkKTsKKworCQkJCS8qIEEgc2hhcmVkIHJlbGF0aW9uIGNh bm5vdCBiZSByZWluZGV4ZWQgY29uY3VycmVudGx5ICovCisJCQkJaWYgKElzU2hhcmVkUmVs YXRpb24ocmVsYXRpb25PaWQpKQorCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCShlcnJj b2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJCQkgZXJybXNnKCJj b25jdXJyZW50IHJlaW5kZXggaXMgbm90IHN1cHBvcnRlZCBmb3Igc2hhcmVkIHJlbGF0aW9u cyIpKSk7CisKKwkJCQkvKiBBIHN5c3RlbSBjYXRhbG9nIGNhbm5vdCBiZSByZWluZGV4ZWQg Y29uY3VycmVudGx5ICovCisJCQkJaWYgKElzU3lzdGVtTmFtZXNwYWNlKGdldF9yZWxfbmFt ZXNwYWNlKHJlbGF0aW9uT2lkKSkpCisJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkJCSBlcnJtc2co ImNvbmN1cnJlbnQgcmVpbmRleCBpcyBub3Qgc3VwcG9ydGVkIGZvciBjYXRhbG9nIHJlbGF0 aW9ucyIpKSk7CisKKwkJCQkvKiBPcGVuIHJlbGF0aW9uIHRvIGdldCBpdHMgaW5kZXhlcyAq LworCQkJCWhlYXBSZWxhdGlvbiA9IHRhYmxlX29wZW4ocmVsYXRpb25PaWQsIFNoYXJlVXBk YXRlRXhjbHVzaXZlTG9jayk7CisKKwkJCQkvKiBBZGQgYWxsIHRoZSB2YWxpZCBpbmRleGVz IG9mIHJlbGF0aW9uIHRvIGxpc3QgKi8KKwkJCQlmb3JlYWNoKGxjLCBSZWxhdGlvbkdldElu ZGV4TGlzdChoZWFwUmVsYXRpb24pKQorCQkJCXsKKwkJCQkJT2lkCQkJY2VsbE9pZCA9IGxm aXJzdF9vaWQobGMpOworCQkJCQlSZWxhdGlvbglpbmRleFJlbGF0aW9uID0gaW5kZXhfb3Bl bihjZWxsT2lkLAorCQkJCQkJCQkJCQkJCQkgICBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sp OworCisJCQkJCWlmICghaW5kZXhSZWxhdGlvbi0+cmRfaW5kZXgtPmluZGlzdmFsaWQpCisJ CQkJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5ERVhf Q09SUlVQVEVEKSwKKwkJCQkJCQkJIGVycm1zZygiY2Fubm90IHJlaW5kZXggY29uY3VycmVu dGx5IGludmFsaWQgaW5kZXggXCIlcy4lc1wiLCBza2lwcGluZyIsCisJCQkJCQkJCQkJZ2V0 X25hbWVzcGFjZV9uYW1lKGdldF9yZWxfbmFtZXNwYWNlKGNlbGxPaWQpKSwKKwkJCQkJCQkJ CQlnZXRfcmVsX25hbWUoY2VsbE9pZCkpKSk7CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJ LyogU2F2ZSB0aGUgbGlzdCBvZiByZWxhdGlvbiBPSURzIGluIHByaXZhdGUgY29udGV4dCAq LworCQkJCQkJb2xkID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHByaXZhdGVfY29udGV4dCk7 CisKKwkJCQkJCWluZGV4SWRzID0gbGFwcGVuZF9vaWQoaW5kZXhJZHMsIGNlbGxPaWQpOwor CisJCQkJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkKTsKKwkJCQkJfQorCisJCQkJCWlu ZGV4X2Nsb3NlKGluZGV4UmVsYXRpb24sIE5vTG9jayk7CisJCQkJfQorCisJCQkJLyogQWxz byBhZGQgdGhlIHRvYXN0IGluZGV4ZXMgKi8KKwkJCQlpZiAoT2lkSXNWYWxpZChoZWFwUmVs YXRpb24tPnJkX3JlbC0+cmVsdG9hc3RyZWxpZCkpCisJCQkJeworCQkJCQlPaWQJCQl0b2Fz dE9pZCA9IGhlYXBSZWxhdGlvbi0+cmRfcmVsLT5yZWx0b2FzdHJlbGlkOworCQkJCQlSZWxh dGlvbgl0b2FzdFJlbGF0aW9uID0gdGFibGVfb3Blbih0b2FzdE9pZCwKKwkJCQkJCQkJCQkJ CQkJICAgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrKTsKKworCQkJCQkvKiBTYXZlIHRoZSBs aXN0IG9mIHJlbGF0aW9uIE9JRHMgaW4gcHJpdmF0ZSBjb250ZXh0ICovCisJCQkJCW9sZCA9 IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwcml2YXRlX2NvbnRleHQpOworCisJCQkJCS8qIFRy YWNrIHRoaXMgcmVsYXRpb24gZm9yIHNlc3Npb24gbG9ja3MgKi8KKwkJCQkJcGFyZW50UmVs YXRpb25JZHMgPSBsYXBwZW5kX29pZChwYXJlbnRSZWxhdGlvbklkcywgdG9hc3RPaWQpOwor CisJCQkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGQpOworCisJCQkJCWZvcmVhY2gobGMy LCBSZWxhdGlvbkdldEluZGV4TGlzdCh0b2FzdFJlbGF0aW9uKSkKKwkJCQkJeworCQkJCQkJ T2lkCQkJY2VsbE9pZCA9IGxmaXJzdF9vaWQobGMyKTsKKwkJCQkJCVJlbGF0aW9uCWluZGV4 UmVsYXRpb24gPSBpbmRleF9vcGVuKGNlbGxPaWQsCisJCQkJCQkJCQkJCQkJCQkgICBTaGFy ZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOworCisJCQkJCQlpZiAoIWluZGV4UmVsYXRpb24tPnJk X2luZGV4LT5pbmRpc3ZhbGlkKQorCQkJCQkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJCQkJ CShlcnJjb2RlKEVSUkNPREVfSU5ERVhfQ09SUlVQVEVEKSwKKwkJCQkJCQkJCSBlcnJtc2co ImNhbm5vdCByZWluZGV4IGNvbmN1cnJlbnRseSBpbnZhbGlkIGluZGV4IFwiJXMuJXNcIiwg c2tpcHBpbmciLAorCQkJCQkJCQkJCQlnZXRfbmFtZXNwYWNlX25hbWUoZ2V0X3JlbF9uYW1l c3BhY2UoY2VsbE9pZCkpLAorCQkJCQkJCQkJCQlnZXRfcmVsX25hbWUoY2VsbE9pZCkpKSk7 CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJLyoKKwkJCQkJCQkgKiBTYXZlIHRoZSBs aXN0IG9mIHJlbGF0aW9uIE9JRHMgaW4gcHJpdmF0ZQorCQkJCQkJCSAqIGNvbnRleHQKKwkJ CQkJCQkgKi8KKwkJCQkJCQlvbGQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocHJpdmF0ZV9j b250ZXh0KTsKKworCQkJCQkJCWluZGV4SWRzID0gbGFwcGVuZF9vaWQoaW5kZXhJZHMsIGNl bGxPaWQpOworCisJCQkJCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZCk7CisJCQkJCQl9 CisKKwkJCQkJCWluZGV4X2Nsb3NlKGluZGV4UmVsYXRpb24sIE5vTG9jayk7CisJCQkJCX0K KworCQkJCQl0YWJsZV9jbG9zZSh0b2FzdFJlbGF0aW9uLCBOb0xvY2spOworCQkJCX0KKwor CQkJCXRhYmxlX2Nsb3NlKGhlYXBSZWxhdGlvbiwgTm9Mb2NrKTsKKwkJCQlicmVhazsKKwkJ CX0KKwkJY2FzZSBSRUxLSU5EX0lOREVYOgorCQkJeworCQkJCS8qCisJCQkJICogRm9yIGFu IGluZGV4IHNpbXBseSBhZGQgaXRzIE9pZCB0byBsaXN0LiBJbnZhbGlkIGluZGV4ZXMKKwkJ CQkgKiBjYW5ub3QgYmUgaW5jbHVkZWQgaW4gbGlzdC4KKwkJCQkgKi8KKwkJCQlSZWxhdGlv bglpbmRleFJlbGF0aW9uID0gaW5kZXhfb3BlbihyZWxhdGlvbk9pZCwgU2hhcmVVcGRhdGVF eGNsdXNpdmVMb2NrKTsKKwkJCQlPaWQJCQlwYXJlbnRPaWQgPSBJbmRleEdldFJlbGF0aW9u KHJlbGF0aW9uT2lkLCBmYWxzZSk7CisKKwkJCQkvKiBBIHNoYXJlZCByZWxhdGlvbiBjYW5u b3QgYmUgcmVpbmRleGVkIGNvbmN1cnJlbnRseSAqLworCQkJCWlmIChJc1NoYXJlZFJlbGF0 aW9uKHBhcmVudE9pZCkpCisJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVycmNvZGUo RVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkJCSBlcnJtc2coImNvbmN1 cnJlbnQgcmVpbmRleCBpcyBub3Qgc3VwcG9ydGVkIGZvciBzaGFyZWQgcmVsYXRpb25zIikp KTsKKworCQkJCS8qIEEgc3lzdGVtIGNhdGFsb2cgY2Fubm90IGJlIHJlaW5kZXhlZCBjb25j dXJyZW50bHkgKi8KKwkJCQlpZiAoSXNTeXN0ZW1OYW1lc3BhY2UoZ2V0X3JlbF9uYW1lc3Bh Y2UocGFyZW50T2lkKSkpCisJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVycmNvZGUo RVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkJCSBlcnJtc2coImNvbmN1 cnJlbnQgcmVpbmRleCBpcyBub3Qgc3VwcG9ydGVkIGZvciBjYXRhbG9nIHJlbGF0aW9ucyIp KSk7CisKKwkJCQkvKiBTYXZlIHRoZSBsaXN0IG9mIHJlbGF0aW9uIE9JRHMgaW4gcHJpdmF0 ZSBjb250ZXh0ICovCisJCQkJb2xkID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHByaXZhdGVf Y29udGV4dCk7CisKKwkJCQkvKiBUcmFjayB0aGUgcGFyZW50IHJlbGF0aW9uIG9mIHRoaXMg aW5kZXggZm9yIHNlc3Npb24gbG9ja3MgKi8KKwkJCQlwYXJlbnRSZWxhdGlvbklkcyA9IGxp c3RfbWFrZTFfb2lkKHBhcmVudE9pZCk7CisKKwkJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkKTsKKworCQkJCWlmICghaW5kZXhSZWxhdGlvbi0+cmRfaW5kZXgtPmluZGlzdmFsaWQp CisJCQkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOREVY X0NPUlJVUFRFRCksCisJCQkJCQkJIGVycm1zZygiY2Fubm90IHJlaW5kZXggY29uY3VycmVu dGx5IGludmFsaWQgaW5kZXggXCIlcy4lc1wiLCBza2lwcGluZyIsCisJCQkJCQkJCQlnZXRf bmFtZXNwYWNlX25hbWUoZ2V0X3JlbF9uYW1lc3BhY2UocmVsYXRpb25PaWQpKSwKKwkJCQkJ CQkJCWdldF9yZWxfbmFtZShyZWxhdGlvbk9pZCkpKSk7CisJCQkJZWxzZQorCQkJCXsKKwkJ CQkJLyogU2F2ZSB0aGUgbGlzdCBvZiByZWxhdGlvbiBPSURzIGluIHByaXZhdGUgY29udGV4 dCAqLworCQkJCQlvbGQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocHJpdmF0ZV9jb250ZXh0 KTsKKworCQkJCQlpbmRleElkcyA9IGxhcHBlbmRfb2lkKGluZGV4SWRzLCByZWxhdGlvbk9p ZCk7CisKKwkJCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZCk7CisJCQkJfQorCisJCQkJ aW5kZXhfY2xvc2UoaW5kZXhSZWxhdGlvbiwgTm9Mb2NrKTsKKwkJCQlicmVhazsKKwkJCX0K KwkJY2FzZSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFOgorCQkJLyogc2VlIHJlaW5kZXhf cmVsYXRpb24oKSAqLworCQkJZXJlcG9ydChXQVJOSU5HLAorCQkJCQkoZXJyY29kZShFUlJD T0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJCSBlcnJtc2coIlJFSU5ERVggb2Yg cGFydGl0aW9uZWQgdGFibGVzIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQsIHNraXBwaW5nIFwi JXNcIiIsCisJCQkJCQkJZ2V0X3JlbF9uYW1lKHJlbGF0aW9uT2lkKSkpKTsKKwkJCXJldHVy biBmYWxzZTsKKwkJZGVmYXVsdDoKKwkJCS8qIFJldHVybiBlcnJvciBpZiB0eXBlIG9mIHJl bGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgKi8KKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShl cnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAorCQkJCQkgZXJybXNnKCJjYW5u b3QgcmVpbmRleCBjb25jdXJyZW50bHkgdGhpcyB0eXBlIG9mIHJlbGF0aW9uIikpKTsKKwkJ CWJyZWFrOworCX0KKworCS8qIERlZmluZXRlbHkgbm8gaW5kZXhlcywgc28gbGVhdmUgKi8K KwlpZiAoaW5kZXhJZHMgPT0gTklMKQorCXsKIAkJUG9wQWN0aXZlU25hcHNob3QoKTsKKwkJ cmV0dXJuIGZhbHNlOworCX0KKworCUFzc2VydChwYXJlbnRSZWxhdGlvbklkcyAhPSBOSUwp OworCisJLyoKKwkgKiBQaGFzZSAxIG9mIFJFSU5ERVggQ09OQ1VSUkVOVExZCisJICoKKwkg KiBIZXJlIGJlZ2lucyB0aGUgcHJvY2VzcyBmb3IgY29uY3VycmVudGx5IHJlYnVpbGRpbmcg dGhlIGluZGV4IGVudHJpZXMuCisJICogV2UgbmVlZCBmaXJzdCB0byBjcmVhdGUgYW4gaW5k ZXggd2hpY2ggaXMgYmFzZWQgb24gdGhlIHNhbWUgZGF0YSBhcyB0aGUKKwkgKiBmb3JtZXIg aW5kZXggZXhjZXB0IHRoYXQgaXQgd2lsbCBiZSBvbmx5IHJlZ2lzdGVyZWQgaW4gY2F0YWxv Z3MgYW5kCisJICogd2lsbCBiZSBidWlsdCBsYXRlci4gSXQgaXMgcG9zc2libGUgdG8gcGVy Zm9ybSBhbGwgdGhlIG9wZXJhdGlvbnMgb24KKwkgKiBhbGwgdGhlIGluZGV4ZXMgYXQgdGhl IHNhbWUgdGltZSBmb3IgYSBwYXJlbnQgcmVsYXRpb24gaW5jbHVkaW5nCisJICogaW5kZXhl cyBmb3IgaXRzIHRvYXN0IHJlbGF0aW9uLgorCSAqLworCisJLyogRG8gdGhlIGNvbmN1cnJl bnQgaW5kZXggY3JlYXRpb24gZm9yIGVhY2ggaW5kZXggKi8KKwlmb3JlYWNoKGxjLCBpbmRl eElkcykKKwl7CisJCWNoYXIJICAgKmNvbmN1cnJlbnROYW1lOworCQlPaWQJCQlpbmRPaWQg PSBsZmlyc3Rfb2lkKGxjKTsKKwkJT2lkCQkJY29uY3VycmVudE9pZCA9IEludmFsaWRPaWQ7 CisJCVJlbGF0aW9uCWluZGV4UmVsLAorCQkJCQlpbmRleFBhcmVudFJlbCwKKwkJCQkJaW5k ZXhDb25jdXJyZW50UmVsOworCQlMb2NrUmVsSWQJbG9ja3JlbGlkOworCisJCWluZGV4UmVs ID0gaW5kZXhfb3BlbihpbmRPaWQsIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7CisJCS8q IE9wZW4gdGhlIGluZGV4IHBhcmVudCByZWxhdGlvbiwgbWlnaHQgYmUgYSB0b2FzdCBvciBw YXJlbnQgcmVsYXRpb24gKi8KKwkJaW5kZXhQYXJlbnRSZWwgPSB0YWJsZV9vcGVuKGluZGV4 UmVsLT5yZF9pbmRleC0+aW5kcmVsaWQsCisJCQkJCQkJCQlTaGFyZVVwZGF0ZUV4Y2x1c2l2 ZUxvY2spOworCisJCS8qIENob29zZSBhIHRlbXBvcmFyeSByZWxhdGlvbiBuYW1lIGZvciB0 aGUgbmV3IGluZGV4ICovCisJCWNvbmN1cnJlbnROYW1lID0gQ2hvb3NlUmVsYXRpb25OYW1l KGdldF9yZWxfbmFtZShpbmRPaWQpLAorCQkJCQkJCQkJCQlOVUxMLAorCQkJCQkJCQkJCQki Y2NuZXciLAorCQkJCQkJCQkJCQlnZXRfcmVsX25hbWVzcGFjZShpbmRleFJlbC0+cmRfaW5k ZXgtPmluZHJlbGlkKSwKKwkJCQkJCQkJCQkJZmFsc2UpOworCisJCS8qIENyZWF0ZSBuZXcg aW5kZXggZGVmaW5pdGlvbiBiYXNlZCBvbiBnaXZlbiBpbmRleCAqLworCQljb25jdXJyZW50 T2lkID0gaW5kZXhfY29uY3VycmVudGx5X2NyZWF0ZV9jb3B5KGluZGV4UGFyZW50UmVsLAor CQkJCQkJCQkJCQkJCSAgIGluZE9pZCwKKwkJCQkJCQkJCQkJCQkgICBjb25jdXJyZW50TmFt ZSk7CisKKwkJLyogTm93IG9wZW4gdGhlIHJlbGF0aW9uIG9mIHRoZSBuZXcgaW5kZXgsIGEg bG9jayBpcyBhbHNvIG5lZWRlZCBvbiBpdCAqLworCQlpbmRleENvbmN1cnJlbnRSZWwgPSBp bmRleF9vcGVuKGNvbmN1cnJlbnRPaWQsIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7CisK KwkJLyogU2F2ZSB0aGUgbGlzdCBvZiBvaWRzIGFuZCBsb2NrcyBpbiBwcml2YXRlIGNvbnRl eHQgKi8KKwkJb2xkID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHByaXZhdGVfY29udGV4dCk7 CisKKwkJLyogU2F2ZSB0aGUgbmV3IGluZGV4IE9pZCAqLworCQluZXdJbmRleElkcyA9IGxh cHBlbmRfb2lkKG5ld0luZGV4SWRzLCBjb25jdXJyZW50T2lkKTsKKworCQkvKgorCQkgKiBT YXZlIGxvY2tyZWxpZCB0byBwcm90ZWN0IGVhY2ggcmVsYXRpb24gZnJvbSBkcm9wIHRoZW4g Y2xvc2UKKwkJICogcmVsYXRpb25zLiBUaGUgbG9ja3JlbGlkIG9uIHBhcmVudCByZWxhdGlv biBpcyBub3QgdGFrZW4gaGVyZSB0bworCQkgKiBhdm9pZCBtdWx0aXBsZSBsb2NrcyB0YWtl biBvbiB0aGUgc2FtZSByZWxhdGlvbiwgaW5zdGVhZCB3ZSByZWx5IG9uCisJCSAqIHBhcmVu dFJlbGF0aW9uSWRzIGJ1aWx0IGVhcmxpZXIuCisJCSAqLworCQlsb2NrcmVsaWQgPSBpbmRl eFJlbC0+cmRfbG9ja0luZm8ubG9ja1JlbElkOworCQlyZWxhdGlvbkxvY2tzID0gbGFwcGVu ZChyZWxhdGlvbkxvY2tzLCAmbG9ja3JlbGlkKTsKKwkJbG9ja3JlbGlkID0gaW5kZXhDb25j dXJyZW50UmVsLT5yZF9sb2NrSW5mby5sb2NrUmVsSWQ7CisJCXJlbGF0aW9uTG9ja3MgPSBs YXBwZW5kKHJlbGF0aW9uTG9ja3MsICZsb2NrcmVsaWQpOworCisJCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGQpOworCisJCWluZGV4X2Nsb3NlKGluZGV4UmVsLCBOb0xvY2spOworCQlp bmRleF9jbG9zZShpbmRleENvbmN1cnJlbnRSZWwsIE5vTG9jayk7CisJCXRhYmxlX2Nsb3Nl KGluZGV4UGFyZW50UmVsLCBOb0xvY2spOworCX0KKworCS8qCisJICogU2F2ZSB0aGUgaGVh cCBsb2NrIGZvciBmb2xsb3dpbmcgdmlzaWJpbGl0eSBjaGVja3Mgd2l0aCBvdGhlciBiYWNr ZW5kcworCSAqIG1pZ2h0IGNvbmZsaWN0IHdpdGggdGhpcyBzZXNzaW9uLgorCSAqLworCWZv cmVhY2gobGMsIHBhcmVudFJlbGF0aW9uSWRzKQorCXsKKwkJUmVsYXRpb24JaGVhcFJlbGF0 aW9uID0gdGFibGVfb3BlbihsZmlyc3Rfb2lkKGxjKSwgU2hhcmVVcGRhdGVFeGNsdXNpdmVM b2NrKTsKKwkJTG9ja1JlbElkCWxvY2tyZWxpZCA9IGhlYXBSZWxhdGlvbi0+cmRfbG9ja0lu Zm8ubG9ja1JlbElkOworCQlMT0NLVEFHICAgICpoZWFwbG9ja3RhZzsKKworCQkvKiBTYXZl IHRoZSBsaXN0IG9mIGxvY2tzIGluIHByaXZhdGUgY29udGV4dCAqLworCQlvbGQgPSBNZW1v cnlDb250ZXh0U3dpdGNoVG8ocHJpdmF0ZV9jb250ZXh0KTsKKworCQkvKiBBZGQgbG9ja3Jl bGlkIG9mIHBhcmVudCByZWxhdGlvbiB0byB0aGUgbGlzdCBvZiBsb2NrZWQgcmVsYXRpb25z ICovCisJCXJlbGF0aW9uTG9ja3MgPSBsYXBwZW5kKHJlbGF0aW9uTG9ja3MsICZsb2NrcmVs aWQpOworCisJCWhlYXBsb2NrdGFnID0gKExPQ0tUQUcgKikgcGFsbG9jKHNpemVvZihMT0NL VEFHKSk7CisKKwkJLyogU2F2ZSB0aGUgTE9DS1RBRyBmb3IgdGhpcyBwYXJlbnQgcmVsYXRp b24gZm9yIHRoZSB3YWl0IHBoYXNlICovCisJCVNFVF9MT0NLVEFHX1JFTEFUSU9OKCpoZWFw bG9ja3RhZywgbG9ja3JlbGlkLmRiSWQsIGxvY2tyZWxpZC5yZWxJZCk7CisJCWxvY2tUYWdz ID0gbGFwcGVuZChsb2NrVGFncywgaGVhcGxvY2t0YWcpOworCisJCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGQpOworCisJCS8qIENsb3NlIGhlYXAgcmVsYXRpb24gKi8KKwkJdGFibGVf Y2xvc2UoaGVhcFJlbGF0aW9uLCBOb0xvY2spOworCX0KKworCS8qCisJICogRm9yIGEgY29u Y3VycmVudCBidWlsZCwgaXQgaXMgbmVjZXNzYXJ5IHRvIG1ha2UgdGhlIGNhdGFsb2cgZW50 cmllcworCSAqIHZpc2libGUgdG8gdGhlIG90aGVyIHRyYW5zYWN0aW9ucyBiZWZvcmUgYWN0 dWFsbHkgYnVpbGRpbmcgdGhlIGluZGV4LgorCSAqIFRoaXMgd2lsbCBwcmV2ZW50IHRoZW0g ZnJvbSBtYWtpbmcgaW5jb21wYXRpYmxlIEhPVCB1cGRhdGVzLiBUaGUgaW5kZXgKKwkgKiBp cyBtYXJrZWQgYXMgbm90IHJlYWR5IGFuZCBpbnZhbGlkIHNvIGFzIG5vIG90aGVyIHRyYW5z YWN0aW9ucyB3aWxsIHRyeQorCSAqIHRvIHVzZSBpdCBmb3IgSU5TRVJUIG9yIFNFTEVDVC4K KwkgKgorCSAqIEJlZm9yZSBjb21taXR0aW5nLCBnZXQgYSBzZXNzaW9uIGxldmVsIGxvY2sg b24gdGhlIHJlbGF0aW9uLCB0aGUKKwkgKiBjb25jdXJyZW50IGluZGV4IGFuZCBpdHMgY29w eSB0byBpbnN1cmUgdGhhdCBub25lIG9mIHRoZW0gYXJlIGRyb3BwZWQKKwkgKiB1bnRpbCB0 aGUgb3BlcmF0aW9uIGlzIGRvbmUuCisJICovCisJZm9yZWFjaChsYywgcmVsYXRpb25Mb2Nr cykKKwl7CisJCUxvY2tSZWxJZAlsb2NrUmVsID0gKigoTG9ja1JlbElkICopIGxmaXJzdChs YykpOworCisJCUxvY2tSZWxhdGlvbklkRm9yU2Vzc2lvbigmbG9ja1JlbCwgU2hhcmVVcGRh dGVFeGNsdXNpdmVMb2NrKTsKKwl9CisKKwlQb3BBY3RpdmVTbmFwc2hvdCgpOworCUNvbW1p dFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJLyoKKwkgKiBQaGFzZSAyIG9mIFJFSU5ERVgg Q09OQ1VSUkVOVExZCisJICoKKwkgKiBCdWlsZCB0aGUgbmV3IGluZGV4ZXMgaW4gYSBzZXBh cmF0ZSB0cmFuc2FjdGlvbiBmb3IgZWFjaCBpbmRleCB0byBhdm9pZAorCSAqIGhhdmluZyBv cGVuIHRyYW5zYWN0aW9ucyBmb3IgYW4gdW5uZWNlc3NhcnkgbG9uZyB0aW1lLiBBIGNvbmN1 cnJlbnQKKwkgKiBidWlsZCBpcyBkb25lIGZvciBlYWNoIGluZGV4IHRoYXQgd2lsbCByZXBs YWNlIHRoZSBvbGQgaW5kZXhlcy4gQmVmb3JlCisJICogZG9pbmcgdGhhdCwgd2UgbmVlZCB0 byB3YWl0IG9uIHRoZSBwYXJlbnQgcmVsYXRpb25zIHVudGlsIG5vIHJ1bm5pbmcKKwkgKiB0 cmFuc2FjdGlvbnMgY291bGQgaGF2ZSB0aGUgcGFyZW50IHRhYmxlIG9mIGluZGV4IG9wZW4u CisJICovCisKKwkvKiBQZXJmb3JtIGEgd2FpdCBvbiBhbGwgdGhlIHNlc3Npb24gbG9ja3Mg Ki8KKwlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCVdhaXRGb3JMb2NrZXJzTXVsdGlw bGUobG9ja1RhZ3MsIFNoYXJlTG9jayk7CisJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7 CisKKwlmb3Jib3RoKGxjLCBpbmRleElkcywgbGMyLCBuZXdJbmRleElkcykKKwl7CisJCVJl bGF0aW9uCWluZGV4UmVsOworCQlPaWQJCQlpbmRPaWQgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJ T2lkCQkJY29uY3VycmVudE9pZCA9IGxmaXJzdF9vaWQobGMyKTsKKwkJT2lkCQkJdGFibGVP aWQ7CisKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKiBTdGFydCBuZXcgdHJh bnNhY3Rpb24gZm9yIHRoaXMgaW5kZXgncyBjb25jdXJyZW50IGJ1aWxkICovCisJCVN0YXJ0 VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkJLyogU2V0IEFjdGl2ZVNuYXBzaG90IHNpbmNl IGZ1bmN0aW9ucyBpbiB0aGUgaW5kZXhlcyBtYXkgbmVlZCBpdCAqLworCQlQdXNoQWN0aXZl U25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKworCQkvKgorCQkgKiBJbmRl eCByZWxhdGlvbiBoYXMgYmVlbiBjbG9zZWQgYnkgcHJldmlvdXMgY29tbWl0LCBzbyByZW9w ZW4gaXQgdG8KKwkJICogZ2V0IGl0cyBpbmZvcm1hdGlvbi4KKwkJICovCisJCWluZGV4UmVs ID0gaW5kZXhfb3BlbihpbmRPaWQsIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7CisJCXRh YmxlT2lkID0gaW5kZXhSZWwtPnJkX2luZGV4LT5pbmRyZWxpZDsKKwkJaW5kZXhfY2xvc2Uo aW5kZXhSZWwsIE5vTG9jayk7CisKKwkJLyogUGVyZm9ybSBjb25jdXJyZW50IGJ1aWxkIG9m IG5ldyBpbmRleCAqLworCQlpbmRleF9jb25jdXJyZW50bHlfYnVpbGQodGFibGVPaWQsIGNv bmN1cnJlbnRPaWQpOworCisJCS8qIFdlIGNhbiBkbyBhd2F5IHdpdGggb3VyIHNuYXBzaG90 ICovCisJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisKKwkJLyoKKwkJICogQ29tbWl0IHRoaXMg dHJhbnNhY3Rpb24gdG8gbWFrZSB0aGUgaW5kaXNyZWFkeSB1cGRhdGUgdmlzaWJsZSBmb3IK KwkJICogY29uY3VycmVudCBpbmRleC4KKwkJICovCiAJCUNvbW1pdFRyYW5zYWN0aW9uQ29t bWFuZCgpOwogCX0KKworCS8qCisJICogUGhhc2UgMyBvZiBSRUlOREVYIENPTkNVUlJFTlRM WQorCSAqCisJICogRHVyaW5nIHRoaXMgcGhhc2UgdGhlIG9sZCBpbmRleGVzIGNhdGNoIHVw IHdpdGggYW55IG5ldyB0dXBsZXMgdGhhdAorCSAqIHdlcmUgY3JlYXRlZCBkdXJpbmcgdGhl IHByZXZpb3VzIHBoYXNlLgorCSAqCisJICogV2Ugb25jZSBhZ2FpbiB3YWl0IHVudGlsIG5v IHRyYW5zYWN0aW9uIGNhbiBoYXZlIHRoZSB0YWJsZSBvcGVuIHdpdGgKKwkgKiB0aGUgaW5k ZXggbWFya2VkIGFzIHJlYWQtb25seSBmb3IgdXBkYXRlcy4gRWFjaCBpbmRleCB2YWxpZGF0 aW9uIGlzCisJICogZG9uZSBpbiBhIHNlcGFyYXRlIHRyYW5zYWN0aW9uIHRvIG1pbmltaXpl IGhvdyBsb25nIHdlIGhvbGQgYW4gb3BlbgorCSAqIHRyYW5zYWN0aW9uLgorCSAqLworCisJ LyogUGVyZm9ybSBhIHdhaXQgb24gYWxsIHRoZSBzZXNzaW9uIGxvY2tzICovCisJU3RhcnRU cmFuc2FjdGlvbkNvbW1hbmQoKTsKKwlXYWl0Rm9yTG9ja2Vyc011bHRpcGxlKGxvY2tUYWdz LCBTaGFyZUxvY2spOworCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJLyoKKwkg KiBTY2FuIHRoZSBoZWFwIGZvciBlYWNoIG5ldyBpbmRleCwgdGhlbiBpbnNlcnQgYW55IG1p c3NpbmcgaW5kZXgKKwkgKiBlbnRyaWVzLgorCSAqLworCWZvcmVhY2gobGMsIG5ld0luZGV4 SWRzKQorCXsKKwkJT2lkCQkJaW5kT2lkID0gbGZpcnN0X29pZChsYyk7CisJCU9pZAkJCXJl bE9pZDsKKwkJVHJhbnNhY3Rpb25JZCBsaW1pdFhtaW47CisJCVNuYXBzaG90CXNuYXBzaG90 OworCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJLyogT3BlbiBzZXBhcmF0ZSB0 cmFuc2FjdGlvbiB0byB2YWxpZGF0ZSBpbmRleCAqLworCQlTdGFydFRyYW5zYWN0aW9uQ29t bWFuZCgpOworCisJCS8qIEdldCB0aGUgcGFyZW50IHJlbGF0aW9uIE9pZCAqLworCQlyZWxP aWQgPSBJbmRleEdldFJlbGF0aW9uKGluZE9pZCwgZmFsc2UpOworCisJCS8qCisJCSAqIFRh a2UgdGhlIHJlZmVyZW5jZSBzbmFwc2hvdCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdGhlIG9s ZCBpbmRleGVzCisJCSAqIHZhbGlkYXRpb24uCisJCSAqLworCQlzbmFwc2hvdCA9IFJlZ2lz dGVyU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKwkJUHVzaEFjdGl2ZVNu YXBzaG90KHNuYXBzaG90KTsKKworCQkvKiBWYWxpZGF0ZSBpbmRleCwgd2hpY2ggbWlnaHQg YmUgYSB0b2FzdCAqLworCQl2YWxpZGF0ZV9pbmRleChyZWxPaWQsIGluZE9pZCwgc25hcHNo b3QpOworCisJCS8qCisJCSAqIFdlIGNhbiBub3cgZG8gYXdheSB3aXRoIG91ciBhY3RpdmUg c25hcHNob3QsIHdlIHN0aWxsIG5lZWQgdG8gc2F2ZQorCQkgKiB0aGUgeG1pbiBsaW1pdCB0 byB3YWl0IGZvciBvbGRlciBzbmFwc2hvdHMuCisJCSAqLworCQlsaW1pdFhtaW4gPSBzbmFw c2hvdC0+eG1pbjsKKwkJUG9wQWN0aXZlU25hcHNob3QoKTsKKworCQkvKiBBbmQgd2UgY2Fu IHJlbW92ZSB0aGUgdmFsaWRhdGluZyBzbmFwc2hvdCB0b28gKi8KKwkJVW5yZWdpc3RlclNu YXBzaG90KHNuYXBzaG90KTsKKworCQkvKgorCQkgKiBUaGlzIG5ldyBpbmRleCBpcyBub3cg dmFsaWQgYXMgaXQgY29udGFpbnMgYWxsIHRoZSB0dXBsZXMKKwkJICogbmVjZXNzYXJ5LiBI b3dldmVyLCBpdCBtaWdodCBub3QgaGF2ZSB0YWtlbiBpbnRvIGFjY291bnQgZGVsZXRlZAor CQkgKiB0dXBsZXMgYmVmb3JlIHRoZSByZWZlcmVuY2Ugc25hcHNob3Qgd2FzIHRha2VuLCBz byB3ZSBuZWVkIHRvIHdhaXQKKwkJICogZm9yIHRoZSB0cmFuc2FjdGlvbnMgdGhhdCBtaWdo dCBoYXZlIG9sZGVyIHNuYXBzaG90cyB0aGFuIG91cnMuCisJCSAqLworCQlXYWl0Rm9yT2xk ZXJTbmFwc2hvdHMobGltaXRYbWluKTsKKworCQkvKiBDb21taXQgdGhpcyB0cmFuc2FjdGlv biBub3cgdGhhdCB0aGUgbmV3IGluZGV4IGlzIHZhbGlkICovCisJCUNvbW1pdFRyYW5zYWN0 aW9uQ29tbWFuZCgpOworCX0KKworCS8qCisJICogUGhhc2UgNCBvZiBSRUlOREVYIENPTkNV UlJFTlRMWQorCSAqCisJICogTm93IHRoYXQgdGhlIG5ldyBpbmRleGVzIGhhdmUgYmVlbiB2 YWxpZGF0ZWQsIGl0IGlzIG5lY2Vzc2FyeSB0byBzd2FwCisJICogZWFjaCBuZXcgaW5kZXgg d2l0aCBpdHMgY29ycmVzcG9uZGluZyBvbGQgaW5kZXguCisJICoKKwkgKiBXZSBtYXJrIHRo ZSBuZXcgaW5kZXhlcyBhcyB2YWxpZCBhbmQgdGhlIG9sZCBpbmRleGVzIGRlYWQgYXQgdGhl IHNhbWUKKwkgKiB0aW1lIHRvIG1ha2Ugc3VyZSB3ZSBvbmx5IGdldCBjb25zdHJhaW50IHZp b2xhdGlvbnMgZnJvbSB0aGUgaW5kZXhlcworCSAqIHdpdGggdGhlIGNvcnJlY3QgbmFtZXMu CisJICovCisKKwlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJZm9yYm90aChsYywg aW5kZXhJZHMsIGxjMiwgbmV3SW5kZXhJZHMpCisJeworCQljaGFyCSAgICpvbGROYW1lOwor CQlPaWQJCQlpbmRPaWQgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJT2lkCQkJY29uY3VycmVudE9p ZCA9IGxmaXJzdF9vaWQobGMyKTsKKwkJT2lkCQkJcmVsT2lkOworCisJCUNIRUNLX0ZPUl9J TlRFUlJVUFRTKCk7CisKKwkJcmVsT2lkID0gSW5kZXhHZXRSZWxhdGlvbihpbmRPaWQsIGZh bHNlKTsKKworCQkvKiBDaG9vc2UgYSByZWxhdGlvbiBuYW1lIGZvciBvbGQgaW5kZXggKi8K KwkJb2xkTmFtZSA9IENob29zZVJlbGF0aW9uTmFtZShnZXRfcmVsX25hbWUoaW5kT2lkKSwK KwkJCQkJCQkJCSBOVUxMLAorCQkJCQkJCQkJICJjY29sZCIsCisJCQkJCQkJCQkgZ2V0X3Jl bF9uYW1lc3BhY2UocmVsT2lkKSwKKwkJCQkJCQkJCSBmYWxzZSk7CisKKwkJLyogU3dhcCBv bGQgaW5kZXggd2l0aCB0aGUgbmV3IG9uZSAqLworCQlpbmRleF9jb25jdXJyZW50bHlfc3dh cChjb25jdXJyZW50T2lkLCBpbmRPaWQsIG9sZE5hbWUpOworCisJCS8qCisJCSAqIEludmFs aWRhdGUgdGhlIHJlbGNhY2hlIGZvciB0aGUgdGFibGUsIHNvIHRoYXQgYWZ0ZXIgdGhpcyBj b21taXQKKwkJICogYWxsIHNlc3Npb25zIHdpbGwgcmVmcmVzaCBhbnkgY2FjaGVkIHBsYW5z IHRoYXQgbWlnaHQgcmVmZXJlbmNlIHRoZQorCQkgKiBpbmRleC4KKwkJICovCisJCUNhY2hl SW52YWxpZGF0ZVJlbGNhY2hlQnlSZWxpZChyZWxPaWQpOworCisJCS8qCisJCSAqIENDSSBo ZXJlIHNvIHRoYXQgc3Vic2VxdWVudCBpdGVyYXRpb25zIHNlZSB0aGUgb2xkTmFtZSBpbiB0 aGUKKwkJICogY2F0YWxvZyBhbmQgY2FuIGNob29zZSBhIG5vbmNvbmZsaWN0aW5nIG5hbWUg Zm9yIHRoZWlyIG9sZE5hbWUuCisJCSAqIE90aGVyd2lzZSwgdGhpcyBjb3VsZCBsZWFkIHRv IGNvbmZsaWN0cyBpZiBhIHRhYmxlIGhhcyB0d28gaW5kZXhlcworCQkgKiB3aG9zZSBuYW1l cyBhcmUgZXF1YWwgZm9yIHRoZSBmaXJzdCBOQU1FREFUQUxFTi1taW51cy1hLWZldworCQkg KiBjaGFyYWN0ZXJzLgorCQkgKi8KKwkJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKKwl9 CisKKwkvKiBDb21taXQgdGhpcyB0cmFuc2FjdGlvbiBhbmQgbWFrZSBpbmRleCBzd2FwcyB2 aXNpYmxlICovCisJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkvKgorCSAqIFBo YXNlIDUgb2YgUkVJTkRFWCBDT05DVVJSRU5UTFkKKwkgKgorCSAqIE1hcmsgdGhlIG9sZCBp bmRleGVzIGFzIGRlYWQgc28gdGhleSBjYW4gbGF0ZXIgYmUgZHJvcHBlZC4KKwkgKgorCSAq IE5vdGUgdGhhdCBpdCBpcyBuZWNlc3NhcnkgdG8gd2FpdCBmb3IgZm9yIHZpcnR1YWwgbG9j a3Mgb24gdGhlIHBhcmVudAorCSAqIHJlbGF0aW9uIGJlZm9yZSBzZXR0aW5nIHRoZSBpbmRl eCBhcyBkZWFkLgorCSAqLworCisJLyogUGVyZm9ybSBhIHdhaXQgb24gYWxsIHRoZSBzZXNz aW9uIGxvY2tzICovCisJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwlXYWl0Rm9yTG9j a2Vyc011bHRpcGxlKGxvY2tUYWdzLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKworCWZvcmVh Y2gobGMsIGluZGV4SWRzKQorCXsKKwkJT2lkCQkJaW5kT2lkID0gbGZpcnN0X29pZChsYyk7 CisJCU9pZAkJCXJlbE9pZDsKKworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCXJl bE9pZCA9IEluZGV4R2V0UmVsYXRpb24oaW5kT2lkLCBmYWxzZSk7CisKKwkJLyogRmluaXNo IHRoZSBpbmRleCBpbnZhbGlkYXRpb24gYW5kIHNldCBpdCBhcyBkZWFkLiAqLworCQlpbmRl eF9jb25jdXJyZW50bHlfc2V0X2RlYWQocmVsT2lkLCBpbmRPaWQpOworCX0KKworCS8qIENv bW1pdCB0aGlzIHRyYW5zYWN0aW9uIHRvIG1ha2UgdGhlIHVwZGF0ZXMgdmlzaWJsZS4gKi8K KwlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCS8qCisJICogUGhhc2UgNiBvZiBS RUlOREVYIENPTkNVUlJFTlRMWQorCSAqCisJICogRHJvcCB0aGUgb2xkIGluZGV4ZXMsIHdp dGggYWN0dWFsbHkgdGhlIHNhbWUgY29kZSBwYXRoIGFzIERST1AgSU5ERVgKKwkgKiBDT05D VVJSRU5UTFkuIFRoaXMgaXMgc2FmZSBhcyBhbGwgdGhlIG9sZCBlbnRyaWVzIGFyZSBhbHJl YWR5CisJICogY29uc2lkZXJlZCBhcyBpbnZhbGlkIGFuZCBub3QgcmVhZHksIHNvIHRoZXkg d2lsbCBub3QgYmUgdXNlZCBieSBvdGhlcgorCSAqIGJhY2tlbmRzIGZvciBhbnkgcmVhZCBv ciB3cml0ZSBvcGVyYXRpb25zLgorCSAqLworCisJLyogUGVyZm9ybSBhIHdhaXQgb24gYWxs IHRoZSBzZXNzaW9uIGxvY2tzICovCisJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwlX YWl0Rm9yTG9ja2Vyc011bHRpcGxlKGxvY2tUYWdzLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsK KworCS8qIEdldCBmcmVzaCBzbmFwc2hvdCBmb3IgbmV4dCBzdGVwICovCisJUHVzaEFjdGl2 ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisKKwlmb3JlYWNoKGxjLCBp bmRleElkcykKKwl7CisJCU9pZAkJCWluZE9pZCA9IGxmaXJzdF9vaWQobGMpOworCisJCUNI RUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJaW5kZXhfY29uY3VycmVudGx5X2Ryb3AoaW5k T2lkKTsKKwl9CisKKwlQb3BBY3RpdmVTbmFwc2hvdCgpOworCUNvbW1pdFRyYW5zYWN0aW9u Q29tbWFuZCgpOworCisJLyoKKwkgKiBGaW5hbGx5LCByZWxlYXNlIHRoZSBzZXNzaW9uLWxl dmVsIGxvY2sgb24gdGhlIHBhcmVudCB0YWJsZS4KKwkgKi8KKwlmb3JlYWNoKGxjLCByZWxh dGlvbkxvY2tzKQorCXsKKwkJTG9ja1JlbElkCWxvY2tSZWwgPSAqKChMb2NrUmVsSWQgKikg bGZpcnN0KGxjKSk7CisKKwkJVW5sb2NrUmVsYXRpb25JZEZvclNlc3Npb24oJmxvY2tSZWws IFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7CisJfQorCisJLyogTG9nIHdoYXQgd2UgZGlk ICovCisJaWYgKG9wdGlvbnMgJiBSRUlOREVYT1BUX1ZFUkJPU0UpCisJeworCQlpZiAocmVs a2luZCA9PSBSRUxLSU5EX0lOREVYKQorCQkJZXJlcG9ydChJTkZPLAorCQkJCQkoZXJybXNn KCJpbmRleCBcIiVzLiVzXCIgd2FzIHJlaW5kZXhlZCIsCisJCQkJCQkJcmVsYXRpb25OYW1l c3BhY2UsIHJlbGF0aW9uTmFtZSksCisJCQkJCSBlcnJkZXRhaWwoIiVzLiIsCisJCQkJCQkJ ICAgcGdfcnVzYWdlX3Nob3coJnJ1MCkpKSk7CisJCWVsc2UKKwkJCWVyZXBvcnQoSU5GTywK KwkJCQkJKGVycm1zZygidGFibGUgXCIlcy4lc1wiIHdhcyByZWluZGV4ZWQiLAorCQkJCQkJ CXJlbGF0aW9uTmFtZXNwYWNlLCByZWxhdGlvbk5hbWUpLAorCQkJCQkgZXJyZGV0YWlsKCIl cy4iLAorCQkJCQkJCSAgIHBnX3J1c2FnZV9zaG93KCZydTApKSkpOworCX0KKworCS8qIFN0 YXJ0IGEgbmV3IHRyYW5zYWN0aW9uIHRvIGZpbmlzaCBwcm9jZXNzIHByb3Blcmx5ICovCiAJ U3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIAogCU1lbW9yeUNvbnRleHREZWxldGUocHJp dmF0ZV9jb250ZXh0KTsKKworCXJldHVybiB0cnVlOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy90YWJsZWNtZHMuYwppbmRleCA1ZWQ1NjBiMDJmLi4xMDhjYjMwMGM3IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy90YWJsZWNtZHMuYwpAQCAtMTI5NSw2ICsxMjk1LDcgQEAgUmFuZ2VWYXJDYWxs YmFja0ZvckRyb3BSZWxhdGlvbihjb25zdCBSYW5nZVZhciAqcmVsLCBPaWQgcmVsT2lkLCBP aWQgb2xkUmVsT2lkLAogCWJvb2wJCWlzX3BhcnRpdGlvbjsKIAlGb3JtX3BnX2NsYXNzIGNs YXNzZm9ybTsKIAlMT0NLTU9ERQloZWFwX2xvY2ttb2RlOworCWJvb2wJCWludmFsaWRfc3lz dGVtX2luZGV4ID0gZmFsc2U7CiAKIAlzdGF0ZSA9IChzdHJ1Y3QgRHJvcFJlbGF0aW9uQ2Fs bGJhY2tTdGF0ZSAqKSBhcmc7CiAJcmVsa2luZCA9IHN0YXRlLT5yZWxraW5kOwpAQCAtMTM1 Nyw3ICsxMzU4LDM2IEBAIFJhbmdlVmFyQ2FsbGJhY2tGb3JEcm9wUmVsYXRpb24oY29uc3Qg UmFuZ2VWYXIgKnJlbCwgT2lkIHJlbE9pZCwgT2lkIG9sZFJlbE9pZCwKIAkJYWNsY2hlY2tf ZXJyb3IoQUNMQ0hFQ0tfTk9UX09XTkVSLCBnZXRfcmVsa2luZF9vYmp0eXBlKGdldF9yZWxf cmVsa2luZChyZWxPaWQpKSwKIAkJCQkJICAgcmVsLT5yZWxuYW1lKTsKIAotCWlmICghYWxs b3dTeXN0ZW1UYWJsZU1vZHMgJiYgSXNTeXN0ZW1DbGFzcyhyZWxPaWQsIGNsYXNzZm9ybSkp CisJLyoKKwkgKiBDaGVjayB0aGUgY2FzZSBvZiBhIHN5c3RlbSBpbmRleCB0aGF0IG1pZ2h0 IGhhdmUgYmVlbiBpbnZhbGlkYXRlZCBieSBhCisJICogZmFpbGVkIGNvbmN1cnJlbnQgcHJv Y2VzcyBhbmQgYWxsb3cgaXRzIGRyb3AuIEZvciB0aGUgdGltZSBiZWluZywgdGhpcworCSAq IG9ubHkgY29uY2VybnMgaW5kZXhlcyBvZiB0b2FzdCByZWxhdGlvbnMgdGhhdCBiZWNhbWUg aW52YWxpZCBkdXJpbmcgYQorCSAqIFJFSU5ERVggQ09OQ1VSUkVOVExZIHByb2Nlc3MuCisJ ICovCisJaWYgKElzU3lzdGVtQ2xhc3MocmVsT2lkLCBjbGFzc2Zvcm0pICYmIHJlbGtpbmQg PT0gUkVMS0lORF9JTkRFWCkKKwl7CisJCUhlYXBUdXBsZQkJbG9jVHVwbGU7CisJCUZvcm1f cGdfaW5kZXgJaW5kZXhmb3JtOworCQlib29sCQkJaW5kaXN2YWxpZDsKKworCQlsb2NUdXBs ZSA9IFNlYXJjaFN5c0NhY2hlMShJTkRFWFJFTElELCBPYmplY3RJZEdldERhdHVtKHJlbE9p ZCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQobG9jVHVwbGUpKQorCQl7CisJCQlSZWxl YXNlU3lzQ2FjaGUodHVwbGUpOworCQkJcmV0dXJuOworCQl9CisKKwkJaW5kZXhmb3JtID0g KEZvcm1fcGdfaW5kZXgpIEdFVFNUUlVDVChsb2NUdXBsZSk7CisJCWluZGlzdmFsaWQgPSBp bmRleGZvcm0tPmluZGlzdmFsaWQ7CisJCVJlbGVhc2VTeXNDYWNoZShsb2NUdXBsZSk7CisK KwkJLyogTWFyayBvYmplY3QgYXMgYmVpbmcgYW4gaW52YWxpZCBpbmRleCBvZiBzeXN0ZW0g Y2F0YWxvZ3MgKi8KKwkJaWYgKCFpbmRpc3ZhbGlkKQorCQkJaW52YWxpZF9zeXN0ZW1faW5k ZXggPSB0cnVlOworCX0KKworCS8qIEluIHRoZSBjYXNlIG9mIGFuIGludmFsaWQgaW5kZXgs IGl0IGlzIGZpbmUgdG8gYnlwYXNzIHRoaXMgY2hlY2sgKi8KKwlpZiAoIWludmFsaWRfc3lz dGVtX2luZGV4ICYmICFhbGxvd1N5c3RlbVRhYmxlTW9kcyAmJiBJc1N5c3RlbUNsYXNzKHJl bE9pZCwgY2xhc3Nmb3JtKSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJD T0RFX0lOU1VGRklDSUVOVF9QUklWSUxFR0UpLAogCQkJCSBlcnJtc2coInBlcm1pc3Npb24g ZGVuaWVkOiBcIiVzXCIgaXMgYSBzeXN0ZW0gY2F0YWxvZyIsCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5j cy5jCmluZGV4IGE4YTczNWMyNDcuLjljYmU4MmU2NTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL25vZGVzL2NvcHlmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5j cy5jCkBAIC00MzU3LDYgKzQzNTcsNyBAQCBfY29weVJlaW5kZXhTdG10KGNvbnN0IFJlaW5k ZXhTdG10ICpmcm9tKQogCUNPUFlfTk9ERV9GSUVMRChyZWxhdGlvbik7CiAJQ09QWV9TVFJJ TkdfRklFTEQobmFtZSk7CiAJQ09QWV9TQ0FMQVJfRklFTEQob3B0aW9ucyk7CisJQ09QWV9T Q0FMQVJfRklFTEQoY29uY3VycmVudCk7CiAKIAlyZXR1cm4gbmV3bm9kZTsKIH0KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25v ZGVzL2VxdWFsZnVuY3MuYwppbmRleCAzY2FiOTBlOWY4Li42YjgwNGQ5OTk0IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQv bm9kZXMvZXF1YWxmdW5jcy5jCkBAIC0yMTAwLDYgKzIxMDAsNyBAQCBfZXF1YWxSZWluZGV4 U3RtdChjb25zdCBSZWluZGV4U3RtdCAqYSwgY29uc3QgUmVpbmRleFN0bXQgKmIpCiAJQ09N UEFSRV9OT0RFX0ZJRUxEKHJlbGF0aW9uKTsKIAlDT01QQVJFX1NUUklOR19GSUVMRChuYW1l KTsKIAlDT01QQVJFX1NDQUxBUl9GSUVMRChvcHRpb25zKTsKKwlDT01QQVJFX1NDQUxBUl9G SUVMRChjb25jdXJyZW50KTsKIAogCXJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5k ZXggZTIzZTY4ZmRiMy4uZWQ4NjQ2OTVkYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFy c2VyL2dyYW0ueQorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CkBAIC04Mjk2LDQy ICs4Mjk2LDQ2IEBAIERyb3BUcmFuc2Zvcm1TdG10OiBEUk9QIFRSQU5TRk9STSBvcHRfaWZf ZXhpc3RzIEZPUiBUeXBlbmFtZSBMQU5HVUFHRSBuYW1lIG9wdF9kCiAgKgogICoJCVFVRVJZ OgogICoKLSAqCQlSRUlOREVYIFsgKG9wdGlvbnMpIF0gdHlwZSA8bmFtZT4KKyAqCQlSRUlO REVYIFsgKG9wdGlvbnMpIF0gdHlwZSBbQ09OQ1VSUkVOVExZXSA8bmFtZT4KICAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KIAogUmVpbmRleFN0bXQ6Ci0JCQlSRUlOREVYIHJlaW5kZXhf dGFyZ2V0X3R5cGUgcXVhbGlmaWVkX25hbWUKKwkJCVJFSU5ERVggcmVpbmRleF90YXJnZXRf dHlwZSBvcHRfY29uY3VycmVudGx5IHF1YWxpZmllZF9uYW1lCiAJCQkJewogCQkJCQlSZWlu ZGV4U3RtdCAqbiA9IG1ha2VOb2RlKFJlaW5kZXhTdG10KTsKIAkJCQkJbi0+a2luZCA9ICQy OwotCQkJCQluLT5yZWxhdGlvbiA9ICQzOworCQkJCQluLT5jb25jdXJyZW50ID0gJDM7CisJ CQkJCW4tPnJlbGF0aW9uID0gJDQ7CiAJCQkJCW4tPm5hbWUgPSBOVUxMOwogCQkJCQluLT5v cHRpb25zID0gMDsKIAkJCQkJJCQgPSAoTm9kZSAqKW47CiAJCQkJfQotCQkJfCBSRUlOREVY IHJlaW5kZXhfdGFyZ2V0X211bHRpdGFibGUgbmFtZQorCQkJfCBSRUlOREVYIHJlaW5kZXhf dGFyZ2V0X211bHRpdGFibGUgb3B0X2NvbmN1cnJlbnRseSBuYW1lCiAJCQkJewogCQkJCQlS ZWluZGV4U3RtdCAqbiA9IG1ha2VOb2RlKFJlaW5kZXhTdG10KTsKIAkJCQkJbi0+a2luZCA9 ICQyOwotCQkJCQluLT5uYW1lID0gJDM7CisJCQkJCW4tPmNvbmN1cnJlbnQgPSAkMzsKKwkJ CQkJbi0+bmFtZSA9ICQ0OwogCQkJCQluLT5yZWxhdGlvbiA9IE5VTEw7CiAJCQkJCW4tPm9w dGlvbnMgPSAwOwogCQkJCQkkJCA9IChOb2RlICopbjsKIAkJCQl9Ci0JCQl8IFJFSU5ERVgg JygnIHJlaW5kZXhfb3B0aW9uX2xpc3QgJyknIHJlaW5kZXhfdGFyZ2V0X3R5cGUgcXVhbGlm aWVkX25hbWUKKwkJCXwgUkVJTkRFWCAnKCcgcmVpbmRleF9vcHRpb25fbGlzdCAnKScgcmVp bmRleF90YXJnZXRfdHlwZSBvcHRfY29uY3VycmVudGx5IHF1YWxpZmllZF9uYW1lCiAJCQkJ ewogCQkJCQlSZWluZGV4U3RtdCAqbiA9IG1ha2VOb2RlKFJlaW5kZXhTdG10KTsKIAkJCQkJ bi0+a2luZCA9ICQ1OwotCQkJCQluLT5yZWxhdGlvbiA9ICQ2OworCQkJCQluLT5jb25jdXJy ZW50ID0gJDY7CisJCQkJCW4tPnJlbGF0aW9uID0gJDc7CiAJCQkJCW4tPm5hbWUgPSBOVUxM OwogCQkJCQluLT5vcHRpb25zID0gJDM7CiAJCQkJCSQkID0gKE5vZGUgKiluOwogCQkJCX0K LQkJCXwgUkVJTkRFWCAnKCcgcmVpbmRleF9vcHRpb25fbGlzdCAnKScgcmVpbmRleF90YXJn ZXRfbXVsdGl0YWJsZSBuYW1lCisJCQl8IFJFSU5ERVggJygnIHJlaW5kZXhfb3B0aW9uX2xp c3QgJyknIHJlaW5kZXhfdGFyZ2V0X211bHRpdGFibGUgb3B0X2NvbmN1cnJlbnRseSBuYW1l CiAJCQkJewogCQkJCQlSZWluZGV4U3RtdCAqbiA9IG1ha2VOb2RlKFJlaW5kZXhTdG10KTsK IAkJCQkJbi0+a2luZCA9ICQ1OwotCQkJCQluLT5uYW1lID0gJDY7CisJCQkJCW4tPmNvbmN1 cnJlbnQgPSAkNjsKKwkJCQkJbi0+bmFtZSA9ICQ3OwogCQkJCQluLT5yZWxhdGlvbiA9IE5V TEw7CiAJCQkJCW4tPm9wdGlvbnMgPSAkMzsKIAkJCQkJJCQgPSAoTm9kZSAqKW47CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYyBiL3NyYy9iYWNrZW5kL3Rjb3Av dXRpbGl0eS5jCmluZGV4IDZlYzc5NWYxYjQuLjlmOGY2MmI1ZGUgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0 eS5jCkBAIC03NzQsMTYgKzc3NCwyMCBAQCBzdGFuZGFyZF9Qcm9jZXNzVXRpbGl0eShQbGFu bmVkU3RtdCAqcHN0bXQsCiAJCQl7CiAJCQkJUmVpbmRleFN0bXQgKnN0bXQgPSAoUmVpbmRl eFN0bXQgKikgcGFyc2V0cmVlOwogCisJCQkJaWYgKHN0bXQtPmNvbmN1cnJlbnQpCisJCQkJ CVByZXZlbnRJblRyYW5zYWN0aW9uQmxvY2soaXNUb3BMZXZlbCwKKwkJCQkJCQkJCQkJICAi UkVJTkRFWCBDT05DVVJSRU5UTFkiKTsKKwogCQkJCS8qIHdlIGNob29zZSB0byBhbGxvdyB0 aGlzIGR1cmluZyAicmVhZCBvbmx5IiB0cmFuc2FjdGlvbnMgKi8KIAkJCQlQcmV2ZW50Q29t bWFuZER1cmluZ1JlY292ZXJ5KCJSRUlOREVYIik7CiAJCQkJLyogZm9yYmlkZGVuIGluIHBh cmFsbGVsIG1vZGUgZHVlIHRvIENvbW1hbmRJc1JlYWRPbmx5ICovCiAJCQkJc3dpdGNoIChz dG10LT5raW5kKQogCQkJCXsKIAkJCQkJY2FzZSBSRUlOREVYX09CSkVDVF9JTkRFWDoKLQkJ CQkJCVJlaW5kZXhJbmRleChzdG10LT5yZWxhdGlvbiwgc3RtdC0+b3B0aW9ucyk7CisJCQkJ CQlSZWluZGV4SW5kZXgoc3RtdC0+cmVsYXRpb24sIHN0bXQtPm9wdGlvbnMsIHN0bXQtPmNv bmN1cnJlbnQpOwogCQkJCQkJYnJlYWs7CiAJCQkJCWNhc2UgUkVJTkRFWF9PQkpFQ1RfVEFC TEU6Ci0JCQkJCQlSZWluZGV4VGFibGUoc3RtdC0+cmVsYXRpb24sIHN0bXQtPm9wdGlvbnMp OworCQkJCQkJUmVpbmRleFRhYmxlKHN0bXQtPnJlbGF0aW9uLCBzdG10LT5vcHRpb25zLCBz dG10LT5jb25jdXJyZW50KTsKIAkJCQkJCWJyZWFrOwogCQkJCQljYXNlIFJFSU5ERVhfT0JK RUNUX1NDSEVNQToKIAkJCQkJY2FzZSBSRUlOREVYX09CSkVDVF9TWVNURU06CkBAIC03OTks NyArODAzLDcgQEAgc3RhbmRhcmRfUHJvY2Vzc1V0aWxpdHkoUGxhbm5lZFN0bXQgKnBzdG10 LAogCQkJCQkJCQkJCQkJICAoc3RtdC0+a2luZCA9PSBSRUlOREVYX09CSkVDVF9TQ0hFTUEp ID8gIlJFSU5ERVggU0NIRU1BIiA6CiAJCQkJCQkJCQkJCQkgIChzdG10LT5raW5kID09IFJF SU5ERVhfT0JKRUNUX1NZU1RFTSkgPyAiUkVJTkRFWCBTWVNURU0iIDoKIAkJCQkJCQkJCQkJ CSAgIlJFSU5ERVggREFUQUJBU0UiKTsKLQkJCQkJCVJlaW5kZXhNdWx0aXBsZVRhYmxlcyhz dG10LT5uYW1lLCBzdG10LT5raW5kLCBzdG10LT5vcHRpb25zKTsKKwkJCQkJCVJlaW5kZXhN dWx0aXBsZVRhYmxlcyhzdG10LT5uYW1lLCBzdG10LT5raW5kLCBzdG10LT5vcHRpb25zLCBz dG10LT5jb25jdXJyZW50KTsKIAkJCQkJCWJyZWFrOwogCQkJCQlkZWZhdWx0OgogCQkJCQkJ ZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBvYmplY3QgdHlwZTogJWQiLApkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wc3FsL2NvbW1vbi5jIGIvc3JjL2Jpbi9wc3FsL2NvbW1vbi5jCmluZGV4 IDVkODYzNGQ4MTguLjgyNTExZTM0YWMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9jb21t b24uYworKysgYi9zcmMvYmluL3BzcWwvY29tbW9uLmMKQEAgLTIxOTIsNiArMjE5MiwyMiBA QCBjb21tYW5kX25vX2JlZ2luKGNvbnN0IGNoYXIgKnF1ZXJ5KQogCQkJcmV0dXJuIHRydWU7 CiAJCWlmICh3b3JkbGVuID09IDEwICYmIHBnX3N0cm5jYXNlY21wKHF1ZXJ5LCAidGFibGVz cGFjZSIsIDEwKSA9PSAwKQogCQkJcmV0dXJuIHRydWU7CisJCWlmICh3b3JkbGVuID09IDUg JiYgKHBnX3N0cm5jYXNlY21wKHF1ZXJ5LCAiaW5kZXgiLCA1KSA9PSAwIHx8CisJCQkJCQkJ IHBnX3N0cm5jYXNlY21wKHF1ZXJ5LCAidGFibGUiLCA1KSA9PSAwKSkKKwkJeworCQkJcXVl cnkgKz0gd29yZGxlbjsKKwkJCXF1ZXJ5ID0gc2tpcF93aGl0ZV9zcGFjZShxdWVyeSk7CisJ CQl3b3JkbGVuID0gMDsKKwkJCXdoaWxlIChpc2FscGhhKCh1bnNpZ25lZCBjaGFyKSBxdWVy eVt3b3JkbGVuXSkpCisJCQkJd29yZGxlbiArPSBQUW1ibGVuKCZxdWVyeVt3b3JkbGVuXSwg cHNldC5lbmNvZGluZyk7CisKKwkJCS8qCisJCQkgKiBSRUlOREVYIFsgVEFCTEUgfCBJTkRF WCBdIENPTkNVUlJFTlRMWSBhcmUgbm90IGFsbG93ZWQgaW4KKwkJCSAqIHhhY3RzLgorCQkJ ICovCisJCQlpZiAod29yZGxlbiA9PSAxMiAmJiBwZ19zdHJuY2FzZWNtcChxdWVyeSwgImNv bmN1cnJlbnRseSIsIDEyKSA9PSAwKQorCQkJCXJldHVybiB0cnVlOworCQl9CiAKIAkJLyog RFJPUCBJTkRFWCBDT05DVVJSRU5UTFkgaXNuJ3QgYWxsb3dlZCBpbiB4YWN0cyAqLwogCQlp ZiAod29yZGxlbiA9PSA1ICYmIHBnX3N0cm5jYXNlY21wKHF1ZXJ5LCAiaW5kZXgiLCA1KSA9 PSAwKQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jIGIvc3JjL2Jp bi9wc3FsL3RhYi1jb21wbGV0ZS5jCmluZGV4IDEwYWUyMWNjNjEuLjAzNzNiMzhlY2UgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYworKysgYi9zcmMvYmluL3Bz cWwvdGFiLWNvbXBsZXRlLmMKQEAgLTMyMTEsMTIgKzMyMTEsMjQgQEAgcHNxbF9jb21wbGV0 aW9uKGNvbnN0IGNoYXIgKnRleHQsIGludCBzdGFydCwgaW50IGVuZCkKIAllbHNlIGlmIChN YXRjaGVzKCJSRUlOREVYIikpCiAJCUNPTVBMRVRFX1dJVEgoIlRBQkxFIiwgIklOREVYIiwg IlNZU1RFTSIsICJTQ0hFTUEiLCAiREFUQUJBU0UiKTsKIAllbHNlIGlmIChNYXRjaGVzKCJS RUlOREVYIiwgIlRBQkxFIikpCi0JCUNPTVBMRVRFX1dJVEhfU0NIRU1BX1FVRVJZKFF1ZXJ5 X2Zvcl9saXN0X29mX2luZGV4YWJsZXMsIE5VTEwpOworCQlDT01QTEVURV9XSVRIX1NDSEVN QV9RVUVSWShRdWVyeV9mb3JfbGlzdF9vZl9pbmRleGFibGVzLAorCQkJCQkJCQkgICAiIFVO SU9OIFNFTEVDVCAnQ09OQ1VSUkVOVExZJyIpOwogCWVsc2UgaWYgKE1hdGNoZXMoIlJFSU5E RVgiLCAiSU5ERVgiKSkKLQkJQ09NUExFVEVfV0lUSF9TQ0hFTUFfUVVFUlkoUXVlcnlfZm9y X2xpc3Rfb2ZfaW5kZXhlcywgTlVMTCk7CisJCUNPTVBMRVRFX1dJVEhfU0NIRU1BX1FVRVJZ KFF1ZXJ5X2Zvcl9saXN0X29mX2luZGV4ZXMsCisJCQkJCQkJCSAgICIgVU5JT04gU0VMRUNU ICdDT05DVVJSRU5UTFknIik7CiAJZWxzZSBpZiAoTWF0Y2hlcygiUkVJTkRFWCIsICJTQ0hF TUEiKSkKLQkJQ09NUExFVEVfV0lUSF9RVUVSWShRdWVyeV9mb3JfbGlzdF9vZl9zY2hlbWFz KTsKKwkJQ09NUExFVEVfV0lUSF9RVUVSWShRdWVyeV9mb3JfbGlzdF9vZl9zY2hlbWFzCisJ CQkJCQkJIiBVTklPTiBTRUxFQ1QgJ0NPTkNVUlJFTlRMWSciKTsKIAllbHNlIGlmIChNYXRj aGVzKCJSRUlOREVYIiwgIlNZU1RFTXxEQVRBQkFTRSIpKQorCQlDT01QTEVURV9XSVRIX1FV RVJZKFF1ZXJ5X2Zvcl9saXN0X29mX2RhdGFiYXNlcworCQkJCQkJCSIgVU5JT04gU0VMRUNU ICdDT05DVVJSRU5UTFknIik7CisJZWxzZSBpZiAoTWF0Y2hlcygiUkVJTkRFWCIsICJUQUJM RSIsICJDT05DVVJSRU5UTFkiKSkKKwkJQ09NUExFVEVfV0lUSF9TQ0hFTUFfUVVFUlkoUXVl cnlfZm9yX2xpc3Rfb2ZfaW5kZXhhYmxlcywgTlVMTCk7CisJZWxzZSBpZiAoTWF0Y2hlcygi UkVJTkRFWCIsICJJTkRFWCIsICJDT05DVVJSRU5UTFkiKSkKKwkJQ09NUExFVEVfV0lUSF9T Q0hFTUFfUVVFUlkoUXVlcnlfZm9yX2xpc3Rfb2ZfaW5kZXhlcywgTlVMTCk7CisJZWxzZSBp ZiAoTWF0Y2hlcygiUkVJTkRFWCIsICJTQ0hFTUEiLCAiQ09OQ1VSUkVOVExZIikpCisJCUNP TVBMRVRFX1dJVEhfUVVFUlkoUXVlcnlfZm9yX2xpc3Rfb2Zfc2NoZW1hcyk7CisJZWxzZSBp ZiAoTWF0Y2hlcygiUkVJTkRFWCIsICJTWVNURU18REFUQUJBU0UiLCAiQ09OQ1VSUkVOVExZ IikpCiAJCUNPTVBMRVRFX1dJVEhfUVVFUlkoUXVlcnlfZm9yX2xpc3Rfb2ZfZGF0YWJhc2Vz KTsKIAogLyogU0VDVVJJVFkgTEFCRUwgKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vc2NyaXB0 cy9yZWluZGV4ZGIuYyBiL3NyYy9iaW4vc2NyaXB0cy9yZWluZGV4ZGIuYwppbmRleCAxY2Qx Y2NjOTUxLi5kODhkOTBkOWZlIDEwMDY0NAotLS0gYS9zcmMvYmluL3NjcmlwdHMvcmVpbmRl eGRiLmMKKysrIGIvc3JjL2Jpbi9zY3JpcHRzL3JlaW5kZXhkYi5jCkBAIC0xOSwxNiArMTks MTcgQEAgc3RhdGljIHZvaWQgcmVpbmRleF9vbmVfZGF0YWJhc2UoY29uc3QgY2hhciAqbmFt ZSwgY29uc3QgY2hhciAqZGJuYW1lLAogCQkJCQkgY29uc3QgY2hhciAqdHlwZSwgY29uc3Qg Y2hhciAqaG9zdCwKIAkJCQkJIGNvbnN0IGNoYXIgKnBvcnQsIGNvbnN0IGNoYXIgKnVzZXJu YW1lLAogCQkJCQkgZW51bSB0cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQsIGNvbnN0IGNoYXIg KnByb2duYW1lLAotCQkJCQkgYm9vbCBlY2hvLCBib29sIHZlcmJvc2UpOworCQkJCQkgYm9v bCBlY2hvLCBib29sIHZlcmJvc2UsIGJvb2wgY29uY3VycmVudGx5KTsKIHN0YXRpYyB2b2lk IHJlaW5kZXhfYWxsX2RhdGFiYXNlcyhjb25zdCBjaGFyICptYWludGVuYW5jZV9kYiwKIAkJ CQkJICBjb25zdCBjaGFyICpob3N0LCBjb25zdCBjaGFyICpwb3J0LAogCQkJCQkgIGNvbnN0 IGNoYXIgKnVzZXJuYW1lLCBlbnVtIHRyaXZhbHVlIHByb21wdF9wYXNzd29yZCwKIAkJCQkJ ICBjb25zdCBjaGFyICpwcm9nbmFtZSwgYm9vbCBlY2hvLAotCQkJCQkgIGJvb2wgcXVpZXQs IGJvb2wgdmVyYm9zZSk7CisJCQkJCSAgYm9vbCBxdWlldCwgYm9vbCB2ZXJib3NlLCBib29s IGNvbmN1cnJlbnRseSk7CiBzdGF0aWMgdm9pZCByZWluZGV4X3N5c3RlbV9jYXRhbG9ncyhj b25zdCBjaGFyICpkYm5hbWUsCiAJCQkJCQljb25zdCBjaGFyICpob3N0LCBjb25zdCBjaGFy ICpwb3J0LAogCQkJCQkJY29uc3QgY2hhciAqdXNlcm5hbWUsIGVudW0gdHJpdmFsdWUgcHJv bXB0X3Bhc3N3b3JkLAotCQkJCQkJY29uc3QgY2hhciAqcHJvZ25hbWUsIGJvb2wgZWNobywg Ym9vbCB2ZXJib3NlKTsKKwkJCQkJCWNvbnN0IGNoYXIgKnByb2duYW1lLCBib29sIGVjaG8s IGJvb2wgdmVyYm9zZSwKKwkJCQkJCWJvb2wgY29uY3VycmVudGx5KTsKIHN0YXRpYyB2b2lk IGhlbHAoY29uc3QgY2hhciAqcHJvZ25hbWUpOwogCiBpbnQKQEAgLTQ5LDYgKzUwLDcgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQl7InRhYmxlIiwgcmVxdWlyZWRfYXJn dW1lbnQsIE5VTEwsICd0J30sCiAJCXsiaW5kZXgiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVM TCwgJ2knfSwKIAkJeyJ2ZXJib3NlIiwgbm9fYXJndW1lbnQsIE5VTEwsICd2J30sCisJCXsi Y29uY3VycmVudGx5Iiwgbm9fYXJndW1lbnQsIE5VTEwsIDF9LAogCQl7Im1haW50ZW5hbmNl LWRiIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDJ9LAogCQl7TlVMTCwgMCwgTlVMTCwg MH0KIAl9OwpAQCAtNjgsNiArNzAsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p CiAJYm9vbAkJZWNobyA9IGZhbHNlOwogCWJvb2wJCXF1aWV0ID0gZmFsc2U7CiAJYm9vbAkJ dmVyYm9zZSA9IGZhbHNlOworCWJvb2wJCWNvbmN1cnJlbnRseSA9IGZhbHNlOwogCVNpbXBs ZVN0cmluZ0xpc3QgaW5kZXhlcyA9IHtOVUxMLCBOVUxMfTsKIAlTaW1wbGVTdHJpbmdMaXN0 IHRhYmxlcyA9IHtOVUxMLCBOVUxMfTsKIAlTaW1wbGVTdHJpbmdMaXN0IHNjaGVtYXMgPSB7 TlVMTCwgTlVMTH07CkBAIC0xMjQsNiArMTI3LDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQogCQkJY2FzZSAndic6CiAJCQkJdmVyYm9zZSA9IHRydWU7CiAJCQkJYnJlYWs7 CisJCQljYXNlIDE6CisJCQkJY29uY3VycmVudGx5ID0gdHJ1ZTsKKwkJCQlicmVhazsKIAkJ CWNhc2UgMjoKIAkJCQltYWludGVuYW5jZV9kYiA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJ CWJyZWFrOwpAQCAtMTgyLDcgKzE4OCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKIAkJfQogCiAJCXJlaW5kZXhfYWxsX2RhdGFiYXNlcyhtYWludGVuYW5jZV9kYiwgaG9z dCwgcG9ydCwgdXNlcm5hbWUsCi0JCQkJCQkJICBwcm9tcHRfcGFzc3dvcmQsIHByb2duYW1l LCBlY2hvLCBxdWlldCwgdmVyYm9zZSk7CisJCQkJCQkJICBwcm9tcHRfcGFzc3dvcmQsIHBy b2duYW1lLCBlY2hvLCBxdWlldCwgdmVyYm9zZSwgY29uY3VycmVudGx5KTsKIAl9CiAJZWxz ZSBpZiAoc3lzY2F0YWxvZykKIAl7CkBAIC0yMTMsNyArMjE5LDcgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQogCQl9CiAKIAkJcmVpbmRleF9zeXN0ZW1fY2F0YWxvZ3MoZGJu YW1lLCBob3N0LCBwb3J0LCB1c2VybmFtZSwgcHJvbXB0X3Bhc3N3b3JkLAotCQkJCQkJCQlw cm9nbmFtZSwgZWNobywgdmVyYm9zZSk7CisJCQkJCQkJCXByb2duYW1lLCBlY2hvLCB2ZXJi b3NlLCBjb25jdXJyZW50bHkpOwogCX0KIAllbHNlCiAJewpAQCAtMjM0LDcgKzI0MCw3IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCWZvciAoY2VsbCA9IHNjaGVtYXMu aGVhZDsgY2VsbDsgY2VsbCA9IGNlbGwtPm5leHQpCiAJCQl7CiAJCQkJcmVpbmRleF9vbmVf ZGF0YWJhc2UoY2VsbC0+dmFsLCBkYm5hbWUsICJTQ0hFTUEiLCBob3N0LCBwb3J0LAotCQkJ CQkJCQkJIHVzZXJuYW1lLCBwcm9tcHRfcGFzc3dvcmQsIHByb2duYW1lLCBlY2hvLCB2ZXJi b3NlKTsKKwkJCQkJCQkJCSB1c2VybmFtZSwgcHJvbXB0X3Bhc3N3b3JkLCBwcm9nbmFtZSwg ZWNobywgdmVyYm9zZSwgY29uY3VycmVudGx5KTsKIAkJCX0KIAkJfQogCkBAIC0yNDUsNyAr MjUxLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJZm9yIChjZWxsID0g aW5kZXhlcy5oZWFkOyBjZWxsOyBjZWxsID0gY2VsbC0+bmV4dCkKIAkJCXsKIAkJCQlyZWlu ZGV4X29uZV9kYXRhYmFzZShjZWxsLT52YWwsIGRibmFtZSwgIklOREVYIiwgaG9zdCwgcG9y dCwKLQkJCQkJCQkJCSB1c2VybmFtZSwgcHJvbXB0X3Bhc3N3b3JkLCBwcm9nbmFtZSwgZWNo bywgdmVyYm9zZSk7CisJCQkJCQkJCQkgdXNlcm5hbWUsIHByb21wdF9wYXNzd29yZCwgcHJv Z25hbWUsIGVjaG8sIHZlcmJvc2UsIGNvbmN1cnJlbnRseSk7CiAJCQl9CiAJCX0KIAkJaWYg KHRhYmxlcy5oZWFkICE9IE5VTEwpCkBAIC0yNTUsNyArMjYxLDcgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQogCQkJZm9yIChjZWxsID0gdGFibGVzLmhlYWQ7IGNlbGw7IGNl bGwgPSBjZWxsLT5uZXh0KQogCQkJewogCQkJCXJlaW5kZXhfb25lX2RhdGFiYXNlKGNlbGwt PnZhbCwgZGJuYW1lLCAiVEFCTEUiLCBob3N0LCBwb3J0LAotCQkJCQkJCQkJIHVzZXJuYW1l LCBwcm9tcHRfcGFzc3dvcmQsIHByb2duYW1lLCBlY2hvLCB2ZXJib3NlKTsKKwkJCQkJCQkJ CSB1c2VybmFtZSwgcHJvbXB0X3Bhc3N3b3JkLCBwcm9nbmFtZSwgZWNobywgdmVyYm9zZSwg Y29uY3VycmVudGx5KTsKIAkJCX0KIAkJfQogCkBAIC0yNjUsNyArMjcxLDcgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQogCQkgKi8KIAkJaWYgKGluZGV4ZXMuaGVhZCA9PSBO VUxMICYmIHRhYmxlcy5oZWFkID09IE5VTEwgJiYgc2NoZW1hcy5oZWFkID09IE5VTEwpCiAJ CQlyZWluZGV4X29uZV9kYXRhYmFzZShOVUxMLCBkYm5hbWUsICJEQVRBQkFTRSIsIGhvc3Qs IHBvcnQsCi0JCQkJCQkJCSB1c2VybmFtZSwgcHJvbXB0X3Bhc3N3b3JkLCBwcm9nbmFtZSwg ZWNobywgdmVyYm9zZSk7CisJCQkJCQkJCSB1c2VybmFtZSwgcHJvbXB0X3Bhc3N3b3JkLCBw cm9nbmFtZSwgZWNobywgdmVyYm9zZSwgY29uY3VycmVudGx5KTsKIAl9CiAKIAlleGl0KDAp OwpAQCAtMjc1LDcgKzI4MSw3IEBAIHN0YXRpYyB2b2lkCiByZWluZGV4X29uZV9kYXRhYmFz ZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKnR5 cGUsCiAJCQkJCSBjb25zdCBjaGFyICpob3N0LCBjb25zdCBjaGFyICpwb3J0LCBjb25zdCBj aGFyICp1c2VybmFtZSwKIAkJCQkJIGVudW0gdHJpdmFsdWUgcHJvbXB0X3Bhc3N3b3JkLCBj b25zdCBjaGFyICpwcm9nbmFtZSwgYm9vbCBlY2hvLAotCQkJCQkgYm9vbCB2ZXJib3NlKQor CQkJCQkgYm9vbCB2ZXJib3NlLCBib29sIGNvbmN1cnJlbnRseSkKIHsKIAlQUUV4cEJ1ZmZl ckRhdGEgc3FsOwogCkBAIC0yOTMsNiArMjk5LDggQEAgcmVpbmRleF9vbmVfZGF0YWJhc2Uo Y29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICp0eXBl LAogCiAJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJnNxbCwgdHlwZSk7CiAJYXBwZW5kUFFFeHBC dWZmZXJDaGFyKCZzcWwsICcgJyk7CisJaWYgKGNvbmN1cnJlbnRseSkKKwkJYXBwZW5kUFFF eHBCdWZmZXJTdHIoJnNxbCwgIkNPTkNVUlJFTlRMWSAiKTsKIAlpZiAoc3RyY21wKHR5cGUs ICJUQUJMRSIpID09IDAgfHwKIAkJc3RyY21wKHR5cGUsICJJTkRFWCIpID09IDApCiAJCWFw cGVuZFF1YWxpZmllZFJlbGF0aW9uKCZzcWwsIG5hbWUsIGNvbm4sIHByb2duYW1lLCBlY2hv KTsKQEAgLTMyOCw3ICszMzYsOCBAQCBzdGF0aWMgdm9pZAogcmVpbmRleF9hbGxfZGF0YWJh c2VzKGNvbnN0IGNoYXIgKm1haW50ZW5hbmNlX2RiLAogCQkJCQkgIGNvbnN0IGNoYXIgKmhv c3QsIGNvbnN0IGNoYXIgKnBvcnQsCiAJCQkJCSAgY29uc3QgY2hhciAqdXNlcm5hbWUsIGVu dW0gdHJpdmFsdWUgcHJvbXB0X3Bhc3N3b3JkLAotCQkJCQkgIGNvbnN0IGNoYXIgKnByb2du YW1lLCBib29sIGVjaG8sIGJvb2wgcXVpZXQsIGJvb2wgdmVyYm9zZSkKKwkJCQkJICBjb25z dCBjaGFyICpwcm9nbmFtZSwgYm9vbCBlY2hvLCBib29sIHF1aWV0LCBib29sIHZlcmJvc2Us CisJCQkJCSAgYm9vbCBjb25jdXJyZW50bHkpCiB7CiAJUEdjb25uCSAgICpjb25uOwogCVBH cmVzdWx0ICAgKnJlc3VsdDsKQEAgLTM1Nyw3ICszNjYsNyBAQCByZWluZGV4X2FsbF9kYXRh YmFzZXMoY29uc3QgY2hhciAqbWFpbnRlbmFuY2VfZGIsCiAKIAkJcmVpbmRleF9vbmVfZGF0 YWJhc2UoTlVMTCwgY29ubnN0ci5kYXRhLCAiREFUQUJBU0UiLCBob3N0LAogCQkJCQkJCSBw b3J0LCB1c2VybmFtZSwgcHJvbXB0X3Bhc3N3b3JkLAotCQkJCQkJCSBwcm9nbmFtZSwgZWNo bywgdmVyYm9zZSk7CisJCQkJCQkJIHByb2duYW1lLCBlY2hvLCB2ZXJib3NlLCBjb25jdXJy ZW50bHkpOwogCX0KIAl0ZXJtUFFFeHBCdWZmZXIoJmNvbm5zdHIpOwogCkBAIC0zNjcsNyAr Mzc2LDcgQEAgcmVpbmRleF9hbGxfZGF0YWJhc2VzKGNvbnN0IGNoYXIgKm1haW50ZW5hbmNl X2RiLAogc3RhdGljIHZvaWQKIHJlaW5kZXhfc3lzdGVtX2NhdGFsb2dzKGNvbnN0IGNoYXIg KmRibmFtZSwgY29uc3QgY2hhciAqaG9zdCwgY29uc3QgY2hhciAqcG9ydCwKIAkJCQkJCWNv bnN0IGNoYXIgKnVzZXJuYW1lLCBlbnVtIHRyaXZhbHVlIHByb21wdF9wYXNzd29yZCwKLQkJ CQkJCWNvbnN0IGNoYXIgKnByb2duYW1lLCBib29sIGVjaG8sIGJvb2wgdmVyYm9zZSkKKwkJ CQkJCWNvbnN0IGNoYXIgKnByb2duYW1lLCBib29sIGVjaG8sIGJvb2wgdmVyYm9zZSwgYm9v bCBjb25jdXJyZW50bHkpCiB7CiAJUEdjb25uCSAgICpjb25uOwogCVBRRXhwQnVmZmVyRGF0 YSBzcWw7CkBAIC0zODIsNyArMzkxLDExIEBAIHJlaW5kZXhfc3lzdGVtX2NhdGFsb2dzKGNv bnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqaG9zdCwgY29uc3QgY2hhciAqcG9ydCwK IAlpZiAodmVyYm9zZSkKIAkJYXBwZW5kUFFFeHBCdWZmZXIoJnNxbCwgIiAoVkVSQk9TRSki KTsKIAotCWFwcGVuZFBRRXhwQnVmZmVyKCZzcWwsICIgU1lTVEVNICVzOyIsIGZtdElkKFBR ZGIoY29ubikpKTsKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmc3FsLCAiIFNZU1RFTSAiKTsK KwlpZiAoY29uY3VycmVudGx5KQorCQlhcHBlbmRQUUV4cEJ1ZmZlcigmc3FsLCAiQ09OQ1VS UkVOVExZICIpOworCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZzcWwsIGZtdElkKFBRZGIoY29u bikpKTsKKwlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIoJnNxbCwgJzsnKTsKIAogCWlmICghZXhl Y3V0ZU1haW50ZW5hbmNlQ29tbWFuZChjb25uLCBzcWwuZGF0YSwgZWNobykpCiAJewpAQCAt NDAzLDYgKzQxNiw3IEBAIGhlbHAoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKF8o IiAgJXMgW09QVElPTl0uLi4gW0RCTkFNRV1cbiIpLCBwcm9nbmFtZSk7CiAJcHJpbnRmKF8o IlxuT3B0aW9uczpcbiIpKTsKIAlwcmludGYoXygiICAtYSwgLS1hbGwgICAgICAgICAgICAg ICAgIHJlaW5kZXggYWxsIGRhdGFiYXNlc1xuIikpOworCXByaW50ZihfKCIgICAgICAtLWNv bmN1cnJlbnRseSAgICAgICAgcmVpbmRleCBjb25jdXJyZW50bHlcbiIpKTsKIAlwcmludGYo XygiICAtZCwgLS1kYm5hbWU9REJOQU1FICAgICAgIGRhdGFiYXNlIHRvIHJlaW5kZXhcbiIp KTsKIAlwcmludGYoXygiICAtZSwgLS1lY2hvICAgICAgICAgICAgICAgIHNob3cgdGhlIGNv bW1hbmRzIGJlaW5nIHNlbnQgdG8gdGhlIHNlcnZlclxuIikpOwogCXByaW50ZihfKCIgIC1p LCAtLWluZGV4PUlOREVYICAgICAgICAgcmVjcmVhdGUgc3BlY2lmaWMgaW5kZXgoZXMpIG9u bHlcbiIpKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vc2NyaXB0cy90LzA5MF9yZWluZGV4ZGIu cGwgYi9zcmMvYmluL3NjcmlwdHMvdC8wOTBfcmVpbmRleGRiLnBsCmluZGV4IGU1N2E1ZTJi YWQuLmE2YmQwMzVmMDEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vc2NyaXB0cy90LzA5MF9yZWlu ZGV4ZGIucGwKKysrIGIvc3JjL2Jpbi9zY3JpcHRzL3QvMDkwX3JlaW5kZXhkYi5wbApAQCAt Myw3ICszLDcgQEAKIAogdXNlIFBvc3RncmVzTm9kZTsKIHVzZSBUZXN0TGliOwotdXNlIFRl c3Q6Ok1vcmUgdGVzdHMgPT4gMjM7Cit1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiAzNTsKIAog cHJvZ3JhbV9oZWxwX29rKCdyZWluZGV4ZGInKTsKIHByb2dyYW1fdmVyc2lvbl9vaygncmVp bmRleGRiJyk7CkBAIC00Myw2ICs0MywzNCBAQAogCXFyL3N0YXRlbWVudDogUkVJTkRFWCBc KFZFUkJPU0VcKSBUQUJMRSBwdWJsaWNcLnRlc3QxOy8sCiAJJ3JlaW5kZXggd2l0aCB2ZXJi b3NlIG91dHB1dCcpOwogCisjIHRoZSBzYW1lIHdpdGggLS1jb25jdXJyZW50bHkKKyRub2Rl LT5pc3N1ZXNfc3FsX2xpa2UoCisJWyAncmVpbmRleGRiJywgJy0tY29uY3VycmVudGx5Jywg J3Bvc3RncmVzJyBdLAorCXFyL3N0YXRlbWVudDogUkVJTkRFWCBEQVRBQkFTRSBDT05DVVJS RU5UTFkgcG9zdGdyZXM7LywKKwknU1FMIFJFSU5ERVggQ09OQ1VSUkVOVExZIHJ1bicpOwor Ciskbm9kZS0+aXNzdWVzX3NxbF9saWtlKAorCVsgJ3JlaW5kZXhkYicsICctLWNvbmN1cnJl bnRseScsICctdCcsICd0ZXN0MScsICdwb3N0Z3JlcycgXSwKKwlxci9zdGF0ZW1lbnQ6IFJF SU5ERVggVEFCTEUgQ09OQ1VSUkVOVExZIHB1YmxpY1wudGVzdDE7LywKKwkncmVpbmRleCBz cGVjaWZpYyB0YWJsZSBjb25jdXJyZW50bHknKTsKKyRub2RlLT5pc3N1ZXNfc3FsX2xpa2Uo CisJWyAncmVpbmRleGRiJywgJy0tY29uY3VycmVudGx5JywgJy1pJywgJ3Rlc3QxeCcsICdw b3N0Z3JlcycgXSwKKwlxci9zdGF0ZW1lbnQ6IFJFSU5ERVggSU5ERVggQ09OQ1VSUkVOVExZ IHB1YmxpY1wudGVzdDF4Oy8sCisJJ3JlaW5kZXggc3BlY2lmaWMgaW5kZXggY29uY3VycmVu dGx5Jyk7Ciskbm9kZS0+aXNzdWVzX3NxbF9saWtlKAorCVsgJ3JlaW5kZXhkYicsICctLWNv bmN1cnJlbnRseScsICctUycsICdwdWJsaWMnLCAncG9zdGdyZXMnIF0sCisJcXIvc3RhdGVt ZW50OiBSRUlOREVYIFNDSEVNQSBDT05DVVJSRU5UTFkgcHVibGljOy8sCisJJ3JlaW5kZXgg c3BlY2lmaWMgc2NoZW1hIGNvbmN1cnJlbnRseScpOworJG5vZGUtPmlzc3Vlc19zcWxfbGlr ZSgKKwlbICdyZWluZGV4ZGInLCAnLS1jb25jdXJyZW50bHknLCAnLXMnLCAncG9zdGdyZXMn IF0sCisJcXIvc3RhdGVtZW50OiBSRUlOREVYIFNZU1RFTSBDT05DVVJSRU5UTFkgcG9zdGdy ZXM7LywKKwkncmVpbmRleCBzeXN0ZW0gdGFibGVzIGNvbmN1cnJlbnRseScpOworJG5vZGUt Pmlzc3Vlc19zcWxfbGlrZSgKKwlbICdyZWluZGV4ZGInLCAnLXYnLCAnLXQnLCAndGVzdDEn LCAncG9zdGdyZXMnIF0sCisJcXIvc3RhdGVtZW50OiBSRUlOREVYIFwoVkVSQk9TRVwpIFRB QkxFIHB1YmxpY1wudGVzdDE7LywKKwkncmVpbmRleCB3aXRoIHZlcmJvc2Ugb3V0cHV0Jyk7 CisKKyMgY29ubmVjdGlvbiBzdHJpbmdzCiAkbm9kZS0+Y29tbWFuZF9vayhbcXcocmVpbmRl eGRiIC0tZWNobyAtLXRhYmxlPXBnX2FtIGRibmFtZT10ZW1wbGF0ZTEpXSwKIAkncmVpbmRl eGRiIHRhYmxlIHdpdGggY29ubmVjdGlvbiBzdHJpbmcnKTsKICRub2RlLT5jb21tYW5kX29r KApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9kZXBlbmRlbmN5LmggYi9zcmMv aW5jbHVkZS9jYXRhbG9nL2RlcGVuZGVuY3kuaAppbmRleCBiMjM1YTIzZjVkLi40NTAyZmE3 ZTg0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2RlcGVuZGVuY3kuaAorKysg Yi9zcmMvaW5jbHVkZS9jYXRhbG9nL2RlcGVuZGVuY3kuaApAQCAtMTk2LDYgKzE5Niw5IEBA IGV4dGVybiBsb25nIGNoYW5nZURlcGVuZGVuY3lGb3IoT2lkIGNsYXNzSWQsIE9pZCBvYmpl Y3RJZCwKIAkJCQkJT2lkIHJlZkNsYXNzSWQsIE9pZCBvbGRSZWZPYmplY3RJZCwKIAkJCQkJ T2lkIG5ld1JlZk9iamVjdElkKTsKIAorZXh0ZXJuIGxvbmcgY2hhbmdlRGVwZW5kZW5jaWVz T24oT2lkIHJlZkNsYXNzSWQsIE9pZCBvbGRSZWZPYmplY3RJZCwKKwkJCQkJCQkJIE9pZCBu ZXdSZWZPYmplY3RJZCk7CisKIGV4dGVybiBPaWQJZ2V0RXh0ZW5zaW9uT2ZPYmplY3QoT2lk IGNsYXNzSWQsIE9pZCBvYmplY3RJZCk7CiAKIGV4dGVybiBib29sIHNlcXVlbmNlSXNPd25l ZChPaWQgc2VxSWQsIGNoYXIgZGVwdHlwZSwgT2lkICp0YWJsZUlkLCBpbnQzMiAqY29sSWQp OwpAQCAtMjA2LDYgKzIwOSw4IEBAIGV4dGVybiBPaWQJZ2V0X2NvbnN0cmFpbnRfaW5kZXgo T2lkIGNvbnN0cmFpbnRJZCk7CiAKIGV4dGVybiBPaWQJZ2V0X2luZGV4X2NvbnN0cmFpbnQo T2lkIGluZGV4SWQpOwogCitleHRlcm4gTGlzdCAqZ2V0X2luZGV4X3JlZl9jb25zdHJhaW50 cyhPaWQgaW5kZXhJZCk7CisKIC8qIGluIHBnX3NoZGVwZW5kLmMgKi8KIAogZXh0ZXJuIHZv aWQgcmVjb3JkU2hhcmVkRGVwZW5kZW5jeU9uKE9iamVjdEFkZHJlc3MgKmRlcGVuZGVyLApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oIGIvc3JjL2luY2x1ZGUv Y2F0YWxvZy9pbmRleC5oCmluZGV4IDI5ZjdlZDYyMzcuLmM2YmQ1NGYwMjIgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaAorKysgYi9zcmMvaW5jbHVkZS9jYXRh bG9nL2luZGV4LmgKQEAgLTc3LDYgKzc3LDIyIEBAIGV4dGVybiBPaWQgaW5kZXhfY3JlYXRl KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKICNkZWZpbmUJSU5ERVhfQ09OU1RSX0NSRUFURV9V UERBVEVfSU5ERVgJKDEgPDwgMykKICNkZWZpbmUJSU5ERVhfQ09OU1RSX0NSRUFURV9SRU1P VkVfT0xEX0RFUFMJKDEgPDwgNCkKIAorZXh0ZXJuIE9pZCBpbmRleF9jb25jdXJyZW50bHlf Y3JlYXRlX2NvcHkoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAorCQkJCQkJCQkJCSAgT2lkIG9s ZEluZGV4SWQsCisJCQkJCQkJCQkJICBjb25zdCBjaGFyICpuZXdOYW1lKTsKKworZXh0ZXJu IHZvaWQgaW5kZXhfY29uY3VycmVudGx5X2J1aWxkKE9pZCBoZWFwT2lkLAorCQkJCQkJCQkJ IE9pZCBpbmRleE9pZCk7CisKK2V4dGVybiB2b2lkIGluZGV4X2NvbmN1cnJlbnRseV9zd2Fw KE9pZCBuZXdJbmRleElkLAorCQkJCQkJCQkJT2lkIG9sZEluZGV4SWQsCisJCQkJCQkJCQlj b25zdCBjaGFyICpvbGROYW1lKTsKKworZXh0ZXJuIHZvaWQgaW5kZXhfY29uY3VycmVudGx5 X3NldF9kZWFkKE9pZCBoZWFwT2lkLAorCQkJCQkJCQkJCU9pZCBpbmRleE9pZCk7CisKK2V4 dGVybiB2b2lkIGluZGV4X2NvbmN1cnJlbnRseV9kcm9wKE9pZCBpbmRleElkKTsKKwogZXh0 ZXJuIE9iamVjdEFkZHJlc3MgaW5kZXhfY29uc3RyYWludF9jcmVhdGUoUmVsYXRpb24gaGVh cFJlbGF0aW9uLAogCQkJCQkJT2lkIGluZGV4UmVsYXRpb25JZCwKIAkJCQkJCU9pZCBwYXJl bnRDb25zdHJhaW50SWQsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9kZWZy ZW0uaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2RlZnJlbS5oCmluZGV4IGU1OTJhOTE0YTQu LmUxMWNhZjJjZDEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2RlZnJlbS5o CisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2RlZnJlbS5oCkBAIC0zNCwxMCArMzQsMTAg QEAgZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lSW5kZXgoT2lkIHJlbGF0aW9uSWQsCiAJ CQlib29sIGNoZWNrX25vdF9pbl91c2UsCiAJCQlib29sIHNraXBfYnVpbGQsCiAJCQlib29s IHF1aWV0KTsKLWV4dGVybiB2b2lkIFJlaW5kZXhJbmRleChSYW5nZVZhciAqaW5kZXhSZWxh dGlvbiwgaW50IG9wdGlvbnMpOwotZXh0ZXJuIE9pZAlSZWluZGV4VGFibGUoUmFuZ2VWYXIg KnJlbGF0aW9uLCBpbnQgb3B0aW9ucyk7CitleHRlcm4gdm9pZCBSZWluZGV4SW5kZXgoUmFu Z2VWYXIgKmluZGV4UmVsYXRpb24sIGludCBvcHRpb25zLCBib29sIGNvbmN1cnJlbnQpOwor ZXh0ZXJuIE9pZAlSZWluZGV4VGFibGUoUmFuZ2VWYXIgKnJlbGF0aW9uLCBpbnQgb3B0aW9u cywgYm9vbCBjb25jdXJyZW50KTsKIGV4dGVybiB2b2lkIFJlaW5kZXhNdWx0aXBsZVRhYmxl cyhjb25zdCBjaGFyICpvYmplY3ROYW1lLCBSZWluZGV4T2JqZWN0VHlwZSBvYmplY3RLaW5k LAotCQkJCQkgIGludCBvcHRpb25zKTsKKwkJCQkJICBpbnQgb3B0aW9ucywgYm9vbCBjb25j dXJyZW50KTsKIGV4dGVybiBjaGFyICptYWtlT2JqZWN0TmFtZShjb25zdCBjaGFyICpuYW1l MSwgY29uc3QgY2hhciAqbmFtZTIsCiAJCQkgICBjb25zdCBjaGFyICpsYWJlbCk7CiBleHRl cm4gY2hhciAqQ2hvb3NlUmVsYXRpb25OYW1lKGNvbnN0IGNoYXIgKm5hbWUxLCBjb25zdCBj aGFyICpuYW1lMiwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMu aCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAppbmRleCBmZTM1NzgzMzU5Li43 ZmMyMWFlNGZlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC0zMzE1LDYgKzMzMTUs NyBAQCB0eXBlZGVmIHN0cnVjdCBSZWluZGV4U3RtdAogCVJhbmdlVmFyICAgKnJlbGF0aW9u OwkJLyogVGFibGUgb3IgaW5kZXggdG8gcmVpbmRleCAqLwogCWNvbnN0IGNoYXIgKm5hbWU7 CQkJLyogbmFtZSBvZiBkYXRhYmFzZSB0byByZWluZGV4ICovCiAJaW50CQkJb3B0aW9uczsJ CS8qIFJlaW5kZXggb3B0aW9ucyBmbGFncyAqLworCWJvb2wJCWNvbmN1cnJlbnQ7CQkvKiBy ZWluZGV4IGNvbmN1cnJlbnRseT8gKi8KIH0gUmVpbmRleFN0bXQ7CiAKIC8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3Rl ZC9yZWluZGV4LWNvbmN1cnJlbnRseS5vdXQgYi9zcmMvdGVzdC9pc29sYXRpb24vZXhwZWN0 ZWQvcmVpbmRleC1jb25jdXJyZW50bHkub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAuLjllMDQxNjliMmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9p c29sYXRpb24vZXhwZWN0ZWQvcmVpbmRleC1jb25jdXJyZW50bHkub3V0CkBAIC0wLDAgKzEs NzggQEAKK1BhcnNlZCB0ZXN0IHNwZWMgd2l0aCAzIHNlc3Npb25zCisKK3N0YXJ0aW5nIHBl cm11dGF0aW9uOiByZWluZGV4IHNlbDEgdXBkMiBpbnMyIGRlbDIgZW5kMSBlbmQyCitzdGVw IHJlaW5kZXg6IFJFSU5ERVggVEFCTEUgQ09OQ1VSUkVOVExZIHJlaW5kX2Nvbl90YWI7Citz dGVwIHNlbDE6IFNFTEVDVCBkYXRhIEZST00gcmVpbmRfY29uX3RhYiBXSEVSRSBpZCA9IDM7 CitkYXRhICAgICAgICAgICAKKworYWFhYSAgICAgICAgICAgCitzdGVwIHVwZDI6IFVQREFU RSByZWluZF9jb25fdGFiIFNFVCBkYXRhID0gJ2JiYmInIFdIRVJFIGlkID0gMzsKK3N0ZXAg aW5zMjogSU5TRVJUIElOVE8gcmVpbmRfY29uX3RhYihkYXRhKSBWQUxVRVMgKCdjY2NjJyk7 CitzdGVwIGRlbDI6IERFTEVURSBGUk9NIHJlaW5kX2Nvbl90YWIgV0hFUkUgZGF0YSA9ICdj Y2NjJzsKK3N0ZXAgZW5kMTogQ09NTUlUOworc3RlcCBlbmQyOiBDT01NSVQ7CisKK3N0YXJ0 aW5nIHBlcm11dGF0aW9uOiBzZWwxIHJlaW5kZXggdXBkMiBpbnMyIGRlbDIgZW5kMSBlbmQy CitzdGVwIHNlbDE6IFNFTEVDVCBkYXRhIEZST00gcmVpbmRfY29uX3RhYiBXSEVSRSBpZCA9 IDM7CitkYXRhICAgICAgICAgICAKKworYWFhYSAgICAgICAgICAgCitzdGVwIHJlaW5kZXg6 IFJFSU5ERVggVEFCTEUgQ09OQ1VSUkVOVExZIHJlaW5kX2Nvbl90YWI7IDx3YWl0aW5nIC4u Lj4KK3N0ZXAgdXBkMjogVVBEQVRFIHJlaW5kX2Nvbl90YWIgU0VUIGRhdGEgPSAnYmJiYicg V0hFUkUgaWQgPSAzOworc3RlcCBpbnMyOiBJTlNFUlQgSU5UTyByZWluZF9jb25fdGFiKGRh dGEpIFZBTFVFUyAoJ2NjY2MnKTsKK3N0ZXAgZGVsMjogREVMRVRFIEZST00gcmVpbmRfY29u X3RhYiBXSEVSRSBkYXRhID0gJ2NjY2MnOworc3RlcCBlbmQxOiBDT01NSVQ7CitzdGVwIGVu ZDI6IENPTU1JVDsKK3N0ZXAgcmVpbmRleDogPC4uLiBjb21wbGV0ZWQ+CisKK3N0YXJ0aW5n IHBlcm11dGF0aW9uOiBzZWwxIHVwZDIgcmVpbmRleCBpbnMyIGRlbDIgZW5kMSBlbmQyCitz dGVwIHNlbDE6IFNFTEVDVCBkYXRhIEZST00gcmVpbmRfY29uX3RhYiBXSEVSRSBpZCA9IDM7 CitkYXRhICAgICAgICAgICAKKworYWFhYSAgICAgICAgICAgCitzdGVwIHVwZDI6IFVQREFU RSByZWluZF9jb25fdGFiIFNFVCBkYXRhID0gJ2JiYmInIFdIRVJFIGlkID0gMzsKK3N0ZXAg cmVpbmRleDogUkVJTkRFWCBUQUJMRSBDT05DVVJSRU5UTFkgcmVpbmRfY29uX3RhYjsgPHdh aXRpbmcgLi4uPgorc3RlcCBpbnMyOiBJTlNFUlQgSU5UTyByZWluZF9jb25fdGFiKGRhdGEp IFZBTFVFUyAoJ2NjY2MnKTsKK3N0ZXAgZGVsMjogREVMRVRFIEZST00gcmVpbmRfY29uX3Rh YiBXSEVSRSBkYXRhID0gJ2NjY2MnOworc3RlcCBlbmQxOiBDT01NSVQ7CitzdGVwIGVuZDI6 IENPTU1JVDsKK3N0ZXAgcmVpbmRleDogPC4uLiBjb21wbGV0ZWQ+CisKK3N0YXJ0aW5nIHBl cm11dGF0aW9uOiBzZWwxIHVwZDIgaW5zMiByZWluZGV4IGRlbDIgZW5kMSBlbmQyCitzdGVw IHNlbDE6IFNFTEVDVCBkYXRhIEZST00gcmVpbmRfY29uX3RhYiBXSEVSRSBpZCA9IDM7Citk YXRhICAgICAgICAgICAKKworYWFhYSAgICAgICAgICAgCitzdGVwIHVwZDI6IFVQREFURSBy ZWluZF9jb25fdGFiIFNFVCBkYXRhID0gJ2JiYmInIFdIRVJFIGlkID0gMzsKK3N0ZXAgaW5z MjogSU5TRVJUIElOVE8gcmVpbmRfY29uX3RhYihkYXRhKSBWQUxVRVMgKCdjY2NjJyk7Citz dGVwIHJlaW5kZXg6IFJFSU5ERVggVEFCTEUgQ09OQ1VSUkVOVExZIHJlaW5kX2Nvbl90YWI7 IDx3YWl0aW5nIC4uLj4KK3N0ZXAgZGVsMjogREVMRVRFIEZST00gcmVpbmRfY29uX3RhYiBX SEVSRSBkYXRhID0gJ2NjY2MnOworc3RlcCBlbmQxOiBDT01NSVQ7CitzdGVwIGVuZDI6IENP TU1JVDsKK3N0ZXAgcmVpbmRleDogPC4uLiBjb21wbGV0ZWQ+CisKK3N0YXJ0aW5nIHBlcm11 dGF0aW9uOiBzZWwxIHVwZDIgaW5zMiBkZWwyIHJlaW5kZXggZW5kMSBlbmQyCitzdGVwIHNl bDE6IFNFTEVDVCBkYXRhIEZST00gcmVpbmRfY29uX3RhYiBXSEVSRSBpZCA9IDM7CitkYXRh ICAgICAgICAgICAKKworYWFhYSAgICAgICAgICAgCitzdGVwIHVwZDI6IFVQREFURSByZWlu ZF9jb25fdGFiIFNFVCBkYXRhID0gJ2JiYmInIFdIRVJFIGlkID0gMzsKK3N0ZXAgaW5zMjog SU5TRVJUIElOVE8gcmVpbmRfY29uX3RhYihkYXRhKSBWQUxVRVMgKCdjY2NjJyk7CitzdGVw IGRlbDI6IERFTEVURSBGUk9NIHJlaW5kX2Nvbl90YWIgV0hFUkUgZGF0YSA9ICdjY2NjJzsK K3N0ZXAgcmVpbmRleDogUkVJTkRFWCBUQUJMRSBDT05DVVJSRU5UTFkgcmVpbmRfY29uX3Rh YjsgPHdhaXRpbmcgLi4uPgorc3RlcCBlbmQxOiBDT01NSVQ7CitzdGVwIGVuZDI6IENPTU1J VDsKK3N0ZXAgcmVpbmRleDogPC4uLiBjb21wbGV0ZWQ+CisKK3N0YXJ0aW5nIHBlcm11dGF0 aW9uOiBzZWwxIHVwZDIgaW5zMiBkZWwyIGVuZDEgcmVpbmRleCBlbmQyCitzdGVwIHNlbDE6 IFNFTEVDVCBkYXRhIEZST00gcmVpbmRfY29uX3RhYiBXSEVSRSBpZCA9IDM7CitkYXRhICAg ICAgICAgICAKKworYWFhYSAgICAgICAgICAgCitzdGVwIHVwZDI6IFVQREFURSByZWluZF9j b25fdGFiIFNFVCBkYXRhID0gJ2JiYmInIFdIRVJFIGlkID0gMzsKK3N0ZXAgaW5zMjogSU5T RVJUIElOVE8gcmVpbmRfY29uX3RhYihkYXRhKSBWQUxVRVMgKCdjY2NjJyk7CitzdGVwIGRl bDI6IERFTEVURSBGUk9NIHJlaW5kX2Nvbl90YWIgV0hFUkUgZGF0YSA9ICdjY2NjJzsKK3N0 ZXAgZW5kMTogQ09NTUlUOworc3RlcCByZWluZGV4OiBSRUlOREVYIFRBQkxFIENPTkNVUlJF TlRMWSByZWluZF9jb25fdGFiOyA8d2FpdGluZyAuLi4+CitzdGVwIGVuZDI6IENPTU1JVDsK K3N0ZXAgcmVpbmRleDogPC4uLiBjb21wbGV0ZWQ+CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9p c29sYXRpb24vaXNvbGF0aW9uX3NjaGVkdWxlIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xh dGlvbl9zY2hlZHVsZQppbmRleCA5MWQ5ZDkwMTM1Li5lMzI4ODZiYWNiIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9pc29sYXRpb24vaXNvbGF0aW9uX3NjaGVkdWxlCisrKyBiL3NyYy90ZXN0 L2lzb2xhdGlvbi9pc29sYXRpb25fc2NoZWR1bGUKQEAgLTQyLDYgKzQyLDcgQEAgdGVzdDog bXVsdGl4YWN0LW5vLWZvcmdldAogdGVzdDogbG9jay1jb21taXR0ZWQtdXBkYXRlCiB0ZXN0 OiBsb2NrLWNvbW1pdHRlZC1rZXl1cGRhdGUKIHRlc3Q6IHVwZGF0ZS1sb2NrZWQtdHVwbGUK K3Rlc3Q6IHJlaW5kZXgtY29uY3VycmVudGx5CiB0ZXN0OiBwcm9wYWdhdGUtbG9jay1kZWxl dGUKIHRlc3Q6IHR1cGxlbG9jay1jb25mbGljdAogdGVzdDogdHVwbGVsb2NrLXVwZGF0ZQpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL3JlaW5kZXgtY29uY3VycmVu dGx5LnNwZWMgYi9zcmMvdGVzdC9pc29sYXRpb24vc3BlY3MvcmVpbmRleC1jb25jdXJyZW50 bHkuc3BlYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5lYjU5ZmUw Y2JhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL3JlaW5k ZXgtY29uY3VycmVudGx5LnNwZWMKQEAgLTAsMCArMSw0MCBAQAorIyBSRUlOREVYIENPTkNV UlJFTlRMWQorIworIyBFbnN1cmUgdGhhdCBjb25jdXJyZW50IG9wZXJhdGlvbnMgd29yayBj b3JyZWN0bHkgd2hlbiBhIFJFSU5ERVggaXMgcGVyZm9ybWVkCisjIGNvbmN1cnJlbnRseS4K Kworc2V0dXAKK3sKKwlDUkVBVEUgVEFCTEUgcmVpbmRfY29uX3RhYihpZCBzZXJpYWwgcHJp bWFyeSBrZXksIGRhdGEgdGV4dCk7CisJSU5TRVJUIElOVE8gcmVpbmRfY29uX3RhYihkYXRh KSBWQUxVRVMgKCdhYScpOworCUlOU0VSVCBJTlRPIHJlaW5kX2Nvbl90YWIoZGF0YSkgVkFM VUVTICgnYWFhJyk7CisJSU5TRVJUIElOVE8gcmVpbmRfY29uX3RhYihkYXRhKSBWQUxVRVMg KCdhYWFhJyk7CisJSU5TRVJUIElOVE8gcmVpbmRfY29uX3RhYihkYXRhKSBWQUxVRVMgKCdh YWFhYScpOworfQorCit0ZWFyZG93bgoreworCURST1AgVEFCTEUgcmVpbmRfY29uX3RhYjsK K30KKworc2Vzc2lvbiAiczEiCitzZXR1cCB7IEJFR0lOOyB9CitzdGVwICJzZWwxIiB7IFNF TEVDVCBkYXRhIEZST00gcmVpbmRfY29uX3RhYiBXSEVSRSBpZCA9IDM7IH0KK3N0ZXAgImVu ZDEiIHsgQ09NTUlUOyB9CisKK3Nlc3Npb24gInMyIgorc2V0dXAgeyBCRUdJTjsgfQorc3Rl cCAidXBkMiIgeyBVUERBVEUgcmVpbmRfY29uX3RhYiBTRVQgZGF0YSA9ICdiYmJiJyBXSEVS RSBpZCA9IDM7IH0KK3N0ZXAgImluczIiIHsgSU5TRVJUIElOVE8gcmVpbmRfY29uX3RhYihk YXRhKSBWQUxVRVMgKCdjY2NjJyk7IH0KK3N0ZXAgImRlbDIiIHsgREVMRVRFIEZST00gcmVp bmRfY29uX3RhYiBXSEVSRSBkYXRhID0gJ2NjY2MnOyB9CitzdGVwICJlbmQyIiB7IENPTU1J VDsgfQorCitzZXNzaW9uICJzMyIKK3N0ZXAgInJlaW5kZXgiIHsgUkVJTkRFWCBUQUJMRSBD T05DVVJSRU5UTFkgcmVpbmRfY29uX3RhYjsgfQorCitwZXJtdXRhdGlvbiAicmVpbmRleCIg InNlbDEiICJ1cGQyIiAiaW5zMiIgImRlbDIiICJlbmQxIiAiZW5kMiIKK3Blcm11dGF0aW9u ICJzZWwxIiAicmVpbmRleCIgInVwZDIiICJpbnMyIiAiZGVsMiIgImVuZDEiICJlbmQyIgor cGVybXV0YXRpb24gInNlbDEiICJ1cGQyIiAicmVpbmRleCIgImluczIiICJkZWwyIiAiZW5k MSIgImVuZDIiCitwZXJtdXRhdGlvbiAic2VsMSIgInVwZDIiICJpbnMyIiAicmVpbmRleCIg ImRlbDIiICJlbmQxIiAiZW5kMiIKK3Blcm11dGF0aW9uICJzZWwxIiAidXBkMiIgImluczIi ICJkZWwyIiAicmVpbmRleCIgImVuZDEiICJlbmQyIgorcGVybXV0YXRpb24gInNlbDEiICJ1 cGQyIiAiaW5zMiIgImRlbDIiICJlbmQxIiAicmVpbmRleCIgImVuZDIiCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQKaW5kZXggNWQ0ZWI1OWEwYy4u ZTQ3M2RjMTY1YyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVh dGVfaW5kZXgub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2lu ZGV4Lm91dApAQCAtMzIzOCw2ICszMjM4LDk5IEBAIFJFSU5ERVggKFZFUkJPU0UpIFRBQkxF IHJlaW5kZXhfdmVyYm9zZTsKIElORk86ICBpbmRleCAicmVpbmRleF92ZXJib3NlX3BrZXki IHdhcyByZWluZGV4ZWQKIERST1AgVEFCTEUgcmVpbmRleF92ZXJib3NlOwogLS0KKy0tIFJF SU5ERVggQ09OQ1VSUkVOVExZCistLQorQ1JFQVRFIFRBQkxFIGNvbmN1cl9yZWluZGV4X3Rh YiAoYzEgaW50KTsKKy0tIFJFSU5ERVgKK1JFSU5ERVggVEFCTEUgY29uY3VyX3JlaW5kZXhf dGFiOyAtLSBub3RpY2UKK05PVElDRTogIHRhYmxlICJjb25jdXJfcmVpbmRleF90YWIiIGhh cyBubyBpbmRleGVzCitSRUlOREVYIFRBQkxFIENPTkNVUlJFTlRMWSBjb25jdXJfcmVpbmRl eF90YWI7IC0tIG5vdGljZQorTk9USUNFOiAgdGFibGUgImNvbmN1cl9yZWluZGV4X3RhYiIg aGFzIG5vIGluZGV4ZXMKK0FMVEVSIFRBQkxFIGNvbmN1cl9yZWluZGV4X3RhYiBBREQgQ09M VU1OIGMyIHRleHQ7IC0tIGFkZCB0b2FzdCBpbmRleAorLS0gTm9ybWFsIGluZGV4IHdpdGgg aW50ZWdlciBjb2x1bW4KK0NSRUFURSBVTklRVUUgSU5ERVggY29uY3VyX3JlaW5kZXhfaW5k MSBPTiBjb25jdXJfcmVpbmRleF90YWIoYzEpOworLS0gTm9ybWFsIGluZGV4IHdpdGggdGV4 dCBjb2x1bW4KK0NSRUFURSBJTkRFWCBjb25jdXJfcmVpbmRleF9pbmQyIE9OIGNvbmN1cl9y ZWluZGV4X3RhYihjMik7CistLSBVTklRVUUgaW5kZXggd2l0aCBleHByZXNzaW9uCitDUkVB VEUgVU5JUVVFIElOREVYIGNvbmN1cl9yZWluZGV4X2luZDMgT04gY29uY3VyX3JlaW5kZXhf dGFiKGFicyhjMSkpOworLS0gRHVwbGljYXRlIGNvbHVtbiBuYW1lcworQ1JFQVRFIElOREVY IGNvbmN1cl9yZWluZGV4X2luZDQgT04gY29uY3VyX3JlaW5kZXhfdGFiKGMxLCBjMSwgYzIp OworLS0gQ3JlYXRlIHRhYmxlIGZvciBjaGVjayBvbiBmb3JlaWduIGtleSBkZXBlbmRlbmNl IHN3aXRjaCB3aXRoIGluZGV4ZXMgc3dhcHBlZAorQUxURVIgVEFCTEUgY29uY3VyX3JlaW5k ZXhfdGFiIEFERCBQUklNQVJZIEtFWSBVU0lORyBJTkRFWCBjb25jdXJfcmVpbmRleF9pbmQx OworQ1JFQVRFIFRBQkxFIGNvbmN1cl9yZWluZGV4X3RhYjIgKGMxIGludCBSRUZFUkVOQ0VT IGNvbmN1cl9yZWluZGV4X3RhYik7CitJTlNFUlQgSU5UTyBjb25jdXJfcmVpbmRleF90YWIg VkFMVUVTICAoMSwgJ2EnKTsKK0lOU0VSVCBJTlRPIGNvbmN1cl9yZWluZGV4X3RhYiBWQUxV RVMgICgyLCAnYScpOworLS0gUmVpbmRleCBvZiBleGNsdXNpb24gY29uc3RyYWludAorQUxU RVIgVEFCTEUgY29uY3VyX3JlaW5kZXhfdGFiIEFERCBDT0xVTU4gYzMgaW50NHJhbmdlLCBB REQgRVhDTFVERSBVU0lORyBnaXN0IChjMyBXSVRIICYmKTsKK0lOU0VSVCBJTlRPIGNvbmN1 cl9yZWluZGV4X3RhYiBWQUxVRVMgICgzLCAnYScsICdbMSwyXScpOworUkVJTkRFWCBUQUJM RSBjb25jdXJfcmVpbmRleF90YWI7CitJTlNFUlQgSU5UTyBjb25jdXJfcmVpbmRleF90YWIg VkFMVUVTICAoNCwgJ2EnLCAnWzIsNF0nKTsKK0VSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZh bHVlIHZpb2xhdGVzIGV4Y2x1c2lvbiBjb25zdHJhaW50ICJjb25jdXJfcmVpbmRleF90YWJf YzNfZXhjbCIKKy0tIENoZWNrIG1hdGVyaWFsaXplZCB2aWV3cworQ1JFQVRFIE1BVEVSSUFM SVpFRCBWSUVXIGNvbmN1cl9yZWluZGV4X21hdHZpZXcgQVMgU0VMRUNUICogRlJPTSBjb25j dXJfcmVpbmRleF90YWI7CitSRUlOREVYIElOREVYIENPTkNVUlJFTlRMWSBjb25jdXJfcmVp bmRleF9pbmQxOworUkVJTkRFWCBUQUJMRSBDT05DVVJSRU5UTFkgY29uY3VyX3JlaW5kZXhf dGFiOworUkVJTkRFWCBUQUJMRSBDT05DVVJSRU5UTFkgY29uY3VyX3JlaW5kZXhfbWF0dmll dzsKKy0tIENoZWNrIHRoYXQgY29tbWVudHMgYXJlIHByZXNlcnZlZAorQ1JFQVRFIFRBQkxF IHRlc3Rjb21tZW50IChpIGludCk7CitDUkVBVEUgSU5ERVggdGVzdGNvbW1lbnRfaWR4MSBP TiB0ZXN0Y29tbWVudCAoaSk7CitDT01NRU5UIE9OIElOREVYIHRlc3Rjb21tZW50X2lkeDEg SVMgJ3Rlc3QgY29tbWVudCc7CitTRUxFQ1Qgb2JqX2Rlc2NyaXB0aW9uKCd0ZXN0Y29tbWVu dF9pZHgxJzo6cmVnY2xhc3MsICdwZ19jbGFzcycpOworIG9ial9kZXNjcmlwdGlvbiAKKy0t LS0tLS0tLS0tLS0tLS0tCisgdGVzdCBjb21tZW50CisoMSByb3cpCisKK1JFSU5ERVggVEFC TEUgdGVzdGNvbW1lbnQ7CitTRUxFQ1Qgb2JqX2Rlc2NyaXB0aW9uKCd0ZXN0Y29tbWVudF9p ZHgxJzo6cmVnY2xhc3MsICdwZ19jbGFzcycpOworIG9ial9kZXNjcmlwdGlvbiAKKy0tLS0t LS0tLS0tLS0tLS0tCisgdGVzdCBjb21tZW50CisoMSByb3cpCisKK1JFSU5ERVggVEFCTEUg Q09OQ1VSUkVOVExZIHRlc3Rjb21tZW50IDsKK1NFTEVDVCBvYmpfZGVzY3JpcHRpb24oJ3Rl c3Rjb21tZW50X2lkeDEnOjpyZWdjbGFzcywgJ3BnX2NsYXNzJyk7Cisgb2JqX2Rlc2NyaXB0 aW9uIAorLS0tLS0tLS0tLS0tLS0tLS0KKyB0ZXN0IGNvbW1lbnQKKygxIHJvdykKKworRFJP UCBUQUJMRSB0ZXN0Y29tbWVudDsKKy0tIENoZWNrIGVycm9ycworLS0gQ2Fubm90IHJ1biBp bnNpZGUgYSB0cmFuc2FjdGlvbiBibG9jaworQkVHSU47CitSRUlOREVYIFRBQkxFIENPTkNV UlJFTlRMWSBjb25jdXJfcmVpbmRleF90YWI7CitFUlJPUjogIFJFSU5ERVggQ09OQ1VSUkVO VExZIGNhbm5vdCBydW4gaW5zaWRlIGEgdHJhbnNhY3Rpb24gYmxvY2sKK0NPTU1JVDsKK1JF SU5ERVggVEFCTEUgQ09OQ1VSUkVOVExZIHBnX2RhdGFiYXNlOyAtLSBubyBzaGFyZWQgcmVs YXRpb24KK0VSUk9SOiAgY29uY3VycmVudCByZWluZGV4IGlzIG5vdCBzdXBwb3J0ZWQgZm9y IHNoYXJlZCByZWxhdGlvbnMKK1JFSU5ERVggVEFCTEUgQ09OQ1VSUkVOVExZIHBnX2NsYXNz OyAtLSBubyBjYXRhbG9nIHJlbGF0aW9ucworRVJST1I6ICBjb25jdXJyZW50IHJlaW5kZXgg aXMgbm90IHN1cHBvcnRlZCBmb3IgY2F0YWxvZyByZWxhdGlvbnMKK1JFSU5ERVggU1lTVEVN IENPTkNVUlJFTlRMWSBwb3N0Z3JlczsgLS0gbm90IGFsbG93ZWQgZm9yIFNZU1RFTQorRVJS T1I6ICBjYW4gb25seSByZWluZGV4IHRoZSBjdXJyZW50bHkgb3BlbiBkYXRhYmFzZQorLS0g V2FybnMgYWJvdXQgY2F0YWxvZyByZWxhdGlvbnMKK1JFSU5ERVggU0NIRU1BIENPTkNVUlJF TlRMWSBwZ19jYXRhbG9nOworV0FSTklORzogIGNvbmN1cnJlbnQgcmVpbmRleCBpcyBub3Qg c3VwcG9ydGVkIGZvciBjYXRhbG9nIHJlbGF0aW9ucywgc2tpcHBpbmcgYWxsCistLSBDaGVj ayB0aGUgcmVsYXRpb24gc3RhdHVzLCB0aGVyZSBzaG91bGQgbm90IGJlIGludmFsaWQgaW5k ZXhlcworXGQgY29uY3VyX3JlaW5kZXhfdGFiCisgICAgICAgICAgVGFibGUgInB1YmxpYy5j b25jdXJfcmVpbmRleF90YWIiCisgQ29sdW1uIHwgICBUeXBlICAgIHwgQ29sbGF0aW9uIHwg TnVsbGFibGUgfCBEZWZhdWx0IAorLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0tLS0KKyBjMSAgICAgfCBpbnRlZ2VyICAgfCAgICAgICAgICAg fCBub3QgbnVsbCB8IAorIGMyICAgICB8IHRleHQgICAgICB8ICAgICAgICAgICB8ICAgICAg ICAgIHwgCisgYzMgICAgIHwgaW50NHJhbmdlIHwgICAgICAgICAgIHwgICAgICAgICAgfCAK K0luZGV4ZXM6CisgICAgImNvbmN1cl9yZWluZGV4X2luZDEiIFBSSU1BUlkgS0VZLCBidHJl ZSAoYzEpCisgICAgImNvbmN1cl9yZWluZGV4X2luZDMiIFVOSVFVRSwgYnRyZWUgKGFicyhj MSkpCisgICAgImNvbmN1cl9yZWluZGV4X2luZDIiIGJ0cmVlIChjMikKKyAgICAiY29uY3Vy X3JlaW5kZXhfaW5kNCIgYnRyZWUgKGMxLCBjMSwgYzIpCisgICAgImNvbmN1cl9yZWluZGV4 X3RhYl9jM19leGNsIiBFWENMVURFIFVTSU5HIGdpc3QgKGMzIFdJVEggJiYpCitSZWZlcmVu Y2VkIGJ5OgorICAgIFRBQkxFICJjb25jdXJfcmVpbmRleF90YWIyIiBDT05TVFJBSU5UICJj b25jdXJfcmVpbmRleF90YWIyX2MxX2ZrZXkiIEZPUkVJR04gS0VZIChjMSkgUkVGRVJFTkNF UyBjb25jdXJfcmVpbmRleF90YWIoYzEpCisKK0RST1AgTUFURVJJQUxJWkVEIFZJRVcgY29u Y3VyX3JlaW5kZXhfbWF0dmlldzsKK0RST1AgVEFCTEUgY29uY3VyX3JlaW5kZXhfdGFiLCBj b25jdXJfcmVpbmRleF90YWIyOworLS0KIC0tIFJFSU5ERVggU0NIRU1BCiAtLQogUkVJTkRF WCBTQ0hFTUEgc2NoZW1hX3RvX3JlaW5kZXg7IC0tIGZhaWx1cmUsIHNjaGVtYSBkb2VzIG5v dCBleGlzdApAQCAtMzI5Niw2ICszMzg5LDggQEAgQkVHSU47CiBSRUlOREVYIFNDSEVNQSBz Y2hlbWFfdG9fcmVpbmRleDsgLS0gZmFpbHVyZSwgY2Fubm90IHJ1biBpbiBhIHRyYW5zYWN0 aW9uCiBFUlJPUjogIFJFSU5ERVggU0NIRU1BIGNhbm5vdCBydW4gaW5zaWRlIGEgdHJhbnNh Y3Rpb24gYmxvY2sKIEVORDsKKy0tIGNvbmN1cnJlbnRseQorUkVJTkRFWCBTQ0hFTUEgQ09O Q1VSUkVOVExZIHNjaGVtYV90b19yZWluZGV4OwogLS0gRmFpbHVyZSBmb3IgdW5hdXRob3Jp emVkIHVzZXIKIENSRUFURSBST0xFIHJlZ3Jlc3NfcmVpbmRleHVzZXIgTk9MT0dJTjsKIFNF VCBTRVNTSU9OIFJPTEUgcmVncmVzc19yZWluZGV4dXNlcjsKQEAgLTMzMDcsMyArMzQwMiw1 IEBAIERST1AgUk9MRSByZWdyZXNzX3JlaW5kZXh1c2VyOwogXHNldCBWRVJCT1NJVFkgdGVy c2UgXFwgLS0gc3VwcHJlc3MgY2FzY2FkZSBkZXRhaWxzCiBEUk9QIFNDSEVNQSBzY2hlbWFf dG9fcmVpbmRleCBDQVNDQURFOwogTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byA2IG90aGVy IG9iamVjdHMKK1JFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CitSRVNFVCBzZWFyY2hfcGF0 aDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsCmluZGV4IDY3ZWNhZDhk ZDUuLmZhNTAzOTUxY2QgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0 ZV9pbmRleC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNx bApAQCAtMTE1OSw2ICsxMTU5LDY0IEBAIENSRUFURSBUQUJMRSByZWluZGV4X3ZlcmJvc2Uo aWQgaW50ZWdlciBwcmltYXJ5IGtleSk7CiBSRUlOREVYIChWRVJCT1NFKSBUQUJMRSByZWlu ZGV4X3ZlcmJvc2U7CiBEUk9QIFRBQkxFIHJlaW5kZXhfdmVyYm9zZTsKIAorLS0KKy0tIFJF SU5ERVggQ09OQ1VSUkVOVExZCistLQorQ1JFQVRFIFRBQkxFIGNvbmN1cl9yZWluZGV4X3Rh YiAoYzEgaW50KTsKKy0tIFJFSU5ERVgKK1JFSU5ERVggVEFCTEUgY29uY3VyX3JlaW5kZXhf dGFiOyAtLSBub3RpY2UKK1JFSU5ERVggVEFCTEUgQ09OQ1VSUkVOVExZIGNvbmN1cl9yZWlu ZGV4X3RhYjsgLS0gbm90aWNlCitBTFRFUiBUQUJMRSBjb25jdXJfcmVpbmRleF90YWIgQURE IENPTFVNTiBjMiB0ZXh0OyAtLSBhZGQgdG9hc3QgaW5kZXgKKy0tIE5vcm1hbCBpbmRleCB3 aXRoIGludGVnZXIgY29sdW1uCitDUkVBVEUgVU5JUVVFIElOREVYIGNvbmN1cl9yZWluZGV4 X2luZDEgT04gY29uY3VyX3JlaW5kZXhfdGFiKGMxKTsKKy0tIE5vcm1hbCBpbmRleCB3aXRo IHRleHQgY29sdW1uCitDUkVBVEUgSU5ERVggY29uY3VyX3JlaW5kZXhfaW5kMiBPTiBjb25j dXJfcmVpbmRleF90YWIoYzIpOworLS0gVU5JUVVFIGluZGV4IHdpdGggZXhwcmVzc2lvbgor Q1JFQVRFIFVOSVFVRSBJTkRFWCBjb25jdXJfcmVpbmRleF9pbmQzIE9OIGNvbmN1cl9yZWlu ZGV4X3RhYihhYnMoYzEpKTsKKy0tIER1cGxpY2F0ZSBjb2x1bW4gbmFtZXMKK0NSRUFURSBJ TkRFWCBjb25jdXJfcmVpbmRleF9pbmQ0IE9OIGNvbmN1cl9yZWluZGV4X3RhYihjMSwgYzEs IGMyKTsKKy0tIENyZWF0ZSB0YWJsZSBmb3IgY2hlY2sgb24gZm9yZWlnbiBrZXkgZGVwZW5k ZW5jZSBzd2l0Y2ggd2l0aCBpbmRleGVzIHN3YXBwZWQKK0FMVEVSIFRBQkxFIGNvbmN1cl9y ZWluZGV4X3RhYiBBREQgUFJJTUFSWSBLRVkgVVNJTkcgSU5ERVggY29uY3VyX3JlaW5kZXhf aW5kMTsKK0NSRUFURSBUQUJMRSBjb25jdXJfcmVpbmRleF90YWIyIChjMSBpbnQgUkVGRVJF TkNFUyBjb25jdXJfcmVpbmRleF90YWIpOworSU5TRVJUIElOVE8gY29uY3VyX3JlaW5kZXhf dGFiIFZBTFVFUyAgKDEsICdhJyk7CitJTlNFUlQgSU5UTyBjb25jdXJfcmVpbmRleF90YWIg VkFMVUVTICAoMiwgJ2EnKTsKKy0tIFJlaW5kZXggb2YgZXhjbHVzaW9uIGNvbnN0cmFpbnQK K0FMVEVSIFRBQkxFIGNvbmN1cl9yZWluZGV4X3RhYiBBREQgQ09MVU1OIGMzIGludDRyYW5n ZSwgQUREIEVYQ0xVREUgVVNJTkcgZ2lzdCAoYzMgV0lUSCAmJik7CitJTlNFUlQgSU5UTyBj b25jdXJfcmVpbmRleF90YWIgVkFMVUVTICAoMywgJ2EnLCAnWzEsMl0nKTsKK1JFSU5ERVgg VEFCTEUgY29uY3VyX3JlaW5kZXhfdGFiOworSU5TRVJUIElOVE8gY29uY3VyX3JlaW5kZXhf dGFiIFZBTFVFUyAgKDQsICdhJywgJ1syLDRdJyk7CistLSBDaGVjayBtYXRlcmlhbGl6ZWQg dmlld3MKK0NSRUFURSBNQVRFUklBTElaRUQgVklFVyBjb25jdXJfcmVpbmRleF9tYXR2aWV3 IEFTIFNFTEVDVCAqIEZST00gY29uY3VyX3JlaW5kZXhfdGFiOworUkVJTkRFWCBJTkRFWCBD T05DVVJSRU5UTFkgY29uY3VyX3JlaW5kZXhfaW5kMTsKK1JFSU5ERVggVEFCTEUgQ09OQ1VS UkVOVExZIGNvbmN1cl9yZWluZGV4X3RhYjsKK1JFSU5ERVggVEFCTEUgQ09OQ1VSUkVOVExZ IGNvbmN1cl9yZWluZGV4X21hdHZpZXc7CistLSBDaGVjayB0aGF0IGNvbW1lbnRzIGFyZSBw cmVzZXJ2ZWQKK0NSRUFURSBUQUJMRSB0ZXN0Y29tbWVudCAoaSBpbnQpOworQ1JFQVRFIElO REVYIHRlc3Rjb21tZW50X2lkeDEgT04gdGVzdGNvbW1lbnQgKGkpOworQ09NTUVOVCBPTiBJ TkRFWCB0ZXN0Y29tbWVudF9pZHgxIElTICd0ZXN0IGNvbW1lbnQnOworU0VMRUNUIG9ial9k ZXNjcmlwdGlvbigndGVzdGNvbW1lbnRfaWR4MSc6OnJlZ2NsYXNzLCAncGdfY2xhc3MnKTsK K1JFSU5ERVggVEFCTEUgdGVzdGNvbW1lbnQ7CitTRUxFQ1Qgb2JqX2Rlc2NyaXB0aW9uKCd0 ZXN0Y29tbWVudF9pZHgxJzo6cmVnY2xhc3MsICdwZ19jbGFzcycpOworUkVJTkRFWCBUQUJM RSBDT05DVVJSRU5UTFkgdGVzdGNvbW1lbnQgOworU0VMRUNUIG9ial9kZXNjcmlwdGlvbign dGVzdGNvbW1lbnRfaWR4MSc6OnJlZ2NsYXNzLCAncGdfY2xhc3MnKTsKK0RST1AgVEFCTEUg dGVzdGNvbW1lbnQ7CisKKy0tIENoZWNrIGVycm9ycworLS0gQ2Fubm90IHJ1biBpbnNpZGUg YSB0cmFuc2FjdGlvbiBibG9jaworQkVHSU47CitSRUlOREVYIFRBQkxFIENPTkNVUlJFTlRM WSBjb25jdXJfcmVpbmRleF90YWI7CitDT01NSVQ7CitSRUlOREVYIFRBQkxFIENPTkNVUlJF TlRMWSBwZ19kYXRhYmFzZTsgLS0gbm8gc2hhcmVkIHJlbGF0aW9uCitSRUlOREVYIFRBQkxF IENPTkNVUlJFTlRMWSBwZ19jbGFzczsgLS0gbm8gY2F0YWxvZyByZWxhdGlvbnMKK1JFSU5E RVggU1lTVEVNIENPTkNVUlJFTlRMWSBwb3N0Z3JlczsgLS0gbm90IGFsbG93ZWQgZm9yIFNZ U1RFTQorLS0gV2FybnMgYWJvdXQgY2F0YWxvZyByZWxhdGlvbnMKK1JFSU5ERVggU0NIRU1B IENPTkNVUlJFTlRMWSBwZ19jYXRhbG9nOworCistLSBDaGVjayB0aGUgcmVsYXRpb24gc3Rh dHVzLCB0aGVyZSBzaG91bGQgbm90IGJlIGludmFsaWQgaW5kZXhlcworXGQgY29uY3VyX3Jl aW5kZXhfdGFiCitEUk9QIE1BVEVSSUFMSVpFRCBWSUVXIGNvbmN1cl9yZWluZGV4X21hdHZp ZXc7CitEUk9QIFRBQkxFIGNvbmN1cl9yZWluZGV4X3RhYiwgY29uY3VyX3JlaW5kZXhfdGFi MjsKKwogLS0KIC0tIFJFSU5ERVggU0NIRU1BCiAtLQpAQCAtMTIwMSw2ICsxMjU5LDkgQEAg Q1JFQVRFIFRBQkxFIHJlaW5kZXhfYWZ0ZXIgQVMgU0VMRUNUIG9pZCwgcmVsbmFtZSwgcmVs ZmlsZW5vZGUsIHJlbGtpbmQKIFJFSU5ERVggU0NIRU1BIHNjaGVtYV90b19yZWluZGV4OyAt LSBmYWlsdXJlLCBjYW5ub3QgcnVuIGluIGEgdHJhbnNhY3Rpb24KIEVORDsKIAorLS0gY29u Y3VycmVudGx5CitSRUlOREVYIFNDSEVNQSBDT05DVVJSRU5UTFkgc2NoZW1hX3RvX3JlaW5k ZXg7CisKIC0tIEZhaWx1cmUgZm9yIHVuYXV0aG9yaXplZCB1c2VyCiBDUkVBVEUgUk9MRSBy ZWdyZXNzX3JlaW5kZXh1c2VyIE5PTE9HSU47CiBTRVQgU0VTU0lPTiBST0xFIHJlZ3Jlc3Nf cmVpbmRleHVzZXI7CkBAIC0xMjExLDMgKzEyNzIsNSBAQCBDUkVBVEUgUk9MRSByZWdyZXNz X3JlaW5kZXh1c2VyIE5PTE9HSU47CiBEUk9QIFJPTEUgcmVncmVzc19yZWluZGV4dXNlcjsK IFxzZXQgVkVSQk9TSVRZIHRlcnNlIFxcIC0tIHN1cHByZXNzIGNhc2NhZGUgZGV0YWlscwog RFJPUCBTQ0hFTUEgc2NoZW1hX3RvX3JlaW5kZXggQ0FTQ0FERTsKK1JFU0VUIGNsaWVudF9t aW5fbWVzc2FnZXM7CitSRVNFVCBzZWFyY2hfcGF0aDsKCmJhc2UtY29tbWl0OiBiMDgyNWQy OGVhODNlNDQxMzliZDMxOWU2ZDFkYjJjNDk5Y2Q0YzZhCi0tIAoyLjIxLjAKCg== --------------0DE6C76EFD23B48A3820CDFE--