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 X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E6932C43603 for ; Mon, 9 Dec 2019 13:57:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6DA552068E for ; Mon, 9 Dec 2019 13:57:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727268AbfLIN5P (ORCPT ); Mon, 9 Dec 2019 08:57:15 -0500 Received: from mail1.bemta25.messagelabs.com ([195.245.230.66]:34889 "EHLO mail1.bemta25.messagelabs.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726687AbfLIN5O (ORCPT ); Mon, 9 Dec 2019 08:57:14 -0500 Received: from [46.226.52.196] (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256 bits)) by server-2.bemta.az-b.eu-west-1.aws.symcld.net id 50/26-09012-AA25EED5; Mon, 09 Dec 2019 13:56:58 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrIKsWRWlGSWpSXmKPExsVyU+ECq+7KoHe xBgdeyVncv/eTyYHR4/MmuQDGKNbMvKT8igTWjHXvehgLHj/iqLh4ZDdLA+OMKxxdjFwcQgJ7 GSV6+v6xQzhnGCVuT9zO3MXIycEmoCUxY+tURhBbRMBWYtHTM6wgRcwCSxglfmxqYwVJCAu4S Zx7vxCqyFtiw45frBC2nsS9501MIDaLgIrErM0HwYbyCuhKdP/cCFbDKCAr8WjlL3YQm1lAXO LWk/lg9RICAhJL9pxnhrBFJV4+/scKYRtIbF26jwXCVpS4Nv8E0F4OINta4sYDfhCTWUBTYv0 ufYiJihJTuh+yQ2wVlDg58wnLBEaRWUiWzULomIWkYxaSjgWMLKsYLZKKMtMzSnITM3N0DQ0M dA0NjXQNLc11jQwN9BKrdJP0Ukt1y1OLS3QN9RLLi/WKK3OTc1L08lJLNjEC4yal4OilHYyfP 77VO8QoycGkJMo76dSrWCG+pPyUyozE4oz4otKc1OJDjDIcHEoSvCn+72KFBItS01Mr0jJzgD EMk5bg4FES4S0PBErzFhck5hZnpkOkTjHac0x4OXcRM8ftDUuA5M33IPLI3KWLmIVY8vLzUqX EeSeAtAmAtGWU5sENhaWcS4yyUsK8jAwMDEI8BalFuZklqPKvGMU5GJWEeS+CTOHJzCuB2/0K 6CwmoLMi8l+BnFWSiJCSamDqE5m/UTh5nsrij6pdcy11yuc5anudT5Sx6vBfwKxX0brk6ldP+ 2CvAxErZ2xYYp/KtHypbmr/qu5MRx3ZXQ+umXHaG5x+cCBesHy2wUXR3OjfZ06//3sjssiply n9relHx1V79Fn3n/0ay/xvv7Thhr+LL+tEm507csNHWC+nry2EPY/vwPUlV47s3vTz/7P91xg EbMvNXJ3LtO1DxFp/qttzb3h7T2ZhodKhQFmFq7yPGid8PjRxs8KJsAtJb08lfee1Pn15mdqL dGnXP4y5hhYX/IqkSlJTDwhEWuo/WX/lmny2jvDfGdM4+3f+Xy9cKr1j719O4yk3aopUjkape ZyvYbbOPfvTe88qsxIlluKMREMt5qLiRAB+/HM9tAMAAA== X-Env-Sender: david.kim@ncipher.com X-Msg-Ref: server-30.tower-284.messagelabs.com!1575899816!48080!2 X-Originating-IP: [217.32.208.5] X-SYMC-ESS-Client-Auth: outbound-route-from=pass X-StarScan-Received: X-StarScan-Version: 9.44.22; banners=-,-,- X-VirusChecked: Checked Received: (qmail 27229 invoked from network); 9 Dec 2019 13:56:57 -0000 Received: from unknown (HELO exukdagfar01.INTERNAL.ROOT.TES) (217.32.208.5) by server-30.tower-284.messagelabs.com with ECDHE-RSA-AES256-SHA384 encrypted SMTP; 9 Dec 2019 13:56:57 -0000 Received: from exukdagfar01.INTERNAL.ROOT.TES (10.194.2.70) by exukdagfar01.INTERNAL.ROOT.TES (10.194.2.70) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 9 Dec 2019 13:56:55 +0000 Received: from exukdagfar01.INTERNAL.ROOT.TES ([fe80::48de:aa33:fc4c:d1f5]) by exukdagfar01.INTERNAL.ROOT.TES ([fe80::48de:aa33:fc4c:d1f5%14]) with mapi id 15.00.1497.000; Mon, 9 Dec 2019 13:56:55 +0000 From: "Kim, David" To: "devel@driverdev.osuosl.org" CC: "gregkh@linuxfoundation.org" , "linux-crypto@vger.kernel.org" , "Magee, Tim" Subject: [PATCH] drivers: staging: Add support for nCipher HSM devices Thread-Topic: [PATCH] drivers: staging: Add support for nCipher HSM devices Thread-Index: AQHVrpiE4uqHhgJk30y3nRGskfuqAw== Date: Mon, 9 Dec 2019 13:56:55 +0000 Message-ID: <1575899815003.20486@ncipher.com> Accept-Language: en-US, en-GB Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [172.23.136.54] x-exclaimer-md-config: 7ae4f661-56ee-4cc7-9363-621ce9eeb65f Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org DQpIaSBldmVyeWJvZHksDQrigIsNClRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGRyaXZlciBmb3Ig bkNpcGhlcidzIFNvbG8gYW5kIFNvbG8gWEMgcmFuZ2Ugb2YgUENJZQ0KaGFyZHdhcmUgc2VjdXJp dHkgbW9kdWxlcyAoSFNNKSwgd2hpY2ggcHJvdmlkZSBrZXkgY3JlYXRpb24vbWFuYWdlbWVudA0K YW5kIGNyeXB0b2dyYXBoeSBzZXJ2aWNlcy4NCg0KVXBzdHJlYW1pbmcgdGhlIG5DaXBoZXIgZHJp dmVyIGludG8gdGhlIGtlcm5lbCB3aWxsIGFsbG93IGVhcmx5IGFkb3B0ZXJzDQpvZiB0aGUgbGF0 ZXN0IGtlcm5lbCB0byB1cGdyYWRlIGFuZCBtYWludGFpbiB0aGVpciB3b3JraW5nIHN5c3RlbXMg d2hlbg0KdXNpbmcgYW4gbkNpcGhlciBQQ0llIEhTTS4gRnVydGhlciwgaGF2aW5nIHRoaXMgZHJp dmVyIGluIHRoZSBrZXJuZWwgd2lsbCBiZQ0KbW9yZSBjb252ZW5pZW50IHRvIG91ciB1c2VycyBh bmQgbWFrZSBhIExpbnV4IGJhc2VkIHNvbHV0aW9uIGEgbW9yZQ0KYXR0cmFjdGl2ZSBvcHRpb24g Zm9yIG90aGVycy7igIsNCg0KUmVnYXJkcywNCkRhdmUgS2ltDQoNCkNvLWRldmVsb3BlZC1ieTog VGltIE1hZ2VlIDx0aW0ubWFnZWVAbmNpcGhlci5jb20+DQpTaWduZWQtb2ZmLWJ5OiBUaW0gTWFn ZWUgPHRpbS5tYWdlZUBuY2lwaGVyLmNvbT4NClNpZ25lZC1vZmYtYnk6IERhdmlkIEtpbSA8ZGF2 aWQua2ltQG5jaXBoZXIuY29tPuKAiw0KDQoNCiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAg ICAgICAgfCAgICA4ICsNCiBkcml2ZXJzL3N0YWdpbmcvS2NvbmZpZyAgICAgICAgICAgfCAgICAx ICsNCiBkcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUgICAgICAgICAgfCAgICAxICsNCiBkcml2ZXJz L3N0YWdpbmcvbmNpcGhlci9LY29uZmlnICAgfCAgICA4ICsNCiBkcml2ZXJzL3N0YWdpbmcvbmNp cGhlci9NYWtlZmlsZSAgfCAgICA3ICsNCiBkcml2ZXJzL3N0YWdpbmcvbmNpcGhlci9mc2wuYyAg ICAgfCAgOTExICsrKysrKysrKysrKysrKysrKysrKysNCiBkcml2ZXJzL3N0YWdpbmcvbmNpcGhl ci9mc2wuaCAgICAgfCAgMTE3ICsrKw0KIGRyaXZlcnMvc3RhZ2luZy9uY2lwaGVyL2hvc3RpZi5j ICB8IDE1MjEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KIGRyaXZlcnMv c3RhZ2luZy9uY2lwaGVyL2kyMTU1NS5jICB8ICA1NTMgKysrKysrKysrKysrKysNCiBkcml2ZXJz L3N0YWdpbmcvbmNpcGhlci9pMjE1NTUuaCAgfCAgIDY4ICsrDQogZHJpdmVycy9zdGFnaW5nL25j aXBoZXIvc29sby5oICAgIHwgIDMxNiArKysrKysrKw0KIGluY2x1ZGUvdWFwaS9saW51eC9uc2hp ZWxkX3NvbG8uaCB8ICAxODEgKysrKysNCiAxMiBmaWxlcyBjaGFuZ2VkLCAzNjkyIGluc2VydGlv bnMoKykNCg0KDQoNCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTDQppbmRl eCAwNjFkNTlhNGE4MGIuLmMxMTI1Yzk5OWI5NSAxMDA2NDQNCi0tLSBhL01BSU5UQUlORVJTDQor KysgYi9NQUlOVEFJTkVSUw0KQEAgLTEyNjA1LDYgKzEyNjA1LDE0IEBAIEw6IGxpbnV4LXBjaUB2 Z2VyLmtlcm5lbC5vcmcNCiBTOiBTdXBwb3J0ZWQNCiBGOiBkcml2ZXJzL3BjaS9jb250cm9sbGVy L3ZtZC5jDQoNCitQQ0kgRFJJVkVSIEZPUiBOU0hJRUxEIFNPTE8gQU5EIFNPTE8gWEMgSEFSRFdB UkUgU0VDVVJJVFkgTU9EVUxFUyAoSFNNKQ0KK006IFRpbSBNYWdlZSA8dGltLm1hZ2VlQG5jaXBo ZXIuY29tPg0KK006IERhdmlkIEtpbSA8ZGF2aWQua2ltQG5jaXBoZXIuY29tPg0KK006IEhhbWlz aCBDYW1lcm9uIDxoYW1pc2guY2FtZXJvbkBuY2lwaGVyLmNvbT4NCitMOiBsaW51eC1jcnlwdG9A dmdlci5rZXJuZWwub3JnDQorUzogU3VwcG9ydGVkDQorRjogZHJpdmVycy9zdGFnaW5nL25jaXBo ZXIvDQorDQogUENJIERSSVZFUiBGT1IgTUlDUk9TRU1JIFNXSVRDSFRFQw0KIE06IEt1cnQgU2No d2VtbWVyIDxrdXJ0LnNjaHdlbW1lckBtaWNyb3NlbWkuY29tPg0KIE06IExvZ2FuIEd1bnRob3Jw ZSA8bG9nYW5nQGRlbHRhdGVlLmNvbT4NCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvS2Nv bmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnDQppbmRleCBlYWY3NTNiNzBlYzUuLjBiNTQ5 OGQyNDE1YyAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnDQorKysgYi9kcml2 ZXJzL3N0YWdpbmcvS2NvbmZpZw0KQEAgLTEyNCw2ICsxMjQsNyBAQCBzb3VyY2UgImRyaXZlcnMv c3RhZ2luZy91d2IvS2NvbmZpZyINCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9leGZhdC9LY29u ZmlnIg0KDQogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcWxnZS9LY29uZmlnIg0KK3NvdXJjZSAi ZHJpdmVycy9zdGFnaW5nL25jaXBoZXIvS2NvbmZpZyINCg0KIHNvdXJjZSAiZHJpdmVycy9zdGFn aW5nL2hwL0tjb25maWciDQoNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUg Yi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUNCmluZGV4IDBhNDM5NmM5MDY3Yi4uYmU5ZjJlODEx NTI4IDEwMDY0NA0KLS0tIGEvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlDQorKysgYi9kcml2ZXJz L3N0YWdpbmcvTWFrZWZpbGUNCkBAIC01NSwzICs1NSw0IEBAIG9iai0kKENPTkZJR19FWEZBVF9G UykgKz0gZXhmYXQvDQogb2JqLSQoQ09ORklHX1FMR0UpICs9IHFsZ2UvDQogb2JqLSQoQ09ORklH X05FVF9WRU5ET1JfSFApICs9IGhwLw0KIG9iai0kKENPTkZJR19XRlgpICs9IHdmeC8NCitvYmot JChDT05GSUdfTkNJUEhFUikgKz0gbmNpcGhlci8NCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdp bmcvbmNpcGhlci9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL25jaXBoZXIvS2NvbmZpZw0KbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uNWI0NjZjZDE4OTZhDQotLS0g L2Rldi9udWxsDQorKysgYi9kcml2ZXJzL3N0YWdpbmcvbmNpcGhlci9LY29uZmlnDQpAQCAtMCww ICsxLDggQEANCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQorIyBFbmFibGUg c3VwcG9ydCBmb3IgbkNpcGhlcidzIG5TaGllbGQgU29sbyBhbmQgU29sbyBYQw0KK2NvbmZpZyBI U01fTkNJUEhFUl9OU0hJRUxEX1NPTE8NCisgdHJpc3RhdGUgIm5DaXBoZXIgU29sbyBhbmQgU29s byBYQyBmYW1pbHkgb2YgUENJZSBIU01zIg0KKyBkZXBlbmRzIG9uIFBDSQ0KKyBoZWxwDQorICAg U2VsZWN0IHRoaXMgYXMgYnVpbHQtaW4gb3IgbW9kdWxlIGlmIHlvdSBleHBlY3QgdG8gdXNlDQor ICAgYSBIYXJkd2FyZSBTZWN1cml0eSBNb2R1bGUgZnJvbSBuQ2lwaGVyJ3MgU29sbyBvciBTb2xv IFhDIHJhbmdlLg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9uY2lwaGVyL01ha2VmaWxl IGIvZHJpdmVycy9zdGFnaW5nL25jaXBoZXIvTWFrZWZpbGUNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQppbmRleCAwMDAwMDAwMDAwMDAuLmI0ZDVmOTJhZGRlZQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIv ZHJpdmVycy9zdGFnaW5nL25jaXBoZXIvTWFrZWZpbGUNCkBAIC0wLDAgKzEsNyBAQA0KKyMgU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCisjDQorIyBNYWtlZmlsZSBmb3IgbkNpcGhl ciBuU2hpZWxkIEhTTSBkcml2ZXJzDQorIw0KKw0KK29iai0kKENPTkZJR19IU01fTkNJUEhFUl9O U0hJRUxEX1NPTE8pIDo9IG5zaGllbGRfc29sby5vDQorbnNoaWVsZF9zb2xvLXkgOj0gaG9zdGlm Lm8gZnNsLm8gaTIxNTU1Lm8NCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbmNpcGhlci9m c2wuYyBiL2RyaXZlcnMvc3RhZ2luZy9uY2lwaGVyL2ZzbC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KaW5kZXggMDAwMDAwMDAwMDAwLi41YzRlZGVlZjY0YzANCi0tLSAvZGV2L251bGwNCisrKyBi L2RyaXZlcnMvc3RhZ2luZy9uY2lwaGVyL2ZzbC5jDQpAQCAtMCwwICsxLDkxMSBAQA0KKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKw0KKy8qDQorICoNCisgKiBmc2wuYzogbkNp cGhlciBQQ0kgSFNNIEZTTCBjb21tYW5kIGRyaXZlcg0KKyAqIENvcHlyaWdodCAyMDE5IG5DaXBo ZXIgU2VjdXJpdHkgTHRkDQorICoNCisgKi8NCisNCisjaW5jbHVkZSAic29sby5oIg0KKyNpbmNs dWRlICJmc2wuaCINCisNCisvKioNCisgKiBSZXNldHMgRlNMIGRldmljZS4NCisgKg0KKyAqIEV4 dHJhIGRldmljZSBpbmZvIGlzIGluaXRpYWxpemVkIHRoZSBmaXJzdCB0aW1lIGNyZWF0ZWQuDQor ICoNCisgKiBAcGFyYW0gbmRldiBjb21tb24gZGV2aWNlLg0KKyAqIEByZXR1cm5zIDAgaWYgc3Vj Y2Vzc2Z1bCwgb3RoZXIgdmFsdWUgaWYgZXJyb3IuDQorICovDQorc3RhdGljIGludCBmc2xfY3Jl YXRlKHN0cnVjdCBuZnBfZGV2ICpuZGV2KQ0KK3sNCisgLyogY2hlY2sgZm9yIGRldmljZSAqLw0K KyBpZiAoIW5kZXYpIHsNCisgcHJfZXJyKCIlczogZXJyb3I6IG5vIGRldmljZSIsIF9fZnVuY19f KTsNCisgcmV0dXJuIC1FTk9ERVY7DQorIH0NCisNCisgZGV2X2RiZygmbmRldi0+cGNpZGV2LT5k ZXYsICIlczogZW50ZXJlZCIsIF9fZnVuY19fKTsNCisNCisgaWYgKG5kZXYtPmNyZWF0ZWQpIHsN CisgZGV2X25vdGljZSgmbmRldi0+cGNpZGV2LT5kZXYsDQorICAgICIlczogZGV2aWNlIGFscmVh ZHkgY3JlYXRlZCIsIF9fZnVuY19fKTsNCisgcmV0dXJuIDA7DQorIH0NCisNCisgbmRldi0+YWN0 aXZlX2JhciA9IC0xOw0KKyBuZGV2LT5kZXRlY3Rpb25fdHlwZSA9IE5GUF9IU01fUE9MTElORzsN CisgbmRldi0+Y29ubl9zdGF0dXMgPSBORlBfSFNNX1NUQVJUSU5HOw0KKw0KKyAvKiB0cnkgdG8g cmVzZXQgY2hlY2sgZG9vcmJlbGwgcmVnaXN0ZXJzDQorICogKGRvbid0IHJlYWQgYmFjayBpbiBj YXNlIHRoZXkgaGFuZykNCisgKi8NCisgbmRldi0+YWN0aXZlX2JhciA9IEZTTF9NRU1CQVI7DQor IGZzbF9vdXRsKG5kZXYsIEZTTF9PRkZTRVRfRE9PUkJFTExfQ1NfU1RBVFVTLCBORkFTVF9JTlRf REVWSUNFX0NMUik7DQorDQorIGlmICghbmRldi0+YmFyW25kZXYtPmFjdGl2ZV9iYXJdKSB7DQor IGRldl9lcnIoJm5kZXYtPnBjaWRldi0+ZGV2LA0KKyAiJXM6IGVycm9yOiBudWxsIEZTTCBtZW1v cnkgQkFSWyVkXSIsDQorIF9fZnVuY19fLCBuZGV2LT5hY3RpdmVfYmFyKTsNCisgcmV0dXJuIC1F Tk9NRU07DQorIH0NCisNCisgLyogc2V0IG91ciBjb250ZXh0IHRvIGp1c3QgYmUgYSBwb2ludGVy IHRvIG91cnNlbGYgKi8NCisgbmRldi0+Y21kY3R4ID0gbmRldjsNCisNCisgLyogdHJ5IHRvIHJl c2V0IHJlYWQvd3JpdGUgZG9vcmJlbGwgcmVnaXN0ZXJzDQorICogKGRvbid0IHJlYWQgYmFjayBp biBjYXNlIHRoZXkgaGFuZykNCisgKi8NCisgZGV2X25vdGljZSgmbmRldi0+cGNpZGV2LT5kZXYs DQorICAgICIlczogY2xlYXJpbmcgcmVhZC93cml0ZSBkb29yYmVsbCByZWdpc3RlcnMiLCBfX2Z1 bmNfXyk7DQorIGZzbF9vdXRsKG5kZXYsIEZTTF9PRkZTRVRfRE9PUkJFTExfV1JfQ01ELCBORkFT VF9JTlRfSE9TVF9DTFIpOw0KKyBmc2xfb3V0bChuZGV2LCBGU0xfT0ZGU0VUX0RPT1JCRUxMX1JE X0NNRCwgTkZBU1RfSU5UX0hPU1RfQ0xSKTsNCisNCisgZGV2X25vdGljZSgmbmRldi0+cGNpZGV2 LT5kZXYsICIlczogZXhpdGluZyAlcyBhY3RpdmVfYmFyOiAlZC4iLA0KKyAgICBfX2Z1bmNfXywg X19mdW5jX18sIG5kZXYtPmFjdGl2ZV9iYXIpOw0KKw0KKyBuZGV2LT5jcmVhdGVkID0gMTsNCisN CisgcmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIERlc3Ryb3lzIGFuIEZTTCBkZXZpY2UuDQor ICoNCisgKiBAcGFyYW0gY3R4IGRldmljZSBjb250ZXh0IChhbHdheXMgdGhlIGRldmljZSBpdHNl bGYpLg0KKyAqIEByZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgb3RoZXIgdmFsdWUgaWYgZXJyb3Iu DQorICovDQorc3RhdGljIGludCBmc2xfZGVzdHJveShzdHJ1Y3QgbmZwX2RldiAqY3R4KQ0KK3sN Cisgc3RydWN0IG5mcF9kZXYgKm5kZXY7DQorDQorIC8qIGNoZWNrIGZvciBkZXZpY2UgKi8NCisg bmRldiA9IGN0eDsNCisgaWYgKCFuZGV2KSB7DQorIHByX2VycigiJXM6IGVycm9yOiBubyBkZXZp Y2UiLCBfX2Z1bmNfXyk7DQorIHJldHVybiAtRU5PREVWOw0KKyB9DQorDQorIGRldl9kYmcoJm5k ZXYtPnBjaWRldi0+ZGV2LCAiJXM6IGVudGVyZWQiLCBfX2Z1bmNfXyk7DQorDQorIC8qIGNsZWFy IGRvb3JiZWxsIHJlZ2lzdGVycyAqLw0KKyBpZiAobmRldi0+YmFyW25kZXYtPmFjdGl2ZV9iYXJd KSB7DQorIGRldl9ub3RpY2UoJm5kZXYtPnBjaWRldi0+ZGV2LA0KKyAgICAiJXM6IGNsZWFyaW5n IGRvb3JiZWxsIHJlZ2lzdGVycyIsIF9fZnVuY19fKTsNCisgZnNsX291dGwobmRldiwNCisgRlNM X09GRlNFVF9ET09SQkVMTF9XUl9TVEFUVVMsIE5GQVNUX0lOVF9ERVZJQ0VfQ0xSKTsNCisgZnNs X291dGwobmRldiwNCisgRlNMX09GRlNFVF9ET09SQkVMTF9SRF9TVEFUVVMsIE5GQVNUX0lOVF9E RVZJQ0VfQ0xSKTsNCisgZnNsX291dGwobmRldiwNCisgRlNMX09GRlNFVF9ET09SQkVMTF9DU19T VEFUVVMsIE5GQVNUX0lOVF9ERVZJQ0VfQ0xSKTsNCisgfSBlbHNlIHsNCisgZGV2X2VycigmbmRl di0+cGNpZGV2LT5kZXYsDQorICIlczogd2FybmluZzogbm8gRlNMIEJBUlslZF0gbWVtb3J5IiwN CisgX19mdW5jX18sIG5kZXYtPmFjdGl2ZV9iYXIpOw0KKyB9DQorDQorIHJldHVybiAwOw0KK30N CisNCisvKioNCisgKiBSZXR1cm5zIGZzbF9jcmVhdGVkIHN0YXR1cy4NCisgKg0KKyAqIEBwYXJh bSBuZGV2IGNvbW1vbiBkZXZpY2UuDQorICogQHJldHVybnMgMCBpZiBjcmVhdGVkIG9yIG90aGVy IHZhbHVlIGlmIGVycm9yLg0KKyAqLw0KK3N0YXRpYyBpbnQgZnNsX2NyZWF0ZWQoc3RydWN0IG5m cF9kZXYgKm5kZXYpDQorew0KKyAvKiBjaGVjayBmb3IgZGV2aWNlICovDQorIGlmICghbmRldikg ew0KKyBwcl9lcnIoIiVzOiBlcnJvcjogbm8gZGV2aWNlIiwgX19mdW5jX18pOw0KKyByZXR1cm4g LUVOT0RFVjsNCisgfQ0KKw0KKyBkZXZfZGJnKCZuZGV2LT5wY2lkZXYtPmRldiwgIiVzOiBlbnRl cmVkIiwgX19mdW5jX18pOw0KKw0KKyBpZiAoIW5kZXYtPmNyZWF0ZWQpIHsNCisgZGV2X2Vycigm bmRldi0+cGNpZGV2LT5kZXYsDQorICIlczogZXJyb3I6IGRldmljZSBub3QgY3JlYXRlZCIsIF9f ZnVuY19fKTsNCisgcmV0dXJuIC1FTk9ERVY7DQorIH0NCisNCisgaWYgKCFuZGV2LT5iYXJbbmRl di0+YWN0aXZlX2Jhcl0pIHsNCisgZGV2X2VycigmbmRldi0+cGNpZGV2LT5kZXYsDQorICIlczog ZXJyb3I6IG5vIEZTTCBCQVJbJWRdIG1lbW9yeSIsIF9fZnVuY19fLA0KKyBuZGV2LT5hY3RpdmVf YmFyKTsNCisgcmV0dXJuIC1FTk9NRU07DQorIH0NCisNCisgcmV0dXJuIDA7DQorfQ0KKw0KKy8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICov DQorLyogVGhpcyBjYWxsIG5lZWRzIHRvIGJlIGluIHN5bmNoIHdpdGggdGhlIElTUiBvciB0aGUg SVNSIHdpbGwgY29tZSBpbiB0aGUNCisgKiAgbWlkZGxlIG9mIGEgd3JpdGUvcmVhZCBvcCBhbmQg Y2F1c2UgcHJvYmxlbXMuDQorICovDQorc3RhdGljIGludCBmc2xfY29ubmVjdGlvbl9zdGF0dXMo c3RydWN0IG5mcF9kZXYgKm5kZXYsIGludCBsb2NrX2ZsYWcsDQorIGludCBlcGRfc3RhdHVzKQ0K K3sNCisgaW50IHN0YXR1cyA9IE5GUF9IU01fU1RBUlRJTkc7DQorDQorIC8qIGNoZWNrIGZvciBk ZXZpY2UgKi8NCisgaWYgKCFuZGV2KQ0KKyByZXR1cm4gLUVOT0RFVjsNCisNCisgLyogdGhpcyBj b2RlIGlzIG1haW5seSB0byBzdXBwb3J0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggdGhl DQorICogaW50ZXJydXB0IGRyaXZlbiBhcHByb2FjaCB0byBkZXRlY3Rpb24uDQorICovDQorIGlm IChlcGRfc3RhdHVzID09IE5GUF9IU01fUE9MTElORykgew0KKyBuZGV2LT5kZXRlY3Rpb25fdHlw ZSA9IE5GUF9IU01fUE9MTElORzsNCisgbmRldi0+Y29ubl9zdGF0dXMgPSAwOw0KKyB9IGVsc2Ug aWYgKGVwZF9zdGF0dXMgPT0gTkZBU1RfSU5UX0RFVklDRV9QQ0lfRE9XTikgew0KKyBuZGV2LT5j b25uX3N0YXR1cyA9IE5GUF9IU01fU1RBUlRJTkc7DQorIH0NCisNCisgc3RhdHVzID0gbmRldi0+ Y29ubl9zdGF0dXM7DQorIHJldHVybiBzdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAqIFJldHVybnMg Y29ubmVjdGlvbiBjaGVjayBzdGF0dXMuDQorICoNCisgKiBAcGFyYW0gbmRldiBjb21tb24gZGV2 aWNlLg0KKyAqIEByZXR1cm5zIDAgaWYgc3RhcnRlZCwgTkZQX0hTTV9TVEFSVElORyBpZiBub3Qg cmVhZHksDQorICogb3Igb3RoZXIgdmFsdWUgaWYgZXJyb3IuDQorICovDQorc3RhdGljIGludCBm c2xfc3RhcnRlZChzdHJ1Y3QgbmZwX2RldiAqbmRldiwgaW50IGxvY2tfZmxhZykNCit7DQorIGlu dCBzdGF0dXMgPSBORlBfSFNNX1NUQVJUSU5HOw0KKyBpbnQgZXBkX3N0YXR1cyA9IE5GUF9IU01f U1RBUlRJTkc7DQorIHUzMiBkb29yYmVsbF9jcyA9IDB4MDsNCisNCisgLyogY2hlY2sgZm9yIGRl dmljZSAqLw0KKyBpZiAoIW5kZXYpIHsNCisgcHJfZXJyKCIlczogZXJyb3I6IG5vIGRldmljZSIs IF9fZnVuY19fKTsNCisgcmV0dXJuIC1FTk9ERVY7DQorIH0NCisNCisgZGV2X2RiZygmbmRldi0+ cGNpZGV2LT5kZXYsICIlczogZW50ZXJlZCIsIF9fZnVuY19fKTsNCisNCisgaWYgKCFuZGV2LT5i YXJbbmRldi0+YWN0aXZlX2Jhcl0pIHsNCisgZGV2X2VycigmbmRldi0+cGNpZGV2LT5kZXYsICIl czogZXJyb3I6IG5vIEZTTCBCQVJbJWRdIG1lbW9yeSIsDQorIF9fZnVuY19fLCBuZGV2LT5hY3Rp dmVfYmFyKTsNCisgcmV0dXJuIC1FTk9NRU07DQorIH0NCisNCisgLyogY2hlY2sgdGhlIHN0YXR1 cyByZWdpc3RlciB0byBzZWUgaWYgZXBkIGhhcyBzdGFydGVkICovDQorIGRvb3JiZWxsX2NzID0g ZnNsX2lubChuZGV2LCBGU0xfT0ZGU0VUX0RPT1JCRUxMX1BPTExJTkcpOw0KKyBkZXZfbm90aWNl KCZuZGV2LT5wY2lkZXYtPmRldiwNCisgICAgIiVzOiBkb29yYmVsbF9wb2xsaW5nIGlzOiAleCIs IF9fZnVuY19fLCBkb29yYmVsbF9jcyk7DQorDQorIGlmIChkb29yYmVsbF9jcyA9PSBORkFTVF9J TlRfREVWSUNFX1BPTEwpIHsNCisgZXBkX3N0YXR1cyA9IE5GUF9IU01fUE9MTElORzsNCisgZGV2 X25vdGljZSgmbmRldi0+cGNpZGV2LT5kZXYsDQorICAgICIlczogRVBEIGluIHBvbGxpbmcgbW9k ZSIsIF9fZnVuY19fKTsNCisgfSBlbHNlIGlmIChkb29yYmVsbF9jcyA9PSBORkFTVF9JTlRfREVW SUNFX1BDSV9ET1dOKSB7DQorIGVwZF9zdGF0dXMgPSBORkFTVF9JTlRfREVWSUNFX1BDSV9ET1dO Ow0KKyB9DQorIC8qIGNoZWNrIGN1cnJlbnQgY29ubmVjdGlvbiBzdGF0dXMgKi8NCisgc3RhdHVz ID0gZnNsX2Nvbm5lY3Rpb25fc3RhdHVzKG5kZXYsIGxvY2tfZmxhZywgZXBkX3N0YXR1cyk7DQor DQorIGlmIChzdGF0dXMgPT0gMCkgew0KKyBkZXZfbm90aWNlKCZuZGV2LT5wY2lkZXYtPmRldiwg IiVzOiBkZXZpY2Ugc3RhcnRlZCIsIF9fZnVuY19fKTsNCisgfSBlbHNlIGlmIChzdGF0dXMgPT0g TkZQX0hTTV9TVEFSVElORykgew0KKyBkZXZfbm90aWNlKCZuZGV2LT5wY2lkZXYtPmRldiwgIiVz OiBkZXZpY2Ugc3RhcnRpbmciLCBfX2Z1bmNfXyk7DQorIC8qIENsb3Nlc3QgZXhpc3RpbmcgZXJy b3IgY29kZSAqLw0KKyBzdGF0dXMgPSAtRUFHQUlOOw0KKyB9IGVsc2Ugew0KKyBkZXZfZXJyKCZu ZGV2LT5wY2lkZXYtPmRldiwNCisgIiVzOiBlcnJvcjogZGV2aWNlIGZhaWx1cmU6IGNvZGUgMHgl eCIsDQorIF9fZnVuY19fLCBzdGF0dXMpOw0KKyB9DQorDQorIHJldHVybiBzdGF0dXM7DQorfQ0K Kw0KKy8qKg0KKyAqIFVwZGF0ZXMgdGhlIGNvbm5lY3Rpb24gY2hlY2sgc3RhdHVzLg0KKyAqDQor ICogQHBhcmFtIG5kZXYgY29tbW9uIGRldmljZS4NCisgKiBAcGFyYW0gc3RhdHVzIG5ldyBzdGF0 dXMNCisgKiBAcmV0dXJucyAwIGlmIHN0b3BwZWQgb3Igb3RoZXIgdmFsdWUgaWYgZXJyb3IuDQor ICovDQorDQorc3RhdGljIGludCBmc2xfdXBkYXRlX2Nvbm5lY3Rpb25fc3RhdHVzKHN0cnVjdCBu ZnBfZGV2ICpuZGV2LCBpbnQgc3RhdHVzKQ0KK3sNCisgaW50IGN1cnJlbnRfc3RhdHVzOw0KKw0K KyBpZiAoIW5kZXYpDQorIHJldHVybiAtRU5PREVWOw0KKw0KKyBjdXJyZW50X3N0YXR1cyA9IG5k ZXYtPmNvbm5fc3RhdHVzOw0KKyBuZGV2LT5jb25uX3N0YXR1cyA9IHN0YXR1czsNCisgcmV0dXJu IGN1cnJlbnRfc3RhdHVzOw0KK30NCisNCisvKioNCisgKiBDb21wbGV0ZXMgYSBjb25uZWN0aW9u IGNoZWNrIHN0YXR1cyBpbnRlcnJ1cHQuDQorICoNCisgKiBAcGFyYW0gbmRldiBjb21tb24gZGV2 aWNlLg0KKyAqIEBwYXJhbSBzdGF0dXMgZGV2aWNlIHN0YXR1cy4NCisgKi8NCitzdGF0aWMgdm9p ZCBmc2xfY2hlY2tfY29tcGxldGUoc3RydWN0IG5mcF9kZXYgKm5kZXYsIGludCBzdGF0dXMpDQor ew0KKyBpbnQgbmU7DQorIGludCBzdGFydGVkOw0KKw0KKyAvKiBjaGVjayBmb3IgZGV2aWNlICov DQorIGlmICghbmRldikgew0KKyBwcl9lcnIoIiVzOiBlcnJvcjogbm8gZGV2aWNlIiwgX19mdW5j X18pOw0KKyByZXR1cm47DQorIH0NCisNCisgZGV2X2RiZygmbmRldi0+cGNpZGV2LT5kZXYsICIl czogZW50ZXJlZCIsIF9fZnVuY19fKTsNCisNCisgLyogY2hlY2sgZm9yIGRldmljZSAqLw0KKw0K KyBuZSA9IGZzbF9jcmVhdGVkKG5kZXYpOw0KKyBpZiAobmUgIT0gMCkgew0KKyBkZXZfZXJyKCZu ZGV2LT5wY2lkZXYtPmRldiwNCisgIiVzOiBlcnJvcjogY2hlY2sgbm90IGNvbXBsZXRlZCIsIF9f ZnVuY19fKTsNCisgcmV0dXJuOw0KKyB9DQorDQorIC8qIHN0YXJ0ZWQgYmVjb21lcyB0cnVlIGFm dGVyIGZzbF9jcmVhdGUgYW5kIHRoZSBmaXJzdCBjcyBpbnRlcnJ1cHQgaXMNCisgKiBzdWNjZXNz ZnVsLg0KKyAqIEl0IHN3aXRjaGVzIHRvIGZhbHNlIHJpZ2h0IGFmdGVyIHNpbmNlIGNzX3N0YXR1 cyBpcyBzZXQgdG8NCisgKiAwIHJpZ2h0IGFmdGVyIHRoaXMgY2hlY2sNCisgKiBBIGZzbF9jbG9z ZSBvciBhIGZzbF9jcmVhdGUgY2FuDQorICogcmVzZXQgdGhlIGNzX3N0YXR1cyB0byBORlBfSFNN X1NUQVJUSU5HIGFnYWluLg0KKyAqLw0KKyBzdGFydGVkID0NCisgKGZzbF91cGRhdGVfY29ubmVj dGlvbl9zdGF0dXMobmRldiwgc3RhdHVzKSA9PQ0KKyBORlBfSFNNX1NUQVJUSU5HKSAmJiAoc3Rh dHVzID09IDApOw0KKw0KKyAvKiByZXNldCByZWFkL3dyaXRlIGRvb3JiZWxsIHJlZ2lzdGVycyBp ZiBqdXN0IHN0YXJ0ZWQgKi8NCisNCisgaWYgKHN0YXJ0ZWQpIHsNCisgZGV2X25vdGljZSgmbmRl di0+cGNpZGV2LT5kZXYsDQorICAgICJmc2xfY3JlYXRlOiBjbGVhcmluZyByZWFkL3dyaXRlIGRv b3JiZWxsIHJlZ2lzdGVycyIpOw0KKyBmc2xfb3V0bChuZGV2LCBGU0xfT0ZGU0VUX0RPT1JCRUxM X1dSX0NNRCwgTkZBU1RfSU5UX0hPU1RfQ0xSKTsNCisgZnNsX2lubChuZGV2LCBGU0xfT0ZGU0VU X0RPT1JCRUxMX1dSX0NNRCk7DQorIGZzbF9vdXRsKG5kZXYsIEZTTF9PRkZTRVRfRE9PUkJFTExf UkRfQ01ELCBORkFTVF9JTlRfSE9TVF9DTFIpOw0KKyBmc2xfaW5sKG5kZXYsIEZTTF9PRkZTRVRf RE9PUkJFTExfUkRfQ01EKTsNCisgZnNsX291dGwobmRldiwNCisgRlNMX09GRlNFVF9ET09SQkVM TF9XUl9TVEFUVVMsIE5GQVNUX0lOVF9ERVZJQ0VfQ0xSKTsNCisgZnNsX2lubChuZGV2LCBGU0xf T0ZGU0VUX0RPT1JCRUxMX1dSX1NUQVRVUyk7DQorIGZzbF9vdXRsKG5kZXYsDQorIEZTTF9PRkZT RVRfRE9PUkJFTExfUkRfU1RBVFVTLCBORkFTVF9JTlRfREVWSUNFX0NMUik7DQorIGZzbF9pbmwo bmRldiwgRlNMX09GRlNFVF9ET09SQkVMTF9SRF9TVEFUVVMpOw0KKyB9DQorDQorIGlmIChzdGF0 dXMgPT0gMCkgew0KKyBkZXZfbm90aWNlKCZuZGV2LT5wY2lkZXYtPmRldiwgIiVzOiBkZXZpY2Ug c3RhcnRlZCIsIF9fZnVuY19fKTsNCisgfSBlbHNlIGlmIChzdGF0dXMgPT0gTkZQX0hTTV9TVEFS VElORykgew0KKyBkZXZfbm90aWNlKCZuZGV2LT5wY2lkZXYtPmRldiwNCisgICAgIiVzOiBkZXZp Y2Ugbm90IHN0YXJ0ZWQgeWV0IiwgX19mdW5jX18pOw0KKyB9IGVsc2Ugew0KKyBkZXZfZXJyKCZu ZGV2LT5wY2lkZXYtPmRldiwNCisgIiVzOiBkZXZpY2UgY2hlY2sgZmFpbGVkIHdpdGggY29kZTog MHgleCIsDQorIF9fZnVuY19fLCBzdGF0dXMpOw0KKyB9DQorfQ0KKw0KKy8qKg0KKyAqIEhhbmRs ZXMgYW4gaW50ZXJydXB0IGZyb20gdGhlIEZTTCBkZXZpY2UuDQorICoNCisgKiBAcGFyYW0gY3R4 IGRldmljZSBjb250ZXh0IChhbHdheXMgdGhlIGRldmljZSBpdHNlbGYpLg0KKyAqIEBwYXJhbSBo YW5kbGVkIHNldCBub24temVybyBieSB0aGlzIHJvdXRpbmUgaWYgaW50ZXJydXB0IGNvbnNpZGVy ZWQgaGFuZGxlZA0KKyAqIEByZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgb3RoZXIgdmFsdWUgaWYg ZXJyb3IuDQorICovDQorc3RhdGljIGludCBmc2xfaXNyKHN0cnVjdCBuZnBfZGV2ICpjdHgsIGlu dCAqaGFuZGxlZCkNCit7DQorIHN0cnVjdCBuZnBfZGV2ICpuZGV2ID0gY3R4Ow0KKyBpbnQgbmU7 DQorIHUzMiBkb29yYmVsbF9yZCwgZG9vcmJlbGxfd3IsIGRvb3JiZWxsX2NzOw0KKyAvKiBjaGVj ayBmb3IgZGV2aWNlICovDQorIGlmICghbmRldikgew0KKyBwcl9lcnIoIiVzOiBlcnJvcjogbm8g ZGV2aWNlIiwgX19mdW5jX18pOw0KKyByZXR1cm4gLUVOT0RFVjsNCisgfQ0KKw0KKyBkZXZfZGJn KCZuZGV2LT5wY2lkZXYtPmRldiwgIiVzOiBlbnRlcmVkIiwgX19mdW5jX18pOw0KKw0KKyAvKiBt YXJrIG5vdCB5ZXQgaGFuZGxlZCAqLw0KKyAqaGFuZGxlZCA9IDA7DQorDQorIG5lID0gZnNsX2Ny ZWF0ZWQobmRldik7DQorIGlmIChuZSAhPSAwKSB7DQorIGRldl9lcnIoJm5kZXYtPnBjaWRldi0+ ZGV2LA0KKyAiJXM6IGVycm9yOiBpbnRlcnJ1cHQgbm90IGhhbmRsZWQiLCBfX2Z1bmNfXyk7DQor IHJldHVybiBuZTsNCisgfQ0KKw0KKyArK25kZXYtPnN0YXRzLmlzcjsNCisNCisgZG9vcmJlbGxf d3IgPSBmc2xfaW5sKG5kZXYsIEZTTF9PRkZTRVRfRE9PUkJFTExfV1JfU1RBVFVTKTsNCisgZG9v cmJlbGxfcmQgPSBmc2xfaW5sKG5kZXYsIEZTTF9PRkZTRVRfRE9PUkJFTExfUkRfU1RBVFVTKTsN CisgZG9vcmJlbGxfY3MgPSBmc2xfaW5sKG5kZXYsIEZTTF9PRkZTRVRfRE9PUkJFTExfQ1NfU1RB VFVTKTsNCisgZGV2X25vdGljZSgmbmRldi0+cGNpZGV2LT5kZXYsICIlczogY3M6PSAleCxyZDo9 JXgsd3I6PSV4IiwNCisgICAgX19mdW5jX18sIGRvb3JiZWxsX2NzLCBkb29yYmVsbF9yZCwgZG9v cmJlbGxfd3IpOw0KKw0KKyB3aGlsZSAoZG9vcmJlbGxfcmQgfHwgZG9vcmJlbGxfd3IgfHwgZG9v cmJlbGxfY3MpIHsNCisgLyogcHJldmVudCBhbnkgaWxsZWdhbCBjb21iaW5hdGlvbiBvZiBzZXQg Yml0cyBmcm9tIHRyaWdnZXJpbmcNCisgKiBwcm9jZXNzaW5nLiBOb3RlIHRoYXQgaWYgYW55b25l IG9mIHRoZXNlIHJlZ2lzdGVycyBoYXZlIGFuDQorICogaW5jb3JyZWN0IGJpdCBzZXQsIGl0IHdv dWxkIHByZXZlbnQgdGhlIG90aGVyIG9wZXJhdGlvbnMgZnJvbQ0KKyAqIGJlaW5nIHByb2Nlc3Nl ZCBzaW5jZSB3ZSByZXR1cm4gZnJvbSB0aGUgSVNSLCBldmVuIGlmIHRoZXkNCisgKiBoYXZlIGxl Z2FsIHZhbHVlcy4gVGhpcyBpcyBhbiB1bmxpa2VseSBzY2VuYXJpbyBzaW5jZSB0aGVzZQ0KKyAq IHJlZ2lzdGVycyBhcmUgd3JpdHRlbiBlaXRoZXIgdG8gMCBvciBvbmUgb2YgdGhlIGxlZ2FsIHZh bHVlcw0KKyAqIGJ5IHRoZSBzb2Z0d2FyZSBvbiB0aGUgY2FyZC4NCisgKi8NCisgaWYgKChkb29y YmVsbF9jcykgJiYNCisgICAgICgoZG9vcmJlbGxfY3MgJiB+TkZBU1RfSU5UX0RFVklDRV9DSEVD S19PSykgJiYNCisgICAgICAoZG9vcmJlbGxfY3MgJiB+TkZBU1RfSU5UX0RFVklDRV9DSEVDS19G QUlMRUQpKSkgew0KKyBkZXZfZXJyKCZuZGV2LT5wY2lkZXYtPmRldiwNCisgIiVzOiBpbGxlZ2Fs IGJpdHMgaW4gZG9vcmJlbGxfY3MgJXgiLA0KKyBfX2Z1bmNfXywgZG9vcmJlbGxfY3MpOw0KKyAq aGFuZGxlZCA9IDE7DQorIC8qIGNsZWFyIHRoZSByZWdpc3RlciovDQorIGZzbF9vdXRsKG5kZXYs IEZTTF9PRkZTRVRfRE9PUkJFTExfQ1NfU1RBVFVTLA0KKyBORkFTVF9JTlRfREVWSUNFX0NMUik7 DQorIHJldHVybiAwOw0KKyB9DQorIGlmICgoZG9vcmJlbGxfcmQpICYmDQorICAgICAoKGRvb3Ji ZWxsX3JkICYgfk5GQVNUX0lOVF9ERVZJQ0VfUkVBRF9PSykgJiYNCisgICAgICAoZG9vcmJlbGxf cmQgJiB+TkZBU1RfSU5UX0RFVklDRV9SRUFEX0ZBSUxFRCkpKSB7DQorIGRldl9lcnIoJm5kZXYt PnBjaWRldi0+ZGV2LA0KKyAiJXM6IGlsbGVnYWwgYml0cyBpbiBkb29yYmVsbF9yZCAleCIsDQor IF9fZnVuY19fLCBkb29yYmVsbF9yZCk7DQorICpoYW5kbGVkID0gMTsNCisgLyogY2xlYXIgdGhl IHJlZ2lzdGVyKi8NCisgZnNsX291dGwobmRldiwgRlNMX09GRlNFVF9ET09SQkVMTF9SRF9TVEFU VVMsDQorIE5GQVNUX0lOVF9ERVZJQ0VfQ0xSKTsNCisgcmV0dXJuIDA7DQorIH0NCisgaWYgKChk b29yYmVsbF93cikgJiYNCisgICAgICgoZG9vcmJlbGxfd3IgJiB+TkZBU1RfSU5UX0RFVklDRV9X UklURV9PSykgJiYNCisgICAgICAoZG9vcmJlbGxfd3IgJiB+TkZBU1RfSU5UX0RFVklDRV9XUklU RV9GQUlMRUQpKSkgew0KKyBkZXZfZXJyKCZuZGV2LT5wY2lkZXYtPmRldiwNCisgIiVzOiBpbGxl Z2FsIGJpdHMgaW4gZG9vcmJlbGxfd3IgJXgiLA0KKyBfX2Z1bmNfXywgZG9vcmJlbGxfd3IpOw0K KyAvKiBjbGVhciB0aGUgcmVnaXN0ZXIqLw0KKyBmc2xfb3V0bChuZGV2LCBGU0xfT0ZGU0VUX0RP T1JCRUxMX1dSX1NUQVRVUywNCisgTkZBU1RfSU5UX0RFVklDRV9DTFIpOw0KKyAqaGFuZGxlZCA9 IDE7DQorIHJldHVybiAwOw0KKyB9DQorDQorIC8qIHNlcnZpY2UgaW50ZXJydXB0cy4NCisgKiBp ZiB3ZSBtYWRlIGl0IGhlcmUsIHRoZSBkb29yYmVsbCByZWdpc3RlcnMgYXJlIGFsbCB2YWxpZCwN CisgKiBzbyBubyBuZWVkIHRvIGNoZWNrIGZvciB0aGVpciB2YWxpZGl0eSBhbnltb3JlLg0KKyAq Lw0KKw0KKyBpZiAoZG9vcmJlbGxfd3IpIHsNCisgZnNsX291dGwobmRldiwgRlNMX09GRlNFVF9E T09SQkVMTF9XUl9TVEFUVVMsDQorIE5GQVNUX0lOVF9ERVZJQ0VfQ0xSKTsNCisgbmRldi0+c3Rh dHMuaXNyX3dyaXRlKys7DQorIG5mcF93cml0ZV9jb21wbGV0ZShuZGV2LA0KKyAgICBkb29yYmVs bF93ciAmDQorICAgICAgTkZBU1RfSU5UX0RFVklDRV9XUklURV9PSyA/DQorIDEgOiAwKTsNCisg ZGV2X25vdGljZSgmbmRldi0+cGNpZGV2LT5kZXYsDQorICAgICIlczogYWNrbm93bGVkZ2luZyB3 cml0ZSBpbnRlcnJ1cHQ6IG9rID0gJWQiLA0KKyBfX2Z1bmNfXywNCisgZG9vcmJlbGxfd3IgJiBO RkFTVF9JTlRfREVWSUNFX1dSSVRFX09LDQorID8gMSA6IDApOw0KKyB9DQorDQorIGlmIChkb29y YmVsbF9yZCkgew0KKyBmc2xfb3V0bChuZGV2LCBGU0xfT0ZGU0VUX0RPT1JCRUxMX1JEX1NUQVRV UywNCisgTkZBU1RfSU5UX0RFVklDRV9DTFIpOw0KKyBuZGV2LT5zdGF0cy5pc3JfcmVhZCsrOw0K KyBuZnBfcmVhZF9jb21wbGV0ZShuZGV2LA0KKyAgIGRvb3JiZWxsX3JkICYNCisgICAgIE5GQVNU X0lOVF9ERVZJQ0VfUkVBRF9PSyA/IDEgOiAwKTsNCisgZGV2X25vdGljZSgmbmRldi0+cGNpZGV2 LT5kZXYsDQorICAgICIlczogYWNrbm93bGVkZ2luZyByZWFkIGludGVycnVwdDogb2sgPSAlZCIs DQorIF9fZnVuY19fLA0KKyBkb29yYmVsbF9yZCAmIE5GQVNUX0lOVF9ERVZJQ0VfUkVBRF9PSyA/ IDEgOiAwKTsNCisgfQ0KKyAvKiB0aGUgZG9vcmJlbGxfY3MgaXMgYmVpbmcgcGhhc2VkIG91dCBp biBmYXZvciBvZiBwb2xsaW5nIHNpbmNlDQorICogdGhlcmUgd2VyZSBpc3N1ZXMgY2F1c2VkIGJ5 IHRoaXMgaW50ZXJydXB0IGJlaW5nIGlzc3VlZCBmcm9tDQorICogdGhlIGNhcmQgb24gaXRzIG93 biB3aGVuIHRoZSBkcml2ZXIgd2FzIG5vdCBldmVuIHByZXNlbnQuDQorICogVG8gbWFpbnRhaW4g YmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHRoaXMgY29kZSBpcyBiZWluZyBrZXB0LA0KKyAqIGJ1 dCBtaWdodCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuDQorICovDQorIGRldl9ub3RpY2UoJm5k ZXYtPnBjaWRldi0+ZGV2LCAiJXM6IGRvb3JiZWxsX2NzIGlzOiAleCIsDQorICAgIF9fZnVuY19f LCBkb29yYmVsbF9jcyk7DQorIGlmIChkb29yYmVsbF9jcykgew0KKyBmc2xfb3V0bChuZGV2LCBG U0xfT0ZGU0VUX0RPT1JCRUxMX0NTX1NUQVRVUywNCisgTkZBU1RfSU5UX0RFVklDRV9DTFIpOw0K KyBmc2xfY2hlY2tfY29tcGxldGUobmRldiwNCisgICAgZG9vcmJlbGxfY3MgJg0KKyBORkFTVF9J TlRfREVWSUNFX0NIRUNLX09LID8NCisgMCA6DQorIE5GUF9IU01fU1RBUlRJTkcpOw0KKyBkZXZf bm90aWNlKCZuZGV2LT5wY2lkZXYtPmRldiwNCisgICAgIiVzOiBhY2tub3dsZWRnaW5nIGNoZWNr IGludGVycnVwdDogc3RhdHVzOjB4JXgiLA0KKyAgICBfX2Z1bmNfXywNCisgICAgZG9vcmJlbGxf Y3MgJiBORkFTVF9JTlRfREVWSUNFX0NIRUNLX09LID8NCisgMCA6DQorIE5GUF9IU01fU1RBUlRJ TkcpOw0KKyB9DQorDQorIGRvb3JiZWxsX3dyID0gZnNsX2lubChuZGV2LCBGU0xfT0ZGU0VUX0RP T1JCRUxMX1dSX1NUQVRVUyk7DQorIGRvb3JiZWxsX3JkID0gZnNsX2lubChuZGV2LCBGU0xfT0ZG U0VUX0RPT1JCRUxMX1JEX1NUQVRVUyk7DQorIGRvb3JiZWxsX2NzID0gZnNsX2lubChuZGV2LCBG U0xfT0ZGU0VUX0RPT1JCRUxMX0NTX1NUQVRVUyk7DQorDQorIGRldl9ub3RpY2UoJm5kZXYtPnBj aWRldi0+ZGV2LCAiJXM6IGNzIHN0YXR1cyBpbiBpc3IgaXM6ICV4IiwNCisgICAgX19mdW5jX18s IGRvb3JiZWxsX2NzKTsNCisgfQ0KKw0KKyAvKiBhbHdheXMgcmVwb3J0IHRoZSBpbnRlcnJ1cHQg YXMgaGFuZGxlZCAqLw0KKyAqaGFuZGxlZCA9IDE7DQorDQorIGRldl9ub3RpY2UoJm5kZXYtPnBj aWRldi0+ZGV2LCAiJXM6IGV4aXRpbmciLCBfX2Z1bmNfXyk7DQorDQorIHJldHVybiAwOw0KK30N CisNCisvKioNCisgKiBQZXJmb3JtcyBhZGRpdGlvbmFsIEZTTC1zcGVjaWZpYyBhY3Rpb25zIHdo ZW4gb3BlbmluZyBhIGRldmljZS4NCisgKg0KKyAqIFRoaXMgcm91dGluZSByZXR1cm5zIGFuIGVy cm9yIGlmIHRoZSBkZXZpY2UgaGFzIG5vdCBwcm9wZXJseSBzdGFydGVkLg0KKyAqDQorICogQHBh cmFtIGN0eCBkZXZpY2UgY29udGV4dCAoYWx3YXlzIHRoZSBkZXZpY2UgaXRzZWxmKS4NCisgKiBA cmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIG90aGVyIHZhbHVlIGlmIGVycm9yLg0KKyAqLw0KK3N0 YXRpYyBpbnQgZnNsX29wZW4oc3RydWN0IG5mcF9kZXYgKmN0eCkNCit7DQorIHN0cnVjdCBuZnBf ZGV2ICpuZGV2ID0gY3R4Ow0KKyBpbnQgbmU7DQorDQorIC8qIGNoZWNrIGZvciBkZXZpY2UgKi8N CisgaWYgKCFuZGV2KSB7DQorIHByX2VycigiJXM6IGVycm9yOiBubyBkZXZpY2UiLCBfX2Z1bmNf Xyk7DQorIHJldHVybiAtRU5PREVWOw0KKyB9DQorDQorIGRldl9kYmcoJm5kZXYtPnBjaWRldi0+ ZGV2LCAiJXM6IGVudGVyZWQiLCBfX2Z1bmNfXyk7DQorDQorIC8qIGNoZWNrIGZvciBkZXZpY2Ug Ki8NCisNCisgbmUgPSBmc2xfc3RhcnRlZChuZGV2LCBORlBfV0lUSF9MT0NLKTsNCisgaWYgKG5l ICE9IDApIHsNCisgbmRldi0+c3RhdHMuZW5zdXJlX2ZhaWwrKzsNCisgZGV2X2VycigmbmRldi0+ cGNpZGV2LT5kZXYsDQorICIlczogZXJyb3I6IGRldmljZSBub3Qgc3RhcnRlZCIsIF9fZnVuY19f KTsNCisgcmV0dXJuIG5lOw0KKyB9DQorDQorIHJldHVybiAwOw0KK30NCisNCisvKioNCisgKiBQ ZXJmb3JtcyBhZGRpdGlvbmFsIEZTTC1zcGVjaWZpYyBhY3Rpb25zIHdoZW4gY2xvc2luZyBhIGRl dmljZS4NCisgKg0KKyAqIEBwYXJhbSBjdHggZGV2aWNlIGNvbnRleHQgKGFsd2F5cyB0aGUgZGV2 aWNlIGl0c2VsZikuDQorICogQHJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBvdGhlciB2YWx1ZSBp ZiBlcnJvci4NCisgKi8NCitzdGF0aWMgaW50IGZzbF9jbG9zZShzdHJ1Y3QgbmZwX2RldiAqY3R4 KQ0KK3sNCisgc3RydWN0IG5mcF9kZXYgKm5kZXYgPSBjdHg7DQorDQorIC8qIGNoZWNrIGZvciBk ZXZpY2UgKi8NCisgaWYgKCFuZGV2KSB7DQorIHByX2VycigiJXM6IGVycm9yOiBubyBkZXZpY2Ui LCBfX2Z1bmNfXyk7DQorIHJldHVybiAtRU5PREVWOw0KKyB9DQorDQorIGRldl9kYmcoJm5kZXYt PnBjaWRldi0+ZGV2LCAiJXM6IGVudGVyZWQiLCBfX2Z1bmNfXyk7DQorDQorIHJldHVybiAwOw0K K30NCisNCisvKioNCisgKiBTZXRzIGNvbnRyb2wgZGF0YS4NCisgKg0KKyAqIFRoZSBkZXZpY2Ug Y29udHJvbCByZWdpc3RlciBpcyB3cml0ZW4gZGlyZWN0bHkuIE5vIGRvb3JiZWxsIHN0eWxlIGhh bmRzaGFrZQ0KKyAqIGlzIHVzZWQuDQorICoNCisgKiBAcGFyYW0gY29udHJvbCBjb250cm9sIHN0 cmluZyB0byBjb3B5IGZyb20uDQorICogQHBhcmFtIGN0eCBkZXZpY2UgY29udGV4dCAoYWx3YXlz IHRoZSBkZXZpY2UgaXRzZWxmKS4NCisgKiBAcmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIG90aGVy IHZhbHVlIGlmIGVycm9yLg0KKyAqLw0KK3N0YXRpYyBpbnQgZnNsX3NldF9jb250cm9sKGNvbnN0 IHN0cnVjdCBuZmRldl9jb250cm9sX3N0ciAqY29udHJvbCwNCisgICAgc3RydWN0IG5mcF9kZXYg KmN0eCkNCit7DQorIHN0cnVjdCBuZnBfZGV2ICpuZGV2ID0gY3R4Ow0KKyBpbnQgbmU7DQorDQor IC8qIGNoZWNrIGZvciBkZXZpY2UgKi8NCisgaWYgKCFuZGV2KSB7DQorIHByX2VycigiJXM6IGVy cm9yOiBubyBkZXZpY2UiLCBfX2Z1bmNfXyk7DQorIHJldHVybiAtRU5PREVWOw0KKyB9DQorDQor IGRldl9kYmcoJm5kZXYtPnBjaWRldi0+ZGV2LCAiJXM6IGVudGVyZWQiLCBfX2Z1bmNfXyk7DQor DQorIC8qIGNoZWNrIGZvciBkZXZpY2UgKi8NCisNCisgbmRldiA9IChzdHJ1Y3QgbmZwX2RldiAq KWN0eDsNCisgbmUgPSBmc2xfc3RhcnRlZChuZGV2LCBORlBfV0lUSF9MT0NLKTsNCisgaWYgKG5l ICE9IDApIHsNCisgZGV2X2VycigmbmRldi0+cGNpZGV2LT5kZXYsDQorICIlczogZXJyb3I6IHVu YWJsZSB0byBzZXQgY29udHJvbCIsIF9fZnVuY19fKTsNCisgcmV0dXJuIG5lOw0KKyB9DQorDQor IC8qIHNldCBjb250cm9sICh3cml0dGVuIGltbWVkaWF0ZWx5IHdpdGggbm8gZXhwbGljaXQNCisg KiBzeW5jaHJvbml6YXRpb24gd2l0aCB0aGUgZmlybXdhcmUpDQorICovDQorDQorIGZzbF9vdXRs KG5kZXYsIEZTTF9PRkZTRVRfUkVHSVNURVJfQ09OVFJPTCwgY29udHJvbC0+Y29udHJvbCk7DQor DQorIHJldHVybiAwOw0KK30NCisNCisvKioNCisgKiBSZXR1cm5zIHN0YXR1cyBkYXRhLg0KKyAq DQorICogVGhlIGRldmljZSBzdGF0dXMgcmVnaXN0ZXJzIGFyZSByZWFkIGltbWVkaWF0ZWx5LiBO byBkb29yYmVsbCBzdHlsZQ0KKyAqIGhhbmRzaGFrZSBpcyB1c2VkLiBXaXRob3V0IGV4cGxpY2l0 IHN5bmNocm9uaXphdGlvbiwgaXQgaXMgcG9zc2libGUNCisgKiB0aGF0IGFuIGluY29uc2lzdGVu dCBzdGF0ZSBtYXkgYmUgcmV0dXJuZWQgaWYgdGhlIHN0YXR1cyBpcyBiZWluZw0KKyAqIHVwZGF0 ZWQgYnkgdGhlIGZpcm13YXJlIHdoaWxlIHNpbXVsdGFuZW91c2x5IGJlaW5nIHJlYWQgYnkgdGhl IGhvc3QuDQorICogRm9yIGV4YW1wbGUsIHRoZSBjYWxsIGNvdWxkIHJldHVybiBhbiB1cGRhdGVk IHN0YXR1cyB3b3JkIHdpdGggYSBub3QNCisgKiBhcyB5ZXQgdXBkYXRlZCBlcnJvciBzdHJpbmcu IFRoaXMgaXMgbGlrZWx5IGEgZGVnZW5lcmF0ZSBjYXNlLg0KKyAqDQorICogQHBhcmFtIHN0YXR1 cyBzdHJpbmcgdG8gY29weSBpbnRvLg0KKyAqIEBwYXJhbSBjdHggZGV2aWNlIGNvbnRleHQgKGFs d2F5cyB0aGUgZGV2aWNlIGl0c2VsZikuDQorICogQHJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBv dGhlciB2YWx1ZSBpZiBlcnJvci4NCisgKi8NCitzdGF0aWMgaW50IGZzbF9nZXRfc3RhdHVzKHN0 cnVjdCBuZmRldl9zdGF0dXNfc3RyICpzdGF0dXMsIHN0cnVjdCBuZnBfZGV2ICpjdHgpDQorew0K KyBzdHJ1Y3QgbmZwX2RldiAqbmRldiA9IGN0eDsNCisgaW50IG5lOw0KKyB1MzIgKmVycm9yID0g KHVpbnQzMl90ICopc3RhdHVzLT5lcnJvcjsNCisNCisgLyogY2hlY2sgZm9yIGRldmljZSAqLw0K KyBpZiAoIW5kZXYpIHsNCisgcHJfZXJyKCIlczogZXJyb3I6IG5vIGRldmljZSIsIF9fZnVuY19f KTsNCisgcmV0dXJuIC1FTk9ERVY7DQorIH0NCisNCisgZGV2X2RiZygmbmRldi0+cGNpZGV2LT5k ZXYsICIlczogZW50ZXJlZCIsIF9fZnVuY19fKTsNCisNCisgLyogY2hlY2sgZm9yIGRldmljZSAq Lw0KKw0KKyBuZGV2ID0gKHN0cnVjdCBuZnBfZGV2ICopY3R4Ow0KKyBuZSA9IGZzbF9zdGFydGVk KG5kZXYsIE5GUF9XSVRIX0xPQ0spOw0KKyBpZiAobmUgIT0gMCkgew0KKyBkZXZfZXJyKCZuZGV2 LT5wY2lkZXYtPmRldiwNCisgIiVzOiBlcnJvcjogdW5hYmxlIHRvIGdldCBzdGF0dXMiLCBfX2Z1 bmNfXyk7DQorIHJldHVybiBuZTsNCisgfQ0KKw0KKyAvKiBnZXQgc3RhdHVzIChyZWFkIGltbWVk aWF0ZWx5IHdpdGggbm8gZXhwbGljaXQgc3luY2hyb25pemF0aW9uDQorICogd2l0aCB0aGUgZmly bXdhcmUpDQorICovDQorDQorIHN0YXR1cy0+c3RhdHVzID0gZnNsX2lubChuZGV2LCBGU0xfT0ZG U0VUX1JFR0lTVEVSX1NUQVRVUyk7DQorIGVycm9yWzBdID0gZnNsX2lubChuZGV2LCBGU0xfT0ZG U0VUX1JFR0lTVEVSX0VSUk9SX0xPKTsNCisgZXJyb3JbMV0gPSBmc2xfaW5sKG5kZXYsIEZTTF9P RkZTRVRfUkVHSVNURVJfRVJST1JfSEkpOw0KKw0KKyByZXR1cm4gMDsNCit9DQorDQorLyoqDQor ICogSW5pdGlhdGVzIGEgZGV2aWNlIHJlYWQgcmVxdWVzdC4NCisgKg0KKyAqIEBwYXJhbSBhZGRy IDMyLWJpdCBidXMgYWRkcmVzcyB1c2VkIGJ5IERNQSB0byBwdXNoIHJlcGx5IGZyb20gZGV2aWNl Lg0KKyAqIEBwYXJhbSBsZW4gbWF4aW11bSBsZW5ndGggZGF0YSB0byByZXR1cm4uDQorICogQHBh cmFtIGN0eCBkZXZpY2UgY29udGV4dCAoYWx3YXlzIHRoZSBkZXZpY2UgaXRzZWxmKS4NCisgKiBA cmV0dXJucyAwIGlmIHJlYWQgaW5pdGlhdGVkLCBORlBfSFNNX1NUQVJUSU5HIGlmIGRldmljZSBu b3QgcmVhZHksDQorICogb3Igb3RoZXIgdmFsdWUgaWYgZXJyb3IuDQorICovDQorc3RhdGljIGlu dCBmc2xfZW5zdXJlX3JlYWRpbmcoZG1hX2FkZHJfdCBhZGRyLA0KKyAgICAgICBpbnQgbGVuLCBz dHJ1Y3QgbmZwX2RldiAqY3R4LCBpbnQgbG9ja19mbGFnKQ0KK3sNCisgc3RydWN0IG5mcF9kZXYg Km5kZXYgPSBjdHg7DQorIF9fbGUzMiBoZHJbM107DQorIF9fbGUzMiB0bXAzMjsNCisgaW50IG5l Ow0KKyBpbnQgaGRyX2xlbjsNCisNCisgLyogY2hlY2sgZm9yIGRldmljZSAqLw0KKyBpZiAoIW5k ZXYpIHsNCisgcHJfZXJyKCIlczogZXJyb3I6IG5vIGRldmljZSIsIF9fZnVuY19fKTsNCisgcmV0 dXJuIC1FTk9ERVY7DQorIH0NCisNCisgZGV2X2RiZygmbmRldi0+cGNpZGV2LT5kZXYsICIlczog ZW50ZXJlZCIsIF9fZnVuY19fKTsNCisNCisgLyogY2hlY2sgZm9yIGRldmljZSAqLw0KKw0KKyBu ZGV2ID0gKHN0cnVjdCBuZnBfZGV2ICopY3R4Ow0KKyBuZSA9IGZzbF9zdGFydGVkKG5kZXYsIGxv Y2tfZmxhZyk7DQorIGlmIChuZSAhPSAwKSB7DQorIG5kZXYtPnN0YXRzLmVuc3VyZV9mYWlsKys7 DQorIGRldl9lcnIoJm5kZXYtPnBjaWRldi0+ZGV2LA0KKyAiJXM6IGVycm9yOiB1bmFibGUgdG8g aW5pdGlhdGUgcmVhZCIsIF9fZnVuY19fKTsNCisgcmV0dXJuIG5lOw0KKyB9DQorDQorIGRldl9u b3RpY2UoJm5kZXYtPnBjaWRldi0+ZGV2LCAiJXM6IG5kZXYtPmJhcltuZGV2LT5hY3RpdmVfYmFy XT0gJXAiLA0KKyAgICBfX2Z1bmNfXywgKHZvaWQgKiluZGV2LT5iYXJbbmRldi0+YWN0aXZlX2Jh cl0pOw0KKw0KKyAvKiBzZW5kIHJlYWQgcmVxdWVzdCAqLw0KKw0KKyBpZiAoYWRkcikgew0KKyBk ZXZfbm90aWNlKCZuZGV2LT5wY2lkZXYtPmRldiwNCisgICAgIiVzOiByZXF1ZXN0aW5nIERNQSBy ZXBseSB0byBidXMgYWRkcmVzcyAlcCIsDQorICAgIF9fZnVuY19fLCAodm9pZCAqKWFkZHIpOw0K KyBoZHJbMF0gPSBjcHVfdG9fbGUzMihORlBDSV9KT0JfQ09OVFJPTF9QQ0lfUFVTSCk7DQorIGhk clsxXSA9IGNwdV90b19sZTMyKGxlbik7DQorIGhkclsyXSA9IGNwdV90b19sZTMyKGFkZHIpOw0K KyBoZHJfbGVuID0gMyAqIHNpemVvZihoZHJbMF0pOw0KKyB9IGVsc2Ugew0KKyBoZHJbMF0gPSBj cHVfdG9fbGUzMihORlBDSV9KT0JfQ09OVFJPTCk7DQorIGhkclsxXSA9IGNwdV90b19sZTMyKGxl bik7DQorIGhkcl9sZW4gPSAyICogc2l6ZW9mKGhkclswXSk7DQorIH0NCisgbWVtY3B5KG5kZXYt PmJhcltuZGV2LT5hY3RpdmVfYmFyXSArIE5GUENJX0pPQlNfUkRfQ09OVFJPTCwNCisgICAgICAg IChjaGFyIGNvbnN0ICopaGRyLCBoZHJfbGVuKTsNCisNCisgLyogY29uZmlybSByZWFkIHJlcXVl c3QgKi8NCisNCisgbWVtY3B5KChjaGFyICopaGRyLA0KKyAgICAgICAgbmRldi0+YmFyW25kZXYt PmFjdGl2ZV9iYXJdICsgTkZQQ0lfSk9CU19SRF9MRU5HVEgsDQorICAgICAgICBzaXplb2YoaGRy WzBdKSk7DQorIHRtcDMyID0gY3B1X3RvX2xlMzIobGVuKTsNCisgaWYgKGhkclswXSAhPSB0bXAz Mikgew0KKyBkZXZfZXJyKCZuZGV2LT5wY2lkZXYtPmRldiwNCisgIiVzOiBlcnJvcjogZXhwZWN0 ZWQgbGVuZ3RoIG5vdCB3cml0dGVuICglMDh4ICE9ICUwOHgpIiwNCisgX19mdW5jX18sIGhkclsw XSwgdG1wMzIpOw0KKyBuZGV2LT5zdGF0cy5lbnN1cmVfZmFpbCsrOw0KKyByZXR1cm4gLUVJTzsN CisgfQ0KKw0KKyAvKiB0cmlnZ2VyIHJlYWQgcmVxdWVzdCAqLw0KKw0KKyBmc2xfb3V0bChuZGV2 LCBGU0xfT0ZGU0VUX0RPT1JCRUxMX1JEX0NNRCwgTkZBU1RfSU5UX0hPU1RfUkVBRF9SRVFVRVNU KTsNCisNCisgbmRldi0+c3RhdHMuZW5zdXJlKys7DQorDQorIGRldl9ub3RpY2UoJm5kZXYtPnBj aWRldi0+ZGV2LA0KKyAgICAiJXM6IHJlcXVlc3RpbmcgbWF4ICVkIGJ5dGVzIiwgX19mdW5jX18s IGxlbik7DQorDQorIHJldHVybiAwOw0KK30NCisNCisvKioNCisgKiBSZWFkcyBhIGRldmljZSBy ZWFkIHJlcGx5Lg0KKyAqDQorICogQHBhcmFtIGJsb2NrIGRhdGEgYnVmZmVyIHRvIGNvcHkgaW50 by4NCisgKiBAcGFyYW0gbGVuIG1heGltdW0gbGVuZ3RoIG9mIGRhdGEgdG8gY29weS4NCisgKiBA cGFyYW0gY3R4IGRldmljZSBjb250ZXh0IChhbHdheXMgdGhlIGRldmljZSBpdHNlbGYpLg0KKyAq IEBwYXJhbSByY250IHJldHVybmVkIGFjdHVhbCAjIG9mIGJ5dGVzIGNvcGllZA0KKyAqIEByZXR1 cm5zIDAgaWYgcmVhZCBpbml0aWF0ZWQsIE5GUF9IU01fU1RBUlRJTkcgaWYgZGV2aWNlIG5vdCBy ZWFkeSwNCisgKiBvciBvdGhlciB2YWx1ZSBpZiBlcnJvci4NCisgKi8NCitzdGF0aWMgaW50IGZz bF9yZWFkKGNoYXIgKmJsb2NrLCBpbnQgbGVuLCBzdHJ1Y3QgbmZwX2RldiAqY3R4LCBpbnQgKnJj bnQpDQorew0KKyBzdHJ1Y3QgbmZwX2RldiAqbmRldiA9IGN0eDsNCisgaW50IG5lOw0KKyBpbnQg Y250Ow0KKw0KKyAvKiBjaGVjayBmb3IgZGV2aWNlICovDQorIGlmICghbmRldikgew0KKyBwcl9l cnIoIiVzOiBlcnJvcjogbm8gZGV2aWNlIiwgX19mdW5jX18pOw0KKyByZXR1cm4gLUVOT0RFVjsN CisgfQ0KKw0KKyBkZXZfZGJnKCZuZGV2LT5wY2lkZXYtPmRldiwgIiVzOiBlbnRlcmVkIiwgX19m dW5jX18pOw0KKw0KKyAqcmNudCA9IDA7DQorDQorIC8qIGNoZWNrIGZvciBkZXZpY2UgKi8NCisN CisgbmRldiA9IChzdHJ1Y3QgbmZwX2RldiAqKWN0eDsNCisgbmUgPSBmc2xfc3RhcnRlZChuZGV2 LCBORlBfV0lUSF9MT0NLKTsNCisgaWYgKG5lICE9IDApIHsNCisgbmRldi0+c3RhdHMucmVhZF9m YWlsKys7DQorIGRldl9lcnIoJm5kZXYtPnBjaWRldi0+ZGV2LA0KKyAiJXM6IGVycm9yOiB1bmFi bGUgdG8gY29tcGxldGUgcmVhZCIsIF9fZnVuY19fKTsNCisgcmV0dXJuIG5lOw0KKyB9DQorDQor IC8qIHJlY2VpdmUgcmVwbHkgbGVuZ3RoICovDQorDQorIG1lbWNweSgoY2hhciAqKSZjbnQsDQor ICAgICAgICBuZGV2LT5iYXJbbmRldi0+YWN0aXZlX2Jhcl0gKyBORlBDSV9KT0JTX1JEX0xFTkdU SCwNCisgICAgICAgIHNpemVvZihjbnQpKTsNCisgY250ID0gbGUzMl90b19jcHUoY250KTsNCisg ZGV2X25vdGljZSgmbmRldi0+cGNpZGV2LT5kZXYsICIlczogY250PSV1LiIsIF9fZnVuY19fLCBj bnQpOw0KKyBpZiAoY250IDwgMCB8fCBjbnQgPiBsZW4pIHsNCisgbmRldi0+c3RhdHMucmVhZF9m YWlsKys7DQorIGRldl9lcnIoJm5kZXYtPnBjaWRldi0+ZGV2LCAiJXM6IGVycm9yOiBiYWQgYnl0 ZSBjb3VudCAoJWQpIGZyb20gZGV2aWNlIiwNCisgX19mdW5jX18sIGNudCk7DQorIHJldHVybiAt RUlPOw0KKyB9DQorDQorIC8qIHJlY2VpdmUgZGF0YSAqLw0KKw0KKyBuZSA9IGNvcHlfdG9fdXNl cihibG9jaywgbmRldi0+YmFyW25kZXYtPmFjdGl2ZV9iYXJdICsNCisgICBORlBDSV9KT0JTX1JE X0RBVEEsIGNudCkgPyAtRUZBVUxUIDogMDsNCisgaWYgKG5lICE9IDApIHsNCisgbmRldi0+c3Rh dHMucmVhZF9mYWlsKys7DQorIGRldl9lcnIoJm5kZXYtPnBjaWRldi0+ZGV2LCAiJXM6IGVycm9y OiBjb3B5X3RvX3VzZXIgZmFpbGVkIiwNCisgX19mdW5jX18pOw0KKyByZXR1cm4gbmU7DQorIH0N CisNCisgKnJjbnQgPSBjbnQ7DQorIG5kZXYtPnN0YXRzLnJlYWRfYmxvY2srKzsNCisgbmRldi0+ c3RhdHMucmVhZF9ieXRlICs9IGNudDsNCisgZGV2X3dhcm4oJm5kZXYtPnBjaWRldi0+ZGV2LCAi JXM6IHJlYWQgJWQgYnl0ZXMgKHN0ZCkiLCBfX2Z1bmNfXywgY250KTsNCisNCisgcmV0dXJuIDA7 DQorfQ0KKw0KKy8qKg0KKyAqIEluaXRpYXRlcyBhIGRldmljZSB3cml0ZSByZXF1ZXN0Lg0KKyAq DQorICogQHBhcmFtIGFkZHIgMzItYml0IGJ1cyBhZGRyZXNzIHVzZWQgYnkgRE1BIHRvIHB1bGwg cmVxdWVzdCB0byBkZXZpY2UuDQorICogQHBhcmFtIGJsb2NrIGRhdGEgYnVmZmVyIHRvIGNvcHkg ZnJvbS4NCisgKiBAcGFyYW0gbGVuIGxlbmd0aCBvZiBkYXRhIHRvIGNvcHkuDQorICogQHBhcmFt IGN0eCBkZXZpY2UgY29udGV4dCAoYWx3YXlzIHRoZSBkZXZpY2UgaXRzZWxmKS4NCisgKiBAcmV0 dXJucyAwIGlmIHdyaXRlIHN1Y2Nlc3NmdWwsIE5GUF9IU01fU1RBUlRJTkcgaWYgZGV2aWNlIG5v dA0KKyAqIHJlYWR5LCBvciBvdGhlciB2YWx1ZSBpZiBlcnJvci4NCisgKi8NCitzdGF0aWMgaW50 IGZzbF93cml0ZSh1MzIgYWRkciwgY2hhciBjb25zdCAqYmxvY2ssIGludCBsZW4sIHN0cnVjdCBu ZnBfZGV2ICpjdHgpDQorew0KKyBzdHJ1Y3QgbmZwX2RldiAqbmRldiA9IGN0eDsNCisgX19sZTMy IGhkclszXTsNCisgaW50IG5lOw0KKyBfX2xlMzIgdG1wMzI7DQorIGludCBoZHJfbGVuOw0KKw0K KyAvKiBjaGVjayBmb3IgZGV2aWNlICovDQorIGlmICghbmRldikgew0KKyBwcl9lcnIoIiVzOiBl cnJvcjogbm8gZGV2aWNlIiwgX19mdW5jX18pOw0KKyByZXR1cm4gLUVOT0RFVjsNCisgfQ0KKw0K KyBkZXZfZGJnKCZuZGV2LT5wY2lkZXYtPmRldiwgIiVzOiBlbnRlcmVkIiwgX19mdW5jX18pOw0K Kw0KKyAvKiBjaGVjayBmb3IgZGV2aWNlICovDQorDQorIG5kZXYgPSAoc3RydWN0IG5mcF9kZXYg KiljdHg7DQorIG5lID0gZnNsX3N0YXJ0ZWQobmRldiwgTkZQX1dJVEhfTE9DSyk7DQorIGlmIChu ZSAhPSAwKSB7DQorIG5kZXYtPnN0YXRzLndyaXRlX2ZhaWwrKzsNCisgZGV2X2VycigmbmRldi0+ cGNpZGV2LT5kZXYsDQorICIlczogZXJyb3I6IHVuYWJsZSB0byBpbml0aWF0ZSB3cml0ZSIsIF9f ZnVuY19fKTsNCisgcmV0dXJuIG5lOw0KKyB9DQorDQorIGlmIChhZGRyID09IDApIHsNCisgLyog c3RkIHdyaXRlICovDQorDQorIGRldl9ub3RpY2UoJm5kZXYtPnBjaWRldi0+ZGV2LCAiJXM6IG5k ZXYtPmJhcltuZGV2LT5hY3RpdmVfYmFyXT0gJXAiLA0KKyAgICBfX2Z1bmNfXywgKHZvaWQgKilu ZGV2LT5iYXJbbmRldi0+YWN0aXZlX2Jhcl0pOw0KKyBkZXZfbm90aWNlKCZuZGV2LT5wY2lkZXYt PmRldiwNCisgICAgIiVzOiBibG9jayBsZW4gJWQiLCBfX2Z1bmNfXywgbGVuKTsNCisNCisgLyog c2VuZCB3cml0ZSByZXF1ZXN0ICovDQorDQorIG5lID0gY29weV9mcm9tX3VzZXIobmRldi0+YmFy W25kZXYtPmFjdGl2ZV9iYXJdICsNCisgICAgIE5GUENJX0pPQlNfV1JfREFUQSwgYmxvY2ssIGxl bikNCisgICAgID8gLUVGQVVMVCA6IDA7DQorIGlmIChuZSAhPSAwKSB7DQorIG5kZXYtPnN0YXRz LndyaXRlX2ZhaWwrKzsNCisgZGV2X2VycigmbmRldi0+cGNpZGV2LT5kZXYsDQorICIlczogZXJy b3I6IGNvcHlfZnJvbV91c2VyIGZhaWxlZCIsIF9fZnVuY19fKTsNCisgcmV0dXJuIG5lOw0KKyB9 DQorDQorIGhkclswXSA9IGNwdV90b19sZTMyKE5GUENJX0pPQl9DT05UUk9MKTsNCisgaGRyWzFd ID0gY3B1X3RvX2xlMzIobGVuKTsNCisgaGRyX2xlbiA9IDIgKiBzaXplb2YoaGRyWzBdKTsNCisg bWVtY3B5KG5kZXYtPmJhcltuZGV2LT5hY3RpdmVfYmFyXSArIE5GUENJX0pPQlNfV1JfQ09OVFJP TCwNCisgICAgICAgIChjaGFyIGNvbnN0ICopaGRyLCBoZHJfbGVuKTsNCisNCisgLyogY29uZmly bSB3cml0ZSByZXF1ZXN0ICovDQorDQorIG1lbWNweSgoY2hhciAqKWhkciwNCisgICAgICAgIG5k ZXYtPmJhcltuZGV2LT5hY3RpdmVfYmFyXSArIE5GUENJX0pPQlNfV1JfTEVOR1RILA0KKyAgICAg ICAgc2l6ZW9mKGhkclswXSkpOw0KKyB0bXAzMiA9IGNwdV90b19sZTMyKGxlbik7DQorIGlmICho ZHJbMF0gIT0gdG1wMzIpIHsNCisgbmRldi0+c3RhdHMud3JpdGVfZmFpbCsrOw0KKyBkZXZfZXJy KCZuZGV2LT5wY2lkZXYtPmRldiwgIiVzOiBsZW5ndGggbm90IHdyaXR0ZW4gKCUwOHggIT0gJTA4 eCkiLA0KKyBfX2Z1bmNfXywgaGRyWzBdLCB0bXAzMik7DQorIHJldHVybiAtRUlPOw0KKyB9DQor IH0gZWxzZSB7DQorIC8qIGRtYSB3cml0ZSAqLw0KKw0KKyBkZXZfbm90aWNlKCZuZGV2LT5wY2lk ZXYtPmRldiwgIiVzOiBuZGV2LT5iYXJbbmRldi0+YWN0aXZlX2Jhcl09ICVwIiwNCisgICAgX19m dW5jX18sICh2b2lkICopbmRldi0+YmFyW25kZXYtPmFjdGl2ZV9iYXJdKTsNCisgZGV2X25vdGlj ZSgmbmRldi0+cGNpZGV2LT5kZXYsDQorICAgICIlczogYmxvY2sgbGVuICVkIiwgX19mdW5jX18s IGxlbik7DQorIGRldl9ub3RpY2UoJm5kZXYtPnBjaWRldi0+ZGV2LCAiJXM6IHB1bGwgZnJvbSAw eCUwMTZ4IHVzaW5nIERNQSIsDQorICAgIF9fZnVuY19fLCBhZGRyKTsNCisNCisgLyogc3VibWl0 IHdyaXRlIHJlcXVlc3QgKi8NCisNCisgaGRyWzBdID0gY3B1X3RvX2xlMzIoTkZQQ0lfSk9CX0NP TlRST0xfUENJX1BVTEwpOw0KKyBoZHJbMV0gPSBjcHVfdG9fbGUzMihsZW4pOw0KKyBoZHJbMl0g PSBjcHVfdG9fbGUzMihhZGRyKTsNCisgaGRyX2xlbiA9IDMgKiBzaXplb2YoaGRyWzBdKTsNCisg bWVtY3B5KG5kZXYtPmJhcltuZGV2LT5hY3RpdmVfYmFyXSArIE5GUENJX0pPQlNfV1JfQ09OVFJP TCwNCisgICAgICAgIChjaGFyIGNvbnN0ICopaGRyLCBoZHJfbGVuKTsNCisNCisgLyogY29uZmly bSB3cml0ZSByZXF1ZXN0ICovDQorDQorIG1lbWNweSgoY2hhciAqKWhkciwNCisgICAgICAgIG5k ZXYtPmJhcltuZGV2LT5hY3RpdmVfYmFyXSArIE5GUENJX0pPQlNfV1JfTEVOR1RILA0KKyAgICAg ICAgc2l6ZW9mKGhkclswXSkpOw0KKyB0bXAzMiA9IGNwdV90b19sZTMyKGxlbik7DQorIGlmICho ZHJbMF0gIT0gdG1wMzIpIHsNCisgbmRldi0+c3RhdHMud3JpdGVfZmFpbCsrOw0KKyBkZXZfZXJy KCZuZGV2LT5wY2lkZXYtPmRldiwNCisgIiVzOiBsZW5ndGggbm90IHdyaXR0ZW4gKCUwOHggIT0g JTA4eCkiLA0KKyBfX2Z1bmNfXywgdG1wMzIsIGhkclswXSk7DQorIHJldHVybiAtRUlPOw0KKyB9 DQorIH0NCisNCisgLyogdHJpZ2dlciB3cml0ZSAqLw0KKw0KKyBmc2xfb3V0bChuZGV2LA0KKyBG U0xfT0ZGU0VUX0RPT1JCRUxMX1dSX0NNRCwgTkZBU1RfSU5UX0hPU1RfV1JJVEVfUkVRVUVTVCk7 DQorDQorIG5kZXYtPnN0YXRzLndyaXRlX2Jsb2NrKys7DQorIG5kZXYtPnN0YXRzLndyaXRlX2J5 dGUgKz0gbGVuOw0KKw0KKyBkZXZfbm90aWNlKCZuZGV2LT5wY2lkZXYtPmRldiwgIiVzOiBkb25l IiwgX19mdW5jX18pOw0KKyByZXR1cm4gMDsNCit9DQorDQorLyoqIEZTTCBTYXdzaGFyayBUMTAy MiBkZXZpY2UgY29uZmlndXJhdGlvbi4gKi8NCitjb25zdCBzdHJ1Y3QgbmZwY21kX2RldiBmc2xf dDEwMjJfY21kZGV2ID0geyAibkNpcGhlciBuU2hpZWxkIFNvbG8gWEMiLA0KKyAgICAgICBQQ0lf VkVORE9SX0lEX0ZSRUVTQ0FMRSwNCisgICAgICAgUENJX0RFVklDRV9JRF9GUkVFU0NBTEVfVDEw MjIsDQorICAgICAgIFBDSV9WRU5ET1JfSURfTkNJUEhFUiwNCisgICAgICAgUENJX1NVQlNZU1RF TV9JRF9ORkFTVF9SRVYxLA0KKyAgICAgICB7IDAsIEZTTF9NRU1TSVpFLCAwLCAwLCAwLCAwIH0s DQorICAgICAgIE5GUF9DTURfRkxHX05FRURfTVNJLA0KKyAgICAgICBORkRFVl9JRl9QQ0lfUFVM TCwNCisgICAgICAgZnNsX2NyZWF0ZSwNCisgICAgICAgZnNsX2Rlc3Ryb3ksDQorICAgICAgIGZz bF9vcGVuLA0KKyAgICAgICBmc2xfY2xvc2UsDQorICAgICAgIGZzbF9pc3IsDQorICAgICAgIGZz bF93cml0ZSwNCisgICAgICAgZnNsX3JlYWQsDQorICAgICAgIGZzbF9lbnN1cmVfcmVhZGluZywN CisgICAgICAgZnNsX3NldF9jb250cm9sLA0KKyAgICAgICBmc2xfZ2V0X3N0YXR1cyB9Ow0KKy8q IGVuZCBvZiBmaWxlICovDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL25jaXBoZXIvZnNs LmggYi9kcml2ZXJzL3N0YWdpbmcvbmNpcGhlci9mc2wuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQN CmluZGV4IDAwMDAwMDAwMDAwMC4uZDBmYTMyNDk2MjE1DQotLS0gL2Rldi9udWxsDQorKysgYi9k cml2ZXJzL3N0YWdpbmcvbmNpcGhlci9mc2wuaA0KQEAgLTAsMCArMSwxMTcgQEANCisvKiBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsgKi8NCisvKg0KKyAqDQorICogSW50ZXJmYWNl IHRvIHRoZSBTb2xvIFhDJ3MgVDEwMjIgY29tbXVuaWNhdGlvbiBwcm9jZXNzb3INCisgKiBDb3B5 cmlnaHQgMjAxOSBuQ2lwaGVyIFNlY3VyaXR5IEx0ZA0KKyAqDQorICovDQorDQorI2lmbmRlZiBO RlBfRlNMX0gNCisjZGVmaW5lIE5GUF9GU0xfSA0KKw0KKyNpbmNsdWRlIDxsaW51eC9pby5oPg0K KyNpbmNsdWRlICJzb2xvLmgiDQorDQorLyogQWx3YXlzIHVzZSBhIGxvY2sgd2hlbiAnd2UnIGNh bGwgZnNsX3N0YXJ0ZWQgKi8NCisjZGVmaW5lIE5GUF9XSVRIX0xPQ0sgMQ0KKw0KKy8qIFBDSSBG U0wgZGVmaW5pdGlvbnMgKi8NCisNCisjaWZuZGVmIFBDSV9WRU5ET1JfSURfRlJFRVNDQUxFDQor I2RlZmluZSBQQ0lfVkVORE9SX0lEX0ZSRUVTQ0FMRSAweDE5NTcNCisjZW5kaWYNCisNCisjaWZu ZGVmIFBDSV9ERVZJQ0VfSURfRlJFRVNDQUxFX1QxMDIyDQorI2RlZmluZSBQQ0lfREVWSUNFX0lE X0ZSRUVTQ0FMRV9UMTAyMiAweDA4MmMNCisjZW5kaWYNCisNCisjaWZuZGVmIFBDSV9WRU5ET1Jf SURfTkNJUEhFUg0KKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9OQ0lQSEVSIDB4MDEwMA0KKyNlbmRp Zg0KKw0KKyNpZm5kZWYgUENJX1NVQlNZU1RFTV9JRF9ORkFTVF9SRVYxDQorI2RlZmluZSBQQ0lf U1VCU1lTVEVNX0lEX05GQVNUX1JFVjEgMHgwMTAwDQorI2VuZGlmDQorDQorI2RlZmluZSBGU0xf Q0ZHX1NFQ19DTURfU1RBVFVTIDB4NEMNCisjZGVmaW5lIEZTTF9DRkdfQ01EX01BU1RFUiAweDEw DQorDQorI2RlZmluZSBGU0xfTUVNQkFSIDENCisNCisvKiBORkFTVCBleHRlbmRlZCBQQ0kgcmVn aXN0ZXIgZGVmaW5pdGlvbnMgKi8NCisNCisjZGVmaW5lIE5GUENJX09GRlNFVF9KT0JTX0RTIDB4 MDAwMjAwMDANCisNCisvKiBJbnRlcnJ1cHRzIGZyb20gZGV2aWNlIHRvIGhvc3QgKi8NCisNCisj ZGVmaW5lIE5GQVNUX0lOVF9ERVZJQ0VfQ0xSIDB4MDAwMDAwMDANCisjZGVmaW5lIE5GQVNUX0lO VF9ERVZJQ0VfQ0hFQ0tfT0sgMHgwMDAwMDEwMA0KKyNkZWZpbmUgTkZBU1RfSU5UX0RFVklDRV9D SEVDS19GQUlMRUQgMHgwMDAwMDIwMA0KKyNkZWZpbmUgTkZBU1RfSU5UX0RFVklDRV9QT0xMIDB4 MDAwMDAzMDANCisjZGVmaW5lIE5GQVNUX0lOVF9ERVZJQ0VfUENJX0RPV04gMHgwMDAwMDQwMA0K Kw0KKy8qIEludGVycnVwdHMgZnJvbSBob3N0IHRvIGRldmljZSAqLw0KKw0KKyNkZWZpbmUgTkZB U1RfSU5UX0hPU1RfQ0xSIDB4MDAwMDAwMDANCisNCisvKiBQQ0kgRlNMIHJlZ2lzdGVyIGRlZmlu aXRpb25zICovDQorDQorI2RlZmluZSBGU0xfTEVOR1RIIE5GUENJX1JBTV9NSU5TSVpFX0pPQlMN CisjZGVmaW5lIEZTTF9NRU1TSVpFIE5GUENJX1JBTV9NSU5TSVpFX0tFUk4NCisNCisjZGVmaW5l IEZTTF9ET09SQkVMTF9MT0NBVElPTiAoRlNMX01FTVNJWkUgLSAweDEwMCkNCisNCisjZGVmaW5l IEZTTF9PRkZTRVRfRE9PUkJFTExfUkRfQ01EIDB4MDB1DQorI2RlZmluZSBGU0xfT0ZGU0VUX0RP T1JCRUxMX1dSX0NNRCAweDA0dQ0KKyNkZWZpbmUgRlNMX09GRlNFVF9ET09SQkVMTF9SRF9TVEFU VVMgMHgwOHUNCisjZGVmaW5lIEZTTF9PRkZTRVRfRE9PUkJFTExfV1JfU1RBVFVTIDB4MEN1DQor I2RlZmluZSBGU0xfT0ZGU0VUX0RPT1JCRUxMX0NTX1NUQVRVUyAweDEwdQ0KKw0KKyNkZWZpbmUg RlNMX09GRlNFVF9SRUdJU1RFUl9DT05UUk9MIDB4MjB1DQorI2RlZmluZSBGU0xfT0ZGU0VUX1JF R0lTVEVSX1NUQVRVUyAweDI0dQ0KKyNkZWZpbmUgRlNMX09GRlNFVF9SRUdJU1RFUl9FUlJPUl9M TyAweDI4dQ0KKyNkZWZpbmUgRlNMX09GRlNFVF9SRUdJU1RFUl9FUlJPUl9ISSAweDJDdQ0KKyNk ZWZpbmUgRlNMX09GRlNFVF9ET09SQkVMTF9QT0xMSU5HIDB4MzB1DQorDQorI2RlZmluZSBGU0xf TUFHSUMgMHgxMjM0NTY3OHUNCisNCisvKiogTW9uaXRvciBmaXJtd2FyZSBzdXBwb3J0cyBNT0kg Y29udHJvbCBhbmQgZXJyb3IgcmVwb3J0aW5nICovDQorI2RlZmluZSBORkRFVl9TVEFUVVNfTU9O SVRPUl9NT0kgMHgwMDAxDQorDQorLyoqIEFwcGxpY2F0aW9uIGZpcm13YXJlIHN1cHBvcnRzIE1P SSBjb250cm9sIGFuZCBlcnJvciByZXBvcnRpbmcgKi8NCisjZGVmaW5lIE5GREVWX1NUQVRVU19B UFBMSUNBVElPTl9NT0kgMHgwMDAyDQorDQorLyoqIEFwcGxpY2F0aW9uIGZpcm13YXJlIHJ1bm5p bmcgYW5kIHN1cHBvcnRzIGVycm9yIHJlcG9ydGluZyAqLw0KKyNkZWZpbmUgTkZERVZfU1RBVFVT X0FQUExJQ0FUSU9OX1JVTk5JTkcgMHgwMDA0DQorDQorLyoqDQorICogV3JpdGVzIGEgMzIgYml0 IHdvcmQgYWNyb3NzIFBDSSB0byB0aGUgRlNMIGNhcmQuDQorICoNCisgKiBAcGFyYW0gbmRldiBj b21tYW5kIGRldmljZS4NCisgKiBAcGFyYW0gYmFyIGJhc2UgYWRkcmVzcyByZWdpb24gaWQuDQor ICogQHBhcmFtIG9mZnNldCBvZmZzZXQgaW4gYnl0ZXMgZnJvbSBiYXNlIGFkZHJlc3MuDQorICog QHBhcmFtIHZhbHVlIDMyIGJpdCB2YWx1ZSBiZWluZyB3cml0dGVuLg0KKyAqLw0KK3N0YXRpYyBp bmxpbmUgdm9pZCBmc2xfb3V0bChzdHJ1Y3QgbmZwX2RldiAqbmRldiwgaW50IG9mZnNldCwgdTMy IHZhbHVlKQ0KK3sNCisgaW93cml0ZTMyKGNwdV90b19sZTMyKHZhbHVlKSwgbmRldi0+YmFyW25k ZXYtPmFjdGl2ZV9iYXJdICsNCisgICBGU0xfRE9PUkJFTExfTE9DQVRJT04gKyBvZmZzZXQpOw0K K30NCisNCisvKioNCisgKiBSZWFkcyBhIDMyIGJpdCB3b3JkIGFjcm9zcyBQQ0kgZnJvbSB0aGUg RlNMIGNhcmQuDQorICoNCisgKiBAcGFyYW0gbmRldiBjb21tYW5kIGRldmljZS4NCisgKiBAcGFy YW0gYmFyIGJhc2UgYWRkcmVzcyByZWdpb24gaWQuDQorICogQHBhcmFtIG9mZnNldCBvZmZzZXQg aW4gYnl0ZXMgZnJvbSBiYXNlIGFkZHJlc3MuDQorICogQHJldHVybnMgMzIgYml0IHZhbHVlLg0K KyAqLw0KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgZnNsX2lubChzdHJ1Y3QgbmZwX2RldiAqbmRl diwgaW50IG9mZnNldCkNCit7DQorIHJldHVybiBsZTMyX3RvX2NwdShpb3JlYWQzMihuZGV2LT5i YXJbbmRldi0+YWN0aXZlX2Jhcl0NCisgICAgKyBGU0xfRE9PUkJFTExfTE9DQVRJT04gKyBvZmZz ZXQpKTsNCit9DQorDQorI2VuZGlmIC8qIE5GUF9GU0xfSCAqLw0KKw0KKy8qIGVuZCBvZiBmaWxl ICovDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL25jaXBoZXIvaG9zdGlmLmMgYi9kcml2 ZXJzL3N0YWdpbmcvbmNpcGhlci9ob3N0aWYuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4 IDAwMDAwMDAwMDAwMC4uMTU2MmMwZTJmZTA3DQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJz L3N0YWdpbmcvbmNpcGhlci9ob3N0aWYuYw0KQEAgLTAsMCArMSwxNTIxIEBADQorLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArDQorLyoNCisgKg0KKyAqIGhvc3RpZi5jOiBuQ2lw aGVyIFBDSSBIU00gbGludXggaG9zdCBpbnRlcmZhY2UNCisgKiBDb3B5cmlnaHQgMjAxOSBuQ2lw aGVyIFNlY3VyaXR5IEx0ZA0KKyAqDQorICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4N CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0K KyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5o Pg0KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4NCisNCisjaW5jbHVkZSAic29sby5oIg0KKyNp bmNsdWRlICJpMjE1NTUuaCINCisjaW5jbHVkZSAiZnNsLmgiDQorDQorLyogbGltaXRzICYgc2l6 ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQor I2RlZmluZSBORlBfUkVBRF9NQVggKDggKiAxMDI0KQ0KKyNkZWZpbmUgTkZQX1dSSVRFX01BWCAo OCAqIDEwMjQpDQorI2RlZmluZSBORlBfUkVBREJVRl9TSVpFIChORlBfUkVBRF9NQVggKyA4KQ0K KyNkZWZpbmUgTkZQX1dSSVRFQlVGX1NJWkUgKE5GUF9XUklURV9NQVggKyA4KQ0KKyNkZWZpbmUg TkZQX01BWERFViAxNg0KKw0KKy8qIG90aGVyIG9wZXJhdGluZyBjb25zdGFudHMgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKyNkZWZpbmUgTkZQX1RJTUVPVVRfU0VD IDIwDQorI2RlZmluZSBORlBfRE1BX05CWVRFU19PRkZTRVQgKDQpDQorI2RlZmluZSBORlBfRE1B X0FERFJFU1NfT0ZGU0VUICg4KQ0KKyNkZWZpbmUgTkZQX0RSVk5BTUUgIm5DaXBoZXIgbkZhc3Qg UENJIGRyaXZlciINCisjZGVmaW5lIE5GUF9USU1FT1VUICgoTkZQX1RJTUVPVVRfU0VDKSAqIEha KQ0KKw0KKy8qIEludGVycHJldGF0aW9uIG9mIHRoZSBiaXRzIG9mIHN0cnVjdCBuZnBfZGV2LnJk X291dHN0YW5kaW5nICovDQorI2RlZmluZSBXQUlUX0JJVCAgMCAvKiB3YWl0aW5nIGZvciBkYXRh ICovDQorI2RlZmluZSBDTVBMVF9CSVQgMSAvKiBjb21wbGV0aW5nIGEgcmVhZCAoZ290IGRhdGEg b3IgdGltaW5nIG91dCkgKi8NCisNCisvKiBVc2VkIHRvIGRldGVybWluZSB3aGljaCBpbnN0YWxs ZWQgbW9kdWxlIHdlJ3JlIGxvb2tpbmcgYXQNCisgKiBmcm9tIGl0cyBtaW5vciBkZXZpY2UgbnVt YmVyDQorICovDQorI2RlZmluZSBJTk9ERV9GUk9NX0ZJTEUoZmlsZSkgKChmaWxlKS0+Zl9wYXRo LmRlbnRyeS0+ZF9pbm9kZSkNCisNCisvKiBNYWpvciBkZXZpY2UgdHlwZQ0KKyAqICJuQ2lwaGVy IG5GYXN0IFBDSSBjcnlwdG8gYWNjZWxlcmF0b3IiIGluDQorICogaHR0cHM6Ly93d3cua2VybmVs Lm9yZy9kb2MvaHRtbC92NC4xMS9hZG1pbi1ndWlkZS9kZXZpY2VzLmh0bWwNCisgKi8NCisjZGVm aW5lIE5GUF9NQUpPUiAxNzYgLyogKi8NCisNCisvKiBkZXZpY2UgbGlzdCAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCitzdGF0aWMgc3Ry dWN0IG5mcF9kZXYgKm5mcF9kZXZfbGlzdFtORlBfTUFYREVWXTsNCitzdGF0aWMgaW50IG5mcF9u dW1fZGV2aWNlczsNCitzdGF0aWMgc3RydWN0IGNsYXNzICpuZnBfY2xhc3M7DQorLyohIEB9ICov DQorDQorLyoqDQorICogQGFkZHRvZ3JvdXAgbW9kcGFyYW1zDQorICogTW9kdWxlIHN0cnVjdHVy ZXMuDQorICogQHsNCisgKi8NCisNCisvKioNCisgKiBOU0hJRUxEX1NPTE8gbW9kdWxlIGludGVy ZmFjZSB2ZXJzaW9uIHBhcmFtZXRlci4NCisgKg0KKyAqIFRoaXMgdmFsdWUgY2FuIGJlIG92ZXJy aWRkZW4gd2hlbiB0aGUgbW9kdWxlIGlzIGxvYWRlZCwgZm9yIGV4YW1wbGU6DQorICoNCisgKiAg IGluc21vZCBuc2hpZWxkX3NvbG8ua28gbmZwX2lmdmVycz08bj4NCisgKg0KKyAqIHdoZXJlIG4g PSAwIGFsbG93cyBhbnkgc3VwcG9ydGVkIGludGVyZmFjZSwNCisgKiAgICAgICBuID4gMCBhbGxv d3Mgb25seSBpbnRlcmZhY2UgdmVyc2lvbnMgPD0gbi4NCisgKiBTZWUgbmZkZXYtY29tbW9uLmgg Zm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgaW50ZXJmYWNlIHZlcnNpb25zLg0KKyAqIFNwZWNpZmlj IGNhcmQgbW9kZWxzIG1heSBub3Qgc3VwcG9ydCBhbGwgaW50ZXJmYWNlIHZlcnNpb25zLg0KKyAq Lw0KK3N0YXRpYyBpbnQgbmZwX2lmdmVyczsNCisNCitNT0RVTEVfQVVUSE9SKCJuQ2lwaGVyIik7 DQorTU9EVUxFX0RFU0NSSVBUSU9OKCJuQ2lwaGVyIFBDSSBIU00gZHJpdmVyIik7DQorbW9kdWxl X3BhcmFtKG5mcF9pZnZlcnMsIGludCwgMDQ0NCk7DQorTU9EVUxFX1BBUk1fREVTQyhuZnBfaWZ2 ZXJzLCAibWF4aW11bSBpbnRlcmZhY2UgdmVyc2lvbiAoMS0yKSwgb3IgYW55ICgwKSIpOw0KK01P RFVMRV9MSUNFTlNFKCJHUEwiKTsNCisNCisvKiogQH0gKi8NCisNCisvKioNCisgKiBAYWRkdG9n cm91cCBmb3BzDQorICogTlNISUVMRF9TT0xPIGNoYXJhY3RlciBkZXZpY2UgZmlsZSBvcGVyYXRp b25zLg0KKyAqIEB7DQorICovDQorDQorLyoqDQorICogUG9sbHMgYW4gTlNISUVMRCBTT0xPIGRl dmljZS4NCisgKg0KKyAqIFRoZSBrZXJuZWwgY2FsbHMgdGhpcyBmdW5jdGlvbiB3aGVuIGEgdXNl ciB0cmllcyB0byBwb2xsIGFuIE5TSElFTEQgU09MTw0KKyAqIGRldmljZS4gVGhlIGZ1bmN0aW9u IHJldHVybnMgYSBiaXQgbWFzayB3aGljaCBpbmRpY2F0ZXMgaWYgdGhlIGRldmljZSBpcw0KKyAq IGltbWVkaWF0ZWx5IHJlYWRhYmxlIG9yIHdyaXRhYmxlLiAgQSByZWFkYWJsZSBkZXZpY2Ugd2ls bCBzZXQNCisgKiAoUE9MTElOIHwgUE9MTFJETk9STSkuIEEgd3JpdGFibGUgZGV2aWNlIHdpbGwg c2V0IChQT0xMT1VUIHwgUE9MTFdSTk9STSkuDQorICoNCisgKiBAcGFyYW0gZmlsZXAgZGV2aWNl IGZpbGUgcG9pbnRlci4NCisgKiBAcGFyYW0gd2FpdCAgcG9sbCB0YWJsZSBwb2ludGVyLg0KKyAq IEByZXR1cm5zIG1hc2sgaW5kaWNhdGluZyBpZiByZWFkYWJsZSBhbmQvb3Igd3JpdGFibGUuDQor ICovDQorc3RhdGljIHUzMiBuZnBfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAq d2FpdCkNCit7DQorIHN0cnVjdCBuZnBfZGV2ICpuZGV2Ow0KKyB1MzIgbWFzayA9IDA7DQorIGlu dCBtaW5vciA9IE1JTk9SKElOT0RFX0ZST01fRklMRShmaWxlKS0+aV9yZGV2KTsNCisNCisgaWYg KG1pbm9yID49IE5GUF9NQVhERVYpIHsNCisgcHJfZXJyKCIlczogbWlub3Igb3V0IG9mIHJhbmdl LiIsIF9fZnVuY19fKTsNCisgcmV0dXJuIC1FTk9ERVY7DQorIH0NCisNCisgbmRldiA9IG5mcF9k ZXZfbGlzdFttaW5vcl07DQorIGlmICghbmRldikgew0KKyBwcl9lcnIoIiVzOiBlcnJvcjogbm8g ZGV2aWNlIiwgX19mdW5jX18pOw0KKyByZXR1cm4gLUVOT0RFVjsNCisgfQ0KKw0KKyBkZXZfZGJn KCZuZGV2LT5wY2lkZXYtPmRldiwgIiVzOiBlbnRlcmVkIiwgX19mdW5jX18pOw0KKw0KKyAvKiBm aW5kIG5kZXYgZnJvbSBtaW5vciAqLw0KKw0KKyBwb2xsX3dhaXQoZmlsZSwgJm5kZXYtPndyX3F1 ZXVlLCB3YWl0KTsNCisgcG9sbF93YWl0KGZpbGUsICZuZGV2LT5yZF9xdWV1ZSwgd2FpdCk7DQor DQorIGlmICh0ZXN0X2JpdCgwLCAmbmRldi0+d3JfcmVhZHkpKQ0KKyBtYXNrIHw9IFBPTExPVVQg fCBQT0xMV1JOT1JNOyAvKiB3cml0ZWFibGUgKi8NCisgaWYgKHRlc3RfYml0KDAsICZuZGV2LT5y ZF9yZWFkeSkpDQorIG1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsgLyogcmVhZGFibGUgKi8N CisNCisgZGV2X25vdGljZSgmbmRldi0+cGNpZGV2LT5kZXYsICIlczogZGV2aWNlIGlzICVzd3Jp dGFibGUsICVzcmVhZGFibGUiLA0KKyAgICBfX2Z1bmNfXywNCisgbWFzayAmIFBPTExPVVQgPyAi IiA6ICJub3QgIiwgbWFzayAmIFBPTExJTiA/ICIiIDogIm5vdCAiKTsNCisNCisgcmV0dXJuIG1h c2s7DQorfQ0KKw0KK3ZvaWQgbmZwX3dyaXRlX2NvbXBsZXRlKHN0cnVjdCBuZnBfZGV2ICpuZGV2 LCBpbnQgb2spDQorew0KKyAvKiBjaGVjayBmb3IgZGV2aWNlICovDQorIGlmICghbmRldikgew0K KyBwcl9lcnIoIiVzOiBlcnJvcjogbm8gZGV2aWNlIiwgX19mdW5jX18pOw0KKyByZXR1cm47DQor IH0NCisNCisgZGV2X2RiZygmbmRldi0+cGNpZGV2LT5kZXYsICIlczogZW50ZXJlZCIsIF9fZnVu Y19fKTsNCisNCisgLyogY291bGQgYmUgZXhlY3V0ZWQgc2ltdWx0YW5lb3VzbHkgYnkgbW9yZSB0 aGFuIG9uZSB0aHJlYWQgLQ0KKyAqIGUuZy4gZnJvbSB0aGUgd3JpdGUgaXNyIGFuZCBmcm9tIHRo ZSBuZnBfd3JpdGUvdGltZW91dA0KKyAqIHdlIGRvbid0IHdhbnQgdGhhdCB0byBoYXBwZW4uDQor ICovDQorIGlmICh0ZXN0X2FuZF9zZXRfYml0KENNUExUX0JJVCwgJm5kZXYtPndyX291dHN0YW5k aW5nKSkNCisgcmV0dXJuOw0KKw0KKyBpZiAoIXRlc3RfYml0KFdBSVRfQklULCAmbmRldi0+d3Jf b3V0c3RhbmRpbmcpKSB7DQorIC8qIHdlIGNhbiBvbmx5IGdldCBoZXJlIGlmIHRoZSB3cml0ZSBo YXMgYWxyZWFkeQ0KKyAqIGJlZW4gY29tcGxldGVkDQorICovDQorIGRldl9lcnIoJm5kZXYtPnBj aWRldi0+ZGV2LA0KKyAiJXM6IG5vIHdyaXRlIG91dHN0YW5kaW5nIHRvIGNvbXBsZXRlOyBpZ25v cmluZyBjb21wbGV0aW9uIiwNCisgX19mdW5jX18pOw0KKyBjbGVhcl9iaXQoQ01QTFRfQklULCAm bmRldi0+d3Jfb3V0c3RhbmRpbmcpOw0KKyByZXR1cm47DQorIH0NCisNCisgLyogY29tcGxldGUg d3JpdGUgYnkgd2FraW5nIHdhaXRpbmcgcHJvY2Vzc2VzICovDQorIG5kZXYtPndyX29rID0gb2s7 DQorDQorIGRldl9ub3RpY2UoJm5kZXYtPnBjaWRldi0+ZGV2LCAiJXM6IHdyaXRlIGNvbXBsZXRl ZCAlc29rYXkiLA0KKyAgICBfX2Z1bmNfXywgb2sgPyAiIiA6ICJub3QgIik7DQorDQorIC8qIG1h a2Ugc3VyZSB0aGF0IHdyaXRlIGlzIGNvbXBsZXRlIGJlZm9yZSB3ZSBjbGVhciB3cl9vdXRzdGFu ZGluZyAqLw0KKyBzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsNCisgY2xlYXJfYml0KENNUExUX0JJ VCwgJm5kZXYtPndyX291dHN0YW5kaW5nKTsNCisgY2xlYXJfYml0KFdBSVRfQklULCAmbmRldi0+ d3Jfb3V0c3RhbmRpbmcpOw0KKw0KKyAvKiB3YWtlIHVwIGFueW9uZSB3YWl0aW5nICovDQorDQor IHdha2VfdXBfYWxsKCZuZGV2LT53cl9xdWV1ZSk7DQorfQ0KKw0KKyNkZWZpbmUgQ1JFQVRFX1RS QUNFX1BPSU5UUw0KKw0KKy8qKg0KKyAqIFdyaXRlcyB0byBhbiBOU0hJRUxEIFNPTE8gZGV2aWNl Lg0KKyAqDQorICogRGF0YSBpbiB0aGUgdXNlciBzcGFjZSBidWZmZXIgaXMgd3JpdHRlbiB0byB0 aGUgTlNISUVMRCBTT0xPIGRldmljZS4gQW55DQorICogcHJldmlvdXMgZGF0YSBpcyBvdmVyd3Jp dHRlbi4gQW4gZXJyb3IgaXMgcmV0dXJuZWQgaWYgbm90IGFsbA0KKyAqIGJ5dGVzIGFyZSB3cml0 dGVuIGZyb20gdGhlIHVzZXIgc3BhY2UgYnVmZmVyLg0KKyAqDQorICogQHBhcmFtIGZpbGUgIGRl dmljZSBmaWxlIHBvaW50ZXIuDQorICogQHBhcmFtIGJ1ZiAgIHBvaW50ZXIgdG8gYSB1c2VyIHNw YWNlIGJ1ZmZlci4NCisgKiBAcGFyYW0gY291bnQgc2l6ZSBvZiB1c2VyIHNwYWNlIGJ1ZmZlci4N CisgKiBAcGFyYW0gb2ZmICAgb2Zmc2V0IHBvc2l0aW9uIChpZ25vcmVkKS4NCisgKiBAcmV0dXJu cyBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gb3IgYSBuZWdhdGl2ZSB2YWx1ZSBpZiBh biBlcnJvUg0KKyAqIG9jY3VycmVkLg0KKyAqLw0KK3N0YXRpYyBzc2l6ZV90IG5mcF93cml0ZShz dHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBjb25zdCBfX3VzZXIgKmJ1ZiwNCisgc2l6ZV90IGNvdW50 LCBsb2ZmX3QgKm9mZikNCit7DQorIHN0cnVjdCBuZnBfZGV2ICpuZGV2Ow0KKyB1MzIgYWRkcjsN CisgaW50IG5ieXRlczsNCisgaW50IG1pbm9yOw0KKyBpbnQgbmU7DQorDQorIC8qIGZpbmQgbmRl diBmcm9tIG1pbm9yICovDQorIG1pbm9yID0gTUlOT1IoSU5PREVfRlJPTV9GSUxFKGZpbGUpLT5p X3JkZXYpOw0KKyBpZiAobWlub3IgPj0gTkZQX01BWERFVikgew0KKyBwcl9lcnIoIiVzOiBtaW5v ciBvdXQgb2YgcmFuZ2UuIiwgX19mdW5jX18pOw0KKyByZXR1cm4gLUVOT0RFVjsNCisgfQ0KKw0K KyBuZGV2ID0gbmZwX2Rldl9saXN0W21pbm9yXTsNCisgaWYgKCFuZGV2KSB7DQorIHByX2Vycigi JXM6IGVycm9yOiBubyBkZXZpY2UiLCBfX2Z1bmNfXyk7DQorIHJldHVybiAtRU5PREVWOw0KKyB9 DQorDQorIGRldl9kYmcoJm5kZXYtPnBjaWRldi0+ZGV2LCAiJXM6IGVudGVyZWQiLCBfX2Z1bmNf Xyk7DQorDQorIC8qIGNoZWNrIG1heCBsZW5ndGggcmVxdWVzdGVkICovDQorIGlmIChjb3VudCA8 PSAwIHx8IE5GUF9XUklURV9NQVggPCBjb3VudCkgew0KKyBkZXZfZXJyKCZuZGV2LT5wY2lkZXYt PmRldiwNCisgIiVzOiBpbnZhbGlkIHJlcXVlc3RlZCB3cml0ZSBsZW5ndGggJWx1IiwNCisgX19m dW5jX18sIGNvdW50KTsNCisgcmV0dXJuIC1FSU5WQUw7DQorIH0NCisNCisgLyogY2hlY2sgaWYg Y2FsbGVkIGJlZm9yZSByZWFkeSAqLw0KKyBpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdCgwLCAmbmRl di0+d3JfcmVhZHkpKSB7DQorIGRldl9lcnIoJm5kZXYtPnBjaWRldi0+ZGV2LCAiJXM6IHdyaXRl IGNhbGxlZCB3aGVuIG5vdCByZWFkeS4iLA0KKyBfX2Z1bmNfXyk7DQorIHJldHVybiAtRU5YSU87 DQorIH0NCisgc2V0X2JpdChXQUlUX0JJVCwgJm5kZXYtPndyX291dHN0YW5kaW5nKTsNCisNCisg ZGV2X25vdGljZSgmbmRldi0+cGNpZGV2LT5kZXYsICIlczogd3JpdGluZyAlbGQgYnl0ZXMiLA0K KyAgICBfX2Z1bmNfXywgY291bnQpOw0KKw0KKyBhZGRyID0gMDsNCisgaWYgKG5kZXYtPmlmdmVy cyA+PSBORkRFVl9JRl9QQ0lfUFVMTCkgew0KKyBkZXZfbm90aWNlKCZuZGV2LT5wY2lkZXYtPmRl diwNCisgICAgIiVzOiBjb3B5aW5nICVsdSBieXRlcyB0byBkbWEgYnVmZmVyIiwNCisgICAgX19m dW5jX18sIGNvdW50KTsNCisgYWRkciA9IG5kZXYtPndyaXRlX2RtYTsNCisgbmJ5dGVzID0gY3B1 X3RvX2xlMzIoY291bnQpOw0KKyAqKHUzMiAqKShuZGV2LT53cml0ZV9idWYgKyBORlBfRE1BX05C WVRFU19PRkZTRVQpID0gbmJ5dGVzOw0KKyBpZiAoMCAhPQ0KKyAgICAgY29weV9mcm9tX3VzZXIo bmRldi0+d3JpdGVfYnVmICsgTkZQX0RNQV9BRERSRVNTX09GRlNFVCwNCisgICAgYnVmLCBjb3Vu dCkpIHsNCisgY2xlYXJfYml0KFdBSVRfQklULCAmbmRldi0+d3Jfb3V0c3RhbmRpbmcpOw0KKyBz ZXRfYml0KDAsICZuZGV2LT53cl9yZWFkeSk7DQorIGRldl9lcnIoJm5kZXYtPnBjaWRldi0+ZGV2 LA0KKyAiJXM6IGNvcHkgZnJvbSB1c2VyIHNwYWNlIGZhaWxlZCIsIF9fZnVuY19fKTsNCisgcmV0 dXJuIC1FSU87DQorIH0NCisgfQ0KKw0KKyBuZSA9IG5kZXYtPmNtZGRldi0+d3JpdGVfYmxvY2so YWRkciwgYnVmLCBjb3VudCwgbmRldi0+Y21kY3R4KTsNCisgaWYgKG5lICE9IDApIHsNCisgbmZw X3dyaXRlX2NvbXBsZXRlKG5kZXYsIDApOw0KKyBpZiAobmUgIT0gLUVBR0FJTikNCisgZGV2X2Vy cigmbmRldi0+cGNpZGV2LT5kZXYsDQorICIlczogd3JpdGVfYmxvY2sgZmFpbGVkIiwgX19mdW5j X18pOw0KKyB9DQorDQorIHdoaWxlICh0ZXN0X2JpdChXQUlUX0JJVCwgJm5kZXYtPndyX291dHN0 YW5kaW5nKSkgew0KKyBpZiAoIXdhaXRfZXZlbnRfdGltZW91dChuZGV2LT53cl9xdWV1ZSwNCisg dGVzdF9iaXQoV0FJVF9CSVQsDQorICZuZGV2LT53cl9vdXRzdGFuZGluZykgPT0gMCwNCisgTkZQ X1RJTUVPVVQpKSB7DQorIG5mcF93cml0ZV9jb21wbGV0ZShuZGV2LCAwKTsNCisgc2V0X2JpdCgw LCAmbmRldi0+d3JfcmVhZHkpOw0KKyBkZXZfZXJyKCZuZGV2LT5wY2lkZXYtPmRldiwNCisgIiVz OiBtb2R1bGUgdGltZWQgb3V0IiwgX19mdW5jX18pOw0KKyByZXR1cm4gLUVOWElPOw0KKyB9DQor IGlmICh0ZXN0X2JpdChXQUlUX0JJVCwgJm5kZXYtPndyX291dHN0YW5kaW5nKSkgew0KKyBkZXZf ZXJyKCZuZGV2LT5wY2lkZXYtPmRldiwNCisgIiVzOiBoYW5kbGluZyBzcHVyaW91cyB3YWtlLXVw IiwgX19mdW5jX18pOw0KKyB9DQorIH0NCisgc2V0X2JpdCgwLCAmbmRldi0+d3JfcmVhZHkpOw0K Kw0KKyBkZXZfd2FybigmbmRldi0+cGNpZGV2LT5kZXYsICIlczogcmV0dXJuaW5nICVsZC4iLCBf X2Z1bmNfXywNCisgbmRldi0+d3Jfb2sgPyBjb3VudCA6IC1FSU8pOw0KKw0KKyBpZiAoIW5kZXYt PndyX29rKSB7DQorIGRldl9lcnIoJm5kZXYtPnBjaWRldi0+ZGV2LA0KKyAiJXM6IGRldmljZSB3 cml0ZSBmYWlsZWQiLCBfX2Z1bmNfXyk7DQorIHJldHVybiAtRUlPOw0KKyB9DQorDQorIGRldl93 YXJuKCZuZGV2LT5wY2lkZXYtPmRldiwNCisgIiVzOiB3cm90ZSAlbGQgYnl0ZXMgKCVzKSIsIF9f ZnVuY19fLCBjb3VudCwNCisgbmRldi0+aWZ2ZXJzID49IE5GREVWX0lGX1BDSV9QVUxMID8gImRt YSIgOiAic3RkIik7DQorIHJldHVybiBjb3VudDsNCit9DQorDQordm9pZCBuZnBfcmVhZF9jb21w bGV0ZShzdHJ1Y3QgbmZwX2RldiAqbmRldiwgaW50IG9rKQ0KK3sNCisgLyogY2hlY2sgZm9yIGRl dmljZSAqLw0KKyBpZiAoIW5kZXYpIHsNCisgcHJfZXJyKCIlczogZXJyb3I6IG5vIGRldmljZSIs IF9fZnVuY19fKTsNCisgcmV0dXJuOw0KKyB9DQorDQorIGRldl9kYmcoJm5kZXYtPnBjaWRldi0+ ZGV2LCAiJXM6IGVudGVyZWQiLCBfX2Z1bmNfXyk7DQorDQorIC8qIGNvdWxkIGJlIGV4ZWN1dGVk IHNpbXVsdGFuZW91c2x5IGJ5IG1vcmUgdGhhbiBvbmUgdGhyZWFkIC0NCisgKiBlLmcuIGZyb20g dGhlIHJlYWQgaXNyIGFuZCBmcm9tIHRoZSB0aW1lb3V0DQorICogd2UgZG9uJ3Qgd2FudCB0aGF0 IHRvIGhhcHBlbi4NCisgKi8NCisgaWYgKHRlc3RfYW5kX3NldF9iaXQoQ01QTFRfQklULCAmbmRl di0+cmRfb3V0c3RhbmRpbmcpKQ0KKyByZXR1cm47DQorDQorIGlmICghdGVzdF9iaXQoV0FJVF9C SVQsICZuZGV2LT5yZF9vdXRzdGFuZGluZykpIHsNCisgLyogd2UgY2FuIG9ubHkgZ2V0IGhlcmUg aWYgdGhlIHJlYWQgaGFzIGFscmVhZHkgYmVlbiBjb21wbGV0ZWQNCisgKiBhbmQgbm8gbmV3IEVO U1VSRVJFQURJTkcgcmVxdWVzdCBoYXMgYmVlbiByZWNlaXZlZCBzaW5jZQ0KKyAqLw0KKyBkZXZf ZXJyKCZuZGV2LT5wY2lkZXYtPmRldiwNCisgIiVzOiBubyByZWFkIG91dHN0YW5kaW5nIHRvIGNv bXBsZXRlOyBpZ25vcmluZyBjb21wbGV0aW9uIiwNCisgX19mdW5jX18pOw0KKyBjbGVhcl9iaXQo Q01QTFRfQklULCAmbmRldi0+cmRfb3V0c3RhbmRpbmcpOw0KKyByZXR1cm47DQorIH0NCisNCisg LyogaW4gY2FzZSB0aGUgdGltZXIgaGFzIG5vdCBleHBpcmVkICovDQorIGRlbF90aW1lcigmbmRl di0+cmRfdGltZXIpOw0KKw0KKyBuZGV2LT5yZF9vayA9IG9rOw0KKyBzZXRfYml0KDAsICZuZGV2 LT5yZF9yZWFkeSk7DQorDQorIGRldl9ub3RpY2UoJm5kZXYtPnBjaWRldi0+ZGV2LCAiJXM6IHJl YWQgY29tcGxldGVkICVzb2theSIsDQorICAgIF9fZnVuY19fLCBvayA/ICIiIDogIm5vdCAiKTsN CisNCisgLyogbWFrZSBzdXJlIHRoYXQgcmRfcmVhZHkgaXMgc2V0IGJlZm9yZSB3ZSBjbGVhciBy ZF9vdXRzdGFuZGluZyAqLw0KKyBzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsNCisgY2xlYXJfYml0 KENNUExUX0JJVCwgJm5kZXYtPnJkX291dHN0YW5kaW5nKTsNCisgY2xlYXJfYml0KFdBSVRfQklU LCAmbmRldi0+cmRfb3V0c3RhbmRpbmcpOw0KKw0KKyAvKiB3YWtlIHVwIGFueW9uZSB3YWl0aW5n ICovDQorDQorIHdha2VfdXBfYWxsKCZuZGV2LT5yZF9xdWV1ZSk7DQorfQ0KKw0KK3N0YXRpYyB2 b2lkIG5mcF9yZWFkX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpDQorew0KKyBzdHJ1Y3Qg bmZwX2RldiAqbmRldiA9IGZyb21fdGltZXIobmRldiwgdCwgcmRfdGltZXIpOw0KKw0KKyAvKiBj aGVjayBmb3IgZGV2aWNlICovDQorIGlmICghbmRldikgew0KKyBwcl9lcnIoIiVzOiBlcnJvcjog bm8gZGV2aWNlIiwgX19mdW5jX18pOw0KKyByZXR1cm47DQorIH0NCisNCisgZGV2X2RiZygmbmRl di0+cGNpZGV2LT5kZXYsICIlczogZW50ZXJlZCIsIF9fZnVuY19fKTsNCisNCisgbmZwX3JlYWRf Y29tcGxldGUobmRldiwgMCk7DQorfQ0KKw0KKy8qKg0KKyAqIFJlYWRzIGZyb20gYW4gTlNISUVM RCBTT0xPIGRldmljZS4NCisgKg0KKyAqIERhdGEgaXMgcmVhZCBmcm9tIHRoZSBOU0hJRUxEIFNP TE8gZGV2aWNlIGludG8gdGhlIHVzZXIgc3BhY2UgYnVmZmVyLg0KKyAqIFRoZSByZWFkIHJlbW92 ZXMgdGhlIGRhdGEgZnJvbSB0aGUgZGV2aWNlLiBBbiBlcnJvciBpcyByZXR1cm5lZCBpcyBub3QN CisgKiBhbGwgdGhlIGJ5dGVzIGFyZSByZWFkIGZyb20gdGhlIHVzZXIgc3BhY2UgYnVmZmVyLg0K KyAqDQorICogQHBhcmFtIGZpbGUgIGRldmljZSBmaWxlIHBvaW50ZXIuDQorICogQHBhcmFtIGJ1 ZiAgIHBvaW50ZXIgdG8gYSB1c2VyIHNwYWNlIGJ1ZmZlci4NCisgKiBAcGFyYW0gY291bnQgbWF4 aW11bSBzaXplIG9mIHVzZXIgc3BhY2UgYnVmZmVyLg0KKyAqIEBwYXJhbSBvZmYgICBvZmZzZXQg cG9zaXRpb24gKGlnbm9yZWQpLg0KKyAqIEByZXR1cm5zIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMg cmVhZCBvciBhIG5lZ2F0aXZlDQorICogdmFsdWUgaWYgYW4gZXJyb3Igb2NjdXJyZWQuDQorICov DQorc3RhdGljIHNzaXplX3QgbmZwX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2Vy ICpidWYsIHNpemVfdCBjb3VudCwNCisgbG9mZl90ICpvZmYpDQorew0KKyBzdHJ1Y3QgbmZwX2Rl diAqbmRldjsNCisgaW50IG5ieXRlczsNCisgaW50IG1pbm9yOw0KKyBpbnQgbmU7DQorDQorIG1p bm9yID0gTUlOT1IoSU5PREVfRlJPTV9GSUxFKGZpbGUpLT5pX3JkZXYpOw0KKyBpZiAobWlub3Ig Pj0gTkZQX01BWERFVikgew0KKyBwcl9lcnIoIiVzOiBtaW5vciBvdXQgb2YgcmFuZ2UuIiwgX19m dW5jX18pOw0KKyByZXR1cm4gLUVOT0RFVjsNCisgfQ0KKw0KKyBuZGV2ID0gbmZwX2Rldl9saXN0 W21pbm9yXTsNCisgaWYgKCFuZGV2KSB7DQorIHByX2VycigiJXM6IGVycm9yOiBubyBkZXZpY2Ui LCBfX2Z1bmNfXyk7DQorIHJldHVybiAtRU5PREVWOw0KKyB9DQorDQorIGRldl9kYmcoJm5kZXYt PnBjaWRldi0+ZGV2LCAiJXM6IGVudGVyZWQiLCBfX2Z1bmNfXyk7DQorDQorIC8qIGNoZWNrIHVz ZXIgc3BhY2UgYnVmZmVyICovDQorIGlmICghYWNjZXNzX29rKGJ1ZiwgY291bnQpKSB7DQorIGRl dl9lcnIoJm5kZXYtPnBjaWRldi0+ZGV2LA0KKyAiJXM6IHVzZXIgc3BhY2UgdmVyaWZ5IGZhaWxl ZC4iLCBfX2Z1bmNfXyk7DQorIHJldHVybiAtRUZBVUxUOw0KKyB9DQorDQorIC8qIGNoZWNrIG1h eCBsZW5ndGggcmVxdWVzdGVkICovDQorDQorIGlmIChjb3VudCA8PSAwIHx8IE5GUF9SRUFEX01B WCA8IGNvdW50KSB7DQorIGRldl9lcnIoJm5kZXYtPnBjaWRldi0+ZGV2LA0KKyAiJXM6IGludmFs aWQgcmVxdWVzdGVkIG1heCByZWFkIGxlbmd0aCAlbHUiLA0KKyBfX2Z1bmNfXywgY291bnQpOw0K KyByZXR1cm4gLUVJTlZBTDsNCisgfQ0KKw0KKyBpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdCgwLCAm bmRldi0+cmRfcmVhZHkpKSB7DQorIGRldl9lcnIoJm5kZXYtPnBjaWRldi0+ZGV2LA0KKyAiJXM6 IHJlYWQgY2FsbGVkIHdoZW4gbm90IHJlYWR5LiIsIF9fZnVuY19fKTsNCisgcmV0dXJuIC1FSU87 DQorIH0NCisgbmJ5dGVzID0gMDsNCisNCisgLyogY2hlY2sgaWYgcmVhZCB3YXMgb2sgKi8NCisN CisgaWYgKCFuZGV2LT5yZF9vaykgew0KKyBkZXZfZXJyKCZuZGV2LT5wY2lkZXYtPmRldiwgIiVz OiByZWFkIGZhaWxlZCIsIF9fZnVuY19fKTsNCisgcmV0dXJuIC1FSU87DQorIH0NCisNCisgLyog ZmluaXNoIHJlYWQgKi8NCisNCisgaWYgKG5kZXYtPmlmdmVycyA+PSBORkRFVl9JRl9QQ0lfUFVT SCkgew0KKyBuYnl0ZXMgPSAqKHUzMiAqKShuZGV2LT5yZWFkX2J1ZiArIE5GUF9ETUFfTkJZVEVT X09GRlNFVCk7DQorIG5ieXRlcyA9IGxlMzJfdG9fY3B1KG5ieXRlcyk7DQorIGRldl9ub3RpY2Uo Jm5kZXYtPnBjaWRldi0+ZGV2LA0KKyAgICAiJXM6IG5ieXRlcyAlZCIsIF9fZnVuY19fLCBuYnl0 ZXMpOw0KKyBpZiAobmJ5dGVzIDwgMCB8fCBuYnl0ZXMgPiBjb3VudCkgew0KKyBkZXZfZXJyKCZu ZGV2LT5wY2lkZXYtPmRldiwNCisgIiVzOiBiYWQgYnl0ZSBjb3VudCAoJWQpIGZyb20gZGV2aWNl IiwNCisgX19mdW5jX18sIG5ieXRlcyk7DQorIHJldHVybiAtRUlPOw0KKyB9DQorIGlmIChjb3B5 X3RvX3VzZXIoYnVmLCBuZGV2LT5yZWFkX2J1ZiArIE5GUF9ETUFfQUREUkVTU19PRkZTRVQsDQor IG5ieXRlcykgIT0gMCkgew0KKyBkZXZfZXJyKCZuZGV2LT5wY2lkZXYtPmRldiwNCisgIiVzOiBj b3B5IHRvIHVzZXIgc3BhY2UgZmFpbGVkIiwgX19mdW5jX18pOw0KKyByZXR1cm4gLUVJTzsNCisg fQ0KKyB9IGVsc2Ugew0KKyBuYnl0ZXMgPSAwOw0KKyBuZSA9IG5kZXYtPmNtZGRldi0+cmVhZF9i bG9jayhidWYsIGNvdW50LCBuZGV2LT5jbWRjdHgsDQorICAgICAgICh2b2lkICopJm5ieXRlcyk7 DQorIGlmIChuZSAhPSAwKSB7DQorIGRldl9lcnIoJm5kZXYtPnBjaWRldi0+ZGV2LA0KKyAiJXM6 IGRldmljZSByZWFkIGZhaWxlZCIsIF9fZnVuY19fKTsNCisgcmV0dXJuIG5lOw0KKyB9DQorIH0N CisNCisgaWYgKG5ieXRlcyA+IE5GUF9SRUFEX01BWCkgew0KKyBkZXZfZXJyKCZuZGV2LT5wY2lk ZXYtPmRldiwNCisgIiVzOiByZWFkIHJlcGx5IG92ZXJmbG93OiAlZCA+ICVkIG1heCIsDQorIF9f ZnVuY19fLCBuYnl0ZXMsIE5GUF9SRUFEX01BWCk7DQorIHJldHVybiAtRUlPOw0KKyB9DQorDQor IGRldl93YXJuKCZuZGV2LT5wY2lkZXYtPmRldiwgIiVzOiByZWFkICVkIGJ5dGVzICglcykiLCBf X2Z1bmNfXywgbmJ5dGVzLA0KKyBuZGV2LT5pZnZlcnMgPj0gTkZERVZfSUZfUENJX1BVU0ggPyAi ZG1hIiA6ICJzdGQiKTsNCisgcmV0dXJuIG5ieXRlczsNCit9DQorDQorc3RhdGljIGludCBuZnBf YWxsb2NfcGNpX3B1c2goc3RydWN0IG5mcF9kZXYgKm5kZXYpDQorew0KKyAvKiBhbGxvY2F0ZSBy ZXNvdXJjZXMgbmVlZGVkIGZvciBQQ0kgUHVzaCwNCisgKiBpZiBub3QgYWxyZWFkeSBhbGxvY2F0 ZWQuDQorICogcmV0dXJuIFRydWUgaWYgc3VjY2Vzc2Z1bA0KKyAqLw0KKyBpZiAoIW5kZXYtPnJl YWRfYnVmKSB7DQorIG5kZXYtPnJlYWRfYnVmID0NCisga3phbGxvYyhORlBfUkVBREJVRl9TSVpF LCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7DQorIGlmICghbmRldi0+cmVhZF9idWYpDQorIHJldHVy biAtRU5PTUVNOw0KKw0KKyBuZGV2LT5yZWFkX2RtYSA9DQorIGRtYV9tYXBfc2luZ2xlKCZuZGV2 LT5wY2lkZXYtPmRldiwgbmRldi0+cmVhZF9idWYsDQorICAgICAgICBORlBfUkVBREJVRl9TSVpF LCBETUFfQklESVJFQ1RJT05BTCk7DQorIGlmIChkbWFfbWFwcGluZ19lcnJvcigmbmRldi0+cGNp ZGV2LT5kZXYsIG5kZXYtPnJlYWRfZG1hKSkgew0KKyBkZXZfZXJyKCZuZGV2LT5wY2lkZXYtPmRl diwNCisgImRtYV9tYXBwaW5nX2Vycm9yIGZvdW5kIGFmdGVyIGF0dGVtcHRpbmcgZG1hX21hcF9z aW5nbGUiKTsNCisga2ZyZWUobmRldi0+cmVhZF9idWYpOw0KKyBuZGV2LT5yZWFkX2J1ZiA9IE5V TEw7DQorIG5kZXYtPnJlYWRfZG1hID0gMDsNCisgfQ0KKyB9DQorIHJldHVybiBuZGV2LT5yZWFk X2J1ZiA/IDEgOiAwOw0KK30NCisNCitzdGF0aWMgaW50IG5mcF9hbGxvY19wY2lfcHVsbChzdHJ1 Y3QgbmZwX2RldiAqbmRldikNCit7DQorIC8qIGFsbG9jYXRlIHJlc291cmNlcyBuZWVkZWQgZm9y IFBDSSBQdWxsLA0KKyAqIGlmIG5vdCBhbHJlYWR5IGFsbG9jYXRlZC4NCisgKiByZXR1cm4gVHJ1 ZSBpZiBzdWNjZXNzZnVsDQorICovDQorIGlmICghbmRldi0+d3JpdGVfYnVmKSB7DQorIG5kZXYt PndyaXRlX2J1ZiA9DQorIGt6YWxsb2MoTkZQX1dSSVRFQlVGX1NJWkUsIEdGUF9LRVJORUwgfCBH RlBfRE1BKTsNCisgaWYgKCFuZGV2LT53cml0ZV9idWYpDQorIHJldHVybiAtRU5PTUVNOw0KKw0K KyBuZGV2LT53cml0ZV9kbWEgPSBkbWFfbWFwX3NpbmdsZSgmbmRldi0+cGNpZGV2LT5kZXYsDQor IG5kZXYtPndyaXRlX2J1ZiwNCisgTkZQX1dSSVRFQlVGX1NJWkUsDQorIERNQV9CSURJUkVDVElP TkFMKTsNCisgaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZuZGV2LT5wY2lkZXYtPmRldiwgbmRldi0+ d3JpdGVfZG1hKSkgew0KKyBkZXZfZXJyKCZuZGV2LT5wY2lkZXYtPmRldiwNCisgImRtYV9tYXBw aW5nX2Vycm9yIGZvdW5kIGFmdGVyIGF0dGVtcHRpbmcgZG1hX21hcF9zaW5nbGUiKTsNCisga2Zy ZWUobmRldi0+d3JpdGVfYnVmKTsNCisgbmRldi0+d3JpdGVfYnVmID0gTlVMTDsNCisgbmRldi0+ d3JpdGVfZG1hID0gMDsNCisgfQ0KKyB9DQorIHJldHVybiBuZGV2LT53cml0ZV9idWYgPyAxIDog MDsNCit9DQorDQorc3RhdGljIHZvaWQgbmZwX2ZyZWVfcGNpX3B1c2goc3RydWN0IG5mcF9kZXYg Km5kZXYpDQorew0KKyAvKiBmcmVlIHJlc291cmNlcyBhbGxvY2F0ZWQgdG8gUENJIFB1c2ggKi8N CisgaWYgKG5kZXYtPnJlYWRfYnVmKSB7DQorIGRtYV91bm1hcF9zaW5nbGUoJm5kZXYtPnBjaWRl di0+ZGV2LCBuZGV2LT5yZWFkX2RtYSwNCisgTkZQX1JFQURCVUZfU0laRSwgRE1BX0JJRElSRUNU SU9OQUwpOw0KKyBrZnJlZShuZGV2LT5yZWFkX2J1Zik7DQorIG5kZXYtPnJlYWRfYnVmID0gTlVM TDsNCisgbmRldi0+cmVhZF9kbWEgPSAwOw0KKyB9DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG5mcF9m cmVlX3BjaV9wdWxsKHN0cnVjdCBuZnBfZGV2ICpuZGV2KQ0KK3sNCisgLyogZnJlZSByZXNvdXJj ZXMgYWxsb2NhdGVkIHRvIFBDSSBQdWxsICovDQorIGlmIChuZGV2LT53cml0ZV9idWYpIHsNCisg ZG1hX3VubWFwX3NpbmdsZSgmbmRldi0+cGNpZGV2LT5kZXYsIG5kZXYtPndyaXRlX2RtYSwNCisg TkZQX1dSSVRFQlVGX1NJWkUsIERNQV9CSURJUkVDVElPTkFMKTsNCisga2ZyZWUobmRldi0+d3Jp dGVfYnVmKTsNCisgbmRldi0+d3JpdGVfYnVmID0gTlVMTDsNCisgbmRldi0+d3JpdGVfZG1hID0g MDsNCisgfQ0KK30NCisNCisvKg0KKyAqIFNldHMgZGV2aWNlIGludGVyZmFjZSB2ZXJzaW9uLg0K KyAqDQorICogQHBhcmFtIG5kZXYgYW4gTlNISUVMRCBTT0xPIGRldmljZS4NCisgKiBAcGFyYW0g aWZ2ZXJzIGludGVyZmFjZSB2ZXJzaW9uLg0KKyAqIEByZXR1cm5zIGludGVyZmFjZSB2ZXJzaW9u IGFjdHVhbGx5IHNldC4NCisgKi8NCitzdGF0aWMgaW50IG5mcF9zZXRfaWZ2ZXJzKHN0cnVjdCBu ZnBfZGV2ICpuZGV2LCBpbnQgaWZ2ZXJzKQ0KK3sNCisgaW50IG1heF9pZnZlcnM7DQorDQorIC8q IGNoZWNrIGZvciBkZXZpY2UgKi8NCisgaWYgKCFuZGV2KSB7DQorIHByX2VycigiJXM6IGVycm9y OiBubyBkZXZpY2UiLCBfX2Z1bmNfXyk7DQorIHJldHVybiAwOyAvKiBubyBpbnRlcmZhY2UgdmVy c2lvbiAqLw0KKyB9DQorDQorIGRldl9kYmcoJm5kZXYtPnBjaWRldi0+ZGV2LCAiJXM6IGVudGVy ZWQiLCBfX2Z1bmNfXyk7DQorDQorIG1heF9pZnZlcnMgPSBuZGV2LT5jbWRkZXYtPm1heF9pZnZl cnM7DQorIGlmIChuZnBfaWZ2ZXJzICE9IDAgJiYgbWF4X2lmdmVycyA+IG5mcF9pZnZlcnMpDQor IG1heF9pZnZlcnMgPSBuZnBfaWZ2ZXJzOw0KKw0KKyAvKiBvbiBhbnkgZXJyb3IsIGlmdmVycyBy ZW1haW5zIHVuY2hhbmdlZCAqLw0KKyBpZiAoaWZ2ZXJzIDwgMCB8fCBpZnZlcnMgPiBtYXhfaWZ2 ZXJzKSB7DQorIC8qIGludmFsaWQgbmZwX2lmdmVyczogc2V0IHRvIG1heCBhcyBmYWxsYmFjayAq Lw0KKyBkZXZfZXJyKCZuZGV2LT5wY2lkZXYtPmRldiwgIiVzOiAlZCBvdXQgb2YgYWxsb3dhYmxl IHJhbmdlIFswOiVkXSIsDQorIF9fZnVuY19fLCBpZnZlcnMsIG1heF9pZnZlcnMpOw0KKyByZXR1 cm4gbmRldi0+aWZ2ZXJzOw0KKyB9DQorDQorIGlmIChpZnZlcnMgPT0gMCAmJg0KKyAgICAgbmRl di0+Y21kZGV2LT5kZXZpY2VpZCA9PSBQQ0lfREVWSUNFX0lEX0ZSRUVTQ0FMRV9UMTAyMikgew0K KyAvKiBkZWZhdWx0IGlmdmVyczogc2V0IHRvIG1heCBmb3Igbmdzb2xvIG5vdCBmb3IgbGVnYWN5 IQ0KKyAqIFRoZSBsZWdhY3kgY2FyZCBuZWVkcyBpdCBzZXQgdG8gMCB3aGVuIGluIE1haW50ZW5h bmNlDQorICogbW9kZSBhbmQgdGhlbiB0aGUgaGFyZHNlcnZlciBzdGVwcyBpdCB1cCB0byBpZnZl cnMgMg0KKyAqIHdoZW4gc3dpdGNoaW5nIGJhY2sgdG8gT3BlcmF0aW9uYWwgbW9kZS4gU29sbyBY QyBzdGFydHMNCisgKiBhdCB0aGUgbWF4ICgzKSB3aGVuZXZlciBwb3NzaWJsZS4NCisgKi8NCisg aWZ2ZXJzID0gbWF4X2lmdmVyczsNCisgfQ0KKw0KKyBpZiAoaWZ2ZXJzID49IE5GREVWX0lGX1BD SV9QVVNIKSB7DQorIGlmICghbmZwX2FsbG9jX3BjaV9wdXNoKG5kZXYpKSB7DQorIGRldl9lcnIo Jm5kZXYtPnBjaWRldi0+ZGV2LA0KKyAiJXM6IGNhbid0IHNldCBpZnZlcnMgJWQgYXMgcmVzb3Vy Y2VzIG5vdCBhdmFpbGFibGUiLA0KKyBfX2Z1bmNfXywgaWZ2ZXJzKTsNCisgcmV0dXJuIG5kZXYt PmlmdmVyczsNCisgfQ0KKyB9IGVsc2Ugew0KKyBuZnBfZnJlZV9wY2lfcHVzaChuZGV2KTsNCisg fQ0KKw0KKyBpZiAoaWZ2ZXJzID49IE5GREVWX0lGX1BDSV9QVUxMKSB7DQorIGlmICghbmZwX2Fs bG9jX3BjaV9wdWxsKG5kZXYpKSB7DQorIGRldl9lcnIoJm5kZXYtPnBjaWRldi0+ZGV2LA0KKyAi JXM6IGNhbid0IHNldCBpZnZlcnMgJWQgYXMgcmVzb3VyY2VzIG5vdCBhdmFpbGFibGUiLA0KKyBf X2Z1bmNfXywgaWZ2ZXJzKTsNCisgcmV0dXJuIG5kZXYtPmlmdmVyczsNCisgfQ0KKyB9IGVsc2Ug ew0KKyBuZnBfZnJlZV9wY2lfcHVsbChuZGV2KTsNCisgfQ0KKw0KKyBuZGV2LT5pZnZlcnMgPSBp ZnZlcnM7DQorIGRldl93YXJuKCZuZGV2LT5wY2lkZXYtPmRldiwNCisgIiVzOiBzZXR0aW5nIGlm dmVycyA9ICVkIiwgX19mdW5jX18sIGlmdmVycyk7DQorDQorIHJldHVybiBpZnZlcnM7DQorfQ0K Kw0KKy8qKg0KKyAqIFBlcmZvcm1zIGFuIE5TSElFTEQgU09MTyBkZXZpY2UgSU9DVEwgY2FsbC4N CisgKg0KKyAqIEBwYXJhbSBpbm9kZSBkZXZpY2UgaW5vZGUgcG9pbnRlci4NCisgKiBAcGFyYW0g ZmlsZSAgZGV2aWNlIGZpbGUgcG9pbnRlci4NCisgKiBAcGFyYW0gY21kICAgY29tbWFuZCBpZC4N CisgKiBAcGFyYW0gYXJnICAgY29tbWFuZCBhcmd1bWVudC4NCisgKiBAcmV0dXJucyAwIGlmIHN1 Y2Nlc3NmdWwuDQorICovDQorc3RhdGljIGludCBuZnBfaW9jdGwoc3RydWN0IGlub2RlICppbm9k ZSwNCisgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwNCisgICAgICB1MzIgY21kLA0KKyAgICAgIHU2 NCBhcmcpDQorew0KKyBzdHJ1Y3QgbmZwX2RldiAqbmRldjsNCisgaW50IG1pbm9yOw0KKw0KKyAv KiBmaW5kIG5kZXYgZnJvbSBtaW5vciAqLw0KKyBtaW5vciA9IE1JTk9SKElOT0RFX0ZST01fRklM RShmaWxlKS0+aV9yZGV2KTsNCisNCisgaWYgKG1pbm9yID49IE5GUF9NQVhERVYpIHsNCisgcHJf ZXJyKCIlczogbWlub3Igb3V0IG9mIHJhbmdlLiIsIF9fZnVuY19fKTsNCisgcmV0dXJuIC1FTk9E RVY7DQorIH0NCisNCisgbmRldiA9IG5mcF9kZXZfbGlzdFttaW5vcl07DQorDQorIC8qIGNoZWNr IGZvciBkZXZpY2UgKi8NCisgaWYgKCFuZGV2KSB7DQorIHByX2VycigiJXM6IGVycm9yOiBubyBk ZXZpY2UiLCBfX2Z1bmNfXyk7DQorIHJldHVybiAtRU5PREVWOw0KKyB9DQorDQorIGRldl9kYmco Jm5kZXYtPnBjaWRldi0+ZGV2LCAiJXM6IGVudGVyZWQiLCBfX2Z1bmNfXyk7DQorDQorIHN3aXRj aCAoY21kKSB7DQorIGNhc2UgTkZERVZfSU9DVExfRU5RVUlSWTogew0KKyBzdHJ1Y3QgbmZkZXZf ZW5xdWlyeV9zdHIgZW5xX2RhdGE7DQorIGludCBlcnIgPSAtRUlPOw0KKw0KKyBkZXZfZGJnKCZu ZGV2LT5wY2lkZXYtPmRldiwgIiVzOiBlbnF1aXJ5IiwgX19mdW5jX18pOw0KKyBlbnFfZGF0YS5i dXNubyA9IG5kZXYtPmJ1c25vOw0KKyBlbnFfZGF0YS5zbG90bm8gPSBuZGV2LT5zbG90bm87DQor IGlmICgodm9pZCAqKWFyZykgew0KKyBlcnIgPSBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICop YXJnLCAmZW5xX2RhdGEsDQorICAgIHNpemVvZihlbnFfZGF0YSkpID8gLUVGQVVMVCA6IDA7DQor IGlmIChlcnIpIHsNCisgZGV2X2VycigmbmRldi0+cGNpZGV2LT5kZXYsDQorICIlczogY29weSB0 byB1c2VyIHNwYWNlIGZhaWxlZC4iLA0KKyBfX2Z1bmNfXyk7DQorIHJldHVybiBlcnI7DQorIH0N CisgfSBlbHNlIHsNCisgZGV2X2VycigmbmRldi0+cGNpZGV2LT5kZXYsDQorICIlcyBlbnF1aXJ5 OiBhcmcgcG9pbnRlciBpcyBOVUxMISIsIF9fZnVuY19fKTsNCisgcmV0dXJuIGVycjsNCisgfQ0K KyB9IGJyZWFrOw0KKyBjYXNlIE5GREVWX0lPQ1RMX0VOU1VSRVJFQURJTkc6DQorIGNhc2UgTkZE RVZfSU9DVExfRU5TVVJFUkVBRElOR19CVUczMzQ5OiB7DQorIGRtYV9hZGRyX3QgYWRkcjsNCisg dTMyIGxlbjsNCisgaW50IGVyciA9IC1FSU87DQorIGludCBuZTsNCisNCisgZGV2X2RiZygmbmRl di0+cGNpZGV2LT5kZXYsICIlczogZW5zdXJlIHJlYWRpbmciLCBfX2Z1bmNfXyk7DQorDQorIC8q IGdldCBhbmQgY2hlY2sgbWF4IGxlbmd0aCAqLw0KKyBpZiAoKHZvaWQgKilhcmcpIHsNCisgZXJy ID0gY29weV9mcm9tX3VzZXIoKHZvaWQgKikmbGVuLCAodm9pZCBfX3VzZXIgKilhcmcsDQorICAg ICAgc2l6ZW9mKHUzMikpID8gLUVGQVVMVCA6IDA7DQorIGlmIChlcnIpIHsNCisgZGV2X2Vycigm bmRldi0+cGNpZGV2LT5kZXYsDQorICIlczogZW5zdXJlIHJlYWRpbmc6IGNvcHkgZnJvbSB1c2Vy IHNwYWNlIGZhaWxlZC4iLA0KKyBfX2Z1bmNfXyk7DQorIHJldHVybiBlcnI7DQorIH0NCisgLyog c2lnbmFsIGEgcmVhZCB0byB0aGUgbW9kdWxlICovDQorIGRldl93YXJuKCZuZGV2LT5wY2lkZXYt PmRldiwNCisgIiVzOiBzaWduYWxsaW5nIHJlYWQgcmVxdWVzdCB0byBtb2R1bGUsIGxlbiA9ICV4 LiIsDQorIF9fZnVuY19fLCBsZW4pOw0KKyBpZiAobGVuID4gTkZQX1JFQURfTUFYKSB7DQorIGRl dl9lcnIoJm5kZXYtPnBjaWRldi0+ZGV2LCAiJXM6IGxlbiA+ICV4ID0gJXguIiwNCisgX19mdW5j X18sIE5GUF9SRUFEX01BWCwgbGVuKTsNCisgcmV0dXJuIC1FSU5WQUw7DQorIH0NCisgfSBlbHNl IHsNCisgZGV2X2VycigmbmRldi0+cGNpZGV2LT5kZXYsDQorICIlcyBlbnN1cmUgcmVhZGluZzog YXJnIHBvaW50ZXIgaXMgTlVMTCEiLA0KKyBfX2Z1bmNfXyk7DQorIHJldHVybiBlcnI7DQorIH0N CisNCisgaWYgKGxlbiA8PSAwIHx8IE5GUF9SRUFEX01BWCA8IGxlbikgew0KKyBkZXZfZXJyKCZu ZGV2LT5wY2lkZXYtPmRldiwNCisgIiVzOiBlbnN1cmUgcmVhZGluZzogaW52YWxpZCBtYXggbGVu Z3RoICVkLyVkIiwNCisgX19mdW5jX18sIGxlbiwgTkZQX1JFQURfTUFYKTsNCisgZXJyID0gLUVJ TlZBTDsNCisgcmV0dXJuIGVycjsNCisgfQ0KKw0KKyAvKiBjaGVjayBpZiBva2F5IHRvIHN0YXJ0 IHJlYWQgKi8NCisNCisgaWYgKHRlc3RfYW5kX3NldF9iaXQoV0FJVF9CSVQsICZuZGV2LT5yZF9v dXRzdGFuZGluZykpIHsNCisgZGV2X2VycigmbmRldi0+cGNpZGV2LT5kZXYsDQorICIlczogZW5z dXJlIHJlYWRpbmc6IGFub3RoZXIgcmVhZCBpcyBvdXRzdGFuZGluZyIsDQorIF9fZnVuY19fKTsN CisgcmV0dXJuIC1FQlVTWTsNCisgfQ0KKw0KKyBkZXZfd2FybigmbmRldi0+cGNpZGV2LT5kZXYs DQorICIlczogbmRldi0+cmRfb3V0c3RhbmRpbmc9MSIsIF9fZnVuY19fKTsNCisNCisgLyogc3Rh cnQgcmVhZCByZWFkeSB0aW1lb3V0ICovDQorDQorIG1vZF90aW1lcigmbmRldi0+cmRfdGltZXIs IGppZmZpZXMgKyAoTkZQX1RJTUVPVVRfU0VDICogSFopKTsNCisNCisgZGV2X3dhcm4oJm5kZXYt PnBjaWRldi0+ZGV2LCAiJXM6IHJlYWQgcmVxdWVzdCIsIF9fZnVuY19fKTsNCisgLyogc3RhcnQg cmVhZCAqLw0KKw0KKyBhZGRyID0gKG5kZXYtPmlmdmVycyA8IE5GREVWX0lGX1BDSV9QVVNIKSA/ IDAgOiBuZGV2LT5yZWFkX2RtYTsNCisgZGV2X25vdGljZSgmbmRldi0+cGNpZGV2LT5kZXYsDQor ICAgICIlczogZW5zdXJlIHJlYWRpbmc6IHJlYWQgcmVxdWVzdCB3aXRoIGlmdmVycz0lZCBhZGRy PSVwIiwNCisgICAgX19mdW5jX18sIG5kZXYtPmlmdmVycywgKHZvaWQgKilhZGRyKTsNCisNCisg bmUgPSBuZGV2LT5jbWRkZXYtPmVuc3VyZV9yZWFkaW5nKGFkZHIsIGxlbiwgbmRldi0+Y21kY3R4 LCAxKTsNCisNCisgaWYgKG5lICE9IDApIHsNCisgZGV2X2VycigmbmRldi0+cGNpZGV2LT5kZXYs DQorICIlczogZW5zdXJlIHJlYWRpbmc6IHJlYWQgcmVxdWVzdCBmYWlsZWQiLA0KKyBfX2Z1bmNf Xyk7DQorIGRlbF90aW1lcl9zeW5jKCZuZGV2LT5yZF90aW1lcik7DQorIC8qIG1ha2Ugc3VyZSB0 aGF0IGRlbF90aW1lcl9zeW5jIGlzIGRvbmUgYmVmb3JlDQorICogd2UgY2xlYXIgcmRfb3V0c3Rh bmRpbmcNCisgKi8NCisgc21wX21iX19iZWZvcmVfYXRvbWljKCk7DQorIGNsZWFyX2JpdChXQUlU X0JJVCwgJm5kZXYtPnJkX291dHN0YW5kaW5nKTsNCisgcmV0dXJuIC1FSU87DQorIH0NCisgfSBi cmVhazsNCisNCisgY2FzZSBORkRFVl9JT0NUTF9QQ0lfSUZWRVJTOiB7DQorIGludCB2ZXJzLCBl cnIgPSAtRUlPOw0KKw0KKyBkZXZfZGJnKCZuZGV2LT5wY2lkZXYtPmRldiwgIiVzOiBzZXQgaWZ2 ZXJzIiwgX19mdW5jX18pOw0KKyBpZiAoKHZvaWQgKilhcmcpIHsNCisgZXJyID0gY29weV9mcm9t X3VzZXIoJnZlcnMsICh2b2lkIF9fdXNlciAqKWFyZywNCisgICAgICBzaXplb2YodmVycykpID8g LUVGQVVMVCA6IDA7DQorIGlmIChlcnIpIHsNCisgZGV2X2VycigmbmRldi0+cGNpZGV2LT5kZXYs DQorICIlczogc2V0IGlmdmVyczogY29weSBmcm9tIHVzZXIgc3BhY2UgZmFpbGVkLiIsDQorIF9f ZnVuY19fKTsNCisgcmV0dXJuIGVycjsNCisgfQ0KKyB9IGVsc2Ugew0KKyBkZXZfZXJyKCZuZGV2 LT5wY2lkZXYtPmRldiwNCisgIiVzIGlmdmVyczogYXJnIHBvaW50ZXIgaXMgTlVMTCEiLA0KKyBf X2Z1bmNfXyk7DQorIHJldHVybiBlcnI7DQorIH0NCisNCisgaWYgKHRlc3RfYml0KFdBSVRfQklU LCAmbmRldi0+cmRfb3V0c3RhbmRpbmcpKSB7DQorIGRldl9lcnIoJm5kZXYtPnBjaWRldi0+ZGV2 LA0KKyAiJXM6IHNldCBpZnZlcnM6IHVuYWJsZSB0byBzZXQgaW50ZXJmYWNlIHZlcnNpb24gd2hp bGUgcmVhZCBvdXRzdGFuZGluZyIsDQorIF9fZnVuY19fKTsNCisgcmV0dXJuIC1FSU87DQorIH0N CisNCisgbmZwX3NldF9pZnZlcnMobmRldiwgdmVycyk7DQorIH0gYnJlYWs7DQorDQorIGNhc2Ug TkZERVZfSU9DVExfQ0hVUERBVEU6DQorIGRldl9lcnIoJm5kZXYtPnBjaWRldi0+ZGV2LA0KKyAi JXM6IGNoYW5uZWwgdXBkYXRlIGlnbm9yZWQiLCBfX2Z1bmNfXyk7DQorIGJyZWFrOw0KKw0KKyBj YXNlIE5GREVWX0lPQ1RMX1NUQVRTOiB7DQorIGludCBlcnIgPSAtRUlPOw0KKw0KKyBkZXZfZGJn KCZuZGV2LT5wY2lkZXYtPmRldiwgIiVzOiBzdGF0cyIsIF9fZnVuY19fKTsNCisgaWYgKCh2b2lk ICopYXJnKSB7DQorIGVyciA9IGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZuZGV2 LT5zdGF0cywNCisgICAgc2l6ZW9mKHN0cnVjdCBuZmRldl9zdGF0c19zdHIpKQ0KKyAgICA/IC1F RkFVTFQgOiAwOw0KKyBpZiAoZXJyKSB7DQorIGRldl9lcnIoJm5kZXYtPnBjaWRldi0+ZGV2LA0K KyAiJXM6IHN0YXRzOiBjb3B5IHRvIHVzZXIgc3BhY2UgZmFpbGVkLiIsDQorIF9fZnVuY19fKTsN CisgcmV0dXJuIGVycjsNCisgfQ0KKyB9IGVsc2Ugew0KKyBkZXZfZXJyKCZuZGV2LT5wY2lkZXYt PmRldiwNCisgIiVzIHN0YXRzOiBhcmcgcG9pbnRlciBpcyBOVUxMISIsIF9fZnVuY19fKTsNCisg cmV0dXJuIGVycjsNCisgfQ0KKyB9IGJyZWFrOw0KKw0KKyBjYXNlIE5GREVWX0lPQ1RMX0NPTlRS T0w6IHsNCisgaW50IGVyciA9IC1FSU87DQorIHN0cnVjdCBuZmRldl9jb250cm9sX3N0ciBjb250 cm9sOw0KKw0KKyBkZXZfZGJnKCZuZGV2LT5wY2lkZXYtPmRldiwgIiVzOiBjb250cm9sIiwgX19m dW5jX18pOw0KKyBpZiAoKHZvaWQgKilhcmcpIHsNCisgZXJyID0gY29weV9mcm9tX3VzZXIoJmNv bnRyb2wsICh2b2lkIF9fdXNlciAqKWFyZywNCisgICAgICBzaXplb2YoY29udHJvbCkpID8gLUVG QVVMVCA6IDA7DQorIGlmIChlcnIpIHsNCisgZGV2X2VycigmbmRldi0+cGNpZGV2LT5kZXYsDQor ICIlczogY29udHJvbDogY29weSBmcm9tIHVzZXIgc3BhY2UgZmFpbGVkLiIsDQorIF9fZnVuY19f KTsNCisgcmV0dXJuIGVycjsNCisgfQ0KKyB9IGVsc2Ugew0KKyBkZXZfZXJyKCZuZGV2LT5wY2lk ZXYtPmRldiwNCisgIiVzIGNvbnRyb2w6IGFyZyBwb2ludGVyIGlzIE5VTEwhIiwgX19mdW5jX18p Ow0KKyByZXR1cm4gZXJyOw0KKyB9DQorIGlmICghbmRldi0+Y21kZGV2LT5zZXRjb250cm9sKSB7 DQorIGRldl93YXJuKCZuZGV2LT5wY2lkZXYtPmRldiwNCisgIiVzOiBjb250cm9sOiBzZXQgY29u dHJvbCBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGRldmljZTogaWdub3JlZCIsDQorIF9fZnVuY19f KTsNCisgcmV0dXJuIC1FSU5WQUw7DQorIH0NCisgZGV2X25vdGljZSgmbmRldi0+cGNpZGV2LT5k ZXYsDQorICAgICIlczogY29udHJvbDogdXBkYXRpbmcgSFNNIGNvbnRyb2wgcmVnaXN0ZXIgdG8g MHgleC4iLA0KKyAgICBfX2Z1bmNfXywNCisgICAgY29udHJvbC5jb250cm9sKTsNCisNCisgcmV0 dXJuIG5kZXYtPmNtZGRldi0+c2V0Y29udHJvbCgmY29udHJvbCwgbmRldi0+Y21kY3R4KTsNCisg fSBicmVhazsNCisNCisgY2FzZSBORkRFVl9JT0NUTF9TVEFUVVM6IHsNCisgaW50IGVyciA9IC1F SU87DQorIHN0cnVjdCBuZmRldl9zdGF0dXNfc3RyIHN0YXR1czsNCisNCisgZGV2X2RiZygmbmRl di0+cGNpZGV2LT5kZXYsICIlczogc3RhdHVzIiwgX19mdW5jX18pOw0KKw0KKyBpZiAoIW5kZXYt PmNtZGRldi0+Z2V0c3RhdHVzKSB7DQorIGRldl93YXJuKCZuZGV2LT5wY2lkZXYtPmRldiwNCisg IiVzOiBzdGF0dXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBkZXZpY2U6IGlnbm9yZWQiLA0KKyBf X2Z1bmNfXyk7DQorIHJldHVybiAtRUlOVkFMOw0KKyB9DQorIGVyciA9IG5kZXYtPmNtZGRldi0+ Z2V0c3RhdHVzKCZzdGF0dXMsDQorICAgICAgIG5kZXYtPmNtZGN0eCk7DQorDQorIGlmIChlcnIp DQorIHJldHVybiBlcnI7DQorDQorIGlmICgodm9pZCAqKWFyZykgew0KKyBlcnIgPSBjb3B5X3Rv X3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmc3RhdHVzLA0KKyAgICBzaXplb2Yoc3RhdHVzKSkg PyAtRUZBVUxUIDogMDsNCisgaWYgKGVycikgew0KKyBkZXZfZXJyKCZuZGV2LT5wY2lkZXYtPmRl diwNCisgIiVzOiBzdGF0dXM6IGNvcHkgZnJvbSB1c2VyIHNwYWNlIGZhaWxlZC4iLA0KKyBfX2Z1 bmNfXyk7DQorIHJldHVybiBlcnI7DQorIH0NCisgfSBlbHNlIHsNCisgZGV2X2VycigmbmRldi0+ cGNpZGV2LT5kZXYsDQorICIlcyBzdGF0dXM6IGFyZyBwb2ludGVyIGlzIE5VTEwhIiwNCisgX19m dW5jX18pOw0KKyByZXR1cm4gZXJyOw0KKyB9DQorIGRldl9ub3RpY2UoJm5kZXYtPnBjaWRldi0+ ZGV2LA0KKyAgICAiJXM6IHJlYWQgc3RhdHVzOiAweCV4LCBlcnJvcjogMHglMDJ4JTAyeCUwMngl MDJ4JTAyeCUwMnglMDJ4JTAyeCIsDQorICAgIF9fZnVuY19fLA0KKyBzdGF0dXMuc3RhdHVzLCBz dGF0dXMuZXJyb3JbMF0sIHN0YXR1cy5lcnJvclsxXSwNCisgc3RhdHVzLmVycm9yWzJdLCBzdGF0 dXMuZXJyb3JbM10sIHN0YXR1cy5lcnJvcls0XSwNCisgc3RhdHVzLmVycm9yWzVdLCBzdGF0dXMu ZXJyb3JbNl0sIHN0YXR1cy5lcnJvcls3XSk7DQorIH0gYnJlYWs7DQorDQorIGRlZmF1bHQ6IHsN CisgZGV2X2VycigmbmRldi0+cGNpZGV2LT5kZXYsICIlczogdW5rbm93biBpb2N0bC4iLCBfX2Z1 bmNfXyk7DQorIHJldHVybiAtRUlOVkFMOw0KKyB9IGJyZWFrOw0KKyB9DQorDQorIHJldHVybiAw Ow0KK30NCisNCisvKioNCisgKiBQZXJmb3JtcyBhbiBOU0hJRUxEIFNPTE8gZGV2aWNlIHVubG9j a2VkIElPQ1RMIGNhbGwuDQorICoNCisgKiBAcGFyYW0gZmlsZSAgZGV2aWNlIGZpbGUgcG9pbnRl ci4NCisgKiBAcGFyYW0gY21kICAgY29tbWFuZCBpZC4NCisgKiBAcGFyYW0gYXJnICAgY29tbWFu ZCBhcmd1bWVudC4NCisgKiBAcmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwuDQorICovDQorc3RhdGlj IGxvbmcgbmZwX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLA0KKyAgICAgICAgdTMy IGNtZCwNCisgICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQ0KK3sNCisgbG9uZyByZXQ7DQorIGlu dCBtaW5vcjsNCisgc3RydWN0IG5mcF9kZXYgKm5kZXY7DQorDQorIG1pbm9yID0gTUlOT1IoSU5P REVfRlJPTV9GSUxFKGZpbGUpLT5pX3JkZXYpOw0KKyBpZiAobWlub3IgPj0gTkZQX01BWERFVikg ew0KKyBwcl9lcnIoIiVzOiBtaW5vciBvdXQgb2YgcmFuZ2UuIiwgX19mdW5jX18pOw0KKyByZXR1 cm4gLUVOT0RFVjsNCisgfQ0KKw0KKyBuZGV2ID0gbmZwX2Rldl9saXN0W21pbm9yXTsNCisgaWYg KCFuZGV2KSB7DQorIHByX2VycigiJXM6IGVycm9yOiBubyBkZXZpY2UiLCBfX2Z1bmNfXyk7DQor IHJldHVybiAtRU5PREVWOw0KKyB9DQorDQorIGRldl9kYmcoJm5kZXYtPnBjaWRldi0+ZGV2LCAi JXM6IGVudGVyZWQiLCBfX2Z1bmNfXyk7DQorDQorIG11dGV4X2xvY2soJm5kZXYtPmlvY3RsX211 dGV4KTsNCisgcmV0ID0gbmZwX2lvY3RsKE5VTEwsIGZpbGUsIGNtZCwgYXJnKTsNCisgbXV0ZXhf dW5sb2NrKCZuZGV2LT5pb2N0bF9tdXRleCk7DQorDQorIGRldl9kYmcoJm5kZXYtPnBjaWRldi0+ ZGV2LCAiJXM6IGxlZnQiLCBfX2Z1bmNfXyk7DQorIHJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRp YyBpcnFyZXR1cm5fdCBuZnBfaXNyKGludCBpcnEsIHZvaWQgKmNvbnRleHQpDQorew0KKyBzdHJ1 Y3QgbmZwX2RldiAqbmRldiA9IChzdHJ1Y3QgbmZwX2RldiAqKWNvbnRleHQ7DQorIGludCBoYW5k bGVkOw0KKyBpbnQgbmU7DQorDQorIC8qIGNoZWNrIGZvciBkZXZpY2UgKi8NCisgaWYgKCFuZGV2 KSB7DQorIHByX2VycigiJXM6IGVycm9yOiBubyBkZXZpY2UiLCBfX2Z1bmNfXyk7DQorIHJldHVy biBJUlFfTk9ORTsNCisgfQ0KKw0KKyBkZXZfZGJnKCZuZGV2LT5wY2lkZXYtPmRldiwgIiVzOiBl bnRlcmVkIiwgX19mdW5jX18pOw0KKw0KKyBuZSA9IG5kZXYtPmNtZGRldi0+aXNyKG5kZXYtPmNt ZGN0eCwgJmhhbmRsZWQpOw0KKw0KKyBpZiAobmUgIT0gMCkNCisgZGV2X2VycigmbmRldi0+cGNp ZGV2LT5kZXYsICIlczogY21kZGV2IGlzciBmYWlsZWQgKCVkKSIsDQorIF9fZnVuY19fLCBuZSk7 DQorDQorIHJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOw0KK30NCisNCisvKioNCisgKiBPcGVu cyBhbiBOU0hJRUxEIFNPTE8gZGV2aWNlLg0KKyAqDQorICogVGhlIGtlcm5lbCBjYWxscyB0aGlz IGZ1bmN0aW9uIHdoZW4gYSB1c2VyIHRyaWVzIHRvIG9wZW4gYW4NCisgKiBOU0hJRUxEIFNPTE8g ZGV2aWNlLiAgSXQgaXMgYW4gZXJyb3IgdG8gYXR0ZW1wdCB0byBvcGVuIGFuDQorICogYWxyZWFk eSBvcGVuZWQgZGV2aWNlLg0KKyAqDQorICogQHBhcmFtIGlub2RlIGRldmljZSBpbm9kZSBwb2lu dGVyLg0KKyAqIEBwYXJhbSBmaWxlIGRldmljZSBmaWxlIHBvaW50ZXIuDQorICogQHJldHVybiAw IGlmIHN1Y2Nlc3NmdWwuDQorICovDQorc3RhdGljIGludCBuZnBfb3BlbihzdHJ1Y3QgaW5vZGUg Kmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkNCit7DQorIHN0cnVjdCBuZnBfZGV2ICpuZGV2Ow0K KyBpbnQgbmU7DQorIGludCBtaW5vciA9IE1JTk9SKElOT0RFX0ZST01fRklMRShmaWxlKS0+aV9y ZGV2KTsNCisNCisgLyogZmluZCBuZGV2ICovDQorDQorIGlmIChtaW5vciA+PSBORlBfTUFYREVW KSB7DQorIHByX2VycigiJXM6IG1pbm9yIG91dCBvZiByYW5nZS4iLCBfX2Z1bmNfXyk7DQorIHJl dHVybiAtRU5PREVWOw0KKyB9DQorDQorIG5kZXYgPSBuZnBfZGV2X2xpc3RbbWlub3JdOw0KKyBp ZiAoIW5kZXYpIHsNCisgcHJfZXJyKCIlczogY2Fubm90IGZpbmQgZGV2ICVkLiIsIF9fZnVuY19f LCBtaW5vcik7DQorIHJldHVybiAtRU5PREVWOw0KKyB9DQorDQorIGRldl9kYmcoJm5kZXYtPnBj aWRldi0+ZGV2LCAiJXM6IGVudGVyZWQiLCBfX2Z1bmNfXyk7DQorDQorIGRldl9ub3RpY2UoJm5k ZXYtPnBjaWRldi0+ZGV2LA0KKyAgICAiJXM6IG9wZW5pbmcgZmlsZSBhdCAlcC4iLCBfX2Z1bmNf XywgZmlsZSk7DQorDQorIC8qIGNoZWNrIGlmIGFscmVhZHkgb3BlbiAqLw0KKw0KKyBpZiAoYXRv bWljX3JlYWQoJm5kZXYtPmJ1c3kpKSB7DQorIGRldl9lcnIoJm5kZXYtPnBjaWRldi0+ZGV2LCAi JXM6IGRldmljZSAlcyBidXN5IiwgX19mdW5jX18sDQorIHBjaV9uYW1lKG5kZXYtPnBjaWRldikp Ow0KKyByZXR1cm4gLUVCVVNZOw0KKyB9DQorIGF0b21pY19zZXQoJm5kZXYtPmJ1c3ksIDEpOw0K Kw0KKyAvKiBkcm9wIGFueSBvbGQgZGF0YSAqLw0KKw0KKyBjbGVhcl9iaXQoMCwgJm5kZXYtPnJk X3JlYWR5KTsNCisNCisgLyogc2V0IGludGVyZmFjZSB0byBtb2R1bGUgZGVmYXVsdCAqLw0KKw0K KyBpZiAobmRldi0+Y21kZGV2LT5kZXZpY2VpZCA9PSBQQ0lfREVWSUNFX0lEX0ZSRUVTQ0FMRV9U MTAyMikNCisgbmZwX3NldF9pZnZlcnMobmRldiwgTkZERVZfSUZfUENJX1BVTEwpOw0KKyBlbHNl DQorIG5mcF9zZXRfaWZ2ZXJzKG5kZXYsIE5GREVWX0lGX1NUQU5EQVJEKTsNCisNCisgZGV2X25v dGljZSgmbmRldi0+cGNpZGV2LT5kZXYsDQorICAgICIlczogaWZ2ZXJzIHNldCB0byAlZCIsIF9f ZnVuY19fLCBuZGV2LT5pZnZlcnMpOw0KKw0KKyAvKiBvcGVuIGRldmljZSAqLw0KKw0KKyBuZSA9 IG5kZXYtPmNtZGRldi0+b3BlbihuZGV2LT5jbWRjdHgpOw0KKyBpZiAobmUgIT0gMCkgew0KKyBk ZXZfZXJyKCZuZGV2LT5wY2lkZXYtPmRldiwgIiVzOiBkZXZpY2Ugb3BlbiBmYWlsZWQ6IGVycm9y ICVkIiwNCisgX19mdW5jX18sIG5lKTsNCisgYXRvbWljX3NldCgmbmRldi0+YnVzeSwgMCk7DQor IHJldHVybiBuZTsNCisgfQ0KKw0KKyBkZXZfd2FybigmbmRldi0+cGNpZGV2LT5kZXYsICIlczog ZGV2aWNlICVzIG9wZW4iLA0KKyBfX2Z1bmNfXywgcGNpX25hbWUobmRldi0+cGNpZGV2KSk7DQor DQorIHJldHVybiAwOw0KK30NCisNCisvKioNCisgKiBSZWxlYXNlcyBhbiBOU0hJRUxEIFNPTE8g ZGV2aWNlLg0KKyAqDQorICogVGhlIGtlcm5lbCBjYWxscyB0aGlzIGZ1bmN0aW9uIHdoZW4gYSB1 c2VyIHRyaWVzIHRvIGNsb3NlIGFuDQorICogTlNISUVMRCBTT0xPIGRldmljZS4gIEl0IGlzIGFu IGVycm9yIHRvIGF0dGVtcHQgdG8gY2xvc2UgYW4NCisgKiBhbHJlYWR5IGNsb3NlZCBkZXZpY2Uu DQorICoNCisgKiBAcGFyYW0gbm9kZSBkZXZpY2UgaW5vZGUgcG9pbnRlci4NCisgKiBAcGFyYW0g ZmlsZSAgZGV2aWNlIGZpbGUgcG9pbnRlci4NCisgKiBAcmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwu DQorICovDQorc3RhdGljIGludCBuZnBfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKm5vZGUsIHN0cnVj dCBmaWxlICpmaWxlKQ0KK3sNCisgc3RydWN0IG5mcF9kZXYgKm5kZXY7DQorIGxvbmcgdGltZW91 dDsNCisgaW50IG5lOw0KKyBpbnQgbWlub3IgPSBNSU5PUihJTk9ERV9GUk9NX0ZJTEUoZmlsZSkt PmlfcmRldik7DQorDQorIC8qIGZpbmQgbmRldiBmcm9tIG1pbm9yICovDQorIGlmIChtaW5vciA+ PSBORlBfTUFYREVWKSB7DQorIHByX2VycigiJXM6IG1pbm9yIG91dCBvZiByYW5nZS4iLCBfX2Z1 bmNfXyk7DQorIHJldHVybigtRU5PREVWKTsNCisgfQ0KKw0KKyBuZGV2ID0gbmZwX2Rldl9saXN0 W21pbm9yXTsNCisgaWYgKCFuZGV2KSB7DQorIHByX2VycigiJXM6IGVycm9yOiBubyBkZXZpY2Ui LCBfX2Z1bmNfXyk7DQorIHJldHVybiAtRU5PREVWOw0KKyB9DQorDQorIGRldl9kYmcoJm5kZXYt PnBjaWRldi0+ZGV2LCAiJXM6IGVudGVyZWQiLCBfX2Z1bmNfXyk7DQorDQorIGRldl93YXJuKCZu ZGV2LT5wY2lkZXYtPmRldiwgIiVzOiBjbG9zaW5nIGZpbGUgYXQgJXAuIiwgX19mdW5jX18sIGZp bGUpOw0KKw0KKyB7DQorIHdhaXRfcXVldWVfZW50cnlfdCB3YWl0Ow0KKw0KKyB0aW1lb3V0ID0g MTsNCisgaW5pdF93YWl0cXVldWVfZW50cnkoJndhaXQsIGN1cnJlbnQpOw0KKyBjdXJyZW50LT5z dGF0ZSA9IFRBU0tfVU5JTlRFUlJVUFRJQkxFOw0KKyBhZGRfd2FpdF9xdWV1ZSgmbmRldi0+cmRf cXVldWUsICZ3YWl0KTsNCisgaWYgKHRlc3RfYml0KFdBSVRfQklULCAmbmRldi0+cmRfb3V0c3Rh bmRpbmcpKSB7DQorIGRldl9kYmcoJm5kZXYtPnBjaWRldi0+ZGV2LA0KKyAiJXM6IHJlYWQgb3V0 c3RhbmRpbmciLCBfX2Z1bmNfXyk7DQorIHRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KE5GUF9U SU1FT1VUKTsNCisgZGV2X2RiZygmbmRldi0+cGNpZGV2LT5kZXYsDQorICIlczogZmluaXNoZWQg d2FpdGluZyIsIF9fZnVuY19fKTsNCisgfQ0KKyBjdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklO RzsNCisgcmVtb3ZlX3dhaXRfcXVldWUoJm5kZXYtPnJkX3F1ZXVlLCAmd2FpdCk7DQorIGlmICgh dGltZW91dCkgew0KKyBkZXZfZXJyKCZuZGV2LT5wY2lkZXYtPmRldiwNCisgIiVzOiBvdXRzdGFu ZGluZyByZWFkIHRpbWVkIG91dCIsIF9fZnVuY19fKTsNCisgfQ0KKyB9DQorDQorIGF0b21pY19z ZXQoJm5kZXYtPmJ1c3ksIDEpOw0KKyBpZiAodGVzdF9iaXQoV0FJVF9CSVQsICZuZGV2LT5yZF9v dXRzdGFuZGluZykpIHsNCisgZGVsX3RpbWVyX3N5bmMoJm5kZXYtPnJkX3RpbWVyKTsNCisgLyog bWFrZSBzdXJlIHRoYXQgZGVsX3RpbWVyX3N5bmMgaXMgZG9uZSBiZWZvcmUNCisgKiB3ZSBjbGVh ciByZF9vdXRzdGFuZGluZw0KKyAqLw0KKyBzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsNCisgY2xl YXJfYml0KFdBSVRfQklULCAmbmRldi0+cmRfb3V0c3RhbmRpbmcpOw0KKyB9DQorIGF0b21pY19z ZXQoJm5kZXYtPmJ1c3ksIDApOw0KKw0KKyAvKiBjbG9zZSBkZXZpY2UgKi8NCisNCisgbmUgPSBu ZGV2LT5jbWRkZXYtPmNsb3NlKG5kZXYtPmNtZGN0eCk7DQorIGlmIChuZSAhPSAwKSB7DQorIGRl dl9lcnIoJm5kZXYtPnBjaWRldi0+ZGV2LA0KKyAiJXM6IGRldmljZSBjbG9zZSBmYWlsZWQiLCBf X2Z1bmNfXyk7DQorIHJldHVybiBuZTsNCisgfQ0KKw0KKyByZXR1cm4oMCk7DQorfQ0KKw0KKy8q Kg0KKyAqIE5TSElFTEQgU09MTyBjaGFyYWN0ZXIgZGV2aWNlIGZpbGUgb3BlcmF0aW9ucyB0YWJs ZS4NCisgKi8NCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuZnBfZm9wcyA9 IHsgLm93bmVyID0gVEhJU19NT0RVTEUsDQorIC5wb2xsID0gbmZwX3BvbGwsDQorIC53cml0ZSA9 IG5mcF93cml0ZSwNCisgLnJlYWQgPSBuZnBfcmVhZCwNCisgLnVubG9ja2VkX2lvY3RsID0gbmZw X3VubG9ja2VkX2lvY3RsLA0KKyAub3BlbiA9IG5mcF9vcGVuLA0KKyAucmVsZWFzZSA9IG5mcF9y ZWxlYXNlLA0KK307DQorDQorLyoqDQorICogQGFkZHRvZ3JvdXAgZGV2bWdyDQorICogTlNISUVM RCBTT0xPIGRldmljZSBtYW5hZ2VtZW50Lg0KKyAqIEB7DQorICovDQorDQorLyogZGV2aWNlIHNl dHVwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICov DQorDQorc3RhdGljIHZvaWQgbmZwX2Rldl9kZXN0cm95KHN0cnVjdCBuZnBfZGV2ICpuZGV2LCBz dHJ1Y3QgcGNpX2RldiAqcGNpX2RldikNCit7DQorIGludCBpOw0KKw0KKyAvKiBjaGVjayBmb3Ig ZGV2aWNlICovDQorIGlmICghbmRldikgew0KKyBwcl9lcnIoIiVzOiBlcnJvcjogbm8gZGV2aWNl IiwgX19mdW5jX18pOw0KKyByZXR1cm47DQorIH0NCisNCisgZGV2X2RiZygmbmRldi0+cGNpZGV2 LT5kZXYsICIlczogZW50ZXJlZCIsIF9fZnVuY19fKTsNCisgaWYgKG5kZXYpIHsNCisgbmZwX2Zy ZWVfcGNpX3B1c2gobmRldik7DQorIG5mcF9mcmVlX3BjaV9wdWxsKG5kZXYpOw0KKw0KKyBpZiAo bmRldi0+aXJxKSB7DQorIGRldl9ub3RpY2UoJm5kZXYtPnBjaWRldi0+ZGV2LCAiJXM6IGZyZWVp bmcgaXJxLCAleCIsDQorICAgIF9fZnVuY19fLCBuZGV2LT5pcnEpOw0KKyBmcmVlX2lycShuZGV2 LT5pcnEsIG5kZXYpOw0KKyB9DQorIGZvciAoaSA9IDA7IGkgPCA2OyBpKyspDQorIGlmIChuZGV2 LT5iYXJbaV0pIHsNCisgZGV2X25vdGljZSgmbmRldi0+cGNpZGV2LT5kZXYsDQorICAgICIlczog ZnJlZWluZyBNRU0gQkFSLCAlZCIsDQorICAgIF9fZnVuY19fLCBpKTsNCisgcmVsZWFzZV9tZW1f cmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LA0KKyAgICAgICBpKSwNCisgICAgcGNp X3Jlc291cmNlX2xlbihwY2lfZGV2LA0KKyAgICAgaSkpOw0KKyBpb3VubWFwKG5kZXYtPmJhcltp XSk7DQorIH0NCisgZGV2X25vdGljZSgmbmRldi0+cGNpZGV2LT5kZXYsICIlczogZnJlZWluZyBu ZGV2IiwgX19mdW5jX18pOw0KKyBrZnJlZShuZGV2KTsNCisgfQ0KK30NCisNCitzdGF0aWMgaW50 IG5mcF9zZXR1cChjb25zdCBzdHJ1Y3QgbmZwY21kX2RldiAqY21kZGV2LCB1OCBidXMsIHU4IHNs b3QsDQorICAgICAgdTMyIGJhcls2XSwgdTMyIGlycV9saW5lLCBzdHJ1Y3QgcGNpX2RldiAqcGNp ZGV2KQ0KK3sNCisgc3RydWN0IG5mcF9kZXYgKm5kZXYgPSAwOw0KKyBpbnQgbmU7DQorIGludCBp Ow0KKw0KKyBkZXZfd2FybigmcGNpZGV2LT5kZXYsDQorICIlczogRm91bmQgJyVzJyBhdCBidXMg JXgsIHNsb3QgJXgsIGlycSAlZC4iLA0KKyBfX2Z1bmNfXywgY21kZGV2LT5uYW1lLCBidXMsIHNs b3QsIGlycV9saW5lKTsNCisNCisgaWYgKG5mcF9udW1fZGV2aWNlcyA+PSBORlBfTUFYREVWKSB7 DQorIGRldl9lcnIoJnBjaWRldi0+ZGV2LA0KKyAiJXM6IG1pbm9yIG91dCBvZiByYW5nZS4iLCBf X2Z1bmNfXyk7DQorIGdvdG8gZmFpbF9jb250aW51ZTsNCisgfQ0KKw0KKyBuZGV2ID0ga3phbGxv YyhzaXplb2YoKm5kZXYpLCBHRlBfS0VSTkVMKTsNCisgaWYgKCFuZGV2KSB7DQorIC8qIGxvZ2dl ZCBieSB0aGUgYWxsb2NhdG9yICovDQorIGdvdG8gZmFpbF9jb250aW51ZTsNCisgfQ0KKyBkZXZf d2FybigmcGNpZGV2LT5kZXYsDQorICIlczogYWxsb2NhdGVkIGRldmljZSBzdHJ1Y3R1cmUuIiwg X19mdW5jX18pOw0KKw0KKyBuZGV2LT5idXNubyA9IGJ1czsNCisgbmRldi0+cGNpZGV2ID0gcGNp ZGV2Ow0KKyBuZGV2LT5zbG90bm8gPSBzbG90Ow0KKyBuZGV2LT5jbWRkZXYgPSBjbWRkZXY7DQor DQorIGZvciAoaSA9IDA7IGkgPCBORlBfQkFSU0laRVNfQ09VTlQ7IGkrKykgew0KKyBpbnQgbWFw X2Jhcl9zaXplID0gY21kZGV2LT5iYXJfc2l6ZXNbaV0gJiBORlBfQkFSU0laRVNfTUFTSzsNCisg aW50IGJhcl9mbGFncyA9IGNtZGRldi0+YmFyX3NpemVzW2ldICYgfk5GUF9CQVJTSVpFU19NQVNL Ow0KKw0KKyBpZiAobWFwX2Jhcl9zaXplKSB7DQorIGlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHBj aV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIGkpLA0KKyBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwg aSksDQorIGNtZGRldi0+bmFtZSkpIHsNCisgZGV2X2VycigmbmRldi0+cGNpZGV2LT5kZXYsDQor ICIlczogcmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZCwgJWxseCAlbGx4ICVkICglcykiLA0KKyBf X2Z1bmNfXywNCisgcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgaSksDQorIHBjaV9yZXNvdXJj ZV9sZW4ocGNpZGV2LCBpKSwgaSwNCisgY21kZGV2LT5uYW1lKTsNCisgZ290byBmYWlsX2NvbnRp bnVlOw0KKyB9DQorDQorIGlmIChiYXJfZmxhZ3MgJiBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX1BS RUZFVENIQUJMRSkgew0KKyBuZGV2LT5iYXJbaV0gPQ0KKyBpb3JlbWFwKGJhcltpXSwgbWFwX2Jh cl9zaXplKTsNCisgfSBlbHNlIHsNCisgbmRldi0+YmFyW2ldID0NCisgaW9yZW1hcF9ub2NhY2hl KGJhcltpXSwgbWFwX2Jhcl9zaXplKTsNCisgfQ0KKw0KKyBpZiAoIW5kZXYtPmJhcltpXSkgew0K KyBkZXZfZXJyKCZuZGV2LT5wY2lkZXYtPmRldiwNCisgIiVzOiB1bmFibGUgdG8gbWFwIG1lbW9y eSBCQVIgJWQsICgweCV4KS4iLA0KKyBfX2Z1bmNfXywgaSwgYmFyW2ldKTsNCisgZ290byBmYWls X2NvbnRpbnVlOw0KKyB9DQorIH0NCisgfQ0KKw0KKyBtdXRleF9pbml0KCZuZGV2LT5pb2N0bF9t dXRleCk7DQorDQorIGluaXRfd2FpdHF1ZXVlX2hlYWQoJm5kZXYtPndyX3F1ZXVlKTsNCisgaW5p dF93YWl0cXVldWVfaGVhZCgmbmRldi0+cmRfcXVldWUpOw0KKw0KKyBzZXRfYml0KDAsICZuZGV2 LT53cl9yZWFkeSk7DQorDQorIG5lID0gbmRldi0+Y21kZGV2LT5jcmVhdGUobmRldik7DQorIGlm IChuZSAhPSAwKSB7DQorIGRldl9lcnIoJm5kZXYtPnBjaWRldi0+ZGV2LA0KKyAiJXM6IGZhaWxl ZCB0byBjcmVhdGUgY29tbWFuZCBkZXZpY2UgKCVkKSIsDQorIF9fZnVuY19fLCBuZSk7DQorIGdv dG8gZmFpbF9jb250aW51ZTsNCisgfQ0KKw0KKyBpZiAocmVxdWVzdF9pcnEoaXJxX2xpbmUsIG5m cF9pc3IsIElSUUZfU0hBUkVELCBjbWRkZXYtPm5hbWUsIG5kZXYpKSB7DQorIGRldl9lcnIoJm5k ZXYtPnBjaWRldi0+ZGV2LA0KKyAiJXM6IHVuYWJsZSB0byBjbGFpbSBpbnRlcnJ1cHQuIiwgX19m dW5jX18pOw0KKyBnb3RvIGZhaWxfY29udGludWU7DQorIH0NCisgbmRldi0+aXJxID0gaXJxX2xp bmU7DQorDQorIG1lbXNldCgmbmRldi0+c3RhdHMsIDAsIHNpemVvZihuZGV2LT5zdGF0cykpOw0K Kw0KKyBwY2lfc2V0X2RydmRhdGEocGNpZGV2LCBuZGV2KTsNCisNCisgLyogc2V0dXAgdGltZW91 dCB0aW1lciAqLw0KKyB0aW1lcl9zZXR1cCgmbmRldi0+cmRfdGltZXIsIG5mcF9yZWFkX3RpbWVv dXQsIDApOw0KKyBtb2RfdGltZXIoJm5kZXYtPnJkX3RpbWVyLCBqaWZmaWVzICsgKE5GUF9USU1F T1VUX1NFQyAqIEhaKSk7DQorDQorIG5mcF9kZXZfbGlzdFtuZnBfbnVtX2RldmljZXNdID0gbmRl djsNCisgZGV2aWNlX2NyZWF0ZShuZnBfY2xhc3MsIE5VTEwsIC8qIHBhcmVudCAqLw0KKyAgICAg ICBNS0RFVihORlBfTUFKT1IsIG5mcF9udW1fZGV2aWNlcyksIE5VTEwsIC8qIGRydmRhdGEgKi8N CisgICAgICAgIm5zaGllbGRfc29sbyVkIiwgbmZwX251bV9kZXZpY2VzKTsNCisgZGV2X3dhcm4o Jm5kZXYtPnBjaWRldi0+ZGV2LCAiJXM6IG5mcF9udW1fZGV2aWNlcz0gJWQsIG5kZXYgPSAlcC4i LA0KKyBfX2Z1bmNfXywgbmZwX251bV9kZXZpY2VzLCBuZGV2KTsNCisgbmZwX251bV9kZXZpY2Vz Kys7DQorIHJldHVybiAxOw0KKw0KK2ZhaWxfY29udGludWU6DQorIG5mcF9kZXZfZGVzdHJveShu ZGV2LCBwY2lkZXYpOw0KKw0KKyByZXR1cm4gMDsNCit9DQorDQorLyogZGV2aWNlIHByb2Jpbmcg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSAqLw0KKw0KKy8qKg0KKyAqIEFkZHMgYSBQQ0kgZGV2aWNlIHRvIHRoZSBtb2R1bGUuIFRoZSBQ Q0kgc3Vic3lzdGVtIGNhbGxzIHRoaXMgZnVuY3Rpb24NCisgKiB3aGVuIGEgUENJIGRldmljZSBp cyBmb3VuZC4NCisgKg0KKyAqIEBwYXJhbSBwY2lkZXYgUENJIGRldmljZS4NCisgKiBAcGFyYW0g aWQgUENJIGRldmljZSBpZHMuDQorICogQHJldHVybnMgMCBpZiBzdWNjZXNzZnVsLg0KKyAqLw0K K3N0YXRpYyBpbnQgbmZwX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2LA0KKyBzdHJ1 Y3QgcGNpX2RldmljZV9pZCBjb25zdCAqaWQpDQorew0KKyBpbnQgaTsNCisgdTMyIGJhcls2XTsN CisgY29uc3Qgc3RydWN0IG5mcGNtZF9kZXYgKm5mcF9kcnZsaXN0W10gPSB7ICZpMjE1NTVfY21k ZGV2LA0KKyAgICAmZnNsX3QxMDIyX2NtZGRldiwgTlVMTCB9Ow0KKyBjb25zdCBzdHJ1Y3QgbmZw Y21kX2RldiAqY21kZGV2ID0gbmZwX2Rydmxpc3RbaWQtPmRyaXZlcl9kYXRhXTsNCisgdTY0IGlv c2l6ZTsNCisgdTMyIGlycV9saW5lOw0KKyBpbnQgcG9zID0gMHU7DQorIGludCBlcnIgPSAwOw0K Kw0KKyBpZiAoIXBjaWRldiB8fCAhaWQpIHsNCisgcHJfZXJyKCIlczogcGNpZGV2IG9yIGlkIHdh cyBOVUxMISIsIF9fZnVuY19fKTsNCisgcmV0dXJuIC1FTk9ERVY7DQorIH0NCisNCisgZGV2X25v dGljZSgmcGNpZGV2LT5kZXYsICIlczogcHJvYmluZyBQQ0kgZGV2aWNlICVzIiwNCisgICAgX19m dW5jX18sIHBjaV9uYW1lKHBjaWRldikpOw0KKw0KKyAvKiBlbmFibGUgdGhlIGRldmljZSAqLw0K KyBlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2lkZXYpOw0KKyBpZiAoZXJyKSB7DQorIGRldl9l cnIoJnBjaWRldi0+ZGV2LCAiJXM6IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCIsIF9fZnVuY19f KTsNCisgZXJyID0gLUVOT0RFVjsNCisgZ290byBwcm9iZV9lcnI7DQorIH0NCisNCisgcGNpX3Nl dF9tYXN0ZXIocGNpZGV2KTsNCisNCisgLyogc2F2ZSBQQ0kgZGV2aWNlIGluZm8gKi8NCisgaXJx X2xpbmUgPSBwY2lkZXYtPmlycTsNCisgZm9yIChpID0gMDsgaSA8IE5GUF9CQVJTSVpFU19DT1VO VDsgKytpKSB7DQorIGlvc2l6ZSA9IGNtZGRldi0+YmFyX3NpemVzW2ldICYgTkZQX0JBUlNJWkVT X01BU0s7DQorIGlmIChwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgaSkgPCBpb3NpemUpIHsNCisg ZGV2X2VycigmcGNpZGV2LT5kZXYsDQorICIlczogJXMgcmVnaW9uIHJlcXVlc3Qgb3ZlcmZsb3c6 IGJhciAlZCwgcmVxdWVzdGVkICVsbHgsIG1heGltdW0gJWxseCIsDQorIF9fZnVuY19fLCBwY2lf bmFtZShwY2lkZXYpLCBpLCBpb3NpemUsDQorIHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCBpKSk7 DQorIGVyciA9IC1FTk9ERVY7DQorIGdvdG8gcHJvYmVfZXJyOw0KKyB9DQorIGJhcltpXSA9IHBj aV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIGkpOw0KKyB9DQorDQorIGlmIChjbWRkZXYtPmZsYWdz ICYgTkZQX0NNRF9GTEdfTkVFRF9NU0kpIHsNCisgcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShw Y2lkZXYsIFBDSV9DQVBfSURfTVNJKTsNCisgaWYgKCFwb3MpIHsNCisgZGV2X2VycigmcGNpZGV2 LT5kZXYsICIlczogJXMgTVNJIG5vdCBzdXBwb3J0ZWQiLA0KKyBfX2Z1bmNfXywgcGNpX25hbWUo cGNpZGV2KSk7DQorIGVyciA9IC1FTk9ERVY7DQorIGdvdG8gcHJvYmVfZXJyOw0KKyB9DQorIGRl dl9lcnIoJnBjaWRldi0+ZGV2LCAiJXM6ICVzIE1TSSBzdXBwb3J0IGF0ICVkIiwNCisgX19mdW5j X18sIHBjaV9uYW1lKHBjaWRldiksIHBvcyk7DQorDQorIGVyciA9IHBjaV9lbmFibGVfbXNpKHBj aWRldik7DQorIGlmIChlcnIpIHsNCisgZGV2X2VycigmcGNpZGV2LT5kZXYsDQorICIlczogJXMg dW5hYmxlIHRvIGVuYWJsZSBNU0kiLA0KKyBfX2Z1bmNfXywgcGNpX25hbWUocGNpZGV2KSk7DQor IGdvdG8gcHJvYmVfZXJyOw0KKyB9DQorDQorIC8qIElSUSB2ZWN0b3IgY2hhbmdlcyBpZiBNU0kg aXMgZW5hYmxlZC4gKi8NCisgaXJxX2xpbmUgPSBwY2lkZXYtPmlycTsNCisgZGV2X25vdGljZSgm cGNpZGV2LT5kZXYsICIlczogJXMgTVNJIElSUSBhdCAlZCIsDQorICAgIF9fZnVuY19fLCBwY2lf bmFtZShwY2lkZXYpLCBpcnFfbGluZSk7DQorIH0NCisNCisgZGV2X3dhcm4oJnBjaWRldi0+ZGV2 LCAiJXM6IGRldm5hbWUgJXMsIHNsb3RuYW1lICVzLCBidXNuYW1lICVzIiwNCisgX19mdW5jX18s ICIiLCBwY2lfbmFtZShwY2lkZXYpLCBwY2lkZXYtPmJ1cy0+bmFtZSk7DQorDQorIGVyciA9IG5m cF9zZXR1cChjbWRkZXYsIHBjaWRldi0+YnVzLT5udW1iZXIsIFBDSV9TTE9UKHBjaWRldi0+ZGV2 Zm4pLA0KKyBiYXIsIGlycV9saW5lLCBwY2lkZXYpOw0KKyBpZiAoIWVycikgew0KKyBlcnIgPSAt RU5PREVWOw0KKyBnb3RvIHByb2JlX2VycjsNCisgfQ0KKw0KKyByZXR1cm4gMDsNCisNCitwcm9i ZV9lcnI6DQorIHBjaV9kaXNhYmxlX21zaShwY2lkZXYpOw0KKyBwY2lfY2xlYXJfbWFzdGVyKHBj aWRldik7DQorIHBjaV9kaXNhYmxlX2RldmljZShwY2lkZXYpOw0KKyByZXR1cm4gZXJyOw0KK30N CisNCisvKioNCisgKiBSZW1vdmVzIGEgUENJIGRldmljZSBmcm9tIHRoZSBtb2R1bGUuIFRoZSBQ Q0kgc3Vic3lzdGVtIGNhbGxzIHRoaXMgZnVuY3Rpb24NCisgKiB3aGVuIGEgUENJIGRldmljZSBp cyByZW1vdmVkLg0KKyAqDQorICogQHBhcmFtIHBjaWRldiBQQ0kgZGV2aWNlLg0KKyAqIEByZXR1 cm5zIDAgaWYgc3VjY2Vzc2Z1bC4NCisgKi8NCitzdGF0aWMgdm9pZCBuZnBfcGNpX3JlbW92ZShz dHJ1Y3QgcGNpX2RldiAqcGNpZGV2KQ0KK3sNCisgaW50IGluZGV4Ow0KKyBzdHJ1Y3QgbmZwX2Rl diAqbmRldjsNCisNCisgZGV2X2VycigmcGNpZGV2LT5kZXYsICIlczogcmVtb3ZpbmcgUENJIGRl dmljZSAlcyIsDQorIF9fZnVuY19fLCBwY2lfbmFtZShwY2lkZXYpKTsNCisNCisgLyogZmluZCBl eGlzdGluZyBkZXZpY2UgKi8NCisNCisgbmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lkZXYpOw0K KyBpZiAoIW5kZXYpIHsNCisgZGV2X2VycigmcGNpZGV2LT5kZXYsDQorICIlczogbm8gTlNISUVM RCBTT0xPIGRldmljZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBQQ0kgZGV2aWNlIiwNCisgX19mdW5j X18pOw0KKyByZXR1cm47DQorIH0NCisNCisgLyogZGVzdHJveSBjb21tb24gZGV2aWNlICovDQor DQorIGlmIChuZGV2LT5jbWRkZXYpDQorIG5kZXYtPmNtZGRldi0+ZGVzdHJveShuZGV2LT5jbWRj dHgpOw0KKw0KKyBuZnBfZGV2X2Rlc3Ryb3kobmRldiwgcGNpZGV2KTsNCisNCisgcGNpX2Rpc2Fi bGVfbXNpKHBjaWRldik7DQorIHBjaV9jbGVhcl9tYXN0ZXIocGNpZGV2KTsNCisgcGNpX2Rpc2Fi bGVfZGV2aWNlKHBjaWRldik7DQorDQorIGluZGV4ID0gMDsNCisgd2hpbGUgKGluZGV4IDwgTkZQ X01BWERFVikgew0KKyBpZiAobmZwX2Rldl9saXN0W2luZGV4XSA9PSBuZGV2KSB7DQorIG5mcF9k ZXZfbGlzdFtpbmRleF0gPSBOVUxMOw0KKyBkZXZpY2VfZGVzdHJveShuZnBfY2xhc3MsIE1LREVW KE5GUF9NQUpPUiwgaW5kZXgpKTsNCisgfQ0KKyBpbmRleCsrOw0KKyB9DQorfQ0KKw0KKy8qKg0K KyAqIFBDSSBkZXZpY2UgSUQgdGFibGUuICBXZSB1c2UgdGhlIGRyaXZlcl9kYXRhIGZpZWxkIHRv IGhvbGQgYW4gaW5kZXggaW50bw0KKyAqIG5mcF9kcnZsaXN0LCBzbyBiZWFyIHRoYW4gaW4gbWlu ZCB3aGVuIGVkaXRpbmcgZWl0aGVyLg0KKyAqLw0KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9p ZCBuZnBfcGNpX3RibFtdID0gew0KKyB7DQorIFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJ Q0VfSURfSU5URUxfMjE1NTUsDQorIFBDSV9WRU5ET1JfSURfTkNJUEhFUiwgUENJX1NVQlNZU1RF TV9JRF9ORkFTVF9SRVYxLCAwLA0KKyAwLCAvKiBJZ25vcmUgY2xhc3MgKi8NCisgMCAvKiBJbmRl eCBpbnRvIG5mcF9kcnZsaXN0ICovDQorIH0sDQorIHsNCisgUENJX1ZFTkRPUl9JRF9GUkVFU0NB TEUsIFBDSV9ERVZJQ0VfSURfRlJFRVNDQUxFX1QxMDIyLA0KKyBQQ0lfVkVORE9SX0lEX05DSVBI RVIsIFBDSV9TVUJTWVNURU1fSURfTkZBU1RfUkVWMSwgMCwNCisgMCwgLyogSWdub3JlIGNsYXNz ICovDQorIDEgLyogSW5kZXggaW50byBuZnBfZHJ2bGlzdCAqLw0KKyB9LA0KKyB7DQorIDAsDQor IH0gLyogdGVybWluYXRlIGxpc3QgKi8NCit9Ow0KK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBu ZnBfcGNpX3RibCk7DQorDQorLyoqDQorICogUENJIGRyaXZlciBvcGVyYXRpb25zLg0KKyAqLw0K K3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuZnBfcGNpX2RyaXZlciA9IHsgLm5hbWUgPSAibnNo aWVsZF9zb2xvIiwNCisgICAgIC5wcm9iZSA9IG5mcF9wY2lfcHJvYmUsDQorICAgICAucmVtb3Zl ID0gbmZwX3BjaV9yZW1vdmUsDQorICAgICAuaWRfdGFibGUgPSBuZnBfcGNpX3RibCB9Ow0KKw0K Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qICBpbml0ICAgICAgICAgICAgICAqLw0KKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyBpbnQgbmZwX2luaXQodm9pZCkNCit7 DQorIGludCBpbmRleDsNCisNCisgcHJfaW5mbygiJXM6IGVudGVyZWQiLCBfX2Z1bmNfXyk7DQor DQorIGlmIChyZWdpc3Rlcl9jaHJkZXYoTkZQX01BSk9SLCBORlBfRFJWTkFNRSwgJm5mcF9mb3Bz KSkgew0KKyBwcl9lcnIoInVuYWJsZSB0byBnZXQgbWFqb3IgZm9yIG5zaGllbGRfc29sbyBkZXZp Y2UuIik7DQorIHJldHVybiAtRUlPOw0KKyB9DQorDQorIGZvciAoaW5kZXggPSAwOyBpbmRleCA8 IE5GUF9NQVhERVY7IGluZGV4KyspDQorIG5mcF9kZXZfbGlzdFtpbmRleF0gPSBOVUxMOw0KKw0K KyBuZnBfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJuc2hpZWxkX3NvbG8iKTsN CisgaWYgKElTX0VSUihuZnBfY2xhc3MpKSB7DQorIHByX2VycigiJXM6IGZhaWxlZCB0byBjcmVh dGUgYSBjbGFzcyBmb3IgdGhpcyBkZXZpY2UsIGVyciA9ICVsZCIsDQorICAgICAgICBfX2Z1bmNf XywgUFRSX0VSUihuZnBfY2xhc3MpKTsNCisgcmV0dXJuIC1FSU87DQorIH0NCisNCisgaW5kZXgg PSAwOw0KKyByZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmbmZwX3BjaV9kcml2ZXIpOw0KK30N CisNCisvKiogQH0gKi8NCisNCisvKioNCisgKiBJbml0aWFsaXplcyB0aGlzIE5TSElFTEQgU09M TyBrZXJuZWwgbW9kdWxlLg0KKyAqLw0KK3N0YXRpYyBpbnQgX19pbml0IG5mcF9tb2R1bGVfaW5p dCh2b2lkKQ0KK3sNCisgaW50IGVycjsNCisNCisgcHJfZXJyKCIlczogaW5zZXJ0aW5nIG5zaGll bGRfc29sbyBtb2R1bGUiLCBfX2Z1bmNfXyk7DQorDQorIGVyciA9IG5mcF9pbml0KCk7DQorDQor IHJldHVybiBlcnI7DQorfQ0KKw0KKy8qKg0KKyAqIEV4aXRzIHRoaXMgTlNISUVMRCBTT0xPIGtl cm5lbCBtb2R1bGUuDQorICovDQorc3RhdGljIHZvaWQgX19leGl0IG5mcF9tb2R1bGVfZXhpdCh2 b2lkKQ0KK3sNCisgcHJfbm90aWNlKCIlczogcmVtb3ZpbmcgbnNoaWVsZF9zb2xvIG1vZHVsZSIs IF9fZnVuY19fKTsNCisNCisgLyogdW5yZWdpc3RlciBwY2kgZHJpdmVyICovDQorDQorIHBjaV91 bnJlZ2lzdGVyX2RyaXZlcigmbmZwX3BjaV9kcml2ZXIpOw0KKyAvKiAuLi4gd2hpY2ggdHJpZ2dl cnMgZGV2aWNlIHJlbW92YWxzICovDQorDQorIGNsYXNzX2Rlc3Ryb3kobmZwX2NsYXNzKTsNCisN CisgdW5yZWdpc3Rlcl9jaHJkZXYoTkZQX01BSk9SLCBORlBfRFJWTkFNRSk7DQorIHByX25vdGlj ZSgiJXM6IHJlbW92ZWQgbnNoaWVsZF9zb2xvIG1vZHVsZSIsIF9fZnVuY19fKTsNCit9DQorDQor bW9kdWxlX2luaXQobmZwX21vZHVsZV9pbml0KTsNCittb2R1bGVfZXhpdChuZnBfbW9kdWxlX2V4 aXQpOw0KKw0KKy8qIGVuZCBvZiBmaWxlICovDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5n L25jaXBoZXIvaTIxNTU1LmMgYi9kcml2ZXJzL3N0YWdpbmcvbmNpcGhlci9pMjE1NTUuYw0KbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uMjlmZjZkMTBiMmVhDQotLS0g L2Rldi9udWxsDQorKysgYi9kcml2ZXJzL3N0YWdpbmcvbmNpcGhlci9pMjE1NTUuYw0KQEAgLTAs MCArMSw1NTMgQEANCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsNCisvKg0K KyAqDQorICogaTIxNTU1LmM6IG5DaXBoZXIgUENJIEhTTSBpbnRlbCAyMTU1NSBjb21tYW5kIGRy aXZlcg0KKyAqIENvcHlyaWdodCAyMDE5IG5DaXBoZXIgU2VjdXJpdHkgTHRkDQorICoNCisgKi8N CisNCisjaW5jbHVkZSAic29sby5oIg0KKyNpbmNsdWRlICJpMjE1NTUuaCINCisNCisvKiBwY2kg Zml4ZWQgbGVuZ3RoIGFjY2Vzc29ycy4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KKyAqIFRoZSBiZWxvdyBmdW5jdGlvbnMgYXJlIHVzZWQgcHJlZG9taW5hbnRseQ0KKyAqIHRv IGFjY2VzcyBDU1IgcmVnaXN0ZXJzIGluIHBjaSBtZW1vcnkgc3BhY2UuDQorICovDQorc3RhdGlj IHUzMiBuZnBfaW5sKHN0cnVjdCBuZnBfZGV2ICpuZGV2LCBpbnQgYmFyLCBpbnQgb2Zmc2V0KQ0K K3sNCisgZGV2X2RiZygmbmRldi0+cGNpZGV2LT5kZXYsDQorICIlczogYWRkciAlcCIsIF9fZnVu Y19fLCBuZGV2LT5iYXJbYmFyXSArIG9mZnNldCk7DQorIHJldHVybiBsZTMyX3RvX2NwdShpb3Jl YWQzMihuZGV2LT5iYXJbYmFyXSArIG9mZnNldCkpOw0KK30NCisNCitzdGF0aWMgdTE2IG5mcF9p bncoc3RydWN0IG5mcF9kZXYgKm5kZXYsIGludCBiYXIsIGludCBvZmZzZXQpDQorew0KKyBkZXZf ZGJnKCZuZGV2LT5wY2lkZXYtPmRldiwNCisgIiVzOiBhZGRyICVwIiwgX19mdW5jX18sIG5kZXYt PmJhcltiYXJdICsgb2Zmc2V0KTsNCisgcmV0dXJuIGxlMTZfdG9fY3B1KGlvcmVhZDE2KG5kZXYt PmJhcltiYXJdICsgb2Zmc2V0KSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG5mcF9vdXRsKHN0cnVj dCBuZnBfZGV2ICpuZGV2LCBpbnQgYmFyLCBpbnQgb2Zmc2V0LCB1MzIgZGF0YSkNCit7DQorIGRl dl9kYmcoJm5kZXYtPnBjaWRldi0+ZGV2LCAiJXM6IGFkZHIgJXAsIGRhdGEgJXgiLA0KKyBfX2Z1 bmNfXywgbmRldi0+YmFyW2Jhcl0gKyBvZmZzZXQsIGRhdGEpOw0KKyBpb3dyaXRlMzIoY3B1X3Rv X2xlMzIoZGF0YSksIG5kZXYtPmJhcltiYXJdICsgb2Zmc2V0KTsNCit9DQorDQorc3RhdGljIHZv aWQgbmZwX291dHcoc3RydWN0IG5mcF9kZXYgKm5kZXYsIGludCBiYXIsIGludCBvZmZzZXQsIHUx NiBkYXRhKQ0KK3sNCisgZGV2X2RiZygmbmRldi0+cGNpZGV2LT5kZXYsICIlczogYWRkciAlcCwg ZGF0YSAleCIsDQorIF9fZnVuY19fLCBuZGV2LT5iYXJbYmFyXSArIG9mZnNldCwgZGF0YSk7DQor IGlvd3JpdGUxNihjcHVfdG9fbGUxNihkYXRhKSwgbmRldi0+YmFyW2Jhcl0gKyBvZmZzZXQpOw0K K30NCisNCitzdGF0aWMgaW50IG5mcF9jb25maWdfaW5sKHN0cnVjdCBuZnBfZGV2ICpuZGV2LCBp bnQgb2Zmc2V0LCB1MzIgKnJlcykNCit7DQorIGlmICghbmRldiB8fCAhbmRldi0+cGNpZGV2KQ0K KyByZXR1cm4gLUVOT0RFVjsNCisgcGNpX3JlYWRfY29uZmlnX2R3b3JkKG5kZXYtPnBjaWRldiwg b2Zmc2V0LCByZXMpOw0KKyByZXR1cm4gMDsNCit9DQorDQorLyogc3RhcnRlZCAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKg0KKyAqIENo ZWNrIHRoYXQgZGV2aWNlIGlzIHJlYWR5IHRvIHRhbGssIGJ5IGNoZWNraW5nIHRoYXQNCisgKiB0 aGUgaTIxNTU1IGhhcyBtYXN0ZXIgZW5hYmxlZCBvbiBpdHMgc2Vjb25kYXJ5IGludGVyZmFjZQ0K KyAqLw0KKw0KK3N0YXRpYyBpbnQgaTIxNTU1X3N0YXJ0ZWQoc3RydWN0IG5mcF9kZXYgKm5kZXYp DQorew0KKyB1MzIgdG1wMzI7DQorIGludCBuZTsNCisNCisgLyogY2hlY2sgZm9yIGRldmljZSAq Lw0KKyBpZiAoIW5kZXYpIHsNCisgcHJfZXJyKCIlczogZXJyb3I6IG5vIGRldmljZSIsIF9fZnVu Y19fKTsNCisgcmV0dXJuIC1FTk9ERVY7DQorIH0NCisNCisgZGV2X2luZm8oJm5kZXYtPnBjaWRl di0+ZGV2LCAiJXM6IGVudGVyZWQiLCBfX2Z1bmNfXyk7DQorDQorIG5lID0gbmZwX2NvbmZpZ19p bmwobmRldiwgSTIxNTU1X0NGR19TRUNfQ01EX1NUQVRVUywgJnRtcDMyKTsNCisgaWYgKG5lICE9 IDApIHsNCisgZGV2X2VycigmbmRldi0+cGNpZGV2LT5kZXYsDQorICIlczogbmZwX2NvbmZpZ19p bmwgZmFpbGVkIiwgX19mdW5jX18pOw0KKyByZXR1cm4gbmU7DQorIH0NCisNCisgdG1wMzIgPSBs ZTMyX3RvX2NwdSh0bXAzMikgJiAweGZmZmY7DQorDQorIGlmICh0bXAzMiAmIENGR19DTURfTUFT VEVSKSB7DQorIGRldl9ub3RpY2UoJm5kZXYtPnBjaWRldi0+ZGV2LA0KKyAgICAiJXM6IFllcyAl eCIsIF9fZnVuY19fLCB0bXAzMik7DQorIH0gZWxzZSB7DQorIGRldl9lcnIoJm5kZXYtPnBjaWRl di0+ZGV2LCAiJXM6IGRldmljZSBub3Qgc3RhcnRlZCB5ZXQgJXgiLA0KKyBfX2Z1bmNfXywgdG1w MzIpOw0KKyBuZSA9IC1FQUdBSU47DQorIH0NCisgcmV0dXJuIG5lOw0KK30NCisNCisvKiBjcmVh dGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSAqLw0KKw0KK3N0YXRpYyBpbnQgaTIxNTU1X2NyZWF0ZShzdHJ1Y3QgbmZwX2RldiAqbmRldikN Cit7DQorIC8qIGNoZWNrIGZvciBkZXZpY2UgKi8NCisgaWYgKCFuZGV2KSB7DQorIHByX2Vycigi JXM6IGVycm9yOiBubyBkZXZpY2UiLCBfX2Z1bmNfXyk7DQorIHJldHVybiAtRU5PREVWOw0KKyB9 DQorDQorIGRldl9pbmZvKCZuZGV2LT5wY2lkZXYtPmRldiwgIiVzOiBlbnRlcmVkIiwgX19mdW5j X18pOw0KKw0KKyAvKiBzZXQgb3VyIGNvbnRleHQgdG8ganVzdCBiZSBhIHBvaW50ZXIgdG8gb3Vy IHN0cnVjdCBuZnBfZGV2ICovDQorIG5kZXYtPmNtZGN0eCA9IG5kZXY7DQorDQorIGlmICghbmRl di0+YmFyW0NTUl9CQVJdKSB7DQorIGRldl9lcnIoJm5kZXYtPnBjaWRldi0+ZGV2LA0KKyAiJXM6 IG51bGwgQkFSWyVkXSIsIF9fZnVuY19fLCBDU1JfQkFSKTsNCisgcmV0dXJuIC1FTk9NRU07DQor IH0NCisgZGV2X3dhcm4oJm5kZXYtPnBjaWRldi0+ZGV2LCAiJXM6IGVuYWJsZSBkb29yYmVsbCIs IF9fZnVuY19fKTsNCisgbmZwX291dGwobmRldiwgQ1NSX0JBUiwgSTIxNTU1X09GRlNFVF9ET09S QkVMTF9QUklfU0VUX01BU0ssDQorIEkyMTU1NV9ET09SQkVMTF9QUklfRU5BQkxFKTsNCisgbmZw X291dGwobmRldiwgQ1NSX0JBUiwgSTIxNTU1X09GRlNFVF9ET09SQkVMTF9QUklfQ0xFQVJfTUFT SywNCisgSTIxNTU1X0RPT1JCRUxMX1BSSV9FTkFCTEUpOw0KKyByZXR1cm4gMDsNCit9DQorDQor Lyogc3RvcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tICovDQorDQorc3RhdGljIGludCBpMjE1NTVfZGVzdHJveShzdHJ1Y3QgbmZwX2RldiAq Y3R4KQ0KK3sNCisgc3RydWN0IG5mcF9kZXYgKm5kZXYgPSBjdHg7DQorDQorIC8qIGNoZWNrIGZv ciBkZXZpY2UgKi8NCisgaWYgKCFuZGV2KSB7DQorIHByX2VycigiJXM6IGVycm9yOiBubyBkZXZp Y2UiLCBfX2Z1bmNfXyk7DQorIHJldHVybiAtRU5PREVWOw0KKyB9DQorDQorIGRldl9pbmZvKCZu ZGV2LT5wY2lkZXYtPmRldiwgIiVzOiBlbnRlcmVkIiwgX19mdW5jX18pOw0KKw0KKyBpZiAoIW5k ZXYpIHsNCisgZGV2X2VycigmbmRldi0+cGNpZGV2LT5kZXYsICIlczogTlVMTCBuZGV2IiwgX19m dW5jX18pOw0KKyByZXR1cm4gLUVOT0RFVjsNCisgfQ0KKyBpZiAoIW5kZXYtPmJhcltDU1JfQkFS XSkgew0KKyBkZXZfZXJyKCZuZGV2LT5wY2lkZXYtPmRldiwNCisgIiVzOiBudWxsIEJBUlslZF0i LCBfX2Z1bmNfXywgQ1NSX0JBUik7DQorIHJldHVybiAtRU5PTUVNOw0KKyB9DQorIG5mcF9vdXRs KG5kZXYsIENTUl9CQVIsIEkyMTU1NV9PRkZTRVRfRE9PUkJFTExfUFJJX1NFVF9NQVNLLA0KKyBJ MjE1NTVfRE9PUkJFTExfUFJJX0RJU0FCTEUpOw0KKyBuZnBfb3V0bChuZGV2LCBDU1JfQkFSLCBJ MjE1NTVfT0ZGU0VUX0RPT1JCRUxMX1BSSV9DTEVBUl9NQVNLLA0KKyBJMjE1NTVfRE9PUkJFTExf UFJJX0RJU0FCTEUpOw0KKw0KKyByZXR1cm4gMDsNCit9DQorDQorLyogb3BlbiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorc3Rh dGljIGludCBpMjE1NTVfb3BlbihzdHJ1Y3QgbmZwX2RldiAqY3R4KQ0KK3sNCisgc3RydWN0IG5m cF9kZXYgKm5kZXYgPSBjdHg7DQorDQorIC8qIGNoZWNrIGZvciBkZXZpY2UgKi8NCisgaWYgKCFu ZGV2KSB7DQorIHByX2VycigiJXM6IGVycm9yOiBubyBkZXZpY2UiLCBfX2Z1bmNfXyk7DQorIHJl dHVybiAtRU5PREVWOw0KKyB9DQorDQorIGRldl9pbmZvKCZuZGV2LT5wY2lkZXYtPmRldiwgIiVz OiBlbnRlcmVkIiwgX19mdW5jX18pOw0KKw0KKyByZXR1cm4gMDsNCit9DQorDQorLyogY2xvc2Ug LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq Lw0KKw0KK3N0YXRpYyBpbnQgaTIxNTU1X2Nsb3NlKHN0cnVjdCBuZnBfZGV2ICpjdHgpDQorew0K KyBzdHJ1Y3QgbmZwX2RldiAqbmRldiA9IGN0eDsNCisNCisgLyogY2hlY2sgZm9yIGRldmljZSAq Lw0KKyBpZiAoIW5kZXYpIHsNCisgcHJfZXJyKCIlczogZXJyb3I6IG5vIGRldmljZSIsIF9fZnVu Y19fKTsNCisgcmV0dXJuIC1FTk9ERVY7DQorIH0NCisNCisgZGV2X2luZm8oJm5kZXYtPnBjaWRl di0+ZGV2LCAiJXM6IGVudGVyZWQiLCBfX2Z1bmNfXyk7DQorDQorIHJldHVybiAwOw0KK30NCisN CisvKiBpc3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSAqLw0KKw0KK3N0YXRpYyBpbnQgaTIxNTU1X2lzcihzdHJ1Y3QgbmZwX2RldiAqY3R4 LCBpbnQgKmhhbmRsZWQpDQorew0KKyBzdHJ1Y3QgbmZwX2RldiAqbmRldiA9IGN0eDsNCisgdTE2 IGRvb3JiZWxsOw0KKyB1MTYgdG1wMTY7DQorDQorIC8qIGNoZWNrIGZvciBkZXZpY2UgKi8NCisg aWYgKCFuZGV2KSB7DQorIHByX2VycigiJXM6IGVycm9yOiBubyBkZXZpY2UiLCBfX2Z1bmNfXyk7 DQorIHJldHVybiAtRU5PREVWOw0KKyB9DQorDQorIGRldl9pbmZvKCZuZGV2LT5wY2lkZXYtPmRl diwgIiVzOiBlbnRlcmVkIiwgX19mdW5jX18pOw0KKw0KKyAqaGFuZGxlZCA9IDA7DQorDQorIG5k ZXYtPnN0YXRzLmlzcisrOw0KKw0KKyBpZiAoIW5kZXYtPmJhcltDU1JfQkFSXSkgew0KKyBkZXZf ZXJyKCZuZGV2LT5wY2lkZXYtPmRldiwNCisgIiVzOiBudWxsIEJBUlslZF0iLCBfX2Z1bmNfXywg Q1NSX0JBUik7DQorIHJldHVybiAtRU5PTUVNOw0KKyB9DQorDQorIC8qIFRoaXMgaW50ZXJydXB0 IG1heSBub3QgYmUgZnJvbSBvdXIgbW9kdWxlLCBzbyBjaGVjayB0aGF0IGl0DQorICogYWN0dWFs bHkgaXMgdXMgYmVmb3JlIGhhbmRsaW5nIGl0Lg0KKyAqLw0KKyBkb29yYmVsbCA9IG5mcF9pbnco bmRldiwgQ1NSX0JBUiwgSTIxNTU1X09GRlNFVF9ET09SQkVMTF9QUklfU0VUKTsNCisgd2hpbGUg KGRvb3JiZWxsICYmIGRvb3JiZWxsICE9IDB4ZmZmZikgew0KKyAqaGFuZGxlZCA9IDE7DQorIC8q IHNlcnZpY2UgaW50ZXJydXB0cyAqLw0KKyBpZiAoZG9vcmJlbGwgJiAoTkZBU1RfSU5UX0RFVklD RV9XUklURV9PSyB8DQorIE5GQVNUX0lOVF9ERVZJQ0VfV1JJVEVfRkFJTEVEKSkgew0KKyBuZGV2 LT5zdGF0cy5pc3Jfd3JpdGUrKzsNCisgdG1wMTYgPSAoTkZBU1RfSU5UX0RFVklDRV9XUklURV9P SyB8DQorIE5GQVNUX0lOVF9ERVZJQ0VfV1JJVEVfRkFJTEVEKTsNCisgbmZwX291dHcobmRldiwg Q1NSX0JBUiwNCisgSTIxNTU1X09GRlNFVF9ET09SQkVMTF9QUklfQ0xFQVIsIHRtcDE2KTsNCisN CisgZGV2X3dhcm4oJm5kZXYtPnBjaWRldi0+ZGV2LA0KKyAiJXM6IHdyaXRlIGRvbmUgaW50ZXJy dXB0LCBvayA9ICVkLiIsIF9fZnVuY19fLA0KKyBkb29yYmVsbCAmIE5GQVNUX0lOVF9ERVZJQ0Vf V1JJVEVfT0sgPyAxIDogMCk7DQorDQorIG5mcF93cml0ZV9jb21wbGV0ZShuZGV2LCBkb29yYmVs bCAmDQorICAgIE5GQVNUX0lOVF9ERVZJQ0VfV1JJVEVfT0sgPyAxIDogMCk7DQorIH0NCisNCisg aWYgKGRvb3JiZWxsICYNCisgICAgIChORkFTVF9JTlRfREVWSUNFX1JFQURfT0sgfA0KKyAgICAg IE5GQVNUX0lOVF9ERVZJQ0VfUkVBRF9GQUlMRUQpKSB7DQorIG5kZXYtPnN0YXRzLmlzcl9yZWFk Kys7DQorIHRtcDE2ID0gKE5GQVNUX0lOVF9ERVZJQ0VfUkVBRF9PSyB8DQorIE5GQVNUX0lOVF9E RVZJQ0VfUkVBRF9GQUlMRUQpOw0KKyBuZnBfb3V0dyhuZGV2LCBDU1JfQkFSLA0KKyBJMjE1NTVf T0ZGU0VUX0RPT1JCRUxMX1BSSV9DTEVBUiwgdG1wMTYpOw0KKw0KKyBkZXZfd2FybigmbmRldi0+ cGNpZGV2LT5kZXYsDQorICIlczogcmVhZCBhY2sgaW50ZXJydXB0LCBvayA9ICVkLiIsIF9fZnVu Y19fLA0KKyBkb29yYmVsbCAmIE5GQVNUX0lOVF9ERVZJQ0VfUkVBRF9PSyA/IDEgOiAwKTsNCisg bmZwX3JlYWRfY29tcGxldGUobmRldiwgZG9vcmJlbGwgJg0KKyAgIE5GQVNUX0lOVF9ERVZJQ0Vf UkVBRF9PSyA/IDEgOiAwKTsNCisgfQ0KKw0KKyBpZiAoZG9vcmJlbGwgJg0KKyAgICAgfihORkFT VF9JTlRfREVWSUNFX1JFQURfT0sgfCBORkFTVF9JTlRfREVWSUNFX1JFQURfRkFJTEVEIHwNCisg ICAgICAgTkZBU1RfSU5UX0RFVklDRV9XUklURV9PSyB8DQorICAgICAgIE5GQVNUX0lOVF9ERVZJ Q0VfV1JJVEVfRkFJTEVEKSkgew0KKyBuZnBfb3V0dyhuZGV2LCBDU1JfQkFSLA0KKyBJMjE1NTVf T0ZGU0VUX0RPT1JCRUxMX1BSSV9DTEVBUiwgZG9vcmJlbGwpOw0KKyBkZXZfZXJyKCZuZGV2LT5w Y2lkZXYtPmRldiwgIiVzOiB1bmV4cGVjdGVkIGludGVycnVwdCAleCIsDQorIF9fZnVuY19fLCBk b29yYmVsbCk7DQorIH0NCisgZG9vcmJlbGwgPSBuZnBfaW53KG5kZXYsIENTUl9CQVIsDQorICAg IEkyMTU1NV9PRkZTRVRfRE9PUkJFTExfUFJJX1NFVCk7DQorIH0NCisgZGV2X25vdGljZSgmbmRl di0+cGNpZGV2LT5kZXYsICIlczogZXhpdGluZyIsIF9fZnVuY19fKTsNCisgcmV0dXJuIDA7DQor fQ0KKw0KKy8qIHdyaXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0gKi8NCisNCitzdGF0aWMgaW50IGkyMTU1NV93cml0ZSh1MzIgYWRkciwg Y29uc3QgY2hhciAqYmxvY2ssIGludCBsZW4sDQorIHN0cnVjdCBuZnBfZGV2ICpjdHgpDQorew0K KyBzdHJ1Y3QgbmZwX2RldiAqbmRldiA9IGN0eDsNCisgX19sZTMyIGhkclsyXTsNCisgaW50IG5l Ow0KKyB1MTYgdG1wMTY7DQorIF9fbGUzMiB0bXAzMjsNCisNCisgLyogY2hlY2sgZm9yIGRldmlj ZSAqLw0KKyBpZiAoIW5kZXYpIHsNCisgcHJfZXJyKCIlczogZXJyb3I6IG5vIGRldmljZSIsIF9f ZnVuY19fKTsNCisgcmV0dXJuIC1FTk9ERVY7DQorIH0NCisNCisgZGV2X2luZm8oJm5kZXYtPnBj aWRldi0+ZGV2LCAiJXM6IGVudGVyZWQiLCBfX2Z1bmNfXyk7DQorDQorIG5kZXYtPnN0YXRzLndy aXRlX2ZhaWwrKzsNCisNCisgaWYgKCFuZGV2LT5iYXJbQ1NSX0JBUl0pIHsNCisgZGV2X2Vycigm bmRldi0+cGNpZGV2LT5kZXYsDQorICIlczogbnVsbCBCQVJbJWRdIiwgX19mdW5jX18sIENTUl9C QVIpOw0KKyByZXR1cm4gLUVOT01FTTsNCisgfQ0KKw0KKyBuZSA9IGkyMTU1NV9zdGFydGVkKG5k ZXYpOw0KKyBpZiAobmUgIT0gMCkgew0KKyBpZiAobmUgIT0gLUVBR0FJTikgew0KKyBkZXZfZXJy KCZuZGV2LT5wY2lkZXYtPmRldiwNCisgIiVzOiBpMjE1NTVfc3RhcnRlZCBmYWlsZWQiLCBfX2Z1 bmNfXyk7DQorIH0NCisgcmV0dXJuIG5lOw0KKyB9DQorDQorIGRldl9ub3RpY2UoJm5kZXYtPnBj aWRldi0+ZGV2LCAiJXM6IG5kZXYtPmJhclsgTUVNQkFSMiBdPSAlcCIsDQorICAgIF9fZnVuY19f LCBuZGV2LT5iYXJbTUVNQkFSMl0pOw0KKyBkZXZfbm90aWNlKCZuZGV2LT5wY2lkZXYtPmRldiwg IiVzOiBuZGV2LT5iYXJbIENTUl9CQVIgXT0gJXAiLA0KKyAgICBfX2Z1bmNfXywgbmRldi0+YmFy W0NTUl9CQVJdKTsNCisgZGV2X25vdGljZSgmbmRldi0+cGNpZGV2LT5kZXYsICIlczogYmxvY2sg bGVuICVkIiwgX19mdW5jX18sIGxlbik7DQorDQorIC8qIHNlbmQgd3JpdGUgcmVxdWVzdCAqLw0K Kw0KKyBuZSA9IGNvcHlfZnJvbV91c2VyKG5kZXYtPmJhcltNRU1CQVIyXSArIE5GUENJX0pPQlNf V1JfREFUQSwNCisgICAgIGJsb2NrLCBsZW4pID8gLUVGQVVMVCA6IDA7DQorIGlmIChuZSAhPSAw KSB7DQorIGRldl9lcnIoJm5kZXYtPnBjaWRldi0+ZGV2LA0KKyAiJXM6IGNvcHlfZnJvbV91c2Vy IGZhaWxlZCIsIF9fZnVuY19fKTsNCisgcmV0dXJuIG5lOw0KKyB9DQorIGhkclswXSA9IGNwdV90 b19sZTMyKE5GUENJX0pPQl9DT05UUk9MKTsNCisgaGRyWzFdID0gY3B1X3RvX2xlMzIobGVuKTsN CisgbWVtY3B5KG5kZXYtPmJhcltNRU1CQVIyXSArIE5GUENJX0pPQlNfV1JfQ09OVFJPTCwNCisg ICAgICAgIChjb25zdCBjaGFyICopaGRyLCAyICogc2l6ZW9mKGhkclswXSkpOw0KKw0KKyAvKiBj b25maXJtIHdyaXRlIHJlcXVlc3QgKi8NCisNCisgbWVtY3B5KChjaGFyICopaGRyLCBuZGV2LT5i YXJbTUVNQkFSMl0gKyBORlBDSV9KT0JTX1dSX0xFTkdUSCwNCisgICAgICAgIHNpemVvZihoZHJb MF0pKTsNCisgdG1wMzIgPSBjcHVfdG9fbGUzMihsZW4pOw0KKyBpZiAoaGRyWzBdICE9IHRtcDMy KSB7DQorIGRldl9lcnIoJm5kZXYtPnBjaWRldi0+ZGV2LA0KKyAiJXM6IGxlbmd0aCBub3Qgd3Jp dHRlbiIsIF9fZnVuY19fKTsNCisgcmV0dXJuIC1FSU87DQorIH0NCisNCisgdG1wMTYgPSBORkFT VF9JTlRfSE9TVF9XUklURV9SRVFVRVNUID4+IDE2Ow0KKyBuZnBfb3V0dyhuZGV2LCBDU1JfQkFS LCBJMjE1NTVfT0ZGU0VUX0RPT1JCRUxMX1NFQ19TRVQsIHRtcDE2KTsNCisNCisgbmRldi0+c3Rh dHMud3JpdGVfZmFpbC0tOw0KKyBuZGV2LT5zdGF0cy53cml0ZV9ibG9jaysrOw0KKyBuZGV2LT5z dGF0cy53cml0ZV9ieXRlICs9IGxlbjsNCisNCisgZGV2X3dhcm4oJm5kZXYtPnBjaWRldi0+ZGV2 LCAiJXM6IGRvbmUiLCBfX2Z1bmNfXyk7DQorIHJldHVybiAwOw0KK30NCisNCisvKiByZWFkIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8N CisNCitzdGF0aWMgaW50IGkyMTU1NV9yZWFkKGNoYXIgKmJsb2NrLCBpbnQgbGVuLCBzdHJ1Y3Qg bmZwX2RldiAqY3R4LCBpbnQgKnJjb3VudCkNCit7DQorIHN0cnVjdCBuZnBfZGV2ICpuZGV2ID0g Y3R4Ow0KKyBpbnQgbmU7DQorIGludCBjb3VudDsNCisNCisgLyogY2hlY2sgZm9yIGRldmljZSAq Lw0KKyBpZiAoIW5kZXYpIHsNCisgcHJfZXJyKCIlczogZXJyb3I6IG5vIGRldmljZSIsIF9fZnVu Y19fKTsNCisgcmV0dXJuIC1FTk9ERVY7DQorIH0NCisNCisgZGV2X2luZm8oJm5kZXYtPnBjaWRl di0+ZGV2LCAiJXM6IGVudGVyZWQiLCBfX2Z1bmNfXyk7DQorICpyY291bnQgPSAwOw0KKw0KKyBu ZGV2LT5zdGF0cy5yZWFkX2ZhaWwrKzsNCisNCisgaWYgKCFuZGV2LT5iYXJbQ1NSX0JBUl0pIHsN CisgZGV2X2VycigmbmRldi0+cGNpZGV2LT5kZXYsICIlczogbnVsbCBCQVJbJWRdIiwNCisgX19m dW5jX18sIENTUl9CQVIpOw0KKyByZXR1cm4gLUVOT01FTTsNCisgfQ0KKw0KKyBuZSA9IGkyMTU1 NV9zdGFydGVkKG5kZXYpOw0KKyBpZiAobmUgIT0gMCkgew0KKyBpZiAobmUgIT0gLUVBR0FJTikN CisgZGV2X2VycigmbmRldi0+cGNpZGV2LT5kZXYsDQorICIlczogaTIxNTU1X3N0YXJ0ZWQgZmFp bGVkIiwgX19mdW5jX18pOw0KKw0KKyByZXR1cm4gbmU7DQorIH0NCisNCisgbWVtY3B5KChjaGFy ICopJmNvdW50LCBuZGV2LT5iYXJbTUVNQkFSMl0gKyBORlBDSV9KT0JTX1JEX0xFTkdUSCwNCisg ICAgICAgIHNpemVvZihjb3VudCkpOw0KKyBjb3VudCA9IGxlMzJfdG9fY3B1KGNvdW50KTsNCisg aWYgKGNvdW50IDwgMCB8fCBjb3VudCA+IGxlbikgew0KKyBkZXZfZXJyKCZuZGV2LT5wY2lkZXYt PmRldiwgIiVzOiBiYWQgYnl0ZSBjb3VudCAoJWQpIGZyb20gZGV2aWNlIiwNCisgX19mdW5jX18s IGNvdW50KTsNCisgcmV0dXJuIC1FSU87DQorIH0NCisgbmUgPSBjb3B5X3RvX3VzZXIoYmxvY2ss IG5kZXYtPmJhcltNRU1CQVIyXSArICBORlBDSV9KT0JTX1JEX0RBVEEsDQorICAgY291bnQpID8g LUVGQVVMVCA6IDA7DQorIGlmIChuZSAhPSAwKSB7DQorIGRldl9lcnIoJm5kZXYtPnBjaWRldi0+ ZGV2LA0KKyAiJXM6IGNvcHlfdG9fdXNlciBmYWlsZWQiLCBfX2Z1bmNfXyk7DQorIHJldHVybiBu ZTsNCisgfQ0KKyBkZXZfd2FybigmbmRldi0+cGNpZGV2LT5kZXYsICIlczogZG9uZSIsIF9fZnVu Y19fKTsNCisgKnJjb3VudCA9IGNvdW50Ow0KKyBuZGV2LT5zdGF0cy5yZWFkX2ZhaWwtLTsNCisg bmRldi0+c3RhdHMucmVhZF9ibG9jaysrOw0KKyBuZGV2LT5zdGF0cy5yZWFkX2J5dGUgKz0gbGVu Ow0KKyByZXR1cm4gMDsNCit9DQorDQorLyogZW5zdXJlIHJlYWRpbmcgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCitzdGF0aWMgaW50IGky MTU1NV9lbnN1cmVfcmVhZGluZyhkbWFfYWRkcl90IGFkZHIsDQorIGludCBsZW4sIHN0cnVjdCBu ZnBfZGV2ICpjdHgsIGludCBsb2NrX2ZsYWcpDQorew0KKyBzdHJ1Y3QgbmZwX2RldiAqbmRldiA9 IGN0eDsNCisgX19sZTMyIGhkclszXTsNCisgdTE2IHRtcDE2Ow0KKyBfX2xlMzIgdG1wMzI7DQor IGludCBuZTsNCisgaW50IGhkcl9sZW47DQorDQorIC8qIGNoZWNrIGZvciBkZXZpY2UgKi8NCisg aWYgKCFuZGV2KSB7DQorIHByX2VycigiJXM6IGVycm9yOiBubyBkZXZpY2UiLCBfX2Z1bmNfXyk7 DQorIHJldHVybiAtRU5PREVWOw0KKyB9DQorDQorIGRldl9pbmZvKCZuZGV2LT5wY2lkZXYtPmRl diwgIiVzOiBlbnRlcmVkIiwgX19mdW5jX18pOw0KKw0KKyBuZGV2LT5zdGF0cy5lbnN1cmVfZmFp bCsrOw0KKw0KKyBpZiAoIW5kZXYtPmJhcltDU1JfQkFSXSkgew0KKyBkZXZfZXJyKCZuZGV2LT5w Y2lkZXYtPmRldiwgIiVzOiBudWxsIEJBUlslZF0iLA0KKyBfX2Z1bmNfXywgQ1NSX0JBUik7DQor IHJldHVybiAtRU5PTUVNOw0KKyB9DQorDQorIG5lID0gaTIxNTU1X3N0YXJ0ZWQobmRldik7DQor IGlmIChuZSAhPSAwKSB7DQorIGlmIChuZSAhPSAtRUFHQUlOKSB7DQorIGRldl9lcnIoJm5kZXYt PnBjaWRldi0+ZGV2LA0KKyAiJXM6IGkyMTU1NV9zdGFydGVkIGZhaWxlZCIsIF9fZnVuY19fKTsN CisgfQ0KKyByZXR1cm4gbmU7DQorIH0NCisNCisgZGV2X25vdGljZSgmbmRldi0+cGNpZGV2LT5k ZXYsICIlczogbmRldi0+YmFyWyBNRU1CQVIyIF09ICVwIiwgX19mdW5jX18sDQorICAgIG5kZXYt PmJhcltNRU1CQVIyXSk7DQorIGRldl9ub3RpY2UoJm5kZXYtPnBjaWRldi0+ZGV2LCAiJXM6IG5k ZXYtPmJhclsgQ1NSX0JBUiBdPSAlcCIsIF9fZnVuY19fLA0KKyAgICBuZGV2LT5iYXJbQ1NSX0JB Ul0pOw0KKw0KKyAvKiBzZW5kIHJlYWQgcmVxdWVzdCAqLw0KKw0KKyBpZiAoYWRkcikgew0KKyBk ZXZfbm90aWNlKCZuZGV2LT5wY2lkZXYtPmRldiwgIiVzOiBuZXcgZm9ybWF0LCBhZGRyICVwIiwN CisgICAgX19mdW5jX18sICh2b2lkICopYWRkcik7DQorIGhkclswXSA9IGNwdV90b19sZTMyKE5G UENJX0pPQl9DT05UUk9MX1BDSV9QVVNIKTsNCisgaGRyWzFdID0gY3B1X3RvX2xlMzIobGVuKTsN CisgaGRyWzJdID0gY3B1X3RvX2xlMzIoYWRkcik7DQorIGhkcl9sZW4gPSAzICogc2l6ZW9mKGhk clswXSk7DQorIH0gZWxzZSB7DQorIGhkclswXSA9IGNwdV90b19sZTMyKE5GUENJX0pPQl9DT05U Uk9MKTsNCisgaGRyWzFdID0gY3B1X3RvX2xlMzIobGVuKTsNCisgaGRyX2xlbiA9IDIgKiBzaXpl b2YoaGRyWzBdKTsNCisgfQ0KKw0KKyBtZW1jcHkobmRldi0+YmFyW01FTUJBUjJdICsgTkZQQ0lf Sk9CU19SRF9DT05UUk9MLA0KKyAgICAgICAgKGNvbnN0IGNoYXIgKiloZHIsIGhkcl9sZW4pOw0K Kw0KKyAvKiBjb25maXJtIHJlYWQgcmVxdWVzdCAqLw0KKw0KKyBtZW1jcHkoKGNoYXIgKiloZHIs IG5kZXYtPmJhcltNRU1CQVIyXSArIE5GUENJX0pPQlNfUkRfTEVOR1RILA0KKyAgICAgICAgc2l6 ZW9mKGhkclswXSkpOw0KKyB0bXAzMiA9IGNwdV90b19sZTMyKGxlbik7DQorIGlmIChoZHJbMF0g IT0gdG1wMzIpIHsNCisgZGV2X2VycigmbmRldi0+cGNpZGV2LT5kZXYsICIlczogbGVuIG5vdCB3 cml0dGVuIiwgX19mdW5jX18pOw0KKyByZXR1cm4gLUVJTzsNCisgfQ0KKw0KKyB0bXAxNiA9IE5G QVNUX0lOVF9IT1NUX1JFQURfUkVRVUVTVCA+PiAxNjsNCisgbmZwX291dHcobmRldiwgQ1NSX0JB UiwgSTIxNTU1X09GRlNFVF9ET09SQkVMTF9TRUNfU0VULCB0bXAxNik7DQorDQorIG5kZXYtPnN0 YXRzLmVuc3VyZV9mYWlsLS07DQorIG5kZXYtPnN0YXRzLmVuc3VyZSsrOw0KKw0KKyByZXR1cm4g MDsNCit9DQorDQorLyogc2V0IGNvbnRyb2wgcmVnaXN0ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCitzdGF0aWMgaW50IGkyMTU1NV9zZXRfY29udHJv bChjb25zdCBzdHJ1Y3QgbmZkZXZfY29udHJvbF9zdHIgKmNvbnRyb2wsDQorICAgICAgIHN0cnVj dCBuZnBfZGV2ICpjdHgpDQorew0KKyBzdHJ1Y3QgbmZwX2RldiAqbmRldiA9IGN0eDsNCisNCisg LyogY2hlY2sgZm9yIGRldmljZSAqLw0KKyBpZiAoIW5kZXYpIHsNCisgcHJfZXJyKCIlczogZXJy b3I6IG5vIGRldmljZSIsIF9fZnVuY19fKTsNCisgcmV0dXJuIC1FTk9ERVY7DQorIH0NCisNCisg ZGV2X2luZm8oJm5kZXYtPnBjaWRldi0+ZGV2LCAiJXM6IGVudGVyZWQiLCBfX2Z1bmNfXyk7DQor IGlmICghbmRldi0+YmFyW0NTUl9CQVJdKSB7DQorIGRldl9lcnIoJm5kZXYtPnBjaWRldi0+ZGV2 LCAiJXM6IG51bGwgQkFSWyVkXSIsDQorIF9fZnVuY19fLCBDU1JfQkFSKTsNCisgcmV0dXJuIC1F Tk9NRU07DQorIH0NCisgbmZwX291dGwobmRldiwgQ1NSX0JBUiwgSTIxNTU1X1NDUkFUQ0hQQURf UkVHSVNURVJfQ09OVFJPTCwNCisgY29udHJvbC0+Y29udHJvbCk7DQorIHJldHVybiAwOw0KK30N CisNCisvKiBnZXQgc3RhdHVzL2Vycm9yIHJlZ2lzdGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSAqLw0KKw0KK3N0YXRpYyBpbnQgaTIxNTU1X2dldF9zdGF0dXMoc3RydWN0 IG5mZGV2X3N0YXR1c19zdHIgKnN0YXR1cywNCisgICAgICBzdHJ1Y3QgbmZwX2RldiAqY3R4KQ0K K3sNCisgc3RydWN0IG5mcF9kZXYgKm5kZXYgPSBjdHg7DQorIHUzMiAqZXJyb3IgPSAodTMyICop c3RhdHVzLT5lcnJvcjsNCisNCisgLyogY2hlY2sgZm9yIGRldmljZSAqLw0KKyBpZiAoIW5kZXYp IHsNCisgcHJfZXJyKCIlczogZXJyb3I6IG5vIGRldmljZSIsIF9fZnVuY19fKTsNCisgcmV0dXJu IC1FTk9ERVY7DQorIH0NCisNCisgZGV2X2luZm8oJm5kZXYtPnBjaWRldi0+ZGV2LCAiJXM6IGVu dGVyZWQiLCBfX2Z1bmNfXyk7DQorIGlmICghbmRldi0+YmFyW0NTUl9CQVJdKSB7DQorIGRldl9l cnIoJm5kZXYtPnBjaWRldi0+ZGV2LA0KKyAiJXM6IG51bGwgQkFSWyVkXSIsIF9fZnVuY19fLCBD U1JfQkFSKTsNCisgcmV0dXJuIC1FTk9NRU07DQorIH0NCisgc3RhdHVzLT5zdGF0dXMgPSBuZnBf aW5sKG5kZXYsDQorIENTUl9CQVIsIEkyMTU1NV9TQ1JBVENIUEFEX1JFR0lTVEVSX1NUQVRVUyk7 DQorIGVycm9yWzBdID0gbmZwX2lubChuZGV2LCBDU1JfQkFSLCBJMjE1NTVfU0NSQVRDSFBBRF9S RUdJU1RFUl9FUlJPUl9MTyk7DQorIGVycm9yWzFdID0gbmZwX2lubChuZGV2LCBDU1JfQkFSLCBJ MjE1NTVfU0NSQVRDSFBBRF9SRUdJU1RFUl9FUlJPUl9ISSk7DQorIHJldHVybiAwOw0KK30NCisN CisvKiBjb21tYW5kIGRldmljZSBzdHJ1Y3R1cmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSAqLw0KKw0KK2NvbnN0IHN0cnVjdCBuZnBjbWRfZGV2IGkyMTU1NV9jbWRkZXYg PSB7DQorIC5uYW1lID0gIm5DaXBoZXIgblNoaWVsZCBTb2xvIiwNCisgLnZlbmRvcmlkID0gUENJ X1ZFTkRPUl9JRF9JTlRFTCwNCisgLmRldmljZWlkID0gUENJX0RFVklDRV9JRF9JTlRFTF8yMTU1 NSwNCisgLnN1Yl92ZW5kb3JpZCA9IFBDSV9WRU5ET1JfSURfTkNJUEhFUiwNCisgLnN1Yl9kZXZp Y2VpZCA9IFBDSV9TVUJTWVNURU1fSURfTkZBU1RfUkVWMSwNCisgLmJhcl9zaXplcyA9IEJBUl9T SVpFUywNCisgLmZsYWdzID0gMCwNCisgLm1heF9pZnZlcnMgPSBORkRFVl9JRl9QQ0lfUFVTSCwN CisgLmNyZWF0ZSA9IGkyMTU1NV9jcmVhdGUsDQorIC5kZXN0cm95ID0gaTIxNTU1X2Rlc3Ryb3ks DQorIC5vcGVuID0gaTIxNTU1X29wZW4sDQorIC5jbG9zZSA9IGkyMTU1NV9jbG9zZSwNCisgLmlz ciA9IGkyMTU1NV9pc3IsDQorIC53cml0ZV9ibG9jayA9IGkyMTU1NV93cml0ZSwNCisgLnJlYWRf YmxvY2sgPSBpMjE1NTVfcmVhZCwNCisgLmVuc3VyZV9yZWFkaW5nID0gaTIxNTU1X2Vuc3VyZV9y ZWFkaW5nLA0KKyAuc2V0Y29udHJvbCA9IGkyMTU1NV9zZXRfY29udHJvbCwNCisgLmdldHN0YXR1 cyA9IGkyMTU1NV9nZXRfc3RhdHVzLA0KK307DQorDQorLyogZW5kIG9mIGZpbGUgKi8NCmRpZmYg LS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbmNpcGhlci9pMjE1NTUuaCBiL2RyaXZlcnMvc3RhZ2lu Zy9uY2lwaGVyL2kyMTU1NS5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAw MDAwLi5lNDc5NGQyMWE0MjgNCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9u Y2lwaGVyL2kyMTU1NS5oDQpAQCAtMCwwICsxLDY4IEBADQorLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjArICovDQorLyoNCisgKg0KKyAqIEludGVyZmFjZXMgdG8gdGhlIFNvbG8n cyBJbnRlbCAyMTU1NSBicmlkZ2UNCisgKiBDb3B5cmlnaHQgMjAxOSBuQ2lwaGVyIFNlY3VyaXR5 IEx0ZA0KKyAqDQorICovDQorDQorI2lmbmRlZiBORlBfSTIxNTU1X0gNCisjZGVmaW5lIE5GUF9J MjE1NTVfSA0KKw0KKyNpbmNsdWRlICJzb2xvLmgiDQorDQorI2lmbmRlZiBQQ0lfVkVORE9SX0lE X0lOVEVMDQorI2RlZmluZSBQQ0lfVkVORE9SX0lEX0lOVEVMIDB4ODA4Ng0KKyNlbmRpZg0KKw0K KyNpZm5kZWYgUENJX0RFVklDRV9JRF9JTlRFTF8yMTU1NQ0KKyNkZWZpbmUgUENJX0RFVklDRV9J RF9JTlRFTF8yMTU1NSAweGI1NTUNCisjZW5kaWYNCisNCisjaWZuZGVmIFBDSV9WRU5ET1JfSURf TkNJUEhFUg0KKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9OQ0lQSEVSIDB4MDEwMA0KKyNlbmRpZg0K Kw0KKyNpZm5kZWYgUENJX1NVQlNZU1RFTV9JRF9ORkFTVF9SRVYxDQorI2RlZmluZSBQQ0lfU1VC U1lTVEVNX0lEX05GQVNUX1JFVjEgMHgwMTAwDQorI2VuZGlmDQorDQorI2RlZmluZSBJMjE1NTVf T0ZGU0VUX0RPT1JCRUxMX1BSSV9TRVQgMHg5Qw0KKyNkZWZpbmUgSTIxNTU1X09GRlNFVF9ET09S QkVMTF9TRUNfU0VUIDB4OUUNCisjZGVmaW5lIEkyMTU1NV9PRkZTRVRfRE9PUkJFTExfUFJJX0NM RUFSIDB4OTgNCisNCisjZGVmaW5lIEkyMTU1NV9PRkZTRVRfRE9PUkJFTExfUFJJX1NFVF9NQVNL IDB4QTQNCisjZGVmaW5lIEkyMTU1NV9PRkZTRVRfRE9PUkJFTExfUFJJX0NMRUFSX01BU0sgMHhB MA0KKw0KKyNkZWZpbmUgSTIxNTU1X0RPT1JCRUxMX1BSSV9FTkFCTEUgMHgwMDAwDQorI2RlZmlu ZSBJMjE1NTVfRE9PUkJFTExfUFJJX0RJU0FCTEUgMHhGRkZGDQorDQorLyogOCAzMi1iaXQgc2Ny YXRjaHBhZCByZWdpc3RlcnMgc3RhcnQgaGVyZTsgYnJpZGdlIG1hbnVhbCBzZWN0aW9uIDExLjQg Ki8NCisjZGVmaW5lIEkyMTU1NV9TQ1JBVENIUEFEX1JFR0lTVEVSKG4pICgweEE4ICsgNCAqIChu KSkNCisNCisvKiBTY3JhdGNocGFkIHJlZ2lzdGVyIGFzc2lnbm1lbnRzICovDQorI2RlZmluZSBJ MjE1NTVfU0NSQVRDSFBBRF9SRUdJU1RFUl9DT05UUk9MIEkyMTU1NV9TQ1JBVENIUEFEX1JFR0lT VEVSKDApDQorI2RlZmluZSBJMjE1NTVfU0NSQVRDSFBBRF9SRUdJU1RFUl9TVEFUVVMgSTIxNTU1 X1NDUkFUQ0hQQURfUkVHSVNURVIoMSkNCisjZGVmaW5lIEkyMTU1NV9TQ1JBVENIUEFEX1JFR0lT VEVSX0VSUk9SX0xPIEkyMTU1NV9TQ1JBVENIUEFEX1JFR0lTVEVSKDIpDQorI2RlZmluZSBJMjE1 NTVfU0NSQVRDSFBBRF9SRUdJU1RFUl9FUlJPUl9ISSBJMjE1NTVfU0NSQVRDSFBBRF9SRUdJU1RF UigzKQ0KKw0KKyNkZWZpbmUgSTIxNTU1X0NGR19TRUNfQ01EX1NUQVRVUyAweDQ0DQorDQorI2Rl ZmluZSBDRkdfQ01EX01BU1RFUiAweDAwMDQNCisNCisjZGVmaW5lIE1FTUJBUjEgMA0KKyNkZWZp bmUgTUVNQkFSMiAyDQorDQorLyogbG93ZXIgNGsgb2YgQkFSMCBtYXAgdGhlIDIxNTU1IENTUnMg KGRvb3JiZWxsIElSUXMgZXRjKSAqLw0KKyNkZWZpbmUgTUVNQkFSMV9TSVpFIDQwOTYNCisNCisj ZGVmaW5lIENTUl9CQVIgTUVNQkFSMQ0KKyNkZWZpbmUgQkFSX1NJWkVTIHtNRU1CQVIxX1NJWkUs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgIDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwNCisgICAgTkZQQ0lfUkFNX01JTlNJWkVfSk9CUyB8ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXA0KKyAgICBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX1BSRUZFVENIQUJMRSwg ICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgMCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAwfQ0K Kw0KKyNlbmRpZiAvKiBORlBfSTIxNTU1X0ggKi8NCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdp bmcvbmNpcGhlci9zb2xvLmggYi9kcml2ZXJzL3N0YWdpbmcvbmNpcGhlci9zb2xvLmgNCm5ldyBm aWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLjUyNDA4MDVlNjYxMA0KLS0tIC9k ZXYvbnVsbA0KKysrIGIvZHJpdmVycy9zdGFnaW5nL25jaXBoZXIvc29sby5oDQpAQCAtMCwwICsx LDMxNiBAQA0KKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKyAqLw0KKy8qDQor ICoNCisgKiBzb2xvLmg6IG5DaXBoZXIgUENJIEhTTSBpbnRlcmZhY2UNCisgKiBDb3B5cmlnaHQg MjAxOSBuQ2lwaGVyIFNlY3VyaXR5IEx0ZA0KKyAqDQorICogRGVjbGFyZXMgdGhlIG5GYXN0IFBD SSByZWdpc3RlciBpbnRlcmZhY2UsIGRyaXZlciBydW50aW1lDQorICogc3RydWN0dXJlcywgYW5k IHN1cHBvcnRpbmcgaXRlbXMuDQorICoNCisgKiBUaGUgaW50ZXJmYWNlIHByZXNlbnRlZCBieSBu RmFzdCBQQ0kgZGV2aWNlcyBjb25zaXN0cyBvZjoNCisgKg0KKyAqIC0gYSByZWdpb24gb2Ygc2hh cmVkIFJBTSB1c2VkIGZvciBkYXRhIHRyYW5zZmVyICYgY29udHJvbCBpbmZvcm1hdGlvbg0KKyAq IC0gYSBkb29yYmVsbCBpbnRlcnJ1cHQgcmVnaXN0ZXIsIHNvIGJvdGggc2lkZXMgY2FuIGdpdmUg ZWFjaCBvdGhlcg0KKyAqICAgaW50ZXJydXB0cw0KKyAqIC0gYSBudW1iZXIgb2YgRE1BIGNoYW5u ZWxzIGZvciB0cmFuc2ZlcnJpbmcgZGF0YQ0KKyAqDQorICovDQorDQorI2lmbmRlZiBTT0xPX0gN CisjZGVmaW5lIFNPTE9fSA0KKw0KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+DQorI2luY2x1 ZGUgPGxpbnV4L3R5cGVzLmg+DQorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4NCisjaW5jbHVkZSA8 bGludXgvaW8uaD4NCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4NCisjaW5jbHVkZSA8bGludXgv a2VybmVsLmg+DQorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPg0KKyNpbmNsdWRlIDxsaW51eC90 aW1lci5oPg0KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4NCisjaW5jbHVkZSA8bGludXgvZXJy bm8uaD4NCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L3NsYWIu aD4NCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L3BjaS5o Pg0KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+DQorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+DQor I2luY2x1ZGUgPGxpbnV4L25zaGllbGRfc29sby5oPg0KKw0KKy8qIFNpemVzIG9mIHNvbWUgcmVn aW9ucyAqLw0KKw0KKy8qDQorICogVGhpcyBpcyB0aGUgbWluaW11bSBzaXplIG9mIHNoYXJlZCBS QU0uIEluIGZ1dHVyZSBpdCBtYXkgYmUgcG9zc2libGUgdG8NCisgKiBuZWdvdGlhdGUgbGFyZ2Vy IHNpemVzIG9mIHNoYXJlZCBSQU0gb3IgYXV0by1kZXRlY3QgaG93IGJpZyBpdCBpcw0KKyAqLw0K KyNkZWZpbmUgTkZQQ0lfUkFNX01JTlNJWkUgICAgIDB4MDAxMDAwMDANCisjZGVmaW5lIE5GUENJ X1JBTV9NSU5TSVpFX0pPQlMgICAgIDB4MDAwMjAwMDAgLyogc3RhbmRhcmQgam9icyBvbmx5ICov DQorI2RlZmluZSBORlBDSV9SQU1fTUlOU0laRV9LRVJOICAgICAweDAwMDQwMDAwIC8qIHN0YW5k YXJkIGFuZA0KKyAqIGtlcm5lbCBqb2JzDQorICovDQorDQorLyogT2Zmc2V0cyB3aXRoaW4gc2hh cmVkIG1lbW9yeSBzcGFjZS4NCisgKiBUaGUgZm9sbG93aW5nIG1haW4gcmVnaW9ucyBhcmU6DQor ICogICBqb2JzIGlucHV0IGFyZWENCisgKiAgIGpvYnMgb3V0cHV0IGFyZWENCisgKiAgIGtlcm5l bCBqb2JzIGlucHV0IGFyZWENCisgKiAgIGtlcm5lbCBvdXRwdXQgYXJlYQ0KKyAqLw0KKw0KKyNk ZWZpbmUgTkZQQ0lfT0ZGU0VUX0pPQlMgICAgIDB4MDAwMDAwMDANCisjZGVmaW5lIE5GUENJX09G RlNFVF9KT0JTX1dSICAgICAweDAwMDAwMDAwDQorI2RlZmluZSBORlBDSV9PRkZTRVRfSk9CU19S RCAgICAgMHgwMDAxMDAwMA0KKyNkZWZpbmUgTkZQQ0lfT0ZGU0VUX0tFUk4gICAgIDB4MDAwMjAw MDANCisjZGVmaW5lIE5GUENJX09GRlNFVF9LRVJOX1dSICAgICAweDAwMDIwMDAwDQorI2RlZmlu ZSBORlBDSV9PRkZTRVRfS0VSTl9SRCAgICAgMHgwMDAzMDAwMA0KKw0KKy8qIEludGVycnVwdHMs IGRlZmluZWQgYnkgYml0IHBvc2l0aW9uIGluIGRvb3JiZWxsIHJlZ2lzdGVyICovDQorDQorLyog SW50ZXJydXB0cyBmcm9tIGRldmljZSB0byBob3N0ICovDQorI2RlZmluZSBORkFTVF9JTlRfREVW SUNFX1dSSVRFX09LICAgICAweDAwMDAwMDAxDQorI2RlZmluZSBORkFTVF9JTlRfREVWSUNFX1dS SVRFX0ZBSUxFRCAgICAgMHgwMDAwMDAwMg0KKyNkZWZpbmUgTkZBU1RfSU5UX0RFVklDRV9SRUFE X09LICAgICAweDAwMDAwMDA0DQorI2RlZmluZSBORkFTVF9JTlRfREVWSUNFX1JFQURfRkFJTEVE ICAgICAweDAwMDAwMDA4DQorI2RlZmluZSBORkFTVF9JTlRfREVWSUNFX0tFUk5fV1JJVEVfT0sg ICAgIDB4MDAwMDAwMTANCisjZGVmaW5lIE5GQVNUX0lOVF9ERVZJQ0VfS0VSTl9XUklURV9GQUlM RUQgIDB4MDAwMDAwMjANCisjZGVmaW5lIE5GQVNUX0lOVF9ERVZJQ0VfS0VSTl9SRUFEX09LICAg ICAweDAwMDAwMDQwDQorI2RlZmluZSBORkFTVF9JTlRfREVWSUNFX0tFUk5fUkVBRF9GQUlMRUQg ICAweDAwMDAwMDgwDQorDQorLyogSW50ZXJydXB0cyBmcm9tIGhvc3QgdG8gZGV2aWNlICovDQor I2RlZmluZSBORkFTVF9JTlRfSE9TVF9XUklURV9SRVFVRVNUICAgICAweDAwMDEwMDAwDQorI2Rl ZmluZSBORkFTVF9JTlRfSE9TVF9SRUFEX1JFUVVFU1QgICAgIDB4MDAwMjAwMDANCisjZGVmaW5l IE5GQVNUX0lOVF9IT1NUX0RFQlVHICAgICAweDAwMDQwMDAwDQorI2RlZmluZSBORkFTVF9JTlRf SE9TVF9LRVJOX1dSSVRFX1JFUVVFU1QgICAweDAwMDgwMDAwDQorI2RlZmluZSBORkFTVF9JTlRf SE9TVF9LRVJOX1JFQURfUkVRVUVTVCAgICAweDAwMTAwMDAwDQorDQorLyogT3JkaW5hcnkgam9i IHN1Ym1pc3Npb24gKi8NCisNCisvKg0KKyAqIFRoZSBORlBDSV9PRkZTRVRfSk9CU19XUiBhbmQg TkZQQ0lfT0ZGU0VUX0pPQlNfUkQgcmVnaW9ucw0KKyAqIGFyZSBkZWZpbmVkIGJ5IHRoZSBmb2xs b3dpbmcgKGJ5dGUpIGFkZHJlc3Mgb2Zmc2V0cy4NCisgKi8NCisNCisjZGVmaW5lIE5GUENJX09G RlNFVF9DT05UUk9MICAgICAweDANCisjZGVmaW5lIE5GUENJX09GRlNFVF9MRU5HVEggICAgIDB4 NA0KKyNkZWZpbmUgTkZQQ0lfT0ZGU0VUX0RBVEEgICAgIDB4OA0KKyNkZWZpbmUgTkZQQ0lfT0ZG U0VUX1BVU0hfQUREUiAgICAgMHg4DQorI2RlZmluZSBORlBDSV9PRkZTRVRfUFVMTF9BRERSICAg ICAweDgNCisNCisjZGVmaW5lIE5GUENJX0pPQlNfV1JfQ09OVFJPTCAgICAgKE5GUENJX09GRlNF VF9KT0JTX1dSICsgXA0KKyAgICAgIE5GUENJX09GRlNFVF9DT05UUk9MKQ0KKyNkZWZpbmUgTkZQ Q0lfSk9CU19XUl9MRU5HVEggICAgIChORlBDSV9PRkZTRVRfSk9CU19XUiArIFwNCisgICAgICBO RlBDSV9PRkZTRVRfTEVOR1RIKQ0KKyNkZWZpbmUgTkZQQ0lfSk9CU19XUl9EQVRBICAgICAoTkZQ Q0lfT0ZGU0VUX0pPQlNfV1IgKyBcDQorICAgICAgTkZQQ0lfT0ZGU0VUX0RBVEEpDQorLyogYWRk cmVzcyBpbiBQQ0kgc3BhY2Ugb2YgaG9zdCBidWZmZXIgZm9yIE5GUENJX0pPQl9DT05UUk9MX1BD SV9QVVNIICovDQorI2RlZmluZSBORlBDSV9KT0JTX1dSX1BVTExfQUREUiAgICAgKE5GUENJX09G RlNFVF9KT0JTX1dSICsgXA0KKyAgICAgIE5GUENJX09GRlNFVF9QVUxMX0FERFIpDQorI2RlZmlu ZSBORlBDSV9NQVhfSk9CU19XUl9MRU4gICAgICgweDAwMDBGRkY4KQ0KKw0KKyNkZWZpbmUgTkZQ Q0lfSk9CU19SRF9DT05UUk9MICAgICAoTkZQQ0lfT0ZGU0VUX0pPQlNfUkQgKyBcDQorICAgICAg TkZQQ0lfT0ZGU0VUX0NPTlRST0wpDQorI2RlZmluZSBORlBDSV9KT0JTX1JEX0xFTkdUSCAgICAg KE5GUENJX09GRlNFVF9KT0JTX1JEICsgXA0KKyAgICAgIE5GUENJX09GRlNFVF9MRU5HVEgpDQor I2RlZmluZSBORlBDSV9KT0JTX1JEX0RBVEEgICAgIChORlBDSV9PRkZTRVRfSk9CU19SRCArIFwN CisgICAgICBORlBDSV9PRkZTRVRfREFUQSkNCisvKiBhZGRyZXNzIGluIFBDSSBzcGFjZSBvZiBo b3N0IGJ1ZmZlciBmb3IgTkZQQ0lfSk9CX0NPTlRST0xfUENJX1BVU0ggKi8NCisjZGVmaW5lIE5G UENJX0pPQlNfUkRfUFVTSF9BRERSICAgICAoTkZQQ0lfT0ZGU0VUX0pPQlNfUkQgKyBcDQorICAg ICAgTkZQQ0lfT0ZGU0VUX1BVU0hfQUREUikNCisjZGVmaW5lIE5GUENJX01BWF9KT0JTX1JEX0xF TiAgICAgKDB4MDAwRkZGOCkNCisNCisvKiBLZXJuZWwgaW50ZXJmYWNlIGpvYiBzdWJtaXNzaW9u ICovDQorDQorI2RlZmluZSBORlBDSV9LRVJOX1dSX0NPTlRST0wgICAgIChORlBDSV9PRkZTRVRf S0VSTl9XUiArIFwNCisgICAgICBORlBDSV9PRkZTRVRfQ09OVFJPTCkNCisjZGVmaW5lIE5GUENJ X0tFUk5fV1JfTEVOR1RIICAgICAoTkZQQ0lfT0ZGU0VUX0tFUk5fV1IgKyBcDQorICAgICAgTkZQ Q0lfT0ZGU0VUX0xFTkdUSCkNCisjZGVmaW5lIE5GUENJX0tFUk5fV1JfREFUQSAgICAgKE5GUENJ X09GRlNFVF9LRVJOX1dSICsgXA0KKyAgICAgIE5GUENJX09GRlNFVF9EQVRBKQ0KKy8qIGFkZHJl c3MgaW4gUENJIHNwYWNlIG9mIGhvc3QgYnVmZmVyIGZvciBORlBDSV9KT0JfQ09OVFJPTF9QQ0lf UFVTSCAqLw0KKyNkZWZpbmUgTkZQQ0lfS0VSTl9XUl9QVUxMX0FERFIgICAgIChORlBDSV9PRkZT RVRfS0VSTl9XUiArIFwNCisgICAgICBORlBDSV9PRkZTRVRfUFVMTF9BRERSKQ0KKyNkZWZpbmUg TkZQQ0lfTUFYX0tFUk5fV1JfTEVOICAgICAgICAgICAgICgweDAwMDBGRkY4KQ0KKw0KKyNkZWZp bmUgTkZQQ0lfS0VSTl9SRF9DT05UUk9MICAgICAoTkZQQ0lfT0ZGU0VUX0tFUk5fUkQgKyBcDQor ICAgICAgTkZQQ0lfT0ZGU0VUX0NPTlRST0wpDQorI2RlZmluZSBORlBDSV9LRVJOX1JEX0xFTkdU SCAgICAgKE5GUENJX09GRlNFVF9LRVJOX1JEICsgXA0KKyAgICAgIE5GUENJX09GRlNFVF9MRU5H VEgpDQorI2RlZmluZSBORlBDSV9LRVJOX1JEX0RBVEEgICAgIChORlBDSV9PRkZTRVRfS0VSTl9S RCArIFwNCisgICAgICBORlBDSV9PRkZTRVRfREFUQSkNCisvKiBhZGRyZXNzIGluIFBDSSBzcGFj ZSBvZiBob3N0IGJ1ZmZlciBmb3IgTkZQQ0lfSk9CX0NPTlRST0xfUENJX1BVU0ggKi8NCisjZGVm aW5lIE5GUENJX0tFUk5fUkRfUFVTSF9BRERSICAgICAoTkZQQ0lfT0ZGU0VUX0tFUk5fUkQgKyBc DQorICAgICAgTkZQQ0lfT0ZGU0VUX1BVU0hfQUREUikNCisjZGVmaW5lIE5GUENJX01BWF9LRVJO X1JEX0xFTiAgICAgKDB4MDAwRkZGOCkNCisNCisjZGVmaW5lIE5GUENJX0pPQl9DT05UUk9MICAg ICAweDAwMDAwMDAxDQorI2RlZmluZSBORlBDSV9KT0JfQ09OVFJPTF9QQ0lfUFVTSCAgICAgMHgw MDAwMDAwMg0KKyNkZWZpbmUgTkZQQ0lfSk9CX0NPTlRST0xfUENJX1BVTEwgICAgIDB4MDAwMDAw MDMNCisNCisvKg0KKyAqIFRoZSAnQ29udHJvbCcgd29yZCBpcyBhbmFsb2dvdXMgdG8gdGhlIFND U0kgcmVhZC93cml0ZSBhZGRyZXNzOw0KKyAqIDEgPSBzdGFuZGFyZCBwdXNoL3B1bGwgSS9PDQor ICogMiA9IHB1c2gvcHVzaCBJL08NCisgKiAzID0gcHVsbC9wdXNoIEkvTw0KKyAqDQorICogVG8g c3VibWl0IGEgYmxvY2sgb2Ygam9iIGRhdGEsIHRoZSBob3N0Og0KKyAqIC0gc2V0cyB0aGUgKDMy LWJpdCwgbGl0dGxlLWVuZGlhbikgd29yZCBhdCBORlBDSV9KT0JTX1dSX0NPTlRST0wgdG8NCisg KiBORlBDSV9KT0JfQ09OVFJPTA0KKyAqIC0gc2V0cyB0aGUgd29yZCBhdCBORlBDSV9KT0JTX1dS X0xFTkdUSCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhDQorICogLSBjb3BpZXMgdGhlIGRhdGEg dG8gTkZQQ0lfSk9CU19XUl9EQVRBDQorICogLSBzZXRzIGludGVycnVwdCBORkFTVF9JTlRfSE9T VF9XUklURV9SRVFVRVNUIGluIHRoZSBkb29yYmVsbCByZWdpc3Rlcg0KKyAqIC0gYXdhaXRzIHRo ZSBORkFTVF9JTlRfREVWSUNFX1dSSVRFX09LIChvciBfRkFJTEVEKSBpbnRlcnJ1cHRzIGJhY2sN CisgKg0KKyAqIFRvIHJlYWQgYSBibG9jayBvZiBqb2JzIGJhY2ssIHRoZSBob3N0Og0KKyAqIC0g c2V0cyB0aGUgd29yZCBhdCBORlBDSV9KT0JTX1JEX0NPTlRST0wgdG8gTkZQQ0lfSk9CX0NPTlRS T0wNCisgKiAtIHNldHMgdGhlIHdvcmQgYXQgTkZQQ0lfSk9CU19SRF9MRU5HVEggdG8gdGhlIG1h eCBsZW5ndGggZm9yIHJldHVybmVkIGRhdGENCisgKiAtIHNldHMgaW50ZXJydXB0IE5GQVNUX0lO VF9IT1NUX1JFQURfUkVRVUVTVA0KKyAqIC0gYXdhaXRzIHRoZSBORkFTVF9JTlRfREVWSUNFX1JF QURfT0sgKG9yIF9GQUlMRUQpIGludGVycnVwdA0KKyAqIC0gcmVhZHMgdGhlIGRhdGEgZnJvbSBO RlBDSV9KT0JTX1JEX0RBVEE7IHRoZSBtb2R1bGUgd2lsbCBzZXQgdGhlIHdvcmQgYXQNCisgKiBO RlBDSV9KT0JTX1JEX0xFTkdUSCB0byBpdHMgYWN0dWFsIGxlbmd0aC4NCisgKg0KKyAqIE9wdGlv bmFsbHkgdGhlIGhvc3QgY2FuIHJlcXVlc3QgdGhlIFBDSSByZWFkIGRhdGEgdG8gYmUgcHVzaGVk IHRvIGhvc3QgUENJDQorICogbWFwcGVkIHJhbToNCisgKiAtIGFsbG9jYXRlcyBhIGNvbnRpZ3Vv dXMgUENJIGFkZHJlc3NhYmxlIGJ1ZmZlciBmb3IgYSBORlBDSV9KT0JTX0JMT0NLIG9mDQorICog bWF4IHNpemUgTkZQQ0lfTUFYX0pPQlNfUkRfTEVOIChvciBORlBDSV9NQVhfS0VSTl9SRF9MRU4p ICsgOA0KKyAqIC0gc2V0cyB0aGUgd29yZCBhdCBORlBDSV9KT0JTX1JEX0NPTlRST0wgdG8gTkZQ Q0lfSk9CX0NPTlRST0xfUENJX1BVU0gNCisgKiAtIHNldHMgdGhlIHdvcmQgYXQgTkZQQ0lfSk9C U19SRF9MRU5HVEggdG8gdGhlIG1heCBsZW5ndGggZm9yIHJldHVybmVkIGRhdGENCisgKiAtIHNl dHMgdGhlIHdvcmQgYXQgTkZQQ0lfSk9CU19SRF9QVVNIX0FERFIgdG8gYmUgdGhlIGhvc3QgUENJ IGFkZHJlc3Mgb2YNCisgKiB0aGUgYnVmZmVyDQorICogLSBzZXRzIGludGVycnVwdCBORkFTVF9J TlRfSE9TVF9SRUFEX1JFUVVFU1QNCisgKiAtIGF3YWl0cyB0aGUgTkZBU1RfSU5UX0RFVklDRV9S RUFEX09LIChvciBfRkFJTEVEKSBpbnRlcnJ1cHQNCisgKiAtIHJlYWRzIHRoZSBkYXRhIGZyb20g dGhlIGJ1ZmZlciBhdCBORlBDSV9PRkZTRVRfREFUQSBpbiB0aGUgYnVmZmVyLiBUaGUNCisgKiBt b2R1bGUgd2lsbCBzZXQgTkZQQ0lfT0ZGU0VUX0xFTkdUSCB0byB0aGUgYWN0dWFsIGxlbmd0aC4N CisgKg0KKyAqIE9wdGlvbmFsbHkgdGhlIGhvc3QgY2FuIHJlcXVlc3QgdGhlIFBDSSB3cml0ZSBk YXRhIHRvIGJlIHB1bGxlZCBmcm9tIGhvc3QNCisgKiBQQ0kgbWFwcGVkIHJhbToNCisgKiAtIGFs bG9jYXRlcyBhIGNvbnRpZ3VvdXMgUENJIGFkZHJlc3NhYmxlIGJ1ZmZlciBmb3IgYSBORlBDSV9K T0JTX0JMT0NLIG9mDQorICogbWF4IHNpemUgTkZQQ0lfTUFYX0pPQlNfV1JfTEVOIChvciBORlBD SV9NQVhfS0VSTl9XUl9MRU4pICsgOA0KKyAqIC0gY29waWVzIHRoZSBkYXRhIHRvIHRoZSBQQ0kg YWRkcmVzc2FibGUgYnVmZmVyDQorICogLSBzZXRzIHRoZSB3b3JkIGF0IE5GUENJX0pPQlNfV1Jf Q09OVFJPTCB0byBORlBDSV9KT0JfQ09OVFJPTF9QQ0lfUFVMTA0KKyAqIC0gc2V0cyB0aGUgd29y ZCBhdCBORlBDSV9KT0JTX1dSX0xFTkdUSCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhDQorICog LSBzZXRzIHRoZSB3b3JkIGF0IE5GUENJX0pPQlNfUkRfUFVMTF9BRERSIHRvIGJlIHRoZSBob3N0 IFBDSSBhZGRyZXNzIG9mDQorICogdGhlIGJ1ZmZlcg0KKyAqIC0gc2V0cyBpbnRlcnJ1cHQgTkZB U1RfSU5UX0hPU1RfV1JJVEVfUkVRVUVTVCBpbiB0aGUgZG9vcmJlbGwgcmVnaXN0ZXINCisgKiAt IGF3YWl0cyB0aGUgTkZBU1RfSU5UX0RFVklDRV9XUklURV9PSyAob3IgX0ZBSUxFRCkgaW50ZXJy dXB0cyBiYWNrDQorICovDQorDQorI2RlZmluZSBORlBDSV9TQ1JBVENIX0NPTlRST0wgICAgIDAN CisNCisjZGVmaW5lIE5GUENJX1NDUkFUQ0hfQ09OVFJPTF9IT1NUX01PSSAgICAgKDB4MSkNCisj ZGVmaW5lIE5GUENJX1NDUkFUQ0hfQ09OVFJPTF9NT0RFX1NISUZUICAgIDENCisjZGVmaW5lIE5G UENJX1NDUkFUQ0hfQ09OVFJPTF9NT0RFX01BU0sgICAgICgzIDw8IFwNCisgICAgICBORlBDSV9T Q1JBVENIX0NPTlRST0xfTU9ERV9TSElGVCkNCisNCisjZGVmaW5lIE5GUENJX1NDUkFUQ0hfU1RB VFVTICAgICAxDQorDQorI2RlZmluZSBORlBDSV9TQ1JBVENIX1NUQVRVU19NT05JVE9SX01PSSAg ICAgICAgICgweDEpDQorI2RlZmluZSBORlBDSV9TQ1JBVENIX1NUQVRVU19BUFBMSUNBVElPTl9N T0kgICAgICgweDIpDQorI2RlZmluZSBORlBDSV9TQ1JBVENIX1NUQVRVU19BUFBMSUNBVElPTl9S VU5OSU5HICgweDQpDQorI2RlZmluZSBORlBDSV9TQ1JBVENIX1NUQVRVU19FUlJPUiAgICAgICAg ICAgICAgICgweDgpDQorDQorI2RlZmluZSBORlBDSV9TQ1JBVENIX0VSUk9SX0xPICAgICAyDQor I2RlZmluZSBORlBDSV9TQ1JBVENIX0VSUk9SX0hJICAgICAzDQorDQorI2RlZmluZSBORlBfQkFS U0laRVNfQ09VTlQgNg0KKy8qDQorICogVGhpcyBtYXNrcyBvZmYgdGhlIGJvdHRvbSBiaXRzIG9m IHRoZSBQQ0lfQ1NSX0JBUiB3aGljaCBzaWduaWZ5IHRoYXQgdGhlDQorICogQkFSIGlzIGFuIElP IEJBUiByYXRoZXIgdGhhbiBhIE1FTSBCQVINCisgKi8NCisjZGVmaW5lIE5GUF9CQVJTSVpFU19N QVNLIH4weEYNCisNCisvKiBwZXItaW5zdGFuY2UgZGV2aWNlIHN0cnVjdHVyZSAqLw0KK3N0cnVj dCBuZnBfZGV2IHsNCisgLyogZG93bndhcmQgZmFjaW5nIHBhcnQgb2YgdGhlIGRldmljZSBpbnRl cmZhY2UgKi8NCisgdm9pZCBfX2lvbWVtICpiYXJbTkZQX0JBUlNJWkVTX0NPVU5UXTsNCisgdm9p ZCAqZXh0cmFbTkZQX0JBUlNJWkVTX0NPVU5UXTsNCisgaW50IGJ1c25vOw0KKyBpbnQgc2xvdG5v Ow0KKyBzdHJ1Y3QgbmZwX2RldiAqY21kY3R4Ow0KKyBjaGFyICppb2J1ZjsNCisgaW50IGFjdGl2 ZV9iYXI7DQorIGludCBjcmVhdGVkOw0KKyBpbnQgY29ubl9zdGF0dXM7DQorIGludCBkZXRlY3Rp b25fdHlwZTsNCisgaW50IGlvc2l6ZVs2XTsNCisgdTMyIGlycTsNCisgc3RydWN0IG5mcGNtZF9k ZXYgY29uc3QgKmNtZGRldjsNCisgc3RydWN0IG5mZGV2X3N0YXRzX3N0ciBzdGF0czsNCisNCisg LyogdXB3YXJkIGZhY2luZyBwYXJ0IG9mIHRoZSBkZXZpY2UgaW50ZXJmYWNlICovDQorIHU4ICpy ZWFkX2J1ZjsNCisgZG1hX2FkZHJfdCByZWFkX2RtYTsNCisNCisgdTggKndyaXRlX2J1ZjsNCisg ZG1hX2FkZHJfdCB3cml0ZV9kbWE7DQorDQorIHN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7DQorDQor IGF0b21pY190IGJ1c3k7DQorIGludCBpZnZlcnM7DQorIHN0cnVjdCB0aW1lcl9saXN0IHJkX3Rp bWVyOw0KKw0KKyB3YWl0X3F1ZXVlX2hlYWRfdCByZF9xdWV1ZTsNCisgdW5zaWduZWQgbG9uZyBy ZF9yZWFkeTsNCisgdW5zaWduZWQgbG9uZyByZF9vdXRzdGFuZGluZzsNCisgaW50IHJkX29rOw0K Kw0KKyB3YWl0X3F1ZXVlX2hlYWRfdCB3cl9xdWV1ZTsNCisgdW5zaWduZWQgbG9uZyB3cl9yZWFk eTsNCisgdW5zaWduZWQgbG9uZyB3cl9vdXRzdGFuZGluZzsNCisgaW50IHdyX29rOw0KKw0KKyBz dHJ1Y3QgbXV0ZXggaW9jdGxfbXV0ZXg7ICAvKiBsb2NrIGFjcm9zcyBpb2N0bCAqLw0KK307DQor DQorLyogUGVyLWRldmljZS10eXBlIGNvbW1hbmQgaGFuZGxlcnMgKi8NCitzdHJ1Y3QgbmZwY21k X2RldiB7DQorIGNvbnN0IGNoYXIgKm5hbWU7DQorIHUxNiB2ZW5kb3JpZCwgZGV2aWNlaWQsIHN1 Yl92ZW5kb3JpZCwgc3ViX2RldmljZWlkOw0KKyB1MzIgYmFyX3NpemVzW05GUF9CQVJTSVpFU19D T1VOVF07IC8qIGluY2x1ZGVzIElPIGJpdCAqLw0KKyB1MzIgZmxhZ3MsIG1heF9pZnZlcnM7DQor DQorIGludCAoKmNyZWF0ZSkoc3RydWN0IG5mcF9kZXYgKm5kZXYpOw0KKyBpbnQgKCpkZXN0cm95 KShzdHJ1Y3QgbmZwX2RldiAqY3R4KTsNCisgaW50ICgqb3Blbikoc3RydWN0IG5mcF9kZXYgKmN0 eCk7DQorIGludCAoKmNsb3NlKShzdHJ1Y3QgbmZwX2RldiAqY3R4KTsNCisgaW50ICgqaXNyKShz dHJ1Y3QgbmZwX2RldiAqY3R4LCBpbnQgKmhhbmRsZWQpOw0KKyBpbnQgKCp3cml0ZV9ibG9jayko dTMyIGFkZHIsDQorICAgIGNvbnN0IGNoYXIgX191c2VyICp1YmxvY2ssIGludCBsZW4sDQorICAg IHN0cnVjdCBuZnBfZGV2ICpjdHgpOw0KKyBpbnQgKCpyZWFkX2Jsb2NrKShjaGFyIF9fdXNlciAq dWJsb2NrLA0KKyAgIGludCBsZW4sIHN0cnVjdCBuZnBfZGV2ICpjdHgsIGludCAqcmNvdW50KTsN CisgaW50ICgqZW5zdXJlX3JlYWRpbmcpKGRtYV9hZGRyX3QgYWRkciwNCisgICAgICAgaW50IGxl biwgc3RydWN0IG5mcF9kZXYgKmN0eCwgaW50IGxvY2tfZmxhZyk7DQorIGludCAoKnNldGNvbnRy b2wpKGNvbnN0IHN0cnVjdCBuZmRldl9jb250cm9sX3N0ciAqY29udHJvbCwNCisgICBzdHJ1Y3Qg bmZwX2RldiAqY3R4KTsgLyogbWF5IGJlIE5VTEwgKi8NCisgaW50ICgqZ2V0c3RhdHVzKShzdHJ1 Y3QgbmZkZXZfc3RhdHVzX3N0ciAqc3RhdHVzLA0KKyBzdHJ1Y3QgbmZwX2RldiAqY3R4KTsgLyog bWF5IGJlIE5VTEwgKi8NCit9Ow0KKw0KKy8qIFRoZXNlIGluc3RhbmNlcyBhcmUgZGVmaW5lZCBp biB0aGUgcGVyLWJvYXJkIGRyaXZlciBtb2R1bGVzICovDQorZXh0ZXJuIGNvbnN0IHN0cnVjdCBu ZnBjbWRfZGV2IGkyMTU1NV9jbWRkZXY7DQorZXh0ZXJuIGNvbnN0IHN0cnVjdCBuZnBjbWRfZGV2 IGZzbF90MTAyMl9jbWRkZXY7DQorDQorI2RlZmluZSBORlBfQ01EX0ZMR19ORUVEX01TSSAgIDB4 Mg0KKw0KKyNpZm5kZWYgUENJX0JBU0VfQUREUkVTU19TUEFDRV9QUkVGRVRDSEFCTEUNCisjZGVm aW5lIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfUFJFRkVUQ0hBQkxFIDB4OA0KKyNlbmRpZg0KKw0K Ky8qIGNhbGxiYWNrcyBmcm9tIGNvbW1hbmQgZHJpdmVycyAqLw0KK3ZvaWQgbmZwX3JlYWRfY29t cGxldGUoc3RydWN0IG5mcF9kZXYgKm5kZXYsIGludCBvayk7DQordm9pZCBuZnBfd3JpdGVfY29t cGxldGUoc3RydWN0IG5mcF9kZXYgKm5kZXYsIGludCBvayk7DQorDQorLyogc3RhdHVzIGNvZGVz ICovDQorI2RlZmluZSBORlBfSFNNX1NUQVJUSU5HIDEgLyogVGhlIEhTTSBoYXNuJ3QgcmVhZGll ZCBpdHMgUENJIGludGVyZmFjZSB5ZXQgKi8NCisjZGVmaW5lIE5GUF9IU01fUE9MTElORyAyIC8q IFRoZSBIU00ncyBFUEQgd2lsbCB1c2UgcG9sbGluZyAqLw0KKw0KKy8qIGVycm9yIGNvbnZlcnNp b25zIHRhYmxlICovDQorc3RydWN0IGVycnN0ciB7DQorIGludCBvc2VycjsNCisgaW50IG5mZXJy Ow0KK307DQorDQorZXh0ZXJuIHN0cnVjdCBlcnJzdHIgZXJydGFiW107DQorDQorI2VuZGlmIC8q IFNPTE9fSCAqLw0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9uc2hpZWxkX3NvbG8u aCBiL2luY2x1ZGUvdWFwaS9saW51eC9uc2hpZWxkX3NvbG8uaA0KbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uOWE0NWE3OTJhZWJmDQotLS0gL2Rldi9udWxsDQorKysg Yi9pbmNsdWRlL3VhcGkvbGludXgvbnNoaWVsZF9zb2xvLmgNCkBAIC0wLDAgKzEsMTgxIEBADQor LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArIFdJVEggTGludXgtc3lzY2FsbC1u b3RlICovDQorLyoNCisgKg0KKyAqIG5zaGllbGRfc29sby5oOiBVQVBJIGhlYWRlciBmb3IgZHJp dmluZyB0aGUgbkNpcGhlciBQQ0kgSFNNcyB1c2luZyB0aGUNCisgKiBuc2hpZWxkX3NvbG8gbW9k dWxlDQorICoNCisgKi8NCisjaWZuZGVmIF9VQVBJX05TSElFTERfU09MT19IXw0KKyNkZWZpbmUg X1VBUElfTlNISUVMRF9TT0xPX0hfDQorDQorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQorI2lu Y2x1ZGUgPGxpbnV4L2lvY3RsLmg+DQorDQorLyogRGV2aWNlIGlvY3RsIHN0cnVjdCBkZWZpbml0 aW9ucyAqLw0KKw0KKy8qIFJlc3VsdCBvZiB0aGUgRU5RVUlSWSBpb2N0bC4gKi8NCitzdHJ1Y3Qg bmZkZXZfZW5xdWlyeV9zdHIgew0KKyBfX3UzMiBidXNubzsgLyoqPCBXaGljaCBidXMgaXMgdGhl IFBDSSBkZXZpY2Ugb24uICovDQorIF9fdTggc2xvdG5vOyAvKio8IFdoaWNoIHNsb3QgaXMgdGhl IFBDSSBkZXZpY2UgaW4uICovDQorIF9fdTggcmVzZXJ2ZWRbM107IC8qKjwgZm9yIGNvbnNpc3Rl bnQgc3RydWN0IGFsaWdubWVudCAqLw0KK307DQorDQorLyogUmVzdWx0IG9mIHRoZSBTVEFUUyBp b2N0bC4gKi8NCitzdHJ1Y3QgbmZkZXZfc3RhdHNfc3RyIHsNCisgX191MzIgaXNyOyAvKio8IENv dW50IGludGVycnVwdHMuICovDQorIF9fdTMyIGlzcl9yZWFkOyAvKio8IENvdW50IHJlYWQgaW50 ZXJydXB0cy4gKi8NCisgX191MzIgaXNyX3dyaXRlOyAvKio8IENvdW50IHdyaXRlIGludGVycnVw dHMuICovDQorIF9fdTMyIHdyaXRlX2ZhaWw7IC8qKjwgQ291bnQgd3JpdGUgZmFpbHVyZXMuICov DQorIF9fdTMyIHdyaXRlX2Jsb2NrOyAvKio8IENvdW50IGJsb2NrcyB3cml0dGVuLiAqLw0KKyBf X3UzMiB3cml0ZV9ieXRlOyAvKio8IENvdW50IGJ5dGVzIHdyaXR0ZW4uICovDQorIF9fdTMyIHJl YWRfZmFpbDsgLyoqPCBDb3VudCByZWFkIGZhaWx1cmVzLiAqLw0KKyBfX3UzMiByZWFkX2Jsb2Nr OyAvKio8IENvdW50IGJsb2NrcyByZWFkLiAqLw0KKyBfX3UzMiByZWFkX2J5dGU7IC8qKjwgQ291 bnQgYnl0ZXMgcmVhZC4gKi8NCisgX191MzIgZW5zdXJlX2ZhaWw7IC8qKjwgQ291bnQgcmVhZCBy ZXF1ZXN0IGZhaWx1cmVzLiAqLw0KKyBfX3UzMiBlbnN1cmU7IC8qKjwgQ291bnQgcmVhZCByZXF1 ZXN0cy4gKi8NCit9Ow0KKw0KKy8qIFJlc3VsdCBvZiB0aGUgU1RBVFVTIGlvY3RsLiAqLw0KK3N0 cnVjdCBuZmRldl9zdGF0dXNfc3RyIHsNCisgX191MzIgc3RhdHVzOyAvKio8IFN0YXR1cyBmbGFn cy4gKi8NCisgY2hhciBlcnJvcls4XTsgLyoqPCBFcnJvciBzdHJpbmcuICovDQorfTsNCisNCisv KiBJbnB1dCB0byB0aGUgQ09OVFJPTCBpb2N0bC4gKi8NCitzdHJ1Y3QgbmZkZXZfY29udHJvbF9z dHIgew0KKyBfX3UzMiBjb250cm9sOyAvKio8IENvbnRyb2wgZmxhZ3MuICovDQorfTsNCisNCisv KiogSW5kZXggb2YgY29udHJvbCBiaXRzIGluZGljYXRpbmcgZGVzaXJlZCBtb2RlDQorICoNCisg KiBEZXNpcmVkIG1vZGUgZm9sbG93cyB0aGUgTV9Nb2R1bGVNb2RlIGVudW1lcmF0aW9uLg0KKyAq Lw0KKyNkZWZpbmUgTkZERVZfQ09OVFJPTF9NT0RFX1NISUZUICAgICAgIDENCisNCisvKiogRGV0 ZWN0IGEgYmFja3dhcmRzLWNvbXBhdGlibGUgY29udHJvbCB2YWx1ZQ0KKyAqDQorICogUmV0dXJu cyB0cnVlIGlmIHRoZSByZXF1ZXN0IGNvbnRyb2wgdmFsdWUgIm1ha2VzIG5vIGRpZmZlcmVuY2Ui LCBpLmUuDQorICogYW5kIHRoZSBmYWlsdXJlIG9mIGFuIGF0dGVtcHQgdG8gc2V0IGl0IGlzIHRo ZXJlZm9yZSB1bmludGVyZXN0aW5nLg0KKyAqLw0KKyNkZWZpbmUgTkZERVZfQ09OVFJPTF9IQVJN TEVTUyhjKSAoKGMpIDw9IDEpDQorDQorLyoqIE1vbml0b3IgZmlybXdhcmUgc3VwcG9ydHMgTU9J IGNvbnRyb2wgYW5kIGVycm9yIHJlcG9ydGluZw0KKyAqLw0KKyNkZWZpbmUgTkZERVZfU1RBVFVT X01PTklUT1JfTU9JICAgICAgIDB4MDAwMQ0KKw0KKy8qKiBBcHBsaWNhdGlvbiBmaXJtd2FyZSBz dXBwb3J0cyBNT0kgY29udHJvbCBhbmQgZXJyb3IgcmVwb3J0aW5nDQorICovDQorI2RlZmluZSBO RkRFVl9TVEFUVVNfQVBQTElDQVRJT05fTU9JICAgMHgwMDAyDQorDQorLyoqIEFwcGxpY2F0aW9u IGZpcm13YXJlIHJ1bm5pbmcgYW5kIHN1cHBvcnRzIGVycm9yIHJlcG9ydGluZw0KKyAqLw0KKyNk ZWZpbmUgTkZERVZfU1RBVFVTX0FQUExJQ0FUSU9OX1JVTk5JTkcgMHgwMDA0DQorDQorLyoqIEhT TSBmYWlsZWQNCisgKg0KKyAqIENvbnN1bHQgZXJyb3JbXSBmb3IgYWRkaXRpb25hbCBpbmZvcm1h dGlvbi4NCisgKi8NCisjZGVmaW5lIE5GREVWX1NUQVRVU19GQUlMRUQgICAgICAgICAgICAweDAw MDgNCisNCisvKiogU3RhbmRhcmQgUENJIGludGVyZmFjZS4gKi8NCisjZGVmaW5lIE5GREVWX0lG X1NUQU5EQVJEICAgICAgICAweDAxDQorDQorLyoqIFBDSSBpbnRlcmZhY2Ugd2l0aCByZWFkIHJl cGxpZXMgcHVzaGVkIGZyb20gZGV2aWNlDQorICogIHZpYSBETUEuDQorICovDQorI2RlZmluZSBO RkRFVl9JRl9QQ0lfUFVTSCAgICAgICAgMHgwMg0KKw0KKy8qKiBQQ0kgaW50ZXJmYWNlIHdpdGgg cmVhZCByZXBsaWVzIHB1c2hlZCBmcm9tIGRldmljZQ0KKyAqICBhbmQgd3JpdGUgcmVxdWVzdHMg cHVsbGVkIGZyb20gaG9zdCB2aWEgRE1BLg0KKyAqLw0KKyNkZWZpbmUgTkZERVZfSUZfUENJX1BV TEwgMHgwMw0KKw0KKy8qKiBNYXhpbXVtIFBDSSBpbnRlcmZhY2UuICovDQorI2RlZmluZSBORkRF Vl9JRl9NQVhfVkVSUyAgICAgICAgICAgICAgTkZERVZfSUZfUENJX1BVU0hfUFVMTA0KKw0KKy8q IHBsYXRmb3JtIGluZGVwZW5kZW50IGJhc2UgaW9jdGwgbnVtYmVycyAqLw0KKw0KK2VudW0gew0K KyAvKiogRW5xdWlyeSBpb2N0bC4NCisgKiAgXHJldHVybiBuZmRldl9lbnF1aXJ5X3N0ciBkZXNj cmliaW5nIHRoZSBhdHRhY2hlZCBkZXZpY2UuDQorICovDQorIE5GREVWX0lPQ1RMX05VTV9FTlFV SVJZID0gMSwNCisNCisgLyoqIENoYW5uZWwgVXBkYXRlIGlvY3RsLg0KKyAqICBcZGVwcmVjYXRl ZA0KKyAqLw0KKyBORkRFVl9JT0NUTF9OVU1fQ0hVUERBVEUsDQorDQorIC8qKiBFbnN1cmUgUmVh ZGluZyBpb2N0bC4NCisgKiAgU2lnbmFsIGEgcmVhZCByZXF1ZXN0IHRvIHRoZSBkZXZpY2UuDQor ICogIFxwYXJhbSAodW5zaWduZWQgaW50KSBMZW5ndGggb2YgZGF0YSB0byBiZSByZWFkLg0KKyAq Lw0KKyBORkRFVl9JT0NUTF9OVU1fRU5TVVJFUkVBRElORywNCisNCisgLyoqIERldmljZSBDb3Vu dCBpb2N0bC4NCisgKiAgTm90IGltcGxlbWVudGVkIGZvciBvbiBhbGwgcGxhdGZvcm1zLg0KKyAq ICBccmV0dXJuIChpbnQpIHRoZSBudW1iZXIgb2YgYXR0YWNoZWQgZGV2aWNlcy4NCisgKi8NCisg TkZERVZfSU9DVExfTlVNX0RFVkNPVU5ULA0KKw0KKyAvKiogSW50ZXJuYWwgRGVidWcgaW9jdGwu DQorICogIE5vdCBpbXBsZW1lbnRlZCBpbiByZWxlYXNlIGRyaXZlcnMuDQorICovDQorIE5GREVW X0lPQ1RMX05VTV9ERUJVRywNCisNCisgLyoqIFBDSSBJbnRlcmZhY2UgVmVyc2lvbiBpb2N0bC4N CisgKiAgXHBhcmFtIChpbnQpIE1heGltdW0gUENJIGludGVyZmFjZSB2ZXJzaW9uDQorICogICBz dXBwb3J0ZWQgYnkgdGhlIHVzZXIgb2YgdGhlIGRldmljZS4NCisgKi8NCisgTkZERVZfSU9DVExf TlVNX1BDSV9JRlZFUlMsDQorDQorIC8qKiBTdGF0aXN0aWNzIGlvY3RsLg0KKyAqICBccmV0dXJu IG5mZGV2X2VucXVpcnlfc3RyIGRlc2NyaWJpbmcgdGhlIGF0dGFjaGVkIGRldmljZS4NCisgKi8N CisgTkZERVZfSU9DVExfTlVNX1NUQVRTLA0KKw0KKyAvKiogTW9kdWxlIGNvbnRyb2wgaW9jdGwN CisgKiBccGFyYW0gKG5mZGV2X2NvbnRyb2xfc3RyKSBWYWx1ZSB0byB3cml0ZSB0byBIU00NCisg KiBjb250cm9sIHJlZ2lzdGVyDQorICovDQorIE5GREVWX0lPQ1RMX05VTV9DT05UUk9MLA0KKw0K KyAvKiogTW9kdWxlIHN0YXRlIGlvY3RsDQorICogXHJldHVybiAobmZkZXZfc3RhdHVzX3N0cikg VmFsdWVzIHJlYWQgZnJvbSBIU00NCisgKiBzdGF0dXMvZXJyb3IgcmVnaXN0ZXJzDQorICovDQor IE5GREVWX0lPQ1RMX05VTV9TVEFUVVMsDQorfTsNCisNCisjZGVmaW5lIE5GREVWX0lPQ1RMX1RZ UEUgMHgxMA0KKw0KKyNkZWZpbmUgTkZERVZfSU9DVExfQ0hVUERBVEUgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorIF9JTyhORkRFVl9JT0NUTF9U WVBFLCBORkRFVl9JT0NUTF9OVU1fQ0hVUERBVEUpDQorDQorI2RlZmluZSBORkRFVl9JT0NUTF9F TlFVSVJZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwNCisgX0lPUihORkRFVl9JT0NUTF9UWVBFLCBORkRFVl9JT0NUTF9OVU1fRU5RVUlSWSwgICAg ICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgc3RydWN0IG5mZGV2X2VucXVpcnlfc3RyKQ0K Kw0KKyNkZWZpbmUgTkZERVZfSU9DVExfRU5TVVJFUkVBRElORyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorIF9JT1coTkZERVZfSU9DVExfVFlQRSwgTkZE RVZfSU9DVExfTlVNX0VOU1VSRVJFQURJTkcsIGludCkNCisNCisjZGVmaW5lIE5GREVWX0lPQ1RM X0VOU1VSRVJFQURJTkdfQlVHMzM0OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXA0KKyBfSU8oTkZERVZfSU9DVExfVFlQRSwgTkZERVZfSU9DVExfTlVNX0VOU1VSRVJFQURJ TkcpDQorDQorI2RlZmluZSBORkRFVl9JT0NUTF9ERUJVRyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgX0lPVyhORkRFVl9JT0NUTF9UWVBF LCBORkRFVl9JT0NUTF9OVU1fREVCVUcsIGludCkNCisNCisjZGVmaW5lIE5GREVWX0lPQ1RMX1BD SV9JRlZFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XA0KKyBfSU9XKE5GREVWX0lPQ1RMX1RZUEUsIE5GREVWX0lPQ1RMX05VTV9QQ0lfSUZWRVJTLCBp bnQpDQorDQorI2RlZmluZSBORkRFVl9JT0NUTF9TVEFUUyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgX0lPUihORkRFVl9JT0NUTF9UWVBF LCBORkRFVl9JT0NUTF9OVU1fU1RBVFMsIHN0cnVjdCBuZmRldl9zdGF0c19zdHIpDQorDQorI2Rl ZmluZSBORkRFVl9JT0NUTF9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwNCisgX0lPVyhORkRFVl9JT0NUTF9UWVBFLCBORkRFVl9JT0NU TF9OVU1fQ09OVFJPTCwgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgY29uc3Qgc3Ry dWN0IG5mZGV2X2NvbnRyb2xfc3RyKQ0KKw0KKyNkZWZpbmUgTkZERVZfSU9DVExfU1RBVFVTICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorIF9J T1IoTkZERVZfSU9DVExfVFlQRSwgTkZERVZfSU9DVExfTlVNX1NUQVRVUywgc3RydWN0IG5mZGV2 X3N0YXR1c19zdHIpDQorDQorI2VuZGlmIC8qIF9VQVBJX05TSElFTERfU09MT19IXyAqLw0KDQoN CkRhdmlkIEtpbQ0KU2VuaW9yIFNvZnR3YXJlIEVuZ2luZWVyDQpUZWw6ICs0NCAxMjIzIDcwMzQ0 OQ0KDQpuQ2lwaGVyIFNlY3VyaXR5DQpPbmUgU3RhdGlvbiBTcXVhcmUNCkNhbWJyaWRnZSBDQjEg MkdBDQpVbml0ZWQgS2luZ2RvbQ0KDQo=