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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A3164C433EF for ; Fri, 11 Feb 2022 15:47:37 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E386110EA89; Fri, 11 Feb 2022 15:47:36 +0000 (UTC) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 27FE910EA84 for ; Fri, 11 Feb 2022 15:47:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1644594455; x=1676130455; h=from:to:subject:date:message-id:references:in-reply-to: content-id:content-transfer-encoding:mime-version; bh=QArPFC+ToZa6Gpqh4G3XFF3IjusiaenMkRQNVRZa1zc=; b=oGakeixcFUkmLH6lRxXQ8LJIStn7eSDIWomIwZUW6hIB3j1/BfV0oi8D IdOZhmdYeNNoyFHSwvReBKXF460y8iIgqcNVfVUITNedZxOdPoQ0ytRJd BvOsAq9yZukOyf7XuU3cQ4pR2NuJaaIae003b3aY/8FUGQW4LHzH9dvAK wJyCiANKz/o+DViw62mOAs7A6fSTM0FpY7VvBZWv0zJ243pXBBG2ceM2S vW/SFbNDSmTP/KVaxCdNsBmO50JUmkMQ+Z4P5rSeVz48PGtcpX8QweIka uxuz1gTW/vKpapzr8p4i6XjtToM5M+StvGY9zMW3E+bXAfsxKau54E4qY g==; X-IronPort-AV: E=McAfee;i="6200,9189,10254"; a="310490153" X-IronPort-AV: E=Sophos;i="5.88,361,1635231600"; d="scan'208";a="310490153" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Feb 2022 07:47:34 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,361,1635231600"; d="scan'208";a="483461051" Received: from fmsmsx605.amr.corp.intel.com ([10.18.126.85]) by orsmga003.jf.intel.com with ESMTP; 11 Feb 2022 07:47:34 -0800 Received: from fmsmsx608.amr.corp.intel.com (10.18.126.88) by fmsmsx605.amr.corp.intel.com (10.18.126.85) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Fri, 11 Feb 2022 07:47:33 -0800 Received: from fmsmsx602.amr.corp.intel.com (10.18.126.82) by fmsmsx608.amr.corp.intel.com (10.18.126.88) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Fri, 11 Feb 2022 07:47:32 -0800 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20 via Frontend Transport; Fri, 11 Feb 2022 07:47:32 -0800 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (104.47.66.47) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.20; Fri, 11 Feb 2022 07:47:32 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JZjguzf17CxKhp/tas5QGbBE7xY2ejjmOGNubgE527Lluo9feZR33Rs21w0DqWNMpzyEpKFlnJrIZfWisangoE9ld4RLYUkLAIclcVtb+d34aqHo61ZGWG1oQhA07z9jpo/7fpv2ko6bOJ4qzGw7RXDGYilIqCU/Jsl+lKncOMW4cU/0eyTMT1vRjmJB4A5L2tjdfZcIttAp+C7RbSEOXUULNJ5woRezjfmxXuJxdU7L3+ZKJVta54Wtauvh7DDJ75mo1M8D3lIbYroIBrw9Sq79LN/O786Sa9smoXR1MxDIom41392DYJHyuaLw9ZDjY9gROUtnXMa5N3CPpihECw== 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=QArPFC+ToZa6Gpqh4G3XFF3IjusiaenMkRQNVRZa1zc=; b=i47xpHqVRnW3jl2zgnBFktOl1Qfq+KlbJb1ba9IsPRBcKRPiRNTUL3UvW2BJZZkejy9eOMCZUWx+mAE1Gf1Ri31+u1xWMhin8fgMEhoP1xRb0bPpNofeyKCr9XcMX0oCw8s3OOfoDEIP7kYNjnhZLXD2dhCCxd6JR02JYx3y4Fs7KOLSWde8hlgpg7z0RcbmfzR+u8VvD/MLnsTfnfMS79qqEQyM6s2H4+wUU1Nv3atDVbPxna9ZNVOkZMpLXSymb0Pvt2YieHTRhXnIO+HBdfJsoCc8hklO085ouE3Vm3/YskdqFSFeE8bsNkoivuqV+kgJby6RVy1nXNnzFYSweA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Received: from DM6PR11MB2731.namprd11.prod.outlook.com (2603:10b6:5:c3::25) by BYAPR11MB3429.namprd11.prod.outlook.com (2603:10b6:a03:91::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4975.11; Fri, 11 Feb 2022 15:47:21 +0000 Received: from DM6PR11MB2731.namprd11.prod.outlook.com ([fe80::b4f9:69c4:33a4:aca2]) by DM6PR11MB2731.namprd11.prod.outlook.com ([fe80::b4f9:69c4:33a4:aca2%6]) with mapi id 15.20.4951.019; Fri, 11 Feb 2022 15:47:21 +0000 From: "Hogander, Jouni" To: "intel-gfx@lists.freedesktop.org" , "Deak, Imre" Thread-Topic: [Intel-gfx] [PATCH v2 09/26] drm/i915: Move per-platform power well hooks to intel_display_power_well.c Thread-Index: AQHYHOBHme+EYI/rDEePNfFPvnAx4qyOg4sA Date: Fri, 11 Feb 2022 15:47:21 +0000 Message-ID: References: <20220208113656.179823-1-imre.deak@intel.com> <20220208113656.179823-10-imre.deak@intel.com> In-Reply-To: <20220208113656.179823-10-imre.deak@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 9827e6bd-ba0f-409c-0478-08d9ed75cac2 x-ms-traffictypediagnostic: BYAPR11MB3429:EE_ x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:7219; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: pz/Da2WNyefibWVOLYdMF3uuzlk3QS3wHRR8XCBuQurGurbS80Ev9DS3A5e6bXp/gx27E5MzvpIcudEkimIy5nR/h3SxTpl4PS7E59tXiHWWwHKxc0ItO2xzZzLGK7EhVYvvbjUoTNhLMvzNPj6VWgdvrTTcxW1R/EvA6JoClHSbueaN0cD/HMbkXoBPzyZS06HFfwlxOgdaT6NKZnUk1NKWJz+b3bQitoRaxKNgbBhkIeWzvRVtnpQ9B6k6q8SUfr5gKX6NrWP7pZKdICj2vK/kfcjFq1GfPDEznRcX2bCnzmT0r4OKYc6liO3n4bnL4WI8uAlep1Gw1bz5s5oIQXb6geu/Mnm/qHT5y3Wivpworv3VlkTHRSOCGLwXVusS91gCRZgmuFZVma16fXk2pp1eB2Z8XXEadT1Jw1PKEhExPzpNtY4lTgkB7ByYGEpdTg1krVyIfi0UnmuAqYoQhPDhFWocoGgLXjYvVmwbtZLbHVpX60JPTi+b1gA5eFISPIxgQ1EgKBw9yYZYcqnCbV+xklpSS7ulUU8Z49rOeQRkN/K9riStr7ndpVOxdqij774zGAxhOk0ufDZi+lyMnChsA+KzSigljOlCnl3J+oJSV2VOp6xiWuy3FK+PehD6MPGJRi/H+th87beEAvcQicNQ8iHTcrtKSJYrv2flSvpUOBZFga1uMcVoIZanZPqjj5S3vKKjZr6eX25CfIWYGA== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR11MB2731.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(6636002)(6512007)(66574015)(5660300002)(66476007)(66556008)(316002)(122000001)(38070700005)(38100700002)(64756008)(110136005)(83380400001)(91956017)(66446008)(76116006)(66946007)(508600001)(6506007)(71200400001)(36756003)(6486002)(2616005)(2906002)(8936002)(8676002)(82960400001)(186003)(30864003)(26005)(86362001)(579004)(559001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?KytlUjM3cmpLYU0vRXBzd09yaWhEd1lsTHR5SFA2MjZOMys5V2xoNHBkdjFF?= =?utf-8?B?NmM4dVFkM2pwaG1taDRNTDhwZGt6NUJsMnJCd01iYlJkOFN2eFUzUStJVHVt?= =?utf-8?B?RFBDWW5Ga0lMTFE2eGdOYWMwTFZHSklPZ0RqN1ljWTN6cENxbVo5OFRKcWVX?= =?utf-8?B?dmt4WmRBdU0rNTlNUDMxaFh4UWMyT1pyTno0L1RYdmQ0dWpUQ3N3NUcydUs1?= =?utf-8?B?TTdlQy9SK3JDNzRsdHlqcFhsRm5xdm9Vb2lvZjZLQm9zOHVGUDVXcE1ycWhK?= =?utf-8?B?ekVNNWpYcUFFMzE3VEpWK1QxUFpIbHA0WWpUZ2d6MzlJYnVMTDc1ck01djRC?= =?utf-8?B?VUlrQk8vVVo2NnNObUI4bUc3UGxXV2Vxc0xMZ2x0b2FqbXBEYTlldDFxSE5C?= =?utf-8?B?V0U1cVBrQnBQTVJSWnlZOVV0VXBGMlZKdGtsd0tRYzZPcTNqUTZ6eFJkUGtZ?= =?utf-8?B?ZjVLL1V5RThBS3NDRmhFN2hTRFJuejZxM3BvaVhMWUVaZGttcEFieTRZeWU5?= =?utf-8?B?a2dqb3RienZUZ3d4K2VRK1Y1bHRmengwKzlxRUpNVlBVV2MwVko1U3NtbGFC?= =?utf-8?B?MzFKZDJCb1p3K3lvMHphV3RXOTRKUkNPcmJhNUFoRC9XdmJpU0NHSEplamZW?= =?utf-8?B?WDZ3ZDBUWVgza3VXMkJUUm9jNW9YTlZZOEwxS1ZtOExydjRYYWZxQlBMREZx?= =?utf-8?B?QWxJR09mcEw5WEE1Q1dZOUI0NkgxekhZZ2hMbFJmK2JHRmpNOGZGdDJOU3Rt?= =?utf-8?B?QmdpNnZnUDFuWDNaVzJpa0hrSCtFdE10ZmRNamVNTGFIdHZNSUtoSkc3TXRP?= =?utf-8?B?Q0MyWTB1bXRQOHE2TE5GU3ZENk1ZSFRaRG42UFZDRHMzaGprdURwUnlsRzV1?= =?utf-8?B?MWc3OEYyVlJJZlRVU3NqN3dxamFMY3JMUS9iMkd1bUhLVmZkSzZHemZmU0RG?= =?utf-8?B?VUdteEI0M05OeVl1MGlQZUtRWUs1TlhiekdleHR2NTA3QW9MaC9KSnVEMTMr?= =?utf-8?B?TXFPTnZRZ09YdzVSSkU1blFXZHJ6SldneU1ZY2xUbk9ZR2lOSVFYbHNNVlRY?= =?utf-8?B?eUNQWGtwZmkzeGtJSUZYUmp0aXNHZldpczdrcTBCRDBNcTlwN3JoVWFZY1Zn?= =?utf-8?B?V3RRM1JLdTNGWG1SQ2JRMXU1dXZjZS9Cbk9zeU1GWTdxcG9OaHVKc2VsRjZV?= =?utf-8?B?YzFLMzk2UHRSS1NWcUNER2VoQ0lWTWpMNE9YUnFXMG5hL0V6eTA4SE9kOCt4?= =?utf-8?B?TXpJMG9KS2x2TzhHcDBSU05ITjlPNFVnditldHp3amNWWFBXUDB3cUVBREMy?= =?utf-8?B?cmhMdVdQT0g0UGR6WndCNjZZdHlBdDNxaVRRUTAzV2p0SVp6alNsVGtUT3M1?= =?utf-8?B?NUNVUlZVVXF6ckJPUE5DVndCVlAyUk5JSlV2RlY5QkxuYS9oTnVkWitJdTFO?= =?utf-8?B?bVAvMDRNcXdseW5mem54NFJGZHF0NUhxWHBVbGlSaUlBdU5RUFVEK1pNbUtn?= =?utf-8?B?bE55ZmxuYjdCcTFuQW1BeklSdFRHTWh1V1VKVnJ5WTMxZlBIV2xYSUZ0UE8y?= =?utf-8?B?bm12Q1Y1QlZJT0xwcWkwQmdpVHNmS3crRVN6N2dzOXh5aWZsSzBNVGlDeFpm?= =?utf-8?B?NE5WckpCc1A0ZXFEUDhkYzNMRWVQZ0R3UzkyeHVaa0NoN29sQ3RGRUlLMDNY?= =?utf-8?B?eG1FTm1BallSYjJqTjV3TjgxdGNPT2ZuK3g0U3hLNjNjOGE3SzFva1lMRGF4?= =?utf-8?B?YzJUT0NwTUk0Z3RFZjdVdmI5Z0RBQmNvQW8zVkI3RDA5c3JtSzlucU9VL0xL?= =?utf-8?B?S05hRlo1NldHT0F5QlI4S25wUndrais0TlRwd3Fvcmg0TUhNRUlXUk15QWlo?= =?utf-8?B?OFh4SlVqL2tFTklySHZLUVZHQnZybkxoY1JZWit0WHEwTE1QZUZHbThNQzBX?= =?utf-8?B?N2RKTTlnVWc2dlFFYit0QlIrZU1MdXlndlYrZ0U2QW9UemhWMU9OVllmbTZp?= =?utf-8?B?SlVITEcxUUNFZGhLRDl4N1NUUWxnNEYwL2hlUERsTnovakJhb3dQMUNVV0dD?= =?utf-8?B?VUVjajdKY1pydkR3d3pTQ01Pa2xyLzJWZEl6SFNHczMyNER1MGNvZHhDZURu?= =?utf-8?B?ay9MSDNSZVhPNUY5ZXpXUDBYUmhTU0xPaStwWmlYeDJPRGhZRmRqOW51N0dp?= =?utf-8?B?TnFPM1NaeXp6dDVNZUZxVmdlRzNtNHdPNnFVRkt0Wll4Q3ljV0IrajY2Nkk1?= =?utf-8?Q?h33pgrHr+lziZjneYldKvAlo8i87ENecAGmTINLRZc=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: <6B973FC2F0F90041B62076FA4852EEEE@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR11MB2731.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9827e6bd-ba0f-409c-0478-08d9ed75cac2 X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Feb 2022 15:47:21.6430 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: bIj01ObzQZDz8Jf8HjvzomU+iDzQVk+lxcDxcpQbMfAiQnZwAxorefp9h9TYY0e3HOhUsCOu2gLsDtiH/lC+Tj8IiXpHZ+RF0fceH0SWQfU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR11MB3429 X-OriginatorOrg: intel.com Subject: Re: [Intel-gfx] [PATCH v2 09/26] drm/i915: Move per-platform power well hooks to intel_display_power_well.c X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gVHVlLCAyMDIyLTAyLTA4IGF0IDEzOjM2ICswMjAwLCBJbXJlIERlYWsgd3JvdGU6DQo+IE1v dmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIHBsYXRmb3JtIHNwZWNpZmljIHBvd2VyIHdlbGwgaG9v a3MgdG8NCj4gaW50ZWxfZGlzcGxheV9wb3dlcl93ZWxsLmMsIHRvIHJlZHVjZSB0aGUgY2x1dHRl ciBpbg0KPiBpbnRlbF9kaXNwbGF5X3Bvd2VyLmMuDQoNCg0KSW4gdGhlc2UgaG9va3MgeW91IGFy ZSBhbHNvIG1vdmluZyBzb21lIG9mIHRoZSBtdXRleF9sb2NraW5nL3VubG9ja2luZw0KaW50byBp bnRlbF9kaXNwbGF5X3Bvd2VyX3dlbGwuYy4gTWF5YmUgc29tZSBtZW50aW9uIGhlcmUgd2hpY2gN CmZ1bmN0aW9ucyBhcmUgZXhwZWN0ZWQgYmVpbmcgY2FsbGVkIHdpdGggcG93ZXJkb21haW4gbXV0 ZXggaGVsZD8NCg0KT25lIGlubGluZSBjb21tZW50IGJlbG93Lg0KDQo+IA0KPiBObyBmdW5jdGlv bmFsIGNoYW5nZS4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IEltcmUgRGVhayA8aW1yZS5kZWFrQGlu dGVsLmNvbT4NCj4gLS0tDQo+ICAuLi4vZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bv d2VyLmMgICAgfCAxNzU5IC0tLS0tLS0tLS0tLS0NCj4gLS0tDQo+ICAuLi4vaTkxNS9kaXNwbGF5 L2ludGVsX2Rpc3BsYXlfcG93ZXJfd2VsbC5jICAgfCAxODE3DQo+ICsrKysrKysrKysrKysrKysr DQo+ICAuLi4vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfcG93ZXJfd2VsbC5oICAgfCAgIDU3 ICstDQo+ICAzIGZpbGVzIGNoYW5nZWQsIDE4MzkgaW5zZXJ0aW9ucygrKSwgMTc5NCBkZWxldGlv bnMoLSkNCj4gDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2Rpc3BsYXlfcG93ZXIuYw0KPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50 ZWxfZGlzcGxheV9wb3dlci5jDQo+IGluZGV4IDYxZWFhY2RhYzVhZjIuLjM0MTQwMTNlN2Y0NDkg MTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxh eV9wb3dlci5jDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlz cGxheV9wb3dlci5jDQo+IEBAIC03LDIzICs3LDE1IEBADQo+ICAjaW5jbHVkZSAiaTkxNV9pcnEu aCINCj4gICNpbmNsdWRlICJpbnRlbF9jZGNsay5oIg0KPiAgI2luY2x1ZGUgImludGVsX2NvbWJv X3BoeS5oIg0KPiAtI2luY2x1ZGUgImludGVsX2NvbWJvX3BoeV9yZWdzLmgiDQo+IC0jaW5jbHVk ZSAiaW50ZWxfY3J0LmgiDQo+ICAjaW5jbHVkZSAiaW50ZWxfZGUuaCINCj4gICNpbmNsdWRlICJp bnRlbF9kaXNwbGF5X3Bvd2VyLmgiDQo+ICAjaW5jbHVkZSAiaW50ZWxfZGlzcGxheV9wb3dlcl93 ZWxsLmgiDQo+ICAjaW5jbHVkZSAiaW50ZWxfZGlzcGxheV90eXBlcy5oIg0KPiAgI2luY2x1ZGUg ImludGVsX2RtYy5oIg0KPiAtI2luY2x1ZGUgImludGVsX2RwaW9fcGh5LmgiDQo+IC0jaW5jbHVk ZSAiaW50ZWxfZHBsbC5oIg0KPiAtI2luY2x1ZGUgImludGVsX2hvdHBsdWcuaCINCj4gICNpbmNs dWRlICJpbnRlbF9wY2hfcmVmY2xrLmgiDQo+ICAjaW5jbHVkZSAiaW50ZWxfcGNvZGUuaCINCj4g ICNpbmNsdWRlICJpbnRlbF9wbS5oIg0KPiAtI2luY2x1ZGUgImludGVsX3Bwcy5oIg0KPiAgI2lu Y2x1ZGUgImludGVsX3NucHNfcGh5LmgiDQo+IC0jaW5jbHVkZSAiaW50ZWxfdGMuaCINCj4gLSNp bmNsdWRlICJpbnRlbF92Z2EuaCINCj4gICNpbmNsdWRlICJ2bHZfc2lkZWJhbmQuaCINCj4gIA0K PiAgY29uc3QgY2hhciAqDQo+IEBAIC0yMzIsNjA0ICsyMjQsNiBAQCBib29sIGludGVsX2Rpc3Bs YXlfcG93ZXJfaXNfZW5hYmxlZChzdHJ1Y3QNCj4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs DQo+ICAJcmV0dXJuIHJldDsNCj4gIH0NCj4gIA0KPiAtLyoNCj4gLSAqIFN0YXJ0aW5nIHdpdGgg SGFzd2VsbCwgd2UgaGF2ZSBhICJQb3dlciBEb3duIFdlbGwiIHRoYXQgY2FuIGJlDQo+IHR1cm5l ZCBvZmYNCj4gLSAqIHdoZW4gbm90IG5lZWRlZCBhbnltb3JlLiBXZSBoYXZlIDQgcmVnaXN0ZXJz IHRoYXQgY2FuIHJlcXVlc3QgdGhlDQo+IHBvd2VyIHdlbGwNCj4gLSAqIHRvIGJlIGVuYWJsZWQs IGFuZCBpdCB3aWxsIG9ubHkgYmUgZGlzYWJsZWQgaWYgbm9uZSBvZiB0aGUNCj4gcmVnaXN0ZXJz IGlzDQo+IC0gKiByZXF1ZXN0aW5nIGl0IHRvIGJlIGVuYWJsZWQuDQo+IC0gKi8NCj4gLXN0YXRp YyB2b2lkIGhzd19wb3dlcl93ZWxsX3Bvc3RfZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl DQo+ICpkZXZfcHJpdiwNCj4gLQkJCQkgICAgICAgdTggaXJxX3BpcGVfbWFzaywgYm9vbCBoYXNf dmdhKQ0KPiAtew0KPiAtCWlmIChoYXNfdmdhKQ0KPiAtCQlpbnRlbF92Z2FfcmVzZXRfaW9fbWVt KGRldl9wcml2KTsNCj4gLQ0KPiAtCWlmIChpcnFfcGlwZV9tYXNrKQ0KPiAtCQlnZW44X2lycV9w b3dlcl93ZWxsX3Bvc3RfZW5hYmxlKGRldl9wcml2LA0KPiBpcnFfcGlwZV9tYXNrKTsNCj4gLX0N Cj4gLQ0KPiAtc3RhdGljIHZvaWQgaHN3X3Bvd2VyX3dlbGxfcHJlX2Rpc2FibGUoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUNCj4gKmRldl9wcml2LA0KPiAtCQkJCSAgICAgICB1OCBpcnFfcGlwZV9t YXNrKQ0KPiAtew0KPiAtCWlmIChpcnFfcGlwZV9tYXNrKQ0KPiAtCQlnZW44X2lycV9wb3dlcl93 ZWxsX3ByZV9kaXNhYmxlKGRldl9wcml2LA0KPiBpcnFfcGlwZV9tYXNrKTsNCj4gLX0NCj4gLQ0K PiAtI2RlZmluZSBJQ0xfQVVYX1BXX1RPX0NIKHB3X2lkeCkJXA0KPiAtCSgocHdfaWR4KSAtIElD TF9QV19DVExfSURYX0FVWF9BICsgQVVYX0NIX0EpDQo+IC0NCj4gLSNkZWZpbmUgSUNMX1RCVF9B VVhfUFdfVE9fQ0gocHdfaWR4KQlcDQo+IC0JKChwd19pZHgpIC0gSUNMX1BXX0NUTF9JRFhfQVVY X1RCVDEgKyBBVVhfQ0hfQykNCj4gLQ0KPiAtc3RhdGljIGVudW0gYXV4X2NoIGljbF9hdXhfcHdf dG9fY2goY29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbA0KPiAqcG93ZXJfd2VsbCkNCj4gLXsN Cj4gLQlpbnQgcHdfaWR4ID0gcG93ZXJfd2VsbC0+ZGVzYy0+aHN3LmlkeDsNCj4gLQ0KPiAtCXJl dHVybiBwb3dlcl93ZWxsLT5kZXNjLT5oc3cuaXNfdGNfdGJ0ID8NCj4gSUNMX1RCVF9BVVhfUFdf VE9fQ0gocHdfaWR4KSA6DQo+IC0JCQkJCQkgSUNMX0FVWF9QV19UT19DSChwd19pZA0KPiB4KTsN Cj4gLX0NCj4gLQ0KPiAtc3RhdGljIHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKg0KPiAtYXV4 X2NoX3RvX2RpZ2l0YWxfcG9ydChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsDQo+ IC0JCSAgICAgICBlbnVtIGF1eF9jaCBhdXhfY2gpDQo+IC17DQo+IC0Jc3RydWN0IGludGVsX2Rp Z2l0YWxfcG9ydCAqZGlnX3BvcnQgPSBOVUxMOw0KPiAtCXN0cnVjdCBpbnRlbF9lbmNvZGVyICpl bmNvZGVyOw0KPiAtDQo+IC0JZm9yX2VhY2hfaW50ZWxfZW5jb2RlcigmZGV2X3ByaXYtPmRybSwg ZW5jb2Rlcikgew0KPiAtCQkvKiBXZSdsbCBjaGVjayB0aGUgTVNUIHByaW1hcnkgcG9ydCAqLw0K PiAtCQlpZiAoZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQVVRfRFBfTVNUKQ0KPiAtCQkJY29u dGludWU7DQo+IC0NCj4gLQkJZGlnX3BvcnQgPSBlbmNfdG9fZGlnX3BvcnQoZW5jb2Rlcik7DQo+ IC0JCWlmICghZGlnX3BvcnQpDQo+IC0JCQljb250aW51ZTsNCj4gLQ0KPiAtCQlpZiAoZGlnX3Bv cnQtPmF1eF9jaCAhPSBhdXhfY2gpIHsNCj4gLQkJCWRpZ19wb3J0ID0gTlVMTDsNCj4gLQkJCWNv bnRpbnVlOw0KPiAtCQl9DQo+IC0NCj4gLQkJYnJlYWs7DQo+IC0JfQ0KPiAtDQo+IC0JcmV0dXJu IGRpZ19wb3J0Ow0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgZW51bSBwaHkgaWNsX2F1eF9wd190b19w aHkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsDQo+IC0JCQkJICBjb25zdCBzdHJ1Y3Qg aTkxNV9wb3dlcl93ZWxsDQo+ICpwb3dlcl93ZWxsKQ0KPiAtew0KPiAtCWVudW0gYXV4X2NoIGF1 eF9jaCA9IGljbF9hdXhfcHdfdG9fY2gocG93ZXJfd2VsbCk7DQo+IC0Jc3RydWN0IGludGVsX2Rp Z2l0YWxfcG9ydCAqZGlnX3BvcnQgPQ0KPiBhdXhfY2hfdG9fZGlnaXRhbF9wb3J0KGk5MTUsIGF1 eF9jaCk7DQo+IC0NCj4gLQlyZXR1cm4gaW50ZWxfcG9ydF90b19waHkoaTkxNSwgZGlnX3BvcnQt PmJhc2UucG9ydCk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIGhzd193YWl0X2Zvcl9wb3dl cl93ZWxsX2VuYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYsDQo+IC0J CQkJCSAgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwNCj4gKnBvd2VyX3dlbGwsDQo+IC0JCQkJCSAg IGJvb2wgdGltZW91dF9leHBlY3RlZCkNCj4gLXsNCj4gLQljb25zdCBzdHJ1Y3QgaTkxNV9wb3dl cl93ZWxsX3JlZ3MgKnJlZ3MgPSBwb3dlcl93ZWxsLT5kZXNjLQ0KPiA+b3BzLT5yZWdzOw0KPiAt CWludCBwd19pZHggPSBwb3dlcl93ZWxsLT5kZXNjLT5oc3cuaWR4Ow0KPiAtCWludCBlbmFibGVf ZGVsYXkgPSBwb3dlcl93ZWxsLT5kZXNjLT5oc3cuZml4ZWRfZW5hYmxlX2RlbGF5Ow0KPiAtDQo+ IC0JLyoNCj4gLQkgKiBGb3Igc29tZSBwb3dlciB3ZWxscyB3ZSdyZSBub3Qgc3VwcG9zZWQgdG8g d2F0Y2ggdGhlIHN0YXR1cw0KPiBiaXQgZm9yDQo+IC0JICogYW4gYWNrLCBidXQgcmF0aGVyIGp1 c3Qgd2FpdCBhIGZpeGVkIGFtb3VudCBvZiB0aW1lIGFuZCB0aGVuDQo+IC0JICogcHJvY2VlZC4g IFRoaXMgaXMgb25seSB1c2VkIG9uIERHMi4NCj4gLQkgKi8NCj4gLQlpZiAoSVNfREcyKGRldl9w cml2KSAmJiBlbmFibGVfZGVsYXkpIHsNCj4gLQkJdXNsZWVwX3JhbmdlKGVuYWJsZV9kZWxheSwg MiAqIGVuYWJsZV9kZWxheSk7DQo+IC0JCXJldHVybjsNCj4gLQl9DQo+IC0NCj4gLQkvKiBUaW1l b3V0IGZvciBQVzE6MTAgdXMsIEFVWDpub3Qgc3BlY2lmaWVkLCBvdGhlciBQV3M6MjAgdXMuDQo+ ICovDQo+IC0JaWYgKGludGVsX2RlX3dhaXRfZm9yX3NldChkZXZfcHJpdiwgcmVncy0+ZHJpdmVy LA0KPiAtCQkJCSAgSFNXX1BXUl9XRUxMX0NUTF9TVEFURShwd19pZHgpLCAxKSkgew0KPiAtCQlk cm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIiVzIHBvd2VyIHdlbGwgZW5hYmxlDQo+IHRpbWVv dXRcbiIsDQo+IC0JCQkgICAgaW50ZWxfcG93ZXJfd2VsbF9uYW1lKHBvd2VyX3dlbGwpKTsNCj4g LQ0KPiAtCQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgIXRpbWVvdXRfZXhwZWN0ZWQpOw0K PiAtDQo+IC0JfQ0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdTMyIGhzd19wb3dlcl93ZWxsX3JlcXVl c3RlcnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gKmRldl9wcml2LA0KPiAtCQkJCSAgICAg Y29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9yZWdzDQo+ICpyZWdzLA0KPiAtCQkJCSAgICAg aW50IHB3X2lkeCkNCj4gLXsNCj4gLQl1MzIgcmVxX21hc2sgPSBIU1dfUFdSX1dFTExfQ1RMX1JF UShwd19pZHgpOw0KPiAtCXUzMiByZXQ7DQo+IC0NCj4gLQlyZXQgPSBpbnRlbF9kZV9yZWFkKGRl dl9wcml2LCByZWdzLT5iaW9zKSAmIHJlcV9tYXNrID8gMSA6IDA7DQo+IC0JcmV0IHw9IGludGVs X2RlX3JlYWQoZGV2X3ByaXYsIHJlZ3MtPmRyaXZlcikgJiByZXFfbWFzayA/IDIgOg0KPiAwOw0K PiAtCWlmIChyZWdzLT5rdm1yLnJlZykNCj4gLQkJcmV0IHw9IGludGVsX2RlX3JlYWQoZGV2X3By aXYsIHJlZ3MtPmt2bXIpICYgcmVxX21hc2sgPw0KPiA0IDogMDsNCj4gLQlyZXQgfD0gaW50ZWxf ZGVfcmVhZChkZXZfcHJpdiwgcmVncy0+ZGVidWcpICYgcmVxX21hc2sgPyA4IDogMDsNCj4gLQ0K PiAtCXJldHVybiByZXQ7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIGhzd193YWl0X2Zvcl9w b3dlcl93ZWxsX2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gKmRldl9wcml2LA0K PiAtCQkJCQkgICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbA0KPiAqcG93ZXJfd2VsbCkNCj4gLXsN Cj4gLQljb25zdCBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsX3JlZ3MgKnJlZ3MgPSBwb3dlcl93ZWxs LT5kZXNjLQ0KPiA+b3BzLT5yZWdzOw0KPiAtCWludCBwd19pZHggPSBwb3dlcl93ZWxsLT5kZXNj LT5oc3cuaWR4Ow0KPiAtCWJvb2wgZGlzYWJsZWQ7DQo+IC0JdTMyIHJlcXM7DQo+IC0NCj4gLQkv Kg0KPiAtCSAqIEJzcGVjIGRvZXNuJ3QgcmVxdWlyZSB3YWl0aW5nIGZvciBQV3MgdG8gZ2V0IGRp c2FibGVkLCBidXQNCj4gc3RpbGwgZG8NCj4gLQkgKiB0aGlzIGZvciBwYXJhbm9pYS4gVGhlIGtu b3duIGNhc2VzIHdoZXJlIGEgUFcgd2lsbCBiZSBmb3JjZWQNCj4gb246DQo+IC0JICogLSBhIEtW TVIgcmVxdWVzdCBvbiBhbnkgcG93ZXIgd2VsbCB2aWEgdGhlIEtWTVIgcmVxdWVzdA0KPiByZWdp c3Rlcg0KPiAtCSAqIC0gYSBETUMgcmVxdWVzdCBvbiBQVzEgYW5kIE1JU0NfSU8gcG93ZXIgd2Vs bHMgdmlhIHRoZSBCSU9TDQo+IGFuZA0KPiAtCSAqICAgREVCVUcgcmVxdWVzdCByZWdpc3RlcnMN Cj4gLQkgKiBTa2lwIHRoZSB3YWl0IGluIGNhc2UgYW55IG9mIHRoZSByZXF1ZXN0IGJpdHMgYXJl IHNldCBhbmQNCj4gcHJpbnQgYQ0KPiAtCSAqIGRpYWdub3N0aWMgbWVzc2FnZS4NCj4gLQkgKi8N Cj4gLQl3YWl0X2ZvcigoZGlzYWJsZWQgPSAhKGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZ3Mt PmRyaXZlcikgJg0KPiAtCQkJICAgICAgIEhTV19QV1JfV0VMTF9DVExfU1RBVEUocHdfaWR4KSkp IHx8DQo+IC0JCSAocmVxcyA9IGhzd19wb3dlcl93ZWxsX3JlcXVlc3RlcnMoZGV2X3ByaXYsIHJl Z3MsDQo+IHB3X2lkeCkpLCAxKTsNCj4gLQlpZiAoZGlzYWJsZWQpDQo+IC0JCXJldHVybjsNCj4g LQ0KPiAtCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLA0KPiAtCQkgICAgIiVzIGZvcmNlZCBv biAoYmlvczolZCBkcml2ZXI6JWQga3ZtcjolZA0KPiBkZWJ1ZzolZClcbiIsDQo+IC0JCSAgICBp bnRlbF9wb3dlcl93ZWxsX25hbWUocG93ZXJfd2VsbCksDQo+IC0JCSAgICAhIShyZXFzICYgMSks ICEhKHJlcXMgJiAyKSwgISEocmVxcyAmIDQpLCAhIShyZXFzICYNCj4gOCkpOw0KPiAtfQ0KPiAt DQo+IC1zdGF0aWMgdm9pZCBnZW45X3dhaXRfZm9yX3Bvd2VyX3dlbGxfZnVzZXMoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUNCj4gKmRldl9wcml2LA0KPiAtCQkJCQkgICBlbnVtIHNrbF9wb3dlcl9n YXRlIHBnKQ0KPiAtew0KPiAtCS8qIFRpbWVvdXQgNXVzIGZvciBQRyMwLCBmb3Igb3RoZXIgUEdz IDF1cyAqLw0KPiAtCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLA0KPiAtCQkgICAgaW50ZWxf ZGVfd2FpdF9mb3Jfc2V0KGRldl9wcml2LCBTS0xfRlVTRV9TVEFUVVMsDQo+IC0JCQkJCSAgU0tM X0ZVU0VfUEdfRElTVF9TVEFUVVMocGcpLA0KPiAxKSk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2 b2lkIGhzd19wb3dlcl93ZWxsX2VuYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsDQo+IC0JCQkJICBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsKQ0KPiAtew0K PiAtCWNvbnN0IHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGxfcmVncyAqcmVncyA9IHBvd2VyX3dlbGwt PmRlc2MtDQo+ID5vcHMtPnJlZ3M7DQo+IC0JaW50IHB3X2lkeCA9IHBvd2VyX3dlbGwtPmRlc2Mt Pmhzdy5pZHg7DQo+IC0JdTMyIHZhbDsNCj4gLQ0KPiAtCWlmIChwb3dlcl93ZWxsLT5kZXNjLT5o c3cuaGFzX2Z1c2VzKSB7DQo+IC0JCWVudW0gc2tsX3Bvd2VyX2dhdGUgcGc7DQo+IC0NCj4gLQkJ cGcgPSBESVNQTEFZX1ZFUihkZXZfcHJpdikgPj0gMTEgPw0KPiBJQ0xfUFdfQ1RMX0lEWF9UT19Q Ryhwd19pZHgpIDoNCj4gLQkJCQkJCSBTS0xfUFdfQ1RMX0lEWF9UT19QRyhwDQo+IHdfaWR4KTsN Cj4gLQ0KPiAtCQkvKiBXYV8xNjAxMzE5MDYxNjphZGxwICovDQo+IC0JCWlmIChJU19BTERFUkxB S0VfUChkZXZfcHJpdikgJiYgcGcgPT0gU0tMX1BHMSkNCj4gLQkJCWludGVsX2RlX3JtdyhkZXZf cHJpdiwgR0VOOF9DSElDS0VOX0RDUFJfMSwgMCwNCj4gRElTQUJMRV9GTFJfU1JDKTsNCj4gLQ0K PiAtCQkvKg0KPiAtCQkgKiBGb3IgUFcxIHdlIGhhdmUgdG8gd2FpdCBib3RoIGZvciB0aGUgUFcw L1BHMCBmdXNlDQo+IHN0YXRlDQo+IC0JCSAqIGJlZm9yZSBlbmFibGluZyB0aGUgcG93ZXIgd2Vs bCBhbmQgUFcxL1BHMSdzIG93bg0KPiBmdXNlDQo+IC0JCSAqIHN0YXRlIGFmdGVyIHRoZSBlbmFi bGluZy4gRm9yIGFsbCBvdGhlciBwb3dlciB3ZWxscw0KPiB3aXRoDQo+IC0JCSAqIGZ1c2VzIHdl IG9ubHkgaGF2ZSB0byB3YWl0IGZvciB0aGF0IFBXL1BHJ3MgZnVzZQ0KPiBzdGF0ZQ0KPiAtCQkg KiBhZnRlciB0aGUgZW5hYmxpbmcuDQo+IC0JCSAqLw0KPiAtCQlpZiAocGcgPT0gU0tMX1BHMSkN Cj4gLQkJCWdlbjlfd2FpdF9mb3JfcG93ZXJfd2VsbF9mdXNlcyhkZXZfcHJpdiwNCj4gU0tMX1BH MCk7DQo+IC0JfQ0KPiAtDQo+IC0JdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVncy0+ ZHJpdmVyKTsNCj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVncy0+ZHJpdmVyLA0KPiAt CQkgICAgICAgdmFsIHwgSFNXX1BXUl9XRUxMX0NUTF9SRVEocHdfaWR4KSk7DQo+IC0NCj4gLQlo c3dfd2FpdF9mb3JfcG93ZXJfd2VsbF9lbmFibGUoZGV2X3ByaXYsIHBvd2VyX3dlbGwsIGZhbHNl KTsNCj4gLQ0KPiAtCWlmIChwb3dlcl93ZWxsLT5kZXNjLT5oc3cuaGFzX2Z1c2VzKSB7DQo+IC0J CWVudW0gc2tsX3Bvd2VyX2dhdGUgcGc7DQo+IC0NCj4gLQkJcGcgPSBESVNQTEFZX1ZFUihkZXZf cHJpdikgPj0gMTEgPw0KPiBJQ0xfUFdfQ1RMX0lEWF9UT19QRyhwd19pZHgpIDoNCj4gLQkJCQkJ CSBTS0xfUFdfQ1RMX0lEWF9UT19QRyhwDQo+IHdfaWR4KTsNCj4gLQkJZ2VuOV93YWl0X2Zvcl9w b3dlcl93ZWxsX2Z1c2VzKGRldl9wcml2LCBwZyk7DQo+IC0JfQ0KPiAtDQo+IC0JaHN3X3Bvd2Vy X3dlbGxfcG9zdF9lbmFibGUoZGV2X3ByaXYsDQo+IC0JCQkJICAgcG93ZXJfd2VsbC0+ZGVzYy0+ aHN3LmlycV9waXBlX21hc2ssDQo+IC0JCQkJICAgcG93ZXJfd2VsbC0+ZGVzYy0+aHN3Lmhhc192 Z2EpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBoc3dfcG93ZXJfd2VsbF9kaXNhYmxlKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlDQo+ICpkZXZfcHJpdiwNCj4gLQkJCQkgICBzdHJ1Y3QgaTkx NV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsKQ0KPiAtew0KPiAtCWNvbnN0IHN0cnVjdCBpOTE1X3Bv d2VyX3dlbGxfcmVncyAqcmVncyA9IHBvd2VyX3dlbGwtPmRlc2MtDQo+ID5vcHMtPnJlZ3M7DQo+ IC0JaW50IHB3X2lkeCA9IHBvd2VyX3dlbGwtPmRlc2MtPmhzdy5pZHg7DQo+IC0JdTMyIHZhbDsN Cj4gLQ0KPiAtCWhzd19wb3dlcl93ZWxsX3ByZV9kaXNhYmxlKGRldl9wcml2LA0KPiAtCQkJCSAg IHBvd2VyX3dlbGwtPmRlc2MtDQo+ID5oc3cuaXJxX3BpcGVfbWFzayk7DQo+IC0NCj4gLQl2YWwg PSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWdzLT5kcml2ZXIpOw0KPiAtCWludGVsX2RlX3dy aXRlKGRldl9wcml2LCByZWdzLT5kcml2ZXIsDQo+IC0JCSAgICAgICB2YWwgJiB+SFNXX1BXUl9X RUxMX0NUTF9SRVEocHdfaWR4KSk7DQo+IC0JaHN3X3dhaXRfZm9yX3Bvd2VyX3dlbGxfZGlzYWJs ZShkZXZfcHJpdiwgcG93ZXJfd2VsbCk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkDQo+IC1p Y2xfY29tYm9fcGh5X2F1eF9wb3dlcl93ZWxsX2VuYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZQ0KPiAqZGV2X3ByaXYsDQo+IC0JCQkJICAgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2Vy X3dlbGwpDQo+IC17DQo+IC0JY29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9yZWdzICpyZWdz ID0gcG93ZXJfd2VsbC0+ZGVzYy0NCj4gPm9wcy0+cmVnczsNCj4gLQlpbnQgcHdfaWR4ID0gcG93 ZXJfd2VsbC0+ZGVzYy0+aHN3LmlkeDsNCj4gLQllbnVtIHBoeSBwaHkgPSBpY2xfYXV4X3B3X3Rv X3BoeShkZXZfcHJpdiwgcG93ZXJfd2VsbCk7DQo+IC0JdTMyIHZhbDsNCj4gLQ0KPiAtCWRybV9X QVJOX09OKCZkZXZfcHJpdi0+ZHJtLCAhSVNfSUNFTEFLRShkZXZfcHJpdikpOw0KPiAtDQo+IC0J dmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVncy0+ZHJpdmVyKTsNCj4gLQlpbnRlbF9k ZV93cml0ZShkZXZfcHJpdiwgcmVncy0+ZHJpdmVyLA0KPiAtCQkgICAgICAgdmFsIHwgSFNXX1BX Ul9XRUxMX0NUTF9SRVEocHdfaWR4KSk7DQo+IC0NCj4gLQlpZiAoRElTUExBWV9WRVIoZGV2X3By aXYpIDwgMTIpIHsNCj4gLQkJdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgSUNMX1BPUlRf Q0xfRFcxMihwaHkpKTsNCj4gLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIElDTF9QT1JUX0NM X0RXMTIocGh5KSwNCj4gLQkJCSAgICAgICB2YWwgfCBJQ0xfTEFORV9FTkFCTEVfQVVYKTsNCj4g LQl9DQo+IC0NCj4gLQloc3dfd2FpdF9mb3JfcG93ZXJfd2VsbF9lbmFibGUoZGV2X3ByaXYsIHBv d2VyX3dlbGwsIGZhbHNlKTsNCj4gLQ0KPiAtCS8qIERpc3BsYXkgV0EgIzExNzg6IGljbCAqLw0K PiAtCWlmIChwd19pZHggPj0gSUNMX1BXX0NUTF9JRFhfQVVYX0EgJiYgcHdfaWR4IDw9DQo+IElD TF9QV19DVExfSURYX0FVWF9CICYmDQo+IC0JICAgICFpbnRlbF9iaW9zX2lzX3BvcnRfZWRwKGRl dl9wcml2LCAoZW51bSBwb3J0KXBoeSkpIHsNCj4gLQkJdmFsID0gaW50ZWxfZGVfcmVhZChkZXZf cHJpdiwNCj4gSUNMX0FVWF9BTkFPVlJEMShwd19pZHgpKTsNCj4gLQkJdmFsIHw9IElDTF9BVVhf QU5BT1ZSRDFfRU5BQkxFIHwNCj4gSUNMX0FVWF9BTkFPVlJEMV9MRE9fQllQQVNTOw0KPiAtCQlp bnRlbF9kZV93cml0ZShkZXZfcHJpdiwgSUNMX0FVWF9BTkFPVlJEMShwd19pZHgpLA0KPiB2YWwp Ow0KPiAtCX0NCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQNCj4gLWljbF9jb21ib19waHlfYXV4 X3Bvd2VyX3dlbGxfZGlzYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYs DQo+IC0JCQkJICAgICBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsDQo+ICpwb3dlcl93ZWxsKQ0KPiAt ew0KPiAtCWNvbnN0IHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGxfcmVncyAqcmVncyA9IHBvd2VyX3dl bGwtPmRlc2MtDQo+ID5vcHMtPnJlZ3M7DQo+IC0JaW50IHB3X2lkeCA9IHBvd2VyX3dlbGwtPmRl c2MtPmhzdy5pZHg7DQo+IC0JZW51bSBwaHkgcGh5ID0gaWNsX2F1eF9wd190b19waHkoZGV2X3By aXYsIHBvd2VyX3dlbGwpOw0KPiAtCXUzMiB2YWw7DQo+IC0NCj4gLQlkcm1fV0FSTl9PTigmZGV2 X3ByaXYtPmRybSwgIUlTX0lDRUxBS0UoZGV2X3ByaXYpKTsNCj4gLQ0KPiAtCXZhbCA9IGludGVs X2RlX3JlYWQoZGV2X3ByaXYsIElDTF9QT1JUX0NMX0RXMTIocGh5KSk7DQo+IC0JaW50ZWxfZGVf d3JpdGUoZGV2X3ByaXYsIElDTF9QT1JUX0NMX0RXMTIocGh5KSwNCj4gLQkJICAgICAgIHZhbCAm IH5JQ0xfTEFORV9FTkFCTEVfQVVYKTsNCj4gLQ0KPiAtCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2 X3ByaXYsIHJlZ3MtPmRyaXZlcik7DQo+IC0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZ3Mt PmRyaXZlciwNCj4gLQkJICAgICAgIHZhbCAmIH5IU1dfUFdSX1dFTExfQ1RMX1JFUShwd19pZHgp KTsNCj4gLQ0KPiAtCWhzd193YWl0X2Zvcl9wb3dlcl93ZWxsX2Rpc2FibGUoZGV2X3ByaXYsIHBv d2VyX3dlbGwpOw0KPiAtfQ0KPiAtDQo+IC0jaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5MTVf REVCVUdfUlVOVElNRV9QTSkNCj4gLQ0KPiAtc3RhdGljIHZvaWQgaWNsX3RjX3BvcnRfYXNzZXJ0 X3JlZl9oZWxkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlDQo+ICpkZXZfcHJpdiwNCj4gLQkJCQkJ c3RydWN0IGk5MTVfcG93ZXJfd2VsbA0KPiAqcG93ZXJfd2VsbCwNCj4gLQkJCQkJc3RydWN0IGlu dGVsX2RpZ2l0YWxfcG9ydA0KPiAqZGlnX3BvcnQpDQo+IC17DQo+IC0JaWYgKGRybV9XQVJOX09O KCZkZXZfcHJpdi0+ZHJtLCAhZGlnX3BvcnQpKQ0KPiAtCQlyZXR1cm47DQo+IC0NCj4gLQlpZiAo RElTUExBWV9WRVIoZGV2X3ByaXYpID09IDExICYmDQo+IGludGVsX3RjX2NvbGRfcmVxdWlyZXNf YXV4X3B3KGRpZ19wb3J0KSkNCj4gLQkJcmV0dXJuOw0KPiAtDQo+IC0JZHJtX1dBUk5fT04oJmRl dl9wcml2LT5kcm0sICFpbnRlbF90Y19wb3J0X3JlZl9oZWxkKGRpZ19wb3J0KSk7DQo+IC19DQo+ IC0NCj4gLSNlbHNlDQo+IC0NCj4gLXN0YXRpYyB2b2lkIGljbF90Y19wb3J0X2Fzc2VydF9yZWZf aGVsZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYsDQo+IC0JCQkJCXN0cnVj dCBpOTE1X3Bvd2VyX3dlbGwNCj4gKnBvd2VyX3dlbGwsDQo+IC0JCQkJCXN0cnVjdCBpbnRlbF9k aWdpdGFsX3BvcnQNCj4gKmRpZ19wb3J0KQ0KPiAtew0KPiAtfQ0KPiAtDQo+IC0jZW5kaWYNCj4g LQ0KPiAtI2RlZmluZSBUR0xfQVVYX1BXX1RPX1RDX1BPUlQocHdfaWR4KQkoKHB3X2lkeCkgLQ0K PiBUR0xfUFdfQ1RMX0lEWF9BVVhfVEMxKQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBpY2xfdGNfY29s ZF9leGl0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQ0KPiAtew0KPiAtCWludCByZXQs IHRyaWVzID0gMDsNCj4gLQ0KPiAtCXdoaWxlICgxKSB7DQo+IC0JCXJldCA9IHNuYl9wY29kZV93 cml0ZV90aW1lb3V0KGk5MTUsDQo+IElDTF9QQ09ERV9FWElUX1RDQ09MRCwgMCwNCj4gLQkJCQkJ ICAgICAgMjUwLCAxKTsNCj4gLQkJaWYgKHJldCAhPSAtRUFHQUlOIHx8ICsrdHJpZXMgPT0gMykN Cj4gLQkJCWJyZWFrOw0KPiAtCQltc2xlZXAoMSk7DQo+IC0JfQ0KPiAtDQo+IC0JLyogU3BlYyBz dGF0ZXMgdGhhdCBUQyBjb2xkIGV4aXQgY2FuIHRha2UgdXAgdG8gMW1zIHRvIGNvbXBsZXRlDQo+ ICovDQo+IC0JaWYgKCFyZXQpDQo+IC0JCW1zbGVlcCgxKTsNCj4gLQ0KPiAtCS8qIFRPRE86IHR1 cm4gZmFpbHVyZSBpbnRvIGEgZXJyb3IgYXMgc29vbiBpOTE1IENJIHVwZGF0ZXMgSUNMDQo+IElG V0kgKi8NCj4gLQlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAiVEMgY29sZCBibG9jayAlc1xuIiwg cmV0ID8gImZhaWxlZCIgOg0KPiAtCQkgICAgInN1Y2NlZWRlZCIpOw0KPiAtfQ0KPiAtDQo+IC1z dGF0aWMgdm9pZA0KPiAtaWNsX3RjX3BoeV9hdXhfcG93ZXJfd2VsbF9lbmFibGUoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LA0KPiAtCQkJCSBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxs ICpwb3dlcl93ZWxsKQ0KPiAtew0KPiAtCWVudW0gYXV4X2NoIGF1eF9jaCA9IGljbF9hdXhfcHdf dG9fY2gocG93ZXJfd2VsbCk7DQo+IC0Jc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3Bv cnQgPQ0KPiBhdXhfY2hfdG9fZGlnaXRhbF9wb3J0KGRldl9wcml2LCBhdXhfY2gpOw0KPiAtCWNv bnN0IHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGxfcmVncyAqcmVncyA9IHBvd2VyX3dlbGwtPmRlc2Mt DQo+ID5vcHMtPnJlZ3M7DQo+IC0JYm9vbCBpc190YnQgPSBwb3dlcl93ZWxsLT5kZXNjLT5oc3cu aXNfdGNfdGJ0Ow0KPiAtCWJvb2wgdGltZW91dF9leHBlY3RlZDsNCj4gLQl1MzIgdmFsOw0KPiAt DQo+IC0JaWNsX3RjX3BvcnRfYXNzZXJ0X3JlZl9oZWxkKGRldl9wcml2LCBwb3dlcl93ZWxsLCBk aWdfcG9ydCk7DQo+IC0NCj4gLQl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBEUF9BVVhf Q0hfQ1RMKGF1eF9jaCkpOw0KPiAtCXZhbCAmPSB+RFBfQVVYX0NIX0NUTF9UQlRfSU87DQo+IC0J aWYgKGlzX3RidCkNCj4gLQkJdmFsIHw9IERQX0FVWF9DSF9DVExfVEJUX0lPOw0KPiAtCWludGVs X2RlX3dyaXRlKGRldl9wcml2LCBEUF9BVVhfQ0hfQ1RMKGF1eF9jaCksIHZhbCk7DQo+IC0NCj4g LQl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWdzLT5kcml2ZXIpOw0KPiAtCWludGVs X2RlX3dyaXRlKGRldl9wcml2LCByZWdzLT5kcml2ZXIsDQo+IC0JCSAgICAgICB2YWwgfCBIU1df UFdSX1dFTExfQ1RMX1JFUShwb3dlcl93ZWxsLT5kZXNjLQ0KPiA+aHN3LmlkeCkpOw0KPiAtDQo+ IC0JLyoNCj4gLQkgKiBBbiBBVVggdGltZW91dCBpcyBleHBlY3RlZCBpZiB0aGUgVEJUIERQIHR1 bm5lbCBpcyBkb3duLA0KPiAtCSAqIG9yIG5lZWQgdG8gZW5hYmxlIEFVWCBvbiBhIGxlZ2FjeSBU eXBlQyBwb3J0IGFzIHBhcnQgb2YgdGhlDQo+IFRDLWNvbGQNCj4gLQkgKiBleGl0IHNlcXVlbmNl Lg0KPiAtCSAqLw0KPiAtCXRpbWVvdXRfZXhwZWN0ZWQgPSBpc190YnQgfHwNCj4gaW50ZWxfdGNf Y29sZF9yZXF1aXJlc19hdXhfcHcoZGlnX3BvcnQpOw0KPiAtCWlmIChESVNQTEFZX1ZFUihkZXZf cHJpdikgPT0gMTEgJiYNCj4gaW50ZWxfdGNfY29sZF9yZXF1aXJlc19hdXhfcHcoZGlnX3BvcnQp KQ0KPiAtCQlpY2xfdGNfY29sZF9leGl0KGRldl9wcml2KTsNCj4gLQ0KPiAtCWhzd193YWl0X2Zv cl9wb3dlcl93ZWxsX2VuYWJsZShkZXZfcHJpdiwgcG93ZXJfd2VsbCwNCj4gdGltZW91dF9leHBl Y3RlZCk7DQo+IC0NCj4gLQlpZiAoRElTUExBWV9WRVIoZGV2X3ByaXYpID49IDEyICYmICFpc190 YnQpIHsNCj4gLQkJZW51bSB0Y19wb3J0IHRjX3BvcnQ7DQo+IC0NCj4gLQkJdGNfcG9ydCA9IFRH TF9BVVhfUFdfVE9fVENfUE9SVChwb3dlcl93ZWxsLT5kZXNjLQ0KPiA+aHN3LmlkeCk7DQo+IC0J CWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBISVBfSU5ERVhfUkVHKHRjX3BvcnQpLA0KPiAtCQkJ ICAgICAgIEhJUF9JTkRFWF9WQUwodGNfcG9ydCwgMHgyKSk7DQo+IC0NCj4gLQkJaWYgKGludGVs X2RlX3dhaXRfZm9yX3NldChkZXZfcHJpdiwNCj4gREtMX0NNTl9VQ19EV18yNyh0Y19wb3J0KSwN Cj4gLQkJCQkJICBES0xfQ01OX1VDX0RXMjdfVUNfSEVBTFRILA0KPiAxKSkNCj4gLQkJCWRybV93 YXJuKCZkZXZfcHJpdi0+ZHJtLA0KPiAtCQkJCSAiVGltZW91dCB3YWl0aW5nIFRDIHVDIGhlYWx0 aFxuIik7DQo+IC0JfQ0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9pZA0KPiAtaWNsX2F1eF9wb3dl cl93ZWxsX2VuYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsDQo+IC0JCQkg IHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwpDQo+IC17DQo+IC0JZW51bSBwaHkg cGh5ID0gaWNsX2F1eF9wd190b19waHkoZGV2X3ByaXYsIHBvd2VyX3dlbGwpOw0KPiAtDQo+IC0J aWYgKGludGVsX3BoeV9pc190YyhkZXZfcHJpdiwgcGh5KSkNCj4gLQkJcmV0dXJuIGljbF90Y19w aHlfYXV4X3Bvd2VyX3dlbGxfZW5hYmxlKGRldl9wcml2LA0KPiBwb3dlcl93ZWxsKTsNCj4gLQll bHNlIGlmIChJU19JQ0VMQUtFKGRldl9wcml2KSkNCj4gLQkJcmV0dXJuIGljbF9jb21ib19waHlf YXV4X3Bvd2VyX3dlbGxfZW5hYmxlKGRldl9wcml2LA0KPiAtCQkJCQkJCSAgIHBvd2VyX3dlbGwp Ow0KPiAtCWVsc2UNCj4gLQkJcmV0dXJuIGhzd19wb3dlcl93ZWxsX2VuYWJsZShkZXZfcHJpdiwg cG93ZXJfd2VsbCk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkDQo+IC1pY2xfYXV4X3Bvd2Vy X3dlbGxfZGlzYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsDQo+IC0JCQkg ICBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsKQ0KPiAtew0KPiAtCWVudW0gcGh5 IHBoeSA9IGljbF9hdXhfcHdfdG9fcGh5KGRldl9wcml2LCBwb3dlcl93ZWxsKTsNCj4gLQ0KPiAt CWlmIChpbnRlbF9waHlfaXNfdGMoZGV2X3ByaXYsIHBoeSkpDQo+IC0JCXJldHVybiBoc3dfcG93 ZXJfd2VsbF9kaXNhYmxlKGRldl9wcml2LCBwb3dlcl93ZWxsKTsNCj4gLQllbHNlIGlmIChJU19J Q0VMQUtFKGRldl9wcml2KSkNCj4gLQkJcmV0dXJuIGljbF9jb21ib19waHlfYXV4X3Bvd2VyX3dl bGxfZGlzYWJsZShkZXZfcHJpdiwNCj4gLQkJCQkJCQkgICAgcG93ZXJfd2VsbCkNCj4gOw0KPiAt CWVsc2UNCj4gLQkJcmV0dXJuIGhzd19wb3dlcl93ZWxsX2Rpc2FibGUoZGV2X3ByaXYsIHBvd2Vy X3dlbGwpOw0KPiAtfQ0KPiAtDQo+IC0vKg0KPiAtICogV2Ugc2hvdWxkIG9ubHkgdXNlIHRoZSBw b3dlciB3ZWxsIGlmIHdlIGV4cGxpY2l0bHkgYXNrZWQgdGhlDQo+IGhhcmR3YXJlIHRvDQo+IC0g KiBlbmFibGUgaXQsIHNvIGNoZWNrIGlmIGl0J3MgZW5hYmxlZCBhbmQgYWxzbyBjaGVjayBpZiB3 ZSd2ZQ0KPiByZXF1ZXN0ZWQgaXQgdG8NCj4gLSAqIGJlIGVuYWJsZWQuDQo+IC0gKi8NCj4gLXN0 YXRpYyBib29sIGhzd19wb3dlcl93ZWxsX2VuYWJsZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUN Cj4gKmRldl9wcml2LA0KPiAtCQkJCSAgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dl bGwpDQo+IC17DQo+IC0JY29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9yZWdzICpyZWdzID0g cG93ZXJfd2VsbC0+ZGVzYy0NCj4gPm9wcy0+cmVnczsNCj4gLQllbnVtIGk5MTVfcG93ZXJfd2Vs bF9pZCBpZCA9IHBvd2VyX3dlbGwtPmRlc2MtPmlkOw0KPiAtCWludCBwd19pZHggPSBwb3dlcl93 ZWxsLT5kZXNjLT5oc3cuaWR4Ow0KPiAtCXUzMiBtYXNrID0gSFNXX1BXUl9XRUxMX0NUTF9SRVEo cHdfaWR4KSB8DQo+IC0JCSAgIEhTV19QV1JfV0VMTF9DVExfU1RBVEUocHdfaWR4KTsNCj4gLQl1 MzIgdmFsOw0KPiAtDQo+IC0JdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVncy0+ZHJp dmVyKTsNCj4gLQ0KPiAtCS8qDQo+IC0JICogT24gR0VOOSBiaWcgY29yZSBkdWUgdG8gYSBETUMg YnVnIHRoZSBkcml2ZXIncyByZXF1ZXN0IGJpdHMNCj4gZm9yIFBXMQ0KPiAtCSAqIGFuZCB0aGUg TUlTQ19JTyBQVyB3aWxsIGJlIG5vdCByZXN0b3JlZCwgc28gY2hlY2sgaW5zdGVhZA0KPiBmb3Ig dGhlDQo+IC0JICogQklPUydzIG93biByZXF1ZXN0IGJpdHMsIHdoaWNoIGFyZSBmb3JjZWQtb24g Zm9yIHRoZXNlIHBvd2VyDQo+IHdlbGxzDQo+IC0JICogd2hlbiBleGl0aW5nIERDNS82Lg0KPiAt CSAqLw0KPiAtCWlmIChESVNQTEFZX1ZFUihkZXZfcHJpdikgPT0gOSAmJiAhSVNfQlJPWFRPTihk ZXZfcHJpdikgJiYNCj4gLQkgICAgKGlkID09IFNLTF9ESVNQX1BXXzEgfHwgaWQgPT0gU0tMX0RJ U1BfUFdfTUlTQ19JTykpDQo+IC0JCXZhbCB8PSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWdz LT5iaW9zKTsNCj4gLQ0KPiAtCXJldHVybiAodmFsICYgbWFzaykgPT0gbWFzazsNCj4gLX0NCj4g LQ0KPiAtc3RhdGljIHZvaWQgYXNzZXJ0X2Nhbl9lbmFibGVfZGM5KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikNCj4gLXsNCj4gLQlkcm1fV0FSTl9PTkNFKCZkZXZfcHJpdi0+ZHJt LA0KPiAtCQkgICAgICAoaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgRENfU1RBVEVfRU4pICYNCj4g RENfU1RBVEVfRU5fREM5KSwNCj4gLQkJICAgICAgIkRDOSBhbHJlYWR5IHByb2dyYW1tZWQgdG8g YmUgZW5hYmxlZC5cbiIpOw0KPiAtCWRybV9XQVJOX09OQ0UoJmRldl9wcml2LT5kcm0sDQo+IC0J CSAgICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIERDX1NUQVRFX0VOKSAmDQo+IC0JCSAgICAg IERDX1NUQVRFX0VOX1VQVE9fREM1LA0KPiAtCQkgICAgICAiREM1IHN0aWxsIG5vdCBkaXNhYmxl ZCB0byBlbmFibGUgREM5LlxuIik7DQo+IC0JZHJtX1dBUk5fT05DRSgmZGV2X3ByaXYtPmRybSwN Cj4gLQkJICAgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgSFNXX1BXUl9XRUxMX0NUTDIpICYN Cj4gLQkJICAgICAgSFNXX1BXUl9XRUxMX0NUTF9SRVEoU0tMX1BXX0NUTF9JRFhfUFdfMiksDQo+ IC0JCSAgICAgICJQb3dlciB3ZWxsIDIgb24uXG4iKTsNCj4gLQlkcm1fV0FSTl9PTkNFKCZkZXZf cHJpdi0+ZHJtLCBpbnRlbF9pcnFzX2VuYWJsZWQoZGV2X3ByaXYpLA0KPiAtCQkgICAgICAiSW50 ZXJydXB0cyBub3QgZGlzYWJsZWQgeWV0LlxuIik7DQo+IC0NCj4gLQkgLyoNCj4gLQkgICogVE9E TzogY2hlY2sgZm9yIHRoZSBmb2xsb3dpbmcgdG8gdmVyaWZ5IHRoZSBjb25kaXRpb25zIHRvDQo+ IGVudGVyIERDOQ0KPiAtCSAgKiBzdGF0ZSBhcmUgc2F0aXNmaWVkOg0KPiAtCSAgKiAxXSBDaGVj ayByZWxldmFudCBkaXNwbGF5IGVuZ2luZSByZWdpc3RlcnMgdG8gdmVyaWZ5IGlmDQo+IG1vZGUg c2V0DQo+IC0JICAqIGRpc2FibGUgc2VxdWVuY2Ugd2FzIGZvbGxvd2VkLg0KPiAtCSAgKiAyXSBD aGVjayBpZiBkaXNwbGF5IHVuaW5pdGlhbGl6ZSBzZXF1ZW5jZSBpcyBpbml0aWFsaXplZC4NCj4g LQkgICovDQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIGFzc2VydF9jYW5fZGlzYWJsZV9kYzko c3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gKmRldl9wcml2KQ0KPiAtew0KPiAtCWRybV9XQVJO X09OQ0UoJmRldl9wcml2LT5kcm0sIGludGVsX2lycXNfZW5hYmxlZChkZXZfcHJpdiksDQo+IC0J CSAgICAgICJJbnRlcnJ1cHRzIG5vdCBkaXNhYmxlZCB5ZXQuXG4iKTsNCj4gLQlkcm1fV0FSTl9P TkNFKCZkZXZfcHJpdi0+ZHJtLA0KPiAtCQkgICAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBE Q19TVEFURV9FTikgJg0KPiAtCQkgICAgICBEQ19TVEFURV9FTl9VUFRPX0RDNSwNCj4gLQkJICAg ICAgIkRDNSBzdGlsbCBub3QgZGlzYWJsZWQuXG4iKTsNCj4gLQ0KPiAtCSAvKg0KPiAtCSAgKiBU T0RPOiBjaGVjayBmb3IgdGhlIGZvbGxvd2luZyB0byB2ZXJpZnkgREM5IHN0YXRlIHdhcw0KPiBp bmRlZWQNCj4gLQkgICogZW50ZXJlZCBiZWZvcmUgcHJvZ3JhbW1pbmcgdG8gZGlzYWJsZSBpdDoN Cj4gLQkgICogMV0gQ2hlY2sgcmVsZXZhbnQgZGlzcGxheSBlbmdpbmUgcmVnaXN0ZXJzIHRvIHZl cmlmeSBpZg0KPiBtb2RlDQo+IC0JICAqICBzZXQgZGlzYWJsZSBzZXF1ZW5jZSB3YXMgZm9sbG93 ZWQuDQo+IC0JICAqIDJdIENoZWNrIGlmIGRpc3BsYXkgdW5pbml0aWFsaXplIHNlcXVlbmNlIGlz IGluaXRpYWxpemVkLg0KPiAtCSAgKi8NCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgZ2VuOV93 cml0ZV9kY19zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsDQo+IC0JCQkJ dTMyIHN0YXRlKQ0KPiAtew0KPiAtCWludCByZXdyaXRlcyA9IDA7DQo+IC0JaW50IHJlcmVhZHMg PSAwOw0KPiAtCXUzMiB2Ow0KPiAtDQo+IC0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIERDX1NU QVRFX0VOLCBzdGF0ZSk7DQo+IC0NCj4gLQkvKiBJdCBoYXMgYmVlbiBvYnNlcnZlZCB0aGF0IGRp c2FibGluZyB0aGUgZGM2IHN0YXRlIHNvbWV0aW1lcw0KPiAtCSAqIGRvZXNuJ3Qgc3RpY2sgYW5k IGRtYyBrZWVwcyByZXR1cm5pbmcgb2xkIHZhbHVlLiBNYWtlIHN1cmUNCj4gLQkgKiB0aGUgd3Jp dGUgcmVhbGx5IHN0aWNrcyBlbm91Z2ggdGltZXMgYW5kIGFsc28gZm9yY2UgcmV3cml0ZQ0KPiB1 bnRpbA0KPiAtCSAqIHdlIGFyZSBjb25maWRlbnQgdGhhdCBzdGF0ZSBpcyBleGFjdGx5IHdoYXQg d2Ugd2FudC4NCj4gLQkgKi8NCj4gLQlkbyAgew0KPiAtCQl2ID0gaW50ZWxfZGVfcmVhZChkZXZf cHJpdiwgRENfU1RBVEVfRU4pOw0KPiAtDQo+IC0JCWlmICh2ICE9IHN0YXRlKSB7DQo+IC0JCQlp bnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRENfU1RBVEVfRU4sIHN0YXRlKTsNCj4gLQkJCXJld3Jp dGVzKys7DQo+IC0JCQlyZXJlYWRzID0gMDsNCj4gLQkJfSBlbHNlIGlmIChyZXJlYWRzKysgPiA1 KSB7DQo+IC0JCQlicmVhazsNCj4gLQkJfQ0KPiAtDQo+IC0JfSB3aGlsZSAocmV3cml0ZXMgPCAx MDApOw0KPiAtDQo+IC0JaWYgKHYgIT0gc3RhdGUpDQo+IC0JCWRybV9lcnIoJmRldl9wcml2LT5k cm0sDQo+IC0JCQkiV3JpdGluZyBkYyBzdGF0ZSB0byAweCV4IGZhaWxlZCwgbm93IDB4JXhcbiIs DQo+IC0JCQlzdGF0ZSwgdik7DQo+IC0NCj4gLQkvKiBNb3N0IG9mIHRoZSB0aW1lcyB3ZSBuZWVk IG9uZSByZXRyeSwgYXZvaWQgc3BhbSAqLw0KPiAtCWlmIChyZXdyaXRlcyA+IDEpDQo+IC0JCWRy bV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLA0KPiAtCQkJICAgICJSZXdyb3RlIGRjIHN0YXRlIHRv IDB4JXggJWQgdGltZXNcbiIsDQo+IC0JCQkgICAgc3RhdGUsIHJld3JpdGVzKTsNCj4gLX0NCj4g LQ0KPiAtc3RhdGljIHUzMiBnZW45X2RjX21hc2soc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQ0KPiAtew0KPiAtCXUzMiBtYXNrOw0KPiAtDQo+IC0JbWFzayA9IERDX1NUQVRFX0VO X1VQVE9fREM1Ow0KPiAtDQo+IC0JaWYgKERJU1BMQVlfVkVSKGRldl9wcml2KSA+PSAxMikNCj4g LQkJbWFzayB8PSBEQ19TVEFURV9FTl9EQzNDTyB8IERDX1NUQVRFX0VOX1VQVE9fREM2DQo+IC0J CQkJCSAgfCBEQ19TVEFURV9FTl9EQzk7DQo+IC0JZWxzZSBpZiAoRElTUExBWV9WRVIoZGV2X3By aXYpID09IDExKQ0KPiAtCQltYXNrIHw9IERDX1NUQVRFX0VOX1VQVE9fREM2IHwgRENfU1RBVEVf RU5fREM5Ow0KPiAtCWVsc2UgaWYgKElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpIHx8IElTX0JST1hU T04oZGV2X3ByaXYpKQ0KPiAtCQltYXNrIHw9IERDX1NUQVRFX0VOX0RDOTsNCj4gLQllbHNlDQo+ IC0JCW1hc2sgfD0gRENfU1RBVEVfRU5fVVBUT19EQzY7DQo+IC0NCj4gLQlyZXR1cm4gbWFzazsN Cj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgZ2VuOV9zYW5pdGl6ZV9kY19zdGF0ZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYpDQo+IC17DQo+IC0JdTMyIHZhbDsNCj4gLQ0K PiAtCWlmICghSEFTX0RJU1BMQVkoZGV2X3ByaXYpKQ0KPiAtCQlyZXR1cm47DQo+IC0NCj4gLQl2 YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBEQ19TVEFURV9FTikgJg0KPiBnZW45X2RjX21h c2soZGV2X3ByaXYpOw0KPiAtDQo+IC0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sDQo+IC0J CSAgICAiUmVzZXR0aW5nIERDIHN0YXRlIHRyYWNraW5nIGZyb20gJTAyeCB0byAlMDJ4XG4iLA0K PiAtCQkgICAgZGV2X3ByaXYtPmRtYy5kY19zdGF0ZSwgdmFsKTsNCj4gLQlkZXZfcHJpdi0+ZG1j LmRjX3N0YXRlID0gdmFsOw0KPiAtfQ0KPiAtDQo+IC0vKioNCj4gLSAqIGdlbjlfc2V0X2RjX3N0 YXRlIC0gc2V0IHRhcmdldCBkaXNwbGF5IEMgcG93ZXIgc3RhdGUNCj4gLSAqIEBkZXZfcHJpdjog aTkxNSBkZXZpY2UgaW5zdGFuY2UNCj4gLSAqIEBzdGF0ZTogdGFyZ2V0IERDIHBvd2VyIHN0YXRl DQo+IC0gKiAtIERDX1NUQVRFX0RJU0FCTEUNCj4gLSAqIC0gRENfU1RBVEVfRU5fVVBUT19EQzUN Cj4gLSAqIC0gRENfU1RBVEVfRU5fVVBUT19EQzYNCj4gLSAqIC0gRENfU1RBVEVfRU5fREM5DQo+ IC0gKg0KPiAtICogU2lnbmFsIHRvIERNQyBmaXJtd2FyZS9IVyB0aGUgdGFyZ2V0IERDIHBvd2Vy IHN0YXRlIHBhc3NlZCBpbg0KPiBAc3RhdGUuDQo+IC0gKiBETUMvSFcgY2FuIHR1cm4gb2ZmIGlu ZGl2aWR1YWwgZGlzcGxheSBjbG9ja3MgYW5kIHBvd2VyIHJhaWxzDQo+IHdoZW4gZW50ZXJpbmcN Cj4gLSAqIGEgZGVlcGVyIERDIHBvd2VyIHN0YXRlIChoaWdoZXIgaW4gbnVtYmVyKSBhbmQgdHVy bnMgdGhlc2UgYmFjaw0KPiB3aGVuIGV4aXRpbmcNCj4gLSAqIHRoYXQgc3RhdGUgdG8gYSBzaGFs bG93ZXIgcG93ZXIgc3RhdGUgKGxvd2VyIGluIG51bWJlcikuIFRoZSBIVw0KPiB3aWxsIGRlY2lk ZQ0KPiAtICogd2hlbiB0byBhY3R1YWxseSBlbnRlciBhIGdpdmVuIHN0YXRlIG9uIGFuIG9uLWRl bWFuZCBiYXNpcywgZm9yDQo+IGluc3RhbmNlDQo+IC0gKiBkZXBlbmRpbmcgb24gdGhlIGFjdGl2 ZSBzdGF0ZSBvZiBkaXNwbGF5IHBpcGVzLiBUaGUgc3RhdGUgb2YNCj4gZGlzcGxheQ0KPiAtICog cmVnaXN0ZXJzIGJhY2tlZCBieSBhZmZlY3RlZCBwb3dlciByYWlscyBhcmUgc2F2ZWQvcmVzdG9y ZWQgYXMNCj4gbmVlZGVkLg0KPiAtICoNCj4gLSAqIEJhc2VkIG9uIHRoZSBhYm92ZSBlbmFibGlu ZyBhIGRlZXBlciBEQyBwb3dlciBzdGF0ZSBpcw0KPiBhc3luY2hyb25vdXMgd3J0Lg0KPiAtICog ZW5hYmxpbmcgaXQuIERpc2FibGluZyBhIGRlZXBlciBwb3dlciBzdGF0ZSBpcyBzeW5jaHJvbm91 czogZm9yDQo+IGluc3RhbmNlDQo+IC0gKiBzZXR0aW5nICVEQ19TVEFURV9ESVNBQkxFIHdvbid0 IGNvbXBsZXRlIHVudGlsIGFsbCBIVyByZXNvdXJjZXMNCj4gYXJlIHR1cm5lZA0KPiAtICogYmFj ayBvbiBhbmQgcmVnaXN0ZXIgc3RhdGUgaXMgcmVzdG9yZWQuIFRoaXMgaXMgZ3VhcmFudGVlZCBi eSB0aGUNCj4gTU1JTyB3cml0ZQ0KPiAtICogdG8gRENfU1RBVEVfRU4gYmxvY2tpbmcgdW50aWwg dGhlIHN0YXRlIGlzIHJlc3RvcmVkLg0KPiAtICovDQo+IC1zdGF0aWMgdm9pZCBnZW45X3NldF9k Y19zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMg0KPiBzdGF0ZSkN Cj4gLXsNCj4gLQl1MzIgdmFsOw0KPiAtCXUzMiBtYXNrOw0KPiAtDQo+IC0JaWYgKCFIQVNfRElT UExBWShkZXZfcHJpdikpDQo+IC0JCXJldHVybjsNCj4gLQ0KPiAtCWlmIChkcm1fV0FSTl9PTl9P TkNFKCZkZXZfcHJpdi0+ZHJtLA0KPiAtCQkJICAgICBzdGF0ZSAmIH5kZXZfcHJpdi0+ZG1jLmFs bG93ZWRfZGNfbWFzaykpDQo+IC0JCXN0YXRlICY9IGRldl9wcml2LT5kbWMuYWxsb3dlZF9kY19t YXNrOw0KPiAtDQo+IC0JdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgRENfU1RBVEVfRU4p Ow0KPiAtCW1hc2sgPSBnZW45X2RjX21hc2soZGV2X3ByaXYpOw0KPiAtCWRybV9kYmdfa21zKCZk ZXZfcHJpdi0+ZHJtLCAiU2V0dGluZyBEQyBzdGF0ZSBmcm9tICUwMnggdG8NCj4gJTAyeFxuIiwN Cj4gLQkJICAgIHZhbCAmIG1hc2ssIHN0YXRlKTsNCj4gLQ0KPiAtCS8qIENoZWNrIGlmIERNQyBp cyBpZ25vcmluZyBvdXIgREMgc3RhdGUgcmVxdWVzdHMgKi8NCj4gLQlpZiAoKHZhbCAmIG1hc2sp ICE9IGRldl9wcml2LT5kbWMuZGNfc3RhdGUpDQo+IC0JCWRybV9lcnIoJmRldl9wcml2LT5kcm0s ICJEQyBzdGF0ZSBtaXNtYXRjaCAoMHgleCAtPg0KPiAweCV4KVxuIiwNCj4gLQkJCWRldl9wcml2 LT5kbWMuZGNfc3RhdGUsIHZhbCAmIG1hc2spOw0KPiAtDQo+IC0JdmFsICY9IH5tYXNrOw0KPiAt CXZhbCB8PSBzdGF0ZTsNCj4gLQ0KPiAtCWdlbjlfd3JpdGVfZGNfc3RhdGUoZGV2X3ByaXYsIHZh bCk7DQo+IC0NCj4gLQlkZXZfcHJpdi0+ZG1jLmRjX3N0YXRlID0gdmFsICYgbWFzazsNCj4gLX0N Cj4gLQ0KPiAgc3RhdGljIHUzMg0KPiAgc2FuaXRpemVfdGFyZ2V0X2RjX3N0YXRlKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwNCj4gIAkJCSB1MzIgdGFyZ2V0X2RjX3N0YXRlKQ0K PiBAQCAtODU1LDY1ICsyNDksNiBAQCBzYW5pdGl6ZV90YXJnZXRfZGNfc3RhdGUoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUNCj4gKmRldl9wcml2LA0KPiAgCXJldHVybiB0YXJnZXRfZGNfc3RhdGU7 DQo+ICB9DQo+ICANCj4gLXN0YXRpYyB2b2lkIHRnbF9lbmFibGVfZGMzY28oc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQ0KPiAtew0KPiAtCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ ZHJtLCAiRW5hYmxpbmcgREMzQ09cbiIpOw0KPiAtCWdlbjlfc2V0X2RjX3N0YXRlKGRldl9wcml2 LCBEQ19TVEFURV9FTl9EQzNDTyk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIHRnbF9kaXNh YmxlX2RjM2NvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikNCj4gLXsNCj4gLQl1 MzIgdmFsOw0KPiAtDQo+IC0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJEaXNhYmxpbmcg REMzQ09cbiIpOw0KPiAtCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIERDX1NUQVRFX0VO KTsNCj4gLQl2YWwgJj0gfkRDX1NUQVRFX0RDM0NPX1NUQVRVUzsNCj4gLQlpbnRlbF9kZV93cml0 ZShkZXZfcHJpdiwgRENfU1RBVEVfRU4sIHZhbCk7DQo+IC0JZ2VuOV9zZXRfZGNfc3RhdGUoZGV2 X3ByaXYsIERDX1NUQVRFX0RJU0FCTEUpOw0KPiAtCS8qDQo+IC0JICogRGVsYXkgb2YgMjAwdXMg REMzQ08gRXhpdCB0aW1lIEIuU3BlYyA0OTE5Ng0KPiAtCSAqLw0KPiAtCXVzbGVlcF9yYW5nZSgy MDAsIDIxMCk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIGJ4dF9lbmFibGVfZGM5KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikNCj4gLXsNCj4gLQlhc3NlcnRfY2FuX2VuYWJs ZV9kYzkoZGV2X3ByaXYpOw0KPiAtDQo+IC0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJF bmFibGluZyBEQzlcbiIpOw0KPiAtCS8qDQo+IC0JICogUG93ZXIgc2VxdWVuY2VyIHJlc2V0IGlz IG5vdCBuZWVkZWQgb24NCj4gLQkgKiBwbGF0Zm9ybXMgd2l0aCBTb3V0aCBEaXNwbGF5IEVuZ2lu ZSBvbiBQQ0gsDQo+IC0JICogYmVjYXVzZSBQUFMgcmVnaXN0ZXJzIGFyZSBhbHdheXMgb24uDQo+ IC0JICovDQo+IC0JaWYgKCFIQVNfUENIX1NQTElUKGRldl9wcml2KSkNCj4gLQkJaW50ZWxfcHBz X3Jlc2V0X2FsbChkZXZfcHJpdik7DQo+IC0JZ2VuOV9zZXRfZGNfc3RhdGUoZGV2X3ByaXYsIERD X1NUQVRFX0VOX0RDOSk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIGJ4dF9kaXNhYmxlX2Rj OShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+IC17DQo+IC0JYXNzZXJ0X2Nh bl9kaXNhYmxlX2RjOShkZXZfcHJpdik7DQo+IC0NCj4gLQlkcm1fZGJnX2ttcygmZGV2X3ByaXYt PmRybSwgIkRpc2FibGluZyBEQzlcbiIpOw0KPiAtDQo+IC0JZ2VuOV9zZXRfZGNfc3RhdGUoZGV2 X3ByaXYsIERDX1NUQVRFX0RJU0FCTEUpOw0KPiAtDQo+IC0JaW50ZWxfcHBzX3VubG9ja19yZWdz X3dhKGRldl9wcml2KTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgYXNzZXJ0X2RtY19sb2Fk ZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQ0KPiAtew0KPiAtCWRybV9XQVJO X09OQ0UoJmRldl9wcml2LT5kcm0sDQo+IC0JCSAgICAgICFpbnRlbF9kZV9yZWFkKGRldl9wcml2 LA0KPiAtCQkJCSAgICAgRE1DX1BST0dSQU0oZGV2X3ByaXYtDQo+ID5kbWMuZG1jX2luZm9bRE1D X0ZXX01BSU5dLnN0YXJ0X21taW9hZGRyLCAwKSksDQo+IC0JCQkJICAgICAiRE1DIHByb2dyYW0g c3RvcmFnZSBzdGFydCBpcw0KPiBOVUxMXG4iKTsNCj4gLQlkcm1fV0FSTl9PTkNFKCZkZXZfcHJp di0+ZHJtLCAhaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwNCj4gRE1DX1NTUF9CQVNFKSwNCj4gLQkJ ICAgICAgIkRNQyBTU1AgQmFzZSBOb3QgZmluZVxuIik7DQo+IC0JZHJtX1dBUk5fT05DRSgmZGV2 X3ByaXYtPmRybSwgIWludGVsX2RlX3JlYWQoZGV2X3ByaXYsDQo+IERNQ19IVFBfU0tMKSwNCj4g LQkJICAgICAgIkRNQyBIVFAgTm90IGZpbmVcbiIpOw0KPiAtfQ0KPiAtDQo+ICAvKioNCj4gICAq IGludGVsX2Rpc3BsYXlfcG93ZXJfc2V0X3RhcmdldF9kY19zdGF0ZSAtIFNldCB0YXJnZXQgZGMg c3RhdGUuDQo+ICAgKiBAZGV2X3ByaXY6IGk5MTUgZGV2aWNlDQo+IEBAIC05NTgsOTEyICsyOTMs OCBAQCB2b2lkDQo+IGludGVsX2Rpc3BsYXlfcG93ZXJfc2V0X3RhcmdldF9kY19zdGF0ZShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYsDQo+ICAJbXV0ZXhfdW5sb2NrKCZwb3dl cl9kb21haW5zLT5sb2NrKTsNCj4gIH0NCj4gIA0KPiAtc3RhdGljIHZvaWQgYXNzZXJ0X2Nhbl9l bmFibGVfZGM1KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikNCj4gLXsNCj4gLQll bnVtIGk5MTVfcG93ZXJfd2VsbF9pZCBoaWdoX3BnOw0KPiAtDQo+IC0JLyogUG93ZXIgd2VsbHMg YXQgdGhpcyBsZXZlbCBhbmQgYWJvdmUgbXVzdCBiZSBkaXNhYmxlZCBmb3IgREM1DQo+IGVudHJ5 ICovDQo+IC0JaWYgKERJU1BMQVlfVkVSKGRldl9wcml2KSA9PSAxMikNCj4gLQkJaGlnaF9wZyA9 IElDTF9ESVNQX1BXXzM7DQo+IC0JZWxzZQ0KPiAtCQloaWdoX3BnID0gU0tMX0RJU1BfUFdfMjsN Cj4gLQ0KPiAtCWRybV9XQVJOX09OQ0UoJmRldl9wcml2LT5kcm0sDQo+IC0JCSAgICAgIGludGVs X2Rpc3BsYXlfcG93ZXJfd2VsbF9pc19lbmFibGVkKGRldl9wcml2LA0KPiBoaWdoX3BnKSwNCj4g LQkJICAgICAgIlBvd2VyIHdlbGxzIGFib3ZlIHBsYXRmb3JtJ3MgREM1IGxpbWl0IHN0aWxsDQo+ IGVuYWJsZWQuXG4iKTsNCj4gLQ0KPiAtCWRybV9XQVJOX09OQ0UoJmRldl9wcml2LT5kcm0sDQo+ IC0JCSAgICAgIChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBEQ19TVEFURV9FTikgJg0KPiAtCQkg ICAgICAgRENfU1RBVEVfRU5fVVBUT19EQzUpLA0KPiAtCQkgICAgICAiREM1IGFscmVhZHkgcHJv Z3JhbW1lZCB0byBiZSBlbmFibGVkLlxuIik7DQo+IC0JYXNzZXJ0X3JwbV93YWtlbG9ja19oZWxk KCZkZXZfcHJpdi0+cnVudGltZV9wbSk7DQo+IC0NCj4gLQlhc3NlcnRfZG1jX2xvYWRlZChkZXZf cHJpdik7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIGdlbjlfZW5hYmxlX2RjNShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+IC17DQo+IC0JYXNzZXJ0X2Nhbl9lbmFibGVf ZGM1KGRldl9wcml2KTsNCj4gLQ0KPiAtCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRW5h YmxpbmcgREM1XG4iKTsNCj4gLQ0KPiAtCS8qIFdhIERpc3BsYXkgIzExODM6IHNrbCxrYmwsY2Zs ICovDQo+IC0JaWYgKERJU1BMQVlfVkVSKGRldl9wcml2KSA9PSA5ICYmICFJU19CUk9YVE9OKGRl dl9wcml2KSkNCj4gLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEdFTjhfQ0hJQ0tFTl9EQ1BS XzEsDQo+IC0JCQkgICAgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwNCj4gR0VOOF9DSElDS0VO X0RDUFJfMSkgfCBTS0xfU0VMRUNUX0FMVEVSTkFURV9EQ19FWElUKTsNCj4gLQ0KPiAtCWdlbjlf c2V0X2RjX3N0YXRlKGRldl9wcml2LCBEQ19TVEFURV9FTl9VUFRPX0RDNSk7DQo+IC19DQo+IC0N Cj4gLXN0YXRpYyB2b2lkIGFzc2VydF9jYW5fZW5hYmxlX2RjNihzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpDQo+IC17DQo+IC0JZHJtX1dBUk5fT05DRSgmZGV2X3ByaXYtPmRybSwN Cj4gLQkJICAgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgVVRJTF9QSU5fQ1RMKSAmDQo+IFVU SUxfUElOX0VOQUJMRSwNCj4gLQkJICAgICAgIkJhY2tsaWdodCBpcyBub3QgZGlzYWJsZWQuXG4i KTsNCj4gLQlkcm1fV0FSTl9PTkNFKCZkZXZfcHJpdi0+ZHJtLA0KPiAtCQkgICAgICAoaW50ZWxf ZGVfcmVhZChkZXZfcHJpdiwgRENfU1RBVEVfRU4pICYNCj4gLQkJICAgICAgIERDX1NUQVRFX0VO X1VQVE9fREM2KSwNCj4gLQkJICAgICAgIkRDNiBhbHJlYWR5IHByb2dyYW1tZWQgdG8gYmUgZW5h YmxlZC5cbiIpOw0KPiAtDQo+IC0JYXNzZXJ0X2RtY19sb2FkZWQoZGV2X3ByaXYpOw0KPiAtfQ0K PiAtDQo+IC1zdGF0aWMgdm9pZCBza2xfZW5hYmxlX2RjNihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpDQo+IC17DQo+IC0JYXNzZXJ0X2Nhbl9lbmFibGVfZGM2KGRldl9wcml2KTsN Cj4gLQ0KPiAtCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRW5hYmxpbmcgREM2XG4iKTsN Cj4gLQ0KPiAtCS8qIFdhIERpc3BsYXkgIzExODM6IHNrbCxrYmwsY2ZsICovDQo+IC0JaWYgKERJ U1BMQVlfVkVSKGRldl9wcml2KSA9PSA5ICYmICFJU19CUk9YVE9OKGRldl9wcml2KSkNCj4gLQkJ aW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEdFTjhfQ0hJQ0tFTl9EQ1BSXzEsDQo+IC0JCQkgICAg ICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwNCj4gR0VOOF9DSElDS0VOX0RDUFJfMSkgfCBTS0xf U0VMRUNUX0FMVEVSTkFURV9EQ19FWElUKTsNCj4gLQ0KPiAtCWdlbjlfc2V0X2RjX3N0YXRlKGRl dl9wcml2LCBEQ19TVEFURV9FTl9VUFRPX0RDNik7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lk IGhzd19wb3dlcl93ZWxsX3N5bmNfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gKmRldl9w cml2LA0KPiAtCQkJCSAgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwpDQo+IC17 DQo+IC0JY29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9yZWdzICpyZWdzID0gcG93ZXJfd2Vs bC0+ZGVzYy0NCj4gPm9wcy0+cmVnczsNCj4gLQlpbnQgcHdfaWR4ID0gcG93ZXJfd2VsbC0+ZGVz Yy0+aHN3LmlkeDsNCj4gLQl1MzIgbWFzayA9IEhTV19QV1JfV0VMTF9DVExfUkVRKHB3X2lkeCk7 DQo+IC0JdTMyIGJpb3NfcmVxID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVncy0+Ymlvcyk7 DQo+IC0NCj4gLQkvKiBUYWtlIG92ZXIgdGhlIHJlcXVlc3QgYml0IGlmIHNldCBieSBCSU9TLiAq Lw0KPiAtCWlmIChiaW9zX3JlcSAmIG1hc2spIHsNCj4gLQkJdTMyIGRydl9yZXEgPSBpbnRlbF9k ZV9yZWFkKGRldl9wcml2LCByZWdzLT5kcml2ZXIpOw0KPiAtDQo+IC0JCWlmICghKGRydl9yZXEg JiBtYXNrKSkNCj4gLQkJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWdzLT5kcml2ZXIsIGRy dl9yZXENCj4gfCBtYXNrKTsNCj4gLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZ3MtPmJp b3MsIGJpb3NfcmVxICYgfm1hc2spOw0KPiAtCX0NCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQg Ynh0X2RwaW9fY21uX3Bvd2VyX3dlbGxfZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlDQo+ ICpkZXZfcHJpdiwNCj4gLQkJCQkJICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbA0KPiAqcG93ZXJf d2VsbCkNCj4gLXsNCj4gLQlieHRfZGRpX3BoeV9pbml0KGRldl9wcml2LCBwb3dlcl93ZWxsLT5k ZXNjLT5ieHQucGh5KTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgYnh0X2RwaW9fY21uX3Bv d2VyX3dlbGxfZGlzYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYsDQo+ IC0JCQkJCSAgICBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsDQo+ICpwb3dlcl93ZWxsKQ0KPiAtew0K PiAtCWJ4dF9kZGlfcGh5X3VuaW5pdChkZXZfcHJpdiwgcG93ZXJfd2VsbC0+ZGVzYy0+Ynh0LnBo eSk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBib29sIGJ4dF9kcGlvX2Ntbl9wb3dlcl93ZWxsX2Vu YWJsZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gKmRldl9wcml2LA0KPiAtCQkJCQkgICAg c3RydWN0IGk5MTVfcG93ZXJfd2VsbA0KPiAqcG93ZXJfd2VsbCkNCj4gLXsNCj4gLQlyZXR1cm4g Ynh0X2RkaV9waHlfaXNfZW5hYmxlZChkZXZfcHJpdiwgcG93ZXJfd2VsbC0+ZGVzYy0NCj4gPmJ4 dC5waHkpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBieHRfdmVyaWZ5X2RkaV9waHlfcG93 ZXJfd2VsbHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gKmRldl9wcml2KQ0KPiAtew0KPiAt CXN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGw7DQo+IC0NCj4gLQlwb3dlcl93ZWxs ID0gbG9va3VwX3Bvd2VyX3dlbGwoZGV2X3ByaXYsDQo+IEJYVF9ESVNQX1BXX0RQSU9fQ01OX0Ep Ow0KPiAtCWlmIChpbnRlbF9wb3dlcl93ZWxsX3JlZmNvdW50KHBvd2VyX3dlbGwpID4gMCkNCj4g LQkJYnh0X2RkaV9waHlfdmVyaWZ5X3N0YXRlKGRldl9wcml2LCBwb3dlcl93ZWxsLT5kZXNjLQ0K PiA+Ynh0LnBoeSk7DQo+IC0NCj4gLQlwb3dlcl93ZWxsID0gbG9va3VwX3Bvd2VyX3dlbGwoZGV2 X3ByaXYsDQo+IFZMVl9ESVNQX1BXX0RQSU9fQ01OX0JDKTsNCj4gLQlpZiAoaW50ZWxfcG93ZXJf d2VsbF9yZWZjb3VudChwb3dlcl93ZWxsKSA+IDApDQo+IC0JCWJ4dF9kZGlfcGh5X3ZlcmlmeV9z dGF0ZShkZXZfcHJpdiwgcG93ZXJfd2VsbC0+ZGVzYy0NCj4gPmJ4dC5waHkpOw0KPiAtDQo+IC0J aWYgKElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKSB7DQo+IC0JCXBvd2VyX3dlbGwgPSBsb29rdXBf cG93ZXJfd2VsbChkZXZfcHJpdiwNCj4gLQkJCQkJICAgICAgIEdMS19ESVNQX1BXX0RQSU9fQ01O X0MpOw0KPiAtCQlpZiAoaW50ZWxfcG93ZXJfd2VsbF9yZWZjb3VudChwb3dlcl93ZWxsKSA+IDAp DQo+IC0JCQlieHRfZGRpX3BoeV92ZXJpZnlfc3RhdGUoZGV2X3ByaXYsDQo+IC0JCQkJCQkgcG93 ZXJfd2VsbC0+ZGVzYy0NCj4gPmJ4dC5waHkpOw0KPiAtCX0NCj4gLX0NCj4gLQ0KPiAtc3RhdGlj IGJvb2wgZ2VuOV9kY19vZmZfcG93ZXJfd2VsbF9lbmFibGVkKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlDQo+ICpkZXZfcHJpdiwNCj4gLQkJCQkJICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbA0KPiAq cG93ZXJfd2VsbCkNCj4gLXsNCj4gLQlyZXR1cm4gKChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBE Q19TVEFURV9FTikgJg0KPiBEQ19TVEFURV9FTl9EQzNDTykgPT0gMCAmJg0KPiAtCQkoaW50ZWxf ZGVfcmVhZChkZXZfcHJpdiwgRENfU1RBVEVfRU4pICYNCj4gRENfU1RBVEVfRU5fVVBUT19EQzVf REM2X01BU0spID09IDApOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBnZW45X2Fzc2VydF9k YnVmX2VuYWJsZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gKmRldl9wcml2KQ0KPiAtew0K PiAtCXU4IGh3X2VuYWJsZWRfZGJ1Zl9zbGljZXMgPQ0KPiBpbnRlbF9lbmFibGVkX2RidWZfc2xp Y2VzX21hc2soZGV2X3ByaXYpOw0KPiAtCXU4IGVuYWJsZWRfZGJ1Zl9zbGljZXMgPSBkZXZfcHJp di0+ZGJ1Zi5lbmFibGVkX3NsaWNlczsNCj4gLQ0KPiAtCWRybV9XQVJOKCZkZXZfcHJpdi0+ZHJt LA0KPiAtCQkgaHdfZW5hYmxlZF9kYnVmX3NsaWNlcyAhPSBlbmFibGVkX2RidWZfc2xpY2VzLA0K PiAtCQkgIlVuZXhwZWN0ZWQgREJ1ZiBwb3dlciBwb3dlciBzdGF0ZSAoMHglMDh4LCBleHBlY3Rl ZA0KPiAweCUwOHgpXG4iLA0KPiAtCQkgaHdfZW5hYmxlZF9kYnVmX3NsaWNlcywNCj4gLQkJIGVu YWJsZWRfZGJ1Zl9zbGljZXMpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBnZW45X2Rpc2Fi bGVfZGNfc3RhdGVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlDQo+ICpkZXZfcHJpdikNCj4gLXsN Cj4gLQlzdHJ1Y3QgaW50ZWxfY2RjbGtfY29uZmlnIGNkY2xrX2NvbmZpZyA9IHt9Ow0KPiAtDQo+ IC0JaWYgKGRldl9wcml2LT5kbWMudGFyZ2V0X2RjX3N0YXRlID09IERDX1NUQVRFX0VOX0RDM0NP KSB7DQo+IC0JCXRnbF9kaXNhYmxlX2RjM2NvKGRldl9wcml2KTsNCj4gLQkJcmV0dXJuOw0KPiAt CX0NCj4gLQ0KPiAtCWdlbjlfc2V0X2RjX3N0YXRlKGRldl9wcml2LCBEQ19TVEFURV9ESVNBQkxF KTsNCj4gLQ0KPiAtCWlmICghSEFTX0RJU1BMQVkoZGV2X3ByaXYpKQ0KPiAtCQlyZXR1cm47DQo+ IC0NCj4gLQlpbnRlbF9jZGNsa19nZXRfY2RjbGsoZGV2X3ByaXYsICZjZGNsa19jb25maWcpOw0K PiAtCS8qIENhbid0IHJlYWQgb3V0IHZvbHRhZ2VfbGV2ZWwgc28gY2FuJ3QgdXNlDQo+IGludGVs X2NkY2xrX2NoYW5nZWQoKSAqLw0KPiAtCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLA0KPiAt CQkgICAgaW50ZWxfY2RjbGtfbmVlZHNfbW9kZXNldCgmZGV2X3ByaXYtPmNkY2xrLmh3LA0KPiAt CQkJCQkgICAgICAmY2RjbGtfY29uZmlnKSk7DQo+IC0NCj4gLQlnZW45X2Fzc2VydF9kYnVmX2Vu YWJsZWQoZGV2X3ByaXYpOw0KPiAtDQo+IC0JaWYgKElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpIHx8 IElTX0JST1hUT04oZGV2X3ByaXYpKQ0KPiAtCQlieHRfdmVyaWZ5X2RkaV9waHlfcG93ZXJfd2Vs bHMoZGV2X3ByaXYpOw0KPiAtDQo+IC0JaWYgKERJU1BMQVlfVkVSKGRldl9wcml2KSA+PSAxMSkN Cj4gLQkJLyoNCj4gLQkJICogRE1DIHJldGFpbnMgSFcgY29udGV4dCBvbmx5IGZvciBwb3J0IEEs IHRoZSBvdGhlcg0KPiBjb21ibw0KPiAtCQkgKiBQSFkncyBIVyBjb250ZXh0IGZvciBwb3J0IEIg aXMgbG9zdCBhZnRlciBEQw0KPiB0cmFuc2l0aW9ucywNCj4gLQkJICogc28gd2UgbmVlZCB0byBy ZXN0b3JlIGl0IG1hbnVhbGx5Lg0KPiAtCQkgKi8NCj4gLQkJaW50ZWxfY29tYm9fcGh5X2luaXQo ZGV2X3ByaXYpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBnZW45X2RjX29mZl9wb3dlcl93 ZWxsX2VuYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYsDQo+IC0JCQkJ CSAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbA0KPiAqcG93ZXJfd2VsbCkNCj4gLXsNCj4gLQlnZW45 X2Rpc2FibGVfZGNfc3RhdGVzKGRldl9wcml2KTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQg Z2VuOV9kY19vZmZfcG93ZXJfd2VsbF9kaXNhYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlDQo+ ICpkZXZfcHJpdiwNCj4gLQkJCQkJICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbA0KPiAqcG93ZXJf d2VsbCkNCj4gLXsNCj4gLQlpZiAoIWludGVsX2RtY19oYXNfcGF5bG9hZChkZXZfcHJpdikpDQo+ IC0JCXJldHVybjsNCj4gLQ0KPiAtCXN3aXRjaCAoZGV2X3ByaXYtPmRtYy50YXJnZXRfZGNfc3Rh dGUpIHsNCj4gLQljYXNlIERDX1NUQVRFX0VOX0RDM0NPOg0KPiAtCQl0Z2xfZW5hYmxlX2RjM2Nv KGRldl9wcml2KTsNCj4gLQkJYnJlYWs7DQo+IC0JY2FzZSBEQ19TVEFURV9FTl9VUFRPX0RDNjoN Cj4gLQkJc2tsX2VuYWJsZV9kYzYoZGV2X3ByaXYpOw0KPiAtCQlicmVhazsNCj4gLQljYXNlIERD X1NUQVRFX0VOX1VQVE9fREM1Og0KPiAtCQlnZW45X2VuYWJsZV9kYzUoZGV2X3ByaXYpOw0KPiAt CQlicmVhazsNCj4gLQl9DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIGk5eHhfcG93ZXJfd2Vs bF9zeW5jX2h3X25vb3Aoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gKmRldl9wcml2LA0KPiAt CQkJCQkgc3RydWN0IGk5MTVfcG93ZXJfd2VsbA0KPiAqcG93ZXJfd2VsbCkNCj4gLXsNCj4gLX0N Cj4gLQ0KPiAtc3RhdGljIHZvaWQgaTl4eF9hbHdheXNfb25fcG93ZXJfd2VsbF9ub29wKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlDQo+ICpkZXZfcHJpdiwNCj4gLQkJCQkJICAgc3RydWN0IGk5MTVf cG93ZXJfd2VsbA0KPiAqcG93ZXJfd2VsbCkNCj4gLXsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGJv b2wgaTl4eF9hbHdheXNfb25fcG93ZXJfd2VsbF9lbmFibGVkKHN0cnVjdA0KPiBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwNCj4gLQkJCQkJICAgICBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsDQo+ ICpwb3dlcl93ZWxsKQ0KPiAtew0KPiAtCXJldHVybiB0cnVlOw0KPiAtfQ0KPiAtDQo+IC1zdGF0 aWMgdm9pZCBpODMwX3BpcGVzX3Bvd2VyX3dlbGxfZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlDQo+ICpkZXZfcHJpdiwNCj4gLQkJCQkJIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwNCj4gKnBv d2VyX3dlbGwpDQo+IC17DQo+IC0JaWYgKChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQSVBFQ09O RihQSVBFX0EpKSAmDQo+IFBJUEVDT05GX0VOQUJMRSkgPT0gMCkNCj4gLQkJaTgzMF9lbmFibGVf cGlwZShkZXZfcHJpdiwgUElQRV9BKTsNCj4gLQlpZiAoKGludGVsX2RlX3JlYWQoZGV2X3ByaXYs IFBJUEVDT05GKFBJUEVfQikpICYNCj4gUElQRUNPTkZfRU5BQkxFKSA9PSAwKQ0KPiAtCQlpODMw X2VuYWJsZV9waXBlKGRldl9wcml2LCBQSVBFX0IpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9p ZCBpODMwX3BpcGVzX3Bvd2VyX3dlbGxfZGlzYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0K PiAqZGV2X3ByaXYsDQo+IC0JCQkJCSAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbA0KPiAqcG93ZXJf d2VsbCkNCj4gLXsNCj4gLQlpODMwX2Rpc2FibGVfcGlwZShkZXZfcHJpdiwgUElQRV9CKTsNCj4g LQlpODMwX2Rpc2FibGVfcGlwZShkZXZfcHJpdiwgUElQRV9BKTsNCj4gLX0NCj4gLQ0KPiAtc3Rh dGljIGJvb2wgaTgzMF9waXBlc19wb3dlcl93ZWxsX2VuYWJsZWQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUNCj4gKmRldl9wcml2LA0KPiAtCQkJCQkgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwNCj4g KnBvd2VyX3dlbGwpDQo+IC17DQo+IC0JcmV0dXJuIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBJ UEVDT05GKFBJUEVfQSkpICYNCj4gUElQRUNPTkZfRU5BQkxFICYmDQo+IC0JCWludGVsX2RlX3Jl YWQoZGV2X3ByaXYsIFBJUEVDT05GKFBJUEVfQikpICYNCj4gUElQRUNPTkZfRU5BQkxFOw0KPiAt fQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBpODMwX3BpcGVzX3Bvd2VyX3dlbGxfc3luY19odyhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYsDQo+IC0JCQkJCSAgc3RydWN0IGk5MTVf cG93ZXJfd2VsbA0KPiAqcG93ZXJfd2VsbCkNCj4gLXsNCj4gLQlpZiAoaW50ZWxfcG93ZXJfd2Vs bF9yZWZjb3VudChwb3dlcl93ZWxsKSA+IDApDQo+IC0JCWk4MzBfcGlwZXNfcG93ZXJfd2VsbF9l bmFibGUoZGV2X3ByaXYsIHBvd2VyX3dlbGwpOw0KPiAtCWVsc2UNCj4gLQkJaTgzMF9waXBlc19w b3dlcl93ZWxsX2Rpc2FibGUoZGV2X3ByaXYsIHBvd2VyX3dlbGwpOw0KPiAtfQ0KPiAtDQo+IC1z dGF0aWMgdm9pZCB2bHZfc2V0X3Bvd2VyX3dlbGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LA0KPiAtCQkJICAgICAgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGws IGJvb2wNCj4gZW5hYmxlKQ0KPiAtew0KPiAtCWludCBwd19pZHggPSBwb3dlcl93ZWxsLT5kZXNj LT52bHYuaWR4Ow0KPiAtCXUzMiBtYXNrOw0KPiAtCXUzMiBzdGF0ZTsNCj4gLQl1MzIgY3RybDsN Cj4gLQ0KPiAtCW1hc2sgPSBQVU5JVF9QV1JHVF9NQVNLKHB3X2lkeCk7DQo+IC0Jc3RhdGUgPSBl bmFibGUgPyBQVU5JVF9QV1JHVF9QV1JfT04ocHdfaWR4KSA6DQo+IC0JCQkgUFVOSVRfUFdSR1Rf UFdSX0dBVEUocHdfaWR4KTsNCj4gLQ0KPiAtCXZsdl9wdW5pdF9nZXQoZGV2X3ByaXYpOw0KPiAt DQo+IC0jZGVmaW5lIENPTkQgXA0KPiAtCSgodmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBVTklU X1JFR19QV1JHVF9TVEFUVVMpICYgbWFzaykgPT0NCj4gc3RhdGUpDQo+IC0NCj4gLQlpZiAoQ09O RCkNCj4gLQkJZ290byBvdXQ7DQo+IC0NCj4gLQljdHJsID0gdmx2X3B1bml0X3JlYWQoZGV2X3By aXYsIFBVTklUX1JFR19QV1JHVF9DVFJMKTsNCj4gLQljdHJsICY9IH5tYXNrOw0KPiAtCWN0cmwg fD0gc3RhdGU7DQo+IC0Jdmx2X3B1bml0X3dyaXRlKGRldl9wcml2LCBQVU5JVF9SRUdfUFdSR1Rf Q1RSTCwgY3RybCk7DQo+IC0NCj4gLQlpZiAod2FpdF9mb3IoQ09ORCwgMTAwKSkNCj4gLQkJZHJt X2VycigmZGV2X3ByaXYtPmRybSwNCj4gLQkJCSJ0aW1lb3V0IHNldHRpbmcgcG93ZXIgd2VsbCBz dGF0ZSAlMDh4DQo+ICglMDh4KVxuIiwNCj4gLQkJCXN0YXRlLA0KPiAtCQkJdmx2X3B1bml0X3Jl YWQoZGV2X3ByaXYsDQo+IFBVTklUX1JFR19QV1JHVF9DVFJMKSk7DQo+IC0NCj4gLSN1bmRlZiBD T05EDQo+IC0NCj4gLW91dDoNCj4gLQl2bHZfcHVuaXRfcHV0KGRldl9wcml2KTsNCj4gLX0NCj4g LQ0KPiAtc3RhdGljIHZvaWQgdmx2X3Bvd2VyX3dlbGxfZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwNCj4gLQkJCQkgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2Vy X3dlbGwpDQo+IC17DQo+IC0Jdmx2X3NldF9wb3dlcl93ZWxsKGRldl9wcml2LCBwb3dlcl93ZWxs LCB0cnVlKTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgdmx2X3Bvd2VyX3dlbGxfZGlzYWJs ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYsDQo+IC0JCQkJICAgc3RydWN0 IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbCkNCj4gLXsNCj4gLQl2bHZfc2V0X3Bvd2VyX3dl bGwoZGV2X3ByaXYsIHBvd2VyX3dlbGwsIGZhbHNlKTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGJv b2wgdmx2X3Bvd2VyX3dlbGxfZW5hYmxlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2 X3ByaXYsDQo+IC0JCQkJICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbCkNCj4g LXsNCj4gLQlpbnQgcHdfaWR4ID0gcG93ZXJfd2VsbC0+ZGVzYy0+dmx2LmlkeDsNCj4gLQlib29s IGVuYWJsZWQgPSBmYWxzZTsNCj4gLQl1MzIgbWFzazsNCj4gLQl1MzIgc3RhdGU7DQo+IC0JdTMy IGN0cmw7DQo+IC0NCj4gLQltYXNrID0gUFVOSVRfUFdSR1RfTUFTSyhwd19pZHgpOw0KPiAtCWN0 cmwgPSBQVU5JVF9QV1JHVF9QV1JfT04ocHdfaWR4KTsNCj4gLQ0KPiAtCXZsdl9wdW5pdF9nZXQo ZGV2X3ByaXYpOw0KPiAtDQo+IC0Jc3RhdGUgPSB2bHZfcHVuaXRfcmVhZChkZXZfcHJpdiwgUFVO SVRfUkVHX1BXUkdUX1NUQVRVUykgJg0KPiBtYXNrOw0KPiAtCS8qDQo+IC0JICogV2Ugb25seSBl dmVyIHNldCB0aGUgcG93ZXItb24gYW5kIHBvd2VyLWdhdGUgc3RhdGVzLA0KPiBhbnl0aGluZw0K PiAtCSAqIGVsc2UgaXMgdW5leHBlY3RlZC4NCj4gLQkgKi8NCj4gLQlkcm1fV0FSTl9PTigmZGV2 X3ByaXYtPmRybSwgc3RhdGUgIT0gUFVOSVRfUFdSR1RfUFdSX09OKHB3X2lkeCkNCj4gJiYNCj4g LQkJICAgIHN0YXRlICE9IFBVTklUX1BXUkdUX1BXUl9HQVRFKHB3X2lkeCkpOw0KPiAtCWlmIChz dGF0ZSA9PSBjdHJsKQ0KPiAtCQllbmFibGVkID0gdHJ1ZTsNCj4gLQ0KPiAtCS8qDQo+IC0JICog QSB0cmFuc2llbnQgc3RhdGUgYXQgdGhpcyBwb2ludCB3b3VsZCBtZWFuIHNvbWUgdW5leHBlY3Rl ZA0KPiBwYXJ0eQ0KPiAtCSAqIGlzIHBva2luZyBhdCB0aGUgcG93ZXIgY29udHJvbHMgdG9vLg0K PiAtCSAqLw0KPiAtCWN0cmwgPSB2bHZfcHVuaXRfcmVhZChkZXZfcHJpdiwgUFVOSVRfUkVHX1BX UkdUX0NUUkwpICYgbWFzazsNCj4gLQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgY3RybCAh PSBzdGF0ZSk7DQo+IC0NCj4gLQl2bHZfcHVuaXRfcHV0KGRldl9wcml2KTsNCj4gLQ0KPiAtCXJl dHVybiBlbmFibGVkOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCB2bHZfaW5pdF9kaXNwbGF5 X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYpDQo+IC17 DQo+IC0JdTMyIHZhbDsNCj4gLQ0KPiAtCS8qDQo+IC0JICogT24gZHJpdmVyIGxvYWQsIGEgcGlw ZSBtYXkgYmUgYWN0aXZlIGFuZCBkcml2aW5nIGEgRFNJDQo+IGRpc3BsYXkuDQo+IC0JICogUHJl c2VydmUgRFBPVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgdG8gYXZvaWQgdGhlIHBpcGUNCj4gZ2V0 dGluZyBzdHVjaw0KPiAtCSAqIChhbmQgbmV2ZXIgcmVjb3ZlcmluZykgaW4gdGhpcyBjYXNlLg0K PiBpbnRlbF9kc2lfcG9zdF9kaXNhYmxlKCkgd2lsbA0KPiAtCSAqIGNsZWFyIGl0IHdoZW4gd2Ug dHVybiBvZmYgdGhlIGRpc3BsYXkuDQo+IC0JICovDQo+IC0JdmFsID0gaW50ZWxfZGVfcmVhZChk ZXZfcHJpdiwgRFNQQ0xLX0dBVEVfRCk7DQo+IC0JdmFsICY9IERQT1VOSVRfQ0xPQ0tfR0FURV9E SVNBQkxFOw0KPiAtCXZhbCB8PSBWUkhVTklUX0NMT0NLX0dBVEVfRElTQUJMRTsNCj4gLQlpbnRl bF9kZV93cml0ZShkZXZfcHJpdiwgRFNQQ0xLX0dBVEVfRCwgdmFsKTsNCj4gLQ0KPiAtCS8qDQo+ IC0JICogRGlzYWJsZSB0cmlja2xlIGZlZWQgYW5kIGVuYWJsZSBwbmQgZGVhZGxpbmUgY2FsY3Vs YXRpb24NCj4gLQkgKi8NCj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgTUlfQVJCX1ZMViwN Cj4gLQkJICAgICAgIE1JX0FSQl9ESVNQTEFZX1RSSUNLTEVfRkVFRF9ESVNBQkxFKTsNCj4gLQlp bnRlbF9kZV93cml0ZShkZXZfcHJpdiwgQ0JSMV9WTFYsIDApOw0KPiAtDQo+IC0JZHJtX1dBUk5f T04oJmRldl9wcml2LT5kcm0sIFJVTlRJTUVfSU5GTyhkZXZfcHJpdiktPnJhd2Nsa19mcmVxIA0K PiA9PSAwKTsNCj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgUkFXQ0xLX0ZSRVFfVkxWLA0K PiAtCQkgICAgICAgRElWX1JPVU5EX0NMT1NFU1QoUlVOVElNRV9JTkZPKGRldl9wcml2KS0NCj4g PnJhd2Nsa19mcmVxLA0KPiAtCQkJCQkgMTAwMCkpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9p ZCB2bHZfZGlzcGxheV9wb3dlcl93ZWxsX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4g KmRldl9wcml2KQ0KPiAtew0KPiAtCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOw0KPiAt CWVudW0gcGlwZSBwaXBlOw0KPiAtDQo+IC0JLyoNCj4gLQkgKiBFbmFibGUgdGhlIENSSSBjbG9j ayBzb3VyY2Ugc28gd2UgY2FuIGdldCBhdCB0aGUNCj4gLQkgKiBkaXNwbGF5IGFuZCB0aGUgcmVm ZXJlbmNlIGNsb2NrIGZvciBWR0ENCj4gLQkgKiBob3RwbHVnIC8gbWFudWFsIGRldGVjdGlvbi4g U3VwcG9zZWRseSBEU0kgYWxzbw0KPiAtCSAqIG5lZWRzIHRoZSByZWYgY2xvY2sgdXAgYW5kIHJ1 bm5pbmcuDQo+IC0JICoNCj4gLQkgKiBDSFYgRFBMTCBCL0MgaGF2ZSBzb21lIGlzc3VlcyBpZiBW R0EgbW9kZSBpcyBlbmFibGVkLg0KPiAtCSAqLw0KPiAtCWZvcl9lYWNoX3BpcGUoZGV2X3ByaXYs IHBpcGUpIHsNCj4gLQkJdTMyIHZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIERQTEwocGlw ZSkpOw0KPiAtDQo+IC0JCXZhbCB8PSBEUExMX1JFRl9DTEtfRU5BQkxFX1ZMViB8IERQTExfVkdB X01PREVfRElTOw0KPiAtCQlpZiAocGlwZSAhPSBQSVBFX0EpDQo+IC0JCQl2YWwgfD0gRFBMTF9J TlRFR1JBVEVEX0NSSV9DTEtfVkxWOw0KPiAtDQo+IC0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2 LCBEUExMKHBpcGUpLCB2YWwpOw0KPiAtCX0NCj4gLQ0KPiAtCXZsdl9pbml0X2Rpc3BsYXlfY2xv Y2tfZ2F0aW5nKGRldl9wcml2KTsNCj4gLQ0KPiAtCXNwaW5fbG9ja19pcnEoJmRldl9wcml2LT5p cnFfbG9jayk7DQo+IC0JdmFsbGV5dmlld19lbmFibGVfZGlzcGxheV9pcnFzKGRldl9wcml2KTsN Cj4gLQlzcGluX3VubG9ja19pcnEoJmRldl9wcml2LT5pcnFfbG9jayk7DQo+IC0NCj4gLQkvKg0K PiAtCSAqIER1cmluZyBkcml2ZXIgaW5pdGlhbGl6YXRpb24vcmVzdW1lIHdlIGNhbiBhdm9pZCBy ZXN0b3JpbmcNCj4gdGhlDQo+IC0JICogcGFydCBvZiB0aGUgSFcvU1cgc3RhdGUgdGhhdCB3aWxs IGJlIGluaXRlZCBhbnl3YXkNCj4gZXhwbGljaXRseS4NCj4gLQkgKi8NCj4gLQlpZiAoZGV2X3By aXYtPnBvd2VyX2RvbWFpbnMuaW5pdGlhbGl6aW5nKQ0KPiAtCQlyZXR1cm47DQo+IC0NCj4gLQlp bnRlbF9ocGRfaW5pdChkZXZfcHJpdik7DQo+IC0JaW50ZWxfaHBkX3BvbGxfZGlzYWJsZShkZXZf cHJpdik7DQo+IC0NCj4gLQkvKiBSZS1lbmFibGUgdGhlIEFEUEEsIGlmIHdlIGhhdmUgb25lICov DQo+IC0JZm9yX2VhY2hfaW50ZWxfZW5jb2RlcigmZGV2X3ByaXYtPmRybSwgZW5jb2Rlcikgew0K PiAtCQlpZiAoZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQVVRfQU5BTE9HKQ0KPiAtCQkJaW50 ZWxfY3J0X3Jlc2V0KCZlbmNvZGVyLT5iYXNlKTsNCj4gLQl9DQo+IC0NCj4gLQlpbnRlbF92Z2Ff cmVkaXNhYmxlX3Bvd2VyX29uKGRldl9wcml2KTsNCj4gLQ0KPiAtCWludGVsX3Bwc191bmxvY2tf cmVnc193YShkZXZfcHJpdik7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIHZsdl9kaXNwbGF5 X3Bvd2VyX3dlbGxfZGVpbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlDQo+ICpkZXZfcHJpdikN Cj4gLXsNCj4gLQlzcGluX2xvY2tfaXJxKCZkZXZfcHJpdi0+aXJxX2xvY2spOw0KPiAtCXZhbGxl eXZpZXdfZGlzYWJsZV9kaXNwbGF5X2lycXMoZGV2X3ByaXYpOw0KPiAtCXNwaW5fdW5sb2NrX2ly cSgmZGV2X3ByaXYtPmlycV9sb2NrKTsNCj4gLQ0KPiAtCS8qIG1ha2Ugc3VyZSB3ZSdyZSBkb25l IHByb2Nlc3NpbmcgZGlzcGxheSBpcnFzICovDQo+IC0JaW50ZWxfc3luY2hyb25pemVfaXJxKGRl dl9wcml2KTsNCj4gLQ0KPiAtCWludGVsX3Bwc19yZXNldF9hbGwoZGV2X3ByaXYpOw0KPiAtDQo+ IC0JLyogUHJldmVudCB1cyBmcm9tIHJlLWVuYWJsaW5nIHBvbGxpbmcgb24gYWNjaWRlbnQgaW4g bGF0ZQ0KPiBzdXNwZW5kICovDQo+IC0JaWYgKCFkZXZfcHJpdi0+ZHJtLmRldi0+cG93ZXIuaXNf c3VzcGVuZGVkKQ0KPiAtCQlpbnRlbF9ocGRfcG9sbF9lbmFibGUoZGV2X3ByaXYpOw0KPiAtfQ0K PiAtDQo+IC1zdGF0aWMgdm9pZCB2bHZfZGlzcGxheV9wb3dlcl93ZWxsX2VuYWJsZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYsDQo+IC0JCQkJCSAgc3RydWN0IGk5MTVfcG93 ZXJfd2VsbA0KPiAqcG93ZXJfd2VsbCkNCj4gLXsNCj4gLQl2bHZfc2V0X3Bvd2VyX3dlbGwoZGV2 X3ByaXYsIHBvd2VyX3dlbGwsIHRydWUpOw0KPiAtDQo+IC0Jdmx2X2Rpc3BsYXlfcG93ZXJfd2Vs bF9pbml0KGRldl9wcml2KTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgdmx2X2Rpc3BsYXlf cG93ZXJfd2VsbF9kaXNhYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlDQo+ICpkZXZfcHJpdiwN Cj4gLQkJCQkJICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbA0KPiAqcG93ZXJfd2VsbCkNCj4gLXsN Cj4gLQl2bHZfZGlzcGxheV9wb3dlcl93ZWxsX2RlaW5pdChkZXZfcHJpdik7DQo+IC0NCj4gLQl2 bHZfc2V0X3Bvd2VyX3dlbGwoZGV2X3ByaXYsIHBvd2VyX3dlbGwsIGZhbHNlKTsNCj4gLX0NCj4g LQ0KPiAtc3RhdGljIHZvaWQgdmx2X2RwaW9fY21uX3Bvd2VyX3dlbGxfZW5hYmxlKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlDQo+ICpkZXZfcHJpdiwNCj4gLQkJCQkJICAgc3RydWN0IGk5MTVfcG93 ZXJfd2VsbA0KPiAqcG93ZXJfd2VsbCkNCj4gLXsNCj4gLQkvKiBzaW5jZSByZWYvY3JpIGNsb2Nr IHdhcyBlbmFibGVkICovDQo+IC0JdWRlbGF5KDEpOyAvKiA+MTBucyBmb3IgY21ucmVzZXQsID4w bnMgZm9yIHNpZGVyZXNldCAqLw0KPiAtDQo+IC0Jdmx2X3NldF9wb3dlcl93ZWxsKGRldl9wcml2 LCBwb3dlcl93ZWxsLCB0cnVlKTsNCj4gLQ0KPiAtCS8qDQo+IC0JICogRnJvbSBWTFYyQTBfRFBf ZURQX0RQSU9fZHJpdmVyX3ZiaW9zX25vdGVzXzEwLmRvY3ggLQ0KPiAtCSAqICA2LglEZS1hc3Nl cnQgY21uX3Jlc2V0L3NpZGVfcmVzZXQuIFNhbWUgYXMgVkxWIFgwLg0KPiAtCSAqICAgYS4JR1Vu aXQgMHgyMTEwIGJpdFswXSBzZXQgdG8gMSAoZGVmIDApDQo+IC0JICogICBiLglUaGUgb3RoZXIg Yml0cyBzdWNoIGFzIHNmciBzZXR0aW5ncyAvIG1vZGVzZWwgbWF5IGFsbA0KPiAtCSAqCWJlIHNl dCB0byAwLg0KPiAtCSAqDQo+IC0JICogVGhpcyBzaG91bGQgb25seSBiZSBkb25lIG9uIGluaXQg YW5kIHJlc3VtZSBmcm9tIFMzIHdpdGgNCj4gLQkgKiBib3RoIFBMTHMgZGlzYWJsZWQsIG9yIHdl IHJpc2sgbG9zaW5nIERQSU8gYW5kIFBMTA0KPiAtCSAqIHN5bmNocm9uaXphdGlvbi4NCj4gLQkg Ki8NCj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRFBJT19DVEwsDQo+IC0JCSAgICAgICBp bnRlbF9kZV9yZWFkKGRldl9wcml2LCBEUElPX0NUTCkgfA0KPiBEUElPX0NNTlJTVCk7DQo+IC19 DQo+IC0NCj4gLXN0YXRpYyB2b2lkIHZsdl9kcGlvX2Ntbl9wb3dlcl93ZWxsX2Rpc2FibGUoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gKmRldl9wcml2LA0KPiAtCQkJCQkgICAgc3RydWN0IGk5 MTVfcG93ZXJfd2VsbA0KPiAqcG93ZXJfd2VsbCkNCj4gLXsNCj4gLQllbnVtIHBpcGUgcGlwZTsN Cj4gLQ0KPiAtCWZvcl9lYWNoX3BpcGUoZGV2X3ByaXYsIHBpcGUpDQo+IC0JCWFzc2VydF9wbGxf ZGlzYWJsZWQoZGV2X3ByaXYsIHBpcGUpOw0KPiAtDQo+IC0JLyogQXNzZXJ0IGNvbW1vbiByZXNl dCAqLw0KPiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBEUElPX0NUTCwNCj4gLQkJICAgICAg IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIERQSU9fQ1RMKSAmDQo+IH5EUElPX0NNTlJTVCk7DQo+ IC0NCj4gLQl2bHZfc2V0X3Bvd2VyX3dlbGwoZGV2X3ByaXYsIHBvd2VyX3dlbGwsIGZhbHNlKTsN Cj4gLX0NCj4gLQ0KPiAgI2RlZmluZSBQT1dFUl9ET01BSU5fTUFTSyAoR0VOTUFTS19VTEwoUE9X RVJfRE9NQUlOX05VTSAtIDEsIDApKQ0KPiAgDQo+IC0jZGVmaW5lIEJJVFNfU0VUKHZhbCwgYml0 cykgKCgodmFsKSAmIChiaXRzKSkgPT0gKGJpdHMpKQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBhc3Nl cnRfY2h2X3BoeV9zdGF0dXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQ0KPiAt ew0KPiAtCXN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKmNtbl9iYyA9DQo+IC0JCWxvb2t1cF9wb3dl cl93ZWxsKGRldl9wcml2LCBWTFZfRElTUF9QV19EUElPX0NNTl9CQyk7DQo+IC0Jc3RydWN0IGk5 MTVfcG93ZXJfd2VsbCAqY21uX2QgPQ0KPiAtCQlsb29rdXBfcG93ZXJfd2VsbChkZXZfcHJpdiwg Q0hWX0RJU1BfUFdfRFBJT19DTU5fRCk7DQo+IC0JdTMyIHBoeV9jb250cm9sID0gZGV2X3ByaXYt PmNodl9waHlfY29udHJvbDsNCj4gLQl1MzIgcGh5X3N0YXR1cyA9IDA7DQo+IC0JdTMyIHBoeV9z dGF0dXNfbWFzayA9IDB4ZmZmZmZmZmY7DQo+IC0NCj4gLQkvKg0KPiAtCSAqIFRoZSBCSU9TIGNh biBsZWF2ZSB0aGUgUEhZIGlzIHNvbWUgd2VpcmQgc3RhdGUNCj4gLQkgKiB3aGVyZSBpdCBkb2Vz bid0IGZ1bGx5IHBvd2VyIGRvd24gc29tZSBwYXJ0cy4NCj4gLQkgKiBEaXNhYmxlIHRoZSBhc3Nl cnRzIHVudGlsIHRoZSBQSFkgaGFzIGJlZW4gZnVsbHkNCj4gLQkgKiByZXNldCAoaWUuIHRoZSBw b3dlciB3ZWxsIGhhcyBiZWVuIGRpc2FibGVkIGF0DQo+IC0JICogbGVhc3Qgb25jZSkuDQo+IC0J ICovDQo+IC0JaWYgKCFkZXZfcHJpdi0+Y2h2X3BoeV9hc3NlcnRbRFBJT19QSFkwXSkNCj4gLQkJ cGh5X3N0YXR1c19tYXNrICY9IH4oUEhZX1NUQVRVU19DTU5fTERPKERQSU9fUEhZMCwNCj4gRFBJ T19DSDApIHwNCj4gLQkJCQkgICAgIFBIWV9TVEFUVVNfU1BMSU5FX0xETyhEUElPX1BIWTAsDQo+ IERQSU9fQ0gwLCAwKSB8DQo+IC0JCQkJICAgICBQSFlfU1RBVFVTX1NQTElORV9MRE8oRFBJT19Q SFkwLA0KPiBEUElPX0NIMCwgMSkgfA0KPiAtCQkJCSAgICAgUEhZX1NUQVRVU19DTU5fTERPKERQ SU9fUEhZMCwNCj4gRFBJT19DSDEpIHwNCj4gLQkJCQkgICAgIFBIWV9TVEFUVVNfU1BMSU5FX0xE TyhEUElPX1BIWTAsDQo+IERQSU9fQ0gxLCAwKSB8DQo+IC0JCQkJICAgICBQSFlfU1RBVFVTX1NQ TElORV9MRE8oRFBJT19QSFkwLA0KPiBEUElPX0NIMSwgMSkpOw0KPiAtDQo+IC0JaWYgKCFkZXZf cHJpdi0+Y2h2X3BoeV9hc3NlcnRbRFBJT19QSFkxXSkNCj4gLQkJcGh5X3N0YXR1c19tYXNrICY9 IH4oUEhZX1NUQVRVU19DTU5fTERPKERQSU9fUEhZMSwNCj4gRFBJT19DSDApIHwNCj4gLQkJCQkg ICAgIFBIWV9TVEFUVVNfU1BMSU5FX0xETyhEUElPX1BIWTEsDQo+IERQSU9fQ0gwLCAwKSB8DQo+ IC0JCQkJICAgICBQSFlfU1RBVFVTX1NQTElORV9MRE8oRFBJT19QSFkxLA0KPiBEUElPX0NIMCwg MSkpOw0KPiAtDQo+IC0JaWYgKGludGVsX3Bvd2VyX3dlbGxfaXNfZW5hYmxlZChkZXZfcHJpdiwg Y21uX2JjKSkgew0KPiAtCQlwaHlfc3RhdHVzIHw9IFBIWV9QT1dFUkdPT0QoRFBJT19QSFkwKTsN Cj4gLQ0KPiAtCQkvKiB0aGlzIGFzc3VtZXMgb3ZlcnJpZGUgaXMgb25seSB1c2VkIHRvIGVuYWJs ZSBsYW5lcw0KPiAqLw0KPiAtCQlpZiAoKHBoeV9jb250cm9sICYgUEhZX0NIX1BPV0VSX0RPV05f T1ZSRF9FTihEUElPX1BIWTAsDQo+IERQSU9fQ0gwKSkgPT0gMCkNCj4gLQkJCXBoeV9jb250cm9s IHw9IFBIWV9DSF9QT1dFUl9ET1dOX09WUkQoMHhmLA0KPiBEUElPX1BIWTAsIERQSU9fQ0gwKTsN Cj4gLQ0KPiAtCQlpZiAoKHBoeV9jb250cm9sICYgUEhZX0NIX1BPV0VSX0RPV05fT1ZSRF9FTihE UElPX1BIWTAsDQo+IERQSU9fQ0gxKSkgPT0gMCkNCj4gLQkJCXBoeV9jb250cm9sIHw9IFBIWV9D SF9QT1dFUl9ET1dOX09WUkQoMHhmLA0KPiBEUElPX1BIWTAsIERQSU9fQ0gxKTsNCj4gLQ0KPiAt CQkvKiBDTDEgaXMgb24gd2hlbmV2ZXIgYW55dGhpbmcgaXMgb24gaW4gZWl0aGVyIGNoYW5uZWwN Cj4gKi8NCj4gLQkJaWYgKEJJVFNfU0VUKHBoeV9jb250cm9sLA0KPiAtCQkJICAgICBQSFlfQ0hf UE9XRVJfRE9XTl9PVlJEKDB4ZiwgRFBJT19QSFkwLA0KPiBEUElPX0NIMCkgfA0KPiAtCQkJICAg ICBQSFlfQ0hfUE9XRVJfRE9XTl9PVlJEKDB4ZiwgRFBJT19QSFkwLA0KPiBEUElPX0NIMSkpKQ0K PiAtCQkJcGh5X3N0YXR1cyB8PSBQSFlfU1RBVFVTX0NNTl9MRE8oRFBJT19QSFkwLA0KPiBEUElP X0NIMCk7DQo+IC0NCj4gLQkJLyoNCj4gLQkJICogVGhlIERQTExCIGNoZWNrIGFjY291bnRzIGZv ciB0aGUgcGlwZSBCICsgcG9ydCBBDQo+IHVzYWdlDQo+IC0JCSAqIHdpdGggQ0wyIHBvd2VyZWQg dXAgYnV0IGFsbCB0aGUgbGFuZXMgaW4gdGhlIHNlY29uZA0KPiBjaGFubmVsDQo+IC0JCSAqIHBv d2VyZWQgZG93bi4NCj4gLQkJICovDQo+IC0JCWlmIChCSVRTX1NFVChwaHlfY29udHJvbCwNCj4g LQkJCSAgICAgUEhZX0NIX1BPV0VSX0RPV05fT1ZSRCgweGYsIERQSU9fUEhZMCwNCj4gRFBJT19D SDEpKSAmJg0KPiAtCQkgICAgKGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIERQTEwoUElQRV9CKSkg Jg0KPiBEUExMX1ZDT19FTkFCTEUpID09IDApDQo+IC0JCQlwaHlfc3RhdHVzIHw9IFBIWV9TVEFU VVNfQ01OX0xETyhEUElPX1BIWTAsDQo+IERQSU9fQ0gxKTsNCj4gLQ0KPiAtCQlpZiAoQklUU19T RVQocGh5X2NvbnRyb2wsDQo+IC0JCQkgICAgIFBIWV9DSF9QT1dFUl9ET1dOX09WUkQoMHgzLCBE UElPX1BIWTAsDQo+IERQSU9fQ0gwKSkpDQo+IC0JCQlwaHlfc3RhdHVzIHw9IFBIWV9TVEFUVVNf U1BMSU5FX0xETyhEUElPX1BIWTAsDQo+IERQSU9fQ0gwLCAwKTsNCj4gLQkJaWYgKEJJVFNfU0VU KHBoeV9jb250cm9sLA0KPiAtCQkJICAgICBQSFlfQ0hfUE9XRVJfRE9XTl9PVlJEKDB4YywgRFBJ T19QSFkwLA0KPiBEUElPX0NIMCkpKQ0KPiAtCQkJcGh5X3N0YXR1cyB8PSBQSFlfU1RBVFVTX1NQ TElORV9MRE8oRFBJT19QSFkwLA0KPiBEUElPX0NIMCwgMSk7DQo+IC0NCj4gLQkJaWYgKEJJVFNf U0VUKHBoeV9jb250cm9sLA0KPiAtCQkJICAgICBQSFlfQ0hfUE9XRVJfRE9XTl9PVlJEKDB4Mywg RFBJT19QSFkwLA0KPiBEUElPX0NIMSkpKQ0KPiAtCQkJcGh5X3N0YXR1cyB8PSBQSFlfU1RBVFVT X1NQTElORV9MRE8oRFBJT19QSFkwLA0KPiBEUElPX0NIMSwgMCk7DQo+IC0JCWlmIChCSVRTX1NF VChwaHlfY29udHJvbCwNCj4gLQkJCSAgICAgUEhZX0NIX1BPV0VSX0RPV05fT1ZSRCgweGMsIERQ SU9fUEhZMCwNCj4gRFBJT19DSDEpKSkNCj4gLQkJCXBoeV9zdGF0dXMgfD0gUEhZX1NUQVRVU19T UExJTkVfTERPKERQSU9fUEhZMCwNCj4gRFBJT19DSDEsIDEpOw0KPiAtCX0NCj4gLQ0KPiAtCWlm IChpbnRlbF9wb3dlcl93ZWxsX2lzX2VuYWJsZWQoZGV2X3ByaXYsIGNtbl9kKSkgew0KPiAtCQlw aHlfc3RhdHVzIHw9IFBIWV9QT1dFUkdPT0QoRFBJT19QSFkxKTsNCj4gLQ0KPiAtCQkvKiB0aGlz IGFzc3VtZXMgb3ZlcnJpZGUgaXMgb25seSB1c2VkIHRvIGVuYWJsZSBsYW5lcw0KPiAqLw0KPiAt CQlpZiAoKHBoeV9jb250cm9sICYgUEhZX0NIX1BPV0VSX0RPV05fT1ZSRF9FTihEUElPX1BIWTEs DQo+IERQSU9fQ0gwKSkgPT0gMCkNCj4gLQkJCXBoeV9jb250cm9sIHw9IFBIWV9DSF9QT1dFUl9E T1dOX09WUkQoMHhmLA0KPiBEUElPX1BIWTEsIERQSU9fQ0gwKTsNCj4gLQ0KPiAtCQlpZiAoQklU U19TRVQocGh5X2NvbnRyb2wsDQo+IC0JCQkgICAgIFBIWV9DSF9QT1dFUl9ET1dOX09WUkQoMHhm LCBEUElPX1BIWTEsDQo+IERQSU9fQ0gwKSkpDQo+IC0JCQlwaHlfc3RhdHVzIHw9IFBIWV9TVEFU VVNfQ01OX0xETyhEUElPX1BIWTEsDQo+IERQSU9fQ0gwKTsNCj4gLQ0KPiAtCQlpZiAoQklUU19T RVQocGh5X2NvbnRyb2wsDQo+IC0JCQkgICAgIFBIWV9DSF9QT1dFUl9ET1dOX09WUkQoMHgzLCBE UElPX1BIWTEsDQo+IERQSU9fQ0gwKSkpDQo+IC0JCQlwaHlfc3RhdHVzIHw9IFBIWV9TVEFUVVNf U1BMSU5FX0xETyhEUElPX1BIWTEsDQo+IERQSU9fQ0gwLCAwKTsNCj4gLQkJaWYgKEJJVFNfU0VU KHBoeV9jb250cm9sLA0KPiAtCQkJICAgICBQSFlfQ0hfUE9XRVJfRE9XTl9PVlJEKDB4YywgRFBJ T19QSFkxLA0KPiBEUElPX0NIMCkpKQ0KPiAtCQkJcGh5X3N0YXR1cyB8PSBQSFlfU1RBVFVTX1NQ TElORV9MRE8oRFBJT19QSFkxLA0KPiBEUElPX0NIMCwgMSk7DQo+IC0JfQ0KPiAtDQo+IC0JcGh5 X3N0YXR1cyAmPSBwaHlfc3RhdHVzX21hc2s7DQo+IC0NCj4gLQkvKg0KPiAtCSAqIFRoZSBQSFkg bWF5IGJlIGJ1c3kgd2l0aCBzb21lIGluaXRpYWwgY2FsaWJyYXRpb24gYW5kDQo+IHdoYXRub3Qs DQo+IC0JICogc28gdGhlIHBvd2VyIHN0YXRlIGNhbiB0YWtlIGEgd2hpbGUgdG8gYWN0dWFsbHkg Y2hhbmdlLg0KPiAtCSAqLw0KPiAtCWlmIChpbnRlbF9kZV93YWl0X2Zvcl9yZWdpc3RlcihkZXZf cHJpdiwgRElTUExBWV9QSFlfU1RBVFVTLA0KPiAtCQkJCSAgICAgICBwaHlfc3RhdHVzX21hc2ss IHBoeV9zdGF0dXMsDQo+IDEwKSkNCj4gLQkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwNCj4gLQkJ CSJVbmV4cGVjdGVkIFBIWV9TVEFUVVMgMHglMDh4LCBleHBlY3RlZCAweCUwOHgNCj4gKFBIWV9D T05UUk9MPTB4JTA4eClcbiIsDQo+IC0JCQlpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBESVNQTEFZ X1BIWV9TVEFUVVMpICYNCj4gcGh5X3N0YXR1c19tYXNrLA0KPiAtCQkJcGh5X3N0YXR1cywgZGV2 X3ByaXYtPmNodl9waHlfY29udHJvbCk7DQo+IC19DQo+IC0NCj4gLSN1bmRlZiBCSVRTX1NFVA0K PiAtDQo+IC1zdGF0aWMgdm9pZCBjaHZfZHBpb19jbW5fcG93ZXJfd2VsbF9lbmFibGUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUNCj4gKmRldl9wcml2LA0KPiAtCQkJCQkgICBzdHJ1Y3QgaTkxNV9w b3dlcl93ZWxsDQo+ICpwb3dlcl93ZWxsKQ0KPiAtew0KPiAtCWVudW0gZHBpb19waHkgcGh5Ow0K PiAtCWVudW0gcGlwZSBwaXBlOw0KPiAtCXUzMiB0bXA7DQo+IC0NCj4gLQlkcm1fV0FSTl9PTl9P TkNFKCZkZXZfcHJpdi0+ZHJtLA0KPiAtCQkJIHBvd2VyX3dlbGwtPmRlc2MtPmlkICE9DQo+IFZM Vl9ESVNQX1BXX0RQSU9fQ01OX0JDICYmDQo+IC0JCQkgcG93ZXJfd2VsbC0+ZGVzYy0+aWQgIT0N Cj4gQ0hWX0RJU1BfUFdfRFBJT19DTU5fRCk7DQo+IC0NCj4gLQlpZiAocG93ZXJfd2VsbC0+ZGVz Yy0+aWQgPT0gVkxWX0RJU1BfUFdfRFBJT19DTU5fQkMpIHsNCj4gLQkJcGlwZSA9IFBJUEVfQTsN Cj4gLQkJcGh5ID0gRFBJT19QSFkwOw0KPiAtCX0gZWxzZSB7DQo+IC0JCXBpcGUgPSBQSVBFX0M7 DQo+IC0JCXBoeSA9IERQSU9fUEhZMTsNCj4gLQl9DQo+IC0NCj4gLQkvKiBzaW5jZSByZWYvY3Jp IGNsb2NrIHdhcyBlbmFibGVkICovDQo+IC0JdWRlbGF5KDEpOyAvKiA+MTBucyBmb3IgY21ucmVz ZXQsID4wbnMgZm9yIHNpZGVyZXNldCAqLw0KPiAtCXZsdl9zZXRfcG93ZXJfd2VsbChkZXZfcHJp diwgcG93ZXJfd2VsbCwgdHJ1ZSk7DQo+IC0NCj4gLQkvKiBQb2xsIGZvciBwaHlwd3Jnb29kIHNp Z25hbCAqLw0KPiAtCWlmIChpbnRlbF9kZV93YWl0X2Zvcl9zZXQoZGV2X3ByaXYsIERJU1BMQVlf UEhZX1NUQVRVUywNCj4gLQkJCQkgIFBIWV9QT1dFUkdPT0QocGh5KSwgMSkpDQo+IC0JCWRybV9l cnIoJmRldl9wcml2LT5kcm0sICJEaXNwbGF5IFBIWSAlZCBpcyBub3QgcG93ZXINCj4gdXBcbiIs DQo+IC0JCQlwaHkpOw0KPiAtDQo+IC0Jdmx2X2RwaW9fZ2V0KGRldl9wcml2KTsNCj4gLQ0KPiAt CS8qIEVuYWJsZSBkeW5hbWljIHBvd2VyIGRvd24gKi8NCj4gLQl0bXAgPSB2bHZfZHBpb19yZWFk KGRldl9wcml2LCBwaXBlLCBDSFZfQ01OX0RXMjgpOw0KPiAtCXRtcCB8PSBEUElPX0RZTlBXUkRP V05FTl9DSDAgfCBEUElPX0NMMVBPV0VSRE9XTkVOIHwNCj4gLQkJRFBJT19TVVNfQ0xLX0NPTkZJ R19HQVRFX0NMS1JFUTsNCj4gLQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgQ0hWX0NN Tl9EVzI4LCB0bXApOw0KPiAtDQo+IC0JaWYgKHBvd2VyX3dlbGwtPmRlc2MtPmlkID09IFZMVl9E SVNQX1BXX0RQSU9fQ01OX0JDKSB7DQo+IC0JCXRtcCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYs IHBpcGUsIF9DSFZfQ01OX0RXNl9DSDEpOw0KPiAtCQl0bXAgfD0gRFBJT19EWU5QV1JET1dORU5f Q0gxOw0KPiAtCQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgX0NIVl9DTU5fRFc2X0NI MSwgdG1wKTsNCj4gLQl9IGVsc2Ugew0KPiAtCQkvKg0KPiAtCQkgKiBGb3JjZSB0aGUgbm9uLWV4 aXN0aW5nIENMMiBvZmYuIEJYVCBkb2VzIHRoaXMNCj4gLQkJICogdG9vLCBzbyBtYXliZSBpdCBz YXZlcyBzb21lIHBvd2VyIGV2ZW4gdGhvdWdoDQo+IC0JCSAqIENMMiBkb2Vzbid0IGV4aXN0Pw0K PiAtCQkgKi8NCj4gLQkJdG1wID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgQ0hWX0NN Tl9EVzMwKTsNCj4gLQkJdG1wIHw9IERQSU9fQ0wyX0xET0ZVU0VfUFdSRU5COw0KPiAtCQl2bHZf ZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgQ0hWX0NNTl9EVzMwLCB0bXApOw0KPiAtCX0NCj4g LQ0KPiAtCXZsdl9kcGlvX3B1dChkZXZfcHJpdik7DQo+IC0NCj4gLQlkZXZfcHJpdi0+Y2h2X3Bo eV9jb250cm9sIHw9IFBIWV9DT01fTEFORV9SRVNFVF9ERUFTU0VSVChwaHkpOw0KPiAtCWludGVs X2RlX3dyaXRlKGRldl9wcml2LCBESVNQTEFZX1BIWV9DT05UUk9MLA0KPiAtCQkgICAgICAgZGV2 X3ByaXYtPmNodl9waHlfY29udHJvbCk7DQo+IC0NCj4gLQlkcm1fZGJnX2ttcygmZGV2X3ByaXYt PmRybSwNCj4gLQkJICAgICJFbmFibGVkIERQSU8gUEhZJWQgKFBIWV9DT05UUk9MPTB4JTA4eClc biIsDQo+IC0JCSAgICBwaHksIGRldl9wcml2LT5jaHZfcGh5X2NvbnRyb2wpOw0KPiAtDQo+IC0J YXNzZXJ0X2Nodl9waHlfc3RhdHVzKGRldl9wcml2KTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZv aWQgY2h2X2RwaW9fY21uX3Bvd2VyX3dlbGxfZGlzYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZQ0KPiAqZGV2X3ByaXYsDQo+IC0JCQkJCSAgICBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsDQo+ICpw b3dlcl93ZWxsKQ0KPiAtew0KPiAtCWVudW0gZHBpb19waHkgcGh5Ow0KPiAtDQo+IC0JZHJtX1dB Uk5fT05fT05DRSgmZGV2X3ByaXYtPmRybSwNCj4gLQkJCSBwb3dlcl93ZWxsLT5kZXNjLT5pZCAh PQ0KPiBWTFZfRElTUF9QV19EUElPX0NNTl9CQyAmJg0KPiAtCQkJIHBvd2VyX3dlbGwtPmRlc2Mt PmlkICE9DQo+IENIVl9ESVNQX1BXX0RQSU9fQ01OX0QpOw0KPiAtDQo+IC0JaWYgKHBvd2VyX3dl bGwtPmRlc2MtPmlkID09IFZMVl9ESVNQX1BXX0RQSU9fQ01OX0JDKSB7DQo+IC0JCXBoeSA9IERQ SU9fUEhZMDsNCj4gLQkJYXNzZXJ0X3BsbF9kaXNhYmxlZChkZXZfcHJpdiwgUElQRV9BKTsNCj4g LQkJYXNzZXJ0X3BsbF9kaXNhYmxlZChkZXZfcHJpdiwgUElQRV9CKTsNCj4gLQl9IGVsc2Ugew0K PiAtCQlwaHkgPSBEUElPX1BIWTE7DQo+IC0JCWFzc2VydF9wbGxfZGlzYWJsZWQoZGV2X3ByaXYs IFBJUEVfQyk7DQo+IC0JfQ0KPiAtDQo+IC0JZGV2X3ByaXYtPmNodl9waHlfY29udHJvbCAmPSB+ UEhZX0NPTV9MQU5FX1JFU0VUX0RFQVNTRVJUKHBoeSk7DQo+IC0JaW50ZWxfZGVfd3JpdGUoZGV2 X3ByaXYsIERJU1BMQVlfUEhZX0NPTlRST0wsDQo+IC0JCSAgICAgICBkZXZfcHJpdi0+Y2h2X3Bo eV9jb250cm9sKTsNCj4gLQ0KPiAtCXZsdl9zZXRfcG93ZXJfd2VsbChkZXZfcHJpdiwgcG93ZXJf d2VsbCwgZmFsc2UpOw0KPiAtDQo+IC0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sDQo+IC0J CSAgICAiRGlzYWJsZWQgRFBJTyBQSFklZCAoUEhZX0NPTlRST0w9MHglMDh4KVxuIiwNCj4gLQkJ ICAgIHBoeSwgZGV2X3ByaXYtPmNodl9waHlfY29udHJvbCk7DQo+IC0NCj4gLQkvKiBQSFkgaXMg ZnVsbHkgcmVzZXQgbm93LCBzbyB3ZSBjYW4gZW5hYmxlIHRoZSBQSFkgc3RhdGUNCj4gYXNzZXJ0 cyAqLw0KPiAtCWRldl9wcml2LT5jaHZfcGh5X2Fzc2VydFtwaHldID0gdHJ1ZTsNCj4gLQ0KPiAt CWFzc2VydF9jaHZfcGh5X3N0YXR1cyhkZXZfcHJpdik7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2 b2lkIGFzc2VydF9jaHZfcGh5X3Bvd2VyZ2F0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiAq ZGV2X3ByaXYsIGVudW0gZHBpb19waHkgcGh5LA0KPiAtCQkJCSAgICAgZW51bSBkcGlvX2NoYW5u ZWwgY2gsIGJvb2wNCj4gb3ZlcnJpZGUsIHVuc2lnbmVkIGludCBtYXNrKQ0KPiAtew0KPiAtCWVu dW0gcGlwZSBwaXBlID0gcGh5ID09IERQSU9fUEhZMCA/IFBJUEVfQSA6IFBJUEVfQzsNCj4gLQl1 MzIgcmVnLCB2YWwsIGV4cGVjdGVkLCBhY3R1YWw7DQo+IC0NCj4gLQkvKg0KPiAtCSAqIFRoZSBC SU9TIGNhbiBsZWF2ZSB0aGUgUEhZIGlzIHNvbWUgd2VpcmQgc3RhdGUNCj4gLQkgKiB3aGVyZSBp dCBkb2Vzbid0IGZ1bGx5IHBvd2VyIGRvd24gc29tZSBwYXJ0cy4NCj4gLQkgKiBEaXNhYmxlIHRo ZSBhc3NlcnRzIHVudGlsIHRoZSBQSFkgaGFzIGJlZW4gZnVsbHkNCj4gLQkgKiByZXNldCAoaWUu IHRoZSBwb3dlciB3ZWxsIGhhcyBiZWVuIGRpc2FibGVkIGF0DQo+IC0JICogbGVhc3Qgb25jZSku DQo+IC0JICovDQo+IC0JaWYgKCFkZXZfcHJpdi0+Y2h2X3BoeV9hc3NlcnRbcGh5XSkNCj4gLQkJ cmV0dXJuOw0KPiAtDQo+IC0JaWYgKGNoID09IERQSU9fQ0gwKQ0KPiAtCQlyZWcgPSBfQ0hWX0NN Tl9EVzBfQ0gwOw0KPiAtCWVsc2UNCj4gLQkJcmVnID0gX0NIVl9DTU5fRFc2X0NIMTsNCj4gLQ0K PiAtCXZsdl9kcGlvX2dldChkZXZfcHJpdik7DQo+IC0JdmFsID0gdmx2X2RwaW9fcmVhZChkZXZf cHJpdiwgcGlwZSwgcmVnKTsNCj4gLQl2bHZfZHBpb19wdXQoZGV2X3ByaXYpOw0KPiAtDQo+IC0J LyoNCj4gLQkgKiBUaGlzIGFzc3VtZXMgIW92ZXJyaWRlIGlzIG9ubHkgdXNlZCB3aGVuIHRoZSBw b3J0IGlzDQo+IGRpc2FibGVkLg0KPiAtCSAqIEFsbCBsYW5lcyBzaG91bGQgcG93ZXIgZG93biBl dmVuIHdpdGhvdXQgdGhlIG92ZXJyaWRlIHdoZW4NCj4gLQkgKiB0aGUgcG9ydCBpcyBkaXNhYmxl ZC4NCj4gLQkgKi8NCj4gLQlpZiAoIW92ZXJyaWRlIHx8IG1hc2sgPT0gMHhmKSB7DQo+IC0JCWV4 cGVjdGVkID0gRFBJT19BTExETF9QT1dFUkRPV04gfCBEUElPX0FOWURMX1BPV0VSRE9XTjsNCj4g LQkJLyoNCj4gLQkJICogSWYgQ0gxIGNvbW1vbiBsYW5lIGlzIG5vdCBhY3RpdmUgYW55bW9yZQ0K PiAtCQkgKiAoZWcuIGZvciBwaXBlIEIgRFBMTCkgdGhlIGVudGlyZSBjaGFubmVsIHdpbGwNCj4g LQkJICogc2h1dCBkb3duLCB3aGljaCBjYXVzZXMgdGhlIGNvbW1vbiBsYW5lIHJlZ2lzdGVycw0K PiAtCQkgKiB0byByZWFkIGFzIDAuIFRoYXQgbWVhbnMgd2UgY2FuJ3QgYWN0dWFsbHkgY2hlY2sN Cj4gLQkJICogdGhlIGxhbmUgcG93ZXIgZG93biBzdGF0dXMgYml0cywgYnV0IGFzIHRoZSBlbnRp cmUNCj4gLQkJICogcmVnaXN0ZXIgcmVhZHMgYXMgMCBpdCdzIGEgZ29vZCBpbmRpY2F0aW9uIHRo YXQgdGhlDQo+IC0JCSAqIGNoYW5uZWwgaXMgaW5kZWVkIGVudGlyZWx5IHBvd2VyZWQgZG93bi4N Cj4gLQkJICovDQo+IC0JCWlmIChjaCA9PSBEUElPX0NIMSAmJiB2YWwgPT0gMCkNCj4gLQkJCWV4 cGVjdGVkID0gMDsNCj4gLQl9IGVsc2UgaWYgKG1hc2sgIT0gMHgwKSB7DQo+IC0JCWV4cGVjdGVk ID0gRFBJT19BTllETF9QT1dFUkRPV047DQo+IC0JfSBlbHNlIHsNCj4gLQkJZXhwZWN0ZWQgPSAw Ow0KPiAtCX0NCj4gLQ0KPiAtCWlmIChjaCA9PSBEUElPX0NIMCkNCj4gLQkJYWN0dWFsID0gdmFs ID4+IERQSU9fQU5ZRExfUE9XRVJET1dOX1NISUZUX0NIMDsNCj4gLQllbHNlDQo+IC0JCWFjdHVh bCA9IHZhbCA+PiBEUElPX0FOWURMX1BPV0VSRE9XTl9TSElGVF9DSDE7DQo+IC0JYWN0dWFsICY9 IERQSU9fQUxMRExfUE9XRVJET1dOIHwgRFBJT19BTllETF9QT1dFUkRPV047DQo+IC0NCj4gLQlk cm1fV0FSTigmZGV2X3ByaXYtPmRybSwgYWN0dWFsICE9IGV4cGVjdGVkLA0KPiAtCQkgIlVuZXhw ZWN0ZWQgRFBJTyBsYW5lIHBvd2VyIGRvd246IGFsbCAlZCwgYW55ICVkLg0KPiBFeHBlY3RlZDog YWxsICVkLCBhbnkgJWQuICgweCV4ID0gMHglMDh4KVxuIiwNCj4gLQkJICEhKGFjdHVhbCAmIERQ SU9fQUxMRExfUE9XRVJET1dOKSwNCj4gLQkJICEhKGFjdHVhbCAmIERQSU9fQU5ZRExfUE9XRVJE T1dOKSwNCj4gLQkJICEhKGV4cGVjdGVkICYgRFBJT19BTExETF9QT1dFUkRPV04pLA0KPiAtCQkg ISEoZXhwZWN0ZWQgJiBEUElPX0FOWURMX1BPV0VSRE9XTiksDQo+IC0JCSByZWcsIHZhbCk7DQo+ IC19DQo+IC0NCj4gLWJvb2wgY2h2X3BoeV9wb3dlcmdhdGVfY2goc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LCBlbnVtDQo+IGRwaW9fcGh5IHBoeSwNCj4gLQkJCSAgZW51bSBkcGlv X2NoYW5uZWwgY2gsIGJvb2wgb3ZlcnJpZGUpDQo+IC17DQo+IC0Jc3RydWN0IGk5MTVfcG93ZXJf ZG9tYWlucyAqcG93ZXJfZG9tYWlucyA9ICZkZXZfcHJpdi0NCj4gPnBvd2VyX2RvbWFpbnM7DQo+ IC0JYm9vbCB3YXNfb3ZlcnJpZGU7DQo+IC0NCj4gLQltdXRleF9sb2NrKCZwb3dlcl9kb21haW5z LT5sb2NrKTsNCj4gLQ0KPiAtCXdhc19vdmVycmlkZSA9IGRldl9wcml2LT5jaHZfcGh5X2NvbnRy b2wgJg0KPiBQSFlfQ0hfUE9XRVJfRE9XTl9PVlJEX0VOKHBoeSwgY2gpOw0KPiAtDQo+IC0JaWYg KG92ZXJyaWRlID09IHdhc19vdmVycmlkZSkNCj4gLQkJZ290byBvdXQ7DQo+IC0NCj4gLQlpZiAo b3ZlcnJpZGUpDQo+IC0JCWRldl9wcml2LT5jaHZfcGh5X2NvbnRyb2wgfD0NCj4gUEhZX0NIX1BP V0VSX0RPV05fT1ZSRF9FTihwaHksIGNoKTsNCj4gLQllbHNlDQo+IC0JCWRldl9wcml2LT5jaHZf cGh5X2NvbnRyb2wgJj0NCj4gflBIWV9DSF9QT1dFUl9ET1dOX09WUkRfRU4ocGh5LCBjaCk7DQo+ IC0NCj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRElTUExBWV9QSFlfQ09OVFJPTCwNCj4g LQkJICAgICAgIGRldl9wcml2LT5jaHZfcGh5X2NvbnRyb2wpOw0KPiAtDQo+IC0JZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sDQo+IC0JCSAgICAiUG93ZXIgZ2F0aW5nIERQSU8gUEhZJWQgQ0gl ZA0KPiAoRFBJT19QSFlfQ09OVFJPTD0weCUwOHgpXG4iLA0KPiAtCQkgICAgcGh5LCBjaCwgZGV2 X3ByaXYtPmNodl9waHlfY29udHJvbCk7DQo+IC0NCj4gLQlhc3NlcnRfY2h2X3BoeV9zdGF0dXMo ZGV2X3ByaXYpOw0KPiAtDQo+IC1vdXQ6DQo+IC0JbXV0ZXhfdW5sb2NrKCZwb3dlcl9kb21haW5z LT5sb2NrKTsNCj4gLQ0KPiAtCXJldHVybiB3YXNfb3ZlcnJpZGU7DQo+IC19DQo+IC0NCj4gLXZv aWQgY2h2X3BoeV9wb3dlcmdhdGVfbGFuZXMoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIs DQo+IC0JCQkgICAgIGJvb2wgb3ZlcnJpZGUsIHVuc2lnbmVkIGludCBtYXNrKQ0KPiAtew0KPiAt CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZW5jb2Rlci0+YmFz ZS5kZXYpOw0KPiAtCXN0cnVjdCBpOTE1X3Bvd2VyX2RvbWFpbnMgKnBvd2VyX2RvbWFpbnMgPSAm ZGV2X3ByaXYtDQo+ID5wb3dlcl9kb21haW5zOw0KPiAtCWVudW0gZHBpb19waHkgcGh5ID0NCj4g dmx2X2RpZ19wb3J0X3RvX3BoeShlbmNfdG9fZGlnX3BvcnQoZW5jb2RlcikpOw0KPiAtCWVudW0g ZHBpb19jaGFubmVsIGNoID0NCj4gdmx2X2RpZ19wb3J0X3RvX2NoYW5uZWwoZW5jX3RvX2RpZ19w b3J0KGVuY29kZXIpKTsNCj4gLQ0KPiAtCW11dGV4X2xvY2soJnBvd2VyX2RvbWFpbnMtPmxvY2sp Ow0KPiAtDQo+IC0JZGV2X3ByaXYtPmNodl9waHlfY29udHJvbCAmPSB+UEhZX0NIX1BPV0VSX0RP V05fT1ZSRCgweGYsIHBoeSwNCj4gY2gpOw0KPiAtCWRldl9wcml2LT5jaHZfcGh5X2NvbnRyb2wg fD0gUEhZX0NIX1BPV0VSX0RPV05fT1ZSRChtYXNrLCBwaHksDQo+IGNoKTsNCj4gLQ0KPiAtCWlm IChvdmVycmlkZSkNCj4gLQkJZGV2X3ByaXYtPmNodl9waHlfY29udHJvbCB8PQ0KPiBQSFlfQ0hf UE9XRVJfRE9XTl9PVlJEX0VOKHBoeSwgY2gpOw0KPiAtCWVsc2UNCj4gLQkJZGV2X3ByaXYtPmNo dl9waHlfY29udHJvbCAmPQ0KPiB+UEhZX0NIX1BPV0VSX0RPV05fT1ZSRF9FTihwaHksIGNoKTsN Cj4gLQ0KPiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBESVNQTEFZX1BIWV9DT05UUk9MLA0K PiAtCQkgICAgICAgZGV2X3ByaXYtPmNodl9waHlfY29udHJvbCk7DQo+IC0NCj4gLQlkcm1fZGJn X2ttcygmZGV2X3ByaXYtPmRybSwNCj4gLQkJICAgICJQb3dlciBnYXRpbmcgRFBJTyBQSFklZCBD SCVkIGxhbmVzIDB4JXgNCj4gKFBIWV9DT05UUk9MPTB4JTA4eClcbiIsDQo+IC0JCSAgICBwaHks IGNoLCBtYXNrLCBkZXZfcHJpdi0+Y2h2X3BoeV9jb250cm9sKTsNCj4gLQ0KPiAtCWFzc2VydF9j aHZfcGh5X3N0YXR1cyhkZXZfcHJpdik7DQo+IC0NCj4gLQlhc3NlcnRfY2h2X3BoeV9wb3dlcmdh dGUoZGV2X3ByaXYsIHBoeSwgY2gsIG92ZXJyaWRlLCBtYXNrKTsNCj4gLQ0KPiAtCW11dGV4X3Vu bG9jaygmcG93ZXJfZG9tYWlucy0+bG9jayk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBib29sIGNo dl9waXBlX3Bvd2VyX3dlbGxfZW5hYmxlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2 X3ByaXYsDQo+IC0JCQkJCXN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwNCj4gKnBvd2VyX3dlbGwpDQo+ IC17DQo+IC0JZW51bSBwaXBlIHBpcGUgPSBQSVBFX0E7DQo+IC0JYm9vbCBlbmFibGVkOw0KPiAt CXUzMiBzdGF0ZSwgY3RybDsNCj4gLQ0KPiAtCXZsdl9wdW5pdF9nZXQoZGV2X3ByaXYpOw0KPiAt DQo+IC0Jc3RhdGUgPSB2bHZfcHVuaXRfcmVhZChkZXZfcHJpdiwgUFVOSVRfUkVHX0RTUFNTUE0p ICYNCj4gRFBfU1NTX01BU0socGlwZSk7DQo+IC0JLyoNCj4gLQkgKiBXZSBvbmx5IGV2ZXIgc2V0 IHRoZSBwb3dlci1vbiBhbmQgcG93ZXItZ2F0ZSBzdGF0ZXMsDQo+IGFueXRoaW5nDQo+IC0JICog ZWxzZSBpcyB1bmV4cGVjdGVkLg0KPiAtCSAqLw0KPiAtCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ ZHJtLCBzdGF0ZSAhPSBEUF9TU1NfUFdSX09OKHBpcGUpICYmDQo+IC0JCSAgICBzdGF0ZSAhPSBE UF9TU1NfUFdSX0dBVEUocGlwZSkpOw0KPiAtCWVuYWJsZWQgPSBzdGF0ZSA9PSBEUF9TU1NfUFdS X09OKHBpcGUpOw0KPiAtDQo+IC0JLyoNCj4gLQkgKiBBIHRyYW5zaWVudCBzdGF0ZSBhdCB0aGlz IHBvaW50IHdvdWxkIG1lYW4gc29tZSB1bmV4cGVjdGVkDQo+IHBhcnR5DQo+IC0JICogaXMgcG9r aW5nIGF0IHRoZSBwb3dlciBjb250cm9scyB0b28uDQo+IC0JICovDQo+IC0JY3RybCA9IHZsdl9w dW5pdF9yZWFkKGRldl9wcml2LCBQVU5JVF9SRUdfRFNQU1NQTSkgJg0KPiBEUF9TU0NfTUFTSyhw aXBlKTsNCj4gLQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgY3RybCA8PCAxNiAhPSBzdGF0 ZSk7DQo+IC0NCj4gLQl2bHZfcHVuaXRfcHV0KGRldl9wcml2KTsNCj4gLQ0KPiAtCXJldHVybiBl bmFibGVkOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBjaHZfc2V0X3BpcGVfcG93ZXJfd2Vs bChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYsDQo+IC0JCQkJICAgIHN0cnVj dCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwsDQo+IC0JCQkJICAgIGJvb2wgZW5hYmxlKQ0K PiAtew0KPiAtCWVudW0gcGlwZSBwaXBlID0gUElQRV9BOw0KPiAtCXUzMiBzdGF0ZTsNCj4gLQl1 MzIgY3RybDsNCj4gLQ0KPiAtCXN0YXRlID0gZW5hYmxlID8gRFBfU1NTX1BXUl9PTihwaXBlKSA6 IERQX1NTU19QV1JfR0FURShwaXBlKTsNCj4gLQ0KPiAtCXZsdl9wdW5pdF9nZXQoZGV2X3ByaXYp Ow0KPiAtDQo+IC0jZGVmaW5lIENPTkQgXA0KPiAtCSgodmx2X3B1bml0X3JlYWQoZGV2X3ByaXYs IFBVTklUX1JFR19EU1BTU1BNKSAmDQo+IERQX1NTU19NQVNLKHBpcGUpKSA9PSBzdGF0ZSkNCj4g LQ0KPiAtCWlmIChDT05EKQ0KPiAtCQlnb3RvIG91dDsNCj4gLQ0KPiAtCWN0cmwgPSB2bHZfcHVu aXRfcmVhZChkZXZfcHJpdiwgUFVOSVRfUkVHX0RTUFNTUE0pOw0KPiAtCWN0cmwgJj0gfkRQX1NT Q19NQVNLKHBpcGUpOw0KPiAtCWN0cmwgfD0gZW5hYmxlID8gRFBfU1NDX1BXUl9PTihwaXBlKSA6 IERQX1NTQ19QV1JfR0FURShwaXBlKTsNCj4gLQl2bHZfcHVuaXRfd3JpdGUoZGV2X3ByaXYsIFBV TklUX1JFR19EU1BTU1BNLCBjdHJsKTsNCj4gLQ0KPiAtCWlmICh3YWl0X2ZvcihDT05ELCAxMDAp KQ0KPiAtCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLA0KPiAtCQkJInRpbWVvdXQgc2V0dGluZyBw b3dlciB3ZWxsIHN0YXRlICUwOHgNCj4gKCUwOHgpXG4iLA0KPiAtCQkJc3RhdGUsDQo+IC0JCQl2 bHZfcHVuaXRfcmVhZChkZXZfcHJpdiwgUFVOSVRfUkVHX0RTUFNTUE0pKTsNCj4gLQ0KPiAtI3Vu ZGVmIENPTkQNCj4gLQ0KPiAtb3V0Og0KPiAtCXZsdl9wdW5pdF9wdXQoZGV2X3ByaXYpOw0KPiAt fQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBjaHZfcGlwZV9wb3dlcl93ZWxsX3N5bmNfaHcoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUNCj4gKmRldl9wcml2LA0KPiAtCQkJCQlzdHJ1Y3QgaTkxNV9wb3dl cl93ZWxsDQo+ICpwb3dlcl93ZWxsKQ0KPiAtew0KPiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2 LCBESVNQTEFZX1BIWV9DT05UUk9MLA0KPiAtCQkgICAgICAgZGV2X3ByaXYtPmNodl9waHlfY29u dHJvbCk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIGNodl9waXBlX3Bvd2VyX3dlbGxfZW5h YmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlDQo+ICpkZXZfcHJpdiwNCj4gLQkJCQkgICAgICAg c3RydWN0IGk5MTVfcG93ZXJfd2VsbA0KPiAqcG93ZXJfd2VsbCkNCj4gLXsNCj4gLQljaHZfc2V0 X3BpcGVfcG93ZXJfd2VsbChkZXZfcHJpdiwgcG93ZXJfd2VsbCwgdHJ1ZSk7DQo+IC0NCj4gLQl2 bHZfZGlzcGxheV9wb3dlcl93ZWxsX2luaXQoZGV2X3ByaXYpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0 aWMgdm9pZCBjaHZfcGlwZV9wb3dlcl93ZWxsX2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUNCj4gKmRldl9wcml2LA0KPiAtCQkJCQlzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsDQo+ICpwb3dl cl93ZWxsKQ0KPiAtew0KPiAtCXZsdl9kaXNwbGF5X3Bvd2VyX3dlbGxfZGVpbml0KGRldl9wcml2 KTsNCj4gLQ0KPiAtCWNodl9zZXRfcGlwZV9wb3dlcl93ZWxsKGRldl9wcml2LCBwb3dlcl93ZWxs LCBmYWxzZSk7DQo+IC19DQo+IC0NCj4gIHN0YXRpYyB1NjQgX19hc3luY19wdXRfZG9tYWluc19t YXNrKHN0cnVjdCBpOTE1X3Bvd2VyX2RvbWFpbnMNCj4gKnBvd2VyX2RvbWFpbnMpDQo+ICB7DQo+ ICAJcmV0dXJuIHBvd2VyX2RvbWFpbnMtPmFzeW5jX3B1dF9kb21haW5zWzBdIHwNCj4gQEAgLTMw NDMsMjcgKzE0NzQsNiBAQCBpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dF9tYXNrX2luX3NldChzdHJ1 Y3QNCj4gZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwNCj4gICNkZWZpbmUgWEVMUERfRERJX0lPX1RD M19QT1dFUl9ET01BSU5TCQlCSVRfVUxMKFBPV0VSX0QNCj4gT01BSU5fUE9SVF9ERElfSU9fVEMz KQ0KPiAgI2RlZmluZSBYRUxQRF9ERElfSU9fVEM0X1BPV0VSX0RPTUFJTlMJCUJJVF9VTEwoUE9X RVJfRA0KPiBPTUFJTl9QT1JUX0RESV9JT19UQzQpDQo+ICANCj4gLXN0YXRpYyBjb25zdCBzdHJ1 Y3QgaTkxNV9wb3dlcl93ZWxsX29wcw0KPiBpOXh4X2Fsd2F5c19vbl9wb3dlcl93ZWxsX29wcyA9 IHsNCj4gLQkuc3luY19odyA9IGk5eHhfcG93ZXJfd2VsbF9zeW5jX2h3X25vb3AsDQo+IC0JLmVu YWJsZSA9IGk5eHhfYWx3YXlzX29uX3Bvd2VyX3dlbGxfbm9vcCwNCj4gLQkuZGlzYWJsZSA9IGk5 eHhfYWx3YXlzX29uX3Bvd2VyX3dlbGxfbm9vcCwNCj4gLQkuaXNfZW5hYmxlZCA9IGk5eHhfYWx3 YXlzX29uX3Bvd2VyX3dlbGxfZW5hYmxlZCwNCj4gLX07DQo+IC0NCj4gLXN0YXRpYyBjb25zdCBz dHJ1Y3QgaTkxNV9wb3dlcl93ZWxsX29wcyBjaHZfcGlwZV9wb3dlcl93ZWxsX29wcyA9IHsNCj4g LQkuc3luY19odyA9IGNodl9waXBlX3Bvd2VyX3dlbGxfc3luY19odywNCj4gLQkuZW5hYmxlID0g Y2h2X3BpcGVfcG93ZXJfd2VsbF9lbmFibGUsDQo+IC0JLmRpc2FibGUgPSBjaHZfcGlwZV9wb3dl cl93ZWxsX2Rpc2FibGUsDQo+IC0JLmlzX2VuYWJsZWQgPSBjaHZfcGlwZV9wb3dlcl93ZWxsX2Vu YWJsZWQsDQo+IC19Ow0KPiAtDQo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2Vs bF9vcHMgY2h2X2RwaW9fY21uX3Bvd2VyX3dlbGxfb3BzDQo+ID0gew0KPiAtCS5zeW5jX2h3ID0g aTl4eF9wb3dlcl93ZWxsX3N5bmNfaHdfbm9vcCwNCj4gLQkuZW5hYmxlID0gY2h2X2RwaW9fY21u X3Bvd2VyX3dlbGxfZW5hYmxlLA0KPiAtCS5kaXNhYmxlID0gY2h2X2RwaW9fY21uX3Bvd2VyX3dl bGxfZGlzYWJsZSwNCj4gLQkuaXNfZW5hYmxlZCA9IHZsdl9wb3dlcl93ZWxsX2VuYWJsZWQsDQo+ IC19Ow0KPiAtDQo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9kZXNjIGk5 eHhfYWx3YXlzX29uX3Bvd2VyX3dlbGxbXQ0KPiA9IHsNCj4gIAl7DQo+ICAJCS5uYW1lID0gImFs d2F5cy1vbiIsDQo+IEBAIC0zMDc0LDEzICsxNDg0LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBp OTE1X3Bvd2VyX3dlbGxfZGVzYw0KPiBpOXh4X2Fsd2F5c19vbl9wb3dlcl93ZWxsW10gPSB7DQo+ ICAJfSwNCj4gIH07DQo+ICANCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxs X29wcyBpODMwX3BpcGVzX3Bvd2VyX3dlbGxfb3BzID0NCj4gew0KPiAtCS5zeW5jX2h3ID0gaTgz MF9waXBlc19wb3dlcl93ZWxsX3N5bmNfaHcsDQo+IC0JLmVuYWJsZSA9IGk4MzBfcGlwZXNfcG93 ZXJfd2VsbF9lbmFibGUsDQo+IC0JLmRpc2FibGUgPSBpODMwX3BpcGVzX3Bvd2VyX3dlbGxfZGlz YWJsZSwNCj4gLQkuaXNfZW5hYmxlZCA9IGk4MzBfcGlwZXNfcG93ZXJfd2VsbF9lbmFibGVkLA0K PiAtfTsNCj4gLQ0KPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGxfZGVzYyBp ODMwX3Bvd2VyX3dlbGxzW10gPSB7DQo+ICAJew0KPiAgCQkubmFtZSA9ICJhbHdheXMtb24iLA0K PiBAQCAtMzA5NywzNSArMTUwMCw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9wb3dlcl93 ZWxsX2Rlc2MNCj4gaTgzMF9wb3dlcl93ZWxsc1tdID0gew0KPiAgCX0sDQo+ICB9Ow0KPiAgDQo+ IC1zdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9yZWdzIGhzd19wb3dlcl93ZWxs X3JlZ3MgPSB7DQo+IC0JLmJpb3MJPSBIU1dfUFdSX1dFTExfQ1RMMSwNCj4gLQkuZHJpdmVyCT0g SFNXX1BXUl9XRUxMX0NUTDIsDQo+IC0JLmt2bXIJPSBIU1dfUFdSX1dFTExfQ1RMMywNCj4gLQku ZGVidWcJPSBIU1dfUFdSX1dFTExfQ1RMNCwNCj4gLX07DQo+IC0NCj4gLXN0YXRpYyBjb25zdCBz dHJ1Y3QgaTkxNV9wb3dlcl93ZWxsX29wcyBoc3dfcG93ZXJfd2VsbF9vcHMgPSB7DQo+IC0JLnJl Z3MgPSAmaHN3X3Bvd2VyX3dlbGxfcmVncywNCj4gLQkuc3luY19odyA9IGhzd19wb3dlcl93ZWxs X3N5bmNfaHcsDQo+IC0JLmVuYWJsZSA9IGhzd19wb3dlcl93ZWxsX2VuYWJsZSwNCj4gLQkuZGlz YWJsZSA9IGhzd19wb3dlcl93ZWxsX2Rpc2FibGUsDQo+IC0JLmlzX2VuYWJsZWQgPSBoc3dfcG93 ZXJfd2VsbF9lbmFibGVkLA0KPiAtfTsNCj4gLQ0KPiAtc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1 X3Bvd2VyX3dlbGxfb3BzIGdlbjlfZGNfb2ZmX3Bvd2VyX3dlbGxfb3BzID0NCj4gew0KPiAtCS5z eW5jX2h3ID0gaTl4eF9wb3dlcl93ZWxsX3N5bmNfaHdfbm9vcCwNCj4gLQkuZW5hYmxlID0gZ2Vu OV9kY19vZmZfcG93ZXJfd2VsbF9lbmFibGUsDQo+IC0JLmRpc2FibGUgPSBnZW45X2RjX29mZl9w b3dlcl93ZWxsX2Rpc2FibGUsDQo+IC0JLmlzX2VuYWJsZWQgPSBnZW45X2RjX29mZl9wb3dlcl93 ZWxsX2VuYWJsZWQsDQo+IC19Ow0KPiAtDQo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfcG93 ZXJfd2VsbF9vcHMgYnh0X2RwaW9fY21uX3Bvd2VyX3dlbGxfb3BzDQo+ID0gew0KPiAtCS5zeW5j X2h3ID0gaTl4eF9wb3dlcl93ZWxsX3N5bmNfaHdfbm9vcCwNCj4gLQkuZW5hYmxlID0gYnh0X2Rw aW9fY21uX3Bvd2VyX3dlbGxfZW5hYmxlLA0KPiAtCS5kaXNhYmxlID0gYnh0X2RwaW9fY21uX3Bv d2VyX3dlbGxfZGlzYWJsZSwNCj4gLQkuaXNfZW5hYmxlZCA9IGJ4dF9kcGlvX2Ntbl9wb3dlcl93 ZWxsX2VuYWJsZWQsDQo+IC19Ow0KPiAtDQo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfcG93 ZXJfd2VsbF9kZXNjIGhzd19wb3dlcl93ZWxsc1tdID0gew0KPiAgCXsNCj4gIAkJLm5hbWUgPSAi YWx3YXlzLW9uIiwNCj4gQEAgLTMxNjcsMjcgKzE1NDEsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 IGk5MTVfcG93ZXJfd2VsbF9kZXNjDQo+IGJkd19wb3dlcl93ZWxsc1tdID0gew0KPiAgCX0sDQo+ ICB9Ow0KPiAgDQo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9vcHMgdmx2 X2Rpc3BsYXlfcG93ZXJfd2VsbF9vcHMgPQ0KPiB7DQo+IC0JLnN5bmNfaHcgPSBpOXh4X3Bvd2Vy X3dlbGxfc3luY19od19ub29wLA0KPiAtCS5lbmFibGUgPSB2bHZfZGlzcGxheV9wb3dlcl93ZWxs X2VuYWJsZSwNCj4gLQkuZGlzYWJsZSA9IHZsdl9kaXNwbGF5X3Bvd2VyX3dlbGxfZGlzYWJsZSwN Cj4gLQkuaXNfZW5hYmxlZCA9IHZsdl9wb3dlcl93ZWxsX2VuYWJsZWQsDQo+IC19Ow0KPiAtDQo+ IC1zdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9vcHMgdmx2X2RwaW9fY21uX3Bv d2VyX3dlbGxfb3BzDQo+ID0gew0KPiAtCS5zeW5jX2h3ID0gaTl4eF9wb3dlcl93ZWxsX3N5bmNf aHdfbm9vcCwNCj4gLQkuZW5hYmxlID0gdmx2X2RwaW9fY21uX3Bvd2VyX3dlbGxfZW5hYmxlLA0K PiAtCS5kaXNhYmxlID0gdmx2X2RwaW9fY21uX3Bvd2VyX3dlbGxfZGlzYWJsZSwNCj4gLQkuaXNf ZW5hYmxlZCA9IHZsdl9wb3dlcl93ZWxsX2VuYWJsZWQsDQo+IC19Ow0KPiAtDQo+IC1zdGF0aWMg Y29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9vcHMgdmx2X2RwaW9fcG93ZXJfd2VsbF9vcHMg PSB7DQo+IC0JLnN5bmNfaHcgPSBpOXh4X3Bvd2VyX3dlbGxfc3luY19od19ub29wLA0KPiAtCS5l bmFibGUgPSB2bHZfcG93ZXJfd2VsbF9lbmFibGUsDQo+IC0JLmRpc2FibGUgPSB2bHZfcG93ZXJf d2VsbF9kaXNhYmxlLA0KPiAtCS5pc19lbmFibGVkID0gdmx2X3Bvd2VyX3dlbGxfZW5hYmxlZCwN Cj4gLX07DQo+IC0NCj4gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsX2Rlc2Mg dmx2X3Bvd2VyX3dlbGxzW10gPSB7DQo+ICAJew0KPiAgCQkubmFtZSA9ICJhbHdheXMtb24iLA0K PiBAQCAtMzU2OSwzNCArMTkyMiw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9wb3dlcl93 ZWxsX2Rlc2MNCj4gZ2xrX3Bvd2VyX3dlbGxzW10gPSB7DQo+ICAJfSwNCj4gIH07DQo+ICANCj4g LXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsX3JlZ3MgaWNsX2F1eF9wb3dlcl93 ZWxsX3JlZ3MgPSB7DQo+IC0JLmJpb3MJPSBJQ0xfUFdSX1dFTExfQ1RMX0FVWDEsDQo+IC0JLmRy aXZlcgk9IElDTF9QV1JfV0VMTF9DVExfQVVYMiwNCj4gLQkuZGVidWcJPSBJQ0xfUFdSX1dFTExf Q1RMX0FVWDQsDQo+IC19Ow0KPiAtDQo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfcG93ZXJf d2VsbF9vcHMgaWNsX2F1eF9wb3dlcl93ZWxsX29wcyA9IHsNCj4gLQkucmVncyA9ICZpY2xfYXV4 X3Bvd2VyX3dlbGxfcmVncywNCj4gLQkuc3luY19odyA9IGhzd19wb3dlcl93ZWxsX3N5bmNfaHcs DQo+IC0JLmVuYWJsZSA9IGljbF9hdXhfcG93ZXJfd2VsbF9lbmFibGUsDQo+IC0JLmRpc2FibGUg PSBpY2xfYXV4X3Bvd2VyX3dlbGxfZGlzYWJsZSwNCj4gLQkuaXNfZW5hYmxlZCA9IGhzd19wb3dl cl93ZWxsX2VuYWJsZWQsDQo+IC19Ow0KPiAtDQo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVf cG93ZXJfd2VsbF9yZWdzIGljbF9kZGlfcG93ZXJfd2VsbF9yZWdzID0gew0KPiAtCS5iaW9zCT0g SUNMX1BXUl9XRUxMX0NUTF9EREkxLA0KPiAtCS5kcml2ZXIJPSBJQ0xfUFdSX1dFTExfQ1RMX0RE STIsDQo+IC0JLmRlYnVnCT0gSUNMX1BXUl9XRUxMX0NUTF9EREk0LA0KPiAtfTsNCj4gLQ0KPiAt c3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGxfb3BzIGljbF9kZGlfcG93ZXJfd2Vs bF9vcHMgPSB7DQo+IC0JLnJlZ3MgPSAmaWNsX2RkaV9wb3dlcl93ZWxsX3JlZ3MsDQo+IC0JLnN5 bmNfaHcgPSBoc3dfcG93ZXJfd2VsbF9zeW5jX2h3LA0KPiAtCS5lbmFibGUgPSBoc3dfcG93ZXJf d2VsbF9lbmFibGUsDQo+IC0JLmRpc2FibGUgPSBoc3dfcG93ZXJfd2VsbF9kaXNhYmxlLA0KPiAt CS5pc19lbmFibGVkID0gaHN3X3Bvd2VyX3dlbGxfZW5hYmxlZCwNCj4gLX07DQo+IC0NCj4gIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsX2Rlc2MgaWNsX3Bvd2VyX3dlbGxzW10g PSB7DQo+ICAJew0KPiAgCQkubmFtZSA9ICJhbHdheXMtb24iLA0KPiBAQCAtMzgxMCw5MCArMjEz NSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsX2Rlc2MNCj4gaWNsX3Bv d2VyX3dlbGxzW10gPSB7DQo+ICAJfSwNCj4gIH07DQo+ICANCj4gLXN0YXRpYyB2b2lkDQo+IC10 Z2xfdGNfY29sZF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCBib29sIGJs b2NrKQ0KPiAtew0KPiAtCXU4IHRyaWVzID0gMDsNCj4gLQlpbnQgcmV0Ow0KPiAtDQo+IC0Jd2hp bGUgKDEpIHsNCj4gLQkJdTMyIGxvd192YWw7DQo+IC0JCXUzMiBoaWdoX3ZhbCA9IDA7DQo+IC0N Cj4gLQkJaWYgKGJsb2NrKQ0KPiAtCQkJbG93X3ZhbCA9DQo+IFRHTF9QQ09ERV9FWElUX1RDQ09M RF9EQVRBX0xfQkxPQ0tfUkVROw0KPiAtCQllbHNlDQo+IC0JCQlsb3dfdmFsID0NCj4gVEdMX1BD T0RFX0VYSVRfVENDT0xEX0RBVEFfTF9VTkJMT0NLX1JFUTsNCj4gLQ0KPiAtCQkvKg0KPiAtCQkg KiBTcGVjIHN0YXRlcyB0aGF0IHdlIHNob3VsZCB0aW1lb3V0IHRoZSByZXF1ZXN0IGFmdGVyDQo+ IDIwMHVzDQo+IC0JCSAqIGJ1dCB0aGUgZnVuY3Rpb24gYmVsb3cgd2lsbCB0aW1lb3V0IGFmdGVy IDUwMHVzDQo+IC0JCSAqLw0KPiAtCQlyZXQgPSBzbmJfcGNvZGVfcmVhZChpOTE1LCBUR0xfUENP REVfVENDT0xELCAmbG93X3ZhbCwNCj4gJmhpZ2hfdmFsKTsNCj4gLQkJaWYgKHJldCA9PSAwKSB7 DQo+IC0JCQlpZiAoYmxvY2sgJiYNCj4gLQkJCSAgICAobG93X3ZhbCAmDQo+IFRHTF9QQ09ERV9F WElUX1RDQ09MRF9EQVRBX0xfRVhJVF9GQUlMRUQpKQ0KPiAtCQkJCXJldCA9IC1FSU87DQo+IC0J CQllbHNlDQo+IC0JCQkJYnJlYWs7DQo+IC0JCX0NCj4gLQ0KPiAtCQlpZiAoKyt0cmllcyA9PSAz KQ0KPiAtCQkJYnJlYWs7DQo+IC0NCj4gLQkJbXNsZWVwKDEpOw0KPiAtCX0NCj4gLQ0KPiAtCWlm IChyZXQpDQo+IC0JCWRybV9lcnIoJmk5MTUtPmRybSwgIlRDIGNvbGQgJXNibG9jayBmYWlsZWRc biIsDQo+IC0JCQlibG9jayA/ICIiIDogInVuIik7DQo+IC0JZWxzZQ0KPiAtCQlkcm1fZGJnX2tt cygmaTkxNS0+ZHJtLCAiVEMgY29sZCAlc2Jsb2NrIHN1Y2NlZWRlZFxuIiwNCj4gLQkJCSAgICBi bG9jayA/ICIiIDogInVuIik7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkDQo+IC10Z2xfdGNf Y29sZF9vZmZfcG93ZXJfd2VsbF9lbmFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUs DQo+IC0JCQkJICBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsKQ0KPiAtew0KPiAt CXRnbF90Y19jb2xkX3JlcXVlc3QoaTkxNSwgdHJ1ZSk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2 b2lkDQo+IC10Z2xfdGNfY29sZF9vZmZfcG93ZXJfd2VsbF9kaXNhYmxlKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1LA0KPiAtCQkJCSAgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2Vy X3dlbGwpDQo+IC17DQo+IC0JdGdsX3RjX2NvbGRfcmVxdWVzdChpOTE1LCBmYWxzZSk7DQo+IC19 DQo+IC0NCj4gLXN0YXRpYyB2b2lkDQo+IC10Z2xfdGNfY29sZF9vZmZfcG93ZXJfd2VsbF9zeW5j X2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LA0KPiAtCQkJCSAgIHN0cnVjdCBpOTE1 X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwpDQo+IC17DQo+IC0JaWYgKGludGVsX3Bvd2VyX3dlbGxf cmVmY291bnQocG93ZXJfd2VsbCkgPiAwKQ0KPiAtCQl0Z2xfdGNfY29sZF9vZmZfcG93ZXJfd2Vs bF9lbmFibGUoaTkxNSwgcG93ZXJfd2VsbCk7DQo+IC0JZWxzZQ0KPiAtCQl0Z2xfdGNfY29sZF9v ZmZfcG93ZXJfd2VsbF9kaXNhYmxlKGk5MTUsIHBvd2VyX3dlbGwpOw0KPiAtfQ0KPiAtDQo+IC1z dGF0aWMgYm9vbA0KPiAtdGdsX3RjX2NvbGRfb2ZmX3Bvd2VyX3dlbGxfaXNfZW5hYmxlZChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYsDQo+IC0JCQkJICAgICAgc3RydWN0IGk5 MTVfcG93ZXJfd2VsbA0KPiAqcG93ZXJfd2VsbCkNCj4gLXsNCj4gLQkvKg0KPiAtCSAqIE5vdCB0 aGUgY29ycmVjdGx5IGltcGxlbWVudGF0aW9uIGJ1dCB0aGVyZSBpcyBubyB3YXkgdG8ganVzdA0K PiByZWFkIGl0DQo+IC0JICogZnJvbSBQQ09ERSwgc28gcmV0dXJuaW5nIGNvdW50IHRvIGF2b2lk IHN0YXRlIG1pc21hdGNoDQo+IGVycm9ycw0KPiAtCSAqLw0KPiAtCXJldHVybiBpbnRlbF9wb3dl cl93ZWxsX3JlZmNvdW50KHBvd2VyX3dlbGwpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgY29uc3Qg c3RydWN0IGk5MTVfcG93ZXJfd2VsbF9vcHMgdGdsX3RjX2NvbGRfb2ZmX29wcyA9IHsNCj4gLQku c3luY19odyA9IHRnbF90Y19jb2xkX29mZl9wb3dlcl93ZWxsX3N5bmNfaHcsDQo+IC0JLmVuYWJs ZSA9IHRnbF90Y19jb2xkX29mZl9wb3dlcl93ZWxsX2VuYWJsZSwNCj4gLQkuZGlzYWJsZSA9IHRn bF90Y19jb2xkX29mZl9wb3dlcl93ZWxsX2Rpc2FibGUsDQo+IC0JLmlzX2VuYWJsZWQgPSB0Z2xf dGNfY29sZF9vZmZfcG93ZXJfd2VsbF9pc19lbmFibGVkLA0KPiAtfTsNCj4gLQ0KPiAgc3RhdGlj IGNvbnN0IHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGxfZGVzYyB0Z2xfcG93ZXJfd2VsbHNbXSA9IHsN Cj4gIAl7DQo+ICAJCS5uYW1lID0gImFsd2F5cy1vbiIsDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfcG93ZXJfd2VsbC5jDQo+IGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyX3dlbGwuYw0KPiBp bmRleCAyYTBmYjlkOWM2MGYyLi5hOTJiYjgwN2YxOTcyIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfcG93ZXJfd2VsbC5jDQo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9wb3dlcl93ZWxsLmMN Cj4gQEAgLTQsNyArNCw1OCBAQA0KPiAgICovDQo+ICANCj4gICNpbmNsdWRlICJpOTE1X2Rydi5o Ig0KPiArI2luY2x1ZGUgImk5MTVfaXJxLmgiDQo+ICsjaW5jbHVkZSAiaW50ZWxfY29tYm9fcGh5 LmgiDQo+ICsjaW5jbHVkZSAiaW50ZWxfY29tYm9fcGh5X3JlZ3MuaCINCj4gKyNpbmNsdWRlICJp bnRlbF9jcnQuaCINCj4gKyNpbmNsdWRlICJpbnRlbF9kZS5oIg0KPiAgI2luY2x1ZGUgImludGVs X2Rpc3BsYXlfcG93ZXJfd2VsbC5oIg0KPiArI2luY2x1ZGUgImludGVsX2Rpc3BsYXlfdHlwZXMu aCINCj4gKyNpbmNsdWRlICJpbnRlbF9kcGlvX3BoeS5oIg0KPiArI2luY2x1ZGUgImludGVsX2Rw bGwuaCINCj4gKyNpbmNsdWRlICJpbnRlbF9ob3RwbHVnLmgiDQo+ICsjaW5jbHVkZSAiaW50ZWxf cGNvZGUuaCINCj4gKyNpbmNsdWRlICJpbnRlbF9wbS5oIg0KPiArI2luY2x1ZGUgImludGVsX3Bw cy5oIg0KPiArI2luY2x1ZGUgImludGVsX3ZnYS5oIg0KPiArI2luY2x1ZGUgImludGVsX3RjLmgi DQo+ICsjaW5jbHVkZSAidmx2X3NpZGViYW5kLmgiDQo+ICsjaW5jbHVkZSAidmx2X3NpZGViYW5k X3JlZy5oIg0KPiArDQo+ICtzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsX3JlZ3Mgew0KPiArCWk5MTVf cmVnX3QgYmlvczsNCj4gKwlpOTE1X3JlZ190IGRyaXZlcjsNCj4gKwlpOTE1X3JlZ190IGt2bXI7 DQo+ICsJaTkxNV9yZWdfdCBkZWJ1ZzsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBpOTE1X3Bvd2Vy X3dlbGxfb3BzIHsNCj4gKwljb25zdCBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsX3JlZ3MgKnJlZ3M7 DQo+ICsJLyoNCj4gKwkgKiBTeW5jaHJvbml6ZSB0aGUgd2VsbCdzIGh3IHN0YXRlIHRvIG1hdGNo IHRoZSBjdXJyZW50IHN3DQo+IHN0YXRlLCBmb3INCj4gKwkgKiBleGFtcGxlIGVuYWJsZS9kaXNh YmxlIGl0IGJhc2VkIG9uIHRoZSBjdXJyZW50IHJlZmNvdW50Lg0KPiBDYWxsZWQNCj4gKwkgKiBk dXJpbmcgZHJpdmVyIGluaXQgYW5kIHJlc3VtZSB0aW1lLCBwb3NzaWJseSBhZnRlciBmaXJzdA0K PiBjYWxsaW5nDQo+ICsJICogdGhlIGVuYWJsZS9kaXNhYmxlIGhhbmRsZXJzLg0KPiArCSAqLw0K PiArCXZvaWQgKCpzeW5jX2h3KShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwNCj4gKwkJ CXN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwpOw0KPiArCS8qDQo+ICsJICogRW5h YmxlIHRoZSB3ZWxsIGFuZCByZXNvdXJjZXMgdGhhdCBkZXBlbmQgb24gaXQgKGZvciBleGFtcGxl DQo+ICsJICogaW50ZXJydXB0cyBsb2NhdGVkIG9uIHRoZSB3ZWxsKS4gQ2FsbGVkIGFmdGVyIHRo ZSAwLT4xDQo+IHJlZmNvdW50DQo+ICsJICogdHJhbnNpdGlvbi4NCj4gKwkgKi8NCj4gKwl2b2lk ICgqZW5hYmxlKShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwNCj4gKwkJICAgICAgIHN0 cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwpOw0KPiArCS8qDQo+ICsJICogRGlzYWJs ZSB0aGUgd2VsbCBhbmQgcmVzb3VyY2VzIHRoYXQgZGVwZW5kIG9uIGl0LiBDYWxsZWQNCj4gYWZ0 ZXINCj4gKwkgKiB0aGUgMS0+MCByZWZjb3VudCB0cmFuc2l0aW9uLg0KPiArCSAqLw0KPiArCXZv aWQgKCpkaXNhYmxlKShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwNCj4gKwkJCXN0cnVj dCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwpOw0KPiArCS8qIFJldHVybnMgdGhlIGh3IGVu YWJsZWQgc3RhdGUuICovDQo+ICsJYm9vbCAoKmlzX2VuYWJsZWQpKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1LA0KPiArCQkJICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2Vs bCk7DQo+ICt9Ow0KPiAgDQo+ICBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICoNCj4gIGxvb2t1cF9w b3dlcl93ZWxsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LA0KPiBAQCAtMTExLDMgKzE2 MiwxNzY5IEBAIGludCBpbnRlbF9wb3dlcl93ZWxsX3JlZmNvdW50KHN0cnVjdA0KPiBpOTE1X3Bv d2VyX3dlbGwgKnBvd2VyX3dlbGwpDQo+ICB7DQo+ICAJcmV0dXJuIHBvd2VyX3dlbGwtPmNvdW50 Ow0KPiAgfQ0KPiArDQo+ICsvKg0KPiArICogU3RhcnRpbmcgd2l0aCBIYXN3ZWxsLCB3ZSBoYXZl IGEgIlBvd2VyIERvd24gV2VsbCIgdGhhdCBjYW4gYmUNCj4gdHVybmVkIG9mZg0KPiArICogd2hl biBub3QgbmVlZGVkIGFueW1vcmUuIFdlIGhhdmUgNCByZWdpc3RlcnMgdGhhdCBjYW4gcmVxdWVz dCB0aGUNCj4gcG93ZXIgd2VsbA0KPiArICogdG8gYmUgZW5hYmxlZCwgYW5kIGl0IHdpbGwgb25s eSBiZSBkaXNhYmxlZCBpZiBub25lIG9mIHRoZQ0KPiByZWdpc3RlcnMgaXMNCj4gKyAqIHJlcXVl c3RpbmcgaXQgdG8gYmUgZW5hYmxlZC4NCj4gKyAqLw0KPiArc3RhdGljIHZvaWQgaHN3X3Bvd2Vy X3dlbGxfcG9zdF9lbmFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gKmRldl9wcml2LA0K PiArCQkJCSAgICAgICB1OCBpcnFfcGlwZV9tYXNrLCBib29sIGhhc192Z2EpDQo+ICt7DQo+ICsJ aWYgKGhhc192Z2EpDQo+ICsJCWludGVsX3ZnYV9yZXNldF9pb19tZW0oZGV2X3ByaXYpOw0KPiAr DQo+ICsJaWYgKGlycV9waXBlX21hc2spDQo+ICsJCWdlbjhfaXJxX3Bvd2VyX3dlbGxfcG9zdF9l bmFibGUoZGV2X3ByaXYsDQo+IGlycV9waXBlX21hc2spOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg dm9pZCBoc3dfcG93ZXJfd2VsbF9wcmVfZGlzYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0K PiAqZGV2X3ByaXYsDQo+ICsJCQkJICAgICAgIHU4IGlycV9waXBlX21hc2spDQo+ICt7DQo+ICsJ aWYgKGlycV9waXBlX21hc2spDQo+ICsJCWdlbjhfaXJxX3Bvd2VyX3dlbGxfcHJlX2Rpc2FibGUo ZGV2X3ByaXYsDQo+IGlycV9waXBlX21hc2spOw0KPiArfQ0KPiArDQo+ICsjZGVmaW5lIElDTF9B VVhfUFdfVE9fQ0gocHdfaWR4KQlcDQo+ICsJKChwd19pZHgpIC0gSUNMX1BXX0NUTF9JRFhfQVVY X0EgKyBBVVhfQ0hfQSkNCj4gKw0KPiArI2RlZmluZSBJQ0xfVEJUX0FVWF9QV19UT19DSChwd19p ZHgpCVwNCj4gKwkoKHB3X2lkeCkgLSBJQ0xfUFdfQ1RMX0lEWF9BVVhfVEJUMSArIEFVWF9DSF9D KQ0KPiArDQo+ICtzdGF0aWMgZW51bSBhdXhfY2ggaWNsX2F1eF9wd190b19jaChjb25zdCBzdHJ1 Y3QgaTkxNV9wb3dlcl93ZWxsDQo+ICpwb3dlcl93ZWxsKQ0KPiArew0KPiArCWludCBwd19pZHgg PSBwb3dlcl93ZWxsLT5kZXNjLT5oc3cuaWR4Ow0KPiArDQo+ICsJcmV0dXJuIHBvd2VyX3dlbGwt PmRlc2MtPmhzdy5pc190Y190YnQgPw0KPiBJQ0xfVEJUX0FVWF9QV19UT19DSChwd19pZHgpIDoN Cj4gKwkJCQkJCSBJQ0xfQVVYX1BXX1RPX0NIKHB3X2lkDQo+IHgpOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqDQo+ICthdXhfY2hfdG9fZGlnaXRhbF9w b3J0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwNCj4gKwkJICAgICAgIGVudW0g YXV4X2NoIGF1eF9jaCkNCj4gK3sNCj4gKwlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdf cG9ydCA9IE5VTEw7DQo+ICsJc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7DQo+ICsNCj4g Kwlmb3JfZWFjaF9pbnRlbF9lbmNvZGVyKCZkZXZfcHJpdi0+ZHJtLCBlbmNvZGVyKSB7DQo+ICsJ CS8qIFdlJ2xsIGNoZWNrIHRoZSBNU1QgcHJpbWFyeSBwb3J0ICovDQo+ICsJCWlmIChlbmNvZGVy LT50eXBlID09IElOVEVMX09VVFBVVF9EUF9NU1QpDQo+ICsJCQljb250aW51ZTsNCj4gKw0KPiAr CQlkaWdfcG9ydCA9IGVuY190b19kaWdfcG9ydChlbmNvZGVyKTsNCj4gKwkJaWYgKCFkaWdfcG9y dCkNCj4gKwkJCWNvbnRpbnVlOw0KPiArDQo+ICsJCWlmIChkaWdfcG9ydC0+YXV4X2NoICE9IGF1 eF9jaCkgew0KPiArCQkJZGlnX3BvcnQgPSBOVUxMOw0KPiArCQkJY29udGludWU7DQo+ICsJCX0N Cj4gKw0KPiArCQlicmVhazsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gZGlnX3BvcnQ7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBlbnVtIHBoeSBpY2xfYXV4X3B3X3RvX3BoeShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSwNCj4gKwkJCQkgIGNvbnN0IHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwN Cj4gKnBvd2VyX3dlbGwpDQo+ICt7DQo+ICsJZW51bSBhdXhfY2ggYXV4X2NoID0gaWNsX2F1eF9w d190b19jaChwb3dlcl93ZWxsKTsNCj4gKwlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdf cG9ydCA9DQo+IGF1eF9jaF90b19kaWdpdGFsX3BvcnQoaTkxNSwgYXV4X2NoKTsNCj4gKw0KPiAr CXJldHVybiBpbnRlbF9wb3J0X3RvX3BoeShpOTE1LCBkaWdfcG9ydC0+YmFzZS5wb3J0KTsNCj4g K30NCj4gKw0KPiArc3RhdGljIHZvaWQgaHN3X3dhaXRfZm9yX3Bvd2VyX3dlbGxfZW5hYmxlKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlDQo+ICpkZXZfcHJpdiwNCj4gKwkJCQkJICAgc3RydWN0IGk5 MTVfcG93ZXJfd2VsbA0KPiAqcG93ZXJfd2VsbCwNCj4gKwkJCQkJICAgYm9vbCB0aW1lb3V0X2V4 cGVjdGVkKQ0KPiArew0KPiArCWNvbnN0IHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGxfcmVncyAqcmVn cyA9IHBvd2VyX3dlbGwtPmRlc2MtDQo+ID5vcHMtPnJlZ3M7DQo+ICsJaW50IHB3X2lkeCA9IHBv d2VyX3dlbGwtPmRlc2MtPmhzdy5pZHg7DQo+ICsJaW50IGVuYWJsZV9kZWxheSA9IHBvd2VyX3dl bGwtPmRlc2MtPmhzdy5maXhlZF9lbmFibGVfZGVsYXk7DQo+ICsNCj4gKwkvKg0KPiArCSAqIEZv ciBzb21lIHBvd2VyIHdlbGxzIHdlJ3JlIG5vdCBzdXBwb3NlZCB0byB3YXRjaCB0aGUgc3RhdHVz DQo+IGJpdCBmb3INCj4gKwkgKiBhbiBhY2ssIGJ1dCByYXRoZXIganVzdCB3YWl0IGEgZml4ZWQg YW1vdW50IG9mIHRpbWUgYW5kIHRoZW4NCj4gKwkgKiBwcm9jZWVkLiAgVGhpcyBpcyBvbmx5IHVz ZWQgb24gREcyLg0KPiArCSAqLw0KPiArCWlmIChJU19ERzIoZGV2X3ByaXYpICYmIGVuYWJsZV9k ZWxheSkgew0KPiArCQl1c2xlZXBfcmFuZ2UoZW5hYmxlX2RlbGF5LCAyICogZW5hYmxlX2RlbGF5 KTsNCj4gKwkJcmV0dXJuOw0KPiArCX0NCj4gKw0KPiArCS8qIFRpbWVvdXQgZm9yIFBXMToxMCB1 cywgQVVYOm5vdCBzcGVjaWZpZWQsIG90aGVyIFBXczoyMCB1cy4NCj4gKi8NCj4gKwlpZiAoaW50 ZWxfZGVfd2FpdF9mb3Jfc2V0KGRldl9wcml2LCByZWdzLT5kcml2ZXIsDQo+ICsJCQkJICBIU1df UFdSX1dFTExfQ1RMX1NUQVRFKHB3X2lkeCksIDEpKSB7DQo+ICsJCWRybV9kYmdfa21zKCZkZXZf cHJpdi0+ZHJtLCAiJXMgcG93ZXIgd2VsbCBlbmFibGUNCj4gdGltZW91dFxuIiwNCj4gKwkJCSAg ICBpbnRlbF9wb3dlcl93ZWxsX25hbWUocG93ZXJfd2VsbCkpOw0KPiArDQo+ICsJCWRybV9XQVJO X09OKCZkZXZfcHJpdi0+ZHJtLCAhdGltZW91dF9leHBlY3RlZCk7DQo+ICsNCj4gKwl9DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyB1MzIgaHN3X3Bvd2VyX3dlbGxfcmVxdWVzdGVycyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYsDQo+ICsJCQkJICAgICBjb25zdCBzdHJ1Y3QgaTkx NV9wb3dlcl93ZWxsX3JlZ3MNCj4gKnJlZ3MsDQo+ICsJCQkJICAgICBpbnQgcHdfaWR4KQ0KPiAr ew0KPiArCXUzMiByZXFfbWFzayA9IEhTV19QV1JfV0VMTF9DVExfUkVRKHB3X2lkeCk7DQo+ICsJ dTMyIHJldDsNCj4gKw0KPiArCXJldCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZ3MtPmJp b3MpICYgcmVxX21hc2sgPyAxIDogMDsNCj4gKwlyZXQgfD0gaW50ZWxfZGVfcmVhZChkZXZfcHJp diwgcmVncy0+ZHJpdmVyKSAmIHJlcV9tYXNrID8gMiA6DQo+IDA7DQo+ICsJaWYgKHJlZ3MtPmt2 bXIucmVnKQ0KPiArCQlyZXQgfD0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVncy0+a3Ztcikg JiByZXFfbWFzayA/DQo+IDQgOiAwOw0KPiArCXJldCB8PSBpbnRlbF9kZV9yZWFkKGRldl9wcml2 LCByZWdzLT5kZWJ1ZykgJiByZXFfbWFzayA/IDggOiAwOw0KPiArDQo+ICsJcmV0dXJuIHJldDsN Cj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaHN3X3dhaXRfZm9yX3Bvd2VyX3dlbGxfZGlzYWJs ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYsDQo+ICsJCQkJCSAgICBzdHJ1 Y3QgaTkxNV9wb3dlcl93ZWxsDQo+ICpwb3dlcl93ZWxsKQ0KPiArew0KPiArCWNvbnN0IHN0cnVj dCBpOTE1X3Bvd2VyX3dlbGxfcmVncyAqcmVncyA9IHBvd2VyX3dlbGwtPmRlc2MtDQo+ID5vcHMt PnJlZ3M7DQo+ICsJaW50IHB3X2lkeCA9IHBvd2VyX3dlbGwtPmRlc2MtPmhzdy5pZHg7DQo+ICsJ Ym9vbCBkaXNhYmxlZDsNCj4gKwl1MzIgcmVxczsNCj4gKw0KPiArCS8qDQo+ICsJICogQnNwZWMg ZG9lc24ndCByZXF1aXJlIHdhaXRpbmcgZm9yIFBXcyB0byBnZXQgZGlzYWJsZWQsIGJ1dA0KPiBz dGlsbCBkbw0KPiArCSAqIHRoaXMgZm9yIHBhcmFub2lhLiBUaGUga25vd24gY2FzZXMgd2hlcmUg YSBQVyB3aWxsIGJlIGZvcmNlZA0KPiBvbjoNCj4gKwkgKiAtIGEgS1ZNUiByZXF1ZXN0IG9uIGFu eSBwb3dlciB3ZWxsIHZpYSB0aGUgS1ZNUiByZXF1ZXN0DQo+IHJlZ2lzdGVyDQo+ICsJICogLSBh IERNQyByZXF1ZXN0IG9uIFBXMSBhbmQgTUlTQ19JTyBwb3dlciB3ZWxscyB2aWEgdGhlIEJJT1MN Cj4gYW5kDQo+ICsJICogICBERUJVRyByZXF1ZXN0IHJlZ2lzdGVycw0KPiArCSAqIFNraXAgdGhl IHdhaXQgaW4gY2FzZSBhbnkgb2YgdGhlIHJlcXVlc3QgYml0cyBhcmUgc2V0IGFuZA0KPiBwcmlu dCBhDQo+ICsJICogZGlhZ25vc3RpYyBtZXNzYWdlLg0KPiArCSAqLw0KPiArCXdhaXRfZm9yKChk aXNhYmxlZCA9ICEoaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVncy0+ZHJpdmVyKSAmDQo+ICsJ CQkgICAgICAgSFNXX1BXUl9XRUxMX0NUTF9TVEFURShwd19pZHgpKSkgfHwNCj4gKwkJIChyZXFz ID0gaHN3X3Bvd2VyX3dlbGxfcmVxdWVzdGVycyhkZXZfcHJpdiwgcmVncywNCj4gcHdfaWR4KSks IDEpOw0KPiArCWlmIChkaXNhYmxlZCkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sDQo+ICsJCSAgICAiJXMgZm9yY2VkIG9uIChiaW9zOiVkIGRyaXZl cjolZCBrdm1yOiVkDQo+IGRlYnVnOiVkKVxuIiwNCj4gKwkJICAgIGludGVsX3Bvd2VyX3dlbGxf bmFtZShwb3dlcl93ZWxsKSwNCj4gKwkJICAgICEhKHJlcXMgJiAxKSwgISEocmVxcyAmIDIpLCAh IShyZXFzICYgNCksICEhKHJlcXMgJg0KPiA4KSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lk IGdlbjlfd2FpdF9mb3JfcG93ZXJfd2VsbF9mdXNlcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0K PiAqZGV2X3ByaXYsDQo+ICsJCQkJCSAgIGVudW0gc2tsX3Bvd2VyX2dhdGUgcGcpDQo+ICt7DQo+ ICsJLyogVGltZW91dCA1dXMgZm9yIFBHIzAsIGZvciBvdGhlciBQR3MgMXVzICovDQo+ICsJZHJt X1dBUk5fT04oJmRldl9wcml2LT5kcm0sDQo+ICsJCSAgICBpbnRlbF9kZV93YWl0X2Zvcl9zZXQo ZGV2X3ByaXYsIFNLTF9GVVNFX1NUQVRVUywNCj4gKwkJCQkJICBTS0xfRlVTRV9QR19ESVNUX1NU QVRVUyhwZyksDQo+IDEpKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaHN3X3Bvd2VyX3dl bGxfZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwNCj4gKwkJCQkgIHN0 cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwpDQo+ICt7DQo+ICsJY29uc3Qgc3RydWN0 IGk5MTVfcG93ZXJfd2VsbF9yZWdzICpyZWdzID0gcG93ZXJfd2VsbC0+ZGVzYy0NCj4gPm9wcy0+ cmVnczsNCj4gKwlpbnQgcHdfaWR4ID0gcG93ZXJfd2VsbC0+ZGVzYy0+aHN3LmlkeDsNCj4gKwl1 MzIgdmFsOw0KPiArDQo+ICsJaWYgKHBvd2VyX3dlbGwtPmRlc2MtPmhzdy5oYXNfZnVzZXMpIHsN Cj4gKwkJZW51bSBza2xfcG93ZXJfZ2F0ZSBwZzsNCj4gKw0KPiArCQlwZyA9IERJU1BMQVlfVkVS KGRldl9wcml2KSA+PSAxMSA/DQo+IElDTF9QV19DVExfSURYX1RPX1BHKHB3X2lkeCkgOg0KPiAr CQkJCQkJIFNLTF9QV19DVExfSURYX1RPX1BHKHANCj4gd19pZHgpOw0KPiArDQo+ICsJCS8qIFdh XzE2MDEzMTkwNjE2OmFkbHAgKi8NCj4gKwkJaWYgKElTX0FMREVSTEFLRV9QKGRldl9wcml2KSAm JiBwZyA9PSBTS0xfUEcxKQ0KPiArCQkJaW50ZWxfZGVfcm13KGRldl9wcml2LCBHRU44X0NISUNL RU5fRENQUl8xLCAwLA0KPiBESVNBQkxFX0ZMUl9TUkMpOw0KPiArDQo+ICsJCS8qDQo+ICsJCSAq IEZvciBQVzEgd2UgaGF2ZSB0byB3YWl0IGJvdGggZm9yIHRoZSBQVzAvUEcwIGZ1c2UNCj4gc3Rh dGUNCj4gKwkJICogYmVmb3JlIGVuYWJsaW5nIHRoZSBwb3dlciB3ZWxsIGFuZCBQVzEvUEcxJ3Mg b3duDQo+IGZ1c2UNCj4gKwkJICogc3RhdGUgYWZ0ZXIgdGhlIGVuYWJsaW5nLiBGb3IgYWxsIG90 aGVyIHBvd2VyIHdlbGxzDQo+IHdpdGgNCj4gKwkJICogZnVzZXMgd2Ugb25seSBoYXZlIHRvIHdh aXQgZm9yIHRoYXQgUFcvUEcncyBmdXNlDQo+IHN0YXRlDQo+ICsJCSAqIGFmdGVyIHRoZSBlbmFi bGluZy4NCj4gKwkJICovDQo+ICsJCWlmIChwZyA9PSBTS0xfUEcxKQ0KPiArCQkJZ2VuOV93YWl0 X2Zvcl9wb3dlcl93ZWxsX2Z1c2VzKGRldl9wcml2LA0KPiBTS0xfUEcwKTsNCj4gKwl9DQo+ICsN Cj4gKwl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWdzLT5kcml2ZXIpOw0KPiArCWlu dGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWdzLT5kcml2ZXIsDQo+ICsJCSAgICAgICB2YWwgfCBI U1dfUFdSX1dFTExfQ1RMX1JFUShwd19pZHgpKTsNCj4gKw0KPiArCWhzd193YWl0X2Zvcl9wb3dl cl93ZWxsX2VuYWJsZShkZXZfcHJpdiwgcG93ZXJfd2VsbCwgZmFsc2UpOw0KPiArDQo+ICsJaWYg KHBvd2VyX3dlbGwtPmRlc2MtPmhzdy5oYXNfZnVzZXMpIHsNCj4gKwkJZW51bSBza2xfcG93ZXJf Z2F0ZSBwZzsNCj4gKw0KPiArCQlwZyA9IERJU1BMQVlfVkVSKGRldl9wcml2KSA+PSAxMSA/DQo+ IElDTF9QV19DVExfSURYX1RPX1BHKHB3X2lkeCkgOg0KPiArCQkJCQkJIFNLTF9QV19DVExfSURY X1RPX1BHKHANCj4gd19pZHgpOw0KPiArCQlnZW45X3dhaXRfZm9yX3Bvd2VyX3dlbGxfZnVzZXMo ZGV2X3ByaXYsIHBnKTsNCj4gKwl9DQo+ICsNCj4gKwloc3dfcG93ZXJfd2VsbF9wb3N0X2VuYWJs ZShkZXZfcHJpdiwNCj4gKwkJCQkgICBwb3dlcl93ZWxsLT5kZXNjLT5oc3cuaXJxX3BpcGVfbWFz aywNCj4gKwkJCQkgICBwb3dlcl93ZWxsLT5kZXNjLT5oc3cuaGFzX3ZnYSk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIGhzd19wb3dlcl93ZWxsX2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3By aXZhdGUNCj4gKmRldl9wcml2LA0KPiArCQkJCSAgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBv d2VyX3dlbGwpDQo+ICt7DQo+ICsJY29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9yZWdzICpy ZWdzID0gcG93ZXJfd2VsbC0+ZGVzYy0NCj4gPm9wcy0+cmVnczsNCj4gKwlpbnQgcHdfaWR4ID0g cG93ZXJfd2VsbC0+ZGVzYy0+aHN3LmlkeDsNCj4gKwl1MzIgdmFsOw0KPiArDQo+ICsJaHN3X3Bv d2VyX3dlbGxfcHJlX2Rpc2FibGUoZGV2X3ByaXYsDQo+ICsJCQkJICAgcG93ZXJfd2VsbC0+ZGVz Yy0NCj4gPmhzdy5pcnFfcGlwZV9tYXNrKTsNCj4gKw0KPiArCXZhbCA9IGludGVsX2RlX3JlYWQo ZGV2X3ByaXYsIHJlZ3MtPmRyaXZlcik7DQo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJl Z3MtPmRyaXZlciwNCj4gKwkJICAgICAgIHZhbCAmIH5IU1dfUFdSX1dFTExfQ1RMX1JFUShwd19p ZHgpKTsNCj4gKwloc3dfd2FpdF9mb3JfcG93ZXJfd2VsbF9kaXNhYmxlKGRldl9wcml2LCBwb3dl cl93ZWxsKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK2ljbF9jb21ib19waHlfYXV4 X3Bvd2VyX3dlbGxfZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlDQo+ICpkZXZfcHJpdiwN Cj4gKwkJCQkgICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbCkNCj4gK3sNCj4g Kwljb25zdCBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsX3JlZ3MgKnJlZ3MgPSBwb3dlcl93ZWxsLT5k ZXNjLQ0KPiA+b3BzLT5yZWdzOw0KPiArCWludCBwd19pZHggPSBwb3dlcl93ZWxsLT5kZXNjLT5o c3cuaWR4Ow0KPiArCWVudW0gcGh5IHBoeSA9IGljbF9hdXhfcHdfdG9fcGh5KGRldl9wcml2LCBw b3dlcl93ZWxsKTsNCj4gKwl1MzIgdmFsOw0KPiArDQo+ICsJZHJtX1dBUk5fT04oJmRldl9wcml2 LT5kcm0sICFJU19JQ0VMQUtFKGRldl9wcml2KSk7DQo+ICsNCj4gKwl2YWwgPSBpbnRlbF9kZV9y ZWFkKGRldl9wcml2LCByZWdzLT5kcml2ZXIpOw0KPiArCWludGVsX2RlX3dyaXRlKGRldl9wcml2 LCByZWdzLT5kcml2ZXIsDQo+ICsJCSAgICAgICB2YWwgfCBIU1dfUFdSX1dFTExfQ1RMX1JFUShw d19pZHgpKTsNCj4gKw0KPiArCWlmIChESVNQTEFZX1ZFUihkZXZfcHJpdikgPCAxMikgew0KPiAr CQl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBJQ0xfUE9SVF9DTF9EVzEyKHBoeSkpOw0K PiArCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgSUNMX1BPUlRfQ0xfRFcxMihwaHkpLA0KPiAr CQkJICAgICAgIHZhbCB8IElDTF9MQU5FX0VOQUJMRV9BVVgpOw0KPiArCX0NCj4gKw0KPiArCWhz d193YWl0X2Zvcl9wb3dlcl93ZWxsX2VuYWJsZShkZXZfcHJpdiwgcG93ZXJfd2VsbCwgZmFsc2Up Ow0KPiArDQo+ICsJLyogRGlzcGxheSBXQSAjMTE3ODogaWNsICovDQo+ICsJaWYgKHB3X2lkeCA+ PSBJQ0xfUFdfQ1RMX0lEWF9BVVhfQSAmJiBwd19pZHggPD0NCj4gSUNMX1BXX0NUTF9JRFhfQVVY X0IgJiYNCj4gKwkgICAgIWludGVsX2Jpb3NfaXNfcG9ydF9lZHAoZGV2X3ByaXYsIChlbnVtIHBv cnQpcGh5KSkgew0KPiArCQl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LA0KPiBJQ0xfQVVY X0FOQU9WUkQxKHB3X2lkeCkpOw0KPiArCQl2YWwgfD0gSUNMX0FVWF9BTkFPVlJEMV9FTkFCTEUg fA0KPiBJQ0xfQVVYX0FOQU9WUkQxX0xET19CWVBBU1M7DQo+ICsJCWludGVsX2RlX3dyaXRlKGRl dl9wcml2LCBJQ0xfQVVYX0FOQU9WUkQxKHB3X2lkeCksDQo+IHZhbCk7DQo+ICsJfQ0KPiArfQ0K PiArDQo+ICtzdGF0aWMgdm9pZA0KPiAraWNsX2NvbWJvX3BoeV9hdXhfcG93ZXJfd2VsbF9kaXNh YmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlDQo+ICpkZXZfcHJpdiwNCj4gKwkJCQkgICAgIHN0 cnVjdCBpOTE1X3Bvd2VyX3dlbGwNCj4gKnBvd2VyX3dlbGwpDQo+ICt7DQo+ICsJY29uc3Qgc3Ry dWN0IGk5MTVfcG93ZXJfd2VsbF9yZWdzICpyZWdzID0gcG93ZXJfd2VsbC0+ZGVzYy0NCj4gPm9w cy0+cmVnczsNCj4gKwlpbnQgcHdfaWR4ID0gcG93ZXJfd2VsbC0+ZGVzYy0+aHN3LmlkeDsNCj4g KwllbnVtIHBoeSBwaHkgPSBpY2xfYXV4X3B3X3RvX3BoeShkZXZfcHJpdiwgcG93ZXJfd2VsbCk7 DQo+ICsJdTMyIHZhbDsNCj4gKw0KPiArCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCAhSVNf SUNFTEFLRShkZXZfcHJpdikpOw0KPiArDQo+ICsJdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJp diwgSUNMX1BPUlRfQ0xfRFcxMihwaHkpKTsNCj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwg SUNMX1BPUlRfQ0xfRFcxMihwaHkpLA0KPiArCQkgICAgICAgdmFsICYgfklDTF9MQU5FX0VOQUJM RV9BVVgpOw0KPiArDQo+ICsJdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVncy0+ZHJp dmVyKTsNCj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVncy0+ZHJpdmVyLA0KPiArCQkg ICAgICAgdmFsICYgfkhTV19QV1JfV0VMTF9DVExfUkVRKHB3X2lkeCkpOw0KPiArDQo+ICsJaHN3 X3dhaXRfZm9yX3Bvd2VyX3dlbGxfZGlzYWJsZShkZXZfcHJpdiwgcG93ZXJfd2VsbCk7DQo+ICt9 DQo+ICsNCj4gKyNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9ERUJVR19SVU5USU1FX1BN KQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpY2xfdGNfcG9ydF9hc3NlcnRfcmVmX2hlbGQoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUNCj4gKmRldl9wcml2LA0KPiArCQkJCQlzdHJ1Y3QgaTkxNV9wb3dl cl93ZWxsDQo+ICpwb3dlcl93ZWxsLA0KPiArCQkJCQlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0 DQo+ICpkaWdfcG9ydCkNCj4gK3sNCj4gKwlpZiAoZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0s ICFkaWdfcG9ydCkpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCWlmIChESVNQTEFZX1ZFUihkZXZf cHJpdikgPT0gMTEgJiYNCj4gaW50ZWxfdGNfY29sZF9yZXF1aXJlc19hdXhfcHcoZGlnX3BvcnQp KQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgIWlu dGVsX3RjX3BvcnRfcmVmX2hlbGQoZGlnX3BvcnQpKTsNCj4gK30NCj4gKw0KPiArI2Vsc2UNCj4g Kw0KPiArc3RhdGljIHZvaWQgaWNsX3RjX3BvcnRfYXNzZXJ0X3JlZl9oZWxkKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlDQo+ICpkZXZfcHJpdiwNCj4gKwkJCQkJc3RydWN0IGk5MTVfcG93ZXJfd2Vs bA0KPiAqcG93ZXJfd2VsbCwNCj4gKwkJCQkJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydA0KPiAq ZGlnX3BvcnQpDQo+ICt7DQo+ICt9DQo+ICsNCj4gKyNlbmRpZg0KPiArDQo+ICsjZGVmaW5lIFRH TF9BVVhfUFdfVE9fVENfUE9SVChwd19pZHgpCSgocHdfaWR4KSAtDQo+IFRHTF9QV19DVExfSURY X0FVWF9UQzEpDQo+ICsNCj4gK3N0YXRpYyB2b2lkIGljbF90Y19jb2xkX2V4aXQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUpDQo+ICt7DQo+ICsJaW50IHJldCwgdHJpZXMgPSAwOw0KPiAr DQo+ICsJd2hpbGUgKDEpIHsNCj4gKwkJcmV0ID0gc25iX3Bjb2RlX3dyaXRlX3RpbWVvdXQoaTkx NSwNCj4gSUNMX1BDT0RFX0VYSVRfVENDT0xELCAwLA0KPiArCQkJCQkgICAgICAyNTAsIDEpOw0K PiArCQlpZiAocmV0ICE9IC1FQUdBSU4gfHwgKyt0cmllcyA9PSAzKQ0KPiArCQkJYnJlYWs7DQo+ ICsJCW1zbGVlcCgxKTsNCj4gKwl9DQo+ICsNCj4gKwkvKiBTcGVjIHN0YXRlcyB0aGF0IFRDIGNv bGQgZXhpdCBjYW4gdGFrZSB1cCB0byAxbXMgdG8gY29tcGxldGUNCj4gKi8NCj4gKwlpZiAoIXJl dCkNCj4gKwkJbXNsZWVwKDEpOw0KPiArDQo+ICsJLyogVE9ETzogdHVybiBmYWlsdXJlIGludG8g YSBlcnJvciBhcyBzb29uIGk5MTUgQ0kgdXBkYXRlcyBJQ0wNCj4gSUZXSSAqLw0KPiArCWRybV9k Ymdfa21zKCZpOTE1LT5kcm0sICJUQyBjb2xkIGJsb2NrICVzXG4iLCByZXQgPyAiZmFpbGVkIiA6 DQo+ICsJCSAgICAic3VjY2VlZGVkIik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICtp Y2xfdGNfcGh5X2F1eF9wb3dlcl93ZWxsX2VuYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsDQo+ICsJCQkJIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwpDQo+ ICt7DQo+ICsJZW51bSBhdXhfY2ggYXV4X2NoID0gaWNsX2F1eF9wd190b19jaChwb3dlcl93ZWxs KTsNCj4gKwlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9DQo+IGF1eF9jaF90 b19kaWdpdGFsX3BvcnQoZGV2X3ByaXYsIGF1eF9jaCk7DQo+ICsJY29uc3Qgc3RydWN0IGk5MTVf cG93ZXJfd2VsbF9yZWdzICpyZWdzID0gcG93ZXJfd2VsbC0+ZGVzYy0NCj4gPm9wcy0+cmVnczsN Cj4gKwlib29sIGlzX3RidCA9IHBvd2VyX3dlbGwtPmRlc2MtPmhzdy5pc190Y190YnQ7DQo+ICsJ Ym9vbCB0aW1lb3V0X2V4cGVjdGVkOw0KPiArCXUzMiB2YWw7DQo+ICsNCj4gKwlpY2xfdGNfcG9y dF9hc3NlcnRfcmVmX2hlbGQoZGV2X3ByaXYsIHBvd2VyX3dlbGwsIGRpZ19wb3J0KTsNCj4gKw0K PiArCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIERQX0FVWF9DSF9DVEwoYXV4X2NoKSk7 DQo+ICsJdmFsICY9IH5EUF9BVVhfQ0hfQ1RMX1RCVF9JTzsNCj4gKwlpZiAoaXNfdGJ0KQ0KPiAr CQl2YWwgfD0gRFBfQVVYX0NIX0NUTF9UQlRfSU87DQo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3By aXYsIERQX0FVWF9DSF9DVEwoYXV4X2NoKSwgdmFsKTsNCj4gKw0KPiArCXZhbCA9IGludGVsX2Rl X3JlYWQoZGV2X3ByaXYsIHJlZ3MtPmRyaXZlcik7DQo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3By aXYsIHJlZ3MtPmRyaXZlciwNCj4gKwkJICAgICAgIHZhbCB8IEhTV19QV1JfV0VMTF9DVExfUkVR KHBvd2VyX3dlbGwtPmRlc2MtDQo+ID5oc3cuaWR4KSk7DQo+ICsNCj4gKwkvKg0KPiArCSAqIEFu IEFVWCB0aW1lb3V0IGlzIGV4cGVjdGVkIGlmIHRoZSBUQlQgRFAgdHVubmVsIGlzIGRvd24sDQo+ ICsJICogb3IgbmVlZCB0byBlbmFibGUgQVVYIG9uIGEgbGVnYWN5IFR5cGVDIHBvcnQgYXMgcGFy dCBvZiB0aGUNCj4gVEMtY29sZA0KPiArCSAqIGV4aXQgc2VxdWVuY2UuDQo+ICsJICovDQo+ICsJ dGltZW91dF9leHBlY3RlZCA9IGlzX3RidCB8fA0KPiBpbnRlbF90Y19jb2xkX3JlcXVpcmVzX2F1 eF9wdyhkaWdfcG9ydCk7DQo+ICsJaWYgKERJU1BMQVlfVkVSKGRldl9wcml2KSA9PSAxMSAmJg0K PiBpbnRlbF90Y19jb2xkX3JlcXVpcmVzX2F1eF9wdyhkaWdfcG9ydCkpDQo+ICsJCWljbF90Y19j b2xkX2V4aXQoZGV2X3ByaXYpOw0KPiArDQo+ICsJaHN3X3dhaXRfZm9yX3Bvd2VyX3dlbGxfZW5h YmxlKGRldl9wcml2LCBwb3dlcl93ZWxsLA0KPiB0aW1lb3V0X2V4cGVjdGVkKTsNCj4gKw0KPiAr CWlmIChESVNQTEFZX1ZFUihkZXZfcHJpdikgPj0gMTIgJiYgIWlzX3RidCkgew0KPiArCQllbnVt IHRjX3BvcnQgdGNfcG9ydDsNCj4gKw0KPiArCQl0Y19wb3J0ID0gVEdMX0FVWF9QV19UT19UQ19Q T1JUKHBvd2VyX3dlbGwtPmRlc2MtDQo+ID5oc3cuaWR4KTsNCj4gKwkJaW50ZWxfZGVfd3JpdGUo ZGV2X3ByaXYsIEhJUF9JTkRFWF9SRUcodGNfcG9ydCksDQo+ICsJCQkgICAgICAgSElQX0lOREVY X1ZBTCh0Y19wb3J0LCAweDIpKTsNCj4gKw0KPiArCQlpZiAoaW50ZWxfZGVfd2FpdF9mb3Jfc2V0 KGRldl9wcml2LA0KPiBES0xfQ01OX1VDX0RXXzI3KHRjX3BvcnQpLA0KPiArCQkJCQkgIERLTF9D TU5fVUNfRFcyN19VQ19IRUFMVEgsDQo+IDEpKQ0KPiArCQkJZHJtX3dhcm4oJmRldl9wcml2LT5k cm0sDQo+ICsJCQkJICJUaW1lb3V0IHdhaXRpbmcgVEMgdUMgaGVhbHRoXG4iKTsNCj4gKwl9DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICtpY2xfdGNfcGh5X2F1eF9wb3dlcl93ZWxsX2Rp c2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LA0KPiArCQkJCSAgc3RydWN0 IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbCkNCj4gK3sNCj4gKwllbnVtIGF1eF9jaCBhdXhf Y2ggPSBpY2xfYXV4X3B3X3RvX2NoKHBvd2VyX3dlbGwpOw0KPiArCXN0cnVjdCBpbnRlbF9kaWdp dGFsX3BvcnQgKmRpZ19wb3J0ID0NCj4gYXV4X2NoX3RvX2RpZ2l0YWxfcG9ydChkZXZfcHJpdiwg YXV4X2NoKTsNCj4gKw0KPiArCWljbF90Y19wb3J0X2Fzc2VydF9yZWZfaGVsZChkZXZfcHJpdiwg cG93ZXJfd2VsbCwgZGlnX3BvcnQpOw0KPiArDQo+ICsJaHN3X3Bvd2VyX3dlbGxfZGlzYWJsZShk ZXZfcHJpdiwgcG93ZXJfd2VsbCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICtpY2xf YXV4X3Bvd2VyX3dlbGxfZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwN Cj4gKwkJCSAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbCkNCj4gK3sNCj4gKwll bnVtIHBoeSBwaHkgPSBpY2xfYXV4X3B3X3RvX3BoeShkZXZfcHJpdiwgcG93ZXJfd2VsbCk7DQo+ ICsNCj4gKwlpZiAoaW50ZWxfcGh5X2lzX3RjKGRldl9wcml2LCBwaHkpKQ0KPiArCQlyZXR1cm4g aWNsX3RjX3BoeV9hdXhfcG93ZXJfd2VsbF9lbmFibGUoZGV2X3ByaXYsDQo+IHBvd2VyX3dlbGwp Ow0KPiArCWVsc2UgaWYgKElTX0lDRUxBS0UoZGV2X3ByaXYpKQ0KPiArCQlyZXR1cm4gaWNsX2Nv bWJvX3BoeV9hdXhfcG93ZXJfd2VsbF9lbmFibGUoZGV2X3ByaXYsDQo+ICsJCQkJCQkJICAgcG93 ZXJfd2VsbCk7DQo+ICsJZWxzZQ0KPiArCQlyZXR1cm4gaHN3X3Bvd2VyX3dlbGxfZW5hYmxlKGRl dl9wcml2LCBwb3dlcl93ZWxsKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK2ljbF9h dXhfcG93ZXJfd2VsbF9kaXNhYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwN Cj4gKwkJCSAgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwpDQo+ICt7DQo+ICsJ ZW51bSBwaHkgcGh5ID0gaWNsX2F1eF9wd190b19waHkoZGV2X3ByaXYsIHBvd2VyX3dlbGwpOw0K PiArDQo+ICsJaWYgKGludGVsX3BoeV9pc190YyhkZXZfcHJpdiwgcGh5KSkNCj4gKwkJcmV0dXJu IGljbF90Y19waHlfYXV4X3Bvd2VyX3dlbGxfZGlzYWJsZShkZXZfcHJpdiwNCj4gcG93ZXJfd2Vs bCk7DQo+ICsJZWxzZSBpZiAoSVNfSUNFTEFLRShkZXZfcHJpdikpDQo+ICsJCXJldHVybiBpY2xf Y29tYm9fcGh5X2F1eF9wb3dlcl93ZWxsX2Rpc2FibGUoZGV2X3ByaXYsDQo+ICsJCQkJCQkJICAg IHBvd2VyX3dlbGwpDQo+IDsNCj4gKwllbHNlDQo+ICsJCXJldHVybiBoc3dfcG93ZXJfd2VsbF9k aXNhYmxlKGRldl9wcml2LCBwb3dlcl93ZWxsKTsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIFdl IHNob3VsZCBvbmx5IHVzZSB0aGUgcG93ZXIgd2VsbCBpZiB3ZSBleHBsaWNpdGx5IGFza2VkIHRo ZQ0KPiBoYXJkd2FyZSB0bw0KPiArICogZW5hYmxlIGl0LCBzbyBjaGVjayBpZiBpdCdzIGVuYWJs ZWQgYW5kIGFsc28gY2hlY2sgaWYgd2UndmUNCj4gcmVxdWVzdGVkIGl0IHRvDQo+ICsgKiBiZSBl bmFibGVkLg0KPiArICovDQo+ICtzdGF0aWMgYm9vbCBoc3dfcG93ZXJfd2VsbF9lbmFibGVkKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlDQo+ICpkZXZfcHJpdiwNCj4gKwkJCQkgICBzdHJ1Y3QgaTkx NV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsKQ0KPiArew0KPiArCWNvbnN0IHN0cnVjdCBpOTE1X3Bv d2VyX3dlbGxfcmVncyAqcmVncyA9IHBvd2VyX3dlbGwtPmRlc2MtDQo+ID5vcHMtPnJlZ3M7DQo+ ICsJZW51bSBpOTE1X3Bvd2VyX3dlbGxfaWQgaWQgPSBwb3dlcl93ZWxsLT5kZXNjLT5pZDsNCj4g KwlpbnQgcHdfaWR4ID0gcG93ZXJfd2VsbC0+ZGVzYy0+aHN3LmlkeDsNCj4gKwl1MzIgbWFzayA9 IEhTV19QV1JfV0VMTF9DVExfUkVRKHB3X2lkeCkgfA0KPiArCQkgICBIU1dfUFdSX1dFTExfQ1RM X1NUQVRFKHB3X2lkeCk7DQo+ICsJdTMyIHZhbDsNCj4gKw0KPiArCXZhbCA9IGludGVsX2RlX3Jl YWQoZGV2X3ByaXYsIHJlZ3MtPmRyaXZlcik7DQo+ICsNCj4gKwkvKg0KPiArCSAqIE9uIEdFTjkg YmlnIGNvcmUgZHVlIHRvIGEgRE1DIGJ1ZyB0aGUgZHJpdmVyJ3MgcmVxdWVzdCBiaXRzDQo+IGZv ciBQVzENCj4gKwkgKiBhbmQgdGhlIE1JU0NfSU8gUFcgd2lsbCBiZSBub3QgcmVzdG9yZWQsIHNv IGNoZWNrIGluc3RlYWQNCj4gZm9yIHRoZQ0KPiArCSAqIEJJT1MncyBvd24gcmVxdWVzdCBiaXRz LCB3aGljaCBhcmUgZm9yY2VkLW9uIGZvciB0aGVzZSBwb3dlcg0KPiB3ZWxscw0KPiArCSAqIHdo ZW4gZXhpdGluZyBEQzUvNi4NCj4gKwkgKi8NCj4gKwlpZiAoRElTUExBWV9WRVIoZGV2X3ByaXYp ID09IDkgJiYgIUlTX0JST1hUT04oZGV2X3ByaXYpICYmDQo+ICsJICAgIChpZCA9PSBTS0xfRElT UF9QV18xIHx8IGlkID09IFNLTF9ESVNQX1BXX01JU0NfSU8pKQ0KPiArCQl2YWwgfD0gaW50ZWxf ZGVfcmVhZChkZXZfcHJpdiwgcmVncy0+Ymlvcyk7DQo+ICsNCj4gKwlyZXR1cm4gKHZhbCAmIG1h c2spID09IG1hc2s7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGFzc2VydF9jYW5fZW5hYmxl X2RjOShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+ICt7DQo+ICsJZHJtX1dB Uk5fT05DRSgmZGV2X3ByaXYtPmRybSwNCj4gKwkJICAgICAgKGludGVsX2RlX3JlYWQoZGV2X3By aXYsIERDX1NUQVRFX0VOKSAmDQo+IERDX1NUQVRFX0VOX0RDOSksDQo+ICsJCSAgICAgICJEQzkg YWxyZWFkeSBwcm9ncmFtbWVkIHRvIGJlIGVuYWJsZWQuXG4iKTsNCj4gKwlkcm1fV0FSTl9PTkNF KCZkZXZfcHJpdi0+ZHJtLA0KPiArCQkgICAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBEQ19T VEFURV9FTikgJg0KPiArCQkgICAgICBEQ19TVEFURV9FTl9VUFRPX0RDNSwNCj4gKwkJICAgICAg IkRDNSBzdGlsbCBub3QgZGlzYWJsZWQgdG8gZW5hYmxlIERDOS5cbiIpOw0KPiArCWRybV9XQVJO X09OQ0UoJmRldl9wcml2LT5kcm0sDQo+ICsJCSAgICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYs IEhTV19QV1JfV0VMTF9DVEwyKSAmDQo+ICsJCSAgICAgIEhTV19QV1JfV0VMTF9DVExfUkVRKFNL TF9QV19DVExfSURYX1BXXzIpLA0KPiArCQkgICAgICAiUG93ZXIgd2VsbCAyIG9uLlxuIik7DQo+ ICsJZHJtX1dBUk5fT05DRSgmZGV2X3ByaXYtPmRybSwgaW50ZWxfaXJxc19lbmFibGVkKGRldl9w cml2KSwNCj4gKwkJICAgICAgIkludGVycnVwdHMgbm90IGRpc2FibGVkIHlldC5cbiIpOw0KPiAr DQo+ICsJIC8qDQo+ICsJICAqIFRPRE86IGNoZWNrIGZvciB0aGUgZm9sbG93aW5nIHRvIHZlcmlm eSB0aGUgY29uZGl0aW9ucyB0bw0KPiBlbnRlciBEQzkNCj4gKwkgICogc3RhdGUgYXJlIHNhdGlz ZmllZDoNCj4gKwkgICogMV0gQ2hlY2sgcmVsZXZhbnQgZGlzcGxheSBlbmdpbmUgcmVnaXN0ZXJz IHRvIHZlcmlmeSBpZg0KPiBtb2RlIHNldA0KPiArCSAgKiBkaXNhYmxlIHNlcXVlbmNlIHdhcyBm b2xsb3dlZC4NCj4gKwkgICogMl0gQ2hlY2sgaWYgZGlzcGxheSB1bmluaXRpYWxpemUgc2VxdWVu Y2UgaXMgaW5pdGlhbGl6ZWQuDQo+ICsJICAqLw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBh c3NlcnRfY2FuX2Rpc2FibGVfZGM5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlDQo+ICpkZXZfcHJp dikNCj4gK3sNCj4gKwlkcm1fV0FSTl9PTkNFKCZkZXZfcHJpdi0+ZHJtLCBpbnRlbF9pcnFzX2Vu YWJsZWQoZGV2X3ByaXYpLA0KPiArCQkgICAgICAiSW50ZXJydXB0cyBub3QgZGlzYWJsZWQgeWV0 LlxuIik7DQo+ICsJZHJtX1dBUk5fT05DRSgmZGV2X3ByaXYtPmRybSwNCj4gKwkJICAgICAgaW50 ZWxfZGVfcmVhZChkZXZfcHJpdiwgRENfU1RBVEVfRU4pICYNCj4gKwkJICAgICAgRENfU1RBVEVf RU5fVVBUT19EQzUsDQo+ICsJCSAgICAgICJEQzUgc3RpbGwgbm90IGRpc2FibGVkLlxuIik7DQo+ ICsNCj4gKwkgLyoNCj4gKwkgICogVE9ETzogY2hlY2sgZm9yIHRoZSBmb2xsb3dpbmcgdG8gdmVy aWZ5IERDOSBzdGF0ZSB3YXMNCj4gaW5kZWVkDQo+ICsJICAqIGVudGVyZWQgYmVmb3JlIHByb2dy YW1taW5nIHRvIGRpc2FibGUgaXQ6DQo+ICsJICAqIDFdIENoZWNrIHJlbGV2YW50IGRpc3BsYXkg ZW5naW5lIHJlZ2lzdGVycyB0byB2ZXJpZnkgaWYNCj4gbW9kZQ0KPiArCSAgKiAgc2V0IGRpc2Fi bGUgc2VxdWVuY2Ugd2FzIGZvbGxvd2VkLg0KPiArCSAgKiAyXSBDaGVjayBpZiBkaXNwbGF5IHVu aW5pdGlhbGl6ZSBzZXF1ZW5jZSBpcyBpbml0aWFsaXplZC4NCj4gKwkgICovDQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIGdlbjlfd3JpdGVfZGNfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LA0KPiArCQkJCXUzMiBzdGF0ZSkNCj4gK3sNCj4gKwlpbnQgcmV3cml0ZXMg PSAwOw0KPiArCWludCByZXJlYWRzID0gMDsNCj4gKwl1MzIgdjsNCj4gKw0KPiArCWludGVsX2Rl X3dyaXRlKGRldl9wcml2LCBEQ19TVEFURV9FTiwgc3RhdGUpOw0KPiArDQo+ICsJLyogSXQgaGFz IGJlZW4gb2JzZXJ2ZWQgdGhhdCBkaXNhYmxpbmcgdGhlIGRjNiBzdGF0ZSBzb21ldGltZXMNCj4g KwkgKiBkb2Vzbid0IHN0aWNrIGFuZCBkbWMga2VlcHMgcmV0dXJuaW5nIG9sZCB2YWx1ZS4gTWFr ZSBzdXJlDQo+ICsJICogdGhlIHdyaXRlIHJlYWxseSBzdGlja3MgZW5vdWdoIHRpbWVzIGFuZCBh bHNvIGZvcmNlIHJld3JpdGUNCj4gdW50aWwNCj4gKwkgKiB3ZSBhcmUgY29uZmlkZW50IHRoYXQg c3RhdGUgaXMgZXhhY3RseSB3aGF0IHdlIHdhbnQuDQo+ICsJICovDQo+ICsJZG8gIHsNCj4gKwkJ diA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIERDX1NUQVRFX0VOKTsNCj4gKw0KPiArCQlpZiAo diAhPSBzdGF0ZSkgew0KPiArCQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIERDX1NUQVRFX0VO LCBzdGF0ZSk7DQo+ICsJCQlyZXdyaXRlcysrOw0KPiArCQkJcmVyZWFkcyA9IDA7DQo+ICsJCX0g ZWxzZSBpZiAocmVyZWFkcysrID4gNSkgew0KPiArCQkJYnJlYWs7DQo+ICsJCX0NCj4gKw0KPiAr CX0gd2hpbGUgKHJld3JpdGVzIDwgMTAwKTsNCj4gKw0KPiArCWlmICh2ICE9IHN0YXRlKQ0KPiAr CQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLA0KPiArCQkJIldyaXRpbmcgZGMgc3RhdGUgdG8gMHgl eCBmYWlsZWQsIG5vdyAweCV4XG4iLA0KPiArCQkJc3RhdGUsIHYpOw0KPiArDQo+ICsJLyogTW9z dCBvZiB0aGUgdGltZXMgd2UgbmVlZCBvbmUgcmV0cnksIGF2b2lkIHNwYW0gKi8NCj4gKwlpZiAo cmV3cml0ZXMgPiAxKQ0KPiArCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwNCj4gKwkJCSAg ICAiUmV3cm90ZSBkYyBzdGF0ZSB0byAweCV4ICVkIHRpbWVzXG4iLA0KPiArCQkJICAgIHN0YXRl LCByZXdyaXRlcyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB1MzIgZ2VuOV9kY19tYXNrKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikNCj4gK3sNCj4gKwl1MzIgbWFzazsNCj4gKw0K PiArCW1hc2sgPSBEQ19TVEFURV9FTl9VUFRPX0RDNTsNCj4gKw0KPiArCWlmIChESVNQTEFZX1ZF UihkZXZfcHJpdikgPj0gMTIpDQo+ICsJCW1hc2sgfD0gRENfU1RBVEVfRU5fREMzQ08gfCBEQ19T VEFURV9FTl9VUFRPX0RDNg0KPiArCQkJCQkgIHwgRENfU1RBVEVfRU5fREM5Ow0KPiArCWVsc2Ug aWYgKERJU1BMQVlfVkVSKGRldl9wcml2KSA9PSAxMSkNCj4gKwkJbWFzayB8PSBEQ19TVEFURV9F Tl9VUFRPX0RDNiB8IERDX1NUQVRFX0VOX0RDOTsNCj4gKwllbHNlIGlmIChJU19HRU1JTklMQUtF KGRldl9wcml2KSB8fCBJU19CUk9YVE9OKGRldl9wcml2KSkNCj4gKwkJbWFzayB8PSBEQ19TVEFU RV9FTl9EQzk7DQo+ICsJZWxzZQ0KPiArCQltYXNrIHw9IERDX1NUQVRFX0VOX1VQVE9fREM2Ow0K PiArDQo+ICsJcmV0dXJuIG1hc2s7DQo+ICt9DQo+ICsNCj4gK3ZvaWQgZ2VuOV9zYW5pdGl6ZV9k Y19zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+ICt7DQo+ICsJdTMy IHZhbDsNCj4gKw0KPiArCWlmICghSEFTX0RJU1BMQVkoZGV2X3ByaXYpKQ0KPiArCQlyZXR1cm47 DQo+ICsNCj4gKwl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBEQ19TVEFURV9FTikgJg0K PiBnZW45X2RjX21hc2soZGV2X3ByaXYpOw0KPiArDQo+ICsJZHJtX2RiZ19rbXMoJmRldl9wcml2 LT5kcm0sDQo+ICsJCSAgICAiUmVzZXR0aW5nIERDIHN0YXRlIHRyYWNraW5nIGZyb20gJTAyeCB0 byAlMDJ4XG4iLA0KPiArCQkgICAgZGV2X3ByaXYtPmRtYy5kY19zdGF0ZSwgdmFsKTsNCj4gKwlk ZXZfcHJpdi0+ZG1jLmRjX3N0YXRlID0gdmFsOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGdl bjlfc2V0X2RjX3N0YXRlIC0gc2V0IHRhcmdldCBkaXNwbGF5IEMgcG93ZXIgc3RhdGUNCj4gKyAq IEBkZXZfcHJpdjogaTkxNSBkZXZpY2UgaW5zdGFuY2UNCj4gKyAqIEBzdGF0ZTogdGFyZ2V0IERD IHBvd2VyIHN0YXRlDQo+ICsgKiAtIERDX1NUQVRFX0RJU0FCTEUNCj4gKyAqIC0gRENfU1RBVEVf RU5fVVBUT19EQzUNCj4gKyAqIC0gRENfU1RBVEVfRU5fVVBUT19EQzYNCj4gKyAqIC0gRENfU1RB VEVfRU5fREM5DQo+ICsgKg0KPiArICogU2lnbmFsIHRvIERNQyBmaXJtd2FyZS9IVyB0aGUgdGFy Z2V0IERDIHBvd2VyIHN0YXRlIHBhc3NlZCBpbg0KPiBAc3RhdGUuDQo+ICsgKiBETUMvSFcgY2Fu IHR1cm4gb2ZmIGluZGl2aWR1YWwgZGlzcGxheSBjbG9ja3MgYW5kIHBvd2VyIHJhaWxzDQo+IHdo ZW4gZW50ZXJpbmcNCj4gKyAqIGEgZGVlcGVyIERDIHBvd2VyIHN0YXRlIChoaWdoZXIgaW4gbnVt YmVyKSBhbmQgdHVybnMgdGhlc2UgYmFjaw0KPiB3aGVuIGV4aXRpbmcNCj4gKyAqIHRoYXQgc3Rh dGUgdG8gYSBzaGFsbG93ZXIgcG93ZXIgc3RhdGUgKGxvd2VyIGluIG51bWJlcikuIFRoZSBIVw0K PiB3aWxsIGRlY2lkZQ0KPiArICogd2hlbiB0byBhY3R1YWxseSBlbnRlciBhIGdpdmVuIHN0YXRl IG9uIGFuIG9uLWRlbWFuZCBiYXNpcywgZm9yDQo+IGluc3RhbmNlDQo+ICsgKiBkZXBlbmRpbmcg b24gdGhlIGFjdGl2ZSBzdGF0ZSBvZiBkaXNwbGF5IHBpcGVzLiBUaGUgc3RhdGUgb2YNCj4gZGlz cGxheQ0KPiArICogcmVnaXN0ZXJzIGJhY2tlZCBieSBhZmZlY3RlZCBwb3dlciByYWlscyBhcmUg c2F2ZWQvcmVzdG9yZWQgYXMNCj4gbmVlZGVkLg0KPiArICoNCj4gKyAqIEJhc2VkIG9uIHRoZSBh Ym92ZSBlbmFibGluZyBhIGRlZXBlciBEQyBwb3dlciBzdGF0ZSBpcw0KPiBhc3luY2hyb25vdXMg d3J0Lg0KPiArICogZW5hYmxpbmcgaXQuIERpc2FibGluZyBhIGRlZXBlciBwb3dlciBzdGF0ZSBp cyBzeW5jaHJvbm91czogZm9yDQo+IGluc3RhbmNlDQo+ICsgKiBzZXR0aW5nICVEQ19TVEFURV9E SVNBQkxFIHdvbid0IGNvbXBsZXRlIHVudGlsIGFsbCBIVyByZXNvdXJjZXMNCj4gYXJlIHR1cm5l ZA0KPiArICogYmFjayBvbiBhbmQgcmVnaXN0ZXIgc3RhdGUgaXMgcmVzdG9yZWQuIFRoaXMgaXMg Z3VhcmFudGVlZCBieSB0aGUNCj4gTU1JTyB3cml0ZQ0KPiArICogdG8gRENfU1RBVEVfRU4gYmxv Y2tpbmcgdW50aWwgdGhlIHN0YXRlIGlzIHJlc3RvcmVkLg0KPiArICovDQo+ICt2b2lkIGdlbjlf c2V0X2RjX3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHN0YXRl KQ0KPiArew0KPiArCXUzMiB2YWw7DQo+ICsJdTMyIG1hc2s7DQo+ICsNCj4gKwlpZiAoIUhBU19E SVNQTEFZKGRldl9wcml2KSkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJaWYgKGRybV9XQVJOX09O X09OQ0UoJmRldl9wcml2LT5kcm0sDQo+ICsJCQkgICAgIHN0YXRlICYgfmRldl9wcml2LT5kbWMu YWxsb3dlZF9kY19tYXNrKSkNCj4gKwkJc3RhdGUgJj0gZGV2X3ByaXYtPmRtYy5hbGxvd2VkX2Rj X21hc2s7DQo+ICsNCj4gKwl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBEQ19TVEFURV9F Tik7DQo+ICsJbWFzayA9IGdlbjlfZGNfbWFzayhkZXZfcHJpdik7DQo+ICsJZHJtX2RiZ19rbXMo JmRldl9wcml2LT5kcm0sICJTZXR0aW5nIERDIHN0YXRlIGZyb20gJTAyeCB0bw0KPiAlMDJ4XG4i LA0KPiArCQkgICAgdmFsICYgbWFzaywgc3RhdGUpOw0KPiArDQo+ICsJLyogQ2hlY2sgaWYgRE1D IGlzIGlnbm9yaW5nIG91ciBEQyBzdGF0ZSByZXF1ZXN0cyAqLw0KPiArCWlmICgodmFsICYgbWFz aykgIT0gZGV2X3ByaXYtPmRtYy5kY19zdGF0ZSkNCj4gKwkJZHJtX2VycigmZGV2X3ByaXYtPmRy bSwgIkRDIHN0YXRlIG1pc21hdGNoICgweCV4IC0+DQo+IDB4JXgpXG4iLA0KPiArCQkJZGV2X3By aXYtPmRtYy5kY19zdGF0ZSwgdmFsICYgbWFzayk7DQo+ICsNCj4gKwl2YWwgJj0gfm1hc2s7DQo+ ICsJdmFsIHw9IHN0YXRlOw0KPiArDQo+ICsJZ2VuOV93cml0ZV9kY19zdGF0ZShkZXZfcHJpdiwg dmFsKTsNCj4gKw0KPiArCWRldl9wcml2LT5kbWMuZGNfc3RhdGUgPSB2YWwgJiBtYXNrOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgdm9pZCB0Z2xfZW5hYmxlX2RjM2NvKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikNCj4gK3sNCj4gKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwg IkVuYWJsaW5nIERDM0NPXG4iKTsNCj4gKwlnZW45X3NldF9kY19zdGF0ZShkZXZfcHJpdiwgRENf U1RBVEVfRU5fREMzQ08pOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCB0Z2xfZGlzYWJsZV9k YzNjbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+ICt7DQo+ICsJdTMyIHZh bDsNCj4gKw0KPiArCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRGlzYWJsaW5nIERDM0NP XG4iKTsNCj4gKwl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBEQ19TVEFURV9FTik7DQo+ ICsJdmFsICY9IH5EQ19TVEFURV9EQzNDT19TVEFUVVM7DQo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2 X3ByaXYsIERDX1NUQVRFX0VOLCB2YWwpOw0KPiArCWdlbjlfc2V0X2RjX3N0YXRlKGRldl9wcml2 LCBEQ19TVEFURV9ESVNBQkxFKTsNCj4gKwkvKg0KPiArCSAqIERlbGF5IG9mIDIwMHVzIERDM0NP IEV4aXQgdGltZSBCLlNwZWMgNDkxOTYNCj4gKwkgKi8NCj4gKwl1c2xlZXBfcmFuZ2UoMjAwLCAy MTApOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBhc3NlcnRfZG1jX2xvYWRlZChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+ICt7DQo+ICsJZHJtX1dBUk5fT05DRSgmZGV2 X3ByaXYtPmRybSwNCj4gKwkJICAgICAgIWludGVsX2RlX3JlYWQoZGV2X3ByaXYsDQo+ICsJCQkJ ICAgICBETUNfUFJPR1JBTShkZXZfcHJpdi0NCj4gPmRtYy5kbWNfaW5mb1tETUNfRldfTUFJTl0u c3RhcnRfbW1pb2FkZHIsIDApKSwNCj4gKwkJCQkgICAgICJETUMgcHJvZ3JhbSBzdG9yYWdlIHN0 YXJ0IGlzDQo+IE5VTExcbiIpOw0KPiArCWRybV9XQVJOX09OQ0UoJmRldl9wcml2LT5kcm0sICFp bnRlbF9kZV9yZWFkKGRldl9wcml2LA0KPiBETUNfU1NQX0JBU0UpLA0KPiArCQkgICAgICAiRE1D IFNTUCBCYXNlIE5vdCBmaW5lXG4iKTsNCj4gKwlkcm1fV0FSTl9PTkNFKCZkZXZfcHJpdi0+ZHJt LCAhaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwNCj4gRE1DX0hUUF9TS0wpLA0KPiArCQkgICAgICAi RE1DIEhUUCBOb3QgZmluZVxuIik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGFzc2VydF9j YW5fZW5hYmxlX2RjNShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+ICt7DQo+ ICsJZW51bSBpOTE1X3Bvd2VyX3dlbGxfaWQgaGlnaF9wZzsNCj4gKw0KPiArCS8qIFBvd2VyIHdl bGxzIGF0IHRoaXMgbGV2ZWwgYW5kIGFib3ZlIG11c3QgYmUgZGlzYWJsZWQgZm9yIERDNQ0KPiBl bnRyeSAqLw0KPiArCWlmIChESVNQTEFZX1ZFUihkZXZfcHJpdikgPT0gMTIpDQo+ICsJCWhpZ2hf cGcgPSBJQ0xfRElTUF9QV18zOw0KPiArCWVsc2UNCj4gKwkJaGlnaF9wZyA9IFNLTF9ESVNQX1BX XzI7DQo+ICsNCj4gKwlkcm1fV0FSTl9PTkNFKCZkZXZfcHJpdi0+ZHJtLA0KPiArCQkgICAgICBp bnRlbF9kaXNwbGF5X3Bvd2VyX3dlbGxfaXNfZW5hYmxlZChkZXZfcHJpdiwNCj4gaGlnaF9wZyks DQo+ICsJCSAgICAgICJQb3dlciB3ZWxscyBhYm92ZSBwbGF0Zm9ybSdzIERDNSBsaW1pdCBzdGls bA0KPiBlbmFibGVkLlxuIik7DQo+ICsNCj4gKwlkcm1fV0FSTl9PTkNFKCZkZXZfcHJpdi0+ZHJt LA0KPiArCQkgICAgICAoaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgRENfU1RBVEVfRU4pICYNCj4g KwkJICAgICAgIERDX1NUQVRFX0VOX1VQVE9fREM1KSwNCj4gKwkJICAgICAgIkRDNSBhbHJlYWR5 IHByb2dyYW1tZWQgdG8gYmUgZW5hYmxlZC5cbiIpOw0KPiArCWFzc2VydF9ycG1fd2FrZWxvY2tf aGVsZCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0pOw0KPiArDQo+ICsJYXNzZXJ0X2RtY19sb2FkZWQo ZGV2X3ByaXYpOw0KPiArfQ0KPiArDQo+ICt2b2lkIGdlbjlfZW5hYmxlX2RjNShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+ICt7DQo+ICsJYXNzZXJ0X2Nhbl9lbmFibGVfZGM1 KGRldl9wcml2KTsNCj4gKw0KPiArCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRW5hYmxp bmcgREM1XG4iKTsNCj4gKw0KPiArCS8qIFdhIERpc3BsYXkgIzExODM6IHNrbCxrYmwsY2ZsICov DQo+ICsJaWYgKERJU1BMQVlfVkVSKGRldl9wcml2KSA9PSA5ICYmICFJU19CUk9YVE9OKGRldl9w cml2KSkNCj4gKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEdFTjhfQ0hJQ0tFTl9EQ1BSXzEs DQo+ICsJCQkgICAgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwNCj4gR0VOOF9DSElDS0VOX0RD UFJfMSkgfCBTS0xfU0VMRUNUX0FMVEVSTkFURV9EQ19FWElUKTsNCj4gKw0KPiArCWdlbjlfc2V0 X2RjX3N0YXRlKGRldl9wcml2LCBEQ19TVEFURV9FTl9VUFRPX0RDNSk7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyB2b2lkIGFzc2VydF9jYW5fZW5hYmxlX2RjNihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpDQo+ICt7DQo+ICsJZHJtX1dBUk5fT05DRSgmZGV2X3ByaXYtPmRybSwNCj4g KwkJICAgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgVVRJTF9QSU5fQ1RMKSAmDQo+IFVUSUxf UElOX0VOQUJMRSwNCj4gKwkJICAgICAgIkJhY2tsaWdodCBpcyBub3QgZGlzYWJsZWQuXG4iKTsN Cj4gKwlkcm1fV0FSTl9PTkNFKCZkZXZfcHJpdi0+ZHJtLA0KPiArCQkgICAgICAoaW50ZWxfZGVf cmVhZChkZXZfcHJpdiwgRENfU1RBVEVfRU4pICYNCj4gKwkJICAgICAgIERDX1NUQVRFX0VOX1VQ VE9fREM2KSwNCj4gKwkJICAgICAgIkRDNiBhbHJlYWR5IHByb2dyYW1tZWQgdG8gYmUgZW5hYmxl ZC5cbiIpOw0KPiArDQo+ICsJYXNzZXJ0X2RtY19sb2FkZWQoZGV2X3ByaXYpOw0KPiArfQ0KPiAr DQo+ICt2b2lkIHNrbF9lbmFibGVfZGM2KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikNCj4gK3sNCj4gKwlhc3NlcnRfY2FuX2VuYWJsZV9kYzYoZGV2X3ByaXYpOw0KPiArDQo+ICsJ ZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJFbmFibGluZyBEQzZcbiIpOw0KPiArDQo+ICsJ LyogV2EgRGlzcGxheSAjMTE4Mzogc2tsLGtibCxjZmwgKi8NCj4gKwlpZiAoRElTUExBWV9WRVIo ZGV2X3ByaXYpID09IDkgJiYgIUlTX0JST1hUT04oZGV2X3ByaXYpKQ0KPiArCQlpbnRlbF9kZV93 cml0ZShkZXZfcHJpdiwgR0VOOF9DSElDS0VOX0RDUFJfMSwNCj4gKwkJCSAgICAgICBpbnRlbF9k ZV9yZWFkKGRldl9wcml2LA0KPiBHRU44X0NISUNLRU5fRENQUl8xKSB8IFNLTF9TRUxFQ1RfQUxU RVJOQVRFX0RDX0VYSVQpOw0KPiArDQo+ICsJZ2VuOV9zZXRfZGNfc3RhdGUoZGV2X3ByaXYsIERD X1NUQVRFX0VOX1VQVE9fREM2KTsNCj4gK30NCj4gKw0KPiArdm9pZCBieHRfZW5hYmxlX2RjOShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+ICt7DQo+ICsJYXNzZXJ0X2Nhbl9l bmFibGVfZGM5KGRldl9wcml2KTsNCj4gKw0KPiArCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJt LCAiRW5hYmxpbmcgREM5XG4iKTsNCj4gKwkvKg0KPiArCSAqIFBvd2VyIHNlcXVlbmNlciByZXNl dCBpcyBub3QgbmVlZGVkIG9uDQo+ICsJICogcGxhdGZvcm1zIHdpdGggU291dGggRGlzcGxheSBF bmdpbmUgb24gUENILA0KPiArCSAqIGJlY2F1c2UgUFBTIHJlZ2lzdGVycyBhcmUgYWx3YXlzIG9u Lg0KPiArCSAqLw0KPiArCWlmICghSEFTX1BDSF9TUExJVChkZXZfcHJpdikpDQo+ICsJCWludGVs X3Bwc19yZXNldF9hbGwoZGV2X3ByaXYpOw0KPiArCWdlbjlfc2V0X2RjX3N0YXRlKGRldl9wcml2 LCBEQ19TVEFURV9FTl9EQzkpOw0KPiArfQ0KPiArDQo+ICt2b2lkIGJ4dF9kaXNhYmxlX2RjOShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+ICt7DQo+ICsJYXNzZXJ0X2Nhbl9k aXNhYmxlX2RjOShkZXZfcHJpdik7DQo+ICsNCj4gKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRy bSwgIkRpc2FibGluZyBEQzlcbiIpOw0KPiArDQo+ICsJZ2VuOV9zZXRfZGNfc3RhdGUoZGV2X3By aXYsIERDX1NUQVRFX0RJU0FCTEUpOw0KPiArDQo+ICsJaW50ZWxfcHBzX3VubG9ja19yZWdzX3dh KGRldl9wcml2KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaHN3X3Bvd2VyX3dlbGxfc3lu Y19odyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYsDQo+ICsJCQkJICAgc3Ry dWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbCkNCj4gK3sNCj4gKwljb25zdCBzdHJ1Y3Qg aTkxNV9wb3dlcl93ZWxsX3JlZ3MgKnJlZ3MgPSBwb3dlcl93ZWxsLT5kZXNjLQ0KPiA+b3BzLT5y ZWdzOw0KPiArCWludCBwd19pZHggPSBwb3dlcl93ZWxsLT5kZXNjLT5oc3cuaWR4Ow0KPiArCXUz MiBtYXNrID0gSFNXX1BXUl9XRUxMX0NUTF9SRVEocHdfaWR4KTsNCj4gKwl1MzIgYmlvc19yZXEg PSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWdzLT5iaW9zKTsNCj4gKw0KPiArCS8qIFRha2Ug b3ZlciB0aGUgcmVxdWVzdCBiaXQgaWYgc2V0IGJ5IEJJT1MuICovDQo+ICsJaWYgKGJpb3NfcmVx ICYgbWFzaykgew0KPiArCQl1MzIgZHJ2X3JlcSA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJl Z3MtPmRyaXZlcik7DQo+ICsNCj4gKwkJaWYgKCEoZHJ2X3JlcSAmIG1hc2spKQ0KPiArCQkJaW50 ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZ3MtPmRyaXZlciwgZHJ2X3JlcQ0KPiB8IG1hc2spOw0K PiArCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVncy0+YmlvcywgYmlvc19yZXEgJiB+bWFz ayk7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBieHRfZHBpb19jbW5fcG93ZXJf d2VsbF9lbmFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gKmRldl9wcml2LA0KPiArCQkJ CQkgICBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsDQo+ICpwb3dlcl93ZWxsKQ0KPiArew0KPiArCWJ4 dF9kZGlfcGh5X2luaXQoZGV2X3ByaXYsIHBvd2VyX3dlbGwtPmRlc2MtPmJ4dC5waHkpOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBieHRfZHBpb19jbW5fcG93ZXJfd2VsbF9kaXNhYmxlKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlDQo+ICpkZXZfcHJpdiwNCj4gKwkJCQkJICAgIHN0cnVjdCBp OTE1X3Bvd2VyX3dlbGwNCj4gKnBvd2VyX3dlbGwpDQo+ICt7DQo+ICsJYnh0X2RkaV9waHlfdW5p bml0KGRldl9wcml2LCBwb3dlcl93ZWxsLT5kZXNjLT5ieHQucGh5KTsNCj4gK30NCj4gKw0KPiAr c3RhdGljIGJvb2wgYnh0X2RwaW9fY21uX3Bvd2VyX3dlbGxfZW5hYmxlZChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYsDQo+ICsJCQkJCSAgICBzdHJ1Y3QgaTkxNV9wb3dlcl93 ZWxsDQo+ICpwb3dlcl93ZWxsKQ0KPiArew0KPiArCXJldHVybiBieHRfZGRpX3BoeV9pc19lbmFi bGVkKGRldl9wcml2LCBwb3dlcl93ZWxsLT5kZXNjLQ0KPiA+Ynh0LnBoeSk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIGJ4dF92ZXJpZnlfZGRpX3BoeV9wb3dlcl93ZWxscyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYpDQo+ICt7DQo+ICsJc3RydWN0IGk5MTVfcG93ZXJf d2VsbCAqcG93ZXJfd2VsbDsNCj4gKw0KPiArCXBvd2VyX3dlbGwgPSBsb29rdXBfcG93ZXJfd2Vs bChkZXZfcHJpdiwNCj4gQlhUX0RJU1BfUFdfRFBJT19DTU5fQSk7DQo+ICsJaWYgKGludGVsX3Bv d2VyX3dlbGxfcmVmY291bnQocG93ZXJfd2VsbCkgPiAwKQ0KPiArCQlieHRfZGRpX3BoeV92ZXJp Znlfc3RhdGUoZGV2X3ByaXYsIHBvd2VyX3dlbGwtPmRlc2MtDQo+ID5ieHQucGh5KTsNCj4gKw0K PiArCXBvd2VyX3dlbGwgPSBsb29rdXBfcG93ZXJfd2VsbChkZXZfcHJpdiwNCj4gVkxWX0RJU1Bf UFdfRFBJT19DTU5fQkMpOw0KPiArCWlmIChpbnRlbF9wb3dlcl93ZWxsX3JlZmNvdW50KHBvd2Vy X3dlbGwpID4gMCkNCj4gKwkJYnh0X2RkaV9waHlfdmVyaWZ5X3N0YXRlKGRldl9wcml2LCBwb3dl cl93ZWxsLT5kZXNjLQ0KPiA+Ynh0LnBoeSk7DQo+ICsNCj4gKwlpZiAoSVNfR0VNSU5JTEFLRShk ZXZfcHJpdikpIHsNCj4gKwkJcG93ZXJfd2VsbCA9IGxvb2t1cF9wb3dlcl93ZWxsKGRldl9wcml2 LA0KPiArCQkJCQkgICAgICAgR0xLX0RJU1BfUFdfRFBJT19DTU5fQyk7DQo+ICsJCWlmIChpbnRl bF9wb3dlcl93ZWxsX3JlZmNvdW50KHBvd2VyX3dlbGwpID4gMCkNCj4gKwkJCWJ4dF9kZGlfcGh5 X3ZlcmlmeV9zdGF0ZShkZXZfcHJpdiwNCj4gKwkJCQkJCSBwb3dlcl93ZWxsLT5kZXNjLQ0KPiA+ Ynh0LnBoeSk7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBnZW45X2RjX29mZl9w b3dlcl93ZWxsX2VuYWJsZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gKmRldl9wcml2LA0K PiArCQkJCQkgICBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsDQo+ICpwb3dlcl93ZWxsKQ0KPiArew0K PiArCXJldHVybiAoKGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIERDX1NUQVRFX0VOKSAmDQo+IERD X1NUQVRFX0VOX0RDM0NPKSA9PSAwICYmDQo+ICsJCShpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBE Q19TVEFURV9FTikgJg0KPiBEQ19TVEFURV9FTl9VUFRPX0RDNV9EQzZfTUFTSykgPT0gMCk7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGdlbjlfYXNzZXJ0X2RidWZfZW5hYmxlZChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYpDQo+ICt7DQo+ICsJdTggaHdfZW5hYmxlZF9k YnVmX3NsaWNlcyA9DQo+IGludGVsX2VuYWJsZWRfZGJ1Zl9zbGljZXNfbWFzayhkZXZfcHJpdik7 DQo+ICsJdTggZW5hYmxlZF9kYnVmX3NsaWNlcyA9IGRldl9wcml2LT5kYnVmLmVuYWJsZWRfc2xp Y2VzOw0KPiArDQo+ICsJZHJtX1dBUk4oJmRldl9wcml2LT5kcm0sDQo+ICsJCSBod19lbmFibGVk X2RidWZfc2xpY2VzICE9IGVuYWJsZWRfZGJ1Zl9zbGljZXMsDQo+ICsJCSAiVW5leHBlY3RlZCBE QnVmIHBvd2VyIHBvd2VyIHN0YXRlICgweCUwOHgsIGV4cGVjdGVkDQo+IDB4JTA4eClcbiIsDQo+ ICsJCSBod19lbmFibGVkX2RidWZfc2xpY2VzLA0KPiArCQkgZW5hYmxlZF9kYnVmX3NsaWNlcyk7 DQo+ICt9DQo+ICsNCj4gK3ZvaWQgZ2VuOV9kaXNhYmxlX2RjX3N0YXRlcyhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+ICt7DQo+ICsJc3RydWN0IGludGVsX2NkY2xrX2NvbmZp ZyBjZGNsa19jb25maWcgPSB7fTsNCj4gKw0KPiArCWlmIChkZXZfcHJpdi0+ZG1jLnRhcmdldF9k Y19zdGF0ZSA9PSBEQ19TVEFURV9FTl9EQzNDTykgew0KPiArCQl0Z2xfZGlzYWJsZV9kYzNjbyhk ZXZfcHJpdik7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsNCj4gKwlnZW45X3NldF9kY19zdGF0 ZShkZXZfcHJpdiwgRENfU1RBVEVfRElTQUJMRSk7DQo+ICsNCj4gKwlpZiAoIUhBU19ESVNQTEFZ KGRldl9wcml2KSkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJaW50ZWxfY2RjbGtfZ2V0X2NkY2xr KGRldl9wcml2LCAmY2RjbGtfY29uZmlnKTsNCj4gKwkvKiBDYW4ndCByZWFkIG91dCB2b2x0YWdl X2xldmVsIHNvIGNhbid0IHVzZQ0KPiBpbnRlbF9jZGNsa19jaGFuZ2VkKCkgKi8NCj4gKwlkcm1f V0FSTl9PTigmZGV2X3ByaXYtPmRybSwNCj4gKwkJICAgIGludGVsX2NkY2xrX25lZWRzX21vZGVz ZXQoJmRldl9wcml2LT5jZGNsay5odywNCj4gKwkJCQkJICAgICAgJmNkY2xrX2NvbmZpZykpOw0K PiArDQo+ICsJZ2VuOV9hc3NlcnRfZGJ1Zl9lbmFibGVkKGRldl9wcml2KTsNCj4gKw0KPiArCWlm IChJU19HRU1JTklMQUtFKGRldl9wcml2KSB8fCBJU19CUk9YVE9OKGRldl9wcml2KSkNCj4gKwkJ Ynh0X3ZlcmlmeV9kZGlfcGh5X3Bvd2VyX3dlbGxzKGRldl9wcml2KTsNCj4gKw0KPiArCWlmIChE SVNQTEFZX1ZFUihkZXZfcHJpdikgPj0gMTEpDQo+ICsJCS8qDQo+ICsJCSAqIERNQyByZXRhaW5z IEhXIGNvbnRleHQgb25seSBmb3IgcG9ydCBBLCB0aGUgb3RoZXINCj4gY29tYm8NCj4gKwkJICog UEhZJ3MgSFcgY29udGV4dCBmb3IgcG9ydCBCIGlzIGxvc3QgYWZ0ZXIgREMNCj4gdHJhbnNpdGlv bnMsDQo+ICsJCSAqIHNvIHdlIG5lZWQgdG8gcmVzdG9yZSBpdCBtYW51YWxseS4NCj4gKwkJICov DQo+ICsJCWludGVsX2NvbWJvX3BoeV9pbml0KGRldl9wcml2KTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIHZvaWQgZ2VuOV9kY19vZmZfcG93ZXJfd2VsbF9lbmFibGUoc3RydWN0IGRybV9pOTE1X3By aXZhdGUNCj4gKmRldl9wcml2LA0KPiArCQkJCQkgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwNCj4g KnBvd2VyX3dlbGwpDQo+ICt7DQo+ICsJZ2VuOV9kaXNhYmxlX2RjX3N0YXRlcyhkZXZfcHJpdik7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGdlbjlfZGNfb2ZmX3Bvd2VyX3dlbGxfZGlzYWJs ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYsDQo+ICsJCQkJCSAgIHN0cnVj dCBpOTE1X3Bvd2VyX3dlbGwNCj4gKnBvd2VyX3dlbGwpDQo+ICt7DQo+ICsJaWYgKCFpbnRlbF9k bWNfaGFzX3BheWxvYWQoZGV2X3ByaXYpKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlzd2l0Y2gg KGRldl9wcml2LT5kbWMudGFyZ2V0X2RjX3N0YXRlKSB7DQo+ICsJY2FzZSBEQ19TVEFURV9FTl9E QzNDTzoNCj4gKwkJdGdsX2VuYWJsZV9kYzNjbyhkZXZfcHJpdik7DQo+ICsJCWJyZWFrOw0KPiAr CWNhc2UgRENfU1RBVEVfRU5fVVBUT19EQzY6DQo+ICsJCXNrbF9lbmFibGVfZGM2KGRldl9wcml2 KTsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBEQ19TVEFURV9FTl9VUFRPX0RDNToNCj4gKwkJZ2Vu OV9lbmFibGVfZGM1KGRldl9wcml2KTsNCj4gKwkJYnJlYWs7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgdm9pZCBpOXh4X3Bvd2VyX3dlbGxfc3luY19od19ub29wKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlDQo+ICpkZXZfcHJpdiwNCj4gKwkJCQkJIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwN Cj4gKnBvd2VyX3dlbGwpDQo+ICt7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGk5eHhfYWx3 YXlzX29uX3Bvd2VyX3dlbGxfbm9vcChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3By aXYsDQo+ICsJCQkJCSAgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwNCj4gKnBvd2VyX3dlbGwpDQo+ ICt7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIGk5eHhfYWx3YXlzX29uX3Bvd2VyX3dlbGxf ZW5hYmxlZChzdHJ1Y3QNCj4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsDQo+ICsJCQkJCSAg ICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbA0KPiAqcG93ZXJfd2VsbCkNCj4gK3sNCj4gKwlyZXR1 cm4gdHJ1ZTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaTgzMF9waXBlc19wb3dlcl93ZWxs X2VuYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYsDQo+ICsJCQkJCSBz dHJ1Y3QgaTkxNV9wb3dlcl93ZWxsDQo+ICpwb3dlcl93ZWxsKQ0KPiArew0KPiArCWlmICgoaW50 ZWxfZGVfcmVhZChkZXZfcHJpdiwgUElQRUNPTkYoUElQRV9BKSkgJg0KPiBQSVBFQ09ORl9FTkFC TEUpID09IDApDQo+ICsJCWk4MzBfZW5hYmxlX3BpcGUoZGV2X3ByaXYsIFBJUEVfQSk7DQo+ICsJ aWYgKChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQSVBFQ09ORihQSVBFX0IpKSAmDQo+IFBJUEVD T05GX0VOQUJMRSkgPT0gMCkNCj4gKwkJaTgzMF9lbmFibGVfcGlwZShkZXZfcHJpdiwgUElQRV9C KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaTgzMF9waXBlc19wb3dlcl93ZWxsX2Rpc2Fi bGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gKmRldl9wcml2LA0KPiArCQkJCQkgIHN0cnVj dCBpOTE1X3Bvd2VyX3dlbGwNCj4gKnBvd2VyX3dlbGwpDQo+ICt7DQo+ICsJaTgzMF9kaXNhYmxl X3BpcGUoZGV2X3ByaXYsIFBJUEVfQik7DQo+ICsJaTgzMF9kaXNhYmxlX3BpcGUoZGV2X3ByaXYs IFBJUEVfQSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIGk4MzBfcGlwZXNfcG93ZXJfd2Vs bF9lbmFibGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlDQo+ICpkZXZfcHJpdiwNCj4gKwkJCQkJ ICBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsDQo+ICpwb3dlcl93ZWxsKQ0KPiArew0KPiArCXJldHVy biBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQSVBFQ09ORihQSVBFX0EpKSAmDQo+IFBJUEVDT05G X0VOQUJMRSAmJg0KPiArCQlpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQSVBFQ09ORihQSVBFX0Ip KSAmDQo+IFBJUEVDT05GX0VOQUJMRTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaTgzMF9w aXBlc19wb3dlcl93ZWxsX3N5bmNfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gKmRldl9w cml2LA0KPiArCQkJCQkgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwNCj4gKnBvd2VyX3dlbGwpDQo+ ICt7DQo+ICsJaWYgKGludGVsX3Bvd2VyX3dlbGxfcmVmY291bnQocG93ZXJfd2VsbCkgPiAwKQ0K PiArCQlpODMwX3BpcGVzX3Bvd2VyX3dlbGxfZW5hYmxlKGRldl9wcml2LCBwb3dlcl93ZWxsKTsN Cj4gKwllbHNlDQo+ICsJCWk4MzBfcGlwZXNfcG93ZXJfd2VsbF9kaXNhYmxlKGRldl9wcml2LCBw b3dlcl93ZWxsKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgdmx2X3NldF9wb3dlcl93ZWxs KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwNCj4gKwkJCSAgICAgICBzdHJ1Y3Qg aTkxNV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsLCBib29sDQo+IGVuYWJsZSkNCj4gK3sNCj4gKwlp bnQgcHdfaWR4ID0gcG93ZXJfd2VsbC0+ZGVzYy0+dmx2LmlkeDsNCj4gKwl1MzIgbWFzazsNCj4g Kwl1MzIgc3RhdGU7DQo+ICsJdTMyIGN0cmw7DQo+ICsNCj4gKwltYXNrID0gUFVOSVRfUFdSR1Rf TUFTSyhwd19pZHgpOw0KPiArCXN0YXRlID0gZW5hYmxlID8gUFVOSVRfUFdSR1RfUFdSX09OKHB3 X2lkeCkgOg0KPiArCQkJIFBVTklUX1BXUkdUX1BXUl9HQVRFKHB3X2lkeCk7DQo+ICsNCj4gKwl2 bHZfcHVuaXRfZ2V0KGRldl9wcml2KTsNCj4gKw0KPiArI2RlZmluZSBDT05EIFwNCj4gKwkoKHZs dl9wdW5pdF9yZWFkKGRldl9wcml2LCBQVU5JVF9SRUdfUFdSR1RfU1RBVFVTKSAmIG1hc2spID09 DQo+IHN0YXRlKQ0KPiArDQo+ICsJaWYgKENPTkQpDQo+ICsJCWdvdG8gb3V0Ow0KPiArDQo+ICsJ Y3RybCA9IHZsdl9wdW5pdF9yZWFkKGRldl9wcml2LCBQVU5JVF9SRUdfUFdSR1RfQ1RSTCk7DQo+ ICsJY3RybCAmPSB+bWFzazsNCj4gKwljdHJsIHw9IHN0YXRlOw0KPiArCXZsdl9wdW5pdF93cml0 ZShkZXZfcHJpdiwgUFVOSVRfUkVHX1BXUkdUX0NUUkwsIGN0cmwpOw0KPiArDQo+ICsJaWYgKHdh aXRfZm9yKENPTkQsIDEwMCkpDQo+ICsJCWRybV9lcnIoJmRldl9wcml2LT5kcm0sDQo+ICsJCQki dGltZW91dCBzZXR0aW5nIHBvd2VyIHdlbGwgc3RhdGUgJTA4eA0KPiAoJTA4eClcbiIsDQo+ICsJ CQlzdGF0ZSwNCj4gKwkJCXZsdl9wdW5pdF9yZWFkKGRldl9wcml2LA0KPiBQVU5JVF9SRUdfUFdS R1RfQ1RSTCkpOw0KPiArDQo+ICsjdW5kZWYgQ09ORA0KPiArDQo+ICtvdXQ6DQo+ICsJdmx2X3B1 bml0X3B1dChkZXZfcHJpdik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHZsdl9wb3dlcl93 ZWxsX2VuYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsDQo+ICsJCQkJICBz dHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsKQ0KPiArew0KPiArCXZsdl9zZXRfcG93 ZXJfd2VsbChkZXZfcHJpdiwgcG93ZXJfd2VsbCwgdHJ1ZSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyB2b2lkIHZsdl9wb3dlcl93ZWxsX2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4g KmRldl9wcml2LA0KPiArCQkJCSAgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwp DQo+ICt7DQo+ICsJdmx2X3NldF9wb3dlcl93ZWxsKGRldl9wcml2LCBwb3dlcl93ZWxsLCBmYWxz ZSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIHZsdl9wb3dlcl93ZWxsX2VuYWJsZWQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gKmRldl9wcml2LA0KPiArCQkJCSAgIHN0cnVjdCBpOTE1 X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwpDQo+ICt7DQo+ICsJaW50IHB3X2lkeCA9IHBvd2VyX3dl bGwtPmRlc2MtPnZsdi5pZHg7DQo+ICsJYm9vbCBlbmFibGVkID0gZmFsc2U7DQo+ICsJdTMyIG1h c2s7DQo+ICsJdTMyIHN0YXRlOw0KPiArCXUzMiBjdHJsOw0KPiArDQo+ICsJbWFzayA9IFBVTklU X1BXUkdUX01BU0socHdfaWR4KTsNCj4gKwljdHJsID0gUFVOSVRfUFdSR1RfUFdSX09OKHB3X2lk eCk7DQo+ICsNCj4gKwl2bHZfcHVuaXRfZ2V0KGRldl9wcml2KTsNCj4gKw0KPiArCXN0YXRlID0g dmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBVTklUX1JFR19QV1JHVF9TVEFUVVMpICYNCj4gbWFz azsNCj4gKwkvKg0KPiArCSAqIFdlIG9ubHkgZXZlciBzZXQgdGhlIHBvd2VyLW9uIGFuZCBwb3dl ci1nYXRlIHN0YXRlcywNCj4gYW55dGhpbmcNCj4gKwkgKiBlbHNlIGlzIHVuZXhwZWN0ZWQuDQo+ ICsJICovDQo+ICsJZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sIHN0YXRlICE9IFBVTklUX1BX UkdUX1BXUl9PTihwd19pZHgpDQo+ICYmDQo+ICsJCSAgICBzdGF0ZSAhPSBQVU5JVF9QV1JHVF9Q V1JfR0FURShwd19pZHgpKTsNCj4gKwlpZiAoc3RhdGUgPT0gY3RybCkNCj4gKwkJZW5hYmxlZCA9 IHRydWU7DQo+ICsNCj4gKwkvKg0KPiArCSAqIEEgdHJhbnNpZW50IHN0YXRlIGF0IHRoaXMgcG9p bnQgd291bGQgbWVhbiBzb21lIHVuZXhwZWN0ZWQNCj4gcGFydHkNCj4gKwkgKiBpcyBwb2tpbmcg YXQgdGhlIHBvd2VyIGNvbnRyb2xzIHRvby4NCj4gKwkgKi8NCj4gKwljdHJsID0gdmx2X3B1bml0 X3JlYWQoZGV2X3ByaXYsIFBVTklUX1JFR19QV1JHVF9DVFJMKSAmIG1hc2s7DQo+ICsJZHJtX1dB Uk5fT04oJmRldl9wcml2LT5kcm0sIGN0cmwgIT0gc3RhdGUpOw0KPiArDQo+ICsJdmx2X3B1bml0 X3B1dChkZXZfcHJpdik7DQo+ICsNCj4gKwlyZXR1cm4gZW5hYmxlZDsNCj4gK30NCj4gKw0KPiAr c3RhdGljIHZvaWQgdmx2X2luaXRfZGlzcGxheV9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUNCj4gKmRldl9wcml2KQ0KPiArew0KPiArCXUzMiB2YWw7DQo+ICsNCj4gKwkvKg0K PiArCSAqIE9uIGRyaXZlciBsb2FkLCBhIHBpcGUgbWF5IGJlIGFjdGl2ZSBhbmQgZHJpdmluZyBh IERTSQ0KPiBkaXNwbGF5Lg0KPiArCSAqIFByZXNlcnZlIERQT1VOSVRfQ0xPQ0tfR0FURV9ESVNB QkxFIHRvIGF2b2lkIHRoZSBwaXBlDQo+IGdldHRpbmcgc3R1Y2sNCj4gKwkgKiAoYW5kIG5ldmVy IHJlY292ZXJpbmcpIGluIHRoaXMgY2FzZS4NCj4gaW50ZWxfZHNpX3Bvc3RfZGlzYWJsZSgpIHdp bGwNCj4gKwkgKiBjbGVhciBpdCB3aGVuIHdlIHR1cm4gb2ZmIHRoZSBkaXNwbGF5Lg0KPiArCSAq Lw0KPiArCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIERTUENMS19HQVRFX0QpOw0KPiAr CXZhbCAmPSBEUE9VTklUX0NMT0NLX0dBVEVfRElTQUJMRTsNCj4gKwl2YWwgfD0gVlJIVU5JVF9D TE9DS19HQVRFX0RJU0FCTEU7DQo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIERTUENMS19H QVRFX0QsIHZhbCk7DQo+ICsNCj4gKwkvKg0KPiArCSAqIERpc2FibGUgdHJpY2tsZSBmZWVkIGFu ZCBlbmFibGUgcG5kIGRlYWRsaW5lIGNhbGN1bGF0aW9uDQo+ICsJICovDQo+ICsJaW50ZWxfZGVf d3JpdGUoZGV2X3ByaXYsIE1JX0FSQl9WTFYsDQo+ICsJCSAgICAgICBNSV9BUkJfRElTUExBWV9U UklDS0xFX0ZFRURfRElTQUJMRSk7DQo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIENCUjFf VkxWLCAwKTsNCj4gKw0KPiArCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBSVU5USU1FX0lO Rk8oZGV2X3ByaXYpLT5yYXdjbGtfZnJlcSANCj4gPT0gMCk7DQo+ICsJaW50ZWxfZGVfd3JpdGUo ZGV2X3ByaXYsIFJBV0NMS19GUkVRX1ZMViwNCj4gKwkJICAgICAgIERJVl9ST1VORF9DTE9TRVNU KFJVTlRJTUVfSU5GTyhkZXZfcHJpdiktDQo+ID5yYXdjbGtfZnJlcSwNCj4gKwkJCQkJIDEwMDAp KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgdmx2X2Rpc3BsYXlfcG93ZXJfd2VsbF9pbml0 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlDQo+ICpkZXZfcHJpdikNCj4gK3sNCj4gKwlzdHJ1Y3Qg aW50ZWxfZW5jb2RlciAqZW5jb2RlcjsNCj4gKwllbnVtIHBpcGUgcGlwZTsNCj4gKw0KPiArCS8q DQo+ICsJICogRW5hYmxlIHRoZSBDUkkgY2xvY2sgc291cmNlIHNvIHdlIGNhbiBnZXQgYXQgdGhl DQo+ICsJICogZGlzcGxheSBhbmQgdGhlIHJlZmVyZW5jZSBjbG9jayBmb3IgVkdBDQo+ICsJICog aG90cGx1ZyAvIG1hbnVhbCBkZXRlY3Rpb24uIFN1cHBvc2VkbHkgRFNJIGFsc28NCj4gKwkgKiBu ZWVkcyB0aGUgcmVmIGNsb2NrIHVwIGFuZCBydW5uaW5nLg0KPiArCSAqDQo+ICsJICogQ0hWIERQ TEwgQi9DIGhhdmUgc29tZSBpc3N1ZXMgaWYgVkdBIG1vZGUgaXMgZW5hYmxlZC4NCj4gKwkgKi8N Cj4gKwlmb3JfZWFjaF9waXBlKGRldl9wcml2LCBwaXBlKSB7DQo+ICsJCXUzMiB2YWwgPSBpbnRl bF9kZV9yZWFkKGRldl9wcml2LCBEUExMKHBpcGUpKTsNCj4gKw0KPiArCQl2YWwgfD0gRFBMTF9S RUZfQ0xLX0VOQUJMRV9WTFYgfCBEUExMX1ZHQV9NT0RFX0RJUzsNCj4gKwkJaWYgKHBpcGUgIT0g UElQRV9BKQ0KPiArCQkJdmFsIHw9IERQTExfSU5URUdSQVRFRF9DUklfQ0xLX1ZMVjsNCj4gKw0K PiArCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRFBMTChwaXBlKSwgdmFsKTsNCj4gKwl9DQo+ ICsNCj4gKwl2bHZfaW5pdF9kaXNwbGF5X2Nsb2NrX2dhdGluZyhkZXZfcHJpdik7DQo+ICsNCj4g KwlzcGluX2xvY2tfaXJxKCZkZXZfcHJpdi0+aXJxX2xvY2spOw0KPiArCXZhbGxleXZpZXdfZW5h YmxlX2Rpc3BsYXlfaXJxcyhkZXZfcHJpdik7DQo+ICsJc3Bpbl91bmxvY2tfaXJxKCZkZXZfcHJp di0+aXJxX2xvY2spOw0KPiArDQo+ICsJLyoNCj4gKwkgKiBEdXJpbmcgZHJpdmVyIGluaXRpYWxp emF0aW9uL3Jlc3VtZSB3ZSBjYW4gYXZvaWQgcmVzdG9yaW5nDQo+IHRoZQ0KPiArCSAqIHBhcnQg b2YgdGhlIEhXL1NXIHN0YXRlIHRoYXQgd2lsbCBiZSBpbml0ZWQgYW55d2F5DQo+IGV4cGxpY2l0 bHkuDQo+ICsJICovDQo+ICsJaWYgKGRldl9wcml2LT5wb3dlcl9kb21haW5zLmluaXRpYWxpemlu ZykNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJaW50ZWxfaHBkX2luaXQoZGV2X3ByaXYpOw0KPiAr CWludGVsX2hwZF9wb2xsX2Rpc2FibGUoZGV2X3ByaXYpOw0KPiArDQo+ICsJLyogUmUtZW5hYmxl IHRoZSBBRFBBLCBpZiB3ZSBoYXZlIG9uZSAqLw0KPiArCWZvcl9lYWNoX2ludGVsX2VuY29kZXIo JmRldl9wcml2LT5kcm0sIGVuY29kZXIpIHsNCj4gKwkJaWYgKGVuY29kZXItPnR5cGUgPT0gSU5U RUxfT1VUUFVUX0FOQUxPRykNCj4gKwkJCWludGVsX2NydF9yZXNldCgmZW5jb2Rlci0+YmFzZSk7 DQo+ICsJfQ0KPiArDQo+ICsJaW50ZWxfdmdhX3JlZGlzYWJsZV9wb3dlcl9vbihkZXZfcHJpdik7 DQo+ICsNCj4gKwlpbnRlbF9wcHNfdW5sb2NrX3JlZ3Nfd2EoZGV2X3ByaXYpOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgdm9pZCB2bHZfZGlzcGxheV9wb3dlcl93ZWxsX2RlaW5pdChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYpDQo+ICt7DQo+ICsJc3Bpbl9sb2NrX2lycSgmZGV2 X3ByaXYtPmlycV9sb2NrKTsNCj4gKwl2YWxsZXl2aWV3X2Rpc2FibGVfZGlzcGxheV9pcnFzKGRl dl9wcml2KTsNCj4gKwlzcGluX3VubG9ja19pcnEoJmRldl9wcml2LT5pcnFfbG9jayk7DQo+ICsN Cj4gKwkvKiBtYWtlIHN1cmUgd2UncmUgZG9uZSBwcm9jZXNzaW5nIGRpc3BsYXkgaXJxcyAqLw0K PiArCWludGVsX3N5bmNocm9uaXplX2lycShkZXZfcHJpdik7DQo+ICsNCj4gKwlpbnRlbF9wcHNf cmVzZXRfYWxsKGRldl9wcml2KTsNCj4gKw0KPiArCS8qIFByZXZlbnQgdXMgZnJvbSByZS1lbmFi bGluZyBwb2xsaW5nIG9uIGFjY2lkZW50IGluIGxhdGUNCj4gc3VzcGVuZCAqLw0KPiArCWlmICgh ZGV2X3ByaXYtPmRybS5kZXYtPnBvd2VyLmlzX3N1c3BlbmRlZCkNCj4gKwkJaW50ZWxfaHBkX3Bv bGxfZW5hYmxlKGRldl9wcml2KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgdmx2X2Rpc3Bs YXlfcG93ZXJfd2VsbF9lbmFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gKmRldl9wcml2 LA0KPiArCQkJCQkgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwNCj4gKnBvd2VyX3dlbGwpDQo+ICt7 DQo+ICsJdmx2X3NldF9wb3dlcl93ZWxsKGRldl9wcml2LCBwb3dlcl93ZWxsLCB0cnVlKTsNCj4g Kw0KPiArCXZsdl9kaXNwbGF5X3Bvd2VyX3dlbGxfaW5pdChkZXZfcHJpdik7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIHZsdl9kaXNwbGF5X3Bvd2VyX3dlbGxfZGlzYWJsZShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYsDQo+ICsJCQkJCSAgIHN0cnVjdCBpOTE1X3Bvd2Vy X3dlbGwNCj4gKnBvd2VyX3dlbGwpDQo+ICt7DQo+ICsJdmx2X2Rpc3BsYXlfcG93ZXJfd2VsbF9k ZWluaXQoZGV2X3ByaXYpOw0KPiArDQo+ICsJdmx2X3NldF9wb3dlcl93ZWxsKGRldl9wcml2LCBw b3dlcl93ZWxsLCBmYWxzZSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHZsdl9kcGlvX2Nt bl9wb3dlcl93ZWxsX2VuYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYs DQo+ICsJCQkJCSAgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwNCj4gKnBvd2VyX3dlbGwpDQo+ICt7 DQo+ICsJLyogc2luY2UgcmVmL2NyaSBjbG9jayB3YXMgZW5hYmxlZCAqLw0KPiArCXVkZWxheSgx KTsgLyogPjEwbnMgZm9yIGNtbnJlc2V0LCA+MG5zIGZvciBzaWRlcmVzZXQgKi8NCj4gKw0KPiAr CXZsdl9zZXRfcG93ZXJfd2VsbChkZXZfcHJpdiwgcG93ZXJfd2VsbCwgdHJ1ZSk7DQo+ICsNCj4g KwkvKg0KPiArCSAqIEZyb20gVkxWMkEwX0RQX2VEUF9EUElPX2RyaXZlcl92Ymlvc19ub3Rlc18x MC5kb2N4IC0NCj4gKwkgKiAgNi4JRGUtYXNzZXJ0IGNtbl9yZXNldC9zaWRlX3Jlc2V0LiBTYW1l IGFzIFZMViBYMC4NCj4gKwkgKiAgIGEuCUdVbml0IDB4MjExMCBiaXRbMF0gc2V0IHRvIDEgKGRl ZiAwKQ0KPiArCSAqICAgYi4JVGhlIG90aGVyIGJpdHMgc3VjaCBhcyBzZnIgc2V0dGluZ3MgLyBt b2Rlc2VsIG1heSBhbGwNCj4gKwkgKgliZSBzZXQgdG8gMC4NCj4gKwkgKg0KPiArCSAqIFRoaXMg c2hvdWxkIG9ubHkgYmUgZG9uZSBvbiBpbml0IGFuZCByZXN1bWUgZnJvbSBTMyB3aXRoDQo+ICsJ ICogYm90aCBQTExzIGRpc2FibGVkLCBvciB3ZSByaXNrIGxvc2luZyBEUElPIGFuZCBQTEwNCj4g KwkgKiBzeW5jaHJvbml6YXRpb24uDQo+ICsJICovDQo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3By aXYsIERQSU9fQ1RMLA0KPiArCQkgICAgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgRFBJT19D VEwpIHwNCj4gRFBJT19DTU5SU1QpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCB2bHZfZHBp b19jbW5fcG93ZXJfd2VsbF9kaXNhYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlDQo+ICpkZXZf cHJpdiwNCj4gKwkJCQkJICAgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwNCj4gKnBvd2VyX3dlbGwp DQo+ICt7DQo+ICsJZW51bSBwaXBlIHBpcGU7DQo+ICsNCj4gKwlmb3JfZWFjaF9waXBlKGRldl9w cml2LCBwaXBlKQ0KPiArCQlhc3NlcnRfcGxsX2Rpc2FibGVkKGRldl9wcml2LCBwaXBlKTsNCj4g Kw0KPiArCS8qIEFzc2VydCBjb21tb24gcmVzZXQgKi8NCj4gKwlpbnRlbF9kZV93cml0ZShkZXZf cHJpdiwgRFBJT19DVEwsDQo+ICsJCSAgICAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBEUElP X0NUTCkgJg0KPiB+RFBJT19DTU5SU1QpOw0KPiArDQo+ICsJdmx2X3NldF9wb3dlcl93ZWxsKGRl dl9wcml2LCBwb3dlcl93ZWxsLCBmYWxzZSk7DQo+ICt9DQo+ICsNCj4gKyNkZWZpbmUgUE9XRVJf RE9NQUlOX01BU0sgKEdFTk1BU0tfVUxMKFBPV0VSX0RPTUFJTl9OVU0gLSAxLCAwKSkNCj4gKw0K PiArI2RlZmluZSBCSVRTX1NFVCh2YWwsIGJpdHMpICgoKHZhbCkgJiAoYml0cykpID09IChiaXRz KSkNCj4gKw0KPiArc3RhdGljIHZvaWQgYXNzZXJ0X2Nodl9waHlfc3RhdHVzKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikNCj4gK3sNCj4gKwlzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxs ICpjbW5fYmMgPQ0KPiArCQlsb29rdXBfcG93ZXJfd2VsbChkZXZfcHJpdiwgVkxWX0RJU1BfUFdf RFBJT19DTU5fQkMpOw0KPiArCXN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKmNtbl9kID0NCj4gKwkJ bG9va3VwX3Bvd2VyX3dlbGwoZGV2X3ByaXYsIENIVl9ESVNQX1BXX0RQSU9fQ01OX0QpOw0KPiAr CXUzMiBwaHlfY29udHJvbCA9IGRldl9wcml2LT5jaHZfcGh5X2NvbnRyb2w7DQo+ICsJdTMyIHBo eV9zdGF0dXMgPSAwOw0KPiArCXUzMiBwaHlfc3RhdHVzX21hc2sgPSAweGZmZmZmZmZmOw0KPiAr DQo+ICsJLyoNCj4gKwkgKiBUaGUgQklPUyBjYW4gbGVhdmUgdGhlIFBIWSBpcyBzb21lIHdlaXJk IHN0YXRlDQo+ICsJICogd2hlcmUgaXQgZG9lc24ndCBmdWxseSBwb3dlciBkb3duIHNvbWUgcGFy dHMuDQo+ICsJICogRGlzYWJsZSB0aGUgYXNzZXJ0cyB1bnRpbCB0aGUgUEhZIGhhcyBiZWVuIGZ1 bGx5DQo+ICsJICogcmVzZXQgKGllLiB0aGUgcG93ZXIgd2VsbCBoYXMgYmVlbiBkaXNhYmxlZCBh dA0KPiArCSAqIGxlYXN0IG9uY2UpLg0KPiArCSAqLw0KPiArCWlmICghZGV2X3ByaXYtPmNodl9w aHlfYXNzZXJ0W0RQSU9fUEhZMF0pDQo+ICsJCXBoeV9zdGF0dXNfbWFzayAmPSB+KFBIWV9TVEFU VVNfQ01OX0xETyhEUElPX1BIWTAsDQo+IERQSU9fQ0gwKSB8DQo+ICsJCQkJICAgICBQSFlfU1RB VFVTX1NQTElORV9MRE8oRFBJT19QSFkwLA0KPiBEUElPX0NIMCwgMCkgfA0KPiArCQkJCSAgICAg UEhZX1NUQVRVU19TUExJTkVfTERPKERQSU9fUEhZMCwNCj4gRFBJT19DSDAsIDEpIHwNCj4gKwkJ CQkgICAgIFBIWV9TVEFUVVNfQ01OX0xETyhEUElPX1BIWTAsDQo+IERQSU9fQ0gxKSB8DQo+ICsJ CQkJICAgICBQSFlfU1RBVFVTX1NQTElORV9MRE8oRFBJT19QSFkwLA0KPiBEUElPX0NIMSwgMCkg fA0KPiArCQkJCSAgICAgUEhZX1NUQVRVU19TUExJTkVfTERPKERQSU9fUEhZMCwNCj4gRFBJT19D SDEsIDEpKTsNCj4gKw0KPiArCWlmICghZGV2X3ByaXYtPmNodl9waHlfYXNzZXJ0W0RQSU9fUEhZ MV0pDQo+ICsJCXBoeV9zdGF0dXNfbWFzayAmPSB+KFBIWV9TVEFUVVNfQ01OX0xETyhEUElPX1BI WTEsDQo+IERQSU9fQ0gwKSB8DQo+ICsJCQkJICAgICBQSFlfU1RBVFVTX1NQTElORV9MRE8oRFBJ T19QSFkxLA0KPiBEUElPX0NIMCwgMCkgfA0KPiArCQkJCSAgICAgUEhZX1NUQVRVU19TUExJTkVf TERPKERQSU9fUEhZMSwNCj4gRFBJT19DSDAsIDEpKTsNCj4gKw0KPiArCWlmIChpbnRlbF9wb3dl cl93ZWxsX2lzX2VuYWJsZWQoZGV2X3ByaXYsIGNtbl9iYykpIHsNCj4gKwkJcGh5X3N0YXR1cyB8 PSBQSFlfUE9XRVJHT09EKERQSU9fUEhZMCk7DQo+ICsNCj4gKwkJLyogdGhpcyBhc3N1bWVzIG92 ZXJyaWRlIGlzIG9ubHkgdXNlZCB0byBlbmFibGUgbGFuZXMNCj4gKi8NCj4gKwkJaWYgKChwaHlf Y29udHJvbCAmIFBIWV9DSF9QT1dFUl9ET1dOX09WUkRfRU4oRFBJT19QSFkwLA0KPiBEUElPX0NI MCkpID09IDApDQo+ICsJCQlwaHlfY29udHJvbCB8PSBQSFlfQ0hfUE9XRVJfRE9XTl9PVlJEKDB4 ZiwNCj4gRFBJT19QSFkwLCBEUElPX0NIMCk7DQo+ICsNCj4gKwkJaWYgKChwaHlfY29udHJvbCAm IFBIWV9DSF9QT1dFUl9ET1dOX09WUkRfRU4oRFBJT19QSFkwLA0KPiBEUElPX0NIMSkpID09IDAp DQo+ICsJCQlwaHlfY29udHJvbCB8PSBQSFlfQ0hfUE9XRVJfRE9XTl9PVlJEKDB4ZiwNCj4gRFBJ T19QSFkwLCBEUElPX0NIMSk7DQo+ICsNCj4gKwkJLyogQ0wxIGlzIG9uIHdoZW5ldmVyIGFueXRo aW5nIGlzIG9uIGluIGVpdGhlciBjaGFubmVsDQo+ICovDQo+ICsJCWlmIChCSVRTX1NFVChwaHlf Y29udHJvbCwNCj4gKwkJCSAgICAgUEhZX0NIX1BPV0VSX0RPV05fT1ZSRCgweGYsIERQSU9fUEhZ MCwNCj4gRFBJT19DSDApIHwNCj4gKwkJCSAgICAgUEhZX0NIX1BPV0VSX0RPV05fT1ZSRCgweGYs IERQSU9fUEhZMCwNCj4gRFBJT19DSDEpKSkNCj4gKwkJCXBoeV9zdGF0dXMgfD0gUEhZX1NUQVRV U19DTU5fTERPKERQSU9fUEhZMCwNCj4gRFBJT19DSDApOw0KPiArDQo+ICsJCS8qDQo+ICsJCSAq IFRoZSBEUExMQiBjaGVjayBhY2NvdW50cyBmb3IgdGhlIHBpcGUgQiArIHBvcnQgQQ0KPiB1c2Fn ZQ0KPiArCQkgKiB3aXRoIENMMiBwb3dlcmVkIHVwIGJ1dCBhbGwgdGhlIGxhbmVzIGluIHRoZSBz ZWNvbmQNCj4gY2hhbm5lbA0KPiArCQkgKiBwb3dlcmVkIGRvd24uDQo+ICsJCSAqLw0KPiArCQlp ZiAoQklUU19TRVQocGh5X2NvbnRyb2wsDQo+ICsJCQkgICAgIFBIWV9DSF9QT1dFUl9ET1dOX09W UkQoMHhmLCBEUElPX1BIWTAsDQo+IERQSU9fQ0gxKSkgJiYNCj4gKwkJICAgIChpbnRlbF9kZV9y ZWFkKGRldl9wcml2LCBEUExMKFBJUEVfQikpICYNCj4gRFBMTF9WQ09fRU5BQkxFKSA9PSAwKQ0K PiArCQkJcGh5X3N0YXR1cyB8PSBQSFlfU1RBVFVTX0NNTl9MRE8oRFBJT19QSFkwLA0KPiBEUElP X0NIMSk7DQo+ICsNCj4gKwkJaWYgKEJJVFNfU0VUKHBoeV9jb250cm9sLA0KPiArCQkJICAgICBQ SFlfQ0hfUE9XRVJfRE9XTl9PVlJEKDB4MywgRFBJT19QSFkwLA0KPiBEUElPX0NIMCkpKQ0KPiAr CQkJcGh5X3N0YXR1cyB8PSBQSFlfU1RBVFVTX1NQTElORV9MRE8oRFBJT19QSFkwLA0KPiBEUElP X0NIMCwgMCk7DQo+ICsJCWlmIChCSVRTX1NFVChwaHlfY29udHJvbCwNCj4gKwkJCSAgICAgUEhZ X0NIX1BPV0VSX0RPV05fT1ZSRCgweGMsIERQSU9fUEhZMCwNCj4gRFBJT19DSDApKSkNCj4gKwkJ CXBoeV9zdGF0dXMgfD0gUEhZX1NUQVRVU19TUExJTkVfTERPKERQSU9fUEhZMCwNCj4gRFBJT19D SDAsIDEpOw0KPiArDQo+ICsJCWlmIChCSVRTX1NFVChwaHlfY29udHJvbCwNCj4gKwkJCSAgICAg UEhZX0NIX1BPV0VSX0RPV05fT1ZSRCgweDMsIERQSU9fUEhZMCwNCj4gRFBJT19DSDEpKSkNCj4g KwkJCXBoeV9zdGF0dXMgfD0gUEhZX1NUQVRVU19TUExJTkVfTERPKERQSU9fUEhZMCwNCj4gRFBJ T19DSDEsIDApOw0KPiArCQlpZiAoQklUU19TRVQocGh5X2NvbnRyb2wsDQo+ICsJCQkgICAgIFBI WV9DSF9QT1dFUl9ET1dOX09WUkQoMHhjLCBEUElPX1BIWTAsDQo+IERQSU9fQ0gxKSkpDQo+ICsJ CQlwaHlfc3RhdHVzIHw9IFBIWV9TVEFUVVNfU1BMSU5FX0xETyhEUElPX1BIWTAsDQo+IERQSU9f Q0gxLCAxKTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoaW50ZWxfcG93ZXJfd2VsbF9pc19lbmFibGVk KGRldl9wcml2LCBjbW5fZCkpIHsNCj4gKwkJcGh5X3N0YXR1cyB8PSBQSFlfUE9XRVJHT09EKERQ SU9fUEhZMSk7DQo+ICsNCj4gKwkJLyogdGhpcyBhc3N1bWVzIG92ZXJyaWRlIGlzIG9ubHkgdXNl ZCB0byBlbmFibGUgbGFuZXMNCj4gKi8NCj4gKwkJaWYgKChwaHlfY29udHJvbCAmIFBIWV9DSF9Q T1dFUl9ET1dOX09WUkRfRU4oRFBJT19QSFkxLA0KPiBEUElPX0NIMCkpID09IDApDQo+ICsJCQlw aHlfY29udHJvbCB8PSBQSFlfQ0hfUE9XRVJfRE9XTl9PVlJEKDB4ZiwNCj4gRFBJT19QSFkxLCBE UElPX0NIMCk7DQo+ICsNCj4gKwkJaWYgKEJJVFNfU0VUKHBoeV9jb250cm9sLA0KPiArCQkJICAg ICBQSFlfQ0hfUE9XRVJfRE9XTl9PVlJEKDB4ZiwgRFBJT19QSFkxLA0KPiBEUElPX0NIMCkpKQ0K PiArCQkJcGh5X3N0YXR1cyB8PSBQSFlfU1RBVFVTX0NNTl9MRE8oRFBJT19QSFkxLA0KPiBEUElP X0NIMCk7DQo+ICsNCj4gKwkJaWYgKEJJVFNfU0VUKHBoeV9jb250cm9sLA0KPiArCQkJICAgICBQ SFlfQ0hfUE9XRVJfRE9XTl9PVlJEKDB4MywgRFBJT19QSFkxLA0KPiBEUElPX0NIMCkpKQ0KPiAr CQkJcGh5X3N0YXR1cyB8PSBQSFlfU1RBVFVTX1NQTElORV9MRE8oRFBJT19QSFkxLA0KPiBEUElP X0NIMCwgMCk7DQo+ICsJCWlmIChCSVRTX1NFVChwaHlfY29udHJvbCwNCj4gKwkJCSAgICAgUEhZ X0NIX1BPV0VSX0RPV05fT1ZSRCgweGMsIERQSU9fUEhZMSwNCj4gRFBJT19DSDApKSkNCj4gKwkJ CXBoeV9zdGF0dXMgfD0gUEhZX1NUQVRVU19TUExJTkVfTERPKERQSU9fUEhZMSwNCj4gRFBJT19D SDAsIDEpOw0KPiArCX0NCj4gKw0KPiArCXBoeV9zdGF0dXMgJj0gcGh5X3N0YXR1c19tYXNrOw0K PiArDQo+ICsJLyoNCj4gKwkgKiBUaGUgUEhZIG1heSBiZSBidXN5IHdpdGggc29tZSBpbml0aWFs IGNhbGlicmF0aW9uIGFuZA0KPiB3aGF0bm90LA0KPiArCSAqIHNvIHRoZSBwb3dlciBzdGF0ZSBj YW4gdGFrZSBhIHdoaWxlIHRvIGFjdHVhbGx5IGNoYW5nZS4NCj4gKwkgKi8NCj4gKwlpZiAoaW50 ZWxfZGVfd2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3ByaXYsIERJU1BMQVlfUEhZX1NUQVRVUywNCj4g KwkJCQkgICAgICAgcGh5X3N0YXR1c19tYXNrLCBwaHlfc3RhdHVzLA0KPiAxMCkpDQo+ICsJCWRy bV9lcnIoJmRldl9wcml2LT5kcm0sDQo+ICsJCQkiVW5leHBlY3RlZCBQSFlfU1RBVFVTIDB4JTA4 eCwgZXhwZWN0ZWQgMHglMDh4DQo+IChQSFlfQ09OVFJPTD0weCUwOHgpXG4iLA0KPiArCQkJaW50 ZWxfZGVfcmVhZChkZXZfcHJpdiwgRElTUExBWV9QSFlfU1RBVFVTKSAmDQo+IHBoeV9zdGF0dXNf bWFzaywNCj4gKwkJCXBoeV9zdGF0dXMsIGRldl9wcml2LT5jaHZfcGh5X2NvbnRyb2wpOw0KPiAr fQ0KPiArDQo+ICsjdW5kZWYgQklUU19TRVQNCj4gKw0KPiArc3RhdGljIHZvaWQgY2h2X2RwaW9f Y21uX3Bvd2VyX3dlbGxfZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlDQo+ICpkZXZfcHJp diwNCj4gKwkJCQkJICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbA0KPiAqcG93ZXJfd2VsbCkNCj4g K3sNCj4gKwllbnVtIGRwaW9fcGh5IHBoeTsNCj4gKwllbnVtIHBpcGUgcGlwZTsNCj4gKwl1MzIg dG1wOw0KPiArDQo+ICsJZHJtX1dBUk5fT05fT05DRSgmZGV2X3ByaXYtPmRybSwNCj4gKwkJCSBw b3dlcl93ZWxsLT5kZXNjLT5pZCAhPQ0KPiBWTFZfRElTUF9QV19EUElPX0NNTl9CQyAmJg0KPiAr CQkJIHBvd2VyX3dlbGwtPmRlc2MtPmlkICE9DQo+IENIVl9ESVNQX1BXX0RQSU9fQ01OX0QpOw0K PiArDQo+ICsJaWYgKHBvd2VyX3dlbGwtPmRlc2MtPmlkID09IFZMVl9ESVNQX1BXX0RQSU9fQ01O X0JDKSB7DQo+ICsJCXBpcGUgPSBQSVBFX0E7DQo+ICsJCXBoeSA9IERQSU9fUEhZMDsNCj4gKwl9 IGVsc2Ugew0KPiArCQlwaXBlID0gUElQRV9DOw0KPiArCQlwaHkgPSBEUElPX1BIWTE7DQo+ICsJ fQ0KPiArDQo+ICsJLyogc2luY2UgcmVmL2NyaSBjbG9jayB3YXMgZW5hYmxlZCAqLw0KPiArCXVk ZWxheSgxKTsgLyogPjEwbnMgZm9yIGNtbnJlc2V0LCA+MG5zIGZvciBzaWRlcmVzZXQgKi8NCj4g Kwl2bHZfc2V0X3Bvd2VyX3dlbGwoZGV2X3ByaXYsIHBvd2VyX3dlbGwsIHRydWUpOw0KPiArDQo+ ICsJLyogUG9sbCBmb3IgcGh5cHdyZ29vZCBzaWduYWwgKi8NCj4gKwlpZiAoaW50ZWxfZGVfd2Fp dF9mb3Jfc2V0KGRldl9wcml2LCBESVNQTEFZX1BIWV9TVEFUVVMsDQo+ICsJCQkJICBQSFlfUE9X RVJHT09EKHBoeSksIDEpKQ0KPiArCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLCAiRGlzcGxheSBQ SFkgJWQgaXMgbm90IHBvd2VyDQo+IHVwXG4iLA0KPiArCQkJcGh5KTsNCj4gKw0KPiArCXZsdl9k cGlvX2dldChkZXZfcHJpdik7DQo+ICsNCj4gKwkvKiBFbmFibGUgZHluYW1pYyBwb3dlciBkb3du ICovDQo+ICsJdG1wID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgQ0hWX0NNTl9EVzI4 KTsNCj4gKwl0bXAgfD0gRFBJT19EWU5QV1JET1dORU5fQ0gwIHwgRFBJT19DTDFQT1dFUkRPV05F TiB8DQo+ICsJCURQSU9fU1VTX0NMS19DT05GSUdfR0FURV9DTEtSRVE7DQo+ICsJdmx2X2RwaW9f d3JpdGUoZGV2X3ByaXYsIHBpcGUsIENIVl9DTU5fRFcyOCwgdG1wKTsNCj4gKw0KPiArCWlmIChw b3dlcl93ZWxsLT5kZXNjLT5pZCA9PSBWTFZfRElTUF9QV19EUElPX0NNTl9CQykgew0KPiArCQl0 bXAgPSB2bHZfZHBpb19yZWFkKGRldl9wcml2LCBwaXBlLCBfQ0hWX0NNTl9EVzZfQ0gxKTsNCj4g KwkJdG1wIHw9IERQSU9fRFlOUFdSRE9XTkVOX0NIMTsNCj4gKwkJdmx2X2RwaW9fd3JpdGUoZGV2 X3ByaXYsIHBpcGUsIF9DSFZfQ01OX0RXNl9DSDEsIHRtcCk7DQo+ICsJfSBlbHNlIHsNCj4gKwkJ LyoNCj4gKwkJICogRm9yY2UgdGhlIG5vbi1leGlzdGluZyBDTDIgb2ZmLiBCWFQgZG9lcyB0aGlz DQo+ICsJCSAqIHRvbywgc28gbWF5YmUgaXQgc2F2ZXMgc29tZSBwb3dlciBldmVuIHRob3VnaA0K PiArCQkgKiBDTDIgZG9lc24ndCBleGlzdD8NCj4gKwkJICovDQo+ICsJCXRtcCA9IHZsdl9kcGlv X3JlYWQoZGV2X3ByaXYsIHBpcGUsIENIVl9DTU5fRFczMCk7DQo+ICsJCXRtcCB8PSBEUElPX0NM Ml9MRE9GVVNFX1BXUkVOQjsNCj4gKwkJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIENI Vl9DTU5fRFczMCwgdG1wKTsNCj4gKwl9DQo+ICsNCj4gKwl2bHZfZHBpb19wdXQoZGV2X3ByaXYp Ow0KPiArDQo+ICsJZGV2X3ByaXYtPmNodl9waHlfY29udHJvbCB8PSBQSFlfQ09NX0xBTkVfUkVT RVRfREVBU1NFUlQocGh5KTsNCj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRElTUExBWV9Q SFlfQ09OVFJPTCwNCj4gKwkJICAgICAgIGRldl9wcml2LT5jaHZfcGh5X2NvbnRyb2wpOw0KPiAr DQo+ICsJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sDQo+ICsJCSAgICAiRW5hYmxlZCBEUElP IFBIWSVkIChQSFlfQ09OVFJPTD0weCUwOHgpXG4iLA0KPiArCQkgICAgcGh5LCBkZXZfcHJpdi0+ Y2h2X3BoeV9jb250cm9sKTsNCj4gKw0KPiArCWFzc2VydF9jaHZfcGh5X3N0YXR1cyhkZXZfcHJp dik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGNodl9kcGlvX2Ntbl9wb3dlcl93ZWxsX2Rp c2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gKmRldl9wcml2LA0KPiArCQkJCQkgICAg c3RydWN0IGk5MTVfcG93ZXJfd2VsbA0KPiAqcG93ZXJfd2VsbCkNCj4gK3sNCj4gKwllbnVtIGRw aW9fcGh5IHBoeTsNCj4gKw0KPiArCWRybV9XQVJOX09OX09OQ0UoJmRldl9wcml2LT5kcm0sDQo+ ICsJCQkgcG93ZXJfd2VsbC0+ZGVzYy0+aWQgIT0NCj4gVkxWX0RJU1BfUFdfRFBJT19DTU5fQkMg JiYNCj4gKwkJCSBwb3dlcl93ZWxsLT5kZXNjLT5pZCAhPQ0KPiBDSFZfRElTUF9QV19EUElPX0NN Tl9EKTsNCj4gKw0KPiArCWlmIChwb3dlcl93ZWxsLT5kZXNjLT5pZCA9PSBWTFZfRElTUF9QV19E UElPX0NNTl9CQykgew0KPiArCQlwaHkgPSBEUElPX1BIWTA7DQo+ICsJCWFzc2VydF9wbGxfZGlz YWJsZWQoZGV2X3ByaXYsIFBJUEVfQSk7DQo+ICsJCWFzc2VydF9wbGxfZGlzYWJsZWQoZGV2X3By aXYsIFBJUEVfQik7DQo+ICsJfSBlbHNlIHsNCj4gKwkJcGh5ID0gRFBJT19QSFkxOw0KPiArCQlh c3NlcnRfcGxsX2Rpc2FibGVkKGRldl9wcml2LCBQSVBFX0MpOw0KPiArCX0NCj4gKw0KPiArCWRl dl9wcml2LT5jaHZfcGh5X2NvbnRyb2wgJj0gflBIWV9DT01fTEFORV9SRVNFVF9ERUFTU0VSVChw aHkpOw0KPiArCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBESVNQTEFZX1BIWV9DT05UUk9MLA0K PiArCQkgICAgICAgZGV2X3ByaXYtPmNodl9waHlfY29udHJvbCk7DQo+ICsNCj4gKwl2bHZfc2V0 X3Bvd2VyX3dlbGwoZGV2X3ByaXYsIHBvd2VyX3dlbGwsIGZhbHNlKTsNCj4gKw0KPiArCWRybV9k Ymdfa21zKCZkZXZfcHJpdi0+ZHJtLA0KPiArCQkgICAgIkRpc2FibGVkIERQSU8gUEhZJWQgKFBI WV9DT05UUk9MPTB4JTA4eClcbiIsDQo+ICsJCSAgICBwaHksIGRldl9wcml2LT5jaHZfcGh5X2Nv bnRyb2wpOw0KPiArDQo+ICsJLyogUEhZIGlzIGZ1bGx5IHJlc2V0IG5vdywgc28gd2UgY2FuIGVu YWJsZSB0aGUgUEhZIHN0YXRlDQo+IGFzc2VydHMgKi8NCj4gKwlkZXZfcHJpdi0+Y2h2X3BoeV9h c3NlcnRbcGh5XSA9IHRydWU7DQo+ICsNCj4gKwlhc3NlcnRfY2h2X3BoeV9zdGF0dXMoZGV2X3By aXYpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBhc3NlcnRfY2h2X3BoeV9wb3dlcmdhdGUo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gKmRldl9wcml2LCBlbnVtIGRwaW9fcGh5IHBoeSwN Cj4gKwkJCQkgICAgIGVudW0gZHBpb19jaGFubmVsIGNoLCBib29sDQo+IG92ZXJyaWRlLCB1bnNp Z25lZCBpbnQgbWFzaykNCj4gK3sNCj4gKwllbnVtIHBpcGUgcGlwZSA9IHBoeSA9PSBEUElPX1BI WTAgPyBQSVBFX0EgOiBQSVBFX0M7DQo+ICsJdTMyIHJlZywgdmFsLCBleHBlY3RlZCwgYWN0dWFs Ow0KPiArDQo+ICsJLyoNCj4gKwkgKiBUaGUgQklPUyBjYW4gbGVhdmUgdGhlIFBIWSBpcyBzb21l IHdlaXJkIHN0YXRlDQo+ICsJICogd2hlcmUgaXQgZG9lc24ndCBmdWxseSBwb3dlciBkb3duIHNv bWUgcGFydHMuDQo+ICsJICogRGlzYWJsZSB0aGUgYXNzZXJ0cyB1bnRpbCB0aGUgUEhZIGhhcyBi ZWVuIGZ1bGx5DQo+ICsJICogcmVzZXQgKGllLiB0aGUgcG93ZXIgd2VsbCBoYXMgYmVlbiBkaXNh YmxlZCBhdA0KPiArCSAqIGxlYXN0IG9uY2UpLg0KPiArCSAqLw0KPiArCWlmICghZGV2X3ByaXYt PmNodl9waHlfYXNzZXJ0W3BoeV0pDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCWlmIChjaCA9PSBE UElPX0NIMCkNCj4gKwkJcmVnID0gX0NIVl9DTU5fRFcwX0NIMDsNCj4gKwllbHNlDQo+ICsJCXJl ZyA9IF9DSFZfQ01OX0RXNl9DSDE7DQo+ICsNCj4gKwl2bHZfZHBpb19nZXQoZGV2X3ByaXYpOw0K PiArCXZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIHJlZyk7DQo+ICsJdmx2X2Rw aW9fcHV0KGRldl9wcml2KTsNCj4gKw0KPiArCS8qDQo+ICsJICogVGhpcyBhc3N1bWVzICFvdmVy cmlkZSBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgcG9ydCBpcw0KPiBkaXNhYmxlZC4NCj4gKwkgKiBB bGwgbGFuZXMgc2hvdWxkIHBvd2VyIGRvd24gZXZlbiB3aXRob3V0IHRoZSBvdmVycmlkZSB3aGVu DQo+ICsJICogdGhlIHBvcnQgaXMgZGlzYWJsZWQuDQo+ICsJICovDQo+ICsJaWYgKCFvdmVycmlk ZSB8fCBtYXNrID09IDB4Zikgew0KPiArCQlleHBlY3RlZCA9IERQSU9fQUxMRExfUE9XRVJET1dO IHwgRFBJT19BTllETF9QT1dFUkRPV047DQo+ICsJCS8qDQo+ICsJCSAqIElmIENIMSBjb21tb24g bGFuZSBpcyBub3QgYWN0aXZlIGFueW1vcmUNCj4gKwkJICogKGVnLiBmb3IgcGlwZSBCIERQTEwp IHRoZSBlbnRpcmUgY2hhbm5lbCB3aWxsDQo+ICsJCSAqIHNodXQgZG93biwgd2hpY2ggY2F1c2Vz IHRoZSBjb21tb24gbGFuZSByZWdpc3RlcnMNCj4gKwkJICogdG8gcmVhZCBhcyAwLiBUaGF0IG1l YW5zIHdlIGNhbid0IGFjdHVhbGx5IGNoZWNrDQo+ICsJCSAqIHRoZSBsYW5lIHBvd2VyIGRvd24g c3RhdHVzIGJpdHMsIGJ1dCBhcyB0aGUgZW50aXJlDQo+ICsJCSAqIHJlZ2lzdGVyIHJlYWRzIGFz IDAgaXQncyBhIGdvb2QgaW5kaWNhdGlvbiB0aGF0IHRoZQ0KPiArCQkgKiBjaGFubmVsIGlzIGlu ZGVlZCBlbnRpcmVseSBwb3dlcmVkIGRvd24uDQo+ICsJCSAqLw0KPiArCQlpZiAoY2ggPT0gRFBJ T19DSDEgJiYgdmFsID09IDApDQo+ICsJCQlleHBlY3RlZCA9IDA7DQo+ICsJfSBlbHNlIGlmICht YXNrICE9IDB4MCkgew0KPiArCQlleHBlY3RlZCA9IERQSU9fQU5ZRExfUE9XRVJET1dOOw0KPiAr CX0gZWxzZSB7DQo+ICsJCWV4cGVjdGVkID0gMDsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoY2ggPT0g RFBJT19DSDApDQo+ICsJCWFjdHVhbCA9IHZhbCA+PiBEUElPX0FOWURMX1BPV0VSRE9XTl9TSElG VF9DSDA7DQo+ICsJZWxzZQ0KPiArCQlhY3R1YWwgPSB2YWwgPj4gRFBJT19BTllETF9QT1dFUkRP V05fU0hJRlRfQ0gxOw0KPiArCWFjdHVhbCAmPSBEUElPX0FMTERMX1BPV0VSRE9XTiB8IERQSU9f QU5ZRExfUE9XRVJET1dOOw0KPiArDQo+ICsJZHJtX1dBUk4oJmRldl9wcml2LT5kcm0sIGFjdHVh bCAhPSBleHBlY3RlZCwNCj4gKwkJICJVbmV4cGVjdGVkIERQSU8gbGFuZSBwb3dlciBkb3duOiBh bGwgJWQsIGFueSAlZC4NCj4gRXhwZWN0ZWQ6IGFsbCAlZCwgYW55ICVkLiAoMHgleCA9IDB4JTA4 eClcbiIsDQo+ICsJCSAhIShhY3R1YWwgJiBEUElPX0FMTERMX1BPV0VSRE9XTiksDQo+ICsJCSAh IShhY3R1YWwgJiBEUElPX0FOWURMX1BPV0VSRE9XTiksDQo+ICsJCSAhIShleHBlY3RlZCAmIERQ SU9fQUxMRExfUE9XRVJET1dOKSwNCj4gKwkJICEhKGV4cGVjdGVkICYgRFBJT19BTllETF9QT1dF UkRPV04pLA0KPiArCQkgcmVnLCB2YWwpOw0KPiArfQ0KPiArDQo+ICtib29sIGNodl9waHlfcG93 ZXJnYXRlX2NoKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bQ0KPiBkcGlv X3BoeSBwaHksDQo+ICsJCQkgIGVudW0gZHBpb19jaGFubmVsIGNoLCBib29sIG92ZXJyaWRlKQ0K PiArew0KPiArCXN0cnVjdCBpOTE1X3Bvd2VyX2RvbWFpbnMgKnBvd2VyX2RvbWFpbnMgPSAmZGV2 X3ByaXYtDQo+ID5wb3dlcl9kb21haW5zOw0KPiArCWJvb2wgd2FzX292ZXJyaWRlOw0KPiArDQo+ ICsJbXV0ZXhfbG9jaygmcG93ZXJfZG9tYWlucy0+bG9jayk7DQoNCk5vdCByZWFsbHkgaW4gc2Nv cGUgb2YgdGhpcyBwYXRjaCwgYnV0IHdoeSB0aGlzIG11dGV4IGlzIHRha2VuPyBUaGlzDQpmdW5j dGlvbiBpcyBub3QgdG91Y2hpbmcgYW55IHBvd2VyX3dlbGwvcG93ZXJfZG9tYWluIHJlZmVyZW5j ZSBjb3VudHMNCm9yIG90aGVyIGludGVybmFsIGRhdGE/DQoNCj4gKw0KPiArCXdhc19vdmVycmlk ZSA9IGRldl9wcml2LT5jaHZfcGh5X2NvbnRyb2wgJg0KPiBQSFlfQ0hfUE9XRVJfRE9XTl9PVlJE X0VOKHBoeSwgY2gpOw0KPiArDQo+ICsJaWYgKG92ZXJyaWRlID09IHdhc19vdmVycmlkZSkNCj4g KwkJZ290byBvdXQ7DQo+ICsNCj4gKwlpZiAob3ZlcnJpZGUpDQo+ICsJCWRldl9wcml2LT5jaHZf cGh5X2NvbnRyb2wgfD0NCj4gUEhZX0NIX1BPV0VSX0RPV05fT1ZSRF9FTihwaHksIGNoKTsNCj4g KwllbHNlDQo+ICsJCWRldl9wcml2LT5jaHZfcGh5X2NvbnRyb2wgJj0NCj4gflBIWV9DSF9QT1dF Ul9ET1dOX09WUkRfRU4ocGh5LCBjaCk7DQo+ICsNCj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJp diwgRElTUExBWV9QSFlfQ09OVFJPTCwNCj4gKwkJICAgICAgIGRldl9wcml2LT5jaHZfcGh5X2Nv bnRyb2wpOw0KPiArDQo+ICsJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sDQo+ICsJCSAgICAi UG93ZXIgZ2F0aW5nIERQSU8gUEhZJWQgQ0glZA0KPiAoRFBJT19QSFlfQ09OVFJPTD0weCUwOHgp XG4iLA0KPiArCQkgICAgcGh5LCBjaCwgZGV2X3ByaXYtPmNodl9waHlfY29udHJvbCk7DQo+ICsN Cj4gKwlhc3NlcnRfY2h2X3BoeV9zdGF0dXMoZGV2X3ByaXYpOw0KPiArDQo+ICtvdXQ6DQo+ICsJ bXV0ZXhfdW5sb2NrKCZwb3dlcl9kb21haW5zLT5sb2NrKTsNCj4gKw0KPiArCXJldHVybiB3YXNf b3ZlcnJpZGU7DQo+ICt9DQo+ICsNCj4gK3ZvaWQgY2h2X3BoeV9wb3dlcmdhdGVfbGFuZXMoc3Ry dWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsDQo+ICsJCQkgICAgIGJvb2wgb3ZlcnJpZGUsIHVu c2lnbmVkIGludCBtYXNrKQ0KPiArew0KPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHRvX2k5MTUoZW5jb2Rlci0+YmFzZS5kZXYpOw0KPiArCXN0cnVjdCBpOTE1X3Bvd2Vy X2RvbWFpbnMgKnBvd2VyX2RvbWFpbnMgPSAmZGV2X3ByaXYtDQo+ID5wb3dlcl9kb21haW5zOw0K PiArCWVudW0gZHBpb19waHkgcGh5ID0NCj4gdmx2X2RpZ19wb3J0X3RvX3BoeShlbmNfdG9fZGln X3BvcnQoZW5jb2RlcikpOw0KPiArCWVudW0gZHBpb19jaGFubmVsIGNoID0NCj4gdmx2X2RpZ19w b3J0X3RvX2NoYW5uZWwoZW5jX3RvX2RpZ19wb3J0KGVuY29kZXIpKTsNCj4gKw0KPiArCW11dGV4 X2xvY2soJnBvd2VyX2RvbWFpbnMtPmxvY2spOw0KPiArDQo+ICsJZGV2X3ByaXYtPmNodl9waHlf Y29udHJvbCAmPSB+UEhZX0NIX1BPV0VSX0RPV05fT1ZSRCgweGYsIHBoeSwNCj4gY2gpOw0KPiAr CWRldl9wcml2LT5jaHZfcGh5X2NvbnRyb2wgfD0gUEhZX0NIX1BPV0VSX0RPV05fT1ZSRChtYXNr LCBwaHksDQo+IGNoKTsNCj4gKw0KPiArCWlmIChvdmVycmlkZSkNCj4gKwkJZGV2X3ByaXYtPmNo dl9waHlfY29udHJvbCB8PQ0KPiBQSFlfQ0hfUE9XRVJfRE9XTl9PVlJEX0VOKHBoeSwgY2gpOw0K PiArCWVsc2UNCj4gKwkJZGV2X3ByaXYtPmNodl9waHlfY29udHJvbCAmPQ0KPiB+UEhZX0NIX1BP V0VSX0RPV05fT1ZSRF9FTihwaHksIGNoKTsNCj4gKw0KPiArCWludGVsX2RlX3dyaXRlKGRldl9w cml2LCBESVNQTEFZX1BIWV9DT05UUk9MLA0KPiArCQkgICAgICAgZGV2X3ByaXYtPmNodl9waHlf Y29udHJvbCk7DQo+ICsNCj4gKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwNCj4gKwkJICAg ICJQb3dlciBnYXRpbmcgRFBJTyBQSFklZCBDSCVkIGxhbmVzIDB4JXgNCj4gKFBIWV9DT05UUk9M PTB4JTA4eClcbiIsDQo+ICsJCSAgICBwaHksIGNoLCBtYXNrLCBkZXZfcHJpdi0+Y2h2X3BoeV9j b250cm9sKTsNCj4gKw0KPiArCWFzc2VydF9jaHZfcGh5X3N0YXR1cyhkZXZfcHJpdik7DQo+ICsN Cj4gKwlhc3NlcnRfY2h2X3BoeV9wb3dlcmdhdGUoZGV2X3ByaXYsIHBoeSwgY2gsIG92ZXJyaWRl LCBtYXNrKTsNCj4gKw0KPiArCW11dGV4X3VubG9jaygmcG93ZXJfZG9tYWlucy0+bG9jayk7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIGNodl9waXBlX3Bvd2VyX3dlbGxfZW5hYmxlZChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYsDQo+ICsJCQkJCXN0cnVjdCBpOTE1X3Bv d2VyX3dlbGwNCj4gKnBvd2VyX3dlbGwpDQo+ICt7DQo+ICsJZW51bSBwaXBlIHBpcGUgPSBQSVBF X0E7DQo+ICsJYm9vbCBlbmFibGVkOw0KPiArCXUzMiBzdGF0ZSwgY3RybDsNCj4gKw0KPiArCXZs dl9wdW5pdF9nZXQoZGV2X3ByaXYpOw0KPiArDQo+ICsJc3RhdGUgPSB2bHZfcHVuaXRfcmVhZChk ZXZfcHJpdiwgUFVOSVRfUkVHX0RTUFNTUE0pICYNCj4gRFBfU1NTX01BU0socGlwZSk7DQo+ICsJ LyoNCj4gKwkgKiBXZSBvbmx5IGV2ZXIgc2V0IHRoZSBwb3dlci1vbiBhbmQgcG93ZXItZ2F0ZSBz dGF0ZXMsDQo+IGFueXRoaW5nDQo+ICsJICogZWxzZSBpcyB1bmV4cGVjdGVkLg0KPiArCSAqLw0K PiArCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBzdGF0ZSAhPSBEUF9TU1NfUFdSX09OKHBp cGUpICYmDQo+ICsJCSAgICBzdGF0ZSAhPSBEUF9TU1NfUFdSX0dBVEUocGlwZSkpOw0KPiArCWVu YWJsZWQgPSBzdGF0ZSA9PSBEUF9TU1NfUFdSX09OKHBpcGUpOw0KPiArDQo+ICsJLyoNCj4gKwkg KiBBIHRyYW5zaWVudCBzdGF0ZSBhdCB0aGlzIHBvaW50IHdvdWxkIG1lYW4gc29tZSB1bmV4cGVj dGVkDQo+IHBhcnR5DQo+ICsJICogaXMgcG9raW5nIGF0IHRoZSBwb3dlciBjb250cm9scyB0b28u DQo+ICsJICovDQo+ICsJY3RybCA9IHZsdl9wdW5pdF9yZWFkKGRldl9wcml2LCBQVU5JVF9SRUdf RFNQU1NQTSkgJg0KPiBEUF9TU0NfTUFTSyhwaXBlKTsNCj4gKwlkcm1fV0FSTl9PTigmZGV2X3By aXYtPmRybSwgY3RybCA8PCAxNiAhPSBzdGF0ZSk7DQo+ICsNCj4gKwl2bHZfcHVuaXRfcHV0KGRl dl9wcml2KTsNCj4gKw0KPiArCXJldHVybiBlbmFibGVkOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg dm9pZCBjaHZfc2V0X3BpcGVfcG93ZXJfd2VsbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiAq ZGV2X3ByaXYsDQo+ICsJCQkJICAgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGws DQo+ICsJCQkJICAgIGJvb2wgZW5hYmxlKQ0KPiArew0KPiArCWVudW0gcGlwZSBwaXBlID0gUElQ RV9BOw0KPiArCXUzMiBzdGF0ZTsNCj4gKwl1MzIgY3RybDsNCj4gKw0KPiArCXN0YXRlID0gZW5h YmxlID8gRFBfU1NTX1BXUl9PTihwaXBlKSA6IERQX1NTU19QV1JfR0FURShwaXBlKTsNCj4gKw0K PiArCXZsdl9wdW5pdF9nZXQoZGV2X3ByaXYpOw0KPiArDQo+ICsjZGVmaW5lIENPTkQgXA0KPiAr CSgodmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBVTklUX1JFR19EU1BTU1BNKSAmDQo+IERQX1NT U19NQVNLKHBpcGUpKSA9PSBzdGF0ZSkNCj4gKw0KPiArCWlmIChDT05EKQ0KPiArCQlnb3RvIG91 dDsNCj4gKw0KPiArCWN0cmwgPSB2bHZfcHVuaXRfcmVhZChkZXZfcHJpdiwgUFVOSVRfUkVHX0RT UFNTUE0pOw0KPiArCWN0cmwgJj0gfkRQX1NTQ19NQVNLKHBpcGUpOw0KPiArCWN0cmwgfD0gZW5h YmxlID8gRFBfU1NDX1BXUl9PTihwaXBlKSA6IERQX1NTQ19QV1JfR0FURShwaXBlKTsNCj4gKwl2 bHZfcHVuaXRfd3JpdGUoZGV2X3ByaXYsIFBVTklUX1JFR19EU1BTU1BNLCBjdHJsKTsNCj4gKw0K PiArCWlmICh3YWl0X2ZvcihDT05ELCAxMDApKQ0KPiArCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJt LA0KPiArCQkJInRpbWVvdXQgc2V0dGluZyBwb3dlciB3ZWxsIHN0YXRlICUwOHgNCj4gKCUwOHgp XG4iLA0KPiArCQkJc3RhdGUsDQo+ICsJCQl2bHZfcHVuaXRfcmVhZChkZXZfcHJpdiwgUFVOSVRf UkVHX0RTUFNTUE0pKTsNCj4gKw0KPiArI3VuZGVmIENPTkQNCj4gKw0KPiArb3V0Og0KPiArCXZs dl9wdW5pdF9wdXQoZGV2X3ByaXYpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBjaHZfcGlw ZV9wb3dlcl93ZWxsX3N5bmNfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gKmRldl9wcml2 LA0KPiArCQkJCQlzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsDQo+ICpwb3dlcl93ZWxsKQ0KPiArew0K PiArCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBESVNQTEFZX1BIWV9DT05UUk9MLA0KPiArCQkg ICAgICAgZGV2X3ByaXYtPmNodl9waHlfY29udHJvbCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGNodl9waXBlX3Bvd2VyX3dlbGxfZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlDQo+ ICpkZXZfcHJpdiwNCj4gKwkJCQkgICAgICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbA0KPiAqcG93 ZXJfd2VsbCkNCj4gK3sNCj4gKwljaHZfc2V0X3BpcGVfcG93ZXJfd2VsbChkZXZfcHJpdiwgcG93 ZXJfd2VsbCwgdHJ1ZSk7DQo+ICsNCj4gKwl2bHZfZGlzcGxheV9wb3dlcl93ZWxsX2luaXQoZGV2 X3ByaXYpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBjaHZfcGlwZV9wb3dlcl93ZWxsX2Rp c2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gKmRldl9wcml2LA0KPiArCQkJCQlzdHJ1 Y3QgaTkxNV9wb3dlcl93ZWxsDQo+ICpwb3dlcl93ZWxsKQ0KPiArew0KPiArCXZsdl9kaXNwbGF5 X3Bvd2VyX3dlbGxfZGVpbml0KGRldl9wcml2KTsNCj4gKw0KPiArCWNodl9zZXRfcGlwZV9wb3dl cl93ZWxsKGRldl9wcml2LCBwb3dlcl93ZWxsLCBmYWxzZSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyB2b2lkDQo+ICt0Z2xfdGNfY29sZF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1LCBib29sIGJsb2NrKQ0KPiArew0KPiArCXU4IHRyaWVzID0gMDsNCj4gKwlpbnQgcmV0Ow0K PiArDQo+ICsJd2hpbGUgKDEpIHsNCj4gKwkJdTMyIGxvd192YWw7DQo+ICsJCXUzMiBoaWdoX3Zh bCA9IDA7DQo+ICsNCj4gKwkJaWYgKGJsb2NrKQ0KPiArCQkJbG93X3ZhbCA9DQo+IFRHTF9QQ09E RV9FWElUX1RDQ09MRF9EQVRBX0xfQkxPQ0tfUkVROw0KPiArCQllbHNlDQo+ICsJCQlsb3dfdmFs ID0NCj4gVEdMX1BDT0RFX0VYSVRfVENDT0xEX0RBVEFfTF9VTkJMT0NLX1JFUTsNCj4gKw0KPiAr CQkvKg0KPiArCQkgKiBTcGVjIHN0YXRlcyB0aGF0IHdlIHNob3VsZCB0aW1lb3V0IHRoZSByZXF1 ZXN0IGFmdGVyDQo+IDIwMHVzDQo+ICsJCSAqIGJ1dCB0aGUgZnVuY3Rpb24gYmVsb3cgd2lsbCB0 aW1lb3V0IGFmdGVyIDUwMHVzDQo+ICsJCSAqLw0KPiArCQlyZXQgPSBzbmJfcGNvZGVfcmVhZChp OTE1LCBUR0xfUENPREVfVENDT0xELCAmbG93X3ZhbCwNCj4gJmhpZ2hfdmFsKTsNCj4gKwkJaWYg KHJldCA9PSAwKSB7DQo+ICsJCQlpZiAoYmxvY2sgJiYNCj4gKwkJCSAgICAobG93X3ZhbCAmDQo+ IFRHTF9QQ09ERV9FWElUX1RDQ09MRF9EQVRBX0xfRVhJVF9GQUlMRUQpKQ0KPiArCQkJCXJldCA9 IC1FSU87DQo+ICsJCQllbHNlDQo+ICsJCQkJYnJlYWs7DQo+ICsJCX0NCj4gKw0KPiArCQlpZiAo Kyt0cmllcyA9PSAzKQ0KPiArCQkJYnJlYWs7DQo+ICsNCj4gKwkJbXNsZWVwKDEpOw0KPiArCX0N Cj4gKw0KPiArCWlmIChyZXQpDQo+ICsJCWRybV9lcnIoJmk5MTUtPmRybSwgIlRDIGNvbGQgJXNi bG9jayBmYWlsZWRcbiIsDQo+ICsJCQlibG9jayA/ICIiIDogInVuIik7DQo+ICsJZWxzZQ0KPiAr CQlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAiVEMgY29sZCAlc2Jsb2NrIHN1Y2NlZWRlZFxuIiwN Cj4gKwkJCSAgICBibG9jayA/ICIiIDogInVuIik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lk DQo+ICt0Z2xfdGNfY29sZF9vZmZfcG93ZXJfd2VsbF9lbmFibGUoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUsDQo+ICsJCQkJICBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICpwb3dlcl93ZWxs KQ0KPiArew0KPiArCXRnbF90Y19jb2xkX3JlcXVlc3QoaTkxNSwgdHJ1ZSk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkDQo+ICt0Z2xfdGNfY29sZF9vZmZfcG93ZXJfd2VsbF9kaXNhYmxlKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LA0KPiArCQkJCSAgIHN0cnVjdCBpOTE1X3Bvd2Vy X3dlbGwgKnBvd2VyX3dlbGwpDQo+ICt7DQo+ICsJdGdsX3RjX2NvbGRfcmVxdWVzdChpOTE1LCBm YWxzZSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICt0Z2xfdGNfY29sZF9vZmZfcG93 ZXJfd2VsbF9zeW5jX2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LA0KPiArCQkJCSAg IHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwpDQo+ICt7DQo+ICsJaWYgKGludGVs X3Bvd2VyX3dlbGxfcmVmY291bnQocG93ZXJfd2VsbCkgPiAwKQ0KPiArCQl0Z2xfdGNfY29sZF9v ZmZfcG93ZXJfd2VsbF9lbmFibGUoaTkxNSwgcG93ZXJfd2VsbCk7DQo+ICsJZWxzZQ0KPiArCQl0 Z2xfdGNfY29sZF9vZmZfcG93ZXJfd2VsbF9kaXNhYmxlKGk5MTUsIHBvd2VyX3dlbGwpOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgYm9vbA0KPiArdGdsX3RjX2NvbGRfb2ZmX3Bvd2VyX3dlbGxfaXNf ZW5hYmxlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYsDQo+ICsJCQkJICAg ICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbA0KPiAqcG93ZXJfd2VsbCkNCj4gK3sNCj4gKwkvKg0K PiArCSAqIE5vdCB0aGUgY29ycmVjdGx5IGltcGxlbWVudGF0aW9uIGJ1dCB0aGVyZSBpcyBubyB3 YXkgdG8ganVzdA0KPiByZWFkIGl0DQo+ICsJICogZnJvbSBQQ09ERSwgc28gcmV0dXJuaW5nIGNv dW50IHRvIGF2b2lkIHN0YXRlIG1pc21hdGNoDQo+IGVycm9ycw0KPiArCSAqLw0KPiArCXJldHVy biBpbnRlbF9wb3dlcl93ZWxsX3JlZmNvdW50KHBvd2VyX3dlbGwpOw0KPiArfQ0KPiArDQo+ICsN Cj4gK2NvbnN0IHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGxfb3BzIGk5eHhfYWx3YXlzX29uX3Bvd2Vy X3dlbGxfb3BzID0gew0KPiArCS5zeW5jX2h3ID0gaTl4eF9wb3dlcl93ZWxsX3N5bmNfaHdfbm9v cCwNCj4gKwkuZW5hYmxlID0gaTl4eF9hbHdheXNfb25fcG93ZXJfd2VsbF9ub29wLA0KPiArCS5k aXNhYmxlID0gaTl4eF9hbHdheXNfb25fcG93ZXJfd2VsbF9ub29wLA0KPiArCS5pc19lbmFibGVk ID0gaTl4eF9hbHdheXNfb25fcG93ZXJfd2VsbF9lbmFibGVkLA0KPiArfTsNCj4gKw0KPiArY29u c3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9vcHMgY2h2X3BpcGVfcG93ZXJfd2VsbF9vcHMgPSB7 DQo+ICsJLnN5bmNfaHcgPSBjaHZfcGlwZV9wb3dlcl93ZWxsX3N5bmNfaHcsDQo+ICsJLmVuYWJs ZSA9IGNodl9waXBlX3Bvd2VyX3dlbGxfZW5hYmxlLA0KPiArCS5kaXNhYmxlID0gY2h2X3BpcGVf cG93ZXJfd2VsbF9kaXNhYmxlLA0KPiArCS5pc19lbmFibGVkID0gY2h2X3BpcGVfcG93ZXJfd2Vs bF9lbmFibGVkLA0KPiArfTsNCj4gKw0KPiArY29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9v cHMgY2h2X2RwaW9fY21uX3Bvd2VyX3dlbGxfb3BzID0gew0KPiArCS5zeW5jX2h3ID0gaTl4eF9w b3dlcl93ZWxsX3N5bmNfaHdfbm9vcCwNCj4gKwkuZW5hYmxlID0gY2h2X2RwaW9fY21uX3Bvd2Vy X3dlbGxfZW5hYmxlLA0KPiArCS5kaXNhYmxlID0gY2h2X2RwaW9fY21uX3Bvd2VyX3dlbGxfZGlz YWJsZSwNCj4gKwkuaXNfZW5hYmxlZCA9IHZsdl9wb3dlcl93ZWxsX2VuYWJsZWQsDQo+ICt9Ow0K PiArDQo+ICtjb25zdCBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsX29wcyBpODMwX3BpcGVzX3Bvd2Vy X3dlbGxfb3BzID0gew0KPiArCS5zeW5jX2h3ID0gaTgzMF9waXBlc19wb3dlcl93ZWxsX3N5bmNf aHcsDQo+ICsJLmVuYWJsZSA9IGk4MzBfcGlwZXNfcG93ZXJfd2VsbF9lbmFibGUsDQo+ICsJLmRp c2FibGUgPSBpODMwX3BpcGVzX3Bvd2VyX3dlbGxfZGlzYWJsZSwNCj4gKwkuaXNfZW5hYmxlZCA9 IGk4MzBfcGlwZXNfcG93ZXJfd2VsbF9lbmFibGVkLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNv bnN0IHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGxfcmVncyBoc3dfcG93ZXJfd2VsbF9yZWdzID0gew0K PiArCS5iaW9zCT0gSFNXX1BXUl9XRUxMX0NUTDEsDQo+ICsJLmRyaXZlcgk9IEhTV19QV1JfV0VM TF9DVEwyLA0KPiArCS5rdm1yCT0gSFNXX1BXUl9XRUxMX0NUTDMsDQo+ICsJLmRlYnVnCT0gSFNX X1BXUl9XRUxMX0NUTDQsDQo+ICt9Ow0KPiArDQo+ICtjb25zdCBzdHJ1Y3QgaTkxNV9wb3dlcl93 ZWxsX29wcyBoc3dfcG93ZXJfd2VsbF9vcHMgPSB7DQo+ICsJLnJlZ3MgPSAmaHN3X3Bvd2VyX3dl bGxfcmVncywNCj4gKwkuc3luY19odyA9IGhzd19wb3dlcl93ZWxsX3N5bmNfaHcsDQo+ICsJLmVu YWJsZSA9IGhzd19wb3dlcl93ZWxsX2VuYWJsZSwNCj4gKwkuZGlzYWJsZSA9IGhzd19wb3dlcl93 ZWxsX2Rpc2FibGUsDQo+ICsJLmlzX2VuYWJsZWQgPSBoc3dfcG93ZXJfd2VsbF9lbmFibGVkLA0K PiArfTsNCj4gKw0KPiArY29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9vcHMgZ2VuOV9kY19v ZmZfcG93ZXJfd2VsbF9vcHMgPSB7DQo+ICsJLnN5bmNfaHcgPSBpOXh4X3Bvd2VyX3dlbGxfc3lu Y19od19ub29wLA0KPiArCS5lbmFibGUgPSBnZW45X2RjX29mZl9wb3dlcl93ZWxsX2VuYWJsZSwN Cj4gKwkuZGlzYWJsZSA9IGdlbjlfZGNfb2ZmX3Bvd2VyX3dlbGxfZGlzYWJsZSwNCj4gKwkuaXNf ZW5hYmxlZCA9IGdlbjlfZGNfb2ZmX3Bvd2VyX3dlbGxfZW5hYmxlZCwNCj4gK307DQo+ICsNCj4g K2NvbnN0IHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGxfb3BzIGJ4dF9kcGlvX2Ntbl9wb3dlcl93ZWxs X29wcyA9IHsNCj4gKwkuc3luY19odyA9IGk5eHhfcG93ZXJfd2VsbF9zeW5jX2h3X25vb3AsDQo+ ICsJLmVuYWJsZSA9IGJ4dF9kcGlvX2Ntbl9wb3dlcl93ZWxsX2VuYWJsZSwNCj4gKwkuZGlzYWJs ZSA9IGJ4dF9kcGlvX2Ntbl9wb3dlcl93ZWxsX2Rpc2FibGUsDQo+ICsJLmlzX2VuYWJsZWQgPSBi eHRfZHBpb19jbW5fcG93ZXJfd2VsbF9lbmFibGVkLA0KPiArfTsNCj4gKw0KPiArY29uc3Qgc3Ry dWN0IGk5MTVfcG93ZXJfd2VsbF9vcHMgdmx2X2Rpc3BsYXlfcG93ZXJfd2VsbF9vcHMgPSB7DQo+ ICsJLnN5bmNfaHcgPSBpOXh4X3Bvd2VyX3dlbGxfc3luY19od19ub29wLA0KPiArCS5lbmFibGUg PSB2bHZfZGlzcGxheV9wb3dlcl93ZWxsX2VuYWJsZSwNCj4gKwkuZGlzYWJsZSA9IHZsdl9kaXNw bGF5X3Bvd2VyX3dlbGxfZGlzYWJsZSwNCj4gKwkuaXNfZW5hYmxlZCA9IHZsdl9wb3dlcl93ZWxs X2VuYWJsZWQsDQo+ICt9Ow0KPiArDQo+ICtjb25zdCBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsX29w cyB2bHZfZHBpb19jbW5fcG93ZXJfd2VsbF9vcHMgPSB7DQo+ICsJLnN5bmNfaHcgPSBpOXh4X3Bv d2VyX3dlbGxfc3luY19od19ub29wLA0KPiArCS5lbmFibGUgPSB2bHZfZHBpb19jbW5fcG93ZXJf d2VsbF9lbmFibGUsDQo+ICsJLmRpc2FibGUgPSB2bHZfZHBpb19jbW5fcG93ZXJfd2VsbF9kaXNh YmxlLA0KPiArCS5pc19lbmFibGVkID0gdmx2X3Bvd2VyX3dlbGxfZW5hYmxlZCwNCj4gK307DQo+ ICsNCj4gK2NvbnN0IHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGxfb3BzIHZsdl9kcGlvX3Bvd2VyX3dl bGxfb3BzID0gew0KPiArCS5zeW5jX2h3ID0gaTl4eF9wb3dlcl93ZWxsX3N5bmNfaHdfbm9vcCwN Cj4gKwkuZW5hYmxlID0gdmx2X3Bvd2VyX3dlbGxfZW5hYmxlLA0KPiArCS5kaXNhYmxlID0gdmx2 X3Bvd2VyX3dlbGxfZGlzYWJsZSwNCj4gKwkuaXNfZW5hYmxlZCA9IHZsdl9wb3dlcl93ZWxsX2Vu YWJsZWQsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2Vs bF9yZWdzIGljbF9hdXhfcG93ZXJfd2VsbF9yZWdzID0gew0KPiArCS5iaW9zCT0gSUNMX1BXUl9X RUxMX0NUTF9BVVgxLA0KPiArCS5kcml2ZXIJPSBJQ0xfUFdSX1dFTExfQ1RMX0FVWDIsDQo+ICsJ LmRlYnVnCT0gSUNMX1BXUl9XRUxMX0NUTF9BVVg0LA0KPiArfTsNCj4gKw0KPiArY29uc3Qgc3Ry dWN0IGk5MTVfcG93ZXJfd2VsbF9vcHMgaWNsX2F1eF9wb3dlcl93ZWxsX29wcyA9IHsNCj4gKwku cmVncyA9ICZpY2xfYXV4X3Bvd2VyX3dlbGxfcmVncywNCj4gKwkuc3luY19odyA9IGhzd19wb3dl cl93ZWxsX3N5bmNfaHcsDQo+ICsJLmVuYWJsZSA9IGljbF9hdXhfcG93ZXJfd2VsbF9lbmFibGUs DQo+ICsJLmRpc2FibGUgPSBpY2xfYXV4X3Bvd2VyX3dlbGxfZGlzYWJsZSwNCj4gKwkuaXNfZW5h YmxlZCA9IGhzd19wb3dlcl93ZWxsX2VuYWJsZWQsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29u c3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9yZWdzIGljbF9kZGlfcG93ZXJfd2VsbF9yZWdzID0g ew0KPiArCS5iaW9zCT0gSUNMX1BXUl9XRUxMX0NUTF9EREkxLA0KPiArCS5kcml2ZXIJPSBJQ0xf UFdSX1dFTExfQ1RMX0RESTIsDQo+ICsJLmRlYnVnCT0gSUNMX1BXUl9XRUxMX0NUTF9EREk0LA0K PiArfTsNCj4gKw0KPiArY29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9vcHMgaWNsX2RkaV9w b3dlcl93ZWxsX29wcyA9IHsNCj4gKwkucmVncyA9ICZpY2xfZGRpX3Bvd2VyX3dlbGxfcmVncywN Cj4gKwkuc3luY19odyA9IGhzd19wb3dlcl93ZWxsX3N5bmNfaHcsDQo+ICsJLmVuYWJsZSA9IGhz d19wb3dlcl93ZWxsX2VuYWJsZSwNCj4gKwkuZGlzYWJsZSA9IGhzd19wb3dlcl93ZWxsX2Rpc2Fi bGUsDQo+ICsJLmlzX2VuYWJsZWQgPSBoc3dfcG93ZXJfd2VsbF9lbmFibGVkLA0KPiArfTsNCj4g Kw0KPiArY29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9vcHMgdGdsX3RjX2NvbGRfb2ZmX29w cyA9IHsNCj4gKwkuc3luY19odyA9IHRnbF90Y19jb2xkX29mZl9wb3dlcl93ZWxsX3N5bmNfaHcs DQo+ICsJLmVuYWJsZSA9IHRnbF90Y19jb2xkX29mZl9wb3dlcl93ZWxsX2VuYWJsZSwNCj4gKwku ZGlzYWJsZSA9IHRnbF90Y19jb2xkX29mZl9wb3dlcl93ZWxsX2Rpc2FibGUsDQo+ICsJLmlzX2Vu YWJsZWQgPSB0Z2xfdGNfY29sZF9vZmZfcG93ZXJfd2VsbF9pc19lbmFibGVkLA0KPiArfTsNCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9w b3dlcl93ZWxsLmgNCj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3Bs YXlfcG93ZXJfd2VsbC5oDQo+IGluZGV4IDlhMzc1NmZkY2Y3ZmMuLjJjMGU1M2ZiOTc2YzQgMTAw NjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9w b3dlcl93ZWxsLmgNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9k aXNwbGF5X3Bvd2VyX3dlbGwuaA0KPiBAQCAtMzYsNDEgKzM2LDYgQEAgZW51bSBpOTE1X3Bvd2Vy X3dlbGxfaWQgew0KPiAgCVRHTF9ESVNQX1BXX1RDX0NPTERfT0ZGLA0KPiAgfTsNCj4gIA0KPiAt c3RydWN0IGk5MTVfcG93ZXJfd2VsbF9yZWdzIHsNCj4gLQlpOTE1X3JlZ190IGJpb3M7DQo+IC0J aTkxNV9yZWdfdCBkcml2ZXI7DQo+IC0JaTkxNV9yZWdfdCBrdm1yOw0KPiAtCWk5MTVfcmVnX3Qg ZGVidWc7DQo+IC19Ow0KPiAtDQo+IC1zdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsX29wcyB7DQo+IC0J Y29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9yZWdzICpyZWdzOw0KPiAtCS8qDQo+IC0JICog U3luY2hyb25pemUgdGhlIHdlbGwncyBodyBzdGF0ZSB0byBtYXRjaCB0aGUgY3VycmVudCBzdw0K PiBzdGF0ZSwgZm9yDQo+IC0JICogZXhhbXBsZSBlbmFibGUvZGlzYWJsZSBpdCBiYXNlZCBvbiB0 aGUgY3VycmVudCByZWZjb3VudC4NCj4gQ2FsbGVkDQo+IC0JICogZHVyaW5nIGRyaXZlciBpbml0 IGFuZCByZXN1bWUgdGltZSwgcG9zc2libHkgYWZ0ZXIgZmlyc3QNCj4gY2FsbGluZw0KPiAtCSAq IHRoZSBlbmFibGUvZGlzYWJsZSBoYW5kbGVycy4NCj4gLQkgKi8NCj4gLQl2b2lkICgqc3luY19o dykoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsDQo+IC0JCQlzdHJ1Y3QgaTkxNV9wb3dl cl93ZWxsICpwb3dlcl93ZWxsKTsNCj4gLQkvKg0KPiAtCSAqIEVuYWJsZSB0aGUgd2VsbCBhbmQg cmVzb3VyY2VzIHRoYXQgZGVwZW5kIG9uIGl0IChmb3IgZXhhbXBsZQ0KPiAtCSAqIGludGVycnVw dHMgbG9jYXRlZCBvbiB0aGUgd2VsbCkuIENhbGxlZCBhZnRlciB0aGUgMC0+MQ0KPiByZWZjb3Vu dA0KPiAtCSAqIHRyYW5zaXRpb24uDQo+IC0JICovDQo+IC0Jdm9pZCAoKmVuYWJsZSkoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsDQo+IC0JCSAgICAgICBzdHJ1Y3QgaTkxNV9wb3dlcl93 ZWxsICpwb3dlcl93ZWxsKTsNCj4gLQkvKg0KPiAtCSAqIERpc2FibGUgdGhlIHdlbGwgYW5kIHJl c291cmNlcyB0aGF0IGRlcGVuZCBvbiBpdC4gQ2FsbGVkDQo+IGFmdGVyDQo+IC0JICogdGhlIDEt PjAgcmVmY291bnQgdHJhbnNpdGlvbi4NCj4gLQkgKi8NCj4gLQl2b2lkICgqZGlzYWJsZSkoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsDQo+IC0JCQlzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxs ICpwb3dlcl93ZWxsKTsNCj4gLQkvKiBSZXR1cm5zIHRoZSBodyBlbmFibGVkIHN0YXRlLiAqLw0K PiAtCWJvb2wgKCppc19lbmFibGVkKShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwNCj4g LQkJCSAgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwpOw0KPiAtfTsNCj4gLQ0K PiAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9kZXNjIHsNCj4gIAljb25zdCBjaGFyICpuYW1lOw0K PiAgCWJvb2wgYWx3YXlzX29uOw0KPiBAQCAtMTUwLDQgKzExNSwyNiBAQCBjb25zdCBjaGFyICpp bnRlbF9wb3dlcl93ZWxsX25hbWUoc3RydWN0DQo+IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2Vs bCk7DQo+ICB1NjQgaW50ZWxfcG93ZXJfd2VsbF9kb21haW5zKHN0cnVjdCBpOTE1X3Bvd2VyX3dl bGwgKnBvd2VyX3dlbGwpOw0KPiAgaW50IGludGVsX3Bvd2VyX3dlbGxfcmVmY291bnQoc3RydWN0 IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbCk7DQo+ICANCj4gK3ZvaWQgZ2VuOV9lbmFibGVf ZGM1KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7DQo+ICt2b2lkIHNrbF9lbmFi bGVfZGM2KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7DQo+ICt2b2lkIGdlbjlf c2FuaXRpemVfZGNfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsNCj4g K3ZvaWQgZ2VuOV9zZXRfZGNfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LCB1MzINCj4gc3RhdGUpOw0KPiArdm9pZCBnZW45X2Rpc2FibGVfZGNfc3RhdGVzKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7DQo+ICt2b2lkIGJ4dF9lbmFibGVfZGM5KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7DQo+ICt2b2lkIGJ4dF9kaXNhYmxlX2RjOShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOw0KPiArDQo+ICtleHRlcm4gY29uc3Qg c3RydWN0IGk5MTVfcG93ZXJfd2VsbF9vcHMNCj4gaTl4eF9hbHdheXNfb25fcG93ZXJfd2VsbF9v cHM7DQo+ICtleHRlcm4gY29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9vcHMgY2h2X3BpcGVf cG93ZXJfd2VsbF9vcHM7DQo+ICtleHRlcm4gY29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9v cHMgY2h2X2RwaW9fY21uX3Bvd2VyX3dlbGxfb3BzOw0KPiArZXh0ZXJuIGNvbnN0IHN0cnVjdCBp OTE1X3Bvd2VyX3dlbGxfb3BzIGk4MzBfcGlwZXNfcG93ZXJfd2VsbF9vcHM7DQo+ICtleHRlcm4g Y29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9vcHMgaHN3X3Bvd2VyX3dlbGxfb3BzOw0KPiAr ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGxfb3BzIGdlbjlfZGNfb2ZmX3Bvd2Vy X3dlbGxfb3BzOw0KPiArZXh0ZXJuIGNvbnN0IHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGxfb3BzIGJ4 dF9kcGlvX2Ntbl9wb3dlcl93ZWxsX29wczsNCj4gK2V4dGVybiBjb25zdCBzdHJ1Y3QgaTkxNV9w b3dlcl93ZWxsX29wcyB2bHZfZGlzcGxheV9wb3dlcl93ZWxsX29wczsNCj4gK2V4dGVybiBjb25z dCBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsX29wcyB2bHZfZHBpb19jbW5fcG93ZXJfd2VsbF9vcHM7 DQo+ICtleHRlcm4gY29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9vcHMgdmx2X2RwaW9fcG93 ZXJfd2VsbF9vcHM7DQo+ICtleHRlcm4gY29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2VsbF9vcHMg aWNsX2F1eF9wb3dlcl93ZWxsX29wczsNCj4gK2V4dGVybiBjb25zdCBzdHJ1Y3QgaTkxNV9wb3dl cl93ZWxsX29wcyBpY2xfZGRpX3Bvd2VyX3dlbGxfb3BzOw0KPiArZXh0ZXJuIGNvbnN0IHN0cnVj dCBpOTE1X3Bvd2VyX3dlbGxfb3BzIHRnbF90Y19jb2xkX29mZl9vcHM7DQo+ICsNCj4gICNlbmRp Zg0KDQpCUiwNCg0KSm91bmkgSMO2Z2FuZGVyDQoNCg==