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=-9.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,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 40D4AC55178 for ; Tue, 27 Oct 2020 19:31:22 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CF65120756 for ; Tue, 27 Oct 2020 19:31:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=maxlinear.com header.i=@maxlinear.com header.b="WzK/HEmO" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1830051AbgJ0TbU (ORCPT ); Tue, 27 Oct 2020 15:31:20 -0400 Received: from us-smtp-delivery-115.mimecast.com ([63.128.21.115]:44487 "EHLO us-smtp-delivery-115.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1830040AbgJ0TbR (ORCPT ); Tue, 27 Oct 2020 15:31:17 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=maxlinear.com; s=selector; t=1603827067; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=13jeU16zsBdD4q9UrjJPwg8/lu2DnAUXoPDIvPSSZTo=; b=WzK/HEmOMvCEBSPA2nVNa5Xo5Unq5L7spp510MI1p+Y7l9CdjTiWdE8u59F12T22HT4U+f rHYFRSlTUFAdQSnQIo7aojbwANTpr3fDKsdp4QtdffWZfXFowfqgkvP7h3id379PlMtFMo VxhonU0BjKNQpcThaadXSsc9wm0uuKo= Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10lp2105.outbound.protection.outlook.com [104.47.55.105]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-432-OYav2i9jNyyhD1NTNepxuw-2; Tue, 27 Oct 2020 15:24:51 -0400 X-MC-Unique: OYav2i9jNyyhD1NTNepxuw-2 Received: from DM6PR19MB3594.namprd19.prod.outlook.com (2603:10b6:5:203::21) by DM5PR19MB0954.namprd19.prod.outlook.com (2603:10b6:3:26::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3499.18; Tue, 27 Oct 2020 19:24:39 +0000 Received: from DM6PR19MB3594.namprd19.prod.outlook.com ([fe80::540:6c32:23e2:4a1]) by DM6PR19MB3594.namprd19.prod.outlook.com ([fe80::540:6c32:23e2:4a1%6]) with mapi id 15.20.3499.018; Tue, 27 Oct 2020 19:24:33 +0000 From: Thomas Langer To: Amireddy Mallikarjuna reddy , "dmaengine@vger.kernel.org" , "vkoul@kernel.org" , "devicetree@vger.kernel.org" , "robh+dt@kernel.org" CC: "linux-kernel@vger.kernel.org" , "Shevchenko, Andriy" , "chuanhua.lei@linux.intel.com" , "Kim, Cheol Yong" , "Wu, Qiming" , "malliamireddy009@gmail.com" , "peter.ujfalusi@ti.com" , "Langer, Thomas" Subject: RE: [PATCH v7 2/2] Add Intel LGM soc DMA support. Thread-Topic: [PATCH v7 2/2] Add Intel LGM soc DMA support. Thread-Index: AQHWrDg4ux6aXmT1TU2zmMjiw8vLfqmrt1PQ Date: Tue, 27 Oct 2020 19:24:33 +0000 Message-ID: References: <49b3be1f8521e097e65b663be1af040d6e116e8c.1600827061.git.mallikarjunax.reddy@linux.intel.com> In-Reply-To: <49b3be1f8521e097e65b663be1af040d6e116e8c.1600827061.git.mallikarjunax.reddy@linux.intel.com> Accept-Language: de-DE, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-reaction: no-action dlp-version: 11.5.1.3 dlp-product: dlpe-windows x-originating-ip: [188.99.122.51] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: f617b925-f945-419c-4427-08d87aadef1e x-ms-traffictypediagnostic: DM5PR19MB0954: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:5236 x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0 x-microsoft-antispam-message-info: QVawHlAENgLYQ61wVnBs9epqbeSg8tx5oPi7T5o4FfBcGDlez8aYfF//mudrhmtYXlnooOjE7G0CV9V/D0uMERquDPMQQdqZa8T3eZ8MwuLNg/dlqCuf2igDhvh43Y6P0MfNO9PdPqCYXCDuEhoA/xNdej/tDFj+hYeZ9S62VvkZJdXej1Z4X9SaBHUegbGiH/87e+8asog33M38owRy+lxfUCkvndapoc+hmWEfgdace/OxfHe6uNUp3lm11uTv+6DZSVGJG8lBQbS39CkqRZVO9a/SZ8CWhJVTe5y53YOZnOF3ugQvJK2PhmlWPl2EQks2ngHgK/pKOjIxkE77OfkcgElPEtZYOGeqg7v+7OIi/5rPoIrDUqASgDC0hhek x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR19MB3594.namprd19.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(136003)(396003)(346002)(366004)(39850400004)(66946007)(64756008)(53546011)(7416002)(71200400001)(7696005)(83380400001)(2906002)(26005)(52536014)(9686003)(66446008)(6506007)(76116006)(86362001)(54906003)(5660300002)(66556008)(4326008)(66476007)(316002)(33656002)(30864003)(478600001)(55016002)(8936002)(110136005)(186003)(8676002)(559001)(579004)(473944003);DIR:OUT;SFP:1102 x-ms-exchange-antispam-messagedata: 8iUQNn1BPoTHwsySs0QiWeuRomq1rC+Lkx3gxjCliaZRXj0jh86FhD4dQlvfzddEJliFisMY1DCaUVNCiXVHwT4u7D02iPmbO9XQgE9/7Ttv0DREXgWrMJmoIz6TZBJ5dB9dsTsUZD2l+enqLqocNVJl9yBXIvOQG8msYbH61EuETWwSx3H23KOGQwMEyByoSL48t+8kit6yi/ZJ+SXfq+G1cv9hoZaMVo2KIMsq4ZD1vHI7FiPcZZDc73J/rBR/5TNHmVPkKunNRbmuzZ383yicj37phChyZewxDLig68Xoqypy5RuySVwmH8JSbUHjUh+cPuPwf5gcBhvj5l8YEj4uO+TK9CPaHgWGhqoeaQQndrBIY4phK3LEG3KUb8Yy9HlLtaUmU8+EIl0osjgM9Y6C5cbJjie8q+t1ROd//yUUrGzi917pY46p8mkeU6B12uY4rm8nvX6beL+3EyrDfnVPYqPoCXFZjr4GSFe32ok1B4uIyaxPwf9F91A35oQsVmw9DB/veYI+Np4TTAmD59F/u431Fm41CiCkEegTcCzeJz+CaGhIaKMB6p7+TyvL3cwVXqcj/Gd1aMtjyh/T/8sP0GxE02COCWS2mEXMm8xGSFi8MRCoTR1hj1f9Dn3faE1TWVnExeP+HOxkLZKbLg== x-ms-exchange-transport-forked: True MIME-Version: 1.0 X-OriginatorOrg: maxlinear.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR19MB3594.namprd19.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f617b925-f945-419c-4427-08d87aadef1e X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Oct 2020 19:24:33.1954 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: dac28005-13e0-41b8-8280-7663835f2b1d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: tqdIje2D3CNC2NOx4RGl6OzvqNrf8yqyGV71++vP2LCQlzH1i52o+sB8xMTiIeFSbh4MQ+yfQQoScyyKpe9IcQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR19MB0954 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA115A51 smtp.mailfrom=tlanger@maxlinear.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: maxlinear.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGVsbG8gUmVkZHksDQoNCnNvbWUgY29tbWVudHMgYmVsb3cuIEkgb25seSBjb21tZW50ZWQgcmVn YXJkaW5nIHNvbWUgc3RydWN0dXJhbCB0aGluZ3MsDQphcyBJIGFtIG5vdCBzbyBmYW1pbGlhciB3 aXRoIHRoZSBmdW5jdGlvbmFsIHNpZGUgb2YgRE1BLg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2Fn ZS0tLS0tDQo+IEZyb206IEFtaXJlZGR5IE1hbGxpa2FyanVuYSByZWRkeQ0KPiA8bWFsbGlrYXJq dW5heC5yZWRkeUBsaW51eC5pbnRlbC5jb20+DQo+IFNlbnQ6IERpZW5zdGFnLCAyNy4gT2t0b2Jl ciAyMDIwIDA5OjAzDQo+IFRvOiBkbWFlbmdpbmVAdmdlci5rZXJuZWwub3JnOyB2a291bEBrZXJu ZWwub3JnOw0KPiBkZXZpY2V0cmVlQHZnZXIua2VybmVsLm9yZzsgcm9iaCtkdEBrZXJuZWwub3Jn DQo+IENjOiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOyBTaGV2Y2hlbmtvLCBBbmRyaXkN Cj4gPGFuZHJpeS5zaGV2Y2hlbmtvQGludGVsLmNvbT47IGNodWFuaHVhLmxlaUBsaW51eC5pbnRl bC5jb207IEtpbSwNCj4gQ2hlb2wgWW9uZyA8Y2hlb2wueW9uZy5raW1AaW50ZWwuY29tPjsgV3Us IFFpbWluZyA8cWktDQo+IG1pbmcud3VAaW50ZWwuY29tPjsgbWFsbGlrYXJqdW5heC5yZWRkeUBs aW51eC5pbnRlbC5jb207DQo+IG1hbGxpYW1pcmVkZHkwMDlAZ21haWwuY29tOyBwZXRlci51amZh bHVzaUB0aS5jb20NCj4gU3ViamVjdDogW1BBVENIIHY3IDIvMl0gQWRkIEludGVsIExHTSBzb2Mg RE1BIHN1cHBvcnQuDQo+IA0KPiBBZGQgRE1BIGNvbnRyb2xsZXIgZHJpdmVyIGZvciBMaWdodG5p bmcgTW91bnRhaW4oTEdNKSBmYW1pbHkgb2YgU29Dcy4NCj4gDQo+IFRoZSBtYWluIGZ1bmN0aW9u IG9mIHRoZSBETUEgY29udHJvbGxlciBpcyB0aGUgdHJhbnNmZXIgb2YgZGF0YQ0KPiBmcm9tL3Rv IGFueQ0KPiBEUGx1cyBjb21wbGlhbnQgcGVyaXBoZXJhbCB0by9mcm9tIHRoZSBtZW1vcnkuIEEg bWVtb3J5IHRvIG1lbW9yeSBjb3B5DQo+IGNhcGFiaWxpdHkgY2FuIGFsc28gYmUgY29uZmlndXJl ZC4NCg0KV2hhdCBpcyAiRFBsdXMgY29tcGxpYW50Ij8gVGhpcyBuZWVkcyBzb21lIGV4cGxhbmF0 aW9uLg0KDQo+IA0KPiBUaGlzIGxkbWEgZHJpdmVyIGlzIHVzZWQgZm9yIGNvbmZpZ3VyZSB0aGUg ZGV2aWNlIGFuZCBjaGFubm5lbHMgZm9yDQo+IGRhdGENCj4gYW5kIGNvbnRyb2wgcGF0aHMuDQo+ IA0KPiBTaWduZWQtb2ZmLWJ5OiBBbWlyZWRkeSBNYWxsaWthcmp1bmEgcmVkZHkNCj4gPG1hbGxp a2FyanVuYXgucmVkZHlAbGludXguaW50ZWwuY29tPg0KPiAtLS0NCj4gdjE6DQo+IC0gSW5pdGlh bCB2ZXJzaW9uLg0KPiANCj4gdjI6DQo+IC0gRml4IGRldmljZSB0cmVlIGJvdCBpc3N1ZXMsIGNv cnJlc3BvbmRpZ24gZHJpdmVyIGNoYW5nZXMgZG9uZS4NCj4gLSBGaXgga2VybnRlbCB0ZXN0IHJv Ym90IHdhcm5pbmdzLg0KPiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQo+ICAgPj4gZHJpdmVycy9kbWEvbGdtL2xnbS1kbWEuYzo3Mjk6 NTogd2FybmluZzogbm8gcHJldmlvdXMgcHJvdG90eXBlDQo+IGZvciBmdW5jdGlvbiAnaW50ZWxf ZG1hX2NoYW5fZGVzY19jZmcnIFstV21pc3NpbmctcHJvdG90eXBlc10NCj4gICBpbnQgaW50ZWxf ZG1hX2NoYW5fZGVzY19jZmcoc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFfYWRkcl90DQo+IGRl c2NfYmFzZSwNCj4gICBeDQo+ICAgZHJpdmVycy9kbWEvbGdtL2xnbS1kbWEuYzo3Mjk6MTogbm90 ZTogZGVjbGFyZSAnc3RhdGljJyBpZiB0aGUNCj4gZnVuY3Rpb24gaXMgbm90IGludGVuZGVkIHRv IGJlIHVzZWQgb3V0c2lkZSBvZiB0aGlzIHRyYW5zbGF0aW9uIHVuaXQNCj4gICBpbnQgaW50ZWxf ZG1hX2NoYW5fZGVzY19jZmcoc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFfYWRkcl90DQo+IGRl c2NfYmFzZSwNCj4gICBeDQo+ICAgc3RhdGljDQo+ICAgMSB3YXJuaW5nIGdlbmVyYXRlZC4NCj4g DQo+ICAgdmltICsvaW50ZWxfZG1hX2NoYW5fZGVzY19jZmcgKzcyOSBkcml2ZXJzL2RtYS9sZ20v bGdtLWRtYS5jDQo+IA0KPiAgICAgNzI4DQo+ICAgPiA3MjkgaW50IGludGVsX2RtYV9jaGFuX2Rl c2NfY2ZnKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgZG1hX2FkZHJfdA0KPiBkZXNjX2Jhc2UsDQo+ ICAgICA3MzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXNjX251bSkNCj4gICAg IDczMSB7DQo+ICAgICA3MzIgICAgICAgICByZXR1cm4gbGRtYV9jaGFuX2Rlc2NfY2ZnKHRvX2xk bWFfY2hhbihjaGFuKSwNCj4gZGVzY19iYXNlLCBkZXNjX251bSk7DQo+ICAgICA3MzMgfQ0KPiAg ICAgNzM0IEVYUE9SVF9TWU1CT0xfR1BMKGludGVsX2RtYV9jaGFuX2Rlc2NfY2ZnKTsNCj4gICAg IDczNQ0KPiANCj4gICAgUmVwb3J0ZWQtYnk6IGtlcm5lbCB0ZXN0IHJvYm90IDxsa3BAaW50ZWwu Y29tPg0KPiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCj4gDQo+IHYzOg0KPiAtIEZpeCBzbWF0Y2ggd2FybmluZy4NCj4g ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQo+ICAgc21hdGNoIHdhcm5pbmdzOg0KPiAgIGRyaXZlcnMvZG1hL2xnbS9sZ20t ZG1hLmM6MTMwNiBsZG1hX2NmZ19pbml0KCkgZXJyb3I6IHVuaW5pdGlhbGl6ZWQNCj4gc3ltYm9s ICdyZXQnLg0KPiANCj4gICBSZXBvcnRlZC1ieToga2VybmVsIHRlc3Qgcm9ib3QgPGxrcEBpbnRl bC5jb20+DQo+ICAgUmVwb3J0ZWQtYnk6IERhbiBDYXJwZW50ZXIgPGRhbi5jYXJwZW50ZXJAb3Jh Y2xlLmNvbT4NCj4gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+IA0KPiB2NDoNCj4gLSBBZGRyZXNzIFRob21hcyBMYW5n ZXIgY29tbWVudHMgaW4gZHRiaW5kaW5nIGFuZCBjb3JyZXNwb25kaW5nIGRyaXZlcg0KPiBzaWRl IGNoYW5nZXMuDQo+IC0gRHJpdmVyIHNpZGUgY2hhbmdlcyB0byBjb3JyZXNwb25kaW5nIGRldmlj ZSB0cmVlIGNoYW5nZXMuDQo+IA0KPiB2NToNCj4gLSBBZGQgY2hhbmdlcyB0byByZWFkICdkbWFz JyBwcm9wZXJ0aWVzIGFuZCB1cGRhdGUgdGhlIGNvbmZpZw0KPiBwcm9wZXJ0aWVzIGRyaXZlciBz aWRlLg0KPiAtIEFkZCB2aXJ0X2RtYV9kZXNjIHV0aWxpemVzIHZpcnQtZG1hIEFQSS4NCj4gDQo+ IHY2Og0KPiAtIERyaXZlciBjaGFuZ2VzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRldmljZSB0cmVl IGNoYW5nZXMuDQo+IC0gUmVzdHJ1Y3R1cmUgdGhpbmdzIHRvIGhhdmUgbGVzcyBhY3Rpdml0eSB3 aXRoIHRoZSBzcGlubG9jay4NCj4gLSBTYXZlIHRoZSBzbGF2ZSBjb25maWcgaW4gZG1hX3NsYXZl X2NvbmZpZygpIGFuZCB1c2VkIGluIHByZXBhcmUNCj4gdGltZS4NCj4gLSBBZGRyZXNzZWQgJiBm aXhlZCBpc3N1ZXMgcmVsYXRlZCB0byBkZXNjX2ZyZWUgY2FsbGJhY2sgX2ZyZWVfIHVwIHRoZQ0K PiBtZW1vcnkuDQo+IC0gQWRkcmVzc2VkIHBldGVyIHJldmlldyBjb21tZW50cy4NCj4gDQo+IHY3 Og0KPiAtIENoYW5nZSBib29sIHRvIHRyaXN0YXRlIGluIEtjb25maWcNCg0KSSBzZWUgdGhpcyAi dHJpc3RhdGUiIChjb21waWxlIGFzIG1vZHVsZSkgYW5kIHRoZSBleHBsYW5hdGlvbg0KZm9yIHRo ZSBfaW5pdGNhbGwgY29uZnVzaW5nLiBFaXRoZXIgdGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIFNv Qw0KdGhhdCBtdXN0IGJlIGF2YWlsYWJsZSBlYXJseSBvciBpdCBjYW4gYmUgdXNlZCBhcyBtb2R1 bGUgKHdoaWNoDQppcyB0eXBpY2FsbHkgbG9hZGVkIGxhdGUpLiBZb3UgY2Fubm90IGZ1bGZpbGwg Ym90aCB0aGluZ3MuDQoNCj4gLSBFeHBsYWluZWQgdGhlIF9pbml0Y2FsbCgpDQo+IC0gY2hhbmdl IG9mX3Byb3BlcnR5KigpIHRvIGRldmljZV9wcm9wZXJ0eV8qKCkNCj4gLSBzcGxpdCB0aGUgY29k ZSB0byBmdW5jdGlvbnMgYXQgdmVyc2lvbiBjaGVja3MNCj4gLSBSZW1vdmUgdGhlIGRtYSBjYWxs ZXIgY2FwYWJpbGl0eSByZXN0cmljdGlvbnMNCj4gLSB1c2VkIGZvcl9lYWNoX3NldF9iaXQoKQ0K PiAtIEFkZHJlc3NlZCBtaW5vciBjb21tZW50cyBhbmQgZmluZSB0dW5lIHRoZSBjb2RlLg0KPiAt LS0NCj4gIGRyaXZlcnMvZG1hL0tjb25maWcgICAgICAgICB8ICAgIDIgKw0KPiAgZHJpdmVycy9k bWEvTWFrZWZpbGUgICAgICAgIHwgICAgMSArDQo+ICBkcml2ZXJzL2RtYS9sZ20vS2NvbmZpZyAg ICAgfCAgICA5ICsNCj4gIGRyaXZlcnMvZG1hL2xnbS9NYWtlZmlsZSAgICB8ICAgIDIgKw0KPiAg ZHJpdmVycy9kbWEvbGdtL2xnbS1kbWEuYyAgIHwgMTc2NQ0KPiArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrDQo+ICBpbmNsdWRlL2xpbnV4L2RtYS9sZ21fZG1hLmgg fCAgIDI3ICsNCj4gIDYgZmlsZXMgY2hhbmdlZCwgMTgwNiBpbnNlcnRpb25zKCspDQo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEvbGdtL0tjb25maWcNCj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2RtYS9sZ20vTWFrZWZpbGUNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2RtYS9sZ20vbGdtLWRtYS5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51 eC9kbWEvbGdtX2RtYS5oDQo+IA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvS2NvbmZpZyBi L2RyaXZlcnMvZG1hL0tjb25maWcNCj4gaW5kZXggZGU0MWQ3OTI4YmZmLi5jYWVhZjEyZmQ1MjQg MTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZG1hL0tjb25maWcNCj4gKysrIGIvZHJpdmVycy9kbWEv S2NvbmZpZw0KPiBAQCAtNzM3LDYgKzczNyw4IEBAIHNvdXJjZSAiZHJpdmVycy9kbWEvdGkvS2Nv bmZpZyINCj4gDQo+ICBzb3VyY2UgImRyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL0tjb25maWci DQo+IA0KPiArc291cmNlICJkcml2ZXJzL2RtYS9sZ20vS2NvbmZpZyINCj4gKw0KPiAgIyBjbGll bnRzDQo+ICBjb21tZW50ICJETUEgQ2xpZW50cyINCj4gIAlkZXBlbmRzIG9uIERNQV9FTkdJTkUN Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL01ha2VmaWxlIGIvZHJpdmVycy9kbWEvTWFrZWZp bGUNCj4gaW5kZXggZTYwZjgxMzMxZDRjLi4wYjg5OWIwNzZmNGUgMTAwNjQ0DQo+IC0tLSBhL2Ry aXZlcnMvZG1hL01ha2VmaWxlDQo+ICsrKyBiL2RyaXZlcnMvZG1hL01ha2VmaWxlDQo+IEBAIC04 Myw2ICs4Myw3IEBAIG9iai0kKENPTkZJR19YR0VORV9ETUEpICs9IHhnZW5lLWRtYS5vDQo+ICBv YmotJChDT05GSUdfWlhfRE1BKSArPSB6eF9kbWEubw0KPiAgb2JqLSQoQ09ORklHX1NUX0ZETUEp ICs9IHN0X2ZkbWEubw0KPiAgb2JqLSQoQ09ORklHX0ZTTF9EUEFBMl9RRE1BKSArPSBmc2wtZHBh YTItcWRtYS8NCj4gK29iai0kKENPTkZJR19JTlRFTF9MRE1BKSArPSBsZ20vDQo+IA0KPiAgb2Jq LXkgKz0gbWVkaWF0ZWsvDQo+ICBvYmoteSArPSBxY29tLw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9kbWEvbGdtL0tjb25maWcgYi9kcml2ZXJzL2RtYS9sZ20vS2NvbmZpZw0KPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLmJkYjViMGQ5MWFmYg0KPiAtLS0gL2Rl di9udWxsDQo+ICsrKyBiL2RyaXZlcnMvZG1hL2xnbS9LY29uZmlnDQo+IEBAIC0wLDAgKzEsOSBA QA0KPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5DQo+ICtjb25maWcg SU5URUxfTERNQQ0KPiArCWJvb2wgIkxpZ2h0bmluZyBNb3VudGFpbiBjZW50cmFsaXplZCBsb3cg c3BlZWQgRE1BIGFuZCBoaWdoIHNwZWVkDQo+IERNQSBjb250cm9sbGVycyINCj4gKwlzZWxlY3Qg RE1BX0VOR0lORQ0KPiArCXNlbGVjdCBETUFfVklSVFVBTF9DSEFOTkVMUw0KPiArCWhlbHANCj4g KwkgIEVuYWJsZSBzdXBwb3J0IGZvciBpbnRlbCBMaWdodG5pbmcgTW91bnRhaW4gU09DIERNQQ0K PiBjb250cm9sbGVycy4NCj4gKwkgIFRoZXNlIGNvbnRyb2xsZXJzIHByb3ZpZGUgRE1BIGNhcGFi aWxpdGllcyBmb3IgYSB2YXJpZXR5IG9mIG9uLQ0KPiBjaGlwDQo+ICsJICBkZXZpY2VzIHN1Y2gg YXMgU1NDLCBIU05BTkQgYW5kIEdTV0lQLg0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvbGdt L01ha2VmaWxlIGIvZHJpdmVycy9kbWEvbGdtL01ha2VmaWxlDQo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZjMxOGE4ZWZmNDY0DQo+IC0tLSAvZGV2L251bGwN Cj4gKysrIGIvZHJpdmVycy9kbWEvbGdtL01ha2VmaWxlDQo+IEBAIC0wLDAgKzEsMiBAQA0KPiAr IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiArb2JqLSQoQ09ORklHX0lOVEVM X0xETUEpCSs9IGxnbS1kbWEubw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvbGdtL2xnbS1k bWEuYyBiL2RyaXZlcnMvZG1hL2xnbS9sZ20tZG1hLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5iZDliZDQ1MGE1MGENCj4gLS0tIC9kZXYvbnVsbA0KPiAr KysgYi9kcml2ZXJzL2RtYS9sZ20vbGdtLWRtYS5jDQo+IEBAIC0wLDAgKzEsMTc2NSBAQA0KPiAr Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gKy8qDQo+ICsgKiBMaWdodG5p bmcgTW91bnRhaW4gY2VudHJhbGl6ZWQgbG93IHNwZWVkIGFuZCBoaWdoIHNwZWVkIERNQQ0KPiBj b250cm9sbGVyIGRyaXZlcg0KPiArICoNCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNiB+IDIwMjAg SW50ZWwgQ29ycG9yYXRpb24uDQo+ICsgKi8NCj4gKw0KPiArI2luY2x1ZGUgPGxpbnV4L2JpdGZp ZWxkLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvZG1h LW1hcHBpbmcuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+DQo+ICsjaW5jbHVkZSA8 bGludXgvZG1hL2xnbV9kbWEuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4NCj4gKyNpbmNs dWRlIDxsaW51eC9leHBvcnQuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+DQo+ICsjaW5j bHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+DQo+ ICsjaW5jbHVkZSA8bGludXgvb2ZfZG1hLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+ DQo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ICsjaW5jbHVkZSA8bGlu dXgvcmVzZXQuaD4NCj4gKw0KPiArI2luY2x1ZGUgIi4uL2RtYWVuZ2luZS5oIg0KPiArI2luY2x1 ZGUgIi4uL3ZpcnQtZG1hLmgiDQo+ICsNCj4gKyNkZWZpbmUgRFJJVkVSX05BTUUJCQkibGdtLWxk bWEiDQoNCldoeSAibGRtYSI/IFNhbWUgYXBwbGllcyB0byBtb3N0IGZ1bmN0aW9ucyB3aXRoIHRo ZSBwcmVmaXggImxkbWFfIi4NCg0KPiArDQo+ICsjZGVmaW5lIERNQV9JRAkJCQkweDAwMDgNCj4g KyNkZWZpbmUgRE1BX0lEX1JFVgkJCUdFTk1BU0soNywgMCkNCj4gKyNkZWZpbmUgRE1BX0lEX1BO UgkJCUdFTk1BU0soMTksIDE2KQ0KPiArI2RlZmluZSBETUFfSURfQ0hOUgkJCUdFTk1BU0soMjYs IDIwKQ0KPiArI2RlZmluZSBETUFfSURfRFdfMTI4QgkJCUJJVCgyNykNCj4gKyNkZWZpbmUgRE1B X0lEX0FXXzM2QgkJCUJJVCgyOCkNCj4gKyNkZWZpbmUgRE1BX1ZFUjMyCQkJMHgzMg0KPiArI2Rl ZmluZSBETUFfVkVSMzEJCQkweDMxDQo+ICsjZGVmaW5lIERNQV9WRVIyMgkJCTB4MEENCj4gKw0K PiArI2RlZmluZSBETUFfQ1RSTAkJCTB4MDAxMA0KPiArI2RlZmluZSBETUFfQ1RSTF9SU1QJCQlC SVQoMCkNCj4gKyNkZWZpbmUgRE1BX0NUUkxfRFNSQU1fUEFUSAkJQklUKDEpDQo+ICsjZGVmaW5l IERNQV9DVFJMX0RCVVJTVF9XUgkJQklUKDMpDQo+ICsjZGVmaW5lIERNQV9DVFJMX1ZMRF9ERl9B Q0sJCUJJVCg0KQ0KPiArI2RlZmluZSBETUFfQ1RSTF9DSF9GTAkJCUJJVCg2KQ0KPiArI2RlZmlu ZSBETUFfQ1RSTF9EU19GT0QJCQlCSVQoNykNCj4gKyNkZWZpbmUgRE1BX0NUUkxfRFJCCQkJQklU KDgpDQo+ICsjZGVmaW5lIERNQV9DVFJMX0VOQkUJCQlCSVQoOSkNCj4gKyNkZWZpbmUgRE1BX0NU UkxfREVTQ19UTU9VVF9DTlRfVjMxCUdFTk1BU0soMjcsIDE2KQ0KPiArI2RlZmluZSBETUFfQ1RS TF9ERVNDX1RNT1VUX0VOX1YzMQlCSVQoMzApDQo+ICsjZGVmaW5lIERNQV9DVFJMX1BLVEFSQgkJ CUJJVCgzMSkNCj4gKw0KPiArI2RlZmluZSBETUFfQ1BPTEwJCQkweDAwMTQNCj4gKyNkZWZpbmUg RE1BX0NQT0xMX0NOVAkJCUdFTk1BU0soMTUsIDQpDQo+ICsjZGVmaW5lIERNQV9DUE9MTF9FTgkJ CUJJVCgzMSkNCj4gKw0KPiArI2RlZmluZSBETUFfQ1MJCQkJMHgwMDE4DQo+ICsjZGVmaW5lIERN QV9DU19NQVNLCQkJR0VOTUFTSyg1LCAwKQ0KPiArDQo+ICsjZGVmaW5lIERNQV9DQ1RSTAkJCTB4 MDAxQw0KPiArI2RlZmluZSBETUFfQ0NUUkxfT04JCQlCSVQoMCkNCj4gKyNkZWZpbmUgRE1BX0ND VFJMX1JTVAkJCUJJVCgxKQ0KPiArI2RlZmluZSBETUFfQ0NUUkxfQ0hfUE9MTF9FTgkJQklUKDIp DQo+ICsjZGVmaW5lIERNQV9DQ1RSTF9DSF9BQkMJCUJJVCgzKSAvKiBBZGFwdGl2ZSBCdXJzdCBD aG9wICovDQo+ICsjZGVmaW5lIERNQV9DREJBX01TQgkJCUdFTk1BU0soNywgNCkNCj4gKyNkZWZp bmUgRE1BX0NDVFJMX0RJUl9UWAkJQklUKDgpDQo+ICsjZGVmaW5lIERNQV9DQ1RSTF9DTEFTUwkJ CUdFTk1BU0soMTEsIDkpDQo+ICsjZGVmaW5lIERNQV9DQ1RSTF9DTEFTU0gJCUdFTk1BU0soMTks IDE4KQ0KPiArI2RlZmluZSBETUFfQ0NUUkxfV1JfTlBfRU4JCUJJVCgyMSkNCj4gKyNkZWZpbmUg RE1BX0NDVFJMX1BERU4JCQlCSVQoMjMpDQo+ICsjZGVmaW5lIERNQV9NQVhfQ0xBU1MJCQkoU1pf MzIgLSAxKQ0KPiArDQo+ICsjZGVmaW5lIERNQV9DREJBCQkJMHgwMDIwDQo+ICsjZGVmaW5lIERN QV9DRExFTgkJCTB4MDAyNA0KPiArI2RlZmluZSBETUFfQ0lTCQkJCTB4MDAyOA0KPiArI2RlZmlu ZSBETUFfQ0lFCQkJCTB4MDAyQw0KPiArI2RlZmluZSBETUFfQ0lfRU9QCQkJQklUKDEpDQo+ICsj ZGVmaW5lIERNQV9DSV9EVVIJCQlCSVQoMikNCj4gKyNkZWZpbmUgRE1BX0NJX0RFU0NQVAkJCUJJ VCgzKQ0KPiArI2RlZmluZSBETUFfQ0lfQ0hPRkYJCQlCSVQoNCkNCj4gKyNkZWZpbmUgRE1BX0NJ X1JERVJSCQkJQklUKDUpDQo+ICsjZGVmaW5lIERNQV9DSV9BTEwJCQkJCQkJXA0KPiArCShETUFf Q0lfRU9QIHwgRE1BX0NJX0RVUiB8IERNQV9DSV9ERVNDUFQgfCBETUFfQ0lfQ0hPRkYgfA0KPiBE TUFfQ0lfUkRFUlIpDQo+ICsNCj4gKyNkZWZpbmUgRE1BX1BTCQkJCTB4MDA0MA0KPiArI2RlZmlu ZSBETUFfUENUUkwJCQkweDAwNDQNCj4gKyNkZWZpbmUgRE1BX1BDVFJMX1JYQkwxNgkJQklUKDAp DQo+ICsjZGVmaW5lIERNQV9QQ1RSTF9UWEJMMTYJCUJJVCgxKQ0KPiArI2RlZmluZSBETUFfUENU UkxfUlhCTAkJCUdFTk1BU0soMywgMikNCj4gKyNkZWZpbmUgRE1BX1BDVFJMX1JYQkxfOAkJMw0K PiArI2RlZmluZSBETUFfUENUUkxfVFhCTAkJCUdFTk1BU0soNSwgNCkNCj4gKyNkZWZpbmUgRE1B X1BDVFJMX1RYQkxfOAkJMw0KPiArI2RlZmluZSBETUFfUENUUkxfUERFTgkJCUJJVCg2KQ0KPiAr I2RlZmluZSBETUFfUENUUkxfUlhCTDMyCQlCSVQoNykNCj4gKyNkZWZpbmUgRE1BX1BDVFJMX1JY RU5ESQkJR0VOTUFTSyg5LCA4KQ0KPiArI2RlZmluZSBETUFfUENUUkxfVFhFTkRJCQlHRU5NQVNL KDExLCAxMCkNCj4gKyNkZWZpbmUgRE1BX1BDVFJMX1RYQkwzMgkJQklUKDE1KQ0KPiArI2RlZmlu ZSBETUFfUENUUkxfTUVNX0ZMVVNICQlCSVQoMTYpDQo+ICsNCj4gKyNkZWZpbmUgRE1BX0lSTkVO MQkJCTB4MDBFOA0KPiArI2RlZmluZSBETUFfSVJOQ1IxCQkJMHgwMEVDDQo+ICsjZGVmaW5lIERN QV9JUk5FTgkJCTB4MDBGNA0KPiArI2RlZmluZSBETUFfSVJOQ1IJCQkweDAwRjgNCj4gKyNkZWZp bmUgRE1BX0NfRFBfVElDSwkJCTB4MTAwDQo+ICsjZGVmaW5lIERNQV9DX0RQX1RJQ0tfVElLTkFS QgkJR0VOTUFTSygxNSwgMCkNCj4gKyNkZWZpbmUgRE1BX0NfRFBfVElDS19USUtBUkIJCUdFTk1B U0soMzEsIDE2KQ0KPiArDQo+ICsjZGVmaW5lIERNQV9DX0hEUk0JCQkweDExMA0KPiArLyoNCj4g KyAqIElmIGhlYWRlciBtb2RlIGlzIHNldCBpbiBETUEgZGVzY3JpcHRvciwNCj4gKyAqICAgSWYg Yml0IDMwIGlzIGRpc2FibGVkLCBIRFJfTEVOIG11c3QgYmUgY29uZmlndXJlZCBhY2NvcmRpbmcg dG8NCj4gY2hhbm5lbA0KPiArICogICAgIHJlcXVpcmVtZW50Lg0KPiArICogICBJZiBiaXQgMzAg aXMgZW5hYmxlZChjaGVja3N1bSB3aXRoIGhlYWRlIG1vZGUpLCBIRFJfTEVOIGhhcyBubw0KPiBu ZWVkIHRvDQo+ICsgKiAgICAgYmUgY29uZmlndXJlZC4gSXQgd2lsbCBlbmFibGUgY2hlY2sgc3Vt IGZvciBzd2l0Y2gNCj4gKyAqIElmIGhlYWRlciBtb2RlIGlzIG5vdCBzZXQgaW4gRE1BIGRlc2Ny aXB0b3IsDQo+ICsgKiAgIFRoaXMgcmVnaXN0ZXIgc2V0dGluZyBkb2Vzbid0IG1hdHRlcg0KPiAr ICovDQo+ICsjZGVmaW5lIERNQV9DX0hEUk1fSERSX1NVTQkJQklUKDMwKQ0KPiArDQo+ICsjZGVm aW5lIERNQV9DX0JPRkYJCQkweDEyMA0KPiArI2RlZmluZSBETUFfQ19CT0ZGX0JPRl9MRU4JCUdF Tk1BU0soNywgMCkNCj4gKyNkZWZpbmUgRE1BX0NfQk9GRl9FTgkJCUJJVCgzMSkNCj4gKw0KPiAr I2RlZmluZSBETUFfT1JSQwkJCTB4MTkwDQo+ICsjZGVmaW5lIERNQV9PUlJDX09SUkNOVAkJCUdF Tk1BU0soOCwgNCkNCj4gKyNkZWZpbmUgRE1BX09SUkNfRU4JCQlCSVQoMzEpDQo+ICsNCj4gKyNk ZWZpbmUgRE1BX0NfRU5ESUFOCQkJMHgyMDANCj4gKyNkZWZpbmUgRE1BX0NfRU5EX0RBVEFFTkRJ CQlHRU5NQVNLKDEsIDApDQo+ICsjZGVmaW5lIERNQV9DX0VORF9ERV9FTgkJCUJJVCg3KQ0KPiAr I2RlZmluZSBETUFfQ19FTkRfREVTRU5ESQkJR0VOTUFTSyg5LCA4KQ0KPiArI2RlZmluZSBETUFf Q19FTkRfREVTX0VOCQlCSVQoMTYpDQo+ICsNCj4gKy8qIERNQSBjb250cm9sbGVyIGNhcGFiaWxp dHkgKi8NCj4gKyNkZWZpbmUgRE1BX0FERFJfMzZCSVQJCQlCSVQoMCkNCj4gKyNkZWZpbmUgRE1B X0RBVEFfMTI4QklUCQkJQklUKDEpDQo+ICsjZGVmaW5lIERNQV9DSEFOX0ZMT1dfQ1RMCQlCSVQo MikNCj4gKyNkZWZpbmUgRE1BX0RFU0NfRlRPRAkJCUJJVCgzKQ0KPiArI2RlZmluZSBETUFfREVT Q19JTl9TUkFNCQlCSVQoNCkNCj4gKyNkZWZpbmUgRE1BX0VOX0JZVEVfRU4JCQlCSVQoNSkNCj4g KyNkZWZpbmUgRE1BX0RCVVJTVF9XUgkJCUJJVCg2KQ0KPiArI2RlZmluZSBETUFfVkxEX0ZFVENI X0FDSwkJQklUKDcpDQo+ICsjZGVmaW5lIERNQV9ERlRfRFJCCQkJQklUKDgpDQo+ICsNCj4gKyNk ZWZpbmUgRE1BX09SUkNfTUFYX0NOVAkJKFNaXzMyIC0gMSkNCj4gKyNkZWZpbmUgRE1BX0RGVF9Q T0xMX0NOVAkJU1pfNA0KPiArDQo+ICsjZGVmaW5lIERNQV9ERlRfQlVSU1RfVjIyCQkyDQo+ICsj ZGVmaW5lIERNQV9CVVJTVExfOERXCQkJOA0KPiArI2RlZmluZSBETUFfQlVSU1RMXzE2RFcJCQkx Ng0KPiArI2RlZmluZSBETUFfQlVSU1RMXzMyRFcJCQkzMg0KPiArI2RlZmluZSBETUFfREZUX0JV UlNUCQkJRE1BX0JVUlNUTF8xNkRXDQo+ICsNCj4gKyNkZWZpbmUgRE1BX01BWF9ERVNDX05VTQkJ KFNaXzhLIC0gMSkNCj4gKyNkZWZpbmUgRE1BX0NIQU5fQk9GRl9NQVgJCShTWl8yNTYgLSAxKQ0K PiArDQo+ICsjZGVmaW5lIERNQV9ERlRfRU5ESUFOCQkJRE1BX0VORElBTl9UWVBFMA0KPiArDQo+ ICsjZGVmaW5lIERNQV9ERlRfREVTQ19UQ05UCQk1MA0KPiArI2RlZmluZSBETUFfSERSX0xFTl9N QVgJCQkoU1pfMTZLIC0gMSkNCj4gKw0KPiArLyogRE1BIGZsYWdzICovDQo+ICsjZGVmaW5lIERN QV9UWF9DSAkJCUJJVCgwKQ0KPiArI2RlZmluZSBETUFfUlhfQ0gJCQlCSVQoMSkNCj4gKyNkZWZp bmUgREVWSUNFX0FMTE9DX0RFU0MJCUJJVCgyKQ0KPiArI2RlZmluZSBDSEFOX0lOX1VTRQkJCUJJ VCgzKQ0KPiArI2RlZmluZSBETUFfSFdfREVTQwkJCUJJVCg0KQ0KPiArDQo+ICsjZGVmaW5lIERN QV9DSEFOX1JTVAkJCTENCj4gKyNkZWZpbmUgRE1BX01BWF9TSVpFCQkJKEJJVCgxNikgLSAxKQ0K PiArI2RlZmluZSBNQVhfTE9XRVJfQ0hBTlMJCQkzMg0KPiArI2RlZmluZSBNQVNLX0xPV0VSX0NI QU5TCQlHRU5NQVNLKDQsIDApDQo+ICsjZGVmaW5lIERNQV9PV04JCQkJMQ0KPiArI2RlZmluZSBI SUdIXzRfQklUUwkJCUdFTk1BU0soMywgMCkNCj4gKyNkZWZpbmUgRE1BX0RGVF9ERVNDX05VTQkJ MQ0KPiArDQo+ICtlbnVtIGxkbWFfY2hhbl9vbl9vZmYgew0KPiArCURNQV9DSF9PRkYgPSAwLA0K PiArCURNQV9DSF9PTiA9IDEsDQo+ICt9Ow0KPiArDQo+ICtlbnVtIGxkbWFfcGt0X2Ryb3Agew0K PiArCURNQV9QS1RfRFJPUF9ESVMgPSAwLA0KPiArCURNQV9QS1RfRFJPUF9FTiwNCj4gK307DQoN CldoYXQgaXMgdGhlIHVzZSBvZiB0aGlzIGVudW0gaWYgb25seSAiRE1BX1BLVF9EUk9QX0RJUyIg aXMgdXNlZCBpbiB0aGUgY29kZT8NCg0KPiArDQo+ICtlbnVtIGxkbWFfZW5kaWFuIHsNCj4gKwlE TUFfRU5ESUFOX1RZUEUwID0gMCwNCj4gKwlETUFfRU5ESUFOX1RZUEUxLA0KPiArCURNQV9FTkRJ QU5fVFlQRTIsDQo+ICsJRE1BX0VORElBTl9UWVBFMywNCj4gK307DQoNCkFuZCBmcm9tIHRoaXMg ZW51bSBvbmx5ICJETUFfRU5ESUFOX1RZUEUwIiBpcyB1c2VkIChpbmRpcmVjdGx5IHZpYSBhIGRl ZmluZSkNCg0KPiArDQo+ICtlbnVtIHsNCj4gKwlETUFfVFlQRV9UWCA9IDAsDQo+ICsJRE1BX1RZ UEVfUlgsDQo+ICsJRE1BX1RZUEVfTUNQWSwNCj4gK307DQo+ICsNCj4gK2VudW0gbGRtYV9wb3J0 X25hbWUgew0KPiArCVBPUlQwX1NQSTAgPSAwLA0KPiArCVBPUlQxX1NQSTEsDQo+ICsJUE9SVDJf U1BJMiwNCj4gKwlQT1JUM19TUEkzLA0KPiArCVBPUlQ0X0hTTkFORCwNCj4gKwlQT1JUNV9QQ00s DQo+ICt9Ow0KDQpBbmQgdGhpcyBlbnVtIGlzIG5vdCB1c2VkIGF0IGFsbCENCg0KPiArDQo+ICtz dHJ1Y3QgbGRtYV9kZXY7DQo+ICtzdHJ1Y3QgbGRtYV9wb3J0Ow0KPiArDQo+ICtzdHJ1Y3QgbGRt YV9jaGFuIHsNCj4gKwlzdHJ1Y3QgdmlydF9kbWFfY2hhbgl2Y2hhbjsNCj4gKwlzdHJ1Y3QgbGRt YV9wb3J0CSpwb3J0OyAvKiBiYWNrIHBvaW50ZXIgKi8NCj4gKwljaGFyCQkJbmFtZVs4XTsgLyog Q2hhbm5lbCBuYW1lICovDQo+ICsJaW50CQkJbnI7IC8qIENoYW5uZWwgaWQgaW4gaGFyZHdhcmUg Ki8NCj4gKwl1MzIJCQlmbGFnczsgLyogY2VudHJhbCB3YXkgb3IgY2hhbm5lbCBiYXNlZCB3YXkg Ki8NCj4gKwllbnVtIGxkbWFfY2hhbl9vbl9vZmYJb25vZmY7DQo+ICsJZG1hX2FkZHJfdAkJZGVz Y19waHlzOw0KPiArCXZvaWQJCQkqZGVzY19iYXNlOyAvKiBWaXJ0dWFsIGFkZHJlc3MgKi8NCj4g Kwl1MzIJCQlkZXNjX2NudDsgLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzICovDQo+ICsJaW50CQkJ cnN0Ow0KPiArCXUzMgkJCWhkcm1fbGVuOw0KPiArCWJvb2wJCQloZHJtX2NzdW07DQo+ICsJdTMy CQkJYm9mZl9sZW47DQo+ICsJdTMyCQkJZGF0YV9lbmRpYW47DQo+ICsJdTMyCQkJZGVzY19lbmRp YW47DQo+ICsJYm9vbAkJCXBkZW47DQo+ICsJYm9vbAkJCWRlc2NfcnhfbnA7DQo+ICsJYm9vbAkJ CWRhdGFfZW5kaWFuX2VuOw0KPiArCWJvb2wJCQlkZXNjX2VuZGlhbl9lbjsNCj4gKwlib29sCQkJ YWJjX2VuOw0KPiArCWJvb2wJCQlkZXNjX2luaXQ7DQo+ICsJc3RydWN0IGRtYV9wb29sCQkqZGVz Y19wb29sOyAvKiBEZXNjcmlwdG9ycyBwb29sICovDQo+ICsJdTMyCQkJZGVzY19udW07DQo+ICsJ c3RydWN0IGR3Ml9kZXNjX3N3CSpkczsNCj4gKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsNCj4g KwlzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyBjb25maWc7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3Qg bGRtYV9wb3J0IHsNCj4gKwlzdHJ1Y3QgbGRtYV9kZXYJCSpsZGV2OyAvKiBiYWNrIHBvaW50ZXIg Ki8NCj4gKwl1MzIJCQlwb3J0aWQ7DQo+ICsJdTMyCQkJcnhibDsNCj4gKwl1MzIJCQl0eGJsOw0K PiArCWVudW0gbGRtYV9lbmRpYW4JcnhlbmRpOw0KPiArCWVudW0gbGRtYV9lbmRpYW4JdHhlbmRp Ow0KPiArCWVudW0gbGRtYV9wa3RfZHJvcAlwa3RfZHJvcDsNCj4gK307DQo+ICsNCj4gKy8qIElu c3RhbmNlIHNwZWNpZmljIGRhdGEgKi8NCj4gK3N0cnVjdCBsZG1hX2luc3RfZGF0YSB7DQo+ICsJ c3RydWN0IGRtYV9kZXZfb3BzCSpvcHM7DQo+ICsJY29uc3QgY2hhcgkqbmFtZTsNCj4gKwl1MzIg dHlwZTsNCg0KV2h5IGFyZSB0aGUgZWxlbWVudCBuYW1lcyBub3QgYWxpZ25lZCwgYXMgaW4gb3Ro ZXIgc3RydWN0cz8NCg0KPiArfTsNCj4gKw0KPiArc3RydWN0IGxkbWFfZGV2IHsNCj4gKwlzdHJ1 Y3QgZGV2aWNlCQkqZGV2Ow0KPiArCXZvaWQgX19pb21lbQkJKmJhc2U7DQo+ICsJc3RydWN0IHJl c2V0X2NvbnRyb2wJKnJzdDsNCj4gKwlzdHJ1Y3QgY2xrCQkqY29yZV9jbGs7DQo+ICsJc3RydWN0 IGRtYV9kZXZpY2UJZG1hX2RldjsNCj4gKwl1MzIJCQl2ZXI7DQo+ICsJaW50CQkJaXJxOw0KPiAr CXN0cnVjdCBsZG1hX3BvcnQJKnBvcnRzOw0KPiArCXN0cnVjdCBsZG1hX2NoYW4JKmNoYW5zOyAv KiBjaGFubmVsIGxpc3Qgb24gdGhpcyBETUEgb3IgcG9ydCAqLw0KPiArCXNwaW5sb2NrX3QJCWRl dl9sb2NrOyAvKiBDb250cm9sbGVyIHJlZ2lzdGVyIGV4ZWNsdXNpdmUgKi8NCg0KdHlwbzogZXhj bHVzaXZlDQoNCj4gKwl1MzIJCQljaGFuX25yczsNCj4gKwl1MzIJCQlwb3J0X25yczsNCj4gKwl1 MzIgICAgICAgICAgICAgICAgICAgICBjaGFubmVsc19tYXNrOw0KDQpXaHkgZG8geW91IHVzZSBz cGFjZSBpbiB0aGlzIGxpbmU/DQoNCj4gKwl1MzIJCQlmbGFnczsNCj4gKwl1MzIJCQlwb2xsY250 Ow0KPiArCXUzMgkJCW9ycmM7IC8qIE91dHN0YW5kaW5nIHJlYWQgY291bnQgKi8NCj4gKwljb25z dCBzdHJ1Y3QgbGRtYV9pbnN0X2RhdGEgKmluc3Q7DQo+ICsJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1 Y3QgKndxOw0KPiArfTsNCj4gKw0KPiArc3RydWN0IGR3Ml9kZXNjIHsNCj4gKwlzdHJ1Y3Qgew0K PiArCQl1MzIgbGVuCQk6MTY7DQo+ICsJCXUzMiByZXMwCTo3Ow0KPiArCQl1MzIgYm9mcwk6MjsN Cj4gKwkJdTMyIHJlczEJOjM7DQo+ICsJCXUzMiBlb3AJCToxOw0KPiArCQl1MzIgc29wCQk6MTsN Cj4gKwkJdTMyIGMJCToxOw0KPiArCQl1MzIgb3duCQk6MTsNCg0KVHlwaWNhbGx5LCBiaXRmaWVs ZHMgYXJlIHdyaXR0ZW4gd2l0aG91dCBzcGFjZXMuDQpBbmQgeW91IGFyZSByZWFsbHkgc3VyZSB0 aGF0IHRoaXMgZHJpdmVyIHdpbGwgbmV2ZXIgYmUgdXNlZCBmb3IgdGhlIG9sZGVyIFNvQ3MgKE1J UFMgYmFzZWQpPw0KQmVjYXVzZSBiaXRmaWVsZHMgYXJlIGRpZmZpY3VsdCB0byBoYW5kbGUgd2hl biBpdCBjb21lcyB0byBzdXBwb3J0IGJvdGggZW5kaWFuZXNzIHZhcmlhbnRzLg0KDQo+ICsJfSBf X3BhY2tlZCBmaWVsZDsNCj4gKwl1MzIgYWRkcjsNCj4gK30gX19wYWNrZWQgX19hbGlnbmVkKDgp Ow0KPiArDQo+ICtzdHJ1Y3QgZHcyX2Rlc2Nfc3cgew0KPiArCXN0cnVjdCB2aXJ0X2RtYV9kZXNj CXZkZXNjOw0KPiArCXN0cnVjdCBsZG1hX2NoYW4JKmNoYW47DQo+ICsJZG1hX2FkZHJfdAkJZGVz Y19waHlzOw0KPiArCXNpemVfdAkJCWRlc2NfY250Ow0KPiArCXNpemVfdAkJCXNpemU7DQo+ICsJ c3RydWN0IGR3Ml9kZXNjCQkqZGVzY19odzsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBkbWFfZGV2 X29wcyB7DQo+ICsJaW50ICgqZGV2aWNlX2FsbG9jX2NoYW5fcmVzb3VyY2VzKShzdHJ1Y3QgZG1h X2NoYW4gKmNoYW4pOw0KPiArCXZvaWQgKCpkZXZpY2VfZnJlZV9jaGFuX3Jlc291cmNlcykoc3Ry dWN0IGRtYV9jaGFuICpjaGFuKTsNCj4gKwlpbnQgKCpkZXZpY2VfY29uZmlnKShzdHJ1Y3QgZG1h X2NoYW4gKmNoYW4sDQo+ICsJCQkgICAgIHN0cnVjdCBkbWFfc2xhdmVfY29uZmlnICpjb25maWcp Ow0KPiArCWludCAoKmRldmljZV9wYXVzZSkoc3RydWN0IGRtYV9jaGFuICpjaGFuKTsNCj4gKwlp bnQgKCpkZXZpY2VfcmVzdW1lKShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pOw0KPiArCWludCAoKmRl dmljZV90ZXJtaW5hdGVfYWxsKShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pOw0KPiArCXZvaWQgKCpk ZXZpY2Vfc3luY2hyb25pemUpKHN0cnVjdCBkbWFfY2hhbiAqY2hhbik7DQo+ICsJZW51bSBkbWFf c3RhdHVzICgqZGV2aWNlX3R4X3N0YXR1cykoc3RydWN0IGRtYV9jaGFuICpjaGFuLA0KPiArCQkJ CQkgICAgZG1hX2Nvb2tpZV90IGNvb2tpZSwNCj4gKwkJCQkJICAgIHN0cnVjdCBkbWFfdHhfc3Rh dGUgKnR4c3RhdGUpOw0KPiArCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqKCpkZXZp Y2VfcHJlcF9zbGF2ZV9zZykNCj4gKwkJKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgc3RydWN0IHNj YXR0ZXJsaXN0ICpzZ2wsDQo+ICsJCXVuc2lnbmVkIGludCBzZ19sZW4sIGVudW0gZG1hX3RyYW5z ZmVyX2RpcmVjdGlvbiBkaXJlY3Rpb24sDQo+ICsJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZvaWQg KmNvbnRleHQpOw0KPiArCXZvaWQgKCpkZXZpY2VfaXNzdWVfcGVuZGluZykoc3RydWN0IGRtYV9j aGFuICpjaGFuKTsNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZA0KPiArbGRtYV91 cGRhdGVfYml0cyhzdHJ1Y3QgbGRtYV9kZXYgKmQsIHUzMiBtYXNrLCB1MzIgdmFsLCB1MzIgb2Zz KQ0KPiArew0KPiArCXUzMiBvbGRfdmFsLCBuZXdfdmFsOw0KPiArDQo+ICsJb2xkX3ZhbCA9IHJl YWRsKGQtPmJhc2UgKyAgb2ZzKTsNCj4gKwluZXdfdmFsID0gKG9sZF92YWwgJiB+bWFzaykgfCAo dmFsICYgbWFzayk7DQo+ICsNCj4gKwlpZiAobmV3X3ZhbCAhPSBvbGRfdmFsKQ0KPiArCQl3cml0 ZWwobmV3X3ZhbCwgZC0+YmFzZSArIG9mcyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUg c3RydWN0IGxkbWFfY2hhbiAqdG9fbGRtYV9jaGFuKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikNCj4g K3sNCj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGNoYW4sIHN0cnVjdCBsZG1hX2NoYW4sIHZjaGFu LmNoYW4pOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBsZG1hX2RldiAqdG9f bGRtYV9kZXYoc3RydWN0IGRtYV9kZXZpY2UNCj4gKmRtYV9kZXYpDQo+ICt7DQo+ICsJcmV0dXJu IGNvbnRhaW5lcl9vZihkbWFfZGV2LCBzdHJ1Y3QgbGRtYV9kZXYsIGRtYV9kZXYpOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBkdzJfZGVzY19zdyAqdG9fbGdtX2RtYV9kZXNj KHN0cnVjdA0KPiB2aXJ0X2RtYV9kZXNjICp2ZGVzYykNCj4gK3sNCj4gKwlyZXR1cm4gY29udGFp bmVyX29mKHZkZXNjLCBzdHJ1Y3QgZHcyX2Rlc2Nfc3csIHZkZXNjKTsNCj4gK30NCj4gKw0KPiAr c3RhdGljIGlubGluZSBib29sIGxkbWFfY2hhbl90eChzdHJ1Y3QgbGRtYV9jaGFuICpjKQ0KPiAr ew0KPiArCXJldHVybiAhIShjLT5mbGFncyAmIERNQV9UWF9DSCk7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbmxpbmUgYm9vbCBsZG1hX2NoYW5faXNfaHdfZGVzYyhzdHJ1Y3QgbGRtYV9jaGFuICpj KQ0KPiArew0KPiArCXJldHVybiAhIShjLT5mbGFncyAmIERNQV9IV19ERVNDKTsNCj4gK30NCj4g Kw0KPiArc3RhdGljIHZvaWQgbGRtYV9kZXZfcmVzZXQoc3RydWN0IGxkbWFfZGV2ICpkKQ0KPiAr DQo+ICt7DQo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gKw0KPiArCXNwaW5fbG9ja19pcnFz YXZlKCZkLT5kZXZfbG9jaywgZmxhZ3MpOw0KPiArCWxkbWFfdXBkYXRlX2JpdHMoZCwgRE1BX0NU UkxfUlNULCBETUFfQ1RSTF9SU1QsIERNQV9DVFJMKTsNCj4gKwlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZkLT5kZXZfbG9jaywgZmxhZ3MpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBsZG1h X2Rldl9wa3RfYXJiX2NmZyhzdHJ1Y3QgbGRtYV9kZXYgKmQsIGJvb2wgZW5hYmxlKQ0KPiArew0K PiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ICsJdTMyIG1hc2sgPSBETUFfQ1RSTF9QS1RBUkI7 DQo+ICsJdTMyIHZhbCA9IGVuYWJsZSA/IERNQV9DVFJMX1BLVEFSQiA6IDA7DQo+ICsNCj4gKwlz cGluX2xvY2tfaXJxc2F2ZSgmZC0+ZGV2X2xvY2ssIGZsYWdzKTsNCj4gKwlsZG1hX3VwZGF0ZV9i aXRzKGQsIG1hc2ssIHZhbCwgRE1BX0NUUkwpOw0KPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmQtPmRldl9sb2NrLCBmbGFncyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGxkbWFfZGV2 X3NyYW1fZGVzY19jZmcoc3RydWN0IGxkbWFfZGV2ICpkLCBib29sIGVuYWJsZSkNCj4gK3sNCj4g Kwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiArCXUzMiBtYXNrID0gRE1BX0NUUkxfRFNSQU1fUEFU SDsNCj4gKwl1MzIgdmFsID0gZW5hYmxlID8gRE1BX0NUUkxfRFNSQU1fUEFUSCA6IDA7DQo+ICsN Cj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmZC0+ZGV2X2xvY2ssIGZsYWdzKTsNCj4gKwlsZG1hX3Vw ZGF0ZV9iaXRzKGQsIG1hc2ssIHZhbCwgRE1BX0NUUkwpOw0KPiArCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJmQtPmRldl9sb2NrLCBmbGFncyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGxk bWFfZGV2X2NoYW5fZmxvd19jdGxfY2ZnKHN0cnVjdCBsZG1hX2RldiAqZCwgYm9vbA0KPiBlbmFi bGUpDQo+ICt7DQo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gKwl1MzIgbWFzaywgdmFsOw0K PiArDQo+ICsJaWYgKGQtPmluc3QtPnR5cGUgIT0gRE1BX1RZUEVfVFgpDQo+ICsJCXJldHVybjsN Cj4gKw0KPiArCW1hc2sgPSBETUFfQ1RSTF9DSF9GTDsNCj4gKwl2YWwgPSBlbmFibGUgPyBETUFf Q1RSTF9DSF9GTCA6IDA7DQo+ICsNCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmZC0+ZGV2X2xvY2ss IGZsYWdzKTsNCj4gKwlsZG1hX3VwZGF0ZV9iaXRzKGQsIG1hc2ssIHZhbCwgRE1BX0NUUkwpOw0K PiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmQtPmRldl9sb2NrLCBmbGFncyk7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyB2b2lkIGxkbWFfZGV2X2dsb2JhbF9wb2xsaW5nX2VuYWJsZShzdHJ1Y3Qg bGRtYV9kZXYgKmQpDQo+ICt7DQo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gKwl1MzIgbWFz ayA9IERNQV9DUE9MTF9FTiB8IERNQV9DUE9MTF9DTlQ7DQo+ICsJdTMyIHZhbCA9IERNQV9DUE9M TF9FTjsNCj4gKw0KPiArCXZhbCB8PSBGSUVMRF9QUkVQKERNQV9DUE9MTF9DTlQsIGQtPnBvbGxj bnQpOw0KPiArDQo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmQtPmRldl9sb2NrLCBmbGFncyk7DQo+ ICsJbGRtYV91cGRhdGVfYml0cyhkLCBtYXNrLCB2YWwsIERNQV9DUE9MTCk7DQo+ICsJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmZC0+ZGV2X2xvY2ssIGZsYWdzKTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIHZvaWQgbGRtYV9kZXZfZGVzY19mZXRjaF9vbl9kZW1hbmRfY2ZnKHN0cnVjdCBsZG1hX2Rl diAqZCwNCj4gYm9vbCBlbmFibGUpDQo+ICt7DQo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsNCj4g Kwl1MzIgbWFzaywgdmFsOw0KPiArDQo+ICsJaWYgKGQtPmluc3QtPnR5cGUgPT0gRE1BX1RZUEVf TUNQWSkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJbWFzayA9IERNQV9DVFJMX0RTX0ZPRDsNCj4g Kwl2YWwgPSBlbmFibGUgPyBETUFfQ1RSTF9EU19GT0QgOiAwOw0KPiArDQo+ICsJc3Bpbl9sb2Nr X2lycXNhdmUoJmQtPmRldl9sb2NrLCBmbGFncyk7DQo+ICsJbGRtYV91cGRhdGVfYml0cyhkLCBt YXNrLCB2YWwsIERNQV9DVFJMKTsNCj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkLT5kZXZf bG9jaywgZmxhZ3MpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBsZG1hX2Rldl9ieXRlX2Vu YWJsZV9jZmcoc3RydWN0IGxkbWFfZGV2ICpkLCBib29sIGVuYWJsZSkNCj4gK3sNCj4gKwl1bnNp Z25lZCBsb25nIGZsYWdzOw0KPiArCXUzMiBtYXNrID0gRE1BX0NUUkxfRU5CRTsNCj4gKwl1MzIg dmFsID0gZW5hYmxlID8gRE1BX0NUUkxfRU5CRSA6IDA7DQo+ICsNCj4gKwlzcGluX2xvY2tfaXJx c2F2ZSgmZC0+ZGV2X2xvY2ssIGZsYWdzKTsNCj4gKwlsZG1hX3VwZGF0ZV9iaXRzKGQsIG1hc2ss IHZhbCwgRE1BX0NUUkwpOw0KPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmQtPmRldl9sb2Nr LCBmbGFncyk7DQo+ICt9DQo+ICsNCj4gKy8qDQo+ICsgKiBvcnJfY250ID49IDE2LCBpdCB3aWxs IGJlIDE2DQo+ICsgKiA0IDw9IG9ycl9jbnQgPCAxNiwgaXQgaWxsIGJlIG9ycl9jbnQNCj4gKyAq IG9ycl9jbnQgPCA0LCBpdCB3aWxsIGJlIDMuIE1pbmltdW0gMyBvcnIgc3VwcG9ydGVkDQo+ICsg Ki8NCj4gK3N0YXRpYyB2b2lkIGxkbWFfZGV2X29ycmNfY2ZnKHN0cnVjdCBsZG1hX2RldiAqZCkN Cj4gK3sNCj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiArCXUzMiB2YWwgPSAwOw0KPiArCXUz MiBtYXNrOw0KPiArDQo+ICsJaWYgKGQtPmluc3QtPnR5cGUgPT0gRE1BX1RZUEVfUlgpDQo+ICsJ CXJldHVybjsNCj4gKw0KPiArCW1hc2sgPSBETUFfT1JSQ19FTiB8IERNQV9PUlJDX09SUkNOVDsN Cj4gKwlpZiAoZC0+b3JyYyA+IDAgJiYgZC0+b3JyYyA8PSBETUFfT1JSQ19NQVhfQ05UKQ0KPiAr CQl2YWwgPSBETUFfT1JSQ19FTiB8IEZJRUxEX1BSRVAoRE1BX09SUkNfT1JSQ05ULCBkLT5vcnJj KTsNCj4gKw0KPiArCXNwaW5fbG9ja19pcnFzYXZlKCZkLT5kZXZfbG9jaywgZmxhZ3MpOw0KPiAr CWxkbWFfdXBkYXRlX2JpdHMoZCwgbWFzaywgdmFsLCBETUFfT1JSQyk7DQo+ICsJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmZC0+ZGV2X2xvY2ssIGZsYWdzKTsNCj4gK30NCj4gKw0KPiArc3RhdGlj IHZvaWQgbGRtYV9kZXZfZGZfdG91dF9jZmcoc3RydWN0IGxkbWFfZGV2ICpkLCBib29sIGVuYWJs ZSwgaW50DQo+IHRjbnQpDQo+ICt7DQo+ICsJdTMyIG1hc2sgPSBETUFfQ1RSTF9ERVNDX1RNT1VU X0NOVF9WMzE7DQo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gKwl1MzIgdmFsOw0KPiArDQo+ ICsJaWYgKGVuYWJsZSkNCj4gKwkJdmFsID0gRE1BX0NUUkxfREVTQ19UTU9VVF9FTl9WMzEgfA0K PiBGSUVMRF9QUkVQKERNQV9DVFJMX0RFU0NfVE1PVVRfQ05UX1YzMSwgdGNudCk7DQo+ICsJZWxz ZQ0KPiArCQl2YWwgPSAwOw0KPiArDQo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmQtPmRldl9sb2Nr LCBmbGFncyk7DQo+ICsJbGRtYV91cGRhdGVfYml0cyhkLCBtYXNrLCB2YWwsIERNQV9DVFJMKTsN Cj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkLT5kZXZfbG9jaywgZmxhZ3MpOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgdm9pZCBsZG1hX2Rldl9kYnVyc3Rfd3JfY2ZnKHN0cnVjdCBsZG1hX2Rl diAqZCwgYm9vbCBlbmFibGUpDQo+ICt7DQo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gKwl1 MzIgbWFzaywgdmFsOw0KPiArDQo+ICsJaWYgKGQtPmluc3QtPnR5cGUgIT0gRE1BX1RZUEVfUlgg JiYgZC0+aW5zdC0+dHlwZSAhPQ0KPiBETUFfVFlQRV9NQ1BZKQ0KPiArCQlyZXR1cm47DQo+ICsN Cj4gKwltYXNrID0gRE1BX0NUUkxfREJVUlNUX1dSOw0KPiArCXZhbCA9IGVuYWJsZSA/IERNQV9D VFJMX0RCVVJTVF9XUiA6IDA7DQo+ICsNCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmZC0+ZGV2X2xv Y2ssIGZsYWdzKTsNCj4gKwlsZG1hX3VwZGF0ZV9iaXRzKGQsIG1hc2ssIHZhbCwgRE1BX0NUUkwp Ow0KPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmQtPmRldl9sb2NrLCBmbGFncyk7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGxkbWFfZGV2X3ZsZF9mZXRjaF9hY2tfY2ZnKHN0cnVjdCBs ZG1hX2RldiAqZCwgYm9vbA0KPiBlbmFibGUpDQo+ICt7DQo+ICsJdW5zaWduZWQgbG9uZyBmbGFn czsNCj4gKwl1MzIgbWFzaywgdmFsOw0KPiArDQo+ICsJaWYgKGQtPmluc3QtPnR5cGUgIT0gRE1B X1RZUEVfVFgpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCW1hc2sgPSBETUFfQ1RSTF9WTERfREZf QUNLOw0KPiArCXZhbCA9IGVuYWJsZSA/IERNQV9DVFJMX1ZMRF9ERl9BQ0sgOiAwOw0KPiArDQo+ ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmQtPmRldl9sb2NrLCBmbGFncyk7DQo+ICsJbGRtYV91cGRh dGVfYml0cyhkLCBtYXNrLCB2YWwsIERNQV9DVFJMKTsNCj4gKwlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZkLT5kZXZfbG9jaywgZmxhZ3MpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBsZG1h X2Rldl9kcmJfY2ZnKHN0cnVjdCBsZG1hX2RldiAqZCwgaW50IGVuYWJsZSkNCj4gK3sNCj4gKwl1 bnNpZ25lZCBsb25nIGZsYWdzOw0KPiArCXUzMiBtYXNrID0gRE1BX0NUUkxfRFJCOw0KPiArCXUz MiB2YWwgPSBlbmFibGUgPyBETUFfQ1RSTF9EUkIgOiAwOw0KPiArDQo+ICsJc3Bpbl9sb2NrX2ly cXNhdmUoJmQtPmRldl9sb2NrLCBmbGFncyk7DQo+ICsJbGRtYV91cGRhdGVfYml0cyhkLCBtYXNr LCB2YWwsIERNQV9DVFJMKTsNCj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkLT5kZXZfbG9j aywgZmxhZ3MpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGxkbWFfZGV2X2NmZyhzdHJ1Y3Qg bGRtYV9kZXYgKmQpDQo+ICt7DQo+ICsJYm9vbCBlbmFibGU7DQo+ICsNCj4gKwlsZG1hX2Rldl9w a3RfYXJiX2NmZyhkLCB0cnVlKTsNCj4gKwlsZG1hX2Rldl9nbG9iYWxfcG9sbGluZ19lbmFibGUo ZCk7DQo+ICsNCj4gKwllbmFibGUgPSAhIShkLT5mbGFncyAmIERNQV9ERlRfRFJCKTsNCj4gKwls ZG1hX2Rldl9kcmJfY2ZnKGQsIGVuYWJsZSk7DQo+ICsNCj4gKwllbmFibGUgPSAhIShkLT5mbGFn cyAmIERNQV9FTl9CWVRFX0VOKTsNCj4gKwlsZG1hX2Rldl9ieXRlX2VuYWJsZV9jZmcoZCwgZW5h YmxlKTsNCj4gKw0KPiArCWVuYWJsZSA9ICEhKGQtPmZsYWdzICYgRE1BX0NIQU5fRkxPV19DVEwp Ow0KPiArCWxkbWFfZGV2X2NoYW5fZmxvd19jdGxfY2ZnKGQsIGVuYWJsZSk7DQo+ICsNCj4gKwll bmFibGUgPSAhIShkLT5mbGFncyAmIERNQV9ERVNDX0ZUT0QpOw0KPiArCWxkbWFfZGV2X2Rlc2Nf ZmV0Y2hfb25fZGVtYW5kX2NmZyhkLCBlbmFibGUpOw0KPiArDQo+ICsJZW5hYmxlID0gISEoZC0+ ZmxhZ3MgJiBETUFfREVTQ19JTl9TUkFNKTsNCj4gKwlsZG1hX2Rldl9zcmFtX2Rlc2NfY2ZnKGQs IGVuYWJsZSk7DQo+ICsNCj4gKwllbmFibGUgPSAhIShkLT5mbGFncyAmIERNQV9EQlVSU1RfV1Ip Ow0KPiArCWxkbWFfZGV2X2RidXJzdF93cl9jZmcoZCwgZW5hYmxlKTsNCj4gKw0KPiArCWVuYWJs ZSA9ICEhKGQtPmZsYWdzICYgRE1BX1ZMRF9GRVRDSF9BQ0spOw0KPiArCWxkbWFfZGV2X3ZsZF9m ZXRjaF9hY2tfY2ZnKGQsIGVuYWJsZSk7DQo+ICsNCj4gKwlpZiAoZC0+dmVyID4gRE1BX1ZFUjIy KSB7DQo+ICsJCWxkbWFfZGV2X29ycmNfY2ZnKGQpOw0KPiArCQlsZG1hX2Rldl9kZl90b3V0X2Nm ZyhkLCB0cnVlLCBETUFfREZUX0RFU0NfVENOVCk7DQo+ICsJfQ0KPiArDQo+ICsJZGV2X2RiZyhk LT5kZXYsICIlcyBDb250cm9sbGVyIDB4JTA4eCBjb25maWd1cmF0aW9uIGRvbmVcbiIsDQo+ICsJ CWQtPmluc3QtPm5hbWUsIHJlYWRsKGQtPmJhc2UgKyBETUFfQ1RSTCkpOw0KPiArDQo+ICsJcmV0 dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbGRtYV9jaGFuX2NjdHJsX2NmZyhzdHJ1 Y3QgbGRtYV9jaGFuICpjLCB1MzIgdmFsKQ0KPiArew0KPiArCXN0cnVjdCBsZG1hX2RldiAqZCA9 IHRvX2xkbWFfZGV2KGMtPnZjaGFuLmNoYW4uZGV2aWNlKTsNCj4gKwl1MzIgY2xhc3NfbG93LCBj bGFzc19oaWdoOw0KPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ICsJdTMyIHJlZzsNCj4gKw0K PiArCXNwaW5fbG9ja19pcnFzYXZlKCZkLT5kZXZfbG9jaywgZmxhZ3MpOw0KPiArCWxkbWFfdXBk YXRlX2JpdHMoZCwgRE1BX0NTX01BU0ssIGMtPm5yLCBETUFfQ1MpOw0KPiArCXJlZyA9IHJlYWRs KGQtPmJhc2UgKyBETUFfQ0NUUkwpOw0KPiArCS8qIFJlYWQgZnJvbSBoYXJkd2FyZSAqLw0KPiAr CWlmIChyZWcgJiBETUFfQ0NUUkxfRElSX1RYKQ0KPiArCQljLT5mbGFncyB8PSBETUFfVFhfQ0g7 DQo+ICsJZWxzZQ0KPiArCQljLT5mbGFncyB8PSBETUFfUlhfQ0g7DQo+ICsNCj4gKwkvKiBLZWVw IHRoZSBjbGFzcyB2YWx1ZSB1bmNoYW5nZWQgKi8NCj4gKwljbGFzc19sb3cgPSBGSUVMRF9HRVQo RE1BX0NDVFJMX0NMQVNTLCByZWcpOw0KPiArCWNsYXNzX2hpZ2ggPSBGSUVMRF9HRVQoRE1BX0ND VFJMX0NMQVNTSCwgcmVnKTsNCj4gKwl2YWwgJj0gfkRNQV9DQ1RSTF9DTEFTUzsNCj4gKwl2YWwg fD0gRklFTERfUFJFUChETUFfQ0NUUkxfQ0xBU1MsIGNsYXNzX2xvdyk7DQo+ICsJdmFsICY9IH5E TUFfQ0NUUkxfQ0xBU1NIOw0KPiArCXZhbCB8PSBGSUVMRF9QUkVQKERNQV9DQ1RSTF9DTEFTU0gs IGNsYXNzX2hpZ2gpOw0KPiArCXdyaXRlbCh2YWwsIGQtPmJhc2UgKyBETUFfQ0NUUkwpOw0KPiAr CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmQtPmRldl9sb2NrLCBmbGFncyk7DQo+ICsNCj4gKwly ZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbGRtYV9jaGFuX2lycV9pbml0KHN0 cnVjdCBsZG1hX2NoYW4gKmMpDQo+ICt7DQo+ICsJc3RydWN0IGxkbWFfZGV2ICpkID0gdG9fbGRt YV9kZXYoYy0+dmNoYW4uY2hhbi5kZXZpY2UpOw0KPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ ICsJdTMyIGVub2ZzLCBjcm9mczsNCj4gKwl1MzIgY25fYml0Ow0KPiArDQo+ICsJaWYgKGMtPm5y IDwgTUFYX0xPV0VSX0NIQU5TKSB7DQo+ICsJCWVub2ZzID0gRE1BX0lSTkVOOw0KPiArCQljcm9m cyA9IERNQV9JUk5DUjsNCj4gKwl9IGVsc2Ugew0KPiArCQllbm9mcyA9IERNQV9JUk5FTjE7DQo+ ICsJCWNyb2ZzID0gRE1BX0lSTkNSMTsNCj4gKwl9DQo+ICsNCj4gKwljbl9iaXQgPSBCSVQoYy0+ bnIgJiBNQVNLX0xPV0VSX0NIQU5TKTsNCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmZC0+ZGV2X2xv Y2ssIGZsYWdzKTsNCj4gKwlsZG1hX3VwZGF0ZV9iaXRzKGQsIERNQV9DU19NQVNLLCBjLT5uciwg RE1BX0NTKTsNCj4gKw0KPiArCS8qIENsZWFyIGFsbCBpbnRlcnJ1cHRzIGFuZCBkaXNhYmxlZCBp dCAqLw0KPiArCXdyaXRlbCgwLCBkLT5iYXNlICsgRE1BX0NJRSk7DQo+ICsJd3JpdGVsKERNQV9D SV9BTEwsIGQtPmJhc2UgKyBETUFfQ0lTKTsNCj4gKw0KPiArCWxkbWFfdXBkYXRlX2JpdHMoZCwg Y25fYml0LCAwLCBlbm9mcyk7DQo+ICsJd3JpdGVsKGNuX2JpdCwgZC0+YmFzZSArIGNyb2ZzKTsN Cj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkLT5kZXZfbG9jaywgZmxhZ3MpOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgdm9pZCBsZG1hX2NoYW5fc2V0X2NsYXNzKHN0cnVjdCBsZG1hX2NoYW4g KmMsIHUzMiB2YWwpDQo+ICt7DQo+ICsJc3RydWN0IGxkbWFfZGV2ICpkID0gdG9fbGRtYV9kZXYo Yy0+dmNoYW4uY2hhbi5kZXZpY2UpOw0KPiArCXUzMiBjbGFzc192YWw7DQo+ICsNCj4gKwlpZiAo ZC0+aW5zdC0+dHlwZSA9PSBETUFfVFlQRV9NQ1BZIHx8IHZhbCA+IERNQV9NQVhfQ0xBU1MpDQo+ ICsJCXJldHVybjsNCj4gKw0KPiArCS8qIDMgYml0cyBsb3cgKi8NCj4gKwljbGFzc192YWwgPSBG SUVMRF9QUkVQKERNQV9DQ1RSTF9DTEFTUywgdmFsICYgMHg3KTsNCj4gKwkvKiAyIGJpdHMgaGln aCAqLw0KPiArCWNsYXNzX3ZhbCB8PSBGSUVMRF9QUkVQKERNQV9DQ1RSTF9DTEFTU0gsICh2YWwg Pj4gMykgJiAweDMpOw0KPiArDQo+ICsJbGRtYV91cGRhdGVfYml0cyhkLCBETUFfQ1NfTUFTSywg Yy0+bnIsIERNQV9DUyk7DQo+ICsJbGRtYV91cGRhdGVfYml0cyhkLCBETUFfQ0NUUkxfQ0xBU1Mg fCBETUFfQ0NUUkxfQ0xBU1NILA0KPiBjbGFzc192YWwsDQo+ICsJCQkgRE1BX0NDVFJMKTsNCj4g K30NCj4gKw0KPiArc3RhdGljIGludCBsZG1hX2NoYW5fb24oc3RydWN0IGxkbWFfY2hhbiAqYykN Cj4gK3sNCj4gKwlzdHJ1Y3QgbGRtYV9kZXYgKmQgPSB0b19sZG1hX2RldihjLT52Y2hhbi5jaGFu LmRldmljZSk7DQo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gKw0KPiArCS8qIElmIGRlc2Ny aXB0b3JzIG5vdCBjb25maWd1cmVkLCBub3QgYWxsb3cgdG8gdHVybiBvbiBjaGFubmVsICovDQo+ ICsJaWYgKFdBUk5fT04oIWMtPmRlc2NfaW5pdCkpDQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiAr DQo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmQtPmRldl9sb2NrLCBmbGFncyk7DQo+ICsJbGRtYV91 cGRhdGVfYml0cyhkLCBETUFfQ1NfTUFTSywgYy0+bnIsIERNQV9DUyk7DQo+ICsJbGRtYV91cGRh dGVfYml0cyhkLCBETUFfQ0NUUkxfT04sIERNQV9DQ1RSTF9PTiwgRE1BX0NDVFJMKTsNCj4gKwlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZkLT5kZXZfbG9jaywgZmxhZ3MpOw0KPiArDQo+ICsJYy0+ b25vZmYgPSBETUFfQ0hfT047DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3Rh dGljIGludCBsZG1hX2NoYW5fb2ZmKHN0cnVjdCBsZG1hX2NoYW4gKmMpDQo+ICt7DQo+ICsJc3Ry dWN0IGxkbWFfZGV2ICpkID0gdG9fbGRtYV9kZXYoYy0+dmNoYW4uY2hhbi5kZXZpY2UpOw0KPiAr CXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ICsJdTMyIHZhbDsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmQtPmRldl9sb2NrLCBmbGFncyk7DQo+ICsJbGRtYV91cGRh dGVfYml0cyhkLCBETUFfQ1NfTUFTSywgYy0+bnIsIERNQV9DUyk7DQo+ICsJbGRtYV91cGRhdGVf Yml0cyhkLCBETUFfQ0NUUkxfT04sIDAsIERNQV9DQ1RSTCk7DQo+ICsJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmZC0+ZGV2X2xvY2ssIGZsYWdzKTsNCj4gKw0KPiArCXJldCA9IHJlYWRsX3BvbGxf dGltZW91dF9hdG9taWMoZC0+YmFzZSArIERNQV9DQ1RSTCwgdmFsLA0KPiArCQkJCQkhKHZhbCAm IERNQV9DQ1RSTF9PTiksIDAsIDEwMDAwKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0 Ow0KPiArDQo+ICsJYy0+b25vZmYgPSBETUFfQ0hfT0ZGOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGxkbWFfY2hhbl9kZXNjX2h3X2NmZyhzdHJ1Y3QgbGRt YV9jaGFuICpjLCBkbWFfYWRkcl90DQo+IGRlc2NfYmFzZSwNCj4gKwkJCQkgIGludCBkZXNjX251 bSkNCj4gK3sNCj4gKwlzdHJ1Y3QgbGRtYV9kZXYgKmQgPSB0b19sZG1hX2RldihjLT52Y2hhbi5j aGFuLmRldmljZSk7DQo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gKw0KPiArCXNwaW5fbG9j a19pcnFzYXZlKCZkLT5kZXZfbG9jaywgZmxhZ3MpOw0KPiArCWxkbWFfdXBkYXRlX2JpdHMoZCwg RE1BX0NTX01BU0ssIGMtPm5yLCBETUFfQ1MpOw0KPiArCXdyaXRlbChsb3dlcl8zMl9iaXRzKGRl c2NfYmFzZSksIGQtPmJhc2UgKyBETUFfQ0RCQSk7DQo+ICsNCj4gKwkvKiBIaWdoZXIgNCBiaXRz IG9mIDM2IGJpdCBhZGRyZXNzaW5nICovDQo+ICsJaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklU KSkgew0KPiArCQl1MzIgaGkgPSB1cHBlcl8zMl9iaXRzKGRlc2NfYmFzZSkgJiBISUdIXzRfQklU UzsNCj4gKw0KPiArCQlsZG1hX3VwZGF0ZV9iaXRzKGQsIERNQV9DREJBX01TQiwNCj4gKwkJCQkg RklFTERfUFJFUChETUFfQ0RCQV9NU0IsIGhpKSwgRE1BX0NDVFJMKTsNCj4gKwl9DQo+ICsJd3Jp dGVsKGRlc2NfbnVtLCBkLT5iYXNlICsgRE1BX0NETEVOKTsNCj4gKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZkLT5kZXZfbG9jaywgZmxhZ3MpOw0KPiArDQo+ICsJYy0+ZGVzY19pbml0ID0gdHJ1 ZTsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIERlc2NyaXB0b3IgYmFzZSBhZGRyZXNzIGFuZCBk YXRhIHBvaW50ZXIgbXVzdCBiZSBwaHlzaWNhbCBhZGRyZXNzDQo+IHdoZW4NCj4gKyAqIHdyaXRl biB0byB0aGUgcmVnaXN0ZXIuDQo+ICsgKiBUaGlzIEFQSSB3aWxsIGJlIHVzZWQgYnkgQ0JNIHdo aWNoIGNvbmZpZ3VyZSBoYXJkd2FyZSBkZXNjcmlwdG9yLg0KPiArICovDQo+ICtzdGF0aWMgaW50 IGxkbWFfY2hhbl9kZXNjX2NmZyhzdHJ1Y3QgbGRtYV9jaGFuICpjLCBkbWFfYWRkcl90DQo+IGRl c2NfYmFzZSwNCj4gKwkJCSAgICAgIGludCBkZXNjX251bSkNCj4gK3sNCj4gKwlzdHJ1Y3QgbGRt YV9kZXYgKmQgPSB0b19sZG1hX2RldihjLT52Y2hhbi5jaGFuLmRldmljZSk7DQo+ICsNCj4gKwlp ZiAoIWRlc2NfbnVtKSB7DQo+ICsJCWRldl9lcnIoZC0+ZGV2LCAiQ2hhbm5lbCAlZCBtdXN0IGFs bG9jYXRlIGRlc2NyaXB0b3INCj4gZmlyc3RcbiIsDQo+ICsJCQljLT5ucik7DQo+ICsJCXJldHVy biAtRUlOVkFMOw0KPiArCX0NCj4gKw0KPiArCWlmIChkZXNjX251bSA+IERNQV9NQVhfREVTQ19O VU0pIHsNCj4gKwkJZGV2X2VycihkLT5kZXYsICJDaGFubmVsICVkIGRlc2NyaXB0b3IgbnVtYmVy IG91dCBvZiByYW5nZQ0KPiAlZFxuIiwNCj4gKwkJCWMtPm5yLCBkZXNjX251bSk7DQo+ICsJCXJl dHVybiAtRUlOVkFMOw0KPiArCX0NCj4gKw0KPiArCWxkbWFfY2hhbl9kZXNjX2h3X2NmZyhjLCBk ZXNjX2Jhc2UsIGRlc2NfbnVtKTsNCj4gKw0KPiArCWMtPmZsYWdzIHw9IERNQV9IV19ERVNDOw0K PiArCWMtPmRlc2NfY250ID0gZGVzY19udW07DQo+ICsJYy0+ZGVzY19waHlzID0gZGVzY19iYXNl Ow0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK2ludCBpbnRlbF9kbWFfY2hhbl9k ZXNjX2NmZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIGRtYV9hZGRyX3QNCj4gZGVzY19iYXNlLA0K PiArCQkJICAgIGludCBkZXNjX251bSkNCj4gK3sNCj4gKwlyZXR1cm4gbGRtYV9jaGFuX2Rlc2Nf Y2ZnKHRvX2xkbWFfY2hhbihjaGFuKSwgZGVzY19iYXNlLA0KPiBkZXNjX251bSk7DQo+ICt9DQo+ ICtFWFBPUlRfU1lNQk9MX0dQTChpbnRlbF9kbWFfY2hhbl9kZXNjX2NmZyk7DQo+ICsNCj4gK3N0 YXRpYyBpbnQgbGRtYV9jaGFuX3Jlc2V0KHN0cnVjdCBsZG1hX2NoYW4gKmMpDQo+ICt7DQo+ICsJ c3RydWN0IGxkbWFfZGV2ICpkID0gdG9fbGRtYV9kZXYoYy0+dmNoYW4uY2hhbi5kZXZpY2UpOw0K PiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ICsJdTMyIHZhbDsNCj4gKwlpbnQgcmV0Ow0KPiAr DQo+ICsJcmV0ID0gbGRtYV9jaGFuX29mZihjKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4g cmV0Ow0KPiArDQo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmQtPmRldl9sb2NrLCBmbGFncyk7DQo+ ICsJbGRtYV91cGRhdGVfYml0cyhkLCBETUFfQ1NfTUFTSywgYy0+bnIsIERNQV9DUyk7DQo+ICsJ bGRtYV91cGRhdGVfYml0cyhkLCBETUFfQ0NUUkxfUlNULCBETUFfQ0NUUkxfUlNULCBETUFfQ0NU UkwpOw0KPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmQtPmRldl9sb2NrLCBmbGFncyk7DQo+ ICsNCj4gKwlyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXRfYXRvbWljKGQtPmJhc2UgKyBETUFfQ0NU UkwsIHZhbCwNCj4gKwkJCQkJISh2YWwgJiBETUFfQ0NUUkxfUlNUKSwgMCwgMTAwMDApOw0KPiAr CWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwljLT5yc3QgPSAxOw0KPiArCWMt PmRlc2NfaW5pdCA9IGZhbHNlOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyB2b2lkIGxkbWFfY2hhbl9ieXRlX29mZnNldF9jZmcoc3RydWN0IGxkbWFfY2hhbiAqYywg dTMyDQo+IGJvZmZfbGVuKQ0KPiArew0KPiArCXN0cnVjdCBsZG1hX2RldiAqZCA9IHRvX2xkbWFf ZGV2KGMtPnZjaGFuLmNoYW4uZGV2aWNlKTsNCj4gKwl1MzIgbWFzayA9IERNQV9DX0JPRkZfRU4g fCBETUFfQ19CT0ZGX0JPRl9MRU47DQo+ICsJdTMyIHZhbDsNCj4gKw0KPiArCWlmIChib2ZmX2xl biA+IDAgJiYgYm9mZl9sZW4gPD0gRE1BX0NIQU5fQk9GRl9NQVgpDQo+ICsJCXZhbCA9IEZJRUxE X1BSRVAoRE1BX0NfQk9GRl9CT0ZfTEVOLCBib2ZmX2xlbikgfA0KPiBETUFfQ19CT0ZGX0VOOw0K PiArCWVsc2UNCj4gKwkJdmFsID0gMDsNCj4gKw0KPiArCWxkbWFfdXBkYXRlX2JpdHMoZCwgRE1B X0NTX01BU0ssIGMtPm5yLCBETUFfQ1MpOw0KPiArCWxkbWFfdXBkYXRlX2JpdHMoZCwgbWFzaywg dmFsLCBETUFfQ19CT0ZGKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbGRtYV9jaGFuX2Rh dGFfZW5kaWFuX2NmZyhzdHJ1Y3QgbGRtYV9jaGFuICpjLCBib29sDQo+IGVuYWJsZSwNCj4gKwkJ CQkgICAgICB1MzIgZW5kaWFuX3R5cGUpDQo+ICt7DQo+ICsJc3RydWN0IGxkbWFfZGV2ICpkID0g dG9fbGRtYV9kZXYoYy0+dmNoYW4uY2hhbi5kZXZpY2UpOw0KPiArCXUzMiBtYXNrID0gRE1BX0Nf RU5EX0RFX0VOIHwgRE1BX0NfRU5EX0RBVEFFTkRJOw0KPiArCXUzMiB2YWw7DQo+ICsNCj4gKwlp ZiAoZW5hYmxlKQ0KPiArCQl2YWwgPSBETUFfQ19FTkRfREVfRU4gfCBGSUVMRF9QUkVQKERNQV9D X0VORF9EQVRBRU5ESSwNCj4gZW5kaWFuX3R5cGUpOw0KPiArCWVsc2UNCj4gKwkJdmFsID0gMDsN Cj4gKw0KPiArCWxkbWFfdXBkYXRlX2JpdHMoZCwgRE1BX0NTX01BU0ssIGMtPm5yLCBETUFfQ1Mp Ow0KPiArCWxkbWFfdXBkYXRlX2JpdHMoZCwgbWFzaywgdmFsLCBETUFfQ19FTkRJQU4pOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBsZG1hX2NoYW5fZGVzY19lbmRpYW5fY2ZnKHN0cnVjdCBs ZG1hX2NoYW4gKmMsIGJvb2wNCj4gZW5hYmxlLA0KPiArCQkJCSAgICAgIHUzMiBlbmRpYW5fdHlw ZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgbGRtYV9kZXYgKmQgPSB0b19sZG1hX2RldihjLT52Y2hhbi5j aGFuLmRldmljZSk7DQo+ICsJdTMyIG1hc2sgPSBETUFfQ19FTkRfREVTX0VOIHwgRE1BX0NfRU5E X0RFU0VOREk7DQo+ICsJdTMyIHZhbDsNCj4gKw0KPiArCWlmIChlbmFibGUpDQo+ICsJCXZhbCA9 IERNQV9DX0VORF9ERVNfRU4gfCBGSUVMRF9QUkVQKERNQV9DX0VORF9ERVNFTkRJLA0KPiBlbmRp YW5fdHlwZSk7DQo+ICsJZWxzZQ0KPiArCQl2YWwgPSAwOw0KPiArDQo+ICsJbGRtYV91cGRhdGVf Yml0cyhkLCBETUFfQ1NfTUFTSywgYy0+bnIsIERNQV9DUyk7DQo+ICsJbGRtYV91cGRhdGVfYml0 cyhkLCBtYXNrLCB2YWwsIERNQV9DX0VORElBTik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lk IGxkbWFfY2hhbl9oZHJfbW9kZV9jZmcoc3RydWN0IGxkbWFfY2hhbiAqYywgdTMyIGhkcl9sZW4s DQo+IGJvb2wgY3N1bSkNCj4gK3sNCj4gKwlzdHJ1Y3QgbGRtYV9kZXYgKmQgPSB0b19sZG1hX2Rl dihjLT52Y2hhbi5jaGFuLmRldmljZSk7DQo+ICsJdTMyIG1hc2ssIHZhbDsNCj4gKw0KPiArCS8q IE5CLCBjc3VtIGRpc2FibGVkLCBoZHIgbGVuZ3RoIG11c3QgYmUgcHJvdmlkZWQgKi8NCj4gKwlp ZiAoIWNzdW0gJiYgKCFoZHJfbGVuIHx8IGhkcl9sZW4gPiBETUFfSERSX0xFTl9NQVgpKQ0KPiAr CQlyZXR1cm47DQo+ICsNCj4gKwltYXNrID0gRE1BX0NfSERSTV9IRFJfU1VNOw0KPiArCXZhbCA9 IERNQV9DX0hEUk1fSERSX1NVTTsNCj4gKw0KPiArCWlmICghY3N1bSAmJiBoZHJfbGVuKQ0KPiAr CQl2YWwgPSBoZHJfbGVuOw0KPiArDQo+ICsJbGRtYV91cGRhdGVfYml0cyhkLCBETUFfQ1NfTUFT SywgYy0+bnIsIERNQV9DUyk7DQo+ICsJbGRtYV91cGRhdGVfYml0cyhkLCBtYXNrLCB2YWwsIERN QV9DX0hEUk0pOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBsZG1hX2NoYW5fcnh3cl9ucF9j Zmcoc3RydWN0IGxkbWFfY2hhbiAqYywgYm9vbCBlbmFibGUpDQo+ICt7DQo+ICsJc3RydWN0IGxk bWFfZGV2ICpkID0gdG9fbGRtYV9kZXYoYy0+dmNoYW4uY2hhbi5kZXZpY2UpOw0KPiArCXUzMiBt YXNrLCB2YWw7DQo+ICsNCj4gKwkvKiBPbmx5IHZhbGlkIGZvciBSWCBjaGFubmVsICovDQo+ICsJ aWYgKGxkbWFfY2hhbl90eChjKSkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJbWFzayA9IERNQV9D Q1RSTF9XUl9OUF9FTjsNCj4gKwl2YWwgPSBlbmFibGUgPyBETUFfQ0NUUkxfV1JfTlBfRU4gOiAw Ow0KPiArDQo+ICsJbGRtYV91cGRhdGVfYml0cyhkLCBETUFfQ1NfTUFTSywgYy0+bnIsIERNQV9D Uyk7DQo+ICsJbGRtYV91cGRhdGVfYml0cyhkLCBtYXNrLCB2YWwsIERNQV9DQ1RSTCk7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGxkbWFfY2hhbl9hYmNfY2ZnKHN0cnVjdCBsZG1hX2NoYW4g KmMsIGJvb2wgZW5hYmxlKQ0KPiArew0KPiArCXN0cnVjdCBsZG1hX2RldiAqZCA9IHRvX2xkbWFf ZGV2KGMtPnZjaGFuLmNoYW4uZGV2aWNlKTsNCj4gKwl1MzIgbWFzaywgdmFsOw0KPiArDQo+ICsJ aWYgKGQtPnZlciA8IERNQV9WRVIzMiB8fCBsZG1hX2NoYW5fdHgoYykpDQo+ICsJCXJldHVybjsN Cj4gKw0KPiArCW1hc2sgPSBETUFfQ0NUUkxfQ0hfQUJDOw0KPiArCXZhbCA9IGVuYWJsZSA/IERN QV9DQ1RSTF9DSF9BQkMgOiAwOw0KPiArDQo+ICsJbGRtYV91cGRhdGVfYml0cyhkLCBETUFfQ1Nf TUFTSywgYy0+bnIsIERNQV9DUyk7DQo+ICsJbGRtYV91cGRhdGVfYml0cyhkLCBtYXNrLCB2YWws IERNQV9DQ1RSTCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbGRtYV9wb3J0X2NmZyhzdHJ1 Y3QgbGRtYV9wb3J0ICpwKQ0KPiArew0KPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ICsJc3Ry dWN0IGxkbWFfZGV2ICpkOw0KPiArCXUzMiByZWc7DQo+ICsNCj4gKwlkID0gcC0+bGRldjsNCj4g KwlyZWcgPSBGSUVMRF9QUkVQKERNQV9QQ1RSTF9UWEVOREksIHAtPnR4ZW5kaSk7DQo+ICsJcmVn IHw9IEZJRUxEX1BSRVAoRE1BX1BDVFJMX1JYRU5ESSwgcC0+cnhlbmRpKTsNCj4gKw0KPiArCWlm IChkLT52ZXIgPT0gRE1BX1ZFUjIyKSB7DQo+ICsJCXJlZyB8PSBGSUVMRF9QUkVQKERNQV9QQ1RS TF9UWEJMLCBwLT50eGJsKTsNCj4gKwkJcmVnIHw9IEZJRUxEX1BSRVAoRE1BX1BDVFJMX1JYQkws IHAtPnJ4YmwpOw0KPiArCX0gZWxzZSB7DQo+ICsJCXJlZyB8PSBGSUVMRF9QUkVQKERNQV9QQ1RS TF9QREVOLCBwLT5wa3RfZHJvcCk7DQo+ICsNCj4gKwkJaWYgKHAtPnR4YmwgPT0gRE1BX0JVUlNU TF8zMkRXKQ0KPiArCQkJcmVnIHw9IERNQV9QQ1RSTF9UWEJMMzI7DQo+ICsJCWVsc2UgaWYgKHAt PnR4YmwgPT0gRE1BX0JVUlNUTF8xNkRXKQ0KPiArCQkJcmVnIHw9IERNQV9QQ1RSTF9UWEJMMTY7 DQo+ICsJCWVsc2UNCj4gKwkJCXJlZyB8PSBGSUVMRF9QUkVQKERNQV9QQ1RSTF9UWEJMLCBETUFf UENUUkxfVFhCTF84KTsNCj4gKw0KPiArCQlpZiAocC0+cnhibCA9PSBETUFfQlVSU1RMXzMyRFcp DQo+ICsJCQlyZWcgfD0gRE1BX1BDVFJMX1JYQkwzMjsNCj4gKwkJZWxzZSBpZiAocC0+cnhibCA9 PSBETUFfQlVSU1RMXzE2RFcpDQo+ICsJCQlyZWcgfD0gRE1BX1BDVFJMX1JYQkwxNjsNCj4gKwkJ ZWxzZQ0KPiArCQkJcmVnIHw9IEZJRUxEX1BSRVAoRE1BX1BDVFJMX1JYQkwsIERNQV9QQ1RSTF9S WEJMXzgpOw0KPiArCX0NCj4gKw0KPiArCXNwaW5fbG9ja19pcnFzYXZlKCZkLT5kZXZfbG9jaywg ZmxhZ3MpOw0KPiArCXdyaXRlbChwLT5wb3J0aWQsIGQtPmJhc2UgKyBETUFfUFMpOw0KPiArCXdy aXRlbChyZWcsIGQtPmJhc2UgKyBETUFfUENUUkwpOw0KPiArCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmQtPmRldl9sb2NrLCBmbGFncyk7DQo+ICsNCj4gKwlyZWcgPSByZWFkbChkLT5iYXNlICsg RE1BX1BDVFJMKTsgLyogcmVhZCBiYWNrICovDQo+ICsJZGV2X2RiZyhkLT5kZXYsICJQb3J0IENv bnRyb2wgMHglMDh4IGNvbmZpZ3VyYXRpb24gZG9uZVxuIiwgcmVnKTsNCj4gKw0KPiArCXJldHVy biAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGxkbWFfY2hhbl9jZmcoc3RydWN0IGxkbWFf Y2hhbiAqYykNCj4gK3sNCj4gKwlzdHJ1Y3QgbGRtYV9kZXYgKmQgPSB0b19sZG1hX2RldihjLT52 Y2hhbi5jaGFuLmRldmljZSk7DQo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gKwl1MzIgcmVn Ow0KPiArDQo+ICsJcmVnID0gYy0+cGRlbiA/IERNQV9DQ1RSTF9QREVOIDogMDsNCj4gKwlyZWcg fD0gYy0+b25vZmYgPyBETUFfQ0NUUkxfT04gOiAwOw0KPiArCXJlZyB8PSBjLT5yc3QgPyBETUFf Q0NUUkxfUlNUIDogMDsNCj4gKw0KPiArCWxkbWFfY2hhbl9jY3RybF9jZmcoYywgcmVnKTsNCj4g KwlsZG1hX2NoYW5faXJxX2luaXQoYyk7DQo+ICsNCj4gKwlpZiAoZC0+dmVyIDw9IERNQV9WRVIy MikNCj4gKwkJcmV0dXJuIDA7DQo+ICsNCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmZC0+ZGV2X2xv Y2ssIGZsYWdzKTsNCj4gKwlsZG1hX2NoYW5fc2V0X2NsYXNzKGMsIGMtPm5yKTsNCj4gKwlsZG1h X2NoYW5fYnl0ZV9vZmZzZXRfY2ZnKGMsIGMtPmJvZmZfbGVuKTsNCj4gKwlsZG1hX2NoYW5fZGF0 YV9lbmRpYW5fY2ZnKGMsIGMtPmRhdGFfZW5kaWFuX2VuLCBjLT5kYXRhX2VuZGlhbik7DQo+ICsJ bGRtYV9jaGFuX2Rlc2NfZW5kaWFuX2NmZyhjLCBjLT5kZXNjX2VuZGlhbl9lbiwgYy0+ZGVzY19l bmRpYW4pOw0KPiArCWxkbWFfY2hhbl9oZHJfbW9kZV9jZmcoYywgYy0+aGRybV9sZW4sIGMtPmhk cm1fY3N1bSk7DQo+ICsJbGRtYV9jaGFuX3J4d3JfbnBfY2ZnKGMsIGMtPmRlc2NfcnhfbnApOw0K PiArCWxkbWFfY2hhbl9hYmNfY2ZnKGMsIGMtPmFiY19lbik7DQo+ICsJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmZC0+ZGV2X2xvY2ssIGZsYWdzKTsNCj4gKw0KPiArCWlmIChsZG1hX2NoYW5faXNf aHdfZGVzYyhjKSkNCj4gKwkJbGRtYV9jaGFuX2Rlc2NfaHdfY2ZnKGMsIGMtPmRlc2NfcGh5cywg Yy0+ZGVzY19jbnQpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGxkbWFfZGV2X2luaXQoc3RydWN0IGxkbWFfZGV2ICpkKQ0KPiArew0KPiArCXVuc2lnbmVk IGxvbmcgY2hfbWFzayA9ICh1bnNpZ25lZCBsb25nKWQtPmNoYW5uZWxzX21hc2s7DQo+ICsJc3Ry dWN0IGxkbWFfcG9ydCAqcDsNCj4gKwlzdHJ1Y3QgbGRtYV9jaGFuICpjOw0KPiArCWludCBpOw0K PiArCXUzMiBqOw0KPiArDQo+ICsJc3Bpbl9sb2NrX2luaXQoJmQtPmRldl9sb2NrKTsNCj4gKwls ZG1hX2Rldl9yZXNldChkKTsNCj4gKwlsZG1hX2Rldl9jZmcoZCk7DQo+ICsNCj4gKwkvKiBETUEg cG9ydCBpbml0aWFsaXphdGlvbiAqLw0KPiArCWZvciAoaSA9IDA7IGkgPCBkLT5wb3J0X25yczsg aSsrKSB7DQo+ICsJCXAgPSAmZC0+cG9ydHNbaV07DQo+ICsJCWxkbWFfcG9ydF9jZmcocCk7DQo+ ICsJfQ0KPiArDQo+ICsJLyogRE1BIGNoYW5uZWwgaW5pdGlhbGl6YXRpb24gKi8NCj4gKwlmb3Jf ZWFjaF9zZXRfYml0KGosICZjaF9tYXNrLCBkLT5jaGFuX25ycykgew0KPiArCQljID0gJmQtPmNo YW5zW2pdOw0KPiArCQlsZG1hX2NoYW5fY2ZnKGMpOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3Rh dGljIGludCBsZG1hX2NmZ19pbml0KHN0cnVjdCBsZG1hX2RldiAqZCkNCj4gK3sNCj4gKwlzdHJ1 Y3QgZndub2RlX2hhbmRsZSAqZndub2RlID0gZGV2X2Z3bm9kZShkLT5kZXYpOw0KPiArCXN0cnVj dCBsZG1hX3BvcnQgKnA7DQo+ICsJdTMyIHZhbDsNCj4gKwlpbnQgaTsNCj4gKw0KPiArCWlmIChm d25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgImludGVsLGRtYS1jaGFuLWZjIikpDQo+ ICsJCWQtPmZsYWdzIHw9IERNQV9DSEFOX0ZMT1dfQ1RMOw0KPiArDQo+ICsJaWYgKGZ3bm9kZV9w cm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCAiaW50ZWwsZG1hLWRlc2MtZm9kIikpDQo+ICsJCWQt PmZsYWdzIHw9IERNQV9ERVNDX0ZUT0Q7DQo+ICsNCj4gKwlpZiAoZndub2RlX3Byb3BlcnR5X3Jl YWRfYm9vbChmd25vZGUsICJpbnRlbCxkbWEtZGVzYy1pbi1zcmFtIikpDQo+ICsJCWQtPmZsYWdz IHw9IERNQV9ERVNDX0lOX1NSQU07DQo+ICsNCj4gKwlpZiAoZndub2RlX3Byb3BlcnR5X3JlYWRf Ym9vbChmd25vZGUsICJpbnRlbCxkbWEtYnl0ZS1lbiIpKQ0KPiArCQlkLT5mbGFncyB8PSBETUFf RU5fQllURV9FTjsNCj4gKw0KPiArCWlmIChmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9k ZSwgImludGVsLGRtYS1kZmV0Y2gtYWNrIikpDQo+ICsJCWQtPmZsYWdzIHw9IERNQV9WTERfRkVU Q0hfQUNLOw0KPiArDQo+ICsJaWYgKGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCAi aW50ZWwsZG1hLWRidXJzdC13ciIpKQ0KPiArCQlkLT5mbGFncyB8PSBETUFfREJVUlNUX1dSOw0K PiArDQo+ICsJaWYgKGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCAiaW50ZWwsZG1h LWRyYiIpKQ0KPiArCQlkLT5mbGFncyB8PSBETUFfREZUX0RSQjsNCj4gKw0KPiArCWlmIChmd25v ZGVfcHJvcGVydHlfcmVhZF91MzIoZndub2RlLCAiaW50ZWwsZG1hLXBvbGwtY250IiwNCj4gKwkJ CQkgICAgICZkLT5wb2xsY250KSkNCj4gKwkJZC0+cG9sbGNudCA9IERNQV9ERlRfUE9MTF9DTlQ7 DQo+ICsNCj4gKwlpZiAoIWZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihmd25vZGUsICJpbnRlbCxk bWEtb3JyYyIsICZ2YWwpKSB7DQo+ICsJCWlmICh2YWwgPiBETUFfT1JSQ19NQVhfQ05UKQ0KPiAr CQkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJCWQtPm9ycmMgPSB2YWw7DQo+ICsJfQ0KPiArDQo+ICsJ aWYgKGQtPnZlciA+IERNQV9WRVIyMikgew0KPiArCQlpZiAoIWQtPnBvcnRfbnJzKQ0KPiArCQkJ cmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwkJZm9yIChpID0gMDsgaSA8IGQtPnBvcnRfbnJzOyBp KyspIHsNCj4gKwkJCXAgPSAmZC0+cG9ydHNbaV07DQo+ICsJCQlwLT5yeGVuZGkgPSBETUFfREZU X0VORElBTjsNCj4gKwkJCXAtPnR4ZW5kaSA9IERNQV9ERlRfRU5ESUFOOw0KPiArCQkJcC0+cnhi bCA9IERNQV9ERlRfQlVSU1Q7DQo+ICsJCQlwLT50eGJsID0gRE1BX0RGVF9CVVJTVDsNCj4gKwkJ CXAtPnBrdF9kcm9wID0gRE1BX1BLVF9EUk9QX0RJUzsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiAr CXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBkbWFfZnJlZV9kZXNjX3Jlc291 cmNlKHN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZGVzYykNCj4gK3sNCj4gKwlzdHJ1Y3QgZHcyX2Rl c2Nfc3cgKmRzID0gdG9fbGdtX2RtYV9kZXNjKHZkZXNjKTsNCj4gKwlzdHJ1Y3QgbGRtYV9jaGFu ICpjID0gZHMtPmNoYW47DQo+ICsNCj4gKwlkbWFfcG9vbF9mcmVlKGMtPmRlc2NfcG9vbCwgZHMt PmRlc2NfaHcsIGRzLT5kZXNjX3BoeXMpOw0KPiArCWtmcmVlKGRzKTsNCj4gK30NCj4gKw0KPiAr c3RhdGljIHN0cnVjdCBkdzJfZGVzY19zdyAqDQo+ICtkbWFfYWxsb2NfZGVzY19yZXNvdXJjZShp bnQgbnVtLCBzdHJ1Y3QgbGRtYV9jaGFuICpjKQ0KPiArew0KPiArCXN0cnVjdCBkZXZpY2UgKmRl diA9IGMtPnZjaGFuLmNoYW4uZGV2aWNlLT5kZXY7DQo+ICsJc3RydWN0IGR3Ml9kZXNjX3N3ICpk czsNCj4gKw0KPiArCWlmIChudW0gPiBjLT5kZXNjX251bSkgew0KPiArCQlkZXZfZXJyKGRldiwg InNnIG51bSAlZCBleGNlZWQgbWF4ICVkXG4iLCBudW0sIGMtDQo+ID5kZXNjX251bSk7DQo+ICsJ CXJldHVybiBOVUxMOw0KPiArCX0NCj4gKw0KPiArCWRzID0ga3phbGxvYyhzaXplb2YoKmRzKSwg R0ZQX05PV0FJVCk7DQo+ICsJaWYgKCFkcykNCj4gKwkJcmV0dXJuIE5VTEw7DQo+ICsNCj4gKwlk cy0+Y2hhbiA9IGM7DQo+ICsJZHMtPmRlc2NfaHcgPSBkbWFfcG9vbF96YWxsb2MoYy0+ZGVzY19w b29sLCBHRlBfQVRPTUlDLA0KPiArCQkJCSAgICAgICZkcy0+ZGVzY19waHlzKTsNCj4gKwlpZiAo IWRzLT5kZXNjX2h3KSB7DQo+ICsJCWRldl9kYmcoZGV2LCAib3V0IG9mIG1lbW9yeSBmb3IgbGlu ayBkZXNjcmlwdG9yXG4iKTsNCj4gKwkJa2ZyZWUoZHMpOw0KPiArCQlyZXR1cm4gTlVMTDsNCj4g Kwl9DQo+ICsJZHMtPmRlc2NfY250ID0gbnVtOw0KPiArDQo+ICsJcmV0dXJuIGRzOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgdm9pZCBsZG1hX2NoYW5faXJxX2VuKHN0cnVjdCBsZG1hX2NoYW4gKmMp DQo+ICt7DQo+ICsJc3RydWN0IGxkbWFfZGV2ICpkID0gdG9fbGRtYV9kZXYoYy0+dmNoYW4uY2hh bi5kZXZpY2UpOw0KPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ICsNCj4gKwlzcGluX2xvY2tf aXJxc2F2ZSgmZC0+ZGV2X2xvY2ssIGZsYWdzKTsNCj4gKwl3cml0ZWwoYy0+bnIsIGQtPmJhc2Ug KyBETUFfQ1MpOw0KPiArCXdyaXRlbChETUFfQ0lfRU9QLCBkLT5iYXNlICsgRE1BX0NJRSk7DQo+ ICsJd3JpdGVsKEJJVChjLT5uciksIGQtPmJhc2UgKyBETUFfSVJORU4pOw0KPiArCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJmQtPmRldl9sb2NrLCBmbGFncyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyB2b2lkIGRtYV9pc3N1ZV9wZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikNCj4gK3sNCj4g KwlzdHJ1Y3QgbGRtYV9jaGFuICpjID0gdG9fbGRtYV9jaGFuKGNoYW4pOw0KPiArCXN0cnVjdCBs ZG1hX2RldiAqZCA9IHRvX2xkbWFfZGV2KGMtPnZjaGFuLmNoYW4uZGV2aWNlKTsNCj4gKwl1bnNp Z25lZCBsb25nIGZsYWdzOw0KPiArDQo+ICsJaWYgKGQtPnZlciA9PSBETUFfVkVSMjIpIHsNCj4g KwkJc3Bpbl9sb2NrX2lycXNhdmUoJmMtPnZjaGFuLmxvY2ssIGZsYWdzKTsNCj4gKwkJaWYgKHZj aGFuX2lzc3VlX3BlbmRpbmcoJmMtPnZjaGFuKSkgew0KPiArCQkJc3RydWN0IHZpcnRfZG1hX2Rl c2MgKnZkZXNjOw0KPiArDQo+ICsJCQkvKiBHZXQgdGhlIG5leHQgZGVzY3JpcHRvciAqLw0KPiAr CQkJdmRlc2MgPSB2Y2hhbl9uZXh0X2Rlc2MoJmMtPnZjaGFuKTsNCj4gKwkJCWlmICghdmRlc2Mp IHsNCj4gKwkJCQljLT5kcyA9IE5VTEw7DQo+ICsJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm Yy0+dmNoYW4ubG9jaywgZmxhZ3MpOw0KPiArCQkJCXJldHVybjsNCj4gKwkJCX0NCj4gKwkJCWxp c3RfZGVsKCZ2ZGVzYy0+bm9kZSk7DQo+ICsJCQljLT5kcyA9IHRvX2xnbV9kbWFfZGVzYyh2ZGVz Yyk7DQo+ICsJCQlsZG1hX2NoYW5fZGVzY19od19jZmcoYywgYy0+ZHMtPmRlc2NfcGh5cywgYy0+ ZHMtDQo+ID5kZXNjX2NudCk7DQo+ICsJCQlsZG1hX2NoYW5faXJxX2VuKGMpOw0KPiArCQl9DQo+ ICsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmMtPnZjaGFuLmxvY2ssIGZsYWdzKTsNCj4gKwl9 DQo+ICsJbGRtYV9jaGFuX29uKGMpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBkbWFfc3lu Y2hyb25pemUoc3RydWN0IGRtYV9jaGFuICpjaGFuKQ0KPiArew0KPiArCXN0cnVjdCBsZG1hX2No YW4gKmMgPSB0b19sZG1hX2NoYW4oY2hhbik7DQo+ICsNCj4gKwkvKg0KPiArCSAqIGNsZWFyIGFu eSBwZW5kaW5nIHdvcmsgaWYgYW55LiBJbiB0aGF0DQo+ICsJICogY2FzZSB0aGUgcmVzb3VyY2Ug bmVlZHMgdG8gYmUgZnJlZSBoZXJlLg0KPiArCSAqLw0KPiArCWNhbmNlbF93b3JrX3N5bmMoJmMt PndvcmspOw0KPiArCXZjaGFuX3N5bmNocm9uaXplKCZjLT52Y2hhbik7DQo+ICsJaWYgKGMtPmRz KQ0KPiArCQlkbWFfZnJlZV9kZXNjX3Jlc291cmNlKCZjLT5kcy0+dmRlc2MpOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgaW50IGRtYV90ZXJtaW5hdGVfYWxsKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikN Cj4gK3sNCj4gKwlzdHJ1Y3QgbGRtYV9jaGFuICpjID0gdG9fbGRtYV9jaGFuKGNoYW4pOw0KPiAr CXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ICsJTElTVF9IRUFEKGhlYWQpOw0KPiArDQo+ICsJc3Bp bl9sb2NrX2lycXNhdmUoJmMtPnZjaGFuLmxvY2ssIGZsYWdzKTsNCj4gKwl2Y2hhbl9nZXRfYWxs X2Rlc2NyaXB0b3JzKCZjLT52Y2hhbiwgJmhlYWQpOw0KPiArCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmMtPnZjaGFuLmxvY2ssIGZsYWdzKTsNCj4gKwl2Y2hhbl9kbWFfZGVzY19mcmVlX2xpc3Qo JmMtPnZjaGFuLCAmaGVhZCk7DQo+ICsNCj4gKwlyZXR1cm4gbGRtYV9jaGFuX3Jlc2V0KGMpOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGRtYV9yZXN1bWVfY2hhbihzdHJ1Y3QgZG1hX2NoYW4g KmNoYW4pDQo+ICt7DQo+ICsJc3RydWN0IGxkbWFfY2hhbiAqYyA9IHRvX2xkbWFfY2hhbihjaGFu KTsNCj4gKw0KPiArCWxkbWFfY2hhbl9vbihjKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgaW50IGRtYV9wYXVzZV9jaGFuKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikN Cj4gK3sNCj4gKwlzdHJ1Y3QgbGRtYV9jaGFuICpjID0gdG9fbGRtYV9jaGFuKGNoYW4pOw0KPiAr DQo+ICsJcmV0dXJuIGxkbWFfY2hhbl9vZmYoYyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBlbnVt IGRtYV9zdGF0dXMNCj4gK2RtYV90eF9zdGF0dXMoc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFf Y29va2llX3QgY29va2llLA0KPiArCSAgICAgIHN0cnVjdCBkbWFfdHhfc3RhdGUgKnR4c3RhdGUp DQo+ICt7DQo+ICsJc3RydWN0IGxkbWFfY2hhbiAqYyA9IHRvX2xkbWFfY2hhbihjaGFuKTsNCj4g KwlzdHJ1Y3QgbGRtYV9kZXYgKmQgPSB0b19sZG1hX2RldihjLT52Y2hhbi5jaGFuLmRldmljZSk7 DQo+ICsJZW51bSBkbWFfc3RhdHVzIHN0YXR1cyA9IERNQV9DT01QTEVURTsNCj4gKw0KPiArCWlm IChkLT52ZXIgPT0gRE1BX1ZFUjIyKQ0KPiArCQlzdGF0dXMgPSBkbWFfY29va2llX3N0YXR1cyhj aGFuLCBjb29raWUsIHR4c3RhdGUpOw0KPiArDQo+ICsJcmV0dXJuIHN0YXR1czsNCj4gK30NCj4g Kw0KPiArc3RhdGljIHZvaWQgZG1hX2NoYW5faXJxKGludCBpcnEsIHZvaWQgKmRhdGEpDQo+ICt7 DQo+ICsJc3RydWN0IGxkbWFfY2hhbiAqYyA9IGRhdGE7DQo+ICsJc3RydWN0IGxkbWFfZGV2ICpk ID0gdG9fbGRtYV9kZXYoYy0+dmNoYW4uY2hhbi5kZXZpY2UpOw0KPiArCXUzMiBzdGF0Ow0KPiAr DQo+ICsJLyogRGlzYWJsZSBjaGFubmVsIGludGVycnVwdHMgICovDQo+ICsJd3JpdGVsKGMtPm5y LCBkLT5iYXNlICsgRE1BX0NTKTsNCj4gKwlzdGF0ID0gcmVhZGwoZC0+YmFzZSArIERNQV9DSVMp Ow0KPiArCWlmICghc3RhdCkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJd3JpdGVsKHJlYWRsKGQt PmJhc2UgKyBETUFfQ0lFKSAmIH5ETUFfQ0lfQUxMLCBkLT5iYXNlICsNCj4gRE1BX0NJRSk7DQo+ ICsJd3JpdGVsKHN0YXQsIGQtPmJhc2UgKyBETUFfQ0lTKTsNCj4gKwlxdWV1ZV93b3JrKGQtPndx LCAmYy0+d29yayk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBkbWFfaW50ZXJy dXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkNCj4gK3sNCj4gKwlzdHJ1Y3QgbGRtYV9kZXYgKmQg PSBkZXZfaWQ7DQo+ICsJc3RydWN0IGxkbWFfY2hhbiAqYzsNCj4gKwl1bnNpZ25lZCBsb25nIGly bmNyOw0KPiArCXUzMiBjaWQ7DQo+ICsNCj4gKwlpcm5jciA9IHJlYWRsKGQtPmJhc2UgKyBETUFf SVJOQ1IpOw0KPiArCWlmICghaXJuY3IpIHsNCj4gKwkJZGV2X2VycihkLT5kZXYsICJkdW1teSBp bnRlcnJ1cHRcbiIpOw0KPiArCQlyZXR1cm4gSVJRX05PTkU7DQo+ICsJfQ0KPiArDQo+ICsJZm9y X2VhY2hfc2V0X2JpdChjaWQsICZpcm5jciwgZC0+Y2hhbl9ucnMpIHsNCj4gKwkJLyogTWFzayAq Lw0KPiArCQl3cml0ZWwocmVhZGwoZC0+YmFzZSArIERNQV9JUk5FTikgJiB+QklUKGNpZCksIGQt PmJhc2UgKw0KPiBETUFfSVJORU4pOw0KPiArCQkvKiBBY2sgKi8NCj4gKwkJd3JpdGVsKHJlYWRs KGQtPmJhc2UgKyBETUFfSVJOQ1IpIHwgQklUKGNpZCksIGQtPmJhc2UgKw0KPiBETUFfSVJOQ1Ip Ow0KPiArDQo+ICsJCWMgPSAmZC0+Y2hhbnNbY2lkXTsNCj4gKwkJZG1hX2NoYW5faXJxKGlycSwg Yyk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIElSUV9IQU5ETEVEOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgdm9pZCBwcmVwX3NsYXZlX2J1cnN0X2xlbihzdHJ1Y3QgbGRtYV9jaGFuICpjKQ0KPiAr ew0KPiArCXN0cnVjdCBsZG1hX3BvcnQgKnAgPSBjLT5wb3J0Ow0KPiArCXN0cnVjdCBkbWFfc2xh dmVfY29uZmlnICpjZmcgPSAmYy0+Y29uZmlnOw0KPiArDQo+ICsJaWYgKGNmZy0+ZHN0X21heGJ1 cnN0KQ0KPiArCQljZmctPnNyY19tYXhidXJzdCA9IGNmZy0+ZHN0X21heGJ1cnN0Ow0KPiArDQo+ ICsJLyogVFggYW5kIFJYIGhhcyB0aGUgc2FtZSBidXJzdCBsZW5ndGggKi8NCj4gKwlwLT50eGJs ID0gaWxvZzIoY2ZnLT5zcmNfbWF4YnVyc3QpOw0KPiArCXAtPnJ4YmwgPSBwLT50eGJsOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICoNCj4gK2Rt YV9wcmVwX3NsYXZlX3NnKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgc3RydWN0IHNjYXR0ZXJsaXN0 ICpzZ2wsDQo+ICsJCSAgdW5zaWduZWQgaW50IHNnbGVuLCBlbnVtIGRtYV90cmFuc2Zlcl9kaXJl Y3Rpb24gZGlyLA0KPiArCQkgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZvaWQgKmNvbnRleHQpDQo+ ICt7DQo+ICsJc3RydWN0IGxkbWFfY2hhbiAqYyA9IHRvX2xkbWFfY2hhbihjaGFuKTsNCj4gKwlz aXplX3QgbGVuLCBhdmFpbCwgdG90YWwgPSAwOw0KPiArCXN0cnVjdCBkdzJfZGVzYyAqaHdfZHM7 DQo+ICsJc3RydWN0IGR3Ml9kZXNjX3N3ICpkczsNCj4gKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNn Ow0KPiArCWludCBudW0gPSBzZ2xlbiwgaTsNCj4gKwlkbWFfYWRkcl90IGFkZHI7DQo+ICsNCj4g KwlpZiAoIXNnbCkNCj4gKwkJcmV0dXJuIE5VTEw7DQo+ICsNCj4gKwlmb3JfZWFjaF9zZyhzZ2ws IHNnLCBzZ2xlbiwgaSkgew0KPiArCQlhdmFpbCA9IHNnX2RtYV9sZW4oc2cpOw0KPiArCQlpZiAo YXZhaWwgPiBETUFfTUFYX1NJWkUpDQo+ICsJCQludW0gKz0gRElWX1JPVU5EX1VQKGF2YWlsLCBE TUFfTUFYX1NJWkUpIC0gMTsNCj4gKwl9DQo+ICsNCj4gKwlkcyA9IGRtYV9hbGxvY19kZXNjX3Jl c291cmNlKG51bSwgYyk7DQo+ICsJaWYgKCFkcykNCj4gKwkJcmV0dXJuIE5VTEw7DQo+ICsNCj4g KwljLT5kcyA9IGRzOw0KPiArDQo+ICsJbnVtID0gMDsNCj4gKwkvKiBzb3AgYW5kIGVvcCBoYXMg dG8gYmUgaGFuZGxlZCBuaWNlbHkgKi8NCj4gKwlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBzZ2xlbiwg aSkgew0KPiArCQlhZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOw0KPiArCQlhdmFpbCA9IHNnX2Rt YV9sZW4oc2cpOw0KPiArCQl0b3RhbCArPSBhdmFpbDsNCj4gKw0KPiArCQlkbyB7DQo+ICsJCQls ZW4gPSBtaW5fdChzaXplX3QsIGF2YWlsLCBETUFfTUFYX1NJWkUpOw0KPiArDQo+ICsJCQlod19k cyA9ICZkcy0+ZGVzY19od1tudW1dOw0KPiArCQkJc3dpdGNoIChzZ2xlbikgew0KPiArCQkJY2Fz ZSAxOg0KPiArCQkJCWh3X2RzLT5maWVsZC5zb3AgPSAxOw0KPiArCQkJCWh3X2RzLT5maWVsZC5l b3AgPSAxOw0KPiArCQkJCWJyZWFrOw0KPiArCQkJZGVmYXVsdDoNCj4gKwkJCQlpZiAobnVtID09 IDApIHsNCj4gKwkJCQkJaHdfZHMtPmZpZWxkLnNvcCA9IDE7DQo+ICsJCQkJCWh3X2RzLT5maWVs ZC5lb3AgPSAwOw0KPiArCQkJCX0gZWxzZSBpZiAobnVtID09IChzZ2xlbiAtIDEpKSB7DQo+ICsJ CQkJCWh3X2RzLT5maWVsZC5zb3AgPSAwOw0KPiArCQkJCQlod19kcy0+ZmllbGQuZW9wID0gMTsN Cj4gKwkJCQl9IGVsc2Ugew0KPiArCQkJCQlod19kcy0+ZmllbGQuc29wID0gMDsNCj4gKwkJCQkJ aHdfZHMtPmZpZWxkLmVvcCA9IDA7DQo+ICsJCQkJfQ0KPiArCQkJCWJyZWFrOw0KPiArCQkJfQ0K PiArDQo+ICsJCQkvKiBPbmx5IDMyIGJpdCBhZGRyZXNzIHN1cHBvcnRlZCAqLw0KPiArCQkJaHdf ZHMtPmFkZHIgPSAodTMyKWFkZHI7DQo+ICsJCQlod19kcy0+ZmllbGQubGVuID0gbGVuOw0KPiAr CQkJaHdfZHMtPmZpZWxkLmMgPSAwOw0KPiArCQkJaHdfZHMtPmZpZWxkLmJvZnMgPSBhZGRyICYg MHgzOw0KPiArCQkJLyogRW5zdXJlIGRhdGEgcmVhZHkgYmVmb3JlIG93bmVyc2hpcCBjaGFuZ2Ug Ki8NCj4gKwkJCXdtYigpOw0KPiArCQkJaHdfZHMtPmZpZWxkLm93biA9IERNQV9PV047DQo+ICsJ CQkvKiBFbnN1cmUgb3duZXJzaGlwIGNoYW5nZWQgYmVmb3JlIG1vdmluZyBmb3J3YXJkICovDQo+ ICsJCQl3bWIoKTsNCj4gKwkJCW51bSsrOw0KPiArCQkJYWRkciArPSBsZW47DQo+ICsJCQlhdmFp bCAtPSBsZW47DQo+ICsJCX0gd2hpbGUgKGF2YWlsKTsNCj4gKwl9DQo+ICsNCj4gKwlkcy0+c2l6 ZSA9IHRvdGFsOw0KPiArCXByZXBfc2xhdmVfYnVyc3RfbGVuKGMpOw0KPiArDQo+ICsJcmV0dXJu IHZjaGFuX3R4X3ByZXAoJmMtPnZjaGFuLCAmZHMtPnZkZXNjLCBETUFfQ1RSTF9BQ0spOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgaW50DQo+ICtkbWFfc2xhdmVfY29uZmlnKHN0cnVjdCBkbWFfY2hh biAqY2hhbiwgc3RydWN0IGRtYV9zbGF2ZV9jb25maWcgKmNmZykNCj4gK3sNCj4gKwlzdHJ1Y3Qg bGRtYV9jaGFuICpjID0gdG9fbGRtYV9jaGFuKGNoYW4pOw0KPiArDQo+ICsJbWVtY3B5KCZjLT5j b25maWcsIGNmZywgc2l6ZW9mKGMtPmNvbmZpZykpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBpbnQgZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFf Y2hhbiAqY2hhbikNCj4gK3sNCj4gKwlzdHJ1Y3QgbGRtYV9jaGFuICpjID0gdG9fbGRtYV9jaGFu KGNoYW4pOw0KPiArCXN0cnVjdCBsZG1hX2RldiAqZCA9IHRvX2xkbWFfZGV2KGMtPnZjaGFuLmNo YW4uZGV2aWNlKTsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjLT52Y2hhbi5jaGFuLmRldmlj ZS0+ZGV2Ow0KPiArCXNpemVfdAlkZXNjX3N6Ow0KPiArDQo+ICsJaWYgKGQtPnZlciA+IERNQV9W RVIyMikgew0KPiArCQljLT5mbGFncyB8PSBDSEFOX0lOX1VTRTsNCj4gKwkJcmV0dXJuIDA7DQo+ ICsJfQ0KPiArDQo+ICsJaWYgKGMtPmRlc2NfcG9vbCkNCj4gKwkJcmV0dXJuIGMtPmRlc2NfbnVt Ow0KPiArDQo+ICsJZGVzY19zeiA9IGMtPmRlc2NfbnVtICogc2l6ZW9mKHN0cnVjdCBkdzJfZGVz Yyk7DQo+ICsJYy0+ZGVzY19wb29sID0gZG1hX3Bvb2xfY3JlYXRlKGMtPm5hbWUsIGRldiwgZGVz Y19zeiwNCj4gKwkJCQkgICAgICAgX19hbGlnbm9mX18oc3RydWN0IGR3Ml9kZXNjKSwgMCk7DQo+ ICsNCj4gKwlpZiAoIWMtPmRlc2NfcG9vbCkgew0KPiArCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0 byBhbGxvY2F0ZSBkZXNjcmlwdG9yIHBvb2xcbiIpOw0KPiArCQlyZXR1cm4gLUVOT01FTTsNCj4g Kwl9DQo+ICsNCj4gKwlyZXR1cm4gYy0+ZGVzY19udW07DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGRtYV9mcmVlX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikNCj4gK3sN Cj4gKwlzdHJ1Y3QgbGRtYV9jaGFuICpjID0gdG9fbGRtYV9jaGFuKGNoYW4pOw0KPiArCXN0cnVj dCBsZG1hX2RldiAqZCA9IHRvX2xkbWFfZGV2KGMtPnZjaGFuLmNoYW4uZGV2aWNlKTsNCj4gKw0K PiArCWlmIChkLT52ZXIgPT0gRE1BX1ZFUjIyKSB7DQo+ICsJCWRtYV9wb29sX2Rlc3Ryb3koYy0+ ZGVzY19wb29sKTsNCj4gKwkJYy0+ZGVzY19wb29sID0gTlVMTDsNCj4gKwkJdmNoYW5fZnJlZV9j aGFuX3Jlc291cmNlcyh0b192aXJ0X2NoYW4oY2hhbikpOw0KPiArCQlsZG1hX2NoYW5fcmVzZXQo Yyk7DQo+ICsJfSBlbHNlIHsNCj4gKwkJYy0+ZmxhZ3MgJj0gfkNIQU5fSU5fVVNFOw0KPiArCX0N Cj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgZG1hX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3 b3JrKQ0KPiArew0KPiArCXN0cnVjdCBsZG1hX2NoYW4gKmMgPSBjb250YWluZXJfb2Yod29yaywg c3RydWN0IGxkbWFfY2hhbiwgd29yayk7DQo+ICsJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlw dG9yICp0eCA9ICZjLT5kcy0+dmRlc2MudHg7DQo+ICsJc3RydWN0IHZpcnRfZG1hX2NoYW4gKnZj ID0gJmMtPnZjaGFuOw0KPiArCXN0cnVjdCBkbWFlbmdpbmVfZGVzY19jYWxsYmFjayBjYjsNCj4g KwlzdHJ1Y3QgdmlydF9kbWFfZGVzYyAqdmQsICpfdmQ7DQo+ICsJdW5zaWduZWQgbG9uZyBmbGFn czsNCj4gKwlMSVNUX0hFQUQoaGVhZCk7DQo+ICsNCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmYy0+ dmNoYW4ubG9jaywgZmxhZ3MpOw0KPiArCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmdmMtPmRlc2Nf Y29tcGxldGVkLCAmaGVhZCk7DQo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYy0+dmNoYW4u bG9jaywgZmxhZ3MpOw0KPiArCWRtYWVuZ2luZV9kZXNjX2dldF9jYWxsYmFjayh0eCwgJmNiKTsN Cj4gKwlkbWFfY29va2llX2NvbXBsZXRlKHR4KTsNCj4gKwlkbWFlbmdpbmVfZGVzY19jYWxsYmFj a19pbnZva2UoJmNiLCBOVUxMKTsNCj4gKw0KPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2 ZCwgX3ZkLCAmaGVhZCwgbm9kZSkgew0KPiArCQlkbWFlbmdpbmVfZGVzY19nZXRfY2FsbGJhY2so dHgsICZjYik7DQo+ICsJCWRtYV9jb29raWVfY29tcGxldGUodHgpOw0KPiArCQlsaXN0X2RlbCgm dmQtPm5vZGUpOw0KPiArCQlkbWFlbmdpbmVfZGVzY19jYWxsYmFja19pbnZva2UoJmNiLCBOVUxM KTsNCj4gKw0KPiArCQl2Y2hhbl92ZGVzY19maW5pKHZkKTsNCj4gKwl9DQo+ICsJYy0+ZHMgPSBO VUxMOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiArdXBkYXRlX2J1cnN0X2xlbl92MjIo c3RydWN0IGxkbWFfY2hhbiAqYywgc3RydWN0IGxkbWFfcG9ydCAqcCwgdTMyDQo+IGJ1cnN0KQ0K PiArew0KPiArCWlmIChsZG1hX2NoYW5fdHgoYykpDQo+ICsJCXAtPnR4YmwgPSBpbG9nMihidXJz dCk7DQo+ICsJZWxzZQ0KPiArCQlwLT5yeGJsID0gaWxvZzIoYnVyc3QpOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgdm9pZA0KPiArdXBkYXRlX2J1cnN0X2xlbl92M1goc3RydWN0IGxkbWFfY2hhbiAq Yywgc3RydWN0IGxkbWFfcG9ydCAqcCwgdTMyDQo+IGJ1cnN0KQ0KPiArew0KPiArCWlmIChsZG1h X2NoYW5fdHgoYykpDQo+ICsJCXAtPnR4YmwgPSBidXJzdDsNCj4gKwllbHNlDQo+ICsJCXAtPnJ4 YmwgPSBidXJzdDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludA0KPiArdXBkYXRlX2NsaWVudF9j b25maWdzKHN0cnVjdCBvZl9kbWEgKm9mZG1hLCBzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzDQo+ICpz cGVjKQ0KPiArew0KPiArCXN0cnVjdCBsZG1hX2RldiAqZCA9IG9mZG1hLT5vZl9kbWFfZGF0YTsN Cj4gKwl1MzIgY2hhbl9pZCA9ICBzcGVjLT5hcmdzWzBdOw0KPiArCXUzMiBwb3J0X2lkID0gIHNw ZWMtPmFyZ3NbMV07DQo+ICsJdTMyIGJ1cnN0ID0gc3BlYy0+YXJnc1syXTsNCj4gKwlzdHJ1Y3Qg bGRtYV9wb3J0ICpwOw0KPiArCXN0cnVjdCBsZG1hX2NoYW4gKmM7DQo+ICsNCj4gKwlpZiAoY2hh bl9pZCA+PSBkLT5jaGFuX25ycyB8fCBwb3J0X2lkID49IGQtPnBvcnRfbnJzKQ0KPiArCQlyZXR1 cm4gMDsNCj4gKw0KPiArCXAgPSAmZC0+cG9ydHNbcG9ydF9pZF07DQo+ICsJYyA9ICZkLT5jaGFu c1tjaGFuX2lkXTsNCj4gKwljLT5wb3J0ID0gcDsNCj4gKw0KPiArCWlmIChkLT52ZXIgPT0gRE1B X1ZFUjIyKQ0KPiArCQl1cGRhdGVfYnVyc3RfbGVuX3YyMihjLCBwLCBidXJzdCk7DQo+ICsJZWxz ZQ0KPiArCQl1cGRhdGVfYnVyc3RfbGVuX3YzWChjLCBwLCBidXJzdCk7DQo+ICsNCj4gKwlsZG1h X3BvcnRfY2ZnKHApOw0KPiArDQo+ICsJcmV0dXJuIDE7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBz dHJ1Y3QgZG1hX2NoYW4gKmxkbWFfeGxhdGUoc3RydWN0IG9mX3BoYW5kbGVfYXJncyAqc3BlYywN Cj4gKwkJCQkgICBzdHJ1Y3Qgb2ZfZG1hICpvZmRtYSkNCj4gK3sNCj4gKwlzdHJ1Y3QgbGRtYV9k ZXYgKmQgPSBvZmRtYS0+b2ZfZG1hX2RhdGE7DQo+ICsJdTMyIGNoYW5faWQgPSAgc3BlYy0+YXJn c1swXTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJaWYgKCFzcGVjLT5hcmdzX2NvdW50KQ0KPiAr CQlyZXR1cm4gTlVMTDsNCj4gKw0KPiArCS8qIGlmIGFyZ3NfY291bnQgaXMgMSBkcml2ZXIgdXNl IGRlZmF1bHQgc2V0dGluZ3MgKi8NCj4gKwlpZiAoc3BlYy0+YXJnc19jb3VudCA+IDEpIHsNCj4g KwkJcmV0ID0gdXBkYXRlX2NsaWVudF9jb25maWdzKG9mZG1hLCBzcGVjKTsNCj4gKwkJaWYgKCFy ZXQpDQo+ICsJCQlyZXR1cm4gTlVMTDsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gZG1hX2dldF9z bGF2ZV9jaGFubmVsKCZkLT5jaGFuc1tjaGFuX2lkXS52Y2hhbi5jaGFuKTsNCj4gK30NCj4gKw0K PiArc3RhdGljIHZvaWQgbGRtYV9kbWFfaW5pdF92MjIoaW50IGksIHN0cnVjdCBsZG1hX2RldiAq ZCkNCj4gK3sNCj4gKwlzdHJ1Y3QgbGRtYV9jaGFuICpjOw0KPiArDQo+ICsJYyA9ICZkLT5jaGFu c1tpXTsNCj4gKwljLT5uciA9IGk7IC8qIFJlYWwgY2hhbm5lbCBudW1iZXIgKi8NCj4gKwljLT5y c3QgPSBETUFfQ0hBTl9SU1Q7DQo+ICsJYy0+ZGVzY19udW0gPSBETUFfREZUX0RFU0NfTlVNOw0K PiArCXNucHJpbnRmKGMtPm5hbWUsIHNpemVvZihjLT5uYW1lKSwgImNoYW4lZCIsIGMtPm5yKTsN Cj4gKwlJTklUX1dPUksoJmMtPndvcmssIGRtYV93b3JrKTsNCj4gKwljLT52Y2hhbi5kZXNjX2Zy ZWUgPSBkbWFfZnJlZV9kZXNjX3Jlc291cmNlOw0KPiArCXZjaGFuX2luaXQoJmMtPnZjaGFuLCAm ZC0+ZG1hX2Rldik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGxkbWFfZG1hX2luaXRfdjNY KGludCBpLCBzdHJ1Y3QgbGRtYV9kZXYgKmQpDQo+ICt7DQo+ICsJc3RydWN0IGxkbWFfY2hhbiAq YzsNCj4gKw0KPiArCWMgPSAmZC0+Y2hhbnNbaV07DQo+ICsJYy0+ZGF0YV9lbmRpYW4gPSBETUFf REZUX0VORElBTjsNCj4gKwljLT5kZXNjX2VuZGlhbiA9IERNQV9ERlRfRU5ESUFOOw0KPiArCWMt PmRhdGFfZW5kaWFuX2VuID0gZmFsc2U7DQo+ICsJYy0+ZGVzY19lbmRpYW5fZW4gPSBmYWxzZTsN Cj4gKwljLT5kZXNjX3J4X25wID0gZmFsc2U7DQo+ICsJYy0+ZmxhZ3MgfD0gREVWSUNFX0FMTE9D X0RFU0M7DQo+ICsJYy0+b25vZmYgPSBETUFfQ0hfT0ZGOw0KPiArCWMtPnJzdCA9IERNQV9DSEFO X1JTVDsNCj4gKwljLT5hYmNfZW4gPSB0cnVlOw0KPiArCWMtPmhkcm1fY3N1bSA9IGZhbHNlOw0K PiArCWMtPmJvZmZfbGVuID0gMDsNCj4gKwljLT5uciA9IGk7DQo+ICsJYy0+dmNoYW4uZGVzY19m cmVlID0gZG1hX2ZyZWVfZGVzY19yZXNvdXJjZTsNCj4gKwl2Y2hhbl9pbml0KCZjLT52Y2hhbiwg JmQtPmRtYV9kZXYpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGxkbWFfaW5pdF92MjIoc3Ry dWN0IGxkbWFfZGV2ICpkLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlDQo+ICpwZGV2KQ0KPiArew0K PiArCWludCByZXQ7DQo+ICsNCj4gKwlyZXQgPSBkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZC0+ ZGV2LCAiZG1hLWNoYW5uZWxzIiwgJmQtDQo+ID5jaGFuX25ycyk7DQo+ICsJaWYgKHJldCA8IDAp IHsNCj4gKwkJZGV2X2VycihkLT5kZXYsICJ1bmFibGUgdG8gcmVhZCBkbWEtY2hhbm5lbHMgcHJv cGVydHlcbiIpOw0KPiArCQlyZXR1cm4gcmV0Ow0KPiArCX0NCj4gKw0KPiArCWQtPmlycSA9IHBs YXRmb3JtX2dldF9pcnEocGRldiwgMCk7DQo+ICsJaWYgKGQtPmlycSA8IDApDQo+ICsJCXJldHVy biBkLT5pcnE7DQo+ICsNCj4gKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGQt PmlycSwgZG1hX2ludGVycnVwdCwgMCwNCj4gKwkJCSAgICAgICBEUklWRVJfTkFNRSwgZCk7DQo+ ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCWQtPndxID0gYWxsb2Nfb3Jk ZXJlZF93b3JrcXVldWUoImRtYV93cSIsIFdRX01FTV9SRUNMQUlNIHwNCj4gKwkJCVdRX0hJR0hQ UkkpOw0KPiArCWlmICghZC0+d3EpDQo+ICsJCXJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsJcmV0 dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGxkbWFfY2xrX2Rpc2FibGUodm9pZCAq ZGF0YSkNCj4gK3sNCj4gKwlzdHJ1Y3QgbGRtYV9kZXYgKmQgPSBkYXRhOw0KPiArDQo+ICsJY2xr X2Rpc2FibGVfdW5wcmVwYXJlKGQtPmNvcmVfY2xrKTsNCj4gKwlyZXNldF9jb250cm9sX2Fzc2Vy dChkLT5yc3QpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0IGRtYV9kZXZfb3BzIGRtYTBf b3BzID0gew0KPiArCS5kZXZpY2VfYWxsb2NfY2hhbl9yZXNvdXJjZXMgPSBkbWFfYWxsb2NfY2hh bl9yZXNvdXJjZXMsDQo+ICsJLmRldmljZV9mcmVlX2NoYW5fcmVzb3VyY2VzID0gZG1hX2ZyZWVf Y2hhbl9yZXNvdXJjZXMsDQo+ICsJLmRldmljZV9jb25maWcgPSBkbWFfc2xhdmVfY29uZmlnLA0K PiArCS5kZXZpY2VfcHJlcF9zbGF2ZV9zZyA9IGRtYV9wcmVwX3NsYXZlX3NnLA0KPiArCS5kZXZp Y2VfdHhfc3RhdHVzID0gZG1hX3R4X3N0YXR1cywNCj4gKwkuZGV2aWNlX3BhdXNlID0gZG1hX3Bh dXNlX2NoYW4sDQo+ICsJLmRldmljZV9yZXN1bWUgPSBkbWFfcmVzdW1lX2NoYW4sDQo+ICsJLmRl dmljZV90ZXJtaW5hdGVfYWxsID0gZG1hX3Rlcm1pbmF0ZV9hbGwsDQo+ICsJLmRldmljZV9zeW5j aHJvbml6ZSA9IGRtYV9zeW5jaHJvbml6ZSwNCj4gKwkuZGV2aWNlX2lzc3VlX3BlbmRpbmcgPSBk bWFfaXNzdWVfcGVuZGluZywNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3QgZG1hX2Rldl9v cHMgaGRtYV9vcHMgPSB7DQo+ICsJLmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlcyA9IGRtYV9h bGxvY19jaGFuX3Jlc291cmNlcywNCj4gKwkuZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMgPSBk bWFfZnJlZV9jaGFuX3Jlc291cmNlcywNCj4gKwkuZGV2aWNlX3Rlcm1pbmF0ZV9hbGwgPSBkbWFf dGVybWluYXRlX2FsbCwNCj4gKwkuZGV2aWNlX2lzc3VlX3BlbmRpbmcgPSBkbWFfaXNzdWVfcGVu ZGluZywNCj4gKwkuZGV2aWNlX3R4X3N0YXR1cyA9IGRtYV90eF9zdGF0dXMsDQo+ICsJLmRldmlj ZV9yZXN1bWUgPSBkbWFfcmVzdW1lX2NoYW4sDQo+ICsJLmRldmljZV9wYXVzZSA9IGRtYV9wYXVz ZV9jaGFuLA0KPiArfTsNCg0KSXQgaXMgbm90IGVhc3kgdG8gc2VlLCBhcyB0aGUgb3JkZXJpbmcg aXMgZGlmZmVyZW50LCBidXQgYWxsIHRoZSBmdW5jdGlvbnMNCmZvciBoZG1hX29wcyBhcmUgdGhl IHNhbWUgYXMgZm9yIGRtYTBfb3BzLiBBbmQgdGhlc2Ugc3RydWN0cyBhcmUgb25seSB1c2VkDQph cyB0ZW1wbGF0ZSwgYXNzaWduaW5nIHRoZSBmdW5jdGlvbiBwb2ludGVycyBvbmUgYnkgb25lIHRv IHRoZSBkbWFfZGV2aWNlIHN0cnVjdC4NClNvIHdoeSBub3QgYXNzaWduIHRoZSBmdW5jdGlvbnMg ZGlyZWN0bHkgaW4gdGhlIHByb2JlIGZ1bmN0aW9uLA0Kd2l0aCBhIGNoZWNrIGZvciAiZG1hMCIg b24gdGhlIHNsYXZlIGZ1bmN0aW9ucz8NCkFueXdheSwgaWYgeW91IGtlZXAgdGhpcywgeW91IHNo b3VsZCBjaGFuZ2UgdGhlbSB0byAiY29uc3QiLg0KDQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgbGRtYV9pbnN0X2RhdGEgZG1hMCA9IHsNCj4gKwkubmFtZSA9ICJkbWEwIiwNCj4gKwkub3Bz ID0gJmRtYTBfb3BzLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBsZG1hX2lu c3RfZGF0YSBkbWEydHggPSB7DQo+ICsJLm5hbWUgPSAiZG1hMnR4IiwNCj4gKwkudHlwZSA9IERN QV9UWVBFX1RYLA0KPiArCS5vcHMgPSAmaGRtYV9vcHMsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGxkbWFfaW5zdF9kYXRhIGRtYTFyeCA9IHsNCj4gKwkubmFtZSA9ICJkbWEx cngiLA0KPiArCS50eXBlID0gRE1BX1RZUEVfUlgsDQo+ICsJLm9wcyA9ICZoZG1hX29wcywNCj4g K307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbGRtYV9pbnN0X2RhdGEgZG1hMXR4ID0g ew0KPiArCS5uYW1lID0gImRtYTF0eCIsDQo+ICsJLnR5cGUgPSBETUFfVFlQRV9UWCwNCj4gKwku b3BzID0gJmhkbWFfb3BzLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBsZG1h X2luc3RfZGF0YSBkbWEwdHggPSB7DQo+ICsJLm5hbWUgPSAiZG1hMHR4IiwNCj4gKwkudHlwZSA9 IERNQV9UWVBFX1RYLA0KPiArCS5vcHMgPSAmaGRtYV9vcHMsDQo+ICt9Ow0KPiArDQo+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGxkbWFfaW5zdF9kYXRhIGRtYTMgPSB7DQo+ICsJLm5hbWUgPSAiZG1h MyIsDQo+ICsJLnR5cGUgPSBETUFfVFlQRV9NQ1BZLA0KPiArCS5vcHMgPSAmaGRtYV9vcHMsDQo+ ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGxkbWFfaW5zdF9kYXRhIHRvZV9kbWEz MCA9IHsNCj4gKwkubmFtZSA9ICJ0b2VfZG1hMzAiLA0KPiArCS50eXBlID0gRE1BX1RZUEVfTUNQ WSwNCj4gKwkub3BzID0gJmhkbWFfb3BzLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBsZG1hX2luc3RfZGF0YSB0b2VfZG1hMzEgPSB7DQo+ICsJLm5hbWUgPSAidG9lX2RtYTMx IiwNCj4gKwkudHlwZSA9IERNQV9UWVBFX01DUFksDQo+ICsJLm9wcyA9ICZoZG1hX29wcywNCj4g K307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGludGVsX2xkbWFf bWF0Y2hbXSA9IHsNCj4gKwl7IC5jb21wYXRpYmxlID0gImludGVsLGxnbS1jZG1hIiwgLmRhdGEg PSAmZG1hMH0sDQo+ICsJeyAuY29tcGF0aWJsZSA9ICJpbnRlbCxsZ20tZG1hMnR4IiwgLmRhdGEg PSAmZG1hMnR4fSwNCj4gKwl7IC5jb21wYXRpYmxlID0gImludGVsLGxnbS1kbWExcngiLCAuZGF0 YSA9ICZkbWExcnh9LA0KPiArCXsgLmNvbXBhdGlibGUgPSAiaW50ZWwsbGdtLWRtYTF0eCIsIC5k YXRhID0gJmRtYTF0eH0sDQo+ICsJeyAuY29tcGF0aWJsZSA9ICJpbnRlbCxsZ20tZG1hMHR4Iiwg LmRhdGEgPSAmZG1hMHR4fSwNCj4gKwl7IC5jb21wYXRpYmxlID0gImludGVsLGxnbS1kbWEzIiwg LmRhdGEgPSAmZG1hM30sDQo+ICsJeyAuY29tcGF0aWJsZSA9ICJpbnRlbCxsZ20tdG9lLWRtYTMw IiwgLmRhdGEgPSAmdG9lX2RtYTMwfSwNCj4gKwl7IC5jb21wYXRpYmxlID0gImludGVsLGxnbS10 b2UtZG1hMzEiLCAuZGF0YSA9ICZ0b2VfZG1hMzF9LA0KPiArCXt9DQo+ICt9Ow0KDQpJZiB5b3Ug YWNjZXB0IHRoZSBzdWdnZXN0aW9uIEkgZGlkIG9uIHRoZSBiaW5kaW5nLCB0aGUgIi5kYXRhIiBz aG91bGQNCnByb2JhYmx5IHBvaW50IGRpcmVjdGx5IHRvIHRoZSAiLm9wcyIsIG9yIGp1c3QgYSBm bGFnIGZvciB0aGUgdHlwZS4NCldoaWNoIGFsc28gbWFrZXMgdGhlICJuYW1lIiBpbiB0aGUgc3Ry dWN0cyBvYnNvbGV0ZSwgYXMgdGhleSBhcmUgbm90DQpwZXIgaW5zdGFuY2UgYW55bW9yZS4NCg0K PiArDQo+ICtzdGF0aWMgaW50IGludGVsX2xkbWFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikNCj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Ow0KPiAr CXN0cnVjdCBkbWFfZGV2aWNlICpkbWFfZGV2Ow0KPiArCXVuc2lnbmVkIGxvbmcgY2hfbWFzazsN Cj4gKwlzdHJ1Y3QgbGRtYV9jaGFuICpjOw0KPiArCXN0cnVjdCBsZG1hX3BvcnQgKnA7DQo+ICsJ c3RydWN0IGxkbWFfZGV2ICpkOw0KPiArCXUzMiBpZCwgYml0biA9IDMyLCBqOw0KPiArCWludCBp LCByZXQ7DQo+ICsNCj4gKwlkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkKSwgR0ZQX0tF Uk5FTCk7DQo+ICsJaWYgKCFkKQ0KPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArCS8qIExp bmsgY29udHJvbGxlciB0byBwbGF0Zm9ybSBkZXZpY2UgKi8NCj4gKwlkLT5kZXYgPSAmcGRldi0+ ZGV2Ow0KPiArDQo+ICsJZC0+aW5zdCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpOw0KPiAr CWlmICghZC0+aW5zdCkgew0KPiArCQlkZXZfZXJyKGRldiwgIk5vIGRldmljZSBtYXRjaCBmb3Vu ZFxuIik7DQo+ICsJCXJldHVybiAtRU5PREVWOw0KPiArCX0NCj4gKw0KPiArCWQtPmJhc2UgPSBk ZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCk7DQo+ICsJaWYgKElTX0VSUihk LT5iYXNlKSkNCj4gKwkJcmV0dXJuIFBUUl9FUlIoZC0+YmFzZSk7DQo+ICsNCj4gKwkvKiBQb3dl ciB1cCBhbmQgcmVzZXQgdGhlIGRtYSBlbmdpbmUsIHNvbWUgRE1BcyBhbHdheXMgb24/PyAqLw0K PiArCWQtPmNvcmVfY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsKGRldiwgTlVMTCk7DQo+ICsJ aWYgKElTX0VSUihkLT5jb3JlX2NsaykpDQo+ICsJCXJldHVybiBQVFJfRVJSKGQtPmNvcmVfY2xr KTsNCj4gKwljbGtfcHJlcGFyZV9lbmFibGUoZC0+Y29yZV9jbGspOw0KPiArDQo+ICsJZC0+cnN0 ID0gZGV2bV9yZXNldF9jb250cm9sX2dldF9vcHRpb25hbChkZXYsIE5VTEwpOw0KPiArCWlmIChJ U19FUlIoZC0+cnN0KSkNCj4gKwkJcmV0dXJuIFBUUl9FUlIoZC0+cnN0KTsNCj4gKwlyZXNldF9j b250cm9sX2RlYXNzZXJ0KGQtPnJzdCk7DQo+ICsNCj4gKwlyZXQgPSBkZXZtX2FkZF9hY3Rpb25f b3JfcmVzZXQoZGV2LCBsZG1hX2Nsa19kaXNhYmxlLCBkKTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJ CWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldCwgJWRcbiIs DQo+IHJldCk7DQo+ICsJCXJldHVybiByZXQ7DQo+ICsJfQ0KPiArDQo+ICsJaWQgPSByZWFkbChk LT5iYXNlICsgRE1BX0lEKTsNCj4gKwlkLT5jaGFuX25ycyA9IEZJRUxEX0dFVChETUFfSURfQ0hO UiwgaWQpOw0KPiArCWQtPnBvcnRfbnJzID0gRklFTERfR0VUKERNQV9JRF9QTlIsIGlkKTsNCj4g KwlkLT52ZXIgPSBGSUVMRF9HRVQoRE1BX0lEX1JFViwgaWQpOw0KPiArDQo+ICsJaWYgKGlkICYg RE1BX0lEX0FXXzM2QikNCj4gKwkJZC0+ZmxhZ3MgfD0gRE1BX0FERFJfMzZCSVQ7DQo+ICsNCj4g KwlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICYmIChpZCAmIERNQV9JRF9BV18zNkIpKQ0K PiArCQliaXRuID0gMzY7DQo+ICsNCj4gKwlpZiAoaWQgJiBETUFfSURfRFdfMTI4QikNCj4gKwkJ ZC0+ZmxhZ3MgfD0gRE1BX0RBVEFfMTI4QklUOw0KPiArDQo+ICsJcmV0ID0gZG1hX3NldF9tYXNr X2FuZF9jb2hlcmVudChkZXYsIERNQV9CSVRfTUFTSyhiaXRuKSk7DQo+ICsJaWYgKHJldCkgew0K PiArCQlkZXZfZXJyKGRldiwgIk5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvblxuIik7DQo+ICsJ CXJldHVybiByZXQ7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGQtPnZlciA9PSBETUFfVkVSMjIpIHsN Cj4gKwkJcmV0ID0gbGRtYV9pbml0X3YyMihkLCBwZGV2KTsNCj4gKwkJaWYgKHJldCkNCj4gKwkJ CXJldHVybiByZXQ7DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0gZGV2aWNlX3Byb3BlcnR5X3JlYWRf dTMyKGRldiwgImRtYS1jaGFubmVsLW1hc2siLCAmZC0NCj4gPmNoYW5uZWxzX21hc2spOw0KPiAr CWlmIChyZXQgPCAwKQ0KPiArCQlkLT5jaGFubmVsc19tYXNrID0gR0VOTUFTSyhkLT5jaGFuX25y cyAtIDEsIDApOw0KPiArDQo+ICsJZG1hX2RldiA9ICZkLT5kbWFfZGV2Ow0KPiArDQo+ICsJZG1h X2NhcF96ZXJvKGRtYV9kZXYtPmNhcF9tYXNrKTsNCj4gKwlkbWFfY2FwX3NldChETUFfU0xBVkUs IGRtYV9kZXYtPmNhcF9tYXNrKTsNCj4gKw0KPiArCS8qIENoYW5uZWwgaW5pdGlhbGl6YXRpb25z ICovDQo+ICsJSU5JVF9MSVNUX0hFQUQoJmRtYV9kZXYtPmNoYW5uZWxzKTsNCj4gKw0KPiArCS8q IFBvcnQgSW5pdGlhbGl6YXRpb25zICovDQo+ICsJZC0+cG9ydHMgPSBkZXZtX2tjYWxsb2MoZGV2 LCBkLT5wb3J0X25ycywgc2l6ZW9mKCpwKSwNCj4gR0ZQX0tFUk5FTCk7DQo+ICsJaWYgKCFkLT5w b3J0cykNCj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKwkvKiBDaGFubmVscyBJbml0aWFs aXphdGlvbnMgKi8NCj4gKwlkLT5jaGFucyA9IGRldm1fa2NhbGxvYyhkLT5kZXYsIGQtPmNoYW5f bnJzLCBzaXplb2YoKmMpLA0KPiBHRlBfS0VSTkVMKTsNCj4gKwlpZiAoIWQtPmNoYW5zKQ0KPiAr CQlyZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBkLT5wb3J0X25yczsg aSsrKSB7DQo+ICsJCXAgPSAmZC0+cG9ydHNbaV07DQo+ICsJCXAtPnBvcnRpZCA9IGk7DQo+ICsJ CXAtPmxkZXYgPSBkOw0KPiArCX0NCj4gKw0KPiArCXJldCA9IGxkbWFfY2ZnX2luaXQoZCk7DQo+ ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCWRtYV9kZXYtPmRldiA9ICZw ZGV2LT5kZXY7DQo+ICsNCj4gKwljaF9tYXNrID0gKHVuc2lnbmVkIGxvbmcpZC0+Y2hhbm5lbHNf bWFzazsNCj4gKwlmb3JfZWFjaF9zZXRfYml0KGosICZjaF9tYXNrLCBkLT5jaGFuX25ycykgew0K PiArCQlpZiAoZC0+dmVyID09IERNQV9WRVIyMikNCj4gKwkJCWxkbWFfZG1hX2luaXRfdjIyKGos IGQpOw0KPiArCQllbHNlDQo+ICsJCQlsZG1hX2RtYV9pbml0X3YzWChqLCBkKTsNCj4gKwl9DQo+ ICsNCj4gKwlkbWFfZGV2LT5kZXZpY2VfYWxsb2NfY2hhbl9yZXNvdXJjZXMgPQ0KPiArCQlkLT5p bnN0LT5vcHMtPmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlczsNCj4gKwlkbWFfZGV2LT5kZXZp Y2VfZnJlZV9jaGFuX3Jlc291cmNlcyA9DQo+ICsJCWQtPmluc3QtPm9wcy0+ZGV2aWNlX2ZyZWVf Y2hhbl9yZXNvdXJjZXM7DQo+ICsJZG1hX2Rldi0+ZGV2aWNlX3Rlcm1pbmF0ZV9hbGwgPSBkLT5p bnN0LT5vcHMtDQo+ID5kZXZpY2VfdGVybWluYXRlX2FsbDsNCj4gKwlkbWFfZGV2LT5kZXZpY2Vf aXNzdWVfcGVuZGluZyA9IGQtPmluc3QtPm9wcy0NCj4gPmRldmljZV9pc3N1ZV9wZW5kaW5nOw0K PiArCWRtYV9kZXYtPmRldmljZV90eF9zdGF0dXMgPSBkLT5pbnN0LT5vcHMtPmRldmljZV90eF9z dGF0dXM7DQo+ICsJZG1hX2Rldi0+ZGV2aWNlX3Jlc3VtZSA9IGQtPmluc3QtPm9wcy0+ZGV2aWNl X3Jlc3VtZTsNCj4gKwlkbWFfZGV2LT5kZXZpY2VfcGF1c2UgPSBkLT5pbnN0LT5vcHMtPmRldmlj ZV9wYXVzZTsNCj4gKwlkbWFfZGV2LT5kZXZpY2VfY29uZmlnID0gZC0+aW5zdC0+b3BzLT5kZXZp Y2VfY29uZmlnOw0KPiArCWRtYV9kZXYtPmRldmljZV9wcmVwX3NsYXZlX3NnID0gZC0+aW5zdC0+ b3BzLQ0KPiA+ZGV2aWNlX3ByZXBfc2xhdmVfc2c7DQo+ICsJZG1hX2Rldi0+ZGV2aWNlX3N5bmNo cm9uaXplID0gZC0+aW5zdC0+b3BzLT5kZXZpY2Vfc3luY2hyb25pemU7DQo+ICsNCj4gKwlpZiAo ZC0+dmVyID09IERNQV9WRVIyMikgew0KPiArCQlkbWFfZGV2LT5zcmNfYWRkcl93aWR0aHMgPSBC SVQoRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVMpOw0KPiArCQlkbWFfZGV2LT5kc3RfYWRkcl93 aWR0aHMgPSBCSVQoRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVMpOw0KPiArCQlkbWFfZGV2LT5k aXJlY3Rpb25zID0gQklUKERNQV9NRU1fVE9fREVWKSB8DQo+ICsJCQkJICAgICAgQklUKERNQV9E RVZfVE9fTUVNKTsNCj4gKwkJZG1hX2Rldi0+cmVzaWR1ZV9ncmFudWxhcml0eSA9DQo+ICsJCQkJ CURNQV9SRVNJRFVFX0dSQU5VTEFSSVRZX0RFU0NSSVBUT1I7DQo+ICsJfQ0KPiArDQo+ICsJcGxh dGZvcm1fc2V0X2RydmRhdGEocGRldiwgZCk7DQo+ICsNCj4gKwlsZG1hX2Rldl9pbml0KGQpOw0K PiArDQo+ICsJcmV0ID0gZG1hX2FzeW5jX2RldmljZV9yZWdpc3RlcihkbWFfZGV2KTsNCj4gKwlp ZiAocmV0KSB7DQo+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHNsYXZlIERN QSBlbmdpbmUNCj4gZGV2aWNlXG4iKTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsNCj4g KwlyZXQgPSBvZl9kbWFfY29udHJvbGxlcl9yZWdpc3RlcihwZGV2LT5kZXYub2Zfbm9kZSwgbGRt YV94bGF0ZSwNCj4gZCk7DQo+ICsJaWYgKHJldCkgew0KPiArCQlkZXZfZXJyKGRldiwgIkZhaWxl ZCB0byByZWdpc3RlciBvZiBETUEgY29udHJvbGxlclxuIik7DQo+ICsJCWRtYV9hc3luY19kZXZp Y2VfdW5yZWdpc3RlcihkbWFfZGV2KTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsNCj4g KwlkZXZfaW5mbyhkZXYsICJJbml0IGRvbmUgLSByZXY6ICV4LCBwb3J0czogJWQgY2hhbm5lbHM6 ICVkXG4iLCBkLQ0KPiA+dmVyLA0KPiArCQkgZC0+cG9ydF9ucnMsIGQtPmNoYW5fbnJzKTsNCj4g Kw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2Ry aXZlciBpbnRlbF9sZG1hX2RyaXZlciA9IHsNCj4gKwkucHJvYmUgPSBpbnRlbF9sZG1hX3Byb2Jl LA0KPiArCS5kcml2ZXIgPSB7DQo+ICsJCS5uYW1lID0gRFJJVkVSX05BTUUsDQo+ICsJCS5vZl9t YXRjaF90YWJsZSA9IGludGVsX2xkbWFfbWF0Y2gsDQo+ICsJfSwNCj4gK307DQo+ICsNCj4gKy8q DQo+ICsgKiBQZXJmb3JtIHRoaXMgZHJpdmVyIGFzIGRldmljZV9pbml0Y2FsbCB0byBtYWtlIHN1 cmUgaW5pdGlhbGl6YXRpb24NCj4gaGFwcGVucw0KPiArICogYmVmb3JlIGl0cyBETUEgY2xpZW50 cyBvZiBzb21lIGFyZSBwbGF0Zm9ybSBzcGVjaWZpYyBhbmQgYWxzbyB0bw0KPiBwcm92aWRlDQo+ ICsgKiByZWdpc3RlcmVkIERNQSBjaGFubmVscyBhbmQgRE1BIGNhcGFiaWxpdGllcyB0byBjbGll bnRzIGJlZm9yZQ0KPiB0aGVpcg0KPiArICogaW5pdGlhbGl6YXRpb24uDQo+ICsgKi8NCj4gK3N0 YXRpYyBpbnQgX19pbml0IGludGVsX2xkbWFfaW5pdCh2b2lkKQ0KPiArew0KPiArCXJldHVybiBw bGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmludGVsX2xkbWFfZHJpdmVyKTsNCj4gK30NCj4gKw0K PiArZGV2aWNlX2luaXRjYWxsKGludGVsX2xkbWFfaW5pdCk7DQo+IGRpZmYgLS1naXQgYS9pbmNs dWRlL2xpbnV4L2RtYS9sZ21fZG1hLmggYi9pbmNsdWRlL2xpbnV4L2RtYS9sZ21fZG1hLmgNCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi4zYTJlZTZhZDA3MTAN Cj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9pbmNsdWRlL2xpbnV4L2RtYS9sZ21fZG1hLmgNCj4g QEAgLTAsMCArMSwyNyBAQA0KPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAg Ki8NCj4gKy8qDQo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTYgfiAyMDE5IEludGVsIENvcnBvcmF0 aW9uLg0KDQpXZSBhbHJlYWR5IGhhdmUgMjAyMA0KDQo+ICsgKi8NCj4gKyNpZm5kZWYgTEdNX0RN QV9IDQo+ICsjZGVmaW5lIExHTV9ETUFfSA0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMu aD4NCj4gKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4NCj4gKw0KPiArLyohDQo+ICsgKiBc Zm4gaW50IGludGVsX2RtYV9jaGFuX2Rlc2NfY2ZnKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgZG1h X2FkZHJfdA0KPiBkZXNjX2Jhc2UsDQo+ICsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBkZXNjX251bSkNCj4gKyAqIFxicmllZiBDb25maWd1cmUgbG93IGxldmVsIGNoYW5u ZWwgZGVzY3JpcHRvcnMNCj4gKyAqIFxwYXJhbVtpbl0gY2hhbiAgIHBvaW50ZXIgdG8gRE1BIGNo YW5uZWwgdGhhdCB0aGUgY2xpZW50IGlzIHVzaW5nDQo+ICsgKiBccGFyYW1baW5dIGRlc2NfYmFz ZSAgIGRlc2NyaXB0b3IgYmFzZSBwaHlzaWNhbCBhZGRyZXNzDQo+ICsgKiBccGFyYW1baW5dIGRl c2NfbnVtICAgbnVtYmVyIG9mIGRlc2NyaXB0b3JzDQo+ICsgKiBccmV0dXJuICAgMCBvbiBzdWNj ZXNzDQo+ICsgKiBccmV0dXJuICAga2VybmVsIGJ1ZyByZXBvcnRlZCBvbiBmYWlsdXJlDQo+ICsg Kg0KPiArICogVGhpcyBmdW5jdGlvbiBjb25maWd1cmUgdGhlIGxvdyBsZXZlbCBjaGFubmVsIGRl c2NyaXB0b3JzLiBJdCB3aWxsDQo+IGJlDQo+ICsgKiB1c2VkIGJ5IENCTSB3aG9zZSBkZXNjcmlw dG9yIGlzIG5vdCBERFIsIGFjdHVhbGx5IHNvbWUgcmVnaXN0ZXJzLg0KDQpUaGUgdGVybSAiQ0JN IiBpcyBub3Qga25vd24gdG8gdGhlIGNvbW11bml0eS4NCklmIHRoaXMgaXMgbmVlZGVkIGZvciB0 aGUgQ0JNIGRyaXZlciwgSSB3b3VsZCBzdWdnZXN0IGFkZGluZyBpdCB0b2dldGhlciB3aXRoIHRo YXQgZHJpdmVyLg0KDQo+ICsgKi8NCj4gK2ludCBpbnRlbF9kbWFfY2hhbl9kZXNjX2NmZyhzdHJ1 Y3QgZG1hX2NoYW4gKmNoYW4sIGRtYV9hZGRyX3QNCj4gZGVzY19iYXNlLA0KPiArCQkJICAgIGlu dCBkZXNjX251bSk7DQo+ICsNCj4gKyNlbmRpZiAvKiBMR01fRE1BX0ggKi8NCj4gLS0NCj4gMi4x MS4wDQoNCg0KQmVzdCByZWdhcmRzLA0KVGhvbWFzDQo=