From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D9600C10F0E for ; Tue, 9 Apr 2019 08:52:08 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A562820883 for ; Tue, 9 Apr 2019 08:52:08 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="ROzA52JN"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=nxp.com header.i=@nxp.com header.b="ii/nJyJ/" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A562820883 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:References: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=U5xbMLzTD/golegAf4JUm3KT/S6pLou6H0XeSFv1n3g=; b=ROzA52JN8++fiG ZJoOLVgRBoTeWpZAEXSlPMm9rnUzY390+g+d40bpcG/EfbllhKslJ+bk780OsIdHd99PkJF1X27Tc grumf/Dj0T8E7N95p3OOkkT00vipz/XVnEyjLEmavNAiGJnd83Zs7XKw99nboFOZ2pqV/Q6u9QFv1 NJ/DMurfSVVA30Cecm8jUHHHXBA+DAwB5AKm5UI3dINXDuF4nVYo3E18nlnOY4tEaEmHCFKiwwmxD T98SweuQ1/Kb4m+DUBlCt3SzZSYNG8Z0DZgrWnOV6QvfCnEUXdykzWUGqUWPREHpAa7B4M4m56xE3 qERWNKSMeYGpBGRVPpXw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hDmU4-000270-NO; Tue, 09 Apr 2019 08:52:00 +0000 Received: from mail-ve1eur03on062d.outbound.protection.outlook.com ([2a01:111:f400:fe09::62d] helo=EUR03-VE1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hDmTz-00024Z-PX for linux-arm-kernel@lists.infradead.org; Tue, 09 Apr 2019 08:51:58 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Qg56kuSzse+4I1MOHZoziMDdnNIDx2VoOxjHG2jPj/Q=; b=ii/nJyJ/X+njAExDAIzuZLcVU4AchszVLwz1YAw8gl71FH8vA7qSaHLAKsGmCQAP6N/WR184edonAKCt/DRCDmUKWHEw/6a1+wqxEOvYFekPlFZq26J/1t8JIGo2U2y5tVJHVPo5BwDTGPKDnq4Hiac3LyqYVlsbSvx5nG9aXOo= Received: from DB3PR0402MB3916.eurprd04.prod.outlook.com (52.134.72.18) by DB3PR0402MB3692.eurprd04.prod.outlook.com (52.134.65.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1771.15; Tue, 9 Apr 2019 08:51:48 +0000 Received: from DB3PR0402MB3916.eurprd04.prod.outlook.com ([fe80::e8ca:4f6b:e43:c170]) by DB3PR0402MB3916.eurprd04.prod.outlook.com ([fe80::e8ca:4f6b:e43:c170%3]) with mapi id 15.20.1771.016; Tue, 9 Apr 2019 08:51:48 +0000 From: Anson Huang To: =?utf-8?B?VXdlIEtsZWluZS1Lw7ZuaWc=?= Subject: RE: [EXT] Re: [PATCH V10 2/5] pwm: Add i.MX TPM PWM driver support Thread-Topic: [EXT] Re: [PATCH V10 2/5] pwm: Add i.MX TPM PWM driver support Thread-Index: AQHU46B9WLT24xilRkuAOvixB3Q1lqYzeQoAgAAbkdA= Date: Tue, 9 Apr 2019 08:51:48 +0000 Message-ID: References: <1553582817-29519-1-git-send-email-Anson.Huang@nxp.com> <1553582817-29519-3-git-send-email-Anson.Huang@nxp.com> <20190409064750.qnjcddlf5gktipah@pengutronix.de> In-Reply-To: <20190409064750.qnjcddlf5gktipah@pengutronix.de> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=anson.huang@nxp.com; x-originating-ip: [119.31.174.69] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 6da08230-b37c-443e-2d87-08d6bcc89a0d x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600139)(711020)(4605104)(4618075)(2017052603328)(7193020); SRVR:DB3PR0402MB3692; x-ms-traffictypediagnostic: DB3PR0402MB3692: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-forefront-prvs: 000227DA0C x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(39860400002)(396003)(366004)(346002)(376002)(13464003)(199004)(189003)(105586002)(106356001)(76176011)(256004)(14444005)(5024004)(186003)(71190400001)(30864003)(74316002)(53546011)(7736002)(7696005)(6506007)(6116002)(6306002)(446003)(305945005)(9686003)(99286004)(55016002)(3846002)(4326008)(229853002)(2906002)(81166006)(97736004)(71200400001)(68736007)(476003)(5660300002)(81156014)(54906003)(66574012)(316002)(6436002)(86362001)(6246003)(66066001)(8676002)(44832011)(102836004)(33656002)(25786009)(478600001)(26005)(45080400002)(53936002)(8936002)(53946003)(11346002)(966005)(7416002)(14454004)(6916009)(486006)(52536014)(579004); DIR:OUT; SFP:1101; SCL:1; SRVR:DB3PR0402MB3692; H:DB3PR0402MB3916.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: ttl6EOch6Ey0xkFifijzc6VvFY5EPJZKvh2A4Ji8vzEl76nbpyXTHZmS3qYdsK5fhhf0I5Y6H2cChDE3GDrcrJet2tro4hSWSPk4qPl/F4ymio7PWDq27UOUjlHsOYvLoIQh7KVI7aOarfop3Mqas40pYi4Xm9+AWUTa7IGhzJAYUT5DGmyBhmEA2lDEWm9WXAcUdFHECr/ieDr5MHXfMjRGGDzNyO4Kh8XpInMvd7ni7R+L8H22GoPchfh7vIE37P0OHTSNzzj0G3zC6kkjDP5EpXjGoXNs6hIManujT/YyZxs7ZZIk7ucLyzPM57uuw9Zc6smZPOVqNAszCPT7fqD9x5iKt8NKhVrE3in9Aco2MEVgExM8I8QSAULwFPilllMkpP7OObaHcV9TNGlUbaVKdJ1p/tLMcUrDbbSMfSc= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6da08230-b37c-443e-2d87-08d6bcc89a0d X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Apr 2019 08:51:48.1468 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0402MB3692 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190409_015155_990327_7F8179C5 X-CRM114-Status: GOOD ( 29.51 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "mark.rutland@arm.com" , "linux-pwm@vger.kernel.org" , Robin Gong , "schnitzeltony@gmail.com" , "otavio@ossystems.com.br" , "devicetree@vger.kernel.org" , "festevam@gmail.com" , "s.hauer@pengutronix.de" , "linux@armlinux.org.uk" , "robh+dt@kernel.org" , "linux-kernel@vger.kernel.org" , "thierry.reding@gmail.com" , "stefan@agner.ch" , "kernel@pengutronix.de" , Leonard Crestez , "shawnguo@kernel.org" , "linux-arm-kernel@lists.infradead.org" , dl-linux-imx Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGksIFV3ZQ0KDQpCZXN0IFJlZ2FyZHMhDQpBbnNvbiBIdWFuZw0KDQo+IC0tLS0tT3JpZ2luYWwg TWVzc2FnZS0tLS0tDQo+IEZyb206IFV3ZSBLbGVpbmUtS8O2bmlnIFttYWlsdG86dS5rbGVpbmUt a29lbmlnQHBlbmd1dHJvbml4LmRlXQ0KPiBTZW50OiAyMDE55bm0NOaciDnml6UgMTQ6NDgNCj4g VG86IEFuc29uIEh1YW5nIDxhbnNvbi5odWFuZ0BueHAuY29tPg0KPiBDYzogdGhpZXJyeS5yZWRp bmdAZ21haWwuY29tOyByb2JoK2R0QGtlcm5lbC5vcmc7IG1hcmsucnV0bGFuZEBhcm0uY29tOw0K PiBzaGF3bmd1b0BrZXJuZWwub3JnOyBzLmhhdWVyQHBlbmd1dHJvbml4LmRlOyBrZXJuZWxAcGVu Z3V0cm9uaXguZGU7DQo+IGZlc3RldmFtQGdtYWlsLmNvbTsgbGludXhAYXJtbGludXgub3JnLnVr OyBzdGVmYW5AYWduZXIuY2g7DQo+IG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyOyBMZW9uYXJkIENy ZXN0ZXogPGxlb25hcmQuY3Jlc3RlekBueHAuY29tPjsNCj4gc2Nobml0emVsdG9ueUBnbWFpbC5j b207IFJvYmluIEdvbmcgPHlpYmluLmdvbmdAbnhwLmNvbT47IGxpbnV4LQ0KPiBwd21Admdlci5r ZXJuZWwub3JnOyBkZXZpY2V0cmVlQHZnZXIua2VybmVsLm9yZzsgbGludXgtYXJtLQ0KPiBrZXJu ZWxAbGlzdHMuaW5mcmFkZWFkLm9yZzsgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsgZGwt bGludXgtaW14DQo+IDxsaW51eC1pbXhAbnhwLmNvbT4NCj4gU3ViamVjdDogW0VYVF0gUmU6IFtQ QVRDSCBWMTAgMi81XSBwd206IEFkZCBpLk1YIFRQTSBQV00gZHJpdmVyIHN1cHBvcnQNCj4gDQo+ IFdBUk5JTkc6IFRoaXMgZW1haWwgd2FzIGNyZWF0ZWQgb3V0c2lkZSBvZiBOWFAuIERPIE5PVCBD TElDSyBsaW5rcyBvcg0KPiBhdHRhY2htZW50cyB1bmxlc3MgeW91IHJlY29nbml6ZSB0aGUgc2Vu ZGVyIGFuZCBrbm93IHRoZSBjb250ZW50IGlzIHNhZmUuDQo+IA0KPiANCj4gDQo+IE9uIFR1ZSwg TWFyIDI2LCAyMDE5IGF0IDA2OjUyOjMzQU0gKzAwMDAsIEFuc29uIEh1YW5nIHdyb3RlOg0KPiA+ IGkuTVg3VUxQIGhhcyBUUE0oTG93IFBvd2VyIFRpbWVyL1B1bHNlIFdpZHRoIE1vZHVsYXRpb24g TW9kdWxlKQ0KPiA+IGluc2lkZSwgaXQgY2FuIHN1cHBvcnQgbXVsdGlwbGUgUFdNIGNoYW5uZWxz LCBhbGwgdGhlIGNoYW5uZWxzIHNoYXJlDQo+ID4gc2FtZSBjb3VudGVyIGFuZCBwZXJpb2Qgc2V0 dGluZywgYnV0IGVhY2ggY2hhbm5lbCBjYW4gY29uZmlndXJlIGl0cw0KPiA+IGR1dHkgYW5kIHBv bGFyaXR5IGluZGVwZW5kZW50bHkuDQo+ID4NCj4gPiBUaGVyZSBhcmUgc2V2ZXJhbCBUUE0gbW9k dWxlcyBpbiBpLk1YN1VMUCwgdGhlIG51bWJlciBvZiBjaGFubmVscyBpbg0KPiA+IFRQTSBtb2R1 bGVzIGFyZSBkaWZmZXJlbnQsIGl0IGNhbiBiZSByZWFkIGZyb20gZWFjaCBUUE0gbW9kdWxlJ3Mg UEFSQU0NCj4gPiByZWdpc3Rlci4NCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IEFuc29uIEh1YW5n IDxBbnNvbi5IdWFuZ0BueHAuY29tPg0KPiA+IC0tLQ0KPiA+IENoYW5nZXMgc2luY2UgVjk6DQo+ ID4gICAgICAgLSBpbXByb3ZlIHNvbWUgY29tbWVudHM7DQo+ID4gICAgICAgLSBtZXJnZSBwZXJp b2RfZHV0eSBzZXR0aW5nIGFuZCBjb25maWdfaHcgdG8gYmUgMSBmdW5jdGlvbiwgYXZvaWQNCj4g ZHVwbGljYXRlZCBkdXR5IHNldHRpbmdzDQo+ID4gICAgICAgICBpbiBzb21lIHNjZW5hcmlvOw0K PiA+ICAgICAgIC0gdXNlIG5vbiAiZGV2bV8iIGZ1bmN0aW9uIGZvciBjaGFubmVsIGRhdGEgYWxs b2NhdGlvbiBhbmQgZnJlZS4NCj4gPiAtLS0NCj4gPiAgZHJpdmVycy9wd20vS2NvbmZpZyAgICAg ICB8ICAxMSArKw0KPiA+ICBkcml2ZXJzL3B3bS9NYWtlZmlsZSAgICAgIHwgICAxICsNCj4gPiAg ZHJpdmVycy9wd20vcHdtLWlteC10cG0uYyB8IDQ2Mw0KPiA+ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gPiAgMyBmaWxlcyBjaGFuZ2VkLCA0NzUgaW5z ZXJ0aW9ucygrKQ0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wd20vcHdtLWlteC10 cG0uYw0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHdtL0tjb25maWcgYi9kcml2ZXJz L3B3bS9LY29uZmlnIGluZGV4DQo+ID4gNTRmODIzOC4uM2VhMDM5MSAxMDA2NDQNCj4gPiAtLS0g YS9kcml2ZXJzL3B3bS9LY29uZmlnDQo+ID4gKysrIGIvZHJpdmVycy9wd20vS2NvbmZpZw0KPiA+ IEBAIC0yMTAsNiArMjEwLDE3IEBAIGNvbmZpZyBQV01fSU1YMjcNCj4gPiAgICAgICAgIFRvIGNv bXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUN Cj4gPiAgICAgICAgIHdpbGwgYmUgY2FsbGVkIHB3bS1pbXgyNy4NCj4gPg0KPiA+ICtjb25maWcg UFdNX0lNWF9UUE0NCj4gPiArICAgICB0cmlzdGF0ZSAiaS5NWCBUUE0gUFdNIHN1cHBvcnQiDQo+ ID4gKyAgICAgZGVwZW5kcyBvbiBBUkNIX01YQyB8fCBDT01QSUxFX1RFU1QNCj4gPiArICAgICBk ZXBlbmRzIG9uIEhBVkVfQ0xLICYmIEhBU19JT01FTQ0KPiA+ICsgICAgIGhlbHANCj4gPiArICAg ICAgIEdlbmVyaWMgUFdNIGZyYW1ld29yayBkcml2ZXIgZm9yIGkuTVg3VUxQIFRQTSBtb2R1bGUs IFRQTSdzIGZ1bGwNCj4gPiArICAgICAgIG5hbWUgaXMgTG93IFBvd2VyIFRpbWVyL1B1bHNlIFdp ZHRoIE1vZHVsYXRpb24gTW9kdWxlLg0KPiA+ICsNCj4gPiArICAgICAgIFRvIGNvbXBpbGUgdGhp cyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUNCj4gPiArICAg ICAgIHdpbGwgYmUgY2FsbGVkIHB3bS1pbXgtdHBtLg0KPiA+ICsNCj4gPiAgY29uZmlnIFBXTV9K WjQ3NDANCj4gPiAgICAgICB0cmlzdGF0ZSAiSW5nZW5pYyBKWjQ3eHggUFdNIHN1cHBvcnQiDQo+ ID4gICAgICAgZGVwZW5kcyBvbiBNQUNIX0lOR0VOSUMNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9wd20vTWFrZWZpbGUgYi9kcml2ZXJzL3B3bS9NYWtlZmlsZSBpbmRleA0KPiA+IDQ0ODgyNWUu LmMzNjg1OTkgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9wd20vTWFrZWZpbGUNCj4gPiArKysg Yi9kcml2ZXJzL3B3bS9NYWtlZmlsZQ0KPiA+IEBAIC0xOSw2ICsxOSw3IEBAIG9iai0kKENPTkZJ R19QV01fSElCVlQpICAgICAgICAgICAgICs9IHB3bS1oaWJ2dC5vDQo+ID4gIG9iai0kKENPTkZJ R19QV01fSU1HKSAgICAgICAgICAgICAgICArPSBwd20taW1nLm8NCj4gPiAgb2JqLSQoQ09ORklH X1BXTV9JTVgxKSAgICAgICAgICAgICAgICs9IHB3bS1pbXgxLm8NCj4gPiAgb2JqLSQoQ09ORklH X1BXTV9JTVgyNykgICAgICAgICAgICAgICs9IHB3bS1pbXgyNy5vDQo+ID4gK29iai0kKENPTkZJ R19QV01fSU1YX1RQTSkgICAgKz0gcHdtLWlteC10cG0ubw0KPiA+ICBvYmotJChDT05GSUdfUFdN X0paNDc0MCkgICAgICs9IHB3bS1qejQ3NDAubw0KPiA+ICBvYmotJChDT05GSUdfUFdNX0xQMzk0 MykgICAgICs9IHB3bS1scDM5NDMubw0KPiA+ICBvYmotJChDT05GSUdfUFdNX0xQQzE4WFhfU0NU KSAgICAgICAgKz0gcHdtLWxwYzE4eHgtc2N0Lm8NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9w d20vcHdtLWlteC10cG0uYyBiL2RyaXZlcnMvcHdtL3B3bS1pbXgtdHBtLmMNCj4gbmV3DQo+ID4g ZmlsZSBtb2RlIDEwMDY0NCBpbmRleCAwMDAwMDAwLi5lMWU5YjY4DQo+ID4gLS0tIC9kZXYvbnVs bA0KPiA+ICsrKyBiL2RyaXZlcnMvcHdtL3B3bS1pbXgtdHBtLmMNCj4gPiBAQCAtMCwwICsxLDQ2 MyBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiA+ICsvKg0K PiA+ICsgKiBDb3B5cmlnaHQgMjAxOC0yMDE5IE5YUC4NCj4gPiArICoNCj4gPiArICogTGltaXRh dGlvbnM6DQo+ID4gKyAqIC0gVGhlIFRQTSBjb3VudGVyIGFuZCBwZXJpb2QgY291bnRlciBhcmUg c2hhcmVkIGJldHdlZW4NCj4gPiArICogICBtdWx0aXBsZSBjaGFubmVscywgc28gYWxsIGNoYW5u ZWxzIHNob3VsZCB1c2Ugc2FtZSBwZXJpb2QNCj4gPiArICogICBzZXR0aW5ncy4NCj4gPiArICog LSBDaGFuZ2VzIHRvIHBvbGFyaXR5IGNhbm5vdCBiZSBsYXRjaGVkIGF0IHRoZSB0aW1lIG9mIHRo ZQ0KPiA+ICsgKiAgIG5leHQgcGVyaW9kIHN0YXJ0Lg0KPiA+ICsgKiAtIENoYW5naW5nIHBlcmlv ZCBhbmQgZHV0eSBjeWNsZSB0b2dldGhlciBpc24ndCBhdG9taWMsDQo+ID4gKyAqICAgd2l0aCB0 aGUgd3JvbmcgdGltaW5nIGl0IG1pZ2h0IGhhcHBlbiB0aGF0IGEgcGVyaW9kIGlzDQo+ID4gKyAq ICAgcHJvZHVjZWQgd2l0aCBvbGQgZHV0eSBjeWNsZSBidXQgbmV3IHBlcmlvZCBzZXR0aW5ncy4N Cj4gPiArICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4NCj4gPiAr I2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9sb2cyLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9h ZGRyZXNzLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCj4gPiAr I2luY2x1ZGUgPGxpbnV4L3B3bS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KPiA+ ICsNCj4gPiArI2RlZmluZSBQV01fSU1YX1RQTV9QQVJBTSAgICAweDQNCj4gPiArI2RlZmluZSBQ V01fSU1YX1RQTV9HTE9CQUwgICAweDgNCj4gPiArI2RlZmluZSBQV01fSU1YX1RQTV9TQyAgICAg ICAgICAgICAgIDB4MTANCj4gPiArI2RlZmluZSBQV01fSU1YX1RQTV9DTlQgICAgICAgICAgICAg IDB4MTQNCj4gPiArI2RlZmluZSBQV01fSU1YX1RQTV9NT0QgICAgICAgICAgICAgIDB4MTgNCj4g PiArI2RlZmluZSBQV01fSU1YX1RQTV9DblNDKG4pICAoMHgyMCArIChuKSAqIDB4OCkNCj4gPiAr I2RlZmluZSBQV01fSU1YX1RQTV9DblYobikgICAoMHgyNCArIChuKSAqIDB4OCkNCj4gPiArDQo+ ID4gKyNkZWZpbmUgUFdNX0lNWF9UUE1fUEFSQU1fQ0hBTiAgICAgICAgICAgICAgICAgICAgICAg R0VOTUFTSyg3LCAwKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBQV01fSU1YX1RQTV9TQ19QUyAgICAg ICAgICAgICAgICAgICAgR0VOTUFTSygyLCAwKQ0KPiA+ICsjZGVmaW5lIFBXTV9JTVhfVFBNX1ND X0NNT0QgICAgICAgICAgICAgICAgICBHRU5NQVNLKDQsIDMpDQo+ID4gKyNkZWZpbmUgUFdNX0lN WF9UUE1fU0NfQ01PRF9JTkNfRVZFUllfQ0xLDQo+IEZJRUxEX1BSRVAoUFdNX0lNWF9UUE1fU0Nf Q01PRCwgMSkNCj4gPiArI2RlZmluZSBQV01fSU1YX1RQTV9TQ19DUFdNUyAgICAgICAgICAgICAg ICAgQklUKDUpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBXTV9JTVhfVFBNX0NuU0NfQ0hGIEJJVCg3 KQ0KPiA+ICsjZGVmaW5lIFBXTV9JTVhfVFBNX0NuU0NfTVNCIEJJVCg1KQ0KPiA+ICsjZGVmaW5l IFBXTV9JTVhfVFBNX0NuU0NfTVNBIEJJVCg0KQ0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogVGhl IHJlZmVyZW5jZSBtYW51YWwgZGVzY3JpYmVzIHRoaXMgZmllbGQgYXMgdHdvIHNlcGFyYXRlIGJp dHMuDQo+ID4gK1RoZQ0KPiA+ICsgKiBzZW1hbnRpYyBvZiB0aGUgdHdvIGJpdHMgaXNuJ3Qgb3J0 aG9nb25hbCB0aG91Z2gsIHNvIHRoZXkgYXJlDQo+ID4gK3RyZWF0ZWQNCj4gPiArICogdG9nZXRo ZXIgYXMgYSAyLWJpdCBmaWVsZCBoZXJlLg0KPiA+ICsgKi8NCj4gPiArI2RlZmluZSBQV01fSU1Y X1RQTV9DblNDX0VMUyBHRU5NQVNLKDMsIDIpDQo+ID4gKyNkZWZpbmUgUFdNX0lNWF9UUE1fQ25T Q19FTFNfUE9MQVJJVFlfSU5WRVJTRUQgICAgICAgMHgxDQo+ID4gKyNkZWZpbmUgUFdNX0lNWF9U UE1fQ25TQ19FTFNfSU5WRVJTRUQNCj4gRklFTERfUFJFUChQV01fSU1YX1RQTV9DblNDX0VMUywg MSkNCj4gDQo+IFRoaXMgbG9va3Mgc3RyYW5nZS4gIFRoZSBvbmx5IHVzYWdlIG9mDQo+IFBXTV9J TVhfVFBNX0NuU0NfRUxTX1BPTEFSSVRZX0lOVkVSU0VEIGlzOg0KPiANCj4gICAgICAgICBpZiAo RklFTERfR0VUKFBXTV9JTVhfVFBNX0NuU0NfRUxTLCB2YWwpID09DQo+ICAgICAgICAgICAgIFBX TV9JTVhfVFBNX0NuU0NfRUxTX1BPTEFSSVRZX0lOVkVSU0VEKQ0KPiANCj4gSWYgeW91IGNoYW5n ZSB0aGlzIHRvDQo+IA0KPiAgICAgICAgIGlmICgodmFsICYgUFdNX0lNWF9UUE1fQ25TQ19FTFMp ID09DQo+ICAgICAgICAgICAgIFBXTV9JTVhfVFBNX0NuU0NfRUxTX0lOVkVSU0VEKQ0KPiANCj4g eW91IGNhbiBkcm9wIHRoZSBQV01fSU1YX1RQTV9DblNDX0VMU19QT0xBUklUWV9JTlZFUlNFRCBz eW1ib2wuDQoNCk9LLg0KDQo+IA0KPiA+ICsjZGVmaW5lIFBXTV9JTVhfVFBNX0NuU0NfRUxTX05P Uk1BTA0KPiBGSUVMRF9QUkVQKFBXTV9JTVhfVFBNX0NuU0NfRUxTLA0KPiA+ICsyKQ0KPiA+ICsN Cj4gPiArDQo+ID4gKyNkZWZpbmUgUFdNX0lNWF9UUE1fTU9EX1dJRFRIICAgICAgICAxNg0KPiA+ ICsjZGVmaW5lIFBXTV9JTVhfVFBNX01PRF9NT0QNCj4gR0VOTUFTSyhQV01fSU1YX1RQTV9NT0Rf V0lEVEggLSAxLCAwKQ0KPiA+ICsNCj4gPiArc3RydWN0IGlteF90cG1fcHdtX2NoaXAgew0KPiA+ ICsgICAgIHN0cnVjdCBwd21fY2hpcCBjaGlwOw0KPiA+ICsgICAgIHN0cnVjdCBjbGsgKmNsazsN Cj4gPiArICAgICB2b2lkIF9faW9tZW0gKmJhc2U7DQo+ID4gKyAgICAgc3RydWN0IG11dGV4IGxv Y2s7DQo+ID4gKyAgICAgdTMyIHVzZXJfY291bnQ7DQo+ID4gKyAgICAgdTMyIGVuYWJsZV9jb3Vu dDsNCj4gPiArICAgICB1MzIgcmVhbF9wZXJpb2Q7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1 Y3QgaW14X3RwbV9wd21fcGFyYW0gew0KPiA+ICsgICAgIHU4IHByZXNjYWxlOw0KPiA+ICsgICAg IHUzMiBtb2Q7DQo+ID4gKyAgICAgdTMyIHZhbDsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVj dCBpbXhfdHBtX3B3bV9jaGFubmVsIHsNCj4gPiArICAgICBlbnVtIHB3bV9wb2xhcml0eSBwb2xh cml0eTsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlteF90cG1f cHdtX2NoaXAgKnRvX2lteF90cG1fcHdtX2NoaXAoc3RydWN0DQo+ID4gK3B3bV9jaGlwICpjaGlw KSB7DQo+ID4gKyAgICAgcmV0dXJuIGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgaW14X3RwbV9w d21fY2hpcCwgY2hpcCk7IH0NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgcHdtX2lteF90cG1fcm91 bmRfc3RhdGUoc3RydWN0IHB3bV9jaGlwICpjaGlwLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBpbXhfdHBtX3B3bV9wYXJhbSAqcCwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHdtX3N0YXRlICpzdGF0ZSwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHdtX3N0YXRlICpyZWFsX3N0YXRl KSB7DQo+ID4gKyAgICAgc3RydWN0IGlteF90cG1fcHdtX2NoaXAgKnRwbSA9IHRvX2lteF90cG1f cHdtX2NoaXAoY2hpcCk7DQo+ID4gKyAgICAgdTMyIHJhdGUsIHByZXNjYWxlLCBwZXJpb2RfY291 bnQsIGNsb2NrX3VuaXQ7DQo+ID4gKyAgICAgdTY0IHRtcDsNCj4gPiArDQo+ID4gKyAgICAgcmF0 ZSA9IGNsa19nZXRfcmF0ZSh0cG0tPmNsayk7DQo+ID4gKyAgICAgdG1wID0gKHU2NClzdGF0ZS0+ cGVyaW9kICogcmF0ZTsNCj4gPiArICAgICBjbG9ja191bml0ID0gRElWX1JPVU5EX0NMT1NFU1Rf VUxMKHRtcCwgTlNFQ19QRVJfU0VDKTsNCj4gPiArICAgICBpZiAoY2xvY2tfdW5pdCA8PSBQV01f SU1YX1RQTV9NT0RfTU9EKQ0KPiA+ICsgICAgICAgICAgICAgcHJlc2NhbGUgPSAwOw0KPiA+ICsg ICAgIGVsc2UNCj4gPiArICAgICAgICAgICAgIHByZXNjYWxlID0gaWxvZzIoY2xvY2tfdW5pdCkg KyAxIC0NCj4gPiArIFBXTV9JTVhfVFBNX01PRF9XSURUSDsNCj4gPiArDQo+ID4gKyAgICAgaWYg KCghRklFTERfRklUKFBXTV9JTVhfVFBNX1NDX1BTLCBwcmVzY2FsZSkpKQ0KPiA+ICsgICAgICAg ICAgICAgcmV0dXJuIC1FUkFOR0U7DQo+ID4gKyAgICAgcC0+cHJlc2NhbGUgPSBwcmVzY2FsZTsN Cj4gPiArDQo+ID4gKyAgICAgcGVyaW9kX2NvdW50ID0gKGNsb2NrX3VuaXQgKyAoKDEgPDwgcHJl c2NhbGUpID4+IDEpKSA+PiBwcmVzY2FsZTsNCj4gPiArICAgICBwLT5tb2QgPSBwZXJpb2RfY291 bnQ7DQo+ID4gKw0KPiA+ICsgICAgIC8qIGNhbGN1bGF0ZSByZWFsIHBlcmlvZCBIVyBjYW4gc3Vw cG9ydCAqLw0KPiA+ICsgICAgIHRtcCA9ICh1NjQpcGVyaW9kX2NvdW50IDw8IHByZXNjYWxlOw0K PiA+ICsgICAgIHRtcCAqPSBOU0VDX1BFUl9TRUM7DQo+ID4gKyAgICAgcmVhbF9zdGF0ZS0+cGVy aW9kID0gRElWX1JPVU5EX0NMT1NFU1RfVUxMKHRtcCwgcmF0ZSk7DQo+ID4gKw0KPiA+ICsgICAg IC8qDQo+ID4gKyAgICAgICogaWYgZXZlbnR1YWxseSB0aGUgUFdNIG91dHB1dCBpcyBpbmFjdGl2 ZSwgZWl0aGVyDQo+ID4gKyAgICAgICogZHV0eSBjeWNsZSBpcyAwIG9yIHN0YXR1cyBpcyBkaXNh YmxlZCwgbmVlZCB0bw0KPiA+ICsgICAgICAqIG1ha2Ugc3VyZSB0aGUgb3V0cHV0IHBpbiBpcyBp bmFjdGl2ZS4NCj4gPiArICAgICAgKi8NCj4gPiArICAgICBpZiAoIXN0YXRlLT5lbmFibGVkKQ0K PiA+ICsgICAgICAgICAgICAgcmVhbF9zdGF0ZS0+ZHV0eV9jeWNsZSA9IDA7DQo+ID4gKyAgICAg ZWxzZQ0KPiA+ICsgICAgICAgICAgICAgcmVhbF9zdGF0ZS0+ZHV0eV9jeWNsZSA9IHN0YXRlLT5k dXR5X2N5Y2xlOw0KPiA+ICsNCj4gPiArICAgICB0bXAgPSAodTY0KXAtPm1vZCAqIHJlYWxfc3Rh dGUtPmR1dHlfY3ljbGU7DQo+ID4gKyAgICAgcC0+dmFsID0gRElWX1JPVU5EX0NMT1NFU1RfVUxM KHRtcCwgcmVhbF9zdGF0ZS0+cGVyaW9kKTsNCj4gPiArDQo+ID4gKyAgICAgcmVhbF9zdGF0ZS0+ cG9sYXJpdHkgPSBzdGF0ZS0+cG9sYXJpdHk7DQo+ID4gKyAgICAgcmVhbF9zdGF0ZS0+ZW5hYmxl ZCA9IHN0YXRlLT5lbmFibGVkOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcHdtX2lteF90cG1fZ2V0X3N0YXRlKHN0cnVjdCBwd21f Y2hpcCAqY2hpcCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBw d21fZGV2aWNlICpwd20sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgcHdtX3N0YXRlICpzdGF0ZSkgew0KPiA+ICsgICAgIHN0cnVjdCBpbXhfdHBtX3B3bV9jaGlw ICp0cG0gPSB0b19pbXhfdHBtX3B3bV9jaGlwKGNoaXApOw0KPiA+ICsgICAgIHN0cnVjdCBpbXhf dHBtX3B3bV9jaGFubmVsICpjaGFuID0gcHdtX2dldF9jaGlwX2RhdGEocHdtKTsNCj4gPiArICAg ICB1MzIgcmF0ZSwgdmFsLCBwcmVzY2FsZTsNCj4gPiArICAgICB1NjQgdG1wOw0KPiA+ICsNCj4g PiArICAgICAvKiBnZXQgcGVyaW9kICovDQo+ID4gKyAgICAgc3RhdGUtPnBlcmlvZCA9IHRwbS0+ cmVhbF9wZXJpb2Q7DQo+ID4gKw0KPiA+ICsgICAgIC8qIGdldCBkdXR5IGN5Y2xlICovDQo+ID4g KyAgICAgcmF0ZSA9IGNsa19nZXRfcmF0ZSh0cG0tPmNsayk7DQo+ID4gKyAgICAgdmFsID0gcmVh ZGwodHBtLT5iYXNlICsgUFdNX0lNWF9UUE1fU0MpOw0KPiA+ICsgICAgIHByZXNjYWxlID0gRklF TERfR0VUKFBXTV9JTVhfVFBNX1NDX1BTLCB2YWwpOw0KPiA+ICsgICAgIHRtcCA9IHJlYWRsKHRw bS0+YmFzZSArIFBXTV9JTVhfVFBNX0NuVihwd20tPmh3cHdtKSk7DQo+ID4gKyAgICAgdG1wID0g KHRtcCA8PCBwcmVzY2FsZSkgKiBOU0VDX1BFUl9TRUM7DQo+ID4gKyAgICAgc3RhdGUtPmR1dHlf Y3ljbGUgPSBESVZfUk9VTkRfQ0xPU0VTVF9VTEwodG1wLCByYXRlKTsNCj4gPiArDQo+ID4gKyAg ICAgLyogZ2V0IHBvbGFyaXR5ICovDQo+ID4gKyAgICAgaWYgKGNoYW4pIHsNCj4gPiArICAgICAg ICAgICAgIHN0YXRlLT5wb2xhcml0eSA9IGNoYW4tPnBvbGFyaXR5Ow0KPiA+ICsgICAgIH0gZWxz ZSB7DQo+ID4gKyAgICAgICAgICAgICAvKiBpbiBjYXNlIG5vIGNoYW5uZWwgcmVxdWVzdGVkIHll dCwgcmV0dXJuIEhXIHN0YXR1cyAqLw0KPiA+ICsgICAgICAgICAgICAgdmFsID0gcmVhZGwodHBt LT5iYXNlICsgUFdNX0lNWF9UUE1fQ25TQyhwd20tPmh3cHdtKSk7DQo+ID4gKyAgICAgICAgICAg ICBpZiAoRklFTERfR0VUKFBXTV9JTVhfVFBNX0NuU0NfRUxTLCB2YWwpID09DQo+ID4gKyAgICAg ICAgICAgICAgICAgUFdNX0lNWF9UUE1fQ25TQ19FTFNfUE9MQVJJVFlfSU5WRVJTRUQpDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wb2xhcml0eSA9IFBXTV9QT0xBUklUWV9JTlZF UlNFRDsNCj4gPiArICAgICAgICAgICAgIGVsc2UNCj4gPiArICAgICAgICAgICAgICAgICAgICAg LyoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICogQXNzdW1lIHJlc2VydmVkIHZhbHVlcyAo MmIwMCBhbmQgMmIxMSkgdG8geWllbGQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICogbm9y bWFsIHBvbGFyaXR5Lg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgKi8NCj4gPiArICAgICAg ICAgICAgICAgICAgICAgc3RhdGUtPnBvbGFyaXR5ID0gUFdNX1BPTEFSSVRZX05PUk1BTDsNCj4g PiArICAgICB9DQo+IA0KPiBXaGF0IGlzIHRoZSBnb29kIHJlYXNvbiB0byBwcmVmZXIgY2hhbi0+ cG9sYXJpdHkgb3ZlciByZWFkaW5nIG91dCB0aGUNCj4gaGFyZHdhcmUgc3RhdGU/DQoNClJlYWRp bmcgaXQgZnJvbSBERFIgaXMgZmFzdGVyIHRoYW4gYWNjZXNzaW5nIEhXIHJlZ2lzdGVyIGFzIHBl ciBwcmV2aW91cyBjb21tZW50Pw0KDQo+IA0KPiA+ICsgICAgIC8qIGdldCBjaGFubmVsIHN0YXR1 cyAqLw0KPiA+ICsgICAgIHN0YXRlLT5lbmFibGVkID0gRklFTERfR0VUKFBXTV9JTVhfVFBNX0Nu U0NfRUxTLCB2YWwpID8gdHJ1ZSA6DQo+ID4gK2ZhbHNlOyB9DQo+ID4gKw0KPiA+ICsvKiB0aGlz IGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlIGNhbGxlZCB3aXRoIG11dGV4IGhvbGQgKi8gc3Rh dGljDQo+ID4gK2ludCBwd21faW14X3RwbV9hcHBseV9odyhzdHJ1Y3QgcHdtX2NoaXAgKmNoaXAs DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHB3bV9kZXZpY2UgKnB3 bSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHdtX3N0YXRlICpz dGF0ZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW14X3RwbV9w d21fcGFyYW0gKnApIHsNCj4gPiArICAgICBzdHJ1Y3QgaW14X3RwbV9wd21fY2hpcCAqdHBtID0g dG9faW14X3RwbV9wd21fY2hpcChjaGlwKTsNCj4gPiArICAgICBzdHJ1Y3QgaW14X3RwbV9wd21f Y2hhbm5lbCAqY2hhbiA9IHB3bV9nZXRfY2hpcF9kYXRhKHB3bSk7DQo+ID4gKyAgICAgYm9vbCBw ZXJpb2RfdXBkYXRlID0gZmFsc2U7DQo+ID4gKyAgICAgYm9vbCBkdXR5X3VwZGF0ZSA9IGZhbHNl Ow0KPiA+ICsgICAgIHUzMiB2YWwsIGNtb2QsIGN1cl9wcmVzY2FsZTsNCj4gPiArICAgICB1bnNp Z25lZCBsb25nIHRpbWVvdXQ7DQo+ID4gKyAgICAgc3RydWN0IHB3bV9zdGF0ZSBjOw0KPiA+ICsN Cj4gPiArICAgICBpZiAoc3RhdGUtPnBlcmlvZCAhPSB0cG0tPnJlYWxfcGVyaW9kKSB7DQo+ID4g KyAgICAgICAgICAgICAvKg0KPiA+ICsgICAgICAgICAgICAgICogVFBNIGNvdW50ZXIgaXMgc2hh cmVkIGJ5IG11bHRpcGxlIGNoYW5uZWxzLCBzbw0KPiA+ICsgICAgICAgICAgICAgICogcHJlc2Nh bGUgYW5kIHBlcmlvZCBjYW4gTk9UIGJlIG1vZGlmaWVkIHdoZW4NCj4gPiArICAgICAgICAgICAg ICAqIHRoZXJlIGFyZSBtdWx0aXBsZSBjaGFubmVscyBpbiB1c2Ugd2l0aCBkaWZmZXJlbnQNCj4g PiArICAgICAgICAgICAgICAqIHBlcmlvZCBzZXR0aW5ncy4NCj4gPiArICAgICAgICAgICAgICAq Lw0KPiA+ICsgICAgICAgICAgICAgaWYgKHRwbS0+dXNlcl9jb3VudCA+IDEpDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAg dmFsID0gcmVhZGwodHBtLT5iYXNlICsgUFdNX0lNWF9UUE1fU0MpOw0KPiA+ICsgICAgICAgICAg ICAgY21vZCA9IEZJRUxEX0dFVChQV01fSU1YX1RQTV9TQ19DTU9ELCB2YWwpOw0KPiA+ICsgICAg ICAgICAgICAgY3VyX3ByZXNjYWxlID0gRklFTERfR0VUKFBXTV9JTVhfVFBNX1NDX1BTLCB2YWwp Ow0KPiA+ICsgICAgICAgICAgICAgaWYgKGNtb2QgJiYgY3VyX3ByZXNjYWxlICE9IHAtPnByZXNj YWxlKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOw0KPiA+ICsNCj4g PiArICAgICAgICAgICAgIC8qIHNldCBUUE0gY291bnRlciBwcmVzY2FsZSAqLw0KPiA+ICsgICAg ICAgICAgICAgdmFsICY9IH5QV01fSU1YX1RQTV9TQ19QUzsNCj4gPiArICAgICAgICAgICAgIHZh bCB8PSBGSUVMRF9QUkVQKFBXTV9JTVhfVFBNX1NDX1BTLCBwLT5wcmVzY2FsZSk7DQo+ID4gKyAg ICAgICAgICAgICB3cml0ZWwodmFsLCB0cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9TQyk7DQo+ID4g Kw0KPiA+ICsgICAgICAgICAgICAgLyoNCj4gPiArICAgICAgICAgICAgICAqIHNldCBwZXJpb2Qg Y291bnQ6DQo+ID4gKyAgICAgICAgICAgICAgKiBpZiB0aGUgUFdNIGlzIGRpc2FibGVkIChDTU9E WzE6MF0gPSAyYjAwKSwgdGhlbiBNT0QgcmVnaXN0ZXINCj4gPiArICAgICAgICAgICAgICAqIGlz IHVwZGF0ZWQgd2hlbiBNT0QgcmVnaXN0ZXIgaXMgd3JpdHRlbi4NCj4gPiArICAgICAgICAgICAg ICAqDQo+ID4gKyAgICAgICAgICAgICAgKiBpZiB0aGUgUFdNIGlzIGVuYWJsZWQgKENNT0RbMTow XSDiiaAgMmIwMCksIHRoZSBwZXJpb2QgbGVuZ3RoDQo+ID4gKyAgICAgICAgICAgICAgKiBpcyBs YXRjaGVkIGludG8gaGFyZHdhcmUgd2hlbiB0aGUgbmV4dCBwZXJpb2Qgc3RhcnRzLg0KPiA+ICsg ICAgICAgICAgICAgICovDQo+ID4gKyAgICAgICAgICAgICB3cml0ZWwocC0+bW9kLCB0cG0tPmJh c2UgKyBQV01fSU1YX1RQTV9NT0QpOw0KPiA+ICsgICAgICAgICAgICAgdHBtLT5yZWFsX3Blcmlv ZCA9IHN0YXRlLT5wZXJpb2Q7DQo+ID4gKyAgICAgICAgICAgICBwZXJpb2RfdXBkYXRlID0gdHJ1 ZTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHB3bV9pbXhfdHBtX2dldF9zdGF0ZShj aGlwLCBwd20sICZjKTsNCj4gDQo+IElmIHlvdSBtb3ZlIHRoaXMgY2FsbCBhYm92ZSB0aGUgcHJl dmlvdXMgaWYgYmxvY2sgeW91IGNhbiB1c2UgYy5wZXJpb2QgaW5zdGVhZA0KPiBvZiB0cG0tPnJl YWxfcGVyaW9kIHdoaWNoIGlzIGVhc2llciB0byBmb2xsb3cuDQoNCkkgdGhpbmsgdGhlIHBlcmlv ZCBjb3VsZCBiZSBjaGFuZ2VkIGJ5IHRoZSBpZiBibG9jaywgc28gZHV0eSBhbHNvIGJlIGNoYW5n ZWQsIG5lZWQNCnRvIHB1dCB0aGUgLmdldF9zdGF0ZSBoZXJlLCBhbSBJIHJpZ2h0Pw0KDQo+IA0K PiA+ICsgICAgIGlmIChzdGF0ZS0+ZHV0eV9jeWNsZSAhPSBjLmR1dHlfY3ljbGUpIHsNCj4gPiAr ICAgICAgICAgICAgIC8qDQo+ID4gKyAgICAgICAgICAgICAgKiBzZXQgY2hhbm5lbCB2YWx1ZToN Cj4gPiArICAgICAgICAgICAgICAqIGlmIHRoZSBQV00gaXMgZGlzYWJsZWQgKENNT0RbMTowXSA9 IDJiMDApLCB0aGVuIENuViByZWdpc3Rlcg0KPiA+ICsgICAgICAgICAgICAgICogaXMgdXBkYXRl ZCB3aGVuIENuViByZWdpc3RlciBpcyB3cml0dGVuLg0KPiA+ICsgICAgICAgICAgICAgICoNCj4g PiArICAgICAgICAgICAgICAqIGlmIHRoZSBQV00gaXMgZW5hYmxlZCAoQ01PRFsxOjBdIOKJoCAy YjAwKSwgdGhlIGR1dHkgbGVuZ3RoDQo+ID4gKyAgICAgICAgICAgICAgKiBpcyBsYXRjaGVkIGlu dG8gaGFyZHdhcmUgd2hlbiB0aGUgbmV4dCBwZXJpb2Qgc3RhcnRzLg0KPiA+ICsgICAgICAgICAg ICAgICovDQo+ID4gKyAgICAgICAgICAgICB3cml0ZWwocC0+dmFsLCB0cG0tPmJhc2UgKyBQV01f SU1YX1RQTV9DblYocHdtLT5od3B3bSkpOw0KPiA+ICsgICAgICAgICAgICAgZHV0eV91cGRhdGUg PSB0cnVlOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgLyogbWFrZSBzdXJlIE1PRCAm IENuViByZWdpc3RlcnMgYXJlIHVwZGF0ZWQgKi8NCj4gPiArICAgICBpZiAocGVyaW9kX3VwZGF0 ZSB8fCBkdXR5X3VwZGF0ZSkgew0KPiA+ICsgICAgICAgICAgICAgdGltZW91dCA9IGppZmZpZXMg KyBtc2Vjc190b19qaWZmaWVzKHRwbS0+cmVhbF9wZXJpb2QgLw0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TRUNfUEVSX01TRUMgKyAxKTsN Cj4gPiArICAgICAgICAgICAgIHdoaWxlIChyZWFkbCh0cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9N T0QpICE9IHAtPm1vZA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIHx8IHJlYWRsKHRwbS0+YmFz ZSArIFBXTV9JTVhfVFBNX0NuVihwd20tPmh3cHdtKSkNCj4gPiArICAgICAgICAgICAgICAgICAg ICAhPSBwLT52YWwpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaWYgKHRpbWVfYWZ0ZXIo amlmZmllcywgdGltZW91dCkpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIC1FVElNRTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgY3B1X3JlbGF4KCk7DQo+ID4g KyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgfQ0KPiANCj4gSWYgdGhlIFBXTSBpcyBydW5uaW5n IHlvdSB3YWl0IGluIHRoZSBhYm92ZSBsb29wIHVudGlsIHRoZSBuZXcgdmFsdWVzIGFyZQ0KPiBh Y3RpdmUgYnV0IGJlZm9yZSB5b3UgY29uZmlndXJlIHRoZSBwZXJpb2QuIEkgdGhpbmsgaW4gdGhl IGNhc2Ugd2hlcmUgdGhlDQo+IFBXTSBpcyBhY3RpdmUgYW5kIGEgY2hhbmdlIG9mIHBvbGFyaXR5 IGlzIHJlcXVlc3RlZCBpdCB3b3VsZCBiZSBtb3JlIGNvcnJlY3QNCj4gdG8gcmVmdXNlIHRoZSBj aGFuZ2UuDQoNCk5vdCB2ZXJ5IHVuZGVyc3RhbmQsIHRoZSBwZXJpb2QgaXMgY2hhbmdlZCBhdCB0 aGUgYmVnaW5uaW5nLCBhbmQgbW9zdCBvZiB0aGUgdGltZSwNCnBlcmlvZCBzaG91bGQgYmUgZml4 ZWQsIGNoYW5naW5nIHBvbGFyaXR5IHNob3VsZCBiZSBhbGxvd2VkIGV2ZW4gUFdNIGlzIGFjdGl2 ZT8NClRoYXQgZG9lcyBOT1QgaW50cm9kdWNlIHRvbyBtYW55IHRyb3VibGUsIGlzIGl0IGEgY29t bW9uIGNhc2UgdGhhdCBkeW5hbWljIGNoYW5naW5nDQpwb2xhcml0eSBpcyBOT1QgZ29vZD8gDQoN Cg0KPiANCj4gPiArICAgICB2YWwgPSByZWFkbCh0cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9DblND KHB3bS0+aHdwd20pKTsNCj4gPiArICAgICB2YWwgJj0gfihQV01fSU1YX1RQTV9DblNDX0VMUyB8 IFBXTV9JTVhfVFBNX0NuU0NfTVNBIHwNCj4gPiArICAgICAgICAgICAgICBQV01fSU1YX1RQTV9D blNDX01TQik7DQo+ID4gKyAgICAgaWYgKHN0YXRlLT5lbmFibGVkKSB7DQo+ID4gKyAgICAgICAg ICAgICAvKg0KPiA+ICsgICAgICAgICAgICAgICogc2V0IHBvbGFyaXR5IChmb3IgZWRnZS1hbGln bmVkIFBXTSBtb2RlcykNCj4gPiArICAgICAgICAgICAgICAqDQo+ID4gKyAgICAgICAgICAgICAg KiBFTFNbMTowXSA9IDJiMTAgeWllbGRzIG5vcm1hbCBwb2xhcml0eSBiZWhhdmlvdXIsDQo+ID4g KyAgICAgICAgICAgICAgKiBFTFNbMTowXSA9IDJiMDEgeWllbGRzIGludmVyc2VkIHBvbGFyaXR5 Lg0KPiA+ICsgICAgICAgICAgICAgICogVGhlIG90aGVyIHZhbHVlcyBhcmUgcmVzZXJ2ZWQuDQo+ ID4gKyAgICAgICAgICAgICAgKg0KPiA+ICsgICAgICAgICAgICAgICogcG9sYXJpdHkgc2V0dGlu Z3Mgd2lsbCBlbmFibGVkL2Rpc2FibGUgb3V0cHV0IHN0YXR1cw0KPiA+ICsgICAgICAgICAgICAg ICogaW1tZWRpYXRlbHksIHNvIGlmIHRoZSBjaGFubmVsIGlzIGRpc2FibGVkLCBuZWVkIHRvDQo+ ID4gKyAgICAgICAgICAgICAgKiBtYWtlIHN1cmUgTVNBL01TQi9FTFMgYXJlIHNldCB0byAwIHdo aWNoIG1lYW5zIGNoYW5uZWwNCj4gPiArICAgICAgICAgICAgICAqIGRpc2FibGVkLg0KPiANCj4g SSBkb24ndCB1bmRlcnN0YW5kIHRoaXMgY29tbWVudC4gRWl0aGVyIEVMUyA9IDAgaXMgcmVzZXJ2 ZWQgb3IgaXQgY2FuIGJlIHVzZWQuDQo+IFdoYXQgaXMgYW4gb3V0cHV0IHN0YXR1cz8NCg0KVGhl IHJlZmVyZW5jZSBtYW51YWwgT05MWSBzdGF0ZXMgaXQgYXMgcmVzZXJ2ZWQsIHNvIGhvdyB0byBh ZGQgY29tbWVudHMgaGVyZT8NCg0KPiANCj4gPiArICAgICAgICAgICAgIHZhbCB8PSBQV01fSU1Y X1RQTV9DblNDX01TQjsNCj4gPiArICAgICAgICAgICAgIHZhbCB8PSAoc3RhdGUtPnBvbGFyaXR5 ID09IFBXTV9QT0xBUklUWV9OT1JNQUwpID8NCj4gPiArICAgICAgICAgICAgICAgICAgICAgUFdN X0lNWF9UUE1fQ25TQ19FTFNfTk9STUFMIDoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgUFdN X0lNWF9UUE1fQ25TQ19FTFNfSU5WRVJTRUQ7DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIHdyaXRl bCh2YWwsIHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX0NuU0MocHdtLT5od3B3bSkpOw0KPiA+ICsN Cj4gPiArICAgICAvKiBjb250cm9sIHRoZSBjb3VudGVyIHN0YXR1cyAqLw0KPiA+ICsgICAgIGlm IChzdGF0ZS0+ZW5hYmxlZCAhPSBjLmVuYWJsZWQpIHsNCj4gPiArICAgICAgICAgICAgIHZhbCA9 IHJlYWRsKHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX1NDKTsNCj4gPiArICAgICAgICAgICAgIGlm IChzdGF0ZS0+ZW5hYmxlZCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBpZiAoKyt0cG0t PmVuYWJsZV9jb3VudCA9PSAxKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh bCB8PSBQV01fSU1YX1RQTV9TQ19DTU9EX0lOQ19FVkVSWV9DTEs7DQo+ID4gKyAgICAgICAgICAg ICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBpZiAoLS10cG0tPmVuYWJsZV9j b3VudCA9PSAwKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCAmPSB+UFdN X0lNWF9UUE1fU0NfQ01PRDsNCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAg IHdyaXRlbCh2YWwsIHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX1NDKTsNCj4gPiArICAgICB9DQo+ ID4gKw0KPiA+ICsgICAgIC8qIHNhdmUgbGFzdCBwb2xhcml0eSBzZXR0aW5nICovDQo+ID4gKyAg ICAgY2hhbi0+cG9sYXJpdHkgPSBzdGF0ZS0+cG9sYXJpdHk7DQo+ID4gKw0KPiA+ICsgICAgIHJl dHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHB3bV9pbXhfdHBtX2FwcGx5 KHN0cnVjdCBwd21fY2hpcCAqY2hpcCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgcHdtX2RldmljZSAqcHdtLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBwd21fc3RhdGUgKnN0YXRlKSB7DQo+ID4gKyAgICAgc3RydWN0IGlteF90cG1fcHdtX2No aXAgKnRwbSA9IHRvX2lteF90cG1fcHdtX2NoaXAoY2hpcCk7DQo+ID4gKyAgICAgc3RydWN0IGlt eF90cG1fcHdtX3BhcmFtIHBhcmFtOw0KPiA+ICsgICAgIHN0cnVjdCBwd21fc3RhdGUgcmVhbF9z dGF0ZTsNCj4gPiArICAgICBpbnQgcmV0Ow0KPiA+ICsNCj4gPiArICAgICByZXQgPSBwd21faW14 X3RwbV9yb3VuZF9zdGF0ZShjaGlwLCAmcGFyYW0sIHN0YXRlLCAmcmVhbF9zdGF0ZSk7DQo+ID4g KyAgICAgaWYgKHJldCkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiANCj4g cmV0dXJuIHJldDsNCg0KT0suDQoNCj4gDQo+ID4gKw0KPiA+ICsgICAgIG11dGV4X2xvY2soJnRw bS0+bG9jayk7DQo+ID4gKyAgICAgcmV0ID0gcHdtX2lteF90cG1fYXBwbHlfaHcoY2hpcCwgcHdt LCAmcmVhbF9zdGF0ZSwgJnBhcmFtKTsNCj4gDQo+IElNSE8gaXQgd291bGQgYmUgbmljZSBpZiB0 aGUgcGFyYW1ldGVycyB0byBwd21faW14X3RwbV9yb3VuZF9zdGF0ZSBhbmQNCj4gcHdtX2lteF90 cG1fYXBwbHlfaHcgd291bGQgYmUgdGhlIHNhbWUgYW4gaW4gdGhlIHNhbWUgb3JkZXIuIEFwYXJ0 DQo+IGZyb20gYmVpbmcgbmljZXIgdG8gcmVhZCB0aGlzIGlzIGFsc28gZWFzaWVyIGZvciB0aGUg Y29tcGlsZXIuDQoNCk9LLg0KDQo+IA0KPiA+ICsgICAgIG11dGV4X3VubG9jaygmdHBtLT5sb2Nr KTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIGludCBwd21faW14X3RwbV9yZXF1ZXN0KHN0cnVjdCBwd21fY2hpcCAqY2hpcCwgc3RydWN0 DQo+ID4gK3B3bV9kZXZpY2UgKnB3bSkgew0KPiA+ICsgICAgIHN0cnVjdCBpbXhfdHBtX3B3bV9j aGlwICp0cG0gPSB0b19pbXhfdHBtX3B3bV9jaGlwKGNoaXApOw0KPiA+ICsgICAgIHN0cnVjdCBp bXhfdHBtX3B3bV9jaGFubmVsICpjaGFuOw0KPiA+ICsNCj4gPiArICAgICBjaGFuID0ga3phbGxv YyhzaXplb2YoKmNoYW4pLCBHRlBfS0VSTkVMKTsNCj4gPiArICAgICBpZiAoIWNoYW4pDQo+ID4g KyAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKyAgICAgcHdtX3NldF9j aGlwX2RhdGEocHdtLCBjaGFuKTsNCj4gPiArDQo+ID4gKyAgICAgbXV0ZXhfbG9jaygmdHBtLT5s b2NrKTsNCj4gPiArICAgICB0cG0tPnVzZXJfY291bnQrKzsNCj4gPiArICAgICBtdXRleF91bmxv Y2soJnRwbS0+bG9jayk7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgdm9pZCBwd21faW14X3RwbV9mcmVlKHN0cnVjdCBwd21fY2hpcCAqY2hp cCwgc3RydWN0DQo+IHB3bV9kZXZpY2UNCj4gPiArKnB3bSkgew0KPiA+ICsgICAgIHN0cnVjdCBp bXhfdHBtX3B3bV9jaGlwICp0cG0gPSB0b19pbXhfdHBtX3B3bV9jaGlwKGNoaXApOw0KPiA+ICsN Cj4gPiArICAgICBtdXRleF9sb2NrKCZ0cG0tPmxvY2spOw0KPiA+ICsgICAgIHRwbS0+dXNlcl9j b3VudC0tOw0KPiA+ICsgICAgIG11dGV4X3VubG9jaygmdHBtLT5sb2NrKTsNCj4gPiArDQo+ID4g KyAgICAga2ZyZWUocHdtX2dldF9jaGlwX2RhdGEocHdtKSk7DQo+ID4gKyAgICAgcHdtX3NldF9j aGlwX2RhdGEocHdtLCBOVUxMKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBwd21fb3BzIGlteF90cG1fcHdtX29wcyA9IHsNCj4gPiArICAgICAucmVxdWVzdCA9IHB3 bV9pbXhfdHBtX3JlcXVlc3QsDQo+ID4gKyAgICAgLmZyZWUgPSBwd21faW14X3RwbV9mcmVlLA0K PiA+ICsgICAgIC5nZXRfc3RhdGUgPSBwd21faW14X3RwbV9nZXRfc3RhdGUsDQo+ID4gKyAgICAg LmFwcGx5ID0gcHdtX2lteF90cG1fYXBwbHksDQo+ID4gKyAgICAgLm93bmVyID0gVEhJU19NT0RV TEUsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHB3bV9pbXhfdHBtX3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpIHsNCj4gPiArICAgICBzdHJ1Y3QgaW14X3RwbV9w d21fY2hpcCAqdHBtOw0KPiA+ICsgICAgIGludCByZXQ7DQo+ID4gKyAgICAgdTMyIHZhbDsNCj4g PiArDQo+ID4gKyAgICAgdHBtID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqdHBt KSwgR0ZQX0tFUk5FTCk7DQo+ID4gKyAgICAgaWYgKCF0cG0pDQo+ID4gKyAgICAgICAgICAgICBy ZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKyAgICAgcGxhdGZvcm1fc2V0X2RydmRhdGEocGRl diwgdHBtKTsNCj4gPiArDQo+ID4gKyAgICAgdHBtLT5iYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3Jl bWFwX3Jlc291cmNlKHBkZXYsIDApOw0KPiA+ICsgICAgIGlmIChJU19FUlIodHBtLT5iYXNlKSkN Cj4gPiArICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKHRwbS0+YmFzZSk7DQo+ID4gKw0KPiA+ ICsgICAgIHRwbS0+Y2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOw0KPiA+ICsg ICAgIGlmIChJU19FUlIodHBtLT5jbGspKSB7DQo+ID4gKyAgICAgICAgICAgICByZXQgPSBQVFJf RVJSKHRwbS0+Y2xrKTsNCj4gPiArICAgICAgICAgICAgIGlmIChyZXQgIT0gLUVQUk9CRV9ERUZF UikNCj4gPiArICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmcGRldi0+ZGV2LA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gZ2V0IFBXTSBjbG9jazogJWRc biIsIHJldCk7DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ICsgICAgIH0NCj4g PiArDQo+ID4gKyAgICAgcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHRwbS0+Y2xrKTsNCj4gPiAr ICAgICBpZiAocmV0KSB7DQo+ID4gKyAgICAgICAgICAgICBkZXZfZXJyKCZwZGV2LT5kZXYsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gcHJlcGFyZSBvciBlbmFibGUgY2xv Y2s6ICVkXG4iLCByZXQpOw0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArICAg ICB9DQo+ID4gKw0KPiA+ICsgICAgIHRwbS0+Y2hpcC5kZXYgPSAmcGRldi0+ZGV2Ow0KPiA+ICsg ICAgIHRwbS0+Y2hpcC5vcHMgPSAmaW14X3RwbV9wd21fb3BzOw0KPiA+ICsgICAgIHRwbS0+Y2hp cC5iYXNlID0gLTE7DQo+ID4gKyAgICAgdHBtLT5jaGlwLm9mX3hsYXRlID0gb2ZfcHdtX3hsYXRl X3dpdGhfZmxhZ3M7DQo+ID4gKyAgICAgdHBtLT5jaGlwLm9mX3B3bV9uX2NlbGxzID0gMzsNCj4g PiArDQo+ID4gKyAgICAgLyogZ2V0IG51bWJlciBvZiBjaGFubmVscyAqLw0KPiA+ICsgICAgIHZh bCA9IHJlYWRsKHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX1BBUkFNKTsNCj4gPiArICAgICB0cG0t PmNoaXAubnB3bSA9IEZJRUxEX0dFVChQV01fSU1YX1RQTV9QQVJBTV9DSEFOLCB2YWwpOw0KPiA+ ICsNCj4gPiArICAgICBtdXRleF9pbml0KCZ0cG0tPmxvY2spOw0KPiA+ICsNCj4gPiArICAgICBy ZXQgPSBwd21jaGlwX2FkZCgmdHBtLT5jaGlwKTsNCj4gPiArICAgICBpZiAocmV0KSB7DQo+ID4g KyAgICAgICAgICAgICBkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWRkIFBXTSBjaGlw OiAlZFxuIiwgcmV0KTsNCj4gPiArICAgICAgICAgICAgIGNsa19kaXNhYmxlX3VucHJlcGFyZSh0 cG0tPmNsayk7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gcmV0Ow0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHB3bV9pbXhfdHBtX3JlbW92ZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KSB7DQo+ID4gKyAgICAgc3RydWN0IGlteF90cG1fcHdtX2NoaXAg KnRwbSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KPiA+ICsgICAgIGludCByZXQgPSBw d21jaGlwX3JlbW92ZSgmdHBtLT5jaGlwKTsNCj4gPiArDQo+ID4gKyAgICAgY2xrX2Rpc2FibGVf dW5wcmVwYXJlKHRwbS0+Y2xrKTsNCj4gDQo+IEl0J3MgdW5mb3J0dW5hdGUgdGhhdCBwd21jaGlw X3JlbW92ZSBjYW4gZmFpbCBhcyB0aGUgcmV0dXJuIHZhbHVlIG9mDQo+IHB3bV9pbXhfdHBtX3Jl bW92ZSBpcyBpZ25vcmVkLiBBbHNvIGRpc2FibGluZyB0aGUgY2xvY2sgaXMgYmFkIHRoZW4uDQo+ IEZpeGluZyB0aGlzIGlzIG91dCBvZiBzY29wZSBmb3IgdGhpcyBwYXRjaCB0aG91Z2guIFRoaXMg bmVlZHMgY2hhbmdlcyBpbiB0aGUNCj4gcHdtIGNvcmUuDQoNClRoYW5rcywNCkFuc29uLg0KDQo+ IA0KPiA+ICsgICAgIHJldHVybiByZXQ7DQo+ID4gK30NCj4gDQo+IEJlc3QgcmVnYXJkcw0KPiBV d2UNCj4gDQo+IC0tDQo+IFBlbmd1dHJvbml4IGUuSy4gICAgICAgICAgICAgICAgICAgICAgICAg ICB8IFV3ZSBLbGVpbmUtS8O2bmlnICAgICAgICAgICAgfA0KPiBJbmR1c3RyaWFsIExpbnV4IFNv bHV0aW9ucyAgICAgICAgICAgICAgICAgfA0KPiBodHRwczovL2V1cjAxLnNhZmVsaW5rcy5wcm90 ZWN0aW9uLm91dGxvb2suY29tLz91cmw9aHR0cCUzQSUyRiUyRnd3dy5wDQo+IGVuZ3V0cm9uaXgu ZGUlMkYmYW1wO2RhdGE9MDIlN0MwMSU3Q2Fuc29uLmh1YW5nJTQwbnhwLmNvbSU3Q2U5DQo+IDlm OGFhOWQ2ODI0NGZkNDFjNjA4ZDZiY2I3NTMwNiU3QzY4NmVhMWQzYmMyYjRjNmZhOTJjZDk5YzVj MzAxNjM1DQo+ICU3QzAlN0MwJTdDNjM2OTAzODkyODkwMjMyNzA5JmFtcDtzZGF0YT1KWFYwV1Zh bHNpc0JHdG9pbWZMRTlHNw0KPiBUQ3ZIaGd1QXEzcVBKaDV3YWEyYyUzRCZhbXA7cmVzZXJ2ZWQ9 MCAgfA0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGlu dXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRl YWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgt YXJtLWtlcm5lbAo=