From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0060.outbound.protection.outlook.com [104.47.0.60]) by dpdk.org (Postfix) with ESMTP id 361801DFD5 for ; Mon, 11 Jun 2018 13:42:52 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tOqwrp/Gp6cmm/SrD0xFZKTfPXUjeYKLy/KS4Znc/jw=; b=bXkcNUuw0jgoSfTVtBx2XKC8B9zhtzbs4vvHF8YD/2AKVnmjpfl1YwPyj6PHUUqvfDIcYlhoqKxV61Bpw/L6S9m0cH9DlQDv70GtKq+2+IVg6JT/wINppR28X7jvxAeE4MEzmBFnhssyQBLM2quw6c+tN673/P6uQ9YZ/GMzFcI= Received: from VI1PR05MB1678.eurprd05.prod.outlook.com (10.165.235.152) by VI1PR05MB3421.eurprd05.prod.outlook.com (10.170.239.11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.841.19; Mon, 11 Jun 2018 11:42:49 +0000 Received: from VI1PR05MB1678.eurprd05.prod.outlook.com ([fe80::e06e:5570:1949:413d]) by VI1PR05MB1678.eurprd05.prod.outlook.com ([fe80::e06e:5570:1949:413d%6]) with mapi id 15.20.0841.019; Mon, 11 Jun 2018 11:42:48 +0000 From: "Xueming(Steven) Li" To: Adrien Mazarguil , Shahaf Shuler CC: "dev@dpdk.org" Thread-Topic: [dpdk-dev] [PATCH 4/7] net/mlx5: re-indent generic probing function Thread-Index: AQHT9EaBEGWO3yupcU67t979bt5aQaRbCKtA Date: Mon, 11 Jun 2018 11:42:48 +0000 Message-ID: References: <20180525161814.13873-1-adrien.mazarguil@6wind.com> <20180525161814.13873-5-adrien.mazarguil@6wind.com> In-Reply-To: <20180525161814.13873-5-adrien.mazarguil@6wind.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=xuemingl@mellanox.com; x-originating-ip: [180.174.142.249] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; VI1PR05MB3421; 7:akBOeRkEnxOGe0YiEEuIlTTIp7ZuS5Oq3tQI/cc/2qMGqT+KO9j3ELteqJOe4R1tQIsSCud3W5rKc2TEQ0tEMevfNVzxWcLtMWOFMADW6Y+x/A7LLMsGz3Bi8F+ILIG2FS/BkyC3DufQCH1upOwormJdg28qVU+V7OJmjuLRiU0vKmAMa7OP/MHfYxa78j+sbGqw1pQLLNF6dzc6O5hZjcMHgL2to0t24QhM4ExPiSokrpXG8LEH7jZCLeY0wBZb x-ms-exchange-antispam-srfa-diagnostics: SOS; x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR05MB3421; x-ms-traffictypediagnostic: VI1PR05MB3421: x-ld-processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(10201501046)(93006095)(93001095)(3002001)(3231254)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123562045)(20161123558120)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR05MB3421; BCL:0; PCL:0; RULEID:; SRVR:VI1PR05MB3421; x-forefront-prvs: 070092A9D3 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(376002)(346002)(39860400002)(396003)(39380400002)(366004)(199004)(189003)(13464003)(3280700002)(110136005)(2900100001)(59450400001)(76176011)(53936002)(7696005)(6246003)(3660700001)(102836004)(316002)(6436002)(9686003)(2906002)(68736007)(106356001)(26005)(186003)(105586002)(99286004)(6506007)(53546011)(53946003)(229853002)(6636002)(7736002)(11346002)(3846002)(66066001)(55016002)(97736004)(8676002)(476003)(8936002)(486006)(5250100002)(86362001)(6116002)(14454004)(446003)(81166006)(5660300001)(33656002)(5890100001)(74316002)(305945005)(4326008)(25786009)(81156014)(478600001)(41533002)(579004)(309714004); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR05MB3421; H:VI1PR05MB1678.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: vZRYqmkGySdZgP4GlweXqKf3Zi64qoFbL5rL4vl7UTgMbPUWMw5AZHOqeaCmwVQfy5lAIHC+EZhuxEs6lb27DsGRm+RKFi0TPbWvRZxwVaP1F92mjRixt8FDV9ZD7szk/Z9Qo6+zYMSMUDksb1VAsyB/Z0XPfSo80gKFtWz8L5+iBxhehcA++mfSPbVvodil spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: ac0fd7a2-88b7-4d0d-5d79-08d5cf907509 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: ac0fd7a2-88b7-4d0d-5d79-08d5cf907509 X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Jun 2018 11:42:48.7330 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR05MB3421 Subject: Re: [dpdk-dev] [PATCH 4/7] net/mlx5: re-indent generic probing function X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Jun 2018 11:42:52 -0000 UmV2aWV3ZWQtYnk6IFh1ZW1pbmcoU3RldmVuKSBMaSA8eHVlbWluZ2xAbWVsbGFub3guY29tPg0K DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IGRldiA8ZGV2LWJvdW5jZXNA ZHBkay5vcmc+IE9uIEJlaGFsZiBPZiBBZHJpZW4gTWF6YXJndWlsDQo+IFNlbnQ6IFNhdHVyZGF5 LCBNYXkgMjYsIDIwMTggMTI6MzUgQU0NCj4gVG86IFNoYWhhZiBTaHVsZXIgPHNoYWhhZnNAbWVs bGFub3guY29tPg0KPiBDYzogZGV2QGRwZGsub3JnDQo+IFN1YmplY3Q6IFtkcGRrLWRldl0gW1BB VENIIDQvN10gbmV0L21seDU6IHJlLWluZGVudCBnZW5lcmljIHByb2JpbmcgZnVuY3Rpb24NCj4g DQo+IFNpbmNlIGNvbW1pdCAibmV0L21seDU6IHNwbGl0IFBDSSBmcm9tIGdlbmVyaWMgcHJvYmlu ZyBjb2RlIiBleHRyYWN0ZWQgdGhlIGlubmVyIGxvb3AgdG8gYSBzZXBhcmF0ZQ0KPiBmdW5jdGlv biwgbWx4NV9kZXZfc3Bhd25fb25lKCkgaXMgbGVmdCB3aXRoIGFuIHVubmVjZXNzYXJ5IGluZGVu dCBsZXZlbC4NCj4gDQo+IFRoaXMgcGF0Y2ggZWxpbWluYXRlcyBhIGJsb2NrLCBtb3ZlcyBpdHMg bG9jYWwgdmFyaWFibGVzIHRvIGZ1bmN0aW9uIHNjb3BlLCBhbmQgcmUtaW5kZW50cyBpdHMNCj4g Y29udGVudHMuDQo+IA0KPiBObyBmdW5jdGlvbmFsIGltcGFjdC4NCj4gDQo+IFNpZ25lZC1vZmYt Ynk6IEFkcmllbiBNYXphcmd1aWwgPGFkcmllbi5tYXphcmd1aWxANndpbmQuY29tPg0KPiAtLS0N Cj4gIGRyaXZlcnMvbmV0L21seDUvbWx4NS5jIHwgNTg5ICsrKysrKysrKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gIDEgZmlsZSBjaGFuZ2VkLCAyODYgaW5zZXJ0aW9ucygr KSwgMzAzIGRlbGV0aW9ucygtKQ0KPiANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDUv bWx4NS5jIGIvZHJpdmVycy9uZXQvbWx4NS9tbHg1LmMgaW5kZXggN2E4MTJlZjkzLi5kNTdlODEx OGMgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvbmV0L21seDUvbWx4NS5jDQo+ICsrKyBiL2RyaXZl cnMvbmV0L21seDUvbWx4NS5jDQo+IEBAIC02NTgsOCArNjU4LDI3IEBAIG1seDVfZGV2X3NwYXdu X29uZShzdHJ1Y3QgcnRlX2RldmljZSAqZHBka19kZXYsDQo+ICAJCSAgIHVuc2lnbmVkIGludCBw b3J0KQ0KPiAgew0KPiAgCXN0cnVjdCBpYnZfY29udGV4dCAqY3R4Ow0KPiArCXN0cnVjdCBpYnZf cG9ydF9hdHRyIHBvcnRfYXR0cjsNCj4gKwlzdHJ1Y3QgaWJ2X3BkICpwZCA9IE5VTEw7DQo+ICAJ c3RydWN0IG1seDVkdl9jb250ZXh0IGR2X2F0dHIgPSB7IC5jb21wX21hc2sgPSAwIH07DQo+ICsJ c3RydWN0IG1seDVfZGV2X2NvbmZpZyBjb25maWcgPSB7DQo+ICsJCS52ZiA9ICEhdmYsDQo+ICsJ CS50eF92ZWNfZW4gPSAxLA0KPiArCQkucnhfdmVjX2VuID0gMSwNCj4gKwkJLm1wd19oZHJfZHNl ZyA9IDAsDQo+ICsJCS50eHFfaW5saW5lID0gTUxYNV9BUkdfVU5TRVQsDQo+ICsJCS50eHFzX2lu bGluZSA9IE1MWDVfQVJHX1VOU0VULA0KPiArCQkuaW5saW5lX21heF9wYWNrZXRfc3ogPSBNTFg1 X0FSR19VTlNFVCwNCj4gKwkJLnZmX25sX2VuID0gMSwNCj4gKwkJLm1wcnEgPSB7DQo+ICsJCQku ZW5hYmxlZCA9IDAsDQo+ICsJCQkuc3RyaWRlX251bV9uID0gTUxYNV9NUFJRX1NUUklERV9OVU1f TiwNCj4gKwkJCS5tYXhfbWVtY3B5X2xlbiA9IE1MWDVfTVBSUV9NRU1DUFlfREVGQVVMVF9MRU4s DQo+ICsJCQkubWluX3J4cXNfbnVtID0gTUxYNV9NUFJRX01JTl9SWFFTLA0KPiArCQl9LA0KPiAr CX07DQo+ICAJc3RydWN0IHJ0ZV9ldGhfZGV2ICpldGhfZGV2ID0gTlVMTDsNCj4gKwlzdHJ1Y3Qg cHJpdiAqcHJpdiA9IE5VTEw7DQo+ICAJaW50IGVyciA9IDA7DQo+ICAJdW5zaWduZWQgaW50IG1w czsNCj4gIAl1bnNpZ25lZCBpbnQgY3FlX2NvbXA7DQo+IEBAIC02NzUsNiArNjk0LDggQEAgbWx4 NV9kZXZfc3Bhd25fb25lKHN0cnVjdCBydGVfZGV2aWNlICpkcGRrX2RldiwgICNpZmRlZg0KPiBI QVZFX0lCVl9ERVZJQ0VfQ09VTlRFUlNfU0VUX1NVUFBPUlQNCj4gIAlzdHJ1Y3QgaWJ2X2NvdW50 ZXJfc2V0X2Rlc2NyaXB0aW9uIGNzX2Rlc2M7ICAjZW5kaWYNCj4gKwlzdHJ1Y3QgZXRoZXJfYWRk ciBtYWM7DQo+ICsJY2hhciBuYW1lW1JURV9FVEhfTkFNRV9NQVhfTEVOXTsNCj4gDQo+ICAJLyog UHJlcGFyZSBzaGFyZWQgZGF0YSBiZXR3ZWVuIHByaW1hcnkgYW5kIHNlY29uZGFyeSBwcm9jZXNz LiAqLw0KPiAgCW1seDVfcHJlcGFyZV9zaGFyZWRfZGF0YSgpOw0KPiBAQCAtNzEwLDExICs3MzEs MTMgQEAgbWx4NV9kZXZfc3Bhd25fb25lKHN0cnVjdCBydGVfZGV2aWNlICpkcGRrX2RldiwNCj4g IAkJRFJWX0xPRyhERUJVRywgIk1QVyBpc24ndCBzdXBwb3J0ZWQiKTsNCj4gIAkJbXBzID0gTUxY NV9NUFdfRElTQUJMRUQ7DQo+ICAJfQ0KPiArCWNvbmZpZy5tcHMgPSBtcHM7DQo+ICAjaWZkZWYg SEFWRV9JQlZfTUxYNV9NT0RfU1dQDQo+ICAJaWYgKGR2X2F0dHIuY29tcF9tYXNrICYgTUxYNURW X0NPTlRFWFRfTUFTS19TV1ApDQo+ICAJCXN3cCA9IGR2X2F0dHIuc3dfcGFyc2luZ19jYXBzLnN3 X3BhcnNpbmdfb2ZmbG9hZHM7DQo+ICAJRFJWX0xPRyhERUJVRywgIlNXUCBzdXBwb3J0OiAldSIs IHN3cCk7ICAjZW5kaWYNCj4gKwljb25maWcuc3dwID0gISFzd3A7DQo+ICAjaWZkZWYgSEFWRV9J QlZfREVWSUNFX1NUUklESU5HX1JRX1NVUFBPUlQNCj4gIAlpZiAoZHZfYXR0ci5jb21wX21hc2sg JiBNTFg1RFZfQ09OVEVYVF9NQVNLX1NUUklESU5HX1JRKSB7DQo+ICAJCXN0cnVjdCBtbHg1ZHZf c3RyaWRpbmdfcnFfY2FwcyBtcHJxX2NhcHMgPSBAQCAtNzQwLDYgKzc2Myw4IEBAIG1seDVfZGV2 X3NwYXduX29uZShzdHJ1Y3QNCj4gcnRlX2RldmljZSAqZHBka19kZXYsDQo+ICAJCQltcHJxX2Nh cHMubWluX3NpbmdsZV93cWVfbG9nX251bV9vZl9zdHJpZGVzOw0KPiAgCQltcHJxX21heF9zdHJp ZGVfbnVtX24gPQ0KPiAgCQkJbXBycV9jYXBzLm1heF9zaW5nbGVfd3FlX2xvZ19udW1fb2Zfc3Ry aWRlczsNCj4gKwkJY29uZmlnLm1wcnEuc3RyaWRlX251bV9uID0gUlRFX01BWChNTFg1X01QUlFf U1RSSURFX05VTV9OLA0KPiArCQkJCQkJICAgbXBycV9taW5fc3RyaWRlX251bV9uKTsNCj4gIAl9 DQo+ICAjZW5kaWYNCj4gIAlpZiAoUlRFX0NBQ0hFX0xJTkVfU0laRSA9PSAxMjggJiYNCj4gQEAg LTc0Nyw2ICs3NzIsNyBAQCBtbHg1X2Rldl9zcGF3bl9vbmUoc3RydWN0IHJ0ZV9kZXZpY2UgKmRw ZGtfZGV2LA0KPiAgCQljcWVfY29tcCA9IDA7DQo+ICAJZWxzZQ0KPiAgCQljcWVfY29tcCA9IDE7 DQo+ICsJY29uZmlnLmNxZV9jb21wID0gY3FlX2NvbXA7DQo+ICAjaWZkZWYgSEFWRV9JQlZfREVW SUNFX1RVTk5FTF9TVVBQT1JUDQo+ICAJaWYgKGR2X2F0dHIuY29tcF9tYXNrICYgTUxYNURWX0NP TlRFWFRfTUFTS19UVU5ORUxfT0ZGTE9BRFMpIHsNCj4gIAkJdHVubmVsX2VuID0gKChkdl9hdHRy LnR1bm5lbF9vZmZsb2Fkc19jYXBzICYgQEAgLTc2MCw2ICs3ODYsNyBAQCBtbHg1X2Rldl9zcGF3 bl9vbmUoc3RydWN0DQo+IHJ0ZV9kZXZpY2UgKmRwZGtfZGV2LA0KPiAgCURSVl9MT0coV0FSTklO RywNCj4gIAkJInR1bm5lbCBvZmZsb2FkaW5nIGRpc2FibGVkIGR1ZSB0byBvbGQgT0ZFRC9yZG1h LWNvcmUgdmVyc2lvbiIpOyAgI2VuZGlmDQo+ICsJY29uZmlnLnR1bm5lbF9lbiA9IHR1bm5lbF9l bjsNCj4gICNpZmRlZiBIQVZFX0lCVl9ERVZJQ0VfTVBMU19TVVBQT1JUDQo+ICAJbXBsc19lbiA9 ICgoZHZfYXR0ci50dW5uZWxfb2ZmbG9hZHNfY2FwcyAmDQo+ICAJCSAgICBNTFg1RFZfUkFXX1BB Q0tFVF9DQVBfVFVOTkVMRURfT0ZGTE9BRF9DV19NUExTX09WRVJfR1JFKSAmJiBAQCAtNzcxLDMy NSArNzk4LDI4MSBAQA0KPiBtbHg1X2Rldl9zcGF3bl9vbmUoc3RydWN0IHJ0ZV9kZXZpY2UgKmRw ZGtfZGV2LA0KPiAgCURSVl9MT0coV0FSTklORywgIk1QTFMgb3ZlciBHUkUvVURQIHR1bm5lbCBv ZmZsb2FkaW5nIGRpc2FibGVkIGR1ZSB0byINCj4gIAkJIiBvbGQgT0ZFRC9yZG1hLWNvcmUgdmVy c2lvbiBvciBmaXJtd2FyZSBjb25maWd1cmF0aW9uIik7ICAjZW5kaWYNCj4gLQl7DQo+IC0JCWNo YXIgbmFtZVtSVEVfRVRIX05BTUVfTUFYX0xFTl07DQo+IC0JCXN0cnVjdCBpYnZfcG9ydF9hdHRy IHBvcnRfYXR0cjsNCj4gLQkJc3RydWN0IGlidl9wZCAqcGQgPSBOVUxMOw0KPiAtCQlzdHJ1Y3Qg cHJpdiAqcHJpdiA9IE5VTEw7DQo+IC0JCXN0cnVjdCBldGhlcl9hZGRyIG1hYzsNCj4gLQkJc3Ry dWN0IG1seDVfZGV2X2NvbmZpZyBjb25maWcgPSB7DQo+IC0JCQkuY3FlX2NvbXAgPSBjcWVfY29t cCwNCj4gLQkJCS5tcHMgPSBtcHMsDQo+IC0JCQkudHVubmVsX2VuID0gdHVubmVsX2VuLA0KPiAt CQkJLm1wbHNfZW4gPSBtcGxzX2VuLA0KPiAtCQkJLnR4X3ZlY19lbiA9IDEsDQo+IC0JCQkucnhf dmVjX2VuID0gMSwNCj4gLQkJCS5tcHdfaGRyX2RzZWcgPSAwLA0KPiAtCQkJLnR4cV9pbmxpbmUg PSBNTFg1X0FSR19VTlNFVCwNCj4gLQkJCS50eHFzX2lubGluZSA9IE1MWDVfQVJHX1VOU0VULA0K PiAtCQkJLmlubGluZV9tYXhfcGFja2V0X3N6ID0gTUxYNV9BUkdfVU5TRVQsDQo+IC0JCQkudmZf bmxfZW4gPSAxLA0KPiAtCQkJLnN3cCA9ICEhc3dwLA0KPiAtCQkJLm1wcnEgPSB7DQo+IC0JCQkJ LmVuYWJsZWQgPSAwLCAvKiBEaXNhYmxlZCBieSBkZWZhdWx0LiAqLw0KPiAtCQkJCS5zdHJpZGVf bnVtX24gPSBSVEVfTUFYKE1MWDVfTVBSUV9TVFJJREVfTlVNX04sDQo+IC0JCQkJCQkJbXBycV9t aW5fc3RyaWRlX251bV9uKSwNCj4gLQkJCQkubWF4X21lbWNweV9sZW4gPSBNTFg1X01QUlFfTUVN Q1BZX0RFRkFVTFRfTEVOLA0KPiAtCQkJCS5taW5fcnhxc19udW0gPSBNTFg1X01QUlFfTUlOX1JY UVMsDQo+IC0JCQl9LA0KPiAtCQl9Ow0KPiAtDQo+IC0JCWlmIChhdHRyLT5vcmlnX2F0dHIucGh5 c19wb3J0X2NudCA+IDEpDQo+IC0JCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcyIs IGRwZGtfZGV2LT5uYW1lKTsNCj4gLQkJZWxzZQ0KPiAtCQkJc25wcmludGYobmFtZSwgc2l6ZW9m KG5hbWUpLCAiJXMgcG9ydCAldSIsDQo+IC0JCQkJIGRwZGtfZGV2LT5uYW1lLCBwb3J0KTsNCj4g LQkJaWYgKHJ0ZV9lYWxfcHJvY2Vzc190eXBlKCkgPT0gUlRFX1BST0NfU0VDT05EQVJZKSB7DQo+ IC0JCQlldGhfZGV2ID0gcnRlX2V0aF9kZXZfYXR0YWNoX3NlY29uZGFyeShuYW1lKTsNCj4gLQkJ CWlmIChldGhfZGV2ID09IE5VTEwpIHsNCj4gLQkJCQlEUlZfTE9HKEVSUiwgImNhbiBub3QgYXR0 YWNoIHJ0ZSBldGhkZXYiKTsNCj4gLQkJCQlydGVfZXJybm8gPSBFTk9NRU07DQo+IC0JCQkJZXJy ID0gcnRlX2Vycm5vOw0KPiAtCQkJCWdvdG8gZXJyb3I7DQo+IC0JCQl9DQo+IC0JCQlldGhfZGV2 LT5kZXZpY2UgPSBkcGRrX2RldjsNCj4gLQkJCWV0aF9kZXYtPmRldl9vcHMgPSAmbWx4NV9kZXZf c2VjX29wczsNCj4gLQkJCWVyciA9IG1seDVfdWFyX2luaXRfc2Vjb25kYXJ5KGV0aF9kZXYpOw0K PiAtCQkJaWYgKGVycikgew0KPiAtCQkJCWVyciA9IHJ0ZV9lcnJubzsNCj4gLQkJCQlnb3RvIGVy cm9yOw0KPiAtCQkJfQ0KPiAtCQkJLyogUmVjZWl2ZSBjb21tYW5kIGZkIGZyb20gcHJpbWFyeSBw cm9jZXNzICovDQo+IC0JCQllcnIgPSBtbHg1X3NvY2tldF9jb25uZWN0KGV0aF9kZXYpOw0KPiAt CQkJaWYgKGVyciA8IDApIHsNCj4gLQkJCQllcnIgPSBydGVfZXJybm87DQo+IC0JCQkJZ290byBl cnJvcjsNCj4gLQkJCX0NCj4gLQkJCS8qIFJlbWFwIFVBUiBmb3IgVHggcXVldWVzLiAqLw0KPiAt CQkJZXJyID0gbWx4NV90eF91YXJfcmVtYXAoZXRoX2RldiwgZXJyKTsNCj4gLQkJCWlmIChlcnIp IHsNCj4gLQkJCQllcnIgPSBydGVfZXJybm87DQo+IC0JCQkJZ290byBlcnJvcjsNCj4gLQkJCX0N Cj4gLQkJCS8qDQo+IC0JCQkgKiBFdGhkZXYgcG9pbnRlciBpcyBzdGlsbCByZXF1aXJlZCBhcyBp bnB1dCBzaW5jZQ0KPiAtCQkJICogdGhlIHByaW1hcnkgZGV2aWNlIGlzIG5vdCBhY2Nlc3NpYmxl IGZyb20gdGhlDQo+IC0JCQkgKiBzZWNvbmRhcnkgcHJvY2Vzcy4NCj4gLQkJCSAqLw0KPiAtCQkJ ZXRoX2Rldi0+cnhfcGt0X2J1cnN0ID0NCj4gLQkJCQltbHg1X3NlbGVjdF9yeF9mdW5jdGlvbihl dGhfZGV2KTsNCj4gLQkJCWV0aF9kZXYtPnR4X3BrdF9idXJzdCA9DQo+IC0JCQkJbWx4NV9zZWxl Y3RfdHhfZnVuY3Rpb24oZXRoX2Rldik7DQo+IC0JCQltbHg1X2dsdWUtPmNsb3NlX2RldmljZShj dHgpOw0KPiAtCQkJcmV0dXJuIGV0aF9kZXY7DQo+ICsJY29uZmlnLm1wbHNfZW4gPSBtcGxzX2Vu Ow0KPiArCWlmIChhdHRyLT5vcmlnX2F0dHIucGh5c19wb3J0X2NudCA+IDEpDQo+ICsJCXNucHJp bnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzIiwgZHBka19kZXYtPm5hbWUpOw0KPiArCWVsc2UN Cj4gKwkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMgcG9ydCAldSIsDQo+ICsJCQkg ZHBka19kZXYtPm5hbWUsIHBvcnQpOw0KPiArCWlmIChydGVfZWFsX3Byb2Nlc3NfdHlwZSgpID09 IFJURV9QUk9DX1NFQ09OREFSWSkgew0KPiArCQlldGhfZGV2ID0gcnRlX2V0aF9kZXZfYXR0YWNo X3NlY29uZGFyeShuYW1lKTsNCj4gKwkJaWYgKGV0aF9kZXYgPT0gTlVMTCkgew0KPiArCQkJRFJW X0xPRyhFUlIsICJjYW4gbm90IGF0dGFjaCBydGUgZXRoZGV2Iik7DQo+ICsJCQlydGVfZXJybm8g PSBFTk9NRU07DQo+ICsJCQllcnIgPSBydGVfZXJybm87DQo+ICsJCQlnb3RvIGVycm9yOw0KPiAg CQl9DQo+IC0JCURSVl9MT0coREVCVUcsICJ1c2luZyBwb3J0ICV1IiwgcG9ydCk7DQo+IC0JCS8q IENoZWNrIHBvcnQgc3RhdHVzLiAqLw0KPiAtCQllcnIgPSBtbHg1X2dsdWUtPnF1ZXJ5X3BvcnQo Y3R4LCBwb3J0LCAmcG9ydF9hdHRyKTsNCj4gKwkJZXRoX2Rldi0+ZGV2aWNlID0gZHBka19kZXY7 DQo+ICsJCWV0aF9kZXYtPmRldl9vcHMgPSAmbWx4NV9kZXZfc2VjX29wczsNCj4gKwkJZXJyID0g bWx4NV91YXJfaW5pdF9zZWNvbmRhcnkoZXRoX2Rldik7DQo+ICAJCWlmIChlcnIpIHsNCj4gLQkJ CURSVl9MT0coRVJSLCAicG9ydCBxdWVyeSBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJyKSk7DQo+ IC0JCQlnb3RvIHBvcnRfZXJyb3I7DQo+IC0JCX0NCj4gLQkJaWYgKHBvcnRfYXR0ci5saW5rX2xh eWVyICE9IElCVl9MSU5LX0xBWUVSX0VUSEVSTkVUKSB7DQo+IC0JCQlEUlZfTE9HKEVSUiwNCj4g LQkJCQkicG9ydCAlZCBpcyBub3QgY29uZmlndXJlZCBpbiBFdGhlcm5ldCBtb2RlIiwNCj4gLQkJ CQlwb3J0KTsNCj4gLQkJCWVyciA9IEVJTlZBTDsNCj4gLQkJCWdvdG8gcG9ydF9lcnJvcjsNCj4g LQkJfQ0KPiAtCQlpZiAocG9ydF9hdHRyLnN0YXRlICE9IElCVl9QT1JUX0FDVElWRSkNCj4gLQkJ CURSVl9MT0coREVCVUcsICJwb3J0ICVkIGlzIG5vdCBhY3RpdmU6IFwiJXNcIiAoJWQpIiwNCj4g LQkJCQlwb3J0LA0KPiAtCQkJCW1seDVfZ2x1ZS0+cG9ydF9zdGF0ZV9zdHIocG9ydF9hdHRyLnN0 YXRlKSwNCj4gLQkJCQlwb3J0X2F0dHIuc3RhdGUpOw0KPiAtCQkvKiBBbGxvY2F0ZSBwcm90ZWN0 aW9uIGRvbWFpbi4gKi8NCj4gLQkJcGQgPSBtbHg1X2dsdWUtPmFsbG9jX3BkKGN0eCk7DQo+IC0J CWlmIChwZCA9PSBOVUxMKSB7DQo+IC0JCQlEUlZfTE9HKEVSUiwgIlBEIGFsbG9jYXRpb24gZmFp bHVyZSIpOw0KPiAtCQkJZXJyID0gRU5PTUVNOw0KPiAtCQkJZ290byBwb3J0X2Vycm9yOw0KPiAr CQkJZXJyID0gcnRlX2Vycm5vOw0KPiArCQkJZ290byBlcnJvcjsNCj4gIAkJfQ0KPiAtCQkvKiBm cm9tIHJ0ZV9ldGhkZXYuYyAqLw0KPiAtCQlwcml2ID0gcnRlX3ptYWxsb2MoImV0aGRldiBwcml2 YXRlIHN0cnVjdHVyZSIsDQo+IC0JCQkJICAgc2l6ZW9mKCpwcml2KSwNCj4gLQkJCQkgICBSVEVf Q0FDSEVfTElORV9TSVpFKTsNCj4gLQkJaWYgKHByaXYgPT0gTlVMTCkgew0KPiAtCQkJRFJWX0xP RyhFUlIsICJwcml2IGFsbG9jYXRpb24gZmFpbHVyZSIpOw0KPiAtCQkJZXJyID0gRU5PTUVNOw0K PiAtCQkJZ290byBwb3J0X2Vycm9yOw0KPiArCQkvKiBSZWNlaXZlIGNvbW1hbmQgZmQgZnJvbSBw cmltYXJ5IHByb2Nlc3MgKi8NCj4gKwkJZXJyID0gbWx4NV9zb2NrZXRfY29ubmVjdChldGhfZGV2 KTsNCj4gKwkJaWYgKGVyciA8IDApIHsNCj4gKwkJCWVyciA9IHJ0ZV9lcnJubzsNCj4gKwkJCWdv dG8gZXJyb3I7DQo+ICAJCX0NCj4gLQkJcHJpdi0+Y3R4ID0gY3R4Ow0KPiAtCQlzdHJuY3B5KHBy aXYtPmliZGV2X3BhdGgsIHByaXYtPmN0eC0+ZGV2aWNlLT5pYmRldl9wYXRoLA0KPiAtCQkJc2l6 ZW9mKHByaXYtPmliZGV2X3BhdGgpKTsNCj4gLQkJcHJpdi0+ZGV2aWNlX2F0dHIgPSAqYXR0cjsN Cj4gLQkJcHJpdi0+cG9ydCA9IHBvcnQ7DQo+IC0JCXByaXYtPnBkID0gcGQ7DQo+IC0JCXByaXYt Pm10dSA9IEVUSEVSX01UVTsNCj4gLQkJZXJyID0gbWx4NV9hcmdzKCZjb25maWcsIGRwZGtfZGV2 LT5kZXZhcmdzKTsNCj4gKwkJLyogUmVtYXAgVUFSIGZvciBUeCBxdWV1ZXMuICovDQo+ICsJCWVy ciA9IG1seDVfdHhfdWFyX3JlbWFwKGV0aF9kZXYsIGVycik7DQo+ICAJCWlmIChlcnIpIHsNCj4g IAkJCWVyciA9IHJ0ZV9lcnJubzsNCj4gLQkJCURSVl9MT0coRVJSLCAiZmFpbGVkIHRvIHByb2Nl c3MgZGV2aWNlIGFyZ3VtZW50czogJXMiLA0KPiAtCQkJCXN0cmVycm9yKHJ0ZV9lcnJubykpOw0K PiAtCQkJZ290byBwb3J0X2Vycm9yOw0KPiArCQkJZ290byBlcnJvcjsNCj4gIAkJfQ0KPiAtCQlj b25maWcuaHdfY3N1bSA9ICEhKGF0dHItPmRldmljZV9jYXBfZmxhZ3NfZXggJg0KPiAtCQkJCSAg ICBJQlZfREVWSUNFX1JBV19JUF9DU1VNKTsNCj4gLQkJRFJWX0xPRyhERUJVRywgImNoZWNrc3Vt IG9mZmxvYWRpbmcgaXMgJXNzdXBwb3J0ZWQiLA0KPiAtCQkJKGNvbmZpZy5od19jc3VtID8gIiIg OiAibm90ICIpKTsNCj4gKwkJLyoNCj4gKwkJICogRXRoZGV2IHBvaW50ZXIgaXMgc3RpbGwgcmVx dWlyZWQgYXMgaW5wdXQgc2luY2UNCj4gKwkJICogdGhlIHByaW1hcnkgZGV2aWNlIGlzIG5vdCBh Y2Nlc3NpYmxlIGZyb20gdGhlDQo+ICsJCSAqIHNlY29uZGFyeSBwcm9jZXNzLg0KPiArCQkgKi8N Cj4gKwkJZXRoX2Rldi0+cnhfcGt0X2J1cnN0ID0gbWx4NV9zZWxlY3RfcnhfZnVuY3Rpb24oZXRo X2Rldik7DQo+ICsJCWV0aF9kZXYtPnR4X3BrdF9idXJzdCA9IG1seDVfc2VsZWN0X3R4X2Z1bmN0 aW9uKGV0aF9kZXYpOw0KPiArCQltbHg1X2dsdWUtPmNsb3NlX2RldmljZShjdHgpOw0KPiArCQly ZXR1cm4gZXRoX2RldjsNCj4gKwl9DQo+ICsJRFJWX0xPRyhERUJVRywgInVzaW5nIHBvcnQgJXUi LCBwb3J0KTsNCj4gKwkvKiBDaGVjayBwb3J0IHN0YXR1cy4gKi8NCj4gKwllcnIgPSBtbHg1X2ds dWUtPnF1ZXJ5X3BvcnQoY3R4LCBwb3J0LCAmcG9ydF9hdHRyKTsNCj4gKwlpZiAoZXJyKSB7DQo+ ICsJCURSVl9MT0coRVJSLCAicG9ydCBxdWVyeSBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJyKSk7 DQo+ICsJCWdvdG8gZXJyb3I7DQo+ICsJfQ0KPiArCWlmIChwb3J0X2F0dHIubGlua19sYXllciAh PSBJQlZfTElOS19MQVlFUl9FVEhFUk5FVCkgew0KPiArCQlEUlZfTE9HKEVSUiwgInBvcnQgJWQg aXMgbm90IGNvbmZpZ3VyZWQgaW4gRXRoZXJuZXQgbW9kZSIsDQo+ICsJCQlwb3J0KTsNCj4gKwkJ ZXJyID0gRUlOVkFMOw0KPiArCQlnb3RvIGVycm9yOw0KPiArCX0NCj4gKwlpZiAocG9ydF9hdHRy LnN0YXRlICE9IElCVl9QT1JUX0FDVElWRSkNCj4gKwkJRFJWX0xPRyhERUJVRywgInBvcnQgJWQg aXMgbm90IGFjdGl2ZTogXCIlc1wiICglZCkiLA0KPiArCQkJcG9ydCwgbWx4NV9nbHVlLT5wb3J0 X3N0YXRlX3N0cihwb3J0X2F0dHIuc3RhdGUpLA0KPiArCQkJcG9ydF9hdHRyLnN0YXRlKTsNCj4g KwkvKiBBbGxvY2F0ZSBwcm90ZWN0aW9uIGRvbWFpbi4gKi8NCj4gKwlwZCA9IG1seDVfZ2x1ZS0+ YWxsb2NfcGQoY3R4KTsNCj4gKwlpZiAocGQgPT0gTlVMTCkgew0KPiArCQlEUlZfTE9HKEVSUiwg IlBEIGFsbG9jYXRpb24gZmFpbHVyZSIpOw0KPiArCQllcnIgPSBFTk9NRU07DQo+ICsJCWdvdG8g ZXJyb3I7DQo+ICsJfQ0KPiArCXByaXYgPSBydGVfem1hbGxvYygiZXRoZGV2IHByaXZhdGUgc3Ry dWN0dXJlIiwNCj4gKwkJCSAgIHNpemVvZigqcHJpdiksDQo+ICsJCQkgICBSVEVfQ0FDSEVfTElO RV9TSVpFKTsNCj4gKwlpZiAocHJpdiA9PSBOVUxMKSB7DQo+ICsJCURSVl9MT0coRVJSLCAicHJp diBhbGxvY2F0aW9uIGZhaWx1cmUiKTsNCj4gKwkJZXJyID0gRU5PTUVNOw0KPiArCQlnb3RvIGVy cm9yOw0KPiArCX0NCj4gKwlwcml2LT5jdHggPSBjdHg7DQo+ICsJc3RybmNweShwcml2LT5pYmRl dl9wYXRoLCBwcml2LT5jdHgtPmRldmljZS0+aWJkZXZfcGF0aCwNCj4gKwkJc2l6ZW9mKHByaXYt PmliZGV2X3BhdGgpKTsNCj4gKwlwcml2LT5kZXZpY2VfYXR0ciA9ICphdHRyOw0KPiArCXByaXYt PnBvcnQgPSBwb3J0Ow0KPiArCXByaXYtPnBkID0gcGQ7DQo+ICsJcHJpdi0+bXR1ID0gRVRIRVJf TVRVOw0KPiArCWVyciA9IG1seDVfYXJncygmY29uZmlnLCBkcGRrX2Rldi0+ZGV2YXJncyk7DQo+ ICsJaWYgKGVycikgew0KPiArCQllcnIgPSBydGVfZXJybm87DQo+ICsJCURSVl9MT0coRVJSLCAi ZmFpbGVkIHRvIHByb2Nlc3MgZGV2aWNlIGFyZ3VtZW50czogJXMiLA0KPiArCQkJc3RyZXJyb3Io cnRlX2Vycm5vKSk7DQo+ICsJCWdvdG8gZXJyb3I7DQo+ICsJfQ0KPiArCWNvbmZpZy5od19jc3Vt ID0gISEoYXR0ci0+ZGV2aWNlX2NhcF9mbGFnc19leCAmIElCVl9ERVZJQ0VfUkFXX0lQX0NTVU0p Ow0KPiArCURSVl9MT0coREVCVUcsICJjaGVja3N1bSBvZmZsb2FkaW5nIGlzICVzc3VwcG9ydGVk IiwNCj4gKwkJKGNvbmZpZy5od19jc3VtID8gIiIgOiAibm90ICIpKTsNCj4gICNpZmRlZiBIQVZF X0lCVl9ERVZJQ0VfQ09VTlRFUlNfU0VUX1NVUFBPUlQNCj4gLQkJY29uZmlnLmZsb3dfY291bnRl cl9lbiA9ICEhYXR0ci0+bWF4X2NvdW50ZXJfc2V0czsNCj4gLQkJbWx4NV9nbHVlLT5kZXNjcmli ZV9jb3VudGVyX3NldChjdHgsIDAsICZjc19kZXNjKTsNCj4gLQkJRFJWX0xPRyhERUJVRywNCj4g LQkJCSJjb3VudGVyIHR5cGUgPSAlZCwgbnVtIG9mIGNzID0gJWxkLCBhdHRyaWJ1dGVzID0gJWQi LA0KPiAtCQkJY3NfZGVzYy5jb3VudGVyX3R5cGUsIGNzX2Rlc2MubnVtX29mX2NzLA0KPiAtCQkJ Y3NfZGVzYy5hdHRyaWJ1dGVzKTsNCj4gKwljb25maWcuZmxvd19jb3VudGVyX2VuID0gISFhdHRy LT5tYXhfY291bnRlcl9zZXRzOw0KPiArCW1seDVfZ2x1ZS0+ZGVzY3JpYmVfY291bnRlcl9zZXQo Y3R4LCAwLCAmY3NfZGVzYyk7DQo+ICsJRFJWX0xPRyhERUJVRywgImNvdW50ZXIgdHlwZSA9ICVk LCBudW0gb2YgY3MgPSAlbGQsIGF0dHJpYnV0ZXMgPSAlZCIsDQo+ICsJCWNzX2Rlc2MuY291bnRl cl90eXBlLCBjc19kZXNjLm51bV9vZl9jcywNCj4gKwkJY3NfZGVzYy5hdHRyaWJ1dGVzKTsNCj4g ICNlbmRpZg0KPiAtCQljb25maWcuaW5kX3RhYmxlX21heF9zaXplID0NCj4gLQkJCWF0dHItPnJz c19jYXBzLm1heF9yd3FfaW5kaXJlY3Rpb25fdGFibGVfc2l6ZTsNCj4gLQkJLyogUmVtb3ZlIHRo aXMgY2hlY2sgb25jZSBEUERLIHN1cHBvcnRzIGxhcmdlci92YXJpYWJsZQ0KPiAtCQkgKiBpbmRp cmVjdGlvbiB0YWJsZXMuICovDQo+IC0JCWlmIChjb25maWcuaW5kX3RhYmxlX21heF9zaXplID4N Cj4gLQkJCQkodW5zaWduZWQgaW50KUVUSF9SU1NfUkVUQV9TSVpFXzUxMikNCj4gLQkJCWNvbmZp Zy5pbmRfdGFibGVfbWF4X3NpemUgPSBFVEhfUlNTX1JFVEFfU0laRV81MTI7DQo+IC0JCURSVl9M T0coREVCVUcsICJtYXhpbXVtIFJ4IGluZGlyZWN0aW9uIHRhYmxlIHNpemUgaXMgJXUiLA0KPiAt CQkJY29uZmlnLmluZF90YWJsZV9tYXhfc2l6ZSk7DQo+IC0JCWNvbmZpZy5od192bGFuX3N0cmlw ID0gISEoYXR0ci0+cmF3X3BhY2tldF9jYXBzICYNCj4gLQkJCQkJIElCVl9SQVdfUEFDS0VUX0NB UF9DVkxBTl9TVFJJUFBJTkcpOw0KPiAtCQlEUlZfTE9HKERFQlVHLCAiVkxBTiBzdHJpcHBpbmcg aXMgJXNzdXBwb3J0ZWQiLA0KPiAtCQkJKGNvbmZpZy5od192bGFuX3N0cmlwID8gIiIgOiAibm90 ICIpKTsNCj4gLQ0KPiAtCQljb25maWcuaHdfZmNzX3N0cmlwID0gISEoYXR0ci0+cmF3X3BhY2tl dF9jYXBzICYNCj4gLQkJCQkJIElCVl9SQVdfUEFDS0VUX0NBUF9TQ0FUVEVSX0ZDUyk7DQo+IC0J CURSVl9MT0coREVCVUcsICJGQ1Mgc3RyaXBwaW5nIGNvbmZpZ3VyYXRpb24gaXMgJXNzdXBwb3J0 ZWQiLA0KPiAtCQkJKGNvbmZpZy5od19mY3Nfc3RyaXAgPyAiIiA6ICJub3QgIikpOw0KPiAtDQo+ ICsJY29uZmlnLmluZF90YWJsZV9tYXhfc2l6ZSA9DQo+ICsJCWF0dHItPnJzc19jYXBzLm1heF9y d3FfaW5kaXJlY3Rpb25fdGFibGVfc2l6ZTsNCj4gKwkvKg0KPiArCSAqIFJlbW92ZSB0aGlzIGNo ZWNrIG9uY2UgRFBESyBzdXBwb3J0cyBsYXJnZXIvdmFyaWFibGUNCj4gKwkgKiBpbmRpcmVjdGlv biB0YWJsZXMuDQo+ICsJICovDQo+ICsJaWYgKGNvbmZpZy5pbmRfdGFibGVfbWF4X3NpemUgPiAo dW5zaWduZWQgaW50KUVUSF9SU1NfUkVUQV9TSVpFXzUxMikNCj4gKwkJY29uZmlnLmluZF90YWJs ZV9tYXhfc2l6ZSA9IEVUSF9SU1NfUkVUQV9TSVpFXzUxMjsNCj4gKwlEUlZfTE9HKERFQlVHLCAi bWF4aW11bSBSeCBpbmRpcmVjdGlvbiB0YWJsZSBzaXplIGlzICV1IiwNCj4gKwkJY29uZmlnLmlu ZF90YWJsZV9tYXhfc2l6ZSk7DQo+ICsJY29uZmlnLmh3X3ZsYW5fc3RyaXAgPSAhIShhdHRyLT5y YXdfcGFja2V0X2NhcHMgJg0KPiArCQkJCSAgSUJWX1JBV19QQUNLRVRfQ0FQX0NWTEFOX1NUUklQ UElORyk7DQo+ICsJRFJWX0xPRyhERUJVRywgIlZMQU4gc3RyaXBwaW5nIGlzICVzc3VwcG9ydGVk IiwNCj4gKwkJKGNvbmZpZy5od192bGFuX3N0cmlwID8gIiIgOiAibm90ICIpKTsNCj4gKwljb25m aWcuaHdfZmNzX3N0cmlwID0gISEoYXR0ci0+cmF3X3BhY2tldF9jYXBzICYNCj4gKwkJCQkgSUJW X1JBV19QQUNLRVRfQ0FQX1NDQVRURVJfRkNTKTsNCj4gKwlEUlZfTE9HKERFQlVHLCAiRkNTIHN0 cmlwcGluZyBjb25maWd1cmF0aW9uIGlzICVzc3VwcG9ydGVkIiwNCj4gKwkJKGNvbmZpZy5od19m Y3Nfc3RyaXAgPyAiIiA6ICJub3QgIikpOw0KPiAgI2lmZGVmIEhBVkVfSUJWX1dRX0ZMQUdfUlhf RU5EX1BBRERJTkcNCj4gLQkJY29uZmlnLmh3X3BhZGRpbmcgPSAhIWF0dHItPnJ4X3BhZF9lbmRf YWRkcl9hbGlnbjsNCj4gKwljb25maWcuaHdfcGFkZGluZyA9ICEhYXR0ci0+cnhfcGFkX2VuZF9h ZGRyX2FsaWduOw0KPiAgI2VuZGlmDQo+IC0JCURSVl9MT0coREVCVUcsDQo+IC0JCQkiaGFyZHdh cmUgUnggZW5kIGFsaWdubWVudCBwYWRkaW5nIGlzICVzc3VwcG9ydGVkIiwNCj4gLQkJCShjb25m aWcuaHdfcGFkZGluZyA/ICIiIDogIm5vdCAiKSk7DQo+IC0JCWNvbmZpZy52ZiA9IHZmOw0KPiAt CQljb25maWcudHNvID0gKGF0dHItPnRzb19jYXBzLm1heF90c28gPiAwICYmDQo+IC0JCQkgICAg ICAoYXR0ci0+dHNvX2NhcHMuc3VwcG9ydGVkX3FwdHMgJg0KPiAtCQkJICAgICAgKDEgPDwgSUJW X1FQVF9SQVdfUEFDS0VUKSkpOw0KPiAtCQlpZiAoY29uZmlnLnRzbykNCj4gLQkJCWNvbmZpZy50 c29fbWF4X3BheWxvYWRfc3ogPSBhdHRyLT50c29fY2Fwcy5tYXhfdHNvOw0KPiAtCQlpZiAoY29u ZmlnLm1wcyAmJiAhbXBzKSB7DQo+IC0JCQlEUlZfTE9HKEVSUiwNCj4gLQkJCQkibXVsdGktcGFj a2V0IHNlbmQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGRldmljZSINCj4gLQkJCQkiICgiIE1MWDVf VFhRX01QV19FTiAiKSIpOw0KPiAtCQkJZXJyID0gRU5PVFNVUDsNCj4gLQkJCWdvdG8gcG9ydF9l cnJvcjsNCj4gLQkJfQ0KPiAtCQlEUlZfTE9HKElORk8sICIlcyBNUFMgaXMgJXMiLA0KPiAtCQkJ Y29uZmlnLm1wcyA9PSBNTFg1X01QV19FTkhBTkNFRCA/ICJlbmhhbmNlZCAiIDogIiIsDQo+IC0J CQljb25maWcubXBzICE9IE1MWDVfTVBXX0RJU0FCTEVEID8gImVuYWJsZWQiIDoNCj4gLQkJCSJk aXNhYmxlZCIpOw0KPiAtCQlpZiAoY29uZmlnLmNxZV9jb21wICYmICFjcWVfY29tcCkgew0KPiAt CQkJRFJWX0xPRyhXQVJOSU5HLCAiUnggQ1FFIGNvbXByZXNzaW9uIGlzbid0IHN1cHBvcnRlZCIp Ow0KPiAtCQkJY29uZmlnLmNxZV9jb21wID0gMDsNCj4gLQkJfQ0KPiAtCQljb25maWcubXBycS5l bmFibGVkID0gY29uZmlnLm1wcnEuZW5hYmxlZCAmJiBtcHJxOw0KPiAtCQlpZiAoY29uZmlnLm1w cnEuZW5hYmxlZCkgew0KPiAtCQkJaWYgKGNvbmZpZy5tcHJxLnN0cmlkZV9udW1fbiA+IG1wcnFf bWF4X3N0cmlkZV9udW1fbiB8fA0KPiAtCQkJICAgIGNvbmZpZy5tcHJxLnN0cmlkZV9udW1fbiA8 IG1wcnFfbWluX3N0cmlkZV9udW1fbikgew0KPiAtCQkJCWNvbmZpZy5tcHJxLnN0cmlkZV9udW1f biA9DQo+IC0JCQkJCVJURV9NQVgoTUxYNV9NUFJRX1NUUklERV9OVU1fTiwNCj4gLQkJCQkJCW1w cnFfbWluX3N0cmlkZV9udW1fbik7DQo+IC0JCQkJRFJWX0xPRyhXQVJOSU5HLA0KPiAtCQkJCQki dGhlIG51bWJlciBvZiBzdHJpZGVzIg0KPiAtCQkJCQkiIGZvciBNdWx0aS1QYWNrZXQgUlEgaXMg b3V0IG9mIHJhbmdlLCINCj4gLQkJCQkJIiBzZXR0aW5nIGRlZmF1bHQgdmFsdWUgKCV1KSIsDQo+ IC0JCQkJCTEgPDwgY29uZmlnLm1wcnEuc3RyaWRlX251bV9uKTsNCj4gLQkJCX0NCj4gLQkJCWNv bmZpZy5tcHJxLm1pbl9zdHJpZGVfc2l6ZV9uID0gbXBycV9taW5fc3RyaWRlX3NpemVfbjsNCj4g LQkJCWNvbmZpZy5tcHJxLm1heF9zdHJpZGVfc2l6ZV9uID0gbXBycV9tYXhfc3RyaWRlX3NpemVf bjsNCj4gLQkJfQ0KPiAtCQlldGhfZGV2ID0gcnRlX2V0aF9kZXZfYWxsb2NhdGUobmFtZSk7DQo+ IC0JCWlmIChldGhfZGV2ID09IE5VTEwpIHsNCj4gLQkJCURSVl9MT0coRVJSLCAiY2FuIG5vdCBh bGxvY2F0ZSBydGUgZXRoZGV2Iik7DQo+IC0JCQllcnIgPSBFTk9NRU07DQo+IC0JCQlnb3RvIHBv cnRfZXJyb3I7DQo+IC0JCX0NCj4gLQkJZXRoX2Rldi0+ZGF0YS0+ZGV2X3ByaXZhdGUgPSBwcml2 Ow0KPiAtCQlwcml2LT5kZXZfZGF0YSA9IGV0aF9kZXYtPmRhdGE7DQo+IC0JCWV0aF9kZXYtPmRh dGEtPm1hY19hZGRycyA9IHByaXYtPm1hYzsNCj4gLQkJZXRoX2Rldi0+ZGV2aWNlID0gZHBka19k ZXY7DQo+IC0JCWV0aF9kZXYtPmRldmljZS0+ZHJpdmVyID0gJm1seDVfZHJpdmVyLmRyaXZlcjsN Cj4gLQkJZXJyID0gbWx4NV91YXJfaW5pdF9wcmltYXJ5KGV0aF9kZXYpOw0KPiAtCQlpZiAoZXJy KSB7DQo+IC0JCQllcnIgPSBydGVfZXJybm87DQo+IC0JCQlnb3RvIHBvcnRfZXJyb3I7DQo+IC0J CX0NCj4gLQkJLyogQ29uZmlndXJlIHRoZSBmaXJzdCBNQUMgYWRkcmVzcyBieSBkZWZhdWx0LiAq Lw0KPiAtCQlpZiAobWx4NV9nZXRfbWFjKGV0aF9kZXYsICZtYWMuYWRkcl9ieXRlcykpIHsNCj4g LQkJCURSVl9MT0coRVJSLA0KPiAtCQkJCSJwb3J0ICV1IGNhbm5vdCBnZXQgTUFDIGFkZHJlc3Ms IGlzIG1seDVfZW4iDQo+IC0JCQkJIiBsb2FkZWQ/IChlcnJubzogJXMpIiwNCj4gLQkJCQlldGhf ZGV2LT5kYXRhLT5wb3J0X2lkLCBzdHJlcnJvcihydGVfZXJybm8pKTsNCj4gLQkJCWVyciA9IEVO T0RFVjsNCj4gLQkJCWdvdG8gcG9ydF9lcnJvcjsNCj4gKwlEUlZfTE9HKERFQlVHLCAiaGFyZHdh cmUgUnggZW5kIGFsaWdubWVudCBwYWRkaW5nIGlzICVzc3VwcG9ydGVkIiwNCj4gKwkJKGNvbmZp Zy5od19wYWRkaW5nID8gIiIgOiAibm90ICIpKTsNCj4gKwljb25maWcudHNvID0gKGF0dHItPnRz b19jYXBzLm1heF90c28gPiAwICYmDQo+ICsJCSAgICAgIChhdHRyLT50c29fY2Fwcy5zdXBwb3J0 ZWRfcXB0cyAmDQo+ICsJCSAgICAgICAoMSA8PCBJQlZfUVBUX1JBV19QQUNLRVQpKSk7DQo+ICsJ aWYgKGNvbmZpZy50c28pDQo+ICsJCWNvbmZpZy50c29fbWF4X3BheWxvYWRfc3ogPSBhdHRyLT50 c29fY2Fwcy5tYXhfdHNvOw0KPiArCWlmIChjb25maWcubXBzICYmICFtcHMpIHsNCj4gKwkJRFJW X0xPRyhFUlIsDQo+ICsJCQkibXVsdGktcGFja2V0IHNlbmQgbm90IHN1cHBvcnRlZCBvbiB0aGlz IGRldmljZSINCj4gKwkJCSIgKCIgTUxYNV9UWFFfTVBXX0VOICIpIik7DQo+ICsJCWVyciA9IEVO T1RTVVA7DQo+ICsJCWdvdG8gZXJyb3I7DQo+ICsJfQ0KPiArCURSVl9MT0coSU5GTywgIiVzTVBT IGlzICVzIiwNCj4gKwkJY29uZmlnLm1wcyA9PSBNTFg1X01QV19FTkhBTkNFRCA/ICJlbmhhbmNl ZCAiIDogIiIsDQo+ICsJCWNvbmZpZy5tcHMgIT0gTUxYNV9NUFdfRElTQUJMRUQgPyAiZW5hYmxl ZCIgOiAiZGlzYWJsZWQiKTsNCj4gKwlpZiAoY29uZmlnLmNxZV9jb21wICYmICFjcWVfY29tcCkg ew0KPiArCQlEUlZfTE9HKFdBUk5JTkcsICJSeCBDUUUgY29tcHJlc3Npb24gaXNuJ3Qgc3VwcG9y dGVkIik7DQo+ICsJCWNvbmZpZy5jcWVfY29tcCA9IDA7DQo+ICsJfQ0KPiArCWNvbmZpZy5tcHJx LmVuYWJsZWQgPSBjb25maWcubXBycS5lbmFibGVkICYmIG1wcnE7DQo+ICsJaWYgKGNvbmZpZy5t cHJxLmVuYWJsZWQpIHsNCj4gKwkJaWYgKGNvbmZpZy5tcHJxLnN0cmlkZV9udW1fbiA+IG1wcnFf bWF4X3N0cmlkZV9udW1fbiB8fA0KPiArCQkgICAgY29uZmlnLm1wcnEuc3RyaWRlX251bV9uIDwg bXBycV9taW5fc3RyaWRlX251bV9uKSB7DQo+ICsJCQljb25maWcubXBycS5zdHJpZGVfbnVtX24g PQ0KPiArCQkJCVJURV9NQVgoTUxYNV9NUFJRX1NUUklERV9OVU1fTiwNCj4gKwkJCQkJbXBycV9t aW5fc3RyaWRlX251bV9uKTsNCj4gKwkJCURSVl9MT0coV0FSTklORywNCj4gKwkJCQkidGhlIG51 bWJlciBvZiBzdHJpZGVzIg0KPiArCQkJCSIgZm9yIE11bHRpLVBhY2tldCBSUSBpcyBvdXQgb2Yg cmFuZ2UsIg0KPiArCQkJCSIgc2V0dGluZyBkZWZhdWx0IHZhbHVlICgldSkiLA0KPiArCQkJCTEg PDwgY29uZmlnLm1wcnEuc3RyaWRlX251bV9uKTsNCj4gIAkJfQ0KPiAtCQlEUlZfTE9HKElORk8s DQo+IC0JCQkicG9ydCAldSBNQUMgYWRkcmVzcyBpcyAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6 JTAyeCIsDQo+IC0JCQlldGhfZGV2LT5kYXRhLT5wb3J0X2lkLA0KPiAtCQkJbWFjLmFkZHJfYnl0 ZXNbMF0sIG1hYy5hZGRyX2J5dGVzWzFdLA0KPiAtCQkJbWFjLmFkZHJfYnl0ZXNbMl0sIG1hYy5h ZGRyX2J5dGVzWzNdLA0KPiAtCQkJbWFjLmFkZHJfYnl0ZXNbNF0sIG1hYy5hZGRyX2J5dGVzWzVd KTsNCj4gKwkJY29uZmlnLm1wcnEubWluX3N0cmlkZV9zaXplX24gPSBtcHJxX21pbl9zdHJpZGVf c2l6ZV9uOw0KPiArCQljb25maWcubXBycS5tYXhfc3RyaWRlX3NpemVfbiA9IG1wcnFfbWF4X3N0 cmlkZV9zaXplX247DQo+ICsJfQ0KPiArCWV0aF9kZXYgPSBydGVfZXRoX2Rldl9hbGxvY2F0ZShu YW1lKTsNCj4gKwlpZiAoZXRoX2RldiA9PSBOVUxMKSB7DQo+ICsJCURSVl9MT0coRVJSLCAiY2Fu IG5vdCBhbGxvY2F0ZSBydGUgZXRoZGV2Iik7DQo+ICsJCWVyciA9IEVOT01FTTsNCj4gKwkJZ290 byBlcnJvcjsNCj4gKwl9DQo+ICsJZXRoX2Rldi0+ZGF0YS0+ZGV2X3ByaXZhdGUgPSBwcml2Ow0K PiArCXByaXYtPmRldl9kYXRhID0gZXRoX2Rldi0+ZGF0YTsNCj4gKwlldGhfZGV2LT5kYXRhLT5t YWNfYWRkcnMgPSBwcml2LT5tYWM7DQo+ICsJZXRoX2Rldi0+ZGV2aWNlID0gZHBka19kZXY7DQo+ ICsJZXRoX2Rldi0+ZGV2aWNlLT5kcml2ZXIgPSAmbWx4NV9kcml2ZXIuZHJpdmVyOw0KPiArCWVy ciA9IG1seDVfdWFyX2luaXRfcHJpbWFyeShldGhfZGV2KTsNCj4gKwlpZiAoZXJyKSB7DQo+ICsJ CWVyciA9IHJ0ZV9lcnJubzsNCj4gKwkJZ290byBlcnJvcjsNCj4gKwl9DQo+ICsJLyogQ29uZmln dXJlIHRoZSBmaXJzdCBNQUMgYWRkcmVzcyBieSBkZWZhdWx0LiAqLw0KPiArCWlmIChtbHg1X2dl dF9tYWMoZXRoX2RldiwgJm1hYy5hZGRyX2J5dGVzKSkgew0KPiArCQlEUlZfTE9HKEVSUiwNCj4g KwkJCSJwb3J0ICV1IGNhbm5vdCBnZXQgTUFDIGFkZHJlc3MsIGlzIG1seDVfZW4iDQo+ICsJCQki IGxvYWRlZD8gKGVycm5vOiAlcykiLA0KPiArCQkJZXRoX2Rldi0+ZGF0YS0+cG9ydF9pZCwgc3Ry ZXJyb3IocnRlX2Vycm5vKSk7DQo+ICsJCWVyciA9IEVOT0RFVjsNCj4gKwkJZ290byBlcnJvcjsN Cj4gKwl9DQo+ICsJRFJWX0xPRyhJTkZPLA0KPiArCQkicG9ydCAldSBNQUMgYWRkcmVzcyBpcyAl MDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCIsDQo+ICsJCWV0aF9kZXYtPmRhdGEtPnBvcnRf aWQsDQo+ICsJCW1hYy5hZGRyX2J5dGVzWzBdLCBtYWMuYWRkcl9ieXRlc1sxXSwNCj4gKwkJbWFj LmFkZHJfYnl0ZXNbMl0sIG1hYy5hZGRyX2J5dGVzWzNdLA0KPiArCQltYWMuYWRkcl9ieXRlc1s0 XSwgbWFjLmFkZHJfYnl0ZXNbNV0pOw0KPiAgI2lmbmRlZiBOREVCVUcNCj4gLQkJew0KPiAtCQkJ Y2hhciBpZm5hbWVbSUZfTkFNRVNJWkVdOw0KPiAtDQo+IC0JCQlpZiAobWx4NV9nZXRfaWZuYW1l KGV0aF9kZXYsICZpZm5hbWUpID09IDApDQo+IC0JCQkJRFJWX0xPRyhERUJVRywgInBvcnQgJXUg aWZuYW1lIGlzIFwiJXNcIiIsDQo+IC0JCQkJCWV0aF9kZXYtPmRhdGEtPnBvcnRfaWQsIGlmbmFt ZSk7DQo+IC0JCQllbHNlDQo+IC0JCQkJRFJWX0xPRyhERUJVRywgInBvcnQgJXUgaWZuYW1lIGlz IHVua25vd24iLA0KPiAtCQkJCQlldGhfZGV2LT5kYXRhLT5wb3J0X2lkKTsNCj4gLQkJfQ0KPiAr CXsNCj4gKwkJY2hhciBpZm5hbWVbSUZfTkFNRVNJWkVdOw0KPiArDQo+ICsJCWlmIChtbHg1X2dl dF9pZm5hbWUoZXRoX2RldiwgJmlmbmFtZSkgPT0gMCkNCj4gKwkJCURSVl9MT0coREVCVUcsICJw b3J0ICV1IGlmbmFtZSBpcyBcIiVzXCIiLA0KPiArCQkJCWV0aF9kZXYtPmRhdGEtPnBvcnRfaWQs IGlmbmFtZSk7DQo+ICsJCWVsc2UNCj4gKwkJCURSVl9MT0coREVCVUcsICJwb3J0ICV1IGlmbmFt ZSBpcyB1bmtub3duIiwNCj4gKwkJCQlldGhfZGV2LT5kYXRhLT5wb3J0X2lkKTsNCj4gKwl9DQo+ ICAjZW5kaWYNCj4gLQkJLyogR2V0IGFjdHVhbCBNVFUgaWYgcG9zc2libGUuICovDQo+IC0JCWVy ciA9IG1seDVfZ2V0X210dShldGhfZGV2LCAmcHJpdi0+bXR1KTsNCj4gLQkJaWYgKGVycikgew0K PiAtCQkJZXJyID0gcnRlX2Vycm5vOw0KPiAtCQkJZ290byBwb3J0X2Vycm9yOw0KPiAtCQl9DQo+ IC0JCURSVl9MT0coREVCVUcsICJwb3J0ICV1IE1UVSBpcyAldSIsIGV0aF9kZXYtPmRhdGEtPnBv cnRfaWQsDQo+IC0JCQlwcml2LT5tdHUpOw0KPiAtCQkvKg0KPiAtCQkgKiBJbml0aWFsaXplIGJ1 cnN0IGZ1bmN0aW9ucyB0byBwcmV2ZW50IGNyYXNoZXMgYmVmb3JlIGxpbmstdXAuDQo+IC0JCSAq Lw0KPiAtCQlldGhfZGV2LT5yeF9wa3RfYnVyc3QgPSByZW1vdmVkX3J4X2J1cnN0Ow0KPiAtCQll dGhfZGV2LT50eF9wa3RfYnVyc3QgPSByZW1vdmVkX3R4X2J1cnN0Ow0KPiAtCQlldGhfZGV2LT5k ZXZfb3BzID0gJm1seDVfZGV2X29wczsNCj4gLQkJLyogUmVnaXN0ZXIgTUFDIGFkZHJlc3MuICov DQo+IC0JCWNsYWltX3plcm8obWx4NV9tYWNfYWRkcl9hZGQoZXRoX2RldiwgJm1hYywgMCwgMCkp Ow0KPiAtCQlwcml2LT5ubF9zb2NrZXQgPSAtMTsNCj4gLQkJcHJpdi0+bmxfc24gPSAwOw0KPiAt CQlpZiAodmYgJiYgY29uZmlnLnZmX25sX2VuKSB7DQo+IC0JCQlwcml2LT5ubF9zb2NrZXQgPSBt bHg1X25sX2luaXQoUlRNR1JQX0xJTkspOw0KPiAtCQkJaWYgKHByaXYtPm5sX3NvY2tldCA8IDAp DQo+IC0JCQkJcHJpdi0+bmxfc29ja2V0ID0gLTE7DQo+IC0JCQltbHg1X25sX21hY19hZGRyX3N5 bmMoZXRoX2Rldik7DQo+IC0JCX0NCj4gLQkJVEFJTFFfSU5JVCgmcHJpdi0+Zmxvd3MpOw0KPiAt CQlUQUlMUV9JTklUKCZwcml2LT5jdHJsX2Zsb3dzKTsNCj4gLQkJLyogSGludCBsaWJtbHg1IHRv IHVzZSBQTUQgYWxsb2NhdG9yIGZvciBkYXRhIHBsYW5lIHJlc291cmNlcyAqLw0KPiAtCQlzdHJ1 Y3QgbWx4NWR2X2N0eF9hbGxvY2F0b3JzIGFsY3RyID0gew0KPiAtCQkJLmFsbG9jID0gJm1seDVf YWxsb2NfdmVyYnNfYnVmLA0KPiAtCQkJLmZyZWUgPSAmbWx4NV9mcmVlX3ZlcmJzX2J1ZiwNCj4g LQkJCS5kYXRhID0gcHJpdiwNCj4gLQkJfTsNCj4gLQkJbWx4NV9nbHVlLT5kdl9zZXRfY29udGV4 dF9hdHRyKGN0eCwNCj4gLQkJCQkJICAgICAgIE1MWDVEVl9DVFhfQVRUUl9CVUZfQUxMT0NBVE9S UywNCj4gLQkJCQkJICAgICAgICh2b2lkICopKCh1aW50cHRyX3QpJmFsY3RyKSk7DQo+IC0JCS8q IEJyaW5nIEV0aGVybmV0IGRldmljZSB1cC4gKi8NCj4gLQkJRFJWX0xPRyhERUJVRywgInBvcnQg JXUgZm9yY2luZyBFdGhlcm5ldCBpbnRlcmZhY2UgdXAiLA0KPiAtCQkJZXRoX2Rldi0+ZGF0YS0+ cG9ydF9pZCk7DQo+IC0JCW1seDVfc2V0X2xpbmtfdXAoZXRoX2Rldik7DQo+IC0JCS8qDQo+IC0J CSAqIEV2ZW4gdGhvdWdoIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBpcyBub3QgaW5zdGFsbGVkIHll dCwNCj4gLQkJICogaW50ZXJydXB0cyB3aWxsIHN0aWxsIHRyaWdnZXIgb24gdGhlIGFzeW5fZmQg ZnJvbQ0KPiAtCQkgKiBWZXJicyBjb250ZXh0IHJldHVybmVkIGJ5IGlidl9vcGVuX2RldmljZSgp Lg0KPiAtCQkgKi8NCj4gLQkJbWx4NV9saW5rX3VwZGF0ZShldGhfZGV2LCAwKTsNCj4gLQkJLyog U3RvcmUgZGV2aWNlIGNvbmZpZ3VyYXRpb24gb24gcHJpdmF0ZSBzdHJ1Y3R1cmUuICovDQo+IC0J CXByaXYtPmNvbmZpZyA9IGNvbmZpZzsNCj4gLQkJLyogQ3JlYXRlIGRyb3AgcXVldWUuICovDQo+ IC0JCWVyciA9IG1seDVfZmxvd19jcmVhdGVfZHJvcF9xdWV1ZShldGhfZGV2KTsNCj4gLQkJaWYg KGVycikgew0KPiAtCQkJRFJWX0xPRyhFUlIsICJwb3J0ICV1IGRyb3AgcXVldWUgYWxsb2NhdGlv biBmYWlsZWQ6ICVzIiwNCj4gLQkJCQlldGhfZGV2LT5kYXRhLT5wb3J0X2lkLCBzdHJlcnJvcihy dGVfZXJybm8pKTsNCj4gLQkJCWVyciA9IHJ0ZV9lcnJubzsNCj4gLQkJCWdvdG8gcG9ydF9lcnJv cjsNCj4gLQkJfQ0KPiAtCQkvKiBTdXBwb3J0ZWQgVmVyYnMgZmxvdyBwcmlvcml0eSBudW1iZXIg ZGV0ZWN0aW9uLiAqLw0KPiAtCQlpZiAodmVyYl9wcmlvcml0aWVzID09IDApDQo+IC0JCQl2ZXJi X3ByaW9yaXRpZXMgPSBtbHg1X2dldF9tYXhfdmVyYnNfcHJpbyhldGhfZGV2KTsNCj4gLQkJaWYg KHZlcmJfcHJpb3JpdGllcyA8IE1MWDVfVkVSQlNfRkxPV19QUklPXzgpIHsNCj4gLQkJCURSVl9M T0coRVJSLCAicG9ydCAldSB3cm9uZyBWZXJicyBmbG93IHByaW9yaXRpZXM6ICV1IiwNCj4gLQkJ CQlldGhfZGV2LT5kYXRhLT5wb3J0X2lkLCB2ZXJiX3ByaW9yaXRpZXMpOw0KPiAtCQkJZXJyID0g RU5PVFNVUDsNCj4gLQkJCWdvdG8gcG9ydF9lcnJvcjsNCj4gLQkJfQ0KPiAtCQlwcml2LT5jb25m aWcubWF4X3ZlcmJzX3ByaW8gPSB2ZXJiX3ByaW9yaXRpZXM7DQo+IC0JCS8qIEFkZCBkZXZpY2Ug dG8gbWVtb3J5IGNhbGxiYWNrIGxpc3QuICovDQo+IC0JCXJ0ZV9yd2xvY2tfd3JpdGVfbG9jaygm bWx4NV9zaGFyZWRfZGF0YS0+bWVtX2V2ZW50X3J3bG9jayk7DQo+IC0JCUxJU1RfSU5TRVJUX0hF QUQoJm1seDVfc2hhcmVkX2RhdGEtPm1lbV9ldmVudF9jYl9saXN0LA0KPiAtCQkJCSBwcml2LCBt ZW1fZXZlbnRfY2IpOw0KPiAtCQlydGVfcndsb2NrX3dyaXRlX3VubG9jaygmbWx4NV9zaGFyZWRf ZGF0YS0+bWVtX2V2ZW50X3J3bG9jayk7DQo+IC0JCXJ0ZV9ldGhfZGV2X3Byb2JpbmdfZmluaXNo KGV0aF9kZXYpOw0KPiAtCQlyZXR1cm4gZXRoX2RldjsNCj4gLXBvcnRfZXJyb3I6DQo+IC0JCWlm IChwcml2KQ0KPiAtCQkJcnRlX2ZyZWUocHJpdik7DQo+IC0JCWlmIChwZCkNCj4gLQkJCWNsYWlt X3plcm8obWx4NV9nbHVlLT5kZWFsbG9jX3BkKHBkKSk7DQo+IC0JCWlmIChldGhfZGV2ICYmIHJ0 ZV9lYWxfcHJvY2Vzc190eXBlKCkgPT0gUlRFX1BST0NfUFJJTUFSWSkNCj4gLQkJCXJ0ZV9ldGhf ZGV2X3JlbGVhc2VfcG9ydChldGhfZGV2KTsNCj4gKwkvKiBHZXQgYWN0dWFsIE1UVSBpZiBwb3Nz aWJsZS4gKi8NCj4gKwllcnIgPSBtbHg1X2dldF9tdHUoZXRoX2RldiwgJnByaXYtPm10dSk7DQo+ ICsJaWYgKGVycikgew0KPiArCQllcnIgPSBydGVfZXJybm87DQo+ICsJCWdvdG8gZXJyb3I7DQo+ ICsJfQ0KPiArCURSVl9MT0coREVCVUcsICJwb3J0ICV1IE1UVSBpcyAldSIsIGV0aF9kZXYtPmRh dGEtPnBvcnRfaWQsDQo+ICsJCXByaXYtPm10dSk7DQo+ICsJLyogSW5pdGlhbGl6ZSBidXJzdCBm dW5jdGlvbnMgdG8gcHJldmVudCBjcmFzaGVzIGJlZm9yZSBsaW5rLXVwLiAqLw0KPiArCWV0aF9k ZXYtPnJ4X3BrdF9idXJzdCA9IHJlbW92ZWRfcnhfYnVyc3Q7DQo+ICsJZXRoX2Rldi0+dHhfcGt0 X2J1cnN0ID0gcmVtb3ZlZF90eF9idXJzdDsNCj4gKwlldGhfZGV2LT5kZXZfb3BzID0gJm1seDVf ZGV2X29wczsNCj4gKwkvKiBSZWdpc3RlciBNQUMgYWRkcmVzcy4gKi8NCj4gKwljbGFpbV96ZXJv KG1seDVfbWFjX2FkZHJfYWRkKGV0aF9kZXYsICZtYWMsIDAsIDApKTsNCj4gKwlwcml2LT5ubF9z b2NrZXQgPSAtMTsNCj4gKwlwcml2LT5ubF9zbiA9IDA7DQo+ICsJaWYgKHZmICYmIGNvbmZpZy52 Zl9ubF9lbikgew0KPiArCQlwcml2LT5ubF9zb2NrZXQgPSBtbHg1X25sX2luaXQoUlRNR1JQX0xJ TkspOw0KPiArCQlpZiAocHJpdi0+bmxfc29ja2V0IDwgMCkNCj4gKwkJCXByaXYtPm5sX3NvY2tl dCA9IC0xOw0KPiArCQltbHg1X25sX21hY19hZGRyX3N5bmMoZXRoX2Rldik7DQo+ICsJfQ0KPiAr CVRBSUxRX0lOSVQoJnByaXYtPmZsb3dzKTsNCj4gKwlUQUlMUV9JTklUKCZwcml2LT5jdHJsX2Zs b3dzKTsNCj4gKwkvKiBIaW50IGxpYm1seDUgdG8gdXNlIFBNRCBhbGxvY2F0b3IgZm9yIGRhdGEg cGxhbmUgcmVzb3VyY2VzICovDQo+ICsJc3RydWN0IG1seDVkdl9jdHhfYWxsb2NhdG9ycyBhbGN0 ciA9IHsNCj4gKwkJLmFsbG9jID0gJm1seDVfYWxsb2NfdmVyYnNfYnVmLA0KPiArCQkuZnJlZSA9 ICZtbHg1X2ZyZWVfdmVyYnNfYnVmLA0KPiArCQkuZGF0YSA9IHByaXYsDQo+ICsJfTsNCj4gKwlt bHg1X2dsdWUtPmR2X3NldF9jb250ZXh0X2F0dHIoY3R4LCBNTFg1RFZfQ1RYX0FUVFJfQlVGX0FM TE9DQVRPUlMsDQo+ICsJCQkJICAgICAgICh2b2lkICopKCh1aW50cHRyX3QpJmFsY3RyKSk7DQo+ ICsJLyogQnJpbmcgRXRoZXJuZXQgZGV2aWNlIHVwLiAqLw0KPiArCURSVl9MT0coREVCVUcsICJw b3J0ICV1IGZvcmNpbmcgRXRoZXJuZXQgaW50ZXJmYWNlIHVwIiwNCj4gKwkJZXRoX2Rldi0+ZGF0 YS0+cG9ydF9pZCk7DQo+ICsJbWx4NV9zZXRfbGlua191cChldGhfZGV2KTsNCj4gKwkvKg0KPiAr CSAqIEV2ZW4gdGhvdWdoIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBpcyBub3QgaW5zdGFsbGVkIHll dCwNCj4gKwkgKiBpbnRlcnJ1cHRzIHdpbGwgc3RpbGwgdHJpZ2dlciBvbiB0aGUgYXN5bl9mZCBm cm9tDQo+ICsJICogVmVyYnMgY29udGV4dCByZXR1cm5lZCBieSBpYnZfb3Blbl9kZXZpY2UoKS4N Cj4gKwkgKi8NCj4gKwltbHg1X2xpbmtfdXBkYXRlKGV0aF9kZXYsIDApOw0KPiArCS8qIFN0b3Jl IGRldmljZSBjb25maWd1cmF0aW9uIG9uIHByaXZhdGUgc3RydWN0dXJlLiAqLw0KPiArCXByaXYt PmNvbmZpZyA9IGNvbmZpZzsNCj4gKwkvKiBDcmVhdGUgZHJvcCBxdWV1ZS4gKi8NCj4gKwllcnIg PSBtbHg1X2Zsb3dfY3JlYXRlX2Ryb3BfcXVldWUoZXRoX2Rldik7DQo+ICsJaWYgKGVycikgew0K PiArCQlEUlZfTE9HKEVSUiwgInBvcnQgJXUgZHJvcCBxdWV1ZSBhbGxvY2F0aW9uIGZhaWxlZDog JXMiLA0KPiArCQkJZXRoX2Rldi0+ZGF0YS0+cG9ydF9pZCwgc3RyZXJyb3IocnRlX2Vycm5vKSk7 DQo+ICsJCWVyciA9IHJ0ZV9lcnJubzsNCj4gKwkJZ290byBlcnJvcjsNCj4gKwl9DQo+ICsJLyog U3VwcG9ydGVkIFZlcmJzIGZsb3cgcHJpb3JpdHkgbnVtYmVyIGRldGVjdGlvbi4gKi8NCj4gKwlp ZiAodmVyYl9wcmlvcml0aWVzID09IDApDQo+ICsJCXZlcmJfcHJpb3JpdGllcyA9IG1seDVfZ2V0 X21heF92ZXJic19wcmlvKGV0aF9kZXYpOw0KPiArCWlmICh2ZXJiX3ByaW9yaXRpZXMgPCBNTFg1 X1ZFUkJTX0ZMT1dfUFJJT184KSB7DQo+ICsJCURSVl9MT0coRVJSLCAicG9ydCAldSB3cm9uZyBW ZXJicyBmbG93IHByaW9yaXRpZXM6ICV1IiwNCj4gKwkJCWV0aF9kZXYtPmRhdGEtPnBvcnRfaWQs IHZlcmJfcHJpb3JpdGllcyk7DQo+ICsJCWVyciA9IEVOT1RTVVA7DQo+ICsJCWdvdG8gZXJyb3I7 DQo+ICAJfQ0KPiArCXByaXYtPmNvbmZpZy5tYXhfdmVyYnNfcHJpbyA9IHZlcmJfcHJpb3JpdGll czsNCj4gKwkvKiBBZGQgZGV2aWNlIHRvIG1lbW9yeSBjYWxsYmFjayBsaXN0LiAqLw0KPiArCXJ0 ZV9yd2xvY2tfd3JpdGVfbG9jaygmbWx4NV9zaGFyZWRfZGF0YS0+bWVtX2V2ZW50X3J3bG9jayk7 DQo+ICsJTElTVF9JTlNFUlRfSEVBRCgmbWx4NV9zaGFyZWRfZGF0YS0+bWVtX2V2ZW50X2NiX2xp c3QsDQo+ICsJCQkgcHJpdiwgbWVtX2V2ZW50X2NiKTsNCj4gKwlydGVfcndsb2NrX3dyaXRlX3Vu bG9jaygmbWx4NV9zaGFyZWRfZGF0YS0+bWVtX2V2ZW50X3J3bG9jayk7DQo+ICsJcmV0dXJuIGV0 aF9kZXY7DQo+ICBlcnJvcjoNCj4gKwlpZiAocHJpdikNCj4gKwkJcnRlX2ZyZWUocHJpdik7DQo+ ICsJaWYgKHBkKQ0KPiArCQljbGFpbV96ZXJvKG1seDVfZ2x1ZS0+ZGVhbGxvY19wZChwZCkpOw0K PiArCWlmIChldGhfZGV2KQ0KPiArCQlydGVfZXRoX2Rldl9yZWxlYXNlX3BvcnQoZXRoX2Rldik7 DQo+ICAJaWYgKGN0eCkNCj4gIAkJY2xhaW1femVybyhtbHg1X2dsdWUtPmNsb3NlX2RldmljZShj dHgpKTsNCj4gIAlhc3NlcnQoZXJyID4gMCk7DQo+IC0tDQo+IDIuMTEuMA0K