From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-eopbgr50061.outbound.protection.outlook.com ([40.107.5.61]:11573 "EHLO EUR03-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753363AbeCUUuK (ORCPT ); Wed, 21 Mar 2018 16:50:10 -0400 From: Saeed Mahameed To: "ktkhai@virtuozzo.com" , "davem@davemloft.net" , Boris Pismenny CC: "netdev@vger.kernel.org" , "davejwatson@fb.com" , Ilya Lesokhin , Aviad Yehezkel Subject: Re: [PATCH net-next 06/14] net/tls: Add generic NIC offload infrastructure Date: Wed, 21 Mar 2018 20:50:03 +0000 Message-ID: <1521665399.8756.32.camel@mellanox.com> References: <20180320024510.7408-1-saeedm@mellanox.com> <20180320024510.7408-7-saeedm@mellanox.com> <0d69bcee-0334-0da7-4377-0422f62ae1a7@mellanox.com> <372a4ca2-9ecf-95fe-7233-4937da82003a@virtuozzo.com> In-Reply-To: <372a4ca2-9ecf-95fe-7233-4937da82003a@virtuozzo.com> Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-ID: <5CDCC97FF98C634687DFDDD370980E59@eurprd05.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org List-ID: T24gV2VkLCAyMDE4LTAzLTIxIGF0IDE5OjMxICswMzAwLCBLaXJpbGwgVGtoYWkgd3JvdGU6DQo+ IE9uIDIxLjAzLjIwMTggMTg6NTMsIEJvcmlzIFBpc21lbm55IHdyb3RlOg0KPiA+IC4uLg0KPiA+ ID4gDQo+ID4gPiBPdGhlciBwYXRjaGVzIGhhdmUgdHdvIGxpY2Vuc2VzIGluIGhlYWRlci4gQ2Fu IEkgZGlzdHJpYnV0ZSB0aGlzDQo+ID4gPiBmaWxlIHVuZGVyIEdQTCBsaWNlbnNlIHRlcm1zPw0K PiA+ID4gDQo+ID4gDQo+ID4gU3VyZSwgSSdsbCB1cGRhdGUgdGhlIGxpY2Vuc2UgdG8gbWF0Y2gg b3RoZXIgZmlsZXMgdW5kZXIgbmV0L3Rscy4NCj4gPiANCj4gPiA+ID4gKyNpbmNsdWRlIDxsaW51 eC9tb2R1bGUuaD4NCj4gPiA+ID4gKyNpbmNsdWRlIDxuZXQvdGNwLmg+DQo+ID4gPiA+ICsjaW5j bHVkZSA8bmV0L2luZXRfY29tbW9uLmg+DQo+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvaGlnaG1l bS5oPg0KPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPg0KPiA+ID4gPiArDQo+ ID4gPiA+ICsjaW5jbHVkZSA8bmV0L3Rscy5oPg0KPiA+ID4gPiArI2luY2x1ZGUgPGNyeXB0by9h ZWFkLmg+DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qIGRldmljZV9vZmZsb2FkX2xvY2sgaXMgdXNl ZCB0byBzeW5jaHJvbml6ZSB0bHNfZGV2X2FkZA0KPiA+ID4gPiArICogYWdhaW5zdCBORVRERVZf RE9XTiBub3RpZmljYXRpb25zLg0KPiA+ID4gPiArICovDQo+ID4gPiA+ICtERUZJTkVfU1RBVElD X1BFUkNQVV9SV1NFTShkZXZpY2Vfb2ZmbG9hZF9sb2NrKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiAr c3RhdGljIHZvaWQgdGxzX2RldmljZV9nY190YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7 DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0YXRpYyBERUNMQVJFX1dPUksodGxzX2RldmljZV9nY193 b3JrLCB0bHNfZGV2aWNlX2djX3Rhc2spOw0KPiA+ID4gPiArc3RhdGljIExJU1RfSEVBRCh0bHNf ZGV2aWNlX2djX2xpc3QpOw0KPiA+ID4gPiArc3RhdGljIExJU1RfSEVBRCh0bHNfZGV2aWNlX2xp c3QpOw0KPiA+ID4gPiArc3RhdGljIERFRklORV9TUElOTE9DSyh0bHNfZGV2aWNlX2xvY2spOw0K PiA+ID4gPiArDQo+ID4gPiA+ICtzdGF0aWMgdm9pZCB0bHNfZGV2aWNlX2ZyZWVfY3R4KHN0cnVj dCB0bHNfY29udGV4dCAqY3R4KQ0KPiA+ID4gPiArew0KPiA+ID4gPiArICAgIHN0cnVjdCB0bHNf b2ZmbG9hZF9jb250ZXh0ICpvZmZsYWRfY3R4ID0NCj4gPiA+ID4gdGxzX29mZmxvYWRfY3R4KGN0 eCk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBrZnJlZShvZmZsYWRfY3R4KTsNCj4gPiA+ID4g KyAgICBrZnJlZShjdHgpOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdGF0aWMg dm9pZCB0bHNfZGV2aWNlX2djX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KPiA+ID4g PiArew0KPiA+ID4gPiArICAgIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4LCAqdG1wOw0KPiA+ID4g PiArICAgIHN0cnVjdCBsaXN0X2hlYWQgZ2NfbGlzdDsNCj4gPiA+ID4gKyAgICB1bnNpZ25lZCBs b25nIGZsYWdzOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnRs c19kZXZpY2VfbG9jaywgZmxhZ3MpOw0KPiA+ID4gPiArICAgIElOSVRfTElTVF9IRUFEKCZnY19s aXN0KTsNCj4gPiA+IA0KPiA+ID4gVGhpcyBpcyBzdGFjayB2YXJpYWJsZSwgYW5kIGl0IHNob3Vs ZCBiZSBpbml0aWFsaXplZCBvdXRzaWRlIG9mDQo+ID4gPiBnbG9iYWwgc3BpbmxvY2suDQo+ID4g PiBUaGVyZSBpcyBMSVNUX0hFQUQoKSBwcmltaXRpdmUgZm9yIHRoYXQgaW4ga2VybmVsLg0KPiA+ ID4gVGhlcmUgaXMgb25lIG1vcmUgc2ltaWxhciBwbGFjZSBiZWxvdy4NCj4gPiA+IA0KPiA+IA0K PiA+IFN1cmUuDQo+ID4gDQo+ID4gPiA+ICsgICAgbGlzdF9zcGxpY2VfaW5pdCgmdGxzX2Rldmlj ZV9nY19saXN0LCAmZ2NfbGlzdCk7DQo+ID4gPiA+ICsgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmdGxzX2RldmljZV9sb2NrLCBmbGFncyk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBsaXN0 X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3R4LCB0bXAsICZnY19saXN0LCBsaXN0KSB7DQo+ID4gPiA+ ICsgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBjdHgtPm5ldGRldjsNCj4gPiA+ ID4gKw0KPiA+ID4gPiArICAgICAgICBpZiAobmV0ZGV2KSB7DQo+ID4gPiA+ICsgICAgICAgICAg ICBuZXRkZXYtPnRsc2Rldl9vcHMtPnRsc19kZXZfZGVsKG5ldGRldiwgY3R4LA0KPiA+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMU19PRkZMT0FEX0NUWF9ESVJfVFgpOw0KPiA+ ID4gPiArICAgICAgICAgICAgZGV2X3B1dChuZXRkZXYpOw0KPiA+ID4gPiArICAgICAgICB9DQo+ ID4gPiANCj4gPiA+IEhvdyBpcyBwb3NzaWJsZSB0aGUgc2l0dWF0aW9uIHdlIG1lZXQgTlVMTCBu ZXRkZXYgaGVyZSA+DQo+ID4gDQo+ID4gVGhpcyBjYW4gaGFwcGVuIGluIHRsc19kZXZpY2VfZG93 bi4gdGxzX2RldmllY19kb3duIGlzIGNhbGxlZA0KPiA+IHdoZW5ldmVyIGEgbmV0ZGV2IHRoYXQg aXMgdXNlZCBmb3IgVExTIGlubGluZSBjcnlwdG8gb2ZmbG9hZCBnb2VzDQo+ID4gZG93bi4gSXQg Z2V0cyBjYWxsZWQgdmlhIHRoZSBORVRERVZfRE9XTiBldmVudCBvZiB0aGUgbmV0ZGV2aWNlDQo+ ID4gbm90aWZpZXIuDQo+ID4gDQo+ID4gVGhpcyBmbG93IGlzIHNvbWV3aGF0IHNpbWlsYXIgdG8g dGhlIHhmcm1fZGV2aWNlIG5ldGRldiBub3RpZmllci4NCj4gPiBIb3dldmVyLCB3ZSBkbyBub3Qg ZGVzdHJveSB0aGUgc29ja2V0IChhcyBpbiBkZXN0cm95aW5nIHRoZQ0KPiA+IHhmcm1fc3RhdGUg aW4geGZybV9kZXZpY2UpLiBJbnN0ZWFkLCB3ZSBjbGVhbnVwIHRoZSBuZXRkZXYgc3RhdGUNCj4g PiBhbmQgYWxsb3cgc29mdHdhcmUgZmFsbGJhY2sgdG8gaGFuZGxlIHRoZSByZXN0IG9mIHRoZSB0 cmFmZmljLg0KPiA+IA0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgICAgIGxpc3RfZGVsKCZjdHgt Pmxpc3QpOw0KPiA+ID4gPiArICAgICAgICB0bHNfZGV2aWNlX2ZyZWVfY3R4KGN0eCk7DQo+ID4g PiA+ICsgICAgfQ0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdGF0aWMgdm9pZCB0 bHNfZGV2aWNlX3F1ZXVlX2N0eF9kZXN0cnVjdGlvbihzdHJ1Y3QNCj4gPiA+ID4gdGxzX2NvbnRl eHQgKmN0eCkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOw0K PiA+ID4gPiArDQo+ID4gPiA+ICsgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnRsc19kZXZpY2VfbG9j aywgZmxhZ3MpOw0KPiA+ID4gPiArICAgIGxpc3RfbW92ZV90YWlsKCZjdHgtPmxpc3QsICZ0bHNf ZGV2aWNlX2djX2xpc3QpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgLyogc2NoZWR1bGVfd29y ayBpbnNpZGUgdGhlIHNwaW5sb2NrDQo+ID4gPiA+ICsgICAgICogdG8gbWFrZSBzdXJlIHRsc19k ZXZpY2VfZG93biB3YWl0cyBmb3IgdGhhdCB3b3JrLg0KPiA+ID4gPiArICAgICAqLw0KPiA+ID4g PiArICAgIHNjaGVkdWxlX3dvcmsoJnRsc19kZXZpY2VfZ2Nfd29yayk7DQo+ID4gPiA+ICsNCj4g PiA+ID4gKyAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0bHNfZGV2aWNlX2xvY2ssIGZsYWdz KTsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyogV2UgYXNzdW1lIHRoYXQgdGhl IHNvY2tldCBpcyBhbHJlYWR5IGNvbm5lY3RlZCAqLw0KPiA+ID4gPiArc3RhdGljIHN0cnVjdCBu ZXRfZGV2aWNlICpnZXRfbmV0ZGV2X2Zvcl9zb2NrKHN0cnVjdCBzb2NrICpzaykNCj4gPiA+ID4g K3sNCj4gPiA+ID4gKyAgICBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7DQo+ ID4gPiA+ICsgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IE5VTEw7DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyAgICBuZXRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwgaW5l dC0NCj4gPiA+ID4gPmNvcmsuZmwuZmxvd2lfb2lmKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAg IHJldHVybiBuZXRkZXY7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0YXRpYyBp bnQgYXR0YWNoX3NvY2tfdG9fbmV0ZGV2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0DQo+ID4gPiA+ IG5ldF9kZXZpY2UgKm5ldGRldiwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgc3RydWN0IHRs c19jb250ZXh0ICpjdHgpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgICAgaW50IHJjOw0KPiA+ID4g PiArDQo+ID4gPiA+ICsgICAgcmMgPSBuZXRkZXYtPnRsc2Rldl9vcHMtPnRsc19kZXZfYWRkKG5l dGRldiwgc2ssDQo+ID4gPiA+IFRMU19PRkZMT0FEX0NUWF9ESVJfVFgsDQo+ID4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgJmN0eC0+Y3J5cHRvX3NlbmQsDQo+ID4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgdGNwX3NrKHNrKS0+d3JpdGVfc2VxKTsNCj4gPiA+ID4gKyAgICBp ZiAocmMpIHsNCj4gPiA+ID4gKyAgICAgICAgcHJfZXJyX3JhdGVsaW1pdGVkKCJUaGUgbmV0ZGV2 IGhhcyByZWZ1c2VkIHRvIG9mZmxvYWQNCj4gPiA+ID4gdGhpcyBzb2NrZXRcbiIpOw0KPiA+ID4g PiArICAgICAgICBnb3RvIG91dDsNCj4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4g KyAgICByYyA9IDA7DQo+ID4gPiA+ICtvdXQ6DQo+ID4gPiA+ICsgICAgcmV0dXJuIHJjOw0KPiA+ ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdGF0aWMgdm9pZCBkZXN0cm95X3JlY29yZChz dHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZWNvcmQpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgICAg c2tiX2ZyYWdfdCAqZnJhZzsNCj4gPiA+ID4gKyAgICBpbnQgbnJfZnJhZ3MgPSByZWNvcmQtPm51 bV9mcmFnczsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIHdoaWxlIChucl9mcmFncyA+IDApIHsN Cj4gPiA+ID4gKyAgICAgICAgZnJhZyA9ICZyZWNvcmQtPmZyYWdzW25yX2ZyYWdzIC0gMV07DQo+ ID4gPiA+ICsgICAgICAgIF9fc2tiX2ZyYWdfdW5yZWYoZnJhZyk7DQo+ID4gPiA+ICsgICAgICAg IC0tbnJfZnJhZ3M7DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiArICAgIGtmcmVlKHJlY29yZCk7 DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0YXRpYyB2b2lkIGRlbGV0ZV9hbGxf cmVjb3JkcyhzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dA0KPiA+ID4gPiAqb2ZmbG9hZF9jdHgp DQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgICAgc3RydWN0IHRsc19yZWNvcmRfaW5mbyAqaW5mbywg KnRlbXA7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUo aW5mbywgdGVtcCwgJm9mZmxvYWRfY3R4LQ0KPiA+ID4gPiA+cmVjb3Jkc19saXN0LCBsaXN0KSB7 DQo+ID4gPiA+ICsgICAgICAgIGxpc3RfZGVsKCZpbmZvLT5saXN0KTsNCj4gPiA+ID4gKyAgICAg ICAgZGVzdHJveV9yZWNvcmQoaW5mbyk7DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiArDQo+ID4g PiA+ICsgICAgb2ZmbG9hZF9jdHgtPnJldHJhbnNtaXRfaGludCA9IE5VTEw7DQo+ID4gPiA+ICt9 DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0YXRpYyB2b2lkIHRsc19pY3NrX2NsZWFuX2Fja2VkKHN0 cnVjdCBzb2NrICpzaywgdTMyDQo+ID4gPiA+IGFja2VkX3NlcSkNCj4gPiA+ID4gK3sNCj4gPiA+ ID4gKyAgICBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7DQo+ ID4gPiA+ICsgICAgc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHQgKmN0eDsNCj4gPiA+ID4gKyAg ICBzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICppbmZvLCAqdGVtcDsNCj4gPiA+ID4gKyAgICB1bnNp Z25lZCBsb25nIGZsYWdzOw0KPiA+ID4gPiArICAgIHU2NCBkZWxldGVkX3JlY29yZHMgPSAwOw0K PiA+ID4gPiArDQo+ID4gPiA+ICsgICAgaWYgKCF0bHNfY3R4KQ0KPiA+ID4gPiArICAgICAgICBy ZXR1cm47DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBjdHggPSB0bHNfb2ZmbG9hZF9jdHgodGxz X2N0eCk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBzcGluX2xvY2tfaXJxc2F2ZSgmY3R4LT5s b2NrLCBmbGFncyk7DQo+ID4gPiA+ICsgICAgaW5mbyA9IGN0eC0+cmV0cmFuc21pdF9oaW50Ow0K PiA+ID4gPiArICAgIGlmIChpbmZvICYmICFiZWZvcmUoYWNrZWRfc2VxLCBpbmZvLT5lbmRfc2Vx KSkgew0KPiA+ID4gPiArICAgICAgICBjdHgtPnJldHJhbnNtaXRfaGludCA9IE5VTEw7DQo+ID4g PiA+ICsgICAgICAgIGxpc3RfZGVsKCZpbmZvLT5saXN0KTsNCj4gPiA+ID4gKyAgICAgICAgZGVz dHJveV9yZWNvcmQoaW5mbyk7DQo+ID4gPiA+ICsgICAgICAgIGRlbGV0ZWRfcmVjb3JkcysrOw0K PiA+ID4gPiArICAgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIGxpc3RfZm9yX2VhY2hfZW50 cnlfc2FmZShpbmZvLCB0ZW1wLCAmY3R4LT5yZWNvcmRzX2xpc3QsDQo+ID4gPiA+IGxpc3QpIHsN Cj4gPiA+ID4gKyAgICAgICAgaWYgKGJlZm9yZShhY2tlZF9zZXEsIGluZm8tPmVuZF9zZXEpKQ0K PiA+ID4gPiArICAgICAgICAgICAgYnJlYWs7DQo+ID4gPiA+ICsgICAgICAgIGxpc3RfZGVsKCZp bmZvLT5saXN0KTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAgICBkZXN0cm95X3JlY29yZChp bmZvKTsNCj4gPiA+ID4gKyAgICAgICAgZGVsZXRlZF9yZWNvcmRzKys7DQo+ID4gPiA+ICsgICAg fQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgY3R4LT51bmFja2VkX3JlY29yZF9zbiArPSBkZWxl dGVkX3JlY29yZHM7DQo+ID4gPiA+ICsgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5s b2NrLCBmbGFncyk7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qIEF0IHRoaXMg cG9pbnQsIHRoZXJlIHNob3VsZCBiZSBubyByZWZlcmVuY2VzIG9uIHRoaXMNCj4gPiA+ID4gKyAq IHNvY2tldCBhbmQgbm8gaW4tZmxpZ2h0IFNLQnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMNCj4gPiA+ ID4gKyAqIHNvY2tldCwgc28gaXQgaXMgc2FmZSB0byBmcmVlIGFsbCB0aGUgcmVzb3VyY2VzLg0K PiA+ID4gPiArICovDQo+ID4gPiA+ICt2b2lkIHRsc19kZXZpY2Vfc2tfZGVzdHJ1Y3Qoc3RydWN0 IHNvY2sgKnNrKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArICAgIHN0cnVjdCB0bHNfY29udGV4dCAq dGxzX2N0eCA9IHRsc19nZXRfY3R4KHNrKTsNCj4gPiA+ID4gKyAgICBzdHJ1Y3QgdGxzX29mZmxv YWRfY29udGV4dCAqY3R4ID0NCj4gPiA+ID4gdGxzX29mZmxvYWRfY3R4KHRsc19jdHgpOw0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgICAgaWYgKGN0eC0+b3Blbl9yZWNvcmQpDQo+ID4gPiA+ICsgICAg ICAgIGRlc3Ryb3lfcmVjb3JkKGN0eC0+b3Blbl9yZWNvcmQpOw0KPiA+ID4gPiArDQo+ID4gPiA+ ICsgICAgZGVsZXRlX2FsbF9yZWNvcmRzKGN0eCk7DQo+ID4gPiA+ICsgICAgY3J5cHRvX2ZyZWVf YWVhZChjdHgtPmFlYWRfc2VuZCk7DQo+ID4gPiA+ICsgICAgY3R4LT5za19kZXN0cnVjdChzayk7 DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZ0bHNf Y3R4LT5yZWZjb3VudCkpDQo+ID4gPiA+ICsgICAgICAgIHRsc19kZXZpY2VfcXVldWVfY3R4X2Rl c3RydWN0aW9uKHRsc19jdHgpOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArRVhQT1JUX1NZTUJPTCh0 bHNfZGV2aWNlX3NrX2Rlc3RydWN0KTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArc3RhdGljIGlubGlu ZSB2b2lkIHRsc19hcHBlbmRfZnJhZyhzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvDQo+ID4gPiA+ICpy ZWNvcmQsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgc3RydWN0IHBhZ2VfZnJhZyAqcGZy YWcsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgaW50IHNpemUpDQo+ID4gPiA+ICt7DQo+ ID4gPiA+ICsgICAgc2tiX2ZyYWdfdCAqZnJhZzsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIGZy YWcgPSAmcmVjb3JkLT5mcmFnc1tyZWNvcmQtPm51bV9mcmFncyAtIDFdOw0KPiA+ID4gPiArICAg IGlmIChmcmFnLT5wYWdlLnAgPT0gcGZyYWctPnBhZ2UgJiYNCj4gPiA+ID4gKyAgICAgICAgZnJh Zy0+cGFnZV9vZmZzZXQgKyBmcmFnLT5zaXplID09IHBmcmFnLT5vZmZzZXQpIHsNCj4gPiA+ID4g KyAgICAgICAgZnJhZy0+c2l6ZSArPSBzaXplOw0KPiA+ID4gPiArICAgIH0gZWxzZSB7DQo+ID4g PiA+ICsgICAgICAgICsrZnJhZzsNCj4gPiA+ID4gKyAgICAgICAgZnJhZy0+cGFnZS5wID0gcGZy YWctPnBhZ2U7DQo+ID4gPiA+ICsgICAgICAgIGZyYWctPnBhZ2Vfb2Zmc2V0ID0gcGZyYWctPm9m ZnNldDsNCj4gPiA+ID4gKyAgICAgICAgZnJhZy0+c2l6ZSA9IHNpemU7DQo+ID4gPiA+ICsgICAg ICAgICsrcmVjb3JkLT5udW1fZnJhZ3M7DQo+ID4gPiA+ICsgICAgICAgIGdldF9wYWdlKHBmcmFn LT5wYWdlKTsNCj4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBwZnJhZy0+ b2Zmc2V0ICs9IHNpemU7DQo+ID4gPiA+ICsgICAgcmVjb3JkLT5sZW4gKz0gc2l6ZTsNCj4gPiA+ ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArc3RhdGljIGlubGluZSBpbnQgdGxzX3B1c2hfcmVj b3JkKHN0cnVjdCBzb2NrICpzaywNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgIHN0cnVjdCB0 bHNfY29udGV4dCAqY3R4LA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgc3RydWN0IHRsc19v ZmZsb2FkX2NvbnRleHQgKm9mZmxvYWRfY3R4LA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAg c3RydWN0IHRsc19yZWNvcmRfaW5mbyAqcmVjb3JkLA0KPiA+ID4gPiArICAgICAgICAgICAgICAg ICAgc3RydWN0IHBhZ2VfZnJhZyAqcGZyYWcsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICBp bnQgZmxhZ3MsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlY29y ZF90eXBlKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArICAgIHNrYl9mcmFnX3QgKmZyYWc7DQo+ID4g PiA+ICsgICAgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7DQo+ID4gPiA+ICsgICAg c3RydWN0IHBhZ2VfZnJhZyBmYWxsYmFja19mcmFnOw0KPiA+ID4gPiArICAgIHN0cnVjdCBwYWdl X2ZyYWcgICp0YWdfcGZyYWcgPSBwZnJhZzsNCj4gPiA+ID4gKyAgICBpbnQgaTsNCj4gPiA+ID4g Kw0KPiA+ID4gPiArICAgIC8qIGZpbGwgcHJlcGFuZCAqLw0KPiA+ID4gPiArICAgIGZyYWcgPSAm cmVjb3JkLT5mcmFnc1swXTsNCj4gPiA+ID4gKyAgICB0bHNfZmlsbF9wcmVwZW5kKGN0eCwNCj4g PiA+ID4gKyAgICAgICAgICAgICBza2JfZnJhZ19hZGRyZXNzKGZyYWcpLA0KPiA+ID4gPiArICAg ICAgICAgICAgIHJlY29yZC0+bGVuIC0gY3R4LT5wcmVwZW5kX3NpemUsDQo+ID4gPiA+ICsgICAg ICAgICAgICAgcmVjb3JkX3R5cGUpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgaWYgKHVubGlr ZWx5KCFza2JfcGFnZV9mcmFnX3JlZmlsbChjdHgtPnRhZ19zaXplLCBwZnJhZywNCj4gPiA+ID4g R0ZQX0tFUk5FTCkpKSB7DQo+ID4gPiA+ICsgICAgICAgIC8qIEhXIGRvZXNuJ3QgY2FyZSBhYm91 dCB0aGUgZGF0YSBpbiB0aGUgdGFnDQo+ID4gPiA+ICsgICAgICAgICAqIHNvIGluIGNhc2UgcGZy YWcgaGFzIG5vIHJvb20NCj4gPiA+ID4gKyAgICAgICAgICogZm9yIGEgdGFnIGFuZCB3ZSBjYW4n dCBhbGxvY2F0ZSBhIG5ldyBwZnJhZw0KPiA+ID4gPiArICAgICAgICAgKiBqdXN0IHVzZSB0aGUg cGFnZSBpbiB0aGUgZmlyc3QgZnJhZw0KPiA+ID4gPiArICAgICAgICAgKiByYXRoZXIgdGhlbiB3 cml0ZSBhIGNvbXBsaWNhdGVkIGZhbGwgYmFjayBjb2RlLg0KPiA+ID4gPiArICAgICAgICAgKi8N Cj4gPiA+ID4gKyAgICAgICAgdGFnX3BmcmFnID0gJmZhbGxiYWNrX2ZyYWc7DQo+ID4gPiA+ICsg ICAgICAgIHRhZ19wZnJhZy0+cGFnZSA9IHNrYl9mcmFnX3BhZ2UoZnJhZyk7DQo+ID4gPiA+ICsg ICAgICAgIHRhZ19wZnJhZy0+b2Zmc2V0ID0gMDsNCj4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyAgICB0bHNfYXBwZW5kX2ZyYWcocmVjb3JkLCB0YWdfcGZyYWcsIGN0eC0+dGFn X3NpemUpOw0KPiA+ID4gPiArICAgIHJlY29yZC0+ZW5kX3NlcSA9IHRwLT53cml0ZV9zZXEgKyBy ZWNvcmQtPmxlbjsNCj4gPiA+ID4gKyAgICBzcGluX2xvY2tfaXJxKCZvZmZsb2FkX2N0eC0+bG9j ayk7DQo+ID4gPiA+ICsgICAgbGlzdF9hZGRfdGFpbCgmcmVjb3JkLT5saXN0LCAmb2ZmbG9hZF9j dHgtPnJlY29yZHNfbGlzdCk7DQo+ID4gPiA+ICsgICAgc3Bpbl91bmxvY2tfaXJxKCZvZmZsb2Fk X2N0eC0+bG9jayk7DQo+ID4gPiA+ICsgICAgb2ZmbG9hZF9jdHgtPm9wZW5fcmVjb3JkID0gTlVM TDsNCj4gPiA+ID4gKyAgICBzZXRfYml0KFRMU19QRU5ESU5HX0NMT1NFRF9SRUNPUkQsICZjdHgt PmZsYWdzKTsNCj4gPiA+ID4gKyAgICB0bHNfYWR2YW5jZV9yZWNvcmRfc24oc2ssIGN0eCk7DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBmb3IgKGkgPSAwOyBpIDwgcmVjb3JkLT5udW1fZnJhZ3M7 IGkrKykgew0KPiA+ID4gPiArICAgICAgICBmcmFnID0gJnJlY29yZC0+ZnJhZ3NbaV07DQo+ID4g PiA+ICsgICAgICAgIHNnX3VubWFya19lbmQoJm9mZmxvYWRfY3R4LT5zZ190eF9kYXRhW2ldKTsN Cj4gPiA+ID4gKyAgICAgICAgc2dfc2V0X3BhZ2UoJm9mZmxvYWRfY3R4LT5zZ190eF9kYXRhW2ld LA0KPiA+ID4gPiBza2JfZnJhZ19wYWdlKGZyYWcpLA0KPiA+ID4gPiArICAgICAgICAgICAgICAg IGZyYWctPnNpemUsIGZyYWctPnBhZ2Vfb2Zmc2V0KTsNCj4gPiA+ID4gKyAgICAgICAgc2tfbWVt X2NoYXJnZShzaywgZnJhZy0+c2l6ZSk7DQo+ID4gPiA+ICsgICAgICAgIGdldF9wYWdlKHNrYl9m cmFnX3BhZ2UoZnJhZykpOw0KPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gKyAgICBzZ19tYXJrX2Vu ZCgmb2ZmbG9hZF9jdHgtPnNnX3R4X2RhdGFbcmVjb3JkLT5udW1fZnJhZ3MgLQ0KPiA+ID4gPiAx XSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAvKiBhbGwgcmVhZHksIHNlbmQgKi8NCj4gPiA+ ID4gKyAgICByZXR1cm4gdGxzX3B1c2hfc2coc2ssIGN0eCwgb2ZmbG9hZF9jdHgtPnNnX3R4X2Rh dGEsIDAsDQo+ID4gPiA+IGZsYWdzKTsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiAr c3RhdGljIGlubGluZSBpbnQgdGxzX2NyZWF0ZV9uZXdfcmVjb3JkKHN0cnVjdA0KPiA+ID4gPiB0 bHNfb2ZmbG9hZF9jb250ZXh0ICpvZmZsb2FkX2N0eCwNCj4gPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHBhZ2VfZnJhZyAqcGZyYWcsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBwcmVwZW5kX3NpemUpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgICAgc2tiX2Zy YWdfdCAqZnJhZzsNCj4gPiA+ID4gKyAgICBzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZWNvcmQ7 DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICByZWNvcmQgPSBrbWFsbG9jKHNpemVvZigqcmVjb3Jk KSwgR0ZQX0tFUk5FTCk7DQo+ID4gPiA+ICsgICAgaWYgKCFyZWNvcmQpDQo+ID4gPiA+ICsgICAg ICAgIHJldHVybiAtRU5PTUVNOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgZnJhZyA9ICZyZWNv cmQtPmZyYWdzWzBdOw0KPiA+ID4gPiArICAgIF9fc2tiX2ZyYWdfc2V0X3BhZ2UoZnJhZywgcGZy YWctPnBhZ2UpOw0KPiA+ID4gPiArICAgIGZyYWctPnBhZ2Vfb2Zmc2V0ID0gcGZyYWctPm9mZnNl dDsNCj4gPiA+ID4gKyAgICBza2JfZnJhZ19zaXplX3NldChmcmFnLCBwcmVwZW5kX3NpemUpOw0K PiA+ID4gPiArDQo+ID4gPiA+ICsgICAgZ2V0X3BhZ2UocGZyYWctPnBhZ2UpOw0KPiA+ID4gPiAr ICAgIHBmcmFnLT5vZmZzZXQgKz0gcHJlcGVuZF9zaXplOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsg ICAgcmVjb3JkLT5udW1fZnJhZ3MgPSAxOw0KPiA+ID4gPiArICAgIHJlY29yZC0+bGVuID0gcHJl cGVuZF9zaXplOw0KPiA+ID4gPiArICAgIG9mZmxvYWRfY3R4LT5vcGVuX3JlY29yZCA9IHJlY29y ZDsNCj4gPiA+ID4gKyAgICByZXR1cm4gMDsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4g PiArc3RhdGljIGlubGluZSBpbnQgdGxzX2RvX2FsbG9jYXRpb24oc3RydWN0IHNvY2sgKnNrLA0K PiA+ID4gPiArICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dCAq b2ZmbG9hZF9jdHgsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYWdlX2Zy YWcgKnBmcmFnLA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICBzaXplX3QgcHJlcGVuZF9z aXplKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArICAgIGludCByZXQ7DQo+ID4gPiA+ICsNCj4gPiA+ ID4gKyAgICBpZiAoIW9mZmxvYWRfY3R4LT5vcGVuX3JlY29yZCkgew0KPiA+ID4gPiArICAgICAg ICBpZiAodW5saWtlbHkoIXNrYl9wYWdlX2ZyYWdfcmVmaWxsKHByZXBlbmRfc2l6ZSwNCj4gPiA+ ID4gcGZyYWcsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBzay0+c2tfYWxs b2NhdGlvbikpKSB7DQo+ID4gPiA+ICsgICAgICAgICAgICBzay0+c2tfcHJvdC0+ZW50ZXJfbWVt b3J5X3ByZXNzdXJlKHNrKTsNCj4gPiA+ID4gKyAgICAgICAgICAgIHNrX3N0cmVhbV9tb2RlcmF0 ZV9zbmRidWYoc2spOw0KPiA+ID4gPiArICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ID4g PiA+ICsgICAgICAgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAgICByZXQgPSB0bHNfY3Jl YXRlX25ld19yZWNvcmQob2ZmbG9hZF9jdHgsIHBmcmFnLA0KPiA+ID4gPiBwcmVwZW5kX3NpemUp Ow0KPiA+ID4gPiArICAgICAgICBpZiAocmV0KQ0KPiA+ID4gPiArICAgICAgICAgICAgcmV0dXJu IHJldDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAgICBpZiAocGZyYWctPnNpemUgPiBwZnJh Zy0+b2Zmc2V0KQ0KPiA+ID4gPiArICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gPiA+ICsgICAg fQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgaWYgKCFza19wYWdlX2ZyYWdfcmVmaWxsKHNrLCBw ZnJhZykpDQo+ID4gPiA+ICsgICAgICAgIHJldHVybiAtRU5PTUVNOw0KPiA+ID4gPiArDQo+ID4g PiA+ICsgICAgcmV0dXJuIDA7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0YXRp YyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssDQo+ID4gPiA+ICsgICAgICAgICAg ICAgc3RydWN0IGlvdl9pdGVyICptc2dfaXRlciwNCj4gPiA+ID4gKyAgICAgICAgICAgICBzaXpl X3Qgc2l6ZSwgaW50IGZsYWdzLA0KPiA+ID4gPiArICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIg cmVjb3JkX3R5cGUpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgICAgc3RydWN0IHRsc19jb250ZXh0 ICp0bHNfY3R4ID0gdGxzX2dldF9jdHgoc2spOw0KPiA+ID4gPiArICAgIHN0cnVjdCB0bHNfb2Zm bG9hZF9jb250ZXh0ICpjdHggPQ0KPiA+ID4gPiB0bHNfb2ZmbG9hZF9jdHgodGxzX2N0eCk7DQo+ ID4gPiA+ICsgICAgc3RydWN0IHRsc19yZWNvcmRfaW5mbyAqcmVjb3JkID0gY3R4LT5vcGVuX3Jl Y29yZDsNCj4gPiA+ID4gKyAgICBzdHJ1Y3QgcGFnZV9mcmFnICpwZnJhZzsNCj4gPiA+ID4gKyAg ICBpbnQgY29weSwgcmMgPSAwOw0KPiA+ID4gPiArICAgIHNpemVfdCBvcmlnX3NpemUgPSBzaXpl Ow0KPiA+ID4gPiArICAgIHUzMiBtYXhfb3Blbl9yZWNvcmRfbGVuOw0KPiA+ID4gPiArICAgIGxv bmcgdGltZW87DQo+ID4gPiA+ICsgICAgaW50IG1vcmUgPSBmbGFncyAmIChNU0dfU0VORFBBR0Vf Tk9UTEFTVCB8IE1TR19NT1JFKTsNCj4gPiA+ID4gKyAgICBpbnQgdGxzX3B1c2hfcmVjb3JkX2Zs YWdzID0gZmxhZ3MgfCBNU0dfU0VORFBBR0VfTk9UTEFTVDsNCj4gPiA+ID4gKyAgICBib29sIGRv bmUgPSBmYWxzZTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIGlmIChmbGFncyAmDQo+ID4gPiA+ ICsgICAgICAgIH4oTVNHX01PUkUgfCBNU0dfRE9OVFdBSVQgfCBNU0dfTk9TSUdOQUwgfA0KPiA+ ID4gPiBNU0dfU0VORFBBR0VfTk9UTEFTVCkpDQo+ID4gPiA+ICsgICAgICAgIHJldHVybiAtRU5P VFNVUFA7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBpZiAoc2stPnNrX2VycikNCj4gPiA+ID4g KyAgICAgICAgcmV0dXJuIC1zay0+c2tfZXJyOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgdGlt ZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBmbGFncyAmIE1TR19ET05UV0FJVCk7DQo+ID4gPiA+ICsg ICAgcmMgPSB0bHNfY29tcGxldGVfcGVuZGluZ193b3JrKHNrLCB0bHNfY3R4LCBmbGFncywNCj4g PiA+ID4gJnRpbWVvKTsNCj4gPiA+ID4gKyAgICBpZiAocmMgPCAwKQ0KPiA+ID4gPiArICAgICAg ICByZXR1cm4gcmM7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBwZnJhZyA9IHNrX3BhZ2VfZnJh Zyhzayk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAvKiBLVExTX1RMU19IRUFERVJfU0laRSBp cyBub3QgY291bnRlZCBhcyBwYXJ0IG9mIHRoZSBUTFMNCj4gPiA+ID4gcmVjb3JkLCBhbmQNCj4g PiA+ID4gKyAgICAgKiB3ZSBuZWVkIHRvIGxlYXZlIHJvb20gZm9yIGFuIGF1dGhlbnRpY2F0aW9u IHRhZy4NCj4gPiA+ID4gKyAgICAgKi8NCj4gPiA+ID4gKyAgICBtYXhfb3Blbl9yZWNvcmRfbGVu ID0gVExTX01BWF9QQVlMT0FEX1NJWkUgKw0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgdGxz X2N0eC0+cHJlcGVuZF9zaXplOw0KPiA+ID4gPiArICAgIGRvIHsNCj4gPiA+ID4gKyAgICAgICAg aWYgKHRsc19kb19hbGxvY2F0aW9uKHNrLCBjdHgsIHBmcmFnLA0KPiA+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgIHRsc19jdHgtPnByZXBlbmRfc2l6ZSkpIHsNCj4gPiA+ID4gKyAgICAgICAg ICAgIHJjID0gc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHNrLCAmdGltZW8pOw0KPiA+ID4gPiArICAg ICAgICAgICAgaWYgKCFyYykNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICBjb250aW51ZTsNCj4g PiA+ID4gKw0KPiA+ID4gPiArICAgICAgICAgICAgcmVjb3JkID0gY3R4LT5vcGVuX3JlY29yZDsN Cj4gPiA+ID4gKyAgICAgICAgICAgIGlmICghcmVjb3JkKQ0KPiA+ID4gPiArICAgICAgICAgICAg ICAgIGJyZWFrOw0KPiA+ID4gPiAraGFuZGxlX2Vycm9yOg0KPiA+ID4gPiArICAgICAgICAgICAg aWYgKHJlY29yZF90eXBlICE9IFRMU19SRUNPUkRfVFlQRV9EQVRBKSB7DQo+ID4gPiA+ICsgICAg ICAgICAgICAgICAgLyogYXZvaWQgc2VuZGluZyBwYXJ0aWFsDQo+ID4gPiA+ICsgICAgICAgICAg ICAgICAgICogcmVjb3JkIHdpdGggdHlwZSAhPQ0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAq IGFwcGxpY2F0aW9uX2RhdGENCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgKi8NCj4gPiA+ID4g KyAgICAgICAgICAgICAgICBzaXplID0gb3JpZ19zaXplOw0KPiA+ID4gPiArICAgICAgICAgICAg ICAgIGRlc3Ryb3lfcmVjb3JkKHJlY29yZCk7DQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgY3R4 LT5vcGVuX3JlY29yZCA9IE5VTEw7DQo+ID4gPiA+ICsgICAgICAgICAgICB9IGVsc2UgaWYgKHJl Y29yZC0+bGVuID4gdGxzX2N0eC0+cHJlcGVuZF9zaXplKSB7DQo+ID4gPiA+ICsgICAgICAgICAg ICAgICAgZ290byBsYXN0X3JlY29yZDsNCj4gPiA+ID4gKyAgICAgICAgICAgIH0NCj4gPiA+ID4g Kw0KPiA+ID4gPiArICAgICAgICAgICAgYnJlYWs7DQo+ID4gPiA+ICsgICAgICAgIH0NCj4gPiA+ ID4gKw0KPiA+ID4gPiArICAgICAgICByZWNvcmQgPSBjdHgtPm9wZW5fcmVjb3JkOw0KPiA+ID4g PiArICAgICAgICBjb3B5ID0gbWluX3Qoc2l6ZV90LCBzaXplLCAocGZyYWctPnNpemUgLSBwZnJh Zy0NCj4gPiA+ID4gPm9mZnNldCkpOw0KPiA+ID4gPiArICAgICAgICBjb3B5ID0gbWluX3Qoc2l6 ZV90LCBjb3B5LCAobWF4X29wZW5fcmVjb3JkX2xlbiAtDQo+ID4gPiA+IHJlY29yZC0+bGVuKSk7 DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgICAgaWYgKGNvcHlfZnJvbV9pdGVyX25vY2FjaGUo cGFnZV9hZGRyZXNzKHBmcmFnLT5wYWdlKSArDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICBwZnJhZy0+b2Zmc2V0LA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBj b3B5LCBtc2dfaXRlcikgIT0gY29weSkgew0KPiA+ID4gPiArICAgICAgICAgICAgcmMgPSAtRUZB VUxUOw0KPiA+ID4gPiArICAgICAgICAgICAgZ290byBoYW5kbGVfZXJyb3I7DQo+ID4gPiA+ICsg ICAgICAgIH0NCj4gPiA+ID4gKyAgICAgICAgdGxzX2FwcGVuZF9mcmFnKHJlY29yZCwgcGZyYWcs IGNvcHkpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgICAgIHNpemUgLT0gY29weTsNCj4gPiA+ ID4gKyAgICAgICAgaWYgKCFzaXplKSB7DQo+ID4gPiA+ICtsYXN0X3JlY29yZDoNCj4gPiA+ID4g KyAgICAgICAgICAgIHRsc19wdXNoX3JlY29yZF9mbGFncyA9IGZsYWdzOw0KPiA+ID4gPiArICAg ICAgICAgICAgaWYgKG1vcmUpIHsNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICB0bHNfY3R4LT5w ZW5kaW5nX29wZW5fcmVjb3JkX2ZyYWdzID0NCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgIHJlY29yZC0+bnVtX2ZyYWdzOw0KPiA+ID4gPiArICAgICAgICAgICAgICAgIGJyZWFrOw0K PiA+ID4gPiArICAgICAgICAgICAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgICAgICAgICBk b25lID0gdHJ1ZTsNCj4gPiA+ID4gKyAgICAgICAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAg ICAgIGlmICgoZG9uZSkgfHwgcmVjb3JkLT5sZW4gPj0gbWF4X29wZW5fcmVjb3JkX2xlbiB8fA0K PiA+ID4gPiArICAgICAgICAgICAgKHJlY29yZC0+bnVtX2ZyYWdzID49IE1BWF9TS0JfRlJBR1Mg LSAxKSkgew0KPiA+ID4gPiArICAgICAgICAgICAgcmMgPSB0bHNfcHVzaF9yZWNvcmQoc2ssDQo+ ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgdGxzX2N0eCwNCj4gPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICBjdHgsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgcmVjb3JkLA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIHBmcmFnLA0KPiA+ ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIHRsc19wdXNoX3JlY29yZF9mbGFncywNCj4g PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRfdHlwZSk7DQo+ID4gPiA+ICsg ICAgICAgICAgICBpZiAocmMgPCAwKQ0KPiA+ID4gPiArICAgICAgICAgICAgICAgIGJyZWFrOw0K PiA+ID4gPiArICAgICAgICB9DQo+ID4gPiA+ICsgICAgfSB3aGlsZSAoIWRvbmUpOw0KPiA+ID4g PiArDQo+ID4gPiA+ICsgICAgaWYgKG9yaWdfc2l6ZSAtIHNpemUgPiAwKQ0KPiA+ID4gPiArICAg ICAgICByYyA9IG9yaWdfc2l6ZSAtIHNpemU7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICByZXR1 cm4gcmM7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gK2ludCB0bHNfZGV2aWNlX3Nl bmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csDQo+ID4gPiA+IHNpemVf dCBzaXplKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArICAgIHVuc2lnbmVkIGNoYXIgcmVjb3JkX3R5 cGUgPSBUTFNfUkVDT1JEX1RZUEVfREFUQTsNCj4gPiA+ID4gKyAgICBpbnQgcmMgPSAwOw0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgICAgbG9ja19zb2NrKHNrKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiAr ICAgIGlmICh1bmxpa2VseShtc2ctPm1zZ19jb250cm9sbGVuKSkgew0KPiA+ID4gPiArICAgICAg ICByYyA9IHRsc19wcm9jY2Vzc19jbXNnKHNrLCBtc2csICZyZWNvcmRfdHlwZSk7DQo+ID4gPiA+ ICsgICAgICAgIGlmIChyYykNCj4gPiA+ID4gKyAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+ID4g PiArICAgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIHJjID0gdGxzX3B1c2hfZGF0YShzaywg Jm1zZy0+bXNnX2l0ZXIsIHNpemUsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICBtc2ctPm1zZ19m bGFncywgcmVjb3JkX3R5cGUpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICtvdXQ6DQo+ID4gPiA+ICsg ICAgcmVsZWFzZV9zb2NrKHNrKTsNCj4gPiA+ID4gKyAgICByZXR1cm4gcmM7DQo+ID4gPiA+ICt9 DQo+ID4gPiA+ICsNCj4gPiA+ID4gK2ludCB0bHNfZGV2aWNlX3NlbmRwYWdlKHN0cnVjdCBzb2Nr ICpzaywgc3RydWN0IHBhZ2UgKnBhZ2UsDQo+ID4gPiA+ICsgICAgICAgICAgICBpbnQgb2Zmc2V0 LCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArICAgIHN0cnVj dCBpb3ZfaXRlciAgICBtc2dfaXRlcjsNCj4gPiA+ID4gKyAgICBzdHJ1Y3Qga3ZlYyBpb3Y7DQo+ ID4gPiA+ICsgICAgY2hhciAqa2FkZHIgPSBrbWFwKHBhZ2UpOw0KPiA+ID4gPiArICAgIGludCBy YyA9IDA7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBpZiAoZmxhZ3MgJiBNU0dfU0VORFBBR0Vf Tk9UTEFTVCkNCj4gPiA+ID4gKyAgICAgICAgZmxhZ3MgfD0gTVNHX01PUkU7DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyAgICBsb2NrX3NvY2soc2spOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgaWYg KGZsYWdzICYgTVNHX09PQikgew0KPiA+ID4gPiArICAgICAgICByYyA9IC1FTk9UU1VQUDsNCj4g PiA+ID4gKyAgICAgICAgZ290byBvdXQ7DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiArDQo+ID4g PiA+ICsgICAgaW92Lmlvdl9iYXNlID0ga2FkZHIgKyBvZmZzZXQ7DQo+ID4gPiA+ICsgICAgaW92 Lmlvdl9sZW4gPSBzaXplOw0KPiA+ID4gPiArICAgIGlvdl9pdGVyX2t2ZWMoJm1zZ19pdGVyLCBX UklURSB8IElURVJfS1ZFQywgJmlvdiwgMSwNCj4gPiA+ID4gc2l6ZSk7DQo+ID4gPiA+ICsgICAg cmMgPSB0bHNfcHVzaF9kYXRhKHNrLCAmbXNnX2l0ZXIsIHNpemUsDQo+ID4gPiA+ICsgICAgICAg ICAgICAgICBmbGFncywgVExTX1JFQ09SRF9UWVBFX0RBVEEpOw0KPiA+ID4gPiArICAgIGt1bm1h cChwYWdlKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArb3V0Og0KPiA+ID4gPiArICAgIHJlbGVhc2Vf c29jayhzayk7DQo+ID4gPiA+ICsgICAgcmV0dXJuIHJjOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiAr DQo+ID4gPiA+ICtzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICp0bHNfZ2V0X3JlY29yZChzdHJ1Y3QN Cj4gPiA+ID4gdGxzX29mZmxvYWRfY29udGV4dCAqY29udGV4dCwNCj4gPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgdTMyIHNlcSwgdTY0ICpwX3JlY29yZF9zbikNCj4gPiA+ID4gK3sNCj4g PiA+ID4gKyAgICBzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICppbmZvOw0KPiA+ID4gPiArICAgIHU2 NCByZWNvcmRfc24gPSBjb250ZXh0LT5oaW50X3JlY29yZF9zbjsNCj4gPiA+ID4gKw0KPiA+ID4g PiArICAgIGluZm8gPSBjb250ZXh0LT5yZXRyYW5zbWl0X2hpbnQ7DQo+ID4gPiA+ICsgICAgaWYg KCFpbmZvIHx8DQo+ID4gPiA+ICsgICAgICAgIGJlZm9yZShzZXEsIGluZm8tPmVuZF9zZXEgLSBp bmZvLT5sZW4pKSB7DQo+ID4gPiA+ICsgICAgICAgIC8qIGlmIHJldHJhbnNtaXRfaGludCBpcyBp cnJlbGV2YW50IHN0YXJ0DQo+ID4gPiA+ICsgICAgICAgICAqIGZyb20gdGhlIGJlZ2dpbmcgb2Yg dGhlIGxpc3QNCj4gPiA+ID4gKyAgICAgICAgICovDQo+ID4gPiA+ICsgICAgICAgIGluZm8gPSBs aXN0X2ZpcnN0X2VudHJ5KCZjb250ZXh0LT5yZWNvcmRzX2xpc3QsDQo+ID4gPiA+ICsgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCB0bHNfcmVjb3JkX2luZm8sIGxpc3QpOw0KPiA+ID4gPiArICAg ICAgICByZWNvcmRfc24gPSBjb250ZXh0LT51bmFja2VkX3JlY29yZF9zbjsNCj4gPiA+ID4gKyAg ICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20oaW5m bywgJmNvbnRleHQtPnJlY29yZHNfbGlzdCwNCj4gPiA+ID4gbGlzdCkgew0KPiA+ID4gPiArICAg ICAgICBpZiAoYmVmb3JlKHNlcSwgaW5mby0+ZW5kX3NlcSkpIHsNCj4gPiA+ID4gKyAgICAgICAg ICAgIGlmICghY29udGV4dC0+cmV0cmFuc21pdF9oaW50IHx8DQo+ID4gPiA+ICsgICAgICAgICAg ICAgICAgYWZ0ZXIoaW5mby0+ZW5kX3NlcSwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgIGNv bnRleHQtPnJldHJhbnNtaXRfaGludC0+ZW5kX3NlcSkpIHsNCj4gPiA+ID4gKyAgICAgICAgICAg ICAgICBjb250ZXh0LT5oaW50X3JlY29yZF9zbiA9IHJlY29yZF9zbjsNCj4gPiA+ID4gKyAgICAg ICAgICAgICAgICBjb250ZXh0LT5yZXRyYW5zbWl0X2hpbnQgPSBpbmZvOw0KPiA+ID4gPiArICAg ICAgICAgICAgfQ0KPiA+ID4gPiArICAgICAgICAgICAgKnBfcmVjb3JkX3NuID0gcmVjb3JkX3Nu Ow0KPiA+ID4gPiArICAgICAgICAgICAgcmV0dXJuIGluZm87DQo+ID4gPiA+ICsgICAgICAgIH0N Cj4gPiA+ID4gKyAgICAgICAgcmVjb3JkX3NuKys7DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiAr DQo+ID4gPiA+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICtFWFBPUlRf U1lNQk9MKHRsc19nZXRfcmVjb3JkKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArc3RhdGljIGludCB0 bHNfZGV2aWNlX3B1c2hfcGVuZGluZ19yZWNvcmQoc3RydWN0IHNvY2sgKnNrLCBpbnQNCj4gPiA+ ID4gZmxhZ3MpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgICAgc3RydWN0IGlvdl9pdGVyICAgIG1z Z19pdGVyOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgaW92X2l0ZXJfa3ZlYygmbXNnX2l0ZXIs IFdSSVRFIHwgSVRFUl9LVkVDLCBOVUxMLCAwLCAwKTsNCj4gPiA+ID4gKyAgICByZXR1cm4gdGxz X3B1c2hfZGF0YShzaywgJm1zZ19pdGVyLCAwLCBmbGFncywNCj4gPiA+ID4gVExTX1JFQ09SRF9U WVBFX0RBVEEpOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICtpbnQgdGxzX3NldF9k ZXZpY2Vfb2ZmbG9hZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dA0KPiA+ID4g PiAqY3R4KQ0KPiA+ID4gPiArew0KPiA+ID4gPiArICAgIHUxNiBub25lY2Vfc2l6ZSwgdGFnX3Np emUsIGl2X3NpemUsIHJlY19zZXFfc2l6ZTsNCj4gPiA+ID4gKyAgICBzdHJ1Y3QgdGxzX3JlY29y ZF9pbmZvICpzdGFydF9tYXJrZXJfcmVjb3JkOw0KPiA+ID4gPiArICAgIHN0cnVjdCB0bHNfb2Zm bG9hZF9jb250ZXh0ICpvZmZsb2FkX2N0eDsNCj4gPiA+ID4gKyAgICBzdHJ1Y3QgdGxzX2NyeXB0 b19pbmZvICpjcnlwdG9faW5mbzsNCj4gPiA+ID4gKyAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0 ZGV2Ow0KPiA+ID4gPiArICAgIGNoYXIgKml2LCAqcmVjX3NlcTsNCj4gPiA+ID4gKyAgICBzdHJ1 Y3Qgc2tfYnVmZiAqc2tiOw0KPiA+ID4gPiArICAgIGludCByYyA9IC1FSU5WQUw7DQo+ID4gPiA+ ICsgICAgX19iZTY0IHJjZF9zbjsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIGlmICghY3R4KQ0K PiA+ID4gPiArICAgICAgICBnb3RvIG91dDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIGlmIChj dHgtPnByaXZfY3R4KSB7DQo+ID4gPiA+ICsgICAgICAgIHJjID0gLUVFWElTVDsNCj4gPiA+ID4g KyAgICAgICAgZ290byBvdXQ7DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsg ICAgLyogV2Ugc3VwcG9ydCBzdGFydGluZyBvZmZsb2FkIG9uIG11bHRpcGxlIHNvY2tldHMNCj4g PiA+ID4gKyAgICAgKiBjb25jdXJyZW50bHksIFNvIHdlIG9ubHkgbmVlZCBhIHJlYWQgbG9jayBo ZXJlLg0KPiA+ID4gPiArICAgICAqLw0KPiA+ID4gPiArICAgIHBlcmNwdV9kb3duX3JlYWQoJmRl dmljZV9vZmZsb2FkX2xvY2spOw0KPiA+ID4gPiArICAgIG5ldGRldiA9IGdldF9uZXRkZXZfZm9y X3NvY2soc2spOw0KPiA+ID4gPiArICAgIGlmICghbmV0ZGV2KSB7DQo+ID4gPiA+ICsgICAgICAg IHByX2Vycl9yYXRlbGltaXRlZCgiJXM6IG5ldGRldiBub3QgZm91bmRcbiIsDQo+ID4gPiA+IF9f ZnVuY19fKTsNCj4gPiA+ID4gKyAgICAgICAgcmMgPSAtRUlOVkFMOw0KPiA+ID4gPiArICAgICAg ICBnb3RvIHJlbGVhc2VfbG9jazsNCj4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4g KyAgICBpZiAoIShuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19UTFNfVFgpKSB7DQo+ID4g PiA+ICsgICAgICAgIHJjID0gLUVOT1RTVVBQOw0KPiA+ID4gPiArICAgICAgICBnb3RvIHJlbGVh c2VfbmV0ZGV2Ow0KPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIC8qIEF2 b2lkIG9mZmxvYWRpbmcgaWYgdGhlIGRldmljZSBpcyBkb3duDQo+ID4gPiA+ICsgICAgICogV2Ug ZG9uJ3Qgd2FudCB0byBvZmZsb2FkIG5ldyBmbG93cyBhZnRlcg0KPiA+ID4gPiArICAgICAqIHRo ZSBORVRERVZfRE9XTiBldmVudA0KPiA+ID4gPiArICAgICAqLw0KPiA+ID4gPiArICAgIGlmICgh KG5ldGRldi0+ZmxhZ3MgJiBJRkZfVVApKSB7DQo+ID4gPiA+ICsgICAgICAgIHJjID0gLUVJTlZB TDsNCj4gPiA+ID4gKyAgICAgICAgZ290byByZWxlYXNlX2xvY2s7DQo+ID4gPiA+ICsgICAgfQ0K PiA+ID4gPiArDQo+ID4gPiA+ICsgICAgY3J5cHRvX2luZm8gPSAmY3R4LT5jcnlwdG9fc2VuZDsN Cj4gPiA+ID4gKyAgICBzd2l0Y2ggKGNyeXB0b19pbmZvLT5jaXBoZXJfdHlwZSkgew0KPiA+ID4g PiArICAgIGNhc2UgVExTX0NJUEhFUl9BRVNfR0NNXzEyODogew0KPiA+ID4gPiArICAgICAgICBu b25lY2Vfc2l6ZSA9IFRMU19DSVBIRVJfQUVTX0dDTV8xMjhfSVZfU0laRTsNCj4gPiA+ID4gKyAg ICAgICAgdGFnX3NpemUgPSBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4X1RBR19TSVpFOw0KPiA+ID4g PiArICAgICAgICBpdl9zaXplID0gVExTX0NJUEhFUl9BRVNfR0NNXzEyOF9JVl9TSVpFOw0KPiA+ ID4gPiArICAgICAgICBpdiA9ICgoc3RydWN0IHRsczEyX2NyeXB0b19pbmZvX2Flc19nY21fMTI4 DQo+ID4gPiA+ICopY3J5cHRvX2luZm8pLT5pdjsNCj4gPiA+ID4gKyAgICAgICAgcmVjX3NlcV9z aXplID0gVExTX0NJUEhFUl9BRVNfR0NNXzEyOF9SRUNfU0VRX1NJWkU7DQo+ID4gPiA+ICsgICAg ICAgIHJlY19zZXEgPQ0KPiA+ID4gPiArICAgICAgICAgKChzdHJ1Y3QgdGxzMTJfY3J5cHRvX2lu Zm9fYWVzX2djbV8xMjgNCj4gPiA+ID4gKiljcnlwdG9faW5mbyktPnJlY19zZXE7DQo+ID4gPiA+ ICsgICAgICAgIGJyZWFrOw0KPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gKyAgICBkZWZhdWx0Og0K PiA+ID4gPiArICAgICAgICByYyA9IC1FSU5WQUw7DQo+ID4gPiA+ICsgICAgICAgIGdvdG8gcmVs ZWFzZV9uZXRkZXY7DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgc3Rh cnRfbWFya2VyX3JlY29yZCA9DQo+ID4gPiA+IGttYWxsb2Moc2l6ZW9mKCpzdGFydF9tYXJrZXJf cmVjb3JkKSwgR0ZQX0tFUk5FTCk7DQo+ID4gPiANCj4gPiA+IENhbiB3ZSBtZW1vcnkgYWxsb2Nh dGlvbnMgYW5kIHNpbXBsZSBtZW1vcnkgaW5pdGlhbGl6YXRpb25zDQo+ID4gPiBvdXNpZGUgdGhl IGdsb2JhbCByd3NlbT8NCj4gPiA+IA0KPiA+IA0KPiA+IFN1cmUsIHdlIGNhbiBtb3ZlIGFsbCBt ZW1vcnkgYWxsb2NhdGlvbnMgb3V0c2lkZSB0aGUgbG9jay4NCj4gPiANCj4gPiA+ID4gKyAgICBp ZiAoIXN0YXJ0X21hcmtlcl9yZWNvcmQpIHsNCj4gPiA+ID4gKyAgICAgICAgcmMgPSAtRU5PTUVN Ow0KPiA+ID4gPiArICAgICAgICBnb3RvIHJlbGVhc2VfbmV0ZGV2Ow0KPiA+ID4gPiArICAgIH0N Cj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIG9mZmxvYWRfY3R4ID0ga3phbGxvYyhUTFNfT0ZGTE9B RF9DT05URVhUX1NJWkUsDQo+ID4gPiA+IEdGUF9LRVJORUwpOw0KPiA+ID4gPiArICAgIGlmICgh b2ZmbG9hZF9jdHgpDQo+ID4gPiA+ICsgICAgICAgIGdvdG8gZnJlZV9tYXJrZXJfcmVjb3JkOw0K PiA+ID4gPiArDQo+ID4gPiA+ICsgICAgY3R4LT5wcml2X2N0eCA9IG9mZmxvYWRfY3R4Ow0KPiA+ ID4gPiArICAgIHJjID0gYXR0YWNoX3NvY2tfdG9fbmV0ZGV2KHNrLCBuZXRkZXYsIGN0eCk7DQo+ ID4gPiA+ICsgICAgaWYgKHJjKQ0KPiA+ID4gPiArICAgICAgICBnb3RvIGZyZWVfb2ZmbG9hZF9j b250ZXh0Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgY3R4LT5uZXRkZXYgPSBuZXRkZXY7DQo+ ID4gPiA+ICsgICAgY3R4LT5wcmVwZW5kX3NpemUgPSBUTFNfSEVBREVSX1NJWkUgKyBub25lY2Vf c2l6ZTsNCj4gPiA+ID4gKyAgICBjdHgtPnRhZ19zaXplID0gdGFnX3NpemU7DQo+ID4gPiA+ICsg ICAgY3R4LT5pdl9zaXplID0gaXZfc2l6ZTsNCj4gPiA+ID4gKyAgICBjdHgtPml2ID0ga21hbGxv Yyhpdl9zaXplICsNCj4gPiA+ID4gVExTX0NJUEhFUl9BRVNfR0NNXzEyOF9TQUxUX1NJWkUsDQo+ ID4gPiA+ICsgICAgICAgICAgICAgIEdGUF9LRVJORUwpOw0KPiA+ID4gPiArICAgIGlmICghY3R4 LT5pdikgew0KPiA+ID4gPiArICAgICAgICByYyA9IC1FTk9NRU07DQo+ID4gPiA+ICsgICAgICAg IGdvdG8gZGV0YWNoX3NvY2s7DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsg ICAgbWVtY3B5KGN0eC0+aXYgKyBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4X1NBTFRfU0laRSwgaXYs DQo+ID4gPiA+IGl2X3NpemUpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgY3R4LT5yZWNfc2Vx X3NpemUgPSByZWNfc2VxX3NpemU7DQo+ID4gPiA+ICsgICAgY3R4LT5yZWNfc2VxID0ga21hbGxv YyhyZWNfc2VxX3NpemUsIEdGUF9LRVJORUwpOw0KPiA+ID4gPiArICAgIGlmICghY3R4LT5yZWNf c2VxKSB7DQo+ID4gPiA+ICsgICAgICAgIHJjID0gLUVOT01FTTsNCj4gPiA+ID4gKyAgICAgICAg Z290byBmcmVlX2l2Ow0KPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gKyAgICBtZW1jcHkoY3R4LT5y ZWNfc2VxLCByZWNfc2VxLCByZWNfc2VxX3NpemUpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAg Lyogc3RhcnQgYXQgcmVjX3NlcSAtIDEgdG8gYWNjb3VudCBmb3IgdGhlIHN0YXJ0IG1hcmtlcg0K PiA+ID4gPiByZWNvcmQgKi8NCj4gPiA+ID4gKyAgICBtZW1jcHkoJnJjZF9zbiwgY3R4LT5yZWNf c2VxLCBzaXplb2YocmNkX3NuKSk7DQo+ID4gPiA+ICsgICAgb2ZmbG9hZF9jdHgtPnVuYWNrZWRf cmVjb3JkX3NuID0gYmU2NF90b19jcHUocmNkX3NuKSAtIDE7DQo+ID4gPiA+ICsNCj4gPiA+ID4g KyAgICByYyA9IHRsc19zd19mYWxsYmFja19pbml0KHNrLCBvZmZsb2FkX2N0eCwgY3J5cHRvX2lu Zm8pOw0KPiA+ID4gPiArICAgIGlmIChyYykNCj4gPiA+ID4gKyAgICAgICAgZ290byBmcmVlX3Jl Y19zZXE7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBzdGFydF9tYXJrZXJfcmVjb3JkLT5lbmRf c2VxID0gdGNwX3NrKHNrKS0+d3JpdGVfc2VxOw0KPiA+ID4gPiArICAgIHN0YXJ0X21hcmtlcl9y ZWNvcmQtPmxlbiA9IDA7DQo+ID4gPiA+ICsgICAgc3RhcnRfbWFya2VyX3JlY29yZC0+bnVtX2Zy YWdzID0gMDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIElOSVRfTElTVF9IRUFEKCZvZmZsb2Fk X2N0eC0+cmVjb3Jkc19saXN0KTsNCj4gPiA+ID4gKyAgICBsaXN0X2FkZF90YWlsKCZzdGFydF9t YXJrZXJfcmVjb3JkLT5saXN0LCAmb2ZmbG9hZF9jdHgtDQo+ID4gPiA+ID5yZWNvcmRzX2xpc3Qp Ow0KPiA+ID4gPiArICAgIHNwaW5fbG9ja19pbml0KCZvZmZsb2FkX2N0eC0+bG9jayk7DQo+ID4g PiA+ICsNCj4gPiA+ID4gKyAgICBpbmV0X2NzayhzayktPmljc2tfY2xlYW5fYWNrZWQgPSAmdGxz X2ljc2tfY2xlYW5fYWNrZWQ7DQo+ID4gPiA+ICsgICAgY3R4LT5wdXNoX3BlbmRpbmdfcmVjb3Jk ID0gdGxzX2RldmljZV9wdXNoX3BlbmRpbmdfcmVjb3JkOw0KPiA+ID4gPiArICAgIG9mZmxvYWRf Y3R4LT5za19kZXN0cnVjdCA9IHNrLT5za19kZXN0cnVjdDsNCj4gPiA+ID4gKw0KPiA+ID4gPiAr ICAgIC8qIFRMUyBvZmZsb2FkIGlzIGdyZWF0bHkgc2ltcGxpZmllZCBpZiB3ZSBkb24ndCBzZW5k DQo+ID4gPiA+ICsgICAgICogU0tCcyB3aGVyZSBvbmx5IHBhcnQgb2YgdGhlIHBheWxvYWQgbmVl ZHMgdG8gYmUNCj4gPiA+ID4gZW5jcnlwdGVkLg0KPiA+ID4gPiArICAgICAqIFNvIG1hcmsgdGhl IGxhc3Qgc2tiIGluIHRoZSB3cml0ZSBxdWV1ZSBhcyBlbmQgb2YNCj4gPiA+ID4gcmVjb3JkLg0K PiA+ID4gPiArICAgICAqLw0KPiA+ID4gPiArICAgIHNrYiA9IHRjcF93cml0ZV9xdWV1ZV90YWls KHNrKTsNCj4gPiA+ID4gKyAgICBpZiAoc2tiKQ0KPiA+ID4gPiArICAgICAgICBUQ1BfU0tCX0NC KHNrYiktPmVvciA9IDE7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICByZWZjb3VudF9zZXQoJmN0 eC0+cmVmY291bnQsIDEpOw0KPiA+ID4gPiArICAgIHNwaW5fbG9ja19pcnEoJnRsc19kZXZpY2Vf bG9jayk7DQo+ID4gPiA+ICsgICAgbGlzdF9hZGRfdGFpbCgmY3R4LT5saXN0LCAmdGxzX2Rldmlj ZV9saXN0KTsNCj4gPiA+ID4gKyAgICBzcGluX3VubG9ja19pcnEoJnRsc19kZXZpY2VfbG9jayk7 DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAvKiBmb2xsb3dpbmcgdGhpcyBhc3NpZ25tZW50IHRs c19pc19za190eF9kZXZpY2Vfb2ZmbG9hZGVkDQo+ID4gPiA+ICsgICAgICogd2lsbCByZXR1cm4g dHJ1ZSBhbmQgdGhlIGNvbnRleHQgbWlnaHQgYmUgYWNjZXNzZWQNCj4gPiA+ID4gKyAgICAgKiBi eSB0aGUgbmV0ZGV2J3MgeG1pdCBmdW5jdGlvbi4NCj4gPiA+ID4gKyAgICAgKi8NCj4gPiA+ID4g KyAgICBzbXBfc3RvcmVfcmVsZWFzZSgmc2stPnNrX2Rlc3RydWN0LA0KPiA+ID4gPiArICAgICAg ICAgICAgICAmdGxzX2RldmljZV9za19kZXN0cnVjdCk7DQo+ID4gPiA+ICsgICAgZ290byByZWxl YXNlX2xvY2s7DQo+ID4gPiA+ICsNCj4gPiA+ID4gK2ZyZWVfcmVjX3NlcToNCj4gPiA+ID4gKyAg ICBrZnJlZShjdHgtPnJlY19zZXEpOw0KPiA+ID4gPiArZnJlZV9pdjoNCj4gPiA+ID4gKyAgICBr ZnJlZShjdHgtPml2KTsNCj4gPiA+ID4gK2RldGFjaF9zb2NrOg0KPiA+ID4gPiArICAgIG5ldGRl di0+dGxzZGV2X29wcy0+dGxzX2Rldl9kZWwobmV0ZGV2LCBjdHgsDQo+ID4gPiA+IFRMU19PRkZM T0FEX0NUWF9ESVJfVFgpOw0KPiA+ID4gPiArZnJlZV9vZmZsb2FkX2NvbnRleHQ6DQo+ID4gPiA+ ICsgICAga2ZyZWUob2ZmbG9hZF9jdHgpOw0KPiA+ID4gPiArICAgIGN0eC0+cHJpdl9jdHggPSBO VUxMOw0KPiA+ID4gPiArZnJlZV9tYXJrZXJfcmVjb3JkOg0KPiA+ID4gPiArICAgIGtmcmVlKHN0 YXJ0X21hcmtlcl9yZWNvcmQpOw0KPiA+ID4gPiArcmVsZWFzZV9uZXRkZXY6DQo+ID4gPiA+ICsg ICAgZGV2X3B1dChuZXRkZXYpOw0KPiA+ID4gPiArcmVsZWFzZV9sb2NrOg0KPiA+ID4gPiArICAg IHBlcmNwdV91cF9yZWFkKCZkZXZpY2Vfb2ZmbG9hZF9sb2NrKTsNCj4gPiA+ID4gK291dDoNCj4g PiA+ID4gKyAgICByZXR1cm4gcmM7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0 YXRpYyBpbnQgdGxzX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KPiA+ ID4gPiArew0KPiA+ID4gPiArICAgIGlmICgoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfVExT X1RYKSAmJiAhZGV2LQ0KPiA+ID4gPiA+dGxzZGV2X29wcykNCj4gPiA+ID4gKyAgICAgICAgcmV0 dXJuIE5PVElGWV9CQUQ7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICByZXR1cm4gTk9USUZZX0RP TkU7DQo+ID4gPiA+ICt9DQo+ID4gPiANCj4gPiA+IFRoaXMgZnVuY3Rpb24gaXMgdGhlIHNhbWUg YXMgdGxzX2RldmljZV9mZWF0X2NoYW5nZSgpLiBDYW4ndCB3ZQ0KPiA+ID4gbWVyZ2UNCj4gPiA+ IHRoZW0gdG9nZXRoZXIgYW5kIGF2b2lkIGR1cGxpY2F0aW5nIG9mIGNvZGU/DQo+ID4gPiANCj4g PiANCj4gPiBTdXJlLg0KPiA+IA0KPiA+ID4gPiArc3RhdGljIGludCB0bHNfZGV2aWNlX3VucmVn aXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKyAgICBy ZXR1cm4gTk9USUZZX0RPTkU7DQo+ID4gPiA+ICt9DQo+ID4gPiANCj4gPiA+IFRoaXMgZnVuY3Rp b24gZG9lcyBub3RoaW5nLCBhbmQgbmV4dCBwYXRjaGVzIGRvIG5vdCBjaGFuZ2UgaXQuDQo+ID4g PiBDYW4ndCB3ZSByZW1vdmUgaXQgc2luY2Ugc28/DQo+ID4gPiANCj4gPiANCj4gPiBTdXJlLg0K PiA+IA0KPiA+ID4gPiArc3RhdGljIGludCB0bHNfZGV2aWNlX2ZlYXRfY2hhbmdlKHN0cnVjdCBu ZXRfZGV2aWNlICpkZXYpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgICAgaWYgKChkZXYtPmZlYXR1 cmVzICYgTkVUSUZfRl9IV19UTFNfVFgpICYmICFkZXYtDQo+ID4gPiA+ID50bHNkZXZfb3BzKQ0K PiA+ID4gPiArICAgICAgICByZXR1cm4gTk9USUZZX0JBRDsNCj4gPiA+ID4gKw0KPiA+ID4gPiAr ICAgIHJldHVybiBOT1RJRllfRE9ORTsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiAr c3RhdGljIGludCB0bHNfZGV2aWNlX2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikNCj4g PiA+ID4gK3sNCj4gPiA+ID4gKyAgICBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCwgKnRtcDsNCj4g PiA+ID4gKyAgICBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7DQo+ID4gPiA+ICsgICAgdW5zaWduZWQg bG9uZyBmbGFnczsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIGlmICghKG5ldGRldi0+ZmVhdHVy ZXMgJiBORVRJRl9GX0hXX1RMU19UWCkpDQo+ID4gPiA+ICsgICAgICAgIHJldHVybiBOT1RJRllf RE9ORTsNCj4gPiA+IA0KPiA+ID4gQ2FuJ3Qgd2UgbW92ZSB0aGlzIGNoZWNrIGluIHRsc19kZXZf ZXZlbnQoKSBhbmQgdXNlIGl0IGZvciBhbGwNCj4gPiA+IHR5cGVzIG9mIGV2ZW50cz8NCj4gPiA+ IFRoZW4gd2UgYXZvaWQgZHVwbGljYXRlIGNvZGUuDQo+ID4gPiANCj4gPiANCj4gPiBOby4gTm90 IGFsbCBldmVudHMgcmVxdWlyZSB0aGlzIGNoZWNrLiBBbHNvLCB0aGUgcmVzdWx0IGlzDQo+ID4g ZGlmZmVyZW50IGZvciBkaWZmZXJlbnQgZXZlbnRzLg0KPiANCj4gTm8uIFlvdSBhbHdheXMgcmV0 dXJuIE5PVElGWV9ET05FLCBpbiBjYXNlIG9mICEobmV0ZGV2LT5mZWF0dXJlcyAmDQo+IE5FVElG X0ZfSFdfVExTX1RYKS4NCj4gU2VlIGJlbG93Og0KPiANCj4gc3RhdGljIGludCB0bHNfY2hlY2tf ZGV2X29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSANCj4gew0KPiAJaWYgKCFkZXYtPnRsc2Rl dl9vcHMpDQo+IAkJcmV0dXJuIE5PVElGWV9CQUQ7IA0KPiANCj4gCXJldHVybiBOT1RJRllfRE9O RTsgDQo+IH0NCj4gDQo+IHN0YXRpYyBpbnQgdGxzX2RldmljZV9kb3duKHN0cnVjdCBuZXRfZGV2 aWNlICpuZXRkZXYpIA0KPiB7DQo+IAlzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCwgKnRtcDsgDQo+ IAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7IA0KPiAJdW5zaWduZWQgbG9uZyBmbGFnczsgDQo+IA0K PiAJLi4uDQo+IAlyZXR1cm4gTk9USUZZX0RPTkU7DQo+IH0NCj4gDQo+IHN0YXRpYyBpbnQgdGxz X2Rldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcNCj4g ZXZlbnQsIA0KPiAgICAgICAgIAkJIHZvaWQgKnB0cikgDQo+IHsgDQo+ICAgICAgICAgc3RydWN0 IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpOyANCj4g DQo+IAlpZiAoIShuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19UTFNfVFgpKSANCj4gCQly ZXR1cm4gTk9USUZZX0RPTkU7IA0KPiAgDQo+ICAgICAgICAgc3dpdGNoIChldmVudCkgeyANCj4g ICAgICAgICBjYXNlIE5FVERFVl9SRUdJU1RFUjoNCj4gICAgICAgICBjYXNlIE5FVERFVl9GRUFU X0NIQU5HRTogDQo+ICAgICAgICAgCXJldHVybiB0bHNfY2hlY2tfZGV2X29wcyhkZXYpOyANCj4g IA0KPiAgICAgICAgIGNhc2UgTkVUREVWX0RPV046IA0KPiAgICAgICAgIAlyZXR1cm4gdGxzX2Rl dmljZV9kb3duKGRldik7IA0KPiAgICAgICAgIH0gDQo+ICAgICAgICAgcmV0dXJuIE5PVElGWV9E T05FOyANCj4gfSANCj4gIA0KDQpXaWxsIGZpeCBpbiBWMi4NCg0KPiA+ID4gPiArDQo+ID4gPiA+ ICsgICAgLyogUmVxdWVzdCBhIHdyaXRlIGxvY2sgdG8gYmxvY2sgbmV3IG9mZmxvYWQgYXR0ZW1w dHMNCj4gPiA+ID4gKyAgICAgKi8NCj4gPiA+ID4gKyAgICBwZXJjcHVfZG93bl93cml0ZSgmZGV2 aWNlX29mZmxvYWRfbG9jayk7DQo+ID4gPiANCj4gPiA+IFdoYXQgaXMgdGhlIHJlYXNvbiBwZXJj cHVfcndzZW0gaXMgY2hvc2VuIGhlcmU/IEl0IGxvb2tzIGxpa2UNCj4gPiA+IHRoaXMgcHJpbWl0 aXZlDQo+ID4gPiBnaXZlcyBtb3JlIGFkdmFudGFnZXMgcmVhZGVycywgdGhlbiBwbGFpbiByd3Nl bSBkb2VzLiBCdXQgaXQgYWxzbw0KPiA+ID4gZ2l2ZXMNCj4gPiA+IGRpc2FkdmFudGFnZXMgdG8g d3JpdGVycy4gSXQgd291bGQgYmUgZ29vZCwgdW5sZXNzDQo+ID4gPiB0bHNfZGV2aWNlX2Rvd24o KSBpcyBjYWxsZWQNCj4gPiA+IHdpdGggcnRubF9sb2NrKCkgaGVsZCBmcm9tIG5ldGRldmljZSBu b3RpZmllci4gQnV0IHNpbmNlDQo+ID4gPiBuZXRkZXZpY2Ugbm90aWZpZXINCj4gPiA+IGFyZSBj YWxsZWQgd2l0aCBydG5sX2xvY2soKSBoZWxkLCBwZXJjcHVfcndzZW0gd2lsbCBpbmNyZWFzZSB0 aGUNCj4gPiA+IHRpbWUgcnRubF9sb2NrKCkNCj4gPiA+IGlzIGxvY2tlZC4NCj4gPiANCj4gPiBX ZSB1c2UgdGhlIGEgcndzZW0gdG8gYWxsb3cgbXVsdGlwbGUgKHJlYWRlcnMpIGludm9jYXRpb25z IG9mDQo+ID4gdGxzX3NldF9kZXZpY2Vfb2ZmbG9hZCwgd2hpY2ggaXMgdHJpZ2dlcmVkIGJ5IHRo ZSB1c2VyIChwZXJzdW1hYmx5KQ0KPiA+IGR1cmluZyB0aGUgVExTIGhhbmRzaGFrZS4gVGhpcyBt aWdodCBiZSBjb25zaWRlcmVkIGEgZmFzdC1wYXRoLg0KPiA+IA0KPiA+IEhvd2V2ZXIsIHdlIG11 c3QgYmxvY2sgYWxsIGNhbGxzIHRvIHRsc19zZXRfZGV2aWNlX29mZmxvYWQgd2hpbGUgd2UNCj4g PiBhcmUgcHJvY2Vzc2luZyBORVRERVZfRE9XTiBldmVudHMgKHdyaXRlcikuDQo+ID4gDQo+ID4g QXMgeW91J3ZlIG1lbnRpb25lZCwgdGhlIHBlcmNwdSByd3NlbSBpcyBtb3JlIGVmZmljaWVudCBm b3INCj4gPiByZWFkZXJzLCBlc3BlY2lhbGx5IG9uIE5VTUEgc3lzdGVtcywgd2hlcmUgY2FjaGUt bGluZSBib3VuY2luZw0KPiA+IG9jY3VycyBkdXJpbmcgcmVhZGVyIGFjcXVpcmUgYW5kIHJlZHVj ZXMgcGVyZm9ybWFuY2UuDQo+IA0KPiBIbSwgYW5kIHdobyBhcmUgdGhlIHJlYWRlcnM/IEl0J3Mg dXNlZCBmcm9tIGRvX3Rsc19zZXRzb2Nrb3B0X3R4KCksDQo+IGJ1dCBpdCBkb2Vzbid0DQo+IHNl ZW0gdG8gYmUgcGVyZm9ybWFuY2UgY3JpdGljYWwuIFdobyBlbHNlPw0KPiANCg0KaXQgaXMgcGVy Zm9ybWFuY2UgY3JpdGljYWwgc2luY2UgaXQgaXMgZG9uZSBpbiB0aGUgc29ja2V0IGhhbmRzaGFr ZQ0KcGhhc2UsIGFueXdheSBJIHRlbmQgdG8gYWdyZWUgd2l0aCB5b3UgdGhhdCBwZXIgY3B1IHJ3 c2VtIGlzIGFuDQpvdmVya2lsbCwgd2lsbCBjaGFuZ2UgaXQgdG8gcmVndWxhciByd3NlbSBpbiBW Mi4NCg0KPiA+ID4gDQo+ID4gPiBDYW4ndCB3ZSB1c2UgcGxhaW4gcndzZW0gaGVyZSBpbnN0ZWFk Pw0KPiA+ID4gDQo+ID4gDQo+ID4gSXRzIGEgcGVyZm9ybWFuY2UgdHJhZGVvZmYuIEknbSBub3Qg Y2VydGFpbiB0aGF0IHRoZSBwZXJjcHUgcndzZW0NCj4gPiB3cml0ZSBzaWRlIGFjcXVpcmUgaXMg c2lnbmlmaWNhbnRseSB3b3JzZSB0aGFuIHVzaW5nIHRoZSBnbG9iYWwNCj4gPiByd3NlbS4NCj4g PiANCj4gPiBGb3Igbm93LCB3aGlsZSBhbGwgb2YgdGhpcyBpcyBleHBlcmltZW50YWwsIGNhbiB3 ZSBhZ3JlZSB0byBmb2N1cw0KPiA+IG9uIHRoZSBwZXJmb3JtYW5jZSBvZiByZWFkZXJzPyBXZSBj YW4gY2hhbmdlIGl0IGxhdGVyIGlmIGl0IGJlY29tZXMNCj4gPiBhIHByb2JsZW0uDQo+IA0KPiBT YW1lIGFzIGFib3ZlLg0KPiAgDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBzcGluX2xvY2tfaXJx c2F2ZSgmdGxzX2RldmljZV9sb2NrLCBmbGFncyk7DQo+ID4gPiA+ICsgICAgSU5JVF9MSVNUX0hF QUQoJmxpc3QpOw0KPiA+ID4gDQo+ID4gPiBUaGlzIG1heSBnbyBvdXRzaWRlIHRoZSBnbG9iYWwg c3BpbmxvY2suDQo+ID4gPiANCj4gPiANCj4gPiBTdXJlLg0KPiA+IA0KPiA+ID4gPiArICAgIGxp c3RfZm9yX2VhY2hfZW50cnlfc2FmZShjdHgsIHRtcCwgJnRsc19kZXZpY2VfbGlzdCwgbGlzdCkN Cj4gPiA+ID4gew0KPiA+ID4gPiArICAgICAgICBpZiAoY3R4LT5uZXRkZXYgIT0gbmV0ZGV2IHx8 DQo+ID4gPiA+ICsgICAgICAgICAgICAhcmVmY291bnRfaW5jX25vdF96ZXJvKCZjdHgtPnJlZmNv dW50KSkNCj4gPiA+ID4gKyAgICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ID4gPiArDQo+ID4gPiA+ ICsgICAgICAgIGxpc3RfbW92ZSgmY3R4LT5saXN0LCAmbGlzdCk7DQo+ID4gPiA+ICsgICAgfQ0K PiA+ID4gPiArICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRsc19kZXZpY2VfbG9jaywgZmxh Z3MpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN0 eCwgdG1wLCAmbGlzdCwgbGlzdCkgICAgew0KPiA+ID4gPiArICAgICAgICBuZXRkZXYtPnRsc2Rl dl9vcHMtPnRsc19kZXZfZGVsKG5ldGRldiwgY3R4LA0KPiA+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgVExTX09GRkxPQURfQ1RYX0RJUl9UWCk7DQo+ID4gPiA+ICsgICAgICAgIGN0eC0+ bmV0ZGV2ID0gTlVMTDsNCj4gPiA+ID4gKyAgICAgICAgZGV2X3B1dChuZXRkZXYpOw0KPiA+ID4g PiArICAgICAgICBsaXN0X2RlbF9pbml0KCZjdHgtPmxpc3QpOw0KPiA+ID4gPiArDQo+ID4gPiA+ ICsgICAgICAgIGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmN0eC0+cmVmY291bnQpKQ0KPiA+ ID4gPiArICAgICAgICAgICAgdGxzX2RldmljZV9mcmVlX2N0eChjdHgpOw0KPiA+ID4gPiArICAg IH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIHBlcmNwdV91cF93cml0ZSgmZGV2aWNlX29mZmxv YWRfbG9jayk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBmbHVzaF93b3JrKCZ0bHNfZGV2aWNl X2djX3dvcmspOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgcmV0dXJuIE5PVElGWV9ET05FOw0K PiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdGF0aWMgaW50IHRsc19kZXZfZXZlbnQo c3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZA0KPiA+ID4gPiBsb25nIGV2ZW50 LA0KPiA+ID4gPiArICAgICAgICAgICAgIHZvaWQgKnB0cikNCj4gPiA+ID4gK3sNCj4gPiA+ID4g KyAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2 KHB0cik7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBzd2l0Y2ggKGV2ZW50KSB7DQo+ID4gPiA+ ICsgICAgY2FzZSBORVRERVZfUkVHSVNURVI6DQo+ID4gPiA+ICsgICAgICAgIHJldHVybiB0bHNf ZGV2aWNlX3JlZ2lzdGVyKGRldik7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBjYXNlIE5FVERF Vl9VTlJFR0lTVEVSOg0KPiA+ID4gPiArICAgICAgICByZXR1cm4gdGxzX2RldmljZV91bnJlZ2lz dGVyKGRldik7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBjYXNlIE5FVERFVl9GRUFUX0NIQU5H RToNCj4gPiA+ID4gKyAgICAgICAgcmV0dXJuIHRsc19kZXZpY2VfZmVhdF9jaGFuZ2UoZGV2KTsN Cj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIGNhc2UgTkVUREVWX0RPV046DQo+ID4gPiA+ICsgICAg ICAgIHJldHVybiB0bHNfZGV2aWNlX2Rvd24oZGV2KTsNCj4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ ICsgICAgcmV0dXJuIE5PVElGWV9ET05FOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ ICtzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHRsc19kZXZfbm90aWZpZXIgPSB7DQo+ID4g PiA+ICsgICAgLm5vdGlmaWVyX2NhbGwgICAgPSB0bHNfZGV2X2V2ZW50LA0KPiA+ID4gPiArfTsN Cj4gPiA+ID4gKw0KPiA+ID4gPiArdm9pZCBfX2luaXQgdGxzX2RldmljZV9pbml0KHZvaWQpDQo+ ID4gPiA+ICt7DQo+ID4gPiA+ICsgICAgcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZ0bHNf ZGV2X25vdGlmaWVyKTsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArdm9pZCBfX2V4 aXQgdGxzX2RldmljZV9jbGVhbnVwKHZvaWQpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgICAgdW5y ZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJnRsc19kZXZfbm90aWZpZXIpOw0KPiA+ID4gPiAr ICAgIGZsdXNoX3dvcmsoJnRsc19kZXZpY2VfZ2Nfd29yayk7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ IGRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYw0KPiA+ID4gPiBiL25l dC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jDQo+ID4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+ID4gPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uMTRkMzFhMzY4ODVjDQo+ID4gPiA+IC0tLSAv ZGV2L251bGwNCj4gPiA+ID4gKysrIGIvbmV0L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmMNCj4g PiA+ID4gQEAgLTAsMCArMSw0MTkgQEANCj4gPiA+ID4gKy8qIENvcHlyaWdodCAoYykgMjAxOCwg TWVsbGFub3ggVGVjaG5vbG9naWVzIEFsbCByaWdodHMNCj4gPiA+ID4gcmVzZXJ2ZWQuDQo+ID4g PiA+ICsgKg0KPiA+ID4gPiArICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgNCj4gPiA+ID4gb3INCj4gPiA+ID4gKyAqICAgICB3aXRo b3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZQ0KPiA+ID4g PiBmb2xsb3dpbmcNCj4gPiA+ID4gKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6DQo+ID4gPiA+ ICsgKg0KPiA+ID4gPiArICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUNCj4gPiA+ID4gKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlDQo+ID4gPiA+IGZvbGxvd2luZw0KPiA+ ID4gPiArICogICAgICAgIGRpc2NsYWltZXIuDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogICAg ICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUNCj4g PiA+ID4gYWJvdmUNCj4gPiA+ID4gKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlDQo+ID4gPiA+IGZvbGxvd2luZw0KPiA+ID4gPiArICog ICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyDQo+ID4g PiA+IG1hdGVyaWFscw0KPiA+ID4gPiArICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry aWJ1dGlvbi4NCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiAgICAgIC0gTmVpdGhlciB0aGUgbmFt ZSBvZiB0aGUgTWVsbGFub3ggVGVjaG5vbG9naWVzIG5vcg0KPiA+ID4gPiB0aGUNCj4gPiA+ID4g KyAqICAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y c2Ugb3INCj4gPiA+ID4gcHJvbW90ZQ0KPiA+ID4gPiArICogICAgICAgIHByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMNCj4gPiA+ID4gcHJpb3Igd3Jp dHRlbg0KPiA+ID4gPiArICogICAgICAgIHBlcm1pc3Npb24uDQo+ID4gPiA+ICsgKg0KPiA+ID4g PiArICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg QU5EDQo+ID4gPiA+IENPTlRSSUJVVE9SUyAiQVMgSVMiDQo+ID4gPiA+ICsgKiBBTkQgQU5ZIEVY UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCj4gPiA+ID4g TElNSVRFRCBUTywNCj4gPiA+ID4gKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUg0KPiA+ID4gPiArICogQSBQQVJUSUNVTEFSIFBVUlBP U0UgQVJFIERJU0NMQUlNRUQuDQo+ID4gPiA+ICsgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q WVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQ0KPiA+ID4gPiBMSUFCTEUgRk9SDQo+ID4g PiA+ICsgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUg0KPiA+ID4gPiBDT05TRVFVRU5USUFMDQo+ID4gPiA+ICsgKiBEQU1BR0VTIChJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YNCj4gPiA+ID4gU1VCU1RJ VFVURSBHT09EUyBPUg0KPiA+ID4gPiArICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUw0KPiA+ID4gPiBJTlRFUlJVUFRJT04pDQo+ID4gPiA+ICsg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4NCj4gPiA+ID4gQ09OVFJBQ1QsDQo+ID4gPiA+ICsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBU T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUg0KPiA+ID4gPiBPVEhFUldJU0UpIEFSSVNJTkcN Cj4gPiA+ID4gKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VEDQo+ID4gPiA+IE9GIFRIRQ0KPiA+ID4gPiArICogUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UNCj4gPiA+ID4gKyAqLw0KPiA+ID4gPiArDQo+ID4gPiA+ICsjaW5jbHVk ZSA8bmV0L3Rscy5oPg0KPiA+ID4gPiArI2luY2x1ZGUgPGNyeXB0by9hZWFkLmg+DQo+ID4gPiA+ ICsjaW5jbHVkZSA8Y3J5cHRvL3NjYXR0ZXJ3YWxrLmg+DQo+ID4gPiA+ICsjaW5jbHVkZSA8bmV0 L2lwNl9jaGVja3N1bS5oPg0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdGF0aWMgdm9pZCBjaGFpbl90 b193YWxrKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHN0cnVjdA0KPiA+ID4gPiBzY2F0dGVyX3dh bGsgKndhbGspDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpz cmMgPSB3YWxrLT5zZzsNCj4gPiA+ID4gKyAgICBpbnQgZGlmZiA9IHdhbGstPm9mZnNldCAtIHNy Yy0+b2Zmc2V0Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgc2dfc2V0X3BhZ2Uoc2csIHNnX3Bh Z2Uoc3JjKSwNCj4gPiA+ID4gKyAgICAgICAgICAgIHNyYy0+bGVuZ3RoIC0gZGlmZiwgd2Fsay0+ b2Zmc2V0KTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIHNjYXR0ZXJ3YWxrX2NyeXB0b19jaGFp bihzZywgc2dfbmV4dChzcmMpLCAwLCAyKTsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4g PiArc3RhdGljIGludCB0bHNfZW5jX3JlY29yZChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICphZWFkX3Jl cSwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgc3RydWN0IGNyeXB0b19hZWFkICphZWFkLCBjaGFy ICphYWQsIGNoYXIgKml2LA0KPiA+ID4gPiArICAgICAgICAgICAgICBfX2JlNjQgcmNkX3NuLCBz dHJ1Y3Qgc2NhdHRlcl93YWxrICppbiwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgc3RydWN0IHNj YXR0ZXJfd2FsayAqb3V0LCBpbnQgKmluX2xlbikNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKyAgICBz dHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dfaW5bM107DQo+ID4gPiA+ICsgICAgc3RydWN0IHNjYXR0ZXJs aXN0IHNnX291dFszXTsNCj4gPiA+ID4gKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltUTFNfSEVBREVS X1NJWkUgKw0KPiA+ID4gPiBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4X0lWX1NJWkVdOw0KPiA+ID4g PiArICAgIHUxNiBsZW47DQo+ID4gPiA+ICsgICAgaW50IHJjOw0KPiA+ID4gPiArDQo+ID4gPiA+ ICsgICAgbGVuID0gbWluX3QoaW50LCAqaW5fbGVuLCBBUlJBWV9TSVpFKGJ1ZikpOw0KPiA+ID4g PiArDQo+ID4gPiA+ICsgICAgc2NhdHRlcndhbGtfY29weWNodW5rcyhidWYsIGluLCBsZW4sIDAp Ow0KPiA+ID4gPiArICAgIHNjYXR0ZXJ3YWxrX2NvcHljaHVua3MoYnVmLCBvdXQsIGxlbiwgMSk7 DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAqaW5fbGVuIC09IGxlbjsNCj4gPiA+ID4gKyAgICBp ZiAoISppbl9sZW4pDQo+ID4gPiA+ICsgICAgICAgIHJldHVybiAwOw0KPiA+ID4gPiArDQo+ID4g PiA+ICsgICAgc2NhdHRlcndhbGtfcGFnZWRvbmUoaW4sIDAsIDEpOw0KPiA+ID4gPiArICAgIHNj YXR0ZXJ3YWxrX3BhZ2Vkb25lKG91dCwgMSwgMSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBs ZW4gPSBidWZbNF0gfCAoYnVmWzNdIDw8IDgpOw0KPiA+ID4gPiArICAgIGxlbiAtPSBUTFNfQ0lQ SEVSX0FFU19HQ01fMTI4X0lWX1NJWkU7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICB0bHNfbWFr ZV9hYWQoYWFkLCBsZW4gLSBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4X1RBR19TSVpFLA0KPiA+ID4g PiArICAgICAgICAgICAgIChjaGFyICopJnJjZF9zbiwgc2l6ZW9mKHJjZF9zbiksIGJ1ZlswXSk7 DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBtZW1jcHkoaXYgKyBUTFNfQ0lQSEVSX0FFU19HQ01f MTI4X1NBTFRfU0laRSwgYnVmICsNCj4gPiA+ID4gVExTX0hFQURFUl9TSVpFLA0KPiA+ID4gPiAr ICAgICAgICAgICBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4X0lWX1NJWkUpOw0KPiA+ID4gPiArDQo+ ID4gPiA+ICsgICAgc2dfaW5pdF90YWJsZShzZ19pbiwgQVJSQVlfU0laRShzZ19pbikpOw0KPiA+ ID4gPiArICAgIHNnX2luaXRfdGFibGUoc2dfb3V0LCBBUlJBWV9TSVpFKHNnX291dCkpOw0KPiA+ ID4gPiArICAgIHNnX3NldF9idWYoc2dfaW4sIGFhZCwgVExTX0FBRF9TUEFDRV9TSVpFKTsNCj4g PiA+ID4gKyAgICBzZ19zZXRfYnVmKHNnX291dCwgYWFkLCBUTFNfQUFEX1NQQUNFX1NJWkUpOw0K PiA+ID4gPiArICAgIGNoYWluX3RvX3dhbGsoc2dfaW4gKyAxLCBpbik7DQo+ID4gPiA+ICsgICAg Y2hhaW5fdG9fd2FsayhzZ19vdXQgKyAxLCBvdXQpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAg KmluX2xlbiAtPSBsZW47DQo+ID4gPiA+ICsgICAgaWYgKCppbl9sZW4gPCAwKSB7DQo+ID4gPiA+ ICsgICAgICAgICppbl9sZW4gKz0gVExTX0NJUEhFUl9BRVNfR0NNXzEyOF9UQUdfU0laRTsNCj4g PiA+ID4gKyAgICAgICAgaWYgKCppbl9sZW4gPCAwKQ0KPiA+ID4gPiArICAgICAgICAvKiB0aGUg aW5wdXQgYnVmZmVyIGRvZXNuJ3QgY29udGFpbiB0aGUgZW50aXJlIHJlY29yZC4NCj4gPiA+ID4g KyAgICAgICAgICogdHJpbSBsZW4gYWNjb3JkaW5nbHkuIFRoZSByZXN1bHRpbmcgYXV0aGVudGlj YXRpb24NCj4gPiA+ID4gdGFnDQo+ID4gPiA+ICsgICAgICAgICAqIHdpbGwgY29udGFpbiBnYXJi YWdlLiBidXQgd2UgZG9uJ3QgY2FyZSBhcyB3ZSB3b24ndA0KPiA+ID4gPiArICAgICAgICAgKiBp bmNsdWRlIGFueSBvZiBpdCBpbiB0aGUgb3V0cHV0IHNrYg0KPiA+ID4gPiArICAgICAgICAgKiBO b3RlIHRoYXQgd2UgYXNzdW1lIHRoZSBvdXRwdXQgYnVmZmVyIGxlbmd0aA0KPiA+ID4gPiArICAg ICAgICAgKiBpcyBsYXJnZXIgdGhlbiBpbnB1dCBidWZmZXIgbGVuZ3RoICsgdGFnIHNpemUNCj4g PiA+ID4gKyAgICAgICAgICovDQo+ID4gPiA+ICsgICAgICAgICAgICBsZW4gKz0gKmluX2xlbjsN Cj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAgICAqaW5fbGVuID0gMDsNCj4gPiA+ID4gKyAgICB9 DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBpZiAoKmluX2xlbikgew0KPiA+ID4gPiArICAgICAg ICBzY2F0dGVyd2Fsa19jb3B5Y2h1bmtzKE5VTEwsIGluLCBsZW4sIDIpOw0KPiA+ID4gPiArICAg ICAgICBzY2F0dGVyd2Fsa19wYWdlZG9uZShpbiwgMCwgMSk7DQo+ID4gPiA+ICsgICAgICAgIHNj YXR0ZXJ3YWxrX2NvcHljaHVua3MoTlVMTCwgb3V0LCBsZW4sIDIpOw0KPiA+ID4gPiArICAgICAg ICBzY2F0dGVyd2Fsa19wYWdlZG9uZShvdXQsIDEsIDEpOw0KPiA+ID4gPiArICAgIH0NCj4gPiA+ ID4gKw0KPiA+ID4gPiArICAgIGxlbiAtPSBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4X1RBR19TSVpF Ow0KPiA+ID4gPiArICAgIGFlYWRfcmVxdWVzdF9zZXRfY3J5cHQoYWVhZF9yZXEsIHNnX2luLCBz Z19vdXQsIGxlbiwgaXYpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgcmMgPSBjcnlwdG9fYWVh ZF9lbmNyeXB0KGFlYWRfcmVxKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIHJldHVybiByYzsN Cj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArc3RhdGljIHZvaWQgdGxzX2luaXRfYWVh ZF9yZXF1ZXN0KHN0cnVjdCBhZWFkX3JlcXVlc3QNCj4gPiA+ID4gKmFlYWRfcmVxLA0KPiA+ID4g PiArICAgICAgICAgICAgICAgICAgc3RydWN0IGNyeXB0b19hZWFkICphZWFkKQ0KPiA+ID4gPiAr ew0KPiA+ID4gPiArICAgIGFlYWRfcmVxdWVzdF9zZXRfdGZtKGFlYWRfcmVxLCBhZWFkKTsNCj4g PiA+ID4gKyAgICBhZWFkX3JlcXVlc3Rfc2V0X2FkKGFlYWRfcmVxLCBUTFNfQUFEX1NQQUNFX1NJ WkUpOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdGF0aWMgc3RydWN0IGFlYWRf cmVxdWVzdCAqdGxzX2FsbG9jX2FlYWRfcmVxdWVzdChzdHJ1Y3QNCj4gPiA+ID4gY3J5cHRvX2Fl YWQgKmFlYWQsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBnZnBfdCBmbGFn cykNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKyAgICB1bnNpZ25lZCBpbnQgcmVxX3NpemUgPSBzaXpl b2Yoc3RydWN0IGFlYWRfcmVxdWVzdCkgKw0KPiA+ID4gPiArICAgICAgICBjcnlwdG9fYWVhZF9y ZXFzaXplKGFlYWQpOw0KPiA+ID4gPiArICAgIHN0cnVjdCBhZWFkX3JlcXVlc3QgKmFlYWRfcmVx Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgYWVhZF9yZXEgPSBremFsbG9jKHJlcV9zaXplLCBm bGFncyk7DQo+ID4gPiA+ICsgICAgaWYgKCFhZWFkX3JlcSkNCj4gPiA+ID4gKyAgICAgICAgcmV0 dXJuIE5VTEw7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICB0bHNfaW5pdF9hZWFkX3JlcXVlc3Qo YWVhZF9yZXEsIGFlYWQpOw0KPiA+ID4gPiArICAgIHJldHVybiBhZWFkX3JlcTsNCj4gPiA+ID4g K30NCj4gPiA+ID4gKw0KPiA+ID4gPiArc3RhdGljIGludCB0bHNfZW5jX3JlY29yZHMoc3RydWN0 IGFlYWRfcmVxdWVzdCAqYWVhZF9yZXEsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICBzdHJ1Y3Qg Y3J5cHRvX2FlYWQgKmFlYWQsIHN0cnVjdCBzY2F0dGVybGlzdA0KPiA+ID4gPiAqc2dfaW4sDQo+ ID4gPiA+ICsgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX291dCwgY2hhciAq YWFkLCBjaGFyDQo+ID4gPiA+ICppdiwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgIHU2NCByY2Rf c24sIGludCBsZW4pDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgICAgc3RydWN0IHNjYXR0ZXJfd2Fs ayBpbjsNCj4gPiA+ID4gKyAgICBzdHJ1Y3Qgc2NhdHRlcl93YWxrIG91dDsNCj4gPiA+ID4gKyAg ICBpbnQgcmM7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBzY2F0dGVyd2Fsa19zdGFydCgmaW4s IHNnX2luKTsNCj4gPiA+ID4gKyAgICBzY2F0dGVyd2Fsa19zdGFydCgmb3V0LCBzZ19vdXQpOw0K PiA+ID4gPiArDQo+ID4gPiA+ICsgICAgZG8gew0KPiA+ID4gPiArICAgICAgICByYyA9IHRsc19l bmNfcmVjb3JkKGFlYWRfcmVxLCBhZWFkLCBhYWQsIGl2LA0KPiA+ID4gPiArICAgICAgICAgICAg ICAgICAgICBjcHVfdG9fYmU2NChyY2Rfc24pLCAmaW4sICZvdXQsICZsZW4pOw0KPiA+ID4gPiAr ICAgICAgICByY2Rfc24rKzsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIH0gd2hpbGUgKHJjID09 IDAgJiYgbGVuKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIHNjYXR0ZXJ3YWxrX2RvbmUoJmlu LCAwLCAwKTsNCj4gPiA+ID4gKyAgICBzY2F0dGVyd2Fsa19kb25lKCZvdXQsIDEsIDApOw0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgICAgcmV0dXJuIHJjOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ ID4gPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2Noa3N1bShzdHJ1Y3Qgc2tfYnVmZiAq c2tiLCBpbnQNCj4gPiA+ID4gaGVhZGxuKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArICAgIC8qIENh bid0IHVzZSBpY3NrLT5pY3NrX2FmX29wcy0+c2VuZF9jaGVjayBoZXJlIGJlY2F1c2UNCj4gPiA+ ID4gdGhlIGlwIGFkZHJlc3Nlcw0KPiA+ID4gPiArICAgICAqIG1pZ2h0IGhhdmUgYmVlbiBjaGFu Z2VkIGJ5IE5BVC4NCj4gPiA+ID4gKyAgICAgKi8NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIGNv bnN0IHN0cnVjdCBpcHY2aGRyICppcHY2aDsNCj4gPiA+ID4gKyAgICBjb25zdCBzdHJ1Y3QgaXBo ZHIgKmlwaDsNCj4gPiA+ID4gKyAgICBzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTsN Cj4gPiA+ID4gKyAgICBpbnQgZGF0YWxlbiA9IHNrYi0+bGVuIC0gaGVhZGxuOw0KPiA+ID4gPiAr DQo+ID4gPiA+ICsgICAgLyogV2Ugb25seSBjaGFuZ2VkIHRoZSBwYXlsb2FkIHNvIGlmIHdlIGFy ZSB1c2luZyBwYXJ0aWFsDQo+ID4gPiA+IHdlIGRvbid0DQo+ID4gPiA+ICsgICAgICogbmVlZCB0 byB1cGRhdGUgYW55dGhpbmcuDQo+ID4gPiA+ICsgICAgICovDQo+ID4gPiA+ICsgICAgaWYgKGxp a2VseShza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSkNCj4gPiA+ID4gKyAgICAg ICAgcmV0dXJuOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgc2tiLT5pcF9zdW1tZWQgPSBDSEVD S1NVTV9QQVJUSUFMOw0KPiA+ID4gPiArICAgIHNrYi0+Y3N1bV9zdGFydCA9IHNrYl90cmFuc3Bv cnRfaGVhZGVyKHNrYikgLSBza2ItPmhlYWQ7DQo+ID4gPiA+ICsgICAgc2tiLT5jc3VtX29mZnNl dCA9IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiAr ICAgIGlmIChza2ItPnNrLT5za19mYW1pbHkgPT0gQUZfSU5FVDYpIHsNCj4gPiA+ID4gKyAgICAg ICAgaXB2NmggPSBpcHY2X2hkcihza2IpOw0KPiA+ID4gPiArICAgICAgICB0aC0+Y2hlY2sgPSB+ Y3N1bV9pcHY2X21hZ2ljKCZpcHY2aC0+c2FkZHIsICZpcHY2aC0NCj4gPiA+ID4gPmRhZGRyLA0K PiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFsZW4sIElQUFJPVE9fVENQLCAw KTsNCj4gPiA+ID4gKyAgICB9IGVsc2Ugew0KPiA+ID4gPiArICAgICAgICBpcGggPSBpcF9oZHIo c2tiKTsNCj4gPiA+ID4gKyAgICAgICAgdGgtPmNoZWNrID0gfmNzdW1fdGNwdWRwX21hZ2ljKGlw aC0+c2FkZHIsIGlwaC0+ZGFkZHIsIA0KPiA+ID4gPiBkYXRhbGVuLA0KPiA+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgSVBQUk9UT19UQ1AsIDApOw0KPiA+ID4gPiArICAgIH0NCj4g PiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArc3RhdGljIHZvaWQgY29tcGxldGVfc2tiKHN0 cnVjdCBza19idWZmICpuc2tiLCBzdHJ1Y3Qgc2tfYnVmZg0KPiA+ID4gPiAqc2tiLCBpbnQgaGVh ZGxuKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArICAgIHNrYl9jb3B5X2hlYWRlcihuc2tiLCBza2Ip Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgc2tiX3B1dChuc2tiLCBza2ItPmxlbik7DQo+ID4g PiA+ICsgICAgbWVtY3B5KG5za2ItPmRhdGEsIHNrYi0+ZGF0YSwgaGVhZGxuKTsNCj4gPiA+ID4g KyAgICB1cGRhdGVfY2hrc3VtKG5za2IsIGhlYWRsbik7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAg ICBuc2tiLT5kZXN0cnVjdG9yID0gc2tiLT5kZXN0cnVjdG9yOw0KPiA+ID4gPiArICAgIG5za2It PnNrID0gc2tiLT5zazsNCj4gPiA+ID4gKyAgICBza2ItPmRlc3RydWN0b3IgPSBOVUxMOw0KPiA+ ID4gPiArICAgIHNrYi0+c2sgPSBOVUxMOw0KPiA+ID4gPiArICAgIHJlZmNvdW50X2FkZChuc2ti LT50cnVlc2l6ZSAtIHNrYi0+dHJ1ZXNpemUsDQo+ID4gPiA+ICsgICAgICAgICAgICAgJm5za2It PnNrLT5za193bWVtX2FsbG9jKTsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyog VGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGFmdGVyIHRoZSB1c2VyIHNvY2tldCBpcw0KPiA+ ID4gPiBhbHJlYWR5DQo+ID4gPiA+ICsgKiBjbG9zZWQgc28gbWFrZSBzdXJlIHdlIGRvbid0IHVz ZSBhbnl0aGluZyBmcmVlZCBkdXJpbmcNCj4gPiA+ID4gKyAqIHRsc19za19wcm90b19jbG9zZSBo ZXJlDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGxzX3N3 X2ZhbGxiYWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0DQo+ID4gPiA+IHNrX2J1ZmYgKnNrYikN Cj4gPiA+ID4gK3sNCj4gPiA+ID4gKyAgICBpbnQgdGNwX2hlYWRlcl9zaXplID0gdGNwX2hkcmxl bihza2IpOw0KPiA+ID4gPiArICAgIGludCB0Y3BfcGF5bG9hZF9vZmZzZXQgPSBza2JfdHJhbnNw b3J0X29mZnNldChza2IpICsNCj4gPiA+ID4gdGNwX2hlYWRlcl9zaXplOw0KPiA+ID4gPiArICAg IGludCBwYXlsb2FkX2xlbiA9IHNrYi0+bGVuIC0gdGNwX3BheWxvYWRfb2Zmc2V0Ow0KPiA+ID4g PiArICAgIHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCA9IHRsc19nZXRfY3R4KHNrKTsNCj4g PiA+ID4gKyAgICBzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dCAqY3R4ID0NCj4gPiA+ID4gdGxz X29mZmxvYWRfY3R4KHRsc19jdHgpOw0KPiA+ID4gPiArICAgIGludCByZW1haW5pbmcsIGJ1Zl9s ZW4sIHJlc3luY19zZ3MsIHJjLCBpID0gMDsNCj4gPiA+ID4gKyAgICB2b2lkICpidWYsICpkdW1t eV9idWYsICppdiwgKmFhZDsNCj4gPiA+ID4gKyAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2lu Ow0KPiA+ID4gPiArICAgIHN0cnVjdCBzY2F0dGVybGlzdCBzZ19vdXRbM107DQo+ID4gPiA+ICsg ICAgdTMyIHRjcF9zZXEgPSBudG9obCh0Y3BfaGRyKHNrYiktPnNlcSk7DQo+ID4gPiA+ICsgICAg c3RydWN0IGFlYWRfcmVxdWVzdCAqYWVhZF9yZXE7DQo+ID4gPiA+ICsgICAgc3RydWN0IHNrX2J1 ZmYgKm5za2IgPSBOVUxMOw0KPiA+ID4gPiArICAgIHN0cnVjdCB0bHNfcmVjb3JkX2luZm8gKnJl Y29yZDsNCj4gPiA+ID4gKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiA+ID4gPiArICAgIHMz MiBzeW5jX3NpemU7DQo+ID4gPiA+ICsgICAgdTY0IHJjZF9zbjsNCj4gPiA+ID4gKw0KPiA+ID4g PiArICAgIC8qIHdvcnN0IGNhc2UgaXM6DQo+ID4gPiA+ICsgICAgICogTUFYX1NLQl9GUkFHUyBp biB0bHNfcmVjb3JkX2luZm8NCj4gPiA+ID4gKyAgICAgKiBNQVhfU0tCX0ZSQUdTICsgMSBpbiBT S0IgaGVhZCBhbiBmcmFncy4NCj4gPiA+ID4gKyAgICAgKi8NCj4gPiA+ID4gKyAgICBpbnQgc2df aW5fbWF4X2VsZW1lbnRzID0gMiAqIE1BWF9TS0JfRlJBR1MgKyAxOw0KPiA+ID4gPiArDQo+ID4g PiA+ICsgICAgaWYgKCFwYXlsb2FkX2xlbikNCj4gPiA+ID4gKyAgICAgICAgcmV0dXJuIHNrYjsN Cj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIHNnX2luID0ga21hbGxvY19hcnJheShzZ19pbl9tYXhf ZWxlbWVudHMsIHNpemVvZigqc2dfaW4pLA0KPiA+ID4gPiBHRlBfQVRPTUlDKTsNCj4gPiA+ID4g KyAgICBpZiAoIXNnX2luKQ0KPiA+ID4gPiArICAgICAgICBnb3RvIGZyZWVfb3JpZzsNCj4gPiA+ ID4gKw0KPiA+ID4gPiArICAgIHNnX2luaXRfdGFibGUoc2dfaW4sIHNnX2luX21heF9lbGVtZW50 cyk7DQo+ID4gPiA+ICsgICAgc2dfaW5pdF90YWJsZShzZ19vdXQsIEFSUkFZX1NJWkUoc2dfb3V0 KSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBzcGluX2xvY2tfaXJxc2F2ZSgmY3R4LT5sb2Nr LCBmbGFncyk7DQo+ID4gPiA+ICsgICAgcmVjb3JkID0gdGxzX2dldF9yZWNvcmQoY3R4LCB0Y3Bf c2VxLCAmcmNkX3NuKTsNCj4gPiA+ID4gKyAgICBpZiAoIXJlY29yZCkgew0KPiA+ID4gPiArICAg ICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmxvY2ssIGZsYWdzKTsNCj4gPiA+ID4g KyAgICAgICAgV0FSTigxLCAiUmVjb3JkIG5vdCBmb3VuZCBmb3Igc2VxICV1XG4iLCB0Y3Bfc2Vx KTsNCj4gPiA+ID4gKyAgICAgICAgZ290byBmcmVlX3NnOw0KPiA+ID4gPiArICAgIH0NCj4gPiA+ ID4gKw0KPiA+ID4gPiArICAgIHN5bmNfc2l6ZSA9IHRjcF9zZXEgLSB0bHNfcmVjb3JkX3N0YXJ0 X3NlcShyZWNvcmQpOw0KPiA+ID4gPiArICAgIGlmIChzeW5jX3NpemUgPCAwKSB7DQo+ID4gPiA+ ICsgICAgICAgIGludCBpc19zdGFydF9tYXJrZXIgPQ0KPiA+ID4gPiB0bHNfcmVjb3JkX2lzX3N0 YXJ0X21hcmtlcihyZWNvcmQpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgICAgIHNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJmN0eC0+bG9jaywgZmxhZ3MpOw0KPiA+ID4gPiArICAgICAgICBpZiAo IWlzX3N0YXJ0X21hcmtlcikNCj4gPiA+ID4gKyAgICAgICAgLyogVGhpcyBzaG91bGQgb25seSBv Y2N1ciBpZiB0aGUgcmVsZXZhbnQgcmVjb3JkIHdhcw0KPiA+ID4gPiArICAgICAgICAgKiBhbHJl YWR5IGFja2VkLiBJbiB0aGF0IGNhc2UgaXQgc2hvdWxkIGJlIG9rDQo+ID4gPiA+ICsgICAgICAg ICAqIHRvIGRyb3AgdGhlIHBhY2tldCBhbmQgYXZvaWQgcmV0cmFuc21pc3Npb24uDQo+ID4gPiA+ ICsgICAgICAgICAqDQo+ID4gPiA+ICsgICAgICAgICAqIFRoZXJlIGlzIGEgY29ybmVyIGNhc2Ug d2hlcmUgdGhlIHBhY2tldCBjb250YWlucw0KPiA+ID4gPiArICAgICAgICAgKiBib3RoIGFuIGFj a2VkIGFuZCBhIG5vbi1hY2tlZCByZWNvcmQuDQo+ID4gPiA+ICsgICAgICAgICAqIFdlIGN1cnJl bnRseSBkb24ndCBoYW5kbGUgdGhhdCBjYXNlIGFuZCByZWx5DQo+ID4gPiA+ICsgICAgICAgICAq IG9uIFRDUCB0byByZXRyYW5taXQgYSBwYWNrZXQgdGhhdCBkb2Vzbid0IGNvbnRhaW4NCj4gPiA+ ID4gKyAgICAgICAgICogYWxyZWFkeSBhY2tlZCBwYXlsb2FkLg0KPiA+ID4gPiArICAgICAgICAg Ki8NCj4gPiA+ID4gKyAgICAgICAgICAgIGdvdG8gZnJlZV9vcmlnOw0KPiA+ID4gPiArDQo+ID4g PiA+ICsgICAgICAgIGlmIChwYXlsb2FkX2xlbiA+IC1zeW5jX3NpemUpIHsNCj4gPiA+ID4gKyAg ICAgICAgICAgIFdBUk4oMSwgIkZhbGxiYWNrIG9mIHBhcnRpYWxseSBvZmZsb2FkZWQgcGFja2V0 cw0KPiA+ID4gPiBpcyBub3Qgc3VwcG9ydGVkXG4iKTsNCj4gPiA+ID4gKyAgICAgICAgICAgIGdv dG8gZnJlZV9zZzsNCj4gPiA+ID4gKyAgICAgICAgfSBlbHNlIHsNCj4gPiA+ID4gKyAgICAgICAg ICAgIHJldHVybiBza2I7DQo+ID4gPiA+ICsgICAgICAgIH0NCj4gPiA+ID4gKyAgICB9DQo+ID4g PiA+ICsNCj4gPiA+ID4gKyAgICByZW1haW5pbmcgPSBzeW5jX3NpemU7DQo+ID4gPiA+ICsgICAg d2hpbGUgKHJlbWFpbmluZyA+IDApIHsNCj4gPiA+ID4gKyAgICAgICAgc2tiX2ZyYWdfdCAqZnJh ZyA9ICZyZWNvcmQtPmZyYWdzW2ldOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgICAgIF9fc2ti X2ZyYWdfcmVmKGZyYWcpOw0KPiA+ID4gPiArICAgICAgICBzZ19zZXRfcGFnZShzZ19pbiArIGks IHNrYl9mcmFnX3BhZ2UoZnJhZyksDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgc2tiX2ZyYWdf c2l6ZShmcmFnKSwgZnJhZy0+cGFnZV9vZmZzZXQpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAg ICAgIHJlbWFpbmluZyAtPSBza2JfZnJhZ19zaXplKGZyYWcpOw0KPiA+ID4gPiArDQo+ID4gPiA+ ICsgICAgICAgIGlmIChyZW1haW5pbmcgPCAwKQ0KPiA+ID4gPiArICAgICAgICAgICAgc2dfaW5b aV0ubGVuZ3RoICs9IHJlbWFpbmluZzsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAgICBpKys7 DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiArICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0 eC0+bG9jaywgZmxhZ3MpOw0KPiA+ID4gPiArICAgIHJlc3luY19zZ3MgPSBpOw0KPiA+ID4gPiAr DQo+ID4gPiA+ICsgICAgYWVhZF9yZXEgPSB0bHNfYWxsb2NfYWVhZF9yZXF1ZXN0KGN0eC0+YWVh ZF9zZW5kLA0KPiA+ID4gPiBHRlBfQVRPTUlDKTsNCj4gPiA+ID4gKyAgICBpZiAoIWFlYWRfcmVx KQ0KPiA+ID4gPiArICAgICAgICBnb3RvIHB1dF9zZzsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAg IGJ1Zl9sZW4gPSBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4X1NBTFRfU0laRSArDQo+ID4gPiA+ICsg ICAgICAgICAgVExTX0NJUEhFUl9BRVNfR0NNXzEyOF9JVl9TSVpFICsNCj4gPiA+ID4gKyAgICAg ICAgICBUTFNfQUFEX1NQQUNFX1NJWkUgKw0KPiA+ID4gPiArICAgICAgICAgIHN5bmNfc2l6ZSAr DQo+ID4gPiA+ICsgICAgICAgICAgdGxzX2N0eC0+dGFnX3NpemU7DQo+ID4gPiA+ICsgICAgYnVm ID0ga21hbGxvYyhidWZfbGVuLCBHRlBfQVRPTUlDKTsNCj4gPiA+ID4gKyAgICBpZiAoIWJ1ZikN Cj4gPiA+ID4gKyAgICAgICAgZ290byBmcmVlX3JlcTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAg IG5za2IgPSBhbGxvY19za2Ioc2tiX2hlYWRyb29tKHNrYikgKyBza2ItPmxlbiwNCj4gPiA+ID4g R0ZQX0FUT01JQyk7DQo+ID4gPiA+ICsgICAgaWYgKCFuc2tiKQ0KPiA+ID4gPiArICAgICAgICBn b3RvIGZyZWVfYnVmOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgc2tiX3Jlc2VydmUobnNrYiwg c2tiX2hlYWRyb29tKHNrYikpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgaXYgPSBidWY7DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBtZW1jcHkoaXYsIHRsc19jdHgtPmNyeXB0b19zZW5kX2Fl c19nY21fMTI4LnNhbHQsDQo+ID4gPiA+ICsgICAgICAgICAgIFRMU19DSVBIRVJfQUVTX0dDTV8x MjhfU0FMVF9TSVpFKTsNCj4gPiA+ID4gKyAgICBhYWQgPSBidWYgKyBUTFNfQ0lQSEVSX0FFU19H Q01fMTI4X1NBTFRfU0laRSArDQo+ID4gPiA+ICsgICAgICAgICAgVExTX0NJUEhFUl9BRVNfR0NN XzEyOF9JVl9TSVpFOw0KPiA+ID4gPiArICAgIGR1bW15X2J1ZiA9IGFhZCArIFRMU19BQURfU1BB Q0VfU0laRTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIHNnX3NldF9idWYoJnNnX291dFswXSwg ZHVtbXlfYnVmLCBzeW5jX3NpemUpOw0KPiA+ID4gPiArICAgIHNnX3NldF9idWYoJnNnX291dFsx XSwgbnNrYi0+ZGF0YSArIHRjcF9wYXlsb2FkX29mZnNldCwNCj4gPiA+ID4gKyAgICAgICAgICAg cGF5bG9hZF9sZW4pOw0KPiA+ID4gPiArICAgIC8qIEFkZCByb29tIGZvciBhdXRoZW50aWNhdGlv biB0YWcgcHJvZHVjZWQgYnkgY3J5cHRvICovDQo+ID4gPiA+ICsgICAgZHVtbXlfYnVmICs9IHN5 bmNfc2l6ZTsNCj4gPiA+ID4gKyAgICBzZ19zZXRfYnVmKCZzZ19vdXRbMl0sIGR1bW15X2J1Ziwg dGxzX2N0eC0+dGFnX3NpemUpOw0KPiA+ID4gPiArICAgIHJjID0gc2tiX3RvX3NndmVjKHNrYiwg JnNnX2luW2ldLCB0Y3BfcGF5bG9hZF9vZmZzZXQsDQo+ID4gPiA+ICsgICAgICAgICAgICAgIHBh eWxvYWRfbGVuKTsNCj4gPiA+ID4gKyAgICBpZiAocmMgPCAwKQ0KPiA+ID4gPiArICAgICAgICBn b3RvIGZyZWVfbnNrYjsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIHJjID0gdGxzX2VuY19yZWNv cmRzKGFlYWRfcmVxLCBjdHgtPmFlYWRfc2VuZCwgc2dfaW4sDQo+ID4gPiA+IHNnX291dCwgYWFk LCBpdiwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgcmNkX3NuLCBzeW5jX3NpemUgKyBwYXls b2FkX2xlbik7DQo+ID4gPiA+ICsgICAgaWYgKHJjIDwgMCkNCj4gPiA+ID4gKyAgICAgICAgZ290 byBmcmVlX25za2I7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBjb21wbGV0ZV9za2IobnNrYiwg c2tiLCB0Y3BfcGF5bG9hZF9vZmZzZXQpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgLyogdmFs aWRhdGVfeG1pdF9za2JfbGlzdCBhc3N1bWVzIHRoYXQgaWYgdGhlIHNrYiB3YXNuJ3QNCj4gPiA+ ID4gc2VnbWVudGVkDQo+ID4gPiA+ICsgICAgICogbnNrYi0+cHJldiB3aWxsIHBvaW50IHRvIHRo ZSBza2IgaXRzZWxmDQo+ID4gPiA+ICsgICAgICovDQo+ID4gPiA+ICsgICAgbnNrYi0+cHJldiA9 IG5za2I7DQo+ID4gPiA+ICtmcmVlX2J1ZjoNCj4gPiA+ID4gKyAgICBrZnJlZShidWYpOw0KPiA+ ID4gPiArZnJlZV9yZXE6DQo+ID4gPiA+ICsgICAga2ZyZWUoYWVhZF9yZXEpOw0KPiA+ID4gPiAr cHV0X3NnOg0KPiA+ID4gPiArICAgIGZvciAoaSA9IDA7IGkgPCByZXN5bmNfc2dzOyBpKyspDQo+ ID4gPiA+ICsgICAgICAgIHB1dF9wYWdlKHNnX3BhZ2UoJnNnX2luW2ldKSk7DQo+ID4gPiA+ICtm cmVlX3NnOg0KPiA+ID4gPiArICAgIGtmcmVlKHNnX2luKTsNCj4gPiA+ID4gK2ZyZWVfb3JpZzoN Cj4gPiA+ID4gKyAgICBrZnJlZV9za2Ioc2tiKTsNCj4gPiA+ID4gKyAgICByZXR1cm4gbnNrYjsN Cj4gPiA+ID4gKw0KPiA+ID4gPiArZnJlZV9uc2tiOg0KPiA+ID4gPiArICAgIGtmcmVlX3NrYihu c2tiKTsNCj4gPiA+ID4gKyAgICBuc2tiID0gTlVMTDsNCj4gPiA+ID4gKyAgICBnb3RvIGZyZWVf YnVmOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdGF0aWMgc3RydWN0IHNrX2J1 ZmYgKnRsc192YWxpZGF0ZV94bWl0X3NrYihzdHJ1Y3Qgc29jayAqc2ssDQo+ID4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwNCj4gPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KPiA+ID4gPiArew0K PiA+ID4gPiArICAgIGlmIChkZXYgPT0gdGxzX2dldF9jdHgoc2spLT5uZXRkZXYpDQo+ID4gPiA+ ICsgICAgICAgIHJldHVybiBza2I7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICByZXR1cm4gdGxz X3N3X2ZhbGxiYWNrKHNrLCBza2IpOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICtp bnQgdGxzX3N3X2ZhbGxiYWNrX2luaXQoc3RydWN0IHNvY2sgKnNrLA0KPiA+ID4gPiArICAgICAg ICAgICAgIHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0ICpvZmZsb2FkX2N0eCwNCj4gPiA+ID4g KyAgICAgICAgICAgICBzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpjcnlwdG9faW5mbykNCj4gPiA+ ID4gK3sNCj4gPiA+ID4gKyAgICBpbnQgcmM7DQo+ID4gPiA+ICsgICAgY29uc3QgdTggKmtleTsN Cj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIG9mZmxvYWRfY3R4LT5hZWFkX3NlbmQgPQ0KPiA+ID4g PiArICAgICAgICBjcnlwdG9fYWxsb2NfYWVhZCgiZ2NtKGFlcykiLCAwLCBDUllQVE9fQUxHX0FT WU5DKTsNCj4gPiA+ID4gKyAgICBpZiAoSVNfRVJSKG9mZmxvYWRfY3R4LT5hZWFkX3NlbmQpKSB7 DQo+ID4gPiA+ICsgICAgICAgIHJjID0gUFRSX0VSUihvZmZsb2FkX2N0eC0+YWVhZF9zZW5kKTsN Cj4gPiA+ID4gKyAgICAgICAgcHJfZXJyX3JhdGVsaW1pdGVkKCJjcnlwdG9fYWxsb2NfYWVhZCBm YWlsZWQgcmM9JWRcbiIsDQo+ID4gPiA+IHJjKTsNCj4gPiA+ID4gKyAgICAgICAgb2ZmbG9hZF9j dHgtPmFlYWRfc2VuZCA9IE5VTEw7DQo+ID4gPiA+ICsgICAgICAgIGdvdG8gZXJyX291dDsNCj4g PiA+ID4gKyAgICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBrZXkgPSAoKHN0cnVjdCB0bHMx Ml9jcnlwdG9faW5mb19hZXNfZ2NtXzEyOA0KPiA+ID4gPiAqKWNyeXB0b19pbmZvKS0+a2V5Ow0K PiA+ID4gPiArDQo+ID4gPiA+ICsgICAgcmMgPSBjcnlwdG9fYWVhZF9zZXRrZXkob2ZmbG9hZF9j dHgtPmFlYWRfc2VuZCwga2V5LA0KPiA+ID4gPiArICAgICAgICAgICAgICAgIFRMU19DSVBIRVJf QUVTX0dDTV8xMjhfS0VZX1NJWkUpOw0KPiA+ID4gPiArICAgIGlmIChyYykNCj4gPiA+ID4gKyAg ICAgICAgZ290byBmcmVlX2FlYWQ7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICByYyA9IGNyeXB0 b19hZWFkX3NldGF1dGhzaXplKG9mZmxvYWRfY3R4LT5hZWFkX3NlbmQsDQo+ID4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4X1RBR19TSVpFKTsNCj4gPiA+ ID4gKyAgICBpZiAocmMpDQo+ID4gPiA+ICsgICAgICAgIGdvdG8gZnJlZV9hZWFkOw0KPiA+ID4g PiArDQo+ID4gPiA+ICsgICAgc2stPnNrX3ZhbGlkYXRlX3htaXRfc2tiID0gdGxzX3ZhbGlkYXRl X3htaXRfc2tiOw0KPiA+ID4gPiArICAgIHJldHVybiAwOw0KPiA+ID4gPiArZnJlZV9hZWFkOg0K PiA+ID4gPiArICAgIGNyeXB0b19mcmVlX2FlYWQob2ZmbG9hZF9jdHgtPmFlYWRfc2VuZCk7DQo+ ID4gPiA+ICtlcnJfb3V0Og0KPiA+ID4gPiArICAgIHJldHVybiByYzsNCj4gPiA+ID4gK30NCj4g PiA+ID4gZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX21haW4uYyBiL25ldC90bHMvdGxzX21haW4u Yw0KPiA+ID4gPiBpbmRleCBkODI0ZDU0ODQ0N2UuLmUwZGZhY2UzMzAxNyAxMDA2NDQNCj4gPiA+ ID4gLS0tIGEvbmV0L3Rscy90bHNfbWFpbi5jDQo+ID4gPiA+ICsrKyBiL25ldC90bHMvdGxzX21h aW4uYw0KPiA+ID4gPiBAQCAtNTQsNiArNTQsOSBAQCBlbnVtIHsNCj4gPiA+ID4gICBlbnVtIHsN Cj4gPiA+ID4gICAgICAgVExTX0JBU0VfVFgsDQo+ID4gPiA+ICAgICAgIFRMU19TV19UWCwNCj4g PiA+ID4gKyNpZmRlZiBDT05GSUdfVExTX0RFVklDRQ0KPiA+ID4gPiArICAgIFRMU19IV19UWCwN Cj4gPiA+ID4gKyNlbmRpZg0KPiA+ID4gPiAgICAgICBUTFNfTlVNX0NPTkZJRywNCj4gPiA+ID4g ICB9Ow0KPiA+ID4gPiAgIEBAIC00MTYsMTEgKzQxOSwxOSBAQCBzdGF0aWMgaW50IGRvX3Rsc19z ZXRzb2Nrb3B0X3R4KHN0cnVjdA0KPiA+ID4gPiBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZh bCwNCj4gPiA+ID4gICAgICAgICAgIGdvdG8gZXJyX2NyeXB0b19pbmZvOw0KPiA+ID4gPiAgICAg ICB9DQo+ID4gPiA+ICAgLSAgICAvKiBjdXJyZW50bHkgU1cgaXMgZGVmYXVsdCwgd2Ugd2lsbCBo YXZlIGV0aHRvb2wgaW4NCj4gPiA+ID4gZnV0dXJlICovDQo+ID4gPiA+IC0gICAgcmMgPSB0bHNf c2V0X3N3X29mZmxvYWQoc2ssIGN0eCk7DQo+ID4gPiA+IC0gICAgdHhfY29uZiA9IFRMU19TV19U WDsNCj4gPiA+ID4gLSAgICBpZiAocmMpDQo+ID4gPiA+IC0gICAgICAgIGdvdG8gZXJyX2NyeXB0 b19pbmZvOw0KPiA+ID4gPiArI2lmZGVmIENPTkZJR19UTFNfREVWSUNFDQo+ID4gPiA+ICsgICAg cmMgPSB0bHNfc2V0X2RldmljZV9vZmZsb2FkKHNrLCBjdHgpOw0KPiA+ID4gPiArICAgIHR4X2Nv bmYgPSBUTFNfSFdfVFg7DQo+ID4gPiA+ICsgICAgaWYgKHJjKSB7DQo+ID4gPiA+ICsjZWxzZQ0K PiA+ID4gPiArICAgIHsNCj4gPiA+ID4gKyNlbmRpZg0KPiA+ID4gPiArICAgICAgICAvKiBpZiBI VyBvZmZsb2FkIGZhaWxzIGZhbGxiYWNrIHRvIFNXICovDQo+ID4gPiA+ICsgICAgICAgIHJjID0g dGxzX3NldF9zd19vZmZsb2FkKHNrLCBjdHgpOw0KPiA+ID4gPiArICAgICAgICB0eF9jb25mID0g VExTX1NXX1RYOw0KPiA+ID4gPiArICAgICAgICBpZiAocmMpDQo+ID4gPiA+ICsgICAgICAgICAg ICBnb3RvIGVycl9jcnlwdG9faW5mbzsNCj4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ICAgICAgICAg Y3R4LT50eF9jb25mID0gdHhfY29uZjsNCj4gPiA+ID4gICAgICAgdXBkYXRlX3NrX3Byb3Qoc2ss IGN0eCk7DQo+ID4gPiA+IEBAIC00NzMsNiArNDg0LDEyIEBAIHN0YXRpYyB2b2lkIGJ1aWxkX3By b3RvcyhzdHJ1Y3QgcHJvdG8NCj4gPiA+ID4gKnByb3QsIHN0cnVjdCBwcm90byAqYmFzZSkNCj4g PiA+ID4gICAgICAgcHJvdFtUTFNfU1dfVFhdID0gcHJvdFtUTFNfQkFTRV9UWF07DQo+ID4gPiA+ ICAgICAgIHByb3RbVExTX1NXX1RYXS5zZW5kbXNnICAgICAgICA9IHRsc19zd19zZW5kbXNnOw0K PiA+ID4gPiAgICAgICBwcm90W1RMU19TV19UWF0uc2VuZHBhZ2UgICAgPSB0bHNfc3dfc2VuZHBh Z2U7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNpZmRlZiBDT05GSUdfVExTX0RFVklDRQ0KPiA+ID4g PiArICAgIHByb3RbVExTX0hXX1RYXSA9IHByb3RbVExTX1NXX1RYXTsNCj4gPiA+ID4gKyAgICBw cm90W1RMU19IV19UWF0uc2VuZG1zZyAgICAgICAgPSB0bHNfZGV2aWNlX3NlbmRtc2c7DQo+ID4g PiA+ICsgICAgcHJvdFtUTFNfSFdfVFhdLnNlbmRwYWdlICAgID0gdGxzX2RldmljZV9zZW5kcGFn ZTsNCj4gPiA+ID4gKyNlbmRpZg0KPiA+ID4gPiAgIH0NCj4gPiA+ID4gICAgIHN0YXRpYyBpbnQg dGxzX2luaXQoc3RydWN0IHNvY2sgKnNrKQ0KPiA+ID4gPiBAQCAtNTMxLDYgKzU0OCw5IEBAIHN0 YXRpYyBpbnQgX19pbml0IHRsc19yZWdpc3Rlcih2b2lkKQ0KPiA+ID4gPiAgIHsNCj4gPiA+ID4g ICAgICAgYnVpbGRfcHJvdG9zKHRsc19wcm90c1tUTFNWNF0sICZ0Y3BfcHJvdCk7DQo+ID4gPiA+ ICAgKyNpZmRlZiBDT05GSUdfVExTX0RFVklDRQ0KPiA+ID4gPiArICAgIHRsc19kZXZpY2VfaW5p dCgpOw0KPiA+ID4gPiArI2VuZGlmDQo+ID4gPiA+ICAgICAgIHRjcF9yZWdpc3Rlcl91bHAoJnRj cF90bHNfdWxwX29wcyk7DQo+ID4gPiA+ICAgICAgICAgcmV0dXJuIDA7DQo+ID4gPiA+IEBAIC01 MzksNiArNTU5LDkgQEAgc3RhdGljIGludCBfX2luaXQgdGxzX3JlZ2lzdGVyKHZvaWQpDQo+ID4g PiA+ICAgc3RhdGljIHZvaWQgX19leGl0IHRsc191bnJlZ2lzdGVyKHZvaWQpDQo+ID4gPiA+ICAg ew0KPiA+ID4gPiAgICAgICB0Y3BfdW5yZWdpc3Rlcl91bHAoJnRjcF90bHNfdWxwX29wcyk7DQo+ ID4gPiA+ICsjaWZkZWYgQ09ORklHX1RMU19ERVZJQ0UNCj4gPiA+ID4gKyAgICB0bHNfZGV2aWNl X2NsZWFudXAoKTsNCj4gPiA+ID4gKyNlbmRpZg0KPiA+ID4gPiAgIH0NCj4gPiA+ID4gICAgIG1v ZHVsZV9pbml0KHRsc19yZWdpc3Rlcik7DQo+IA0KPiBUaGFua3MsDQo+IEtpcmlsbA==