From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D04B4C61DA3 for ; Tue, 21 Feb 2023 20:00:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229816AbjBUUAD (ORCPT ); Tue, 21 Feb 2023 15:00:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49984 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229584AbjBUUAC (ORCPT ); Tue, 21 Feb 2023 15:00:02 -0500 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2076.outbound.protection.outlook.com [40.107.244.76]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7E2552820B for ; Tue, 21 Feb 2023 11:59:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=G+f2hApW8hlT3JGtbVA7Ag44moSaqbbtRA+ONGdEhUqGpYclgihrn5hchNVTLoKzOaprQy2wBmqAdeD0thwRBMJMhmRBux8H697H7d+bIDJtZrf5CmI/734iqIgIbOsweHz18SE6AhE4bXzDKo1zAFFwl15u4I1eqHCyeVHYgo2jOdv7RJs7PQhp/FSHCi88H+s1cR5eKZp8nRyiqETRT24FiF7M/XQ5la70lxpRCrptmfksWMacUTVBcISapDCprDtfiHWNgAeQly8/UftklL++cUrrvGb3dnYb/fLxqJsmoXKmxh6orfpX0lai7ZNxzm9X1jHSvrGx7DqexMvkyg== 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=1OgKqZJL53GiE5A4/zQVGPhveY85/58tRxzKwkDgrDg=; b=aklx2kZIrUTTMJG08Ns62CdiyRvv5Se1066fy/8cbDfQXy9Vilx/G/tFsUhFRk8QqtYImP2BJAIhk/bmmo7hYH8ChYRprPNXLwARM7lvVoi2EZBlD9YI1gTfkn0SRKOUqEgRJ+OSGtKTUxhM3FMBZd2S7xCz7bzr92RoSLq31vBudU4vQgq8xJwVnLrUPDyYbLzR43ijEPknTLQs4hapMwqVXrC5+uXkrQoXDz/G9/Gl/SdZQtyGXJqtIWRa1FsmecDtKGeflLn5eYKhLfxcBqgaijDj0PE29BjSEoGWOWonKCOd6gNAbEqiVsZy9wIiQsgz85hHja9GUpQoXXe4vQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1OgKqZJL53GiE5A4/zQVGPhveY85/58tRxzKwkDgrDg=; b=WYzBp2OmSbBa17LN+yvd3wMRv725YiyPMd+iNLNDZ365J7adVaGjLWJl3/ljFM20NX2AifTPmpb7gg/AP4K7/yHFxcsgksO8K2ZWFcRTY/JOg9yPD/DLQ2A2VDbFxksSMwYWytcKf/CIWCOkP+Bv/Qq1hv12nvYBXHMagXlANc6F/ptA78gBJfFulruntenFJ4j4a3z+3xonABULixNra18F7Hh9wHS3VXm20bJSvARGyaOuloHnLAb/LZnGE1j9JRettETAWOFKX1R8kFlMG5JVIkHSODj7uiXFDY4yn/bR+JKChCXrl7NyQR5rDg/d6908QPO+DdEARPAXewGPIQ== Received: from MW2PR12MB4667.namprd12.prod.outlook.com (2603:10b6:302:12::28) by CYYPR12MB8701.namprd12.prod.outlook.com (2603:10b6:930:bf::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6111.21; Tue, 21 Feb 2023 19:58:48 +0000 Received: from MW2PR12MB4667.namprd12.prod.outlook.com ([fe80::4aaa:495:78b4:1d7c]) by MW2PR12MB4667.namprd12.prod.outlook.com ([fe80::4aaa:495:78b4:1d7c%3]) with mapi id 15.20.6111.020; Tue, 21 Feb 2023 19:58:48 +0000 From: Chaitanya Kulkarni To: Ming Lei , Shin'ichiro Kawasaki CC: "linux-block@vger.kernel.org" Subject: Re: [PATCH blktests v3 1/2] src: add mini ublk source code Thread-Topic: [PATCH blktests v3 1/2] src: add mini ublk source code Thread-Index: AQHZRN4jBspW8PKiiEGICIq9yrMGKK7Z1BYA Date: Tue, 21 Feb 2023 19:58:48 +0000 Message-ID: References: <20230220034649.1522978-1-ming.lei@redhat.com> <20230220034649.1522978-2-ming.lei@redhat.com> In-Reply-To: <20230220034649.1522978-2-ming.lei@redhat.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MW2PR12MB4667:EE_|CYYPR12MB8701:EE_ x-ms-office365-filtering-correlation-id: 6438d1a4-327b-4bd6-14b1-08db14460bc3 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: LhC0QelaPboJA5enZb3eAQ0Dpwqmxyr7+IFvlems42/iNv/2Tcr7SzbKX67vQqCHc9Be0RJ4q9qb38qM+rGaOh264KSdYWtxocC/yb+8N36CrPD8O2xkEfDHl1K6h68YCrZyFvKXgP3bMkMI9InB/sa8c/qI7g4RE+BI5Tu4Hj1eBmofMyFwvTTwaZHf/vhKhoRXhHZdYkW2A9TG0BXyKH7/zrxBgrHr3zUzmZUC9iDNY4BL6amgeDfCepr5zAAtnYQHa+7pcVGpZfTvxsJTRUuyMpak0z9JEGOL4RAVbEAzwpvhlifTe3lYO5GsrVlo1oeHr2mgocouM1rJ94Oe1LalBUHqxlLZEb6cfjn6/ENlCsGw/AoE6kwV+r8R2HopfwpUugI6CoX8hYsliOMyffIWMnfj1i/gRM9uhhs1eXaa6RYWWwHKFOFy37E+NfLTaXfPtuayCzvUuiVvXg74NUzOVMljRqWqLJsyGcEoNCNA6z7u/d6+QL0U4E3duGfH9Z9Uq8IHHhMZEyaNCYdOGvYtgpZQJjuxGUY2SL79tjb5aelfa4JeSCJ1w1v17cyIRoI6XkYiI/gXl3s1dhIVyfh/jbcKpBA7UVUvcLCKIqWgRvDjstuzBB9Q3zhPigW01MgypS8cCaXm6sqI8fevCSKhTatljCqdRUJ2cB7DBZ4oBZdiy3FZ5ldLgOtJ4Yz86wv9udYampVyBn4DaO4qcbN4B7xxA3YW/Nl2W7pSR+OdGgfD1VMuzhMLcG/qCvwMxmIbT9UWSRxiY9PG0mNafA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW2PR12MB4667.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230025)(4636009)(366004)(396003)(39860400002)(136003)(346002)(376002)(451199018)(31686004)(36756003)(8936002)(5660300002)(316002)(41300700001)(2616005)(8676002)(64756008)(66556008)(66446008)(186003)(66476007)(4326008)(6512007)(26005)(31696002)(86362001)(2906002)(83380400001)(76116006)(6506007)(53546011)(122000001)(66946007)(110136005)(71200400001)(478600001)(6486002)(91956017)(30864003)(38100700002)(38070700005)(45980500001)(43740500002)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Sk9jOHQxaEg5YVRkTUZaSmZpYU1aWmFZanpSYVp1V21oazk1RHh0UGZsTitB?= =?utf-8?B?YVZ1N2lHQ0ZYUEFmQWE0bkNiMWZCOVZ1M2JWMDFsRlBlOVFyT3MxNFVwY2l5?= =?utf-8?B?MVBrM1h5dTZyMVo2YU1BS3Z0UVJrWmNmeTVvaVZobGNUZU1ZbUR6Nit0alBY?= =?utf-8?B?TUFKMUVXKzduUzgwNUMyemJOVzRha3ZqR1J5WGorM1V4YXBTZXUzT2Y4a21L?= =?utf-8?B?bk5uL3IzdXBPcGNpcEJkUU5KWEhMTzA3Q1h4RE9HS09JUTYrajh5V2lOZE5i?= =?utf-8?B?dW1uZ0VNOGk4OEM4S1BqNll0cEJSL1drMTgxdzJFYXl2UzVOcmovZlVFdG1z?= =?utf-8?B?MXYveXRwL2E1Yy9yK2hzZ0tnZWlWMXBLQm1Ec0lQT0hjZ2k0d2Nla0dtUXRL?= =?utf-8?B?ckRlUXZId1J2SzUra2ZobVJPemE4TDFUS2ZYMXYwbmZrbmxZQ0VFZ1F0Y2Vn?= =?utf-8?B?cVB2eHRidUdnRmlQdXE3WVhXTXJ0V01WWmZJSTFGU3NzdGNBdUZkRWgycG14?= =?utf-8?B?cWpTWFlPd2RIVzBhdVgwNWZEU1Zxckxxd29BM3ZlMHZtNkJBa0V6dzdjRk82?= =?utf-8?B?ejUzUDFQbWRaR1FaM2FsaUVNNjBnRTlBL3BwazZoUzZKUGlqOUVWU3p4cHdI?= =?utf-8?B?eGRLVWFFNUYvMFVwWmZaejFTSUhFYlpUQXM2M3FMMzFUTDY1S25tMHZqb1l5?= =?utf-8?B?ZWQzdkFtL0puNVlVelRPTm5pdEV2QU03VG9uNGVaMmEvWXN1bnE5ckpVMFBC?= =?utf-8?B?eWdJWnNmZkxOOVoxZXYxeVBaVjhmelVSRk9VM2JxSzhVN3p0L0VzT3ozZWRL?= =?utf-8?B?Q2JyUWUzQm1BQVFvYUREaEIzUjh6RjZ0NVNiZ0tNSERKelpabC9KbXJGRWEx?= =?utf-8?B?RnU1c3ZoS0c3aG5tVTgrRkh5Tys4dXNNMmVMcks4OVVoQU5VTGl2THdiYnJV?= =?utf-8?B?N1pLRnJoTkM5dUJRMkZNck1mbHJxYzdvZXlPQ3NRdDBsVXI4U0o1U3pXYXly?= =?utf-8?B?bGE4VTFtNnByZmRybVdUN1pVTEJDMkRaVldTY1ExZm9YUmRSMU1IU2Y4c25m?= =?utf-8?B?WTY1NCtZUlZ6OHlrcFg1QWVISWQ4N2V2ejNtZU5RRitFZ2VyMnBGeXo4aGVL?= =?utf-8?B?NW85eEhkZHBaZFNtMjZidnlOODl0ZXJUSEhiOVluYUR4b3ByUUdjY0EyN2FQ?= =?utf-8?B?ckd3MEN1Z0ZQclc3Z2ZKcWlCQUtBT1JGR2h0U2VsYjVIUFdBYWswTjdJMXVD?= =?utf-8?B?M0JJdTZMVHp3SERJV3BnSkZkWjZESGNoRHZWZ2h3eWdYb1VsYXRpZGt4TE5h?= =?utf-8?B?K2IxekpyUlNrZTE0L3RUOU5NLzY2blZ2ZHdKSXFtWkYvcGhCZnA0OHIyUzFq?= =?utf-8?B?eTEwR0pneUVTeUZMZytON0l1YjBHTStMNjZ1YVZrMkQzeFJhQW8vdmNtTjlE?= =?utf-8?B?T2QwWmVJc0x0NGdzT1BidjI3S1J3OEhvRTdUcnhQSXRmZVhucXdPR2hyUURX?= =?utf-8?B?ZDc4amZPOHJhc204QzFUMG1CVklvaWttZzVZVVAzaEVXSDd0dTlPMVBvK3BU?= =?utf-8?B?RWJ5MzNSeHhvSlV6OVN3KzFvR080T2FYUkRFUnFETkFrajJaODRTcDFPWTV2?= =?utf-8?B?b29yVTlHQ2w2ZDROZHh2aUxINnA3T0o3V2RzZG0wWnJkV2J2bThZd2UvbGJQ?= =?utf-8?B?d2xTb2JYT3NwU2FCWlJRd2l0QXdmUi9wYVNNanZIMXY4ZWlJeXJMQnl5UkdW?= =?utf-8?B?dkl2cUo2cTh3N2dKeGlIV3RycFk1a3ovakFBdGFGcUh2TjVVS1M1RHNzTDFw?= =?utf-8?B?eHpxTHh0Y2RYOGtHK2dvVlpMdUthZk5CN0JqRmpBTW01Tm1qY0p1MXRCQWNC?= =?utf-8?B?bkFnYVZERmZ6RWFJY1MwZDJCd3pKcC9zOUhHQkhDNmFGRzg0WVVKZlp3MEhs?= =?utf-8?B?dkxPZGhvUXpxTm5Ic082Rjl0ZnBnM3ZJclRzeFVWbVhmK3R5aCt6RWROd293?= =?utf-8?B?UlViZXBkRFdxWWJNSTlOQmsraVlJSi9FZml5dHBrZXNJK2tDQkNSd1J5ZFV2?= =?utf-8?B?NGhhRVdCd2dTYW5xZVdHSVpRT0ZIVW92NFpBdHZmaTFFN0Q2bFBlaEF5TlZD?= =?utf-8?Q?u6olZDVi13i+asiiK9tCxe9wx?= Content-Type: text/plain; charset="utf-8" Content-ID: <9B2306469A2AC445836CC678E941138A@namprd12.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW2PR12MB4667.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6438d1a4-327b-4bd6-14b1-08db14460bc3 X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Feb 2023 19:58:48.0345 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ae8HojyFAUUfQcnCsPBzoKnRuNI9Jl+/6mjhcnZw19RdcUaN62itb81TMyS6LNGa6WoM3n2XJ8s+6GPR/WDz6A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CYYPR12MB8701 Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org T24gMi8xOS8yMDIzIDc6NDYgUE0sIE1pbmcgTGVpIHdyb3RlOg0KPiBQcmVwYXJlIGZvciBhZGRp bmcgdWJsayByZWxhdGVkIHRlc3Q6DQo+IA0KPiAxKSB1YmxrIGRlbGV0ZSBpcyBzeW5jIHJlbW92 YWwsIHRoaXMgd2F5IGlzIGNvbnZlbmllbnQgdG8NCj4gICAgIGJsa2cvcXVldWUvZGlzayBpbnN0 YW5jZSBsZWFrIGlzc3VlDQo+IA0KPiAyKSBtaW5pIHVibGsgaGFzIHR3byBidWlsdGluIHRhcmdl dChudWxsLCBsb29wKSwgYW5kIGxvb3AgSU8gaXMNCj4gaGFuZGxlZCBieSBpb191cmluZywgc28g d2UgY2FuIHVzZSB1YmxrIHRvIGNvdmVyIHBhcnQgb2YgaW9fdXJpbmcNCj4gd29ya2xvYWRzDQo+ IA0KPiAzKSBub3QgbGlrZSBsb29wL25iZCwgdWJsayB3b24ndCBwcmUtYWxsb2NhdGUvYWRkIGRp c2ssIGFuZCBhbHdheXMNCj4gYWRkL2RlbGV0ZSBkaXNrIGR5bmFtaWNhbGx5LCB0aGlzIHdheSBt YXkgY292ZXIgZGlzayBwbHVnICYgdW5wbHVnDQo+IHRlc3RzDQo+IA0KPiA0KSB1YmxrIHNwZWNp ZmljIHRlc3QgZ2l2ZW4gcGVvcGxlIHN0YXJ0cyB0byB1c2UgaXQsIHNvIGJldHRlciB0bw0KPiBs ZXQgYmxrdGVzdCBjb3ZlciB1YmxrIHJlbGF0ZWQgdGVzdHMNCj4gDQo+IEFkZCBtaW5pIHVibGsg c291cmNlIGZvciB0ZXN0IHB1cnBvc2Ugb25seSwgd2hpY2ggaXMgZWFzeSB0byB1c2U6DQo+IA0K PiAuL21pbml1YmxrIGFkZCAtdCB7bnVsbHxsb29wfSBbLXEgbnJfcXVldWVzXSBbLWQgZGVwdGhd IFstbiBkZXZfaWRdDQo+IAkgZGVmYXVsdDogbnJfcXVldWVzPTIobWF4IDQpLCBkZXB0aD0xMjgo bWF4IDEyOCksIGRldl9pZD0tMShhdXRvIGFsbG9jYXRpb24pDQo+IAkgLXQgbG9vcCAtZiBiYWNr aW5nX2ZpbGUNCj4gCSAtdCBudWxsDQo+IC4vbWluaXVibGsgZGVsIFstbiBkZXZfaWRdIC1hDQo+ IAkgLWEgZGVsZXRlIGFsbCBkZXZpY2VzLCAtbiBkZWxldGUgc3BlY2lmaWVkIGRldmljZQ0KPiAu L21pbml1YmxrIGxpc3QgWy1uIGRldl9pZF0gLWENCj4gCSAtYSBsaXN0IGFsbCBkZXZpY2VzLCAt biBsaXN0IHNwZWNpZmllZCBkZXZpY2UsIGRlZmF1bHQgLWENCj4gDQo+IG1pbml1YmxrIGRlcGVu ZHMgb24gbGlidXJpbmcgMi4yLCBhZGRzIEhBVkVfTElCVVJJTkcgZm9yIGNoZWNraW5nIGlmDQo+ IGxpYnVyaW5nIDIuMiBleGlzdHM7IGFsc28gYWRkIEhBVkVfVUJMS19IRUFERVIgZm9yIGNoZWNr aW5nIHVibGsga2VybmVsDQo+IFVBUEkgaGVhZGVyIGV4aXN0cy4gSWYgZWl0aGVyIG9mIHR3byBk ZXBlbmRlbmNpZXMgY2FuJ3QgYmUgbWV0LCBzaW1wbHkNCj4gaWdub3JlIG1pbml1YmxrIHRhcmdl dC4NCj4gDQo+IEFsc28gdjYuMCBpcyB0aGUgMXN0IGxpbnV4IGtlcm5lbCByZWxlYXNlIHdpdGgg dWJsay4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IE1pbmcgTGVpIDxtaW5nLmxlaUByZWRoYXQuY29t Pg0KPiAtLS0NCj4gICBzcmMvLmdpdGlnbm9yZSB8ICAgIDEgKw0KPiAgIHNyYy9NYWtlZmlsZSAg IHwgICAxOCArDQo+ICAgc3JjL21pbml1YmxrLmMgfCAxMzc2ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiAgIDMgZmlsZXMgY2hhbmdlZCwgMTM5NSBp bnNlcnRpb25zKCspDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9taW5pdWJsay5jDQo+IA0K PiBkaWZmIC0tZ2l0IGEvc3JjLy5naXRpZ25vcmUgYi9zcmMvLmdpdGlnbm9yZQ0KPiBpbmRleCAz NTViZWQzLi5kZjdhZmY1IDEwMDY0NA0KPiAtLS0gYS9zcmMvLmdpdGlnbm9yZQ0KPiArKysgYi9z cmMvLmdpdGlnbm9yZQ0KPiBAQCAtOCwzICs4LDQgQEANCj4gICAvc2cvZHhmZXItZnJvbS1kZXYN Cj4gICAvc2cvc3l6a2FsbGVyMQ0KPiAgIC96YmRpb2N0bA0KPiArL21pbml1YmxrDQo+IGRpZmYg LS1naXQgYS9zcmMvTWFrZWZpbGUgYi9zcmMvTWFrZWZpbGUNCj4gaW5kZXggM2I1ODdmNi4uODFj NjU0MSAxMDA2NDQNCj4gLS0tIGEvc3JjL01ha2VmaWxlDQo+ICsrKyBiL3NyYy9NYWtlZmlsZQ0K PiBAQCAtMiw2ICsyLDEwIEBAIEhBVkVfQ19IRUFERVIgPSAkKHNoZWxsIGlmIGVjaG8gIlwjaW5j bHVkZSA8JCgxKT4iIHwJCVwNCj4gICAJCSQoQ0MpIC1FIC0gPiAvZGV2L251bGwgMj4mMTsgdGhl biBlY2hvICIkKDIpIjsJXA0KPiAgIAkJZWxzZSBlY2hvICIkKDMpIjsgZmkpDQo+ICAgDQo+ICtI QVZFX0NfTUFDUk8gPSAkKHNoZWxsIGlmIGVjaG8gIiNpbmNsdWRlIDwkKDEpPiIgfAlcDQo+ICsJ CSQoQ0MpIC1FIC0gMj4mMSAvZGV2L251bGwgfCBncmVwICQoMikgPiAvZGV2L251bGwgMj4mMTsg XA0KPiArCQl0aGVuIGVjaG8gMTtlbHNlIGVjaG8gMDsgZmkpDQo+ICsNCj4gICBDX1RBUkdFVFMg Oj0gXA0KPiAgIAlsb2Jsa3NpemUgXA0KPiAgIAlsb29wX2NoYW5nZV9mZCBcDQo+IEBAIC0xMywx NiArMTcsMjcgQEAgQ19UQVJHRVRTIDo9IFwNCj4gICAJc2cvc3l6a2FsbGVyMSBcDQo+ICAgCXpi ZGlvY3RsDQo+ICAgDQo+ICtDX01JTklVQkxLIDo9IG1pbml1YmxrDQo+ICsNCj4gK0hBVkVfTElC VVJJTkcgOj0gJChjYWxsIEhBVkVfQ19NQUNSTyxsaWJ1cmluZy5oLElPUklOR19PUF9VUklOR19D TUQpDQo+ICtIQVZFX1VCTEtfSEVBREVSIDo9ICQoY2FsbCBIQVZFX0NfSEVBREVSLGxpbnV4L3Vi bGtfY21kLmgsMSkNCj4gKw0KPiAgIENYWF9UQVJHRVRTIDo9IFwNCj4gICAJZGlzY29udGlndW91 cy1pbw0KPiAgIA0KPiAraWZlcSAoJChIQVZFX0xJQlVSSU5HKSQoSEFWRV9VQkxLX0hFQURFUiks IDExKQ0KPiArVEFSR0VUUyA6PSAkKENfVEFSR0VUUykgJChDWFhfVEFSR0VUUykgJChDX01JTklV QkxLKQ0KPiArZWxzZQ0KPiArJChpbmZvIFNraXAgJChDX01JTklVQkxLKSBidWlsZCBkdWUgdG8g bWlzc2luZyBrZXJuZWwgaGVhZGVyKHY2LjArKSBvciBsaWJ1cmluZygyLjIrKSkNCj4gICBUQVJH RVRTIDo9ICQoQ19UQVJHRVRTKSAkKENYWF9UQVJHRVRTKQ0KPiArZW5kaWYNCj4gICANCj4gICBD T05GSUdfREVGUyA6PSAkKGNhbGwgSEFWRV9DX0hFQURFUixsaW51eC9ibGt6b25lZC5oLC1ESEFW RV9MSU5VWF9CTEtaT05FRF9IKQ0KPiAgIA0KPiAgIG92ZXJyaWRlIENGTEFHUyAgIDo9IC1PMiAt V2FsbCAtV3NoYWRvdyAkKENGTEFHUykgJChDT05GSUdfREVGUykNCj4gICBvdmVycmlkZSBDWFhG TEFHUyA6PSAtTzIgLXN0ZD1jKysxMSAtV2FsbCAtV2V4dHJhIC1Xc2hhZG93IC1Xbm8tc2lnbi1j b21wYXJlIFwNCj4gICAJCSAgICAgLVdlcnJvciAkKENYWEZMQUdTKSAkKENPTkZJR19ERUZTKQ0K PiArTUlOSVVCTEtfRkxBR1MgOj0gIC1EX0dOVV9TT1VSQ0UgLWxwdGhyZWFkIC1sdXJpbmcNCj4g ICANCj4gICBhbGw6ICQoVEFSR0VUUykNCj4gICANCj4gQEAgLTM5LDQgKzU0LDcgQEAgJChDX1RB UkdFVFMpOiAlOiAlLmMNCj4gICAkKENYWF9UQVJHRVRTKTogJTogJS5jcHANCj4gICAJJChDWFgp ICQoQ1BQRkxBR1MpICQoQ1hYRkxBR1MpIC1vICRAICReDQo+ICAgDQo+ICskKENfTUlOSVVCTEsp OiAlOiBtaW5pdWJsay5jDQo+ICsJJChDQykgJChDRkxBR1MpICQoTUlOSVVCTEtfRkxBR1MpIC1v ICRAIG1pbml1YmxrLmMNCj4gKw0KPiAgIC5QSE9OWTogYWxsIGNsZWFuIGluc3RhbGwNCj4gZGlm ZiAtLWdpdCBhL3NyYy9taW5pdWJsay5jIGIvc3JjL21pbml1YmxrLmMNCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uZTg0YmE0MQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsr KyBiL3NyYy9taW5pdWJsay5jDQo+IEBAIC0wLDAgKzEsMTM3NiBAQA0KPiArLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0zLjArDQo+ICsvLyBDb3B5cmlnaHQgKEMpIDIwMjMgTWluZyBM ZWkNCj4gKw0KPiArLyoNCj4gKyAqIGlvX3VyaW5nIGJhc2VkIG1pbmkgdWJsayBpbXBsZW1lbnRh dGlvbiB3aXRoIG51bGwvbG9vcCB0YXJnZXQsDQo+ICsgKiBmb3IgdGVzdCBwdXJwb3NlIG9ubHku DQo+ICsgKg0KPiArICogU28gcGxlYXNlIGtlZXAgaXQgY2xlYW4gJiBzaW1wbGUgJiByZWxpYWJs ZS4NCj4gKyAqLw0KPiArDQo+ICsjaW5jbHVkZSA8dW5pc3RkLmg+DQo+ICsjaW5jbHVkZSA8c3Rk bGliLmg+DQo+ICsjaW5jbHVkZSA8YXNzZXJ0Lmg+DQo+ICsjaW5jbHVkZSA8c3RkaW8uaD4NCj4g KyNpbmNsdWRlIDxzdGRhcmcuaD4NCj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4NCj4gKyNpbmNsdWRl IDxwdGhyZWFkLmg+DQo+ICsjaW5jbHVkZSA8Z2V0b3B0Lmg+DQo+ICsjaW5jbHVkZSA8bGltaXRz Lmg+DQo+ICsjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4NCj4gKyNpbmNsdWRlIDxzeXMvbW1hbi5o Pg0KPiArI2luY2x1ZGUgPHN5cy9pb2N0bC5oPg0KPiArI2luY2x1ZGUgPGxpYnVyaW5nLmg+DQo+ ICsjaW5jbHVkZSA8bGludXgvdWJsa19jbWQuaD4NCj4gKw0KPiArI2RlZmluZSBDVFJMX0RFVgkJ Ii9kZXYvdWJsay1jb250cm9sIg0KPiArI2RlZmluZSBVQkxLQ19ERVYJCSIvZGV2L3VibGtjIg0K PiArI2RlZmluZSBVQkxLX0NUUkxfUklOR19ERVBUSCAgICAgICAgICAgIDMyDQo+ICsNCj4gKy8q IHF1ZXVlIGlkbGUgdGltZW91dCAqLw0KPiArI2RlZmluZSBVQkxLU1JWX0lPX0lETEVfU0VDUwkJ MjANCj4gKw0KPiArI2RlZmluZSBVQkxLX0lPX01BWF9CWVRFUyAgICAgICAgICAgICAgIDY1NTM2 DQo+ICsjZGVmaW5lIFVCTEtfTUFYX1FVRVVFUyAgICAgICAgICAgICAgICAgNA0KPiArI2RlZmlu ZSBVQkxLX1FVRVVFX0RFUFRIICAgICAgICAgICAgICAgIDEyOA0KPiArDQo+ICsjZGVmaW5lIFVC TEtfREJHX0RFViAgICAgICAgICAgICgxVSA8PCAwKQ0KPiArI2RlZmluZSBVQkxLX0RCR19RVUVV RSAgICAgICAgICAoMVUgPDwgMSkNCj4gKyNkZWZpbmUgVUJMS19EQkdfSU9fQ01EICAgICAgICAg KDFVIDw8IDIpDQo+ICsjZGVmaW5lIFVCTEtfREJHX0lPICAgICAgICAgICAgICgxVSA8PCAzKQ0K PiArI2RlZmluZSBVQkxLX0RCR19DVFJMX0NNRCAgICAgICAoMVUgPDwgNCkNCj4gKyNkZWZpbmUg VUJMS19MT0cJCSgxVSA8PCA1KQ0KPiArDQo+ICtzdHJ1Y3QgdWJsa19kZXY7DQo+ICtzdHJ1Y3Qg dWJsa19xdWV1ZTsNCj4gKw0KPiArc3RydWN0IHVibGtfY3RybF9jbWRfZGF0YSB7DQo+ICsJdW5z aWduZWQgc2hvcnQgY21kX29wOw0KDQpwZXJoYXBzIHVzZSBlbnVtIHR5cGUgdG8gYXZvaWQgYW55 IHR5cGUgbWlzbWF0YWNoIGVycm9ycyBpbiBmdXR1cmUuLg0KDQo+ICsjZGVmaW5lIENUUkxfQ01E X0hBU19EQVRBCTENCj4gKyNkZWZpbmUgQ1RSTF9DTURfSEFTX0JVRgkyDQo+ICsJdW5zaWduZWQg c2hvcnQgZmxhZ3M7DQoNCkknZCBrZWVwIGZhbGdzIHU2NCBvciB1MzIganVzdCBpbmNhc2UuLg0K DQo+ICsNCj4gKwlfX3U2NCBkYXRhWzJdOw0KPiArCV9fdTY0IGFkZHI7DQo+ICsJX191MzIgbGVu Ow0KPiArfTsNCj4gKw0KPiArc3RydWN0IHVibGtfaW8gew0KPiArCWNoYXIgKmJ1Zl9hZGRyOw0K PiArDQo+ICsjZGVmaW5lIFVCTEtTUlZfTkVFRF9GRVRDSF9SUQkJKDFVTCA8PCAwKQ0KPiArI2Rl ZmluZSBVQkxLU1JWX05FRURfQ09NTUlUX1JRX0NPTVAJKDFVTCA8PCAxKQ0KPiArI2RlZmluZSBV QkxLU1JWX0lPX0ZSRUUJCQkoMVVMIDw8IDIpDQo+ICsJdW5zaWduZWQgaW50IGZsYWdzOw0KPiAr DQo+ICsJdW5zaWduZWQgaW50IHJlc3VsdDsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCB1YmxrX3Rn dF9vcHMgew0KPiArCWNvbnN0IGNoYXIgKm5hbWU7DQo+ICsJaW50ICgqaW5pdF90Z3QpKHN0cnVj dCB1YmxrX2RldiAqKTsNCj4gKwl2b2lkICgqZGVpbml0X3RndCkoc3RydWN0IHVibGtfZGV2ICop Ow0KPiArDQo+ICsJaW50ICgqcXVldWVfaW8pKHN0cnVjdCB1YmxrX3F1ZXVlICosIGludCB0YWcp Ow0KPiArCXZvaWQgKCp0Z3RfaW9fZG9uZSkoc3RydWN0IHVibGtfcXVldWUgKiwNCj4gKwkJCWlu dCB0YWcsIGNvbnN0IHN0cnVjdCBpb191cmluZ19jcWUgKik7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1 Y3QgdWJsa190Z3Qgew0KPiArCXVuc2lnbmVkIGxvbmcgZGV2X3NpemU7DQo+ICsJY29uc3Qgc3Ry dWN0IHVibGtfdGd0X29wcyAqb3BzOw0KPiArCWludCBhcmdjOw0KPiArCWNoYXIgKiphcmd2Ow0K PiArCXN0cnVjdCB1YmxrX3BhcmFtcyBwYXJhbXM7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgdWJs a19xdWV1ZSB7DQo+ICsJaW50IHFfaWQ7DQo+ICsJaW50IHFfZGVwdGg7DQoNCmlzIHRoZXJlIGEg cmVhc29uIHRvIG5vdCB1c2UgdW5zaWduZWQgaW50IGZvciBxaWQgYW5kIHFkIGFib3ZlID8NCg0K PiArCXVuc2lnbmVkIGludCBjbWRfaW5mbGlnaHQ7DQo+ICsJdW5zaWduZWQgaW50IGlvX2luZmxp Z2h0Ow0KPiArCXN0cnVjdCB1YmxrX2RldiAqZGV2Ow0KPiArCWNvbnN0IHN0cnVjdCB1YmxrX3Rn dF9vcHMgKnRndF9vcHM7DQo+ICsJY2hhciAqaW9fY21kX2J1ZjsNCj4gKwlzdHJ1Y3QgaW9fdXJp bmcgcmluZzsNCj4gKwlzdHJ1Y3QgdWJsa19pbyBpb3NbVUJMS19RVUVVRV9ERVBUSF07DQo+ICsj ZGVmaW5lIFVCTEtTUlZfUVVFVUVfU1RPUFBJTkcJKDFVIDw8IDApDQo+ICsjZGVmaW5lIFVCTEtT UlZfUVVFVUVfSURMRQkoMVUgPDwgMSkNCj4gKwl1bnNpZ25lZCBzdGF0ZTsNCj4gKwlpbnQgdGlk Ow0KDQppbnN0ZWFkIG9mIGludCBwaWRfdCAgPw0KDQo+ICsJcHRocmVhZF90IHRocmVhZDsNCj4g K307DQo+ICsNCj4gK3N0cnVjdCB1YmxrX2RldiB7DQo+ICsJc3RydWN0IHVibGtfdGd0IHRndDsN Cj4gKwlzdHJ1Y3QgdWJsa3Nydl9jdHJsX2Rldl9pbmZvICBkZXZfaW5mbzsNCj4gKwlzdHJ1Y3Qg dWJsa19xdWV1ZSBxW1VCTEtfTUFYX1FVRVVFU107DQo+ICsNCj4gKwlpbnQgZmRzWzJdOwkvKiBm ZHNbMF0gcG9pbnRzIHRvIC9kZXYvdWJsa2NOICovDQo+ICsJaW50IG5yX2ZkczsNCj4gKwlpbnQg Y3RybF9mZDsNCj4gKwlzdHJ1Y3QgaW9fdXJpbmcgcmluZzsNCj4gK307DQo+ICsNCj4gKyNpZm5k ZWYgb2Zmc2V0b2YNCj4gKyNkZWZpbmUgb2Zmc2V0b2YoVFlQRSwgTUVNQkVSKSAgKChzaXplX3Qp JigoVFlQRSAqKTApLT5NRU1CRVIpDQo+ICsjZW5kaWYNCj4gKw0KPiArI2lmbmRlZiBjb250YWlu ZXJfb2YNCj4gKyNkZWZpbmUgY29udGFpbmVyX29mKHB0ciwgdHlwZSwgbWVtYmVyKSAoeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwNCj4gKwl1bnNpZ25lZCBsb25nIF9fbXB0ciA9ICh1 bnNpZ25lZCBsb25nKShwdHIpOyAgICAgICAgICAgICAgICAgICAgXA0KPiArCSgodHlwZSAqKShf X21wdHIgLSBvZmZzZXRvZih0eXBlLCBtZW1iZXIpKSk7IH0pDQo+ICsjZW5kaWYNCj4gKw0KPiAr I2RlZmluZSByb3VuZF91cCh2YWwsIHJuZCkgXA0KPiArCSgoKHZhbCkgKyAoKHJuZCkgLSAxKSkg JiB+KChybmQpIC0gMSkpDQo+ICsNCj4gKyNkZWZpbmUgdWJsa19hc3NlcnQoeCkgIGRvIHsgXA0K PiArCWlmICghKHgpKSB7ICAgICBcDQo+ICsJCXVibGtfZXJyKCIlcyAlZDogYXNzZXJ0IVxuIiwg X19mdW5jX18sIF9fTElORV9fKTsgXA0KPiArCQlhc3NlcnQoeCk7ICAgICAgXA0KPiArCX0gICAg ICAgXA0KPiArfSB3aGlsZSAoMCkNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCB1YmxrX3Rn dF9vcHMgKnVibGtfZmluZF90Z3QoY29uc3QgY2hhciAqbmFtZSk7DQo+ICsNCj4gK3N0YXRpYyB1 bnNpZ25lZCBpbnQgdWJsa19kYmdfbWFzayA9IFVCTEtfTE9HOw0KPiArDQo+ICtzdGF0aWMgaW5s aW5lIHVuc2lnbmVkIGlsb2cyKHVuc2lnbmVkIHgpDQo+ICt7DQo+ICsgICAgcmV0dXJuIHNpemVv Zih1bnNpZ25lZCkgKiA4IC0gMSAtIF9fYnVpbHRpbl9jbHooeCk7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbmxpbmUgaW50IGlzX3RhcmdldF9pbyhfX3U2NCB1c2VyX2RhdGEpDQo+ICt7DQo+ICsJ cmV0dXJuICh1c2VyX2RhdGEgJiAoMVVMTCA8PCA2MykpICE9IDA7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbmxpbmUgX191NjQgYnVpbGRfdXNlcl9kYXRhKHVuc2lnbmVkIHRhZywgdW5zaWduZWQg b3AsDQo+ICsJCXVuc2lnbmVkIHRndF9kYXRhLCB1bnNpZ25lZCBpc190YXJnZXRfaW8pDQo+ICt7 DQo+ICsJYXNzZXJ0KCEodGFnID4+IDE2KSAmJiAhKG9wID4+IDgpICYmICEodGd0X2RhdGEgPj4g MTYpKTsNCj4gKw0KPiArCXJldHVybiB0YWcgfCAob3AgPDwgMTYpIHwgKHRndF9kYXRhIDw8IDI0 KSB8IChfX3U2NClpc190YXJnZXRfaW8gPDwgNjM7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxp bmUgdW5zaWduZWQgaW50IHVzZXJfZGF0YV90b190YWcoX191NjQgdXNlcl9kYXRhKQ0KPiArew0K PiArCXJldHVybiB1c2VyX2RhdGEgJiAweGZmZmY7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxp bmUgdW5zaWduZWQgaW50IHVzZXJfZGF0YV90b19vcChfX3U2NCB1c2VyX2RhdGEpDQo+ICt7DQo+ ICsJcmV0dXJuICh1c2VyX2RhdGEgPj4gMTYpICYgMHhmZjsNCj4gK30NCj4gKw0KPiArc3RhdGlj IHZvaWQgdWJsa19lcnIoY29uc3QgY2hhciAqZm10LCAuLi4pDQo+ICt7DQo+ICsJdmFfbGlzdCBh cDsNCj4gKw0KPiArCXZhX3N0YXJ0KGFwLCBmbXQpOw0KPiArCXZmcHJpbnRmKHN0ZGVyciwgZm10 LCBhcCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHVibGtfbG9nKGNvbnN0IGNoYXIgKmZt dCwgLi4uKQ0KPiArew0KPiArCWlmICh1YmxrX2RiZ19tYXNrICYgVUJMS19MT0cpIHsNCj4gKwkJ dmFfbGlzdCBhcDsNCj4gKw0KPiArCQl2YV9zdGFydChhcCwgZm10KTsNCj4gKwkJdmZwcmludGYo c3Rkb3V0LCBmbXQsIGFwKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHVibGtf ZGJnKGludCBsZXZlbCwgY29uc3QgY2hhciAqZm10LCAuLi4pDQo+ICt7DQo+ICsJaWYgKGxldmVs ICYgdWJsa19kYmdfbWFzaykgew0KPiArCQl2YV9saXN0IGFwOw0KPiArCQl2YV9zdGFydChhcCwg Zm10KTsNCj4gKwkJdmZwcmludGYoc3Rkb3V0LCBmbXQsIGFwKTsNCj4gKyAgICAgICAgfQ0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgKnVibGtfZ2V0X3NxZV9jbWQoY29uc3Qgc3Ry dWN0IGlvX3VyaW5nX3NxZSAqc3FlKQ0KPiArew0KPiArCXJldHVybiAodm9pZCAqKSZzcWUtPmFk ZHIzOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgdWJsa19tYXJrX2lvX2RvbmUo c3RydWN0IHVibGtfaW8gKmlvLCBpbnQgcmVzKQ0KPiArew0KPiArCWlvLT5mbGFncyB8PSAoVUJM S1NSVl9ORUVEX0NPTU1JVF9SUV9DT01QIHwgVUJMS1NSVl9JT19GUkVFKTsNCj4gKwlpby0+cmVz dWx0ID0gcmVzOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCB1Ymxr c3J2X2lvX2Rlc2MgKnVibGtfZ2V0X2lvZCgNCj4gKyAgICAgICAgICAgICAgICBjb25zdCBzdHJ1 Y3QgdWJsa19xdWV1ZSAqcSwgaW50IHRhZykNCj4gK3sNCj4gKyAgICAgICAgcmV0dXJuIChzdHJ1 Y3QgdWJsa3Nydl9pb19kZXNjICopDQo+ICsgICAgICAgICAgICAgICAgJihxLT5pb19jbWRfYnVm W3RhZyAqIHNpemVvZihzdHJ1Y3QgdWJsa3Nydl9pb19kZXNjKV0pOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgaW5saW5lIHZvaWQgdWJsa19zZXRfc3FlX2NtZF9vcChzdHJ1Y3QgaW9fdXJpbmdfc3Fl ICpzcWUsDQo+ICsJCV9fdTMyIGNtZF9vcCkNCj4gK3sNCj4gKyAgICAgICAgX191MzIgKmFkZHIg PSAoX191MzIgKikmc3FlLT5vZmY7DQo+ICsNCj4gKyAgICAgICAgYWRkclswXSA9IGNtZF9vcDsN Cj4gKyAgICAgICAgYWRkclsxXSA9IDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgaW50 IHVibGtfc2V0dXBfcmluZyhzdHJ1Y3QgaW9fdXJpbmcgKnIsIGludCBkZXB0aCwNCj4gKwkJaW50 IGNxX2RlcHRoLCB1bnNpZ25lZCBmbGFncykNCj4gK3sNCj4gKwlzdHJ1Y3QgaW9fdXJpbmdfcGFy YW1zIHA7DQo+ICsNCj4gKwltZW1zZXQoJnAsIDAsIHNpemVvZihwKSk7DQo+ICsJcC5mbGFncyA9 IGZsYWdzIHwgSU9SSU5HX1NFVFVQX0NRU0laRTsNCj4gKwlwLmNxX2VudHJpZXMgPSBjcV9kZXB0 aDsNCj4gKw0KPiArCXJldHVybiBpb191cmluZ19xdWV1ZV9pbml0X3BhcmFtcyhkZXB0aCwgciwg JnApOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgdWJsa19jdHJsX2luaXRfY21k KHN0cnVjdCB1YmxrX2RldiAqZGV2LA0KPiArCQlzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUsDQo+ ICsJCXN0cnVjdCB1YmxrX2N0cmxfY21kX2RhdGEgKmRhdGEpDQo+ICt7DQo+ICsJc3RydWN0IHVi bGtzcnZfY3RybF9kZXZfaW5mbyAqaW5mbyA9ICZkZXYtPmRldl9pbmZvOw0KPiArCXN0cnVjdCB1 Ymxrc3J2X2N0cmxfY21kICpjbWQgPSAoc3RydWN0IHVibGtzcnZfY3RybF9jbWQgKil1YmxrX2dl dF9zcWVfY21kKHNxZSk7DQo+ICsNCj4gKwlzcWUtPmZkID0gZGV2LT5jdHJsX2ZkOw0KPiArCXNx ZS0+b3Bjb2RlID0gSU9SSU5HX09QX1VSSU5HX0NNRDsNCj4gKwlzcWUtPmlvcHJpbyA9IDA7DQo+ ICsNCj4gKwlpZiAoZGF0YS0+ZmxhZ3MgJiBDVFJMX0NNRF9IQVNfQlVGKSB7DQo+ICsJCWNtZC0+ YWRkciA9IGRhdGEtPmFkZHI7DQo+ICsJCWNtZC0+bGVuID0gZGF0YS0+bGVuOw0KPiArCX0NCj4g Kw0KPiArCWlmIChkYXRhLT5mbGFncyAmIENUUkxfQ01EX0hBU19EQVRBKQ0KPiArCQljbWQtPmRh dGFbMF0gPSBkYXRhLT5kYXRhWzBdOw0KPiArDQo+ICsJY21kLT5kZXZfaWQgPSBpbmZvLT5kZXZf aWQ7DQo+ICsJY21kLT5xdWV1ZV9pZCA9IC0xOw0KPiArDQo+ICsJdWJsa19zZXRfc3FlX2NtZF9v cChzcWUsIGRhdGEtPmNtZF9vcCk7DQo+ICsNCj4gKwlpb191cmluZ19zcWVfc2V0X2RhdGEoc3Fl LCBjbWQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IF9fdWJsa19jdHJsX2NtZChzdHJ1Y3Qg dWJsa19kZXYgKmRldiwNCj4gKwkJc3RydWN0IHVibGtfY3RybF9jbWRfZGF0YSAqZGF0YSkNCj4g K3sNCj4gKwlzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWU7DQo+ICsJc3RydWN0IGlvX3VyaW5nX2Nx ZSAqY3FlOw0KPiArCWludCByZXQgPSAtRUlOVkFMOw0KPiArDQo+ICsJc3FlID0gaW9fdXJpbmdf Z2V0X3NxZSgmZGV2LT5yaW5nKTsNCj4gKwlpZiAoIXNxZSkgew0KPiArCQl1YmxrX2VycigiJXM6 IGNhbid0IGdldCBzcWUgcmV0ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsNCj4gKwkJcmV0dXJuIHJl dDsNCj4gKwl9DQo+ICsNCj4gKwl1YmxrX2N0cmxfaW5pdF9jbWQoZGV2LCBzcWUsIGRhdGEpOw0K PiArDQo+ICsJcmV0ID0gaW9fdXJpbmdfc3VibWl0KCZkZXYtPnJpbmcpOw0KPiArCWlmIChyZXQg PCAwKSB7DQo+ICsJCXVibGtfZXJyKCJ1cmluZyBzdWJtaXQgcmV0ICVkXG4iLCByZXQpOw0KPiAr CQlyZXR1cm4gcmV0Ow0KPiArCX0NCj4gKw0KPiArCXJldCA9IGlvX3VyaW5nX3dhaXRfY3FlKCZk ZXYtPnJpbmcsICZjcWUpOw0KPiArCWlmIChyZXQgPCAwKSB7DQo+ICsJCXVibGtfZXJyKCJ3YWl0 IGNxZTogJXNcbiIsIHN0cmVycm9yKC1yZXQpKTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ ICsJaW9fdXJpbmdfY3FlX3NlZW4oJmRldi0+cmluZywgY3FlKTsNCj4gKw0KPiArCXJldHVybiBj cWUtPnJlczsNCj4gK30NCj4gKw0KPiAraW50IHVibGtfY3RybF9zdG9wX2RldihzdHJ1Y3QgdWJs a19kZXYgKmRldikNCj4gK3sNCj4gKwlzdHJ1Y3QgdWJsa19jdHJsX2NtZF9kYXRhIGRhdGEgPSB7 DQo+ICsJCS5jbWRfb3AJPSBVQkxLX0NNRF9TVE9QX0RFViwNCj4gKwl9Ow0KPiArCWludCByZXQ7 DQo+ICsNCj4gKwlyZXQgPSBfX3VibGtfY3RybF9jbWQoZGV2LCAmZGF0YSk7DQo+ICsJcmV0dXJu IHJldDsNCg0KeW91IGNhbiBqdXN0IHJldHVybiBkaXJlY3RseSBmcm9tIGhlcmUgYW5kIHJlbW92 ZSBsb2NhbCB2YXIgcmV0Li4NCg0KPiArfQ0KPiArDQo+ICtpbnQgdWJsa19jdHJsX3N0YXJ0X2Rl dihzdHJ1Y3QgdWJsa19kZXYgKmRldiwNCj4gKwkJaW50IGRhZW1vbl9waWQpDQo+ICt7DQo+ICsJ c3RydWN0IHVibGtfY3RybF9jbWRfZGF0YSBkYXRhID0gew0KPiArCQkuY21kX29wCT0gVUJMS19D TURfU1RBUlRfREVWLA0KPiArCQkuZmxhZ3MJPSBDVFJMX0NNRF9IQVNfREFUQSwNCj4gKwl9Ow0K PiArCWludCByZXQ7DQo+ICsNCj4gKwlkZXYtPmRldl9pbmZvLnVibGtzcnZfcGlkID0gZGF0YS5k YXRhWzBdID0gZGFlbW9uX3BpZDsNCj4gKw0KPiArCXJldCA9IF9fdWJsa19jdHJsX2NtZChkZXYs ICZkYXRhKTsNCj4gKw0KPiArCXJldHVybiByZXQ7DQoNCnNhbWUgaGVyZSBhcyBwcmV2aW91cyBj b21tZW50IC4uLg0KDQo+ICt9DQo+ICsNCj4gK2ludCB1YmxrX2N0cmxfYWRkX2RldihzdHJ1Y3Qg dWJsa19kZXYgKmRldikNCj4gK3sNCj4gKwlzdHJ1Y3QgdWJsa19jdHJsX2NtZF9kYXRhIGRhdGEg PSB7DQo+ICsJCS5jbWRfb3AJPSBVQkxLX0NNRF9BRERfREVWLA0KPiArCQkuZmxhZ3MJPSBDVFJM X0NNRF9IQVNfQlVGLA0KPiArCQkuYWRkciA9IChfX3U2NCkmZGV2LT5kZXZfaW5mbywNCj4gKwkJ LmxlbiA9IHNpemVvZihzdHJ1Y3QgdWJsa3Nydl9jdHJsX2Rldl9pbmZvKSwNCj4gKwl9Ow0KPiAr DQo+ICsJcmV0dXJuIF9fdWJsa19jdHJsX2NtZChkZXYsICZkYXRhKTsNCj4gK30NCj4gKw0KPiAr aW50IHVibGtfY3RybF9kZWxfZGV2KHN0cnVjdCB1YmxrX2RldiAqZGV2KQ0KPiArew0KPiArCXN0 cnVjdCB1YmxrX2N0cmxfY21kX2RhdGEgZGF0YSA9IHsNCj4gKwkJLmNtZF9vcCA9IFVCTEtfQ01E X0RFTF9ERVYsDQo+ICsJCS5mbGFncyA9IDAsDQo+ICsJfTsNCj4gKw0KPiArCXJldHVybiBfX3Vi bGtfY3RybF9jbWQoZGV2LCAmZGF0YSk7DQo+ICt9DQo+ICsNCj4gK2ludCB1YmxrX2N0cmxfZ2V0 X2luZm8oc3RydWN0IHVibGtfZGV2ICpkZXYpDQo+ICt7DQo+ICsJc3RydWN0IHVibGtfY3RybF9j bWRfZGF0YSBkYXRhID0gew0KPiArCQkuY21kX29wCT0gVUJMS19DTURfR0VUX0RFVl9JTkZPLA0K PiArCQkuZmxhZ3MJPSBDVFJMX0NNRF9IQVNfQlVGLA0KPiArCQkuYWRkciA9IChfX3U2NCkmZGV2 LT5kZXZfaW5mbywNCj4gKwkJLmxlbiA9IHNpemVvZihzdHJ1Y3QgdWJsa3Nydl9jdHJsX2Rldl9p bmZvKSwNCj4gKwl9Ow0KPiArDQo+ICsJcmV0dXJuIF9fdWJsa19jdHJsX2NtZChkZXYsICZkYXRh KTsNCj4gK30NCj4gKw0KPiAraW50IHVibGtfY3RybF9zZXRfcGFyYW1zKHN0cnVjdCB1YmxrX2Rl diAqZGV2LA0KPiArCQlzdHJ1Y3QgdWJsa19wYXJhbXMgKnBhcmFtcykNCj4gK3sNCj4gKwlzdHJ1 Y3QgdWJsa19jdHJsX2NtZF9kYXRhIGRhdGEgPSB7DQo+ICsJCS5jbWRfb3AJPSBVQkxLX0NNRF9T RVRfUEFSQU1TLA0KPiArCQkuZmxhZ3MJPSBDVFJMX0NNRF9IQVNfQlVGLA0KPiArCQkuYWRkciA9 IChfX3U2NClwYXJhbXMsDQo+ICsJCS5sZW4gPSBzaXplb2YoKnBhcmFtcyksDQo+ICsJfTsNCj4g KwlwYXJhbXMtPmxlbiA9IHNpemVvZigqcGFyYW1zKTsNCj4gKwlyZXR1cm4gX191YmxrX2N0cmxf Y21kKGRldiwgJmRhdGEpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHVibGtfY3RybF9nZXRf cGFyYW1zKHN0cnVjdCB1YmxrX2RldiAqZGV2LA0KPiArCQlzdHJ1Y3QgdWJsa19wYXJhbXMgKnBh cmFtcykNCj4gK3sNCj4gKwlzdHJ1Y3QgdWJsa19jdHJsX2NtZF9kYXRhIGRhdGEgPSB7DQo+ICsJ CS5jbWRfb3AJPSBVQkxLX0NNRF9HRVRfUEFSQU1TLA0KPiArCQkuZmxhZ3MJPSBDVFJMX0NNRF9I QVNfQlVGLA0KPiArCQkuYWRkciA9IChfX3U2NClwYXJhbXMsDQo+ICsJCS5sZW4gPSBzaXplb2Yo KnBhcmFtcyksDQo+ICsJfTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJcGFyYW1zLT5sZW4gPSBz aXplb2YoKnBhcmFtcyk7DQo+ICsNCj4gKwlyZXQgPSBfX3VibGtfY3RybF9jbWQoZGV2LCAmZGF0 YSk7DQo+ICsJcmV0dXJuIHJldDsNCg0Kc2FtZSBoZXJlIGFzIHByZXZpb3VzIGNvbW1lbnQgLi4u DQoNCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IGNoYXIgKnVibGtfZGV2X3N0YXRlX2Rlc2Mo c3RydWN0IHVibGtfZGV2ICpkZXYpDQo+ICt7DQo+ICsJc3dpdGNoIChkZXYtPmRldl9pbmZvLnN0 YXRlKSB7DQo+ICsJY2FzZSBVQkxLX1NfREVWX0RFQUQ6DQo+ICsJCXJldHVybiAiREVBRCI7DQo+ ICsJY2FzZSBVQkxLX1NfREVWX0xJVkU6DQo+ICsJCXJldHVybiAiTElWRSI7DQo+ICsJZGVmYXVs dDoNCj4gKwkJcmV0dXJuICJVTktOT1dOIjsNCj4gKwl9Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMg dm9pZCB1YmxrX2N0cmxfZHVtcChzdHJ1Y3QgdWJsa19kZXYgKmRldiwgYm9vbCBzaG93X3F1ZXVl KQ0KPiArew0KPiArCXN0cnVjdCB1Ymxrc3J2X2N0cmxfZGV2X2luZm8gKmluZm8gPSAmZGV2LT5k ZXZfaW5mbzsNCj4gKwlpbnQgcmV0Ow0KPiArCXN0cnVjdCB1YmxrX3BhcmFtcyBwOw0KPiArDQo+ ICsJcmV0ID0gdWJsa19jdHJsX2dldF9wYXJhbXMoZGV2LCAmcCk7DQo+ICsJaWYgKHJldCA8IDAp IHsNCj4gKwkJdWJsa19lcnIoImZhaWxlZCB0byBnZXQgcGFyYW1zICVtXG4iKTsNCj4gKwkJcmV0 dXJuOw0KPiArCX0NCj4gKw0KPiArCXVibGtfbG9nKCJkZXYgaWQgJWQ6IG5yX2h3X3F1ZXVlcyAl ZCBxdWV1ZV9kZXB0aCAlZCBibG9jayBzaXplICVkIGRldl9jYXBhY2l0eSAlbGxkXG4iLA0KPiAr CQkJaW5mby0+ZGV2X2lkLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+bnJfaHdf cXVldWVzLCBpbmZvLT5xdWV1ZV9kZXB0aCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIDEg PDwgcC5iYXNpYy5sb2dpY2FsX2JzX3NoaWZ0LCBwLmJhc2ljLmRldl9zZWN0b3JzKTsNCj4gKwl1 YmxrX2xvZygiXHRtYXggcnEgc2l6ZSAlZCBkYWVtb24gcGlkICVkIGZsYWdzIDB4JWxseCBzdGF0 ZSAlc1xuIiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPm1heF9pb19idWZfYnl0 ZXMsDQo+ICsJCQlpbmZvLT51Ymxrc3J2X3BpZCwgaW5mby0+ZmxhZ3MsDQo+ICsJCQl1YmxrX2Rl dl9zdGF0ZV9kZXNjKGRldikpOw0KPiArCWlmIChzaG93X3F1ZXVlKSB7DQo+ICsJCWludCBpOw0K PiArDQo+ICsJCWZvciAoaSA9IDA7IGkgPCBkZXYtPmRldl9pbmZvLm5yX2h3X3F1ZXVlczsgaSsr KQ0KPiArCQkJdWJsa19sb2coIlx0cXVldWUgMCB0aWQ6ICVkXG4iLCBkZXYtPnFbaV0udGlkKTsN Cj4gKwl9DQo+ICsJZmZsdXNoKHN0ZG91dCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHVi bGtfY3RybF9kZWluaXQoc3RydWN0IHVibGtfZGV2ICpkZXYpDQo+ICt7DQo+ICsJY2xvc2UoZGV2 LT5jdHJsX2ZkKTsNCj4gKwlmcmVlKGRldik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3Qg dWJsa19kZXYgKnVibGtfY3RybF9pbml0KCkNCg0KcGVyaGFwcyBzcGVjaWZ5IHZvaWQgLT4gdWJs a19jdHJsX2luaXQodm9pZCkNCg0KPiArew0KPiArCXN0cnVjdCB1YmxrX2RldiAqZGV2ID0gKHN0 cnVjdCB1YmxrX2RldiAqKWNhbGxvYygxLCBzaXplb2YoKmRldikpOw0KPiArCXN0cnVjdCB1Ymxr c3J2X2N0cmxfZGV2X2luZm8gKmluZm8gPSAmZGV2LT5kZXZfaW5mbzsNCj4gKwlpbnQgcmV0Ow0K PiArDQo+ICsJZGV2LT5jdHJsX2ZkID0gb3BlbihDVFJMX0RFViwgT19SRFdSKTsNCj4gKwlpZiAo ZGV2LT5jdHJsX2ZkIDwgMCkgew0KPiArCQl1YmxrX2VycigiY29udHJvbCBkZXYgJXMgY2FuJ3Qg YmUgb3BlbmVkOiAlbVxuIiwgQ1RSTF9ERVYpOw0KDQpwZXJoYXBzIGFsc28gcHJpbnQgdGhlIGVy cm5vIHRoYXQgaXMgc2V0IGJ5IHRoZSBvcGVuIHN5c3RlbSBjYWxsIHVubGVzcw0KdWJsa19lcnIg aXMgZG9pbmcgdGhhdCBpbXBsaWNpdGx5IHdoaWNoIEknbSBub3Qgc3VyZS4NCg0KYWxzbyBJIGRp ZG4ndCB1bmRlcnN0YW5kIHR3byBmb3JtYXQgc3BlY2lmaWVycyBmb3IgYWJvdmUgY2FsbCBhbmQg b25seQ0Kb25lIGFyZ3VtZW50IGl0cyBhIGJpdCBjb25mdXNpbmcgdG8gcmVhZCB0aGUgY29kZS4u Lg0KDQo+ICsJCWV4aXQoZGV2LT5jdHJsX2ZkKTsNCj4gKwl9DQo+ICsJaW5mby0+bWF4X2lvX2J1 Zl9ieXRlcyA9IFVCTEtfSU9fTUFYX0JZVEVTOw0KPiArDQo+ICsJcmV0ID0gdWJsa19zZXR1cF9y aW5nKCZkZXYtPnJpbmcsIFVCTEtfQ1RSTF9SSU5HX0RFUFRILA0KPiArCQkJVUJMS19DVFJMX1JJ TkdfREVQVEgsIElPUklOR19TRVRVUF9TUUUxMjgpOw0KPiArCWlmIChyZXQgPCAwKSB7DQo+ICsJ CXVibGtfZXJyKCJxdWV1ZV9pbml0OiAlc1xuIiwgc3RyZXJyb3IoLXJldCkpOw0KPiArCQlmcmVl KGRldik7DQo+ICsJCXJldHVybiBOVUxMOw0KPiArCX0NCj4gKwlkZXYtPm5yX2ZkcyA9IDE7DQo+ ICsNCj4gKwlyZXR1cm4gZGV2Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHVibGtfcXVldWVf Y21kX2J1Zl9zeihzdHJ1Y3QgdWJsa19xdWV1ZSAqcSkNCj4gK3sNCj4gKwlpbnQgc2l6ZSA9ICBx LT5xX2RlcHRoICogc2l6ZW9mKHN0cnVjdCB1Ymxrc3J2X2lvX2Rlc2MpOw0KPiArCXVuc2lnbmVk IGludCBwYWdlX3N6ID0gZ2V0cGFnZXNpemUoKTsNCj4gKw0KPiArCXJldHVybiByb3VuZF91cChz aXplLCBwYWdlX3N6KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgdWJsa19xdWV1ZV9kZWlu aXQoc3RydWN0IHVibGtfcXVldWUgKnEpDQo+ICt7DQo+ICsJaW50IGk7DQo+ICsJaW50IG5yX2lv cyA9IHEtPnFfZGVwdGg7DQo+ICsNCj4gKwlpb191cmluZ191bnJlZ2lzdGVyX3JpbmdfZmQoJnEt PnJpbmcpOw0KPiArDQo+ICsJaWYgKHEtPnJpbmcucmluZ19mZCA+IDApIHsNCj4gKwkJaW9fdXJp bmdfdW5yZWdpc3Rlcl9maWxlcygmcS0+cmluZyk7DQo+ICsJCWNsb3NlKHEtPnJpbmcucmluZ19m ZCk7DQo+ICsJCXEtPnJpbmcucmluZ19mZCA9IC0xOw0KPiArCX0NCj4gKw0KPiArCWlmIChxLT5p b19jbWRfYnVmKQ0KPiArCQltdW5tYXAocS0+aW9fY21kX2J1ZiwgdWJsa19xdWV1ZV9jbWRfYnVm X3N6KHEpKTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBucl9pb3M7IGkrKykNCj4gKwkJZnJl ZShxLT5pb3NbaV0uYnVmX2FkZHIpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHVibGtfcXVl dWVfaW5pdChzdHJ1Y3QgdWJsa19xdWV1ZSAqcSkNCj4gK3sNCj4gKwlzdHJ1Y3QgdWJsa19kZXYg KmRldiA9IHEtPmRldjsNCj4gKwlpbnQgZGVwdGggPSBkZXYtPmRldl9pbmZvLnF1ZXVlX2RlcHRo Ow0KPiArCWludCBpLCByZXQgPSAtMTsNCj4gKwlpbnQgY21kX2J1Zl9zaXplLCBpb19idWZfc2l6 ZTsNCj4gKwl1bnNpZ25lZCBsb25nIG9mZjsNCj4gKwlpbnQgcmluZ19kZXB0aCA9IGRlcHRoLCBj cV9kZXB0aCA9IGRlcHRoOw0KPiArDQo+ICsJcS0+dGd0X29wcyA9IGRldi0+dGd0Lm9wczsNCj4g KwlxLT5zdGF0ZSA9IDA7DQo+ICsJcS0+cV9kZXB0aCA9IGRlcHRoOw0KPiArCXEtPmNtZF9pbmZs aWdodCA9IDA7DQo+ICsJcS0+dGlkID0gZ2V0dGlkKCk7DQo+ICsNCj4gKwljbWRfYnVmX3NpemUg PSB1YmxrX3F1ZXVlX2NtZF9idWZfc3oocSk7DQo+ICsJb2ZmID0gVUJMS1NSVl9DTURfQlVGX09G RlNFVCArDQo+ICsJCXEtPnFfaWQgKiAoVUJMS19NQVhfUVVFVUVfREVQVEggKiBzaXplb2Yoc3Ry dWN0IHVibGtzcnZfaW9fZGVzYykpOw0KPiArCXEtPmlvX2NtZF9idWYgPSAoY2hhciAqKW1tYXAo MCwgY21kX2J1Zl9zaXplLCBQUk9UX1JFQUQsDQo+ICsJCQlNQVBfU0hBUkVEIHwgTUFQX1BPUFVM QVRFLCBkZXYtPmZkc1swXSwgb2ZmKTsNCj4gKwlpZiAocS0+aW9fY21kX2J1ZiA9PSBNQVBfRkFJ TEVEKSB7DQo+ICsJCXVibGtfZXJyKCJ1YmxrIGRldiAlZCBxdWV1ZSAlZCBtYXAgaW9fY21kX2J1 ZiBmYWlsZWRcbiIsDQo+ICsJCQkJcS0+ZGV2LT5kZXZfaW5mby5kZXZfaWQsIHEtPnFfaWQpOw0K DQphbHNvIGFkZCBzdHJlcnJvcihlcnJubykgdG8gbWVzc2FnZSA/DQoNCj4gKwkJZ290byBmYWls Ow0KPiArCX0NCj4gKw0KPiArCWlvX2J1Zl9zaXplID0gZGV2LT5kZXZfaW5mby5tYXhfaW9fYnVm X2J5dGVzOw0KPiArCWZvciAoaSA9IDA7IGkgPCBxLT5xX2RlcHRoOyBpKyspIHsNCj4gKwkJcS0+ aW9zW2ldLmJ1Zl9hZGRyID0gTlVMTDsNCj4gKw0KPiArCQlpZiAocG9zaXhfbWVtYWxpZ24oKHZv aWQgKiopJnEtPmlvc1tpXS5idWZfYWRkciwNCj4gKwkJCQkJZ2V0cGFnZXNpemUoKSwgaW9fYnVm X3NpemUpKSB7DQo+ICsJCQl1YmxrX2VycigidWJsayBkZXYgJWQgcXVldWUgJWQgaW8gJWQgcG9z aXhfbWVtYWxpZ24gZmFpbGVkXG4iLA0KPiArCQkJCQlkZXYtPmRldl9pbmZvLmRldl9pZCwgcS0+ cV9pZCwgaSk7DQo+ICsJCQlnb3RvIGZhaWw7DQo+ICsJCX0NCg0Kc2FtZSBhcyBwcmV2aW91cyBj b21tZW50IC4uDQoNCj4gKwkJcS0+aW9zW2ldLmZsYWdzID0gVUJMS1NSVl9ORUVEX0ZFVENIX1JR IHwgVUJMS1NSVl9JT19GUkVFOw0KPiArCX0NCj4gKw0KPiArCXJldCA9IHVibGtfc2V0dXBfcmlu ZygmcS0+cmluZywgcmluZ19kZXB0aCwgY3FfZGVwdGgsDQo+ICsJCQlJT1JJTkdfU0VUVVBfU1FF MTI4IHwgSU9SSU5HX1NFVFVQX0NPT1BfVEFTS1JVTik7DQo+ICsJaWYgKHJldCA8IDApIHsNCj4g KwkJdWJsa19lcnIoInVibGsgZGV2ICVkIHF1ZXVlICVkIHNldHVwIGlvX3VyaW5nIGZhaWxlZCAl ZFxuIiwNCj4gKwkJCQlxLT5kZXYtPmRldl9pbmZvLmRldl9pZCwgcS0+cV9pZCwgcmV0KTsNCj4g KwkJZ290byBmYWlsOw0KPiArCX0NCj4gKw0KPiArCWlvX3VyaW5nX3JlZ2lzdGVyX3JpbmdfZmQo JnEtPnJpbmcpOw0KPiArDQo+ICsJcmV0ID0gaW9fdXJpbmdfcmVnaXN0ZXJfZmlsZXMoJnEtPnJp bmcsIGRldi0+ZmRzLCBkZXYtPm5yX2Zkcyk7DQo+ICsJaWYgKHJldCkgew0KPiArCQl1YmxrX2Vy cigidWJsayBkZXYgJWQgcXVldWUgJWQgcmVnaXN0ZXIgZmlsZXMgZmFpbGVkICVkXG4iLA0KPiAr CQkJCXEtPmRldi0+ZGV2X2luZm8uZGV2X2lkLCBxLT5xX2lkLCByZXQpOw0KPiArCQlnb3RvIGZh aWw7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICsgZmFpbDoNCj4gKwl1YmxrX3F1ZXVl X2RlaW5pdChxKTsNCj4gKwl1YmxrX2VycigidWJsayBkZXYgJWQgcXVldWUgJWQgZmFpbGVkXG4i LA0KPiArCQkJZGV2LT5kZXZfaW5mby5kZXZfaWQsIHEtPnFfaWQpOw0KPiArCXJldHVybiAtRU5P TUVNOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHVibGtfZGV2X3ByZXAoc3RydWN0IHVibGtf ZGV2ICpkZXYpDQo+ICt7DQo+ICsJaW50IGRldl9pZCA9IGRldi0+ZGV2X2luZm8uZGV2X2lkOw0K PiArCWNoYXIgYnVmWzY0XTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJc25wcmludGYoYnVmLCA2 NCwgIiVzJWQiLCBVQkxLQ19ERVYsIGRldl9pZCk7DQo+ICsJZGV2LT5mZHNbMF0gPSBvcGVuKGJ1 ZiwgT19SRFdSKTsNCj4gKwlpZiAoZGV2LT5mZHNbMF0gPCAwKSB7DQo+ICsJCXJldCA9IC1FQkFE RjsNCj4gKwkJdWJsa19lcnIoImNhbid0IG9wZW4gJXMsIHJldCAlZFxuIiwgYnVmLCBkZXYtPmZk c1swXSk7DQo+ICsJCWdvdG8gZmFpbDsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoZGV2LT50Z3Qub3Bz LT5pbml0X3RndCkNCj4gKwkJcmV0ID0gZGV2LT50Z3Qub3BzLT5pbml0X3RndChkZXYpOw0KPiAr CWVsc2UNCj4gKwkJcmV0ID0gMDsNCj4gKw0KDQppZiByZXQgaXMgaW5pdGlhbGl6ZSB0byAwIGF0 IHRoZSB0aW1lIG9mIGRlY2xhcmF0aW9uIGluIGFib3ZlIGZ1bmN0aW9uDQp3ZSBjYW4gc2FmZWx5 IGdldCByaWQgb2YgZWxzZSBhYm92ZSA/DQoNCj4gKwlyZXR1cm4gcmV0Ow0KPiArZmFpbDoNCj4g KwljbG9zZShkZXYtPmZkc1swXSk7DQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3Rh dGljIHZvaWQgdWJsa19kZXZfdW5wcmVwKHN0cnVjdCB1YmxrX2RldiAqZGV2KQ0KPiArew0KPiAr CWlmIChkZXYtPnRndC5vcHMtPmRlaW5pdF90Z3QpDQo+ICsJCWRldi0+dGd0Lm9wcy0+ZGVpbml0 X3RndChkZXYpOw0KPiArCWNsb3NlKGRldi0+ZmRzWzBdKTsNCj4gK30NCj4gKw0KPiArc3RhdGlj IGludCB1YmxrX3F1ZXVlX2lvX2NtZChzdHJ1Y3QgdWJsa19xdWV1ZSAqcSwNCj4gKwkJc3RydWN0 IHVibGtfaW8gKmlvLCB1bnNpZ25lZCB0YWcpDQo+ICt7DQo+ICsJc3RydWN0IHVibGtzcnZfaW9f Y21kICpjbWQ7DQo+ICsJc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlOw0KPiArCXVuc2lnbmVkIGlu dCBjbWRfb3AgPSAwOw0KPiArCV9fdTY0IHVzZXJfZGF0YTsNCj4gKw0KPiArCS8qIG9ubHkgZnJl ZWQgaW8gY2FuIGJlIGlzc3VlZCAqLw0KPiArCWlmICghKGlvLT5mbGFncyAmIFVCTEtTUlZfSU9f RlJFRSkpDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJLyogd2UgaXNzdWUgYmVjYXVzZSB3ZSBu ZWVkIGVpdGhlciBmZXRjaGluZyBvciBjb21taXR0aW5nICovDQo+ICsJaWYgKCEoaW8tPmZsYWdz ICYNCj4gKwkJKFVCTEtTUlZfTkVFRF9GRVRDSF9SUSB8IFVCTEtTUlZfTkVFRF9DT01NSVRfUlFf Q09NUCkpKQ0KPiArCQlyZXR1cm4gMDsNCj4gKw0KPiArCWlmIChpby0+ZmxhZ3MgJiBVQkxLU1JW X05FRURfQ09NTUlUX1JRX0NPTVApDQo+ICsJCWNtZF9vcCA9IFVCTEtfSU9fQ09NTUlUX0FORF9G RVRDSF9SRVE7DQo+ICsJZWxzZSBpZiAoaW8tPmZsYWdzICYgVUJMS1NSVl9ORUVEX0ZFVENIX1JR KQ0KPiArCQljbWRfb3AgPSBVQkxLX0lPX0ZFVENIX1JFUTsNCj4gKw0KPiArCXNxZSA9IGlvX3Vy aW5nX2dldF9zcWUoJnEtPnJpbmcpOw0KPiArCWlmICghc3FlKSB7DQo+ICsJCXVibGtfZXJyKCIl czogcnVuIG91dCBvZiBzcWUgJWQsIHRhZyAlZFxuIiwNCj4gKwkJCQlfX2Z1bmNfXywgcS0+cV9p ZCwgdGFnKTsNCj4gKwkJcmV0dXJuIC0xOw0KPiArCX0NCj4gKw0KPiArCWNtZCA9IChzdHJ1Y3Qg dWJsa3Nydl9pb19jbWQgKil1YmxrX2dldF9zcWVfY21kKHNxZSk7DQo+ICsNCj4gKwlpZiAoY21k X29wID09IFVCTEtfSU9fQ09NTUlUX0FORF9GRVRDSF9SRVEpDQo+ICsJCWNtZC0+cmVzdWx0ID0g aW8tPnJlc3VsdDsNCj4gKw0KPiArCS8qIFRoZXNlIGZpZWxkcyBzaG91bGQgYmUgd3JpdHRlbiBv bmNlLCBuZXZlciBjaGFuZ2UgKi8NCj4gKwl1YmxrX3NldF9zcWVfY21kX29wKHNxZSwgY21kX29w KTsNCj4gKwlzcWUtPmZkCQk9IDA7CS8qIGRldi0+ZmRzWzBdICovDQo+ICsJc3FlLT5vcGNvZGUJ PSBJT1JJTkdfT1BfVVJJTkdfQ01EOw0KPiArCXNxZS0+ZmxhZ3MJPSBJT1NRRV9GSVhFRF9GSUxF Ow0KPiArCXNxZS0+cndfZmxhZ3MJPSAwOw0KPiArCWNtZC0+dGFnCT0gdGFnOw0KPiArCWNtZC0+ YWRkcgk9IChfX3U2NClpby0+YnVmX2FkZHI7DQo+ICsJY21kLT5xX2lkCT0gcS0+cV9pZDsNCj4g Kw0KPiArCXVzZXJfZGF0YSA9IGJ1aWxkX3VzZXJfZGF0YSh0YWcsIGNtZF9vcCwgMCwgMCk7DQo+ ICsJaW9fdXJpbmdfc3FlX3NldF9kYXRhNjQoc3FlLCB1c2VyX2RhdGEpOw0KPiArDQo+ICsJaW8t PmZsYWdzID0gMDsNCj4gKw0KPiArCXEtPmNtZF9pbmZsaWdodCArPSAxOw0KPiArDQo+ICsJdWJs a19kYmcoVUJMS19EQkdfSU9fQ01ELCAiJXM6IChxaWQgJWQgdGFnICV1IGNtZF9vcCAldSkgaW9m ICV4IHN0b3BwaW5nICVkXG4iLA0KPiArCQkJX19mdW5jX18sIHEtPnFfaWQsIHRhZywgY21kX29w LA0KPiArCQkJaW8tPmZsYWdzLCAhIShxLT5zdGF0ZSAmIFVCTEtTUlZfUVVFVUVfU1RPUFBJTkcp KTsNCj4gKwlyZXR1cm4gMTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCB1YmxrX2NvbXBsZXRl X2lvKHN0cnVjdCB1YmxrX3F1ZXVlICpxLA0KPiArCQl1bnNpZ25lZCB0YWcsIGludCByZXMpDQo+ ICt7DQo+ICsJc3RydWN0IHVibGtfaW8gKmlvID0gJnEtPmlvc1t0YWddOw0KPiArDQo+ICsJdWJs a19tYXJrX2lvX2RvbmUoaW8sIHJlcyk7DQo+ICsNCj4gKwlyZXR1cm4gdWJsa19xdWV1ZV9pb19j bWQocSwgaW8sIHRhZyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHVibGtfc3VibWl0X2Zl dGNoX2NvbW1hbmRzKHN0cnVjdCB1YmxrX3F1ZXVlICpxKQ0KPiArew0KPiArCWludCBpID0gMDsN Cj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBxLT5xX2RlcHRoOyBpKyspDQo+ICsJCXVibGtfcXVl dWVfaW9fY21kKHEsICZxLT5pb3NbaV0sIGkpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHVi bGtfcXVldWVfaXNfaWRsZShzdHJ1Y3QgdWJsa19xdWV1ZSAqcSkNCj4gK3sNCj4gKwlyZXR1cm4g IWlvX3VyaW5nX3NxX3JlYWR5KCZxLT5yaW5nKSAmJiAhcS0+aW9faW5mbGlnaHQ7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyBpbnQgdWJsa19xdWV1ZV9pc19kb25lKHN0cnVjdCB1YmxrX3F1ZXVlICpx KQ0KPiArew0KPiArCXJldHVybiAocS0+c3RhdGUgJiBVQkxLU1JWX1FVRVVFX1NUT1BQSU5HKSAm JiB1YmxrX3F1ZXVlX2lzX2lkbGUocSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHVibGtf cXVldWVfZGlzY2FyZF9pb19wYWdlcyhzdHJ1Y3QgdWJsa19xdWV1ZSAqcSkNCj4gK3sNCj4gKwlj b25zdCBzdHJ1Y3QgdWJsa19kZXYgKmRldiA9IHEtPmRldjsNCj4gKwl1bnNpZ25lZCBpbnQgaW9f YnVmX3NpemUgPSBkZXYtPmRldl9pbmZvLm1heF9pb19idWZfYnl0ZXM7DQo+ICsJaW50IGkgPSAw Ow0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IHEtPnFfZGVwdGg7IGkrKykNCj4gKwkJbWFkdmlz ZShxLT5pb3NbaV0uYnVmX2FkZHIsIGlvX2J1Zl9zaXplLCBNQURWX0RPTlRORUVEKTsNCj4gK30N Cj4gKw0KPiArc3RhdGljIHZvaWQgdWJsa19xdWV1ZV9pZGxlX2VudGVyKHN0cnVjdCB1YmxrX3F1 ZXVlICpxKQ0KPiArew0KPiArCWlmIChxLT5zdGF0ZSAmIFVCTEtTUlZfUVVFVUVfSURMRSkNCj4g KwkJcmV0dXJuOw0KPiArDQo+ICsJdWJsa19kYmcoVUJMS19EQkdfUVVFVUUsICJkZXYlZC1xJWQ6 IGVudGVyIGlkbGUgJXhcbiIsDQo+ICsJCQlxLT5kZXYtPmRldl9pbmZvLmRldl9pZCwgcS0+cV9p ZCwgcS0+c3RhdGUpOw0KPiArCXVibGtfcXVldWVfZGlzY2FyZF9pb19wYWdlcyhxKTsNCj4gKwlx LT5zdGF0ZSB8PSBVQkxLU1JWX1FVRVVFX0lETEU7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lk IHVibGtfcXVldWVfaWRsZV9leGl0KHN0cnVjdCB1YmxrX3F1ZXVlICpxKQ0KPiArew0KPiArCWlm IChxLT5zdGF0ZSAmIFVCTEtTUlZfUVVFVUVfSURMRSkgew0KPiArCQl1YmxrX2RiZyhVQkxLX0RC R19RVUVVRSwgImRldiVkLXElZDogZXhpdCBpZGxlICV4XG4iLA0KPiArCQkJcS0+ZGV2LT5kZXZf aW5mby5kZXZfaWQsIHEtPnFfaWQsIHEtPnN0YXRlKTsNCj4gKwkJcS0+c3RhdGUgJj0gflVCTEtT UlZfUVVFVUVfSURMRTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCB1 Ymxrc3J2X2hhbmRsZV90Z3RfY3FlKHN0cnVjdCB1YmxrX3F1ZXVlICpxLA0KPiArCQlzdHJ1Y3Qg aW9fdXJpbmdfY3FlICpjcWUpDQo+ICt7DQo+ICsJdW5zaWduZWQgdGFnID0gdXNlcl9kYXRhX3Rv X3RhZyhjcWUtPnVzZXJfZGF0YSk7DQo+ICsNCj4gKwlpZiAoY3FlLT5yZXMgPCAwICYmIGNxZS0+ cmVzICE9IC1FQUdBSU4pDQo+ICsJCXVibGtfZXJyKCIlczogZmFpbGVkIHRndCBpbzogcmVzICVk IHFpZCAldSB0YWcgJXUsIGNtZF9vcCAldVxuIiwNCj4gKwkJCV9fZnVuY19fLCBjcWUtPnJlcywg cS0+cV9pZCwNCj4gKwkJCXVzZXJfZGF0YV90b190YWcoY3FlLT51c2VyX2RhdGEpLA0KPiArCQkJ dXNlcl9kYXRhX3RvX29wKGNxZS0+dXNlcl9kYXRhKSk7DQo+ICsNCj4gKwlpZiAocS0+dGd0X29w cy0+dGd0X2lvX2RvbmUpDQo+ICsJCXEtPnRndF9vcHMtPnRndF9pb19kb25lKHEsIHRhZywgY3Fl KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgdWJsa19oYW5kbGVfY3FlKHN0cnVjdCBpb191 cmluZyAqciwNCj4gKwkJc3RydWN0IGlvX3VyaW5nX2NxZSAqY3FlLCB2b2lkICpkYXRhKQ0KPiAr ew0KPiArCXN0cnVjdCB1YmxrX3F1ZXVlICpxID0gY29udGFpbmVyX29mKHIsIHN0cnVjdCB1Ymxr X3F1ZXVlLCByaW5nKTsNCj4gKwl1bnNpZ25lZCB0YWcgPSB1c2VyX2RhdGFfdG9fdGFnKGNxZS0+ dXNlcl9kYXRhKTsNCj4gKwl1bnNpZ25lZCBjbWRfb3AgPSB1c2VyX2RhdGFfdG9fb3AoY3FlLT51 c2VyX2RhdGEpOw0KPiArCWludCBmZXRjaCA9IChjcWUtPnJlcyAhPSBVQkxLX0lPX1JFU19BQk9S VCkgJiYNCj4gKwkJIShxLT5zdGF0ZSAmIFVCTEtTUlZfUVVFVUVfU1RPUFBJTkcpOw0KPiArCXN0 cnVjdCB1YmxrX2lvICppbzsNCj4gKw0KPiArCXVibGtfZGJnKFVCTEtfREJHX0lPX0NNRCwgIiVz OiByZXMgJWQgKHFpZCAlZCB0YWcgJXUgY21kX29wICV1IHRhcmdldCAlZCkgc3RvcHBpbmcgJWRc biIsDQo+ICsJCQlfX2Z1bmNfXywgY3FlLT5yZXMsIHEtPnFfaWQsIHRhZywgY21kX29wLA0KPiAr CQkJaXNfdGFyZ2V0X2lvKGNxZS0+dXNlcl9kYXRhKSwNCj4gKwkJCShxLT5zdGF0ZSAmIFVCTEtT UlZfUVVFVUVfU1RPUFBJTkcpKTsNCj4gKw0KPiArCS8qIERvbid0IHJldHJpZXZlIGlvIGluIGNh c2Ugb2YgdGFyZ2V0IGlvICovDQo+ICsJaWYgKGlzX3RhcmdldF9pbyhjcWUtPnVzZXJfZGF0YSkp IHsNCj4gKwkJdWJsa3Nydl9oYW5kbGVfdGd0X2NxZShxLCBjcWUpOw0KPiArCQlyZXR1cm47DQo+ ICsJfQ0KPiArDQo+ICsJaW8gPSAmcS0+aW9zW3RhZ107DQo+ICsJcS0+Y21kX2luZmxpZ2h0LS07 DQo+ICsNCj4gKwlpZiAoIWZldGNoKSB7DQo+ICsJCXEtPnN0YXRlIHw9IFVCTEtTUlZfUVVFVUVf U1RPUFBJTkc7DQo+ICsJCWlvLT5mbGFncyAmPSB+VUJMS1NSVl9ORUVEX0ZFVENIX1JROw0KPiAr CX0NCj4gKw0KPiArCWlmIChjcWUtPnJlcyA9PSBVQkxLX0lPX1JFU19PSykgew0KPiArCQl1Ymxr X2Fzc2VydCh0YWcgPCBxLT5xX2RlcHRoKTsNCj4gKwkJcS0+dGd0X29wcy0+cXVldWVfaW8ocSwg dGFnKTsNCj4gKwl9IGVsc2Ugew0KPiArCQkvKg0KPiArCQkgKiBDT01NSVRfUkVRIHdpbGwgYmUg Y29tcGxldGVkIGltbWVkaWF0ZWx5IHNpbmNlIG5vIGZldGNoaW5nDQo+ICsJCSAqIHBpZ2d5YmFj ayBpcyByZXF1aXJlZC4NCj4gKwkJICoNCj4gKwkJICogTWFya2luZyBJT19GUkVFIG9ubHksIHRo ZW4gdGhpcyBpbyB3b24ndCBiZSBpc3N1ZWQgc2luY2UNCj4gKwkJICogd2Ugb25seSBpc3N1ZSBp byB3aXRoIChVQkxLU1JWX0lPX0ZSRUUgfCBVQkxLU1JWX05FRURfKikNCj4gKwkJICoNCj4gKwkJ ICogKi8NCj4gKwkJaW8tPmZsYWdzID0gVUJMS1NSVl9JT19GUkVFOw0KPiArCX0NCg0KaWYgeW91 IGNhbiByZXR1cm47IGZyb20gYWJvdmUgaWYgd2UgY2FuIHJlbW92ZSB0aGUgZWxzZSwgbm8gYmln Z3kNCnRob3VnaC4uDQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgdWJsa19yZWFwX2V2ZW50c191 cmluZyhzdHJ1Y3QgaW9fdXJpbmcgKnIpDQo+ICt7DQo+ICsJc3RydWN0IGlvX3VyaW5nX2NxZSAq Y3FlOw0KPiArCXVuc2lnbmVkIGhlYWQ7DQo+ICsJaW50IGNvdW50ID0gMDsNCj4gKw0KPiArCWlv X3VyaW5nX2Zvcl9lYWNoX2NxZShyLCBoZWFkLCBjcWUpIHsNCj4gKwkJdWJsa19oYW5kbGVfY3Fl KHIsIGNxZSwgTlVMTCk7DQo+ICsJCWNvdW50ICs9IDE7DQo+ICsJfQ0KPiArCWlvX3VyaW5nX2Nx X2FkdmFuY2UociwgY291bnQpOw0KPiArDQo+ICsJcmV0dXJuIGNvdW50Ow0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgaW50IHVibGtfcHJvY2Vzc19pbyhzdHJ1Y3QgdWJsa19xdWV1ZSAqcSkNCj4gK3sN Cj4gKwlpbnQgcmV0LCByZWFwcGVkOw0KPiArCXN0cnVjdCBfX2tlcm5lbF90aW1lc3BlYyB0cyA9 IHsNCj4gKwkJLnR2X3NlYyA9IFVCTEtTUlZfSU9fSURMRV9TRUNTLA0KPiArCQkudHZfbnNlYyA9 IDANCj4gKyAgICAgICAgfTsNCj4gKwlzdHJ1Y3QgX19rZXJuZWxfdGltZXNwZWMgKnRzcCA9IChx LT5zdGF0ZSAmIFVCTEtTUlZfUVVFVUVfSURMRSkgPw0KPiArCQlOVUxMIDogJnRzOw0KPiArCXN0 cnVjdCBpb191cmluZ19jcWUgKmNxZTsNCj4gKw0KPiArCXVibGtfZGJnKFVCTEtfREJHX1FVRVVF LCAiZGV2JWQtcSVkOiB0b19zdWJtaXQgJWQgaW5mbGlnaHQgY21kICV1IHN0b3BwaW5nICVkXG4i LA0KPiArCQkJCXEtPmRldi0+ZGV2X2luZm8uZGV2X2lkLA0KPiArCQkJCXEtPnFfaWQsIGlvX3Vy aW5nX3NxX3JlYWR5KCZxLT5yaW5nKSwNCj4gKwkJCQlxLT5jbWRfaW5mbGlnaHQsDQo+ICsJCQkJ KHEtPnN0YXRlICYgVUJMS1NSVl9RVUVVRV9TVE9QUElORykpOw0KPiArDQo+ICsJaWYgKHVibGtf cXVldWVfaXNfZG9uZShxKSkNCj4gKwkJcmV0dXJuIC1FTk9ERVY7DQo+ICsNCj4gKwlyZXQgPSBp b191cmluZ19zdWJtaXRfYW5kX3dhaXRfdGltZW91dCgmcS0+cmluZywgJmNxZSwgMSwgdHNwLCBO VUxMKTsNCj4gKwlyZWFwcGVkID0gdWJsa19yZWFwX2V2ZW50c191cmluZygmcS0+cmluZyk7DQo+ ICsNCj4gKwl1YmxrX2RiZyhVQkxLX0RCR19RVUVVRSwgInN1Ym1pdCByZXN1bHQgJWQsIHJlYXBw ZWQgJWQgc3RvcCAlZCBpZGxlICVkXG4iLA0KPiArCQkJcmV0LCByZWFwcGVkLCAocS0+c3RhdGUg JiBVQkxLU1JWX1FVRVVFX1NUT1BQSU5HKSwNCj4gKwkJCShxLT5zdGF0ZSAmIFVCTEtTUlZfUVVF VUVfSURMRSkpOw0KPiArDQo+ICsJaWYgKCEocS0+c3RhdGUgJiBVQkxLU1JWX1FVRVVFX1NUT1BQ SU5HKSkgew0KPiArCQlpZiAocmV0ID09IC1FVElNRSAmJiByZWFwcGVkID09IDAgJiYgdWJsa19x dWV1ZV9pc19pZGxlKHEpKQ0KPiArCQkJdWJsa19xdWV1ZV9pZGxlX2VudGVyKHEpOw0KPiArCQll bHNlDQo+ICsJCQl1YmxrX3F1ZXVlX2lkbGVfZXhpdChxKTsNCj4gKwl9DQo+ICsJcmV0dXJuIHJl YXBwZWQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkICp1YmxrX2lvX2hhbmRsZXJfZm4odm9p ZCAqZGF0YSkNCj4gK3sNCj4gKwlzdHJ1Y3QgdWJsa19xdWV1ZSAqcSA9IGRhdGE7DQo+ICsJaW50 IGRldl9pZCA9IHEtPmRldi0+ZGV2X2luZm8uZGV2X2lkOw0KPiArCWludCByZXQ7DQo+ICsNCj4g KwlyZXQgPSB1YmxrX3F1ZXVlX2luaXQocSk7DQo+ICsJaWYgKHJldCkgew0KPiArCQl1YmxrX2Vy cigidWJsayBkZXYgJWQgcXVldWUgJWQgaW5pdCBxdWV1ZSBmYWlsZWRcbiIsDQo+ICsJCQkJZGV2 X2lkLCBxLT5xX2lkKTsNCj4gKwkJcmV0dXJuIE5VTEw7DQo+ICsJfQ0KPiArDQo+ICsJLyogc3Vi bWl0IGFsbCBpbyBjb21tYW5kcyB0byB1YmxrIGRyaXZlciAqLw0KPiArCXVibGtfc3VibWl0X2Zl dGNoX2NvbW1hbmRzKHEpOw0KPiArDQo+ICsJdWJsa19kYmcoVUJMS19EQkdfUVVFVUUsICJ0aWQg JWQ6IHVibGsgZGV2ICVkIHF1ZXVlICVkIHN0YXJ0ZWRcbiIsDQo+ICsJCQlnZXR0aWQoKSwNCj4g KwkJCWRldl9pZCwgcS0+cV9pZCk7DQo+ICsJZG8gew0KPiArCQlpZiAodWJsa19wcm9jZXNzX2lv KHEpIDwgMCkNCj4gKwkJCWJyZWFrOw0KPiArCX0gd2hpbGUgKDEpOw0KPiArDQo+ICsJdWJsa19k YmcoVUJMS19EQkdfUVVFVUUsICJ1YmxrIGRldiAlZCBxdWV1ZSAlZCBleGl0ZWRcbiIsIGRldl9p ZCwgcS0+cV9pZCk7DQo+ICsJdWJsa19xdWV1ZV9kZWluaXQocSk7DQo+ICsJcmV0dXJuIE5VTEw7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHVibGtfc2V0X3BhcmFtZXRlcnMoc3RydWN0IHVi bGtfZGV2ICpkZXYpDQo+ICt7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCXJldCA9IHVibGtfY3Ry bF9zZXRfcGFyYW1zKGRldiwgJmRldi0+dGd0LnBhcmFtcyk7DQo+ICsJaWYgKHJldCkNCj4gKwkJ dWJsa19lcnIoImRldiAlZCBzZXQgYmFzaWMgcGFyYW1ldGVyIGZhaWxlZCAlZFxuIiwNCj4gKwkJ CQlkZXYtPmRldl9pbmZvLmRldl9pZCwgcmV0KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCB1 YmxrX3N0YXJ0X2RhZW1vbihzdHJ1Y3QgdWJsa19kZXYgKmRldikNCj4gK3sNCj4gKwlpbnQgcmV0 LCBpOw0KPiArCXZvaWQgKnRocmVhZF9yZXQ7DQo+ICsJY29uc3Qgc3RydWN0IHVibGtzcnZfY3Ry bF9kZXZfaW5mbyAqZGluZm8gPSAmZGV2LT5kZXZfaW5mbzsNCj4gKw0KPiArCWRhZW1vbigxLCAx KTsNCj4gKw0KPiArCXVibGtfZGJnKFVCTEtfREJHX0RFViwgIiVzIGVudGVyXG4iLCBfX2Z1bmNf Xyk7DQo+ICsNCj4gKwlyZXQgPSB1YmxrX2Rldl9wcmVwKGRldik7DQo+ICsJaWYgKCFkZXYpDQo+ ICsJCXJldHVybiAtRU5PTUVNOw0KPiArDQoNCmNhbiBkZXYgYmUgTlVMTCBldmVyIGhlcmUgPyBk byB3ZSBuZWVkIHRvIGNoZWNrIHJldCBpbnN0YWVkIG9mIGRldj8NCihJIGRvbid0IHRoaW5rIHNv IHNpbmNlIGxvb2tpbmcgaXQgdWJsa19kZXZfcHJlcCgpIGl0IHdpbGwgbm90IGNoYW5nZQ0KZGV2 IHZhbHVlIGFuZCBpdCBpcyB1bmNvbmRpdGlvbmFsbHkgZGVmZXJlbmNlZCBiZWZvcmUgaXQncyB1 c2UpLg0KDQphbHNvIHNodWxkbid0IHdlIHJldHVybiByZXQgaGVyZSBhcyB1YmxrX2Rldl9wcmVw KCkgd2lsbCByZXRydW4gbm9uDQotRU5PTUVNIHZhbHVlID8NCg0KPiArCWZvciAoaSA9IDA7IGkg PCBkaW5mby0+bnJfaHdfcXVldWVzOyBpKyspIHsNCj4gKwkJZGV2LT5xW2ldLmRldiA9IGRldjsN Cj4gKwkJZGV2LT5xW2ldLnFfaWQgPSBpOw0KPiArCQlwdGhyZWFkX2NyZWF0ZSgmZGV2LT5xW2ld LnRocmVhZCwgTlVMTCwNCj4gKwkJCQl1YmxrX2lvX2hhbmRsZXJfZm4sDQo+ICsJCQkJJmRldi0+ cVtpXSk7DQo+ICsJfQ0KPiArDQo+ICsJdWJsa19zZXRfcGFyYW1ldGVycyhkZXYpOw0KPiArDQo+ ICsJLyogZXZlcnl0aGluZyBpcyBmaW5lIG5vdywgc3RhcnQgdXMgKi8NCj4gKwlyZXQgPSB1Ymxr X2N0cmxfc3RhcnRfZGV2KGRldiwgZ2V0cGlkKCkpOw0KPiArCWlmIChyZXQgPCAwKQ0KPiArCQln b3RvIGZhaWw7DQo+ICsNCj4gKwl1YmxrX2N0cmxfZ2V0X2luZm8oZGV2KTsNCj4gKwl1YmxrX2N0 cmxfZHVtcChkZXYsIHRydWUpOw0KPiArDQo+ICsJLyogd2FpdCB1bnRpbCB3ZSBhcmUgdGVybWlu YXRlZCAqLw0KPiArCWZvciAoaSA9IDA7IGkgPCBkaW5mby0+bnJfaHdfcXVldWVzOyBpKyspDQo+ ICsJCXB0aHJlYWRfam9pbihkZXYtPnFbaV0udGhyZWFkLCAmdGhyZWFkX3JldCk7DQo+ICsgZmFp bDoNCj4gKwl1YmxrX2Rldl91bnByZXAoZGV2KTsNCj4gKwl1YmxrX2RiZyhVQkxLX0RCR19ERVYs ICIlcyBleGl0XG4iLCBfX2Z1bmNfXyk7DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgaW50IGNtZF9kZXZfYWRkKGludCBhcmdjLCBjaGFyICphcmd2W10pDQo+ICt7 DQo+ICsJc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gbG9uZ29wdHNbXSA9IHsNCj4gKwkJeyAi dHlwZSIsCQkxLAlOVUxMLCAndCcgfSwNCj4gKwkJeyAibnVtYmVyIiwJCTEsCU5VTEwsICduJyB9 LA0KPiArCQl7ICJxdWV1ZXMiLAkJMSwJTlVMTCwgJ3EnIH0sDQo+ICsJCXsgImRlcHRoIiwJCTEs CU5VTEwsICdkJyB9LA0KPiArCQl7ICJkZWJ1Z19tYXNrIiwJMSwJTlVMTCwgMH0sDQo+ICsJCXsg InF1aWV0IiwJMCwJTlVMTCwgMH0sDQo+ICsJCXsgTlVMTCB9DQo+ICsJfTsNCj4gKwljb25zdCBz dHJ1Y3QgdWJsa190Z3Rfb3BzICpvcHM7DQo+ICsJc3RydWN0IHVibGtzcnZfY3RybF9kZXZfaW5m byAqaW5mbzsNCj4gKwlzdHJ1Y3QgdWJsa19kZXYgKmRldjsNCj4gKwlpbnQgcmV0LCBvcHRpb25f aWR4LCBvcHQ7DQo+ICsJY29uc3QgY2hhciAqdGd0X3R5cGUgPSBOVUxMOw0KPiArCWludCBkZXZf aWQgPSAtMTsNCj4gKwl1bnNpZ25lZCBucl9xdWV1ZXMgPSAyLCBkZXB0aCA9IFVCTEtfUVVFVUVf REVQVEg7DQo+ICsNCj4gKwl3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICIt OnQ6bjpkOnE6IiwNCj4gKwkJCQkgIGxvbmdvcHRzLCAmb3B0aW9uX2lkeCkpICE9IC0xKSB7DQo+ ICsJCXN3aXRjaCAob3B0KSB7DQo+ICsJCWNhc2UgJ24nOg0KPiArCQkJZGV2X2lkID0gc3RydG9s KG9wdGFyZywgTlVMTCwgMTApOw0KPiArCQkJYnJlYWs7DQo+ICsJCWNhc2UgJ3QnOg0KPiArCQkJ dGd0X3R5cGUgPSBvcHRhcmc7DQo+ICsJCQlicmVhazsNCj4gKwkJY2FzZSAncSc6DQo+ICsJCQlu cl9xdWV1ZXMgPSBzdHJ0b2wob3B0YXJnLCBOVUxMLCAxMCk7DQo+ICsJCQlicmVhazsNCj4gKwkJ Y2FzZSAnZCc6DQo+ICsJCQlkZXB0aCA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDEwKTsNCj4gKwkJ CWJyZWFrOw0KPiArCQljYXNlIDA6DQo+ICsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25f aWR4XS5uYW1lLCAiZGVidWdfbWFzayIpKQ0KPiArCQkJCXVibGtfZGJnX21hc2sgPSBzdHJ0b2wo b3B0YXJnLCBOVUxMLCAxNik7DQo+ICsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4 XS5uYW1lLCAicXVpZXQiKSkNCj4gKwkJCQl1YmxrX2RiZ19tYXNrID0gMDsNCj4gKwkJCWJyZWFr Ow0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJb3B0aW5kID0gMDsNCj4gKw0KPiArCW9wcyA9IHVi bGtfZmluZF90Z3QodGd0X3R5cGUpOw0KPiArCWlmICghb3BzKSB7DQo+ICsJCXVibGtfZXJyKCIl czogbm8gc3VjaCB0Z3QgdHlwZSwgdHlwZSAlc1xuIiwNCj4gKwkJCQlfX2Z1bmNfXywgdGd0X3R5 cGUpOw0KPiArCQlyZXR1cm4gLUVOT0RFVjsNCj4gKwl9DQo+ICsNCj4gKwlpZiAobnJfcXVldWVz ID4gVUJMS19NQVhfUVVFVUVTIHx8IGRlcHRoID4gVUJMS19RVUVVRV9ERVBUSCkgew0KPiArCQl1 YmxrX2VycigiJXM6IGludmFsaWQgbnJfcXVldWVzIG9yIGRlcHRoIHF1ZXVlcyAldSBkZXB0aCAl dVxuIiwNCj4gKwkJCQlfX2Z1bmNfXywgbnJfcXVldWVzLCBkZXB0aCk7DQo+ICsJCXJldHVybiAt RUlOVkFMOw0KPiArCX0NCj4gKw0KPiArCWRldiA9IHVibGtfY3RybF9pbml0KCk7DQo+ICsJaWYg KCFkZXYpIHsNCj4gKwkJdWJsa19lcnIoIiVzOiBjYW4ndCBhbGxvYyBkZXYgaWQgJWQsIHR5cGUg JXNcbiIsDQo+ICsJCQkJX19mdW5jX18sIGRldl9pZCwgdGd0X3R5cGUpOw0KPiArCQlyZXR1cm4g LUVOT01FTTsNCj4gKwl9DQo+ICsNCj4gKwlpbmZvID0gJmRldi0+ZGV2X2luZm87DQo+ICsJaW5m by0+ZGV2X2lkID0gZGV2X2lkOw0KPiArICAgICAgICBpbmZvLT5ucl9od19xdWV1ZXMgPSBucl9x dWV1ZXM7DQo+ICsgICAgICAgIGluZm8tPnF1ZXVlX2RlcHRoID0gZGVwdGg7DQo+ICsJZGV2LT50 Z3Qub3BzID0gb3BzOw0KPiArCWRldi0+dGd0LmFyZ2MgPSBhcmdjOw0KPiArCWRldi0+dGd0LmFy Z3YgPSBhcmd2Ow0KPiArDQo+ICsJcmV0ID0gdWJsa19jdHJsX2FkZF9kZXYoZGV2KTsNCj4gKwlp ZiAocmV0IDwgMCkgew0KPiArCQl1YmxrX2VycigiJXM6IGNhbid0IGFkZCBkZXYgaWQgJWQsIHR5 cGUgJXMgcmV0ICVkXG4iLA0KPiArCQkJCV9fZnVuY19fLCBkZXZfaWQsIHRndF90eXBlLCByZXQp Ow0KPiArCQlnb3RvIGZhaWw7DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0gdWJsa19zdGFydF9kYWVt b24oZGV2KTsNCj4gKwlpZiAocmV0IDwgMCkgew0KPiArCQl1YmxrX2VycigiJXM6IGNhbid0IHN0 YXJ0IGRhZW1vbiBpZCAlZCwgdHlwZSAlc1xuIiwNCj4gKwkJCQlfX2Z1bmNfXywgZGV2X2lkLCB0 Z3RfdHlwZSk7DQo+ICsJCWdvdG8gZmFpbF9kZWw7DQo+ICsJfQ0KPiArZmFpbF9kZWw6DQo+ICsJ dWJsa19jdHJsX2RlbF9kZXYoZGV2KTsNCj4gK2ZhaWw6DQo+ICsJdWJsa19jdHJsX2RlaW5pdChk ZXYpOw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgdWJsa19zdG9w X2lvX2RhZW1vbihjb25zdCBzdHJ1Y3QgdWJsa19kZXYgKmRldikNCj4gK3sNCj4gKwlpbnQgZGFl bW9uX3BpZCA9IGRldi0+ZGV2X2luZm8udWJsa3Nydl9waWQ7DQo+ICsJaW50IGNudCA9IDAsIHJl dDsNCj4gKw0KPiArCWlmIChkYWVtb25fcGlkID09IC0xKQ0KPiArCQlyZXR1cm4gMDsNCj4gKw0K PiArCS8qIHdhaXQgdW50aWwgZGFlbW9uIGlzIGV4aXRlZCwgb3IgdGltZW91dCBhZnRlciAzIHNl Y29uZHMgKi8NCj4gKwlkbyB7DQo+ICsJCXJldCA9IGtpbGwoZGFlbW9uX3BpZCwgMCk7DQo+ICsJ CWlmIChyZXQpDQo+ICsJCQlicmVhazsNCj4gKwkJdXNsZWVwKDUwMDAwMCk7DQo+ICsJCWNudCsr Ow0KPiArCX0gd2hpbGUgKCFyZXQgJiYgY250IDwgNik7DQo+ICsNCj4gKwl1YmxrX2RiZyhVQkxL X0RCR19ERVYsICIlczogcGlkICVkIHJldCAlZFxuIiwgX19mdW5jX18sIGRhZW1vbl9waWQsIHJl dCk7DQo+ICsNCj4gKwlyZXR1cm4gcmV0ICE9IDAgPyAwIDogLTE7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbnQgX19jbWRfZGV2X2RlbChpbnQgbnVtYmVyLCBib29sIGxvZykNCj4gK3sNCj4gKwlz dHJ1Y3QgdWJsa19kZXYgKmRldjsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJZGV2ID0gdWJsa19j dHJsX2luaXQoKTsNCj4gKwlkZXYtPmRldl9pbmZvLmRldl9pZCA9IG51bWJlcjsNCj4gKw0KPiAr CXJldCA9IHVibGtfY3RybF9nZXRfaW5mbyhkZXYpOw0KPiArCWlmIChyZXQgPCAwKSB7DQo+ICsJ CWdvdG8gZmFpbDsNCj4gKwl9DQo+ICsNCj4gKwlyZXQgPSB1YmxrX2N0cmxfc3RvcF9kZXYoZGV2 KTsNCj4gKwlpZiAocmV0IDwgMCkgew0KPiArCQlpZiAobG9nKQ0KPiArCQkJdWJsa19lcnIoInN0 b3AgZGV2ICVkIGZhaWxlZFxuIiwgbnVtYmVyKTsNCj4gKwkJZ290byBmYWlsOw0KPiArCX0NCj4g Kw0KPiArCXJldCA9IHVibGtfc3RvcF9pb19kYWVtb24oZGV2KTsNCj4gKwlpZiAocmV0IDwgMCkg ew0KPiArCQlpZiAobG9nKQ0KPiArCQkJdWJsa19lcnIoInN0b3AgZGFlbW9uICVkIGZhaWxlZFxu IiwgbnVtYmVyKTsNCj4gKwl9DQo+ICsNCj4gKwl1YmxrX2N0cmxfZGVsX2RldihkZXYpOw0KPiAr ZmFpbDoNCj4gKwl1YmxrX2N0cmxfZGVpbml0KGRldik7DQo+ICsJcmV0dXJuIHJldDsNCj4gK30N Cj4gKw0KPiArc3RhdGljIGludCBjbWRfZGV2X2RlbChpbnQgYXJnYywgY2hhciAqYXJndltdKQ0K PiArew0KPiArCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIGxvbmdvcHRzW10gPSB7DQo+ICsJ CXsgIm51bWJlciIsCQkxLAlOVUxMLCAnbicgfSwNCj4gKwkJeyAiYWxsIiwJCTAsCU5VTEwsICdh JyB9LA0KPiArCQl7ICJkZWJ1Z19tYXNrIiwJMSwJTlVMTCwgMH0sDQo+ICsJCXsgTlVMTCB9DQo+ ICsJfTsNCj4gKwlpbnQgbnVtYmVyID0gLTI7DQo+ICsJaW50IG9wdCwgaSwgb3B0aW9uX2lkeDsN Cj4gKw0KPiArCXdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgIm46YSIsDQo+ ICsJCQkJICBsb25nb3B0cywgJm9wdGlvbl9pZHgpKSAhPSAtMSkgew0KPiArCQlzd2l0Y2ggKG9w dCkgew0KPiArCQljYXNlICdhJzoNCj4gKwkJCW51bWJlciA9IC0xOw0KPiArCQkJYnJlYWs7DQo+ ICsNCj4gKwkJY2FzZSAnbic6DQo+ICsJCQludW1iZXIgPSBzdHJ0b2wob3B0YXJnLCBOVUxMLCAx MCk7DQo+ICsJCQlicmVhazsNCj4gKwkJY2FzZSAwOg0KPiArCQkJaWYgKCFzdHJjbXAobG9uZ29w dHNbb3B0aW9uX2lkeF0ubmFtZSwgImRlYnVnX21hc2siKSkNCj4gKwkJCQl1YmxrX2RiZ19tYXNr ID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMTYpOw0KPiArCQkJYnJlYWs7DQo+ICsJCX0NCj4gKwl9 DQo+ICsNCj4gKwlpZiAobnVtYmVyID49IDApDQo+ICsJCXJldHVybiBfX2NtZF9kZXZfZGVsKG51 bWJlciwgdHJ1ZSk7DQo+ICsJZWxzZSBpZiAobnVtYmVyICE9IC0xKSB7DQo+ICsJCXVibGtfZXJy KCIlczogcGFzcyB3cm9uZyBkZXZpZCBvciBub3QgZGVsZXRlIHZpYSAtYVxuIik7DQo+ICsJCXJl dHVybiAtRUlOVkFMOw0KPiArCX0NCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCAyNTU7IGkrKykN Cj4gKwkJX19jbWRfZGV2X2RlbChpLCBmYWxzZSk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30N Cj4gKw0KPiArc3RhdGljIGludCBfX2NtZF9kZXZfbGlzdChpbnQgbnVtYmVyLCBib29sIGxvZykN Cj4gK3sNCj4gKwlzdHJ1Y3QgdWJsa19kZXYgKmRldiA9IHVibGtfY3RybF9pbml0KCk7DQo+ICsJ aW50IHJldDsNCj4gKw0KPiArCWRldi0+ZGV2X2luZm8uZGV2X2lkID0gbnVtYmVyOw0KPiArDQo+ ICsJcmV0ID0gdWJsa19jdHJsX2dldF9pbmZvKGRldik7DQo+ICsJaWYgKHJldCA8IDApIHsNCj4g KwkJaWYgKGxvZykNCj4gKwkJCXVibGtfZXJyKCIlczogY2FuJ3QgZ2V0IGRldiBpbmZvIGZyb20g JWQ6ICVkXG4iLA0KPiArCQkJCQlfX2Z1bmNfXywgbnVtYmVyLCByZXQpOw0KPiArCX0gZWxzZSB7 DQo+ICsJCXVibGtfY3RybF9kdW1wKGRldiwgZmFsc2UpOw0KPiArCX0NCj4gKw0KPiArCXVibGtf Y3RybF9kZWluaXQoZGV2KTsNCj4gKw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gKw0K PiArc3RhdGljIGludCBjbWRfZGV2X2xpc3QoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCj4gK3sN Cj4gKwlzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBsb25nb3B0c1tdID0gew0KPiArCQl7ICJu dW1iZXIiLAkJMSwJTlVMTCwgJ24nIH0sDQo+ICsJCXsgImFsbCIsCQkwLAlOVUxMLCAnYScgfSwN Cj4gKwkJeyBOVUxMIH0NCj4gKwl9Ow0KPiArCWludCBudW1iZXIgPSAtMTsNCj4gKwlpbnQgb3B0 LCBpOw0KPiArDQo+ICsJd2hpbGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAibjph IiwNCj4gKwkJCQkgIGxvbmdvcHRzLCBOVUxMKSkgIT0gLTEpIHsNCj4gKwkJc3dpdGNoIChvcHQp IHsNCj4gKwkJY2FzZSAnYSc6DQo+ICsJCQlicmVhazsNCj4gKw0KPiArCQljYXNlICduJzoNCj4g KwkJCW51bWJlciA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDEwKTsNCj4gKwkJCWJyZWFrOw0KPiAr CQl9DQo+ICsJfQ0KPiArDQo+ICsJaWYgKG51bWJlciA+PSAwKQ0KPiArCQlyZXR1cm4gX19jbWRf ZGV2X2xpc3QobnVtYmVyLCB0cnVlKTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCAyNTU7IGkr KykNCj4gKwkJX19jbWRfZGV2X2xpc3QoaSwgZmFsc2UpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgY21kX2Rldl9oZWxwKGludCBhcmdjLCBjaGFyICphcmd2 W10pDQo+ICt7DQo+ICsJcHJpbnRmKCIlcyBhZGQgLXQge251bGx8bG9vcH0gWy1xIG5yX3F1ZXVl c10gWy1kIGRlcHRoXSBbLW4gZGV2X2lkXSBcbiIsDQo+ICsJCQlhcmd2WzBdKTsNCj4gKwlwcmlu dGYoIlx0IGRlZmF1bHQ6IG5yX3F1ZXVlcz0yKG1heCA0KSwgZGVwdGg9MTI4KG1heCAxMjgpLCBk ZXZfaWQ9LTEoYXV0byBhbGxvY2F0aW9uKVxuIik7DQo+ICsJcHJpbnRmKCJcdCAtdCBsb29wIC1m IGJhY2tpbmdfZmlsZSBcbiIpOw0KPiArCXByaW50ZigiXHQgLXQgbnVsbFxuIik7DQo+ICsJcHJp bnRmKCIlcyBkZWwgWy1uIGRldl9pZF0gLWEgXG4iLCBhcmd2WzBdKTsNCj4gKwlwcmludGYoIlx0 IC1hIGRlbGV0ZSBhbGwgZGV2aWNlcyAtbiBkZWxldGUgc3BlY2lmaWVkIGRldmljZVxuIik7DQo+ ICsJcHJpbnRmKCIlcyBsaXN0IFstbiBkZXZfaWRdIC1hIFxuIiwgYXJndlswXSk7DQo+ICsJcHJp bnRmKCJcdCAtYSBsaXN0IGFsbCBkZXZpY2VzLCAtbiBsaXN0IHNwZWNpZmllZCBkZXZpY2UsIGRl ZmF1bHQgLWEgXG4iKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg aW50IHVibGtfbnVsbF90Z3RfaW5pdChzdHJ1Y3QgdWJsa19kZXYgKmRldikNCj4gK3sNCj4gKwlj b25zdCBzdHJ1Y3QgdWJsa3Nydl9jdHJsX2Rldl9pbmZvICppbmZvID0gJmRldi0+ZGV2X2luZm87 DQo+ICsJdW5zaWduZWQgbG9uZyBkZXZfc2l6ZSA9IDI1MFVMIDw8IDMwOw0KPiArDQo+ICsJZGV2 LT50Z3QuZGV2X3NpemUgPSBkZXZfc2l6ZTsNCj4gKwlkZXYtPnRndC5wYXJhbXMgPSAoc3RydWN0 IHVibGtfcGFyYW1zKSB7DQo+ICsJCS50eXBlcyA9IFVCTEtfUEFSQU1fVFlQRV9CQVNJQywNCj4g KwkJLmJhc2ljID0gew0KPiArCQkJLmxvZ2ljYWxfYnNfc2hpZnQJPSA5LA0KPiArCQkJLnBoeXNp Y2FsX2JzX3NoaWZ0CT0gMTIsDQo+ICsJCQkuaW9fb3B0X3NoaWZ0CQk9IDEyLA0KPiArCQkJLmlv X21pbl9zaGlmdAkJPSA5LA0KPiArCQkJLm1heF9zZWN0b3JzCQk9IGluZm8tPm1heF9pb19idWZf Ynl0ZXMgPj4gOSwNCj4gKwkJCS5kZXZfc2VjdG9ycwkJPSBkZXZfc2l6ZSA+PiA5LA0KPiArCQl9 LA0KPiArCX07DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCB1 YmxrX251bGxfcXVldWVfaW8oc3RydWN0IHVibGtfcXVldWUgKnEsIGludCB0YWcpDQo+ICt7DQo+ ICsJY29uc3Qgc3RydWN0IHVibGtzcnZfaW9fZGVzYyAqaW9kID0gdWJsa19nZXRfaW9kKHEsIHRh Zyk7DQo+ICsNCj4gKwl1YmxrX2NvbXBsZXRlX2lvKHEsIHRhZywgaW9kLT5ucl9zZWN0b3JzIDw8 IDkpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbG9vcF9x dWV1ZV90Z3RfaW8oc3RydWN0IHVibGtfcXVldWUgKnEsIGludCB0YWcpDQo+ICt7DQo+ICsJY29u c3Qgc3RydWN0IHVibGtzcnZfaW9fZGVzYyAqaW9kID0gdWJsa19nZXRfaW9kKHEsIHRhZyk7DQo+ ICsJc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlID0gaW9fdXJpbmdfZ2V0X3NxZSgmcS0+cmluZyk7 DQo+ICsJdW5zaWduZWQgdWJsa19vcCA9IHVibGtzcnZfZ2V0X29wKGlvZCk7DQo+ICsNCj4gKwlp ZiAoIXNxZSkNCj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKwlzd2l0Y2ggKHVibGtfb3Ap IHsNCj4gKwljYXNlIFVCTEtfSU9fT1BfRkxVU0g6DQo+ICsJCWlvX3VyaW5nX3ByZXBfc3luY19m aWxlX3JhbmdlKHNxZSwgMSAvKmZkc1sxXSovLA0KPiArCQkJCWlvZC0+bnJfc2VjdG9ycyA8PCA5 LA0KPiArCQkJCWlvZC0+c3RhcnRfc2VjdG9yIDw8IDksDQo+ICsJCQkJSU9SSU5HX0ZTWU5DX0RB VEFTWU5DKTsNCj4gKwkJaW9fdXJpbmdfc3FlX3NldF9mbGFncyhzcWUsIElPU1FFX0ZJWEVEX0ZJ TEUpOw0KPiArCQlicmVhazsNCj4gKwljYXNlIFVCTEtfSU9fT1BfV1JJVEVfWkVST0VTOg0KPiAr CWNhc2UgVUJMS19JT19PUF9ESVNDQVJEOg0KPiArCQlyZXR1cm4gLUVOT1RTVVA7DQo+ICsJY2Fz ZSBVQkxLX0lPX09QX1JFQUQ6DQo+ICsJCWlvX3VyaW5nX3ByZXBfcmVhZChzcWUsIDEgLypmZHNb MV0qLywNCj4gKwkJCQkodm9pZCAqKWlvZC0+YWRkciwNCj4gKwkJCQlpb2QtPm5yX3NlY3RvcnMg PDwgOSwNCj4gKwkJCQlpb2QtPnN0YXJ0X3NlY3RvciA8PCA5KTsNCj4gKwkJaW9fdXJpbmdfc3Fl X3NldF9mbGFncyhzcWUsIElPU1FFX0ZJWEVEX0ZJTEUpOw0KPiArCQlicmVhazsNCj4gKwljYXNl IFVCTEtfSU9fT1BfV1JJVEU6DQo+ICsJCWlvX3VyaW5nX3ByZXBfd3JpdGUoc3FlLCAxIC8qZmRz WzFdKi8sDQo+ICsJCQkJKHZvaWQgKilpb2QtPmFkZHIsDQo+ICsJCQkJaW9kLT5ucl9zZWN0b3Jz IDw8IDksDQo+ICsJCQkJaW9kLT5zdGFydF9zZWN0b3IgPDwgOSk7DQo+ICsJCWlvX3VyaW5nX3Nx ZV9zZXRfZmxhZ3Moc3FlLCBJT1NRRV9GSVhFRF9GSUxFKTsNCj4gKwkJYnJlYWs7DQo+ICsJZGVm YXVsdDoNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJfQ0KPiArDQo+ICsJcS0+aW9faW5mbGln aHQrKzsNCj4gKwkvKiBiaXQ2MyBtYXJrcyB1cyBhcyB0Z3QgaW8gKi8NCj4gKwlzcWUtPnVzZXJf ZGF0YSA9IGJ1aWxkX3VzZXJfZGF0YSh0YWcsIHVibGtfb3AsIDAsIDEpOw0KPiArDQo+ICsJdWJs a19kYmcoVUJMS19EQkdfSU8sICIlczogdGFnICVkIHVibGsgaW8gJXggJWxseCAldVxuIiwgX19m dW5jX18sIHRhZywNCj4gKwkJCWlvZC0+b3BfZmxhZ3MsIGlvZC0+c3RhcnRfc2VjdG9yLCBpb2Qt Pm5yX3NlY3RvcnMgPDwgOSk7DQo+ICsJcmV0dXJuIDE7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBp bnQgdWJsa19sb29wX3F1ZXVlX2lvKHN0cnVjdCB1YmxrX3F1ZXVlICpxLCBpbnQgdGFnKQ0KPiAr ew0KPiArCWludCBxdWV1ZWQgPSBsb29wX3F1ZXVlX3RndF9pbyhxLCB0YWcpOw0KPiArDQo+ICsJ aWYgKHF1ZXVlZCA8IDApDQo+ICsJCXVibGtfY29tcGxldGVfaW8ocSwgdGFnLCBxdWV1ZWQpOw0K PiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHVibGtfbG9vcF9p b19kb25lKHN0cnVjdCB1YmxrX3F1ZXVlICpxLCBpbnQgdGFnLA0KPiArCQljb25zdCBzdHJ1Y3Qg aW9fdXJpbmdfY3FlICpjcWUpDQo+ICt7DQo+ICsJaW50IGNxZV90YWcgPSB1c2VyX2RhdGFfdG9f dGFnKGNxZS0+dXNlcl9kYXRhKTsNCj4gKw0KPiArCXVibGtfYXNzZXJ0KHRhZyA9PSBjcWVfdGFn KTsNCj4gKwl1YmxrX2NvbXBsZXRlX2lvKHEsIHRhZywgY3FlLT5yZXMpOw0KPiArCXEtPmlvX2lu ZmxpZ2h0LS07DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHVibGtfbG9vcF90Z3RfZGVpbml0 KHN0cnVjdCB1YmxrX2RldiAqZGV2KQ0KPiArew0KPiArCWZzeW5jKGRldi0+ZmRzWzFdKTsNCj4g KwljbG9zZShkZXYtPmZkc1sxXSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgdWJsa19sb29w X3RndF9pbml0KHN0cnVjdCB1YmxrX2RldiAqZGV2KQ0KPiArew0KPiArCXN0YXRpYyBjb25zdCBz dHJ1Y3Qgb3B0aW9uIGxvX2xvbmdvcHRzW10gPSB7DQo+ICsJCXsgImZpbGUiLAkJMSwJTlVMTCwg J2YnIH0sDQo+ICsJCXsgTlVMTCB9DQo+ICsJfTsNCj4gKwl1bnNpZ25lZCBsb25nIGxvbmcgYnl0 ZXM7DQo+ICsJY2hhciAqKmFyZ3YgPSBkZXYtPnRndC5hcmd2Ow0KPiArCWludCBhcmdjID0gZGV2 LT50Z3QuYXJnYzsNCj4gKwljaGFyICpmaWxlID0gTlVMTDsNCj4gKwlzdHJ1Y3Qgc3RhdCBzdDsN Cj4gKwlpbnQgZmQsIG9wdDsNCj4gKwlzdHJ1Y3QgdWJsa19wYXJhbXMgcCA9IHsNCj4gKwkJLnR5 cGVzID0gVUJMS19QQVJBTV9UWVBFX0JBU0lDLA0KPiArCQkuYmFzaWMgPSB7DQo+ICsJCQkubG9n aWNhbF9ic19zaGlmdAk9IDksDQo+ICsJCQkucGh5c2ljYWxfYnNfc2hpZnQJPSAxMiwNCj4gKwkJ CS5pb19vcHRfc2hpZnQJPSAxMiwNCj4gKwkJCS5pb19taW5fc2hpZnQJPSA5LA0KPiArCQkJLm1h eF9zZWN0b3JzID0gZGV2LT5kZXZfaW5mby5tYXhfaW9fYnVmX2J5dGVzID4+IDksDQo+ICsJCX0s DQo+ICsJfTsNCj4gKw0KPiArCXdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwg Ii06ZjoiLA0KPiArCQkJCSAgbG9fbG9uZ29wdHMsIE5VTEwpKSAhPSAtMSkgew0KPiArCQlzd2l0 Y2ggKG9wdCkgew0KPiArCQljYXNlICdmJzoNCj4gKwkJCWZpbGUgPSBzdHJkdXAob3B0YXJnKTsN Cj4gKwkJCWJyZWFrOw0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJdWJsa19kYmcoVUJMS19EQkdf REVWLCAiJXM6IGZpbGUgJXNcbiIsIF9fZnVuY19fLCBmaWxlKTsNCj4gKw0KPiArCWlmICghZmls ZSkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlmZCA9IG9wZW4oZmlsZSwgT19SRFdS KTsNCj4gKwlpZiAoZmQgPCAwKSB7DQo+ICsJCXVibGtfZXJyKCAiJXM6IGJhY2tpbmcgZmlsZSAl cyBjYW4ndCBiZSBvcGVuZWRcbiIsDQo+ICsJCQkJX19mdW5jX18sIGZpbGUpOw0KPiArCQlyZXR1 cm4gLUVCQURGOw0KPiArCX0NCj4gKw0KPiArCWlmIChmc3RhdChmZCwgJnN0KSA8IDApIHsNCj4g KwkJY2xvc2UoZmQpOw0KPiArCQlyZXR1cm4gLUVCQURGOw0KPiArCX0NCj4gKw0KPiArCWlmIChT X0lTQkxLKHN0LnN0X21vZGUpKSB7DQo+ICsJCXVuc2lnbmVkIGludCBicywgcGJzOw0KPiArDQo+ ICsJCWlmIChpb2N0bChmZCwgQkxLR0VUU0laRTY0LCAmYnl0ZXMpICE9IDApDQo+ICsJCQlyZXR1 cm4gLUVCQURGOw0KPiArCQlpZiAoaW9jdGwoZmQsIEJMS1NTWkdFVCwgJmJzKSAhPSAwKQ0KPiAr CQkJcmV0dXJuIC0xOw0KPiArCQlpZiAoaW9jdGwoZmQsIEJMS1BCU1pHRVQsICZwYnMpICE9IDAp DQo+ICsJCQlyZXR1cm4gLTE7DQo+ICsJCXAuYmFzaWMubG9naWNhbF9ic19zaGlmdCA9IGlsb2cy KGJzKTsNCj4gKwkJcC5iYXNpYy5waHlzaWNhbF9ic19zaGlmdCA9IGlsb2cyKHBicyk7DQo+ICsJ fSBlbHNlIGlmIChTX0lTUkVHKHN0LnN0X21vZGUpKSB7DQo+ICsJCWJ5dGVzID0gc3Quc3Rfc2l6 ZTsNCj4gKwl9IGVsc2Ugew0KPiArCQlieXRlcyA9IDA7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGZj bnRsKGZkLCBGX1NFVEZMLCBPX0RJUkVDVCkpIHsNCj4gKwkJcC5iYXNpYy5sb2dpY2FsX2JzX3No aWZ0ID0gOTsNCj4gKwkJcC5iYXNpYy5waHlzaWNhbF9ic19zaGlmdCA9IDEyOw0KPiArCQl1Ymxr X2xvZygiJXM6IHVibGstbG9vcCBmYWxsYmFjayB0byBidWZmZXJlZCBJT1xuIiwgX19mdW5jX18p Ow0KPiArCX0NCj4gKw0KPiArCWRldi0+dGd0LmRldl9zaXplID0gYnl0ZXM7DQo+ICsJcC5iYXNp Yy5kZXZfc2VjdG9ycyA9IGJ5dGVzID4+IDk7DQo+ICsJZGV2LT5mZHNbMV0gPSBmZDsNCj4gKwlk ZXYtPm5yX2ZkcyArPSAxOw0KPiArCWRldi0+dGd0LnBhcmFtcyA9IHA7DQo+ICsNCj4gKwlyZXR1 cm4gMDsNCj4gK30NCj4gKw0KPiArY29uc3Qgc3RydWN0IHVibGtfdGd0X29wcyB0Z3Rfb3BzX2xp c3RbXSA9IHsNCj4gKwl7DQo+ICsJCS5uYW1lID0gIm51bGwiLA0KPiArCQkuaW5pdF90Z3QgPSB1 YmxrX251bGxfdGd0X2luaXQsDQo+ICsJCS5xdWV1ZV9pbyA9IHVibGtfbnVsbF9xdWV1ZV9pbywN Cj4gKwl9LA0KPiArDQo+ICsJew0KPiArCQkubmFtZSA9ICJsb29wIiwNCj4gKwkJLmluaXRfdGd0 ID0gdWJsa19sb29wX3RndF9pbml0LA0KPiArCQkuZGVpbml0X3RndCA9IHVibGtfbG9vcF90Z3Rf ZGVpbml0LA0KPiArCQkucXVldWVfaW8gPSB1YmxrX2xvb3BfcXVldWVfaW8sDQo+ICsJCS50Z3Rf aW9fZG9uZSA9IHVibGtfbG9vcF9pb19kb25lLA0KPiArCX0sDQo+ICt9Ow0KPiArDQo+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IHVibGtfdGd0X29wcyAqdWJsa19maW5kX3RndChjb25zdCBjaGFyICpu YW1lKQ0KPiArew0KPiArCWNvbnN0IHN0cnVjdCB1YmxrX3RndF9vcHMgKm9wczsNCj4gKwlpbnQg aTsNCj4gKw0KPiArCWlmIChuYW1lID09IE5VTEwpDQo+ICsJCXJldHVybiBOVUxMOw0KPiArDQo+ ICsJZm9yIChpID0gMDsgc2l6ZW9mKHRndF9vcHNfbGlzdCkgLyBzaXplb2YoKm9wcyk7IGkrKykN Cj4gKwkJaWYgKHN0cmNtcCh0Z3Rfb3BzX2xpc3RbaV0ubmFtZSwgbmFtZSkgPT0gMCkNCj4gKwkJ CXJldHVybiAmdGd0X29wc19saXN0W2ldOw0KPiArCXJldHVybiBOVUxMOw0KPiArfQ0KPiArDQo+ ICtpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQ0KPiArew0KPiArCWNvbnN0IGNoYXIg KmNtZCA9IGFyZ3ZbMV07DQo+ICsJaW50IHJldCA9IC1FSU5WQUw7DQo+ICsNCj4gKwlpZiAoYXJn YyA9PSAxKQ0KPiArCQlnb3RvIG91dDsNCj4gKw0KPiArCWlmICghc3RyY21wKGNtZCwgImFkZCIp KQ0KPiArCQlyZXQgPSBjbWRfZGV2X2FkZChhcmdjLCBhcmd2KTsNCj4gKwllbHNlIGlmICghc3Ry Y21wKGNtZCwgImRlbCIpKQ0KPiArCQlyZXQgPSBjbWRfZGV2X2RlbChhcmdjLCBhcmd2KTsNCj4g KwllbHNlIGlmICghc3RyY21wKGNtZCwgImxpc3QiKSkNCj4gKwkJcmV0ID0gY21kX2Rldl9saXN0 KGFyZ2MsIGFyZ3YpOw0KPiArCWVsc2UgaWYgKCFzdHJjbXAoY21kLCAiaGVscCIpKQ0KPiArCQly ZXQgPSBjbWRfZGV2X2hlbHAoYXJnYywgYXJndik7DQo+ICtvdXQ6DQo+ICsJaWYgKHJldCkNCj4g KwkJY21kX2Rldl9oZWxwKGFyZ2MsIGFyZ3YpOw0KPiArDQo+ICsJcmV0dXJuIHJldDsNCj4gK30N Cg==