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 124D3C07E9D for ; Mon, 26 Sep 2022 11:40:49 +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-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To: 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=UO3yNrDHxFpPEwkhFjEV2hnWKjOKDeGI4wsIA6dsUwI=; b=YNlVM5Z53UrKes dXcYAgQiAGhWZgFb7+vuFguoNoNNbGiCKHjsbz5U4oWdyIeVb6ovQG4St0cQwzWZAx1arL61jO0dM 9b862SQ81CfUPgDkoLR7xF+d9nuE5bQFxRlWAsi9BmuzEihRwdKnHR7bYKjX+dOHiC3cVkeZzD3jz l9qRDQwp3r3v0KjtpC03EKcECIYfhnVEVKN1b/q91ZOS/oiM7BWazw9SlOMG7CsPFJuZpwBSquVwy BNSmjZgfGGwG3AqITxxhlspF/Mvc/fWEWe7rP0LDZngtYEesblw9Lci9NzCjyJ90mV6+dwtsHBoyg oDQL0ARKAxZxW5bcGAGg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ocmSN-004Ze0-VJ; Mon, 26 Sep 2022 11:39:28 +0000 Received: from out30-44.freemail.mail.aliyun.com ([115.124.30.44]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1ocmSG-004ZZU-4V for linux-arm-kernel@lists.infradead.org; Mon, 26 Sep 2022 11:39:25 +0000 X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R201e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018045176;MF=xueshuai@linux.alibaba.com;NM=1;PH=DS;RN=11;SR=0;TI=SMTPD_---0VQmPqKK_1664192350; Received: from 30.240.121.51(mailfrom:xueshuai@linux.alibaba.com fp:SMTPD_---0VQmPqKK_1664192350) by smtp.aliyun-inc.com; Mon, 26 Sep 2022 19:39:12 +0800 Message-ID: <54917c40-dc1c-2d8d-c468-7614fccc6f81@linux.alibaba.com> Date: Mon, 26 Sep 2022 19:39:10 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.13.0 Subject: Re: [PATCH v1 2/3] drivers/perf: add DesignWare PCIe PMU driver Content-Language: en-US To: Yicong Yang Cc: yangyicong@hisilicon.com, rdunlap@infradead.org, will@kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, robin.murphy@arm.com, mark.rutland@arm.com, baolin.wang@linux.alibaba.com, zhuo.song@linux.alibaba.com, Jonathan.Cameron@Huawei.com References: <20220917121036.14864-1-xueshuai@linux.alibaba.com> <20220917121036.14864-3-xueshuai@linux.alibaba.com> <0759a5ad-cb1f-176b-5145-0b27ad69b731@huawei.com> From: Shuai Xue In-Reply-To: <0759a5ad-cb1f-176b-5145-0b27ad69b731@huawei.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220926_043920_728704_06B9FC80 X-CRM114-Status: GOOD ( 22.05 ) 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgrlnKggMjAyMi85LzI0IFBNNDowMCwgWWljb25nIFlhbmcg5YaZ6YGTOgo+IE9uIDIwMjIvOS8y MyAyMzo0MywgU2h1YWkgWHVlIHdyb3RlOgo+Pgo+Pgo+PiDlnKggMjAyMi85LzIzIEFNMTE6MzAs IFlpY29uZyBZYW5nIOWGmemBkzoKPj4+IE9uIDIwMjIvOS8xNyAyMDoxMCwgU2h1YWkgWHVlIHdy b3RlOgo+Pj4+IFRoaXMgY29tbWl0IGFkZHMgdGhlIFBDSWUgUGVyZm9ybWFuY2UgTW9uaXRvcmlu ZyBVbml0IChQTVUpIGRyaXZlciBzdXBwb3J0Cj4+Pj4gZm9yIFQtSGVhZCBZaXRpYW4gU29DIGNo aXAuIFlpdGlhbiBpcyBiYXNlZCBvbiB0aGUgU3lub3BzeXMgUENJIEV4cHJlc3MKPj4+PiBDb3Jl IGNvbnRyb2xsZXIgSVAgd2hpY2ggcHJvdmlkZXMgc3RhdGlzdGljcyBmZWF0dXJlLiBUaGUgUE1V IGlzIG5vdCBhIFBDSWUKPj4+PiBSb290IENvbXBsZXggaW50ZWdyYXRlZCBFbmQgUG9pbnQoUkNp RVApIGRldmljZSBidXQgb25seSByZWdpc3RlciBjb3VudGVycwo+Pj4+IHByb3ZpZGVkIGJ5IGVh Y2ggUENJZSBSb290IFBvcnQuCj4+Pj4KPj4+PiBUbyBmYWNpbGl0YXRlIGNvbGxlY3Rpb24gb2Yg c3RhdGlzdGljcyB0aGUgY29udHJvbGxlciBwcm92aWRlcyB0aGUKPj4+PiBmb2xsb3dpbmcgdHdv IGZlYXR1cmVzIGZvciBlYWNoIFJvb3QgUG9ydDoKPj4+Pgo+Pj4+IC0gVGltZSBCYXNlZCBBbmFs eXNpcyAoUlgvVFggZGF0YSB0aHJvdWdocHV0IGFuZCB0aW1lIHNwZW50IGluIGVhY2gKPj4+PiAg IGxvdy1wb3dlciBMVFNTTSBzdGF0ZSkKPj4+PiAtIEV2ZW50IGNvdW50ZXJzIChFcnJvciBhbmQg Tm9uLUVycm9yIGZvciBsYW5lcykKPj4+Pgo+Pj4+IE5vdGUsIG9ubHkgb25lIGNvdW50ZXIgZm9y IGVhY2ggdHlwZS4KPj4+Pgo+Pj4+IFRoaXMgZHJpdmVyIGFkZCBQTVUgZGV2aWNlcyBmb3IgZWFj aCBQQ0llIFJvb3QgUG9ydC4gQW5kIHRoZSBQTVUgZGV2aWNlIGlzCj4+Pj4gbmFtZWQgYmFzZWQg dGhlIEJERiBvZiBSb290IFBvcnQuIEZvciBleGFtcGxlLAo+Pj4+Cj4+Pj4gICAgIDEwOjAwLjAg UENJIGJyaWRnZTogRGV2aWNlIDFkZWQ6ODAwMCAocmV2IDAxKQo+Pj4+Cj4+Pj4gdGhlIFBNVSBk ZXZpY2UgbmFtZSBmb3IgdGhpcyBSb290IFBvcnQgaXMgcGNpZV9iZGZfMTAwMDAwLgo+Pj4+Cj4+ Pj4gRXhhbXBsZSB1c2FnZSBvZiBjb3VudGluZyBQQ0llIFJYIFRMUCBkYXRhIHBheWxvYWQgKFVu aXRzIG9mIDE2IGJ5dGVzKTo6Cj4+Pj4KPj4+PiAgICAgJCMgcGVyZiBzdGF0IC1hIC1lIHBjaWVf YmRmXzIwMC9SeF9QQ0llX1RMUF9EYXRhX1BheWxvYWQvCj4+Pj4KPj4+PiBhdmVyYWdlIFJYIGJh bmR3aWR0aCBjYW4gYmUgY2FsY3VsYXRlZCBsaWtlIHRoaXM6Cj4+Pj4KPj4+PiAgICAgUENJZSBU WCBCYW5kd2lkdGggPSBQQ0lFX1RYX0RBVEEgKiAxNkIgLyBNZWFzdXJlX1RpbWVfV2luZG93Cj4+ Pj4KPj4+PiBTaWduZWQtb2ZmLWJ5OiBTaHVhaSBYdWUgPHh1ZXNodWFpQGxpbnV4LmFsaWJhYmEu Y29tPgo+Pj4+IC0tLQo+Pj4+ICBkcml2ZXJzL3BlcmYvS2NvbmZpZyAgICAgICAgfCAgIDcgKwo+ Pj4+ICBkcml2ZXJzL3BlcmYvTWFrZWZpbGUgICAgICAgfCAgIDEgKwo+Pj4+ICBkcml2ZXJzL3Bl cmYvZHdjX3BjaWVfcG11LmMgfCA5NzYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCj4+Pj4gIDMgZmlsZXMgY2hhbmdlZCwgOTg0IGluc2VydGlvbnMoKykKPj4+PiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvcGVyZi9kd2NfcGNpZV9wbXUuYwo+Pj4+Cj4+Pj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvcGVyZi9LY29uZmlnIGIvZHJpdmVycy9wZXJmL0tjb25maWcKPj4+PiBp bmRleCAxZTJkNjk0NTM3NzEuLjExYWU5OWRlNWJiZiAxMDA2NDQKPj4+PiAtLS0gYS9kcml2ZXJz L3BlcmYvS2NvbmZpZwo+Pj4+ICsrKyBiL2RyaXZlcnMvcGVyZi9LY29uZmlnCj4+Pj4gQEAgLTE5 Miw0ICsxOTIsMTEgQEAgY29uZmlnIE1BUlZFTExfQ04xMEtfRERSX1BNVQo+Pj4+ICAJICBFbmFi bGUgcGVyZiBzdXBwb3J0IGZvciBNYXJ2ZWxsIEREUiBQZXJmb3JtYW5jZSBtb25pdG9yaW5nCj4+ Pj4gIAkgIGV2ZW50IG9uIENOMTBLIHBsYXRmb3JtLgo+Pj4+ICAKPj4+PiArY29uZmlnIENPTkZJ R19EV0NfUENJRV9QTVUKPj4+PiArCXRyaXN0YXRlICJFbmFibGUgU3lub3BzeXMgRGVzaWduV2Fy ZSBQQ0llIFBNVSBTdXBwb3J0Igo+Pj4+ICsJZGVwZW5kcyBvbiBBUk02NCB8fCAoQ09NUElMRV9U RVNUICYmIDY0QklUKQo+Pj4+ICsJaGVscAo+Pj4+ICsJICBFbmFibGUgcGVyZiBzdXBwb3J0IGZv ciBTeW5vcHN5cyBEZXNpZ25XYXJlIFBDSWUgUE1VIFBlcmZvcm1hbmNlCj4+Pj4gKwkgIG1vbml0 b3JpbmcgZXZlbnQgb24gWWl0YW4gNzEwIHBsYXRmb3JtLgo+Pj4+ICsKPj4+PiAgZW5kbWVudQo+ Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BlcmYvTWFrZWZpbGUgYi9kcml2ZXJzL3BlcmYvTWFr ZWZpbGUKPj4+PiBpbmRleCA1N2EyNzljNjFkZjUuLjM2Zjc1Y2IwZjMyMCAxMDA2NDQKPj4+PiAt LS0gYS9kcml2ZXJzL3BlcmYvTWFrZWZpbGUKPj4+PiArKysgYi9kcml2ZXJzL3BlcmYvTWFrZWZp bGUKPj4+PiBAQCAtMjAsMyArMjAsNCBAQCBvYmotJChDT05GSUdfQVJNX0RNQzYyMF9QTVUpICs9 IGFybV9kbWM2MjBfcG11Lm8KPj4+PiAgb2JqLSQoQ09ORklHX01BUlZFTExfQ04xMEtfVEFEX1BN VSkgKz0gbWFydmVsbF9jbjEwa190YWRfcG11Lm8KPj4+PiAgb2JqLSQoQ09ORklHX01BUlZFTExf Q04xMEtfRERSX1BNVSkgKz0gbWFydmVsbF9jbjEwa19kZHJfcG11Lm8KPj4+PiAgb2JqLSQoQ09O RklHX0FQUExFX00xX0NQVV9QTVUpICs9IGFwcGxlX20xX2NwdV9wbXUubwo+Pj4+ICtvYmotJChD T05GSUdfRFdDX1BDSUVfUE1VKSArPSBkd2NfcGNpZV9wbXUubwo+Pj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL3BlcmYvZHdjX3BjaWVfcG11LmMgYi9kcml2ZXJzL3BlcmYvZHdjX3BjaWVfcG11LmMK Pj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uODFlNTM0 YmUxM2ZhCj4+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4+ICsrKyBiL2RyaXZlcnMvcGVyZi9kd2NfcGNp ZV9wbXUuYwo+Pj4+IEBAIC0wLDAgKzEsOTc2IEBACj4+Pj4gKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wCj4+Pj4gKy8qCj4+Pj4gKyAqIFN5bm9wc3lzIERlc2lnbldhcmUgUENJ ZSBQTVUgZHJpdmVyCj4+Pj4gKyAqCj4+Pj4gKyAqIENvcHlyaWdodCAoQykgMjAyMSwgMjAyMiBB bGliYWJhIEluYy4KPj4+PiArICovCj4+Pj4gK8KgCj4+Pj4gKyNpbmNsdWRlIDxsaW51eC9wY2ku aD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+Cj4+Pj4gKyNpbmNsdWRlIDxsaW51 eC9iaXRvcHMuaD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4L2NwdWhvdHBsdWcuaD4KPj4+PiArI2lu Y2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ Pj4+ICsjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4L2tlcm5l bC5oPgo+Pj4+ICsjaW5jbHVkZSA8bGludXgvbGlzdC5oPgo+Pj4+ICsjaW5jbHVkZSA8bGludXgv cGVyZl9ldmVudC5oPgo+Pj4+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4+ Pj4gKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+ Cj4+Pj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+Pj4+ICsKPj4+PiArI2RlZmluZSBEUlZf TkFNRQkJCQkiZHdjX3BjaWVfcG11Igo+Pj4+ICsjZGVmaW5lIERFVl9OQU1FCQkJCSJkd2NfcGNp ZV9wbXUiCj4+Pj4gKyNkZWZpbmUgUlBfTlVNX01BWAkJCQkzMiAvKiAyZGllICogNFJDICogNEN0 cm9sICovCj4+Pj4gKyNkZWZpbmUgQVRUUklfTkFNRV9NQVhfU0laRQkJCTMyCj4+Pj4gKwo+Pj4+ ICsjZGVmaW5lIERXQ19QQ0lFX1ZTRUNfSUQJCQkweDAyCj4+Pj4gKyNkZWZpbmUgRFdDX1BDSUVf VlNFQ19SRVYJCQkweDA0Cj4+Pj4gKwo+Pj4+ICsjZGVmaW5lIERXQ19QQ0lFX0xJTktfQ0FQQUJJ TElUSUVTX1JFRwkJMHhDCj4+Pj4gKyNkZWZpbmUgRFdDX1BDSUVfTEFORV9TSElGVAkJCTQKPj4+ PiArI2RlZmluZSBEV0NfUENJRV9MQU5FX01BU0sJCQlHRU5NQVNLKDksIDQpCj4+Pj4gKwo+Pj4+ ICsjZGVmaW5lIERXQ19QQ0lFX0VWRU5UX0NOVF9DVFJMCQkJMHg4Cj4+Pj4gKyNkZWZpbmUgRFdD X1BDSUVfX0NOVF9FVkVOVF9TRUxFQ1RfU0hJRlQJMTYKPj4+PiArI2RlZmluZSBEV0NfUENJRV9f Q05UX0VWRU5UX1NFTEVDVF9NQVNLCQlHRU5NQVNLKDI3LCAxNikKPj4+PiArI2RlZmluZSBEV0Nf UENJRV9fQ05UX0xBTkVfU0VMRUNUX1NISUZUCQk4Cj4+Pj4gKyNkZWZpbmUgRFdDX1BDSUVfX0NO VF9MQU5FX1NFTEVDVF9NQVNLCQlHRU5NQVNLKDExLCA4KQo+Pj4+ICsjZGVmaW5lIERXQ19QQ0lF X19DTlRfU1RBVFVTX1NISUZUCQk3Cj4+Pj4gKyNkZWZpbmUgRFdDX1BDSUVfX0NOVF9TVEFUVVNf TUFTSwkJQklUKDcpCj4+Pj4gKyNkZWZpbmUgRFdDX1BDSUVfX0NOVF9FTkFCTEVfU0hJRlQJCTIK Pj4+PiArI2RlZmluZSBEV0NfUENJRV9fQ05UX0VOQUJMRV9NQVNLCQlHRU5NQVNLKDQsIDIpCj4+ Pj4gKyNkZWZpbmUgRFdDX1BDSUVfUEVSX0VWRU5UX09GRgkJCSgweDEgPDwgRFdDX1BDSUVfX0NO VF9FTkFCTEVfU0hJRlQpCj4+Pj4gKyNkZWZpbmUgRFdDX1BDSUVfUEVSX0VWRU5UX09OCQkJKDB4 MyA8PCBEV0NfUENJRV9fQ05UX0VOQUJMRV9TSElGVCkKPj4+PiArI2RlZmluZSBEV0NfUENJRV9F VkVOVF9DTEVBUl9NQVNLCQlHRU5NQVNLKDEsIDApCj4+Pj4gKwo+Pj4+ICsjZGVmaW5lIERXQ19Q Q0lFX0VWRU5UX0NOVF9EQVRBCQkJMHhDCj4+Pj4gKwo+Pj4+ICsjZGVmaW5lIERXQ19QQ0lFX1RJ TUVfQkFTRURfQU5BTFlTSVNfQ1RSTAkweDEwCj4+Pj4gKyNkZWZpbmUgRFdDX1BDSUVfX1RJTUVf QkFTRURfUkVQT1JUX1NFTEVDVF9TSElGVAkyNAo+Pj4+ICsjZGVmaW5lIERXQ19QQ0lFX19USU1F X0JBU0VEX1JFUE9SVF9TRUxFQ1RfTUFTSwlHRU5NQVNLKDMxLCAyNCkKPj4+PiArI2RlZmluZSBE V0NfUENJRV9fVElNRV9CQVNFRF9EVVJBVElPTl9TSElGVAk4Cj4+Pj4gKyNkZWZpbmUgRFdDX1BD SUVfX1RJTUVfQkFTRURfRFVSQVRJT05fU0VMRUNUCUdFTk1BU0soMTUsIDgpCj4+Pj4gKyNkZWZp bmUgRFdDX1BDSUVfRFVSQVRJT05fTUFOVUFMX0NUUkwJCTB4MAo+Pj4+ICsjZGVmaW5lIERXQ19Q Q0lFX0RVUkFUSU9OXzFNUwkJCTB4MQo+Pj4+ICsjZGVmaW5lIERXQ19QQ0lFX0RVUkFUSU9OXzEw TVMJCQkweDIKPj4+PiArI2RlZmluZSBEV0NfUENJRV9EVVJBVElPTl8xMDBNUwkJCTB4Mwo+Pj4+ ICsjZGVmaW5lIERXQ19QQ0lFX0RVUkFUSU9OXzFTCQkJMHg0Cj4+Pj4gKyNkZWZpbmUgRFdDX1BD SUVfRFVSQVRJT05fMlMJCQkweDUKPj4+PiArI2RlZmluZSBEV0NfUENJRV9EVVJBVElPTl80UwkJ CTB4Ngo+Pj4+ICsjZGVmaW5lIERXQ19QQ0lFX0RVUkFUSU9OXzRVUwkJCTB4ZmYKPj4+PiArI2Rl ZmluZSBEV0NfUENJRV9fVElNRV9CQVNFRF9DT1VOVEVSX0VOQUJMRQkxCj4+Pj4gKwo+Pj4+ICsj ZGVmaW5lIERXQ19QQ0lFX1RJTUVfQkFTRURfQU5BTFlTSVNfREFUQV9SRUdfTE9XCTB4MTQKPj4+ PiArI2RlZmluZSBEV0NfUENJRV9USU1FX0JBU0VEX0FOQUxZU0lTX0RBVEFfUkVHX0hJR0gJMHgx OAo+Pj4+ICsKPj4+PiArLyogRXZlbnQgYXR0cmlidXRlcyAqLwo+Pj4+ICsjZGVmaW5lIERXQ19Q Q0lFX0NPTkZJR19FVkVOVElECQkJR0VOTUFTSygxNSwgMCkKPj4+PiArI2RlZmluZSBEV0NfUENJ RV9DT05GSUdfVFlQRQkJCUdFTk1BU0soMTksIDE2KQo+Pj4+ICsjZGVmaW5lIERXQ19QQ0lFX0NP TkZJR19MQU5FCQkJR0VOTUFTSygyNywgMjApCj4+Pj4gKwo+Pj4+ICsjZGVmaW5lIERXQ19QQ0lF X0VWRU5UX0lEKGV2ZW50KQlGSUVMRF9HRVQoRFdDX1BDSUVfQ09ORklHX0VWRU5USUQsIChldmVu dCktPmF0dHIuY29uZmlnKQo+Pj4+ICsjZGVmaW5lIERXQ19QQ0lFX0VWRU5UX1RZUEUoZXZlbnQp CUZJRUxEX0dFVChEV0NfUENJRV9DT05GSUdfVFlQRSwgKGV2ZW50KS0+YXR0ci5jb25maWcpCj4+ Pj4gKyNkZWZpbmUgRFdDX1BDSUVfRVZFTlRfTEFORShldmVudCkJRklFTERfR0VUKERXQ19QQ0lF X0NPTkZJR19MQU5FLCAoZXZlbnQpLT5hdHRyLmNvbmZpZykKPj4+PiArCj4+Pj4gKyNkZWZpbmUg RFdDX1BDSUVfUE1VX0hBU19SRUdJU1RFUgkJMQo+Pj4+ICsKPj4+PiArZW51bSBkd2NfcGNpZV9l dmVudF90eXBlIHsKPj4+PiArCURXQ19QQ0lFX1RZUEVfSU5WQUxJRCwKPj4+PiArCURXQ19QQ0lF X1RJTUVfQkFTRV9FVkVOVCwKPj4+PiArCURXQ19QQ0lFX0xBTkVfRVZFTlQsCj4+Pj4gK307Cj4+ Pj4gKwo+Pj4+ICtzdHJ1Y3QgZHdjX2V2ZW50X2NvdW50ZXJzIHsKPj4+PiArCWNvbnN0IGNoYXIg bmFtZVszMl07Cj4+Pj4gKwl1MzIgZXZlbnRfaWQ7Cj4+Pj4gK307Cj4+Pj4gKwo+Pj4+ICtzdHJ1 Y3QgZHdjX3BjaWVfcG11IHsKPj4+PiArCXN0cnVjdCBobGlzdF9ub2RlIG5vZGU7Cj4+Pj4gKwl1 bnNpZ25lZCBpbnQgb25fY3B1Owo+Pj4+ICsJc3RydWN0IHBtdSBwbXU7Cj4+Pj4gKwlzdHJ1Y3Qg ZGV2aWNlICpkZXY7Cj4+Pj4gK307Cj4+Pj4gKwo+Pj4+ICtzdHJ1Y3QgZHdjX3BjaWVfaW5mb190 YWJsZSB7Cj4+Pj4gKwl1MzIgYmRmOwo+Pj4+ICsJdTMyIGNhcF9wb3M7Cj4+Pj4gKwl1MzIgbnVt X2xhbmVzOwo+Pj4+ICsJc3RydWN0IHBjaV9kZXYgKnBkZXY7Cj4+Pj4gKwlzdHJ1Y3QgZHdjX3Bj aWVfcG11IHBjaWVfcG11Owo+Pj4+ICsJdTggcG11X2lzX3JlZ2lzdGVyOwo+Pj4+ICsJc3RydWN0 IHBlcmZfZXZlbnQgKmV2ZW50Owo+Pj4+ICsKPj4+PiArCXN0cnVjdCBkd2NfcGNpZV9ldmVudF9h dHRyICpsYW5lX2V2ZW50X2F0dHJzOwo+Pj4+ICsJc3RydWN0IGF0dHJpYnV0ZSAqKnBjaWVfcG11 X2V2ZW50X2F0dHJzOwo+Pj4+ICsJc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBwY2llX3BtdV9ldmVu dF9hdHRyc19ncm91cDsKPj4+PiArCWNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnBjaWVf cG11X2F0dHJfZ3JvdXBzWzRdOwo+Pj4+ICt9Owo+Pj4+ICsKPj4+PiArc3RydWN0IGR3Y19wY2ll X3BtdV9wcml2IHsKPj4+PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPj4+PiArCXUzMiBwY2llX2N0 cmxfbnVtOwo+Pj4+ICsJc3RydWN0IGR3Y19wY2llX2luZm9fdGFibGUgKnBjaWVfdGFibGU7Cj4+ Pj4gK307Cj4+Pj4gKwo+Pj4+ICsjZGVmaW5lIERXQ19QQ0lFX0NSRUFURV9CREYoc2VnLCBidXMs IGRldiwgZnVuYykJXAo+Pj4+ICsJKCgoc2VnKSA8PCAyNCkgfCAoKChidXMpICYgMHhGRikgPDwg MTYpIHwgKCgoZGV2KSAmIDB4RkYpIDw8IDgpIHwgKGZ1bmMpKQo+Pj4KPj4+IEp1c3QgcGFzcyBw ZGV2LT5kZXZmbiBhbmQgdXNlIFBDSV9ERVZJRCgpIHRvIHNpbXBsaWZ5IGhlcmUuCj4+Cj4+IFNv cnJ5LCBhcyBmYXIgYXMgSSBrbm93LCBQQ0lfREVWSUQoKSBvdXRwdXQgaXMgbm90IGV4YWN0bHkg dGhlIGJkZi4KPj4gRm9yIGV4YW1wbGUsIGJkZiAzMDAxMDAgaXMgZGVjb2RlZCBhcyAzMDA4Lgo+ Pgo+IAo+IFNlZSB0aGUgc3RhbmRhcmQncyBlbmNvZGluZyBvZiBCREYgKFBDSWUgU3BlYyA0LjAg RmlndXJlIDYtMzQ6IFJvdXRpbmcgSURzIChSSURzKSBhbmQgU3VwcG9ydGVkCj4gR3JhbnVsYXJp dGllcykuIEFsc28gaW4gdWFwaS9saW51eC9wY2kuaCBhbmQgaW5jbHVkZS9saW51eC9wY2kuaC4g QnVzIG51bWJlciBpcyBlbmNvZGluZyBpbgo+IEJJVFsxNSwgOF0sIHNsb3QgbnVtYmVyIGluIEJJ VFs3LCAzXSBhbmQgZnVuY3Rpb24gbnVtYmVyIGZvciBCSVRbMiwgMF0uCgpZZXAsIGl0J3Mgcmln aHQuIFBDSV9TTE9UIGFuZCBQQ0lfRlVOQyBkZWZpbmVkIGluIHVhcGkvbGludXgvcGNpLmggZm9s bG93cyBQQ0llIFNwZWMKNC4wIHN0YW5kYXJkLgoKPiAKPiBZb3UncmUgdXNlIHlvdXIgY29kaW5n IG9mICJCREYiIGhlcmUgYW5kIHRob3VnaHQgaXQncyBtb3JlIGNvbnZlbmllbnQgdG8gdGhlIHVz ZXIgdG8gcmVjb2duaXplLCBidXQKPiB0aGF0J3Mgbm90IHdoYXQgaXMga25vd24gb2YgQkRGLiBK dXN0IHVzZSB0aGUgc3RhbmRhcmQgY29kaW5nIG9mIEJERiB3aWxsIGhhdmUgbGVzcyBhbWJpZ3Vv dXMuCgpNeSBjb2Rpbmcgb2YgIkJERiIgaXMgYmFzZWQgb24gdGhlIG91dHB1dCBmb3JtYXQgb2Yg QkRGLCBmb3IgZXhhbXBsZSwgbW9zdCBvZiBrZXJuZWwKY29kZSBzcGxpdCBkZXZmbiB0byBTTE9U IGFuZCBGVU5DIHdoZW4gcHJpbnQgdGhlIHRoZSBwY2llIGFkZHJlc3MuIEZvciBleGFtcGxlOgoK CS8vIHBjaV9hZGRyX3Nob3cgaW4gZHJpdmVycy9taXNjL2hhYmFuYWxhYnMvY29tbW9uL3N5c2Zz LmMKCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiUwNHg6JTAyeDolMDJ4LiV4XG4iLAoJCQlwY2lfZG9t YWluX25yKGhkZXYtPnBkZXYtPmJ1cyksCgkJCWhkZXYtPnBkZXYtPmJ1cy0+bnVtYmVyLAoJCQlQ Q0lfU0xPVChoZGV2LT5wZGV2LT5kZXZmbiksCgkJCVBDSV9GVU5DKGhkZXYtPnBkZXYtPmRldmZu KSk7CgpBbmQgdGhlIHBjaSBhZGRyZXNzIGlzIGNvbnNpc3RlbnQgd2l0aCBsc3BjaSBvdXRwdXQs IHdoaWNoIGlzIHdoYXQgSSBpbnRlbmQgdG8gZG8uClNob3VsZCB3ZSByZW5hbWUgRFdDX1BDSUVf Q1JFQVRFX0JERiB0byBEV0NfUENJRV9DUkVBVEVfUENJX0FERFJFU1M/Cgo+IAo+Pj4KPj4+PiAr I2RlZmluZSB0b19wY2llX3BtdShwKSAoY29udGFpbmVyX29mKHAsIHN0cnVjdCBkd2NfcGNpZV9w bXUsIHBtdSkpCj4+Pj4gKwo+Pj4+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZHdj X3BjaWVfcG11X2RldjsKPj4+PiArc3RhdGljIGNoYXIgKmV2ZW50X2F0dHJfbmFtZSA9ICJldmVu dHMiOwo+Pj4+ICsKPj4+PiArc3RhdGljIHNzaXplX3QgZHdjX3BjaWVfcG11X2NwdW1hc2tfc2hv dyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4+Pj4gKwkJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRl ICphdHRyLAo+Pj4+ICsJCQkJCSBjaGFyICpidWYpCj4+Pj4gK3sKPj4+PiArCXN0cnVjdCBkd2Nf cGNpZV9wbXUgKnBjaWVfcG11ID0gdG9fcGNpZV9wbXUoZGV2X2dldF9kcnZkYXRhKGRldikpOwo+ Pj4+ICsKPj4+PiArCXJldHVybiBjcHVtYXBfcHJpbnRfdG9fcGFnZWJ1Zih0cnVlLCBidWYsIGNw dW1hc2tfb2YocGNpZV9wbXUtPm9uX2NwdSkpOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMg c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZHdjX3BjaWVfcG11X2NwdW1hc2tfYXR0ciA9Cj4+Pj4g K19fQVRUUihjcHVtYXNrLCAwNDQ0LCBkd2NfcGNpZV9wbXVfY3B1bWFza19zaG93LCBOVUxMKTsK Pj4+PiArCj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkd2NfcGNpZV9wbXVfY3B1bWFz a19hdHRyc1tdID0gewo+Pj4+ICsJJmR3Y19wY2llX3BtdV9jcHVtYXNrX2F0dHIuYXR0ciwKPj4+ PiArCU5VTEwKPj4+PiArfTsKPj4+PiArCj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dy b3VwIHBjaWVfcG11X2NwdW1hc2tfYXR0cnNfZ3JvdXAgPSB7Cj4+Pj4gKwkuYXR0cnMgPSBkd2Nf cGNpZV9wbXVfY3B1bWFza19hdHRycywKPj4+PiArfTsKPj4+PiArCj4+Pj4gK3N0cnVjdCBkd2Nf cGNpZV9mb3JtYXRfYXR0ciB7Cj4+Pj4gKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBhdHRyOwo+ Pj4+ICsJdTY0IGZpZWxkOwo+Pj4+ICsJaW50IGNvbmZpZzsKPj4+PiArfTsKPj4+PiArCj4+Pj4g K3N0YXRpYyBzc2l6ZV90IGR3Y19wY2llX3BtdV9mb3JtYXRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpk ZXYsCj4+Pj4gKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4+Pj4gKwkJCQkJ Y2hhciAqYnVmKQo+Pj4+ICt7Cj4+Pj4gKwlzdHJ1Y3QgZHdjX3BjaWVfZm9ybWF0X2F0dHIgKmZt dCA9IGNvbnRhaW5lcl9vZihhdHRyLCB0eXBlb2YoKmZtdCksIGF0dHIpOwo+Pj4+ICsJaW50IGxv ID0gX19mZnMoZm10LT5maWVsZCksIGhpID0gX19mbHMoZm10LT5maWVsZCk7Cj4+Pj4gKwo+Pj4+ ICsJaWYgKGxvID09IGhpKQo+Pj4+ICsJCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwg ImNvbmZpZzolZFxuIiwgbG8pOwo+Pj4+ICsKPj4+PiArCWlmICghZm10LT5jb25maWcpCj4+Pj4g KwkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiY29uZmlnOiVkLSVkXG4iLCBsbywg aGkpOwo+Pj4+ICsKPj4+PiArCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgImNvbmZp ZyVkOiVkLSVkXG4iLCBmbXQtPmNvbmZpZywgbG8sCj4+Pj4gKwkJCWhpKTsKPj4+PiArfQo+Pj4+ ICsKPj4+PiArI2RlZmluZSBfZHdjX3BjaWVfZm9ybWF0X2F0dHIoX25hbWUsIF9jZmcsIF9mbGQp CQkJCVwKPj4+PiArCSgmKChzdHJ1Y3QgZHdjX3BjaWVfZm9ybWF0X2F0dHJbXSkge3sJCQkJXAo+ Pj4+ICsJCS5hdHRyID0gX19BVFRSKF9uYW1lLCAwNDQ0LCBkd2NfcGNpZV9wbXVfZm9ybWF0X3No b3csIE5VTEwpLAlcCj4+Pj4gKwkJLmNvbmZpZyA9IF9jZmcsCQkJCQkJXAo+Pj4+ICsJCS5maWVs ZCA9IF9mbGQsCQkJCQkJXAo+Pj4+ICsJfX0pWzBdLmF0dHIuYXR0cikKPj4+PiArCj4+Pj4gKyNk ZWZpbmUgZHdjX3BjaWVfZm9ybWF0X2F0dHIoX25hbWUsIF9mbGQpCV9kd2NfcGNpZV9mb3JtYXRf YXR0cihfbmFtZSwgMCwgX2ZsZCkKPj4+PiArCj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRl ICpkd2NfcGNpZV9mb3JtYXRfYXR0cnNbXSA9IHsKPj4+PiArCWR3Y19wY2llX2Zvcm1hdF9hdHRy KHR5cGUsIERXQ19QQ0lFX0NPTkZJR19UWVBFKSwKPj4+PiArCWR3Y19wY2llX2Zvcm1hdF9hdHRy KGV2ZW50aWQsIERXQ19QQ0lFX0NPTkZJR19FVkVOVElEKSwKPj4+PiArCWR3Y19wY2llX2Zvcm1h dF9hdHRyKGxhbmUsIERXQ19QQ0lFX0NPTkZJR19MQU5FKSwKPj4+PiArCU5VTEwsCj4+Pj4gK307 Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBwY2llX3BtdV9mb3Jt YXRfYXR0cnNfZ3JvdXAgPSB7Cj4+Pj4gKwkubmFtZSA9ICJmb3JtYXQiLAo+Pj4+ICsJLmF0dHJz ID0gZHdjX3BjaWVfZm9ybWF0X2F0dHJzLAo+Pj4+ICt9Owo+Pj4+ICsKPj4+PiArc3RydWN0IGR3 Y19wY2llX2V2ZW50X2F0dHIgewo+Pj4+ICsJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYXR0cjsK Pj4+PiArCWVudW0gZHdjX3BjaWVfZXZlbnRfdHlwZSB0eXBlOwo+Pj4+ICsJdTE2IGV2ZW50aWQ7 Cj4+Pj4gKwl1OCBsYW5lOwo+Pj4+ICt9Owo+Pj4+ICsKPj4+PiArc3NpemVfdCBkd2NfcGNpZV9l dmVudF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKPj4+PiArCQkJCXN0cnVjdCBkZXZpY2VfYXR0 cmlidXRlICphdHRyLCBjaGFyICpwYWdlKQo+Pj4+ICt7Cj4+Pj4gKwlzdHJ1Y3QgZHdjX3BjaWVf ZXZlbnRfYXR0ciAqZWF0dHI7Cj4+Pj4gKwo+Pj4+ICsJZWF0dHIgPSBjb250YWluZXJfb2YoYXR0 ciwgdHlwZW9mKCplYXR0ciksIGF0dHIpOwo+Pj4+ICsKPj4+PiArCWlmIChlYXR0ci0+dHlwZSA9 PSBEV0NfUENJRV9MQU5FX0VWRU5UKQo+Pj4+ICsJCXJldHVybiBzcHJpbnRmKHBhZ2UsICJldmVu dGlkPTB4JWx4LCB0eXBlPTB4JWx4LCBsYW5lPTB4JWx4XG4iLAo+Pj4+ICsJCQkgICAgICAgKHVu c2lnbmVkIGxvbmcpZWF0dHItPmV2ZW50aWQsCj4+Pj4gKwkJCSAgICAgICAodW5zaWduZWQgbG9u ZyllYXR0ci0+dHlwZSwKPj4+PiArCQkJICAgICAgICh1bnNpZ25lZCBsb25nKWVhdHRyLT5sYW5l KTsKPj4+PiArCWVsc2UKPj4+PiArCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiZXZlbnRpZD0weCVs eCwgdHlwZT0weCVseCIsCj4+Pj4gKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyllYXR0ci0+ZXZl bnRpZCwKPj4+PiArCQkJICAgICAgICh1bnNpZ25lZCBsb25nKWVhdHRyLT50eXBlKTsKPj4+PiAr fQo+Pj4KPj4+IEkgcmVtZW1iZXIgc3lzZnNfZW1pdCgpIGlzIHByZWZlcnJlZC4KPj4KPj4gWW91 IGFyZSByaWdodCwgSSB3aWxsIHVzZSBzeXNmc19lbWl0KCkgaW4gbmV4dCB2ZXJzaW9uLgo+Pgo+ Pj4KPj4+PiArCj4+Pj4gKyNkZWZpbmUgRFdDX1BDSUVfRVZFTlRfQVRUUihfbmFtZSwgX3R5cGUs IF9ldmVudGlkLCBfbGFuZSkJCVwKPj4+PiArCSgmKChzdHJ1Y3QgZHdjX3BjaWVfZXZlbnRfYXR0 cltdKSB7ewkJCQlcCj4+Pj4gKwkJLmF0dHIgPSBfX0FUVFIoX25hbWUsIDA0NDQsIGR3Y19wY2ll X2V2ZW50X3Nob3csIE5VTEwpLAlcCj4+Pj4gKwkJLnR5cGUgPSBfdHlwZSwJCQkJCQlcCj4+Pj4g KwkJLmV2ZW50aWQgPSBfZXZlbnRpZCwJCQkJCVwKPj4+PiArCQkubGFuZSA9IF9sYW5lLAkJCQkJ XAo+Pj4+ICsJfX0pWzBdLmF0dHIuYXR0cikKPj4+PiArCj4+Pj4gKyNkZWZpbmUgRFdDX1BDSUVf UE1VX0JBU0VfVElNRV9BVFRSKF9uYW1lLCBfZXZlbnRpZCkJCQlcCj4+Pj4gKwlEV0NfUENJRV9F VkVOVF9BVFRSKF9uYW1lLCBEV0NfUENJRV9USU1FX0JBU0VfRVZFTlQsIF9ldmVudGlkLCAwKQo+ Pj4+ICsKPj4+PiArc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmR3Y19wY2llX3BtdV90aW1lX2V2 ZW50X2F0dHJzW10gPSB7Cj4+Pj4gKwkvKiBHcm91cCAjMCAqLwo+Pj4+ICsJRFdDX1BDSUVfUE1V X0JBU0VfVElNRV9BVFRSKG9uZV9jeWNsZSwgMHgwMCksCj4+Pj4gKwlEV0NfUENJRV9QTVVfQkFT RV9USU1FX0FUVFIoVFhfTDBTLCAweDAxKSwKPj4+PiArCURXQ19QQ0lFX1BNVV9CQVNFX1RJTUVf QVRUUihSWF9MMFMsIDB4MDIpLAo+Pj4+ICsJRFdDX1BDSUVfUE1VX0JBU0VfVElNRV9BVFRSKEww LCAweDAzKSwKPj4+PiArCURXQ19QQ0lFX1BNVV9CQVNFX1RJTUVfQVRUUihMMSwgMHgwNCksCj4+ Pj4gKwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoTDFfMSwgMHgwNSksCj4+Pj4gKwlEV0Nf UENJRV9QTVVfQkFTRV9USU1FX0FUVFIoTDFfMiwgMHgwNiksCj4+Pj4gKwlEV0NfUENJRV9QTVVf QkFTRV9USU1FX0FUVFIoQ0ZHX1JDVlJZLCAweDA3KSwKPj4+PiArCURXQ19QQ0lFX1BNVV9CQVNF X1RJTUVfQVRUUihUWF9SWF9MMFMsIDB4MDgpLAo+Pj4+ICsJRFdDX1BDSUVfUE1VX0JBU0VfVElN RV9BVFRSKEwxX0FVWCwgMHgwOSksCj4+Pj4gKwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIo T05FX2N5Y2xlLCAweDEwKSwKPj4+PiArCURXQ19QQ0lFX1BNVV9CQVNFX1RJTUVfQVRUUihUWF9M MFNfLCAweDExKSwKPj4+PiArCURXQ19QQ0lFX1BNVV9CQVNFX1RJTUVfQVRUUihSWF9MMFNfLCAw eDEyKSwKPj4+PiArCURXQ19QQ0lFX1BNVV9CQVNFX1RJTUVfQVRUUihMMF8sIDB4MTMpLAo+Pj4+ ICsJRFdDX1BDSUVfUE1VX0JBU0VfVElNRV9BVFRSKEwxXywgMHgxNyksCj4+Pj4gKwlEV0NfUENJ RV9QTVVfQkFTRV9USU1FX0FUVFIoQ0ZHX1JDVlJZXywgMHgxNyksCj4+Pj4gKwlEV0NfUENJRV9Q TVVfQkFTRV9USU1FX0FUVFIoVFhfUlhfTDBTXywgMHgxOCksCj4+Pj4gKwkvKiBHcm91cCAjMSAq Lwo+Pj4+ICsJRFdDX1BDSUVfUE1VX0JBU0VfVElNRV9BVFRSKFR4X1BDSWVfVExQX0RhdGFfUGF5 bG9hZCwgMHgyMCksCj4+Pj4gKwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoUnhfUENJZV9U TFBfRGF0YV9QYXlsb2FkLCAweDIxKSwKPj4+PiArCURXQ19QQ0lFX1BNVV9CQVNFX1RJTUVfQVRU UihUeF9DQ0lYX1RMUF9EYXRhX1BheWxvYWQsIDB4MjIpLAo+Pj4+ICsJRFdDX1BDSUVfUE1VX0JB U0VfVElNRV9BVFRSKFJ4X0NDSVhfVExQX0RhdGFfUGF5bG9hZCwgMHgyMyksCj4+Pj4gKwlOVUxM Cj4+Pj4gK307Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgaW5saW5lIHVtb2RlX3QgcGNpZV9wbXVfZXZl bnRfYXR0cl9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAo+Pj4+ICsJCQkJCQkgICAg IHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCj4+Pj4gKwkJCQkJCSAgICAgaW50IHVudXNlKQo+Pj4+ ICt7Cj4+Pj4gKwlyZXR1cm4gYXR0ci0+bW9kZTsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGlj IGlubGluZSBib29sIHBjaV9kZXZfaXNfcm9vdHBvcnQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCj4+ Pj4gK3sKPj4+PiArCXJldHVybiAocGNpX2lzX3BjaWUocGRldikgJiYKPj4+PiArCQlwY2lfcGNp ZV90eXBlKHBkZXYpID09IFBDSV9FWFBfVFlQRV9ST09UX1BPUlQpOwo+Pj4+ICt9Cj4+Pj4gKwo+ Pj4+ICtzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkd2NfcGNpZV9nZXRfYmRmKHN0cnVjdCBw Y2lfZGV2ICpkZXYpCj4+Pj4gK3sKPj4+PiArCXJldHVybiAoRFdDX1BDSUVfQ1JFQVRFX0JERihw Y2lfZG9tYWluX25yKGRldi0+YnVzKSwgZGV2LT5idXMtPm51bWJlciwKPj4+PiArCQkJCSAgICBQ Q0lfU0xPVChkZXYtPmRldmZuKSwKPj4+PiArCQkJCSAgICBQQ0lfRlVOQyhkZXYtPmRldmZuKSkp Owo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgaW50IGR3Y19wY2llX2ZpbmRfcmFzX2Rlc19j YXBfcG9zaXRpb24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCAqcG9zKQo+Pj4+ICt7Cj4+Pj4g Kwl1MzIgaGVhZGVyOwo+Pj4+ICsJaW50IHZzZWMgPSAwOwo+Pj4+ICsKPj4+PiArCXdoaWxlICgo dnNlYyA9IHBjaV9maW5kX25leHRfZXh0X2NhcGFiaWxpdHkocGRldiwgdnNlYywKPj4+PiArCQkJ CQkJICAgIFBDSV9FWFRfQ0FQX0lEX1ZORFIpKSkgewo+Pj4+ICsJCXBjaV9yZWFkX2NvbmZpZ19k d29yZChwZGV2LCB2c2VjICsgUENJX1ZORFJfSEVBREVSLCAmaGVhZGVyKTsKPj4+PiArCQkvKiBJ cyB0aGUgZGV2aWNlIHBhcnQgb2YgYSBEZXNpZ25XYXJlIENvcmVzIFBDSWUgQ29udHJvbGxlciA/ ICovCj4+Pj4gKwkJaWYgKFBDSV9WTkRSX0hFQURFUl9JRChoZWFkZXIpID09IERXQ19QQ0lFX1ZT RUNfSUQgJiYKPj4+PiArCQkgICAgUENJX1ZORFJfSEVBREVSX1JFVihoZWFkZXIpID09IERXQ19Q Q0lFX1ZTRUNfUkVWKSB7Cj4+Pj4gKwkJCSpwb3MgPSB2c2VjOwo+Pj4+ICsJCQlyZXR1cm4gMDsK Pj4+PiArCQl9Cj4+Pj4gKwl9Cj4+Pj4gKwo+Pj4+ICsJcmV0dXJuIC1FTk9ERVY7Cj4+Pj4gK30K Pj4+PiArCj4+Pj4gK3N0YXRpYyBpbnQgZHdjX3BjaWVfcG11X2Rpc2NvdmVyKHN0cnVjdCBkd2Nf cGNpZV9wbXVfcHJpdiAqcHJpdikKPj4+PiArewo+Pj4+ICsJaW50IHZhbCwgd2hlcmUsIGluZGV4 ID0gMDsKPj4+PiArCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKPj4+PiArCXN0cnVjdCBk d2NfcGNpZV9pbmZvX3RhYmxlICpwY2llX2luZm87Cj4+Pj4gKwo+Pj4+ICsJcHJpdi0+cGNpZV90 YWJsZSA9Cj4+Pj4gKwkgICAgZGV2bV9rY2FsbG9jKHByaXYtPmRldiwgUlBfTlVNX01BWCwgc2l6 ZW9mKCpwY2llX2luZm8pLCBHRlBfS0VSTkVMKTsKPj4+PiArCWlmICghcHJpdi0+cGNpZV90YWJs ZSkKPj4+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4+PiArCj4+Pj4gKwlwY2llX2luZm8gPSBwcml2 LT5wY2llX3RhYmxlOwo+Pj4+ICsJd2hpbGUgKChwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FO WV9JRCwgUENJX0FOWV9JRCwgcGRldikpICE9IE5VTEwgJiYKPj4+Cj4+PiBJIG1heSBtaXNzIGJ1 dCBJIGRvbid0IHBjaV9kZXZfcHV0KCkgdG8gYmFsYW5jZSB0aGUgcmVmZXJlbmNlIGNudC4KPj4K Pj4gQXMgdGhlIGNvbW1lbnRzIGluIHBjaV9nZXRfZGV2aWNlLCB0aGUgcmVmZXJlbmNlIGNvdW50 IGlzIGluY3JlbWVudGVkIGFuZAo+PiBkZWNyZW1lbnRlZCBpbiB0aGUgbG9vcCBhdXRvbWF0aWNh bGx5LiBTbyB3ZSBkbyBub3QgbmVlZCB0byB1c2UKPj4gcGNpX2Rldl9wdXQoKSwgcmlnaHQ/Cj4+ Cj4+IAlJdGVyYXRlcyB0aHJvdWdoIHRoZSBsaXN0IG9mIGtub3duIFBDSSBkZXZpY2VzLiAgSWYg YSBQQ0kgZGV2aWNlIGlzCj4+IAlmb3VuZCB3aXRoIGEgbWF0Y2hpbmcgQHZlbmRvciBhbmQgQGRl dmljZSwgKnRoZSByZWZlcmVuY2UgY291bnQgdG8gdGhlCj4+IAlkZXZpY2UgaXMgaW5jcmVtZW50 ZWQqIGFuZCBhIHBvaW50ZXIgdG8gaXRzIGRldmljZSBzdHJ1Y3R1cmUgaXMgcmV0dXJuZWQuCj4+ IAlPdGhlcndpc2UsICVOVUxMIGlzIHJldHVybmVkLiAgQSBuZXcgc2VhcmNoIGlzIGluaXRpYXRl ZCBieSBwYXNzaW5nICVOVUxMCj4+IAlhcyB0aGUgQGZyb20gYXJndW1lbnQuICBPdGhlcndpc2Ug aWYgQGZyb20gaXMgbm90ICVOVUxMLCBzZWFyY2hlcyBjb250aW51ZQo+PiAJZnJvbSBuZXh0IGRl dmljZSBvbiB0aGUgZ2xvYmFsIGxpc3QuICAqVGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgQGZyb20g aXMKPj4gCWFsd2F5cyBkZWNyZW1lbnRlZCBpZiBpdCBpcyBub3QgJU5VTEwuKgo+IAo+IFRoYW5r cyBmb3IgdGhlIGV4cGxhbmF0aW9uLiBUaGUgdXNhZ2UgaXMgcmlnaHQgaGVyZS4gQ2FuIHdlIHVz ZSBmb3JfZWFjaF9wY2lfZGV2KCkgaW5zdGVhZD8KClllcywgZm9yX2VhY2hfcGNpX2RldiBpcyBt b3JlIGVhc2llci4gQnV0IGFzIHdlIGRpc2N1c3NlZCB3aXRoIEpvbmF0aGFuOgoKCT4gVGhpcyBo YXZpbmcgYSBkcml2ZXIgdGhhbiB0aGVuIHdhbGtzIHRoZSBwY2kgdG9wb2xvZ3kgdG8gZmluZCBy b290IHBvcnRzIGFuZCBhZGQKCT4gZXh0cmEgc3R1ZmYgdG8gdGhlbSBpcyBub3QgYSBjbGVhbiBz b2x1dGlvbi4KCkRvIHdlIGhhdmUgYW55IHBsYW4gdG8gZXh0ZW5kIFBDSSBjb3JlIGludGVyZmFj ZT8KCgo+IEFuZCBhbnkgcmVhc29uIHRvIGxpbWl0IHRoZSBSb290IFBvcnRzIG51bWJlciB0byBS UF9OVU1fTUFYPyBTaG91bGRuJ3Qgd2UgZmluZCBhbGwgdGhlCj4gUm9vdCBQb3J0cyB3aXRoIFBN VSBjb3VudGVycyBhbmQgbWFrZSB1c2Ugb2YgdGhlbT8gTGltaXQgaXQgd2l0aCBSUF9OVU1fTUFY IGlzIHJhdGhlcgo+IHBsYXRmb3JtIHNwZWNpZmljIGFuZCB5b3UgbmVlZCB0byBleHRlbmQgaXQg aWYgd2UgaGF2ZSBtb3JlIFJvb3QgUG9ydHMgc29tZWRheS4KCk5vLiBJJ20gc29ycnkgSSBkaWRu J3QgY29uc2lkZXIgb3RoZXIgcGxhdGZvcm1zIHdoZW4gZGV2ZWxvcGluZy4gSSB3aWxsIGV4dGVu ZCB0bwpkaXNjb3ZlciByb290IGRldmljZSBhdCBwcm9iaW5nLgoKPiAKPiBBbm90aGVyIHByb2Js ZW0gSSBzZWUgaGVyZSBpcyB0aGF0IHlvdSB3YWxrIGFsbCB0aGUgUm9vdCBQb3J0cyB3aXRoIGNv dW50ZXJzIGFuZCByZWdpc3Rlcgo+IGEgUE1VIGZvciB0aGVtLiBCdXQgeW91IGRvbid0IGtub3cg d2hldGhlciB0aGV5J3JlIHJlbW92ZWQgbGF0ZXIgd2hlbiB5b3UgdXNlIHRoZW0uLi4KPiAKPj4+ Cj4+Pj4gKwkgICAgICAgaW5kZXggPCBSUF9OVU1fTUFYKSB7Cj4+Pj4gKwkJaWYgKCFwY2lfZGV2 X2lzX3Jvb3Rwb3J0KHBkZXYpKQo+Pj4+ICsJCQljb250aW51ZTsKPj4+PiArCj4+Pj4gKwkJcGNp ZV9pbmZvW2luZGV4XS5iZGYgPSBkd2NfcGNpZV9nZXRfYmRmKHBkZXYpOwo+Pj4+ICsJCXBjaWVf aW5mb1tpbmRleF0ucGRldiA9IHBkZXY7Cj4gCj4gLi4ueW91IHN0b3JlIHRoZSAqcGRldiBhbmQg dXNlIHRoZW0gZGlyZWN0bHkgaW4gdGhlIHBtdV9vcHMgYnV0IHdoZW4gdGhlIGRldmljZSBpcyBo b3QgcmVtb3ZlZAo+IHlvdSdsbCBhY2Nlc3MgYW4gaW52YWxpZCBhZGRyZXNzIGFuZCBjcmFzaC4K PiAKPiBBIHBvc3NpYmxlIHNvbHV0aW9uIGlzIHRvIGJlIG5vdGlmaWVkIHdoZW4gdGhlIGNvcnJl c3BvbmRpbmcgZGV2aWNlIGlzIHJlbW92ZWQvYWRkZWQgYW5kIGhhbmRsZQo+IGNvcnJlY3RseS4g T3IgeW91IGNhbiBnZXQgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgZGV2aWNlIHRvIHByZXZl bnQgaXQgZnJvbSBiZWluZyByZW1vdmVkLCBidXQKPiB0aGlzIG1heSBub3QgYmUgYSBnb29kIG9w dGlvbi4KCkkgc2VlIHlvdXIgcG9pbnQuIEkgd2lsbCB0cnkgdG8gYWRkIGEgbm90aWZpZXIgaW4g aG90IHJlbW92ZSBhbmQgcGx1Z2luIHBhdGguCgo+IAo+Pj4+ICsKPj4+PiArCQlpZiAoZHdjX3Bj aWVfZmluZF9yYXNfZGVzX2NhcF9wb3NpdGlvbihwZGV2LCAmd2hlcmUpKQo+Pj4+ICsJCQljb250 aW51ZTsKPj4+PiArCj4+Pj4gKwkJcGNpZV9pbmZvW2luZGV4XS5jYXBfcG9zID0gd2hlcmU7Cj4+ Pj4gKwo+Pj4+ICsJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LAo+Pj4+ICsJCQkJcGRldi0+ cGNpZV9jYXAgKyBEV0NfUENJRV9MSU5LX0NBUEFCSUxJVElFU19SRUcsCj4+Pj4gKwkJCQkmdmFs KTsKPj4+PiArCQlwY2llX2luZm9baW5kZXhdLm51bV9sYW5lcyA9Cj4+Pj4gKwkJCSh2YWwgJiBE V0NfUENJRV9MQU5FX01BU0spID4+IERXQ19QQ0lFX0xBTkVfU0hJRlQ7Cj4+Pj4gKwkJaW5kZXgr KzsKPj4+PiArCX0KPj4+PiArCj4+Pj4gKwlpZiAoIWluZGV4KQo+Pj4+ICsJCXJldHVybiAtRU5P REVWOwo+Pj4+ICsKPj4+PiArCXByaXYtPnBjaWVfY3RybF9udW0gPSBpbmRleDsKPj4+PiArCj4+ Pj4gKwlyZXR1cm4gMDsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIGlubGluZSBpbnQgZHdj X3BjaWVfcG11X3JlYWRfZHdvcmQoc3RydWN0IGR3Y19wY2llX2luZm9fdGFibGUgKnBjaWVfaW5m bywKPj4+PiArCQkJCQkgIHUzMiByZWcsIHUzMiAqdmFsKQo+Pj4+ICt7Cj4+Pj4gKwlyZXR1cm4g cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBjaWVfaW5mby0+cGRldiwgcGNpZV9pbmZvLT5jYXBfcG9z ICsgcmVnLAo+Pj4+ICsJCQkJICAgICB2YWwpOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMg aW5saW5lIGludCBkd2NfcGNpZV9wbXVfd3JpdGVfZHdvcmQoc3RydWN0IGR3Y19wY2llX2luZm9f dGFibGUKPj4+PiArCQkJCQkgICAqcGNpZV9pbmZvLCB1MzIgcmVnLCB1MzIgdmFsKQo+Pj4+ICt7 Cj4+Pj4gKwlyZXR1cm4gcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwY2llX2luZm8tPnBkZXYsIHBj aWVfaW5mby0+Y2FwX3BvcyArIHJlZywKPj4+PiArCQkJCSAgICAgIHZhbCk7Cj4+Pj4gK30KPj4+ PiArCj4+Pj4gK3N0YXRpYyBpbnQgZHdjX3BjaWVfcG11X3NldF9ldmVudF9pZChzdHJ1Y3QgZHdj X3BjaWVfaW5mb190YWJsZSAqcGNpZV9pbmZvLAo+Pj4+ICsJCQkJICAgICBpbnQgZXZlbnRfaWQp Cj4+Pj4gK3sKPj4+PiArCWludCByZXQ7Cj4+Pj4gKwl1MzIgdmFsOwo+Pj4+ICsKPj4+PiArCXJl dCA9IGR3Y19wY2llX3BtdV9yZWFkX2R3b3JkKHBjaWVfaW5mbywgRFdDX1BDSUVfRVZFTlRfQ05U X0NUUkwsICZ2YWwpOwo+Pj4+ICsJaWYgKHJldCkgewo+Pj4+ICsJCXBjaV9lcnIocGNpZV9pbmZv LT5wZGV2LCAiUENJZSByZWFkIGZhaWxcbiIpOwo+Pj4+ICsJCXJldHVybiByZXQ7Cj4+Pj4gKwl9 Cj4+Pj4gKwo+Pj4+ICsJdmFsICY9IH5EV0NfUENJRV9fQ05UX0VOQUJMRV9NQVNLOwo+Pj4+ICsJ dmFsICY9IH5EV0NfUENJRV9fQ05UX0VWRU5UX1NFTEVDVF9NQVNLOwo+Pj4+ICsJdmFsIHw9IGV2 ZW50X2lkIDw8IERXQ19QQ0lFX19DTlRfRVZFTlRfU0VMRUNUX1NISUZUOwo+Pj4+ICsKPj4+PiAr CXJldCA9IGR3Y19wY2llX3BtdV93cml0ZV9kd29yZChwY2llX2luZm8sIERXQ19QQ0lFX0VWRU5U X0NOVF9DVFJMLCB2YWwpOwo+Pj4+ICsJaWYgKHJldCkKPj4+PiArCQlwY2lfZXJyKHBjaWVfaW5m by0+cGRldiwgIlBDSWUgd3JpdGUgZmFpbFxuIik7Cj4+Pj4gKwo+Pj4+ICsJcmV0dXJuIHJldDsK Pj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIGludCBkd2NfcGNpZV9wbXVfd3JpdGVfZXZlbnRf bGFuZShzdHJ1Y3QgZHdjX3BjaWVfaW5mb190YWJsZSAqcGNpZV9pbmZvLAo+Pj4+ICsJCQkJCSBp bnQgbGFuZSwgaW50IGV2ZW50X2lkKQo+Pj4+ICt7Cj4+Pj4gKwl1MzIgcmV0Owo+Pj4+ICsJdTMy IHZhbDsKPj4+PiArCj4+Pj4gKwlyZXQgPSBkd2NfcGNpZV9wbXVfcmVhZF9kd29yZChwY2llX2lu Zm8sIERXQ19QQ0lFX0VWRU5UX0NOVF9DVFJMLCAmdmFsKTsKPj4+PiArCWlmIChyZXQpIHsKPj4+ PiArCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRldiwgIlBDSWUgcmVhZCBmYWlsXG4iKTsKPj4+PiAr CQlyZXR1cm4gcmV0Owo+Pj4+ICsJfQo+Pj4+ICsKPj4+PiArCXZhbCAmPSB+RFdDX1BDSUVfX0NO VF9MQU5FX1NFTEVDVF9NQVNLOwo+Pj4+ICsJdmFsIHw9IGxhbmUgPDwgRFdDX1BDSUVfX0NOVF9M QU5FX1NFTEVDVF9TSElGVDsKPj4+PiArCj4+Pj4gKwlyZXQgPSBkd2NfcGNpZV9wbXVfd3JpdGVf ZHdvcmQocGNpZV9pbmZvLCBEV0NfUENJRV9FVkVOVF9DTlRfQ1RSTCwgdmFsKTsKPj4+PiArCWlm IChyZXQpCj4+Pj4gKwkJcGNpX2VycihwY2llX2luZm8tPnBkZXYsICJQQ0llIHdyaXRlIGZhaWxc biIpOwo+Pj4+ICsKPj4+PiArCXJldHVybiByZXQ7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRp YyBpbnQgZHdjX3BjaWVfcG11X2V2ZW50X2VuYWJsZShzdHJ1Y3QgZHdjX3BjaWVfaW5mb190YWJs ZSAqcGNpZV9pbmZvLAo+Pj4+ICsJCQkJICAgICB1MzIgZW5hYmxlKQo+Pj4+ICt7Cj4+Pj4gKwl1 MzIgcmV0Owo+Pj4+ICsJdTMyIHZhbDsKPj4+PiArCj4+Pj4gKwlyZXQgPSBkd2NfcGNpZV9wbXVf cmVhZF9kd29yZChwY2llX2luZm8sIERXQ19QQ0lFX0VWRU5UX0NOVF9DVFJMLCAmdmFsKTsKPj4+ PiArCWlmIChyZXQpIHsKPj4+PiArCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRldiwgIlBDSWUgcmVh ZCBmYWlsXG4iKTsKPj4+Cj4+PiBTb21lYm9keSBtYXkgbWVudGlvbmVkLiBNYXliZSB5b3UgZG9u J3QgbmVlZCB0byBwcmludCB0aGVzZSBtZXNzYWdlcyBpbiBQTVUgb3BzLCBqdXN0Cj4+PiByZXR1 cm4gdGhlIGNvcnJlY3QgZXJyb3IgY29kZSBhbmQgbGV0IHBlcmYgaGFuZGxlIGl0LiBPciB5b3Ug c2hvdWxkIHByb3ZpZGUgbW9yZQo+Pj4gaW5mb3JtYXRpb24gZm9yIHRoZXNlLCBsaWtlIGZhaWxl ZCBpbiB3aGljaCBmdW5jaW9uIG9yIHJlYWQvd3JpdGUgd2hpY2ggdmFsdWUuCj4+PiBJZiBpdCBv bmx5IG5lY2Vzc2FyeSB3aGVuIGRlYnVnZ2luZywgbWFrZSBpdCBwY2lfZGJnKCkuCj4+Cj4+IFll cCwgeW91IGFyZSByaWdodCwgSSB3aWxsIGRyb3AgdGhlIHByaW50IGluZm8gaW4gbmV4dCB2ZXJz aW9uLgo+Pgo+Pj4KPj4+PiArCQlyZXR1cm4gcmV0Owo+Pj4+ICsJfQo+Pj4+ICsKPj4+PiArCXZh bCAmPSB+KERXQ19QQ0lFX19DTlRfRU5BQkxFX01BU0spOwo+Pj4+ICsKPj4+PiArCWlmIChlbmFi bGUpCj4+Pj4gKwkJdmFsIHw9IERXQ19QQ0lFX1BFUl9FVkVOVF9PTjsKPj4+PiArCWVsc2UKPj4+ PiArCQl2YWwgfD0gRFdDX1BDSUVfUEVSX0VWRU5UX09GRjsKPj4+PiArCj4+Pj4gKwlyZXQgPSBk d2NfcGNpZV9wbXVfd3JpdGVfZHdvcmQocGNpZV9pbmZvLCBEV0NfUENJRV9FVkVOVF9DTlRfQ1RS TCwgdmFsKTsKPj4+PiArCWlmIChyZXQpCj4+Pj4gKwkJcGNpX2VycihwY2llX2luZm8tPnBkZXYs ICJQQ0llIHdyaXRlIGZhaWxcbiIpOwo+Pj4+ICsKPj4+PiArCXJldHVybiByZXQ7Cj4+Pj4gK30K Pj4+PiArCj4+Pj4gK3N0YXRpYyBpbnQgZHdjX3BjaWVfcG11X2Jhc2VfdGltZV9lbmFibGUoc3Ry dWN0IGR3Y19wY2llX2luZm9fdGFibGUgKnBjaWVfaW5mbywKPj4+PiArCQkJCQkgdTMyIGVuYWJs ZSkKPj4+PiArewo+Pj4+ICsJdTMyIHJldDsKPj4+PiArCXUzMiB2YWw7Cj4+Pj4gKwo+Pj4+ICsJ cmV0ID0gZHdjX3BjaWVfcG11X3JlYWRfZHdvcmQocGNpZV9pbmZvLAo+Pj4+ICsJCQkJICAgICAg RFdDX1BDSUVfVElNRV9CQVNFRF9BTkFMWVNJU19DVFJMLCAmdmFsKTsKPj4+PiArCWlmIChyZXQp IHsKPj4+PiArCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRldiwgIlBDSWUgcmVhZCBmYWlsXG4iKTsK Pj4+PiArCQlyZXR1cm4gcmV0Owo+Pj4+ICsJfQo+Pj4+ICsKPj4+PiArCWlmIChlbmFibGUpCj4+ Pj4gKwkJdmFsIHw9IERXQ19QQ0lFX19USU1FX0JBU0VEX0NPVU5URVJfRU5BQkxFOwo+Pj4+ICsJ ZWxzZQo+Pj4+ICsJCXZhbCAmPSB+RFdDX1BDSUVfX1RJTUVfQkFTRURfQ09VTlRFUl9FTkFCTEU7 Cj4+Pj4gKwo+Pj4+ICsJcmV0ID0gZHdjX3BjaWVfcG11X3dyaXRlX2R3b3JkKHBjaWVfaW5mbywK Pj4+PiArCQkJCSAgICAgICBEV0NfUENJRV9USU1FX0JBU0VEX0FOQUxZU0lTX0NUUkwsIHZhbCk7 Cj4+Pj4gKwlpZiAocmV0KQo+Pj4+ICsJCXBjaV9lcnIocGNpZV9pbmZvLT5wZGV2LCAiUENJZSB3 cml0ZSBmYWlsXG4iKTsKPj4+PiArCj4+Pj4gKwlyZXR1cm4gcmV0Owo+Pj4+ICt9Cj4+Pj4gKwo+ Pj4+ICtzdGF0aWMgaW50IGR3Y19wY2llX3BtdV9yZWFkX2V2ZW50X2NvdW50ZXIoc3RydWN0IGR3 Y19wY2llX2luZm9fdGFibGUKPj4+PiArCQkJCQkgICAqcGNpZV9pbmZvLCB1NjQgKmNvdW50ZXIp Cj4+Pj4gK3sKPj4+PiArCXUzMiByZXQsIHZhbDsKPj4+PiArCj4+Pj4gKwlyZXQgPSBkd2NfcGNp ZV9wbXVfcmVhZF9kd29yZChwY2llX2luZm8sIERXQ19QQ0lFX0VWRU5UX0NOVF9EQVRBLCAmdmFs KTsKPj4+PiArCWlmIChyZXQpIHsKPj4+PiArCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRldiwgIlBD SWUgcmVhZCBmYWlsXG4iKTsKPj4+PiArCQlyZXR1cm4gcmV0Owo+Pj4+ICsJfQo+Pj4+ICsJKmNv dW50ZXIgPSB2YWw7Cj4+Pj4gKwo+Pj4+ICsJcmV0dXJuIHJldDsKPj4+PiArfQo+Pj4+ICsKPj4+ PiArc3RhdGljIGludCBkd2NfcGNpZV9wbXVfcmVhZF9iYXNlX3RpbWVfY291bnRlcihzdHJ1Y3Qg ZHdjX3BjaWVfaW5mb190YWJsZQo+Pj4+ICsJCQkJCSAgICAgICAqcGNpZV9pbmZvLCB1NjQgKmNv dW50ZXIpCj4+Pj4gK3sKPj4+PiArCXUzMiByZXQsIHZhbDsKPj4+PiArCj4+Pj4gKwlyZXQgPSBk d2NfcGNpZV9wbXVfcmVhZF9kd29yZChwY2llX2luZm8sCj4+Pj4gKwkJCQkgICAgICBEV0NfUENJ RV9USU1FX0JBU0VEX0FOQUxZU0lTX0RBVEFfUkVHX0hJR0gsCj4+Pj4gKwkJCQkgICAgICAmdmFs KTsKPj4+PiArCWlmIChyZXQpIHsKPj4+PiArCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRldiwgIlBD SWUgcmVhZCBmYWlsXG4iKTsKPj4+PiArCQlyZXR1cm4gcmV0Owo+Pj4+ICsJfQo+Pj4+ICsKPj4+ PiArCSpjb3VudGVyID0gdmFsOwo+Pj4+ICsJKmNvdW50ZXIgPDw9IDMyOwo+Pj4+ICsKPj4+PiAr CXJldCA9IGR3Y19wY2llX3BtdV9yZWFkX2R3b3JkKHBjaWVfaW5mbywKPj4+PiArCQkJCSAgICAg IERXQ19QQ0lFX1RJTUVfQkFTRURfQU5BTFlTSVNfREFUQV9SRUdfTE9XLAo+Pj4+ICsJCQkJICAg ICAgJnZhbCk7Cj4+Pj4gKwlpZiAocmV0KSB7Cj4+Pj4gKwkJcGNpX2VycihwY2llX2luZm8tPnBk ZXYsICJQQ0llIHJlYWQgZmFpbFxuIik7Cj4+Pj4gKwkJcmV0dXJuIHJldDsKPj4+PiArCX0KPj4+ PiArCj4+Pj4gKwkqY291bnRlciArPSB2YWw7Cj4+Pj4gKwo+Pj4+ICsJcmV0dXJuIHJldDsKPj4+ PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIGludCBkd2NfcGNpZV9wbXVfY2xlYXJfZXZlbnRfY291 bnRlcihzdHJ1Y3QgZHdjX3BjaWVfaW5mb190YWJsZQo+Pj4+ICsJCQkJCSAgICAqcGNpZV9pbmZv KQo+Pj4+ICt7Cj4+Pj4gKwl1MzIgcmV0Owo+Pj4+ICsJdTMyIHZhbDsKPj4+PiArCj4+Pj4gKwly ZXQgPSBkd2NfcGNpZV9wbXVfcmVhZF9kd29yZChwY2llX2luZm8sIERXQ19QQ0lFX0VWRU5UX0NO VF9DVFJMLCAmdmFsKTsKPj4+PiArCWlmIChyZXQpIHsKPj4+PiArCQlwY2lfZXJyKHBjaWVfaW5m by0+cGRldiwgIlBDSWUgcmVhZCBmYWlsXG4iKTsKPj4+PiArCQlyZXR1cm4gcmV0Owo+Pj4+ICsJ fQo+Pj4+ICsKPj4+PiArCXZhbCAmPSB+RFdDX1BDSUVfRVZFTlRfQ0xFQVJfTUFTSzsKPj4+PiAr CXZhbCB8PSAxOwo+Pj4KPj4+IEl0J3MgYmV0dGVyIHRvIHVzZSBhIG1hY3JvIGZvciAnMScgdG8g bWFrZSBpdCBtb3JlIGNsZWFyLgo+Pgo+PiBHb29kIGlkZWEsIHdpbGwgZml4IGl0IGluIG5leHQg dmVyc2lvbi4KPj4KPj4+Cj4+Pj4gKwo+Pj4+ICsJcmV0ID0gZHdjX3BjaWVfcG11X3dyaXRlX2R3 b3JkKHBjaWVfaW5mbywgRFdDX1BDSUVfRVZFTlRfQ05UX0NUUkwsIHZhbCk7Cj4+Pj4gKwlpZiAo cmV0KQo+Pj4+ICsJCXBjaV9lcnIocGNpZV9pbmZvLT5wZGV2LCAiUENJZSB3cml0ZSBmYWlsXG4i KTsKPj4+PiArCj4+Pj4gKwlyZXR1cm4gcmV0Owo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMg aW50IGR3Y19wY2llX3BtdV9iYXNlX3RpbWVfYWRkX3ByZXBhcmUoc3RydWN0IGR3Y19wY2llX2lu Zm9fdGFibGUKPj4+PiArCQkJCQkgICAgICAqcGNpZV9pbmZvLCB1MzIgZXZlbnRfaWQpCj4+Pj4g K3sKPj4+PiArCXUzMiByZXQ7Cj4+Pj4gKwl1MzIgdmFsOwo+Pj4+ICsKPj4+PiArCXJldCA9IGR3 Y19wY2llX3BtdV9yZWFkX2R3b3JkKHBjaWVfaW5mbywKPj4+PiArCQkJCSAgICAgIERXQ19QQ0lF X1RJTUVfQkFTRURfQU5BTFlTSVNfQ1RSTCwgJnZhbCk7Cj4+Pj4gKwlpZiAocmV0KSB7Cj4+Pj4g KwkJcGNpX2VycihwY2llX2luZm8tPnBkZXYsICJQQ0llIHJlYWQgZmFpbFxuIik7Cj4+Pj4gKwkJ cmV0dXJuIHJldDsKPj4+PiArCX0KPj4+PiArCj4+Pj4gKwl2YWwgJj0gfkRXQ19QQ0lFX19USU1F X0JBU0VEX1JFUE9SVF9TRUxFQ1RfTUFTSzsKPj4+PiArCXZhbCB8PSBldmVudF9pZCA8PCBEV0Nf UENJRV9fVElNRV9CQVNFRF9SRVBPUlRfU0VMRUNUX1NISUZUOwo+Pj4+ICsJdmFsICY9IH5EV0Nf UENJRV9fVElNRV9CQVNFRF9EVVJBVElPTl9TRUxFQ1Q7Cj4+Pj4gKwo+Pj4+ICsJLyoKPj4+PiAr CSAqIFRJTUVfQkFTRURfQU5BTFlTSVNfREFUQV9SRUcgaXMgYSA2NCBiaXQgcmVnaXN0ZXIsIHdl IGNhbiBzYWZlbHkKPj4+PiArCSAqIHVzZSBpdCB3aXRoIGFueSBtYW51YWxseSBjb250cm9sbGVy ZWQgZHVyYXRpb24uCj4+Pj4gKwkgKi8KPj4+PiArCXZhbCAmPSB+KERXQ19QQ0lFX19USU1FX0JB U0VEX0RVUkFUSU9OX1NFTEVDVCk7Cj4+Pj4gKwl2YWwgfD0gRFdDX1BDSUVfRFVSQVRJT05fTUFO VUFMX0NUUkw7Cj4+Pj4gKwo+Pj4+ICsJcmV0ID0gZHdjX3BjaWVfcG11X3dyaXRlX2R3b3JkKHBj aWVfaW5mbywKPj4+PiArCQkJCSAgICAgICBEV0NfUENJRV9USU1FX0JBU0VEX0FOQUxZU0lTX0NU UkwsIHZhbCk7Cj4+Pj4gKwlpZiAocmV0KQo+Pj4+ICsJCXBjaV9lcnIocGNpZV9pbmZvLT5wZGV2 LCAiUENJZSB3cml0ZSBmYWlsXG4iKTsKPj4+PiArCj4+Pj4gKwlyZXR1cm4gcmV0Owo+Pj4+ICt9 Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgc3RydWN0IGR3Y19wY2llX2luZm9fdGFibGUgKnBtdV90b19w Y2llX2luZm8oc3RydWN0IHBtdSAqcG11KQo+Pj4+ICt7Cj4+Pj4gKwlzdHJ1Y3QgZHdjX3BjaWVf aW5mb190YWJsZSAqcGNpZV9pbmZvOwo+Pj4+ICsJc3RydWN0IGR3Y19wY2llX3BtdSAqcGNpZV9w bXUgPSB0b19wY2llX3BtdShwbXUpOwo+Pj4+ICsKPj4+PiArCXBjaWVfaW5mbyA9IGNvbnRhaW5l cl9vZihwY2llX3BtdSwgc3RydWN0IGR3Y19wY2llX2luZm9fdGFibGUsIHBjaWVfcG11KTsKPj4+ PiArCWlmIChwY2llX2luZm8gPT0gTlVMTCkKPj4+PiArCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRl diwgIkNhbid0IGdldCBwY2llIGluZm9cbiIpOwo+Pj4+ICsKPj4+PiArCXJldHVybiBwY2llX2lu Zm87Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyB2b2lkIGR3Y19wY2llX3BtdV9ldmVudF91 cGRhdGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQo+Pj4+ICt7Cj4+Pj4gKwl1NjQgY291bnRl cjsKPj4+PiArCXN0cnVjdCBkd2NfcGNpZV9pbmZvX3RhYmxlICpwY2llX2luZm8gPSBwbXVfdG9f cGNpZV9pbmZvKGV2ZW50LT5wbXUpOwo+Pj4+ICsJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9 ICZldmVudC0+aHc7Cj4+Pj4gKwllbnVtIGR3Y19wY2llX2V2ZW50X3R5cGUgdHlwZSA9IERXQ19Q Q0lFX0VWRU5UX1RZUEUoZXZlbnQpOwo+Pj4+ICsJdTY0IGRlbHRhLCBwcmV2LCBub3c7Cj4+Pj4g Kwo+Pj4+ICsJZG8gewo+Pj4+ICsJCXByZXYgPSBsb2NhbDY0X3JlYWQoJmh3Yy0+cHJldl9jb3Vu dCk7Cj4+Pj4gKwo+Pj4+ICsJCWlmICh0eXBlID09IERXQ19QQ0lFX0xBTkVfRVZFTlQpCj4+Pj4g KwkJCWR3Y19wY2llX3BtdV9yZWFkX2V2ZW50X2NvdW50ZXIocGNpZV9pbmZvLCAmY291bnRlcik7 Cj4+Pj4gKwkJZWxzZSBpZiAodHlwZSA9PSBEV0NfUENJRV9USU1FX0JBU0VfRVZFTlQpCj4+Pj4g KwkJCWR3Y19wY2llX3BtdV9yZWFkX2Jhc2VfdGltZV9jb3VudGVyKHBjaWVfaW5mbywKPj4+PiAr CQkJCQkJCSAgICAmY291bnRlcik7Cj4+Pj4gKwkJZWxzZQo+Pj4+ICsJCQlwY2lfZXJyKHBjaWVf aW5mby0+cGRldiwgIklucHV0IHBhcmFtIGlzIGludmFsaWRcbiIpOwo+Pj4+ICsKPj4+Cj4+PiBG b3IgdGhlIG1lc3NhZ2VzIGluIFBNVSBvcHMsIHlvdSBzaG91bGQgcHJpbnQgdGhlIG1lc3NhZ2Ug b24gYmVoYWxmIG9mIFBNVSBkZXZpY2UKPj4+IHJhdGhlciB0aGFuIFBDSWUgZGV2aWNlLiBTYW1l IGZvciB0aGUgb3RoZXIgcGxhY2VzLgo+Pgo+PiBHb29kIGlkZWEsIHdpbGwgZml4IGl0IGluIG5l eHQgdmVyc2lvbi4KPj4KPj4+Cj4+Pj4gKwkJbm93ID0gY291bnRlcjsKPj4+PiArCX0gd2hpbGUg KGxvY2FsNjRfY21weGNoZygmaHdjLT5wcmV2X2NvdW50LCBwcmV2LCBub3cpICE9IHByZXYpOwo+ Pj4+ICsKPj4+PiArCWRlbHRhID0gbm93IC0gcHJldjsKPj4+PiArCj4+Pj4gKwlsb2NhbDY0X2Fk ZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBpbnQg ZHdjX3BjaWVfcG11X2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQo+Pj4+ICt7 Cj4+Pj4gKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKPj4+PiArCXN0 cnVjdCBkd2NfcGNpZV9wbXUgKnBjaWVfcG11ID0gdG9fcGNpZV9wbXUoZXZlbnQtPnBtdSk7Cj4+ Pj4gKwlzdHJ1Y3QgcGVyZl9ldmVudCAqc2libGluZzsKPj4+PiArCj4+Pj4gKwlpZiAoZXZlbnQt PmF0dHIudHlwZSAhPSBldmVudC0+cG11LT50eXBlKQo+Pj4+ICsJCXJldHVybiAtRU5PRU5UOwo+ Pj4+ICsKPj4+PiArCWlmIChod2MtPnNhbXBsZV9wZXJpb2QpIHsKPj4+PiArCQlkZXZfZGJnKHBj aWVfcG11LT5kZXYsICJTYW1wbGluZyBub3Qgc3VwcG9ydGVkXG4iKTsKPj4+PiArCQlyZXR1cm4g LUVPUE5PVFNVUFA7Cj4+Pj4gKwl9Cj4+Pj4gKwo+Pj4+ICsJaWYgKGV2ZW50LT5jcHUgPCAwKSB7 Cj4+Pj4gKwkJZGV2X2RiZyhwY2llX3BtdS0+ZGV2LCAiUGVyLXRhc2sgbW9kZSBub3Qgc3VwcG9y dGVkXG4iKTsKPj4+PiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4+Pj4gKwl9Cj4+Pj4gKwo+Pj4+ ICsJZXZlbnQtPmNwdSA9IHBjaWVfcG11LT5vbl9jcHU7Cj4+Pj4gKwo+Pj4+ICsJaWYgKGV2ZW50 LT5ncm91cF9sZWFkZXIgIT0gZXZlbnQgJiYKPj4+PiArCSAgICAhaXNfc29mdHdhcmVfZXZlbnQo ZXZlbnQtPmdyb3VwX2xlYWRlcikpIHsKPj4+PiArCQlkZXZfZGJnKHBjaWVfcG11LT5kZXYsICJE cml2ZSB3YXkgb25seSBhbGxvdyBvbmUgZXZlbnQhXG4iKTsKPj4+PiArCQlyZXR1cm4gLUVJTlZB TDsKPj4+PiArCX0KPj4+PiArCj4+Pj4gKwlmb3JfZWFjaF9zaWJsaW5nX2V2ZW50KHNpYmxpbmcs IGV2ZW50LT5ncm91cF9sZWFkZXIpIHsKPj4+PiArCQlpZiAoc2libGluZyAhPSBldmVudCAmJiAh aXNfc29mdHdhcmVfZXZlbnQoc2libGluZykpIHsKPj4+PiArCQkJZGV2X2RiZyhwY2llX3BtdS0+ ZGV2LCAiRHJpdmUgd2F5IGV2ZW50IG5vdCBhbGxvd2VkIVxuIik7Cj4+Pj4gKwkJCXJldHVybiAt RUlOVkFMOwo+Pj4+ICsJCX0KPj4+PiArCX0KPj4+PiArCj4+Pj4gKwlod2MtPmlkeCA9IC0xOwo+ Pj4+ICsKPj4+PiArCXJldHVybiAwOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgdm9pZCBk d2NfcGNpZV9wbXVfc2V0X3BlcmlvZChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjKQo+Pj4+ICt7 Cj4+Pj4gKwl1NjQgbmV3ID0gMDsKPj4+PiArCj4+Pgo+Pj4gcmVkdW5kYW50ICduZXcnLgo+Pj4K Pj4+PiArCWxvY2FsNjRfc2V0KCZod2MtPnByZXZfY291bnQsIG5ldyk7Cj4+Pj4gK30KPj4KPj4g WWVwLCB3aWxsIGZpeCBpdCBpbiBuZXh0IHZlcnNpb24uCj4+Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMg dm9pZCBkd2NfcGNpZV9wbXVfZXZlbnRfc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBp bnQgZmxhZ3MpCj4+Pj4gK3sKPj4+PiArCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZl bnQtPmh3Owo+Pj4+ICsJc3RydWN0IGR3Y19wY2llX2luZm9fdGFibGUgKnBjaWVfaW5mbyA9IHBt dV90b19wY2llX2luZm8oZXZlbnQtPnBtdSk7Cj4+Pj4gKwllbnVtIGR3Y19wY2llX2V2ZW50X3R5 cGUgdHlwZSA9IERXQ19QQ0lFX0VWRU5UX1RZUEUoZXZlbnQpOwo+Pj4+ICsKPj4+PiArCWh3Yy0+ c3RhdGUgPSAwOwo+Pj4+ICsJZHdjX3BjaWVfcG11X3NldF9wZXJpb2QoaHdjKTsKPj4+PiArCj4+ Pj4gKwlpZiAodHlwZSA9PSBEV0NfUENJRV9MQU5FX0VWRU5UKQo+Pj4+ICsJCWR3Y19wY2llX3Bt dV9ldmVudF9lbmFibGUocGNpZV9pbmZvLCAxKTsKPj4+PiArCWVsc2UgaWYgKHR5cGUgPT0gRFdD X1BDSUVfVElNRV9CQVNFX0VWRU5UKQo+Pj4+ICsJCWR3Y19wY2llX3BtdV9iYXNlX3RpbWVfZW5h YmxlKHBjaWVfaW5mbywgMSk7Cj4+Pj4gKwllbHNlCj4+Pj4gKwkJcGNpX2VycihwY2llX2luZm8t PnBkZXYsICJJbnB1dCBwYXJhbSBpcyBpbnZhbGlkXG4iKTsKPj4+PiArfQo+Pj4+ICsKPj4+PiAr c3RhdGljIHZvaWQgZHdjX3BjaWVfcG11X2V2ZW50X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2 ZW50LCBpbnQgZmxhZ3MpCj4+Pj4gK3sKPj4+PiArCXN0cnVjdCBkd2NfcGNpZV9pbmZvX3RhYmxl ICpwY2llX2luZm8gPSBwbXVfdG9fcGNpZV9pbmZvKGV2ZW50LT5wbXUpOwo+Pj4+ICsJZW51bSBk d2NfcGNpZV9ldmVudF90eXBlIHR5cGUgPSBEV0NfUENJRV9FVkVOVF9UWVBFKGV2ZW50KTsKPj4+ PiArCj4+Pj4gKwlpZiAoZXZlbnQtPmh3LnN0YXRlICYgUEVSRl9IRVNfU1RPUFBFRCkKPj4+PiAr CQlyZXR1cm47Cj4+Pj4gKwo+Pj4+ICsJaWYgKHR5cGUgPT0gRFdDX1BDSUVfTEFORV9FVkVOVCkK Pj4+PiArCQlkd2NfcGNpZV9wbXVfZXZlbnRfZW5hYmxlKHBjaWVfaW5mbywgMCk7Cj4+Pj4gKwll bHNlIGlmICh0eXBlID09IERXQ19QQ0lFX1RJTUVfQkFTRV9FVkVOVCkKPj4+PiArCQlkd2NfcGNp ZV9wbXVfYmFzZV90aW1lX2VuYWJsZShwY2llX2luZm8sIDApOwo+Pj4+ICsJZWxzZQo+Pj4+ICsJ CXBjaV9lcnIocGNpZV9pbmZvLT5wZGV2LCAiSW5wdXQgcGFyYW0gaXMgaW52YWxpZFxuIik7Cj4+ Pgo+Pj4gSWYgdGhlIG1lc3NhZ2UgaXMgbmVjZXNzYXJ5LCBpdCdsbCBiZSBtb3JlIGhlbHBmdWwg dG8gbWVudGlvbiB3aGljaCBwYXJhbQo+Pj4gaXMgaW52YWxpZC4KPj4KPj4gSSBzZWUsIHdpbGwg Z2l2ZSBtb3JlIGhpbnQgaW4gbG9nLgo+Pgo+Pj4KPj4+PiArCj4+Pj4gKwlkd2NfcGNpZV9wbXVf ZXZlbnRfdXBkYXRlKGV2ZW50KTsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIGludCBkd2Nf cGNpZV9wbXVfZXZlbnRfYWRkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQo+ Pj4+ICt7Cj4+Pj4gKwlzdHJ1Y3QgZHdjX3BjaWVfaW5mb190YWJsZSAqcGNpZV9pbmZvID0gcG11 X3RvX3BjaWVfaW5mbyhldmVudC0+cG11KTsKPj4+PiArCXN0cnVjdCBod19wZXJmX2V2ZW50ICpo d2MgPSAmZXZlbnQtPmh3Owo+Pj4+ICsJZW51bSBkd2NfcGNpZV9ldmVudF90eXBlIHR5cGUgPSBE V0NfUENJRV9FVkVOVF9UWVBFKGV2ZW50KTsKPj4+PiArCWludCBldmVudF9pZCA9IERXQ19QQ0lF X0VWRU5UX0lEKGV2ZW50KTsKPj4+PiArCWludCBsYW5lID0gRFdDX1BDSUVfRVZFTlRfTEFORShl dmVudCk7Cj4+Pj4gKwo+Pj4+ICsJaWYgKHBjaWVfaW5mby0+ZXZlbnQpCj4+Pj4gKwkJcmV0dXJu IC1FTk9TUEM7Cj4+Pj4gKwo+Pj4+ICsJcGNpZV9pbmZvLT5ldmVudCA9IGV2ZW50Owo+Pj4+ICsK Pj4+PiArCWh3Yy0+c3RhdGUgPSBQRVJGX0hFU19TVE9QUEVEIHwgUEVSRl9IRVNfVVBUT0RBVEU7 Cj4+Pj4gKwo+Pj4+ICsJaWYgKHR5cGUgPT0gRFdDX1BDSUVfTEFORV9FVkVOVCkgewo+Pj4+ICsJ CWR3Y19wY2llX3BtdV9ldmVudF9lbmFibGUocGNpZV9pbmZvLCAwKTsKPj4+PiArCQlkd2NfcGNp ZV9wbXVfd3JpdGVfZXZlbnRfbGFuZShwY2llX2luZm8sIGxhbmUsIGV2ZW50X2lkKTsKPj4+PiAr CQlkd2NfcGNpZV9wbXVfc2V0X2V2ZW50X2lkKHBjaWVfaW5mbywgZXZlbnRfaWQpOwo+Pj4+ICsJ CWR3Y19wY2llX3BtdV9jbGVhcl9ldmVudF9jb3VudGVyKHBjaWVfaW5mbyk7Cj4+Pj4gKwl9IGVs c2UgaWYgKHR5cGUgPT0gRFdDX1BDSUVfVElNRV9CQVNFX0VWRU5UKSB7Cj4+Pj4gKwkJZHdjX3Bj aWVfcG11X2Jhc2VfdGltZV9lbmFibGUocGNpZV9pbmZvLCAwKTsKPj4+PiArCQlkd2NfcGNpZV9w bXVfYmFzZV90aW1lX2FkZF9wcmVwYXJlKHBjaWVfaW5mbywgZXZlbnRfaWQpOwo+Pj4+ICsJfSBl bHNlIHsKPj4+PiArCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRldiwgIklucHV0IHBhcmFtIGlzIGlu dmFsaWRcbiIpOwo+Pj4+ICsJCXJldHVybiAtRUlOVkFMOwo+Pj4+ICsJfQo+Pj4+ICsKPj4+PiAr CWlmIChmbGFncyAmIFBFUkZfRUZfU1RBUlQpCj4+Pj4gKwkJZHdjX3BjaWVfcG11X2V2ZW50X3N0 YXJ0KGV2ZW50LCBQRVJGX0VGX1JFTE9BRCk7Cj4+Pj4gKwo+Pj4+ICsJcGVyZl9ldmVudF91cGRh dGVfdXNlcnBhZ2UoZXZlbnQpOwo+Pj4+ICsKPj4+PiArCXJldHVybiAwOwo+Pj4+ICt9Cj4+Pj4g Kwo+Pj4+ICtzdGF0aWMgdm9pZCBkd2NfcGNpZV9wbXVfZXZlbnRfZGVsKHN0cnVjdCBwZXJmX2V2 ZW50ICpldmVudCwgaW50IGZsYWdzKQo+Pj4+ICt7Cj4+Pj4gKwlzdHJ1Y3QgZHdjX3BjaWVfaW5m b190YWJsZSAqcGNpZV9pbmZvID0gcG11X3RvX3BjaWVfaW5mbyhldmVudC0+cG11KTsKPj4+PiAr Cj4+Pj4gKwlkd2NfcGNpZV9wbXVfZXZlbnRfc3RvcChldmVudCwgZmxhZ3MgfCBQRVJGX0VGX1VQ REFURSk7Cj4+Pj4gKwlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7Cj4+Pj4gKwlw Y2llX2luZm8tPmV2ZW50ID0gTlVMTDsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIHZvaWQg ZHdjX3BjaWVfcG11X2V2ZW50X3JlYWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQo+Pj4+ICt7 Cj4+Pj4gKwlkd2NfcGNpZV9wbXVfZXZlbnRfdXBkYXRlKGV2ZW50KTsKPj4+PiArfQo+Pj4+ICsK Pj4+PiArc3RhdGljIHN0cnVjdCBkd2NfZXZlbnRfY291bnRlcnMgZXZlbnRfYXJyYXlbXSA9IHsK Pj4+PiArCXsidHhfYWNrX2RsbHAiLCAweDYwMH0sCj4+Pj4gKwl7InR4X3VwZGF0ZV9mY19kbGxw IiwgMHg2MDF9LAo+Pj4+ICsJeyJyeF9hY2tfZGxscCIsIDB4NjAyfSwKPj4+PiArCXsicnhfdXBk YXRlX2ZjX2RsbHAiLCAweDYwM30sCj4+Pj4gKwl7InJ4X251bGlmaWVkX3RscCIsIDB4NjA0fSwK Pj4+PiArCXsidHhfbnVsaWZpZWRfdGxwIiwgMHg2MDV9LAo+Pj4+ICsJeyJyeF9kdXBsaWNhdGVf dGxwIiwgMHg2MDZ9LAo+Pj4+ICsJeyJ0eF9tZW1vcnlfd3JpdGUiLCAweDcwMH0sCj4+Pj4gKwl7 InR4X21lbW9yeV9yZWFkIiwgMHg3MDF9LAo+Pj4+ICsJeyJ0eF9jb25maWd1cmF0aW9uX3dyaXRl IiwgMHg3MDJ9LAo+Pj4+ICsJeyJ0eF9jb25maWd1cmF0aW9uX3JlYWQiLCAweDcwM30sCj4+Pj4g Kwl7InR4X2lvX3dyaXRlIiwgMHg3MDR9LAo+Pj4+ICsJeyJ0eF9pb19yZWFkIiwgMHg3MDV9LAo+ Pj4+ICsJeyJ0eF9jb21wbGV0aW9uX3dpdGhvdXRfZGF0YSIsIDB4NzA2fSwKPj4+PiArCXsidHhf Y29tcGxldGlvbl93aXRoX2RhdGEiLCAweDcwN30sCj4+Pj4gKwl7InR4X21lc3NhZ2VfdGxwIiwg MHg3MDh9LAo+Pj4+ICsJeyJ0eF9hdG9taWMiLCAweDcwOX0sCj4+Pj4gKwl7InR4X3RscF93aXRo X3ByZWZpeCIsIDB4NzBBfSwKPj4+PiArCXsicnhfbWVtb3J5X3dyaXRlIiwgMHg3MEJ9LAo+Pj4+ ICsJeyJyeF9tZW1vcnlfcmVhZCIsIDB4NzBDfSwKPj4+PiArCXsicnhfaW9fd3JpdGUiLCAweDcw Rn0sCj4+Pj4gKwl7InJ4X2lvX3JlYWQiLCAweDcxMH0sCj4+Pj4gKwl7InJ4X2NvbXBsZXRpb25f d2l0aG91dF9kYXRhIiwgMHg3MTF9LAo+Pj4+ICsJeyJyeF9jb21wbGV0aW9uX3dpdGhfZGF0YSIs IDB4NzEyfSwKPj4+PiArCXsicnhfbWVzc2FnZV90bHAiLCAweDcxM30sCj4+Pj4gKwl7InJ4X2F0 b21pYyIsIDB4NzE0fSwKPj4+PiArCXsicnhfdGxwX3dpdGhfcHJlZml4IiwgMHg3MTV9LAo+Pj4+ ICsJeyJ0eF9jY2l4X3RscCIsIDB4NzE2fSwKPj4+PiArCXsicnhfY2NpeF90bHAiLCAweDcxN30s Cj4+Pj4gK307Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgaW50IGR3Y19wY2llX3BtdV9hdHRyX2luaXQo c3RydWN0IGR3Y19wY2llX3BtdV9wcml2ICpwcml2LAo+Pj4+ICsJCQkJICBzdHJ1Y3QgZHdjX3Bj aWVfaW5mb190YWJsZSAqcGNpZV9pbmZvKQo+Pj4+ICt7Cj4+Pj4gKwlpbnQgaSwgajsKPj4+PiAr CWNoYXIgbGFuZVs4XTsKPj4+PiArCWNvbnN0IGNoYXIgdG1wWzY0XTsKPj4+PiArCWludCBldmVu dHNfcGVyX2xhbmU7Cj4+Pj4gKwlpbnQgbnVtX2xhbmVfZXZlbnRzOwo+Pj4+ICsJaW50IHRpbWVf YmFzZV9jb3VudDsKPj4+PiArCWludCBudW1fYXR0cnMsIGF0dHJfaWR4Owo+Pj4+ICsJc3RydWN0 IGR3Y19wY2llX2V2ZW50X2F0dHIgKmxhbmVfYXR0cnM7Cj4+Pj4gKwlzdHJ1Y3QgYXR0cmlidXRl ICoqcG11X2F0dHJzOwo+Pj4+ICsKPj4+PiArCW1lbXNldCgodm9pZCAqKXRtcCwgMCwgc2l6ZW9m KHRtcCkpOwo+Pj4+ICsJbWVtc2V0KCh2b2lkICopbGFuZSwgMCwgc2l6ZW9mKGxhbmUpKTsKPj4+ PiArCXRpbWVfYmFzZV9jb3VudCA9IEFSUkFZX1NJWkUoZHdjX3BjaWVfcG11X3RpbWVfZXZlbnRf YXR0cnMpOwo+Pj4+ICsJZXZlbnRzX3Blcl9sYW5lID0gQVJSQVlfU0laRShldmVudF9hcnJheSk7 Cj4+Pj4gKwludW1fbGFuZV9ldmVudHMgPSBwY2llX2luZm8tPm51bV9sYW5lcyAqIGV2ZW50c19w ZXJfbGFuZTsKPj4+PiArCW51bV9hdHRycyA9IHRpbWVfYmFzZV9jb3VudCArIG51bV9sYW5lX2V2 ZW50czsKPj4+PiArCj4+Pj4gKwlwY2llX2luZm8tPmxhbmVfZXZlbnRfYXR0cnMgPQo+Pj4+ICsJ CWRldm1fa2NhbGxvYyhwcml2LT5kZXYsIG51bV9sYW5lX2V2ZW50cywKPj4+PiArCQkJCXNpemVv ZihzdHJ1Y3QgZHdjX3BjaWVfZXZlbnRfYXR0ciksCj4+Pj4gKwkJCQlHRlBfS0VSTkVMKTsKPj4+ PiArCWlmICghcGNpZV9pbmZvLT5sYW5lX2V2ZW50X2F0dHJzKQo+Pj4+ICsJCXJldHVybiAtRU5P TUVNOwo+Pj4+ICsJbGFuZV9hdHRycyA9IHBjaWVfaW5mby0+bGFuZV9ldmVudF9hdHRyczsKPj4+ PiArCXBjaWVfaW5mby0+cGNpZV9wbXVfZXZlbnRfYXR0cnMgPQo+Pj4+ICsJCWRldm1fa2NhbGxv Yyhwcml2LT5kZXYsIG51bV9hdHRycywgc2l6ZW9mKHN0cnVjdCBhdHRyaWJ1dGUgKiksCj4+Pj4g KwkJCSBHRlBfS0VSTkVMKTsKPj4+PiArCWlmICghcGNpZV9pbmZvLT5wY2llX3BtdV9ldmVudF9h dHRycykKPj4+PiArCQlyZXR1cm4gLUVOT01FTTsKPj4+PiArCXBtdV9hdHRycyA9IHBjaWVfaW5m by0+cGNpZV9wbXVfZXZlbnRfYXR0cnM7Cj4+Pj4gKwo+Pj4+ICsJZm9yIChpID0gMDsgaSA8IG51 bV9sYW5lX2V2ZW50czsgaSsrKSB7Cj4+Pj4gKwkJbGFuZV9hdHRyc1tpXS5hdHRyLmF0dHIubmFt ZSA9Cj4+Pj4gKwkJICAgIGRldm1fa3phbGxvYyhwcml2LT5kZXYsIHNpemVvZihjaGFyKQo+Pj4+ ICsJCQkJICogQVRUUklfTkFNRV9NQVhfU0laRSwgR0ZQX0tFUk5FTCk7Cj4+Pj4gKwkJaWYgKCFs YW5lX2F0dHJzW2ldLmF0dHIuYXR0ci5uYW1lKQo+Pj4+ICsJCQlyZXR1cm4gLUVOT01FTTsKPj4+ PiArCX0KPj4+PiArCj4+Pj4gKwlhdHRyX2lkeCA9IDA7Cj4+Pj4gKwlmb3IgKGkgPSAwOyBpIDwg cGNpZV9pbmZvLT5udW1fbGFuZXM7IGkrKykgewo+Pj4+ICsJCXNwcmludGYobGFuZSwgIl9sYW5l JWQiLCBpKTsKPj4+PiArCj4+Pj4gKwkJZm9yIChqID0gMDsgaiA8IGV2ZW50c19wZXJfbGFuZTsg aisrKSB7Cj4+Pj4gKwkJCWludCBwb3MgPSBpICogZXZlbnRzX3Blcl9sYW5lICsgajsKPj4+PiAr Cj4+Pj4gKwkJCXN0cmNhdCgoY2hhciAqKXRtcCwgZXZlbnRfYXJyYXlbal0ubmFtZSk7Cj4+Pj4g KwkJCXN0cmNhdCgoY2hhciAqKXRtcCwgbGFuZSk7Cj4+Pj4gKwkJCW1lbWNweSgodm9pZCAqKWxh bmVfYXR0cnNbcG9zXS5hdHRyLmF0dHIubmFtZSwKPj4+PiArCQkJICAgICAgICh2b2lkICopdG1w LAo+Pj4+ICsJCQkgICAgICAgc2l6ZW9mKHRtcCkpOwo+Pj4+ICsKPj4+PiArCQkJbGFuZV9hdHRy c1twb3NdLmF0dHIuYXR0ci5tb2RlID0KPj4+PiArCQkJICAgIFZFUklGWV9PQ1RBTF9QRVJNSVNT SU9OUygwNDQ0KTsKPj4+PiArCQkJbGFuZV9hdHRyc1twb3NdLmF0dHIuc2hvdyA9IGR3Y19wY2ll X2V2ZW50X3Nob3c7Cj4+Pj4gKwkJCWxhbmVfYXR0cnNbcG9zXS5hdHRyLnN0b3JlID0gTlVMTDsK Pj4+PiArCQkJbGFuZV9hdHRyc1twb3NdLnR5cGUgPSBEV0NfUENJRV9MQU5FX0VWRU5UOwo+Pj4+ ICsJCQlsYW5lX2F0dHJzW3Bvc10uZXZlbnRpZCA9IGV2ZW50X2FycmF5W2pdLmV2ZW50X2lkOwo+ Pj4+ICsJCQlsYW5lX2F0dHJzW3Bvc10ubGFuZSA9IGk7Cj4+Pj4gKwkJCXBtdV9hdHRyc1thdHRy X2lkeCsrXSA9ICZsYW5lX2F0dHJzW3Bvc10uYXR0ci5hdHRyOwo+Pj4+ICsKPj4+PiArCQkJbWVt c2V0KCh2b2lkICopdG1wLCAwLCBzaXplb2YodG1wKSk7Cj4+Pj4gKwkJfQo+Pj4+ICsJfQo+Pj4+ ICsKPj4+PiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGR3Y19wY2llX3BtdV90aW1lX2V2 ZW50X2F0dHJzKTsgaSsrKQo+Pj4+ICsJCXBtdV9hdHRyc1thdHRyX2lkeCsrXSA9IGR3Y19wY2ll X3BtdV90aW1lX2V2ZW50X2F0dHJzW2ldOwo+Pj4+ICsKPj4+PiArCXBjaWVfaW5mby0+cGNpZV9w bXVfZXZlbnRfYXR0cnNbYXR0cl9pZHgrK10gPSBOVUxMOwo+Pj4+ICsKPj4+PiArCXBjaWVfaW5m by0+cGNpZV9wbXVfZXZlbnRfYXR0cnNfZ3JvdXAubmFtZSA9IGV2ZW50X2F0dHJfbmFtZTsKPj4+ PiArCXBjaWVfaW5mby0+cGNpZV9wbXVfZXZlbnRfYXR0cnNfZ3JvdXAuaXNfdmlzaWJsZSA9Cj4+ Pj4gKwkgICAgcGNpZV9wbXVfZXZlbnRfYXR0cl9pc192aXNpYmxlOwo+Pj4+ICsJcGNpZV9pbmZv LT5wY2llX3BtdV9ldmVudF9hdHRyc19ncm91cC5hdHRycyA9Cj4+Pj4gKwkgICAgcGNpZV9pbmZv LT5wY2llX3BtdV9ldmVudF9hdHRyczsKPj4+PiArCj4+Pj4gKwlwY2llX2luZm8tPnBjaWVfcG11 X2F0dHJfZ3JvdXBzWzBdID0KPj4+PiArCSAgICAmcGNpZV9pbmZvLT5wY2llX3BtdV9ldmVudF9h dHRyc19ncm91cDsKPj4+PiArCXBjaWVfaW5mby0+cGNpZV9wbXVfYXR0cl9ncm91cHNbMV0gPSAm cGNpZV9wbXVfZm9ybWF0X2F0dHJzX2dyb3VwOwo+Pj4+ICsJcGNpZV9pbmZvLT5wY2llX3BtdV9h dHRyX2dyb3Vwc1syXSA9ICZwY2llX3BtdV9jcHVtYXNrX2F0dHJzX2dyb3VwOwo+Pj4+ICsJcGNp ZV9pbmZvLT5wY2llX3BtdV9hdHRyX2dyb3Vwc1szXSA9IE5VTEw7Cj4+Pj4gKwo+Pj4+ICsJcmV0 dXJuIDA7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBpbnQgX19kd2NfcGNpZV9wbXVfcHJv YmUoc3RydWN0IGR3Y19wY2llX3BtdV9wcml2ICpwcml2LAo+Pj4+ICsJCQkJc3RydWN0IGR3Y19w Y2llX2luZm9fdGFibGUgKnBjaWVfaW5mbykKPj4+PiArewo+Pj4+ICsJaW50IHJldDsKPj4+PiAr CWNoYXIgKm5hbWU7Cj4+Pj4gKwlzdHJ1Y3QgZHdjX3BjaWVfcG11ICpwY2llX3BtdTsKPj4+PiAr CXN0cnVjdCBkZXZpY2UgKmRldjsKPj4+PiArCj4+Pj4gKwlpZiAoIXBjaWVfaW5mbyB8fCAhcGNp ZV9pbmZvLT5wZGV2KSB7Cj4+Pj4gKwkJcGNpX2VycihwY2llX2luZm8tPnBkZXYsICJJbnB1dCBw YXJhbWV0ZXIgaXMgaW52YWxpZFxuIik7Cj4+Pj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+Pj4gKwl9 Cj4+Pj4gKwo+Pj4+ICsJcGNpZV9wbXUgPSAmcGNpZV9pbmZvLT5wY2llX3BtdTsKPj4+PiArCWRl diA9ICZwY2llX2luZm8tPnBkZXYtPmRldjsKPj4+PiArCj4+Pj4gKwlyZXQgPSBkd2NfcGNpZV9w bXVfYXR0cl9pbml0KHByaXYsIHBjaWVfaW5mbyk7Cj4+Pj4gKwlpZiAocmV0KSB7Cj4+Pj4gKwkJ cGNpX2VycihwY2llX2luZm8tPnBkZXYsICJQTVUgYXR0ciBpbml0IGZhaWwgcmV0PSVkXG4iLCBy ZXQpOwo+Pj4+ICsJCXJldHVybiByZXQ7Cj4+Pj4gKwl9Cj4+Pj4gKwo+Pj4+ICsJcGNpZV9wbXUt PmRldiA9IGRldjsKPj4+PiArCXBjaWVfcG11LT5wbXUgPSAoc3RydWN0IHBtdSkgewo+Pj4+ICsJ CS5tb2R1bGUJCT0gVEhJU19NT0RVTEUsCj4+Pj4gKwkJLnRhc2tfY3R4X25yCT0gcGVyZl9pbnZh bGlkX2NvbnRleHQsCj4+Pj4gKwkJLnBtdV9lbmFibGUJPSBOVUxMLAo+Pj4+ICsJCS5wbXVfZGlz YWJsZQk9IE5VTEwsCj4+Pj4gKwkJLmV2ZW50X2luaXQJPSBkd2NfcGNpZV9wbXVfZXZlbnRfaW5p dCwKPj4+PiArCQkuYWRkCQk9IGR3Y19wY2llX3BtdV9ldmVudF9hZGQsCj4+Pj4gKwkJLmRlbAkJ PSBkd2NfcGNpZV9wbXVfZXZlbnRfZGVsLAo+Pj4+ICsJCS5zdGFydAkJPSBkd2NfcGNpZV9wbXVf ZXZlbnRfc3RhcnQsCj4+Pj4gKwkJLnN0b3AJCT0gZHdjX3BjaWVfcG11X2V2ZW50X3N0b3AsCj4+ Pj4gKwkJLnJlYWQJCT0gZHdjX3BjaWVfcG11X2V2ZW50X3JlYWQsCj4+Pj4gKwkJLmF0dHJfZ3Jv dXBzCT0gcGNpZV9pbmZvLT5wY2llX3BtdV9hdHRyX2dyb3VwcywKPj4+PiArCQkuY2FwYWJpbGl0 aWVzCT0gUEVSRl9QTVVfQ0FQX05PX0VYQ0xVREUsCj4+Pj4gKwl9Owo+Pj4+ICsKPj4+PiArCW5h bWUgPSBkZXZtX2thc3ByaW50Zihwcml2LT5kZXYsIEdGUF9LRVJORUwsICJwY2llX2JkZl8leCIs Cj4+Pj4gKwkJCSAgICAgIHBjaWVfaW5mby0+YmRmKTsKPj4+PiArCWlmICghbmFtZSkKPj4+PiAr CQlyZXR1cm4gLUVOT01FTTsKPj4+PiArCj4+Pj4gKwkvKiBQaWNrIG9uZSBDUFUgdG8gYmUgdGhl IHByZWZlcnJlZCBvbmUgdG8gdXNlICovCj4+Pj4gKwlwY2llX3BtdS0+b25fY3B1ID0gcmF3X3Nt cF9wcm9jZXNzb3JfaWQoKTsKPj4+PiArCj4+Pgo+Pj4gU28gd2UnbGwgcHJvYmFibGV5IGJpbmQg YWxsIHRoZSBwbXVzIG9uIG9uZSBzaW5nbGUgQ1BVLCBpcyBpdCBpbnRlbmRlZD8gU2luY2UgaXQn cwo+Pj4gYW4gdW5jb3JlIFBNVSwgd2UgY2FuIG1ha2UgaXQgcnVuIG9uIGFueSBjcHUgKG9yIGZv ciBsb2NhbGl0eSBDUFUgb24gdGhlIGNvbnRyb2xsZXIncwo+Pj4gTlVNQSBub2RlKS4KPj4+Cj4+ PiBBbmQgSSBkaWRuJ3Qgc2VlIHlvdSByZWdpc3RlciBhIGhvdHBsdWcgaGFuZGxlciwgc28gd2hh dCBpZiB0aGUgLT5vbl9jcHUgaXMgaG90IHJlbW92ZWQ/Cj4+Cj4+IFRoaXMgUE1VIGRvZXMgbm90 IHN1cHBvcnQgaW50ZXJydXB0IGF0IGFsbCwgc28gd2UgZG8gbm90IG5lZWQgdG8gYmluZCBpdCB0 byBDUFUuCj4+IFNob3VsZCB3ZSByZW1vdmUgdGhpcyBsaW5lPwo+Pgo+IAo+IE5vIGl0J3Mgc3Rp bGwgbmVlZGVkIHRvIHByb3ZpZGUgaXQgYW5kIGV4cG9ydCBpdCB0aHJvdWdoIHRoZSBjcHVtYXNr IHN5c2ZzIGF0dHJpYnV0ZSwgb3RoZXJ3aXNlCj4gdGhlIHBlcmYgY2Fubm90IHJlY29nbml6ZSBp dCBhcyBhbiB1bmNvcmUgUE1VIGRldmljZS4gU2VlIFsqXS4gSXQgY2FuIGJlIGEgc2luZ2xlIENQ VSBtYXNrIGFuZAo+IHRoZSBldmVudCB3aWxsIHN0YXJ0IG9ubHkgb24gdGhlIGdpdmVuIENQVS4g T3IgbWFrZSBpdCBhIHJhbmdlIG9mIENQVXMgYnV0IG9ubHkgbGV0IG9uZSBDUFUgcmVhbGx5Cj4g c3RhcnQgdGhlIGV2ZW50LiBJdCBtYXkgc3RpbGwgbmVlZCB0byBoYW5kbGUgdGhlIGNhc2UgdGhh dCB0aGUgQ1BVIHN0YXJ0IHRoZSBldmVudCBpcyBvZmZsaW5lLAo+IGV2ZW4gd2l0aG91dCBpbnRl cnJ1cHQuCgpUaGFuayB5b3UgZm9yIHRoZSBleHBsYW5hdGlvbi4KCj4gCj4gQlRXLCBzaW5jZSBp dCBkb2Vzbid0IHN1cHBvcnQgaW50ZXJydXB0LCBjYW4gY291bnRlcnMgb3ZlcmZsb3cgYW5kIGhv dyB0byBoYW5kbGUgdGhlIG92ZXJmbG93IGNhc2U/CgpUaGUgY291bnRlciBpcyA2NCBiaXQgc28g dGhhdCB3ZSBjYW4gc2FmdGx5IHVzZSBpdCBhbmQgZG8gbm90IG5lZWQgdG8gaGFuZGxlIG92ZXJm bG93LgoKPiAKPiBbKl0gaHR0cHM6Ly9naXRodWIuY29tL3RvcnZhbGRzL2xpbnV4L2Jsb2IvdjYu MC1yYzEvdG9vbHMvcGVyZi91dGlsL3BtdS5jI0w2MTUKPiAKPj4+Cj4+Pj4gKwlyZXQgPSBwZXJm X3BtdV9yZWdpc3RlcigmcGNpZV9wbXUtPnBtdSwgbmFtZSwgLTEpOwo+Pj4+ICsJaWYgKHJldCkg ewo+Pj4+ICsJCXBjaV9lcnIocGNpZV9pbmZvLT5wZGV2LCAiRXJyb3IgJWQgcmVnaXN0ZXJpbmcg UE1VIEAleFxuIiwgcmV0LAo+Pj4+ICsJCQkJIHBjaWVfaW5mby0+YmRmKTsKPj4+Cj4+PiB3aWxs IGJlIG1vcmUgaGVscGZ1bCB0byBwcmludCB0aGUgYmRmIGFzIGZvcm1hdCA8YnVzPjo8ZGV2Pjo8 ZnVuYz4uCj4+Cj4+IEdvb2QgaWRlYSwgd2lsbCBmaXggaW4gbmV4dCB2ZXJzaW9uLgo+Pgo+Pj4K Pj4+PiArCQlyZXR1cm4gcmV0Owo+Pj4+ICsJfQo+Pj4+ICsKPj4+PiArCXBjaWVfaW5mby0+cG11 X2lzX3JlZ2lzdGVyID0gRFdDX1BDSUVfUE1VX0hBU19SRUdJU1RFUjsKPj4+Cj4+PiBNYWtlIEBw bXVfaXNfcmVnaXN0ZXIgYSBib29sZWFuIHdpbGwgYmUgbW9yZSBjbGVhci4KPj4KPj4gQHBtdV9p c19yZWdpc3RlciBpcyBhbHNvIGRpc2N1c3NlZCBpbiBKb25hdGhhbicgcmVwbHkuIEpvbmF0aGFu IHN1Z2dlc3RzIHRvCj4+IHJlbW92ZSBpdCwgc28gbGV0IGRpc2N1c3MgaWYgdG8ga2VlcCB0aGlz IGZpZWxkIGZpcnN0IDopIElmIHdlIGRlY2lkZSB0byBrZWVwCj4+IGl0LCBJIHdpbGwgbGV0IGl0 IGJlIGJvb2xlYW4uCj4+Cj4+Pgo+Pj4+ICsKPj4+PiArCXJldHVybiByZXQ7Cj4+Pj4gK30KPj4+ PiArCj4+Pj4gK3N0YXRpYyBpbnQgZHdjX3BjaWVfcG11X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQo+Pj4+ICt7Cj4+Pj4gKwlzdHJ1Y3QgZHdjX3BjaWVfcG11X3ByaXYgKnBy aXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPj4+PiArCWludCBpbmRleDsKPj4+PiAr CXN0cnVjdCBkd2NfcGNpZV9wbXUgKnBjaWVfcG11Owo+Pj4KPj4+IE1ha2UgdGhlIGxvbmcgbGlu ZSBmaXJzdCB3aGVuIGRlY2xhcmluZy4KPj4KPj4gQWdyZWUsIHdpbGwgY2hhbmdlIHRoZSBjb2Rl IHN0eWxlLgo+Pgo+Pj4KPj4+PiArCj4+Pj4gKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBwcml2 LT5wY2llX2N0cmxfbnVtOyBpbmRleCsrKQo+Pj4+ICsJCWlmIChwcml2LT5wY2llX3RhYmxlW2lu ZGV4XS5wbXVfaXNfcmVnaXN0ZXIpIHsKPj4+PiArCQkJcGNpZV9wbXUgPSAmcHJpdi0+cGNpZV90 YWJsZVtpbmRleF0ucGNpZV9wbXU7Cj4+Pj4gKwkJCXBlcmZfcG11X3VucmVnaXN0ZXIoJnBjaWVf cG11LT5wbXUpOwo+Pj4+ICsJCX0KPj4+PiArCXJldHVybiAwOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ ICtzdGF0aWMgaW50IGR3Y19wY2llX3BtdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQo+Pj4+ICt7Cj4+Pj4gKwlpbnQgcmV0ID0gMDsKPj4+PiArCWludCBwY2llX2luZGV4Owo+ Pj4+ICsJc3RydWN0IGR3Y19wY2llX3BtdV9wcml2ICpwcml2Owo+Pj4+ICsKPj4+PiArCXByaXYg PSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7Cj4+ Pj4gKwlpZiAoIXByaXYpCj4+Pj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4+Pj4gKwlwcml2LT5kZXYg PSAmcGRldi0+ZGV2Owo+Pj4+ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7Cj4+ Pj4gKwo+Pj4+ICsJLyogSWYgUE1VIGlzIG5vdCBzdXBwb3J0IG9uIGN1cnJlbnQgcGxhdGZvcm0s IGtlZXAgc2xpZW50ICovCj4+Pj4gKwlpZiAoZHdjX3BjaWVfcG11X2Rpc2NvdmVyKHByaXYpKQo+ Pj4+ICsJCXJldHVybiAwOwo+Pj4+ICsKPj4+PiArCWZvciAocGNpZV9pbmRleCA9IDA7IHBjaWVf aW5kZXggPCBwcml2LT5wY2llX2N0cmxfbnVtOyBwY2llX2luZGV4KyspIHsKPj4+PiArCQlzdHJ1 Y3QgcGNpX2RldiAqcnAgPSBwcml2LT5wY2llX3RhYmxlW3BjaWVfaW5kZXhdLnBkZXY7Cj4+Pj4g Kwo+Pj4+ICsJCXJldCA9IF9fZHdjX3BjaWVfcG11X3Byb2JlKHByaXYsICZwcml2LT5wY2llX3Rh YmxlW3BjaWVfaW5kZXhdKTsKPj4+PiArCQlpZiAocmV0KSB7Cj4+Pj4gKwkJCWRldl9lcnIoJnJw LT5kZXYsICJQQ0llIFBNVSBwcm9iZSBmYWlsXG4iKTsKPj4+PiArCQkJZ290byBwbXVfdW5yZWdp c3RlcjsKPj4+PiArCQl9Cj4+Pj4gKwl9Cj4+Pj4gKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiUENJ ZSBQTVVzIHJlZ2lzdGVyZWRcbiIpOwo+Pj4+ICsKPj4+Cj4+PiBBcyBKb25hdGhhbiBtZW50aW9u ZWQgdGhpcyBtZXNzYWdlIG1heWJlIHVubmVjZXNzYXJ5LCBidXQgSSBtYXkgZmluZCBpdCB1c2Vm dWwgaWYgeW91Cj4+PiBwcmludCBob3cgbWFueSBQTVUncyByZWdpc3RlcmVkLgo+Pgo+PiBGaW5l LCBJIGNhbiBhZGQgYSBjb3VudCBoZXJlLgo+Pgo+Pj4KPj4+IE9uIG9uZSBQTVUgcmVnaXN0cmF0 aW9uIGZhaWxlZCwgeW91IGp1c3QgcmVtb3ZlIGFsbCB0aGUgUE1VcyByZWdpc3RlcmVkLiBJIHdv bmRlciBpZgo+Pj4gaXQncyBiZXR0ZXIgdG8gbWFrZSBhbHJlYWR5IHJlZ2lzdGVyZWQgUE1VIHN0 YXkgaW5zdGVhZCBvZiByZW1vdmluZyB0aGVtIGFsbC4KPj4KPj4gSWYgcGVyZl9wbXVfcmVnaXN0 ZXIgZmFpbHMsIGlzIGl0IG5lY2Vzc2FyeSB0byBjYWxsIHBlcmZfcG11X3VucmVnaXN0ZXI/IEkg ZGlkIG5vdCBmaW5kCj4+IHNpbWlsYXIgaW1wbGVtZW50YXRpb24gdG8gdW5yZWdpc3RlciBwbXUg d2hlbiBwZXJmX3BtdV9yZWdpc3RlciBmYWlscy4KPj4KPiAKPiBObyBuZWVkIGZvciB0aGlzIGJ1 dCB0aGF0J3Mgbm90IHdoYXQgSSBtZWFuIGhlcmUuIElmIHRoZXJlIHNob3VsZCBiZSBNIFBNVXMg YnV0IG9ubHkgTiBvZiB0aGVtCj4gYXJlIHByb2JlZCBzdWNjZXNzZnVsbHksIG1heWJlIG5vIG5l ZWQgdG8gZmFpbCB0aGUgcHJvYmUgYW5kIHJlbW92ZSB0aGVtIGFsbC4gV2Ugc3RpbGwgY2FuCj4g dXNlIHRoZW0gYnV0IGp1c3Qgbm90aWZ5IHRoZSB1c2VyIHRoYXQgaG93IG1hbnkgUE1VcyBhcmUg cmVnaXN0ZXJlZCBhbmQgdGhlIHJlc3QgZmFpbC4KPiBBbnl3YXkgaXQncyB1cCB0byB5b3UuCgpJ IHNlZSB5b3VyIHBvaW50LCBJIHdpbGwgdHJ5IHRvIGxlYXZlIHRoZSBQTVVzIHdoaWNoIGFyZSBw cm9iZWQgc3VjY2Vzc2Z1bGx5LgoKVGhhbmsgeW91IGZvciB5b3VyIHZhbHVhYmxlIGNvbW1lbnRz LgoKQmVzdCBSZWdhcmRzLApTaHVhaQoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0t a2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFp bG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==