Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DB2AFC61D97 for ; Thu, 26 Jan 2023 01:31:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236166AbjAZBbm (ORCPT ); Wed, 25 Jan 2023 20:31:42 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44328 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236511AbjAZBbe (ORCPT ); Wed, 25 Jan 2023 20:31:34 -0500 Received: from mo-csw.securemx.jp (mo-csw1516.securemx.jp [210.130.202.155]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7E8AA4698; Wed, 25 Jan 2023 17:31:28 -0800 (PST) Received: by mo-csw.securemx.jp (mx-mo-csw1516) id 30Q1UrSK014605; Thu, 26 Jan 2023 10:30:53 +0900 X-Iguazu-Qid: 34tMQ0sdm9i4Rsancl X-Iguazu-QSIG: v=2; s=0; t=1674696652; q=34tMQ0sdm9i4Rsancl; m=r2ISNpNGWBi54HRy9oayo3Ohsr8RpI1GrnuH+J3Gi7A= Received: from imx2-a.toshiba.co.jp (imx2-a.toshiba.co.jp [106.186.93.35]) by relay.securemx.jp (mx-mr1511) id 30Q1UpoS006112 (version=TLSv1.2 cipher=AES128-GCM-SHA256 bits=128 verify=NOT); Thu, 26 Jan 2023 10:30:51 +0900 X-SA-MID: 53773113 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DVyEf31LZddozHbqIkn5DQZnms6JPz7r15RiJxXzXRo87+tmZH/qsr+GxKBoP7QioRRCvRxxZ7jsvfDtMX4z0rL1nt/Nj8YCDs81rd3PUuCyjqxXHe81lXR7hVr3IDCCtVxlgFFJ2BmyUTwdZfFJztEStphfxvsElPfnlDa3yxc1yWwm9RBEHVEYCdwUAPq9UtgkkWICDt2Jfo0dHUpe9B5m2oMnuKlrVYM92rSZBdVKzmzlrbDqiA+KbT9Td96WCKfZqV2QnJwKjZh7siZUvi7LPQAMCbkmlsB5+gN8mA11nYZd4RiAgnCyFWGqOlT1uBUkTqxvsRclocWm0BOcvQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=h4enBo7phs/KjK1CGPutYwhG7KcoX2GPEByzZMAxJ3g=; b=ZPTlT6v1zyGDHlYiVxP9QYmi7fevobH5fDo91nTLA65jgDEZPZ7f3vPqQZP59Qw6mxGdRek3fxrCnftTw09TZqRSAdwq/QVxZNdnc0St+TYhnSujEqI966UVLGxj2EAqi4zGTSVHKUlkus+K53BgSznfkkWdChoKt9yy6kyF0pk8GgVzLh6yE2v2o197k6xNwncybiYwPy99SHn0yRBhq8b/697iC1VRfrYMtAR5FDGan50/HJFqbKfirf6qBZffBiKnHadatCnSa2MJ0uAcnOW4GnupMIkadvrreLaM7stoxB0BrvFg73MCVN5iFHroB24EO2j2TeRvKEEsLD8HlQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=toshiba.co.jp; dmarc=pass action=none header.from=toshiba.co.jp; dkim=pass header.d=toshiba.co.jp; arc=none From: To: , , , , , , , CC: , , , Subject: RE: [PATCH v5 3/6] media: platform: visconti: Add Toshiba Visconti Video Input Interface driver user interace Thread-Topic: [PATCH v5 3/6] media: platform: visconti: Add Toshiba Visconti Video Input Interface driver user interace Thread-Index: AQHZJWPtmelSVsjZq0uVz/vT5NgNQq6iiBUAgA1vg/A= Date: Thu, 26 Jan 2023 01:25:38 +0000 X-TSB-HOP2: ON Message-ID: References: <20230111022433.25950-1-yuji2.ishikawa@toshiba.co.jp> <20230111022433.25950-4-yuji2.ishikawa@toshiba.co.jp> <2b412539-2236-b41f-c777-bc9e9cf99d66@xs4all.nl> In-Reply-To: <2b412539-2236-b41f-c777-bc9e9cf99d66@xs4all.nl> Accept-Language: ja-JP, en-US Content-Language: ja-JP X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=toshiba.co.jp; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: TYAPR01MB6201:EE_|TYAPR01MB5835:EE_ x-ms-office365-filtering-correlation-id: 9b145e8e-d81c-46ec-d8da-08daff3c3b49 x-ld-processed: f109924e-fb71-4ba0-b2cc-65dcdf6fbe4f,ExtAddr,ExtFwd x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: upzkl4QIZfrF+GBoZ9ziWbLTHoWvFk2ioac8SfxwbRWpWejJkMJqQF4v0SyxGyXSIq3Tf2vksz5aEMjd6v6c1d/dNDCmx1tp9wVLuxHDu+Wxs9IGyyinbL1nHkhr1Fo2RABYTBzEU2V60r0OQG4+kn1uSbsjeq94WIR2pSxdsug56anSQ++24GPTFYr0RcuMs2BoraYAdeUlZa2KQV2U+5Kyrg6bIdrpzctaKI99SbM+lYzUDP66wUpz40XgSnmxP5rCU0CjHaSxoAXRl+p1ECDBDfmQLpYN61zjvxkrWkci9NViMswCo17OHsL0QRCOrGAP5lIPQzjcV2Z6pgyCdB4Ur4O1nYmxlXX2nYdYeGdW8+BKd+HjO5TvRski+6TfMY/eY3nIhu2zXM7t7WPoA8zzxX7F2tqhYom8OtWJA2TVS/hqcf844r5sC43i+YS2xRGbFeRFYUjrNlFcgDmNNFvb3ZHDaYD6Fk0RqWFLxeXeLDzfINk+JprZR16YsNx1tOywhEx9fy+2B4/Hryp4zwYiYKS1epJK3U9Y8Ji5YJkEb+Tpa7FoClpoPN1zn+AKcGMfCBUveifJFQZ28GktYeRhi9+VNmRgSVQv34+ZeKdceVfx8eMG4J/8ZuO/nbWAWTAPfZ6D8vZUQeY1PtKePsk/HjVEEicAZYC9DqMBx2hzqBQTBK6MzpSXX++bMq+OwLRV+kzpVmvxxUNrN9W43dJQ14nr1Xls1/QqbLpnBHI= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYAPR01MB6201.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230025)(4636009)(39860400002)(346002)(376002)(396003)(136003)(366004)(451199018)(33656002)(52536014)(110136005)(7416002)(54906003)(86362001)(76116006)(66446008)(66476007)(66556008)(66946007)(4326008)(64756008)(83380400001)(8676002)(122000001)(2906002)(478600001)(71200400001)(7696005)(5660300002)(55016003)(316002)(38070700005)(8936002)(53546011)(30864003)(6506007)(26005)(41300700001)(9686003)(186003)(38100700002)(66899018)(461764006)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?UWJoN3FSOWE0d1NUbDlFZ2xER1F6QW1mVXJGQkgyUi9YUlRlNk5yVmxYYVY2?= =?utf-8?B?dEdGYXJ2SjVVbUlWUzI3Q09PZysrSHdybWZZSU5aZVIraHZzQVZXRVQ2cmRW?= =?utf-8?B?WVg1M1VHNXVDdVpLdzdRdmxkdk9xQXRGREVpb0doNlAyVWFjNkM0ZXhZZEk2?= =?utf-8?B?WHN0bStHMkZERml0cU9FcTRxZTFIbE85R2toWnN5czhHejBwVU9jb1JpZ0dU?= =?utf-8?B?TUhHVm5FY04wTnEzNzN4Z3B2eEZqbkxBMnJHWVZMYzJiTEloYWdzU0lkSElC?= =?utf-8?B?ajNRcDRNSjJEd25QalhuMit5L2xHQjltbVVtdVI2ekpYYWtCWFFGUmVweVFT?= =?utf-8?B?SmtTMGhPdzJNTEpRV1hEckFQT1hkSjY3Z0lJL2h1UEhlNjZvcXdTY1BacDM5?= =?utf-8?B?ZnRuUFBkY3VOQnRnN0p2M2FnZGY3d0RUelNpcjZ0YytONkVqRmdPaE1pV0I1?= =?utf-8?B?T0tnVjAvaWpadk4zd1N3V01EazNyNFhkcnE0YzB1M0kxZkJvKzFQSjNsMGhE?= =?utf-8?B?NE8vZE4yZnFBVFRuUGlnemRURkV6U2VVbERxdEJ1NGtiK0ZDUDh0UC9MZ3A2?= =?utf-8?B?RU9ueWxROGI5MHJwdEpSL0dZaWJQY2RuWVpJZ0t3dmhxZ1o0MXI2RUFsdHRH?= =?utf-8?B?NUpMaUJlYmpONzVkd1pMS2NIV1RkZGJ3cjZ0TU8yK3lQRmhCczZ4Wmdjek1F?= =?utf-8?B?ZnViTDA4eDBGU0VqQ21GSU9sbE9MdlpKQ3ZUYmJuTU5XNWxCZVJZaDBlYjIr?= =?utf-8?B?SGd1VjdRTTdNMGhyQkNQcnd2VWxaa25GdC9yZXppK3Rqdnk1QVVYeEMzaDE2?= =?utf-8?B?TUVwaUZRekJwazE3L0tIUUgxazJnRXVmSUNqem1hU0VscDZVaGlReVpyMXVa?= =?utf-8?B?Q3loUVBuVVhWTW8wakhtcm5FcVUvKzBkT2RrbFpCUWlSTUdLckl5QXIzbkZw?= =?utf-8?B?eDBZMi96dXJMZlNyRjRndHZQeVQ1UlE1ck8vVDdxTnp1Y1hUeElTU2YzR0dJ?= =?utf-8?B?dVdMZHlMQzhLdEc5djBvSElXbmhnWjhYbFVZVEk3aDNISEFYNVZKSjRDMllU?= =?utf-8?B?K2VOY3R6SHUxczUwUmpRUDVra0Z5T09YbTNSb2NySnJkMWh6UTdBeFpNNXhC?= =?utf-8?B?aE9CMjZHQmNocU1ZNWJveWNZSDFHL21acEkzbDZEZmZyU2VhSEFNVTlnb1px?= =?utf-8?B?WnBJOUlZZzBYU2JmWEd3TGhaa0RwRkFPbW1XTU5SbWg2Mmp6aXRQVS8wdnd5?= =?utf-8?B?QzEzMVpVTENITEdpbGErZFptOURuTDVrOXBLcWIyNS9pNElVcE1yZHFlOXZy?= =?utf-8?B?OWhDRjZPeldHUkJFNG5xYmdMRnl6UzdhL3B4NzFwR0MrdHNIL1JkZndlWjZh?= =?utf-8?B?YjBhNUZ0R0F1UVlPckw5eTZES2FUa09ZdlJUOHltcDFrMUhjbDI4eDVPRmJJ?= =?utf-8?B?eUsvSzhNaFgxN0FRWExUWlB3UXVmRFpMZDBBVWZUbG0yS0R2UVBnY0hMRnhX?= =?utf-8?B?dnhhZExMeStPLzE0ZjNwdlpueGJQV2hSQ1Z0RHBwc3B3KzcxQTQyR2ltelVq?= =?utf-8?B?OUF5TGFtTVk4L01nMm9kaUVLOU1aa2hITXBQUzloOEdSUjkvS003bC9teFAx?= =?utf-8?B?UUtzUFZ5cEtmMDdsRmdTcWJYKzBBN0N6cG9WUmFWNlVvMm5iUWc0KzFERzln?= =?utf-8?B?VitNTUF5Qm1TTDBaQnRURHE5VUFqTXRwbHdCSm9CL01BZ3JSSkxLVTQxWkw4?= =?utf-8?B?TmZCbFpKUDBzcVBuWmpjZzhEa0Q2Q0dFRmtLNWhyUm1qV0tXUnpXYjJZQnVl?= =?utf-8?B?dUR4WFZ4V04zd0MxNW9JdkVyOE5RSk1kbHdNQWVGVEZMV2dydlF5M2xCNUNx?= =?utf-8?B?Y3Zma0tqSnlFM0gya3AvNEprNE8rRTBlWTJLZzM4N3IwNllnWVNuT1JsZ0Rl?= =?utf-8?B?SlBzVEc0SnROV20xaTdzdFBXNXFIWi9XU1hOMnZaMm41Rkk4dnhOd08rNVhh?= =?utf-8?B?a3AvWFlpem1JT1NGZUxQNnRwY2tGTXZUZFExckM5OWJvdTl1N09UNFhjNCt4?= =?utf-8?B?NFdnL2tSNmZ6TnliRXlydXNuTFdNdlZaZVZnbyttSmpEa0ZWOGVjaUlMZG94?= =?utf-8?B?d1JQNjNHUmVqVjZHbDNReFFiUnBwdUNTb0tiaHNnVkUwdnE3K0dwL0pQVytX?= =?utf-8?B?MXc9PQ==?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYAPR01MB6201.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9b145e8e-d81c-46ec-d8da-08daff3c3b49 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Jan 2023 01:25:38.3850 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f109924e-fb71-4ba0-b2cc-65dcdf6fbe4f X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: yOgnweD8vgRimhsanGvxhdWBzaUcaEwwduPUH/P4yZ99ZMqedCrqBF76DRw7XHy6uz6Tz8svqOdNFhMNKR2UOADOz5kJlOkdj158pujI7Lw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYAPR01MB5835 X-OriginatorOrg: toshiba.co.jp MSSCP.TransferMailToMossAgent: 103 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGVsbG8gSGFucywNCg0KVGhhbmsgeW91IGZvciB5b3VyIGNvbW1lbnRzLg0KDQo+IC0tLS0tT3Jp Z2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxs Lm5sPg0KPiBTZW50OiBUdWVzZGF5LCBKYW51YXJ5IDE3LCAyMDIzIDg6NDcgUE0NCj4gVG86IGlz aGlrYXdhIHl1amko55+z5bedIOaCoOWPuCDil4vvvLLvvKTvvKPilqHvvKHvvKnvvLTvvKPil4vv vKXvvKHplospDQo+IDx5dWppMi5pc2hpa2F3YUB0b3NoaWJhLmNvLmpwPjsgTGF1cmVudCBQaW5j aGFydA0KPiA8bGF1cmVudC5waW5jaGFydEBpZGVhc29uYm9hcmQuY29tPjsgTWF1cm8gQ2FydmFs aG8gQ2hlaGFiDQo+IDxtY2hlaGFiQGtlcm5lbC5vcmc+OyBpd2FtYXRzdSBub2J1aGlybyjlsqnm nb4g5L+h5rSLIOKWoe+8s++8t++8o+KXr++8oe+8o++8tCkNCj4gPG5vYnVoaXJvMS5pd2FtYXRz dUB0b3NoaWJhLmNvLmpwPjsgUm9iIEhlcnJpbmcgPHJvYmgrZHRAa2VybmVsLm9yZz47DQo+IEty enlzenRvZiBLb3psb3dza2kgPGtyenlzenRvZi5rb3psb3dza2krZHRAbGluYXJvLm9yZz47IFJh ZmFlbCBKIC4gV3lzb2NraQ0KPiA8cmFmYWVsLmoud3lzb2NraUBpbnRlbC5jb20+OyBNYXJrIEJy b3duIDxicm9vbmllQGtlcm5lbC5vcmc+DQo+IENjOiBsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5v cmc7IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZzsNCj4gbGludXgta2VybmVs QHZnZXIua2VybmVsLm9yZzsgZGV2aWNldHJlZUB2Z2VyLmtlcm5lbC5vcmcNCj4gU3ViamVjdDog UmU6IFtQQVRDSCB2NSAzLzZdIG1lZGlhOiBwbGF0Zm9ybTogdmlzY29udGk6IEFkZCBUb3NoaWJh IFZpc2NvbnRpDQo+IFZpZGVvIElucHV0IEludGVyZmFjZSBkcml2ZXIgdXNlciBpbnRlcmFjZQ0K PiANCj4gTW9yZSBjb21tZW50cyBiZWxvdzoNCj4gDQo+IE9uIDExLzAxLzIwMjMgMDM6MjQsIFl1 amkgSXNoaWthd2Egd3JvdGU6DQo+ID4gQWRkIHN1cHBvcnQgdG8gVmlkZW8gSW5wdXQgSW50ZXJm YWNlIG9uIFRvc2hpYmEgVmlzY29udGkgQVJNIFNvQ3MuDQo+ID4gVGhlIGludGVyZmFjZSBkZXZp Y2UgaW5jbHVkZXMgQ1NJMiBSZWNlaXZlciwNCj4gPiBmcmFtZSBncmFiYmVyLCB2aWRlbyBETUFD IGFuZCBpbWFnZSBzaWduYWwgcHJvY2Vzc29yLg0KPiA+IFRoaXMgcGF0Y2ggcHJvdmlkZXMgdGhl IHVzZXIgaW50ZXJmYWNlIGxheWVyLg0KPiA+DQo+ID4gQSBkcml2ZXIgaW5zdGFuY2UgcHJvdmlk ZXMgdGhyZWUgL2Rldi92aWRlb1ggZGV2aWNlIGZpbGVzOw0KPiA+IG9uZSBmb3IgUkdCIGltYWdl IGNhcHR1cmUsIGFub3RoZXIgb25lIGZvciBvcHRpb25hbCBSR0IgY2FwdHVyZQ0KPiA+IHdpdGgg ZGlmZmVyZW50IHBhcmFtZXRlcnMgYW5kIHRoZSBsYXN0IG9uZSBmb3IgUkFXIGNhcHR1cmUuDQo+ ID4NCj4gPiBUaHJvdWdoIHRoZSBkZXZpY2UgZmlsZXMsIHRoZSBkcml2ZXIgcHJvdmlkZXMgc3Ry ZWFtaW5nIChETUEtQlVGKSBpbnRlcmZhY2UuDQo+ID4gQSB1c2VybGFuZCBhcHBsaWNhdGlvbiBz aG91bGQgZmVlZCBETUEtQlVGIGluc3RhbmNlcyBmb3IgY2FwdHVyZSBidWZmZXJzLg0KPiA+DQo+ ID4gVGhlIGRyaXZlciBpcyBiYXNlZCBvbiBtZWRpYSBjb250cm9sbGVyIGZyYW1ld29yay4NCj4g PiBJdHMgb3BlcmF0aW9ucyBhcmUgcm91Z2hseSBtYXBwZWQgdG8gdHdvIHN1YmRyaXZlcnM7DQo+ ID4gb25lIGZvciBJU1AgYW5kIENTSTIgcmVjZWl2ZXIgKHlpZWxkcyAxIGluc3RhbmNlKSwNCj4g PiB0aGUgb3RoZXIgZm9yIGNhcHR1cmUgKHlpZWxkcyAzIGluc3RhbmNlcyBmb3IgZWFjaCBjYXB0 dXJlIG1vZGUpLg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogWXVqaSBJc2hpa2F3YSA8eXVqaTIu aXNoaWthd2FAdG9zaGliYS5jby5qcD4NCj4gPiAtLS0NCj4gPiBDaGFuZ2Vsb2cgdjI6DQo+ID4g LSBSZXNlbmQgdjEgYmVjYXVzZSBhIHBhdGNoIGV4Y2VlZHMgc2l6ZSBsaW1pdC4NCj4gPg0KPiA+ IENoYW5nZWxvZyB2MzoNCj4gPiAtIEFkYXB0ZWQgdG8gbWVkaWEgY29udHJvbCBmcmFtZXdvcmsN Cj4gPiAtIEludHJvZHVjZWQgSVNQIHN1YmRldmljZSwgY2FwdHVyZSBkZXZpY2UNCj4gPiAtIFJl bW92ZSBwcml2YXRlIElPQ1RMcyBhbmQgYWRkIHZlbmRvciBzcGVjaWZpYyBWNEwyIGNvbnRyb2xz DQo+ID4gLSBDaGFuZ2UgZnVuY3Rpb24gbmFtZSBhdm9pZGluZyBjYW1lbGNhc2UgYW5kIHVwcGVy Y2FzZSBsZXR0ZXJzDQo+ID4NCj4gPiBDaGFuZ2Vsb2cgdjQ6DQo+ID4gLSBTcGxpdCBwYXRjaGVz IGJlY2F1c2UgdGhlIHYzIHBhdGNoIGV4Y2VlZHMgc2l6ZSBsaW1pdA0KPiA+IC0gU3RvcCB1c2lu ZyBJRCBudW1iZXIgdG8gaWRlbnRpZnkgZHJpdmVyIGluc3RhbmNlOg0KPiA+ICAgLSBVc2UgZHlu YW1pY2FsbHkgYWxsb2NhdGVkIHN0cnVjdHVyZSB0byBob2xkIEhXIHNwZWNpZmljIGNvbnRleHQs DQo+ID4gICAgIGluc3RlYWQgb2Ygc3RhdGljIG9uZS4NCj4gPiAgIC0gQ2FsbCBIVyBsYXllciBm dW5jdGlvbnMgd2l0aCB0aGUgY29udGV4dCBzdHJ1Y3R1cmUgaW5zdGVhZCBvZiBJRCBudW1iZXIN Cj4gPiAtIFVzZSBwbV9ydW50aW1lIHRvIHRyaWdnZXIgaW5pdGlhbGl6YXRpb24gb2YgSFcNCj4g PiAgIGFsb25nIHdpdGggb3Blbi9jbG9zZSBvZiBkZXZpY2UgZmlsZXMuDQo+ID4NCj4gPiBDaGFu Z2Vsb2cgdjU6DQo+ID4gLSBGaXggY29kaW5nIHN0eWxlIHByb2JsZW1zIGluIHZpaWYuYw0KPiA+ IC0tLQ0KPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Zpc2NvbnRpL01ha2VmaWxlICAgICAg fCAgICAxICsNCj4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92aXNjb250aS92aWlmLmMgICAg ICAgIHwgIDU0NSArKysrKysrKw0KPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Zpc2NvbnRp L3ZpaWYuaCAgICAgICAgfCAgMjAzICsrKw0KPiA+ICAuLi4vbWVkaWEvcGxhdGZvcm0vdmlzY29u dGkvdmlpZl9jYXB0dXJlLmMgICAgfCAxMjAxDQo+ICsrKysrKysrKysrKysrKysrDQo+ID4gIGRy aXZlcnMvbWVkaWEvcGxhdGZvcm0vdmlzY29udGkvdmlpZl9pc3AuYyAgICB8ICA4NDYgKysrKysr KysrKysrDQo+ID4gIDUgZmlsZXMgY2hhbmdlZCwgMjc5NiBpbnNlcnRpb25zKCspDQo+ID4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Zpc2NvbnRpL3ZpaWYuYw0K PiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92aXNjb250aS92 aWlmLmgNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdmlz Y29udGkvdmlpZl9jYXB0dXJlLmMNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVk aWEvcGxhdGZvcm0vdmlzY29udGkvdmlpZl9pc3AuYw0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0vdmlzY29udGkvTWFrZWZpbGUNCj4gYi9kcml2ZXJzL21lZGlh L3BsYXRmb3JtL3Zpc2NvbnRpL01ha2VmaWxlDQo+ID4gaW5kZXggZTE0YjkwNGRmNzUuLmQ3YTIz YzFmNGU4IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdmlzY29udGkv TWFrZWZpbGUNCj4gPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Zpc2NvbnRpL01ha2Vm aWxlDQo+ID4gQEAgLTMsNiArMyw3IEBADQo+ID4gICMgTWFrZWZpbGUgZm9yIHRoZSBWaXNjb250 aSB2aWRlbyBpbnB1dCBkZXZpY2UgZHJpdmVyDQo+ID4gICMNCj4gPg0KPiA+ICt2aXNjb250aS12 aWlmLW9ianMgPSB2aWlmLm8gdmlpZl9jYXB0dXJlLm8gdmlpZl9pc3Aubw0KPiA+ICB2aXNjb250 aS12aWlmLW9ianMgKz0gaHdkX3ZpaWZfY3NpMnJ4Lm8gaHdkX3ZpaWYubw0KPiA+DQo+ID4gIG9i ai0kKENPTkZJR19WSURFT19WSVNDT05USV9WSUlGKSArPSB2aXNjb250aS12aWlmLm8NCj4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92aXNjb250aS92aWlmLmMNCj4gYi9k cml2ZXJzL21lZGlhL3BsYXRmb3JtL3Zpc2NvbnRpL3ZpaWYuYw0KPiA+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAuLmUyOTQ4MGRiYjc2DQo+ID4gLS0tIC9kZXYv bnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdmlzY29udGkvdmlpZi5jDQo+ ID4gQEAgLTAsMCArMSw1NDUgQEANCj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAgT1IgQlNELTItQ2xhdXNlDQo+ID4gKy8qIFRvc2hpYmEgVmlzY29udGkgVmlkZW8gQ2Fw dHVyZSBTdXBwb3J0DQo+ID4gKyAqDQo+ID4gKyAqIChDKSBDb3B5cmlnaHQgMjAyMiBUT1NISUJB IENPUlBPUkFUSU9ODQo+ID4gKyAqIChDKSBDb3B5cmlnaHQgMjAyMiBUb3NoaWJhIEVsZWN0cm9u aWMgRGV2aWNlcyAmIFN0b3JhZ2UgQ29ycG9yYXRpb24NCj4gPiArICovDQo+ID4gKw0KPiA+ICsj aW5jbHVkZSA8bGludXgvZGVsYXkuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0K PiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZi5o Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51 eC9vZl9ncmFwaC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+DQo+ID4gKyNpbmNsdWRlIDxtZWRpYS92 NGwyLWZ3bm9kZS5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgInZpaWYuaCINCj4gPiArDQo+ID4g K3N0YXRpYyBpbmxpbmUgc3RydWN0IHZpaWZfZGV2aWNlICp2NGwyX3RvX3ZpaWYoc3RydWN0IHY0 bDJfZGV2aWNlICp2NGwyX2RldikNCj4gPiArew0KPiA+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZih2 NGwyX2Rldiwgc3RydWN0IHZpaWZfZGV2aWNlLCB2NGwyX2Rldik7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyBzdHJ1Y3QgdmlpZl9zdWJkZXYgKnRvX3ZpaWZfc3ViZGV2KHN0cnVjdCB2NGwy X2FzeW5jX3N1YmRldiAqYXNkKQ0KPiA+ICt7DQo+ID4gKwlyZXR1cm4gY29udGFpbmVyX29mKGFz ZCwgc3RydWN0IHZpaWZfc3ViZGV2LCBhc2QpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBWU1lO QyBtYXNrIHNldHRpbmcgb2YgTUFJTiB1bml0ICovDQo+ID4gKyNkZWZpbmUgSU5UX01fU1lOQ19N QVNLX1ZTWU5DX0lOVAkgQklUKDApDQo+ID4gKyNkZWZpbmUgSU5UX01fU1lOQ19NQVNLX0xJTkVT X0RFTEFZX0lOVDEgQklUKDEpDQo+ID4gKyNkZWZpbmUgSU5UX01fU1lOQ19NQVNLX0xJTkVTX0RF TEFZX0lOVDIgQklUKDIpDQo+ID4gKyNkZWZpbmUgSU5UX01fU1lOQ19NQVNLX1NXX0RFTEFZX0lO VDAJIEJJVCgxNikNCj4gPiArI2RlZmluZSBJTlRfTV9TWU5DX01BU0tfU1dfREVMQVlfSU5UMQkg QklUKDE3KQ0KPiA+ICsjZGVmaW5lIElOVF9NX1NZTkNfTUFTS19TV19ERUxBWV9JTlQyCSBCSVQo MTgpDQo+ID4gKw0KPiA+ICsvKiBTVEFUVVMgZXJyb3IgbWFzayBzZXR0aW5nIG9mIE1BSU4gdW5p dCAqLw0KPiA+ICsjZGVmaW5lIElOVF9NX01BU0tfTDJJU1BfU0laRV9FUlJPUgkgICAgIEJJVCgw KQ0KPiA+ICsjZGVmaW5lIElOVF9NX01BU0tfQ1JHQkZfSU5UQ1JHRVJSX1dSU1RBUlQgICBCSVQo MSkNCj4gPiArI2RlZmluZSBJTlRfTV9NQVNLX0NSR0JGX0lOVENSR0VSUl9SRFNUQVJUICAgQklU KDIpDQo+ID4gKyNkZWZpbmUgSU5UX01fTUFTS19FTUJFRF9FUlJPUgkJICAgICBCSVQoMykNCj4g PiArI2RlZmluZSBJTlRfTV9NQVNLX1VTRVJEQVRBX0VSUk9SCSAgICAgQklUKDQpDQo+ID4gKyNk ZWZpbmUgSU5UX01fTUFTS19MMklTUF9QT1NUMF9UQUJMRV9USU1FT1VUIEJJVCg4KQ0KPiA+ICsj ZGVmaW5lIElOVF9NX01BU0tfTDJJU1BfUE9TVDFfVEFCTEVfVElNRU9VVCBCSVQoOSkNCj4gPiAr I2RlZmluZSBJTlRfTV9NQVNLX0wySVNQX0dSSURfVEFCTEVfVElNRU9VVCAgQklUKDExKQ0KPiA+ ICsjZGVmaW5lIElOVF9NX01BU0tfTDFJU1BfU0laRV9FUlJPUjAJICAgICBCSVQoMTYpDQo+ID4g KyNkZWZpbmUgSU5UX01fTUFTS19MMUlTUF9TSVpFX0VSUk9SMQkgICAgIEJJVCgxNykNCj4gPiAr I2RlZmluZSBJTlRfTV9NQVNLX0wxSVNQX1NJWkVfRVJST1IyCSAgICAgQklUKDE4KQ0KPiA+ICsj ZGVmaW5lIElOVF9NX01BU0tfTDFJU1BfU0laRV9FUlJPUjMJICAgICBCSVQoMTkpDQo+ID4gKyNk ZWZpbmUgSU5UX01fTUFTS19MMUlTUF9TSVpFX0VSUk9SNAkgICAgIEJJVCgyMCkNCj4gPiArI2Rl ZmluZSBJTlRfTV9NQVNLX0wxSVNQX0lOVF9FUlJfQ1JHV1JTVEFSVCAgQklUKDIxKQ0KPiA+ICsj ZGVmaW5lIElOVF9NX01BU0tfTDFJU1BfSU5UX0VSUl9DUkdSRFNUQVJUICBCSVQoMjIpDQo+ID4g KyNkZWZpbmUgSU5UX01fTUFTS19ERUxBWV9JTlRfRVJST1IJICAgICBCSVQoMjQpDQo+ID4gKw0K PiA+ICsvKiBWU1lOQyBtYXNrIHNldHRpbmdzIG9mIFNVQiB1bml0ICovDQo+ID4gKyNkZWZpbmUg SU5UX1NfU1lOQ19NQVNLX1ZTWU5DX0lOVAkgQklUKDApDQo+ID4gKyNkZWZpbmUgSU5UX1NfU1lO Q19NQVNLX0xJTkVTX0RFTEFZX0lOVDEgQklUKDEpDQo+ID4gKyNkZWZpbmUgSU5UX1NfU1lOQ19N QVNLX1NXX0RFTEFZX0lOVDAJIEJJVCgxNikNCj4gPiArI2RlZmluZSBJTlRfU19TWU5DX01BU0tf U1dfREVMQVlfSU5UMQkgQklUKDE3KQ0KPiA+ICsNCj4gPiArLyogU1RBVFVTIGVycm9yIG1hc2sg c2V0dGluZyBvZiBTVUIgdW5pdCAqLw0KPiA+ICsjZGVmaW5lIElOVF9TX01BU0tfU0laRV9FUlJP UgkgICBCSVQoMCkNCj4gPiArI2RlZmluZSBJTlRfU19NQVNLX0VNQkVEX0VSUk9SCSAgIEJJVCgx KQ0KPiA+ICsjZGVmaW5lIElOVF9TX01BU0tfVVNFUkRBVEFfRVJST1IgIEJJVCgyKQ0KPiA+ICsj ZGVmaW5lIElOVF9TX01BU0tfREVMQVlfSU5UX0VSUk9SIEJJVCgyNCkNCj4gPiArI2RlZmluZSBJ TlRfU19NQVNLX1JFU0VSVkVEX1NFVAkgICAoQklUKDE2KSB8IEJJVCgyOCkpDQo+ID4gKw0KPiA+ ICtzdGF0aWMgdm9pZCB2aWlmX3ZzeW5jX2lycV9oYW5kbGVyX3dfaXNwKHN0cnVjdCB2aWlmX2Rl dmljZSAqdmlpZl9kZXYpDQo+ID4gK3sNCj4gPiArCXUzMiBldmVudF9tYWluLCBldmVudF9zdWIs IHN0YXR1c19lcnIsIGwyX3RyYW5zZmVyX3N0YXR1czsNCj4gPiArCXU2NCB0czsNCj4gPiArDQo+ ID4gKwl0cyA9IGt0aW1lX2dldF9ucygpOw0KPiA+ICsJaHdkX3ZpaWZfdnN5bmNfaXJxX2hhbmRs ZXIodmlpZl9kZXYtPmh3ZF9yZXMsICZldmVudF9tYWluLA0KPiAmZXZlbnRfc3ViKTsNCj4gPiAr DQo+ID4gKwkvKiBEZWxheWVkIFZzeW5jIG9mIE1BSU4gdW5pdCAqLw0KPiA+ICsJaWYgKGV2ZW50 X21haW4gJiBJTlRfTV9TWU5DX01BU0tfTElORVNfREVMQVlfSU5UMikgew0KPiA+ICsJCS8qIHVu bWFzayB0aW1lb3V0IGVycm9yIG9mIGdhbW1hIHRhYmxlICovDQo+ID4gKwkJaHdkX3ZpaWZfbWFp bl9zdGF0dXNfZXJyX3NldF9pcnFfbWFzayh2aWlmX2Rldi0+aHdkX3JlcywNCj4gPiArDQo+IElO VF9NX01BU0tfREVMQVlfSU5UX0VSUk9SKTsNCj4gPiArCQl2aWlmX2Rldi0+bWFza2VkX2dhbW1h X3BhdGggPSAwOw0KPiA+ICsNCj4gPiArCQkvKiBHZXQgYWJvcnQgc3RhdHVzIG9mIEwySVNQICov DQo+ID4gKwkJaHdkX3ZpaWZfaXNwX2d1YXJkX3N0YXJ0KHZpaWZfZGV2LT5od2RfcmVzKTsNCj4g PiArCQlod2RfdmlpZl9pc3BfZ2V0X2luZm8odmlpZl9kZXYtPmh3ZF9yZXMsIE5VTEwsDQo+ICZs Ml90cmFuc2Zlcl9zdGF0dXMpOw0KPiA+ICsJCWh3ZF92aWlmX2lzcF9ndWFyZF9lbmQodmlpZl9k ZXYtPmh3ZF9yZXMpOw0KPiA+ICsNCj4gPiArCQlzdGF0dXNfZXJyID0gdmlpZl9kZXYtPnN0YXR1 c19lcnI7DQo+ID4gKwkJdmlpZl9kZXYtPnN0YXR1c19lcnIgPSAwOw0KPiA+ICsNCj4gPiArCQl2 aXNjb250aV92aWlmX2NhcHR1cmVfc3dpdGNoX2J1ZmZlcigmdmlpZl9kZXYtPmNhcF9kZXYwLA0K PiBzdGF0dXNfZXJyLA0KPiA+ICsJCQkJCQkgICAgbDJfdHJhbnNmZXJfc3RhdHVzLCB0cyk7DQo+ ID4gKwkJdmlzY29udGlfdmlpZl9jYXB0dXJlX3N3aXRjaF9idWZmZXIoJnZpaWZfZGV2LT5jYXBf ZGV2MSwNCj4gc3RhdHVzX2VyciwNCj4gPiArCQkJCQkJICAgIGwyX3RyYW5zZmVyX3N0YXR1cywg dHMpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIERlbGF5ZWQgVnN5bmMgb2YgU1VCIHVuaXQg Ki8NCj4gPiArCWlmIChldmVudF9zdWIgJiBJTlRfU19TWU5DX01BU0tfTElORVNfREVMQVlfSU5U MSkNCj4gPiArCQl2aXNjb250aV92aWlmX2NhcHR1cmVfc3dpdGNoX2J1ZmZlcigmdmlpZl9kZXYt PmNhcF9kZXYyLCAwLCAwLA0KPiB0cyk7DQo+ID4gK30NCj4gPiArDQo+ID4gKyNkZWZpbmUgTUFT S19NX0dBTU1BVEJMX1RJTUVPVVQgMHgwNzAwVQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgdmlp Zl9zdGF0dXNfZXJyX2lycV9oYW5kbGVyKHN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYpDQo+ ID4gK3sNCj4gPiArCXUzMiBldmVudF9tYWluLCBldmVudF9zdWIsIHZhbCwgbWFzazsNCj4gPiAr DQo+ID4gKwlod2RfdmlpZl9zdGF0dXNfZXJyX2lycV9oYW5kbGVyKHZpaWZfZGV2LT5od2RfcmVz LCAmZXZlbnRfbWFpbiwNCj4gJmV2ZW50X3N1Yik7DQo+ID4gKw0KPiA+ICsJaWYgKGV2ZW50X21h aW4pIHsNCj4gPiArCQkvKiBtYXNrIGZvciBnYW1tYSB0YWJsZSB0aW1lIG91dCBlcnJvciB3aGlj aCB3aWxsIGJlDQo+IHVubWFza2VkIGluIHRoZSBuZXh0IFZzeW5jICovDQo+ID4gKwkJdmFsID0g RklFTERfR0VUKE1BU0tfTV9HQU1NQVRCTF9USU1FT1VULA0KPiBldmVudF9tYWluKTsNCj4gPiAr CQlpZiAodmFsKSB7DQo+ID4gKwkJCXZpaWZfZGV2LT5tYXNrZWRfZ2FtbWFfcGF0aCB8PSB2YWw7 DQo+ID4gKwkJCW1hc2sgPSBJTlRfTV9NQVNLX0RFTEFZX0lOVF9FUlJPUiB8DQo+ID4gKw0KPiBG SUVMRF9QUkVQKE1BU0tfTV9HQU1NQVRCTF9USU1FT1VULA0KPiB2aWlmX2Rldi0+bWFza2VkX2dh bW1hX3BhdGgpOw0KPiA+ICsNCj4gCWh3ZF92aWlmX21haW5fc3RhdHVzX2Vycl9zZXRfaXJxX21h c2sodmlpZl9kZXYtPmh3ZF9yZXMsIG1hc2spOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJdmlp Zl9kZXYtPnN0YXR1c19lcnIgPSBldmVudF9tYWluOw0KPiA+ICsJfQ0KPiA+ICsJdmlpZl9kZXYt PnJlcG9ydGVkX2Vycl9tYWluIHw9IGV2ZW50X21haW47DQo+ID4gKwl2aWlmX2Rldi0+cmVwb3J0 ZWRfZXJyX3N1YiB8PSBldmVudF9zdWI7DQo+ID4gKwlkZXZfZXJyKHZpaWZfZGV2LT5kZXYsICJN QUlOL1NVQiBlcnJvciAweCV4IDB4JXguXG4iLCBldmVudF9tYWluLA0KPiBldmVudF9zdWIpOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB2aWlmX2NzaTJyeF9lcnJfaXJxX2hhbmRs ZXIoc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldikNCj4gPiArew0KPiA+ICsJdTMyIGV2ZW50 Ow0KPiA+ICsNCj4gPiArCWV2ZW50ID0gaHdkX3ZpaWZfY3NpMnJ4X2Vycl9pcnFfaGFuZGxlcih2 aWlmX2Rldi0+aHdkX3Jlcyk7DQo+ID4gKwl2aWlmX2Rldi0+cmVwb3J0ZWRfZXJyX2NzaTJyeCB8 PSBldmVudDsNCj4gPiArCWRldl9lcnIodmlpZl9kZXYtPmRldiwgIkNTSTJSWCBlcnJvciAweCV4 LlxuIiwgZXZlbnQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaXJxcmV0dXJuX3Qgdmlz Y29udGlfdmlpZl9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1 Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2ID0gZGV2X2lkOw0KPiA+ICsJaW50IGlycV90eXBlID0g aXJxIC0gdmlpZl9kZXYtPmlycVswXTsNCj4gPiArDQo+ID4gKwlzcGluX2xvY2soJnZpaWZfZGV2 LT5sb2NrKTsNCj4gPiArDQo+ID4gKwlzd2l0Y2ggKGlycV90eXBlKSB7DQo+ID4gKwljYXNlIDA6 DQo+ID4gKwkJdmlpZl92c3luY19pcnFfaGFuZGxlcl93X2lzcCh2aWlmX2Rldik7DQo+ID4gKwkJ YnJlYWs7DQo+ID4gKwljYXNlIDE6DQo+ID4gKwkJdmlpZl9zdGF0dXNfZXJyX2lycV9oYW5kbGVy KHZpaWZfZGV2KTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgMjoNCj4gPiArCQl2aWlmX2Nz aTJyeF9lcnJfaXJxX2hhbmRsZXIodmlpZl9kZXYpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCXNwaW5fdW5sb2NrKCZ2aWlmX2Rldi0+bG9jayk7DQo+ID4gKw0KPiA+ICsJ cmV0dXJuIElSUV9IQU5ETEVEOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiAtLS0tLSBBc3luYyBO b3RpZmllciBPcGVyYXRpb25zLS0tLS0gKi8NCj4gPiArc3RhdGljIGludCB2aXNjb250aV92aWlm X25vdGlmeV9ib3VuZChzdHJ1Y3QgdjRsMl9hc3luY19ub3RpZmllciAqbm90aWZpZXIsDQo+ID4g KwkJCQkgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnY0bDJfc2QsIHN0cnVjdA0KPiB2NGwyX2Fz eW5jX3N1YmRldiAqYXNkKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJf ZGV2ID0gbm90aWZpZXItPnY0bDJfZGV2Ow0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNlICp2aWlm X2RldiA9IHY0bDJfdG9fdmlpZih2NGwyX2Rldik7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9zdWJkZXYg KnZpaWZfc2QgPSB0b192aWlmX3N1YmRldihhc2QpOw0KPiA+ICsNCj4gPiArCXZpaWZfc2QtPnY0 bDJfc2QgPSB2NGwyX3NkOw0KPiA+ICsJdmlpZl9kZXYtPm51bV9zZCsrOw0KPiA+ICsNCj4gPiAr CXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB2aXNjb250aV92aWlm X2NyZWF0ZV9saW5rcyhzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2KQ0KPiA+ICt7DQo+ID4g Kwl1bnNpZ25lZCBpbnQgc291cmNlX3BhZDsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJ LyogY2FtZXJhIHN1YmRldiBwYWQwIC0+IGlzcCBzdWRkZXYgcGFkMCAqLw0KPiA+ICsJcmV0ID0g bWVkaWFfZW50aXR5X2dldF9md25vZGVfcGFkKCZ2aWlmX2Rldi0+c2QtPnY0bDJfc2QtPmVudGl0 eSwNCj4gPiArCQkJCQkgIHZpaWZfZGV2LT5zZC0+djRsMl9zZC0+Zndub2RlLA0KPiBNRURJQV9Q QURfRkxfU09VUkNFKTsNCj4gPiArCWlmIChyZXQgPCAwKSB7DQo+ID4gKwkJZGV2X2Vycih2aWlm X2Rldi0+ZGV2LCAiZmFpbGVkIHRvIGZpbmQgc291cmNlIHBhZFxuIik7DQo+ID4gKwkJcmV0dXJu Ow0KPiA+ICsJfQ0KPiA+ICsJc291cmNlX3BhZCA9IHJldDsNCj4gPiArDQo+ID4gKwlyZXQgPSBt ZWRpYV9jcmVhdGVfcGFkX2xpbmsoJnZpaWZfZGV2LT5zZC0+djRsMl9zZC0+ZW50aXR5LA0KPiBz b3VyY2VfcGFkLA0KPiA+ICsJCQkJICAgICZ2aWlmX2Rldi0+aXNwX3N1YmRldi5zZC5lbnRpdHks DQo+IFZJSUZfSVNQX1BBRF9TSU5LLA0KPiA+ICsJCQkJICAgIE1FRElBX0xOS19GTF9FTkFCTEVE KTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJZGV2X2Vycih2aWlmX2Rldi0+ZGV2LCAiZmFpbGVk IGNyZWF0ZV9wYWRfbGluayAoY2FtZXJhOnNyYyAtPg0KPiBpc3A6c2luaylcbiIpOw0KPiA+ICsN Cj4gPiArCXJldCA9IG1lZGlhX2NyZWF0ZV9wYWRfbGluaygmdmlpZl9kZXYtPmlzcF9zdWJkZXYu c2QuZW50aXR5LA0KPiBWSUlGX0lTUF9QQURfU1JDX1BBVEgwLA0KPiA+ICsJCQkJICAgICZ2aWlm X2Rldi0+Y2FwX2RldjAudmRldi5lbnRpdHksDQo+IFZJSUZfQ0FQVFVSRV9QQURfU0lOSywNCj4g PiArCQkJCSAgICBNRURJQV9MTktfRkxfRU5BQkxFRCk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJ CWRldl9lcnIodmlpZl9kZXYtPmRldiwgImZhaWxlZCBjcmVhdGVfcGFkX2xpbmsgKGlzcDpzcmMg LT4NCj4gY2FwdHVyZTA6c2luaylcbiIpOw0KPiA+ICsNCj4gPiArCXJldCA9IG1lZGlhX2NyZWF0 ZV9wYWRfbGluaygmdmlpZl9kZXYtPmlzcF9zdWJkZXYuc2QuZW50aXR5LA0KPiBWSUlGX0lTUF9Q QURfU1JDX1BBVEgxLA0KPiA+ICsJCQkJICAgICZ2aWlmX2Rldi0+Y2FwX2RldjEudmRldi5lbnRp dHksDQo+IFZJSUZfQ0FQVFVSRV9QQURfU0lOSywNCj4gPiArCQkJCSAgICBNRURJQV9MTktfRkxf RU5BQkxFRCk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCWRldl9lcnIodmlpZl9kZXYtPmRldiwg ImZhaWxlZCBjcmVhdGVfcGFkX2xpbmsgKGlzcDpzcmMgLT4NCj4gY2FwdHVyZTE6c2luaylcbiIp Ow0KPiA+ICsNCj4gPiArCXJldCA9IG1lZGlhX2NyZWF0ZV9wYWRfbGluaygmdmlpZl9kZXYtPmlz cF9zdWJkZXYuc2QuZW50aXR5LA0KPiBWSUlGX0lTUF9QQURfU1JDX1BBVEgyLA0KPiA+ICsJCQkJ ICAgICZ2aWlmX2Rldi0+Y2FwX2RldjIudmRldi5lbnRpdHksDQo+IFZJSUZfQ0FQVFVSRV9QQURf U0lOSywNCj4gPiArCQkJCSAgICBNRURJQV9MTktfRkxfRU5BQkxFRCk7DQo+ID4gKwlpZiAocmV0 KQ0KPiA+ICsJCWRldl9lcnIodmlpZl9kZXYtPmRldiwgImZhaWxlZCBjcmVhdGVfcGFkX2xpbmsg KGlzcDpzcmMgLT4NCj4gY2FwdHVyZTI6c2luaylcbiIpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgdm9pZCB2aXNjb250aV92aWlmX25vdGlmeV91bmJpbmQoc3RydWN0IHY0bDJfYXN5bmNf bm90aWZpZXIgKm5vdGlmaWVyLA0KPiA+ICsJCQkJCXN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2 LCBzdHJ1Y3QNCj4gdjRsMl9hc3luY19zdWJkZXYgKmFzZCkNCj4gPiArew0KPiA+ICsJc3RydWN0 IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IG5vdGlmaWVyLT52NGwyX2RldjsNCj4gPiArCXN0cnVj dCB2aWlmX3N1YmRldiAqdmlpZl9zZCA9IHRvX3ZpaWZfc3ViZGV2KGFzZCk7DQo+ID4gKw0KPiA+ ICsJdjRsMl9kZXYtPmN0cmxfaGFuZGxlciA9IE5VTEw7DQo+ID4gKwl2aWlmX3NkLT52NGwyX3Nk ID0gTlVMTDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2aXNjb250aV92aWlmX25v dGlmeV9jb21wbGV0ZShzdHJ1Y3QgdjRsMl9hc3luY19ub3RpZmllciAqbm90aWZpZXIpDQo+ID4g K3sNCj4gPiArCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBub3RpZmllci0+djRsMl9k ZXY7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2ID0gdjRsMl90b192aWlmKHY0 bDJfZGV2KTsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0ID0gdjRsMl9kZXZpY2Vf cmVnaXN0ZXJfc3ViZGV2X25vZGVzKHY0bDJfZGV2KTsNCj4gPiArCWlmIChyZXQgPCAwKSB7DQo+ ID4gKwkJZGV2X2Vycih2NGwyX2Rldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHN1YmRldiBu b2Rlc1xuIik7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBN YWtlIHN1cmUgYXQgbGVhc3Qgb25lIHNlbnNvciBpcyBwcmltYXJ5IGFuZCB1c2UgaXQgdG8gaW5p dGlhbGl6ZSAqLw0KPiA+ICsJaWYgKCF2aWlmX2Rldi0+c2QpIHsNCj4gPiArCQl2aWlmX2Rldi0+ c2QgPSAmdmlpZl9kZXYtPnN1YmRldnNbMF07DQo+ID4gKwkJdmlpZl9kZXYtPnNkX2luZGV4ID0g MDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXQgPSB2aXNjb250aV92aWlmX2NhcHR1cmVfcmVn aXN0ZXJfY3RybF9oYW5kbGVycyh2aWlmX2Rldik7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJl dHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJdmlzY29udGlfdmlpZl9jcmVhdGVfbGlua3ModmlpZl9k ZXYpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IHY0bDJfYXN5bmNfbm90aWZpZXJfb3BlcmF0aW9ucyB2aWlmX25vdGlmeV9v cHMgPSB7DQo+ID4gKwkuYm91bmQgPSB2aXNjb250aV92aWlmX25vdGlmeV9ib3VuZCwNCj4gPiAr CS51bmJpbmQgPSB2aXNjb250aV92aWlmX25vdGlmeV91bmJpbmQsDQo+ID4gKwkuY29tcGxldGUg PSB2aXNjb250aV92aWlmX25vdGlmeV9jb21wbGV0ZSwNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8q IC0tLS0tIFByb2JlIGFuZCBSZW1vdmUgLS0tLS0gKi8NCj4gPiArc3RhdGljIGludCB2aXNjb250 aV92aWlmX2luaXRfYXN5bmNfc3ViZGV2cyhzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2LA0K PiB1bnNpZ25lZCBpbnQgbl9zZCkNCj4gPiArew0KPiA+ICsJLyogUmVzZXJ2ZSBtZW1vcnkgZm9y ICduX3NkJyB2aWlmX3N1YmRldiBkZXNjcmlwdG9ycy4gKi8NCj4gPiArCXZpaWZfZGV2LT5zdWJk ZXZzID0NCj4gPiArCQlkZXZtX2tjYWxsb2ModmlpZl9kZXYtPmRldiwgbl9zZCwgc2l6ZW9mKCp2 aWlmX2Rldi0+c3ViZGV2cyksDQo+IEdGUF9LRVJORUwpOw0KPiA+ICsJaWYgKCF2aWlmX2Rldi0+ c3ViZGV2cykNCj4gPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKwkvKiBSZXNlcnZl IG1lbW9yeSBmb3IgJ25fc2QnIHBvaW50ZXJzIHRvIGFzeW5jX3N1YmRldmljZXMuDQo+ID4gKwkg KiB2aWlmX2Rldi0+YXNkcyBtZW1iZXJzIHdpbGwgcG9pbnQgdG8gJnZpaWZfZGV2LmFzZA0KPiA+ ICsJICovDQo+ID4gKwl2aWlmX2Rldi0+YXNkcyA9IGRldm1fa2NhbGxvYyh2aWlmX2Rldi0+ZGV2 LCBuX3NkLA0KPiBzaXplb2YoKnZpaWZfZGV2LT5hc2RzKSwgR0ZQX0tFUk5FTCk7DQo+ID4gKwlp ZiAoIXZpaWZfZGV2LT5hc2RzKQ0KPiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4gPiAr CXZpaWZfZGV2LT5zZCA9IE5VTEw7DQo+ID4gKwl2aWlmX2Rldi0+c2RfaW5kZXggPSAwOw0KPiA+ ICsJdmlpZl9kZXYtPm51bV9zZCA9IDA7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdmlzY29udGlfdmlpZl9wYXJzZV9kdChzdHJ1Y3Qgdmlp Zl9kZXZpY2UgKnZpaWZfZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9m ID0gdmlpZl9kZXYtPmRldi0+b2Zfbm9kZTsNCj4gPiArCXN0cnVjdCB2NGwyX2Z3bm9kZV9lbmRw b2ludCBmd19lcDsNCj4gPiArCXN0cnVjdCB2aWlmX3N1YmRldiAqdmlpZl9zZDsNCj4gPiArCXN0 cnVjdCBkZXZpY2Vfbm9kZSAqZXA7DQo+ID4gKwl1bnNpZ25lZCBpbnQgaTsNCj4gPiArCWludCBu dW1fZXA7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCW1lbXNldCgmZndfZXAsIDAsIHNp emVvZihzdHJ1Y3QgdjRsMl9md25vZGVfZW5kcG9pbnQpKTsNCj4gPiArDQo+ID4gKwludW1fZXAg PSBvZl9ncmFwaF9nZXRfZW5kcG9pbnRfY291bnQob2YpOw0KPiA+ICsJaWYgKCFudW1fZXApDQo+ ID4gKwkJcmV0dXJuIC1FTk9ERVY7DQo+ID4gKw0KPiA+ICsJcmV0ID0gdmlzY29udGlfdmlpZl9p bml0X2FzeW5jX3N1YmRldnModmlpZl9kZXYsIG51bV9lcCk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IG51bV9lcDsgaSsr KSB7DQo+ID4gKwkJZXAgPSBvZl9ncmFwaF9nZXRfZW5kcG9pbnRfYnlfcmVncyhvZiwgMCwgaSk7 DQo+ID4gKwkJaWYgKCFlcCkgew0KPiA+ICsJCQlkZXZfZXJyKHZpaWZfZGV2LT5kZXYsICJObyBz dWJkZXZpY2UgY29ubmVjdGVkIG9uDQo+IGVuZHBvaW50ICV1LlxuIiwgaSk7DQo+ID4gKwkJCXJl dCA9IC1FTk9ERVY7DQo+ID4gKwkJCWdvdG8gZXJyb3JfcHV0X25vZGU7DQo+ID4gKwkJfQ0KPiA+ ICsNCj4gPiArCQlyZXQgPSB2NGwyX2Z3bm9kZV9lbmRwb2ludF9wYXJzZShvZl9md25vZGVfaGFu ZGxlKGVwKSwNCj4gJmZ3X2VwKTsNCj4gPiArCQlpZiAocmV0KSB7DQo+ID4gKwkJCWRldl9lcnIo dmlpZl9kZXYtPmRldiwgIlVuYWJsZSB0byBwYXJzZSBlbmRwb2ludA0KPiAjJXUuXG4iLCBpKTsN Cj4gPiArCQkJZ290byBlcnJvcl9wdXRfbm9kZTsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWlm IChmd19lcC5idXNfdHlwZSAhPSBWNEwyX01CVVNfQ1NJMl9EUEhZIHx8DQo+ID4gKwkJICAgIGZ3 X2VwLmJ1cy5taXBpX2NzaTIubnVtX2RhdGFfbGFuZXMgPT0gMCkgew0KPiA+ICsJCQlkZXZfZXJy KHZpaWZfZGV2LT5kZXYsICJtaXNzaW5nIENTSS0yIHByb3BlcnRpZXMgaW4NCj4gZW5kcG9pbnRc biIpOw0KPiA+ICsJCQlyZXQgPSAtRUlOVkFMOw0KPiA+ICsJCQlnb3RvIGVycm9yX3B1dF9ub2Rl Ow0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJLyogU2V0dXAgdGhlIGNldSBzdWJkZXZpY2UgYW5k IHRoZSBhc3luYyBzdWJkZXZpY2UuICovDQo+ID4gKwkJdmlpZl9zZCA9ICZ2aWlmX2Rldi0+c3Vi ZGV2c1tpXTsNCj4gPiArCQlJTklUX0xJU1RfSEVBRCgmdmlpZl9zZC0+YXNkLmxpc3QpOw0KPiA+ ICsNCj4gPiArCQl2aWlmX3NkLT5tYnVzX2ZsYWdzID0gZndfZXAuYnVzLm1pcGlfY3NpMi5mbGFn czsNCj4gPiArCQl2aWlmX3NkLT5udW1fbGFuZSA9IGZ3X2VwLmJ1cy5taXBpX2NzaTIubnVtX2Rh dGFfbGFuZXM7DQo+ID4gKwkJdmlpZl9zZC0+YXNkLm1hdGNoX3R5cGUgPSBWNEwyX0FTWU5DX01B VENIX0ZXTk9ERTsNCj4gPiArCQl2aWlmX3NkLT5hc2QubWF0Y2guZndub2RlID0NCj4gPiArDQo+ IAlmd25vZGVfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChvZl9md25vZGVfaGFuZGxlKGVw KSk7DQo+ID4gKw0KPiA+ICsJCXZpaWZfZGV2LT5hc2RzW2ldID0gJnZpaWZfc2QtPmFzZDsNCj4g PiArCQlvZl9ub2RlX3B1dChlcCk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIG51bV9l cDsNCj4gPiArDQo+ID4gK2Vycm9yX3B1dF9ub2RlOg0KPiA+ICsJb2Zfbm9kZV9wdXQoZXApOw0K PiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVj dCBvZl9kZXZpY2VfaWQgdmlzY29udGlfdmlpZl9vZl90YWJsZVtdID0gew0KPiA+ICsJew0KPiA+ ICsJCS5jb21wYXRpYmxlID0gInRvc2hpYmEsdmlzY29udGktdmlpZiIsDQo+ID4gKwl9LA0KPiA+ ICsJe30sDQo+ID4gK307DQo+ID4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHZpc2NvbnRpX3Zp aWZfb2ZfdGFibGUpOw0KPiA+ICsNCj4gPiArI2RlZmluZSBOVU1fSVJRUyAgICAgICAzDQo+ID4g KyNkZWZpbmUgSVJRX0lEX1NUUiAgICAgInZpaWYiDQo+ID4gKyNkZWZpbmUgTUVESUFfTU9ERUwg ICAgInZpc2NvbnRpX3ZpaWYiDQo+ID4gKyNkZWZpbmUgTUVESUFfQlVTX0lORk8gInBsYXRmb3Jt OnZpc2NvbnRpX3ZpaWYiDQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZpc2NvbnRpX3ZpaWZfcHJv YmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gPiArew0KPiA+ICsJY29uc3Qgc3Ry dWN0IG9mX2RldmljZV9pZCAqb2ZfaWQ7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRl di0+ZGV2Ow0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldjsNCj4gPiArCWRtYV9h ZGRyX3QgdGFibGVfcGFkZHI7DQo+ID4gKwlpbnQgcmV0LCBpLCBudW1fc2Q7DQo+ID4gKw0KPiA+ ICsJcmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXYsIERNQV9CSVRfTUFTSygzNikp Ow0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCXZpaWZf ZGV2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCp2aWlmX2RldiksIEdGUF9LRVJORUwpOw0K PiA+ICsJaWYgKCF2aWlmX2RldikNCj4gPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4g KwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB2aWlmX2Rldik7DQo+ID4gKwl2aWlmX2Rldi0+ ZGV2ID0gZGV2Ow0KPiA+ICsNCj4gPiArCXNwaW5fbG9ja19pbml0KCZ2aWlmX2Rldi0+bG9jayk7 DQo+ID4gKwltdXRleF9pbml0KCZ2aWlmX2Rldi0+cG93X2xvY2spOw0KPiA+ICsNCj4gPiArCXZp aWZfZGV2LT5jYXB0dXJlX3JlZyA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShwZGV2 LCAwKTsNCj4gPiArCWlmIChJU19FUlIodmlpZl9kZXYtPmNhcHR1cmVfcmVnKSkNCj4gPiArCQly ZXR1cm4gUFRSX0VSUih2aWlmX2Rldi0+Y2FwdHVyZV9yZWcpOw0KPiA+ICsNCj4gPiArCXZpaWZf ZGV2LT5jc2kyaG9zdF9yZWcgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwg MSk7DQo+ID4gKwlpZiAoSVNfRVJSKHZpaWZfZGV2LT5jc2kyaG9zdF9yZWcpKQ0KPiA+ICsJCXJl dHVybiBQVFJfRVJSKHZpaWZfZGV2LT5jc2kyaG9zdF9yZWcpOw0KPiA+ICsNCj4gPiArCXZpaWZf ZGV2LT5od2RfcmVzID0gYWxsb2NhdGVfdmlpZl9yZXMoZGV2LCB2aWlmX2Rldi0+Y3NpMmhvc3Rf cmVnLA0KPiB2aWlmX2Rldi0+Y2FwdHVyZV9yZWcpOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7 IGkgPCBOVU1fSVJRUzsgaSsrKSB7DQo+ID4gKwkJcmV0ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2 LCBpKTsNCj4gPiArCQlpZiAocmV0IDwgMCkgew0KPiA+ICsJCQlkZXZfZXJyKGRldiwgImZhaWxl ZCB0byBhY3F1aXJlIGlycSByZXNvdXJjZVxuIik7DQo+ID4gKwkJCXJldHVybiByZXQ7DQo+ID4g KwkJfQ0KPiA+ICsJCXZpaWZfZGV2LT5pcnFbaV0gPSByZXQ7DQo+ID4gKwkJcmV0ID0gZGV2bV9y ZXF1ZXN0X2lycShkZXYsIHZpaWZfZGV2LT5pcnFbaV0sIHZpc2NvbnRpX3ZpaWZfaXJxLCAwLA0K PiBJUlFfSURfU1RSLA0KPiA+ICsJCQkJICAgICAgIHZpaWZfZGV2KTsNCj4gPiArCQlpZiAocmV0 KSB7DQo+ID4gKwkJCWRldl9lcnIoZGV2LCAiaXJxIHJlcXVlc3QgZmFpbGVkXG4iKTsNCj4gPiAr CQkJcmV0dXJuIHJldDsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJdmlpZl9kZXYt PnRhYmxlX3ZhZGRyID0NCj4gPiArCQlkbWFfYWxsb2Nfd2MoZGV2LCBzaXplb2Yoc3RydWN0IHZp aWZfdGFibGVfYXJlYSksICZ0YWJsZV9wYWRkciwNCj4gR0ZQX0tFUk5FTCk7DQo+ID4gKwlpZiAo IXZpaWZfZGV2LT50YWJsZV92YWRkcikgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiZG1hX2FsbG9j X3djIGZhaWxlZFxuIik7DQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4gKwl9DQo+ID4gKwl2 aWlmX2Rldi0+dGFibGVfcGFkZHIgPSAoc3RydWN0IHZpaWZfdGFibGVfYXJlYSAqKXRhYmxlX3Bh ZGRyOw0KPiA+ICsNCj4gPiArCS8qIHBvd2VyIGNvbnRyb2wgKi8NCj4gPiArCXBtX3J1bnRpbWVf ZW5hYmxlKGRldik7DQo+ID4gKw0KPiA+ICsJLyogYnVpbGQgbWVkaWFfZGV2ICovDQo+ID4gKwl2 aWlmX2Rldi0+bWVkaWFfZGV2Lmh3X3JldmlzaW9uID0gMDsNCj4gPiArCXN0cnNjcHkodmlpZl9k ZXYtPm1lZGlhX2Rldi5tb2RlbCwgTUVESUFfTU9ERUwsDQo+IHNpemVvZih2aWlmX2Rldi0+bWVk aWFfZGV2Lm1vZGVsKSk7DQo+ID4gKwl2aWlmX2Rldi0+bWVkaWFfZGV2LmRldiA9IGRldjsNCj4g PiArCXN0cnNjcHkodmlpZl9kZXYtPm1lZGlhX2Rldi5idXNfaW5mbywgTUVESUFfQlVTX0lORk8s DQo+IHNpemVvZih2aWlmX2Rldi0+bWVkaWFfZGV2LmJ1c19pbmZvKSk7DQo+ID4gKwltZWRpYV9k ZXZpY2VfaW5pdCgmdmlpZl9kZXYtPm1lZGlhX2Rldik7DQo+ID4gKw0KPiA+ICsJLyogYnVpbGQg djRsMl9kZXYgKi8NCj4gPiArCXZpaWZfZGV2LT52NGwyX2Rldi5tZGV2ID0gJnZpaWZfZGV2LT5t ZWRpYV9kZXY7DQo+ID4gKwlyZXQgPSB2NGwyX2RldmljZV9yZWdpc3RlcihkZXYsICZ2aWlmX2Rl di0+djRsMl9kZXYpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlnb3RvIGVycm9yX2RtYV9mcmVl Ow0KPiA+ICsNCj4gPiArCXJldCA9IG1lZGlhX2RldmljZV9yZWdpc3RlcigmdmlpZl9kZXYtPm1l ZGlhX2Rldik7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQg dG8gcmVnaXN0ZXIgbWVkaWEgZGV2aWNlOiAlZFxuIiwgcmV0KTsNCj4gPiArCQlnb3RvIGVycm9y X3Y0bDJfdW5yZWdpc3RlcjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXQgPSB2aXNjb250aV92 aWlmX2lzcF9yZWdpc3Rlcih2aWlmX2Rldik7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2 X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgaXNwIHN1YiBub2RlOiAlZFxuIiwgcmV0KTsN Cj4gPiArCQlnb3RvIGVycm9yX21lZGlhX3VucmVnaXN0ZXI7DQo+ID4gKwl9DQo+ID4gKwlyZXQg PSB2aXNjb250aV92aWlmX2NhcHR1cmVfcmVnaXN0ZXIodmlpZl9kZXYpOw0KPiA+ICsJaWYgKHJl dCkgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcHR1cmUgbm9k ZTogJWRcbiIsIHJldCk7DQo+ID4gKwkJZ290byBlcnJvcl9tZWRpYV91bnJlZ2lzdGVyOw0KPiA+ ICsJfQ0KPiA+ICsNCj4gPiArCS8qIGNoZWNrIGRldmljZSB0eXBlICovDQo+ID4gKwlvZl9pZCA9 IG9mX21hdGNoX2RldmljZSh2aXNjb250aV92aWlmX29mX3RhYmxlLCBkZXYpOw0KPiA+ICsNCj4g PiArCW51bV9zZCA9IHZpc2NvbnRpX3ZpaWZfcGFyc2VfZHQodmlpZl9kZXYpOw0KPiA+ICsJaWYg KHJldCA8IDApIHsNCj4gPiArCQlyZXQgPSBudW1fc2Q7DQo+ID4gKwkJZ290byBlcnJvcl9tZWRp YV91bnJlZ2lzdGVyOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXZpaWZfZGV2LT5ub3RpZmllci52 NGwyX2RldiA9ICZ2aWlmX2Rldi0+djRsMl9kZXY7DQo+ID4gKwl2NGwyX2FzeW5jX25mX2luaXQo JnZpaWZfZGV2LT5ub3RpZmllcik7DQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3NkOyBpKysp DQo+ID4gKwkJX192NGwyX2FzeW5jX25mX2FkZF9zdWJkZXYoJnZpaWZfZGV2LT5ub3RpZmllciwN Cj4gdmlpZl9kZXYtPmFzZHNbaV0pOw0KPiA+ICsJdmlpZl9kZXYtPm5vdGlmaWVyLm9wcyA9ICZ2 aWlmX25vdGlmeV9vcHM7DQo+ID4gKwlyZXQgPSB2NGwyX2FzeW5jX25mX3JlZ2lzdGVyKCZ2aWlm X2Rldi0+djRsMl9kZXYsICZ2aWlmX2Rldi0+bm90aWZpZXIpOw0KPiA+ICsJaWYgKHJldCkNCj4g PiArCQlnb3RvIGVycm9yX21lZGlhX3VucmVnaXN0ZXI7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7 DQo+ID4gKw0KPiA+ICtlcnJvcl9tZWRpYV91bnJlZ2lzdGVyOg0KPiA+ICsJbWVkaWFfZGV2aWNl X3VucmVnaXN0ZXIoJnZpaWZfZGV2LT5tZWRpYV9kZXYpOw0KPiA+ICtlcnJvcl92NGwyX3VucmVn aXN0ZXI6DQo+ID4gKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZ2aWlmX2Rldi0+djRsMl9kZXYp Ow0KPiA+ICtlcnJvcl9kbWFfZnJlZToNCj4gPiArCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOw0K PiA+ICsJZG1hX2ZyZWVfd2MoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCB2aWlmX3RhYmxlX2Fy ZWEpLA0KPiB2aWlmX2Rldi0+dGFibGVfdmFkZHIsDQo+ID4gKwkJICAgIChkbWFfYWRkcl90KXZp aWZfZGV2LT50YWJsZV9wYWRkcik7DQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgaW50IHZpc2NvbnRpX3ZpaWZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYgPSBw bGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4gPiArDQo+ID4gKwl2aXNjb250aV92aWlmX2lz cF91bnJlZ2lzdGVyKHZpaWZfZGV2KTsNCj4gPiArCXZpc2NvbnRpX3ZpaWZfY2FwdHVyZV91bnJl Z2lzdGVyKHZpaWZfZGV2KTsNCj4gPiArCXY0bDJfYXN5bmNfbmZfdW5yZWdpc3RlcigmdmlpZl9k ZXYtPm5vdGlmaWVyKTsNCj4gPiArCW1lZGlhX2RldmljZV91bnJlZ2lzdGVyKCZ2aWlmX2Rldi0+ bWVkaWFfZGV2KTsNCj4gPiArCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnZpaWZfZGV2LT52NGwy X2Rldik7DQo+ID4gKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7DQo+ID4gKwlkbWFf ZnJlZV93YygmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IHZpaWZfdGFibGVfYXJlYSksDQo+IHZp aWZfZGV2LT50YWJsZV92YWRkciwNCj4gPiArCQkgICAgKGRtYV9hZGRyX3QpdmlpZl9kZXYtPnRh YmxlX3BhZGRyKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIGludCB2aXNjb250aV92aWlmX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpk ZXYpDQo+ID4gK3sNCj4gPiArCS8qIFRoaXMgY2FsbGJhY2sgaXMga2lja2VkIHdoZW4gdGhlIGxh c3QgZGV2aWNlLWZpbGUgaXMgY2xvc2VkICovDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGludCB2aXNjb250aV92aWlmX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBk ZXZpY2UgKmRldikNCj4gPiArew0KPiA+ICsJLyogVGhpcyBjYWxsYmFjayBpcyBraWNrZWQgd2hl biB0aGUgZmlyc3QgZGV2aWNlLWZpbGUgaXMgb3BlbmVkICovDQo+ID4gKwlzdHJ1Y3QgdmlpZl9k ZXZpY2UgKnZpaWZfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ID4gKw0KPiA+ICsJdmlp Zl9kZXYtPnJhd3BhY2tfbW9kZSA9IEhXRF9WSUlGX1JBV1BBQ0tfRElTQUJMRTsNCj4gPiArDQo+ ID4gKwltdXRleF9sb2NrKCZ2aWlmX2Rldi0+cG93X2xvY2spOw0KPiA+ICsNCj4gPiArCS8qIFZT WU5DIG1hc2sgc2V0dGluZyBvZiBNQUlOIHVuaXQgKi8NCj4gPiArCWh3ZF92aWlmX21haW5fdnN5 bmNfc2V0X2lycV9tYXNrKA0KPiA+ICsJCXZpaWZfZGV2LT5od2RfcmVzLCBJTlRfTV9TWU5DX01B U0tfVlNZTkNfSU5UIHwNCj4gSU5UX01fU1lOQ19NQVNLX0xJTkVTX0RFTEFZX0lOVDEgfA0KPiA+ ICsNCj4gSU5UX01fU1lOQ19NQVNLX1NXX0RFTEFZX0lOVDAgfA0KPiA+ICsNCj4gSU5UX01fU1lO Q19NQVNLX1NXX0RFTEFZX0lOVDIpOw0KPiA+ICsNCj4gPiArCS8qIFNUQVRVUyBlcnJvciBtYXNr IHNldHRpbmcgb2YgTUFJTiB1bml0ICovDQo+ID4gKwlod2RfdmlpZl9tYWluX3N0YXR1c19lcnJf c2V0X2lycV9tYXNrKHZpaWZfZGV2LT5od2RfcmVzLA0KPiBJTlRfTV9NQVNLX0RFTEFZX0lOVF9F UlJPUik7DQo+ID4gKw0KPiA+ICsJLyogVlNZTkMgbWFzayBzZXR0aW5ncyBvZiBTVUIgdW5pdCAq Lw0KPiA+ICsJaHdkX3ZpaWZfc3ViX3ZzeW5jX3NldF9pcnFfbWFzayh2aWlmX2Rldi0+aHdkX3Jl cywNCj4gSU5UX1NfU1lOQ19NQVNLX1ZTWU5DX0lOVCB8DQo+ID4gKw0KPiBJTlRfU19TWU5DX01B U0tfU1dfREVMQVlfSU5UMCB8DQo+ID4gKw0KPiBJTlRfU19TWU5DX01BU0tfU1dfREVMQVlfSU5U MSk7DQo+ID4gKw0KPiA+ICsJLyogU1RBVFVTIGVycm9yIG1hc2sgc2V0dGluZyh1bm1hc2spIG9m IFNVQiB1bml0ICovDQo+ID4gKwlod2RfdmlpZl9zdWJfc3RhdHVzX2Vycl9zZXRfaXJxX21hc2so dmlpZl9kZXYtPmh3ZF9yZXMsDQo+ID4gKwkJCQkJICAgICBJTlRfU19NQVNLX1JFU0VSVkVEX1NF VA0KPiB8IElOVF9TX01BU0tfREVMQVlfSU5UX0VSUk9SKTsNCj4gPiArDQo+ID4gKwltdXRleF91 bmxvY2soJnZpaWZfZGV2LT5wb3dfbG9jayk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB2aXNjb250aV92 aWlmX3BtX29wcyA9DQo+IHsgU0VUX1JVTlRJTUVfUE1fT1BTKA0KPiA+ICsJdmlzY29udGlfdmlp Zl9ydW50aW1lX3N1c3BlbmQsIHZpc2NvbnRpX3ZpaWZfcnVudGltZV9yZXN1bWUsIE5VTEwpIH07 DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2aXNjb250aV92aWlm X2RyaXZlciA9IHsNCj4gPiArCS5wcm9iZSA9IHZpc2NvbnRpX3ZpaWZfcHJvYmUsDQo+ID4gKwku cmVtb3ZlID0gdmlzY29udGlfdmlpZl9yZW1vdmUsDQo+ID4gKwkuZHJpdmVyID0gew0KPiA+ICsJ CQkubmFtZSA9ICJ2aXNjb250aV92aWlmIiwNCj4gPiArCQkJLm9mX21hdGNoX3RhYmxlID0gdmlz Y29udGlfdmlpZl9vZl90YWJsZSwNCj4gPiArCQkJLnBtID0gJnZpc2NvbnRpX3ZpaWZfcG1fb3Bz LA0KPiA+ICsJCX0sDQo+ID4gK307DQo+ID4gKw0KPiA+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVy KHZpc2NvbnRpX3ZpaWZfZHJpdmVyKTsNCj4gPiArDQo+ID4gK01PRFVMRV9BVVRIT1IoIll1amkg SXNoaWthd2EgPHl1amkyLmlzaGlrYXdhQHRvc2hpYmEuY28uanA+Iik7DQo+ID4gK01PRFVMRV9E RVNDUklQVElPTigiVG9zaGliYSBWaXNjb250aSBWaWRlbyBJbnB1dCBkcml2ZXIiKTsNCj4gPiAr TU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL3Zpc2NvbnRpL3ZpaWYuaA0KPiBiL2RyaXZlcnMvbWVkaWEvcGxhdGZv cm0vdmlzY29udGkvdmlpZi5oDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAw MDAwMDAwMDAwMC4uY2QxMjFhZTMyMDANCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS92aXNjb250aS92aWlmLmgNCj4gPiBAQCAtMCwwICsxLDIwMyBA QA0KPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMi1DbGF1 c2UgKi8NCj4gPiArLyogVG9zaGliYSBWaXNjb250aSBWaWRlbyBDYXB0dXJlIFN1cHBvcnQNCj4g PiArICoNCj4gPiArICogKEMpIENvcHlyaWdodCAyMDIyIFRPU0hJQkEgQ09SUE9SQVRJT04NCj4g PiArICogKEMpIENvcHlyaWdodCAyMDIyIFRvc2hpYmEgRWxlY3Ryb25pYyBEZXZpY2VzICYgU3Rv cmFnZSBDb3Jwb3JhdGlvbg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpZm5kZWYgVklJRl9IDQo+ ID4gKyNkZWZpbmUgVklJRl9IDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8bGludXgvdmlzY29udGlf dmlpZi5oPg0KPiA+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1hc3luYy5oPg0KPiA+ICsjaW5jbHVk ZSA8bWVkaWEvdjRsMi1jb21tb24uaD4NCj4gPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMu aD4NCj4gPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2Lmg+DQo+ID4gKyNpbmNsdWRlIDxtZWRp YS92NGwyLWRldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1ldmVudC5oPg0KPiA+ ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPg0KPiA+ICsjaW5jbHVkZSA8bWVkaWEvdjRs Mi1tZWRpYWJ1cy5oPg0KPiA+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1tZW0ybWVtLmg+DQo+ID4g KyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1ZjItZG1hLWNvbnRpZy5oPg0KPiA+ICsNCj4gPiArI2lu Y2x1ZGUgImh3ZF92aWlmLmgiDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFZJSUZfSVNQX1JFR0JVRl8w IDANCj4gPiArI2RlZmluZSBWSUlGX0wySVNQX1BPU1RfMCAwDQo+ID4gKyNkZWZpbmUgVklJRl9M MklTUF9QT1NUXzEgMQ0KPiA+ICsNCj4gPiArI2RlZmluZSBWSUlGX0NBUFRVUkVfUEFEX1NJTksg IDANCj4gPiArI2RlZmluZSBWSUlGX0lTUF9QQURfU0lOSyAgICAgIDANCj4gPiArI2RlZmluZSBW SUlGX0lTUF9QQURfU1JDX1BBVEgwIDENCj4gPiArI2RlZmluZSBWSUlGX0lTUF9QQURfU1JDX1BB VEgxIDINCj4gPiArI2RlZmluZSBWSUlGX0lTUF9QQURfU1JDX1BBVEgyIDMNCj4gPiArI2RlZmlu ZSBWSUlGX0lTUF9QQURfTlVNICAgICAgIDQNCj4gPiArDQo+ID4gKyNkZWZpbmUgQ0FQVFVSRV9Q QVRIX01BSU5fUE9TVDAgMA0KPiA+ICsjZGVmaW5lIENBUFRVUkVfUEFUSF9NQUlOX1BPU1QxIDEN Cj4gPiArI2RlZmluZSBDQVBUVVJFX1BBVEhfU1VCCTINCj4gPiArDQo+ID4gKyNkZWZpbmUgVklJ Rl9EUENfVEFCTEVfQllURVMJICA4MTkyDQo+ID4gKyNkZWZpbmUgVklJRl9MU0NfVEFCTEVfQllU RVMJICAxNTM2DQo+ID4gKyNkZWZpbmUgVklJRl9VTkRJU1RfVEFCTEVfQllURVMJICA4MTkyDQo+ ID4gKyNkZWZpbmUgVklJRl9MMl9HQU1NQV9UQUJMRV9CWVRFUyA1MTINCj4gPiArDQo+ID4gKyNk ZWZpbmUgVklJRl9IV19BVkFJTEFCTEVfSVJRUyA0DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgdmlpZl9m bXQgew0KPiA+ICsJdTMyIGZvdXJjYzsNCj4gPiArCXU4IGJwcFszXTsNCj4gPiArCXU4IG51bV9w bGFuZXM7DQo+ID4gKwl1MzIgY29sb3JzcGFjZTsNCj4gPiArCXUzMiBwaXRjaF9hbGlnbjsNCj4g PiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCB2aWlmX3N1YmRldiB7DQo+ID4gKwlzdHJ1Y3QgdjRs Ml9zdWJkZXYgKnY0bDJfc2Q7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9hc3luY19zdWJkZXYgYXNkOw0K PiA+ICsNCj4gPiArCS8qIHBlci1zdWJkZXZpY2UgbWJ1cyBjb25maWd1cmF0aW9uIG9wdGlvbnMg Ki8NCj4gPiArCXVuc2lnbmVkIGludCBtYnVzX2ZsYWdzOw0KPiA+ICsJdW5zaWduZWQgaW50IG1i dXNfY29kZTsNCj4gPiArCXVuc2lnbmVkIGludCBudW1fbGFuZTsNCj4gPiArfTsNCj4gPiArDQo+ ID4gK3N0cnVjdCB2aWlmX3RhYmxlX2FyZWEgew0KPiA+ICsJLyogdmlpZl9sMV9kcGNfY29uZmln ICovDQo+ID4gKwl1MzIgZHBjX3RhYmxlX2hbVklJRl9EUENfVEFCTEVfQllURVMgLyBzaXplb2Yo dTMyKV07DQo+ID4gKwl1MzIgZHBjX3RhYmxlX21bVklJRl9EUENfVEFCTEVfQllURVMgLyBzaXpl b2YodTMyKV07DQo+ID4gKwl1MzIgZHBjX3RhYmxlX2xbVklJRl9EUENfVEFCTEVfQllURVMgLyBz aXplb2YodTMyKV07DQo+ID4gKwkvKiB2aWlmX2wxX2xzY19jb25maWcgKi8NCj4gPiArCXUxNiBs c2NfdGFibGVfZ3JbVklJRl9MU0NfVEFCTEVfQllURVMgLyBzaXplb2YodTE2KV07DQo+ID4gKwl1 MTYgbHNjX3RhYmxlX3JbVklJRl9MU0NfVEFCTEVfQllURVMgLyBzaXplb2YodTE2KV07DQo+ID4g Kwl1MTYgbHNjX3RhYmxlX2JbVklJRl9MU0NfVEFCTEVfQllURVMgLyBzaXplb2YodTE2KV07DQo+ ID4gKwl1MTYgbHNjX3RhYmxlX2diW1ZJSUZfTFNDX1RBQkxFX0JZVEVTIC8gc2l6ZW9mKHUxNild Ow0KPiA+ICsJLyogdmlpZl9sMl91bmRpc3RfY29uZmlnICovDQo+ID4gKwl1MzIgdW5kaXN0X3dy aXRlX2dbVklJRl9VTkRJU1RfVEFCTEVfQllURVMgLyBzaXplb2YodTMyKV07DQo+ID4gKwl1MzIg dW5kaXN0X3JlYWRfYltWSUlGX1VORElTVF9UQUJMRV9CWVRFUyAvIHNpemVvZih1MzIpXTsNCj4g PiArCXUzMiB1bmRpc3RfcmVhZF9nW1ZJSUZfVU5ESVNUX1RBQkxFX0JZVEVTIC8gc2l6ZW9mKHUz MildOw0KPiA+ICsJdTMyIHVuZGlzdF9yZWFkX3JbVklJRl9VTkRJU1RfVEFCTEVfQllURVMgLyBz aXplb2YodTMyKV07DQo+ID4gKwkvKiB2aWlmX2wyX2dhbW1hX2NvbmZpZyAqLw0KPiA+ICsJdTE2 IGwyX2dhbW1hX3RhYmxlWzJdWzZdW1ZJSUZfTDJfR0FNTUFfVEFCTEVfQllURVMgLw0KPiBzaXpl b2YodTE2KV07DQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKiBjYXB0dXJlIGRldmljZSBub2RlIGlu Zm9ybWF0aW9uICovDQo+ID4gK3N0cnVjdCBjYXBfZGV2IHsNCj4gPiArCXUzMiBwYXRoaWQ7IC8q IDAgLi4uIE1BSU4gUE9TVDAsIDEgLi4uIE1BSU4gUE9TVDEsIDIgLi4uIFNVQiAqLw0KPiA+ICsJ c3RydWN0IHZpZGVvX2RldmljZSB2ZGV2Ow0KPiA+ICsJc3RydWN0IG1lZGlhX3BhZCBjYXB0dXJl X3BhZDsNCj4gPiArCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciBjdHJsX2hhbmRsZXI7DQo+ID4g KwlzdHJ1Y3QgbXV0ZXggdmxvY2s7IC8qIHNlcmlhbGl6ZSBpb2N0bCB0byB2YjJfcXVldWUgYW5k IHZpZGVvX2RldmljZSAqLw0KPiA+ICsNCj4gPiArCS8qIHZiMiBxdWV1ZSwgY2FwdHVyZSBidWZm ZXIgbGlzdCBhbmQgYWN0aXZlIGJ1ZmZlciBwb2ludGVyICovDQo+ID4gKwlzdHJ1Y3QgdmIyX3F1 ZXVlIHZiMl92cTsNCj4gPiArCXN0cnVjdCBsaXN0X2hlYWQgYnVmX3F1ZXVlOw0KPiA+ICsJc3Ry dWN0IHZiMl92NGwyX2J1ZmZlciAqYWN0aXZlOw0KPiA+ICsJc3RydWN0IHZiMl92NGwyX2J1ZmZl ciAqZG1hX2FjdGl2ZTsNCj4gPiArCWludCBidWZfY250Ow0KPiA+ICsJdW5zaWduZWQgaW50IHNl cXVlbmNlOw0KPiA+ICsNCj4gPiArCS8qIGN1cnJlbnRseSBjb25maWd1cmVkIGZpZWxkIGFuZCBw aXhlbCBmb3JtYXQgKi8NCj4gPiArCWVudW0gdjRsMl9maWVsZCBmaWVsZDsNCj4gPiArCXN0cnVj dCB2NGwyX3BpeF9mb3JtYXRfbXBsYW5lIHY0bDJfcGl4Ow0KPiA+ICsJdW5zaWduZWQgaW50IG91 dF9mb3JtYXQ7DQo+ID4gKwlzdHJ1Y3QgaHdkX3ZpaWZfaW1nX2FyZWEgaW1nX2FyZWE7DQo+ID4g KwlzdHJ1Y3QgaHdkX3ZpaWZfb3V0X3Byb2Nlc3Mgb3V0X3Byb2Nlc3M7DQo+ID4gKw0KPiA+ICsJ c3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldjsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVj dCBpc3Bfc3ViZGV2IHsNCj4gPiArCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsNCj4gPiArCXN0cnVj dCBtZWRpYV9wYWQgcGFkc1tWSUlGX0lTUF9QQURfTlVNXTsNCj4gPiArCXN0cnVjdCB2NGwyX3N1 YmRldl9wYWRfY29uZmlnIHBhZF9jZmdbVklJRl9JU1BfUEFEX05VTV07DQo+ID4gKwlzdHJ1Y3Qg bXV0ZXggb3BzX2xvY2s7IC8qIHNlcmlhbGl6ZSBWNEwyIHF1ZXJ5ICovDQo+ID4gKwlzdHJ1Y3Qg dmlpZl9kZXZpY2UgKnZpaWZfZGV2Ow0KPiA+ICsJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyIGN0 cmxfaGFuZGxlcjsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBod2RfdmlpZl9yZXM7DQo+ ID4gKw0KPiA+ICtzdHJ1Y3QgdmlpZl9kZXZpY2Ugew0KPiA+ICsJc3RydWN0IGRldmljZSAqZGV2 Ow0KPiA+ICsJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2Ow0KPiA+ICsJc3RydWN0IG1lZGlh X2RldmljZSBtZWRpYV9kZXY7DQo+ID4gKwlzdHJ1Y3QgbWVkaWFfcGlwZWxpbmUgcGlwZTsNCj4g PiArCXUzMiBtYXNrZWRfZ2FtbWFfcGF0aDsNCj4gPiArCXN0cnVjdCBod2RfdmlpZl9mdW5jICpm dW5jOw0KPiA+ICsNCj4gPiArCXN0cnVjdCB2aWlmX3N1YmRldiAqc3ViZGV2czsNCj4gPiArCXN0 cnVjdCB2NGwyX2FzeW5jX3N1YmRldiAqKmFzZHM7DQo+ID4gKwkvKiBhc3luYyBzdWJkZXYgbm90 aWZpY2F0aW9uIGhlbHBlcnMgKi8NCj4gPiArCXN0cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVyIG5v dGlmaWVyOw0KPiA+ICsNCj4gPiArCS8qIHRoZSBzdWJkZXZpY2UgY3VycmVudGx5IGluIHVzZSAq Lw0KPiA+ICsJc3RydWN0IHZpaWZfc3ViZGV2ICpzZDsNCj4gPiArCXVuc2lnbmVkIGludCBzZF9p bmRleDsNCj4gPiArCXVuc2lnbmVkIGludCBudW1fc2Q7DQo+ID4gKw0KPiA+ICsJLyogc3ViIGRl dmljZSBub2RlIGluZm9ybWF0aW9uICovDQo+ID4gKwlzdHJ1Y3QgY2FwX2RldiBjYXBfZGV2MDsN Cj4gPiArCXN0cnVjdCBjYXBfZGV2IGNhcF9kZXYxOw0KPiA+ICsJc3RydWN0IGNhcF9kZXYgY2Fw X2RldjI7DQo+ID4gKwlzdHJ1Y3QgaXNwX3N1YmRldiBpc3Bfc3ViZGV2Ow0KPiA+ICsNCj4gPiAr CS8qIGxvY2sgLSBzZXJpYWxpemUgY2FsbHMgdG8gbG93LWxldmVsIG9wZXJhdGlvbnMgKGh3ZF94 eHh4KSAqLw0KPiA+ICsJLyogYWxzbywgdGhpcyBzZXJpYWxpemUgYWNjZXNzIHRvIGNhcHR1cmUg YnVmZmVyIHF1ZXVlIGFuZCBhY3RpdmUgYnVmZmVyICovDQo+ID4gKwlzcGlubG9ja190IGxvY2s7 DQo+ID4gKw0KPiA+ICsJLyogcG93X2xvY2sgLSBzZXJpYWxpemUgcG93ZXIgY29udHJvbCovDQo+ ID4gKwlzdHJ1Y3QgbXV0ZXggcG93X2xvY2s7DQo+ID4gKw0KPiA+ICsJc3RydWN0IHsNCj4gPiAr CQl1MzIgY2xvY2tfaWQ7DQo+ID4gKwkJdTMyIGNzaTJfY2xvY2tfaWQ7DQo+ID4gKwkJdTMyIGNz aTJfcmVzZXRfaWQ7DQo+ID4gKwl9IGNsa19jb21wYXQ7DQo+ID4gKw0KPiA+ICsJLyogaHdkX3Jl cyAtIGNvbnRleHQgb2YgbG93IGxldmVsIGltcGxlbWVudGF0aW9uICovDQo+ID4gKwlzdHJ1Y3Qg aHdkX3ZpaWZfcmVzICpod2RfcmVzOw0KPiA+ICsNCj4gPiArCXZvaWQgX19pb21lbSAqY2FwdHVy ZV9yZWc7DQo+ID4gKwl2b2lkIF9faW9tZW0gKmNzaTJob3N0X3JlZzsNCj4gPiArCXVuc2lnbmVk IGludCBpcnFbVklJRl9IV19BVkFJTEFCTEVfSVJRU107DQo+ID4gKw0KPiA+ICsJLyogVW4tY2Fj aGUgdGFibGUgYXJlYSAqLw0KPiA+ICsJc3RydWN0IHZpaWZfdGFibGVfYXJlYSAqdGFibGVfdmFk ZHI7DQo+ID4gKwlzdHJ1Y3QgdmlpZl90YWJsZV9hcmVhICp0YWJsZV9wYWRkcjsNCj4gPiArDQo+ ID4gKwkvKiBSYXdwYWNrIG1vZGUgKi8NCj4gPiArCXUzMiByYXdwYWNrX21vZGU7DQo+ID4gKw0K PiA+ICsJLyogRXJyb3IgZmxhZyBjaGVja2VkIGF0IGRlbGF5ZWQgdnN5bmMgaGFuZGxlciAgKi8N Cj4gPiArCXUzMiBzdGF0dXNfZXJyOw0KPiA+ICsNCj4gPiArCS8qIEVycm9yIGZsYWcgY2hlY2tl ZCBhdCBjb21wb3VuZCBjb250cm9sIEdFVF9SRVBPUlRFRF9FUlJPUlMNCj4gKi8NCj4gPiArCXUz MiByZXBvcnRlZF9lcnJfbWFpbjsNCj4gPiArCXUzMiByZXBvcnRlZF9lcnJfc3ViOw0KPiA+ICsJ dTMyIHJlcG9ydGVkX2Vycl9jc2kycng7DQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKiB2aWlmLmMg Ki8NCj4gPiArdm9pZCB2aXNjb250aV92aWlmX2h3X29uKHN0cnVjdCB2aWlmX2RldmljZSAqdmlp Zl9kZXYpOw0KPiA+ICt2b2lkIHZpc2NvbnRpX3ZpaWZfaHdfb2ZmKHN0cnVjdCB2aWlmX2Rldmlj ZSAqdmlpZl9kZXYpOw0KPiA+ICsNCj4gPiArLyogdmlpZl9jYXB0dXJlLmMgKi8NCj4gPiAraW50 IHZpc2NvbnRpX3ZpaWZfY2FwdHVyZV9yZWdpc3RlcihzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZf ZGV2KTsNCj4gPiArdm9pZCB2aXNjb250aV92aWlmX2NhcHR1cmVfdW5yZWdpc3RlcihzdHJ1Y3Qg dmlpZl9kZXZpY2UgKnZpaWZfZGV2KTsNCj4gPiAraW50IHZpc2NvbnRpX3ZpaWZfY2FwdHVyZV9y ZWdpc3Rlcl9jdHJsX2hhbmRsZXJzKHN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYpOw0KPiA+ ICt2b2lkIHZpc2NvbnRpX3ZpaWZfY2FwdHVyZV9zd2l0Y2hfYnVmZmVyKHN0cnVjdCBjYXBfZGV2 ICpjYXBfZGV2LCB1MzINCj4gc3RhdHVzX2VyciwNCj4gPiArCQkJCQkgdTMyIGwyX3RyYW5zZmVy X3N0YXR1cywgdTY0DQo+IHRpbWVzdGFtcCk7DQo+ID4gKw0KPiA+ICsvKiB2aWlmX2lzcC5jICov DQo+ID4gK2ludCB2aXNjb250aV92aWlmX2lzcF9yZWdpc3RlcihzdHJ1Y3QgdmlpZl9kZXZpY2Ug KnZpaWZfZGV2KTsNCj4gPiArdm9pZCB2aXNjb250aV92aWlmX2lzcF91bnJlZ2lzdGVyKHN0cnVj dCB2aWlmX2RldmljZSAqdmlpZl9kZXYpOw0KPiA+ICtpbnQgdmlzY29udGlfdmlpZl9pc3BfbWFp bl9zZXRfdW5pdChzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2KTsNCj4gPiAraW50IHZpc2Nv bnRpX3ZpaWZfaXNwX3N1Yl9zZXRfdW5pdChzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2KTsN Cj4gPiArdm9pZCB2aXNjb250aV92aWlmX2lzcF9zZXRfY29tcG9zZV9yZWN0KHN0cnVjdCB2aWlm X2RldmljZSAqdmlpZl9kZXYsDQo+ID4gKwkJCQkJc3RydWN0IHZpaWZfbDJfcm9pX2NvbmZpZyAq cm9pKTsNCj4gPiArDQo+ID4gKy8qIHZpaWZfY29udHJvbHMuYyAqLw0KPiA+ICtpbnQgdmlzY29u dGlfdmlpZl9pc3BfaW5pdF9jb250cm9scyhzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2KTsN Cj4gPiArDQo+ID4gKyNlbmRpZiAvKiBWSUlGX0ggKi8NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS92aXNjb250aS92aWlmX2NhcHR1cmUuYw0KPiBiL2RyaXZlcnMvbWVk aWEvcGxhdGZvcm0vdmlzY29udGkvdmlpZl9jYXB0dXJlLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwLi5mYTE4YWVjNDQ3MA0KPiA+IC0tLSAvZGV2L251 bGwNCj4gPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Zpc2NvbnRpL3ZpaWZfY2FwdHVy ZS5jDQo+ID4gQEAgLTAsMCArMSwxMjAxIEBADQo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wIE9SIEJTRC0yLUNsYXVzZQ0KPiA+ICsvKiBUb3NoaWJhIFZpc2NvbnRpIFZp ZGVvIENhcHR1cmUgU3VwcG9ydA0KPiA+ICsgKg0KPiA+ICsgKiAoQykgQ29weXJpZ2h0IDIwMjIg VE9TSElCQSBDT1JQT1JBVElPTg0KPiA+ICsgKiAoQykgQ29weXJpZ2h0IDIwMjIgVG9zaGliYSBF bGVjdHJvbmljIERldmljZXMgJiBTdG9yYWdlIENvcnBvcmF0aW9uDQo+ID4gKyAqLw0KPiA+ICsN Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbV9y dW50aW1lLmg+DQo+ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPg0KPiA+ICsjaW5j bHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlICJ2aWlmLmgi DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFZJSUZfQ1JPUF9NQVhfWF9JU1AgKDgwNjJVKQ0KPiA+ICsj ZGVmaW5lIFZJSUZfQ1JPUF9NQVhfWV9JU1AgKDM5NjZVKQ0KPiA+ICsjZGVmaW5lIFZJSUZfQ1JP UF9NSU5fVwkgICAgKDEyOFUpDQo+ID4gKyNkZWZpbmUgVklJRl9DUk9QX01BWF9XX0lTUCAoODE5 MFUpDQo+ID4gKyNkZWZpbmUgVklJRl9DUk9QX01JTl9ICSAgICAoMTI4VSkNCj4gPiArI2RlZmlu ZSBWSUlGX0NST1BfTUFYX0hfSVNQICg0MDk0VSkNCj4gPiArDQo+ID4gK3N0cnVjdCB2aWlmX2J1 ZmZlciB7DQo+ID4gKwlzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyIHZiOw0KPiA+ICsJc3RydWN0IGxp c3RfaGVhZCBxdWV1ZTsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgc3RydWN0 IHZpaWZfYnVmZmVyICp2YjJfdG9fdmlpZihzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyICp2YnVmKQ0K PiA+ICt7DQo+ID4gKwlyZXR1cm4gY29udGFpbmVyX29mKHZidWYsIHN0cnVjdCB2aWlmX2J1ZmZl ciwgdmIpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBjYXBfZGV2 ICp2aWRlb19kcnZkYXRhX3RvX2NhcGRldihzdHJ1Y3QgZmlsZSAqZmlsZSkNCj4gPiArew0KPiA+ ICsJcmV0dXJuIChzdHJ1Y3QgY2FwX2RldiAqKXZpZGVvX2RydmRhdGEoZmlsZSk7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNhcF9kZXYgKnZiMnF1ZXVlX3RvX2Nh cGRldihzdHJ1Y3QgdmIyX3F1ZXVlICp2cSkNCj4gPiArew0KPiA+ICsJcmV0dXJuIChzdHJ1Y3Qg Y2FwX2RldiAqKXZiMl9nZXRfZHJ2X3ByaXYodnEpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiAt LS0tLSBJU1JzIGFuZCBWQjIgT3BlcmF0aW9ucyAtLS0tLSAqLw0KPiA+ICtzdGF0aWMgaW50IHZp aWZfc2V0X2ltZyhzdHJ1Y3QgY2FwX2RldiAqY2FwX2Rldiwgc3RydWN0IHZiMl9idWZmZXIgKnZi KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0X21wbGFuZSAqcGl4ID0gJmNh cF9kZXYtPnY0bDJfcGl4Ow0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldiA9IGNh cF9kZXYtPnZpaWZfZGV2Ow0KPiA+ICsJc3RydWN0IGh3ZF92aWlmX2ltZyBuZXh0X291dF9pbWc7 DQo+ID4gKwlkbWFfYWRkcl90IHBoeXNfYWRkcjsNCj4gPiArCWludCBpLCByZXQgPSAwOw0KPiA+ ICsNCj4gPiArCW5leHRfb3V0X2ltZy53aWR0aCA9IHBpeC0+d2lkdGg7DQo+ID4gKwluZXh0X291 dF9pbWcuaGVpZ2h0ID0gcGl4LT5oZWlnaHQ7DQo+ID4gKwluZXh0X291dF9pbWcuZm9ybWF0ID0g Y2FwX2Rldi0+b3V0X2Zvcm1hdDsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgcGl4LT5u dW1fcGxhbmVzOyBpKyspIHsNCj4gPiArCQluZXh0X291dF9pbWcucGl4ZWxtYXBbaV0ucGl0Y2gg PQ0KPiBwaXgtPnBsYW5lX2ZtdFtpXS5ieXRlc3BlcmxpbmU7DQo+ID4gKwkJcGh5c19hZGRyID0g dmIyX2RtYV9jb250aWdfcGxhbmVfZG1hX2FkZHIodmIsIGkpOw0KPiA+ICsJCW5leHRfb3V0X2lt Zy5waXhlbG1hcFtpXS5wbWFwX3BhZGRyID0gcGh5c19hZGRyOw0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCWlmIChjYXBfZGV2LT5wYXRoaWQgPT0gQ0FQVFVSRV9QQVRIX01BSU5fUE9TVDApIHsNCj4g PiArCQlod2RfdmlpZl9pc3BfZ3VhcmRfc3RhcnQodmlpZl9kZXYtPmh3ZF9yZXMpOw0KPiA+ICsJ CXJldCA9IGh3ZF92aWlmX2wyX3NldF9pbWdfdHJhbnNtaXNzaW9uKHZpaWZfZGV2LT5od2RfcmVz LA0KPiBWSUlGX0wySVNQX1BPU1RfMCwNCj4gPiArCQkJCQkJICAgICAgIEhXRF9WSUlGX0VOQUJM RSwNCj4gJmNhcF9kZXYtPmltZ19hcmVhLA0KPiA+ICsNCj4gJmNhcF9kZXYtPm91dF9wcm9jZXNz LCAmbmV4dF9vdXRfaW1nKTsNCj4gPiArCQlod2RfdmlpZl9pc3BfZ3VhcmRfZW5kKHZpaWZfZGV2 LT5od2RfcmVzKTsNCj4gPiArCQlpZiAocmV0KQ0KPiA+ICsJCQlkZXZfZXJyKHZpaWZfZGV2LT5k ZXYsICJzZXQgaW1nIGVycm9yLiAlZFxuIiwgcmV0KTsNCj4gPiArCX0gZWxzZSBpZiAoY2FwX2Rl di0+cGF0aGlkID09IENBUFRVUkVfUEFUSF9NQUlOX1BPU1QxKSB7DQo+ID4gKwkJaHdkX3ZpaWZf aXNwX2d1YXJkX3N0YXJ0KHZpaWZfZGV2LT5od2RfcmVzKTsNCj4gPiArCQlyZXQgPSBod2Rfdmlp Zl9sMl9zZXRfaW1nX3RyYW5zbWlzc2lvbih2aWlmX2Rldi0+aHdkX3JlcywNCj4gVklJRl9MMklT UF9QT1NUXzEsDQo+ID4gKwkJCQkJCSAgICAgICBIV0RfVklJRl9FTkFCTEUsDQo+ICZjYXBfZGV2 LT5pbWdfYXJlYSwNCj4gPiArDQo+ICZjYXBfZGV2LT5vdXRfcHJvY2VzcywgJm5leHRfb3V0X2lt Zyk7DQo+ID4gKwkJaHdkX3ZpaWZfaXNwX2d1YXJkX2VuZCh2aWlmX2Rldi0+aHdkX3Jlcyk7DQo+ ID4gKwkJaWYgKHJldCkNCj4gPiArCQkJZGV2X2Vycih2aWlmX2Rldi0+ZGV2LCAic2V0IGltZyBl cnJvci4gJWRcbiIsIHJldCk7DQo+ID4gKwl9IGVsc2UgaWYgKGNhcF9kZXYtPnBhdGhpZCA9PSBD QVBUVVJFX1BBVEhfU1VCKSB7DQo+ID4gKwkJaHdkX3ZpaWZfaXNwX2d1YXJkX3N0YXJ0KHZpaWZf ZGV2LT5od2RfcmVzKTsNCj4gPiArCQlyZXQgPSBod2RfdmlpZl9zdWJfc2V0X2ltZ190cmFuc21p c3Npb24odmlpZl9kZXYtPmh3ZF9yZXMsDQo+ICZuZXh0X291dF9pbWcpOw0KPiA+ICsJCWh3ZF92 aWlmX2lzcF9ndWFyZF9lbmQodmlpZl9kZXYtPmh3ZF9yZXMpOw0KPiA+ICsJCWlmIChyZXQpDQo+ ID4gKwkJCWRldl9lcnIodmlpZl9kZXYtPmRldiwgInNldCBpbWcgZXJyb3IuICVkXG4iLCByZXQp Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4g Ky8qDQo+ID4gKyAqIHZpaWZfY2FwdHVyZV9zd2l0Y2hfYnVmZmVyKCkgaXMgY2FsbGVkIGZyb20g aW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZQ0KPiA+ICsgKiB0cmlnZ2VyZWQgYnkgVlN5bmMgd2l0 aCBzb21lIGZpeGVkIGRlbGF5Lg0KPiA+ICsgKiBUaGUgZnVuY3Rpb24gbWF5IHN3aXRjaCBETUEg dGFyZ2V0IGJ1ZmZlciBieSBjYWxsaW5nIHZpaWZfc2V0X2ltZygpLg0KPiA+ICsgKiBUaGUgVklJ RiBETUEgSFcgY2FwdHVyZXMgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgYXQgbmV4dCBWU3luYw0K PiA+ICsgKiBhbmQgY29tcGxldGVzIHRyYW5zZmVyIGF0IG9uZSBtb3JlIGFmdGVyLg0KPiA+ICsg KiBUaGVyZWZvcmUsIGZpbGxlZCBidWZmZXIgaXMgYXZhaWxhYmxlIGF0IHRoZSBvbmUgYWZ0ZXIg bmV4dCBJU1IuDQo+ID4gKyAqDQo+ID4gKyAqIFRvIGF2b2lkIERNQSBIVyBnZXR0aW5nIHN0dWNr ZWQsIHdlIGFsd2F5cyBuZWVkIHRvIHNldCB2YWxpZCBkZXN0aW5hdGlvbg0KPiBhZGRyZXNzLg0K PiA+ICsgKiBJZiBhIHByZXBhcmVkIGJ1ZmZlciBpcyBub3QgYXZhaWxhYmxlLCB3ZSByZXVzZSB0 aGUgYnVmZmVyIGN1cnJlbnRseSBiZWluZw0KPiB0cmFuc2ZlcnJlZCB0by4NCj4gPiArICoNCj4g PiArICogVGhlIGNhcF9kZXYgc3RydWN0dXJlIGhhcyB0d28gcG9pbnRlcnMgYW5kIGEgcXVldWUg dG8gaGFuZGxlIHZpZGVvDQo+IGJ1ZmZlcnM7DQo+ID4gKyArIERlc2NyaXB0aW9uIG9mIGVhY2gg aXRlbSBhdCB0aGUgZW50cnkgb2YgdGhpcyBmdW5jdGlvbjoNCj4gPiArICogKiBidWZfcXVldWU6 ICBob2xkcyBwcmVwYXJlZCBidWZmZXJzLCBzZXQgYnkgdmIyX3F1ZXVlKCkNCj4gPiArICogKiBh Y3RpdmU6ICAgICBwb2ludGluZyBhdCBhZGRyZXNzIGNhcHR1cmVkIChhbmQgdG8gYmUgZmlsbGVk KSBieSBETUEgSFcNCj4gPiArICogKiBkbWFfYWN0aXZlOiBwb2ludGluZyBhdCBidWZmZXIgZmls bGVkIGJ5IERNQSBIVw0KPiA+ICsgKg0KPiA+ICsgKiBSdWxlcyB0byB1cGRhdGUgaXRlbXM6DQo+ ID4gKyAqICogd2hlbiBidWZfcXVldWUgaXMgbm90IGVtcHR5LCAiYWN0aXZlIiBidWZmZXIgZ29l cyAiZG1hX2FjdGl2ZSINCj4gPiArICogKiB3aGVuIGJ1Zl9xdWV1ZSBpcyBlbXB0eToNCj4gPiAr ICogICAqICJhY3RpdmUiIGJ1ZmZlciBzdGF5cyB0aGUgc2FtZSAoRE1BIEhXIGZpbGxzIHRoZSBz YW1lIGJ1ZmZlciBmb3INCj4gY29taW5nIHR3byBmcmFtZXMpDQo+ID4gKyAqICAgKiAiZG1hX2Fj dGl2ZSIgZ2V0cyBOVUxMIChmaWxsZWQgYnVmZmVyIHdpbGwgYmUgcmV1c2VkOyBzaG91bGQgbm90 IGdvDQo+ICJET05FIiBhdCBuZXh0IElTUikNCj4gPiArICoNCj4gPiArICogU2ltdWxhdGlvbjoN Cj4gPiArICogfCBidWZfcXVldWUgICB8IGFjdGl2ZSAgfCBkbWFfYWN0aXZlIHwgbm90ZSB8DQo+ ID4gKyAqIHwgWCAgICAgICAgICAgfCBOVUxMICAgIHwgTlVMTCAgICAgICB8ICAgICAgfA0KPiA+ ICsgKiA8UUJVRiBCVUYwPg0KPiA+ICsgKiB8IFggICAgICAgICAgIHwgQlVGMCAgICB8IE5VTEwg ICAgICAgfCBCVUYwIHN0YXlzIHwNCj4gPiArICogfCBYICAgICAgICAgICB8IEJVRjAgICAgfCBO VUxMICAgICAgIHwgQlVGMCBzdGF5cyB8DQo+ID4gKyAqIDxRQlVGIEJVRjE+DQo+ID4gKyAqIDxR QlVGIEJVRjI+DQo+ID4gKyAqIHwgQlVGMiBCVUYxICAgfCBCVUYwICAgIHwgTlVMTCAgICAgICB8 ICAgICAgfA0KPiA+ICsgKiB8IEJVRjIgICAgICAgIHwgQlVGMSAgICB8IEJVRjAgICAgICAgfCBC VUYwIGdvZXMgRE9ORSB8DQo+ID4gKyAqIHwgWCAgICAgICAgICAgfCBCVUYyICAgIHwgQlVGMSAg ICAgICB8IEJVRjEgZ29lcyBET05FLCBCVUYyIHN0YXlzIHwNCj4gPiArICogfCBYICAgICAgICAg ICB8IEJVRjIgICAgfCBOVUxMICAgICAgIHwgQlVGMiBzdGF5cyB8DQo+ID4gKyAqLw0KPiA+ICt2 b2lkIHZpc2NvbnRpX3ZpaWZfY2FwdHVyZV9zd2l0Y2hfYnVmZmVyKHN0cnVjdCBjYXBfZGV2ICpj YXBfZGV2LCB1MzINCj4gc3RhdHVzX2VyciwNCj4gPiArCQkJCQkgdTMyIGwyX3RyYW5zZmVyX3N0 YXR1cywgdTY0DQo+IHRpbWVzdGFtcCkNCj4gPiArew0KPiA+ICsJaWYgKGNhcF9kZXYtPmRtYV9h Y3RpdmUpIHsNCj4gPiArCQkvKiBETUEgaGFzIGNvbXBsZXRlZCBhbmQgYW5vdGhlciBmcmFtZWJ1 ZmZlciBpbnN0YW5jZSBpcyBzZXQNCj4gKi8NCj4gPiArCQlzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVy ICp2YnVmID0gY2FwX2Rldi0+ZG1hX2FjdGl2ZTsNCj4gPiArCQllbnVtIHZiMl9idWZmZXJfc3Rh dGUgc3RhdGU7DQo+ID4gKw0KPiA+ICsJCWNhcF9kZXYtPmJ1Zl9jbnQtLTsNCj4gPiArCQl2YnVm LT52YjJfYnVmLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsNCj4gPiArCQl2YnVmLT5zZXF1ZW5jZSA9 IGNhcF9kZXYtPnNlcXVlbmNlKys7DQo+ID4gKwkJdmJ1Zi0+ZmllbGQgPSBjYXBfZGV2LT5maWVs ZDsNCj4gPiArCQlpZiAoc3RhdHVzX2VyciB8fCBsMl90cmFuc2Zlcl9zdGF0dXMpDQo+ID4gKwkJ CXN0YXRlID0gVkIyX0JVRl9TVEFURV9FUlJPUjsNCj4gPiArCQllbHNlDQo+ID4gKwkJCXN0YXRl ID0gVkIyX0JVRl9TVEFURV9ET05FOw0KPiA+ICsNCj4gPiArCQl2YjJfYnVmZmVyX2RvbmUoJnZi dWYtPnZiMl9idWYsIHN0YXRlKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBRVUVVRSBwb3Ag dG8gcmVnaXN0ZXIgYW4gaW5zdGFuY2UgYXMgbmV4dCBETUEgdGFyZ2V0OyBpZiBlbXB0eSwNCj4g cmV1c2UgY3VycmVudCBpbnN0YW5jZSAqLw0KPiA+ICsJaWYgKCFsaXN0X2VtcHR5KCZjYXBfZGV2 LT5idWZfcXVldWUpKSB7DQo+ID4gKwkJc3RydWN0IHZpaWZfYnVmZmVyICpidWYgPQ0KPiA+ICsJ CQlsaXN0X2VudHJ5KGNhcF9kZXYtPmJ1Zl9xdWV1ZS5uZXh0LCBzdHJ1Y3QgdmlpZl9idWZmZXIs DQo+IHF1ZXVlKTsNCj4gPiArCQlsaXN0X2RlbF9pbml0KCZidWYtPnF1ZXVlKTsNCj4gPiArCQl2 aWlmX3NldF9pbWcoY2FwX2RldiwgJmJ1Zi0+dmIudmIyX2J1Zik7DQo+ID4gKwkJY2FwX2Rldi0+ YWN0aXZlID0gJmJ1Zi0+dmI7DQo+ID4gKwkJY2FwX2Rldi0+ZG1hX2FjdGl2ZSA9IGNhcF9kZXYt PmFjdGl2ZTsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJY2FwX2Rldi0+ZG1hX2FjdGl2ZSA9IE5V TEw7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIC0tLSBDYXB0dXJlIGJ1ZmZlciBj b250cm9sIC0tLSAqLw0KPiA+ICtzdGF0aWMgaW50IHZpaWZfdmIyX3NldHVwKHN0cnVjdCB2YjJf cXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1bnNpZ25lZA0KPiBpbnQgKm51bV9wbGFu ZXMsDQo+ID4gKwkJCSAgdW5zaWduZWQgaW50IHNpemVzW10sIHN0cnVjdCBkZXZpY2UgKmFsbG9j X2RldnNbXSkNCj4gPiArew0KPiA+ICsJc3RydWN0IGNhcF9kZXYgKmNhcF9kZXYgPSB2YjJxdWV1 ZV90b19jYXBkZXYodnEpOw0KPiA+ICsJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdF9tcGxhbmUgKnBp eCA9ICZjYXBfZGV2LT52NGwyX3BpeDsNCj4gPiArCXVuc2lnbmVkIGludCBpOw0KPiA+ICsNCj4g PiArCS8qIG51bV9wbGFuZXMgaXMgc2V0OiBqdXN0IGNoZWNrIHBsYW5lIHNpemVzLiAqLw0KPiA+ ICsJaWYgKCpudW1fcGxhbmVzKSB7DQo+ID4gKwkJZm9yIChpID0gMDsgaSA8IHBpeC0+bnVtX3Bs YW5lczsgaSsrKQ0KPiA+ICsJCQlpZiAoc2l6ZXNbaV0gPCBwaXgtPnBsYW5lX2ZtdFtpXS5zaXpl aW1hZ2UpDQo+ID4gKwkJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwkJcmV0dXJuIDA7 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogbnVtX3BsYW5lcyBub3Qgc2V0OiBjYWxsZWQgZnJv bSBSRVFCVUZTLCBqdXN0IHNldCBwbGFuZSBzaXplcy4gKi8NCj4gPiArCSpudW1fcGxhbmVzID0g cGl4LT5udW1fcGxhbmVzOw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IHBpeC0+bnVtX3BsYW5lczsg aSsrKQ0KPiA+ICsJCXNpemVzW2ldID0gcGl4LT5wbGFuZV9mbXRbaV0uc2l6ZWltYWdlOw0KPiA+ ICsNCj4gPiArCWNhcF9kZXYtPmJ1Zl9jbnQgPSAwOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB2aWlmX3ZiMl9xdWV1ZShzdHJ1Y3QgdmIy X2J1ZmZlciAqdmIpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBjYXBfZGV2ICpjYXBfZGV2ID0gdmIy cXVldWVfdG9fY2FwZGV2KHZiLT52YjJfcXVldWUpOw0KPiA+ICsJc3RydWN0IHZiMl92NGwyX2J1 ZmZlciAqdmJ1ZiA9IHRvX3ZiMl92NGwyX2J1ZmZlcih2Yik7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9k ZXZpY2UgKnZpaWZfZGV2ID0gY2FwX2Rldi0+dmlpZl9kZXY7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9i dWZmZXIgKmJ1ZiA9IHZiMl90b192aWlmKHZidWYpOw0KPiA+ICsJdW5zaWduZWQgbG9uZyBpcnFm bGFnczsNCj4gPiArDQo+ID4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmdmlpZl9kZXYtPmxvY2ssIGly cWZsYWdzKTsNCj4gPiArDQo+ID4gKwlpZiAoIWNhcF9kZXYtPmFjdGl2ZSkgew0KPiA+ICsJCWNh cF9kZXYtPmFjdGl2ZSA9IHZidWY7DQo+ID4gKwkJdmlpZl9zZXRfaW1nKGNhcF9kZXYsIHZiKTsN Cj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT5xdWV1ZSwgJmNhcF9k ZXYtPmJ1Zl9xdWV1ZSk7DQo+ID4gKwl9DQo+ID4gKwljYXBfZGV2LT5idWZfY250Kys7DQo+ID4g Kw0KPiA+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlpZl9kZXYtPmxvY2ssIGlycWZsYWdz KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2aWlmX3ZiMl9wcmVwYXJlKHN0cnVj dCB2YjJfYnVmZmVyICp2YikNCj4gPiArew0KPiA+ICsJc3RydWN0IGNhcF9kZXYgKmNhcF9kZXYg PSB2YjJxdWV1ZV90b19jYXBkZXYodmItPnZiMl9xdWV1ZSk7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9w aXhfZm9ybWF0X21wbGFuZSAqcGl4ID0gJmNhcF9kZXYtPnY0bDJfcGl4Ow0KPiA+ICsJc3RydWN0 IHZpaWZfZGV2aWNlICp2aWlmX2RldiA9IGNhcF9kZXYtPnZpaWZfZGV2Ow0KPiA+ICsJdW5zaWdu ZWQgaW50IGk7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IHBpeC0+bnVtX3BsYW5lczsg aSsrKSB7DQo+ID4gKwkJaWYgKHZiMl9wbGFuZV9zaXplKHZiLCBpKSA8IHBpeC0+cGxhbmVfZm10 W2ldLnNpemVpbWFnZSkgew0KPiA+ICsJCQlkZXZfZXJyKHZpaWZfZGV2LT5kZXYsICJQbGFuZSBz aXplIHRvbyBzbWFsbCAoJWx1DQo+IDwgJXUpXG4iLA0KPiA+ICsJCQkJdmIyX3BsYW5lX3NpemUo dmIsIGkpLA0KPiBwaXgtPnBsYW5lX2ZtdFtpXS5zaXplaW1hZ2UpOw0KPiA+ICsJCQlyZXR1cm4g LUVJTlZBTDsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCXZiMl9zZXRfcGxhbmVfcGF5bG9hZCh2 YiwgaSwgcGl4LT5wbGFuZV9mbXRbaV0uc2l6ZWltYWdlKTsNCj4gPiArCX0NCj4gPiArCXJldHVy biAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZpaWZfc3RhcnRfc3RyZWFtaW5n KHN0cnVjdCB2YjJfcXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgY291bnQpDQo+ID4gK3sNCj4gPiAr CXN0cnVjdCBjYXBfZGV2ICpjYXBfZGV2ID0gdmIycXVldWVfdG9fY2FwZGV2KHZxKTsNCj4gPiAr CXN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYgPSBjYXBfZGV2LT52aWlmX2RldjsNCj4gPiAr CXN0cnVjdCB2aWlmX3N1YmRldiAqdmlpZl9zZCA9IHZpaWZfZGV2LT5zZDsNCj4gPiArCXVuc2ln bmVkIGxvbmcgaXJxZmxhZ3M7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCXNwaW5fbG9j a19pcnFzYXZlKCZ2aWlmX2Rldi0+bG9jaywgaXJxZmxhZ3MpOw0KPiA+ICsNCj4gPiArCS8qIG5v dGUgdGhhdCBwaXBlIGlzIHNoYXJlZCBhbW9uZyBwYXRoczsgc2VlIHBpcGUuc3RyZWFtaW5nX2Nv dW50DQo+IG1lbWJlciB2YXJpYWJsZSAqLw0KPiA+ICsJcmV0ID0gdmlkZW9fZGV2aWNlX3BpcGVs aW5lX3N0YXJ0KCZjYXBfZGV2LT52ZGV2LCAmdmlpZl9kZXYtPnBpcGUpOw0KPiA+ICsJaWYgKHJl dCkNCj4gPiArCQlkZXZfZXJyKHZpaWZfZGV2LT5kZXYsICJzdGFydCBwaXBlbGluZSBmYWlsZWQg JWRcbiIsIHJldCk7DQo+IA0KPiBIdWgsIHdoeSBkbyB5b3UgaWdub3JlIHRoZSBlcnJvciBhbmQg Y29udGludWU/DQoNClRoaXMgZXJyb3Igc2hvdWxkIGhhdmUgYmVlbiBjYXJlZC4NCkknbGwgZml4 IGl0Lg0KDQo+ID4gKw0KPiA+ICsJLyogQ3VycmVudGx5LCBvbmx5IHBhdGgwIChNQUlOIFBPU1Qw KSBpbml0aWFsaXplcyBJU1AgYW5kIENhbWVyYSAqLw0KPiA+ICsJLyogUG9zc2libHksIGluaXRp YWxpemF0aW9uIGNhbiBiZSBkb25lIHdoZW4gcGlwZS5zdHJlYW1pbmdfY291bnQ9PTAgKi8NCj4g PiArCWlmIChjYXBfZGV2LT5wYXRoaWQgPT0gQ0FQVFVSRV9QQVRIX01BSU5fUE9TVDApIHsNCj4g PiArCQkvKiBDU0kyUlggc3RhcnQgKi8NCj4gPiArCQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKCZ2 aWlmX2Rldi0+aXNwX3N1YmRldi5zZCwgdmlkZW8sDQo+IHNfc3RyZWFtLCB0cnVlKTsNCj4gPiAr CQlpZiAocmV0KSB7DQo+ID4gKwkJCWRldl9lcnIodmlpZl9kZXYtPmRldiwgIlN0YXJ0IGlzcCBz dWJkZXZpY2Ugc3RyZWFtDQo+IGZhaWxlZC4gJWRcbiIsIHJldCk7DQo+ID4gKwkJCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJnZpaWZfZGV2LT5sb2NrLCBpcnFmbGFncyk7DQo+IA0KPiBPbiBlcnJv ciBhbGwgcXVldWVkIGJ1ZmZlcnMgaGF2ZSB0byBiZSByZXR1cm5lZCB0byB2YjIgd2l0aCBzdGF0 dXMNCj4gVkIyX0JVRl9TVEFURV9RVUVVRUQuDQo+IE90aGVyd2lzZSB0aGUgdmIyIGludGVybmFs IHN0YXR1cyB3aWxsIGdldCBjb25mdXNlZC4gU2ltaWxhciB0byBzdG9wX3N0cmVhbWluZywNCj4g anVzdA0KPiB3aXRoIGEgZGlmZmVyZW50IHN0YXR1cyAoUVVFVUVEIGluc3RlYWQgb2YgRVJST1Ip Lg0KDQpJJ2xsIGZpeCB0aGVtLiBJJ2xsIGFkZCBjYXJlcyBmb3IgdmIyIGF0IHN0YXJ0L3N0b3Ag c3RyZWFtaW5nLg0KIA0KPiA+ICsJCQlyZXR1cm4gcmV0Ow0KPiA+ICsJCX0NCj4gPiArCX0NCj4g PiArDQo+ID4gKwkvKiBidWZmZXIgY29udHJvbCAqLw0KPiA+ICsJY2FwX2Rldi0+c2VxdWVuY2Ug PSAwOw0KPiA+ICsNCj4gPiArCS8qIGZpbmlzaCBjcml0aWNhbCBzZWN0aW9uOiBzb21lIHNlbnNv ciBkcml2ZXIgKGluY2x1ZGluZyBpbXgyMTkpIGNhbGxzDQo+IHNjaGVkdWxlKCkgKi8NCj4gPiAr CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpaWZfZGV2LT5sb2NrLCBpcnFmbGFncyk7DQo+ID4g Kw0KPiA+ICsJLyogQ2FtZXJhIChDU0kyIHNvdXJjZSkgc3RhcnQgc3RyZWFtaW5nICovDQo+ID4g KwkvKiBDdXJyZW50bHksIG9ubHkgcGF0aDAgKE1BSU4gUE9TVDApIGluaXRpYWxpemVzIElTUCBh bmQgQ2FtZXJhICovDQo+ID4gKwkvKiBQb3NzaWJseSwgaW5pdGlhbGl6YXRpb24gY2FuIGJlIGRv bmUgd2hlbiBwaXBlLnN0cmVhbWluZ19jb3VudD09MCAqLw0KPiA+ICsJaWYgKGNhcF9kZXYtPnBh dGhpZCA9PSBDQVBUVVJFX1BBVEhfTUFJTl9QT1NUMCkgew0KPiA+ICsJCXJldCA9IHY0bDJfc3Vi ZGV2X2NhbGwodmlpZl9zZC0+djRsMl9zZCwgdmlkZW8sIHNfc3RyZWFtLCB0cnVlKTsNCj4gPiAr CQlpZiAocmV0KSB7DQo+ID4gKwkJCWRldl9lcnIodmlpZl9kZXYtPmRldiwgIlN0YXJ0IHN1YmRl diBzdHJlYW0NCj4gZmFpbGVkLiAlZFxuIiwgcmV0KTsNCj4gPiArCQkJKHZvaWQpdjRsMl9zdWJk ZXZfY2FsbCgmdmlpZl9kZXYtPmlzcF9zdWJkZXYuc2QsDQo+IHZpZGVvLCBzX3N0cmVhbSwgZmFs c2UpOw0KPiA+ICsJCQlyZXR1cm4gcmV0Ow0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4g KwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgdmlpZl9zdG9wX3N0 cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSkNCj4gPiArew0KPiA+ICsJc3RydWN0IGNhcF9k ZXYgKmNhcF9kZXYgPSB2YjJxdWV1ZV90b19jYXBkZXYodnEpOw0KPiA+ICsJc3RydWN0IHZpaWZf ZGV2aWNlICp2aWlmX2RldiA9IGNhcF9kZXYtPnZpaWZfZGV2Ow0KPiA+ICsJc3RydWN0IHZpaWZf c3ViZGV2ICp2aWlmX3NkID0gdmlpZl9kZXYtPnNkOw0KPiA+ICsJc3RydWN0IHZpaWZfYnVmZmVy ICpidWY7DQo+ID4gKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOw0KPiA+ICsJaW50IHJldDsNCj4g PiArDQo+ID4gKwkvKiBDdXJyZW50bHksIG9ubHkgcGF0aDAgKE1BSU4gUE9TVDApIHN0b3BzIElT UCBhbmQgQ2FtZXJhICovDQo+ID4gKwkvKiBQb3NzaWJseSwgdGVhcmRvd24gY2FuIGJlIGRvbmUg d2hlbiBwaXBlLnN0cmVhbWluZ19jb3VudD09MCAqLw0KPiA+ICsJaWYgKGNhcF9kZXYtPnBhdGhp ZCA9PSBDQVBUVVJFX1BBVEhfTUFJTl9QT1NUMCkgew0KPiA+ICsJCXJldCA9IHY0bDJfc3ViZGV2 X2NhbGwodmlpZl9zZC0+djRsMl9zZCwgdmlkZW8sIHNfc3RyZWFtLA0KPiBmYWxzZSk7DQo+ID4g KwkJaWYgKHJldCkNCj4gPiArCQkJZGV2X2Vycih2aWlmX2Rldi0+ZGV2LCAiU3RvcCBzdWJkZXYg c3RyZWFtDQo+IGZhaWxlZC4gJWRcbiIsIHJldCk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJc3Bp bl9sb2NrX2lycXNhdmUoJnZpaWZfZGV2LT5sb2NrLCBpcnFmbGFncyk7DQo+ID4gKw0KPiA+ICsJ LyogQ3VycmVudGx5LCBvbmx5IHBhdGgwIChNQUlOIFBPU1QwKSBzdG9wcyBJU1AgYW5kIENhbWVy YSAqLw0KPiA+ICsJLyogUG9zc2libHksIHRlYXJkb3duIGNhbiBiZSBkb25lIHdoZW4gcGlwZS5z dHJlYW1pbmdfY291bnQ9PTAgKi8NCj4gPiArCWlmIChjYXBfZGV2LT5wYXRoaWQgPT0gQ0FQVFVS RV9QQVRIX01BSU5fUE9TVDApIHsNCj4gPiArCQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKCZ2aWlm X2Rldi0+aXNwX3N1YmRldi5zZCwgdmlkZW8sDQo+IHNfc3RyZWFtLCBmYWxzZSk7DQo+ID4gKwkJ aWYgKHJldCkNCj4gPiArCQkJZGV2X2Vycih2aWlmX2Rldi0+ZGV2LCAiU3RvcCBpc3Agc3ViZGV2 aWNlIHN0cmVhbQ0KPiBmYWlsZWQgJWRcbiIsIHJldCk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJ LyogYnVmZmVyIGNvbnRyb2wgKi8NCj4gPiArCWlmIChjYXBfZGV2LT5hY3RpdmUpIHsNCj4gPiAr CQl2YjJfYnVmZmVyX2RvbmUoJmNhcF9kZXYtPmFjdGl2ZS0+dmIyX2J1ZiwNCj4gVkIyX0JVRl9T VEFURV9FUlJPUik7DQo+ID4gKwkJY2FwX2Rldi0+YnVmX2NudC0tOw0KPiA+ICsJCWNhcF9kZXYt PmFjdGl2ZSA9IE5VTEw7DQo+ID4gKwl9DQo+ID4gKwlpZiAoY2FwX2Rldi0+ZG1hX2FjdGl2ZSkg ew0KPiA+ICsJCXZiMl9idWZmZXJfZG9uZSgmY2FwX2Rldi0+ZG1hX2FjdGl2ZS0+dmIyX2J1ZiwN Cj4gVkIyX0JVRl9TVEFURV9FUlJPUik7DQo+ID4gKwkJY2FwX2Rldi0+YnVmX2NudC0tOw0KPiA+ ICsJCWNhcF9kZXYtPmRtYV9hY3RpdmUgPSBOVUxMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8q IFJlbGVhc2UgYWxsIHF1ZXVlZCBidWZmZXJzLiAqLw0KPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRy eShidWYsICZjYXBfZGV2LT5idWZfcXVldWUsIHF1ZXVlKSB7DQo+ID4gKwkJdmIyX2J1ZmZlcl9k b25lKCZidWYtPnZiLnZiMl9idWYsDQo+IFZCMl9CVUZfU1RBVEVfRVJST1IpOw0KPiA+ICsJCWNh cF9kZXYtPmJ1Zl9jbnQtLTsNCj4gPiArCX0NCj4gPiArCUlOSVRfTElTVF9IRUFEKCZjYXBfZGV2 LT5idWZfcXVldWUpOw0KPiA+ICsJaWYgKGNhcF9kZXYtPmJ1Zl9jbnQpDQo+ID4gKwkJZGV2X2Vy cih2aWlmX2Rldi0+ZGV2LCAiQnVmZmVyIGNvdW50IGVycm9yICVkXG4iLA0KPiBjYXBfZGV2LT5i dWZfY250KTsNCj4gPiArDQo+ID4gKwl2aWRlb19kZXZpY2VfcGlwZWxpbmVfc3RvcCgmY2FwX2Rl di0+dmRldik7DQo+ID4gKw0KPiA+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlpZl9kZXYt PmxvY2ssIGlycWZsYWdzKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVj dCB2YjJfb3BzIHZpaWZfdmIyX29wcyA9IHsNCj4gPiArCS5xdWV1ZV9zZXR1cCA9IHZpaWZfdmIy X3NldHVwLA0KPiA+ICsJLmJ1Zl9xdWV1ZSA9IHZpaWZfdmIyX3F1ZXVlLA0KPiA+ICsJLmJ1Zl9w cmVwYXJlID0gdmlpZl92YjJfcHJlcGFyZSwNCj4gPiArCS53YWl0X3ByZXBhcmUgPSB2YjJfb3Bz X3dhaXRfcHJlcGFyZSwNCj4gPiArCS53YWl0X2ZpbmlzaCA9IHZiMl9vcHNfd2FpdF9maW5pc2gs DQo+ID4gKwkuc3RhcnRfc3RyZWFtaW5nID0gdmlpZl9zdGFydF9zdHJlYW1pbmcsDQo+ID4gKwku c3RvcF9zdHJlYW1pbmcgPSB2aWlmX3N0b3Bfc3RyZWFtaW5nLA0KPiA+ICt9Ow0KPiA+ICsNCj4g PiArLyogLS0tIFZJSUYgaGFyZHdhcmUgc2V0dGluZ3MgLS0tICovDQo+ID4gKy8qIEwySVNQIG91 dHB1dCBjc2Mgc2V0dGluZyBmb3IgWVVWIHRvIFJHQihJVFUtUiBCVC43MDkpICovDQo+ID4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgaHdkX3ZpaWZfY3NjX3BhcmFtIHZpaWZfY3NjX3l1djJyZ2IgPSB7 DQo+ID4gKwkucl9jcl9pbl9vZmZzZXQgPSAweDE4MDAwLA0KPiA+ICsJLmdfeV9pbl9vZmZzZXQg PSAweDFmMDAwLA0KPiA+ICsJLmJfY2JfaW5fb2Zmc2V0ID0gMHgxODAwMCwNCj4gPiArCS5jb2Vm ID0gew0KPiA+ICsJCQlbMF0gPSAweDEwMDAsDQo+ID4gKwkJCVsxXSA9IDB4ZmQxMiwNCj4gPiAr CQkJWzJdID0gMHhmOGFkLA0KPiA+ICsJCQlbM10gPSAweDEwMDAsDQo+ID4gKwkJCVs0XSA9IDB4 MWQwNywNCj4gPiArCQkJWzVdID0gMHgwMDAwLA0KPiA+ICsJCQlbNl0gPSAweDEwMDAsDQo+ID4g KwkJCVs3XSA9IDB4MDAwMCwNCj4gPiArCQkJWzhdID0gMHgxOGEyLA0KPiA+ICsJCX0sDQo+ID4g Kwkucl9jcl9vdXRfb2Zmc2V0ID0gMHgxMDAwLA0KPiA+ICsJLmdfeV9vdXRfb2Zmc2V0ID0gMHgx MDAwLA0KPiA+ICsJLmJfY2Jfb3V0X29mZnNldCA9IDB4MTAwMCwNCj4gPiArfTsNCj4gPiArDQo+ ID4gKy8qIEwySVNQIG91dHB1dCBjc2Mgc2V0dGluZyBmb3IgUkdCIHRvIFlVVihJVFUtUiBCVC43 MDkpICovDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHdkX3ZpaWZfY3NjX3BhcmFtIHZpaWZf Y3NjX3JnYjJ5dXYgPSB7DQo+ID4gKwkucl9jcl9pbl9vZmZzZXQgPSAweDFmMDAwLA0KPiA+ICsJ LmdfeV9pbl9vZmZzZXQgPSAweDFmMDAwLA0KPiA+ICsJLmJfY2JfaW5fb2Zmc2V0ID0gMHgxZjAw MCwNCj4gPiArCS5jb2VmID0gew0KPiA+ICsJCQlbMF0gPSAweDBiNzEsDQo+ID4gKwkJCVsxXSA9 IDB4MDEyOCwNCj4gPiArCQkJWzJdID0gMHgwMzY3LA0KPiA+ICsJCQlbM10gPSAweGY5YjEsDQo+ ID4gKwkJCVs0XSA9IDB4MDgyZiwNCj4gPiArCQkJWzVdID0gMHhmZTIwLA0KPiA+ICsJCQlbNl0g PSAweGY4OTEsDQo+ID4gKwkJCVs3XSA9IDB4ZmY0MCwNCj4gPiArCQkJWzhdID0gMHgwODJmLA0K PiA+ICsJCX0sDQo+ID4gKwkucl9jcl9vdXRfb2Zmc2V0ID0gMHg4MDAwLA0KPiA+ICsJLmdfeV9v dXRfb2Zmc2V0ID0gMHgxMDAwLA0KPiA+ICsJLmJfY2Jfb3V0X29mZnNldCA9IDB4ODAwMCwNCj4g PiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdmlpZl9sMl9zZXRfZm9ybWF0KHN0cnVjdCBj YXBfZGV2ICpjYXBfZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0X21w bGFuZSAqcGl4ID0gJmNhcF9kZXYtPnY0bDJfcGl4Ow0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNl ICp2aWlmX2RldiA9IGNhcF9kZXYtPnZpaWZfZGV2Ow0KPiA+ICsJY29uc3Qgc3RydWN0IGh3ZF92 aWlmX2NzY19wYXJhbSAqY3NjX3BhcmFtID0gTlVMTDsNCj4gPiArCXN0cnVjdCB2NGwyX3N1YmRl dl9zZWxlY3Rpb24gc2VsID0gew0KPiA+ICsJCS50YXJnZXQgPSBWNEwyX1NFTF9UR1RfQ1JPUCwN Cj4gPiArCQkud2hpY2ggPSBWNEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZFLA0KPiA+ICsJfTsNCj4g PiArCXN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgZm10ID0gew0KPiA+ICsJCS53aGljaCA9IFY0 TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUsDQo+ID4gKwl9Ow0KPiA+ICsJYm9vbCBpbnBfaXNfcmdi ID0gZmFsc2U7DQo+ID4gKwlib29sIG91dF9pc19yZ2IgPSBmYWxzZTsNCj4gPiArCXUzMiBwb3N0 aWQ7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCS8qIGNoZWNrIHBhdGggaWQgKi8NCj4g PiArCWlmIChjYXBfZGV2LT5wYXRoaWQgPT0gQ0FQVFVSRV9QQVRIX01BSU5fUE9TVDApIHsNCj4g PiArCQlzZWwucGFkID0gVklJRl9JU1BfUEFEX1NSQ19QQVRIMDsNCj4gPiArCQlmbXQucGFkID0g VklJRl9JU1BfUEFEX1NSQ19QQVRIMDsNCj4gPiArCQlwb3N0aWQgPSBWSUlGX0wySVNQX1BPU1Rf MDsNCj4gPiArCX0gZWxzZSBpZiAoY2FwX2Rldi0+cGF0aGlkID09IENBUFRVUkVfUEFUSF9NQUlO X1BPU1QxKSB7DQo+ID4gKwkJc2VsLnBhZCA9IFZJSUZfSVNQX1BBRF9TUkNfUEFUSDE7DQo+ID4g KwkJZm10LnBhZCA9IFZJSUZfSVNQX1BBRF9TUkNfUEFUSDE7DQo+ID4gKwkJcG9zdGlkID0gVklJ Rl9MMklTUF9QT1NUXzE7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0K PiA+ICsJfQ0KPiA+ICsNCj4gPiArCWNhcF9kZXYtPm91dF9wcm9jZXNzLmhhbGZfc2NhbGUgPSBI V0RfVklJRl9ESVNBQkxFOw0KPiA+ICsJY2FwX2Rldi0+b3V0X3Byb2Nlc3Muc2VsZWN0X2NvbG9y ID0gSFdEX1ZJSUZfQ09MT1JfWVVWX1JHQjsNCj4gPiArCWNhcF9kZXYtPm91dF9wcm9jZXNzLmFs cGhhID0gMDsNCj4gPiArDQo+ID4gKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKCZ2aWlmX2Rldi0+ aXNwX3N1YmRldi5zZCwgcGFkLCBnZXRfc2VsZWN0aW9uLA0KPiBOVUxMLCAmc2VsKTsNCj4gPiAr CWlmIChyZXQpIHsNCj4gPiArCQljYXBfZGV2LT5pbWdfYXJlYS54ID0gMDsNCj4gPiArCQljYXBf ZGV2LT5pbWdfYXJlYS55ID0gMDsNCj4gPiArCQljYXBfZGV2LT5pbWdfYXJlYS53ID0gcGl4LT53 aWR0aDsNCj4gPiArCQljYXBfZGV2LT5pbWdfYXJlYS5oID0gcGl4LT5oZWlnaHQ7DQo+ID4gKwl9 IGVsc2Ugew0KPiA+ICsJCWNhcF9kZXYtPmltZ19hcmVhLnggPSBzZWwuci5sZWZ0Ow0KPiA+ICsJ CWNhcF9kZXYtPmltZ19hcmVhLnkgPSBzZWwuci50b3A7DQo+ID4gKwkJY2FwX2Rldi0+aW1nX2Fy ZWEudyA9IHNlbC5yLndpZHRoOw0KPiA+ICsJCWNhcF9kZXYtPmltZ19hcmVhLmggPSBzZWwuci5o ZWlnaHQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbCgmdmlp Zl9kZXYtPmlzcF9zdWJkZXYuc2QsIHBhZCwgZ2V0X2ZtdCwgTlVMTCwNCj4gJmZtdCk7DQo+ID4g KwlpZiAoIXJldCkNCj4gPiArCQlpbnBfaXNfcmdiID0gKGZtdC5mb3JtYXQuY29kZSA9PQ0KPiBN RURJQV9CVVNfRk1UX1JHQjg4OF8xWDI0KTsNCj4gPiArDQo+ID4gKwlzd2l0Y2ggKHBpeC0+cGl4 ZWxmb3JtYXQpIHsNCj4gPiArCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjI0Og0KPiA+ICsJCWNhcF9k ZXYtPm91dF9mb3JtYXQgPSBIV0RfVklJRl9SR0I4ODhfUEFDS0VEOw0KPiA+ICsJCW91dF9pc19y Z2IgPSB0cnVlOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBWNEwyX1BJWF9GTVRfQUJHUjMy Og0KPiA+ICsJCWNhcF9kZXYtPm91dF9mb3JtYXQgPSBIV0RfVklJRl9BUkdCODg4OF9QQUNLRUQ7 DQo+ID4gKwkJY2FwX2Rldi0+b3V0X3Byb2Nlc3MuYWxwaGEgPSAweGZmOw0KPiA+ICsJCW91dF9p c19yZ2IgPSB0cnVlOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBWNEwyX1BJWF9GTVRfWVVW NDIyTToNCj4gPiArCQljYXBfZGV2LT5vdXRfZm9ybWF0ID0gSFdEX1ZJSUZfWUNCQ1I0MjJfOF9Q TEFOQVI7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0NDRNOg0K PiA+ICsJCWNhcF9kZXYtPm91dF9mb3JtYXQgPQ0KPiBIV0RfVklJRl9SR0I4ODhfWUNCQ1I0NDRf OF9QTEFOQVI7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFY0TDJfUElYX0ZNVF9ZMTY6DQo+ ID4gKwkJY2FwX2Rldi0+b3V0X2Zvcm1hdCA9IEhXRF9WSUlGX09ORV9DT0xPUl8xNjsNCj4gPiAr CQljYXBfZGV2LT5vdXRfcHJvY2Vzcy5zZWxlY3RfY29sb3IgPSBIV0RfVklJRl9DT0xPUl9ZX0c7 DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKCFpbnBfaXNfcmdiICYm IG91dF9pc19yZ2IpDQo+ID4gKwkJY3NjX3BhcmFtID0gJnZpaWZfY3NjX3l1djJyZ2I7IC8qIFlV ViAtPiBSR0IgKi8NCj4gPiArCWVsc2UgaWYgKGlucF9pc19yZ2IgJiYgIW91dF9pc19yZ2IpDQo+ ID4gKwkJY3NjX3BhcmFtID0gJnZpaWZfY3NjX3JnYjJ5dXY7IC8qIFJHQiAtPiBZVVYgKi8NCj4g PiArDQo+ID4gKwlyZXR1cm4gaHdkX3ZpaWZfbDJfc2V0X291dHB1dF9jc2ModmlpZl9kZXYtPmh3 ZF9yZXMsIHBvc3RpZCwNCj4gY3NjX3BhcmFtKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogLS0t IElPQ1RMIE9wZXJhdGlvbnMgLS0tICovDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmlpZl9m bXQgdmlpZl9mbXRfbGlzdFtdID0gew0KPiA+ICsJew0KPiA+ICsJCS5mb3VyY2MgPSBWNEwyX1BJ WF9GTVRfUkdCMjQsDQo+ID4gKwkJLmJwcCA9IHsgMjQsIDAsIDAgfSwNCj4gPiArCQkubnVtX3Bs YW5lcyA9IDEsDQo+ID4gKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwNCj4g PiArCQkucGl0Y2hfYWxpZ24gPSAzODQsDQo+ID4gKwl9LA0KPiA+ICsJew0KPiA+ICsJCS5mb3Vy Y2MgPSBWNEwyX1BJWF9GTVRfQUJHUjMyLA0KPiA+ICsJCS5icHAgPSB7IDMyLCAwLCAwIH0sDQo+ ID4gKwkJLm51bV9wbGFuZXMgPSAxLA0KPiA+ICsJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQ QUNFX1NSR0IsDQo+ID4gKwkJLnBpdGNoX2FsaWduID0gNTEyLA0KPiA+ICsJfSwNCj4gPiArCXsN Cj4gPiArCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX1lVVjQyMk0sDQo+ID4gKwkJLmJwcCA9IHsg OCwgNCwgNCB9LA0KPiA+ICsJCS5udW1fcGxhbmVzID0gMywNCj4gPiArCQkuY29sb3JzcGFjZSA9 IFY0TDJfQ09MT1JTUEFDRV9SRUM3MDksDQo+ID4gKwkJLnBpdGNoX2FsaWduID0gMTI4LA0KPiA+ ICsJfSwNCj4gPiArCXsNCj4gPiArCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX1lVVjQ0NE0sDQo+ ID4gKwkJLmJwcCA9IHsgOCwgOCwgOCB9LA0KPiA+ICsJCS5udW1fcGxhbmVzID0gMywNCj4gPiAr CQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9SRUM3MDksDQo+ID4gKwkJLnBpdGNoX2Fs aWduID0gMTI4LA0KPiA+ICsJfSwNCj4gPiArCXsNCj4gPiArCQkuZm91cmNjID0gVjRMMl9QSVhf Rk1UX1kxNiwNCj4gPiArCQkuYnBwID0geyAxNiwgMCwgMCB9LA0KPiA+ICsJCS5udW1fcGxhbmVz ID0gMSwNCj4gPiArCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9SRUM3MDksDQo+ID4g KwkJLnBpdGNoX2FsaWduID0gMTI4LA0KPiA+ICsJfSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgdmlpZl9mbXQgdmlpZl9yYXdmbXRfbGlzdFtdID0gew0KPiA+ICsJ ew0KPiA+ICsJCS5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfU1JHR0IxMCwNCj4gPiArCQkuYnBwID0g eyAxNiwgMCwgMCB9LA0KPiA+ICsJCS5udW1fcGxhbmVzID0gMSwNCj4gPiArCQkuY29sb3JzcGFj ZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLA0KPiA+ICsJCS5waXRjaF9hbGlnbiA9IDI1NiwNCj4g PiArCX0sDQo+ID4gKwl7DQo+ID4gKwkJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9TUkdHQjEyLA0K PiA+ICsJCS5icHAgPSB7IDE2LCAwLCAwIH0sDQo+ID4gKwkJLm51bV9wbGFuZXMgPSAxLA0KPiA+ ICsJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsDQo+ID4gKwkJLnBpdGNoX2Fs aWduID0gMjU2LA0KPiA+ICsJfSwNCj4gPiArCXsNCj4gPiArCQkuZm91cmNjID0gVjRMMl9QSVhf Rk1UX1NSR0dCMTQsDQo+ID4gKwkJLmJwcCA9IHsgMTYsIDAsIDAgfSwNCj4gPiArCQkubnVtX3Bs YW5lcyA9IDEsDQo+ID4gKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwNCj4g PiArCQkucGl0Y2hfYWxpZ24gPSAyNTYsDQo+ID4gKwl9LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiAr c3RhdGljIGNvbnN0IHN0cnVjdCB2aWlmX2ZtdCAqZ2V0X3ZpaWZfZm10X2Zyb21fZm91cmNjKHVu c2lnbmVkIGludCBmb3VyY2MpDQo+ID4gK3sNCj4gPiArCWNvbnN0IHN0cnVjdCB2aWlmX2ZtdCAq Zm10ID0gJnZpaWZfZm10X2xpc3RbMF07DQo+ID4gKwl1bnNpZ25lZCBpbnQgaTsNCj4gPiArDQo+ ID4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2aWlmX2ZtdF9saXN0KTsgaSsrLCBmbXQr KykNCj4gPiArCQlpZiAoZm10LT5mb3VyY2MgPT0gZm91cmNjKQ0KPiA+ICsJCQlyZXR1cm4gZm10 Ow0KPiA+ICsNCj4gPiArCXJldHVybiBOVUxMOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg dm9pZCB2aWlmX3VwZGF0ZV9wbGFuZV9zaXplcyhzdHJ1Y3QgdjRsMl9wbGFuZV9waXhfZm9ybWF0 ICpwbGFuZSwNCj4gdW5zaWduZWQgaW50IGJwbCwNCj4gPiArCQkJCSAgICB1bnNpZ25lZCBpbnQg c3ppbWFnZSkNCj4gPiArew0KPiA+ICsJbWVtc2V0KHBsYW5lLCAwLCBzaXplb2YoKnBsYW5lKSk7 DQo+ID4gKw0KPiA+ICsJcGxhbmUtPnNpemVpbWFnZSA9IHN6aW1hZ2U7DQo+ID4gKwlwbGFuZS0+ Ynl0ZXNwZXJsaW5lID0gYnBsOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB2aWlm X2NhbGNfcGxhbmVfc2l6ZXMoY29uc3Qgc3RydWN0IHZpaWZfZm10ICp2aWlmX2ZtdCwNCj4gPiAr CQkJCSAgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdF9tcGxhbmUgKnBpeCkNCj4gPiArew0KPiA+ICsJ dW5zaWduZWQgaW50IGksIGJwbCwgc3ppbWFnZTsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBp IDwgdmlpZl9mbXQtPm51bV9wbGFuZXM7IGkrKykgew0KPiA+ICsJCWJwbCA9IHBpeC0+d2lkdGgg KiB2aWlmX2ZtdC0+YnBwW2ldIC8gODsNCj4gPiArCQkvKiByb3VuZCB1cCBwdGNoICovDQo+ID4g KwkJYnBsID0gKGJwbCArICh2aWlmX2ZtdC0+cGl0Y2hfYWxpZ24gLSAxKSkgLyB2aWlmX2ZtdC0+ cGl0Y2hfYWxpZ247DQo+ID4gKwkJYnBsICo9IHZpaWZfZm10LT5waXRjaF9hbGlnbjsNCj4gPiAr CQlzemltYWdlID0gcGl4LT5oZWlnaHQgKiBicGw7DQo+ID4gKwkJdmlpZl91cGRhdGVfcGxhbmVf c2l6ZXMoJnBpeC0+cGxhbmVfZm10W2ldLCBicGwsIHN6aW1hZ2UpOw0KPiA+ICsJfQ0KPiA+ICsJ cGl4LT5udW1fcGxhbmVzID0gdmlpZl9mbXQtPm51bV9wbGFuZXM7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyBpbnQgdmlpZl9xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJp diwgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3Qgdmlp Zl9kZXZpY2UgKnZpaWZfZGV2ID0gdmlkZW9fZHJ2ZGF0YV90b19jYXBkZXYoZmlsZSktPnZpaWZf ZGV2Ow0KPiA+ICsNCj4gPiArCXN0cnNjcHkoY2FwLT5jYXJkLCAiVG9zaGliYSBWSUlGIiwgc2l6 ZW9mKGNhcC0+Y2FyZCkpOw0KPiA+ICsJc3Ryc2NweShjYXAtPmRyaXZlciwgInZpaWYiLCBzaXpl b2YoY2FwLT5kcml2ZXIpKTsNCj4gPiArCXNucHJpbnRmKGNhcC0+YnVzX2luZm8sIHNpemVvZihj YXAtPmJ1c19pbmZvKSwNCj4gInBsYXRmb3JtOnRvc2hpYmEtdmlpZi0lcyIsDQo+ID4gKwkJIGRl dl9uYW1lKHZpaWZfZGV2LT5kZXYpKTsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgaW50IHZpaWZfZW51bV9yYXdmbXQoc3RydWN0IGNhcF9kZXYgKmNhcF9kZXYs IHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpDQo+ID4gK3sNCj4gPiArCWlmIChmLT5pbmRleCA+PSBB UlJBWV9TSVpFKHZpaWZfcmF3Zm10X2xpc3QpKQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ ICsNCj4gPiArCWYtPnBpeGVsZm9ybWF0ID0gdmlpZl9yYXdmbXRfbGlzdFtmLT5pbmRleF0uZm91 cmNjOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW50IHZpaWZfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwg c3RydWN0DQo+IHY0bDJfZm10ZGVzYyAqZikNCj4gPiArew0KPiA+ICsJc3RydWN0IGNhcF9kZXYg KmNhcF9kZXYgPSB2aWRlb19kcnZkYXRhX3RvX2NhcGRldihmaWxlKTsNCj4gPiArCWNvbnN0IHN0 cnVjdCB2aWlmX2ZtdCAqZm10Ow0KPiA+ICsNCj4gPiArCWlmIChjYXBfZGV2LT5wYXRoaWQgPT0g Q0FQVFVSRV9QQVRIX1NVQikNCj4gPiArCQlyZXR1cm4gdmlpZl9lbnVtX3Jhd2ZtdChjYXBfZGV2 LCBmKTsNCj4gPiArDQo+ID4gKwlpZiAoZi0+aW5kZXggPj0gQVJSQVlfU0laRSh2aWlmX2ZtdF9s aXN0KSkNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwlmbXQgPSAmdmlpZl9m bXRfbGlzdFtmLT5pbmRleF07DQo+ID4gKwlmLT5waXhlbGZvcm1hdCA9IGZtdC0+Zm91cmNjOw0K PiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBzaXplIG9mIG1p bmltdW0vbWF4aW11bSBvdXRwdXQgaW1hZ2UgKi8NCj4gPiArI2RlZmluZSBWSUlGX01JTl9PVVRQ VVRfSU1HX1dJRFRIICAgICAoMTI4VSkNCj4gPiArI2RlZmluZSBWSUlGX01BWF9PVVRQVVRfSU1H X1dJRFRIX0lTUCAoNTc2MFUpDQo+ID4gKyNkZWZpbmUgVklJRl9NQVhfT1VUUFVUX0lNR19XSURU SF9TVUIgKDQwOTZVKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBWSUlGX01JTl9PVVRQVVRfSU1HX0hF SUdIVCAgICAgKDEyOFUpDQo+ID4gKyNkZWZpbmUgVklJRl9NQVhfT1VUUFVUX0lNR19IRUlHSFRf SVNQICgzMjQwVSkNCj4gPiArI2RlZmluZSBWSUlGX01BWF9PVVRQVVRfSU1HX0hFSUdIVF9TVUIg KDIxNjBVKQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2aWlmX3RyeV9mbXQoc3RydWN0IGNhcF9k ZXYgKmNhcF9kZXYsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqdjRsMl9mbXQpDQo+ID4gK3sNCj4gPiAr CXN0cnVjdCB2NGwyX3BpeF9mb3JtYXRfbXBsYW5lICpwaXggPSAmdjRsMl9mbXQtPmZtdC5waXhf bXA7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2ID0gY2FwX2Rldi0+dmlpZl9k ZXY7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0IGZvcm1hdCA9IHsNCj4gPiArCQku d2hpY2ggPSBWNEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZFLA0KPiA+ICsJfTsNCj4gPiArCWNvbnN0 IHN0cnVjdCB2aWlmX2ZtdCAqdmlpZl9mbXQ7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiAr CS8qIGNoZWNrIHBhdGggaWQgKi8NCj4gPiArCWlmIChjYXBfZGV2LT5wYXRoaWQgPT0gQ0FQVFVS RV9QQVRIX01BSU5fUE9TVDApDQo+ID4gKwkJZm9ybWF0LnBhZCA9IFZJSUZfSVNQX1BBRF9TUkNf UEFUSDA7DQo+ID4gKwllbHNlIGlmIChjYXBfZGV2LT5wYXRoaWQgPT0gQ0FQVFVSRV9QQVRIX01B SU5fUE9TVDEpDQo+ID4gKwkJZm9ybWF0LnBhZCA9IFZJSUZfSVNQX1BBRF9TUkNfUEFUSDE7DQo+ ID4gKwllbHNlDQo+ID4gKwkJZm9ybWF0LnBhZCA9IFZJSUZfSVNQX1BBRF9TUkNfUEFUSDI7DQo+ ID4gKw0KPiA+ICsJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbCgmdmlpZl9kZXYtPmlzcF9zdWJkZXYu c2QsIHBhZCwgZ2V0X2ZtdCwgTlVMTCwNCj4gJmZvcm1hdCk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArCS8qIGZvdXJjYyBjaGVjayAqLw0KPiA+ ICsJaWYgKGNhcF9kZXYtPnBhdGhpZCA9PSBDQVBUVVJFX1BBVEhfU1VCKSB7DQo+ID4gKwkJc3dp dGNoIChmb3JtYXQuZm9ybWF0LmNvZGUpIHsNCj4gPiArCQljYXNlIE1FRElBX0JVU19GTVRfU1JH R0IxMF8xWDEwOg0KPiA+ICsJCWNhc2UgTUVESUFfQlVTX0ZNVF9TR1JCRzEwXzFYMTA6DQo+ID4g KwkJY2FzZSBNRURJQV9CVVNfRk1UX1NHQlJHMTBfMVgxMDoNCj4gPiArCQljYXNlIE1FRElBX0JV U19GTVRfU0JHR1IxMF8xWDEwOg0KPiA+ICsJCQl2aWlmX2ZtdCA9ICZ2aWlmX3Jhd2ZtdF9saXN0 WzBdOw0KPiAvKlY0TDJfUElYX0ZNVF9TUkdHQjEwKi8NCj4gPiArCQkJcGl4LT5waXhlbGZvcm1h dCA9IHZpaWZfZm10LT5mb3VyY2M7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWNhc2UgTUVESUFf QlVTX0ZNVF9TUkdHQjEyXzFYMTI6DQo+ID4gKwkJY2FzZSBNRURJQV9CVVNfRk1UX1NHUkJHMTJf MVgxMjoNCj4gPiArCQljYXNlIE1FRElBX0JVU19GTVRfU0dCUkcxMl8xWDEyOg0KPiA+ICsJCWNh c2UgTUVESUFfQlVTX0ZNVF9TQkdHUjEyXzFYMTI6DQo+ID4gKwkJCXZpaWZfZm10ID0gJnZpaWZf cmF3Zm10X2xpc3RbMV07DQo+IC8qVjRMMl9QSVhfRk1UX1NSR0dCMTIqLw0KPiA+ICsJCQlwaXgt PnBpeGVsZm9ybWF0ID0gdmlpZl9mbXQtPmZvdXJjYzsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJ Y2FzZSBNRURJQV9CVVNfRk1UX1NSR0dCMTRfMVgxNDoNCj4gPiArCQljYXNlIE1FRElBX0JVU19G TVRfU0dSQkcxNF8xWDE0Og0KPiA+ICsJCWNhc2UgTUVESUFfQlVTX0ZNVF9TR0JSRzE0XzFYMTQ6 DQo+ID4gKwkJY2FzZSBNRURJQV9CVVNfRk1UX1NCR0dSMTRfMVgxNDoNCj4gPiArCQkJdmlpZl9m bXQgPSAmdmlpZl9yYXdmbXRfbGlzdFsyXTsNCj4gLypWNEwyX1BJWF9GTVRfU1JHR0IxNCovDQo+ ID4gKwkJCXBpeC0+cGl4ZWxmb3JtYXQgPSB2aWlmX2ZtdC0+Zm91cmNjOw0KPiA+ICsJCQlicmVh azsNCj4gPiArCQlkZWZhdWx0Og0KPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCQl9DQo+ ID4gKwl9IGVsc2Ugew0KPiA+ICsJCXZpaWZfZm10ID0gZ2V0X3ZpaWZfZm10X2Zyb21fZm91cmNj KHBpeC0+cGl4ZWxmb3JtYXQpOw0KPiA+ICsJCWlmICghdmlpZl9mbXQpDQo+ID4gKwkJCXJldHVy biAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIG1pbi9tYXggd2lkdGgsIGhlaWdo dCBjaGVjayAqLw0KPiA+ICsJaWYgKHBpeC0+d2lkdGggPCBWSUlGX01JTl9PVVRQVVRfSU1HX1dJ RFRIKQ0KPiA+ICsJCXBpeC0+d2lkdGggPSBWSUlGX01JTl9PVVRQVVRfSU1HX1dJRFRIOw0KPiA+ ICsNCj4gPiArCWlmIChwaXgtPndpZHRoID4gVklJRl9NQVhfT1VUUFVUX0lNR19XSURUSF9JU1Ap DQo+ID4gKwkJcGl4LT53aWR0aCA9IFZJSUZfTUFYX09VVFBVVF9JTUdfV0lEVEhfSVNQOw0KPiA+ ICsNCj4gPiArCWlmIChwaXgtPmhlaWdodCA8IFZJSUZfTUlOX09VVFBVVF9JTUdfSEVJR0hUKQ0K PiA+ICsJCXBpeC0+aGVpZ2h0ID0gVklJRl9NSU5fT1VUUFVUX0lNR19IRUlHSFQ7DQo+ID4gKw0K PiA+ICsJaWYgKHBpeC0+aGVpZ2h0ID4gVklJRl9NQVhfT1VUUFVUX0lNR19IRUlHSFRfSVNQKQ0K PiA+ICsJCXBpeC0+aGVpZ2h0ID0gVklJRl9NQVhfT1VUUFVUX0lNR19IRUlHSFRfSVNQOw0KPiA+ ICsNCj4gPiArCS8qIGNvbnNpc3RlbmN5IHdpdGggaXNwOjpwYWQ6OnNyYzo6Zm10ICovDQo+ID4g KwlpZiAocGl4LT53aWR0aCAhPSBmb3JtYXQuZm9ybWF0LndpZHRoKQ0KPiA+ICsJCXJldHVybiAt RUlOVkFMOw0KPiA+ICsJaWYgKHBpeC0+aGVpZ2h0ICE9IGZvcm1hdC5mb3JtYXQuaGVpZ2h0KQ0K PiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArCS8qIHVwZGF0ZSBkZXJpdmVkIHBh cmFtZXRlcnMsIHN1Y2ggYXMgYnBwICovDQo+ID4gKwl2aWlmX2NhbGNfcGxhbmVfc2l6ZXModmlp Zl9mbXQsIHBpeCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBpbnQgdmlpZl90cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQg KnByaXYsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikNCj4gPiArew0KPiA+ICsJc3RydWN0IGNhcF9k ZXYgKmNhcF9kZXYgPSB2aWRlb19kcnZkYXRhX3RvX2NhcGRldihmaWxlKTsNCj4gPiArDQo+ID4g KwlyZXR1cm4gdmlpZl90cnlfZm10KGNhcF9kZXYsIGYpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgaW50IHZpaWZfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJp diwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgY2FwX2RldiAq Y2FwX2RldiA9IHZpZGVvX2RydmRhdGFfdG9fY2FwZGV2KGZpbGUpOw0KPiA+ICsJc3RydWN0IHZp aWZfZGV2aWNlICp2aWlmX2RldiA9IGNhcF9kZXYtPnZpaWZfZGV2Ow0KPiA+ICsJaW50IHJldCA9 IDA7DQo+ID4gKw0KPiA+ICsJaWYgKHZiMl9pc19zdHJlYW1pbmcoJmNhcF9kZXYtPnZiMl92cSkp DQo+IA0KPiBUaGF0IHNob3VsZCBiZSB2YjJfaXNfYnVzeSgpLiBPbmNlIGJ1ZmZlcnMgYXJlIGFs bG9jYXRlZCwgeW91IGNhbiBubyBsb25nZXINCj4gY2hhbmdlIHRoZSBmb3JtYXQgc2luY2UgdGhh dCB3b3VsZCBjaGFuZ2UgdGhlIGJ1ZmZlciBzaXplIGFzIHdlbGwuDQoNCkknbGwgdXNlIHZiMl9p c19idXN5Lg0KDQo+ID4gKwkJcmV0dXJuIC1FQlVTWTsNCj4gPiArDQo+ID4gKwlpZiAoZi0+dHlw ZSAhPSBjYXBfZGV2LT52YjJfdnEudHlwZSkNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiAr DQo+ID4gKwlyZXQgPSB2aWlmX3RyeV9mbXQoY2FwX2RldiwgZik7DQo+ID4gKwlpZiAocmV0KQ0K PiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJaWYgKGNhcF9kZXYtPnBhdGhpZCA9PSBD QVBUVVJFX1BBVEhfTUFJTl9QT1NUMCkgew0KPiA+ICsJCS8qDQo+ID4gKwkJICogQSBjYWxsIHRv IG1haW5fc2V0X3VuaXQoKSBpcyBjdXJyZW50bHkgYXQgaW9jdGwoVklESU9DX1NfRk1UKQ0KPiBj b250ZXh0Lg0KPiA+ICsJCSAqIFRoaXMgY2FsbCBjYW4gYmUgbW92ZWQgdG8gdmlpZl9pc3Bfc19z dHJlYW0oKSwNCj4gPiArCQkgKiBpZiB5b3UgZG9uJ3Qgd2FudCB0byBjaGVjayB0aGUgZ2l2ZW4g Zm9ybWF0IGlzIGNvbXBhdGlibGUgdG8NCj4gSFcuDQo+ID4gKwkJICovDQo+ID4gKwkJcmV0ID0g dmlzY29udGlfdmlpZl9pc3BfbWFpbl9zZXRfdW5pdCh2aWlmX2Rldik7DQo+ID4gKwkJaWYgKHJl dCkNCj4gPiArCQkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwljYXBfZGV2LT52 NGwyX3BpeCA9IGYtPmZtdC5waXhfbXA7DQo+ID4gKwljYXBfZGV2LT5maWVsZCA9IFY0TDJfRklF TERfTk9ORTsNCj4gPiArDQo+ID4gKwlpZiAoY2FwX2Rldi0+cGF0aGlkID09IENBUFRVUkVfUEFU SF9TVUIpIHsNCj4gPiArCQljYXBfZGV2LT5vdXRfZm9ybWF0ID0gSFdEX1ZJSUZfT05FX0NPTE9S XzE2Ow0KPiA+ICsJCXJldCA9IHZpc2NvbnRpX3ZpaWZfaXNwX3N1Yl9zZXRfdW5pdCh2aWlmX2Rl dik7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCXJldCA9IHZpaWZfbDJfc2V0X2Zvcm1hdChjYXBf ZGV2KTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgaW50IHZpaWZfZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9p ZCAqcHJpdiwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgY2Fw X2RldiAqY2FwX2RldiA9IHZpZGVvX2RydmRhdGFfdG9fY2FwZGV2KGZpbGUpOw0KPiA+ICsNCj4g PiArCWYtPmZtdC5waXhfbXAgPSBjYXBfZGV2LT52NGwyX3BpeDsNCj4gPiArDQo+ID4gKwlyZXR1 cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2aWlmX2VudW1faW5wdXQoc3Ry dWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2lucHV0ICppbnApDQo+ID4g K3sNCj4gPiArCXN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYgPSB2aWRlb19kcnZkYXRhX3Rv X2NhcGRldihmaWxlKS0+dmlpZl9kZXY7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9zdWJkZXYgKnZpaWZf c2Q7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnY0bDJfc2Q7DQo+ID4gKwlpbnQgcmV0Ow0K PiA+ICsNCj4gPiArCWlmIChpbnAtPmluZGV4ID49IHZpaWZfZGV2LT5udW1fc2QpDQo+ID4gKwkJ cmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJdmlpZl9zZCA9ICZ2aWlmX2Rldi0+c3ViZGV2 c1tpbnAtPmluZGV4XTsNCj4gPiArCXY0bDJfc2QgPSB2aWlmX3NkLT52NGwyX3NkOw0KPiA+ICsN Cj4gPiArCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwodjRsMl9zZCwgdmlkZW8sIGdfaW5wdXRfc3Rh dHVzLCAmaW5wLT5zdGF0dXMpOw0KPiA+ICsJaWYgKHJldCA8IDAgJiYgcmV0ICE9IC1FTk9JT0NU TENNRCAmJiByZXQgIT0gLUVOT0RFVikNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJaW5wLT50 eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsNCj4gPiArCWlucC0+c3RkID0gMDsNCj4gPiAr CWlmICh2NGwyX3N1YmRldl9oYXNfb3AodjRsMl9zZCwgcGFkLCBkdl90aW1pbmdzX2NhcCkpDQo+ ID4gKwkJaW5wLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0lOX0NBUF9EVl9USU1JTkdTOw0KPiA+ICsJ ZWxzZQ0KPiA+ICsJCWlucC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9JTl9DQVBfU1REOw0KPiA+ICsJ c25wcmludGYoaW5wLT5uYW1lLCBzaXplb2YoaW5wLT5uYW1lKSwgIkNhbWVyYSV1OiAlcyIsIGlu cC0+aW5kZXgsDQo+IHZpaWZfc2QtPnY0bDJfc2QtPm5hbWUpOw0KPiA+ICsNCj4gPiArCXJldHVy biAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZpaWZfZ19pbnB1dChzdHJ1Y3Qg ZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQ0KPiA+ICt7DQo+ID4gKwlz dHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2ID0gdmlkZW9fZHJ2ZGF0YV90b19jYXBkZXYoZmls ZSktPnZpaWZfZGV2Ow0KPiA+ICsNCj4gPiArCSppID0gdmlpZl9kZXYtPnNkX2luZGV4Ow0KPiA+ ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZpaWZf c19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpDQo+ ID4gK3sNCj4gPiArCXN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYgPSB2aWRlb19kcnZkYXRh X3RvX2NhcGRldihmaWxlKS0+dmlpZl9kZXY7DQo+ID4gKw0KPiA+ICsJaWYgKGkgPj0gdmlpZl9k ZXYtPm51bV9zZCkNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwlyZXR1cm4g MDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2aWlmX2dfc2VsZWN0aW9uKHN0cnVj dCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9zZWxlY3Rpb24gKnMpDQo+ID4g K3sNCj4gPiArCXN0cnVjdCBjYXBfZGV2ICpjYXBfZGV2ID0gdmlkZW9fZHJ2ZGF0YV90b19jYXBk ZXYoZmlsZSk7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2ID0gY2FwX2Rldi0+ dmlpZl9kZXY7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXZfc2VsZWN0aW9uIHNlbCA9IHsNCj4g PiArCQkudGFyZ2V0ID0gVjRMMl9TRUxfVEdUX0NST1AsDQo+ID4gKwkJLndoaWNoID0gVjRMMl9T VUJERVZfRk9STUFUX0FDVElWRSwNCj4gPiArCX07DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4g DQo+IFRoaXMgaXMgbWlzc2luZyB2YWxpZGF0aW9uIGNoZWNrcyBmb3Igcy0+dHlwZSBhbmQgcy0+ dGFyZ2V0Lg0KDQpJJ2xsIGFkZCB2YWxpZGF0aW9uIGNvZGUuDQoNCj4gSSd2ZSBwcmV0dHkgc3Vy ZSB5b3UgZGlkbid0IHJ1biB0aGUgdjRsMi1jb21wbGlhbmNlIHV0aWxpdHk6IHRoYXQgd291bGQg aGF2ZQ0KPiBmYWlsZWQgb24gdGhpcy4NCg0KU29ycnkgSSBkaWRuJ3Qga25vdyB0aGUgdXRpbGl0 eS4NCkknbGwgYXBwbHkgaXQuDQoNCj4gPiArCS8qIGNoZWNrIHBhdGggaWQgKi8NCj4gPiArCWlm IChjYXBfZGV2LT5wYXRoaWQgPT0gQ0FQVFVSRV9QQVRIX01BSU5fUE9TVDApDQo+ID4gKwkJc2Vs LnBhZCA9IFZJSUZfSVNQX1BBRF9TUkNfUEFUSDA7DQo+ID4gKwllbHNlIGlmIChjYXBfZGV2LT5w YXRoaWQgPT0gQ0FQVFVSRV9QQVRIX01BSU5fUE9TVDEpDQo+ID4gKwkJc2VsLnBhZCA9IFZJSUZf SVNQX1BBRF9TUkNfUEFUSDE7DQo+ID4gKwllbHNlDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ ID4gKw0KPiA+ICsJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbCgmdmlpZl9kZXYtPmlzcF9zdWJkZXYu c2QsIHBhZCwgZ2V0X3NlbGVjdGlvbiwNCj4gTlVMTCwgJnNlbCk7DQo+ID4gKwlzLT5yID0gc2Vs LnI7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IGludCB2aWlmX3Nfc2VsZWN0aW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1 Y3QgdjRsMl9zZWxlY3Rpb24gKnMpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBjYXBfZGV2ICpjYXBf ZGV2ID0gdmlkZW9fZHJ2ZGF0YV90b19jYXBkZXYoZmlsZSk7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9k ZXZpY2UgKnZpaWZfZGV2ID0gY2FwX2Rldi0+dmlpZl9kZXY7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9z dWJkZXZfc2VsZWN0aW9uIHNlbCA9IHsNCj4gPiArCQkudGFyZ2V0ID0gVjRMMl9TRUxfVEdUX0NS T1AsDQo+ID4gKwkJLndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRSwNCj4gPiArCQku ciA9IHMtPnIsDQo+ID4gKwl9Ow0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+IA0KPiBTYW1lIGFz IGFib3ZlLg0KDQpJJ2xsIGFkZCB2YWxpZGF0aW9uIGNvZGUuDQoNCj4gPiArCS8qIGNoZWNrIHBh dGggaWQgKi8NCj4gPiArCWlmIChjYXBfZGV2LT5wYXRoaWQgPT0gQ0FQVFVSRV9QQVRIX01BSU5f UE9TVDApDQo+ID4gKwkJc2VsLnBhZCA9IFZJSUZfSVNQX1BBRF9TUkNfUEFUSDA7DQo+ID4gKwll bHNlIGlmIChjYXBfZGV2LT5wYXRoaWQgPT0gQ0FQVFVSRV9QQVRIX01BSU5fUE9TVDEpDQo+ID4g KwkJc2VsLnBhZCA9IFZJSUZfSVNQX1BBRF9TUkNfUEFUSDE7DQo+ID4gKwllbHNlDQo+ID4gKwkJ cmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJaWYgKHMtPnIubGVmdCA+IFZJSUZfQ1JPUF9N QVhfWF9JU1AgfHwgcy0+ci50b3AgPg0KPiBWSUlGX0NST1BfTUFYX1lfSVNQIHx8DQo+ID4gKwkg ICAgcy0+ci53aWR0aCA8IFZJSUZfQ1JPUF9NSU5fVyB8fCBzLT5yLndpZHRoID4NCj4gVklJRl9D Uk9QX01BWF9XX0lTUCB8fA0KPiA+ICsJICAgIHMtPnIuaGVpZ2h0IDwgVklJRl9DUk9QX01JTl9I IHx8IHMtPnIuaGVpZ2h0ID4NCj4gVklJRl9DUk9QX01BWF9IX0lTUCkgew0KPiA+ICsJCXJldHVy biAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwo JnZpaWZfZGV2LT5pc3Bfc3ViZGV2LnNkLCBwYWQsIHNldF9zZWxlY3Rpb24sDQo+IE5VTEwsICZz ZWwpOw0KPiA+ICsJcy0+ciA9IHNlbC5yOw0KPiA+ICsNCj4gPiArCXJldHVybiByZXQ7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdmlpZl9kdl90aW1pbmdzX2NhcChzdHJ1Y3QgZmls ZSAqZmlsZSwgdm9pZCAqcHJpdl9maCwgc3RydWN0DQo+IHY0bDJfZHZfdGltaW5nc19jYXAgKmNh cCkNCj4gPiArew0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldiA9IHZpZGVvX2Ry dmRhdGFfdG9fY2FwZGV2KGZpbGUpLT52aWlmX2RldjsNCj4gPiArCXN0cnVjdCB2aWlmX3N1YmRl diAqdmlpZl9zZCA9IHZpaWZfZGV2LT5zZDsNCj4gPiArDQo+ID4gKwlyZXR1cm4gdjRsMl9zdWJk ZXZfY2FsbCh2aWlmX3NkLT52NGwyX3NkLCBwYWQsIGR2X3RpbWluZ3NfY2FwLCBjYXApOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZpaWZfZW51bV9kdl90aW1pbmdzKHN0cnVjdCBm aWxlICpmaWxlLCB2b2lkICpwcml2X2ZoLA0KPiA+ICsJCQkJc3RydWN0IHY0bDJfZW51bV9kdl90 aW1pbmdzICp0aW1pbmdzKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZf ZGV2ID0gdmlkZW9fZHJ2ZGF0YV90b19jYXBkZXYoZmlsZSktPnZpaWZfZGV2Ow0KPiA+ICsJc3Ry dWN0IHZpaWZfc3ViZGV2ICp2aWlmX3NkID0gdmlpZl9kZXYtPnNkOw0KPiA+ICsNCj4gPiArCXJl dHVybiB2NGwyX3N1YmRldl9jYWxsKHZpaWZfc2QtPnY0bDJfc2QsIHBhZCwgZW51bV9kdl90aW1p bmdzLA0KPiB0aW1pbmdzKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2aWlmX2df ZHZfdGltaW5ncyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdl9maCwgc3RydWN0DQo+IHY0 bDJfZHZfdGltaW5ncyAqdGltaW5ncykNCj4gPiArew0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNl ICp2aWlmX2RldiA9IHZpZGVvX2RydmRhdGFfdG9fY2FwZGV2KGZpbGUpLT52aWlmX2RldjsNCj4g PiArCXN0cnVjdCB2aWlmX3N1YmRldiAqdmlpZl9zZCA9IHZpaWZfZGV2LT5zZDsNCj4gPiArDQo+ ID4gKwlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbCh2aWlmX3NkLT52NGwyX3NkLCB2aWRlbywgZ19k dl90aW1pbmdzLCB0aW1pbmdzKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2aWlm X3NfZHZfdGltaW5ncyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdl9maCwgc3RydWN0DQo+ IHY0bDJfZHZfdGltaW5ncyAqdGltaW5ncykNCj4gPiArew0KPiA+ICsJc3RydWN0IHZpaWZfZGV2 aWNlICp2aWlmX2RldiA9IHZpZGVvX2RydmRhdGFfdG9fY2FwZGV2KGZpbGUpLT52aWlmX2RldjsN Cj4gPiArCXN0cnVjdCB2aWlmX3N1YmRldiAqdmlpZl9zZCA9IHZpaWZfZGV2LT5zZDsNCj4gPiAr DQo+ID4gKwlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbCh2aWlmX3NkLT52NGwyX3NkLCB2aWRlbywg c19kdl90aW1pbmdzLCB0aW1pbmdzKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2 aWlmX3F1ZXJ5X2R2X3RpbWluZ3Moc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXZfZmgsIHN0 cnVjdA0KPiB2NGwyX2R2X3RpbWluZ3MgKnRpbWluZ3MpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB2 aWlmX2RldmljZSAqdmlpZl9kZXYgPSB2aWRlb19kcnZkYXRhX3RvX2NhcGRldihmaWxlKS0+dmlp Zl9kZXY7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9zdWJkZXYgKnZpaWZfc2QgPSB2aWlmX2Rldi0+c2Q7 DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwodmlpZl9zZC0+djRsMl9zZCwg dmlkZW8sIHF1ZXJ5X2R2X3RpbWluZ3MsDQo+IHRpbWluZ3MpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgaW50IHZpaWZfZ19lZGlkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3Ry dWN0IHY0bDJfZWRpZCAqZWRpZCkNCj4gPiArew0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNlICp2 aWlmX2RldiA9IHZpZGVvX2RydmRhdGFfdG9fY2FwZGV2KGZpbGUpLT52aWlmX2RldjsNCj4gPiAr CXN0cnVjdCB2aWlmX3N1YmRldiAqdmlpZl9zZCA9IHZpaWZfZGV2LT5zZDsNCj4gPiArDQo+ID4g KwlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbCh2aWlmX3NkLT52NGwyX3NkLCBwYWQsIGdldF9lZGlk LCBlZGlkKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2aWlmX3NfZWRpZChzdHJ1 Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2VkaWQgKmVkaWQpDQo+ID4gK3sN Cj4gPiArCXN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYgPSB2aWRlb19kcnZkYXRhX3RvX2Nh cGRldihmaWxlKS0+dmlpZl9kZXY7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9zdWJkZXYgKnZpaWZfc2Qg PSB2aWlmX2Rldi0+c2Q7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwodmlp Zl9zZC0+djRsMl9zZCwgcGFkLCBzZXRfZWRpZCwgZWRpZCk7DQo+ID4gK30NCj4gDQo+IEhhcyB0 aGlzIGRyaXZlciBiZWVuIHRlc3RlZCB3aXRoIGFuIEhETUkgcmVjZWl2ZXI/IElmIG5vdCwgdGhl biBJIHdvdWxkDQo+IHJlY29tbWVuZA0KPiBkcm9wcGluZyBzdXBwb3J0IGZvciBpdCB1bnRpbCB5 b3UgYWN0dWFsbHkgY2FuIHRlc3Qgd2l0aCBzdWNoIGhhcmR3YXJlLg0KPiANCj4gVGhlIERWX1RJ TUlOR1MgQVBJIGlzIGZvciBIRE1JL0RWSS9EaXNwbGF5UG9ydCBldGMuIGludGVyZmFjZXMsIGl0 J3Mgbm90DQo+IG1lYW50DQo+IGZvciBDU0kgYW5kIHNpbWlsYXIgaW50ZXJmYWNlcy4NCg0KQXMg aW4gbXkgcHJldmlvdXMgcmVwbHkgKGZvciBjb21tZW50cyBmcm9tIExhdXJlbnQpIGZvciBwYXRj aCA0LzUsDQp0aGVzZSBpb2N0bCBmdW5jdGlvbnMgd2lsbCBiZSByZW1vdmVkIChiZWNhdXNlIHY0 bDJfc3ViZGV2X2NhbGwgc2hvdWxkIG5vdCBiZSB1c2VkIGluIHRoaXMgY29udGV4dCkuDQoNCkN1 cnJlbnRseSwgdGhpcyBkcml2ZXIgaXMgbm90IHRlc3RlZCB3aXRoIEhETUkgcmVjZWl2ZXINCmFs dGhvdWdoIGFuIGV2YWx1YXRpb24gYm9hcmQgaGFzIGEgY2lyY3VpdC4NCkknbGwgcmVtb3ZlIEhE TUkgc3VwcG9ydCBmb3IgdGhpcyBwYXRjaCBzdWJtaXNzaW9uLg0KDQo+ID4gKw0KPiA+ICtzdGF0 aWMgaW50IHZpaWZfZ19wYXJtKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0 bDJfc3RyZWFtcGFybSAqYSkNCj4gPiArew0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNlICp2aWlm X2RldiA9IHZpZGVvX2RydmRhdGFfdG9fY2FwZGV2KGZpbGUpLT52aWlmX2RldjsNCj4gPiArDQo+ ID4gKwlyZXR1cm4gdjRsMl9nX3Bhcm1fY2FwKHZpZGVvX2RldmRhdGEoZmlsZSksIHZpaWZfZGV2 LT5zZC0+djRsMl9zZCwgYSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdmlpZl9z X3Bhcm0oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJt ICphKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2ID0gdmlkZW9f ZHJ2ZGF0YV90b19jYXBkZXYoZmlsZSktPnZpaWZfZGV2Ow0KPiA+ICsNCj4gPiArCXJldHVybiB2 NGwyX3NfcGFybV9jYXAodmlkZW9fZGV2ZGF0YShmaWxlKSwgdmlpZl9kZXYtPnNkLT52NGwyX3Nk LCBhKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2aWlmX2VudW1fZnJhbWVzaXpl cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdA0KPiB2NGwyX2ZybXNpemVlbnVt ICpmc2l6ZSkNCj4gPiArew0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldiA9IHZp ZGVvX2RydmRhdGFfdG9fY2FwZGV2KGZpbGUpLT52aWlmX2RldjsNCj4gPiArCXN0cnVjdCB2aWlm X3N1YmRldiAqdmlpZl9zZCA9IHZpaWZfZGV2LT5zZDsNCj4gPiArCXN0cnVjdCB2NGwyX3N1YmRl diAqdjRsMl9zZCA9IHZpaWZfc2QtPnY0bDJfc2Q7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXZf ZnJhbWVfc2l6ZV9lbnVtIGZzZSA9IHsNCj4gPiArCQkuY29kZSA9IHZpaWZfc2QtPm1idXNfY29k ZSwNCj4gPiArCQkuaW5kZXggPSBmc2l6ZS0+aW5kZXgsDQo+ID4gKwkJLndoaWNoID0gVjRMMl9T VUJERVZfRk9STUFUX0FDVElWRSwNCj4gPiArCX07DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4g PiArCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwodjRsMl9zZCwgcGFkLCBlbnVtX2ZyYW1lX3NpemUs IE5VTEwsICZmc2UpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsN Cj4gPiArCWZzaXplLT50eXBlID0gVjRMMl9GUk1TSVpFX1RZUEVfRElTQ1JFVEU7DQo+ID4gKwlm c2l6ZS0+ZGlzY3JldGUud2lkdGggPSBmc2UubWF4X3dpZHRoOw0KPiA+ICsJZnNpemUtPmRpc2Ny ZXRlLmhlaWdodCA9IGZzZS5tYXhfaGVpZ2h0Ow0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZpaWZfZW51bV9mcmFtZWludGVydmFscyhzdHJ1 Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdA0KPiB2NGwyX2ZybWl2YWxlbnVtICpmaXZh bCkNCj4gPiArew0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldiA9IHZpZGVvX2Ry dmRhdGFfdG9fY2FwZGV2KGZpbGUpLT52aWlmX2RldjsNCj4gPiArCXN0cnVjdCB2aWlmX3N1YmRl diAqdmlpZl9zZCA9IHZpaWZfZGV2LT5zZDsNCj4gPiArCXN0cnVjdCB2NGwyX3N1YmRldiAqdjRs Ml9zZCA9IHZpaWZfc2QtPnY0bDJfc2Q7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXZfZnJhbWVf aW50ZXJ2YWxfZW51bSBmaWUgPSB7DQo+ID4gKwkJLmNvZGUgPSB2aWlmX3NkLT5tYnVzX2NvZGUs DQo+ID4gKwkJLmluZGV4ID0gZml2YWwtPmluZGV4LA0KPiA+ICsJCS53aWR0aCA9IGZpdmFsLT53 aWR0aCwNCj4gPiArCQkuaGVpZ2h0ID0gZml2YWwtPmhlaWdodCwNCj4gPiArCQkud2hpY2ggPSBW NEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZFLA0KPiA+ICsJfTsNCj4gPiArCWludCByZXQ7DQo+ID4g Kw0KPiA+ICsJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbCh2NGwyX3NkLCBwYWQsIGVudW1fZnJhbWVf aW50ZXJ2YWwsIE5VTEwsICZmaWUpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1cm4gcmV0 Ow0KPiA+ICsNCj4gPiArCWZpdmFsLT50eXBlID0gVjRMMl9GUk1JVkFMX1RZUEVfRElTQ1JFVEU7 DQo+ID4gKwlmaXZhbC0+ZGlzY3JldGUgPSBmaWUuaW50ZXJ2YWw7DQo+ID4gKw0KPiA+ICsJcmV0 dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0 bF9vcHMgdmlpZl9pb2N0bF9vcHMgPSB7DQo+ID4gKwkudmlkaW9jX3F1ZXJ5Y2FwID0gdmlpZl9x dWVyeWNhcCwNCj4gPiArDQo+ID4gKwkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgPSB2aWlmX2Vu dW1fZm10X3ZpZF9jYXAsDQo+ID4gKwkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcF9tcGxhbmUgPSB2 aWlmX3RyeV9mbXRfdmlkX2NhcCwNCj4gPiArCS52aWRpb2Nfc19mbXRfdmlkX2NhcF9tcGxhbmUg PSB2aWlmX3NfZm10X3ZpZF9jYXAsDQo+ID4gKwkudmlkaW9jX2dfZm10X3ZpZF9jYXBfbXBsYW5l ID0gdmlpZl9nX2ZtdF92aWRfY2FwLA0KPiA+ICsNCj4gPiArCS52aWRpb2NfZW51bV9pbnB1dCA9 IHZpaWZfZW51bV9pbnB1dCwNCj4gPiArCS52aWRpb2NfZ19pbnB1dCA9IHZpaWZfZ19pbnB1dCwN Cj4gPiArCS52aWRpb2Nfc19pbnB1dCA9IHZpaWZfc19pbnB1dCwNCj4gPiArDQo+ID4gKwkudmlk aW9jX2dfc2VsZWN0aW9uID0gdmlpZl9nX3NlbGVjdGlvbiwNCj4gPiArCS52aWRpb2Nfc19zZWxl Y3Rpb24gPSB2aWlmX3Nfc2VsZWN0aW9uLA0KPiA+ICsNCj4gPiArCS52aWRpb2NfZHZfdGltaW5n c19jYXAgPSB2aWlmX2R2X3RpbWluZ3NfY2FwLA0KPiA+ICsJLnZpZGlvY19lbnVtX2R2X3RpbWlu Z3MgPSB2aWlmX2VudW1fZHZfdGltaW5ncywNCj4gPiArCS52aWRpb2NfZ19kdl90aW1pbmdzID0g dmlpZl9nX2R2X3RpbWluZ3MsDQo+ID4gKwkudmlkaW9jX3NfZHZfdGltaW5ncyA9IHZpaWZfc19k dl90aW1pbmdzLA0KPiA+ICsJLnZpZGlvY19xdWVyeV9kdl90aW1pbmdzID0gdmlpZl9xdWVyeV9k dl90aW1pbmdzLA0KPiA+ICsNCj4gPiArCS52aWRpb2NfZ19lZGlkID0gdmlpZl9nX2VkaWQsDQo+ ID4gKwkudmlkaW9jX3NfZWRpZCA9IHZpaWZfc19lZGlkLA0KPiA+ICsNCj4gPiArCS52aWRpb2Nf Z19wYXJtID0gdmlpZl9nX3Bhcm0sDQo+ID4gKwkudmlkaW9jX3NfcGFybSA9IHZpaWZfc19wYXJt LA0KPiA+ICsNCj4gPiArCS52aWRpb2NfZW51bV9mcmFtZXNpemVzID0gdmlpZl9lbnVtX2ZyYW1l c2l6ZXMsDQo+ID4gKwkudmlkaW9jX2VudW1fZnJhbWVpbnRlcnZhbHMgPSB2aWlmX2VudW1fZnJh bWVpbnRlcnZhbHMsDQo+ID4gKw0KPiA+ICsJLnZpZGlvY19yZXFidWZzID0gdmIyX2lvY3RsX3Jl cWJ1ZnMsDQo+ID4gKwkudmlkaW9jX3F1ZXJ5YnVmID0gdmIyX2lvY3RsX3F1ZXJ5YnVmLA0KPiA+ ICsJLnZpZGlvY19xYnVmID0gdmIyX2lvY3RsX3FidWYsDQo+ID4gKwkudmlkaW9jX2V4cGJ1ZiA9 IHZiMl9pb2N0bF9leHBidWYsDQo+ID4gKwkudmlkaW9jX2RxYnVmID0gdmIyX2lvY3RsX2RxYnVm LA0KPiA+ICsJLnZpZGlvY19jcmVhdGVfYnVmcyA9IHZiMl9pb2N0bF9jcmVhdGVfYnVmcywNCj4g PiArCS52aWRpb2NfcHJlcGFyZV9idWYgPSB2YjJfaW9jdGxfcHJlcGFyZV9idWYsDQo+ID4gKwku dmlkaW9jX3N0cmVhbW9uID0gdmIyX2lvY3RsX3N0cmVhbW9uLA0KPiA+ICsJLnZpZGlvY19zdHJl YW1vZmYgPSB2YjJfaW9jdGxfc3RyZWFtb2ZmLA0KPiA+ICsNCj4gPiArCS52aWRpb2NfbG9nX3N0 YXR1cyA9IHY0bDJfY3RybF9sb2dfc3RhdHVzLA0KPiA+ICsJLnZpZGlvY19zdWJzY3JpYmVfZXZl bnQgPSB2NGwyX2N0cmxfc3Vic2NyaWJlX2V2ZW50LA0KPiA+ICsJLnZpZGlvY191bnN1YnNjcmli ZV9ldmVudCA9IHY0bDJfZXZlbnRfdW5zdWJzY3JpYmUsDQo+ID4gK307DQo+ID4gKw0KPiA+ICsv KiAtLS0gRmlsZSBPcGVyYXRpb25zIC0tLSAqLw0KPiA+ICtzdGF0aWMgaW50IHZpaWZfY2FwdHVy ZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgY2FwX2RldiAq Y2FwX2RldiA9IHZpZGVvX2RydmRhdGFfdG9fY2FwZGV2KGZpbGUpOw0KPiA+ICsJc3RydWN0IHZp aWZfZGV2aWNlICp2aWlmX2RldiA9IGNhcF9kZXYtPnZpaWZfZGV2Ow0KPiA+ICsJaW50IHJldDsN Cj4gPiArDQo+ID4gKwlyZXQgPSB2NGwyX2ZoX29wZW4oZmlsZSk7DQo+ID4gKwlpZiAocmV0KQ0K PiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHBtX3J1bnRpbWVfcmVzdW1l X2FuZF9nZXQodmlpZl9kZXYtPmRldik7DQo+IA0KPiBJZiBwbV9ydW50aW1lX3Jlc3VtZV9hbmRf Z2V0IGZhaWxzLCB0aGVuIHY0bDJfZmhfcmVsZWFzZSBuZWVkcw0KPiB0byBiZSBjYWxsZWQuDQoN CkknbGwgZml4IGl0Lg0KDQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdmlpZl9jYXB0 dXJlX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBjYXBf ZGV2ICpjYXBfZGV2ID0gdmlkZW9fZHJ2ZGF0YV90b19jYXBkZXYoZmlsZSk7DQo+ID4gKwlzdHJ1 Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2ID0gY2FwX2Rldi0+dmlpZl9kZXY7DQo+ID4gKw0KPiA+ ICsJdmIyX2ZvcF9yZWxlYXNlKGZpbGUpOw0KPiA+ICsJcG1fcnVudGltZV9wdXQodmlpZl9kZXYt PmRldik7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdmlpZl9mb3BzID0gew0KPiA+ICsJ Lm93bmVyID0gVEhJU19NT0RVTEUsDQo+ID4gKwkub3BlbiA9IHZpaWZfY2FwdHVyZV9vcGVuLA0K PiA+ICsJLnJlbGVhc2UgPSB2aWlmX2NhcHR1cmVfcmVsZWFzZSwNCj4gPiArCS51bmxvY2tlZF9p b2N0bCA9IHZpZGVvX2lvY3RsMiwNCj4gPiArCS5tbWFwID0gdmIyX2ZvcF9tbWFwLA0KPiA+ICsJ LnBvbGwgPSB2YjJfZm9wX3BvbGwsDQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKiAtLS0tLSBtZWRp YSBjb250cm9sIGNhbGxiYWNrcyAtLS0tLSAqLw0KPiA+ICtzdGF0aWMgaW50IHZpaWZfY2FwdHVy ZV9saW5rX3ZhbGlkYXRlKHN0cnVjdCBtZWRpYV9saW5rICpsaW5rKQ0KPiA+ICt7DQo+ID4gKwkv KiBsaW5rIHZhbGlkYXRpb24gYXQgc3RhcnQtc3RyZWFtICovDQo+ID4gKwlyZXR1cm4gMDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtZWRpYV9lbnRpdHlfb3BlcmF0 aW9ucyB2aWlmX21lZGlhX29wcyA9IHsNCj4gPiArCS5saW5rX3ZhbGlkYXRlID0gdmlpZl9jYXB0 dXJlX2xpbmtfdmFsaWRhdGUsDQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKiAtLS0tLSBhdHRhY2gg Y3RybCBjYWxsYmFjY2sgaGFuZGxlciAtLS0tLSAqLw0KPiA+ICtpbnQgdmlzY29udGlfdmlpZl9j YXB0dXJlX3JlZ2lzdGVyX2N0cmxfaGFuZGxlcnMoc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2Rl dikNCj4gPiArew0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwkvKiBNQUlOIFBPU1QwOiBt ZXJnZSBjb250cm9scyBvZiBJU1AgYW5kIENBUFRVUkUwICovDQo+ID4gKwlyZXQgPSB2NGwyX2N0 cmxfYWRkX2hhbmRsZXIoJnZpaWZfZGV2LT5jYXBfZGV2MC5jdHJsX2hhbmRsZXIsDQo+ID4gKwkJ CQkgICAgdmlpZl9kZXYtPnNkLT52NGwyX3NkLT5jdHJsX2hhbmRsZXIsDQo+IE5VTEwsIHRydWUp Ow0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWRldl9lcnIodmlpZl9kZXYtPmRldiwgIkZhaWxl ZCB0byBhZGQgc2Vuc29yIGN0cmxfaGFuZGxlciIpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4g Kwl9DQo+ID4gKwlyZXQgPSB2NGwyX2N0cmxfYWRkX2hhbmRsZXIoJnZpaWZfZGV2LT5jYXBfZGV2 MC5jdHJsX2hhbmRsZXIsDQo+ID4gKwkJCQkgICAgJnZpaWZfZGV2LT5pc3Bfc3ViZGV2LmN0cmxf aGFuZGxlciwNCj4gTlVMTCwgdHJ1ZSk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2Vy cih2aWlmX2Rldi0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBpc3Agc3ViZGV2IGN0cmxfaGFuZGxlciIp Ow0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogTUFJTiBQT1NU MTogbWVyZ2UgY29udHJvbHMgb2YgSVNQIGFuZCBDQVBUVVJFMCAqLw0KPiA+ICsJcmV0ID0gdjRs Ml9jdHJsX2FkZF9oYW5kbGVyKCZ2aWlmX2Rldi0+Y2FwX2RldjEuY3RybF9oYW5kbGVyLA0KPiA+ ICsJCQkJICAgIHZpaWZfZGV2LT5zZC0+djRsMl9zZC0+Y3RybF9oYW5kbGVyLA0KPiBOVUxMLCB0 cnVlKTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKHZpaWZfZGV2LT5kZXYsICJG YWlsZWQgdG8gYWRkIHNlbnNvciBjdHJsX2hhbmRsZXIiKTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0K PiA+ICsJfQ0KPiA+ICsJcmV0ID0gdjRsMl9jdHJsX2FkZF9oYW5kbGVyKCZ2aWlmX2Rldi0+Y2Fw X2RldjEuY3RybF9oYW5kbGVyLA0KPiA+ICsJCQkJICAgICZ2aWlmX2Rldi0+aXNwX3N1YmRldi5j dHJsX2hhbmRsZXIsDQo+IE5VTEwsIHRydWUpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWRl dl9lcnIodmlpZl9kZXYtPmRldiwgIkZhaWxlZCB0byBhZGQgaXNwIHN1YmRldiBjdHJsX2hhbmRs ZXIiKTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIFNVQjog bm8gY29udHJvbCBpcyBleHBvcnRlZCAqLw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICsvKiAtLS0tLSByZWdpc3Rlci9yZW1vdmUgY2FwdHVyZSBkZXZpY2Ugbm9k ZSAtLS0tLSAqLw0KPiA+ICtzdGF0aWMgaW50IHZpc2NvbnRpX3ZpaWZfY2FwdHVyZV9yZWdpc3Rl cl9ub2RlKHN0cnVjdCBjYXBfZGV2ICpjYXBfZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3Qgdmlp Zl9kZXZpY2UgKnZpaWZfZGV2ID0gY2FwX2Rldi0+dmlpZl9kZXY7DQo+ID4gKwlzdHJ1Y3QgdjRs Ml9kZXZpY2UgKnY0bDJfZGV2ID0gJnZpaWZfZGV2LT52NGwyX2RldjsNCj4gPiArCXN0cnVjdCB2 aWRlb19kZXZpY2UgKnZkZXYgPSAmY2FwX2Rldi0+dmRldjsNCj4gPiArCXN0cnVjdCB2YjJfcXVl dWUgKnEgPSAmY2FwX2Rldi0+dmIyX3ZxOw0KPiA+ICsJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0 IG5vZGVfbmFtZVtdID0gew0KPiA+ICsJCSJ2aWlmX2NhcHR1cmVfcG9zdDAiLA0KPiA+ICsJCSJ2 aWlmX2NhcHR1cmVfcG9zdDEiLA0KPiA+ICsJCSJ2aWlmX2NhcHR1cmVfc3ViIiwNCj4gPiArCX07 DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCUlOSVRfTElTVF9IRUFEKCZjYXBfZGV2LT5i dWZfcXVldWUpOw0KPiA+ICsNCj4gPiArCW11dGV4X2luaXQoJmNhcF9kZXYtPnZsb2NrKTsNCj4g PiArDQo+ID4gKwkvKiBJbml0aWFsaXplIHZiMiBxdWV1ZS4gKi8NCj4gPiArCXEtPnR5cGUgPSBW NEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVfTVBMQU5FOw0KPiA+ICsJcS0+aW9fbW9kZXMgPSBW QjJfRE1BQlVGOw0KPiANCj4gV2h5IGlzIHRoZXJlIG5vIFZCMl9NTUFQPw0KDQpUaGUgaGFyZHdh cmUgcmVxdWVzdHMgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSBmb3IgZnJhbWUgYnVmZmVy Lg0KSSdtIG5vdCBzdXJlIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGluIFZCMl9NTUFQIG1vZGUgc2F0 aXNmaWVzIHRoaXMgcmVzdHJpY3Rpb24uDQoNCj4gPiArCXEtPnRpbWVzdGFtcF9mbGFncyA9IFY0 TDJfQlVGX0ZMQUdfVElNRVNUQU1QX01PTk9UT05JQzsNCj4gPiArCXEtPm9wcyA9ICZ2aWlmX3Zi Ml9vcHM7DQo+ID4gKwlxLT5tZW1fb3BzID0gJnZiMl9kbWFfY29udGlnX21lbW9wczsNCj4gPiAr CXEtPmRydl9wcml2ID0gY2FwX2RldjsNCj4gPiArCXEtPmJ1Zl9zdHJ1Y3Rfc2l6ZSA9IHNpemVv ZihzdHJ1Y3QgdmlpZl9idWZmZXIpOw0KPiA+ICsJcS0+bWluX2J1ZmZlcnNfbmVlZGVkID0gMjsN Cj4gPiArCXEtPmxvY2sgPSAmY2FwX2Rldi0+dmxvY2s7DQo+ID4gKwlxLT5kZXYgPSB2aWlmX2Rl di0+djRsMl9kZXYuZGV2Ow0KPiA+ICsNCj4gPiArCXJldCA9IHZiMl9xdWV1ZV9pbml0KHEpOw0K PiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCS8qIFJlZ2lz dGVyIHRoZSB2aWRlbyBkZXZpY2UuICovDQo+ID4gKwlzdHJzY3B5KHZkZXYtPm5hbWUsIG5vZGVf bmFtZVtjYXBfZGV2LT5wYXRoaWRdLA0KPiBzaXplb2YodmRldi0+bmFtZSkpOw0KPiA+ICsJdmRl di0+djRsMl9kZXYgPSB2NGwyX2RldjsNCj4gPiArCXZkZXYtPmxvY2sgPSAmY2FwX2Rldi0+dmxv Y2s7DQo+ID4gKwl2ZGV2LT5xdWV1ZSA9ICZjYXBfZGV2LT52YjJfdnE7DQo+ID4gKwl2ZGV2LT5j dHJsX2hhbmRsZXIgPSBOVUxMOw0KPiA+ICsJdmRldi0+Zm9wcyA9ICZ2aWlmX2ZvcHM7DQo+ID4g Kwl2ZGV2LT5pb2N0bF9vcHMgPSAmdmlpZl9pb2N0bF9vcHM7DQo+ID4gKwl2ZGV2LT5kZXZpY2Vf Y2FwcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkVfTVBMQU5FIHwNCj4gVjRMMl9DQVBfU1RSRUFN SU5HOw0KPiA+ICsJdmRldi0+ZGV2aWNlX2NhcHMgfD0gVjRMMl9DQVBfSU9fTUM7DQo+ID4gKwl2 ZGV2LT5lbnRpdHkub3BzID0gJnZpaWZfbWVkaWFfb3BzOw0KPiA+ICsJdmRldi0+cmVsZWFzZSA9 IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5Ow0KPiA+ICsJdmlkZW9fc2V0X2RydmRhdGEodmRl diwgY2FwX2Rldik7DQo+ID4gKwl2ZGV2LT52ZmxfZGlyID0gVkZMX0RJUl9SWDsNCj4gPiArCWNh cF9kZXYtPmNhcHR1cmVfcGFkLmZsYWdzID0gTUVESUFfUEFEX0ZMX1NJTks7DQo+ID4gKw0KPiA+ ICsJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZkZXYsIFZGTF9UWVBFX1ZJREVPLCAtMSk7 DQo+ID4gKwlpZiAocmV0IDwgMCkgew0KPiA+ICsJCWRldl9lcnIodjRsMl9kZXYtPmRldiwgInZp ZGVvX3JlZ2lzdGVyX2RldmljZSBmYWlsZWQ6ICVkXG4iLA0KPiByZXQpOw0KPiA+ICsJCXJldHVy biByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0ID0gbWVkaWFfZW50aXR5X3BhZHNfaW5p dCgmdmRldi0+ZW50aXR5LCAxLA0KPiAmY2FwX2Rldi0+Y2FwdHVyZV9wYWQpOw0KPiA+ICsJaWYg KHJldCkgew0KPiA+ICsJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZkZXYpOw0KPiA+ICsJCXJl dHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0ID0gdjRsMl9jdHJsX2hhbmRsZXJf aW5pdCgmY2FwX2Rldi0+Y3RybF9oYW5kbGVyLCAzMCk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJ CXJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4gPiArCWNhcF9kZXYtPnZkZXYuY3RybF9oYW5kbGVy ID0gJmNhcF9kZXYtPmN0cmxfaGFuZGxlcjsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiAr fQ0KPiA+ICsNCj4gPiAraW50IHZpc2NvbnRpX3ZpaWZfY2FwdHVyZV9yZWdpc3RlcihzdHJ1Y3Qg dmlpZl9kZXZpY2UgKnZpaWZfZGV2KQ0KPiA+ICt7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4g PiArCS8qIHJlZ2lzdGVyIE1BSU4gUE9TVDAgKHByaW1hcnkgUkdCIG91dHB1dCkqLw0KPiA+ICsJ dmlpZl9kZXYtPmNhcF9kZXYwLnBhdGhpZCA9IENBUFRVUkVfUEFUSF9NQUlOX1BPU1QwOw0KPiA+ ICsJdmlpZl9kZXYtPmNhcF9kZXYwLnZpaWZfZGV2ID0gdmlpZl9kZXY7DQo+ID4gKwlyZXQgPSB2 aXNjb250aV92aWlmX2NhcHR1cmVfcmVnaXN0ZXJfbm9kZSgmdmlpZl9kZXYtPmNhcF9kZXYwKTsN Cj4gPiArCWlmIChyZXQpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwkvKiByZWdp c3RlciBNQUlOIFBPU1QxIChhZGRpdGlvbmFsIFJHQiBvdXRwdXQpKi8NCj4gPiArCXZpaWZfZGV2 LT5jYXBfZGV2MS5wYXRoaWQgPSBDQVBUVVJFX1BBVEhfTUFJTl9QT1NUMTsNCj4gPiArCXZpaWZf ZGV2LT5jYXBfZGV2MS52aWlmX2RldiA9IHZpaWZfZGV2Ow0KPiA+ICsJcmV0ID0gdmlzY29udGlf dmlpZl9jYXB0dXJlX3JlZ2lzdGVyX25vZGUoJnZpaWZfZGV2LT5jYXBfZGV2MSk7DQo+ID4gKwlp ZiAocmV0KQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJLyogcmVnaXN0ZXIgU1VC IChSQVcgb3V0cHV0KSAqLw0KPiA+ICsJdmlpZl9kZXYtPmNhcF9kZXYyLnBhdGhpZCA9IENBUFRV UkVfUEFUSF9TVUI7DQo+ID4gKwl2aWlmX2Rldi0+Y2FwX2RldjIudmlpZl9kZXYgPSB2aWlmX2Rl djsNCj4gPiArCXJldCA9IHZpc2NvbnRpX3ZpaWZfY2FwdHVyZV9yZWdpc3Rlcl9ub2RlKCZ2aWlm X2Rldi0+Y2FwX2RldjIpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB2aXNj b250aV92aWlmX2NhcHR1cmVfdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBjYXBfZGV2ICpjYXBfZGV2 KQ0KPiA+ICt7DQo+ID4gKwltZWRpYV9lbnRpdHlfY2xlYW51cCgmY2FwX2Rldi0+dmRldi5lbnRp dHkpOw0KPiA+ICsJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmY2FwX2Rldi0+Y3RybF9oYW5kbGVy KTsNCj4gPiArCXZiMl92aWRlb191bnJlZ2lzdGVyX2RldmljZSgmY2FwX2Rldi0+dmRldik7DQo+ ID4gKwltdXRleF9kZXN0cm95KCZjYXBfZGV2LT52bG9jayk7DQo+ID4gK30NCj4gPiArDQo+ID4g K3ZvaWQgdmlzY29udGlfdmlpZl9jYXB0dXJlX3VucmVnaXN0ZXIoc3RydWN0IHZpaWZfZGV2aWNl ICp2aWlmX2RldikNCj4gPiArew0KPiA+ICsJdmlzY29udGlfdmlpZl9jYXB0dXJlX3VucmVnaXN0 ZXJfbm9kZSgmdmlpZl9kZXYtPmNhcF9kZXYwKTsNCj4gPiArCXZpc2NvbnRpX3ZpaWZfY2FwdHVy ZV91bnJlZ2lzdGVyX25vZGUoJnZpaWZfZGV2LT5jYXBfZGV2MSk7DQo+ID4gKwl2aXNjb250aV92 aWlmX2NhcHR1cmVfdW5yZWdpc3Rlcl9ub2RlKCZ2aWlmX2Rldi0+Y2FwX2RldjIpOw0KPiA+ICt9 DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdmlzY29udGkvdmlpZl9p c3AuYw0KPiBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdmlzY29udGkvdmlpZl9pc3AuYw0KPiA+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAuLjkzMTRlNmU4NjYx DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdmlz Y29udGkvdmlpZl9pc3AuYw0KPiA+IEBAIC0wLDAgKzEsODQ2IEBADQo+ID4gKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0yLUNsYXVzZQ0KPiA+ICsvKiBUb3NoaWJh IFZpc2NvbnRpIFZpZGVvIENhcHR1cmUgU3VwcG9ydA0KPiA+ICsgKg0KPiA+ICsgKiAoQykgQ29w eXJpZ2h0IDIwMjIgVE9TSElCQSBDT1JQT1JBVElPTg0KPiA+ICsgKiAoQykgQ29weXJpZ2h0IDIw MjIgVG9zaGliYSBFbGVjdHJvbmljIERldmljZXMgJiBTdG9yYWdlIENvcnBvcmF0aW9uDQo+ID4g KyAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+ID4gKyNpbmNsdWRl IDxtZWRpYS92NGwyLWNvbW1vbi5oPg0KPiA+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYu aD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlICJ2aWlmLmgiDQo+ID4gKw0KPiA+ICsvKiAtLS0tLSBz dXBwb3J0ZWQgTUJVUyBmb3JtYXRzIC0tLS0tICovDQo+ID4gK3N0cnVjdCB2aXNjb250aV9tYnVz X2Zvcm1hdCB7DQo+ID4gKwl1bnNpZ25lZCBpbnQgY29kZTsNCj4gPiArCXVuc2lnbmVkIGludCBi cHA7DQo+ID4gKwlpbnQgcmdiX291dDsNCj4gPiArfSBzdGF0aWMgdmlzY29udGlfbWJ1c19mb3Jt YXRzW10gPSB7DQo+ID4gKwl7IC5jb2RlID0gTUVESUFfQlVTX0ZNVF9SR0I4ODhfMVgyNCwgLmJw cCA9IDI0LCAucmdiX291dCA9IDEgfSwNCj4gPiArCXsgLmNvZGUgPSBNRURJQV9CVVNfRk1UX1VZ Vlk4XzFYMTYsIC5icHAgPSAxNiwgLnJnYl9vdXQgPSAwIH0sDQo+ID4gKwl7IC5jb2RlID0gTUVE SUFfQlVTX0ZNVF9VWVZZMTBfMVgyMCwgLmJwcCA9IDIwLCAucmdiX291dCA9IDAgfSwNCj4gPiAr CXsgLmNvZGUgPSBNRURJQV9CVVNfRk1UX1JHQjU2NV8xWDE2LCAuYnBwID0gMTYsIC5yZ2Jfb3V0 ID0gMSB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JVU19GTVRfU0JHR1I4XzFYOCwgLmJwcCA9 IDgsIC5yZ2Jfb3V0ID0gMCB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JVU19GTVRfU0dCUkc4 XzFYOCwgLmJwcCA9IDgsIC5yZ2Jfb3V0ID0gMCB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JV U19GTVRfU0dSQkc4XzFYOCwgLmJwcCA9IDgsIC5yZ2Jfb3V0ID0gMCB9LA0KPiA+ICsJeyAuY29k ZSA9IE1FRElBX0JVU19GTVRfU1JHR0I4XzFYOCwgLmJwcCA9IDgsIC5yZ2Jfb3V0ID0gMCB9LA0K PiA+ICsJeyAuY29kZSA9IE1FRElBX0JVU19GTVRfU1JHR0IxMF8xWDEwLCAuYnBwID0gMTAsIC5y Z2Jfb3V0ID0gMCB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JVU19GTVRfU0dSQkcxMF8xWDEw LCAuYnBwID0gMTAsIC5yZ2Jfb3V0ID0gMCB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JVU19G TVRfU0dCUkcxMF8xWDEwLCAuYnBwID0gMTAsIC5yZ2Jfb3V0ID0gMCB9LA0KPiA+ICsJeyAuY29k ZSA9IE1FRElBX0JVU19GTVRfU0JHR1IxMF8xWDEwLCAuYnBwID0gMTAsIC5yZ2Jfb3V0ID0gMCB9 LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JVU19GTVRfU1JHR0IxMl8xWDEyLCAuYnBwID0gMTIs IC5yZ2Jfb3V0ID0gMCB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JVU19GTVRfU0dSQkcxMl8x WDEyLCAuYnBwID0gMTIsIC5yZ2Jfb3V0ID0gMCB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JV U19GTVRfU0dCUkcxMl8xWDEyLCAuYnBwID0gMTIsIC5yZ2Jfb3V0ID0gMCB9LA0KPiA+ICsJeyAu Y29kZSA9IE1FRElBX0JVU19GTVRfU0JHR1IxMl8xWDEyLCAuYnBwID0gMTIsIC5yZ2Jfb3V0ID0g MCB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JVU19GTVRfU1JHR0IxNF8xWDE0LCAuYnBwID0g MTQsIC5yZ2Jfb3V0ID0gMCB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JVU19GTVRfU0dSQkcx NF8xWDE0LCAuYnBwID0gMTQsIC5yZ2Jfb3V0ID0gMCB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElB X0JVU19GTVRfU0dCUkcxNF8xWDE0LCAuYnBwID0gMTQsIC5yZ2Jfb3V0ID0gMCB9LA0KPiA+ICsJ eyAuY29kZSA9IE1FRElBX0JVU19GTVRfU0JHR1IxNF8xWDE0LCAuYnBwID0gMTQsIC5yZ2Jfb3V0 ID0gMCB9LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2aWlmX2dldF9tYnVzX3Jn Yl9vdXQodW5zaWduZWQgaW50IG1idXNfY29kZSkNCj4gPiArew0KPiA+ICsJaW50IGk7DQo+ID4g Kw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmlzY29udGlfbWJ1c19mb3JtYXRz KTsgaSsrKQ0KPiA+ICsJCWlmICh2aXNjb250aV9tYnVzX2Zvcm1hdHNbaV0uY29kZSA9PSBtYnVz X2NvZGUpDQo+ID4gKwkJCXJldHVybiB2aXNjb250aV9tYnVzX2Zvcm1hdHNbaV0ucmdiX291dDsN Cj4gPiArDQo+ID4gKwkvKiBZVVYgaW50ZXJtZWRpYXRlIGNvZGUgYnkgZGVmYXVsdCAqLw0KPiA+ ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgdmlp Zl9nZXRfbWJ1c19icHAodW5zaWduZWQgaW50IG1idXNfY29kZSkNCj4gPiArew0KPiA+ICsJaW50 IGk7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmlzY29udGlfbWJ1 c19mb3JtYXRzKTsgaSsrKQ0KPiA+ICsJCWlmICh2aXNjb250aV9tYnVzX2Zvcm1hdHNbaV0uY29k ZSA9PSBtYnVzX2NvZGUpDQo+ID4gKwkJCXJldHVybiB2aXNjb250aV9tYnVzX2Zvcm1hdHNbaV0u YnBwOw0KPiA+ICsNCj4gPiArCS8qIGRlZmF1bHQgYnBwIHZhbHVlICovDQo+ID4gKwlyZXR1cm4g MjQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBib29sIHZpaWZfaXNfdmFsaWRfbWJ1c19j b2RlKHVuc2lnbmVkIGludCBtYnVzX2NvZGUpDQo+ID4gK3sNCj4gPiArCWludCBpOw0KPiA+ICsN Cj4gPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZpc2NvbnRpX21idXNfZm9ybWF0cyk7 IGkrKykNCj4gPiArCQlpZiAodmlzY29udGlfbWJ1c19mb3JtYXRzW2ldLmNvZGUgPT0gbWJ1c19j b2RlKQ0KPiA+ICsJCQlyZXR1cm4gdHJ1ZTsNCj4gPiArCXJldHVybiBmYWxzZTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArLyogLS0tLS0gaGFuZGxpbmcgbWFpbiBwcm9jZXNzaW5nIHBhdGggLS0tLS0g Ki8NCj4gPiArc3RhdGljIGludCB2aWlmX2dldF9kdl90aW1pbmdzKHN0cnVjdCB2aWlmX2Rldmlj ZSAqdmlpZl9kZXYsIHN0cnVjdA0KPiB2NGwyX2R2X3RpbWluZ3MgKnRpbWluZ3MpDQo+ID4gK3sN Cj4gPiArCXN0cnVjdCB2aWlmX3N1YmRldiAqdmlpZl9zZCA9IHZpaWZfZGV2LT5zZDsNCj4gPiAr CXN0cnVjdCB2NGwyX3N1YmRldl9wYWRfY29uZmlnIHBhZF9jZmc7DQo+ID4gKwlzdHJ1Y3QgdjRs Ml9zdWJkZXZfc3RhdGUgcGFkX3N0YXRlID0gew0KPiA+ICsJCS5wYWRzID0gJnBhZF9jZmcsDQo+ ID4gKwl9Ow0KPiA+ICsJc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCBmb3JtYXQgPSB7DQo+ID4g KwkJLndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRSwNCj4gPiArCQkucGFkID0gMCwN Cj4gPiArCX07DQo+ID4gKwlzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsOw0KPiA+ICsJaW50IHJldDsN Cj4gPiArDQo+ID4gKwkvKiBzb21lIHZpZGVvIEkvRiBzdXBwb3J0IGR2X3RpbWluZ3MgcXVlcnkg Ki8NCj4gPiArCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwodmlpZl9zZC0+djRsMl9zZCwgdmlkZW8s IGdfZHZfdGltaW5ncywgdGltaW5ncyk7DQo+ID4gKwlpZiAocmV0ID09IDApDQo+ID4gKwkJcmV0 dXJuIDA7DQo+ID4gKw0KPiA+ICsJLyogb3RoZXJzOiBjYWxsIHNvbWUgZGlzY3JldGUgQVBJcyAq Lw0KPiA+ICsJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbCh2aWlmX3NkLT52NGwyX3NkLCBwYWQsIGdl dF9mbXQsICZwYWRfc3RhdGUsDQo+ICZmb3JtYXQpOw0KPiA+ICsJaWYgKHJldCAhPSAwKQ0KPiA+ ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJdGltaW5ncy0+YnQud2lkdGggPSBmb3JtYXQu Zm9ybWF0LndpZHRoOw0KPiA+ICsJdGltaW5ncy0+YnQuaGVpZ2h0ID0gZm9ybWF0LmZvcm1hdC5o ZWlnaHQ7DQo+ID4gKw0KPiA+ICsJY3RybCA9IHY0bDJfY3RybF9maW5kKHZpaWZfc2QtPnY0bDJf c2QtPmN0cmxfaGFuZGxlciwNCj4gVjRMMl9DSURfSEJMQU5LKTsNCj4gPiArCWlmICghY3RybCkg ew0KPiA+ICsJCWRldl9lcnIodmlpZl9kZXYtPmRldiwgInN1YmRldjogVjRMMl9DSURfVkJMQU5L IGVycm9yLlxuIik7DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKwl0aW1p bmdzLT5idC5oc3luYyA9IHY0bDJfY3RybF9nX2N0cmwoY3RybCk7DQo+ID4gKw0KPiA+ICsJY3Ry bCA9IHY0bDJfY3RybF9maW5kKHZpaWZfc2QtPnY0bDJfc2QtPmN0cmxfaGFuZGxlciwNCj4gVjRM Ml9DSURfVkJMQU5LKTsNCj4gPiArCWlmICghY3RybCkgew0KPiA+ICsJCWRldl9lcnIodmlpZl9k ZXYtPmRldiwgInN1YmRldjogVjRMMl9DSURfVkJMQU5LIGVycm9yLlxuIik7DQo+ID4gKwkJcmV0 dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKwl0aW1pbmdzLT5idC52c3luYyA9IHY0bDJfY3Ry bF9nX2N0cmwoY3RybCk7DQo+ID4gKw0KPiA+ICsJY3RybCA9IHY0bDJfY3RybF9maW5kKHZpaWZf c2QtPnY0bDJfc2QtPmN0cmxfaGFuZGxlciwNCj4gVjRMMl9DSURfUElYRUxfUkFURSk7DQo+ID4g KwlpZiAoIWN0cmwpIHsNCj4gPiArCQlkZXZfZXJyKHZpaWZfZGV2LT5kZXYsICJzdWJkZXY6IFY0 TDJfQ0lEX1BJWEVMX1JBVEUNCj4gZXJyb3IuXG4iKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsN Cj4gPiArCX0NCj4gPiArCXRpbWluZ3MtPmJ0LnBpeGVsY2xvY2sgPSB2NGwyX2N0cmxfZ19jdHJs X2ludDY0KGN0cmwpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtpbnQgdmlzY29udGlfdmlpZl9pc3BfbWFpbl9zZXRfdW5pdChzdHJ1Y3QgdmlpZl9kZXZpY2Ug KnZpaWZfZGV2KQ0KPiA+ICt7DQo+ID4gKwl1bnNpZ25lZCBpbnQgZHRfaW1hZ2UsIGNvbG9yX3R5 cGUsIHJhd3BhY2ssIHl1dl9jb252Ow0KPiA+ICsJc3RydWN0IHZpaWZfc3ViZGV2ICp2aWlmX3Nk ID0gdmlpZl9kZXYtPnNkOw0KPiA+ICsJc3RydWN0IGh3ZF92aWlmX2lucHV0X2ltZyBpbl9pbWdf bWFpbjsNCj4gPiArCXN0cnVjdCB2aWlmX2wyX3VuZGlzdCB1bmRpc3QgPSB7IDAgfTsNCj4gPiAr CXN0cnVjdCB2NGwyX2R2X3RpbWluZ3MgdGltaW5nczsNCj4gPiArCXN0cnVjdCB2NGwyX3N1YmRl dl9mb3JtYXQgZm10ID0gew0KPiA+ICsJCS5wYWQgPSAwLA0KPiA+ICsJCS53aGljaCA9IFY0TDJf U1VCREVWX0ZPUk1BVF9BQ1RJVkUsDQo+ID4gKwl9Ow0KPiA+ICsJaW50IG1hZ19oYWN0aXZlID0g MTsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsNCj4gPiArCXJldCA9IHZpaWZfZ2V0X2R2X3Rp bWluZ3ModmlpZl9kZXYsICZ0aW1pbmdzKTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZf ZXJyKHZpaWZfZGV2LT5kZXYsICJjb3VsZCBub3QgZ2V0IHRpbWluZyBpbmZvcm1hdGlvbiBvZg0K PiBzdWJkZXYiKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4g KwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHZpaWZfc2QtPnY0bDJfc2QsIHBhZCwgZ2V0X2ZtdCwg TlVMTCwgJmZtdCk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2Vycih2aWlmX2Rldi0+ ZGV2LCAiY291bGQgbm90IGdldCBwYWQgaW5mb3JtYXRpb24gb2YNCj4gc3ViZGV2Iik7DQo+ID4g KwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChmbXQuZm9y bWF0LmNvZGUpIHsNCj4gPiArCWNhc2UgTUVESUFfQlVTX0ZNVF9SR0I4ODhfMVgyNDoNCj4gPiAr CQlkdF9pbWFnZSA9IFZJU0NPTlRJX0NTSTJfRFRfUkdCODg4Ow0KPiA+ICsJCWJyZWFrOw0KPiA+ ICsJY2FzZSBNRURJQV9CVVNfRk1UX1VZVlk4XzFYMTY6DQo+ID4gKwkJZHRfaW1hZ2UgPSBWSVND T05USV9DU0kyX0RUX1lVVjQyMjhCOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBNRURJQV9C VVNfRk1UX1VZVlkxMF8xWDIwOg0KPiA+ICsJCWR0X2ltYWdlID0gVklTQ09OVElfQ1NJMl9EVF9Z VVY0MjIxMEI7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIE1FRElBX0JVU19GTVRfUkdCNTY1 XzFYMTY6DQo+ID4gKwkJZHRfaW1hZ2UgPSBWSVNDT05USV9DU0kyX0RUX1JHQjU2NTsNCj4gPiAr CQlicmVhazsNCj4gPiArCWNhc2UgTUVESUFfQlVTX0ZNVF9TQkdHUjhfMVg4Og0KPiA+ICsJY2Fz ZSBNRURJQV9CVVNfRk1UX1NHQlJHOF8xWDg6DQo+ID4gKwljYXNlIE1FRElBX0JVU19GTVRfU0dS Qkc4XzFYODoNCj4gPiArCWNhc2UgTUVESUFfQlVTX0ZNVF9TUkdHQjhfMVg4Og0KPiA+ICsJCWR0 X2ltYWdlID0gVklTQ09OVElfQ1NJMl9EVF9SQVc4Ow0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2Fz ZSBNRURJQV9CVVNfRk1UX1NSR0dCMTBfMVgxMDoNCj4gPiArCWNhc2UgTUVESUFfQlVTX0ZNVF9T R1JCRzEwXzFYMTA6DQo+ID4gKwljYXNlIE1FRElBX0JVU19GTVRfU0dCUkcxMF8xWDEwOg0KPiA+ ICsJY2FzZSBNRURJQV9CVVNfRk1UX1NCR0dSMTBfMVgxMDoNCj4gPiArCQlkdF9pbWFnZSA9IFZJ U0NPTlRJX0NTSTJfRFRfUkFXMTA7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIE1FRElBX0JV U19GTVRfU1JHR0IxMl8xWDEyOg0KPiA+ICsJY2FzZSBNRURJQV9CVVNfRk1UX1NHUkJHMTJfMVgx MjoNCj4gPiArCWNhc2UgTUVESUFfQlVTX0ZNVF9TR0JSRzEyXzFYMTI6DQo+ID4gKwljYXNlIE1F RElBX0JVU19GTVRfU0JHR1IxMl8xWDEyOg0KPiA+ICsJCWR0X2ltYWdlID0gVklTQ09OVElfQ1NJ Ml9EVF9SQVcxMjsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgTUVESUFfQlVTX0ZNVF9TUkdH QjE0XzFYMTQ6DQo+ID4gKwljYXNlIE1FRElBX0JVU19GTVRfU0dSQkcxNF8xWDE0Og0KPiA+ICsJ Y2FzZSBNRURJQV9CVVNfRk1UX1NHQlJHMTRfMVgxNDoNCj4gPiArCWNhc2UgTUVESUFfQlVTX0ZN VF9TQkdHUjE0XzFYMTQ6DQo+ID4gKwkJZHRfaW1hZ2UgPSBWSVNDT05USV9DU0kyX0RUX1JBVzE0 Ow0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQlkdF9pbWFnZSA9IFZJU0NP TlRJX0NTSTJfRFRfUkdCODg4Ow0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CWNvbG9yX3R5cGUgPSBkdF9pbWFnZTsNCj4gPiArDQo+ID4gKwlpZiAoY29sb3JfdHlwZSA9PSBW SVNDT05USV9DU0kyX0RUX1JBVzggfHwgY29sb3JfdHlwZSA9PQ0KPiBWSVNDT05USV9DU0kyX0RU X1JBVzEwIHx8DQo+ID4gKwkgICAgY29sb3JfdHlwZSA9PSBWSVNDT05USV9DU0kyX0RUX1JBVzEy KSB7DQo+ID4gKwkJcmF3cGFjayA9IHZpaWZfZGV2LT5yYXdwYWNrX21vZGU7DQo+ID4gKwkJaWYg KHJhd3BhY2sgIT0gSFdEX1ZJSUZfUkFXUEFDS19ESVNBQkxFKQ0KPiA+ICsJCQltYWdfaGFjdGl2 ZSA9IDI7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCXJhd3BhY2sgPSBIV0RfVklJRl9SQVdQQUNL X0RJU0FCTEU7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKGNvbG9yX3R5cGUgPT0gVklTQ09O VElfQ1NJMl9EVF9ZVVY0MjI4QiB8fCBjb2xvcl90eXBlID09DQo+IFZJU0NPTlRJX0NTSTJfRFRf WVVWNDIyMTBCKQ0KPiA+ICsJCXl1dl9jb252ID0gSFdEX1ZJSUZfWVVWX0NPTlZfSU5URVJQT0xB VElPTjsNCj4gPiArCWVsc2UNCj4gPiArCQl5dXZfY29udiA9IEhXRF9WSUlGX1lVVl9DT05WX1JF UEVBVDsNCj4gPiArDQo+ID4gKwlpbl9pbWdfbWFpbi5oYWN0aXZlX3NpemUgPSB0aW1pbmdzLmJ0 LndpZHRoOw0KPiA+ICsJaW5faW1nX21haW4udmFjdGl2ZV9zaXplID0gdGltaW5ncy5idC5oZWln aHQ7DQo+ID4gKwlpbl9pbWdfbWFpbi5odG90YWxfc2l6ZSA9IHRpbWluZ3MuYnQud2lkdGggKiBt YWdfaGFjdGl2ZSArDQo+IHRpbWluZ3MuYnQuaHN5bmM7DQo+ID4gKwlpbl9pbWdfbWFpbi52dG90 YWxfc2l6ZSA9IHRpbWluZ3MuYnQuaGVpZ2h0ICsgdGltaW5ncy5idC52c3luYzsNCj4gPiArCWlu X2ltZ19tYWluLnBpeGVsX2Nsb2NrID0gdGltaW5ncy5idC5waXhlbGNsb2NrIC8gMTAwMDsNCj4g PiArCWluX2ltZ19tYWluLnZicF9zaXplID0gdGltaW5ncy5idC52c3luYyAtIDU7DQo+ID4gKw0K PiA+ICsJaW5faW1nX21haW4uaW50ZXJwb2xhdGlvbl9tb2RlID0NCj4gSFdEX1ZJSUZfTDFfSU5Q VVRfSU5URVJQT0xBVElPTl9MSU5FOw0KPiA+ICsJaW5faW1nX21haW4uaW5wdXRfbnVtID0gMTsN Cj4gPiArCWluX2ltZ19tYWluLmhvYmNfd2lkdGggPSAwOw0KPiA+ICsJaW5faW1nX21haW4uaG9i Y19tYXJnaW4gPSAwOw0KPiA+ICsNCj4gPiArCS8qIGNvbmZpZ3VyYXRpb24gb2YgTUFJTiB1bml0 ICovDQo+ID4gKwlyZXQgPSBod2RfdmlpZl9tYWluX3NldF91bml0KHZpaWZfZGV2LT5od2RfcmVz LCBkdF9pbWFnZSwNCj4gJmluX2ltZ19tYWluLCBjb2xvcl90eXBlLCByYXdwYWNrLA0KPiA+ICsJ CQkJICAgICB5dXZfY29udik7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2Vycih2aWlm X2Rldi0+ZGV2LCAibWFpbl9zZXRfdW5pdCBlcnJvci4gJWRcbiIsIHJldCk7DQo+ID4gKwkJcmV0 dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBFbmFibGUgcmVnYnVmICovDQo+ID4g Kwlod2RfdmlpZl9pc3Bfc2V0X3JlZ2J1Zl9hdXRvX3RyYW5zbWlzc2lvbih2aWlmX2Rldi0+aHdk X3Jlcyk7DQo+ID4gKw0KPiA+ICsJLyogTDIgVU5ESVNUIEVuYWJsZSB0aHJvdWdoIG1vZGUgYXMg ZGVmYXVsdCAgKi8NCj4gPiArCXVuZGlzdC50aHJvdWdoX21vZGUgPSBIV0RfVklJRl9FTkFCTEU7 DQo+ID4gKwl1bmRpc3Quc2Vuc29yX2Nyb3Bfb2ZzX2ggPSAxIC0gaW5faW1nX21haW4uaGFjdGl2 ZV9zaXplOw0KPiA+ICsJdW5kaXN0LnNlbnNvcl9jcm9wX29mc192ID0gMSAtIGluX2ltZ19tYWlu LnZhY3RpdmVfc2l6ZTsNCj4gPiArCXVuZGlzdC5ncmlkX25vZGVfbnVtX2ggPSAxNjsNCj4gPiAr CXVuZGlzdC5ncmlkX25vZGVfbnVtX3YgPSAxNjsNCj4gPiArCXJldCA9IGh3ZF92aWlmX2wyX3Nl dF91bmRpc3QodmlpZl9kZXYtPmh3ZF9yZXMsICZ1bmRpc3QpOw0KPiA+ICsJaWYgKHJldCkNCj4g PiArCQlkZXZfZXJyKHZpaWZfZGV2LT5kZXYsICJsMl9zZXRfdW5kaXN0IGVycm9yLiAlZFxuIiwg cmV0KTsNCj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB1bnNp Z25lZCBpbnQgZHRfaW1hZ2VfZnJvbV9tYnVzX2NvZGUodW5zaWduZWQgaW50IG1idXNfY29kZSkN Cj4gPiArew0KPiA+ICsJc3dpdGNoIChtYnVzX2NvZGUpIHsNCj4gPiArCWNhc2UgTUVESUFfQlVT X0ZNVF9SR0I4ODhfMVgyNDoNCj4gPiArCQlyZXR1cm4gVklTQ09OVElfQ1NJMl9EVF9SR0I4ODg7 DQo+ID4gKwljYXNlIE1FRElBX0JVU19GTVRfVVlWWThfMVgxNjoNCj4gPiArCQlyZXR1cm4gVklT Q09OVElfQ1NJMl9EVF9ZVVY0MjI4QjsNCj4gPiArCWNhc2UgTUVESUFfQlVTX0ZNVF9VWVZZMTBf MVgyMDoNCj4gPiArCQlyZXR1cm4gVklTQ09OVElfQ1NJMl9EVF9ZVVY0MjIxMEI7DQo+ID4gKwlj YXNlIE1FRElBX0JVU19GTVRfUkdCNTY1XzFYMTY6DQo+ID4gKwkJcmV0dXJuIFZJU0NPTlRJX0NT STJfRFRfUkdCNTY1Ow0KPiA+ICsJY2FzZSBNRURJQV9CVVNfRk1UX1NCR0dSOF8xWDg6DQo+ID4g KwljYXNlIE1FRElBX0JVU19GTVRfU0dCUkc4XzFYODoNCj4gPiArCWNhc2UgTUVESUFfQlVTX0ZN VF9TR1JCRzhfMVg4Og0KPiA+ICsJY2FzZSBNRURJQV9CVVNfRk1UX1NSR0dCOF8xWDg6DQo+ID4g KwkJcmV0dXJuIFZJU0NPTlRJX0NTSTJfRFRfUkFXODsNCj4gPiArCWNhc2UgTUVESUFfQlVTX0ZN VF9TUkdHQjEwXzFYMTA6DQo+ID4gKwljYXNlIE1FRElBX0JVU19GTVRfU0dSQkcxMF8xWDEwOg0K PiA+ICsJY2FzZSBNRURJQV9CVVNfRk1UX1NHQlJHMTBfMVgxMDoNCj4gPiArCWNhc2UgTUVESUFf QlVTX0ZNVF9TQkdHUjEwXzFYMTA6DQo+ID4gKwkJcmV0dXJuIFZJU0NPTlRJX0NTSTJfRFRfUkFX MTA7DQo+ID4gKwljYXNlIE1FRElBX0JVU19GTVRfU1JHR0IxMl8xWDEyOg0KPiA+ICsJY2FzZSBN RURJQV9CVVNfRk1UX1NHUkJHMTJfMVgxMjoNCj4gPiArCWNhc2UgTUVESUFfQlVTX0ZNVF9TR0JS RzEyXzFYMTI6DQo+ID4gKwljYXNlIE1FRElBX0JVU19GTVRfU0JHR1IxMl8xWDEyOg0KPiA+ICsJ CXJldHVybiBWSVNDT05USV9DU0kyX0RUX1JBVzEyOw0KPiA+ICsJY2FzZSBNRURJQV9CVVNfRk1U X1NSR0dCMTRfMVgxNDoNCj4gPiArCWNhc2UgTUVESUFfQlVTX0ZNVF9TR1JCRzE0XzFYMTQ6DQo+ ID4gKwljYXNlIE1FRElBX0JVU19GTVRfU0dCUkcxNF8xWDE0Og0KPiA+ICsJY2FzZSBNRURJQV9C VVNfRk1UX1NCR0dSMTRfMVgxNDoNCj4gPiArCQlyZXR1cm4gVklTQ09OVElfQ1NJMl9EVF9SQVcx NDsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJcmV0dXJuIFZJU0NPTlRJX0NTSTJfRFRfUkdCODg4 Ow0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQgdmlzY29udGlfdmlpZl9pc3Bfc3Vi X3NldF91bml0KHN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYpDQo+ID4gK3sNCj4gPiArCXN0 cnVjdCBod2RfdmlpZl9pbnB1dF9pbWcgaW5faW1nX3N1YjsNCj4gPiArCXN0cnVjdCB2NGwyX2R2 X3RpbWluZ3MgdGltaW5nczsNCj4gPiArCXN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgZm10ID0g ew0KPiA+ICsJCS5wYWQgPSAwLA0KPiA+ICsJCS53aGljaCA9IFY0TDJfU1VCREVWX0ZPUk1BVF9B Q1RJVkUsDQo+ID4gKwl9Ow0KPiA+ICsJdW5zaWduZWQgaW50IGR0X2ltYWdlOw0KPiA+ICsJaW50 IHJldDsNCj4gPiArDQo+ID4gKwlyZXQgPSB2aWlmX2dldF9kdl90aW1pbmdzKHZpaWZfZGV2LCAm dGltaW5ncyk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsN Cj4gPiArCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwodmlpZl9kZXYtPnNkLT52NGwyX3NkLCBwYWQs IGdldF9mbXQsIE5VTEwsDQo+ICZmbXQpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWRldl9l cnIodmlpZl9kZXYtPmRldiwgImNvdWxkIG5vdCBnZXQgcGFkIGluZm9ybWF0aW9uIG9mDQo+IHN1 YmRldiIpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWR0 X2ltYWdlID0gZHRfaW1hZ2VfZnJvbV9tYnVzX2NvZGUoZm10LmZvcm1hdC5jb2RlKTsNCj4gPiAr DQo+ID4gKwlpbl9pbWdfc3ViLmhhY3RpdmVfc2l6ZSA9IDA7DQo+ID4gKwlpbl9pbWdfc3ViLnZh Y3RpdmVfc2l6ZSA9IHRpbWluZ3MuYnQuaGVpZ2h0Ow0KPiA+ICsJaW5faW1nX3N1Yi5odG90YWxf c2l6ZSA9IHRpbWluZ3MuYnQud2lkdGggKyB0aW1pbmdzLmJ0LmhzeW5jOw0KPiA+ICsJaW5faW1n X3N1Yi52dG90YWxfc2l6ZSA9IHRpbWluZ3MuYnQuaGVpZ2h0ICsgdGltaW5ncy5idC52c3luYzsN Cj4gPiArCWluX2ltZ19zdWIucGl4ZWxfY2xvY2sgPSB0aW1pbmdzLmJ0LnBpeGVsY2xvY2sgLyAx MDAwOw0KPiA+ICsJaW5faW1nX3N1Yi52YnBfc2l6ZSA9IHRpbWluZ3MuYnQudnN5bmMgLSA1Ow0K PiA+ICsJaW5faW1nX3N1Yi5pbnRlcnBvbGF0aW9uX21vZGUgPQ0KPiBIV0RfVklJRl9MMV9JTlBV VF9JTlRFUlBPTEFUSU9OX0xJTkU7DQo+ID4gKwlpbl9pbWdfc3ViLmlucHV0X251bSA9IDE7DQo+ ID4gKwlpbl9pbWdfc3ViLmhvYmNfd2lkdGggPSAwOw0KPiA+ICsJaW5faW1nX3N1Yi5ob2JjX21h cmdpbiA9IDA7DQo+ID4gKw0KPiA+ICsJcmV0ID0gaHdkX3ZpaWZfc3ViX3NldF91bml0KHZpaWZf ZGV2LT5od2RfcmVzLCBkdF9pbWFnZSwNCj4gJmluX2ltZ19zdWIpOw0KPiA+ICsJaWYgKHJldCkN Cj4gPiArCQlkZXZfZXJyKHZpaWZfZGV2LT5kZXYsICJzdWJfc2V0X3VuaXQgZXJyb3IuICVkXG4i LCByZXQpOw0KPiA+ICsNCj4gPiArCXJldHVybiByZXQ7DQo+ID4gK307DQo+ID4gKw0KPiA+ICsv KiAtLS0tLSBoYW5kbGluZyBDU0kyUlggaGFyZHdhcmUgLS0tLS0gKi8NCj4gPiArc3RhdGljIGlu dCB2aWlmX2NzaTJyeF9pbml0aWFsaXplKHN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYpDQo+ ID4gK3sNCj4gPiArCXN0cnVjdCBod2RfdmlpZl9jc2kycnhfbGluZV9lcnJfdGFyZ2V0IGVycl90 YXJnZXQgPSB7IDAgfTsNCj4gPiArCXN0cnVjdCBod2RfdmlpZl9jc2kycnhfaXJxX21hc2sgY3Np MnJ4X21hc2s7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9zdWJkZXYgKnZpaWZfc2QgPSB2aWlmX2Rldi0+ c2Q7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9tYnVzX2NvbmZpZyBjZmcgPSB7IDAgfTsNCj4gPiArCXN0 cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgZm10ID0gew0KPiA+ICsJCS5wYWQgPSAwLA0KPiA+ICsJ CS53aGljaCA9IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUsDQo+ID4gKwl9Ow0KPiA+ICsJc3Ry dWN0IHY0bDJfZHZfdGltaW5ncyB0aW1pbmdzOw0KPiA+ICsJaW50IG51bV9sYW5lLCBkcGh5X3Jh dGU7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwo dmlpZl9zZC0+djRsMl9zZCwgcGFkLCBnZXRfbWJ1c19jb25maWcsIDAsDQo+ICZjZmcpOw0KPiA+ ICsJaWYgKHJldCkgew0KPiA+ICsJCWRldl9kYmcodmlpZl9kZXYtPmRldiwgInN1YmRldjogZ19t YnVzX2NvbmZpZyBlcnJvci4gJWRcbiIsDQo+IHJldCk7DQo+ID4gKwkJbnVtX2xhbmUgPSB2aWlm X3NkLT5udW1fbGFuZTsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJaWYgKGNmZy50eXBlICE9IFY0 TDJfTUJVU19DU0kyX0RQSFkpDQo+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJCW51bV9s YW5lID0gY2ZnLmJ1cy5taXBpX2NzaTIubnVtX2RhdGFfbGFuZXM7DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbCh2aWlmX3NkLT52NGwyX3NkLCBwYWQsIGdldF9m bXQsIDAsICZmbXQpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4g PiArDQo+ID4gKwlyZXQgPSB2aWlmX2dldF9kdl90aW1pbmdzKHZpaWZfZGV2LCAmdGltaW5ncyk7 DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArCWRw aHlfcmF0ZSA9ICh0aW1pbmdzLmJ0LnBpeGVsY2xvY2sgLyAxMDAwKSAqDQo+IHZpaWZfZ2V0X21i dXNfYnBwKGZtdC5mb3JtYXQuY29kZSkgLyBudW1fbGFuZTsNCj4gPiArCWRwaHlfcmF0ZSA9IGRw aHlfcmF0ZSAvIDEwMDA7DQo+ID4gKw0KPiA+ICsJLyogY2hlY2sgZXJyb3IgZm9yIENIMDogYWxs IHN1cHBvcnRlZCBEVHMgKi8NCj4gPiArCWVycl90YXJnZXQuZHRbMF0gPSBWSVNDT05USV9DU0ky X0RUX1JHQjU2NTsNCj4gPiArCWVycl90YXJnZXQuZHRbMV0gPSBWSVNDT05USV9DU0kyX0RUX1lV VjQyMjhCOw0KPiA+ICsJZXJyX3RhcmdldC5kdFsyXSA9IFZJU0NPTlRJX0NTSTJfRFRfWVVWNDIy MTBCOw0KPiA+ICsJZXJyX3RhcmdldC5kdFszXSA9IFZJU0NPTlRJX0NTSTJfRFRfUkdCODg4Ow0K PiA+ICsJZXJyX3RhcmdldC5kdFs0XSA9IFZJU0NPTlRJX0NTSTJfRFRfUkFXODsNCj4gPiArCWVy cl90YXJnZXQuZHRbNV0gPSBWSVNDT05USV9DU0kyX0RUX1JBVzEwOw0KPiA+ICsJZXJyX3Rhcmdl dC5kdFs2XSA9IFZJU0NPTlRJX0NTSTJfRFRfUkFXMTI7DQo+ID4gKwllcnJfdGFyZ2V0LmR0Wzdd ID0gVklTQ09OVElfQ1NJMl9EVF9SQVcxNDsNCj4gPiArDQo+ID4gKwkvKiBEZWZpbmUgZXJyb3Jz IHRvIGJlIG1hc2tlZCAqLw0KPiA+ICsJY3NpMnJ4X21hc2subWFza1swXSA9IDB4MDAwMDAwMEY7 IC8qY2hlY2sgYWxsIGZvciBQSFlfRkFUQUwqLw0KPiA+ICsJY3NpMnJ4X21hc2subWFza1sxXSA9 IDB4MDAwMTAwMEY7IC8qY2hlY2sgYWxsIGZvciBQS1RfRkFUQUwqLw0KPiA+ICsJY3NpMnJ4X21h c2subWFza1syXSA9IDB4MDAwRjBGMEY7IC8qY2hlY2sgYWxsIGZvciBGUkFNRV9GQVRBTCovDQo+ ID4gKwljc2kycnhfbWFzay5tYXNrWzNdID0gMHgwMDBGMDAwRjsgLypjaGVjayBhbGwgZm9yIFBI WSovDQo+ID4gKwljc2kycnhfbWFzay5tYXNrWzRdID0gMHgwMDBGMDAwRjsgLypjaGVjayBhbGwg Zm9yIFBLVCovDQo+ID4gKwljc2kycnhfbWFzay5tYXNrWzVdID0gMHgwMEZGMDBGRjsgLypjaGVj ayBhbGwgZm9yIExJTkUqLw0KPiA+ICsNCj4gPiArCXJldHVybiBod2RfdmlpZl9jc2kycnhfaW5p dGlhbGl6ZSh2aWlmX2Rldi0+aHdkX3JlcywgbnVtX2xhbmUsDQo+IEhXRF9WSUlGX0NTSTJfRFBI WV9MMEwxTDJMMywNCj4gPiArCQkJCQkgZHBoeV9yYXRlLCBIV0RfVklJRl9FTkFCTEUsDQo+ICZl cnJfdGFyZ2V0LCAmY3NpMnJ4X21hc2spOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50 IHZpaWZfY3NpMnJ4X3N0YXJ0KHN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYpDQo+ID4gK3sN Cj4gPiArCXN0cnVjdCBod2RfdmlpZl9jc2kycnhfcGFja2V0IHBhY2tldCA9IHsgMCB9Ow0KPiA+ ICsJdTMyIHZjX21haW4gPSAwOw0KPiA+ICsJdTMyIHZjX3N1YiA9IDA7DQo+ID4gKw0KPiA+ICsJ dmlpZl9kZXYtPm1hc2tlZF9nYW1tYV9wYXRoID0gMFU7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGh3 ZF92aWlmX2NzaTJyeF9zdGFydCh2aWlmX2Rldi0+aHdkX3JlcywgdmNfbWFpbiwgdmNfc3ViLA0K PiAmcGFja2V0KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2aWlmX2NzaTJyeF9z dG9wKHN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYpDQo+ID4gK3sNCj4gPiArCXMzMiByZXQ7 DQo+ID4gKw0KPiA+ICsJcmV0ID0gaHdkX3ZpaWZfY3NpMnJ4X3N0b3AodmlpZl9kZXYtPmh3ZF9y ZXMpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlkZXZfZXJyKHZpaWZfZGV2LT5kZXYsICJjc2ky cnhfc3RvcCBlcnJvci4gJWRcbiIsIHJldCk7DQo+ID4gKw0KPiA+ICsJaHdkX3ZpaWZfY3NpMnJ4 X3VuaW5pdGlhbGl6ZSh2aWlmX2Rldi0+aHdkX3Jlcyk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJl dDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogLS0tLS0gc3ViZGV2aWNlIHZpZGVvIG9wZXJhdGlv bnMgLS0tLS0gKi8NCj4gPiArc3RhdGljIGludCB2aXNjb250aV92aWlmX2lzcF9zX3N0cmVhbShz dHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgZW5hYmxlKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3Qg dmlpZl9kZXZpY2UgKnZpaWZfZGV2ID0gKChzdHJ1Y3QgaXNwX3N1YmRldiAqKXNkKS0+dmlpZl9k ZXY7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCWlmIChlbmFibGUpIHsNCj4gPiArCQly ZXQgPSB2aWlmX2NzaTJyeF9pbml0aWFsaXplKHZpaWZfZGV2KTsNCj4gPiArCQlpZiAocmV0KQ0K PiA+ICsJCQlyZXR1cm4gcmV0Ow0KPiA+ICsJCXJldHVybiB2aWlmX2NzaTJyeF9zdGFydCh2aWlm X2Rldik7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCXJldHVybiB2aWlmX2NzaTJyeF9zdG9wKHZp aWZfZGV2KTsNCj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogLS0tLS0gc3ViZGV2aWNl IHBhZCBvcGVyYXRpb25zIC0tLS0tICovDQo+ID4gK3N0YXRpYyBpbnQgdmlzY29udGlfdmlpZl9p c3BfZW51bV9tYnVzX2NvZGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCj4gPiArCQkJCQkgICAg c3RydWN0IHY0bDJfc3ViZGV2X3N0YXRlDQo+ICpzZF9zdGF0ZSwNCj4gPiArCQkJCQkgICAgc3Ry dWN0DQo+IHY0bDJfc3ViZGV2X21idXNfY29kZV9lbnVtICpjb2RlKQ0KPiA+ICt7DQo+ID4gKwlp ZiAoY29kZS0+cGFkID09IDApIHsNCj4gPiArCQkvKiBzaW5rICovDQo+ID4gKwkJaWYgKGNvZGUt PmluZGV4ID4gQVJSQVlfU0laRSh2aXNjb250aV9tYnVzX2Zvcm1hdHMpIC0gMSkNCj4gPiArCQkJ cmV0dXJuIC1FSU5WQUw7DQo+ID4gKwkJY29kZS0+Y29kZSA9IHZpc2NvbnRpX21idXNfZm9ybWF0 c1tjb2RlLT5pbmRleF0uY29kZTsNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwkvKiBzb3VyY2UgKi8NCj4gPiArCWlmIChjb2RlLT5pbmRleCA+IDApDQo+ID4gKwkJcmV0 dXJuIC1FSU5WQUw7DQo+ID4gKwljb2RlLT5jb2RlID0gTUVESUFfQlVTX0ZNVF9ZVVY4XzFYMjQ7 DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCB2NGwy X21idXNfZnJhbWVmbXQgKnZpc2NvbnRpX3ZpaWZfaXNwX2dldF9wYWRfZm10KHN0cnVjdA0KPiB2 NGwyX3N1YmRldiAqc2QsDQo+ID4gKwkJCQkJCQkJc3RydWN0DQo+IHY0bDJfc3ViZGV2X3N0YXRl ICpzZF9zdGF0ZSwNCj4gPiArCQkJCQkJCQl1bnNpZ25lZCBpbnQNCj4gcGFkLCB1MzIgd2hpY2gp DQo+ID4gK3sNCj4gPiArCXN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYgPSAoKHN0cnVjdCBp c3Bfc3ViZGV2ICopc2QpLT52aWlmX2RldjsNCj4gPiArCXN0cnVjdCB2NGwyX3N1YmRldl9zdGF0 ZSBzdGF0ZSA9IHsNCj4gPiArCQkucGFkcyA9IHZpaWZfZGV2LT5pc3Bfc3ViZGV2LnBhZF9jZmcs DQo+ID4gKwl9Ow0KPiA+ICsNCj4gPiArCWlmICh3aGljaCA9PSBWNEwyX1NVQkRFVl9GT1JNQVRf VFJZKQ0KPiA+ICsJCXJldHVybiB2NGwyX3N1YmRldl9nZXRfdHJ5X2Zvcm1hdCgmdmlpZl9kZXYt PmlzcF9zdWJkZXYuc2QsDQo+IHNkX3N0YXRlLCBwYWQpOw0KPiA+ICsJZWxzZQ0KPiA+ICsJCXJl dHVybiB2NGwyX3N1YmRldl9nZXRfdHJ5X2Zvcm1hdCgmdmlpZl9kZXYtPmlzcF9zdWJkZXYuc2Qs DQo+ICZzdGF0ZSwgcGFkKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCB2NGwy X3JlY3QgKnZpc2NvbnRpX3ZpaWZfaXNwX2dldF9wYWRfY3JvcChzdHJ1Y3QgdjRsMl9zdWJkZXYN Cj4gKnNkLA0KPiA+ICsJCQkJCQkJc3RydWN0DQo+IHY0bDJfc3ViZGV2X3N0YXRlICpzZF9zdGF0 ZSwNCj4gPiArCQkJCQkJCXVuc2lnbmVkIGludCBwYWQsDQo+IHUzMiB3aGljaCkNCj4gPiArew0K PiA+ICsJc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldiA9ICgoc3RydWN0IGlzcF9zdWJkZXYg KilzZCktPnZpaWZfZGV2Ow0KPiA+ICsJc3RydWN0IHY0bDJfc3ViZGV2X3N0YXRlIHN0YXRlID0g ew0KPiA+ICsJCS5wYWRzID0gdmlpZl9kZXYtPmlzcF9zdWJkZXYucGFkX2NmZywNCj4gPiArCX07 DQo+ID4gKw0KPiA+ICsJaWYgKHdoaWNoID09IFY0TDJfU1VCREVWX0ZPUk1BVF9UUlkpDQo+ID4g KwkJcmV0dXJuIHY0bDJfc3ViZGV2X2dldF90cnlfY3JvcCgmdmlpZl9kZXYtPmlzcF9zdWJkZXYu c2QsDQo+IHNkX3N0YXRlLCBwYWQpOw0KPiA+ICsJZWxzZQ0KPiA+ICsJCXJldHVybiB2NGwyX3N1 YmRldl9nZXRfdHJ5X2Nyb3AoJnZpaWZfZGV2LT5pc3Bfc3ViZGV2LnNkLA0KPiAmc3RhdGUsIHBh ZCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgdjRsMl9yZWN0ICp2aXNjb250 aV92aWlmX2lzcF9nZXRfcGFkX2NvbXBvc2Uoc3RydWN0DQo+IHY0bDJfc3ViZGV2ICpzZCwNCj4g PiArCQkJCQkJCSAgIHN0cnVjdA0KPiB2NGwyX3N1YmRldl9zdGF0ZSAqc2Rfc3RhdGUsDQo+ID4g KwkJCQkJCQkgICB1bnNpZ25lZCBpbnQgcGFkLA0KPiB1MzIgd2hpY2gpDQo+ID4gK3sNCj4gPiAr CXN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYgPSAoKHN0cnVjdCBpc3Bfc3ViZGV2ICopc2Qp LT52aWlmX2RldjsNCj4gPiArCXN0cnVjdCB2NGwyX3N1YmRldl9zdGF0ZSBzdGF0ZSA9IHsNCj4g PiArCQkucGFkcyA9IHZpaWZfZGV2LT5pc3Bfc3ViZGV2LnBhZF9jZmcsDQo+ID4gKwl9Ow0KPiA+ ICsNCj4gPiArCWlmICh3aGljaCA9PSBWNEwyX1NVQkRFVl9GT1JNQVRfVFJZKQ0KPiA+ICsJCXJl dHVybg0KPiB2NGwyX3N1YmRldl9nZXRfdHJ5X2NvbXBvc2UoJnZpaWZfZGV2LT5pc3Bfc3ViZGV2 LnNkLCBzZF9zdGF0ZSwgcGFkKTsNCj4gPiArCWVsc2UNCj4gPiArCQlyZXR1cm4NCj4gdjRsMl9z dWJkZXZfZ2V0X3RyeV9jb21wb3NlKCZ2aWlmX2Rldi0+aXNwX3N1YmRldi5zZCwgJnN0YXRlLCBw YWQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZpc2NvbnRpX3ZpaWZfaXNwX2dl dF9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0DQo+IHY0bDJfc3ViZGV2X3N0YXRl ICpzZF9zdGF0ZSwNCj4gPiArCQkJCSAgICAgc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCAqZm10 KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2ID0gKChzdHJ1Y3Qg aXNwX3N1YmRldiAqKXNkKS0+dmlpZl9kZXY7DQo+ID4gKw0KPiA+ICsJbXV0ZXhfbG9jaygmdmlp Zl9kZXYtPmlzcF9zdWJkZXYub3BzX2xvY2spOw0KPiA+ICsJZm10LT5mb3JtYXQgPSAqdmlzY29u dGlfdmlpZl9pc3BfZ2V0X3BhZF9mbXQoc2QsIHNkX3N0YXRlLCBmbXQtPnBhZCwNCj4gZm10LT53 aGljaCk7DQo+ID4gKwltdXRleF91bmxvY2soJnZpaWZfZGV2LT5pc3Bfc3ViZGV2Lm9wc19sb2Nr KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZv aWQgdmlzY29udGlfdmlpZl9pc3Bfc2V0X3NpbmtfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2Qs DQo+ID4gKwkJCQkJICAgc3RydWN0IHY0bDJfc3ViZGV2X3N0YXRlDQo+ICpzZF9zdGF0ZSwNCj4g PiArCQkJCQkgICBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10DQo+ICpmb3JtYXQsIHUzMiB3aGlj aCkNCj4gPiArew0KPiA+ICsJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqc2lua19mbXQsICpz cmMwX2ZtdCwgKnNyYzFfZm10LCAqc3JjMl9mbXQ7DQo+ID4gKw0KPiA+ICsJc2lua19mbXQgPSB2 aXNjb250aV92aWlmX2lzcF9nZXRfcGFkX2ZtdChzZCwgc2Rfc3RhdGUsDQo+IFZJSUZfSVNQX1BB RF9TSU5LLCB3aGljaCk7DQo+ID4gKwlzcmMwX2ZtdCA9IHZpc2NvbnRpX3ZpaWZfaXNwX2dldF9w YWRfZm10KHNkLCBzZF9zdGF0ZSwNCj4gVklJRl9JU1BfUEFEX1NSQ19QQVRIMCwgd2hpY2gpOw0K PiA+ICsJc3JjMV9mbXQgPSB2aXNjb250aV92aWlmX2lzcF9nZXRfcGFkX2ZtdChzZCwgc2Rfc3Rh dGUsDQo+IFZJSUZfSVNQX1BBRF9TUkNfUEFUSDEsIHdoaWNoKTsNCj4gPiArCXNyYzJfZm10ID0g dmlzY29udGlfdmlpZl9pc3BfZ2V0X3BhZF9mbXQoc2QsIHNkX3N0YXRlLA0KPiBWSUlGX0lTUF9Q QURfU1JDX1BBVEgyLCB3aGljaCk7DQo+ID4gKw0KPiA+ICsJLyogdXBkYXRlIG1idXMgY29kZSBv bmx5IGlmIGl0J3MgYXZhaWxhYmxlICovDQo+ID4gKwlpZiAodmlpZl9pc192YWxpZF9tYnVzX2Nv ZGUoZm9ybWF0LT5jb2RlKSkNCj4gPiArCQlzaW5rX2ZtdC0+Y29kZSA9IGZvcm1hdC0+Y29kZTsN Cj4gPiArDQo+ID4gKwkvKiBzaW5rOjptYnVzX2NvZGUgaXMgZGVyaXZlZCBmcm9tIHNyYzo6bWJ1 c19jb2RlICovDQo+ID4gKwlpZiAodmlpZl9nZXRfbWJ1c19yZ2Jfb3V0KHNpbmtfZm10LT5jb2Rl KSkgew0KPiA+ICsJCXNyYzBfZm10LT5jb2RlID0gTUVESUFfQlVTX0ZNVF9SR0I4ODhfMVgyNDsN Cj4gPiArCQlzcmMxX2ZtdC0+Y29kZSA9IE1FRElBX0JVU19GTVRfUkdCODg4XzFYMjQ7DQo+ID4g Kwl9IGVsc2Ugew0KPiA+ICsJCXNyYzBfZm10LT5jb2RlID0gTUVESUFfQlVTX0ZNVF9ZVVY4XzFY MjQ7DQo+ID4gKwkJc3JjMV9mbXQtPmNvZGUgPSBNRURJQV9CVVNfRk1UX1lVVjhfMVgyNDsNCj4g PiArCX0NCj4gPiArDQo+ID4gKwkvKiBTUkMyIChSQVcgb3V0cHV0KSBmb2xsb3dzIFNJTksgZm9y bWF0ICovDQo+ID4gKwlzcmMyX2ZtdC0+Y29kZSA9IGZvcm1hdC0+Y29kZTsNCj4gPiArCXNyYzJf Zm10LT53aWR0aCA9IGZvcm1hdC0+d2lkdGg7DQo+ID4gKwlzcmMyX2ZtdC0+aGVpZ2h0ID0gZm9y bWF0LT5oZWlnaHQ7DQo+ID4gKw0KPiA+ICsJLyogc2l6ZSBjaGVjayAqLw0KPiA+ICsJc2lua19m bXQtPndpZHRoID0gZm9ybWF0LT53aWR0aDsNCj4gPiArCXNpbmtfZm10LT5oZWlnaHQgPSBmb3Jt YXQtPmhlaWdodDsNCj4gPiArDQo+ID4gKwkqZm9ybWF0ID0gKnNpbmtfZm10Ow0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB2aXNjb250aV92aWlmX2lzcF9zZXRfc3JjX2ZtdChzdHJ1 Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPiA+ICsJCQkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X3N0YXRl ICpzZF9zdGF0ZSwNCj4gPiArCQkJCQkgIHN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKmZvcm1h dCwNCj4gdW5zaWduZWQgaW50IHBhZCwNCj4gPiArCQkJCQkgIHUzMiB3aGljaCkNCj4gPiArew0K PiA+ICsJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqc2lua19mbXQsICpzcmNfZm10Ow0KPiA+ ICsJc3RydWN0IHY0bDJfcmVjdCAqc3JjX2Nyb3A7DQo+ID4gKw0KPiA+ICsJc2lua19mbXQgPSB2 aXNjb250aV92aWlmX2lzcF9nZXRfcGFkX2ZtdChzZCwgc2Rfc3RhdGUsDQo+IFZJSUZfSVNQX1BB RF9TSU5LLA0KPiA+ICsNCj4gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRSk7DQo+ID4gKwlzcmNf Zm10ID0gdmlzY29udGlfdmlpZl9pc3BfZ2V0X3BhZF9mbXQoc2QsIHNkX3N0YXRlLCBwYWQsIHdo aWNoKTsNCj4gPiArCXNyY19jcm9wID0gdmlzY29udGlfdmlpZl9pc3BfZ2V0X3BhZF9jcm9wKHNk LCBzZF9zdGF0ZSwgcGFkLCB3aGljaCk7DQo+ID4gKw0KPiA+ICsJLyogc2luazo6bWJ1c19jb2Rl IGlzIGRlcml2ZWQgZnJvbSBzcmM6Om1idXNfY29kZSAqLw0KPiA+ICsJaWYgKHZpaWZfZ2V0X21i dXNfcmdiX291dChzaW5rX2ZtdC0+Y29kZSkpDQo+ID4gKwkJc3JjX2ZtdC0+Y29kZSA9IE1FRElB X0JVU19GTVRfUkdCODg4XzFYMjQ7DQo+ID4gKwllbHNlDQo+ID4gKwkJc3JjX2ZtdC0+Y29kZSA9 IE1FRElBX0JVU19GTVRfWVVWOF8xWDI0Ow0KPiA+ICsNCj4gPiArCS8qc2l6ZSBjaGVjayovDQo+ ID4gKwlzcmNfZm10LT53aWR0aCA9IGZvcm1hdC0+d2lkdGg7DQo+ID4gKwlzcmNfZm10LT5oZWln aHQgPSBmb3JtYXQtPmhlaWdodDsNCj4gPiArDQo+ID4gKwkvKnVwZGF0ZSBjcm9wKi8NCj4gPiAr CXNyY19jcm9wLT53aWR0aCA9IGZvcm1hdC0+d2lkdGg7DQo+ID4gKwlzcmNfY3JvcC0+aGVpZ2h0 ID0gZm9ybWF0LT5oZWlnaHQ7DQo+ID4gKw0KPiA+ICsJKmZvcm1hdCA9ICpzcmNfZm10Ow0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB2aXNjb250aV92aWlmX2lzcF9zZXRfc3JjX2Zt dF9yYXdwYXRoKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+ID4gKwkJCQkJCSAgc3RydWN0IHY0 bDJfc3ViZGV2X3N0YXRlDQo+ICpzZF9zdGF0ZSwNCj4gPiArCQkJCQkJICBzdHJ1Y3QNCj4gdjRs Ml9tYnVzX2ZyYW1lZm10ICpmb3JtYXQsDQo+ID4gKwkJCQkJCSAgdW5zaWduZWQgaW50IHBhZCwg dTMyDQo+IHdoaWNoKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpz aW5rX2ZtdCwgKnNyY19mbXQ7DQo+ID4gKw0KPiA+ICsJc2lua19mbXQgPSB2aXNjb250aV92aWlm X2lzcF9nZXRfcGFkX2ZtdChzZCwgc2Rfc3RhdGUsDQo+IFZJSUZfSVNQX1BBRF9TSU5LLA0KPiA+ ICsNCj4gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRSk7DQo+ID4gKwlzcmNfZm10ID0gdmlzY29u dGlfdmlpZl9pc3BfZ2V0X3BhZF9mbXQoc2QsIHNkX3N0YXRlLCBwYWQsIHdoaWNoKTsNCj4gPiAr DQo+ID4gKwkvKiBSQVdQQVRIIFNSQyBwYWQgaGFzIGp1c3QgdGhlIHNhbWUgY29uZmlndXJhdGlv biBhcyBTSU5LIHBhZCAqLw0KPiA+ICsJc3JjX2ZtdC0+Y29kZSA9IHNpbmtfZm10LT5jb2RlOw0K PiA+ICsJc3JjX2ZtdC0+d2lkdGggPSBzaW5rX2ZtdC0+d2lkdGg7DQo+ID4gKwlzcmNfZm10LT5o ZWlnaHQgPSBzaW5rX2ZtdC0+aGVpZ2h0Ow0KPiA+ICsNCj4gPiArCSpmb3JtYXQgPSAqc3JjX2Zt dDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2aXNjb250aV92aWlmX2lzcF9zZXRf Zm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdA0KPiB2NGwyX3N1YmRldl9zdGF0ZSAq c2Rfc3RhdGUsDQo+ID4gKwkJCQkgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgKmZtdCkN Cj4gPiArew0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldiA9ICgoc3RydWN0IGlz cF9zdWJkZXYgKilzZCktPnZpaWZfZGV2Ow0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2soJnZpaWZf ZGV2LT5pc3Bfc3ViZGV2Lm9wc19sb2NrKTsNCj4gPiArDQo+ID4gKwlpZiAoZm10LT5wYWQgPT0g VklJRl9JU1BfUEFEX1NJTkspDQo+ID4gKwkJdmlzY29udGlfdmlpZl9pc3Bfc2V0X3NpbmtfZm10 KHNkLCBzZF9zdGF0ZSwgJmZtdC0+Zm9ybWF0LA0KPiBmbXQtPndoaWNoKTsNCj4gPiArCWVsc2Ug aWYgKGZtdC0+cGFkID09IFZJSUZfSVNQX1BBRF9TUkNfUEFUSDIpDQo+ID4gKwkJdmlzY29udGlf dmlpZl9pc3Bfc2V0X3NyY19mbXRfcmF3cGF0aChzZCwgc2Rfc3RhdGUsDQo+ICZmbXQtPmZvcm1h dCwgZm10LT5wYWQsDQo+ID4gKwkJCQkJCSAgICAgIGZtdC0+d2hpY2gpOw0KPiA+ICsJZWxzZQ0K PiA+ICsJCXZpc2NvbnRpX3ZpaWZfaXNwX3NldF9zcmNfZm10KHNkLCBzZF9zdGF0ZSwgJmZtdC0+ Zm9ybWF0LA0KPiBmbXQtPnBhZCwgZm10LT53aGljaCk7DQo+ID4gKw0KPiA+ICsJbXV0ZXhfdW5s b2NrKCZ2aWlmX2Rldi0+aXNwX3N1YmRldi5vcHNfbG9jayk7DQo+ID4gKw0KPiA+ICsJcmV0dXJu IDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKyNkZWZpbmUgVklTQ09OVElfVklJRl9JU1BfREVGQVVM VF9XSURUSAkgIDE5MjANCj4gPiArI2RlZmluZSBWSVNDT05USV9WSUlGX0lTUF9ERUZBVUxUX0hF SUdIVCAgMTA4MA0KPiA+ICsjZGVmaW5lIFZJU0NPTlRJX1ZJSUZfTUFYX0NPTVBPU0VEX1dJRFRI ICA4MTkwDQo+ID4gKyNkZWZpbmUgVklTQ09OVElfVklJRl9NQVhfQ09NUE9TRURfSEVJR0hUIDQw OTQNCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdmlzY29udGlfdmlpZl9pc3BfaW5pdF9jb25maWco c3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0DQo+IHY0bDJfc3ViZGV2X3N0YXRlICpzZF9z dGF0ZSkNCj4gPiArew0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldiA9ICgoc3Ry dWN0IGlzcF9zdWJkZXYgKilzZCktPnZpaWZfZGV2Ow0KPiA+ICsJc3RydWN0IHY0bDJfbWJ1c19m cmFtZWZtdCAqc2lua19mbXQsICpzcmNfZm10Ow0KPiA+ICsJc3RydWN0IHY0bDJfcmVjdCAqc3Jj X2Nyb3AsICpzaW5rX2NvbXBvc2U7DQo+ID4gKw0KPiA+ICsJc2lua19mbXQgPQ0KPiA+ICsJCXY0 bDJfc3ViZGV2X2dldF90cnlfZm9ybWF0KCZ2aWlmX2Rldi0+aXNwX3N1YmRldi5zZCwNCj4gc2Rf c3RhdGUsIFZJSUZfSVNQX1BBRF9TSU5LKTsNCj4gPiArCXNpbmtfZm10LT53aWR0aCA9IFZJU0NP TlRJX1ZJSUZfSVNQX0RFRkFVTFRfV0lEVEg7DQo+ID4gKwlzaW5rX2ZtdC0+aGVpZ2h0ID0gVklT Q09OVElfVklJRl9JU1BfREVGQVVMVF9IRUlHSFQ7DQo+ID4gKwlzaW5rX2ZtdC0+ZmllbGQgPSBW NEwyX0ZJRUxEX05PTkU7DQo+ID4gKwlzaW5rX2ZtdC0+Y29kZSA9IE1FRElBX0JVU19GTVRfU1JH R0IxMF8xWDEwOw0KPiA+ICsNCj4gPiArCXNpbmtfY29tcG9zZSA9DQo+ID4gKwkJdjRsMl9zdWJk ZXZfZ2V0X3RyeV9jb21wb3NlKCZ2aWlmX2Rldi0+aXNwX3N1YmRldi5zZCwNCj4gc2Rfc3RhdGUs IFZJSUZfSVNQX1BBRF9TSU5LKTsNCj4gPiArCXNpbmtfY29tcG9zZS0+dG9wID0gMDsNCj4gPiAr CXNpbmtfY29tcG9zZS0+bGVmdCA9IDA7DQo+ID4gKwlzaW5rX2NvbXBvc2UtPndpZHRoID0gVklT Q09OVElfVklJRl9JU1BfREVGQVVMVF9XSURUSDsNCj4gPiArCXNpbmtfY29tcG9zZS0+aGVpZ2h0 ID0gVklTQ09OVElfVklJRl9JU1BfREVGQVVMVF9IRUlHSFQ7DQo+ID4gKw0KPiA+ICsJc3JjX2Zt dCA9IHY0bDJfc3ViZGV2X2dldF90cnlfZm9ybWF0KCZ2aWlmX2Rldi0+aXNwX3N1YmRldi5zZCwN Cj4gc2Rfc3RhdGUsDQo+ID4gKwkJCQkJICAgICBWSUlGX0lTUF9QQURfU1JDX1BBVEgwKTsNCj4g PiArCXNyY19mbXQtPndpZHRoID0gVklTQ09OVElfVklJRl9JU1BfREVGQVVMVF9XSURUSDsNCj4g PiArCXNyY19mbXQtPmhlaWdodCA9IFZJU0NPTlRJX1ZJSUZfSVNQX0RFRkFVTFRfSEVJR0hUOw0K PiA+ICsJc3JjX2ZtdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7DQo+ID4gKwlzcmNfZm10LT5j b2RlID0gTUVESUFfQlVTX0ZNVF9ZVVY4XzFYMjQ7DQo+ID4gKw0KPiA+ICsJc3JjX2Nyb3AgPSB2 NGwyX3N1YmRldl9nZXRfdHJ5X2Nyb3AoJnZpaWZfZGV2LT5pc3Bfc3ViZGV2LnNkLA0KPiBzZF9z dGF0ZSwNCj4gPiArCQkJCQkgICAgVklJRl9JU1BfUEFEX1NSQ19QQVRIMCk7DQo+ID4gKwlzcmNf Y3JvcC0+dG9wID0gMDsNCj4gPiArCXNyY19jcm9wLT5sZWZ0ID0gMDsNCj4gPiArCXNyY19jcm9w LT53aWR0aCA9IFZJU0NPTlRJX1ZJSUZfSVNQX0RFRkFVTFRfV0lEVEg7DQo+ID4gKwlzcmNfY3Jv cC0+aGVpZ2h0ID0gVklTQ09OVElfVklJRl9JU1BfREVGQVVMVF9IRUlHSFQ7DQo+ID4gKw0KPiA+ ICsJc3JjX2ZtdCA9IHY0bDJfc3ViZGV2X2dldF90cnlfZm9ybWF0KCZ2aWlmX2Rldi0+aXNwX3N1 YmRldi5zZCwNCj4gc2Rfc3RhdGUsDQo+ID4gKwkJCQkJICAgICBWSUlGX0lTUF9QQURfU1JDX1BB VEgxKTsNCj4gPiArCXNyY19mbXQtPndpZHRoID0gVklTQ09OVElfVklJRl9JU1BfREVGQVVMVF9X SURUSDsNCj4gPiArCXNyY19mbXQtPmhlaWdodCA9IFZJU0NPTlRJX1ZJSUZfSVNQX0RFRkFVTFRf SEVJR0hUOw0KPiA+ICsJc3JjX2ZtdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7DQo+ID4gKwlz cmNfZm10LT5jb2RlID0gTUVESUFfQlVTX0ZNVF9ZVVY4XzFYMjQ7DQo+ID4gKw0KPiA+ICsJc3Jj X2Nyb3AgPSB2NGwyX3N1YmRldl9nZXRfdHJ5X2Nyb3AoJnZpaWZfZGV2LT5pc3Bfc3ViZGV2LnNk LA0KPiBzZF9zdGF0ZSwNCj4gPiArCQkJCQkgICAgVklJRl9JU1BfUEFEX1NSQ19QQVRIMSk7DQo+ ID4gKwlzcmNfY3JvcC0+dG9wID0gMDsNCj4gPiArCXNyY19jcm9wLT5sZWZ0ID0gMDsNCj4gPiAr CXNyY19jcm9wLT53aWR0aCA9IFZJU0NPTlRJX1ZJSUZfSVNQX0RFRkFVTFRfV0lEVEg7DQo+ID4g KwlzcmNfY3JvcC0+aGVpZ2h0ID0gVklTQ09OVElfVklJRl9JU1BfREVGQVVMVF9IRUlHSFQ7DQo+ ID4gKw0KPiA+ICsJc3JjX2ZtdCA9IHY0bDJfc3ViZGV2X2dldF90cnlfZm9ybWF0KCZ2aWlmX2Rl di0+aXNwX3N1YmRldi5zZCwNCj4gc2Rfc3RhdGUsDQo+ID4gKwkJCQkJICAgICBWSUlGX0lTUF9Q QURfU1JDX1BBVEgyKTsNCj4gPiArCXNyY19mbXQtPndpZHRoID0gVklTQ09OVElfVklJRl9JU1Bf REVGQVVMVF9XSURUSDsNCj4gPiArCXNyY19mbXQtPmhlaWdodCA9IFZJU0NPTlRJX1ZJSUZfSVNQ X0RFRkFVTFRfSEVJR0hUOw0KPiA+ICsJc3JjX2ZtdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7 DQo+ID4gKwlzcmNfZm10LT5jb2RlID0gTUVESUFfQlVTX0ZNVF9TUkdHQjEwXzFYMTA7DQo+ID4g Kw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdmlzY29u dGlfdmlpZl9pc3BfZ2V0X3NlbGVjdGlvbihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPiA+ICsJ CQkJCSAgIHN0cnVjdCB2NGwyX3N1YmRldl9zdGF0ZQ0KPiAqc2Rfc3RhdGUsDQo+ID4gKwkJCQkJ ICAgc3RydWN0IHY0bDJfc3ViZGV2X3NlbGVjdGlvbiAqc2VsKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1 Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2ID0gKChzdHJ1Y3QgaXNwX3N1YmRldiAqKXNkKS0+dmlp Zl9kZXY7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpzaW5rX2ZtdDsNCj4gPiAr CWludCByZXQgPSAtRUlOVkFMOw0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2soJnZpaWZfZGV2LT5p c3Bfc3ViZGV2Lm9wc19sb2NrKTsNCj4gPiArCWlmIChzZWwtPnBhZCA9PSBWSUlGX0lTUF9QQURf U0lOSykgew0KPiA+ICsJCS8qIFNJTksgUEFEICovDQo+ID4gKwkJc3dpdGNoIChzZWwtPnRhcmdl dCkgew0KPiA+ICsJCWNhc2UgVjRMMl9TRUxfVEdUX0NST1A6DQo+ID4gKwkJCXNpbmtfZm10ID0g dmlzY29udGlfdmlpZl9pc3BfZ2V0X3BhZF9mbXQoc2QsIHNkX3N0YXRlLA0KPiBWSUlGX0lTUF9Q QURfU0lOSywNCj4gPiArDQo+IHNlbC0+d2hpY2gpOw0KPiA+ICsJCQlzZWwtPnIudG9wID0gMDsN Cj4gPiArCQkJc2VsLT5yLmxlZnQgPSAwOw0KPiA+ICsJCQlzZWwtPnIud2lkdGggPSBzaW5rX2Zt dC0+d2lkdGg7DQo+ID4gKwkJCXNlbC0+ci5oZWlnaHQgPSBzaW5rX2ZtdC0+aGVpZ2h0Ow0KPiA+ ICsJCQlyZXQgPSAwOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQljYXNlIFY0TDJfU0VMX1RHVF9D T01QT1NFOg0KPiA+ICsJCQlzZWwtPnIgPSAqdmlzY29udGlfdmlpZl9pc3BfZ2V0X3BhZF9jb21w b3NlKHNkLA0KPiBzZF9zdGF0ZSwgVklJRl9JU1BfUEFEX1NJTkssDQo+ID4gKw0KPiBzZWwtPndo aWNoKTsNCj4gPiArCQkJcmV0ID0gMDsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJY2FzZSBWNEwy X1NFTF9UR1RfQ09NUE9TRV9CT1VORFM6DQo+ID4gKwkJCS8qIGZpeGVkIHZhbHVlICovDQo+ID4g KwkJCXNlbC0+ci50b3AgPSAwOw0KPiA+ICsJCQlzZWwtPnIubGVmdCA9IDA7DQo+ID4gKwkJCXNl bC0+ci53aWR0aCA9DQo+IFZJU0NPTlRJX1ZJSUZfTUFYX0NPTVBPU0VEX1dJRFRIOw0KPiA+ICsJ CQlzZWwtPnIuaGVpZ2h0ID0NCj4gVklTQ09OVElfVklJRl9NQVhfQ09NUE9TRURfSEVJR0hUOw0K PiA+ICsJCQlyZXQgPSAwOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQl9DQo+ID4gKwl9IGVsc2Ug aWYgKChzZWwtPnBhZCA9PSBWSUlGX0lTUF9QQURfU1JDX1BBVEgwKSB8fCAoc2VsLT5wYWQgPT0N Cj4gVklJRl9JU1BfUEFEX1NSQ19QQVRIMSkpIHsNCj4gPiArCQkvKiBTUkMgUEFEICovDQo+ID4g KwkJc3dpdGNoIChzZWwtPnRhcmdldCkgew0KPiA+ICsJCWNhc2UgVjRMMl9TRUxfVEdUX0NST1A6 DQo+ID4gKwkJCXNlbC0+ciA9DQo+ID4gKwkJCQkqdmlzY29udGlfdmlpZl9pc3BfZ2V0X3BhZF9j cm9wKHNkLCBzZF9zdGF0ZSwNCj4gc2VsLT5wYWQsIHNlbC0+d2hpY2gpOw0KPiA+ICsJCQlyZXQg PSAwOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKwltdXRleF91bmxv Y2soJnZpaWZfZGV2LT5pc3Bfc3ViZGV2Lm9wc19sb2NrKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4g cmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZpc2NvbnRpX3ZpaWZfaXNwX3Nl dF9zZWxlY3Rpb24oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCj4gPiArCQkJCQkgICBzdHJ1Y3Qg djRsMl9zdWJkZXZfc3RhdGUNCj4gKnNkX3N0YXRlLA0KPiA+ICsJCQkJCSAgIHN0cnVjdCB2NGwy X3N1YmRldl9zZWxlY3Rpb24gKnNlbCkNCj4gPiArew0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNl ICp2aWlmX2RldiA9ICgoc3RydWN0IGlzcF9zdWJkZXYgKilzZCktPnZpaWZfZGV2Ow0KPiA+ICsJ c3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqc3JjX2ZtdDsNCj4gPiArCXN0cnVjdCB2NGwyX3Jl Y3QgKnJlY3QsICpyZWN0X2NvbXBvc2U7DQo+ID4gKwlpbnQgcmV0ID0gLUVJTlZBTDsNCj4gPiAr DQo+ID4gKwltdXRleF9sb2NrKCZ2aWlmX2Rldi0+aXNwX3N1YmRldi5vcHNfbG9jayk7DQo+ID4g KwkvKiBvbmx5IHNvdXJjZTo6c2VsZWN0aW9uOjpjcm9wIGlzIHdyaXRhYmxlICovDQo+ID4gKwlp ZiAoc2VsLT5wYWQgPT0gVklJRl9JU1BfUEFEX1NSQ19QQVRIMCB8fCBzZWwtPnBhZCA9PQ0KPiBW SUlGX0lTUF9QQURfU1JDX1BBVEgxKSB7DQo+ID4gKwkJc3dpdGNoIChzZWwtPnRhcmdldCkgew0K PiA+ICsJCWNhc2UgVjRMMl9TRUxfVEdUX0NST1A6IHsNCj4gPiArCQkJLyogY2hlY2sgaWYgbmV3 IFNSQzo6Q1JPUCBpcyBpbnNpZGUgU0lOSzo6Q09NUE9TRQ0KPiAqLw0KPiA+ICsJCQlyZWN0X2Nv bXBvc2UgPSB2aXNjb250aV92aWlmX2lzcF9nZXRfcGFkX2NvbXBvc2UoDQo+ID4gKwkJCQlzZCwg c2Rfc3RhdGUsIFZJSUZfSVNQX1BBRF9TSU5LLA0KPiBzZWwtPndoaWNoKTsNCj4gPiArCQkJaWYg KHNlbC0+ci50b3AgPCByZWN0X2NvbXBvc2UtPnRvcCB8fCBzZWwtPnIubGVmdCA8DQo+IHJlY3Rf Y29tcG9zZS0+bGVmdCB8fA0KPiA+ICsJCQkgICAgKHNlbC0+ci50b3AgKyBzZWwtPnIuaGVpZ2h0 KSA+DQo+ID4gKwkJCQkgICAgKHJlY3RfY29tcG9zZS0+dG9wICsNCj4gcmVjdF9jb21wb3NlLT5o ZWlnaHQpIHx8DQo+ID4gKwkJCSAgICAoc2VsLT5yLmxlZnQgKyBzZWwtPnIud2lkdGgpID4NCj4g PiArCQkJCSAgICAocmVjdF9jb21wb3NlLT5sZWZ0ICsNCj4gcmVjdF9jb21wb3NlLT53aWR0aCkp IHsNCj4gPiArCQkJCWJyZWFrOw0KPiA+ICsJCQl9DQo+ID4gKw0KPiA+ICsJCQlyZWN0ID0gdmlz Y29udGlfdmlpZl9pc3BfZ2V0X3BhZF9jcm9wKHNkLCBzZF9zdGF0ZSwNCj4gc2VsLT5wYWQsIHNl bC0+d2hpY2gpOw0KPiA+ICsJCQkqcmVjdCA9IHNlbC0+cjsNCj4gPiArDQo+ID4gKwkJCS8qIHVw ZGF0ZSBTUkM6OkZNVCBhbG9uZyB3aXRoIFNSQzo6Q1JPUCAqLw0KPiA+ICsJCQlzcmNfZm10ID0g dmlzY29udGlfdmlpZl9pc3BfZ2V0X3BhZF9mbXQoc2QsIHNkX3N0YXRlLA0KPiBzZWwtPnBhZCwg c2VsLT53aGljaCk7DQo+ID4gKwkJCXNyY19mbXQtPndpZHRoID0gc2VsLT5yLndpZHRoOw0KPiA+ ICsJCQlzcmNfZm10LT5oZWlnaHQgPSBzZWwtPnIuaGVpZ2h0Ow0KPiA+ICsJCQlyZXQgPSAwOw0K PiA+ICsJCQlicmVhazsNCj4gPiArCQl9DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsJbXV0ZXhf dW5sb2NrKCZ2aWlmX2Rldi0+aXNwX3N1YmRldi5vcHNfbG9jayk7DQo+ID4gKw0KPiA+ICsJcmV0 dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZCB2aXNjb250aV92aWlmX2lzcF9zZXRf Y29tcG9zZV9yZWN0KHN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYsDQo+ID4gKwkJCQkJc3Ry dWN0IHZpaWZfbDJfcm9pX2NvbmZpZyAqcm9pKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9y ZWN0ICpyZWN0Ow0KPiA+ICsNCj4gPiArCXJlY3QgPSB2aXNjb250aV92aWlmX2lzcF9nZXRfcGFk X2NvbXBvc2UoJnZpaWZfZGV2LT5pc3Bfc3ViZGV2LnNkLA0KPiBOVUxMLCBWSUlGX0lTUF9QQURf U0lOSywNCj4gPiArDQo+IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUpOw0KPiA+ICsJcmVjdC0+ dG9wID0gMDsNCj4gPiArCXJlY3QtPmxlZnQgPSAwOw0KPiA+ICsJcmVjdC0+d2lkdGggPSByb2kt PmNvcnJlY3RlZF9oc2l6ZVswXTsNCj4gPiArCXJlY3QtPmhlaWdodCA9IHJvaS0+Y29ycmVjdGVk X3ZzaXplWzBdOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1lZGlh X2VudGl0eV9vcGVyYXRpb25zIHZpc2NvbnRpX3ZpaWZfaXNwX21lZGlhX29wcyA9IHsNCj4gPiAr CS5saW5rX3ZhbGlkYXRlID0gdjRsMl9zdWJkZXZfbGlua192YWxpZGF0ZSwNCj4gPiArfTsNCj4g PiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX29wcyB2aXNjb250 aV92aWlmX2lzcF9wYWRfb3BzID0gew0KPiA+ICsJLmVudW1fbWJ1c19jb2RlID0gdmlzY29udGlf dmlpZl9pc3BfZW51bV9tYnVzX2NvZGUsDQo+ID4gKwkuZ2V0X3NlbGVjdGlvbiA9IHZpc2NvbnRp X3ZpaWZfaXNwX2dldF9zZWxlY3Rpb24sDQo+ID4gKwkuc2V0X3NlbGVjdGlvbiA9IHZpc2NvbnRp X3ZpaWZfaXNwX3NldF9zZWxlY3Rpb24sDQo+ID4gKwkuaW5pdF9jZmcgPSB2aXNjb250aV92aWlm X2lzcF9pbml0X2NvbmZpZywNCj4gPiArCS5nZXRfZm10ID0gdmlzY29udGlfdmlpZl9pc3BfZ2V0 X2ZtdCwNCj4gPiArCS5zZXRfZm10ID0gdmlzY29udGlfdmlpZl9pc3Bfc2V0X2ZtdCwNCj4gPiAr CS5saW5rX3ZhbGlkYXRlID0gdjRsMl9zdWJkZXZfbGlua192YWxpZGF0ZV9kZWZhdWx0LA0KPiA+ ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19v cHMgdmlzY29udGlfdmlpZl9pc3BfdmlkZW9fb3BzID0gew0KPiA+ICsJLnNfc3RyZWFtID0gdmlz Y29udGlfdmlpZl9pc3Bfc19zdHJlYW0sDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29u c3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyB2aXNjb250aV92aWlmX2lzcF9vcHMgPSB7DQo+ID4g KwkudmlkZW8gPSAmdmlzY29udGlfdmlpZl9pc3BfdmlkZW9fb3BzLA0KPiA+ICsJLnBhZCA9ICZ2 aXNjb250aV92aWlmX2lzcF9wYWRfb3BzLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyogLS0tLS0g cmVnaXN0ZXIvcmVtb3ZlIGlzcCBzdWJkZXZpY2Ugbm9kZSAtLS0tLSAqLw0KPiA+ICtpbnQgdmlz Y29udGlfdmlpZl9pc3BfcmVnaXN0ZXIoc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldikNCj4g PiArew0KPiA+ICsJc3RydWN0IHY0bDJfc3ViZGV2X3N0YXRlIHN0YXRlID0gew0KPiA+ICsJCS5w YWRzID0gdmlpZl9kZXYtPmlzcF9zdWJkZXYucGFkX2NmZywNCj4gPiArCX07DQo+ID4gKwlzdHJ1 Y3QgbWVkaWFfcGFkICpwYWRzID0gdmlpZl9kZXYtPmlzcF9zdWJkZXYucGFkczsNCj4gPiArCXN0 cnVjdCB2NGwyX3N1YmRldiAqc2QgPSAmdmlpZl9kZXYtPmlzcF9zdWJkZXYuc2Q7DQo+ID4gKwlp bnQgcmV0Ow0KPiA+ICsNCj4gPiArCXZpaWZfZGV2LT5pc3Bfc3ViZGV2LnZpaWZfZGV2ID0gdmlp Zl9kZXY7DQo+ID4gKw0KPiA+ICsJdjRsMl9zdWJkZXZfaW5pdChzZCwgJnZpc2NvbnRpX3ZpaWZf aXNwX29wcyk7DQo+ID4gKwlzZC0+ZmxhZ3MgfD0gVjRMMl9TVUJERVZfRkxfSEFTX0RFVk5PREU7 DQo+ID4gKwlzZC0+ZW50aXR5Lm9wcyA9ICZ2aXNjb250aV92aWlmX2lzcF9tZWRpYV9vcHM7DQo+ ID4gKwlzZC0+ZW50aXR5LmZ1bmN0aW9uID0gTUVESUFfRU5UX0ZfUFJPQ19WSURFT19TQ0FMRVI7 DQo+ID4gKwlzZC0+b3duZXIgPSBUSElTX01PRFVMRTsNCj4gPiArCXN0cnNjcHkoc2QtPm5hbWUs ICJ2aXNjb250aS12aWlmOmlzcCIsIHNpemVvZihzZC0+bmFtZSkpOw0KPiA+ICsNCj4gPiArCXBh ZHNbMF0uZmxhZ3MgPSBNRURJQV9QQURfRkxfU0lOSyB8DQo+IE1FRElBX1BBRF9GTF9NVVNUX0NP Tk5FQ1Q7DQo+ID4gKwlwYWRzWzFdLmZsYWdzID0gTUVESUFfUEFEX0ZMX1NPVVJDRSB8DQo+IE1F RElBX1BBRF9GTF9NVVNUX0NPTk5FQ1Q7DQo+ID4gKwlwYWRzWzJdLmZsYWdzID0gTUVESUFfUEFE X0ZMX1NPVVJDRSB8DQo+IE1FRElBX1BBRF9GTF9NVVNUX0NPTk5FQ1Q7DQo+ID4gKwlwYWRzWzNd LmZsYWdzID0gTUVESUFfUEFEX0ZMX1NPVVJDRSB8DQo+IE1FRElBX1BBRF9GTF9NVVNUX0NPTk5F Q1Q7DQo+ID4gKw0KPiA+ICsJbXV0ZXhfaW5pdCgmdmlpZl9kZXYtPmlzcF9zdWJkZXYub3BzX2xv Y2spOw0KPiA+ICsNCj4gPiArCXJldCA9IG1lZGlhX2VudGl0eV9wYWRzX2luaXQoJnNkLT5lbnRp dHksIDQsIHBhZHMpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWRldl9lcnIodmlpZl9kZXYt PmRldiwgIkZhaWxlZCBvbiBtZWRpYV9lbnRpdHlfcGFkc19pbml0XG4iKTsNCj4gPiArCQlyZXR1 cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVy X3N1YmRldigmdmlpZl9kZXYtPnY0bDJfZGV2LCBzZCk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4g KwkJZGV2X2Vycih2aWlmX2Rldi0+ZGV2LCAiRmFpbGVkIHRvIHJlc2l6ZSBJU1Agc3ViZGV2XG4i KTsNCj4gPiArCQlnb3RvIGVycl9jbGVhbnVwX21lZGlhX2VudGl0eTsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwl2aXNjb250aV92aWlmX2lzcF9pbml0X2NvbmZpZyhzZCwgJnN0YXRlKTsNCj4gPiAr DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArDQo+ID4gK2Vycl9jbGVhbnVwX21lZGlhX2VudGl0eToN Cj4gPiArCW1lZGlhX2VudGl0eV9jbGVhbnVwKCZzZC0+ZW50aXR5KTsNCj4gPiArCXJldHVybiBy ZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQgdmlzY29udGlfdmlpZl9pc3BfdW5yZWdpc3Rl cihzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2KQ0KPiA+ICt7DQo+ID4gKwl2NGwyX2Rldmlj ZV91bnJlZ2lzdGVyX3N1YmRldigmdmlpZl9kZXYtPmlzcF9zdWJkZXYuc2QpOw0KPiA+ICsJbWVk aWFfZW50aXR5X2NsZWFudXAoJnZpaWZfZGV2LT5pc3Bfc3ViZGV2LnNkLmVudGl0eSk7DQo+ID4g K30NCj4gDQo+IFJlZ2FyZHMsDQo+IA0KPiAJSGFucw0KDQpSZWdhcmRzLA0KWXVqaSBJc2hpa2F3 YQ0K