Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1f1t1A-00018c-SV for pgsql-hackers@arkaria.postgresql.org; Fri, 30 Mar 2018 12:20:29 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1f1t19-0000F4-D6 for pgsql-hackers@arkaria.postgresql.org; Fri, 30 Mar 2018 12:20:27 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1f1t18-0000Eu-FF for pgsql-hackers@lists.postgresql.org; Fri, 30 Mar 2018 12:20:27 +0000 Received: from mail.postgrespro.ru ([93.174.131.138]) by makus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1f1t10-0003PO-Ba for pgsql-hackers@postgresql.org; Fri, 30 Mar 2018 12:20:25 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id 966F821C2AE7; Fri, 30 Mar 2018 15:20:16 +0300 (MSK) X-Virus-Scanned: Debian amavisd-new at postgrespro.ru X-Spam-Flag: NO X-Spam-Score: 0 X-Spam-Level: X-Spam-Status: No, score=x tagged_above=-99 required=4 WHITELISTED tests=[] autolearn=unavailable Received: from mail.postgrespro.ru (cyclops.l.postgrespro.ru [192.168.27.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 3C03B21C2AB9; Fri, 30 Mar 2018 15:20:16 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1522412416; bh=cb3VTYQF9v3azSN/tnCkIkWt/ZRlV4WfpzPfho4To2g=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=XdKEHCE58BJYSFYSp0UUKeqY0JQ0aR//gNJlgOZZkyTJjiri2XmXCI8H8lVGyOqNS Fkl01b8caZw2sH1ZMYd2iPv1NsHbfHsEPep2CXx5Q7mmLLZrImV+1QfQFIC+dlA6KU wRmfFtN8C0xo0WoyKENZDvLl1tmE5nVYaH6kZGsk= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_2a791287a95a0d33a8c0f872bb13c758" Date: Fri, 30 Mar 2018 15:20:16 +0300 From: Marina Polyakova To: Teodor Sigaev , Fabien COELHO Cc: pgsql-hackers@postgresql.org Subject: Re: [HACKERS] WIP Patch: Pgbench Serialization and deadlock errors Organization: Postgres Professional In-Reply-To: References: <72a0d590d6ba06f242d75c2e641820ec@postgrespro.ru> <72ca61a8-b515-1bac-b082-b77952c78b64@sigaev.ru> <9c5bf620e050e0803d2a8828a9e9bdb4@postgrespro.ru> <8ab4a743-321a-1714-86ef-19fee348451d@sigaev.ru> Message-ID: X-Sender: m.polyakova@postgrespro.ru User-Agent: Roundcube Webmail/1.2.4 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_2a791287a95a0d33a8c0f872bb13c758 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed On 29-03-2018 22:39, Fabien COELHO wrote: >> Conception of max-retry option seems strange for me. if number of >> retries reaches max-retry option, then we just increment counter of >> failed transaction and try again (possibly, with different random >> numbers). Then the client starts another script, but by chance or by the number of scripts it can be the same. >> At the end we should distinguish number of error transaction and >> failed transaction, to found this difference documentation suggests >> to rerun pgbench with debugging on. If I understood you correctly, this difference is the total number of retries and this is included in all reports. >> May be I didn't catch an idea, but it seems to me max-tries should be >> removed. On transaction searialization or deadlock error pgbench >> should increment counter of failed transaction, resets conditional >> stack, variables, etc but not a random generator and then start new >> transaction for the first line of script. When I sent the first version of the patch there were only rollbacks, and the idea to retry failed transactions was approved (see [1], [2], [3], [4]). And thank you, I fixed the patch to reset the client variables in case of errors too, and not only in case of retries (see attached, it is based on the commit 3da7502cd00ddf8228c9a4a7e4a08725decff99c). > ISTM that there is the idea is that the client application should give > up at some point are report an error to the end user, kind of a > "timeout" on trying, and that max-retry would implement this logic of > giving up: the transaction which was intented, represented by a given > initial random generator state, could not be committed as if after > some iterations. > > Maybe the max retry should rather be expressed in time rather than > number of attempts, or both approach could be implemented? But there > is a logic of retrying the same (try again what the client wanted) vs > retrying something different (another client need is served). I'm afraid that we will have a problem in debugging mode: should we report a failure (which will be retried) or an error (which will not be retried)? Because only after executing the following script commands (to rollback this transaction block) we will know the time that we spent on the execution of the current script.. [1] https://www.postgresql.org/message-id/CACjxUsOfbn72EaH4i_OuzdY-0PUYfg1Y3o8G27tEA8fJOaPQEw%40mail.gmail.com [2] https://www.postgresql.org/message-id/20170615211806.sfkpiy2acoavpovl%40alvherre.pgsql [3] https://www.postgresql.org/message-id/CAEepm%3D3TRTc9Fy%3DfdFThDa4STzPTR6w%3DRGfYEPikEkc-Lcd%2BMw%40mail.gmail.com [4] https://www.postgresql.org/message-id/CACjxUsOQw%3DvYjPWZQ29GmgWU8ZKj336OGiNQX5Z2W-AcV12%2BNw%40mail.gmail.com -- Marina Polyakova Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_2a791287a95a0d33a8c0f872bb13c758 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v6-0001-Pgbench-errors-and-serialization-deadlock-retries.patch Content-Disposition: attachment; filename=v6-0001-Pgbench-errors-and-serialization-deadlock-retries.patch; size=126628 RnJvbSAyNTc5MWVhYjcxYTEwYTQ2MmM4ZjBhMGZiMjRkOTg0NTJlMDY5YjlmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbmEgUG9seWFrb3ZhIDxtLnBvbHlha292YUBwb3N0Z3Jl c3Byby5ydT4KRGF0ZTogRnJpLCAzMCBNYXIgMjAxOCAxNTowODo0OCArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjZdIFBnYmVuY2ggZXJyb3JzIGFuZCBzZXJpYWxpemF0aW9uL2RlYWRsb2NrIHJldHJp ZXMKCkNsaWVudCdzIHJ1biBpcyBhYm9ydGVkIG9ubHkgaW4gY2FzZSBvZiBhIHNlcmlvdXMgZXJy b3IsIGZvciBleGFtcGxlLCB0aGUKY29ubmVjdGlvbiB3aXRoIHRoZSBiYWNrZW5kIHdhcyBsb3N0 LiBPdGhlcndpc2UgaWYgdGhlIGV4ZWN1dGlvbiBvZiBTUUwgb3IgbWV0YQpjb21tYW5kIGZhaWxz LCB0aGUgY2xpZW50J3MgcnVuIGNvbnRpbnVlcyBub3JtYWxseSB1bnRpbCB0aGUgZW5kIG9mIHRo ZSBjdXJyZW50CnNjcmlwdCBleGVjdXRpb24gKGl0IGlzIGFzc3VtZWQgdGhhdCBvbmUgdHJhbnNh Y3Rpb24gc2NyaXB0IGNvbnRhaW5zIG9ubHkgb25lCnRyYW5zYWN0aW9uKS4KClRyYW5zYWN0aW9u cyB3aXRoIHNlcmlhbGl6YXRpb24gb3IgZGVhZGxvY2sgZmFpbHVyZXMgY2FuIGJlIHJvbGxlZCBi YWNrIGFuZApyZXRyaWVkIGFnYWluIGFuZCBhZ2FpbiB1bnRpbCB0aGV5IGVuZCBzdWNjZXNzZnVs bHkgb3IgdGhlaXIgbnVtYmVyIG9mIHRyaWVzCnJlYWNoZXMgbWF4aW11bS4gWW91IGNhbiBzZXQg dGhlIG1heGltdW0gbnVtYmVyIG9mIHRyaWVzIGJ5IHVzaW5nIHRoZQphcHByb3ByaWF0ZSBiZW5j aG1hcmtpbmcgb3B0aW9uICgtLW1heC10cmllcykuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEuCgpJ ZiB0aGVyZSdyZSByZXRyaWVzIGFuZC9vciBlcnJvcnMgdGhlaXIgc3RhdGlzdGljcyBhcmUgcHJp bnRlZCBpbiB0aGUgcHJvZ3Jlc3MsCmluIHRoZSB0cmFuc2FjdGlvbiAvIGFnZ3JlZ2F0aW9uIGxv Z3MgYW5kIGluIHRoZSBlbmQgd2l0aCBvdGhlciByZXN1bHRzIChhbGwgYW5kCmZvciBlYWNoIHNj cmlwdCkuIEEgdHJhbnNhY3Rpb24gZXJyb3IgaXMgcmVwb3J0ZWQgaGVyZSBvbmx5IGlmIHRoZSBs YXN0IHRyeSBvZgp0aGlzIHRyYW5zYWN0aW9uIGZhaWxzLiBBbHNvIHJldHJpZXMgYW5kL29yIGVy cm9ycyBhcmUgcHJpbnRlZCBwZXItY29tbWFuZCB3aXRoCmF2ZXJhZ2UgbGF0ZW5jaWVzIGlmIHlv dSB1c2UgdGhlIGFwcHJvcHJpYXRlIGJlbmNobWFya2luZyBvcHRpb24KKC0tcmVwb3J0LXBlci1j b21tYW5kLCAtcikgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgcmV0cmllcyBhbmQvb3IgZXJyb3Jz IGlzIG5vdAp6ZXJvLgoKSWYgYSBmYWlsZWQgdHJhbnNhY3Rpb24gYmxvY2sgZG9lcyBub3QgdGVy bWluYXRlIGluIHRoZSBjdXJyZW50IHNjcmlwdCwgdGhlCmNvbW1hbmRzIG9mIHRoZSBmb2xsb3dp bmcgc2NyaXB0cyBhcmUgcHJvY2Vzc2VkIGFzIHVzdWFsIHNvIHlvdSBjYW4gZ2V0IGEgbG90IG9m CmVycm9ycyBvZiB0eXBlICJpbiBmYWlsZWQgU1FMIHRyYW5zYWN0aW9uIiAod2hlbiB0aGUgY3Vy cmVudCBTUUwgdHJhbnNhY3Rpb24gaXMKYWJvcnRlZCBhbmQgY29tbWFuZHMgaWdub3JlZCB1bnRp bCBlbmQgb2YgdHJhbnNhY3Rpb24gYmxvY2spLiBJbiBzdWNoIGNhc2VzIHlvdQpjYW4gdXNlIHNl cGFyYXRlIHN0YXRpc3RpY3Mgb2YgdGhlc2UgZXJyb3JzIGluIGFsbCByZXBvcnRzLgoKSWYgeW91 IHdhbnQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBmYWlsdXJlcyBvciBlcnJvcnMgYnkgdHlwZSwg dXNlIHRoZSBwZ2JlbmNoCmRlYnVnZ2luZyBvdXRwdXQgY3JlYXRlZCB3aXRoIHRoZSBvcHRpb24g LS1kZWJ1ZyBhbmQgd2l0aCB0aGUgZGVidWdnaW5nIGxldmVsCiJmYWlscyIgb3IgImFsbCIuIFRo ZSBmaXJzdCB2YXJpYW50IGlzIHJlY29tbWVuZGVkIGZvciB0aGlzIHB1cnBvc2UgYmVjYXVzZSB3 aXRoCmluIHRoZSBzZWNvbmQgY2FzZSB0aGUgZGVidWdnaW5nIG91dHB1dCBjYW4gYmUgdmVyeSBs YXJnZS4KLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL3BnYmVuY2guc2dtbCAgICAgICAgICAgICAgICAg ICAgICB8ICAzMDYgKysrKystCiBzcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jICAgICAgICAgICAg ICAgICAgICAgICAgICB8IDExNTcgKysrKysrKysrKysrKysrKy0tLS0KIHNyYy9iaW4vcGdiZW5j aC90LzAwMV9wZ2JlbmNoX3dpdGhfc2VydmVyLnBsICAgICAgIHwgICAzOSArLQogc3JjL2Jpbi9w Z2JlbmNoL3QvMDAyX3BnYmVuY2hfbm9fc2VydmVyLnBsICAgICAgICAgfCAgICAyICstCiAuLi4v dC8wMDNfc2VyaWFsaXphdGlvbl9hbmRfZGVhZGxvY2tfZmFpbHMucGwgICAgICB8ICA4MTUgKysr KysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgMjA0NyBpbnNlcnRpb25zKCspLCAyNzIgZGVs ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ2JlbmNoL3QvMDAzX3Nlcmlh bGl6YXRpb25fYW5kX2RlYWRsb2NrX2ZhaWxzLnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L3JlZi9wZ2JlbmNoLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnYmVuY2guc2dtbAppbmRleCA0 MWQ5MDMwLi41MjYyYmQ0IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnYmVuY2guc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnYmVuY2guc2dtbApAQCAtNTUsMTYgKzU1LDE5IEBA IG51bWJlciBvZiBjbGllbnRzOiAxMAogbnVtYmVyIG9mIHRocmVhZHM6IDEKIG51bWJlciBvZiB0 cmFuc2FjdGlvbnMgcGVyIGNsaWVudDogMTAwMAogbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBhY3R1 YWxseSBwcm9jZXNzZWQ6IDEwMDAwLzEwMDAwCittYXhpbXVtIG51bWJlciBvZiB0cmllczogMQog dHBzID0gODUuMTg0ODcxIChpbmNsdWRpbmcgY29ubmVjdGlvbnMgZXN0YWJsaXNoaW5nKQogdHBz ID0gODUuMjk2MzQ2IChleGNsdWRpbmcgY29ubmVjdGlvbnMgZXN0YWJsaXNoaW5nKQogPC9zY3Jl ZW4+CiAKLSAgVGhlIGZpcnN0IHNpeCBsaW5lcyByZXBvcnQgc29tZSBvZiB0aGUgbW9zdCBpbXBv cnRhbnQgcGFyYW1ldGVyCi0gIHNldHRpbmdzLiAgVGhlIG5leHQgbGluZSByZXBvcnRzIHRoZSBu dW1iZXIgb2YgdHJhbnNhY3Rpb25zIGNvbXBsZXRlZAotICBhbmQgaW50ZW5kZWQgKHRoZSBsYXR0 ZXIgYmVpbmcganVzdCB0aGUgcHJvZHVjdCBvZiBudW1iZXIgb2YgY2xpZW50cworICBUaGUgZmly c3Qgc2l4IGxpbmVzIGFuZCB0aGUgZWlnaHRoIGxpbmUgcmVwb3J0IHNvbWUgb2YgdGhlIG1vc3Qg aW1wb3J0YW50CisgIHBhcmFtZXRlciBzZXR0aW5ncy4gIFRoZSBzZXZlbnRoIGxpbmUgcmVwb3J0 cyB0aGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9ucworICBjb21wbGV0ZWQgYW5kIGludGVuZGVkICh0 aGUgbGF0dGVyIGJlaW5nIGp1c3QgdGhlIHByb2R1Y3Qgb2YgbnVtYmVyIG9mIGNsaWVudHMKICAg YW5kIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgcGVyIGNsaWVudCk7IHRoZXNlIHdpbGwgYmUgZXF1 YWwgdW5sZXNzIHRoZSBydW4KLSAgZmFpbGVkIGJlZm9yZSBjb21wbGV0aW9uLiAgKEluIDxvcHRp b24+LVQ8L29wdGlvbj4gbW9kZSwgb25seSB0aGUgYWN0dWFsCi0gIG51bWJlciBvZiB0cmFuc2Fj dGlvbnMgaXMgcHJpbnRlZC4pCisgIGZhaWxlZCBiZWZvcmUgY29tcGxldGlvbiBvciBzb21lIFNR TC9tZXRhIGNvbW1hbmQocykgZmFpbGVkLiAgKEluCisgIDxvcHRpb24+LVQ8L29wdGlvbj4gbW9k ZSwgb25seSB0aGUgYWN0dWFsIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgaXMgcHJpbnRlZC4pCisg IChzZWUgPHhyZWYgbGlua2VuZD0iZXJyb3JzLWFuZC1yZXRyaWVzIiBlbmR0ZXJtPSJlcnJvcnMt YW5kLXJldHJpZXMtdGl0bGUiLz4KKyAgZm9yIG1vcmUgaW5mb3JtYXRpb24pCiAgIFRoZSBsYXN0 IHR3byBsaW5lcyByZXBvcnQgdGhlIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgcGVyIHNlY29uZCwK ICAgZmlndXJlZCB3aXRoIGFuZCB3aXRob3V0IGNvdW50aW5nIHRoZSB0aW1lIHRvIHN0YXJ0IGRh dGFiYXNlIHNlc3Npb25zLgogIDwvcGFyYT4KQEAgLTM4MCwxMSArMzgzLDI4IEBAIHBnYmVuY2gg PG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+b3B0aW9uczwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+ IDxyZXBsYWNlYWJsZT5kCiAgICAgIDwvdmFybGlzdGVudHJ5PgogCiAgICAgIDx2YXJsaXN0ZW50 cnk+Ci0gICAgICA8dGVybT48b3B0aW9uPi1kPC9vcHRpb24+PC90ZXJtPgotICAgICAgPHRlcm0+ PG9wdGlvbj4tLWRlYnVnPC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tZDwv b3B0aW9uPiA8cmVwbGFjZWFibGU+ZGVidWdfbGV2ZWw8L3JlcGxhY2VhYmxlPjwvdGVybT4KKyAg ICAgIDx0ZXJtPjxvcHRpb24+LS1kZWJ1Zz08L29wdGlvbj48cmVwbGFjZWFibGU+ZGVidWdfbGV2 ZWw8L3JlcGxhY2VhYmxlPjwvdGVybT4KICAgICAgIDxsaXN0aXRlbT4KICAgICAgICA8cGFyYT4K LSAgICAgICAgUHJpbnQgZGVidWdnaW5nIG91dHB1dC4KKyAgICAgICAgUHJpbnQgZGVidWdnaW5n IG91dHB1dC4gWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBkZWJ1Z2dpbmcgbGV2ZWxzOgorICAg ICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAg IDxwYXJhPjxsaXRlcmFsPm5vPC9saXRlcmFsPjogbm8gZGVidWdnaW5nIG91dHB1dCAoZXhjZXB0 IGJ1aWx0LWluCisgICAgICAgICAgICBmdW5jdGlvbiA8ZnVuY3Rpb24+ZGVidWc8L2Z1bmN0aW9u Piwgc2VlIDx4cmVmCisgICAgICAgICAgICBsaW5rZW5kPSJwZ2JlbmNoLWZ1bmN0aW9ucyIvPiku PC9wYXJhPgorICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgICAgICA8cGFyYT48bGl0ZXJhbD5mYWlsczwvbGl0ZXJhbD46IHByaW50IG9ubHkgZXJy b3IgbWVzc2FnZXMgYW5kCisgICAgICAgICAgICBmYWlsdXJlcyAoc2VlIDx4cmVmIGxpbmtlbmQ9 ImVycm9ycy1hbmQtcmV0cmllcyIKKyAgICAgICAgICAgIGVuZHRlcm09ImVycm9ycy1hbmQtcmV0 cmllcy10aXRsZSIvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuPC9wYXJhPgorICAgICAgICAgICA8 L2xpc3RpdGVtPgorICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT48bGl0 ZXJhbD5hbGw8L2xpdGVyYWw+OiBwcmludCBhbGwgZGVidWdnaW5nIG91dHB1dAorICAgICAgICAg ICAgKHRocm90dGxpbmcsIGV4ZWN1dGVkL3NlbnQvcmVjZWl2ZWQgY29tbWFuZHMgZXRjLikuPC9w YXJhPgorICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0Pgor ICAgICAgICBUaGUgZGVmYXVsdCBpcyBubyBkZWJ1Z2dpbmcgb3V0cHV0LgogICAgICAgIDwvcGFy YT4KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgpAQCAtNTEzLDIyICs1 MzMsMzcgQEAgcGdiZW5jaCA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5vcHRpb25zPC9yZXBsYWNl YWJsZT4gPC9vcHRpb25hbD4gPHJlcGxhY2VhYmxlPmQKICAgICAgICAgU2hvdyBwcm9ncmVzcyBy ZXBvcnQgZXZlcnkgPHJlcGxhY2VhYmxlPnNlYzwvcmVwbGFjZWFibGU+IHNlY29uZHMuICBUaGUg cmVwb3J0CiAgICAgICAgIGluY2x1ZGVzIHRoZSB0aW1lIHNpbmNlIHRoZSBiZWdpbm5pbmcgb2Yg dGhlIHJ1biwgdGhlIHRwcyBzaW5jZSB0aGUKICAgICAgICAgbGFzdCByZXBvcnQsIGFuZCB0aGUg dHJhbnNhY3Rpb24gbGF0ZW5jeSBhdmVyYWdlIGFuZCBzdGFuZGFyZAotICAgICAgICBkZXZpYXRp b24gc2luY2UgdGhlIGxhc3QgcmVwb3J0LiAgVW5kZXIgdGhyb3R0bGluZyAoPG9wdGlvbj4tUjwv b3B0aW9uPiksCi0gICAgICAgIHRoZSBsYXRlbmN5IGlzIGNvbXB1dGVkIHdpdGggcmVzcGVjdCB0 byB0aGUgdHJhbnNhY3Rpb24gc2NoZWR1bGVkCi0gICAgICAgIHN0YXJ0IHRpbWUsIG5vdCB0aGUg YWN0dWFsIHRyYW5zYWN0aW9uIGJlZ2lubmluZyB0aW1lLCB0aHVzIGl0IGFsc28KLSAgICAgICAg aW5jbHVkZXMgdGhlIGF2ZXJhZ2Ugc2NoZWR1bGUgbGFnIHRpbWUuCisgICAgICAgIGRldmlhdGlv biBzaW5jZSB0aGUgbGFzdCByZXBvcnQuICBJZiBhbnkgdHJhbnNhY3Rpb25zIGVuZGVkIHdpdGgg YQorICAgICAgICBmYWlsZWQgU1FMIG9yIG1ldGEgY29tbWFuZCBzaW5jZSB0aGUgbGFzdCByZXBv cnQsIHRoZXkgYXJlIGFsc28gcmVwb3J0ZWQKKyAgICAgICAgYXMgZmFpbGVkLiAgSWYgYW55IHRy YW5zYWN0aW9ucyBlbmRlZCB3aXRoIGFuIGVycm9yICJpbiBmYWlsZWQgU1FMCisgICAgICAgIHRy YW5zYWN0aW9uIGJsb2NrIiwgdGhleSBhcmUgcmVwb3J0ZWQgc2VwYXJhdGx5IGFzIDxsaXRlcmFs PmluIGZhaWxlZAorICAgICAgICB0eDwvbGl0ZXJhbD4gKHNlZSA8eHJlZiBsaW5rZW5kPSJlcnJv cnMtYW5kLXJldHJpZXMiCisgICAgICAgIGVuZHRlcm09ImVycm9ycy1hbmQtcmV0cmllcy10aXRs ZSIvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuICBVbmRlcgorICAgICAgICB0aHJvdHRsaW5nICg8 b3B0aW9uPi1SPC9vcHRpb24+KSwgdGhlIGxhdGVuY3kgaXMgY29tcHV0ZWQgd2l0aCByZXNwZWN0 CisgICAgICAgIHRvIHRoZSB0cmFuc2FjdGlvbiBzY2hlZHVsZWQgc3RhcnQgdGltZSwgbm90IHRo ZSBhY3R1YWwgdHJhbnNhY3Rpb24KKyAgICAgICAgYmVnaW5uaW5nIHRpbWUsIHRodXMgaXQgYWxz byBpbmNsdWRlcyB0aGUgYXZlcmFnZSBzY2hlZHVsZSBsYWcgdGltZS4gIElmCisgICAgICAgIGFu eSB0cmFuc2FjdGlvbnMgaGF2ZSBiZWVuIHJvbGxlZCBiYWNrIGFuZCByZXRyaWVkIGFmdGVyIGEK KyAgICAgICAgc2VyaWFsaXphdGlvbi9kZWFkbG9jayBmYWlsdXJlIHNpbmNlIHRoZSBsYXN0IHJl cG9ydCwgdGhlIHJlcG9ydAorICAgICAgICBpbmNsdWRlcyB0aGUgbnVtYmVyIG9mIHN1Y2ggdHJh bnNhY3Rpb25zIGFuZCB0aGUgc3VtIG9mIGFsbCByZXRyaWVzLiBVc2UKKyAgICAgICAgdGhlIDxv cHRpb24+LS1tYXgtdHJpZXM8L29wdGlvbj4gdG8gZW5hYmxlIHRyYW5zYWN0aW9ucyByZXRyaWVz IGFmdGVyCisgICAgICAgIHNlcmlhbGl6YXRpb24vZGVhZGxvY2sgZmFpbHVyZXMuCiAgICAgICAg PC9wYXJhPgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKICAgICAg PHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LXI8L29wdGlvbj48L3Rlcm0+Ci0g ICAgICA8dGVybT48b3B0aW9uPi0tcmVwb3J0LWxhdGVuY2llczwvb3B0aW9uPjwvdGVybT4KKyAg ICAgIDx0ZXJtPjxvcHRpb24+LS1yZXBvcnQtcGVyLWNvbW1hbmQ8L29wdGlvbj48L3Rlcm0+CiAg ICAgICA8bGlzdGl0ZW0+CiAgICAgICAgPHBhcmE+Ci0gICAgICAgIFJlcG9ydCB0aGUgYXZlcmFn ZSBwZXItc3RhdGVtZW50IGxhdGVuY3kgKGV4ZWN1dGlvbiB0aW1lIGZyb20gdGhlCi0gICAgICAg IHBlcnNwZWN0aXZlIG9mIHRoZSBjbGllbnQpIG9mIGVhY2ggY29tbWFuZCBhZnRlciB0aGUgYmVu Y2htYXJrCi0gICAgICAgIGZpbmlzaGVzLiAgU2VlIGJlbG93IGZvciBkZXRhaWxzLgorICAgICAg ICBSZXBvcnQgdGhlIGZvbGxvd2luZyBzdGF0aXN0aWNzIGZvciBlYWNoIGNvbW1hbmQgYWZ0ZXIg dGhlIGJlbmNobWFyaworICAgICAgICBmaW5pc2hlczogdGhlIGF2ZXJhZ2UgcGVyLXN0YXRlbWVu dCBsYXRlbmN5IChleGVjdXRpb24gdGltZSBmcm9tIHRoZQorICAgICAgICBwZXJzcGVjdGl2ZSBv ZiB0aGUgY2xpZW50KSwgdGhlIG51bWJlciBvZiBhbGwgZXJyb3JzLCB0aGUgbnVtYmVyIG9mCisg ICAgICAgIGVycm9ycyAiaW4gZmFpbGVkIFNRTCB0cmFuc2FjdGlvbiBibG9jayIsIGFuZCB0aGUg bnVtYmVyIG9mIHJldHJpZXMKKyAgICAgICAgYWZ0ZXIgc2VyaWFsaXphdGlvbiBvciBkZWFkbG9j ayBmYWlsdXJlcy4gIFRoZSByZXBvcnQgZGlzcGxheXMgdGhlCisgICAgICAgIGNvbHVtbnMgd2l0 aCBzdGF0aXN0aWNzIG9uIGVycm9ycyBhbmQgcmV0cmllcyBvbmx5IGlmIHRoZSBjdXJyZW50Cisg ICAgICAgIDxhcHBsaWNhdGlvbj5wZ2JlbmNoPC9hcHBsaWNhdGlvbj4gcnVuIGhhcyBhbiBlcnJv ciBvZiB0aGUgY29ycmVzcG9uZGluZworICAgICAgICB0eXBlIG9yIHJldHJ5LCByZXNwZWN0aXZl bHkuIFNlZSBiZWxvdyBmb3IgZGV0YWlscy4KICAgICAgICA8L3BhcmE+CiAgICAgICA8L2xpc3Rp dGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KQEAgLTY2Nyw2ICs3MDIsMzUgQEAgcGdiZW5jaCA8 b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5vcHRpb25zPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4g PHJlcGxhY2VhYmxlPmQKICAgICAgPC92YXJsaXN0ZW50cnk+CiAKICAgICAgPHZhcmxpc3RlbnRy eT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1tYXgtdHJpZXM9PHJlcGxhY2VhYmxlPm51bWJlcl9v Zl90cmllczwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgor ICAgICAgIDxwYXJhPgorICAgICAgICBTZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRyaWVzIGZv ciB0cmFuc2FjdGlvbnMgd2l0aAorICAgICAgICBzZXJpYWxpemF0aW9uL2RlYWRsb2NrIGZhaWx1 cmVzLiBUaGUgZGVmYXVsdCBpcyAxLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8bm90ZT4KKyAg ICAgICAgPHBhcmE+CisgICAgICAgICBJbiA8YXBwbGljYXRpb24+cGdiZW5jaDwvYXBwbGljYXRp b24+IGl0IGlzIHVzdWFsbHkgYXNzdW1lZCB0aGF0IG9uZQorICAgICAgICAgdHJhbnNhY3Rpb24g c2NyaXB0IGNvbnRhaW5zIG9ubHkgb25lIHRyYW5zYWN0aW9uIChzZWUgPHhyZWYKKyAgICAgICAg IGxpbmtlbmQ9InRyYW5zYWN0aW9ucy1hbmQtc2NyaXB0cyIKKyAgICAgICAgIGVuZHRlcm09InRy YW5zYWN0aW9ucy1hbmQtc2NyaXB0cy10aXRsZSIvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuIEJl CisgICAgICAgICBjYXJlZnVsIHdoZW4gcmVwZWF0aW5nIHNjcmlwdHMgdGhhdCBjb250YWluIG11 bHRpcGxlIHRyYW5zYWN0aW9uczogdGhlCisgICAgICAgICBzY3JpcHQgaXMgYWx3YXlzIHJldHJp ZWQgY29tcGxldGVseSwgc28gdGhlIHN1Y2Nlc3NmdWwgdHJhbnNhY3Rpb25zIGNhbgorICAgICAg ICAgYmUgcGVyZm9ybWVkIHNldmVyYWwgdGltZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8 L25vdGU+CisgICAgICAgPG5vdGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgQmUgY2FyZWZ1 bCB3aGVuIHJlcGVhdGluZyB0cmFuc2FjdGlvbnMgd2l0aCBzaGVsbCBjb21tYW5kcy4gVW5saWtl IHRoZQorICAgICAgICAgcmVzdWx0cyBvZiBTUUwgY29tbWFuZHMsIHRoZSByZXN1bHRzIG9mIHNo ZWxsIGNvbW1hbmRzIGFyZSBub3Qgcm9sbGVkCisgICAgICAgICBiYWNrLCBleGNlcHQgZm9yIHRo ZSB2YXJpYWJsZSB2YWx1ZSBvZiB0aGUgPGNvbW1hbmQ+XHNldHNoZWxsPC9jb21tYW5kPgorICAg ICAgICAgY29tbWFuZC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgIDwvbm90ZT4KKyAgICAgIDwv bGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgIDx2YXJsaXN0ZW50cnk+CiAg ICAgICA8dGVybT48b3B0aW9uPi0tcHJvZ3Jlc3MtdGltZXN0YW1wPC9vcHRpb24+PC90ZXJtPgog ICAgICAgPGxpc3RpdGVtPgogICAgICAgIDxwYXJhPgpAQCAtODA3LDggKzg3MSw4IEBAIHBnYmVu Y2ggPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+b3B0aW9uczwvcmVwbGFjZWFibGU+IDwvb3B0aW9u YWw+IDxyZXBsYWNlYWJsZT5kCiAgPHJlZnNlY3QxPgogICA8dGl0bGU+Tm90ZXM8L3RpdGxlPgog Ci0gPHJlZnNlY3QyPgotICA8dGl0bGU+V2hhdCBpcyB0aGUgPHF1b3RlPlRyYW5zYWN0aW9uPC9x dW90ZT4gQWN0dWFsbHkgUGVyZm9ybWVkIGluIDxhcHBsaWNhdGlvbj5wZ2JlbmNoPC9hcHBsaWNh dGlvbj4/PC90aXRsZT4KKyA8cmVmc2VjdDIgaWQ9InRyYW5zYWN0aW9ucy1hbmQtc2NyaXB0cyI+ CisgIDx0aXRsZSBpZD0idHJhbnNhY3Rpb25zLWFuZC1zY3JpcHRzLXRpdGxlIj5XaGF0IGlzIHRo ZSA8cXVvdGU+VHJhbnNhY3Rpb248L3F1b3RlPiBBY3R1YWxseSBQZXJmb3JtZWQgaW4gPGFwcGxp Y2F0aW9uPnBnYmVuY2g8L2FwcGxpY2F0aW9uPj88L3RpdGxlPgogCiAgIDxwYXJhPgogICAgPGFw cGxpY2F0aW9uPnBnYmVuY2g8L2FwcGxpY2F0aW9uPiBleGVjdXRlcyB0ZXN0IHNjcmlwdHMgY2hv c2VuIHJhbmRvbWx5CkBAIC0xNTgzLDcgKzE2NDcsNyBAQCBFTkQ7CiAgICBUaGUgZm9ybWF0IG9m IHRoZSBsb2cgaXM6CiAKIDxzeW5vcHNpcz4KLTxyZXBsYWNlYWJsZT5jbGllbnRfaWQ8L3JlcGxh Y2VhYmxlPiA8cmVwbGFjZWFibGU+dHJhbnNhY3Rpb25fbm88L3JlcGxhY2VhYmxlPiA8cmVwbGFj ZWFibGU+dGltZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5zY3JpcHRfbm88L3JlcGxhY2Vh YmxlPiA8cmVwbGFjZWFibGU+dGltZV9lcG9jaDwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT50 aW1lX3VzPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+c2NoZWR1bGVfbGFn PC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4KKzxyZXBsYWNlYWJsZT5jbGllbnRfaWQ8L3JlcGxh Y2VhYmxlPiA8cmVwbGFjZWFibGU+dHJhbnNhY3Rpb25fbm88L3JlcGxhY2VhYmxlPiA8cmVwbGFj ZWFibGU+dGltZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5zY3JpcHRfbm88L3JlcGxhY2Vh YmxlPiA8cmVwbGFjZWFibGU+dGltZV9lcG9jaDwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT50 aW1lX3VzPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+c2NoZWR1bGVfbGFn PC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4gPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+cmV0cmll czwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+CiA8L3N5bm9wc2lzPgogCiAgICB3aGVyZQpAQCAt MTYwNCw2ICsxNjY4LDE1IEBAIEVORDsKICAgIFdoZW4gYm90aCA8b3B0aW9uPi0tcmF0ZTwvb3B0 aW9uPiBhbmQgPG9wdGlvbj4tLWxhdGVuY3ktbGltaXQ8L29wdGlvbj4gYXJlIHVzZWQsCiAgICB0 aGUgPHJlcGxhY2VhYmxlPnRpbWU8L3JlcGxhY2VhYmxlPiBmb3IgYSBza2lwcGVkIHRyYW5zYWN0 aW9uIHdpbGwgYmUgcmVwb3J0ZWQgYXMKICAgIDxsaXRlcmFsPnNraXBwZWQ8L2xpdGVyYWw+Lgor ICAgPHJlcGxhY2VhYmxlPnJldHJpZXM8L3JlcGxhY2VhYmxlPiBpcyB0aGUgc3VtIG9mIGFsbCB0 aGUgcmV0cmllcyBhZnRlciB0aGUKKyAgIHNlcmlhbGl6YXRpb24gb3IgZGVhZGxvY2sgZmFpbHVy ZXMgZHVyaW5nIHRoZSBjdXJyZW50IHNjcmlwdCBleGVjdXRpb24uIEl0IGlzCisgICBvbmx5IHBy ZXNlbnQgd2hlbiB0aGUgbWF4aW11bSBudW1iZXIgb2YgdHJpZXMgZm9yIHRyYW5zYWN0aW9ucyBp cyBtb3JlIHRoYW4gMQorICAgKDxvcHRpb24+LS1tYXgtdHJpZXM8L29wdGlvbj4pLiBJZiB0aGUg dHJhbnNhY3Rpb24gZW5kZWQgd2l0aCBhbiBlcnJvciAiaW4KKyAgIGZhaWxlZCBTUUwgdHJhbnNh Y3Rpb24iLCBpdHMgPHJlcGxhY2VhYmxlPnRpbWU8L3JlcGxhY2VhYmxlPiB3aWxsIGJlIHJlcG9y dGVkCisgICBhcyA8bGl0ZXJhbD5pbl9mYWlsZWRfdHg8L2xpdGVyYWw+LiBJZiB0aGUgdHJhbnNh Y3Rpb24gZW5kZWQgd2l0aCBvdGhlcgorICAgZXJyb3IsIGl0cyA8cmVwbGFjZWFibGU+dGltZTwv cmVwbGFjZWFibGU+IHdpbGwgYmUgcmVwb3J0ZWQgYXMKKyAgIDxsaXRlcmFsPmZhaWxlZDwvbGl0 ZXJhbD4gKHNlZSA8eHJlZiBsaW5rZW5kPSJlcnJvcnMtYW5kLXJldHJpZXMiCisgICBlbmR0ZXJt PSJlcnJvcnMtYW5kLXJldHJpZXMtdGl0bGUiLz4gZm9yIG1vcmUgaW5mb3JtYXRpb24pLgogICA8 L3BhcmE+CiAKICAgPHBhcmE+CkBAIC0xNjMzLDYgKzE3MDYsMjMgQEAgRU5EOwogICA8L3BhcmE+ CiAKICAgPHBhcmE+CisgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgYSBzbmlwcGV0IG9m IGEgbG9nIGZpbGUgd2l0aCBlcnJvcnMgYW5kIHJldHJpZXMsCisgICB3aXRoIHRoZSBtYXhpbXVt IG51bWJlciBvZiB0cmllcyBzZXQgdG8gMTA6Cis8c2NyZWVuPgorMyAwIDQ3NDIzIDAgMTQ5OTQx NDQ5OCAzNDUwMSA0CiszIDEgODMzMyAwIDE0OTk0MTQ0OTggNDI4NDggMQorMyAyIDgzNTggMCAx NDk5NDE0NDk4IDUxMjE5IDEKKzQgMCA3MjM0NSAwIDE0OTk0MTQ0OTggNTk0MzMgNworMSAzIDQx NzE4IDAgMTQ5OTQxNDQ5OCA2Nzg3OSA1CisxIDQgODQxNiAwIDE0OTk0MTQ0OTggNzYzMTEgMQor MyAzIDMzMjM1IDAgMTQ5OTQxNDQ5OCA4NDQ2OSA0CiswIDAgZmFpbGVkIDAgMTQ5OTQxNDQ5OCA4 NDkwNSAxMAorMiAwIGZhaWxlZCAwIDE0OTk0MTQ0OTggODYyNDggMTAKKzMgNCA4MzA3IDAgMTQ5 OTQxNDQ5OCA5Mjc4OCAxCis8L3NjcmVlbj4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgogICAgV2hl biBydW5uaW5nIGEgbG9uZyB0ZXN0IG9uIGhhcmR3YXJlIHRoYXQgY2FuIGhhbmRsZSBhIGxvdCBv ZiB0cmFuc2FjdGlvbnMsCiAgICB0aGUgbG9nIGZpbGVzIGNhbiBiZWNvbWUgdmVyeSBsYXJnZS4g IFRoZSA8b3B0aW9uPi0tc2FtcGxpbmctcmF0ZTwvb3B0aW9uPiBvcHRpb24KICAgIGNhbiBiZSB1 c2VkIHRvIGxvZyBvbmx5IGEgcmFuZG9tIHNhbXBsZSBvZiB0cmFuc2FjdGlvbnMuCkBAIC0xNjQ3 LDcgKzE3MzcsNyBAQCBFTkQ7CiAgICBmb3JtYXQgaXMgdXNlZCBmb3IgdGhlIGxvZyBmaWxlczoK IAogPHN5bm9wc2lzPgotPHJlcGxhY2VhYmxlPmludGVydmFsX3N0YXJ0PC9yZXBsYWNlYWJsZT4g PHJlcGxhY2VhYmxlPm51bV90cmFuc2FjdGlvbnM8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+ c3VtX2xhdGVuY3k8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+c3VtX2xhdGVuY3lfMjwvcmVw bGFjZWFibGU+IDxyZXBsYWNlYWJsZT5taW5fbGF0ZW5jeTwvcmVwbGFjZWFibGU+IDxyZXBsYWNl YWJsZT5tYXhfbGF0ZW5jeTwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPnN1 bV9sYWc8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+c3VtX2xhZ18yPC9yZXBsYWNlYWJsZT4g PHJlcGxhY2VhYmxlPm1pbl9sYWc8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+bWF4X2xhZzwv cmVwbGFjZWFibGU+IDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPnNraXBwZWQ8L3JlcGxhY2VhYmxl PiA8L29wdGlvbmFsPiA8L29wdGlvbmFsPgorPHJlcGxhY2VhYmxlPmludGVydmFsX3N0YXJ0PC9y ZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPm51bV90cmFuc2FjdGlvbnM8L3JlcGxhY2VhYmxlPiA8 cmVwbGFjZWFibGU+c3VtX2xhdGVuY3k8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+c3VtX2xh dGVuY3lfMjwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5taW5fbGF0ZW5jeTwvcmVwbGFjZWFi bGU+IDxyZXBsYWNlYWJsZT5tYXhfbGF0ZW5jeTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5m YWlsZWRfdHg8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+aW5fZmFpbGVkX3R4PC9yZXBsYWNl YWJsZT4gPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+c3VtX2xhZzwvcmVwbGFjZWFibGU+IDxyZXBs YWNlYWJsZT5zdW1fbGFnXzI8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+bWluX2xhZzwvcmVw bGFjZWFibGU+IDxyZXBsYWNlYWJsZT5tYXhfbGFnPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiA8 cmVwbGFjZWFibGU+c2tpcHBlZDwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+IDwvb3B0aW9uYWw+ IDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPnJldHJpZWRfdHg8L3JlcGxhY2VhYmxlPiA8cmVwbGFj ZWFibGU+cmV0cmllczwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+CiA8L3N5bm9wc2lzPgogCiAg ICB3aGVyZQpAQCAtMTY2MSw3ICsxNzUxLDEzIEBAIEVORDsKICAgIHRyYW5zYWN0aW9uIGxhdGVu Y2llcyB3aXRoaW4gdGhlIGludGVydmFsLAogICAgPHJlcGxhY2VhYmxlPm1pbl9sYXRlbmN5PC9y ZXBsYWNlYWJsZT4gaXMgdGhlIG1pbmltdW0gbGF0ZW5jeSB3aXRoaW4gdGhlIGludGVydmFsLAog ICAgYW5kCi0gICA8cmVwbGFjZWFibGU+bWF4X2xhdGVuY3k8L3JlcGxhY2VhYmxlPiBpcyB0aGUg bWF4aW11bSBsYXRlbmN5IHdpdGhpbiB0aGUgaW50ZXJ2YWwuCisgICA8cmVwbGFjZWFibGU+bWF4 X2xhdGVuY3k8L3JlcGxhY2VhYmxlPiBpcyB0aGUgbWF4aW11bSBsYXRlbmN5IHdpdGhpbiB0aGUg aW50ZXJ2YWwsCisgICA8cmVwbGFjZWFibGU+ZmFpbGVkX3R4PC9yZXBsYWNlYWJsZT4gaXMgdGhl IG51bWJlciBvZiB0cmFuc2FjdGlvbnMgdGhhdCBlbmRlZAorICAgd2l0aCBhIGZhaWxlZCBTUUwg b3IgbWV0YSBjb21tYW5kIHdpdGhpbiB0aGUgaW50ZXJ2YWwsCisgICA8cmVwbGFjZWFibGU+aW5f ZmFpbGVkX3R4PC9yZXBsYWNlYWJsZT4gaXMgdGhlIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgdGhh dAorICAgZW5kZWQgd2l0aCBhbiBlcnJvciAiaW4gZmFpbGVkIFNRTCB0cmFuc2FjdGlvbiBibG9j ayIgKHNlZQorICAgPHhyZWYgbGlua2VuZD0iZXJyb3JzLWFuZC1yZXRyaWVzIiBlbmR0ZXJtPSJl cnJvcnMtYW5kLXJldHJpZXMtdGl0bGUiLz4KKyAgIGZvciBtb3JlIGluZm9ybWF0aW9uKS4KICAg IFRoZSBuZXh0IGZpZWxkcywKICAgIDxyZXBsYWNlYWJsZT5zdW1fbGFnPC9yZXBsYWNlYWJsZT4s IDxyZXBsYWNlYWJsZT5zdW1fbGFnXzI8L3JlcGxhY2VhYmxlPiwgPHJlcGxhY2VhYmxlPm1pbl9s YWc8L3JlcGxhY2VhYmxlPiwKICAgIGFuZCA8cmVwbGFjZWFibGU+bWF4X2xhZzwvcmVwbGFjZWFi bGU+LCBhcmUgb25seSBwcmVzZW50IGlmIHRoZSA8b3B0aW9uPi0tcmF0ZTwvb3B0aW9uPgpAQCAt MTY2OSwyMSArMTc2NSwyNyBAQCBFTkQ7CiAgICBUaGV5IHByb3ZpZGUgc3RhdGlzdGljcyBhYm91 dCB0aGUgdGltZSBlYWNoIHRyYW5zYWN0aW9uIGhhZCB0byB3YWl0IGZvciB0aGUKICAgIHByZXZp b3VzIG9uZSB0byBmaW5pc2gsIGkuZS4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBlYWNoIHRyYW5z YWN0aW9uJ3MKICAgIHNjaGVkdWxlZCBzdGFydCB0aW1lIGFuZCB0aGUgdGltZSBpdCBhY3R1YWxs eSBzdGFydGVkLgotICAgVGhlIHZlcnkgbGFzdCBmaWVsZCwgPHJlcGxhY2VhYmxlPnNraXBwZWQ8 L3JlcGxhY2VhYmxlPiwKKyAgIFRoZSBuZXh0IGZpZWxkLCA8cmVwbGFjZWFibGU+c2tpcHBlZDwv cmVwbGFjZWFibGU+LAogICAgaXMgb25seSBwcmVzZW50IGlmIHRoZSA8b3B0aW9uPi0tbGF0ZW5j eS1saW1pdDwvb3B0aW9uPiBvcHRpb24gaXMgdXNlZCwgdG9vLgogICAgSXQgY291bnRzIHRoZSBu dW1iZXIgb2YgdHJhbnNhY3Rpb25zIHNraXBwZWQgYmVjYXVzZSB0aGV5IHdvdWxkIGhhdmUKICAg IHN0YXJ0ZWQgdG9vIGxhdGUuCisgICBUaGUgPHJlcGxhY2VhYmxlPnJldHJpZWRfdHg8L3JlcGxh Y2VhYmxlPiBhbmQKKyAgIDxyZXBsYWNlYWJsZT5yZXRyaWVzPC9yZXBsYWNlYWJsZT4gZmllbGRz IGFyZSBvbmx5IHByZXNlbnQgaWYgdGhlIG1heGltdW0KKyAgIG51bWJlciBvZiB0cmllcyBmb3Ig dHJhbnNhY3Rpb25zIGlzIG1vcmUgdGhhbiAxCisgICAoPG9wdGlvbj4tLW1heC10cmllczwvb3B0 aW9uPikuIFRoZXkgcmVwb3J0IHRoZSBudW1iZXIgb2YgcmV0cmllZAorICAgdHJhbnNhY3Rpb25z IGFuZCB0aGUgc3VtIG9mIGFsbCB0aGUgcmV0cmllcyBhZnRlciBzZXJpYWxpemF0aW9uIG9yIGRl YWRsb2NrCisgICBmYWlsdXJlcyB3aXRoaW4gdGhlIGludGVydmFsLgogICAgRWFjaCB0cmFuc2Fj dGlvbiBpcyBjb3VudGVkIGluIHRoZSBpbnRlcnZhbCB3aGVuIGl0IHdhcyBjb21taXR0ZWQuCiAg IDwvcGFyYT4KIAogICA8cGFyYT4KICAgIEhlcmUgaXMgc29tZSBleGFtcGxlIG91dHB1dDoKIDxz Y3JlZW4+Ci0xMzQ1ODI4NTAxIDU2MDEgMTU0Mjc0NCA0ODM1NTI0MTYgNjEgMjU3MwotMTM0NTgy ODUwMyA3ODg0IDE5Nzk4MTIgNTY1ODA2NzM2IDYwIDE0NzkKLTEzNDU4Mjg1MDUgNzIwOCAxOTc5 NDIyIDU2NzI3NzU1MiA1OSAxMzkxCi0xMzQ1ODI4NTA3IDc2ODUgMTk4MDI2OCA1Njk3ODQ3MTQg NjAgMTM5OAotMTM0NTgyODUwOSA3MDczIDE5Nzk3NzkgNTczNDg5OTQxIDIzNiAxNDExCisxMzQ1 ODI4NTAxIDU2MDEgMTU0Mjc0NCA0ODM1NTI0MTYgNjEgMjU3MyAwIDAKKzEzNDU4Mjg1MDMgNzg4 NCAxOTc5ODEyIDU2NTgwNjczNiA2MCAxNDc5IDAgMAorMTM0NTgyODUwNSA3MjA4IDE5Nzk0MjIg NTY3Mjc3NTUyIDU5IDEzOTEgMCAwCisxMzQ1ODI4NTA3IDc2ODUgMTk4MDI2OCA1Njk3ODQ3MTQg NjAgMTM5OCAwIDAKKzEzNDU4Mjg1MDkgNzA3MyAxOTc5Nzc5IDU3MzQ4OTk0MSAyMzYgMTQxMSAw IDAKIDwvc2NyZWVuPjwvcGFyYT4KIAogICA8cGFyYT4KQEAgLTE2OTUsMTUgKzE3OTcsNTQgQEAg RU5EOwogIDwvcmVmc2VjdDI+CiAKICA8cmVmc2VjdDI+Ci0gIDx0aXRsZT5QZXItU3RhdGVtZW50 IExhdGVuY2llczwvdGl0bGU+CisgIDx0aXRsZT5QZXItU3RhdGVtZW50IFJlcG9ydDwvdGl0bGU+ CisKKyAgPHBhcmE+CisgICBXaXRoIHRoZSA8b3B0aW9uPi1yPC9vcHRpb24+IG9wdGlvbiwgPGFw cGxpY2F0aW9uPnBnYmVuY2g8L2FwcGxpY2F0aW9uPgorICAgY29sbGVjdHMgdGhlIGZvbGxvd2lu ZyBzdGF0aXN0aWNzIGZvciBlYWNoIHN0YXRlbWVudDoKKyAgIDxpdGVtaXplZGxpc3Q+CisgICAg IDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgIDxsaXRlcmFsPmxhdGVuY3k8L2xp dGVyYWw+ICZtZGFzaDsgZWxhcHNlZCB0cmFuc2FjdGlvbiB0aW1lIGZvciBlYWNoCisgICAgICAg ICBzdGF0ZW1lbnQuIDxhcHBsaWNhdGlvbj5wZ2JlbmNoPC9hcHBsaWNhdGlvbj4gcmVwb3J0cyBh biBhdmVyYWdlIHZhbHVlCisgICAgICAgICBvZiBhbGwgc3VjY2Vzc2Z1bCBydW5zIG9mIHRoZSBz dGF0ZW1lbnQuCisgICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgICA8bGlzdGl0 ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgICBUaGUgbnVtYmVyIG9mIGVycm9ycyBpbiB0aGlz IHN0YXRlbWVudC4gU2VlCisgICAgICAgICA8eHJlZiBsaW5rZW5kPSJlcnJvcnMtYW5kLXJldHJp ZXMiIGVuZHRlcm09ImVycm9ycy1hbmQtcmV0cmllcy10aXRsZSIvPgorICAgICAgICAgZm9yIG1v cmUgaW5mb3JtYXRpb24uCisgICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgICA8 bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgICBUaGUgbnVtYmVyIG9mIGVycm9ycyAi aW4gZmFpbGVkIFNRTCB0cmFuc2FjdGlvbiIgaW4gdGhpcyBzdGF0ZW1lbnQuIFNlZQorICAgICAg ICAgPHhyZWYgbGlua2VuZD0iZXJyb3JzLWFuZC1yZXRyaWVzIiBlbmR0ZXJtPSJlcnJvcnMtYW5k LXJldHJpZXMtdGl0bGUiLz4KKyAgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAg IDwvcGFyYT4KKyAgICAgPC9saXN0aXRlbT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJh PgorICAgICAgICAgVGhlIG51bWJlciBvZiByZXRyaWVzIGFmdGVyIGEgc2VyaWFsaXphdGlvbiBv ciBhIGRlYWRsb2NrIGZhaWx1cmUgaW4KKyAgICAgICAgIHRoaXMgc3RhdGVtZW50LiBTZWUgPHhy ZWYgbGlua2VuZD0iZXJyb3JzLWFuZC1yZXRyaWVzIgorICAgICAgICAgZW5kdGVybT0iZXJyb3Jz LWFuZC1yZXRyaWVzLXRpdGxlIi8+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgIDwvcGFy YT4KKyAgICAgPC9saXN0aXRlbT4KKyAgIDwvaXRlbWl6ZWRsaXN0PgorICA8L3BhcmE+CiAKICAg PHBhcmE+Ci0gICBXaXRoIHRoZSA8b3B0aW9uPi1yPC9vcHRpb24+IG9wdGlvbiwgPGFwcGxpY2F0 aW9uPnBnYmVuY2g8L2FwcGxpY2F0aW9uPiBjb2xsZWN0cwotICAgdGhlIGVsYXBzZWQgdHJhbnNh Y3Rpb24gdGltZSBvZiBlYWNoIHN0YXRlbWVudCBleGVjdXRlZCBieSBldmVyeQotICAgY2xpZW50 LiAgSXQgdGhlbiByZXBvcnRzIGFuIGF2ZXJhZ2Ugb2YgdGhvc2UgdmFsdWVzLCByZWZlcnJlZCB0 bwotICAgYXMgdGhlIGxhdGVuY3kgZm9yIGVhY2ggc3RhdGVtZW50LCBhZnRlciB0aGUgYmVuY2ht YXJrIGhhcyBmaW5pc2hlZC4KKyAgIFRoZSByZXBvcnQgZGlzcGxheXMgdGhlIGNvbHVtbnMgd2l0 aCBzdGF0aXN0aWNzIG9uIGVycm9ycyBhbmQgcmV0cmllcyBvbmx5IGlmCisgICB0aGUgY3VycmVu dCA8YXBwbGljYXRpb24+cGdiZW5jaDwvYXBwbGljYXRpb24+IHJ1biBoYXMgYW4gZXJyb3Igb3Ig cmV0cnksCisgICByZXNwZWN0aXZlbHkuCiAgIDwvcGFyYT4KIAorICAgPHBhcmE+CisgICBBbGwg dmFsdWVzIGFyZSBjb21wdXRlZCBmb3IgZWFjaCBzdGF0ZW1lbnQgZXhlY3V0ZWQgYnkgZXZlcnkg Y2xpZW50IGFuZCBhcmUKKyAgIHJlcG9ydGVkIGFmdGVyIHRoZSBiZW5jaG1hcmsgaGFzIGZpbmlz aGVkLgorICAgPC9wYXJhPgorCiAgIDxwYXJhPgogICAgRm9yIHRoZSBkZWZhdWx0IHNjcmlwdCwg dGhlIG91dHB1dCB3aWxsIGxvb2sgc2ltaWxhciB0byB0aGlzOgogPHNjcmVlbj4KQEAgLTE3MTUs NiArMTg1Niw3IEBAIG51bWJlciBvZiBjbGllbnRzOiAxMAogbnVtYmVyIG9mIHRocmVhZHM6IDEK IG51bWJlciBvZiB0cmFuc2FjdGlvbnMgcGVyIGNsaWVudDogMTAwMAogbnVtYmVyIG9mIHRyYW5z YWN0aW9ucyBhY3R1YWxseSBwcm9jZXNzZWQ6IDEwMDAwLzEwMDAwCittYXhpbXVtIG51bWJlciBv ZiB0cmllczogMQogbGF0ZW5jeSBhdmVyYWdlID0gMTUuODQ0IG1zCiBsYXRlbmN5IHN0ZGRldiA9 IDIuNzE1IG1zCiB0cHMgPSA2MTguNzY0NTU1IChpbmNsdWRpbmcgY29ubmVjdGlvbnMgZXN0YWJs aXNoaW5nKQpAQCAtMTczMiwxMCArMTg3NCw0OSBAQCBzdGF0ZW1lbnQgbGF0ZW5jaWVzIGluIG1p bGxpc2Vjb25kczoKICAgICAgICAgMC4zNzEgIElOU0VSVCBJTlRPIHBnYmVuY2hfaGlzdG9yeSAo dGlkLCBiaWQsIGFpZCwgZGVsdGEsIG10aW1lKSBWQUxVRVMgKDp0aWQsIDpiaWQsIDphaWQsIDpk ZWx0YSwgQ1VSUkVOVF9USU1FU1RBTVApOwogICAgICAgICAxLjIxMiAgRU5EOwogPC9zY3JlZW4+ CisKKyAgIEFub3RoZXIgZXhhbXBsZSBvZiBvdXRwdXQgZm9yIHRoZSBkZWZhdWx0IHNjcmlwdCB1 c2luZyBzZXJpYWxpemFibGUgZGVmYXVsdAorICAgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVs ICg8Y29tbWFuZD5QR09QVElPTlM9Jy1jCisgICBkZWZhdWx0X3RyYW5zYWN0aW9uX2lzb2xhdGlv bj1zZXJpYWxpemFibGUnIHBnYmVuY2ggLi4uPC9jb21tYW5kPik6Cis8c2NyZWVuPgorc3RhcnRp bmcgdmFjdXVtLi4uZW5kLgordHJhbnNhY3Rpb24gdHlwZTogJmx0O2J1aWx0aW46IFRQQy1CIChz b3J0IG9mKSZndDsKK3NjYWxpbmcgZmFjdG9yOiAxCitxdWVyeSBtb2RlOiBzaW1wbGUKK251bWJl ciBvZiBjbGllbnRzOiAxMAorbnVtYmVyIG9mIHRocmVhZHM6IDEKK251bWJlciBvZiB0cmFuc2Fj dGlvbnMgcGVyIGNsaWVudDogMTAwMAorbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBhY3R1YWxseSBw cm9jZXNzZWQ6IDM5ODgvMTAwMDAKK251bWJlciBvZiBlcnJvcnM6IDYwMTIgKDYwLjEyMCUpCitu dW1iZXIgb2YgcmV0cmllZDogODExMyAoODEuMTMwJSkKK251bWJlciBvZiByZXRyaWVzOiA2NTU4 NjkKK21heGltdW0gbnVtYmVyIG9mIHRyaWVzOiAxMDAKK2xhdGVuY3kgYXZlcmFnZSA9IDM0NS45 NzkgbXMKK2xhdGVuY3kgc3RkZGV2ID0gNjM3Ljk2NCBtcwordHBzID0gOC4yMDM4ODQgKGluY2x1 ZGluZyBjb25uZWN0aW9ucyBlc3RhYmxpc2hpbmcpCit0cHMgPSA4LjIwMzk2OSAoZXhjbHVkaW5n IGNvbm5lY3Rpb25zIGVzdGFibGlzaGluZykKK3N0YXRlbWVudCBsYXRlbmNpZXMgaW4gbWlsbGlz ZWNvbmRzLCBlcnJvcnMgYW5kIHJldHJpZXM6CisgIDAuMDAzICAgICAwICAgICAgIDAgIFxzZXQg YWlkIHJhbmRvbSgxLCAxMDAwMDAgKiA6c2NhbGUpCisgIDAuMDAwICAgICAwICAgICAgIDAgIFxz ZXQgYmlkIHJhbmRvbSgxLCAxICogOnNjYWxlKQorICAwLjAwMCAgICAgMCAgICAgICAwICBcc2V0 IHRpZCByYW5kb20oMSwgMTAgKiA6c2NhbGUpCisgIDAuMDAwICAgICAwICAgICAgIDAgIFxzZXQg ZGVsdGEgcmFuZG9tKC01MDAwLCA1MDAwKQorICAwLjMxMiAgICAgMCAgICAgICAwICBCRUdJTjsK KyAgMC44NjYgICAgIDAgICAgICAgMCAgVVBEQVRFIHBnYmVuY2hfYWNjb3VudHMKKyAgICAgICAg ICAgICAgICAgICAgICAgU0VUIGFiYWxhbmNlID0gYWJhbGFuY2UgKyA6ZGVsdGEgV0hFUkUgYWlk ID0gOmFpZDsKKyAgMC42OTggICAgIDAgICAgICAgMCAgU0VMRUNUIGFiYWxhbmNlIEZST00gcGdi ZW5jaF9hY2NvdW50cyBXSEVSRSBhaWQgPSA6YWlkOworICAwLjk2NSAgNTk4MyAgNjQ4ODI5ICBV UERBVEUgcGdiZW5jaF90ZWxsZXJzCisgICAgICAgICAgICAgICAgICAgICAgIFNFVCB0YmFsYW5j ZSA9IHRiYWxhbmNlICsgOmRlbHRhIFdIRVJFIHRpZCA9IDp0aWQ7CisgIDAuODg2ICAgIDI5ICAg IDcwMjkgIFVQREFURSBwZ2JlbmNoX2JyYW5jaGVzCisgICAgICAgICAgICAgICAgICAgICAgIFNF VCBiYmFsYW5jZSA9IGJiYWxhbmNlICsgOmRlbHRhIFdIRVJFIGJpZCA9IDpiaWQ7CisgIDAuOTYw ICAgICAwICAgICAgIDAgIElOU0VSVCBJTlRPIHBnYmVuY2hfaGlzdG9yeQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHRpZCwgYmlkLCBhaWQsIGRlbHRhLCBtdGltZSkKKyAgICAgICAg ICAgICAgICAgICAgICAgVkFMVUVTICg6dGlkLCA6YmlkLCA6YWlkLCA6ZGVsdGEsIENVUlJFTlRf VElNRVNUQU1QKTsKKyAgMS4wMDkgICAgIDAgICAgICAxMSAgRU5EOworPC9zY3JlZW4+CiAgIDwv cGFyYT4KIAogICA8cGFyYT4KLSAgIElmIG11bHRpcGxlIHNjcmlwdCBmaWxlcyBhcmUgc3BlY2lm aWVkLCB0aGUgYXZlcmFnZXMgYXJlIHJlcG9ydGVkCisgICBJZiBtdWx0aXBsZSBzY3JpcHQgZmls ZXMgYXJlIHNwZWNpZmllZCwgYWxsIHN0YXRpc3RpY3MgYXJlIHJlcG9ydGVkCiAgICBzZXBhcmF0 ZWx5IGZvciBlYWNoIHNjcmlwdCBmaWxlLgogICA8L3BhcmE+CiAKQEAgLTE3NDksNiArMTkzMCw2 NSBAQCBzdGF0ZW1lbnQgbGF0ZW5jaWVzIGluIG1pbGxpc2Vjb25kczoKICAgPC9wYXJhPgogIDwv cmVmc2VjdDI+CiAKKyA8cmVmc2VjdDIgaWQ9ImVycm9ycy1hbmQtcmV0cmllcyI+CisgIDx0aXRs ZSBpZD0iZXJyb3JzLWFuZC1yZXRyaWVzLXRpdGxlIj5FcnJvcnMgYW5kIFNlcmlhbGl6YXRpb24v RGVhZGxvY2sgUmV0cmllczwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBDbGllbnQncyBydW4gaXMg YWJvcnRlZCBvbmx5IGluIGNhc2Ugb2YgYSBzZXJpb3VzIGVycm9yLCBmb3IgZXhhbXBsZSwgdGhl CisgICBjb25uZWN0aW9uIHdpdGggdGhlIGJhY2tlbmQgd2FzIGxvc3QuIE90aGVyd2lzZSBpZiB0 aGUgZXhlY3V0aW9uIG9mIFNRTCBvcgorICAgbWV0YSBjb21tYW5kIGZhaWxzLCB0aGUgY2xpZW50 J3MgcnVuIGNvbnRpbnVlcyBub3JtYWxseSB1bnRpbCB0aGUgZW5kIG9mIHRoZQorICAgY3VycmVu dCBzY3JpcHQgZXhlY3V0aW9uIChpdCBpcyBhc3N1bWVkIHRoYXQgb25lIHRyYW5zYWN0aW9uIHNj cmlwdCBjb250YWlucworICAgb25seSBvbmUgdHJhbnNhY3Rpb247IHNlZSA8eHJlZiBsaW5rZW5k PSJ0cmFuc2FjdGlvbnMtYW5kLXNjcmlwdHMiCisgICBlbmR0ZXJtPSJ0cmFuc2FjdGlvbnMtYW5k LXNjcmlwdHMtdGl0bGUiLz4gZm9yIG1vcmUgaW5mb3JtYXRpb24pLgorICAgVHJhbnNhY3Rpb25z IHdpdGggc2VyaWFsaXphdGlvbiBvciBkZWFkbG9jayBmYWlsdXJlcyBhcmUgcm9sbGVkIGJhY2sg YW5kCisgICByZXBlYXRlZCB1bnRpbCB0aGV5IGNvbXBsZXRlIHN1Y2Nlc3NmdWxseSBvciByZWFj aCB0aGUgbWF4aW11bSBudW1iZXIgb2YKKyAgIHRyaWVzIHNwZWNpZmllZCBieSB0aGUgPG9wdGlv bj4tLW1heC10cmllczwvb3B0aW9uPiBvcHRpb24uIElmIHRoZSBsYXN0CisgICB0cmFuc2FjdGlv biBydW4gZmFpbHMsIHRoaXMgdHJhbnNhY3Rpb24gd2lsbCBiZSByZXBvcnRlZCBhcyBmYWlsZWQs IGFuZCB0aGUKKyAgIGNsaWVudCB2YXJpYWJsZXMgd2lsbCBiZSBzZXQgYXMgdGhleSB3ZXJlIGJl Zm9yZSB0aGUgZmlyc3QgcnVuIG9mIHRoaXMKKyAgIHRyYW5zYWN0aW9uLgorICA8L3BhcmE+CisK KyAgPG5vdGU+CisgICA8cGFyYT4KKyAgICBJZiBhIGZhaWxlZCB0cmFuc2FjdGlvbiBibG9jayBk b2VzIG5vdCB0ZXJtaW5hdGUgaW4gdGhlIGN1cnJlbnQgc2NyaXB0LCB0aGUKKyAgICBjb21tYW5k cyBvZiB0aGUgZm9sbG93aW5nIHNjcmlwdHMgYXJlIHByb2Nlc3NlZCBhcyB1c3VhbCBzbyB5b3Ug Y2FuIGdldCBhCisgICAgbG90IG9mIGVycm9ycyBvZiB0eXBlICJpbiBmYWlsZWQgU1FMIHRyYW5z YWN0aW9uIiAod2hlbiB0aGUgY3VycmVudCBTUUwKKyAgICB0cmFuc2FjdGlvbiBpcyBhYm9ydGVk IGFuZCBjb21tYW5kcyBpZ25vcmVkIHVudGlsIGVuZCBvZiB0cmFuc2FjdGlvbiBibG9jaykuCisg ICAgSW4gc3VjaCBjYXNlcyB5b3UgY2FuIHVzZSBzZXBhcmF0ZSBzdGF0aXN0aWNzIG9mIHRoZXNl IGVycm9ycyBpbiBhbGwKKyAgICByZXBvcnRzLgorICAgPC9wYXJhPgorICA8L25vdGU+CisKKyAg PHBhcmE+CisgICBUaGUgbGF0ZW5jeSBvZiBhIHN1Y2Nlc3NmdWwgdHJhbnNhY3Rpb24gaW5jbHVk ZXMgdGhlIGVudGlyZSB0aW1lIG9mCisgICB0cmFuc2FjdGlvbiBleGVjdXRpb24gd2l0aCByb2xs YmFja3MgYW5kIHJldHJpZXMuIFRoZSBsYXRlbmN5IGZvciBmYWlsZWQKKyAgIHRyYW5zYWN0aW9u cyBhbmQgY29tbWFuZHMgaXMgbm90IGNvbXB1dGVkIHNlcGFyYXRlbHkuCisgIDwvcGFyYT4KKwor ICA8cGFyYT4KKyAgIFRoZSBtYWluIHJlcG9ydCBjb250YWlucyB0aGUgbnVtYmVyIG9mIGZhaWxl ZCB0cmFuc2FjdGlvbnMgaWYgaXQgaXMgbm9uLXplcm8uCisgICBJZiB0aGUgdG90YWwgbnVtYmVy IG9mIHRyYW5zYWN0aW9ucyBlbmRlZCB3aXRoIGFuIGVycm9yICJpbiBmYWlsZWQgU1FMCisgICB0 cmFuc2FjdGlvbiBibG9jayIgaXMgbm9uLXplcm8sIHRoZSBtYWluIHJlcG9ydCBhbHNvIGNvbnRh aW5zIGl0LiBJZiB0aGUKKyAgIHRvdGFsIG51bWJlciBvZiByZXRyaWVkIHRyYW5zYWN0aW9ucyBp cyBub24temVybywgdGhlIG1haW4gcmVwb3J0IGFsc28KKyAgIGNvbnRhaW5zIHRoZSBzdGF0aXN0 aWNzIHJlbGF0ZWQgdG8gcmV0cmllczogdGhlIHRvdGFsIG51bWJlciBvZiByZXRyaWVkCisgICB0 cmFuc2FjdGlvbnMgYW5kIHRvdGFsIG51bWJlciBvZiByZXRyaWVzICh1c2Ugb3B0aW9uCisgICA8 b3B0aW9uPi0tbWF4LXRyaWVzPC9vcHRpb24+IHRvIG1ha2UgaXQgcG9zc2libGUpLiBUaGUgcGVy LXN0YXRlbWVudCByZXBvcnQKKyAgIGluaGVyaXRzIGFsbCBjb2x1bW5zIGZyb20gdGhlIG1haW4g cmVwb3J0LiBOb3RlIHRoYXQgaWYgYSBmYWlsdXJlL2Vycm9yCisgICBvY2N1cnMsIHRoZSBmb2xs b3dpbmcgZmFpbHVyZXMvZXJyb3JzIGluIHRoZSBjdXJyZW50IHNjcmlwdCBleGVjdXRpb24gYXJl IG5vdAorICAgc2hvd24gaW4gdGhlIHJlcG9ydHMuIFRoZSByZXRyeSBpcyBvbmx5IHJlcG9ydGVk IGZvciB0aGUgZmlyc3QgY29tbWFuZCB3aGVyZQorICAgdGhlIGZhaWx1cmUgb2NjdXJlZCBkdXJp bmcgdGhlIGN1cnJlbnQgc2NyaXB0IGV4ZWN1dGlvbi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgor ICAgSWYgeW91IHdhbnQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBmYWlsdXJlcyBvciBlcnJvcnMg YnkgdHlwZSwgdXNlIHRoZQorICAgPGFwcGxpY2F0aW9uPnBnYmVuY2g8L2FwcGxpY2F0aW9uPiBk ZWJ1Z2dpbmcgb3V0cHV0IGNyZWF0ZWQgd2l0aCB0aGUgb3B0aW9uCisgICA8b3B0aW9uPi0tZGVi dWc8L29wdGlvbj4gYW5kIHdpdGggdGhlIGRlYnVnZ2luZyBsZXZlbAorICAgPGxpdGVyYWw+ZmFp bHM8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPmFsbDwvbGl0ZXJhbD4uIFRoZSBmaXJzdCB2YXJpYW50 IGlzCisgICByZWNvbW1lbmRlZCBmb3IgdGhpcyBwdXJwb3NlIGJlY2F1c2Ugd2l0aCBpbiB0aGUg c2Vjb25kIGNhc2UgdGhlIGRlYnVnZ2luZworICAgb3V0cHV0IGNhbiBiZSB2ZXJ5IGxhcmdlLgor ICA8L3BhcmE+CisgPC9yZWZzZWN0Mj4KKwogIDxyZWZzZWN0Mj4KICAgPHRpdGxlPkdvb2QgUHJh Y3RpY2VzPC90aXRsZT4KIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYyBi L3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKaW5kZXggODUyOWU3ZC4uZmE4MmVkZCAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYworKysgYi9zcmMvYmluL3BnYmVuY2gvcGdi ZW5jaC5jCkBAIC01OSw2ICs1OSw5IEBACiAKICNpbmNsdWRlICJwZ2JlbmNoLmgiCiAKKyNkZWZp bmUgRVJSQ09ERV9JTl9GQUlMRURfU1FMX1RSQU5TQUNUSU9OICAiMjVQMDIiCisjZGVmaW5lIEVS UkNPREVfVF9SX1NFUklBTElaQVRJT05fRkFJTFVSRSAgIjQwMDAxIgorI2RlZmluZSBFUlJDT0RF X1RfUl9ERUFETE9DS19ERVRFQ1RFRCAgIjQwUDAxIgogI2RlZmluZSBFUlJDT0RFX1VOREVGSU5F RF9UQUJMRSAgIjQyUDAxIgogCiAvKgpAQCAtMTg2LDggKzE4OSwxMyBAQCBib29sCQlwcm9ncmVz c190aW1lc3RhbXAgPSBmYWxzZTsgLyogcHJvZ3Jlc3MgcmVwb3J0IHdpdGggVW5peCB0aW1lICov CiBpbnQJCQluY2xpZW50cyA9IDE7CQkvKiBudW1iZXIgb2YgY2xpZW50cyAqLwogaW50CQkJbnRo cmVhZHMgPSAxOwkJLyogbnVtYmVyIG9mIHRocmVhZHMgKi8KIGJvb2wJCWlzX2Nvbm5lY3Q7CQkJ LyogZXN0YWJsaXNoIGNvbm5lY3Rpb24gZm9yIGVhY2ggdHJhbnNhY3Rpb24gKi8KLWJvb2wJCWlz X2xhdGVuY2llczsJCS8qIHJlcG9ydCBwZXItY29tbWFuZCBsYXRlbmNpZXMgKi8KK2Jvb2wJCXJl cG9ydF9wZXJfY29tbWFuZCA9IGZhbHNlOwkvKiByZXBvcnQgcGVyLWNvbW1hbmQgbGF0ZW5jaWVz LCByZXRyaWVzCisJCQkJCQkJCQkJICogYWZ0ZXIgdGhlIGZhaWx1cmVzIGFuZCBlcnJvcnMKKwkJ CQkJCQkJCQkgKiAoZmFpbHVyZXMgd2l0aG91dCByZXRyeWluZykgKi8KIGludAkJCW1haW5fcGlk OwkJCS8qIG1haW4gcHJvY2VzcyBpZCB1c2VkIGluIGxvZyBmaWxlbmFtZSAqLworaW50CQkJbWF4 X3RyaWVzID0gMTsJCS8qIG1heGltdW0gbnVtYmVyIG9mIHRyaWVzIHRvIHJ1biB0aGUKKwkJCQkJ CQkJICogdHJhbnNhY3Rpb24gd2l0aCBzZXJpYWxpemF0aW9uIG9yIGRlYWRsb2NrCisJCQkJCQkJ CSAqIGZhaWx1cmVzICovCiAKIGNoYXIJICAgKnBnaG9zdCA9ICIiOwogY2hhcgkgICAqcGdwb3J0 ID0gIiI7CkBAIC0yNDIsMTQgKzI1MCw2NiBAQCB0eXBlZGVmIHN0cnVjdCBTaW1wbGVTdGF0cwog dHlwZWRlZiBzdHJ1Y3QgU3RhdHNEYXRhCiB7CiAJdGltZV90CQlzdGFydF90aW1lOwkJLyogaW50 ZXJ2YWwgc3RhcnQgdGltZSwgZm9yIGFnZ3JlZ2F0ZXMgKi8KLQlpbnQ2NAkJY250OwkJCS8qIG51 bWJlciBvZiB0cmFuc2FjdGlvbnMsIGluY2x1ZGluZyBza2lwcGVkICovCisJaW50NjQJCWNudDsJ CQkvKiBudW1iZXIgb2Ygc3VjZXNzZnVsbCB0cmFuc2FjdGlvbnMsIGluY2x1ZGluZworCQkJCQkJ CQkgKiBza2lwcGVkICovCiAJaW50NjQJCXNraXBwZWQ7CQkvKiBudW1iZXIgb2YgdHJhbnNhY3Rp b25zIHNraXBwZWQgdW5kZXIgLS1yYXRlCiAJCQkJCQkJCSAqIGFuZCAtLWxhdGVuY3ktbGltaXQg Ki8KKwlpbnQ2NAkJcmV0cmllczsKKwlpbnQ2NAkJcmV0cmllZDsJCS8qIG51bWJlciBvZiB0cmFu c2FjdGlvbnMgdGhhdCB3ZXJlIHJldHJpZWQKKwkJCQkJCQkJICogYWZ0ZXIgYSBzZXJpYWxpemF0 aW9uIG9yIGEgZGVhZGxvY2sKKwkJCQkJCQkJICogZmFpbHVyZSAqLworCWludDY0CQllcnJvcnM7 CQkJLyogbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyB0aGF0IHdlcmUgbm90IHJldHJpZWQKKwkJCQkJ CQkJICogYWZ0ZXIgYSBzZXJpYWxpemF0aW9uIG9yIGEgZGVhZGxvY2sKKwkJCQkJCQkJICogZmFp bHVyZSBvciBoYWQgYW5vdGhlciBlcnJvciAoaW5jbHVkaW5nIG1ldGEKKwkJCQkJCQkJICogY29t bWFuZHMgZXJyb3JzKSAqLworCWludDY0CQllcnJvcnNfaW5fZmFpbGVkX3R4OwkvKiBudW1iZXIg b2YgdHJhbnNhY3Rpb25zIHRoYXQgZmFpbGVkIGluCisJCQkJCQkJCQkJICogYSBlcnJvcgorCQkJ CQkJCQkJCSAqIEVSUkNPREVfSU5fRkFJTEVEX1NRTF9UUkFOU0FDVElPTiAqLwogCVNpbXBsZVN0 YXRzIGxhdGVuY3k7CiAJU2ltcGxlU3RhdHMgbGFnOwogfSBTdGF0c0RhdGE7CiAKIC8qCisgKiBE YXRhIHN0cnVjdHVyZSBmb3IgY2xpZW50IHZhcmlhYmxlcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg VmFyaWFibGVzCit7CisJVmFyaWFibGUgICAqYXJyYXk7CQkJLyogYXJyYXkgb2YgdmFyaWFibGUg ZGVmaW5pdGlvbnMgKi8KKwlpbnQJCQludmFyaWFibGVzOwkJLyogbnVtYmVyIG9mIHZhcmlhYmxl cyAqLworCWJvb2wJCXZhcnNfc29ydGVkOwkvKiBhcmUgdmFyaWFibGVzIHNvcnRlZCBieSBuYW1l PyAqLworfSBWYXJpYWJsZXM7CisKKy8qCisgKiBEYXRhIHN0cnVjdHVyZSBmb3IgdGhyZWFkL2Ns aWVudCByYW5kb20gc2VlZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgUmFuZG9tU3RhdGUKK3sKKwl1 bnNpZ25lZCBzaG9ydCBkYXRhWzNdOworfSBSYW5kb21TdGF0ZTsKKworLyoKKyAqIERhdGEgc3Ry dWN0dXJlIGZvciByZXBlYXRpbmcgYSB0cmFuc2FjdGlvbiBmcm9tIHRoZSBiZWdpbm5uaW5nIHdp dGggdGhlIHNhbWUKKyAqIHBhcmFtZXRlcnMuCisgKi8KK3R5cGVkZWYgc3RydWN0IFJldHJ5U3Rh dGUKK3sKKwlSYW5kb21TdGF0ZSByYW5kb21fc3RhdGU7CS8qIHJhbmRvbSBzZWVkICovCisJVmFy aWFibGVzICAgdmFyaWFibGVzOwkJLyogY2xpZW50IHZhcmlhYmxlcyAqLworfSBSZXRyeVN0YXRl OworCisvKgorICogRm9yIHRoZSBmYWlsdXJlcyBkdXJpbmcgc2NyaXB0IGV4ZWN1dGlvbi4KKyAq LwordHlwZWRlZiBlbnVtIEZhaWx1cmVTdGF0dXMKK3sKKwlOT19GQUlMVVJFID0gMCwKKwlTRVJJ QUxJWkFUSU9OX0ZBSUxVUkUsCisJREVBRExPQ0tfRkFJTFVSRSwKKwlJTl9GQUlMRURfU1FMX1RS QU5TQUNUSU9OLAorCUFOT1RIRVJfRkFJTFVSRQorfSBGYWlsdXJlU3RhdHVzOworCisvKgogICog Q29ubmVjdGlvbiBzdGF0ZSBtYWNoaW5lIHN0YXRlcy4KICAqLwogdHlwZWRlZiBlbnVtCkBAIC0z MDQsNiArMzY0LDIxIEBAIHR5cGVkZWYgZW51bQogCUNTVEFURV9FTkRfQ09NTUFORCwKIAogCS8q CisJICogU3RhdGVzIGZvciB0cmFuc2FjdGlvbnMgd2l0aCBzZXJpYWxpemF0aW9uIG9yIGRlYWRs b2NrIGZhaWx1cmVzLgorCSAqCisJICogRmlyc3QsIHJlcG9ydCB0aGUgZmFpbHVyZSBpbiBDU1RB VEVfRkFJTFVSRS4gVGhlbiBwcm9jZXNzIG90aGVyIGNvbW1hbmRzCisJICogb2YgdGhlIGZhaWxl ZCB0cmFuc2FjdGlvbiBpZiBhbnkgYW5kIGdvIHRvIENTVEFURV9SRVRSWS4gSWYgd2UgY2FuCisJ ICogcmUtZXhlY3V0ZSB0aGUgdHJhbnNhY3Rpb24gZnJvbSB0aGUgdmVyeSBiZWdpbm5pbmcsIHNl dCB0aGUgc2FtZQorCSAqIHBhcmFtZXRlcnMgZm9yIHRoZSB0cmFuc2FjdGlvbiBleGVjdXRpb24g YXMgaW4gdGhlIHByZXZpb3VzIHRyaWVzIGFuZAorCSAqIHByb2Nlc3MgdGhlIGZpcnN0IHRyYW5z YWN0aW9uIGNvbW1hbmQgaW4gQ1NUQVRFX1NUQVJUX0NPTU1BTkQuIE90aGVyd2lzZSwKKwkgKiBz ZXQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSB0cmFuc2FjdGlvbiBleGVjdXRpb24gYXMgdGhleSB3 ZXJlIGJlZm9yZSB0aGUKKwkgKiBmaXJzdCBydW4gb2YgdGhpcyB0cmFuc2FjdGlvbiAoZXhjZXB0 IGZvciBhIHJhbmRvbSBzdGF0ZSkgYW5kIGdvIHRvCisJICogQ1NUQVRFX0VORF9UWCB0byBjb21w bGV0ZSB0aGlzIHRyYW5zYWN0aW9uLgorCSAqLworCUNTVEFURV9GQUlMVVJFLAorCUNTVEFURV9S RVRSWSwKKworCS8qCiAJICogQ1NUQVRFX0VORF9UWCBwZXJmb3JtcyBlbmQtb2YtdHJhbnNhY3Rp b24gcHJvY2Vzc2luZy4gIENhbGN1bGF0ZXMKIAkgKiBsYXRlbmN5LCBhbmQgbG9ncyB0aGUgdHJh bnNhY3Rpb24uICBJbiAtLWNvbm5lY3QgbW9kZSwgY2xvc2VzIHRoZQogCSAqIGN1cnJlbnQgY29u bmVjdGlvbi4gIENob29zZXMgdGhlIG5leHQgc2NyaXB0IHRvIGV4ZWN1dGUgYW5kIHN0YXJ0cyBv dmVyCkBAIC0zMjksMTQgKzQwNCwxMyBAQCB0eXBlZGVmIHN0cnVjdAogCWludAkJCWlkOwkJCQkv KiBjbGllbnQgTm8uICovCiAJQ29ubmVjdGlvblN0YXRlRW51bSBzdGF0ZTsJLyogc3RhdGUgbWFj aGluZSdzIGN1cnJlbnQgc3RhdGUuICovCiAJQ29uZGl0aW9uYWxTdGFjayBjc3RhY2s7CS8qIGVu Y2xvc2luZyBjb25kaXRpb25hbHMgc3RhdGUgKi8KKwlSYW5kb21TdGF0ZSByYW5kb21fc3RhdGU7 CS8qIHNlcGFyYXRlIHJhbmRvbW5lc3MgZm9yIGVhY2ggY2xpZW50ICovCiAKIAlpbnQJCQl1c2Vf ZmlsZTsJCS8qIGluZGV4IGluIHNxbF9zY3JpcHQgZm9yIHRoaXMgY2xpZW50ICovCiAJaW50CQkJ Y29tbWFuZDsJCS8qIGNvbW1hbmQgbnVtYmVyIGluIHNjcmlwdCAqLwogCiAJLyogY2xpZW50IHZh cmlhYmxlcyAqLwotCVZhcmlhYmxlICAgKnZhcmlhYmxlczsJCS8qIGFycmF5IG9mIHZhcmlhYmxl IGRlZmluaXRpb25zICovCi0JaW50CQkJbnZhcmlhYmxlczsJCS8qIG51bWJlciBvZiB2YXJpYWJs ZXMgKi8KLQlib29sCQl2YXJzX3NvcnRlZDsJLyogYXJlIHZhcmlhYmxlcyBzb3J0ZWQgYnkgbmFt ZT8gKi8KKwlWYXJpYWJsZXMgICB2YXJpYWJsZXM7CiAKIAkvKiB2YXJpb3VzIHRpbWVzIGFib3V0 IGN1cnJlbnQgdHJhbnNhY3Rpb24gKi8KIAlpbnQ2NAkJdHhuX3NjaGVkdWxlZDsJLyogc2NoZWR1 bGVkIHN0YXJ0IHRpbWUgb2YgdHJhbnNhY3Rpb24gKHVzZWMpICovCkBAIC0zNDYsNiArNDIwLDE2 IEBAIHR5cGVkZWYgc3RydWN0CiAKIAlib29sCQlwcmVwYXJlZFtNQVhfU0NSSVBUU107CS8qIHdo ZXRoZXIgY2xpZW50IHByZXBhcmVkIHRoZSBzY3JpcHQgKi8KIAorCS8qCisJICogRm9yIHByb2Nl c3NpbmcgZXJyb3JzIGFuZCByZXBlYXRpbmcgdHJhbnNhY3Rpb25zIHdpdGggc2VyaWFsaXphdGlv biBvcgorCSAqIGRlYWRsb2NrIGZhaWx1cmVzOgorCSAqLworCUZhaWx1cmVTdGF0dXMgZmlyc3Rf ZmFpbHVyZTsJLyogdGhlIHN0YXR1cyBvZiB0aGUgZmlyc3QgZmFpbHVyZSBpbiB0aGUKKwkJCQkJ CQkJCSAqIGN1cnJlbnQgdHJhbnNhY3Rpb24gZXhlY3V0aW9uOyBOT19GQUlMVVJFCisJCQkJCQkJ CQkgKiBpZiB0aGVyZSB3ZXJlIG5vIGZhaWx1cmVzIG9yIGVycm9ycyAqLworCVJldHJ5U3RhdGUg IHJldHJ5X3N0YXRlOworCWludAkJCXJldHJpZXM7CQkvKiBpcyBsZXNzIHRoYW4gbWF4X3RyaWVz ICovCisKIAkvKiBwZXIgY2xpZW50IGNvbGxlY3RlZCBzdGF0cyAqLwogCWludDY0CQljbnQ7CQkJ LyogY2xpZW50IHRyYW5zYWN0aW9uIGNvdW50LCBmb3IgLXQgKi8KIAlpbnQJCQllY250OwkJCS8q IGVycm9yIGNvdW50ICovCkBAIC0zODksNyArNDczLDcgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlwdGhy ZWFkX3QJdGhyZWFkOwkJCS8qIHRocmVhZCBoYW5kbGUgKi8KIAlDU3RhdGUJICAgKnN0YXRlOwkJ CS8qIGFycmF5IG9mIENTdGF0ZSAqLwogCWludAkJCW5zdGF0ZTsJCQkvKiBsZW5ndGggb2Ygc3Rh dGVbXSAqLwotCXVuc2lnbmVkIHNob3J0IHJhbmRvbV9zdGF0ZVszXTsgLyogc2VwYXJhdGUgcmFu ZG9tbmVzcyBmb3IgZWFjaCB0aHJlYWQgKi8KKwlSYW5kb21TdGF0ZSByYW5kb21fc3RhdGU7IAkv KiBzZXBhcmF0ZSByYW5kb21uZXNzIGZvciBlYWNoIHRocmVhZCAqLwogCWludDY0CQl0aHJvdHRs ZV90cmlnZ2VyOwkvKiBwcmV2aW91cy9uZXh0IHRocm90dGxpbmcgKHVzKSAqLwogCUZJTEUJICAg KmxvZ2ZpbGU7CQkvKiB3aGVyZSB0byBsb2csIG9yIE5VTEwgKi8KIAlaaXBmQ2FjaGUJemlwZl9j YWNoZTsJCS8qIGZvciB0aHJlYWQtc2FmZSAgemlwZmlhbiByYW5kb20gbnVtYmVyCkBAIC00NDUs NiArNTI5LDEwIEBAIHR5cGVkZWYgc3RydWN0CiAJY2hhcgkgICAqYXJndltNQVhfQVJHU107IC8q IGNvbW1hbmQgd29yZCBsaXN0ICovCiAJUGdCZW5jaEV4cHIgKmV4cHI7CQkJLyogcGFyc2VkIGV4 cHJlc3Npb24sIGlmIG5lZWRlZCAqLwogCVNpbXBsZVN0YXRzIHN0YXRzOwkJCS8qIHRpbWUgc3Bl bnQgaW4gdGhpcyBjb21tYW5kICovCisJaW50NjQJCXJldHJpZXM7CisJaW50NjQJCWVycm9yczsJ CQkvKiBudW1iZXIgb2YgZmFpbHVyZXMgdGhhdCB3ZXJlIG5vdCByZXRyaWVkICovCisJaW50NjQJ CWVycm9yc19pbl9mYWlsZWRfdHg7CS8qIG51bWJlciBvZiBlcnJvcnMKKwkJCQkJCQkJCQkgKiBF UlJDT0RFX0lOX0ZBSUxFRF9TUUxfVFJBTlNBQ1RJT04gKi8KIH0gQ29tbWFuZDsKIAogdHlwZWRl ZiBzdHJ1Y3QgUGFyc2VkU2NyaXB0CkBAIC00NjAsNyArNTQ4LDE3IEBAIHN0YXRpYyBpbnQJbnVt X3NjcmlwdHM7CQkvKiBudW1iZXIgb2Ygc2NyaXB0cyBpbiBzcWxfc2NyaXB0W10gKi8KIHN0YXRp YyBpbnQJbnVtX2NvbW1hbmRzID0gMDsJLyogdG90YWwgbnVtYmVyIG9mIENvbW1hbmQgc3RydWN0 cyAqLwogc3RhdGljIGludDY0IHRvdGFsX3dlaWdodCA9IDA7CiAKLXN0YXRpYyBpbnQJZGVidWcg PSAwOwkJCS8qIGRlYnVnIGZsYWcgKi8KK3R5cGVkZWYgZW51bSBEZWJ1Z2xldmVsCit7CisJTk9f REVCVUcgPSAwLAkJCQkvKiBubyBkZWJ1Z2dpbmcgb3V0cHV0IChleGNlcHQgUEdCRU5DSF9ERUJV RykgKi8KKwlERUJVR19GQUlMUywJCQkJLyogcHJpbnQgb25seSBlcnJvciBtZXNzYWdlcyBhbmQg ZmFpbHVyZXMgKi8KKwlERUJVR19BTEwsCQkJCQkvKiBwcmludCBhbGwgZGVidWdnaW5nIG91dHB1 dCAodGhyb3R0bGluZywKKwkJCQkJCQkJICogZXhlY3V0ZWQvc2VudC9yZWNlaXZlZCBjb21tYW5k cyBldGMuKSAqLworCU5VTV9ERUJVR0xFVkVMCit9IERlYnVnbGV2ZWw7CisKK3N0YXRpYyBEZWJ1 Z2xldmVsIGRlYnVnX2xldmVsID0gTk9fREVCVUc7CS8qIGRlYnVnIGZsYWcgKi8KK3N0YXRpYyBj b25zdCBjaGFyICpERUJVR0xFVkVsW10gPSB7Im5vIiwgImZhaWxzIiwgImFsbCJ9OwogCiAvKiBC dWlsdGluIHRlc3Qgc2NyaXB0cyAqLwogdHlwZWRlZiBzdHJ1Y3QgQnVpbHRpblNjcmlwdApAQCAt NTA4LDYgKzYwNiwxNSBAQCBzdGF0aWMgY29uc3QgQnVpbHRpblNjcmlwdCBidWlsdGluX3Njcmlw dFtdID0KIAl9CiB9OwogCit0eXBlZGVmIGVudW0gRmFpbFN0YXR1cworeworCVRYX0ZBSUxVUkUs CQkJCQkvKiB0aGUgdHJhbnNhY3Rpb24gd2lsbCBiZSByZS1leGVjdXRlZCBmcm9tIHRoZQorCQkJ CQkJCQkgKiB2ZXJ5IGJlZ2lubmluZyAqLworCUlOX0ZBSUxFRF9UWCwJCQkJLyogY29udGludWUg dGhlIGZhaWxlZCB0cmFuc2FjdGlvbiAqLworCVRYX0VSUk9SLAkJCQkJLyogdGhlIHRyYW5zYWN0 aW9uIHdpbGwgYmUgbWFya2VkIGFzIGZhaWxlZCAqLworCUNMSUVOVF9BQk9SVEVECQkJCS8qIHRo ZSBjbGllbmQgaXMgYWJvcnRlZCAqLworfSBGYWlsU3RhdHVzOworCiAKIC8qIEZ1bmN0aW9uIHBy b3RvdHlwZXMgKi8KIHN0YXRpYyB2b2lkIHNldE51bGxWYWx1ZShQZ0JlbmNoVmFsdWUgKnB2KTsK QEAgLTU3Miw3ICs2NzksNyBAQCB1c2FnZSh2b2lkKQogCQkgICAiICAgICAgICAgICAgICAgICAg ICAgICAgICAgcHJvdG9jb2wgZm9yIHN1Ym1pdHRpbmcgcXVlcmllcyAoZGVmYXVsdDogc2ltcGxl KVxuIgogCQkgICAiICAtbiwgLS1uby12YWN1dW0gICAgICAgICAgZG8gbm90IHJ1biBWQUNVVU0g YmVmb3JlIHRlc3RzXG4iCiAJCSAgICIgIC1QLCAtLXByb2dyZXNzPU5VTSAgICAgICBzaG93IHRo cmVhZCBwcm9ncmVzcyByZXBvcnQgZXZlcnkgTlVNIHNlY29uZHNcbiIKLQkJICAgIiAgLXIsIC0t cmVwb3J0LWxhdGVuY2llcyAgIHJlcG9ydCBhdmVyYWdlIGxhdGVuY3kgcGVyIGNvbW1hbmRcbiIK KwkJICAgIiAgLXIsIC0tcmVwb3J0LXBlci1jb21tYW5kIHJlcG9ydCBsYXRlbmNpZXMsIGVycm9y cyBhbmQgcmV0cmllcyBwZXIgY29tbWFuZFxuIgogCQkgICAiICAtUiwgLS1yYXRlPU5VTSAgICAg ICAgICAgdGFyZ2V0IHJhdGUgaW4gdHJhbnNhY3Rpb25zIHBlciBzZWNvbmRcbiIKIAkJICAgIiAg LXMsIC0tc2NhbGU9TlVNICAgICAgICAgIHJlcG9ydCB0aGlzIHNjYWxlIGZhY3RvciBpbiBvdXRw dXRcbiIKIAkJICAgIiAgLXQsIC0tdHJhbnNhY3Rpb25zPU5VTSAgIG51bWJlciBvZiB0cmFuc2Fj dGlvbnMgZWFjaCBjbGllbnQgcnVucyAoZGVmYXVsdDogMTApXG4iCkBAIC01ODEsMTEgKzY4OCwx MiBAQCB1c2FnZSh2b2lkKQogCQkgICAiICAtLWFnZ3JlZ2F0ZS1pbnRlcnZhbD1OVU0gYWdncmVn YXRlIGRhdGEgb3ZlciBOVU0gc2Vjb25kc1xuIgogCQkgICAiICAtLWxvZy1wcmVmaXg9UFJFRklY ICAgICAgcHJlZml4IGZvciB0cmFuc2FjdGlvbiB0aW1lIGxvZyBmaWxlXG4iCiAJCSAgICIgICAg ICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdDogXCJwZ2JlbmNoX2xvZ1wiKVxuIgorCQkg ICAiICAtLW1heC10cmllcz1OVU0gICAgICAgICAgbWF4IG51bWJlciBvZiB0cmllcyB0byBydW4g dHJhbnNhY3Rpb24gKGRlZmF1bHQ6IDEpXG4iCiAJCSAgICIgIC0tcHJvZ3Jlc3MtdGltZXN0YW1w ICAgICB1c2UgVW5peCBlcG9jaCB0aW1lc3RhbXBzIGZvciBwcm9ncmVzc1xuIgogCQkgICAiICAt LXJhbmRvbS1zZWVkPVNFRUQgICAgICAgc2V0IHJhbmRvbSBzZWVkIChcInRpbWVcIiwgXCJyYW5k XCIsIGludGVnZXIpXG4iCiAJCSAgICIgIC0tc2FtcGxpbmctcmF0ZT1OVU0gICAgICBmcmFjdGlv biBvZiB0cmFuc2FjdGlvbnMgdG8gbG9nIChlLmcuLCAwLjAxIGZvciAxJSUpXG4iCiAJCSAgICJc bkNvbW1vbiBvcHRpb25zOlxuIgotCQkgICAiICAtZCwgLS1kZWJ1ZyAgICAgICAgICAgICAgcHJp bnQgZGVidWdnaW5nIG91dHB1dFxuIgorCQkgICAiICAtZCwgLS1kZWJ1Zz1ub3xmYWlsc3xhbGwg cHJpbnQgZGVidWdnaW5nIG91dHB1dCAoZGVmYXVsdDogbm8pXG4iCiAJCSAgICIgIC1oLCAtLWhv c3Q9SE9TVE5BTUUgICAgICBkYXRhYmFzZSBzZXJ2ZXIgaG9zdCBvciBzb2NrZXQgZGlyZWN0b3J5 XG4iCiAJCSAgICIgIC1wLCAtLXBvcnQ9UE9SVCAgICAgICAgICBkYXRhYmFzZSBzZXJ2ZXIgcG9y dCBudW1iZXJcbiIKIAkJICAgIiAgLVUsIC0tdXNlcm5hbWU9VVNFUk5BTUUgIGNvbm5lY3QgYXMg c3BlY2lmaWVkIGRhdGFiYXNlIHVzZXJcbiIKQEAgLTY5Myw3ICs4MDEsNyBAQCBnb3RkaWdpdHM6 CiAKIC8qIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yOiB1bmlmb3JtIGRpc3RyaWJ1dGlvbiBmcm9t IG1pbiB0byBtYXggaW5jbHVzaXZlICovCiBzdGF0aWMgaW50NjQKLWdldHJhbmQoVFN0YXRlICp0 aHJlYWQsIGludDY0IG1pbiwgaW50NjQgbWF4KQorZ2V0cmFuZChSYW5kb21TdGF0ZSAqcmFuZG9t X3N0YXRlLCBpbnQ2NCBtaW4sIGludDY0IG1heCkKIHsKIAkvKgogCSAqIE9kZCBjb2RpbmcgaXMg c28gdGhhdCBtaW4gYW5kIG1heCBoYXZlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgY2hhbmNlIG9m CkBAIC03MDQsNyArODEyLDcgQEAgZ2V0cmFuZChUU3RhdGUgKnRocmVhZCwgaW50NjQgbWluLCBp bnQ2NCBtYXgpCiAJICogcHJvdGVjdGVkIGJ5IGEgbXV0ZXgsIGFuZCB0aGVyZWZvcmUgYSBib3R0 bGVuZWNrIG9uIG1hY2hpbmVzIHdpdGggbWFueQogCSAqIENQVXMuCiAJICovCi0JcmV0dXJuIG1p biArIChpbnQ2NCkgKChtYXggLSBtaW4gKyAxKSAqIHBnX2VyYW5kNDgodGhyZWFkLT5yYW5kb21f c3RhdGUpKTsKKwlyZXR1cm4gbWluICsgKGludDY0KSAoKG1heCAtIG1pbiArIDEpICogcGdfZXJh bmQ0OChyYW5kb21fc3RhdGUtPmRhdGEpKTsKIH0KIAogLyoKQEAgLTcxMyw3ICs4MjEsOCBAQCBn ZXRyYW5kKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBtaW4sIGludDY0IG1heCkKICAqIHZhbHVlIGlz IGV4cCgtcGFyYW1ldGVyKS4KICAqLwogc3RhdGljIGludDY0Ci1nZXRFeHBvbmVudGlhbFJhbmQo VFN0YXRlICp0aHJlYWQsIGludDY0IG1pbiwgaW50NjQgbWF4LCBkb3VibGUgcGFyYW1ldGVyKQor Z2V0RXhwb25lbnRpYWxSYW5kKFJhbmRvbVN0YXRlICpyYW5kb21fc3RhdGUsIGludDY0IG1pbiwg aW50NjQgbWF4LAorCQkJCSAgIGRvdWJsZSBwYXJhbWV0ZXIpCiB7CiAJZG91YmxlCQljdXQsCiAJ CQkJdW5pZm9ybSwKQEAgLTcyMyw3ICs4MzIsNyBAQCBnZXRFeHBvbmVudGlhbFJhbmQoVFN0YXRl ICp0aHJlYWQsIGludDY0IG1pbiwgaW50NjQgbWF4LCBkb3VibGUgcGFyYW1ldGVyKQogCUFzc2Vy dChwYXJhbWV0ZXIgPiAwLjApOwogCWN1dCA9IGV4cCgtcGFyYW1ldGVyKTsKIAkvKiBlcmFuZCBp biBbMCwgMSksIHVuaWZvcm0gaW4gKDAsIDFdICovCi0JdW5pZm9ybSA9IDEuMCAtIHBnX2VyYW5k NDgodGhyZWFkLT5yYW5kb21fc3RhdGUpOworCXVuaWZvcm0gPSAxLjAgLSBwZ19lcmFuZDQ4KHJh bmRvbV9zdGF0ZS0+ZGF0YSk7CiAKIAkvKgogCSAqIGlubmVyIGV4cHJlc3Npb24gaW4gKGN1dCwg MV0gKGlmIHBhcmFtZXRlciA+IDApLCByYW5kIGluIFswLCAxKQpAQCAtNzM2LDcgKzg0NSw4IEBA IGdldEV4cG9uZW50aWFsUmFuZChUU3RhdGUgKnRocmVhZCwgaW50NjQgbWluLCBpbnQ2NCBtYXgs IGRvdWJsZSBwYXJhbWV0ZXIpCiAKIC8qIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yOiBnYXVzc2lh biBkaXN0cmlidXRpb24gZnJvbSBtaW4gdG8gbWF4IGluY2x1c2l2ZSAqLwogc3RhdGljIGludDY0 Ci1nZXRHYXVzc2lhblJhbmQoVFN0YXRlICp0aHJlYWQsIGludDY0IG1pbiwgaW50NjQgbWF4LCBk b3VibGUgcGFyYW1ldGVyKQorZ2V0R2F1c3NpYW5SYW5kKFJhbmRvbVN0YXRlICpyYW5kb21fc3Rh dGUsIGludDY0IG1pbiwgaW50NjQgbWF4LAorCQkJCWRvdWJsZSBwYXJhbWV0ZXIpCiB7CiAJZG91 YmxlCQlzdGRldjsKIAlkb3VibGUJCXJhbmQ7CkBAIC03NjQsOCArODc0LDggQEAgZ2V0R2F1c3Np YW5SYW5kKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBtaW4sIGludDY0IG1heCwgZG91YmxlIHBhcmFt ZXRlcikKIAkJICogYXJlIGV4cGVjdGVkIGluICgwLCAxXSAoc2VlCiAJCSAqIGh0dHA6Ly9lbi53 aWtpcGVkaWEub3JnL3dpa2kvQm94X211bGxlcikKIAkJICovCi0JCWRvdWJsZQkJcmFuZDEgPSAx LjAgLSBwZ19lcmFuZDQ4KHRocmVhZC0+cmFuZG9tX3N0YXRlKTsKLQkJZG91YmxlCQlyYW5kMiA9 IDEuMCAtIHBnX2VyYW5kNDgodGhyZWFkLT5yYW5kb21fc3RhdGUpOworCQlkb3VibGUJCXJhbmQx ID0gMS4wIC0gcGdfZXJhbmQ0OChyYW5kb21fc3RhdGUtPmRhdGEpOworCQlkb3VibGUJCXJhbmQy ID0gMS4wIC0gcGdfZXJhbmQ0OChyYW5kb21fc3RhdGUtPmRhdGEpOwogCiAJCS8qIEJveC1NdWxs ZXIgYmFzaWMgZm9ybSB0cmFuc2Zvcm0gKi8KIAkJZG91YmxlCQl2YXJfc3FydCA9IHNxcnQoLTIu MCAqIGxvZyhyYW5kMSkpOwpAQCAtNzkyLDcgKzkwMiw3IEBAIGdldEdhdXNzaWFuUmFuZChUU3Rh dGUgKnRocmVhZCwgaW50NjQgbWluLCBpbnQ2NCBtYXgsIGRvdWJsZSBwYXJhbWV0ZXIpCiAgKiB3 aWxsIGFwcHJveGltYXRlIGEgUG9pc3NvbiBkaXN0cmlidXRpb24gY2VudGVyZWQgb24gdGhlIGdp dmVuIHZhbHVlLgogICovCiBzdGF0aWMgaW50NjQKLWdldFBvaXNzb25SYW5kKFRTdGF0ZSAqdGhy ZWFkLCBpbnQ2NCBjZW50ZXIpCitnZXRQb2lzc29uUmFuZChSYW5kb21TdGF0ZSAqcmFuZG9tX3N0 YXRlLCBpbnQ2NCBjZW50ZXIpCiB7CiAJLyoKIAkgKiBVc2UgaW52ZXJzZSB0cmFuc2Zvcm0gc2Ft cGxpbmcgdG8gZ2VuZXJhdGUgYSB2YWx1ZSA+IDAsIHN1Y2ggdGhhdCB0aGUKQEAgLTgwMSw3ICs5 MTEsNyBAQCBnZXRQb2lzc29uUmFuZChUU3RhdGUgKnRocmVhZCwgaW50NjQgY2VudGVyKQogCWRv dWJsZQkJdW5pZm9ybTsKIAogCS8qIGVyYW5kIGluIFswLCAxKSwgdW5pZm9ybSBpbiAoMCwgMV0g Ki8KLQl1bmlmb3JtID0gMS4wIC0gcGdfZXJhbmQ0OCh0aHJlYWQtPnJhbmRvbV9zdGF0ZSk7CisJ dW5pZm9ybSA9IDEuMCAtIHBnX2VyYW5kNDgocmFuZG9tX3N0YXRlLT5kYXRhKTsKIAogCXJldHVy biAoaW50NjQpICgtbG9nKHVuaWZvcm0pICogKChkb3VibGUpIGNlbnRlcikgKyAwLjUpOwogfQpA QCAtODc5LDcgKzk4OSw3IEBAIHppcGZGaW5kT3JDcmVhdGVDYWNoZUNlbGwoWmlwZkNhY2hlICog Y2FjaGUsIGludDY0IG4sIGRvdWJsZSBzKQogICogTHVjIERldnJveWUsIHAuIDU1MC01NTEsIFNw cmluZ2VyIDE5ODYuCiAgKi8KIHN0YXRpYyBpbnQ2NAotY29tcHV0ZUl0ZXJhdGl2ZVppcGZpYW4o VFN0YXRlICp0aHJlYWQsIGludDY0IG4sIGRvdWJsZSBzKQorY29tcHV0ZUl0ZXJhdGl2ZVppcGZp YW4oUmFuZG9tU3RhdGUgKnJhbmRvbV9zdGF0ZSwgaW50NjQgbiwgZG91YmxlIHMpCiB7CiAJZG91 YmxlCQliID0gcG93KDIuMCwgcyAtIDEuMCk7CiAJZG91YmxlCQl4LApAQCAtODkwLDggKzEwMDAs OCBAQCBjb21wdXRlSXRlcmF0aXZlWmlwZmlhbihUU3RhdGUgKnRocmVhZCwgaW50NjQgbiwgZG91 YmxlIHMpCiAJd2hpbGUgKHRydWUpCiAJewogCQkvKiByYW5kb20gdmFyaWF0ZXMgKi8KLQkJdSA9 IHBnX2VyYW5kNDgodGhyZWFkLT5yYW5kb21fc3RhdGUpOwotCQl2ID0gcGdfZXJhbmQ0OCh0aHJl YWQtPnJhbmRvbV9zdGF0ZSk7CisJCXUgPSBwZ19lcmFuZDQ4KHJhbmRvbV9zdGF0ZS0+ZGF0YSk7 CisJCXYgPSBwZ19lcmFuZDQ4KHJhbmRvbV9zdGF0ZS0+ZGF0YSk7CiAKIAkJeCA9IGZsb29yKHBv dyh1LCAtMS4wIC8gKHMgLSAxLjApKSk7CiAKQEAgLTkwOSwxMCArMTAxOSwxMSBAQCBjb21wdXRl SXRlcmF0aXZlWmlwZmlhbihUU3RhdGUgKnRocmVhZCwgaW50NjQgbiwgZG91YmxlIHMpCiAgKiBK aW0gR3JheSBldCBhbCwgU0lHTU9EIDE5OTQKICAqLwogc3RhdGljIGludDY0Ci1jb21wdXRlSGFy bW9uaWNaaXBmaWFuKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBuLCBkb3VibGUgcykKK2NvbXB1dGVI YXJtb25pY1ppcGZpYW4oVFN0YXRlICp0aHJlYWQsIFJhbmRvbVN0YXRlICpyYW5kb21fc3RhdGUs IGludDY0IG4sCisJCQkJCSAgIGRvdWJsZSBzKQogewogCVppcGZDZWxsICAgKmNlbGwgPSB6aXBm RmluZE9yQ3JlYXRlQ2FjaGVDZWxsKCZ0aHJlYWQtPnppcGZfY2FjaGUsIG4sIHMpOwotCWRvdWJs ZQkJdW5pZm9ybSA9IHBnX2VyYW5kNDgodGhyZWFkLT5yYW5kb21fc3RhdGUpOworCWRvdWJsZQkJ dW5pZm9ybSA9IHBnX2VyYW5kNDgocmFuZG9tX3N0YXRlLT5kYXRhKTsKIAlkb3VibGUJCXV6ID0g dW5pZm9ybSAqIGNlbGwtPmhhcm1vbmljbjsKIAogCWlmICh1eiA8IDEuMCkKQEAgLTkyNCw3ICsx MDM1LDggQEAgY29tcHV0ZUhhcm1vbmljWmlwZmlhbihUU3RhdGUgKnRocmVhZCwgaW50NjQgbiwg ZG91YmxlIHMpCiAKIC8qIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yOiB6aXBmaWFuIGRpc3RyaWJ1 dGlvbiBmcm9tIG1pbiB0byBtYXggaW5jbHVzaXZlICovCiBzdGF0aWMgaW50NjQKLWdldFppcGZp YW5SYW5kKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBtaW4sIGludDY0IG1heCwgZG91YmxlIHMpCitn ZXRaaXBmaWFuUmFuZChUU3RhdGUgKnRocmVhZCwgUmFuZG9tU3RhdGUgKnJhbmRvbV9zdGF0ZSwg aW50NjQgbWluLAorCQkJICAgaW50NjQgbWF4LCBkb3VibGUgcykKIHsKIAlpbnQ2NAkJbiA9IG1h eCAtIG1pbiArIDE7CiAKQEAgLTkzMyw4ICsxMDQ1LDggQEAgZ2V0WmlwZmlhblJhbmQoVFN0YXRl ICp0aHJlYWQsIGludDY0IG1pbiwgaW50NjQgbWF4LCBkb3VibGUgcykKIAogCiAJcmV0dXJuIG1p biAtIDEgKyAoKHMgPiAxKQotCQkJCQkgID8gY29tcHV0ZUl0ZXJhdGl2ZVppcGZpYW4odGhyZWFk LCBuLCBzKQotCQkJCQkgIDogY29tcHV0ZUhhcm1vbmljWmlwZmlhbih0aHJlYWQsIG4sIHMpKTsK KwkJCQkJPyBjb21wdXRlSXRlcmF0aXZlWmlwZmlhbihyYW5kb21fc3RhdGUsIG4sIHMpCisJCQkJ CTogY29tcHV0ZUhhcm1vbmljWmlwZmlhbih0aHJlYWQsIHJhbmRvbV9zdGF0ZSwgbiwgcykpOwog fQogCiAvKgpAQCAtMTAzNCw2ICsxMTQ2LDEwIEBAIGluaXRTdGF0cyhTdGF0c0RhdGEgKnNkLCB0 aW1lX3Qgc3RhcnRfdGltZSkKIAlzZC0+c3RhcnRfdGltZSA9IHN0YXJ0X3RpbWU7CiAJc2QtPmNu dCA9IDA7CiAJc2QtPnNraXBwZWQgPSAwOworCXNkLT5yZXRyaWVzID0gMDsKKwlzZC0+cmV0cmll ZCA9IDA7CisJc2QtPmVycm9ycyA9IDA7CisJc2QtPmVycm9yc19pbl9mYWlsZWRfdHggPSAwOwog CWluaXRTaW1wbGVTdGF0cygmc2QtPmxhdGVuY3kpOwogCWluaXRTaW1wbGVTdGF0cygmc2QtPmxh Zyk7CiB9CkBAIC0xMDQyLDggKzExNTgsMjQgQEAgaW5pdFN0YXRzKFN0YXRzRGF0YSAqc2QsIHRp bWVfdCBzdGFydF90aW1lKQogICogQWNjdW11bGF0ZSBvbmUgYWRkaXRpb25hbCBpdGVtIGludG8g dGhlIGdpdmVuIHN0YXRzIG9iamVjdC4KICAqLwogc3RhdGljIHZvaWQKLWFjY3VtU3RhdHMoU3Rh dHNEYXRhICpzdGF0cywgYm9vbCBza2lwcGVkLCBkb3VibGUgbGF0LCBkb3VibGUgbGFnKQorYWNj dW1TdGF0cyhTdGF0c0RhdGEgKnN0YXRzLCBib29sIHNraXBwZWQsIGRvdWJsZSBsYXQsIGRvdWJs ZSBsYWcsCisJCSAgIEZhaWx1cmVTdGF0dXMgZmlyc3RfZXJyb3IsIGludDY0IHJldHJpZXMpCiB7 CisJc3RhdHMtPnJldHJpZXMgKz0gcmV0cmllczsKKwlpZiAocmV0cmllcyA+IDApCisJCXN0YXRz LT5yZXRyaWVkKys7CisKKwkvKiBmYWlsZWQgdHJhbnNhY3Rpb25zIGFyZSBwcm9jZXNzZWQgc2Vw YXJhdGx5ICovCisJaWYgKGZpcnN0X2Vycm9yICE9IE5PX0ZBSUxVUkUpCisJeworCQlzdGF0cy0+ ZXJyb3JzKys7CisKKwkJaWYgKGZpcnN0X2Vycm9yID09IElOX0ZBSUxFRF9TUUxfVFJBTlNBQ1RJ T04pCisJCQlzdGF0cy0+ZXJyb3JzX2luX2ZhaWxlZF90eCsrOworCisJCXJldHVybjsKKwl9CisK IAlzdGF0cy0+Y250Kys7CiAKIAlpZiAoc2tpcHBlZCkKQEAgLTEwNjEsNiArMTE5MywxNCBAQCBh Y2N1bVN0YXRzKFN0YXRzRGF0YSAqc3RhdHMsIGJvb2wgc2tpcHBlZCwgZG91YmxlIGxhdCwgZG91 YmxlIGxhZykKIAl9CiB9CiAKK3N0YXRpYyB2b2lkCitpbml0UmFuZG9tU3RhdGUoUmFuZG9tU3Rh dGUgKnJhbmRvbV9zdGF0ZSkKK3sKKwlyYW5kb21fc3RhdGUtPmRhdGFbMF0gPSByYW5kb20oKTsK KwlyYW5kb21fc3RhdGUtPmRhdGFbMV0gPSByYW5kb20oKTsKKwlyYW5kb21fc3RhdGUtPmRhdGFb Ml0gPSByYW5kb20oKTsKK30KKwogLyogY2FsbCBQUWV4ZWMoKSBhbmQgZXhpdCgpIG9uIGZhaWx1 cmUgKi8KIHN0YXRpYyB2b2lkCiBleGVjdXRlU3RhdGVtZW50KFBHY29ubiAqY29uLCBjb25zdCBj aGFyICpzcWwpCkBAIC0xMTg0LDM5ICsxMzI0LDM5IEBAIGNvbXBhcmVWYXJpYWJsZU5hbWVzKGNv bnN0IHZvaWQgKnYxLCBjb25zdCB2b2lkICp2MikKIAogLyogTG9jYXRlIGEgdmFyaWFibGUgYnkg bmFtZTsgcmV0dXJucyBOVUxMIGlmIHVua25vd24gKi8KIHN0YXRpYyBWYXJpYWJsZSAqCi1sb29r dXBWYXJpYWJsZShDU3RhdGUgKnN0LCBjaGFyICpuYW1lKQorbG9va3VwVmFyaWFibGUoVmFyaWFi bGVzICp2YXJpYWJsZXMsIGNoYXIgKm5hbWUpCiB7CiAJVmFyaWFibGUJa2V5OwogCiAJLyogT24g c29tZSB2ZXJzaW9ucyBvZiBTb2xhcmlzLCBic2VhcmNoIG9mIHplcm8gaXRlbXMgZHVtcHMgY29y ZSAqLwotCWlmIChzdC0+bnZhcmlhYmxlcyA8PSAwKQorCWlmICh2YXJpYWJsZXMtPm52YXJpYWJs ZXMgPD0gMCkKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKiBTb3J0IGlmIHdlIGhhdmUgdG8gKi8KLQlp ZiAoIXN0LT52YXJzX3NvcnRlZCkKKwlpZiAoIXZhcmlhYmxlcy0+dmFyc19zb3J0ZWQpCiAJewot CQlxc29ydCgodm9pZCAqKSBzdC0+dmFyaWFibGVzLCBzdC0+bnZhcmlhYmxlcywgc2l6ZW9mKFZh cmlhYmxlKSwKLQkJCSAgY29tcGFyZVZhcmlhYmxlTmFtZXMpOwotCQlzdC0+dmFyc19zb3J0ZWQg PSB0cnVlOworCQlxc29ydCgodm9pZCAqKSB2YXJpYWJsZXMtPmFycmF5LCB2YXJpYWJsZXMtPm52 YXJpYWJsZXMsCisJCQkgIHNpemVvZihWYXJpYWJsZSksIGNvbXBhcmVWYXJpYWJsZU5hbWVzKTsK KwkJdmFyaWFibGVzLT52YXJzX3NvcnRlZCA9IHRydWU7CiAJfQogCiAJLyogTm93IHdlIGNhbiBz ZWFyY2ggKi8KIAlrZXkubmFtZSA9IG5hbWU7CiAJcmV0dXJuIChWYXJpYWJsZSAqKSBic2VhcmNo KCh2b2lkICopICZrZXksCi0JCQkJCQkJCSh2b2lkICopIHN0LT52YXJpYWJsZXMsCi0JCQkJCQkJ CXN0LT5udmFyaWFibGVzLAorCQkJCQkJCQkodm9pZCAqKSB2YXJpYWJsZXMtPmFycmF5LAorCQkJ CQkJCQl2YXJpYWJsZXMtPm52YXJpYWJsZXMsCiAJCQkJCQkJCXNpemVvZihWYXJpYWJsZSksCiAJ CQkJCQkJCWNvbXBhcmVWYXJpYWJsZU5hbWVzKTsKIH0KIAogLyogR2V0IHRoZSB2YWx1ZSBvZiBh IHZhcmlhYmxlLCBpbiBzdHJpbmcgZm9ybTsgcmV0dXJucyBOVUxMIGlmIHVua25vd24gKi8KIHN0 YXRpYyBjaGFyICoKLWdldFZhcmlhYmxlKENTdGF0ZSAqc3QsIGNoYXIgKm5hbWUpCitnZXRWYXJp YWJsZShWYXJpYWJsZXMgKnZhcmlhYmxlcywgY2hhciAqbmFtZSkKIHsKIAlWYXJpYWJsZSAgICp2 YXI7CiAJY2hhcgkJc3RyaW5nZm9ybVs2NF07CiAKLQl2YXIgPSBsb29rdXBWYXJpYWJsZShzdCwg bmFtZSk7CisJdmFyID0gbG9va3VwVmFyaWFibGUodmFyaWFibGVzLCBuYW1lKTsKIAlpZiAodmFy ID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwkJCS8qIG5vdCBmb3VuZCAqLwogCkBAIC0xMjkwLDkg KzE0MzAsMTIgQEAgbWFrZVZhcmlhYmxlVmFsdWUoVmFyaWFibGUgKnZhcikKIAogCQlpZiAoc3Nj YW5mKHZhci0+c3ZhbHVlLCAiJWxmJWMiLCAmZHYsICZ4cykgIT0gMSkKIAkJewotCQkJZnByaW50 ZihzdGRlcnIsCi0JCQkJCSJtYWxmb3JtZWQgdmFyaWFibGUgXCIlc1wiIHZhbHVlOiBcIiVzXCJc biIsCi0JCQkJCXZhci0+bmFtZSwgdmFyLT5zdmFsdWUpOworCQkJaWYgKGRlYnVnX2xldmVsID49 IERFQlVHX0ZBSUxTKQorCQkJeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkJIm1hbGZvcm1l ZCB2YXJpYWJsZSBcIiVzXCIgdmFsdWU6IFwiJXNcIlxuIiwKKwkJCQkJCXZhci0+bmFtZSwgdmFy LT5zdmFsdWUpOworCQkJfQogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJCXNldERvdWJsZVZhbHVl KCZ2YXItPnZhbHVlLCBkdik7CkBAIC0xMzQwLDExICsxNDgzLDEyIEBAIHZhbGlkX3ZhcmlhYmxl X25hbWUoY29uc3QgY2hhciAqbmFtZSkKICAqIFJldHVybnMgTlVMTCBvbiBmYWlsdXJlIChiYWQg bmFtZSkuCiAgKi8KIHN0YXRpYyBWYXJpYWJsZSAqCi1sb29rdXBDcmVhdGVWYXJpYWJsZShDU3Rh dGUgKnN0LCBjb25zdCBjaGFyICpjb250ZXh0LCBjaGFyICpuYW1lKQorbG9va3VwQ3JlYXRlVmFy aWFibGUoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5h bWUsCisJCQkJCSBib29sIGFib3J0ZWQpCiB7CiAJVmFyaWFibGUgICAqdmFyOwogCi0JdmFyID0g bG9va3VwVmFyaWFibGUoc3QsIG5hbWUpOworCXZhciA9IGxvb2t1cFZhcmlhYmxlKHZhcmlhYmxl cywgbmFtZSk7CiAJaWYgKHZhciA9PSBOVUxMKQogCXsKIAkJVmFyaWFibGUgICAqbmV3dmFyczsK QEAgLTEzNTUsMjkgKzE0OTksMzIgQEAgbG9va3VwQ3JlYXRlVmFyaWFibGUoQ1N0YXRlICpzdCwg Y29uc3QgY2hhciAqY29udGV4dCwgY2hhciAqbmFtZSkKIAkJICovCiAJCWlmICghdmFsaWRfdmFy aWFibGVfbmFtZShuYW1lKSkKIAkJewotCQkJZnByaW50ZihzdGRlcnIsICIlczogaW52YWxpZCB2 YXJpYWJsZSBuYW1lOiBcIiVzXCJcbiIsCi0JCQkJCWNvbnRleHQsIG5hbWUpOworCQkJaWYgKGFi b3J0ZWQgfHwgZGVidWdfbGV2ZWwgPj0gREVCVUdfRkFJTFMpCisJCQl7CisJCQkJZnByaW50Zihz dGRlcnIsICIlczogaW52YWxpZCB2YXJpYWJsZSBuYW1lOiBcIiVzXCJcbiIsCisJCQkJCQljb250 ZXh0LCBuYW1lKTsKKwkJCX0KIAkJCXJldHVybiBOVUxMOwogCQl9CiAKIAkJLyogQ3JlYXRlIHZh cmlhYmxlIGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5ICovCi0JCWlmIChzdC0+dmFyaWFibGVzKQot CQkJbmV3dmFycyA9IChWYXJpYWJsZSAqKSBwZ19yZWFsbG9jKHN0LT52YXJpYWJsZXMsCi0JCQkJ CQkJCQkJCSAgKHN0LT5udmFyaWFibGVzICsgMSkgKiBzaXplb2YoVmFyaWFibGUpKTsKKwkJaWYg KHZhcmlhYmxlcy0+YXJyYXkpCisJCQluZXd2YXJzID0gKFZhcmlhYmxlICopIHBnX3JlYWxsb2Mo dmFyaWFibGVzLT5hcnJheSwKKwkJCQkJCQkJKHZhcmlhYmxlcy0+bnZhcmlhYmxlcyArIDEpICog c2l6ZW9mKFZhcmlhYmxlKSk7CiAJCWVsc2UKIAkJCW5ld3ZhcnMgPSAoVmFyaWFibGUgKikgcGdf bWFsbG9jKHNpemVvZihWYXJpYWJsZSkpOwogCi0JCXN0LT52YXJpYWJsZXMgPSBuZXd2YXJzOwor CQl2YXJpYWJsZXMtPmFycmF5ID0gbmV3dmFyczsKIAotCQl2YXIgPSAmbmV3dmFyc1tzdC0+bnZh cmlhYmxlc107CisJCXZhciA9ICZuZXd2YXJzW3ZhcmlhYmxlcy0+bnZhcmlhYmxlc107CiAKIAkJ dmFyLT5uYW1lID0gcGdfc3RyZHVwKG5hbWUpOwogCQl2YXItPnN2YWx1ZSA9IE5VTEw7CiAJCS8q IGNhbGxlciBpcyBleHBlY3RlZCB0byBpbml0aWFsaXplIHJlbWFpbmluZyBmaWVsZHMgKi8KIAot CQlzdC0+bnZhcmlhYmxlcysrOworCQl2YXJpYWJsZXMtPm52YXJpYWJsZXMrKzsKIAkJLyogd2Ug ZG9uJ3QgcmUtc29ydCB0aGUgYXJyYXkgdGlsbCB3ZSBoYXZlIHRvICovCi0JCXN0LT52YXJzX3Nv cnRlZCA9IGZhbHNlOworCQl2YXJpYWJsZXMtPnZhcnNfc29ydGVkID0gZmFsc2U7CiAJfQogCiAJ cmV0dXJuIHZhcjsKQEAgLTEzODYsMTIgKzE1MzMsMTMgQEAgbG9va3VwQ3JlYXRlVmFyaWFibGUo Q1N0YXRlICpzdCwgY29uc3QgY2hhciAqY29udGV4dCwgY2hhciAqbmFtZSkKIC8qIEFzc2lnbiBh IHN0cmluZyB2YWx1ZSB0byBhIHZhcmlhYmxlLCBjcmVhdGluZyBpdCBpZiBuZWVkIGJlICovCiAv KiBSZXR1cm5zIGZhbHNlIG9uIGZhaWx1cmUgKGJhZCBuYW1lKSAqLwogc3RhdGljIGJvb2wKLXB1 dFZhcmlhYmxlKENTdGF0ZSAqc3QsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUsIGNv bnN0IGNoYXIgKnZhbHVlKQorcHV0VmFyaWFibGUoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNvbnN0 IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUsCisJCQljb25zdCBjaGFyICp2YWx1ZSkKIHsKIAlW YXJpYWJsZSAgICp2YXI7CiAJY2hhcgkgICAqdmFsOwogCi0JdmFyID0gbG9va3VwQ3JlYXRlVmFy aWFibGUoc3QsIGNvbnRleHQsIG5hbWUpOworCXZhciA9IGxvb2t1cENyZWF0ZVZhcmlhYmxlKHZh cmlhYmxlcywgY29udGV4dCwgbmFtZSwgdHJ1ZSk7CiAJaWYgKCF2YXIpCiAJCXJldHVybiBmYWxz ZTsKIApAQCAtMTQwOSwxMiArMTU1NywxMiBAQCBwdXRWYXJpYWJsZShDU3RhdGUgKnN0LCBjb25z dCBjaGFyICpjb250ZXh0LCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKIC8qIEFzc2ln biBhIHZhbHVlIHRvIGEgdmFyaWFibGUsIGNyZWF0aW5nIGl0IGlmIG5lZWQgYmUgKi8KIC8qIFJl dHVybnMgZmFsc2Ugb24gZmFpbHVyZSAoYmFkIG5hbWUpICovCiBzdGF0aWMgYm9vbAotcHV0VmFy aWFibGVWYWx1ZShDU3RhdGUgKnN0LCBjb25zdCBjaGFyICpjb250ZXh0LCBjaGFyICpuYW1lLAot CQkJCSAgY29uc3QgUGdCZW5jaFZhbHVlICp2YWx1ZSkKK3B1dFZhcmlhYmxlVmFsdWUoVmFyaWFi bGVzICp2YXJpYWJsZXMsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUsCisJCQkJICBj b25zdCBQZ0JlbmNoVmFsdWUgKnZhbHVlLCBib29sIGFib3J0ZWQpCiB7CiAJVmFyaWFibGUgICAq dmFyOwogCi0JdmFyID0gbG9va3VwQ3JlYXRlVmFyaWFibGUoc3QsIGNvbnRleHQsIG5hbWUpOwor CXZhciA9IGxvb2t1cENyZWF0ZVZhcmlhYmxlKHZhcmlhYmxlcywgY29udGV4dCwgbmFtZSwgYWJv cnRlZCk7CiAJaWYgKCF2YXIpCiAJCXJldHVybiBmYWxzZTsKIApAQCAtMTQyOSwxMiArMTU3Nywx MyBAQCBwdXRWYXJpYWJsZVZhbHVlKENTdGF0ZSAqc3QsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNo YXIgKm5hbWUsCiAvKiBBc3NpZ24gYW4gaW50ZWdlciB2YWx1ZSB0byBhIHZhcmlhYmxlLCBjcmVh dGluZyBpdCBpZiBuZWVkIGJlICovCiAvKiBSZXR1cm5zIGZhbHNlIG9uIGZhaWx1cmUgKGJhZCBu YW1lKSAqLwogc3RhdGljIGJvb2wKLXB1dFZhcmlhYmxlSW50KENTdGF0ZSAqc3QsIGNvbnN0IGNo YXIgKmNvbnRleHQsIGNoYXIgKm5hbWUsIGludDY0IHZhbHVlKQorcHV0VmFyaWFibGVJbnQoVmFy aWFibGVzICp2YXJpYWJsZXMsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUsCisJCQkg ICBpbnQ2NCB2YWx1ZSwgYm9vbCBhYm9ydGVkKQogewogCVBnQmVuY2hWYWx1ZSB2YWw7CiAKIAlz ZXRJbnRWYWx1ZSgmdmFsLCB2YWx1ZSk7Ci0JcmV0dXJuIHB1dFZhcmlhYmxlVmFsdWUoc3QsIGNv bnRleHQsIG5hbWUsICZ2YWwpOworCXJldHVybiBwdXRWYXJpYWJsZVZhbHVlKHZhcmlhYmxlcywg Y29udGV4dCwgbmFtZSwgJnZhbCwgYWJvcnRlZCk7CiB9CiAKIC8qCkBAIC0xNDg5LDcgKzE2Mzgs NyBAQCByZXBsYWNlVmFyaWFibGUoY2hhciAqKnNxbCwgY2hhciAqcGFyYW0sIGludCBsZW4sIGNo YXIgKnZhbHVlKQogfQogCiBzdGF0aWMgY2hhciAqCi1hc3NpZ25WYXJpYWJsZXMoQ1N0YXRlICpz dCwgY2hhciAqc3FsKQorYXNzaWduVmFyaWFibGVzKFZhcmlhYmxlcyAqdmFyaWFibGVzLCBjaGFy ICpzcWwpCiB7CiAJY2hhcgkgICAqcCwKIAkJCSAgICpuYW1lLApAQCAtMTUxMCw3ICsxNjU5LDcg QEAgYXNzaWduVmFyaWFibGVzKENTdGF0ZSAqc3QsIGNoYXIgKnNxbCkKIAkJCWNvbnRpbnVlOwog CQl9CiAKLQkJdmFsID0gZ2V0VmFyaWFibGUoc3QsIG5hbWUpOworCQl2YWwgPSBnZXRWYXJpYWJs ZSh2YXJpYWJsZXMsIG5hbWUpOwogCQlmcmVlKG5hbWUpOwogCQlpZiAodmFsID09IE5VTEwpCiAJ CXsKQEAgLTE1MjUsMTIgKzE2NzQsMTMgQEAgYXNzaWduVmFyaWFibGVzKENTdGF0ZSAqc3QsIGNo YXIgKnNxbCkKIH0KIAogc3RhdGljIHZvaWQKLWdldFF1ZXJ5UGFyYW1zKENTdGF0ZSAqc3QsIGNv bnN0IENvbW1hbmQgKmNvbW1hbmQsIGNvbnN0IGNoYXIgKipwYXJhbXMpCitnZXRRdWVyeVBhcmFt cyhWYXJpYWJsZXMgKnZhcmlhYmxlcywgY29uc3QgQ29tbWFuZCAqY29tbWFuZCwKKwkJCSAgIGNv bnN0IGNoYXIgKipwYXJhbXMpCiB7CiAJaW50CQkJaTsKIAogCWZvciAoaSA9IDA7IGkgPCBjb21t YW5kLT5hcmdjIC0gMTsgaSsrKQotCQlwYXJhbXNbaV0gPSBnZXRWYXJpYWJsZShzdCwgY29tbWFu ZC0+YXJndltpICsgMV0pOworCQlwYXJhbXNbaV0gPSBnZXRWYXJpYWJsZSh2YXJpYWJsZXMsIGNv bW1hbmQtPmFyZ3ZbaSArIDFdKTsKIH0KIAogc3RhdGljIGNoYXIgKgpAQCAtMTU2NSw3ICsxNzE1 LDExIEBAIGNvZXJjZVRvQm9vbChQZ0JlbmNoVmFsdWUgKnB2YWwsIGJvb2wgKmJ2YWwpCiAJfQog CWVsc2UgLyogTlVMTCwgSU5UIG9yIERPVUJMRSAqLwogCXsKLQkJZnByaW50ZihzdGRlcnIsICJj YW5ub3QgY29lcmNlICVzIHRvIGJvb2xlYW5cbiIsIHZhbHVlVHlwZU5hbWUocHZhbCkpOworCQlp ZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfRkFJTFMpCisJCXsKKwkJCWZwcmludGYoc3RkZXJyLCAi Y2Fubm90IGNvZXJjZSAlcyB0byBib29sZWFuXG4iLAorCQkJCQl2YWx1ZVR5cGVOYW1lKHB2YWwp KTsKKwkJfQogCQkqYnZhbCA9IGZhbHNlOwkJCS8qIHN1cHByZXNzIHVuaW5pdGlhbGl6ZWQtdmFy aWFibGUgd2FybmluZ3MgKi8KIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTE2MTAsNyArMTc2NCw4 IEBAIGNvZXJjZVRvSW50KFBnQmVuY2hWYWx1ZSAqcHZhbCwgaW50NjQgKml2YWwpCiAKIAkJaWYg KGR2YWwgPCBQR19JTlQ2NF9NSU4gfHwgUEdfSU5UNjRfTUFYIDwgZHZhbCkKIAkJewotCQkJZnBy aW50ZihzdGRlcnIsICJkb3VibGUgdG8gaW50IG92ZXJmbG93IGZvciAlZlxuIiwgZHZhbCk7CisJ CQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfRkFJTFMpCisJCQkJZnByaW50ZihzdGRlcnIsICJk b3VibGUgdG8gaW50IG92ZXJmbG93IGZvciAlZlxuIiwgZHZhbCk7CiAJCQlyZXR1cm4gZmFsc2U7 CiAJCX0KIAkJKml2YWwgPSAoaW50NjQpIGR2YWw7CkBAIC0xNjE4LDcgKzE3NzMsOCBAQCBjb2Vy Y2VUb0ludChQZ0JlbmNoVmFsdWUgKnB2YWwsIGludDY0ICppdmFsKQogCX0KIAllbHNlIC8qIEJP T0xFQU4gb3IgTlVMTCAqLwogCXsKLQkJZnByaW50ZihzdGRlcnIsICJjYW5ub3QgY29lcmNlICVz IHRvIGludFxuIiwgdmFsdWVUeXBlTmFtZShwdmFsKSk7CisJCWlmIChkZWJ1Z19sZXZlbCA+PSBE RUJVR19GQUlMUykKKwkJCWZwcmludGYoc3RkZXJyLCAiY2Fubm90IGNvZXJjZSAlcyB0byBpbnRc biIsIHZhbHVlVHlwZU5hbWUocHZhbCkpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogfQpAQCAtMTYz OSw3ICsxNzk1LDkgQEAgY29lcmNlVG9Eb3VibGUoUGdCZW5jaFZhbHVlICpwdmFsLCBkb3VibGUg KmR2YWwpCiAJfQogCWVsc2UgLyogQk9PTEVBTiBvciBOVUxMICovCiAJewotCQlmcHJpbnRmKHN0 ZGVyciwgImNhbm5vdCBjb2VyY2UgJXMgdG8gZG91YmxlXG4iLCB2YWx1ZVR5cGVOYW1lKHB2YWwp KTsKKwkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0ZBSUxTKQorCQkJZnByaW50ZihzdGRlcnIs ICJjYW5ub3QgY29lcmNlICVzIHRvIGRvdWJsZVxuIiwKKwkJCQkJdmFsdWVUeXBlTmFtZShwdmFs KSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiB9CkBAIC0xODE3LDggKzE5NzUsMTEgQEAgZXZhbFN0 YW5kYXJkRnVuYyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwKIAogCWlmIChsICE9IE5VTEwp CiAJewotCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkidG9vIG1hbnkgZnVuY3Rpb24gYXJndW1lbnRz LCBtYXhpbXVtIGlzICVkXG4iLCBNQVhfRkFSR1MpOworCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVC VUdfRkFJTFMpCisJCXsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkidG9vIG1hbnkgZnVuY3Rp b24gYXJndW1lbnRzLCBtYXhpbXVtIGlzICVkXG4iLCBNQVhfRkFSR1MpOworCQl9CiAJCXJldHVy biBmYWxzZTsKIAl9CiAKQEAgLTE5NDEsNyArMjEwMiw4IEBAIGV2YWxTdGFuZGFyZEZ1bmMoVFN0 YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCQkJCQljYXNlIFBHQkVOQ0hfTU9EOgogCQkJCQkJ CWlmIChyaSA9PSAwKQogCQkJCQkJCXsKLQkJCQkJCQkJZnByaW50ZihzdGRlcnIsICJkaXZpc2lv biBieSB6ZXJvXG4iKTsKKwkJCQkJCQkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0ZBSUxTKQor CQkJCQkJCQkJZnByaW50ZihzdGRlcnIsICJkaXZpc2lvbiBieSB6ZXJvXG4iKTsKIAkJCQkJCQkJ cmV0dXJuIGZhbHNlOwogCQkJCQkJCX0KIAkJCQkJCQkvKiBzcGVjaWFsIGhhbmRsaW5nIG9mIC0x IGRpdmlzb3IgKi8KQEAgLTE5NTIsNyArMjExNCwxMSBAQCBldmFsU3RhbmRhcmRGdW5jKFRTdGF0 ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAogCQkJCQkJCQkJLyogb3ZlcmZsb3cgY2hlY2sgKG5lZWRl ZCBmb3IgSU5UNjRfTUlOKSAqLwogCQkJCQkJCQkJaWYgKGxpID09IFBHX0lOVDY0X01JTikKIAkJ CQkJCQkJCXsKLQkJCQkJCQkJCQlmcHJpbnRmKHN0ZGVyciwgImJpZ2ludCBvdXQgb2YgcmFuZ2Vc biIpOworCQkJCQkJCQkJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19GQUlMUykKKwkJCQkJCQkJ CQl7CisJCQkJCQkJCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkJCQkJCQkJCSJiaWdpbnQgb3V0 IG9mIHJhbmdlXG4iKTsKKwkJCQkJCQkJCQl9CiAJCQkJCQkJCQkJcmV0dXJuIGZhbHNlOwogCQkJ CQkJCQkJfQogCQkJCQkJCQkJZWxzZQpAQCAtMjE4NywyMCArMjM1MywyMiBAQCBldmFsU3RhbmRh cmRGdW5jKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAogCQkJCS8qIGNoZWNrIHJhbmRvbSBy YW5nZSAqLwogCQkJCWlmIChpbWluID4gaW1heCkKIAkJCQl7Ci0JCQkJCWZwcmludGYoc3RkZXJy LCAiZW1wdHkgcmFuZ2UgZ2l2ZW4gdG8gcmFuZG9tXG4iKTsKKwkJCQkJaWYgKGRlYnVnX2xldmVs ID49IERFQlVHX0ZBSUxTKQorCQkJCQkJZnByaW50ZihzdGRlcnIsICJlbXB0eSByYW5nZSBnaXZl biB0byByYW5kb21cbiIpOwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCQkJCWVsc2UgaWYg KGltYXggLSBpbWluIDwgMCB8fCAoaW1heCAtIGltaW4pICsgMSA8IDApCiAJCQkJewogCQkJCQkv KiBwcmV2ZW50IGludCBvdmVyZmxvd3MgaW4gcmFuZG9tIGZ1bmN0aW9ucyAqLwotCQkJCQlmcHJp bnRmKHN0ZGVyciwgInJhbmRvbSByYW5nZSBpcyB0b28gbGFyZ2VcbiIpOworCQkJCQlpZiAoZGVi dWdfbGV2ZWwgPj0gREVCVUdfRkFJTFMpCisJCQkJCQlmcHJpbnRmKHN0ZGVyciwgInJhbmRvbSBy YW5nZSBpcyB0b28gbGFyZ2VcbiIpOwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCiAJCQkJ aWYgKGZ1bmMgPT0gUEdCRU5DSF9SQU5ET00pCiAJCQkJewogCQkJCQlBc3NlcnQobmFyZ3MgPT0g Mik7Ci0JCQkJCXNldEludFZhbHVlKHJldHZhbCwgZ2V0cmFuZCh0aHJlYWQsIGltaW4sIGltYXgp KTsKKwkJCQkJc2V0SW50VmFsdWUocmV0dmFsLCBnZXRyYW5kKCZzdC0+cmFuZG9tX3N0YXRlLCBp bWluLCBpbWF4KSk7CiAJCQkJfQogCQkJCWVsc2UJCQkvKiBnYXVzc2lhbiAmIGV4cG9uZW50aWFs ICovCiAJCQkJewpAQCAtMjIxNSwzOSArMjM4Myw1MSBAQCBldmFsU3RhbmRhcmRGdW5jKFRTdGF0 ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAogCQkJCQl7CiAJCQkJCQlpZiAocGFyYW0gPCBNSU5fR0FV U1NJQU5fUEFSQU0pCiAJCQkJCQl7Ci0JCQkJCQkJZnByaW50ZihzdGRlcnIsCi0JCQkJCQkJCQki Z2F1c3NpYW4gcGFyYW1ldGVyIG11c3QgYmUgYXQgbGVhc3QgJWYgIgotCQkJCQkJCQkJIihub3Qg JWYpXG4iLCBNSU5fR0FVU1NJQU5fUEFSQU0sIHBhcmFtKTsKKwkJCQkJCQlpZiAoZGVidWdfbGV2 ZWwgPj0gREVCVUdfRkFJTFMpCisJCQkJCQkJeworCQkJCQkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJ CQkJCQkJCQkiZ2F1c3NpYW4gcGFyYW1ldGVyIG11c3QgYmUgYXQgbGVhc3QgJWYgKG5vdCAlZilc biIsCisJCQkJCQkJCQkJTUlOX0dBVVNTSUFOX1BBUkFNLCBwYXJhbSk7CisJCQkJCQkJfQogCQkJ CQkJCXJldHVybiBmYWxzZTsKIAkJCQkJCX0KIAogCQkJCQkJc2V0SW50VmFsdWUocmV0dmFsLAot CQkJCQkJCQkJZ2V0R2F1c3NpYW5SYW5kKHRocmVhZCwgaW1pbiwgaW1heCwgcGFyYW0pKTsKKwkJ CQkJCQkJCWdldEdhdXNzaWFuUmFuZCgmc3QtPnJhbmRvbV9zdGF0ZSwgaW1pbiwKKwkJCQkJCQkJ CQkJCQlpbWF4LCBwYXJhbSkpOwogCQkJCQl9CiAJCQkJCWVsc2UgaWYgKGZ1bmMgPT0gUEdCRU5D SF9SQU5ET01fWklQRklBTikKIAkJCQkJewogCQkJCQkJaWYgKHBhcmFtIDw9IDAuMCB8fCBwYXJh bSA9PSAxLjAgfHwgcGFyYW0gPiBNQVhfWklQRklBTl9QQVJBTSkKIAkJCQkJCXsKLQkJCQkJCQlm cHJpbnRmKHN0ZGVyciwKLQkJCQkJCQkJCSJ6aXBmaWFuIHBhcmFtZXRlciBtdXN0IGJlIGluIHJh bmdlICgwLCAxKSBVICgxLCAlZF0iCi0JCQkJCQkJCQkiIChnb3QgJWYpXG4iLCBNQVhfWklQRklB Tl9QQVJBTSwgcGFyYW0pOworCQkJCQkJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19GQUlMUykK KwkJCQkJCQl7CisJCQkJCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkJCQkJCSJ6aXBmaWFuIHBh cmFtZXRlciBtdXN0IGJlIGluIHJhbmdlICgwLCAxKSBVICgxLCAlZF0gKGdvdCAlZilcbiIsCisJ CQkJCQkJCQkJTUFYX1pJUEZJQU5fUEFSQU0sIHBhcmFtKTsKKwkJCQkJCQl9CiAJCQkJCQkJcmV0 dXJuIGZhbHNlOwogCQkJCQkJfQogCQkJCQkJc2V0SW50VmFsdWUocmV0dmFsLAotCQkJCQkJCQkJ Z2V0WmlwZmlhblJhbmQodGhyZWFkLCBpbWluLCBpbWF4LCBwYXJhbSkpOworCQkJCQkJCQkJZ2V0 WmlwZmlhblJhbmQodGhyZWFkLCAmc3QtPnJhbmRvbV9zdGF0ZSwKKwkJCQkJCQkJCQkJCSAgIGlt aW4sIGltYXgsIHBhcmFtKSk7CiAJCQkJCX0KIAkJCQkJZWxzZQkJLyogZXhwb25lbnRpYWwgKi8K IAkJCQkJewogCQkJCQkJaWYgKHBhcmFtIDw9IDAuMCkKIAkJCQkJCXsKLQkJCQkJCQlmcHJpbnRm KHN0ZGVyciwKLQkJCQkJCQkJCSJleHBvbmVudGlhbCBwYXJhbWV0ZXIgbXVzdCBiZSBncmVhdGVy IHRoYW4gemVybyIKLQkJCQkJCQkJCSIgKGdvdCAlZilcbiIsIHBhcmFtKTsKKwkJCQkJCQlpZiAo ZGVidWdfbGV2ZWwgPj0gREVCVUdfRkFJTFMpCisJCQkJCQkJeworCQkJCQkJCQlmcHJpbnRmKHN0 ZGVyciwKKwkJCQkJCQkJCQkiZXhwb25lbnRpYWwgcGFyYW1ldGVyIG11c3QgYmUgZ3JlYXRlciB0 aGFuIHplcm8gKGdvdCAlZilcbiIsCisJCQkJCQkJCQkJcGFyYW0pOworCQkJCQkJCX0KIAkJCQkJ CQlyZXR1cm4gZmFsc2U7CiAJCQkJCQl9CiAKIAkJCQkJCXNldEludFZhbHVlKHJldHZhbCwKLQkJ CQkJCQkJCWdldEV4cG9uZW50aWFsUmFuZCh0aHJlYWQsIGltaW4sIGltYXgsIHBhcmFtKSk7CisJ CQkJCQkJCQlnZXRFeHBvbmVudGlhbFJhbmQoJnN0LT5yYW5kb21fc3RhdGUsIGltaW4sCisJCQkJ CQkJCQkJCQkJICAgaW1heCwgcGFyYW0pKTsKIAkJCQkJfQogCQkJCX0KIApAQCAtMjM0NiwxMCAr MjUyNiwxMyBAQCBldmFsdWF0ZUV4cHIoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFBnQmVu Y2hFeHByICpleHByLCBQZ0JlbmNoVmFsdWUgKnJldHZhbAogCQkJewogCQkJCVZhcmlhYmxlICAg KnZhcjsKIAotCQkJCWlmICgodmFyID0gbG9va3VwVmFyaWFibGUoc3QsIGV4cHItPnUudmFyaWFi bGUudmFybmFtZSkpID09IE5VTEwpCisJCQkJaWYgKCh2YXIgPSBsb29rdXBWYXJpYWJsZSgmc3Qt PnZhcmlhYmxlcywgZXhwci0+dS52YXJpYWJsZS52YXJuYW1lKSkgPT0gTlVMTCkKIAkJCQl7Ci0J CQkJCWZwcmludGYoc3RkZXJyLCAidW5kZWZpbmVkIHZhcmlhYmxlIFwiJXNcIlxuIiwKLQkJCQkJ CQlleHByLT51LnZhcmlhYmxlLnZhcm5hbWUpOworCQkJCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVC VUdfRkFJTFMpCisJCQkJCXsKKwkJCQkJCWZwcmludGYoc3RkZXJyLCAidW5kZWZpbmVkIHZhcmlh YmxlIFwiJXNcIlxuIiwKKwkJCQkJCQkJZXhwci0+dS52YXJpYWJsZS52YXJuYW1lKTsKKwkJCQkJ fQogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCkBAIC0yNDEwLDcgKzI1OTMsNyBAQCBnZXRN ZXRhQ29tbWFuZChjb25zdCBjaGFyICpjbWQpCiAgKiBSZXR1cm4gdHJ1ZSBpZiBzdWNjZWVkZWQs IG9yIGZhbHNlIG9uIGVycm9yLgogICovCiBzdGF0aWMgYm9vbAotcnVuU2hlbGxDb21tYW5kKENT dGF0ZSAqc3QsIGNoYXIgKnZhcmlhYmxlLCBjaGFyICoqYXJndiwgaW50IGFyZ2MpCitydW5TaGVs bENvbW1hbmQoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNoYXIgKnZhcmlhYmxlLCBjaGFyICoqYXJn diwgaW50IGFyZ2MpCiB7CiAJY2hhcgkJY29tbWFuZFtTSEVMTF9DT01NQU5EX1NJWkVdOwogCWlu dAkJCWksCkBAIC0yNDQxLDE3ICsyNjI0LDIxIEBAIHJ1blNoZWxsQ29tbWFuZChDU3RhdGUgKnN0 LCBjaGFyICp2YXJpYWJsZSwgY2hhciAqKmFyZ3YsIGludCBhcmdjKQogCQl7CiAJCQlhcmcgPSBh cmd2W2ldICsgMTsJLyogYSBzdHJpbmcgbGl0ZXJhbCBzdGFydGluZyB3aXRoIGNvbG9ucyAqLwog CQl9Ci0JCWVsc2UgaWYgKChhcmcgPSBnZXRWYXJpYWJsZShzdCwgYXJndltpXSArIDEpKSA9PSBO VUxMKQorCQllbHNlIGlmICgoYXJnID0gZ2V0VmFyaWFibGUodmFyaWFibGVzLCBhcmd2W2ldICsg MSkpID09IE5VTEwpCiAJCXsKLQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHVuZGVmaW5lZCB2YXJp YWJsZSBcIiVzXCJcbiIsCi0JCQkJCWFyZ3ZbMF0sIGFyZ3ZbaV0pOworCQkJaWYgKGRlYnVnX2xl dmVsID49IERFQlVHX0ZBSUxTKQorCQkJeworCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHVuZGVm aW5lZCB2YXJpYWJsZSBcIiVzXCJcbiIsCisJCQkJCQlhcmd2WzBdLCBhcmd2W2ldKTsKKwkJCX0K IAkJCXJldHVybiBmYWxzZTsKIAkJfQogCiAJCWFyZ2xlbiA9IHN0cmxlbihhcmcpOwogCQlpZiAo bGVuICsgYXJnbGVuICsgKGkgPiAwID8gMSA6IDApID49IFNIRUxMX0NPTU1BTkRfU0laRSAtIDEp CiAJCXsKLQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHNoZWxsIGNvbW1hbmQgaXMgdG9vIGxvbmdc biIsIGFyZ3ZbMF0pOworCQkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0ZBSUxTKQorCQkJCWZw cmludGYoc3RkZXJyLCAiJXM6IHNoZWxsIGNvbW1hbmQgaXMgdG9vIGxvbmdcbiIsIGFyZ3ZbMF0p OwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKQEAgLTI0NjgsNyArMjY1NSw3IEBAIHJ1blNoZWxs Q29tbWFuZChDU3RhdGUgKnN0LCBjaGFyICp2YXJpYWJsZSwgY2hhciAqKmFyZ3YsIGludCBhcmdj KQogCXsKIAkJaWYgKHN5c3RlbShjb21tYW5kKSkKIAkJewotCQkJaWYgKCF0aW1lcl9leGNlZWRl ZCkKKwkJCWlmICghdGltZXJfZXhjZWVkZWQgJiYgZGVidWdfbGV2ZWwgPj0gREVCVUdfRkFJTFMp CiAJCQkJZnByaW50ZihzdGRlcnIsICIlczogY291bGQgbm90IGxhdW5jaCBzaGVsbCBjb21tYW5k XG4iLCBhcmd2WzBdKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQpAQCAtMjQ3OCwxOSArMjY2NSwy MSBAQCBydW5TaGVsbENvbW1hbmQoQ1N0YXRlICpzdCwgY2hhciAqdmFyaWFibGUsIGNoYXIgKiph cmd2LCBpbnQgYXJnYykKIAkvKiBFeGVjdXRlIHRoZSBjb21tYW5kIHdpdGggcGlwZSBhbmQgcmVh ZCB0aGUgc3RhbmRhcmQgb3V0cHV0LiAqLwogCWlmICgoZnAgPSBwb3Blbihjb21tYW5kLCAiciIp KSA9PSBOVUxMKQogCXsKLQkJZnByaW50ZihzdGRlcnIsICIlczogY291bGQgbm90IGxhdW5jaCBz aGVsbCBjb21tYW5kXG4iLCBhcmd2WzBdKTsKKwkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0ZB SUxTKQorCQkJZnByaW50ZihzdGRlcnIsICIlczogY291bGQgbm90IGxhdW5jaCBzaGVsbCBjb21t YW5kXG4iLCBhcmd2WzBdKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAlpZiAoZmdldHMocmVzLCBz aXplb2YocmVzKSwgZnApID09IE5VTEwpCiAJewotCQlpZiAoIXRpbWVyX2V4Y2VlZGVkKQorCQlp ZiAoIXRpbWVyX2V4Y2VlZGVkICYmIGRlYnVnX2xldmVsID49IERFQlVHX0ZBSUxTKQogCQkJZnBy aW50ZihzdGRlcnIsICIlczogY291bGQgbm90IHJlYWQgcmVzdWx0IG9mIHNoZWxsIGNvbW1hbmRc biIsIGFyZ3ZbMF0pOwogCQkodm9pZCkgcGNsb3NlKGZwKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0K IAlpZiAocGNsb3NlKGZwKSA8IDApCiAJewotCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBjb3VsZCBu b3QgY2xvc2Ugc2hlbGwgY29tbWFuZFxuIiwgYXJndlswXSk7CisJCWlmIChkZWJ1Z19sZXZlbCA+ PSBERUJVR19GQUlMUykKKwkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNvdWxkIG5vdCBjbG9zZSBz aGVsbCBjb21tYW5kXG4iLCBhcmd2WzBdKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtMjUw MCwxMSArMjY4OSwxNCBAQCBydW5TaGVsbENvbW1hbmQoQ1N0YXRlICpzdCwgY2hhciAqdmFyaWFi bGUsIGNoYXIgKiphcmd2LCBpbnQgYXJnYykKIAkJZW5kcHRyKys7CiAJaWYgKCpyZXMgPT0gJ1ww JyB8fCAqZW5kcHRyICE9ICdcMCcpCiAJewotCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBzaGVsbCBj b21tYW5kIG11c3QgcmV0dXJuIGFuIGludGVnZXIgKG5vdCBcIiVzXCIpXG4iLAotCQkJCWFyZ3Zb MF0sIHJlcyk7CisJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19GQUlMUykKKwkJeworCQkJZnBy aW50ZihzdGRlcnIsICIlczogc2hlbGwgY29tbWFuZCBtdXN0IHJldHVybiBhbiBpbnRlZ2VyIChu b3QgXCIlc1wiKVxuIiwKKwkJCQkJYXJndlswXSwgcmVzKTsKKwkJfQogCQlyZXR1cm4gZmFsc2U7 CiAJfQotCWlmICghcHV0VmFyaWFibGVJbnQoc3QsICJzZXRzaGVsbCIsIHZhcmlhYmxlLCByZXR2 YWwpKQorCWlmICghcHV0VmFyaWFibGVJbnQodmFyaWFibGVzLCAic2V0c2hlbGwiLCB2YXJpYWJs ZSwgcmV0dmFsLCBmYWxzZSkpCiAJCXJldHVybiBmYWxzZTsKIAogI2lmZGVmIERFQlVHCkBAIC0y NTIxLDExICsyNzEzLDQ2IEBAIHByZXBhcmVkU3RhdGVtZW50TmFtZShjaGFyICpidWZmZXIsIGlu dCBmaWxlLCBpbnQgc3RhdGUpCiB9CiAKIHN0YXRpYyB2b2lkCi1jb21tYW5kRmFpbGVkKENTdGF0 ZSAqc3QsIGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqbWVzc2FnZSkKK2NvbW1hbmRGYWls ZWQoQ1N0YXRlICpzdCwgY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICptZXNzYWdlLCBGYWls U3RhdHVzCisJCQkgIGZhaWxfc3RhdHVzKQogewotCWZwcmludGYoc3RkZXJyLAotCQkJImNsaWVu dCAlZCBhYm9ydGVkIGluIGNvbW1hbmQgJWQgKCVzKSBvZiBzY3JpcHQgJWQ7ICVzXG4iLAotCQkJ c3QtPmlkLCBzdC0+Y29tbWFuZCwgY21kLCBzdC0+dXNlX2ZpbGUsIG1lc3NhZ2UpOworCXN3aXRj aCAoZmFpbF9zdGF0dXMpCisJeworCQljYXNlIFRYX0ZBSUxVUkU6CisJCQlpZiAoZGVidWdfbGV2 ZWwgPj0gREVCVUdfRkFJTFMpCisJCQl7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCQkiY2xp ZW50ICVkIGdvdCBhIGZhaWx1cmUgKHRyeSAlZC8lZCkgaW4gY29tbWFuZCAlZCAoJXMpIG9mIHNj cmlwdCAlZDsgJXNcbiIsCisJCQkJCQlzdC0+aWQsIHN0LT5yZXRyaWVzICsgMSwgbWF4X3RyaWVz LCBzdC0+Y29tbWFuZCwgY21kLAorCQkJCQkJc3QtPnVzZV9maWxlLCBtZXNzYWdlKTsKKwkJCX0K KwkJCWJyZWFrOworCQljYXNlIElOX0ZBSUxFRF9UWDoKKwkJCWlmIChkZWJ1Z19sZXZlbCA+PSBE RUJVR19GQUlMUykKKwkJCXsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJCSJjbGllbnQgJWQg Y29udGludWVzIGEgZmFpbGVkIHRyYW5zYWN0aW9uIGluIGNvbW1hbmQgJWQgKCVzKSBvZiBzY3Jp cHQgJWQ7ICVzXG4iLAorCQkJCQkJc3QtPmlkLCBzdC0+Y29tbWFuZCwgY21kLCBzdC0+dXNlX2Zp bGUsIG1lc3NhZ2UpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVFhfRVJST1I6CisJCQlpZiAo ZGVidWdfbGV2ZWwgPj0gREVCVUdfRkFJTFMpCisJCQl7CisJCQkJZnByaW50ZihzdGRlcnIsCisJ CQkJCQkiY2xpZW50ICVkIGdvdCBhbiBlcnJvciBpbiBjb21tYW5kICVkICglcykgb2Ygc2NyaXB0 ICVkOyAlc1xuIiwKKwkJCQkJCXN0LT5pZCwgc3QtPmNvbW1hbmQsIGNtZCwgc3QtPnVzZV9maWxl LCBtZXNzYWdlKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENMSUVOVF9BQk9SVEVEOgorCQkJ ZnByaW50ZihzdGRlcnIsCisJCQkJCSJjbGllbnQgJWQgYWJvcnRlZCBpbiBjb21tYW5kICVkICgl cykgb2Ygc2NyaXB0ICVkOyAlc1xuIiwKKwkJCQkJc3QtPmlkLCBzdC0+Y29tbWFuZCwgY21kLCBz dC0+dXNlX2ZpbGUsIG1lc3NhZ2UpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBpbnRl cm5hbCBlcnJvciB3aGljaCBzaG91bGQgbmV2ZXIgb2NjdXIgKi8KKwkJCWZwcmludGYoc3RkZXJy LCAidW5leHBlY3RlZCBmYWlsIHN0YXR1cyAlZCIsIGZhaWxfc3RhdHVzKTsKKwkJCWV4aXQoMSk7 CisJfQogfQogCiAvKiByZXR1cm4gYSBzY3JpcHQgbnVtYmVyIHdpdGggYSB3ZWlnaHRlZCBjaG9p Y2UuICovCkBAIC0yNTM4LDcgKzI3NjUsNyBAQCBjaG9vc2VTY3JpcHQoVFN0YXRlICp0aHJlYWQp CiAJaWYgKG51bV9zY3JpcHRzID09IDEpCiAJCXJldHVybiAwOwogCi0JdyA9IGdldHJhbmQodGhy ZWFkLCAwLCB0b3RhbF93ZWlnaHQgLSAxKTsKKwl3ID0gZ2V0cmFuZCgmdGhyZWFkLT5yYW5kb21f c3RhdGUsIDAsIHRvdGFsX3dlaWdodCAtIDEpOwogCWRvCiAJewogCQl3IC09IHNxbF9zY3JpcHRb aSsrXS53ZWlnaHQ7CkBAIC0yNTU4LDkgKzI3ODUsOSBAQCBzZW5kQ29tbWFuZChDU3RhdGUgKnN0 LCBDb21tYW5kICpjb21tYW5kKQogCQljaGFyCSAgICpzcWw7CiAKIAkJc3FsID0gcGdfc3RyZHVw KGNvbW1hbmQtPmFyZ3ZbMF0pOwotCQlzcWwgPSBhc3NpZ25WYXJpYWJsZXMoc3QsIHNxbCk7CisJ CXNxbCA9IGFzc2lnblZhcmlhYmxlcygmc3QtPnZhcmlhYmxlcywgc3FsKTsKIAotCQlpZiAoZGVi dWcpCisJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19BTEwpCiAJCQlmcHJpbnRmKHN0ZGVyciwg ImNsaWVudCAlZCBzZW5kaW5nICVzXG4iLCBzdC0+aWQsIHNxbCk7CiAJCXIgPSBQUXNlbmRRdWVy eShzdC0+Y29uLCBzcWwpOwogCQlmcmVlKHNxbCk7CkBAIC0yNTcwLDkgKzI3OTcsOSBAQCBzZW5k Q29tbWFuZChDU3RhdGUgKnN0LCBDb21tYW5kICpjb21tYW5kKQogCQljb25zdCBjaGFyICpzcWwg PSBjb21tYW5kLT5hcmd2WzBdOwogCQljb25zdCBjaGFyICpwYXJhbXNbTUFYX0FSR1NdOwogCi0J CWdldFF1ZXJ5UGFyYW1zKHN0LCBjb21tYW5kLCBwYXJhbXMpOworCQlnZXRRdWVyeVBhcmFtcygm c3QtPnZhcmlhYmxlcywgY29tbWFuZCwgcGFyYW1zKTsKIAotCQlpZiAoZGVidWcpCisJCWlmIChk ZWJ1Z19sZXZlbCA+PSBERUJVR19BTEwpCiAJCQlmcHJpbnRmKHN0ZGVyciwgImNsaWVudCAlZCBz ZW5kaW5nICVzXG4iLCBzdC0+aWQsIHNxbCk7CiAJCXIgPSBQUXNlbmRRdWVyeVBhcmFtcyhzdC0+ Y29uLCBzcWwsIGNvbW1hbmQtPmFyZ2MgLSAxLAogCQkJCQkJCSAgTlVMTCwgcGFyYW1zLCBOVUxM LCBOVUxMLCAwKTsKQEAgLTI2MDQsMTAgKzI4MzEsMTAgQEAgc2VuZENvbW1hbmQoQ1N0YXRlICpz dCwgQ29tbWFuZCAqY29tbWFuZCkKIAkJCXN0LT5wcmVwYXJlZFtzdC0+dXNlX2ZpbGVdID0gdHJ1 ZTsKIAkJfQogCi0JCWdldFF1ZXJ5UGFyYW1zKHN0LCBjb21tYW5kLCBwYXJhbXMpOworCQlnZXRR dWVyeVBhcmFtcygmc3QtPnZhcmlhYmxlcywgY29tbWFuZCwgcGFyYW1zKTsKIAkJcHJlcGFyZWRT dGF0ZW1lbnROYW1lKG5hbWUsIHN0LT51c2VfZmlsZSwgc3QtPmNvbW1hbmQpOwogCi0JCWlmIChk ZWJ1ZykKKwkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0FMTCkKIAkJCWZwcmludGYoc3RkZXJy LCAiY2xpZW50ICVkIHNlbmRpbmcgJXNcbiIsIHN0LT5pZCwgbmFtZSk7CiAJCXIgPSBQUXNlbmRR dWVyeVByZXBhcmVkKHN0LT5jb24sIG5hbWUsIGNvbW1hbmQtPmFyZ2MgLSAxLAogCQkJCQkJCQlw YXJhbXMsIE5VTEwsIE5VTEwsIDApOwpAQCAtMjYxNywxMCArMjg0NCw5IEBAIHNlbmRDb21tYW5k KENTdGF0ZSAqc3QsIENvbW1hbmQgKmNvbW1hbmQpCiAKIAlpZiAociA9PSAwKQogCXsKLQkJaWYg KGRlYnVnKQorCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfQUxMKQogCQkJZnByaW50ZihzdGRl cnIsICJjbGllbnQgJWQgY291bGQgbm90IHNlbmQgJXNcbiIsCiAJCQkJCXN0LT5pZCwgY29tbWFu ZC0+YXJndlswXSk7Ci0JCXN0LT5lY250Kys7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAJZWxzZQpA QCAtMjYzMiwxNyArMjg1OCwyMCBAQCBzZW5kQ29tbWFuZChDU3RhdGUgKnN0LCBDb21tYW5kICpj b21tYW5kKQogICogb2YgZGVsYXksIGluIG1pY3Jvc2Vjb25kcy4gIFJldHVybnMgdHJ1ZSBvbiBz dWNjZXNzLCBmYWxzZSBvbiBlcnJvci4KICAqLwogc3RhdGljIGJvb2wKLWV2YWx1YXRlU2xlZXAo Q1N0YXRlICpzdCwgaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBpbnQgKnVzZWNzKQorZXZhbHVhdGVT bGVlcChWYXJpYWJsZXMgKnZhcmlhYmxlcywgaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBpbnQgKnVz ZWNzKQogewogCWNoYXIJICAgKnZhcjsKIAlpbnQJCQl1c2VjOwogCiAJaWYgKCphcmd2WzFdID09 ICc6JykKIAl7Ci0JCWlmICgodmFyID0gZ2V0VmFyaWFibGUoc3QsIGFyZ3ZbMV0gKyAxKSkgPT0g TlVMTCkKKwkJaWYgKCh2YXIgPSBnZXRWYXJpYWJsZSh2YXJpYWJsZXMsIGFyZ3ZbMV0gKyAxKSkg PT0gTlVMTCkKIAkJewotCQkJZnByaW50ZihzdGRlcnIsICIlczogdW5kZWZpbmVkIHZhcmlhYmxl IFwiJXNcIlxuIiwKLQkJCQkJYXJndlswXSwgYXJndlsxXSk7CisJCQlpZiAoZGVidWdfbGV2ZWwg Pj0gREVCVUdfRkFJTFMpCisJCQl7CisJCQkJZnByaW50ZihzdGRlcnIsICIlczogdW5kZWZpbmVk IHZhcmlhYmxlIFwiJXNcIlxuIiwKKwkJCQkJCWFyZ3ZbMF0sIGFyZ3ZbMV0pOworCQkJfQogCQkJ cmV0dXJuIGZhbHNlOwogCQl9CiAJCXVzZWMgPSBhdG9pKHZhcik7CkBAIC0yNjY1LDYgKzI4OTQs MTYyIEBAIGV2YWx1YXRlU2xlZXAoQ1N0YXRlICpzdCwgaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBp bnQgKnVzZWNzKQogfQogCiAvKgorICogR2V0IHRoZSBudW1iZXIgb2YgYWxsIHByb2Nlc3NlZCB0 cmFuc2FjdGlvbnMgaW5jbHVkaW5nIHNraXBwZWQgb25lcyBhbmQKKyAqIGVycm9ycy4KKyAqLwor c3RhdGljIGludDY0CitnZXRUb3RhbENudChjb25zdCBDU3RhdGUgKnN0KQoreworCXJldHVybiBz dC0+Y250ICsgc3QtPmVjbnQ7Cit9CisKKy8qCisgKiBDb3B5IGFuIGFycmF5IG9mIHJhbmRvbSBz dGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2NvcHlSYW5kb21TdGF0ZShSYW5kb21TdGF0ZSAqZGVz dGluYXRpb24sIGNvbnN0IFJhbmRvbVN0YXRlICpzb3VyY2UpCit7CisJbWVtY3B5KGRlc3RpbmF0 aW9uLT5kYXRhLCBzb3VyY2UtPmRhdGEsIHNpemVvZih1bnNpZ25lZCBzaG9ydCkgKiAzKTsKK30K KworLyoKKyAqIE1ha2UgYSBkZWVwIGNvcHkgb2YgdmFyaWFibGVzIGFycmF5LgorICovCitzdGF0 aWMgdm9pZAorY29weVZhcmlhYmxlcyhWYXJpYWJsZXMgKmRlc3RpbmF0aW9uX3ZhcnMsIGNvbnN0 IFZhcmlhYmxlcyAqc291cmNlX3ZhcnMpCit7CisJVmFyaWFibGUgICAqZGVzdGluYXRpb247CisJ VmFyaWFibGUgICAqY3VycmVudF9kZXN0aW5hdGlvbjsKKwljb25zdCBWYXJpYWJsZSAqc291cmNl OworCWNvbnN0IFZhcmlhYmxlICpjdXJyZW50X3NvdXJjZTsKKwlpbnQJCQludmFyaWFibGVzOwor CisJaWYgKCFkZXN0aW5hdGlvbl92YXJzIHx8ICFzb3VyY2VfdmFycykKKwkJcmV0dXJuOworCisJ ZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbl92YXJzLT5hcnJheTsKKwlzb3VyY2UgPSBzb3VyY2Vf dmFycy0+YXJyYXk7CisJbnZhcmlhYmxlcyA9IHNvdXJjZV92YXJzLT5udmFyaWFibGVzOworCisJ Zm9yIChjdXJyZW50X2Rlc3RpbmF0aW9uID0gZGVzdGluYXRpb247CisJCSBjdXJyZW50X2Rlc3Rp bmF0aW9uIC0gZGVzdGluYXRpb24gPCBkZXN0aW5hdGlvbl92YXJzLT5udmFyaWFibGVzOworCQkg KytjdXJyZW50X2Rlc3RpbmF0aW9uKQorCXsKKwkJcGdfZnJlZShjdXJyZW50X2Rlc3RpbmF0aW9u LT5uYW1lKTsKKwkJcGdfZnJlZShjdXJyZW50X2Rlc3RpbmF0aW9uLT5zdmFsdWUpOworCX0KKwor CWRlc3RpbmF0aW9uX3ZhcnMtPmFycmF5ID0gcGdfcmVhbGxvYyhkZXN0aW5hdGlvbl92YXJzLT5h cnJheSwKKwkJCQkJCQkJCQkgc2l6ZW9mKFZhcmlhYmxlKSAqIG52YXJpYWJsZXMpOworCWRlc3Rp bmF0aW9uID0gZGVzdGluYXRpb25fdmFycy0+YXJyYXk7CisKKwlmb3IgKGN1cnJlbnRfc291cmNl ID0gc291cmNlLCBjdXJyZW50X2Rlc3RpbmF0aW9uID0gZGVzdGluYXRpb247CisJCSBjdXJyZW50 X3NvdXJjZSAtIHNvdXJjZSA8IG52YXJpYWJsZXM7CisJCSArK2N1cnJlbnRfc291cmNlLCArK2N1 cnJlbnRfZGVzdGluYXRpb24pCisJeworCQljdXJyZW50X2Rlc3RpbmF0aW9uLT5uYW1lID0gcGdf c3RyZHVwKGN1cnJlbnRfc291cmNlLT5uYW1lKTsKKwkJaWYgKGN1cnJlbnRfc291cmNlLT5zdmFs dWUpCisJCQljdXJyZW50X2Rlc3RpbmF0aW9uLT5zdmFsdWUgPSBwZ19zdHJkdXAoY3VycmVudF9z b3VyY2UtPnN2YWx1ZSk7CisJCWVsc2UKKwkJCWN1cnJlbnRfZGVzdGluYXRpb24tPnN2YWx1ZSA9 IE5VTEw7CisJCWN1cnJlbnRfZGVzdGluYXRpb24tPnZhbHVlID0gY3VycmVudF9zb3VyY2UtPnZh bHVlOworCX0KKworCWRlc3RpbmF0aW9uX3ZhcnMtPm52YXJpYWJsZXMgPSBudmFyaWFibGVzOwor CWRlc3RpbmF0aW9uX3ZhcnMtPnZhcnNfc29ydGVkID0gc291cmNlX3ZhcnMtPnZhcnNfc29ydGVk OworfQorCisvKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBmYWlsdXJlIGNhbiBiZSByZXRyaWVk LgorICovCitzdGF0aWMgYm9vbAorY2FuUmV0cnkoQ1N0YXRlICpzdCwgRmFpbHVyZVN0YXR1cyBm YWlsdXJlX3N0YXR1cykKK3sKKwlBc3NlcnQoZmFpbHVyZV9zdGF0dXMgIT0gTk9fRkFJTFVSRSk7 CisKKwkvKgorCSAqIEFsbCBzdWJzZXF1ZW50IGZhaWx1cmVzIHdpbGwgYmUgInJldHJpZWQiIGlm IHRoZSBmaXJzdCBmYWlsdXJlIG9mIHRoaXMKKwkgKiB0cmFuc2FjdGlvbiBjYW4gYmUgcmV0cmll ZC4KKwkgKi8KKwlpZiAoc3QtPmZpcnN0X2ZhaWx1cmUgIT0gTk9fRkFJTFVSRSkKKwkJZmFpbHVy ZV9zdGF0dXMgPSBzdC0+Zmlyc3RfZmFpbHVyZTsKKworCS8qIFdlIGNhbiBvbmx5IHJldHJ5IHNl cmlhbGl6YXRpb24gb3IgZGVhZGxvY2sgZmFpbHVyZXMuICovCisJaWYgKCEoZmFpbHVyZV9zdGF0 dXMgPT0gU0VSSUFMSVpBVElPTl9GQUlMVVJFIHx8CisJCSAgZmFpbHVyZV9zdGF0dXMgPT0gREVB RExPQ0tfRkFJTFVSRSkpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogV2UgY2Fubm90IHJl dHJ5IHRoZSBmYWlsdXJlIGlmIHdlIGhhdmUgcmVhY2hlZCB0aGUgbWF4aW11bSBudW1iZXIgb2YK KwkgKiB0cmllcy4KKwkgKi8KKwlpZiAoc3QtPnJldHJpZXMgKyAxID49IG1heF90cmllcykKKwkJ cmV0dXJuIGZhbHNlOworCisJLyogT0sgKi8KKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIFJl dHVybiB0aGUgdHJhbnNhY3Rpb24gc3RhdHVzOiBmaW5kIG91dCBpZiB0aGVyZSdzIGEgZmFpbHVy ZSB0aGF0IGNhbiBiZQorICogcmV0cmllZCwgb3IgdGhlcmUncyBhbiBlcnJvciB0aGF0IGNhbm5v dCBiZSByZXRpcmVkOyBvciB3ZSBjb250aW51ZSBhbgorICogYWxyZWFkeSBmYWlsZWQgdHJhbnNh Y3Rpb24uCisgKi8KK3N0YXRpYyBGYWlsU3RhdHVzCitnZXRGYWlsU3RhdHVzKENTdGF0ZSAqc3Qs IEZhaWx1cmVTdGF0dXMgZmFpbHVyZV9zdGF0dXMpCit7CisJQXNzZXJ0KGZhaWx1cmVfc3RhdHVz ICE9IE5PX0ZBSUxVUkUpOworCisJaWYgKHN0LT5maXJzdF9mYWlsdXJlID09IE5PX0ZBSUxVUkUp CisJCXJldHVybiBjYW5SZXRyeShzdCwgZmFpbHVyZV9zdGF0dXMpID8gVFhfRkFJTFVSRSA6IFRY X0VSUk9SOworCWVsc2UKKwkJcmV0dXJuIElOX0ZBSUxFRF9UWDsKK30KKworLyoKKyAqIFByb2Nl c3MgdGhlIGNvbmRpdGlvbmFsIHN0YWNrIGRlcGVuZGluZyBvbiB0aGUgY29uZGl0aW9uIHZhbHVl OyBpcyB1c2VkIGZvcgorICogdGhlIG1ldGEgY29tbWFuZHMgXGlmIGFuZCBcZWxpZi4KKyAqLwor c3RhdGljIHZvaWQKK2V4ZWN1dGVDb25kaXRpb24oQ1N0YXRlICpzdCwgYm9vbCBjb25kaXRpb24p Cit7CisJQ29tbWFuZCAgICAqY29tbWFuZCA9IHNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5jb21t YW5kc1tzdC0+Y29tbWFuZF07CisKKwkvKiBleGVjdXRlIG9yIG5vdCBkZXBlbmRpbmcgb24gZXZh bHVhdGVkIGNvbmRpdGlvbiAqLworCWlmIChjb21tYW5kLT5tZXRhID09IE1FVEFfSUYpCisJewor CQljb25kaXRpb25hbF9zdGFja19wdXNoKHN0LT5jc3RhY2ssCisJCQkJCQkJICAgY29uZGl0aW9u ID8gSUZTVEFURV9UUlVFIDogSUZTVEFURV9GQUxTRSk7CisJfQorCWVsc2UgaWYgKGNvbW1hbmQt Pm1ldGEgPT0gTUVUQV9FTElGKQorCXsKKwkJLyogd2Ugc2hvdWxkIGdldCBoZXJlIG9ubHkgaWYg dGhlICJlbGlmIiBuZWVkZWQgZXZhbHVhdGlvbiAqLworCQlBc3NlcnQoY29uZGl0aW9uYWxfc3Rh Y2tfcGVlayhzdC0+Y3N0YWNrKSA9PSBJRlNUQVRFX0ZBTFNFKTsKKwkJY29uZGl0aW9uYWxfc3Rh Y2tfcG9rZShzdC0+Y3N0YWNrLAorCQkJCQkJCSAgIGNvbmRpdGlvbiA/IElGU1RBVEVfVFJVRSA6 IElGU1RBVEVfRkFMU0UpOworCX0KK30KKworLyoKKyAqIEdldCB0aGUgZmFpbHVyZSBzdGF0dXMg ZnJvbSB0aGUgZXJyb3IgY29kZS4KKyAqLworc3RhdGljIEZhaWx1cmVTdGF0dXMKK2dldEZhaWx1 cmVTdGF0dXMoY2hhciAqc3FsU3RhdGUpCit7CisJaWYgKHNxbFN0YXRlKQorCXsKKwkJaWYgKHN0 cmNtcChzcWxTdGF0ZSwgRVJSQ09ERV9UX1JfU0VSSUFMSVpBVElPTl9GQUlMVVJFKSA9PSAwKQor CQkJcmV0dXJuIFNFUklBTElaQVRJT05fRkFJTFVSRTsKKwkJZWxzZSBpZiAoc3RyY21wKHNxbFN0 YXRlLCBFUlJDT0RFX1RfUl9ERUFETE9DS19ERVRFQ1RFRCkgPT0gMCkKKwkJCXJldHVybiBERUFE TE9DS19GQUlMVVJFOworCQllbHNlIGlmIChzdHJjbXAoc3FsU3RhdGUsIEVSUkNPREVfSU5fRkFJ TEVEX1NRTF9UUkFOU0FDVElPTikgPT0gMCkKKwkJCXJldHVybiBJTl9GQUlMRURfU1FMX1RSQU5T QUNUSU9OOworCX0KKworCXJldHVybiBBTk9USEVSX0ZBSUxVUkU7Cit9CisKKy8qCiAgKiBBZHZh bmNlIHRoZSBzdGF0ZSBtYWNoaW5lIG9mIGEgY29ubmVjdGlvbiwgaWYgcG9zc2libGUuCiAgKi8K IHN0YXRpYyB2b2lkCkBAIC0yNjc1LDYgKzMwNjAsNyBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVh ZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJaW5zdHJfdGltZQlub3c7CiAJYm9vbAkJ ZW5kX3R4X3Byb2Nlc3NlZCA9IGZhbHNlOwogCWludDY0CQl3YWl0OworCUZhaWx1cmVTdGF0dXMg ZmFpbHVyZV9zdGF0dXMgPSBOT19GQUlMVVJFOwogCiAJLyoKIAkgKiBnZXR0aW1lb2ZkYXkoKSBp c24ndCBmcmVlLCBzbyB3ZSBnZXQgdGhlIGN1cnJlbnQgdGltZXN0YW1wIGxhemlseSB0aGUKQEAg LTI3MDUsNyArMzA5MSw3IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBT dGF0c0RhdGEgKmFnZykKIAogCQkJCXN0LT51c2VfZmlsZSA9IGNob29zZVNjcmlwdCh0aHJlYWQp OwogCi0JCQkJaWYgKGRlYnVnKQorCQkJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19BTEwpCiAJ CQkJCWZwcmludGYoc3RkZXJyLCAiY2xpZW50ICVkIGV4ZWN1dGluZyBzY3JpcHQgXCIlc1wiXG4i LCBzdC0+aWQsCiAJCQkJCQkJc3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVdLmRlc2MpOwogCkBAIC0y NzE1LDYgKzMxMDEsMTEgQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0 YXRzRGF0YSAqYWdnKQogCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfU1RBUlRfVFg7CiAJCQkJLyog Y2hlY2sgY29uc2lzdGVuY3kgKi8KIAkJCQlBc3NlcnQoY29uZGl0aW9uYWxfc3RhY2tfZW1wdHko c3QtPmNzdGFjaykpOworCisJCQkJLyogcmVzZXQgdHJhbnNhY3Rpb24gdmFyaWFibGVzIHRvIGRl ZmF1bHQgdmFsdWVzICovCisJCQkJc3QtPmZpcnN0X2ZhaWx1cmUgPSBOT19GQUlMVVJFOworCQkJ CXN0LT5yZXRyaWVzID0gMDsKKwogCQkJCWJyZWFrOwogCiAJCQkJLyoKQEAgLTI3MzIsNyArMzEy Myw3IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFn ZykKIAkJCQkgKiBhd2F5LgogCQkJCSAqLwogCQkJCUFzc2VydCh0aHJvdHRsZV9kZWxheSA+IDAp OwotCQkJCXdhaXQgPSBnZXRQb2lzc29uUmFuZCh0aHJlYWQsIHRocm90dGxlX2RlbGF5KTsKKwkJ CQl3YWl0ID0gZ2V0UG9pc3NvblJhbmQoJnRocmVhZC0+cmFuZG9tX3N0YXRlLCB0aHJvdHRsZV9k ZWxheSk7CiAKIAkJCQl0aHJlYWQtPnRocm90dGxlX3RyaWdnZXIgKz0gd2FpdDsKIAkJCQlzdC0+ dHhuX3NjaGVkdWxlZCA9IHRocmVhZC0+dGhyb3R0bGVfdHJpZ2dlcjsKQEAgLTI3NjIsMTYgKzMx NTMsMTcgQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAq YWdnKQogCQkJCQkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChub3cpOwogCQkJCQlub3dfdXMgPSBJ TlNUUl9USU1FX0dFVF9NSUNST1NFQyhub3cpOwogCQkJCQl3aGlsZSAodGhyZWFkLT50aHJvdHRs ZV90cmlnZ2VyIDwgbm93X3VzIC0gbGF0ZW5jeV9saW1pdCAmJgotCQkJCQkJICAgKG54YWN0cyA8 PSAwIHx8IHN0LT5jbnQgPCBueGFjdHMpKQorCQkJCQkJICAgKG54YWN0cyA8PSAwIHx8IGdldFRv dGFsQ250KHN0KSA8IG54YWN0cykpCiAJCQkJCXsKIAkJCQkJCXByb2Nlc3NYYWN0U3RhdHModGhy ZWFkLCBzdCwgJm5vdywgdHJ1ZSwgYWdnKTsKIAkJCQkJCS8qIG5leHQgcmVuZGV6LXZvdXMgKi8K LQkJCQkJCXdhaXQgPSBnZXRQb2lzc29uUmFuZCh0aHJlYWQsIHRocm90dGxlX2RlbGF5KTsKKwkJ CQkJCXdhaXQgPSBnZXRQb2lzc29uUmFuZCgmdGhyZWFkLT5yYW5kb21fc3RhdGUsCisJCQkJCQkJ CQkJCSAgdGhyb3R0bGVfZGVsYXkpOwogCQkJCQkJdGhyZWFkLT50aHJvdHRsZV90cmlnZ2VyICs9 IHdhaXQ7CiAJCQkJCQlzdC0+dHhuX3NjaGVkdWxlZCA9IHRocmVhZC0+dGhyb3R0bGVfdHJpZ2dl cjsKIAkJCQkJfQogCQkJCQkvKiBzdG9wIGNsaWVudCBpZiAtdCBleGNlZWRlZCAqLwotCQkJCQlp ZiAobnhhY3RzID4gMCAmJiBzdC0+Y250ID49IG54YWN0cykKKwkJCQkJaWYgKG54YWN0cyA+IDAg JiYgZ2V0VG90YWxDbnQoc3QpID49IG54YWN0cykKIAkJCQkJewogCQkJCQkJc3QtPnN0YXRlID0g Q1NUQVRFX0ZJTklTSEVEOwogCQkJCQkJYnJlYWs7CkBAIC0yNzc5LDcgKzMxNzEsNyBAQCBkb0N1 c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJfQog CiAJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX1RIUk9UVExFOwotCQkJCWlmIChkZWJ1ZykKKwkJCQlp ZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfQUxMKQogCQkJCQlmcHJpbnRmKHN0ZGVyciwgImNsaWVu dCAlZCB0aHJvdHRsaW5nICIgSU5UNjRfRk9STUFUICIgdXNcbiIsCiAJCQkJCQkJc3QtPmlkLCB3 YWl0KTsKIAkJCQlicmVhazsKQEAgLTI4MjYsNiArMzIxOCwxNSBAQCBkb0N1c3RvbShUU3RhdGUg KnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJfQogCiAJCQkJLyoKKwkJ CQkgKiBJdCBpcyB0aGUgZmlyc3QgdHJ5IHRvIHJ1biB0aGlzIHRyYW5zYWN0aW9uLiBSZW1lbWJl ciBpdHMKKwkJCQkgKiBwYXJhbWV0ZXJzIGp1c3QgaW4gY2FzZSBpZiBpdCBmYWlscyBvciB3ZSBz aG91bGQgcmVwZWF0IGl0IGluCisJCQkJICogZnV0dXJlLgorCQkJCSAqLworCQkJCWNvcHlSYW5k b21TdGF0ZSgmc3QtPnJldHJ5X3N0YXRlLnJhbmRvbV9zdGF0ZSwKKwkJCQkJCQkJJnN0LT5yYW5k b21fc3RhdGUpOworCQkJCWNvcHlWYXJpYWJsZXMoJnN0LT5yZXRyeV9zdGF0ZS52YXJpYWJsZXMs ICZzdC0+dmFyaWFibGVzKTsKKworCQkJCS8qCiAJCQkJICogUmVjb3JkIHRyYW5zYWN0aW9uIHN0 YXJ0IHRpbWUgdW5kZXIgbG9nZ2luZywgcHJvZ3Jlc3Mgb3IKIAkJCQkgKiB0aHJvdHRsaW5nLgog CQkJCSAqLwpAQCAtMjg2MSw3ICszMjYyLDE1IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBD U3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykKIAkJCQkgKi8KIAkJCQlpZiAoY29tbWFuZCA9PSBO VUxMKQogCQkJCXsKLQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0VORF9UWDsKKwkJCQkJaWYgKHN0 LT5maXJzdF9mYWlsdXJlID09IE5PX0ZBSUxVUkUpCisJCQkJCXsKKwkJCQkJCXN0LT5zdGF0ZSA9 IENTVEFURV9FTkRfVFg7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQkvKiBjaGVj ayBpZiB3ZSBjYW4gcmV0cnkgdGhlIGZhaWx1cmUgKi8KKwkJCQkJCXN0LT5zdGF0ZSA9IENTVEFU RV9SRVRSWTsKKwkJCQkJfQogCQkJCQlicmVhazsKIAkJCQl9CiAKQEAgLTI4NjksNyArMzI3OCw3 IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykK IAkJCQkgKiBSZWNvcmQgc3RhdGVtZW50IHN0YXJ0IHRpbWUgaWYgcGVyLWNvbW1hbmQgbGF0ZW5j aWVzIGFyZQogCQkJCSAqIHJlcXVlc3RlZAogCQkJCSAqLwotCQkJCWlmIChpc19sYXRlbmNpZXMp CisJCQkJaWYgKHJlcG9ydF9wZXJfY29tbWFuZCkKIAkJCQl7CiAJCQkJCWlmIChJTlNUUl9USU1F X0lTX1pFUk8obm93KSkKIAkJCQkJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQobm93KTsKQEAgLTI4 ODAsNyArMzI4OSw4IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0 c0RhdGEgKmFnZykKIAkJCQl7CiAJCQkJCWlmICghc2VuZENvbW1hbmQoc3QsIGNvbW1hbmQpKQog CQkJCQl7Ci0JCQkJCQljb21tYW5kRmFpbGVkKHN0LCAiU1FMIiwgIlNRTCBjb21tYW5kIHNlbmQg ZmFpbGVkIik7CisJCQkJCQljb21tYW5kRmFpbGVkKHN0LCAiU1FMIiwgIlNRTCBjb21tYW5kIHNl bmQgZmFpbGVkIiwKKwkJCQkJCQkJCSAgQ0xJRU5UX0FCT1JURUQpOwogCQkJCQkJc3QtPnN0YXRl ID0gQ1NUQVRFX0FCT1JURUQ7CiAJCQkJCX0KIAkJCQkJZWxzZQpAQCAtMjg5Miw3ICszMzAyLDcg QEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQog CQkJCQkJCQlpOwogCQkJCQljaGFyCSAgKiphcmd2ID0gY29tbWFuZC0+YXJndjsKIAotCQkJCQlp ZiAoZGVidWcpCisJCQkJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19BTEwpCiAJCQkJCXsKIAkJ CQkJCWZwcmludGYoc3RkZXJyLCAiY2xpZW50ICVkIGV4ZWN1dGluZyBcXCVzIiwgc3QtPmlkLCBh cmd2WzBdKTsKIAkJCQkJCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCkBAIC0yOTAwLDYgKzMz MTAsOSBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICph Z2cpCiAJCQkJCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CiAJCQkJCX0KIAorCQkJCQkvKiBjaGFu Z2UgaXQgaWYgdGhlIG1ldGEgY29tbWFuZCBmYWlscyAqLworCQkJCQlmYWlsdXJlX3N0YXR1cyA9 IE5PX0ZBSUxVUkU7CisKIAkJCQkJaWYgKGNvbW1hbmQtPm1ldGEgPT0gTUVUQV9TTEVFUCkKIAkJ CQkJewogCQkJCQkJLyoKQEAgLTI5MTEsMTAgKzMzMjQsMTIgQEAgZG9DdXN0b20oVFN0YXRlICp0 aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCQkJICovCiAJCQkJCQlpbnQJ CQl1c2VjOwogCi0JCQkJCQlpZiAoIWV2YWx1YXRlU2xlZXAoc3QsIGFyZ2MsIGFyZ3YsICZ1c2Vj KSkKKwkJCQkJCWlmICghZXZhbHVhdGVTbGVlcCgmc3QtPnZhcmlhYmxlcywgYXJnYywgYXJndiwg JnVzZWMpKQogCQkJCQkJewotCQkJCQkJCWNvbW1hbmRGYWlsZWQoc3QsICJzbGVlcCIsICJleGVj dXRpb24gb2YgbWV0YS1jb21tYW5kIGZhaWxlZCIpOwotCQkJCQkJCXN0LT5zdGF0ZSA9IENTVEFU RV9BQk9SVEVEOworCQkJCQkJCWZhaWx1cmVfc3RhdHVzID0gQU5PVEhFUl9GQUlMVVJFOworCQkJ CQkJCWNvbW1hbmRGYWlsZWQoc3QsICJzbGVlcCIsICJleGVjdXRpb24gb2YgbWV0YS1jb21tYW5k IGZhaWxlZCIsCisJCQkJCQkJCQkJICBnZXRGYWlsU3RhdHVzKHN0LCBmYWlsdXJlX3N0YXR1cykp OworCQkJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9GQUlMVVJFOwogCQkJCQkJCWJyZWFrOwogCQkJ CQkJfQogCkBAIC0yOTQyLDM1ICszMzU3LDM1IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBD U3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykKIAogCQkJCQkJaWYgKCFldmFsdWF0ZUV4cHIodGhy ZWFkLCBzdCwgZXhwciwgJnJlc3VsdCkpCiAJCQkJCQl7Ci0JCQkJCQkJY29tbWFuZEZhaWxlZChz dCwgYXJndlswXSwgImV2YWx1YXRpb24gb2YgbWV0YS1jb21tYW5kIGZhaWxlZCIpOwotCQkJCQkJ CXN0LT5zdGF0ZSA9IENTVEFURV9BQk9SVEVEOworCQkJCQkJCWZhaWx1cmVfc3RhdHVzID0gQU5P VEhFUl9GQUlMVVJFOworCQkJCQkJCWNvbW1hbmRGYWlsZWQoc3QsIGFyZ3ZbMF0sICJldmFsdWF0 aW9uIG9mIG1ldGEtY29tbWFuZCBmYWlsZWQiLAorCQkJCQkJCQkJCSAgZ2V0RmFpbFN0YXR1cyhz dCwgZmFpbHVyZV9zdGF0dXMpKTsKKworCQkJCQkJCS8qCisJCQkJCQkJICogRG8gbm90IHJ1aW4g dGhlIGZvbGxvd2luZyBjb25kaXRpb25hbCBjb21tYW5kcywKKwkJCQkJCQkgKiBpZiBhbnkuCisJ CQkJCQkJICovCisJCQkJCQkJZXhlY3V0ZUNvbmRpdGlvbihzdCwgZmFsc2UpOworCisJCQkJCQkJ c3QtPnN0YXRlID0gQ1NUQVRFX0ZBSUxVUkU7CiAJCQkJCQkJYnJlYWs7CiAJCQkJCQl9CiAKIAkJ CQkJCWlmIChjb21tYW5kLT5tZXRhID09IE1FVEFfU0VUKQogCQkJCQkJewotCQkJCQkJCWlmICgh cHV0VmFyaWFibGVWYWx1ZShzdCwgYXJndlswXSwgYXJndlsxXSwgJnJlc3VsdCkpCisJCQkJCQkJ aWYgKCFwdXRWYXJpYWJsZVZhbHVlKCZzdC0+dmFyaWFibGVzLCBhcmd2WzBdLAorCQkJCQkJCQkJ CQkJICBhcmd2WzFdLCAmcmVzdWx0LCBmYWxzZSkpCiAJCQkJCQkJewotCQkJCQkJCQljb21tYW5k RmFpbGVkKHN0LCAic2V0IiwgImFzc2lnbm1lbnQgb2YgbWV0YS1jb21tYW5kIGZhaWxlZCIpOwot CQkJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKKwkJCQkJCQkJZmFpbHVyZV9zdGF0 dXMgPSBBTk9USEVSX0ZBSUxVUkU7CisJCQkJCQkJCWNvbW1hbmRGYWlsZWQoc3QsICJzZXQiLCAi YXNzaWdubWVudCBvZiBtZXRhLWNvbW1hbmQgZmFpbGVkIiwKKwkJCQkJCQkJCQkJICBnZXRGYWls U3RhdHVzKHN0LCBmYWlsdXJlX3N0YXR1cykpOworCQkJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVf RkFJTFVSRTsKIAkJCQkJCQkJYnJlYWs7CiAJCQkJCQkJfQogCQkJCQkJfQogCQkJCQkJZWxzZSAv KiBpZiBhbmQgZWxpZiBldmFsdWF0ZWQgY2FzZXMgKi8KIAkJCQkJCXsKLQkJCQkJCQlib29sIGNv bmQgPSB2YWx1ZVRydXRoKCZyZXN1bHQpOwotCi0JCQkJCQkJLyogZXhlY3V0ZSBvciBub3QgZGVw ZW5kaW5nIG9uIGV2YWx1YXRlZCBjb25kaXRpb24gKi8KLQkJCQkJCQlpZiAoY29tbWFuZC0+bWV0 YSA9PSBNRVRBX0lGKQotCQkJCQkJCXsKLQkJCQkJCQkJY29uZGl0aW9uYWxfc3RhY2tfcHVzaChz dC0+Y3N0YWNrLCBjb25kID8gSUZTVEFURV9UUlVFIDogSUZTVEFURV9GQUxTRSk7Ci0JCQkJCQkJ fQotCQkJCQkJCWVsc2UgLyogZWxpZiAqLwotCQkJCQkJCXsKLQkJCQkJCQkJLyogd2Ugc2hvdWxk IGdldCBoZXJlIG9ubHkgaWYgdGhlICJlbGlmIiBuZWVkZWQgZXZhbHVhdGlvbiAqLwotCQkJCQkJ CQlBc3NlcnQoY29uZGl0aW9uYWxfc3RhY2tfcGVlayhzdC0+Y3N0YWNrKSA9PSBJRlNUQVRFX0ZB TFNFKTsKLQkJCQkJCQkJY29uZGl0aW9uYWxfc3RhY2tfcG9rZShzdC0+Y3N0YWNrLCBjb25kID8g SUZTVEFURV9UUlVFIDogSUZTVEFURV9GQUxTRSk7Ci0JCQkJCQkJfQorCQkJCQkJCWV4ZWN1dGVD b25kaXRpb24oc3QsIHZhbHVlVHJ1dGgoJnJlc3VsdCkpOwogCQkJCQkJfQogCQkJCQl9CiAJCQkJ CWVsc2UgaWYgKGNvbW1hbmQtPm1ldGEgPT0gTUVUQV9FTFNFKQpAQCAtMjk5OSw3ICszNDE0LDkg QEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQog CQkJCQl9CiAJCQkJCWVsc2UgaWYgKGNvbW1hbmQtPm1ldGEgPT0gTUVUQV9TRVRTSEVMTCkKIAkJ CQkJewotCQkJCQkJYm9vbAkJcmV0ID0gcnVuU2hlbGxDb21tYW5kKHN0LCBhcmd2WzFdLCBhcmd2 ICsgMiwgYXJnYyAtIDIpOworCQkJCQkJYm9vbAkJcmV0ID0gcnVuU2hlbGxDb21tYW5kKCZzdC0+ dmFyaWFibGVzLAorCQkJCQkJCQkJCQkJCQkgIGFyZ3ZbMV0sIGFyZ3YgKyAyLAorCQkJCQkJCQkJ CQkJCQkgIGFyZ2MgLSAyKTsKIAogCQkJCQkJaWYgKHRpbWVyX2V4Y2VlZGVkKSAvKiB0aW1lb3V0 ICovCiAJCQkJCQl7CkBAIC0zMDA4LDggKzM0MjUsMTAgQEAgZG9DdXN0b20oVFN0YXRlICp0aHJl YWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCQkJfQogCQkJCQkJZWxzZSBpZiAo IXJldCkJLyogb24gZXJyb3IgKi8KIAkJCQkJCXsKLQkJCQkJCQljb21tYW5kRmFpbGVkKHN0LCAi c2V0c2hlbGwiLCAiZXhlY3V0aW9uIG9mIG1ldGEtY29tbWFuZCBmYWlsZWQiKTsKLQkJCQkJCQlz dC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKKwkJCQkJCQlmYWlsdXJlX3N0YXR1cyA9IEFOT1RI RVJfRkFJTFVSRTsKKwkJCQkJCQljb21tYW5kRmFpbGVkKHN0LCAic2V0c2hlbGwiLCAiZXhlY3V0 aW9uIG9mIG1ldGEtY29tbWFuZCBmYWlsZWQiLAorCQkJCQkJCQkJCSAgZ2V0RmFpbFN0YXR1cyhz dCwgZmFpbHVyZV9zdGF0dXMpKTsKKwkJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfRkFJTFVSRTsK IAkJCQkJCQlicmVhazsKIAkJCQkJCX0KIAkJCQkJCWVsc2UKQEAgLTMwMTksNyArMzQzOCw4IEBA IGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykKIAkJ CQkJfQogCQkJCQllbHNlIGlmIChjb21tYW5kLT5tZXRhID09IE1FVEFfU0hFTEwpCiAJCQkJCXsK LQkJCQkJCWJvb2wJCXJldCA9IHJ1blNoZWxsQ29tbWFuZChzdCwgTlVMTCwgYXJndiArIDEsIGFy Z2MgLSAxKTsKKwkJCQkJCWJvb2wJCXJldCA9IHJ1blNoZWxsQ29tbWFuZCgmc3QtPnZhcmlhYmxl cywgTlVMTCwKKwkJCQkJCQkJCQkJCQkJICBhcmd2ICsgMSwgYXJnYyAtIDEpOwogCiAJCQkJCQlp ZiAodGltZXJfZXhjZWVkZWQpIC8qIHRpbWVvdXQgKi8KIAkJCQkJCXsKQEAgLTMwMjgsOCArMzQ0 OCwxMCBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICph Z2cpCiAJCQkJCQl9CiAJCQkJCQllbHNlIGlmICghcmV0KQkvKiBvbiBlcnJvciAqLwogCQkJCQkJ ewotCQkJCQkJCWNvbW1hbmRGYWlsZWQoc3QsICJzaGVsbCIsICJleGVjdXRpb24gb2YgbWV0YS1j b21tYW5kIGZhaWxlZCIpOwotCQkJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9BQk9SVEVEOworCQkJ CQkJCWZhaWx1cmVfc3RhdHVzID0gQU5PVEhFUl9GQUlMVVJFOworCQkJCQkJCWNvbW1hbmRGYWls ZWQoc3QsICJzaGVsbCIsICJleGVjdXRpb24gb2YgbWV0YS1jb21tYW5kIGZhaWxlZCIsCisJCQkJ CQkJCQkJICBnZXRGYWlsU3RhdHVzKHN0LCBmYWlsdXJlX3N0YXR1cykpOworCQkJCQkJCXN0LT5z dGF0ZSA9IENTVEFURV9GQUlMVVJFOwogCQkJCQkJCWJyZWFrOwogCQkJCQkJfQogCQkJCQkJZWxz ZQpAQCAtMzEzNCwzNyArMzU1Niw1NCBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRl ICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJICogV2FpdCBmb3IgdGhlIGN1cnJlbnQgU1FMIGNv bW1hbmQgdG8gY29tcGxldGUKIAkJCQkgKi8KIAkJCWNhc2UgQ1NUQVRFX1dBSVRfUkVTVUxUOgot CQkJCWNvbW1hbmQgPSBzcWxfc2NyaXB0W3N0LT51c2VfZmlsZV0uY29tbWFuZHNbc3QtPmNvbW1h bmRdOwotCQkJCWlmIChkZWJ1ZykKLQkJCQkJZnByaW50ZihzdGRlcnIsICJjbGllbnQgJWQgcmVj ZWl2aW5nXG4iLCBzdC0+aWQpOwotCQkJCWlmICghUFFjb25zdW1lSW5wdXQoc3QtPmNvbikpCi0J CQkJewkJCQkvKiB0aGVyZSdzIHNvbWV0aGluZyB3cm9uZyAqLwotCQkJCQljb21tYW5kRmFpbGVk KHN0LCAiU1FMIiwgInBlcmhhcHMgdGhlIGJhY2tlbmQgZGllZCB3aGlsZSBwcm9jZXNzaW5nIik7 Ci0JCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9BQk9SVEVEOwotCQkJCQlicmVhazsKLQkJCQl9Ci0J CQkJaWYgKFBRaXNCdXN5KHN0LT5jb24pKQotCQkJCQlyZXR1cm47CQkvKiBkb24ndCBoYXZlIHRo ZSB3aG9sZSByZXN1bHQgeWV0ICovCi0KLQkJCQkvKgotCQkJCSAqIFJlYWQgYW5kIGRpc2NhcmQg dGhlIHF1ZXJ5IHJlc3VsdDsKLQkJCQkgKi8KLQkJCQlyZXMgPSBQUWdldFJlc3VsdChzdC0+Y29u KTsKLQkJCQlzd2l0Y2ggKFBRcmVzdWx0U3RhdHVzKHJlcykpCiAJCQkJewotCQkJCQljYXNlIFBH UkVTX0NPTU1BTkRfT0s6Ci0JCQkJCWNhc2UgUEdSRVNfVFVQTEVTX09LOgotCQkJCQljYXNlIFBH UkVTX0VNUFRZX1FVRVJZOgotCQkJCQkJLyogT0sgKi8KLQkJCQkJCVBRY2xlYXIocmVzKTsKLQkJ CQkJCWRpc2NhcmRfcmVzcG9uc2Uoc3QpOwotCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0VORF9D T01NQU5EOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWRlZmF1bHQ6Ci0JCQkJCQljb21tYW5kRmFpbGVk KHN0LCAiU1FMIiwgUFFlcnJvck1lc3NhZ2Uoc3QtPmNvbikpOwotCQkJCQkJUFFjbGVhcihyZXMp OworCQkJCQljaGFyCSAgICpzcWxTdGF0ZTsKKworCQkJCQljb21tYW5kID0gc3FsX3NjcmlwdFtz dC0+dXNlX2ZpbGVdLmNvbW1hbmRzW3N0LT5jb21tYW5kXTsKKwkJCQkJaWYgKGRlYnVnX2xldmVs ID49IERFQlVHX0FMTCkKKwkJCQkJCWZwcmludGYoc3RkZXJyLCAiY2xpZW50ICVkIHJlY2Vpdmlu Z1xuIiwgc3QtPmlkKTsKKwkJCQkJaWYgKCFQUWNvbnN1bWVJbnB1dChzdC0+Y29uKSkKKwkJCQkJ ewkJCQkvKiB0aGVyZSdzIHNvbWV0aGluZyB3cm9uZyAqLworCQkJCQkJY29tbWFuZEZhaWxlZChz dCwgIlNRTCIsICJwZXJoYXBzIHRoZSBiYWNrZW5kIGRpZWQgd2hpbGUgcHJvY2Vzc2luZyIsCisJ CQkJCQkJCQkgIENMSUVOVF9BQk9SVEVEKTsKIAkJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9BQk9S VEVEOwogCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJaWYgKFBRaXNCdXN5KHN0LT5jb24pKQor CQkJCQkJcmV0dXJuOwkJLyogZG9uJ3QgaGF2ZSB0aGUgd2hvbGUgcmVzdWx0IHlldCAqLworCisJ CQkJCS8qCisJCQkJCSAqIFJlYWQgYW5kIGRpc2NhcmQgdGhlIHF1ZXJ5IHJlc3VsdDsKKwkJCQkJ ICovCisJCQkJCXJlcyA9IFBRZ2V0UmVzdWx0KHN0LT5jb24pOworCQkJCQlzcWxTdGF0ZSA9IFBR cmVzdWx0RXJyb3JGaWVsZChyZXMsIFBHX0RJQUdfU1FMU1RBVEUpOworCQkJCQlzd2l0Y2ggKFBR cmVzdWx0U3RhdHVzKHJlcykpCisJCQkJCXsKKwkJCQkJCWNhc2UgUEdSRVNfQ09NTUFORF9PSzoK KwkJCQkJCWNhc2UgUEdSRVNfVFVQTEVTX09LOgorCQkJCQkJY2FzZSBQR1JFU19FTVBUWV9RVUVS WToKKwkJCQkJCQkvKiBPSyAqLworCQkJCQkJCVBRY2xlYXIocmVzKTsKKwkJCQkJCQlkaXNjYXJk X3Jlc3BvbnNlKHN0KTsKKwkJCQkJCQlmYWlsdXJlX3N0YXR1cyA9IE5PX0ZBSUxVUkU7CisJCQkJ CQkJc3QtPnN0YXRlID0gQ1NUQVRFX0VORF9DT01NQU5EOworCQkJCQkJCWJyZWFrOworCQkJCQkJ Y2FzZSBQR1JFU19OT05GQVRBTF9FUlJPUjoKKwkJCQkJCWNhc2UgUEdSRVNfRkFUQUxfRVJST1I6 CisJCQkJCQkJZmFpbHVyZV9zdGF0dXMgPSBnZXRGYWlsdXJlU3RhdHVzKHNxbFN0YXRlKTsKKwkJ CQkJCQljb21tYW5kRmFpbGVkKHN0LCAiU1FMIiwgUFFlcnJvck1lc3NhZ2Uoc3QtPmNvbiksCisJ CQkJCQkJCQkJICBnZXRGYWlsU3RhdHVzKHN0LCBmYWlsdXJlX3N0YXR1cykpOworCQkJCQkJCVBR Y2xlYXIocmVzKTsKKwkJCQkJCQlkaXNjYXJkX3Jlc3BvbnNlKHN0KTsKKwkJCQkJCQlzdC0+c3Rh dGUgPSBDU1RBVEVfRkFJTFVSRTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWRlZmF1bHQ6CisJCQkJ CQkJY29tbWFuZEZhaWxlZChzdCwgIlNRTCIsIFBRZXJyb3JNZXNzYWdlKHN0LT5jb24pLAorCQkJ CQkJCQkJCSAgQ0xJRU5UX0FCT1JURUQpOworCQkJCQkJCVBRY2xlYXIocmVzKTsKKwkJCQkJCQlz dC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKKwkJCQkJCQlicmVhazsKKwkJCQkJfQogCQkJCX0K IAkJCQlicmVhazsKIApAQCAtMzE5Myw3ICszNjMyLDcgQEAgZG9DdXN0b20oVFN0YXRlICp0aHJl YWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCSAqIGluIHRocmVhZC1sb2NhbCBk YXRhIHN0cnVjdHVyZSwgaWYgcGVyLWNvbW1hbmQgbGF0ZW5jaWVzCiAJCQkJICogYXJlIHJlcXVl c3RlZC4KIAkJCQkgKi8KLQkJCQlpZiAoaXNfbGF0ZW5jaWVzKQorCQkJCWlmIChyZXBvcnRfcGVy X2NvbW1hbmQpCiAJCQkJewogCQkJCQlpZiAoSU5TVFJfVElNRV9JU19aRVJPKG5vdykpCiAJCQkJ CQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKG5vdyk7CkBAIC0zMjEyLDYgKzM2NTEsOTYgQEAgZG9D dXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCWJy ZWFrOwogCiAJCQkJLyoKKwkJCQkgKiBSZXBvcnQgdGhlIGZhaWx1cmUvZXJyb3IgYW5kIGdvIGFo ZWFkIHdpdGggbmV4dCBjb21tYW5kLgorCQkJCSAqLworCQkJY2FzZSBDU1RBVEVfRkFJTFVSRToK KwkJCQljb21tYW5kID0gc3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVdLmNvbW1hbmRzW3N0LT5jb21t YW5kXTsKKworCQkJCUFzc2VydChmYWlsdXJlX3N0YXR1cyAhPSBOT19GQUlMVVJFKTsKKworCQkJ CS8qCisJCQkJICogQWxsIHN1YnNlcXVlbnQgZmFpbHVyZXMgd2lsbCBiZSAicmV0cmllZCIvImZh aWxlZCIgaWYgdGhlCisJCQkJICogZmlyc3QgZmFpbHVyZSBvZiB0aGlzIHRyYW5zYWN0aW9uIGNh biBiZS9jYW5ub3QgYmUgcmV0cmllZC4KKwkJCQkgKiBUaGVyZWZvcmUgbWVudGlvbiBvbmx5IHRo ZSBmaXJzdCBmYWlsdXJlL2Vycm9yIGluIHRoZQorCQkJCSAqIHJlcG9ydHMuCisJCQkJICovCisJ CQkJaWYgKHN0LT5maXJzdF9mYWlsdXJlID09IE5PX0ZBSUxVUkUpCisJCQkJeworCQkJCQlzdC0+ Zmlyc3RfZmFpbHVyZSA9IGZhaWx1cmVfc3RhdHVzOworCisJCQkJCWlmIChyZXBvcnRfcGVyX2Nv bW1hbmQpCisJCQkJCXsKKwkJCQkJCWlmIChjYW5SZXRyeShzdCwgZmFpbHVyZV9zdGF0dXMpKQor CQkJCQkJeworCQkJCQkJCS8qCisJCQkJCQkJICogVGhlIGZhaWxlZCB0cmFuc2FjdGlvbiB3aWxs IGJlIHJldHJpZWQuIFNvCisJCQkJCQkJICogYWNjdW11bGF0ZSB0aGUgcmV0cnkgZm9yIHRoZSBj b21tYW5kLgorCQkJCQkJCSAqLworCQkJCQkJCWNvbW1hbmQtPnJldHJpZXMrKzsKKwkJCQkJCX0K KwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQkvKgorCQkJCQkJCSAqIFdlIHdpbGwgbm90IGJl IGFibGUgdG8gcmV0cnkgdGhpcyBmYWlsZWQKKwkJCQkJCQkgKiB0cmFuc2FjdGlvbi4gU28gYWNj dW11bGF0ZSB0aGUgZXJyb3IgZm9yIHRoZQorCQkJCQkJCSAqIGNvbW1hbmQuCisJCQkJCQkJICov CisJCQkJCQkJY29tbWFuZC0+ZXJyb3JzKys7CisJCQkJCQkJaWYgKGZhaWx1cmVfc3RhdHVzID09 IElOX0ZBSUxFRF9TUUxfVFJBTlNBQ1RJT04pCisJCQkJCQkJCWNvbW1hbmQtPmVycm9yc19pbl9m YWlsZWRfdHgrKzsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKworCQkJCS8qIEdvIGFoZWFkIHdp dGggbmV4dCBjb21tYW5kLCB0byBiZSBleGVjdXRlZCBvciBza2lwcGVkICovCisJCQkJc3QtPmNv bW1hbmQrKzsKKwkJCQlzdC0+c3RhdGUgPSBjb25kaXRpb25hbF9hY3RpdmUoc3QtPmNzdGFjaykg PworCQkJCQlDU1RBVEVfU1RBUlRfQ09NTUFORCA6IENTVEFURV9TS0lQX0NPTU1BTkQ7CisJCQkJ YnJlYWs7CisKKwkJCS8qCisJCQkgKiBSZXRyeSB0aGUgZmFpbGVkIHRyYW5zYWN0aW9uIGlmIHBv c3NpYmxlLgorCQkJICovCisJCQljYXNlIENTVEFURV9SRVRSWToKKwkJCQlpZiAoY2FuUmV0cnko c3QsIHN0LT5maXJzdF9mYWlsdXJlKSkKKwkJCQl7CisJCQkJCXN0LT5yZXRyaWVzKys7CisKKwkJ CQkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0FMTCkKKwkJCQkJeworCQkJCQkJZnByaW50Zihz dGRlcnIsICJjbGllbnQgJWQgcmVwZWF0cyB0aGUgZmFpbGVkIHRyYW5zYWN0aW9uICh0cnkgJWQv JWQpXG4iLAorCQkJCQkJCQlzdC0+aWQsCisJCQkJCQkJCXN0LT5yZXRyaWVzICsgMSwKKwkJCQkJ CQkJbWF4X3RyaWVzKTsKKwkJCQkJfQorCisJCQkJCS8qCisJCQkJCSAqIFJlc2V0IHRoZSBleGVj dXRpb24gcGFyYW1ldGVycyBhcyB0aGV5IHdlcmUgYXQgdGhlCisJCQkJCSAqIGJlZ2lubmluZyBv ZiB0aGUgdHJhbnNhY3Rpb24uCisJCQkJCSAqLworCQkJCQljb3B5UmFuZG9tU3RhdGUoJnN0LT5y YW5kb21fc3RhdGUsCisJCQkJCQkJCQkmc3QtPnJldHJ5X3N0YXRlLnJhbmRvbV9zdGF0ZSk7CisJ CQkJCWNvcHlWYXJpYWJsZXMoJnN0LT52YXJpYWJsZXMsICZzdC0+cmV0cnlfc3RhdGUudmFyaWFi bGVzKTsKKworCQkJCQkvKiBQcm9jZXNzIHRoZSBmaXJzdCB0cmFuc2FjdGlvbiBjb21tYW5kICov CisJCQkJCXN0LT5jb21tYW5kID0gMDsKKwkJCQkJc3QtPmZpcnN0X2ZhaWx1cmUgPSBOT19GQUlM VVJFOworCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfU1RBUlRfQ09NTUFORDsKKwkJCQl9CisJCQkJ ZWxzZQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogUmVzZXQgdGhlIGV4ZWN1dGlvbiBwYXJhbWV0 ZXJzIGFzIHRoZXkgd2VyZSBhdCB0aGUKKwkJCQkJICogYmVnaW5uaW5nIG9mIHRoZSB0cmFuc2Fj dGlvbiBleGNlcHQgZm9yIGEgcmFuZG9tIHN0YXRlLgorCQkJCQkgKi8KKwkJCQkJY29weVZhcmlh Ymxlcygmc3QtPnZhcmlhYmxlcywgJnN0LT5yZXRyeV9zdGF0ZS52YXJpYWJsZXMpOworCisJCQkJ CS8qIEVuZCB0aGUgZmFpbGVkIHRyYW5zYWN0aW9uICovCisJCQkJCXN0LT5zdGF0ZSA9IENTVEFU RV9FTkRfVFg7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJLyoKIAkJCQkgKiBFbmQgb2YgdHJh bnNhY3Rpb24uCiAJCQkJICovCiAJCQljYXNlIENTVEFURV9FTkRfVFg6CkBAIC0zMjMyLDcgKzM3 NjEsOCBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICph Z2cpCiAJCQkJCUlOU1RSX1RJTUVfU0VUX1pFUk8obm93KTsKIAkJCQl9CiAKLQkJCQlpZiAoKHN0 LT5jbnQgPj0gbnhhY3RzICYmIGR1cmF0aW9uIDw9IDApIHx8IHRpbWVyX2V4Y2VlZGVkKQorCQkJ CWlmICgoZ2V0VG90YWxDbnQoc3QpID49IG54YWN0cyAmJiBkdXJhdGlvbiA8PSAwKSB8fAorCQkJ CQl0aW1lcl9leGNlZWRlZCkKIAkJCQl7CiAJCQkJCS8qIGV4aXQgc3VjY2VzcyAqLwogCQkJCQlz dC0+c3RhdGUgPSBDU1RBVEVfRklOSVNIRUQ7CkBAIC0zMjkyLDcgKzM4MjIsNyBAQCBkb0xvZyhU U3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwKIAkgKiB0byB0aGUgcmFuZG9tIHNhbXBsZS4KIAkg Ki8KIAlpZiAoc2FtcGxlX3JhdGUgIT0gMC4wICYmCi0JCXBnX2VyYW5kNDgodGhyZWFkLT5yYW5k b21fc3RhdGUpID4gc2FtcGxlX3JhdGUpCisJCXBnX2VyYW5kNDgodGhyZWFkLT5yYW5kb21fc3Rh dGUuZGF0YSkgPiBzYW1wbGVfcmF0ZSkKIAkJcmV0dXJuOwogCiAJLyogc2hvdWxkIHdlIGFnZ3Jl Z2F0ZSB0aGUgcmVzdWx0cyBvciBub3Q/ICovCkBAIC0zMzA4LDEzICszODM4LDE1IEBAIGRvTG9n KFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAogCQl3aGlsZSAoYWdnLT5zdGFydF90aW1lICsg YWdnX2ludGVydmFsIDw9IG5vdykKIAkJewogCQkJLyogcHJpbnQgYWdncmVnYXRlZCByZXBvcnQg dG8gbG9nZmlsZSAqLwotCQkJZnByaW50Zihsb2dmaWxlLCAiJWxkICIgSU5UNjRfRk9STUFUICIg JS4wZiAlLjBmICUuMGYgJS4wZiIsCisJCQlmcHJpbnRmKGxvZ2ZpbGUsICIlbGQgIiBJTlQ2NF9G T1JNQVQgIiAlLjBmICUuMGYgJS4wZiAlLjBmICIgSU5UNjRfRk9STUFUICIgIiBJTlQ2NF9GT1JN QVQsCiAJCQkJCShsb25nKSBhZ2ctPnN0YXJ0X3RpbWUsCiAJCQkJCWFnZy0+Y250LAogCQkJCQlh Z2ctPmxhdGVuY3kuc3VtLAogCQkJCQlhZ2ctPmxhdGVuY3kuc3VtMiwKIAkJCQkJYWdnLT5sYXRl bmN5Lm1pbiwKLQkJCQkJYWdnLT5sYXRlbmN5Lm1heCk7CisJCQkJCWFnZy0+bGF0ZW5jeS5tYXgs CisJCQkJCWFnZy0+ZXJyb3JzLAorCQkJCQlhZ2ctPmVycm9yc19pbl9mYWlsZWRfdHgpOwogCQkJ aWYgKHRocm90dGxlX2RlbGF5KQogCQkJewogCQkJCWZwcmludGYobG9nZmlsZSwgIiAlLjBmICUu MGYgJS4wZiAlLjBmIiwKQEAgLTMzMjUsNiArMzg1NywxMCBAQCBkb0xvZyhUU3RhdGUgKnRocmVh ZCwgQ1N0YXRlICpzdCwKIAkJCQlpZiAobGF0ZW5jeV9saW1pdCkKIAkJCQkJZnByaW50Zihsb2dm aWxlLCAiICIgSU5UNjRfRk9STUFULCBhZ2ctPnNraXBwZWQpOwogCQkJfQorCQkJaWYgKG1heF90 cmllcyA+IDEpCisJCQkJZnByaW50Zihsb2dmaWxlLCAiICIgSU5UNjRfRk9STUFUICIgIiBJTlQ2 NF9GT1JNQVQsCisJCQkJCQlhZ2ctPnJldHJpZWQsCisJCQkJCQlhZ2ctPnJldHJpZXMpOwogCQkJ ZnB1dGMoJ1xuJywgbG9nZmlsZSk7CiAKIAkJCS8qIHJlc2V0IGRhdGEgYW5kIG1vdmUgdG8gbmV4 dCBpbnRlcnZhbCAqLwpAQCAtMzMzMiw3ICszODY4LDcgQEAgZG9Mb2coVFN0YXRlICp0aHJlYWQs IENTdGF0ZSAqc3QsCiAJCX0KIAogCQkvKiBhY2N1bXVsYXRlIHRoZSBjdXJyZW50IHRyYW5zYWN0 aW9uICovCi0JCWFjY3VtU3RhdHMoYWdnLCBza2lwcGVkLCBsYXRlbmN5LCBsYWcpOworCQlhY2N1 bVN0YXRzKGFnZywgc2tpcHBlZCwgbGF0ZW5jeSwgbGFnLCBzdC0+Zmlyc3RfZmFpbHVyZSwgc3Qt PnJldHJpZXMpOwogCX0KIAllbHNlCiAJewpAQCAtMzM0MiwxNCArMzg3OCwyNSBAQCBkb0xvZyhU U3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwKIAkJZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7CiAJ CWlmIChza2lwcGVkKQogCQkJZnByaW50Zihsb2dmaWxlLCAiJWQgIiBJTlQ2NF9GT1JNQVQgIiBz a2lwcGVkICVkICVsZCAlbGQiLAotCQkJCQlzdC0+aWQsIHN0LT5jbnQsIHN0LT51c2VfZmlsZSwK KwkJCQkJc3QtPmlkLCBnZXRUb3RhbENudChzdCksIHN0LT51c2VfZmlsZSwKIAkJCQkJKGxvbmcp IHR2LnR2X3NlYywgKGxvbmcpIHR2LnR2X3VzZWMpOwotCQllbHNlCisJCWVsc2UgaWYgKHN0LT5m aXJzdF9mYWlsdXJlID09IE5PX0ZBSUxVUkUpCiAJCQlmcHJpbnRmKGxvZ2ZpbGUsICIlZCAiIElO VDY0X0ZPUk1BVCAiICUuMGYgJWQgJWxkICVsZCIsCi0JCQkJCXN0LT5pZCwgc3QtPmNudCwgbGF0 ZW5jeSwgc3QtPnVzZV9maWxlLAorCQkJCQlzdC0+aWQsIGdldFRvdGFsQ250KHN0KSwgbGF0ZW5j eSwgc3QtPnVzZV9maWxlLAorCQkJCQkobG9uZykgdHYudHZfc2VjLCAobG9uZykgdHYudHZfdXNl Yyk7CisJCWVsc2UgaWYgKHN0LT5maXJzdF9mYWlsdXJlID09IElOX0ZBSUxFRF9TUUxfVFJBTlNB Q1RJT04pCisJCQlmcHJpbnRmKGxvZ2ZpbGUsICIlZCAiIElOVDY0X0ZPUk1BVCAiIGluX2ZhaWxl ZF90eCAlZCAlbGQgJWxkIiwKKwkJCQkJc3QtPmlkLCBnZXRUb3RhbENudChzdCksIHN0LT51c2Vf ZmlsZSwKKwkJCQkJKGxvbmcpIHR2LnR2X3NlYywgKGxvbmcpIHR2LnR2X3VzZWMpOworCQllbHNl CisJCQlmcHJpbnRmKGxvZ2ZpbGUsICIlZCAiIElOVDY0X0ZPUk1BVCAiIGZhaWxlZCAlZCAlbGQg JWxkIiwKKwkJCQkJc3QtPmlkLCBnZXRUb3RhbENudChzdCksIHN0LT51c2VfZmlsZSwKIAkJCQkJ KGxvbmcpIHR2LnR2X3NlYywgKGxvbmcpIHR2LnR2X3VzZWMpOworCiAJCWlmICh0aHJvdHRsZV9k ZWxheSkKIAkJCWZwcmludGYobG9nZmlsZSwgIiAlLjBmIiwgbGFnKTsKKwkJaWYgKG1heF90cmll cyA+IDEpCisJCQlmcHJpbnRmKGxvZ2ZpbGUsICIgJWQiLCBzdC0+cmV0cmllcyk7CiAJCWZwdXRj KCdcbicsIGxvZ2ZpbGUpOwogCX0KIH0KQEAgLTMzNjksNyArMzkxNiw3IEBAIHByb2Nlc3NYYWN0 U3RhdHMoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIGluc3RyX3RpbWUgKm5vdywKIAlib29s CQl0aHJlYWRfZGV0YWlscyA9IHByb2dyZXNzIHx8IHRocm90dGxlX2RlbGF5IHx8IGxhdGVuY3lf bGltaXQsCiAJCQkJZGV0YWlsZWQgPSB0aHJlYWRfZGV0YWlscyB8fCB1c2VfbG9nIHx8IHBlcl9z Y3JpcHRfc3RhdHM7CiAKLQlpZiAoZGV0YWlsZWQgJiYgIXNraXBwZWQpCisJaWYgKGRldGFpbGVk ICYmICFza2lwcGVkICYmIHN0LT5maXJzdF9mYWlsdXJlID09IE5PX0ZBSUxVUkUpCiAJewogCQlp ZiAoSU5TVFJfVElNRV9JU19aRVJPKCpub3cpKQogCQkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVCgq bm93KTsKQEAgLTMzODIsNyArMzkyOSw4IEBAIHByb2Nlc3NYYWN0U3RhdHMoVFN0YXRlICp0aHJl YWQsIENTdGF0ZSAqc3QsIGluc3RyX3RpbWUgKm5vdywKIAlpZiAodGhyZWFkX2RldGFpbHMpCiAJ ewogCQkvKiBrZWVwIGRldGFpbGVkIHRocmVhZCBzdGF0cyAqLwotCQlhY2N1bVN0YXRzKCZ0aHJl YWQtPnN0YXRzLCBza2lwcGVkLCBsYXRlbmN5LCBsYWcpOworCQlhY2N1bVN0YXRzKCZ0aHJlYWQt PnN0YXRzLCBza2lwcGVkLCBsYXRlbmN5LCBsYWcsIHN0LT5maXJzdF9mYWlsdXJlLAorCQkJCSAg IHN0LT5yZXRyaWVzKTsKIAogCQkvKiBjb3VudCB0cmFuc2FjdGlvbnMgb3ZlciB0aGUgbGF0ZW5j eSBsaW1pdCwgaWYgbmVlZGVkICovCiAJCWlmIChsYXRlbmN5X2xpbWl0ICYmIGxhdGVuY3kgPiBs YXRlbmN5X2xpbWl0KQpAQCAtMzM5MCwxOSArMzkzOCwyNCBAQCBwcm9jZXNzWGFjdFN0YXRzKFRT dGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBpbnN0cl90aW1lICpub3csCiAJfQogCWVsc2UKIAl7 Ci0JCS8qIG5vIGRldGFpbGVkIHN0YXRzLCBqdXN0IGNvdW50ICovCi0JCXRocmVhZC0+c3RhdHMu Y250Kys7CisJCS8qIG5vIGRldGFpbGVkIHN0YXRzICovCisJCWFjY3VtU3RhdHMoJnRocmVhZC0+ c3RhdHMsIHNraXBwZWQsIDAsIDAsIHN0LT5maXJzdF9mYWlsdXJlLAorCQkJCSAgIHN0LT5yZXRy aWVzKTsKIAl9CiAKIAkvKiBjbGllbnQgc3RhdCBpcyBqdXN0IGNvdW50aW5nICovCi0Jc3QtPmNu dCsrOworCWlmIChzdC0+Zmlyc3RfZmFpbHVyZSA9PSBOT19GQUlMVVJFKQorCQlzdC0+Y250Kys7 CisJZWxzZQorCQlzdC0+ZWNudCsrOwogCiAJaWYgKHVzZV9sb2cpCiAJCWRvTG9nKHRocmVhZCwg c3QsIGFnZywgc2tpcHBlZCwgbGF0ZW5jeSwgbGFnKTsKIAogCS8qIFhYWCBjb3VsZCB1c2UgYSBt dXRleCBoZXJlLCBidXQgd2UgY2hvb3NlIG5vdCB0byAqLwogCWlmIChwZXJfc2NyaXB0X3N0YXRz KQotCQlhY2N1bVN0YXRzKCZzcWxfc2NyaXB0W3N0LT51c2VfZmlsZV0uc3RhdHMsIHNraXBwZWQs IGxhdGVuY3ksIGxhZyk7CisJCWFjY3VtU3RhdHMoJnNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5z dGF0cywgc2tpcHBlZCwgbGF0ZW5jeSwgbGFnLAorCQkJCSAgIHN0LT5maXJzdF9mYWlsdXJlLCBz dC0+cmV0cmllcyk7CiB9CiAKIApAQCAtNDUzNSw3ICs1MDg4LDggQEAgcHJpbnRSZXN1bHRzKFRT dGF0ZSAqdGhyZWFkcywgU3RhdHNEYXRhICp0b3RhbCwgaW5zdHJfdGltZSB0b3RhbF90aW1lLAog CWRvdWJsZQkJdGltZV9pbmNsdWRlLAogCQkJCXRwc19pbmNsdWRlLAogCQkJCXRwc19leGNsdWRl OwotCWludDY0CQludHggPSB0b3RhbC0+Y250IC0gdG90YWwtPnNraXBwZWQ7CisJaW50NjQJCW50 eCA9IHRvdGFsLT5jbnQgLSB0b3RhbC0+c2tpcHBlZCwKKwkJCQl0b3RhbF9udHggPSB0b3RhbC0+ Y250ICsgdG90YWwtPmVycm9yczsKIAlpbnQJCQlpLAogCQkJCXRvdGFsQ2FjaGVPdmVyZmxvd3Mg PSAwOwogCkBAIC00NTU2LDggKzUxMTAsOCBAQCBwcmludFJlc3VsdHMoVFN0YXRlICp0aHJlYWRz LCBTdGF0c0RhdGEgKnRvdGFsLCBpbnN0cl90aW1lIHRvdGFsX3RpbWUsCiAJaWYgKGR1cmF0aW9u IDw9IDApCiAJewogCQlwcmludGYoIm51bWJlciBvZiB0cmFuc2FjdGlvbnMgcGVyIGNsaWVudDog JWRcbiIsIG54YWN0cyk7Ci0JCXByaW50ZigibnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBhY3R1YWxs eSBwcm9jZXNzZWQ6ICIgSU5UNjRfRk9STUFUICIvJWRcbiIsCi0JCQkgICBudHgsIG54YWN0cyAq IG5jbGllbnRzKTsKKwkJcHJpbnRmKCJudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGFjdHVhbGx5IHBy b2Nlc3NlZDogIiBJTlQ2NF9GT1JNQVQgIi8iIElOVDY0X0ZPUk1BVCAiXG4iLAorCQkJICAgbnR4 LCB0b3RhbF9udHgpOwogCX0KIAllbHNlCiAJewpAQCAtNDU2NSw2ICs1MTE5LDI1IEBAIHByaW50 UmVzdWx0cyhUU3RhdGUgKnRocmVhZHMsIFN0YXRzRGF0YSAqdG90YWwsIGluc3RyX3RpbWUgdG90 YWxfdGltZSwKIAkJcHJpbnRmKCJudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGFjdHVhbGx5IHByb2Nl c3NlZDogIiBJTlQ2NF9GT1JNQVQgIlxuIiwKIAkJCSAgIG50eCk7CiAJfQorCisJaWYgKHRvdGFs LT5lcnJvcnMgPiAwKQorCQlwcmludGYoIm51bWJlciBvZiBlcnJvcnM6ICIgSU5UNjRfRk9STUFU ICIgKCUuM2YlJSlcbiIsCisJCQkgICB0b3RhbC0+ZXJyb3JzLCAxMDAuMCAqIHRvdGFsLT5lcnJv cnMgLyB0b3RhbF9udHgpOworCisJaWYgKHRvdGFsLT5lcnJvcnNfaW5fZmFpbGVkX3R4ID4gMCkK KwkJcHJpbnRmKCJudW1iZXIgb2YgZXJyb3JzIFwiaW4gZmFpbGVkIFNRTCB0cmFuc2FjdGlvblwi OiAiIElOVDY0X0ZPUk1BVCAiICglLjNmJSUpXG4iLAorCQkJICAgdG90YWwtPmVycm9yc19pbl9m YWlsZWRfdHgsCisJCQkgICAxMDAuMCAqIHRvdGFsLT5lcnJvcnNfaW5fZmFpbGVkX3R4IC8gdG90 YWxfbnR4KTsKKworCS8qIGl0IGNhbiBiZSBub24temVybyBvbmx5IGlmIG1heF90cmllcyBpcyBn cmVhdGVyIHRoYW4gb25lICovCisJaWYgKHRvdGFsLT5yZXRyaWVkID4gMCkKKwl7CisJCXByaW50 ZigibnVtYmVyIG9mIHJldHJpZWQ6ICIgSU5UNjRfRk9STUFUICIgKCUuM2YlJSlcbiIsCisJCQkg ICB0b3RhbC0+cmV0cmllZCwgMTAwLjAgKiB0b3RhbC0+cmV0cmllZCAvIHRvdGFsX250eCk7CisJ CXByaW50ZigibnVtYmVyIG9mIHJldHJpZXM6ICIgSU5UNjRfRk9STUFUICJcbiIsIHRvdGFsLT5y ZXRyaWVzKTsKKwl9CisJcHJpbnRmKCJtYXhpbXVtIG51bWJlciBvZiB0cmllczogJWRcbiIsIG1h eF90cmllcyk7CisKIAkvKiBSZXBvcnQgemlwZmlhbiBjYWNoZSBvdmVyZmxvdyAqLwogCWZvciAo aSA9IDA7IGkgPCBudGhyZWFkczsgaSsrKQogCXsKQEAgLTQ2MTQsNyArNTE4Nyw3IEBAIHByaW50 UmVzdWx0cyhUU3RhdGUgKnRocmVhZHMsIFN0YXRzRGF0YSAqdG90YWwsIGluc3RyX3RpbWUgdG90 YWxfdGltZSwKIAlwcmludGYoInRwcyA9ICVmIChleGNsdWRpbmcgY29ubmVjdGlvbnMgZXN0YWJs aXNoaW5nKVxuIiwgdHBzX2V4Y2x1ZGUpOwogCiAJLyogUmVwb3J0IHBlci1zY3JpcHQvY29tbWFu ZCBzdGF0aXN0aWNzICovCi0JaWYgKHBlcl9zY3JpcHRfc3RhdHMgfHwgaXNfbGF0ZW5jaWVzKQor CWlmIChwZXJfc2NyaXB0X3N0YXRzIHx8IHJlcG9ydF9wZXJfY29tbWFuZCkKIAl7CiAJCWludAkJ CWk7CiAKQEAgLTQ2MjMsNiArNTE5Niw3IEBAIHByaW50UmVzdWx0cyhUU3RhdGUgKnRocmVhZHMs IFN0YXRzRGF0YSAqdG90YWwsIGluc3RyX3RpbWUgdG90YWxfdGltZSwKIAkJCWlmIChwZXJfc2Ny aXB0X3N0YXRzKQogCQkJewogCQkJCVN0YXRzRGF0YSAgKnNzdGF0cyA9ICZzcWxfc2NyaXB0W2ld LnN0YXRzOworCQkJCWludDY0CQlzY3JpcHRfdG90YWxfbnR4ID0gc3N0YXRzLT5jbnQgKyBzc3Rh dHMtPmVycm9yczsKIAogCQkJCXByaW50ZigiU1FMIHNjcmlwdCAlZDogJXNcbiIKIAkJCQkJICAg IiAtIHdlaWdodDogJWQgKHRhcmdldHMgJS4xZiUlIG9mIHRvdGFsKVxuIgpAQCAtNDYzMSw5ICs1 MjA1LDMwIEBAIHByaW50UmVzdWx0cyhUU3RhdGUgKnRocmVhZHMsIFN0YXRzRGF0YSAqdG90YWws IGluc3RyX3RpbWUgdG90YWxfdGltZSwKIAkJCQkJICAgc3FsX3NjcmlwdFtpXS53ZWlnaHQsCiAJ CQkJCSAgIDEwMC4wICogc3FsX3NjcmlwdFtpXS53ZWlnaHQgLyB0b3RhbF93ZWlnaHQsCiAJCQkJ CSAgIHNzdGF0cy0+Y250LAotCQkJCQkgICAxMDAuMCAqIHNzdGF0cy0+Y250IC8gdG90YWwtPmNu dCwKKwkJCQkJICAgMTAwLjAgKiBzc3RhdHMtPmNudCAvIHNjcmlwdF90b3RhbF9udHgsCiAJCQkJ CSAgIChzc3RhdHMtPmNudCAtIHNzdGF0cy0+c2tpcHBlZCkgLyB0aW1lX2luY2x1ZGUpOwogCisJ CQkJaWYgKHRvdGFsLT5lcnJvcnMgPiAwKQorCQkJCQlwcmludGYoIiAtIG51bWJlciBvZiBlcnJv cnM6ICIgSU5UNjRfRk9STUFUICIgKCUuM2YlJSlcbiIsCisJCQkJCQkgICBzc3RhdHMtPmVycm9y cywKKwkJCQkJCSAgIDEwMC4wICogc3N0YXRzLT5lcnJvcnMgLyBzY3JpcHRfdG90YWxfbnR4KTsK KworCQkJCWlmICh0b3RhbC0+ZXJyb3JzX2luX2ZhaWxlZF90eCA+IDApCisJCQkJCXByaW50Zigi IC0gbnVtYmVyIG9mIGVycm9ycyBcImluIGZhaWxlZCBTUUwgdHJhbnNhY3Rpb25cIjogIiBJTlQ2 NF9GT1JNQVQgIiAoJS4zZiUlKVxuIiwKKwkJCQkJCSAgIHNzdGF0cy0+ZXJyb3JzX2luX2ZhaWxl ZF90eCwKKwkJCQkJCSAgICgxMDAuMCAqIHNzdGF0cy0+ZXJyb3JzX2luX2ZhaWxlZF90eCAvCisJ CQkJCQkJc2NyaXB0X3RvdGFsX250eCkpOworCisJCQkJLyogaXQgY2FuIGJlIG5vbi16ZXJvIG9u bHkgaWYgbWF4X3RyaWVzIGlzIGdyZWF0ZXIgdGhhbiBvbmUgKi8KKwkJCQlpZiAodG90YWwtPnJl dHJpZWQgPiAwKQorCQkJCXsKKwkJCQkJcHJpbnRmKCIgLSBudW1iZXIgb2YgcmV0cmllZDogIiBJ TlQ2NF9GT1JNQVQgIiAoJS4zZiUlKVxuIiwKKwkJCQkJCSAgIHNzdGF0cy0+cmV0cmllZCwKKwkJ CQkJCSAgIDEwMC4wICogc3N0YXRzLT5yZXRyaWVkIC8gc2NyaXB0X3RvdGFsX250eCk7CisJCQkJ CXByaW50ZigiIC0gbnVtYmVyIG9mIHJldHJpZXM6ICIgSU5UNjRfRk9STUFUICJcbiIsCisJCQkJ CQkgICBzc3RhdHMtPnJldHJpZXMpOworCQkJCX0KKwogCQkJCWlmICh0aHJvdHRsZV9kZWxheSAm JiBsYXRlbmN5X2xpbWl0ICYmIHNzdGF0cy0+Y250ID4gMCkKIAkJCQkJcHJpbnRmKCIgLSBudW1i ZXIgb2YgdHJhbnNhY3Rpb25zIHNraXBwZWQ6ICIgSU5UNjRfRk9STUFUICIgKCUuM2YlJSlcbiIs CiAJCQkJCQkgICBzc3RhdHMtPnNraXBwZWQsCkBAIC00NjQyLDE1ICs1MjM3LDMzIEBAIHByaW50 UmVzdWx0cyhUU3RhdGUgKnRocmVhZHMsIFN0YXRzRGF0YSAqdG90YWwsIGluc3RyX3RpbWUgdG90 YWxfdGltZSwKIAkJCQlwcmludFNpbXBsZVN0YXRzKCIgLSBsYXRlbmN5IiwgJnNzdGF0cy0+bGF0 ZW5jeSk7CiAJCQl9CiAKLQkJCS8qIFJlcG9ydCBwZXItY29tbWFuZCBsYXRlbmNpZXMgKi8KLQkJ CWlmIChpc19sYXRlbmNpZXMpCisJCQkvKiBSZXBvcnQgcGVyLWNvbW1hbmQgbGF0ZW5jaWVzIGFu ZCBlcnJvcnMgKi8KKwkJCWlmIChyZXBvcnRfcGVyX2NvbW1hbmQpCiAJCQl7CiAJCQkJQ29tbWFu ZCAgICoqY29tbWFuZHM7CiAKIAkJCQlpZiAocGVyX3NjcmlwdF9zdGF0cykKLQkJCQkJcHJpbnRm KCIgLSBzdGF0ZW1lbnQgbGF0ZW5jaWVzIGluIG1pbGxpc2Vjb25kczpcbiIpOworCQkJCQlwcmlu dGYoIiAtIHN0YXRlbWVudCBsYXRlbmNpZXMgaW4gbWlsbGlzZWNvbmRzIik7CiAJCQkJZWxzZQot CQkJCQlwcmludGYoInN0YXRlbWVudCBsYXRlbmNpZXMgaW4gbWlsbGlzZWNvbmRzOlxuIik7CisJ CQkJCXByaW50Zigic3RhdGVtZW50IGxhdGVuY2llcyBpbiBtaWxsaXNlY29uZHMiKTsKKworCQkJ CWlmICh0b3RhbC0+ZXJyb3JzID4gMCkKKwkJCQl7CisJCQkJCXByaW50ZigiJXMgZXJyb3JzIiwK KwkJCQkJCSAgICgodG90YWwtPmVycm9yc19pbl9mYWlsZWRfdHggPT0gMCAmJgorCQkJCQkJCXRv dGFsLT5yZXRyaWVkID09IDApID8KKwkJCQkJCQkiIGFuZCIgOiAiLCIpKTsKKwkJCQl9CisJCQkJ aWYgKHRvdGFsLT5lcnJvcnNfaW5fZmFpbGVkX3R4ID4gMCkKKwkJCQl7CisJCQkJCXByaW50Zigi JXMgZXJyb3JzIFwiaW4gZmFpbGVkIFNRTCB0cmFuc2FjdGlvblwiIiwKKwkJCQkJCSAgIHRvdGFs LT5yZXRyaWVkID09IDAgPyAiIGFuZCIgOiAiLCIpOworCQkJCX0KKwkJCQlpZiAodG90YWwtPnJl dHJpZWQgPiAwKQorCQkJCXsKKwkJCQkJcHJpbnRmKCIgYW5kIHJldHJpZXMiKTsKKwkJCQl9CisJ CQkJcHJpbnRmKCI6XG4iKTsKIAogCQkJCWZvciAoY29tbWFuZHMgPSBzcWxfc2NyaXB0W2ldLmNv bW1hbmRzOwogCQkJCQkgKmNvbW1hbmRzICE9IE5VTEw7CkBAIC00NjU4LDEwICs1MjcxLDI1IEBA IHByaW50UmVzdWx0cyhUU3RhdGUgKnRocmVhZHMsIFN0YXRzRGF0YSAqdG90YWwsIGluc3RyX3Rp bWUgdG90YWxfdGltZSwKIAkJCQl7CiAJCQkJCVNpbXBsZVN0YXRzICpjc3RhdHMgPSAmKCpjb21t YW5kcyktPnN0YXRzOwogCi0JCQkJCXByaW50ZigiICAgJTExLjNmICAlc1xuIiwKKwkJCQkJcHJp bnRmKCIgICAlMTEuM2YiLAogCQkJCQkJICAgKGNzdGF0cy0+Y291bnQgPiAwKSA/Ci0JCQkJCQkg ICAxMDAwLjAgKiBjc3RhdHMtPnN1bSAvIGNzdGF0cy0+Y291bnQgOiAwLjAsCi0JCQkJCQkgICAo KmNvbW1hbmRzKS0+bGluZSk7CisJCQkJCQkgICAxMDAwLjAgKiBjc3RhdHMtPnN1bSAvIGNzdGF0 cy0+Y291bnQgOiAwLjApOworCQkJCQlpZiAodG90YWwtPmVycm9ycyA+IDApCisJCQkJCXsKKwkJ CQkJCXByaW50ZigiICAlMjAiIElOVDY0X01PRElGSUVSICJkIiwKKwkJCQkJCQkgICAoKmNvbW1h bmRzKS0+ZXJyb3JzKTsKKwkJCQkJfQorCQkJCQlpZiAodG90YWwtPmVycm9yc19pbl9mYWlsZWRf dHggPiAwKQorCQkJCQl7CisJCQkJCQlwcmludGYoIiAgJTIwIiBJTlQ2NF9NT0RJRklFUiAiZCIs CisJCQkJCQkJICAgKCpjb21tYW5kcyktPmVycm9yc19pbl9mYWlsZWRfdHgpOworCQkJCQl9CisJ CQkJCWlmICh0b3RhbC0+cmV0cmllZCA+IDApCisJCQkJCXsKKwkJCQkJCXByaW50ZigiICAlMjAi IElOVDY0X01PRElGSUVSICJkIiwKKwkJCQkJCQkgICAoKmNvbW1hbmRzKS0+cmV0cmllcyk7CisJ CQkJCX0KKwkJCQkJcHJpbnRmKCIgICVzXG4iLCAoKmNvbW1hbmRzKS0+bGluZSk7CiAJCQkJfQog CQkJfQogCQl9CkBAIC00NzIwLDcgKzUzNDgsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKIAkJeyJidWlsdGluIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdiJ30sCiAJCXsiY2xp ZW50IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdjJ30sCiAJCXsiY29ubmVjdCIsIG5vX2Fy Z3VtZW50LCBOVUxMLCAnQyd9LAotCQl7ImRlYnVnIiwgbm9fYXJndW1lbnQsIE5VTEwsICdkJ30s CisJCXsiZGVidWciLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ2QnfSwKIAkJeyJkZWZpbmUi LCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ0QnfSwKIAkJeyJmaWxlIiwgcmVxdWlyZWRfYXJn dW1lbnQsIE5VTEwsICdmJ30sCiAJCXsiZmlsbGZhY3RvciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBO VUxMLCAnRid9LApAQCAtNDczNSw3ICs1MzYzLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCiAJCXsicHJvZ3Jlc3MiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1AnfSwKIAkJeyJw cm90b2NvbCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnTSd9LAogCQl7InF1aWV0Iiwgbm9f YXJndW1lbnQsIE5VTEwsICdxJ30sCi0JCXsicmVwb3J0LWxhdGVuY2llcyIsIG5vX2FyZ3VtZW50 LCBOVUxMLCAncid9LAorCQl7InJlcG9ydC1wZXItY29tbWFuZCIsIG5vX2FyZ3VtZW50LCBOVUxM LCAncid9LAogCQl7InJhdGUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1InfSwKIAkJeyJz Y2FsZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAncyd9LAogCQl7InNlbGVjdC1vbmx5Iiwg bm9fYXJndW1lbnQsIE5VTEwsICdTJ30sCkBAIC00NzU0LDYgKzUzODIsNyBAQCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKIAkJeyJsb2ctcHJlZml4IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5V TEwsIDd9LAogCQl7ImZvcmVpZ24ta2V5cyIsIG5vX2FyZ3VtZW50LCBOVUxMLCA4fSwKIAkJeyJy YW5kb20tc2VlZCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA5fSwKKwkJeyJtYXgtdHJpZXMi LCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMTB9LAogCQl7TlVMTCwgMCwgTlVMTCwgMH0KIAl9 OwogCkBAIC00ODI1LDcgKzU0NTQsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkv KiBzZXQgcmFuZG9tIHNlZWQgZWFybHksIGJlY2F1c2UgaXQgbWF5IGJlIHVzZWQgd2hpbGUgcGFy c2luZyBzY3JpcHRzLiAqLwogCXNldF9yYW5kb21fc2VlZChnZXRlbnYoIlBHQkVOQ0hfUkFORE9N X1NFRUQiKSwgIlBHQkVOQ0hfUkFORE9NX1NFRUQgZW52aXJvbm1lbnQgdmFyaWFibGUiKTsKIAot CXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJpSTpoOm52cDpkcWI6U05jOmo6 Q3JzOnQ6VDpVOmxmOkQ6RjpNOlA6UjpMOiIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0g LTEpCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImlJOmg6bnZwOmQ6cWI6 U05jOmo6Q3JzOnQ6VDpVOmxmOkQ6RjpNOlA6UjpMOiIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4 KSkgIT0gLTEpCiAJewogCQljaGFyCSAgICpzY3JpcHQ7CiAKQEAgLTQ4NTUsOCArNTQ4NCwyMiBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQlwZ3BvcnQgPSBwZ19zdHJkdXAob3B0 YXJnKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgJ2QnOgotCQkJCWRlYnVnKys7Ci0JCQkJYnJlYWs7 CisJCQkJeworCQkJCQlmb3IgKGRlYnVnX2xldmVsID0gMDsKKwkJCQkJCSBkZWJ1Z19sZXZlbCA8 IE5VTV9ERUJVR0xFVkVMOworCQkJCQkJIGRlYnVnX2xldmVsKyspCisJCQkJCXsKKwkJCQkJCWlm IChzdHJjbXAob3B0YXJnLCBERUJVR0xFVkVsW2RlYnVnX2xldmVsXSkgPT0gMCkKKwkJCQkJCQli cmVhazsKKwkJCQkJfQorCQkJCQlpZiAoZGVidWdfbGV2ZWwgPj0gTlVNX0RFQlVHTEVWRUwpCisJ CQkJCXsKKwkJCQkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBkZWJ1ZyBsZXZlbCAoLWQpOiBc IiVzXCJcbiIsCisJCQkJCQkJCW9wdGFyZyk7CisJCQkJCQlleGl0KDEpOworCQkJCQl9CisJCQkJ CWJyZWFrOworCQkJCX0KIAkJCWNhc2UgJ2MnOgogCQkJCWJlbmNobWFya2luZ19vcHRpb25fc2V0 ID0gdHJ1ZTsKIAkJCQluY2xpZW50cyA9IGF0b2kob3B0YXJnKTsKQEAgLTQ5MDgsNyArNTU1MSw3 IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCWJyZWFrOwogCQkJY2FzZSAncic6 CiAJCQkJYmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVlOwotCQkJCWlzX2xhdGVuY2llcyA9 IHRydWU7CisJCQkJcmVwb3J0X3Blcl9jb21tYW5kID0gdHJ1ZTsKIAkJCQlicmVhazsKIAkJCWNh c2UgJ3MnOgogCQkJCXNjYWxlX2dpdmVuID0gdHJ1ZTsKQEAgLTQ5ODksNyArNTYzMiw3IEBAIG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQl9CiAKIAkJCQkJKnArKyA9ICdcMCc7Ci0J CQkJCWlmICghcHV0VmFyaWFibGUoJnN0YXRlWzBdLCAib3B0aW9uIiwgb3B0YXJnLCBwKSkKKwkJ CQkJaWYgKCFwdXRWYXJpYWJsZSgmc3RhdGVbMF0udmFyaWFibGVzLCAib3B0aW9uIiwgb3B0YXJn LCBwKSkKIAkJCQkJCWV4aXQoMSk7CiAJCQkJfQogCQkJCWJyZWFrOwpAQCAtNTEwMSw2ICs1NzQ0 LDE2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCWJlbmNobWFya2luZ19vcHRp b25fc2V0ID0gdHJ1ZTsKIAkJCQlzZXRfcmFuZG9tX3NlZWQob3B0YXJnLCAiLS1yYW5kb20tc2Vl ZCBvcHRpb24iKTsKIAkJCQlicmVhazsKKwkJCWNhc2UgMTA6CQkJLyogbWF4LXRyaWVzICovCisJ CQkJYmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVlOworCQkJCW1heF90cmllcyA9IGF0b2ko b3B0YXJnKTsKKwkJCQlpZiAobWF4X3RyaWVzIDw9IDApCisJCQkJeworCQkJCQlmcHJpbnRmKHN0 ZGVyciwgImludmFsaWQgbnVtYmVyIG9mIG1heGltdW0gdHJpZXM6IFwiJXNcIlxuIiwKKwkJCQkJ CQlvcHRhcmcpOworCQkJCQlleGl0KDEpOworCQkJCX0KKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6 CiAJCQkJZnByaW50ZihzdGRlcnIsIF8oIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9y bWF0aW9uLlxuIiksIHByb2duYW1lKTsKIAkJCQlleGl0KDEpOwpAQCAtNTI4NywxOSArNTk0MCwx OSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCWludAkJCWo7CiAKIAkJCXN0YXRl W2ldLmlkID0gaTsKLQkJCWZvciAoaiA9IDA7IGogPCBzdGF0ZVswXS5udmFyaWFibGVzOyBqKysp CisJCQlmb3IgKGogPSAwOyBqIDwgc3RhdGVbMF0udmFyaWFibGVzLm52YXJpYWJsZXM7IGorKykK IAkJCXsKLQkJCQlWYXJpYWJsZSAgICp2YXIgPSAmc3RhdGVbMF0udmFyaWFibGVzW2pdOworCQkJ CVZhcmlhYmxlICAgKnZhciA9ICZzdGF0ZVswXS52YXJpYWJsZXMuYXJyYXlbal07CiAKIAkJCQlp ZiAodmFyLT52YWx1ZS50eXBlICE9IFBHQlRfTk9fVkFMVUUpCiAJCQkJewotCQkJCQlpZiAoIXB1 dFZhcmlhYmxlVmFsdWUoJnN0YXRlW2ldLCAic3RhcnR1cCIsCi0JCQkJCQkJCQkJICAgdmFyLT5u YW1lLCAmdmFyLT52YWx1ZSkpCisJCQkJCWlmICghcHV0VmFyaWFibGVWYWx1ZSgmc3RhdGVbaV0u dmFyaWFibGVzLCAic3RhcnR1cCIsCisJCQkJCQkJCQkJICAgdmFyLT5uYW1lLCAmdmFyLT52YWx1 ZSwgdHJ1ZSkpCiAJCQkJCQlleGl0KDEpOwogCQkJCX0KIAkJCQllbHNlCiAJCQkJewotCQkJCQlp ZiAoIXB1dFZhcmlhYmxlKCZzdGF0ZVtpXSwgInN0YXJ0dXAiLAorCQkJCQlpZiAoIXB1dFZhcmlh YmxlKCZzdGF0ZVtpXS52YXJpYWJsZXMsICJzdGFydHVwIiwKIAkJCQkJCQkJCSB2YXItPm5hbWUs IHZhci0+c3ZhbHVlKSkKIAkJCQkJCWV4aXQoMSk7CiAJCQkJfQpAQCAtNTMxMSw5ICs1OTY0LDEw IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWZvciAoaSA9IDA7IGkgPCBuY2xpZW50 czsgaSsrKQogCXsKIAkJc3RhdGVbaV0uY3N0YWNrID0gY29uZGl0aW9uYWxfc3RhY2tfY3JlYXRl KCk7CisJCWluaXRSYW5kb21TdGF0ZSgmc3RhdGVbaV0ucmFuZG9tX3N0YXRlKTsKIAl9CiAKLQlp ZiAoZGVidWcpCisJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0FMTCkKIAl7CiAJCWlmIChkdXJh dGlvbiA8PSAwKQogCQkJcHJpbnRmKCJwZ2hvc3Q6ICVzIHBncG9ydDogJXMgbmNsaWVudHM6ICVk IG54YWN0czogJWQgZGJOYW1lOiAlc1xuIiwKQEAgLTUzNzQsMTEgKzYwMjgsMTIgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJICogOnNjYWxlIHZhcmlhYmxlcyBub3JtYWxseSBnZXQg LXMgb3IgZGF0YWJhc2Ugc2NhbGUsIGJ1dCBkb24ndCBvdmVycmlkZQogCSAqIGFuIGV4cGxpY2l0 IC1EIHN3aXRjaAogCSAqLwotCWlmIChsb29rdXBWYXJpYWJsZSgmc3RhdGVbMF0sICJzY2FsZSIp ID09IE5VTEwpCisJaWYgKGxvb2t1cFZhcmlhYmxlKCZzdGF0ZVswXS52YXJpYWJsZXMsICJzY2Fs ZSIpID09IE5VTEwpCiAJewogCQlmb3IgKGkgPSAwOyBpIDwgbmNsaWVudHM7IGkrKykKIAkJewot CQkJaWYgKCFwdXRWYXJpYWJsZUludCgmc3RhdGVbaV0sICJzdGFydHVwIiwgInNjYWxlIiwgc2Nh bGUpKQorCQkJaWYgKCFwdXRWYXJpYWJsZUludCgmc3RhdGVbaV0udmFyaWFibGVzLCAic3RhcnR1 cCIsICJzY2FsZSIsIHNjYWxlLAorCQkJCQkJCQl0cnVlKSkKIAkJCQlleGl0KDEpOwogCQl9CiAJ fQpAQCAtNTM4NywxNSArNjA0MiwxOCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkg KiBEZWZpbmUgYSA6Y2xpZW50X2lkIHZhcmlhYmxlIHRoYXQgaXMgdW5pcXVlIHBlciBjb25uZWN0 aW9uLiBCdXQgZG9uJ3QKIAkgKiBvdmVycmlkZSBhbiBleHBsaWNpdCAtRCBzd2l0Y2guCiAJICov Ci0JaWYgKGxvb2t1cFZhcmlhYmxlKCZzdGF0ZVswXSwgImNsaWVudF9pZCIpID09IE5VTEwpCisJ aWYgKGxvb2t1cFZhcmlhYmxlKCZzdGF0ZVswXS52YXJpYWJsZXMsICJjbGllbnRfaWQiKSA9PSBO VUxMKQogCXsKIAkJZm9yIChpID0gMDsgaSA8IG5jbGllbnRzOyBpKyspCi0JCQlpZiAoIXB1dFZh cmlhYmxlSW50KCZzdGF0ZVtpXSwgInN0YXJ0dXAiLCAiY2xpZW50X2lkIiwgaSkpCisJCXsKKwkJ CWlmICghcHV0VmFyaWFibGVJbnQoJnN0YXRlW2ldLnZhcmlhYmxlcywgInN0YXJ0dXAiLCAiY2xp ZW50X2lkIiwgaSwKKwkJCQkJCQkJdHJ1ZSkpCiAJCQkJZXhpdCgxKTsKKwkJfQogCX0KIAogCS8q IHNldCBkZWZhdWx0IHNlZWQgZm9yIGhhc2ggZnVuY3Rpb25zICovCi0JaWYgKGxvb2t1cFZhcmlh YmxlKCZzdGF0ZVswXSwgImRlZmF1bHRfc2VlZCIpID09IE5VTEwpCisJaWYgKGxvb2t1cFZhcmlh YmxlKCZzdGF0ZVswXS52YXJpYWJsZXMsICJkZWZhdWx0X3NlZWQiKSA9PSBOVUxMKQogCXsKIAkJ dWludDY0CXNlZWQgPSAoKHVpbnQ2NCkgKHJhbmRvbSgpICYgMHhGRkZGKSA8PCA0OCkgfAogCQkJ CQkgICAoKHVpbnQ2NCkgKHJhbmRvbSgpICYgMHhGRkZGKSA8PCAzMikgfApAQCAtNTQwMywxNSAr NjA2MSwxNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJICAgKHVpbnQ2NCkg KHJhbmRvbSgpICYgMHhGRkZGKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgbmNsaWVudHM7IGkrKykK LQkJCWlmICghcHV0VmFyaWFibGVJbnQoJnN0YXRlW2ldLCAic3RhcnR1cCIsICJkZWZhdWx0X3Nl ZWQiLCAoaW50NjQpIHNlZWQpKQorCQkJaWYgKCFwdXRWYXJpYWJsZUludCgmc3RhdGVbaV0udmFy aWFibGVzLCAic3RhcnR1cCIsICJkZWZhdWx0X3NlZWQiLAorCQkJCQkJCQkoaW50NjQpIHNlZWQs IHRydWUpKQogCQkJCWV4aXQoMSk7CiAJfQogCiAJLyogc2V0IHJhbmRvbSBzZWVkIHVubGVzcyBv dmVyd3JpdHRlbiAqLwotCWlmIChsb29rdXBWYXJpYWJsZSgmc3RhdGVbMF0sICJyYW5kb21fc2Vl ZCIpID09IE5VTEwpCisJaWYgKGxvb2t1cFZhcmlhYmxlKCZzdGF0ZVswXS52YXJpYWJsZXMsICJy YW5kb21fc2VlZCIpID09IE5VTEwpCiAJewogCQlmb3IgKGkgPSAwOyBpIDwgbmNsaWVudHM7IGkr KykKLQkJCWlmICghcHV0VmFyaWFibGVJbnQoJnN0YXRlW2ldLCAic3RhcnR1cCIsICJyYW5kb21f c2VlZCIsIHJhbmRvbV9zZWVkKSkKKwkJCWlmICghcHV0VmFyaWFibGVJbnQoJnN0YXRlW2ldLnZh cmlhYmxlcywgInN0YXJ0dXAiLCAicmFuZG9tX3NlZWQiLAorCQkJCQkJCQlyYW5kb21fc2VlZCwg dHJ1ZSkpCiAJCQkJZXhpdCgxKTsKIAl9CiAKQEAgLTU0NDQsOSArNjEwNCw3IEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl0aHJlYWQtPnN0YXRlID0gJnN0YXRlW25jbGllbnRzX2Rl YWx0XTsKIAkJdGhyZWFkLT5uc3RhdGUgPQogCQkJKG5jbGllbnRzIC0gbmNsaWVudHNfZGVhbHQg KyBudGhyZWFkcyAtIGkgLSAxKSAvIChudGhyZWFkcyAtIGkpOwotCQl0aHJlYWQtPnJhbmRvbV9z dGF0ZVswXSA9IHJhbmRvbSgpOwotCQl0aHJlYWQtPnJhbmRvbV9zdGF0ZVsxXSA9IHJhbmRvbSgp OwotCQl0aHJlYWQtPnJhbmRvbV9zdGF0ZVsyXSA9IHJhbmRvbSgpOworCQlpbml0UmFuZG9tU3Rh dGUoJnRocmVhZC0+cmFuZG9tX3N0YXRlKTsKIAkJdGhyZWFkLT5sb2dmaWxlID0gTlVMTDsgLyog ZmlsbGVkIGluIGxhdGVyICovCiAJCXRocmVhZC0+bGF0ZW5jeV9sYXRlID0gMDsKIAkJdGhyZWFk LT56aXBmX2NhY2hlLm5iX2NlbGxzID0gMDsKQEAgLTU1MjgsNiArNjE4NiwxMCBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKIAkJbWVyZ2VTaW1wbGVTdGF0cygmc3RhdHMubGFnLCAmdGhy ZWFkLT5zdGF0cy5sYWcpOwogCQlzdGF0cy5jbnQgKz0gdGhyZWFkLT5zdGF0cy5jbnQ7CiAJCXN0 YXRzLnNraXBwZWQgKz0gdGhyZWFkLT5zdGF0cy5za2lwcGVkOworCQlzdGF0cy5yZXRyaWVzICs9 IHRocmVhZC0+c3RhdHMucmV0cmllczsKKwkJc3RhdHMucmV0cmllZCArPSB0aHJlYWQtPnN0YXRz LnJldHJpZWQ7CisJCXN0YXRzLmVycm9ycyArPSB0aHJlYWQtPnN0YXRzLmVycm9yczsKKwkJc3Rh dHMuZXJyb3JzX2luX2ZhaWxlZF90eCArPSB0aHJlYWQtPnN0YXRzLmVycm9yc19pbl9mYWlsZWRf dHg7CiAJCWxhdGVuY3lfbGF0ZSArPSB0aHJlYWQtPmxhdGVuY3lfbGF0ZTsKIAkJSU5TVFJfVElN RV9BREQoY29ubl90b3RhbF90aW1lLCB0aHJlYWQtPmNvbm5fdGltZSk7CiAJfQpAQCAtNTgxMiw3 ICs2NDc0LDExIEBAIHRocmVhZFJ1bih2b2lkICphcmcpCiAJCQkJLyogZ2VuZXJhdGUgYW5kIHNo b3cgcmVwb3J0ICovCiAJCQkJU3RhdHNEYXRhCWN1cjsKIAkJCQlpbnQ2NAkJcnVuID0gbm93IC0g bGFzdF9yZXBvcnQsCi0JCQkJCQkJbnR4OworCQkJCQkJCW50eCwKKwkJCQkJCQlyZXRyaWVzLAor CQkJCQkJCXJldHJpZWQsCisJCQkJCQkJZXJyb3JzLAorCQkJCQkJCWVycm9yc19pbl9mYWlsZWRf dHg7CiAJCQkJZG91YmxlCQl0cHMsCiAJCQkJCQkJdG90YWxfcnVuLAogCQkJCQkJCWxhdGVuY3ks CkBAIC01ODM5LDYgKzY1MDUsMTEgQEAgdGhyZWFkUnVuKHZvaWQgKmFyZykKIAkJCQkJbWVyZ2VT aW1wbGVTdGF0cygmY3VyLmxhZywgJnRocmVhZFtpXS5zdGF0cy5sYWcpOwogCQkJCQljdXIuY250 ICs9IHRocmVhZFtpXS5zdGF0cy5jbnQ7CiAJCQkJCWN1ci5za2lwcGVkICs9IHRocmVhZFtpXS5z dGF0cy5za2lwcGVkOworCQkJCQljdXIucmV0cmllcyArPSB0aHJlYWRbaV0uc3RhdHMucmV0cmll czsKKwkJCQkJY3VyLnJldHJpZWQgKz0gdGhyZWFkW2ldLnN0YXRzLnJldHJpZWQ7CisJCQkJCWN1 ci5lcnJvcnMgKz0gdGhyZWFkW2ldLnN0YXRzLmVycm9yczsKKwkJCQkJY3VyLmVycm9yc19pbl9m YWlsZWRfdHggKz0KKwkJCQkJCXRocmVhZFtpXS5zdGF0cy5lcnJvcnNfaW5fZmFpbGVkX3R4Owog CQkJCX0KIAogCQkJCS8qIHdlIGNvdW50IG9ubHkgYWN0dWFsbHkgZXhlY3V0ZWQgdHJhbnNhY3Rp b25zICovCkBAIC01ODU2LDYgKzY1MjcsMTEgQEAgdGhyZWFkUnVuKHZvaWQgKmFyZykKIAkJCQl7 CiAJCQkJCWxhdGVuY3kgPSBzcWxhdCA9IHN0ZGV2ID0gbGFnID0gMDsKIAkJCQl9CisJCQkJcmV0 cmllcyA9IGN1ci5yZXRyaWVzIC0gbGFzdC5yZXRyaWVzOworCQkJCXJldHJpZWQgPSBjdXIucmV0 cmllZCAtIGxhc3QucmV0cmllZDsKKwkJCQllcnJvcnMgPSBjdXIuZXJyb3JzIC0gbGFzdC5lcnJv cnM7CisJCQkJZXJyb3JzX2luX2ZhaWxlZF90eCA9IGN1ci5lcnJvcnNfaW5fZmFpbGVkX3R4IC0K KwkJCQkJbGFzdC5lcnJvcnNfaW5fZmFpbGVkX3R4OwogCiAJCQkJaWYgKHByb2dyZXNzX3RpbWVz dGFtcCkKIAkJCQl7CkBAIC01ODgxLDYgKzY1NTcsMTQgQEAgdGhyZWFkUnVuKHZvaWQgKmFyZykK IAkJCQkJCSJwcm9ncmVzczogJXMsICUuMWYgdHBzLCBsYXQgJS4zZiBtcyBzdGRkZXYgJS4zZiIs CiAJCQkJCQl0YnVmLCB0cHMsIGxhdGVuY3ksIHN0ZGV2KTsKIAorCQkJCWlmIChlcnJvcnMgPiAw KQorCQkJCXsKKwkJCQkJZnByaW50ZihzdGRlcnIsICIsICIgSU5UNjRfRk9STUFUICIgZmFpbGVk IiAsIGVycm9ycyk7CisJCQkJCWlmIChlcnJvcnNfaW5fZmFpbGVkX3R4ID4gMCkKKwkJCQkJCWZw cmludGYoc3RkZXJyLCAiICgiIElOVDY0X0ZPUk1BVCAiIGluIGZhaWxlZCB0eCkiLAorCQkJCQkJ CQllcnJvcnNfaW5fZmFpbGVkX3R4KTsKKwkJCQl9CisKIAkJCQlpZiAodGhyb3R0bGVfZGVsYXkp CiAJCQkJewogCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiwgbGFnICUuM2YgbXMiLCBsYWcpOwpAQCAt NTg4OCw2ICs2NTcyLDExIEBAIHRocmVhZFJ1bih2b2lkICphcmcpCiAJCQkJCQlmcHJpbnRmKHN0 ZGVyciwgIiwgIiBJTlQ2NF9GT1JNQVQgIiBza2lwcGVkIiwKIAkJCQkJCQkJY3VyLnNraXBwZWQg LSBsYXN0LnNraXBwZWQpOwogCQkJCX0KKworCQkJCS8qIGl0IGNhbiBiZSBub24temVybyBvbmx5 IGlmIG1heF90cmllcyBpcyBncmVhdGVyIHRoYW4gb25lICovCisJCQkJaWYgKHJldHJpZWQgPiAw KQorCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiwgIiBJTlQ2NF9GT1JNQVQgIiByZXRyaWVkLCAiIElO VDY0X0ZPUk1BVCAiIHJldHJpZXMiLAorCQkJCQkJCXJldHJpZWQsIHJldHJpZXMpOwogCQkJCWZw cmludGYoc3RkZXJyLCAiXG4iKTsKIAogCQkJCWxhc3QgPSBjdXI7CmRpZmYgLS1naXQgYS9zcmMv YmluL3BnYmVuY2gvdC8wMDFfcGdiZW5jaF93aXRoX3NlcnZlci5wbCBiL3NyYy9iaW4vcGdiZW5j aC90LzAwMV9wZ2JlbmNoX3dpdGhfc2VydmVyLnBsCmluZGV4IGJlMDhiMjAuLjRkNDY0OTYgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdiZW5jaC90LzAwMV9wZ2JlbmNoX3dpdGhfc2VydmVyLnBsCisr KyBiL3NyYy9iaW4vcGdiZW5jaC90LzAwMV9wZ2JlbmNoX3dpdGhfc2VydmVyLnBsCkBAIC0xMTgs NyArMTE4LDggQEAgcGdiZW5jaCgKIAlbICAgcXJ7YnVpbHRpbjogVFBDLUJ9LAogCQlxcntjbGll bnRzOiAyXGJ9LAogCQlxcntwcm9jZXNzZWQ6IDEwLzEwfSwKLQkJcXJ7bW9kZTogc2ltcGxlfSBd LAorCQlxcnttb2RlOiBzaW1wbGV9LAorCQlxcnttYXhpbXVtIG51bWJlciBvZiB0cmllczogMX0g XSwKIAlbcXJ7XiR9XSwKIAkncGdiZW5jaCB0cGNiLWxpa2UnKTsKIApAQCAtMTM0LDcgKzEzNSw3 IEBAIHBnYmVuY2goCiAJJ3BnYmVuY2ggc2ltcGxlIHVwZGF0ZScpOwogCiBwZ2JlbmNoKAotCSct dCAxMDAgLWMgNyAtTSBwcmVwYXJlZCAtYiBzZSAtLWRlYnVnJywKKwknLXQgMTAwIC1jIDcgLU0g cHJlcGFyZWQgLWIgc2UgLS1kZWJ1ZyBhbGwnLAogCTAsCiAJWyAgIHFye2J1aWx0aW46IHNlbGVj dCBvbmx5fSwKIAkJcXJ7Y2xpZW50czogN1xifSwKQEAgLTQ5MSw2ICs0OTIsMTAgQEAgbXkgQGVy cm9ycyA9ICgKIFxzZXQgaSAwCiBTRUxFQ1QgTEVBU1QoOmksIDppLCA6aSwgOmksIDppLCA6aSwg OmksIDppLCA6aSwgOmksIDppKTsKIH0gXSwKKwlbICAgJ3NxbCBkaXZpc2lvbiBieSB6ZXJvJywg MCwgW3Fye0VSUk9SOiAgZGl2aXNpb24gYnkgemVyb31dLAorCQlxey0tIFNRTCBkaXZpc2lvbiBi eSB6ZXJvCisJU0VMRUNUIDEgLyAwOworfSBdLAogCiAJIyBTSEVMTAogCVsgICAnc2hlbGwgYmFk IGNvbW1hbmQnLCAgICAgICAgICAgICAgIDAsCkBAIC02MjEsNiArNjI2LDE2IEBAIFNFTEVDVCBM RUFTVCg6aSwgOmksIDppLCA6aSwgOmksIDppLCA6aSwgOmksIDppLCA6aSwgOmkpOwogCVsgICAn c2xlZXAgdW5rbm93biB1bml0JywgICAgICAgICAxLAogCQlbcXJ7dW5yZWNvZ25pemVkIHRpbWUg dW5pdH1dLCBxe1xzbGVlcCAxIHdlZWt9IF0sCiAKKwkjIENPTkRJVElPTkFMIEJMT0NLUworCVsg ICAnaWYgZWxpZiBmYWlsZWQgY29uZGl0aW9ucycsIDAsCisJCVtxcntkaXZpc2lvbiBieSB6ZXJv fV0sCisJCXF7LS0gZmFpbGVkIGNvbmRpdGlvbnMKK1xpZiAxIC8gMAorXGVsaWYgMSAvIDAKK1xl bHNlCitcZW5kaWYKK30gXSwKKwogCSMgTUlTQwogCVsgICAnbWlzYyBpbnZhbGlkIGJhY2tzbGFz aCBjb21tYW5kJywgICAgICAgICAxLAogCQlbcXJ7aW52YWxpZCBjb21tYW5kIC4qICJub3N1Y2hj b21tYW5kIn1dLCBxe1xub3N1Y2hjb21tYW5kfSBdLApAQCAtNjM1LDE0ICs2NTAsMzAgQEAgZm9y IG15ICRlIChAZXJyb3JzKQogCW15ICRuID0gJzAwMV9wZ2JlbmNoX2Vycm9yXycgLiAkbmFtZTsK IAkkbiA9fiBzLyAvXy9nOwogCXBnYmVuY2goCi0JCSctbiAtdCAxIC1EZm9vPWJsYSAtRG51bGw9 bnVsbCAtRHRydWU9dHJ1ZSAtRG9uZT0xIC1EemVybz0wLjAgLURiYWR0cnVlPXRydWVYWFggLU0g cHJlcGFyZWQnLAorCQknLW4gLXQgMSAtRGZvbz1ibGEgLURudWxsPW51bGwgLUR0cnVlPXRydWUg LURvbmU9MSAtRHplcm89MC4wIC1EYmFkdHJ1ZT10cnVlWFhYIC1NIHByZXBhcmVkIC1kIGZhaWxz JywKIAkJJHN0YXR1cywKLQkJWyAkc3RhdHVzID8gcXJ7XiR9IDogcXJ7cHJvY2Vzc2VkOiAwLzF9 IF0sCisJCSgkc3RhdHVzID8KKwkJIFsgcXJ7XiR9IF0gOgorCQkgWyBxcntwcm9jZXNzZWQ6IDAv MX0sIHFye251bWJlciBvZiBlcnJvcnM6IDEgXCgxMDAuMDAwJVwpfSBdKSwKIAkJJHJlLAogCQkn cGdiZW5jaCBzY3JpcHQgZXJyb3I6ICcgLiAkbmFtZSwKIAkJeyAkbiA9PiAkc2NyaXB0IH0pOwog fQogCisjIHJlc2V0IGNsaWVudCB2YXJpYWJsZXMgaW4gY2FzZSBvZiBmYWlsdXJlCitwZ2JlbmNo KAorCSctbiAtdCAyIC1kIGZhaWxzJywgMCwKKwlbIHFye3Byb2Nlc3NlZDogMC8yfSwgcXJ7bnVt YmVyIG9mIGVycm9yczogMiBcKDEwMC4wMDAlXCl9IF0sCisJWyBxcnsoY2xpZW50IDAgZ290IGFu IGVycm9yIGluIGNvbW1hbmQgMSBcKFNRTFwpIG9mIHNjcmlwdCAwOyBFUlJPUjogIHN5bnRheCBl cnJvciBhdCBvciBuZWFyICI6IigufFxuKSopezJ9fSBdLAorCSdwZ2JlbmNoIHJlc2V0IGNsaWVu dCB2YXJpYWJsZXMgaW4gY2FzZSBvZiBmYWlsdXJlJywKKwl7CScwMDFfcGdiZW5jaF9yZXNldF9j bGllbnRfdmFyaWFibGVzJyA9PiBxeworQkVHSU47CistLSBzZWxlY3QgYW4gdW5hc3NpZ25lZCB2 YXJpYWJsZQorU0VMRUNUIDp1bmFzc2lnbmVkX3ZhcjsKK1xzZXQgdW5hc3NpZ25lZF92YXIgMQor RU5EOworfSB9KTsKKwogIyB6aXBmaWFuIGNhY2hlIGFycmF5IG92ZXJmbG93CiBwZ2JlbmNoKAog CSctdCAxJywgMCwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC90LzAwMl9wZ2JlbmNoX25v X3NlcnZlci5wbCBiL3NyYy9iaW4vcGdiZW5jaC90LzAwMl9wZ2JlbmNoX25vX3NlcnZlci5wbApp bmRleCA2ODJiYzIyLi5hMGMyMjdlIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnYmVuY2gvdC8wMDJf cGdiZW5jaF9ub19zZXJ2ZXIucGwKKysrIGIvc3JjL2Jpbi9wZ2JlbmNoL3QvMDAyX3BnYmVuY2hf bm9fc2VydmVyLnBsCkBAIC01Nyw3ICs1Nyw3IEBAIG15IEBvcHRpb25zID0gKAogCiAJIyBuYW1l LCBvcHRpb25zLCBzdGRlcnIgY2hlY2tzCiAJWyAgICdiYWQgb3B0aW9uJywKLQkJJy1oIGhvbWUg LXAgNTQzMiAtVSBjYWx2aW4gLWQgLS1iYWQtb3B0aW9uJywKKwkJJy1oIGhvbWUgLXAgNTQzMiAt VSBjYWx2aW4gLWQgYWxsIC0tYmFkLW9wdGlvbicsCiAJCVsgcXJ7KHVucmVjb2duaXplZHxpbGxl Z2FsKSBvcHRpb259LCBxcnstLWhlbHAuKm1vcmUgaW5mb3JtYXRpb259IF0gXSwKIAlbICAgJ25v IGZpbGUnLAogCQknLWYgbm8tc3VjaC1maWxlJywKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5j aC90LzAwM19zZXJpYWxpemF0aW9uX2FuZF9kZWFkbG9ja19mYWlscy5wbCBiL3NyYy9iaW4vcGdi ZW5jaC90LzAwM19zZXJpYWxpemF0aW9uX2FuZF9kZWFkbG9ja19mYWlscy5wbApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTlkN2RhCi0tLSAvZGV2L251bGwKKysrIGIvc3Jj L2Jpbi9wZ2JlbmNoL3QvMDAzX3NlcmlhbGl6YXRpb25fYW5kX2RlYWRsb2NrX2ZhaWxzLnBsCkBA IC0wLDAgKzEsODE1IEBACit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1c2UgQ29uZmln OwordXNlIFBvc3RncmVzTm9kZTsKK3VzZSBUZXN0TGliOwordXNlIFRlc3Q6Ok1vcmUgdGVzdHMg PT4gMjE7CisKK3VzZSBjb25zdGFudAoreworCVJFQURfQ09NTUlUVEVEICAgPT4gMCwKKwlSRVBF QVRBQkxFX1JFQUQgID0+IDEsCisJU0VSSUFMSVpBQkxFICAgICA9PiAyLAorfTsKKworbXkgQGlz b2xhdGlvbl9sZXZlbF9zaGVsbCA9ICgKKwkncmVhZFxcIGNvbW1pdHRlZCcsCisJJ3JlcGVhdGFi bGVcXCByZWFkJywKKwknc2VyaWFsaXphYmxlJyk7CisKKyMgVGhlIGtleXMgb2YgYWR2aXNvcnkg bG9ja3MgZm9yIHRlc3RpbmcgZGVhZGxvY2sgZmFpbHVyZXM6Cit1c2UgY29uc3RhbnQKK3sKKwlE RUFETE9DS18xICAgICAgICAgPT4gMywKKwlXQUlUX1BHQkVOQ0hfMiAgICAgPT4gNCwKKwlERUFE TE9DS18yICAgICAgICAgPT4gNSwKKwlUUkFOU0FDVElPTl9FTkRTXzEgPT4gNiwKKwlUUkFOU0FD VElPTl9FTkRTXzIgPT4gNywKK307CisKKyMgVGVzdCBjb25jdXJyZW50IHVwZGF0ZSBpbiB0YWJs ZSByb3cuCitteSAkbm9kZSA9IGdldF9uZXdfbm9kZSgnbWFpbicpOworJG5vZGUtPmluaXQ7Cisk bm9kZS0+c3RhcnQ7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisgICAgJ0NSRUFURSBV TkxPR0dFRCBUQUJMRSB4eSAoeCBpbnRlZ2VyLCB5IGludGVnZXIpOyAnCisgIC4gJ0lOU0VSVCBJ TlRPIHh5IFZBTFVFUyAoMSwgMiksICgyLCAzKTsnKTsKKworbXkgJHNjcmlwdF9zZXJpYWxpemF0 aW9uID0gJG5vZGUtPmJhc2VkaXIgLiAnL3BnYmVuY2hfc2NyaXB0X3NlcmlhbGl6YXRpb24nOwor YXBwZW5kX3RvX2ZpbGUoJHNjcmlwdF9zZXJpYWxpemF0aW9uLAorCQkiXFxzZXQgZGVsdGEgcmFu ZG9tKC01MDAwLCA1MDAwKVxuIgorCSAgLiAiQkVHSU47XG4iCisJICAuICJVUERBVEUgeHkgU0VU IHkgPSB5ICsgOmRlbHRhICIKKwkgIC4gIldIRVJFIHggPSAxIEFORCBwZ19hZHZpc29yeV9sb2Nr KDApIElTIE5PVCBOVUxMO1xuIgorCSAgLiAiU0VMRUNUIHBnX2Fkdmlzb3J5X3VubG9ja19hbGwo KTtcbiIKKwkgIC4gIkVORDtcbiIpOworCitteSAkc2NyaXB0X2RlYWRsb2NrczEgPSAkbm9kZS0+ YmFzZWRpciAuICcvcGdiZW5jaF9zY3JpcHRfZGVhZGxvY2tzMSc7CithcHBlbmRfdG9fZmlsZSgk c2NyaXB0X2RlYWRsb2NrczEsCisJCSJCRUdJTjtcbiIKKwkgIC4gIlNFTEVDVCBwZ19hZHZpc29y eV9sb2NrKCIgLiBERUFETE9DS18xIC4gIik7XG4iCisJICAuICJTRUxFQ1QgcGdfYWR2aXNvcnlf bG9jaygiIC4gV0FJVF9QR0JFTkNIXzIgLiAiKTtcbiIKKwkgIC4gIlNFTEVDVCBwZ19hZHZpc29y eV9sb2NrKCIgLiBERUFETE9DS18yIC4gIik7XG4iCisJICAuICJFTkQ7XG4iCisJICAuICJTRUxF Q1QgcGdfYWR2aXNvcnlfdW5sb2NrX2FsbCgpO1xuIgorCSAgLiAiU0VMRUNUIHBnX2Fkdmlzb3J5 X2xvY2soIiAuIFRSQU5TQUNUSU9OX0VORFNfMSAuICIpO1xuIgorCSAgLiAiU0VMRUNUIHBnX2Fk dmlzb3J5X3VubG9ja19hbGwoKTsiKTsKKworbXkgJHNjcmlwdF9kZWFkbG9ja3MyID0gJG5vZGUt PmJhc2VkaXIgLiAnL3BnYmVuY2hfc2NyaXB0X2RlYWRsb2NrczInOworYXBwZW5kX3RvX2ZpbGUo JHNjcmlwdF9kZWFkbG9ja3MyLAorCQkiQkVHSU47XG4iCisJICAuICJTRUxFQ1QgcGdfYWR2aXNv cnlfbG9jaygiIC4gREVBRExPQ0tfMiAuICIpO1xuIgorCSAgLiAiU0VMRUNUIHBnX2Fkdmlzb3J5 X2xvY2soIiAuIERFQURMT0NLXzEgLiAiKTtcbiIKKwkgIC4gIkVORDtcbiIKKwkgIC4gIlNFTEVD VCBwZ19hZHZpc29yeV91bmxvY2tfYWxsKCk7XG4iCisJICAuICJTRUxFQ1QgcGdfYWR2aXNvcnlf bG9jaygiIC4gVFJBTlNBQ1RJT05fRU5EU18yIC4gIik7XG4iCisJICAuICJTRUxFQ1QgcGdfYWR2 aXNvcnlfdW5sb2NrX2FsbCgpOyIpOworCitteSAkc2NyaXB0X2NvbW1pdF9mYWlsdXJlID0gJG5v ZGUtPmJhc2VkaXIgLiAnL3BnYmVuY2hfc2NyaXB0X2NvbW1pdF9mYWlsdXJlJzsKK2FwcGVuZF90 b19maWxlKCRzY3JpcHRfY29tbWl0X2ZhaWx1cmUsCisJCSJcXHNldCBkZWx0YSByYW5kb20oLTUw MDAsIDUwMDApXG4iCisJICAuICJCRUdJTjtcbiIKKwkgIC4gIlVQREFURSB4eSBTRVQgeSA9IHkg KyA6ZGVsdGEgV0hFUkUgeCA9IDE7XG4iCisJICAuICJTRUxFQ1QgcGdfYWR2aXNvcnlfbG9jaygw KTtcbiIKKwkgIC4gIkVORDtcbiIKKwkgIC4gIlNFTEVDVCBwZ19hZHZpc29yeV91bmxvY2tfYWxs KCk7Iik7CisKK3N1YiB0ZXN0X3BnYmVuY2hfc2VyaWFsaXphdGlvbl9lcnJvcnMKK3sKKwlteSAk aXNvbGF0aW9uX2xldmVsID0gUkVQRUFUQUJMRV9SRUFEOworCW15ICRpc29sYXRpb25fbGV2ZWxf c2hlbGwgPSAkaXNvbGF0aW9uX2xldmVsX3NoZWxsWyRpc29sYXRpb25fbGV2ZWxdOworCisJbG9j YWwgJEVOVntQR1BPUlR9ID0gJG5vZGUtPnBvcnQ7CisJbG9jYWwgJEVOVntQR09QVElPTlN9ID0K KwkJIi1jIGRlZmF1bHRfdHJhbnNhY3Rpb25faXNvbGF0aW9uPSIgLiAkaXNvbGF0aW9uX2xldmVs X3NoZWxsOworCXByaW50ICIjIFBHT1BUSU9OUzogIiAuICRFTlZ7UEdPUFRJT05TfSAuICJcbiI7 CisKKwlteSAoJGhfcHNxbCwgJGluX3BzcWwsICRvdXRfcHNxbCk7CisJbXkgKCRoX3BnYmVuY2gs ICRpbl9wZ2JlbmNoLCAkb3V0X3BnYmVuY2gsICRlcnJfcGdiZW5jaCk7CisKKwkjIE9wZW4gYSBw c3FsIHNlc3Npb24sIHJ1biBhIHBhcmFsbGVsIHRyYW5zYWN0aW9uIGFuZCBhcXVpcmUgYW4gYWR2 aXNvcnkKKwkjIGxvY2s6CisJcHJpbnQgIiMgU3RhcnRpbmcgcHNxbFxuIjsKKwkkaF9wc3FsID0g SVBDOjpSdW46OnN0YXJ0IFsgJ3BzcWwnIF0sIFwkaW5fcHNxbCwgXCRvdXRfcHNxbDsKKworCSRp bl9wc3FsID0gImJlZ2luO1xuIjsKKwlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2lu KCIgIiwgJGluX3BzcWwpOworCSRoX3BzcWwtPnB1bXAoKSB1bnRpbCAkb3V0X3BzcWwgPX4gL0JF R0lOLzsKKworCSRpbl9wc3FsID0KKwkJInVwZGF0ZSB4eSBzZXQgeSA9IHkgKyAxICIKKwkgIC4g IndoZXJlIHggPSAxIGFuZCBwZ19hZHZpc29yeV9sb2NrKDApIGlzIG5vdCBudWxsO1xuIjsKKwlw cmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCSRoX3Bz cWwtPnB1bXAoKSB1bnRpbCAkb3V0X3BzcWwgPX4gL1VQREFURSAxLzsKKworCSMgU3RhcnQgcGdi ZW5jaDoKKwlteSBAY29tbWFuZCA9ICgKKwkJcXcocGdiZW5jaCAtLW5vLXZhY3V1bSAtLXRyYW5z YWN0aW9ucyAxIC0tZGVidWcgZmFpbHMgLS1maWxlKSwKKwkJJHNjcmlwdF9zZXJpYWxpemF0aW9u KTsKKwlwcmludCAiIyBSdW5uaW5nOiAiIC4gam9pbigiICIsIEBjb21tYW5kKSAuICJcbiI7CisJ JGhfcGdiZW5jaCA9IElQQzo6UnVuOjpzdGFydCBcQGNvbW1hbmQsIFwkaW5fcGdiZW5jaCwgXCRv dXRfcGdiZW5jaCwKKwkgIFwkZXJyX3BnYmVuY2g7CisKKwkjIFdhaXQgdW50aWwgcGdiZW5jaCBh bHNvIHRyaWVzIHRvIGFjcXVpcmUgdGhlIHNhbWUgYWR2aXNvcnkgbG9jazoKKwlkbworCXsKKwkJ JGluX3BzcWwgPQorCQkJInNlbGVjdCAqIGZyb20gcGdfbG9ja3Mgd2hlcmUgIgorCQkgIC4gImxv Y2t0eXBlID0gJ2Fkdmlzb3J5JyBhbmQgIgorCQkgIC4gIm9ianN1YmlkID0gMSBhbmQgIgorCQkg IC4gIigoY2xhc3NpZDo6YmlnaW50IDw8IDMyKSB8IG9iamlkOjpiaWdpbnQgPSAwOjpiaWdpbnQp IGFuZCAiCisJCSAgLiAibm90IGdyYW50ZWQ7XG4iOworCQlwcmludCAiIyBSdW5uaW5nIGluIHBz cWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCQkkaF9wc3FsLT5wdW1wKCkgd2hpbGUgbGVu Z3RoICRpbl9wc3FsOworCX0gd2hpbGUgKCRvdXRfcHNxbCAhfiAvMSByb3cvKTsKKworCSMgSW4g cHNxbCwgY29tbWl0IHRoZSB0cmFuc2FjdGlvbiwgcmVsZWFzZSBhZHZpc29yeSBsb2NrcyBhbmQg ZW5kIHRoZQorCSMgc2Vzc2lvbjoKKwkkaW5fcHNxbCA9ICJlbmQ7XG4iOworCXByaW50ICIjIFJ1 bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAkaW5fcHNxbCk7CisJJGhfcHNxbC0+cHVtcCgp IHVudGlsICRvdXRfcHNxbCA9fiAvQ09NTUlULzsKKworCSRpbl9wc3FsID0gInNlbGVjdCBwZ19h ZHZpc29yeV91bmxvY2tfYWxsKCk7XG4iOworCXByaW50ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAu IGpvaW4oIiAiLCAkaW5fcHNxbCk7CisJJGhfcHNxbC0+cHVtcCgpIHVudGlsICRvdXRfcHNxbCA9 fiAvcGdfYWR2aXNvcnlfdW5sb2NrX2FsbC87CisKKwkkaW5fcHNxbCA9ICJcXHFcbiI7CisJcHJp bnQgIiMgUnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkkaF9wc3Fs LT5wdW1wKCkgd2hpbGUgbGVuZ3RoICRpbl9wc3FsOworCisJJGhfcHNxbC0+ZmluaXNoKCk7CisK KwkjIEdldCBwZ2JlbmNoIHJlc3VsdHMKKwkkaF9wZ2JlbmNoLT5wdW1wKCkgdW50aWwgbGVuZ3Ro ICRvdXRfcGdiZW5jaDsKKwkkaF9wZ2JlbmNoLT5maW5pc2goKTsKKworCSMgT24gV2luZG93cywg dGhlIGV4aXQgc3RhdHVzIG9mIHRoZSBwcm9jZXNzIGlzIHJldHVybmVkIGRpcmVjdGx5IGFzIHRo ZQorCSMgcHJvY2VzcydzIGV4aXQgY29kZSwgd2hpbGUgb24gVW5peCwgaXQncyByZXR1cm5lZCBp biB0aGUgaGlnaCBiaXRzCisJIyBvZiB0aGUgZXhpdCBjb2RlIChzZWUgV0VYSVRTVEFUVVMgbWFj cm8gaW4gdGhlIHN0YW5kYXJkIDxzeXMvd2FpdC5oPgorCSMgaGVhZGVyIGZpbGUpLiBJUEM6OlJ1 bidzIHJlc3VsdCBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBleGl0IGNvZGUgPj4gOCwKKwkjIGFz c3VtaW5nIHRoZSBVbml4IGNvbnZlbnRpb24sIHdoaWNoIHdpbGwgYWx3YXlzIHJldHVybiAwIG9u IFdpbmRvd3MgYXMKKwkjIGxvbmcgYXMgdGhlIHByb2Nlc3Mgd2FzIG5vdCB0ZXJtaW5hdGVkIGJ5 IGFuIGV4Y2VwdGlvbi4gVG8gd29yayBhcm91bmQKKwkjIHRoYXQsIHVzZSAkaC0+ZnVsbF9yZXN1 bHQgb24gV2luZG93cyBpbnN0ZWFkLgorCW15ICRyZXN1bHQgPQorCSAgICAoJENvbmZpZ3tvc25h bWV9IGVxICJNU1dpbjMyIikKKwkgID8gKCRoX3BnYmVuY2gtPmZ1bGxfcmVzdWx0cylbMF0KKwkg IDogJGhfcGdiZW5jaC0+cmVzdWx0KDApOworCisJIyBDaGVjayBwZ2JlbmNoIHJlc3VsdHMKKwlv ayghJHJlc3VsdCwgIkBjb21tYW5kIGV4aXQgY29kZSAwIik7CisKKwlsaWtlKCRvdXRfcGdiZW5j aCwKKwkJcXJ7cHJvY2Vzc2VkOiAwLzF9LAorCQkiY29uY3VycmVudCB1cGRhdGU6IGNoZWNrIHBy b2Nlc3NlZCB0cmFuc2FjdGlvbnMiKTsKKworCW15ICRwYXR0ZXJuID0KKwkJImNsaWVudCAwIGdv dCBhbiBlcnJvciBpbiBjb21tYW5kIDIgXFwoU1FMXFwpIG9mIHNjcmlwdCAwOyAiCisJICAuICJF UlJPUjogIGNvdWxkIG5vdCBzZXJpYWxpemUgYWNjZXNzIGR1ZSB0byBjb25jdXJyZW50IHVwZGF0 ZSI7CisKKwlsaWtlKCRlcnJfcGdiZW5jaCwKKwkJcXJ7JHBhdHRlcm59LAorCQkiY29uY3VycmVu dCB1cGRhdGU6IGNoZWNrIHNlcmlhbGl6YXRpb24gZXJyb3IiKTsKK30KKworc3ViIHRlc3RfcGdi ZW5jaF9zZXJpYWxpemF0aW9uX2ZhaWx1cmVzCit7CisJbXkgJGlzb2xhdGlvbl9sZXZlbCA9IFJF UEVBVEFCTEVfUkVBRDsKKwlteSAkaXNvbGF0aW9uX2xldmVsX3NoZWxsID0gJGlzb2xhdGlvbl9s ZXZlbF9zaGVsbFskaXNvbGF0aW9uX2xldmVsXTsKKworCWxvY2FsICRFTlZ7UEdQT1JUfSA9ICRu b2RlLT5wb3J0OworCWxvY2FsICRFTlZ7UEdPUFRJT05TfSA9CisJCSItYyBkZWZhdWx0X3RyYW5z YWN0aW9uX2lzb2xhdGlvbj0iIC4gJGlzb2xhdGlvbl9sZXZlbF9zaGVsbDsKKwlwcmludCAiIyBQ R09QVElPTlM6ICIgLiAkRU5We1BHT1BUSU9OU30gLiAiXG4iOworCisJbXkgKCRoX3BzcWwsICRp bl9wc3FsLCAkb3V0X3BzcWwpOworCW15ICgkaF9wZ2JlbmNoLCAkaW5fcGdiZW5jaCwgJG91dF9w Z2JlbmNoLCAkZXJyX3BnYmVuY2gpOworCisJIyBPcGVuIGEgcHNxbCBzZXNzaW9uLCBydW4gYSBw YXJhbGxlbCB0cmFuc2FjdGlvbiBhbmQgYXF1aXJlIGFuIGFkdmlzb3J5CisJIyBsb2NrOgorCXBy aW50ICIjIFN0YXJ0aW5nIHBzcWxcbiI7CisJJGhfcHNxbCA9IElQQzo6UnVuOjpzdGFydCBbICdw c3FsJyBdLCBcJGluX3BzcWwsIFwkb3V0X3BzcWw7CisKKwkkaW5fcHNxbCA9ICJiZWdpbjtcbiI7 CisJcHJpbnQgIiMgUnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkk aF9wc3FsLT5wdW1wKCkgdW50aWwgJG91dF9wc3FsID1+IC9CRUdJTi87CisKKwkkaW5fcHNxbCA9 CisJCSJ1cGRhdGUgeHkgc2V0IHkgPSB5ICsgMSAiCisJICAuICJ3aGVyZSB4ID0gMSBhbmQgcGdf YWR2aXNvcnlfbG9jaygwKSBpcyBub3QgbnVsbDtcbiI7CisJcHJpbnQgIiMgUnVubmluZyBpbiBw c3FsOiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkkaF9wc3FsLT5wdW1wKCkgdW50aWwgJG91 dF9wc3FsID1+IC9VUERBVEUgMS87CisKKwkjIFN0YXJ0IHBnYmVuY2g6CisJbXkgQGNvbW1hbmQg PSAoCisJCXF3KHBnYmVuY2ggLS1uby12YWN1dW0gLS10cmFuc2FjdGlvbnMgMSAtLWRlYnVnIGFs bCAtLW1heC10cmllcyAyKSwKKwkJIi0tZmlsZSIsCisJCSRzY3JpcHRfc2VyaWFsaXphdGlvbik7 CisJcHJpbnQgIiMgUnVubmluZzogIiAuIGpvaW4oIiAiLCBAY29tbWFuZCkgLiAiXG4iOworCSRo X3BnYmVuY2ggPSBJUEM6OlJ1bjo6c3RhcnQgXEBjb21tYW5kLCBcJGluX3BnYmVuY2gsIFwkb3V0 X3BnYmVuY2gsCisJICBcJGVycl9wZ2JlbmNoOworCisJIyBXYWl0IHVudGlsIHBnYmVuY2ggYWxz byB0cmllcyB0byBhY3F1aXJlIHRoZSBzYW1lIGFkdmlzb3J5IGxvY2s6CisJZG8KKwl7CisJCSRp bl9wc3FsID0KKwkJCSJzZWxlY3QgKiBmcm9tIHBnX2xvY2tzIHdoZXJlICIKKwkJICAuICJsb2Nr dHlwZSA9ICdhZHZpc29yeScgYW5kICIKKwkJICAuICJvYmpzdWJpZCA9IDEgYW5kICIKKwkJICAu ICIoKGNsYXNzaWQ6OmJpZ2ludCA8PCAzMikgfCBvYmppZDo6YmlnaW50ID0gMDo6YmlnaW50KSBh bmQgIgorCQkgIC4gIm5vdCBncmFudGVkO1xuIjsKKwkJcHJpbnQgIiMgUnVubmluZyBpbiBwc3Fs OiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkJJGhfcHNxbC0+cHVtcCgpIHdoaWxlIGxlbmd0 aCAkaW5fcHNxbDsKKwl9IHdoaWxlICgkb3V0X3BzcWwgIX4gLzEgcm93Lyk7CisKKwkjIEluIHBz cWwsIGNvbW1pdCB0aGUgdHJhbnNhY3Rpb24sIHJlbGVhc2UgYWR2aXNvcnkgbG9ja3MgYW5kIGVu ZCB0aGUKKwkjIHNlc3Npb246CisJJGluX3BzcWwgPSAiZW5kO1xuIjsKKwlwcmludCAiIyBSdW5u aW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCSRoX3BzcWwtPnB1bXAoKSB1 bnRpbCAkb3V0X3BzcWwgPX4gL0NPTU1JVC87CisKKwkkaW5fcHNxbCA9ICJzZWxlY3QgcGdfYWR2 aXNvcnlfdW5sb2NrX2FsbCgpO1xuIjsKKwlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBq b2luKCIgIiwgJGluX3BzcWwpOworCSRoX3BzcWwtPnB1bXAoKSB1bnRpbCAkb3V0X3BzcWwgPX4g L3BnX2Fkdmlzb3J5X3VubG9ja19hbGwvOworCisJJGluX3BzcWwgPSAiXFxxXG4iOworCXByaW50 ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAkaW5fcHNxbCk7CisJJGhfcHNxbC0+ cHVtcCgpIHdoaWxlIGxlbmd0aCAkaW5fcHNxbDsKKworCSRoX3BzcWwtPmZpbmlzaCgpOworCisJ IyBHZXQgcGdiZW5jaCByZXN1bHRzCisJJGhfcGdiZW5jaC0+cHVtcCgpIHVudGlsIGxlbmd0aCAk b3V0X3BnYmVuY2g7CisJJGhfcGdiZW5jaC0+ZmluaXNoKCk7CisKKwkjIE9uIFdpbmRvd3MsIHRo ZSBleGl0IHN0YXR1cyBvZiB0aGUgcHJvY2VzcyBpcyByZXR1cm5lZCBkaXJlY3RseSBhcyB0aGUK KwkjIHByb2Nlc3MncyBleGl0IGNvZGUsIHdoaWxlIG9uIFVuaXgsIGl0J3MgcmV0dXJuZWQgaW4g dGhlIGhpZ2ggYml0cworCSMgb2YgdGhlIGV4aXQgY29kZSAoc2VlIFdFWElUU1RBVFVTIG1hY3Jv IGluIHRoZSBzdGFuZGFyZCA8c3lzL3dhaXQuaD4KKwkjIGhlYWRlciBmaWxlKS4gSVBDOjpSdW4n cyByZXN1bHQgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgZXhpdCBjb2RlID4+IDgsCisJIyBhc3N1 bWluZyB0aGUgVW5peCBjb252ZW50aW9uLCB3aGljaCB3aWxsIGFsd2F5cyByZXR1cm4gMCBvbiBX aW5kb3dzIGFzCisJIyBsb25nIGFzIHRoZSBwcm9jZXNzIHdhcyBub3QgdGVybWluYXRlZCBieSBh biBleGNlcHRpb24uIFRvIHdvcmsgYXJvdW5kCisJIyB0aGF0LCB1c2UgJGgtPmZ1bGxfcmVzdWx0 IG9uIFdpbmRvd3MgaW5zdGVhZC4KKwlteSAkcmVzdWx0ID0KKwkgICAgKCRDb25maWd7b3NuYW1l fSBlcSAiTVNXaW4zMiIpCisJICA/ICgkaF9wZ2JlbmNoLT5mdWxsX3Jlc3VsdHMpWzBdCisJICA6 ICRoX3BnYmVuY2gtPnJlc3VsdCgwKTsKKworCSMgQ2hlY2sgcGdiZW5jaCByZXN1bHRzCisJb2so ISRyZXN1bHQsICJAY29tbWFuZCBleGl0IGNvZGUgMCIpOworCisJbGlrZSgkb3V0X3BnYmVuY2gs CisJCXFye3Byb2Nlc3NlZDogMS8xfSwKKwkJImNvbmN1cnJlbnQgdXBkYXRlIHdpdGggcmV0cnlp bmc6IGNoZWNrIHByb2Nlc3NlZCB0cmFuc2FjdGlvbnMiKTsKKworCWxpa2UoJG91dF9wZ2JlbmNo LAorCQlxcnteKCg/IW51bWJlciBvZiBlcnJvcnMpKC58XG4pKSokfSwKKwkJImNvbmN1cnJlbnQg dXBkYXRlIHdpdGggcmV0cnlpbmc6IGNoZWNrIGVycm9ycyIpOworCisJbXkgJHBhdHRlcm4gPQor CQkiY2xpZW50IDAgc2VuZGluZyBCRUdJTjtcbiIKKwkgIC4gIihjbGllbnQgMCByZWNlaXZpbmdc bikrIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBVUERBVEUgeHkgU0VUIHkgPSB5IFxcKyAoLT9c XGQrKSAiCisJICAuICJXSEVSRSB4ID0gMSBBTkQgcGdfYWR2aXNvcnlfbG9ja1xcKDBcXCkgSVMg Tk9UIE5VTEw7XG4iCisJICAuICJcXGcxKyIKKwkgIC4gImNsaWVudCAwIGdvdCBhIGZhaWx1cmUg XFwodHJ5IDEvMlxcKSBpbiBjb21tYW5kIDIgXFwoU1FMXFwpIG9mIHNjcmlwdCAwOyAiCisJICAu ICJFUlJPUjogIGNvdWxkIG5vdCBzZXJpYWxpemUgYWNjZXNzIGR1ZSB0byBjb25jdXJyZW50IHVw ZGF0ZVxuXG4iCisJICAuICJjbGllbnQgMCBzZW5kaW5nIFNFTEVDVCBwZ19hZHZpc29yeV91bmxv Y2tfYWxsXFwoXFwpO1xuIgorCSAgLiAiXFxnMSsiCisJICAuICJjbGllbnQgMCBjb250aW51ZXMg YSBmYWlsZWQgdHJhbnNhY3Rpb24gaW4gY29tbWFuZCAzIFxcKFNRTFxcKSBvZiBzY3JpcHQgMDsg IgorCSAgLiAiRVJST1I6ICBjdXJyZW50IHRyYW5zYWN0aW9uIGlzIGFib3J0ZWQsIGNvbW1hbmRz IGlnbm9yZWQgdW50aWwgZW5kIG9mIHRyYW5zYWN0aW9uIGJsb2NrXG5cbiIKKwkgIC4gImNsaWVu dCAwIHNlbmRpbmcgRU5EO1xuIgorCSAgLiAiXFxnMSsiCisJICAuICJjbGllbnQgMCByZXBlYXRz IHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gXFwodHJ5IDIvMlxcKVxuIgorCSAgLiAiY2xpZW50IDAg ZXhlY3V0aW5nIFxcXFxzZXQgZGVsdGFcbiIKKwkgIC4gImNsaWVudCAwIHNlbmRpbmcgQkVHSU47 XG4iCisJICAuICJcXGcxKyIKKwkgIC4gImNsaWVudCAwIHNlbmRpbmcgVVBEQVRFIHh5IFNFVCB5 ID0geSBcXCsgXFxnMiAiCisJICAuICJXSEVSRSB4ID0gMSBBTkQgcGdfYWR2aXNvcnlfbG9ja1xc KDBcXCkgSVMgTk9UIE5VTEw7IjsKKworCWxpa2UoJGVycl9wZ2JlbmNoLAorCQlxcnskcGF0dGVy bn0sCisJCSJjb25jdXJyZW50IHVwZGF0ZSB3aXRoIHJldHJ5aW5nOiBjaGVjayB0aGUgcmV0cmll ZCB0cmFuc2FjdGlvbiIpOworfQorCitzdWIgdGVzdF9wZ2JlbmNoX2RlYWRsb2NrX2Vycm9ycwor eworCW15ICRpc29sYXRpb25fbGV2ZWwgPSBSRUFEX0NPTU1JVFRFRDsKKwlteSAkaXNvbGF0aW9u X2xldmVsX3NoZWxsID0gJGlzb2xhdGlvbl9sZXZlbF9zaGVsbFskaXNvbGF0aW9uX2xldmVsXTsK KworCWxvY2FsICRFTlZ7UEdQT1JUfSA9ICRub2RlLT5wb3J0OworCWxvY2FsICRFTlZ7UEdPUFRJ T05TfSA9CisJCSItYyBkZWZhdWx0X3RyYW5zYWN0aW9uX2lzb2xhdGlvbj0iIC4gJGlzb2xhdGlv bl9sZXZlbF9zaGVsbDsKKwlwcmludCAiIyBQR09QVElPTlM6ICIgLiAkRU5We1BHT1BUSU9OU30g LiAiXG4iOworCisJbXkgKCRoX3BzcWwsICRpbl9wc3FsLCAkb3V0X3BzcWwpOworCW15ICgkaDEs ICRpbjEsICRvdXQxLCAkZXJyMSk7CisJbXkgKCRoMiwgJGluMiwgJG91dDIsICRlcnIyKTsKKwor CSMgT3BlbiBhIHBzcWwgc2Vzc2lvbiBhbmQgYXF1aXJlIGFuIGFkdmlzb3J5IGxvY2s6CisJcHJp bnQgIiMgU3RhcnRpbmcgcHNxbFxuIjsKKwkkaF9wc3FsID0gSVBDOjpSdW46OnN0YXJ0IFsgJ3Bz cWwnIF0sIFwkaW5fcHNxbCwgXCRvdXRfcHNxbDsKKworCSRpbl9wc3FsID0KKwkJInNlbGVjdCBw Z19hZHZpc29yeV9sb2NrKCIgLiBXQUlUX1BHQkVOQ0hfMiAuICIpICIKKwkgIC4gImFzIHBnX2Fk dmlzb3J5X2xvY2tfIiAuIFdBSVRfUEdCRU5DSF8yIC4gIjtcbiI7CisJcHJpbnQgIiMgUnVubmlu ZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkkaF9wc3FsLT5wdW1wKCkgdW50 aWwgJG91dF9wc3FsID1+IC9wZ19hZHZpc29yeV9sb2NrX0B7WyBXQUlUX1BHQkVOQ0hfMiBdfS87 CisKKwkjIFJ1biB0aGUgZmlyc3QgcGdiZW5jaDoKKwlteSBAY29tbWFuZDEgPSAoCisJCXF3KHBn YmVuY2ggLS1uby12YWN1dW0gLS10cmFuc2FjdGlvbnMgMSAtLWRlYnVnIGFsbCAtLWZpbGUpLAor CQkkc2NyaXB0X2RlYWRsb2NrczEpOworCXByaW50ICIjIFJ1bm5pbmc6ICIgLiBqb2luKCIgIiwg QGNvbW1hbmQxKSAuICJcbiI7CisJJGgxID0gSVBDOjpSdW46OnN0YXJ0IFxAY29tbWFuZDEsIFwk aW4xLCBcJG91dDEsIFwkZXJyMTsKKworCSMgV2FpdCB1bnRpbCB0aGUgZmlyc3QgcGdiZW5jaCBh bHNvIHRyaWVzIHRvIGFjcXVpcmUgdGhlIHNhbWUgYWR2aXNvcnkgbG9jazoKKwlkbworCXsKKwkJ JGluX3BzcWwgPQorCQkJInNlbGVjdCBjYXNlIGNvdW50KCopICIKKwkJICAuICJ3aGVuIDAgdGhl biAnIiAuIFdBSVRfUEdCRU5DSF8yIC4gIl96ZXJvJyAiCisJCSAgLiAiZWxzZSAnIiAuIFdBSVRf UEdCRU5DSF8yIC4gIl9ub3RfemVybycgZW5kICIKKwkJICAuICJmcm9tIHBnX2xvY2tzIHdoZXJl ICIKKwkJICAuICJsb2NrdHlwZSA9ICdhZHZpc29yeScgYW5kICIKKwkJICAuICJvYmpzdWJpZCA9 IDEgYW5kICIKKwkJICAuICIoKGNsYXNzaWQ6OmJpZ2ludCA8PCAzMikgfCBvYmppZDo6YmlnaW50 ID0gIgorCQkgIC4gV0FJVF9QR0JFTkNIXzIKKwkJICAuICI6OmJpZ2ludCkgYW5kICIKKwkJICAu ICJub3QgZ3JhbnRlZDtcbiI7CisJCXByaW50ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4o IiAiLCAkaW5fcHNxbCk7CisJCSRoX3BzcWwtPnB1bXAoKSB3aGlsZSBsZW5ndGggJGluX3BzcWw7 CisJfSB3aGlsZSAoJG91dF9wc3FsICF+IC9Ae1sgV0FJVF9QR0JFTkNIXzIgXX1fbm90X3plcm8v KTsKKworCSMgUnVuIHRoZSBzZWNvbmQgcGdiZW5jaDoKKwlteSBAY29tbWFuZDIgPSAoCisJCXF3 KHBnYmVuY2ggLS1uby12YWN1dW0gLS10cmFuc2FjdGlvbnMgMSAtLWRlYnVnIGFsbCAtLWZpbGUp LAorCQkkc2NyaXB0X2RlYWRsb2NrczIpOworCXByaW50ICIjIFJ1bm5pbmc6ICIgLiBqb2luKCIg IiwgQGNvbW1hbmQyKSAuICJcbiI7CisJJGgyID0gSVBDOjpSdW46OnN0YXJ0IFxAY29tbWFuZDIs IFwkaW4yLCBcJG91dDIsIFwkZXJyMjsKKworCSMgV2FpdCB1bnRpbCB0aGUgc2Vjb25kIHBnYmVu Y2ggdHJpZXMgdG8gYWNxdWlyZSB0aGUgbG9jayBoZWxkIGJ5IHRoZSBmaXJzdAorCSMgcGdiZW5j aDoKKwlkbworCXsKKwkJJGluX3BzcWwgPQorCQkJInNlbGVjdCBjYXNlIGNvdW50KCopICIKKwkJ ICAuICJ3aGVuIDAgdGhlbiAnIiAuIERFQURMT0NLXzEgLiAiX3plcm8nICIKKwkJICAuICJlbHNl ICciIC4gREVBRExPQ0tfMSAuICJfbm90X3plcm8nIGVuZCAiCisJCSAgLiAiZnJvbSBwZ19sb2Nr cyB3aGVyZSAiCisJCSAgLiAibG9ja3R5cGUgPSAnYWR2aXNvcnknIGFuZCAiCisJCSAgLiAib2Jq c3ViaWQgPSAxIGFuZCAiCisJCSAgLiAiKChjbGFzc2lkOjpiaWdpbnQgPDwgMzIpIHwgb2JqaWQ6 OmJpZ2ludCA9ICIKKwkJICAuIERFQURMT0NLXzEKKwkJICAuICI6OmJpZ2ludCkgYW5kICIKKwkJ ICAuICJub3QgZ3JhbnRlZDtcbiI7CisJCXByaW50ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpv aW4oIiAiLCAkaW5fcHNxbCk7CisJCSRoX3BzcWwtPnB1bXAoKSB3aGlsZSBsZW5ndGggJGluX3Bz cWw7CisJfSB3aGlsZSAoJG91dF9wc3FsICF+IC9Ae1sgREVBRExPQ0tfMSBdfV9ub3RfemVyby8p OworCisJIyBJbiB0aGUgcHNxbCBzZXNzaW9uLCByZWxlYXNlIHRoZSBsb2NrIHRoYXQgdGhlIGZp cnN0IHBnYmVuY2ggaXMgd2FpdGluZworCSMgZm9yIGFuZCBlbmQgdGhlIHNlc3Npb246CisJJGlu X3BzcWwgPQorCQkic2VsZWN0IHBnX2Fkdmlzb3J5X3VubG9jaygiIC4gV0FJVF9QR0JFTkNIXzIg LiAiKSAiCisJICAuICJhcyBwZ19hZHZpc29yeV91bmxvY2tfIiAuIFdBSVRfUEdCRU5DSF8yIC4g IjtcbiI7CisJcHJpbnQgIiMgUnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3Fs KTsKKwkkaF9wc3FsLT5wdW1wKCkgdW50aWwgJG91dF9wc3FsID1+IC9wZ19hZHZpc29yeV91bmxv Y2tfQHtbIFdBSVRfUEdCRU5DSF8yIF19LzsKKworCSRpbl9wc3FsID0gIlxccVxuIjsKKwlwcmlu dCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCSRoX3BzcWwt PnB1bXAoKSB3aGlsZSBsZW5ndGggJGluX3BzcWw7CisKKwkkaF9wc3FsLT5maW5pc2goKTsKKwor CSMgR2V0IHJlc3VsdHMgZnJvbSBhbGwgcGdiZW5jaGVzOgorCSRoMS0+cHVtcCgpIHVudGlsIGxl bmd0aCAkb3V0MTsKKwkkaDEtPmZpbmlzaCgpOworCisJJGgyLT5wdW1wKCkgdW50aWwgbGVuZ3Ro ICRvdXQyOworCSRoMi0+ZmluaXNoKCk7CisKKwkjIE9uIFdpbmRvd3MsIHRoZSBleGl0IHN0YXR1 cyBvZiB0aGUgcHJvY2VzcyBpcyByZXR1cm5lZCBkaXJlY3RseSBhcyB0aGUKKwkjIHByb2Nlc3Mn cyBleGl0IGNvZGUsIHdoaWxlIG9uIFVuaXgsIGl0J3MgcmV0dXJuZWQgaW4gdGhlIGhpZ2ggYml0 cworCSMgb2YgdGhlIGV4aXQgY29kZSAoc2VlIFdFWElUU1RBVFVTIG1hY3JvIGluIHRoZSBzdGFu ZGFyZCA8c3lzL3dhaXQuaD4KKwkjIGhlYWRlciBmaWxlKS4gSVBDOjpSdW4ncyByZXN1bHQgZnVu Y3Rpb24gYWx3YXlzIHJldHVybnMgZXhpdCBjb2RlID4+IDgsCisJIyBhc3N1bWluZyB0aGUgVW5p eCBjb252ZW50aW9uLCB3aGljaCB3aWxsIGFsd2F5cyByZXR1cm4gMCBvbiBXaW5kb3dzIGFzCisJ IyBsb25nIGFzIHRoZSBwcm9jZXNzIHdhcyBub3QgdGVybWluYXRlZCBieSBhbiBleGNlcHRpb24u IFRvIHdvcmsgYXJvdW5kCisJIyB0aGF0LCB1c2UgJGgtPmZ1bGxfcmVzdWx0IG9uIFdpbmRvd3Mg aW5zdGVhZC4KKwlteSAkcmVzdWx0MSA9CisJICAgICgkQ29uZmlne29zbmFtZX0gZXEgIk1TV2lu MzIiKQorCSAgPyAoJGgxLT5mdWxsX3Jlc3VsdHMpWzBdCisJICA6ICRoMS0+cmVzdWx0KDApOwor CisJbXkgJHJlc3VsdDIgPQorCSAgICAoJENvbmZpZ3tvc25hbWV9IGVxICJNU1dpbjMyIikKKwkg ID8gKCRoMi0+ZnVsbF9yZXN1bHRzKVswXQorCSAgOiAkaDItPnJlc3VsdCgwKTsKKworCSMgQ2hl Y2sgYWxsIHBnYmVuY2ggcmVzdWx0cworCW9rKCEkcmVzdWx0MSwgIkBjb21tYW5kMSBleGl0IGNv ZGUgMCIpOworCW9rKCEkcmVzdWx0MiwgIkBjb21tYW5kMiBleGl0IGNvZGUgMCIpOworCisJIyBU aGUgZmlyc3Qgb3Igc2Vjb25kIHBnYmVuY2ggc2hvdWxkIGdldCBhIGRlYWRsb2NrIGVycm9yCisJ b2soKCRvdXQxID1+IC9wcm9jZXNzZWQ6IDBcLzEvIG9yICRvdXQyID1+IC9wcm9jZXNzZWQ6IDBc LzEvKSwKKwkJImNvbmN1cnJlbnQgZGVhZGxvY2sgdXBkYXRlOiBjaGVjayBwcm9jZXNzZWQgdHJh bnNhY3Rpb25zIik7CisKKwlvaygKKwkJKCRlcnIxID1+IC9jbGllbnQgMCBnb3QgYW4gZXJyb3Ig aW4gY29tbWFuZCAzIFwoU1FMXCkgb2Ygc2NyaXB0IDA7IEVSUk9SOiAgZGVhZGxvY2sgZGV0ZWN0 ZWQvIG9yCisJICAgICAkZXJyMiA9fiAvY2xpZW50IDAgZ290IGFuIGVycm9yIGluIGNvbW1hbmQg MiBcKFNRTFwpIG9mIHNjcmlwdCAwOyBFUlJPUjogIGRlYWRsb2NrIGRldGVjdGVkLyksCisJCSJj b25jdXJyZW50IGRlYWRsb2NrIHVwZGF0ZTogY2hlY2sgZGVhZGxvY2sgZXJyb3IiKTsKK30KKwor c3ViIHRlc3RfcGdiZW5jaF9kZWFkbG9ja19mYWlsdXJlcworeworCW15ICRpc29sYXRpb25fbGV2 ZWwgPSBSRUFEX0NPTU1JVFRFRDsKKwlteSAkaXNvbGF0aW9uX2xldmVsX3NoZWxsID0gJGlzb2xh dGlvbl9sZXZlbF9zaGVsbFskaXNvbGF0aW9uX2xldmVsXTsKKworCWxvY2FsICRFTlZ7UEdQT1JU fSA9ICRub2RlLT5wb3J0OworCWxvY2FsICRFTlZ7UEdPUFRJT05TfSA9CisJCSItYyBkZWZhdWx0 X3RyYW5zYWN0aW9uX2lzb2xhdGlvbj0iIC4gJGlzb2xhdGlvbl9sZXZlbF9zaGVsbDsKKwlwcmlu dCAiIyBQR09QVElPTlM6ICIgLiAkRU5We1BHT1BUSU9OU30gLiAiXG4iOworCisJbXkgKCRoX3Bz cWwsICRpbl9wc3FsLCAkb3V0X3BzcWwpOworCW15ICgkaDEsICRpbjEsICRvdXQxLCAkZXJyMSk7 CisJbXkgKCRoMiwgJGluMiwgJG91dDIsICRlcnIyKTsKKworCSMgT3BlbiBhIHBzcWwgc2Vzc2lv biBhbmQgYXF1aXJlIGFuIGFkdmlzb3J5IGxvY2s6CisJcHJpbnQgIiMgU3RhcnRpbmcgcHNxbFxu IjsKKwkkaF9wc3FsID0gSVBDOjpSdW46OnN0YXJ0IFsgJ3BzcWwnIF0sIFwkaW5fcHNxbCwgXCRv dXRfcHNxbDsKKworCSRpbl9wc3FsID0KKwkJInNlbGVjdCBwZ19hZHZpc29yeV9sb2NrKCIgLiBX QUlUX1BHQkVOQ0hfMiAuICIpICIKKwkgIC4gImFzIHBnX2Fkdmlzb3J5X2xvY2tfIiAuIFdBSVRf UEdCRU5DSF8yIC4gIjtcbiI7CisJcHJpbnQgIiMgUnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigi ICIsICRpbl9wc3FsKTsKKwkkaF9wc3FsLT5wdW1wKCkgdW50aWwgJG91dF9wc3FsID1+IC9wZ19h ZHZpc29yeV9sb2NrX0B7WyBXQUlUX1BHQkVOQ0hfMiBdfS87CisKKwkjIFJ1biB0aGUgZmlyc3Qg cGdiZW5jaDoKKwlteSBAY29tbWFuZDEgPSAoCisJCXF3KHBnYmVuY2ggLS1uby12YWN1dW0gLS10 cmFuc2FjdGlvbnMgMSAtLWRlYnVnIGFsbCAtLW1heC10cmllcyAyKSwKKwkJIi0tZmlsZSIsCisJ CSRzY3JpcHRfZGVhZGxvY2tzMSk7CisJcHJpbnQgIiMgUnVubmluZzogIiAuIGpvaW4oIiAiLCBA Y29tbWFuZDEpIC4gIlxuIjsKKwkkaDEgPSBJUEM6OlJ1bjo6c3RhcnQgXEBjb21tYW5kMSwgXCRp bjEsIFwkb3V0MSwgXCRlcnIxOworCisJIyBXYWl0IHVudGlsIHRoZSBmaXJzdCBwZ2JlbmNoIGFs c28gdHJpZXMgdG8gYWNxdWlyZSB0aGUgc2FtZSBhZHZpc29yeSBsb2NrOgorCWRvCisJeworCQkk aW5fcHNxbCA9CisJCQkic2VsZWN0IGNhc2UgY291bnQoKikgIgorCQkgIC4gIndoZW4gMCB0aGVu ICciIC4gV0FJVF9QR0JFTkNIXzIgLiAiX3plcm8nICIKKwkJICAuICJlbHNlICciIC4gV0FJVF9Q R0JFTkNIXzIgLiAiX25vdF96ZXJvJyBlbmQgIgorCQkgIC4gImZyb20gcGdfbG9ja3Mgd2hlcmUg IgorCQkgIC4gImxvY2t0eXBlID0gJ2Fkdmlzb3J5JyBhbmQgIgorCQkgIC4gIm9ianN1YmlkID0g MSBhbmQgIgorCQkgIC4gIigoY2xhc3NpZDo6YmlnaW50IDw8IDMyKSB8IG9iamlkOjpiaWdpbnQg PSAiCisJCSAgLiBXQUlUX1BHQkVOQ0hfMgorCQkgIC4gIjo6YmlnaW50KSBhbmQgIgorCQkgIC4g Im5vdCBncmFudGVkO1xuIjsKKwkJcHJpbnQgIiMgUnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigi ICIsICRpbl9wc3FsKTsKKwkJJGhfcHNxbC0+cHVtcCgpIHdoaWxlIGxlbmd0aCAkaW5fcHNxbDsK Kwl9IHdoaWxlICgkb3V0X3BzcWwgIX4gL0B7WyBXQUlUX1BHQkVOQ0hfMiBdfV9ub3RfemVyby8p OworCisJIyBSdW4gdGhlIHNlY29uZCBwZ2JlbmNoOgorCW15IEBjb21tYW5kMiA9ICgKKwkJcXco cGdiZW5jaCAtLW5vLXZhY3V1bSAtLXRyYW5zYWN0aW9ucyAxIC0tZGVidWcgYWxsIC0tbWF4LXRy aWVzIDIpLAorCQkiLS1maWxlIiwKKwkJJHNjcmlwdF9kZWFkbG9ja3MyKTsKKwlwcmludCAiIyBS dW5uaW5nOiAiIC4gam9pbigiICIsIEBjb21tYW5kMikgLiAiXG4iOworCSRoMiA9IElQQzo6UnVu OjpzdGFydCBcQGNvbW1hbmQyLCBcJGluMiwgXCRvdXQyLCBcJGVycjI7CisKKwkjIFdhaXQgdW50 aWwgdGhlIHNlY29uZCBwZ2JlbmNoIHRyaWVzIHRvIGFjcXVpcmUgdGhlIGxvY2sgaGVsZCBieSB0 aGUgZmlyc3QKKwkjIHBnYmVuY2g6CisJZG8KKwl7CisJCSRpbl9wc3FsID0KKwkJCSJzZWxlY3Qg Y2FzZSBjb3VudCgqKSAiCisJCSAgLiAid2hlbiAwIHRoZW4gJyIgLiBERUFETE9DS18xIC4gIl96 ZXJvJyAiCisJCSAgLiAiZWxzZSAnIiAuIERFQURMT0NLXzEgLiAiX25vdF96ZXJvJyBlbmQgIgor CQkgIC4gImZyb20gcGdfbG9ja3Mgd2hlcmUgIgorCQkgIC4gImxvY2t0eXBlID0gJ2Fkdmlzb3J5 JyBhbmQgIgorCQkgIC4gIm9ianN1YmlkID0gMSBhbmQgIgorCQkgIC4gIigoY2xhc3NpZDo6Ymln aW50IDw8IDMyKSB8IG9iamlkOjpiaWdpbnQgPSAiCisJCSAgLiBERUFETE9DS18xCisJCSAgLiAi OjpiaWdpbnQpIGFuZCAiCisJCSAgLiAibm90IGdyYW50ZWQ7XG4iOworCQlwcmludCAiIyBSdW5u aW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCQkkaF9wc3FsLT5wdW1wKCkg d2hpbGUgbGVuZ3RoICRpbl9wc3FsOworCX0gd2hpbGUgKCRvdXRfcHNxbCAhfiAvQHtbIERFQURM T0NLXzEgXX1fbm90X3plcm8vKTsKKworCSMgSW4gdGhlIHBzcWwgc2Vzc2lvbiwgYWNxdWlyZSB0 aGUgbG9ja3MgdGhhdCBwZ2JlbmNoZXMgd2lsbCB3YWl0IGZvcjoKKwkkaW5fcHNxbCA9CisJCSJz ZWxlY3QgcGdfYWR2aXNvcnlfbG9jaygiIC4gVFJBTlNBQ1RJT05fRU5EU18xIC4gIikgIgorCSAg LiAiYXMgcGdfYWR2aXNvcnlfbG9ja18iIC4gVFJBTlNBQ1RJT05fRU5EU18xIC4gIjtcbiI7CisJ cHJpbnQgIiMgUnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkkaF9w c3FsLT5wdW1wKCkgdW50aWwgJG91dF9wc3FsID1+IC9wZ19hZHZpc29yeV9sb2NrX0B7WyBUUkFO U0FDVElPTl9FTkRTXzEgXX0vOworCisJJGluX3BzcWwgPQorCQkic2VsZWN0IHBnX2Fkdmlzb3J5 X2xvY2soIiAuIFRSQU5TQUNUSU9OX0VORFNfMiAuICIpICIKKwkgIC4gImFzIHBnX2Fkdmlzb3J5 X2xvY2tfIiAuIFRSQU5TQUNUSU9OX0VORFNfMiAuICI7XG4iOworCXByaW50ICIjIFJ1bm5pbmcg aW4gcHNxbDogIiAuIGpvaW4oIiAiLCAkaW5fcHNxbCk7CisJJGhfcHNxbC0+cHVtcCgpIHVudGls ICRvdXRfcHNxbCA9fiAvcGdfYWR2aXNvcnlfbG9ja19Ae1sgVFJBTlNBQ1RJT05fRU5EU18yIF19 LzsKKworCSMgSW4gdGhlIHBzcWwgc2Vzc2lvbiwgcmVsZWFzZSB0aGUgbG9jayB0aGF0IHRoZSBm aXJzdCBwZ2JlbmNoIGlzIHdhaXRpbmcKKwkjIGZvcjoKKwkkaW5fcHNxbCA9CisJCSJzZWxlY3Qg cGdfYWR2aXNvcnlfdW5sb2NrKCIgLiBXQUlUX1BHQkVOQ0hfMiAuICIpICIKKwkgIC4gImFzIHBn X2Fkdmlzb3J5X3VubG9ja18iIC4gV0FJVF9QR0JFTkNIXzIgLiAiO1xuIjsKKwlwcmludCAiIyBS dW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCSRoX3BzcWwtPnB1bXAo KSB1bnRpbCAkb3V0X3BzcWwgPX4gL3BnX2Fkdmlzb3J5X3VubG9ja19Ae1sgV0FJVF9QR0JFTkNI XzIgXX0vOworCisJIyBXYWl0IHVudGlsIHBnYmVuY2hlcyB0cnkgdG8gYWNxdWlyZSB0aGUgbG9j a3MgaGVsZCBieSB0aGUgcHNxbCBzZXNzaW9uOgorCWRvCisJeworCQkkaW5fcHNxbCA9CisJCQki c2VsZWN0IGNhc2UgY291bnQoKikgIgorCQkgIC4gIndoZW4gMCB0aGVuICciIC4gVFJBTlNBQ1RJ T05fRU5EU18xIC4gIl96ZXJvJyAiCisJCSAgLiAiZWxzZSAnIiAuIFRSQU5TQUNUSU9OX0VORFNf MSAuICJfbm90X3plcm8nIGVuZCAiCisJCSAgLiAiZnJvbSBwZ19sb2NrcyB3aGVyZSAiCisJCSAg LiAibG9ja3R5cGUgPSAnYWR2aXNvcnknIGFuZCAiCisJCSAgLiAib2Jqc3ViaWQgPSAxIGFuZCAi CisJCSAgLiAiKChjbGFzc2lkOjpiaWdpbnQgPDwgMzIpIHwgb2JqaWQ6OmJpZ2ludCA9ICIKKwkJ ICAuIFRSQU5TQUNUSU9OX0VORFNfMQorCQkgIC4gIjo6YmlnaW50KSBhbmQgIgorCQkgIC4gIm5v dCBncmFudGVkO1xuIjsKKwkJcHJpbnQgIiMgUnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIs ICRpbl9wc3FsKTsKKwkJJGhfcHNxbC0+cHVtcCgpIHdoaWxlIGxlbmd0aCAkaW5fcHNxbDsKKwl9 IHdoaWxlICgkb3V0X3BzcWwgIX4gL0B7WyBUUkFOU0FDVElPTl9FTkRTXzEgXX1fbm90X3plcm8v KTsKKworCWRvCisJeworCQkkaW5fcHNxbCA9CisJCQkic2VsZWN0IGNhc2UgY291bnQoKikgIgor CQkgIC4gIndoZW4gMCB0aGVuICciIC4gVFJBTlNBQ1RJT05fRU5EU18yIC4gIl96ZXJvJyAiCisJ CSAgLiAiZWxzZSAnIiAuIFRSQU5TQUNUSU9OX0VORFNfMiAuICJfbm90X3plcm8nIGVuZCAiCisJ CSAgLiAiZnJvbSBwZ19sb2NrcyB3aGVyZSAiCisJCSAgLiAibG9ja3R5cGUgPSAnYWR2aXNvcnkn IGFuZCAiCisJCSAgLiAib2Jqc3ViaWQgPSAxIGFuZCAiCisJCSAgLiAiKChjbGFzc2lkOjpiaWdp bnQgPDwgMzIpIHwgb2JqaWQ6OmJpZ2ludCA9ICIKKwkJICAuIFRSQU5TQUNUSU9OX0VORFNfMgor CQkgIC4gIjo6YmlnaW50KSBhbmQgIgorCQkgIC4gIm5vdCBncmFudGVkO1xuIjsKKwkJcHJpbnQg IiMgUnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkJJGhfcHNxbC0+ cHVtcCgpIHdoaWxlIGxlbmd0aCAkaW5fcHNxbDsKKwl9IHdoaWxlICgkb3V0X3BzcWwgIX4gL0B7 WyBUUkFOU0FDVElPTl9FTkRTXzIgXX1fbm90X3plcm8vKTsKKworCSMgSW4gdGhlIHBzcWwgc2Vz c2lvbiwgcmVsZWFzZSBhZHZpc29yeSBsb2NrcyBhbmQgZW5kIHRoZSBzZXNzaW9uOgorCSRpbl9w c3FsID0gInNlbGVjdCBwZ19hZHZpc29yeV91bmxvY2tfYWxsKCkgYXMgcGdfYWR2aXNvcnlfdW5s b2NrX2FsbDtcbiI7CisJcHJpbnQgIiMgUnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRp bl9wc3FsKTsKKwkkaF9wc3FsLT5wdW1wKCkgdW50aWwgJG91dF9wc3FsID1+IC9wZ19hZHZpc29y eV91bmxvY2tfYWxsLzsKKworCSRpbl9wc3FsID0gIlxccVxuIjsKKwlwcmludCAiIyBSdW5uaW5n IGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCSRoX3BzcWwtPnB1bXAoKSB3aGls ZSBsZW5ndGggJGluX3BzcWw7CisKKwkkaF9wc3FsLT5maW5pc2goKTsKKworCSMgR2V0IHJlc3Vs dHMgZnJvbSBhbGwgcGdiZW5jaGVzOgorCSRoMS0+cHVtcCgpIHVudGlsIGxlbmd0aCAkb3V0MTsK KwkkaDEtPmZpbmlzaCgpOworCisJJGgyLT5wdW1wKCkgdW50aWwgbGVuZ3RoICRvdXQyOworCSRo Mi0+ZmluaXNoKCk7CisKKwkjIE9uIFdpbmRvd3MsIHRoZSBleGl0IHN0YXR1cyBvZiB0aGUgcHJv Y2VzcyBpcyByZXR1cm5lZCBkaXJlY3RseSBhcyB0aGUKKwkjIHByb2Nlc3MncyBleGl0IGNvZGUs IHdoaWxlIG9uIFVuaXgsIGl0J3MgcmV0dXJuZWQgaW4gdGhlIGhpZ2ggYml0cworCSMgb2YgdGhl IGV4aXQgY29kZSAoc2VlIFdFWElUU1RBVFVTIG1hY3JvIGluIHRoZSBzdGFuZGFyZCA8c3lzL3dh aXQuaD4KKwkjIGhlYWRlciBmaWxlKS4gSVBDOjpSdW4ncyByZXN1bHQgZnVuY3Rpb24gYWx3YXlz IHJldHVybnMgZXhpdCBjb2RlID4+IDgsCisJIyBhc3N1bWluZyB0aGUgVW5peCBjb252ZW50aW9u LCB3aGljaCB3aWxsIGFsd2F5cyByZXR1cm4gMCBvbiBXaW5kb3dzIGFzCisJIyBsb25nIGFzIHRo ZSBwcm9jZXNzIHdhcyBub3QgdGVybWluYXRlZCBieSBhbiBleGNlcHRpb24uIFRvIHdvcmsgYXJv dW5kCisJIyB0aGF0LCB1c2UgJGgtPmZ1bGxfcmVzdWx0IG9uIFdpbmRvd3MgaW5zdGVhZC4KKwlt eSAkcmVzdWx0MSA9CisJICAgICgkQ29uZmlne29zbmFtZX0gZXEgIk1TV2luMzIiKQorCSAgPyAo JGgxLT5mdWxsX3Jlc3VsdHMpWzBdCisJICA6ICRoMS0+cmVzdWx0KDApOworCisJbXkgJHJlc3Vs dDIgPQorCSAgICAoJENvbmZpZ3tvc25hbWV9IGVxICJNU1dpbjMyIikKKwkgID8gKCRoMi0+ZnVs bF9yZXN1bHRzKVswXQorCSAgOiAkaDItPnJlc3VsdCgwKTsKKworCSMgQ2hlY2sgYWxsIHBnYmVu Y2ggcmVzdWx0cworCW9rKCEkcmVzdWx0MSwgIkBjb21tYW5kMSBleGl0IGNvZGUgMCIpOworCW9r KCEkcmVzdWx0MiwgIkBjb21tYW5kMiBleGl0IGNvZGUgMCIpOworCisJbGlrZSgkb3V0MSwKKwkJ cXJ7cHJvY2Vzc2VkOiAxLzF9LAorCQkiY29uY3VycmVudCBkZWFkbG9jayB1cGRhdGUgd2l0aCBy ZXRyeWluZzogcGdiZW5jaCAxOiAiCisJICAuICJjaGVjayBwcm9jZXNzZWQgdHJhbnNhY3Rpb25z Iik7CisJbGlrZSgkb3V0MiwKKwkJcXJ7cHJvY2Vzc2VkOiAxLzF9LAorCQkiY29uY3VycmVudCBk ZWFkbG9jayB1cGRhdGUgd2l0aCByZXRyeWluZzogcGdiZW5jaCAyOiAiCisJICAuICJjaGVjayBw cm9jZXNzZWQgdHJhbnNhY3Rpb25zIik7CisKKwkjIFRoZSBmaXJzdCBvciBzZWNvbmQgcGdiZW5j aCBzaG91bGQgZ2V0IGEgZGVhZGxvY2sgZXJyb3Igd2hpY2ggd2FzIHJldHJpZWQ6CisJbGlrZSgk b3V0MSAuICRvdXQyLAorCQlxcnteKCg/IW51bWJlciBvZiBlcnJvcnMpKC58XG4pKSokfSwKKwkJ ImNvbmN1cnJlbnQgZGVhZGxvY2sgdXBkYXRlIHdpdGggcmV0cnlpbmc6IGNoZWNrIGVycm9ycyIp OworCisJbXkgJHBhdHRlcm4xID0KKwkJImNsaWVudCAwIHNlbmRpbmcgQkVHSU47XG4iCisJICAu ICIoY2xpZW50IDAgcmVjZWl2aW5nXG4pKyIKKwkgIC4gImNsaWVudCAwIHNlbmRpbmcgU0VMRUNU IHBnX2Fkdmlzb3J5X2xvY2tcXCgiIC4gREVBRExPQ0tfMSAuICJcXCk7XG4iCisJICAuICJcXGcx KyIKKwkgIC4gImNsaWVudCAwIHNlbmRpbmcgU0VMRUNUIHBnX2Fkdmlzb3J5X2xvY2tcXCgiIC4g V0FJVF9QR0JFTkNIXzIgLiAiXFwpO1xuIgorCSAgLiAiXFxnMSsiCisJICAuICJjbGllbnQgMCBz ZW5kaW5nIFNFTEVDVCBwZ19hZHZpc29yeV9sb2NrXFwoIiAuIERFQURMT0NLXzIgLiAiXFwpO1xu IgorCSAgLiAiXFxnMSsiCisJICAuICJjbGllbnQgMCBnb3QgYSBmYWlsdXJlIFxcKHRyeSAxLzJc XCkgaW4gY29tbWFuZCAzIFxcKFNRTFxcKSBvZiBzY3JpcHQgMDsgIgorCSAgLiAiRVJST1I6ICBk ZWFkbG9jayBkZXRlY3RlZFxuIgorCSAgLiAiKCg/IWNsaWVudCAwKSgufFxuKSkqIgorCSAgLiAi Y2xpZW50IDAgc2VuZGluZyBFTkQ7XG4iCisJICAuICJcXGcxKyIKKwkgIC4gImNsaWVudCAwIHNl bmRpbmcgU0VMRUNUIHBnX2Fkdmlzb3J5X3VubG9ja19hbGxcXChcXCk7XG4iCisJICAuICJcXGcx KyIKKwkgIC4gImNsaWVudCAwIHNlbmRpbmcgU0VMRUNUIHBnX2Fkdmlzb3J5X2xvY2tcXCgiIC4g VFJBTlNBQ1RJT05fRU5EU18xIC4gIlxcKTtcbiIKKwkgIC4gIlxcZzErIgorCSAgLiAiY2xpZW50 IDAgc2VuZGluZyBTRUxFQ1QgcGdfYWR2aXNvcnlfdW5sb2NrX2FsbFxcKFxcKTtcbiIKKwkgIC4g IlxcZzErIgorCSAgLiAiY2xpZW50IDAgcmVwZWF0cyB0aGUgZmFpbGVkIHRyYW5zYWN0aW9uIFxc KHRyeSAyLzJcXClcbiIKKwkgIC4gImNsaWVudCAwIHNlbmRpbmcgQkVHSU47XG4iCisJICAuICJc XGcxKyIKKwkgIC4gImNsaWVudCAwIHNlbmRpbmcgU0VMRUNUIHBnX2Fkdmlzb3J5X2xvY2tcXCgi IC4gREVBRExPQ0tfMSAuICJcXCk7XG4iCisJICAuICJcXGcxKyIKKwkgIC4gImNsaWVudCAwIHNl bmRpbmcgU0VMRUNUIHBnX2Fkdmlzb3J5X2xvY2tcXCgiIC4gV0FJVF9QR0JFTkNIXzIgLiAiXFwp O1xuIgorCSAgLiAiXFxnMSsiCisJICAuICJjbGllbnQgMCBzZW5kaW5nIFNFTEVDVCBwZ19hZHZp c29yeV9sb2NrXFwoIiAuIERFQURMT0NLXzIgLiAiXFwpO1xuIgorCSAgLiAiXFxnMSsiCisJICAu ICJjbGllbnQgMCBzZW5kaW5nIEVORDtcbiIKKwkgIC4gIlxcZzErIgorCSAgLiAiY2xpZW50IDAg c2VuZGluZyBTRUxFQ1QgcGdfYWR2aXNvcnlfdW5sb2NrX2FsbFxcKFxcKTtcbiIKKwkgIC4gIlxc ZzErIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBTRUxFQ1QgcGdfYWR2aXNvcnlfbG9ja1xcKCIg LiBUUkFOU0FDVElPTl9FTkRTXzEgLiAiXFwpO1xuIgorCSAgLiAiXFxnMSsiCisJICAuICJjbGll bnQgMCBzZW5kaW5nIFNFTEVDVCBwZ19hZHZpc29yeV91bmxvY2tfYWxsXFwoXFwpO1xuIgorCSAg LiAiXFxnMSsiOworCisJbXkgJHBhdHRlcm4yID0KKwkJImNsaWVudCAwIHNlbmRpbmcgQkVHSU47 XG4iCisJICAuICIoY2xpZW50IDAgcmVjZWl2aW5nXG4pKyIKKwkgIC4gImNsaWVudCAwIHNlbmRp bmcgU0VMRUNUIHBnX2Fkdmlzb3J5X2xvY2tcXCgiIC4gREVBRExPQ0tfMiAuICJcXCk7XG4iCisJ ICAuICJcXGcxKyIKKwkgIC4gImNsaWVudCAwIHNlbmRpbmcgU0VMRUNUIHBnX2Fkdmlzb3J5X2xv Y2tcXCgiIC4gREVBRExPQ0tfMSAuICJcXCk7XG4iCisJICAuICJcXGcxKyIKKwkgIC4gImNsaWVu dCAwIGdvdCBhIGZhaWx1cmUgXFwodHJ5IDEvMlxcKSBpbiBjb21tYW5kIDIgXFwoU1FMXFwpIG9m IHNjcmlwdCAwOyAiCisJICAuICJFUlJPUjogIGRlYWRsb2NrIGRldGVjdGVkXG4iCisJICAuICIo KD8hY2xpZW50IDApKC58XG4pKSoiCisJICAuICJjbGllbnQgMCBzZW5kaW5nIEVORDtcbiIKKwkg IC4gIlxcZzErIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBTRUxFQ1QgcGdfYWR2aXNvcnlfdW5s b2NrX2FsbFxcKFxcKTtcbiIKKwkgIC4gIlxcZzErIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBT RUxFQ1QgcGdfYWR2aXNvcnlfbG9ja1xcKCIgLiBUUkFOU0FDVElPTl9FTkRTXzIgLiAiXFwpO1xu IgorCSAgLiAiXFxnMSsiCisJICAuICJjbGllbnQgMCBzZW5kaW5nIFNFTEVDVCBwZ19hZHZpc29y eV91bmxvY2tfYWxsXFwoXFwpO1xuIgorCSAgLiAiXFxnMSsiCisJICAuICJjbGllbnQgMCByZXBl YXRzIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gXFwodHJ5IDIvMlxcKVxuIgorCSAgLiAiY2xpZW50 IDAgc2VuZGluZyBCRUdJTjtcbiIKKwkgIC4gIlxcZzErIgorCSAgLiAiY2xpZW50IDAgc2VuZGlu ZyBTRUxFQ1QgcGdfYWR2aXNvcnlfbG9ja1xcKCIgLiBERUFETE9DS18yIC4gIlxcKTtcbiIKKwkg IC4gIlxcZzErIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBTRUxFQ1QgcGdfYWR2aXNvcnlfbG9j a1xcKCIgLiBERUFETE9DS18xIC4gIlxcKTtcbiIKKwkgIC4gIlxcZzErIgorCSAgLiAiY2xpZW50 IDAgc2VuZGluZyBFTkQ7XG4iCisJICAuICJcXGcxKyIKKwkgIC4gImNsaWVudCAwIHNlbmRpbmcg U0VMRUNUIHBnX2Fkdmlzb3J5X3VubG9ja19hbGxcXChcXCk7XG4iCisJICAuICJcXGcxKyIKKwkg IC4gImNsaWVudCAwIHNlbmRpbmcgU0VMRUNUIHBnX2Fkdmlzb3J5X2xvY2tcXCgiIC4gVFJBTlNB Q1RJT05fRU5EU18yIC4gIlxcKTtcbiIKKwkgIC4gIlxcZzErIgorCSAgLiAiY2xpZW50IDAgc2Vu ZGluZyBTRUxFQ1QgcGdfYWR2aXNvcnlfdW5sb2NrX2FsbFxcKFxcKTtcbiIKKwkgIC4gIlxcZzEr IjsKKworCW9rKCgkZXJyMSA9fiAvJHBhdHRlcm4xLyBvciAkZXJyMiA9fiAvJHBhdHRlcm4yLyks CisJCSJjb25jdXJyZW50IGRlYWRsb2NrIHVwZGF0ZSB3aXRoIHJldHJ5aW5nOiAiCisJICAuICJj aGVjayB0aGUgcmV0cmllZCB0cmFuc2FjdGlvbiIpOworfQorCitzdWIgdGVzdF9wZ2JlbmNoX2Nv bW1pdF9mYWlsdXJlCit7CisJbXkgJGlzb2xhdGlvbl9sZXZlbCA9IFNFUklBTElaQUJMRTsKKwlt eSAkaXNvbGF0aW9uX2xldmVsX3NoZWxsID0gJGlzb2xhdGlvbl9sZXZlbF9zaGVsbFskaXNvbGF0 aW9uX2xldmVsXTsKKworCWxvY2FsICRFTlZ7UEdQT1JUfSA9ICRub2RlLT5wb3J0OworCWxvY2Fs ICRFTlZ7UEdPUFRJT05TfSA9CisJCSItYyBkZWZhdWx0X3RyYW5zYWN0aW9uX2lzb2xhdGlvbj0i IC4gJGlzb2xhdGlvbl9sZXZlbF9zaGVsbDsKKwlwcmludCAiIyBQR09QVElPTlM6ICIgLiAkRU5W e1BHT1BUSU9OU30gLiAiXG4iOworCisJbXkgKCRoX3BzcWwsICRpbl9wc3FsLCAkb3V0X3BzcWwp OworCW15ICgkaF9wZ2JlbmNoLCAkaW5fcGdiZW5jaCwgJG91dF9wZ2JlbmNoLCAkZXJyX3BnYmVu Y2gpOworCisJIyBPcGVuIGEgcHNxbCBzZXNzaW9uIGFuZCBhcXVpcmUgYW4gYWR2aXNvcnkgbG9j azoKKwlwcmludCAiIyBTdGFydGluZyBwc3FsXG4iOworCSRoX3BzcWwgPSBJUEM6OlJ1bjo6c3Rh cnQgWyAncHNxbCcgXSwgXCRpbl9wc3FsLCBcJG91dF9wc3FsOworCisJJGluX3BzcWwgPSAic2Vs ZWN0IHBnX2Fkdmlzb3J5X2xvY2soMCk7XG4iOworCXByaW50ICIjIFJ1bm5pbmcgaW4gcHNxbDog IiAuIGpvaW4oIiAiLCAkaW5fcHNxbCk7CisJJGhfcHNxbC0+cHVtcCgpIHVudGlsICRvdXRfcHNx bCA9fiAvcGdfYWR2aXNvcnlfbG9jay87CisKKwkjIFN0YXJ0IHBnYmVuY2g6CisJbXkgQGNvbW1h bmQgPSAoCisJCXF3KHBnYmVuY2ggLS1uby12YWN1dW0gLS10cmFuc2FjdGlvbnMgMSAtLWRlYnVn IGFsbCAtLW1heC10cmllcyAyKSwKKwkJIi0tZmlsZSIsCisJCSRzY3JpcHRfY29tbWl0X2ZhaWx1 cmUpOworCXByaW50ICIjIFJ1bm5pbmc6ICIgLiBqb2luKCIgIiwgQGNvbW1hbmQpIC4gIlxuIjsK KwkkaF9wZ2JlbmNoID0gSVBDOjpSdW46OnN0YXJ0IFxAY29tbWFuZCwgXCRpbl9wZ2JlbmNoLCBc JG91dF9wZ2JlbmNoLAorCSAgXCRlcnJfcGdiZW5jaDsKKworCSMgV2FpdCB1bnRpbCBwZ2JlbmNo IGFsc28gdHJpZXMgdG8gYWNxdWlyZSB0aGUgc2FtZSBhZHZpc29yeSBsb2NrOgorCWRvCisJewor CQkkaW5fcHNxbCA9CisJCQkic2VsZWN0IGNhc2UgY291bnQoKikgd2hlbiAwIHRoZW4gJ3plcm8n IGVsc2UgJ25vdF96ZXJvJyBlbmQgIgorCQkgIC4gImZyb20gcGdfbG9ja3Mgd2hlcmUgIgorCQkg IC4gImxvY2t0eXBlID0gJ2Fkdmlzb3J5JyBhbmQgIgorCQkgIC4gIm9ianN1YmlkID0gMSBhbmQg IgorCQkgIC4gIigoY2xhc3NpZDo6YmlnaW50IDw8IDMyKSB8IG9iamlkOjpiaWdpbnQgPSAwOjpi aWdpbnQpIGFuZCAiCisJCSAgLiAibm90IGdyYW50ZWQ7XG4iOworCQlwcmludCAiIyBSdW5uaW5n IGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCQkkaF9wc3FsLT5wdW1wKCkgd2hp bGUgbGVuZ3RoICRpbl9wc3FsOworCX0gd2hpbGUgKCRvdXRfcHNxbCAhfiAvbm90X3plcm8vKTsK KworCSMgSW4gcHNxbCwgcnVuIGEgcGFyYWxsZWwgdHJhbnNhY3Rpb24sIHJlbGVhc2UgYWR2aXNv cnkgbG9ja3MgYW5kIGVuZCB0aGUKKwkjIHNlc3Npb246CisKKwkkaW5fcHNxbCA9ICJiZWdpblw7 dXBkYXRlIHh5IHNldCB5ID0geSArIDEgd2hlcmUgeCA9IDJcO2VuZDtcbiI7CisJcHJpbnQgIiMg UnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkkaF9wc3FsLT5wdW1w KCkgdW50aWwgJG91dF9wc3FsID1+IC9DT01NSVQvOworCisJJGluX3BzcWwgPSAic2VsZWN0IHBn X2Fkdmlzb3J5X3VubG9ja19hbGwoKTtcbiI7CisJcHJpbnQgIiMgUnVubmluZyBpbiBwc3FsOiAi IC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkkaF9wc3FsLT5wdW1wKCkgdW50aWwgJG91dF9wc3Fs ID1+IC9wZ19hZHZpc29yeV91bmxvY2tfYWxsLzsKKworCSRpbl9wc3FsID0gIlxccVxuIjsKKwlw cmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCSRoX3Bz cWwtPnB1bXAoKSB3aGlsZSBsZW5ndGggJGluX3BzcWw7CisKKwkkaF9wc3FsLT5maW5pc2goKTsK KworCSMgR2V0IHBnYmVuY2ggcmVzdWx0cworCSRoX3BnYmVuY2gtPnB1bXAoKSB1bnRpbCBsZW5n dGggJG91dF9wZ2JlbmNoOworCSRoX3BnYmVuY2gtPmZpbmlzaCgpOworCisJIyBPbiBXaW5kb3dz LCB0aGUgZXhpdCBzdGF0dXMgb2YgdGhlIHByb2Nlc3MgaXMgcmV0dXJuZWQgZGlyZWN0bHkgYXMg dGhlCisJIyBwcm9jZXNzJ3MgZXhpdCBjb2RlLCB3aGlsZSBvbiBVbml4LCBpdCdzIHJldHVybmVk IGluIHRoZSBoaWdoIGJpdHMKKwkjIG9mIHRoZSBleGl0IGNvZGUgKHNlZSBXRVhJVFNUQVRVUyBt YWNybyBpbiB0aGUgc3RhbmRhcmQgPHN5cy93YWl0Lmg+CisJIyBoZWFkZXIgZmlsZSkuIElQQzo6 UnVuJ3MgcmVzdWx0IGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIGV4aXQgY29kZSA+PiA4LAorCSMg YXNzdW1pbmcgdGhlIFVuaXggY29udmVudGlvbiwgd2hpY2ggd2lsbCBhbHdheXMgcmV0dXJuIDAg b24gV2luZG93cyBhcworCSMgbG9uZyBhcyB0aGUgcHJvY2VzcyB3YXMgbm90IHRlcm1pbmF0ZWQg YnkgYW4gZXhjZXB0aW9uLiBUbyB3b3JrIGFyb3VuZAorCSMgdGhhdCwgdXNlICRoLT5mdWxsX3Jl c3VsdCBvbiBXaW5kb3dzIGluc3RlYWQuCisJbXkgJHJlc3VsdCA9CisJICAgICgkQ29uZmlne29z bmFtZX0gZXEgIk1TV2luMzIiKQorCSAgPyAoJGhfcGdiZW5jaC0+ZnVsbF9yZXN1bHRzKVswXQor CSAgOiAkaF9wZ2JlbmNoLT5yZXN1bHQoMCk7CisKKwkjIENoZWNrIHBnYmVuY2ggcmVzdWx0cwor CW9rKCEkcmVzdWx0LCAiQGNvbW1hbmQgZXhpdCBjb2RlIDAiKTsKKworCWxpa2UoJG91dF9wZ2Jl bmNoLAorCQlxcntwcm9jZXNzZWQ6IDEvMX0sCisJCSJjb21taXQgZmFpbHVyZTogY2hlY2sgcHJv Y2Vzc2VkIHRyYW5zYWN0aW9ucyIpOworCisJbGlrZSgkb3V0X3BnYmVuY2gsCisJCXFye14oKD8h bnVtYmVyIG9mIGVycm9ycykoLnxcbikpKiR9LAorCQkiY29tbWl0IGZhaWx1cmU6IGNoZWNrIGVy cm9ycyIpOworCisJbXkgJHBhdHRlcm4gPQorCQkiY2xpZW50IDAgc2VuZGluZyBCRUdJTjtcbiIK KwkgIC4gIihjbGllbnQgMCByZWNlaXZpbmdcbikrIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBV UERBVEUgeHkgU0VUIHkgPSB5IFxcKyAoLT9cXGQrKSBXSEVSRSB4ID0gMTtcbiIKKwkgIC4gIlxc ZzErIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBTRUxFQ1QgcGdfYWR2aXNvcnlfbG9ja1xcKDBc XCk7XG4iCisJICAuICJcXGcxKyIKKwkgIC4gImNsaWVudCAwIHNlbmRpbmcgRU5EO1xuIgorCSAg LiAiXFxnMSsiCisJICAuICJjbGllbnQgMCBnb3QgYSBmYWlsdXJlIFxcKHRyeSAxLzJcXCkgaW4g Y29tbWFuZCA0IFxcKFNRTFxcKSBvZiBzY3JpcHQgMDsgIgorCSAgLiAiRVJST1I6ICBjb3VsZCBu b3Qgc2VyaWFsaXplIGFjY2VzcyBkdWUgdG8gcmVhZC93cml0ZSBkZXBlbmRlbmNpZXMgYW1vbmcg dHJhbnNhY3Rpb25zXG4iCisJICAuICJERVRBSUw6ICBSZWFzb24gY29kZTogQ2FuY2VsZWQgb24g aWRlbnRpZmljYXRpb24gYXMgYSBwaXZvdCwgZHVyaW5nIGNvbW1pdCBhdHRlbXB0LlxuIgorCSAg LiAiKCg/IWNsaWVudCAwKSgufFxuKSkqIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBTRUxFQ1Qg cGdfYWR2aXNvcnlfdW5sb2NrX2FsbFxcKFxcKTtcbiIKKwkgIC4gIlxcZzErIgorCSAgLiAiY2xp ZW50IDAgcmVwZWF0cyB0aGUgZmFpbGVkIHRyYW5zYWN0aW9uIFxcKHRyeSAyLzJcXClcbiIKKwkg IC4gImNsaWVudCAwIGV4ZWN1dGluZyBcXFxcc2V0IGRlbHRhXG4iCisJICAuICJjbGllbnQgMCBz ZW5kaW5nIEJFR0lOO1xuIgorCSAgLiAiXFxnMSsiCisJICAuICJjbGllbnQgMCBzZW5kaW5nIFVQ REFURSB4eSBTRVQgeSA9IHkgXFwrIFxcZzIgV0hFUkUgeCA9IDE7XG4iCisJICAuICJcXGcxKyIK KwkgIC4gImNsaWVudCAwIHNlbmRpbmcgU0VMRUNUIHBnX2Fkdmlzb3J5X2xvY2tcXCgwXFwpO1xu IgorCSAgLiAiXFxnMSsiCisJICAuICJjbGllbnQgMCBzZW5kaW5nIEVORDtcbiIKKwkgIC4gIlxc ZzErIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBTRUxFQ1QgcGdfYWR2aXNvcnlfdW5sb2NrX2Fs bFxcKFxcKTtcbiIKKwkgIC4gIlxcZzErIjsKKworCWxpa2UoJGVycl9wZ2JlbmNoLAorCQlxcnsk cGF0dGVybn0sCisJCSJjb21taXQgZmFpbHVyZTogIgorCSAgLiAiY2hlY2sgdGhlIGNvbXBsZXRp b24gb2YgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbiBibG9jayIpOworfQorCit0ZXN0X3BnYmVuY2hf c2VyaWFsaXphdGlvbl9lcnJvcnMoKTsKK3Rlc3RfcGdiZW5jaF9zZXJpYWxpemF0aW9uX2ZhaWx1 cmVzKCk7CisKK3Rlc3RfcGdiZW5jaF9kZWFkbG9ja19lcnJvcnMoKTsKK3Rlc3RfcGdiZW5jaF9k ZWFkbG9ja19mYWlsdXJlcygpOworCit0ZXN0X3BnYmVuY2hfY29tbWl0X2ZhaWx1cmUoKTsKKwor I2RvbmUKKyRub2RlLT5zdG9wOwotLSAKMi43LjQKCg== --=_2a791287a95a0d33a8c0f872bb13c758--