From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-00128a01.pphosted.com (mx0a-00128a01.pphosted.com [148.163.135.77]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 28BF8218842; Mon, 17 Feb 2025 12:24:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.135.77 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739795079; cv=none; b=s8Y6zFlc/eE37/VWl5Riz+gYnqg+97DfouBjGtihg50/VJ0x52gYRtqdNuf3g/3YCoP5efLo9Pgt6xwKLZ605Y9/HTExHdXutsS9zYzWfD/EWrX+cxHOAPB+yJM5UT+BhWl3ejfZjyTGElwsy4qs8NZx1jvK6FgT9KX8iWp+iKQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739795079; c=relaxed/simple; bh=DY908qPjEKlk3z7gjsaSW7mTbODeIxNVYOtRIX3gnwY=; h=From:To:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=g0ep91HiVEE6aUd54vG9HrHBPaEmDsC/HafkM73gfwZ/H3LFingV4GWL4DiOgHmqORCHdHWSvVntx31cwAh8Q25A/WEkiTIoAVVhrVshT8fwgpwRPWJZcsMgjzoRGIE/LxMQNNA4U8yY71aYKlpI9Aq5e7Zl53CC2BBF//UkTwc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=analog.com; spf=pass smtp.mailfrom=analog.com; dkim=pass (2048-bit key) header.d=analog.com header.i=@analog.com header.b=ToD8DuIQ; arc=none smtp.client-ip=148.163.135.77 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=analog.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=analog.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=analog.com header.i=@analog.com header.b="ToD8DuIQ" Received: from pps.filterd (m0167089.ppops.net [127.0.0.1]) by mx0a-00128a01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 51HA822i013500; Mon, 17 Feb 2025 07:24:20 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=analog.com; h= content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=DKIM; bh=DY908 qPjEKlk3z7gjsaSW7mTbODeIxNVYOtRIX3gnwY=; b=ToD8DuIQxc6yEloDH9gGO 3PH3HPwJklOWXHUjQGMQz95/0ZLhhoqQk1TRq2ArCFND5Lx+i5mfwnfARA/xPYxd TRooLnaexXGdz2GpJA4AVqZy7VferZQ58WjrIlwVnwzIFd+6Wez8PbB/N1Fwlvq6 Q2jvBJnrEYICxS5OpNald4KMA4H8/pPoVPbJPq70x/kS2qYrpRk/5aSTe4CVqOi7 Un+Y/oqgDdj1qrz74Qs0WkWKVsGnEu5WXo8zTQVmrYrtSi2FOpPRlkKjqfgRg5gK BPjXDUbxplV2mVyDtuuAAINFiP3UPJlmHOA3Q2eUHucsnxHC0IePcYV3fg0Ak3Uz Q== Received: from nwd2mta3.analog.com ([137.71.173.56]) by mx0a-00128a01.pphosted.com (PPS) with ESMTPS id 44trqcyx5r-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 17 Feb 2025 07:24:18 -0500 (EST) Received: from ASHBMBX9.ad.analog.com (ASHBMBX9.ad.analog.com [10.64.17.10]) by nwd2mta3.analog.com (8.14.7/8.14.7) with ESMTP id 51HCOHjM018542 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 17 Feb 2025 07:24:17 -0500 Received: from ASHBMBX9.ad.analog.com (10.64.17.10) by ASHBMBX9.ad.analog.com (10.64.17.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.14; Mon, 17 Feb 2025 07:24:16 -0500 Received: from ASHBMBX9.ad.analog.com ([fe80::1cb6:4851:5392:54cf]) by ASHBMBX9.ad.analog.com ([fe80::1cb6:4851:5392:54cf%20]) with mapi id 15.02.0986.014; Mon, 17 Feb 2025 07:24:16 -0500 From: "Budai, Robert" To: "Budai, Robert" , Lars-Peter Clausen , "Hennerich, Michael" , "Sa, Nuno" , "Gradinariu, Ramona" , "Miclaus, Antoniu" , Jonathan Cameron , "Rob Herring" , Krzysztof Kozlowski , "Conor Dooley" , Jonathan Corbet , "linux-iio@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-doc@vger.kernel.org" Subject: RE: [PATCH v8 5/6] iio: imu: adis16550: add adis16550 support Thread-Topic: [PATCH v8 5/6] iio: imu: adis16550: add adis16550 support Thread-Index: AQHbgTV1b6GsLSCEPEyskOUU7tlcYrNLasqg Date: Mon, 17 Feb 2025 12:24:16 +0000 Message-ID: <2435ca2c77ee417fb1425deabec03255@analog.com> References: <20250217101221.600898-1-robert.budai@analog.com> <20250217101221.600898-6-robert.budai@analog.com> In-Reply-To: <20250217101221.600898-6-robert.budai@analog.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-dg-rorf: true x-adiruleop-newscl: Rule Triggered Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Precedence: bulk X-Mailing-List: linux-doc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Authority-Analysis: v=2.4 cv=a5XK9VSF c=1 sm=1 tr=0 ts=67b32a73 cx=c_pps a=PpDZqlmH/M8setHirZLBMw==:117 a=PpDZqlmH/M8setHirZLBMw==:17 a=xqWC_Br6kY4A:10 a=3JQw-mgUvC8A:10 a=IkcTkHD0fZMA:10 a=T2h4t0Lz3GQA:10 a=gAnH3GRIAAAA:8 a=VwQbUJbxAAAA:8 a=07d9gI8wAAAA:8 a=moM2hzZi2po8cY8-i_EA:9 a=QEXdDO2ut3YA:10 a=oVHKYsEdi7-vN-J5QA_j:22 a=e2CUPOnPG4QKp8I52DXD:22 X-Proofpoint-GUID: EnP5tE31RrXKdtHv88KO550ihxQIFdjW X-Proofpoint-ORIG-GUID: EnP5tE31RrXKdtHv88KO550ihxQIFdjW X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-17_05,2025-02-13_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 phishscore=0 spamscore=0 mlxscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 lowpriorityscore=0 malwarescore=0 bulkscore=0 adultscore=0 mlxlogscore=999 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2501170000 definitions=main-2502170109 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogUm9iZXJ0IEJ1ZGFpIDxy b2JlcnQuYnVkYWlAYW5hbG9nLmNvbT4NCj4gU2VudDogTW9uZGF5LCBGZWJydWFyeSAxNywgMjAy NSAxMjoxMiBQTQ0KPiBUbzogTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+OyBI ZW5uZXJpY2gsIE1pY2hhZWwNCj4gPE1pY2hhZWwuSGVubmVyaWNoQGFuYWxvZy5jb20+OyBTYSwg TnVubyA8TnVuby5TYUBhbmFsb2cuY29tPjsNCj4gR3JhZGluYXJpdSwgUmFtb25hIDxSYW1vbmEu R3JhZGluYXJpdUBhbmFsb2cuY29tPjsgTWljbGF1cywgQW50b25pdQ0KPiA8QW50b25pdS5NaWNs YXVzQGFuYWxvZy5jb20+OyBCdWRhaSwgUm9iZXJ0IDxSb2JlcnQuQnVkYWlAYW5hbG9nLmNvbT47 DQo+IEpvbmF0aGFuIENhbWVyb24gPGppYzIzQGtlcm5lbC5vcmc+OyBSb2IgSGVycmluZyA8cm9i aEBrZXJuZWwub3JnPjsNCj4gS3J6eXN6dG9mIEtvemxvd3NraSA8a3J6aytkdEBrZXJuZWwub3Jn PjsgQ29ub3IgRG9vbGV5DQo+IDxjb25vcitkdEBrZXJuZWwub3JnPjsgSm9uYXRoYW4gQ29yYmV0 IDxjb3JiZXRAbHduLm5ldD47IGxpbnV4LQ0KPiBpaW9Admdlci5rZXJuZWwub3JnOyBkZXZpY2V0 cmVlQHZnZXIua2VybmVsLm9yZzsgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsNCj4gbGlu dXgtZG9jQHZnZXIua2VybmVsLm9yZw0KPiBTdWJqZWN0OiBbUEFUQ0ggdjggNS82XSBpaW86IGlt dTogYWRpczE2NTUwOiBhZGQgYWRpczE2NTUwIHN1cHBvcnQNCj4gDQo+IFRoZSBBRElTMTY1NTAg aXMgYSBjb21wbGV0ZSBpbmVydGlhbCBzeXN0ZW0gdGhhdCBpbmNsdWRlcyBhIHRyaWF4aXMNCj4g Z3lyb3Njb3BlIGFuZCBhIHRyaWF4aXMgYWNjZWxlcm9tZXRlci4gRWFjaCBpbmVydGlhbCBzZW5z b3IgaW4gdGhlDQo+IEFESVMxNjU1MCBjb21iaW5lcyBpbmR1c3RyeSBsZWFkaW5nIE1FTVMgb25s eSB0ZWNobm9sb2d5IHdpdGggc2lnbmFsDQo+IGNvbmRpdGlvbmluZyB0aGF0IG9wdGltaXplcyBk eW5hbWljIHBlcmZvcm1hbmNlLiBUaGUgZmFjdG9yeSBjYWxpYnJhdGlvbg0KPiBjaGFyYWN0ZXJp emVzIGVhY2ggc2Vuc29yIGZvciBzZW5zaXRpdml0eSwgYmlhcywgYW5kIGFsaWdubWVudC4gQXMg YQ0KPiByZXN1bHQsIGVhY2ggc2Vuc29yIGhhcyBpdHMgb3duIGR5bmFtaWMgY29tcGVuc2F0aW9u IGZvcm11bGFzIHRoYXQNCj4gcHJvdmlkZSBhY2N1cmF0ZSBzZW5zb3IgbWVhc3VyZW1lbnRzLg0K PiANCj4gQ28tZGV2ZWxvcGVkLWJ5OiBSYW1vbmEgR3JhZGluYXJpdSA8cmFtb25hLmdyYWRpbmFy aXVAYW5hbG9nLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTogUmFtb25hIEdyYWRpbmFyaXUgPHJhbW9u YS5ncmFkaW5hcml1QGFuYWxvZy5jb20+DQo+IENvLWRldmVsb3BlZC1ieTogQW50b25pdSBNaWNs YXVzIDxhbnRvbml1Lm1pY2xhdXNAYW5hbG9nLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTogQW50b25p dSBNaWNsYXVzIDxhbnRvbml1Lm1pY2xhdXNAYW5hbG9nLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTog TnVubyBTw6EgPG51bm8uc2FAYW5hbG9nLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTogUm9iZXJ0IEJ1 ZGFpIDxyb2JlcnQuYnVkYWlAYW5hbG9nLmNvbT4NCj4gLS0tDQo+IA0KPiB2ODoNCj4gLSByZW1v dmVkIF9fYWxpZ25lZCBmcm9tIHN0cnVjdCBhZGlzMTY1NTAsIGFzIHN1Z2dlc3RlZA0KPiAtIGNy YyBidWZmZXIgZXh0cmFjdGlvbiBpbnRvIHRoZSBjcmMgY2hlY2sgZnVuY3Rpb24NCj4gLSBwYXNz ZWQgYnVmZmVyIGludG8gY3JjIHZhbGlkYXRpb24gYXMgb3JpZ2luYWwsIF9fYmUzMiBhbmQgcGVy Zm9ybWVkIGNoZWNrDQo+IHVzaW5nIGJlMzJfdG9fY3B1IGNvbnZlcnNpb24gb2YgdGhlIGJ1ZmZl cg0KPiAtIGFkZGVkIHRyYWlsaW5nIGNvbW1hIHRvIGxpbmUgOTkzDQo+IC0gcmVtb3ZlZCB0cmFp bGluZyBjb21tYSBmcm9tIGxpbmUgODc3DQo+IA0KPiAgZHJpdmVycy9paW8vaW11L0tjb25maWcg ICAgIHwgICAxMyArDQo+ICBkcml2ZXJzL2lpby9pbXUvTWFrZWZpbGUgICAgfCAgICAxICsNCj4g IGRyaXZlcnMvaWlvL2ltdS9hZGlzMTY1NTAuYyB8IDExNDkNCj4gKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysNCj4gIDMgZmlsZXMgY2hhbmdlZCwgMTE2MyBpbnNlcnRpb25zKCsp DQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9paW8vaW11L2FkaXMxNjU1MC5jDQo+IA0K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vaW11L0tjb25maWcgYi9kcml2ZXJzL2lpby9pbXUv S2NvbmZpZw0KPiBpbmRleCBjYTBlZmVjYjUuLjE1NjEyZjBmMSAxMDA2NDQNCj4gLS0tIGEvZHJp dmVycy9paW8vaW11L0tjb25maWcNCj4gKysrIGIvZHJpdmVycy9paW8vaW11L0tjb25maWcNCj4g QEAgLTUyLDYgKzUyLDE5IEBAIGNvbmZpZyBBRElTMTY0ODANCj4gIAkgIFNheSB5ZXMgaGVyZSB0 byBidWlsZCBzdXBwb3J0IGZvciBBbmFsb2cgRGV2aWNlcyBBRElTMTYzNzUsDQo+IEFESVMxNjQ4 MCwNCj4gIAkgIEFESVMxNjQ4NSwgQURJUzE2NDg4IGluZXJ0aWFsIHNlbnNvcnMuDQo+IA0KPiAr Y29uZmlnIEFESVMxNjU1MA0KPiArCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRElTMTY1NTAg YW5kIHNpbWlsYXIgSU1VIGRyaXZlciINCj4gKwlkZXBlbmRzIG9uIFNQSQ0KPiArCXNlbGVjdCBJ SU9fQURJU19MSUINCj4gKwlzZWxlY3QgSUlPX0FESVNfTElCX0JVRkZFUiBpZiBJSU9fQlVGRkVS DQo+ICsJc2VsZWN0IENSQzMyDQo+ICsJaGVscA0KPiArCSAgU2F5IHllcyBoZXJlIHRvIGJ1aWxk IHN1cHBvcnQgZm9yIEFuYWxvZyBEZXZpY2VzIEFESVMxNjU1MCBpbmVydGlhbA0KPiArCSAgc2Vu c29yIGNvbnRhaW5pbmcgdHJpYXhpcyBneXJvc2NvcGUgYW5kIHRyaWF4aXMgYWNjZWxlcm9tZXRl ci4NCj4gKw0KPiArCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3Nl IE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlDQo+ICsJICBjYWxsZWQgYWRpczE2NTUwLg0KPiAr DQo+ICBzb3VyY2UgImRyaXZlcnMvaWlvL2ltdS9ibWkxNjAvS2NvbmZpZyINCj4gIHNvdXJjZSAi ZHJpdmVycy9paW8vaW11L2JtaTI3MC9LY29uZmlnIg0KPiAgc291cmNlICJkcml2ZXJzL2lpby9p bXUvYm1pMzIzL0tjb25maWciDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9pbXUvTWFrZWZp bGUgYi9kcml2ZXJzL2lpby9pbXUvTWFrZWZpbGUNCj4gaW5kZXggMDRjNzdjMmM0Li5lOTAxYWVh NDkgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvaWlvL2ltdS9NYWtlZmlsZQ0KPiArKysgYi9kcml2 ZXJzL2lpby9pbXUvTWFrZWZpbGUNCj4gQEAgLTgsNiArOCw3IEBAIG9iai0kKENPTkZJR19BRElT MTY0MDApICs9IGFkaXMxNjQwMC5vDQo+ICBvYmotJChDT05GSUdfQURJUzE2NDYwKSArPSBhZGlz MTY0NjAubw0KPiAgb2JqLSQoQ09ORklHX0FESVMxNjQ3NSkgKz0gYWRpczE2NDc1Lm8NCj4gIG9i ai0kKENPTkZJR19BRElTMTY0ODApICs9IGFkaXMxNjQ4MC5vDQo+ICtvYmotJChDT05GSUdfQURJ UzE2NTUwKSArPSBhZGlzMTY1NTAubw0KPiANCj4gIGFkaXNfbGliLXkgKz0gYWRpcy5vDQo+ICBh ZGlzX2xpYi0kKENPTkZJR19JSU9fQURJU19MSUJfQlVGRkVSKSArPSBhZGlzX3RyaWdnZXIubw0K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vaW11L2FkaXMxNjU1MC5jIGIvZHJpdmVycy9paW8v aW11L2FkaXMxNjU1MC5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAw MC4uODMwNjNhOGY1DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9paW8vaW11L2Fk aXMxNjU1MC5jDQo+IEBAIC0wLDAgKzEsMTE0OSBAQA0KPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjANCj4gKy8qDQo+ICsgKiBBRElTMTY1NTAgSU1VIGRyaXZlcg0KPiArICoN Cj4gKyAqIENvcHlyaWdodCAyMDI0IEFuYWxvZyBEZXZpY2VzIEluYy4NCj4gKyAqLw0KPiArI2lu Y2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+DQo+ ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4NCj4g KyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvaWlvL2J1ZmZl ci5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2lpby9paW8uaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9p aW8vaW11L2FkaXMuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9paW8vdHJpZ2dlcl9jb25zdW1lci5o Pg0KPiArI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2tl cm5lbC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2xjbS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L21h dGguaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9t b2RfZGV2aWNldGFibGUuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIu aD4NCj4gKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvc3dh Yi5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC5oPg0KPiArDQo+ICsjZGVmaW5lIEFE SVMxNjU1MF9SRUdfQlVSU1RfR1lST19BQ0NFTAkJMHgwYQ0KPiArI2RlZmluZSBBRElTMTY1NTBf UkVHX0JVUlNUX0RFTFRBX0FOR19WRUwJMHgwYg0KPiArI2RlZmluZSBBRElTMTY1NTBfQlVSU1Rf REFUQV9HWVJPX0FDQ0VMX01BU0sJR0VOTUFTSyg2LA0KPiAxKQ0KPiArI2RlZmluZSBBRElTMTY1 NTBfQlVSU1RfREFUQV9ERUxUQV9BTkdfVkVMX01BU0sNCj4gCUdFTk1BU0soMTIsIDcpDQo+ICsN Cj4gKyNkZWZpbmUgQURJUzE2NTUwX1JFR19TVEFUVVMJCTB4MGUNCj4gKyNkZWZpbmUgQURJUzE2 NTUwX1JFR19URU1QCQkweDEwDQo+ICsjZGVmaW5lIEFESVMxNjU1MF9SRUdfWF9HWVJPCQkweDEy DQo+ICsjZGVmaW5lIEFESVMxNjU1MF9SRUdfWV9HWVJPCQkweDE0DQo+ICsjZGVmaW5lIEFESVMx NjU1MF9SRUdfWl9HWVJPCQkweDE2DQo+ICsjZGVmaW5lIEFESVMxNjU1MF9SRUdfWF9BQ0NFTAkJ MHgxOA0KPiArI2RlZmluZSBBRElTMTY1NTBfUkVHX1lfQUNDRUwJCTB4MWENCj4gKyNkZWZpbmUg QURJUzE2NTUwX1JFR19aX0FDQ0VMCQkweDFjDQo+ICsjZGVmaW5lIEFESVMxNjU1MF9SRUdfWF9E RUxUQU5HX0wJMHgxRQ0KPiArI2RlZmluZSBBRElTMTY1NTBfUkVHX1lfREVMVEFOR19MCTB4MjAN Cj4gKyNkZWZpbmUgQURJUzE2NTUwX1JFR19aX0RFTFRBTkdfTAkweDIyDQo+ICsjZGVmaW5lIEFE SVMxNjU1MF9SRUdfWF9ERUxUVkVMX0wJMHgyNA0KPiArI2RlZmluZSBBRElTMTY1NTBfUkVHX1lf REVMVFZFTF9MCTB4MjYNCj4gKyNkZWZpbmUgQURJUzE2NTUwX1JFR19aX0RFTFRWRUxfTAkweDI4 DQo+ICsjZGVmaW5lIEFESVMxNjU1MF9SRUdfWF9HWVJPX1NDQUxFCTB4MzANCj4gKyNkZWZpbmUg QURJUzE2NTUwX1JFR19ZX0dZUk9fU0NBTEUJMHgzMg0KPiArI2RlZmluZSBBRElTMTY1NTBfUkVH X1pfR1lST19TQ0FMRQkweDM0DQo+ICsjZGVmaW5lIEFESVMxNjU1MF9SRUdfWF9BQ0NFTF9TQ0FM RQkweDM2DQo+ICsjZGVmaW5lIEFESVMxNjU1MF9SRUdfWV9BQ0NFTF9TQ0FMRQkweDM4DQo+ICsj ZGVmaW5lIEFESVMxNjU1MF9SRUdfWl9BQ0NFTF9TQ0FMRQkweDNhDQo+ICsjZGVmaW5lIEFESVMx NjU1MF9SRUdfWF9HWVJPX0JJQVMJMHg0MA0KPiArI2RlZmluZSBBRElTMTY1NTBfUkVHX1lfR1lS T19CSUFTCTB4NDINCj4gKyNkZWZpbmUgQURJUzE2NTUwX1JFR19aX0dZUk9fQklBUwkweDQ0DQo+ ICsjZGVmaW5lIEFESVMxNjU1MF9SRUdfWF9BQ0NFTF9CSUFTCTB4NDYNCj4gKyNkZWZpbmUgQURJ UzE2NTUwX1JFR19ZX0FDQ0VMX0JJQVMJMHg0OA0KPiArI2RlZmluZSBBRElTMTY1NTBfUkVHX1pf QUNDRUxfQklBUwkweDRhDQo+ICsjZGVmaW5lIEFESVMxNjU1MF9SRUdfQ09NTUFORAkJMHg1MA0K PiArI2RlZmluZSBBRElTMTY1NTBfUkVHX0NPTkZJRwkJMHg1Mg0KPiArI2RlZmluZSBBRElTMTY1 NTBfR1lST19GSVJfRU5fTUFTSwlCSVQoMykNCj4gKyNkZWZpbmUgQURJUzE2NTUwX0FDQ0xfRklS X0VOX01BU0sJQklUKDIpDQo+ICsjZGVmaW5lIEFESVMxNjU1MF9TWU5DX01BU0sJXA0KPiArCShB RElTMTY1NTBfU1lOQ19FTl9NQVNLIHwgQURJUzE2NTUwX1NZTkNfTU9ERV9NQVNLKQ0KPiArI2Rl ZmluZSBBRElTMTY1NTBfU1lOQ19NT0RFX01BU0sJQklUKDEpDQo+ICsjZGVmaW5lIEFESVMxNjU1 MF9TWU5DX0VOX01BU0sJCUJJVCgwKQ0KPiArLyogbWF4IG9mIDQwMDAgU1BTIGluIHNjYWxlIHN5 bmMgKi8NCj4gKyNkZWZpbmUgQURJUzE2NTUwX1NZTkNfU0NBTEVfTUFYX1JBVEUJKDQwMDAgKiAx MDAwKQ0KPiArI2RlZmluZSBBRElTMTY1NTBfUkVHX0RFQ19SQVRFCQkweDU0DQo+ICsjZGVmaW5l IEFESVMxNjU1MF9SRUdfU1lOQ19TQ0FMRQkweDU2DQo+ICsjZGVmaW5lIEFESVMxNjU1MF9SRUdf U0VSSUFMX05VTQkweDc2DQo+ICsjZGVmaW5lIEFESVMxNjU1MF9SRUdfRldfUkVWCQkweDdBDQo+ ICsjZGVmaW5lIEFESVMxNjU1MF9SRUdfRldfREFURQkJMHg3Qw0KPiArI2RlZmluZSBBRElTMTY1 NTBfUkVHX1BST0RfSUQJCTB4N0UNCj4gKyNkZWZpbmUgQURJUzE2NTUwX1JFR19GTEFTSF9DTlQJ CTB4NzINCj4gKy8qIFNQSSBwcm90b2NvbCovDQo+ICsjZGVmaW5lIEFESVMxNjU1MF9TUElfREFU QV9NQVNLCQlHRU5NQVNLKDMxLCAxNikNCj4gKyNkZWZpbmUgQURJUzE2NTUwX1NQSV9SRUdfTUFT SwkJR0VOTUFTSygxNCwgOCkNCj4gKyNkZWZpbmUgQURJUzE2NTUwX1NQSV9SX1dfTUFTSwkJQklU KDcpDQo+ICsjZGVmaW5lIEFESVMxNjU1MF9TUElfQ1JDX01BU0sJCUdFTk1BU0soMywgMCkNCj4g KyNkZWZpbmUgQURJUzE2NTUwX1NQSV9TVl9NQVNLCQlHRU5NQVNLKDcsIDYpDQo+ICsvKiBidXJz dCByZWFkICovDQo+ICsjZGVmaW5lIEFESVMxNjU1MF9CVVJTVF9OX0VMRU0JCTEyDQo+ICsjZGVm aW5lIEFESVMxNjU1MF9CVVJTVF9EQVRBX0xFTgkoQURJUzE2NTUwX0JVUlNUX05fRUxFTQ0KPiAq IDQpDQo+ICsjZGVmaW5lIEFESVMxNjU1MF9NQVhfU0NBTl9EQVRBCQkxMg0KPiArDQo+ICtzdHJ1 Y3QgYWRpczE2NTUwX3N5bmMgew0KPiArCXUxNiBzeW5jX21vZGU7DQo+ICsJdTE2IG1pbl9yYXRl Ow0KPiArCXUxNiBtYXhfcmF0ZTsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBhZGlzMTY1NTBfY2hp cF9pbmZvIHsNCj4gKwljb25zdCBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyAqY2hhbm5lbHM7DQo+ICsJ Y29uc3Qgc3RydWN0IGFkaXMxNjU1MF9zeW5jICpzeW5jX21vZGU7DQo+ICsJY2hhciAqbmFtZTsN Cj4gKwl1MzIgbnVtX2NoYW5uZWxzOw0KPiArCXUzMiBneXJvX21heF92YWw7DQo+ICsJdTMyIGd5 cm9fbWF4X3NjYWxlOw0KPiArCXUzMiBhY2NlbF9tYXhfdmFsOw0KPiArCXUzMiBhY2NlbF9tYXhf c2NhbGU7DQo+ICsJdTMyIHRlbXBfc2NhbGU7DQo+ICsJdTMyIGRlbHRhbmdfbWF4X3ZhbDsNCj4g Kwl1MzIgZGVsdHZlbF9tYXhfdmFsOw0KPiArCXUzMiBpbnRfY2xrOw0KPiArCXUxNiBtYXhfZGVj Ow0KPiArCXUxNiBudW1fc3luYzsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBhZGlzMTY1NTAgew0K PiArCWNvbnN0IHN0cnVjdCBhZGlzMTY1NTBfY2hpcF9pbmZvICppbmZvOw0KPiArCXN0cnVjdCBh ZGlzIGFkaXM7DQo+ICsJdW5zaWduZWQgbG9uZyBjbGtfZnJlcV9oejsNCj4gKwl1MzIgc3luY19t b2RlOw0KPiArCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlclsyXTsNCj4gKwl1OCBidWZmZXJbQURJ UzE2NTUwX0JVUlNUX0RBVEFfTEVOICsgc2l6ZW9mKHUzMildDQo+IF9fYWxpZ25lZChJSU9fRE1B X01JTkFMSUdOKTsNCj4gKwlfX2JlMzIgZGluWzJdOw0KPiArCV9fYmUzMiBkb3V0WzJdOw0KPiAr fTsNCj4gKw0KPiArZW51bSB7DQo+ICsJQURJUzE2NTUwX1NWX0lOSVQsDQo+ICsJQURJUzE2NTUw X1NWX09LLA0KPiArCUFESVMxNjU1MF9TVl9OT0ssDQo+ICsJQURJUzE2NTUwX1NWX1NQSV9FUlJP UiwNCj4gK307DQo+ICsNCj4gKy8qDQo+ICsgKiBUaGlzIGlzIGEgc2ltcGxpZmllZCBpbXBsZW1l bnRhdGlvbiBvZiBsaWIvY3JjNC5jLiBJdCBjb3VsZCBub3QgYmUgdXNlZA0KPiArICogZGlyZWN0 bHkgc2luY2UgdGhlIHBvbHlub21pYWwgdXNlZCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb25lIHVz ZWQgYnkgdGhlDQo+ICsgKiAxNjU1MCB3aGljaCBpcyAwYjEwMDAxDQo+ICsgKi8NCj4gK3N0YXRp YyB1OCBzcGlfY3JjNChjb25zdCB1MzIgdmFsKQ0KPiArew0KPiArCWludCBpOw0KPiArCWNvbnN0 IGludCBiaXRzID0gMjg7DQo+ICsJdTggY3JjID0gMHhhOw0KPiArCS8qIGlnbm9yZSA0bHNiICov DQo+ICsJY29uc3QgdTMyIF9fdmFsID0gdmFsID4+IDQ7DQo+ICsNCj4gKwkvKiBDYWxjdWxhdGUg Y3JjNCBvdmVyIGZvdXItYml0IG5pYmJsZXMsIHN0YXJ0aW5nIGF0IHRoZSBNU2JpdCAqLw0KPiAr CWZvciAoaSA9IGJpdHMgLSA0OyBpID49IDA7IGkgLT0gNCkNCj4gKwkJY3JjID0gY3JjIF4gKChf X3ZhbCA+PiBpKSAmIDB4Zik7DQo+ICsNCj4gKwlyZXR1cm4gY3JjOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgaW50IGFkaXMxNjU1MF9zcGlfdmFsaWRhdGUoY29uc3Qgc3RydWN0IGFkaXMgKmFkaXMs IF9fYmUzMiBkb3V0LA0KPiArCQkJCSAgdTE2ICpkYXRhKQ0KPiArew0KPiArCXUzMiBfX2RvdXQ7 DQo+ICsJdTggY3JjLCBjcmNfcmN2LCBzdjsNCj4gKw0KPiArCV9fZG91dCA9IGJlMzJfdG9fY3B1 KGRvdXQpOw0KPiArDQo+ICsJLyogdmFsaWRhdGUgcmVjZWl2ZWQgbWVzc2FnZSAqLw0KPiArCWNy Y19yY3YgPSBGSUVMRF9HRVQoQURJUzE2NTUwX1NQSV9DUkNfTUFTSywgX19kb3V0KTsNCj4gKwlj cmMgPSBzcGlfY3JjNChfX2RvdXQpOw0KPiArCWlmIChjcmNfcmN2ICE9IGNyYykgew0KPiArCQlk ZXZfZXJyKCZhZGlzLT5zcGktPmRldiwNCj4gKwkJCSJJbnZhbGlkIGNyYywgcmN2OiAweCUwMngs IGNhbGM6IDB4JTAyeCFcbiIsDQo+ICsJCQljcmNfcmN2LCBjcmMpOw0KPiArCQlyZXR1cm4gLUVJ TzsNCj4gKwl9DQo+ICsJc3YgPSBGSUVMRF9HRVQoQURJUzE2NTUwX1NQSV9TVl9NQVNLLCBfX2Rv dXQpOw0KPiArCWlmIChzdiA+PSBBRElTMTY1NTBfU1ZfTk9LKSB7DQo+ICsJCWRldl9lcnIoJmFk aXMtPnNwaS0+ZGV2LA0KPiArCQkJIlN0YXRlIHZlY3RvciBlcnJvciBkZXRlY3RlZDogJTAyWCIs IHN2KTsNCj4gKwkJcmV0dXJuIC1FSU87DQo+ICsJfQ0KPiArCSpkYXRhID0gRklFTERfR0VUKEFE SVMxNjU1MF9TUElfREFUQV9NQVNLLCBfX2RvdXQpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGFkaXMxNjU1MF9zcGlfbXNnX3ByZXBhcmUoY29uc3QgdTMy IHJlZywgY29uc3QgYm9vbCB3cml0ZSwNCj4gKwkJCQkgICAgICBjb25zdCB1MTYgZGF0YSwgX19i ZTMyICpkaW4pDQo+ICt7DQo+ICsJdTggY3JjOw0KPiArCXUzMiBfX2RpbjsNCj4gKw0KPiArCV9f ZGluID0gRklFTERfUFJFUChBRElTMTY1NTBfU1BJX1JFR19NQVNLLCByZWcpOw0KPiArDQo+ICsJ aWYgKHdyaXRlKSB7DQo+ICsJCV9fZGluIHw9IEZJRUxEX1BSRVAoQURJUzE2NTUwX1NQSV9SX1df TUFTSywgMSk7DQo+ICsJCV9fZGluIHw9IEZJRUxEX1BSRVAoQURJUzE2NTUwX1NQSV9EQVRBX01B U0ssIGRhdGEpOw0KPiArCX0NCj4gKw0KPiArCWNyYyA9IHNwaV9jcmM0KF9fZGluKTsNCj4gKwlf X2RpbiB8PSBGSUVMRF9QUkVQKEFESVMxNjU1MF9TUElfQ1JDX01BU0ssIGNyYyk7DQo+ICsNCj4g KwkqZGluID0gY3B1X3RvX2JlMzIoX19kaW4pOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGFk aXMxNjU1MF9zcGlfeGZlcihjb25zdCBzdHJ1Y3QgYWRpcyAqYWRpcywgdTMyIHJlZywgdTMyIGxl biwNCj4gKwkJCSAgICAgIHUzMiAqcmVhZHZhbCwgdTMyIHdyaXRldmFsKQ0KPiArew0KPiArCWlu dCByZXQ7DQo+ICsJdTE2IGRhdGEgPSAwOw0KPiArCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7DQo+ ICsJYm9vbCB3ciA9IHJlYWR2YWwgPyBmYWxzZSA6IHRydWU7DQo+ICsJc3RydWN0IHNwaV9kZXZp Y2UgKnNwaSA9IGFkaXMtPnNwaTsNCj4gKwlzdHJ1Y3QgYWRpczE2NTUwICpzdCA9IGNvbnRhaW5l cl9vZihhZGlzLCBzdHJ1Y3QgYWRpczE2NTUwLCBhZGlzKTsNCj4gKwlzdHJ1Y3Qgc3BpX3RyYW5z ZmVyIHhmZXJzW10gPSB7DQo+ICsJCXsNCj4gKwkJCS50eF9idWYgPSAmc3QtPmRpblswXSwNCj4g KwkJCS5sZW4gPSA0LA0KPiArCQkJLmNzX2NoYW5nZSA9IDEsDQo+ICsJCX0sIHsNCj4gKwkJCS50 eF9idWYgPSAmc3QtPmRpblsxXSwNCj4gKwkJCS5sZW4gPSA0LA0KPiArCQkJLmNzX2NoYW5nZSA9 IDEsDQo+ICsJCQkucnhfYnVmID0gc3QtPmRvdXQsDQo+ICsJCX0sIHsNCj4gKwkJCS50eF9idWYg PSAmc3QtPmRpblsxXSwNCj4gKwkJCS5yeF9idWYgPSAmc3QtPmRvdXRbMV0sDQo+ICsJCQkubGVu ID0gNCwNCj4gKwkJfSwNCj4gKwl9Ow0KPiArDQo+ICsJc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsN Cj4gKw0KPiArCXN3aXRjaCAobGVuKSB7DQo+ICsJY2FzZSA0Og0KPiArCQlhZGlzMTY1NTBfc3Bp X21zZ19wcmVwYXJlKHJlZyArIDEsIHdyLCB3cml0ZXZhbCA+PiAxNiwNCj4gKwkJCQkJICAmc3Qt PmRpblswXSk7DQo+ICsJCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyc1swXSwgJm1zZyk7DQo+ ICsJCWZhbGx0aHJvdWdoOw0KPiArCWNhc2UgMjoNCj4gKwkJYWRpczE2NTUwX3NwaV9tc2dfcHJl cGFyZShyZWcsIHdyLCB3cml0ZXZhbCwgJnN0LT5kaW5bMV0pOw0KPiArCQlzcGlfbWVzc2FnZV9h ZGRfdGFpbCgmeGZlcnNbMV0sICZtc2cpOw0KPiArCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZl cnNbMl0sICZtc2cpOw0KPiArCQlicmVhazsNCj4gKwlkZWZhdWx0Og0KPiArCQlyZXR1cm4gLUVJ TlZBTDsNCj4gKwl9DQo+ICsNCj4gKwlyZXQgPSBzcGlfc3luYyhzcGksICZtc2cpOw0KPiArCWlm IChyZXQpIHsNCj4gKwkJZGV2X2Vycigmc3BpLT5kZXYsICJTcGkgZmFpbHVyZSAlZFxuIiwgcmV0 KTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsJLyoNCj4gKwkgKiBXaGVuIHdyaXRpbmcg YSByZWdpc3RlciwgdGhlIGRldmljZSB3aWxsIHJlcGx5IHdpdGggYSByZWFkYmFjayBvbiB0aGUN Cj4gKwkgKiB0cmFuc2ZlciBzbyB0aGF0IHdlIGNhbiB2YWxpZGF0ZSBpZiBvdXIgZGF0YSB3YXMg YWN0dWFsbHkgd3JpdHRlbi4uDQo+ICsJICovDQo+ICsJc3dpdGNoIChsZW4pIHsNCj4gKwljYXNl IDQ6DQo+ICsJCXJldCA9IGFkaXMxNjU1MF9zcGlfdmFsaWRhdGUoYWRpcywgc3QtPmRvdXRbMF0s ICZkYXRhKTsNCj4gKwkJaWYgKHJldCkNCj4gKwkJCXJldHVybiByZXQ7DQo+ICsNCj4gKwkJaWYg KHJlYWR2YWwpIHsNCj4gKwkJCSpyZWFkdmFsID0gZGF0YSA8PCAxNjsNCj4gKwkJfSBlbHNlIGlm ICgod3JpdGV2YWwgPj4gMTYpICE9IGRhdGEgJiYgcmVnICE9DQo+IEFESVMxNjU1MF9SRUdfQ09N TUFORCkgew0KPiArCQkJZGV2X2Vycigmc3BpLT5kZXYsDQo+ICsJCQkJIkRhdGEgbm90IHdyaXR0 ZW46IHdyOiAweCUwNFgsIHJjdjoNCj4gMHglMDRYXG4iLA0KPiArCQkJCXdyaXRldmFsID4+IDE2 LCBkYXRhKTsNCj4gKwkJCXJldHVybiAtRUlPOw0KPiArCQl9DQo+ICsNCj4gKwkJZmFsbHRocm91 Z2g7DQo+ICsJY2FzZSAyOg0KPiArCQlyZXQgPSBhZGlzMTY1NTBfc3BpX3ZhbGlkYXRlKGFkaXMs IHN0LT5kb3V0WzFdLCAmZGF0YSk7DQo+ICsJCWlmIChyZXQpDQo+ICsJCQlyZXR1cm4gcmV0Ow0K PiArDQo+ICsJCWlmIChyZWFkdmFsKSB7DQo+ICsJCQkqcmVhZHZhbCA9ICgqcmVhZHZhbCAmIEdF Tk1BU0soMzEsIDE2KSkgfCBkYXRhOw0KPiArCQl9IGVsc2UgaWYgKCh3cml0ZXZhbCAmIEdFTk1B U0soMTUsIDApKSAhPSBkYXRhICYmIHJlZyAhPQ0KPiBBRElTMTY1NTBfUkVHX0NPTU1BTkQpIHsN Cj4gKwkJCWRldl9lcnIoJnNwaS0+ZGV2LA0KPiArCQkJCSJEYXRhIG5vdCB3cml0dGVuOiB3cjog MHglMDRYLCByY3Y6DQo+IDB4JTA0WFxuIiwNCj4gKwkJCQkodTE2KXdyaXRldmFsLCBkYXRhKTsN Cj4gKwkJCXJldHVybiAtRUlPOw0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgYWRpczE2NTUwX3NwaV9yZWFkKHN0cnVjdCBhZGlzICph ZGlzLCBjb25zdCB1MzIgcmVnLA0KPiArCQkJICAgICAgdTMyICp2YWx1ZSwgY29uc3QgdTMyIGxl bikNCj4gK3sNCj4gKwlyZXR1cm4gYWRpczE2NTUwX3NwaV94ZmVyKGFkaXMsIHJlZywgbGVuLCB2 YWx1ZSwgMCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgYWRpczE2NTUwX3NwaV93cml0ZShz dHJ1Y3QgYWRpcyAqYWRpcywgY29uc3QgdTMyIHJlZywNCj4gKwkJCSAgICAgICBjb25zdCB1MzIg dmFsdWUsIGNvbnN0IHUzMiBsZW4pDQo+ICt7DQo+ICsJcmV0dXJuIGFkaXMxNjU1MF9zcGlfeGZl cihhZGlzLCByZWcsIGxlbiwgTlVMTCwgdmFsdWUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3Np emVfdCBhZGlzMTY1NTBfc2hvd19maXJtd2FyZV9yZXZpc2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwN Cj4gKwkJCQkJCWNoYXIgX191c2VyICp1c2VyYnVmLA0KPiArCQkJCQkJc2l6ZV90IGNvdW50LCBs b2ZmX3QgKnBwb3MpDQo+ICt7DQo+ICsJc3RydWN0IGFkaXMxNjU1MCAqc3QgPSBmaWxlLT5wcml2 YXRlX2RhdGE7DQo+ICsJY2hhciBidWZbN107DQo+ICsJc2l6ZV90IGxlbjsNCj4gKwl1MTYgcmV2 Ow0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlyZXQgPSBhZGlzX3JlYWRfcmVnXzE2KCZzdC0+YWRp cywgQURJUzE2NTUwX1JFR19GV19SRVYsICZyZXYpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVy biByZXQ7DQo+ICsNCj4gKwlsZW4gPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV4LiV4 XG4iLCByZXYgPj4gOCwgcmV2ICYgMHhmZik7DQo+ICsNCj4gKwlyZXR1cm4gc2ltcGxlX3JlYWRf ZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsNCj4gK30NCj4gKw0K PiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWRpczE2NTUwX2Zpcm13YXJl X3JldmlzaW9uX2ZvcHMgPSB7DQo+ICsJLm9wZW4gPSBzaW1wbGVfb3BlbiwNCj4gKwkucmVhZCA9 IGFkaXMxNjU1MF9zaG93X2Zpcm13YXJlX3JldmlzaW9uLA0KPiArCS5sbHNlZWsgPSBkZWZhdWx0 X2xsc2VlaywNCj4gKwkub3duZXIgPSBUSElTX01PRFVMRSwNCj4gK307DQo+ICsNCj4gK3N0YXRp YyBzc2l6ZV90IGFkaXMxNjU1MF9zaG93X2Zpcm13YXJlX2RhdGUoc3RydWN0IGZpbGUgKmZpbGUs DQo+ICsJCQkJCSAgICBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwNCj4gKwkJCQkJICAgIHNpemVfdCBj b3VudCwgbG9mZl90ICpwcG9zKQ0KPiArew0KPiArCXN0cnVjdCBhZGlzMTY1NTAgKnN0ID0gZmls ZS0+cHJpdmF0ZV9kYXRhOw0KPiArCWNoYXIgYnVmWzEyXTsNCj4gKwlzaXplX3QgbGVuOw0KPiAr CXUzMiBkYXRlOw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlyZXQgPSBhZGlzX3JlYWRfcmVnXzMy KCZzdC0+YWRpcywgQURJUzE2NTUwX1JFR19GV19EQVRFLA0KPiAmZGF0ZSk7DQo+ICsJaWYgKHJl dCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCWxlbiA9IHNjbnByaW50ZihidWYsIHNpemVv ZihidWYpLCAiJS4yeC0lLjJ4LSUuNHhcbiIsIGRhdGUgJiAweGZmLA0KPiArCQkJKGRhdGUgPj4g OCkgJiAweGZmLCBkYXRlID4+IDE2KTsNCj4gKw0KPiArCXJldHVybiBzaW1wbGVfcmVhZF9mcm9t X2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhZGlzMTY1NTBfZmlybXdhcmVfZGF0 ZV9mb3BzID0gew0KPiArCS5vcGVuID0gc2ltcGxlX29wZW4sDQo+ICsJLnJlYWQgPSBhZGlzMTY1 NTBfc2hvd19maXJtd2FyZV9kYXRlLA0KPiArCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywNCj4g Kwkub3duZXIgPSBUSElTX01PRFVMRSwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBpbnQgYWRpczE2 NTUwX3Nob3dfc2VyaWFsX251bWJlcih2b2lkICphcmcsIHU2NCAqdmFsKQ0KPiArew0KPiArCXN0 cnVjdCBhZGlzMTY1NTAgKnN0ID0gYXJnOw0KPiArCXUzMiBzZXJpYWw7DQo+ICsJaW50IHJldDsN Cj4gKw0KPiArCXJldCA9IGFkaXNfcmVhZF9yZWdfMzIoJnN0LT5hZGlzLCBBRElTMTY1NTBfUkVH X1NFUklBTF9OVU0sDQo+ICZzZXJpYWwpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7 DQo+ICsNCj4gKwkqdmFsID0gc2VyaWFsOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICtE RUZJTkVfREVCVUdGU19BVFRSSUJVVEUoYWRpczE2NTUwX3NlcmlhbF9udW1iZXJfZm9wcywNCj4g KwkJCSBhZGlzMTY1NTBfc2hvd19zZXJpYWxfbnVtYmVyLCBOVUxMLA0KPiAiMHglLjhsbHhcbiIp Ow0KPiArDQo+ICtzdGF0aWMgaW50IGFkaXMxNjU1MF9zaG93X3Byb2R1Y3RfaWQodm9pZCAqYXJn LCB1NjQgKnZhbCkNCj4gK3sNCj4gKwlzdHJ1Y3QgYWRpczE2NTUwICpzdCA9IGFyZzsNCj4gKwl1 MTYgcHJvZF9pZDsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJcmV0ID0gYWRpc19yZWFkX3JlZ18x Nigmc3QtPmFkaXMsIEFESVMxNjU1MF9SRUdfUFJPRF9JRCwNCj4gJnByb2RfaWQpOw0KPiArCWlm IChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwkqdmFsID0gcHJvZF9pZDsNCj4gKw0K PiArCXJldHVybiAwOw0KPiArfQ0KPiArREVGSU5FX0RFQlVHRlNfQVRUUklCVVRFKGFkaXMxNjU1 MF9wcm9kdWN0X2lkX2ZvcHMsDQo+ICsJCQkgYWRpczE2NTUwX3Nob3dfcHJvZHVjdF9pZCwgTlVM TCwgIiVsbHVcbiIpOw0KPiArDQo+ICtzdGF0aWMgaW50IGFkaXMxNjU1MF9zaG93X2ZsYXNoX2Nv dW50KHZvaWQgKmFyZywgdTY0ICp2YWwpDQo+ICt7DQo+ICsJc3RydWN0IGFkaXMxNjU1MCAqc3Qg PSBhcmc7DQo+ICsJdTE2IGZsYXNoX2NvdW50Ow0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlyZXQg PSBhZGlzX3JlYWRfcmVnXzE2KCZzdC0+YWRpcywgQURJUzE2NTUwX1JFR19GTEFTSF9DTlQsDQo+ ICZmbGFzaF9jb3VudCk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiAr CSp2YWwgPSBmbGFzaF9jb3VudDsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArREVGSU5F X0RFQlVHRlNfQVRUUklCVVRFKGFkaXMxNjU1MF9mbGFzaF9jb3VudF9mb3BzLA0KPiArCQkJIGFk aXMxNjU1MF9zaG93X2ZsYXNoX2NvdW50LCBOVUxMLCAiJWxsZFxuIik7DQo+ICsNCj4gK3N0YXRp YyB2b2lkIGFkaXMxNjU1MF9kZWJ1Z2ZzX2luaXQoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikN Cj4gK3sNCj4gKwlzdHJ1Y3QgYWRpczE2NTUwICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7DQo+ ICsJc3RydWN0IGRlbnRyeSAqZCA9IGlpb19nZXRfZGVidWdmc19kZW50cnkoaW5kaW9fZGV2KTsN Cj4gKw0KPiArCWRlYnVnZnNfY3JlYXRlX2ZpbGVfdW5zYWZlKCJzZXJpYWxfbnVtYmVyIiwgMDQw MCwgZCwgc3QsDQo+ICsJCQkJICAgJmFkaXMxNjU1MF9zZXJpYWxfbnVtYmVyX2ZvcHMpOw0KPiAr CWRlYnVnZnNfY3JlYXRlX2ZpbGVfdW5zYWZlKCJwcm9kdWN0X2lkIiwgMDQwMCwgZCwgc3QsDQo+ ICsJCQkJICAgJmFkaXMxNjU1MF9wcm9kdWN0X2lkX2ZvcHMpOw0KPiArCWRlYnVnZnNfY3JlYXRl X2ZpbGUoImZpcm13YXJlX3JldmlzaW9uIiwgMDQwMCwgZCwgc3QsDQo+ICsJCQkgICAgJmFkaXMx NjU1MF9maXJtd2FyZV9yZXZpc2lvbl9mb3BzKTsNCj4gKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJm aXJtd2FyZV9kYXRlIiwgMDQwMCwgZCwgc3QsDQo+ICsJCQkgICAgJmFkaXMxNjU1MF9maXJtd2Fy ZV9kYXRlX2ZvcHMpOw0KPiArCWRlYnVnZnNfY3JlYXRlX2ZpbGVfdW5zYWZlKCJmbGFzaF9jb3Vu dCIsIDA0MDAsIGQsIHN0LA0KPiArCQkJCSAgICZhZGlzMTY1NTBfZmxhc2hfY291bnRfZm9wcyk7 DQo+ICt9DQo+ICsNCj4gK2VudW0gew0KPiArCUFESVMxNjU1MF9TWU5DX01PREVfRElSRUNULA0K PiArCUFESVMxNjU1MF9TWU5DX01PREVfU0NBTEVELA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGlu dCBhZGlzMTY1NTBfZ2V0X2ZyZXEoc3RydWN0IGFkaXMxNjU1MCAqc3QsIHUzMiAqZnJlcSkNCj4g K3sNCj4gKwlpbnQgcmV0Ow0KPiArCXUxNiBkZWMgPSAwOw0KPiArCXUzMiBzYW1wbGVfcmF0ZSA9 IHN0LT5jbGtfZnJlcV9oejsNCj4gKw0KPiArCWFkaXNfZGV2X2F1dG9fbG9jaygmc3QtPmFkaXMp Ow0KPiArDQo+ICsJaWYgKHN0LT5zeW5jX21vZGUgPT0gQURJUzE2NTUwX1NZTkNfTU9ERV9TQ0FM RUQpIHsNCj4gKwkJdTE2IHN5bmNfc2NhbGU7DQo+ICsNCj4gKwkJcmV0ID0gX19hZGlzX3JlYWRf cmVnXzE2KCZzdC0+YWRpcywNCj4gQURJUzE2NTUwX1JFR19TWU5DX1NDQUxFLCAmc3luY19zY2Fs ZSk7DQo+ICsJCWlmIChyZXQpDQo+ICsJCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJCXNhbXBsZV9y YXRlID0gc3QtPmNsa19mcmVxX2h6ICogc3luY19zY2FsZTsNCj4gKwl9DQo+ICsNCj4gKwlyZXQg PSBfX2FkaXNfcmVhZF9yZWdfMTYoJnN0LT5hZGlzLCBBRElTMTY1NTBfUkVHX0RFQ19SQVRFLA0K PiAmZGVjKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwkqZnJlcSA9 IERJVl9ST1VORF9DTE9TRVNUKHNhbXBsZV9yYXRlLCBkZWMgKyAxKTsNCj4gKw0KPiArCXJldHVy biAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGFkaXMxNjU1MF9zZXRfZnJlcV9oeihzdHJ1 Y3QgYWRpczE2NTUwICpzdCwgdTMyIGZyZXFfaHopDQo+ICt7DQo+ICsJdTE2IGRlYzsNCj4gKwlp bnQgcmV0Ow0KPiArCXUzMiBzYW1wbGVfcmF0ZSA9IHN0LT5jbGtfZnJlcV9oejsNCj4gKwkvKg0K PiArCSAqIFRoZSBvcHRpbWFsIHNhbXBsZSByYXRlIGZvciB0aGUgc3VwcG9ydGVkIElNVXMgaXMg YmV0d2Vlbg0KPiArCSAqIGludF9jbGsgLSAxMDAwIGFuZCBpbnRfY2xrICsgNTAwLg0KPiArCSAq Lw0KPiArCXUzMiBtYXhfc2FtcGxlX3JhdGUgPSBzdC0+aW5mby0+aW50X2NsayAqIDEwMDAgKyA1 MDAwMDA7DQo+ICsJdTMyIG1pbl9zYW1wbGVfcmF0ZSA9IHN0LT5pbmZvLT5pbnRfY2xrICogMTAw MCAtIDEwMDAwMDA7DQo+ICsNCj4gKwlpZiAoIWZyZXFfaHopDQo+ICsJCXJldHVybiAtRUlOVkFM Ow0KPiArDQo+ICsJYWRpc19kZXZfYXV0b19sb2NrKCZzdC0+YWRpcyk7DQo+ICsNCj4gKwlpZiAo c3QtPnN5bmNfbW9kZSA9PSBBRElTMTY1NTBfU1lOQ19NT0RFX1NDQUxFRCkgew0KPiArCQl1bnNp Z25lZCBsb25nIHNjYWxlZF9yYXRlID0gbGNtKHN0LT5jbGtfZnJlcV9oeiwgZnJlcV9oeik7DQo+ ICsJCWludCBzeW5jX3NjYWxlOw0KPiArDQo+ICsJCWlmIChzY2FsZWRfcmF0ZSA+IG1heF9zYW1w bGVfcmF0ZSkNCj4gKwkJCXNjYWxlZF9yYXRlID0gbWF4X3NhbXBsZV9yYXRlIC8gc3QtPmNsa19m cmVxX2h6ICogc3QtDQo+ID5jbGtfZnJlcV9oejsNCj4gKwkJZWxzZQ0KPiArCQkJc2NhbGVkX3Jh dGUgPSBtYXhfc2FtcGxlX3JhdGUgLyBzY2FsZWRfcmF0ZSAqDQo+IHNjYWxlZF9yYXRlOw0KPiAr DQo+ICsJCWlmIChzY2FsZWRfcmF0ZSA8IG1pbl9zYW1wbGVfcmF0ZSkNCj4gKwkJCXNjYWxlZF9y YXRlID0gcm91bmR1cChtaW5fc2FtcGxlX3JhdGUsIHN0LQ0KPiA+Y2xrX2ZyZXFfaHopOw0KPiAr DQo+ICsJCXN5bmNfc2NhbGUgPSBzY2FsZWRfcmF0ZSAvIHN0LT5jbGtfZnJlcV9oejsNCj4gKwkJ cmV0ID0gX19hZGlzX3dyaXRlX3JlZ18xNigmc3QtPmFkaXMsDQo+IEFESVMxNjU1MF9SRUdfU1lO Q19TQ0FMRSwNCj4gKwkJCQkJICBzeW5jX3NjYWxlKTsNCj4gKwkJaWYgKHJldCkNCj4gKwkJCXJl dHVybiByZXQ7DQo+ICsNCj4gKwkJc2FtcGxlX3JhdGUgPSBzY2FsZWRfcmF0ZTsNCj4gKwl9DQo+ ICsNCj4gKwlkZWMgPSBESVZfUk9VTkRfQ0xPU0VTVChzYW1wbGVfcmF0ZSwgZnJlcV9oeik7DQo+ ICsNCj4gKwlpZiAoZGVjKQ0KPiArCQlkZWMtLTsNCj4gKw0KPiArCWRlYyA9IG1pbihkZWMsIHN0 LT5pbmZvLT5tYXhfZGVjKTsNCj4gKw0KPiArCXJldHVybiBfX2FkaXNfd3JpdGVfcmVnXzE2KCZz dC0+YWRpcywgQURJUzE2NTUwX1JFR19ERUNfUkFURSwNCj4gZGVjKTsNCj4gK30NCj4gKw0KPiAr c3RhdGljIGludCBhZGlzMTY1NTBfZ2V0X2FjY2xfZmlsdGVyX2ZyZXEoc3RydWN0IGFkaXMxNjU1 MCAqc3QsIGludCAqZnJlcV9oeikNCj4gK3sNCj4gKwlpbnQgcmV0Ow0KPiArCXUxNiBjb25maWcg PSAwOw0KPiArDQo+ICsJcmV0ID0gYWRpc19yZWFkX3JlZ18xNigmc3QtPmFkaXMsIEFESVMxNjU1 MF9SRUdfQ09ORklHLA0KPiAmY29uZmlnKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gLUVJ TlZBTDsNCj4gKw0KPiArCWlmIChGSUVMRF9HRVQoQURJUzE2NTUwX0FDQ0xfRklSX0VOX01BU0ss IGNvbmZpZykpDQo+ICsJCSpmcmVxX2h6ID0gMTAwOw0KPiArCWVsc2UNCj4gKwkJKmZyZXFfaHog PSAwOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgYWRpczE2 NTUwX3NldF9hY2NsX2ZpbHRlcl9mcmVxKHN0cnVjdCBhZGlzMTY1NTAgKnN0LCBpbnQgZnJlcV9o eikNCj4gK3sNCj4gKwl1OCBlbiA9IGZyZXFfaHogPyAxIDogMDsNCj4gKw0KPiArCXJldHVybiBf X2FkaXNfdXBkYXRlX2JpdHMoJnN0LT5hZGlzLCBBRElTMTY1NTBfUkVHX0NPTkZJRywNCj4gKwkJ CQkgIEFESVMxNjU1MF9BQ0NMX0ZJUl9FTl9NQVNLLA0KPiArDQo+IEZJRUxEX1BSRVAoQURJUzE2 NTUwX0FDQ0xfRklSX0VOX01BU0ssIGVuKSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgYWRp czE2NTUwX2dldF9neXJvX2ZpbHRlcl9mcmVxKHN0cnVjdCBhZGlzMTY1NTAgKnN0LCBpbnQgKmZy ZXFfaHopDQo+ICt7DQo+ICsJaW50IHJldDsNCj4gKwl1MTYgY29uZmlnID0gMDsNCj4gKw0KPiAr CXJldCA9IGFkaXNfcmVhZF9yZWdfMTYoJnN0LT5hZGlzLCBBRElTMTY1NTBfUkVHX0NPTkZJRywN Cj4gJmNvbmZpZyk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4g KwlpZiAoRklFTERfR0VUKEFESVMxNjU1MF9HWVJPX0ZJUl9FTl9NQVNLLCBjb25maWcpKQ0KPiAr CQkqZnJlcV9oeiA9IDEwMDsNCj4gKwllbHNlDQo+ICsJCSpmcmVxX2h6ID0gMDsNCj4gKw0KPiAr CXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGFkaXMxNjU1MF9zZXRfZ3lyb19m aWx0ZXJfZnJlcShzdHJ1Y3QgYWRpczE2NTUwICpzdCwgaW50IGZyZXFfaHopDQo+ICt7DQo+ICsJ dTggZW4gPSBmcmVxX2h6ID8gMSA6IDA7DQo+ICsNCj4gKwlyZXR1cm4gX19hZGlzX3VwZGF0ZV9i aXRzKCZzdC0+YWRpcywgQURJUzE2NTUwX1JFR19DT05GSUcsDQo+ICsJCQkJICBBRElTMTY1NTBf R1lST19GSVJfRU5fTUFTSywNCj4gKw0KPiBGSUVMRF9QUkVQKEFESVMxNjU1MF9HWVJPX0ZJUl9F Tl9NQVNLLCBlbikpOw0KPiArfQ0KPiArDQo+ICtlbnVtIHsNCj4gKwlBRElTMTY1NTBfU0NBTl9U RU1QLA0KPiArCUFESVMxNjU1MF9TQ0FOX0dZUk9fWCwNCj4gKwlBRElTMTY1NTBfU0NBTl9HWVJP X1ksDQo+ICsJQURJUzE2NTUwX1NDQU5fR1lST19aLA0KPiArCUFESVMxNjU1MF9TQ0FOX0FDQ0VM X1gsDQo+ICsJQURJUzE2NTUwX1NDQU5fQUNDRUxfWSwNCj4gKwlBRElTMTY1NTBfU0NBTl9BQ0NF TF9aLA0KPiArCUFESVMxNjU1MF9TQ0FOX0RFTFRBTkdfWCwNCj4gKwlBRElTMTY1NTBfU0NBTl9E RUxUQU5HX1ksDQo+ICsJQURJUzE2NTUwX1NDQU5fREVMVEFOR19aLA0KPiArCUFESVMxNjU1MF9T Q0FOX0RFTFRWRUxfWCwNCj4gKwlBRElTMTY1NTBfU0NBTl9ERUxUVkVMX1ksDQo+ICsJQURJUzE2 NTUwX1NDQU5fREVMVFZFTF9aLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHUzMiBhZGlz MTY1NTBfY2FsaWJfYmlhc1tdID0gew0KPiArCVtBRElTMTY1NTBfU0NBTl9HWVJPX1hdID0gQURJ UzE2NTUwX1JFR19YX0dZUk9fQklBUywNCj4gKwlbQURJUzE2NTUwX1NDQU5fR1lST19ZXSA9IEFE SVMxNjU1MF9SRUdfWV9HWVJPX0JJQVMsDQo+ICsJW0FESVMxNjU1MF9TQ0FOX0dZUk9fWl0gPSBB RElTMTY1NTBfUkVHX1pfR1lST19CSUFTLA0KPiArCVtBRElTMTY1NTBfU0NBTl9BQ0NFTF9YXSA9 IEFESVMxNjU1MF9SRUdfWF9BQ0NFTF9CSUFTLA0KPiArCVtBRElTMTY1NTBfU0NBTl9BQ0NFTF9Z XSA9IEFESVMxNjU1MF9SRUdfWV9BQ0NFTF9CSUFTLA0KPiArCVtBRElTMTY1NTBfU0NBTl9BQ0NF TF9aXSA9IEFESVMxNjU1MF9SRUdfWl9BQ0NFTF9CSUFTLA0KPiArDQo+ICt9Ow0KPiArDQo+ICtz dGF0aWMgY29uc3QgdTMyIGFkaXMxNjU1MF9jYWxpYl9zY2FsZVtdID0gew0KPiArCVtBRElTMTY1 NTBfU0NBTl9HWVJPX1hdID0gQURJUzE2NTUwX1JFR19YX0dZUk9fU0NBTEUsDQo+ICsJW0FESVMx NjU1MF9TQ0FOX0dZUk9fWV0gPSBBRElTMTY1NTBfUkVHX1lfR1lST19TQ0FMRSwNCj4gKwlbQURJ UzE2NTUwX1NDQU5fR1lST19aXSA9IEFESVMxNjU1MF9SRUdfWl9HWVJPX1NDQUxFLA0KPiArCVtB RElTMTY1NTBfU0NBTl9BQ0NFTF9YXSA9IEFESVMxNjU1MF9SRUdfWF9BQ0NFTF9TQ0FMRSwNCj4g KwlbQURJUzE2NTUwX1NDQU5fQUNDRUxfWV0gPSBBRElTMTY1NTBfUkVHX1lfQUNDRUxfU0NBTEUs DQo+ICsJW0FESVMxNjU1MF9TQ0FOX0FDQ0VMX1pdID0gQURJUzE2NTUwX1JFR19aX0FDQ0VMX1ND QUxFLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGludCBhZGlzMTY1NTBfcmVhZF9yYXcoc3RydWN0 IGlpb19kZXYgKmluZGlvX2RldiwNCj4gKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBpaW9fY2hhbl9z cGVjICpjaGFuLA0KPiArCQkJICAgICAgaW50ICp2YWwsIGludCAqdmFsMiwgbG9uZyBpbmZvKQ0K PiArew0KPiArCXN0cnVjdCBhZGlzMTY1NTAgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsNCj4g Kwljb25zdCBpbnQgaWR4ID0gY2hhbi0+c2Nhbl9pbmRleDsNCj4gKwl1MTYgc2NhbGU7DQo+ICsJ aW50IHJldDsNCj4gKwl1MzIgdG1wOw0KPiArDQo+ICsJc3dpdGNoIChpbmZvKSB7DQo+ICsJY2Fz ZSBJSU9fQ0hBTl9JTkZPX1JBVzoNCj4gKwkJcmV0dXJuIGFkaXNfc2luZ2xlX2NvbnZlcnNpb24o aW5kaW9fZGV2LCBjaGFuLCAwLCB2YWwpOw0KPiArCWNhc2UgSUlPX0NIQU5fSU5GT19TQ0FMRToN Cj4gKwkJc3dpdGNoIChjaGFuLT50eXBlKSB7DQo+ICsJCWNhc2UgSUlPX0FOR0xfVkVMOg0KPiAr CQkJKnZhbCA9IHN0LT5pbmZvLT5neXJvX21heF92YWw7DQo+ICsJCQkqdmFsMiA9IHN0LT5pbmZv LT5neXJvX21heF9zY2FsZTsNCj4gKwkJCXJldHVybiBJSU9fVkFMX0ZSQUNUSU9OQUw7DQo+ICsJ CWNhc2UgSUlPX0FDQ0VMOg0KPiArCQkJKnZhbCA9IHN0LT5pbmZvLT5hY2NlbF9tYXhfdmFsOw0K PiArCQkJKnZhbDIgPSBzdC0+aW5mby0+YWNjZWxfbWF4X3NjYWxlOw0KPiArCQkJcmV0dXJuIElJ T19WQUxfRlJBQ1RJT05BTDsNCj4gKwkJY2FzZSBJSU9fVEVNUDoNCj4gKwkJCSp2YWwgPSBzdC0+ aW5mby0+dGVtcF9zY2FsZTsNCj4gKwkJCXJldHVybiBJSU9fVkFMX0lOVDsNCj4gKwkJY2FzZSBJ SU9fREVMVEFfQU5HTDoNCj4gKwkJCSp2YWwgPSBzdC0+aW5mby0+ZGVsdGFuZ19tYXhfdmFsOw0K PiArCQkJKnZhbDIgPSAzMTsNCj4gKwkJCXJldHVybiBJSU9fVkFMX0ZSQUNUSU9OQUxfTE9HMjsN Cj4gKwkJY2FzZSBJSU9fREVMVEFfVkVMT0NJVFk6DQo+ICsJCQkqdmFsID0gc3QtPmluZm8tPmRl bHR2ZWxfbWF4X3ZhbDsNCj4gKwkJCSp2YWwyID0gMzE7DQo+ICsJCQlyZXR1cm4gSUlPX1ZBTF9G UkFDVElPTkFMX0xPRzI7DQo+ICsJCWRlZmF1bHQ6DQo+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4g KwkJfQ0KPiArCWNhc2UgSUlPX0NIQU5fSU5GT19PRkZTRVQ6DQo+ICsJCS8qIHRlbXBlcmF0dXJl IGNlbnRlcmVkIGF0IDI1wrBDICovDQo+ICsJCSp2YWwgPSBESVZfUk9VTkRfQ0xPU0VTVCgyNTAw MCwgc3QtPmluZm8tPnRlbXBfc2NhbGUpOw0KPiArCQlyZXR1cm4gSUlPX1ZBTF9JTlQ7DQo+ICsJ Y2FzZSBJSU9fQ0hBTl9JTkZPX0NBTElCQklBUzoNCj4gKwkJcmV0ID0gYWRpc19yZWFkX3JlZ18z Migmc3QtPmFkaXMsDQo+ICsJCQkJICAgICAgIGFkaXMxNjU1MF9jYWxpYl9iaWFzW2lkeF0sIHZh bCk7DQo+ICsJCWlmIChyZXQpDQo+ICsJCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJCXJldHVybiBJ SU9fVkFMX0lOVDsNCj4gKwljYXNlIElJT19DSEFOX0lORk9fQ0FMSUJTQ0FMRToNCj4gKwkJcmV0 ID0gYWRpc19yZWFkX3JlZ18xNigmc3QtPmFkaXMsDQo+ICsJCQkJICAgICAgIGFkaXMxNjU1MF9j YWxpYl9zY2FsZVtpZHhdLCAmc2NhbGUpOw0KPiArCQlpZiAocmV0KQ0KPiArCQkJcmV0dXJuIHJl dDsNCj4gKw0KPiArCQkqdmFsID0gc2NhbGU7DQo+ICsJCXJldHVybiBJSU9fVkFMX0lOVDsNCj4g KwljYXNlIElJT19DSEFOX0lORk9fU0FNUF9GUkVROg0KPiArCQlyZXQgPSBhZGlzMTY1NTBfZ2V0 X2ZyZXEoc3QsICZ0bXApOw0KPiArCQlpZiAocmV0KQ0KPiArCQkJcmV0dXJuIHJldDsNCj4gKw0K PiArCQkqdmFsID0gdG1wIC8gMTAwMDsNCj4gKwkJKnZhbDIgPSAodG1wICUgMTAwMCkgKiAxMDAw Ow0KPiArCQlyZXR1cm4gSUlPX1ZBTF9JTlRfUExVU19NSUNSTzsNCj4gKwljYXNlIElJT19DSEFO X0lORk9fTE9XX1BBU1NfRklMVEVSXzNEQl9GUkVRVUVOQ1k6DQo+ICsJCXN3aXRjaCAoY2hhbi0+ dHlwZSkgew0KPiArCQljYXNlIElJT19BTkdMX1ZFTDoNCj4gKwkJCXJldCA9IGFkaXMxNjU1MF9n ZXRfYWNjbF9maWx0ZXJfZnJlcShzdCwgdmFsKTsNCj4gKwkJCWlmIChyZXQpDQo+ICsJCQkJcmV0 dXJuIHJldDsNCj4gKwkJCXJldHVybiBJSU9fVkFMX0lOVDsNCj4gKwkJY2FzZSBJSU9fQUNDRUw6 DQo+ICsJCQlyZXQgPSBhZGlzMTY1NTBfZ2V0X2d5cm9fZmlsdGVyX2ZyZXEoc3QsIHZhbCk7DQo+ ICsJCQlpZiAocmV0KQ0KPiArCQkJCXJldHVybiByZXQ7DQo+ICsJCQlyZXR1cm4gSUlPX1ZBTF9J TlQ7DQo+ICsJCWRlZmF1bHQ6DQo+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwkJfQ0KPiArCWRl ZmF1bHQ6DQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGlj IGludCBhZGlzMTY1NTBfd3JpdGVfcmF3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsDQo+ICsJ CQkgICAgICAgY29uc3Qgc3RydWN0IGlpb19jaGFuX3NwZWMgKmNoYW4sDQo+ICsJCQkgICAgICAg aW50IHZhbCwgaW50IHZhbDIsIGxvbmcgaW5mbykNCj4gK3sNCj4gKwlzdHJ1Y3QgYWRpczE2NTUw ICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7DQo+ICsJY29uc3QgaW50IGlkeCA9IGNoYW4tPnNj YW5faW5kZXg7DQo+ICsJdTMyIHRtcDsNCj4gKw0KPiArCXN3aXRjaCAoaW5mbykgew0KPiArCWNh c2UgSUlPX0NIQU5fSU5GT19TQU1QX0ZSRVE6DQo+ICsJCXRtcCA9IHZhbCAqIDEwMDAgKyB2YWwy IC8gMTAwMDsNCj4gKwkJcmV0dXJuIGFkaXMxNjU1MF9zZXRfZnJlcV9oeihzdCwgdG1wKTsNCj4g KwljYXNlIElJT19DSEFOX0lORk9fQ0FMSUJCSUFTOg0KPiArCQlyZXR1cm4gYWRpc193cml0ZV9y ZWdfMzIoJnN0LT5hZGlzLA0KPiBhZGlzMTY1NTBfY2FsaWJfYmlhc1tpZHhdLA0KPiArCQkJCQkg dmFsKTsNCj4gKwljYXNlIElJT19DSEFOX0lORk9fQ0FMSUJTQ0FMRToNCj4gKwkJcmV0dXJuIGFk aXNfd3JpdGVfcmVnXzE2KCZzdC0+YWRpcywNCj4gYWRpczE2NTUwX2NhbGliX3NjYWxlW2lkeF0s DQo+ICsJCQkJCSB2YWwpOw0KPiArCWNhc2UgSUlPX0NIQU5fSU5GT19MT1dfUEFTU19GSUxURVJf M0RCX0ZSRVFVRU5DWToNCj4gKwkJc3dpdGNoIChjaGFuLT50eXBlKSB7DQo+ICsJCWNhc2UgSUlP X0FOR0xfVkVMOg0KPiArCQkJcmV0dXJuIGFkaXMxNjU1MF9zZXRfYWNjbF9maWx0ZXJfZnJlcShz dCwgdmFsKTsNCj4gKwkJY2FzZSBJSU9fQUNDRUw6DQo+ICsJCQlyZXR1cm4gYWRpczE2NTUwX3Nl dF9neXJvX2ZpbHRlcl9mcmVxKHN0LCB2YWwpOw0KPiArCQlkZWZhdWx0Og0KPiArCQkJcmV0dXJu IC1FSU5WQUw7DQo+ICsJCX0NCj4gKwlkZWZhdWx0Og0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4g Kwl9DQo+ICt9DQo+ICsNCj4gKyNkZWZpbmUgQURJUzE2NTUwX01PRF9DSEFOKF90eXBlLCBfbW9k LCBfYWRkcmVzcywgX3NpKSBcDQo+ICsJeyBcDQo+ICsJCS50eXBlID0gKF90eXBlKSwgXA0KPiAr CQkubW9kaWZpZWQgPSAxLCBcDQo+ICsJCS5jaGFubmVsMiA9IChfbW9kKSwgXA0KPiArCQkuaW5m b19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUkFXKSB8IFwNCj4gKwkJCUJJVChJ SU9fQ0hBTl9JTkZPX0NBTElCQklBUykgfCBcDQo+ICsJCQlCSVQoSUlPX0NIQU5fSU5GT19DQUxJ QlNDQUxFKSwgXA0KPiArCQkuaW5mb19tYXNrX3NoYXJlZF9ieV90eXBlID0gQklUKElJT19DSEFO X0lORk9fU0NBTEUpIHwgXA0KPiArDQo+IEJJVChJSU9fQ0hBTl9JTkZPX0xPV19QQVNTX0ZJTFRF Ul8zREJfRlJFUVVFTkNZKSwgXA0KPiArCQkuaW5mb19tYXNrX3NoYXJlZF9ieV9hbGwgPQ0KPiBC SVQoSUlPX0NIQU5fSU5GT19TQU1QX0ZSRVEpLCBcDQo+ICsJCS5hZGRyZXNzID0gKF9hZGRyZXNz KSwgXA0KPiArCQkuc2Nhbl9pbmRleCA9IChfc2kpLCBcDQo+ICsJCS5zY2FuX3R5cGUgPSB7IFwN Cj4gKwkJCS5zaWduID0gJ3MnLCBcDQo+ICsJCQkucmVhbGJpdHMgPSAzMiwgXA0KPiArCQkJLnN0 b3JhZ2ViaXRzID0gMzIsIFwNCj4gKwkJCS5lbmRpYW5uZXNzID0gSUlPX0JFLCBcDQo+ICsJCX0s IFwNCj4gKwl9DQo+ICsNCj4gKyNkZWZpbmUgQURJUzE2NTUwX0dZUk9fQ0hBTk5FTChfbW9kKSBc DQo+ICsJQURJUzE2NTUwX01PRF9DSEFOKElJT19BTkdMX1ZFTCwgSUlPX01PRF8gIyMgX21vZCwg XA0KPiArCUFESVMxNjU1MF9SRUdfICMjIF9tb2QgIyMgX0dZUk8sIEFESVMxNjU1MF9TQ0FOX0dZ Uk9fICMjDQo+IF9tb2QpDQo+ICsNCj4gKyNkZWZpbmUgQURJUzE2NTUwX0FDQ0VMX0NIQU5ORUwo X21vZCkgXA0KPiArCUFESVMxNjU1MF9NT0RfQ0hBTihJSU9fQUNDRUwsIElJT19NT0RfICMjIF9t b2QsIFwNCj4gKwlBRElTMTY1NTBfUkVHXyAjIyBfbW9kICMjIF9BQ0NFTCwgQURJUzE2NTUwX1ND QU5fQUNDRUxfICMjDQo+IF9tb2QpDQo+ICsNCj4gKyNkZWZpbmUgQURJUzE2NTUwX1RFTVBfQ0hB Tk5FTCgpIHsgXA0KPiArCQkudHlwZSA9IElJT19URU1QLCBcDQo+ICsJCS5pbmRleGVkID0gMSwg XA0KPiArCQkuY2hhbm5lbCA9IDAsIFwNCj4gKwkJLmluZm9fbWFza19zZXBhcmF0ZSA9IEJJVChJ SU9fQ0hBTl9JTkZPX1JBVykgfCBcDQo+ICsJCQlCSVQoSUlPX0NIQU5fSU5GT19TQ0FMRSkgfA0K PiBCSVQoSUlPX0NIQU5fSU5GT19PRkZTRVQpLCBcDQo+ICsJCS5pbmZvX21hc2tfc2hhcmVkX2J5 X2FsbCA9DQo+IEJJVChJSU9fQ0hBTl9JTkZPX1NBTVBfRlJFUSksIFwNCj4gKwkJLmFkZHJlc3Mg PSBBRElTMTY1NTBfUkVHX1RFTVAsIFwNCj4gKwkJLnNjYW5faW5kZXggPSBBRElTMTY1NTBfU0NB Tl9URU1QLCBcDQo+ICsJCS5zY2FuX3R5cGUgPSB7IFwNCj4gKwkJCS5zaWduID0gJ3MnLCBcDQo+ ICsJCQkucmVhbGJpdHMgPSAxNiwgXA0KPiArCQkJLnN0b3JhZ2ViaXRzID0gMzIsIFwNCj4gKwkJ CS5lbmRpYW5uZXNzID0gSUlPX0JFLCBcDQo+ICsJCX0sIFwNCj4gKwl9DQo+ICsNCj4gKyNkZWZp bmUgQURJUzE2NTUwX01PRF9DSEFOX0RFTFRBKF90eXBlLCBfbW9kLCBfYWRkcmVzcywgX3NpKSB7 IFwNCj4gKwkJLnR5cGUgPSAoX3R5cGUpLCBcDQo+ICsJCS5tb2RpZmllZCA9IDEsIFwNCj4gKwkJ LmNoYW5uZWwyID0gKF9tb2QpLCBcDQo+ICsJCS5pbmZvX21hc2tfc2VwYXJhdGUgPSBCSVQoSUlP X0NIQU5fSU5GT19SQVcpLCBcDQo+ICsJCS5pbmZvX21hc2tfc2hhcmVkX2J5X3R5cGUgPSBCSVQo SUlPX0NIQU5fSU5GT19TQ0FMRSksIFwNCj4gKwkJLmluZm9fbWFza19zaGFyZWRfYnlfYWxsID0N Cj4gQklUKElJT19DSEFOX0lORk9fU0FNUF9GUkVRKSwgXA0KPiArCQkuYWRkcmVzcyA9IChfYWRk cmVzcyksIFwNCj4gKwkJLnNjYW5faW5kZXggPSBfc2ksIFwNCj4gKwkJLnNjYW5fdHlwZSA9IHsg XA0KPiArCQkJLnNpZ24gPSAncycsIFwNCj4gKwkJCS5yZWFsYml0cyA9IDMyLCBcDQo+ICsJCQku c3RvcmFnZWJpdHMgPSAzMiwgXA0KPiArCQkJLmVuZGlhbm5lc3MgPSBJSU9fQkUsIFwNCj4gKwkJ fSwgXA0KPiArCX0NCj4gKw0KPiArI2RlZmluZSBBRElTMTY1NTBfREVMVEFOR19DSEFOKF9tb2Qp IFwNCj4gKwlBRElTMTY1NTBfTU9EX0NIQU5fREVMVEEoSUlPX0RFTFRBX0FOR0wsIElJT19NT0Rf ICMjDQo+IF9tb2QsIFwNCj4gKwkJCSAgIEFESVMxNjU1MF9SRUdfICMjIF9tb2QgIyMgX0RFTFRB TkdfTCwNCj4gQURJUzE2NTUwX1NDQU5fREVMVEFOR18gIyMgX21vZCkNCj4gKw0KPiArI2RlZmlu ZSBBRElTMTY1NTBfREVMVFZFTF9DSEFOKF9tb2QpIFwNCj4gKwlBRElTMTY1NTBfTU9EX0NIQU5f REVMVEEoSUlPX0RFTFRBX1ZFTE9DSVRZLCBJSU9fTU9EXyAjIw0KPiBfbW9kLCBcDQo+ICsJCQkg ICBBRElTMTY1NTBfUkVHXyAjIyBfbW9kICMjIF9ERUxUVkVMX0wsDQo+IEFESVMxNjU1MF9TQ0FO X0RFTFRWRUxfICMjIF9tb2QpDQo+ICsNCj4gKyNkZWZpbmUgQURJUzE2NTUwX0RFTFRBTkdfQ0hB Tl9OT19TQ0FOKF9tb2QpIFwNCj4gKwlBRElTMTY1NTBfTU9EX0NIQU5fREVMVEEoSUlPX0RFTFRB X0FOR0wsIElJT19NT0RfICMjDQo+IF9tb2QsIFwNCj4gKwkJCSAgIEFESVMxNjU1MF9SRUdfICMj IF9tb2QgIyMgX0RFTFRBTkdfTCwgLTEpDQo+ICsNCj4gKyNkZWZpbmUgQURJUzE2NTUwX0RFTFRW RUxfQ0hBTl9OT19TQ0FOKF9tb2QpIFwNCj4gKwlBRElTMTY1NTBfTU9EX0NIQU5fREVMVEEoSUlP X0RFTFRBX1ZFTE9DSVRZLCBJSU9fTU9EXyAjIw0KPiBfbW9kLCBcDQo+ICsJCQkgICBBRElTMTY1 NTBfUkVHXyAjIyBfbW9kICMjIF9ERUxUVkVMX0wsIC0xKQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IGlpb19jaGFuX3NwZWMgYWRpczE2NTUwX2NoYW5uZWxzW10gPSB7DQo+ICsJQURJUzE2 NTUwX1RFTVBfQ0hBTk5FTCgpLA0KPiArCUFESVMxNjU1MF9HWVJPX0NIQU5ORUwoWCksDQo+ICsJ QURJUzE2NTUwX0dZUk9fQ0hBTk5FTChZKSwNCj4gKwlBRElTMTY1NTBfR1lST19DSEFOTkVMKFop LA0KPiArCUFESVMxNjU1MF9BQ0NFTF9DSEFOTkVMKFgpLA0KPiArCUFESVMxNjU1MF9BQ0NFTF9D SEFOTkVMKFkpLA0KPiArCUFESVMxNjU1MF9BQ0NFTF9DSEFOTkVMKFopLA0KPiArCUFESVMxNjU1 MF9ERUxUQU5HX0NIQU4oWCksDQo+ICsJQURJUzE2NTUwX0RFTFRBTkdfQ0hBTihZKSwNCj4gKwlB RElTMTY1NTBfREVMVEFOR19DSEFOKFopLA0KPiArCUFESVMxNjU1MF9ERUxUVkVMX0NIQU4oWCks DQo+ICsJQURJUzE2NTUwX0RFTFRWRUxfQ0hBTihZKSwNCj4gKwlBRElTMTY1NTBfREVMVFZFTF9D SEFOKFopLA0KPiArCUlJT19DSEFOX1NPRlRfVElNRVNUQU1QKDEzKSwNCj4gK307DQo+ICsNCj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRpczE2NTUwX3N5bmMgYWRpczE2NTUwX3N5bmNfbW9kZXNb XSA9IHsNCj4gKwl7IEFESVMxNjU1MF9TWU5DX01PREVfRElSRUNULCAzMDAwLCA0NTAwIH0sDQo+ ICsJeyBBRElTMTY1NTBfU1lOQ19NT0RFX1NDQUxFRCwgMSwgMTI4IH0sDQo+ICt9Ow0KPiArDQo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IGFkaXMxNjU1MF9jaGlwX2luZm8gYWRpczE2NTUwX2NoaXBf aW5mbyA9IHsNCj4gKwkubnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShhZGlzMTY1NTBfY2hhbm5l bHMpLA0KPiArCS5jaGFubmVscyA9IGFkaXMxNjU1MF9jaGFubmVscywNCj4gKwkubmFtZSA9ICJh ZGlzMTY1NTAiLA0KPiArCS5neXJvX21heF92YWwgPSAxLA0KPiArCS5neXJvX21heF9zY2FsZSA9 IElJT19SQURfVE9fREVHUkVFKDgwIDw8IDE2KSwNCj4gKwkuYWNjZWxfbWF4X3ZhbCA9IDEsDQo+ ICsJLmFjY2VsX21heF9zY2FsZSA9IElJT19NX1NfMl9UT19HKDEwMjQwMDAwMCksDQo+ICsJLnRl bXBfc2NhbGUgPSA0LA0KPiArCS5kZWx0YW5nX21heF92YWwgPSBJSU9fREVHUkVFX1RPX1JBRCg3 MjApLA0KPiArCS5kZWx0dmVsX21heF92YWwgPSAxMjUsDQo+ICsJLmludF9jbGsgPSA0MDAwLA0K PiArCS5tYXhfZGVjID0gNDA5NSwNCj4gKwkuc3luY19tb2RlID0gYWRpczE2NTUwX3N5bmNfbW9k ZXMsDQo+ICsJLm51bV9zeW5jID0gQVJSQVlfU0laRShhZGlzMTY1NTBfc3luY19tb2RlcyksDQo+ ICt9Ow0KPiArDQo+ICtzdGF0aWMgdTMyIGFkaXMxNjU1MF92YWxpZGF0ZV9jcmMoX19iZTMyICpi dWZmZXIsIGNvbnN0IHU4IG5fZWxlbSkNCj4gK3sNCj4gKwlpbnQgaTsNCj4gKwl1MzIgY3JjX2Nh bGM7DQo+ICsJdTMyIGNyY19idWZbQURJUzE2NTUwX0JVUlNUX05fRUxFTSAtIDJdOw0KPiArCXUz MiBjcmMgPSBiZTMyX3RvX2NwdShidWZmZXJbQURJUzE2NTUwX0JVUlNUX05fRUxFTSAtIDFdKTsN Cj4gKwkvKg0KPiArCSAqIFRoZSBjcmMgY2FsY3VsYXRpb24gb2YgdGhlIGRhdGEgaXMgZG9uZSBp biBsaXR0bGUgZW5kaWFuLiBIZW5jZSwgd2UNCj4gKwkgKiBhbHdheXMgc3dhcCB0aGUgMzJiaXQg ZWxlbWVudHMgbWFraW5nIHN1cmUgdGhhdCB0aGUgZGF0YSBMU0IgaXMNCj4gKwkgKiBhbHdheXMg b24gYWRkcmVzcyAwLi4uDQo+ICsJICovDQo+ICsJZm9yIChpID0gMDsgaSA8IG5fZWxlbTsgaSsr KQ0KPiArCQljcmNfYnVmW2ldID0gYmUzMl90b19jcHUoYnVmW2ldKTsNCltSb2JlcnQgQnVkYWld IA0KRmFpbGVkIHRvIGNoYW5nZSBidWYgdG8gYnVmZmVyLCBhY2NvcmRpbmcgdG8gdGhlIG5ldyBm dW5jdGlvbi4gV2lsbCB3YWl0IG9uIG5leHQgcmV2aWV3cyBhbmQgd2lsbCBtb2RpZnkgaW4gdGhl IHVwY29taW5nIHZlcnNpb24uDQoNCkJlc3QgcmVnYXJkcywNClJvYmVydCBCLg0KPiArDQo+ICsJ Y3JjX2NhbGMgPSBjcmMzMih+MCwgY3JjX2J1Ziwgbl9lbGVtICogNCk7DQo+ICsJY3JjX2NhbGMg Xj0gfjA7DQo+ICsNCj4gKwlyZXR1cm4gKGNyY19jYWxjID09IGNyYyk7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpcnFyZXR1cm5fdCBhZGlzMTY1NTBfdHJpZ2dlcl9oYW5kbGVyKGludCBpcnEsIHZv aWQgKnApDQo+ICt7DQo+ICsJdTMyIGNyYzsNCj4gKwlpbnQgcmV0Ow0KPiArCXUxNiBkdW1teTsN Cj4gKwlib29sIHZhbGlkOw0KPiArCXN0cnVjdCBpaW9fcG9sbF9mdW5jICpwZiA9IHA7DQo+ICsJ X19iZTMyIGRhdGFbQURJUzE2NTUwX01BWF9TQ0FOX0RBVEFdOw0KPiArCXN0cnVjdCBpaW9fZGV2 ICppbmRpb19kZXYgPSBwZi0+aW5kaW9fZGV2Ow0KPiArCXN0cnVjdCBhZGlzMTY1NTAgKnN0ID0g aWlvX3ByaXYoaW5kaW9fZGV2KTsNCj4gKwlzdHJ1Y3QgYWRpcyAqYWRpcyA9IGlpb19kZXZpY2Vf Z2V0X2RydmRhdGEoaW5kaW9fZGV2KTsNCj4gKwlfX2JlMzIgKmJ1ZmZlciA9IChfX2JlMzIgKilz dC0+YnVmZmVyOw0KPiArDQo+ICsJcmV0ID0gc3BpX3N5bmMoYWRpcy0+c3BpLCAmYWRpcy0+bXNn KTsNCj4gKwlpZiAocmV0KQ0KPiArCQlnb3RvIGRvbmU7DQo+ICsJLyoNCj4gKwkgKiBWYWxpZGF0 ZSB0aGUgaGVhZGVyLiBUaGUgaGVhZGVyIGlzIGEgbm9ybWFsIHNwaSByZXBseSB3aXRoIHN0YXRl DQo+ICsJICogdmVjdG9yIGFuZCBjcmM0Lg0KPiArCSAqLw0KPiArCXJldCA9IGFkaXMxNjU1MF9z cGlfdmFsaWRhdGUoJnN0LT5hZGlzLCBidWZmZXJbMF0sICZkdW1teSk7DQo+ICsJaWYgKHJldCkN Cj4gKwkJZ290byBkb25lOw0KPiArDQo+ICsJLyogdGhlIGhlYWRlciBpcyBub3QgaW5jbHVkZWQg aW4gdGhlIGNyYyAqLw0KPiArCXZhbGlkID0gYWRpczE2NTUwX3ZhbGlkYXRlX2NyYyhidWZmZXIs IEFESVMxNjU1MF9CVVJTVF9OX0VMRU0gLQ0KPiAyKTsNCj4gKwlpZiAoIXZhbGlkKSB7DQo+ICsJ CWRldl9lcnIoJmFkaXMtPnNwaS0+ZGV2LCAiQnVyc3QgSW52YWxpZCBjcmMhXG4iKTsNCj4gKwkJ Z290byBkb25lOw0KPiArCX0NCj4gKw0KPiArCS8qIGNvcHkgdGhlIHRlbXBlcmF0dXJlIHRvZ2V0 aGVyIHdpdGggc2Vuc29yIGRhdGEgKi8NCj4gKwltZW1jcHkoZGF0YSwgJmJ1ZmZlclszXSwNCj4g KwkgICAgICAgKEFESVMxNjU1MF9TQ0FOX0FDQ0VMX1ogLSBBRElTMTY1NTBfU0NBTl9HWVJPX1gg KyAyKSAqDQo+ICsJICAgICAgIHNpemVvZihfX2JlMzIpKTsNCj4gKwlpaW9fcHVzaF90b19idWZm ZXJzX3dpdGhfdGltZXN0YW1wKGluZGlvX2RldiwgZGF0YSwgcGYtDQo+ID50aW1lc3RhbXApOw0K PiArZG9uZToNCj4gKwlpaW9fdHJpZ2dlcl9ub3RpZnlfZG9uZShpbmRpb19kZXYtPnRyaWcpOw0K PiArCXJldHVybiBJUlFfSEFORExFRDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHVuc2ln bmVkIGxvbmcgYWRpczE2NTUwX2NoYW5uZWxfbWFza3NbXSA9IHsNCj4gKwlBRElTMTY1NTBfQlVS U1RfREFUQV9HWVJPX0FDQ0VMX01BU0sgfA0KPiBCSVQoQURJUzE2NTUwX1NDQU5fVEVNUCksDQo+ ICsJQURJUzE2NTUwX0JVUlNUX0RBVEFfREVMVEFfQU5HX1ZFTF9NQVNLIHwNCj4gQklUKEFESVMx NjU1MF9TQ0FOX1RFTVApLA0KPiArCTANCj4gK307DQo+ICsNCj4gK3N0YXRpYyBpbnQgYWRpczE2 NTUwX3VwZGF0ZV9zY2FuX21vZGUoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwNCj4gKwkJCQkg ICAgICBjb25zdCB1bnNpZ25lZCBsb25nICpzY2FuX21hc2spDQo+ICt7DQo+ICsJdTE2IGJ1cnN0 X2xlbmd0aCA9IEFESVMxNjU1MF9CVVJTVF9EQVRBX0xFTjsNCj4gKwlzdHJ1Y3QgYWRpczE2NTUw ICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7DQo+ICsJdTggYnVyc3RfY21kOw0KPiArCXU4ICp0 eDsNCj4gKw0KPiArCW1lbXNldChzdC0+YnVmZmVyLCAwLCBidXJzdF9sZW5ndGggKyBzaXplb2Yo dTMyKSk7DQo+ICsNCj4gKwlpZiAoKnNjYW5fbWFzayAmIEFESVMxNjU1MF9CVVJTVF9EQVRBX0dZ Uk9fQUNDRUxfTUFTSykNCj4gKwkJYnVyc3RfY21kID0gQURJUzE2NTUwX1JFR19CVVJTVF9HWVJP X0FDQ0VMOw0KPiArCWVsc2UNCj4gKwkJYnVyc3RfY21kID0gQURJUzE2NTUwX1JFR19CVVJTVF9E RUxUQV9BTkdfVkVMOw0KPiArDQo+ICsJdHggPSBzdC0+YnVmZmVyICsgYnVyc3RfbGVuZ3RoOw0K PiArCXR4WzBdID0gMHgwMDsNCj4gKwl0eFsxXSA9IDB4MDA7DQo+ICsJdHhbMl0gPSBidXJzdF9j bWQ7DQo+ICsJLyogY3JjNCBpcyAwIG9uIGJ1cnN0IGNvbW1hbmQgKi8NCj4gKwl0eFszXSA9IHNw aV9jcmM0KGdldF91bmFsaWduZWRfbGUzMih0eCkpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBpbnQgYWRpczE2NTUwX3Jlc2V0KHN0cnVjdCBhZGlzICphZGlzKQ0K PiArew0KPiArCXJldHVybiBfX2FkaXNfd3JpdGVfcmVnXzE2KGFkaXMsIEFESVMxNjU1MF9SRUdf Q09NTUFORCwNCj4gQklUKDE1KSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgYWRpczE2NTUw X2NvbmZpZ19zeW5jKHN0cnVjdCBhZGlzMTY1NTAgKnN0KQ0KPiArew0KPiArCXN0cnVjdCBkZXZp Y2UgKmRldiA9ICZzdC0+YWRpcy5zcGktPmRldjsNCj4gKwljb25zdCBzdHJ1Y3QgYWRpczE2NTUw X3N5bmMgKnN5bmNfbW9kZV9kYXRhOw0KPiArCXN0cnVjdCBjbGsgKmNsazsNCj4gKwlpbnQgcmV0 LCBpOw0KPiArCXUxNiBtb2RlOw0KPiArDQo+ICsJY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFs X2VuYWJsZWQoZGV2LCBOVUxMKTsNCj4gKwlpZiAoSVNfRVJSKGNsaykpDQo+ICsJCXJldHVybiBQ VFJfRVJSKGNsayk7DQo+ICsJaWYgKCFjbGspIHsNCj4gKwkJc3QtPmNsa19mcmVxX2h6ID0gc3Qt PmluZm8tPmludF9jbGsgKiAxMDAwOw0KPiArCQlyZXR1cm4gMDsNCj4gKwl9DQo+ICsNCj4gKwlz dC0+Y2xrX2ZyZXFfaHogPSBjbGtfZ2V0X3JhdGUoY2xrKTsNCj4gKw0KPiArCWZvciAoaSA9IDA7 IGkgPCBzdC0+aW5mby0+bnVtX3N5bmM7IGkrKykgew0KPiArCQlpZiAoc3QtPmNsa19mcmVxX2h6 ID49IHN0LT5pbmZvLT5zeW5jX21vZGVbaV0ubWluX3JhdGUgJiYNCj4gKwkJICAgIHN0LT5jbGtf ZnJlcV9oeiA8PSBzdC0+aW5mby0+c3luY19tb2RlW2ldLm1heF9yYXRlKSB7DQo+ICsJCQlzeW5j X21vZGVfZGF0YSA9ICZzdC0+aW5mby0+c3luY19tb2RlW2ldOw0KPiArCQkJYnJlYWs7DQo+ICsJ CX0NCj4gKwl9DQo+ICsNCj4gKwlpZiAoaSA9PSBzdC0+aW5mby0+bnVtX3N5bmMpDQo+ICsJCXJl dHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwgIkNsayByYXRlOiAlbHUgbm90IGluIGEN Cj4gdmFsaWQgcmFuZ2UiLA0KPiArCQkJCSAgICAgc3QtPmNsa19mcmVxX2h6KTsNCj4gKw0KPiAr CWlmIChzeW5jX21vZGVfZGF0YS0+c3luY19tb2RlID09DQo+IEFESVMxNjU1MF9TWU5DX01PREVf U0NBTEVEKSB7DQo+ICsJCXUxNiBzeW5jX3NjYWxlOw0KPiArCQkvKg0KPiArCQkgKiBJbiBzcHMg c2NhbGVkIHN5bmMgd2UgbXVzdCBzY2FsZSB0aGUgaW5wdXQgY2xvY2sgdG8gYSByYW5nZQ0KPiAr CQkgKiBvZiBbMzAwMCA0NTAwXS4NCj4gKwkJICovDQo+ICsNCj4gKwkJc3luY19zY2FsZSA9IERJ Vl9ST1VORF9DTE9TRVNUKHN0LT5pbmZvLT5pbnRfY2xrLCBzdC0NCj4gPmNsa19mcmVxX2h6KTsN Cj4gKw0KPiArCQlpZiAoMzAwMCA+IHN5bmNfc2NhbGUgfHwgNDUwMCA8IHN5bmNfc2NhbGUpDQo+ ICsJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsDQo+ICsJCQkJCSAgICAgIklu dmFsaWQgdmFsdWU6JXUgZm9yIHN5bmNfc2NhbGUiLA0KPiArCQkJCQkgICAgIHN5bmNfc2NhbGUp Ow0KPiArDQo+ICsJCXJldCA9IGFkaXNfd3JpdGVfcmVnXzE2KCZzdC0+YWRpcywNCj4gQURJUzE2 NTUwX1JFR19TWU5DX1NDQUxFLA0KPiArCQkJCQlzeW5jX3NjYWxlKTsNCj4gKwkJaWYgKHJldCkN Cj4gKwkJCXJldHVybiByZXQ7DQo+ICsNCj4gKwkJc3QtPmNsa19mcmVxX2h6ID0gc3QtPmluZm8t PmludF9jbGs7DQo+ICsJfQ0KPiArDQo+ICsJc3QtPmNsa19mcmVxX2h6ICo9IDEwMDA7DQo+ICsN Cj4gKwltb2RlID0gRklFTERfUFJFUChBRElTMTY1NTBfU1lOQ19NT0RFX01BU0ssDQo+IHN5bmNf bW9kZV9kYXRhLT5zeW5jX21vZGUpIHwNCj4gKwkgICAgICAgRklFTERfUFJFUChBRElTMTY1NTBf U1lOQ19FTl9NQVNLLCB0cnVlKTsNCj4gKw0KPiArCXJldHVybiBfX2FkaXNfdXBkYXRlX2JpdHMo JnN0LT5hZGlzLCBBRElTMTY1NTBfUkVHX0NPTkZJRywNCj4gKwkJCQkgIEFESVMxNjU1MF9TWU5D X01BU0ssIG1vZGUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZv IGFkaXMxNjU1MF9pbmZvID0gew0KPiArCS5yZWFkX3JhdyA9ICZhZGlzMTY1NTBfcmVhZF9yYXcs DQo+ICsJLndyaXRlX3JhdyA9ICZhZGlzMTY1NTBfd3JpdGVfcmF3LA0KPiArCS51cGRhdGVfc2Nh bl9tb2RlID0gYWRpczE2NTUwX3VwZGF0ZV9zY2FuX21vZGUsDQo+ICsJLmRlYnVnZnNfcmVnX2Fj Y2VzcyA9IGFkaXNfZGVidWdmc19yZWdfYWNjZXNzLA0KPiArfTsNCj4gKw0KPiArZW51bSB7DQo+ ICsJQURJUzE2NTUwX1NUQVRVU19DUkNfQ09ERSwNCj4gKwlBRElTMTY1NTBfU1RBVFVTX0NSQ19D T05GSUcsDQo+ICsJQURJUzE2NTUwX1NUQVRVU19GTEFTSF9VUERBVEUsDQo+ICsJQURJUzE2NTUw X1NUQVRVU19JTkVSSUFMLA0KPiArCUFESVMxNjU1MF9TVEFUVVNfU0VOU09SLA0KPiArCUFESVMx NjU1MF9TVEFUVVNfVEVNUEVSQVRVUkUsDQo+ICsJQURJUzE2NTUwX1NUQVRVU19TUEksDQo+ICsJ QURJUzE2NTUwX1NUQVRVU19QUk9DRVNTSU5HLA0KPiArCUFESVMxNjU1MF9TVEFUVVNfUE9XRVIs DQo+ICsJQURJUzE2NTUwX1NUQVRVU19CT09ULA0KPiArCUFESVMxNjU1MF9TVEFUVVNfV0FUQ0hE T0cgPSAxNSwNCj4gKwlBRElTMTY1NTBfU1RBVFVTX1JFR1VMQVRPUiA9IDI4LA0KPiArCUFESVMx NjU1MF9TVEFUVVNfU0VOU09SX1NVUFBMWSwNCj4gKwlBRElTMTY1NTBfU1RBVFVTX0NQVV9TVVBQ TFksDQo+ICsJQURJUzE2NTUwX1NUQVRVU181Vl9TVVBQTFksDQo+ICt9Ow0KPiArDQo+ICtzdGF0 aWMgY29uc3QgY2hhciAqIGNvbnN0IGFkaXMxNjU1MF9zdGF0dXNfZXJyb3JfbXNnc1tdID0gew0K PiArCVtBRElTMTY1NTBfU1RBVFVTX0NSQ19DT0RFXSA9ICJDb2RlIENSQyBFcnJvciIsDQo+ICsJ W0FESVMxNjU1MF9TVEFUVVNfQ1JDX0NPTkZJR10gPSAiQ29uZmlndXJhdGlvbi9DYWxpYnJhdGlv biBDUkMNCj4gRXJyb3IiLA0KPiArCVtBRElTMTY1NTBfU1RBVFVTX0ZMQVNIX1VQREFURV0gPSAi Rmxhc2ggVXBkYXRlIEVycm9yIiwNCj4gKwlbQURJUzE2NTUwX1NUQVRVU19JTkVSSUFMXSA9ICJP dmVycmFuZ2UgZm9yIEluZXJ0aWFsIFNpZ25hbHMiLA0KPiArCVtBRElTMTY1NTBfU1RBVFVTX1NF TlNPUl0gPSAiU2Vuc29yIGZhaWx1cmUiLA0KPiArCVtBRElTMTY1NTBfU1RBVFVTX1RFTVBFUkFU VVJFXSA9ICJUZW1wZXJhdHVyZSBFcnJvciIsDQo+ICsJW0FESVMxNjU1MF9TVEFUVVNfU1BJXSA9 ICJTUEkgQ29tbXVuaWNhdGlvbiBFcnJvciIsDQo+ICsJW0FESVMxNjU1MF9TVEFUVVNfUFJPQ0VT U0lOR10gPSAiUHJvY2Vzc2luZyBPdmVycnVuIEVycm9yIiwNCj4gKwlbQURJUzE2NTUwX1NUQVRV U19QT1dFUl0gPSAiUG93ZXIgU3VwcGx5IEZhaWx1cmUiLA0KPiArCVtBRElTMTY1NTBfU1RBVFVT X0JPT1RdID0gIkJvb3QgTWVtb3J5IEZhaWx1cmUiLA0KPiArCVtBRElTMTY1NTBfU1RBVFVTX1dB VENIRE9HXSA9ICJXYXRjaGRvZyB0aW1lciBmbGFnIiwNCj4gKwlbQURJUzE2NTUwX1NUQVRVU19S RUdVTEFUT1JdID0gIkludGVybmFsIFJlZ3VsYXRvciBFcnJvciIsDQo+ICsJW0FESVMxNjU1MF9T VEFUVVNfU0VOU09SX1NVUFBMWV0gPSAiSW50ZXJuYWwgU2Vuc29yIFN1cHBseQ0KPiBFcnJvci4i LA0KPiArCVtBRElTMTY1NTBfU1RBVFVTX0NQVV9TVVBQTFldID0gIkludGVybmFsIFByb2Nlc3Nv ciBTdXBwbHkNCj4gRXJyb3IuIiwNCj4gKwlbQURJUzE2NTUwX1NUQVRVU181Vl9TVVBQTFldID0g IkV4dGVybmFsIDVWIFN1cHBseSBFcnJvciIsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IGFkaXNfdGltZW91dCBhZGlzMTY1NTBfdGltZW91dHMgPSB7DQo+ICsJLnJlc2V0X21z ID0gMTAwMCwNCj4gKwkuc3dfcmVzZXRfbXMgPSAxMDAwLA0KPiArCS5zZWxmX3Rlc3RfbXMgPSAx MDAwLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBhZGlzX2RhdGEgYWRpczE2 NTUwX2RhdGEgPSB7DQo+ICsJLmRpYWdfc3RhdF9yZWcgPSBBRElTMTY1NTBfUkVHX1NUQVRVUywN Cj4gKwkuZGlhZ19zdGF0X3NpemUgPSA0LA0KPiArCS5wcm9kX2lkX3JlZyA9IEFESVMxNjU1MF9S RUdfUFJPRF9JRCwNCj4gKwkucHJvZF9pZCA9IDE2NTUwLA0KPiArCS5zZWxmX3Rlc3RfbWFzayA9 IEJJVCgxKSwNCj4gKwkuc2VsZl90ZXN0X3JlZyA9IEFESVMxNjU1MF9SRUdfQ09NTUFORCwNCj4g KwkuY3NfY2hhbmdlX2RlbGF5ID0gNSwNCj4gKwkudW5tYXNrZWRfZHJkeSA9IHRydWUsDQo+ICsJ LnN0YXR1c19lcnJvcl9tc2dzID0gYWRpczE2NTUwX3N0YXR1c19lcnJvcl9tc2dzLA0KPiArCS5z dGF0dXNfZXJyb3JfbWFzayA9IEJJVChBRElTMTY1NTBfU1RBVFVTX0NSQ19DT0RFKSB8DQo+ICsJ CQlCSVQoQURJUzE2NTUwX1NUQVRVU19DUkNfQ09ORklHKSB8DQo+ICsJCQlCSVQoQURJUzE2NTUw X1NUQVRVU19GTEFTSF9VUERBVEUpIHwNCj4gKwkJCUJJVChBRElTMTY1NTBfU1RBVFVTX0lORVJJ QUwpIHwNCj4gKwkJCUJJVChBRElTMTY1NTBfU1RBVFVTX1NFTlNPUikgfA0KPiArCQkJQklUKEFE SVMxNjU1MF9TVEFUVVNfVEVNUEVSQVRVUkUpIHwNCj4gKwkJCUJJVChBRElTMTY1NTBfU1RBVFVT X1NQSSkgfA0KPiArCQkJQklUKEFESVMxNjU1MF9TVEFUVVNfUFJPQ0VTU0lORykgfA0KPiArCQkJ QklUKEFESVMxNjU1MF9TVEFUVVNfUE9XRVIpIHwNCj4gKwkJCUJJVChBRElTMTY1NTBfU1RBVFVT X0JPT1QpIHwNCj4gKwkJCUJJVChBRElTMTY1NTBfU1RBVFVTX1dBVENIRE9HKSB8DQo+ICsJCQlC SVQoQURJUzE2NTUwX1NUQVRVU19SRUdVTEFUT1IpIHwNCj4gKwkJCUJJVChBRElTMTY1NTBfU1RB VFVTX1NFTlNPUl9TVVBQTFkpIHwNCj4gKwkJCUJJVChBRElTMTY1NTBfU1RBVFVTX0NQVV9TVVBQ TFkpIHwNCj4gKwkJCUJJVChBRElTMTY1NTBfU1RBVFVTXzVWX1NVUFBMWSkgfA0KPiArCQkJQklU KEFESVMxNjU1MF9TVEFUVVNfQ1JDX0NPREUpLA0KPiArCS50aW1lb3V0cyA9ICZhZGlzMTY1NTBf dGltZW91dHMsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGFkaXNfb3BzIGFk aXMxNjU1MF9vcHMgPSB7DQo+ICsJLndyaXRlID0gYWRpczE2NTUwX3NwaV93cml0ZSwNCj4gKwku cmVhZCA9IGFkaXMxNjU1MF9zcGlfcmVhZCwNCj4gKwkucmVzZXQgPSBhZGlzMTY1NTBfcmVzZXQs DQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgaW50IGFkaXMxNjU1MF9wcm9iZShzdHJ1Y3Qgc3BpX2Rl dmljZSAqc3BpKQ0KPiArew0KPiArCXUxNiBidXJzdF9sZW5ndGggPSBBRElTMTY1NTBfQlVSU1Rf REFUQV9MRU47DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnNwaS0+ZGV2Ow0KPiArCXN0cnVj dCBpaW9fZGV2ICppbmRpb19kZXY7DQo+ICsJc3RydWN0IGFkaXMxNjU1MCAqc3Q7DQo+ICsJc3Ry dWN0IGFkaXMgKmFkaXM7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWluZGlvX2RldiA9IGRldm1f aWlvX2RldmljZV9hbGxvYyhkZXYsIHNpemVvZigqc3QpKTsNCj4gKwlpZiAoIWluZGlvX2RldikN Cj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKwlzdCA9IGlpb19wcml2KGluZGlvX2Rldik7 DQo+ICsJc3QtPmluZm8gPSBzcGlfZ2V0X2RldmljZV9tYXRjaF9kYXRhKHNwaSk7DQo+ICsJaWYg KCFzdC0+aW5mbykNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJYWRpcyA9ICZzdC0+YWRpczsN Cj4gKwlpbmRpb19kZXYtPm5hbWUgPSBzdC0+aW5mby0+bmFtZTsNCj4gKwlpbmRpb19kZXYtPmNo YW5uZWxzID0gc3QtPmluZm8tPmNoYW5uZWxzOw0KPiArCWluZGlvX2Rldi0+bnVtX2NoYW5uZWxz ID0gc3QtPmluZm8tPm51bV9jaGFubmVsczsNCj4gKwlpbmRpb19kZXYtPmF2YWlsYWJsZV9zY2Fu X21hc2tzID0gYWRpczE2NTUwX2NoYW5uZWxfbWFza3M7DQo+ICsJaW5kaW9fZGV2LT5pbmZvID0g JmFkaXMxNjU1MF9pbmZvOw0KPiArCWluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9E RTsNCj4gKw0KPiArCXN0LT5hZGlzLm9wcyA9ICZhZGlzMTY1NTBfb3BzOw0KPiArCXN0LT54ZmVy WzBdLnR4X2J1ZiA9IHN0LT5idWZmZXIgKyBidXJzdF9sZW5ndGg7DQo+ICsJc3QtPnhmZXJbMF0u bGVuID0gNDsNCj4gKwlzdC0+eGZlclswXS5jc19jaGFuZ2UgPSAxOw0KPiArCXN0LT54ZmVyWzBd LmRlbGF5LnZhbHVlID0gODsNCj4gKwlzdC0+eGZlclswXS5kZWxheS51bml0ID0gU1BJX0RFTEFZ X1VOSVRfVVNFQ1M7DQo+ICsJc3QtPnhmZXJbMV0ucnhfYnVmID0gc3QtPmJ1ZmZlcjsNCj4gKwlz dC0+eGZlclsxXS5sZW4gPSBidXJzdF9sZW5ndGg7DQo+ICsNCj4gKwlzcGlfbWVzc2FnZV9pbml0 X3dpdGhfdHJhbnNmZXJzKCZhZGlzLT5tc2csIHN0LT54ZmVyLCAyKTsNCj4gKw0KPiArCXJldCA9 IGRldm1fcmVndWxhdG9yX2dldF9lbmFibGUoZGV2LCAidmRkIik7DQo+ICsJaWYgKHJldCkNCj4g KwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICJGYWlsZWQgdG8gZ2V0IHZkZA0KPiBy ZWd1bGF0b3JcbiIpOw0KPiArDQo+ICsJcmV0ID0gYWRpc19pbml0KCZzdC0+YWRpcywgaW5kaW9f ZGV2LCBzcGksICZhZGlzMTY1NTBfZGF0YSk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJl dDsNCj4gKw0KPiArCXJldCA9IF9fYWRpc19pbml0aWFsX3N0YXJ0dXAoJnN0LT5hZGlzKTsNCj4g KwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJcmV0ID0gYWRpczE2NTUwX2Nv bmZpZ19zeW5jKHN0KTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJ cmV0ID0gZGV2bV9hZGlzX3NldHVwX2J1ZmZlcl9hbmRfdHJpZ2dlcigmc3QtPmFkaXMsIGluZGlv X2RldiwNCj4gKwkJCQkJCSBhZGlzMTY1NTBfdHJpZ2dlcl9oYW5kbGVyKTsNCj4gKwlpZiAocmV0 KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJcmV0ID0gZGV2bV9paW9fZGV2aWNlX3JlZ2lz dGVyKGRldiwgaW5kaW9fZGV2KTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiAr DQo+ICsJYWRpczE2NTUwX2RlYnVnZnNfaW5pdChpbmRpb19kZXYpOw0KPiArDQo+ICsJcmV0dXJu IDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCBhZGlz MTY1NTBfaWRbXSA9IHsNCj4gKwl7ICJhZGlzMTY1NTAiLCAgKGtlcm5lbF91bG9uZ190KSZhZGlz MTY1NTBfY2hpcF9pbmZvfSwNCj4gKwl7IH0NCj4gK307DQo+ICtNT0RVTEVfREVWSUNFX1RBQkxF KHNwaSwgYWRpczE2NTUwX2lkKTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZp Y2VfaWQgYWRpczE2NTUwX29mX21hdGNoW10gPSB7DQo+ICsJeyAuY29tcGF0aWJsZSA9ICJhZGks YWRpczE2NTUwIiwgLmRhdGEgPSAmYWRpczE2NTUwX2NoaXBfaW5mbyB9LA0KPiArCXsgfQ0KPiAr fTsNCj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFkaXMxNjU1MF9vZl9tYXRjaCk7DQo+ICsN Cj4gK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBhZGlzMTY1NTBfZHJpdmVyID0gew0KPiArCS5k cml2ZXIgPSB7DQo+ICsJCS5uYW1lID0gImFkaXMxNjU1MCIsDQo+ICsJCS5vZl9tYXRjaF90YWJs ZSA9IGFkaXMxNjU1MF9vZl9tYXRjaCwNCj4gKwl9LA0KPiArCS5wcm9iZSA9IGFkaXMxNjU1MF9w cm9iZSwNCj4gKwkuaWRfdGFibGUgPSBhZGlzMTY1NTBfaWQsDQo+ICt9Ow0KPiArbW9kdWxlX3Nw aV9kcml2ZXIoYWRpczE2NTUwX2RyaXZlcik7DQo+ICsNCj4gK01PRFVMRV9BVVRIT1IoIk51bm8g U2EgPG51bm8uc2FAYW5hbG9nLmNvbT4iKTsNCj4gK01PRFVMRV9BVVRIT1IoIlJhbW9uYSBHcmFk aW5hcml1DQo+IDxyYW1vbmEuZ3JhZGluYXJpdUBhbmFsb2cuY29tPiIpOw0KPiArTU9EVUxFX0FV VEhPUigiQW50b25pdSBNaWNsYXVzIDxhbnRvbml1Lm1pY2xhdXNAYW5hbG9nLmNvbT4iKTsNCj4g K01PRFVMRV9BVVRIT1IoIlJvYmVydCBCdWRhaSA8cm9iZXJ0LmJ1ZGFpQGFuYWxvZy5jb20+IikN Cj4gK01PRFVMRV9ERVNDUklQVElPTigiQW5hbG9nIERldmljZXMgQURJUzE2NTUwIElNVSBkcml2 ZXIiKTsNCj4gK01PRFVMRV9JTVBPUlRfTlMoIklJT19BRElTTElCIik7DQo+ICtNT0RVTEVfTElD RU5TRSgiR1BMIik7DQo+IC0tDQo+IDIuMzQuMQ0KDQo=