From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11011014.outbound.protection.outlook.com [40.107.130.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DEFF4477994; Fri, 7 Aug 2026 13:41:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.130.14 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786110079; cv=fail; b=mOaPcwfybozxDn2dAs5jLvPzKvxsHjCfQkjacCvjimH7koB1Gk9zitZz8t9Hz3clWNXEcSGFB3evWFD2IPTwsTDVZwG61L7XvHt+k5Zp47Vcl3xEb5tiMJC6AeDKv4GVl7q0fjAWv6f+TiFNRZkgS+hXxfyjOL7QSL+lLbHyGg8= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786110079; c=relaxed/simple; bh=Dte2waykS0RQWXSlLPKhdCE4qx9nzrLsTLMwTyywsnc=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=u2GNivBIcJvv6+qab29VMl/YBub7+rAa54jveuZzWJ/GGRqCFlffYkcu+Qcl9IY/FSh1FLuB/AZReMhQ/E4NEfrndpIEL4v2S3fxp+XGkNL5EMj6Ii/5VFHQqqxqz2R4tpHa+rCp/ipJB3DkDqe11LOpfSwy5kAbco+3M5cuehQ= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=axis.com; spf=pass smtp.mailfrom=axis.com; dkim=pass (1024-bit key) header.d=axis.com header.i=@axis.com header.b=U6OKPSJd; arc=fail smtp.client-ip=40.107.130.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=axis.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=axis.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=axis.com header.i=@axis.com header.b="U6OKPSJd" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nxrqCZZtLcmYUaYJMv1EXuTI6WjBRjDhD3ZXoYeeAAYhHyNPjRhKaQhbF/n+WonuS85dnxZBxHzftDjcOSkwGMVq54SdMz9VZyE4ma/meDaiv6G0XndAMzWgDmIb5QwXwnJuv3taD2cj4gHYnZnst0/vQPdDoMWcilBxMhv8jlgVbBEBsxzbq+fcIMlVpm6qVZU529Xxu1UcpATRXH6FNbnoVSx17IZkPsydVBKNs6yvQhPfCu+VB/PJQaYKQGPw7cXUTlEVpSjfj785DmFywWPMISDVqnfMfUVH80CAIznTX5oQU0OWBDdnZFhAMC8YLTC5yy+2qhPb8Ar8K3LfjQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=Dte2waykS0RQWXSlLPKhdCE4qx9nzrLsTLMwTyywsnc=; b=NlNbcWle0ONN2qI/uJ9DlKxZYPDA0pZn/uWDRhUopOgaRqC/aEiXgw6+IDN5FbQpJIxHErHjqi9nJRJf0e/rTGWGS/n/F7P9FDddem8tonLdcwzi0pw4Hsyo98IjAdV4VKdgfiRjZtWiP/126zmziUxBWwvQW19qSDsczMezotTKnrdFqlb/J3HaEAwXe+9ziKKTZK1b5Gf3NIzGipO3uVETJ5lXm9B5bcEbaajZj8u6udD8dV/rGa/vwCGaZZhgRMWtoHT1iDWkHcxnqyF2BOrpPwSKRNf8bYQiP91GCgfPmjeJwpG1kkSTiNlnZc9hEJ0QzsjAKQ3bgUtCa6cP7w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=axis.com; dmarc=pass action=none header.from=axis.com; dkim=pass header.d=axis.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=axis.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Dte2waykS0RQWXSlLPKhdCE4qx9nzrLsTLMwTyywsnc=; b=U6OKPSJdsY+wxE80bvtDImbMAkBYkxfTxBxkymnvkMWRHl3o/kORkGaeF7JI0Mymn3uNvoilN+mv+viXzjiqIUehgPOnX+PXnsh1M1ZGCxMB5/Y1gjUgM4yD8h386acZ32eRXtBY8Fy7AfYboMvpkJC6e5byhPoEfscsnfOw9/Y= Received: from DB3PR0202MB9129.eurprd02.prod.outlook.com (2603:10a6:10:43a::19) by PR3PR02MB6188.eurprd02.prod.outlook.com (2603:10a6:102:6f::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.19; Fri, 7 Aug 2026 13:41:04 +0000 Received: from DB3PR0202MB9129.eurprd02.prod.outlook.com ([fe80::7510:e8c3:db37:47ff]) by DB3PR0202MB9129.eurprd02.prod.outlook.com ([fe80::7510:e8c3:db37:47ff%4]) with mapi id 15.21.0292.022; Fri, 7 Aug 2026 13:41:04 +0000 From: Kanak Shilledar To: "joshua.crofts1@gmail.com" CC: "dlechner@baylibre.com" , Henrik Grimler , "nuno.sa@analog.com" , "jean-baptiste.maneyrol@tdk.com" , "robh@kernel.org" , "jic23@kernel.org" , "andy@kernel.org" , "krzk+dt@kernel.org" , "linux-iio@vger.kernel.org" , "conor+dt@kernel.org" , Kernel , "linux-kernel@vger.kernel.org" , "devicetree@vger.kernel.org" Subject: Re: [PATCH 2/3] iio: accel: Add support for ICM42370P Thread-Topic: [PATCH 2/3] iio: accel: Add support for ICM42370P Thread-Index: AQHdJaGpkDBJeWC86ESJa7wUb7qbr7aSXnCAgAA7BgA= Date: Fri, 7 Aug 2026 13:41:04 +0000 Message-ID: References: <20260806-b4-inv_icm42370p-v1-0-670837f5842f@axis.com> <20260806-b4-inv_icm42370p-v1-2-670837f5842f@axis.com> <20260807120937.00004e3c@gmail.com> In-Reply-To: <20260807120937.00004e3c@gmail.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=axis.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DB3PR0202MB9129:EE_|PR3PR02MB6188:EE_ x-ms-office365-filtering-correlation-id: 4a8a79cb-2b1f-427a-75f4-08def489871a x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|6049299003|7416014|23010399003|376014|366016|1800799024|4053099003|38070700021|4013099003|6133799003|10067099003|11063799006|5023799004|4143699003|56012099006|18002099003|22082099003; x-microsoft-antispam-message-info: sKdiRvPQ+99OcYK/p1GQT7m6Y+wXSeeezWKuBqSI9cuXRBNIuCmrdLdbcj8hKQyvqWiuN9Oa/aFeFSHhrHn7YX73BIhCgSHkOn/07j1Cg0kqcYp7DPfMvmb8b8OOPbLbv6zObAlbgOhV+fn/pG5jQ5WjDOmDa48gIoOMLo9YKanNKUVirY6FQD3FLC/Bmh/n8u1TMzpY7w3guxiRwjlQaazfvbxvaaXbwARD+jZ7FyeIIBnwR00reHHHBWOQrLHMnEQD6OSppE7wT1S2AONuE4JnU5brDTgNvrgiqcMmXttTy0huovHG4oUN/VHxifSfNY/bUjWlyj4InC6UhQ0A6aQgvnUD8kkmenKuKJgcGbq/XAJqqukyQnzUQa2OjO+SNtCa8WzjotMGqPB022YlWJG36K24C7z4z2J0Pshwg8KHlVpCWAx7groYtmTjyWYizg1g3VWlSfQ4uNNjssWhAOW+k2TWYy4uNy805qXnSYtdu3K62bJOzDaGNAJ3C8+pi48U5aJX18AMVaAR/nlHq9FrXY/PN4NPukYHPmG874/qDKHzVl4r/t6KxARU2wNnhO3baV62NhuL7rHbbiy/A0Qe987QUkwL6R6YMNKG0yfC9cJKT/rlKC6PFN9WkyAGQzxG+XSyf/GZ8ri8guanVxqbgD0szs7y8c8SD30v8dA= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB3PR0202MB9129.eurprd02.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(6049299003)(7416014)(23010399003)(376014)(366016)(1800799024)(4053099003)(38070700021)(4013099003)(6133799003)(10067099003)(11063799006)(5023799004)(4143699003)(56012099006)(18002099003)(22082099003);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?SUlJNjdPVUtGNzVDU2ZTWWI0aDhlS09FVkZob1ZxL1NwOWRkMWRibkdPdXNI?= =?utf-8?B?ZGdDdkZTUmIza1NJc3k3VmIwRlJ3bUtCMHB6OW9XRm9Fc2ZONHMzNXpRd3ls?= =?utf-8?B?UzVJbEpnTytaZXJBRlhOMXZ5SzhCOG5jams2TjEvMEQrLzQ5WWo1V0hVdEFG?= =?utf-8?B?WUJZY09YVFRibkJIODNndmFwTCtMbXloUFh6ZWd4d2dwNnFxbFlUcHFSMFdy?= =?utf-8?B?S0tDRmRwM1pocGRJTlpTQmozUjUwbktsZktkNGNmaVpMemo3R3dqeU5ueWMy?= =?utf-8?B?SS93aWVlK2lxRElVK0I4aXlYUEdiZDUwTUtuOUFWN1V5VENncFJhT20vYU5u?= =?utf-8?B?NC9mV3c2dDAvYUl3NVE5aU9kSHEzVVZhYTZmL3VkQ1lRRGtzUm9HdFFHbUJh?= =?utf-8?B?MUZOcUY2NE1FRVVzUXV2ck9hZ3ZZdGhBTnhaTFpRMGdUNUNWSzdKTmFDTFI5?= =?utf-8?B?dExXVzN1MW1sQndxUmFzTWJuUEZmR0RJdHhMWEd1R0pSa2pvZGRtd3pFOWtB?= =?utf-8?B?bzd4QjdLVEJESWFNUG5BWHlwLzhvNm5mc21kK0RpS2lHMmsyalZEanFUeHU5?= =?utf-8?B?R00zc0ZVYU1XSjl3cHhMVVBSa2J4UVUvaWh3VXdOSkdiU3hGWGc1Skt0ZHRY?= =?utf-8?B?SCsxZWZKdXlhMmNRbm81TWlBZWZGZ0FTWjh6cThwbUhWSlg2MW9tb3dRK2hX?= =?utf-8?B?bFpIRDdvLzNXTTJ1TjhmR0ZHcEhyQ3BHcmlXUC9Kb3cvNlk1Z3FZaW1ZRDdP?= =?utf-8?B?YXhhamovbmZjN3A4Y2c4dVlUUHU5S2kyZVFTdzZzSHlJRm9IaURxR0ZrUVMx?= =?utf-8?B?Z0MyLzNjZkNwS1pib3kxZWVJaUZvZy9PYytkQWtQakNrRHlqN1puRHhocEhL?= =?utf-8?B?empaclIwZ0dtM3pZTHJLMDVIRUNlMms5RzZoV3V5emQyaElNYkE0UUd0bGZo?= =?utf-8?B?ODRKZnhubm5iRXJqNitId3lpVzc0eGlkTWFpZHlaa0NoaEhWSFRVMEJLRzZw?= =?utf-8?B?QmlBM0ZndzYrSkVGVVZZKzNndEdnaTA2ZDFvVlgyQ0NSQ2Q0R3NtYk54TGF6?= =?utf-8?B?V0l1dEt1NGRCbmZ2R3duWVdYU0Z2MFplYU1mTUhpWUFmUTJoWFJQR2hjNW4v?= =?utf-8?B?NFhQQ3JqdGNNc2YvL0ptMVVubzJTT2FzeGI3a1R6TzFqUEVZNFN1Q0hVYmZo?= =?utf-8?B?bHRhU1hhUm8ySGdkM3czVWlpdGk3V1JCYm9SK01DRFJyc3lqZi9UNklTMUd6?= =?utf-8?B?aGhCYklIY0VGeUhNVTF5ZWhVWlpjaEJVampFY1hVK1B1d0NTamhwalNDMkda?= =?utf-8?B?R0RUS0tuNU5nY1kxQ2FqZllXNWl4VXlCWGtLMm80VnJyM1Q3UC9pcDgyVmtw?= =?utf-8?B?VWR2SGZMYldibW41WGRiUkFYNEFndE5oL2o0aEpBUVRQLzU2UGY2SGJjdGxO?= =?utf-8?B?WHNveWlwY3p1VkNJTERVNWJYV0laYjBENDlZVFRqUnkzNDFjREg2WnBncWQz?= =?utf-8?B?em5qeGVQcytiMEFXUzZqUXNYd0pEUE1xMkJjaWpwVUp3Um9QYWI1eGdvcU9i?= =?utf-8?B?NUZBY2pjWGNXdDVHb1FSNFo1enFvTUhyRTV6OE8wQXpqZ2RNZHZPQWFzbktn?= =?utf-8?B?UHFUZjlLSm9Wdmg5alVBajV0Vlk5UVNveUcxK0dnU3dvdzJJZDFScmVqcWlF?= =?utf-8?B?ZUZ3TGdKbHJWTFR1SlRFVG9nUHJMRUhDOUREbzhNcHZHcHJ5dWY0bUs4UUJr?= =?utf-8?B?U3ROeXc3SjU3dnl6TlFVWUFvL2ZjOVgwbSt1SUFVYnBpZUI2S0kzMVZ2ZWtr?= =?utf-8?B?ZXlGbnlqVU8rQ29SOHRGSHFhUFcrcE5FRmRKelphOEtFVzFsU3Q0N3VGK2Zi?= =?utf-8?B?Q3pFd2pLSDFTYm9FRUtCUUVtaldrYXVTYzdUWnlkOGRYZXFNbDF4b01rc2Rt?= =?utf-8?B?Z2VmMmFSTkIxSGJYWjFtQWQxV1lDMFdhcEpnRlpVU1kzSm8wdGE2ZmNlSmR2?= =?utf-8?B?WlZBTXV4K0ZGeVpsbkRUeXJwNkhQc1JMMTdZU3p0Q1J3eFl4YnVOQTZSRElE?= =?utf-8?B?SnJxV0FOQ0ZndkFwUWNYNHF4akhmcjlxZElXdXZyZUNGeVlpVEM1Q2tER3lQ?= =?utf-8?B?YmM3M3gwWlN6MDE5ZDdCU3dUM2lhZ2hiQ1NuV3Jxc3ZVYWRvUGkycjgyUU0x?= =?utf-8?B?bEVZbkV3UkR1aEVoaFh5ZkFHTzBBUDJRVXhJSmdHR3lqdXZnNWRKMk83Ylp6?= =?utf-8?B?aWZmUTRqaEJCc0xKYWZOdnB0U3M0ekxUT2FIdGxISGdaYkZjUkhHQlJTV0k2?= =?utf-8?B?elpvNEFZMVVmcWtLN2gxMWs5UmMrS2lrSFhmbGV6dllaZUpUMmJ6Zz09?= Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="=-eL5AqN36btVvCvQ7vaTv" Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-OriginatorOrg: axis.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DB3PR0202MB9129.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4a8a79cb-2b1f-427a-75f4-08def489871a X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Aug 2026 13:41:04.7166 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 78703d3c-b907-432f-b066-88f7af9ca3af X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: lv49Gib3IaJzkrZJUUW+PiRWmnhBs6Rj/M2BRf0Q4XtfOM6HDl0Fushl5+vinDWn X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR02MB6188 --=-eL5AqN36btVvCvQ7vaTv Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 SGkgSm9zaHVhLAoKT24gRnJpLCAyMDI2LTA4LTA3IGF0IDEyOjA5ICswMjAwLCBKb3NodWEgQ3Jv ZnRzIHdyb3RlOgo+IFtZb3UgZG9uJ3Qgb2Z0ZW4gZ2V0IGVtYWlsIGZyb20gam9zaHVhLmNyb2Z0 czFAZ21haWwuY29tLiBMZWFybiB3aHkKPiB0aGlzIGlzIGltcG9ydGFudCBhdCBodHRwczovL2Fr YS5tcy9MZWFybkFib3V0U2VuZGVySWRlbnRpZmljYXRpb27CoF0KPiAKPiBPbiBUaHUsIDYgQXVn IDIwMjYgMTQ6NDY6MjggKzAyMDAKPiBLYW5hayBTaGlsbGVkYXIgPGthbmFrLnNoaWxsZWRhckBh eGlzLmNvbT4gd3JvdGU6Cj4gCj4gPiBBZGQgc3VwcG9ydCBmb3IgdGhlIEludmVuc2Vuc2UgSUNN NDIzNzBQIE1FTVMgTW90aW9uVHJhY2tpbmcgMy1heGlzCj4gPiBhY2NlbGVyb21ldGVyIHdpdGgg YSBidWlsdC1pbiB0ZW1wZXJhdHVyZSBzZW5zb3IuIENvbXBhcmVkIHRvIG90aGVyCj4gPiBzZW5z b3JzIGZyb20gdGhlIHNhbWUgdmVuZG9yIElDTTQyMzcwIHVzZXMgYSBkaWZmZXJlbnQgd2F5IG9m Cj4gPiBoYW5kbGluZwo+ID4gcmVnaXN0ZXIgYmFua3MuIEFsdGhvdWdoIHRoZSBkZXZpY2Ugc3Vw cG9ydHMgSTJDLCBTUEksIGFuZCBJM0MsCj4gPiBpbXBsZW1lbnQgb25seSBJMkMgc3VwcG9ydC7C oCBQcm92aWRlIGJhc2ljIHN1cHBvcnQgZm9yIHJhdyBzZW5zb3IKPiA+IHJlYWRzIGFuZCBhIHN5 c2ZzIGludGVyZmFjZSBmb3Igc2V0dGluZyB0aGUgY2FsaWJyYXRpb24gYmlhcy4gS2VlcAo+ID4g dGhlCj4gPiBlbWJlZGRlZCB0ZW1wZXJhdHVyZSBzZW5zb3IgZW5hYmxlZCBiZWNhdXNlIHRoZSBk ZXZpY2UgZGVzaWduIGRvZXMKPiA+IG5vdAo+ID4gYWxsb3cgaXQgdG8gYmUgdHVybmVkIG9mZi4K PiA+IAo+ID4gU2lnbmVkLW9mZi1ieTogS2FuYWsgU2hpbGxlZGFyIDxrYW5hay5zaGlsbGVkYXJA YXhpcy5jb20+Cj4gPiAtLS0KPiAKPiBIaSBLYW5haywKPiAKPiBteSBjb21tZW50cyBpbmxpbmUu IFRoaXMgaXMgYW4gbGFyZ2UgZHJpdmVyIGFuZCBJJ3ZlIHByb2JhYmx5IG1pc3NlZAo+IHNvbWV0 aGluZy4gQWRkaXRpb25hbGx5LCBTYXNoaWtvIGhhZCBzb21lIHByZXR0eSBnb29kIHJlbWFya3Mg YWJvdXQKPiB0aGUgc2NhbGluZyBtYXRoIGV0Yy4gc28gcGxlYXNlIGNoZWNrIG91dCB0aG9zZToK CgpUaGFua3MgZm9yIHRoZSBkZXRhaWxlZCByZXZpZXcuCgo+IAo+IGh0dHBzOi8vc2FzaGlrby5k ZXYvIy9wYXRjaHNldC8yMDI2MDgwNi1iNC1pbnZfaWNtNDIzNzBwLXYxLTAtNjcwODM3ZjU4NDJm JTQwYXhpcy5jb20KCkkgYW0gZ29pbmcgdGhyb3VnaCB0aGUgc2FzaGlrbydzIGNvbW1lbnRzIGFu ZCBpbmNvcnBvcmF0aW5nIHRoZW0gaW4gbXkKdjIuCgo+IEpvc2gKPiAKPiA+ICtjb25maWcgSU5W X0lDTTQyMzcwCj4gPiArwqDCoMKgwqAgdHJpc3RhdGUKPiA+ICvCoMKgwqDCoCBzZWxlY3QgSUlP X0JVRkZFUgo+ID4gK8KgwqDCoMKgIHNlbGVjdCBJSU9fSU5WX1NFTlNPUlNfVElNRVNUQU1QCj4g PiArCj4gPiArY29uZmlnIElOVl9JQ000MjM3MF9JMkMKPiA+ICvCoMKgwqDCoCB0cmlzdGF0ZSAi SW52ZW5TZW5zZSBJQ00tNDIzNzAgSTJDIGRyaXZlciIKPiA+ICvCoMKgwqDCoCBkZXBlbmRzIG9u IEkyQwo+ID4gK8KgwqDCoMKgIHNlbGVjdCBJTlZfSUNNNDIzNzAKPiA+ICvCoMKgwqDCoCBzZWxl Y3QgUkVHTUFQX0kyQwo+ID4gK8KgwqDCoMKgIGhlbHAKPiA+ICvCoMKgwqDCoMKgwqAgVGhpcyBk cml2ZXIgc3VwcG9ydHMgdGhlIEludmVuU2Vuc2UgSUNNLTQyNzMwIG1vdGlvbgo+ID4gdHJhY2tp bmcKPiA+ICvCoMKgwqDCoMKgwqAgZGV2aWNlcyBvdmVyIEkyQy4KPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqAgVGhpcyBkcml2ZXIgY2FuIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBUaGUgbW9kdWxlIHdp bGwgYmUKPiA+IGNhbGxlZAo+ID4gK8KgwqDCoMKgwqDCoCBpbnZfaWNtNDIzNzBfaTJjLgo+ID4g Kwo+ID4gwqBjb25maWcgS1hTRDkKPiA+IMKgwqDCoMKgwqAgdHJpc3RhdGUgIktpb25peCBLWFNE OSBBY2NlbGVyb21ldGVyIERyaXZlciIKPiA+IMKgwqDCoMKgwqAgc2VsZWN0IElJT19CVUZGRVIK PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9hY2NlbC9NYWtlZmlsZQo+ID4gYi9kcml2ZXJz L2lpby9hY2NlbC9NYWtlZmlsZQo+ID4gaW5kZXggZmE0NDBhODU5MjgzOS4uNjc1MGIwM2VkZjUx OCAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvaWlvL2FjY2VsL01ha2VmaWxlCj4gPiArKysgYi9k cml2ZXJzL2lpby9hY2NlbC9NYWtlZmlsZQo+ID4gQEAgLTQ5LDYgKzQ5LDExIEBAIG9iai0kKENP TkZJR19ISURfU0VOU09SX0FDQ0VMXzNEKSArPSBoaWQtc2Vuc29yLQo+ID4gYWNjZWwtM2Qubwo+ ID4gwqBvYmotJChDT05GSUdfSUlPX0tYMDIyQSnCoMKgwqDCoCArPSBraW9uaXgta3gwMjJhLm8K PiA+IMKgb2JqLSQoQ09ORklHX0lJT19LWDAyMkFfSTJDKSArPSBraW9uaXgta3gwMjJhLWkyYy5v Cj4gPiDCoG9iai0kKENPTkZJR19JSU9fS1gwMjJBX1NQSSkgKz0ga2lvbml4LWt4MDIyYS1zcGku bwo+ID4gKwo+ID4gK29iai0kKENPTkZJR19JTlZfSUNNNDIzNzApICs9IGludi1pY200MjM3MC5v Cj4gPiAraW52LWljbTQyMzcwLXkgKz0gaW52X2ljbTQyMzcwX2NvcmUubwo+ID4gK29iai0kKENP TkZJR19JTlZfSUNNNDIzNzBfSTJDKSArPSBpbnZfaWNtNDIzNzBfaTJjLm8KPiA+ICsKPiA+IMKg b2JqLSQoQ09ORklHX0tYQ0pLMTAxMykgKz0ga3hjamstMTAxMy5vCj4gPiDCoG9iai0kKENPTkZJ R19LWFNEOSnCoCArPSBreHNkOS5vCj4gPiDCoG9iai0kKENPTkZJR19LWFNEOV9TUEkpwqDCoMKg wqDCoCArPSBreHNkOS1zcGkubwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2FjY2VsL2lu dl9pY200MjM3MC5oCj4gPiBiL2RyaXZlcnMvaWlvL2FjY2VsL2ludl9pY200MjM3MC5oCj4gPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMDAwMC4uOTg2NmE1ZTk3MGRj ZAo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9paW8vYWNjZWwvaW52X2ljbTQy MzcwLmgKPiA+IEBAIC0wLDAgKzEsMzY1IEBACj4gPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KPiA+ICsvKgo+ID4gKyAqIENvcHlyaWdodCAoQykgMjAy MCBJbnZlbnNlbnNlLCBJbmMuCj4gPiArICogQ29weXJpZ2h0IChDKSAyMDI2IEF4aXMgQ29tbXVu aWNhdGlvbnMgQUIKPiA+ICsgKi8KPiA+ICsKPiA+ICsjaWZuZGVmIElOVl9JQ000MjM3MF9IXwo+ ID4gKyNkZWZpbmUgSU5WX0lDTTQyMzcwX0hfCj4gPiArCj4gPiArI2luY2x1ZGUgPGxpbnV4L2Jp dHMuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4KPiA+ICsjaW5jbHVkZSA8bGlu dXgvcmVnbWFwLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Cj4gPiArI2luY2x1ZGUg PGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgo+IAo+IFNvcnQgdGhlc2UgaGVhZGVycyBhbHBo YWJldGljYWxseS4gQWxzbyB5b3UncmUgbWlzc2luZyB0eXBlcy5oLgo+IAo+ID4gKyNpbmNsdWRl IDxsaW51eC9paW8vaWlvLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2lpby9jb21tb24vaW52X3Nl bnNvcnNfdGltZXN0YW1wLmg+Cj4gCj4gR3JvdXAgdGhlIDxsaW51eC9paW8vKj4gaGVhZGVycyBz ZXBhcmF0ZWx5IChjaGVjayBvdGhlciBkcml2ZXJzIGluCj4gSUlPCj4gZm9yIHJlZmVyZW5jZSku CgpXaWxsIHNvcnQgYW5kIGdyb3VwIHRoZSBoZWFkZXJzIGFzIHBlciB0aGUgY29udmVudGlvbi4K Cj4gPiArCj4gPiArZW51bSBpbnZfaWNtNDIzNzBfY2hpcCB7Cj4gPiArwqDCoMKgwqAgSU5WX0NI SVBfSU5WQUxJRCwKPiA+ICvCoMKgwqDCoCBJTlZfQ0hJUF9JQ000MjM3MCwKPiA+ICvCoMKgwqDC oCBJTlZfQ0hJUF9OQiwKPiA+ICt9Owo+ID4gKwo+ID4gKy8qIHNlbnNvciBjb25maWd1cmF0aW9u IHN0cnVjdCAqLwo+ID4gK3N0cnVjdCBpbnZfaWNtNDIzNzBfY29uZiB7Cj4gPiArwqDCoMKgwqAg aW50IG1vZGU7Cj4gPiArwqDCoMKgwqAgaW50IGZzOwo+ID4gK8KgwqDCoMKgIGludCBvZHI7Cj4g PiArwqDCoMKgwqAgaW50IGZpbHRlcjsKPiA+ICt9Owo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHN0 cnVjdCBpbnZfaWNtNDIzNzBfZGF0YSAtIGRyaXZlciBzdGF0ZSB2YXJpYWJsZXMKPiA+ICsgKiBA bG9jazrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxvY2sgZm9yIHNlcmlhbGl6aW5nIG11bHRpcGxl IHJlZ2lzdGVyCj4gPiBhY2Nlc3MuCj4gPiArICogQG5hbWU6wqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBjaGlwIG5hbWUuCj4gPiArICogQG1hcDrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVnbWFw IHBvaW50ZXIuCj4gPiArICogQHZkZF9zdXBwbHk6wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg VkREIHZvbHRhZ2UgcmVndWxhdG9yIGZvciB0aGUgY2hpcC4KPiA+ICsgKiBAdmRkaW9fc3VwcGx5 OsKgwqDCoCBJL08gdm9sdGFnZSByZWd1bGF0b3IgZm9yIHRoZSBjaGlwLgo+ID4gKyAqIEBpbmRp b19hY2NlbDrCoMKgwqDCoCBhY2NlbGVyb21ldGVyIElJTyBkZXZpY2UuCj4gPiArICogQHNlbnNv cl9zdGF0ZTrCoMKgwqAgcGVyLXNlbnNvciBzdGF0ZSB0cmFja2luZyAoZS5nLiBwb3dlciwgT0RS KS4KPiA+ICsgKiBAYnVmZmVyOsKgwqDCoMKgwqDCoMKgwqDCoCBidWZmZXIgZm9yIHJlYWRpbmcg ZGF0YSByZWdpc3RlcnMsIGFsaWduZWQKPiA+IGZvciBETUEuCj4gPiArICogQGFjY2VsX2NhbGli YmlhczogYWNjZWxlcm9tZXRlciBjYWxpYnJhdGlvbiBiaWFzIGZvciBYLCBZLCBhbmQKPiA+IFog YXhlcy4KPiA+ICsgKiBAZmlmbzrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEZJRk8gc3RhdGUgYW5k IGNvbmZpZ3VyYXRpb24uCj4gPiArICogQHRpbWVzdGFtcDrCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGludGVycnVwdCB0aW1lc3RhbXAuCj4gPiArICogQGNoaXA6wqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBjaGlwIGlkZW50aWZpZXIuCj4gPiArICogQGNvbmY6wqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBjaGlwIHNlbnNvcnMgY29uZmlndXJhdGlvbnMuCj4gPiArICovCj4gPiArc3RydWN0IGlu dl9pY200MjM3MF9kYXRhIHsKPiA+ICvCoMKgwqDCoCBzdHJ1Y3QgbXV0ZXggbG9jazsKPiA+ICvC oMKgwqDCoCBjb25zdCBjaGFyICpuYW1lOwo+ID4gK8KgwqDCoMKgIHN0cnVjdCByZWdtYXAgKm1h cDsKPiA+ICvCoMKgwqDCoCBzdHJ1Y3QgcmVndWxhdG9yICp2ZGRfc3VwcGx5Owo+ID4gK8KgwqDC oMKgIHN0cnVjdCByZWd1bGF0b3IgKnZkZGlvX3N1cHBseTsKPiA+ICvCoMKgwqDCoCBzdHJ1Y3Qg aWlvX2RldiAqaW5kaW9fYWNjZWw7Cj4gCj4gWW91IHByb2JhYmx5IGRvbid0IG5lZWQgdGhpcy4K Q2FuIHlvdSBwbGVhc2UgY2xhcmlmeSB0aGlzIGNvbW1lbnQ/IEFzIEkgYW0gdXNpbmcgYCppbmRp b19hY2NlbGAgaW4Kb3RoZXIgcGxhY2VzIGluc2lkZSBpbnZfaWNtNDIzNzBfY29yZS5jIGFuZCBp biBtYW55IHBsYWNlcyBpbgppbnZfaWNtNDIzNzBfYnVmZmVyLmMuIE9yIGFyZSB5b3UgcGVyaGFw cyByZWZlcnJpbmcgdG8gdGhlCipzZW5zb3Jfc3RhdGUgc3RydWN0IGJlbG93PwoKPiAKPiA+ICvC oMKgwqDCoCBzdHJ1Y3QgaW52X2ljbTQyMzcwX3NlbnNvcl9zdGF0ZSAqc2Vuc29yX3N0YXRlOwo+ ID4gK8KgwqDCoMKgIHU4IGJ1ZmZlclsyXSBfX2FsaWduZWQoSUlPX0RNQV9NSU5BTElHTik7Cj4g Cj4gWW91IHNob3VsZG4ndCBoYXZlIGEgRE1BIGJ1ZmZlciBpbiB0aGUgbWlkZGxlIG9mIHlvdXIg c3RydWN0LCBtb3ZlIGl0Cj4gdG8KPiB0aGUgZW5kIHRvIGVuc3VyZSB0aGUgYnVmZmVyIGdldHMg aXRzIG93biBjYWNoZWxpbmUgdG8gcHJldmVudCB0aGUKPiBDUFUKPiBvdmVyd3JpdGluZyB0aGUg RE1BIGFyZWEgb24gYWNjaWRlbnQuCgpXaWxsIG1vdmUgdGhlIGJ1ZmZlciBwcm9wZXJ0eSBhdCB0 aGUgZW5kLgoKPiAKPiA+ICvCoMKgwqDCoCBzMTYgYWNjZWxfY2FsaWJiaWFzWzNdOwo+ID4gK8Kg wqDCoMKgIHN0cnVjdCBpbnZfaWNtNDIzNzBfZmlmbyBmaWZvOwo+IAo+IFlvdSBhZGQgYnVmZmVy IHN1cHBvcnQgaW4gcGF0Y2ggMywgeWV0IHRoaXMgaXMgaW4gcGF0Y2ggMiwgY2F1c2luZwo+IGJ1 aWxkCj4gZmFpbHVyZXMgaWYgeW91IGNvbXBpbGUgd2l0aG91dCBidWZmZXIgc3VwcG9ydC4gTW92 ZSB0aGlzIHRvIHBhdGNoIDMuCgpXaWxsIG1vdmUgdGhpcyB0byBwYXRjaCAzLgoKPiAKPiA+ICvC oMKgwqDCoCBzNjQgdGltZXN0YW1wOwo+ID4gK8KgwqDCoMKgIGVudW0gaW52X2ljbTQyMzcwX2No aXAgY2hpcDsKPiA+ICvCoMKgwqDCoCBzdHJ1Y3QgaW52X2ljbTQyMzcwX2NvbmYgY29uZjsKPiA+ ICt9Owo+ID4gKwpbc25pcF0KPiA+ICsKPiA+ICsvKiBUZW1wZXJhdHVyZSBzZW5zb3IgZmlsdGVy cyAqLwo+ID4gK2VudW0gaW52X2ljbTQyMzcwX3RlbXBfZmlsdGVyIHsKPiA+ICvCoMKgwqDCoCBJ TlZfSUNNNDIzNzBfVEVNUF9GSUxUX0JXX0RMUEZfQllQQVNTLAo+ID4gK8KgwqDCoMKgIElOVl9J Q000MjM3MF9URU1QX0ZJTFRfQldfRExQRl8xODBIWiwKPiA+ICvCoMKgwqDCoCBJTlZfSUNNNDIz NzBfVEVNUF9GSUxUX0JXX0RMUEZfNzJIWiwKPiA+ICvCoMKgwqDCoCBJTlZfSUNNNDIzNzBfVEVN UF9GSUxUX0JXX0RMUEZfMzRIWiwKPiA+ICvCoMKgwqDCoCBJTlZfSUNNNDIzNzBfVEVNUF9GSUxU X0JXX0RMUEZfMTZIWiwKPiA+ICvCoMKgwqDCoCBJTlZfSUNNNDIzNzBfVEVNUF9GSUxUX0JXX0RM UEZfOEhaLAo+ID4gK8KgwqDCoMKgIElOVl9JQ000MjM3MF9URU1QX0ZJTFRfQldfRExQRl80SFos Cj4gPiArwqDCoMKgwqAgSU5WX0lDTTQyMzcwX1RFTVBfRklMVF9CV19ETFBGX05CLAo+ID4gK307 Cj4gPiArCj4gPiArLyogSUlPIGZvcm1hdCBpbnQgKyBtaWNybyAqLwo+IAo+IE5vIG5lZWQgZm9y IHRoaXMgY29tbWVudC4KPiAKPiA+ICtzdGF0aWMgY29uc3QgaW50IGludl9pY200MjM3MF9hY2Nl bF9vZHJbXSA9IHsKPiA+ICvCoMKgwqDCoCAvKiAxLjU2MjVIeiAqLwo+IAo+IE5vIG5lZWQgZm9y IHRoZXNlIGNvbW1lbnRzLgoKV2lsbCByZW1vdmUgdGhlIGNvbW1lbnRzLgoKPiAKPiA+ICvCoMKg wqDCoCAxLCA1NjI1MDAsCj4gPiArwqDCoMKgwqAgLyogMy4xMjVIeiAqLwo+ID4gK8KgwqDCoMKg IDMsIDEyNTAwMCwKPiA+ICvCoMKgwqDCoCAvKiA2LjI1SHogKi8KPiA+ICvCoMKgwqDCoCA2LCAy NTAwMDAsCj4gPiArwqDCoMKgwqAgLyogMTIuNUh6ICovCj4gPiArwqDCoMKgwqAgMTIsIDUwMDAw MCwKPiA+ICvCoMKgwqDCoCAvKiAyNUh6ICovCj4gPiArwqDCoMKgwqAgMjUsIDAsCj4gPiArwqDC oMKgwqAgLyogNTBIeiAqLwo+ID4gK8KgwqDCoMKgIDUwLCAwLAo+ID4gK8KgwqDCoMKgIC8qIDEw MEh6ICovCj4gPiArwqDCoMKgwqAgMTAwLCAwLAo+ID4gK8KgwqDCoMKgIC8qIDIwMEh6ICovCj4g PiArwqDCoMKgwqAgMjAwLCAwLAo+ID4gK8KgwqDCoMKgIC8qIDQwMEh6ICovCj4gPiArwqDCoMKg wqAgNDAwLCAwLAo+ID4gK8KgwqDCoMKgIC8qIDgwMEh6ICovCj4gPiArwqDCoMKgwqAgODAwLCAw LAo+ID4gK8KgwqDCoMKgIC8qIDEuNmtIeiAqLwo+ID4gK8KgwqDCoMKgIDE2MDAsIDAsCj4gPiAr fTsKPiA+ICsKPiA+ICsjZGVmaW5lIElOVl9JQ000MjM3MF9TRU5TT1JfQ09ORl9JTklUIHsgLTEs IC0xLCAtMSwgLTEgfQo+ID4gKwo+ID4gCltzbmlwXQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv aWlvL2FjY2VsL2ludl9pY200MjM3MF9jb3JlLmMKPiA+IGIvZHJpdmVycy9paW8vYWNjZWwvaW52 X2ljbTQyMzcwX2NvcmUuYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAw MDAwMDAwMDAuLjlmNmMzMDJlNmYzMzEKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZl cnMvaWlvL2FjY2VsL2ludl9pY200MjM3MF9jb3JlLmMKPiA+IEBAIC0wLDAgKzEsMTI1MSBAQAo+ ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCj4gPiArLyoK PiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSW52ZW5zZW5zZSwgSW5jLgo+ID4gKyAqIENvcHly aWdodCAoQykgMjAyNiBBeGlzIENvbW11bmljYXRpb25zIEFCCj4gPiArICovCj4gPiArCj4gPiAr I2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ ID4gKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvaXJxLmg+Cj4g PiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kX2Rldmlj ZXRhYmxlLmg+Cj4gCj4gQXMgVXdlIHNhaWQgaW4gaGlzIGVtYWlsLCByZW1vdmUgdGhpcy4KPiAK PiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1 bnRpbWUuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvcHJvcGVydHkuaD4KPiA+ICsjaW5jbHVkZSA8 bGludXgvcmVnbWFwLmg+Cj4gPiArCj4gCj4gWW91J3JlIG1pc3NpbmcgdHlwZXMuaCwgYml0b3Bz LmgsIGVyci5oLCBhcnJheV9zaXplLmggYW5kCj4gPGFzbS9ieXRlb3JkZXIuaD4uCgpXaWxsIHNv cnQgdGhlIGluY2x1ZGVzLCBhZGQgdGhlIG1pc3NpbmcgaGVhZGVycyBhbmQgcmVtb3ZlIHRoZQo8 bGludXgvbW9kX2RldmljZXRhYmxlLmg+LgoKPiAKPiA+ICsjaW5jbHVkZSA8bGludXgvaWlvL2Nv bW1vbi9pbnZfc2Vuc29yc190aW1lc3RhbXAuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvaWlvL2lp by5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9paW8vc3lzZnMuaD4KPiA+ICsKPiA+ICsjaW5jbHVk ZSAiaW52X2ljbTQyMzcwLmgiCj4gPiArCj4gPiArY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcg aW52X2ljbTQyMzcwX3JlZ21hcF9jb25maWcgPSB7Cj4gPiArwqDCoMKgwqAgLm5hbWUgPSAiaW52 X2ljbTQyMzcwIiwKPiA+ICvCoMKgwqDCoCAucmVnX2JpdHMgPSA4LAo+ID4gK8KgwqDCoMKgIC52 YWxfYml0cyA9IDgsCj4gPiArwqDCoMKgwqAgLm1heF9yZWdpc3RlciA9IDB4N0UsCj4gPiArfTsK PiA+ICtFWFBPUlRfU1lNQk9MX05TX0dQTChpbnZfaWNtNDIzNzBfcmVnbWFwX2NvbmZpZywgIklJ T19JQ000MjM3MCIpOwo+ID4gKwo+ID4gCltzbmlwXQo+ID4gKy8qKgo+ID4gKyAqwqAgaW52X2lj bTQyMzcwX29kcl90b19wZXJpb2QoKSAtIG1hcCBPRFIgdG8gUGVyaW9kCj4gPiArICrCoCBAb2Ry IC0gZW51bSBvZiBPRFIgdmFsdWUKPiA+ICsgKgo+ID4gKyAqIFJldHVybnMgdGhlIHBlcmlvZCBp biBuYW5vc2Vjb25kcwo+ID4gKyAqLwo+ID4gK3UzMiBpbnZfaWNtNDIzNzBfb2RyX3RvX3Blcmlv ZChlbnVtIGludl9pY200MjM3MF9vZHIgb2RyKQo+ID4gK3sKPiA+ICvCoMKgwqDCoCBzdGF0aWMg dTMyIG9kcl9wZXJpb2RzW0lOVl9JQ000MjM3MF9PRFJfTkJdID0gewo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAvKiByZXNlcnZlZCB2YWx1ZXMgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgMCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMCwKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgMCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMCwKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgLyogMS42a0h6ICovCj4gCj4gTWF5YmUgYSBwZXJzb25hbCBwcmVmZXJlbmNlLCBidXQgd291 bGRuJ3QgaXQgYmUgYmV0dGVyIHRvIGhhdmUKPiB0aGUgY29tbWVudCBvbiB0aGUgc2FtZSBsaW5l IGFzIHRoZSB2YWx1ZT8gSSBmaW5kIHRoaXMgaGFyZGVyCj4gdG8gcmVhZC4KCldpbGwgcmVmb3Jt YXQgdGhpcyBhcnJheSB0byBiZSBtb3JlIGNsZWFuZXIuCgo+IAo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCA2MjUwMDAsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIDgwMEh6 ICovCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDEyNTAwMDAsCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIC8qIDQwMEh6ICovCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IDI1MDAwMDAsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIDIwMEh6ICovCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDUwMDAwMDAsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIC8qIDEwMEh6ICovCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDEwMDAwMDAw LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiA1MEh6ICovCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIDIwMDAwMDAwLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAv KiAyNUh6ICovCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDQwMDAwMDAwLAo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiAxMi41SHogKi8KPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgODAwMDAwMDAsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIDYuMjVI eiAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAxNjAwMDAwMDAsCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIC8qIDMuMTI1SHogKi8KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgMzIwMDAwMDAwLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiAxLjU2MjVI eiAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA2NDAwMDAwMDAsCj4gPiArwqDCoMKg wqAgfTsKPiA+ICsKPiA+ICvCoMKgwqDCoCByZXR1cm4gb2RyX3BlcmlvZHNbb2RyXTsKPiA+ICt9 Cj4gPiArCj4gPiArCltzbmlwXQo+ID4gKy8qKgo+ID4gKyAqIGludl9pY200MjM3MF9tcmVnX3Jl YWQoKSAtIHJvdXRpbmUgZm9yIHJlYWRpbmcgZnJvbSBvdGhlciBiYW5rCj4gPiByZWdpc3RlcnMK PiA+ICsgKgo+ID4gKyAqIEBtYXA6IHJlZ21hcCBvZiB0aGUgZGV2aWNlCj4gPiArICogQGJhbms6 IHJlZ2lzdGVyIGJhbmsgYmVpbmcgYWNjZXNzZWQKPiA+ICsgKiBAYWRkcjogYWRkcmVzcyBvZiB0 aGUgcmVnaXN0ZXIgYmVpbmcgYWNjZXNzZWQKPiA+ICsgKiBAdmFsOiBwb2ludGVyIHRvIHN0b3Jl IHRoZSByZWdpc3RlcidzIGRhdGEKPiA+ICsgKgo+ID4gKyAqIFJldHVybnMgMCBvbiBzdWNjZXNz LCBuZWdhdGl2ZSBlcnJubyBvbiBlcnJvcgo+ID4gKyAqLwo+ID4gK3N0YXRpYyBpbnQgaW52X2lj bTQyMzcwX21yZWdfcmVhZChzdHJ1Y3QgcmVnbWFwICptYXAsIHU4IGJhbmssIHU4Cj4gPiBhZGRy LCB1OCAqdmFsKQo+ID4gK3sKPiA+ICvCoMKgwqDCoCBpbnQgcmV0Owo+ID4gK8KgwqDCoMKgIHVu c2lnbmVkIGludCByZWFkX3ZhbDsKPiA+ICsKPiA+ICvCoMKgwqDCoCByZXQgPSBpbnZfaWNtNDIz NzBfbXJlZ19jaGVjayhtYXApOwo+ID4gK8KgwqDCoMKgIGlmIChyZXQpCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqAgcmV0ID0gcmVn bWFwX3dyaXRlKG1hcCwgSU5WX0lDTTQyMzcwX1JFR19CTEtfU0VMX1IsIGJhbmspOwo+ID4gK8Kg wqDCoMKgIGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlO VkFMOwo+ID4gKwo+ID4gK8KgwqDCoMKgIHJldCA9IHJlZ21hcF93cml0ZShtYXAsIElOVl9JQ000 MjM3MF9SRUdfTUFERFJfUiwgYWRkcik7Cj4gPiArwqDCoMKgwqAgaWYgKHJldCkKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4gPiArCj4gPiArwqDCoMKgwqAg dXNsZWVwX3JhbmdlKDEwLCAyMCk7Cj4gCj4gZnNsZWVwKCkgd2lsbCBndWFyYW50ZWUgYXQgbGVh c3QgMTBtcyBvZiBzbGVlcCBhbmQgaXQgY2hvb3Nlcwo+IHRoZSBvcHRpbWFsIHdheSBvZiBhY2hp ZXZpbmcgdGhpcy4KCldpbGwgY29udmVydCBhbGwgaW5zdGFuY2VzIG9mIHVzbGVlcF9yYW5nZSgp IHRvIGZzbGVlcCgpLgoKPiAKPiA+ICvCoMKgwqDCoCByZXQgPSByZWdtYXBfcmVhZChtYXAsIElO Vl9JQ000MjM3MF9SRUdfTV9SLCAmcmVhZF92YWwpOwo+ID4gK8KgwqDCoMKgIGlmIChyZXQpCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+ID4gKwo+ID4gK8Kg wqDCoMKgIHVzbGVlcF9yYW5nZSgxMCwgMjApOwo+ID4gK8KgwqDCoMKgICp2YWwgPSAodTgpcmVh ZF92YWw7Cj4gPiArCj4gPiArwqDCoMKgwqAgcmV0dXJuIHJlZ21hcF93cml0ZShtYXAsIElOVl9J Q000MjM3MF9SRUdfQkxLX1NFTF9SLCAweDAwKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiAr ICogaW52X2ljbTQyMzcwX3NldF9jb25mKCkgLSBzZXQgc2Vuc29yIGNvbmZpZ3VyYXRpb24KPiA+ ICsgKgo+ID4gKyAqIEBkYXRhOiBwb2ludGVyIHRvIHN0cnVjdCBjb250YWluaW5nIHRoZSBzZW5z b3IgZGF0YQo+ID4gKyAqIEBjb25mOiBwb2ludGVyIHRvIGNvbmZpZ3VyYXRpb24gZGF0YQo+ID4g KyAqCj4gPiArICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9y Cj4gPiArICovCj4gPiArc3RhdGljIGludCBpbnZfaWNtNDIzNzBfc2V0X2NvbmYoc3RydWN0IGlu dl9pY200MjM3MF9kYXRhICpkYXRhLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3Qgc3RydWN0IGludl9pY200MjM3MF9j b25mCj4gPiAqY29uZikKPiA+ICt7Cj4gPiArwqDCoMKgwqAgdW5zaWduZWQgaW50IHZhbDsKPiA+ ICvCoMKgwqDCoCBpbnQgcmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgIC8qIHNldCBQV1JfTUdNVDAg cmVnaXN0ZXIgKGFjY2VsIHNlbnNvciBtb2RlLCB0ZW1wIGVuYWJsZWQpCj4gPiAqLwo+ID4gK8Kg wqDCoMKgIHZhbCA9IElOVl9JQ000MjM3MF9QV1JfTUdNVDAoY29uZi0+bW9kZSk7Cj4gPiArwqDC oMKgwqAgcmV0ID0gcmVnbWFwX3dyaXRlKGRhdGEtPm1hcCwgSU5WX0lDTTQyMzcwX1JFR19QV1Jf TUdNVDAsCj4gPiB2YWwpOwo+ID4gK8KgwqDCoMKgIGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqAgbXNsZWVwKDIwMCk7 Cj4gPiArwqDCoMKgwqAgLyogc2V0IEFDQ0VMX0NPTkZJRzAgcmVnaXN0ZXIgKGFjY2VsIGZ1bGxz Y2FsZSAmIG9kcikgKi8KPiA+ICvCoMKgwqDCoCB2YWwgPSBJTlZfSUNNNDIzNzBfQUNDRUxfQ09O RklHMF9GUyhjb25mLT5mcykgfAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIElOVl9JQ000MjM3 MF9BQ0NFTF9DT05GSUcwX09EUihjb25mLT5vZHIpOwo+ID4gK8KgwqDCoMKgIHJldCA9IHJlZ21h cF93cml0ZShkYXRhLT5tYXAsIElOVl9JQ000MjM3MF9SRUdfQUNDRUxfQ09ORklHMCwKPiA+IHZh bCk7Cj4gPiArwqDCoMKgwqAgaWYgKHJldCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmV0dXJuIHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoCBtc2xlZXAoMjAwKTsKPiA+ICsKPiA+ICvC oMKgwqDCoCAvKiB1cGRhdGUgaW50ZXJuYWwgY29uZiAqLwo+IAo+IFJlZHVuZGFudCBjb21tZW50 LgoKV2lsbCByZW1vdmUgdGhpcy4KCj4gCj4gPiArwqDCoMKgwqAgZGF0YS0+Y29uZiA9ICpjb25m Owo+ID4gKwo+ID4gK8KgwqDCoMKgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ ICsgKiBpbnZfaWNtNDIzNzBfc2V0X3B3cl9tZ210MCgpIC0gc2V0IHRoZSBQV1JfTUdNVDAgcmVn aXN0ZXIgZm9yCj4gPiBzZW5zb3IKPiA+ICsgKgo+ID4gKyAqIEBkZXZfZGF0YTogcG9pbnRlciB0 byBzdHJ1Y3QgY29udGFpbmluZyB0aGUgc2Vuc29yIGRhdGEKPiA+ICsgKiBAYWNjZWw6IGVudW0g b2Ygc2Vuc29yIHBvd2VyIG1vZGUKPiA+ICsgKiBAc2xlZXBfbXM6IHBvaW50ZXIgdG8gY2hlY2sg aG93IGxvbmcgdGhlIHNlbnNvciBpcyBpbiBzbGVlcAo+ID4gbW9kZQo+ID4gKyAqCj4gPiArICog UmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yCj4gPiArICovCj4g PiArc3RhdGljIGludCBpbnZfaWNtNDIzNzBfc2V0X3B3cl9tZ210MChzdHJ1Y3QgaW52X2ljbTQy MzcwX2RhdGEKPiA+ICpkZXZfZGF0YSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbnVtIGludl9pY200MjM3 MF9zZW5zb3JfbW9kZQo+ID4gYWNjZWwsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50ICpz bGVlcF9tcykKPiA+ICt7Cj4gPiArwqDCoMKgwqAgZW51bSBpbnZfaWNtNDIzNzBfc2Vuc29yX21v ZGUgb2xkYWNjZWwgPSBkZXZfZGF0YS0+Y29uZi5tb2RlOwo+ID4gK8KgwqDCoMKgIHVuc2lnbmVk IGludCBzbGVlcHZhbDsKPiA+ICvCoMKgwqDCoCB1bnNpZ25lZCBpbnQgdmFsOwo+ID4gK8KgwqDC oMKgIGludCByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqAgLyogaWYgbm90aGluZyBjaGFuZ2VkLCBl eGl0ICovCj4gPiArwqDCoMKgwqAgaWYgKGFjY2VsID09IG9sZGFjY2VsKQo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPiA+ICsKPiA+ICvCoMKgwqDCoCB2YWwgPSBJTlZf SUNNNDIzNzBfUFdSX01HTVQwKGFjY2VsKTsKPiA+ICvCoMKgwqDCoCByZXQgPSByZWdtYXBfd3Jp dGUoZGV2X2RhdGEtPm1hcCwgSU5WX0lDTTQyMzcwX1JFR19QV1JfTUdNVDAsCj4gPiB2YWwpOwo+ ID4gK8KgwqDCoMKgIGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVy biByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqAgZGV2X2RhdGEtPmNvbmYubW9kZSA9IGFjY2VsOwo+ ID4gK8KgwqDCoMKgIGRldl9kYXRhLT5zZW5zb3Jfc3RhdGUtPnBvd2VyX21vZGUgPSBhY2NlbDsK PiA+ICsKPiA+ICvCoMKgwqDCoCAvKiBjb21wdXRlIHJlcXVpcmVkIHdhaXQgdGltZSBmb3Igc2Vu c29ycyB0byBzdGFiaWxpemUgKi8KPiA+ICvCoMKgwqDCoCBzbGVlcHZhbCA9IDA7Cj4gPiArwqDC oMKgwqAgLyogYWNjZWwgc3RhcnR1cCB0aW1lICovCj4gPiArwqDCoMKgwqAgaWYgKGFjY2VsICE9 IG9sZGFjY2VsICYmIG9sZGFjY2VsID09Cj4gPiBJTlZfSUNNNDIzNzBfU0VOU09SX01PREVfT0ZG KSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIGJsb2NrIGFueSByZWdpc3RlciB3 cml0ZSBmb3IgYXQgbGVhc3QgMjAwIMK1cyAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB1c2xlZXBfcmFuZ2UoMjAwLCAzMDApOwo+IAo+IFVzZSBmc2xlZXAoKSBoZXJlIGFzIHdlbGwu Cj4gCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChzbGVlcHZhbCA8IElOVl9JQ000 MjM3MF9BQ0NFTF9TVEFSVFVQX1RJTUVfTVMpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzbGVlcHZhbCA9Cj4gPiBJTlZfSUNNNDIzNzBfQUNDRUxfU1RBUlRV UF9USU1FX01TOwo+ID4gK8KgwqDCoMKgIH0KPiA+ICsKPiA+ICvCoMKgwqDCoCAvKiBkZWZlcnJl ZCBzbGVlcCB2YWx1ZSBpZiBzbGVlcCBwb2ludGVyIGlzIHByb3ZpZGVkIG9yCj4gPiBkaXJlY3Qg c2xlZXAgKi8KPiA+ICvCoMKgwqDCoCBpZiAoc2xlZXBfbXMpCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICpzbGVlcF9tcyA9IHNsZWVwdmFsOwo+ID4gK8KgwqDCoMKgIGVsc2UgaWYgKHNs ZWVwdmFsKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtc2xlZXAoc2xlZXB2YWwpOwo+ ID4gKwo+ID4gK8KgwqDCoMKgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9p ZCBpbnZfaWNtNDIzNzBfZGlzYWJsZV9wbSh2b2lkICpfZGF0YSkKPiA+ICt7Cj4gPiArwqDCoMKg wqAgc3RydWN0IGRldmljZSAqZGV2ID0gX2RhdGE7Cj4gPiArCj4gPiArwqDCoMKgwqAgcG1fcnVu dGltZV9wdXRfc3luYyhkZXYpOwo+ID4gK8KgwqDCoMKgIHBtX3J1bnRpbWVfZGlzYWJsZShkZXYp Owo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBpbnZfaWNtNDIzNzBfc2V0X2FjY2VsX2Nv bmYoKSAtIHNldCBjb25maWd1cmF0aW9uIGRhdGEgZm9yCj4gPiBhY2NlbGVyb21ldGVyCj4gPiAr ICoKPiA+ICsgKiBAZGV2X2RhdGE6IHBvaW50ZXIgdG8gc3RydWN0IGNvbnRhaW5pbmcgdGhlIHNl bnNvciBkYXRhCj4gPiArICogQGNvbmY6IHBvaW50ZXIgdG8gY29uZmlndXJhdGlvbiBkYXRhCj4g PiArICogQHNsZWVwX21zOiBwb2ludGVyIHRvIGNoZWNrIGhvdyBsb25nIHRoZSBzZW5zb3IgaXMg aW4gc2xlZXAKPiA+IG1vZGUKPiA+ICsgKgo+ID4gKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBu ZWdhdGl2ZSBlcnJubyBvbiBlcnJvcgo+ID4gKyAqLwo+ID4gK2ludCBpbnZfaWNtNDIzNzBfc2V0 X2FjY2VsX2NvbmYoc3RydWN0IGludl9pY200MjM3MF9kYXRhCj4gPiAqZGV2X2RhdGEsCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3RydWN0IGludl9pY200MjM3MF9jb25mICpjb25mLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGludCAqc2xlZXBf bXMpCj4gPiArewo+ID4gK8KgwqDCoMKgIHN0cnVjdCBpbnZfaWNtNDIzNzBfY29uZiAqb2xkY29u ZiA9ICZkZXZfZGF0YS0+Y29uZjsKPiA+ICvCoMKgwqDCoCB1bnNpZ25lZCBpbnQgdmFsOwo+ID4g K8KgwqDCoMKgIGludCByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqAgLyogc2FuaXRpemUgbWlzc2lu ZyB2YWx1ZXMgd2l0aCBjdXJyZW50IHZhbHVlcyAqLwo+ID4gK8KgwqDCoMKgIGlmIChjb25mLT5t b2RlIDwgMCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uZi0+bW9kZSA9IG9sZGNv bmYtPm1vZGU7Cj4gPiArwqDCoMKgwqAgaWYgKGNvbmYtPmZzIDwgMCkKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgY29uZi0+ZnMgPSBvbGRjb25mLT5mczsKPiA+ICvCoMKgwqDCoCBpZiAo Y29uZi0+b2RyIDwgMCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uZi0+b2RyID0g b2xkY29uZi0+b2RyOwo+ID4gK8KgwqDCoMKgIGlmIChjb25mLT5maWx0ZXIgPCAwKQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25mLT5maWx0ZXIgPSBvbGRjb25mLT5maWx0ZXI7Cj4g PiArCj4gPiArwqDCoMKgwqAgLyogZm9yY2UgcG93ZXIgbW9kZSBhZ2FpbnN0IE9EUiB3aGVuIHNl bnNvciBpcyBvbiAqLwo+ID4gK8KgwqDCoMKgIHN3aXRjaCAoY29uZi0+bW9kZSkgewo+ID4gK8Kg wqDCoMKgIGNhc2UgSU5WX0lDTTQyMzcwX1NFTlNPUl9NT0RFX0xPV19QT1dFUjoKPiA+ICvCoMKg wqDCoCBjYXNlIElOVl9JQ000MjM3MF9TRU5TT1JfTU9ERV9MT1dfTk9JU0U6Cj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGlmIChjb25mLT5vZHIgPD0gSU5WX0lDTTQyMzcwX09EUl84MDBI Wl9MTikgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29u Zi0+bW9kZSA9Cj4gPiBJTlZfSUNNNDIzNzBfU0VOU09SX01PREVfTE9XX05PSVNFOwo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uZi0+ZmlsdGVyID0KPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oAo+ID4gSU5WX0lDTTQyMzcwX1VJX0ZJTFRfQldfTFBfRklMVEVSX0JZUEFTU0VEOwo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9IGVsc2UgaWYgKGNvbmYtPm9kciA9PSBJTlZfSUNNNDIz NzBfT0RSXzQwMEhaKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpZiAoY29uZi0+ZmlsdGVyID09Cj4gPiBJTlZfSUNNNDIzNzBfRklMVEVSX0FWR18xNlgg fHwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Y29uZi0+ZmlsdGVyID09Cj4gPiBJTlZfSUNNNDIzNzBfRklMVEVSX0FWR18zMlggfHwKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uZi0+Zmls dGVyID09Cj4gPiBJTlZfSUNNNDIzNzBfRklMVEVSX0FWR182NFgpIHsKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25mLT5tb2Rl ID0KPiA+IElOVl9JQ000MjM3MF9TRU5TT1JfTU9ERV9MT1dfTk9JU0U7Cj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9IGVsc2Ugewo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbmYtPm1vZGUg PQo+ID4gSU5WX0lDTTQyMzcwX1NFTlNPUl9NT0RFX0xPV19QT1dFUjsKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgfSBlbHNlIGlmIChjb25mLT5vZHIgPT0gSU5WX0lDTTQyMzcwX09EUl8yMDBIWiAmJgo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uZi0+ ZmlsdGVyID09Cj4gPiBJTlZfSUNNNDIzNzBfRklMVEVSX0FWR182NFgpIHsKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbmYtPm1vZGUgPQo+ID4gSU5WX0lD TTQyMzcwX1NFTlNPUl9NT0RFX0xPV19OT0lTRTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGNvbmYtPmZpbHRlciA9Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiA+IElOVl9JQ000MjM3MF9V SV9GSUxUX0JXX0xQX0ZJTFRFUl9CWVBBU1NFRDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgfSBlbHNlIGlmIChjb25mLT5vZHIgPj0gSU5WX0lDTTQyMzcwX09EUl82XzI1SFpfTFApIHsK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbmYtPm1vZGUg PQo+ID4gSU5WX0lDTTQyMzcwX1NFTlNPUl9NT0RFX0xPV19QT1dFUjsKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbmYtPmZpbHRlciA9IElOVl9JQ000MjM3 MF9GSUxURVJfQVZHXzE2WDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiA+ICvCoMKgwqDCoCBkZWZhdWx0Ogo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiA+ICvCoMKgwqDCoCB9Cj4gPiArCj4g PiArwqDCoMKgwqAgLyogc2V0IEFDQ0VMX0NPTkZJRzAgcmVnaXN0ZXIgKGFjY2VsIGZ1bGxzY2Fs ZSAmIG9kcikgKi8KPiA+ICvCoMKgwqDCoCBpZiAoY29uZi0+ZnMgIT0gb2xkY29uZi0+ZnMgfHwg Y29uZi0+b2RyICE9IG9sZGNvbmYtPm9kcikgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB2YWwgPSBJTlZfSUNNNDIzNzBfQUNDRUxfQ09ORklHMF9GUyhjb25mLT5mcykgfAo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBJTlZfSUNNNDIzNzBfQUNDRUxfQ09O RklHMF9PRFIoY29uZi0+b2RyKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0g cmVnbWFwX3dyaXRlKGRldl9kYXRhLT5tYXAsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSU5WX0lDTTQyMzcwX1JFR19B Q0NFTF9DT05GSUcwLAo+ID4gdmFsKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYg KHJldCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVy biByZXQ7Cj4gCj4gTWF5YmUgYSBwZXJzb25hbCBvcGluaW9uIGFzIHdlbGwsIGJ1dCByZWFkYWJp bGl0eSBpcyBhbiBpc3N1ZQo+IHNvbWV0aW1lcy4KPiBBZGRpbmcgYmxhbmsgbGluZXMgdG8gc2Vw YXJhdGUgYmxvY2tzIG9mIGNvZGUgaXMgZmluZSEgKGxpa2UgaGVyZSBmb3IKPiBleGFtcGxlKQoK V2lsbCByZWZvcm1hdCB0byBtYWtlIGl0IGEgYml0IGNsZWFuZXIgYnkgYWRkaW5nIHNwYWNlcy4K PiAKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb2xkY29uZi0+ZnMgPSBjb25mLT5mczsK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb2xkY29uZi0+b2RyID0gY29uZi0+b2RyOwo+ ID4gK8KgwqDCoMKgIH0KPiA+ICsKPiA+ICvCoMKgwqDCoCAvKiBzZXQgUFdSX01HTVQwIHJlZ2lz dGVyIChhY2NlbCBzZW5zb3IgbW9kZSkgKi8KPiA+ICvCoMKgwqDCoCByZXR1cm4gaW52X2ljbTQy MzcwX3NldF9wd3JfbWdtdDAoZGV2X2RhdGEsIGRldl9kYXRhLQo+ID4gPmNvbmYubW9kZSwKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNsZWVwX21zKTsKPiA+ICt9Cj4gPiArCj4gPiAKW3NuaXBd Cj4gPiArc3RhdGljIGlycXJldHVybl90IGludl9pY200MjM3MF9pcnFfdGltZXN0YW1wKGludCBp cnEsIHZvaWQKPiA+ICpfZGF0YSkKPiA+ICt7Cj4gPiArwqDCoMKgwqAgc3RydWN0IGludl9pY200 MjM3MF9kYXRhICpkZXZfZGF0YSA9IF9kYXRhOwo+ID4gKwo+ID4gK8KgwqDCoMKgIGRldl9kYXRh LT50aW1lc3RhbXAgPSBpaW9fZ2V0X3RpbWVfbnMoZGV2X2RhdGEtPmluZGlvX2FjY2VsKTsKPiA+ ICsKPiA+ICvCoMKgwqDCoCByZXR1cm4gSVJRX1dBS0VfVEhSRUFEOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgaXJxcmV0dXJuX3QgaW52X2ljbTQyMzcwX2lycV9oYW5kbGVyKGludCBpcnEsIHZv aWQgKl9kYXRhKQo+ID4gK3sKPiA+ICvCoMKgwqDCoCBzdHJ1Y3QgaW52X2ljbTQyMzcwX2RhdGEg KmRldl9kYXRhID0gX2RhdGE7Cj4gPiArwqDCoMKgwqAgdW5zaWduZWQgaW50IHN0YXR1czsKPiA+ ICvCoMKgwqDCoCBpbnQgcmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgIG11dGV4X2xvY2soJmRldl9k YXRhLT5sb2NrKTsKPiAKPiBVc2UgZ3VhcmQobXV0ZXgpIGZyb20gY2xlYW51cC5oLCBpdCBlbGlt aW5hdGVzIHRoZSBuZWVkIHRvIHVzZSBnb3Rvcwo+IGFuZAo+IGxhYmVscyBmb3IgY2xlYW5pbmcg dXAgZnVuY3Rpb25zIChhIGxvdCBvZiBleGFtcGxlcyBpbiBJSU8gZm9yIHRoaXMpLgoKV2lsbCBj b252ZXJ0IGFsbCBpbnN0YW5jZXMgb2YgbXV0ZXggb3BlcmF0aW9ucyB3aXRoIGEgZ3VhcmQobXV0 ZXgpLgoKPiA+ICsKPiA+ICvCoMKgwqDCoCByZXQgPSByZWdtYXBfcmVhZChkZXZfZGF0YS0+bWFw LCBJTlZfSUNNNDIzNzBfUkVHX0lOVF9TVEFUVVMsCj4gPiAmc3RhdHVzKTsKPiA+ICvCoMKgwqDC oCBpZiAocmV0KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIG91dF91bmxvY2s7 Cj4gPiArCj4gPiArb3V0X3VubG9jazoKPiA+ICvCoMKgwqDCoCBtdXRleF91bmxvY2soJmRldl9k YXRhLT5sb2NrKTsKPiA+ICvCoMKgwqDCoCByZXR1cm4gSVJRX0hBTkRMRUQ7Cj4gCj4gTm90IHN1 cmUsIGJ1dCBpcyBpdCBva2F5IHRvIGFsd2F5cyByZXR1cm4gSVJRX0hBTkRMRUQsIGV2ZW4gb24g cmVnbWFwCj4gZmFpbHVyZT8KCkZyb20gc29tZSByZWZlcmVuY2UgZHJpdmVycyBpdCBzZWVtcyB0 byBiZSBjb21tb24sIGJ1dCB3ZSB3aWxsCmludmVzdGlnYXRlIHRoaXMuCgo+IAo+ID4gK30KPiA+ ICsKPiA+ICsvKioKPiA+ICsgKiBpbnZfaWNtNDIzNzBfaXJxX2luaXQoKSAtIGluaXRpYWxpemUg aW50IHBpbiBhbmQgaW50ZXJydXB0Cj4gPiBoYW5kbGVyCj4gPiArICogQGRhdGE6wqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBkcml2ZXIgaW50ZXJuYWwgc3RhdGUKPiA+ICsgKiBAaXJxOsKgwqDCoMKg IGlycSBudW1iZXIKPiA+ICsgKiBAaXJxX3R5cGU6wqDCoMKgwqDCoMKgwqAgaXJxIHRyaWdnZXIg dHlwZQo+ID4gKyAqIEBvcGVuX2RyYWluOsKgwqDCoMKgwqAgdHJ1ZSBpZiBpcnEgaXMgb3BlbiBk cmFpbiwgZmFsc2UgZm9yIHB1c2gtCj4gPiBwdWxsCj4gPiArICoKPiA+ICsgKiBSZXR1cm5zIDAg b24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KPiA+ICsgKi8KPiA+ ICtzdGF0aWMgaW50IGludl9pY200MjM3MF9pcnFfaW5pdChzdHJ1Y3QgaW52X2ljbTQyMzcwX2Rh dGEgKmRhdGEsCj4gPiBpbnQgaXJxLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IGlycV90eXBlLCBib29sIG9wZW5fZHJh aW4pCj4gPiArewo+ID4gK8KgwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRldiA9IHJlZ21hcF9nZXRf ZGV2aWNlKGRhdGEtPm1hcCk7Cj4gPiArwqDCoMKgwqAgdTggdmFsOwo+ID4gK8KgwqDCoMKgIGlu dCByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqAgLyogY29uZmlndXJlIElOVDEgaW50ZXJydXB0OiBk ZWZhdWx0IGlzIGFjdGl2ZSBsb3cgb24gZWRnZSAqLwo+ID4gK8KgwqDCoMKgIHN3aXRjaCAoaXJx X3R5cGUpIHsKPiA+ICvCoMKgwqDCoCBjYXNlIElSUUZfVFJJR0dFUl9SSVNJTkc6Cj4gPiArwqDC oMKgwqAgY2FzZSBJUlFGX1RSSUdHRVJfSElHSDoKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgdmFsID0gSU5WX0lDTTQyMzcwX0lOVF9DT05GSUdfSU5UMV9BQ1RJVkVfSElHSDsKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gPiArwqDCoMKgwqAgZGVmYXVsdDoKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmFsID0gSU5WX0lDTTQyMzcwX0lOVF9DT05GSUdf SU5UMV9BQ1RJVkVfTE9XOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiA+ ICvCoMKgwqDCoCB9Cj4gPiArCj4gPiArwqDCoMKgwqAgc3dpdGNoIChpcnFfdHlwZSkgewo+ID4g K8KgwqDCoMKgIGNhc2UgSVJRRl9UUklHR0VSX0xPVzoKPiA+ICvCoMKgwqDCoCBjYXNlIElSUUZf VFJJR0dFUl9ISUdIOgo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2YWwgfD0gSU5WX0lD TTQyMzcwX0lOVF9DT05GSUdfSU5UMV9MQVRDSEVEOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBicmVhazsKPiA+ICvCoMKgwqDCoCBkZWZhdWx0Ogo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBicmVhazsKPiA+ICvCoMKgwqDCoCB9Cj4gPiArCj4gPiArwqDCoMKgwqAgaWYgKCFv cGVuX2RyYWluKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2YWwgfD0gSU5WX0lDTTQy MzcwX0lOVF9DT05GSUdfSU5UMV9QVVNIX1BVTEw7Cj4gPiArCj4gPiArwqDCoMKgwqAgcmV0ID0g cmVnbWFwX3dyaXRlKGRhdGEtPm1hcCwgSU5WX0lDTTQyMzcwX1JFR19JTlRfQ09ORklHLAo+ID4g dmFsKTsKPiA+ICvCoMKgwqDCoCBpZiAocmV0KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gcmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgIC8qIERlYXNzZXJ0IGFzeW5jIHJlc2V0 IGZvciBwcm9wZXIgSU5UIHBpbiBvcGVyYXRpb24gKGNmCj4gPiBkYXRhc2hlZXQpICovCj4gPiAr wqDCoMKgwqAgcmV0ID0gaW52X2ljbTQyMzcwX21yZWdfcmVhZChkYXRhLT5tYXAsIElOVl9JQ000 MjM3MF9NUkVHMSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSU5WX0lDTTQyMzcwX1JFR19JTlRfQ09ORklHMSwK PiA+ICZ2YWwpOwo+ID4gK8KgwqDCoMKgIGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJldHVybiByZXQ7Cj4gCj4gQmxhbmsgbGluZS4KCldpbGwgYWRkIGhlcmUuCgo+IAo+ ID4gK8KgwqDCoMKgIHZhbCAmPSB+SU5WX0lDTTQyMzcwX0lOVF9DT05GSUcxX0FTWU5DX1JFU0VU Owo+ID4gKwo+ID4gK8KgwqDCoMKgIHJldCA9IGludl9pY200MjM3MF9tcmVnX3dyaXRlKGRhdGEt Pm1hcCwgSU5WX0lDTTQyMzcwX01SRUcxLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIElOVl9JQ000MjM3MF9S RUdfSU5UX0NPTkZJRzEsCj4gPiB2YWwpOwo+ID4gK8KgwqDCoMKgIGlmIChyZXQpCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqAgaXJx X3R5cGUgfD0gSVJRRl9PTkVTSE9UOwo+ID4gK8KgwqDCoMKgIHJldHVybiBkZXZtX3JlcXVlc3Rf dGhyZWFkZWRfaXJxKGRldiwgaXJxLAo+ID4gaW52X2ljbTQyMzcwX2lycV90aW1lc3RhbXAsCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgaW52X2ljbTQyMzcwX2lycV9oYW5kbGVyLAo+ID4gaXJxX3R5 cGUsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgImludl9pY200MjM3MCIsIGRhdGEpOwo+ID4gK30K PiA+ICsKPiA+ICsvKgo+ID4gKyAqIENhbGlicmF0aW9uIGJpYXMgdmFsdWVzLCBJSU8gcmFuZ2Ug Zm9ybWF0IGludCArIG1pY3JvLgo+ID4gKyAqIFZhbHVlIGlzIGxpbWl0ZWQgdG8gKy8tMWcgY29k ZWQgb24gMTIgYml0cyBzaWduZWQuIFN0ZXAgaXMKPiA+IDAuNW1nLgo+ID4gKyAqLwo+ID4gK3N0 YXRpYyBpbnQgaW52X2ljbTQyMzcwX2FjY2VsX2NhbGliYmlhc1tdID0gewo+ID4gK8KgwqDCoMKg IC0xMCwgNDIwMTAsIC8qIG1pbjogLTJeMTIgKiAwLjAwMDUgKiA5LjgwNjY1ID0gLTEwLjA0MjAx MAo+ID4gbS9zwrIgKi8KPiA+ICvCoMKgwqDCoCAwLMKgwqAgNDkwMywgLyogc3RlcDogMC41ICog MC4wMDk4MDY1NSA9IDAuMDA0OTAzIG0vc8KyICovCj4gPiArwqDCoMKgwqAgMTAswqAgMzcxMDYs IC8qIG1heDogKDJeMTIgLSAxKSAqIDAuMDAwNSAqIDkuODA2NjUgPSAxMC4wMzcxMDYKPiA+IG0v c8KyICovCj4gPiArfTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBpbnZfaWNtNDIzNzBfdGVtcF9y ZWFkKCkgLSBpbnRlcm5hbCBmdW5jdGlvbiB0byBhY2Nlc3MKPiA+IHRlbXBlcmF0dXJlIHNlbnNv ciByZWdpc3RlcnMKPiA+ICsgKgo+ID4gKyAqIEBkZXZfZGF0YTogcG9pbnRlciB0byBzdHJ1Y3Qg Y29udGFpbmluZyB0aGUgc2Vuc29yIGRhdGEKPiA+ICsgKiBAdGVtcDogcG9pbnRlciBjb250YWlu aW5nIHRoZSB0ZW1wZXJhdHVyZSBkYXRhIGluIHMxNiBmb3JtYXQKPiA+ICsgKgo+ID4gKyAqIFJl dHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yCj4gPiArICovCj4gPiAr c3RhdGljIGludCBpbnZfaWNtNDIzNzBfdGVtcF9yZWFkKHN0cnVjdCBpbnZfaWNtNDIzNzBfZGF0 YQo+ID4gKmRldl9kYXRhLCBzMTYgKnRlbXApCj4gPiArewo+ID4gK8KgwqDCoMKgIHN0cnVjdCBk ZXZpY2UgKmRldiA9IHJlZ21hcF9nZXRfZGV2aWNlKGRldl9kYXRhLT5tYXApOwo+ID4gK8KgwqDC oMKgIF9fYmUxNiAqcmF3Owo+ID4gK8KgwqDCoMKgIGludCByZXQ7Cj4gPiArCj4gPiArwqDCoMKg wqAgcG1fcnVudGltZV9nZXRfc3luYyhkZXYpOwo+IAo+IFBsZWFzZSBjaGVjayBvdXQgUE1fUlVO VElNRV9BQ1FVSVJFX0lGX0VOQUJMRURfQVVUT1NVU1BFTkQsIGl0Cj4gdXRpbGl6ZXMgdGhlIGNs ZWFudXAuaAo+IG1hZ2ljIGFzIGd1YXJkKG11dGV4KS4KPiAKPiA+ICvCoMKgwqDCoCBtdXRleF9s b2NrKCZkZXZfZGF0YS0+bG9jayk7Cj4gCj4gZ3VhcmQobXV0ZXgpIGNvbWJpbmVkIHdpdGggdGhl IG1hY3JvIGFib3ZlIHJlbW92ZXMgdGhlIG5lZWQgZm9yIGdvdG9zCj4gYW5kIHRoZSBleGl0Cj4g bGFiZWwuCgpXaWxsIGNvbnZlcnQgdGhlIHBtX3J1bnRpbWVfZ2V0X3N5bmMoKSBjYWxsYmFja3Mg dG8gdXNlIHRoZSBuZXdlcgptZXRob2RzLgoKPiAKPiA+ICsKPiA+ICvCoMKgwqDCoCByYXcgPSAo X19iZTE2ICopJmRldl9kYXRhLT5idWZmZXJbMF07Cj4gPiArwqDCoMKgwqAgcmV0ID0gcmVnbWFw X2J1bGtfcmVhZChkZXZfZGF0YS0+bWFwLAo+ID4gSU5WX0lDTTQyMzcwX1JFR19URU1QX0RBVEEx LCByYXcsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHNpemVvZigqcmF3KSk7Cj4gPiArwqDCoMKgwqAgaWYgKHJldCkKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBleGl0Owo+ID4gKwo+ID4gK8KgwqDCoMKgICp0ZW1w ID0gKHMxNiliZTE2X3RvX2NwdXAocmF3KTsKPiA+ICsKPiA+ICvCoMKgwqDCoCAvKgo+ID4gK8Kg wqDCoMKgwqAgKiBUZW1wZXJhdHVyZSBkYXRhIGlzIGludmFsaWQgaWYgYm90aCBhY2NlbCBhbmQg Z3lybyBhcmUKPiA+IG9mZi4KPiA+ICvCoMKgwqDCoMKgICogUmV0dXJuIC1FQlVTWSBpbiB0aGlz IGNhc2UuCj4gPiArwqDCoMKgwqDCoCAqLwo+ID4gK8KgwqDCoMKgIGlmICgqdGVtcCA9PSBJTlZf SUNNNDIzNzBfREFUQV9JTlZBTElEKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQg PSAtRUJVU1k7Cj4gPiArCj4gPiAKCltzbmlwXQoKPiA+ICsKPiA+ICvCoMKgwqDCoCAvKgo+ID4g K8KgwqDCoMKgwqAgKiBjb252ZXJ0IHJhdyBvZmZzZXQgdG8gZyB0aGVuIHRvIG0vc8KyCj4gPiAr wqDCoMKgwqDCoCAqIDEyIGJpdHMgc2lnbmVkIHJhdyBzdGVwIDAuNW1nIHRvIGc6IDUgLyAxMDAw MAo+ID4gK8KgwqDCoMKgwqAgKiBnIHRvIG0vc8KyOiA5LjgwNjY1MAo+ID4gK8KgwqDCoMKgwqAg KiByZXN1bHQgaW4gbWljcm8gKDEwMDAwMDApCj4gPiArwqDCoMKgwqDCoCAqIChvZmZzZXQgKiA1 ICogOS44MDY2NTAgKiAxMDAwMDAwKSAvIDEwMDAwCj4gPiArwqDCoMKgwqDCoCAqLwo+ID4gK8Kg wqDCoMKgIHZhbDY0ID0gKHM2NClvZmZzZXQgKiA1TEwgKiA5ODA2NjUwTEw7Cj4gPiArwqDCoMKg wqAgLyogZm9yIHJvdW5kaW5nLCBhZGQgKyBvciAtIGRpdmlzb3IgKDEwMDAwKSBkaXZpZGVkIGJ5 IDIgKi8KPiA+ICvCoMKgwqDCoCBpZiAodmFsNjQgPj0gMCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgdmFsNjQgKz0gMTAwMDBMTCAvIDJMTDsKPiA+ICvCoMKgwqDCoCBlbHNlCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZhbDY0IC09IDEwMDAwTEwgLyAyTEw7Cj4gPiArwqDC oMKgwqAgYmlhcyA9IGRpdl9zNjQodmFsNjQsIDEwMDAwTCk7Cj4gCj4gVGhpcyBpcyBwcm9iYWJs eSB0aGUgbGFzdCB0aW1lIEknbGwgbWVudGlvbiBhIGJsYW5rIGxpbmUgaW4gdGhpcwo+IHJldmll dywgYnV0Cj4gdGhlcmUgYXJlIG1vcmUgcGxhY2VzIGluIHRoaXMgcGF0Y2ggd2hlcmUgdGhleSBz aG91bGQgYmUgYWRkZWQuCgpXaWxsIGRvIG91ciBiZXN0IHRvIGFkZCBtb3JlIGVtcHR5IGxpbmVz IHRvIG1ha2UgaXQgbW9yZSByZWFkYWJsZS4KCj4gPiArwqDCoMKgwqAgKnZhbCA9IGJpYXMgLyAx MDAwMDAwTDsKPiA+ICvCoMKgwqDCoCAqdmFsMiA9IGJpYXMgJSAxMDAwMDAwTDsKPiA+ICsKPiA+ ICvCoMKgwqDCoCByZXR1cm4gSUlPX1ZBTF9JTlRfUExVU19NSUNSTzsKPiA+ICt9Cj4gPiArCj4g PiArLyoqCj4gPiArICogaW52X2ljbTQyMzcwX2FjY2VsX3dyaXRlX29mZnNldCgpIC0gd3JpdGUg b2Zmc2V0IHZhbHVlcyB0byB0aGUKPiA+IGFjY2VsZXJvbWV0ZXIKPiA+ICsgKgo+ID4gKyAqIEBk ZXZfZGF0YTogcG9pbnRlciB0byBzdHJ1Y3QgY29udGFpbmluZyB0aGUgc2Vuc29yIGRhdGEKPiA+ ICsgKiBAY2hhbjogcG9pbnRlciB0byBpaW8gY2hhbm5lbCBzcGVjaWZpY2F0aW9uCj4gPiArICog QHZhbDogaW50ZWdlciBwYXJ0IG9mIHRoZSB2YWx1ZQo+ID4gKyAqIEB2YWwyOiBkZWNpbWFsIHBh cnQgb2YgdGhlIHZhbHVlCj4gPiArICoKPiA+ICsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVn YXRpdmUgZXJybm8gb24gZXJyb3IKPiA+ICsgKi8KPiA+ICtzdGF0aWMgaW50IGludl9pY200MjM3 MF9hY2NlbF93cml0ZV9vZmZzZXQoc3RydWN0Cj4gPiBpbnZfaWNtNDIzNzBfZGF0YSAqZGV2X2Rh dGEsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpaW9fY2hhbl9zcGVjIGNvbnN0 Cj4gPiAqY2hhbiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IHZhbCwgaW50IHZhbDIp Cj4gPiArewo+ID4gK8KgwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRldiA9IHJlZ21hcF9nZXRfZGV2 aWNlKGRldl9kYXRhLT5tYXApOwo+ID4gK8KgwqDCoMKgIHM2NCB2YWw2NDsKPiA+ICvCoMKgwqDC oCBzMzIgbWluLCBtYXg7Cj4gPiArwqDCoMKgwqAgdW5zaWduZWQgaW50IHJlZ3ZhbDsKPiA+ICvC oMKgwqDCoCBzMTYgb2Zmc2V0Owo+ID4gK8KgwqDCoMKgIGludCByZXQ7Cj4gPiArCj4gPiArwqDC oMKgwqAgaWYgKGNoYW4tPnR5cGUgIT0gSUlPX0FDQ0VMKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICvCoMKgwqDCoCAvKiBpbnZfaWNtNDIz NzBfYWNjZWxfY2FsaWJiaWFzOiBtaW4gLSBzdGVwIC0gbWF4IGluIG1pY3JvICovCj4gPiArwqDC oMKgwqAgbWluID0gaW52X2ljbTQyMzcwX2FjY2VsX2NhbGliYmlhc1swXSAqIDEwMDAwMDBMICsK PiAKPiBUaGlzIHdvdWxkIGJlbmVmaXQgZnJvbSB1c2luZyB0aGUgbWFjcm9zIGZyb20gdW5pdHMu aC4KCldpbGwgdXNlIHZhbHVlcyBmcm9tIHVuaXRzLmgKCj4gCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqAgaW52X2ljbTQyMzcwX2FjY2VsX2NhbGliYmlhc1sxXTsKPiA+ICvCoMKgwqDCoCBtYXgg PSBpbnZfaWNtNDIzNzBfYWNjZWxfY2FsaWJiaWFzWzRdICogMTAwMDAwMEwgKwo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgIGludl9pY200MjM3MF9hY2NlbF9jYWxpYmJpYXNbNV07Cj4gPiArwqDC oMKgwqAgdmFsNjQgPSAoczY0KXZhbCAqIDEwMDAwMDBMTCArIChzNjQpdmFsMjsKPiA+ICvCoMKg wqDCoCBpZiAodmFsNjQgPCBtaW4gfHwgdmFsNjQgPiBtYXgpCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+ID4gKwo+ID4gK8KgwqDCoMKgIC8qCj4gPiArwqDC oMKgwqDCoCAqIGNvbnZlcnQgbS9zwrIgdG8gZyB0aGVuIHRvIHJhdyB2YWx1ZQo+ID4gK8KgwqDC oMKgwqAgKiBtL3PCsiB0byBnOiAxIC8gOS44MDY2NTAKPiA+ICvCoMKgwqDCoMKgICogZyB0byBy YXcgMTIgYml0cyBzaWduZWQsIHN0ZXAgMC41bWc6IDEwMDAwIC8gNQo+ID4gK8KgwqDCoMKgwqAg KiB2YWwgaW4gbWljcm8gKDEwMDAwMDApCj4gPiArwqDCoMKgwqDCoCAqIHZhbCAqIDEwMDAwIC8g KDkuODA2NjUwICogMTAwMDAwMCAqIDUpCj4gPiArwqDCoMKgwqDCoCAqLwo+ID4gK8KgwqDCoMKg IHZhbDY0ID0gdmFsNjQgKiAxMDAwMExMOwo+ID4gK8KgwqDCoMKgIC8qIGZvciByb3VuZGluZywg YWRkICsgb3IgLSBkaXZpc29yICg5ODA2NjUwICogNSkgZGl2aWRlZCBieQo+ID4gMiAqLwo+ID4g K8KgwqDCoMKgIGlmICh2YWw2NCA+PSAwKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2 YWw2NCArPSA5ODA2NjUwICogNSAvIDI7Cj4gPiArwqDCoMKgwqAgZWxzZQo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB2YWw2NCAtPSA5ODA2NjUwICogNSAvIDI7Cj4gPiArwqDCoMKgwqAg b2Zmc2V0ID0gZGl2X3M2NCh2YWw2NCwgOTgwNjY1MCAqIDUpOwo+ID4gKwo+ID4gK8KgwqDCoMKg IC8qIGNsYW1wIHZhbHVlIGxpbWl0ZWQgdG8gMTIgYml0cyBzaWduZWQgKi8KPiA+ICvCoMKgwqDC oCBpZiAob2Zmc2V0IDwgLTIwNDgpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9mZnNl dCA9IC0yMDQ4Owo+ID4gK8KgwqDCoMKgIGVsc2UgaWYgKG9mZnNldCA+IDIwNDcpCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9mZnNldCA9IDIwNDc7Cj4gPiArCj4gPiArwqDCoMKgwqAg cG1fcnVudGltZV9nZXRfc3luYyhkZXYpOwo+ID4gK8KgwqDCoMKgIG11dGV4X2xvY2soJmRldl9k YXRhLT5sb2NrKTsKPiAKPiBUaGUgcG1fcnVudGltZSBhbmQgZ3VhcmRfbWFjcm9zIHdvdWxkIGNs ZWFuIHRoaXMgdXAgbmljZWx5LgoKV2lsbCBkbyBoZXJlLgoKPiAKPiA+ICsKPiA+ICvCoMKgwqDC oCBzd2l0Y2ggKGNoYW4tPmNoYW5uZWwyKSB7Cj4gPiArwqDCoMKgwqAgY2FzZSBJSU9fTU9EX1g6 Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIE9GRlNFVF9VU0VSNCByZWdpc3RlciBp cyBzaGFyZWQgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gaW52X2ljbTQy MzcwX21yZWdfcmVhZChkZXZfZGF0YS0+bWFwLAo+ID4gSU5WX0lDTTQyMzcwX01SRUcxLAo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiA+IElOVl9JQ000MjM3MF9SRUdfT0ZGU0VUX1VT RVI0LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHU4ICopJnJlZ3ZhbCk7Cj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIG91dF91bmxvY2s7Cj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGRldl9kYXRhLT5idWZmZXJbMF0gPSAoKG9mZnNldCAmIDB4RjAwKSA+PiA0 KSB8Cj4gPiAocmVndmFsICYgMHgwRik7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRl dl9kYXRhLT5idWZmZXJbMV0gPSBvZmZzZXQgJiAweEZGOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCByZXQgPSBpbnZfaWNtNDIzNzBfbXJlZ193cml0ZShkZXZfZGF0YS0+bWFw LAo+ID4gSU5WX0lDTTQyMzcwX01SRUcxLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oAo+ID4gSU5WX0lDTTQyMzcwX1JFR19PRkZTRVRfVVNFUjQsCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGRldl9kYXRhLT5idWZmZXJbMF0pOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpZiAocmV0KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZ290byBvdXRfdW5sb2NrOwo+ID4gCgpbc25pcF0KCj4gPiArfQo+ID4gKwo+ID4gKy8q Kgo+ID4gKyAqIGludl9pY200MjM3MF9hY2NlbF9yZWFkX3NlbnNvcigpIC0gaW50ZXJuYWwgZnVu Y3Rpb24gdG8gcmVhZAo+ID4gYWNjZWxlcm9tZXRlciBzZW5zb3IgcmVnaXN0ZXJzCj4gPiArICoK PiA+ICsgKiBAaW5kaW9fZGV2OiBwb2ludGVyIHRvIHRoZSBpbmR1c3RyaWFsIGlvIHN0cnVjdAo+ IAo+IEkvTy4KCldpbGwgdXNlIHRoZSBhYmJyZXZhdGlvbi4KCj4gPiArICogQGNoYW46IHBvaW50 ZXIgdG8gaWlvIGNoYW5uZWwgc3BlY2lmaWNhdGlvbgo+ID4gKyAqIEB2YWw6IHBvaW50ZXIgY29u dGFpbmluZyBhY2NlbGVyb21ldGVyIGRhdGEgaW4gczE2IGZvcm1hdAo+ID4gKyAqCj4gPiArICog UmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IKPiA+ICsgKi8KPiA+ ICtzdGF0aWMgaW50IGludl9pY200MjM3MF9hY2NlbF9yZWFkX3NlbnNvcihzdHJ1Y3QgaWlvX2Rl dgo+ID4gKmluZGlvX2RldiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpaW9fY2hh bl9zcGVjIGNvbnN0Cj4gPiAqY2hhbiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHMxNiAqdmFs KQo+ID4gCgpbc25pcF0KCj4gPiArwqDCoMKgwqDCoCAqIGNsb2NrIHBlcmlvZCBpcyAzMmtIeiAo MzEyNTBucykKPiA+ICvCoMKgwqDCoMKgICogaml0dGVyIGlzICsvLSAyJSAoMjAgcGVyIG1pbGxl KQo+ID4gK8KgwqDCoMKgwqAgKi8KPiA+ICvCoMKgwqDCoCB0c19jaGlwLmNsb2NrX3BlcmlvZCA9 IDMxMjUwOwo+ID4gK8KgwqDCoMKgIHRzX2NoaXAuaml0dGVyID0gMjA7Cj4gPiArwqDCoMKgwqAg dHNfY2hpcC5pbml0X3BlcmlvZCA9IGludl9pY200MjM3MF9vZHJfdG9fcGVyaW9kKGRhdGEtCj4g PiA+Y29uZi5vZHIpOwo+ID4gK8KgwqDCoMKgIGludl9zZW5zb3JzX3RpbWVzdGFtcF9pbml0KCZk YXRhLT5zZW5zb3Jfc3RhdGUtPnRzLAo+ID4gJnRzX2NoaXApOwo+ID4gKwo+ID4gK8KgwqDCoMKg IGluZGlvX2Rldi0+bmFtZSA9ICJpbnZfaWNtNDIzNzAiOwo+ID4gK8KgwqDCoMKgIGluZGlvX2Rl di0+aW5mbyA9ICZpbnZfaWNtNDIzNzBfaW5mbzsKPiA+ICvCoMKgwqDCoCBpbmRpb19kZXYtPm1v ZGVzID0gSU5ESU9fRElSRUNUX01PREU7Cj4gPiArwqDCoMKgwqAgaW5kaW9fZGV2LT5jaGFubmVs cyA9IGludl9pY200MjM3MF9hY2NlbF9jaGFubmVsczsKPiA+ICvCoMKgwqDCoCBpbmRpb19kZXYt Pm51bV9jaGFubmVscyA9Cj4gPiBBUlJBWV9TSVpFKGludl9pY200MjM3MF9hY2NlbF9jaGFubmVs cyk7Cj4gPiArCj4gPiArwqDCoMKgwqAgcmV0ID0gZGV2bV9paW9fZGV2aWNlX3JlZ2lzdGVyKGRl diwgaW5kaW9fZGV2KTsKPiAKPiBZb3UgcmVnaXN0ZXIgdGhlIGRldmljZSBiZWZvcmUgaW5pdGlh bGl6aW5nIElSUXMgYW5kIFBNIHJ1bnRpbWUsCj4gY2F1c2luZyBwb3RlbnRpYWwKPiByYWNlIGNv bmRpdGlvbnMgYXMgdXNlcnNwYWNlIGNvdWxkIGFscmVhZHkgaW50ZXJhY3Qgd2l0aCB0aGUgZGV2 aWNlCj4gYmVmb3JlIHByb2JlKCkKPiBoYXMgZmluaXNoZWQuCgpXaWxsIGdvIHRocm91Z2ggdGhl IHNldHVwIHRvIGZpeCB0aGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLgo+IAo+ID4gK8KgwqDC oMKgIGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBFUlJfUFRS KHJldCk7Cj4gPiArCj4gPiArwqDCoMKgwqAgcmV0dXJuIGluZGlvX2RldjsKPiA+ICt9Cj4gPiAr Cj4gPiArLyoqCj4gPiArICogaW52X2ljbTQyMzcwX2NvcmVfcHJvYmUoKSAtIGluaXRpYWxpemUg YW5kIHJlZ2lzdGVyIHRoZSBJQ00tCj4gPiA0MjM3MCBkZXZpY2UKPiA+ICsgKiBAcmVnbWFwOsKg IHJlZ2lzdGVyIG1hcCBmb3IgYWNjZXNzaW5nIHRoZSBkZXZpY2UncyByZWdpc3RlcnMuCj4gPiAr ICogQGNoaXA6wqDCoMKgIGNoaXAgaWRlbnRpZmllciwgbXVzdCBiZSAlSU5WX0NISVBfSUNNNDIz NzAuCj4gPiArICogQGlycTrCoMKgwqDCoCBpbnRlcnJ1cHQgbnVtYmVyIGZvciB0aGUgZGV2aWNl J3MgZGF0YS1yZWFkeSBzaWduYWwuCj4gPiArICogQGJ1c19zZXR1cDrCoMKgwqDCoMKgwqAgY2Fs bGJhY2sgdG8gY29uZmlndXJlIGJ1cy1zcGVjaWZpYyBzZXR0aW5ncwo+ID4gKGUuZy4gSTJDKS4K PiA+ICsgKgo+ID4gKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm9yIGNv ZGUgb3RoZXJ3aXNlLgo+ID4gKyAqLwo+ID4gK2ludCBpbnZfaWNtNDIzNzBfY29yZV9wcm9iZShz dHJ1Y3QgcmVnbWFwICpyZWdtYXAsIGludCBjaGlwLCBpbnQKPiA+IGlycSwKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW52X2ljbTQyMzcwX2J1 c19zZXR1cCBidXNfc2V0dXApCj4gPiArewo+ID4gK8KgwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRl diA9IHJlZ21hcF9nZXRfZGV2aWNlKHJlZ21hcCk7Cj4gPiArwqDCoMKgwqAgc3RydWN0IGludl9p Y200MjM3MF9kYXRhICpkYXRhOwo+ID4gK8KgwqDCoMKgIHN0cnVjdCBpaW9fZGV2ICppbmRpb19k ZXY7Cj4gPiArwqDCoMKgwqAgc3RydWN0IGlycV9kYXRhICppcnFfZGVzYzsKPiA+ICvCoMKgwqDC oCBpbnQgaXJxX3R5cGU7Cj4gPiArwqDCoMKgwqAgYm9vbCBvcGVuX2RyYWluOwo+ID4gK8KgwqDC oMKgIGludCByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqAgaWYgKGNoaXAgIT0gSU5WX0NISVBfSUNN NDIzNzApIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJpbnZh bGlkIGNoaXAgPSAlZFxuIiwgY2hpcCk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJl dHVybiAtRU5PREVWOwo+ID4gK8KgwqDCoMKgIH0KPiA+ICsKPiA+ICvCoMKgwqDCoCAvKiBnZXQg aXJxIHByb3BlcnRpZXMsIHNldCB0cmlnZ2VyIGZhbGxpbmcgYnkgZGVmYXVsdCAqLwo+ID4gK8Kg wqDCoMKgIGlycV9kZXNjID0gaXJxX2dldF9pcnFfZGF0YShpcnEpOwo+ID4gK8KgwqDCoMKgIGlm ICghaXJxX2Rlc2MpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYs ICJjb3VsZCBub3QgZmluZCBJUlEgJWRcbiIsIGlycSk7Cj4gCj4gZGV2X2Vycl9wcm9iZSgpIHdv dWxkIGJlIGJldHRlci4KCldpbGwgY29udmVydCBpdCB0byBkZXZfZXJyX3Byb2JlKCkKCj4gCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+ID4gK8KgwqDCoMKg IH0KPiA+ICsKPiA+ICvCoMKgwqDCoCBpcnFfdHlwZSA9IGlycWRfZ2V0X3RyaWdnZXJfdHlwZShp cnFfZGVzYyk7Cj4gPiArwqDCoMKgwqAgaWYgKCFpcnFfdHlwZSkKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaXJxX3R5cGUgPSBJUlFGX1RSSUdHRVJfRkFMTElORzsKPiA+ICsKPiA+ICvC oMKgwqDCoCBvcGVuX2RyYWluID0gZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsICJkcml2 ZS1vcGVuLQo+ID4gZHJhaW4iKTsKPiA+ICsKPiA+ICvCoMKgwqDCoCBpbmRpb19kZXYgPSBkZXZt X2lpb19kZXZpY2VfYWxsb2MoZGV2LCBzaXplb2YoKmRhdGEpKTsKPiA+ICvCoMKgwqDCoCBpZiAo IWluZGlvX2RldikKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9NRU07 Cj4gPiArCj4gPiArwqDCoMKgwqAgZGF0YSA9IGlpb19wcml2KGluZGlvX2Rldik7Cj4gPiArwqDC oMKgwqAgZGF0YS0+c2Vuc29yX3N0YXRlID0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg ZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkYXRhLT5zZW5zb3Jfc3RhdGUpLAo+ID4gR0ZQX0tF Uk5FTCk7Cj4gPiArwqDCoMKgwqAgaWYgKCFkYXRhLT5zZW5zb3Jfc3RhdGUpCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+ID4gKwo+ID4gK8KgwqDCoMKgIG11 dGV4X2luaXQoJmRhdGEtPmxvY2spOwo+IAo+IGRldm1fbXV0ZXhfaW5pdCgpIGFuZCBjaGVjayB0 aGUgcmV0dXJuIHZhbHVlLgoKV2lsbCBjb252ZXJ0IGl0IHRvIGRldm1fbXV0ZXhfaW5pdCgpIGFu ZCBjaGVjayBmb3IgdGhlIHJldHVybiB2YWx1ZS4KCj4gCj4gPiArwqDCoMKgwqAgZGF0YS0+Y2hp cCA9IGNoaXA7Cj4gPiArwqDCoMKgwqAgZGF0YS0+bWFwID0gcmVnbWFwOwo+ID4gKwo+ID4gK8Kg wqDCoMKgIGRhdGEtPnZkZF9zdXBwbHkgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoZGV2LCAidmRkIik7 Cj4gCj4gZGV2bV9yZWd1bGF0b3JfZ2V0X2VuYWJsZSB3aWxsIGFsc28gaGFuZGxlIHRoZSBkaXNh Ymxpbmcgb24gdW5iaW5kLgo+IFNhbWUKPiBmb3IgZGF0YS0+dmRkaW8uCgpXaWxsIGNvbnZlcnQg aXQgdG8gdXNlIGRldm1fcmVndWxhdG9yX2dldF9lbmFibGUoKS4KPiAKPiA+ICvCoMKgwqDCoCBp ZiAoSVNfRVJSKGRhdGEtPnZkZF9zdXBwbHkpKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gUFRSX0VSUihkYXRhLT52ZGRfc3VwcGx5KTsKPiAKPiBkZXZfZXJyb3JfcHJvYmUo KSBoZXJlIGFuZCBiZWxvdyBhcyB3ZWxsIChpZiB5b3Ugd2FudCB0byBwcmludCBhbgo+IGVycm9y IG1lc3NhZ2UpCgpXaWxsIGFkZCB0aGUgZXJyb3IgbWVzc2FnZSB3aXRoIGRldl9lcnJvcl9wcm9i ZSgpCgo+IAo+ID4gKwo+ID4gK8KgwqDCoMKgIGRhdGEtPnZkZGlvX3N1cHBseSA9IGRldm1fcmVn dWxhdG9yX2dldChkZXYsICJ2ZGRpbyIpOwo+ID4gK8KgwqDCoMKgIGlmIChJU19FUlIoZGF0YS0+ dmRkaW9fc3VwcGx5KSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9F UlIoZGF0YS0+dmRkaW9fc3VwcGx5KTsKPiA+ICsKPiA+ICvCoMKgwqDCoCByZXQgPSByZWd1bGF0 b3JfZW5hYmxlKGRhdGEtPnZkZF9zdXBwbHkpOwo+IAo+IFVzZSBkZXZtX3JlZ3VsYXRvcl9nZXRf ZW5hYmxlKCkgYXMgbWVudGlvbmVkIGFib3ZlLCB5b3Ugd291bGRuJ3QgbmVlZAo+IHRoaXMgdGhl bi4KCldpbGwgZml4IHRoaXMuCgo+ID4gK8KgwqDCoMKgIGlmIChyZXQpCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqAgcmV0ID0gaW52 X2ljbTQyMzcwX3NldHVwKGRhdGEsIGJ1c19zZXR1cCk7Cj4gPiArwqDCoMKgwqAgaWYgKHJldCkK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBy ZXQsICJTZXR1cCBmYWlsZWRcbiIpOwo+ID4gKwo+ID4gK8KgwqDCoMKgIGRhdGEtPmluZGlvX2Fj Y2VsID0gaW52X2ljbTQyMzcwX2FjY2VsX2luaXQoaW5kaW9fZGV2LCBkYXRhKTsKPiA+ICvCoMKg wqDCoCBpZiAoSVNfRVJSKGRhdGEtPmluZGlvX2FjY2VsKSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcmV0dXJuIFBUUl9FUlIoZGF0YS0+aW5kaW9fYWNjZWwpOwo+ID4gKwo+ID4gK8Kg wqDCoMKgIHJldCA9IGludl9pY200MjM3MF9pcnFfaW5pdChkYXRhLCBpcnEsIGlycV90eXBlLCBv cGVuX2RyYWluKTsKPiA+ICvCoMKgwqDCoCBpZiAocmV0KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByZXR1cm4gcmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgIC8qIHNldHVwIHJ1bnRpbWUg cG93ZXIgbWFuYWdlbWVudCAqLwo+ID4gK8KgwqDCoMKgIHJldCA9IHBtX3J1bnRpbWVfc2V0X2Fj dGl2ZShkZXYpOwo+ID4gK8KgwqDCoMKgIGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJldHVybiByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqAgcG1fcnVudGltZV9nZXRfbm9y ZXN1bWUoZGV2KTsKPiA+ICvCoMKgwqDCoCBwbV9ydW50aW1lX2VuYWJsZShkZXYpOwo+ID4gK8Kg wqDCoMKgIHBtX3J1bnRpbWVfdXNlX2F1dG9zdXNwZW5kKGRldik7Cj4gPiArwqDCoMKgwqAgcG1f cnVudGltZV9wdXQoZGV2KTsKPiA+ICsKPiA+ICvCoMKgwqDCoCByZXR1cm4gZGV2bV9hZGRfYWN0 aW9uX29yX3Jlc2V0KGRldiwgaW52X2ljbTQyMzcwX2Rpc2FibGVfcG0sCj4gPiBkZXYpOwo+ID4g K30KPiA+ICtFWFBPUlRfU1lNQk9MX05TX0dQTChpbnZfaWNtNDIzNzBfY29yZV9wcm9iZSwgIklJ T19JQ000MjM3MCIpOwo+ID4gKwo+ID4gK01PRFVMRV9BVVRIT1IoIkthbmFrIFNoaWxsZWRhciA8 a2FuYWsuc2hpbGxlZGFyQGF4aXMuY29tPiIpOwo+ID4gK01PRFVMRV9BVVRIT1IoIkhlbnJpayBH cmltbGVyIDxoZW5yaWsuZ3JpbWxlckBheGlzLmNvbT4iKTsKPiA+ICtNT0RVTEVfREVTQ1JJUFRJ T04oIkludmVuc2Vuc2UgZGV2aWNlIElDTTQyMzcwIGRyaXZlciIpOwo+IAo+IE5vIHBvaW50IGlu IGhhdmluZyB0aGUgd29yZCAiZGV2aWNlIiBpbiB0aGUgZGVzY3JpcHRpb24uCgpXaWxsIHJlbW92 ZSBpdCBmcm9tIHRoZSBkZXNjcmlwdGlvbi4KCj4gCj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIp Owo+ID4gK01PRFVMRV9JTVBPUlRfTlMoIklJT19JTlZfU0VOU09SU19USU1FU1RBTVAiKTsKPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9hY2NlbC9pbnZfaWNtNDIzNzBfaTJjLmMKPiA+IGIv ZHJpdmVycy9paW8vYWNjZWwvaW52X2ljbTQyMzcwX2kyYy5jCj4gPiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMDAwMC4uNTdlOTdkNjYzMjlhMQo+ID4gLS0tIC9kZXYv bnVsbAo+ID4gKysrIGIvZHJpdmVycy9paW8vYWNjZWwvaW52X2ljbTQyMzcwX2kyYy5jCj4gPiBA QCAtMCwwICsxLDEwMyBAQAo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w LW9yLWxhdGVyCj4gPiArLyoKPiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSW52ZW5TZW5zZSwg SW5jLgo+ID4gKyAqIENvcHlyaWdodCAoQykgMjAyNiBBeGlzIENvbW11bmljYXRpb25zIEFCCj4g PiArICovCj4gPiArCj4gPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+IAo+IERvbid0IGlu Y2x1ZGUgdGhpcyBpbiBuZXcgZHJpdmVycy4KPiAKPiA+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNl Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9t b2RfZGV2aWNldGFibGUuaD4KPiAKPiBSZW1vdmUgdGhpcy4KCldpbGwgcmVtb3ZlIHRoZSBzdWdn ZXN0ZWQgaW5jbHVkZXMgYW5kIHNvcnQgdGhlbSBhbHBoYWJldGljYWxseS4KPiAKPiA+ICsjaW5j bHVkZSA8bGludXgvaTJjLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgo+ID4gKyNp bmNsdWRlIDxsaW51eC9wcm9wZXJ0eS5oPgo+ID4gKwo+ID4gKyNpbmNsdWRlICJpbnZfaWNtNDIz NzAuaCIKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBpbnZfaWNtNDIzNzBfaTJjX2J1c19zZXR1cCgp IC0gSTJDIGJ1cyBzZXR1cCBmb3IgaWNtNDIzNzAKPiA+ICsgKgo+ID4gKyAqIEBkYXRhOiBwb2lu dGVyIHRvIHN0cnVjdCBjb250YWluaW5nIHRoZSBzZW5zb3IgZGF0YQo+ID4gKyAqCj4gPiArICog UmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yCj4gPiArICovCj4g PiArc3RhdGljIGludCBpbnZfaWNtNDIzNzBfaTJjX2J1c19zZXR1cChzdHJ1Y3QgaW52X2ljbTQy MzcwX2RhdGEKPiA+ICpkYXRhKQo+ID4gK3sKPiA+ICvCoMKgwqDCoCB1bnNpZ25lZCBpbnQgbWFz aywgdmFsOwo+ID4gK8KgwqDCoMKgIGludCByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqAgLyogc2V0 IHNsZXcgcmF0ZXMgZm9yIEkyQyAqLwo+ID4gK8KgwqDCoMKgIG1hc2sgPSBJTlZfSUNNNDIzNzBf RFJJVkVfQ09ORklHMl9JMkNfTUFTSzsKPiA+ICvCoMKgwqDCoCB2YWwgPQo+ID4gSU5WX0lDTTQy MzcwX0RSSVZFX0NPTkZJRzJfSTJDKElOVl9JQ000MjM3MF9TTEVXX1JBVEVfMTJfMzZOUyk7Cj4g PiArwqDCoMKgwqAgcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKGRhdGEtPm1hcCwKPiA+IElOVl9J Q000MjM3MF9SRUdfRFJJVkVfQ09ORklHMiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1hc2ssIHZhbCk7Cj4gPiArwqDCoMKg wqAgaWYgKHJldCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPiA+ ICsKPiA+ICvCoMKgwqDCoCAvKiBzZXQgc2xldyByYXRlcyBmb3IgU1BJICovCj4gPiArwqDCoMKg wqAgbWFzayA9IElOVl9JQ000MjM3MF9EUklWRV9DT05GSUczX1NQSV9NQVNLOwo+ID4gK8KgwqDC oMKgIHZhbCA9Cj4gPiBJTlZfSUNNNDIzNzBfRFJJVkVfQ09ORklHM19TUEkoSU5WX0lDTTQyMzcw X1NMRVdfUkFURV8xMl8zNk5TKTsKPiA+ICvCoMKgwqDCoCByZXQgPSByZWdtYXBfdXBkYXRlX2Jp dHMoZGF0YS0+bWFwLAo+ID4gSU5WX0lDTTQyMzcwX1JFR19EUklWRV9DT05GSUczLAo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg bWFzaywgdmFsKTsKPiA+ICvCoMKgwqDCoCBpZiAocmV0KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByZXR1cm4gcmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgIHJldHVybiAwOwo+ID4gK30K PiA+ICtzdGF0aWMgaW50IGludl9pY200MjM3MF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xp ZW50KQo+ID4gK3sKPiA+ICvCoMKgwqDCoCBjb25zdCB2b2lkICptYXRjaDsKPiA+ICvCoMKgwqDC oCBlbnVtIGludl9pY200MjM3MF9jaGlwIGNoaXA7Cj4gPiArwqDCoMKgwqAgc3RydWN0IHJlZ21h cCAqcmVnbWFwOwo+ID4gKwo+ID4gK8KgwqDCoMKgIGlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxp dHkoY2xpZW50LT5hZGFwdGVyLAo+ID4gSTJDX0ZVTkNfU01CVVNfSTJDX0JMT0NLKSkKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FT1BOT1RTVVBQOwo+ID4gKwo+ID4gK8Kg wqDCoMKgIG1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKCZjbGllbnQtPmRldik7Cj4gPiAr wqDCoMKgwqAgaWYgKCFtYXRjaCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJu IC1FSU5WQUw7Cj4gPiArwqDCoMKgwqAgY2hpcCA9ICh1aW50cHRyX3QpbWF0Y2g7Cj4gPiArCj4g PiArwqDCoMKgwqAgcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LAo+ID4gJmlu dl9pY200MjM3MF9yZWdtYXBfY29uZmlnKTsKPiA+ICvCoMKgwqDCoCBpZiAoSVNfRVJSKHJlZ21h cCkpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBQVFJfRVJSKHJlZ21hcCk7 Cj4gPiArCj4gPiArwqDCoMKgwqAgcmV0dXJuIGludl9pY200MjM3MF9jb3JlX3Byb2JlKHJlZ21h cCwgY2hpcCwgY2xpZW50LT5pcnEsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnZfaWNtNDIzNzBfaTJj X2J1c19zZXR1cCk7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRldmljZSBpZCB0YWJs ZSBpcyB1c2VkIHRvIGlkZW50aWZ5IHdoYXQgZGV2aWNlIGNhbiBiZQo+ID4gc3VwcG9ydGVkIGJ5 IHRoaXMgZHJpdmVyCj4gPiArICovCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNl X2lkIGludl9pY200MjM3MF9pZFtdID0geyB7Cj4gPiAiaWNtNDIzNzAiLAo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+ID4gSU5WX0NISVBf SUNNNDIzNzAgfSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB7fSB9Owo+IAo+IFRoZSBmb3JtYXR0aW5nIGlzIGF3ZnVsLCBmaXggaXQgdG8gc29t ZXRoaW5nIGxpa2U6Cj4gc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGludl9pY200 MjM3MF9pZFtdID0gewo+IMKgwqDCoMKgwqDCoMKgIHsgLmNvbXBhdGlibGUgPSAiaWNtNDIzNzAi LCAuZGF0YSA9IElOVl9DSElQX0lDTTQyMzcwIH0sCj4gwqDCoMKgwqDCoMKgwqAgeyB9Cj4gfTsK PiAKPiBBbHNvIHRoZSB1c2Ugb2YgbmFtZWQgaW5pdGlhbGl6ZXJzIGlzIHByZWZlcnJlZC4KCldp bGwgZml4IGl0LgoKPiA+ICtNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgaW52X2ljbTQyMzcwX2lk KTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBpbnZfaWNtNDIzNzBfb2ZfbWF0Y2hlcyAtIHN0cnVj dCBmb3IgYWxsIHRoZSBjb21wYXRpYmUgc3RyaW5ncwo+ID4gKyAqCj4gPiArICovCj4gPiArc3Rh dGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaW52X2ljbTQyMzcwX29mX21hdGNoZXNbXSA9 IHsKPiA+ICvCoMKgwqDCoCB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5jb21wYXRp YmxlID0gImludmVuc2Vuc2UsaWNtNDIzNzAiLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAuZGF0YSA9ICh2b2lkICopSU5WX0NISVBfSUNNNDIzNzAsCj4gPiArwqDCoMKgwqAgfSwKPiAK PiBZb3UgY2FuIHB1dCB0aGUgdHdvIG9uIG9uZSBsaW5lLgoKV2lsbCBmaXggaXQuCgo+IAo+ID4g K8KgwqDCoMKgIHt9Cj4gPiArfTsKPiA+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBpbnZfaWNt NDIzNzBfb2ZfbWF0Y2hlcyk7Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGlu dl9pY200MjM3MF9kcml2ZXIgPSB7Cj4gPiArwqDCoMKgwqAgLmRyaXZlciA9IHsKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgLm5hbWUgPSAiaW52LWljbTQyMzcwLWkyYyIsCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5vZl9tYXRjaF90YWJsZSA9IGludl9pY200MjM3MF9vZl9t YXRjaGVzLAo+ID4gK8KgwqDCoMKgIH0sCj4gPiArwqDCoMKgwqAgLnByb2JlID0gaW52X2ljbTQy MzcwX3Byb2JlLAo+ID4gK307Cj4gPiArbW9kdWxlX2kyY19kcml2ZXIoaW52X2ljbTQyMzcwX2Ry aXZlcik7Cj4gPiArCj4gPiArTU9EVUxFX0FVVEhPUigiS2FuYWsgU2hpbGxlZGFyIDxrYW5hay5z aGlsbGVkYXJAYXhpcy5jb20+Iik7Cj4gPiArTU9EVUxFX0FVVEhPUigiSGVucmlrIEdyaW1sZXIg PGhlbnJpay5ncmltbGVyQGF4aXMuY29tPiIpOwo+ID4gK01PRFVMRV9ERVNDUklQVElPTigiSW52 ZW5TZW5zZSBJQ00tNDIzNzBQIEkyQyBkcml2ZXIiKTsKPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BM Iik7Cj4gPiArTU9EVUxFX0lNUE9SVF9OUygiSUlPX0lDTTQyMzcwIik7Cj4gPiAKPiAKPiAKPiAK PiAtLQo+IEtpbmQgcmVnYXJkcywKPiBKb3NodWEgQ3JvZnRzCgpUaGFua3MgYW5kIFJlZ2FyZHMs CkthbmFrIFNoaWxsZWRhcgoK --=-eL5AqN36btVvCvQ7vaTv Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQRZbIB7R61KYt5yWsuslrbqDH4eIAUCanXgZAAKCRCslrbqDH4e ILqMAQDHypEpdaQzcRuZi2sZPPhsyRzSf0OcTBrxGBANOobraQEAob0pckePYqCU beCV/wpO68vjOo1or1IqwJeee7RJ6Qg= =cYrU -----END PGP SIGNATURE----- --=-eL5AqN36btVvCvQ7vaTv--