Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jKsec-0000ZX-6T for pgsql-hackers@arkaria.postgresql.org; Sat, 04 Apr 2020 23:56:47 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jKsea-00065s-Qy for pgsql-hackers@arkaria.postgresql.org; Sat, 04 Apr 2020 23:56:44 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jKseZ-000633-UW for pgsql-hackers@lists.postgresql.org; Sat, 04 Apr 2020 23:56:44 +0000 Received: from cyclops.postgrespro.ru ([93.174.131.138] helo=mail.postgrespro.ru) by makus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jKseU-0002MQ-St for pgsql-hackers@lists.postgresql.org; Sat, 04 Apr 2020 23:56:42 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id 78AC821C5842 for ; Sun, 5 Apr 2020 02:56:35 +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-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id A86C121C583C for ; Sun, 5 Apr 2020 02:56:33 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1586044593; bh=jpgWhLM+eOFojwO+WHJxNczYnDOtd2aFAA0zlpuhuG4=; h=Date:From:To:Subject:In-Reply-To:References; b=mWkPCQ8QNDgBJeKI7cbQr3IbNGh5mfj6akVT1N+Qtc6ssoGCFGkheoRvi2DpM1+2p /Lp0nkYb9MAQpNDZugal+hLK6U1AJOHEB2L2dUZttEBNuEK4kYKvFzD2AbYFDbFoe2 b0iovOPXlWpSclOEZf2I8pR/YUbLDJmz3v3GfEu0= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_5cf1a6db167a37d773716fd744b4abf2" Content-Transfer-Encoding: 7bit Date: Sun, 05 Apr 2020 02:56:31 +0300 From: Kartyshov Ivan To: pgsql-hackers@lists.postgresql.org Subject: Re: [HACKERS] make async slave to wait for lsn to be replayed In-Reply-To: <06bfb1e542a25c3ebfc4232be4d49555@postgrespro.ru> References: <80f267591b373db5588d580fdfb432f0@postgrespro.ru> <20200306.145445.1788163547829857988.horikyota.ntt@gmail.com> <3cc883048264c2e9af022033925ff8db@postgrespro.ru> <674ad239b725a11d89c21574e44e376b@postgrespro.ru> <69a363498b76cd079ae19c4ee93bced0@postgrespro.ru> <06bfb1e542a25c3ebfc4232be4d49555@postgrespro.ru> User-Agent: Roundcube Webmail/1.4.0 Message-ID: <4d4ce8b39f027b2225b0d22088a76612@postgrespro.ru> X-Sender: i.kartyshov@postgrespro.ru List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_5cf1a6db167a37d773716fd744b4abf2 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed On 2020-04-03 21:51, Anna Akenteva wrote: > I did some code cleanup and added tests - both for the standalone WAIT > FOR statement and for WAIT FOR as a part of BEGIN. The new patch is > attached. I did more cleanup and code optimization on waiting events on latch. And rebase patch. -- Ivan Kartyshov Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_5cf1a6db167a37d773716fd744b4abf2 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=begin_waitfor_v5.patch Content-Disposition: attachment; filename=begin_waitfor_v5.patch; size=47599 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbCBiL2RvYy9zcmMvc2dt bC9yZWYvYWxsZmlsZXMuc2dtbAppbmRleCBhYjcxMTc2Y2RmLi42YjRlNDViYzY4IDEwMDY0NAot LS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2FsbGZpbGVzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3Jl Zi9hbGxmaWxlcy5zZ21sCkBAIC0xODcsNiArMTg3LDcgQEAgQ29tcGxldGUgbGlzdCBvZiB1c2Fi bGUgc2dtbCBzb3VyY2UgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuCiA8IUVOVElUWSB1cGRhdGUg ICAgICAgICAgICAgU1lTVEVNICJ1cGRhdGUuc2dtbCI+CiA8IUVOVElUWSB2YWN1dW0gICAgICAg ICAgICAgU1lTVEVNICJ2YWN1dW0uc2dtbCI+CiA8IUVOVElUWSB2YWx1ZXMgICAgICAgICAgICAg U1lTVEVNICJ2YWx1ZXMuc2dtbCI+Cis8IUVOVElUWSB3YWl0ICAgICAgICAgICAgICAgU1lTVEVN ICJ3YWl0LnNnbWwiPgogCiA8IS0tIGFwcGxpY2F0aW9ucyBhbmQgdXRpbGl0aWVzIC0tPgogPCFF TlRJVFkgY2x1c3RlcmRiICAgICAgICAgIFNZU1RFTSAiY2x1c3RlcmRiLnNnbWwiPgpkaWZmIC0t Z2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9iZWdpbi5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9iZWdp bi5zZ21sCmluZGV4IGMyM2JiZmI0ZTcuLmNmZWUzYzhmMTAgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMv c2dtbC9yZWYvYmVnaW4uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2JlZ2luLnNnbWwKQEAg LTIxLDEzICsyMSwyMSBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KIAogIDxyZWZzeW5vcHNp c2Rpdj4KIDxzeW5vcHNpcz4KLUJFR0lOIFsgV09SSyB8IFRSQU5TQUNUSU9OIF0gWyA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dHJhbnNhY3Rpb25fbW9kZTwvcmVwbGFjZWFibGU+IFss IC4uLl0gXQorQkVHSU4gWyBXT1JLIHwgVFJBTlNBQ1RJT04gXSBbIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj50cmFuc2FjdGlvbl9tb2RlPC9yZXBsYWNlYWJsZT4gWywgLi4uXSBdIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj53YWl0X2Zvcl9ldmVudDwvcmVwbGFjZWFibGU+ CiAKIDxwaHJhc2U+d2hlcmUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRyYW5zYWN0 aW9uX21vZGU8L3JlcGxhY2VhYmxlPiBpcyBvbmUgb2Y6PC9waHJhc2U+CiAKICAgICBJU09MQVRJ T04gTEVWRUwgeyBTRVJJQUxJWkFCTEUgfCBSRVBFQVRBQkxFIFJFQUQgfCBSRUFEIENPTU1JVFRF RCB8IFJFQUQgVU5DT01NSVRURUQgfQogICAgIFJFQUQgV1JJVEUgfCBSRUFEIE9OTFkKICAgICBb IE5PVCBdIERFRkVSUkFCTEUKKworPHBocmFzZT53aGVyZSA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+d2FpdF9mb3JfZXZlbnQ8L3JlcGxhY2VhYmxlPiBpczo8L3BocmFzZT4KKyAgICBX QUlUIEZPUiBbQU5ZIHwgQUxMXSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZXZlbnQ8 L3JlcGxhY2VhYmxlPiBbLCAuLi5dCisKKzxwaHJhc2U+YW5kIDxyZXBsYWNlYWJsZSBjbGFzcz0i cGFyYW1ldGVyIj5ldmVudDwvcmVwbGFjZWFibGU+IGlzIG9uZSBvZjo8L3BocmFzZT4KKyAgICBM U04gbHNuX3ZhbHVlCisgICAgVElNRU9VVCBudW1iZXJfb2ZfbWlsbGlzZWNvbmRzCisgICAgdGlt ZXN0YW1wCiA8L3N5bm9wc2lzPgogIDwvcmVmc3lub3BzaXNkaXY+CiAKZGlmZiAtLWdpdCBhL2Rv Yy9zcmMvc2dtbC9yZWYvc3RhcnRfdHJhbnNhY3Rpb24uc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYv c3RhcnRfdHJhbnNhY3Rpb24uc2dtbAppbmRleCBkNmNkMWQ0MTc3Li4wYTJlYTdlODBiIDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3N0YXJ0X3RyYW5zYWN0aW9uLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL3JlZi9zdGFydF90cmFuc2FjdGlvbi5zZ21sCkBAIC0yMSwxMyArMjEsMjEgQEAg UG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICA8cmVmc3lub3BzaXNkaXY+CiA8c3lub3BzaXM+ Ci1TVEFSVCBUUkFOU0FDVElPTiBbIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50cmFu c2FjdGlvbl9tb2RlPC9yZXBsYWNlYWJsZT4gWywgLi4uXSBdCitTVEFSVCBUUkFOU0FDVElPTiBb IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50cmFuc2FjdGlvbl9tb2RlPC9yZXBsYWNl YWJsZT4gWywgLi4uXSBdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj53YWl0X2Zvcl9l dmVudDwvcmVwbGFjZWFibGU+CiAKIDxwaHJhc2U+d2hlcmUgPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPnRyYW5zYWN0aW9uX21vZGU8L3JlcGxhY2VhYmxlPiBpcyBvbmUgb2Y6PC9waHJh c2U+CiAKICAgICBJU09MQVRJT04gTEVWRUwgeyBTRVJJQUxJWkFCTEUgfCBSRVBFQVRBQkxFIFJF QUQgfCBSRUFEIENPTU1JVFRFRCB8IFJFQUQgVU5DT01NSVRURUQgfQogICAgIFJFQUQgV1JJVEUg fCBSRUFEIE9OTFkKICAgICBbIE5PVCBdIERFRkVSUkFCTEUKKworPHBocmFzZT53aGVyZSA8cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+d2FpdF9mb3JfZXZlbnQ8L3JlcGxhY2VhYmxlPiBp czo8L3BocmFzZT4KKyAgICBXQUlUIEZPUiBbQU5ZIHwgQUxMXSA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+ZXZlbnQ8L3JlcGxhY2VhYmxlPiBbLCAuLi5dCisKKzxwaHJhc2U+YW5kIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5ldmVudDwvcmVwbGFjZWFibGU+IGlzIG9uZSBv Zjo8L3BocmFzZT4KKyAgICBMU04gbHNuX3ZhbHVlCisgICAgVElNRU9VVCBudW1iZXJfb2ZfbWls bGlzZWNvbmRzCisgICAgdGltZXN0YW1wCiA8L3N5bm9wc2lzPgogIDwvcmVmc3lub3BzaXNkaXY+ CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvd2FpdC5zZ21sIGIvZG9jL3NyYy9zZ21s L3JlZi93YWl0LnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMjZj YWUzYWQ4NQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvd2FpdC5zZ21sCkBA IC0wLDAgKzEsMTQ2IEBACis8IS0tCitkb2Mvc3JjL3NnbWwvcmVmL3dhaXQuc2dtbAorUG9zdGdy ZVNRTCBkb2N1bWVudGF0aW9uCistLT4KKworPHJlZmVudHJ5IGlkPSJzcWwtd2FpdCI+CisgPGlu ZGV4dGVybSB6b25lPSJzcWwtd2FpdCI+CisgIDxwcmltYXJ5PldBSVQgRk9SPC9wcmltYXJ5Pgor IDwvaW5kZXh0ZXJtPgorCisgPHJlZm1ldGE+CisgIDxyZWZlbnRyeXRpdGxlPldBSVQgRk9SPC9y ZWZlbnRyeXRpdGxlPgorICA8bWFudm9sbnVtPjc8L21hbnZvbG51bT4KKyAgPHJlZm1pc2NpbmZv PlNRTCAtIExhbmd1YWdlIFN0YXRlbWVudHM8L3JlZm1pc2NpbmZvPgorIDwvcmVmbWV0YT4KKwor IDxyZWZuYW1lZGl2PgorICA8cmVmbmFtZT5XQUlUIEZPUjwvcmVmbmFtZT4KKyAgPHJlZnB1cnBv c2U+d2FpdCBmb3IgdGhlIHRhcmdldCA8YWNyb255bT5MU048L2Fjcm9ueW0+IHRvIGJlIHJlcGxh eWVkIG9yIGZvciBzcGVjaWZpZWQgdGltZSB0byBwYXNzPC9yZWZwdXJwb3NlPgorIDwvcmVmbmFt ZWRpdj4KKworIDxyZWZzeW5vcHNpc2Rpdj4KKzxzeW5vcHNpcz4KK1dBSVQgRk9SIFtBTlkgfCBB TExdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5ldmVudDwvcmVwbGFjZWFibGU+IFss IC4uLl0KKworPHBocmFzZT53aGVyZSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZXZl bnQ8L3JlcGxhY2VhYmxlPiBpcyBvbmUgb2Y6PC9waHJhc2U+CisgICAgTFNOIHZhbHVlCisgICAg VElNRU9VVCBudW1iZXJfb2ZfbWlsbGlzZWNvbmRzCisgICAgdGltZXN0YW1wCisKK1dBSVQgRk9S IExTTiAnPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmxzbl9udW1iZXI8L3JlcGxhY2Vh YmxlPicKK1dBSVQgRk9SIExTTiAnPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmxzbl9u dW1iZXI8L3JlcGxhY2VhYmxlPicgVElNRU9VVCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+d2FpdF90aW1lb3V0PC9yZXBsYWNlYWJsZT4KK1dBSVQgRk9SIExTTiAnPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPmxzbl9udW1iZXI8L3JlcGxhY2VhYmxlPicsIFRJTUVTVEFNUCA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+d2FpdF90aW1lPC9yZXBsYWNlYWJsZT4KK1dB SVQgRk9SIFRJTUVTVEFNUCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+d2FpdF90aW1l PC9yZXBsYWNlYWJsZT4KK1dBSVQgRk9SIEFMTCBMU04gJzxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5sc25fbnVtYmVyPC9yZXBsYWNlYWJsZT4nIFRJTUVPVVQgPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPndhaXRfdGltZW91dDwvcmVwbGFjZWFibGU+LCBUSU1FU1RBTVAgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPndhaXRfdGltZTwvcmVwbGFjZWFibGU+CitXQUlU IEZPUiBBTlkgTFNOICc8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bHNuX251bWJlcjwv cmVwbGFjZWFibGU+JywgVElNRVNUQU1QIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj53 YWl0X3RpbWU8L3JlcGxhY2VhYmxlPgorPC9zeW5vcHNpcz4KKyA8L3JlZnN5bm9wc2lzZGl2Pgor CisgPHJlZnNlY3QxPgorICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgIDxwYXJhPgor ICAgPGNvbW1hbmQ+V0FJVCBGT1I8L2NvbW1hbmQ+IHByb3ZpZGVzIGEgc2ltcGxlIGludGVycHJv Y2VzcyBjb21tdW5pY2F0aW9uCisgICBtZWNoYW5pc20gdG8gd2FpdCBmb3IgdGltZXN0YW1wLCB0 aW1lb3V0IG9yIHRoZSB0YXJnZXQgbG9nIHNlcXVlbmNlIG51bWJlcgorICAgKDxhY3JvbnltPkxT TjwvYWNyb255bT4pIG9uIHN0YW5kYnkgaW4gPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1 Y3RuYW1lPgorICAgZGF0YWJhc2VzIHdpdGggbWFzdGVyLXN0YW5kYnkgYXN5bmNocm9ub3VzIHJl cGxpY2F0aW9uLiBXaGVuIHJ1biB3aXRoIHRoZQorICAgPHJlcGxhY2VhYmxlPkxTTjwvcmVwbGFj ZWFibGU+IG9wdGlvbiwgdGhlIDxjb21tYW5kPldBSVQgRk9SPC9jb21tYW5kPgorICAgY29tbWFu ZCB3YWl0cyBmb3IgdGhlIHNwZWNpZmllZCA8YWNyb255bT5MU048L2Fjcm9ueW0+IHRvIGJlIHJl cGxheWVkLgorICAgSWYgbm8gdGltZXN0YW1wIG9yIHRpbWVvdXQgd2FzIHNwZWNpZmllZCwgd2Fp dCB0aW1lIGlzIHVubGltaXRlZC4KKyAgIFdhaXRpbmcgY2FuIGJlIGludGVycnVwdGVkIHVzaW5n IDxsaXRlcmFsPkN0cmwrQzwvbGl0ZXJhbD4sIG9yCisgICBieSBzaHV0dGluZyBkb3duIHRoZSA8 bGl0ZXJhbD5wb3N0Z3JlczwvbGl0ZXJhbD4gc2VydmVyLgorICA8L3BhcmE+CisKKyA8L3JlZnNl Y3QxPgorCisgPHJlZnNlY3QxPgorICA8dGl0bGU+UGFyYW1ldGVyczwvdGl0bGU+CisKKyAgPHZh cmlhYmxlbGlzdD4KKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+PHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPkxTTjwvcmVwbGFjZWFibGU+PC90ZXJtPgorICAgIDxsaXN0aXRlbT4K KyAgICAgPHBhcmE+CisgICAgICBTcGVjaWZ5IHRoZSB0YXJnZXQgbG9nIHNlcXVlbmNlIG51bWJl ciB0byB3YWl0IGZvci4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxp c3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT5USU1FT1VUIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj53YWl0X3RpbWVvdXQ8L3JlcGxhY2VhYmxlPjwvdGVybT4K KyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgTGltaXQgdGhlIHRpbWUgaW50ZXJ2 YWwgdG8gd2FpdCBmb3IgdGhlIExTTiB0byBiZSByZXBsYXllZC4KKyAgICAgIFRoZSBzcGVjaWZp ZWQgPHJlcGxhY2VhYmxlPndhaXRfdGltZW91dDwvcmVwbGFjZWFibGU+IG11c3QgYmUgYW4gaW50 ZWdlcgorICAgICAgYW5kIGlzIG1lYXN1cmVkIGluIG1pbGxpc2Vjb25kcy4KKyAgICAgPC9wYXJh PgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRy eT4KKyAgICA8dGVybT5VTlRJTCBUSU1FU1RBTVAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPndhaXRfdGltZTwvcmVwbGFjZWFibGU+PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAg PHBhcmE+CisgICAgICBMaW1pdCB0aGUgdGltZSB0byB3YWl0IGZvciB0aGUgTFNOIHRvIGJlIHJl cGxheWVkLgorICAgICAgVGhlIHNwZWNpZmllZCA8cmVwbGFjZWFibGU+d2FpdF90aW1lPC9yZXBs YWNlYWJsZT4gbXVzdCBiZSB0aW1lc3RhbXAuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVt PgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgPC92YXJpYWJsZWxpc3Q+CisgPC9yZWZzZWN0MT4K KworIDxyZWZzZWN0MT4KKyAgPHRpdGxlPkV4YW1wbGVzPC90aXRsZT4KKworICA8cGFyYT4KKyAg IFJ1biA8bGl0ZXJhbD5XQUlUIEZPUjwvbGl0ZXJhbD4gZnJvbSA8YXBwbGljYXRpb24+cHNxbDwv YXBwbGljYXRpb24+LAorICAgbGltaXRpbmcgd2FpdCB0aW1lIHRvIDEwMDAwIG1pbGxpc2Vjb25k czoKKworPHNjcmVlbj4KK1dBSVQgRk9SIExTTiAnMC8zRjA3QTZCMScgVElNRU9VVCAxMDAwMDsK K05PVElDRTogIExTTiBpcyBub3QgcmVhY2hlZC4gVHJ5IHRvIGluY3JlYXNlIHdhaXQgdGltZS4K K0xTTiByZWFjaGVkCistLS0tLS0tLS0tLS0tCisgZgorKDEgcm93KQorPC9zY3JlZW4+CisgIDwv cGFyYT4KKworICA8cGFyYT4KKyAgIFdhaXQgdW50aWwgdGhlIHNwZWNpZmllZCA8YWNyb255bT5M U048L2Fjcm9ueW0+IGlzIHJlcGxheWVkOgorPHNjcmVlbj4KK1dBSVQgRk9SIExTTiAnMC8zRjA3 QTYxMSc7CitMU04gcmVhY2hlZAorLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKzwvc2NyZWVu PgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBMaW1pdCA8YWNyb255bT5MU048L2Fjcm9ueW0+ IHdhaXQgdGltZSB0byA1MDAwMDAgbWlsbGlzZWNvbmRzLAorICAgYW5kIHRoZW4gY2FuY2VsIHRo ZSBjb21tYW5kIGlmIDxhY3JvbnltPkxTTjwvYWNyb255bT4gd2FzIG5vdCByZWFjaGVkOgorPHNj cmVlbj4KK1dBSVQgRk9SIExTTiAnMC8zRjBGRjc5MScgVElNRU9VVCA1MDAwMDA7CiteQ0NhbmNl bCByZXF1ZXN0IHNlbnQKK05PVElDRTogIExTTiBpcyBub3QgcmVhY2hlZC4gVHJ5IHRvIGluY3Jl YXNlIHdhaXQgdGltZS4KK0VSUk9SOiAgY2FuY2VsaW5nIHN0YXRlbWVudCBkdWUgdG8gdXNlciBy ZXF1ZXN0CisgTFNOIHJlYWNoZWQKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCis8L3NjcmVl bj4KKzwvcGFyYT4KKyA8L3JlZnNlY3QxPgorCisgPHJlZnNlY3QxPgorICA8dGl0bGU+Q29tcGF0 aWJpbGl0eTwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBUaGVyZSBpcyBubyA8Y29tbWFuZD5XQUlU IEZPUjwvY29tbWFuZD4gc3RhdGVtZW50IGluIHRoZSBTUUwKKyAgIHN0YW5kYXJkLgorICA8L3Bh cmE+CisgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwv cmVmZXJlbmNlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmZXJlbmNlLnNnbWwKaW5kZXggZDI1YTc3 YjEzYy4uZGJkNDBmNjZlZCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZmVyZW5jZS5zZ21s CisrKyBiL2RvYy9zcmMvc2dtbC9yZWZlcmVuY2Uuc2dtbApAQCAtMjE1LDYgKzIxNSw3IEBACiAg ICAmdXBkYXRlOwogICAgJnZhY3V1bTsKICAgICZ2YWx1ZXM7CisgICAmd2FpdDsKIAogIDwvcmVm ZXJlbmNlPgogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKaW5kZXggYWJmOTU0YmEzOS4uZDI4 NTZjODg5NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwpAQCAtNDIsNiArNDIsNyBAQAog I2luY2x1ZGUgImNhdGFsb2cvcGdfZGF0YWJhc2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcm9n cmVzcy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIKKyNpbmNsdWRlICJjb21t YW5kcy93YWl0LmgiCiAjaW5jbHVkZSAiY29tbW9uL2NvbnRyb2xkYXRhX3V0aWxzLmgiCiAjaW5j bHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVudC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgpAQCAt NzMzMiw2ICs3MzMzLDE1IEBAIFN0YXJ0dXBYTE9HKHZvaWQpCiAJCQkJCWJyZWFrOwogCQkJCX0K IAorCQkJCS8qCisJCQkJICogSWYgd2UgcmVwbGF5ZWQgYW4gTFNOIHRoYXQgc29tZW9uZSB3YXMg d2FpdGluZyBmb3IsCisJCQkJICogc2V0IGxhdGNoZXMgaW4gc2hhcmVkIG1lbW9yeSBhcnJheSB0 byBub3RpZnkgdGhlIHdhaXRlci4KKwkJCQkgKi8KKwkJCQlpZiAoWExvZ0N0bC0+bGFzdFJlcGxh eWVkRW5kUmVjUHRyID49IEdldE1pbldhaXQoKSkKKwkJCQl7CisJCQkJCVdhaXRTZXRMYXRjaChY TG9nQ3RsLT5sYXN0UmVwbGF5ZWRFbmRSZWNQdHIpOworCQkJCX0KKwogCQkJCS8qIEVsc2UsIHRy eSB0byBmZXRjaCB0aGUgbmV4dCBXQUwgcmVjb3JkICovCiAJCQkJcmVjb3JkID0gUmVhZFJlY29y ZCh4bG9ncmVhZGVyLCBMT0csIGZhbHNlKTsKIAkJCX0gd2hpbGUgKHJlY29yZCAhPSBOVUxMKTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvTWFrZWZpbGUKaW5kZXggZDQ4MTVkM2NlNi4uOWIzMTA5MjZjMSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvTWFrZWZpbGUKQEAgLTU3LDYgKzU3LDcgQEAgT0JKUyA9IFwKIAl1c2VyLm8gXAogCXZhY3V1 bS5vIFwKIAl2YXJpYWJsZS5vIFwKLQl2aWV3Lm8KKwl2aWV3Lm8gXAorCXdhaXQubwogCiBpbmNs dWRlICQodG9wX3NyY2Rpcikvc3JjL2JhY2tlbmQvY29tbW9uLm1rCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy93YWl0LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy93YWl0LmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYWM5OTA1ZTYzMgotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXQuYwpAQCAtMCwwICsxLDM5NCBAQAor LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogd2FpdC5jCisgKgkgIEltcGxlbWVudHMgV0FJVCBG T1IsIHdoaWNoIGFsbG93cyB3YWl0aW5nIGZvciBldmVudHMgc3VjaCBhcworICoJICB0aW1lIHBh c3Npbmcgb3IgTFNOIGhhdmluZyBiZWVuIHJlcGxheWVkIG9uIHJlcGxpY2EuCisgKgorICogUG9y dGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjAsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMjAsIFJlZ2VudHMgb2YgUG9z dGdyZXNQcm8KKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9jb21tYW5k cy93YWl0LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSA8ZmxvYXQu aD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKyNpbmNsdWRlICJw Z3N0YXQuaCIKKyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIK KyNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgor I2luY2x1ZGUgImFjY2Vzcy94bG9nLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCisj aW5jbHVkZSAiY29tbWFuZHMvd2FpdC5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRl ICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJzdG9yYWdlL2JhY2tlbmRpZC5oIgorI2luY2x1ZGUg InN0b3JhZ2UvaXBjLmgiCisjaW5jbHVkZSAic3RvcmFnZS9sYXRjaC5oIgorI2luY2x1ZGUgInN0 b3JhZ2UvcG1zaWduYWwuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKKyNpbmNsdWRlICJz dG9yYWdlL3NobWVtLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zcGluLmgiCisjaW5jbHVkZSAic3Rv cmFnZS9zaW52YWxhZHQuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUg InV0aWxzL3BnX2xzbi5oIgorI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgorI2luY2x1ZGUg ImV4ZWN1dG9yL3NwaS5oIgorI2luY2x1ZGUgInV0aWxzL2ZtZ3Jwcm90b3MuaCIKKworLyogQWRk IHRvIC8gZGVsZXRlIGZyb20gc2hhcmVkIG1lbW9yeSBhcnJheSAqLworc3RhdGljIHZvaWQgQWRk RXZlbnQoWExvZ1JlY1B0ciBsc25fdG9fd2FpdCk7CitzdGF0aWMgdm9pZCBEZWxldGVFdmVudCh2 b2lkKTsKKworLyogU2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0Cit7 CisJaW50CQkJYmFja2VuZF9tYXhpZDsKKwlYTG9nUmVjUHRyCW1pbl9sc247CisJc2xvY2tfdAkJ bXV0ZXg7CisJWExvZ1JlY1B0cgl3YWl0ZWRfbHNuW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07Cit9 IFdhaXRTdGF0ZTsKKworc3RhdGljIHZvbGF0aWxlIFdhaXRTdGF0ZSAqc3RhdGU7CisKKy8qIEFk ZCB0aGUgZXZlbnQgb2YgdGhlIGN1cnJlbnQgYmFja2VuZCB0byB0aGUgc2hhcmVkIG1lbW9yeSBh cnJheSAqLworc3RhdGljIHZvaWQKK0FkZEV2ZW50KFhMb2dSZWNQdHIgbHNuX3RvX3dhaXQpCit7 CisJU3BpbkxvY2tBY3F1aXJlKCZzdGF0ZS0+bXV0ZXgpOworCWlmIChzdGF0ZS0+YmFja2VuZF9t YXhpZCA8IE15QmFja2VuZElkKQorCQlzdGF0ZS0+YmFja2VuZF9tYXhpZCA9IE15QmFja2VuZElk OworCisJc3RhdGUtPndhaXRlZF9sc25bTXlCYWNrZW5kSWRdID0gbHNuX3RvX3dhaXQ7CisKKwlp ZiAobHNuX3RvX3dhaXQgPCBzdGF0ZS0+bWluX2xzbikKKwkJc3RhdGUtPm1pbl9sc24gPSBsc25f dG9fd2FpdDsKKwlTcGluTG9ja1JlbGVhc2UoJnN0YXRlLT5tdXRleCk7Cit9CisKKy8qCisgKiBE ZWxldGUgZXZlbnQgb2YgdGhlIGN1cnJlbnQgYmFja2VuZCBmcm9tIHRoZSBzaGFyZWQgbWVtb3J5 IGFycmF5LgorICoKKyAqIFRPRE86IENvbnNpZGVyIHN0YXRlIGNsZWFudXAgb24gYmFja2VuZCBm YWlsdXJlLgorICogQ2hlY2s6CisgKiAxKSBub21hbHxzbWFydHxmYXN0fGltbWVkaWF0ZSBzdG9w CisgKiAyKSBTSUdLSUxMIGFuZCBTSUdURVJNCisgKi8KK3N0YXRpYyB2b2lkCitEZWxldGVFdmVu dCh2b2lkKQoreworCWludAkJCWk7CisJWExvZ1JlY1B0cglsc25fdG9fZGVsZXRlID0gc3RhdGUt PndhaXRlZF9sc25bTXlCYWNrZW5kSWRdOworCisJc3RhdGUtPndhaXRlZF9sc25bTXlCYWNrZW5k SWRdID0gSW52YWxpZFhMb2dSZWNQdHI7CisKKwlTcGluTG9ja0FjcXVpcmUoJnN0YXRlLT5tdXRl eCk7CisKKwkvKiBJZiB3ZSBuZWVkIHRvIGNob29zZSB0aGUgbmV4dCBtaW5fbHNuLCB1cGRhdGUg c3RhdGUtPm1pbl9sc24gKi8KKwlpZiAoc3RhdGUtPm1pbl9sc24gPT0gbHNuX3RvX2RlbGV0ZSkK Kwl7CisJCXN0YXRlLT5taW5fbHNuID0gUEdfVUlOVDY0X01BWDsKKwkJZm9yIChpID0gMjsgaSA8 PSBzdGF0ZS0+YmFja2VuZF9tYXhpZDsgaSsrKQorCQkJaWYgKHN0YXRlLT53YWl0ZWRfbHNuW2ld ICE9IEludmFsaWRYTG9nUmVjUHRyICYmCisJCQkJc3RhdGUtPndhaXRlZF9sc25baV0gPCBzdGF0 ZS0+bWluX2xzbikKKwkJCQlzdGF0ZS0+bWluX2xzbiA9IHN0YXRlLT53YWl0ZWRfbHNuW2ldOwor CX0KKworCWlmIChzdGF0ZS0+YmFja2VuZF9tYXhpZCA9PSBNeUJhY2tlbmRJZCkKKwkJZm9yIChp ID0gKE15QmFja2VuZElkKTsgaSA+PSAyOyBpLS0pCisJCQlpZiAoc3RhdGUtPndhaXRlZF9sc25b aV0gIT0gSW52YWxpZFhMb2dSZWNQdHIpCisJCQl7CisJCQkJc3RhdGUtPmJhY2tlbmRfbWF4aWQg PSBpOworCQkJCWJyZWFrOworCQkJfQorCisJU3BpbkxvY2tSZWxlYXNlKCZzdGF0ZS0+bXV0ZXgp OworfQorCisvKgorICogUmVwb3J0IGFtb3VudCBvZiBzaGFyZWQgbWVtb3J5IHNwYWNlIG5lZWRl ZCBmb3IgV2FpdFN0YXRlCisgKi8KK1NpemUKK1dhaXRTaG1lbVNpemUodm9pZCkKK3sKKwlTaXpl CQlzaXplOworCisJc2l6ZSA9IG9mZnNldG9mKFdhaXRTdGF0ZSwgd2FpdGVkX2xzbik7CisJc2l6 ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKE1heEJhY2tlbmRzICsgMSwgc2l6ZW9mKFhMb2dS ZWNQdHIpKSk7CisJcmV0dXJuIHNpemU7Cit9CisKKy8qIEluaXQgYXJyYXkgb2YgZXZlbnRzIGlu IHNoYXJlZCBtZW1vcnkgKi8KK3ZvaWQKK1dhaXRTaG1lbUluaXQodm9pZCkKK3sKKwlib29sCQlm b3VuZDsKKwl1aW50MzIJCWk7CisKKwlzdGF0ZSA9IChXYWl0U3RhdGUgKikgU2htZW1Jbml0U3Ry dWN0KCJwZ193YWl0X2xzbiIsCisJCQkJCQkJCQkJICBXYWl0U2htZW1TaXplKCksCisJCQkJCQkJ CQkJICAmZm91bmQpOworCWlmICghZm91bmQpCisJeworCQlTcGluTG9ja0luaXQoJnN0YXRlLT5t dXRleCk7CisKKwkJZm9yIChpID0gMDsgaSA8IChNYXhCYWNrZW5kcyArIDEpOyBpKyspCisJCQlz dGF0ZS0+d2FpdGVkX2xzbltpXSA9IEludmFsaWRYTG9nUmVjUHRyOworCisJCXN0YXRlLT5iYWNr ZW5kX21heGlkID0gMDsKKwkJc3RhdGUtPm1pbl9sc24gPSBQR19VSU5UNjRfTUFYOworCX0KK30K KworLyogU2V0IGFsbCBsYXRjaGVzIGluIHNoYXJlZCBtZW1vcnkgdG8gc2lnbmFsIHRoYXQgbmV3 IExTTiBoYXMgYmVlbiByZXBsYXllZCAqLwordm9pZAorV2FpdFNldExhdGNoKFhMb2dSZWNQdHIg Y3VyX2xzbikKK3sKKwl1aW50MzIJCWk7CisJaW50IAkJYmFja2VuZF9tYXhpZDsKKwlQR1BST0MJ ICAgKmJhY2tlbmQ7CisKKwlTcGluTG9ja0FjcXVpcmUoJnN0YXRlLT5tdXRleCk7CisJYmFja2Vu ZF9tYXhpZCA9IHN0YXRlLT5iYWNrZW5kX21heGlkOworCVNwaW5Mb2NrUmVsZWFzZSgmc3RhdGUt Pm11dGV4KTsKKworCWZvciAoaSA9IDI7IGkgPD0gYmFja2VuZF9tYXhpZDsgaSsrKQorCXsKKwkJ YmFja2VuZCA9IEJhY2tlbmRJZEdldFByb2MoaSk7CisJCWlmIChzdGF0ZS0+d2FpdGVkX2xzbltp XSAhPSAwKQorCQl7CisJCQlpZiAoYmFja2VuZCAmJiBzdGF0ZS0+d2FpdGVkX2xzbltpXSA8PSBj dXJfbHNuKQorCQkJCVNldExhdGNoKCZiYWNrZW5kLT5wcm9jTGF0Y2gpOworCQl9CisJfQorfQor CisvKiBHZXQgbWluaW1hbCBMU04gdGhhdCB3aWxsIGJlIG5leHQgKi8KK1hMb2dSZWNQdHIKK0dl dE1pbldhaXQodm9pZCkKK3sKKwlyZXR1cm4gc3RhdGUtPm1pbl9sc247Cit9CisKKy8qCisgKiBP biBXQUlUIHVzZSBNeUxhdGNoIHRvIHdhaXQgdGlsbCBMU04gaXMgcmVwbGF5ZWQsCisgKiBwb3N0 bWFzdGVyIGRpZXMgb3IgdGltZW91dCBoYXBwZW5zLgorICovCitpbnQKK1dhaXRVdGlsaXR5KFhM b2dSZWNQdHIgbHNuLCBjb25zdCBmbG9hdDggc2VjcykKK3sKKwlYTG9nUmVjUHRyCWN1cl9sc24g PSBHZXRYTG9nUmVwbGF5UmVjUHRyKE5VTEwpOworCWludAkJCWxhdGNoX2V2ZW50czsKKwlmbG9h dDgJCWVuZHRpbWU7CisJdWludAkJcmVzID0gMDsKKworI2RlZmluZSBHZXROb3dGbG9hdCgpCSgo ZmxvYXQ4KSBHZXRDdXJyZW50VGltZXN0YW1wKCkgLyAxMDAwMDAwLjApCisJZW5kdGltZSA9IEdl dE5vd0Zsb2F0KCkgKyBzZWNzOworCitsYXRjaF9ldmVudHMgPSBXTF9USU1FT1VUIHwgV0xfRVhJ VF9PTl9QTV9ERUFUSDsKKworCWlmIChsc24gIT0gSW52YWxpZFhMb2dSZWNQdHIpCisJeworCQkv KiBKdXN0IGNoZWNrIGlmIHdlIHJlYWNoZWQgKi8KKwkJaWYgKGxzbiA8IGN1cl9sc24gfHwgc2Vj cyA8IDApCisJCQlyZXR1cm4gKGxzbiA8IGN1cl9sc24pOworCisJCWxhdGNoX2V2ZW50cyB8PSBX TF9MQVRDSF9TRVQ7CisJCUFkZEV2ZW50KGxzbik7CisJfQorCWVsc2UgaWYgKCFzZWNzKQorCQly ZXR1cm4gMTsKKworCWZvciAoOzspCisJeworCQlpbnQJCQlyYzsKKwkJZmxvYXQ4CQlkZWxheSA9 IDA7CisJCWxvbmcJCWRlbGF5X21zOworCisJCWlmIChzZWNzID4gMCkKKwkJCWRlbGF5ID0gZW5k dGltZSAtIEdldE5vd0Zsb2F0KCk7CisJCWVsc2UgaWYgKHNlY3MgPT0gMCkKKwkJCS8qCisJCQkq IElmIHdlIHdhaXQgZm9yZXZlciwgdGhlbiAxIG1pbnV0ZSB0aW1lb3V0IHRvIGNoZWNrCisJCQkq IGZvciBJbnRlcnVwdHMuCisJCQkqLworCQkJZGVsYXkgPSA2MDsKKworCQlpZiAoZGVsYXkgPiAw LjApCisJCQlkZWxheV9tcyA9IChsb25nKSBjZWlsKGRlbGF5ICogMTAwMC4wKTsKKwkJZWxzZQor CQkJYnJlYWs7CisKKwkJLyoKKwkJICogSWYgcmVjZWl2ZWQgYW4gaW50ZXJydXB0aW9uIGZyb20g Q0hFQ0tfRk9SX0lOVEVSUlVQVFMsCisJCSAqIHRoZW4gZGVsZXRlIHRoZSBjdXJyZW50IGV2ZW50 IGZyb20gYXJyYXkuCisJCSAqLworCQlpZiAoSW50ZXJydXB0UGVuZGluZykKKwkJeworCQkJaWYg KGxzbiAhPSBJbnZhbGlkWExvZ1JlY1B0cikKKwkJCQlEZWxldGVFdmVudCgpOworCQkJUHJvY2Vz c0ludGVycnVwdHMoKTsKKwkJfQorCisJCS8qIElmIHBvc3RtYXN0ZXIgZGllcywgZmluaXNoIGlt bWVkaWF0ZWx5ICovCisJCWlmICghUG9zdG1hc3RlcklzQWxpdmUoKSkKKwkJCWJyZWFrOworCisJ CXJjID0gV2FpdExhdGNoKE15TGF0Y2gsIGxhdGNoX2V2ZW50cywgZGVsYXlfbXMsCisJCQkJCSAg IFdBSVRfRVZFTlRfQ0xJRU5UX1JFQUQpOworCisJCWlmIChyYyAmIFdMX0xBVENIX1NFVCkKKwkJ CVJlc2V0TGF0Y2goTXlMYXRjaCk7CisKKwkJaWYgKGxzbiAmJiByYyAmIFdMX0xBVENIX1NFVCkK KwkJCWN1cl9sc24gPSBHZXRYTG9nUmVwbGF5UmVjUHRyKE5VTEwpOworCisJCS8qIElmIExTTiBo YXMgYmVlbiByZXBsYXllZCAqLworCQlpZiAobHNuICYmIGxzbiA8PSBjdXJfbHNuKQorCQkJYnJl YWs7CisJfQorCisJaWYgKGxzbiAhPSBJbnZhbGlkWExvZ1JlY1B0cikKKwkJRGVsZXRlRXZlbnQo KTsKKworCWlmIChsc24gIT0gSW52YWxpZFhMb2dSZWNQdHIgJiYgbHNuID4gY3VyX2xzbikKKwkJ ZWxvZyhOT1RJQ0UsIkxTTiBpcyBub3QgcmVhY2hlZC4gVHJ5IHRvIGluY3JlYXNlIHdhaXQgdGlt ZS4iKTsKKwllbHNlCisJCXJlcyA9IDE7CisKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogR2V0 IHRoZSBhbW91bnQgb2Ygc2Vjb25kcyBsZWZ0IHRpbGwgdGhlIHNwZWNpZmllZCB0aW1lLgorICov CitmbG9hdDgKK1dhaXRUaW1lUmVzb2x2ZShDb25zdCAqdGltZSkKK3sKKwlpbnQJCQlyZXQ7CisJ ZmxvYXQ4CQl2YWw7CisJT2lkCQkJdHlwZXNbXSA9IHsgdGltZS0+Y29uc3R0eXBlIH07CisJRGF0 dW0JCXZhbHVlc1tdID0geyB0aW1lLT5jb25zdHZhbHVlIH07CisJY2hhcgkJbnVsbHNbXSA9IHsg IiAiIH07CisJRGF0dW0JCXJlc3VsdDsKKwlib29sCQlpc251bGw7CisKKwlTUElfY29ubmVjdCgp OworCisJaWYgKHRpbWUtPmNvbnN0dHlwZSA9PSAxMDgzKQorCQlyZXQgPSBTUElfZXhlY3V0ZV93 aXRoX2FyZ3MoInNlbGVjdCBleHRyYWN0IChlcG9jaCBmcm9tICgkMSAtIG5vdygpOjp0aW1lKSki LAorCQkJCQkJCQkJMSwgdHlwZXMsIHZhbHVlcywgbnVsbHMsIHRydWUsIDApOworCWVsc2UgaWYg KHRpbWUtPmNvbnN0dHlwZSA9PSAxMjY2KQorCQlyZXQgPSBTUElfZXhlY3V0ZV93aXRoX2FyZ3Mo InNlbGVjdCBleHRyYWN0IChlcG9jaCBmcm9tICh0aW1lem9uZSgnVVRDJywkMSk6OnRpbWUgLSB0 aW1lem9uZSgnVVRDJywgbm93KCk6OnRpbWV0eik6OnRpbWUpKSIsCisJCQkJCQkJCQkxLCB0eXBl cywgdmFsdWVzLCBudWxscywgdHJ1ZSwgMCk7CisJZWxzZQorCQlyZXQgPSBTUElfZXhlY3V0ZV93 aXRoX2FyZ3MoInNlbGVjdCBleHRyYWN0IChlcG9jaCBmcm9tICgkMSAtIG5vdygpKSkiLAorCQkJ CQkJCQkJMSwgdHlwZXMsIHZhbHVlcywgbnVsbHMsIHRydWUsIDApOworCisJQXNzZXJ0KHJldCA+ PSAwKTsKKwlyZXN1bHQgPSBTUElfZ2V0YmludmFsKFNQSV90dXB0YWJsZS0+dmFsc1swXSwKKwkJ CQkJCSAgIFNQSV90dXB0YWJsZS0+dHVwZGVzYywKKwkJCQkJCSAgIDEsICZpc251bGwpOworCisJ QXNzZXJ0KCFpc251bGwpOworCXZhbCA9IERhdHVtR2V0RmxvYXQ4KHJlc3VsdCk7CisKKwllbG9n KElORk8sICJ0aW1lOiAlZiIsIHZhbCk7CisKKwlTUElfZmluaXNoKCk7CisJcmV0dXJuIHZhbDsK K30KKworLyogSW1wbGVtZW50YXRpb24gb2YgV0FJVCBGT1IgKi8KK2ludAorV2FpdE1haW4oV2Fp dFN0bXQgKnN0bXQsIERlc3RSZWNlaXZlciAqZGVzdCkKK3sKKwlMaXN0Q2VsbCAgICpldmVudHM7 CisJVHVwbGVEZXNjCXR1cGRlc2M7CisJVHVwT3V0cHV0U3RhdGUgKnRzdGF0ZTsKKwlmbG9hdDgJ CWRlbGF5ID0gMDsKKwlmbG9hdDgJCWZpbmFsX2RlbGF5ID0gMDsKKwlYTG9nUmVjUHRyCWxzbiA9 IEludmFsaWRYTG9nUmVjUHRyOworCVhMb2dSZWNQdHIJZmluYWxfbHNuID0gSW52YWxpZFhMb2dS ZWNQdHI7CisJYm9vbAkJaGFzX2xzbiA9IGZhbHNlOworCWJvb2wJCXdhaXRfZm9yZXZlciA9IHRy dWU7CisJaW50CQkJcmVzID0gMDsKKworCWlmIChzdG10LT5zdHJhdGVneSA9PSBXQUlUX0ZPUl9B TlkpCisJeworCQkvKiBQcmVwYXJlIHRvIGZpbmQgbWluaW11bSBMU04gYW5kIGRlbGF5ICovCisJ CWZpbmFsX2RlbGF5ID0gREJMX01BWDsKKwkJZmluYWxfbHNuID0gUEdfVUlOVDY0X01BWDsKKwl9 CisKKwkvKiBFeHRyYWN0IG9wdGlvbnMgZnJvbSB0aGUgc3RhdGVtZW50IG5vZGUgdHJlZSAqLwor CWZvcmVhY2goZXZlbnRzLCBzdG10LT5ldmVudHMpCisJeworCQlXYWl0U3RtdCAgICpldmVudCA9 IChXYWl0U3RtdCAqKSBsZmlyc3QoZXZlbnRzKTsKKworCQkvKiBMU04gdG8gd2FpdCBmb3IgKi8K KwkJaWYgKGV2ZW50LT5sc24pCisJCXsKKwkJCWhhc19sc24gPSB0cnVlOworCQkJbHNuID0gRGF0 dW1HZXRMU04oCisJCQkJCQlEaXJlY3RGdW5jdGlvbkNhbGwxKHBnX2xzbl9pbiwKKwkJCQkJCQlD U3RyaW5nR2V0RGF0dW0oZXZlbnQtPmxzbikpKTsKKworCQkJLyoKKwkJCSAqIFdoZW4gd2FpdGlu ZyBmb3IgQUxMLCBzZWxlY3QgbWF4IExTTiB0byB3YWl0IGZvci4KKwkJCSAqIFdoZW4gd2FpdGlu ZyBmb3IgQU5ZLCBzZWxlY3QgbWluIExTTiB0byB3YWl0IGZvci4KKwkJCSAqLworCQkJaWYgKChz dG10LT5zdHJhdGVneSA9PSBXQUlUX0ZPUl9BTEwgJiYgZmluYWxfbHNuIDw9IGxzbikgfHwKKwkJ CQkoc3RtdC0+c3RyYXRlZ3kgPT0gV0FJVF9GT1JfQU5ZICYmIGZpbmFsX2xzbiA+IGxzbikpCisJ CQl7CisJCQkJZmluYWxfbHNuID0gbHNuOworCQkJfQorCQl9CisKKwkJLyogVGltZSBkZWxheSB0 byB3YWl0IGZvciAqLworCQlpZiAoZXZlbnQtPnRpbWUgfHwgZXZlbnQtPmRlbGF5KQorCQl7CisJ CQl3YWl0X2ZvcmV2ZXIgPSBmYWxzZTsKKworCQkJaWYgKGV2ZW50LT5kZWxheSkKKwkJCQlkZWxh eSA9IGV2ZW50LT5kZWxheSAvIDEwMDAuMDsKKworCQkJaWYgKGV2ZW50LT50aW1lKQorCQkJewor CQkJCUNvbnN0ICp0aW1lID0gKENvbnN0ICopIGV2ZW50LT50aW1lOworCQkJCWRlbGF5ID0gV2Fp dFRpbWVSZXNvbHZlKHRpbWUpOworCQkJfQorCisJCQkvKgorCQkJICogV2hlbiB3YWl0aW5nIGZv ciBBTEwsIHNlbGVjdCBtYXggZGVsYXkgdG8gd2FpdCBmb3IuCisJCQkgKiBXaGVuIHdhaXRpbmcg Zm9yIEFOWSwgc2VsZWN0IG1pbiBkZWxheSB0byB3YWl0IGZvci4KKwkJCSAqLworCQkJaWYgKChz dG10LT5zdHJhdGVneSA9PSBXQUlUX0ZPUl9BTEwgJiYgZmluYWxfZGVsYXkgPD0gZGVsYXkpIHx8 CisJCQkJKHN0bXQtPnN0cmF0ZWd5ID09IFdBSVRfRk9SX0FOWSAmJiBmaW5hbF9kZWxheSA+IGRl bGF5KSkKKwkJCXsKKwkJCQlmaW5hbF9kZWxheSA9IGRlbGF5OworCQkJfQorCQl9CisJfQorCWlm ICh3YWl0X2ZvcmV2ZXIpCisJCWZpbmFsX2RlbGF5ID0gMDsKKwlpZiAoIWhhc19sc24pCisJCWZp bmFsX2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOworCisJcmVzID0gV2FpdFV0aWxpdHkoZmluYWxf bHNuLCBmaW5hbF9kZWxheSk7CisKKwkvKiBOZWVkIGEgdHVwbGUgZGVzY3JpcHRvciByZXByZXNl bnRpbmcgYSBzaW5nbGUgVEVYVCBjb2x1bW4gKi8KKwl0dXBkZXNjID0gQ3JlYXRlVGVtcGxhdGVU dXBsZURlc2MoMSk7CisJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAx LCAiTFNOIHJlYWNoZWQiLCBURVhUT0lELCAtMSwgMCk7CisJLyogUHJlcGFyZSBmb3IgcHJvamVj dGlvbiBvZiB0dXBsZXMgKi8KKwl0c3RhdGUgPSBiZWdpbl90dXBfb3V0cHV0X3R1cGRlc2MoZGVz dCwgdHVwZGVzYywgJlRUU09wc01pbmltYWxUdXBsZSk7CisKKwkvKiBTZW5kIGl0ICovCisJZG9f dGV4dF9vdXRwdXRfb25lbGluZSh0c3RhdGUsIHJlcz8idCI6ImYiKTsKKwllbmRfdHVwX291dHB1 dCh0c3RhdGUpOworCXJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rl cy9vdXRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwppbmRleCBmNGFlY2Rj YmNkLi40YzJjMjczNWUyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5j CisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKQEAgLTI3NjIsNiArMjc2MiwxOCBA QCBfb3V0RGVmRWxlbShTdHJpbmdJbmZvIHN0ciwgY29uc3QgRGVmRWxlbSAqbm9kZSkKIAlXUklU RV9MT0NBVElPTl9GSUVMRChsb2NhdGlvbik7CiB9CiAKK3N0YXRpYyB2b2lkCitfb3V0V2FpdFN0 bXQoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFdhaXRTdG10ICpub2RlKQoreworCVdSSVRFX05PREVf VFlQRSgiV0FJVFNUTVQiKTsKKworCVdSSVRFX1NUUklOR19GSUVMRChsc24pOworCVdSSVRFX0lO VF9GSUVMRChkZWxheSk7CisJV1JJVEVfTk9ERV9GSUVMRChldmVudHMpOworCVdSSVRFX05PREVf RklFTEQodGltZSk7CisJV1JJVEVfRU5VTV9GSUVMRChzdHJhdGVneSwgV2FpdEZvclN0cmF0ZWd5 KTsKK30KKwogc3RhdGljIHZvaWQKIF9vdXRUYWJsZUxpa2VDbGF1c2UoU3RyaW5nSW5mbyBzdHIs IGNvbnN0IFRhYmxlTGlrZUNsYXVzZSAqbm9kZSkKIHsKQEAgLTQzMDgsNiArNDMyMCw5IEBAIG91 dE5vZGUoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IHZvaWQgKm9iaikKIAkJCWNhc2UgVF9QYXJ0aXRp b25SYW5nZURhdHVtOgogCQkJCV9vdXRQYXJ0aXRpb25SYW5nZURhdHVtKHN0ciwgb2JqKTsKIAkJ CQlicmVhazsKKwkJCWNhc2UgVF9XYWl0U3RtdDoKKwkJCQlfb3V0V2FpdFN0bXQoc3RyLCBvYmop OworCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9w YXJzZXIvYW5hbHl6ZS5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYwppbmRleCA2Njc2 NDEyODQyLi4wOGUyNjQ5YjlkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvYW5hbHl6 ZS5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9hbmFseXplLmMKQEAgLTc4LDYgKzc4LDcgQEAg c3RhdGljIFF1ZXJ5ICp0cmFuc2Zvcm1DcmVhdGVUYWJsZUFzU3RtdChQYXJzZVN0YXRlICpwc3Rh dGUsCiAJCQkJCQkJCQkJIENyZWF0ZVRhYmxlQXNTdG10ICpzdG10KTsKIHN0YXRpYyBRdWVyeSAq dHJhbnNmb3JtQ2FsbFN0bXQoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCQlDYWxsU3RtdCAq c3RtdCk7CitzdGF0aWMgdm9pZCB0cmFuc2Zvcm1XYWl0Rm9yU3RtdChQYXJzZVN0YXRlICpwc3Rh dGUsIFdhaXRTdG10ICpzdG10KTsKIHN0YXRpYyB2b2lkIHRyYW5zZm9ybUxvY2tpbmdDbGF1c2Uo UGFyc2VTdGF0ZSAqcHN0YXRlLCBRdWVyeSAqcXJ5LAogCQkJCQkJCQkgICBMb2NraW5nQ2xhdXNl ICpsYywgYm9vbCBwdXNoZWREb3duKTsKICNpZmRlZiBSQVdfRVhQUkVTU0lPTl9DT1ZFUkFHRV9U RVNUCkBAIC0zMjYsNyArMzI3LDIwIEBAIHRyYW5zZm9ybVN0bXQoUGFyc2VTdGF0ZSAqcHN0YXRl LCBOb2RlICpwYXJzZVRyZWUpCiAJCQlyZXN1bHQgPSB0cmFuc2Zvcm1DYWxsU3RtdChwc3RhdGUs CiAJCQkJCQkJCQkgICAoQ2FsbFN0bXQgKikgcGFyc2VUcmVlKTsKIAkJCWJyZWFrOwotCisJCWNh c2UgVF9XYWl0U3RtdDoKKwkJCXRyYW5zZm9ybVdhaXRGb3JTdG10KHBzdGF0ZSwgKFdhaXRTdG10 ICopIHBhcnNlVHJlZSk7CisJCQlyZXN1bHQgPSBtYWtlTm9kZShRdWVyeSk7CisJCQlyZXN1bHQt PmNvbW1hbmRUeXBlID0gQ01EX1VUSUxJVFk7CisJCQlyZXN1bHQtPnV0aWxpdHlTdG10ID0gKE5v ZGUgKikgcGFyc2VUcmVlOworCQkJYnJlYWs7CisJCWNhc2UgVF9UcmFuc2FjdGlvblN0bXQ6CisJ CQl7CisJCQkJVHJhbnNhY3Rpb25TdG10ICpzdG10ID0gKFRyYW5zYWN0aW9uU3RtdCAqKSBwYXJz ZVRyZWU7CisJCQkJaWYgKChzdG10LT5raW5kID09IFRSQU5TX1NUTVRfQkVHSU4gfHwKKwkJCQkJ CXN0bXQtPmtpbmQgPT0gVFJBTlNfU1RNVF9TVEFSVCkgJiYgc3RtdC0+d2FpdCkKKwkJCQkJdHJh bnNmb3JtV2FpdEZvclN0bXQocHN0YXRlLCAoV2FpdFN0bXQgKikgc3RtdC0+d2FpdCk7CisJCQl9 CisJCQkvKiBubyBicmVhayBoZXJlIC0gd2Ugd2FudCB0byBmYWxsIHRocm91Z2ggdG8gdGhlIGRl ZmF1bHQgKi8KIAkJZGVmYXVsdDoKIAogCQkJLyoKQEAgLTI5ODEsNiArMjk5NSwyMyBAQCBhcHBs eUxvY2tpbmdDbGF1c2UoUXVlcnkgKnFyeSwgSW5kZXggcnRpbmRleCwKIAlxcnktPnJvd01hcmtz ID0gbGFwcGVuZChxcnktPnJvd01hcmtzLCByYyk7CiB9CiAKKy8qCisgKiB0cmFuc2Zvcm1XYWl0 Rm9yU3RtdCAtCisgKgl0cmFuc2Zvcm0gdGhlIFdBSVQgRk9SIGNsYXVzZSBvZiB0aGUgQkVHSU4g c3RhdGVtZW50CisgKgl0cmFuc2Zvcm0gdGhlIFdBSVQgRk9SIHN0YXRlbWVudCAoVE9ETzogcmVt b3ZlIHRoaXMgbGluZSBpZiB3ZSBkb24ndCBrZWVwIGl0KQorICovCitzdGF0aWMgdm9pZAordHJh bnNmb3JtV2FpdEZvclN0bXQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBXYWl0U3RtdCAqc3RtdCkKK3sK KwlMaXN0Q2VsbCAgICpldmVudHM7CisKKwlmb3JlYWNoKGV2ZW50cywgc3RtdC0+ZXZlbnRzKQor CXsKKwkJV2FpdFN0bXQgICAqZXZlbnQgPSAoV2FpdFN0bXQgKikgbGZpcnN0KGV2ZW50cyk7CisJ CWV2ZW50LT50aW1lID0gdHJhbnNmb3JtRXhwcihwc3RhdGUsIGV2ZW50LT50aW1lLCBFWFBSX0tJ TkRfT1RIRVIpOworCX0KK30KKwogLyoKICAqIENvdmVyYWdlIHRlc3RpbmcgZm9yIHJhd19leHBy ZXNzaW9uX3RyZWVfd2Fsa2VyKCkuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2Vy L2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5kZXggMzQ0OWMyNmJkMS4uOTE3 YmRhNTFhYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQorKysgYi9zcmMv YmFja2VuZC9wYXJzZXIvZ3JhbS55CkBAIC0yNzYsNyArMjc2LDcgQEAgc3RhdGljIE5vZGUgKm1h a2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUg KnF1ZXJ5KTsKIAkJU2VjTGFiZWxTdG10IFNlbGVjdFN0bXQgVHJhbnNhY3Rpb25TdG10IFRydW5j YXRlU3RtdAogCQlVbmxpc3RlblN0bXQgVXBkYXRlU3RtdCBWYWN1dW1TdG10CiAJCVZhcmlhYmxl UmVzZXRTdG10IFZhcmlhYmxlU2V0U3RtdCBWYXJpYWJsZVNob3dTdG10Ci0JCVZpZXdTdG10IENo ZWNrUG9pbnRTdG10IENyZWF0ZUNvbnZlcnNpb25TdG10CisJCVZpZXdTdG10IFdhaXRTdG10IENo ZWNrUG9pbnRTdG10IENyZWF0ZUNvbnZlcnNpb25TdG10CiAJCURlYWxsb2NhdGVTdG10IFByZXBh cmVTdG10IEV4ZWN1dGVTdG10CiAJCURyb3BPd25lZFN0bXQgUmVhc3NpZ25Pd25lZFN0bXQKIAkJ QWx0ZXJUU0NvbmZpZ3VyYXRpb25TdG10IEFsdGVyVFNEaWN0aW9uYXJ5U3RtdApAQCAtNDg4LDcg KzQ4OCw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxu YW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAldHlwZSA8bGlzdD4Jcm93IGV4cGxp Y2l0X3JvdyBpbXBsaWNpdF9yb3cgdHlwZV9saXN0IGFycmF5X2V4cHJfbGlzdAogJXR5cGUgPG5v ZGU+CWNhc2VfZXhwciBjYXNlX2FyZyB3aGVuX2NsYXVzZSBjYXNlX2RlZmF1bHQKICV0eXBlIDxs aXN0Pgl3aGVuX2NsYXVzZV9saXN0Ci0ldHlwZSA8aXZhbD4Jc3ViX3R5cGUgb3B0X21hdGVyaWFs aXplZAorJXR5cGUgPGl2YWw+CXN1Yl90eXBlIHdhaXRfc3RyYXRlZ3kgb3B0X21hdGVyaWFsaXpl ZAogJXR5cGUgPHZhbHVlPglOdW1lcmljT25seQogJXR5cGUgPGxpc3Q+CU51bWVyaWNPbmx5X2xp c3QKICV0eXBlIDxhbGlhcz4JYWxpYXNfY2xhdXNlIG9wdF9hbGlhc19jbGF1c2UKQEAgLTU5Miw2 ICs1OTIsOCBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVs bmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogJXR5cGUgPHBhcnRib3VuZHNwZWM+ IFBhcnRpdGlvbkJvdW5kU3BlYwogJXR5cGUgPGxpc3Q+CQloYXNoX3BhcnRib3VuZAogJXR5cGUg PGRlZmVsdD4JCWhhc2hfcGFydGJvdW5kX2VsZW0KKyV0eXBlIDxsaXN0PgkJd2FpdF9saXN0Cisl dHlwZSA8bm9kZT4JCVdhaXRFdmVudCB3YWl0X2ZvcgogCiAvKgogICogTm9uLWtleXdvcmQgdG9r ZW4gdHlwZXMuICBUaGVzZSBhcmUgaGFyZC13aXJlZCBpbnRvIHRoZSAiZmxleCIgbGV4ZXIuCkBA IC02NjEsNyArNjYzLDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNo YXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAogCUxBQkVMIExBTkdV QUdFIExBUkdFX1AgTEFTVF9QIExBVEVSQUxfUAogCUxFQURJTkcgTEVBS1BST09GIExFQVNUIExF RlQgTEVWRUwgTElLRSBMSU1JVCBMSVNURU4gTE9BRCBMT0NBTAotCUxPQ0FMVElNRSBMT0NBTFRJ TUVTVEFNUCBMT0NBVElPTiBMT0NLX1AgTE9DS0VEIExPR0dFRAorCUxPQ0FMVElNRSBMT0NBTFRJ TUVTVEFNUCBMT0NBVElPTiBMT0NLX1AgTE9DS0VEIExPR0dFRCBMU04KIAogCU1BUFBJTkcgTUFU Q0ggTUFURVJJQUxJWkVEIE1BWFZBTFVFIE1FVEhPRCBNSU5VVEVfUCBNSU5WQUxVRSBNT0RFIE1P TlRIX1AgTU9WRQogCkBAIC02OTIsNyArNjk0LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNp dmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsK IAlTVUJTQ1JJUFRJT04gU1VCU1RSSU5HIFNVUFBPUlQgU1lNTUVUUklDIFNZU0lEIFNZU1RFTV9Q CiAKIAlUQUJMRSBUQUJMRVMgVEFCTEVTQU1QTEUgVEFCTEVTUEFDRSBURU1QIFRFTVBMQVRFIFRF TVBPUkFSWSBURVhUX1AgVEhFTgotCVRJRVMgVElNRSBUSU1FU1RBTVAgVE8gVFJBSUxJTkcgVFJB TlNBQ1RJT04gVFJBTlNGT1JNCisJVElFUyBUSU1FIFRJTUVPVVQgVElNRVNUQU1QIFRPIFRSQUlM SU5HIFRSQU5TQUNUSU9OIFRSQU5TRk9STQogCVRSRUFUIFRSSUdHRVIgVFJJTSBUUlVFX1AKIAlU UlVOQ0FURSBUUlVTVEVEIFRZUEVfUCBUWVBFU19QCiAKQEAgLTcwMiw3ICs3MDQsOCBAQCBzdGF0 aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxp YXNlcywgTm9kZSAqcXVlcnkpOwogCVZBQ1VVTSBWQUxJRCBWQUxJREFURSBWQUxJREFUT1IgVkFM VUVfUCBWQUxVRVMgVkFSQ0hBUiBWQVJJQURJQyBWQVJZSU5HCiAJVkVSQk9TRSBWRVJTSU9OX1Ag VklFVyBWSUVXUyBWT0xBVElMRQogCi0JV0hFTiBXSEVSRSBXSElURVNQQUNFX1AgV0lORE9XIFdJ VEggV0lUSElOIFdJVEhPVVQgV09SSyBXUkFQUEVSIFdSSVRFCisJV0FJVCBXSEVOIFdIRVJFIFdI SVRFU1BBQ0VfUCBXSU5ET1cKKwlXSVRIIFdJVEhJTiBXSVRIT1VUIFdPUksgV1JBUFBFUiBXUklU RQogCiAJWE1MX1AgWE1MQVRUUklCVVRFUyBYTUxDT05DQVQgWE1MRUxFTUVOVCBYTUxFWElTVFMg WE1MRk9SRVNUIFhNTE5BTUVTUEFDRVMKIAlYTUxQQVJTRSBYTUxQSSBYTUxST09UIFhNTFNFUklB TElaRSBYTUxUQUJMRQpAQCAtOTU2LDYgKzk1OSw3IEBAIHN0bXQgOgogCQkJfCBWYXJpYWJsZVNl dFN0bXQKIAkJCXwgVmFyaWFibGVTaG93U3RtdAogCQkJfCBWaWV3U3RtdAorCQkJfCBXYWl0U3Rt dAogCQkJfCAvKkVNUFRZKi8KIAkJCQl7ICQkID0gTlVMTDsgfQogCQk7CkBAIC05OTQ2LDE4ICs5 OTUwLDIwIEBAIFRyYW5zYWN0aW9uU3RtdDoKIAkJCQkJbi0+Y2hhaW4gPSAkMzsKIAkJCQkJJCQg PSAoTm9kZSAqKW47CiAJCQkJfQotCQkJfCBCRUdJTl9QIG9wdF90cmFuc2FjdGlvbiB0cmFuc2Fj dGlvbl9tb2RlX2xpc3Rfb3JfZW1wdHkKKwkJCXwgQkVHSU5fUCBvcHRfdHJhbnNhY3Rpb24gdHJh bnNhY3Rpb25fbW9kZV9saXN0X29yX2VtcHR5IHdhaXRfZm9yCiAJCQkJewogCQkJCQlUcmFuc2Fj dGlvblN0bXQgKm4gPSBtYWtlTm9kZShUcmFuc2FjdGlvblN0bXQpOwogCQkJCQluLT5raW5kID0g VFJBTlNfU1RNVF9CRUdJTjsKIAkJCQkJbi0+b3B0aW9ucyA9ICQzOworCQkJCQluLT53YWl0ID0g JDQ7CiAJCQkJCSQkID0gKE5vZGUgKiluOwogCQkJCX0KLQkJCXwgU1RBUlQgVFJBTlNBQ1RJT04g dHJhbnNhY3Rpb25fbW9kZV9saXN0X29yX2VtcHR5CisJCQl8IFNUQVJUIFRSQU5TQUNUSU9OIHRy YW5zYWN0aW9uX21vZGVfbGlzdF9vcl9lbXB0eSB3YWl0X2ZvcgogCQkJCXsKIAkJCQkJVHJhbnNh Y3Rpb25TdG10ICpuID0gbWFrZU5vZGUoVHJhbnNhY3Rpb25TdG10KTsKIAkJCQkJbi0+a2luZCA9 IFRSQU5TX1NUTVRfU1RBUlQ7CiAJCQkJCW4tPm9wdGlvbnMgPSAkMzsKKwkJCQkJbi0+d2FpdCA9 ICQ0OwogCQkJCQkkJCA9IChOb2RlICopbjsKIAkJCQl9CiAJCQl8IENPTU1JVCBvcHRfdHJhbnNh Y3Rpb24gb3B0X3RyYW5zYWN0aW9uX2NoYWluCkBAIC0xNDE4Nyw2ICsxNDE5Myw3NCBAQCB4bWxf cGFzc2luZ19tZWNoOgogCQkJfCBCWSBWQUxVRV9QCiAJCTsKIAorLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCisgKgorICoJCVFVRVJZOgorICoJCQkJV0FJVCBGT1IgPGV2ZW50PiBbLCA8ZXZlbnQ+IC4u Ll0KKyAqCQkJCWV2ZW50IGlzIG9uZSBvZjoKKyAqCQkJCQlMU04gdmFsdWUKKyAqCQkJCQlUSU1F T1VUIGRlbGF5CisgKgkJCQkJdGltZXN0YW1wCisgKgorICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor V2FpdFN0bXQ6CisJCQlXQUlUIEZPUiB3YWl0X3N0cmF0ZWd5IHdhaXRfbGlzdAorCQkJCXsKKwkJ CQkJV2FpdFN0bXQgKm4gPSBtYWtlTm9kZShXYWl0U3RtdCk7CisJCQkJCW4tPnN0cmF0ZWd5ID0g JDM7CisJCQkJCW4tPmV2ZW50cyA9ICQ0OworCQkJCQkkJCA9IChOb2RlICopbjsKKwkJCQl9CisJ CQk7Cit3YWl0X2ZvcjoKKwkJCVdBSVQgRk9SIHdhaXRfc3RyYXRlZ3kgd2FpdF9saXN0CisJCQkJ eworCQkJCQlXYWl0U3RtdCAqbiA9IG1ha2VOb2RlKFdhaXRTdG10KTsKKwkJCQkJbi0+c3RyYXRl Z3kgPSAkMzsKKwkJCQkJbi0+ZXZlbnRzID0gJDQ7CisJCQkJCSQkID0gKE5vZGUgKiluOworCQkJ CX0KKwkJCXwgLyogRU1QVFkgKi8JCXsgJCQgPSBOVUxMOyB9OworCit3YWl0X3N0cmF0ZWd5Ogor CQkJQUxMCQkJCQl7ICQkID0gV0FJVF9GT1JfQUxMOyB9CisJCQl8IEFOWQkJCQl7ICQkID0gV0FJ VF9GT1JfQU5ZOyB9CisJCQl8IC8qIEVNUFRZICovCQl7ICQkID0gV0FJVF9GT1JfQUxMOyB9CisJ CTsKKword2FpdF9saXN0OgorCQkJV2FpdEV2ZW50CQkJCQl7ICQkID0gbGlzdF9tYWtlMSgkMSk7 IH0KKwkJCXwgd2FpdF9saXN0ICcsJyBXYWl0RXZlbnQJeyAkJCA9IGxhcHBlbmQoJDEsICQzKTsg fQorCQkJfCB3YWl0X2xpc3QgV2FpdEV2ZW50CQl7ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9CisJ CTsKKworV2FpdEV2ZW50OgorCQkJTFNOIFNjb25zdAorCQkJCXsKKwkJCQkJV2FpdFN0bXQgKm4g PSBtYWtlTm9kZShXYWl0U3RtdCk7CisJCQkJCW4tPmxzbiA9ICQyOworCQkJCQluLT5kZWxheSA9 IDA7CisJCQkJCW4tPnRpbWUgPSBOVUxMOworCQkJCQkkJCA9IChOb2RlICopbjsKKwkJCQl9CisJ CQl8IFRJTUVPVVQgSWNvbnN0CisJCQkJeworCQkJCQlXYWl0U3RtdCAqbiA9IG1ha2VOb2RlKFdh aXRTdG10KTsKKwkJCQkJbi0+bHNuID0gTlVMTDsKKwkJCQkJbi0+ZGVsYXkgPSAkMjsKKwkJCQkJ bi0+dGltZSA9IE5VTEw7CisJCQkJCSQkID0gKE5vZGUgKiluOworCQkJCX0KKwkJCXwgQ29uc3RE YXRldGltZSBTY29uc3QKKwkJCQl7CisJCQkJCVdhaXRTdG10ICpuID0gbWFrZU5vZGUoV2FpdFN0 bXQpOworCQkJCQluLT5sc24gPSBOVUxMOworCQkJCQluLT5kZWxheSA9IDA7CisJCQkJCW4tPnRp bWUgPSBtYWtlU3RyaW5nQ29uc3RDYXN0KCQyLCBAMiwgJDEpOworCQkJCQkkJCA9IChOb2RlICop bjsKKwkJCQl9CisJCQk7CisKIAogLyoKICAqIEFnZ3JlZ2F0ZSBkZWNvcmF0aW9uIGNsYXVzZXMK QEAgLTE1MzM4LDYgKzE1NDEyLDcgQEAgdW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJfCBMT0NLX1AK IAkJCXwgTE9DS0VECiAJCQl8IExPR0dFRAorCQkJfCBMU04KIAkJCXwgTUFQUElORwogCQkJfCBN QVRDSAogCQkJfCBNQVRFUklBTElaRUQKQEAgLTE1NDY1LDYgKzE1NTQwLDcgQEAgdW5yZXNlcnZl ZF9rZXl3b3JkOgogCQkJfCBURU1QT1JBUlkKIAkJCXwgVEVYVF9QCiAJCQl8IFRJRVMKKwkJCXwg VElNRU9VVAogCQkJfCBUUkFOU0FDVElPTgogCQkJfCBUUkFOU0ZPUk0KIAkJCXwgVFJJR0dFUgpA QCAtMTU0OTEsNiArMTU1NjcsNyBAQCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IFZJRVcKIAkJ CXwgVklFV1MKIAkJCXwgVk9MQVRJTEUKKwkJCXwgV0FJVAogCQkJfCBXSElURVNQQUNFX1AKIAkJ CXwgV0lUSElOCiAJCQl8IFdJVEhPVVQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL2lwY2kuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwppbmRleCA0MjdiMGQ1 OWNkLi5iYjhhZjM0OTgwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNp LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCkBAIC0yMiw2ICsyMiw3IEBA CiAjaW5jbHVkZSAiYWNjZXNzL3N1YnRyYW5zLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3R3b3BoYXNl LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKKyNpbmNsdWRlICJjb21tYW5kcy93YWl0 LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVk ZSAicG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCkBAIC0xNDcsNiArMTQ4LDcgQEAgQ3JlYXRlU2hh cmVkTWVtb3J5QW5kU2VtYXBob3Jlcyh2b2lkKQogCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgQlRy ZWVTaG1lbVNpemUoKSk7CiAJCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTeW5jU2NhblNobWVtU2l6 ZSgpKTsKIAkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIEFzeW5jU2htZW1TaXplKCkpOworCQlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgV2FpdFNobWVtU2l6ZSgpKTsKICNpZmRlZiBFWEVDX0JBQ0tFTkQK IAkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFNobWVtQmFja2VuZEFycmF5U2l6ZSgpKTsKICNlbmRp ZgpAQCAtMjY0LDYgKzI2NiwxMSBAQCBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKHZv aWQpCiAJU3luY1NjYW5TaG1lbUluaXQoKTsKIAlBc3luY1NobWVtSW5pdCgpOwogCisJLyoKKwkg KiBJbml0IGFycmF5IG9mIExhdGNoZXMgaW4gc2hhcmVkIG1lbW9yeSBmb3IgV0FJVAorCSAqLwor CVdhaXRTaG1lbUluaXQoKTsKKwogI2lmZGVmIEVYRUNfQkFDS0VORAogCiAJLyoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5 LmMKaW5kZXggYjFmN2Y2ZTJkMC4uNzAwYTEzZjA1YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dGNvcC91dGlsaXR5LmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKQEAgLTE1LDYg KzE1LDcgQEAKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIK KyNpbmNsdWRlIDxmbG9hdC5oPgogCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgog I2luY2x1ZGUgImFjY2Vzcy9yZWxvcHRpb25zLmgiCkBAIC01Nyw2ICs1OCw3IEBACiAjaW5jbHVk ZSAiY29tbWFuZHMvdXNlci5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgogI2luY2x1 ZGUgImNvbW1hbmRzL3ZpZXcuaCIKKyNpbmNsdWRlICJjb21tYW5kcy93YWl0LmgiCiAjaW5jbHVk ZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3V0aWxjbWQuaCIKICNpbmNs dWRlICJwb3N0bWFzdGVyL2Jnd3JpdGVyLmgiCkBAIC03MCw2ICs3Miw5IEBACiAjaW5jbHVkZSAi dXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAidXRp bHMvc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJleGVjdXRvci9zcGkuaCIKKyNpbmNsdWRlICJ1dGls cy9mbWdycHJvdG9zLmgiCisjaW5jbHVkZSAidXRpbHMvcGdfbHNuLmgiCiAKIC8qIEhvb2sgZm9y IHBsdWdpbnMgdG8gZ2V0IGNvbnRyb2wgaW4gUHJvY2Vzc1V0aWxpdHkoKSAqLwogUHJvY2Vzc1V0 aWxpdHlfaG9va190eXBlIFByb2Nlc3NVdGlsaXR5X2hvb2sgPSBOVUxMOwpAQCAtMjY4LDYgKzI3 Myw3IEBAIENsYXNzaWZ5VXRpbGl0eUNvbW1hbmRBc1JlYWRPbmx5KE5vZGUgKnBhcnNldHJlZSkK IAkJY2FzZSBUX0xvYWRTdG10OgogCQljYXNlIFRfUHJlcGFyZVN0bXQ6CiAJCWNhc2UgVF9Vbmxp c3RlblN0bXQ6CisJCWNhc2UgVF9XYWl0U3RtdDoKIAkJY2FzZSBUX1ZhcmlhYmxlU2V0U3RtdDoK IAkJCXsKIAkJCQkvKgpAQCAtNTkxLDYgKzU5NywxMSBAQCBzdGFuZGFyZF9Qcm9jZXNzVXRpbGl0 eShQbGFubmVkU3RtdCAqcHN0bXQsCiAJCQkJCWNhc2UgVFJBTlNfU1RNVF9TVEFSVDoKIAkJCQkJ CXsKIAkJCQkJCQlMaXN0Q2VsbCAgICpsYzsKKwkJCQkJCQlXYWl0U3RtdCAgICp3YWl0c3RtdCA9 IChXYWl0U3RtdCAqKSBzdG10LT53YWl0OworCisJCQkJCQkJLyogSWYgbmVlZGVkIHRvIFdBSVQg Rk9SIHNvbWV0aGluZyBidXQgZmFpbGVkICovCisJCQkJCQkJaWYgKHN0bXQtPndhaXQgJiYgV2Fp dE1haW4od2FpdHN0bXQsIGRlc3QpID09IDApCisJCQkJCQkJCWJyZWFrOwogCiAJCQkJCQkJQmVn aW5UcmFuc2FjdGlvbkJsb2NrKCk7CiAJCQkJCQkJZm9yZWFjaChsYywgc3RtdC0+b3B0aW9ucykK QEAgLTEwNjIsNiArMTA3MywxMyBAQCBzdGFuZGFyZF9Qcm9jZXNzVXRpbGl0eShQbGFubmVkU3Rt dCAqcHN0bXQsCiAJCQkJYnJlYWs7CiAJCQl9CiAKKwkJY2FzZSBUX1dhaXRTdG10OgorCQkJewor CQkJCVdhaXRTdG10ICAgKnN0bXQgPSAoV2FpdFN0bXQgKikgcGFyc2V0cmVlOworCQkJCVdhaXRN YWluKHN0bXQsIGRlc3QpOworCQkJCWJyZWFrOworCQkJfQorCiAJCWRlZmF1bHQ6CiAJCQkvKiBB bGwgb3RoZXIgc3RhdGVtZW50IHR5cGVzIGhhdmUgZXZlbnQgdHJpZ2dlciBzdXBwb3J0ICovCiAJ CQlQcm9jZXNzVXRpbGl0eVNsb3cocHN0YXRlLCBwc3RtdCwgcXVlcnlTdHJpbmcsCkBAIC0yNzE4 LDYgKzI3MzYsMTAgQEAgQ3JlYXRlQ29tbWFuZFRhZyhOb2RlICpwYXJzZXRyZWUpCiAJCQl0YWcg PSBDTURUQUdfTk9USUZZOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBUX1dhaXRTdG10OgorCQkJdGFn ID0gQ01EVEFHX1dBSVQ7CisJCQlicmVhazsKKwogCQljYXNlIFRfTGlzdGVuU3RtdDoKIAkJCXRh ZyA9IENNRFRBR19MSVNURU47CiAJCQlicmVhazsKQEAgLTMzNTcsNiArMzM3OSwxMCBAQCBHZXRD b21tYW5kTG9nTGV2ZWwoTm9kZSAqcGFyc2V0cmVlKQogCQkJbGV2ID0gTE9HU1RNVF9BTEw7CiAJ CQlicmVhazsKIAorCQljYXNlIFRfV2FpdFN0bXQ6CisJCQlsZXYgPSBMT0dTVE1UX0FMTDsKKwkJ CWJyZWFrOworCiAJCWNhc2UgVF9MaXN0ZW5TdG10OgogCQkJbGV2ID0gTE9HU1RNVF9BTEw7CiAJ CQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3dhaXQuaCBiL3NyYy9p bmNsdWRlL2NvbW1hbmRzL3dhaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi4wMjcwMTYwZDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMv d2FpdC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHdhaXQu aAorICoJICBwcm90b3R5cGVzIGZvciBjb21tYW5kcy93YWl0LmMKKyAqCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTYtMjAxNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxNiwgUmVnZW50cyBvZiBQb3N0Z3Jlc1BS TworICoKKyAqIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3dhaXQuaAorICoKKyAqLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisjaWZuZGVmIFdBSVRfSAorI2RlZmluZSBXQUlUX0gKKyNpbmNsdWRlICJwb3N0 Z3Jlcy5oIgorI2luY2x1ZGUgInRjb3AvZGVzdC5oIgorCitleHRlcm4gaW50IFdhaXRVdGlsaXR5 KFhMb2dSZWNQdHIgbHNuLCBjb25zdCBmbG9hdDggZGVsYXkpOworZXh0ZXJuIFNpemUgV2FpdFNo bWVtU2l6ZSh2b2lkKTsKK2V4dGVybiB2b2lkIFdhaXRTaG1lbUluaXQodm9pZCk7CitleHRlcm4g dm9pZCBXYWl0U2V0TGF0Y2goWExvZ1JlY1B0ciBjdXJfbHNuKTsKK2V4dGVybiBYTG9nUmVjUHRy IEdldE1pbldhaXQodm9pZCk7CitleHRlcm4gZmxvYXQ4IFdhaXRUaW1lUmVzb2x2ZShDb25zdCAq dGltZSk7CitleHRlcm4gaW50IFdhaXRNYWluKFdhaXRTdG10ICpzdG10LCBEZXN0UmVjZWl2ZXIg KmRlc3QpOworCisjZW5kaWYgICAvKiBXQUlUX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L25vZGVzL25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCmluZGV4IDhhNzZhZmU4 Y2MuLjM0OGRlNzZjNWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKKysr IGIvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaApAQCAtNDg4LDYgKzQ4OCw3IEBAIHR5cGVkZWYg ZW51bSBOb2RlVGFnCiAJVF9Ecm9wUmVwbGljYXRpb25TbG90Q21kLAogCVRfU3RhcnRSZXBsaWNh dGlvbkNtZCwKIAlUX1RpbWVMaW5lSGlzdG9yeUNtZCwKKwlUX1dhaXRTdG10LAogCVRfU1FMQ21k LAogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBiL3Ny Yy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAppbmRleCBjZDZmMWJlNjQzLi5iZmVkOTU0ZDIx IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC0zMDU4LDYgKzMwNTgsNyBAQCB0eXBlZGVmIHN0 cnVjdCBUcmFuc2FjdGlvblN0bXQKIAljaGFyCSAgICpzYXZlcG9pbnRfbmFtZTsgLyogZm9yIHNh dmVwb2ludCBjb21tYW5kcyAqLwogCWNoYXIJICAgKmdpZDsJCQkvKiBmb3IgdHdvLXBoYXNlLWNv bW1pdCByZWxhdGVkIGNvbW1hbmRzICovCiAJYm9vbAkJY2hhaW47CQkJLyogQU5EIENIQUlOIG9w dGlvbiAqLworCU5vZGUJCSp3YWl0OwkJCS8qIFdBSVQgY2xhdXNlOiBsaXN0IG9mIGV2ZW50cyB0 byB3YWl0IGZvciAqLwogfSBUcmFuc2FjdGlvblN0bXQ7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KQEAgLTM1NjcsNCArMzU2OCwyNiBAQCB0eXBlZGVmIHN0cnVjdCBEcm9wU3Vic2NyaXB0 aW9uU3RtdAogCURyb3BCZWhhdmlvciBiZWhhdmlvcjsJCS8qIFJFU1RSSUNUIG9yIENBU0NBREUg YmVoYXZpb3IgKi8KIH0gRHJvcFN1YnNjcmlwdGlvblN0bXQ7CiAKKy8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqCQlXQUlUIEZPUiBTdGF0ZW1lbnQgKyBXQUlUIEZPUiBjbGF1c2Ugb2YgQkVH SU4gc3RhdGVtZW50CisgKgkJVE9ETzogaWYgd2Ugb25seSBwaWNrIG9uZSwgcmVtb3ZlIHRoZSBv dGhlcgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3R5cGVkZWYgZW51bSBXYWl0 Rm9yU3RyYXRlZ3kKK3sKKwlXQUlUX0ZPUl9BTlkgPSAwLAorCVdBSVRfRk9SX0FMTAorfSBXYWl0 Rm9yU3RyYXRlZ3k7CisKK3R5cGVkZWYgc3RydWN0IFdhaXRTdG10Cit7CisJTm9kZVRhZwkJdHlw ZTsKKwlXYWl0Rm9yU3RyYXRlZ3kgc3RyYXRlZ3k7CisJTGlzdAkgICAqZXZlbnRzOwkJLyogdXNl ZCBhcyBhIHBvaW50ZXIgdG8gdGhlIG5leHQgV0FJVCBldmVudCAqLworCWNoYXIJICAgKmxzbjsJ CS8qIFdBSVQgRk9SIExTTiAqLworCWludAkJCWRlbGF5OwkJLyogV0FJVCBGT1IgVElNRU9VVCAq LworCU5vZGUJICAgKnRpbWU7CQkvKiBXQUlUIEZPUiBUSU1FU1RBTVAgb3IgVElNRSAqLworfSBX YWl0U3RtdDsKKwogI2VuZGlmCQkJCQkJCS8qIFBBUlNFTk9ERVNfSCAqLwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oIGIvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5o CmluZGV4IDA4ZjIyY2UyMTEuLjZlMTg0OGZlNGMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bh cnNlci9rd2xpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmgKQEAgLTI0Myw2 ICsyNDMsNyBAQCBQR19LRVlXT1JEKCJsb2NhdGlvbiIsIExPQ0FUSU9OLCBVTlJFU0VSVkVEX0tF WVdPUkQpCiBQR19LRVlXT1JEKCJsb2NrIiwgTE9DS19QLCBVTlJFU0VSVkVEX0tFWVdPUkQpCiBQ R19LRVlXT1JEKCJsb2NrZWQiLCBMT0NLRUQsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdP UkQoImxvZ2dlZCIsIExPR0dFRCwgVU5SRVNFUlZFRF9LRVlXT1JEKQorUEdfS0VZV09SRCgibHNu IiwgTFNOLCBVTlJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJtYXBwaW5nIiwgTUFQUElO RywgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgibWF0Y2giLCBNQVRDSCwgVU5SRVNF UlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgibWF0ZXJpYWxpemVkIiwgTUFURVJJQUxJWkVELCBV TlJFU0VSVkVEX0tFWVdPUkQpCkBAIC00MTAsNiArNDExLDcgQEAgUEdfS0VZV09SRCgidGV4dCIs IFRFWFRfUCwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgidGhlbiIsIFRIRU4sIFJF U0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJ0aWVzIiwgVElFUywgVU5SRVNFUlZFRF9LRVlX T1JEKQogUEdfS0VZV09SRCgidGltZSIsIFRJTUUsIENPTF9OQU1FX0tFWVdPUkQpCitQR19LRVlX T1JEKCJ0aW1lb3V0IiwgVElNRU9VVCwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgi dGltZXN0YW1wIiwgVElNRVNUQU1QLCBDT0xfTkFNRV9LRVlXT1JEKQogUEdfS0VZV09SRCgidG8i LCBUTywgUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInRyYWlsaW5nIiwgVFJBSUxJTkcs IFJFU0VSVkVEX0tFWVdPUkQpCkBAIC00NTAsNiArNDUyLDcgQEAgUEdfS0VZV09SRCgidmVyc2lv biIsIFZFUlNJT05fUCwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgidmlldyIsIFZJ RVcsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInZpZXdzIiwgVklFV1MsIFVOUkVT RVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInZvbGF0aWxlIiwgVk9MQVRJTEUsIFVOUkVTRVJW RURfS0VZV09SRCkKK1BHX0tFWVdPUkQoIndhaXQiLCBXQUlULCBVTlJFU0VSVkVEX0tFWVdPUkQp CiBQR19LRVlXT1JEKCJ3aGVuIiwgV0hFTiwgUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQo IndoZXJlIiwgV0hFUkUsIFJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJ3aGl0ZXNwYWNl IiwgV0hJVEVTUEFDRV9QLCBVTlJFU0VSVkVEX0tFWVdPUkQpCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS90Y29wL2NtZHRhZ2xpc3QuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnbGlzdC5oCmlu ZGV4IDhlZjBmNTVlNzQuLjQzMGJiNWM3MTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3Av Y21kdGFnbGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnbGlzdC5oCkBAIC0yMTYs MyArMjE2LDQgQEAgUEdfQ01EVEFHKENNRFRBR19UUlVOQ0FURV9UQUJMRSwgIlRSVU5DQVRFIFRB QkxFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKIFBHX0NNRFRBRyhDTURUQUdfVU5MSVNURU4sICJV TkxJU1RFTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCiBQR19DTURUQUcoQ01EVEFHX1VQREFURSwg IlVQREFURSIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKIFBHX0NNRFRBRyhDTURUQUdfVkFDVVVNLCAi VkFDVVVNIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfV0FJVCwgIldB SVQgRk9SIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292 ZXJ5L3QvMDIwX2JlZ2luX3dhaXQucGwgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAyMF9iZWdpbl93 YWl0LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjliZWM1N2VlOGYK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAyMF9iZWdpbl93YWl0LnBs CkBAIC0wLDAgKzEsMTQ1IEBACisjIENoZWNrcyBXQUlUIEZPUgordXNlIHN0cmljdDsKK3VzZSB3 YXJuaW5nczsKKwordXNlIFBvc3RncmVzTm9kZTsKK3VzZSBUZXN0TGliOwordXNlIFRlc3Q6Ok1v cmUgdGVzdHMgPT4gODsKKworIyBJbml0aWFsaXplIG1hc3RlciBub2RlCitteSAkbm9kZV9tYXN0 ZXIgPSBnZXRfbmV3X25vZGUoJ21hc3RlcicpOworJG5vZGVfbWFzdGVyLT5pbml0KGFsbG93c19z dHJlYW1pbmcgPT4gMSk7Ciskbm9kZV9tYXN0ZXItPnN0YXJ0OworCisjIEFuZCBzb21lIGNvbnRl bnQgYW5kIHRha2UgYSBiYWNrdXAKKyRub2RlX21hc3Rlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIkNSRUFURSBUQUJMRSB3YWl0X3Rlc3QgQVMgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLDEw KSBBUyBhIik7CitteSAkYmFja3VwX25hbWUgPSAnbXlfYmFja3VwJzsKKyRub2RlX21hc3Rlci0+ YmFja3VwKCRiYWNrdXBfbmFtZSk7CisKKyMgQ3JlYXRlIGEgc3RyZWFtaW5nIHN0YW5kYnkgd2l0 aCBhIDEgc2Vjb25kIGRlbGF5IGZyb20gdGhlIGJhY2t1cAorbXkgJG5vZGVfc3RhbmRieSA9IGdl dF9uZXdfbm9kZSgnc3RhbmRieScpOworbXkgJGRlbGF5ICAgICAgICA9IDE7Ciskbm9kZV9zdGFu ZGJ5LT5pbml0X2Zyb21fYmFja3VwKCRub2RlX21hc3RlciwgJGJhY2t1cF9uYW1lLAorCWhhc19z dHJlYW1pbmcgPT4gMSk7Ciskbm9kZV9zdGFuZGJ5LT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5j b25mJywgcXFbCisJcmVjb3ZlcnlfbWluX2FwcGx5X2RlbGF5ID0gJyR7ZGVsYXl9cycKK10pOwor JG5vZGVfc3RhbmRieS0+c3RhcnQ7CisKKworCisjIE1ha2Ugc3VyZSB0aGF0IFdBSVQgRk9SIExT TiB3b3JrczogYWRkIG5ldyBjb250ZW50IHRvIG1hc3RlciBhbmQgbWVtb3JpemUKKyMgbWFzdGVy J3MgbmV3IExTTiwgdGhlbiB3YWl0IGZvciBtYXN0ZXIncyBMU04gb24gc3RhbmRieS4gUHJvdmUg dGhhdCBXQUlUIGlzCisjIGFibGUgdG8gc2V0dXAgYW4gaW5maW5pdGUgd2FpdGluZyBsb29wIGFu ZCBleGl0IGl0IGlmIGdpdmVuIG5vIHdhaXQgdGltZW91dC4KKyRub2RlX21hc3Rlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHdhaXRfdGVzdCBWQUxVRVMgKGdlbmVyYXRl X3NlcmllcygxMSwgMjApKSIpOworbXkgJGxzbjEgPSAkbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiU0VMRUNUIHBnX2N1cnJlbnRfd2FsX2xzbigpIik7Ciskbm9kZV9zdGFuZGJ5 LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkJFR0lOIFdBSVQgRk9SIExTTiAnJGxzbjEnIik7CisK KyMgR2V0IHRoZSBjdXJyZW50IExTTiBvbiBzdGFuZGJ5IGFuZCBtYWtlIHN1cmUgaXQncyB0aGUg c2FtZSBhcyBtYXN0ZXIncyBMU04KK215ICRsc25fc3RhbmRieSA9ICRub2RlX3N0YW5kYnktPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfbGFzdF93YWxfcmVwbGF5X2xzbigpIik7 CitteSAkY29tcGFyZV9sc25zID0gJG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIlNFTEVDVCBwZ19sc25fY21wKCckbHNuX3N0YW5kYnknOjpwZ19sc24sICckbHNuMSc6OnBn X2xzbikiKTsKK29rKCRjb21wYXJlX2xzbnMgZXEgMCwgInN0YW5kYnkgcmVhY2hlZCB0aGUgc2Ft ZSBMU04gYXMgbWFzdGVyIGFmdGVyIFdBSVQiKTsKKworCisKKyMgQ2hlY2sgdGhhdCB0aW1lb3V0 cyB3b3JrIG9uIHRoZWlyIG93biBhbmQgbGV0IHVzIHdhaXQgZm9yIHNwZWNpZmllZCB0aW1lICgx cykKK215ICRjdXJyZW50X3RpbWUgPSAkbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlNFTEVDVCBub3coKSIpOworbXkgJG9uZV9zZWNvbmQgPSAxMDAwOyAjIGluIG1pbGxpc2Vj b25kcworbXkgJHN0YXJ0X3RpbWUgPSB0aW1lKCk7CisjIFdoaWxlIHdlJ3JlIGF0IGl0LCBhbHNv IG1ha2Ugc3VyZSB0aGF0IHRoZSBzeW50YXggd2l0aCBjb21tYXMgd29ya3MgZmluZSBhbmQKKyMg dGhhdCBieSBkZWZhdWx0IHdlIHVzZSBXQUlUIEZPUiBBTEwgc3RyYXRlZ3ksIHdoaWNoIG1lYW5z IHdhaXRpbmcgZm9yIG1heCB0aW1lCiskbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkiV0FJVCBGT1IgVElNRU9VVCAkb25lX3NlY29uZCwgVElNRVNUQU1QICckY3VycmVudF90 aW1lJyIpOworbXkgJHRpbWVfd2FpdGVkID0gKHRpbWUoKSAtICRzdGFydF90aW1lKSAqIDEwMDA7 ICMgY29udmVydCB0byBtaWxsaXNlY29uZHMKK29rKCR0aW1lX3dhaXRlZCA+PSAkb25lX3NlY29u ZCwgIldBSVQgRk9SIFRJTUVPVVQgd2FpdHMgZm9yIGVub3VnaCB0aW1lIik7CisKKyMgTm93LCBj aGVjayB0aGF0IHRpbWVvdXRzIHdvcmsgYXMgZXhwZWN0ZWQgd2hlbiB3YWl0aW5nIGZvciBMU04K KyRub2RlX21hc3Rlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHdhaXRf dGVzdCBWQUxVRVMgKGdlbmVyYXRlX3NlcmllcygyMSwgMzApKSIpOworbXkgJGxzbjIgPSAkbm9k ZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHBnX2N1cnJlbnRfd2FsX2xz bigpIik7CitteSAkcmVhY2hlZF9sc24gPSAkbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkiQkVHSU4gV0FJVCBGT1IgTFNOICckbHNuMicgVElNRU9VVCAxIik7CitvaygkcmVh Y2hlZF9sc24gZXEgImYiLCAiV0FJVCBkb2Vzbid0IHJlYWNoIExTTiBpZiBnaXZlbiB0b28gbGl0 dGxlIHdhaXQgdGltZSIpOworCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRPRE86IHJl bW92ZSB0aGlzIHRlc3QgaWYgd2UgcmVtb3ZlIHRoZSBzdGFuZGFsb25lICJXQUlUIEZPUiIgY29t bWFuZAorIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgV2UgbmVlZCB0byBjaGVjayB0aGF0IFdB SVQgd29ya3MgZmluZSBpbnNpZGUgdHJhbnNhY3Rpb25zLiBGb3IgdGhhdCwgbGV0J3MKKyMgZ2V0 IHR3byBMU05zIHRoYXQgd2lsbCBjb3JyZXNwb25kIHRvIHR3byBkaWZmZXJlbnQgbWF4IHZhbHVl cyBpbiBvdXIgdGFibGUuCiskbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJ TlNFUlQgSU5UTyB3YWl0X3Rlc3QgVkFMVUVTIChnZW5lcmF0ZV9zZXJpZXMoMzEsIDQwKSkiKTsK K215ICRsc24zID0gJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBw Z19jdXJyZW50X3dhbF9sc24oKSIpOworJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkiSU5TRVJUIElOVE8gd2FpdF90ZXN0IFZBTFVFUyAoZ2VuZXJhdGVfc2VyaWVzKDQxLCA1 MCkpIik7CitteSAkbHNuNCA9ICRub2RlX21hc3Rlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgcGdfY3VycmVudF93YWxfbHNuKCkiKTsKKworIyBCZWZvcmUgc3RhcnRpbmcgdHJhbnNh Y3Rpb24sIHdhaXQgZm9yIExTTiB3aGljaCBlbnN1cmVzIGEgbWF4IHZhbHVlIG9mIDQwLgorIyBJ bnNpZGUgdGhlIHRyYW5zYWN0aW9uLCB3YWl0IGZvciBMU04gdGhhdCBlbnN1cmVzIGEgbWF4IHZh bHVlIG9mIDUwLgorIyBEdWUgdG8gSVNPTEFUSU9OIExFVkVMIFJFUEVBVEFCTEUgUkVBRCwgd2Ug c2hvdWxkIE5PVCBzZWUgdGhlIG5ldyBtYXggdmFsdWUuCitteSAkc3RhbmRieV9yZXN1bHRzID0g JG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxWworCUJFR0lOIFRSQU5T QUNUSU9OIElTT0xBVElPTiBMRVZFTCBSRVBFQVRBQkxFIFJFQUQgV0FJVCBGT1IgTFNOICckbHNu Myc7CisJU0VMRUNUIG1heChhKSBGUk9NIHdhaXRfdGVzdDsKKwlCRUdJTiBXQUlUIEZPUiBMU04g JyRsc240JzsKKwlTRUxFQ1QgcGdfbGFzdF93YWxfcmVwbGF5X2xzbigpOworCVNFTEVDVCBtYXgo YSkgRlJPTSB3YWl0X3Rlc3Q7CisJQ09NTUlUOworXSk7CisKKyMgTWFrZSBzdXJlIHRoYXQgd2Ug aW5kZWVkIHJlYWNoIG1hc3RlcidzIGxhc3QgTFNOIGluc2lkZSB0aGUgdHJhbnNhY3Rpb24uCisj IEZvciB0aGF0LCBjaGVjayB0aGF0IGNhbGxpbmcgcGdfbGFzdF93YWxfcmVwbGF5X2xzbiByZXR1 cm5lZCB0aGF0IExTTi4KK215ICRsYXN0X2xzbl9yZWFjaGVkID0gJHN0YW5kYnlfcmVzdWx0cyA9 fiAvJGxzbjQvOworb2soJGxhc3RfbHNuX3JlYWNoZWQsICJXQUlUIEZPUiBMU04gd29ya3MgaW5z aWRlIGEgdHJhbnNhY3Rpb24iKTsKKworIyBDaGVjayB0aGF0IHRyYW5zYWN0aW9uIGRvZXNuJ3Qg YnJlYWsgYW5kIHNob3cgdXMgdGhlIG5ldyBtYXggdmFsdWUgYWZ0ZXIgV0FJVC4KKyMgRm9yIHRo YXQsIG1ha2Ugc3VyZSB0aGF0IHRoZSBvbGRlciBtYXggdmFsdWUgaXMgcmVwZWF0ZWQgdHdpY2Ug aW4gdGhlIHJlc3VsdHMuCitteSAkY291bnQgPSAoKSA9ICRzdGFuZGJ5X3Jlc3VsdHMgPX4gLzQw L2c7CitvaygkY291bnQgZXEgMiwgInRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCBkb2Vzbid0 IGdldCBicm9rZW4gZHVlIHRvIFdBSVQiKTsKKworCisKKyMgR2V0IG11bHRpcGxlIExTTnMgZm9y IHRlc3RpbmcgV0FJVCBGT1IgQU5ZIC8gV0FJVCBGT1IgQUxMCiskbm9kZV9tYXN0ZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB3YWl0X3Rlc3QgVkFMVUVTIChnZW5lcmF0 ZV9zZXJpZXMoNTEsIDYwKSkiKTsKK215ICRsc241ID0gJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIlNFTEVDVCBwZ19jdXJyZW50X3dhbF9sc24oKSIpOworJG5vZGVfbWFzdGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gd2FpdF90ZXN0IFZBTFVFUyAo Z2VuZXJhdGVfc2VyaWVzKDYxLCA3MDAwMCkpIik7CitteSAkbHNuNiA9ICRub2RlX21hc3Rlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfY3VycmVudF93YWxfbHNuKCkiKTsKKyRu b2RlX21hc3Rlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHdhaXRfdGVz dCBWQUxVRVMgKGdlbmVyYXRlX3Nlcmllcyg2MSwgODAwMDAwKSkiKTsKK215ICRsc243ID0gJG5v ZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBwZ19jdXJyZW50X3dhbF9s c24oKSIpOworCisjIENoZWNrIHRoYXQgV0FJVCBGT1IgQU5ZIHdvcmtzIGZpbmUKKyRub2RlX3N0 YW5kYnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJCRUdJTiBXQUlUIEZPUiBBTlkgTFNOICck bHNuNScgTFNOICckbHNuNicgTFNOICckbHNuNyciKTsKKyRsc25fc3RhbmRieSA9ICRub2RlX3N0 YW5kYnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfbGFzdF93YWxfcmVwbGF5 X2xzbigpIik7CiskY29tcGFyZV9sc25zID0gJG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJIlNFTEVDVCBwZ19sc25fY21wKCckbHNuX3N0YW5kYnknOjpwZ19sc24sICckbHNu NSc6OnBnX2xzbikiKTsKK29rKCRjb21wYXJlX2xzbnMgZ2UgMCwKKwkiV0FJVCBGT1IgQU5ZIG1h a2VzIHVzIHJlYWNoIGF0IGxlYXN0IHRoZSBtaW5pbXVtIExTTiBmcm9tIHRoZSBsaXN0Iik7Cisk Y29tcGFyZV9sc25zID0gJG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNF TEVDVCBwZ19sc25fY21wKCckbHNuX3N0YW5kYnknOjpwZ19sc24sICckbHNuNyc6OnBnX2xzbiki KTsKKyMgVE9ETzogQ291bGQgdGhpcyBzb21laG93IGZhaWwgZHVlIHRvIHRoZSBtYWNoaW5lIGJl aW5nIHZlcnkgZmFzdCBhdCBhcHBseWluZyBMU04/CitvaygkY29tcGFyZV9sc25zIGx0IDAsCisJ IldBSVQgRk9SIEFOWSBkaWRuJ3QgbWFrZSB1cyByZWFjaCB0aGUgbWF4aW11bSBMU04gZnJvbSB0 aGUgbGlzdCIpOworCisjIENoZWNrIHRoYXQgV0FJVCBGT1IgQUxMIHdvcmtzIGZpbmUKKyRub2Rl X3N0YW5kYnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJCRUdJTiBXQUlUIEZPUiBBTEwgTFNO ICckbHNuNScsIExTTiAnJGxzbjYnLCBMU04gJyRsc243JyIpOworJGxzbl9zdGFuZGJ5ID0gJG5v ZGVfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwZ19sYXN0X3dhbF9y ZXBsYXlfbHNuKCkiKTsKKyRjb21wYXJlX2xzbnMgPSAkbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkiU0VMRUNUIHBnX2xzbl9jbXAoJyRsc25fc3RhbmRieSc6OnBnX2xzbiwg JyRsc243Jzo6cGdfbHNuKSIpOworb2soJGNvbXBhcmVfbHNucyBlcSAwLAorCSJXQUlUIEZPUiBB TEwgbWFrZXMgdXMgcmVhY2ggdGhlIG1heGltdW0gTFNOIGZyb20gdGhlIGxpc3QiKTsKKworCisK KyRub2RlX3N0YW5kYnktPnN0b3A7Ciskbm9kZV9tYXN0ZXItPnN0b3A7CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWNvdmVyeS90LzAyMV93YWl0LnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMjFf d2FpdC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5jMjcwZTc4NTc0 Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMjFfd2FpdC5wbApAQCAt MCwwICsxLDE0NCBAQAorIyBDaGVja3MgV0FJVCBGT1IKK3VzZSBzdHJpY3Q7Cit1c2Ugd2Fybmlu Z3M7CisKK3VzZSBQb3N0Z3Jlc05vZGU7Cit1c2UgVGVzdExpYjsKK3VzZSBUZXN0OjpNb3JlIHRl c3RzID0+IDg7CisKKyMgSW5pdGlhbGl6ZSBtYXN0ZXIgbm9kZQorbXkgJG5vZGVfbWFzdGVyID0g Z2V0X25ld19ub2RlKCdtYXN0ZXInKTsKKyRub2RlX21hc3Rlci0+aW5pdChhbGxvd3Nfc3RyZWFt aW5nID0+IDEpOworJG5vZGVfbWFzdGVyLT5zdGFydDsKKworIyBBbmQgc29tZSBjb250ZW50IGFu ZCB0YWtlIGEgYmFja3VwCiskbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJD UkVBVEUgVEFCTEUgd2FpdF90ZXN0IEFTIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgQVMg YSIpOworbXkgJGJhY2t1cF9uYW1lID0gJ215X2JhY2t1cCc7Ciskbm9kZV9tYXN0ZXItPmJhY2t1 cCgkYmFja3VwX25hbWUpOworCisjIENyZWF0ZSBhIHN0cmVhbWluZyBzdGFuZGJ5IHdpdGggYSAx IHNlY29uZCBkZWxheSBmcm9tIHRoZSBiYWNrdXAKK215ICRub2RlX3N0YW5kYnkgPSBnZXRfbmV3 X25vZGUoJ3N0YW5kYnknKTsKK215ICRkZWxheSAgICAgICAgPSAxOworJG5vZGVfc3RhbmRieS0+ aW5pdF9mcm9tX2JhY2t1cCgkbm9kZV9tYXN0ZXIsICRiYWNrdXBfbmFtZSwKKwloYXNfc3RyZWFt aW5nID0+IDEpOworJG5vZGVfc3RhbmRieS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZics IHFxWworCXJlY292ZXJ5X21pbl9hcHBseV9kZWxheSA9ICcke2RlbGF5fXMnCitdKTsKKyRub2Rl X3N0YW5kYnktPnN0YXJ0OworCisKKworIyBNYWtlIHN1cmUgdGhhdCBXQUlUIEZPUiBMU04gd29y a3M6IGFkZCBuZXcgY29udGVudCB0byBtYXN0ZXIgYW5kIG1lbW9yaXplCisjIG1hc3RlcidzIG5l dyBMU04sIHRoZW4gd2FpdCBmb3IgbWFzdGVyJ3MgTFNOIG9uIHN0YW5kYnkuIFByb3ZlIHRoYXQg V0FJVCBpcworIyBhYmxlIHRvIHNldHVwIGFuIGluZmluaXRlIHdhaXRpbmcgbG9vcCBhbmQgZXhp dCBpdCBpZiBnaXZlbiBubyB3YWl0IHRpbWVvdXQuCiskbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB3YWl0X3Rlc3QgVkFMVUVTIChnZW5lcmF0ZV9zZXJp ZXMoMTEsIDIwKSkiKTsKK215ICRsc24xID0gJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBwZ19jdXJyZW50X3dhbF9sc24oKSIpOworJG5vZGVfc3RhbmRieS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJXQUlUIEZPUiBMU04gJyRsc24xJyIpOworCisjIEdldCB0aGUg Y3VycmVudCBMU04gb24gc3RhbmRieSBhbmQgbWFrZSBzdXJlIGl0J3MgdGhlIHNhbWUgYXMgbWFz dGVyJ3MgTFNOCitteSAkbHNuX3N0YW5kYnkgPSAkbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiU0VMRUNUIHBnX2xhc3Rfd2FsX3JlcGxheV9sc24oKSIpOworbXkgJGNvbXBh cmVfbHNucyA9ICRub2RlX3N0YW5kYnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1Qg cGdfbHNuX2NtcCgnJGxzbl9zdGFuZGJ5Jzo6cGdfbHNuLCAnJGxzbjEnOjpwZ19sc24pIik7Citv aygkY29tcGFyZV9sc25zIGVxIDAsICJzdGFuZGJ5IHJlYWNoZWQgdGhlIHNhbWUgTFNOIGFzIG1h c3RlciBhZnRlciBXQUlUIik7CisKKworCisjIENoZWNrIHRoYXQgdGltZW91dHMgd29yayBvbiB0 aGVpciBvd24gYW5kIGxldCB1cyB3YWl0IGZvciBzcGVjaWZpZWQgdGltZSAoMXMpCitteSAkY3Vy cmVudF90aW1lID0gJG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg bm93KCkiKTsKK215ICRvbmVfc2Vjb25kID0gMTAwMDsgIyBpbiBtaWxsaXNlY29uZHMKK215ICRz dGFydF90aW1lID0gdGltZSgpOworIyBXaGlsZSB3ZSdyZSBhdCBpdCwgYWxzbyBtYWtlIHN1cmUg dGhhdCB0aGUgc3ludGF4IHdpdGggY29tbWFzIHdvcmtzIGZpbmUgYW5kCisjIHRoYXQgYnkgZGVm YXVsdCB3ZSB1c2UgV0FJVCBGT1IgQUxMIHN0cmF0ZWd5LCB3aGljaCBtZWFucyB3YWl0aW5nIGZv ciBtYXggdGltZQorJG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIldBSVQg Rk9SIFRJTUVPVVQgJG9uZV9zZWNvbmQsIFRJTUVTVEFNUCAnJGN1cnJlbnRfdGltZSciKTsKK215 ICR0aW1lX3dhaXRlZCA9ICh0aW1lKCkgLSAkc3RhcnRfdGltZSkgKiAxMDAwOyAjIGNvbnZlcnQg dG8gbWlsbGlzZWNvbmRzCitvaygkdGltZV93YWl0ZWQgPj0gJG9uZV9zZWNvbmQsICJXQUlUIEZP UiBUSU1FT1VUIHdhaXRzIGZvciBlbm91Z2ggdGltZSIpOworCisjIE5vdywgY2hlY2sgdGhhdCB0 aW1lb3V0cyB3b3JrIGFzIGV4cGVjdGVkIHdoZW4gd2FpdGluZyBmb3IgTFNOCiskbm9kZV9tYXN0 ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB3YWl0X3Rlc3QgVkFMVUVT IChnZW5lcmF0ZV9zZXJpZXMoMjEsIDMwKSkiKTsKK215ICRsc24yID0gJG5vZGVfbWFzdGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBwZ19jdXJyZW50X3dhbF9sc24oKSIpOworbXkg JHJlYWNoZWRfbHNuID0gJG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIldB SVQgRk9SIExTTiAnJGxzbjInIFRJTUVPVVQgMSIpOworb2soJHJlYWNoZWRfbHNuIGVxICJmIiwg IldBSVQgZG9lc24ndCByZWFjaCBMU04gaWYgZ2l2ZW4gdG9vIGxpdHRsZSB3YWl0IHRpbWUiKTsK KworCisKKyMgV2UgbmVlZCB0byBjaGVjayB0aGF0IFdBSVQgd29ya3MgZmluZSBpbnNpZGUgdHJh bnNhY3Rpb25zLiBGb3IgdGhhdCwgbGV0J3MKKyMgZ2V0IHR3byBMU05zIHRoYXQgd2lsbCBjb3Jy ZXNwb25kIHRvIHR3byBkaWZmZXJlbnQgbWF4IHZhbHVlcyBpbiBvdXIgdGFibGUuCiskbm9kZV9t YXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB3YWl0X3Rlc3QgVkFM VUVTIChnZW5lcmF0ZV9zZXJpZXMoMzEsIDQwKSkiKTsKK215ICRsc24zID0gJG5vZGVfbWFzdGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBwZ19jdXJyZW50X3dhbF9sc24oKSIpOwor JG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gd2FpdF90 ZXN0IFZBTFVFUyAoZ2VuZXJhdGVfc2VyaWVzKDQxLCA1MCkpIik7CitteSAkbHNuNCA9ICRub2Rl X21hc3Rlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfY3VycmVudF93YWxfbHNu KCkiKTsKKworIyBCZWZvcmUgc3RhcnRpbmcgdHJhbnNhY3Rpb24sIHdhaXQgZm9yIExTTiB3aGlj aCBlbnN1cmVzIGEgbWF4IHZhbHVlIG9mIDQwLgorIyBJbnNpZGUgdGhlIHRyYW5zYWN0aW9uLCB3 YWl0IGZvciBMU04gdGhhdCBlbnN1cmVzIGEgbWF4IHZhbHVlIG9mIDUwLgorIyBEdWUgdG8gSVNP TEFUSU9OIExFVkVMIFJFUEVBVEFCTEUgUkVBRCwgd2Ugc2hvdWxkIE5PVCBzZWUgdGhlIG5ldyBt YXggdmFsdWUuCitteSAkc3RhbmRieV9yZXN1bHRzID0gJG5vZGVfc3RhbmRieS0+c2FmZV9wc3Fs KAorCSdwb3N0Z3JlcycsIHFxWworCVdBSVQgRk9SIExTTiAnJGxzbjMnOworCUJFR0lOIFRSQU5T QUNUSU9OIElTT0xBVElPTiBMRVZFTCBSRVBFQVRBQkxFIFJFQUQ7CisJU0VMRUNUIG1heChhKSBG Uk9NIHdhaXRfdGVzdDsKKwlXQUlUIEZPUiBMU04gJyRsc240JzsKKwlTRUxFQ1QgcGdfbGFzdF93 YWxfcmVwbGF5X2xzbigpOworCVNFTEVDVCBtYXgoYSkgRlJPTSB3YWl0X3Rlc3Q7CisJQ09NTUlU OworXSk7CisKKyMgTWFrZSBzdXJlIHRoYXQgd2UgaW5kZWVkIHJlYWNoIG1hc3RlcidzIGxhc3Qg TFNOIGluc2lkZSB0aGUgdHJhbnNhY3Rpb24uCisjIEZvciB0aGF0LCBjaGVjayB0aGF0IGNhbGxp bmcgcGdfbGFzdF93YWxfcmVwbGF5X2xzbiByZXR1cm5lZCB0aGF0IExTTi4KK215ICRsYXN0X2xz bl9yZWFjaGVkID0gJHN0YW5kYnlfcmVzdWx0cyA9fiAvJGxzbjQvOworb2soJGxhc3RfbHNuX3Jl YWNoZWQsICJXQUlUIEZPUiBMU04gd29ya3MgaW5zaWRlIGEgdHJhbnNhY3Rpb24iKTsKKworIyBD aGVjayB0aGF0IHRyYW5zYWN0aW9uIGRvZXNuJ3QgYnJlYWsgYW5kIHNob3cgdXMgdGhlIG5ldyBt YXggdmFsdWUgYWZ0ZXIgV0FJVC4KKyMgRm9yIHRoYXQsIG1ha2Ugc3VyZSB0aGF0IHRoZSBvbGRl ciBtYXggdmFsdWUgaXMgcmVwZWF0ZWQgdHdpY2UgaW4gdGhlIHJlc3VsdHMuCitteSAkY291bnQg PSAoKSA9ICRzdGFuZGJ5X3Jlc3VsdHMgPX4gLzQwL2c7CitvaygkY291bnQgZXEgMiwgInRyYW5z YWN0aW9uIGlzb2xhdGlvbiBsZXZlbCBkb2Vzbid0IGdldCBicm9rZW4gZHVlIHRvIFdBSVQiKTsK KworCisKKyMgR2V0IG11bHRpcGxlIExTTnMgZm9yIHRlc3RpbmcgV0FJVCBGT1IgQU5ZIC8gV0FJ VCBGT1IgQUxMCiskbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQg SU5UTyB3YWl0X3Rlc3QgVkFMVUVTIChnZW5lcmF0ZV9zZXJpZXMoNTEsIDYwKSkiKTsKK215ICRs c241ID0gJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBwZ19jdXJy ZW50X3dhbF9sc24oKSIpOworJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki SU5TRVJUIElOVE8gd2FpdF90ZXN0IFZBTFVFUyAoZ2VuZXJhdGVfc2VyaWVzKDYxLCA3MDAwMCkp Iik7CitteSAkbHNuNiA9ICRub2RlX21hc3Rlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgcGdfY3VycmVudF93YWxfbHNuKCkiKTsKKyRub2RlX21hc3Rlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJIklOU0VSVCBJTlRPIHdhaXRfdGVzdCBWQUxVRVMgKGdlbmVyYXRlX3Nlcmllcyg2 MSwgODAwMDAwKSkiKTsKK215ICRsc243ID0gJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBwZ19jdXJyZW50X3dhbF9sc24oKSIpOworCisjIENoZWNrIHRoYXQgV0FJ VCBGT1IgQU5ZIHdvcmtzIGZpbmUKKyRub2RlX3N0YW5kYnktPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCSJXQUlUIEZPUiBBTlkgTFNOICckbHNuNScgTFNOICckbHNuNicgTFNOICckbHNuNyciKTsK KyRsc25fc3RhbmRieSA9ICRub2RlX3N0YW5kYnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJT RUxFQ1QgcGdfbGFzdF93YWxfcmVwbGF5X2xzbigpIik7CiskY29tcGFyZV9sc25zID0gJG5vZGVf c3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwZ19sc25fY21wKCckbHNu X3N0YW5kYnknOjpwZ19sc24sICckbHNuNSc6OnBnX2xzbikiKTsKK29rKCRjb21wYXJlX2xzbnMg Z2UgMCwKKwkiV0FJVCBGT1IgQU5ZIG1ha2VzIHVzIHJlYWNoIGF0IGxlYXN0IHRoZSBtaW5pbXVt IExTTiBmcm9tIHRoZSBsaXN0Iik7CiskY29tcGFyZV9sc25zID0gJG5vZGVfc3RhbmRieS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwZ19sc25fY21wKCckbHNuX3N0YW5kYnknOjpw Z19sc24sICckbHNuNyc6OnBnX2xzbikiKTsKKyMgVE9ETzogQ291bGQgdGhpcyBzb21laG93IGZh aWwgZHVlIHRvIHRoZSBtYWNoaW5lIGJlaW5nIHZlcnkgZmFzdCBhdCBhcHBseWluZyBMU04/Citv aygkY29tcGFyZV9sc25zIGx0IDAsCisJIldBSVQgRk9SIEFOWSBkaWRuJ3QgbWFrZSB1cyByZWFj aCB0aGUgbWF4aW11bSBMU04gZnJvbSB0aGUgbGlzdCIpOworCisjIENoZWNrIHRoYXQgV0FJVCBG T1IgQUxMIHdvcmtzIGZpbmUKKyRub2RlX3N0YW5kYnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CSJXQUlUIEZPUiBBTEwgTFNOICckbHNuNScsIExTTiAnJGxzbjYnLCBMU04gJyRsc243JyIpOwor JGxzbl9zdGFuZGJ5ID0gJG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNF TEVDVCBwZ19sYXN0X3dhbF9yZXBsYXlfbHNuKCkiKTsKKyRjb21wYXJlX2xzbnMgPSAkbm9kZV9z dGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBnX2xzbl9jbXAoJyRsc25f c3RhbmRieSc6OnBnX2xzbiwgJyRsc243Jzo6cGdfbHNuKSIpOworb2soJGNvbXBhcmVfbHNucyBl cSAwLAorCSJXQUlUIEZPUiBBTEwgbWFrZXMgdXMgcmVhY2ggdGhlIG1heGltdW0gTFNOIGZyb20g dGhlIGxpc3QiKTsKKworCisKKyRub2RlX3N0YW5kYnktPnN0b3A7Ciskbm9kZV9tYXN0ZXItPnN0 b3A7Cg== --=_5cf1a6db167a37d773716fd744b4abf2--