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=-0.7 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=no 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 B097FC35246 for ; Wed, 29 Jan 2020 13:06:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 85CD220720 for ; Wed, 29 Jan 2020 13:06:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="ExZm+7hJ"; dkim=pass (1024-bit key) header.d=sharedspace.onmicrosoft.com header.i=@sharedspace.onmicrosoft.com header.b="tAfq0Cgv" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726659AbgA2NGm (ORCPT ); Wed, 29 Jan 2020 08:06:42 -0500 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:53122 "EHLO esa6.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726177AbgA2NGl (ORCPT ); Wed, 29 Jan 2020 08:06:41 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1580303200; x=1611839200; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=J2eqSHxVFXHH3cQjwP8zza+mWourYML8EtCNeJrVh/U=; b=ExZm+7hJnGU9fIVseK49bdlo57HO/Dj4W7ga47t2vKYXqAhd4EE/g5ar NEhYpsg1TaQVpfX4nFT1IJ5jcvrta/SQDD4PgVi8maGV0sL3Oyy42Wf61 pmgfJ5x79MdZ1pOYC59HCUTWVEEGwUa++PIkZrFgHWKKNYpIqddKaiXGY A+kXFQzH28kGltzf4s5v1QBZTQIwL0Fes6qLMEIDs9Lsm/ShZ9LcE74lp Kxxze9MwYenWC4v4nXArIviweVDr0dReuJGoS7YeLyVE2gw3ZTONJsBBY PdiQGQHVIuZSkgMTazH1B56bNWy9alZAYyQsfOwxXXiBMUGrKroZAZ/nN A==; IronPort-SDR: PL6q1t7FDmivAYITiC0u86n8lJ817UbH0lXwpEK4APkTm1EmyY7xSaS8/kExi0ZbcQPKXRj+RL BuFbD7Rsmd/YQEAjlyxBeShcd1WtwRR27bXGvGPW3FfQ60tadbYfnNHFukqB/sEgHUW6EhPoG5 wr8FIjo4Y3WILp1YIH41ld/p/YN0Bqp7cL0cvEtFbO8ZZVlZlFZReG6q42HDdl4MRlmsqN3uo2 JtFzCazReEPqxu5wUgOXYc0ExUthQ9pwrrfe1XF6XmBeo3hTP7MvglImryQwvf/hRjbMUkiEp/ zVs= X-IronPort-AV: E=Sophos;i="5.70,378,1574092800"; d="scan'208";a="130120109" Received: from mail-dm6nam12lp2170.outbound.protection.outlook.com (HELO NAM12-DM6-obe.outbound.protection.outlook.com) ([104.47.59.170]) by ob1.hgst.iphmx.com with ESMTP; 29 Jan 2020 21:06:33 +0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Z2cjWJIj/5ybwdTE27sc7giMlW9lit99h2JqlLdElDJ7ZQTEW2335B2R2cKVGsYlV/u/Gi0MsQ7VZV/h3D1J9sdur+iIL4VkJ7llP6pfHuUF5X5oXbfTS+fjNWZt5G6fC0BuBd5Xbxn012H8tttF5+a9LRhRRMzx0vCfC+J2BCh5B82dZyYPR6aknV7DB7BSozkH79fOPCiC0WKDPEGZDZepX63DdA82owLOLKYWIMD8OcECR7qIWJ0ZDrSA7dEdyPOAJQys7jjEaRfd0UadX92cjnnsujOUlLAp1zIfTNSsxh3rU4pEyE4VyqW/DD165beNYLs2cX0FhAE62zlfzA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=J2eqSHxVFXHH3cQjwP8zza+mWourYML8EtCNeJrVh/U=; b=n+nu+/kMs7F0KQB1VFGZ4vdVtNixp2z6/VYUc2H7cxpGvxSjvq3J6YweKW07aPacpyNeqKpcwHEWFMBirf+xpd4OSG4VsRpIEshNfnNSVyKAA7cNNqGZvIgunVoqEk/ueK0mwLaa1pdP7HBMKFsGM54Nwtzq8JYoIiPVfQsZulX/C/jBfywdzdbiZldQRPVQxJ1YJMADRgQbpdL3kzjRidcM8qQSPGGHInFn61a68ksSXGE59zgZARvBUlYbR1TfyiEZj5SIsL6VreBz9nxYrwOs2ijGvI04L7apgtCnpZfyeEkoVig1uMS+Hl+kWErFQA3hJ1wFWVURL0f/DWjy4g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=wdc.com; dmarc=pass action=none header.from=wdc.com; dkim=pass header.d=wdc.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sharedspace.onmicrosoft.com; s=selector2-sharedspace-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=J2eqSHxVFXHH3cQjwP8zza+mWourYML8EtCNeJrVh/U=; b=tAfq0CgvofGBsI8o8qzi27w1HTCgLIEYkv04+PqtTxIHWMUwZubeqokvjKLfItco5VuetsT67buk6G3wvX/y6O8ggYcNZjIgM8jRbDEd1aRWx2yhSUyyb5HRqh/YvcEUALrkKGDTqzDuvur/Kz+u1fUr785fU5jiCpqnAfuLS+I= Received: from BYAPR04MB5816.namprd04.prod.outlook.com (20.179.59.16) by BYAPR04MB5927.namprd04.prod.outlook.com (20.179.59.146) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2665.20; Wed, 29 Jan 2020 13:06:30 +0000 Received: from BYAPR04MB5816.namprd04.prod.outlook.com ([fe80::cd8e:d1de:e661:a61]) by BYAPR04MB5816.namprd04.prod.outlook.com ([fe80::cd8e:d1de:e661:a61%5]) with mapi id 15.20.2665.027; Wed, 29 Jan 2020 13:06:30 +0000 From: Damien Le Moal To: "darrick.wong@oracle.com" CC: "torvalds@linux-foundation.org" , "jth@kernel.org" , "linux-fsdevel@vger.kernel.org" , "linux-xfs@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Naohiro Aota , "hare@suse.de" Subject: Re: [PATCH v9 1/2] fs: New zonefs file system Thread-Topic: [PATCH v9 1/2] fs: New zonefs file system Thread-Index: AQHV1PlRMOiXriXxY0eBTwxT7TLPJ6gAW7EAgAFEMIA= Date: Wed, 29 Jan 2020 13:06:29 +0000 Message-ID: References: <20200127100521.53899-1-damien.lemoal@wdc.com> <20200127100521.53899-2-damien.lemoal@wdc.com> <20200128174608.GR3447196@magnolia> In-Reply-To: <20200128174608.GR3447196@magnolia> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.34.3 (3.34.3-1.fc31) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Damien.LeMoal@wdc.com; x-originating-ip: [199.255.47.11] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 08f9bd82-c5b2-4536-5d34-08d7a4bc0ebf x-ms-traffictypediagnostic: BYAPR04MB5927: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: wdcipoutbound: EOP-TRUE x-ms-oob-tlc-oobclassifiers: OLM:1060; x-forefront-prvs: 02973C87BC x-forefront-antispam-report: SFV:NSPM;SFS:(10019020)(4636009)(346002)(136003)(39860400002)(366004)(376002)(396003)(189003)(199004)(2616005)(2906002)(6916009)(6506007)(186003)(26005)(6486002)(6512007)(8936002)(4326008)(316002)(54906003)(5660300002)(30864003)(86362001)(81156014)(81166006)(8676002)(76116006)(91956017)(36756003)(66446008)(66476007)(66556008)(64756008)(478600001)(71200400001)(66946007)(21314003)(579004);DIR:OUT;SFP:1102;SCL:1;SRVR:BYAPR04MB5927;H:BYAPR04MB5816.namprd04.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: V6lZN0Sa+LO5QAN3BtB4UGE2KBTYgkBND3hs+IA0chJLHrdPO61kPV+Sp5TzNlQiO2qNVfYhogcclKCWgH9CTdQvMs5spvasxmIDvZuqc79X5pqZoXdXvxy34vzMtT/Tr5aNXgsVQioChQpEQrwCh2lO7WWZOstpttT6jdDkl18IeP0B9BIJ31KTNURvFHVmCwguFYSqC53Kq2AlerMS6A6hveABNtNHL/HGgJDxLQrgUKsl22/Vdq+oZTLNTbzAQG6fpgaYrMg9+u3r73hDlrZm5wgAP/h6fO+/4iIy+s64Eowb3hvBHk3ScZSMwbOdXfj6ffviBiG0CuRTwtNgUG1rQE2P4H2fouW23Db+uLjgRTw1fASJT8lYrkAp1mWo2kZgUmZpR/x6rzfrAoka2n7acWNf9cCVmQEsN/q8JYxbz46REvdqc6ESMcAqtKtYzuJsGKh2aX23ull4J04XhFl8pBwUuZbSizyw9XqvTsO1jJlwCE9ydv+1QT8m61CX x-ms-exchange-antispam-messagedata: yyOneM3POnUVH7pnwfW4I2lQSI5v+asH1s7BqjPM2HtwU1ULU8tRWttW5D71OLpcAu/bxWt57vJ+zxT124BmOEKj90lu8Vr4fj7jrSmFz6jnJrgvcZekXwUiMVjvxUxNKAIKbGKRc5RSCbqQdc0MQQ== Content-Type: text/plain; charset="utf-8" Content-ID: <6C169BE3C00F8243B7B6136BEAFB9391@namprd04.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-Network-Message-Id: 08f9bd82-c5b2-4536-5d34-08d7a4bc0ebf X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Jan 2020 13:06:29.8516 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ADKYyNyCmjUTdg3SMKvcGWmo0GC2zip8GIEFC5FDyw9c0TO3XE+mglqVoZA7EE5pSoJgmV0arH5Ml2AyltGnig== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR04MB5927 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgRGFycmljaywNCg0KT24gVHVlLCAyMDIwLTAxLTI4IGF0IDA5OjQ2IC0wODAwLCBEYXJyaWNr IEouIFdvbmcgd3JvdGU6DQpbLi4uXQ0KPiA+ICsvKg0KPiA+ICsgKiBVcGRhdGUgYSBmaWxlIGlu b2RlIGFjY2VzcyBwZXJtaXNzaW9ucyBiYXNlZCBvbiB0aGUgZmlsZSB6b25lIGNvbmRpdGlvbi4N Cj4gPiArICovDQo+ID4gK3N0YXRpYyB2b2lkIHpvbmVmc191cGRhdGVfZmlsZV9wZXJtKHN0cnVj dCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBibGtfem9uZSAqem9uZSkNCj4gPiArew0KPiA+ICsJaWYg KHpvbmUtPmNvbmQgPT0gQkxLX1pPTkVfQ09ORF9PRkZMSU5FKSB7DQo+ID4gKwkJLyoNCj4gPiAr CQkgKiBEZWFkIHpvbmU6IG1ha2UgdGhlIGlub2RlIGltbXV0YWJsZSwgZGlzYWJsZSBhbGwgYWNj ZXNzZXMNCj4gPiArCQkgKiBhbmQgc2V0IHRoZSBmaWxlIHNpemUgdG8gMCAoem9uZSB3cCBzZXQg dG8gem9uZSBzdGFydCkuDQo+ID4gKwkJICovDQo+ID4gKwkJaW5vZGUtPmlfZmxhZ3MgfD0gU19J TU1VVEFCTEU7DQo+IA0KPiBPbmUgYW5ub3lpbmcgbml0IGFib3V0IHNldHRpbmcgU19JTU1VVEFC TEU6IHRoZSBnZW5lcmljIHZmcyB3cml0ZQ0KPiByb3V0aW5lcyBkbyBub3QgY2hlY2sgU19JTU1V VEFCTEUsIHdoaWNoIG1lYW5zIHRoYXQgem9uZWZzIHdpbGwgaGF2ZSB0bw0KPiBkbyB0aGF0IG9u IGl0cyBvd24uDQo+IA0KPiBJIHRyaWVkIHRvIGZpeCBpdCBsYXN0IHllYXIsIGJ1dCB0aGVyZSB3 ZXJlIGNvbXBsYWludHMgdGhhdCBpdCBjb3VsZA0KPiBicmVhayBleGlzdGluZyB3b3JrbG9hZHMg KG9wZW4gT19UTVBGSUxFIGZvciB3cml0ZSwgbWFyayBpdCBpbW11dGFibGUsDQo+IGxpbmsgaXQg aW50byB0aGUgZmlsZXN5c3RlbSwgY29udGludWUgdG8gd3JpdGUgaXQgc2luY2UgeW91J3JlIHRo ZSBvbmx5DQo+IHdyaXRlci4uLikNCg0KT0suIFVuZGVyc3Rvb2QuIEFkZGluZyBjaGVja3Mgd2hl cmUgYXBwcm9wcmlhdGUuDQoNCj4gPiArCQlpbm9kZS0+aV9tb2RlICY9IH4wNzc3Ow0KPiA+ICsJ CXpvbmUtPndwID0gem9uZS0+c3RhcnQ7DQo+ID4gKwl9IGVsc2UgaWYgKHpvbmUtPmNvbmQgPT0g QkxLX1pPTkVfQ09ORF9SRUFET05MWSkgew0KPiA+ICsJCS8qIERvIG5vdCBhbGxvdyB3cml0ZXMg aW4gcmVhZC1vbmx5IHpvbmVzICovDQo+ID4gKwkJaW5vZGUtPmlfZmxhZ3MgfD0gU19JTU1VVEFC TEU7DQo+ID4gKwkJaW5vZGUtPmlfbW9kZSAmPSB+MDIyMjsNCj4gPiArCX0NCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RydWN0IHpvbmVmc19pb2Vycl9kYXRhIHsNCj4gPiArCXN0cnVjdCBpbm9kZQkq aW5vZGU7DQo+ID4gKwlib29sCQl3cml0ZTsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBp bnQgem9uZWZzX2lvX2Vycl9jYihzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBp ZHgsIHZvaWQgKmRhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB6b25lZnNfaW9lcnJfZGF0YSAq aW9lcnIgPSBkYXRhOw0KPiA+ICsJc3RydWN0IGlub2RlICppbm9kZSA9IGlvZXJyLT5pbm9kZTsN Cj4gPiArCXN0cnVjdCB6b25lZnNfaW5vZGVfaW5mbyAqemkgPSBaT05FRlNfSShpbm9kZSk7DQo+ ID4gKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7DQo+ID4gKwlsb2ZmX3Qg aXNpemUsIHdwX29mc3Q7DQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIFRoZSBjb25kaXRpb24g b2YgdGhlIHpvbmUgbWF5IGhhdmUgY2hhbmdlLiBGaXggdGhlIGZpbGUgYWNjZXNzDQo+ID4gKwkg KiBwZXJtaXNzaW9ucyBpZiBuZWNlc3NhcnkuDQo+ID4gKwkgKi8NCj4gPiArCXpvbmVmc191cGRh dGVfZmlsZV9wZXJtKGlub2RlLCB6b25lKTsNCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJICogVGhl cmUgaXMgbm8gd3JpdGUgcG9pbnRlciBvbiBjb252ZW50aW9uYWwgem9uZXMgYW5kIHJlYWQgb3Bl cmF0aW9ucw0KPiA+ICsJICogZG8gbm90IGNoYW5nZSBhIHpvbmUgd3JpdGUgcG9pbnRlci4gU28g dGhlcmUgaXMgbm90aGluZyBtb3JlIHRvIGRvDQo+ID4gKwkgKiBmb3IgdGhlc2UgdHdvIGNhc2Vz Lg0KPiA+ICsJICovDQo+ID4gKwlpZiAoemktPmlfenR5cGUgPT0gWk9ORUZTX1pUWVBFX0NOViB8 fCAhaW9lcnItPndyaXRlKQ0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsNCj4gPiArCS8qDQo+ID4g KwkgKiBGb3Igc2VxdWVudGlhbCB6b25lcyB3cml0ZSwgbWFrZSBzdXJlIHRoYXQgdGhlIHpvbmUg d3JpdGUgcG9pbnRlcg0KPiA+ICsJICogcG9zaXRpb24gaXMgYXMgZXhwZWN0ZWQsIHRoYXQgaXMs IGluIHN5bmMgd2l0aCB0aGUgaW5vZGUgc2l6ZS4NCj4gPiArCSAqLw0KPiA+ICsJd3Bfb2ZzdCA9 ICh6b25lLT53cCAtIHpvbmUtPnN0YXJ0KSA8PCBTRUNUT1JfU0hJRlQ7DQo+ID4gKwl6aS0+aV93 cG9mZnNldCA9IHdwX29mc3Q7DQo+ID4gKwlpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsNCj4g PiArDQo+ID4gKwlpZiAoaXNpemUgPT0gd3Bfb2ZzdCkNCj4gLz4gKwkJcmV0dXJuIDA7DQo+ID4g Kw0KPiA+ICsJLyoNCj4gPiArCSAqIFRoZSBpbm9kZSBzaXplIGFuZCB0aGUgem9uZSB3cml0ZSBw b2ludGVyIGFyZSBub3QgaW4gc3luYy4NCj4gPiArCSAqIElmIHRoZSBpbm9kZSBzaXplIGlzIGJl bG93IHRoZSB6b25lIHdyaXRlIHBvaW50ZXIsIHRoZW4gZGF0YSB3YXMNCj4gDQo+IEknbSBhIGxp dHRsZSBjb25mdXNlZCBhYm91dCB3aGF0IGV2ZW50cyB0aGVzZSBzdGF0ZXMgcmVmbGVjdC4NCj4g DQo+ICJpbm9kZSBzaXplIGlzIGJlbG93IHRoZSB6b25lIHdwIiAtLSBsZXQncyBzYXkgd2UgaGF2 ZSBhIHBhcnRpYWxseQ0KPiB3cml0dGVuIHNlcXVlbnRpYWwgem9uZToNCj4gDQo+ICAgICBpc2l6 ZQ0KPiAtLS0tdi0tLS0tLS0tLS0tLS0tLQ0KPiBERERERA0KPiAtLS0tXi0tLS0tLS0tLS0tLS0t LQ0KPiAgICAgV1ANCj4gDQo+IFRoZW4gd2UgdHJpZWQgdG8gd3JpdGUgdG8gdGhlIGVuZCBvZiB0 aGUgc2VxdWVudGlhbCB6b25lOg0KPiANCj4gICAgIGlzaXplDQo+IC0tLS12LS0tLS0tLS0tLS0t LS0tDQo+IEREREREV1dXVw0KPiAtLS0tXi0tLS0tLS0tLS0tLS0tLQ0KPiAgICAgV1ANCj4gDQo+ IFRoZW4gYW4gZXJyb3IgaGFwcGVucyBzbyB3ZSBkaWRuJ3QgdXBkYXRlIHRoZSBpc2l6ZSwgYW5k IG5vdyB3ZSBzZWUgdGhhdA0KPiB0aGUgd3JpdGUgcG9pbnRlciBpcyBiZXlvbmQgaXNpemUgKHBy ZXRlbmQgdGhlIHdyaXRlIGZhaWxlZCB0byB0aGUgJz8nDQo+IGFyZWEpOg0KPiANCj4gICAgIGlz aXplDQo+IC0tLS12LS0tLS0tLS0tLS0tLS0tDQo+IERERERERD9ERA0KPiAtLS0tLS0tLV4tLS0t LS0tLS0tLQ0KPiAgICAgICAgIFdQDQoNCklmIHRoZSB3cml0ZSBmYWlsZWQgYXQgdGhlICI/IiBs b2NhdGlvbiwgdGhlbiB0aGUgem9uZSB3cml0ZSBwb2ludGVyDQpwb2ludHMgdG8gdGhhdCBsb2Nh dGlvbiBzaW5jZSBub3RoaW5nIGFmdGVyIHRoYXQgbG9jYXRpb24gY2FuIGJlDQp3cml0dGVuIHVu bGVzcyB0aGF0IGxvY2F0aW9uIGl0c2VsZiBpcyBmaXJzdCB3cml0dGVuLg0KDQpTbyB3aXRoIHlv dXIgZXhhbXBsZSwgdGhlIGRyaXZlIHdpbGwgZ2l2ZSBiYWNrOg0KDQogICAgaXNpemUNCi0tLS12 LS0tLS0tLS0tLS0tLS0tDQpEREREREQ/WFgNCi0tLS0tLV4tLS0tLS0tLS0tLS0tDQogICAgICBX UA0KDQpXaXRoIFhYIGRlbm90aW5nIHRoZSB1bndyaXR0ZW4gcGFydCBvZiB0aGUgaXNzdWVkIHdy aXRlLg0KDQo+IFNvIGlmIHdlIGluY3JlYXNlIGlzaXplIHRvIG1hdGNoIHRoZSBXUCwgd2hhdCBo YXBwZW5zIHdoZW4gdXNlcnNwYWNlDQo+IHRyaWVzIHRvIHJlYWQgdGhlIHF1ZXN0aW9uLW1hcmsg YXJlYT8gIERvIHRoZXkgZ2V0IHJlYWQgZXJyb3JzPyAgU3RhbGUNCj4gY29udGVudHM/DQoNCk5v cGUsIHNlZSBhYm92ZTogdGhlIHdyaXRlIHBvaW50ZXIgYWx3YXlzIHBvaW50IHRvIHRoZSBzZWN0 b3IgZm9sbG93aW5nDQp0aGUgbGFzdCBzZWN0b3IgY29ycmVjdGx5IHdyaXR0ZW4uIFNvIGluY3Jl YXNpbmcgaXNpemUgdG8gdGhlIHdyaXRlDQpwb2ludGVyIGxvY2F0aW9uIG9ubHkgZXhwb3NlcyB0 aGUgZGF0YSB0aGF0IGFjdHVhbGx5IHdhcyB3cml0dGVuIGFuZCBpcw0KcmVhZGFibGUuIE5vIHN0 YWxlIGRhdGEuDQoNCj4gT3IgYW0gSSBtaXN1bmRlcnN0YW5kaW5nIFNNUiBmaXJtd2FyZSwgYW5k IHRoZSBkcml2ZSBvbmx5IGFkdmFuY2VzIHRoZQ0KPiB3cml0ZSBwb2ludGVyIG9uY2UgaXQgaGFz IHdyaXR0ZW4gYSBibG9jaz8gIGkuZS4gaWYgYSB3cml0ZSBmYWlscyBpbg0KPiB0aGUgbWlkZGxl LCB0aGUgZHJpdmUgZW5kcyB1cCBpbiB0aGlzIHN0YXRlLCBub3QgdGhlIG9uZSBJIGRyZXcgYWJv dmU6DQo+IA0KPiAgICAgaXNpemUNCj4gLS0tLXYtLS0tLS0tLS0tLS0tLS0NCj4gREREREREPw0K PiAtLS0tLV4tLS0tLS0tLS0tLS0tLQ0KPiAgICAgIFdQDQo+IA0KPiBJbiB3aGljaCBjYXNlIGl0 IHdvdWxkIGJlIGZpbmUgdG8gcHVzaCBpc2l6ZSB1cCB0byB0aGUgd3JpdGUgcG9pbnRlcj8NCg0K RXhhY3RseS4gVGhpcyBpcyBob3cgdGhlIFpCQyAmIFpBQyAoYW5kIHVwY29taW5nIFpOUykgc3Bl Y2lmaWNhdGlvbnMNCmRlZmluZSB0aGUgd3JpdGUgcG9pbnRlciBiZWhhdmlvci4gVGhhdCBtYWtl cyBlcnJvciByZWNvdmVyeSBhIGxvdA0KZWFzaWVyIGFuZCBkb2VzIG5vdCByZXN1bHQgaW4gc3Rh bGUgZGF0YSBhY2Nlc3Nlcy4gSnVzdCBub3RpY2UgdGhlIG9uZS0NCm9mZiBkaWZmZXJlbmNlIGZv ciB0aGUgV1AgcG9zaXRpb24gZnJvbSB5b3VyIGV4YW1wbGUgYXMgV1Agd2lsbCBiZQ0KcG9pbnRp bmcgYXQgdGhlIGVycm9yIGxvY2F0aW9uLCBub3QgdGhlIGxhc3Qgd3JpdHRlbiBsb2NhdGlvbi4g SW5kZXhpbmcNCmZyb20gMCwgd2UgZ2V0ICh3cCAtIHpvbmUgc3RhcnQpIGFsd2F5cyBiZWluZyBp c2l6ZSB3aXRoIGFsbCB3cml0dGVuDQphbmQgcmVhZGFibGUgZGF0YSBpbiB0aGUgc2VjdG9yIHJh bmdlIGJldHdlZW4gem9uZSBzdGFydCBhbmQgem9uZSB3cml0ZQ0KcG9pbnRlci4NCg0KPiBBaGEs IHlvdSAvZGlkLyBzYXkgZXhhY3RseSB0aGlzIGluIHRoZSB2OCB0aHJlYWQuDQo+IA0KPiA+ICsJ ICogd3JpdGVuIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuIFRoaXMgY2FuIGhhcHBlbiBpbiB0aGUg Y2FzZSBvZiBhDQo+ID4gKwkgKiBwYXJ0aWFsIGZhaWx1cmUgb2YgYSBsYXJnZSBtdWx0aS1iaW8g RElPLiBObyBkYXRhIGlzIGxvc3QuIFNpbXBseSBmaXgNCj4gPiArCSAqIHRoZSBpbm9kZSBzaXpl IHRvIHJlZmxlY3QgdGhlIHBhcnRpYWwgd3JpdGUuDQoNClllcy4gSSBmdXJ0aGVyIGltcHJvdmVk IHRoaXMgY29tbWVudCB0byBtYWtlIGl0LCBJIGhvcGUgdGhpcyB0aW1lLA0Kc3VwZXIgZWFzeSB0 byB1bmRlcnN0YW5kLg0KDQo+ID4gKwkgKiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlIGlub2Rl IHNpemUgaXMgb3ZlciB0aGUgem9uZSB3cml0ZSBwb2ludGVyLA0KPiA+ICsJICogdGhlbiB0aGVy ZSB3YXMgYW4gZXh0ZXJuYWwgY29ycnVwdGlvbiwgZS5nLiBhbiBhcHBsaWNhdGlvbiByZXNldCB0 aGUNCj4gPiArCSAqIGZpbGUgem9uZSBkaXJlY3RseSwgb3IgdGhlIGRldmljZSBoYXMgYSBwcm9i bGVtLg0KPiANCj4gU28gSSBndWVzcyB0aGlzIGNhc2UgImlzaXplIGlzIGdyZWF0ZXIgdGhhbiBX UCIgbWVhbnMgd2Ugc3RhcnQgd2l0aA0KPiB0aGlzIGFwcGVuZGluZyB3cml0ZSB0byB3aGF0IHdl IHRoaW5rIGlzIHRoZSBlbmQgb2YgdGhlIHpvbmU6DQo+IA0KPiAgICAgaXNpemUNCj4gLS0tLXYt LS0tLS0tLS0tLS0tLS0NCj4gRERERERXV1dXDQo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+IA0K PiAoVGhlIHBvc2l0aW9uIG9mIHRoZSBXUCBpcyBpcnJlbGV2YW50IGhlcmUpDQo+IA0KPiBUaGVu IHdlIGdldCBhIGRpc2sgZXJyb3IsIHNvIHdlIHF1ZXJ5IHRoZSBXUCBhbmQgZGlzY292ZXIgdGhh dCBpdCdzDQo+IGFjdHVhbGx5IGJlbG93IGlzaXplOg0KPiANCj4gICAgIGlzaXplDQo+IC0tLS12 LS0tLS0tLS0tLS0tLS0tDQo+IEREREREREQNCj4gLV4tLS0tLS0tLS0tLS0tLS0tLS0NCj4gIFdQ DQo+IA0KPiBTbyBub3cgd2UgY29uY2x1ZGUgdGhhdCBlaXRoZXIgdGhlIGRyaXZlIGlzIGJyb2tl biBvciBzb21lb25lIGlzIG1lc3NpbmcNCj4gd2l0aCB0aGUgem9uZXMgYmVoaW5kIG91ciBiYWNr LCBzbyB3ZSdkIHJhdGhlciBqdXN0IHNodXQgZG93biBhbmQgbGV0DQo+IHRoZSBzeXNhZG1pbiBm aWd1cmUgaXQgb3V0PyAgQmVjYXVzZSB3aGlsZSB3ZSBjb3VsZCB0cnVuY2F0ZSB0aGUgem9uZQ0K PiBmaWxlIGRvd24gdG8gdGhlIFdQLCB0aGlzIGlzIGEgc2lnbiB0aGF0IHNvbWV0aGluZyBjb3Vs ZCBiZSBzZXJpb3VzbHkNCj4gYnJva2VuPw0KDQpZZXMuIEV4YWN0bHkuIFRoZSBmaWd1cmUgZm9y IHRoZSBmaWxlIGFmdGVyIHN1Y2ggZXJyb3Igd291bGQgYmU6DQoNCiAgICBpc2l6ZQ0KLS0tLXYt LS0tLS0tLS0tLS0tLS0NCkREWFhYDQotXi0tLS0tLS0tLS0tLS0tLS0tLQ0KIFdQDQoNCldpdGgg dGhlIFhYWCBzZWN0b3JzIGJlaW5nIGdhcmJhZ2UgZGF0YSBzaW5jZSByZWFkIGFjY2Vzc2VzIHRv IHNlY3RvcnMNCmFmdGVyIGEgem9uZSB3cml0ZSBwb2ludGVyIHJldHVybnMgemVyb2VzLCBvciB0 aGUgZHJpdmUgZm9ybWF0IHBhdHRlcm4NCmlmIGl0IGlzIHNldC4NCg0KV2hpY2ggYWxzbyBtZWFu cyB0aGF0IHRoZSAiREQiIGRhdGEgYWJvdmUgY2Fubm90IGJlIHRydXN0ZWQgc2luY2UgaWYgd2UN CnN0YXJ0ZWQgd2l0aCBpc2l6ZSBhZnRlciBXUCwgaXQgbWVhbnMgdGhhdCB3ZSBzYXcgV1AgPT0g aXNpemUgb24gbW91bnQuDQpBbmQgd2l0aCBTTVIgc3BlY2lmaWNhdGlvbnMsIHRoZSBvbmx5IHdh eSB0byBnZXQgaW50byB0aGUgc2l0dWF0aW9uDQphYm92ZSBpcyBpZiB0aGUgem9uZSBpcyByZXNl dCBhbmQgcmV3cml0dGVuIGJlaGluZCBvdXIgYmFjay4NCg0KSXQgaXMgaGFyZCB0byBkZWNpZGUg b24gdGhlIGJlc3QgYWN0aW9uIHRvIHRha2UgaGVyZSBjb25zaWRlcmluZyB0aGUNCnNpbXBsZSBu YXR1cmUgb2Ygem9uZWZzIChpLmUuIGFub3RoZXIgYmV0dGVyIGludGVyZmFjZSB0byBkbyByYXcg YmxvY2sNCmRldmljZSBmaWxlIGFjY2Vzc2VzKS4gSW5jbHVkaW5nIHlvdXIgY29tbWVudHMgb24g bW91bnQgb3B0aW9ucywgSSBjYW0NCnVwIHdpdGggdGhlc2UgYWN0aW9ucyB0aGF0IHRoZSB1c2Vy IGNhbiBjaG9vc2Ugd2l0aCBtb3VudCBvcHRpb25zOg0KKiByZXBhaXI6IFRydW5jYXRlIHRoZSBp bm9kZSBzaXplIG9ubHksIG5vdGhpbmcgZWxzZQ0KKiByZW1vdW50LXJvIChkZWZhdWx0KTogVHJ1 bmNhdGUgdGhlIGlub2RlIHNpemUgYW5kIHJlbW91bnQgcmVhZC1vbmx5DQoqIHpvbmUtcm86IFRy dW5jYXRlIHRoZSBpbm9kZSBzaXplIGFuZCBzZXQgdGhlIGlub2RlIHJlYWQtb25seQ0KKiB6b25l LW9mZmxpbmU6IFRydW5jYXRlIHRoZSBpbm9kZSBzaXplIHRvIDAgYW5kIGFzc3VtZSB0aGF0IGl0 cyB6b25lIA0KaXMgb2ZmbGluZSAobm8gcmVhZHMgbm9yIHdyaXRlcyBwb3NzaWJsZSkuDQoNClRo aXMgZ2l2ZXMgSSB0aGluayBhIGdvb2QgcmFuZ2Ugb2YgcG9zc2libGUgYmVoYXZpb3JzIHRoYXQg dGhlIHVzZXIgbWF5DQp3YW50LCBmcm9tIGFsbW9zdCBub3RoaW5nIChyZXBhaXIpIHRvIGV4dHJl bWUgdG8gYXZvaWQgYWNjZXNzaW5nIGJhZA0KZGF0YSAoem9uZS1vZmZsaW5lKS4NCg0KPiAoT2gs IHlvdSBzYWlkIHRoaXMgaW4gdGhlIHY4IHRocmVhZCB0b28uKQ0KPiANCj4gPiArCSAqLw0KPiA+ ICsJem9uZWZzX3dhcm4oc2IsICJpbm9kZSAlbHU6IHNpemUgJWxsZCBzaG91bGQgYmUgJWxsZFxu IiwNCj4gPiArCQkgICAgaW5vZGUtPmlfaW5vLCBpc2l6ZSwgd3Bfb2ZzdCk7DQo+ID4gKwlpZiAo aXNpemUgPiB3cF9vZnN0KSB7DQo+ID4gKwkJc3RydWN0IHpvbmVmc19zYl9pbmZvICpzYmkgPSBa T05FRlNfU0Ioc2IpOw0KPiA+ICsNCj4gPiArCQlpZiAoKHNiaS0+c19tb3VudF9vcHRzICYgWk9O RUZTX01OVE9QVF9FUlJPUlNfUk8pICYmDQo+IA0KPiBNb3VudCBvcHRpb25zPyAgSGV5LCB3YWl0 IGEgbWludXRlLCB0aGlzIGRpZG4ndCBleGlzdCBpbiB2OC4uLg0KDQpZZXMsIGltcHJvdmVtZW50 IGluIHY5IHRvIGJldHRlciBoYW5kbGUgYWxsIGVycm9yIGNhc2VzIChpbmRpcmVjdGx5DQpzdWdn ZXN0ZWQgYnkgRGF2ZSB3aG8gcG9pbnRlZCBvdXQgZGVmaWNpZW5jaWVzIGluIHRoYXQgYXJlYSku DQoNCj4gPiArCQkgICAgIXNiX3Jkb25seShzYikpIHsNCj4gPiArCQkJem9uZWZzX3dhcm4oc2Is DQo+ID4gKwkJCQkiWm9uZSAlbHUgY29ycnVwdGlvbiBkZXRlY3RlZCwgcmVtb3VudGluZyBmcyBy ZWFkLW9ubHlcbiIsDQo+ID4gKwkJCQlpbm9kZS0+aV9pbm8pOw0KPiA+ICsJCQlzYi0+c19mbGFn cyB8PSBTQl9SRE9OTFk7DQo+ID4gKwkJCXJldHVybiAwOw0KPiA+ICsJCX0gZWxzZSBpZiAoc2Jp LT5zX21vdW50X29wdHMgJiBaT05FRlNfTU5UT1BUX0VSUk9SU19DT05UKSB7DQo+ID4gKwkJCXpv bmVmc193YXJuKHNiLA0KPiA+ICsJCQkJIlpvbmUgJWx1IGNvcnJ1cHRpb24gZGV0ZWN0ZWQsIGNv bnRpbnVpbmdcbiIsDQo+ID4gKwkJCQlpbm9kZS0+aV9pbm8pOw0KPiANCj4gSSdtIGZyYW5rbHkg bm90IHN1cmUgZXJyb3JzPWNvbnRpbnVlIG1ha2VzIHNlbnNlIGZvciBhIGZpbGVzeXN0ZW0uICBJ dA0KPiBleGlzdHMgZm9yIGV4dCogYXMgYSBjcnV0Y2ggZm9yIHRoZSByb290IGZzIHRvIGhlbHAg dXNlcnMgc3R1bWJsZQ0KPiB0b3dhcmRzIC9zYmluL3JlYm9vdCBhbmQgYSBmdWxsIGZzY2sgYWZ0 ZXJ3YXJkcy4NCg0KR29vZCBwb2ludC4NCg0KPiANCj4gQWxzbyB3b25kZXJpbmcgaWYgeW91IHNo b3VsZCBoYXZlIGFuIGVycm9ycz16b25lLXJvIHRoYXQgd2lsbCBzZXQNCj4gU19JTU1VVEFCTEUg b24gdGhlIHpvbmUgZmlsZT8gIFRoYXQgd291bGQgZW5hYmxlIHRoZSBpbnRhY3Qgem9uZXMgdG8N Cj4ga2VlcCBvcGVyYXRpbmcuDQoNCkRvbmUuIEFuZCBhcyBub3RlZCBhYm92ZSwgSSBhbHNvIGFk ZGVkICJlcnJvcnM9em9uZS1vZmZsaW5lIiBhbmQNCiJlcnJvcj1yZXBhaXIiLg0KDQo+IChPciBJ IGd1ZXNzIGlmIHlvdSByZWFsbHkgd2FudCBhICJjb250aW51ZSIgbW9kZSB5b3UgY291bGQgdHJ1 bmNhdGUgdGhlDQo+IHpvbmUuLi4pDQoNClRoYXQgaXMgdGhlIGVycm9ycz1yZXBhaXIgb3B0aW9u IG5vdy4gSXQgaXMgY2xlYXJlciB0aGlzIHdheSBJIHRoaW5rLg0KDQo+ID4gKwkJfSBlbHNlIGlm IChzYmktPnNfbW91bnRfb3B0cyAmIFpPTkVGU19NTlRPUFRfRVJST1JTX1BBTklDKSB7DQo+IA0K PiBJIGRvbid0IHRoaW5rIGl0J3MgYSBnb29kIGlkZWEgdG8gY3Jhc2ggdGhlIGVudGlyZSBrZXJu ZWwgb24gem9uZQ0KPiBjb3JydXB0aW9uLg0KDQpJIGhhdmUgZHJvcHBlZCB0aGlzIG9uZS4NCg0K PiA+ICsJCQl6b25lZnNfcGFuaWMoc2IsDQo+ID4gKwkJCQkiWm9uZSAlbHUgY29ycnVwdGlvbiBk ZXRlY3RlZFxuIiwNCj4gPiArCQkJCWlub2RlLT5pX2lubyk7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCXpvbmVmc191cGRhdGVfc3RhdHMoaW5vZGUsIHdwX29mc3QpOw0KPiA+ICsJ aV9zaXplX3dyaXRlKGlub2RlLCB3cF9vZnN0KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogV2hlbiBhbiBJTyBlcnJvciBvY2N1cnMsIGNo ZWNrIHRoZSB0YXJnZXQgem9uZSB0byBzZWUgaWYgdGhlcmUgaXMgYSBjaGFuZ2UNCj4gPiArICog aW4gdGhlIHpvbmUgY29uZGl0aW9uIChlLmcuIG9mZmxpbmUgb3IgcmVhZC1vbmx5KS4gRm9yIGEg ZmFpbGVkIHdyaXRlIHRvIGENCj4gPiArICogc2VxdWVudGlhbCB6b25lLCB0aGUgem9uZSB3cml0 ZSBwb2ludGVyIHBvc2l0aW9uIG11c3QgYWxzbyBiZSBjaGVja2VkIHRvDQo+ID4gKyAqIGV2ZW50 dWFsbHkgY29ycmVjdCB0aGUgZmlsZSBzaXplIGFuZCB6b25lZnMgaW5vZGUgd3JpdGUgcG9pbnRl ciBvZmZzZXQNCj4gPiArICogKHdoaWNoIGNhbiBiZSBvdXQgb2Ygc3luYyB3aXRoIHRoZSBkcml2 ZSBkdWUgdG8gcGFydGlhbCB3cml0ZSBmYWlsdXJlcykuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMg dm9pZCB6b25lZnNfaW9fZXJyb3Ioc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCB3cml0ZSkNCj4g PiArew0KPiA+ICsJc3RydWN0IHpvbmVmc19pbm9kZV9pbmZvICp6aSA9IFpPTkVGU19JKGlub2Rl KTsNCj4gPiArCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsNCj4gPiArCXN0 cnVjdCB6b25lZnNfc2JfaW5mbyAqc2JpID0gWk9ORUZTX1NCKHNiKTsNCj4gPiArCXVuc2lnbmVk IGludCBub2lvX2ZsYWc7DQo+ID4gKwl1bnNpZ25lZCBpbnQgbnJfem9uZXMgPQ0KPiA+ICsJCXpp LT5pX21heF9zaXplID4+IChzYmktPnNfem9uZV9zZWN0b3JzX3NoaWZ0ICsgU0VDVE9SX1NISUZU KTsNCj4gPiArCXN0cnVjdCB6b25lZnNfaW9lcnJfZGF0YSBpb2VyciA9IHsNCj4gPiArCQkuaW5v ZGUgPSBpbm9kZSwNCj4gPiArCQkud3JpdGUgPSB3cml0ZQ0KPiA+ICsJfTsNCj4gPiArCWludCBy ZXQ7DQo+ID4gKw0KPiA+ICsJbXV0ZXhfbG9jaygmemktPmlfdHJ1bmNhdGVfbXV0ZXgpOw0KPiA+ ICsNCj4gPiArCS8qDQo+ID4gKwkgKiBNZW1vcnkgYWxsb2NhdGlvbnMgaW4gYmxrZGV2X3JlcG9y dF96b25lcygpIGNhbiB0cmlnZ2VyIGEgbWVtb3J5DQo+ID4gKwkgKiByZWNsYWltIHdoaWNoIG1h eSBpbiB0dXJuIGNhdXNlIGEgcmVjdXJzaW9uIGludG8gem9uZWZzIGFzIHdlbGwgYXMNCj4gPiAr CSAqIEJJTyBhbGxvY2F0aW9ucyBmb3IgdGhlIHNhbWUgZGV2aWNlLiBUaGUgZm9ybWVyIGNhc2Ug bWF5IGVuZCB1cCBpbg0KPiA+ICsJICogYSBkZWFkbG9jayBvbiB0aGUgaW5vZGUgdHJ1bmNhdGUg bXV0ZXgsIHdoaWxlIHRoZSBsYXR0ZXIgbWF5IHByZXZlbnQNCj4gPiArCSAqIGZvcndhcmQgcHJv Z3Jlc3Mgd2l0aCBCSU8gYWxsb2NhdGlvbnMgYXMgd2UgYXJlIHBvdGVudGlhbGx5IHN0aWxsDQo+ ID4gKwkgKiBob2xkaW5nIHRoZSBmYWlsZWQgQklPLiBFeGVjdXRpbmcgdGhlIHJlcG9ydCB6b25l cyB1bmRlciBHRlBfTk9JTw0KPiA+ICsJICogYXZvaWRzIGJvdGggcHJvYmxlbXMuDQo+ID4gKwkg Ki8NCj4gPiArCW5vaW9fZmxhZyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpOw0KPiANCj4gRG9uJ3Qg eW91IHN0aWxsIG5lZWQgbWVtYWxsb2Nfbm9mc18gaGVyZSB0b28/DQoNCm5vaW8gaW1wbGllcyBu b2ZzLCBkb2Vzbid0IGl0ID8gT3IgcmF0aGVyLCBub2lvIGlzIG1vcmUgcmVzdHJpY3RpdmUNCnRo YW4gbm9mcyBoZXJlLiBXaGljaCBpcyBzYWZlciBzaW5jZSB3ZSBuZWVkIGEgc3RydWN0IHJlcXVl c3QgdG8gYmUNCmFibGUgdG8gZXhlY3V0ZSBibGtkZXZfcmVwb3J0X3pvbmVzKCkuDQoNCj4gPiAr CXJldCA9IGJsa2Rldl9yZXBvcnRfem9uZXMoc2ItPnNfYmRldiwgemktPmlfenNlY3RvciwgbnJf em9uZXMsDQo+ID4gKwkJCQkgIHpvbmVmc19pb19lcnJfY2IsICZpb2Vycik7DQo+ID4gKwlpZiAo cmV0ICE9IG5yX3pvbmVzKQ0KPiA+ICsJCXpvbmVmc19lcnIoc2IsICJHZXQgaW5vZGUgJWx1IHpv bmUgaW5mb3JtYXRpb24gZmFpbGVkICVkXG4iLA0KPiA+ICsJCQkgICBpbm9kZS0+aV9pbm8sIHJl dCk7DQo+ID4gKwltZW1hbGxvY19ub2lvX3Jlc3RvcmUobm9pb19mbGFnKTsNCj4gPiArDQo+ID4g KwltdXRleF91bmxvY2soJnppLT5pX3RydW5jYXRlX211dGV4KTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIGludCB6b25lZnNfZmlsZV93cml0ZV9kaW9fZW5kX2lvKHN0cnVjdCBraW9jYiAq aW9jYiwgc3NpemVfdCBzaXplLA0KPiA+ICsJCQkJCWludCBlcnJvciwgdW5zaWduZWQgaW50IGZs YWdzKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2Ni LT5raV9maWxwKTsNCj4gPiArCXN0cnVjdCB6b25lZnNfaW5vZGVfaW5mbyAqemkgPSBaT05FRlNf SShpbm9kZSk7DQo+ID4gKw0KPiA+ICsJaWYgKGVycm9yKSB7DQo+ID4gKwkJem9uZWZzX2lvX2Vy cm9yKGlub2RlLCB0cnVlKTsNCj4gPiArCQlyZXR1cm4gZXJyb3I7DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJaWYgKHNpemUgJiYgemktPmlfenR5cGUgIT0gWk9ORUZTX1pUWVBFX0NOVikgew0KPiA+ ICsJCW11dGV4X2xvY2soJnppLT5pX3RydW5jYXRlX211dGV4KTsNCj4gPiArCQlpZiAoaV9zaXpl X3JlYWQoaW5vZGUpIDwgaW9jYi0+a2lfcG9zICsgc2l6ZSkgew0KPiA+ICsJCQl6b25lZnNfdXBk YXRlX3N0YXRzKGlub2RlLCBpb2NiLT5raV9wb3MgKyBzaXplKTsNCj4gPiArCQkJaV9zaXplX3dy aXRlKGlub2RlLCBpb2NiLT5raV9wb3MgKyBzaXplKTsNCj4gPiArCQl9DQo+ID4gKwkJbXV0ZXhf dW5sb2NrKCZ6aS0+aV90cnVuY2F0ZV9tdXRleCk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0 dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlv X29wcyB6b25lZnNfd3JpdGVfZGlvX29wcyA9IHsNCj4gPiArCS5lbmRfaW8JCQk9IHpvbmVmc19m aWxlX3dyaXRlX2Rpb19lbmRfaW8sDQo+ID4gK307DQoNClVucmVsYXRlZCB0byB5b3VyIG90aGVy IGNvbW1lbnRzLCBJIGRpc2NvdmVyZWQgdGhhdCB0aGUgZW5kX2lvDQpvcGVyYXRpb24gaXMgY2Fs bGVkIHdpdGggdGhlIGZsYWdzIGFyZ3VtZW50IGJlaW5nIGRpby0+ZmxhZ3MuIFNpbmNlIHRoZQ0K ZmxhZ3MgZm9yIHRoYXQgYXJlIHRoZSBJT01BUF9ESU9fWFhYIGZsYWdzIGRlZmluZWQgaW4gZnMv aW9tYXAvZGlyZWN0LQ0KaW8uYywgdGhlIGZsYWdzIHZhbHVlcyBhcmUgbm90IHZpc2libGUgYnkg dGhlIGltcGxlbWVudGF0aW9uIGFuZCB0aGUNCmVuZF9pbygpIGNhbGxiYWNrIGZ1bmN0aW9uIGNh bm5vdCBkZXRlcm1pbmUgaWYgdGhlIGRpbyBpcyBhIHJlYWQgb3IgYQ0Kd3JpdGUuIFRoaXMgY2Fu IGJlIHdvcmtlZCBhcm91bmQgYnkgZGVmaW5pbmcgb25lIGVuZF9pbyBvcCBmb3IgcmVhZHMNCmFu ZCBhbm90aGVyIGZvciB3cml0ZXMgKHdoaWNoIEkgZGlkIGhlcmUsIHNlZQ0Kem9uZWZzX2ZpbGVf cmVhZF9kaW9fZW5kX2lvKCkpLg0KDQpCdXQgd2UgY291bGQgYWxsb3cgY29kZSBzaW1wbGlmaWNh dGlvbiBieSBzaW1wbHkgYWRkaW5nIHRoZSBJT01BUF9YWFgNCmZsYWdzIHBhc3NlZCB0byBpb21h cF9iZWdpbigpIGludG8gdGhlIGRpby0+ZmxhZ3MgKHRoZXNlcyB0d28gc2V0IG9mDQpmbGFncyBk byBub3QgY29sbGlkZSBhcyBtZW50aW9uZWQgaW4gZnMvaW9tYXAvZGlyZWN0LWlvLmMpLiBUaGF0 IHdvdWxkDQprZWVwIHRoZSBpbnRlcmZhY2UgaW4gaW5jbHVkZS9saW51eC9pb21hcC5oIGNsZWFu IChubyBuZXcgZmxhZ3MpIGFuZA0KZ2l2ZSBtb3JlIGluZm9ybWF0aW9uIHRvIHRoZSBlbmRfaW8o KSBjYWxsYmFjay4gV2l0aCB0aGF0LCBJIGNvdWxkIGdldA0KcmlkIG9mIHRoZSB6b25lZnNfZmls ZV9yZWFkX2Rpb19lbmRfaW8oKSBmdW5jdGlvbiBhbmQgY2hhbmdlDQp6b25lZnNfZmlsZV93cml0 ZV9kaW9fZW5kX2lvKCkgaW50byB6b25lZnNfZmlsZV9kaW9fZW5kX2lvKCkgZm9yIGJvdGgNCnJl YWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMuIExlc3MgY29kZS4gVGhvdWdodHMgPw0KDQo+ID4gKw0K PiA+ICsvKg0KPiA+ICsgKiBIYW5kbGUgZGlyZWN0IHdyaXRlcy4gRm9yIHNlcXVlbnRpYWwgem9u ZSBmaWxlcywgdGhpcyBpcyB0aGUgb25seSBwb3NzaWJsZQ0KPiA+ICsgKiB3cml0ZSBwYXRoLiBG b3IgdGhlc2UgZmlsZXMsIGNoZWNrIHRoYXQgdGhlIHVzZXIgaXMgaXNzdWluZyB3cml0ZXMNCj4g PiArICogc2VxdWVudGlhbGx5IGZyb20gdGhlIGVuZCBvZiB0aGUgZmlsZS4gVGhpcyBjb2RlIGFz c3VtZXMgdGhhdCB0aGUgYmxvY2sgbGF5ZXINCj4gPiArICogZGVsaXZlcnMgd3JpdGUgcmVxdWVz dHMgdG8gdGhlIGRldmljZSBpbiBzZXF1ZW50aWFsIG9yZGVyLiBUaGlzIGlzIGFsd2F5cyB0aGUN Cj4gPiArICogY2FzZSBpZiBhIGJsb2NrIElPIHNjaGVkdWxlciBpbXBsZW1lbnRpbmcgdGhlIEVM RVZBVE9SX0ZfWkJEX1NFUV9XUklURQ0KPiANCj4gSXMgdGhlcmUgYW55IHdheSBmb3Igem9uZWZz IHRvIGRldGVjdCB0aGF0IGl0J3MgdGFsa2luZyB0byBhbiBpbw0KPiBzY2hlZHVsZXIgdGhhdCBk b2Vzbid0IHN1cHBvcnQgWkJEX1NFUV9XUklURSBhbmQgcmVhY3QgYWNjb3JkaW5nbHkgKGxvZw0K PiBtZXNzYWdlLCByZWZ1c2UgdG8gbW91bnQsIGV0Yy4pPw0KDQpOb3QgcmVhbGx5LiBJdCBjYW4g YmUgZG9uZSBpZiB6b25lZnMgc2l0cyBkaXJlY3RseSBvbiB0aGUgYmRldiBvZiBhDQpyZWFsIGRl dmljZSwgYnV0IGlmIHRoZSBibG9jayBkZXZpY2UgY29tZXMgZnJvbSBhIEJJTy1iYXNlZCBkZXZp Y2UNCm1hcHBlciB0YXJnZXQgKGUuZy4gZG0tbGluZWFyKSwgdGhlbiB0aGVyZSBpcyBubyBzY2hl ZHVsZXIgZm9yIHRoYXQNCmRldmljZS4gU2NoZWR1bGluZyBpcyBvbiB0aGUgYmFja2VuZCBkZXZp Y2UocykgaW4gdGhhdCBjYXNlIGFuZCB0aGF0IGlzDQppbnZpc2libGUgZnJvbSB0aGUgdG9wIGJk ZXYgaW50ZXJmYWNlLiBOb3QgdG8gbWVudGlvbiB0aGF0IHRhcmdldCBtYXkNCmJlIHVzaW5nIHNl dmVyYWwgZGV2aWNlcy4uLg0KDQpGdXJ0aGVybW9yZSwgSSBhbSB0cnlpbmcgdG8gbGltaXQgYXMg bXVjaCBhcyBwb3NzaWJsZSBkZXBlbmRlbmNpZXMgb24NCnRoZSBibG9jayBsYXllciBpbXBsZW1l bnRhdGlvbiBvZiAic2VxdWVudGlhbCB3cml0ZSBndWFyYW50ZWVzIiBhcyB3ZQ0KYXJlIHN0aWxs IHRyeWluZyB0byBldm9sdmUgdGhhdCBpbnRvIHNvbWV0aGluZyB0aGF0IHdvcmtzIGZvciBhbnkN CnNjaGVkdWxlci4NCg0KPiA+ICsgKiBlbGV2YXRvciBmZWF0dXJlIGlzIGJlaW5nIHVzZWQgKGUu Zy4gbXEtZGVhZGxpbmUpLiBUaGUgYmxvY2sgbGF5ZXIgYWx3YXlzDQo+ID4gKyAqIGF1dG9tYXRp Y2FsbHkgc2VsZWN0IHN1Y2ggYW4gZWxldmF0b3IgZm9yIHpvbmVkIGJsb2NrIGRldmljZXMgZHVy aW5nIHRoZQ0KPiA+ICsgKiBkZXZpY2UgaW5pdGlhbGl6YXRpb24uDQo+IA0KPiBPciBpcyB0aGUg Y2FzZSB0aGF0IHRoZSBibG9jayBsYXllciBrbm93cyB3aGVuIGl0J3MgZGVhbGluZyB3aXRoIGEg em9uZWQNCj4gYmxvY2sgZGV2aWNlIGFuZCB3aWxsIG5vdCBhbGxvdyB0aGUgYXNzaWdubWVudCBv ZiBhbiBpb3NjaGVkdWxlciB0aGF0DQo+IGRvZXMgbm90IHN1cHBvcnQgWkJEX1NFUV9XUklURT8N Cg0KQ3VycmVudGx5LCBmb3Igem9uZWQgYmxvY2sgZGV2aWNlcywgdGhlIGJsb2NrIGxheWVyIHdp bGwgb25seSBhbGxvdw0Kc2V0dGluZyBhIHNjaGVkdWxlciB0aGF0IGhhcyB0aGUgWkJEX1NFUV9X UklURSBmZWF0dXJlLiBUaGUgb25seSBvbmUNCnRoYXQgZG9lcyBmb3Igbm93IGlzIG1xLWRlYWRs aW5lLiBPdGhlciBzY2hlZHVsZXJzIHdpdGhvdXQgdGhpcyBmZWF0dXJlDQpzdXBwb3J0IHdpbGwg bm90IGV2ZW4gYmUgc2hvd24gaW4gL3N5cy9ibG9jay94eHgvcXVldWUvc2NoZWR1bGVyLiBUaGUN Cm9ubHkgZXhjZXB0aW9uIHRvIHRoaXMgaXMgIm5vbmUiLCB3aGljaCBpcyBhbHdheXMgYWxsb3dl ZC4NCg0KPiA+IFsuLi5dDQo+ID4gK3N0YXRpYyBzc2l6ZV90IHpvbmVmc19maWxlX3dyaXRlX2l0 ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pDQo+ID4gK3sNCj4g PiArCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItPmtpX2ZpbHApOw0KPiA+ ICsNCj4gPiArCS8qIFdyaXRlIG9wZXJhdGlvbnMgYmV5b25kIHRoZSB6b25lIHNpemUgYXJlIG5v dCBhbGxvd2VkICovDQo+ID4gKwlpZiAoaW9jYi0+a2lfcG9zID49IFpPTkVGU19JKGlub2RlKS0+ aV9tYXhfc2l6ZSkNCj4gPiArCQlyZXR1cm4gLUVGQklHOw0KPiANCj4gVGhpcyBuZWVkcyBhIGNo ZWNrIGZvciBJU19JTU1VVEFCTEUgc28gdGhhdCB1c2Vyc3BhY2UgY2FuJ3Qgd3JpdGUgdG8NCj4g em9uZXMgd2hpY2ggem9uZWZzIGhhcyBkZWNpZGVkIGFyZSBubyBsb25nZXIgd3JpdGFibGUsIGV2 ZW4gaWYgdGhlDQo+IHByb2dyYW0gaGFzIGEgd3JpdGVhYmxlIGZpbGUgZGVzY3JpcHRvci4NCg0K RG9uZSwgd2l0aCBhbm90aGVyIGFkZGl0aW9uYWwgY2hlY2tzIGluIHpvbmVmc19maWxlX3JlYWRf aXRlcigpIGZvcg0Kb2ZmbGluZSB6b25lcyAoaW1tdXRhYmxlICsgbm8gcmVhZHMgYWxsb3dlZCku DQoNCj4gPiBbLi4uXQ0KPiA+ICsvKg0KPiA+ICsgKiBDaGVjayB0aGF0IHRoZSBkZXZpY2UgaXMg em9uZWQuIElmIGl0IGlzLCBnZXQgdGhlIGxpc3Qgb2Ygem9uZXMgYW5kIGNyZWF0ZQ0KPiA+ICsg KiBzdWItZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGFjY29yZGluZyB0byB0aGUgZGV2aWNlIHpvbmUg Y29uZmlndXJhdGlvbiBhbmQNCj4gPiArICogZm9ybWF0IG9wdGlvbnMuDQo+ID4gKyAqLw0KPiA+ ICtzdGF0aWMgaW50IHpvbmVmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZv aWQgKmRhdGEsIGludCBzaWxlbnQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB6b25lZnNfem9uZV9k YXRhIHpkOw0KPiA+ICsJc3RydWN0IHpvbmVmc19zYl9pbmZvICpzYmk7DQo+ID4gKwlzdHJ1Y3Qg aW5vZGUgKmlub2RlOw0KPiA+ICsJZW51bSB6b25lZnNfenR5cGUgdDsNCj4gPiArCWludCByZXQ7 DQo+ID4gKw0KPiA+ICsJaWYgKCFiZGV2X2lzX3pvbmVkKHNiLT5zX2JkZXYpKSB7DQo+ID4gKwkJ em9uZWZzX2VycihzYiwgIk5vdCBhIHpvbmVkIGJsb2NrIGRldmljZVxuIik7DQo+ID4gKwkJcmV0 dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIEluaXRpYWxp emUgc3VwZXIgYmxvY2sgaW5mb3JtYXRpb246IHRoZSBtYXhpbXVtIGZpbGUgc2l6ZSBpcyB1cGRh dGVkDQo+ID4gKwkgKiB3aGVuIHRoZSB6b25lIGZpbGVzIGFyZSBjcmVhdGVkIHNvIHRoYXQgdGhl IGZvcm1hdCBvcHRpb24NCj4gPiArCSAqIFpPTkVGU19GX0FHR1JDTlYgd2hpY2ggaW5jcmVhc2Vz IHRoZSBtYXhpbXVtIGZpbGUgc2l6ZSBvZiBhIGZpbGUNCj4gPiArCSAqIGJleW9uZCB0aGUgem9u ZSBzaXplIGlzIHRha2VuIGludG8gYWNjb3VudC4NCj4gPiArCSAqLw0KPiA+ICsJc2JpID0ga3ph bGxvYyhzaXplb2YoKnNiaSksIEdGUF9LRVJORUwpOw0KPiA+ICsJaWYgKCFzYmkpDQo+ID4gKwkJ cmV0dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ICsJc3Bpbl9sb2NrX2luaXQoJnNiaS0+c19sb2Nr KTsNCj4gPiArCXNiLT5zX2ZzX2luZm8gPSBzYmk7DQo+ID4gKwlzYi0+c19tYWdpYyA9IFpPTkVG U19NQUdJQzsNCj4gPiArCXNiLT5zX21heGJ5dGVzID0gMDsNCj4gPiArCXNiLT5zX29wID0gJnpv bmVmc19zb3BzOw0KPiA+ICsJc2ItPnNfdGltZV9ncmFuCT0gMTsNCj4gPiArDQo+ID4gKwkvKg0K PiA+ICsJICogVGhlIGJsb2NrIHNpemUgaXMgc2V0IHRvIHRoZSBkZXZpY2UgcGh5c2ljYWwgc2Vj dG9yIHNpemUgdG8gZW5zdXJlDQo+ID4gKwkgKiB0aGF0IHdyaXRlIG9wZXJhdGlvbnMgb24gNTEy ZSBkZXZpY2VzICg1MTJCIGxvZ2ljYWwgYmxvY2sgYW5kIDRLQg0KPiA+ICsJICogcGh5c2ljYWwg YmxvY2spIGFyZSBhbHdheXMgYWxpZ25lZCB0byB0aGUgZGV2aWNlIHBoeXNpY2FsIGJsb2NrcywN Cj4gPiArCSAqIGFzIG1hbmRhdGVkIGJ5IHRoZSBaQkMvWkFDIHNwZWNpZmljYXRpb25zLg0KPiA+ ICsJICovDQo+ID4gKwlzYl9zZXRfYmxvY2tzaXplKHNiLCBiZGV2X3BoeXNpY2FsX2Jsb2NrX3Np emUoc2ItPnNfYmRldikpOw0KPiA+ICsJc2JpLT5zX2Jsb2Nrc2l6ZV9tYXNrID0gc2ItPnNfYmxv Y2tzaXplIC0gMTsNCj4gPiArCXNiaS0+c196b25lX3NlY3RvcnNfc2hpZnQgPSBpbG9nMihiZGV2 X3pvbmVfc2VjdG9ycyhzYi0+c19iZGV2KSk7DQo+ID4gKwlzYmktPnNfdWlkID0gR0xPQkFMX1JP T1RfVUlEOw0KPiA+ICsJc2JpLT5zX2dpZCA9IEdMT0JBTF9ST09UX0dJRDsNCj4gPiArCXNiaS0+ c19wZXJtID0gMDY0MDsNCj4gPiArCXNiaS0+c19tb3VudF9vcHRzID0gWk9ORUZTX01OVE9QVF9F UlJPUlNfUk87DQo+ID4gKw0KPiA+ICsJcmV0ID0gem9uZWZzX3JlYWRfc3VwZXIoc2IpOw0KPiA+ ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCXJldCA9IHpvbmVm c19wYXJzZV9vcHRpb25zKHNiLCBkYXRhKTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJcmV0dXJu IHJldDsNCj4gPiArDQo+ID4gKwltZW1zZXQoJnpkLCAwLCBzaXplb2Yoc3RydWN0IHpvbmVmc196 b25lX2RhdGEpKTsNCj4gPiArCXpkLnNiID0gc2I7DQo+ID4gKwlyZXQgPSB6b25lZnNfZ2V0X3pv bmVfaW5mbygmemQpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlnb3RvIG91dDsNCj4gPiArDQo+ IA0KPiBJdCBtaWdodCBiZSBhIGdvb2QgaWRlYSB0byBzcGl0IG91dCBhbiBFWFBFUklNRU5UQUwg d2FybmluZyBhdCBtb3VudA0KPiB0aW1lIGZvciB0aGUgZmlyc3QgNiBtb250aHMgd2hpbGUgeW91 LCB1aCwgc2VlayBvdXQgYWR2YW5jZWQgYmxlZWRpbmcNCj4gZWRnZSB0ZXN0ZXJzIHRvIHJlYWxs eSBnaXZlIHRoaXMgY29kZSBhIHRob3JvdWdoIHdvcmtvdXQuDQo+IA0KPiB6b25lZnNfd2Fybihz YiwgIkVYUEVSSU1FTlRBTCBmaWxlc3lzdGVtIGluIHVzZTsgdXNlIGF0IHlvdXIgb3duIHJpc2si KTsNCg0KWWVzLCBJIHRob3VnaHQgYWJvdXQgdGhpcyB0b28gYnV0IEkgYW0gc3RpbGwgd29uZGVy aW5nIGlmIGl0IGlzIHRoZQ0KcmlnaHQgdGhpbmcgdG8gZG8uIFNlZSBiZWxvdy4NCg0KPiBPciBz b21ldGhpbmcgbGlrZSB0aGF0IHRvIG1hbmFnZSBwZW9wbGVzJyBleHBlY3RhdGlvbnMgaW4gY2Fz ZSB5b3UgZmluZA0KPiBhIHJlYWxseSBuYXN0eSBkYXRhLWNob21waW5nIGJ1Zy4gOikNCg0KV2Vs bCwgbXkgdmlldyBpcyB0aGF0IHNpbmNlIHpvbmVmcyBkb2VzIG5vdCBoYXZlIGFueSBydW4tdGlt ZSBjaGFuZ2luZw0Kb24tZGlzayBtZXRhZGF0YSwgaXQgaXMgbm90IHdvcnNlIHRoYXQgdGhlIHJh dyBibG9jayBkZXZpY2UgZmlsZSB1c2UNCmNhc2UgaW4gdGVybXMgb2YgcmVsaWFiaWxpdHkuIFVu bW91bnQgem9uZWZzLCBpZ25vcmluZyB0aGUgZmlyc3Qgem9uZQ0Kb2YgdGhlIGRldmljZSB0aGF0 IGhhcyB0aGUgc3VwZXJibG9jaywgdXNpbmcgdGhlIHpvbmVzIGRpcmVjdGx5IHRocm91Z2gNCnRo ZSByYXcgYmxvY2sgZGV2aWNlIGZpbGUgb3Blbi9jbG9zZS9yZWFkL3dyaXRlL2lvY3RsIHdpbGwg Z2l2ZSB0aGUNCnNhbWUgbGV2ZWwgb2YgY29uZmlkZW5jZSBhYm91dCBkYXRhIGluIHRoZSB6b25l cy4gSWYgYW55dGhpbmcsIHpvbmVmcw0KaW1wcm92ZXMgb24gdGhhdCB3aXRoIHRoZSB2YXJpb3Vz IGNoZWNrcyBpdCBhZGRzIGZvciB3cml0ZXMgYW5kIElPDQplcnJvcnMgKGZzL2Jsb2NrLWRldi5j IGRvZXMgbm90IGhhdmUgYW55dGhpbmcgbGlrZSB0aGF0IGZvciB6b25lZCBibG9jaw0KZGV2aWNl cykuDQoNCk9mIGNvdXJzZSBJIGRvIG5vdCBtZWFuIHRoYXQgem9uZWZzIGlzIGJ1ZyBmcmVlLiBC dXQgSSBzdGlsbCBjb25zaWRlcg0KdGhlIGxpa2VsaW5lc3Mgb2YgbG9vc2luZyBkYXRhIGVxdWl2 YWxlbnQgdG8gdGhlIHJhdyBibG9jayBkZXZpY2UgZmlsZQ0KY2FzZTogaXQgbW9zdGx5IHdpbGwg ZGVwZW5kIG9uIHRoZSBhcHBsaWNhdGlvbiBkb2luZyB0aGUgcmlnaHQgdGhpbmcuDQpUaGUgdmFs dWUgb2Ygem9uZWZzIGlzIGluIHRoZSBmaWxlIGFjY2VzcyBpbnRlcmZhY2Ugc2ltcGxpZmljYXRp b24sIGFuZA0Kbm90IGluIHN0cm9uZyBhZGRpdGlvbmFsIGd1YXJhbnRlZXMgYWJvdXQgZGF0YSBs b3NzIG9yIGNvcnJ1cHRpb24NCmRldGVjdGlvbi4gU28gd2FybmluZyBhYm91dCB0aGUgZXhwZXJp bWVudGFsIHN0YXR1cyBtYXkgYmUgdG9vIHNjYXJ5DQphbmQgZGlzY291cmFnZSB1c2VycyBmcm9t IHVzaW5nIGl0IGFuZCBzdGFydCBkZXZlbG9waW5nIGZvciB0aGUgYmxvY2sNCmRldmljZSBmaWxl IGFjY2VzcyB1c2UgY2FzZS4gSSB3b3VsZCByYXRoZXIgZW5jb3VyYWdlIHBlb3BsZSB0byBzdGFy dA0KdXNpbmcgem9uZWZzIG5vdywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgZmFjdCB0aGF0 IHRoZSB1cGNvbWluZw0KTlZNZSBaTlMgd2lsbCBuZWVkIHNvbWUgYWRkaXRpb25hbCB6b25lIHNw ZWNpZmljIGhhbmRsaW5nICh6b25lDQpyZXNvdXJjZSBjb250cm9sIGZvciB3cml0ZXMpIHRoYXQg YXJlIGZhaXJseSBlYXN5IHRvIGhhbmRsZSB3aXRoIGEgb25lLQ0KZmlsZS1wZXItem9uZSBpbi1r ZXJuZWwgRlMgaW50ZXJmYWNlLiBUaGF0IHNpbXBsaWZpZXMgZXZlbiBtb3JlIHRoZQ0KYXBwbGlj YXRpb24gaW1wbGVtZW50YXRpb24uDQoNCkJ1dCBJIGRvIG5vdCBoYXZlIHN0cm9uZyBmZWVsaW5n IGFib3V0IGl0IGVpdGhlciwgYW5kIEkgd2lsbCBhZGQgdGhlDQp3YXJuaW5nIGlmIHlvdSBvciBv dGhlcnMgaW5zaXN0IDopDQoNCj4gKE9yIGFzIGEgbGV2ZXIgdG8gY29udmluY2UgcGVvcGxlIHRv IHN0b3AgcnVubmluZyBvbGQgY29kZSBzb21lIGRheS4uLikNCg0KSSBhbSBzdGlsbCB0cnlpbmcg dG8gY29udmluY2UgYSBsb3Qgb2YgU01SIHVzZXJzIHRvIG1vdmUgYXdheSBmcm9tDQpTR19JTyBh bmQgdXNlIHRoZSBrZXJuZWwgYmxvY2sgbGF5ZXIgaW5zdGVhZC4gQnV0IGEgbG90IG9mIGRlcGxv eW1lbnRzDQpzdGlsbCB1c2UgZW50ZXJwcmlzZSBkaXN0cm9zIHdpdGgga2VybmVscyB0aGF0IGRv IG5vdCBoYXZlIFNNUiBzdXBwb3J0Lg0KR2V0dGluZyB6b25lZnMgaW50byB0aGUga2VybmVsIGFu ZCBJIHdpbGwgZGVmaW5pdGVseSBwdXNoIGZvciBpdHMgdXNlDQppbiBwbGFjZSBvZiB0aGUgcmF3 IGJsb2NrIGRldmljZSBmaWxlIGludGVyZmFjZSBhcyB0aGF0IGFsc28gc2ltcGxpZmllcw0Kc3Vw cG9ydCBmb3IgdmFyaW91cyBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBsYW5ndWFnZXMgKGUuZy4g U01SIGRyaXZlDQpoYW5kbGluZyBkaXJlY3RseSBmcm9tIEpBVkEgb3IgcHl0aG9uKS4NCg0KVGhh bmsgeW91IGZvciBhbGwgeW91ciBjb21tZW50cy4NCg0KLS0gDQpEYW1pZW4gTGUgTW9hbA0KV2Vz dGVybiBEaWdpdGFsIFJlc2VhcmNoDQo=