Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp10825829imu; Mon, 31 Dec 2018 07:27:58 -0800 (PST) X-Google-Smtp-Source: ALg8bN7Wxjao7SCKhHffv4x3Snt6VqZPZ1/2rgS18R2YAABQ+i601KXTuplPv9axmnP8ocfBbO1K X-Received: by 2002:a63:2222:: with SMTP id i34mr7283065pgi.83.1546270078690; Mon, 31 Dec 2018 07:27:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1546270078; cv=none; d=google.com; s=arc-20160816; b=fG4y04r0nDAytxXswqinkr2qY8wk3yWf7ESRmrFfCF3PLK4PlBoIGpk6ql2WeVPf1E y/qc/197wf5Xfh4WcqlHF8lvQ9cl/neraMo4yp4UgZItWE/5HRnVQ3YzBJT/0bEiPcSA T9i8sybDaw6qLoSbfWAJ05YrdjcCix77HP3lTy6oSNghqKCque52vO18QtHfDmG4x7ah NDb8AlPKe34vbk9a5xEQ2Eys/HQFINT2UXvMK/t76YU7jGxHcTcKcXho9ggWqubtfT6O GCPMW8YtN8LyTBDxka5pNptJDAlbwzXsVSUqZ6ZoYYHF9ArNEKsZs8t2RH1ivAg3EOb7 bZAA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-id:spamdiagnosticmetadata:spamdiagnosticoutput :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=M1zvioScNfV5OLgV5fDmN5YBOl1R+0wlfxULoWyNvtY=; b=u0bP6TLLDwJGUQNeDRXnKpwqcQr+W+bUN+MZhFuiWLBFGUG7/UKTLqEmSesMZ4q52/ d9AyNVCrvRJ5jxuckiUGHTXktN71k3i1LGsrYBK3fBqq31n/XPIUsaf/vW91xFrGe+B1 mZeuhK3OWKyJRzM3zDb78Mqp5KEPtor9mx9PBeIXe6YtQPmnsXaIR5KLKCzJt3INS+8R gKrBUSWNTkOPVQAXAbnAHhhQcncRKmfB4SxU5JCQYbTpK6McYaCA+ZgvUiJx3z2xXEOp ZAgNl3iIBmtNA4yD0mAdjOFSrHWm3uYCMxrcLj/H8/SkEXb1CwiuGzRzzcQOtRGGRT3b nr8Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amdcloud.onmicrosoft.com header.s=selector1-amd-com header.b="xRQ/VGeH"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o192si5665067pgo.129.2018.12.31.07.27.17; Mon, 31 Dec 2018 07:27:58 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@amdcloud.onmicrosoft.com header.s=selector1-amd-com header.b="xRQ/VGeH"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726603AbeLaOkV (ORCPT + 99 others); Mon, 31 Dec 2018 09:40:21 -0500 Received: from mail-eopbgr790052.outbound.protection.outlook.com ([40.107.79.52]:56242 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726061AbeLaOkV (ORCPT ); Mon, 31 Dec 2018 09:40:21 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=M1zvioScNfV5OLgV5fDmN5YBOl1R+0wlfxULoWyNvtY=; b=xRQ/VGeHWGW8FqngH99tdyH4yk6QUwYMXN81qyUC1GgYFj6x0T54etXbLz/kx0PpyZfyLzemyZ6NV8KX5BgfUY4CYB8wTUuxkHGf6m+X4Fx95DD9DdthkeSA5gj86YfpbpACmI+XT+X/CLCz/pN1WNmPEn3YRS2BI4GEUlDpsOY= Received: from SN1PR12MB2575.namprd12.prod.outlook.com (52.132.197.151) by SN1PR12MB0848.namprd12.prod.outlook.com (10.164.26.158) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1471.20; Mon, 31 Dec 2018 14:36:59 +0000 Received: from SN1PR12MB2575.namprd12.prod.outlook.com ([fe80::1c91:d48a:16de:94ae]) by SN1PR12MB2575.namprd12.prod.outlook.com ([fe80::1c91:d48a:16de:94ae%3]) with mapi id 15.20.1471.019; Mon, 31 Dec 2018 14:36:59 +0000 From: "Shah, Nehal-bakulchandra" To: Elie Morisse , "linux-i2c@vger.kernel.org" , Wolfram Sang , "S-k, Shyam-sundar" , "Singh, Sandeep" , "linux-kernel@vger.kernel.org" CC: Kai-Heng Feng , "helgaas@kernel.org" Subject: Re: [PATCH v15] i2c: Add drivers for the AMD PCIe MP2 I2C controller Thread-Topic: [PATCH v15] i2c: Add drivers for the AMD PCIe MP2 I2C controller Thread-Index: AQHUnXH4FvVVW5waFkOQMS4BxKV5XKWY8ZaA Date: Mon, 31 Dec 2018 14:36:59 +0000 Message-ID: References: <20181226232258.GA23526@syn-yoga530> In-Reply-To: <20181226232258.GA23526@syn-yoga530> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: MA1PR01CA0104.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:1::20) To SN1PR12MB2575.namprd12.prod.outlook.com (2603:10b6:802:2b::23) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Nehal-bakulchandra.Shah@amd.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [202.62.82.154] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;SN1PR12MB0848;20:1VQfWh3zlYkDUnNjZz/h1jGY2a33Ijr9zLYrRNcaBo6DSCWmy9qhOMQsz/rFl7Z/a+oyHPnStpmVFNMv8ah8xSBNiNgtQDLH2QnL+JRht/vbYArlfUfNGF1nwu0ix6OX0AKTciT63dGDlTkztShIUu3ffHnYq5W1U9bKPD+r4R0Khn32jEH9d1ForftWZsbLWu6ZGEL0E59YstZys/XGXbIxmsq3uZ7+SBVVRgLtnMSfZ1mDqBss+e8hg/dF438g x-ms-office365-filtering-correlation-id: 8064f575-f2e6-465e-11a3-08d66f2d6bbd x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(5600109)(711020)(4618075)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020);SRVR:SN1PR12MB0848; x-ms-traffictypediagnostic: SN1PR12MB0848: x-microsoft-antispam-prvs: x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(8211001083)(3230021)(908002)(999002)(5005026)(6040522)(8220055)(2401047)(8121501046)(10201501046)(3002001)(3231475)(944501520)(52105112)(93006095)(93001095)(6055026)(6041310)(20161123558120)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(201708071742011)(7699051)(76991095);SRVR:SN1PR12MB0848;BCL:0;PCL:0;RULEID:;SRVR:SN1PR12MB0848; x-forefront-prvs: 0903DD1D85 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39860400002)(136003)(396003)(376002)(366004)(346002)(199004)(189003)(25786009)(486006)(39060400002)(5660300001)(110136005)(2906002)(11346002)(2616005)(6116002)(3846002)(229853002)(52116002)(81166006)(4326008)(54906003)(81156014)(256004)(8676002)(14444005)(446003)(76176011)(476003)(8936002)(5024004)(478600001)(105586002)(72206003)(186003)(4744004)(71200400001)(26005)(6246003)(386003)(6506007)(66066001)(31696002)(99286004)(6306002)(31686004)(55236004)(6486002)(6436002)(36756003)(86362001)(53936002)(7736002)(575784001)(14454004)(102836004)(97736004)(305945005)(6512007)(68736007)(71190400001)(53546011)(2501003)(106356001)(316002)(53946003)(21314003)(559001)(579004)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:SN1PR12MB0848;H:SN1PR12MB2575.namprd12.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: cy9Hbqt/i8PJ3q9OZdWOiLU+qzyC+GDasJKoB2piqQP5w8/N5YgkmHCMkkiTmA6+5d5/QC9ffrwoHfdY2p+eMleh/3Vg/5rMvPrCXprohu/rjB5oUj8QQ6hwcFIARUlByoyhh49TDVKi1R9aXvO6ohC1yUoCwXNIyms6L0mpC+z3AMljtE7438R0Sj1BNg0EbmmWgkQUDqQakT8NBJV9DUsu5pikUrizREWYarbtFgXr51WrqdRih3mWE3QOhzBtLgoUtQJaGFnZ8oatP7hp6XvI+39sKmnIJXGaTKeSYncehiWyK7PQF+GsnTRzd2Yz spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-ID: <528FABB87148A145B4B6381662941181@namprd12.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8064f575-f2e6-465e-11a3-08d66f2d6bbd X-MS-Exchange-CrossTenant-originalarrivaltime: 31 Dec 2018 14:36:59.7518 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR12MB0848 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgRWxpZSwNCg0KDQpPbiAxMi8yNy8yMDE4IDQ6NTIgQU0sIEVsaWUgTW9yaXNzZSB3cm90ZToN Cj4gTVAyIGNvbnRyb2xsZXJzIGhhdmUgdHdvIHNlcGFyYXRlIGJ1c3Nlcywgc28gbWF5IGFjY29t bW9kYXRlIHVwIHRvIHR3byBJMkMNCj4gYWRhcHRlcnMuIFRob3NlIGFkYXB0ZXJzIGFyZSBsaXN0 ZWQgaW4gdGhlIEFDUEkgbmFtZXNwYWNlIHdpdGggdGhlDQo+ICJBTURJMDAxMSIgSElELCBhbmQg cHJvYmVkIGJ5IGEgcGxhdGZvcm0gZHJpdmVyLg0KPiANCj4gQ29tbXVuaWNhdGlvbiB3aXRoIHRo ZSBNUDIgdGFrZXMgcGxhY2UgdGhyb3VnaCBNTUlPIHJlZ2lzdGVycywgb3IgdGhyb3VnaA0KPiBE TUEgZm9yIG1vcmUgdGhhbiAzMiBieXRlcyB0cmFuc2ZlcnMuDQo+IA0KPiBUaGlzIGlzIG1ham9y IHJld29yayBvZiB0aGUgcGF0Y2ggc3VibWl0dGVkIGJ5IE5laGFsLWJha3VsY2hhbmRyYSBTaGFo IGZyb20NCj4gQU1EIChodHRwczovL3BhdGNod29yay5rZXJuZWwub3JnL3BhdGNoLzEwNTk3MzY5 LykuDQo+IA0KPiBNb3N0IG9mIHRoZSBldmVudCBoYW5kbGluZyBvZiB2MyB3YXMgcmV3cml0dGVu IHRvIG1ha2UgaXQgd29yayB3aXRoIG1vcmUNCj4gdGhhbiBvbmUgYnVzIChlLmcgb24gUnl6ZW4t YmFzZWQgTGVub3ZvIFlvZ2EgNTMwKSwgYW5kIHRoaXMgdmVyc2lvbg0KPiBjb250YWlucyBtYW55 IG90aGVyIGltcHJvdmVtZW50cy4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IEVsaWUgTW9yaXNzZSA8 c3luaXVyZ2VAZ21haWwuY29tPg0KPiAtLS0NCj4gQ2hhbmdlcyBzaW5jZSB2MSAoaHR0cHM6Ly93 d3cuc3Bpbmljcy5uZXQvbGlzdHMvbGludXgtaTJjL21zZzM0NjUwLmh0bWwpOg0KPiAtPiBBZGQg Zml4IGZvciBJT01NVQ0KPiAtPiBBZGQgZGVwZW5kZW5jeSBvZiBBQ1BJDQo+IC0+IEFkZCBsb2Nr cyB0byBhdm9pZCB0aGUgY3Jhc2gNCj4gDQo+IENoYW5nZXMgc2luY2UgdjIgKGh0dHBzOi8vcGF0 Y2h3b3JrLm96bGFicy5vcmcvcGF0Y2gvOTYxMjcwLyk6DQo+IA0KPiAtPiBmaXggZm9yIHJldmll dyBjb21tZW50cw0KPiAtPiBmaXggZm9yIG1vcmUgdGhhbiAzMiBieXRlcyB3cml0ZSBpc3N1ZQ0K PiANCj4gQ2hhbmdlcyBzaW5jZSB2MyAoaHR0cHM6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wYXRj aC8xMDU5NzM2OS8pIGJ5IEVsaWUgTS46DQo+IA0KPiAtPiBzdXBwb3J0IG1vcmUgdGhhbiBvbmUg YnVzL2FkYXB0ZXINCj4gLT4gc3VwcG9ydCBtb3JlIHRoYW4gb25lIHNsYXZlIHBlciBidXMNCj4g LT4gdXNlIHRoZSBidXMgc3BlZWQgc3BlY2lmaWVkIGJ5IHRoZSBzbGF2ZXMgZGVjbGFyZWQgaW4g dGhlIERTRFQgaW5zdGVhZCBvZg0KPiAgICBhc3N1bWluZyBzcGVlZCA9PSA0MDBrYml0cy9zDQo+ IC0+IGluc3RlYWQgb2Yga3phbGxvYydpbmcgYSBidWZmZXIgZm9yIGV2ZXJ5IGxlc3MgdGhhbiAz MiBieXRlcyByZWFkcywgc2ltcGx5DQo+ICAgIHVzZSBpMmNfbXNnLmJ1Zg0KPiAtPiBmaXggYnVm ZmVyIG92ZXJyZWFkcy9vdmVyZmxvd3Mgd2hlbiAoPD0zMiBieXRlcykgbWVzc2FnZSBsZW5ndGhz IGFyZW4ndCBhDQo+ICAgIG11bHRpcGxlIG9mIDQgYnkgdXNpbmcgbWVtY3B5X2Zyb21pbyBhbmQg bWVtY3B5X3RvaW8NCj4gLT4gdXNlIHN0cmVhbWluZyBETUEgbWFwcGluZ3MgaW5zdGVhZCBvZiBh bGxvY2F0aW5nIGEgY29oZXJlbnQgRE1BIGJ1ZmZlciBmb3INCj4gICAgZXZlcnkgPjMyIGJ5dGVz IHJlYWQvd3JpdGUNCj4gLT4gcHJvcGVybHkgY2hlY2sgZm9yIHRpbWVvdXRzIGR1cmluZyBpMmNf YW1kX3hmZXIgYW5kIGluY3JlYXNlIGl0IGZyb20gNTANCj4gICAgamlmZmllcyB0byAyNTAgbXNl Y3MgKHdoaWNoIGlzIG1vcmUgaW4gbGluZSB3aXRoIG90aGVyIGRyaXZlcnMpDQo+IC0+IGNvbXBs ZXRlIGFtZF9pMmNfZGV2Lm1zZyBldmVuIGlmIHRoZSBkZXZpY2UgZG9lc24ndCByZXR1cm4gYSB4 eHhfc3VjY2Vzcw0KPiAgICBldmVudCwgaW5zdGVhZCBvZiBzdGFsbGluZyBpMmNfYW1kX3hmZXIN Cj4gLT4gcmVtb3ZlZCB0aGUgc3BpbmxvY2sgYW5kIG1kZWxheSBkdXJpbmcgaTJjX2FtZF9wY2lf Y29uZmlndXJlLCBJIGRpZG4ndCBzZWUNCj4gICAgdGhlIHBvaW50IHNpbmNlIGl0J3MgYWxyZWFk eSB3YWl0aW5nIGZvciBhIGkyY19idXNlbmFibGVfY29tcGxldGUgZXZlbnQNCj4gLT4gYWRkIGFu IGFkYXB0ZXItc3BlY2lmaWMgbXV0ZXggbG9jayBmb3IgaTJjX2FtZF94ZmVyLCBzaW5jZSB3ZSBk b24ndCB3YW50DQo+ICAgIHBhcmFsbGVsIGNhbGxzIHdyaXRpbmcgdG8gQU1EX0MyUF9NU0cwIChv ciBBTURfQzJQX01TRzEpDQo+IC0+IGFkZCBhIGdsb2JhbCBtdXRleCBsb2NrIGZvciByZWdpc3Rl cnMgQU1EX0MyUF9NU0cyIHRvIEFNRF9DMlBfTVNHOSwgIHdoaWNoDQo+ICAgIGFyZSBzaGFyZWQg YWNyb3NzIHRoZSB0d28gYnVzc2VzL2FkYXB0ZXJzDQo+IC0+IGFkZCBNT0RVTEVfREVWSUNFX1RB QkxFIHRvIGF1dG9tYXRpY2FsbHkgbG9hZCBpMmMtYW1kLXBsYXRkcnYgaWYgdGhlIERTRFQNCj4g ICAgZW51bWVyYXRlcyBkZXZpY2VzIHdpdGggdGhlICJBTURJMDAxMSIgSElEDQo+IC0+IHNldCBt YXhpbXVtIGxlbmd0aCBvZiByZWFkcy93cml0ZXMgdG8gNDA5NSAoZXZlbnQncyBsZW5ndGggZmll bGQgaXMgMTIgYml0cykNCj4gLT4gYmFzaWMgUE0gc3VwcG9ydA0KPiAtPiBzdHlsZSBjb3JyZWN0 aW9ucyB0byBtYXRjaCB0aGUga2VybmVsIGNvZGUgc3R5bGUsIGFuZCB0cmllZCB0byByZWR1Y2Ug Y29kZQ0KPiAgICBkdXBsaWNhdGlvbiB3aGVuZXZlciBwb3NzaWJsZQ0KPiANCj4gQ2hhbmdlcyBz aW5jZSB2NCBieSBFbGllIE0uOg0KPiANCj4gLT4gZml4IG1pc3NpbmcgdHlwZWNhc3Qgd2Fybmlu Zw0KPiAtPiByZW1vdmVkIHRoZSBkdXBsaWNhdGVkIGVudHJ5IGluIEtjb25maWcNCj4gDQo+IENo YW5nZXMgc2luY2UgdjUgYnkgRWxpZSBNLjoNCj4gDQo+IC0+IG1vdmUgRE1BIG1hcHBpbmcgZnJv bSB0aGUgcGxhdGZvcm0gZHJpdmVyIHRvIHRoZSBQQ0kgZHJpdmVyDQo+IC0+IGF0dGVtcHQgdG8g ZmluZCB0aGUgcGxhdGZvcm0gZGV2aWNlJ3MgUENJIHBhcmVudCB0aHJvdWdoIHRoZSBfREVQIEFD UEkgbWV0aG9kDQo+ICAgIChpZiBub3QgZm91bmQgdGFrZSB0aGUgZmlyc3QgTVAyIGRldmljZSBy ZWdpc3RyZWQgaW4gdGhlIGkyYy1hbWQtcGNpLW1wMg0KPiAgICBkcml2ZXIsIGxpa2UgYmVmb3Jl KQ0KPiAtPiBkbyBub3QgYXNzdW1lIGFueW1vcmUgdGhhdCB0aGUgUENJIGRldmljZSBpcyBvd25l ZCBieSB0aGUgaTJjLWFtZC1wY2ktbXAyDQo+ICAgIGRyaXZlcg0KPiAtPiBhZGRyZXNzIG90aGVy IHJldmlldyBjb21tZW50cyBieSBCam9ybiBIZWxnYWFzIChtZWFudCBmb3IgdjMpDQo+IA0KPiBD aGFuZ2VzIHNpbmNlIHY2IGJ5IEVsaWUgTS46DQo+IA0KPiAtPiByZW1vdmUgdW5uZWNlc3Nhcnkg bWVtY3B5IGZyb20gdGhlIERNQSBidWZmZXIgZHVyaW5nIGkyY19hbWRfcmVhZF9jb21wbGV0aW9u DQo+IA0KPiBDaGFuZ2VzIHNpbmNlIHY3IGJ5IEVsaWUgTS46DQo+IA0KPiAtPiBtZXJnZSB0aGUg dHdvIG1vZHVsZXMgaW50byBvbmUgbmFtZWQgaTJjLWFtZC1tcDIsIGRlbGV0ZSBub3cgdXNlbGVz cyBleHBvcnRzDQo+IC0+IHVubG9jayB0aGUgQzJQIG11dGV4IGlmIGkyY19hbWRfeGZlcl9tc2cg dGltZW91dHMsIHRvIHByZXZlbnQgc3RhbGxpbmcgdGhlDQo+ICAgIE1QMiBjb250cm9sbGVyIGlm IGEgc2xhdmUgZG9lc24ndCByZXNwb25kIHRvIGEgcmVhZCBvciB3cml0ZSByZXF1ZXN0DQo+IC0+ IHVubWFwIHRoZSBETUEgYnVmZmVyIGJlZm9yZSByZWFkL3dyaXRlX2NvbXBsZXRlDQo+IC0+IGZp eCBidXNfZGlzYWJsZSBjb21tYW5kcyBoYW5kbGluZyAobm8gbW9yZSBlcnJvcnMgZHVyaW5nIG1v ZHVsZSBleGl0KQ0KPiAtPiBwcmVmZXIgbWFuYWdlZCB2ZXJzaW9ucyBvZiBwY2lfIGFuZCBkZXZf IGZ1bmN0aW9ucyB3aGVuZXZlciBwb3NzaWJsZQ0KPiAtPiBpbmNyZWFzZSBhZGFwdGVyIHJldHJp ZXMgZnJvbSAwIHRvIDMNCj4gLT4gcmVkdWNlIGNvZGUgZHVwbGljYXRpb24gaW4gZGVidWdmcyBm dW5jdGlvbnMNCj4gLT4gYWRkcmVzcyBvdGhlciByZXZpZXcgcG9pbnRzIGJ5IEJqb3JuIEhlbGdh YXMgKGV4Y2VwdCByZWdhcmRpbmcgdGhlIF9ERVANCj4gICAgaGludCkNCj4gDQo+IENoYW5nZXMg c2luY2UgdjggYnkgRWxpZSBNLjoNCj4gDQo+IC0+IHJlbW92ZSBtb3N0bHkgcmVkdW5kYW50IGFt ZF9pMmNfcndfY29uZmlnLCByZWZlciB0byBpMmNfbXNnIHdoZW5ldmVyDQo+IHBvc3NpYmxlDQo+ IC0+IHVzZSBpMmNfZ2V0X2RtYV9zYWZlX21zZ19idWYgYW5kIGkyY19wdXRfZG1hX3NhZmVfbXNn X2J1Zg0KPiAtPiBkZWZlciBwcm9iZSgpIGJ5IHRoZSBwbGF0Zm9ybSBkcml2ZXIgaWYgbm8gTVAy IGRldmljZSBoYXMgYmVlbiBwcm9iZWQNCj4geWV0IGJ5IHRoZSBQQ0kgZHJpdmVyICh3aGljaCBz aG91bGQgYWRkcmVzcyBCam9ybiBIZWxnYWFzJyBjb25jZXJuIHdoaWxlDQo+IHByZXNlcnZpbmcg dGhlIHBsYXRmb3JtIGRyaXZlcikNCj4gLT4gaWYgdGhlIGludGVycnVwdCBmb2xsb3dpbmcgYSBj b21tYW5kIGRvZXNuJ3QgZ2V0IGhhbmRsZWQgYWZ0ZXIgMjUwbXMsDQo+IHplcm8gQU1EX1AyQ19N U0dfSU5URU4gdG8gcHJldmVudCB0aGUgTVAyIGZyb20gc3RhbGxpbmcgZm9yIGEgZmV3IG1vcmUN Cj4gc2Vjb25kcw0KPiAtPiBpbmNsdWRlIEFNRF9QMkNfTVNHMyBhbmQgZml4IHR5cG8gaW4gZGVi dWdmcyBvdXRwdXQNCj4gLT4gY29zbWV0aWMgZml4ZXMsIGNvZGUgcmVkdWN0aW9uLCBhbmQgYmV0 dGVyIGNvbW1lbnRzDQo+IC0+IGFkZCBOZWhhbCBTaGFoIGFuZCBTaHlhbSBTdW5kYXIgUyBLIGZy b20gQU1EIHRvIHRoZSBsaXN0IG9mIG1haW50YWluZXJzDQo+IA0KPiBDaGFuZ2VzIHNpbmNlIHY5 IGJ5IEVsaWUgTS46DQo+IA0KPiAtPiByZW1vdmUgdGhlIHhmZXJfbG9jayBtdXRleCB3aGljaCB3 YXMgcmVkdW5kYW50IHdpdGggaTJjX2FkYXB0ZXIuYnVzX2xvY2sNCj4gLT4gcGxhdGZvcm0gZGV2 aWNlIHJlbW92ZSgpIGZpeGVzIChwcm90ZWN0aW9uIGFnYWluc3QgdGhlIHZlcnkgdW5saWtlbHkN Cj4gY2FzZSB0aGF0IGJvdGggdGhlIFBDSSBhbmQgcGxhdGZvcm0gZGV2aWNlcyBnZXQgZGV0YWNo ZWQgbWFudWFsbHkgYW5kDQo+IHNpbXVsdGFuZW91c2x5KQ0KPiAtPiBmaXggbWFudWFsbHkgdW5i aW5kaW5nIHRoZSBQQ0kgZGV2aWNlIGFuZCB0aGVuIHJlYmluZGluZywgdGhlcmUgd2FzIGFuDQo+ IGludGVycnVwdCB0aGF0IHdvdWxkbid0IGdldCBzZXJ2aWNlZCBhbmQgdGh1cyB0aGUgbGluZSBn b3QgZGlzYWJsZWQNCj4gLT4gbG9vayBmb3IgdGhlIE1QMiBkZXZpY2UgY29ycmVzcG9uZGluZyB0 byBhbiBBTURJMDAxMSBBQ1BJIGRldmljZSBpbg0KPiBldmVyeSBkZXZpY2UgZW51bWVyYXRlZCBi eSBfREVQLCBub3QganVzdCB0aGUgZmlyc3Qgb25lDQo+IC0+IHNldCBpMmNfYWRhcHRlci5uciB0 byBwZGV2LT5pZCBhbmQgY2FsbCBpMmNfYWRkX251bWJlcmVkX2FkYXB0ZXIoKQ0KPiAtPiBhZGQg RG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzLyBlbnRyeQ0KPiAtPiBtaW5vciBlbmhhbmNlbWVudHMN Cj4gDQo+IENoYW5nZXMgc2luY2UgdjEwIGJ5IEVsaWUgTS46DQo+IA0KPiAtPiBydW50aW1lIFBN IHN1cHBvcnQNCj4gLT4gc3luY2hyb25pc2F0aW9uIGZpeGVzIGZvciA8PTMyIGJ5dGVzIHJlYWRz L3dyaXRlcyB0aHJvdWdoIEMyUCByZWdpc3RlcnMsDQo+IG5vIG1vcmUgdGltZW91dHMgb3IgImly cTogbm9ib2R5IGNhcmVkIiBlcnJvcnMgb24gTGVub3ZvIElkZWFwYWQgNTMwcw0KPiAtPiByZW1v dmUgdGhlIGlzciBzcGlubG9jaywgbm90IG5lZWRlZCBzaW5jZSBpc3IgYXJlbid0IHJlLWVudHJh bnQNCj4gLT4gcmVtb3ZlIHRoZSBkZWxheWVkX3dvcmsgZmllbGQsIG1ha2UgdGhlIGlzciBjb21w bGV0ZSAuY21kX2NvbXBsZXRlDQo+IGRpcmVjdGx5DQo+IC0+IHhmZXIgbm93IHJldHVybnMgLUVJ TyBpZiB0aGUgTVAyIHJlc3BvbnNlIGlzbid0IHRoZSBleHBlY3RlZCBvbmUNCj4gLT4gY2hlY2sg dGhhdCB0aGUgYWRhcHRlciBzdGlsbCBleGlzdHMgYXQgdGhlIGJlZ2lubmluZyBvZiB4ZmVyDQo+ IC0+IGxlc3MgY29kZSBkdXBsaWNhdGlvbiBpbiBhbWRfbXAyX3JlYWQvd3JpdGUNCj4gLT4gYmV0 dGVyIG5hbWVzIChidXNfeG5hYmxlID0+IGJ1c19lbmFibGVfc2V0LCBfbXNnID0+IF9jbWQpIGFu ZCBvdGhlcg0KPiBtaW5vciBlbmhhbmNlbWVudHMNCj4gDQo+IENoYW5nZXMgc2luY2UgdjExIGJ5 IEVsaWUgTS46DQo+IA0KPiAtPiByZW1vdmUgdGhlIEFDUEkgX0RFUCBoaW50LCBOZWhhbCBmcm9t IEFNRCBzYWlkIHRoYXQgdGhlcmUncyBubyBwbGFuIHRvDQo+IGhhdmUgbW9yZSB0aGFuIG9uZSBN UDIgZGV2aWNlIHBlciBzeXN0ZW0gYW5kIHRoaXMgd2Fzbid0IF9ERVAncyBwdXJwb3NlDQo+IC0+ IHVzZSBkZXZpY2UgbGlua3MgYmV0d2VlbiB0aGUgdHdvIGRyaXZlcnMgdG8gc2ltcGxpZnkgdGhl IC5yZW1vdmUgbG9naWMNCj4gLT4gZG8gbm90IGhhcmRjb2RlIHRoZSBpMmMgYWRhcHRlciB0aW1l b3V0DQo+IC0+IGNvZGUgcmVkdWN0aW9uIGFuZCBjb21tZW50IGZpeGVzDQo+IA0KPiBDaGFuZ2Vz IHNpbmNlIHYxMiBieSBFbGllIE0uOg0KPiANCj4gLT4gZml4IHRoZSB0d28gd2FybmluZ3MgYnkg dGhlIGtidWlsZCB0ZXN0IGJvdA0KPiANCj4gQ2hhbmdlcyBzaW5jZSB2MTMgYnkgRWxpZSBNLiwg cmVxdWVzdGVkIGJ5IE5laGFsIFNoYWggZnJvbSBBTUQ6DQo+IA0KPiAtPiBzcGxpdCB0aGUgaTJj LWFtZC1tcDIgbW9kdWxlIGJhY2sgaW50byB0d28sIGkyYy1hbWQtbXAyLXBjaSBhbmQNCj4gaTJj LWFtZC1tcDItcGxhdA0KPiAtPiBtb3ZlIERNQSBtYXBwaW5nIGJhY2sgaW50byB0aGUgcGxhdGZv cm0gZHJpdmVyDQo+IA0KPiBDaGFuZ2VzIHNpbmNlIHYxNCBieSBFbGllIE0uOg0KPiANCj4gLT4g Zml4IGJ1aWxkIGZhaWx1cmUgaWYgQ09ORklHX1BNIGlzbid0IGRlZmluZWQNCj4gDQo+ICBEb2N1 bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWFtZC1tcDIgIHwgIDI0ICsNCj4gIE1BSU5UQUlORVJT ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDggKw0KPiAgZHJpdmVycy9pMmMvYnVzc2Vz L0tjb25maWcgICAgICAgICAgICB8ICAyMSArDQo+ICBkcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZp bGUgICAgICAgICAgIHwgICAyICsNCj4gIGRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kLW1wMi1w Y2kuYyAgfCA2NTAgKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gIGRyaXZlcnMvaTJjL2J1 c3Nlcy9pMmMtYW1kLW1wMi1wbGF0LmMgfCAzOTIgKysrKysrKysrKysrKysrKw0KPiAgZHJpdmVy cy9pMmMvYnVzc2VzL2kyYy1hbWQtbXAyLmggICAgICB8IDIyMyArKysrKysrKysNCj4gIDcgZmls ZXMgY2hhbmdlZCwgMTMyMCBpbnNlcnRpb25zKCspDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgRG9j dW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbWQtbXAyDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQtbXAyLXBjaS5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQtbXAyLXBsYXQuYw0KPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kLW1wMi5oDQo+IA0KPiBkaWZmIC0tZ2l0 IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbWQtbXAyIGIvRG9jdW1lbnRhdGlvbi9p MmMvYnVzc2VzL2kyYy1hbWQtbXAyDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAw MDAwMDAwMDAwMC4uNGIzZDRiODA0NDEzDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvRG9jdW1l bnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbWQtbXAyDQo+IEBAIC0wLDAgKzEsMjQgQEANCj4gK0tl cm5lbCBkcml2ZXIgaTJjLWFtZC1tcDINCj4gKw0KPiArU3VwcG9ydGVkIGFkYXB0ZXJzOg0KPiAr ICAqIEFNRCBNUDIgUENJZSBpbnRlcmZhY2UNCj4gKw0KPiArRGF0YXNoZWV0OiBub3QgcHVibGlj bHkgYXZhaWxhYmxlLg0KPiArDQo+ICtBdXRob3JzOg0KPiArCVNoeWFtIFN1bmRhciBTIEsgPFNo eWFtLXN1bmRhci5TLWtAYW1kLmNvbT4NCj4gKwlOZWhhbCBTaGFoIDxuZWhhbC1iYWt1bGNoYW5k cmEuc2hhaEBhbWQuY29tPg0KPiArCUVsaWUgTW9yaXNzZSA8c3luaXVyZ2VAZ21haWwuY29tPg0K PiArDQo+ICtEZXNjcmlwdGlvbg0KPiArLS0tLS0tLS0tLS0NCj4gKw0KPiArVGhlIE1QMiBpcyBh biBBUk0gcHJvY2Vzc29yIHByb2dyYW1tZWQgYXMgYW4gSTJDIGNvbnRyb2xsZXIgYW5kIGNvbW11 bmljYXRpbmcNCj4gK3dpdGggdGhlIHg4NiBob3N0IHRocm91Z2ggUENJLg0KPiArDQo+ICtJZiB5 b3Ugc2VlIHNvbWV0aGluZyBsaWtlIHRoaXM6DQo+ICsNCj4gKzAzOjAwLjcgTm9uLVZHQSB1bmNs YXNzaWZpZWQgZGV2aWNlOiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuIFtBTURdIERldmlj ZQ0KPiArCQkJCQkJCQkJMTVlNg0KPiArDQo+ICtpbiB5b3VyICdsc3BjaSAtdicsIHRoZW4gdGhp cyBkcml2ZXIgaXMgZm9yIHlvdXIgZGV2aWNlLg0KPiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMg Yi9NQUlOVEFJTkVSUw0KPiBpbmRleCBkMjc0MDFkZjA5MWYuLjc2ZjhiM2M0MDEzMiAxMDA2NDQN Cj4gLS0tIGEvTUFJTlRBSU5FUlMNCj4gKysrIGIvTUFJTlRBSU5FUlMNCj4gQEAgLTgwOCw2ICs4 MDgsMTQgQEAgRjoJZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL3ZpX3N0cnVjdHMuaA0KPiAg RjoJZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL3Y5X3N0cnVjdHMuaA0KPiAgRjoJaW5jbHVk ZS91YXBpL2xpbnV4L2tmZF9pb2N0bC5oDQo+ICANCj4gK0FNRCBNUDIgSTJDIERSSVZFUg0KPiAr TToJRWxpZSBNb3Jpc3NlIDxzeW5pdXJnZUBnbWFpbC5jb20+DQo+ICtNOglOZWhhbCBTaGFoIDxu ZWhhbC1iYWt1bGNoYW5kcmEuc2hhaEBhbWQuY29tPg0KPiArTToJU2h5YW0gU3VuZGFyIFMgSyA8 c2h5YW0tc3VuZGFyLnMta0BhbWQuY29tPg0KPiArTDoJbGludXgtaTJjQHZnZXIua2VybmVsLm9y Zw0KPiArUzoJTWFpbnRhaW5lZA0KPiArRjoJZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQtbXAy Kg0KPiArDQo+ICBBTUQgUE9XRVJQTEFZDQo+ICBNOglSZXggWmh1IDxyZXguemh1QGFtZC5jb20+ DQo+ICBNOglFdmFuIFF1YW4gPGV2YW4ucXVhbkBhbWQuY29tPg0KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9pMmMvYnVzc2VzL0tjb25maWcgYi9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZw0KPiBp bmRleCBmMmM2ODE5NzEyMDEuLmVmNzYxN2RkNWQwMSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9p MmMvYnVzc2VzL0tjb25maWcNCj4gKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcNCj4g QEAgLTc3LDYgKzc3LDI3IEBAIGNvbmZpZyBJMkNfQU1EODExMQ0KPiAgCSAgVGhpcyBkcml2ZXIg Y2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQ0KPiAgCSAg d2lsbCBiZSBjYWxsZWQgaTJjLWFtZDgxMTEuDQo+ICANCj4gK2NvbmZpZyBJMkNfQU1EX01QMl9Q Q0kNCj4gKwl0cmlzdGF0ZSAiQU1EIE1QMiBQQ0llIg0KPiArCWRlcGVuZHMgb24gUENJDQo+ICsJ aGVscA0KPiArCSAgSWYgeW91IHNheSB5ZXMgdG8gdGhpcyBvcHRpb24sIHN1cHBvcnQgd2lsbCBi ZSBpbmNsdWRlZCBmb3IgdGhlIEFNRA0KPiArCSAgTVAyIFBDSWUgSTJDIGFkYXB0ZXIuDQo+ICsN Cj4gKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28s IHRoZSBtb2R1bGUNCj4gKwkgIHdpbGwgYmUgY2FsbGVkIGkyYy1hbWQtbXAyLXBjaS4NCj4gKw0K PiArY29uZmlnIEkyQ19BTURfTVAyX1BMQVRGT1JNDQo+ICsJdHJpc3RhdGUgIkFNRCBNUDIgUGxh dGZvcm0iDQo+ICsJc2VsZWN0IEkyQ19BTURfTVAyX1BDSQ0KPiArCWRlcGVuZHMgb24gQUNQSQ0K PiArCWhlbHANCj4gKwkgIElmIHlvdSBzYXkgeWVzIHRvIHRoaXMgb3B0aW9uLCBzdXBwb3J0IHdp bGwgYmUgaW5jbHVkZWQgZm9yIHRoZSBBTUQNCj4gKwkgIE1QMiBJMkMgYWRhcHRlci4NCj4gKw0K PiArCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywg dGhlIG1vZHVsZQ0KPiArCSAgd2lsbCBiZSBjYWxsZWQgaTJjLWFtZC1tcDItcGxhdC4NCj4gKw0K PiAgY29uZmlnIEkyQ19ISVg1SEQyDQo+ICAJdHJpc3RhdGUgIkhpeDVoZDIgaGlnaC1zcGVlZCBJ MkMgZHJpdmVyIg0KPiAgCWRlcGVuZHMgb24gQVJDSF9ISVNJIHx8IEFSQ0hfSElYNUhEMiB8fCBD T01QSUxFX1RFU1QNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZSBi L2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZQ0KPiBpbmRleCA1ZjBjYjY5MTU5NjkuLjRmYTgy OWRjY2Y2OCAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlDQo+ICsr KyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZQ0KPiBAQCAtMzMsNiArMzMsOCBAQCBvYmot JChDT05GSUdfSTJDX1BPV0VSTUFDKQkrPSBpMmMtcG93ZXJtYWMubw0KPiAgDQo+ICAjIEVtYmVk ZGVkIHN5c3RlbSBJMkMvU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMNCj4gIG9iai0kKENP TkZJR19JMkNfQUxURVJBKQkrPSBpMmMtYWx0ZXJhLm8NCj4gK29iai0kKENPTkZJR19JMkNfQU1E X01QMl9QQ0kpCSs9IGkyYy1hbWQtbXAyLXBjaS5vDQo+ICtvYmotJChDT05GSUdfSTJDX0FNRF9N UDJfUExBVEZPUk0pCSs9IGkyYy1hbWQtbXAyLXBsYXQubw0KPiAgb2JqLSQoQ09ORklHX0kyQ19B U1BFRUQpCSs9IGkyYy1hc3BlZWQubw0KPiAgb2JqLSQoQ09ORklHX0kyQ19BVDkxKQkJKz0gaTJj LWF0OTEubw0KPiAgb2JqLSQoQ09ORklHX0kyQ19BVTE1NTApCSs9IGkyYy1hdTE1NTAubw0KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQtbXAyLXBjaS5jIGIvZHJpdmVy cy9pMmMvYnVzc2VzL2kyYy1hbWQtbXAyLXBjaS5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ IGluZGV4IDAwMDAwMDAwMDAwMC4uM2FiYmI2NzNhY2QzDQo+IC0tLSAvZGV2L251bGwNCj4gKysr IGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQtbXAyLXBjaS5jDQo+IEBAIC0wLDAgKzEsNjUw IEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1 c2UNCj4gKy8qDQo+ICsgKiBBTUQgTVAyIFBDSWUgY29tbXVuaWNhdGlvbiBkcml2ZXINCj4gKyAq DQo+ICsgKiBBdXRob3JzOiBTaHlhbSBTdW5kYXIgUyBLIDxTaHlhbS1zdW5kYXIuUy1rQGFtZC5j b20+DQo+ICsgKiAgICAgICAgICBFbGllIE1vcmlzc2UgPHN5bml1cmdlQGdtYWlsLmNvbT4NCj4g KyAqLw0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPg0KPiArI2luY2x1ZGUgPGxp bnV4L2RtYS1tYXBwaW5nLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQo+ICsj aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvcGNpLmg+DQo+ICsj aW5jbHVkZSA8bGludXgvc2xhYi5oPg0KPiArDQo+ICsjaW5jbHVkZSAiaTJjLWFtZC1tcDIuaCIN Cj4gKw0KPiArI2RlZmluZSBEUklWRVJfTkFNRQkiaTJjX2FtZF9tcDIiDQo+ICsjZGVmaW5lIERS SVZFUl9ERVNDCSJBTUQoUikgUENJLUUgTVAyIEkyQyBDb250cm9sbGVyIERyaXZlciINCj4gKyNk ZWZpbmUgRFJJVkVSX1ZFUgkiMS4wIg0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGU2 NCh1NjQgdmFsLCB2b2lkIF9faW9tZW0gKm1taW8pDQo+ICt7DQo+ICsJd3JpdGVsKHZhbCwgbW1p byk7DQo+ICsJd3JpdGVsKHZhbCA+PiAzMiwgbW1pbyArIHNpemVvZih1MzIpKTsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGlubGluZSB1NjQgcmVhZDY0KHZvaWQgX19pb21lbSAqbW1pbykNCj4gK3sN Cj4gKwl1NjQgbG93LCBoaWdoOw0KPiArDQo+ICsJbG93ID0gcmVhZGwobW1pbyk7DQo+ICsJaGln aCA9IHJlYWRsKG1taW8gKyBzaXplb2YodTMyKSk7DQo+ICsJcmV0dXJuIGxvdyB8IChoaWdoIDw8 IDMyKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgYW1kX21wMl9jMnBfbXV0ZXhfbG9jayhz dHJ1Y3QgYW1kX2kyY19jb21tb24gKmkyY19jb21tb24pDQo+ICt7DQo+ICsJc3RydWN0IGFtZF9t cDJfZGV2ICpwcml2ZGF0YSA9IGkyY19jb21tb24tPm1wMl9kZXY7DQo+ICsNCj4gKwkvKiB0aGVy ZSBpcyBvbmx5IG9uZSBkYXRhIG1haWxib3ggZm9yIHR3byBpMmMgYWRhcHRlcnMgKi8NCj4gKwlt dXRleF9sb2NrKCZwcml2ZGF0YS0+YzJwX2xvY2spOw0KPiArCXByaXZkYXRhLT5jMnBfbG9ja19i dXNpZCA9IGkyY19jb21tb24tPmJ1c19pZDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgYW1k X21wMl9jMnBfbXV0ZXhfdW5sb2NrKHN0cnVjdCBhbWRfaTJjX2NvbW1vbiAqaTJjX2NvbW1vbikN Cj4gK3sNCj4gKwlzdHJ1Y3QgYW1kX21wMl9kZXYgKnByaXZkYXRhID0gaTJjX2NvbW1vbi0+bXAy X2RldjsNCj4gKw0KPiArCWlmICh1bmxpa2VseShwcml2ZGF0YS0+YzJwX2xvY2tfYnVzaWQgIT0g aTJjX2NvbW1vbi0+YnVzX2lkKSkgew0KPiArCQlkZXZfd2FybihuZGV2X2Rldihwcml2ZGF0YSks DQo+ICsJCQkgImJ1cyAlZCBhdHRlbXB0aW5nIHRvIHVubG9jayBDMlAgbG9ja2VkIGJ5IGJ1cyAl ZFxuIiwNCj4gKwkJCSBpMmNfY29tbW9uLT5idXNfaWQsIHByaXZkYXRhLT5jMnBfbG9ja19idXNp ZCk7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsNCj4gKwltdXRleF91bmxvY2soJnByaXZkYXRh LT5jMnBfbG9jayk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgYW1kX21wMl9jbWQoc3RydWN0 IGFtZF9pMmNfY29tbW9uICppMmNfY29tbW9uLA0KPiArCQkgICAgICAgdW5pb24gaTJjX2NtZF9i YXNlIGkyY19jbWRfYmFzZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgYW1kX21wMl9kZXYgKnByaXZkYXRh ID0gaTJjX2NvbW1vbi0+bXAyX2RldjsNCj4gKwl2b2lkIF9faW9tZW0gKnJlZzsNCj4gKw0KPiAr CWkyY19jb21tb24tPnJlcWNtZCA9IGkyY19jbWRfYmFzZS5zLmkyY19jbWQ7DQo+ICsNCj4gKwly ZWcgPSBwcml2ZGF0YS0+bW1pbyArICgoaTJjX2NtZF9iYXNlLnMuYnVzX2lkID09IDEpID8NCj4g KwkJCQlBTURfQzJQX01TRzEgOiBBTURfQzJQX01TRzApOw0KPiArCXdyaXRlbChpMmNfY21kX2Jh c2UudWwsIHJlZyk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiAraW50IGFtZF9t cDJfYnVzX2VuYWJsZV9zZXQoc3RydWN0IGFtZF9pMmNfY29tbW9uICppMmNfY29tbW9uLCBib29s IGVuYWJsZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgYW1kX21wMl9kZXYgKnByaXZkYXRhID0gaTJjX2Nv bW1vbi0+bXAyX2RldjsNCj4gKwl1bmlvbiBpMmNfY21kX2Jhc2UgaTJjX2NtZF9iYXNlOw0KPiAr DQo+ICsJZGV2X2RiZyhuZGV2X2Rldihwcml2ZGF0YSksICIlcyBpZDogJWRcbiIsIF9fZnVuY19f LA0KPiArCQlpMmNfY29tbW9uLT5idXNfaWQpOw0KPiArDQo+ICsJaTJjX2NtZF9iYXNlLnVsID0g MDsNCj4gKwlpMmNfY21kX2Jhc2Uucy5pMmNfY21kID0gZW5hYmxlID8gaTJjX2VuYWJsZSA6IGky Y19kaXNhYmxlOw0KPiArCWkyY19jbWRfYmFzZS5zLmJ1c19pZCA9IGkyY19jb21tb24tPmJ1c19p ZDsNCj4gKwlpMmNfY21kX2Jhc2Uucy5pMmNfc3BlZWQgPSBpMmNfY29tbW9uLT5pMmNfc3BlZWQ7 DQo+ICsNCj4gKwlhbWRfbXAyX2MycF9tdXRleF9sb2NrKGkyY19jb21tb24pOw0KPiArDQo+ICsJ cmV0dXJuIGFtZF9tcDJfY21kKGkyY19jb21tb24sIGkyY19jbWRfYmFzZSk7DQo+ICt9DQo+ICtF WFBPUlRfU1lNQk9MX0dQTChhbWRfbXAyX2J1c19lbmFibGVfc2V0KTsNCj4gKw0KPiArc3RhdGlj IHZvaWQgYW1kX21wMl9jbWRfcndfZmlsbChzdHJ1Y3QgYW1kX2kyY19jb21tb24gKmkyY19jb21t b24sDQo+ICsJCQkJdW5pb24gaTJjX2NtZF9iYXNlICppMmNfY21kX2Jhc2UsDQo+ICsJCQkJZW51 bSBpMmNfY21kIHJlcWNtZCkNCj4gK3sNCj4gKwlpMmNfY21kX2Jhc2UtPnMuaTJjX2NtZCA9IHJl cWNtZDsNCj4gKwlpMmNfY21kX2Jhc2UtPnMuYnVzX2lkID0gaTJjX2NvbW1vbi0+YnVzX2lkOw0K PiArCWkyY19jbWRfYmFzZS0+cy5pMmNfc3BlZWQgPSBpMmNfY29tbW9uLT5pMmNfc3BlZWQ7DQo+ ICsJaTJjX2NtZF9iYXNlLT5zLnNsYXZlX2FkZHIgPSBpMmNfY29tbW9uLT5tc2ctPmFkZHI7DQo+ ICsJaTJjX2NtZF9iYXNlLT5zLmxlbmd0aCA9IGkyY19jb21tb24tPm1zZy0+bGVuOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgaW50IGFtZF9tcDJfcncoc3RydWN0IGFtZF9pMmNfY29tbW9uICppMmNf Y29tbW9uLCBlbnVtIGkyY19jbWQgcmVxY21kKQ0KPiArew0KPiArCXN0cnVjdCBhbWRfbXAyX2Rl diAqcHJpdmRhdGEgPSBpMmNfY29tbW9uLT5tcDJfZGV2Ow0KPiArCXVuaW9uIGkyY19jbWRfYmFz ZSBpMmNfY21kX2Jhc2U7DQo+ICsNCj4gKwlhbWRfbXAyX2NtZF9yd19maWxsKGkyY19jb21tb24s ICZpMmNfY21kX2Jhc2UsIHJlcWNtZCk7DQo+ICsJYW1kX21wMl9jMnBfbXV0ZXhfbG9jayhpMmNf Y29tbW9uKTsNCj4gKw0KPiArCWlmIChpMmNfY29tbW9uLT5tc2ctPmxlbiA8PSAzMikgew0KPiAr CQlpMmNfY21kX2Jhc2Uucy5tZW1fdHlwZSA9IHVzZV9jMnBtc2c7DQo+ICsJCWlmIChyZXFjbWQg PT0gaTJjX3dyaXRlKQ0KPiArCQkJbWVtY3B5X3RvaW8ocHJpdmRhdGEtPm1taW8gKyBBTURfQzJQ X01TRzIsDQo+ICsJCQkJICAgIGkyY19jb21tb24tPm1zZy0+YnVmLA0KPiArCQkJCSAgICBpMmNf Y29tbW9uLT5tc2ctPmxlbik7DQo+ICsJfSBlbHNlIHsNCj4gKwkJaTJjX2NtZF9iYXNlLnMubWVt X3R5cGUgPSB1c2VfZHJhbTsNCj4gKwkJd3JpdGU2NCgodTY0KWkyY19jb21tb24tPmRtYV9hZGRy LA0KPiArCQkJcHJpdmRhdGEtPm1taW8gKyBBTURfQzJQX01TRzIpOw0KPiArCX0NCj4gKw0KPiAr CXJldHVybiBhbWRfbXAyX2NtZChpMmNfY29tbW9uLCBpMmNfY21kX2Jhc2UpOw0KPiArfQ0KPiAr DQo+ICtpbnQgYW1kX21wMl9yZWFkKHN0cnVjdCBhbWRfaTJjX2NvbW1vbiAqaTJjX2NvbW1vbikN Cj4gK3sNCj4gKwlzdHJ1Y3QgYW1kX21wMl9kZXYgKnByaXZkYXRhID0gaTJjX2NvbW1vbi0+bXAy X2RldjsNCj4gKw0KPiArCWRldl9kYmcobmRldl9kZXYocHJpdmRhdGEpLCAiJXMgYWRkcjogJXgg aWQ6ICVkXG4iLCBfX2Z1bmNfXywNCj4gKwkJaTJjX2NvbW1vbi0+bXNnLT5hZGRyLCBpMmNfY29t bW9uLT5idXNfaWQpOw0KPiArDQo+ICsJcmV0dXJuIGFtZF9tcDJfcncoaTJjX2NvbW1vbiwgaTJj X3JlYWQpOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwoYW1kX21wMl9yZWFkKTsNCj4gKw0K PiAraW50IGFtZF9tcDJfd3JpdGUoc3RydWN0IGFtZF9pMmNfY29tbW9uICppMmNfY29tbW9uKQ0K PiArew0KPiArCXN0cnVjdCBhbWRfbXAyX2RldiAqcHJpdmRhdGEgPSBpMmNfY29tbW9uLT5tcDJf ZGV2Ow0KPiArDQo+ICsJZGV2X2RiZyhuZGV2X2Rldihwcml2ZGF0YSksICIlcyBhZGRyOiAleCBp ZDogJWRcbiIsIF9fZnVuY19fLA0KPiArCQlpMmNfY29tbW9uLT5tc2ctPmFkZHIsIGkyY19jb21t b24tPmJ1c19pZCk7DQo+ICsNCj4gKwlyZXR1cm4gYW1kX21wMl9ydyhpMmNfY29tbW9uLCBpMmNf d3JpdGUpOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwoYW1kX21wMl93cml0ZSk7DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIGFtZF9tcDJfcGNpX2NoZWNrX3J3X2V2ZW50KHN0cnVjdCBhbWRfaTJj X2NvbW1vbiAqaTJjX2NvbW1vbikNCj4gK3sNCj4gKwlzdHJ1Y3QgYW1kX21wMl9kZXYgKnByaXZk YXRhID0gaTJjX2NvbW1vbi0+bXAyX2RldjsNCj4gKwlpbnQgbGVuID0gaTJjX2NvbW1vbi0+ZXZl bnR2YWwuci5sZW5ndGg7DQo+ICsJdTMyIHNsYXZlX2FkZHIgPSBpMmNfY29tbW9uLT5ldmVudHZh bC5yLnNsYXZlX2FkZHI7DQo+ICsJYm9vbCBlcnIgPSBmYWxzZTsNCj4gKw0KPiArCWlmICh1bmxp a2VseShsZW4gIT0gaTJjX2NvbW1vbi0+bXNnLT5sZW4pKSB7DQo+ICsJCWRldl9lcnIobmRldl9k ZXYocHJpdmRhdGEpLA0KPiArCQkJImxlbmd0aCAlZCBpbiBldmVudCBkb2Vzbid0IG1hdGNoIGJ1 ZmZlciBsZW5ndGggJWQhXG4iLA0KPiArCQkJbGVuLCBpMmNfY29tbW9uLT5tc2ctPmxlbik7DQo+ ICsJCWVyciA9IHRydWU7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHVubGlrZWx5KHNsYXZlX2FkZHIg IT0gaTJjX2NvbW1vbi0+bXNnLT5hZGRyKSkgew0KPiArCQlkZXZfZXJyKG5kZXZfZGV2KHByaXZk YXRhKSwNCj4gKwkJCSJ1bmV4cGVjdGVkIHNsYXZlIGFkZHJlc3MgJXggKGV4cGVjdGVkOiAleCkh XG4iLA0KPiArCQkJc2xhdmVfYWRkciwgaTJjX2NvbW1vbi0+bXNnLT5hZGRyKTsNCj4gKwkJZXJy ID0gdHJ1ZTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoIWVycikNCj4gKwkJaTJjX2NvbW1vbi0+Y21k X3N1Y2Nlc3MgPSB0cnVlOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBfX2FtZF9tcDJfcHJv Y2Vzc19ldmVudChzdHJ1Y3QgYW1kX2kyY19jb21tb24gKmkyY19jb21tb24pDQo+ICt7DQo+ICsJ c3RydWN0IGFtZF9tcDJfZGV2ICpwcml2ZGF0YSA9IGkyY19jb21tb24tPm1wMl9kZXY7DQo+ICsJ ZW51bSBzdGF0dXNfdHlwZSBzdHMgPSBpMmNfY29tbW9uLT5ldmVudHZhbC5yLnN0YXR1czsNCj4g KwllbnVtIHJlc3BvbnNlX3R5cGUgcmVzID0gaTJjX2NvbW1vbi0+ZXZlbnR2YWwuci5yZXNwb25z ZTsNCj4gKwlpbnQgbGVuID0gaTJjX2NvbW1vbi0+ZXZlbnR2YWwuci5sZW5ndGg7DQo+ICsNCj4g KwlpZiAocmVzICE9IGNvbW1hbmRfc3VjY2Vzcykgew0KPiArCQlpZiAocmVzID09IGNvbW1hbmRf ZmFpbGVkKQ0KPiArCQkJZGV2X2VycihuZGV2X2Rldihwcml2ZGF0YSksICJpMmMgY29tbWFuZCBm YWlsZWQhXG4iKTsNCj4gKwkJZWxzZQ0KPiArCQkJZGV2X2VycihuZGV2X2Rldihwcml2ZGF0YSks ICJpbnZhbGlkIHJlc3BvbnNlIHRvIGkyYyBjb21tYW5kIVxuIik7DQo+ICsJCXJldHVybjsNCj4g Kwl9DQo+ICsNCj4gKwlzd2l0Y2ggKGkyY19jb21tb24tPnJlcWNtZCkgew0KPiArCWNhc2UgaTJj X3JlYWQ6DQo+ICsJCWlmIChzdHMgPT0gaTJjX3JlYWRjb21wbGV0ZV9ldmVudCkgew0KPiArCQkJ YW1kX21wMl9wY2lfY2hlY2tfcndfZXZlbnQoaTJjX2NvbW1vbik7DQo+ICsJCQlpZiAobGVuIDw9 IDMyKQ0KPiArCQkJCW1lbWNweV9mcm9taW8oaTJjX2NvbW1vbi0+bXNnLT5idWYsDQo+ICsJCQkJ CSAgICAgIHByaXZkYXRhLT5tbWlvICsgQU1EX0MyUF9NU0cyLA0KPiArCQkJCQkgICAgICBpMmNf Y29tbW9uLT5tc2ctPmxlbik7DQo+ICsJCX0gZWxzZSBpZiAoc3RzID09IGkyY19yZWFkZmFpbF9l dmVudCkgew0KPiArCQkJZGV2X2VycihuZGV2X2Rldihwcml2ZGF0YSksICJpMmMgcmVhZCBmYWls ZWQhXG4iKTsNCj4gKwkJfSBlbHNlIHsNCj4gKwkJCWRldl9lcnIobmRldl9kZXYocHJpdmRhdGEp LA0KPiArCQkJCSJpbnZhbGlkIGkyYyBzdGF0dXMgYWZ0ZXIgcmVhZCAoJWQpIVxuIiwgc3RzKTsN Cj4gKwkJfQ0KPiArCQlicmVhazsNCj4gKwljYXNlIGkyY193cml0ZToNCj4gKwkJaWYgKHN0cyA9 PSBpMmNfd3JpdGVjb21wbGV0ZV9ldmVudCkNCj4gKwkJCWFtZF9tcDJfcGNpX2NoZWNrX3J3X2V2 ZW50KGkyY19jb21tb24pOw0KPiArCQllbHNlIGlmIChzdHMgPT0gaTJjX3dyaXRlZmFpbF9ldmVu dCkNCj4gKwkJCWRldl9lcnIobmRldl9kZXYocHJpdmRhdGEpLCAiaTJjIHdyaXRlIGZhaWxlZCFc biIpOw0KPiArCQllbHNlDQo+ICsJCQlkZXZfZXJyKG5kZXZfZGV2KHByaXZkYXRhKSwNCj4gKwkJ CQkiaW52YWxpZCBpMmMgc3RhdHVzIGFmdGVyIHdyaXRlICglZCkhXG4iLCBzdHMpOw0KPiArCQli cmVhazsNCj4gKwljYXNlIGkyY19lbmFibGU6DQo+ICsJCWlmIChzdHMgPT0gaTJjX2J1c2VuYWJs ZV9mYWlsZWQpDQo+ICsJCQlkZXZfZXJyKG5kZXZfZGV2KHByaXZkYXRhKSwgImkyYyBidXMgZW5h YmxlIGZhaWxlZCFcbiIpOw0KPiArCQllbHNlIGlmIChzdHMgIT0gaTJjX2J1c2VuYWJsZV9jb21w bGV0ZSkNCj4gKwkJCWRldl9lcnIobmRldl9kZXYocHJpdmRhdGEpLA0KPiArCQkJCSJpbnZhbGlk IGkyYyBzdGF0dXMgYWZ0ZXIgYnVzIGVuYWJsZSAoJWQpIVxuIiwNCj4gKwkJCQlzdHMpOw0KPiAr CQllbHNlDQo+ICsJCQlpMmNfY29tbW9uLT5jbWRfc3VjY2VzcyA9IHRydWU7DQo+ICsJCWJyZWFr Ow0KPiArCWNhc2UgaTJjX2Rpc2FibGU6DQo+ICsJCWlmIChzdHMgPT0gaTJjX2J1c2Rpc2FibGVf ZmFpbGVkKQ0KPiArCQkJZGV2X2VycihuZGV2X2Rldihwcml2ZGF0YSksICJpMmMgYnVzIGRpc2Fi bGUgZmFpbGVkIVxuIik7DQo+ICsJCWVsc2UgaWYgKHN0cyAhPSBpMmNfYnVzZGlzYWJsZV9jb21w bGV0ZSkNCj4gKwkJCWRldl9lcnIobmRldl9kZXYocHJpdmRhdGEpLA0KPiArCQkJCSJpbnZhbGlk IGkyYyBzdGF0dXMgYWZ0ZXIgYnVzIGRpc2FibGUgKCVkKSFcbiIsDQo+ICsJCQkJc3RzKTsNCj4g KwkJZWxzZQ0KPiArCQkJaTJjX2NvbW1vbi0+Y21kX3N1Y2Nlc3MgPSB0cnVlOw0KPiArCQlicmVh azsNCj4gKwlkZWZhdWx0Og0KPiArCQlicmVhazsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3ZvaWQg YW1kX21wMl9wcm9jZXNzX2V2ZW50KHN0cnVjdCBhbWRfaTJjX2NvbW1vbiAqaTJjX2NvbW1vbikN Cj4gK3sNCj4gKwlzdHJ1Y3QgYW1kX21wMl9kZXYgKnByaXZkYXRhID0gaTJjX2NvbW1vbi0+bXAy X2RldjsNCj4gKw0KPiArCWlmICh1bmxpa2VseShpMmNfY29tbW9uLT5yZXFjbWQgPT0gaTJjX25v bmUpKSB7DQo+ICsJCWRldl93YXJuKG5kZXZfZGV2KHByaXZkYXRhKSwNCj4gKwkJCSAicmVjZWl2 ZWQgbXNnIGJ1dCBubyBjbWQgd2FzIHNlbnQgKGJ1cyA9ICVkKSFcbiIsDQo+ICsJCQkgaTJjX2Nv bW1vbi0+YnVzX2lkKTsNCj4gKwkJcmV0dXJuOw0KPiArCX0NCj4gKw0KPiArCV9fYW1kX21wMl9w cm9jZXNzX2V2ZW50KGkyY19jb21tb24pOw0KPiArDQo+ICsJaTJjX2NvbW1vbi0+cmVxY21kID0g aTJjX25vbmU7DQo+ICsJYW1kX21wMl9jMnBfbXV0ZXhfdW5sb2NrKGkyY19jb21tb24pOw0KPiAr fQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwoYW1kX21wMl9wcm9jZXNzX2V2ZW50KTsNCj4gKw0KPiAr c3RhdGljIGlycXJldHVybl90IGFtZF9tcDJfaXJxX2lzcihpbnQgaXJxLCB2b2lkICpkZXYpDQo+ ICt7DQo+ICsJc3RydWN0IGFtZF9tcDJfZGV2ICpwcml2ZGF0YSA9IGRldjsNCj4gKwlzdHJ1Y3Qg YW1kX2kyY19jb21tb24gKmkyY19jb21tb247DQo+ICsJdTMyIHZhbDsNCj4gKwl1bnNpZ25lZCBp bnQgYnVzX2lkOw0KPiArCXZvaWQgX19pb21lbSAqcmVnOw0KPiArCWVudW0gaXJxcmV0dXJuIHJl dCA9IElSUV9OT05FOw0KPiArDQo+ICsJZm9yIChidXNfaWQgPSAwOyBidXNfaWQgPCAyOyBidXNf aWQrKykgew0KPiArCQlpMmNfY29tbW9uID0gcHJpdmRhdGEtPmJ1c3Nlc1tidXNfaWRdOw0KPiAr CQlpZiAoIWkyY19jb21tb24pDQo+ICsJCQljb250aW51ZTsNCj4gKw0KPiArCQlyZWcgPSBwcml2 ZGF0YS0+bW1pbyArICgoYnVzX2lkID09IDApID8NCj4gKwkJCQkJQU1EX1AyQ19NU0cxIDogQU1E X1AyQ19NU0cyKTsNCj4gKwkJdmFsID0gcmVhZGwocmVnKTsNCj4gKwkJaWYgKHZhbCAhPSAwKSB7 DQo+ICsJCQl3cml0ZWwoMCwgcmVnKTsNCj4gKwkJCXdyaXRlbCgwLCBwcml2ZGF0YS0+bW1pbyAr IEFNRF9QMkNfTVNHX0lOVEVOKTsNCj4gKwkJCWkyY19jb21tb24tPmV2ZW50dmFsLnVsID0gdmFs Ow0KPiArCQkJaTJjX2NvbW1vbi0+Y21kX2NvbXBsZXRpb24oaTJjX2NvbW1vbik7DQo+ICsNCj4g KwkJCXJldCA9IElSUV9IQU5ETEVEOw0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHJldCAh PSBJUlFfSEFORExFRCkgew0KPiArCQl2YWwgPSByZWFkbChwcml2ZGF0YS0+bW1pbyArIEFNRF9Q MkNfTVNHX0lOVEVOKTsNCj4gKwkJaWYgKHVubGlrZWx5KHZhbCAhPSAwKSkgew0KPiArCQkJd3Jp dGVsKDAsIHByaXZkYXRhLT5tbWlvICsgQU1EX1AyQ19NU0dfSU5URU4pOw0KPiArCQkJZGV2X3dh cm4obmRldl9kZXYocHJpdmRhdGEpLA0KPiArCQkJCSAicmVjZWl2ZWQgaXJxIHdpdGhvdXQgbWVz c2FnZVxuIik7DQo+ICsJCQlyZXQgPSBJUlFfSEFORExFRDsNCj4gKwkJfQ0KPiArCX0NCj4gKw0K PiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3ZvaWQgYW1kX21wMl9yd190aW1lb3V0KHN0 cnVjdCBhbWRfaTJjX2NvbW1vbiAqaTJjX2NvbW1vbikNCj4gK3sNCj4gKwlpMmNfY29tbW9uLT5y ZXFjbWQgPSBpMmNfbm9uZTsNCj4gKwlhbWRfbXAyX2MycF9tdXRleF91bmxvY2soaTJjX2NvbW1v bik7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MX0dQTChhbWRfbXAyX3J3X3RpbWVvdXQpOw0KPiAr DQo+ICtpbnQgYW1kX21wMl9yZWdpc3Rlcl9jYihzdHJ1Y3QgYW1kX2kyY19jb21tb24gKmkyY19j b21tb24pDQo+ICt7DQo+ICsJc3RydWN0IGFtZF9tcDJfZGV2ICpwcml2ZGF0YSA9IGkyY19jb21t b24tPm1wMl9kZXY7DQo+ICsNCj4gKwlpZiAoaTJjX2NvbW1vbi0+YnVzX2lkID4gMSkNCj4gKwkJ cmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlpZiAocHJpdmRhdGEtPmJ1c3Nlc1tpMmNfY29tbW9u LT5idXNfaWRdKSB7DQo+ICsJCWRldl9lcnIobmRldl9kZXYocHJpdmRhdGEpLA0KPiArCQkJIkJ1 cyAlZCBhbHJlYWR5IHRha2VuIVxuIiwgaTJjX2NvbW1vbi0+YnVzX2lkKTsNCj4gKwkJcmV0dXJu IC1FSU5WQUw7DQo+ICsJfQ0KPiArDQo+ICsJcHJpdmRhdGEtPmJ1c3Nlc1tpMmNfY29tbW9uLT5i dXNfaWRdID0gaTJjX2NvbW1vbjsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArRVhQT1JU X1NZTUJPTF9HUEwoYW1kX21wMl9yZWdpc3Rlcl9jYik7DQo+ICsNCj4gK2ludCBhbWRfbXAyX3Vu cmVnaXN0ZXJfY2Ioc3RydWN0IGFtZF9pMmNfY29tbW9uICppMmNfY29tbW9uKQ0KPiArew0KPiAr CXN0cnVjdCBhbWRfbXAyX2RldiAqcHJpdmRhdGEgPSBpMmNfY29tbW9uLT5tcDJfZGV2Ow0KPiAr DQo+ICsJcHJpdmRhdGEtPmJ1c3Nlc1tpMmNfY29tbW9uLT5idXNfaWRdID0gTlVMTDsNCj4gKw0K PiArCXJldHVybiAwOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwoYW1kX21wMl91bnJlZ2lz dGVyX2NiKTsNCj4gKw0KPiArI2lmZGVmIENPTkZJR19ERUJVR19GUw0KPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYW1kX21wMl9kZWJ1Z2ZzX2luZm87DQo+ICtzdGF0aWMg c3RydWN0IGRlbnRyeSAqZGVidWdmc19yb290X2RpcjsNCj4gKw0KPiArc3RhdGljIHNzaXplX3Qg YW1kX21wMl9kZWJ1Z2ZzX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVm LA0KPiArCQkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmcCkNCj4gK3sNCj4gKwlzdHJ1 Y3QgYW1kX21wMl9kZXYgKnByaXZkYXRhID0gZmlscC0+cHJpdmF0ZV9kYXRhOw0KPiArCXNpemVf dCBidWZfc2l6ZSA9IG1pbl90KHNpemVfdCwgY291bnQsIDB4ODAwKTsNCj4gKwl1OCAqYnVmOw0K PiArCXNzaXplX3QgcmV0LCBvZmYgPSAwOw0KPiArCXUzMiB2MzI7DQo+ICsJaW50IGk7DQo+ICsN Cj4gKwlidWYgPSBrbWFsbG9jKGJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsNCj4gKwlpZiAoIWJ1ZikN Cj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKwlvZmYgKz0gc2NucHJpbnRmKGJ1ZiArIG9m ZiwgYnVmX3NpemUgLSBvZmYsDQo+ICsJCQkgIk1QMiBEZXZpY2UgSW5mb3JtYXRpb246XG4iDQo+ ICsJCQkgIj09PT09PT09PT09PT09PT09PT09PT09PVxuIg0KPiArCQkJICJcdE1QMiBDMlAgTWVz c2FnZSBSZWdpc3RlciBEdW1wOlxuXG4iKTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCAxMDsg aSsrKSB7DQo+ICsJCXYzMiA9IHJlYWRsKHByaXZkYXRhLT5tbWlvICsgQU1EX0MyUF9NU0cwICsg aSAqIDQpOw0KPiArCQlvZmYgKz0gc2NucHJpbnRmKGJ1ZiArIG9mZiwgYnVmX3NpemUgLSBvZmYs DQo+ICsJCQkJICJBTURfQzJQX01TRyVkIC1cdFx0XHQlIzA2eFxuIiwgaSwgdjMyKTsNCj4gKwl9 DQo+ICsNCj4gKwlvZmYgKz0gc2NucHJpbnRmKGJ1ZiArIG9mZiwgYnVmX3NpemUgLSBvZmYsDQo+ ICsJCQkiXG5cdE1QMiBQMkMgTWVzc2FnZSBSZWdpc3RlciBEdW1wOlxuXG4iKTsNCj4gKw0KPiAr CWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsNCj4gKwkJdjMyID0gcmVhZGwocHJpdmRhdGEtPm1t aW8gKyBBTURfUDJDX01TRzEgKyBpICogNCk7DQo+ICsJCW9mZiArPSBzY25wcmludGYoYnVmICsg b2ZmLCBidWZfc2l6ZSAtIG9mZiwNCj4gKwkJCQkgIkFNRF9QMkNfTVNHJWQgLVx0XHRcdCUjMDZ4 XG4iLCBpICsgMSwgdjMyKTsNCj4gKwl9DQo+ICsNCj4gKwl2MzIgPSByZWFkbChwcml2ZGF0YS0+ bW1pbyArIEFNRF9QMkNfTVNHX0lOVEVOKTsNCj4gKwlvZmYgKz0gc2NucHJpbnRmKGJ1ZiArIG9m ZiwgYnVmX3NpemUgLSBvZmYsDQo+ICsJCQkiQU1EX1AyQ19NU0dfSU5URU4gLVx0XHQlIzA2eFxu IiwgdjMyKTsNCj4gKw0KPiArCXYzMiA9IHJlYWRsKHByaXZkYXRhLT5tbWlvICsgQU1EX1AyQ19N U0dfSU5UU1RTKTsNCj4gKwlvZmYgKz0gc2NucHJpbnRmKGJ1ZiArIG9mZiwgYnVmX3NpemUgLSBv ZmYsDQo+ICsJCQkiQU1EX1AyQ19NU0dfSU5UU1RTIC1cdFx0JSMwNnhcbiIsIHYzMik7DQo+ICsN Cj4gKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjb3VudCwgb2ZmcCwgYnVm LCBvZmYpOw0KPiArCWtmcmVlKGJ1Zik7DQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYW1kX21wMl9kZWJ1Z2ZzX2luZm8g PSB7DQo+ICsJLm93bmVyID0gVEhJU19NT0RVTEUsDQo+ICsJLm9wZW4gPSBzaW1wbGVfb3BlbiwN Cj4gKwkucmVhZCA9IGFtZF9tcDJfZGVidWdmc19yZWFkLA0KPiArfTsNCj4gKw0KPiArc3RhdGlj IHZvaWQgYW1kX21wMl9pbml0X2RlYnVnZnMoc3RydWN0IGFtZF9tcDJfZGV2ICpwcml2ZGF0YSkN Cj4gK3sNCj4gKwlpZiAoIWRlYnVnZnNfcm9vdF9kaXIpDQo+ICsJCXJldHVybjsNCj4gKw0KPiAr CXByaXZkYXRhLT5kZWJ1Z2ZzX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihuZGV2X25hbWUocHJp dmRhdGEpLA0KPiArCQkJCQkJICAgZGVidWdmc19yb290X2Rpcik7DQo+ICsJaWYgKCFwcml2ZGF0 YS0+ZGVidWdmc19kaXIpIHsNCj4gKwkJcHJpdmRhdGEtPmRlYnVnZnNfaW5mbyA9IE5VTEw7DQo+ ICsJfSBlbHNlIHsNCj4gKwkJcHJpdmRhdGEtPmRlYnVnZnNfaW5mbyA9IGRlYnVnZnNfY3JlYXRl X2ZpbGUNCj4gKwkJCSgiaW5mbyIsIDA0MDAsIHByaXZkYXRhLT5kZWJ1Z2ZzX2RpciwNCj4gKwkJ CSBwcml2ZGF0YSwgJmFtZF9tcDJfZGVidWdmc19pbmZvKTsNCj4gKwl9DQo+ICt9DQo+ICsjZW5k aWYgLyogQ09ORklHX0RFQlVHX0ZTICovDQo+ICsNCj4gK3N0YXRpYyB2b2lkIGFtZF9tcDJfY2xl YXJfcmVnKHN0cnVjdCBhbWRfbXAyX2RldiAqcHJpdmRhdGEpDQo+ICt7DQo+ICsJaW50IHJlZzsN Cj4gKw0KPiArCWZvciAocmVnID0gQU1EX0MyUF9NU0cwOyByZWcgPD0gQU1EX0MyUF9NU0c5OyBy ZWcgKz0gNCkNCj4gKwkJd3JpdGVsKDAsIHByaXZkYXRhLT5tbWlvICsgcmVnKTsNCj4gKw0KPiAr CWZvciAocmVnID0gQU1EX1AyQ19NU0cxOyByZWcgPD0gQU1EX1AyQ19NU0cyOyByZWcgKz0gNCkN Cj4gKwkJd3JpdGVsKDAsIHByaXZkYXRhLT5tbWlvICsgcmVnKTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIGludCBhbWRfbXAyX3BjaV9pbml0KHN0cnVjdCBhbWRfbXAyX2RldiAqcHJpdmRhdGEsDQo+ ICsJCQkgICAgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpDQo+ICt7DQo+ICsJaW50IHJjOw0KPiAr DQo+ICsJcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIHByaXZkYXRhKTsNCj4gKw0KPiArCXJjID0g cGNpbV9lbmFibGVfZGV2aWNlKHBjaV9kZXYpOw0KPiArCWlmIChyYykgew0KPiArCQlkZXZfZXJy KG5kZXZfZGV2KHByaXZkYXRhKSwgIkZhaWxlZCB0byBlbmFibGUgTVAyIFBDSSBkZXZpY2VcbiIp Ow0KPiArCQlnb3RvIGVycl9wY2lfZW5hYmxlOw0KPiArCX0NCj4gKw0KPiArCXJjID0gcGNpbV9p b21hcF9yZWdpb25zKHBjaV9kZXYsIDEgPDwgMiwgcGNpX25hbWUocGNpX2RldikpOw0KPiArCWlm IChyYykgew0KPiArCQlkZXZfZXJyKG5kZXZfZGV2KHByaXZkYXRhKSwgIkkvTyBtZW1vcnkgcmVt YXBwaW5nIGZhaWxlZFxuIik7DQo+ICsJCWdvdG8gZXJyX3BjaV9lbmFibGU7DQo+ICsJfQ0KPiAr CXByaXZkYXRhLT5tbWlvID0gcGNpbV9pb21hcF90YWJsZShwY2lfZGV2KVsyXTsNCj4gKw0KPiAr CXBjaV9zZXRfbWFzdGVyKHBjaV9kZXYpOw0KPiArDQo+ICsJcmMgPSBwY2lfc2V0X2RtYV9tYXNr KHBjaV9kZXYsIERNQV9CSVRfTUFTSyg2NCkpOw0KPiArCWlmIChyYykgew0KPiArCQlyYyA9IHBj aV9zZXRfZG1hX21hc2socGNpX2RldiwgRE1BX0JJVF9NQVNLKDMyKSk7DQo+ICsJCWlmIChyYykN Cj4gKwkJCWdvdG8gZXJyX2RtYV9tYXNrOw0KPiArCX0NCj4gKw0KPiArCS8qIFNldCB1cCBpbnR4 IGlycSAqLw0KPiArCXdyaXRlbCgwLCBwcml2ZGF0YS0+bW1pbyArIEFNRF9QMkNfTVNHX0lOVEVO KTsNCj4gKwlwY2lfaW50eChwY2lfZGV2LCAxKTsNCj4gKwlyYyA9IGRldm1fcmVxdWVzdF9pcnEo JnBjaV9kZXYtPmRldiwgcGNpX2Rldi0+aXJxLCBhbWRfbXAyX2lycV9pc3IsDQo+ICsJCQkgICAg ICBJUlFGX1NIQVJFRCwgZGV2X25hbWUoJnBjaV9kZXYtPmRldiksIHByaXZkYXRhKTsNCj4gKwlp ZiAocmMpDQo+ICsJCWRldl9lcnIoJnBjaV9kZXYtPmRldiwgIkZhaWx1cmUgcmVxdWVzdGluZyBp cnEgJWk6ICVkXG4iLA0KPiArCQkJcGNpX2Rldi0+aXJxLCByYyk7DQo+ICsNCj4gKwlyZXR1cm4g cmM7DQo+ICsNCj4gK2Vycl9kbWFfbWFzazoNCj4gKwlwY2lfY2xlYXJfbWFzdGVyKHBjaV9kZXYp Ow0KPiArZXJyX3BjaV9lbmFibGU6DQo+ICsJcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIE5VTEwp Ow0KPiArCXJldHVybiByYzsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBhbWRfbXAyX3BjaV9w cm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwNCj4gKwkJCSAgICAgY29uc3Qgc3RydWN0IHBj aV9kZXZpY2VfaWQgKmlkKQ0KPiArew0KPiArCXN0cnVjdCBhbWRfbXAyX2RldiAqcHJpdmRhdGE7 DQo+ICsJaW50IHJjOw0KPiArCXN0YXRpYyBib29sIGZpcnN0X3Byb2JlID0gdHJ1ZTsNCj4gKw0K PiArCWlmIChmaXJzdF9wcm9iZSkgew0KPiArCQlwcl9pbmZvKCIlczogJXMgVmVyc2lvbjogJXNc biIsIERSSVZFUl9OQU1FLA0KPiArCQkJRFJJVkVSX0RFU0MsIERSSVZFUl9WRVIpOw0KPiArCQlm aXJzdF9wcm9iZSA9IGZhbHNlOw0KPiArCX0NCj4gKw0KPiArCWRldl9pbmZvKCZwY2lfZGV2LT5k ZXYsICJNUDIgZGV2aWNlIGZvdW5kIFslMDR4OiUwNHhdIChyZXYgJXgpXG4iLA0KPiArCQkgcGNp X2Rldi0+dmVuZG9yLCBwY2lfZGV2LT5kZXZpY2UsIHBjaV9kZXYtPnJldmlzaW9uKTsNCj4gKw0K PiArCXByaXZkYXRhID0gZGV2bV9remFsbG9jKCZwY2lfZGV2LT5kZXYsIHNpemVvZigqcHJpdmRh dGEpLCBHRlBfS0VSTkVMKTsNCj4gKwlpZiAoIXByaXZkYXRhKQ0KPiArCQlyZXR1cm4gLUVOT01F TTsNCj4gKw0KPiArCXJjID0gYW1kX21wMl9wY2lfaW5pdChwcml2ZGF0YSwgcGNpX2Rldik7DQo+ ICsJaWYgKHJjKQ0KPiArCQlyZXR1cm4gcmM7DQo+ICsNCj4gKwltdXRleF9pbml0KCZwcml2ZGF0 YS0+YzJwX2xvY2spOw0KPiArCXByaXZkYXRhLT5wY2lfZGV2ID0gcGNpX2RldjsNCj4gKw0KPiAr CXBtX3J1bnRpbWVfc2V0X2F1dG9zdXNwZW5kX2RlbGF5KCZwY2lfZGV2LT5kZXYsIDEwMDApOw0K PiArCXBtX3J1bnRpbWVfdXNlX2F1dG9zdXNwZW5kKCZwY2lfZGV2LT5kZXYpOw0KPiArCXBtX3J1 bnRpbWVfcHV0X2F1dG9zdXNwZW5kKCZwY2lfZGV2LT5kZXYpOw0KPiArCXBtX3J1bnRpbWVfYWxs b3coJnBjaV9kZXYtPmRldik7DQo+ICsNCj4gKwlhbWRfbXAyX2luaXRfZGVidWdmcyhwcml2ZGF0 YSk7DQo+ICsJZGV2X2luZm8oJnBjaV9kZXYtPmRldiwgIk1QMiBkZXZpY2UgcmVnaXN0ZXJlZC5c biIpOw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBhbWRfbXAyX3Bj aV9pc19wcm9iZWQoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpDQo+ICt7DQo+ICsJc3RydWN0IGFt ZF9tcDJfZGV2ICpwcml2ZGF0YSA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsNCj4gKw0KPiAr CWlmICghcHJpdmRhdGEpDQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKwlyZXR1cm4gcHJpdmRhdGEt PnBjaV9kZXYgIT0gTlVMTDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgYW1kX21wMl9wY2lf cmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQ0KPiArew0KPiArCXN0cnVjdCBhbWRfbXAy X2RldiAqcHJpdmRhdGEgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7DQo+ICsNCj4gKwlwbV9y dW50aW1lX2ZvcmJpZCgmcGNpX2Rldi0+ZGV2KTsNCj4gKwlwbV9ydW50aW1lX2dldF9ub3Jlc3Vt ZSgmcGNpX2Rldi0+ZGV2KTsNCj4gKw0KPiArI2lmZGVmIENPTkZJR19ERUJVR19GUw0KPiArCWRl YnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShwcml2ZGF0YS0+ZGVidWdmc19kaXIpOw0KPiArI2VuZGlm IC8qIENPTkZJR19ERUJVR19GUyAqLw0KPiArDQo+ICsJcGNpX2ludHgocGNpX2RldiwgMCk7DQo+ ICsJcGNpX2NsZWFyX21hc3RlcihwY2lfZGV2KTsNCj4gKw0KPiArCWFtZF9tcDJfY2xlYXJfcmVn KHByaXZkYXRhKTsNCj4gK30NCj4gKw0KPiArI2lmZGVmIENPTkZJR19QTQ0KPiArc3RhdGljIGlu dCBhbWRfbXAyX3BjaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gK3sNCj4gKwlzdHJ1 Y3QgcGNpX2RldiAqcGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTsNCj4gKwlzdHJ1Y3QgYW1kX21w Ml9kZXYgKnByaXZkYXRhID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOw0KPiArCXN0cnVjdCBh bWRfaTJjX2NvbW1vbiAqaTJjX2NvbW1vbjsNCj4gKwl1bnNpZ25lZCBpbnQgYnVzX2lkOw0KPiAr CWludCByZXQgPSAwOw0KPiArDQo+ICsJZm9yIChidXNfaWQgPSAwOyBidXNfaWQgPCAyOyBidXNf aWQrKykgew0KPiArCQlpMmNfY29tbW9uID0gcHJpdmRhdGEtPmJ1c3Nlc1tidXNfaWRdOw0KPiAr CQlpZiAoaTJjX2NvbW1vbikNCj4gKwkJCWkyY19jb21tb24tPnN1c3BlbmQoaTJjX2NvbW1vbik7 DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0gcGNpX3NhdmVfc3RhdGUocGNpX2Rldik7DQo+ICsJaWYg KHJldCkgew0KPiArCQlkZXZfZXJyKG5kZXZfZGV2KHByaXZkYXRhKSwNCj4gKwkJCSJwY2lfc2F2 ZV9zdGF0ZSBmYWlsZWQgPSAlZFxuIiwgcmV0KTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ ICsNCj4gKwlwY2lfZGlzYWJsZV9kZXZpY2UocGNpX2Rldik7DQo+ICsJcmV0dXJuIHJldDsNCj4g K30NCj4gKw0KPiArc3RhdGljIGludCBhbWRfbXAyX3BjaV9yZXN1bWUoc3RydWN0IGRldmljZSAq ZGV2KQ0KPiArew0KPiArCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYp Ow0KPiArCXN0cnVjdCBhbWRfbXAyX2RldiAqcHJpdmRhdGEgPSBwY2lfZ2V0X2RydmRhdGEocGNp X2Rldik7DQo+ICsJc3RydWN0IGFtZF9pMmNfY29tbW9uICppMmNfY29tbW9uOw0KPiArCXVuc2ln bmVkIGludCBidXNfaWQ7DQo+ICsJaW50IHJldCA9IDA7DQo+ICsNCj4gKwlwY2lfcmVzdG9yZV9z dGF0ZShwY2lfZGV2KTsNCj4gKwlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwY2lfZGV2KTsNCj4g KwlpZiAocmV0IDwgMCkgew0KPiArCQlkZXZfZXJyKG5kZXZfZGV2KHByaXZkYXRhKSwNCj4gKwkJ CSJwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQgPSAlZFxuIiwgcmV0KTsNCj4gKwkJcmV0dXJuIHJl dDsNCj4gKwl9DQo+ICsNCj4gKwlmb3IgKGJ1c19pZCA9IDA7IGJ1c19pZCA8IDI7IGJ1c19pZCsr KSB7DQo+ICsJCWkyY19jb21tb24gPSBwcml2ZGF0YS0+YnVzc2VzW2J1c19pZF07DQo+ICsJCWlm IChpMmNfY29tbW9uKSB7DQo+ICsJCQlyZXQgPSBpMmNfY29tbW9uLT5yZXN1bWUoaTJjX2NvbW1v bik7DQo+ICsJCQlpZiAocmV0IDwgMCkNCj4gKwkJCQlyZXR1cm4gcmV0Ow0KPiArCQl9DQo+ICsJ fQ0KPiArDQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3RhdGljIFVOSVZFUlNBTF9E RVZfUE1fT1BTKGFtZF9tcDJfcGNpX3BtX29wcywgYW1kX21wMl9wY2lfc3VzcGVuZCwNCj4gKwkJ CSAgICBhbWRfbXAyX3BjaV9yZXN1bWUsIE5VTEwpOw0KPiArI2VuZGlmIC8qIENPTkZJR19QTSAq Lw0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYW1kX21wMl9wY2lf dGJsW10gPSB7DQo+ICsJe1BDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfTVAyKX0s DQo+ICsJezB9DQo+ICt9Ow0KPiArTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFtZF9tcDJfcGNp X3RibCk7DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhbWRfbXAyX3BjaV9kcml2 ZXIgPSB7DQo+ICsJLm5hbWUJCT0gRFJJVkVSX05BTUUsDQo+ICsJLmlkX3RhYmxlCT0gYW1kX21w Ml9wY2lfdGJsLA0KPiArCS5wcm9iZQkJPSBhbWRfbXAyX3BjaV9wcm9iZSwNCj4gKwkucmVtb3Zl CQk9IGFtZF9tcDJfcGNpX3JlbW92ZSwNCj4gKyNpZmRlZiBDT05GSUdfUE0NCj4gKwkuZHJpdmVy ID0gew0KPiArCQkucG0JPSAmYW1kX21wMl9wY2lfcG1fb3BzLA0KPiArCX0sDQo+ICsjZW5kaWYN Cj4gK307DQo+ICsNCj4gK3N0YXRpYyBpbnQgYW1kX21wMl9kZXZpY2VfbWF0Y2goc3RydWN0IGRl dmljZSAqZGV2LCB2b2lkICpkYXRhKQ0KPiArew0KPiArCXJldHVybiAxOw0KPiArfQ0KPiArDQo+ ICtzdHJ1Y3QgYW1kX21wMl9kZXYgKmFtZF9tcDJfZmluZF9kZXZpY2Uodm9pZCkNCj4gK3sNCj4g KwlzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ICsJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7DQo+ICsN Cj4gKwlkZXYgPSBkcml2ZXJfZmluZF9kZXZpY2UoJmFtZF9tcDJfcGNpX2RyaXZlci5kcml2ZXIs IE5VTEwsIE5VTEwsDQo+ICsJCQkJIGFtZF9tcDJfZGV2aWNlX21hdGNoKTsNCj4gKwlpZiAoIWRl dikNCj4gKwkJcmV0dXJuIE5VTEw7DQo+ICsNCj4gKwlwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYp Ow0KPiArCWlmICghYW1kX21wMl9wY2lfaXNfcHJvYmVkKHBjaV9kZXYpKQ0KPiArCQlyZXR1cm4g TlVMTDsNCj4gKwlyZXR1cm4gKHN0cnVjdCBhbWRfbXAyX2RldiAqKXBjaV9nZXRfZHJ2ZGF0YShw Y2lfZGV2KTsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0xfR1BMKGFtZF9tcDJfZmluZF9kZXZpY2Up Ow0KPiArDQo+ICtzdGF0aWMgaW50IF9faW5pdCBhbWRfbXAyX2Rydl9pbml0KHZvaWQpDQo+ICt7 DQo+ICsjaWZkZWYgQ09ORklHX0RFQlVHX0ZTDQo+ICsJZGVidWdmc19yb290X2RpciA9IGRlYnVn ZnNfY3JlYXRlX2RpcihLQlVJTERfTU9ETkFNRSwgTlVMTCk7DQo+ICsjZW5kaWYgLyogQ09ORklH X0RFQlVHX0ZTICovDQo+ICsNCj4gKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYW1kX21w Ml9wY2lfZHJpdmVyKTsNCj4gK30NCj4gK21vZHVsZV9pbml0KGFtZF9tcDJfZHJ2X2luaXQpOw0K PiArDQo+ICtzdGF0aWMgdm9pZCBfX2V4aXQgYW1kX21wMl9kcnZfZXhpdCh2b2lkKQ0KPiArew0K PiArCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYW1kX21wMl9wY2lfZHJpdmVyKTsNCj4gKw0KPiAr I2lmZGVmIENPTkZJR19ERUJVR19GUw0KPiArCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkZWJ1 Z2ZzX3Jvb3RfZGlyKTsNCj4gKyNlbmRpZiAvKiBDT05GSUdfREVCVUdfRlMgKi8NCj4gK30NCj4g K21vZHVsZV9leGl0KGFtZF9tcDJfZHJ2X2V4aXQpOw0KPiArDQo+ICtNT0RVTEVfREVTQ1JJUFRJ T04oRFJJVkVSX0RFU0MpOw0KPiArTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUik7DQo+ICtNT0RV TEVfQVVUSE9SKCJTaHlhbSBTdW5kYXIgUyBLIDxTaHlhbS1zdW5kYXIuUy1rQGFtZC5jb20+Iik7 DQo+ICtNT0RVTEVfQVVUSE9SKCJFbGllIE1vcmlzc2UgPHN5bml1cmdlQGdtYWlsLmNvbT4iKTsN Cj4gK01PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsNCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvaTJjL2J1c3Nlcy9pMmMtYW1kLW1wMi1wbGF0LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJj LWFtZC1tcDItcGxhdC5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAw MDAwMC4uMDZjZjJiNjY1OGU1DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9pMmMv YnVzc2VzL2kyYy1hbWQtbXAyLXBsYXQuYw0KPiBAQCAtMCwwICsxLDM5MiBAQA0KPiArLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlDQo+ICsvKg0KPiAr ICogQU1EIE1QMiBwbGF0Zm9ybSBkcml2ZXINCj4gKyAqDQo+ICsgKiBTZXR1cCB0aGUgSTJDIGFk YXB0ZXJzIGVudW1lcmF0ZWQgaW4gdGhlIEFDUEkgbmFtZXNwYWNlLg0KPiArICogTVAyIGNvbnRy b2xsZXJzIGhhdmUgMiBzZXBhcmF0ZSBidXNzZXMsIHVwIHRvIDIgSTJDIGFkYXB0ZXJzIG1heSBi ZSBsaXN0ZWQuDQo+ICsgKg0KPiArICogQXV0aG9yczogTmVoYWwgQmFrdWxjaGFuZHJhIFNoYWgg PE5laGFsLWJha3VsY2hhbmRyYS5zaGFoQGFtZC5jb20+DQo+ICsgKiAgICAgICAgICBFbGllIE1v cmlzc2UgPHN5bml1cmdlQGdtYWlsLmNvbT4NCj4gKyAqLw0KPiArDQo+ICsjaW5jbHVkZSA8bGlu dXgvYWNwaS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KPiArI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPiAr I2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KPiAr DQo+ICsjaW5jbHVkZSAiaTJjLWFtZC1tcDIuaCINCj4gKw0KPiArI2RlZmluZSBBTURfTVAyX0ky Q19NQVhfUldfTEVOR1RIICgoMSA8PCAxMikgLSAxKQ0KPiArI2RlZmluZSBBTURfSTJDX1RJTUVP VVQgKG1zZWNzX3RvX2ppZmZpZXMoMjUwKSkNCj4gKw0KPiArLyoqDQo+ICsgKiBzdHJ1Y3QgYW1k X2kyY19kZXYgLSBNUDIgYnVzL2kyYyBhZGFwdGVyIGNvbnRleHQNCj4gKyAqIEBjb21tb246IHNo YXJlZCBjb250ZXh0IHdpdGggdGhlIE1QMiBQQ0kgZHJpdmVyDQo+ICsgKiBAcGRldjogcGxhdGZv cm0gZHJpdmVyIG5vZGUNCj4gKyAqIEBhZGFwOiBpMmMgYWRhcHRlcg0KPiArICogQGNtZF9jb21w bGV0ZTogeGZlciBjb21wbGV0aW9uIG9iamVjdA0KPiArICovDQo+ICtzdHJ1Y3QgYW1kX2kyY19k ZXYgew0KPiArCXN0cnVjdCBhbWRfaTJjX2NvbW1vbiBjb21tb247DQo+ICsJc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldjsNCj4gKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgYWRhcDsNCj4gKwlzdHJ1 Y3QgY29tcGxldGlvbiBjbWRfY29tcGxldGU7DQo+ICt9Ow0KPiArDQo+ICsjZGVmaW5lIGFtZF9p MmNfZGV2X2NvbW1vbihfX2NvbW1vbikgXA0KPiArCWNvbnRhaW5lcl9vZihfX2NvbW1vbiwgc3Ry dWN0IGFtZF9pMmNfZGV2LCBjb21tb24pDQo+ICsNCj4gK3N0YXRpYyBpbnQgaTJjX2FtZF9kbWFf bWFwKHN0cnVjdCBhbWRfaTJjX2NvbW1vbiAqaTJjX2NvbW1vbikNCj4gK3sNCj4gKwlzdHJ1Y3Qg ZGV2aWNlICpkZXZfcGNpID0gJmkyY19jb21tb24tPm1wMl9kZXYtPnBjaV9kZXYtPmRldjsNCj4g KwlzdHJ1Y3QgYW1kX2kyY19kZXYgKmkyY19kZXYgPSBhbWRfaTJjX2Rldl9jb21tb24oaTJjX2Nv bW1vbik7DQo+ICsJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZG1hX2RpcmVjdGlvbiA9DQo+ICsJ CQlpMmNfY29tbW9uLT5tc2ctPmZsYWdzICYgSTJDX01fUkQgPw0KPiArCQkJRE1BX0ZST01fREVW SUNFIDogRE1BX1RPX0RFVklDRTsNCj4gKw0KPiArCWkyY19jb21tb24tPmRtYV9idWYgPSBpMmNf Z2V0X2RtYV9zYWZlX21zZ19idWYoaTJjX2NvbW1vbi0+bXNnLCAwKTsNCj4gKwlpMmNfY29tbW9u LT5kbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKGRldl9wY2ksIGkyY19jb21tb24tPmRtYV9idWYs DQo+ICsJCQkJCSAgICAgIGkyY19jb21tb24tPm1zZy0+bGVuLA0KPiArCQkJCQkgICAgICBkbWFf ZGlyZWN0aW9uKTsNCj4gKw0KPiArCWlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihkZXZf cGNpLCBpMmNfY29tbW9uLT5kbWFfYWRkcikpKSB7DQo+ICsJCWRldl9lcnIoJmkyY19kZXYtPnBk ZXYtPmRldiwNCj4gKwkJCSJFcnJvciB3aGlsZSBtYXBwaW5nIGRtYSBidWZmZXIgJXBcbiIsDQo+ ICsJCQlpMmNfY29tbW9uLT5kbWFfYnVmKTsNCj4gKwkJcmV0dXJuIC1FSU87DQo+ICsJfQ0KPiAr DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGkyY19hbWRfZG1hX3Vu bWFwKHN0cnVjdCBhbWRfaTJjX2NvbW1vbiAqaTJjX2NvbW1vbikNCj4gK3sNCj4gKwlzdHJ1Y3Qg ZGV2aWNlICpkZXZfcGNpID0gJmkyY19jb21tb24tPm1wMl9kZXYtPnBjaV9kZXYtPmRldjsNCj4g KwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkbWFfZGlyZWN0aW9uID0NCj4gKwkJCWkyY19jb21t b24tPm1zZy0+ZmxhZ3MgJiBJMkNfTV9SRCA/DQo+ICsJCQlETUFfRlJPTV9ERVZJQ0UgOiBETUFf VE9fREVWSUNFOw0KPiArDQo+ICsJZG1hX3VubWFwX3NpbmdsZShkZXZfcGNpLCBpMmNfY29tbW9u LT5kbWFfYWRkciwNCj4gKwkJCSBpMmNfY29tbW9uLT5tc2ctPmxlbiwgZG1hX2RpcmVjdGlvbik7 DQo+ICsNCj4gKwlpMmNfcHV0X2RtYV9zYWZlX21zZ19idWYoaTJjX2NvbW1vbi0+ZG1hX2J1Ziwg aTJjX2NvbW1vbi0+bXNnLCB0cnVlKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IGNoYXIg KmkyY19hbWRfY21kX25hbWUoZW51bSBpMmNfY21kIGNtZCkNCj4gK3sNCj4gKwlzd2l0Y2ggKGNt ZCkgew0KPiArCWNhc2UgaTJjX3JlYWQ6DQo+ICsJCXJldHVybiAiaTJjIHJlYWQiOw0KPiArCWNh c2UgaTJjX3dyaXRlOg0KPiArCQlyZXR1cm4gImkyYyB3cml0ZSI7DQo+ICsJY2FzZSBpMmNfZW5h YmxlOg0KPiArCQlyZXR1cm4gImJ1cyBlbmFibGUiOw0KPiArCWNhc2UgaTJjX2Rpc2FibGU6DQo+ ICsJCXJldHVybiAiYnVzIGRpc2FibGUiOw0KPiArCWNhc2UgbnVtYmVyX29mX3NlbnNvcl9kaXNj b3ZlcmVkOg0KPiArCQlyZXR1cm4gIidudW1iZXIgb2Ygc2Vuc29ycyBkaXNjb3ZlcmVkJyBjbWQi Ow0KPiArCWNhc2UgaXNfbXAyX2FjdGl2ZToNCj4gKwkJcmV0dXJuICInaXMgbXAyIGFjdGl2ZScg Y21kIjsNCj4gKwlkZWZhdWx0Og0KPiArCQlyZXR1cm4gImludmFsaWQgY21kIjsNCj4gKwl9DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGkyY19hbWRfc3RhcnRfY21kKHN0cnVjdCBhbWRfaTJj X2RldiAqaTJjX2RldikNCj4gK3sNCj4gKwlzdHJ1Y3QgYW1kX2kyY19jb21tb24gKmkyY19jb21t b24gPSAmaTJjX2Rldi0+Y29tbW9uOw0KPiArDQo+ICsJcmVpbml0X2NvbXBsZXRpb24oJmkyY19k ZXYtPmNtZF9jb21wbGV0ZSk7DQo+ICsJaTJjX2NvbW1vbi0+Y21kX3N1Y2Nlc3MgPSBmYWxzZTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaTJjX2FtZF9jbWRfY29tcGxldGlvbihzdHJ1Y3Qg YW1kX2kyY19jb21tb24gKmkyY19jb21tb24pDQo+ICt7DQo+ICsJc3RydWN0IGFtZF9pMmNfZGV2 ICppMmNfZGV2ID0gYW1kX2kyY19kZXZfY29tbW9uKGkyY19jb21tb24pOw0KPiArCXVuaW9uIGky Y19ldmVudCAqZXZlbnQgPSAmaTJjX2NvbW1vbi0+ZXZlbnR2YWw7DQo+ICsNCj4gKwlpZiAoZXZl bnQtPnIuc3RhdHVzID09IGkyY19yZWFkY29tcGxldGVfZXZlbnQpDQo+ICsJCWRldl9kYmcoJmky Y19kZXYtPnBkZXYtPmRldiwgIiVzIHJlYWRkYXRhOiUqcGhcbiIsDQo+ICsJCQlfX2Z1bmNfXywg ZXZlbnQtPnIubGVuZ3RoLA0KPiArCQkJaTJjX2NvbW1vbi0+bXNnLT5idWYpOw0KPiArDQo+ICsJ Y29tcGxldGUoJmkyY19kZXYtPmNtZF9jb21wbGV0ZSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBp bnQgaTJjX2FtZF9jaGVja19jbWRfY29tcGxldGlvbihzdHJ1Y3QgYW1kX2kyY19kZXYgKmkyY19k ZXYpDQo+ICt7DQo+ICsJc3RydWN0IGFtZF9pMmNfY29tbW9uICppMmNfY29tbW9uID0gJmkyY19k ZXYtPmNvbW1vbjsNCj4gKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7DQo+ICsNCj4gKwl0aW1lb3V0 ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpMmNfZGV2LT5jbWRfY29tcGxldGUsDQo+ ICsJCQkJCSAgICAgIGkyY19kZXYtPmFkYXAudGltZW91dCk7DQo+ICsJaWYgKHVubGlrZWx5KHRp bWVvdXQgPT0gMCkpIHsNCj4gKwkJZGV2X2VycigmaTJjX2Rldi0+cGRldi0+ZGV2LCAiJXMgdGlt ZWQgb3V0XG4iLA0KPiArCQkJaTJjX2FtZF9jbWRfbmFtZShpMmNfY29tbW9uLT5yZXFjbWQpKTsN Cj4gKwkJYW1kX21wMl9yd190aW1lb3V0KGkyY19jb21tb24pOw0KPiArCX0NCj4gKw0KPiArCWlm ICgoaTJjX2NvbW1vbi0+cmVxY21kID09IGkyY19yZWFkIHx8DQo+ICsJICAgICBpMmNfY29tbW9u LT5yZXFjbWQgPT0gaTJjX3dyaXRlKSAmJg0KPiArCSAgICBpMmNfY29tbW9uLT5tc2ctPmxlbiA+ IDMyKQ0KPiArCQlpMmNfYW1kX2RtYV91bm1hcChpMmNfY29tbW9uKTsNCj4gKw0KPiArCWlmICh1 bmxpa2VseSh0aW1lb3V0ID09IDApKQ0KPiArCQlyZXR1cm4gLUVUSU1FRE9VVDsNCj4gKw0KPiAr CWFtZF9tcDJfcHJvY2Vzc19ldmVudChpMmNfY29tbW9uKTsNCj4gKw0KPiArCWlmICghaTJjX2Nv bW1vbi0+Y21kX3N1Y2Nlc3MpDQo+ICsJCXJldHVybiAtRUlPOw0KPiArDQo+ICsJcmV0dXJuIDA7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaTJjX2FtZF9lbmFibGVfc2V0KHN0cnVjdCBhbWRf aTJjX2RldiAqaTJjX2RldiwgYm9vbCBlbmFibGUpDQo+ICt7DQo+ICsJc3RydWN0IGFtZF9pMmNf Y29tbW9uICppMmNfY29tbW9uID0gJmkyY19kZXYtPmNvbW1vbjsNCj4gKw0KPiArCWkyY19hbWRf c3RhcnRfY21kKGkyY19kZXYpOw0KPiArCWFtZF9tcDJfYnVzX2VuYWJsZV9zZXQoaTJjX2NvbW1v biwgZW5hYmxlKTsNCj4gKw0KPiArCXJldHVybiBpMmNfYW1kX2NoZWNrX2NtZF9jb21wbGV0aW9u KGkyY19kZXYpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGkyY19hbWRfeGZlcl9tc2coc3Ry dWN0IGFtZF9pMmNfZGV2ICppMmNfZGV2LCBzdHJ1Y3QgaTJjX21zZyAqcG1zZykNCj4gK3sNCj4g KwlzdHJ1Y3QgYW1kX2kyY19jb21tb24gKmkyY19jb21tb24gPSAmaTJjX2Rldi0+Y29tbW9uOw0K PiArDQo+ICsJaTJjX2FtZF9zdGFydF9jbWQoaTJjX2Rldik7DQo+ICsJaTJjX2NvbW1vbi0+bXNn ID0gcG1zZzsNCj4gKw0KPiArCWlmIChwbXNnLT5sZW4gPiAzMikNCj4gKwkJaWYgKGkyY19hbWRf ZG1hX21hcChpMmNfY29tbW9uKSkNCj4gKwkJCXJldHVybiAtRUlPOw0KPiArDQo+ICsJaWYgKHBt c2ctPmZsYWdzICYgSTJDX01fUkQpDQo+ICsJCWFtZF9tcDJfcmVhZChpMmNfY29tbW9uKTsNCj4g KwllbHNlDQo+ICsJCWFtZF9tcDJfd3JpdGUoaTJjX2NvbW1vbik7DQo+ICsNCj4gKwlyZXR1cm4g aTJjX2FtZF9jaGVja19jbWRfY29tcGxldGlvbihpMmNfZGV2KTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIGludCBpMmNfYW1kX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJj X21zZyAqbXNncywgaW50IG51bSkNCj4gK3sNCj4gKwlzdHJ1Y3QgYW1kX2kyY19kZXYgKmkyY19k ZXYgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOw0KPiArCWludCBpOw0KPiArCXN0cnVjdCBpMmNf bXNnICpwbXNnOw0KPiArCWludCBlcnI7DQo+ICsNCj4gKwkvKiB0aGUgYWRhcHRlciBtaWdodCBo YXZlIGJlZW4gZGVsZXRlZCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgYnVzIGxvY2sgKi8NCj4gKwlp ZiAodW5saWtlbHkoIWkyY19kZXYtPmNvbW1vbi5tcDJfZGV2KSkNCj4gKwkJcmV0dXJuIC1FSU5W QUw7DQo+ICsNCj4gKwlhbWRfbXAyX3BtX3J1bnRpbWVfZ2V0KGkyY19kZXYtPmNvbW1vbi5tcDJf ZGV2KTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgew0KPiArCQlwbXNnID0g Jm1zZ3NbaV07DQo+ICsJCWVyciA9IGkyY19hbWRfeGZlcl9tc2coaTJjX2RldiwgcG1zZyk7DQo+ ICsJCWlmIChlcnIpDQo+ICsJCQlicmVhazsNCj4gKwl9DQo+ICsNCj4gKwlhbWRfbXAyX3BtX3J1 bnRpbWVfcHV0KGkyY19kZXYtPmNvbW1vbi5tcDJfZGV2KTsNCj4gKwlyZXR1cm4gZXJyID8gZXJy IDogbnVtOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdTMyIGkyY19hbWRfZnVuYyhzdHJ1Y3QgaTJj X2FkYXB0ZXIgKmEpDQo+ICt7DQo+ICsJcmV0dXJuIEkyQ19GVU5DX0kyQzsNCj4gK30NCj4gKw0K PiArc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIGkyY19hbWRfYWxnb3JpdGhtID0g ew0KPiArCS5tYXN0ZXJfeGZlciA9IGkyY19hbWRfeGZlciwNCj4gKwkuZnVuY3Rpb25hbGl0eSA9 IGkyY19hbWRfZnVuYywNCj4gK307DQo+ICsNCj4gKyNpZmRlZiBDT05GSUdfUE0NCj4gK3N0YXRp YyBpbnQgaTJjX2FtZF9zdXNwZW5kKHN0cnVjdCBhbWRfaTJjX2NvbW1vbiAqaTJjX2NvbW1vbikN Cj4gK3sNCj4gKwlzdHJ1Y3QgYW1kX2kyY19kZXYgKmkyY19kZXYgPSBhbWRfaTJjX2Rldl9jb21t b24oaTJjX2NvbW1vbik7DQo+ICsNCj4gKwlpMmNfYW1kX2VuYWJsZV9zZXQoaTJjX2RldiwgZmFs c2UpOw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGkyY19hbWRfcmVz dW1lKHN0cnVjdCBhbWRfaTJjX2NvbW1vbiAqaTJjX2NvbW1vbikNCj4gK3sNCj4gKwlzdHJ1Y3Qg YW1kX2kyY19kZXYgKmkyY19kZXYgPSBhbWRfaTJjX2Rldl9jb21tb24oaTJjX2NvbW1vbik7DQo+ ICsNCj4gKwlyZXR1cm4gaTJjX2FtZF9lbmFibGVfc2V0KGkyY19kZXYsIHRydWUpOw0KPiArfQ0K PiArI2VuZGlmDQo+ICsNCj4gK3N0YXRpYyBlbnVtIHNwZWVkX2VudW0gaTJjX2FtZF9nZXRfYnVz X3NwZWVkKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ICt7DQo+ICsJdTMyIGFjcGlf c3BlZWQ7DQo+ICsJaW50IGk7DQo+ICsJc3RhdGljIGNvbnN0IHUzMiBzdXBwb3J0ZWRfc3BlZWRz W10gPSB7DQo+ICsJCTAsIDEwMDAwMCwgNDAwMDAwLCAxMDAwMDAwLCAxNDAwMDAwLCAzNDAwMDAw DQo+ICsJfTsNCj4gKw0KPiArCWFjcGlfc3BlZWQgPSBpMmNfYWNwaV9maW5kX2J1c19zcGVlZCgm cGRldi0+ZGV2KTsNCj4gKwkvKiByb3VuZCBkb3duIHRvIHRoZSBsb3dlc3Qgc3RhbmRhcmQgc3Bl ZWQgKi8NCj4gKwlmb3IgKGkgPSAxOyBpIDwgQVJSQVlfU0laRShzdXBwb3J0ZWRfc3BlZWRzKTsg aSsrKSB7DQo+ICsJCWlmIChhY3BpX3NwZWVkIDwgc3VwcG9ydGVkX3NwZWVkc1tpXSkNCj4gKwkJ CWJyZWFrOw0KPiArCX0NCj4gKwlhY3BpX3NwZWVkID0gc3VwcG9ydGVkX3NwZWVkc1tpIC0gMV07 DQo+ICsNCj4gKwlzd2l0Y2ggKGFjcGlfc3BlZWQpIHsNCj4gKwljYXNlIDEwMDAwMDoNCj4gKwkJ cmV0dXJuIHNwZWVkMTAwazsNCj4gKwljYXNlIDQwMDAwMDoNCj4gKwkJcmV0dXJuIHNwZWVkNDAw azsNCj4gKwljYXNlIDEwMDAwMDA6DQo+ICsJCXJldHVybiBzcGVlZDEwMDBrOw0KPiArCWNhc2Ug MTQwMDAwMDoNCj4gKwkJcmV0dXJuIHNwZWVkMTQwMGs7DQo+ICsJY2FzZSAzNDAwMDAwOg0KPiAr CQlyZXR1cm4gc3BlZWQzNDAwazsNCj4gKwlkZWZhdWx0Og0KPiArCQlyZXR1cm4gc3BlZWQ0MDBr Ow0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWRhcHRlcl9x dWlya3MgYW1kX2kyY19kZXZfcXVpcmtzID0gew0KPiArCS5tYXhfcmVhZF9sZW4gPSBBTURfTVAy X0kyQ19NQVhfUldfTEVOR1RILA0KPiArCS5tYXhfd3JpdGVfbGVuID0gQU1EX01QMl9JMkNfTUFY X1JXX0xFTkdUSCwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBpbnQgaTJjX2FtZF9wcm9iZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiArew0KPiArCWludCByZXQ7DQo+ICsJc3RydWN0 IGFtZF9pMmNfZGV2ICppMmNfZGV2Ow0KPiArCWFjcGlfaGFuZGxlIGhhbmRsZSA9IEFDUElfSEFO RExFKCZwZGV2LT5kZXYpOw0KPiArCXN0cnVjdCBhY3BpX2RldmljZSAqYWRldjsNCj4gKwlzdHJ1 Y3QgYW1kX21wMl9kZXYgKm1wMl9kZXY7DQo+ICsJY29uc3QgY2hhciAqdWlkOw0KPiArDQo+ICsJ aWYgKGFjcGlfYnVzX2dldF9kZXZpY2UoaGFuZGxlLCAmYWRldikpDQo+ICsJCXJldHVybiAtRU5P REVWOw0KPiArDQo+ICsJLyogVGhlIEFDUEkgbmFtZXNwYWNlIGRvZXNuJ3QgY29udGFpbiBpbmZv cm1hdGlvbiBhYm91dCB3aGljaCBNUDIgUENJDQo+ICsJICogZGV2aWNlIGFuIEFNREkwMDExIEFD UEkgZGV2aWNlIGlzIHJlbGF0ZWQgdG8sIHNvIGFzc3VtZSB0aGF0IHRoZXJlJ3MNCj4gKwkgKiBv bmx5IG9uZSBNUDIgUENJIGRldmljZSBwZXIgc3lzdGVtLg0KPiArCSAqLw0KPiArCW1wMl9kZXYg PSBhbWRfbXAyX2ZpbmRfZGV2aWNlKCk7DQo+ICsJaWYgKCFtcDJfZGV2KQ0KPiArCQkvKiBUaGUg TVAyIFBDSSBkZXZpY2UgbWlnaHQgZ2V0IHByb2JlZCBsYXRlciAqLw0KPiArCQlyZXR1cm4gLUVQ Uk9CRV9ERUZFUjsNCj4gKw0KPiArCWkyY19kZXYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwg c2l6ZW9mKCppMmNfZGV2KSwgR0ZQX0tFUk5FTCk7DQo+ICsJaWYgKCFpMmNfZGV2KQ0KPiArCQly ZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArCWkyY19kZXYtPmNvbW1vbi5tcDJfZGV2ID0gbXAyX2Rl djsNCj4gKwlpMmNfZGV2LT5wZGV2ID0gcGRldjsNCj4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShw ZGV2LCBpMmNfZGV2KTsNCj4gKw0KPiArCWkyY19kZXYtPmNvbW1vbi5jbWRfY29tcGxldGlvbiA9 ICZpMmNfYW1kX2NtZF9jb21wbGV0aW9uOw0KPiArI2lmZGVmIENPTkZJR19QTQ0KPiArCWkyY19k ZXYtPmNvbW1vbi5zdXNwZW5kID0gJmkyY19hbWRfc3VzcGVuZDsNCj4gKwlpMmNfZGV2LT5jb21t b24ucmVzdW1lID0gJmkyY19hbWRfcmVzdW1lOw0KPiArI2VuZGlmDQo+ICsNCj4gKwl1aWQgPSBh ZGV2LT5wbnAudW5pcXVlX2lkOw0KPiArCWlmICghdWlkKSB7DQo+ICsJCWRldl9lcnIoJnBkZXYt PmRldiwgIm1pc3NpbmcgVUlEL2J1cyBpZCFcbiIpOw0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4g Kwl9IGVsc2UgaWYgKHN0cmNtcCh1aWQsICIwIikgPT0gMCkgew0KPiArCQlpMmNfZGV2LT5jb21t b24uYnVzX2lkID0gMDsNCj4gKwl9IGVsc2UgaWYgKHN0cmNtcCh1aWQsICIxIikgPT0gMCkgew0K PiArCQlpMmNfZGV2LT5jb21tb24uYnVzX2lkID0gMTsNCj4gKwl9IGVsc2Ugew0KPiArCQlkZXZf ZXJyKCZwZGV2LT5kZXYsICJpbmNvcnJlY3QgVUlEL2J1cyBpZCBcIiVzXCIhXG4iLCB1aWQpOw0K PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsJZGV2X2RiZygmcGRldi0+ZGV2LCAiYnVz IGlkIGlzICV1XG4iLCBpMmNfZGV2LT5jb21tb24uYnVzX2lkKTsNCj4gKw0KPiArCS8qIFJlZ2lz dGVyIHRoZSBhZGFwdGVyICovDQo+ICsJYW1kX21wMl9wbV9ydW50aW1lX2dldChtcDJfZGV2KTsN Cj4gKw0KPiArCWkyY19kZXYtPmNvbW1vbi5yZXFjbWQgPSBpMmNfbm9uZTsNCj4gKwlpZiAoYW1k X21wMl9yZWdpc3Rlcl9jYigmaTJjX2Rldi0+Y29tbW9uKSkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7 DQo+ICsJZGV2aWNlX2xpbmtfYWRkKCZpMmNfZGV2LT5wZGV2LT5kZXYsICZtcDJfZGV2LT5wY2lf ZGV2LT5kZXYsDQo+ICsJCQlETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpOw0KPiArDQo+ICsJ aTJjX2Rldi0+Y29tbW9uLmkyY19zcGVlZCA9IGkyY19hbWRfZ2V0X2J1c19zcGVlZChwZGV2KTsN Cj4gKw0KPiArCS8qIFNldHVwIGkyYyBhZGFwdGVyIGRlc2NyaXB0aW9uICovDQo+ICsJaTJjX2Rl di0+YWRhcC5vd25lciA9IFRISVNfTU9EVUxFOw0KPiArCWkyY19kZXYtPmFkYXAuYWxnbyA9ICZp MmNfYW1kX2FsZ29yaXRobTsNCj4gKwlpMmNfZGV2LT5hZGFwLnF1aXJrcyA9ICZhbWRfaTJjX2Rl dl9xdWlya3M7DQo+ICsJaTJjX2Rldi0+YWRhcC5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsNCj4g KwlpMmNfZGV2LT5hZGFwLmFsZ29fZGF0YSA9IGkyY19kZXY7DQo+ICsJaTJjX2Rldi0+YWRhcC5u ciA9IHBkZXYtPmlkOw0KPiArCWkyY19kZXYtPmFkYXAudGltZW91dCA9IEFNRF9JMkNfVElNRU9V VDsNCj4gKwlBQ1BJX0NPTVBBTklPTl9TRVQoJmkyY19kZXYtPmFkYXAuZGV2LCBBQ1BJX0NPTVBB TklPTigmcGRldi0+ZGV2KSk7DQo+ICsJaTJjX2Rldi0+YWRhcC5kZXYub2Zfbm9kZSA9IHBkZXYt PmRldi5vZl9ub2RlOw0KPiArCXNucHJpbnRmKGkyY19kZXYtPmFkYXAubmFtZSwgc2l6ZW9mKGky Y19kZXYtPmFkYXAubmFtZSksDQo+ICsJCSAiQU1EIE1QMiBpMmMgYnVzICV1IiwgaTJjX2Rldi0+ Y29tbW9uLmJ1c19pZCk7DQo+ICsJaTJjX3NldF9hZGFwZGF0YSgmaTJjX2Rldi0+YWRhcCwgaTJj X2Rldik7DQo+ICsNCj4gKwlpbml0X2NvbXBsZXRpb24oJmkyY19kZXYtPmNtZF9jb21wbGV0ZSk7 DQo+ICsNCj4gKwkvKiBFbmFibGUgdGhlIGJ1cyAqLw0KPiArCWlmIChpMmNfYW1kX2VuYWJsZV9z ZXQoaTJjX2RldiwgdHJ1ZSkpDQo+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgImluaXRpYWwgYnVz IGVuYWJsZSBmYWlsZWRcbiIpOw0KPiArDQo+ICsJLyogQXR0YWNoIHRvIHRoZSBpMmMgbGF5ZXIg Ki8NCj4gKwlyZXQgPSBpMmNfYWRkX251bWJlcmVkX2FkYXB0ZXIoJmkyY19kZXYtPmFkYXApOw0K PiArDQo+ICsJYW1kX21wMl9wbV9ydW50aW1lX3B1dChtcDJfZGV2KTsNCj4gKw0KPiArCWlmIChy ZXQgPCAwKQ0KPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpMmMgYWRkIGFkYXB0ZXIgZmFpbGVk ID0gJWRcbiIsIHJldCk7DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgaW50IGkyY19hbWRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ICt7 DQo+ICsJc3RydWN0IGFtZF9pMmNfZGV2ICppMmNfZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEo cGRldik7DQo+ICsJc3RydWN0IGFtZF9pMmNfY29tbW9uICppMmNfY29tbW9uID0gJmkyY19kZXYt PmNvbW1vbjsNCj4gKw0KPiArCWkyY19sb2NrX2J1cygmaTJjX2Rldi0+YWRhcCwgSTJDX0xPQ0tf Uk9PVF9BREFQVEVSKTsNCj4gKw0KPiArCWkyY19hbWRfZW5hYmxlX3NldChpMmNfZGV2LCBmYWxz ZSk7DQo+ICsJYW1kX21wMl91bnJlZ2lzdGVyX2NiKGkyY19jb21tb24pOw0KPiArCWkyY19jb21t b24tPm1wMl9kZXYgPSBOVUxMOw0KPiArDQo+ICsJaTJjX3VubG9ja19idXMoJmkyY19kZXYtPmFk YXAsIEkyQ19MT0NLX1JPT1RfQURBUFRFUik7DQo+ICsNCj4gKwlpMmNfZGVsX2FkYXB0ZXIoJmky Y19kZXYtPmFkYXApOw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IGFjcGlfZGV2aWNlX2lkIGkyY19hbWRfYWNwaV9tYXRjaFtdID0gew0KPiArCXsgIkFN REkwMDExIiB9LA0KPiArCXsgfSwNCj4gK307DQo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGks IGkyY19hbWRfYWNwaV9tYXRjaCk7DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJp dmVyIGkyY19hbWRfcGxhdF9kcml2ZXIgPSB7DQo+ICsJLnByb2JlID0gaTJjX2FtZF9wcm9iZSwN Cj4gKwkucmVtb3ZlID0gaTJjX2FtZF9yZW1vdmUsDQo+ICsJLmRyaXZlciA9IHsNCj4gKwkJLm5h bWUgPSAiaTJjX2FtZF9tcDIiLA0KPiArCQkuYWNwaV9tYXRjaF90YWJsZSA9IEFDUElfUFRSKGky Y19hbWRfYWNwaV9tYXRjaCksDQo+ICsJfSwNCj4gK307DQo+ICttb2R1bGVfcGxhdGZvcm1fZHJp dmVyKGkyY19hbWRfcGxhdF9kcml2ZXIpOw0KPiArDQo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkFN RChSKSBNUDIgSTJDIFBsYXRmb3JtIERyaXZlciIpOw0KPiArTU9EVUxFX1ZFUlNJT04oIjEuMCIp Ow0KPiArTU9EVUxFX0FVVEhPUigiTmVoYWwgU2hhaCA8bmVoYWwtYmFrdWxjaGFuZHJhLnNoYWhA YW1kLmNvbT4iKTsNCj4gK01PRFVMRV9BVVRIT1IoIkVsaWUgTW9yaXNzZSA8c3luaXVyZ2VAZ21h aWwuY29tPiIpOw0KPiArTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOw0KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQtbXAyLmggYi9kcml2ZXJzL2kyYy9idXNz ZXMvaTJjLWFtZC1tcDIuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAw MDAwMDAuLmFmZjlhNGU0MzY5ZQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvaTJj L2J1c3Nlcy9pMmMtYW1kLW1wMi5oDQo+IEBAIC0wLDAgKzEsMjIzIEBADQo+ICsvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2UgKi8NCj4gKy8qDQo+ICsg KiBBTUQgTVAyIEkyQyBhZGFwdGVyIGRyaXZlcg0KPiArICoNCj4gKyAqIEF1dGhvcnM6IFNoeWFt IFN1bmRhciBTIEsgPFNoeWFtLXN1bmRhci5TLWtAYW1kLmNvbT4NCj4gKyAqICAgICAgICAgIEVs aWUgTW9yaXNzZSA8c3luaXVyZ2VAZ21haWwuY29tPg0KPiArICovDQo+ICsNCj4gKyNpZm5kZWYg STJDX0FNRF9QQ0lfTVAyX0gNCj4gKyNkZWZpbmUgSTJDX0FNRF9QQ0lfTVAyX0gNCj4gKw0KPiAr I2luY2x1ZGUgPGxpbnV4L2kyYy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3BjaS5oPg0KPiArI2lu Y2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4NCj4gKw0KPiArI2RlZmluZSBQQ0lfREVWSUNFX0lE X0FNRF9NUDIJMHgxNUU2DQo+ICsNCj4gK3N0cnVjdCBhbWRfaTJjX2NvbW1vbjsNCj4gK3N0cnVj dCBhbWRfbXAyX2RldjsNCj4gKw0KPiArZW51bSB7DQo+ICsJLyogTVAyIEMyUCBNZXNzYWdlIFJl Z2lzdGVycyAqLw0KPiArCUFNRF9DMlBfTVNHMCA9IDB4MTA1MDAsCQkJLyogTVAyIE1lc3NhZ2Ug Zm9yIEkyQzAgKi8NCj4gKwlBTURfQzJQX01TRzEgPSAweDEwNTA0LAkJCS8qIE1QMiBNZXNzYWdl IGZvciBJMkMxICovDQo+ICsJQU1EX0MyUF9NU0cyID0gMHgxMDUwOCwJCQkvKiBEUkFNIEFkZHJl c3MgTG8gLyBEYXRhIDAgKi8NCj4gKwlBTURfQzJQX01TRzMgPSAweDEwNTBjLAkJCS8qIERSQU0g QWRkcmVzcyBISSAvIERhdGEgMSAqLw0KPiArCUFNRF9DMlBfTVNHNCA9IDB4MTA1MTAsCQkJLyog RGF0YSAyICovDQo+ICsJQU1EX0MyUF9NU0c1ID0gMHgxMDUxNCwJCQkvKiBEYXRhIDMgKi8NCj4g KwlBTURfQzJQX01TRzYgPSAweDEwNTE4LAkJCS8qIERhdGEgNCAqLw0KPiArCUFNRF9DMlBfTVNH NyA9IDB4MTA1MWMsCQkJLyogRGF0YSA1ICovDQo+ICsJQU1EX0MyUF9NU0c4ID0gMHgxMDUyMCwJ CQkvKiBEYXRhIDYgKi8NCj4gKwlBTURfQzJQX01TRzkgPSAweDEwNTI0LAkJCS8qIERhdGEgNyAq Lw0KPiArDQo+ICsJLyogTVAyIFAyQyBNZXNzYWdlIFJlZ2lzdGVycyAqLw0KPiArCUFNRF9QMkNf TVNHMCA9IDB4MTA2ODAsCQkJLyogRG8gbm90IHVzZSAqLw0KPiArCUFNRF9QMkNfTVNHMSA9IDB4 MTA2ODQsCQkJLyogSTJDMCBpbnRlcnJ1cHQgcmVnaXN0ZXIgKi8NCj4gKwlBTURfUDJDX01TRzIg PSAweDEwNjg4LAkJCS8qIEkyQzEgaW50ZXJydXB0IHJlZ2lzdGVyICovDQo+ICsJQU1EX1AyQ19N U0czID0gMHgxMDY4QywJCQkvKiBNUDIgZGVidWcgaW5mbyAqLw0KPiArCUFNRF9QMkNfTVNHX0lO VEVOID0gMHgxMDY5MCwJCS8qIE1QMiBpbnRlcnJ1cHQgZ2VuIHJlZ2lzdGVyICovDQo+ICsJQU1E X1AyQ19NU0dfSU5UU1RTID0gMHgxMDY5NCwJCS8qIEludGVycnVwdCBzdGF0dXMgKi8NCj4gK307 DQo+ICsNCj4gKy8qIENvbW1hbmQgcmVnaXN0ZXIgZGF0YSBzdHJ1Y3R1cmVzICovDQo+ICsNCj4g KyNkZWZpbmUgaTJjX25vbmUgKC0xKQ0KPiArZW51bSBpMmNfY21kIHsNCj4gKwlpMmNfcmVhZCA9 IDAsDQo+ICsJaTJjX3dyaXRlLA0KPiArCWkyY19lbmFibGUsDQo+ICsJaTJjX2Rpc2FibGUsDQo+ ICsJbnVtYmVyX29mX3NlbnNvcl9kaXNjb3ZlcmVkLA0KPiArCWlzX21wMl9hY3RpdmUsDQo+ICsJ aW52YWxpZF9jbWQgPSAweEYsDQo+ICt9Ow0KPiArDQo+ICtlbnVtIHNwZWVkX2VudW0gew0KPiAr CXNwZWVkMTAwayA9IDAsDQo+ICsJc3BlZWQ0MDBrID0gMSwNCj4gKwlzcGVlZDEwMDBrID0gMiwN Cj4gKwlzcGVlZDE0MDBrID0gMywNCj4gKwlzcGVlZDM0MDBrID0gNA0KPiArfTsNCj4gKw0KPiAr ZW51bSBtZW1fdHlwZSB7DQo+ICsJdXNlX2RyYW0gPSAwLA0KPiArCXVzZV9jMnBtc2cgPSAxLA0K PiArfTsNCj4gKw0KPiArLyoqDQo+ICsgKiB1bmlvbiBpMmNfY21kX2Jhc2UgOiBiaXQgYWNjZXNz IG9mIEMyUCBjb21tYW5kcw0KPiArICogQGkyY19jbWQ6IGJpdCAwLi4zIGkyYyBSL1cgY29tbWFu ZA0KPiArICogQGJ1c19pZDogYml0IDQuLjcgaTJjIGJ1cyBpbmRleA0KPiArICogQHNsYXZlX2Fk ZHI6IGJpdCA4Li4xNSBzbGF2ZSBhZGRyZXNzDQo+ICsgKiBAbGVuZ3RoOiBiaXQgMTYuLjI3IHJl YWQvd3JpdGUgbGVuZ3RoDQo+ICsgKiBAaTJjX3NwZWVkOiBiaXQgMjguLjMwIGJ1cyBzcGVlZA0K PiArICogQG1lbV90eXBlOiBiaXQgMzEgMC1EUkFNOyAxLUMyUCBtc2cgby9wDQo+ICsgKi8NCj4g K3VuaW9uIGkyY19jbWRfYmFzZSB7DQo+ICsJdTMyIHVsOw0KPiArCXN0cnVjdCB7DQo+ICsJCWVu dW0gaTJjX2NtZCBpMmNfY21kIDogNDsNCj4gKwkJdTggYnVzX2lkIDogNDsNCj4gKwkJdTMyIHNs YXZlX2FkZHIgOiA4Ow0KPiArCQl1MzIgbGVuZ3RoIDogMTI7DQo+ICsJCWVudW0gc3BlZWRfZW51 bSBpMmNfc3BlZWQgOiAzOw0KPiArCQllbnVtIG1lbV90eXBlIG1lbV90eXBlIDogMTsNCj4gKwl9 IHM7DQo+ICt9Ow0KPiArDQo+ICtlbnVtIHJlc3BvbnNlX3R5cGUgew0KPiArCWludmFsaWRfcmVz cG9uc2UgPSAwLA0KPiArCWNvbW1hbmRfc3VjY2VzcyA9IDEsDQo+ICsJY29tbWFuZF9mYWlsZWQg PSAyLA0KPiArfTsNCj4gKw0KPiArZW51bSBzdGF0dXNfdHlwZSB7DQo+ICsJaTJjX3JlYWRjb21w bGV0ZV9ldmVudCA9IDAsDQo+ICsJaTJjX3JlYWRmYWlsX2V2ZW50ID0gMSwNCj4gKwlpMmNfd3Jp dGVjb21wbGV0ZV9ldmVudCA9IDIsDQo+ICsJaTJjX3dyaXRlZmFpbF9ldmVudCA9IDMsDQo+ICsJ aTJjX2J1c2VuYWJsZV9jb21wbGV0ZSA9IDQsDQo+ICsJaTJjX2J1c2VuYWJsZV9mYWlsZWQgPSA1 LA0KPiArCWkyY19idXNkaXNhYmxlX2NvbXBsZXRlID0gNiwNCj4gKwlpMmNfYnVzZGlzYWJsZV9m YWlsZWQgPSA3LA0KPiArCWludmFsaWRfZGF0YV9sZW5ndGggPSA4LA0KPiArCWludmFsaWRfc2xh dmVfYWRkcmVzcyA9IDksDQo+ICsJaW52YWxpZF9pMmNidXNfaWQgPSAxMCwNCj4gKwlpbnZhbGlk X2RyYW1fYWRkciA9IDExLA0KPiArCWludmFsaWRfY29tbWFuZCA9IDEyLA0KPiArCW1wMl9hY3Rp dmUgPSAxMywNCj4gKwludW1iZXJvZl9zZW5zb3JzX2Rpc2NvdmVyZWRfcmVzcCA9IDE0LA0KPiAr CWkyY19idXNfbm90aW5pdGlhbGl6ZWQNCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICogdW5pb24g aTJjX2V2ZW50IDogYml0IGFjY2VzcyBvZiBQMkMgZXZlbnRzDQo+ICsgKiBAcmVzcG9uc2U6IGJp dCAwLi4xIGkyYyByZXNwb25zZSB0eXBlDQo+ICsgKiBAc3RhdHVzOiBiaXQgMi4uNiBzdGF0dXNf dHlwZQ0KPiArICogQG1lbV90eXBlOiBiaXQgNyAwLURSQU07IDEtQzJQIG1zZyBvL3ANCj4gKyAq IEBidXNfaWQ6IGJpdCA4Li4xMSBpMmMgYnVzIGlkDQo+ICsgKiBAbGVuZ3RoOiBiaXQgMTIuLjIz IG1lc3NhZ2UgbGVuZ3RoDQo+ICsgKiBAc2xhdmVfYWRkcjogYml0IDI0LTMxIHNsYXZlIGFkZHJl c3MNCj4gKyAqLw0KPiArdW5pb24gaTJjX2V2ZW50IHsNCj4gKwl1MzIgdWw7DQo+ICsJc3RydWN0 IHsNCj4gKwkJZW51bSByZXNwb25zZV90eXBlIHJlc3BvbnNlIDogMjsNCj4gKwkJZW51bSBzdGF0 dXNfdHlwZSBzdGF0dXMgOiA1Ow0KPiArCQllbnVtIG1lbV90eXBlIG1lbV90eXBlIDogMTsNCj4g KwkJdTggYnVzX2lkIDogNDsNCj4gKwkJdTMyIGxlbmd0aCA6IDEyOw0KPiArCQl1MzIgc2xhdmVf YWRkciA6IDg7DQo+ICsJfSByOw0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsgKiBzdHJ1Y3QgYW1k X2kyY19jb21tb24gLSBwZXIgYnVzL2kyYyBhZGFwdGVyIGNvbnRleHQsIHNoYXJlZA0KPiArICoJ YmV0d2VlbiB0aGUgcGNpIGFuZCB0aGUgcGxhdGZvcm0gZHJpdmVyDQo+ICsgKiBAZXZlbnR2YWw6 IE1QMiBldmVudCB2YWx1ZSBzZXQgYnkgdGhlIElSUSBoYW5kbGVyDQo+ICsgKiBAbXAyX2Rldjog TVAyIHBjaSBkZXZpY2UgdGhpcyBhZGFwdGVyIGlzIHBhcnQgb2YNCj4gKyAqIEBtc2c6IGkyYyBt ZXNzYWdlDQo+ICsgKiBAY21kX2NvbXBsZXRpb246IGZ1bmN0aW9uIGNhbGxlZCBieSB0aGUgSVJR IGhhbmRsZXIgdG8gc2lnbmFsDQo+ICsgKgkJICAgIHRoZSBwbGF0Zm9ybSBkcml2ZXINCj4gKyAq IEByZXFjbWQ6IHJlcXVlc3RlZCBpMmMgY29tbWFuZCB0eXBlDQo+ICsgKiBAY21kX3N1Y2Nlc3M6 IHNldCB0byB0cnVlIGlmIHRoZSBNUDIgcmVzcG9uZGVkIHRvIGEgY29tbWFuZCB3aXRoDQo+ICsg KgkJIHRoZSBleHBlY3RlZCBzdGF0dXMgYW5kIHJlc3BvbnNlIHR5cGUNCj4gKyAqIEBidXNfaWQ6 IGJ1cyBpbmRleA0KPiArICogQGkyY19zcGVlZDogaTJjIGJ1cyBzcGVlZCBkZXRlcm1pbmVkIGJ5 IHRoZSBzbG93ZXN0IHNsYXZlDQo+ICsgKiBAZG1hX2J1ZjogaWYgbXNnIGxlbmd0aCA+IDMyLCBo b2xkcyB0aGUgRE1BIGJ1ZmZlciB2aXJ0dWFsIGFkZHJlc3MNCj4gKyAqIEBkbWFfYWRkcjogaWYg bXNnIGxlbmd0aCA+IDMyLCBob2xkcyB0aGUgRE1BIGJ1ZmZlciBhZGRyZXNzDQo+ICsgKi8NCj4g K3N0cnVjdCBhbWRfaTJjX2NvbW1vbiB7DQo+ICsJdW5pb24gaTJjX2V2ZW50IGV2ZW50dmFsOw0K PiArCXN0cnVjdCBhbWRfbXAyX2RldiAqbXAyX2RldjsNCj4gKwlzdHJ1Y3QgaTJjX21zZyAqbXNn Ow0KPiArCXZvaWQgKCpjbWRfY29tcGxldGlvbikoc3RydWN0IGFtZF9pMmNfY29tbW9uICppMmNf Y29tbW9uKTsNCj4gKwllbnVtIGkyY19jbWQgcmVxY21kOw0KPiArCXU4IGNtZF9zdWNjZXNzOw0K PiArCXU4IGJ1c19pZDsNCj4gKwllbnVtIHNwZWVkX2VudW0gaTJjX3NwZWVkOw0KPiArCXU4ICpk bWFfYnVmOw0KPiArCWRtYV9hZGRyX3QgZG1hX2FkZHI7DQo+ICsjaWZkZWYgQ09ORklHX1BNDQo+ ICsJaW50ICgqc3VzcGVuZCkoc3RydWN0IGFtZF9pMmNfY29tbW9uICppMmNfY29tbW9uKTsNCj4g KwlpbnQgKCpyZXN1bWUpKHN0cnVjdCBhbWRfaTJjX2NvbW1vbiAqaTJjX2NvbW1vbik7DQo+ICsj ZW5kaWYgLyogQ09ORklHX1BNICovDQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAqIHN0cnVjdCBh bWRfbXAyX2RldiAtIHBlciBQQ0kgZGV2aWNlIGNvbnRleHQNCj4gKyAqIEBwY2lfZGV2OiBQQ0kg ZHJpdmVyIG5vZGUNCj4gKyAqIEBidXNzZXM6IE1QMiBkZXZpY2VzIG1heSBoYXZlIHVwIHRvIHR3 byBidXNzZXMsDQo+ICsgKgkgICAgZWFjaCBidXMgY29ycmVzcG9uZGluZyB0byBhbiBpMmMgYWRh cHRlcg0KPiArICogQG1taW86IGlvbW1hcHBlZCByZWdpc3RlcnMNCj4gKyAqIEBjMnBfbG9jazog Y29udHJvbHMgYWNjZXNzIHRvIHRoZSBDMlAgbWFpbGJveCBzaGFyZWQgYmV0d2Vlbg0KPiArICoJ ICAgICAgdGhlIHR3byBhZGFwdGVycw0KPiArICogQGMycF9sb2NrX2J1c2lkOiBpZCBvZiB0aGUg YWRhcHRlciB3aGljaCBsb2NrZWQgYzJwX2xvY2sNCj4gKyAqLw0KPiArc3RydWN0IGFtZF9tcDJf ZGV2IHsNCj4gKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsNCj4gKwlzdHJ1Y3QgYW1kX2kyY19j b21tb24gKmJ1c3Nlc1syXTsNCj4gKwl2b2lkIF9faW9tZW0gKm1taW87DQo+ICsJc3RydWN0IG11 dGV4IGMycF9sb2NrOw0KPiArCXU4IGMycF9sb2NrX2J1c2lkOw0KPiArI2lmZGVmIENPTkZJR19E RUJVR19GUw0KPiArCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGlyOw0KPiArCXN0cnVjdCBkZW50 cnkgKmRlYnVnZnNfaW5mbzsNCj4gKyNlbmRpZiAvKiBDT05GSUdfREVCVUdfRlMgKi8NCj4gK307 DQo+ICsNCj4gKyNkZWZpbmUgbmRldl9wZGV2KG5kZXYpICgobmRldiktPnBjaV9kZXYpDQo+ICsj ZGVmaW5lIG5kZXZfbmFtZShuZGV2KSBwY2lfbmFtZShuZGV2X3BkZXYobmRldikpDQo+ICsjZGVm aW5lIG5kZXZfZGV2KG5kZXYpICgmbmRldl9wZGV2KG5kZXYpLT5kZXYpDQo+ICsjZGVmaW5lIHdv cmtfYW1kX2kyY19jb21tb24oX193b3JrKSBcDQo+ICsJY29udGFpbmVyX29mKF9fd29yaywgc3Ry dWN0IGFtZF9pMmNfY29tbW9uLCB3b3JrLndvcmspDQo+ICsNCj4gKy8qIFBDSWUgY29tbXVuaWNh dGlvbiBkcml2ZXIgKi8NCj4gKw0KPiAraW50IGFtZF9tcDJfcmVhZChzdHJ1Y3QgYW1kX2kyY19j b21tb24gKmkyY19jb21tb24pOw0KPiAraW50IGFtZF9tcDJfd3JpdGUoc3RydWN0IGFtZF9pMmNf Y29tbW9uICppMmNfY29tbW9uKTsNCj4gK2ludCBhbWRfbXAyX2J1c19lbmFibGVfc2V0KHN0cnVj dCBhbWRfaTJjX2NvbW1vbiAqaTJjX2NvbW1vbiwgYm9vbCBlbmFibGUpOw0KPiArDQo+ICt2b2lk IGFtZF9tcDJfcHJvY2Vzc19ldmVudChzdHJ1Y3QgYW1kX2kyY19jb21tb24gKmkyY19jb21tb24p Ow0KPiArDQo+ICt2b2lkIGFtZF9tcDJfcndfdGltZW91dChzdHJ1Y3QgYW1kX2kyY19jb21tb24g KmkyY19jb21tb24pOw0KPiArDQo+ICtpbnQgYW1kX21wMl9yZWdpc3Rlcl9jYihzdHJ1Y3QgYW1k X2kyY19jb21tb24gKmkyY19jb21tb24pOw0KPiAraW50IGFtZF9tcDJfdW5yZWdpc3Rlcl9jYihz dHJ1Y3QgYW1kX2kyY19jb21tb24gKmkyY19jb21tb24pOw0KPiArDQo+ICtzdHJ1Y3QgYW1kX21w Ml9kZXYgKmFtZF9tcDJfZmluZF9kZXZpY2Uodm9pZCk7DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUg dm9pZCBhbWRfbXAyX3BtX3J1bnRpbWVfZ2V0KHN0cnVjdCBhbWRfbXAyX2RldiAqbXAyX2RldikN Cj4gK3sNCj4gKwlwbV9ydW50aW1lX2dldF9zeW5jKCZtcDJfZGV2LT5wY2lfZGV2LT5kZXYpOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgYW1kX21wMl9wbV9ydW50aW1lX3B1dChz dHJ1Y3QgYW1kX21wMl9kZXYgKm1wMl9kZXYpDQo+ICt7DQo+ICsJcG1fcnVudGltZV9tYXJrX2xh c3RfYnVzeSgmbXAyX2Rldi0+cGNpX2Rldi0+ZGV2KTsNCj4gKwlwbV9ydW50aW1lX3B1dF9hdXRv c3VzcGVuZCgmbXAyX2Rldi0+cGNpX2Rldi0+ZGV2KTsNCj4gK30NCj4gKw0KPiArI2VuZGlmDQo+ IA0KDQpMb29rcyBvayBmb3IgbWUNCg0KVGhhbmtzDQpOZWhhbCBTaGFoDQo=