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 DAA7BE70715 for ; Thu, 21 Sep 2023 10:51:12 +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=BRratwi1j9taBaHC0zRFbyk73zWweQWgWtUv0go5tjU=; b=zV3xO+Ap7eP7MA rke53FS7PDoqyJlzzFwKk/SE6QGSgDA1HHPbcF+Dd7Q38pdiH47LPMHnRFr9Z/g6sunmqesoz2Gep P7Db6B4nhXP8EkaOOPvvQFLUA6vrNcaVGU5hg+XVf+ssFoc2kOcLhcjwbdHHK62ucGSRhWf3w0QLv E9baTcIacPDcww7jNRa8PxyTpHcrrwgyeCCRY15xkbMcjPgMLAcQzP45es8o6CxuTQ/fMqk/5WuXm z7Bz+CoR4UDhSNmBkLXJtIvbJQeqOCoO8/tEE+rdxdwpiwWTk9dSEdZV4QOVaFZdHIT/lSR/maJYj t7eEOAM2yXHcXkWMBqyw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qjHH2-005rJD-0Q; Thu, 21 Sep 2023 10:51:08 +0000 Received: from ex01.ufhost.com ([61.152.239.75]) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qjHGv-005rGh-1h for linux-riscv@lists.infradead.org; Thu, 21 Sep 2023 10:51:06 +0000 Received: from EXMBX166.cuchost.com (unknown [175.102.18.54]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "EXMBX166", Issuer "EXMBX166" (not verified)) by ex01.ufhost.com (Postfix) with ESMTP id B3A4B24E361; Thu, 21 Sep 2023 18:50:26 +0800 (CST) Received: from EXMBX171.cuchost.com (172.16.6.91) by EXMBX166.cuchost.com (172.16.6.76) with Microsoft SMTP Server (TLS) id 15.0.1497.42; Thu, 21 Sep 2023 18:50:26 +0800 Received: from [192.168.125.57] (113.72.146.252) by EXMBX171.cuchost.com (172.16.6.91) with Microsoft SMTP Server (TLS) id 15.0.1497.42; Thu, 21 Sep 2023 18:50:25 +0800 Message-ID: <6234a378-fcc8-f632-3a4b-0ef58d80f48c@starfivetech.com> Date: Thu, 21 Sep 2023 18:50:25 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: Re: [PATCH v6 18/19] PCI: starfive: Add JH7110 PCIe controller Content-Language: en-US To: Emil Renner Berthing , Daire McNamara , Conor Dooley , Rob Herring , Krzysztof Kozlowski , Bjorn Helgaas , Lorenzo Pieralisi , =?UTF-8?Q?Krzysztof_Wilczy=c5=84ski?= CC: , , , , =?UTF-8?Q?Pali_Roh=c3=a1r?= , Paul Walmsley , Palmer Dabbelt , Albert Ou , Philipp Zabel , Mason Huo , Leyfoon Tan , Kevin Xie References: <20230915102243.59775-1-minda.chen@starfivetech.com> <20230915102243.59775-19-minda.chen@starfivetech.com> From: Minda Chen In-Reply-To: X-Originating-IP: [113.72.146.252] X-ClientProxiedBy: EXCAS062.cuchost.com (172.16.6.22) To EXMBX171.cuchost.com (172.16.6.91) X-YovoleRuleAgent: yovoleflag X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230921_035102_333315_B9A460C9 X-CRM114-Status: GOOD ( 27.60 ) X-BeenThere: linux-riscv@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-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org CgpPbiAyMDIzLzkvMTkgMTk6MzQsIEVtaWwgUmVubmVyIEJlcnRoaW5nIHdyb3RlOgo+IE1pbmRh IENoZW4gd3JvdGU6Cj4+Cj4+Cj4+IE9uIDIwMjMvOS8xOCA2OjEzLCBFbWlsIFJlbm5lciBCZXJ0 aGluZyB3cm90ZToKPj4gPiBNaW5kYSBDaGVuIHdyb3RlOgo+PiA+PiBBZGQgU3RhckZpdmUgSkg3 MTEwIFNvQyBQQ0llIGNvbnRyb2xsZXIgcGxhdGZvcm0KPj4gPj4gZHJpdmVyIGNvZGVzLCBhbmQg YWRkIGhvc3QgaW5pdC9kZWluaXQgdG8gcGNpZS1wbGRhLWhvc3QuYwo+PiA+Pgo+PiA+PiBTaWdu ZWQtb2ZmLWJ5OiBNaW5kYSBDaGVuIDxtaW5kYS5jaGVuQHN0YXJmaXZldGVjaC5jb20+Cj4+ID4+ IENvLWRldmVsb3BlZC1ieTogS2V2aW4gWGllIDxrZXZpbi54aWVAc3RhcmZpdmV0ZWNoLmNvbT4K Pj4gPj4gUmV2aWV3ZWQtYnk6IE1hc29uIEh1byA8bWFzb24uaHVvQHN0YXJmaXZldGVjaC5jb20+ Cj4+ID4+IC0tLQo+PiA+PiAgTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgIDcgKwo+PiA+PiAgZHJpdmVycy9wY2kvY29udHJvbGxlci9wbGRhL0tjb25maWcg ICAgICAgICAgfCAgMTIgKwo+PiA+PiAgZHJpdmVycy9wY2kvY29udHJvbGxlci9wbGRhL01ha2Vm aWxlICAgICAgICAgfCAgIDEgKwo+PiA+PiAgZHJpdmVycy9wY2kvY29udHJvbGxlci9wbGRhL3Bj aWUtcGxkYS1ob3N0LmMgfCAxMjEgKysrKy0KPj4gPj4gIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIv cGxkYS9wY2llLXBsZGEuaCAgICAgIHwgIDkxICsrKy0KPj4gPj4gIGRyaXZlcnMvcGNpL2NvbnRy b2xsZXIvcGxkYS9wY2llLXN0YXJmaXZlLmMgIHwgNDYxICsrKysrKysrKysrKysrKysrKysKPj4g Pj4gIDYgZmlsZXMgY2hhbmdlZCwgNjg4IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCj4+ ID4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wY2kvY29udHJvbGxlci9wbGRhL3BjaWUt c3RhcmZpdmUuYwo+PiA+Pgo+PiA+PiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJ TkVSUwo+PiA+PiBpbmRleCBlYmRiNjVlMTk1ZWUuLjQ2MzJjZDQxMWEzZCAxMDA2NDQKPj4gPj4g LS0tIGEvTUFJTlRBSU5FUlMKPj4gPj4gKysrIGIvTUFJTlRBSU5FUlMKPj4gPj4gQEAgLTE2Njc5 LDYgKzE2Njc5LDEzIEBAIFM6CU1haW50YWluZWQKPj4gPj4gIEY6CURvY3VtZW50YXRpb24vZGV2 aWNldHJlZS9iaW5kaW5ncy9wY2kvc29jaW9uZXh0LHVuaXBoaWVyLXBjaWUqCj4+ID4+ICBGOglk cml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2llLXVuaXBoaWVyKgo+PiA+Pgo+PiA+PiArUENJ RSBEUklWRVIgRk9SIFNUQVJGSVZFIEpINzF4MAo+PiA+PiArTToJS2V2aW4gWGllIDxrZXZpbi54 aWVAc3RhcmZpdmV0ZWNoLmNvbT4KPj4gPj4gK0w6CWxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmcK Pj4gPj4gK1M6CU1haW50YWluZWQKPj4gPj4gK0Y6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9i aW5kaW5ncy9wY2kvc3RhcmZpdmUqCj4+ID4+ICtGOglkcml2ZXJzL3BjaS9jb250cm9sbGVyL3Bs ZGEvcGNpZS1zdGFyZml2ZS5jCj4+ID4+ICsKPj4gPj4gIFBDSUUgRFJJVkVSIEZPUiBTVCBTUEVB UjEzWFgKPj4gPj4gIE06CVByYXR5dXNoIEFuYW5kIDxwcmF0eXVzaC5hbmFuZEBnbWFpbC5jb20+ Cj4+ID4+ICBMOglsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnCj4+ID4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL3BjaS9jb250cm9sbGVyL3BsZGEvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xs ZXIvcGxkYS9LY29uZmlnCj4+ID4+IGluZGV4IGU1NGE4MmVlOTRmNS4uOGRlNjYxNzMwYWE1IDEw MDY0NAo+PiA+PiAtLS0gYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BsZGEvS2NvbmZpZwo+PiA+ PiArKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BsZGEvS2NvbmZpZwo+PiA+PiBAQCAtMTUs NCArMTUsMTYgQEAgY29uZmlnIFBDSUVfTUlDUk9DSElQX0hPU1QKPj4gPj4gIAkgIFNheSBZIGhl cmUgaWYgeW91IHdhbnQga2VybmVsIHRvIHN1cHBvcnQgdGhlIE1pY3JvY2hpcCBBWEkgUENJZQo+ PiA+PiAgCSAgSG9zdCBCcmlkZ2UgZHJpdmVyLgo+PiA+Pgo+PiA+PiArY29uZmlnIFBDSUVfU1RB UkZJVkVfSE9TVAo+PiA+PiArCXRyaXN0YXRlICJTdGFyRml2ZSBQQ0llIGhvc3QgY29udHJvbGxl ciIKPj4gPj4gKwlkZXBlbmRzIG9uIE9GICYmIFBDSV9NU0kKPj4gPj4gKwlzZWxlY3QgUENJRV9Q TERBX0hPU1QKPj4gPj4gKwloZWxwCj4+ID4+ICsJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRv IHN1cHBvcnQgdGhlIFN0YXJGaXZlIFBDSWUgY29udHJvbGxlcgo+PiA+PiArCSAgaW4gaG9zdCBt b2RlLiBTdGFyRml2ZSBQQ0llIGNvbnRyb2xsZXIgdXNlcyBQTERBIFBDSWUKPj4gPj4gKwkgIGNv cmUuCj4+ID4+ICsJICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIHRoaXMgZHJpdmVyIGFzIG1vZHVs ZSBpdCB3aWxsCj4+ID4+ICsJICBiZSBkeW5hbWljYWxseSBsaW5rZWQgYW5kIG1vZHVsZSB3aWxs IGJlIGNhbGxlZAo+PiA+PiArCSAgcGNpZS1zdGFyZml2ZS5rbwo+PiA+PiArCj4+ID4+ICBlbmRt ZW51Cj4+ID4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BsZGEvTWFrZWZp bGUgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BsZGEvTWFrZWZpbGUKPj4gPj4gaW5kZXggNDM0 MGFiMDA3ZjQ0Li4wYWM2ODUxYmVkNDggMTAwNjQ0Cj4+ID4+IC0tLSBhL2RyaXZlcnMvcGNpL2Nv bnRyb2xsZXIvcGxkYS9NYWtlZmlsZQo+PiA+PiArKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVy L3BsZGEvTWFrZWZpbGUKPj4gPj4gQEAgLTEsMyArMSw0IEBACj4+ID4+ICAjIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4+ID4+ICBvYmotJChDT05GSUdfUENJRV9QTERBX0hPU1Qp ICs9IHBjaWUtcGxkYS1ob3N0Lm8KPj4gPj4gIG9iai0kKENPTkZJR19QQ0lFX01JQ1JPQ0hJUF9I T1NUKSArPSBwY2llLW1pY3JvY2hpcC1ob3N0Lm8KPj4gPj4gK29iai0kKENPTkZJR19QQ0lFX1NU QVJGSVZFX0hPU1QpICs9IHBjaWUtc3RhcmZpdmUubwo+PiA+PiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9wY2kvY29udHJvbGxlci9wbGRhL3BjaWUtcGxkYS1ob3N0LmMgYi9kcml2ZXJzL3BjaS9jb250 cm9sbGVyL3BsZGEvcGNpZS1wbGRhLWhvc3QuYwo+PiA+PiBpbmRleCAyNmU2Y2ZkMmVhYmEuLjhi MzJkZjQ3N2FkOCAxMDA2NDQKPj4gPj4gLS0tIGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9wbGRh L3BjaWUtcGxkYS1ob3N0LmMKPj4gPj4gKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9wbGRh L3BjaWUtcGxkYS1ob3N0LmMKPj4gPj4gQEAgLTIwLDYgKzIwLDE1IEBACj4+ID4+Cj4+ID4+ICAj aW5jbHVkZSAicGNpZS1wbGRhLmgiCj4+ID4+Cj4+ID4+ICt2b2lkIF9faW9tZW0gKnBsZGFfcGNp ZV9tYXBfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKPj4gPj4g KwkJCQlpbnQgd2hlcmUpCj4+ID4+ICt7Cj4+ID4+ICsJc3RydWN0IHBsZGFfcGNpZV9ycCAqcGNp ZSA9IGJ1cy0+c3lzZGF0YTsKPj4gPj4gKwo+PiA+PiArCXJldHVybiBwY2llLT5jb25maWdfYmFz ZSArIFBDSUVfRUNBTV9PRkZTRVQoYnVzLT5udW1iZXIsIGRldmZuLCB3aGVyZSk7Cj4+ID4+ICt9 Cj4+ID4+ICtFWFBPUlRfU1lNQk9MX0dQTChwbGRhX3BjaWVfbWFwX2J1cyk7Cj4+ID4+ICsKPj4g Pj4gIHN0YXRpYyB2b2lkIHBsZGFfaGFuZGxlX21zaShzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCj4+ ID4+ICB7Cj4+ID4+ICAJc3RydWN0IHBsZGFfcGNpZV9ycCAqcG9ydCA9IGlycV9kZXNjX2dldF9o YW5kbGVyX2RhdGEoZGVzYyk7Cj4+ID4+IEBAIC0zNzAsNiArMzc5LDEyIEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3QgcGxkYV9ldmVudF9vcHMgcGxkYV9ldmVudF9vcHMgPSB7Cj4+ID4+ICAJLmdldF9l dmVudHMgPSBwbGRhX2dldF9ldmVudHMsCj4+ID4+ICB9Owo+PiA+Pgo+PiA+PiArc3RhdGljIGNv bnN0IHN0cnVjdCBwbGRhX2V2ZW50IHBsZGFfZGVmYXVsdF9ldmVudCA9IHsKPj4gPj4gKwkuZXZl bnRfb3BzCQk9ICZwbGRhX2V2ZW50X29wcywKPj4gPj4gKwkuaW50eF9ldmVudAkJPSBFVkVOVF9Q TV9NU0lfSU5UX0lOVFgsCj4+ID4+ICsJLm1zaV9ldmVudAkJPSBFVkVOVF9QTV9NU0lfSU5UX01T SQo+PiA+PiArfTsKPj4gPj4gKwo+PiA+PiAgc3RhdGljIGludCBwbGRhX3BjaWVfaW5pdF9pcnFf ZG9tYWlucyhzdHJ1Y3QgcGxkYV9wY2llX3JwICpwb3J0LAo+PiA+PiAgCQkJCSAgICAgIGNvbnN0 IHN0cnVjdCBpcnFfZG9tYWluX29wcyAqb3BzKQo+PiA+PiAgewo+PiA+PiBAQCAtNDE2LDcgKzQz MSw2IEBAIGludCBwbGRhX2luaXRfaW50ZXJydXB0cyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2LAo+PiA+PiAgCQkJIGNvbnN0IHN0cnVjdCBwbGRhX2V2ZW50ICpldmVudCkKPj4gPj4gIHsK Pj4gPj4gIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+PiA+PiAtCWludCBpcnE7 Cj4+ID4+ICAJaW50IGksIGludHhfaXJxLCBtc2lfaXJxLCBldmVudF9pcnE7Cj4+ID4+ICAJaW50 IHJldDsKPj4gPj4gIAljb25zdCBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgKmlycV9kb21fb3BzOwo+ PiA+PiBAQCAtNDM0LDggKzQ0OCw4IEBAIGludCBwbGRhX2luaXRfaW50ZXJydXB0cyhzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+PiA+PiAgCQlyZXR1cm4gcmV0Owo+PiA+PiAgCX0KPj4g Pj4KPj4gPj4gLQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwo+PiA+PiAtCWlmIChp cnEgPCAwKQo+PiA+PiArCXBvcnQtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Cj4+ ID4+ICsJaWYgKHBvcnQtPmlycSA8IDApCj4+ID4+ICAJCXJldHVybiAtRU5PREVWOwo+PiA+Cj4+ ID4gSGVyZSB5b3UncmUgZHJvcHBpbmcgdGhlIGxvY2FsIHZhcmlhYmxlIGlycSBhbmQganVzdCB1 c2UgcG9ydC0+aXJxIGRpcmVjdGx5Li4KPj4gPgo+PiA+Pgo+PiA+PiAgCXBvcnQtPmV2ZW50X29w cyA9IGV2ZW50LT5ldmVudF9vcHM7Cj4+ID4+IEBAIC00NjUsNiArNDc5LDcgQEAgaW50IHBsZGFf aW5pdF9pbnRlcnJ1cHRzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4+ID4+ICAJCWRl dl9lcnIoZGV2LCAiZmFpbGVkIHRvIG1hcCBJTlR4IGludGVycnVwdFxuIik7Cj4+ID4+ICAJCXJl dHVybiAtRU5YSU87Cj4+ID4+ICAJfQo+PiA+PiArCXBvcnQtPmludHhfaXJxID0gaW50eF9pcnE7 Cj4+ID4KPj4gPiAuLmJ1dCBmb3IgaW50eF9pcnEuLgo+PiA+Cj4+ID4+Cj4+ID4+ICAJLyogUGx1 ZyB0aGUgSU5UeCBjaGFpbmVkIGhhbmRsZXIgKi8KPj4gPj4gIAlpcnFfc2V0X2NoYWluZWRfaGFu ZGxlcl9hbmRfZGF0YShpbnR4X2lycSwgcGxkYV9oYW5kbGVfaW50eCwgcG9ydCk7Cj4+ID4+IEBA IC00NzMsMTIgKzQ4OCwxMyBAQCBpbnQgcGxkYV9pbml0X2ludGVycnVwdHMoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldiwKPj4gPj4gIAkJCQkgICAgIGV2ZW50LT5tc2lfZXZlbnQpOwo+PiA+ PiAgCWlmICghbXNpX2lycSkKPj4gPj4gIAkJcmV0dXJuIC1FTlhJTzsKPj4gPj4gKwlwb3J0LT5t c2lfaXJxID0gbXNpX2lycTsKPj4gPgo+PiA+IC4uYW5kIG1zaV9pcnEgeW91J3JlIGtlZXBpbmcg dGhlIGxvY2FsIHZhcmlhYmxlLiBJIHRoaW5rIHlvdSBzaG91bGQgZHJvcAo+PiA+IHRoZSBsb2Nh bCB2YXJpYWJsZXMgaGVyZSB0b28sIG9yIGF0IGxlYXN0IGRvIHRoZSBzYW1lIGZvciBhbGwgb2Yg dGhlbS4KPj4gPgo+PiBPSywgcmVtb3ZlIGFsbCB0aGUgbG9jYWwgdmFyaWFibGVzIGlzIGJldHRl ci4KPj4gPj4KPj4gPj4gIAkvKiBQbHVnIHRoZSBNU0kgY2hhaW5lZCBoYW5kbGVyICovCj4+ID4+ ICAJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXJfYW5kX2RhdGEobXNpX2lycSwgcGxkYV9oYW5kbGVf bXNpLCBwb3J0KTsKPj4gPj4KPj4gPj4gIAkvKiBQbHVnIHRoZSBtYWluIGV2ZW50IGNoYWluZWQg aGFuZGxlciAqLwo+PiA+PiAtCWlycV9zZXRfY2hhaW5lZF9oYW5kbGVyX2FuZF9kYXRhKGlycSwg cGxkYV9oYW5kbGVfZXZlbnQsIHBvcnQpOwo+PiA+PiArCWlycV9zZXRfY2hhaW5lZF9oYW5kbGVy X2FuZF9kYXRhKHBvcnQtPmlycSwgcGxkYV9oYW5kbGVfZXZlbnQsIHBvcnQpOwo+PiA+Pgo+PiA+ PiAgCXJldHVybiAwOwo+PiA+PiAgfQo+PiA+PiBAQCAtNTQ0LDMgKzU2MCwxMDAgQEAgaW50IHBs ZGFfcGNpZV9zZXR1cF9pb21lbXMoc3RydWN0IHBjaV9ob3N0X2JyaWRnZSAqYnJpZGdlLAo+PiA+ PiAgCXJldHVybiAwOwo+PiA+PiAgfQo+PiA+PiAgRVhQT1JUX1NZTUJPTF9HUEwocGxkYV9wY2ll X3NldHVwX2lvbWVtcyk7Cj4+ID4+ICsKPj4gPj4gK3N0YXRpYyB2b2lkIHBsZGFfcGNpZV9pcnFf ZG9tYWluX2RlaW5pdChzdHJ1Y3QgcGxkYV9wY2llX3JwICpwY2llKQo+PiA+PiArewo+PiA+PiAr CWlycV9zZXRfY2hhaW5lZF9oYW5kbGVyX2FuZF9kYXRhKHBjaWUtPmlycSwgTlVMTCwgTlVMTCk7 Cj4+ID4+ICsJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXJfYW5kX2RhdGEocGNpZS0+bXNpX2lycSwg TlVMTCwgTlVMTCk7Cj4+ID4+ICsJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXJfYW5kX2RhdGEocGNp ZS0+aW50eF9pcnEsIE5VTEwsIE5VTEwpOwo+PiA+PiArCj4+ID4+ICsJaXJxX2RvbWFpbl9yZW1v dmUocGNpZS0+bXNpLm1zaV9kb21haW4pOwo+PiA+PiArCWlycV9kb21haW5fcmVtb3ZlKHBjaWUt Pm1zaS5kZXZfZG9tYWluKTsKPj4gPj4gKwo+PiA+PiArCWlycV9kb21haW5fcmVtb3ZlKHBjaWUt PmludHhfZG9tYWluKTsKPj4gPj4gKwlpcnFfZG9tYWluX3JlbW92ZShwY2llLT5ldmVudF9kb21h aW4pOwo+PiA+PiArfQo+PiA+PiArCj4+ID4+ICtpbnQgcGxkYV9wY2llX2hvc3RfaW5pdChzdHJ1 Y3QgcGxkYV9wY2llX3JwICpwb3J0LCBzdHJ1Y3QgcGNpX29wcyAqb3BzKQo+PiA+PiArewo+PiA+ PiArCXN0cnVjdCByZXNvdXJjZSAqY2ZnX3JlczsKPj4gPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSBwb3J0LT5kZXY7Cj4+ID4+ICsJaW50IHJldDsKPj4gPj4gKwlzdHJ1Y3QgcGNpX2hvc3RfYnJp ZGdlICpicmlkZ2U7Cj4+ID4+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3Bs YXRmb3JtX2RldmljZShkZXYpOwo+PiA+Cj4+ID4gVGhpcyBsb29rcyB3ZWlyZC4gUGxlYXNlIG9y ZGVyIGluaXRpYWxpemVkIHZhcmlhYmxlcyBmaXJzdCBhbmQgbWF5YmUgZXZlbiBkbwo+PiA+IHJl dmVyc2UgY2hyaXN0bWFzIHRyZWUgb3JkZXIuIEVnLiBsb25nZWlzdCBsaW5lcyBmaXJzdC4KPj4g Pgo+PiBPSywgVGhlIHNhbWUgd2l0aCBvdGhlciBwbGFjZXMuCj4+ID4+ICsKPj4gPj4gKwlwb3J0 LT5icmlkZ2VfYWRkciA9Cj4+ID4+ICsJCWRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZV9i eW5hbWUocGRldiwgImFwYiIpOwo+PiA+PiArCj4+ID4+ICsJaWYgKElTX0VSUihwb3J0LT5icmlk Z2VfYWRkcikpCj4+ID4+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwb3J0 LT5icmlkZ2VfYWRkciksCj4+ID4+ICsJCQkJICAgICAiZmFpbGVkIHRvIG1hcCByZWcgbWVtb3J5 XG4iKTsKPj4gPj4gKwo+PiA+PiArCWNmZ19yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnlu YW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAiY2ZnIik7Cj4+ID4+ICsJaWYgKCFjZmdfcmVzKQo+ PiA+PiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9ERVYsCj4+ID4+ICsJCQkJICAg ICAiZmFpbGVkIHRvIGdldCBjb25maWcgbWVtb3J5XG4iKTsKPj4gPj4gKwo+PiA+PiArCXBvcnQt PmNvbmZpZ19iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgY2ZnX3Jlcyk7Cj4+ID4+ ICsJaWYgKElTX0VSUihwb3J0LT5jb25maWdfYmFzZSkpCj4+ID4+ICsJCXJldHVybiBkZXZfZXJy X3Byb2JlKGRldiwgUFRSX0VSUihwb3J0LT5jb25maWdfYmFzZSksCj4+ID4+ICsJCQkJICAgICAi ZmFpbGVkIHRvIG1hcCBjb25maWcgbWVtb3J5XG4iKTsKPj4gPj4gKwo+PiA+PiArCXBvcnQtPnBo eSA9IGRldm1fcGh5X29wdGlvbmFsX2dldChkZXYsIE5VTEwpOwo+PiA+PiArCWlmIChJU19FUlIo cG9ydC0+cGh5KSkKPj4gPj4gKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHBv cnQtPnBoeSksCj4+ID4+ICsJCQkJICAgICAiZmFpbGVkIHRvIGdldCBwY2llIHBoeVxuIik7Cj4+ ID4+ICsKPj4gPj4gKwlicmlkZ2UgPSBkZXZtX3BjaV9hbGxvY19ob3N0X2JyaWRnZShkZXYsIDAp Owo+PiA+PiArCWlmICghYnJpZGdlKQo+PiA+PiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYs IC1FTk9NRU0sCj4+ID4+ICsJCQkJICAgICAiZmFpbGVkIHRvIGFsbG9jIGJyaWRnZVxuIik7Cj4+ ID4+ICsKPj4gPj4gKwlpZiAocG9ydC0+aG9zdF9vcHMgJiYgcG9ydC0+aG9zdF9vcHMtPmhvc3Rf aW5pdCkgewo+PiA+PiArCQlyZXQgPSBwb3J0LT5ob3N0X29wcy0+aG9zdF9pbml0KHBvcnQpOwo+ PiA+PiArCQlpZiAocmV0KQo+PiA+PiArCQkJcmV0dXJuIHJldDsKPj4gPj4gKwl9Cj4+ID4+ICsK Pj4gPj4gKwlwb3J0LT5icmlkZ2UgPSBicmlkZ2U7Cj4+ID4+ICsJcGxkYV9wY2llX3NldHVwX3dp bmRvdyhwb3J0LT5icmlkZ2VfYWRkciwgMCwgY2ZnX3Jlcy0+c3RhcnQsIDAsCj4+ID4+ICsJCQkg ICAgICAgcmVzb3VyY2Vfc2l6ZShjZmdfcmVzKSk7Cj4+ID4+ICsJcGxkYV9wY2llX3NldHVwX2lv bWVtcyhicmlkZ2UsIHBvcnQpOwo+PiA+PiArCXBsZGFfc2V0X2RlZmF1bHRfbXNpKCZwb3J0LT5t c2kpOwo+PiA+PiArCXJldCA9IHBsZGFfaW5pdF9pbnRlcnJ1cHRzKHBkZXYsIHBvcnQsICZwbGRh X2RlZmF1bHRfZXZlbnQpOwo+PiA+PiArCWlmIChyZXQpCj4+ID4+ICsJCWdvdG8gZXJyX2hvc3Q7 Cj4+ID4+ICsKPj4gPj4gKwkvKiBTZXQgZGVmYXVsdCBidXMgb3BzICovCj4+ID4+ICsJYnJpZGdl LT5vcHMgPSBvcHM7Cj4+ID4+ICsJYnJpZGdlLT5zeXNkYXRhID0gcG9ydDsKPj4gPj4gKwo+PiA+ PiArCXJldCA9IHBjaV9ob3N0X3Byb2JlKGJyaWRnZSk7Cj4+ID4+ICsJaWYgKHJldCA8IDApIHsK Pj4gPj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcGNpIGhvc3QgcHJvYmU6ICVkXG4iLCBy ZXQpOwo+PiA+Cj4+ID4gSSB0aGluayB5b3UgbWVhbjoKPj4gPgo+PiA+IGRldl9lcnJfcHJvYmUo ZGV2LCByZXQsICJmYWlsZWQgdG8gcHJvYmUgcGNpIGhvc3RcbiIpOwo+PiA+Cj4+IEkgY2hlY2sg d2l0aCBkZXZfZXJyX3Byb2JlLCBJdCBpcyBiZXR0ZXIgdGhhbiBkZXZfZXJyLCBJIHdpbGwgcmVw bGFjZSB0aGlzLgo+PiA+PiArCQlnb3RvIGVycl9wcm9iZTsKPj4gPj4gKwl9Cj4+ID4+ICsKPj4g Pj4gKwlyZXR1cm4gcmV0Owo+PiA+PiArCj4+ID4+ICtlcnJfcHJvYmU6Cj4+ID4+ICsJcGxkYV9w Y2llX2lycV9kb21haW5fZGVpbml0KHBvcnQpOwo+PiA+PiArZXJyX2hvc3Q6Cj4+ID4+ICsJaWYg KHBvcnQtPmhvc3Rfb3BzICYmIHBvcnQtPmhvc3Rfb3BzLT5ob3N0X2RlaW5pdCkKPj4gPj4gKwkJ cG9ydC0+aG9zdF9vcHMtPmhvc3RfZGVpbml0KHBvcnQpOwo+PiA+PiArCj4+ID4+ICsJcmV0dXJu IHJldDsKPj4gPj4gK30KPj4gPj4gK0VYUE9SVF9TWU1CT0xfR1BMKHBsZGFfcGNpZV9ob3N0X2lu aXQpOwo+PiA+PiArCj4+ID4+ICt2b2lkIHBsZGFfcGNpZV9ob3N0X2RlaW5pdChzdHJ1Y3QgcGxk YV9wY2llX3JwICpwb3J0KQo+PiA+PiArewo+PiA+PiArCXBjaV9zdG9wX3Jvb3RfYnVzKHBvcnQt PmJyaWRnZS0+YnVzKTsKPj4gPj4gKwlwY2lfcmVtb3ZlX3Jvb3RfYnVzKHBvcnQtPmJyaWRnZS0+ YnVzKTsKPj4gPj4gKwo+PiA+PiArCXBsZGFfcGNpZV9pcnFfZG9tYWluX2RlaW5pdChwb3J0KTsK Pj4gPj4gKwo+PiA+PiArCWlmIChwb3J0LT5ob3N0X29wcyAmJiBwb3J0LT5ob3N0X29wcy0+aG9z dF9kZWluaXQpCj4+ID4+ICsJCXBvcnQtPmhvc3Rfb3BzLT5ob3N0X2RlaW5pdChwb3J0KTsKPj4g Pj4gK30KPj4gPj4gK0VYUE9SVF9TWU1CT0xfR1BMKHBsZGFfcGNpZV9ob3N0X2RlaW5pdCk7Cj4+ ID4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BsZGEvcGNpZS1wbGRhLmgg Yi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BsZGEvcGNpZS1wbGRhLmgKPj4gPj4gaW5kZXggYjc0 MjA1OThhMzI2Li5lNTcxMDQ3ZDc5NDQgMTAwNjQ0Cj4+ID4+IC0tLSBhL2RyaXZlcnMvcGNpL2Nv bnRyb2xsZXIvcGxkYS9wY2llLXBsZGEuaAo+PiA+PiArKysgYi9kcml2ZXJzL3BjaS9jb250cm9s bGVyL3BsZGEvcGNpZS1wbGRhLmgKPj4gPj4gQEAgLTYsMTQgKzYsMjQgQEAKPj4gPj4gICNpZm5k ZWYgX1BDSUVfUExEQV9ICj4+ID4+ICAjZGVmaW5lIF9QQ0lFX1BMREFfSAo+PiA+Pgo+PiA+PiAr I2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KPj4gPj4gKwo+PiA+PiAgLyogTnVtYmVyIG9mIE1T SSBJUlFzICovCj4+ID4+ICAjZGVmaW5lIFBMREFfTUFYX05VTV9NU0lfSVJRUwkJCTMyCj4+ID4+ Cj4+ID4+ICAvKiBQQ0llIEJyaWRnZSBQaHkgUmVncyAqLwo+PiA+PiArI2RlZmluZSBHRU5fU0VU VElOR1MJCQkJMHg4MAo+PiA+PiArI2RlZmluZSAgUlBfRU5BQkxFCQkJCTEKPj4gPj4gKyNkZWZp bmUgUENJRV9QQ0lfSURTX0RXMQkJCTB4OWMKPj4gPj4gKyNkZWZpbmUgIElEU19DTEFTU19DT0RF X1NISUZUCQkJMTYKPj4gPj4gICNkZWZpbmUgUENJRV9QQ0lfSVJRX0RXMAkJCTB4YTgKPj4gPj4g ICNkZWZpbmUgIE1TSVhfQ0FQX01BU0sJCQkJQklUKDMxKQo+PiA+PiAgI2RlZmluZSAgTlVNX01T SV9NU0dTX01BU0sJCQlHRU5NQVNLKDYsIDQpCj4+ID4+ICAjZGVmaW5lICBOVU1fTVNJX01TR1Nf U0hJRlQJCQk0Cj4+ID4+ICsjZGVmaW5lIFBDSV9NSVNDCQkJCTB4YjQKPj4gPj4gKyNkZWZpbmUg IFBIWV9GVU5DVElPTl9ESVMJCQlCSVQoMTUpCj4+ID4+ICsjZGVmaW5lIFBDSUVfV0lOUk9NCQkJ CTB4ZmMKPj4gPj4gKyNkZWZpbmUgIFBSRUZfTUVNX1dJTl82NF9TVVBQT1JUCQlCSVQoMykKPj4g Pj4KPj4gPj4gICNkZWZpbmUgSU1BU0tfTE9DQUwJCQkJMHgxODAKPj4gPj4gICNkZWZpbmUgIERN QV9FTkRfRU5HSU5FXzBfTUFTSwkJCTB4MDAwMDAwMDB1Cj4+ID4+IEBAIC02NCw2ICs3NCw4IEBA Cj4+ID4+ICAjZGVmaW5lIElTVEFUVVNfSE9TVAkJCQkweDE4Ywo+PiA+PiAgI2RlZmluZSBJTVNJ X0FERFIJCQkJMHgxOTAKPj4gPj4gICNkZWZpbmUgSVNUQVRVU19NU0kJCQkJMHgxOTQKPj4gPj4g KyNkZWZpbmUgUE1TR19TVVBQT1JUX1JYCQkJCTB4M2YwCj4+ID4+ICsjZGVmaW5lICBQTVNHX0xU Ul9TVVBQT1JUCQkJQklUKDIpCj4+ID4+Cj4+ID4+ICAvKiBQQ0llIE1hc3RlciB0YWJsZSBpbml0 IGRlZmluZXMgKi8KPj4gPj4gICNkZWZpbmUgQVRSMF9QQ0lFX1dJTjBfU1JDQUREUl9QQVJBTQkJ MHg2MDB1Cj4+ID4+IEBAIC04NSw2ICs5Nyw4IEBACj4+ID4+ICAjZGVmaW5lICBQQ0lFX1RYX1JY X0lOVEVSRkFDRQkJCTB4MDAwMDAwMDB1Cj4+ID4+ICAjZGVmaW5lICBQQ0lFX0NPTkZJR19JTlRF UkZBQ0UJCQkweDAwMDAwMDAxdQo+PiA+Pgo+PiA+PiArI2RlZmluZSBDT05GSUdfU1BBQ0VfQURE UgkJCTB4MTAwMHUKPj4gPj4gKwo+PiA+PiAgI2RlZmluZSBBVFJfRU5UUllfU0laRQkJCQkzMgo+ PiA+Pgo+PiA+PiAgI2RlZmluZSBFVkVOVF9BX0FUUl9FVlRfUE9TVF9FUlIJCTAKPj4gPj4gQEAg LTEzNCw2ICsxNDgsMTEgQEAgc3RydWN0IHBsZGFfZXZlbnRfb3BzIHsKPj4gPj4gIAl1MzIgKCpn ZXRfZXZlbnRzKShzdHJ1Y3QgcGxkYV9wY2llX3JwICpwY2llKTsKPj4gPj4gIH07Cj4+ID4+Cj4+ ID4+ICtzdHJ1Y3QgcGxkYV9wY2llX2hvc3Rfb3BzIHsKPj4gPj4gKwlpbnQgKCpob3N0X2luaXQp KHN0cnVjdCBwbGRhX3BjaWVfcnAgKnBjaWUpOwo+PiA+PiArCXZvaWQgKCpob3N0X2RlaW5pdCko c3RydWN0IHBsZGFfcGNpZV9ycCAqcGNpZSk7Cj4+ID4+ICt9Owo+PiA+PiArCj4+ID4+ICBzdHJ1 Y3QgcGxkYV9tc2kgewo+PiA+PiAgCXN0cnVjdCBtdXRleCBsb2NrOwkJLyogUHJvdGVjdCB1c2Vk IGJpdG1hcCAqLwo+PiA+PiAgCXN0cnVjdCBpcnFfZG9tYWluICptc2lfZG9tYWluOwo+PiA+PiBA QCAtMTQ1LDEyICsxNjQsMTkgQEAgc3RydWN0IHBsZGFfbXNpIHsKPj4gPj4KPj4gPj4gIHN0cnVj dCBwbGRhX3BjaWVfcnAgewo+PiA+PiAgCXN0cnVjdCBkZXZpY2UgKmRldjsKPj4gPj4gKwlzdHJ1 Y3QgcGNpX2hvc3RfYnJpZGdlICpicmlkZ2U7Cj4+ID4+ICAJc3RydWN0IGlycV9kb21haW4gKmlu dHhfZG9tYWluOwo+PiA+PiAgCXN0cnVjdCBpcnFfZG9tYWluICpldmVudF9kb21haW47Cj4+ID4+ ICAJcmF3X3NwaW5sb2NrX3QgbG9jazsKPj4gPj4gIAlzdHJ1Y3QgcGxkYV9tc2kgbXNpOwo+PiA+ PiAgCWNvbnN0IHN0cnVjdCBwbGRhX2V2ZW50X29wcyAqZXZlbnRfb3BzOwo+PiA+PiArCWNvbnN0 IHN0cnVjdCBwbGRhX3BjaWVfaG9zdF9vcHMgKmhvc3Rfb3BzOwo+PiA+PiArCXN0cnVjdCBwaHkg KnBoeTsKPj4gPj4gIAl2b2lkIF9faW9tZW0gKmJyaWRnZV9hZGRyOwo+PiA+PiArCXZvaWQgX19p b21lbSAqY29uZmlnX2Jhc2U7Cj4+ID4+ICsJaW50IGlycTsKPj4gPj4gKwlpbnQgbXNpX2lycTsK Pj4gPj4gKwlpbnQgaW50eF9pcnE7Cj4+ID4+ICAJaW50IG51bV9ldmVudHM7Cj4+ID4+ICB9Owo+ PiA+Pgo+PiA+PiBAQCAtMTYzLDYgKzE4OSw3IEBAIHN0cnVjdCBwbGRhX2V2ZW50IHsKPj4gPj4g IAlpbnQgbXNpX2V2ZW50Owo+PiA+PiAgfTsKPj4gPj4KPj4gPj4gK3ZvaWQgX19pb21lbSAqcGxk YV9wY2llX21hcF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLCBp bnQgd2hlcmUpOwo+PiA+PiAgaW50IHBsZGFfaW5pdF9pbnRlcnJ1cHRzKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYsCj4+ID4+ICAJCQkgc3RydWN0IHBsZGFfcGNpZV9ycCAqcG9ydCwKPj4g Pj4gIAkJCSBjb25zdCBzdHJ1Y3QgcGxkYV9ldmVudCAqZXZlbnQpOwo+PiA+PiBAQCAtMTcxLDQg KzE5OCw2NiBAQCB2b2lkIHBsZGFfcGNpZV9zZXR1cF93aW5kb3codm9pZCBfX2lvbWVtICpicmlk Z2VfYmFzZV9hZGRyLCB1MzIgaW5kZXgsCj4+ID4+ICAJCQkgICAgc2l6ZV90IHNpemUpOwo+PiA+ PiAgaW50IHBsZGFfcGNpZV9zZXR1cF9pb21lbXMoc3RydWN0IHBjaV9ob3N0X2JyaWRnZSAqYnJp ZGdlLAo+PiA+PiAgCQkJICAgc3RydWN0IHBsZGFfcGNpZV9ycCAqcG9ydCk7Cj4+ID4+IC0jZW5k aWYKPj4gPj4gK2ludCBwbGRhX3BjaWVfaG9zdF9pbml0KHN0cnVjdCBwbGRhX3BjaWVfcnAgKnBj aWUsIHN0cnVjdCBwY2lfb3BzICpvcHMpOwo+PiA+PiArdm9pZCBwbGRhX3BjaWVfaG9zdF9kZWlu aXQoc3RydWN0IHBsZGFfcGNpZV9ycCAqcGNpZSk7Cj4+ID4+ICsKPj4gPj4gK3N0YXRpYyBpbmxp bmUgdm9pZCBwbGRhX3NldF9kZWZhdWx0X21zaShzdHJ1Y3QgcGxkYV9tc2kgKm1zaSkKPj4gPj4g K3sKPj4gPj4gKwltc2ktPnZlY3Rvcl9waHkgPSBJTVNJX0FERFI7Cj4+ID4+ICsJbXNpLT5udW1f dmVjdG9ycyA9IFBMREFfTUFYX05VTV9NU0lfSVJRUzsKPj4gPj4gK30KPj4gPj4gKwo+PiA+PiAr c3RhdGljIGlubGluZSB2b2lkIHBsZGFfcGNpZV9lbmFibGVfcm9vdF9wb3J0KHN0cnVjdCBwbGRh X3BjaWVfcnAgKnBsZGEpCj4+ID4+ICt7Cj4+ID4+ICsJdTMyIHZhbHVlOwo+PiA+PiArCj4+ID4+ ICsJdmFsdWUgPSByZWFkbF9yZWxheGVkKHBsZGEtPmJyaWRnZV9hZGRyICsgR0VOX1NFVFRJTkdT KTsKPj4gPj4gKwl2YWx1ZSB8PSBSUF9FTkFCTEU7Cj4+ID4+ICsJd3JpdGVsX3JlbGF4ZWQodmFs dWUsIHBsZGEtPmJyaWRnZV9hZGRyICsgR0VOX1NFVFRJTkdTKTsKPj4gPj4gK30KPj4gPj4gKwo+ PiA+PiArc3RhdGljIGlubGluZSB2b2lkIHBsZGFfcGNpZV9zZXRfc3RhbmRhcmRfY2xhc3Moc3Ry dWN0IHBsZGFfcGNpZV9ycCAqcGxkYSkKPj4gPj4gK3sKPj4gPj4gKwl1MzIgdmFsdWU7Cj4+ID4+ ICsKPj4gPj4gKwl2YWx1ZSA9IHJlYWRsX3JlbGF4ZWQocGxkYS0+YnJpZGdlX2FkZHIgKyBQQ0lF X1BDSV9JRFNfRFcxKTsKPj4gPj4gKwl2YWx1ZSAmPSAweGZmOwo+PiA+PiArCXZhbHVlIHw9IChQ Q0lfQ0xBU1NfQlJJREdFX1BDSSA8PCBJRFNfQ0xBU1NfQ09ERV9TSElGVCk7Cj4+ID4KPj4gPiBU aGlzIGxvb2tzIHN1c3BpY2lvdXMuIFlvdSdyZSBjbGVhcmluZyB0aGUgbG93ZXIgOCBiaXRzLCBi dXQgc2V0dGluZwo+PiA+IGJpdHMgMTYgYW5kIHVwLiBBbHNvIHRoZSBwYXJlbnRoZXNlcyBhcmUg bm90IHN0cmljdGx5IG5lY2Vzc2FyeS4KPj4gPgo+PiBJIHdpbGwgYWRkIGNvbW1lbnRzIHRvIHRo aXMuCj4+ID4+ICsJd3JpdGVsX3JlbGF4ZWQodmFsdWUsIHBsZGEtPmJyaWRnZV9hZGRyICsgUENJ RV9QQ0lfSURTX0RXMSk7Cj4+ID4+ICt9Cj4+ID4+ICsKPj4gPj4gK3N0YXRpYyBpbmxpbmUgdm9p ZCBwbGRhX3BjaWVfc2V0X3ByZWZfd2luXzY0Yml0KHN0cnVjdCBwbGRhX3BjaWVfcnAgKnBsZGEp Cj4+ID4+ICt7Cj4+ID4+ICsJdTMyIHZhbHVlOwo+PiA+PiArCj4+ID4+ICsJdmFsdWUgPSByZWFk bF9yZWxheGVkKHBsZGEtPmJyaWRnZV9hZGRyICsgUENJRV9XSU5ST00pOwo+PiA+PiArCXZhbHVl IHw9IFBSRUZfTUVNX1dJTl82NF9TVVBQT1JUOwo+PiA+PiArCXdyaXRlbF9yZWxheGVkKHZhbHVl LCBwbGRhLT5icmlkZ2VfYWRkciArIFBDSUVfV0lOUk9NKTsKPj4gPj4gK30KPj4gPj4gKwo+PiA+ PiArc3RhdGljIGlubGluZSB2b2lkIHBsZGFfcGNpZV9kaXNhYmxlX2x0cihzdHJ1Y3QgcGxkYV9w Y2llX3JwICpwbGRhKQo+PiA+PiArewo+PiA+PiArCXUzMiB2YWx1ZTsKPj4gPj4gKwo+PiA+PiAr CXZhbHVlID0gcmVhZGxfcmVsYXhlZChwbGRhLT5icmlkZ2VfYWRkciArIFBNU0dfU1VQUE9SVF9S WCk7Cj4+ID4+ICsJdmFsdWUgJj0gflBNU0dfTFRSX1NVUFBPUlQ7Cj4+ID4+ICsJd3JpdGVsX3Jl bGF4ZWQodmFsdWUsIHBsZGEtPmJyaWRnZV9hZGRyICsgUE1TR19TVVBQT1JUX1JYKTsKPj4gPj4g K30KPj4gPj4gKwo+PiA+PiArc3RhdGljIGlubGluZSB2b2lkIHBsZGFfcGNpZV9kaXNhYmxlX2Z1 bmMoc3RydWN0IHBsZGFfcGNpZV9ycCAqcGxkYSkKPj4gPj4gK3sKPj4gPj4gKwl1MzIgdmFsdWU7 Cj4+ID4+ICsKPj4gPj4gKwl2YWx1ZSA9IHJlYWRsX3JlbGF4ZWQocGxkYS0+YnJpZGdlX2FkZHIg KyBQQ0lfTUlTQyk7Cj4+ID4+ICsJdmFsdWUgfD0gUEhZX0ZVTkNUSU9OX0RJUzsKPj4gPj4gKwl3 cml0ZWxfcmVsYXhlZCh2YWx1ZSwgcGxkYS0+YnJpZGdlX2FkZHIgKyBQQ0lfTUlTQyk7Cj4+ID4+ ICt9Cj4+ID4+ICsKPj4gPj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBwbGRhX3BjaWVfd3JpdGVfcmNf YmFyKHN0cnVjdCBwbGRhX3BjaWVfcnAgKnBsZGEsIHU2NCB2YWwpCj4+ID4+ICt7Cj4+ID4+ICsJ dm9pZCBfX2lvbWVtICphZGRyID0gcGxkYS0+YnJpZGdlX2FkZHIgKyBDT05GSUdfU1BBQ0VfQURE UjsKPj4gPj4gKwo+PiA+PiArCXdyaXRlbF9yZWxheGVkKHZhbCAmIDB4ZmZmZmZmZmYsIGFkZHIg KyBQQ0lfQkFTRV9BRERSRVNTXzApOwo+PiA+PiArCXdyaXRlbF9yZWxheGVkKHZhbCA+PiAzMiwg YWRkciArIFBDSV9CQVNFX0FERFJFU1NfMSk7Cj4+ID4KPj4gPiBDb25zaWRlciB1c2luZyBsb3dl cl8zMl9iaXRzKHZhbCkgYW5kIHVwcGVyXzMyX2JpdHModmFsKSBoZXJlLgo+PiA+Cj4+ID4+ICt9 Cj4+ID4+ICsjZW5kaWYgLyogX1BDSUVfUExEQV9IICovCj4+ID4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL3BjaS9jb250cm9sbGVyL3BsZGEvcGNpZS1zdGFyZml2ZS5jIGIvZHJpdmVycy9wY2kvY29u dHJvbGxlci9wbGRhL3BjaWUtc3RhcmZpdmUuYwo+PiA+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ PiA+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjQyMDk5ZmVmMGQ3ZAo+PiA+PiAtLS0gL2Rldi9udWxs Cj4+ID4+ICsrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGxkYS9wY2llLXN0YXJmaXZlLmMK Pj4gPj4gQEAgLTAsMCArMSw0NjEgQEAKPj4gPj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wKwo+PiA+PiArLyoKPj4gPj4gKyAqIFBDSWUgaG9zdCBjb250cm9sbGVyIGRyaXZl ciBmb3IgU3RhckZpdmUgSkg3MTEwIFNvYy4KPj4gPj4gKyAqCj4+ID4+ICsgKiBDb3B5cmlnaHQg KEMpIDIwMjMgU3RhckZpdmUgVGVjaG5vbG9neSBDby4sIEx0ZC4KPj4gPj4gKyAqLwo+PiA+PiAr Cj4+ID4+ICsjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4KPj4gPj4gKyNpbmNsdWRlIDxsaW51 eC9jbGsuaD4KPj4gPj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+PiA+PiArI2luY2x1ZGUg PGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KPj4gPj4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQu aD4KPj4gPj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPj4gPj4gKyNpbmNsdWRlIDxsaW51 eC9tZmQvc3lzY29uLmg+Cj4+ID4+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4+ID4+ICsj aW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgo+PiA+PiArI2luY2x1ZGUgPGxpbnV4L29mX2ly cS5oPgo+PiA+PiArI2luY2x1ZGUgPGxpbnV4L29mX3BjaS5oPgo+PiA+PiArI2luY2x1ZGUgPGxp bnV4L3BjaS5oPgo+PiA+PiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+PiA+ PiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KPj4gPj4gKyNpbmNsdWRlIDxsaW51eC9y ZWdtYXAuaD4KPj4gPj4gKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgo+PiA+PiArI2luY2x1ZGUg Ii4uLy4uL3BjaS5oIgo+PiA+PiArCj4+ID4+ICsjaW5jbHVkZSAicGNpZS1wbGRhLmgiCj4+ID4+ ICsKPj4gPj4gKyNkZWZpbmUgUENJRV9GVU5DX05VTQkJCTQKPj4gPj4gKwo+PiA+PiArLyogc3lz dGVtIGNvbnRyb2wgKi8KPj4gPj4gKyNkZWZpbmUgU1RHX1NZU0NPTl9QQ0lFMF9CQVNFCQkJMHg0 OAo+PiA+PiArI2RlZmluZSBTVEdfU1lTQ09OX1BDSUUxX0JBU0UJCQkweDFmOAo+PiA+PiArCj4+ ID4+ICsjZGVmaW5lIFNUR19TWVNDT05fQVJGVU5DX09GRlNFVAkJMHg3OAo+PiA+PiArI2RlZmlu ZSBTVEdfU1lTQ09OX0FYSTRfU0xWTF9BUkZVTkNfTUFTSwkgR0VOTUFTSygyMiwgOCkKPj4gPj4g KyNkZWZpbmUgU1RHX1NZU0NPTl9BWEk0X1NMVkxfUEhZX0FSRlVOQyh4KQkgRklFTERfUFJFUChH RU5NQVNLKDIwLCAxNyksIHgpCj4+ID4+ICsjZGVmaW5lIFNUR19TWVNDT05fQVdGVU5DX09GRlNF VAkJMHg3Ywo+PiA+PiArI2RlZmluZSBTVEdfU1lTQ09OX0FYSTRfU0xWTF9BV0ZVTkNfTUFTSwkg R0VOTUFTSygxNCwgMCkKPj4gPj4gKyNkZWZpbmUgU1RHX1NZU0NPTl9BWEk0X1NMVkxfUEhZX0FX RlVOQyh4KQkgRklFTERfUFJFUChHRU5NQVNLKDEyLCA5KSwgeCkKPj4gPj4gKyNkZWZpbmUgU1RH X1NZU0NPTl9DTEtSRVEJCQkgQklUKDIyKQo+PiA+PiArI2RlZmluZSBTVEdfU1lTQ09OX0NLUkVG X1NSQ19NQVNLCQkgR0VOTUFTSygxOSwgMTgpCj4+ID4+ICsjZGVmaW5lIFNUR19TWVNDT05fUlBf TkVQX09GRlNFVAkJMHhlOAo+PiA+PiArI2RlZmluZSBTVEdfU1lTQ09OX0tfUlBfTkVQCQkJIEJJ VCg4KQo+PiA+PiArI2RlZmluZSBTVEdfU1lTQ09OX0xOS1NUQV9PRkZTRVQJCTB4MTcwCj4+ID4+ ICsjZGVmaW5lIERBVEFfTElOS19BQ1RJVkUJCQkgQklUKDUpCj4+ID4+ICsKPj4gPj4gKy8qIFBh cmFtZXRlcnMgZm9yIHRoZSB3YWl0aW5nIGZvciBsaW5rIHVwIHJvdXRpbmUgKi8KPj4gPj4gKyNk ZWZpbmUgTElOS19XQUlUX01BWF9SRVRSSUVTCTEwCj4+ID4+ICsjZGVmaW5lIExJTktfV0FJVF9V U0xFRVBfTUlOCTkwMDAwCj4+ID4+ICsjZGVmaW5lIExJTktfV0FJVF9VU0xFRVBfTUFYCTEwMDAw MAo+PiA+PiArCj4+ID4+ICtzdHJ1Y3Qgc3RhcmZpdmVfamg3MTEwX3BjaWUgewo+PiA+PiArCXN0 cnVjdCBwbGRhX3BjaWVfcnAgcGxkYTsKPj4gPj4gKwlzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcmVz ZXRzOwo+PiA+PiArCXN0cnVjdCBjbGtfYnVsa19kYXRhICpjbGtzOwo+PiA+PiArCXN0cnVjdCBy ZWdtYXAgKnJlZ19zeXNjb247Cj4+ID4+ICsJc3RydWN0IGdwaW9fZGVzYyAqcG93ZXJfZ3BpbzsK Pj4gPj4gKwlzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNldF9ncGlvOwo+PiA+PiArCj4+ID4+ICsJdTMy IHN0Z19hcmZ1bjsKPj4gPj4gKwl1MzIgc3RnX2F3ZnVuOwo+PiA+PiArCXUzMiBzdGdfcnBfbmVw Owo+PiA+PiArCXUzMiBzdGdfbG5rc3RhOwo+PiA+PiArCj4+ID4+ICsJaW50IG51bV9jbGtzOwo+ PiA+PiArfTsKPj4gPj4gKwo+PiA+PiArLyoKPj4gPj4gKyAqIFRoZSBCQVIwLzEgb2YgYnJpZGdl IHNob3VsZCBiZSBoaWRkZW4gZHVyaW5nIGVudW1lcmF0aW9uIHRvCj4+ID4+ICsgKiBhdm9pZCB0 aGUgc2l6aW5nIGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uIGJ5IFBDSWUgY29yZS4KPj4gPj4gKyAq Lwo+PiA+PiArc3RhdGljIGJvb2wgc3RhcmZpdmVfcGNpZV9oaWRlX3JjX2JhcihzdHJ1Y3QgcGNp X2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgIGRldmZuLAo+PiA+PiArCQkJCSAgICAgIGludCBvZmZz ZXQpCj4+ID4+ICt7Cj4+ID4+ICsJaWYgKHBjaV9pc19yb290X2J1cyhidXMpICYmICFkZXZmbiAm Jgo+PiA+PiArCSAgICAob2Zmc2V0ID09IFBDSV9CQVNFX0FERFJFU1NfMCB8fCBvZmZzZXQgPT0g UENJX0JBU0VfQUREUkVTU18xKSkKPj4gPj4gKwkJcmV0dXJuIHRydWU7Cj4+ID4+ICsKPj4gPj4g KwlyZXR1cm4gZmFsc2U7Cj4+ID4+ICt9Cj4+ID4+ICsKPj4gPj4gK3N0YXRpYyBpbnQgc3RhcmZp dmVfcGNpZV9jb25maWdfd3JpdGUoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRl dmZuLAo+PiA+PiArCQkJCSAgICAgIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWx1ZSkKPj4g Pj4gK3sKPj4gPj4gKwlpZiAoc3RhcmZpdmVfcGNpZV9oaWRlX3JjX2JhcihidXMsIGRldmZuLCB3 aGVyZSkpCj4+ID4+ICsJCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7Cj4+ID4+ ICsKPj4gPj4gKwlyZXR1cm4gcGNpX2dlbmVyaWNfY29uZmlnX3dyaXRlKGJ1cywgZGV2Zm4sIHdo ZXJlLCBzaXplLCB2YWx1ZSk7Cj4+ID4+ICt9Cj4+ID4+ICsKPj4gPj4gK3N0YXRpYyBpbnQgc3Rh cmZpdmVfcGNpZV9jb25maWdfcmVhZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQg ZGV2Zm4sCj4+ID4+ICsJCQkJICAgICBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKnZhbHVlKQo+ PiA+PiArewo+PiA+PiArCWlmIChzdGFyZml2ZV9wY2llX2hpZGVfcmNfYmFyKGJ1cywgZGV2Zm4s IHdoZXJlKSkKPj4gPj4gKwkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsKPj4g Pj4gKwo+PiA+PiArCXJldHVybiBwY2lfZ2VuZXJpY19jb25maWdfcmVhZChidXMsIGRldmZuLCB3 aGVyZSwgc2l6ZSwgdmFsdWUpOwo+PiA+PiArfQo+PiA+PiArCj4+ID4+ICtzdGF0aWMgaW50IHN0 YXJmaXZlX3BjaWVfcGFyc2VfZHQoc3RydWN0IHN0YXJmaXZlX2poNzExMF9wY2llICpwY2llLCBz dHJ1Y3QgZGV2aWNlICpkZXYpCj4+ID4+ICt7Cj4+ID4+ICsJaW50IGRvbWFpbl9uciwgc3RnX3Bj aWVfYmFzZTsKPj4gPj4gKwo+PiA+PiArCXBjaWUtPm51bV9jbGtzID0gZGV2bV9jbGtfYnVsa19n ZXRfYWxsKGRldiwgJnBjaWUtPmNsa3MpOwo+PiA+PiArCWlmIChwY2llLT5udW1fY2xrcyA8IDAp Cj4+ID4+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVOT0RFViwKPj4gPj4gKwkJCSJm YWlsZWQgdG8gZ2V0IHBjaWUgY2xvY2tzXG4iKTsKPj4gPj4gKwo+PiA+PiArCXBjaWUtPnJlc2V0 cyA9IGRldm1fcmVzZXRfY29udHJvbF9hcnJheV9nZXRfZXhjbHVzaXZlKGRldik7Cj4+ID4+ICsJ aWYgKElTX0VSUihwY2llLT5yZXNldHMpKQo+PiA+PiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShk ZXYsIFBUUl9FUlIocGNpZS0+cmVzZXRzKSwKPj4gPj4gKwkJCSJmYWlsZWQgdG8gZ2V0IHBjaWUg cmVzZXRzIik7Cj4+ID4+ICsKPj4gPj4gKwlwY2llLT5yZWdfc3lzY29uID0KPj4gPj4gKwkJc3lz Y29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShkZXYtPm9mX25vZGUsCj4+ID4+ICsJCQkJCQki c3RhcmZpdmUsc3RnLXN5c2NvbiIpOwo+PiA+PiArCj4+ID4+ICsJaWYgKElTX0VSUihwY2llLT5y ZWdfc3lzY29uKSkKPj4gPj4gKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHBj aWUtPnJlZ19zeXNjb24pLAo+PiA+PiArCQkJImZhaWxlZCB0byBwYXJzZSBzdGFyZml2ZSxzdGct c3lzY29uXG4iKTsKPj4gPj4gKwo+PiA+PiArCWRvbWFpbl9uciA9IG9mX2dldF9wY2lfZG9tYWlu X25yKGRldi0+b2Zfbm9kZSk7Cj4+ID4+ICsKPj4gPj4gKwlpZiAoZG9tYWluX25yIDwgMCB8fCBk b21haW5fbnIgPiAxKQo+PiA+PiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9ERVYs Cj4+ID4+ICsJCQkiZmFpbGVkIHRvIGdldCB2YWxpZCBwY2llIGlkXG4iKTsKPj4gPj4gKwo+PiA+ PiArCWlmIChkb21haW5fbnIgPT0gMCkKPj4gPj4gKwkJc3RnX3BjaWVfYmFzZSA9IFNUR19TWVND T05fUENJRTBfQkFTRTsKPj4gPj4gKwllbHNlCj4+ID4+ICsJCXN0Z19wY2llX2Jhc2UgPSBTVEdf U1lTQ09OX1BDSUUxX0JBU0U7Cj4+ID4KPj4gPiBJdCBzZWVtcyB5b3Ugb25seSBuZWVkIHRoZSBk b21haW5fbnIgZm9yIHRoZSBkZXRlcm1pbmluZyB0aGlzIG9mZnNldCBpbnRvIHRoZQo+PiA+IHN0 Z19zeXNjb24uIFNpbmNlIHRoaXMgaXMgYWxyZWFkeSBzcGVjaWZpYyB0byB0aGUgSkg3MTEwIFNv Qywgd291bGRuJ3QgaXQgYmUKPj4gPiBzYWZlciB0byBtYXRjaCBvbiB0aGUgMHgyYjAwMDAwMC8w eDJjMDAwMDAwIG9yIDB4OTQwMDAwMDAwLzB4OWMwMDAwMDAwCj4+ID4gYWRkcmVzcyBvZiB0aGUg cGVyaXBoZXJhbCBpbnN0ZWFkPwo+PiA+Cj4+IE1heWJlIHRoaXMgY29kZXMgbm90IGp1c3QgYmlu ZCB0byBKSDcxMTAgU29DLgo+IAo+IFJpZ2h0LCBidXQgaW4gdGhhdCBjYXNlIHRoZSBTVEdfU1lT Q09OX1BDSUV7MCwxfV9CQVNFIG9mZnNldHMgd2lsbCBhbHNvIGJlCj4gZGlmZmVyZW50LCBzbyB5 b3UnZCBuZWVkIHRvIGdldCB0aGVtIGZyb20gZGV2aWNlIHRyZWUgbWF0Y2ggZGF0YSBhbnl3YXks IGFuZAo+IHRoZW4geW91IG1pZ2h0IGFzIHdlbGwgaGF2ZSBhbiB7IGFkZHJlc3MsIG9mZnNldCB9 IHRhYmxlLgo+IFByZXZpb3VzIEkgZGlzY3VzcyB0aGlzIHdpdGggQ29ub3LvvIxUaGUgbWF0Y2gg ZGF0YSBpcyBub3QgYWRkZWQgbm93LgpUaGUgbWF0Y2ggZGF0YSB3aWxsIGJlIGFkZGVkIFdoaWxl IGFkZGluZyBkaWZmZXJlbnQgZGV2aWNlIHRyZWUgY29tcGF0aWJsZS4gCk5vdyBqdXN0IG9uZSBj b21wYXRpYmxlLgo+PiA+PiArCj4+ID4+ICsJcGNpZS0+c3RnX2FyZnVuID0gc3RnX3BjaWVfYmFz ZSArIFNUR19TWVNDT05fQVJGVU5DX09GRlNFVDsKPj4gPj4gKwlwY2llLT5zdGdfYXdmdW4gPSBz dGdfcGNpZV9iYXNlICsgU1RHX1NZU0NPTl9BV0ZVTkNfT0ZGU0VUOwo+PiA+PiArCXBjaWUtPnN0 Z19ycF9uZXAgPSBzdGdfcGNpZV9iYXNlICsgU1RHX1NZU0NPTl9SUF9ORVBfT0ZGU0VUOwo+PiA+ PiArCXBjaWUtPnN0Z19sbmtzdGEgPSBzdGdfcGNpZV9iYXNlICsgU1RHX1NZU0NPTl9MTktTVEFf T0ZGU0VUOwo+PiA+Cj4+ID4gVGhlc2Ugb2Zmc2V0cyBhcmUgYWxsIHRoZSBzYW1lIGZvciBib3Ro IHBjaWUwIGFuZCBwY2llMSBzbyB3aHkgZG8geW91IG5lZWQgYQo+PiA+IHZhcmlhYmxlIGZvciBl YWNoPyBFZy4gd2h5IG5vdCBqdXN0Cj4+ID4KPj4gPiBpZiAoZG9tYWluX25yID09IDApCj4+ID4g CXBjaWUtPnN0Z19iYXNlID0gU1RHX1NZU0NPTl9QQ0lFMF9CQVNFOwo+PiA+IGVsc2UKPj4gPiAJ cGNpZS0+c3RnX2Jhc2UgPSBTVEdfU1lTQ09OX1BDSUUxX0JBU0U7Cj4+ID4KPj4gPiAuLmFuZCB0 aGVuIGFkZCBhZGQgdGhvc2Ugc3RhdGljIG9mZnNldHMgd2hlcmUgbmVlZGVkPwo+PiA+Cj4+IE9L LiBJIHdpbGwgdHJ5IHRvIG1vZGlmeSB0aGlzLgo+PiA+PiArCj4+ID4+ICsJcGNpZS0+cmVzZXRf Z3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKGRldiwgInBlcnN0IiwgR1BJT0RfT1VUX0hJ R0gpOwo+PiA+PiArCWlmIChJU19FUlIocGNpZS0+cmVzZXRfZ3BpbykpIHsKPj4gPj4gKwkJZGV2 X3dhcm4oZGV2LCAiZmFpbGVkIHRvIGdldCBwZXJzdC1ncGlvXG4iKTsKPj4gPgo+PiA+IFdoeSBp cyB0aGlzIGEgd2FybiB3aGVuIHlvdSBhY3R1YWxseSBlcnJvciBvdXQ/IEkgdGhpbmsgeW91IG1l YW4KPj4gPgo+PiA+IHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwY2llLT5yZXNl dF9ncGlvLCAiZmFpbGVkIHRvIGdldAo+PiA+IHJlc2V0IEdQSU9cbiIpOwo+PiA+Cj4+ID4+ICsJ CXJldHVybiAtRUlOVkFMOwo+PiA+PiArCX0KPj4gPj4gKwo+PiA+PiArCXBjaWUtPnBvd2VyX2dw aW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChkZXYsICJlbmFibGUiLCBHUElPRF9PVVRfTE9X KTsKPj4gPj4gKwlpZiAoSVNfRVJSKHBjaWUtPnBvd2VyX2dwaW8pKSB7Cj4+ID4+ICsJCWRldl93 YXJuKGRldiwgImZhaWxlZCB0byBnZXQgcG93ZXItZ3Bpb1xuIik7Cj4+ID4+ICsJCXJldHVybiAt RUlOVkFMOwo+PiA+Cj4+ID4gcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHBjaWUt PnBvd2VyX2dwaW8pLCAiZmFpbGVkIHRvIGdldAo+PiA+IHBvd2VyIEdQSU9cbiIpOwo+PiA+Cj4+ ID4+ICsJfQo+PiA+PiArCj4+ID4+ICsJcmV0dXJuIDA7Cj4+ID4+ICt9Cj4+ID4+ICsKPj4gPj4g K3N0YXRpYyBzdHJ1Y3QgcGNpX29wcyBzdGFyZml2ZV9wY2llX29wcyA9IHsKPj4gPj4gKwkubWFw X2J1cwk9IHBsZGFfcGNpZV9tYXBfYnVzLAo+PiA+PiArCS5yZWFkICAgICAgICAgICA9IHN0YXJm aXZlX3BjaWVfY29uZmlnX3JlYWQsCj4+ID4+ICsJLndyaXRlICAgICAgICAgID0gc3RhcmZpdmVf cGNpZV9jb25maWdfd3JpdGUsCj4+ID4+ICt9Owo+PiA+PiArCj4+ID4+ICtzdGF0aWMgaW50IHN0 YXJmaXZlX3BjaWVfY2xrX3JzdF9pbml0KHN0cnVjdCBzdGFyZml2ZV9qaDcxMTBfcGNpZSAqcGNp ZSkKPj4gPj4gK3sKPj4gPj4gKwlpbnQgcmV0Owo+PiA+PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9 IHBjaWUtPnBsZGEuZGV2Owo+PiA+Cj4+ID4gQWdhaW4sIHBsZWFzZSBvcmRlciBpbml0aWFsaXpl ZCB2YXJpYWJsZXMgZmlyc3QuCj4+ID4KPj4gPj4gKwo+PiA+PiArCXJldCA9IGNsa19idWxrX3By ZXBhcmVfZW5hYmxlKHBjaWUtPm51bV9jbGtzLCBwY2llLT5jbGtzKTsKPj4gPj4gKwlpZiAocmV0 KSB7Cj4+ID4+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBjbG9ja3NcbiIpOwo+ PiA+PiArCQlyZXR1cm4gcmV0Owo+PiA+Cj4+ID4gcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBy ZXQsICJmYWlsZWQgdG8gZW5hYmxlIGNsb2Nrc1xuIik7Cj4+ID4KPj4gPj4gKwl9Cj4+ID4+ICsK Pj4gPj4gKwlyZXQgPSByZXNldF9jb250cm9sX2RlYXNzZXJ0KHBjaWUtPnJlc2V0cyk7Cj4+ID4+ ICsJaWYgKHJldCkgewo+PiA+PiArCQljbGtfYnVsa19kaXNhYmxlX3VucHJlcGFyZShwY2llLT5u dW1fY2xrcywgcGNpZS0+Y2xrcyk7Cj4+ID4+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJl c2V0c1xuIik7Cj4+ID4KPj4gPiBJIHRoaW5rIHlvdSBtZWFuCj4+ID4gcmV0dXJuIGRldl9lcnJf cHJvYmUoZGV2LCByZXQsICJmYWlsZWQgdG8gZGVhc3NlcnQgcmVzZXRzXG4iKTsKPj4gPgo+PiA+ PiArCX0KPj4gPj4gKwo+PiA+PiArCXJldHVybiByZXQ7Cj4+ID4+ICt9Cj4+ID4+ICsKPj4gPj4g K3N0YXRpYyB2b2lkIHN0YXJmaXZlX3BjaWVfY2xrX3JzdF9kZWluaXQoc3RydWN0IHN0YXJmaXZl X2poNzExMF9wY2llICpwY2llKQo+PiA+PiArewo+PiA+PiArCXJlc2V0X2NvbnRyb2xfYXNzZXJ0 KHBjaWUtPnJlc2V0cyk7Cj4+ID4+ICsJY2xrX2J1bGtfZGlzYWJsZV91bnByZXBhcmUocGNpZS0+ bnVtX2Nsa3MsIHBjaWUtPmNsa3MpOwo+PiA+PiArfQo+PiA+PiArCj4+ID4+ICtzdGF0aWMgYm9v bCBzdGFyZml2ZV9wY2llX2xpbmtfdXAoc3RydWN0IHBsZGFfcGNpZV9ycCAqcGxkYSkKPj4gPj4g K3sKPj4gPj4gKwlzdHJ1Y3Qgc3RhcmZpdmVfamg3MTEwX3BjaWUgKnBjaWUgPQo+PiA+PiArCQlj b250YWluZXJfb2YocGxkYSwgc3RydWN0IHN0YXJmaXZlX2poNzExMF9wY2llLCBwbGRhKTsKPj4g Pj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwY2llLT5wbGRhLmRldjsKPj4gPgo+PiA+IFRoaXMg aXMgb25seSB1c2VkIG9uY2UgYmVsb3csIHNvIGp1c3QgdXNlIHBjaWUtPnBsZGEuZGV2IGRpcmVj dGx5IHRoZXJlLgo+PiA+Cj4+IE9LLCB0aGFua3MKPj4gPj4gKwlpbnQgcmV0Owo+PiA+PiArCXUz MiBzdGdfcmVnX3ZhbDsKPj4gPj4gKwo+PiA+PiArCXJldCA9IHJlZ21hcF9yZWFkKHBjaWUtPnJl Z19zeXNjb24sIHBjaWUtPnN0Z19sbmtzdGEsICZzdGdfcmVnX3ZhbCk7Cj4+ID4+ICsJaWYgKHJl dCkgewo+PiA+PiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWFkIGxpbmsgc3RhdHVzXG4i KTsKPj4gPj4gKwkJcmV0dXJuIGZhbHNlOwo+PiA+PiArCX0KPj4gPj4gKwo+PiA+PiArCWlmIChz dGdfcmVnX3ZhbCAmIERBVEFfTElOS19BQ1RJVkUpCj4+ID4+ICsJCXJldHVybiB0cnVlOwo+PiA+ PiArCj4+ID4+ICsJcmV0dXJuIGZhbHNlOwo+PiA+Cj4+ID4gVGhlc2UgbGFzdCA0IGxpbmVzIGlz IGp1c3QgInJldHVybiBzdGdfcmVnX3ZhbCAmIERBVEFfTElOS19BQ1RJVkU7IiByaWdodD8KPj4g Pgo+PiBPSwo+PiA+PiArfQo+PiA+PiArCj4+ID4+ICtzdGF0aWMgaW50IHN0YXJmaXZlX3BjaWVf aG9zdF93YWl0X2Zvcl9saW5rKHN0cnVjdCBzdGFyZml2ZV9qaDcxMTBfcGNpZSAqcGNpZSkKPj4g Pj4gK3sKPj4gPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwY2llLT5wbGRhLmRldjsKPj4gPgo+ PiA+IE9ubHkgdXNlZCBvbmNlLCBqdXN0IGlubGluZS4KPj4gPgo+PiA+PiArCWludCByZXRyaWVz Owo+PiA+PiArCj4+ID4+ICsJLyogQ2hlY2sgaWYgdGhlIGxpbmsgaXMgdXAgb3Igbm90ICovCj4+ ID4+ICsJZm9yIChyZXRyaWVzID0gMDsgcmV0cmllcyA8IExJTktfV0FJVF9NQVhfUkVUUklFUzsg cmV0cmllcysrKSB7Cj4+ID4+ICsJCWlmIChzdGFyZml2ZV9wY2llX2xpbmtfdXAoJnBjaWUtPnBs ZGEpKSB7Cj4+ID4+ICsJCQlkZXZfaW5mbyhkZXYsICJwb3J0IGxpbmsgdXBcbiIpOwo+PiA+PiAr CQkJcmV0dXJuIDA7Cj4+ID4+ICsJCX0KPj4gPj4gKwkJdXNsZWVwX3JhbmdlKExJTktfV0FJVF9V U0xFRVBfTUlOLCBMSU5LX1dBSVRfVVNMRUVQX01BWCk7Cj4+ID4+ICsJfQo+PiA+PiArCj4+ID4+ ICsJcmV0dXJuIC1FVElNRURPVVQ7Cj4+ID4+ICt9Cj4+ID4+ICsKPj4gPj4gK3N0YXRpYyBpbnQg c3RhcmZpdmVfcGNpZV9lbmFibGVfcGh5KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBsZGFf cGNpZV9ycCAqcGNpZSkKPj4gPj4gK3sKPj4gPj4gKwlpbnQgcmV0Owo+PiA+PiArCj4+ID4+ICsJ aWYgKCFwY2llLT5waHkpCj4+ID4+ICsJCXJldHVybiAwOwo+PiA+PiArCj4+ID4+ICsJcmV0ID0g cGh5X2luaXQocGNpZS0+cGh5KTsKPj4gPj4gKwlpZiAocmV0KQo+PiA+PiArCQlyZXR1cm4gZGV2 X2Vycl9wcm9iZShkZXYsIHJldCwKPj4gPj4gKwkJCSJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBwY2ll IHBoeVxuIik7Cj4+ID4+ICsKPj4gPj4gKwlyZXQgPSBwaHlfc2V0X21vZGUocGNpZS0+cGh5LCBQ SFlfTU9ERV9QQ0lFKTsKPj4gPj4gKwlpZiAocmV0KSB7Cj4+ID4+ICsJCWRldl9lcnIoZGV2LCAi ZmFpbGVkIHRvIHNldCBwY2llIG1vZGVcbiIpOwo+PiA+PiArCQlnb3RvIGVycl9waHlfb247Cj4+ ID4+ICsJfQo+PiA+PiArCj4+ID4+ICsJcmV0ID0gcGh5X3Bvd2VyX29uKHBjaWUtPnBoeSk7Cj4+ ID4+ICsJaWYgKHJldCkgewo+PiA+PiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBwb3dlciBv biBwY2llIHBoeVxuIik7Cj4+ID4+ICsJCWdvdG8gZXJyX3BoeV9vbjsKPj4gPj4gKwl9Cj4+ID4+ ICsKPj4gPj4gKwlyZXR1cm4gMDsKPj4gPj4gKwo+PiA+PiArZXJyX3BoeV9vbjoKPj4gPj4gKwlw aHlfZXhpdChwY2llLT5waHkpOwo+PiA+PiArCXJldHVybiByZXQ7Cj4+ID4+ICt9Cj4+ID4+ICsK Pj4gPj4gK3N0YXRpYyB2b2lkIHN0YXJmaXZlX3BjaWVfZGlzYWJsZV9waHkoc3RydWN0IHBsZGFf cGNpZV9ycCAqcGNpZSkKPj4gPj4gK3sKPj4gPj4gKwlwaHlfcG93ZXJfb2ZmKHBjaWUtPnBoeSk7 Cj4+ID4+ICsJcGh5X2V4aXQocGNpZS0+cGh5KTsKPj4gPj4gK30KPj4gPj4gKwo+PiA+PiArc3Rh dGljIHZvaWQgc3RhcmZpdmVfcGNpZV9ob3N0X2RlaW5pdChzdHJ1Y3QgcGxkYV9wY2llX3JwICpw bGRhKQo+PiA+PiArewo+PiA+PiArCXN0cnVjdCBzdGFyZml2ZV9qaDcxMTBfcGNpZSAqcGNpZSA9 Cj4+ID4+ICsJCWNvbnRhaW5lcl9vZihwbGRhLCBzdHJ1Y3Qgc3RhcmZpdmVfamg3MTEwX3BjaWUs IHBsZGEpOwo+PiA+PiArCj4+ID4+ICsJc3RhcmZpdmVfcGNpZV9jbGtfcnN0X2RlaW5pdChwY2ll KTsKPj4gPj4gKwlpZiAocGNpZS0+cG93ZXJfZ3BpbykKPj4gPj4gKwkJZ3Bpb2Rfc2V0X3ZhbHVl X2NhbnNsZWVwKHBjaWUtPnBvd2VyX2dwaW8sIDApOwo+PiA+PiArCXN0YXJmaXZlX3BjaWVfZGlz YWJsZV9waHkocGxkYSk7Cj4+ID4+ICt9Cj4+ID4+ICsKPj4gPj4gK3N0YXRpYyBpbnQgc3RhcmZp dmVfcGNpZV9ob3N0X2luaXQoc3RydWN0IHBsZGFfcGNpZV9ycCAqcGxkYSkKPj4gPj4gK3sKPj4g Pj4gKwlpbnQgaTsKPj4gPj4gKwlzdHJ1Y3Qgc3RhcmZpdmVfamg3MTEwX3BjaWUgKnBjaWUgPQo+ PiA+PiArCQljb250YWluZXJfb2YocGxkYSwgc3RydWN0IHN0YXJmaXZlX2poNzExMF9wY2llLCBw bGRhKTsKPj4gPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwbGRhLT5kZXY7Cj4+ID4+ICsJaW50 IHJldDsKPj4gPgo+PiA+IFdlaXJkIG9yZGVyaW5nIGFnYWluLgo+PiA+Cj4+ID4+ICsKPj4gPj4g KwlyZXQgPSBzdGFyZml2ZV9wY2llX2VuYWJsZV9waHkoZGV2LCBwbGRhKTsKPj4gPj4gKwlpZiAo cmV0KQo+PiA+PiArCQlyZXR1cm4gcmV0Owo+PiA+PiArCj4+ID4+ICsJcmVnbWFwX3VwZGF0ZV9i aXRzKHBjaWUtPnJlZ19zeXNjb24sIHBjaWUtPnN0Z19ycF9uZXAsCj4+ID4+ICsJCQkgICBTVEdf U1lTQ09OX0tfUlBfTkVQLCBTVEdfU1lTQ09OX0tfUlBfTkVQKTsKPj4gPj4gKwo+PiA+PiArCXJl Z21hcF91cGRhdGVfYml0cyhwY2llLT5yZWdfc3lzY29uLCBwY2llLT5zdGdfYXdmdW4sCj4+ID4+ ICsJCQkgICBTVEdfU1lTQ09OX0NLUkVGX1NSQ19NQVNLLAo+PiA+PiArCQkJICAgRklFTERfUFJF UChTVEdfU1lTQ09OX0NLUkVGX1NSQ19NQVNLLCAyKSk7Cj4+ID4+ICsKPj4gPj4gKwlyZWdtYXBf dXBkYXRlX2JpdHMocGNpZS0+cmVnX3N5c2NvbiwgcGNpZS0+c3RnX2F3ZnVuLAo+PiA+PiArCQkJ ICAgU1RHX1NZU0NPTl9DTEtSRVEsIFNUR19TWVNDT05fQ0xLUkVRKTsKPj4gPj4gKwo+PiA+PiAr CXJldCA9IHN0YXJmaXZlX3BjaWVfY2xrX3JzdF9pbml0KHBjaWUpOwo+PiA+PiArCWlmIChyZXQp Cj4+ID4+ICsJCXJldHVybiByZXQ7Cj4+ID4+ICsKPj4gPj4gKwlpZiAocGNpZS0+cG93ZXJfZ3Bp bykKPj4gPj4gKwkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHBjaWUtPnBvd2VyX2dwaW8sIDEp Owo+PiA+PiArCj4+ID4+ICsJaWYgKHBjaWUtPnJlc2V0X2dwaW8pCj4+ID4+ICsJCWdwaW9kX3Nl dF92YWx1ZV9jYW5zbGVlcChwY2llLT5yZXNldF9ncGlvLCAxKTsKPj4gPj4gKwo+PiA+PiArCS8q IERpc2FibGUgcGh5c2ljYWwgZnVuY3Rpb25zIGV4Y2VwdCAjMCAqLwo+PiA+PiArCWZvciAoaSA9 IDE7IGkgPCBQQ0lFX0ZVTkNfTlVNOyBpKyspIHsKPj4gPj4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRz KHBjaWUtPnJlZ19zeXNjb24sCj4+ID4+ICsJCQkJICAgcGNpZS0+c3RnX2FyZnVuLAo+PiA+PiAr CQkJCSAgIFNUR19TWVNDT05fQVhJNF9TTFZMX0FSRlVOQ19NQVNLLAo+PiA+PiArCQkJCSAgIFNU R19TWVNDT05fQVhJNF9TTFZMX1BIWV9BUkZVTkMoaSkpOwo+PiA+PiArCj4+ID4+ICsJCXJlZ21h cF91cGRhdGVfYml0cyhwY2llLT5yZWdfc3lzY29uLAo+PiA+PiArCQkJCSAgIHBjaWUtPnN0Z19h d2Z1biwKPj4gPj4gKwkJCQkgICBTVEdfU1lTQ09OX0FYSTRfU0xWTF9BV0ZVTkNfTUFTSywKPj4g Pj4gKwkJCQkgICBTVEdfU1lTQ09OX0FYSTRfU0xWTF9QSFlfQVdGVU5DKGkpKTsKPj4gPj4gKwo+ PiA+PiArCQlwbGRhX3BjaWVfZGlzYWJsZV9mdW5jKHBsZGEpOwo+PiA+PiArCX0KPj4gPj4gKwo+ PiA+PiArCXJlZ21hcF91cGRhdGVfYml0cyhwY2llLT5yZWdfc3lzY29uLCBwY2llLT5zdGdfYXJm dW4sCj4+ID4+ICsJCQkgICBTVEdfU1lTQ09OX0FYSTRfU0xWTF9BUkZVTkNfTUFTSywgMCk7Cj4+ ID4+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKHBjaWUtPnJlZ19zeXNjb24sIHBjaWUtPnN0Z19hd2Z1 biwKPj4gPj4gKwkJCSAgIFNUR19TWVNDT05fQVhJNF9TTFZMX0FXRlVOQ19NQVNLLCAwKTsKPj4g Pj4gKwo+PiA+PiArCXBsZGFfcGNpZV9lbmFibGVfcm9vdF9wb3J0KHBsZGEpOwo+PiA+PiArCXBs ZGFfcGNpZV93cml0ZV9yY19iYXIocGxkYSwgMCk7Cj4+ID4+ICsKPj4gPj4gKwkvKiBQQ0llIFBD SSBTdGFuZGFyZCBDb25maWd1cmF0aW9uIElkZW50aWZpY2F0aW9uIFNldHRpbmdzLiAqLwo+PiA+ PiArCXBsZGFfcGNpZV9zZXRfc3RhbmRhcmRfY2xhc3MocGxkYSk7Cj4+ID4+ICsKPj4gPj4gKwkv Kgo+PiA+PiArCSAqIFRoZSBMVFIgbWVzc2FnZSBmb3J3YXJkaW5nIG9mIFBDSWUgTWVzc2FnZSBS ZWNlcHRpb24gd2FzIHNldCBieSBjb3JlCj4+ID4+ICsJICogYXMgZGVmYXVsdCwgYnV0IHRoZSBm b3J3YXJkIGlkICYgYWRkciBhcmUgYWxzbyBuZWVkIHRvIGJlIHJlc2V0Lgo+PiA+PiArCSAqIElm IHdlIGRvIG5vdCBkaXNhYmxlIExUUiBtZXNzYWdlIGZvcndhcmRpbmcgaGVyZSwgb3Igc2V0IGEg bGVnYWwKPj4gPj4gKwkgKiBmb3J3YXJkaW5nIGFkZHJlc3MsIHRoZSBrZXJuZWwgd2lsbCBnZXQg c3R1Y2sgYWZ0ZXIgdGhpcyBkcml2ZXIgcHJvYmUuCj4+ID4+ICsJICogVG8gd29ya2Fyb3VuZCwg ZGlzYWJsZSB0aGUgTFRSIG1lc3NhZ2UgZm9yd2FyZGluZyBzdXBwb3J0IG9uCj4+ID4+ICsJICog UENJZSBNZXNzYWdlIFJlY2VwdGlvbi4KPj4gPj4gKwkgKi8KPj4gPj4gKwlwbGRhX3BjaWVfZGlz YWJsZV9sdHIocGxkYSk7Cj4+ID4+ICsKPj4gPj4gKwkvKiBQcmVmZXRjaGFibGUgbWVtb3J5IHdp bmRvdyA2NC1iaXQgYWRkcmVzc2luZyBzdXBwb3J0ICovCj4+ID4+ICsJcGxkYV9wY2llX3NldF9w cmVmX3dpbl82NGJpdChwbGRhKTsKPj4gPj4gKwo+PiA+PiArCS8qIEVuc3VyZSB0aGF0IFBFUlNU IGhhcyBiZWVuIGFzc2VydGVkIGZvciBhdCBsZWFzdCAxMDAgbXMsCj4+ID4+ICsJICogdGhlIHNs ZWVwIHZhbHVlIGlzIFRfUFZQRVJMIGZyb20gUENJZSBDRU0gc3BlYyByMi4wIChUYWJsZSAyLTQp Cj4+ID4+ICsJICovCj4+ID4+ICsJbXNsZWVwKDEwMCk7Cj4+ID4+ICsJaWYgKHBjaWUtPnJlc2V0 X2dwaW8pCj4+ID4+ICsJCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChwY2llLT5yZXNldF9ncGlv LCAwKTsKPj4gPj4gKwo+PiA+PiArCS8qIEFzIHRoZSByZXF1aXJlbWVudCBpbiBQQ0llIGJhc2Ug c3BlYyByNi4wLCBzeXN0ZW0gKDw9NUdUL3MpIG11c3QKPj4gPj4gKwkgKiB3YWl0IGEgbWluaW11 bSBvZiAxMDAgbXMgZm9sbG93aW5nIGV4aXQgZnJvbSBhIGNvbnZlbnRpb25hbCByZXNldAo+PiA+ PiArCSAqIGJlZm9yZSBzZW5kaW5nIGEgY29uZmlndXJhdGlvbiByZXF1ZXN0IHRvIHRoZSBkZXZp Y2UuCj4+ID4+ICsJICovCj4+ID4+ICsJbXNsZWVwKDEwMCk7Cj4+ID4+ICsKPj4gPj4gKwlpZiAo c3RhcmZpdmVfcGNpZV9ob3N0X3dhaXRfZm9yX2xpbmsocGNpZSkpCj4+ID4+ICsJCWRldl9pbmZv KGRldiwgInBvcnQgbGluayBkb3duXG4iKTsKPj4gPj4gKwo+PiA+PiArCXJldHVybiByZXQ7Cj4+ ID4+ICt9Cj4+ID4+ICsKPj4gPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxkYV9wY2llX2hvc3Rf b3BzIHNmX2hvc3Rfb3BzID0gewo+PiA+PiArCS5ob3N0X2luaXQgPSBzdGFyZml2ZV9wY2llX2hv c3RfaW5pdCwKPj4gPj4gKwkuaG9zdF9kZWluaXQgPSBzdGFyZml2ZV9wY2llX2hvc3RfZGVpbml0 LAo+PiA+PiArfTsKPj4gPj4gKwo+PiA+PiArc3RhdGljIGludCBzdGFyZml2ZV9wY2llX3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+ID4+ICt7Cj4+ID4+ICsJc3RydWN0IGRl dmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPj4gPj4gKwlzdHJ1Y3Qgc3RhcmZpdmVfamg3MTEwX3Bj aWUgKnBjaWU7Cj4+ID4+ICsJc3RydWN0IHBsZGFfcGNpZV9ycCAqcGxkYTsKPj4gPj4gKwlpbnQg cmV0Owo+PiA+PiArCj4+ID4+ICsJcGNpZSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcGNp ZSksIEdGUF9LRVJORUwpOwo+PiA+PiArCWlmICghcGNpZSkKPj4gPj4gKwkJcmV0dXJuIC1FTk9N RU07Cj4+ID4+ICsKPj4gPj4gKwlwbGRhID0gJnBjaWUtPnBsZGE7Cj4+ID4+ICsJcGxkYS0+ZGV2 ID0gZGV2Owo+PiA+PiArCj4+ID4+ICsJcmV0ID0gc3RhcmZpdmVfcGNpZV9wYXJzZV9kdChwY2ll LCBkZXYpOwo+PiA+PiArCWlmIChyZXQpCj4+ID4+ICsJCXJldHVybiByZXQ7Cj4+ID4+ICsKPj4g Pj4gKwlwbGRhLT5ob3N0X29wcyA9ICZzZl9ob3N0X29wczsKPj4gPj4gKwlwbGRhLT5udW1fZXZl bnRzID0gTlVNX1BMREFfRVZFTlRTOwo+PiA+PiArCXJldCA9IHBsZGFfcGNpZV9ob3N0X2luaXQo JnBjaWUtPnBsZGEsICZzdGFyZml2ZV9wY2llX29wcyk7Cj4+ID4+ICsJaWYgKHJldCkKPj4gPj4g KwkJcmV0dXJuIHJldDsKPj4gPj4gKwo+PiA+PiArCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5k ZXYpOwo+PiA+PiArCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnBkZXYtPmRldik7Cj4+ID4+ICsJcGxh dGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGNpZSk7Cj4+ID4+ICsKPj4gPj4gKwlyZXR1cm4gMDsK Pj4gPj4gK30KPj4gPj4gKwo+PiA+PiArc3RhdGljIHZvaWQgc3RhcmZpdmVfcGNpZV9yZW1vdmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4gPj4gK3sKPj4gPj4gKwlzdHJ1Y3Qgc3Rh cmZpdmVfamg3MTEwX3BjaWUgKnBjaWUgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPj4g Pj4gKwo+PiA+PiArCXBsZGFfcGNpZV9ob3N0X2RlaW5pdCgmcGNpZS0+cGxkYSk7Cj4+ID4+ICsJ cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Cj4+ID4+ICt9Cj4+ID4+ICsKPj4gPj4g K3N0YXRpYyBpbnQgc3RhcmZpdmVfcGNpZV9zdXNwZW5kX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRl dikKPj4gPj4gK3sKPj4gPj4gKwlzdHJ1Y3Qgc3RhcmZpdmVfamg3MTEwX3BjaWUgKnBjaWUgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsKPj4gPj4gKwo+PiA+PiArCWlmICghcGNpZSkKPj4gPj4gKwkJ cmV0dXJuIDA7Cj4+ID4+ICsKPj4gPj4gKwljbGtfYnVsa19kaXNhYmxlX3VucHJlcGFyZShwY2ll LT5udW1fY2xrcywgcGNpZS0+Y2xrcyk7Cj4+ID4+ICsJc3RhcmZpdmVfcGNpZV9kaXNhYmxlX3Bo eSgmcGNpZS0+cGxkYSk7Cj4+ID4+ICsKPj4gPj4gKwlyZXR1cm4gMDsKPj4gPj4gK30KPj4gPj4g Kwo+PiA+PiArc3RhdGljIGludCBzdGFyZml2ZV9wY2llX3Jlc3VtZV9ub2lycShzdHJ1Y3QgZGV2 aWNlICpkZXYpCj4+ID4+ICt7Cj4+ID4+ICsJc3RydWN0IHN0YXJmaXZlX2poNzExMF9wY2llICpw Y2llID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4+ID4+ICsJaW50IHJldDsKPj4gPj4gKwo+PiA+ PiArCXJldCA9IHN0YXJmaXZlX3BjaWVfZW5hYmxlX3BoeShkZXYsICZwY2llLT5wbGRhKTsKPj4g Pj4gKwlpZiAocmV0KQo+PiA+PiArCQlyZXR1cm4gcmV0Owo+PiA+PiArCj4+ID4+ICsJcmV0ID0g Y2xrX2J1bGtfcHJlcGFyZV9lbmFibGUocGNpZS0+bnVtX2Nsa3MsIHBjaWUtPmNsa3MpOwo+PiA+ PiArCWlmIChyZXQpIHsKPj4gPj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZW5hYmxlIGNs b2Nrc1xuIik7Cj4+ID4+ICsJCXN0YXJmaXZlX3BjaWVfZGlzYWJsZV9waHkoJnBjaWUtPnBsZGEp Owo+PiA+PiArCQlyZXR1cm4gcmV0Owo+PiA+PiArCX0KPj4gPj4gKwo+PiA+PiArCXJldHVybiBy ZXQ7Cj4+ID4+ICt9Cj4+ID4+ICsKPj4gPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29w cyBzdGFyZml2ZV9wY2llX3BtX29wcyA9IHsKPj4gPj4gKwlOT0lSUV9TWVNURU1fU0xFRVBfUE1f T1BTKHN0YXJmaXZlX3BjaWVfc3VzcGVuZF9ub2lycSwKPj4gPj4gKwkJCQkgIHN0YXJmaXZlX3Bj aWVfcmVzdW1lX25vaXJxKQo+PiA+PiArfTsKPj4gPj4gKwo+PiA+PiArc3RhdGljIGNvbnN0IHN0 cnVjdCBvZl9kZXZpY2VfaWQgc3RhcmZpdmVfcGNpZV9vZl9tYXRjaFtdID0gewo+PiA+PiArCXsg LmNvbXBhdGlibGUgPSAic3RhcmZpdmUsamg3MTEwLXBjaWUifSwKPj4gPgo+PiA+IE1pc3Npbmcg c3BhY2UgYmVmb3JlIH0KPj4gPgo+PiA+PiArCXsgLyogc2VudGluZWwgKi8gfQo+PiA+PiArfTsK Pj4gPj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHN0YXJmaXZlX3BjaWVfb2ZfbWF0Y2gpOwo+ PiA+PiArCj4+ID4+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzdGFyZml2ZV9wY2ll X2RyaXZlciA9IHsKPj4gPj4gKwkuZHJpdmVyID0gewo+PiA+PiArCQkubmFtZSA9ICJwY2llLXN0 YXJmaXZlIiwKPj4gPj4gKwkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKHN0YXJmaXZl X3BjaWVfb2ZfbWF0Y2gpLAo+PiA+PiArI2lmZGVmIENPTkZJR19QTV9TTEVFUAo+PiA+PiArCQku cG0gPSAmc3RhcmZpdmVfcGNpZV9wbV9vcHMsCj4+ID4+ICsjZW5kaWYKPj4gPgo+PiA+IFRoaXMg Y2FuIGJlIGp1c3QgLnBtID0gcG1fc2xlZXBfcHRyKCZzdGFyZml2ZV9wY2llX3BtX29wcyksCj4+ ID4KPj4gT0sKPj4gPj4gKwl9LAo+PiA+PiArCS5wcm9iZSA9IHN0YXJmaXZlX3BjaWVfcHJvYmUs Cj4+ID4+ICsJLnJlbW92ZV9uZXcgPSBzdGFyZml2ZV9wY2llX3JlbW92ZSwKPj4gPj4gK307Cj4+ ID4+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHN0YXJmaXZlX3BjaWVfZHJpdmVyKTsKPj4gPj4g Kwo+PiA+PiArTU9EVUxFX0RFU0NSSVBUSU9OKCJTdGFyRml2ZSBKSDcxMTAgUENJZSBob3N0IGRy aXZlciIpOwo+PiA+PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+PiA+PiAtLQo+PiA+PiAy LjE3LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxp bnV4LXJpc2N2IG1haWxpbmcgbGlzdApsaW51eC1yaXNjdkBsaXN0cy5pbmZyYWRlYWQub3JnCmh0 dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcmlzY3YK