From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C41B7C433F5 for ; Sat, 11 Dec 2021 05:24:08 +0000 (UTC) Received: from localhost ([::1]:36698 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mvurf-0002bp-LZ for qemu-devel@archiver.kernel.org; Sat, 11 Dec 2021 00:24:07 -0500 Received: from eggs.gnu.org ([209.51.188.92]:33622) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mvuqs-0001Tr-Fw for qemu-devel@nongnu.org; Sat, 11 Dec 2021 00:23:19 -0500 Received: from szxga01-in.huawei.com ([45.249.212.187]:2963) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mvuqj-0001C4-2o for qemu-devel@nongnu.org; Sat, 11 Dec 2021 00:23:17 -0500 Received: from dggpemm500021.china.huawei.com (unknown [172.30.72.57]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4J9x496fPVzcbqF; Sat, 11 Dec 2021 13:22:49 +0800 (CST) Received: from dggpemm100008.china.huawei.com (7.185.36.125) by dggpemm500021.china.huawei.com (7.185.36.109) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Sat, 11 Dec 2021 13:23:04 +0800 Received: from dggpeml100016.china.huawei.com (7.185.36.216) by dggpemm100008.china.huawei.com (7.185.36.125) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Sat, 11 Dec 2021 13:23:03 +0800 Received: from dggpeml100016.china.huawei.com ([7.185.36.216]) by dggpeml100016.china.huawei.com ([7.185.36.216]) with mapi id 15.01.2308.020; Sat, 11 Dec 2021 13:23:03 +0800 To: Jason Wang CC: mst , Parav Pandit , Yongji Xie , Stefan Hajnoczi , "Stefano Garzarella" , Yechuan , "Gonglei (Arei)" , qemu-devel Subject: RE: [RFC] vhost-vdpa-net: add vhost-vdpa-net host device support Thread-Topic: [RFC] vhost-vdpa-net: add vhost-vdpa-net host device support Thread-Index: AQHX6/NI4OLDAFxcVEG4PKqEpvh1aqwnmzgAgAUiWVA= Date: Sat, 11 Dec 2021 05:23:03 +0000 Message-ID: <293da14ee62f4cfca9a6cec73083e154@huawei.com> References: <20211208052010.1719-1-longpeng2@huawei.com> In-Reply-To: Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.174.148.223] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-CFilter-Loop: Reflected Received-SPF: pass client-ip=45.249.212.187; envelope-from=longpeng2@huawei.com; helo=szxga01-in.huawei.com X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, T_SPF_HELO_TEMPERROR=0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Reply-to: "Longpeng (Mike, Cloud Infrastructure Service Product Dept.)" From: longpeng2--- via DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSmFzb24gV2FuZyBbbWFp bHRvOmphc293YW5nQHJlZGhhdC5jb21dDQo+IFNlbnQ6IFdlZG5lc2RheSwgRGVjZW1iZXIgOCwg MjAyMSAyOjI3IFBNDQo+IFRvOiBMb25ncGVuZyAoTWlrZSwgQ2xvdWQgSW5mcmFzdHJ1Y3R1cmUg U2VydmljZSBQcm9kdWN0IERlcHQuKQ0KPiA8bG9uZ3BlbmcyQGh1YXdlaS5jb20+DQo+IENjOiBt c3QgPG1zdEByZWRoYXQuY29tPjsgUGFyYXYgUGFuZGl0IDxwYXJhdkBudmlkaWEuY29tPjsgWW9u Z2ppIFhpZQ0KPiA8eGlleW9uZ2ppQGJ5dGVkYW5jZS5jb20+OyBTdGVmYW4gSGFqbm9jemkgPHN0 ZWZhbmhhQHJlZGhhdC5jb20+OyBTdGVmYW5vDQo+IEdhcnphcmVsbGEgPHNnYXJ6YXJlQHJlZGhh dC5jb20+OyBZZWNodWFuIDx5ZWNodWFuQGh1YXdlaS5jb20+OyBHb25nbGVpIChBcmVpKQ0KPiA8 YXJlaS5nb25nbGVpQGh1YXdlaS5jb20+OyBxZW11LWRldmVsIDxxZW11LWRldmVsQG5vbmdudS5v cmc+DQo+IFN1YmplY3Q6IFJlOiBbUkZDXSB2aG9zdC12ZHBhLW5ldDogYWRkIHZob3N0LXZkcGEt bmV0IGhvc3QgZGV2aWNlIHN1cHBvcnQNCj4gDQo+IE9uIFdlZCwgRGVjIDgsIDIwMjEgYXQgMToy MCBQTSBMb25ncGVuZyhNaWtlKSA8bG9uZ3BlbmcyQGh1YXdlaS5jb20+IHdyb3RlOg0KPiA+DQo+ ID4gRnJvbTogTG9uZ3BlbmcgPGxvbmdwZW5nMkBodWF3ZWkuY29tPg0KPiA+DQo+ID4gSGkgZ3V5 cywNCj4gPg0KPiA+IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyB2aG9zdC12ZHBhLW5ldCBkZXZpY2Us IHdoaWNoIGlzIGluc3BpcmVkDQo+ID4gYnkgdmhvc3QtdXNlci1ibGsgYW5kIHRoZSBwcm9wb3Nh bCBvZiB2aG9zdC12ZHBhLWJsayBkZXZpY2UgWzFdLg0KPiA+DQo+ID4gSSd2ZSB0ZXN0ZWQgdGhp cyBwYXRjaCBvbiBIdWF3ZWkncyBvZmZsb2FkIGNhcmQ6DQo+ID4gLi94ODZfNjQtc29mdG1tdS9x ZW11LXN5c3RlbS14ODZfNjQgXA0KPiA+ICAgICAtZGV2aWNlIHZob3N0LXZkcGEtbmV0LXBjaSx2 ZHBhLWRldj0vZGV2L3Zob3N0LXZkcGEtMA0KPiA+DQo+ID4gRm9yIHZpcnRpbyBoYXJkd2FyZSBv ZmZsb2FkaW5nLCB0aGUgbW9zdCBpbXBvcnRhbnQgcmVxdWlyZW1lbnQgZm9yIHVzDQo+ID4gaXMg dG8gc3VwcG9ydCBsaXZlIG1pZ3JhdGlvbiBiZXR3ZWVuIG9mZmxvYWRpbmcgY2FyZHMgZnJvbSBk aWZmZXJlbnQNCj4gPiB2ZW5kb3JzLCB0aGUgY29tYmluYXRpb24gb2YgbmV0ZGV2IGFuZCB2aXJ0 aW8tbmV0IHNlZW1zIHRvbyBoZWF2eSwgd2UNCj4gPiBwcmVmZXIgYSBsaWdodHdlaWdodCB3YXku DQo+IA0KPiBDb3VsZCB5b3UgZWxhYm9yYXRlIG1vcmUgb24gdGhpcz8gSXQncyBtYWlubHkgdGhl IGNvbnRyb2wgcGF0aCB3aGVuDQo+IHVzaW5nIHdpdGggbmV0ZGV2LCBhbmQgaXQgcHJvdmlkZXMg YSBsb3Qgb2Ygb3RoZXIgYmVuZWZpdHM6DQo+IA0KPiAtIGRlY291cGxlIHRoZSB0cmFuc3BvcnQg c3BlY2lmaWMgc3R1ZmYgb3V0IG9mIHRoZSB2aG9zdCBhYnN0cmFjdGlvbiwNCj4gbW1pbyBkZXZp Y2UgaXMgc3VwcG9ydGVkIHdpdGggMCBsaW5lIG9mIGNvZGUNCj4gLSBtaWdyYXRpb24gY29tcGF0 aWJpbGl0eSwgcmV1c2UgdGhlIG1pZ3JhdGlvbiBzdHJlYW0gdGhhdCBpcyBhbHJlYWR5DQo+IHN1 cHBvcnRlZCBieSBRZW11IHZpcnRpby1uZXQsIHRoaXMgd2lsbCBhbGxvdyBtaWdyYXRpb24gYW1v bmcNCj4gZGlmZmVyZW50IHZob3N0IGJhY2tlbmRzLg0KPiAtIHNvZnR3YXJlIG1lZGlhdGlvbiBm YWNpbGl0eSwgbm90IGFsbCB0aGUgdmlydHF1ZXVlcyBhcmUgYXNzaWduZWQgdG8NCj4gZ3Vlc3Rz IGRpcmVjdGx5LiBPbmUgZXhhbXBsZSBpcyB0aGUgdmlydGlvLW5ldCBjdnEsIHFlbXUgbWF5IHdh bnQgdG8NCj4gaW50ZXJjZXB0IGFuZCByZWNvcmQgdGhlIGRldmljZSBzdGF0ZSBmb3IgbWlncmF0 aW9uLiBSZXVzaW5nIHRoZQ0KPiBjdXJyZW50IHZpcnRpby1uZXQgY29kZXMgc2ltcGxpZmllcyBh IGxvdCBvZiBjb2Rlcy4NCj4gLSB0cmFuc3BhcmVudCBmYWlsb3ZlciAoaW4gdGhlIGZ1dHVyZSks IHRoZSBuaWMgbW9kZWwgY2FuIGNob29zZSB0bw0KPiBzd2l0Y2ggYmV0d2VlbiB2aG9zdCBiYWNr ZW5kcyBldGMuDQo+IA0KDQpXZSB3YW50IHRvIHVzZSB0aGUgdmRwYSBmcmFtZXdvcmsgaW5zdGVh ZCBvZiB0aGUgdmZpby1wY2kgZnJhbWV3b3JrIGluIA0KdGhlIHZpcnRpbyBoYXJkd2FyZSBvZmZs b2FkaW5nIGNhc2UsIHNvIG1heWJlIHNvbWUgb2YgdGhlIGJlbmVmaXRzIGFib3ZlDQphcmUgbm90 IG5lZWRlZCBpbiBvdXIgY2FzZS4gQnV0IHdlIG5lZWQgdG8gbWlncmF0ZSBiZXR3ZWVuIGRpZmZl cmVudCANCmhhcmR3YXJlLCBzbyBJIGFtIG5vdCBzdXJlIHdoZXRoZXIgdGhpcyBhcHByb2FjaCB3 b3VsZCBiZSBoYXJtZnVsIHRvIHRoZSANCnJlcXVpcmVtZW50Lg0KDQo+ID4NCj4gPiBNYXliZSB3 ZSBjb3VsZCBzdXBwb3J0IGJvdGggaW4gdGhlIGZ1dHVyZSA/DQo+IA0KPiBGb3IgdGhlIG5ldCwg d2UgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBhZHZhbnRhZ2VzIG9mIHRoaXMgYXBwcm9hY2gNCj4g Zmlyc3QuIE5vdGUgdGhhdCB3ZSBkaWRuJ3QgaGF2ZSB2aG9zdC11c2VyLW5ldC1wY2kgb3Igdmhv c3QtcGNpIGluIHRoZQ0KPiBwYXN0Lg0KPiANCg0KV2h5IGRpZG4ndCBzdXBwb3J0IHZob3N0LXVz ZXItbmV0LXBjaSBpbiBoaXN0b3J5ID8gQmVjYXVzZSBpdHMgY29udHJvbA0KcGF0aCBpcyBtdWNo IG1vcmUgY29tcGxleCB0aGFuIHRoZSBibG9jayA/DQoNCj4gRm9yIHRoZSBibG9jaywgSSB3aWxs IGxlYXZlIFN0ZWZhbiBhbmQgU3RlZmFubyB0byBjb21tZW50Lg0KPiANCj4gPiBTdWNoIGFzOg0K PiA+DQo+ID4gKiBMaWdodHdlaWdodA0KPiA+ICBOZXQ6IHZob3N0LXZkcGEtbmV0DQo+ID4gIFN0 b3JhZ2U6IHZob3N0LXZkcGEtYmxrDQo+ID4NCj4gPiAqIEhlYXZ5IGJ1dCBtb3JlIHBvd2VyZnVs DQo+ID4gIE5ldDogbmV0ZGV2ICsgdmlydGlvLW5ldCArIHZob3N0LXZkcGENCj4gPiAgU3RvcmFn ZTogYmRydiArIHZpcnRpby1ibGsgKyB2aG9zdC12ZHBhDQo+ID4NCj4gPiBbMV0gaHR0cHM6Ly93 d3cubWFpbC1hcmNoaXZlLmNvbS9xZW11LWRldmVsQG5vbmdudS5vcmcvbXNnNzk3NTY5Lmh0bWwN Cj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IExvbmdwZW5nKE1pa2UpIDxsb25ncGVuZzJAaHVhd2Vp LmNvbT4NCj4gPiAtLS0NCj4gPiAgaHcvbmV0L21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICB8 ICAgMSArDQo+ID4gIGh3L25ldC92aG9zdC12ZHBhLW5ldC5jICAgICAgICAgICAgfCAzMzgNCj4g KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ICBody92aXJ0aW8vS2Nv bmZpZyAgICAgICAgICAgICAgICAgIHwgICA1ICsNCj4gPiAgaHcvdmlydGlvL21lc29uLmJ1aWxk ICAgICAgICAgICAgICB8ICAgMSArDQo+ID4gIGh3L3ZpcnRpby92aG9zdC12ZHBhLW5ldC1wY2ku YyAgICAgfCAxMTggKysrKysrKysrKysrKw0KPiANCj4gSSdkIGV4cGVjdCB0aGVyZSdzIG5vIGRl dmljZSB0eXBlIHNwZWNpZmljIGNvZGUgaW4gdGhpcyBhcHByb2FjaCBhbmQNCj4gYW55IGtpbmQg b2YgdkRQQSBkZXZpY2VzIGNvdWxkIGJlIHVzZWQgd2l0aCBhIGdlbmVyYWwgcGNpIGRldmljZS4N Cj4gDQo+IEFueSByZWFzb24gZm9yIGhhdmluZyBuZXQgc3BlY2lmaWMgdHlwZXMgaGVyZT8NCj4g DQoNCk5vLCBqdXN0IGJlY2F1c2UgdGhlcmUgYWxyZWFkeSBoYXMgdGhlIHByb3Bvc2FsIG9mIHZo b3N0LXZkcGEtYmxrLCBzbyBJIA0KZGV2ZWxvcGVkIHRoZSB2aG9zdC12ZHBhLW5ldCBjb3JyZXNw b25kaW5nbHkuDQoNCkkgcHJldHR5IGFncmVlIHdpdGggeW91ciBzdWdnZXN0aW9uLiBJZiBmZWFz aWJsZSwgbGlrZXMgdmZpby1wY2ksIHdlIGRvbid0IA0KbmVlZCB0byBtYWludGFpbiB0aGUgZGV2 aWNlIHR5cGUgc3BlY2lmaWMgY29kZSBpbiBRRU1VLCB3aGF0J3MgbW9yZSwgaXQncyANCnBvc3Np YmxlIHRvIHN1cHBvcnQgdGhlIGxpdmUgbWlncmF0aW9uIG9mIGRpZmZlcmVudCB2aXJ0aW8gaGFy ZHdhcmUuDQoNCj4gPiAgaW5jbHVkZS9ody92aXJ0aW8vdmhvc3QtdmRwYS1uZXQuaCB8ICAzMSAr KysrDQo+ID4gIGluY2x1ZGUvbmV0L3Zob3N0LXZkcGEuaCAgICAgICAgICAgfCAgIDIgKw0KPiA+ ICBuZXQvdmhvc3QtdmRwYS5jICAgICAgICAgICAgICAgICAgIHwgICAyICstDQo+ID4gIDggZmls ZXMgY2hhbmdlZCwgNDk3IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkNCj4gPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGh3L25ldC92aG9zdC12ZHBhLW5ldC5jDQo+ID4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBody92aXJ0aW8vdmhvc3QtdmRwYS1uZXQtcGNpLmMNCj4gPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGluY2x1ZGUvaHcvdmlydGlvL3Zob3N0LXZkcGEtbmV0LmgNCj4gPg0KPiA+IGRpZmYgLS1n aXQgYS9ody9uZXQvbWVzb24uYnVpbGQgYi9ody9uZXQvbWVzb24uYnVpbGQNCj4gPiBpbmRleCBi ZGY3MWYxLi4xMzllYmM0IDEwMDY0NA0KPiA+IC0tLSBhL2h3L25ldC9tZXNvbi5idWlsZA0KPiA+ ICsrKyBiL2h3L25ldC9tZXNvbi5idWlsZA0KPiA+IEBAIC00NCw2ICs0NCw3IEBAIHNwZWNpZmlj X3NzLmFkZCh3aGVuOiAnQ09ORklHX1hJTElOWF9FVEhMSVRFJywgaWZfdHJ1ZToNCj4gZmlsZXMo J3hpbGlueF9ldGhsaXRlLmMnDQo+ID4NCj4gPiAgc29mdG1tdV9zcy5hZGQod2hlbjogJ0NPTkZJ R19WSVJUSU9fTkVUJywgaWZfdHJ1ZTogZmlsZXMoJ25ldF9yeF9wa3QuYycpKQ0KPiA+ICBzcGVj aWZpY19zcy5hZGQod2hlbjogJ0NPTkZJR19WSVJUSU9fTkVUJywgaWZfdHJ1ZTogZmlsZXMoJ3Zp cnRpby1uZXQuYycpKQ0KPiA+ICtzcGVjaWZpY19zcy5hZGQod2hlbjogJ0NPTkZJR19WSE9TVF9W RFBBX05FVCcsIGlmX3RydWU6DQo+IGZpbGVzKCd2aG9zdC12ZHBhLW5ldC5jJykpDQo+ID4NCj4g PiAgc29mdG1tdV9zcy5hZGQod2hlbjogWydDT05GSUdfVklSVElPX05FVCcsICdDT05GSUdfVkhP U1RfTkVUJ10sIGlmX3RydWU6DQo+IGZpbGVzKCd2aG9zdF9uZXQuYycpLCBpZl9mYWxzZTogZmls ZXMoJ3Zob3N0X25ldC1zdHViLmMnKSkNCj4gPiAgc29mdG1tdV9zcy5hZGQod2hlbjogJ0NPTkZJ R19BTEwnLCBpZl90cnVlOiBmaWxlcygndmhvc3RfbmV0LXN0dWIuYycpKQ0KPiA+IGRpZmYgLS1n aXQgYS9ody9uZXQvdmhvc3QtdmRwYS1uZXQuYyBiL2h3L25ldC92aG9zdC12ZHBhLW5ldC5jDQo+ ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwLi40OGI5OWY5DQo+ID4g LS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2h3L25ldC92aG9zdC12ZHBhLW5ldC5jDQo+ID4gQEAg LTAsMCArMSwzMzggQEANCj4gPiArI2luY2x1ZGUgInFlbXUvb3NkZXAuaCINCj4gPiArI2luY2x1 ZGUgInFhcGkvZXJyb3IuaCINCj4gPiArI2luY2x1ZGUgInFlbXUvZXJyb3ItcmVwb3J0LmgiDQo+ ID4gKyNpbmNsdWRlICJxZW11L2N1dGlscy5oIg0KPiA+ICsjaW5jbHVkZSAiaHcvcWRldi1jb3Jl LmgiDQo+ID4gKyNpbmNsdWRlICJody9xZGV2LXByb3BlcnRpZXMuaCINCj4gPiArI2luY2x1ZGUg Imh3L3FkZXYtcHJvcGVydGllcy1zeXN0ZW0uaCINCj4gPiArI2luY2x1ZGUgImh3L3ZpcnRpby92 aG9zdC5oIg0KPiA+ICsjaW5jbHVkZSAiaHcvdmlydGlvL3Zob3N0LXZkcGEtbmV0LmgiDQo+ID4g KyNpbmNsdWRlICJody92aXJ0aW8vdmlydGlvLmgiDQo+ID4gKyNpbmNsdWRlICJody92aXJ0aW8v dmlydGlvLWJ1cy5oIg0KPiA+ICsjaW5jbHVkZSAiaHcvdmlydGlvL3ZpcnRpby1hY2Nlc3MuaCIN Cj4gPiArI2luY2x1ZGUgInN5c2VtdS9zeXNlbXUuaCINCj4gPiArI2luY2x1ZGUgInN5c2VtdS9y dW5zdGF0ZS5oIg0KPiA+ICsjaW5jbHVkZSAibmV0L3Zob3N0LXZkcGEuaCINCj4gPiArDQo+ID4g K3N0YXRpYyB2b2lkIHZob3N0X3ZkcGFfbmV0X2dldF9jb25maWcoVmlydElPRGV2aWNlICp2ZGV2 LCB1aW50OF90ICpjb25maWcpDQo+ID4gK3sNCj4gPiArICAgIFZIb3N0VmRwYU5ldCAqcyA9IFZI T1NUX1ZEUEFfTkVUKHZkZXYpOw0KPiA+ICsNCj4gPiArICAgIG1lbWNweShjb25maWcsICZzLT5u ZXRjZmcsIHNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcpKTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIHZvaWQgdmhvc3RfdmRwYV9uZXRfc2V0X2NvbmZpZyhWaXJ0SU9EZXZpY2Ug KnZkZXYsIGNvbnN0IHVpbnQ4X3QNCj4gKmNvbmZpZykNCj4gPiArew0KPiA+ICsgICAgVkhvc3RW ZHBhTmV0ICpzID0gVkhPU1RfVkRQQV9ORVQodmRldik7DQo+ID4gKyAgICBzdHJ1Y3QgdmlydGlv X25ldF9jb25maWcgKm5ldGNmZyA9IChzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcgKiljb25maWc7 DQo+ID4gKyAgICBpbnQgcmV0Ow0KPiA+ICsNCj4gPiArICAgIHJldCA9IHZob3N0X2Rldl9zZXRf Y29uZmlnKCZzLT5kZXYsICh1aW50OF90ICopbmV0Y2ZnLCAwLA0KPiBzaXplb2YoKm5ldGNmZyks DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWSE9TVF9TRVRfQ09ORklHX1RZ UEVfTUFTVEVSKTsNCj4gPiArICAgIGlmIChyZXQpIHsNCj4gPiArICAgICAgICBlcnJvcl9yZXBv cnQoInNldCBkZXZpY2UgY29uZmlnIHNwYWNlIGZhaWxlZCIpOw0KPiA+ICsgICAgICAgIHJldHVy bjsNCj4gPiArICAgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHVpbnQ2NF90IHZob3N0 X3ZkcGFfbmV0X2dldF9mZWF0dXJlcyhWaXJ0SU9EZXZpY2UgKnZkZXYsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgZmVhdHVyZXMsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3IgKipl cnJwKQ0KPiA+ICt7DQo+ID4gKyAgICBWSG9zdFZkcGFOZXQgKnMgPSBWSE9TVF9WRFBBX05FVCh2 ZGV2KTsNCj4gPiArDQo+ID4gKyAgICB2aXJ0aW9fYWRkX2ZlYXR1cmUoJmZlYXR1cmVzLCBWSVJU SU9fTkVUX0ZfQ1NVTSk7DQo+ID4gKyAgICB2aXJ0aW9fYWRkX2ZlYXR1cmUoJmZlYXR1cmVzLCBW SVJUSU9fTkVUX0ZfR1VFU1RfQ1NVTSk7DQo+ID4gKyAgICB2aXJ0aW9fYWRkX2ZlYXR1cmUoJmZl YXR1cmVzLCBWSVJUSU9fTkVUX0ZfTUFDKTsNCj4gPiArICAgIHZpcnRpb19hZGRfZmVhdHVyZSgm ZmVhdHVyZXMsIFZJUlRJT19ORVRfRl9HU08pOw0KPiA+ICsgICAgdmlydGlvX2FkZF9mZWF0dXJl KCZmZWF0dXJlcywgVklSVElPX05FVF9GX0dVRVNUX1RTTzQpOw0KPiA+ICsgICAgdmlydGlvX2Fk ZF9mZWF0dXJlKCZmZWF0dXJlcywgVklSVElPX05FVF9GX0dVRVNUX1RTTzYpOw0KPiA+ICsgICAg dmlydGlvX2FkZF9mZWF0dXJlKCZmZWF0dXJlcywgVklSVElPX05FVF9GX0dVRVNUX0VDTik7DQo+ ID4gKyAgICB2aXJ0aW9fYWRkX2ZlYXR1cmUoJmZlYXR1cmVzLCBWSVJUSU9fTkVUX0ZfR1VFU1Rf VUZPKTsNCj4gPiArICAgIHZpcnRpb19hZGRfZmVhdHVyZSgmZmVhdHVyZXMsIFZJUlRJT19ORVRf Rl9HVUVTVF9BTk5PVU5DRSk7DQo+ID4gKyAgICB2aXJ0aW9fYWRkX2ZlYXR1cmUoJmZlYXR1cmVz LCBWSVJUSU9fTkVUX0ZfSE9TVF9UU080KTsNCj4gPiArICAgIHZpcnRpb19hZGRfZmVhdHVyZSgm ZmVhdHVyZXMsIFZJUlRJT19ORVRfRl9IT1NUX1RTTzYpOw0KPiA+ICsgICAgdmlydGlvX2FkZF9m ZWF0dXJlKCZmZWF0dXJlcywgVklSVElPX05FVF9GX0hPU1RfRUNOKTsNCj4gPiArICAgIHZpcnRp b19hZGRfZmVhdHVyZSgmZmVhdHVyZXMsIFZJUlRJT19ORVRfRl9IT1NUX1VGTyk7DQo+ID4gKyAg ICB2aXJ0aW9fYWRkX2ZlYXR1cmUoJmZlYXR1cmVzLCBWSVJUSU9fTkVUX0ZfTVJHX1JYQlVGKTsN Cj4gPiArICAgIHZpcnRpb19hZGRfZmVhdHVyZSgmZmVhdHVyZXMsIFZJUlRJT19ORVRfRl9TVEFU VVMpOw0KPiA+ICsgICAgdmlydGlvX2FkZF9mZWF0dXJlKCZmZWF0dXJlcywgVklSVElPX05FVF9G X0NUUkxfVlEpOw0KPiA+ICsgICAgdmlydGlvX2FkZF9mZWF0dXJlKCZmZWF0dXJlcywgVklSVElP X05FVF9GX0NUUkxfUlgpOw0KPiA+ICsgICAgdmlydGlvX2FkZF9mZWF0dXJlKCZmZWF0dXJlcywg VklSVElPX05FVF9GX0NUUkxfVkxBTik7DQo+ID4gKyAgICB2aXJ0aW9fYWRkX2ZlYXR1cmUoJmZl YXR1cmVzLCBWSVJUSU9fTkVUX0ZfQ1RSTF9SWF9FWFRSQSk7DQo+ID4gKyAgICB2aXJ0aW9fYWRk X2ZlYXR1cmUoJmZlYXR1cmVzLCBWSVJUSU9fTkVUX0ZfQ1RSTF9NQUNfQUREUik7DQo+ID4gKyAg ICB2aXJ0aW9fYWRkX2ZlYXR1cmUoJmZlYXR1cmVzLCBWSVJUSU9fTkVUX0ZfTVEpOw0KPiANCj4g QW55IHJlYXNvbiBmb3IgdGhvc2UgaGFuZCBjcmFmdGVkIGZlYXR1cmVzPw0KPiANCj4gPiArDQo+ ID4gKyAgICByZXR1cm4gdmhvc3RfZ2V0X2ZlYXR1cmVzKCZzLT5kZXYsIHZkcGFfZmVhdHVyZV9i aXRzLCBmZWF0dXJlcyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdmhvc3RfdmRw YV9uZXRfc3RhcnQoVmlydElPRGV2aWNlICp2ZGV2LCBFcnJvciAqKmVycnApDQo+ID4gK3sNCj4g PiArICAgIFZIb3N0VmRwYU5ldCAqcyA9IFZIT1NUX1ZEUEFfTkVUKHZkZXYpOw0KPiA+ICsgICAg QnVzU3RhdGUgKnFidXMgPSBCVVMocWRldl9nZXRfcGFyZW50X2J1cyhERVZJQ0UodmRldikpKTsN Cj4gPiArICAgIFZpcnRpb0J1c0NsYXNzICprID0gVklSVElPX0JVU19HRVRfQ0xBU1MocWJ1cyk7 DQo+ID4gKyAgICBpbnQgaSwgcmV0Ow0KPiA+ICsNCj4gPiArICAgIGlmICghay0+c2V0X2d1ZXN0 X25vdGlmaWVycykgew0KPiA+ICsgICAgICAgIGVycm9yX3NldGcoZXJycCwgImJpbmRpbmcgZG9l cyBub3Qgc3VwcG9ydCBndWVzdCBub3RpZmllcnMiKTsNCj4gPiArICAgICAgICByZXR1cm4gLUVO T1NZUzsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICByZXQgPSB2aG9zdF9kZXZfZW5hYmxl X25vdGlmaWVycygmcy0+ZGV2LCB2ZGV2KTsNCj4gPiArICAgIGlmIChyZXQgPCAwKSB7DQo+ID4g KyAgICAgICAgZXJyb3Jfc2V0Z19lcnJubyhlcnJwLCAtcmV0LCAiRXJyb3IgZW5hYmxpbmcgaG9z dCBub3RpZmllcnMiKTsNCj4gPiArICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ICsgICAgfQ0KPiA+ ICsNCj4gPiArICAgIHJldCA9IGstPnNldF9ndWVzdF9ub3RpZmllcnMocWJ1cy0+cGFyZW50LCBz LT5kZXYubnZxcywgdHJ1ZSk7DQo+ID4gKyAgICBpZiAocmV0IDwgMCkgew0KPiA+ICsgICAgICAg IGVycm9yX3NldGdfZXJybm8oZXJycCwgLXJldCwgIkVycm9yIGJpbmRpbmcgZ3Vlc3Qgbm90aWZp ZXIiKTsNCj4gPiArICAgICAgICBnb3RvIGVycl9ob3N0X25vdGlmaWVyczsNCj4gPiArICAgIH0N Cj4gPiArDQo+ID4gKyAgICBzLT5kZXYuYWNrZWRfZmVhdHVyZXMgPSB2ZGV2LT5ndWVzdF9mZWF0 dXJlczsNCj4gPiArDQo+ID4gKyAgICByZXQgPSB2aG9zdF9kZXZfc3RhcnQoJnMtPmRldiwgdmRl dik7DQo+ID4gKyAgICBpZiAocmV0IDwgMCkgew0KPiA+ICsgICAgICAgIGVycm9yX3NldGdfZXJy bm8oZXJycCwgLXJldCwgIkVycm9yIHN0YXJ0aW5nIHZob3N0Iik7DQo+ID4gKyAgICAgICAgZ290 byBlcnJfZ3Vlc3Rfbm90aWZpZXJzOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAgcy0+c3RhcnRlZCA9 IHRydWU7DQo+ID4gKw0KPiA+ICsgICAgLyogZ3Vlc3Rfbm90aWZpZXJfbWFzay9wZW5kaW5nIG5v dCB1c2VkIHlldCwgc28ganVzdCB1bm1hc2sNCj4gPiArICAgICAqIGV2ZXJ5dGhpbmcgaGVyZS4g dmlydGlvLXBjaSB3aWxsIGRvIHRoZSByaWdodCB0aGluZyBieQ0KPiA+ICsgICAgICogZW5hYmxp bmcvZGlzYWJsaW5nIGlycWZkLg0KPiA+ICsgICAgICovDQo+ID4gKyAgICBmb3IgKGkgPSAwOyBp IDwgcy0+ZGV2Lm52cXM7IGkrKykgew0KPiA+ICsgICAgICAgIHZob3N0X3ZpcnRxdWV1ZV9tYXNr KCZzLT5kZXYsIHZkZXYsIGksIGZhbHNlKTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBy ZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArZXJyX2d1ZXN0X25vdGlmaWVyczoNCj4gPiArICAgIGst PnNldF9ndWVzdF9ub3RpZmllcnMocWJ1cy0+cGFyZW50LCBzLT5kZXYubnZxcywgZmFsc2UpOw0K PiA+ICtlcnJfaG9zdF9ub3RpZmllcnM6DQo+ID4gKyAgICB2aG9zdF9kZXZfZGlzYWJsZV9ub3Rp ZmllcnMoJnMtPmRldiwgdmRldik7DQo+ID4gKyAgICByZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX25ldF9oYW5kbGVfb3V0cHV0KFZpcnRJT0Rl dmljZSAqdmRldiwgVmlydFF1ZXVlICp2cSkNCj4gPiArew0KPiA+ICsgICAgVkhvc3RWZHBhTmV0 ICpzID0gVkhPU1RfVkRQQV9ORVQodmRldik7DQo+ID4gKyAgICBFcnJvciAqbG9jYWxfZXJyID0g TlVMTDsNCj4gPiArICAgIGludCBpLCByZXQ7DQo+ID4gKw0KPiA+ICsgICAgaWYgKCF2ZGV2LT5z dGFydF9vbl9raWNrKSB7DQo+ID4gKyAgICAgICAgcmV0dXJuOw0KPiA+ICsgICAgfQ0KPiA+ICsN Cj4gPiArICAgIGlmIChzLT5kZXYuc3RhcnRlZCkgew0KPiA+ICsgICAgICAgIHJldHVybjsNCj4g PiArICAgIH0NCj4gPiArDQo+ID4gKyAgICAvKiBTb21lIGd1ZXN0cyBraWNrIGJlZm9yZSBzZXR0 aW5nIFZJUlRJT19DT05GSUdfU19EUklWRVJfT0sgc28gc3RhcnQNCj4gPiArICAgICAqIHZob3N0 IGhlcmUgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciAuc2V0X3N0YXR1cygpLg0KPiA+ICsgICAgICov DQo+ID4gKyAgICByZXQgPSB2aG9zdF92ZHBhX25ldF9zdGFydCh2ZGV2LCAmbG9jYWxfZXJyKTsN Cj4gPiArICAgIGlmIChyZXQgPCAwKSB7DQo+ID4gKyAgICAgICAgZXJyb3JfcmVwb3J0Zl9lcnIo bG9jYWxfZXJyLCAidmhvc3QtdmRwYS1uZXQ6IHN0YXJ0IGZhaWxlZDogIik7DQo+ID4gKyAgICAg ICAgcmV0dXJuOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIC8qIEtpY2sgcmlnaHQgYXdh eSB0byBiZWdpbiBwcm9jZXNzaW5nIHJlcXVlc3RzIGFscmVhZHkgaW4gdnJpbmcgKi8NCj4gPiAr ICAgIGZvciAoaSA9IDA7IGkgPCBzLT5kZXYubnZxczsgaSsrKSB7DQo+ID4gKyAgICAgICAgVmly dFF1ZXVlICpraWNrX3ZxID0gdmlydGlvX2dldF9xdWV1ZSh2ZGV2LCBpKTsNCj4gPiArDQo+ID4g KyAgICAgICAgaWYgKCF2aXJ0aW9fcXVldWVfZ2V0X2Rlc2NfYWRkcih2ZGV2LCBpKSkgew0KPiA+ ICsgICAgICAgICAgICBjb250aW51ZTsNCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgICAgZXZl bnRfbm90aWZpZXJfc2V0KHZpcnRpb19xdWV1ZV9nZXRfaG9zdF9ub3RpZmllcihraWNrX3ZxKSk7 DQo+ID4gKyAgICB9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHZob3N0X3ZkcGFf bmV0X3N0b3AoVmlydElPRGV2aWNlICp2ZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICBWSG9zdFZkcGFO ZXQgKnMgPSBWSE9TVF9WRFBBX05FVCh2ZGV2KTsNCj4gPiArICAgIEJ1c1N0YXRlICpxYnVzID0g QlVTKHFkZXZfZ2V0X3BhcmVudF9idXMoREVWSUNFKHZkZXYpKSk7DQo+ID4gKyAgICBWaXJ0aW9C dXNDbGFzcyAqayA9IFZJUlRJT19CVVNfR0VUX0NMQVNTKHFidXMpOw0KPiA+ICsgICAgaW50IHJl dDsNCj4gPiArDQo+ID4gKyAgICBpZiAoIXMtPnN0YXJ0ZWQpIHsNCj4gPiArICAgICAgICByZXR1 cm47DQo+ID4gKyAgICB9DQo+ID4gKyAgICBzLT5zdGFydGVkID0gZmFsc2U7DQo+ID4gKw0KPiA+ ICsgICAgaWYgKCFrLT5zZXRfZ3Vlc3Rfbm90aWZpZXJzKSB7DQo+ID4gKyAgICAgICAgcmV0dXJu Ow0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHZob3N0X2Rldl9zdG9wKCZzLT5kZXYsIHZk ZXYpOw0KPiA+ICsNCj4gPiArICAgIHJldCA9IGstPnNldF9ndWVzdF9ub3RpZmllcnMocWJ1cy0+ cGFyZW50LCBzLT5kZXYubnZxcywgZmFsc2UpOw0KPiA+ICsgICAgaWYgKHJldCA8IDApIHsNCj4g PiArICAgICAgICBlcnJvcl9yZXBvcnQoInZob3N0IGd1ZXN0IG5vdGlmaWVyIGNsZWFudXAgZmFp bGVkOiAlZCIsIHJldCk7DQo+ID4gKyAgICAgICAgcmV0dXJuOw0KPiA+ICsgICAgfQ0KPiA+ICsN Cj4gPiArICAgIHZob3N0X2Rldl9kaXNhYmxlX25vdGlmaWVycygmcy0+ZGV2LCB2ZGV2KTsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgdmhvc3RfdmRwYV9uZXRfc2V0X3N0YXR1cyhW aXJ0SU9EZXZpY2UgKnZkZXYsIHVpbnQ4X3Qgc3RhdHVzKQ0KPiA+ICt7DQo+ID4gKyAgICBWSG9z dFZkcGFOZXQgKnMgPSBWSE9TVF9WRFBBX05FVCh2ZGV2KTsNCj4gPiArICAgIGJvb2wgc2hvdWxk X3N0YXJ0ID0gdmlydGlvX2RldmljZV9zdGFydGVkKHZkZXYsIHN0YXR1cyk7DQo+ID4gKyAgICBF cnJvciAqbG9jYWxfZXJyID0gTlVMTDsNCj4gPiArICAgIGludCByZXQ7DQo+ID4gKw0KPiA+ICsg ICAgaWYgKCF2ZGV2LT52bV9ydW5uaW5nKSB7DQo+ID4gKyAgICAgICAgc2hvdWxkX3N0YXJ0ID0g ZmFsc2U7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgaWYgKHMtPnN0YXJ0ZWQgPT0gc2hv dWxkX3N0YXJ0KSB7DQo+ID4gKyAgICAgICAgcmV0dXJuOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4g PiArICAgIGlmIChzaG91bGRfc3RhcnQpIHsNCj4gPiArICAgICAgICByZXQgPSB2aG9zdF92ZHBh X25ldF9zdGFydCh2ZGV2LCAmbG9jYWxfZXJyKTsNCj4gPiArICAgICAgICBpZiAocmV0IDwgMCkg ew0KPiA+ICsgICAgICAgICAgICBlcnJvcl9yZXBvcnRmX2Vycihsb2NhbF9lcnIsICJ2aG9zdC12 ZHBhLW5ldDogc3RhcnQgZmFpbGVkOiAiKTsNCj4gPiArICAgICAgICB9DQo+ID4gKyAgICB9IGVs c2Ugew0KPiA+ICsgICAgICAgIHZob3N0X3ZkcGFfbmV0X3N0b3AodmRldik7DQo+ID4gKyAgICB9 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHZob3N0X3ZkcGFfbmV0X3VucmVhbGl6 ZShWSG9zdFZkcGFOZXQgKnMpDQo+ID4gK3sNCj4gPiArICAgIFZpcnRJT0RldmljZSAqdmRldiA9 IFZJUlRJT19ERVZJQ0Uocyk7DQo+ID4gKyAgICBpbnQgaTsNCj4gPiArDQo+ID4gKyAgICBmb3Ig KGkgPSAwOyBpIDwgcy0+cXVldWVfcGFpcnMgKiAyOyBpKyspIHsNCj4gPiArICAgICAgICB2aXJ0 aW9fZGVsZXRlX3F1ZXVlKHMtPnZpcnRxc1tpXSk7DQo+ID4gKyAgICB9DQo+ID4gKyAgICAvKiBj dHJsIHZxICovDQo+ID4gKyAgICB2aXJ0aW9fZGVsZXRlX3F1ZXVlKHMtPnZpcnRxc1tpXSk7DQo+ ID4gKw0KPiA+ICsgICAgZ19mcmVlKHMtPnZpcnRxcyk7DQo+ID4gKyAgICB2aXJ0aW9fY2xlYW51 cCh2ZGV2KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgdmhvc3RfdmRwYV9uZXRf ZGV2aWNlX3JlYWxpemUoRGV2aWNlU3RhdGUgKmRldiwgRXJyb3IgKiplcnJwKQ0KPiA+ICt7DQo+ ID4gKyAgICBWaXJ0SU9EZXZpY2UgKnZkZXYgPSBWSVJUSU9fREVWSUNFKGRldik7DQo+ID4gKyAg ICBWSG9zdFZkcGFOZXQgKnMgPSBWSE9TVF9WRFBBX05FVCh2ZGV2KTsNCj4gPiArICAgIGludCBp LCByZXQ7DQo+ID4gKw0KPiA+ICsgICAgcy0+dmRwYS5kZXZpY2VfZmQgPSBxZW11X29wZW5fb2xk KHMtPnZkcGFfZGV2LCBPX1JEV1IpOw0KPiA+ICsgICAgaWYgKHMtPnZkcGEuZGV2aWNlX2ZkID09 IC0xKSB7DQo+ID4gKyAgICAgICAgZXJyb3Jfc2V0ZyhlcnJwLCAidmhvc3QtdmRwYS1uZXQ6IG9w ZW4gJXMgZmFpbGVkOiAlcyIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICBzLT52ZHBhX2Rldiwg c3RyZXJyb3IoZXJybm8pKTsNCj4gPiArICAgICAgICByZXR1cm47DQo+ID4gKyAgICB9DQo+ID4g Kw0KPiA+ICsgICAgdmlydGlvX2luaXQodmRldiwgInZpcnRpby1uZXQiLCBWSVJUSU9fSURfTkVU LA0KPiA+ICsgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fbmV0X2NvbmZpZykp Ow0KPiA+ICsNCj4gPiArICAgIHMtPmRldi5udnFzID0gcy0+cXVldWVfcGFpcnMgKiAyICsgMTsN Cj4gPiArICAgIHMtPmRldi52cXMgPSBnX25ldzAoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSwgcy0+ ZGV2Lm52cXMpOw0KPiA+ICsgICAgcy0+ZGV2LnZxX2luZGV4ID0gMDsNCj4gPiArICAgIHMtPmRl di52cV9pbmRleF9lbmQgPSBzLT5kZXYubnZxczsNCj4gPiArICAgIHMtPmRldi5iYWNrZW5kX2Zl YXR1cmVzID0gMDsNCj4gPiArICAgIHMtPnN0YXJ0ZWQgPSBmYWxzZTsNCj4gPiArDQo+ID4gKyAg ICBzLT52aXJ0cXMgPSBnX25ldzAoVmlydFF1ZXVlICosIHMtPmRldi5udnFzKTsNCj4gPiArICAg IGZvciAoaSA9IDA7IGkgPCBzLT5kZXYubnZxczsgaSsrKSB7DQo+ID4gKyAgICAgICAgcy0+dmly dHFzW2ldID0gdmlydGlvX2FkZF9xdWV1ZSh2ZGV2LCBzLT5xdWV1ZV9zaXplLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmhvc3RfdmRwYV9uZXRfaGFuZGxl X291dHB1dCk7DQo+IA0KPiBXZSBzaG91bGQgY2hlY2sgd2hldGhlciBNUSBpcyBuZWdvdGlhdGVk IHNpbmNlIHRoZSBpbmRleCB2YXJpZXMNCj4gZGVwZW5kaW5nIG9uIHRoYXQuDQo+IA0KPiA+ICsg ICAgfQ0KPiA+ICsNCj4gPiArICAgIHJldCA9IHZob3N0X2Rldl9pbml0KCZzLT5kZXYsICZzLT52 ZHBhLCBWSE9TVF9CQUNLRU5EX1RZUEVfVkRQQSwgMCwNCj4gTlVMTCk7DQo+ID4gKyAgICBpZiAo cmV0IDwgMCkgew0KPiA+ICsgICAgICAgIGVycm9yX3NldGcoZXJycCwgInZob3N0LXZkcGEtbmV0 OiB2aG9zdCBpbml0aWFsaXphdGlvbiBmYWlsZWQ6ICVzIiwNCj4gPiArICAgICAgICAgICAgICAg ICAgIHN0cmVycm9yKC1yZXQpKTsNCj4gPiArICAgICAgICBnb3RvIGluaXRfZXJyOw0KPiA+ICsg ICAgfQ0KPiA+ICsNCj4gPiArICAgIHJldCA9IHZob3N0X2Rldl9nZXRfY29uZmlnKCZzLT5kZXYs ICh1aW50OF90ICopJnMtPm5ldGNmZywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcpLCBOVUxMKTsNCj4gPiArICAgIGlm IChyZXQgPCAwKSB7DQo+ID4gKyAgICAgICAgZXJyb3Jfc2V0ZyhlcnJwLCAidmhvc3QtdmRwYS1u ZXQ6IGdldCBuZXR3b3JrIGNvbmZpZyBmYWlsZWQiKTsNCj4gPiArICAgICAgICBnb3RvIGNvbmZp Z19lcnI7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcmV0dXJuOw0KPiA+ICtjb25maWdf ZXJyOg0KPiA+ICsgICAgdmhvc3RfZGV2X2NsZWFudXAoJnMtPmRldik7DQo+ID4gK2luaXRfZXJy Og0KPiA+ICsgICAgdmhvc3RfdmRwYV9uZXRfdW5yZWFsaXplKHMpOw0KPiA+ICsgICAgY2xvc2Uo cy0+dmRwYS5kZXZpY2VfZmQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB2aG9z dF92ZHBhX25ldF9kZXZpY2VfdW5yZWFsaXplKERldmljZVN0YXRlICpkZXYpDQo+ID4gK3sNCj4g PiArICAgIFZpcnRJT0RldmljZSAqdmRldiA9IFZJUlRJT19ERVZJQ0UoZGV2KTsNCj4gPiArICAg IFZIb3N0VmRwYU5ldCAqcyA9IFZIT1NUX1ZEUEFfTkVUKHZkZXYpOw0KPiA+ICsNCj4gPiArICAg IHZpcnRpb19zZXRfc3RhdHVzKHZkZXYsIDApOw0KPiA+ICsgICAgdmhvc3RfZGV2X2NsZWFudXAo JnMtPmRldik7DQo+ID4gKyAgICB2aG9zdF92ZHBhX25ldF91bnJlYWxpemUocyk7DQo+ID4gKyAg ICBjbG9zZShzLT52ZHBhLmRldmljZV9mZCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBj b25zdCBWTVN0YXRlRGVzY3JpcHRpb24gdm1zdGF0ZV92aG9zdF92ZHBhX25ldCA9IHsNCj4gPiAr ICAgIC5uYW1lID0gInZob3N0LXZkcGEtbmV0IiwNCj4gPiArICAgIC5taW5pbXVtX3ZlcnNpb25f aWQgPSAxLA0KPiA+ICsgICAgLnZlcnNpb25faWQgPSAxLA0KPiA+ICsgICAgLmZpZWxkcyA9IChW TVN0YXRlRmllbGRbXSkgew0KPiA+ICsgICAgICAgIFZNU1RBVEVfVklSVElPX0RFVklDRSwNCj4g PiArICAgICAgICBWTVNUQVRFX0VORF9PRl9MSVNUKCkNCj4gPiArICAgIH0sDQo+ID4gK307DQo+ ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX25ldF9pbnN0YW5jZV9pbml0KE9iamVj dCAqb2JqKQ0KPiA+ICt7DQo+ID4gKyAgICBWSG9zdFZkcGFOZXQgKnMgPSBWSE9TVF9WRFBBX05F VChvYmopOw0KPiA+ICsNCj4gPiArICAgIGRldmljZV9hZGRfYm9vdGluZGV4X3Byb3BlcnR5KG9i aiwgJnMtPmJvb3RpbmRleCwgImJvb3RpbmRleCIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiL2V0aGVybmV0LXBoeUAwLDAiLCBERVZJQ0Uob2JqKSk7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBQcm9wZXJ0eSB2aG9zdF92ZHBhX25ldF9wcm9wZXJ0aWVzW10g PSB7DQo+ID4gKyAgICBERUZJTkVfUFJPUF9TVFJJTkcoInZkcGEtZGV2IiwgVkhvc3RWZHBhTmV0 LCB2ZHBhX2RldiksDQo+ID4gKyAgICBERUZJTkVfUFJPUF9VSU5UMTYoInF1ZXVlLXBhaXJzIiwg Vkhvc3RWZHBhTmV0LCBxdWV1ZV9wYWlycywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBW SE9TVF9WRFBBX05FVF9BVVRPX1FVRVVFX1BBSVJTKSwNCj4gDQo+IEFueSByZWFzb24gdGhhdCB3 ZSBuZWVkIHRoZSBxdWV1ZSBwYWlycyBwYXJhbWV0ZXI/IE5vdGUgdGhhdCBpdCBpcw0KPiBleHBl Y3RlZCB0byBiZSBwcm92aXNpb25lZCBieSB0aGUgbmV0bGluayBmb3IgdGhlIG1hbmFnZW1lbnQg ZGV2aWNlLg0KPiANCj4gVGhhbmtzDQoNCg==