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.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=ham 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 4DF0DC43381 for ; Mon, 18 Mar 2019 07:41:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D08DD2075C for ; Mon, 18 Mar 2019 07:41:23 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=nxp.com header.i=@nxp.com header.b="ChCa/W9G" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727411AbfCRHlW (ORCPT ); Mon, 18 Mar 2019 03:41:22 -0400 Received: from mail-eopbgr70087.outbound.protection.outlook.com ([40.107.7.87]:17764 "EHLO EUR04-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726135AbfCRHlV (ORCPT ); Mon, 18 Mar 2019 03:41:21 -0400 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=++wxAQ+UE2/rs9IzsEOboAoDIvAOOB3F5P0/3NslrkI=; b=ChCa/W9GrAK8A8pzwuVBVNyjIlToGdpMeGp7PNKb5O9oaP3qqr6CacaZVEEF1KQfPDSvs1vPfQ6xqXE7LA+kYCMml7IPl3ImBZ+6To7LzP1ly+pftKbEd76S2QXVrMtCdTdyXfJgF+831XDqrSYE1Kon5Y0wYhYQZ+FgE7RYjFw= Received: from DB3PR0402MB3916.eurprd04.prod.outlook.com (52.134.72.18) by DB3PR0402MB3868.eurprd04.prod.outlook.com (52.134.71.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1709.14; Mon, 18 Mar 2019 07:41:02 +0000 Received: from DB3PR0402MB3916.eurprd04.prod.outlook.com ([fe80::f1b4:a1fb:cfd1:3f08]) by DB3PR0402MB3916.eurprd04.prod.outlook.com ([fe80::f1b4:a1fb:cfd1:3f08%6]) with mapi id 15.20.1709.015; Mon, 18 Mar 2019 07:41:02 +0000 From: Anson Huang To: =?utf-8?B?VXdlIEtsZWluZS1Lw7ZuaWc=?= CC: "thierry.reding@gmail.com" , "robh+dt@kernel.org" , "mark.rutland@arm.com" , "shawnguo@kernel.org" , "s.hauer@pengutronix.de" , "kernel@pengutronix.de" , "festevam@gmail.com" , "linux@armlinux.org.uk" , "otavio@ossystems.com.br" , "stefan@agner.ch" , Leonard Crestez , "schnitzeltony@gmail.com" , "jan.tuerk@emtrion.com" , Robin Gong , "linux-pwm@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , dl-linux-imx Subject: RE: [PATCH V4 2/5] pwm: Add i.MX TPM PWM driver support Thread-Topic: [PATCH V4 2/5] pwm: Add i.MX TPM PWM driver support Thread-Index: AQHU2siU0bWGOMWkiUi6PBGed50RsKYMb0wAgARM6KA= Date: Mon, 18 Mar 2019 07:41:02 +0000 Message-ID: References: <1552610505-13568-1-git-send-email-Anson.Huang@nxp.com> <1552610505-13568-3-git-send-email-Anson.Huang@nxp.com> <20190315093532.xw5ivfkxrwvrkvix@pengutronix.de> In-Reply-To: <20190315093532.xw5ivfkxrwvrkvix@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.66] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 7791c183-1e9b-4743-94a3-08d6ab75123e x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020);SRVR:DB3PR0402MB3868; x-ms-traffictypediagnostic: DB3PR0402MB3868: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-forefront-prvs: 098076C36C x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(366004)(136003)(396003)(39860400002)(346002)(376002)(189003)(199004)(13464003)(5660300002)(14444005)(68736007)(966005)(476003)(14454004)(97736004)(45080400002)(52536014)(66574012)(7416002)(44832011)(486006)(11346002)(446003)(71200400001)(6246003)(71190400001)(26005)(30864003)(25786009)(105586002)(478600001)(106356001)(4326008)(186003)(86362001)(81156014)(6436002)(6916009)(9686003)(8936002)(55016002)(53946003)(2906002)(229853002)(6306002)(33656002)(66066001)(3846002)(6116002)(305945005)(74316002)(102836004)(7736002)(76176011)(54906003)(81166006)(53936002)(7696005)(6506007)(8676002)(256004)(53546011)(316002)(99286004)(579004);DIR:OUT;SFP:1101;SCL:1;SRVR:DB3PR0402MB3868;H:DB3PR0402MB3916.eurprd04.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A: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: tsTOaZLlux+JEp2qJH6M59PNv5F/v0ZMPSUn3dt9EJ9BldPpOPcmkPgp3w1aPphr6H1ncWssywitJdnbzhGF9ezD5ivFYamw+TvYKpPJlCj8jNpFkzNrFg/xxF+2g7HNMbOJFU8toSiim4SZ9CnNWqJwqo90O6Pa52b8dUEFYELimaaWDlVP3W8baMfy4mrP4BxTVTcCCDQ9bjo6ovCSIxDzOPsJKb8ZGq9qn6vXRAL9GQbNI8L7iAkppvFGiAaX+DXYziiWddP1aGs78k/oJ/1qe6v2qrg5fUHkevCws1uRTSmzsYKae+wuvjWewQdH7/01/E5+VS3HF2Uzh20B4KMQcaUGDhkbhuLe3TbK+pDPbN0VKuj4Br58gxfuDNwrk+7X1BdiDCNwT80y0EyhqXaNTz4uJT4WBOY1NX7nh1g= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7791c183-1e9b-4743-94a3-08d6ab75123e X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Mar 2019 07:41:02.3036 (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: DB3PR0402MB3868 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGksVXdlDQoNCkJlc3QgUmVnYXJkcyENCkFuc29uIEh1YW5nDQoNCj4gLS0tLS1PcmlnaW5hbCBN ZXNzYWdlLS0tLS0NCj4gRnJvbTogVXdlIEtsZWluZS1Lw7ZuaWcgW21haWx0bzp1LmtsZWluZS1r b2VuaWdAcGVuZ3V0cm9uaXguZGVdDQo+IFNlbnQ6IDIwMTnlubQz5pyIMTXml6UgMTc6MzYNCj4g VG86IEFuc29uIEh1YW5nIDxhbnNvbi5odWFuZ0BueHAuY29tPg0KPiBDYzogdGhpZXJyeS5yZWRp bmdAZ21haWwuY29tOyByb2JoK2R0QGtlcm5lbC5vcmc7IG1hcmsucnV0bGFuZEBhcm0uY29tOw0K PiBzaGF3bmd1b0BrZXJuZWwub3JnOyBzLmhhdWVyQHBlbmd1dHJvbml4LmRlOyBrZXJuZWxAcGVu Z3V0cm9uaXguZGU7DQo+IGZlc3RldmFtQGdtYWlsLmNvbTsgbGludXhAYXJtbGludXgub3JnLnVr OyBvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icjsNCj4gc3RlZmFuQGFnbmVyLmNoOyBMZW9uYXJkIENy ZXN0ZXogPGxlb25hcmQuY3Jlc3RlekBueHAuY29tPjsNCj4gc2Nobml0emVsdG9ueUBnbWFpbC5j b207IGphbi50dWVya0BlbXRyaW9uLmNvbTsgUm9iaW4gR29uZw0KPiA8eWliaW4uZ29uZ0BueHAu Y29tPjsgbGludXgtcHdtQHZnZXIua2VybmVsLm9yZzsNCj4gZGV2aWNldHJlZUB2Z2VyLmtlcm5l bC5vcmc7IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZzsgbGludXgtDQo+IGtl cm5lbEB2Z2VyLmtlcm5lbC5vcmc7IGRsLWxpbnV4LWlteCA8bGludXgtaW14QG54cC5jb20+DQo+ IFN1YmplY3Q6IFJlOiBbUEFUQ0ggVjQgMi81XSBwd206IEFkZCBpLk1YIFRQTSBQV00gZHJpdmVy IHN1cHBvcnQNCj4gDQo+IE9uIEZyaSwgTWFyIDE1LCAyMDE5IGF0IDEyOjQ2OjUxQU0gKzAwMDAs IEFuc29uIEh1YW5nIHdyb3RlOg0KPiA+IGkuTVg3VUxQIGhhcyBUUE0oTG93IFBvd2VyIFRpbWVy L1B1bHNlIFdpZHRoIE1vZHVsYXRpb24gTW9kdWxlKQ0KPiA+IGluc2lkZSwgYWRkIFRQTSBQV00g ZHJpdmVyIHN1cHBvcnQuDQo+ID4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBBbnNvbiBIdWFuZyA8QW5z b24uSHVhbmdAbnhwLmNvbT4NCj4gPiAtLS0NCj4gPiBDaGFuZ2VzIHNpbmNlIFYzOg0KPiA+IAkt IHVzZSAiUFdNX0lNWF8iIGFzIG1hY3JvIGRlZmluaXRpb24gcHJlZml4IGFuZCAicHdtX2lteF8i IGFzDQo+IGZ1bmN0aW9uIHByZWZpeDsNCj4gPiAJLSBpbXByb3ZlIHRoZSBsaW1pdGF0aW9uIHR4 dDsNCj4gPiAJLSByZXR1cm4gZXJyb3IgZm9yIGNvbmZpZ3VyaW5nIHBlcmlvZC9wcmVzY2FsZSBm YWlsOw0KPiA+IAktIGRpc2FibGUgY2xvY2sgd2hlbiBkcml2ZXIgcHJvYmUgZmFpbGVkIGFuZCBy ZW1vdmU7DQo+ID4gCS0gaW1wcm92ZSBtb2R1bGUgYnVpbGQgZGVwZW5kZW5jeTsNCj4gPiAJLSBp bnRyb2R1Y2UgdXNlcl9jb3VudCB0byBkZXRlcm1pbmUgd2hldGhlciBjb25maWd1aW5nIHBlcmlv ZCBpcw0KPiBhbGxvd2VkOw0KPiA+IAktIHNvbWUgbG9naWMgaW1wcm92ZW1lbnQgZm9yIHNldHRp bmcgZHV0eS9zdGF0dXMgZXRjLjsNCj4gPiAtLS0NCj4gPiAgZHJpdmVycy9wd20vS2NvbmZpZyAg ICAgICB8ICAxMiArKw0KPiA+ICBkcml2ZXJzL3B3bS9NYWtlZmlsZSAgICAgIHwgICAxICsNCj4g PiAgZHJpdmVycy9wd20vcHdtLWlteC10cG0uYyB8IDM5Ng0KPiA+ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gPiAgMyBmaWxlcyBjaGFuZ2VkLCA0MDkg aW5zZXJ0aW9ucygrKQ0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wd20vcHdtLWlt eC10cG0uYw0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHdtL0tjb25maWcgYi9kcml2 ZXJzL3B3bS9LY29uZmlnIGluZGV4DQo+ID4gYThmNDdkZi4uNjExN2ZlNiAxMDA2NDQNCj4gPiAt LS0gYS9kcml2ZXJzL3B3bS9LY29uZmlnDQo+ID4gKysrIGIvZHJpdmVycy9wd20vS2NvbmZpZw0K PiA+IEBAIC0yMDEsNiArMjAxLDE4IEBAIGNvbmZpZyBQV01fSU1YDQo+ID4gIAkgIFRvIGNvbXBp bGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUNCj4g PiAgCSAgd2lsbCBiZSBjYWxsZWQgcHdtLWlteC4NCj4gPg0KPiA+ICtjb25maWcgUFdNX0lNWF9U UE0NCj4gPiArCXRyaXN0YXRlICJpLk1YIFRQTSBQV00gc3VwcG9ydCINCj4gPiArCWRlcGVuZHMg b24gQVJDSF9NWEMgfHwgQ09NUElMRV9URVNUDQo+ID4gKwlkZXBlbmRzIG9uIEhBVkVfQ0xLICYm IEhBU19JT01FTQ0KPiA+ICsNCj4gDQo+IEkgdGhpbmsgdGhpcyBlbXB0eSBuZXdsaW5lIGlzIHVu dXN1YWwuDQoNCkFncmVlZC4NCg0KPiANCj4gPiArCWhlbHANCj4gPiArCSAgR2VuZXJpYyBQV00g ZnJhbWV3b3JrIGRyaXZlciBmb3IgaS5NWDdVTFAgVFBNIG1vZHVsZSwgVFBNJ3MNCj4gZnVsbA0K PiA+ICsJICBuYW1lIGlzIExvdyBQb3dlciBUaW1lci9QdWxzZSBXaWR0aCBNb2R1bGF0aW9uIE1v ZHVsZS4NCj4gPiArDQo+ID4gKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUs IGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUNCj4gPiArCSAgd2lsbCBiZSBjYWxsZWQgcHdtLWlt eC10cG0uDQo+ID4gKw0KPiA+ICBjb25maWcgUFdNX0paNDc0MA0KPiA+ICAJdHJpc3RhdGUgIklu Z2VuaWMgSlo0N3h4IFBXTSBzdXBwb3J0Ig0KPiA+ICAJZGVwZW5kcyBvbiBNQUNIX0lOR0VOSUMN Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wd20vTWFrZWZpbGUgYi9kcml2ZXJzL3B3bS9NYWtl ZmlsZSBpbmRleA0KPiA+IDljNjc2YTAuLjY0ZTAzNmMgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVy cy9wd20vTWFrZWZpbGUNCj4gPiArKysgYi9kcml2ZXJzL3B3bS9NYWtlZmlsZQ0KPiA+IEBAIC0x OCw2ICsxOCw3IEBAIG9iai0kKENPTkZJR19QV01fRlNMX0ZUTSkJKz0gcHdtLWZzbC1mdG0ubw0K PiA+ICBvYmotJChDT05GSUdfUFdNX0hJQlZUKQkJKz0gcHdtLWhpYnZ0Lm8NCj4gPiAgb2JqLSQo Q09ORklHX1BXTV9JTUcpCQkrPSBwd20taW1nLm8NCj4gPiAgb2JqLSQoQ09ORklHX1BXTV9JTVgp CQkrPSBwd20taW14Lm8NCj4gPiArb2JqLSQoQ09ORklHX1BXTV9JTVhfVFBNKQkrPSBwd20taW14 LXRwbS5vDQo+ID4gIG9iai0kKENPTkZJR19QV01fSlo0NzQwKQkrPSBwd20tano0NzQwLm8NCj4g PiAgb2JqLSQoQ09ORklHX1BXTV9MUDM5NDMpCSs9IHB3bS1scDM5NDMubw0KPiA+ICBvYmotJChD T05GSUdfUFdNX0xQQzE4WFhfU0NUKQkrPSBwd20tbHBjMTh4eC1zY3Qubw0KPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL3B3bS9wd20taW14LXRwbS5jIGIvZHJpdmVycy9wd20vcHdtLWlteC10cG0u Yw0KPiBuZXcNCj4gPiBmaWxlIG1vZGUgMTAwNjQ0IGluZGV4IDAwMDAwMDAuLmYxMDhmNzUNCj4g PiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9wd20vcHdtLWlteC10cG0uYw0KPiA+ IEBAIC0wLDAgKzEsMzk2IEBADQo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wDQo+ID4gKy8qDQo+ID4gKyAqIENvcHlyaWdodCAyMDE4LTIwMTkgTlhQLg0KPiA+ICsgKg0K PiA+ICsgKiBMaW1pdGF0aW9uczoNCj4gPiArICogLSBUaGUgVFBNIGNvdW50ZXIgYW5kIHBlcmlv ZCBjb3VudGVyIGFyZSBzaGFyZWQgYmV0d2Vlbg0KPiA+ICsgKiAgIG11bHRpcGxlIGNoYW5uZWxz LCBzbyBhbGwgY2hhbm5lbHMgc2hvdWxkIHVzZSBzYW1lIHBlcmlvZA0KPiA+ICsgKiAgIHNldHRp bmdzLg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4NCj4g PiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvZXJyLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9pby5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbG9nMi5oPg0K PiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZi5o Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPg0KPiA+ICsjaW5jbHVkZSA8bGlu dXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wd20uaD4NCj4gPiAr I2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCj4gPiArDQo+ID4gKyNkZWZpbmUgUFdNX0lNWF9UUE1f R0xPQkFMCTB4OA0KPiA+ICsjZGVmaW5lIFBXTV9JTVhfVFBNX1NDCQkweDEwDQo+ID4gKyNkZWZp bmUgUFdNX0lNWF9UUE1fQ05UCQkweDE0DQo+ID4gKyNkZWZpbmUgUFdNX0lNWF9UUE1fTU9ECQkw eDE4DQo+ID4gKyNkZWZpbmUgUFdNX0lNWF9UUE1fQzBTQwkweDIwDQo+ID4gKyNkZWZpbmUgUFdN X0lNWF9UUE1fQzBWCQkweDI0DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBXTV9JTVhfVFBNX1NDX0NN T0QJCQlHRU5NQVNLKDQsIDMpDQo+ID4gKyNkZWZpbmUgUFdNX0lNWF9UUE1fU0NfQ01PRF9JTkNf RVZFUllfQ0xLCUJJVCgzKQ0KPiA+ICsjZGVmaW5lIFBXTV9JTVhfVFBNX1NDX0NQV01TCQkJQklU KDUpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBXTV9JTVhfVFBNX0NuU0NfQ0hGCUJJVCg3KQ0KPiA+ ICsjZGVmaW5lIFBXTV9JTVhfVFBNX0NuU0NfTVNuQglCSVQoNSkNCj4gPiArI2RlZmluZSBQV01f SU1YX1RQTV9DblNDX01TbkEJQklUKDQpDQo+ID4gKyNkZWZpbmUgUFdNX0lNWF9UUE1fQ25TQ19F TFNuQglCSVQoMykNCj4gPiArI2RlZmluZSBQV01fSU1YX1RQTV9DblNDX0VMU25BCUJJVCgyKQ0K PiA+ICsNCj4gPiArI2RlZmluZSBQV01fSU1YX1RQTV9TQ19QU19NQVNLCQkweDcNCj4gPiArI2Rl ZmluZSBQV01fSU1YX1RQTV9NT0RfTU9EX01BU0sJMHhmZmZmDQo+ID4gKw0KPiA+ICsjZGVmaW5l IFBXTV9JTVhfVFBNX01BWF9DT1VOVAkJMHhmZmZmDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBXTV9J TVhfVFBNX01BWF9DSEFOTkVMX05VTQk2DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBXTV9JTVhfVFBN X0NuU0MobikJKFBXTV9JTVhfVFBNX0MwU0MgKyBuICogMHg4KQ0KPiA+ICsjZGVmaW5lIFBXTV9J TVhfVFBNX0NuVihuKQkoUFdNX0lNWF9UUE1fQzBWICsgbiAqIDB4OCkNCj4gDQo+IHBhcmVudGhl c2lzIGFyb3VuZCBuIHBsZWFzZS4NCg0KT0suDQoNCj4gDQo+ID4gK3N0cnVjdCBpbXhfdHBtX3B3 bV9jaGlwIHsNCj4gPiArCXN0cnVjdCBwd21fY2hpcCBjaGlwOw0KPiA+ICsJc3RydWN0IGNsayAq Y2xrOw0KPiA+ICsJdm9pZCBfX2lvbWVtICpiYXNlOw0KPiA+ICsJc3RydWN0IG11dGV4IGxvY2s7 DQo+ID4gKwl1MzIgdXNlcl9jb3VudDsNCj4gPiArCXUzMiBjaG5fY29uZmlnW1BXTV9JTVhfVFBN X01BWF9DSEFOTkVMX05VTV07DQo+ID4gKwlib29sIGNobl9zdGF0dXNbUFdNX0lNWF9UUE1fTUFY X0NIQU5ORUxfTlVNXTsNCj4gPiArfTsNCj4gPiArDQo+ID4gKyNkZWZpbmUgdG9faW14X3RwbV9w d21fY2hpcChfY2hpcCkJXA0KPiA+ICsJCWNvbnRhaW5lcl9vZihfY2hpcCwgc3RydWN0IGlteF90 cG1fcHdtX2NoaXAsIGNoaXApDQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHB3bV9pbXhfdHBtX2Nv bmZpZ19jb3VudGVyKHN0cnVjdCBwd21fY2hpcCAqY2hpcCwgdTMyDQo+ID4gK3BlcmlvZCkgew0K PiA+ICsJc3RydWN0IGlteF90cG1fcHdtX2NoaXAgKnRwbSA9IHRvX2lteF90cG1fcHdtX2NoaXAo Y2hpcCk7DQo+ID4gKwl1MzIgcGVyaW9kX2NudCwgdmFsLCBkaXYsIHNhdmVkX2Ntb2Q7DQo+ID4g Kwl1NjQgdG1wOw0KPiA+ICsNCj4gPiArCXRtcCA9IGNsa19nZXRfcmF0ZSh0cG0tPmNsayk7DQo+ ID4gKwl0bXAgKj0gcGVyaW9kOw0KPiA+ICsJdmFsID0gRElWX1JPVU5EX0NMT1NFU1RfVUxMKHRt cCwgTlNFQ19QRVJfU0VDKTsNCj4gPiArCWlmICh2YWwgPCBQV01fSU1YX1RQTV9NQVhfQ09VTlQp DQo+IA0KPiA8PSA/DQoNCkFncmVlZC4NCg0KPiANCj4gPiArCQlkaXYgPSAwOw0KPiA+ICsJZWxz ZQ0KPiA+ICsJCWRpdiA9IGlsb2cyKHJvdW5kdXBfcG93X29mX3R3byh2YWwgLw0KPiA+ICsJCQko UFdNX0lNWF9UUE1fTUFYX0NPVU5UICsgMSkpKTsNCj4gPiArCWlmIChkaXYgPiBQV01fSU1YX1RQ TV9TQ19QU19NQVNLKSB7DQo+IA0KPiAjZGVmaW5lIFBXTV9JTVhfVFBNX1NDX1BTCUdFTk1BU0so MCwgMikNCj4gDQo+IGlmICghRklFTERfRklUKFBXTV9JTVhfVFBNX1NDX1BTLCBkaXYpKSB7DQo+ IAkuLi4NCg0KT0suDQoNCj4gDQo+ID4gKwkJZGV2X2VycihjaGlwLT5kZXYsDQo+ID4gKwkJCSJm YWlsZWQgdG8gZmluZCB2YWxpZCBwcmVzY2FsZSB2YWx1ZSFcbiIpOw0KPiA+ICsJCXJldHVybiAt RUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIG1ha2Ugc3VyZSBjb3VudGVyIGlzIGRp c2FibGVkIGZvciBwcm9ncmFtbWluZyBwcmVzY2FsZSAqLw0KPiA+ICsJdmFsID0gcmVhZGwodHBt LT5iYXNlICsgUFdNX0lNWF9UUE1fU0MpOw0KPiA+ICsJc2F2ZWRfY21vZCA9IHZhbCAmIFBXTV9J TVhfVFBNX1NDX0NNT0Q7DQo+IA0KPiBzYXZlZF9jbW9kID0gRklFTERfR0VUKFBXTV9JTVhfVFBN X1NDX0NNT0QsIHZhbCkgPw0KDQpPSy4NCg0KPiANCj4gPiArCXZhbCAmPSB+UFdNX0lNWF9UUE1f U0NfQ01PRDsNCj4gPiArCXdyaXRlbCh2YWwsIHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX1NDKTsN Cj4gDQo+IEFzIHRoaXMgaW50ZXJydXB0cyB0aGUgb3V0cHV0LCBwbGVhc2Ugb25seSBkbyBpdCBp ZiBuZWNlc3NhcnkuDQoNCk9LLCB3aWxsIGRvIGl0IE9OTFkgd2hlbiBpdCBpcyBlbmFibGVkIHBy ZXZpb3VzbHkuDQoNCj4gDQo+ID4gKwkvKiBzZXQgVFBNIGNvdW50ZXIgcHJlc2NhbGUgKi8NCj4g PiArCXZhbCA9IHJlYWRsKHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX1NDKTsNCj4gPiArCXZhbCAm PSB+UFdNX0lNWF9UUE1fU0NfUFNfTUFTSzsNCj4gPiArCXZhbCB8PSBkaXY7DQo+IA0KPiB2YWwg fD0gRklFTERfUFJFUChQV01fSU1YX1RQTV9TQ19QU19NQVNLLCBkaXYpOw0KDQpPSy4NCg0KPiAN Cj4gPiArCXdyaXRlbCh2YWwsIHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX1NDKTsNCj4gPiArDQo+ ID4gKwkvKg0KPiA+ICsJICogc2V0IHBlcmlvZCBjb3VudGVyOiBhY2NvcmRpbmcgdG8gUk0sIHRo ZSBNT0QgcmVnaXN0ZXIgaXMNCj4gPiArCSAqIHVwZGF0ZWQgaW1tZWRpYXRlbHkgd2hlbiBDTU9E WzE6MF0gPSAyYicwMCAoY291bnRlciBkaXNhYmxlZCkuDQo+IA0KPiAJdXBkYXRlZCBpbW1lZGlh dGVseSBhZnRlciBDTU9EWzE6MF0gPSAyYicwMCBhYm92ZQ0KPiANCj4gPiArCSAqLw0KPiA+ICsJ ZG9fZGl2KHRtcCwgTlNFQ19QRVJfU0VDKTsNCj4gPiArCXBlcmlvZF9jbnQgPSBESVZfUk9VTkRf Q0xPU0VTVF9VTEwodG1wLCAxIDw8IGRpdikNCj4gDQo+IFRoZSAocGFydGlhbCkgUkhTIGlzIGVx dWl2YWxlbnQgdG8NCj4gDQo+IAkodG1wICsgKDEgPDwgZGl2KSA+PiAxKSA+PiBkaXYNCj4gDQo+ IHdoaWNoIG1pZ2h0IGJlIGNoZWFwZXIgZm9yIHRoZSBDUFUgdG8gY2FsY3VsYXRlLg0KDQpPSw0K DQo+IA0KPiA+ICsJCQkmIFBXTV9JTVhfVFBNX01PRF9NT0RfTUFTSzsNCj4gDQo+IElmIGl0IGNh biBoYXBwZW4sIHRoYXQgdGhpcyBtYXNraW5nIGNoYW5nZXMgdGhlIHJlc3VsdCwgdGhpcyBpcyBh biBlcnJvciB0aGF0DQo+IG5lZWRzIGhhbmRsaW5nLiAoQW5kIGlmIG5vdCwgZHJvcCBpdDsgbWF5 YmUgaW4gZmF2b3VyIG9mIGENCj4gY29tbWVudC4pDQoNCldpbGwgdXNlIGJlbG93IGZvciBlcnJv ciBjaGVjazoNCiAgICAgICAgIGlmIChwZXJpb2RfY250ID4gUFdNX0lNWF9UUE1fTU9EX01PRCkg ew0KICAgICAgICAgICAgICAgICBkZXZfZXJyKGNoaXAtPmRldiwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAiZmFpbGVkIHRvIGZpbmQgdmFsaWQgcGVyaW9kIGNvdW50IVxuIik7DQogICAgICAg ICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KICAgICAgICAgfQ0KDQoNCj4gDQo+ID4gKwl3cml0 ZWwocGVyaW9kX2NudCwgdHBtLT5iYXNlICsgUFdNX0lNWF9UUE1fTU9EKTsNCj4gPiArDQo+ID4g KwkvKiByZXN0b3JlIHRoZSBjbG9jayBtb2RlICovDQo+ID4gKwl2YWwgPSByZWFkbCh0cG0tPmJh c2UgKyBQV01fSU1YX1RQTV9TQyk7DQo+ID4gKwl2YWwgfD0gc2F2ZWRfY21vZDsNCj4gPiArCXdy aXRlbCh2YWwsIHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX1NDKTsNCj4gPiArDQo+ID4gKwlyZXR1 cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcHdtX2lteF90cG1fY29uZmln KHN0cnVjdCBwd21fY2hpcCAqY2hpcCwNCj4gPiArCQkJICAgICAgIHN0cnVjdCBwd21fZGV2aWNl ICpwd20sDQo+ID4gKwkJCSAgICAgICB1MzIgcGVyaW9kLA0KPiA+ICsJCQkgICAgICAgdTMyIGR1 dHlfY3ljbGUsDQo+ID4gKwkJCSAgICAgICBlbnVtIHB3bV9wb2xhcml0eSBwb2xhcml0eSkgew0K PiA+ICsJc3RydWN0IGlteF90cG1fcHdtX2NoaXAgKnRwbSA9IHRvX2lteF90cG1fcHdtX2NoaXAo Y2hpcCk7DQo+ID4gKwl1MzIgZHV0eV9jbnQsIHZhbDsNCj4gPiArCXU2NCB0bXA7DQo+ID4gKw0K PiA+ICsJLyogc2V0IGR1dHkgY291bnRlciAqLw0KPiA+ICsJdG1wID0gcmVhZGwodHBtLT5iYXNl ICsgUFdNX0lNWF9UUE1fTU9EKSAmDQo+IFBXTV9JTVhfVFBNX01PRF9NT0RfTUFTSzsNCj4gDQo+ IEkgcmVjb21tZW5kIHN0b3JpbmcgdGhpcyB2YWx1ZSBpbiBkcml2ZXIgZGF0YS4NCg0KTk9UIHF1 aXRlIHVuZGVyc3RhbmQsIGFzIHdlIGRpZCBOT1QgdXNlIGl0IGluIG90aGVyIHBsYWNlcyBleGNl cHQgdGhlIGdldF9zdGF0ZSwNCmp1c3QgcmVhZGluZyB0aGUgcmVnaXN0ZXIgb25jZSBzaG91bGQg YmUgT0sgdGhlcmUuDQoNCj4gDQo+ID4gKwl0bXAgKj0gZHV0eV9jeWNsZTsNCj4gPiArCWR1dHlf Y250ID0gRElWX1JPVU5EX0NMT1NFU1RfVUxMKHRtcCwgcGVyaW9kKTsNCj4gPiArCXdyaXRlbChk dXR5X2NudCAmIFBXTV9JTVhfVFBNX01PRF9NT0RfTUFTSywNCj4gPiArCQkgdHBtLT5iYXNlICsg UFdNX0lNWF9UUE1fQ25WKHB3bS0+aHdwd20pKTsNCj4gDQo+IFBsZWFzZSBhbGlnbiB0aGUgMm5k IGxpbmUgdG8gdGhlIG9wZW5pbmcgcGFyZW50aGVzaXMuDQoNCk9LLg0KDQo+IA0KPiA+ICsNCj4g PiArCS8qIHNldCBwb2xhcml0eSAqLw0KPiA+ICsJdmFsID0gcmVhZGwodHBtLT5iYXNlICsgUFdN X0lNWF9UUE1fQ25TQyhwd20tPmh3cHdtKSk7DQo+ID4gKwl2YWwgJj0gfihQV01fSU1YX1RQTV9D blNDX0VMU25CIHwNCj4gUFdNX0lNWF9UUE1fQ25TQ19FTFNuQSB8DQo+ID4gKwkJIFBXTV9JTVhf VFBNX0NuU0NfTVNuQSk7DQo+ID4gKwl2YWwgfD0gUFdNX0lNWF9UUE1fQ25TQ19NU25COw0KPiA+ ICsJdmFsIHw9IHBvbGFyaXR5ID8gUFdNX0lNWF9UUE1fQ25TQ19FTFNuQSA6DQo+IFBXTV9JTVhf VFBNX0NuU0NfRUxTbkI7DQo+IA0KPiBJJ2QgcmVjb21tZW5kIG5vdCBoYXJkIGNvZGluZyBoZXJl IHRoYXQgUFdNX1BPTEFSSVRZX05PUk1BTA0KPiBldmFsdWF0ZXMgdG8gZmFsc2UuDQoNCk9LLCBJ IHdpbGwgYWRkIGJlbG93IGNvbXBhcmUgZm9yIGl0Og0KDQoxNTcgICAgICAgICB2YWwgfD0gKHBv bGFyaXR5ID09IFBXTV9QT0xBUklUWV9OT1JNQUwpID8NCjE1OCAgICAgICAgICAgICAgICAgUFdN X0lNWF9UUE1fQ25TQ19FTFNCIDogUFdNX0lNWF9UUE1fQ25TQ19FTFNBOw0KDQo+IA0KPiBJbiB0 aGUgcmVmZXJlbmNlIG1hbnVhbCBJIGhhdmUgKFJldi4gRiwgMDcvMjAxNykgTVNuQSBpcyBjYWxs ZWQgTVNBIG9ubHkuDQo+IERpdHRvIGZvciBNU25CIC0+IE1TQiwgRUxTbkEgLT4gRUxTQSwgRUxT bkIgLT4gRUxTQi4gKEhtbSwgYnV0IGl0IGlzIG5vdA0KPiBlbnRpcmVseSBjb25zaXN0ZW50LiBT byBUYWJsZSA2NC00IGluZGVlZCBoYXMgdGhlICduJ3MuKQ0KDQpJIHdpbGwgcmVtb3ZlIHRoZSAn bidzLg0KDQo+IA0KPiBJIHdvbmRlciB3aHkgTVNBIGFuZCBNU0IgYXJlIHR3byBiaXRzIGluc3Rl YWQgb2YgbWFraW5nIHRoaXMgYSBmaWVsZCBvZg0KPiB3aWR0aCAyIHdpdGggMmIxMCBtZWFuaW5n IFBXTSBtb2RlLiBCdXQgbWF5YmUgaXQncyBqdXN0IG1lIG5vdA0KPiB1bmRlcnN0YW5kaW5nIHRo ZSBpbmRlcGVuZGVudCBzZW1hbnRpYyBvZiB0aGVzZSB0d28gYml0cz8NCg0KSSB0aGluayBtYWtp bmcgdGhlbSBhIGZpZWxkIG1ha2VzIG1vcmUgc2Vuc2UsIGJ1dCBhbnl3YXkgd2UganVzdCBmb2xs b3cNCnRoZSBSTS4NCg0KPiANCj4gUmVhZGluZyB0aGUgcmVmZXJlbmNlIG1hbnVhbCBJJ2Qgc2F5 IGluIFBXTSBtb2RlIHRoZSBzZW1hbnRpYyBvZiBFTFNBDQo+IGFuZCBFTFNCIGlzOg0KPiANCj4g CU9uIGNvdW50ZXIgcmVsb2FkIHNldCB0aGUgb3V0cHV0IHRvIEVMU0INCj4gCU9uIGNvdW50ZXIg bWF0Y2ggc2V0IHRoZSBvdXRwdXQgdG8gRUxTQQ0KPiANCj4gTm90aW5nIHRoYXQgaW4gYSBjb21t ZW50IHdvdWxkIGVhc2UgdW5kZXJzdGFuZGluZyB0aGUgY29kZSBoZXJlLg0KDQpJIGFkZGVkIGJl bG93IGNvbW1lbnQgZm9yIFBXTSBtb2RlczoNCg0KMTM3ICAgICAgICAgLyoNCjEzOCAgICAgICAg ICAqIHNldCBwb2xhcml0eSAoZm9yIGVkZ2UtYWxpZ25lZCBQV00gbW9kZXMpDQoxMzkgICAgICAg ICAgKg0KMTQwICAgICAgICAgICogQ1BXTVMgIE1TQjpNU0EgIEVMU0I6RUxTQSAgTW9kZSAgQ29u ZmlndXJhdGlvbg0KMTQxICAgICAgICAgICogMCAgICAgIDEwICAgICAgIDEwICAgICAgICAgUFdN ICAgSGlnaC10cnVlIHB1bHNlDQoxNDIgICAgICAgICAgKiAwICAgICAgMTAgICAgICAgMDAgICAg ICAgICBQV00gICBSZXNlcnZlZA0KMTQzICAgICAgICAgICogMCAgICAgIDEwICAgICAgIDAxICAg ICAgICAgUFdNICAgTG93LXRydWUgcHVsc2UNCjE0NCAgICAgICAgICAqIDAgICAgICAxMCAgICAg ICAxMSAgICAgICAgIFBXTSAgIFJlc2VydmVkDQoxNDUgICAgICAgICAgKg0KMTQ2ICAgICAgICAg ICogSGlnaC10cnVlIHB1bHNlOiBjbGVhciBvdXRwdXQgb24gY291bnRlciBtYXRjaCwgc2V0IG91 dHB1dCBvbg0KMTQ3ICAgICAgICAgICogY291bnRlciByZWxvYWQsIHNldCBvdXRwdXQgd2hlbiBj b3VudGVyIGZpcnN0IGVuYWJsZWQgb3IgcGF1c2VkLg0KMTQ4ICAgICAgICAgICoNCjE0OSAgICAg ICAgICAqIExvdy10cnVlIHB1bHNlOiBzZXQgb3V0cHV0IG9uIGNvdW50ZXIgbWF0Y2gsIGNsZWFy IG91dHB1dCBvbg0KMTUwICAgICAgICAgICogY291bnRlciByZWxvYWQsIGNsZWFyIG91dHB1dCB3 aGVuIGNvdW50ZXIgZmlyc3QgZW5hYmxlZCBvciBwYXVzZWQuDQoxNTEgICAgICAgICAgKi8NCg0K DQo+IA0KPiA+ICsJLyoNCj4gPiArCSAqIHBvbGFyaXR5IHNldHRpbmdzIHdpbGwgZW5hYmxlZC9k aXNhYmxlIG91dHB1dCBzdGF0dWUNCj4gDQo+IHMvc3RhdHVlL3N0YXR1cy8NCg0KRml4ZWQuDQoN Cj4gDQo+ID4gKwkgKiBpbW1lZGlhdGVseSwgc28gaGVyZSBPTkxZIHNhdmUgdGhlIGNvbmZpZyBh bmQgd2lsbCBiZQ0KPiA+ICsJICogd3JpdHRlbiBpbnRvIHJlZ2lzdGVyIHdoZW4gY2hhbm5lbCBp cyBlbmFibGVkL2Rpc2FibGVkLg0KPiANCj4gcy93aWxsIGJlIHdyaXR0ZW4vd3JpdGUgaXQvDQoN CkZpeGVkLg0KDQo+IA0KPiA+ICsJICovDQo+ID4gKwl0cG0tPmNobl9jb25maWdbcHdtLT5od3B3 bV0gPSB2YWw7DQo+ID4gK30NCj4gDQo+IEEgY29tbWVudCBoZXJlIGFib3V0IGhvdyBhbmQgd2hl biB0aGUgdmFsdWVzIHdyaXR0ZW4gaW4NCj4gcHdtX2lteF90cG1fY29uZmlnIHRha2UgZWZmZWN0 IHdvdWxkIGJlIGdvb2QuDQoNCk9LLg0KDQo+IA0KPiA+ICtzdGF0aWMgdm9pZCBwd21faW14X3Rw bV9lbmFibGUoc3RydWN0IHB3bV9jaGlwICpjaGlwLA0KPiA+ICsJCQkgICAgICAgc3RydWN0IHB3 bV9kZXZpY2UgKnB3bSwNCj4gPiArCQkJICAgICAgIGJvb2wgZW5hYmxlKQ0KPiA+ICt7DQo+ID4g KwlzdHJ1Y3QgaW14X3RwbV9wd21fY2hpcCAqdHBtID0gdG9faW14X3RwbV9wd21fY2hpcChjaGlw KTsNCj4gPiArCXUzMiB2YWwsIGk7DQo+ID4gKw0KPiA+ICsJdmFsID0gcmVhZGwodHBtLT5iYXNl ICsgUFdNX0lNWF9UUE1fU0MpOw0KPiA+ICsJaWYgKGVuYWJsZSkgew0KPiA+ICsJCS8qIHJlc3Rv cmUgY2hhbm5lbCBjb25maWcgKi8NCj4gPiArCQl3cml0ZWwodHBtLT5jaG5fY29uZmlnW3B3bS0+ aHdwd21dLA0KPiA+ICsJCQl0cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9DblNDKHB3bS0+aHdwd20p KTsNCj4gPiArDQo+ID4gKwkJLyogc3RhcnQgVFBNIGNvdW50ZXIgYW55d2F5ICovDQo+ID4gKwkJ dmFsIHw9IFBXTV9JTVhfVFBNX1NDX0NNT0RfSU5DX0VWRVJZX0NMSzsNCj4gPiArCQl3cml0ZWwo dmFsLCB0cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9TQyk7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJ CS8qDQo+ID4gKwkJICogV2hlbiBhIGNoYW5uZWwgaXMgZGlzYWJsZWQsIGl0cyBwb2xhcml0eSBz ZXR0aW5ncyB3aWxsIGJlDQo+ID4gKwkJICogc2F2ZWQgYW5kIGl0cyBvdXRwdXQgd2lsbCBiZSBk aXNhYmxlZCBieSBjbGVhcmluZyBwb2xhcml0eQ0KPiA+ICsJCSAqIHNldHRpbmcsIHdoZW4gY2hh bm5lbCBpcyBlbmFibGVkLCBwb2xhcml0eSBzZXR0aW5ncyB3aWxsIGJlDQo+ID4gKwkJICogcmVz dG9yZWQgYW5kIG91dHB1dCB3aWxsIGJlIGVuYWJsZWQgYWdhaW4uDQo+ID4gKwkJICovDQo+ID4g KwkJLyogc2F2ZSBjaGFubmVsIGNvbmZpZyAqLw0KPiA+ICsJCXRwbS0+Y2huX2NvbmZpZ1twd20t Pmh3cHdtXSA9IHJlYWRsKHRwbS0+YmFzZSArDQo+ID4gKwkJCVBXTV9JTVhfVFBNX0NuU0MocHdt LT5od3B3bSkpOw0KPiANCj4gRG9lc24ndCB0cG0tPmNobl9jb25maWdbcHdtLT5od3B3bV0gYWxy ZWFkeSBjb250YWluIHRoZSByaWdodCB2YWx1ZT8NCj4gUGxlYXNlIGFsaWduIHRoZSAybmQgbGlu ZSB0byB0aGUgb3BlbmluZyBwYXJlbnRoZXNpcy4NCg0KQWgsIHllcywgbm8gbmVlZCB0byByZWFk IGl0IGFnYWluLg0KDQo+IA0KPiA+ICsJCS8qIGRpc2FibGUgY2hhbm5lbCAqLw0KPiA+ICsJCXdy aXRlbChQV01fSU1YX1RQTV9DblNDX0NIRiwNCj4gPiArCQkJdHBtLT5iYXNlICsgUFdNX0lNWF9U UE1fQ25TQyhwd20tPmh3cHdtKSk7DQo+IA0KPiBDbGVhcmluZyBDSEYgZG9lbnMndCBkaXNhYmxl IHRoZSBjaGFubmVsIGFzIEkgcmVhZCB0aGUgbWFudWFsLg0KDQpUaGlzIHdyaXRlIGNsZWFycyBD SEYgYXMgd2VsbCBhcyB3cml0aW5nIG90aGVyIGJpdHMgMCwgdG8gZGlzYWJsZSB0aGUgb3V0cHV0 LiBNYXliZSBJDQpjYW4gZXhwbGljaXRseSBjbGVhciBNU0EvTVNCL0VMU0EvRUxTQiB0byBhdm9p ZCBjb25mdXNpb24uDQoNCj4gDQo+ID4gKwkJZm9yIChpID0gMDsgaSA8IGNoaXAtPm5wd207IGkr KykNCj4gPiArCQkJaWYgKGkgIT0gcHdtLT5od3B3bSAmJiB0cG0tPmNobl9zdGF0dXNbaV0pDQo+ IA0KPiBJZiB5b3Ugc2V0IHRwbS0+Y2huX3N0YXR1c1tpXSA9IGZhbHNlIGJlZm9yZSB0aGlzIGxv b3AsIHlvdSBkb24ndCBoYXZlIHRvIGNhcmUNCj4gZm9yIGkgIT0gcHdtLT5od3B3bS4gSWYgeW91 IG1haW50YWluIGFuICJlbmFibGUgY291bnQiIHlvdSBkb24ndCBoYXZlIHRvDQo+IGxvb3AgYXQg YWxsLg0KDQpJIHRoaW5rIHdlIGNhbiBpbnRyb2R1Y2UgYSBlbmFibGUgY291bnQgZm9yIGl0Lg0K DQo+IA0KPiA+ICsJCQkJYnJlYWs7DQo+ID4gKwkJaWYgKGkgPT0gY2hpcC0+bnB3bSkgew0KPiA+ ICsJCQkvKiBzdG9wIFRQTSBjb3VudGVyIHNpbmNlIGFsbCBjaGFubmVscyBhcmUgZGlzYWJsZWQN Cj4gKi8NCj4gPiArCQkJdmFsICY9IH5QV01fSU1YX1RQTV9TQ19DTU9EOw0KPiA+ICsJCQl3cml0 ZWwodmFsLCB0cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9TQyk7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCS8qIHVwZGF0ZSBjaGFubmVsIHN0YXR1ZSAqLw0KPiA+ICsJdHBtLT5jaG5f c3RhdHVzW3B3bS0+aHdwd21dID0gZW5hYmxlOyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBw d21faW14X3RwbV9nZXRfc3RhdGUoc3RydWN0IHB3bV9jaGlwICpjaGlwLA0KPiA+ICsJCQkJICBz dHJ1Y3QgcHdtX2RldmljZSAqcHdtLA0KPiA+ICsJCQkJICBzdHJ1Y3QgcHdtX3N0YXRlICpzdGF0 ZSkNCj4gPiArew0KPiA+ICsJc3RydWN0IGlteF90cG1fcHdtX2NoaXAgKnRwbSA9IHRvX2lteF90 cG1fcHdtX2NoaXAoY2hpcCk7DQo+ID4gKwl1NjQgdG1wOw0KPiA+ICsJdTMyIHZhbCwgcmF0ZTsN Cj4gPiArDQo+ID4gKwltdXRleF9sb2NrKCZ0cG0tPmxvY2spOw0KPiA+ICsNCj4gPiArCS8qIGdl dCBwZXJpb2QgKi8NCj4gPiArCXJhdGUgPSBjbGtfZ2V0X3JhdGUodHBtLT5jbGspOw0KPiA+ICsJ dG1wID0gcmVhZGwodHBtLT5iYXNlICsgUFdNX0lNWF9UUE1fTU9EKTsNCj4gPiArCXZhbCA9IHJl YWRsKHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX1NDKTsNCj4gPiArCXZhbCAmPSBQV01fSU1YX1RQ TV9TQ19QU19NQVNLOw0KPiA+ICsJdG1wICo9ICgxIDw8IHZhbCkgKiBOU0VDX1BFUl9TRUM7DQo+ ID4gKwlzdGF0ZS0+cGVyaW9kID0gRElWX1JPVU5EX0NMT1NFU1RfVUxMKHRtcCwgcmF0ZSk7DQo+ ID4gKw0KPiA+ICsJLyogZ2V0IGR1dHkgY3ljbGUgKi8NCj4gPiArCXRtcCA9IHJlYWRsKHRwbS0+ YmFzZSArIFBXTV9JTVhfVFBNX0NuVihwd20tPmh3cHdtKSk7DQo+ID4gKwl0bXAgKj0gKDEgPDwg dmFsKSAqIE5TRUNfUEVSX1NFQzsNCj4gPiArCXN0YXRlLT5kdXR5X2N5Y2xlID0gRElWX1JPVU5E X0NMT1NFU1RfVUxMKHRtcCwgcmF0ZSk7DQo+ID4gKw0KPiA+ICsJLyogZ2V0IHBvbGFyaXR5ICov DQo+ID4gKwl2YWwgPSByZWFkbCh0cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9DblNDKHB3bS0+aHdw d20pKTsNCj4gPiArCWlmICh2YWwgJiBQV01fSU1YX1RQTV9DblNDX0VMU25BKQ0KPiA+ICsJCXN0 YXRlLT5wb2xhcml0eSA9IFBXTV9QT0xBUklUWV9JTlZFUlNFRDsNCj4gPiArCWVsc2UNCj4gPiAr CQlzdGF0ZS0+cG9sYXJpdHkgPSBQV01fUE9MQVJJVFlfTk9STUFMOw0KPiA+ICsNCj4gPiArCS8q IGdldCBjaGFubmVsIHN0YXR1cyAqLw0KPiA+ICsJc3RhdGUtPmVuYWJsZWQgPSB0cG0tPmNobl9z dGF0dXNbcHdtLT5od3B3bV0gPyB0cnVlIDogZmFsc2U7DQo+ID4gKw0KPiA+ICsJbXV0ZXhfdW5s b2NrKCZ0cG0tPmxvY2spOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHB3bV9pbXhf dHBtX2FwcGx5KHN0cnVjdCBwd21fY2hpcCAqY2hpcCwgc3RydWN0IHB3bV9kZXZpY2UNCj4gKnB3 bSwNCj4gPiArCQkJICAgICBzdHJ1Y3QgcHdtX3N0YXRlICpzdGF0ZSkNCj4gPiArew0KPiA+ICsJ c3RydWN0IGlteF90cG1fcHdtX2NoaXAgKnRwbSA9IHRvX2lteF90cG1fcHdtX2NoaXAoY2hpcCk7 DQo+ID4gKwlzdHJ1Y3QgcHdtX3N0YXRlIGN1cnN0YXRlOw0KPiA+ICsJdTMyIGR1dHlfY3ljbGUg PSBzdGF0ZS0+ZHV0eV9jeWNsZTsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJcHdtX2lt eF90cG1fZ2V0X3N0YXRlKGNoaXAsIHB3bSwgJmN1cnN0YXRlKTsNCj4gPiArDQo+ID4gKwltdXRl eF9sb2NrKCZ0cG0tPmxvY2spOw0KPiANCj4gV2hhdCBzaG91bGQgdGhpcyBsb2NrIHByb3RlY3Q/ IERvZXMgaXQgaHVydCBpZiB0aGUgc3RhdGUgY2hhbmdlcyBiZXR3ZWVuDQo+IHB3bV9pbXhfdHBt X2dldF9zdGF0ZSByZWxlYXNpbmcgdGhlIGxvY2sgYW5kIHB3bV9pbXhfdHBtX2FwcGx5IHRha2lu Zw0KPiBpdD8NCg0KVGhlIGlkZWEgaXMgdG8gcHJvdGVjdCB0aGUgc2hhcmUgcmVzb3VyY2VkIGJ5 IG11bHRpcGxlIGNoYW5uZWxzLCBidXQgSSB0aGluayBJIGNhbiBtYWtlIHRoZSBtdXRleF9sb2Nr DQppbmNsdWRlcyBnZXRfc3RhdGUgYW5kIHJlbW92ZSB0aGUgbG9jayBpbiBnZXRfc3RhdGUgZnVu Y3Rpb24uDQogDQo+IA0KPiA+ICsNCj4gPiArCWlmIChzdGF0ZS0+cGVyaW9kICE9IGN1cnN0YXRl LnBlcmlvZCkgew0KPiA+ICsJCS8qDQo+ID4gKwkJICogVFBNIGNvdW50ZXIgaXMgc2hhcmVkIGJ5 IG11bHRpcGxlIGNoYW5uZWxzLCBzbw0KPiA+ICsJCSAqIHRoZSBwcmVzY2FsZSBhbmQgcGVyaW9k IGNhbiBOT1QgYmUgbW9kaWZpZWQgd2hlbg0KPiA+ICsJCSAqIHRoZXJlIGFyZSBtdWx0aXBsZSBj aGFubmVscyB1c2VkLg0KPiANCj4gcy90aGUgLy87IHMvdXNlZC9pbiB1c2UvDQoNCkZpeGVkLg0K DQo+IA0KPiA+ICsJCSAqLw0KPiA+ICsJCWlmICh0cG0tPnVzZXJfY291bnQgIT0gMSkNCj4gPiAr CQkJcmV0dXJuIC1FQlVTWTsNCj4gDQo+IElkZWFsbHkgaWYgc2F5IHBlcmlvZCA9IDM3IGlzIHJl cXVlc3RlZCBidXQgY3VycmVudGx5IHdlIGhhdmUgcGVyaW9kID0NCj4gMzYgYW5kIGNvbmZpZ3Vy aW5nIDM3IHdvdWxkIHJlc3VsdCBpbiAzNiBhbnlob3csIGRvbid0IHJldHVybiBFQlVTWS4NCg0K SSB0aGluayBoZXJlIHRoZSBwcm90ZWN0aW9uIGlzIGp1c3QgZm9yIG1ha2luZyBzdXJlIHRoYXQg aXMgdGhlcmUgYXJlIG11bHRpcGxlDQp1c2VycywgcGVyaW9kIGNhbiBOT1QgYmUgY2hhbmdlZCwg c2luY2UgYWxsIGNoYW5uZWxzIHdpbGwgYmUgaW1wYWN0ZWQuDQoNCj4gDQo+ID4gKwkJcmV0ID0g cHdtX2lteF90cG1fY29uZmlnX2NvdW50ZXIoY2hpcCwgc3RhdGUtPnBlcmlvZCk7DQo+ID4gKwkJ aWYgKHJldCkNCj4gPiArCQkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAo IXN0YXRlLT5lbmFibGVkKQ0KPiA+ICsJCWR1dHlfY3ljbGUgPSAwOw0KPiANCj4gQSBjb21tZW50 IGFib3ZlIHRoaXMgYmxvY2sgdGhhdCBleHBsYWlucyB3aHkgdGhpcyBpcyBkb25lIHdvdWxkIGJl IGdyZWF0DQo+IChidXQgc2VlIGJlbG93KS4NCj4gDQo+ID4gKw0KPiA+ICsJaWYgKHN0YXRlLT5k dXR5X2N5Y2xlICE9IGN1cnN0YXRlLmR1dHlfY3ljbGUgfHwNCj4gPiArCSAgICBzdGF0ZS0+cG9s YXJpdHkgIT0gY3Vyc3RhdGUucG9sYXJpdHkpDQo+ID4gKwkJcHdtX2lteF90cG1fY29uZmlnKGNo aXAsIHB3bSwNCj4gPiArCQkJc3RhdGUtPnBlcmlvZCwgZHV0eV9jeWNsZSwgc3RhdGUtPnBvbGFy aXR5KTsNCj4gPiArDQo+ID4gKwlpZiAoc3RhdGUtPmVuYWJsZWQgIT0gY3Vyc3RhdGUuZW5hYmxl ZCkNCj4gPiArCQlwd21faW14X3RwbV9lbmFibGUoY2hpcCwgcHdtLCBzdGF0ZS0+ZW5hYmxlZCk7 DQo+IA0KPiBUaGlzIGlzIGEgYml0IHVuaW50dWl0aXZlIEkgdGhpbmsuIEZvciBleGFtcGxlIEkg aGFkIHRvIHRoaW5rIGZvciBhIHdoaWxlIHdoeSB5b3UNCj4gcGFzcyBkdXR5X2N5Y2xlIHRvIHB3 bV9pbXhfdHBtX2NvbmZpZygpIGJ1dCBjaGVjaw0KPiBzdGF0ZS0+ZHV0eV9jeWNsZSBpbiB0aGUg aWYgY29uZGl0aW9uLiBJJ2Qgc3VnZ2VzdDoNCj4gDQo+IAlpZiAoc3RhdGUtPmVuYWJsZWQgPT0g ZmFsc2UpIHsNCj4gCQkvKg0KPiAJCSAqIGNvbmZpZ3VyZSBmb3IgZHV0eV9jeWNsZSA9PSAwIGhl cmU/IFdhaXQgdW50aWwgdGhpcw0KPiAJCSAqIHNldHRpbmcgaXMgYWN0aXZlPw0KPiAJCSAqLw0K PiAJCWlmIChjdXJzdGF0ZS5lbmFibGVkKQ0KPiAJCQlwd21faW14X3RwbV9lbmFibGUoY2hpcCwg cHdtLCBmYWxzZSk7DQo+IAl9IGVsc2Ugew0KPiAJCS4uLg0KPiANCj4gCX0NCg0KDQpPSy4NCg0K PiANCj4gDQo+ID4gKw0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZ0cG0tPmxvY2spOw0KPiA+ICsNCj4g PiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHB3bV9pbXhfdHBt X3JlcXVlc3Qoc3RydWN0IHB3bV9jaGlwICpjaGlwLCBzdHJ1Y3QNCj4gPiArcHdtX2RldmljZSAq ZGV2KSB7DQo+ID4gKwlzdHJ1Y3QgaW14X3RwbV9wd21fY2hpcCAqdHBtID0gdG9faW14X3RwbV9w d21fY2hpcChjaGlwKTsNCj4gPiArDQo+ID4gKwltdXRleF9sb2NrKCZ0cG0tPmxvY2spOw0KPiA+ ICsJdHBtLT51c2VyX2NvdW50Kys7DQo+ID4gKwltdXRleF91bmxvY2soJnRwbS0+bG9jayk7DQo+ ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHB3 bV9pbXhfdHBtX2ZyZWUoc3RydWN0IHB3bV9jaGlwICpjaGlwLCBzdHJ1Y3QNCj4gcHdtX2Rldmlj ZQ0KPiA+ICsqZGV2KSB7DQo+ID4gKwlzdHJ1Y3QgaW14X3RwbV9wd21fY2hpcCAqdHBtID0gdG9f aW14X3RwbV9wd21fY2hpcChjaGlwKTsNCj4gPiArDQo+ID4gKwltdXRleF9sb2NrKCZ0cG0tPmxv Y2spOw0KPiA+ICsJdHBtLT51c2VyX2NvdW50LS07DQo+ID4gKwltdXRleF91bmxvY2soJnRwbS0+ bG9jayk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHdtX29wcyBp bXhfdHBtX3B3bV9vcHMgPSB7DQo+ID4gKwkuZ2V0X3N0YXRlID0gcHdtX2lteF90cG1fZ2V0X3N0 YXRlLA0KPiA+ICsJLnJlcXVlc3QgPSBwd21faW14X3RwbV9yZXF1ZXN0LA0KPiA+ICsJLmFwcGx5 ID0gcHdtX2lteF90cG1fYXBwbHksDQo+ID4gKwkuZnJlZSA9IHB3bV9pbXhfdHBtX2ZyZWUsDQo+ ID4gKwkub3duZXIgPSBUSElTX01PRFVMRSwNCj4gDQo+IENhbiB5b3UgcGxlYXNlIGdyb3VwICJy ZXF1ZXN0IiB3aXRoICJmcmVlIj8gVGhlIG9yZGVyIGFzIGRlZmluZWQgaW4gc3RydWN0DQo+IHB3 bV9vcHMgd291bGQgYmUgb3B0aW1hbC4NCg0KT0suDQoNCj4gDQo+ID4gK307DQo+ID4gKw0KPiA+ ICtzdGF0aWMgaW50IHB3bV9pbXhfdHBtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpIHsNCj4gPiArCXN0cnVjdCBpbXhfdHBtX3B3bV9jaGlwICp0cG07DQo+ID4gKwlzdHJ1Y3Qg cmVzb3VyY2UgKnJlczsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJdHBtID0gZGV2bV9r emFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqdHBtKSwgR0ZQX0tFUk5FTCk7DQo+ID4gKwlpZiAo IXRwbSkNCj4gPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKwlwbGF0Zm9ybV9zZXRf ZHJ2ZGF0YShwZGV2LCB0cG0pOw0KPiA+ICsNCj4gPiArCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNv dXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7DQo+ID4gKwl0cG0tPmJhc2UgPSBkZXZtX2lv cmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsNCj4gDQo+IFlvdSBjYW4gdXNlIGRldm1f cGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZSBpbnN0ZWFkIG9mIHRoZSB0d28gcHJldmlvdXMNCj4g Y2FsbHMuDQoNCk9LLCBqdXN0IG5vdGljZSB0aGF0IHRoZXJlIGlzIHN1Y2ggQVBJIG5ld2x5IGFk ZGVkLg0KDQo+IA0KPiA+ICsJaWYgKElTX0VSUih0cG0tPmJhc2UpKSB7DQo+ID4gKwkJcmV0ID0g UFRSX0VSUih0cG0tPmJhc2UpOw0KPiA+ICsJCWlmIChyZXQgIT0gLUVQUk9CRV9ERUZFUikNCj4g PiArCQkJZGV2X2VycigmcGRldi0+ZGV2LCAicHdtIGlvcmVtYXAgZmFpbGVkICVkXG4iLA0KPiBy ZXQpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJdHBtLT5jbGsg PSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7DQo+ID4gKwlpZiAoSVNfRVJSKHRwbS0+ Y2xrKSkgew0KPiA+ICsJCXJldCA9IFBUUl9FUlIodHBtLT5jbGspOw0KPiA+ICsJCWlmIChyZXQg IT0gLUVQUk9CRV9ERUZFUikNCj4gPiArCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRv IGdldCBwd20gY2xrICVkXG4iLA0KPiByZXQpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHRwbS0+Y2xrKTsNCj4gPiAr CWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsDQo+ID4gKwkJCSJmYWlsZWQg dG8gcHJlcGFyZSBvciBlbmFibGUgY2xrICVkXG4iLCByZXQpOw0KPiA+ICsJCXJldHVybiByZXQ7 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJdHBtLT5jaGlwLmRldiA9ICZwZGV2LT5kZXY7DQo+ID4g Kwl0cG0tPmNoaXAub3BzID0gJmlteF90cG1fcHdtX29wczsNCj4gPiArCXRwbS0+Y2hpcC5iYXNl ID0gLTE7DQo+ID4gKwl0cG0tPmNoaXAubnB3bSA9IFBXTV9JTVhfVFBNX01BWF9DSEFOTkVMX05V TTsNCj4gDQo+IFRoaXMgaXMgd3JvbmcsIGFzIHNvbWUgb25seSBoYXZlIDIgY2hhbm5lbHM/DQoN Ckkgc2F3IHdlIGNhbiBnZXQgY2hhbm5lbCBudW1iZXIgZnJvbSByZWdpc3Rlciwgd2lsbCByZWFk IHJlZ2lzdGVyIHRvIGRldGVybWluZQ0KdGhlIGNoYW5uZWwgbnVtYmVyLCBidXQgZm9yIHRoZSBj aGFubmVsIGNvbmZpZyBhbmQgc3RhdHVzIHNhdmVkIGluIHN0cnVjdCwgSSB3aWxsDQpzdGlsbCB1 c2UgdGhlIE1BWCBjaGFubmVsIG51bWJlciB0byBkZWZpbmUgdGhlIGFycmF5Lg0KDQo+IA0KPiA+ ICsJbXV0ZXhfaW5pdCgmdHBtLT5sb2NrKTsNCj4gPiArDQo+ID4gKwlyZXQgPSBwd21jaGlwX2Fk ZCgmdHBtLT5jaGlwKTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKCZwZGV2LT5k ZXYsICJmYWlsZWQgdG8gYWRkIHB3bSBjaGlwICVkXG4iLCByZXQpOw0KPiA+ICsJCWNsa19kaXNh YmxlX3VucHJlcGFyZSh0cG0tPmNsayk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJl dDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBwd21faW14X3RwbV9yZW1vdmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikgew0KPiA+ICsJc3RydWN0IGlteF90cG1fcHdtX2No aXAgKnRwbSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KPiA+ICsNCj4gPiArCWNsa19k aXNhYmxlX3VucHJlcGFyZSh0cG0tPmNsayk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHB3bWNoaXBf cmVtb3ZlKCZ0cG0tPmNoaXApOw0KPiANCj4gV3Jvbmcgb3JkZXIuIEJlZm9yZSBwd21jaGlwX3Jl bW92ZSByZXR1cm5zIHRoZSBQV00gbXVzdCBzdGF5DQo+IGZ1bmN0aW9uYWwuDQoNCldpbGwgbWFr ZSBwd21jaGlwX3JlbW92ZSBiZWZvcmUgY2xrIGRpc2FibGUuDQoNCj4gDQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgcHdtX2lteF90cG1fc3VzcGVuZChzdHJ1 Y3QgZGV2aWNlICpkZXYpIHsNCj4gPiArCXN0cnVjdCBpbXhfdHBtX3B3bV9jaGlwICp0cG0gPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gPiArDQo+ID4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUo dHBtLT5jbGspOw0KPiANCj4gWW91IG11c3Qgbm90IGRpc2FibGUgdGhlIGNsb2NrIGlmIHRoZSBQ V00gaXMgaW4gdXNlLg0KDQpJIHdpbGwgYWRkIHRoZSBlbmFibGUgY291bnRlciBjaGVjayBmb3Ig aXQuDQoNCj4gDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiANCj4gVGhlIHRpbWUgSSB3YW50 IHRvL2NhbiBzcGVuZCBvbiBjb21tdW5pdHkgcmV2aWV3IGlzIG92ZXIgbm93IGZvciB0aGlzIHdl ZWsuDQo+IEkgZGlkbid0IGxvb2sgYXQgYWxsIGRldGFpbHMgeWV0IGJ1dCBJIHRoaW5rIGl0IGlz IHN0aWxsIHdvcnRoIHRvIHNlbmQgdGhpcyBtYWlsIG91dCB0bw0KPiBub3QgbWFrZSB5b3UgYm9y ZWQgOi0pIEFsc28gSSB0aGluayBmdXJ0aGVyIHRob3VnaHRzIGJ5IG1lIHdpbGwgYmUgZWFzZWQg aWYNCj4geW91IGFkZHJlc3MgbXkgY29tbWVudHMgaGVyZSBmaXJzdC4NCg0KVGhhbmtzIGZvciB5 b3VyIHRpbWUvcGF0aWVuY2UsICBJIHdpbGwgZ2VuZXJhdGUgVjUgYWZ0ZXIgYWxsIHlvdXIgY29t bWVudHMgYWRkcmVzc2VkLg0KDQpBbnNvbi4NCg0KDQo+IA0KPiBCZXN0IHJlZ2FyZHMNCj4gVXdl DQo+IA0KPiAtLQ0KPiBQZW5ndXRyb25peCBlLksuICAgICAgICAgICAgICAgICAgICAgICAgICAg fCBVd2UgS2xlaW5lLUvDtm5pZyAgICAgICAgICAgIHwNCj4gSW5kdXN0cmlhbCBMaW51eCBTb2x1 dGlvbnMgICAgICAgICAgICAgICAgIHwNCj4gaHR0cHM6Ly9ldXIwMS5zYWZlbGlua3MucHJvdGVj dGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0dHAlM0ElMkYlMkZ3d3cucA0KPiBlbmd1dHJvbml4LmRl JTJGJmFtcDtkYXRhPTAyJTdDMDElN0NhbnNvbi5odWFuZyU0MG54cC5jb20lN0MyMw0KPiA2OThm NTk5MjkxNGNiYjQ2MTIwOGQ2YTkyOTllOGUlN0M2ODZlYTFkM2JjMmI0YzZmYTkyY2Q5OWM1YzMw MTYzDQo+IDUlN0MwJTdDMCU3QzYzNjg4MjM5MzU1ODk1NDU2NyZhbXA7c2RhdGE9NXR1RkJVN3cl MkZBVUx3Skdibg0KPiBCbE9weG1kNEptUVFPOHdUMnFzTWdXNXlYcyUzRCZhbXA7cmVzZXJ2ZWQ9 MCAgfA0K