From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C43A2C43334 for ; Sun, 10 Jul 2022 15:34:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:References:Cc:To:From:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=OroVYmuBRxX5UI/E6R+/DSw6ooOHCC+07n9p3tRUNLg=; b=cPBPUx6bQw6asS B5zU7Xg0TztrK/FUCTBWB54JQomonOLJYLymw/VcILmkHpwDAGyXeRiu+IYRlcwvN8qs8+UNIS6KZ 0ja397Yk2fBb6QsgwbotAC3ZQAU9wvJozhU0TXk8cA3qZAYxgy2eWYih6GzlG3rdgmF8dASyOfg9Y 4ToHXPDROdStDksTQ2m0Cv+hw84CtoPNwlSVDnISdE+4CKTs9qYWUFL+90XWi/RZ8Z8yHUZQqaTgb 2xTcac4xnVbKSC3h9W+ye/jLivpijI3guUrktDAnQ5Y96IWPOMCUTZvM3waXrEyb3sEo3yTxkvycy VaGFAbtWlQSmqGWFnhlg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oAYvw-00CGzR-6d; Sun, 10 Jul 2022 15:33:20 +0000 Received: from out30-131.freemail.mail.aliyun.com ([115.124.30.131]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oAYvq-00CGwz-Bj for linux-arm-kernel@lists.infradead.org; Sun, 10 Jul 2022 15:33:18 +0000 X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R821e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018046049;MF=guanghuifeng@linux.alibaba.com;NM=1;PH=DS;RN=21;SR=0;TI=SMTPD_---0VIrnN2w_1657467183; Received: from 30.32.64.246(mailfrom:guanghuifeng@linux.alibaba.com fp:SMTPD_---0VIrnN2w_1657467183) by smtp.aliyun-inc.com; Sun, 10 Jul 2022 23:33:05 +0800 Message-ID: Date: Sun, 10 Jul 2022 23:33:02 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: [PATCH v5] arm64: mm: fix linear mem mapping access performance degradation From: "guanghui.fgh" To: baolin.wang@linux.alibaba.com, catalin.marinas@arm.com, will@kernel.org, akpm@linux-foundation.org, david@redhat.com, jianyong.wu@arm.com, james.morse@arm.com, quic_qiancai@quicinc.com, christophe.leroy@csgroup.eu, jonathan@marek.ca, mark.rutland@arm.com, thunder.leizhen@huawei.com, anshuman.khandual@arm.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, rppt@kernel.org, geert+renesas@glider.be, ardb@kernel.org, linux-mm@kvack.org, yaohongbo@linux.alibaba.com Cc: alikernel-developer@linux.alibaba.com References: <1657460657-25698-1-git-send-email-guanghuifeng@linux.alibaba.com> In-Reply-To: <1657460657-25698-1-git-send-email-guanghuifeng@linux.alibaba.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220710_083315_468599_C4B55F3E X-CRM114-Status: GOOD ( 35.07 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SW4gc2hvcnQsIHRoaXMgcGF0aCB3b3JrOgoKMS5CZWZvcmUgZG9pbmcgd29yayBmb3IgcmVidWls aW5nIGNyYXNoa2VybmVsIG1lbSwgdGhlIHBnZCBpcyAKc3dhcHBlcl9wZ19kaXIgaW4gW1tbdHRi cjFdXV0KCjIuQ2hhbmdlIHRoZSBbW1t0dGJyMF1dXXRvIHVzZSBpZG1hcF9wZ19kaXIgcGdkCgoz LlRoZSBbW1tpZG1hcF9jcHVfcmVwbGFjZV90dGJyMV93aXRoX2ZsdXNoX3RsYl1dXSBhcmUgbWFw cGVkIFtbW29ubHldXV0gCndpdGggaWRtYXBfcGdfZGlyIG1hcHBpbmcgaW4gW1tbdHRicjBdXV0K CjQuVGhlIFtbW2lkbWFwX2NwdV9yZXBsYWNlX3R0YnIxX3dpdGhfZmx1c2hfdGxiXV1dIHdpbGwg Zmx1c2ggdGxiIGFsbCwgCnN3aXRjaCBbW1t0dGJyMV1dXSB0byB1c2UgaW5pdF9wZ19kaXIgcGdk KGFuZCBmbHVzaCB0bGIgYWxsIGFnYWluKS4KVGhlcmUgaXMgbm8gdGxiIGNvbmZsaWN0IHRvIHN3 YXBwZXJfcGdfZGlyLgpUaGVyZSBpcyBubyB0bGIgY2FjaGUgZm9yIHN3YXBwZXJfcGdfZGlyLgoK NS5Xb3Jpbmcgd2l0aCBpbml0X3BnX2RpciBwZ2QgdG8gYWNjZXNzIHN3YXBwZXJfcGdfZGlyIHBh Z2V0YWJsZSB3aXRoIApmaXggbWFwcGluZy4gQW5kIG1vZGlmeSBjcmFzaGtlcm5lbCBtYXBwaW5n IGluIHRoZSBzd2FwcGVyX3BnX2RpciAKd2l0aG91dCBhbnkgdGxiIGNvbmZsaWN0IGFuZCBmbHVz aC4KCjYuV2hlbiBmaW5pc2hpbmcgdGhlIHdvcmssIHN3aXRjaCB0dGJyMSBwZ2QgdG8gdGhlIG9y aWdpbiBzd2FwcGVyX3BnX2RpciAKd2l0aCBjcHVfcmVwbGFjZV90dGJyMSBmdW5jdGlvbihzaW1p bGFyIHRvIHRoZSBhYm92ZSkuCgrlnKggMjAyMi83LzEwIDIxOjQ0LCBHdWFuZ2h1aSBGZW5nIOWG memBkzoKPiBUaGUgYXJtNjQgY2FuIGJ1aWxkIDJNLzFHIGJsb2NrL3NlY3RpaW9uIG1hcHBpbmcu IFdoZW4gdXNpbmcgRE1BL0RNQTMyIHpvbmUKPiAoZW5hYmxlIGNyYXNoa2VybmVsLCBkaXNhYmxl IHJvZGF0YSBmdWxsLCBkaXNhYmxlIGtmZW5jZSksIHRoZSBtZW1fbWFwIHdpbGwKPiB1c2Ugbm9u IGJsb2NrL3NlY3Rpb24gbWFwcGluZyhmb3IgY3Jhc2hrZXJuZWwgcmVxdWlyZXMgdG8gc2hyaW5r IHRoZSByZWdpb24KPiBpbiBwYWdlIGdyYW51bGFyaXR5KS4gQnV0IGl0IHdpbGwgZGVncmFkZSBw ZXJmb3JtYW5jZSB3aGVuIGRvaW5nIGxhcmdpbmcKPiBjb250aW51b3VzIG1lbSBhY2Nlc3MgaW4g a2VybmVsKG1lbWNweS9tZW1tb3ZlLCBldGMpLgo+IAo+IFRoZXJlIGFyZSBtYW55IGNoYW5nZXMg YW5kIGRpc2N1c3Npb25zOgo+IGNvbW1pdCAwMzE0OTU2MzViNDYgKCJhcm02NDogRG8gbm90IGRl ZmVyIHJlc2VydmVfY3Jhc2hrZXJuZWwoKSBmb3IKPiBwbGF0Zm9ybXMgd2l0aCBubyBETUEgbWVt b3J5IHpvbmVzIikKPiBjb21taXQgMGEzMGM1MzU3M2IwICgiYXJtNjQ6IG1tOiBNb3ZlIHJlc2Vy dmVfY3Jhc2hrZXJuZWwoKSBpbnRvCj4gbWVtX2luaXQoKSIpCj4gY29tbWl0IDI2ODcyNzVhNTg0 MyAoImFybTY0OiBGb3JjZSBOT19CTE9DS19NQVBQSU5HUyBpZiBjcmFzaGtlcm5lbAo+IHJlc2Vy dmF0aW9uIGlzIHJlcXVpcmVkIikKPiAKPiBUaGlzIHBhdGNoIGNoYW5nZXMgbWVtX21hcCB0byB1 c2UgYmxvY2svc2VjdGlvbiBtYXBwaW5nIHdpdGggY3Jhc2hrZXJuZWwuCj4gRmlyc3RseSwgZG8g YmxvY2svc2VjdGlvbiBtYXBwaW5nKG5vcm1hbGx5IDJNIG9yIDFHKSBmb3IgYWxsIGF2YWlsIG1l bSBhdAo+IG1lbV9tYXAsIHJlc2VydmUgY3Jhc2hrZXJuZWwgbWVtb3J5LiBBbmQgdGhlbiB3YWxr aW5nIHBhZ2V0YWJsZSB0byBzcGxpdAo+IGJsb2NrL3NlY3Rpb24gbWFwcGluZyB0byBub24gYmxv Y2svc2VjdGlvbiBtYXBwaW5nKG5vcm1hbGx5IDRLKSBbW1tvbmx5XV1dCj4gZm9yIGNyYXNoa2Vy bmVsIG1lbS4gU28gdGhlIGxpbmVhciBtZW0gbWFwcGluZyB1c2UgYmxvY2svc2VjdGlvbiBtYXBw aW5nCj4gYXMgbW9yZSBhcyBwb3NzaWJsZS4gV2Ugd2lsbCByZWR1Y2UgdGhlIGNwdSBkVExCIG1p c3MgY29uc3BpY3VvdXNseSwgYW5kCj4gYWNjZWxlcmF0ZSBtZW0gYWNjZXNzIGFib3V0IDEwLTIw JSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4KPiAKPiBJIGhhdmUgdGVzdGVkIGl0IHdpdGggcGZ0 KFBhZ2UgRmF1bHQgVGVzdCkgYW5kIGZpbywgb2J0YWluZWQgZ3JlYXQKPiBwZXJmb3JtYWNlIGlt cHJvdmVtZW50Lgo+IAo+IEZvciBmaW8gdGVzdDoKPiAxLnByZXBhcmUgcmFtZGlzawo+ICAgIG1v ZHByb2JlIC1yIGJyZAo+ICAgIG1vZHByb2JlIGJyZCByZF9ucj0xIHJkX3NpemU9NjcxMDg4NjQK PiAgICBkbXNldHVwIHJlbW92ZV9hbGwKPiAgICB3aXBlZnMgLWEgLS1mb3JjZSAvZGV2L3JhbTAK PiAgICBta2ZzIC10IGV4dDQgLUUgbGF6eV9pdGFibGVfaW5pdD0wLGxhenlfam91cm5hbF9pbml0 PTAgLXEgLUYgL2Rldi9yYW0wCj4gICAgbWtkaXIgLXAgL2ZzL3JhbTAKPiAgICBtb3VudCAtdCBl eHQ0IC9kZXYvcmFtMCAvZnMvcmFtMAo+IAo+IDIucHJlcGFyZSBmaW8gcGFyZW1ldGVyIGluIHgu ZmlvIGZpbGU6Cj4gW2dsb2JhbF0KPiBicz00awo+IGlvZW5naW5lPXBzeW5jCj4gaW9kZXB0aD0x MjgKPiBzaXplPTMyRwo+IGRpcmVjdD0xCj4gaW52YWxpZGF0ZT0xCj4gZ3JvdXBfcmVwb3J0aW5n Cj4gdGhyZWFkPTEKPiBydz1yZWFkCj4gZGlyZWN0b3J5PS9mcy9yYW0wCj4gbnVtam9icz0xCj4g Cj4gW3Rhc2tfMF0KPiBjcHVzX2FsbG93ZWQ9MTYKPiBzdG9uZXdhbGw9MQo+IAo+IDMucnVuIHRl c3RjYXNlOgo+IHBlcmYgc3RhdCAtZSBkVExCLWxvYWQtbWlzc2VzIGZpbyB4LmZpbwo+IAo+IDQu Y29udHJhc3QKPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAJCQl3aXRob3V0IHBhdGNoCQl3 aXRoIHBhdGNoCj4gZmlvIFJFQUQJCWFnZ3JiPTE0OTMuMk1CL3MJYWdncmI9MTc3NS4zTUIvcwo+ IGRUTEItbG9hZC1taXNzZXMJMSw4MTgsMzIwLDY5MwkJNDM4LDcyOSw3NzQKPiB0aW1lIGVsYXBz ZWQocykJCTcwLjUwMDMyNjQzNAkJNjIuODc3MzE2NDA4Cj4gdXNlcihzKQkJCTE1LjkyNjMzMjAw MAkJMTUuNjg0NzIxMDAwCj4gc3lzKHMpCQkJNTQuMjExOTM5MDAwCQk0Ny4wNDYxNjUwMDAKPiAK PiA1LmNvbmNsdXNpb24KPiBVc2luZyB0aGlzIHBhdGNoIHdpbGwgcmVkdWNlIGRUTEIgbWlzc2Vz IGFuZCBpbXByb3ZlIHBlcmZvcm1hY2UgZ3JlYXRseS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBHdWFu Z2h1aSBGZW5nIDxndWFuZ2h1aWZlbmdAbGludXguYWxpYmFiYS5jb20+Cj4gLS0tCj4gICBhcmNo L2FybTY0L2luY2x1ZGUvYXNtL21tdS5oICAgICAgICAgfCAgIDEgKwo+ICAgYXJjaC9hcm02NC9p bmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIHwgIDI4ICsrKysKPiAgIGFyY2gvYXJtNjQvbW0vaW5p dC5jICAgICAgICAgICAgICAgICB8ICAgOCArLQo+ICAgYXJjaC9hcm02NC9tbS9tbXUuYyAgICAg ICAgICAgICAgICAgIHwgMzA1ICsrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCj4g ICBhcmNoL2FybTY0L21tL3Byb2MuUyAgICAgICAgICAgICAgICAgfCAgMTkgKysrCj4gICA1IGZp bGVzIGNoYW5nZWQsIDI2NyBpbnNlcnRpb25zKCspLCA5NCBkZWxldGlvbnMoLSkKPiAKPiBkaWZm IC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaCBiL2FyY2gvYXJtNjQvaW5jbHVk ZS9hc20vbW11LmgKPiBpbmRleCA0OGY4NDY2Li4xYTQ2YjgxIDEwMDY0NAo+IC0tLSBhL2FyY2gv YXJtNjQvaW5jbHVkZS9hc20vbW11LmgKPiArKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21t dS5oCj4gQEAgLTYzLDYgKzYzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGFybTY0X2tlcm5lbF91 bm1hcHBlZF9hdF9lbDAodm9pZCkKPiAgIGV4dGVybiB2b2lkIGFybTY0X21lbWJsb2NrX2luaXQo dm9pZCk7Cj4gICBleHRlcm4gdm9pZCBwYWdpbmdfaW5pdCh2b2lkKTsKPiAgIGV4dGVybiB2b2lk IGJvb3RtZW1faW5pdCh2b2lkKTsKPiArZXh0ZXJuIHZvaWQgbWFwX2NyYXNoa2VybmVsKHZvaWQp Owo+ICAgZXh0ZXJuIHZvaWQgX19pb21lbSAqZWFybHlfaW9fbWFwKHBoeXNfYWRkcl90IHBoeXMs IHVuc2lnbmVkIGxvbmcgdmlydCk7Cj4gICBleHRlcm4gdm9pZCBpbml0X21lbV9wZ3Byb3Qodm9p ZCk7Cj4gICBleHRlcm4gdm9pZCBjcmVhdGVfcGdkX21hcHBpbmcoc3RydWN0IG1tX3N0cnVjdCAq bW0sIHBoeXNfYWRkcl90IHBoeXMsCj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9h c20vbW11X2NvbnRleHQuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAo+ IGluZGV4IDY3NzA2NjcuLjEwZGZmZDQgMTAwNjQ0Cj4gLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRl L2FzbS9tbXVfY29udGV4dC5oCj4gKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXVfY29u dGV4dC5oCj4gQEAgLTEzOSw2ICsxMzksMzQgQEAgc3RhdGljIGlubGluZSB2b2lkIGNwdV9pbnN0 YWxsX3R0YnIwKHBoeXNfYWRkcl90IHR0YnIwLCB1bnNpZ25lZCBsb25nIHQwc3opCj4gICAJaXNi KCk7Cj4gICB9Cj4gICAKPiArc3RhdGljIGlubGluZSB2b2lkIF9fbm9jZmkgY3B1X3JlcGxhY2Vf dHRicjFfd2l0aF9waHlzKHBoeXNfYWRkcl90IHR0YnIxKQo+ICt7Cj4gKwl0eXBlZGVmIHZvaWQg KHR0YnJfcmVwbGFjZV9mdW5jKShwaHlzX2FkZHJfdCk7Cj4gKwlleHRlcm4gdHRicl9yZXBsYWNl X2Z1bmMgaWRtYXBfY3B1X3JlcGxhY2VfdHRicjFfd2l0aF9mbHVzaF90bGI7Cj4gKwl0dGJyX3Jl cGxhY2VfZnVuYyAqcmVwbGFjZV9waHlzOwo+ICsKPiArCS8qIHBoeXNfdG9fdHRicigpIHplcm9z IGxvd2VyIDIgYml0cyBvZiB0dGJyIHdpdGggNTItYml0IFBBICovCj4gKwl0dGJyMSA9IHBoeXNf dG9fdHRicih0dGJyMSk7Cj4gKwo+ICsJaWYgKHN5c3RlbV9zdXBwb3J0c19jbnAoKSkgewo+ICsJ CS8qCj4gKwkJICogY3B1X3JlcGxhY2VfdHRicjEoKSBpcyB1c2VkIHdoZW4gdGhlcmUncyBhIGJv b3QgQ1BVCj4gKwkJICogdXAgKGkuZS4gY3B1ZmVhdHVyZSBmcmFtZXdvcmsgaXMgbm90IHVwIHll dCkgYW5kCj4gKwkJICogbGF0dGVyIG9ubHkgd2hlbiB3ZSBlbmFibGUgQ05QIHZpYSBjcHVmZWF0 dXJlJ3MKPiArCQkgKiBlbmFibGUoKSBjYWxsYmFjay4KPiArCQkgKiBBbHNvIHdlIHJlbHkgb24g dGhlIGNwdV9od2NhcCBiaXQgYmVpbmcgc2V0IGJlZm9yZQo+ICsJCSAqIGNhbGxpbmcgdGhlIGVu YWJsZSgpIGZ1bmN0aW9uLgo+ICsJCSAqLwo+ICsJCXR0YnIxIHw9IFRUQlJfQ05QX0JJVDsKPiAr CX0KPiArCj4gKwlyZXBsYWNlX3BoeXMgPSAodm9pZCAqKV9fcGFfc3ltYm9sKGZ1bmN0aW9uX25v Y2ZpKGlkbWFwX2NwdV9yZXBsYWNlX3R0YnIxX3dpdGhfZmx1c2hfdGxiKSk7Cj4gKwo+ICsJY3B1 X2luc3RhbGxfaWRtYXAoKTsKPiArCXJlcGxhY2VfcGh5cyh0dGJyMSk7Cj4gKwljcHVfdW5pbnN0 YWxsX2lkbWFwKCk7Cj4gK30KPiArCj4gICAvKgo+ICAgICogQXRvbWljYWxseSByZXBsYWNlcyB0 aGUgYWN0aXZlIFRUQlIxX0VMMSBQR0Qgd2l0aCBhIG5ldyBWQS1jb21wYXRpYmxlIFBHRCwKPiAg ICAqIGF2b2lkaW5nIHRoZSBwb3NzaWJpbGl0eSBvZiBjb25mbGljdGluZyBUTEIgZW50cmllcyBi ZWluZyBhbGxvY2F0ZWQuCj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vaW5pdC5jIGIvYXJj aC9hcm02NC9tbS9pbml0LmMKPiBpbmRleCAzMzllZTg0Li4yNDFkMjdlIDEwMDY0NAo+IC0tLSBh L2FyY2gvYXJtNjQvbW0vaW5pdC5jCj4gKysrIGIvYXJjaC9hcm02NC9tbS9pbml0LmMKPiBAQCAt MTkwLDYgKzE5MCw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCByZXNlcnZlX2NyYXNoa2VybmVsKHZv aWQpCj4gICAJY3Jhc2hrX3Jlcy5zdGFydCA9IGNyYXNoX2Jhc2U7Cj4gICAJY3Jhc2hrX3Jlcy5l bmQgPSBjcmFzaF9iYXNlICsgY3Jhc2hfc2l6ZSAtIDE7Cj4gICAJaW5zZXJ0X3Jlc291cmNlKCZp b21lbV9yZXNvdXJjZSwgJmNyYXNoa19yZXMpOwo+ICsJbWFwX2NyYXNoa2VybmVsKCk7Cj4gICB9 Cj4gICAKPiAgIC8qCj4gQEAgLTM4OCwxMCArMzg5LDYgQEAgdm9pZCBfX2luaXQgYXJtNjRfbWVt YmxvY2tfaW5pdCh2b2lkKQo+ICAgCX0KPiAgIAo+ICAgCWVhcmx5X2luaXRfZmR0X3NjYW5fcmVz ZXJ2ZWRfbWVtKCk7Cj4gLQo+IC0JaWYgKCFJU19FTkFCTEVEKENPTkZJR19aT05FX0RNQSkgJiYg IUlTX0VOQUJMRUQoQ09ORklHX1pPTkVfRE1BMzIpKQo+IC0JCXJlc2VydmVfY3Jhc2hrZXJuZWwo KTsKPiAtCj4gICAJaGlnaF9tZW1vcnkgPSBfX3ZhKG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgLSAx KSArIDE7Cj4gICB9Cj4gICAKPiBAQCAtNDM4LDggKzQzNSw3IEBAIHZvaWQgX19pbml0IGJvb3Rt ZW1faW5pdCh2b2lkKQo+ICAgCSAqIHJlcXVlc3Rfc3RhbmRhcmRfcmVzb3VyY2VzKCkgZGVwZW5k cyBvbiBjcmFzaGtlcm5lbCdzIG1lbW9yeSBiZWluZwo+ICAgCSAqIHJlc2VydmVkLCBzbyBkbyBp dCBoZXJlLgo+ICAgCSAqLwo+IC0JaWYgKElTX0VOQUJMRUQoQ09ORklHX1pPTkVfRE1BKSB8fCBJ U19FTkFCTEVEKENPTkZJR19aT05FX0RNQTMyKSkKPiAtCQlyZXNlcnZlX2NyYXNoa2VybmVsKCk7 Cj4gKwlyZXNlcnZlX2NyYXNoa2VybmVsKCk7Cj4gICAKPiAgIAltZW1ibG9ja19kdW1wX2FsbCgp Owo+ICAgfQo+IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL21tdS5jIGIvYXJjaC9hcm02NC9t bS9tbXUuYwo+IGluZGV4IDYyNmVjMzIuLjNlMzBjODIgMTAwNjQ0Cj4gLS0tIGEvYXJjaC9hcm02 NC9tbS9tbXUuYwo+ICsrKyBiL2FyY2gvYXJtNjQvbW0vbW11LmMKPiBAQCAtNDIsNiArNDIsNyBA QAo+ICAgI2RlZmluZSBOT19CTE9DS19NQVBQSU5HUwlCSVQoMCkKPiAgICNkZWZpbmUgTk9fQ09O VF9NQVBQSU5HUwlCSVQoMSkKPiAgICNkZWZpbmUgTk9fRVhFQ19NQVBQSU5HUwlCSVQoMikJLyog YXNzdW1lcyBGRUFUX0hQRFMgaXMgbm90IHVzZWQgKi8KPiArI2RlZmluZSBOT19TRUNfUkVNQVBQ SU5HUwlCSVQoMykJLyogcmVidWlsZCB3aXRoIG5vbiBibG9jay9zZWMgbWFwcGluZyovCj4gICAK PiAgIHU2NCBpZG1hcF90MHN6ID0gVENSX1QwU1ooVkFfQklUU19NSU4pOwo+ICAgdTY0IGlkbWFw X3B0cnNfcGVyX3BnZCA9IFBUUlNfUEVSX1BHRDsKPiBAQCAtMTU1LDggKzE1NiwyMiBAQCBzdGF0 aWMgYm9vbCBwZ2F0dHJfY2hhbmdlX2lzX3NhZmUodTY0IG9sZCwgdTY0IG5ldykKPiAgIAlyZXR1 cm4gKChvbGQgXiBuZXcpICYgfm1hc2spID09IDA7Cj4gICB9Cj4gICAKPiArc3RhdGljIHZvaWQg cHRlX2NsZWFyX2NvbnQocHRlX3QgKnB0ZXApCj4gK3sKPiArCWludCBpID0gMDsKPiArCXB0ZV90 IHB0ZSA9IFJFQURfT05DRSgqcHRlcCk7Cj4gKwlpZiAocHRlX25vbmUocHRlKSB8fCAhcHRlX2Nv bnQocHRlKSkKPiArCQlyZXR1cm47Cj4gKwlwdGVwIC09ICgodTY0KXB0ZXAgLyBzaXplb2YocHRl X3QpKSAmCj4gKwkJKCgxIDw8IENPTkZJR19BUk02NF9DT05UX1BURV9TSElGVCkgLSAxKTsKPiAr CWRvIHsKPiArCQlwdGUgPSBwdGVfbWtub25jb250KFJFQURfT05DRSgqcHRlcCkpOwo+ICsJCXNl dF9wdGUocHRlcCwgcHRlKTsKPiArCX0gd2hpbGUgKCsrcHRlcCwgKytpIDwgQ09OVF9QVEVTKTsK PiArfQo+ICsKPiAgIHN0YXRpYyB2b2lkIGluaXRfcHRlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBs b25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAo+IC0JCSAgICAgcGh5c19hZGRyX3QgcGh5cywg cGdwcm90X3QgcHJvdCkKPiArCQkgICAgIHBoeXNfYWRkcl90IHBoeXMsIHBncHJvdF90IHByb3Qs IGludCBmbGFncykKPiAgIHsKPiAgIAlwdGVfdCAqcHRlcDsKPiAgIAo+IEBAIC0xNjQsNiArMTc5 LDkgQEAgc3RhdGljIHZvaWQgaW5pdF9wdGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRk ciwgdW5zaWduZWQgbG9uZyBlbmQsCj4gICAJZG8gewo+ICAgCQlwdGVfdCBvbGRfcHRlID0gUkVB RF9PTkNFKCpwdGVwKTsKPiAgIAo+ICsJCWlmIChmbGFncyAmIE5PX1NFQ19SRU1BUFBJTkdTKQo+ ICsJCQlwdGVfY2xlYXJfY29udChwdGVwKTsKPiArCj4gICAJCXNldF9wdGUocHRlcCwgcGZuX3B0 ZShfX3BoeXNfdG9fcGZuKHBoeXMpLCBwcm90KSk7Cj4gICAKPiAgIAkJLyoKPiBAQCAtMTc5LDYg KzE5NywyMiBAQCBzdGF0aWMgdm9pZCBpbml0X3B0ZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9u ZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKPiAgIAlwdGVfY2xlYXJfZml4bWFwKCk7Cj4gICB9 Cj4gICAKPiArc3RhdGljIGlubGluZSB2b2lkIGFsbG9ja19wdGVfcGFnZShwbWRfdCAqcG1kcCwK PiArCQkJCSAgIHBoeXNfYWRkcl90ICgqcGd0YWJsZV9hbGxvYykoaW50KSwKPiArCQkJCSAgIGlu dCBmbGFncykKPiArewo+ICsJcG1kdmFsX3QgcG1kdmFsID0gUE1EX1RZUEVfVEFCTEUgfCBQTURf VEFCTEVfVVhOOwo+ICsJcGh5c19hZGRyX3QgcHRlX3BoeXM7Cj4gKwlpZiAoIXBtZF9ub25lKFJF QURfT05DRSgqcG1kcCkpKQo+ICsJCXJldHVybjsKPiArCj4gKwlpZiAoZmxhZ3MgJiBOT19FWEVD X01BUFBJTkdTKQo+ICsJCXBtZHZhbCB8PSBQTURfVEFCTEVfUFhOOwo+ICsJQlVHX09OKCFwZ3Rh YmxlX2FsbG9jKTsKPiArCXB0ZV9waHlzID0gcGd0YWJsZV9hbGxvYyhQQUdFX1NISUZUKTsKPiAr CV9fcG1kX3BvcHVsYXRlKHBtZHAsIHB0ZV9waHlzLCBwbWR2YWwpOwo+ICt9Cj4gKwo+ICAgc3Rh dGljIHZvaWQgYWxsb2NfaW5pdF9jb250X3B0ZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBh ZGRyLAo+ICAgCQkJCXVuc2lnbmVkIGxvbmcgZW5kLCBwaHlzX2FkZHJfdCBwaHlzLAo+ICAgCQkJ CXBncHJvdF90IHByb3QsCj4gQEAgLTE4OSwxNyArMjIzLDggQEAgc3RhdGljIHZvaWQgYWxsb2Nf aW5pdF9jb250X3B0ZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLAo+ICAgCXBtZF90 IHBtZCA9IFJFQURfT05DRSgqcG1kcCk7Cj4gICAKPiAgIAlCVUdfT04ocG1kX3NlY3QocG1kKSk7 Cj4gLQlpZiAocG1kX25vbmUocG1kKSkgewo+IC0JCXBtZHZhbF90IHBtZHZhbCA9IFBNRF9UWVBF X1RBQkxFIHwgUE1EX1RBQkxFX1VYTjsKPiAtCQlwaHlzX2FkZHJfdCBwdGVfcGh5czsKPiAtCj4g LQkJaWYgKGZsYWdzICYgTk9fRVhFQ19NQVBQSU5HUykKPiAtCQkJcG1kdmFsIHw9IFBNRF9UQUJM RV9QWE47Cj4gLQkJQlVHX09OKCFwZ3RhYmxlX2FsbG9jKTsKPiAtCQlwdGVfcGh5cyA9IHBndGFi bGVfYWxsb2MoUEFHRV9TSElGVCk7Cj4gLQkJX19wbWRfcG9wdWxhdGUocG1kcCwgcHRlX3BoeXMs IHBtZHZhbCk7Cj4gLQkJcG1kID0gUkVBRF9PTkNFKCpwbWRwKTsKPiAtCX0KPiArCWFsbG9ja19w dGVfcGFnZShwbWRwLCBwZ3RhYmxlX2FsbG9jLCBmbGFncyk7Cj4gKwlwbWQgPSBSRUFEX09OQ0Uo KnBtZHApOwo+ICAgCUJVR19PTihwbWRfYmFkKHBtZCkpOwo+ICAgCj4gICAJZG8gewo+IEBAIC0y MDgsMTYgKzIzMyw3MSBAQCBzdGF0aWMgdm9pZCBhbGxvY19pbml0X2NvbnRfcHRlKHBtZF90ICpw bWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCj4gICAJCW5leHQgPSBwdGVfY29udF9hZGRyX2VuZChh ZGRyLCBlbmQpOwo+ICAgCj4gICAJCS8qIHVzZSBhIGNvbnRpZ3VvdXMgbWFwcGluZyBpZiB0aGUg cmFuZ2UgaXMgc3VpdGFibHkgYWxpZ25lZCAqLwo+IC0JCWlmICgoKChhZGRyIHwgbmV4dCB8IHBo eXMpICYgfkNPTlRfUFRFX01BU0spID09IDApICYmCj4gLQkJICAgIChmbGFncyAmIE5PX0NPTlRf TUFQUElOR1MpID09IDApCj4gKwkJaWYgKCEoZmxhZ3MgJiBOT19TRUNfUkVNQVBQSU5HUykgJiYK PiArCQkgICAoKChhZGRyIHwgbmV4dCB8IHBoeXMpICYgfkNPTlRfUFRFX01BU0spID09IDApICYm Cj4gKwkJICAgKGZsYWdzICYgTk9fQ09OVF9NQVBQSU5HUykgPT0gMCkKPiAgIAkJCV9fcHJvdCA9 IF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfCBQVEVfQ09OVCk7Cj4gICAKPiAtCQlpbml0X3B0 ZShwbWRwLCBhZGRyLCBuZXh0LCBwaHlzLCBfX3Byb3QpOwo+ICsJCWluaXRfcHRlKHBtZHAsIGFk ZHIsIG5leHQsIHBoeXMsIF9fcHJvdCwgZmxhZ3MpOwo+ICAgCj4gICAJCXBoeXMgKz0gbmV4dCAt IGFkZHI7Cj4gICAJfSB3aGlsZSAoYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKPiAgIH0KPiAg IAo+ICtzdGF0aWMgdm9pZCBwbWRfY2xlYXJfY29udChwbWRfdCAqcG1kcCkKPiArewo+ICsJaW50 IGkgPSAwOwo+ICsJcG1kX3QgcG1kID0gUkVBRF9PTkNFKCpwbWRwKTsKPiArCWlmIChwbWRfbm9u ZShwbWQpIHx8ICFwbWRfc2VjdChwbWQpIHx8ICFwbWRfY29udChwbWQpKQo+ICsJCXJldHVybjsK PiArCXBtZHAgLT0gKCh1NjQpcG1kcCAvIHNpemVvZihwbWRfdCkpICYKPiArCQkoKDEgPDwgQ09O RklHX0FSTTY0X0NPTlRfUE1EX1NISUZUKSAtIDEpOwo+ICsJZG8gewo+ICsJCXBtZCA9IFJFQURf T05DRSgqcG1kcCk7Cj4gKwkJcG1kID0gcHRlX3BtZChwdGVfbWtub25jb250KHBtZF9wdGUocG1k KSkpOwo+ICsJCXNldF9wbWQocG1kcCwgcG1kKTsKPiArCX0gd2hpbGUgKCsrcG1kcCwgKytpIDwg Q09OVF9QTURTKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW5pdF9wbWRfcmVtYXAocHVkX3Qg KnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCj4gKwkJCSAgIHBo eXNfYWRkcl90IHBoeXMsIHBncHJvdF90IHByb3QsCj4gKwkJCSAgIHBoeXNfYWRkcl90ICgqcGd0 YWJsZV9hbGxvYykoaW50KSwgaW50IGZsYWdzKQo+ICt7Cj4gKwl1bnNpZ25lZCBsb25nIG5leHQ7 Cj4gKwlwbWRfdCAqcG1kcDsKPiArCXBoeXNfYWRkcl90IG1hcF9vZmZzZXQ7Cj4gKwo+ICsJcG1k cCA9IHBtZF9zZXRfZml4bWFwX29mZnNldChwdWRwLCBhZGRyKTsKPiArCWRvIHsKPiArCQluZXh0 ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7Cj4gKwo+ICsJCWlmICghcG1kX25vbmUoKnBtZHAp ICYmIHBtZF9zZWN0KCpwbWRwKSkgewo+ICsJCQlwbWRfY2xlYXJfY29udChwbWRwKTsKPiArCQkJ cG1kX2NsZWFyKHBtZHApOwo+ICsJCQlhbGxvY2tfcHRlX3BhZ2UocG1kcCwgcGd0YWJsZV9hbGxv YywgZmxhZ3MpOwo+ICsKPiArCQkJbWFwX29mZnNldCA9IGFkZHIgLSAoYWRkciAmIFBNRF9NQVNL KTsKPiArCQkJaWYgKG1hcF9vZmZzZXQpCj4gKwkJCSAgICBhbGxvY19pbml0X2NvbnRfcHRlKHBt ZHAsIGFkZHIgJiBQTURfTUFTSywgYWRkciwKPiArCQkJCQkJcGh5cyAtIG1hcF9vZmZzZXQsIHBy b3QsCj4gKwkJCQkJCXBndGFibGVfYWxsb2MsCj4gKwkJCQkJCWZsYWdzICYgKH5OT19TRUNfUkVN QVBQSU5HUykpOwo+ICsKPiArCQkJaWYgKG5leHQgPCAoYWRkciAmIFBNRF9NQVNLKSArIFBNRF9T SVpFKQo+ICsJCQkgICAgYWxsb2NfaW5pdF9jb250X3B0ZShwbWRwLCBuZXh0LAo+ICsJCQkJCSAg ICAgICAoYWRkciAmIFBVRF9NQVNLKSArIFBVRF9TSVpFLAo+ICsJCQkJCSAgICAgICAgbmV4dCAt IGFkZHIgKyBwaHlzLAo+ICsJCQkJCQlwcm90LCBwZ3RhYmxlX2FsbG9jLAo+ICsJCQkJCQlmbGFn cyAmICh+Tk9fU0VDX1JFTUFQUElOR1MpKTsKPiArCQl9Cj4gKwkJYWxsb2NfaW5pdF9jb250X3B0 ZShwbWRwLCBhZGRyLCBuZXh0LCBwaHlzLCBwcm90LAo+ICsJCQkJICAgIHBndGFibGVfYWxsb2Ms IGZsYWdzKTsKPiArCQlwaHlzICs9IG5leHQgLSBhZGRyOwo+ICsJfSB3aGlsZSAocG1kcCsrLCBh ZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwo+ICsKPiArCXBtZF9jbGVhcl9maXhtYXAoKTsKPiAr fQo+ICsKPiAgIHN0YXRpYyB2b2lkIGluaXRfcG1kKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25n IGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAo+ICAgCQkgICAgIHBoeXNfYWRkcl90IHBoeXMsIHBn cHJvdF90IHByb3QsCj4gICAJCSAgICAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShpbnQp LCBpbnQgZmxhZ3MpCj4gQEAgLTI1NSw2ICszMzUsMjIgQEAgc3RhdGljIHZvaWQgaW5pdF9wbWQo cHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCj4gICAJ cG1kX2NsZWFyX2ZpeG1hcCgpOwo+ICAgfQo+ICAgCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBhbGxv Y19wbWRfcGFnZShwdWRfdCAqcHVkcCwgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShpbnQp LCBpbnQgZmxhZ3MpCj4gK3sKPiArCj4gKwlwdWR2YWxfdCBwdWR2YWwgPSBQVURfVFlQRV9UQUJM RSB8IFBVRF9UQUJMRV9VWE47Cj4gKwlwaHlzX2FkZHJfdCBwbWRfcGh5czsKPiArCj4gKwlpZiAo IXB1ZF9ub25lKFJFQURfT05DRSgqcHVkcCkpKQo+ICsJCXJldHVybjsKPiArCj4gKwlpZiAoZmxh Z3MgJiBOT19FWEVDX01BUFBJTkdTKQo+ICsJCXB1ZHZhbCB8PSBQVURfVEFCTEVfUFhOOwo+ICsJ QlVHX09OKCFwZ3RhYmxlX2FsbG9jKTsKPiArCXBtZF9waHlzID0gcGd0YWJsZV9hbGxvYyhQTURf U0hJRlQpOwo+ICsJX19wdWRfcG9wdWxhdGUocHVkcCwgcG1kX3BoeXMsIHB1ZHZhbCk7Cj4gK30K PiArCj4gICBzdGF0aWMgdm9pZCBhbGxvY19pbml0X2NvbnRfcG1kKHB1ZF90ICpwdWRwLCB1bnNp Z25lZCBsb25nIGFkZHIsCj4gICAJCQkJdW5zaWduZWQgbG9uZyBlbmQsIHBoeXNfYWRkcl90IHBo eXMsCj4gICAJCQkJcGdwcm90X3QgcHJvdCwKPiBAQCAtMjY3LDE3ICszNjMsOCBAQCBzdGF0aWMg dm9pZCBhbGxvY19pbml0X2NvbnRfcG1kKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIs Cj4gICAJICogQ2hlY2sgZm9yIGluaXRpYWwgc2VjdGlvbiBtYXBwaW5ncyBpbiB0aGUgcGdkL3B1 ZC4KPiAgIAkgKi8KPiAgIAlCVUdfT04ocHVkX3NlY3QocHVkKSk7Cj4gLQlpZiAocHVkX25vbmUo cHVkKSkgewo+IC0JCXB1ZHZhbF90IHB1ZHZhbCA9IFBVRF9UWVBFX1RBQkxFIHwgUFVEX1RBQkxF X1VYTjsKPiAtCQlwaHlzX2FkZHJfdCBwbWRfcGh5czsKPiAtCj4gLQkJaWYgKGZsYWdzICYgTk9f RVhFQ19NQVBQSU5HUykKPiAtCQkJcHVkdmFsIHw9IFBVRF9UQUJMRV9QWE47Cj4gLQkJQlVHX09O KCFwZ3RhYmxlX2FsbG9jKTsKPiAtCQlwbWRfcGh5cyA9IHBndGFibGVfYWxsb2MoUE1EX1NISUZU KTsKPiAtCQlfX3B1ZF9wb3B1bGF0ZShwdWRwLCBwbWRfcGh5cywgcHVkdmFsKTsKPiAtCQlwdWQg PSBSRUFEX09OQ0UoKnB1ZHApOwo+IC0JfQo+ICsJYWxsb2NfcG1kX3BhZ2UocHVkcCwgcGd0YWJs ZV9hbGxvYywgZmxhZ3MpOwo+ICsJcHVkID0gUkVBRF9PTkNFKCpwdWRwKTsKPiAgIAlCVUdfT04o cHVkX2JhZChwdWQpKTsKPiAgIAo+ICAgCWRvIHsKPiBAQCAtMjg2LDE2ICszNzMsODAgQEAgc3Rh dGljIHZvaWQgYWxsb2NfaW5pdF9jb250X3BtZChwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBh ZGRyLAo+ICAgCQluZXh0ID0gcG1kX2NvbnRfYWRkcl9lbmQoYWRkciwgZW5kKTsKPiAgIAo+ICAg CQkvKiB1c2UgYSBjb250aWd1b3VzIG1hcHBpbmcgaWYgdGhlIHJhbmdlIGlzIHN1aXRhYmx5IGFs aWduZWQgKi8KPiAtCQlpZiAoKCgoYWRkciB8IG5leHQgfCBwaHlzKSAmIH5DT05UX1BNRF9NQVNL KSA9PSAwKSAmJgo+ICsJCWlmICghKGZsYWdzICYgTk9fU0VDX1JFTUFQUElOR1MpICYmCj4gKwkJ ICAgKCgoYWRkciB8IG5leHQgfCBwaHlzKSAmIH5DT05UX1BNRF9NQVNLKSA9PSAwKSAmJgo+ICAg CQkgICAgKGZsYWdzICYgTk9fQ09OVF9NQVBQSU5HUykgPT0gMCkKPiAgIAkJCV9fcHJvdCA9IF9f cGdwcm90KHBncHJvdF92YWwocHJvdCkgfCBQVEVfQ09OVCk7Cj4gICAKPiAtCQlpbml0X3BtZChw dWRwLCBhZGRyLCBuZXh0LCBwaHlzLCBfX3Byb3QsIHBndGFibGVfYWxsb2MsIGZsYWdzKTsKPiAr CQlpZiAoZmxhZ3MgJiBOT19TRUNfUkVNQVBQSU5HUykKPiArCQkJaW5pdF9wbWRfcmVtYXAocHVk cCwgYWRkciwgbmV4dCwgcGh5cywgX19wcm90LAo+ICsJCQkJICAgICAgIHBndGFibGVfYWxsb2Ms IGZsYWdzKTsKPiArCQllbHNlCj4gKwkJCWluaXRfcG1kKHB1ZHAsIGFkZHIsIG5leHQsIHBoeXMs IF9fcHJvdCwKPiArCQkJCSBwZ3RhYmxlX2FsbG9jLCBmbGFncyk7Cj4gICAKPiAgIAkJcGh5cyAr PSBuZXh0IC0gYWRkcjsKPiAgIAl9IHdoaWxlIChhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwo+ ICAgfQo+ICAgCj4gK3N0YXRpYyB2b2lkIGluaXRfcHVkX3JlbWFwKHB1ZF90ICpwdWRwLCB1bnNp Z25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dCwKPiArCQkJICAgcGh5c19hZGRyX3Qg cGh5cywgcGdwcm90X3QgcHJvdCwKPiArCQkJICAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9j KShpbnQpLAo+ICsJCQkgICBpbnQgZmxhZ3MpCj4gK3sKPiArCXBoeXNfYWRkcl90IG1hcF9vZmZz ZXQ7Cj4gKwo+ICsJaWYgKCFwdWRfbm9uZSgqcHVkcCkgJiYgcHVkX3NlY3QoKnB1ZHApKSB7Cj4g KwkJcHVkX2NsZWFyKHB1ZHApOwo+ICsJCWFsbG9jX3BtZF9wYWdlKHB1ZHAsIHBndGFibGVfYWxs b2MsIGZsYWdzKTsKPiArCj4gKwkJbWFwX29mZnNldCA9IGFkZHIgLSAoYWRkciAmIFBVRF9NQVNL KTsKPiArCQlpZiAobWFwX29mZnNldCkKPiArCQkgICAgYWxsb2NfaW5pdF9jb250X3BtZChwdWRw LCBhZGRyICYgUFVEX01BU0ssCj4gKwkJCQkJYWRkciwgcGh5cyAtIG1hcF9vZmZzZXQsCj4gKwkJ CQkJcHJvdCwgcGd0YWJsZV9hbGxvYywKPiArCQkJCQlmbGFncyAmCSh+Tk9fU0VDX1JFTUFQUElO R1MpKTsKPiArCj4gKwkJaWYgKG5leHQgPCAoYWRkciAmIFBVRF9NQVNLKSArIFBVRF9TSVpFKQo+ ICsJCSAgICBhbGxvY19pbml0X2NvbnRfcG1kKHB1ZHAsIG5leHQsCj4gKwkJCQkgICAgICAgKGFk ZHIgJiBQVURfTUFTSykgKyBQVURfU0laRSwKPiArCQkJCQluZXh0IC0gYWRkciArIHBoeXMsCj4g KwkJCQkJcHJvdCwgcGd0YWJsZV9hbGxvYywKPiArCQkJCQlmbGFncyAmICh+Tk9fU0VDX1JFTUFQ UElOR1MpKTsKPiArCX0KPiArCWFsbG9jX2luaXRfY29udF9wbWQocHVkcCwgYWRkciwgbmV4dCwg cGh5cywgcHJvdCwKPiArCQkJICAgIHBndGFibGVfYWxsb2MsIGZsYWdzKTsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgaW5pdF9wdWQocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5z aWduZWQgbG9uZyBuZXh0LAo+ICsJCSAgICAgcGh5c19hZGRyX3QgcGh5cywgcGdwcm90X3QgcHJv dCwKPiArCQkgICAgIHBoeXNfYWRkcl90ICgqcGd0YWJsZV9hbGxvYykoaW50KSwKPiArCQkgICAg IGludCBmbGFncykKPiArewo+ICsJcHVkX3Qgb2xkX3B1ZCA9IFJFQURfT05DRSgqcHVkcCk7Cj4g KwkvKgo+ICsJICogRm9yIDRLIGdyYW51bGUgb25seSwgYXR0ZW1wdCB0byBwdXQgZG93biBhIDFH QiBibG9jawo+ICsJICovCj4gKwlpZiAocHVkX3NlY3Rfc3VwcG9ydGVkKCkgJiYKPiArCSAgICgo YWRkciB8IG5leHQgfCBwaHlzKSAmIH5QVURfTUFTSykgPT0gMCAmJgo+ICsJICAgKGZsYWdzICYg Tk9fQkxPQ0tfTUFQUElOR1MpID09IDApIHsKPiArCQlwdWRfc2V0X2h1Z2UocHVkcCwgcGh5cywg cHJvdCk7Cj4gKwo+ICsJCS8qCj4gKwkJICogQWZ0ZXIgdGhlIFBVRCBlbnRyeSBoYXMgYmVlbiBw b3B1bGF0ZWQgb25jZSwgd2UKPiArCQkgKiBvbmx5IGFsbG93IHVwZGF0ZXMgdG8gdGhlIHBlcm1p c3Npb24gYXR0cmlidXRlcy4KPiArCQkgKi8KPiArCQlCVUdfT04oIXBnYXR0cl9jaGFuZ2VfaXNf c2FmZShwdWRfdmFsKG9sZF9wdWQpLAo+ICsJCQkJCSAgICAgIFJFQURfT05DRShwdWRfdmFsKCpw dWRwKSkpKTsKPiArCX0gZWxzZSB7Cj4gKwkJYWxsb2NfaW5pdF9jb250X3BtZChwdWRwLCBhZGRy LCBuZXh0LCBwaHlzLCBwcm90LAo+ICsJCQkJICAgIHBndGFibGVfYWxsb2MsIGZsYWdzKTsKPiAr Cj4gKwkJQlVHX09OKHB1ZF92YWwob2xkX3B1ZCkgIT0gMCAmJgo+ICsJCSAgICAgICBwdWRfdmFs KG9sZF9wdWQpICE9IFJFQURfT05DRShwdWRfdmFsKCpwdWRwKSkpOwo+ICsJfQo+ICt9Cj4gKwo+ ICAgc3RhdGljIHZvaWQgYWxsb2NfaW5pdF9wdWQocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcg YWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCj4gICAJCQkgICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3By b3RfdCBwcm90LAo+ICAgCQkJICAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShpbnQpLAo+ IEBAIC0zMjUsMzcgKzQ3NiwyMiBAQCBzdGF0aWMgdm9pZCBhbGxvY19pbml0X3B1ZChwZ2RfdCAq cGdkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKPiAgIAkgKi8KPiAg IAlpZiAoc3lzdGVtX3N0YXRlICE9IFNZU1RFTV9CT09USU5HKQo+ICAgCQltdXRleF9sb2NrKCZm aXhtYXBfbG9jayk7Cj4gKwo+ICAgCXB1ZHAgPSBwdWRfc2V0X2ZpeG1hcF9vZmZzZXQocDRkcCwg YWRkcik7Cj4gICAJZG8gewo+IC0JCXB1ZF90IG9sZF9wdWQgPSBSRUFEX09OQ0UoKnB1ZHApOwo+ IC0KPiAgIAkJbmV4dCA9IHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpOwo+ICAgCj4gLQkJLyoKPiAt CQkgKiBGb3IgNEsgZ3JhbnVsZSBvbmx5LCBhdHRlbXB0IHRvIHB1dCBkb3duIGEgMUdCIGJsb2Nr Cj4gLQkJICovCj4gLQkJaWYgKHB1ZF9zZWN0X3N1cHBvcnRlZCgpICYmCj4gLQkJICAgKChhZGRy IHwgbmV4dCB8IHBoeXMpICYgflBVRF9NQVNLKSA9PSAwICYmCj4gLQkJICAgIChmbGFncyAmIE5P X0JMT0NLX01BUFBJTkdTKSA9PSAwKSB7Cj4gLQkJCXB1ZF9zZXRfaHVnZShwdWRwLCBwaHlzLCBw cm90KTsKPiAtCj4gLQkJCS8qCj4gLQkJCSAqIEFmdGVyIHRoZSBQVUQgZW50cnkgaGFzIGJlZW4g cG9wdWxhdGVkIG9uY2UsIHdlCj4gLQkJCSAqIG9ubHkgYWxsb3cgdXBkYXRlcyB0byB0aGUgcGVy bWlzc2lvbiBhdHRyaWJ1dGVzLgo+IC0JCQkgKi8KPiAtCQkJQlVHX09OKCFwZ2F0dHJfY2hhbmdl X2lzX3NhZmUocHVkX3ZhbChvbGRfcHVkKSwKPiAtCQkJCQkJICAgICAgUkVBRF9PTkNFKHB1ZF92 YWwoKnB1ZHApKSkpOwo+IC0JCX0gZWxzZSB7Cj4gLQkJCWFsbG9jX2luaXRfY29udF9wbWQocHVk cCwgYWRkciwgbmV4dCwgcGh5cywgcHJvdCwKPiAtCQkJCQkgICAgcGd0YWJsZV9hbGxvYywgZmxh Z3MpOwo+IC0KPiAtCQkJQlVHX09OKHB1ZF92YWwob2xkX3B1ZCkgIT0gMCAmJgo+IC0JCQkgICAg ICAgcHVkX3ZhbChvbGRfcHVkKSAhPSBSRUFEX09OQ0UocHVkX3ZhbCgqcHVkcCkpKTsKPiAtCQl9 Cj4gKwkJaWYgKGZsYWdzICYgTk9fU0VDX1JFTUFQUElOR1MpCj4gKwkJCWluaXRfcHVkX3JlbWFw KHB1ZHAsIGFkZHIsIG5leHQsIHBoeXMsIHByb3QsCj4gKwkJCQkgICAgICAgcGd0YWJsZV9hbGxv YywgZmxhZ3MpOwo+ICsJCWVsc2UKPiArCQkJaW5pdF9wdWQocHVkcCwgYWRkciwgbmV4dCwgcGh5 cywgcHJvdCwgcGd0YWJsZV9hbGxvYywKPiArCQkJCSBmbGFncyk7Cj4gICAJCXBoeXMgKz0gbmV4 dCAtIGFkZHI7Cj4gICAJfSB3aGlsZSAocHVkcCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQp Owo+ICAgCj4gICAJcHVkX2NsZWFyX2ZpeG1hcCgpOwo+ICsKPiAgIAlpZiAoc3lzdGVtX3N0YXRl ICE9IFNZU1RFTV9CT09USU5HKQo+ICAgCQltdXRleF91bmxvY2soJmZpeG1hcF9sb2NrKTsKPiAg IH0KPiBAQCAtNDgzLDIwICs2MTksMzcgQEAgdm9pZCBfX2luaXQgbWFya19saW5lYXJfdGV4dF9h bGlhc19ybyh2b2lkKQo+ICAgCQkJICAgIFBBR0VfS0VSTkVMX1JPKTsKPiAgIH0KPiAgIAo+IC1z dGF0aWMgYm9vbCBjcmFzaF9tZW1fbWFwIF9faW5pdGRhdGE7Cj4gLQo+IC1zdGF0aWMgaW50IF9f aW5pdCBlbmFibGVfY3Jhc2hfbWVtX21hcChjaGFyICphcmcpCj4gKyNpZmRlZiBDT05GSUdfS0VY RUNfQ09SRQo+ICt2b2lkIF9faW5pdCBtYXBfY3Jhc2hrZXJuZWwodm9pZCkKPiAgIHsKPiAtCS8q Cj4gLQkgKiBQcm9wZXIgcGFyYW1ldGVyIHBhcnNpbmcgaXMgZG9uZSBieSByZXNlcnZlX2NyYXNo a2VybmVsKCkuIFdlIG9ubHkKPiAtCSAqIG5lZWQgdG8ga25vdyBpZiB0aGUgbGluZWFyIG1hcCBo YXMgdG8gYXZvaWQgYmxvY2sgbWFwcGluZ3Mgc28gdGhhdAo+IC0JICogdGhlIGNyYXNoa2VybmVs IHJlc2VydmF0aW9ucyBjYW4gYmUgdW5tYXBwZWQgbGF0ZXIuCj4gLQkgKi8KPiAtCWNyYXNoX21l bV9tYXAgPSB0cnVlOwo+ICsJaWYgKGNhbl9zZXRfZGlyZWN0X21hcCgpIHx8IElTX0VOQUJMRUQo Q09ORklHX0tGRU5DRSkpCj4gKwkgICAgcmV0dXJuOwo+ICAgCj4gLQlyZXR1cm4gMDsKPiArCWlm ICghY3Jhc2hrX3Jlcy5lbmQpCj4gKwkgICAgcmV0dXJuOwo+ICsKPiArCWNwdV9yZXBsYWNlX3R0 YnIxX3dpdGhfcGh5cyhfX3BhX3N5bWJvbChpbml0X3BnX2RpcikpOwo+ICsJaW5pdF9tbS5wZ2Qg PSBpbml0X3BnX2RpcjsKPiArCj4gKwlfX2NyZWF0ZV9wZ2RfbWFwcGluZyhzd2FwcGVyX3BnX2Rp ciwgY3Jhc2hrX3Jlcy5zdGFydCwKPiArCQkJICAgICBfX3BoeXNfdG9fdmlydChjcmFzaGtfcmVz LnN0YXJ0KSwKPiArCQkJICAgICBjcmFzaGtfcmVzLmVuZCArIDEgLSBjcmFzaGtfcmVzLnN0YXJ0 LCBQQUdFX0tFUk5FTCwKPiArCQkJICAgICBlYXJseV9wZ3RhYmxlX2FsbG9jLAo+ICsJCQkgICAg IE5PX0VYRUNfTUFQUElOR1MgfCBOT19TRUNfUkVNQVBQSU5HUyk7Cj4gKwo+ICsJY3B1X3JlcGxh Y2VfdHRicjEobG1fYWxpYXMoc3dhcHBlcl9wZ19kaXIpKTsKPiArCWluaXRfbW0ucGdkID0gc3dh cHBlcl9wZ19kaXI7Cj4gKwo+ICsJbWVtYmxvY2tfcGh5c19mcmVlKF9fcGFfc3ltYm9sKGluaXRf cGdfZGlyKSwKPiArCQkJICAgX19wYV9zeW1ib2woaW5pdF9wZ19lbmQpIC0gX19wYV9zeW1ib2wo aW5pdF9wZ19kaXIpKTsKPiAgIH0KPiAtZWFybHlfcGFyYW0oImNyYXNoa2VybmVsIiwgZW5hYmxl X2NyYXNoX21lbV9tYXApOwo+ICsjZWxzZQo+ICt2b2lkIF9faW5pdCBtYXBfY3Jhc2hrZXJuZWwo dm9pZCkKPiArewo+ICsJbWVtYmxvY2tfcGh5c19mcmVlKF9fcGFfc3ltYm9sKGluaXRfcGdfZGly KSwKPiArCQkJICAgX19wYV9zeW1ib2woaW5pdF9wZ19lbmQpIC0gX19wYV9zeW1ib2woaW5pdF9w Z19kaXIpKTsKPiArfQo+ICsjZW5kaWYKPiAgIAo+ICAgc3RhdGljIHZvaWQgX19pbml0IG1hcF9t ZW0ocGdkX3QgKnBnZHApCj4gICB7Cj4gQEAgLTUyNywxNyArNjgwLDYgQEAgc3RhdGljIHZvaWQg X19pbml0IG1hcF9tZW0ocGdkX3QgKnBnZHApCj4gICAJICovCj4gICAJbWVtYmxvY2tfbWFya19u b21hcChrZXJuZWxfc3RhcnQsIGtlcm5lbF9lbmQgLSBrZXJuZWxfc3RhcnQpOwo+ICAgCj4gLSNp ZmRlZiBDT05GSUdfS0VYRUNfQ09SRQo+IC0JaWYgKGNyYXNoX21lbV9tYXApIHsKPiAtCQlpZiAo SVNfRU5BQkxFRChDT05GSUdfWk9ORV9ETUEpIHx8Cj4gLQkJICAgIElTX0VOQUJMRUQoQ09ORklH X1pPTkVfRE1BMzIpKQo+IC0JCQlmbGFncyB8PSBOT19CTE9DS19NQVBQSU5HUyB8IE5PX0NPTlRf TUFQUElOR1M7Cj4gLQkJZWxzZSBpZiAoY3Jhc2hrX3Jlcy5lbmQpCj4gLQkJCW1lbWJsb2NrX21h cmtfbm9tYXAoY3Jhc2hrX3Jlcy5zdGFydCwKPiAtCQkJICAgIHJlc291cmNlX3NpemUoJmNyYXNo a19yZXMpKTsKPiAtCX0KPiAtI2VuZGlmCj4gLQo+ICAgCS8qIG1hcCBhbGwgdGhlIG1lbW9yeSBi YW5rcyAqLwo+ICAgCWZvcl9lYWNoX21lbV9yYW5nZShpLCAmc3RhcnQsICZlbmQpIHsKPiAgIAkJ aWYgKHN0YXJ0ID49IGVuZCkKPiBAQCAtNTcwLDE5ICs3MTIsNiBAQCBzdGF0aWMgdm9pZCBfX2lu aXQgbWFwX21lbShwZ2RfdCAqcGdkcCkKPiAgIAkgKiBpbiBwYWdlIGdyYW51bGFyaXR5IGFuZCBw dXQgYmFjayB1bnVzZWQgbWVtb3J5IHRvIGJ1ZGR5IHN5c3RlbQo+ICAgCSAqIHRocm91Z2ggL3N5 cy9rZXJuZWwva2V4ZWNfY3Jhc2hfc2l6ZSBpbnRlcmZhY2UuCj4gICAJICovCj4gLSNpZmRlZiBD T05GSUdfS0VYRUNfQ09SRQo+IC0JaWYgKGNyYXNoX21lbV9tYXAgJiYKPiAtCSAgICAhSVNfRU5B QkxFRChDT05GSUdfWk9ORV9ETUEpICYmICFJU19FTkFCTEVEKENPTkZJR19aT05FX0RNQTMyKSkg ewo+IC0JCWlmIChjcmFzaGtfcmVzLmVuZCkgewo+IC0JCQlfX21hcF9tZW1ibG9jayhwZ2RwLCBj cmFzaGtfcmVzLnN0YXJ0LAo+IC0JCQkJICAgICAgIGNyYXNoa19yZXMuZW5kICsgMSwKPiAtCQkJ CSAgICAgICBQQUdFX0tFUk5FTCwKPiAtCQkJCSAgICAgICBOT19CTE9DS19NQVBQSU5HUyB8IE5P X0NPTlRfTUFQUElOR1MpOwo+IC0JCQltZW1ibG9ja19jbGVhcl9ub21hcChjcmFzaGtfcmVzLnN0 YXJ0LAo+IC0JCQkJCSAgICAgcmVzb3VyY2Vfc2l6ZSgmY3Jhc2hrX3JlcykpOwo+IC0JCX0KPiAt CX0KPiAtI2VuZGlmCj4gICB9Cj4gICAKPiAgIHZvaWQgbWFya19yb2RhdGFfcm8odm9pZCkKPiBA QCAtNzc0LDggKzkwMyw4IEBAIHZvaWQgX19pbml0IHBhZ2luZ19pbml0KHZvaWQpCj4gICAJY3B1 X3JlcGxhY2VfdHRicjEobG1fYWxpYXMoc3dhcHBlcl9wZ19kaXIpKTsKPiAgIAlpbml0X21tLnBn ZCA9IHN3YXBwZXJfcGdfZGlyOwo+ICAgCj4gLQltZW1ibG9ja19waHlzX2ZyZWUoX19wYV9zeW1i b2woaW5pdF9wZ19kaXIpLAo+IC0JCQkgICBfX3BhX3N5bWJvbChpbml0X3BnX2VuZCkgLSBfX3Bh X3N5bWJvbChpbml0X3BnX2RpcikpOwo+ICsJLy9tZW1ibG9ja19waHlzX2ZyZWUoX19wYV9zeW1i b2woaW5pdF9wZ19kaXIpLAo+ICsJLy8JCSAgIF9fcGFfc3ltYm9sKGluaXRfcGdfZW5kKSAtIF9f cGFfc3ltYm9sKGluaXRfcGdfZGlyKSk7Cj4gICAKPiAgIAltZW1ibG9ja19hbGxvd19yZXNpemUo KTsKPiAgIH0KPiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9wcm9jLlMgYi9hcmNoL2FybTY0 L21tL3Byb2MuUwo+IGluZGV4IDUwYmJlZDkuLjE2MWJhZTYgMTAwNjQ0Cj4gLS0tIGEvYXJjaC9h cm02NC9tbS9wcm9jLlMKPiArKysgYi9hcmNoL2FybTY0L21tL3Byb2MuUwo+IEBAIC0xNzgsNiAr MTc4LDI1IEBAIFNZTV9GVU5DX0VORChjcHVfZG9fcmVzdW1lKQo+ICAgCWlzYgo+ICAgLmVuZG0K PiAgIAo+ICtTWU1fRlVOQ19TVEFSVChpZG1hcF9jcHVfcmVwbGFjZV90dGJyMV93aXRoX2ZsdXNo X3RsYikKPiArCXNhdmVfYW5kX2Rpc2FibGVfZGFpZiBmbGFncz14Mgo+ICsKPiArCV9faWRtYXBf Y3B1X3NldF9yZXNlcnZlZF90dGJyMSB4MSwgeDMKPiArCj4gKwlvZmZzZXRfdHRicjEgeDAsIHgz Cj4gKwltc3IJdHRicjFfZWwxLCB4MAo+ICsJaXNiCj4gKwo+ICsJcmVzdG9yZV9kYWlmIHgyCj4g Kwo+ICsJZHNiIG5zaHN0Cj4gKwl0bGJpCXZtYWxsZTEKPiArCWRzYgluc2gKPiArCWlzYgo+ICsK PiArCXJldAo+ICtTWU1fRlVOQ19FTkQoaWRtYXBfY3B1X3JlcGxhY2VfdHRicjFfd2l0aF9mbHVz aF90bGIpCj4gKwo+ICAgLyoKPiAgICAqIHZvaWQgaWRtYXBfY3B1X3JlcGxhY2VfdHRicjEocGh5 c19hZGRyX3QgdHRicjEpCj4gICAgKgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtl cm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxt YW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=