From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from conssluserg-06.nifty.com (conssluserg-06.nifty.com [210.131.2.91]) by sourceware.org (Postfix) with ESMTPS id 1AAE53857C61 for ; Fri, 24 Jul 2020 11:22:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 1AAE53857C61 Received: from Express5800-S70 (v038192.dynamic.ppp.asahi-net.or.jp [124.155.38.192]) (authenticated) by conssluserg-06.nifty.com with ESMTP id 06OBM9sD010754 for ; Fri, 24 Jul 2020 20:22:09 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-06.nifty.com 06OBM9sD010754 X-Nifty-SrcIP: [124.155.38.192] Date: Fri, 24 Jul 2020 20:22:19 +0900 From: Takashi Yano To: cygwin-developers@cygwin.com Subject: Re: New implementation of pseudo console support (experimental) Message-Id: <20200724202219.16ad238f515da19db21d3a6c@nifty.ne.jp> In-Reply-To: <20200724143842.020cea9ffa2f6e7ffe760f67@nifty.ne.jp> References: <20200514183420.c246647a6d9e396d42c6b47e@nifty.ne.jp> <20200516092956.74369d694d611b1dcd095607@nifty.ne.jp> <20200516164735.2a2ef183788b151e9185ef41@nifty.ne.jp> <20200519224018.746f6324badd8a5762df42b1@nifty.ne.jp> <20200525195332.cf60ab2f38d167a76513740e@nifty.ne.jp> <20200526100955.30b1a2baea517e0565f30db6@nifty.ne.jp> <20200529004024.0c2ac3c68b588bda987e0837@nifty.ne.jp> <20200701204751.27609a8f5701010468521a87@nifty.ne.jp> <20200717111912.GG3784@calimero.vinschen.de> <20200718143024.45920213c7aa81912939d944@nifty.ne.jp> <20200720080613.GE16360@calimero.vinschen.de> <20200722031751.e02bf24a7519b43d80e5db71@nifty.ne.jp> <20200722174541.c8113635236fd217cb9ebb77@nifty.ne.jp> <20200723093328.709654ea6a539cb9b3251ab2@nifty.ne.jp> <20200724143842.020cea9ffa2f6e7ffe760f67@nifty.ne.jp> X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.30; i686-pc-mingw32) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Fri__24_Jul_2020_20_22_19_+0900_0GtYkGoOS.un96Ed" X-Spam-Status: No, score=-1.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=no autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: cygwin-developers@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Cygwin core component developers mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Jul 2020 11:22:38 -0000 This is a multi-part message in MIME format. --Multipart=_Fri__24_Jul_2020_20_22_19_+0900_0GtYkGoOS.un96Ed Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Fri, 24 Jul 2020 14:38:42 +0900 Takashi Yano via Cygwin-developers wrote: > On Thu, 23 Jul 2020 09:33:28 +0900 > Takashi Yano via Cygwin-developers wrote: > > On Wed, 22 Jul 2020 17:45:41 +0900 > > Takashi Yano via Cygwin-developers wrote: > > > On Wed, 22 Jul 2020 03:17:51 +0900 > > > Takashi Yano via Cygwin-developers wrote: > > > > Hi Corinna, > > > > > > > > On Mon, 20 Jul 2020 10:06:13 +0200 > > > > Corinna Vinschen wrote: > > > > > On Jul 18 14:30, Takashi Yano via Cygwin-developers wrote: > > > > > > Hi Corinna, > > > > > > > > > > > > On Fri, 17 Jul 2020 13:19:12 +0200 > > > > > > Corinna Vinschen wrote: > > > > > > > Hi Takashi, > > > > > > > > > > > > > > On Jul 1 20:47, Takashi Yano via Cygwin-developers wrote: > > > > > > > > [...] > > > > > > > > Revise the patch to fit the current git head. > > > > > > > > > > > > > > are you satisfied with the code? If you want to merge it, > > > > > > > I'd bump Cygwin to 3.2. > > > > > > > > > > > > Since this new implementation has both advantages and disadvantages, > > > > > > there might be some options. > > > > > > > > > > > > 1) Default to new implementation and leave the current one as an > > > > > > alternative. Switch them using the environment CYGWIN. > > > > > > 2) Default to current implementation and add the new one as an > > > > > > alternative. Switch them using the environment CYGWIN. > > > > > > 3) Adopt only new implementation and throw the current one away. > > > > > > > > > > > > What do you think? > > > > > > > > > > Do you really want to maintain twice as much code doing the same stuff > > > > > and constantly having to ask users which version of the code they are > > > > > running? The maintenance cost outweighs the advantages, IMHO. > > > > > Personally I'd go for option 3. > > > > > > > > Personally, I feel a tinge of sadness to discard the current code, > > > > however, your opinion sounds reasonable. > > > > > > > > I will submit a new patch in which all the codes specific to the > > > > current implementation are removed. > > > > > > Attached is the patch in git format-patch format. > > > All the codes specific to the current implementation are removed. > > > > > > Despite the utmost care, the changes are relatively large, so some > > > degradation may exist. > > > > > > I will appreciate if you could test. > > > > There were still unused code. Please try attached patch instead. > > Changes: > * Do not activate pseudo console if it is already activated for > another process on same pty. Changes: * Fix a bug in the latest change. -- Takashi Yano --Multipart=_Fri__24_Jul_2020_20_22_19_+0900_0GtYkGoOS.un96Ed Content-Type: application/octet-stream; name="0001-Cygwin-pty-Implement-new-pseudo-console-support.patch" Content-Disposition: attachment; filename="0001-Cygwin-pty-Implement-new-pseudo-console-support.patch" Content-Transfer-Encoding: base64 RnJvbSBlNTg3MGY4ZmZiMzk2M2I0ODA5NjNjMzFiY2U0MDQ5ZTNlNTdmZGRlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5q cD4KRGF0ZTogRnJpLCAyNCBKdWwgMjAyMCAyMDoxNzozNiArMDkwMApTdWJqZWN0OiBbUEFUQ0hd IEN5Z3dpbjogcHR5OiBJbXBsZW1lbnQgbmV3IHBzZXVkbyBjb25zb2xlIHN1cHBvcnQuCgotIElu IHRoaXMgaW1wbGVtZW50YXRpb24sIHBzZXVkbyBjb25zb2xlIGlzIGNyZWF0ZWQgZm9yIGVhY2gg bmF0aXZlCiAgY29uc29sZSBhcHAuIEFkdmFudGFnZXMgYW5kIGRpc2FkdmFudGFnZXMgb2YgdGhp cyBpbXBsZW1lbnRhdGlvbgogIG92ZXIgdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uIGFyZSBh cyBmb2xsb3dzLgoKICBBZHZhbnRhZ2VzOgogIDEpIE5vIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9u IGluIHB0eSBvdXRwdXQgZm9yIGN5Z3dpbiBwcm9jZXNzLgogICAgICBodHRwczovL2N5Z3dpbi5j b20vcGlwZXJtYWlsL2N5Z3dpbi8yMDIwLUZlYnJ1YXJ5LzI0Mzg1OC5odG1sCiAgMikgRnJlZSBm cm9tIHRoZSBwcm9ibGVtIGNhdXNlZCBieSBkaWZmZXJlbmNlIG9mIGJlaGF2aW91ciBvZiBjb250 cm9sCiAgICAgc2VxdWVuY2VzIGJldHdlZW4gcmVhbCB0ZXJtaW5hbCBhbmQgcHNldWRvIGNvbnNv bGUuCiAgICAgIGh0dHBzOi8vY3lnd2luLmNvbS9waXBlcm1haWwvY3lnd2luLzIwMTktRGVjZW1i ZXIvMjQzMjgxLmh0bWwKICAgICAgaHR0cHM6Ly9jeWd3aW4uY29tL3BpcGVybWFpbC9jeWd3aW4v MjAyMC1GZWJydWFyeS8yNDM4NTUuaHRtbAogIDMpIEZyZWUgZnJvbSB0aGUgcHJvYmxlbSBpbiBj Z2RiIGFuZCBlbWFjcyBndWQuCiAgICAgIGh0dHBzOi8vY3lnd2luLmNvbS9waXBlcm1haWwvY3ln d2luLzIwMjAtSmFudWFyeS8yNDM2MDEuaHRtbAogICAgICBodHRwczovL2N5Z3dpbi5jb20vcGlw ZXJtYWlsL2N5Z3dpbi8yMDIwLU1hcmNoLzI0NDE0Ni5odG1sCiAgNCkgUmVkcmF3aW5nIHNjcmVl biBvbiBleGVjdXRpbmcgbmF0aXZlIGNvbnNvbGUgYXBwcyBpcyBub3QgbmVjZXNzYXJ5LgogIDUp IGN5Z3dpbi1jb25zb2xlLWhlbHBlciBpcyBub3QgbmVjZXNzYXJ5IGZvciB0aGUgcHNldWRvIGNv bnNvbGUKICAgICBzdXBwb3J0LgogIDYpIFRoZSBjb2RlcyBmb3IgcHNldWRvIGNvbnNvbGUgc3Vw cG9ydCBhcmUgbXVjaCBzaW1wbGVyIHRoYW4gdGhhdAogICAgIG9mIHRoZSBwcmV2aW91cyBvbmUu CgogIERpc2FkdmFudGFnZXM6CiAgMSkgVGhlIGN5Z3dpbiBwcm9ncmFtIHdoaWNoIGNhbGxzIGNv bnNvbGUgQVBJIGRpcmVjdGx5IGRvZXMgbm90IHdvcmsuCiAgMikgVGhlIGFwcHMgd2hpY2ggdXNl IGNvbnNvbGUgQVBJIGNhbm5vdCBiZSBkZWJ1Z2dlZCB3aXRoIGdkYi4gVGhpcwogICAgIGlzIGJl Y2F1c2UgcHNldWRvIGNvbnNvbGUgaXMgbm90IGFjdGl2YXRlZCBzaW5jZSBnZGIgdXNlcwogICAg IENyZWF0ZVByb2Nlc3MoKSByYXRoZXIgdGhhbiBleGVjKCkuIEV2ZW4gd2l0aCB0aGlzIGxpbWl0 YXRpb24sCiAgICAgYXR0YWNoaW5nIGdkYiB0byBuYXRpdmUgYXBwcywgaW4gd2hpY2ggcHNldWRv IGNvbnNvbGUgaXMgYWxyZWFkeQogICAgIGFjdGl2YXRlZCwgd29ya3MuCiAgMykgVHlwZWFoZWFk IGtleSBpbnB1dHMgYXJlIGRpc2NhcmRlZCB3aGlsZSBuYXRpdmUgY29uc29sZSBhcHAgaXMKICAg ICBleGVjdXRlZC4gU2ltaXJhbGx5LCB0eXBlYWhlYWQga2V5IGlucHV0cyB3aGlsZSBjeWd3aW4g YXBwIGlzCiAgICAgZXhlY3V0ZWQgYXJlIG5vdCBpbmhlcml0ZWQgdG8gbmF0aXZlIGNvbnNvbGUg YXBwLgogIDQpIENvZGUgcGFnZSBjYW5ub3QgYmUgY2hhbmdlZCBieSBjaGNwLmNvbS4gQWNjdHVh bGx5LCBjaGNwIHdvcmtzCiAgICAgaXRzZWxmIGFuZCBjaGFuZ2VzIGNvZGUgcGFnZSBvZiBpdHMg b3duIHBzZXVkbyBjb25zb2xlLiAgSG93ZXZlciwKICAgICBzaW5jZSBwc2V1ZG8gY29uc29sZSBp cyByZWNyZWF0ZWQgZm9yIGFub3RoZXIgcHJvY2VzcywgaXQgY2Fubm90CiAgICAgaW5oZXJpdCB0 aGUgY29kZSBwYWdlLgogIDUpIHN5c3RlbV9wcmludGYoKSBkb2VzIG5vdCB3b3JrIGFmdGVyIHN0 ZGVyciBpcyBjbG9zZWQuIChTYW1lIHdpdGgKICAgICBjeWd3aW4gMy4wLjcpCiAgNikgU3RhcnR1 cCB0aW1lIG9mIG5hdGl2ZSBjb25zb2xlIGFwcHMgaXMgYWJvdXQgMyB0aW1lcyBzbG93ZXIgdGhh bgogICAgIHByZXZpb3VzIGltcGxlbWVuYXRpb24uCiAgNykgUHNldWRvIGNvbnNvbGUgY2Fubm90 IGJlIGFjdGl2YXRlZCBpZiBpdCBpcyBhbHJlYWR5IGFjdGl2YXRlZCBmb3IKICAgICBhbm90aGVy IHByb2Nlc3Mgb24gc2FtZSBwdHkuCi0tLQogd2luc3VwL2N5Z3dpbi9kdGFibGUuY2MgICAgICAg ICAgIHwgICAzMiAtCiB3aW5zdXAvY3lnd2luL2ZoYW5kbGVyLmggICAgICAgICAgfCAgIDUzICst CiB3aW5zdXAvY3lnd2luL2ZoYW5kbGVyX2NvbnNvbGUuY2MgfCAgIDQzIC0KIHdpbnN1cC9jeWd3 aW4vZmhhbmRsZXJfdHR5LmNjICAgICB8IDE3NzAgKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KIHdpbnN1cC9jeWd3aW4vZm9yay5jYyAgICAgICAgICAgICB8ICAgMzAgLQogd2luc3VwL2N5 Z3dpbi9zZWxlY3QuY2MgICAgICAgICAgIHwgICAgNSArLQogd2luc3VwL2N5Z3dpbi9zbWFsbHBy aW50LmNjICAgICAgIHwgICAgMiAtCiB3aW5zdXAvY3lnd2luL3NwYXduLmNjICAgICAgICAgICAg fCAgIDg3ICstCiB3aW5zdXAvY3lnd2luL3N0cmFjZS5jYyAgICAgICAgICAgfCAgICAyIC0KIHdp bnN1cC9jeWd3aW4vdHR5LmNjICAgICAgICAgICAgICB8ICAgMjAgKy0KIHdpbnN1cC9jeWd3aW4v dHR5LmggICAgICAgICAgICAgICB8ICAgMTMgKy0KIHdpbnN1cC9jeWd3aW4vd2luc3VwLmggICAg ICAgICAgICB8ICAgIDMgLQogMTIgZmlsZXMgY2hhbmdlZCwgMzQxIGluc2VydGlvbnMoKyksIDE3 MTkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9kdGFibGUuY2MgYi93 aW5zdXAvY3lnd2luL2R0YWJsZS5jYwppbmRleCBlOWUwMDViMDguLjZhOTFlMzNiYyAxMDA2NDQK LS0tIGEvd2luc3VwL2N5Z3dpbi9kdGFibGUuY2MKKysrIGIvd2luc3VwL2N5Z3dpbi9kdGFibGUu Y2MKQEAgLTE0NywzOCArMTQ3LDYgQEAgZHRhYmxlOjpnZXRfZGVidWdnZXJfaW5mbyAoKQogdm9p ZAogZHRhYmxlOjpzdGRpb19pbml0ICgpCiB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSAr KykKLSAgICB7Ci0gICAgICBjb25zdCBpbnQgY2hrX29yZGVyW10gPSB7MSwgMCwgMn07Ci0gICAg ICBpbnQgZmQgPSBjaGtfb3JkZXJbaV07Ci0gICAgICBmaGFuZGxlcl9iYXNlICpmaCA9IGN5Z2hl YXAtPmZkdGFiW2ZkXTsKLSAgICAgIGlmIChmaCAmJiBmaC0+Z2V0X21ham9yICgpID09IERFVl9Q VFlTX01BSk9SKQotCXsKLQkgIGZoYW5kbGVyX3B0eV9zbGF2ZSAqcHR5cyA9IChmaGFuZGxlcl9w dHlfc2xhdmUgKikgZmg7Ci0JICBpZiAocHR5cy0+Z2V0X3BzZXVkb19jb25zb2xlICgpKQotCSAg ICB7Ci0JICAgICAgYm9vbCBhdHRhY2hlZCA9ICEhZmhhbmRsZXJfY29uc29sZTo6Z2V0X2NvbnNv bGVfcHJvY2Vzc19pZAotCQkocHR5cy0+Z2V0X2hlbHBlcl9wcm9jZXNzX2lkICgpLCB0cnVlKTsK LQkgICAgICBpZiAoYXR0YWNoZWQpCi0JCWJyZWFrOwotCSAgICAgIGVsc2UKLQkJewotCQkgIC8q IE5vdCBhdHRhY2hlZCB0byBwc2V1ZG8gY29uc29sZSBpbiBmb3JrKCkgb3Igc3Bhd24oKQotCQkg ICAgIGJ5IHNvbWUgcmVhc29uLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGV4ZWN1dGFibGUgaXMKLQkJ ICAgICBhIHdpbmRvd3MgR1VJIGJpbmFyeSwgc3VjaCBhcyBtaW50dHkuICovCi0JCSAgRnJlZUNv bnNvbGUgKCk7Ci0JCSAgaWYgKEF0dGFjaENvbnNvbGUgKHB0eXMtPmdldF9oZWxwZXJfcHJvY2Vz c19pZCAoKSkpCi0JCSAgICB7Ci0JCSAgICAgIHB0eXMtPmZpeHVwX2FmdGVyX2F0dGFjaCAoZmFs c2UsIGZkKTsKLQkJICAgICAgYnJlYWs7Ci0JCSAgICB9Ci0JCX0KLQkgICAgfQotCX0KLSAgICAg IGVsc2UgaWYgKGZoICYmIGZoLT5nZXRfbWFqb3IgKCkgPT0gREVWX0NPTlNfTUFKT1IpCi0JYnJl YWs7Ci0gICAgfQotCiAgIGlmIChteXNlbGYtPmN5Z3N0YXJ0ZWQgfHwgSVNTVEFURSAobXlzZWxm LCBQSURfQ1lHUEFSRU5UKSkKICAgICB7CiAgICAgICB0dHlfbWluICp0ID0gY3lnd2luX3NoYXJl ZC0+dHR5LmdldF9jdHR5cCAoKTsKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXIu aCBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXIuaAppbmRleCA2MGJkMjdlMDAuLjQ2MDRmZjJiYSAx MDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9maGFuZGxlci5oCisrKyBiL3dpbnN1cC9jeWd3aW4v ZmhhbmRsZXIuaApAQCAtMzI2LDE2ICszMjYsMTYgQEAgY2xhc3MgZmhhbmRsZXJfYmFzZQogICB2 aXJ0dWFsIHNpemVfdCAmcmFpeHB1dCAoKSB7IHJldHVybiByYS5yYWl4cHV0OyB9OwogICB2aXJ0 dWFsIHNpemVfdCAmcmFidWZsZW4gKCkgeyByZXR1cm4gcmEucmFidWZsZW47IH07CiAKLSAgdmly dHVhbCBib29sIGdldF9yZWFkYWhlYWRfdmFsaWQgKCkgeyByZXR1cm4gcmFpeGdldCAoKSA8IHJh bGVuICgpOyB9CisgIGJvb2wgZ2V0X3JlYWRhaGVhZF92YWxpZCAoKSB7IHJldHVybiByYWl4Z2V0 ICgpIDwgcmFsZW4gKCk7IH0KICAgaW50IHB1dHNfcmVhZGFoZWFkIChjb25zdCBjaGFyICpzLCBz aXplX3QgbGVuID0gKHNpemVfdCkgLTEpOwotICB2aXJ0dWFsIGludCBwdXRfcmVhZGFoZWFkIChj aGFyIHZhbHVlKTsKKyAgaW50IHB1dF9yZWFkYWhlYWQgKGNoYXIgdmFsdWUpOwogCiAgIGludCBn ZXRfcmVhZGFoZWFkICgpOwogICBpbnQgcGVla19yZWFkYWhlYWQgKGludCBxdWVyeXB1dCA9IDAp OwogCiAgIHZvaWQgc2V0X3JlYWRhaGVhZF92YWxpZCAoaW50IHZhbCwgaW50IGNoID0gLTEpOwog Ci0gIHZpcnR1YWwgaW50IGdldF9yZWFkYWhlYWRfaW50b19idWZmZXIgKGNoYXIgKmJ1Ziwgc2l6 ZV90IGJ1Zmxlbik7CisgIGludCBnZXRfcmVhZGFoZWFkX2ludG9fYnVmZmVyIChjaGFyICpidWYs IHNpemVfdCBidWZsZW4pOwogCiAgIGJvb2wgaGFzX2FjbHMgKCkgY29uc3QgeyByZXR1cm4gcGMu aGFzX2FjbHMgKCk7IH0KIApAQCAtMTkwOSw3ICsxOTA5LDcgQEAgY2xhc3MgZmhhbmRsZXJfdGVy bWlvczogcHVibGljIGZoYW5kbGVyX2Jhc2UKICAgaW50IGlvY3RsIChpbnQsIHZvaWQgKik7CiAg IHR0eV9taW4gKl90YzsKICAgdHR5ICpnZXRfdHR5cCAoKSB7cmV0dXJuICh0dHkgKikgdGMgKCk7 fQotICB2aXJ0dWFsIGludCBlYXRfcmVhZGFoZWFkIChpbnQgbik7CisgIGludCBlYXRfcmVhZGFo ZWFkIChpbnQgbik7CiAKICBwdWJsaWM6CiAgIHR0eV9taW4qJiB0YyAoKSB7cmV0dXJuIF90Yzt9 CkBAIC0yMTg4LDcgKzIxODgsNiBAQCBwcml2YXRlOgogICBzdGF0aWMgYm9vbCBuZWVkX2ludmlz aWJsZSAoKTsKICAgc3RhdGljIHZvaWQgZnJlZV9jb25zb2xlICgpOwogICBzdGF0aWMgY29uc3Qg Y2hhciAqZ2V0X25vbmFzY2lpX2tleSAoSU5QVVRfUkVDT1JEJiBpbnB1dF9yZWMsIGNoYXIgKik7 Ci0gIHN0YXRpYyBEV09SRCBnZXRfY29uc29sZV9wcm9jZXNzX2lkIChEV09SRCBwaWQsIGJvb2wg bWF0Y2gpOwogCiAgIGZoYW5kbGVyX2NvbnNvbGUgKHZvaWQgKikge30KIApAQCAtMjI2OCwxOSAr MjI2Nyw3IEBAIGNsYXNzIGZoYW5kbGVyX3B0eV9jb21tb246IHB1YmxpYyBmaGFuZGxlcl90ZXJt aW9zCiAgICAgcmV0dXJuIGZoOwogICB9CiAKLSAgYm9vbCBhdHRhY2hfcGNvbl9pbl9mb3JrICh2 b2lkKQotICB7Ci0gICAgcmV0dXJuIGdldF90dHlwICgpLT5hdHRhY2hfcGNvbl9pbl9mb3JrOwot ICB9Ci0gIERXT1JEIGdldF9oZWxwZXJfcHJvY2Vzc19pZCAodm9pZCkKLSAgewotICAgIHJldHVy biBnZXRfdHR5cCAoKS0+aGVscGVyX3Byb2Nlc3NfaWQ7Ci0gIH0KLSAgSFBDT04gZ2V0X3BzZXVk b19jb25zb2xlICh2b2lkKQotICB7Ci0gICAgcmV0dXJuIGdldF90dHlwICgpLT5oX3BzZXVkb19j b25zb2xlOwotICB9Ci0gIGJvb2wgdG9fYmVfcmVhZF9mcm9tX3Bjb24gKHZvaWQpOworICB2b2lk IHJlc2l6ZV9wc2V1ZG9fY29uc29sZSAoc3RydWN0IHdpbnNpemUgKik7CiAKICBwcm90ZWN0ZWQ6 CiAgIEJPT0wgcHJvY2Vzc19vcG9zdF9vdXRwdXQgKEhBTkRMRSBoLApAQCAtMjI5MSwyMyArMjI3 OCwxNSBAQCBjbGFzcyBmaGFuZGxlcl9wdHlfc2xhdmU6IHB1YmxpYyBmaGFuZGxlcl9wdHlfY29t bW9uCiB7CiAgIEhBTkRMRSBpbnVzZTsJCQkvLyB1c2VkIHRvIGluZGljYXRlIHRoYXQgYSB0dHkg aXMgaW4gdXNlCiAgIEhBTkRMRSBvdXRwdXRfaGFuZGxlX2N5ZywgaW9faGFuZGxlX2N5ZzsKLSAg RFdPUkQgcGlkX3Jlc3RvcmU7Ci0gIGludCBmZDsKIAogICAvKiBIZWxwZXIgZnVuY3Rpb25zIGZv ciBmY2htb2QgYW5kIGZjaG93bi4gKi8KICAgYm9vbCBmY2hfb3Blbl9oYW5kbGVzIChib29sIGNo b3duKTsKICAgaW50IGZjaF9zZXRfc2QgKHNlY3VyaXR5X2Rlc2NyaXB0b3IgJnNkLCBib29sIGNo b3duKTsKICAgdm9pZCBmY2hfY2xvc2VfaGFuZGxlcyAoKTsKIAotICBib29sIHRyeV9yZWF0dGFj aF9wY29uICgpOwotICB2b2lkIHJlc3RvcmVfcmVhdHRhY2hfcGNvbiAoKTsKLSAgaW5saW5lIHZv aWQgZnJlZV9hdHRhY2hlZF9jb25zb2xlICgpOwotCiAgcHVibGljOgogICAvKiBDb25zdHJ1Y3Rv ciAqLwogICBmaGFuZGxlcl9wdHlfc2xhdmUgKGludCk7Ci0gIC8qIERlc3RydWN0b3IgKi8KLSAg fmZoYW5kbGVyX3B0eV9zbGF2ZSAoKTsKIAogICB2b2lkIHNldF9vdXRwdXRfaGFuZGxlX2N5ZyAo SEFORExFIGgpIHsgb3V0cHV0X2hhbmRsZV9jeWcgPSBoOyB9CiAgIEhBTkRMRSYgZ2V0X291dHB1 dF9oYW5kbGVfY3lnICgpIHsgcmV0dXJuIG91dHB1dF9oYW5kbGVfY3lnOyB9CkBAIC0yMzE5LDkg KzIyOTgsNiBAQCBjbGFzcyBmaGFuZGxlcl9wdHlfc2xhdmU6IHB1YmxpYyBmaGFuZGxlcl9wdHlf Y29tbW9uCiAgIHNzaXplX3QgX19zdGRjYWxsIHdyaXRlIChjb25zdCB2b2lkICpwdHIsIHNpemVf dCBsZW4pOwogICB2b2lkIF9fcmVnMyByZWFkICh2b2lkICpwdHIsIHNpemVfdCYgbGVuKTsKICAg aW50IGluaXQgKEhBTkRMRSwgRFdPUkQsIG1vZGVfdCk7Ci0gIGludCBlYXRfcmVhZGFoZWFkIChp bnQgbik7Ci0gIGludCBnZXRfcmVhZGFoZWFkX2ludG9fYnVmZmVyIChjaGFyICpidWYsIHNpemVf dCBidWZsZW4pOwotICBib29sIGdldF9yZWFkYWhlYWRfdmFsaWQgKHZvaWQpOwogCiAgIGludCB0 Y3NldGF0dHIgKGludCBhLCBjb25zdCBzdHJ1Y3QgdGVybWlvcyAqdCk7CiAgIGludCB0Y2dldGF0 dHIgKHN0cnVjdCB0ZXJtaW9zICp0KTsKQEAgLTIzNTgsMjAgKzIzMzQsMTIgQEAgY2xhc3MgZmhh bmRsZXJfcHR5X3NsYXZlOiBwdWJsaWMgZmhhbmRsZXJfcHR5X2NvbW1vbgogICAgIGNvcHl0byAo ZmgpOwogICAgIHJldHVybiBmaDsKICAgfQotICB2b2lkIHNldF9zd2l0Y2hfdG9fcGNvbiAoaW50 IGZkKTsKKyAgYm9vbCBzZXR1cF9wc2V1ZG9jb25zb2xlIChTVEFSVFVQSU5GT0VYVyAqc2kpOwor ICB2b2lkIGNsb3NlX3BzZXVkb2NvbnNvbGUgKHZvaWQpOworICB2b2lkIHNldF9zd2l0Y2hfdG9f cGNvbiAodm9pZCk7CiAgIHZvaWQgcmVzZXRfc3dpdGNoX3RvX3Bjb24gKHZvaWQpOwotICB2b2lk IHB1c2hfdG9fcGNvbl9zY3JlZW5idWZmZXIgKGNvbnN0IGNoYXIgKnB0ciwgc2l6ZV90IGxlbiwg Ym9vbCBpc19lY2hvKTsKICAgdm9pZCBtYXNrX3N3aXRjaF90b19wY29uX2luIChib29sIG1hc2sp OwotICB2b2lkIGZpeHVwX2FmdGVyX2F0dGFjaCAoYm9vbCBuYXRpdmVfbWF5YmUsIGludCBmZCk7 Ci0gIGJvb2wgaXNfbGluZV9pbnB1dCAodm9pZCkKLSAgewotICAgIHJldHVybiBnZXRfdHR5cCAo KS0+dGkuY19sZmxhZyAmIElDQU5PTjsKLSAgfQogICB2b2lkIHNldHVwX2xvY2FsZSAodm9pZCk7 Ci0gIHZvaWQgc2V0X2ZyZWVjb25zb2xlX29uX2Nsb3NlIChib29sIHZhbCk7Ci0gIHZvaWQgdHJp Z2dlcl9yZWRyYXdfc2NyZWVuICh2b2lkKTsKLSAgdm9pZCBwdWxsX3Bjb25faW5wdXQgKHZvaWQp OwotICB2b2lkIHVwZGF0ZV9wY29uX2lucHV0X3N0YXRlIChib29sIG5lZWRfbG9jayk7CiB9Owog CiAjZGVmaW5lIF9fcHRzbmFtZShidWYsIHVuaXQpIF9fc21hbGxfc3ByaW50ZiAoKGJ1ZiksICIv ZGV2L3B0eSVkIiwgKHVuaXQpKQpAQCAtMjM5Niw3ICsyMzY0LDYgQEAgcHVibGljOgogICBpbnQg cHJvY2Vzc19zbGF2ZV9vdXRwdXQgKGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgaW50IHBrdG1vZGVf b24pOwogICB2b2lkIGRvZWNobyAoY29uc3Qgdm9pZCAqc3RyLCBEV09SRCBsZW4pOwogICBpbnQg YWNjZXB0X2lucHV0ICgpOwotICBpbnQgcHV0X3JlYWRhaGVhZCAoY2hhciB2YWx1ZSk7CiAgIGlu dCBvcGVuIChpbnQgZmxhZ3MsIG1vZGVfdCBtb2RlID0gMCk7CiAgIHZvaWQgb3Blbl9zZXR1cCAo aW50IGZsYWdzKTsKICAgc3NpemVfdCBfX3N0ZGNhbGwgd3JpdGUgKGNvbnN0IHZvaWQgKnB0ciwg c2l6ZV90IGxlbik7CkBAIC0yNDM1LDkgKzI0MDIsNyBAQCBwdWJsaWM6CiAgICAgY29weXRvIChm aCk7CiAgICAgcmV0dXJuIGZoOwogICB9Ci0KLSAgYm9vbCBzZXR1cF9wc2V1ZG9jb25zb2xlICh2 b2lkKTsKLSAgdm9pZCB0cmFuc2Zlcl9pbnB1dF90b19wY29uICh2b2lkKTsKKyAgYm9vbCB0b19i ZV9yZWFkX2Zyb21fcGNvbiAodm9pZCk7CiB9OwogCiBjbGFzcyBmaGFuZGxlcl9kZXZfbnVsbDog cHVibGljIGZoYW5kbGVyX2Jhc2UKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJf Y29uc29sZS5jYyBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfY29uc29sZS5jYwppbmRleCA1Mjc0 MWNlOGIuLjAyYTU5OTZhMSAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9maGFuZGxlcl9jb25z b2xlLmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfY29uc29sZS5jYwpAQCAtMTIwNiwx OCArMTIwNiw2IEBAIGZoYW5kbGVyX2NvbnNvbGU6OmNsb3NlICgpCiAgIGlmIChjb25fcmEucmFi dWYpCiAgICAgZnJlZSAoY29uX3JhLnJhYnVmKTsKIAotICAvKiBJZiBhbHJlYWR5IGF0dGFjaGVk IHRvIHBzZXVkbyBjb25zb2xlLCBkb24ndCBjYWxsIGZyZWVfY29uc29sZSAoKSAqLwotICBjeWdo ZWFwX2ZkZW51bSBjZmQgKGZhbHNlKTsKLSAgd2hpbGUgKGNmZC5uZXh0ICgpID49IDApCi0gICAg aWYgKGNmZC0+Z2V0X21ham9yICgpID09IERFVl9QVFlNX01BSk9SIHx8Ci0JY2ZkLT5nZXRfbWFq b3IgKCkgPT0gREVWX1BUWVNfTUFKT1IpCi0gICAgICB7Ci0JZmhhbmRsZXJfcHR5X2NvbW1vbiAq dCA9Ci0JICAoZmhhbmRsZXJfcHR5X2NvbW1vbiAqKSAoZmhhbmRsZXJfYmFzZSAqKSBjZmQ7Ci0J aWYgKGdldF9jb25zb2xlX3Byb2Nlc3NfaWQgKHQtPmdldF9oZWxwZXJfcHJvY2Vzc19pZCAoKSwg dHJ1ZSkpCi0JICByZXR1cm4gMDsKLSAgICAgIH0KLQogICBpZiAoIWhhdmVfZXhlY2VkKQogICAg IGZyZWVfY29uc29sZSAoKTsKICAgcmV0dXJuIDA7CkBAIC0zNjExLDM3ICszNTk5LDYgQEAgZmhh bmRsZXJfY29uc29sZTo6bmVlZF9pbnZpc2libGUgKCkKICAgcmV0dXJuIGI7CiB9CiAKLURXT1JE Ci1maGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkIChEV09SRCBwaWQsIGJv b2wgbWF0Y2gpCi17Ci0gIERXT1JEIHRtcDsKLSAgRFdPUkQgbnVtLCBudW1fcmVxOwotICBudW0g PSAxOwotICBudW1fcmVxID0gR2V0Q29uc29sZVByb2Nlc3NMaXN0ICgmdG1wLCBudW0pOwotICBE V09SRCAqbGlzdDsKLSAgd2hpbGUgKHRydWUpCi0gICAgewotICAgICAgbGlzdCA9IChEV09SRCAq KQotCUhlYXBBbGxvYyAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIG51bV9yZXEgKiBzaXplb2YgKERX T1JEKSk7Ci0gICAgICBudW0gPSBudW1fcmVxOwotICAgICAgbnVtX3JlcSA9IEdldENvbnNvbGVQ cm9jZXNzTGlzdCAobGlzdCwgbnVtKTsKLSAgICAgIGlmIChudW1fcmVxID4gbnVtKQotCUhlYXBG cmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgbGlzdCk7Ci0gICAgICBlbHNlCi0JYnJlYWs7Ci0g ICAgfQotICBudW0gPSBudW1fcmVxOwotCi0gIHRtcCA9IDA7Ci0gIGZvciAoRFdPUkQgaT0wOyBp PG51bTsgaSsrKQotICAgIGlmICgobWF0Y2ggJiYgbGlzdFtpXSA9PSBwaWQpIHx8ICghbWF0Y2gg JiYgbGlzdFtpXSAhPSBwaWQpKQotICAgICAgLyogTGFzdCBvbmUgaXMgdGhlIG9sZGVzdC4gKi8K LSAgICAgIC8qIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvdGVybWluYWwvaXNzdWVzLzk1 ICovCi0gICAgICB0bXAgPSBsaXN0W2ldOwotICBIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCks IDAsIGxpc3QpOwotICByZXR1cm4gdG1wOwotfQotCiBEV09SRAogZmhhbmRsZXJfY29uc29sZTo6 X19hY3F1aXJlX2lucHV0X211dGV4IChjb25zdCBjaGFyICpmbiwgaW50IGxuLCBEV09SRCBtcykK IHsKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfdHR5LmNjIGIvd2luc3VwL2N5 Z3dpbi9maGFuZGxlcl90dHkuY2MKaW5kZXggNmEwMDRmM2E1Li40MTA4NTM1NTAgMTAwNjQ0Ci0t LSBhL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfdHR5LmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vZmhh bmRsZXJfdHR5LmNjCkBAIC0yNSw3ICsyNSw2IEBAIGRldGFpbHMuICovCiAjaW5jbHVkZSAiY2hp bGRfaW5mby5oIgogI2luY2x1ZGUgPGFzbS9zb2NrZXQuaD4KICNpbmNsdWRlICJjeWd3YWl0Lmgi Ci0jaW5jbHVkZSAidGxzX3BidWYuaCIKICNpbmNsdWRlICJyZWdpc3RyeS5oIgogCiAjaWZuZGVm IFBST0NfVEhSRUFEX0FUVFJJQlVURV9QU0VVRE9DT05TT0xFCkBAIC0zMyw3ICszMiw2IEBAIGRl dGFpbHMuICovCiAjZW5kaWYgLyogUFJPQ19USFJFQURfQVRUUklCVVRFX1BTRVVET0NPTlNPTEUg Ki8KIAogZXh0ZXJuICJDIiBpbnQgc3NjYW5mIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwg Li4uKTsKLWV4dGVybiAiQyIgaW50IHR0eW5hbWVfciAoaW50LCBjaGFyKiwgc2l6ZV90KTsKIAog ZXh0ZXJuICJDIiB7CiAgIEhSRVNVTFQgV0lOQVBJIENyZWF0ZVBzZXVkb0NvbnNvbGUgKENPT1JE LCBIQU5ETEUsIEhBTkRMRSwgRFdPUkQsIEhQQ09OICopOwpAQCAtNjAsMjAgKzU4LDEwIEBAIHN0 cnVjdCBwaXBlX3JlcGx5IHsKICAgRFdPUkQgZXJyb3I7CiB9OwogCi1zdGF0aWMgaW50IHBjb25f YXR0YWNoZWRfdG8gPSAtMTsKIHN0YXRpYyBib29sIGlzSHlicmlkOwotc3RhdGljIGJvb2wgZG9f bm90X3Jlc2V0X3N3aXRjaF90b19wY29uOwotc3RhdGljIGJvb2wgZnJlZWNvbnNvbGVfb25fY2xv c2UgPSB0cnVlOwotc3RhdGljIHR0eSAqbGFzdF90dHlwID0gTlVMTDsKLQotdm9pZAotY2xlYXJf cGNvbl9hdHRhY2hlZF90byAodm9pZCkKLXsKLSAgcGNvbl9hdHRhY2hlZF90byA9IC0xOwotfQog CiBzdGF0aWMgdm9pZAotc2V0X3N3aXRjaF90b19wY29uICh2b2lkKQorc2V0X3N3aXRjaF90b19w Y29uIChIQU5ETEUgaCkKIHsKICAgY3lnaGVhcF9mZGVudW0gY2ZkIChmYWxzZSk7CiAgIGludCBm ZDsKQEAgLTgyLDI4MCArNzAsMTcgQEAgc2V0X3N3aXRjaF90b19wY29uICh2b2lkKQogICAgICAg ewogCWZoYW5kbGVyX2Jhc2UgKmZoID0gY2ZkOwogCWZoYW5kbGVyX3B0eV9zbGF2ZSAqcHR5cyA9 IChmaGFuZGxlcl9wdHlfc2xhdmUgKikgZmg7Ci0JaWYgKHB0eXMtPmdldF9wc2V1ZG9fY29uc29s ZSAoKSkKLQkgIHsKLQkgICAgcHR5cy0+c2V0X3N3aXRjaF90b19wY29uIChmZCk7Ci0JICAgIHB0 eXMtPnRyaWdnZXJfcmVkcmF3X3NjcmVlbiAoKTsKLQkgICAgRFdPUkQgbW9kZSA9Ci0JICAgICAg RU5BQkxFX1BST0NFU1NFRF9JTlBVVCB8IEVOQUJMRV9MSU5FX0lOUFVUIHwgRU5BQkxFX0VDSE9f SU5QVVQ7Ci0JICAgIFNldENvbnNvbGVNb2RlIChwdHlzLT5nZXRfaGFuZGxlICgpLCBtb2RlKTsK LQkgIH0KKwlpZiAoaCA9PSBwdHlzLT5nZXRfaGFuZGxlICgpKQorCSAgcHR5cy0+c2V0X3N3aXRj aF90b19wY29uICgpOwogCXJldHVybjsKICAgICAgIH0KLSAgLyogTm8gcHR5IHNsYXZlIG9wZW5l ZCAqLwotICBpZiAobGFzdF90dHlwKSAvKiBNYWtlIHN5c3RlbV9wcmludGYoKSB3b3JrIGFmdGVy IGNsb3NpbmcgcHR5IHNsYXZlICovCi0gICAgbGFzdF90dHlwLT5zZXRfc3dpdGNoX3RvX3Bjb25f b3V0ICh0cnVlKTsKLX0KLQotc3RhdGljIHZvaWQKLWZvcmNlX2F0dGFjaF90b19wY29uIChIQU5E TEUgaCkKLXsKLSAgYm9vbCBhdHRhY2hfZG9uZSA9IGZhbHNlOwotICBmb3IgKGludCBuID0gMDsg biA8IDI7IG4gKyspCi0gICAgewotICAgICAgLyogRmlyc3QgdGltZSwgYXR0YWNoIHRvIHRoZSBw dHkgd2hvc2UgaGFuZGxlIHZhbHVlIGlzIG1hdGNoLgotCSBTZWNvbmQgdGltZSwgdHJ5IHRvIGF0 dGFjaCB0byBhbnkgcHR5LiAqLwotICAgICAgY3lnaGVhcF9mZGVudW0gY2ZkIChmYWxzZSk7Ci0g ICAgICB3aGlsZSAoY2ZkLm5leHQgKCkgPj0gMCkKLQlpZiAoY2ZkLT5nZXRfbWFqb3IgKCkgPT0g REVWX1BUWVNfTUFKT1IpCi0JICB7Ci0JICAgIGZoYW5kbGVyX2Jhc2UgKmZoID0gY2ZkOwotCSAg ICBmaGFuZGxlcl9wdHlfc2xhdmUgKnB0eXMgPSAoZmhhbmRsZXJfcHR5X3NsYXZlICopIGZoOwot CSAgICBpZiAoIXB0eXMtPmdldF9wc2V1ZG9fY29uc29sZSAoKSkKLQkgICAgICBjb250aW51ZTsK LQkgICAgaWYgKG4gIT0gMAotCQl8fCBoID09IHB0eXMtPmdldF9oYW5kbGUgKCkKLQkJfHwgaCA9 PSBwdHlzLT5nZXRfb3V0cHV0X2hhbmRsZSAoKSkKLQkgICAgICB7Ci0JCWlmIChmaGFuZGxlcl9j b25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkCi0JCQkJICAocHR5cy0+Z2V0X2hlbHBlcl9w cm9jZXNzX2lkICgpLCB0cnVlKSkKLQkJICBhdHRhY2hfZG9uZSA9IHRydWU7Ci0JCWVsc2UKLQkJ ICB7Ci0JCSAgICBGcmVlQ29uc29sZSAoKTsKLQkJICAgIGlmIChBdHRhY2hDb25zb2xlIChwdHlz LT5nZXRfaGVscGVyX3Byb2Nlc3NfaWQgKCkpKQotCQkgICAgICB7Ci0JCQlwY29uX2F0dGFjaGVk X3RvID0gcHR5cy0+Z2V0X21pbm9yICgpOwotCQkJYXR0YWNoX2RvbmUgPSB0cnVlOwotCQkgICAg ICB9Ci0JCSAgICBlbHNlCi0JCSAgICAgIHBjb25fYXR0YWNoZWRfdG8gPSAtMTsKLQkJICB9Ci0J CWJyZWFrOwotCSAgICAgIH0KLQkgIH0KLQllbHNlIGlmIChjZmQtPmdldF9tYWpvciAoKSA9PSBE RVZfQ09OU19NQUpPUikKLQkgIHsKLQkgICAgZmhhbmRsZXJfYmFzZSAqZmggPSBjZmQ7Ci0JICAg IGZoYW5kbGVyX2NvbnNvbGUgKmNvbnMgPSAoZmhhbmRsZXJfY29uc29sZSAqKSBmaDsKLQkgICAg aWYgKG4gIT0gMAotCQl8fCBoID09IGNvbnMtPmdldF9oYW5kbGUgKCkKLQkJfHwgaCA9PSBjb25z LT5nZXRfb3V0cHV0X2hhbmRsZSAoKSkKLQkgICAgICB7Ci0JCS8qIElmIHRoZSBwcm9jZXNzIGlz IHJ1bm5pbmcgb24gYSBjb25zb2xlLAotCQkgICB0aGUgcGFyZW50IHByb2Nlc3Mgc2hvdWxkIGJl IGF0dGFjaGVkCi0JCSAgIHRvIHRoZSBzYW1lIGNvbnNvbGUuICovCi0JCURXT1JEIGF0dGFjaF93 cGlkOwotCQlpZiAobXlzZWxmLT5wcGlkID09IDEpCi0JCSAgYXR0YWNoX3dwaWQgPSBBVFRBQ0hf UEFSRU5UX1BST0NFU1M7Ci0JCWVsc2UKLQkJICB7Ci0JCSAgICBwaW5mbyBwIChteXNlbGYtPnBw aWQpOwotCQkgICAgYXR0YWNoX3dwaWQgPSBwLT5kd1Byb2Nlc3NJZDsKLQkJICB9Ci0JCUZyZWVD b25zb2xlICgpOwotCQlpZiAoQXR0YWNoQ29uc29sZSAoYXR0YWNoX3dwaWQpKQotCQkgIHsKLQkJ ICAgIHBjb25fYXR0YWNoZWRfdG8gPSAtMTsKLQkJICAgIGF0dGFjaF9kb25lID0gdHJ1ZTsKLQkJ ICB9Ci0JCWVsc2UKLQkJICBwY29uX2F0dGFjaGVkX3RvID0gLTE7Ci0JCWJyZWFrOwotCSAgICAg IH0KLQkgIH0KLSAgICAgIGlmIChhdHRhY2hfZG9uZSkKLQlicmVhazsKLSAgICB9Ci19Ci0KLXZv aWQKLXNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKEhBTkRMRSBoKQotewotICBpZiAo R2V0RmlsZVR5cGUgKGgpID09IEZJTEVfVFlQRV9DSEFSKQotICAgIHsKLSAgICAgIGZvcmNlX2F0 dGFjaF90b19wY29uIChoKTsKLSAgICAgIERXT1JEIGR1bW15OwotICAgICAgaWYgKCFpc0h5YnJp ZCAmJiAoR2V0Q29uc29sZU1vZGUgKGgsICZkdW1teSkKLQkJCXx8IEdldExhc3RFcnJvciAoKSAh PSBFUlJPUl9JTlZBTElEX0hBTkRMRSkpCi0JewotCSAgaXNIeWJyaWQgPSB0cnVlOwotCSAgc2V0 X3N3aXRjaF90b19wY29uICgpOwotCX0KLSAgICB9Ci19Ci0KLWlubGluZSB2b2lkCi1maGFuZGxl cl9wdHlfc2xhdmU6OmZyZWVfYXR0YWNoZWRfY29uc29sZSAoKQotewotICBib29sIGF0dGFjaGVk ID0gZ2V0X3R0eXAgKCkgPwotICAgIGZoYW5kbGVyX2NvbnNvbGU6OmdldF9jb25zb2xlX3Byb2Nl c3NfaWQgKGdldF9oZWxwZXJfcHJvY2Vzc19pZCAoKSwgdHJ1ZSkKLSAgICA6IChnZXRfbWlub3Ig KCkgPT0gcGNvbl9hdHRhY2hlZF90byk7Ci0gIGlmIChmcmVlY29uc29sZV9vbl9jbG9zZSAmJiBh dHRhY2hlZCkKLSAgICB7Ci0gICAgICBGcmVlQ29uc29sZSAoKTsKLSAgICAgIHBjb25fYXR0YWNo ZWRfdG8gPSAtMTsKLSAgICB9CiB9CiAKICNkZWZpbmUgREVGX0hPT0sobmFtZSkgc3RhdGljIF9f dHlwZW9mX18gKG5hbWUpICpuYW1lIyNfT3JpZwotREVGX0hPT0sgKFdyaXRlRmlsZSk7Ci1ERUZf SE9PSyAoV3JpdGVDb25zb2xlQSk7Ci1ERUZfSE9PSyAoV3JpdGVDb25zb2xlVyk7Ci1ERUZfSE9P SyAoUmVhZEZpbGUpOwotREVGX0hPT0sgKFJlYWRDb25zb2xlQSk7Ci1ERUZfSE9PSyAoUmVhZENv bnNvbGVXKTsKLURFRl9IT09LIChXcml0ZUNvbnNvbGVPdXRwdXRBKTsKLURFRl9IT09LIChXcml0 ZUNvbnNvbGVPdXRwdXRXKTsKLURFRl9IT09LIChXcml0ZUNvbnNvbGVPdXRwdXRDaGFyYWN0ZXJB KTsKLURFRl9IT09LIChXcml0ZUNvbnNvbGVPdXRwdXRDaGFyYWN0ZXJXKTsKLURFRl9IT09LIChX cml0ZUNvbnNvbGVPdXRwdXRBdHRyaWJ1dGUpOwotREVGX0hPT0sgKFNldENvbnNvbGVDdXJzb3JQ b3NpdGlvbik7Ci1ERUZfSE9PSyAoU2V0Q29uc29sZVRleHRBdHRyaWJ1dGUpOwotREVGX0hPT0sg KFdyaXRlQ29uc29sZUlucHV0QSk7Ci1ERUZfSE9PSyAoV3JpdGVDb25zb2xlSW5wdXRXKTsKLURF Rl9IT09LIChSZWFkQ29uc29sZUlucHV0QSk7Ci1ERUZfSE9PSyAoUmVhZENvbnNvbGVJbnB1dFcp OwotREVGX0hPT0sgKFBlZWtDb25zb2xlSW5wdXRBKTsKLURFRl9IT09LIChQZWVrQ29uc29sZUlu cHV0Vyk7CiAvKiBDcmVhdGVQcm9jZXNzKCkgaXMgaG9va2VkIGZvciBHREIgZXRjLiAqLwogREVG X0hPT0sgKENyZWF0ZVByb2Nlc3NBKTsKIERFRl9IT09LIChDcmVhdGVQcm9jZXNzVyk7CiAKLXN0 YXRpYyBCT09MIFdJTkFQSQotV3JpdGVGaWxlX0hvb2tlZAotICAgICAoSEFORExFIGgsIExQQ1ZP SUQgcCwgRFdPUkQgbCwgTFBEV09SRCBuLCBMUE9WRVJMQVBQRUQgbykKLXsKLSAgc2V0X2lzaHli cmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBXcml0ZUZpbGVfT3JpZyAoaCwg cCwgbCwgbiwgbyk7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVdyaXRlQ29uc29sZUFfSG9va2Vk Ci0gICAgIChIQU5ETEUgaCwgTFBDVk9JRCBwLCBEV09SRCBsLCBMUERXT1JEIG4sIExQVk9JRCBv KQotewotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKLSAgcmV0dXJuIFdy aXRlQ29uc29sZUFfT3JpZyAoaCwgcCwgbCwgbiwgbyk7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkK LVdyaXRlQ29uc29sZVdfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgTFBDVk9JRCBwLCBEV09SRCBs LCBMUERXT1JEIG4sIExQVk9JRCBvKQotewotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19w Y29uIChoKTsKLSAgcmV0dXJuIFdyaXRlQ29uc29sZVdfT3JpZyAoaCwgcCwgbCwgbiwgbyk7Ci19 Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVJlYWRGaWxlX0hvb2tlZAotICAgICAoSEFORExFIGgsIExQ Vk9JRCBwLCBEV09SRCBsLCBMUERXT1JEIG4sIExQT1ZFUkxBUFBFRCBvKQotewotICBzZXRfaXNo eWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKLSAgcmV0dXJuIFJlYWRGaWxlX09yaWcgKGgs IHAsIGwsIG4sIG8pOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1SZWFkQ29uc29sZUFfSG9va2Vk Ci0gICAgIChIQU5ETEUgaCwgTFBWT0lEIHAsIERXT1JEIGwsIExQRFdPUkQgbiwgTFBWT0lEIG8p Ci17Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gUmVh ZENvbnNvbGVBX09yaWcgKGgsIHAsIGwsIG4sIG8pOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1S ZWFkQ29uc29sZVdfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgTFBWT0lEIHAsIERXT1JEIGwsIExQ RFdPUkQgbiwgTFBWT0lEIG8pCi17Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24g KGgpOwotICByZXR1cm4gUmVhZENvbnNvbGVXX09yaWcgKGgsIHAsIGwsIG4sIG8pOwotfQotc3Rh dGljIEJPT0wgV0lOQVBJCi1Xcml0ZUNvbnNvbGVPdXRwdXRBX0hvb2tlZAotICAgICAoSEFORExF IGgsIENPTlNUIENIQVJfSU5GTyAqcCwgQ09PUkQgcywgQ09PUkQgYywgUFNNQUxMX1JFQ1QgcikK LXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBXcml0 ZUNvbnNvbGVPdXRwdXRBX09yaWcgKGgsIHAsIHMsIGMsIHIpOwotfQotc3RhdGljIEJPT0wgV0lO QVBJCi1Xcml0ZUNvbnNvbGVPdXRwdXRXX0hvb2tlZAotICAgICAoSEFORExFIGgsIENPTlNUIENI QVJfSU5GTyAqcCwgQ09PUkQgcywgQ09PUkQgYywgUFNNQUxMX1JFQ1QgcikKLXsKLSAgc2V0X2lz aHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBXcml0ZUNvbnNvbGVPdXRw dXRXX09yaWcgKGgsIHAsIHMsIGMsIHIpOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1Xcml0ZUNv bnNvbGVPdXRwdXRDaGFyYWN0ZXJBX0hvb2tlZAotICAgICAoSEFORExFIGgsIExQQ1NUUiBwLCBE V09SRCBsLCBDT09SRCBjLCBMUERXT1JEIG4pCi17Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNo X3RvX3Bjb24gKGgpOwotICByZXR1cm4gV3JpdGVDb25zb2xlT3V0cHV0Q2hhcmFjdGVyQV9Pcmln IChoLCBwLCBsLCBjLCBuKTsKLX0KLXN0YXRpYyBCT09MIFdJTkFQSQotV3JpdGVDb25zb2xlT3V0 cHV0Q2hhcmFjdGVyV19Ib29rZWQKLSAgICAgKEhBTkRMRSBoLCBMUENXU1RSIHAsIERXT1JEIGws IENPT1JEIGMsIExQRFdPUkQgbikKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNv biAoaCk7Ci0gIHJldHVybiBXcml0ZUNvbnNvbGVPdXRwdXRDaGFyYWN0ZXJXX09yaWcgKGgsIHAs IGwsIGMsIG4pOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1Xcml0ZUNvbnNvbGVPdXRwdXRBdHRy aWJ1dGVfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgQ09OU1QgV09SRCAqYSwgRFdPUkQgbCwgQ09P UkQgYywgTFBEV09SRCBuKQotewotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uICho KTsKLSAgcmV0dXJuIFdyaXRlQ29uc29sZU91dHB1dEF0dHJpYnV0ZV9PcmlnIChoLCBhLCBsLCBj LCBuKTsKLX0KLXN0YXRpYyBCT09MIFdJTkFQSQotU2V0Q29uc29sZUN1cnNvclBvc2l0aW9uX0hv b2tlZAotICAgICAoSEFORExFIGgsIENPT1JEIGMpCi17Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dp dGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gU2V0Q29uc29sZUN1cnNvclBvc2l0aW9uX09yaWcg KGgsIGMpOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1TZXRDb25zb2xlVGV4dEF0dHJpYnV0ZV9I b29rZWQKLSAgICAgKEhBTkRMRSBoLCBXT1JEIGEpCi17Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dp dGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gU2V0Q29uc29sZVRleHRBdHRyaWJ1dGVfT3JpZyAo aCwgYSk7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVdyaXRlQ29uc29sZUlucHV0QV9Ib29rZWQK LSAgICAgKEhBTkRMRSBoLCBDT05TVCBJTlBVVF9SRUNPUkQgKnIsIERXT1JEIGwsIExQRFdPUkQg bikKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBX cml0ZUNvbnNvbGVJbnB1dEFfT3JpZyAoaCwgciwgbCwgbik7Ci19Ci1zdGF0aWMgQk9PTCBXSU5B UEkKLVdyaXRlQ29uc29sZUlucHV0V19Ib29rZWQKLSAgICAgKEhBTkRMRSBoLCBDT05TVCBJTlBV VF9SRUNPUkQgKnIsIERXT1JEIGwsIExQRFdPUkQgbikKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9z d2l0Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBXcml0ZUNvbnNvbGVJbnB1dFdfT3JpZyAoaCwg ciwgbCwgbik7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVJlYWRDb25zb2xlSW5wdXRBX0hvb2tl ZAotICAgICAoSEFORExFIGgsIFBJTlBVVF9SRUNPUkQgciwgRFdPUkQgbCwgTFBEV09SRCBuKQot ewotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKLSAgcmV0dXJuIFJlYWRD b25zb2xlSW5wdXRBX09yaWcgKGgsIHIsIGwsIG4pOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1S ZWFkQ29uc29sZUlucHV0V19Ib29rZWQKLSAgICAgKEhBTkRMRSBoLCBQSU5QVVRfUkVDT1JEIHIs IERXT1JEIGwsIExQRFdPUkQgbikKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNv biAoaCk7Ci0gIHJldHVybiBSZWFkQ29uc29sZUlucHV0V19PcmlnIChoLCByLCBsLCBuKTsKLX0K LXN0YXRpYyBCT09MIFdJTkFQSQotUGVla0NvbnNvbGVJbnB1dEFfSG9va2VkCi0gICAgIChIQU5E TEUgaCwgUElOUFVUX1JFQ09SRCByLCBEV09SRCBsLCBMUERXT1JEIG4pCi17Ci0gIHNldF9pc2h5 YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gUGVla0NvbnNvbGVJbnB1dEFf T3JpZyAoaCwgciwgbCwgbik7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVBlZWtDb25zb2xlSW5w dXRXX0hvb2tlZAotICAgICAoSEFORExFIGgsIFBJTlBVVF9SRUNPUkQgciwgRFdPUkQgbCwgTFBE V09SRCBuKQotewotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKLSAgcmV0 dXJuIFBlZWtDb25zb2xlSW5wdXRXX09yaWcgKGgsIHIsIGwsIG4pOwotfQotLyogQ3JlYXRlUHJv Y2VzcygpIGlzIGhvb2tlZCBmb3IgR0RCIGV0Yy4gKi8KIHN0YXRpYyBCT09MIFdJTkFQSQogQ3Jl YXRlUHJvY2Vzc0FfSG9va2VkCiAgICAgIChMUENTVFIgbiwgTFBTVFIgYywgTFBTRUNVUklUWV9B VFRSSUJVVEVTIHBhLCBMUFNFQ1VSSVRZX0FUVFJJQlVURVMgdGEsCkBAIC0zNjMsMTEgKzg4LDE0 IEBAIENyZWF0ZVByb2Nlc3NBX0hvb2tlZAogICAgICAgTFBTVEFSVFVQSU5GT0Egc2ksIExQUFJP Q0VTU19JTkZPUk1BVElPTiBwaSkKIHsKICAgSEFORExFIGg7Ci0gIGlmIChzaS0+ZHdGbGFncyAm IFNUQVJURl9VU0VTVERIQU5ETEVTKQotICAgIGggPSBzaS0+aFN0ZE91dHB1dDsKLSAgZWxzZQot ICAgIGggPSBHZXRTdGRIYW5kbGUgKFNURF9PVVRQVVRfSEFORExFKTsKLSAgc2V0X2lzaHlicmlk X2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7CisgIGlmICghaXNIeWJyaWQpCisgICAgeworICAgICAg aWYgKHNpLT5kd0ZsYWdzICYgU1RBUlRGX1VTRVNUREhBTkRMRVMpCisJaCA9IHNpLT5oU3RkSW5w dXQ7CisgICAgICBlbHNlCisJaCA9IEdldFN0ZEhhbmRsZSAoU1REX0lOUFVUX0hBTkRMRSk7Cisg ICAgICBzZXRfc3dpdGNoX3RvX3Bjb24gKGgpOworICAgIH0KICAgcmV0dXJuIENyZWF0ZVByb2Nl c3NBX09yaWcgKG4sIGMsIHBhLCB0YSwgaW5oLCBmLCBlLCBkLCBzaSwgcGkpOwogfQogc3RhdGlj IEJPT0wgV0lOQVBJCkBAIC0zNzcsMTEgKzEwNSwxNCBAQCBDcmVhdGVQcm9jZXNzV19Ib29rZWQK ICAgICAgIExQU1RBUlRVUElORk9XIHNpLCBMUFBST0NFU1NfSU5GT1JNQVRJT04gcGkpCiB7CiAg IEhBTkRMRSBoOwotICBpZiAoc2ktPmR3RmxhZ3MgJiBTVEFSVEZfVVNFU1RESEFORExFUykKLSAg ICBoID0gc2ktPmhTdGRPdXRwdXQ7Ci0gIGVsc2UKLSAgICBoID0gR2V0U3RkSGFuZGxlIChTVERf T1VUUFVUX0hBTkRMRSk7Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwor ICBpZiAoIWlzSHlicmlkKQorICAgIHsKKyAgICAgIGlmIChzaS0+ZHdGbGFncyAmIFNUQVJURl9V U0VTVERIQU5ETEVTKQorCWggPSBzaS0+aFN0ZElucHV0OworICAgICAgZWxzZQorCWggPSBHZXRT dGRIYW5kbGUgKFNURF9JTlBVVF9IQU5ETEUpOworICAgICAgc2V0X3N3aXRjaF90b19wY29uICho KTsKKyAgICB9CiAgIHJldHVybiBDcmVhdGVQcm9jZXNzV19PcmlnIChuLCBjLCBwYSwgdGEsIGlu aCwgZiwgZSwgZCwgc2ksIHBpKTsKIH0KIApAQCAtNDY0LDEwICsxOTUsNiBAQCBmaGFuZGxlcl9w dHlfbWFzdGVyOjpmbHVzaF90b19zbGF2ZSAoKQogewogICBpZiAoZ2V0X3JlYWRhaGVhZF92YWxp ZCAoKSAmJiAhKGdldF90dHlwICgpLT50aS5jX2xmbGFnICYgSUNBTk9OKSkKICAgICBhY2NlcHRf aW5wdXQgKCk7Ci0gIFdhaXRGb3JTaW5nbGVPYmplY3QgKGlucHV0X211dGV4LCBJTkZJTklURSk7 Ci0gIGlmICghZ2V0X3R0eXAgKCktPnBjb25faW5fZW1wdHkgJiYgIShnZXRfdHR5cCAoKS0+dGku Y19sZmxhZyAmIElDQU5PTikpCi0gICAgU2V0RXZlbnQgKGlucHV0X2F2YWlsYWJsZV9ldmVudCk7 Ci0gIFJlbGVhc2VNdXRleCAoaW5wdXRfbXV0ZXgpOwogfQogCiBEV09SRApAQCAtNTMyLDE0ICsy NTksNiBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpkb2VjaG8gKGNvbnN0IHZvaWQgKnN0ciwgRFdP UkQgbGVuKQogICByZWxlYXNlX291dHB1dF9tdXRleCAoKTsKIH0KIAotaW50Ci1maGFuZGxlcl9w dHlfbWFzdGVyOjpwdXRfcmVhZGFoZWFkIChjaGFyIHZhbHVlKQotewotICBpZiAodG9fYmVfcmVh ZF9mcm9tX3Bjb24gKCkpCi0gICAgcmV0dXJuIDE7Ci0gIHJldHVybiBmaGFuZGxlcl9iYXNlOjpw dXRfcmVhZGFoZWFkICh2YWx1ZSk7Ci19Ci0KIGludAogZmhhbmRsZXJfcHR5X21hc3Rlcjo6YWNj ZXB0X2lucHV0ICgpCiB7CkBAIC01NTEsOSArMjcwLDExIEBAIGZoYW5kbGVyX3B0eV9tYXN0ZXI6 OmFjY2VwdF9pbnB1dCAoKQogICBjaGFyICpwID0gcmFidWYgKCkgKyByYWl4Z2V0ICgpOwogICBi eXRlc19sZWZ0ID0gZWF0X3JlYWRhaGVhZCAoLTEpOwogCisgIEhBTkRMRSB3cml0ZV90byA9IGdl dF9vdXRwdXRfaGFuZGxlICgpOwogICBpZiAodG9fYmVfcmVhZF9mcm9tX3Bjb24gKCkpCi0gICAg OyAvKiBEbyBub3RoaW5nICovCi0gIGVsc2UgaWYgKCFieXRlc19sZWZ0KQorICAgIHdyaXRlX3Rv ID0gdG9fc2xhdmU7CisKKyAgaWYgKCFieXRlc19sZWZ0KQogICAgIHsKICAgICAgIHRlcm1pb3Nf cHJpbnRmICgic2VuZGluZyBFT0YgdG8gc2xhdmUiKTsKICAgICAgIGdldF90dHlwICgpLT5yZWFk X3JldHZhbCA9IDA7CkBAIC01NjQsMTAgKzI4NSwxMCBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjph Y2NlcHRfaW5wdXQgKCkKICAgICAgIERXT1JEIHdyaXR0ZW4gPSAwOwogCiAgICAgICBwYXJhbm9p ZF9wcmludGYgKCJhYm91dCB0byB3cml0ZSAldSBjaGFycyB0byBzbGF2ZSIsIGJ5dGVzX2xlZnQp OwotICAgICAgcmMgPSBXcml0ZUZpbGUgKGdldF9vdXRwdXRfaGFuZGxlICgpLCBwLCBieXRlc19s ZWZ0LCAmd3JpdHRlbiwgTlVMTCk7CisgICAgICByYyA9IFdyaXRlRmlsZSAod3JpdGVfdG8sIHAs IGJ5dGVzX2xlZnQsICZ3cml0dGVuLCBOVUxMKTsKICAgICAgIGlmICghcmMpCiAJewotCSAgZGVi dWdfcHJpbnRmICgiZXJyb3Igd3JpdGluZyB0byBwaXBlICVwICVFIiwgZ2V0X291dHB1dF9oYW5k bGUgKCkpOworCSAgZGVidWdfcHJpbnRmICgiZXJyb3Igd3JpdGluZyB0byBwaXBlICVwICVFIiwg d3JpdGVfdG8pOwogCSAgZ2V0X3R0eXAgKCktPnJlYWRfcmV0dmFsID0gLTE7CiAJICByZXQgPSAt MTsKIAl9CkBAIC03MjUsNTIgKzQ0NiwxMiBAQCBvdXQ6CiAKIGZoYW5kbGVyX3B0eV9zbGF2ZTo6 ZmhhbmRsZXJfcHR5X3NsYXZlIChpbnQgdW5pdCkKICAgOiBmaGFuZGxlcl9wdHlfY29tbW9uICgp LCBpbnVzZSAoTlVMTCksIG91dHB1dF9oYW5kbGVfY3lnIChOVUxMKSwKLSAgaW9faGFuZGxlX2N5 ZyAoTlVMTCksIHBpZF9yZXN0b3JlICgwKSwgZmQgKC0xKQorICBpb19oYW5kbGVfY3lnIChOVUxM KQogewogICBpZiAodW5pdCA+PSAwKQogICAgIGRldiAoKS5wYXJzZSAoREVWX1BUWVNfTUFKT1Is IHVuaXQpOwogfQogCi1maGFuZGxlcl9wdHlfc2xhdmU6On5maGFuZGxlcl9wdHlfc2xhdmUgKCkK LXsKLSAgaWYgKCFnZXRfdHR5cCAoKSkKLSAgICB7Ci0gICAgICAvKiBXaHkgY29tZXMgaGVyZT8g V2hvIGNsZWFycyBfdGM/ICovCi0gICAgICBmcmVlX2F0dGFjaGVkX2NvbnNvbGUgKCk7Ci0gICAg ICByZXR1cm47Ci0gICAgfQotICBpZiAoZ2V0X3BzZXVkb19jb25zb2xlICgpKQotICAgIHsKLSAg ICAgIGludCB1c2VkID0gMDsKLSAgICAgIGludCBhdHRhY2hlZCA9IDA7Ci0gICAgICBjeWdoZWFw X2ZkZW51bSBjZmQgKGZhbHNlKTsKLSAgICAgIHdoaWxlIChjZmQubmV4dCAoKSA+PSAwKQotCXsK LQkgIGlmIChjZmQtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZU19NQUpPUiB8fAotCSAgICAgIGNm ZC0+Z2V0X21ham9yICgpID09IERFVl9DT05TX01BSk9SKQotCSAgICB1c2VkICsrOwotCSAgaWYg KGNmZC0+Z2V0X21ham9yICgpID09IERFVl9QVFlTX01BSk9SICYmCi0JICAgICAgY2ZkLT5nZXRf bWlub3IgKCkgPT0gcGNvbl9hdHRhY2hlZF90bykKLQkgICAgYXR0YWNoZWQgKys7Ci0JfQotCi0g ICAgICAvKiBDYWxsIEZyZWVDb25zb2xlKCkgaWYgbm8gdHR5IGlzIG9wZW5lZCBhbmQgdGhlIHBy b2Nlc3MKLQkgaXMgYXR0YWNoZWQgdG8gY29uc29sZSBjb3JyZXNwb25kaW5nIHRvIHR0eS4gVGhp cyBpcwotCSBuZWVkZWQgdG8gbWFrZSBHTlUgc2NyZWVuIGFuZCB0bXV4IHdvcmsgaW4gV2luZG93 cyAxMAotCSAxOTAzLiAqLwotICAgICAgaWYgKGF0dGFjaGVkID09IDApCi0JewotCSAgcGNvbl9h dHRhY2hlZF90byA9IC0xOwotCSAgbGFzdF90dHlwID0gZ2V0X3R0eXAgKCk7Ci0JfQotICAgICAg aWYgKHVzZWQgPT0gMCkKLQl7Ci0JICBpbml0X2NvbnNvbGVfaGFuZGxlciAoZmFsc2UpOwotCSAg ZnJlZV9hdHRhY2hlZF9jb25zb2xlICgpOwotCX0KLSAgICB9Ci19Ci0KIGludAogZmhhbmRsZXJf cHR5X3NsYXZlOjpvcGVuIChpbnQgZmxhZ3MsIG1vZGVfdCkKIHsKQEAgLTgzMyw4ICs1MTQsOCBA QCBmaGFuZGxlcl9wdHlfc2xhdmU6Om9wZW4gKGludCBmbGFncywgbW9kZV90KQogICAgIHJlbGVh c2Vfb3V0cHV0X211dGV4ICgpOwogICB9CiAKLSAgaWYgKCFnZXRfdHR5cCAoKS0+ZnJvbV9tYXN0 ZXIgKCkgfHwgIWdldF90dHlwICgpLT5mcm9tX21hc3Rlcl9jeWcgKCkgfHwKLSAgICAgICFnZXRf dHR5cCAoKS0+dG9fbWFzdGVyICgpIHx8ICFnZXRfdHR5cCAoKS0+dG9fbWFzdGVyX2N5ZyAoKSkK KyAgaWYgKCFnZXRfdHR5cCAoKS0+ZnJvbV9tYXN0ZXIgKCkgfHwgIWdldF90dHlwICgpLT5mcm9t X21hc3Rlcl9jeWcgKCkKKyAgICAgIHx8ICFnZXRfdHR5cCAoKS0+dG9fbWFzdGVyICgpIHx8ICFn ZXRfdHR5cCAoKS0+dG9fbWFzdGVyX2N5ZyAoKSkKICAgICB7CiAgICAgICBlcnJtc2cgPSAicHR5 IGhhbmRsZXMgaGF2ZSBiZWVuIGNsb3NlZCI7CiAgICAgICBzZXRfZXJybm8gKEVBQ0NFUyk7CkBA IC05MjMsOCArNjA0LDggQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpvcGVuIChpbnQgZmxhZ3MsIG1v ZGVfdCkKICAgICAgIGZyb21fbWFzdGVyX2N5Z19sb2NhbCA9IHJlcGwuZnJvbV9tYXN0ZXJfY3ln OwogICAgICAgdG9fbWFzdGVyX2xvY2FsID0gcmVwbC50b19tYXN0ZXI7CiAgICAgICB0b19tYXN0 ZXJfY3lnX2xvY2FsID0gcmVwbC50b19tYXN0ZXJfY3lnOwotICAgICAgaWYgKCFmcm9tX21hc3Rl cl9sb2NhbCB8fCAhZnJvbV9tYXN0ZXJfY3lnX2xvY2FsIHx8Ci0JICAhdG9fbWFzdGVyX2xvY2Fs IHx8ICF0b19tYXN0ZXJfY3lnX2xvY2FsKQorICAgICAgaWYgKCFmcm9tX21hc3Rlcl9sb2NhbCB8 fCAhZnJvbV9tYXN0ZXJfY3lnX2xvY2FsCisJICB8fCAhdG9fbWFzdGVyX2xvY2FsIHx8ICF0b19t YXN0ZXJfY3lnX2xvY2FsKQogCXsKIAkgIFNldExhc3RFcnJvciAocmVwbC5lcnJvcik7CiAJICBl cnJtc2cgPSAiZXJyb3IgZHVwbGljYXRpbmcgcGlwZXMsICVFIjsKQEAgLTk1MCwyNCArNjMxLDcg QEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpvcGVuIChpbnQgZmxhZ3MsIG1vZGVfdCkKICAgc2V0X291 dHB1dF9oYW5kbGUgKHRvX21hc3Rlcl9sb2NhbCk7CiAgIHNldF9vdXRwdXRfaGFuZGxlX2N5ZyAo dG9fbWFzdGVyX2N5Z19sb2NhbCk7CiAKLSAgaWYgKCFnZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0g ICAgewotICAgICAgZmhhbmRsZXJfY29uc29sZTo6bmVlZF9pbnZpc2libGUgKCk7Ci0gICAgICBw Y29uX2F0dGFjaGVkX3RvID0gLTE7Ci0gICAgfQotICBlbHNlIGlmICghZmhhbmRsZXJfY29uc29s ZTo6Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZAotCQkJICAgICAgIChHZXRDdXJyZW50UHJvY2Vzc0lk ICgpLCB0cnVlKSkKLSAgICB7Ci0gICAgICBmaGFuZGxlcl9jb25zb2xlOjpuZWVkX2ludmlzaWJs ZSAoKTsKLSAgICAgIHBjb25fYXR0YWNoZWRfdG8gPSAtMTsKLSAgICB9Ci0gIGVsc2UgaWYgKGZo YW5kbGVyX2NvbnNvbGU6OmdldF9jb25zb2xlX3Byb2Nlc3NfaWQKLQkJCSAgICAgICAoZ2V0X2hl bHBlcl9wcm9jZXNzX2lkICgpLCB0cnVlKSkKLSAgICAvKiBBdHRhY2hlZCB0byBwY29uIG9mIHRo aXMgcHR5ICovCi0gICAgewotICAgICAgcGNvbl9hdHRhY2hlZF90byA9IGdldF9taW5vciAoKTsK LSAgICAgIGluaXRfY29uc29sZV9oYW5kbGVyICh0cnVlKTsKLSAgICB9CisgIGZoYW5kbGVyX2Nv bnNvbGU6Om5lZWRfaW52aXNpYmxlICgpOwogCiAgIHNldF9vcGVuX3N0YXR1cyAoKTsKICAgcmV0 dXJuIDE7CkBAIC0xMDIxLDggKzY4NSw3IEBAIGZoYW5kbGVyX3B0eV9zbGF2ZTo6Y2xvc2UgKCkK ICAgaWYgKCFGb3JjZUNsb3NlSGFuZGxlIChnZXRfaGFuZGxlX2N5ZyAoKSkpCiAgICAgdGVybWlv c19wcmludGYgKCJDbG9zZUhhbmRsZSAoZ2V0X2hhbmRsZV9jeWcgKCk8JXA+KSwgJUUiLAogCWdl dF9oYW5kbGVfY3lnICgpKTsKLSAgaWYgKCFnZXRfcHNldWRvX2NvbnNvbGUgKCkgJiYKLSAgICAg ICh1bnNpZ25lZCkgbXlzZWxmLT5jdHR5ID09IEZIREVWIChERVZfUFRZU19NQUpPUiwgZ2V0X21p bm9yICgpKSkKKyAgaWYgKCh1bnNpZ25lZCkgbXlzZWxmLT5jdHR5ID09IEZIREVWIChERVZfUFRZ U19NQUpPUiwgZ2V0X21pbm9yICgpKSkKICAgICBmaGFuZGxlcl9jb25zb2xlOjpmcmVlX2NvbnNv bGUgKCk7CS8qIGFzc3VtZXMgdGhhdCB3ZSBhcmUgdGhlIGxhc3QgcHR5IGNsb3NlciAqLwogICBm aGFuZGxlcl9wdHlfY29tbW9uOjpjbG9zZSAoKTsKICAgaWYgKCFGb3JjZUNsb3NlSGFuZGxlIChv dXRwdXRfbXV0ZXgpKQpAQCAtMTA3MCw0MjMgKzczMywzMSBAQCBmaGFuZGxlcl9wdHlfc2xhdmU6 OmluaXQgKEhBTkRMRSBoLCBEV09SRCBhLCBtb2RlX3QpCiAgIHJldHVybiByZXQ7CiB9CiAKLWJv b2wKLWZoYW5kbGVyX3B0eV9zbGF2ZTo6dHJ5X3JlYXR0YWNoX3Bjb24gKHZvaWQpCi17Ci0gIHBp ZF9yZXN0b3JlID0gMDsKLQotICAvKiBEbyBub3QgZGV0YWNoIGZyb20gdGhlIGNvbnNvbGUgYmVj YXVzZSByZS1hdHRhY2hpbmcgd2lsbAotICAgICBmYWlsIGlmIGhlbHBlciBwcm9jZXNzIGlzIHJ1 bm5pbmcgYXMgc2VydmljZSBhY2NvdW50LiAqLwotICBpZiAoZ2V0X3R0eXAoKS0+YXR0YWNoX3Bj b25faW5fZm9yaykKLSAgICByZXR1cm4gZmFsc2U7Ci0gIGlmIChwY29uX2F0dGFjaGVkX3RvID49 IDAgJiYKLSAgICAgIGN5Z3dpbl9zaGFyZWQtPnR0eVtwY29uX2F0dGFjaGVkX3RvXS0+YXR0YWNo X3Bjb25faW5fZm9yaykKLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAgcGlkX3Jlc3RvcmUgPQotICAg IGZoYW5kbGVyX2NvbnNvbGU6OmdldF9jb25zb2xlX3Byb2Nlc3NfaWQgKEdldEN1cnJlbnRQcm9j ZXNzSWQgKCksCi0JCQkJCSAgICAgIGZhbHNlKTsKLSAgLyogSWYgcGlkX3Jlc3RvcmUgaXMgbm90 IHNldCwgZ2l2ZSB1cC4gKi8KLSAgaWYgKCFwaWRfcmVzdG9yZSkKLSAgICByZXR1cm4gZmFsc2U7 Ci0KLSAgRnJlZUNvbnNvbGUgKCk7Ci0gIGlmICghQXR0YWNoQ29uc29sZSAoZ2V0X2hlbHBlcl9w cm9jZXNzX2lkICgpKSkKLSAgICB7Ci0gICAgICBzeXN0ZW1fcHJpbnRmICgicHR5JWQ6IEF0dGFj aENvbnNvbGUoaGVscGVyPSVkKSBmYWlsZWQuIDB4JTA4bHgiLAotCQkgICAgIGdldF9taW5vciAo KSwgZ2V0X2hlbHBlcl9wcm9jZXNzX2lkICgpLCBHZXRMYXN0RXJyb3IgKCkpOwotICAgICAgcmV0 dXJuIGZhbHNlOwotICAgIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQKLWZoYW5kbGVyX3B0 eV9zbGF2ZTo6cmVzdG9yZV9yZWF0dGFjaF9wY29uICh2b2lkKQotewotICBpZiAocGlkX3Jlc3Rv cmUpCi0gICAgewotICAgICAgRnJlZUNvbnNvbGUgKCk7Ci0gICAgICBpZiAoIUF0dGFjaENvbnNv bGUgKHBpZF9yZXN0b3JlKSkKLQl7Ci0JICBzeXN0ZW1fcHJpbnRmICgicHR5JWQ6IEF0dGFjaENv bnNvbGUocmVzdG9yZT0lZCkgZmFpbGVkLiAweCUwOGx4IiwKLQkJCSBnZXRfbWlub3IgKCksIHBp ZF9yZXN0b3JlLCBHZXRMYXN0RXJyb3IgKCkpOwotCSAgcGNvbl9hdHRhY2hlZF90byA9IC0xOwot CX0KLSAgICB9Ci0gIHBpZF9yZXN0b3JlID0gMDsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiByZXF1 ZXN0cyB0cmFuc2ZlcmluZyB0aGUgaW5wdXQgZGF0YSBmcm9tIHRoZSBpbnB1dAotICAgcGlwZSBm b3IgY3lnd2luIGFwcHMgdG8gdGhlIG90aGVyIGlucHV0IHBpcGUgZm9yIG5hdGl2ZSBhcHBzLiAq Lwotdm9pZAotZmhhbmRsZXJfcHR5X3NsYXZlOjpwdWxsX3Bjb25faW5wdXQgKHZvaWQpCi17Ci0g IGdldF90dHlwICgpLT5yZXFfdHJhbnNmZXJfaW5wdXRfdG9fcGNvbiA9IHRydWU7Ci0gIHdoaWxl IChnZXRfdHR5cCAoKS0+cmVxX3RyYW5zZmVyX2lucHV0X3RvX3Bjb24pCi0gICAgU2xlZXAgKDEp OwotfQotCiB2b2lkCi1maGFuZGxlcl9wdHlfc2xhdmU6OnVwZGF0ZV9wY29uX2lucHV0X3N0YXRl IChib29sIG5lZWRfbG9jaykKK2ZoYW5kbGVyX3B0eV9zbGF2ZTo6c2V0X3N3aXRjaF90b19wY29u ICh2b2lkKQogewotICBpZiAobmVlZF9sb2NrKQotICAgIFdhaXRGb3JTaW5nbGVPYmplY3QgKGlu cHV0X211dGV4LCBJTkZJTklURSk7Ci0gIC8qIEZsdXNoIGlucHV0IGJ1ZmZlciBpZiBpdCBpcyBy ZXF1ZXN0ZWQgYnkgbWFzdGVyLgotICAgICBUaGlzIGhhcHBlbnMgaWYgXkMgaXMgcHJlc3NlZCBp biBwc2V1ZG8gY29uc29sZSBzaWRlLiAqLwotICBpZiAoZ2V0X3R0eXAgKCktPnJlcV9mbHVzaF9w Y29uX2lucHV0KQorICBpZiAoIWdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9pbikKICAgICB7 Ci0gICAgICBGbHVzaENvbnNvbGVJbnB1dEJ1ZmZlciAoZ2V0X2hhbmRsZSAoKSk7Ci0gICAgICBn ZXRfdHR5cCAoKS0+cmVxX2ZsdXNoX3Bjb25faW5wdXQgPSBmYWxzZTsKLSAgICB9Ci0gIC8qIFBl ZWsgY29uc29sZSBpbnB1dCBidWZmZXIgYW5kIHVwZGF0ZSBzdGF0ZS4gKi8KLSAgSU5QVVRfUkVD T1JEIGlucFtJTlJFQ19TSVpFXTsKLSAgRFdPUkQgbjsKLSAgQk9PTCAoV0lOQVBJICpQZWVrRnVu YykKLSAgICAoSEFORExFLCBQSU5QVVRfUkVDT1JELCBEV09SRCwgTFBEV09SRCk7Ci0gIFBlZWtG dW5jID0KLSAgICBQZWVrQ29uc29sZUlucHV0QV9PcmlnID8gOiBQZWVrQ29uc29sZUlucHV0Owot ICBQZWVrRnVuYyAoZ2V0X2hhbmRsZSAoKSwgaW5wLCBJTlJFQ19TSVpFLCAmbik7Ci0gIGJvb2wg c2F3X2FjY2VwdCA9IGZhbHNlOwotICBib29sIHBpcGVfZW1wdHkgPSB0cnVlOwotICB3aGlsZSAo bi0tID4gMCkKLSAgICBpZiAoaW5wW25dLkV2ZW50VHlwZSA9PSBLRVlfRVZFTlQgJiYgaW5wW25d LkV2ZW50LktleUV2ZW50LmJLZXlEb3duICYmCi0JaW5wW25dLkV2ZW50LktleUV2ZW50LnVDaGFy LkFzY2lpQ2hhcikKLSAgICAgIHsKLQlwaXBlX2VtcHR5ID0gZmFsc2U7Ci0JY2hhciBjID0gaW5w W25dLkV2ZW50LktleUV2ZW50LnVDaGFyLkFzY2lpQ2hhcjsKLQljb25zdCBjaGFyIHNpZ3NbXSA9 IHsKLQkgIChjaGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWSU5UUl0sCi0JICAoY2hhcikgZ2V0 X3R0eXAgKCktPnRpLmNfY2NbVlFVSVRdLAotCSAgKGNoYXIpIGdldF90dHlwICgpLT50aS5jX2Nj W1ZTVVNQXSwKLQl9OwotCWNvbnN0IGNoYXIgZW9sc1tdID0gewotCSAgKGNoYXIpIGdldF90dHlw ICgpLT50aS5jX2NjW1ZFT0ZdLAotCSAgKGNoYXIpIGdldF90dHlwICgpLT50aS5jX2NjW1ZFT0xd LAotCSAgKGNoYXIpIGdldF90dHlwICgpLT50aS5jX2NjW1ZFT0wyXSwKLQkgICdcbicsCi0JICAn XHInCi0JfTsKLQlpZiAoaXNfbGluZV9pbnB1dCAoKSAmJiBjICYmIG1lbWNociAoZW9scywgYywg c2l6ZW9mIChlb2xzKSkpCi0JICBzYXdfYWNjZXB0ID0gdHJ1ZTsKLQlpZiAoKGdldF90dHlwICgp LT50aS5jX2xmbGFnICYgSVNJRykKLQkgICAgJiYgYyAmJiBtZW1jaHIgKHNpZ3MsIGMsIHNpemVv ZiAoc2lncykpKQotCSAgc2F3X2FjY2VwdCA9IHRydWU7Ci0gICAgICB9Ci0gIGdldF90dHlwICgp LT5wY29uX2luX2VtcHR5ID0gcGlwZV9lbXB0eSAmJiAhKHJhbGVuICgpID4gcmFpeGdldCAoKSk7 Ci0gIGlmICghZ2V0X3JlYWRhaGVhZF92YWxpZCAoKSAmJgotICAgICAgKHBpcGVfZW1wdHkgfHwg KGlzX2xpbmVfaW5wdXQgKCkgJiYgIXNhd19hY2NlcHQpKSAmJgotICAgICAgZ2V0X3R0eXAgKCkt PnJlYWRfcmV0dmFsID09IDEgJiYgYnl0ZXNfYXZhaWxhYmxlIChuKSAmJiBuID09IDApCi0gICAg UmVzZXRFdmVudCAoaW5wdXRfYXZhaWxhYmxlX2V2ZW50KTsKLSAgaWYgKG5lZWRfbG9jaykKLSAg ICBSZWxlYXNlTXV0ZXggKGlucHV0X211dGV4KTsKLX0KLQotaW50Ci1maGFuZGxlcl9wdHlfc2xh dmU6OmVhdF9yZWFkYWhlYWQgKGludCBuKQotewotICBpbnQgb3JhbGVuID0gcmFsZW4gKCk7Ci0g IGlmIChuIDwgMCkKLSAgICBuID0gcmFsZW4gKCkgLSByYWl4Z2V0ICgpOwotICBpZiAobiA+IDAg JiYgcmFsZW4gKCkgPiByYWl4Z2V0ICgpKQotICAgIHsKLSAgICAgIGNvbnN0IGNoYXIgZW9sc1td ID0gewotCShjaGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWRU9GXSwKLQkoY2hhcikgZ2V0X3R0 eXAgKCktPnRpLmNfY2NbVkVPTF0sCi0JKGNoYXIpIGdldF90dHlwICgpLT50aS5jX2NjW1ZFT0wy XSwKLQknXG4nCi0gICAgICB9OwotICAgICAgd2hpbGUgKG4gPiAwICYmIHJhbGVuICgpID4gcmFp eGdldCAoKSkKLQl7Ci0JICBpZiAoaXNfbGluZV9pbnB1dCAoKSAmJiByYWJ1ZiAoKVtyYWxlbiAo KS0xXQotCSAgICAgICYmIG1lbWNociAoZW9scywgcmFidWYgKClbcmFsZW4gKCktMV0sIHNpemVv ZiAoZW9scykpKQotCSAgICBicmVhazsKLQkgIC0tIG47Ci0JICAtLSByYWxlbiAoKTsKLQl9Ci0K LSAgICAgIC8qIElmIElVVEY4IGlzIHNldCwgdGhlIHRlcm1pbmFsIGlzIGluIFVURi04IG1vZGUu ICBJZiBzbywgd2UgZXJhc2UKLQkgYSBjb21wbGV0ZSBVVEYtOCBtdWx0aWJ5dGUgc2VxdWVuY2Ug b24gVkVSQVNFL1ZXRVJBU0UuICBPdGhlcndpc2UsCi0JIGlmIHdlIG9ubHkgZXJhc2UgYSBzaW5n bGUgYnl0ZSwgaW52YWxpZCB1bmljb2RlIGNoYXJzIGFyZSBsZWZ0IGluCi0JIHRoZSBpbnB1dC4g Ki8KLSAgICAgIGlmIChnZXRfdHR5cCAoKS0+dGkuY19pZmxhZyAmIElVVEY4KQotCXdoaWxlIChy YWxlbiAoKSA+IHJhaXhnZXQgKCkgJiYKLQkgICAgICAgKCh1bnNpZ25lZCBjaGFyKSByYWJ1ZiAo KVtyYWxlbiAoKV0gJiAweGMwKSA9PSAweDgwKQotCSAgLS1yYWxlbiAoKTsKLSAgICB9Ci0gIG9y YWxlbiA9IG9yYWxlbiAtIHJhbGVuICgpOwotICBpZiAocmFpeGdldCAoKSA+PSByYWxlbiAoKSkK LSAgICByYWl4Z2V0ICgpID0gcmFpeHB1dCAoKSA9IHJhbGVuICgpID0gMDsKLSAgZWxzZSBpZiAo cmFpeHB1dCAoKSA+IHJhbGVuICgpKQotICAgIHJhaXhwdXQgKCkgPSByYWxlbiAoKTsKLQotICBy ZXR1cm4gb3JhbGVuOwotfQotCi1pbnQKLWZoYW5kbGVyX3B0eV9zbGF2ZTo6Z2V0X3JlYWRhaGVh ZF9pbnRvX2J1ZmZlciAoY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQotewotICBpbnQgY2g7Ci0g IGludCBjb3BpZWRfY2hhcnMgPSAwOwotCi0gIHdoaWxlIChidWZsZW4pCi0gICAgaWYgKChjaCA9 IGdldF9yZWFkYWhlYWQgKCkpIDwgMCkKLSAgICAgIGJyZWFrOwotICAgIGVsc2UKLSAgICAgIHsK LQljb25zdCBjaGFyIGVvbHNbXSA9IHsKLQkgIChjaGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tW RU9GXSwKLQkgIChjaGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWRU9MXSwKLQkgIChjaGFyKSBn ZXRfdHR5cCAoKS0+dGkuY19jY1tWRU9MMl0sCi0JICAnXG4nCi0JfTsKLQlidWZbY29waWVkX2No YXJzKytdID0gKHVuc2lnbmVkIGNoYXIpKGNoICYgMHhmZik7Ci0JYnVmbGVuLS07Ci0JaWYgKGlz X2xpbmVfaW5wdXQgKCkgJiYgY2ggJiYgbWVtY2hyIChlb2xzLCBjaCAmIDB4ZmYsIHNpemVvZiAo ZW9scykpKQotCSAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgcmV0dXJuIGNvcGllZF9jaGFyczsKLX0K LQotYm9vbAotZmhhbmRsZXJfcHR5X3NsYXZlOjpnZXRfcmVhZGFoZWFkX3ZhbGlkICh2b2lkKQot ewotICBpZiAoaXNfbGluZV9pbnB1dCAoKSkKLSAgICB7Ci0gICAgICBjb25zdCBjaGFyIGVvbHNb XSA9IHsKLQkoY2hhcikgZ2V0X3R0eXAgKCktPnRpLmNfY2NbVkVPRl0sCi0JKGNoYXIpIGdldF90 dHlwICgpLT50aS5jX2NjW1ZFT0xdLAotCShjaGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWRU9M Ml0sCi0JJ1xuJwotICAgICAgfTsKLSAgICAgIGZvciAoc2l6ZV90IGk9cmFpeGdldCAoKTsgaTxy YWxlbiAoKTsgaSsrKQotCWlmIChyYWJ1ZiAoKVtpXSAmJiBtZW1jaHIgKGVvbHMsIHJhYnVmICgp W2ldLCBzaXplb2YgKGVvbHMpKSkKLQkgIHJldHVybiB0cnVlOwotICAgICAgcmV0dXJuIGZhbHNl OwotICAgIH0KLSAgZWxzZQotICAgIHJldHVybiByYWxlbiAoKSA+IHJhaXhnZXQgKCk7Ci19Ci0K LXZvaWQKLWZoYW5kbGVyX3B0eV9zbGF2ZTo6c2V0X3N3aXRjaF90b19wY29uIChpbnQgZmRfc2V0 KQotewotICBpZiAoZmQgPCAwKQotICAgIGZkID0gZmRfc2V0OwotICBhY3F1aXJlX291dHB1dF9t dXRleCAoSU5GSU5JVEUpOwotICBpZiAoZmQgPT0gMCAmJiAhZ2V0X3R0eXAgKCktPnN3aXRjaF90 b19wY29uX2luKQotICAgIHsKLSAgICAgIHB1bGxfcGNvbl9pbnB1dCAoKTsKLSAgICAgIGlmIChn ZXRfdHR5cCAoKS0+cGNvbl9waWQgPT0gMCB8fAotCSAgIXBpbmZvIChnZXRfdHR5cCAoKS0+cGNv bl9waWQpKQorICAgICAgaXNIeWJyaWQgPSB0cnVlOworICAgICAgaWYgKGdldF90dHlwICgpLT5w Y29uX3BpZCA9PSAwIHx8ICFwaW5mbyAoZ2V0X3R0eXAgKCktPnBjb25fcGlkKSkKIAlnZXRfdHR5 cCAoKS0+cGNvbl9waWQgPSBteXNlbGYtPnBpZDsKICAgICAgIGdldF90dHlwICgpLT5zd2l0Y2hf dG9fcGNvbl9pbiA9IHRydWU7Ci0gICAgICBpZiAoaXNIeWJyaWQgJiYgIWdldF90dHlwICgpLT5z d2l0Y2hfdG9fcGNvbl9vdXQpCi0JewotCSAgZ2V0X3R0eXAgKCktPndhaXRfcGNvbl9md2QgKCk7 Ci0JICBnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25fb3V0ID0gdHJ1ZTsKLQl9Ci0gICAgfQot ICBlbHNlIGlmICgoZmQgPT0gMSB8fCBmZCA9PSAyKSAmJiAhZ2V0X3R0eXAgKCktPnN3aXRjaF90 b19wY29uX291dCkKLSAgICB7Ci0gICAgICBnZXRfdHR5cCAoKS0+d2FpdF9wY29uX2Z3ZCAoKTsK LSAgICAgIGlmIChnZXRfdHR5cCAoKS0+cGNvbl9waWQgPT0gMCB8fAotCSAgIXBpbmZvIChnZXRf dHR5cCAoKS0+cGNvbl9waWQpKQotCWdldF90dHlwICgpLT5wY29uX3BpZCA9IG15c2VsZi0+cGlk OwotICAgICAgZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX291dCA9IHRydWU7Ci0gICAgICBp ZiAoaXNIeWJyaWQpCi0JZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX2luID0gdHJ1ZTsKICAg ICB9Ci0gIHJlbGVhc2Vfb3V0cHV0X211dGV4ICgpOwogfQogCiB2b2lkCiBmaGFuZGxlcl9wdHlf c2xhdmU6OnJlc2V0X3N3aXRjaF90b19wY29uICh2b2lkKQogewotICBpZiAoZ2V0X3R0eXAgKCkt PnBjb25fcGlkICYmCi0gICAgICBnZXRfdHR5cCAoKS0+cGNvbl9waWQgIT0gbXlzZWxmLT5waWQg JiYKLSAgICAgICEhcGluZm8gKGdldF90dHlwICgpLT5wY29uX3BpZCkpCisgIGlmIChnZXRfdHR5 cCAoKS0+cGNvbl9waWQgJiYgZ2V0X3R0eXAgKCktPnBjb25fcGlkICE9IG15c2VsZi0+cGlkCisg ICAgICAmJiAhIXBpbmZvIChnZXRfdHR5cCAoKS0+cGNvbl9waWQpKQogICAgIC8qIFRoZXJlIGlz IGEgcHJvY2VzcyB3aGljaCBpcyBncmFiYmluZyBwc2V1ZG8gY29uc29sZS4gKi8KICAgICByZXR1 cm47CiAgIGlmIChpc0h5YnJpZCkKICAgICByZXR1cm47Ci0gIGlmIChkb19ub3RfcmVzZXRfc3dp dGNoX3RvX3Bjb24pCi0gICAgcmV0dXJuOwotICBhY3F1aXJlX291dHB1dF9tdXRleCAoSU5GSU5J VEUpOwotICBpZiAoZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX291dCkKLSAgICAvKiBXYWl0 IGZvciBwdHlfbWFzdGVyX2Z3ZF90aHJlYWQoKSAqLwotICAgIGdldF90dHlwICgpLT53YWl0X3Bj b25fZndkICgpOwogICBnZXRfdHR5cCAoKS0+cGNvbl9waWQgPSAwOwogICBnZXRfdHR5cCAoKS0+ c3dpdGNoX3RvX3Bjb25faW4gPSBmYWxzZTsKLSAgZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29u X291dCA9IGZhbHNlOwotICByZWxlYXNlX291dHB1dF9tdXRleCAoKTsKLSAgaW5pdF9jb25zb2xl X2hhbmRsZXIgKHRydWUpOwotfQotCi12b2lkCi1maGFuZGxlcl9wdHlfc2xhdmU6OnB1c2hfdG9f cGNvbl9zY3JlZW5idWZmZXIgKGNvbnN0IGNoYXIgKnB0ciwgc2l6ZV90IGxlbiwKLQkJCQkJICAg ICAgIGJvb2wgaXNfZWNobykKLXsKLSAgYm9vbCBhdHRhY2hlZCA9Ci0gICAgISFmaGFuZGxlcl9j b25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkIChnZXRfaGVscGVyX3Byb2Nlc3NfaWQgKCks IHRydWUpOwotICBpZiAoIWF0dGFjaGVkICYmIHBjb25fYXR0YWNoZWRfdG8gPT0gZ2V0X21pbm9y ICgpKQotICAgIHsKLSAgICAgIGZvciAoRFdPUkQgdDAgPSBHZXRUaWNrQ291bnQgKCk7IEdldFRp Y2tDb3VudCAoKSAtIHQwIDwgMTAwOyApCi0JewotCSAgU2xlZXAgKDEpOwotCSAgYXR0YWNoZWQg PSBmaGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkCi0JCQkJICAgICAgKGdl dF9oZWxwZXJfcHJvY2Vzc19pZCAoKSwgdHJ1ZSk7Ci0JICBpZiAoYXR0YWNoZWQpCi0JICAgIGJy ZWFrOwotCX0KLSAgICAgIGlmICghYXR0YWNoZWQpCi0JewotCSAgc3lzdGVtX3ByaW50ZiAoInB0 eSVkOiBwY29uX2F0dGFjaF90byBtaXNtYXRjaD8/Pz8/PyIsIGdldF9taW5vciAoKSk7Ci0JICBy ZXR1cm47Ci0JfQotICAgIH0KLQotICAvKiBJZiBub3QgYXR0YWNoZWQgdG8gdGhpcyBwc2V1ZG8g Y29uc29sZSwgdHJ5IHRvIGF0dGFjaCB0ZW1wb3JhcmlseS4gKi8KLSAgcGlkX3Jlc3RvcmUgPSAw OwotICBpZiAocGNvbl9hdHRhY2hlZF90byAhPSBnZXRfbWlub3IgKCkpCi0gICAgaWYgKCF0cnlf cmVhdHRhY2hfcGNvbiAoKSkKLSAgICAgIGdvdG8gZGV0YWNoOwotCi0gIGNoYXIgKmJ1ZjsKLSAg c2l6ZV90IG5sZW47Ci0gIERXT1JEIG9yaWdDUDsKLSAgb3JpZ0NQID0gR2V0Q29uc29sZU91dHB1 dENQICgpOwotICBTZXRDb25zb2xlT3V0cHV0Q1AgKGdldF90dHlwICgpLT50ZXJtX2NvZGVfcGFn ZSk7Ci0gIC8qIEp1c3QgY29weSAqLwotICBidWYgPSAoY2hhciAqKSBIZWFwQWxsb2MgKEdldFBy b2Nlc3NIZWFwICgpLCAwLCBsZW4pOwotICBtZW1jcHkgKGJ1ZiwgKGNoYXIgKilwdHIsIGxlbik7 Ci0gIG5sZW4gPSBsZW47Ci0gIGNoYXIgKnAwLCAqcDE7Ci0gIHAwID0gcDEgPSBidWY7Ci0gIC8q IFJlbW92ZSBhbHRlcm5hdGUgc2NyZWVuIGJ1ZmZlciBkcmF3aW5nICovCi0gIHdoaWxlIChwMCAm JiBwMSkKLSAgICB7Ci0gICAgICBpZiAoIWdldF90dHlwICgpLT5zY3JlZW5fYWx0ZXJuYXRlZCkK LQl7Ci0JICAvKiBDaGVjayBzd2l0Y2hpbmcgdG8gYWx0ZXJuYXRlIHNjcmVlbiBidWZmZXIgKi8K LQkgIHAwID0gKGNoYXIgKikgbWVtbWVtIChwMSwgbmxlbiAtIChwMS1idWYpLCAiXDAzM1s/MTA0 OWgiLCA4KTsKLQkgIGlmIChwMCkKLQkgICAgewotCSAgICAgIC8vcDAgKz0gODsKLQkgICAgICBn ZXRfdHR5cCAoKS0+c2NyZWVuX2FsdGVybmF0ZWQgPSB0cnVlOwotCSAgICAgIGlmIChnZXRfdHR5 cCAoKS0+c3dpdGNoX3RvX3Bjb25fb3V0KQotCQlkb19ub3RfcmVzZXRfc3dpdGNoX3RvX3Bjb24g PSB0cnVlOwotCSAgICB9Ci0JfQotICAgICAgaWYgKGdldF90dHlwICgpLT5zY3JlZW5fYWx0ZXJu YXRlZCkKLQl7Ci0JICAvKiBDaGVjayBzd2l0Y2hpbmcgdG8gbWFpbiBzY3JlZW4gYnVmZmVyICov Ci0JICBwMSA9IChjaGFyICopIG1lbW1lbSAocDAsIG5sZW4gLSAocDAtYnVmKSwgIlwwMzNbPzEw NDlsIiwgOCk7Ci0JICBpZiAocDEpCi0JICAgIHsKLQkgICAgICBwMSArPSA4OwotCSAgICAgIGdl dF90dHlwICgpLT5zY3JlZW5fYWx0ZXJuYXRlZCA9IGZhbHNlOwotCSAgICAgIGRvX25vdF9yZXNl dF9zd2l0Y2hfdG9fcGNvbiA9IGZhbHNlOwotCSAgICAgIG1lbW1vdmUgKHAwLCBwMSwgYnVmK25s ZW4gLSBwMSk7Ci0JICAgICAgbmxlbiAtPSBwMSAtIHAwOwotCSAgICB9Ci0JICBlbHNlCi0JICAg IG5sZW4gPSBwMCAtIGJ1ZjsKLQl9Ci0gICAgfQotICBpZiAoIW5sZW4pIC8qIE5vdGhpbmcgdG8g YmUgc3luY2hyb25pemVkICovCi0gICAgZ290byBjbGVhbnVwOwotICBpZiAoZ2V0X3R0eXAgKCkt PnN3aXRjaF90b19wY29uX291dCAmJiAhaXNfZWNobykKLSAgICBnb3RvIGNsZWFudXA7Ci0gIC8q IFJlbW92ZSBFU0Mgc2VxdWVuY2Ugd2hpY2ggcmV0dXJucyByZXN1bHRzIHRvIGNvbnNvbGUKLSAg ICAgaW5wdXQgYnVmZmVyLiBXaXRob3V0IHRoaXMsIGN1cnNvciBwb3NpdGlvbiByZXBvcnQKLSAg ICAgaXMgcHV0IGludG8gdGhlIGlucHV0IGJ1ZmZlciBhcyBhIGdhcmJhZ2UuICovCi0gIC8qIFJl bW92ZSBFU0Mgc2VxdWVuY2UgdG8gcmVwb3J0IGN1cnNvciBwb3NpdGlvbi4gKi8KLSAgd2hpbGUg KChwMCA9IChjaGFyICopIG1lbW1lbSAoYnVmLCBubGVuLCAiXDAzM1s2biIsIDQpKSkKLSAgICB7 Ci0gICAgICBtZW1tb3ZlIChwMCwgcDArNCwgbmxlbiAtIChwMCs0IC0gYnVmKSk7Ci0gICAgICBu bGVuIC09IDQ7Ci0gICAgfQotICAvKiBSZW1vdmUgRVNDIHNlcXVlbmNlIHRvIHJlcG9ydCB0ZXJt aW5hbCBpZGVudGl0eS4gKi8KLSAgd2hpbGUgKChwMCA9IChjaGFyICopIG1lbW1lbSAoYnVmLCBu bGVuLCAiXDAzM1swYyIsIDQpKSkKLSAgICB7Ci0gICAgICBtZW1tb3ZlIChwMCwgcDArNCwgbmxl biAtIChwMCs0IC0gYnVmKSk7Ci0gICAgICBubGVuIC09IDQ7Ci0gICAgfQotCi0gIC8qIElmIHRo ZSBFU0Mgc2VxdWVuY2UgRVNDWz8zaCBvciBFU0NbPzNsIHdoaWNoIGNsZWFycyBjb25zb2xlIHNj cmVlbgotICAgICBidWZmZXIgaXMgcHVzaGVkLCBzZXQgbmVlZF9yZWRyYXdfc2NyZWVuIHRvIHRy aWdnZXIgcmVkcmF3IHNjcmVlbi4gKi8KLSAgcDAgPSBidWY7Ci0gIHdoaWxlICgocDAgPSAoY2hh ciAqKSBtZW1tZW0gKHAwLCBubGVuIC0gKHAwIC0gYnVmKSwgIlwwMzNbPyIsIDMpKSkKLSAgICB7 Ci0gICAgICBwMCArPSAzOwotICAgICAgYm9vbCBleGlzdF9hcmdfMyA9IGZhbHNlOwotICAgICAg d2hpbGUgKHAwIDwgYnVmICsgbmxlbiAmJiAoaXNkaWdpdCAoKnAwKSB8fCAqcDAgPT0gJzsnKSkK LQl7Ci0JICBpbnQgYXJnID0gMDsKLQkgIHdoaWxlIChwMCA8IGJ1ZiArIG5sZW4gJiYgaXNkaWdp dCAoKnAwKSkKLQkgICAgYXJnID0gYXJnICogMTAgKyAoKnAwICsrKSAtICcwJzsKLQkgIGlmIChh cmcgPT0gMykKLQkgICAgZXhpc3RfYXJnXzMgPSB0cnVlOwotCSAgaWYgKHAwIDwgYnVmICsgbmxl biAmJiAqcDAgPT0gJzsnKQotCSAgICBwMCArKzsKLQl9Ci0gICAgICBpZiAocDAgPCBidWYgKyBu bGVuICYmIGV4aXN0X2FyZ18zICYmICgqcDAgPT0gJ2gnIHx8ICpwMCA9PSAnbCcpKQotCWdldF90 dHlwICgpLT5uZWVkX3JlZHJhd19zY3JlZW4gPSB0cnVlOwotICAgICAgcDAgKys7Ci0gICAgICBp ZiAocDAgPj0gYnVmICsgbmxlbikKLQlicmVhazsKLSAgICB9Ci0KLSAgaW50IHJldHJ5X2NvdW50 OwotICByZXRyeV9jb3VudCA9IDA7Ci0gIERXT1JEIGR3TW9kZSwgZmxhZ3M7Ci0gIGZsYWdzID0g RU5BQkxFX1ZJUlRVQUxfVEVSTUlOQUxfUFJPQ0VTU0lORzsKLSAgd2hpbGUgKCFHZXRDb25zb2xl TW9kZSAoZ2V0X291dHB1dF9oYW5kbGUgKCksICZkd01vZGUpKQotICAgIHsKLSAgICAgIHRlcm1p b3NfcHJpbnRmICgiR2V0Q29uc29sZU1vZGUgZmFpbGVkLCAlRSIpOwotICAgICAgaW50IGVycm5v X3NhdmUgPSBlcnJubzsKLSAgICAgIC8qIFJlLW9wZW4gaGFuZGxlcyAqLwotICAgICAgdGhpcy0+ b3BlbiAoMCwgMCk7Ci0gICAgICAvKiBGaXggcHNldWRvIGNvbnNvbGUgd2luZG93IHNpemUgKi8K LSAgICAgIHRoaXMtPmlvY3RsIChUSU9DU1dJTlNaLCAmZ2V0X3R0eXAgKCktPndpbnNpemUpOwot ICAgICAgaWYgKGVycm5vICE9IGVycm5vX3NhdmUpCi0Jc2V0X2Vycm5vIChlcnJub19zYXZlKTsK LSAgICAgIGlmICgrK3JldHJ5X2NvdW50ID4gMykKLQlnb3RvIGNsZWFudXA7Ci0gICAgfQotICBp ZiAoIShnZXRfdHR5cCAoKS0+dGkuY19vZmxhZyAmIE9QT1NUKSB8fAotICAgICAgIShnZXRfdHR5 cCAoKS0+dGkuY19vZmxhZyAmIE9OTENSKSkKLSAgICBmbGFncyB8PSBESVNBQkxFX05FV0xJTkVf QVVUT19SRVRVUk47Ci0gIFNldENvbnNvbGVNb2RlIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgZHdN b2RlIHwgZmxhZ3MpOwotICBjaGFyICpwOwotICBwID0gYnVmOwotICBEV09SRCB3TGVuLCB3cml0 dGVuOwotICB3cml0dGVuID0gMDsKLSAgQk9PTCAoV0lOQVBJICpXcml0ZUZ1bmMpCi0gICAgKEhB TkRMRSwgTFBDVk9JRCwgRFdPUkQsIExQRFdPUkQsIExQT1ZFUkxBUFBFRCk7Ci0gIFdyaXRlRnVu YyA9IFdyaXRlRmlsZV9PcmlnID8gV3JpdGVGaWxlX09yaWcgOiBXcml0ZUZpbGU7Ci0gIHdoaWxl ICh3cml0dGVuIDwgIG5sZW4pCi0gICAgewotICAgICAgaWYgKCFXcml0ZUZ1bmMgKGdldF9vdXRw dXRfaGFuZGxlICgpLCBwLCBubGVuIC0gd3JpdHRlbiwgJndMZW4sIE5VTEwpKQotCXsKLQkgIHRl cm1pb3NfcHJpbnRmICgiV3JpdGVGaWxlIGZhaWxlZCwgJUUiKTsKLQkgIGJyZWFrOwotCX0KLSAg ICAgIGVsc2UKLQl7Ci0JICB3cml0dGVuICs9IHdMZW47Ci0JICBwICs9IHdMZW47Ci0JfQotICAg IH0KLSAgLyogRGV0YWNoIGZyb20gcHNldWRvIGNvbnNvbGUgYW5kIHJlc3VtZS4gKi8KLSAgZmxh Z3MgPSBFTkFCTEVfVklSVFVBTF9URVJNSU5BTF9QUk9DRVNTSU5HOwotICBTZXRDb25zb2xlTW9k ZSAoZ2V0X291dHB1dF9oYW5kbGUgKCksIGR3TW9kZSB8IGZsYWdzKTsKLWNsZWFudXA6Ci0gIFNl dENvbnNvbGVPdXRwdXRDUCAob3JpZ0NQKTsKLSAgSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwICgp LCAwLCBidWYpOwotZGV0YWNoOgotICByZXN0b3JlX3JlYXR0YWNoX3Bjb24gKCk7CisgIGdldF90 dHlwICgpLT5oX3BzZXVkb19jb25zb2xlID0gTlVMTDsKKyAgZ2V0X3R0eXAgKCktPnBjb25fc3Rh cnQgPSBmYWxzZTsKIH0KIAogc3NpemVfdCBfX3N0ZGNhbGwKQEAgLTE1MDUsNDQgKzc3Niw3IEBA IGZoYW5kbGVyX3B0eV9zbGF2ZTo6d3JpdGUgKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IGxlbikK ICAgcmVzZXRfc3dpdGNoX3RvX3Bjb24gKCk7CiAKICAgYWNxdWlyZV9vdXRwdXRfbXV0ZXggKElO RklOSVRFKTsKLSAgYm9vbCBvdXRwdXRfdG9fcGNvbiA9IGdldF90dHlwICgpLT5zd2l0Y2hfdG9f cGNvbl9vdXQ7Ci0gIHJlbGVhc2Vfb3V0cHV0X211dGV4ICgpOwotCi0gIFVJTlQgdGFyZ2V0X2Nv ZGVfcGFnZSA9IG91dHB1dF90b19wY29uID8KLSAgICBHZXRDb25zb2xlT3V0cHV0Q1AgKCkgOiBn ZXRfdHR5cCAoKS0+dGVybV9jb2RlX3BhZ2U7Ci0gIHNzaXplX3QgbmxlbjsKLSAgY2hhciAqYnVm ID0gY29udmVydF9tYl9zdHIgKHRhcmdldF9jb2RlX3BhZ2UsIChzaXplX3QgKikgJm5sZW4sCi0J CSBnZXRfdHR5cCAoKS0+dGVybV9jb2RlX3BhZ2UsIChjb25zdCBjaGFyICopIHB0ciwgbGVuKTsK LQotICAvKiBJZiBub3QgYXR0YWNoZWQgdG8gdGhpcyBwc2V1ZG8gY29uc29sZSwgdHJ5IHRvIGF0 dGFjaCB0ZW1wb3JhcmlseS4gKi8KLSAgcGlkX3Jlc3RvcmUgPSAwOwotICBib29sIGZhbGxiYWNr ID0gZmFsc2U7Ci0gIGlmIChvdXRwdXRfdG9fcGNvbiAmJiBwY29uX2F0dGFjaGVkX3RvICE9IGdl dF9taW5vciAoKSkKLSAgICBpZiAoIXRyeV9yZWF0dGFjaF9wY29uICgpKQotICAgICAgZmFsbGJh Y2sgPSB0cnVlOwotCi0gIGlmIChvdXRwdXRfdG9fcGNvbiAmJiAhZmFsbGJhY2sgJiYKLSAgICAg IChtZW1tZW0gKGJ1ZiwgbmxlbiwgIlwwMzNbNm4iLCA0KSB8fCBtZW1tZW0gKGJ1Ziwgbmxlbiwg IlwwMzNbMGMiLCA0KSkpCi0gICAgewotICAgICAgZ2V0X3R0eXAgKCktPnBjb25faW5fZW1wdHkg PSBmYWxzZTsKLSAgICAgIGlmICghaXNfbGluZV9pbnB1dCAoKSkKLQlTZXRFdmVudCAoaW5wdXRf YXZhaWxhYmxlX2V2ZW50KTsKLSAgICB9Ci0KLSAgRFdPUkQgZHdNb2RlLCBmbGFnczsKLSAgZmxh Z3MgPSBFTkFCTEVfVklSVFVBTF9URVJNSU5BTF9QUk9DRVNTSU5HOwotICBpZiAoIShnZXRfdHR5 cCAoKS0+dGkuY19vZmxhZyAmIE9QT1NUKSB8fAotICAgICAgIShnZXRfdHR5cCAoKS0+dGkuY19v ZmxhZyAmIE9OTENSKSkKLSAgICBmbGFncyB8PSBESVNBQkxFX05FV0xJTkVfQVVUT19SRVRVUk47 Ci0gIGlmIChvdXRwdXRfdG9fcGNvbiAmJiAhZmFsbGJhY2spCi0gICAgewotICAgICAgR2V0Q29u c29sZU1vZGUgKGdldF9vdXRwdXRfaGFuZGxlICgpLCAmZHdNb2RlKTsKLSAgICAgIFNldENvbnNv bGVNb2RlIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgZHdNb2RlIHwgZmxhZ3MpOwotICAgIH0KLSAg SEFORExFIHRvID0gKG91dHB1dF90b19wY29uICYmICFmYWxsYmFjaykgPwotICAgIGdldF9vdXRw dXRfaGFuZGxlICgpIDogZ2V0X291dHB1dF9oYW5kbGVfY3lnICgpOwotICBhY3F1aXJlX291dHB1 dF9tdXRleCAoSU5GSU5JVEUpOwotICBpZiAoIXByb2Nlc3Nfb3Bvc3Rfb3V0cHV0ICh0bywgYnVm LCBubGVuLCBmYWxzZSkpCisgIGlmICghcHJvY2Vzc19vcG9zdF9vdXRwdXQgKGdldF9vdXRwdXRf aGFuZGxlX2N5ZyAoKSwgcHRyLCB0b3dyaXRlLCBmYWxzZSkpCiAgICAgewogICAgICAgRFdPUkQg ZXJyID0gR2V0TGFzdEVycm9yICgpOwogICAgICAgdGVybWlvc19wcmludGYgKCJXcml0ZUZpbGUg ZmFpbGVkLCAlRSIpOwpAQCAtMTU1NywyMCArNzkxLDYgQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjp3 cml0ZSAoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3QgbGVuKQogICAgICAgdG93cml0ZSA9IC0xOwog ICAgIH0KICAgcmVsZWFzZV9vdXRwdXRfbXV0ZXggKCk7Ci0gIG1iX3N0cl9mcmVlIChidWYpOwot ICBmbGFncyA9IEVOQUJMRV9WSVJUVUFMX1RFUk1JTkFMX1BST0NFU1NJTkc7Ci0gIGlmIChvdXRw dXRfdG9fcGNvbiAmJiAhZmFsbGJhY2spCi0gICAgU2V0Q29uc29sZU1vZGUgKGdldF9vdXRwdXRf aGFuZGxlICgpLCBkd01vZGUgfCBmbGFncyk7Ci0KLSAgcmVzdG9yZV9yZWF0dGFjaF9wY29uICgp OwotCi0gIC8qIFB1c2ggc2xhdmUgb3V0cHV0IHRvIHBzZXVkbyBjb25zb2xlIHNjcmVlbiBidWZm ZXIgKi8KLSAgaWYgKGdldF9wc2V1ZG9fY29uc29sZSAoKSkKLSAgICB7Ci0gICAgICBhY3F1aXJl X291dHB1dF9tdXRleCAoSU5GSU5JVEUpOwotICAgICAgcHVzaF90b19wY29uX3NjcmVlbmJ1ZmZl ciAoKGNoYXIgKilwdHIsIGxlbiwgZmFsc2UpOwotICAgICAgcmVsZWFzZV9vdXRwdXRfbXV0ZXgg KCk7Ci0gICAgfQogCiAgIHJldHVybiB0b3dyaXRlOwogfQpAQCAtMTU4MiwxNiArODAyLDE1IEBA IGZoYW5kbGVyX3B0eV9zbGF2ZTo6bWFza19zd2l0Y2hfdG9fcGNvbl9pbiAoYm9vbCBtYXNrKQog fQogCiBib29sCi1maGFuZGxlcl9wdHlfY29tbW9uOjp0b19iZV9yZWFkX2Zyb21fcGNvbiAodm9p ZCkKK2ZoYW5kbGVyX3B0eV9tYXN0ZXI6OnRvX2JlX3JlYWRfZnJvbV9wY29uICh2b2lkKQogewot ICByZXR1cm4gIWdldF90dHlwICgpLT5wY29uX2luX2VtcHR5IHx8Ci0gICAgKGdldF90dHlwICgp LT5zd2l0Y2hfdG9fcGNvbl9pbiAmJiAhZ2V0X3R0eXAgKCktPm1hc2tfc3dpdGNoX3RvX3Bjb25f aW4pOworICByZXR1cm4gZ2V0X3R0eXAgKCktPnBjb25fc3RhcnQKKyAgICB8fCAoZ2V0X3R0eXAg KCktPnN3aXRjaF90b19wY29uX2luICYmICFnZXRfdHR5cCAoKS0+bWFza19zd2l0Y2hfdG9fcGNv bl9pbik7CiB9CiAKIHZvaWQgX19yZWczCiBmaGFuZGxlcl9wdHlfc2xhdmU6OnJlYWQgKHZvaWQg KnB0ciwgc2l6ZV90JiBsZW4pCiB7Ci0gIGNoYXIgKnB0cjAgPSAoY2hhciAqKXB0cjsKICAgc3Np emVfdCB0b3RhbHJlYWQgPSAwOwogICBpbnQgdm1pbiA9IDA7CiAgIGludCB2dGltZSA9IDA7CS8q IEluaXRpYWxpemVkIHRvIHByZXZlbnQgLVd1bmluaXRpYWxpemVkIHdhcm5pbmcgKi8KQEAgLTE2 MTYsOCArODM1LDYgQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpyZWFkICh2b2lkICpwdHIsIHNpemVf dCYgbGVuKQogICAgICAgbWFza19zd2l0Y2hfdG9fcGNvbl9pbiAodHJ1ZSk7CiAgICAgICByZXNl dF9zd2l0Y2hfdG9fcGNvbiAoKTsKICAgICB9Ci0gIGlmICh0b19iZV9yZWFkX2Zyb21fcGNvbiAo KSkKLSAgICB1cGRhdGVfcGNvbl9pbnB1dF9zdGF0ZSAodHJ1ZSk7CiAKICAgaWYgKGlzX25vbmJs b2NraW5nICgpIHx8ICFwdHIpIC8qIEluZGljYXRpbmcgdGNmbHVzaCgpLiAqLwogICAgIHRpbWVf dG9fd2FpdCA9IDA7CkBAIC0xNzAyLDk5ICs5MTksMjIgQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpy ZWFkICh2b2lkICpwdHIsIHNpemVfdCYgbGVuKQogCSAgICB7CiAJICAgICAgaWYgKCF0b3RhbHJl YWQpCiAJCXsKLQkJICBzZXRfc2lnX2Vycm5vIChFQUdBSU4pOwotCQkgIHRvdGFscmVhZCA9IC0x OwotCQl9Ci0JICAgICAgZ290byBvdXQ7Ci0JICAgIH0KLQkgIGNvbnRpbnVlOwotCWRlZmF1bHQ6 Ci0JICB0ZXJtaW9zX3ByaW50ZiAoIndhaXQgZm9yIGlucHV0IG11dGV4IGZhaWxlZCwgJUUiKTsK LQkgIGlmICghdG90YWxyZWFkKQotCSAgICB7Ci0JICAgICAgX19zZXRlcnJubyAoKTsKLQkgICAg ICB0b3RhbHJlYWQgPSAtMTsKLQkgICAgfQotCSAgZ290byBvdXQ7Ci0JfQotICAgICAgaWYgKHB0 ciAmJiB0b19iZV9yZWFkX2Zyb21fcGNvbiAoKSkKLQl7Ci0JICBpZiAoZ2V0X3JlYWRhaGVhZF92 YWxpZCAoKSkKLQkgICAgewotCSAgICAgIFJlbGVhc2VNdXRleCAoaW5wdXRfbXV0ZXgpOwotCSAg ICAgIHRvdGFscmVhZCA9IGdldF9yZWFkYWhlYWRfaW50b19idWZmZXIgKChjaGFyICopIHB0ciwg bGVuKTsKLQkgICAgfQotCSAgZWxzZQotCSAgICB7Ci0JICAgICAgaWYgKCF0cnlfcmVhdHRhY2hf cGNvbiAoKSkKLQkJewotCQkgIHJlc3RvcmVfcmVhdHRhY2hfcGNvbiAoKTsKLQkJICBnb3RvIGRv X3JlYWRfY3lnOwotCQl9Ci0KLQkgICAgICBEV09SRCBkd01vZGU7Ci0JICAgICAgR2V0Q29uc29s ZU1vZGUgKGdldF9oYW5kbGUgKCksICZkd01vZGUpOwotCSAgICAgIERXT1JEIGZsYWdzID0gRU5B QkxFX1ZJUlRVQUxfVEVSTUlOQUxfSU5QVVQ7Ci0JICAgICAgaWYgKGR3TW9kZSAhPSBmbGFncykK LQkJU2V0Q29uc29sZU1vZGUgKGdldF9oYW5kbGUgKCksIGZsYWdzKTsKLQkgICAgICAvKiBSZWFk IGdldF9oYW5kbGUoKSBpbnN0YWQgb2YgZ2V0X2hhbmRsZV9jeWcoKSAqLwotCSAgICAgIEJPT0wg KFdJTkFQSSAqUmVhZEZ1bmMpCi0JCShIQU5ETEUsIExQVk9JRCwgRFdPUkQsIExQRFdPUkQsIExQ Vk9JRCk7Ci0JICAgICAgUmVhZEZ1bmMgPSBSZWFkQ29uc29sZUFfT3JpZyA/IFJlYWRDb25zb2xl QV9PcmlnIDogUmVhZENvbnNvbGVBOwotCSAgICAgIERXT1JEIHJsZW47Ci0JICAgICAgcmVhZGxl biA9IE1JTiAobGVuLCBzaXplb2YgKGJ1ZikpOwotCSAgICAgIGlmICghUmVhZEZ1bmMgKGdldF9o YW5kbGUgKCksIGJ1ZiwgcmVhZGxlbiwgJnJsZW4sIE5VTEwpKQotCQl7Ci0JCSAgdGVybWlvc19w cmludGYgKCJyZWFkIGZhaWxlZCwgJUUiKTsKLQkJICBTZXRDb25zb2xlTW9kZSAoZ2V0X2hhbmRs ZSAoKSwgZHdNb2RlKTsKLQkJICByZXN0b3JlX3JlYXR0YWNoX3Bjb24gKCk7Ci0JCSAgUmVsZWFz ZU11dGV4IChpbnB1dF9tdXRleCk7Ci0JCSAgc2V0X2Vycm5vIChFSU8pOwotCQkgIHRvdGFscmVh ZCA9IC0xOwotCQkgIGdvdG8gb3V0OwotCQl9Ci0JICAgICAgU2V0Q29uc29sZU1vZGUgKGdldF9o YW5kbGUgKCksIGR3TW9kZSk7Ci0JICAgICAgcmVzdG9yZV9yZWF0dGFjaF9wY29uICgpOwotCSAg ICAgIFJlbGVhc2VNdXRleCAoaW5wdXRfbXV0ZXgpOwotCi0JICAgICAgc3NpemVfdCBubGVuOwot CSAgICAgIGNoYXIgKm5idWYgPSBjb252ZXJ0X21iX3N0ciAoZ2V0X3R0eXAgKCktPnRlcm1fY29k ZV9wYWdlLAotCQkJICAgICAoc2l6ZV90ICopICZubGVuLCBHZXRDb25zb2xlQ1AgKCksIGJ1Ziwg cmxlbik7Ci0KLQkgICAgICBzc2l6ZV90IHJldDsKLQkgICAgICBsaW5lX2VkaXRfc3RhdHVzIHJl cyA9Ci0JCWxpbmVfZWRpdCAobmJ1ZiwgbmxlbiwgZ2V0X3R0eXAgKCktPnRpLCAmcmV0KTsKLQot CSAgICAgIG1iX3N0cl9mcmVlIChuYnVmKTsKLQotCSAgICAgIGlmIChyZXMgPT0gbGluZV9lZGl0 X2lucHV0X2RvbmUgfHwgcmVzID09IGxpbmVfZWRpdF9vaykKLQkJdG90YWxyZWFkID0gZ2V0X3Jl YWRhaGVhZF9pbnRvX2J1ZmZlciAoKGNoYXIgKikgcHRyLCBsZW4pOwotCSAgICAgIGVsc2UgaWYg KHJlcyA+IGxpbmVfZWRpdF9zaWduYWxsZWQpCi0JCXsKLQkJICBzZXRfc2lnX2Vycm5vIChFSU5U Uik7Ci0JCSAgdG90YWxyZWFkID0gLTE7Ci0JCX0KLQkgICAgICBlbHNlCi0JCXsKLQkJICB1cGRh dGVfcGNvbl9pbnB1dF9zdGF0ZSAodHJ1ZSk7Ci0JCSAgY29udGludWU7CisJCSAgc2V0X3NpZ19l cnJubyAoRUFHQUlOKTsKKwkJICB0b3RhbHJlYWQgPSAtMTsKIAkJfQorCSAgICAgIGdvdG8gb3V0 OworCSAgICB9CisJICBjb250aW51ZTsKKwlkZWZhdWx0OgorCSAgdGVybWlvc19wcmludGYgKCJ3 YWl0IGZvciBpbnB1dCBtdXRleCBmYWlsZWQsICVFIik7CisJICBpZiAoIXRvdGFscmVhZCkKKwkg ICAgeworCSAgICAgIF9fc2V0ZXJybm8gKCk7CisJICAgICAgdG90YWxyZWFkID0gLTE7CiAJICAg IH0KLQotCSAgdXBkYXRlX3Bjb25faW5wdXRfc3RhdGUgKHRydWUpOwotCSAgbWFza19zd2l0Y2hf dG9fcGNvbl9pbiAoZmFsc2UpOwogCSAgZ290byBvdXQ7CiAJfQotICAgICAgaWYgKCFwdHIgJiYg bGVuID09IFVJTlRfTUFYICYmICFnZXRfdHR5cCAoKS0+cGNvbl9pbl9lbXB0eSkKLQl7Ci0JICBG bHVzaENvbnNvbGVJbnB1dEJ1ZmZlciAoZ2V0X2hhbmRsZSAoKSk7Ci0JICBnZXRfdHR5cCAoKS0+ cGNvbl9pbl9lbXB0eSA9IHRydWU7Ci0JICBEV09SRCBuOwotCSAgaWYgKGJ5dGVzX2F2YWlsYWJs ZSAobikgJiYgbiA9PSAwKQotCSAgICBSZXNldEV2ZW50IChpbnB1dF9hdmFpbGFibGVfZXZlbnQp OwotCX0KIAotZG9fcmVhZF9jeWc6CiAgICAgICBpZiAoIWJ5dGVzX2F2YWlsYWJsZSAoYnl0ZXNf aW5fcGlwZSkpCiAJewogCSAgUmVsZWFzZU11dGV4IChpbnB1dF9tdXRleCk7CkBAIC0xOTExLDE2 ICsxMDUxLDYgQEAgZG9fcmVhZF9jeWc6CiBvdXQ6CiAgIHRlcm1pb3NfcHJpbnRmICgiJWQgPSBy ZWFkKCVwLCAlbHUpIiwgdG90YWxyZWFkLCBwdHIsIGxlbik7CiAgIGxlbiA9IChzaXplX3QpIHRv dGFscmVhZDsKLSAgLyogUHVzaCBzbGF2ZSByZWFkIGFzIGVjaG8gdG8gcHNldWRvIGNvbnNvbGUg c2NyZWVuIGJ1ZmZlci4gKi8KLSAgaWYgKGdldF9wc2V1ZG9fY29uc29sZSAoKSAmJiBwdHIwICYm IHRvdGFscmVhZCA+IDAgJiYKLSAgICAgIChnZXRfdHR5cCAoKS0+dGkuY19sZmxhZyAmIEVDSE8p KQotICAgIHsKLSAgICAgIGFjcXVpcmVfb3V0cHV0X211dGV4IChJTkZJTklURSk7Ci0gICAgICBw dXNoX3RvX3Bjb25fc2NyZWVuYnVmZmVyIChwdHIwLCBsZW4sIHRydWUpOwotICAgICAgaWYgKGdl dF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQpCi0JdHJpZ2dlcl9yZWRyYXdfc2NyZWVuICgp OwotICAgICAgcmVsZWFzZV9vdXRwdXRfbXV0ZXggKCk7Ci0gICAgfQogICBtYXNrX3N3aXRjaF90 b19wY29uX2luIChmYWxzZSk7CiB9CiAKQEAgLTIwNjEsMzggKzExOTEsMTEgQEAgZmhhbmRsZXJf cHR5X3NsYXZlOjppb2N0bCAodW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogICAgICAgZ2V0 X3R0eXAgKCktPndpbnNpemUgPSBnZXRfdHR5cCAoKS0+YXJnLndpbnNpemU7CiAgICAgICBicmVh azsKICAgICBjYXNlIFRJT0NTV0lOU1o6Ci0gICAgICBpZiAoZ2V0X3BzZXVkb19jb25zb2xlICgp KQotCXsKLQkgIC8qIElmIG5vdCBhdHRhY2hlZCB0byB0aGlzIHBzZXVkbyBjb25zb2xlLAotCSAg ICAgdHJ5IHRvIGF0dGFjaCB0ZW1wb3JhcmlseS4gKi8KLQkgIHBpZF9yZXN0b3JlID0gMDsKLQkg IGlmIChwY29uX2F0dGFjaGVkX3RvICE9IGdldF9taW5vciAoKSkKLQkgICAgaWYgKCF0cnlfcmVh dHRhY2hfcGNvbiAoKSkKLQkgICAgICBnb3RvIGNsZWFudXA7Ci0KLQkgIENPT1JEIHNpemU7Ci0J ICBzaXplLlggPSAoKHN0cnVjdCB3aW5zaXplICopIGFyZyktPndzX2NvbDsKLQkgIHNpemUuWSA9 ICgoc3RydWN0IHdpbnNpemUgKikgYXJnKS0+d3Nfcm93OwotCSAgQ09OU09MRV9TQ1JFRU5fQlVG RkVSX0lORk8gY3NiaTsKLQkgIGlmIChHZXRDb25zb2xlU2NyZWVuQnVmZmVySW5mbyAoZ2V0X291 dHB1dF9oYW5kbGUgKCksICZjc2JpKSkKLQkgICAgaWYgKHNpemUuWCA9PSBjc2JpLnNyV2luZG93 LlJpZ2h0IC0gY3NiaS5zcldpbmRvdy5MZWZ0ICsgMSAmJgotCQlzaXplLlkgPT0gY3NiaS5zcldp bmRvdy5Cb3R0b20gLSBjc2JpLnNyV2luZG93LlRvcCArIDEpCi0JICAgICAgZ290byBjbGVhbnVw OwotCSAgaWYgKCFTZXRDb25zb2xlU2NyZWVuQnVmZmVyU2l6ZSAoZ2V0X291dHB1dF9oYW5kbGUg KCksIHNpemUpKQotCSAgICBnb3RvIGNsZWFudXA7Ci0JICBTTUFMTF9SRUNUIHJlY3Q7Ci0JICBy ZWN0LkxlZnQgPSAwOwotCSAgcmVjdC5Ub3AgPSAwOwotCSAgcmVjdC5SaWdodCA9IHNpemUuWC0x OwotCSAgcmVjdC5Cb3R0b20gPSBzaXplLlktMTsKLQkgIFNldENvbnNvbGVXaW5kb3dJbmZvIChn ZXRfb3V0cHV0X2hhbmRsZSAoKSwgVFJVRSwgJnJlY3QpOwotY2xlYW51cDoKLQkgIHJlc3RvcmVf cmVhdHRhY2hfcGNvbiAoKTsKLQl9Ci0KICAgICAgIGlmIChnZXRfdHR5cCAoKS0+d2luc2l6ZS53 c19yb3cgIT0gKChzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmcpLT53c19yb3cKIAkgIHx8IGdldF90dHlw ICgpLT53aW5zaXplLndzX2NvbCAhPSAoKHN0cnVjdCB3aW5zaXplICopIGFyZyktPndzX2NvbCkK IAl7CisJICBpZiAoZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGUgJiYgZ2V0X3R0eXAgKCkt PnBjb25fcGlkKQorCSAgICByZXNpemVfcHNldWRvX2NvbnNvbGUgKChzdHJ1Y3Qgd2luc2l6ZSAq KSBhcmcpOwogCSAgZ2V0X3R0eXAgKCktPmFyZy53aW5zaXplID0gKihzdHJ1Y3Qgd2luc2l6ZSAq KSBhcmc7CiAJICBnZXRfdHR5cCAoKS0+d2luc2l6ZSA9ICooc3RydWN0IHdpbnNpemUgKikgYXJn OwogCSAgZ2V0X3R0eXAgKCktPmtpbGxfcGdycCAoU0lHV0lOQ0gpOwpAQCAtMjM3OCw2ICsxNDgx LDI3IEBAIGZoYW5kbGVyX3B0eV9jb21tb246OmNsb3NlICgpCiAgIHJldHVybiAwOwogfQogCit2 b2lkCitmaGFuZGxlcl9wdHlfY29tbW9uOjpyZXNpemVfcHNldWRvX2NvbnNvbGUgKHN0cnVjdCB3 aW5zaXplICp3cykKK3sKKyAgQ09PUkQgc2l6ZTsKKyAgc2l6ZS5YID0gd3MtPndzX2NvbDsKKyAg c2l6ZS5ZID0gd3MtPndzX3JvdzsKKyAgcGluZm8gcCAoZ2V0X3R0eXAgKCktPnBjb25fcGlkKTsK KyAgaWYgKHApCisgICAgeworICAgICAgSFBDT05fSU5URVJOQUwgaHBjb25fbG9jYWw7CisgICAg ICBIQU5ETEUgcGNvbl9vd25lciA9CisJT3BlblByb2Nlc3MgKFBST0NFU1NfRFVQX0hBTkRMRSwg RkFMU0UsIHAtPmV4ZWNfZHdQcm9jZXNzSWQpOworICAgICAgRHVwbGljYXRlSGFuZGxlIChwY29u X293bmVyLCBnZXRfdHR5cCAoKS0+aF9wY29uX3dyaXRlX3BpcGUsCisJCSAgICAgICBHZXRDdXJy ZW50UHJvY2VzcyAoKSwgJmhwY29uX2xvY2FsLmhXcml0ZVBpcGUsCisJCSAgICAgICAwLCBUUlVF LCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpOworICAgICAgUmVzaXplUHNldWRvQ29uc29sZSAoKEhQ Q09OKSAmaHBjb25fbG9jYWwsIHNpemUpOworICAgICAgQ2xvc2VIYW5kbGUgKHBjb25fb3duZXIp OworICAgICAgQ2xvc2VIYW5kbGUgKGhwY29uX2xvY2FsLmhXcml0ZVBpcGUpOworICAgIH0KK30K Kwogdm9pZAogZmhhbmRsZXJfcHR5X21hc3Rlcjo6Y2xlYW51cCAoKQogewpAQCAtMjM5Myw3ICsx NTE3LDYgQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6Y2xvc2UgKCkKIHsKICAgT0JKRUNUX0JBU0lD X0lORk9STUFUSU9OIG9iaTsKICAgTlRTVEFUVVMgc3RhdHVzOwotICBwaWRfdCBtYXN0ZXJfcGlk X3RtcCA9IGdldF90dHlwICgpLT5tYXN0ZXJfcGlkOwogCiAgIHRlcm1pb3NfcHJpbnRmICgiY2xv c2luZyBmcm9tX21hc3RlciglcCkvZnJvbV9tYXN0ZXJfY3lnKCVwKS90b19tYXN0ZXIoJXApL3Rv X21hc3Rlcl9jeWcoJXApIHNpbmNlIHdlIG93biB0aGVtKCV1KSIsCiAJCSAgZnJvbV9tYXN0ZXIs IGZyb21fbWFzdGVyX2N5ZywKQEAgLTI0MzgsMzAgKzE1NjEsNiBAQCBmaGFuZGxlcl9wdHlfbWFz dGVyOjpjbG9zZSAoKQogICBlbHNlIGlmIChvYmkuSGFuZGxlQ291bnQgPT0gMSkKICAgICB7CiAg ICAgICB0ZXJtaW9zX3ByaW50ZiAoIkNsb3NpbmcgbGFzdCBtYXN0ZXIgb2YgcHR5JWQiLCBnZXRf bWlub3IgKCkpOwotICAgICAgLyogQ2xvc2UgUHNldWRvIENvbnNvbGUgKi8KLSAgICAgIGlmIChn ZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0JewotCSAgLyogVGVybWluYXRlIGhlbHBlciBwcm9jZXNz ICovCi0JICBTZXRFdmVudCAoZ2V0X3R0eXAgKCktPmhfaGVscGVyX2dvb2RieWUpOwotCSAgV2Fp dEZvclNpbmdsZU9iamVjdCAoZ2V0X3R0eXAgKCktPmhfaGVscGVyX3Byb2Nlc3MsIElORklOSVRF KTsKLQkgIENsb3NlSGFuZGxlIChnZXRfdHR5cCAoKS0+aF9oZWxwZXJfZ29vZGJ5ZSk7Ci0JICBD bG9zZUhhbmRsZSAoZ2V0X3R0eXAgKCktPmhfaGVscGVyX3Byb2Nlc3MpOwotCSAgLyogRklYTUU6 IFBzZXVkbyBjb25zb2xlIGNhbiBiZSBhY2Nlc3NlZCB2aWEgaXRzIGhhbmRsZQotCSAgICAgb25s eSBpbiB0aGUgcHJvY2VzcyB3aGljaCBjcmVhdGVkIGl0LiBXaGF0IGVsc2UgY2FuIHdlIGRvPyAq LwotCSAgaWYgKG1hc3Rlcl9waWRfdG1wID09IG15c2VsZi0+cGlkKQotCSAgICB7Ci0JICAgICAg LyogQ2xvc2VQc2V1ZG9Db25zb2xlKCkgc2VlbXMgdG8gaGF2ZSBhIGJ1ZyB0aGF0IG9uZQotCQkg aW50ZXJuYWwgaGFuZGxlIHJlbWFpbnMgb3BlbmVkLiBUaGlzIGNhdXNlcyBoYW5kbGUgbGVhay4K LQkJIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciB0aGlzIHByb2JsZW0uICovCi0JICAgICAgSFBD T05fSU5URVJOQUwgKmhwID0gKEhQQ09OX0lOVEVSTkFMICopIGdldF9wc2V1ZG9fY29uc29sZSAo KTsKLQkgICAgICBIQU5ETEUgdG1wID0gaHAtPmhDb25Ib3N0UHJvY2VzczsKLQkgICAgICAvKiBS ZWxlYXNlIHBzZXVkbyBjb25zb2xlICovCi0JICAgICAgQ2xvc2VQc2V1ZG9Db25zb2xlIChnZXRf cHNldWRvX2NvbnNvbGUgKCkpOwotCSAgICAgIENsb3NlSGFuZGxlICh0bXApOwotCSAgICB9Ci0J ICBnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25faW4gPSBmYWxzZTsKLQkgIGdldF90dHlwICgp LT5zd2l0Y2hfdG9fcGNvbl9vdXQgPSBmYWxzZTsKLQl9CiAgICAgICBpZiAoZ2V0X3R0eXAgKCkt PmdldHNpZCAoKSA+IDApCiAJa2lsbCAoZ2V0X3R0eXAgKCktPmdldHNpZCAoKSwgU0lHSFVQKTsK ICAgICAgIFNldEV2ZW50IChpbnB1dF9hdmFpbGFibGVfZXZlbnQpOwpAQCAtMjQ2OSw5ICsxNTY4 LDggQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6Y2xvc2UgKCkKIAogICBpZiAoIUZvcmNlQ2xvc2VI YW5kbGUgKGZyb21fbWFzdGVyKSkKICAgICB0ZXJtaW9zX3ByaW50ZiAoImVycm9yIGNsb3Npbmcg ZnJvbV9tYXN0ZXIgJXAsICVFIiwgZnJvbV9tYXN0ZXIpOwotICBpZiAoZnJvbV9tYXN0ZXJfY3ln ICE9IGZyb21fbWFzdGVyKSAvKiBBdm9pZCBkb3VibGUgY2xvc2UuICovCi0gICAgaWYgKCFGb3Jj ZUNsb3NlSGFuZGxlIChmcm9tX21hc3Rlcl9jeWcpKQotICAgICAgdGVybWlvc19wcmludGYgKCJl cnJvciBjbG9zaW5nIGZyb21fbWFzdGVyX2N5ZyAlcCwgJUUiLCBmcm9tX21hc3Rlcl9jeWcpOwor ICBpZiAoIUZvcmNlQ2xvc2VIYW5kbGUgKGZyb21fbWFzdGVyX2N5ZykpCisgICAgdGVybWlvc19w cmludGYgKCJlcnJvciBjbG9zaW5nIGZyb21fbWFzdGVyX2N5ZyAlcCwgJUUiLCBmcm9tX21hc3Rl cl9jeWcpOwogICBpZiAoIUZvcmNlQ2xvc2VIYW5kbGUgKHRvX21hc3RlcikpCiAgICAgdGVybWlv c19wcmludGYgKCJlcnJvciBjbG9zaW5nIHRvX21hc3RlciAlcCwgJUUiLCB0b19tYXN0ZXIpOwog ICBmcm9tX21hc3RlciA9IHRvX21hc3RlciA9IE5VTEw7CkBAIC0yNTEzLDcgKzE2MTEsNyBAQCBm aGFuZGxlcl9wdHlfbWFzdGVyOjp3cml0ZSAoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3QgbGVuKQog CiAgIC8qIFdyaXRlIHRlcm1pbmFsIGlucHV0IHRvIHRvX3NsYXZlIHBpcGUgaW5zdGVhZCBvZiBv dXRwdXRfaGFuZGxlCiAgICAgIGlmIGN1cnJlbnQgYXBwbGljYXRpb24gaXMgbmF0aXZlIGNvbnNv bGUgYXBwbGljYXRpb24uICovCi0gIGlmICh0b19iZV9yZWFkX2Zyb21fcGNvbiAoKSkKKyAgaWYg KHRvX2JlX3JlYWRfZnJvbV9wY29uICgpICYmIGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xl KQogICAgIHsKICAgICAgIHNpemVfdCBubGVuOwogICAgICAgY2hhciAqYnVmID0gY29udmVydF9t Yl9zdHIKQEAgLTI1MjEsNDAgKzE2MTksNTAgQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6d3JpdGUg KGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IGxlbikKIAogICAgICAgV2FpdEZvclNpbmdsZU9iamVj dCAoaW5wdXRfbXV0ZXgsIElORklOSVRFKTsKIAotICAgICAgaWYgKG1lbWNociAoYnVmLCAnXDAw MycsIG5sZW4pKSAvKiBeQyBpbnRyIGtleSBpbiBwY29uICovCi0JZ2V0X3R0eXAgKCktPnJlcV9m bHVzaF9wY29uX2lucHV0ID0gdHJ1ZTsKLQogICAgICAgRFdPUkQgd0xlbjsKLSAgICAgIFdyaXRl RmlsZSAodG9fc2xhdmUsIGJ1ZiwgbmxlbiwgJndMZW4sIE5VTEwpOwotICAgICAgZ2V0X3R0eXAg KCktPnBjb25faW5fZW1wdHkgPSBmYWxzZTsKIAotICAgICAgUmVsZWFzZU11dGV4IChpbnB1dF9t dXRleCk7Ci0KLSAgICAgIC8qIFVzZSBsaW5lX2VkaXQgKCkgaW4gb3JkZXIgdG8gc2V0IGlucHV0 X2F2YWlsYWJsZV9ldmVudC4gKi8KLSAgICAgIGJvb2wgaXNfZWNobyA9IHRjICgpLT50aS5jX2xm bGFnICYgRUNITzsKLSAgICAgIGlmICghZ2V0X3R0eXAgKCktPm1hc2tfc3dpdGNoX3RvX3Bjb25f aW4pCisgICAgICBpZiAoZ2V0X3R0eXAgKCktPnBjb25fc3RhcnQpCiAJewotCSAgdGMgKCktPnRp LmNfbGZsYWcgJj0gfkVDSE87Ci0JICB0aS5jX2xmbGFnICY9IH5FQ0hPOwotCX0KLSAgICAgIHRp LmNfbGZsYWcgJj0gfklTSUc7Ci0gICAgICBsaW5lX2VkaXQgKGJ1ZiwgbmxlbiwgdGksICZyZXQp OwotICAgICAgaWYgKGlzX2VjaG8pCi0JdGMgKCktPnRpLmNfbGZsYWcgfD0gRUNITzsKLSAgICAg IGdldF90dHlwICgpLT5yZWFkX3JldHZhbCA9IDE7Ci0KLSAgICAgIGNvbnN0IGNoYXIgc2lnc1td ID0gewotCShjaGFyKSB0aS5jX2NjW1ZJTlRSXSwKLQkoY2hhcikgdGkuY19jY1tWUVVJVF0sCi0J KGNoYXIpIHRpLmNfY2NbVlNVU1BdLAotICAgICAgfTsKLSAgICAgIGlmICh0YyAoKS0+dGkuY19s ZmxhZyAmIElTSUcpCi0JZm9yIChzaXplX3QgaT0wOyBpPHNpemVvZiAoc2lncyk7IGkrKykKLQkg IGlmIChzaWdzW2ldICYmIG1lbWNociAoYnVmLCBzaWdzW2ldLCBubGVuKSkKKwkgIC8qIFBzZXVk byBjb25kb2xlIHN1cHBvcnQgdXNlcyAiQ1NJNm4iIHRvIGdldCBjdXJzb3IgcG9zaXRpb24uCisJ ICAgICBJZiB0aGUgcmVwbHkgZm9yICJDU0k2biIgaXMgZGl2aWRlZCBpbnRvIG11bHRpcGxlIHdy aXRlcywKKwkgICAgIHBzZXVkbyBjb25zb2xlIHNvbWV0aW1lcyBkb2VzIG5vdCByZWNvZ25pemUg aXQuICBUaGVyZWZvcmUsCisJICAgICBwdXQgdGhlbSB0b2dldGhlciBpbnRvIHdwYnVmIGFuZCB3 cml0ZSBhbGwgYXQgb25jZS4gKi8KKwkgIHN0YXRpYyBjb25zdCBpbnQgd3BidWZfbGVuID0gNjQ7 CisJICBzdGF0aWMgY2hhciB3cGJ1Zlt3cGJ1Zl9sZW5dOworCSAgc3RhdGljIGludCBpeHB1dCA9 IDA7CisKKwkgIGlmIChpeHB1dCA9PSAwICYmIGJ1ZlswXSAhPSAnXDAzMycpCisJICAgIHsgLyog ZmFpbC1zYWZlICovCisJICAgICAgV3JpdGVGaWxlICh0b19zbGF2ZSwgIlwwMzNbMTsxUiIsIDYs ICZ3TGVuLCBOVUxMKTsgLyogZHVtbXkgKi8KKwkgICAgICBnZXRfdHR5cCAoKS0+cGNvbl9zdGFy dCA9IGZhbHNlOworCSAgICB9CisJICBlbHNlCiAJICAgIHsKLQkgICAgICBlYXRfcmVhZGFoZWFk ICgtMSk7Ci0JICAgICAgU2V0RXZlbnQgKGlucHV0X2F2YWlsYWJsZV9ldmVudCk7CisJICAgICAg aWYgKGl4cHV0ICsgbmxlbiA8IHdwYnVmX2xlbikKKwkJZm9yIChzaXplX3QgaT0wOyBpPG5sZW47 IGkrKykKKwkJICB3cGJ1ZltpeHB1dCsrXSA9IGJ1ZltpXTsKKwkgICAgICBlbHNlCisJCXsKKwkJ ICBXcml0ZUZpbGUgKHRvX3NsYXZlLCB3cGJ1ZiwgaXhwdXQsICZ3TGVuLCBOVUxMKTsKKwkJICBp eHB1dCA9IDA7CisJCSAgZ2V0X3R0eXAgKCktPnBjb25fc3RhcnQgPSBmYWxzZTsKKwkJICBXcml0 ZUZpbGUgKHRvX3NsYXZlLCBidWYsIG5sZW4sICZ3TGVuLCBOVUxMKTsKKwkJfQorCSAgICAgIGlm IChpeHB1dCAmJiBtZW1jaHIgKHdwYnVmLCAnUicsIGl4cHV0KSkKKwkJeworCQkgIFdyaXRlRmls ZSAodG9fc2xhdmUsIHdwYnVmLCBpeHB1dCwgJndMZW4sIE5VTEwpOworCQkgIGl4cHV0ID0gMDsK KwkJICBnZXRfdHR5cCAoKS0+cGNvbl9zdGFydCA9IGZhbHNlOworCQl9CisJICAgICAgUmVsZWFz ZU11dGV4IChpbnB1dF9tdXRleCk7CisJICAgICAgbWJfc3RyX2ZyZWUgKGJ1Zik7CisJICAgICAg cmV0dXJuIGxlbjsKIAkgICAgfQorCX0KKworICAgICAgV3JpdGVGaWxlICh0b19zbGF2ZSwgYnVm LCBubGVuLCAmd0xlbiwgTlVMTCk7CisKKyAgICAgIFJlbGVhc2VNdXRleCAoaW5wdXRfbXV0ZXgp OwogCiAgICAgICBtYl9zdHJfZnJlZSAoYnVmKTsKICAgICAgIHJldHVybiBsZW47CkBAIC0yNjMw LDE1ICsxNzM4LDggQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6aW9jdGwgKHVuc2lnbmVkIGludCBj bWQsIHZvaWQgKmFyZykKICAgICAgIGlmIChnZXRfdHR5cCAoKS0+d2luc2l6ZS53c19yb3cgIT0g KChzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmcpLT53c19yb3cKIAkgIHx8IGdldF90dHlwICgpLT53aW5z aXplLndzX2NvbCAhPSAoKHN0cnVjdCB3aW5zaXplICopIGFyZyktPndzX2NvbCkKIAl7Ci0JICAv KiBGSVhNRTogUHNldWRvIGNvbnNvbGUgY2FuIGJlIGFjY2Vzc2VkIHZpYSBpdHMgaGFuZGxlCi0J ICAgICBvbmx5IGluIHRoZSBwcm9jZXNzIHdoaWNoIGNyZWF0ZWQgaXQuIFdoYXQgZWxzZSBjYW4g d2UgZG8/ICovCi0JICBpZiAoZ2V0X3BzZXVkb19jb25zb2xlICgpICYmIGdldF90dHlwICgpLT5t YXN0ZXJfcGlkID09IG15c2VsZi0+cGlkKQotCSAgICB7Ci0JICAgICAgQ09PUkQgc2l6ZTsKLQkg ICAgICBzaXplLlggPSAoKHN0cnVjdCB3aW5zaXplICopIGFyZyktPndzX2NvbDsKLQkgICAgICBz aXplLlkgPSAoKHN0cnVjdCB3aW5zaXplICopIGFyZyktPndzX3JvdzsKLQkgICAgICBSZXNpemVQ c2V1ZG9Db25zb2xlIChnZXRfcHNldWRvX2NvbnNvbGUgKCksIHNpemUpOwotCSAgICB9CisJICBp ZiAoZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGUgJiYgZ2V0X3R0eXAgKCktPnBjb25fcGlk KQorCSAgICByZXNpemVfcHNldWRvX2NvbnNvbGUgKChzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmcpOwog CSAgZ2V0X3R0eXAgKCktPndpbnNpemUgPSAqKHN0cnVjdCB3aW5zaXplICopIGFyZzsKIAkgIGdl dF90dHlwICgpLT5raWxsX3BncnAgKFNJR1dJTkNIKTsKIAl9CkBAIC0yNzYzLDcgKzE4NjQsNyBA QCBnZXRfbG9jYWxlX2Zyb21fZW52IChjaGFyICpsb2NhbGUpCiAgIHN0cmNweSAobG9jYWxlLCBl bnYpOwogfQogCi1zdGF0aWMgTENJRAorc3RhdGljIHZvaWQKIGdldF9sYW5naW5mbyAoY2hhciAq bG9jYWxlX291dCwgY2hhciAqY2hhcnNldF9vdXQpCiB7CiAgIC8qIEdldCBsb2NhbGUgZnJvbSBl bnZpcm9ubWVudCAqLwpAQCAtMjc3NiwxMSArMTg3Nyw2IEBAIGdldF9sYW5naW5mbyAoY2hhciAq bG9jYWxlX291dCwgY2hhciAqY2hhcnNldF9vdXQpCiAgIGlmICghbG9jYWxlKQogICAgIGxvY2Fs ZSA9ICJDIjsKIAotICBjaGFyIHRtcF9sb2NhbGVbRU5DT0RJTkdfTEVOICsgMV07Ci0gIGNoYXIg KnJldCA9IF9fc2V0X2xvY2FsZV9mcm9tX2xvY2FsZV9hbGlhcyAobG9jYWxlLCB0bXBfbG9jYWxl KTsKLSAgaWYgKHJldCkKLSAgICBsb2NhbGUgPSB0bXBfbG9jYWxlOwotCiAgIGNvbnN0IGNoYXIg KmNoYXJzZXQ7CiAgIHN0cnVjdCBsY19jdHlwZV9UICpsY19jdHlwZSA9IChzdHJ1Y3QgbGNfY3R5 cGVfVCAqKSBsb2MubGNfY2F0W0xDX0NUWVBFXS5wdHI7CiAgIGlmICghbGNfY3R5cGUpCkBAIC0y ODMwLDIzICsxOTI2LDkgQEAgZ2V0X2xhbmdpbmZvIChjaGFyICpsb2NhbGVfb3V0LCBjaGFyICpj aGFyc2V0X291dCkKICAgICAgIGNoYXJzZXQgPSAiQ1A5MzIiOwogICAgIH0KIAotICB3Y2hhcl90 IGxjW0VOQ09ESU5HX0xFTiArIDFdOwotICB3Y2hhcl90ICpwOwotICBtYnN0b3djcyAobGMsIGxv Y2FsZSwgRU5DT0RJTkdfTEVOKTsKLSAgcCA9IHdjc2NociAobGMsIEwnLicpOwotICBpZiAocCkK LSAgICAqcCA9IEwnXDAnOwotICBwID0gd2NzY2hyIChsYywgTCdfJyk7Ci0gIGlmIChwKQotICAg ICpwID0gTCctJzsKLSAgTENJRCBsY2lkID0gTG9jYWxlTmFtZVRvTENJRCAobGMsIDApOwotICBp ZiAoIWxjaWQgJiYgIXN0cmNtcCAoY2hhcnNldCwgIkFTQ0lJIikpCi0gICAgcmV0dXJuIDA7Ci0K ICAgLyogU2V0IHJlc3VsdHMgKi8KICAgc3RyY3B5IChsb2NhbGVfb3V0LCBuZXdfbG9jYWxlKTsK ICAgc3RyY3B5IChjaGFyc2V0X291dCwgY2hhcnNldCk7Ci0gIHJldHVybiBsY2lkOwogfQogCiB2 b2lkCkBAIC0yODU0LDIxICsxOTM2LDcgQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpzZXR1cF9sb2Nh bGUgKHZvaWQpCiB7CiAgIGNoYXIgbG9jYWxlW0VOQ09ESU5HX0xFTiArIDFdID0gIkMiOwogICBj aGFyIGNoYXJzZXRbRU5DT0RJTkdfTEVOICsgMV0gPSAiQVNDSUkiOwotICBMQ0lEIGxjaWQgPSBn ZXRfbGFuZ2luZm8gKGxvY2FsZSwgY2hhcnNldCk7Ci0KLSAgLyogU2V0IGNvbnNvbGUgY29kZSBw YWdlIGZvcm0gbG9jYWxlICovCi0gIGlmIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0gICAgewot ICAgICAgVUlOVCBjb2RlX3BhZ2U7Ci0gICAgICBpZiAobGNpZCA9PSAwIHx8IGxjaWQgPT0gKExD SUQpIC0xKQotCWNvZGVfcGFnZSA9IDIwMTI3OyAvKiBBU0NJSSAqLwotICAgICAgZWxzZSBpZiAo IUdldExvY2FsZUluZm8gKGxjaWQsCi0JCQkgICAgICAgTE9DQUxFX0lERUZBVUxUQ09ERVBBR0Ug fCBMT0NBTEVfUkVUVVJOX05VTUJFUiwKLQkJCSAgICAgICAoY2hhciAqKSAmY29kZV9wYWdlLCBz aXplb2YgKGNvZGVfcGFnZSkpKQotCWNvZGVfcGFnZSA9IDIwMTI3OyAvKiBBU0NJSSAqLwotICAg ICAgU2V0Q29uc29sZUNQIChjb2RlX3BhZ2UpOwotICAgICAgU2V0Q29uc29sZU91dHB1dENQIChj b2RlX3BhZ2UpOwotICAgIH0KKyAgZ2V0X2xhbmdpbmZvIChsb2NhbGUsIGNoYXJzZXQpOwogCiAg IC8qIFNldCB0ZXJtaW5hbCBjb2RlIHBhZ2UgZnJvbSBsb2NhbGUgKi8KICAgLyogVGhpcyBjb2Rl IGlzIGJvcnJvd2VkIGZyb20gbWludHR5OiBjaGFyc2V0LmMgKi8KQEAgLTI4NzgsOSArMTk0Niw5 IEBAIGZoYW5kbGVyX3B0eV9zbGF2ZTo6c2V0dXBfbG9jYWxlICh2b2lkKQogICAgIGNoYXJzZXRf dVtpXSA9IHRvdXBwZXIgKGNoYXJzZXRbaV0pOwogICB1bnNpZ25lZCBpbnQgaXNvOwogICBVSU5U IGNwID0gMjAxMjc7IC8qIERlZmF1bHQgZm9yIGZhbGxiYWNrICovCi0gIGlmIChzc2NhbmYgKGNo YXJzZXRfdSwgIklTTy04ODU5LSV1IiwgJmlzbykgPT0gMSB8fAotICAgICAgc3NjYW5mIChjaGFy c2V0X3UsICJJU084ODU5LSV1IiwgJmlzbykgPT0gMSB8fAotICAgICAgc3NjYW5mIChjaGFyc2V0 X3UsICJJU084ODU5JXUiLCAmaXNvKSA9PSAxKQorICBpZiAoc3NjYW5mIChjaGFyc2V0X3UsICJJ U08tODg1OS0ldSIsICZpc28pID09IDEKKyAgICAgIHx8IHNzY2FuZiAoY2hhcnNldF91LCAiSVNP ODg1OS0ldSIsICZpc28pID09IDEKKyAgICAgIHx8IHNzY2FuZiAoY2hhcnNldF91LCAiSVNPODg1 OSV1IiwgJmlzbykgPT0gMSkKICAgICB7CiAgICAgICBpZiAoaXNvICYmIGlzbyA8PSAxNiAmJiBp c28gIT0xMikKIAlnZXRfdHR5cCAoKS0+dGVybV9jb2RlX3BhZ2UgPSAyODU5MCArIGlzbzsKQEAg LTI4OTYsOTAgKzE5NjQsOSBAQCBmaGFuZGxlcl9wdHlfc2xhdmU6OnNldHVwX2xvY2FsZSAodm9p ZCkKIAl9CiB9CiAKLXZvaWQKLWZoYW5kbGVyX3B0eV9zbGF2ZTo6c2V0X2ZyZWVjb25zb2xlX29u X2Nsb3NlIChib29sIHZhbCkKLXsKLSAgZnJlZWNvbnNvbGVfb25fY2xvc2UgPSB2YWw7Ci19Ci0K LXZvaWQKLWZoYW5kbGVyX3B0eV9zbGF2ZTo6dHJpZ2dlcl9yZWRyYXdfc2NyZWVuICh2b2lkKQot ewotICAvKiBGb3JjaWJseSByZWRyYXcgc2NyZWVuIGJhc2VkIG9uIGNvbnNvbGUgc2NyZWVuIGJ1 ZmZlci4gKi8KLSAgLyogVGhlIGZvbGxvd2luZyBjb2RlIHRyaWdnZXJzIHJlZHJhd2luZyB0aGUg c2NyZWVuLiAqLwotICBDT05TT0xFX1NDUkVFTl9CVUZGRVJfSU5GTyBzYmk7Ci0gIEdldENvbnNv bGVTY3JlZW5CdWZmZXJJbmZvIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgJnNiaSk7Ci0gIFNNQUxM X1JFQ1QgcmVjdCA9IHswLCAwLAotICAgIChTSE9SVCkgKHNiaS5kd1NpemUuWCAtMSksIChTSE9S VCkgKHNiaS5kd1NpemUuWSAtIDEpfTsKLSAgQ09PUkQgZGVzdCA9IHswLCAwfTsKLSAgQ0hBUl9J TkZPIGZpbGwgPSB7JyAnLCAwfTsKLSAgU2Nyb2xsQ29uc29sZVNjcmVlbkJ1ZmZlciAoZ2V0X291 dHB1dF9oYW5kbGUgKCksICZyZWN0LCBOVUxMLCBkZXN0LCAmZmlsbCk7Ci0gIGdldF90dHlwICgp LT5uZWVkX3JlZHJhd19zY3JlZW4gPSBmYWxzZTsKLX0KLQotdm9pZAotZmhhbmRsZXJfcHR5X3Ns YXZlOjpmaXh1cF9hZnRlcl9hdHRhY2ggKGJvb2wgbmF0aXZlX21heWJlLCBpbnQgZmRfc2V0KQot ewotICBpZiAoZmQgPCAwKQotICAgIGZkID0gZmRfc2V0OwotICBpZiAoZ2V0X3BzZXVkb19jb25z b2xlICgpKQotICAgIHsKLSAgICAgIGlmIChmaGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9w cm9jZXNzX2lkIChnZXRfaGVscGVyX3Byb2Nlc3NfaWQgKCksCi0JCQkJCQkgICAgdHJ1ZSkpCi0J aWYgKHBjb25fYXR0YWNoZWRfdG8gIT0gZ2V0X21pbm9yICgpKQotCSAgewotCSAgICBwY29uX2F0 dGFjaGVkX3RvID0gZ2V0X21pbm9yICgpOwotCSAgICBpbml0X2NvbnNvbGVfaGFuZGxlciAodHJ1 ZSk7Ci0JICB9Ci0KLSNpZiAwIC8qIFRoaXMgaXMgZm9yIGRlYnVnIG9ubHkuICovCi0gICAgICBp c0h5YnJpZCA9IHRydWU7Ci0gICAgICBnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25faW4gPSB0 cnVlOwotICAgICAgZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX291dCA9IHRydWU7Ci0jZW5k aWYKLQotICAgICAgaWYgKHBjb25fYXR0YWNoZWRfdG8gPT0gZ2V0X21pbm9yICgpICYmIG5hdGl2 ZV9tYXliZSkKLQl7Ci0JICBpZiAoZmQgPT0gMCkKLQkgICAgewotCSAgICAgIHB1bGxfcGNvbl9p bnB1dCAoKTsKLQkgICAgICBEV09SRCBtb2RlID0KLQkJRU5BQkxFX1BST0NFU1NFRF9JTlBVVCB8 IEVOQUJMRV9MSU5FX0lOUFVUIHwgRU5BQkxFX0VDSE9fSU5QVVQ7Ci0JICAgICAgU2V0Q29uc29s ZU1vZGUgKGdldF9oYW5kbGUgKCksIG1vZGUpOwotCSAgICAgIGlmIChnZXRfdHR5cCAoKS0+cGNv bl9waWQgPT0gMCB8fAotCQkgICFwaW5mbyAoZ2V0X3R0eXAgKCktPnBjb25fcGlkKSkKLQkJZ2V0 X3R0eXAgKCktPnBjb25fcGlkID0gbXlzZWxmLT5waWQ7Ci0JICAgICAgZ2V0X3R0eXAgKCktPnN3 aXRjaF90b19wY29uX2luID0gdHJ1ZTsKLQkgICAgfQotCSAgZWxzZSBpZiAoZmQgPT0gMSB8fCBm ZCA9PSAyKQotCSAgICB7Ci0JICAgICAgRFdPUkQgbW9kZSA9IEVOQUJMRV9QUk9DRVNTRURfT1VU UFVUIHwgRU5BQkxFX1dSQVBfQVRfRU9MX09VVFBVVDsKLQkgICAgICBTZXRDb25zb2xlTW9kZSAo Z2V0X291dHB1dF9oYW5kbGUgKCksIG1vZGUpOwotCSAgICAgIGFjcXVpcmVfb3V0cHV0X211dGV4 IChJTkZJTklURSk7Ci0JICAgICAgaWYgKCFnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25fb3V0 KQotCQlnZXRfdHR5cCAoKS0+d2FpdF9wY29uX2Z3ZCAoKTsKLQkgICAgICBpZiAoZ2V0X3R0eXAg KCktPnBjb25fcGlkID09IDAgfHwKLQkJICAhcGluZm8gKGdldF90dHlwICgpLT5wY29uX3BpZCkp Ci0JCWdldF90dHlwICgpLT5wY29uX3BpZCA9IG15c2VsZi0+cGlkOwotCSAgICAgIGdldF90dHlw ICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQgPSB0cnVlOwotCSAgICAgIHJlbGVhc2Vfb3V0cHV0X211 dGV4ICgpOwotCi0JICAgICAgaWYgKGdldF90dHlwICgpLT5uZWVkX3JlZHJhd19zY3JlZW4pCi0J CXRyaWdnZXJfcmVkcmF3X3NjcmVlbiAoKTsKLQkgICAgfQotCSAgaW5pdF9jb25zb2xlX2hhbmRs ZXIgKGZhbHNlKTsKLQl9Ci0gICAgICBlbHNlIGlmIChmZCA9PSAwICYmIG5hdGl2ZV9tYXliZSkK LQkvKiBSZWFkIGZyb20gdW5hdHRhY2hlZCBwc2V1ZG8gY29uc29sZSBjYXVzZSBmcmVlemUsCi0J ICAgdGhlcmVmb3JlLCBmYWxsYmFjayB0byBsZWdhY3kgcHR5LiAqLwotCXNldF9oYW5kbGUgKGdl dF9oYW5kbGVfY3lnICgpKTsKLSAgICB9Ci19Ci0KIHZvaWQKIGZoYW5kbGVyX3B0eV9zbGF2ZTo6 Zml4dXBfYWZ0ZXJfZm9yayAoSEFORExFIHBhcmVudCkKIHsKLSAgZml4dXBfYWZ0ZXJfYXR0YWNo IChmYWxzZSwgLTEpOwogICAvLyBmb3JrX2ZpeHVwIChwYXJlbnQsIGludXNlLCAiaW51c2UiKTsK ICAgLy8gZmhhbmRsZXJfcHR5X2NvbW1vbjo6Zml4dXBfYWZ0ZXJfZm9yayAocGFyZW50KTsKICAg cmVwb3J0X3R0eV9jb3VudHMgKHRoaXMsICJpbmhlcml0ZWQiLCAiIik7CkBAIC0yOTkyLDcxICsx OTc5LDIyIEBAIGZoYW5kbGVyX3B0eV9zbGF2ZTo6Zml4dXBfYWZ0ZXJfZXhlYyAoKQogCiAgIGlm ICghY2xvc2Vfb25fZXhlYyAoKSkKICAgICBmaXh1cF9hZnRlcl9mb3JrIChOVUxMKTsJLyogTm8g cGFyZW50IGhhbmRsZSByZXF1aXJlZC4gKi8KLSAgZWxzZSBpZiAoZ2V0X3BzZXVkb19jb25zb2xl ICgpKQotICAgIHsKLSAgICAgIGludCB1c2VkID0gMDsKLSAgICAgIGludCBhdHRhY2hlZCA9IDA7 Ci0gICAgICBjeWdoZWFwX2ZkZW51bSBjZmQgKGZhbHNlKTsKLSAgICAgIHdoaWxlIChjZmQubmV4 dCAoKSA+PSAwKQotCXsKLQkgIGlmIChjZmQtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZU19NQUpP UiB8fAotCSAgICAgIGNmZC0+Z2V0X21ham9yICgpID09IERFVl9DT05TX01BSk9SKQotCSAgICB1 c2VkICsrOwotCSAgaWYgKGNmZC0+Z2V0X21ham9yICgpID09IERFVl9QVFlTX01BSk9SICYmCi0J ICAgICAgY2ZkLT5nZXRfbWlub3IgKCkgPT0gcGNvbl9hdHRhY2hlZF90bykKLQkgICAgYXR0YWNo ZWQgKys7Ci0JfQotCi0gICAgICAvKiBDYWxsIEZyZWVDb25zb2xlKCkgaWYgbm8gdHR5IGlzIG9w ZW5lZCBhbmQgdGhlIHByb2Nlc3MKLQkgaXMgYXR0YWNoZWQgdG8gY29uc29sZSBjb3JyZXNwb25k aW5nIHRvIHR0eS4gVGhpcyBpcwotCSBuZWVkZWQgdG8gbWFrZSBHTlUgc2NyZWVuIGFuZCB0bXV4 IHdvcmsgaW4gV2luZG93cyAxMAotCSAxOTAzLiAqLwotICAgICAgaWYgKGF0dGFjaGVkID09IDEg JiYgZ2V0X21pbm9yICgpID09IHBjb25fYXR0YWNoZWRfdG8pCi0JcGNvbl9hdHRhY2hlZF90byA9 IC0xOwotICAgICAgaWYgKHVzZWQgPT0gMSAvKiBBYm91dCB0byBjbG9zZSB0aGlzIHR0eSAqLykK LQl7Ci0JICBpbml0X2NvbnNvbGVfaGFuZGxlciAoZmFsc2UpOwotCSAgZnJlZV9hdHRhY2hlZF9j b25zb2xlICgpOwotCX0KLSAgICB9CiAKICAgLyogU2V0IGxvY2FsZSAqLwogICBpZiAoZ2V0X3R0 eXAgKCktPnRlcm1fY29kZV9wYWdlID09IDApCiAgICAgc2V0dXBfbG9jYWxlICgpOwogCiAgIC8q IEhvb2sgQ29uc29sZSBBUEkgKi8KLSAgaWYgKGdldF9wc2V1ZG9fY29uc29sZSAoKSkKLSAgICB7 CiAjZGVmaW5lIERPX0hPT0sobW9kdWxlLCBuYW1lKSBcCi0gICAgICBpZiAoIW5hbWUjI19Pcmln KSBcCi0JeyBcCi0JICB2b2lkICphcGkgPSBob29rX2FwaSAobW9kdWxlLCAjbmFtZSwgKHZvaWQg KikgbmFtZSMjX0hvb2tlZCk7IFwKLQkgIG5hbWUjI19PcmlnID0gKF9fdHlwZW9mX18gKG5hbWUp ICopIGFwaTsgXAotCSAgLyppZiAoYXBpKSBzeXN0ZW1fcHJpbnRmICgjbmFtZSAiIGhvb2tlZC4i KTsqLyBcCi0JfQotICAgICAgRE9fSE9PSyAoTlVMTCwgV3JpdGVGaWxlKTsKLSAgICAgIERPX0hP T0sgKE5VTEwsIFdyaXRlQ29uc29sZUEpOwotICAgICAgRE9fSE9PSyAoTlVMTCwgV3JpdGVDb25z b2xlVyk7Ci0gICAgICBET19IT09LIChOVUxMLCBSZWFkRmlsZSk7Ci0gICAgICBET19IT09LIChO VUxMLCBSZWFkQ29uc29sZUEpOwotICAgICAgRE9fSE9PSyAoTlVMTCwgUmVhZENvbnNvbGVXKTsK LSAgICAgIERPX0hPT0sgKE5VTEwsIFdyaXRlQ29uc29sZU91dHB1dEEpOwotICAgICAgRE9fSE9P SyAoTlVMTCwgV3JpdGVDb25zb2xlT3V0cHV0Vyk7Ci0gICAgICBET19IT09LIChOVUxMLCBXcml0 ZUNvbnNvbGVPdXRwdXRDaGFyYWN0ZXJBKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFdyaXRlQ29u c29sZU91dHB1dENoYXJhY3RlclcpOwotICAgICAgRE9fSE9PSyAoTlVMTCwgV3JpdGVDb25zb2xl T3V0cHV0QXR0cmlidXRlKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFNldENvbnNvbGVDdXJzb3JQ b3NpdGlvbik7Ci0gICAgICBET19IT09LIChOVUxMLCBTZXRDb25zb2xlVGV4dEF0dHJpYnV0ZSk7 Ci0gICAgICBET19IT09LIChOVUxMLCBXcml0ZUNvbnNvbGVJbnB1dEEpOwotICAgICAgRE9fSE9P SyAoTlVMTCwgV3JpdGVDb25zb2xlSW5wdXRXKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFJlYWRD b25zb2xlSW5wdXRBKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFJlYWRDb25zb2xlSW5wdXRXKTsK LSAgICAgIERPX0hPT0sgKE5VTEwsIFBlZWtDb25zb2xlSW5wdXRBKTsKLSAgICAgIERPX0hPT0sg KE5VTEwsIFBlZWtDb25zb2xlSW5wdXRXKTsKLSAgICAgIC8qIENyZWF0ZVByb2Nlc3MoKSBpcyBo b29rZWQgZm9yIEdEQiBldGMuICovCi0gICAgICBET19IT09LIChOVUxMLCBDcmVhdGVQcm9jZXNz QSk7Ci0gICAgICBET19IT09LIChOVUxMLCBDcmVhdGVQcm9jZXNzVyk7CisgIGlmICghbmFtZSMj X09yaWcpIFwKKyAgICB7IFwKKyAgICAgIHZvaWQgKmFwaSA9IGhvb2tfYXBpIChtb2R1bGUsICNu YW1lLCAodm9pZCAqKSBuYW1lIyNfSG9va2VkKTsgXAorICAgICAgbmFtZSMjX09yaWcgPSAoX190 eXBlb2ZfXyAobmFtZSkgKikgYXBpOyBcCisgICAgICAvKmlmIChhcGkpIHN5c3RlbV9wcmludGYg KCNuYW1lICIgaG9va2VkLiIpOyovIFwKICAgICB9CisgIC8qIENyZWF0ZVByb2Nlc3MoKSBpcyBo b29rZWQgZm9yIEdEQiBldGMuICovCisgIERPX0hPT0sgKE5VTEwsIENyZWF0ZVByb2Nlc3NBKTsK KyAgRE9fSE9PSyAoTlVMTCwgQ3JlYXRlUHJvY2Vzc1cpOwogfQogCiAvKiBUaGlzIHRocmVhZCBm dW5jdGlvbiBoYW5kbGVzIHRoZSBtYXN0ZXIgY29udHJvbCBwaXBlLiAgSXQgd2FpdHMgZm9yIGEK QEAgLTMyMDQsMjcgKzIxNDIsNiBAQCByZXBseToKICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQKLWZo YW5kbGVyX3B0eV9tYXN0ZXI6OnRyYW5zZmVyX2lucHV0X3RvX3Bjb24gKHZvaWQpCi17Ci0gIFdh aXRGb3JTaW5nbGVPYmplY3QgKGlucHV0X211dGV4LCBJTkZJTklURSk7Ci0gIERXT1JEIG47Ci0g IHNpemVfdCB0cmFuc2ZlcmVkID0gMDsKLSAgd2hpbGUgKDo6Ynl0ZXNfYXZhaWxhYmxlIChuLCBm cm9tX21hc3Rlcl9jeWcpICYmIG4pCi0gICAgewotICAgICAgY2hhciBidWZbMTAyNF07Ci0gICAg ICBSZWFkRmlsZSAoZnJvbV9tYXN0ZXJfY3lnLCBidWYsIHNpemVvZiAoYnVmKSwgJm4sIDApOwot ICAgICAgY2hhciAqcCA9IGJ1ZjsKLSAgICAgIHdoaWxlICgocCA9IChjaGFyICopIG1lbWNociAo cCwgJ1xuJywgbiAtIChwIC0gYnVmKSkpKQotCSpwID0gJ1xyJzsKLSAgICAgIGlmIChXcml0ZUZp bGUgKHRvX3NsYXZlLCBidWYsIG4sICZuLCAwKSkKLQl0cmFuc2ZlcmVkICs9IG47Ci0gICAgfQot ICBpZiAodHJhbnNmZXJlZCkKLSAgICBnZXRfdHR5cCAoKS0+cGNvbl9pbl9lbXB0eSA9IGZhbHNl OwotICBSZWxlYXNlTXV0ZXggKGlucHV0X211dGV4KTsKLX0KLQogc3RhdGljIERXT1JEIFdJTkFQ SQogcHR5X21hc3Rlcl90aHJlYWQgKFZPSUQgKmFyZykKIHsKQEAgLTMyNDAsMjMgKzIxNTcsNyBA QCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpwdHlfbWFzdGVyX2Z3ZF90aHJlYWQgKCkKICAgdGVybWlv c19wcmludGYgKCJTdGFydGVkLiIpOwogICBmb3IgKDs7KQogICAgIHsKLSAgICAgIGlmIChnZXRf cHNldWRvX2NvbnNvbGUgKCkpCi0JewotCSAgZ2V0X3R0eXAgKCktPnBjb25fbGFzdF90aW1lID0g R2V0VGlja0NvdW50ICgpOwotCSAgd2hpbGUgKDo6Ynl0ZXNfYXZhaWxhYmxlIChybGVuLCBmcm9t X3NsYXZlKSAmJiBybGVuID09IDApCi0JICAgIHsKLQkgICAgICAvKiBGb3JjaWJseSB0cmFuc2Zl ciBpbnB1dCBpZiBpdCBpcyByZXF1ZXN0ZWQgYnkgc2xhdmUuCi0JCSBUaGlzIGhhcHBlbnMgd2hl biBpbnB1dCBkYXRhIHNob3VsZCBiZSB0cmFuc2ZlcmVkCi0JCSBmcm9tIHRoZSBpbnB1dCBwaXBl IGZvciBjeWd3aW4gYXBwcyB0byB0aGUgaW5wdXQgcGlwZQotCQkgZm9yIG5hdGl2ZSBhcHBzLiAq LwotCSAgICAgIGlmIChnZXRfdHR5cCAoKS0+cmVxX3RyYW5zZmVyX2lucHV0X3RvX3Bjb24pCi0J CXsKLQkJICB0cmFuc2Zlcl9pbnB1dF90b19wY29uICgpOwotCQkgIGdldF90dHlwICgpLT5yZXFf dHJhbnNmZXJfaW5wdXRfdG9fcGNvbiA9IGZhbHNlOwotCQl9Ci0JICAgICAgU2xlZXAgKDEpOwot CSAgICB9Ci0JfQorICAgICAgZ2V0X3R0eXAgKCktPnBjb25fbGFzdF90aW1lID0gR2V0VGlja0Nv dW50ICgpOwogICAgICAgaWYgKCFSZWFkRmlsZSAoZnJvbV9zbGF2ZSwgb3V0YnVmLCBzaXplb2Yg b3V0YnVmLCAmcmxlbiwgTlVMTCkpCiAJewogCSAgdGVybWlvc19wcmludGYgKCJSZWFkRmlsZSBm b3IgZm9yd2FyZGluZyBmYWlsZWQsICVFIik7CkBAIC0zMjY0LDE0ICsyMTY1LDkgQEAgZmhhbmRs ZXJfcHR5X21hc3Rlcjo6cHR5X21hc3Rlcl9md2RfdGhyZWFkICgpCiAJfQogICAgICAgc3NpemVf dCB3bGVuID0gcmxlbjsKICAgICAgIGNoYXIgKnB0ciA9IG91dGJ1ZjsKLSAgICAgIGlmIChnZXRf cHNldWRvX2NvbnNvbGUgKCkpCisgICAgICBpZiAoZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNv bGUpCiAJewotCSAgLyogQXZvaWQgZHVwbGljYXRpbmcgc2xhdmUgb3V0cHV0IHdoaWNoIGlzIGFs cmVhZHkgc2VudCB0bwotCSAgICAgdG9fbWFzdGVyX2N5ZyAqLwotCSAgaWYgKCFnZXRfdHR5cCAo KS0+c3dpdGNoX3RvX3Bjb25fb3V0KQotCSAgICBjb250aW51ZTsKLQotCSAgLyogQXZvaWQgc2V0 dGluZyB3aW5kb3cgdGl0bGUgdG8gImN5Z3dpbi1jb25zb2xlLWhlbHBlci5leGUiICovCisJICAv KiBSZW1vdmUgQ1NJID4gUG0gbSAqLwogCSAgaW50IHN0YXRlID0gMDsKIAkgIGludCBzdGFydF9h dCA9IDA7CiAJICBmb3IgKERXT1JEIGk9MDsgaTxybGVuOyBpKyspCkBAIC0zMjgxLDQzICsyMTc3 LDggQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6cHR5X21hc3Rlcl9md2RfdGhyZWFkICgpCiAJCXN0 YXRlID0gMTsKIAkJY29udGludWU7CiAJICAgICAgfQotCSAgICBlbHNlIGlmICgoc3RhdGUgPT0g MSAmJiBvdXRidWZbaV0gPT0gJ10nKSB8fAotCQkgICAgIChzdGF0ZSA9PSAyICYmIG91dGJ1Zltp XSA9PSAnMCcpIHx8Ci0JCSAgICAgKHN0YXRlID09IDMgJiYgb3V0YnVmW2ldID09ICc7JykpCi0J ICAgICAgewotCQlzdGF0ZSArKzsKLQkJY29udGludWU7Ci0JICAgICAgfQotCSAgICBlbHNlIGlm IChzdGF0ZSA9PSA0ICYmIG91dGJ1ZltpXSA9PSAnXGEnKQotCSAgICAgIHsKLQkJY29uc3QgY2hh ciAqaGVscGVyX3N0ciA9ICJcXGJpblxcY3lnd2luLWNvbnNvbGUtaGVscGVyLmV4ZSI7Ci0JCWlm IChtZW1tZW0gKCZvdXRidWZbc3RhcnRfYXRdLCBpICsgMSAtIHN0YXJ0X2F0LAotCQkJICAgIGhl bHBlcl9zdHIsIHN0cmxlbiAoaGVscGVyX3N0cikpKQotCQkgIHsKLQkJICAgIG1lbW1vdmUgKCZv dXRidWZbc3RhcnRfYXRdLCAmb3V0YnVmW2krMV0sIHJsZW4taS0xKTsKLQkJICAgIHJsZW4gPSB3 bGVuID0gc3RhcnRfYXQgKyBybGVuIC0gaSAtIDE7Ci0JCSAgfQotCQlzdGF0ZSA9IDA7Ci0JCWNv bnRpbnVlOwotCSAgICAgIH0KLQkgICAgZWxzZSBpZiAob3V0YnVmW2ldID09ICdcYScpCi0JICAg ICAgewotCQlzdGF0ZSA9IDA7Ci0JCWNvbnRpbnVlOwotCSAgICAgIH0KLQotCSAgLyogUmVtb3Zl IENTSSA+IFBtIG0gKi8KLQkgIHN0YXRlID0gMDsKLQkgIHN0YXJ0X2F0ID0gMDsKLQkgIGZvciAo RFdPUkQgaT0wOyBpPHJsZW47IGkrKykKLQkgICAgaWYgKG91dGJ1ZltpXSA9PSAnXDAzMycpCi0J ICAgICAgewotCQlzdGFydF9hdCA9IGk7Ci0JCXN0YXRlID0gMTsKLQkJY29udGludWU7Ci0JICAg ICAgfQotCSAgICBlbHNlIGlmICgoc3RhdGUgPT0gMSAmJiBvdXRidWZbaV0gPT0gJ1snKSB8fAot CQkgICAgIChzdGF0ZSA9PSAyICYmIG91dGJ1ZltpXSA9PSAnPicpKQorCSAgICBlbHNlIGlmICgo c3RhdGUgPT0gMSAmJiBvdXRidWZbaV0gPT0gJ1snKQorCQkgICAgIHx8IChzdGF0ZSA9PSAyICYm IG91dGJ1ZltpXSA9PSAnPicpKQogCSAgICAgIHsKIAkJc3RhdGUgKys7CiAJCWNvbnRpbnVlOwpA QCAtMzM4NiwyMDEgKzIyNDcsNiBAQCBwdHlfbWFzdGVyX2Z3ZF90aHJlYWQgKFZPSUQgKmFyZykK ICAgcmV0dXJuICgoZmhhbmRsZXJfcHR5X21hc3RlciAqKSBhcmcpLT5wdHlfbWFzdGVyX2Z3ZF90 aHJlYWQgKCk7CiB9CiAKLS8qIElmIG1hc3RlciBwcm9jZXNzIGlzIHJ1bm5pbmcgYXMgc2Vydmlj ZSwgYXR0YWNoaW5nIHRvCi0gICBwc2V1ZG8gY29uc29sZSBzaG91bGQgYmUgZG9uZSBpbiBmb3Jr LiBJZiBhdHRhY2hpbmcKLSAgIGlzIGRvbmUgaW4gc3Bhd24gZm9yIGluZXRkIG9yIHNzaGQsIGl0 IGZhaWxzIGJlY2F1c2UKLSAgIHRoZSBoZWxwZXIgcHJvY2VzcyBpcyBydW5uaW5nIGFzIHByaXZp bGVnZWQgdXNlciB3aGlsZQotICAgc2xhdmUgcHJvY2VzcyBpcyBub3QuIFRoaXMgZnVuY3Rpb24g aXMgdXNlZCB0byBkZXRlcm1pbmUKLSAgIGlmIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcgYXMgYSBz cnZpY2Ugb3Igbm90LiAqLwotaW5saW5lIHN0YXRpYyBib29sCi1pc19ydW5uaW5nX2FzX3NlcnZp Y2UgKHZvaWQpCi17Ci0gIHJldHVybiBjaGVja190b2tlbl9tZW1iZXJzaGlwICh3ZWxsX2tub3du X3NlcnZpY2Vfc2lkKQotICAgIHx8IGN5Z2hlYXAtPnVzZXIuc2F2ZWRfc2lkICgpID09IHdlbGxf a25vd25fc3lzdGVtX3NpZDsKLX0KLQotYm9vbAotZmhhbmRsZXJfcHR5X21hc3Rlcjo6c2V0dXBf cHNldWRvY29uc29sZSAoKQotewotICBpZiAoZGlzYWJsZV9wY29uKQotICAgIHJldHVybiBmYWxz ZTsKLSAgLyogSWYgdGhlIGxlZ2FjeSBjb25zb2xlIG1vZGUgaXMgZW5hYmxlZCwgcHNldWRvIGNv bnNvbGUgc2VlbXMKLSAgICAgbm90IHRvIHdvcmsgYXMgZXhwZWN0ZWQuIFRvIGRldGVybWluZSBj b25zb2xlIG1vZGUsIHJlZ2lzdHJ5Ci0gICAgIGtleSBGb3JjZVYyIGluIEhLRVlfQ1VSUkVOVF9V U0VSXENvbnNvbGUgaXMgY2hlY2tlZC4gKi8KLSAgcmVnX2tleSByZWcgKEhLRVlfQ1VSUkVOVF9V U0VSLCBLRVlfUkVBRCwgTCJDb25zb2xlIiwgTlVMTCk7Ci0gIGlmIChyZWcuZXJyb3IgKCkpCi0g ICAgcmV0dXJuIGZhbHNlOwotICBpZiAocmVnLmdldF9kd29yZCAoTCJGb3JjZVYyIiwgMSkgPT0g MCkKLSAgICB7Ci0gICAgICB0ZXJtaW9zX3ByaW50ZiAoIlBzZXVkbyBjb25zb2xlIGlzIGRpc2Fi bGVkICIKLQkJICAgICAgImJlY2F1c2UgdGhlIGxlZ2FjeSBjb25zb2xlIG1vZGUgaXMgZW5hYmxl ZC4iKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgLyogUHNldWRvIGNvbnNvbGUg c3VwcHJvdCBpcyByZWFsaXplZCB1c2luZyBhIHRyaWNreSB0ZWNobmljLgotICAgICBQVFkgbmVl ZCB0aGUgcHNldWRvIGNvbnNvbGUgaGFuZGxlcywgaG93ZXZlciwgdGhleSBjYW5ub3QKLSAgICAg YmUgcmV0cmlldmVkIGJ5IG5vcm1hbCBwcm9jZWR1cmUuIFRoZXJlZm9yZSwgcnVuIGEgaGVscGVy Ci0gICAgIHByb2Nlc3MgaW4gYSBwc2V1ZG8gY29uc29sZSBhbmQgZ2V0IHRoZW0gZnJvbSB0aGUg aGVscGVyLgotICAgICBTbGF2ZSBwcm9jZXNzIHdpbGwgYXR0YWNoIHRvIHRoZSBwc2V1ZG8gY29u c29sZSBpbiB0aGUKLSAgICAgaGVscGVyIHByb2Nlc3MgdXNpbmcgQXR0YWNoQ29uc29sZSgpLiAq LwotICBDT09SRCBzaXplID0gewotICAgIChTSE9SVCkgZ2V0X3R0eXAgKCktPndpbnNpemUud3Nf Y29sLAotICAgIChTSE9SVCkgZ2V0X3R0eXAgKCktPndpbnNpemUud3Nfcm93Ci0gIH07Ci0gIENy ZWF0ZVBpcGUgKCZmcm9tX21hc3RlciwgJnRvX3NsYXZlLCAmc2VjX25vbmUsIDApOwotICBTZXRM YXN0RXJyb3IgKEVSUk9SX1NVQ0NFU1MpOwotICBIUkVTVUxUIHJlcyA9IENyZWF0ZVBzZXVkb0Nv bnNvbGUgKHNpemUsIGZyb21fbWFzdGVyLCB0b19tYXN0ZXIsCi0JCQkJICAgICAwLCAmZ2V0X3R0 eXAgKCktPmhfcHNldWRvX2NvbnNvbGUpOwotICBpZiAocmVzICE9IFNfT0sgfHwgR2V0TGFzdEVy cm9yICgpID09IEVSUk9SX1BST0NfTk9UX0ZPVU5EKQotICAgIHsKLSAgICAgIGlmIChyZXMgIT0g U19PSykKLQlzeXN0ZW1fcHJpbnRmICgiQ3JlYXRlUHNldWRvQ29uc29sZSgpIGZhaWxlZC4gJTA4 eFxuIiwKLQkJICAgICAgIEdldExhc3RFcnJvciAoKSk7Ci0gICAgICBnb3RvIGZhbGxiYWNrOwot ICAgIH0KLQotICAvKiBJZiBtYXN0ZXIgcHJvY2VzcyBpcyBydW5uaW5nIGFzIHNlcnZpY2UsIGF0 dGFjaGluZyB0bwotICAgICBwc2V1ZG8gY29uc29sZSBzaG91bGQgYmUgZG9uZSBpbiBmb3JrLiBJ ZiBhdHRhY2hpbmcKLSAgICAgaXMgZG9uZSBpbiBzcGF3biBmb3IgaW5ldGQgb3Igc3NoZCwgaXQg ZmFpbHMgYmVjYXVzZQotICAgICB0aGUgaGVscGVyIHByb2Nlc3MgaXMgcnVubmluZyBhcyBwcml2 aWxlZ2VkIHVzZXIgd2hpbGUKLSAgICAgc2xhdmUgcHJvY2VzcyBpcyBub3QuICovCi0gIGlmIChp c19ydW5uaW5nX2FzX3NlcnZpY2UgKCkpCi0gICAgZ2V0X3R0eXAgKCktPmF0dGFjaF9wY29uX2lu X2ZvcmsgPSB0cnVlOwotCi0gIFNUQVJUVVBJTkZPRVhXIHNpX2hlbHBlcjsKLSAgSEFORExFIGhl bGxvLCBnb29kYnllOwotICBIQU5ETEUgaHIsIGh3OwotICBQUk9DRVNTX0lORk9STUFUSU9OIHBp X2hlbHBlcjsKLSAgSEFORExFIGhwQ29uSW4sIGhwQ29uT3V0OwotICB7Ci0gICAgU0laRV9UIGJ5 dGVzUmVxdWlyZWQ7Ci0gICAgSW5pdGlhbGl6ZVByb2NUaHJlYWRBdHRyaWJ1dGVMaXN0IChOVUxM LCAyLCAwLCAmYnl0ZXNSZXF1aXJlZCk7Ci0gICAgWmVyb01lbW9yeSAoJnNpX2hlbHBlciwgc2l6 ZW9mIChzaV9oZWxwZXIpKTsKLSAgICBzaV9oZWxwZXIuU3RhcnR1cEluZm8uY2IgPSBzaXplb2Yg KFNUQVJUVVBJTkZPRVhXKTsKLSAgICBzaV9oZWxwZXIubHBBdHRyaWJ1dGVMaXN0ID0gKFBQUk9D X1RIUkVBRF9BVFRSSUJVVEVfTElTVCkKLSAgICAgIEhlYXBBbGxvYyAoR2V0UHJvY2Vzc0hlYXAg KCksIDAsIGJ5dGVzUmVxdWlyZWQpOwotICAgIGlmIChzaV9oZWxwZXIubHBBdHRyaWJ1dGVMaXN0 ID09IE5VTEwpCi0gICAgICBnb3RvIGNsZWFudXBfcHNldWRvX2NvbnNvbGU7Ci0gICAgaWYgKCFJ bml0aWFsaXplUHJvY1RocmVhZEF0dHJpYnV0ZUxpc3QgKHNpX2hlbHBlci5scEF0dHJpYnV0ZUxp c3QsCi0JCQkJCSAgICAyLCAwLCAmYnl0ZXNSZXF1aXJlZCkpCi0gICAgICBnb3RvIGNsZWFudXBf aGVhcDsKLSAgICBpZiAoIVVwZGF0ZVByb2NUaHJlYWRBdHRyaWJ1dGUgKHNpX2hlbHBlci5scEF0 dHJpYnV0ZUxpc3QsCi0JCQkJICAgIDAsCi0JCQkJICAgIFBST0NfVEhSRUFEX0FUVFJJQlVURV9Q U0VVRE9DT05TT0xFLAotCQkJCSAgICBnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSwKLQkJ CQkgICAgc2l6ZW9mIChnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSksCi0JCQkJICAgIE5V TEwsIE5VTEwpKQotICAgICAgZ290byBjbGVhbnVwX2hlYXA7Ci0gICAgLyogQ3JlYXRlIGV2ZW50 cyBmb3Igc3RhcnQvc3RvcCBoZWxwZXIgcHJvY2Vzcy4gKi8KLSAgICBoZWxsbyA9IENyZWF0ZUV2 ZW50ICgmc2VjX25vbmUsIHRydWUsIGZhbHNlLCBOVUxMKTsKLSAgICBnb29kYnllID0gQ3JlYXRl RXZlbnQgKCZzZWNfbm9uZSwgdHJ1ZSwgZmFsc2UsIE5VTEwpOwotICAgIC8qIENyZWF0ZSBhIHBp cGUgZm9yIHJlY2VpdmluZyBwc2V1ZG8gY29uc29sZSBoYW5kbGVzICovCi0gICAgQ3JlYXRlUGlw ZSAoJmhyLCAmaHcsICZzZWNfbm9uZSwgMCk7Ci0gICAgLyogSW5oZXJpdCBvbmx5IGhhbmRsZXMg d2hpY2ggYXJlIG5lZWRlZCBieSBoZWxwZXIuICovCi0gICAgSEFORExFIGhhbmRsZXNfdG9faW5o ZXJpdFtdID0ge2hlbGxvLCBnb29kYnllLCBod307Ci0gICAgaWYgKCFVcGRhdGVQcm9jVGhyZWFk QXR0cmlidXRlIChzaV9oZWxwZXIubHBBdHRyaWJ1dGVMaXN0LAotCQkJCSAgICAwLAotCQkJCSAg ICBQUk9DX1RIUkVBRF9BVFRSSUJVVEVfSEFORExFX0xJU1QsCi0JCQkJICAgIGhhbmRsZXNfdG9f aW5oZXJpdCwKLQkJCQkgICAgc2l6ZW9mIChoYW5kbGVzX3RvX2luaGVyaXQpLAotCQkJCSAgICBO VUxMLCBOVUxMKSkKLSAgICAgIGdvdG8gY2xlYW51cF9ldmVudF9hbmRfcGlwZXM7Ci0gICAgLyog Q3JlYXRlIGhlbHBlciBwcm9jZXNzICovCi0gICAgV0NIQVIgY21kW01BWF9QQVRIXTsKLSAgICBw YXRoX2NvbnYgaGVscGVyICgiL2Jpbi9jeWd3aW4tY29uc29sZS1oZWxwZXIuZXhlIik7Ci0gICAg c2l6ZV90IGxlbiA9IGhlbHBlci5nZXRfd2lkZV93aW4zMl9wYXRoX2xlbiAoKTsKLSAgICBoZWxw ZXIuZ2V0X3dpZGVfd2luMzJfcGF0aCAoY21kKTsKLSAgICBfX3NtYWxsX3N3cHJpbnRmIChjbWQg KyBsZW4sIEwiICVwICVwICVwIiwgaGVsbG8sIGdvb2RieWUsIGh3KTsKLSAgICBzaV9oZWxwZXIu U3RhcnR1cEluZm8uZHdGbGFncyA9IFNUQVJURl9VU0VTVERIQU5ETEVTOwotICAgIHNpX2hlbHBl ci5TdGFydHVwSW5mby5oU3RkSW5wdXQgPSBOVUxMOwotICAgIHNpX2hlbHBlci5TdGFydHVwSW5m by5oU3RkT3V0cHV0ID0gTlVMTDsKLSAgICBzaV9oZWxwZXIuU3RhcnR1cEluZm8uaFN0ZEVycm9y ID0gTlVMTDsKLSAgICBpZiAoIUNyZWF0ZVByb2Nlc3NXIChOVUxMLCBjbWQsICZzZWNfbm9uZSwg JnNlY19ub25lLAotCQkJIFRSVUUsIEVYVEVOREVEX1NUQVJUVVBJTkZPX1BSRVNFTlQsCi0JCQkg TlVMTCwgTlVMTCwgJnNpX2hlbHBlci5TdGFydHVwSW5mbywgJnBpX2hlbHBlcikpCi0gICAgICBn b3RvIGNsZWFudXBfZXZlbnRfYW5kX3BpcGVzOwotICAgIGZvciAoOzspCi0gICAgICB7Ci0gICAg ICAgIERXT1JEIHdhaXRfcmVzdWx0ID0gV2FpdEZvclNpbmdsZU9iamVjdCAoaGVsbG8sIDUwMCk7 Ci0JaWYgKHdhaXRfcmVzdWx0ID09IFdBSVRfT0JKRUNUXzApCi0JICBicmVhazsKLQlpZiAod2Fp dF9yZXN1bHQgIT0gV0FJVF9USU1FT1VUKQotCSAgZ290byBjbGVhbnVwX2hlbHBlcl9wcm9jZXNz OwotCURXT1JEIGV4aXRfY29kZTsKLQlpZiAoIUdldEV4aXRDb2RlUHJvY2VzcyhwaV9oZWxwZXIu aFByb2Nlc3MsICZleGl0X2NvZGUpKQotCSAgZ290byBjbGVhbnVwX2hlbHBlcl9wcm9jZXNzOwot CWlmIChleGl0X2NvZGUgPT0gU1RJTExfQUNUSVZFKQotCSAgY29udGludWU7Ci0JaWYgKGV4aXRf Y29kZSAhPSAwIHx8Ci0JICAgIFdhaXRGb3JTaW5nbGVPYmplY3QgKGhlbGxvLCA1MDApICE9IFdB SVRfT0JKRUNUXzApCi0JICBnb3RvIGNsZWFudXBfaGVscGVyX3Byb2Nlc3M7Ci0JYnJlYWs7Ci0g ICAgICB9Ci0gICAgQ2xvc2VIYW5kbGUgKGhlbGxvKTsKLSAgICBDbG9zZUhhbmRsZSAocGlfaGVs cGVyLmhUaHJlYWQpOwotICAgIC8qIFJldHJpZXZlIHBzZXVkbyBjb25zb2xlIGhhbmRsZXMgKi8K LSAgICBEV09SRCByTGVuOwotICAgIGNoYXIgYnVmWzY0XTsKLSAgICBpZiAoIVJlYWRGaWxlICho ciwgYnVmLCBzaXplb2YgKGJ1ZiksICZyTGVuLCBOVUxMKSkKLSAgICAgIGdvdG8gY2xlYW51cF9o ZWxwZXJfcHJvY2VzczsKLSAgICBidWZbckxlbl0gPSAnXDAnOwotICAgIHNzY2FuZiAoYnVmLCAi U3RkSGFuZGxlcz0lcCwlcCIsICZocENvbkluLCAmaHBDb25PdXQpOwotICAgIGlmICghRHVwbGlj YXRlSGFuZGxlIChwaV9oZWxwZXIuaFByb2Nlc3MsIGhwQ29uSW4sCi0JCQkgIEdldEN1cnJlbnRQ cm9jZXNzICgpLCAmaHBDb25JbiwgMCwKLQkJCSAgVFJVRSwgRFVQTElDQVRFX1NBTUVfQUNDRVNT KSkKLSAgICAgIGdvdG8gY2xlYW51cF9oZWxwZXJfcHJvY2VzczsKLSAgICBpZiAoIUR1cGxpY2F0 ZUhhbmRsZSAocGlfaGVscGVyLmhQcm9jZXNzLCBocENvbk91dCwKLQkJCSAgR2V0Q3VycmVudFBy b2Nlc3MgKCksICZocENvbk91dCwgMCwKLQkJCSAgVFJVRSwgRFVQTElDQVRFX1NBTUVfQUNDRVNT KSkKLSAgICAgIGdvdG8gY2xlYW51cF9wY29uX2luOwotICAgIENsb3NlSGFuZGxlIChocik7Ci0g ICAgQ2xvc2VIYW5kbGUgKGh3KTsKLSAgICAvKiBDbGVhbiB1cCAqLwotICAgIERlbGV0ZVByb2NU aHJlYWRBdHRyaWJ1dGVMaXN0IChzaV9oZWxwZXIubHBBdHRyaWJ1dGVMaXN0KTsKLSAgICBIZWFw RnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIHNpX2hlbHBlci5scEF0dHJpYnV0ZUxpc3QpOwot ICB9Ci0gIC8qIFNldHRpbmcgaW5mb3JtYXRpb24gb2Ygc3R1ZmZzIHJlZ2FyZGluZyBwc2V1ZG8g Y29uc29sZSAqLwotICBnZXRfdHR5cCAoKS0+aF9oZWxwZXJfZ29vZGJ5ZSA9IGdvb2RieWU7Ci0g IGdldF90dHlwICgpLT5oX2hlbHBlcl9wcm9jZXNzID0gcGlfaGVscGVyLmhQcm9jZXNzOwotICBn ZXRfdHR5cCAoKS0+aGVscGVyX3Byb2Nlc3NfaWQgPSBwaV9oZWxwZXIuZHdQcm9jZXNzSWQ7Ci0g IENsb3NlSGFuZGxlIChmcm9tX21hc3Rlcik7Ci0gIENsb3NlSGFuZGxlICh0b19tYXN0ZXIpOwot ICBmcm9tX21hc3RlciA9IGhwQ29uSW47Ci0gIHRvX21hc3RlciA9IGhwQ29uT3V0OwotICBSZXNp emVQc2V1ZG9Db25zb2xlIChnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSwgc2l6ZSk7Ci0g IHJldHVybiB0cnVlOwotCi1jbGVhbnVwX3Bjb25faW46Ci0gIENsb3NlSGFuZGxlIChocENvbklu KTsKLWNsZWFudXBfaGVscGVyX3Byb2Nlc3M6Ci0gIFNldEV2ZW50IChnb29kYnllKTsKLSAgV2Fp dEZvclNpbmdsZU9iamVjdCAocGlfaGVscGVyLmhQcm9jZXNzLCBJTkZJTklURSk7Ci0gIENsb3Nl SGFuZGxlIChwaV9oZWxwZXIuaFByb2Nlc3MpOwotICBnb3RvIHNraXBfY2xvc2VfaGVsbG87Ci1j bGVhbnVwX2V2ZW50X2FuZF9waXBlczoKLSAgQ2xvc2VIYW5kbGUgKGhlbGxvKTsKLXNraXBfY2xv c2VfaGVsbG86Ci0gIENsb3NlSGFuZGxlIChnb29kYnllKTsKLSAgQ2xvc2VIYW5kbGUgKGhyKTsK LSAgQ2xvc2VIYW5kbGUgKGh3KTsKLWNsZWFudXBfaGVhcDoKLSAgSGVhcEZyZWUgKEdldFByb2Nl c3NIZWFwICgpLCAwLCBzaV9oZWxwZXIubHBBdHRyaWJ1dGVMaXN0KTsKLWNsZWFudXBfcHNldWRv X2NvbnNvbGU6Ci0gIHsKLSAgICBIUENPTl9JTlRFUk5BTCAqaHAgPSAoSFBDT05fSU5URVJOQUwg KikgZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGU7Ci0gICAgSEFORExFIHRtcCA9IGhwLT5o Q29uSG9zdFByb2Nlc3M7Ci0gICAgQ2xvc2VQc2V1ZG9Db25zb2xlIChnZXRfcHNldWRvX2NvbnNv bGUgKCkpOwotICAgIENsb3NlSGFuZGxlICh0bXApOwotICB9Ci1mYWxsYmFjazoKLSAgQ2xvc2VI YW5kbGUgKGZyb21fbWFzdGVyKTsKLSAgQ2xvc2VIYW5kbGUgKHRvX3NsYXZlKTsKLSAgZnJvbV9t YXN0ZXIgPSBmcm9tX21hc3Rlcl9jeWc7Ci0gIHRvX3NsYXZlID0gTlVMTDsKLSAgZ2V0X3R0eXAg KCktPmhfcHNldWRvX2NvbnNvbGUgPSBOVUxMOwotICByZXR1cm4gZmFsc2U7Ci19Ci0KIGJvb2wK IGZoYW5kbGVyX3B0eV9tYXN0ZXI6OnNldHVwICgpCiB7CkBAIC0zNTkzLDExICsyMjU5LDYgQEAg ZmhhbmRsZXJfcHR5X21hc3Rlcjo6c2V0dXAgKCkKICAgaWYgKHVuaXQgPCAwKQogICAgIHJldHVy biBmYWxzZTsKIAotICAvKiBmcm9tX21hc3RlciBzaG91bGQgYmUgdXNlZCBmb3IgcHNldWRvIGNv bnNvbGUuCi0gICAgIEp1c3QgY29weSBmcm9tX21hc3Rlcl9jeWcgaGVyZSBmb3IgdGhlIGNhc2Ug dGhhdAotICAgICBwc2V1ZG8gY29uc29sZSBpcyBub3QgYXZhaWxhYmxlLiAqLwotICBmcm9tX21h c3RlciA9IGZyb21fbWFzdGVyX2N5ZzsKLQogICBQcm90ZWN0SGFuZGxlMSAoZ2V0X291dHB1dF9o YW5kbGUgKCksIHRvX3B0eSk7CiAKICAgdHR5JiB0ID0gKmN5Z3dpbl9zaGFyZWQtPnR0eVt1bml0 XTsKQEAgLTM2OTYsMTUgKzIzNTcsMjEgQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6c2V0dXAgKCkK ICAgICAgIGdvdG8gZXJyOwogICAgIH0KIAotICB0LndpbnNpemUud3NfY29sID0gODA7Ci0gIHQu d2luc2l6ZS53c19yb3cgPSAyNTsKLQotICBzZXR1cF9wc2V1ZG9jb25zb2xlICgpOworICBfX3Nt YWxsX3NwcmludGYgKHBpcGVuYW1lLCAicHR5JWQtdG8tc2xhdmUiLCB1bml0KTsKKyAgcmVzID0g ZmhhbmRsZXJfcGlwZTo6Y3JlYXRlICgmc2VjX25vbmUsICZmcm9tX21hc3RlciwgJnRvX3NsYXZl LAorCQkJICAgICAgIGZoYW5kbGVyX3B0eV9jb21tb246OnBpcGVzaXplLCBwaXBlbmFtZSwgMCk7 CisgIGlmIChyZXMpCisgICAgeworICAgICAgZXJyc3RyID0gImlucHV0IHBpcGUiOworICAgICAg Z290byBlcnI7CisgICAgfQogCiAgIHQuc2V0X2Zyb21fbWFzdGVyIChmcm9tX21hc3Rlcik7CiAg IHQuc2V0X2Zyb21fbWFzdGVyX2N5ZyAoZnJvbV9tYXN0ZXJfY3lnKTsKICAgdC5zZXRfdG9fbWFz dGVyICh0b19tYXN0ZXIpOwogICB0LnNldF90b19tYXN0ZXJfY3lnICh0b19tYXN0ZXJfY3lnKTsK KyAgdC53aW5zaXplLndzX2NvbCA9IDgwOworICB0LndpbnNpemUud3Nfcm93ID0gMjU7CiAgIHQu bWFzdGVyX3BpZCA9IG15c2VsZi0+cGlkOwogCiAgIGRldiAoKS5wYXJzZSAoREVWX1BUWU1fTUFK T1IsIHVuaXQpOwpAQCAtMzcxNyw2ICsyMzg0LDcgQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6c2V0 dXAgKCkKIGVycjoKICAgX19zZXRlcnJubyAoKTsKICAgY2xvc2VfbWF5YmUgKGZyb21fc2xhdmUp OworICBjbG9zZV9tYXliZSAodG9fc2xhdmUpOwogICBjbG9zZV9tYXliZSAoZ2V0X2hhbmRsZSAo KSk7CiAgIGNsb3NlX21heWJlIChnZXRfb3V0cHV0X2hhbmRsZSAoKSk7CiAgIGNsb3NlX21heWJl IChpbnB1dF9hdmFpbGFibGVfZXZlbnQpOwpAQCAtMzc3Niw5ICsyNDQ0LDYgQEAgZmhhbmRsZXJf cHR5X2NvbW1vbjo6cHJvY2Vzc19vcG9zdF9vdXRwdXQgKEhBTkRMRSBoLCBjb25zdCB2b2lkICpw dHIsIHNzaXplX3QmIGwKIHsKICAgc3NpemVfdCB0b3dyaXRlID0gbGVuOwogICBCT09MIHJlcyA9 IFRSVUU7Ci0gIEJPT0wgKFdJTkFQSSAqV3JpdGVGdW5jKQotICAgIChIQU5ETEUsIExQQ1ZPSUQs IERXT1JELCBMUERXT1JELCBMUE9WRVJMQVBQRUQpOwotICBXcml0ZUZ1bmMgPSBXcml0ZUZpbGVf T3JpZyA/IFdyaXRlRmlsZV9PcmlnIDogV3JpdGVGaWxlOwogICB3aGlsZSAodG93cml0ZSkKICAg ICB7CiAgICAgICBpZiAoIWlzX2VjaG8pCkBAIC0zODAxLDcgKzI0NjYsNyBAQCBmaGFuZGxlcl9w dHlfY29tbW9uOjpwcm9jZXNzX29wb3N0X291dHB1dCAoSEFORExFIGgsIGNvbnN0IHZvaWQgKnB0 ciwgc3NpemVfdCYgbAogICAgICAgaWYgKCEoZ2V0X3R0eXAgKCktPnRpLmNfb2ZsYWcgJiBPUE9T VCkpCS8vIHJhdyBvdXRwdXQgbW9kZQogCXsKIAkgIERXT1JEIG4gPSBNSU4gKE9VVF9CVUZGRVJf U0laRSwgdG93cml0ZSk7Ci0JICByZXMgPSBXcml0ZUZ1bmMgKGgsIHB0ciwgbiwgJm4sIE5VTEwp OworCSAgcmVzID0gV3JpdGVGaWxlIChoLCBwdHIsIG4sICZuLCBOVUxMKTsKIAkgIGlmICghcmVz KQogCSAgICBicmVhazsKIAkgIHB0ciA9IChjaGFyICopIHB0ciArIG47CkBAIC0zODUxLDcgKzI1 MTYsNyBAQCBmaGFuZGxlcl9wdHlfY29tbW9uOjpwcm9jZXNzX29wb3N0X291dHB1dCAoSEFORExF IGgsIGNvbnN0IHZvaWQgKnB0ciwgc3NpemVfdCYgbAogCQkgIGJyZWFrOwogCQl9CiAJICAgIH0K LQkgIHJlcyA9IFdyaXRlRnVuYyAoaCwgb3V0YnVmLCBuLCAmbiwgTlVMTCk7CisJICByZXMgPSBX cml0ZUZpbGUgKGgsIG91dGJ1ZiwgbiwgJm4sIE5VTEwpOwogCSAgaWYgKCFyZXMpCiAJICAgIGJy ZWFrOwogCSAgcHRyID0gKGNoYXIgKikgcHRyICsgcmM7CkBAIC0zODYxLDMgKzI1MjYsMTMyIEBA IGZoYW5kbGVyX3B0eV9jb21tb246OnByb2Nlc3Nfb3Bvc3Rfb3V0cHV0IChIQU5ETEUgaCwgY29u c3Qgdm9pZCAqcHRyLCBzc2l6ZV90JiBsCiAgIGxlbiAtPSB0b3dyaXRlOwogICByZXR1cm4gcmVz OwogfQorCitib29sCitmaGFuZGxlcl9wdHlfc2xhdmU6OnNldHVwX3BzZXVkb2NvbnNvbGUgKFNU QVJUVVBJTkZPRVhXICpzaSkKK3sKKworICAvKiBTZXR0aW5nIHN3aXRjaF90b19wY29uX2luIGlz IG5lY2Vzc2FyeSBldmVuIGlmCisgICAgIHBzZXVkbyBjb25zb2xlIHdpbGwgbm90IGJlIGFjdGl2 YXRlZC4gKi8KKyAgZmhhbmRsZXJfYmFzZSAqZmggPSA6OmN5Z2hlYXAtPmZkdGFiWzBdOworICBp ZiAoZmggJiYgZmgtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZU19NQUpPUikKKyAgICB7CisgICAg ICBmaGFuZGxlcl9wdHlfc2xhdmUgKnB0eXMgPSAoZmhhbmRsZXJfcHR5X3NsYXZlICopIGZoOwor ICAgICAgcHR5cy0+Z2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX2luID0gdHJ1ZTsKKyAgICAg IGlmIChwdHlzLT5nZXRfdHR5cCAoKS0+cGNvbl9waWQgPT0gMAorCSAgfHwgIXBpbmZvIChwdHlz LT5nZXRfdHR5cCAoKS0+cGNvbl9waWQpKQorCXB0eXMtPmdldF90dHlwICgpLT5wY29uX3BpZCA9 IG15c2VsZi0+cGlkOworICAgIH0KKworICBpZiAoZ2V0X3R0eXAgKCktPnBjb25fcGlkICYmIGdl dF90dHlwICgpLT5wY29uX3BpZCAhPSBteXNlbGYtPnBpZAorICAgICAgJiYgISFwaW5mbyAoZ2V0 X3R0eXAgKCktPnBjb25fcGlkKSkKKyAgICByZXR1cm4gZmFsc2U7CisgIGlmIChkaXNhYmxlX3Bj b24pCisgICAgcmV0dXJuIGZhbHNlOworICAvKiBJZiB0aGUgbGVnYWN5IGNvbnNvbGUgbW9kZSBp cyBlbmFibGVkLCBwc2V1ZG8gY29uc29sZSBzZWVtcworICAgICBub3QgdG8gd29yayBhcyBleHBl Y3RlZC4gVG8gZGV0ZXJtaW5lIGNvbnNvbGUgbW9kZSwgcmVnaXN0cnkKKyAgICAga2V5IEZvcmNl VjIgaW4gSEtFWV9DVVJSRU5UX1VTRVJcQ29uc29sZSBpcyBjaGVja2VkLiAqLworICByZWdfa2V5 IHJlZyAoSEtFWV9DVVJSRU5UX1VTRVIsIEtFWV9SRUFELCBMIkNvbnNvbGUiLCBOVUxMKTsKKyAg aWYgKHJlZy5lcnJvciAoKSkKKyAgICByZXR1cm4gZmFsc2U7CisgIGlmIChyZWcuZ2V0X2R3b3Jk IChMIkZvcmNlVjIiLCAxKSA9PSAwKQorICAgIHsKKyAgICAgIHRlcm1pb3NfcHJpbnRmICgiUHNl dWRvIGNvbnNvbGUgaXMgZGlzYWJsZWQgIgorCQkgICAgICAiYmVjYXVzZSB0aGUgbGVnYWN5IGNv bnNvbGUgbW9kZSBpcyBlbmFibGVkLiIpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor ICBDT09SRCBzaXplID0geworICAgIChTSE9SVCkgZ2V0X3R0eXAgKCktPndpbnNpemUud3NfY29s LAorICAgIChTSE9SVCkgZ2V0X3R0eXAgKCktPndpbnNpemUud3Nfcm93CisgIH07CisgIGNvbnN0 IERXT1JEIGluaGVyaXRfY3Vyc29yID0gMTsKKyAgU2V0TGFzdEVycm9yIChFUlJPUl9TVUNDRVNT KTsKKyAgSFJFU1VMVCByZXMgPSBDcmVhdGVQc2V1ZG9Db25zb2xlIChzaXplLCBnZXRfaGFuZGxl ICgpLCBnZXRfb3V0cHV0X2hhbmRsZSAoKSwKKwkJCQkgICAgIGluaGVyaXRfY3Vyc29yLAorCQkJ CSAgICAgJmdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlKTsKKyAgaWYgKHJlcyAhPSBTX09L IHx8IEdldExhc3RFcnJvciAoKSA9PSBFUlJPUl9QUk9DX05PVF9GT1VORCkKKyAgICB7CisgICAg ICBpZiAocmVzICE9IFNfT0spCisJc3lzdGVtX3ByaW50ZiAoIkNyZWF0ZVBzZXVkb0NvbnNvbGUo KSBmYWlsZWQuICUwOHggJTA4eFxuIiwKKwkJICAgICAgIEdldExhc3RFcnJvciAoKSwgcmVzKTsK KyAgICAgIGdvdG8gZmFsbGJhY2s7CisgICAgfQorCisgIFNJWkVfVCBieXRlc1JlcXVpcmVkOwor ICBJbml0aWFsaXplUHJvY1RocmVhZEF0dHJpYnV0ZUxpc3QgKE5VTEwsIDEsIDAsICZieXRlc1Jl cXVpcmVkKTsKKyAgWmVyb01lbW9yeSAoc2ksIHNpemVvZiAoKnNpKSk7CisgIHNpLT5TdGFydHVw SW5mby5jYiA9IHNpemVvZiAoU1RBUlRVUElORk9FWFcpOworICBzaS0+bHBBdHRyaWJ1dGVMaXN0 ID0gKFBQUk9DX1RIUkVBRF9BVFRSSUJVVEVfTElTVCkKKyAgICBIZWFwQWxsb2MgKEdldFByb2Nl c3NIZWFwICgpLCAwLCBieXRlc1JlcXVpcmVkKTsKKyAgaWYgKHNpLT5scEF0dHJpYnV0ZUxpc3Qg PT0gTlVMTCkKKyAgICBnb3RvIGNsZWFudXBfcHNldWRvX2NvbnNvbGU7CisgIGlmICghSW5pdGlh bGl6ZVByb2NUaHJlYWRBdHRyaWJ1dGVMaXN0IChzaS0+bHBBdHRyaWJ1dGVMaXN0LAorCQkJCQkg IDEsIDAsICZieXRlc1JlcXVpcmVkKSkKKyAgICBnb3RvIGNsZWFudXBfaGVhcDsKKyAgaWYgKCFV cGRhdGVQcm9jVGhyZWFkQXR0cmlidXRlIChzaS0+bHBBdHRyaWJ1dGVMaXN0LAorCQkJCSAgMCwK KwkJCQkgIFBST0NfVEhSRUFEX0FUVFJJQlVURV9QU0VVRE9DT05TT0xFLAorCQkJCSAgZ2V0X3R0 eXAgKCktPmhfcHNldWRvX2NvbnNvbGUsCisJCQkJICBzaXplb2YgKGdldF90dHlwICgpLT5oX3Bz ZXVkb19jb25zb2xlKSwKKwkJCQkgIE5VTEwsIE5VTEwpKQorICAgIGdvdG8gY2xlYW51cF9oZWFw OworICBzaS0+U3RhcnR1cEluZm8uZHdGbGFncyA9IFNUQVJURl9VU0VTVERIQU5ETEVTOworICBz aS0+U3RhcnR1cEluZm8uaFN0ZElucHV0ID0gTlVMTDsKKyAgc2ktPlN0YXJ0dXBJbmZvLmhTdGRP dXRwdXQgPSBOVUxMOworICBzaS0+U3RhcnR1cEluZm8uaFN0ZEVycm9yID0gTlVMTDsKKworICB7 CisgICAgZmhhbmRsZXJfYmFzZSAqZmgwID0gOjpjeWdoZWFwLT5mZHRhYlswXTsKKyAgICBpZiAo ZmgwICYmIGZoMC0+Z2V0X2RldmljZSAoKSAhPSBnZXRfZGV2aWNlICgpKQorICAgICAgc2ktPlN0 YXJ0dXBJbmZvLmhTdGRJbnB1dCA9IGZoMC0+Z2V0X2hhbmRsZSAoKTsKKyAgICBmaGFuZGxlcl9i YXNlICpmaDEgPSA6OmN5Z2hlYXAtPmZkdGFiWzFdOworICAgIGlmIChmaDEgJiYgZmgxLT5nZXRf ZGV2aWNlICgpICE9IGdldF9kZXZpY2UgKCkpCisgICAgICBzaS0+U3RhcnR1cEluZm8uaFN0ZE91 dHB1dCA9IGZoMS0+Z2V0X291dHB1dF9oYW5kbGUgKCk7CisgICAgZmhhbmRsZXJfYmFzZSAqZmgy ID0gOjpjeWdoZWFwLT5mZHRhYlsyXTsKKyAgICBpZiAoZmgyICYmIGZoMi0+Z2V0X2RldmljZSAo KSAhPSBnZXRfZGV2aWNlICgpKQorICAgICAgc2ktPlN0YXJ0dXBJbmZvLmhTdGRFcnJvciA9IGZo Mi0+Z2V0X291dHB1dF9oYW5kbGUgKCk7CisgIH0KKworICBpZiAoZ2V0X3R0eXAgKCktPnBjb25f cGlkID09IDAgfHwgIXBpbmZvIChnZXRfdHR5cCAoKS0+cGNvbl9waWQpKQorICAgIGdldF90dHlw ICgpLT5wY29uX3BpZCA9IG15c2VsZi0+cGlkOworCisgIGlmIChnZXRfdHR5cCAoKS0+aF9wc2V1 ZG9fY29uc29sZSAmJiBnZXRfdHR5cCAoKS0+cGNvbl9waWQgPT0gbXlzZWxmLT5waWQpCisgICAg eworICAgICAgSFBDT05fSU5URVJOQUwgKmhwID0gKEhQQ09OX0lOVEVSTkFMICopIGdldF90dHlw ICgpLT5oX3BzZXVkb19jb25zb2xlOworICAgICAgZ2V0X3R0eXAgKCktPmhfcGNvbl93cml0ZV9w aXBlID0gaHAtPmhXcml0ZVBpcGU7CisgICAgfQorICBnZXRfdHR5cCAoKS0+cGNvbl9zdGFydCA9 IHRydWU7CisgIHJldHVybiB0cnVlOworCitjbGVhbnVwX2hlYXA6CisgIEhlYXBGcmVlIChHZXRQ cm9jZXNzSGVhcCAoKSwgMCwgc2ktPmxwQXR0cmlidXRlTGlzdCk7CitjbGVhbnVwX3BzZXVkb19j b25zb2xlOgorICBpZiAoZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGUpCisgICAgeworICAg ICAgSFBDT05fSU5URVJOQUwgKmhwID0gKEhQQ09OX0lOVEVSTkFMICopIGdldF90dHlwICgpLT5o X3BzZXVkb19jb25zb2xlOworICAgICAgSEFORExFIHRtcCA9IGhwLT5oQ29uSG9zdFByb2Nlc3M7 CisgICAgICBDbG9zZVBzZXVkb0NvbnNvbGUgKGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xl KTsKKyAgICAgIENsb3NlSGFuZGxlICh0bXApOworICAgIH0KK2ZhbGxiYWNrOgorICBnZXRfdHR5 cCAoKS0+aF9wc2V1ZG9fY29uc29sZSA9IE5VTEw7CisgIHJldHVybiBmYWxzZTsKK30KKwordm9p ZAorZmhhbmRsZXJfcHR5X3NsYXZlOjpjbG9zZV9wc2V1ZG9jb25zb2xlICh2b2lkKQoreworICBp ZiAoZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGUpCisgICAgeworICAgICAgZ2V0X3R0eXAg KCktPndhaXRfcGNvbl9md2QgKCk7CisgICAgICBIUENPTl9JTlRFUk5BTCAqaHAgPSAoSFBDT05f SU5URVJOQUwgKikgZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGU7CisgICAgICBIQU5ETEUg dG1wID0gaHAtPmhDb25Ib3N0UHJvY2VzczsKKyAgICAgIENsb3NlUHNldWRvQ29uc29sZSAoZ2V0 X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGUpOworICAgICAgQ2xvc2VIYW5kbGUgKHRtcCk7Cisg ICAgICBnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSA9IE5VTEw7CisgICAgICBnZXRfdHR5 cCAoKS0+c3dpdGNoX3RvX3Bjb25faW4gPSBmYWxzZTsKKyAgICAgIGdldF90dHlwICgpLT5wY29u X3BpZCA9IDA7CisgICAgICBnZXRfdHR5cCAoKS0+cGNvbl9zdGFydCA9IGZhbHNlOworICAgIH0K K30KZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vZm9yay5jYyBiL3dpbnN1cC9jeWd3aW4vZm9y ay5jYwppbmRleCA2OTFkMDgxMzcuLjZjYTRiNWYyOSAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dp bi9mb3JrLmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vZm9yay5jYwpAQCAtMTM0LDM2ICsxMzQsNiBA QCBjaGlsZF9pbmZvOjpwcmVmb3JrIChib29sIGRldGFjaGVkKQogaW50IF9fc3RkY2FsbAogZnJv azo6Y2hpbGQgKHZvbGF0aWxlIGNoYXIgKiB2b2xhdGlsZSBoZXJlKQogewotICBjeWdoZWFwX2Zk ZW51bSBjZmQgKGZhbHNlKTsKLSAgd2hpbGUgKGNmZC5uZXh0ICgpID49IDApCi0gICAgaWYgKGNm ZC0+Z2V0X21ham9yICgpID09IERFVl9QVFlNX01BSk9SKQotICAgICAgewotCWZoYW5kbGVyX2Jh c2UgKmZoID0gY2ZkOwotCWZoYW5kbGVyX3B0eV9tYXN0ZXIgKnB0eW0gPSAoZmhhbmRsZXJfcHR5 X21hc3RlciAqKSBmaDsKLQlpZiAocHR5bS0+Z2V0X3BzZXVkb19jb25zb2xlICgpKQotCSAgewot CSAgICBkZWJ1Z19wcmludGYgKCJmb3VuZCBhIFBUWSBtYXN0ZXIgJWQ6IGhlbHBlcl9QSUQ9JWQi LAotCQkJICBwdHltLT5nZXRfbWlub3IgKCksIHB0eW0tPmdldF9oZWxwZXJfcHJvY2Vzc19pZCAo KSk7Ci0JICAgIGlmIChmaGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkICgK LQkJCQlwdHltLT5nZXRfaGVscGVyX3Byb2Nlc3NfaWQgKCksIHRydWUpKQotCSAgICAgIC8qIEFs cmVhZHkgYXR0YWNoZWQgKi8KLQkgICAgICBicmVhazsKLQkgICAgZWxzZQotCSAgICAgIHsKLQkJ aWYgKHB0eW0tPmF0dGFjaF9wY29uX2luX2ZvcmsgKCkpCi0JCSAgewotCQkgICAgRnJlZUNvbnNv bGUgKCk7Ci0JCSAgICBpZiAoIUF0dGFjaENvbnNvbGUgKHB0eW0tPmdldF9oZWxwZXJfcHJvY2Vz c19pZCAoKSkpCi0JCSAgICAgIC8qIEVycm9yICovOwotCQkgICAgZWxzZQotCQkgICAgICBicmVh azsKLQkJICB9Ci0JICAgICAgfQotCSAgfQotICAgICAgfQotICBleHRlcm4gdm9pZCBjbGVhcl9w Y29uX2F0dGFjaGVkX3RvICh2b2lkKTsgLyogZmhhbmRsZXJfdHR5LmNjICovCi0gIGNsZWFyX3Bj b25fYXR0YWNoZWRfdG8gKCk7Ci0KICAgSEFORExFJiBoUGFyZW50ID0gY2gucGFyZW50OwogCiAg IHN5bmNfd2l0aF9wYXJlbnQgKCJhZnRlciBsb25nam1wIiwgdHJ1ZSk7CmRpZmYgLS1naXQgYS93 aW5zdXAvY3lnd2luL3NlbGVjdC5jYyBiL3dpbnN1cC9jeWd3aW4vc2VsZWN0LmNjCmluZGV4IDNm M2YzM2ZiNS4uOTNhY2RkODlhIDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL3NlbGVjdC5jYwor KysgYi93aW5zdXAvY3lnd2luL3NlbGVjdC5jYwpAQCAtMTIxMyw4ICsxMjEzLDcgQEAgdmVyaWZ5 X3R0eV9zbGF2ZSAoc2VsZWN0X3JlY29yZCAqbWUsIGZkX3NldCAqcmVhZGZkcywgZmRfc2V0ICp3 cml0ZWZkcywKIAkgICBmZF9zZXQgKmV4Y2VwdGZkcykKIHsKICAgZmhhbmRsZXJfcHR5X3NsYXZl ICpwdHlzID0gKGZoYW5kbGVyX3B0eV9zbGF2ZSAqKSBtZS0+Zmg7Ci0gIGlmIChtZS0+cmVhZF9z ZWxlY3RlZCAmJiAhcHR5cy0+dG9fYmVfcmVhZF9mcm9tX3Bjb24gKCkgJiYKLSAgICAgIElzRXZl bnRTaWduYWxsZWQgKHB0eXMtPmlucHV0X2F2YWlsYWJsZV9ldmVudCkpCisgIGlmIChtZS0+cmVh ZF9zZWxlY3RlZCAmJiBJc0V2ZW50U2lnbmFsbGVkIChwdHlzLT5pbnB1dF9hdmFpbGFibGVfZXZl bnQpKQogICAgIG1lLT5yZWFkX3JlYWR5ID0gdHJ1ZTsKICAgcmV0dXJuIHNldF9iaXRzIChtZSwg cmVhZGZkcywgd3JpdGVmZHMsIGV4Y2VwdGZkcyk7CiB9CkBAIC0xMjI3LDggKzEyMjYsNiBAQCBw ZWVrX3B0eV9zbGF2ZSAoc2VsZWN0X3JlY29yZCAqcywgYm9vbCBmcm9tX3NlbGVjdCkKICAgZmhh bmRsZXJfcHR5X3NsYXZlICpwdHlzID0gKGZoYW5kbGVyX3B0eV9zbGF2ZSAqKSBmaDsKIAogICBw dHlzLT5yZXNldF9zd2l0Y2hfdG9fcGNvbiAoKTsKLSAgaWYgKHB0eXMtPnRvX2JlX3JlYWRfZnJv bV9wY29uICgpKQotICAgIHB0eXMtPnVwZGF0ZV9wY29uX2lucHV0X3N0YXRlICh0cnVlKTsKIAog ICBpZiAocy0+cmVhZF9zZWxlY3RlZCkKICAgICB7CmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2lu L3NtYWxscHJpbnQuY2MgYi93aW5zdXAvY3lnd2luL3NtYWxscHJpbnQuY2MKaW5kZXggMjZkMzRk OWU0Li5mMjA4YTA1N2EgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vc21hbGxwcmludC5jYwor KysgYi93aW5zdXAvY3lnd2luL3NtYWxscHJpbnQuY2MKQEAgLTQwNSw3ICs0MDUsNiBAQCBzbWFs bF9wcmludGYgKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogICBjb3VudCA9IF9fc21hbGxfdnNwcmlu dGYgKGJ1ZiwgZm10LCBhcCk7CiAgIHZhX2VuZCAoYXApOwogCi0gIHNldF9pc2h5YnJpZF9hbmRf c3dpdGNoX3RvX3Bjb24gKEdldFN0ZEhhbmRsZSAoU1REX0VSUk9SX0hBTkRMRSkpOwogICBXcml0 ZUZpbGUgKEdldFN0ZEhhbmRsZSAoU1REX0VSUk9SX0hBTkRMRSksIGJ1ZiwgY291bnQsICZkb25l LCBOVUxMKTsKICAgRmx1c2hGaWxlQnVmZmVycyAoR2V0U3RkSGFuZGxlIChTVERfRVJST1JfSEFO RExFKSk7CiB9CkBAIC00MzIsNyArNDMxLDYgQEAgY29uc29sZV9wcmludGYgKGNvbnN0IGNoYXIg KmZtdCwgLi4uKQogICBjb3VudCA9IF9fc21hbGxfdnNwcmludGYgKGJ1ZiwgZm10LCBhcCk7CiAg IHZhX2VuZCAoYXApOwogCi0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGNvbnNv bGVfaGFuZGxlKTsKICAgV3JpdGVGaWxlIChjb25zb2xlX2hhbmRsZSwgYnVmLCBjb3VudCwgJmRv bmUsIE5VTEwpOwogICBGbHVzaEZpbGVCdWZmZXJzIChjb25zb2xlX2hhbmRsZSk7CiB9CmRpZmYg LS1naXQgYS93aW5zdXAvY3lnd2luL3NwYXduLmNjIGIvd2luc3VwL2N5Z3dpbi9zcGF3bi5jYwpp bmRleCAzZThjODM2N2EuLmEzMDcxODg0ZSAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9zcGF3 bi5jYworKysgYi93aW5zdXAvY3lnd2luL3NwYXduLmNjCkBAIC0xOTQsNiArMTk0LDI0IEBAIGhh bmRsZSAoaW50IGZkLCBib29sIHdyaXRpbmcpCiAgIHJldHVybiBoOwogfQogCitzdGF0aWMgYm9v bAoraXNfY29uc29sZV9hcHAgKFdDSEFSICpmaWxlbmFtZSkKK3sKKyAgSEFORExFIGg7CisgIGNv bnN0IGludCBpZF9vZmZzZXQgPSA5MjsKKyAgaCA9IENyZWF0ZUZpbGVXIChmaWxlbmFtZSwgR0VO RVJJQ19SRUFELCBGSUxFX1NIQVJFX1JFQUQsCisJCSAgTlVMTCwgT1BFTl9FWElTVElORywgMCwg TlVMTCk7CisgIGNoYXIgYnVmWzEwMjRdOworICBEV09SRCBuOworICBSZWFkRmlsZSAoaCwgYnVm LCBzaXplb2YgKGJ1ZiksICZuLCAwKTsKKyAgQ2xvc2VIYW5kbGUgKGgpOworICBjaGFyICpwID0g KGNoYXIgKikgbWVtbWVtIChidWYsIG4sICJQRVwwXDAiLCA0KTsKKyAgaWYgKHAgJiYgcCArIGlk X29mZnNldCA8PSBidWYgKyBuKQorICAgIHJldHVybiBwW2lkX29mZnNldF0gPT0gJ1wwMDMnOyAv KiAwMjogR1VJLCAwMzogY29uc29sZSAqLworICBlbHNlCisgICAgcmV0dXJuIGZhbHNlOworfQor CiBpbnQKIGlzY21kIChjb25zdCBjaGFyICphcmd2MCwgY29uc3QgY2hhciAqd2hhdCkKIHsKQEAg LTI1OSw4ICsyNzcsNiBAQCBjaGlsZF9pbmZvX3NwYXduOjp3b3JrZXIgKGNvbnN0IGNoYXIgKnBy b2dfYXJnLCBjb25zdCBjaGFyICpjb25zdCAqYXJndiwKIHsKICAgYm9vbCByYzsKICAgaW50IHJl cyA9IC0xOwotICBEV09SRCBwaWRfcmVzdG9yZSA9IDA7Ci0gIGJvb2wgYXR0YWNoX3RvX2NvbnNv bGUgPSBmYWxzZTsKICAgcGlkX3QgY3R0eV9wZ2lkID0gMDsKIAogICAvKiBTZWFyY2ggZm9yIENU VFkgYW5kIHJldHJpZXZlIGl0cyBQR0lEICovCkBAIC01ODAsOSArNTk2LDcgQEAgY2hpbGRfaW5m b19zcGF3bjo6d29ya2VyIChjb25zdCBjaGFyICpwcm9nX2FyZywgY29uc3QgY2hhciAqY29uc3Qg KmFyZ3YsCiAJCQkgUFJPQ0VTU19RVUVSWV9MSU1JVEVEX0lORk9STUFUSU9OKSkKIAlzYSA9ICZz ZWNfbm9uZV9uaWg7CiAKLSAgICAgIC8qIEF0dGFjaCB0byBwc2V1ZG8gY29uc29sZSBpZiBwdHkg c2FsdmUgaXMgdXNlZCAqLwotICAgICAgcGlkX3Jlc3RvcmUgPSBmaGFuZGxlcl9jb25zb2xlOjpn ZXRfY29uc29sZV9wcm9jZXNzX2lkCi0JKEdldEN1cnJlbnRQcm9jZXNzSWQgKCksIGZhbHNlKTsK KyAgICAgIGZoYW5kbGVyX3B0eV9zbGF2ZSAqcHR5c19wcmltYXJ5ID0gTlVMTDsKICAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgMzsgaSArKykKIAl7CiAJICBjb25zdCBpbnQgY2hrX29yZGVyW10g PSB7MSwgMCwgMn07CkBAIC01OTEsMjkgKzYwNSwxMSBAQCBjaGlsZF9pbmZvX3NwYXduOjp3b3Jr ZXIgKGNvbnN0IGNoYXIgKnByb2dfYXJnLCBjb25zdCBjaGFyICpjb25zdCAqYXJndiwKIAkgIGlm IChmaCAmJiBmaC0+Z2V0X21ham9yICgpID09IERFVl9QVFlTX01BSk9SKQogCSAgICB7CiAJICAg ICAgZmhhbmRsZXJfcHR5X3NsYXZlICpwdHlzID0gKGZoYW5kbGVyX3B0eV9zbGF2ZSAqKSBmaDsK LQkgICAgICBpZiAocHR5cy0+Z2V0X3BzZXVkb19jb25zb2xlICgpKQotCQl7Ci0JCSAgRFdPUkQg aGVscGVyX3Byb2Nlc3NfaWQgPSBwdHlzLT5nZXRfaGVscGVyX3Byb2Nlc3NfaWQgKCk7Ci0JCSAg ZGVidWdfcHJpbnRmICgiZm91bmQgYSBQVFkgc2xhdmUgJWQ6IGhlbHBlcl9QSUQ9JWQiLAotCQkJ CSAgICBmaC0+Z2V0X21pbm9yICgpLCBoZWxwZXJfcHJvY2Vzc19pZCk7Ci0JCSAgaWYgKGZoYW5k bGVyX2NvbnNvbGU6OmdldF9jb25zb2xlX3Byb2Nlc3NfaWQKLQkJCQkJICAgICAgKGhlbHBlcl9w cm9jZXNzX2lkLCB0cnVlKSkKLQkJICAgIC8qIEFscmVhZHkgYXR0YWNoZWQgKi8KLQkJICAgIGF0 dGFjaF90b19jb25zb2xlID0gdHJ1ZTsKLQkJICBlbHNlIGlmICghYXR0YWNoX3RvX2NvbnNvbGUp Ci0JCSAgICB7Ci0JCSAgICAgIEZyZWVDb25zb2xlICgpOwotCQkgICAgICBpZiAoQXR0YWNoQ29u c29sZSAoaGVscGVyX3Byb2Nlc3NfaWQpKQotCQkJYXR0YWNoX3RvX2NvbnNvbGUgPSB0cnVlOwot CQkgICAgfQotCQkgIHB0eXMtPmZpeHVwX2FmdGVyX2F0dGFjaCAoIWlzY3lnd2luICgpLCBmZCk7 Ci0JCSAgaWYgKG1vZGUgPT0gX1BfT1ZFUkxBWSkKLQkJICAgIHB0eXMtPnNldF9mcmVlY29uc29s ZV9vbl9jbG9zZSAoaXNjeWd3aW4gKCkpOwotCQl9CisJICAgICAgaWYgKHB0eXNfcHJpbWFyeSA9 PSBOVUxMKQorCQlwdHlzX3ByaW1hcnkgPSBwdHlzOwogCSAgICB9CiAJICBlbHNlIGlmIChmaCAm JiBmaC0+Z2V0X21ham9yICgpID09IERFVl9DT05TX01BSk9SKQogCSAgICB7Ci0JICAgICAgYXR0 YWNoX3RvX2NvbnNvbGUgPSB0cnVlOwogCSAgICAgIGZoYW5kbGVyX2NvbnNvbGUgKmNvbnMgPSAo ZmhhbmRsZXJfY29uc29sZSAqKSBmaDsKIAkgICAgICBpZiAod2luY2FwLmhhc19jb25fMjRiaXRf Y29sb3JzICgpICYmICFpc2N5Z3dpbiAoKSkKIAkJaWYgKGZkID09IDEgfHwgZmQgPT0gMikKQEAg LTYzMiw2ICs2MjgsMTggQEAgY2hpbGRfaW5mb19zcGF3bjo6d29ya2VyIChjb25zdCBjaGFyICpw cm9nX2FyZywgY29uc3QgY2hhciAqY29uc3QgKmFyZ3YsCiAgICAgICBpZiAoIWlzY3lnd2luICgp KQogCWluaXRfY29uc29sZV9oYW5kbGVyIChteXNlbGYtPmN0dHkgPiAwKTsKIAorICAgICAgYm9v bCBlbmFibGVfcGNvbiA9IGZhbHNlOworICAgICAgU1RBUlRVUElORk9FWFcgc2lfcGNvbjsKKyAg ICAgIFplcm9NZW1vcnkgKCZzaV9wY29uLCBzaXplb2YgKHNpX3Bjb24pKTsKKyAgICAgIFNUQVJU VVBJTkZPVyAqc2lfdG1wID0gJnNpOworICAgICAgaWYgKCFpc2N5Z3dpbiAoKSAmJiBwdHlzX3By aW1hcnkgJiYgaXNfY29uc29sZV9hcHAgKHJ1bnBhdGgpKQorCWlmIChwdHlzX3ByaW1hcnktPnNl dHVwX3BzZXVkb2NvbnNvbGUgKCZzaV9wY29uKSkKKwkgIHsKKwkgICAgY19mbGFncyB8PSBFWFRF TkRFRF9TVEFSVFVQSU5GT19QUkVTRU5UOworCSAgICBzaV90bXAgPSAmc2lfcGNvbi5TdGFydHVw SW5mbzsKKwkgICAgZW5hYmxlX3Bjb24gPSB0cnVlOworCSAgfQorCiAgICAgbG9vcDoKICAgICAg IC8qIFdoZW4gcnVpZCAhPSBldWlkIHdlIGNyZWF0ZSB0aGUgbmV3IHByb2Nlc3MgdW5kZXIgdGhl IGN1cnJlbnQgb3JpZ2luYWwKIAkgYWNjb3VudCBhbmQgaW1wZXJzb25hdGUgaW4gY2hpbGQsIHRo aXMgd2F5IG1haW50YWluaW5nIHRoZSBkaWZmZXJlbnQKQEAgLTY2MCw3ICs2NjgsNyBAQCBjaGls ZF9pbmZvX3NwYXduOjp3b3JrZXIgKGNvbnN0IGNoYXIgKnByb2dfYXJnLCBjb25zdCBjaGFyICpj b25zdCAqYXJndiwKIAkJCSAgICAgICBjX2ZsYWdzLAogCQkJICAgICAgIGVudmJsb2NrLAkvKiBl bnZpcm9ubWVudCAqLwogCQkJICAgICAgIE5VTEwsCi0JCQkgICAgICAgJnNpLAorCQkJICAgICAg IHNpX3RtcCwKIAkJCSAgICAgICAmcGkpOwogCX0KICAgICAgIGVsc2UKQEAgLTcxNCw3ICs3MjIs NyBAQCBjaGlsZF9pbmZvX3NwYXduOjp3b3JrZXIgKGNvbnN0IGNoYXIgKnByb2dfYXJnLCBjb25z dCBjaGFyICpjb25zdCAqYXJndiwKIAkJCSAgICAgICBjX2ZsYWdzLAogCQkJICAgICAgIGVudmJs b2NrLAkvKiBlbnZpcm9ubWVudCAqLwogCQkJICAgICAgIE5VTEwsCi0JCQkgICAgICAgJnNpLAor CQkJICAgICAgIHNpX3RtcCwKIAkJCSAgICAgICAmcGkpOwogCSAgaWYgKGh3c3QpCiAJICAgIHsK QEAgLTcyNyw2ICs3MzUsMTEgQEAgY2hpbGRfaW5mb19zcGF3bjo6d29ya2VyIChjb25zdCBjaGFy ICpwcm9nX2FyZywgY29uc3QgY2hhciAqY29uc3QgKmFyZ3YsCiAJICAgICAgQ2xvc2VEZXNrdG9w IChoZHNrKTsKIAkgICAgfQogCX0KKyAgICAgIGlmIChlbmFibGVfcGNvbikKKwl7CisJICBEZWxl dGVQcm9jVGhyZWFkQXR0cmlidXRlTGlzdCAoc2lfcGNvbi5scEF0dHJpYnV0ZUxpc3QpOworCSAg SGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBzaV9wY29uLmxwQXR0cmlidXRlTGlzdCk7 CisJfQogCiAgICAgICBpZiAobW9kZSAhPSBfUF9PVkVSTEFZKQogCVNldEhhbmRsZUluZm9ybWF0 aW9uIChteV93cl9wcm9jX3BpcGUsIEhBTkRMRV9GTEFHX0lOSEVSSVQsCkBAIC04OTcsNiArOTEw LDExIEBAIGNoaWxkX2luZm9fc3Bhd246OndvcmtlciAoY29uc3QgY2hhciAqcHJvZ19hcmcsIGNv bnN0IGNoYXIgKmNvbnN0ICphcmd2LAogCQkgICYmIFdhaXRGb3JTaW5nbGVPYmplY3QgKHBpLmhQ cm9jZXNzLCAwKSA9PSBXQUlUX1RJTUVPVVQpCiAJCXdhaXRfZm9yX215c2VsZiAoKTsKIAkgICAg fQorCSAgaWYgKGVuYWJsZV9wY29uKQorCSAgICB7CisJICAgICAgV2FpdEZvclNpbmdsZU9iamVj dCAocGkuaFByb2Nlc3MsIElORklOSVRFKTsKKwkgICAgICBwdHlzX3ByaW1hcnktPmNsb3NlX3Bz ZXVkb2NvbnNvbGUgKCk7CisJICAgIH0KIAkgIG15c2VsZi5leGl0IChFWElUQ09ERV9OT1NFVCk7 CiAJICBicmVhazsKIAljYXNlIF9QX1dBSVQ6CkBAIC05MzAsMjEgKzk0OCw2IEBAIGNoaWxkX2lu Zm9fc3Bhd246OndvcmtlciAoY29uc3QgY2hhciAqcHJvZ19hcmcsIGNvbnN0IGNoYXIgKmNvbnN0 ICphcmd2LAogICBpZiAoZW52YmxvY2spCiAgICAgZnJlZSAoZW52YmxvY2spOwogCi0gIGlmIChh dHRhY2hfdG9fY29uc29sZSAmJiBwaWRfcmVzdG9yZSkKLSAgICB7Ci0gICAgICBGcmVlQ29uc29s ZSAoKTsKLSAgICAgIEF0dGFjaENvbnNvbGUgKHBpZF9yZXN0b3JlKTsKLSAgICAgIGN5Z2hlYXBf ZmRlbnVtIGNmZCAoZmFsc2UpOwotICAgICAgaW50IGZkOwotICAgICAgd2hpbGUgKChmZCA9IGNm ZC5uZXh0ICgpKSA+PSAwKQotCWlmIChjZmQtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZU19NQUpP UikKLQkgIHsKLQkgICAgZmhhbmRsZXJfcHR5X3NsYXZlICpwdHlzID0KLQkgICAgICAoZmhhbmRs ZXJfcHR5X3NsYXZlICopIChmaGFuZGxlcl9iYXNlICopIGNmZDsKLQkgICAgcHR5cy0+Zml4dXBf YWZ0ZXJfYXR0YWNoIChmYWxzZSwgZmQpOwotCSAgfQotICAgIH0KLQogICByZXR1cm4gKGludCkg cmVzOwogfQogCmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL3N0cmFjZS5jYyBiL3dpbnN1cC9j eWd3aW4vc3RyYWNlLmNjCmluZGV4IGYwYWVmM2EzNi4uMzVmOGE1OWFlIDEwMDY0NAotLS0gYS93 aW5zdXAvY3lnd2luL3N0cmFjZS5jYworKysgYi93aW5zdXAvY3lnd2luL3N0cmFjZS5jYwpAQCAt MjY0LDcgKzI2NCw2IEBAIHN0cmFjZTo6dnBybnRmICh1bnNpZ25lZCBjYXRlZ29yeSwgY29uc3Qg Y2hhciAqZnVuYywgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwCiAgIGlmIChjYXRlZ29yeSAm IF9TVFJBQ0VfU1lTVEVNKQogICAgIHsKICAgICAgIERXT1JEIGRvbmU7Ci0gICAgICBzZXRfaXNo eWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChHZXRTdGRIYW5kbGUgKFNURF9FUlJPUl9IQU5ETEUp KTsKICAgICAgIFdyaXRlRmlsZSAoR2V0U3RkSGFuZGxlIChTVERfRVJST1JfSEFORExFKSwgYnVm LCBsZW4sICZkb25lLCAwKTsKICAgICAgIEZsdXNoRmlsZUJ1ZmZlcnMgKEdldFN0ZEhhbmRsZSAo U1REX0VSUk9SX0hBTkRMRSkpOwogICAgICAgLyogTWFrZSBzdXJlIHRoYXQgdGhlIG1lc3NhZ2Ug c2hvd3MgdXAgb24gdGhlIHNjcmVlbiwgdG9vLCBzaW5jZSB0aGlzIGlzCkBAIC0yNzYsNyArMjc1 LDYgQEAgc3RyYWNlOjp2cHJudGYgKHVuc2lnbmVkIGNhdGVnb3J5LCBjb25zdCBjaGFyICpmdW5j LCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXAKIAkJCQkgJnNlY19ub25lLCBPUEVOX0VYSVNU SU5HLCAwLCAwKTsKIAkgIGlmIChoICE9IElOVkFMSURfSEFORExFX1ZBTFVFKQogCSAgICB7Ci0J ICAgICAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7CiAJICAgICAgV3JpdGVG aWxlIChoLCBidWYsIGxlbiwgJmRvbmUsIDApOwogCSAgICAgIENsb3NlSGFuZGxlIChoKTsKIAkg ICAgfQpkaWZmIC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi90dHkuY2MgYi93aW5zdXAvY3lnd2luL3R0 eS5jYwppbmRleCA0Y2I2OGY3NzYuLmQ2MGYyNzU0NSAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dp bi90dHkuY2MKKysrIGIvd2luc3VwL2N5Z3dpbi90dHkuY2MKQEAgLTIzNCwyMCArMjM0LDE0IEBA IHR0eTo6aW5pdCAoKQogICB3YXNfb3BlbmVkID0gZmFsc2U7CiAgIG1hc3Rlcl9waWQgPSAwOwog ICBpc19jb25zb2xlID0gZmFsc2U7Ci0gIGF0dGFjaF9wY29uX2luX2ZvcmsgPSBmYWxzZTsKLSAg aF9wc2V1ZG9fY29uc29sZSA9IE5VTEw7CiAgIGNvbHVtbiA9IDA7CisgIGhfcHNldWRvX2NvbnNv bGUgPSBOVUxMOwogICBzd2l0Y2hfdG9fcGNvbl9pbiA9IGZhbHNlOwotICBzd2l0Y2hfdG9fcGNv bl9vdXQgPSBmYWxzZTsKLSAgc2NyZWVuX2FsdGVybmF0ZWQgPSBmYWxzZTsKICAgbWFza19zd2l0 Y2hfdG9fcGNvbl9pbiA9IGZhbHNlOwogICBwY29uX3BpZCA9IDA7CiAgIHRlcm1fY29kZV9wYWdl ID0gMDsKLSAgbmVlZF9yZWRyYXdfc2NyZWVuID0gdHJ1ZTsKICAgcGNvbl9sYXN0X3RpbWUgPSAw OwotICBwY29uX2luX2VtcHR5ID0gdHJ1ZTsKLSAgcmVxX3RyYW5zZmVyX2lucHV0X3RvX3Bjb24g PSBmYWxzZTsKLSAgcmVxX2ZsdXNoX3Bjb25faW5wdXQgPSBmYWxzZTsKKyAgcGNvbl9zdGFydCA9 IGZhbHNlOwogfQogCiBIQU5ETEUKQEAgLTI5MywxNiArMjg3LDYgQEAgdHR5X21pbjo6dHR5bmFt ZSAoKQogICByZXR1cm4gZC5uYW1lICgpOwogfQogCi12b2lkCi10dHk6OnNldF9zd2l0Y2hfdG9f cGNvbl9vdXQgKGJvb2wgdikKLXsKLSAgaWYgKHN3aXRjaF90b19wY29uX291dCAhPSB2KQotICAg IHsKLSAgICAgIHdhaXRfcGNvbl9md2QgKCk7Ci0gICAgICBzd2l0Y2hfdG9fcGNvbl9vdXQgPSB2 OwotICAgIH0KLX0KLQogdm9pZAogdHR5Ojp3YWl0X3Bjb25fZndkICh2b2lkKQogewpkaWZmIC0t Z2l0IGEvd2luc3VwL2N5Z3dpbi90dHkuaCBiL3dpbnN1cC9jeWd3aW4vdHR5LmgKaW5kZXggOTIw ZTMyYjE2Li5jNDkxZDM4OTEgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vdHR5LmgKKysrIGIv d2luc3VwL2N5Z3dpbi90dHkuaApAQCAtOTQsMjEgKzk0LDEzIEBAIHByaXZhdGU6CiAgIEhBTkRM RSBfdG9fbWFzdGVyOwogICBIQU5ETEUgX3RvX21hc3Rlcl9jeWc7CiAgIEhQQ09OIGhfcHNldWRv X2NvbnNvbGU7Ci0gIEhBTkRMRSBoX2hlbHBlcl9wcm9jZXNzOwotICBEV09SRCBoZWxwZXJfcHJv Y2Vzc19pZDsKLSAgSEFORExFIGhfaGVscGVyX2dvb2RieWU7Ci0gIGJvb2wgYXR0YWNoX3Bjb25f aW5fZm9yazsKKyAgYm9vbCBwY29uX3N0YXJ0OwogICBib29sIHN3aXRjaF90b19wY29uX2luOwot ICBib29sIHN3aXRjaF90b19wY29uX291dDsKLSAgYm9vbCBzY3JlZW5fYWx0ZXJuYXRlZDsKICAg Ym9vbCBtYXNrX3N3aXRjaF90b19wY29uX2luOwogICBwaWRfdCBwY29uX3BpZDsKICAgVUlOVCB0 ZXJtX2NvZGVfcGFnZTsKLSAgYm9vbCBuZWVkX3JlZHJhd19zY3JlZW47CiAgIERXT1JEIHBjb25f bGFzdF90aW1lOwotICBib29sIHBjb25faW5fZW1wdHk7Ci0gIGJvb2wgcmVxX3RyYW5zZmVyX2lu cHV0X3RvX3Bjb247Ci0gIGJvb2wgcmVxX2ZsdXNoX3Bjb25faW5wdXQ7CisgIEhBTkRMRSBoX3Bj b25fd3JpdGVfcGlwZTsKIAogcHVibGljOgogICBIQU5ETEUgZnJvbV9tYXN0ZXIgKCkgY29uc3Qg eyByZXR1cm4gX2Zyb21fbWFzdGVyOyB9CkBAIC0xMzgsNyArMTMwLDYgQEAgcHVibGljOgogICB2 b2lkIHNldF9tYXN0ZXJfY3RsX2Nsb3NlZCAoKSB7bWFzdGVyX3BpZCA9IC0xO30KICAgc3RhdGlj IHZvaWQgX19zdGRjYWxsIGNyZWF0ZV9tYXN0ZXIgKGludCk7CiAgIHN0YXRpYyB2b2lkIF9fc3Rk Y2FsbCBpbml0X3Nlc3Npb24gKCk7Ci0gIHZvaWQgc2V0X3N3aXRjaF90b19wY29uX291dCAoYm9v bCB2KTsKICAgdm9pZCB3YWl0X3Bjb25fZndkICh2b2lkKTsKICAgZnJpZW5kIGNsYXNzIGZoYW5k bGVyX3B0eV9jb21tb247CiAgIGZyaWVuZCBjbGFzcyBmaGFuZGxlcl9wdHlfbWFzdGVyOwpkaWZm IC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi93aW5zdXAuaCBiL3dpbnN1cC9jeWd3aW4vd2luc3VwLmgK aW5kZXggZmZmN2QxOGYzLi40NThmYjJhMjMgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vd2lu c3VwLmgKKysrIGIvd2luc3VwL2N5Z3dpbi93aW5zdXAuaApAQCAtMjIyLDkgKzIyMiw2IEBAIHZv aWQgaW5pdF9jb25zb2xlX2hhbmRsZXIgKGJvb2wpOwogCiBleHRlcm4gYm9vbCB3c29ja19zdGFy dGVkOwogCi0vKiBQVFkgcmVsYXRlZCAqLwotdm9pZCBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90 b19wY29uIChIQU5ETEUgaCk7Ci0KIC8qIFByaW50ZiB0eXBlIGZ1bmN0aW9ucyAqLwogZXh0ZXJu ICJDIiB2b2lkIHZhcGlfZmF0YWwgKGNvbnN0IGNoYXIgKiwgdmFfbGlzdCBhcCkgX19hdHRyaWJ1 dGVfXyAoKG5vcmV0dXJuKSk7CiBleHRlcm4gIkMiIHZvaWQgYXBpX2ZhdGFsIChjb25zdCBjaGFy ICosIC4uLikgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7Ci0tIAoyLjI3LjAKCg== --Multipart=_Fri__24_Jul_2020_20_22_19_+0900_0GtYkGoOS.un96Ed--