From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 32D7441093 for ; Tue, 11 Jul 2023 07:13:53 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C1D5968C54B; Tue, 11 Jul 2023 10:13:49 +0300 (EEST) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B36DF68C4CB for ; Tue, 11 Jul 2023 10:13:42 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1689059627; x=1720595627; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=ca6ZpPIhCgrgOn3AIy+/X+4OKkrN/RLzKFoU80iGPlA=; b=LtzFhZuZMVaC7UTUD0RDDM+bKFoqNPiPUryV18B4X2FrpiHfrWEMk6cc Qs8iOm49ihDayBc0Y5vzcv6nwzqt46QHiv/teCpGlg8U98lhBXT51FFXE BtOZAaiR2O4s2Qh/R0lSr/IyPYHRd4ilrCCsR/w0bgoyWRzKs4DKNaAX6 p6WllMQUVJPGZLlKZMbK2WW8hEHlij8c+96iHwq1ATNlX/UcTj8ly8wme FwlcNLuByXVTiQ0GHRvbR3VffeJe4iteL8/C+mkDKcj8MiyXz832XXGQe 4PXuc1lDgcHpSg5kDBwCaSv9NpMu5BjgtaJYQbktcq1wvcoNn4dOH3z/B Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10767"; a="344866516" X-IronPort-AV: E=Sophos;i="6.01,196,1684825200"; d="scan'208";a="344866516" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Jul 2023 00:13:39 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10767"; a="895079472" X-IronPort-AV: E=Sophos;i="6.01,196,1684825200"; d="scan'208";a="895079472" Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by orsmga005.jf.intel.com with ESMTP; 11 Jul 2023 00:13:38 -0700 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Tue, 11 Jul 2023 00:13:37 -0700 Received: from fmsmsx603.amr.corp.intel.com (10.18.126.83) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Tue, 11 Jul 2023 00:13:37 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27 via Frontend Transport; Tue, 11 Jul 2023 00:13:37 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.169) 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.2507.27; Tue, 11 Jul 2023 00:13:37 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mhEYLCEOqk/QmUleAziGdthLNGaF8YYtmRwESdwidtcwUqzdKiLBIV5Rukni0XG+5gNd1DKHnGa7OZ3hbIMYNEmUpWLxYCCNEbJKFHNc/14ucuplXL8D3//sqLfZ0AnIOwv+T5Arg60i1lX2YvOmZDdvv0ZckHCbVhnkxCyEzM93FItUMFkkMlKmzsHxFFqKPuZkVYyBHXlriUfyvjlTH3OWMD9hNx5w89DAtnnOMn9JUa7n4cAIyGLx8DKN/qZ6LKmi+BUgzieUAVtYBKLkSsxcL3/WlJRA2QQ8qG9rBW3NRzB0Vi4LpxAxGbeAM9PMILk6hIyu+P725DVEYIB8pA== 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=ca6ZpPIhCgrgOn3AIy+/X+4OKkrN/RLzKFoU80iGPlA=; b=MDwEAWhJQS5fF2NwNfNwYhpzgAR24A6Xs+9Pw815mMyIH1Cy55YD5feg0dKb0Lsu/8nGOgZpDzX1qE3YyKYqNK4opdvbxoE2QO9fwFUpncLFQ9KvGCBFH6j9QydZzD3LPPO2O6a5qj9/HTfdeE2J7epp8VfCG6yv91N2YhCPx2UwVEMnSRND9I05MQqua/zTWs0AHcWidjRqnjh4blH1+HrRxlFUQ2WXshW+4HmS0V8jecINFvccvGe/zAoTLt/wo+N8moXs0e9vUBl9XPlaXgTlzCj9QDUeYpMOd9nlC3SAwo7CloyOo1FB17WhBpHZWpSQM+7hbPFCBO35/Tmemw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from BN9PR11MB5515.namprd11.prod.outlook.com (2603:10b6:408:104::8) by IA0PR11MB8301.namprd11.prod.outlook.com (2603:10b6:208:48d::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6544.19; Tue, 11 Jul 2023 07:13:29 +0000 Received: from BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::16c7:a931:6718:45bf]) by BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::16c7:a931:6718:45bf%7]) with mapi id 15.20.6565.028; Tue, 11 Jul 2023 07:13:29 +0000 From: "Xiang, Haihao" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel] [PATCH v3 1/9] libavutil: add hwcontext_d3d12va and AV_PIX_FMT_D3D12 Thread-Index: AQHZlSn6IZ/wIqgJmk+0KJrTI7i1WK+0ZAyA Date: Tue, 11 Jul 2023 07:13:29 +0000 Message-ID: <4bccf740597536cb0976c433e5a99e55e86c58a3.camel@intel.com> References: <20230602080701.1754-1-tong1.wu@intel.com> In-Reply-To: <20230602080701.1754-1-tong1.wu@intel.com> Accept-Language: en-AS, zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.44.4-0ubuntu1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: BN9PR11MB5515:EE_|IA0PR11MB8301:EE_ x-ms-office365-filtering-correlation-id: 9e1add04-d6b7-4be6-05ad-08db81de53fc x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 0VwZyXGbRBFZk3onoQBg7/uzv16/gN0610BYHJreMgdT8YoNDh5tLh55QWvvcLG1xQEh7fiznz8LiolgVRGBFyc5R61+nonl4XO4uPSvdnh5D2sN4CzNN+OrRcq0/yP1t1hrnFoa4M+LCqo8f8K73IRhWZZ30bc+7zVWqSpGMa+P7NIIibcpioGZyOSUWja4Qwp3N3ky5VivA94wwPuXg8XI/7AHXmxVHdn2U5v+igHkA5Hdr6vYmqJrO6RvShUKelI4+BIkcDKIhHyIzrhi3jGU7Mpm3NhCTpwy28P1LmxNpHY1zG8gCIVlsepq7aXSdStWxC2JnHfmLQy/G7gaZXLKE4DwxXmmLmB0GQtM69G8CizwC4wCtIK091l9rrWKWbfVnmx2JL7XY9NrhGd9qvyebLj8Lkx2CtPVykba/MY3vJLWaMbbS8NHpaMHlDcNB2v7TsJU5vmcrprJ4pA4Uo53JuLfEjeTEI2Oiqgv9riSjgt6tX3baYG8FRkNFZgaglthMPZXDE+9V10jzq2fo3IcRD7XQ614JREA7GrDZDQPdSZ0VnDZj+RC1AsoXYXw5DjZrhkHBIn7O3NRu4rZE253BsGixhJmGjqoq4KyVSPGWkmyPwM9Tt9lEEDjaFgvfE/dmNg3c7amwbMVv+4ECw== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BN9PR11MB5515.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(376002)(346002)(136003)(396003)(366004)(39860400002)(451199021)(6486002)(66899021)(71200400001)(82960400001)(478600001)(45080400002)(122000001)(19627235002)(54906003)(8936002)(5660300002)(8676002)(2906002)(36756003)(30864003)(86362001)(38070700005)(6916009)(4326008)(316002)(91956017)(76116006)(64756008)(66446008)(66476007)(38100700002)(66946007)(66556008)(41300700001)(107886003)(26005)(6506007)(83380400001)(186003)(2616005)(6512007)(966005)(2004002)(559001)(579004)(309714004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?RmdGM3JmOGRZck5SNHNhd1lSUXB4OEhTakR1YnFWK1ZnSk1nUEVCUWJjc2lD?= =?utf-8?B?RXRXa1U5eVZFdEwvNk9YeC9Ram1EbDh3cmZsUk8vdTNwSUpBQWFYQzRES3JZ?= =?utf-8?B?TDRkMlB0djRUYlExTUxNVEYrQmFtejFUeUxZVEp2UitDdSs4Wm4yaStvaVdz?= =?utf-8?B?U1hWVDdsMEljakdITnBla00rdGRDZkx4L1dtWjZMbHVsTG5oR3VFZ2hJbGNw?= =?utf-8?B?NTFLT1M5eDZkSW9hd3pNeDRoWENJeTVENG1tRjBQcWtFL3hlbnZnVWt1Z2tu?= =?utf-8?B?emU5WHB3clZvL3dib1FWaEw5ek5UNER5d0tacGwveFI0UnNXSTIwbVV2NlIx?= =?utf-8?B?dnBKcWprZ29qRHAzM2hpcTVJdW5PcGE4dU9QNHVuQU92TmhxNzliaHVsdEgz?= =?utf-8?B?UlF5TnptcUNFODVTUVd0eU82R2ZlODF4VVJ6T0pEL0xpNUxpaWlManlwbDBq?= =?utf-8?B?T3o1akVVa3VtTlVIRFEraDBodTUzNmVTSjMxNkdieGg5RklRUjVvZi8raXkx?= =?utf-8?B?VGNqKzJoeGUwZ3c2dWhoVXkwaWtjWUdHZ29yUjQxczNJM09XSWNlNDFiUzZa?= =?utf-8?B?ZWlDU1I1cm5vSmV4ek9PU1VLVWhWSUt5aERUTzlGTEhKV0hTbzFYazdKRGVs?= =?utf-8?B?a1RFcWVxd0xZbUFGa3d1SkNhd2QwME1hR3hncEdzN1dva0FRQmxRSFpQREJH?= =?utf-8?B?Vm9YNWZNY3NRY3NKS2gxanhwRHhpckNNeUdWaW10K2dMc0RUYnhMZFozOE1R?= =?utf-8?B?SE9lOEQxRG9Ud2RCRVZ5M3U3d1VtMjdwU0tyRjE0ZjBJV0ZERE95c3U2TEMr?= =?utf-8?B?a09IeERLZzhGa2dybytQa3ZEV0lWUnIxdHlUaFpoL3JuakhwSkk5RlBBR0d3?= =?utf-8?B?eFFNNTNvSXZxc1BoVnZqUjlZS3lCMk5ScForMlJodisxbEVvaUd3ZzcxajBQ?= =?utf-8?B?MW5kWXlsTU5Gc245SEdGQWF2MFRCUkxJRnA5N1VFN1d1YjA5SURYc2psenBB?= =?utf-8?B?R3pjTFpsWW1vaWFRYTJkbUtJM004d2R4MU0vb2ZBT2ZDUm5YYnFaRW4yMU5L?= =?utf-8?B?cXBlYVNlMGFrRUgrQUIzNUx4YnpiR2hwZXB5UGxYUnFIZ1VqaUswdXJZeXh0?= =?utf-8?B?c28yNHJsdC9XQUFpYUd4N3g4bVpPQkZ4VGFlSkdMU0dzMHROcEJicE9uUVlI?= =?utf-8?B?RXdSZ2VmSElHZ3hiUTJGZEM2Z0E4bDFFQUxRYUZoMEMxZXJDekV6dVJyK0tU?= =?utf-8?B?ZHE4cjhBY1RxbFZnd0NnelZ4YTZmMHd1aVczbWJZL1g5emE2a1ZJM2w5d043?= =?utf-8?B?SEFYcjE5RXd1MDlYcVNRdENLOUJlOVdpV3pNY0ZLN0wrd0k4VHc3SHhrdDBm?= =?utf-8?B?Wk5TQzM3emZxdmkvM2I5S1FoNEJCdkZzbXBkYXBRM1dQQXBTR2xuYmlKQnNW?= =?utf-8?B?M0c0eFZRWSs4NmlmSkhpcVVpZ25LbUVkYndiZzlEczYrTVJYdjRGVUhzemNO?= =?utf-8?B?bktZa1N1K3NxTmpnSGRhS3NGNmFmWENlaUlYcnRuY1libkYvTVcwdHo0dkQ1?= =?utf-8?B?OFVHNUFFOWxKNThMbGNreFdsZTdNZDZRaFVaOEdUYUxUK0FkQk9JMnpROXg1?= =?utf-8?B?MnhEQjJwSlpIWlBJVnJQWXc0RzNhK1ZZeUJkck96VVVHOW12dFBpcUNOODVk?= =?utf-8?B?RWd6VVFUWWhkUE50dlJvR0cwM1g0ZUZ6K3RhTmQzTTJoZWp6cFNibC95ZGc5?= =?utf-8?B?UjNURmtKelE5dWI4K0ZNVEdaakdtU0ZVOWpBSXdKSDg2ZmJ1MVFWTFZLcktF?= =?utf-8?B?d2xiVjB5U00xL1JzZU10T1FwbmRYTjB4RVowYnREU3QxYjRzNWZhSzgvV0VL?= =?utf-8?B?ejZheHQ5czJmOXpVWHpwblN1VDJwQ1k4R1RpTkJSaVh2T1MyVkp5QlBKTVUz?= =?utf-8?B?OExUU1JQYlROTWdaTWJxRWk4b2svQisvbjh3QnpVVURKNjBSNkZublA1cTJv?= =?utf-8?B?b0lkK0d4Tnl5TFRvZndQdDJ4SFRPZSswRjFzeitPYWVXNHVsQ3FUQzk0ZTl5?= =?utf-8?B?MkRweW9aNkM0RE1NazdHUDFnWXlRb0t4cktXNmlWN2I0ak9MRmx2RGZaM3Jn?= =?utf-8?B?L3g5cTNnbjFVd2YvM05DTGlIYm9ZTGRpNzBzemVCMjVuQXdobU1oQ3N0cHNQ?= =?utf-8?B?R0E9PQ==?= Content-ID: <188FC4E4535ABB4DBE5BB90ED150AF6F@namprd11.prod.outlook.com> MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BN9PR11MB5515.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9e1add04-d6b7-4be6-05ad-08db81de53fc X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Jul 2023 07:13:29.4674 (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: QwS3WiyidmUYrNjt5DHO6fA1/KMmDF1VoqRm6JjVHcKz/DZNwscmHHyii4pgL5tVA7W2+uvl5c4QUoCtRwqwPA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PR11MB8301 X-OriginatorOrg: intel.com Subject: Re: [FFmpeg-devel] [PATCH v3 1/9] libavutil: add hwcontext_d3d12va and AV_PIX_FMT_D3D12 X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: "Wu, Tong1" , "toqsxw@outlook.com" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: T24gVnIsIDIwMjMtMDYtMDIgYXQgMTY6MDYgKzA4MDAsIFRvbmcgV3Ugd3JvdGU6Cj4gRnJvbTog V3UgSmlhbmh1YSA8dG9xc3h3QG91dGxvb2suY29tPgo+IAo+IFNpZ25lZC1vZmYtYnk6IFd1IEpp YW5odWEgPHRvcXN4d0BvdXRsb29rLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBUb25nIFd1IDx0b25n MS53dUBpbnRlbC5jb20+Cj4gLS0tCj4gwqBjb25maWd1cmXCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDUgKwo+IMKgZG9jL0FQ SWNoYW5nZXPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fMKgwqAgNyArCj4gwqBsaWJhdnV0aWwvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHzCoMKgIDMgKwo+IMKgbGliYXZ1dGlsL2h3Y29udGV4dC5jwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCA0ICsKPiDCoGxpYmF2dXRpbC9od2Nv bnRleHQuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArCj4gwqBs aWJhdnV0aWwvaHdjb250ZXh0X2QzZDEydmEuY8KgwqDCoMKgwqDCoMKgwqDCoCB8IDY5OSArKysr KysrKysrKysrKysrKysrKysrKysrCj4gwqBsaWJhdnV0aWwvaHdjb250ZXh0X2QzZDEydmEuaMKg wqDCoMKgwqDCoMKgwqDCoCB8IDE2NyArKysrKysKPiDCoGxpYmF2dXRpbC9od2NvbnRleHRfZDNk MTJ2YV9pbnRlcm5hbC5oIHzCoCA2MyArKysKPiDCoGxpYmF2dXRpbC9od2NvbnRleHRfaW50ZXJu YWwuaMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArCj4gwqBsaWJhdnV0aWwvcGl4ZGVzYy5jwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgNCArCj4gwqBsaWJhdnV0 aWwvcGl4Zm10LmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKg IDkgKwo+IMKgbGliYXZ1dGlsL3Rlc3RzL2h3ZGV2aWNlLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgfMKgwqAgMiArCj4gwqAxMiBmaWxlcyBjaGFuZ2VkLCA5NjUgaW5zZXJ0aW9ucygrKQo+IMKg Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2dXRpbC9od2NvbnRleHRfZDNkMTJ2YS5jCj4gwqBjcmVh dGUgbW9kZSAxMDA2NDQgbGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhLmgKPiDCoGNyZWF0ZSBt b2RlIDEwMDY0NCBsaWJhdnV0aWwvaHdjb250ZXh0X2QzZDEydmFfaW50ZXJuYWwuaAo+IAo+IGRp ZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKPiBpbmRleCA0OTU0OTNhYTBlLi5iODYw NjRlMzZmIDEwMDc1NQo+IC0tLSBhL2NvbmZpZ3VyZQo+ICsrKyBiL2NvbmZpZ3VyZQo+IEBAIC0z MzcsNiArMzM3LDcgQEAgRXh0ZXJuYWwgbGlicmFyeSBzdXBwb3J0Ogo+IMKgwqAgLS1kaXNhYmxl LWN1ZGEtbGx2bcKgwqDCoMKgwqAgZGlzYWJsZSBDVURBIGNvbXBpbGF0aW9uIHVzaW5nIGNsYW5n IFthdXRvZGV0ZWN0XQo+IMKgwqAgLS1kaXNhYmxlLWN1dmlkwqDCoMKgwqDCoMKgwqDCoMKgIGRp c2FibGUgTnZpZGlhIENVVklEIHN1cHBvcnQgW2F1dG9kZXRlY3RdCj4gwqDCoCAtLWRpc2FibGUt ZDNkMTF2YcKgwqDCoMKgwqDCoMKgIGRpc2FibGUgTWljcm9zb2Z0IERpcmVjdDNEIDExIHZpZGVv IGFjY2VsZXJhdGlvbgo+IGNvZGUgW2F1dG9kZXRlY3RdCj4gK8KgIC0tZGlzYWJsZS1kM2QxMnZh wqDCoMKgwqDCoMKgwqAgZGlzYWJsZSBNaWNyb3NvZnQgRGlyZWN0M0QgMTIgdmlkZW8gYWNjZWxl cmF0aW9uCj4gY29kZSBbYXV0b2RldGVjdF0KPiDCoMKgIC0tZGlzYWJsZS1keHZhMsKgwqDCoMKg wqDCoMKgwqDCoCBkaXNhYmxlIE1pY3Jvc29mdCBEaXJlY3RYIDkgdmlkZW8gYWNjZWxlcmF0aW9u Cj4gY29kZSBbYXV0b2RldGVjdF0KPiDCoMKgIC0tZGlzYWJsZS1mZm52Y29kZWPCoMKgwqDCoMKg IGRpc2FibGUgZHluYW1pY2FsbHkgbGlua2VkIE52aWRpYSBjb2RlCj4gW2F1dG9kZXRlY3RdCj4g wqDCoCAtLWVuYWJsZS1saWJkcm3CoMKgwqDCoMKgwqDCoMKgwqAgZW5hYmxlIERSTSBjb2RlIChM aW51eCkgW25vXQo+IEBAIC0xODg1LDYgKzE4ODYsNyBAQCBIV0FDQ0VMX0FVVE9ERVRFQ1RfTElC UkFSWV9MSVNUPSIKPiDCoMKgwqDCoCBjdWRhX2xsdm0KPiDCoMKgwqDCoCBjdXZpZAo+IMKgwqDC oMKgIGQzZDExdmEKPiArwqDCoMKgIGQzZDEydmEKPiDCoMKgwqDCoCBkeHZhMgo+IMKgwqDCoMKg IGZmbnZjb2RlYwo+IMKgwqDCoMKgIG52ZGVjCj4gQEAgLTI5OTksNiArMzAwMSw3IEBAIGNyeXN0 YWxoZF9kZXBzPSJsaWJjcnlzdGFsaGRfbGliY3J5c3RhbGhkX2lmX2giCj4gwqBjdWRhX2RlcHM9 ImZmbnZjb2RlYyIKPiDCoGN1dmlkX2RlcHM9ImZmbnZjb2RlYyIKPiDCoGQzZDExdmFfZGVwcz0i ZHh2YV9oIElEM0QxMVZpZGVvRGVjb2RlciBJRDNEMTFWaWRlb0NvbnRleHQiCj4gK2QzZDEydmFf ZGVwcz0iZHh2YV9oIElEM0QxMkRldmljZSBJRDNEMTJWaWRlb0RlY29kZXIiCj4gwqBkeHZhMl9k ZXBzPSJkeHZhMmFwaV9oIERYVkEyX0NvbmZpZ1BpY3R1cmVEZWNvZGUgb2xlMzIgdXNlcjMyIgo+ IMKgZmZudmNvZGVjX2RlcHNfYW55PSJsaWJkbCBMb2FkTGlicmFyeSIKPiDCoG1lZGlhY29kZWNf ZGVwcz0iYW5kcm9pZCIKPiBAQCAtNjQ0OSw2ICs2NDUyLDggQEAgY2hlY2tfdHlwZSAid2luZG93 cy5oIGR4Z2kxXzIuaCIgIklEWEdJT3V0cHV0MSIKPiDCoGNoZWNrX3R5cGUgIndpbmRvd3MuaCBk eGdpMV81LmgiICJJRFhHSU91dHB1dDUiCj4gwqBjaGVja190eXBlICJ3aW5kb3dzLmggZDNkMTEu aCIgIklEM0QxMVZpZGVvRGVjb2RlciIKPiDCoGNoZWNrX3R5cGUgIndpbmRvd3MuaCBkM2QxMS5o IiAiSUQzRDExVmlkZW9Db250ZXh0Igo+ICtjaGVja190eXBlICJ3aW5kb3dzLmggZDNkMTIuaCIg IklEM0QxMkRldmljZSIKPiArY2hlY2tfdHlwZSAid2luZG93cy5oIGQzZDEydmlkZW8uaCIgIklE M0QxMlZpZGVvRGVjb2RlciIKPiDCoGNoZWNrX3R5cGUgIndpbmRvd3MuaCIgIkRQSV9BV0FSRU5F U1NfQ09OVEVYVCIgLURfV0lOMzJfV0lOTlQ9MHgwQTAwCj4gwqBjaGVja190eXBlICJkM2Q5Lmgg ZHh2YTJhcGkuaCIgRFhWQTJfQ29uZmlnUGljdHVyZURlY29kZSAtCj4gRF9XSU4zMl9XSU5OVD0w eDA2MDIKPiDCoGNoZWNrX2Z1bmNfaGVhZGVycyBtZmFwaS5oIE1GQ3JlYXRlQWxpZ25lZE1lbW9y eUJ1ZmZlciAtbG1mcGxhdAo+IGRpZmYgLS1naXQgYS9kb2MvQVBJY2hhbmdlcyBiL2RvYy9BUElj aGFuZ2VzCj4gaW5kZXggZjA0MDIxMWY3ZC4uYjY0ZWQ3M2E2NCAxMDA2NDQKPiAtLS0gYS9kb2Mv QVBJY2hhbmdlcwo+ICsrKyBiL2RvYy9BUEljaGFuZ2VzCj4gQEAgLTIsNiArMiwxMyBAQCBUaGUg bGFzdCB2ZXJzaW9uIGluY3JlYXNlcyBvZiBhbGwgbGlicmFyaWVzIHdlcmUgb24gMjAyMy0wMi0K PiAwOQo+IMKgCj4gwqBBUEkgY2hhbmdlcywgbW9zdCByZWNlbnQgZmlyc3Q6Cj4gwqAKPiArMjAy My0wNS14eCAtIHh4eHh4eHh4eHggLSBsYXZ1IDU4LjcuMTAwIC0gcGl4Zm10LmggaHdjb250ZXh0 LmgKPiBod2NvbnRleHRfZDNkMTJ2YS5oCj4gK8KgIEFkZCBBVl9IV0RFVklDRV9UWVBFX0QzRDEy VkEgYW5kIEFWX1BJWF9GTVRfRDNEMTIuCj4gK8KgIEFkZCBBVkQzRDEyVkFEZXZpY2VDb250ZXh0 LCBBVkQzRDEyVkFTeW5jQ29udGV4dCwgQVZEM0QxMkZyYW1lRGVzY3JpcHRvciwKPiArwqAgYW5k IEFWRDNEMTJWQUZyYW1lc0NvbnRleHQuCj4gK8KgIEFkZCBhdl9kM2QxMnZhX21hcF9zd190b19o d19mb3JtYXQsIGF2X2QzZDEydmFfY3JlYXRlX3N5bmNfY29udGV4dCwKPiArwqAgYXZfZDNkMTJ2 YV9yZWxlYXNlX3N5bmNfY29udGV4dCwgYXZfZDNkMTJ2YV93YWl0X2lkbGUsIGFuZAo+IGF2X2Qz ZDEydmFfd2FpdF9xdWV1ZV9pZGxlLgo+ICsKPiDCoDIwMjMtMDUtMjkgLSB4eHh4eHh4eHh4IC0g bGF2YyA2MC4xNi4xMDAgLSBhdmNvZGVjLmggY29kZWNfaWQuaAo+IMKgwqAgQWRkIEFWX0NPREVD X0lEX0VWQywgRkZfUFJPRklMRV9FVkNfQkFTRUxJTkUsIGFuZCBGRl9QUk9GSUxFX0VWQ19NQUlO Lgo+IMKgCj4gZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC9NYWtlZmlsZSBiL2xpYmF2dXRpbC9NYWtl ZmlsZQo+IGluZGV4IGJkOWM2ZjllMzIuLjQwZDQ5ZDc2ZGQgMTAwNjQ0Cj4gLS0tIGEvbGliYXZ1 dGlsL01ha2VmaWxlCj4gKysrIGIvbGliYXZ1dGlsL01ha2VmaWxlCj4gQEAgLTQxLDYgKzQxLDcg QEAgSEVBREVSUyA9Cj4gYWRsZXIzMi5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgXAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIGh3Y29udGV4dC5owqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4gwqDCoMKgwqDCoMKgwqDC oMKgwqAgaHdjb250ZXh0X2N1ZGEuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBc Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgaHdjb250ZXh0X2QzZDExdmEuaMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBcCj4gK8KgwqDCoMKgwqDCoMKgwqDCoCBod2NvbnRleHRfZDNkMTJ2YS5o wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoCBod2Nv bnRleHRfZHJtLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4gwqDCoMKg wqDCoMKgwqDCoMKgwqAgaHdjb250ZXh0X2R4dmEyLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIFwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoCBod2NvbnRleHRfcXN2LmjCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4gQEAgLTE4Niw2ICsxODcsNyBAQCBPQkpTID0K PiBhZGxlcjMyLm/CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBcCj4gwqAKPiDCoE9CSlMtJChDT05GSUdfQ1VEQSnCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGh3Y29udGV4dF9jdWRhLm8KPiDCoE9CSlMtJChDT05G SUdfRDNEMTFWQSnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGh3Y29udGV4 dF9kM2QxMXZhLm8KPiArT0JKUy0kKENPTkZJR19EM0QxMlZBKcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgKz0gaHdjb250ZXh0X2QzZDEydmEubwo+IMKgT0JKUy0kKENPTkZJR19E WFZBMinCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBod2NvbnRleHRf ZHh2YTIubwo+IMKgT0JKUy0kKENPTkZJR19MSUJEUk0pwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICs9IGh3Y29udGV4dF9kcm0ubwo+IMKgT0JKUy0kKENPTkZJR19NQUNPU19L UEVSRinCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBtYWNvc19rcGVyZi5vCj4gQEAgLTIw OSw2ICsyMTEsNyBAQCBTS0lQSEVBREVSUy0kKEhBVkVfQ1VEQV9IKcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCArPSBod2NvbnRleHRfY3VkYS5oCj4gwqBTS0lQSEVBREVSUy0kKENPTkZJR19DVURB KcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBod2NvbnRleHRfY3VkYV9pbnRlcm5hbC5owqDC oMKgwqAgXAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjdWRhX2NoZWNrLmgKPiDCoFNL SVBIRUFERVJTLSQoQ09ORklHX0QzRDExVkEpwqDCoMKgwqDCoMKgwqDCoMKgICs9IGh3Y29udGV4 dF9kM2QxMXZhLmgKPiArU0tJUEhFQURFUlMtJChDT05GSUdfRDNEMTJWQSnCoMKgwqDCoMKgwqDC oMKgwqAgKz0gaHdjb250ZXh0X2QzZDEydmEuaAo+IMKgU0tJUEhFQURFUlMtJChDT05GSUdfRFhW QTIpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBod2NvbnRleHRfZHh2YTIuaAo+IMKgU0tJUEhF QURFUlMtJChDT05GSUdfUVNWKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGh3Y29udGV4 dF9xc3YuaAo+IMKgU0tJUEhFQURFUlMtJChDT05GSUdfT1BFTkNMKcKgwqDCoMKgwqDCoMKgwqDC oMKgICs9IGh3Y29udGV4dF9vcGVuY2wuaAo+IGRpZmYgLS1naXQgYS9saWJhdnV0aWwvaHdjb250 ZXh0LmMgYi9saWJhdnV0aWwvaHdjb250ZXh0LmMKPiBpbmRleCAzMzk2NTk4MjY5Li4wNDA3MGJj M2MzIDEwMDY0NAo+IC0tLSBhL2xpYmF2dXRpbC9od2NvbnRleHQuYwo+ICsrKyBiL2xpYmF2dXRp bC9od2NvbnRleHQuYwo+IEBAIC0zNiw2ICszNiw5IEBAIHN0YXRpYyBjb25zdCBIV0NvbnRleHRU eXBlICogY29uc3QgaHdfdGFibGVbXSA9IHsKPiDCoCNpZiBDT05GSUdfRDNEMTFWQQo+IMKgwqDC oMKgICZmZl9od2NvbnRleHRfdHlwZV9kM2QxMXZhLAo+IMKgI2VuZGlmCj4gKyNpZiBDT05GSUdf RDNEMTJWQQo+ICvCoMKgwqAgJmZmX2h3Y29udGV4dF90eXBlX2QzZDEydmEsCj4gKyNlbmRpZgo+ IMKgI2lmIENPTkZJR19MSUJEUk0KPiDCoMKgwqDCoCAmZmZfaHdjb250ZXh0X3R5cGVfZHJtLAo+ IMKgI2VuZGlmCj4gQEAgLTcxLDYgKzc0LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGh3 X3R5cGVfbmFtZXNbXSA9IHsKPiDCoMKgwqDCoCBbQVZfSFdERVZJQ0VfVFlQRV9EUk1dwqDCoMKg ID0gImRybSIsCj4gwqDCoMKgwqAgW0FWX0hXREVWSUNFX1RZUEVfRFhWQTJdwqAgPSAiZHh2YTIi LAo+IMKgwqDCoMKgIFtBVl9IV0RFVklDRV9UWVBFX0QzRDExVkFdID0gImQzZDExdmEiLAo+ICvC oMKgwqAgW0FWX0hXREVWSUNFX1RZUEVfRDNEMTJWQV0gPSAiZDNkMTJ2YSIsCj4gwqDCoMKgwqAg W0FWX0hXREVWSUNFX1RZUEVfT1BFTkNMXSA9ICJvcGVuY2wiLAo+IMKgwqDCoMKgIFtBVl9IV0RF VklDRV9UWVBFX1FTVl3CoMKgwqAgPSAicXN2IiwKPiDCoMKgwqDCoCBbQVZfSFdERVZJQ0VfVFlQ RV9WQUFQSV3CoCA9ICJ2YWFwaSIsCj4gZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC9od2NvbnRleHQu aCBiL2xpYmF2dXRpbC9od2NvbnRleHQuaAo+IGluZGV4IDdmZjA4Yzg2MDguLjJiMzM3MjFhOTcg MTAwNjQ0Cj4gLS0tIGEvbGliYXZ1dGlsL2h3Y29udGV4dC5oCj4gKysrIGIvbGliYXZ1dGlsL2h3 Y29udGV4dC5oCj4gQEAgLTM3LDYgKzM3LDcgQEAgZW51bSBBVkhXRGV2aWNlVHlwZSB7Cj4gwqDC oMKgwqAgQVZfSFdERVZJQ0VfVFlQRV9PUEVOQ0wsCj4gwqDCoMKgwqAgQVZfSFdERVZJQ0VfVFlQ RV9NRURJQUNPREVDLAo+IMKgwqDCoMKgIEFWX0hXREVWSUNFX1RZUEVfVlVMS0FOLAo+ICvCoMKg wqAgQVZfSFdERVZJQ0VfVFlQRV9EM0QxMlZBLAo+IMKgfTsKPiDCoAo+IMKgdHlwZWRlZiBzdHJ1 Y3QgQVZIV0RldmljZUludGVybmFsIEFWSFdEZXZpY2VJbnRlcm5hbDsKPiBkaWZmIC0tZ2l0IGEv bGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhLmMgYi9saWJhdnV0aWwvaHdjb250ZXh0X2QzZDEy dmEuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4uZDE1OWFlZjA4 Ygo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWJhdnV0aWwvaHdjb250ZXh0X2QzZDEydmEuYwo+ IEBAIC0wLDAgKzEsNjk5IEBACj4gKy8qCj4gKyAqIERpcmVjdDNEIDEyIEhXIGFjY2VsZXJhdGlv bi4KPiArICoKPiArICogY29weXJpZ2h0IChjKSAyMDIyLTIwMjMgV3UgSmlhbmh1YSA8dG9xc3h3 QG91dGxvb2suY29tPgo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4g KyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl ciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vu c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIEZG bXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuwqAgU2VlIHRoZSBHTlUKPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNl IGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4g KyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv c3RvbiwgTUEgMDIxMTAtMTMwMQo+IFVTQQo+ICsgKi8KPiArCj4gKyNpbmNsdWRlICJjb25maWcu aCIKPiArI2luY2x1ZGUgImNvbW1vbi5oIgo+ICsjaW5jbHVkZSAiaHdjb250ZXh0LmgiCj4gKyNp bmNsdWRlICJod2NvbnRleHRfaW50ZXJuYWwuaCIKPiArI2luY2x1ZGUgImh3Y29udGV4dF9kM2Qx MnZhX2ludGVybmFsLmgiCj4gKyNpbmNsdWRlICJod2NvbnRleHRfZDNkMTJ2YS5oIgo+ICsjaW5j bHVkZSAiaW1ndXRpbHMuaCIKPiArI2luY2x1ZGUgInBpeGRlc2MuaCIKPiArI2luY2x1ZGUgInBp eGZtdC5oIgo+ICsjaW5jbHVkZSAidGhyZWFkLmgiCj4gKyNpbmNsdWRlICJjb21wYXQvdzMyZGxm Y24uaCIKPiArI2luY2x1ZGUgPGR4Z2kxXzMuaD4KPiArCj4gK3R5cGVkZWYgSFJFU1VMVChXSU5B UEkgKlBGTl9DUkVBVEVfRFhHSV9GQUNUT1JZMikoVUlOVCBGbGFncywgUkVGSUlEIHJpaWQsCj4g dm9pZCAqKnBwRmFjdG9yeSk7Cj4gKwo+ICtzdGF0aWMgQVZPbmNlIGZ1bmN0aW9uc19sb2FkZWQg PSBBVl9PTkNFX0lOSVQ7Cj4gKwo+ICtzdGF0aWMgUEZOX0NSRUFURV9EWEdJX0ZBQ1RPUlkyIGQz ZDEydmFfY3JlYXRlX2R4Z2lfZmFjdG9yeTI7Cj4gK3N0YXRpYyBQRk5fRDNEMTJfQ1JFQVRFX0RF VklDRSBkM2QxMnZhX2NyZWF0ZV9kZXZpY2U7Cj4gK3N0YXRpYyBQRk5fRDNEMTJfR0VUX0RFQlVH X0lOVEVSRkFDRSBkM2QxMnZhX2dldF9kZWJ1Z19pbnRlcmZhY2U7Cj4gKwo+ICtzdGF0aWMgYXZf Y29sZCB2b2lkIGxvYWRfZnVuY3Rpb25zKHZvaWQpCj4gK3sKPiArwqDCoMKgIEhBTkRMRSBkM2Rs aWIsIGR4Z2lsaWI7Cj4gKwo+ICvCoMKgwqAgZDNkbGliwqAgPSBkbG9wZW4oImQzZDEyLmRsbCIs IDApOwo+ICvCoMKgwqAgZHhnaWxpYiA9IGRsb3BlbigiZHhnaS5kbGwiLCAwKTsKCgpXaGVyZSBh cmUgZDNkbGliIGFuZCBkeGdpbGliIHJlbGVhc2VkID8gCgoKPiArwqDCoMKgIGlmICghZDNkbGli IHx8ICFkeGdpbGliKQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4gKwo+ICvCoMKgwqAgZDNk MTJ2YV9jcmVhdGVfZGV2aWNlID0gKFBGTl9EM0QxMl9DUkVBVEVfREVWSUNFKUdldFByb2NBZGRy ZXNzKGQzZGxpYiwKPiAiRDNEMTJDcmVhdGVEZXZpY2UiKTsKPiArwqDCoMKgIGQzZDEydmFfY3Jl YXRlX2R4Z2lfZmFjdG9yeTIgPQo+IChQRk5fQ1JFQVRFX0RYR0lfRkFDVE9SWTIpR2V0UHJvY0Fk ZHJlc3MoZHhnaWxpYiwgIkNyZWF0ZURYR0lGYWN0b3J5MiIpOwo+ICvCoMKgwqAgZDNkMTJ2YV9n ZXRfZGVidWdfaW50ZXJmYWNlID0KPiAoUEZOX0QzRDEyX0dFVF9ERUJVR19JTlRFUkZBQ0UpR2V0 UHJvY0FkZHJlc3MoZDNkbGliLAo+ICJEM0QxMkdldERlYnVnSW50ZXJmYWNlIik7Cj4gK30KPiAr Cj4gK3R5cGVkZWYgc3RydWN0IEQzRDEyVkFGcmFtZXNDb250ZXh0IHsKPiArwqDCoMKgIElEM0Qx MlJlc291cmNlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqc3RhZ2luZ19idWZmZXI7Cj4gK8KgwqDC oCBJRDNEMTJDb21tYW5kUXVldWXCoMKgwqDCoMKgwqDCoCAqY29tbWFuZF9xdWV1ZTsKPiArwqDC oMKgIElEM0QxMkNvbW1hbmRBbGxvY2F0b3LCoMKgwqAgKmNvbW1hbmRfYWxsb2NhdG9yOwo+ICvC oMKgwqAgSUQzRDEyR3JhcGhpY3NDb21tYW5kTGlzdCAqY29tbWFuZF9saXN0Owo+ICvCoMKgwqAg QVZEM0QxMlZBU3luY0NvbnRleHTCoMKgwqDCoMKgICpzeW5jX2N0eDsKPiArwqDCoMKgIGludMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmJfc3VyZmFjZXM7 Cj4gK8KgwqDCoCBpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIG5iX3N1cmZhY2VzX3VzZWQ7Cj4gK8KgwqDCoCBEWEdJX0ZPUk1BVMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBmb3JtYXQ7Cj4gK8KgwqDCoCBVSU5UwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbHVtYV9jb21wb25lbnRfc2l6ZTsKPiArfSBEM0Qx MlZBRnJhbWVzQ29udGV4dDsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgewo+ICvCoMKgwqAg RFhHSV9GT1JNQVQgZDNkX2Zvcm1hdDsKPiArwqDCoMKgIGVudW0gQVZQaXhlbEZvcm1hdCBwaXhf Zm10Owo+ICt9IHN1cHBvcnRlZF9mb3JtYXRzW10gPSB7Cj4gK8KgwqDCoCB7IERYR0lfRk9STUFU X05WMTIsIEFWX1BJWF9GTVRfTlYxMiB9LAo+ICvCoMKgwqAgeyBEWEdJX0ZPUk1BVF9QMDEwLCBB Vl9QSVhfRk1UX1AwMTAgfSwKPiArfTsKPiArCj4gK0RYR0lfRk9STUFUIGF2X2QzZDEydmFfbWFw X3N3X3RvX2h3X2Zvcm1hdChlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCkKPiArewo+ICvCoMKg wqAgc3dpdGNoIChwaXhfZm10KSB7Cj4gK8KgwqDCoCBjYXNlIEFWX1BJWF9GTVRfTlYxMjpyZXR1 cm4gRFhHSV9GT1JNQVRfTlYxMjsKPiArwqDCoMKgIGNhc2UgQVZfUElYX0ZNVF9QMDEwOnJldHVy biBEWEdJX0ZPUk1BVF9QMDEwOwo+ICvCoMKgwqAgZGVmYXVsdDrCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcmV0dXJuIERYR0lfRk9STUFUX1VOS05PV047Cj4gK8KgwqDCoCB9Cj4gK30KPiArCj4g K2ludCBhdl9kM2QxMnZhX3N5bmNfY29udGV4dF9hbGxvYyhBVkQzRDEyVkFEZXZpY2VDb250ZXh0 ICpjdHgsCj4gQVZEM0QxMlZBU3luY0NvbnRleHQgKipwc3luY19jdHgpCj4gK3sKPiArwqDCoMKg IEFWRDNEMTJWQVN5bmNDb250ZXh0ICpzeW5jX2N0eDsKPiArCj4gK8KgwqDCoCBzeW5jX2N0eCA9 IGF2X21hbGxvY3ooc2l6ZW9mKEFWRDNEMTJWQVN5bmNDb250ZXh0KSk7Cj4gK8KgwqDCoCBpZiAo IXN5bmNfY3R4KQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ICsK PiArwqDCoMKgIERYX0NIRUNLKElEM0QxMkRldmljZV9DcmVhdGVGZW5jZShjdHgtPmRldmljZSwg c3luY19jdHgtPmZlbmNlX3ZhbHVlLAo+IEQzRDEyX0ZFTkNFX0ZMQUdfTk9ORSwgJklJRF9JRDNE MTJGZW5jZSwgJnN5bmNfY3R4LT5mZW5jZSkpOwo+ICsKPiArwqDCoMKgIHN5bmNfY3R4LT5ldmVu dCA9IENyZWF0ZUV2ZW50KE5VTEwsIEZBTFNFLCBGQUxTRSwgTlVMTCk7Cj4gK8KgwqDCoCBpZiAo IXN5bmNfY3R4LT5ldmVudCkKPiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+ICsKPiArwqDC oMKgICpwc3luY19jdHggPSBzeW5jX2N0eDsKPiArCj4gK8KgwqDCoCByZXR1cm4gMDsKPiArCj4g K2ZhaWw6Cj4gK8KgwqDCoCBEM0QxMl9PQkpFQ1RfUkVMRUFTRShzeW5jX2N0eC0+ZmVuY2UpOwo+ ICvCoMKgwqAgYXZfZnJlZXAoJnN5bmNfY3R4KTsKPiArwqDCoMKgIHJldHVybiBBVkVSUk9SKEVJ TlZBTCk7Cj4gK30KPiArCj4gK3ZvaWQgYXZfZDNkMTJ2YV9zeW5jX2NvbnRleHRfZnJlZShBVkQz RDEyVkFTeW5jQ29udGV4dCAqKnBzeW5jX2N0eCkKPiArewo+ICvCoMKgwqAgQVZEM0QxMlZBU3lu Y0NvbnRleHQgKnN5bmNfY3R4ID0gKnBzeW5jX2N0eDsKPiArwqDCoMKgIGlmICghcHN5bmNfY3R4 IHx8ICFzeW5jX2N0eCkKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+ICsKPiArwqDCoMKgIGF2 X2QzZDEydmFfd2FpdF9pZGxlKHN5bmNfY3R4KTsKPiArCj4gK8KgwqDCoCBEM0QxMl9PQkpFQ1Rf UkVMRUFTRShzeW5jX2N0eC0+ZmVuY2UpOwo+ICsKPiArwqDCoMKgIGlmIChzeW5jX2N0eC0+ZXZl bnQpCj4gK8KgwqDCoMKgwqDCoMKgIENsb3NlSGFuZGxlKHN5bmNfY3R4LT5ldmVudCk7Cj4gKwo+ ICvCoMKgwqAgYXZfZnJlZXAocHN5bmNfY3R4KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBhdl9k M2QxMnZhX3dhaXRfZm9yX2ZlbmNlX3ZhbHVlKEFWRDNEMTJWQVN5bmNDb250ZXh0ICpzeW5jX2N0 eCwKPiB1aW50NjRfdCBmZW5jZV92YWx1ZSkKPiArewo+ICvCoMKgwqAgdWludDY0X3QgY29tcGxl dGlvbiA9IElEM0QxMkZlbmNlX0dldENvbXBsZXRlZFZhbHVlKHN5bmNfY3R4LT5mZW5jZSk7Cj4g K8KgwqDCoCBpZiAoY29tcGxldGlvbiA8IGZlbmNlX3ZhbHVlKSB7Cj4gK8KgwqDCoMKgwqDCoMKg IGlmIChGQUlMRUQoSUQzRDEyRmVuY2VfU2V0RXZlbnRPbkNvbXBsZXRpb24oc3luY19jdHgtPmZl bmNlLAo+IGZlbmNlX3ZhbHVlLCBzeW5jX2N0eC0+ZXZlbnQpKSkKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAgV2Fp dEZvclNpbmdsZU9iamVjdEV4KHN5bmNfY3R4LT5ldmVudCwgSU5GSU5JVEUsIEZBTFNFKTsKPiAr wqDCoMKgIH0KPiArCj4gK8KgwqDCoCByZXR1cm4gMDsKPiArfQo+ICsKPiAraW50IGF2X2QzZDEy dmFfd2FpdF9pZGxlKEFWRDNEMTJWQVN5bmNDb250ZXh0ICpjdHgpCj4gK3sKPiArwqDCoMKgIHJl dHVybiBhdl9kM2QxMnZhX3dhaXRfZm9yX2ZlbmNlX3ZhbHVlKGN0eCwgY3R4LT5mZW5jZV92YWx1 ZSk7Cj4gK30KPiArCj4gK2ludCBhdl9kM2QxMnZhX3dhaXRfcXVldWVfaWRsZShBVkQzRDEyVkFT eW5jQ29udGV4dCAqc3luY19jdHgsCj4gSUQzRDEyQ29tbWFuZFF1ZXVlICpjb21tYW5kX3F1ZXVl KQo+ICt7Cj4gK8KgwqDCoCBEWF9DSEVDSyhJRDNEMTJDb21tYW5kUXVldWVfU2lnbmFsKGNvbW1h bmRfcXVldWUsIHN5bmNfY3R4LT5mZW5jZSwKPiArK3N5bmNfY3R4LT5mZW5jZV92YWx1ZSkpOwo+ ICvCoMKgwqAgcmV0dXJuIGF2X2QzZDEydmFfd2FpdF9pZGxlKHN5bmNfY3R4KTsKPiArCj4gK2Zh aWw6Cj4gK8KgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW5saW5lIGludCBjcmVhdGVfcmVzb3VyY2UoSUQzRDEyRGV2aWNlICpkZXZpY2UsIGNvbnN0Cj4g RDNEMTJfUkVTT1VSQ0VfREVTQyAqZGVzYywgRDNEMTJfUkVTT1VSQ0VfU1RBVEVTIHN0YXRlcywg SUQzRDEyUmVzb3VyY2UKPiAqKnBwUmVzb3VyY2UsIGludCBpc19yZWFkX2JhY2spCj4gK3sKPiAr wqDCoMKgIEQzRDEyX0hFQVBfUFJPUEVSVElFUyBwcm9wcyA9IHsKPiArwqDCoMKgwqDCoMKgwqAg LlR5cGXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGlzX3JlYWRfYmFjayA/IEQz RDEyX0hFQVBfVFlQRV9SRUFEQkFDSyA6Cj4gRDNEMTJfSEVBUF9UWVBFX0RFRkFVTFQsCj4gK8Kg wqDCoMKgwqDCoMKgIC5DUFVQYWdlUHJvcGVydHnCoMKgwqDCoMKgID0gRDNEMTJfQ1BVX1BBR0Vf UFJPUEVSVFlfVU5LTk9XTiwKPiArwqDCoMKgwqDCoMKgwqAgLk1lbW9yeVBvb2xQcmVmZXJlbmNl ID0gRDNEMTJfTUVNT1JZX1BPT0xfVU5LTk9XTiwKPiArwqDCoMKgwqDCoMKgwqAgLkNyZWF0aW9u Tm9kZU1hc2vCoMKgwqDCoCA9IDAsCj4gK8KgwqDCoMKgwqDCoMKgIC5WaXNpYmxlTm9kZU1hc2vC oMKgwqDCoMKgID0gMCwKPiArwqDCoMKgIH07Cj4gKwo+ICvCoMKgwqAgaWYgKEZBSUxFRChJRDNE MTJEZXZpY2VfQ3JlYXRlQ29tbWl0dGVkUmVzb3VyY2UoZGV2aWNlLCAmcHJvcHMsCj4gRDNEMTJf SEVBUF9GTEFHX05PTkUsIGRlc2MsCj4gK8KgwqDCoMKgwqDCoMKgIHN0YXRlcywgTlVMTCwgJklJ RF9JRDNEMTJSZXNvdXJjZSwgcHBSZXNvdXJjZSkpKQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4g QVZFUlJPUihFSU5WQUwpOwo+ICsKPiArwqDCoMKgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGQzZDEydmFfY3JlYXRlX3N0YWdpbmdfYnVmZmVyX3Jlc291cmNlKEFWSFdGcmFtZXND b250ZXh0ICpjdHgpCj4gK3sKPiArwqDCoMKgIEFWRDNEMTJWQURldmljZUNvbnRleHQgKmRldmlj ZV9od2N0eCA9IGN0eC0+ZGV2aWNlX2N0eC0+aHdjdHg7Cj4gK8KgwqDCoCBEM0QxMlZBRnJhbWVz Q29udGV4dMKgwqAgKnPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gY3R4LT5pbnRlcm5hbC0+cHJp djsKPiArCj4gK8KgwqDCoCBEM0QxMl9SRVNPVVJDRV9ERVNDIGRlc2MgPSB7Cj4gK8KgwqDCoMKg wqDCoMKgIC5EaW1lbnNpb27CoMKgwqDCoMKgwqDCoMKgwqAgPSBEM0QxMl9SRVNPVVJDRV9ESU1F TlNJT05fQlVGRkVSLAo+ICvCoMKgwqDCoMKgwqDCoCAuQWxpZ25tZW50wqDCoMKgwqDCoMKgwqDC oMKgID0gMCwKPiArwqDCoMKgwqDCoMKgwqAgLldpZHRowqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgPSAwLAo+ICvCoMKgwqDCoMKgwqDCoCAuSGVpZ2h0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ID0gMSwKPiArwqDCoMKgwqDCoMKgwqAgLkRlcHRoT3JBcnJheVNpemXCoMKgID0gMSwKPiArwqDC oMKgwqDCoMKgwqAgLk1pcExldmVsc8KgwqDCoMKgwqDCoMKgwqDCoCA9IDEsCj4gK8KgwqDCoMKg wqDCoMKgIC5Gb3JtYXTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBEWEdJX0ZPUk1BVF9VTktO T1dOLAo+ICvCoMKgwqDCoMKgwqDCoCAuU2FtcGxlRGVzY8KgwqDCoMKgwqDCoMKgwqAgPSB7IC5D b3VudCA9IDEsIC5RdWFsaXR5ID0gMCB9LAo+ICvCoMKgwqDCoMKgwqDCoCAuTGF5b3V0wqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgID0gRDNEMTJfVEVYVFVSRV9MQVlPVVRfUk9XX01BSk9SLAo+ICvC oMKgwqDCoMKgwqDCoCAuRmxhZ3PCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IEQzRDEyX1JF U09VUkNFX0ZMQUdfTk9ORSwKPiArwqDCoMKgIH07Cj4gKwo+ICvCoMKgwqAgcy0+bHVtYV9jb21w b25lbnRfc2l6ZSA9IEZGQUxJR04oY3R4LT53aWR0aCAqIChzLT5mb3JtYXQgPT0KPiBEWEdJX0ZP Uk1BVF9QMDEwID8gMiA6IDEpLCBEM0QxMl9URVhUVVJFX0RBVEFfUElUQ0hfQUxJR05NRU5UKSAq IGN0eC0+aGVpZ2h0Owo+ICvCoMKgwqAgZGVzYy5XaWR0aCA9IHMtPmx1bWFfY29tcG9uZW50X3Np emUgKyAocy0+bHVtYV9jb21wb25lbnRfc2l6ZSA+PiAxKTsKPiArCj4gK8KgwqDCoCByZXR1cm4g Y3JlYXRlX3Jlc291cmNlKGRldmljZV9od2N0eC0+ZGV2aWNlLCAmZGVzYywKPiBEM0QxMl9SRVNP VVJDRV9TVEFURV9DT1BZX0RFU1QsICZzLT5zdGFnaW5nX2J1ZmZlciwgMSk7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgZDNkMTJ2YV9jcmVhdGVfaGVscGVyX29iamVjdHMoQVZIV0ZyYW1lc0NvbnRl eHQgKmN0eCkKPiArewo+ICvCoMKgwqAgQVZEM0QxMlZBRGV2aWNlQ29udGV4dCAqZGV2aWNlX2h3 Y3R4ID0gY3R4LT5kZXZpY2VfY3R4LT5od2N0eDsKPiArwqDCoMKgIEQzRDEyVkFGcmFtZXNDb250 ZXh0wqDCoCAqc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBjdHgtPmludGVybmFsLT5wcml2Owo+ ICsKPiArwqDCoMKgIEQzRDEyX0NPTU1BTkRfUVVFVUVfREVTQyBxdWV1ZV9kZXNjID0gewo+ICvC oMKgwqDCoMKgwqDCoCAuVHlwZcKgwqDCoMKgID0gRDNEMTJfQ09NTUFORF9MSVNUX1RZUEVfQ09Q WSwKPiArwqDCoMKgwqDCoMKgwqAgLlByaW9yaXR5ID0gMCwKPiArwqDCoMKgwqDCoMKgwqAgLk5v ZGVNYXNrID0gMCwKPiArwqDCoMKgIH07Cj4gKwo+ICvCoMKgwqAgaW50IHJldCA9IGQzZDEydmFf Y3JlYXRlX3N0YWdpbmdfYnVmZmVyX3Jlc291cmNlKGN0eCk7Cj4gK8KgwqDCoCBpZiAocmV0IDwg MCkKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPiArCj4gK8KgwqDCoCByZXQgPSBhdl9k M2QxMnZhX3N5bmNfY29udGV4dF9hbGxvYyhkZXZpY2VfaHdjdHgsICZzLT5zeW5jX2N0eCk7Cj4g K8KgwqDCoCBpZiAocmV0IDwgMCkKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPiArCj4g K8KgwqDCoCBEWF9DSEVDSyhJRDNEMTJEZXZpY2VfQ3JlYXRlQ29tbWFuZFF1ZXVlKGRldmljZV9o d2N0eC0+ZGV2aWNlLAo+ICZxdWV1ZV9kZXNjLAo+ICvCoMKgwqDCoMKgwqDCoCAmSUlEX0lEM0Qx MkNvbW1hbmRRdWV1ZSwgJnMtPmNvbW1hbmRfcXVldWUpKTsKPiArCj4gK8KgwqDCoCBEWF9DSEVD SyhJRDNEMTJEZXZpY2VfQ3JlYXRlQ29tbWFuZEFsbG9jYXRvcihkZXZpY2VfaHdjdHgtPmRldmlj ZSwKPiBxdWV1ZV9kZXNjLlR5cGUsCj4gK8KgwqDCoMKgwqDCoMKgICZJSURfSUQzRDEyQ29tbWFu ZEFsbG9jYXRvciwgJnMtPmNvbW1hbmRfYWxsb2NhdG9yKSk7Cj4gKwo+ICvCoMKgwqAgRFhfQ0hF Q0soSUQzRDEyRGV2aWNlX0NyZWF0ZUNvbW1hbmRMaXN0KGRldmljZV9od2N0eC0+ZGV2aWNlLCAw LAo+IHF1ZXVlX2Rlc2MuVHlwZSwKPiArwqDCoMKgwqDCoMKgwqAgcy0+Y29tbWFuZF9hbGxvY2F0 b3IsIE5VTEwsICZJSURfSUQzRDEyR3JhcGhpY3NDb21tYW5kTGlzdCwgJnMtCj4gPmNvbW1hbmRf bGlzdCkpOwo+ICsKPiArwqDCoMKgIERYX0NIRUNLKElEM0QxMkdyYXBoaWNzQ29tbWFuZExpc3Rf Q2xvc2Uocy0+Y29tbWFuZF9saXN0KSk7Cj4gKwo+ICvCoMKgwqAgSUQzRDEyQ29tbWFuZFF1ZXVl X0V4ZWN1dGVDb21tYW5kTGlzdHMocy0+Y29tbWFuZF9xdWV1ZSwgMSwKPiAoSUQzRDEyQ29tbWFu ZExpc3QgKiopJnMtPmNvbW1hbmRfbGlzdCk7Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIGF2X2QzZDEy dmFfd2FpdF9xdWV1ZV9pZGxlKHMtPnN5bmNfY3R4LCBzLT5jb21tYW5kX3F1ZXVlKTsKPiArCj4g K2ZhaWw6Cj4gK8KgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBkM2QxMnZhX2ZyYW1lc191bmluaXQoQVZIV0ZyYW1lc0NvbnRleHQgKmN0eCkKPiAr ewo+ICvCoMKgwqAgQVZEM0QxMlZBRnJhbWVzQ29udGV4dCAqZnJhbWVzX2h3Y3R4ID0gY3R4LT5o d2N0eDsKPiArwqDCoMKgIEQzRDEyVkFGcmFtZXNDb250ZXh0wqDCoCAqc8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgPSBjdHgtPmludGVybmFsLT5wcml2Owo+ICsKPiArwqDCoMKgIGF2X2QzZDEydmFf c3luY19jb250ZXh0X2ZyZWUoJnMtPnN5bmNfY3R4KTsKPiArCj4gK8KgwqDCoCBEM0QxMl9PQkpF Q1RfUkVMRUFTRShzLT5zdGFnaW5nX2J1ZmZlcik7Cj4gK8KgwqDCoCBEM0QxMl9PQkpFQ1RfUkVM RUFTRShzLT5jb21tYW5kX2FsbG9jYXRvcik7Cj4gK8KgwqDCoCBEM0QxMl9PQkpFQ1RfUkVMRUFT RShzLT5jb21tYW5kX2xpc3QpOwo+ICvCoMKgwqAgRDNEMTJfT0JKRUNUX1JFTEVBU0Uocy0+Y29t bWFuZF9xdWV1ZSk7Cj4gKwo+ICvCoMKgwqAgYXZfZnJlZXAoJmZyYW1lc19od2N0eC0+dGV4dHVy ZV9pbmZvcyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9mcmFtZXNfZ2V0X2NvbnN0 cmFpbnRzKEFWSFdEZXZpY2VDb250ZXh0ICpjdHgsIGNvbnN0IHZvaWQKPiAqaHdjb25maWcsIEFW SFdGcmFtZXNDb25zdHJhaW50cyAqY29uc3RyYWludHMpCj4gK3sKPiArwqDCoMKgIEhSRVNVTFQg aHI7Cj4gK8KgwqDCoCBpbnQgbmJfc3dfZm9ybWF0cyA9IDA7Cj4gK8KgwqDCoCBBVkQzRDEyVkFE ZXZpY2VDb250ZXh0ICpkZXZpY2VfaHdjdHggPSBjdHgtPmh3Y3R4Owo+ICsKPiArwqDCoMKgIGNv bnN0cmFpbnRzLT52YWxpZF9zd19mb3JtYXRzID0KPiBhdl9tYWxsb2NfYXJyYXkoRkZfQVJSQVlf RUxFTVMoc3VwcG9ydGVkX2Zvcm1hdHMpICsgMSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVvZigqY29uc3RyYWludHMtCj4gPnZhbGlkX3N3X2Zv cm1hdHMpKTsKPiArwqDCoMKgIGlmICghY29uc3RyYWludHMtPnZhbGlkX3N3X2Zvcm1hdHMpCj4g K8KgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKwo+ICvCoMKgwqAgZm9y IChpbnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhzdXBwb3J0ZWRfZm9ybWF0cyk7IGkrKykg ewo+ICvCoMKgwqDCoMKgwqDCoCBEM0QxMl9GRUFUVVJFX0RBVEFfRk9STUFUX1NVUFBPUlQgZm9y bWF0X3N1cHBvcnQgPSB7Cj4gc3VwcG9ydGVkX2Zvcm1hdHNbaV0uZDNkX2Zvcm1hdCB9Owo+ICvC oMKgwqDCoMKgwqDCoCBociA9IElEM0QxMkRldmljZV9DaGVja0ZlYXR1cmVTdXBwb3J0KGRldmlj ZV9od2N0eC0+ZGV2aWNlLAo+IEQzRDEyX0ZFQVRVUkVfRk9STUFUX1NVUFBPUlQsICZmb3JtYXRf c3VwcG9ydCwgc2l6ZW9mKGZvcm1hdF9zdXBwb3J0KSk7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIChT VUNDRUVERUQoaHIpICYmIChmb3JtYXRfc3VwcG9ydC5TdXBwb3J0MSAmCj4gRDNEMTJfRk9STUFU X1NVUFBPUlQxX1RFWFRVUkUyRCkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3RyYWlu dHMtPnZhbGlkX3N3X2Zvcm1hdHNbbmJfc3dfZm9ybWF0cysrXSA9Cj4gc3VwcG9ydGVkX2Zvcm1h dHNbaV0ucGl4X2ZtdDsKPiArwqDCoMKgIH0KPiArwqDCoMKgIGNvbnN0cmFpbnRzLT52YWxpZF9z d19mb3JtYXRzW25iX3N3X2Zvcm1hdHNdID0gQVZfUElYX0ZNVF9OT05FOwo+ICsKPiArwqDCoMKg IGNvbnN0cmFpbnRzLT52YWxpZF9od19mb3JtYXRzID0gYXZfbWFsbG9jX2FycmF5KDIsIHNpemVv ZigqY29uc3RyYWludHMtCj4gPnZhbGlkX2h3X2Zvcm1hdHMpKTsKPiArwqDCoMKgIGlmICghY29u c3RyYWludHMtPnZhbGlkX2h3X2Zvcm1hdHMpCj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVS Uk9SKEVOT01FTSk7Cj4gKwo+ICvCoMKgwqAgY29uc3RyYWludHMtPnZhbGlkX2h3X2Zvcm1hdHNb MF0gPSBBVl9QSVhfRk1UX0QzRDEyOwo+ICvCoMKgwqAgY29uc3RyYWludHMtPnZhbGlkX2h3X2Zv cm1hdHNbMV0gPSBBVl9QSVhfRk1UX05PTkU7Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGZyZWVfdGV4dHVyZSh2b2lkICpvcGFxdWUsIHVpbnQ4X3QgKmRh dGEpCj4gK3sKPiArwqDCoMKgIEFWRDNEMTJGcmFtZURlc2NyaXB0b3IgKmRlc2MgPSAoQVZEM0Qx MkZyYW1lRGVzY3JpcHRvciAqKWRhdGE7Cj4gKwo+ICvCoMKgwqAgaWYgKGRlc2MtPnN5bmNfY3R4 KQo+ICvCoMKgwqDCoMKgwqDCoCBhdl9kM2QxMnZhX3N5bmNfY29udGV4dF9mcmVlKCZkZXNjLT5z eW5jX2N0eCk7Cj4gKwo+ICvCoMKgwqAgRDNEMTJfT0JKRUNUX1JFTEVBU0UoZGVzYy0+dGV4dHVy ZSk7Cj4gK8KgwqDCoCBhdl9mcmVlcCgmZGF0YSk7Cj4gK30KPiArCj4gK3N0YXRpYyBBVkJ1ZmZl clJlZiAqd3JhcF90ZXh0dXJlX2J1ZihBVkhXRnJhbWVzQ29udGV4dCAqY3R4LCBJRDNEMTJSZXNv dXJjZQo+ICp0ZXh0dXJlLCBBVkQzRDEyVkFTeW5jQ29udGV4dCAqc3luY19jdHgpCj4gK3sKPiAr wqDCoMKgIEFWQnVmZmVyUmVmICpidWY7Cj4gK8KgwqDCoCBEM0QxMlZBRnJhbWVzQ29udGV4dMKg wqAgKnPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gY3R4LT5pbnRlcm5hbC0+cHJpdjsKPiArwqDC oMKgIEFWRDNEMTJWQUZyYW1lc0NvbnRleHQgKmZyYW1lc19od2N0eCA9IGN0eC0+aHdjdHg7Cj4g Kwo+ICvCoMKgwqAgQVZEM0QxMkZyYW1lRGVzY3JpcHRvciAqZGVzYyA9IGF2X21hbGxvY3ooc2l6 ZW9mKCpkZXNjKSk7Cj4gK8KgwqDCoCBpZiAoIWRlc2MpCj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8g ZmFpbDsKPiArCj4gK8KgwqDCoCBpZiAocy0+bmJfc3VyZmFjZXMgPD0gcy0+bmJfc3VyZmFjZXNf dXNlZCkgewo+ICvCoMKgwqDCoMKgwqDCoCBmcmFtZXNfaHdjdHgtPnRleHR1cmVfaW5mb3MgPSBh dl9yZWFsbG9jX2YoZnJhbWVzX2h3Y3R4LQo+ID50ZXh0dXJlX2luZm9zLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHMtPm5iX3N1cmZhY2VzX3VzZWQgKyAx LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVvZigq ZnJhbWVzX2h3Y3R4LQo+ID50ZXh0dXJlX2luZm9zKSk7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmICgh ZnJhbWVzX2h3Y3R4LT50ZXh0dXJlX2luZm9zKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdv dG8gZmFpbDsKPiArwqDCoMKgwqDCoMKgwqAgcy0+bmJfc3VyZmFjZXMgPSBzLT5uYl9zdXJmYWNl c191c2VkICsgMTsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBkZXNjLT50ZXh0dXJlwqAgPSB0 ZXh0dXJlOwo+ICvCoMKgwqAgZGVzYy0+aW5kZXjCoMKgwqAgPSBzLT5uYl9zdXJmYWNlc191c2Vk Owo+ICvCoMKgwqAgZGVzYy0+c3luY19jdHggPSBzeW5jX2N0eDsKPiArCj4gK8KgwqDCoCBmcmFt ZXNfaHdjdHgtPnRleHR1cmVfaW5mb3Nbcy0+bmJfc3VyZmFjZXNfdXNlZF0udGV4dHVyZcKgID0g dGV4dHVyZTsKPiArwqDCoMKgIGZyYW1lc19od2N0eC0+dGV4dHVyZV9pbmZvc1tzLT5uYl9zdXJm YWNlc191c2VkXS5pbmRleMKgwqDCoCA9IGRlc2MtPmluZGV4Owo+ICvCoMKgwqAgZnJhbWVzX2h3 Y3R4LT50ZXh0dXJlX2luZm9zW3MtPm5iX3N1cmZhY2VzX3VzZWRdLnN5bmNfY3R4ID0gc3luY19j dHg7Cj4gK8KgwqDCoCBzLT5uYl9zdXJmYWNlc191c2VkKys7Cj4gKwo+ICvCoMKgwqAgYnVmID0g YXZfYnVmZmVyX2NyZWF0ZSgodWludDhfdCAqKWRlc2MsIHNpemVvZihkZXNjKSwgZnJlZV90ZXh0 dXJlLAo+IHRleHR1cmUsIDApOwo+ICvCoMKgwqAgaWYgKCFidWYpIHsKPiArwqDCoMKgwqDCoMKg wqAgRDNEMTJfT0JKRUNUX1JFTEVBU0UodGV4dHVyZSk7Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2Zy ZWVwKCZkZXNjKTsKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7Cj4gK8KgwqDCoCB9Cj4g Kwo+ICvCoMKgwqAgcmV0dXJuIGJ1ZjsKPiArCj4gK2ZhaWw6Cj4gK8KgwqDCoCBEM0QxMl9PQkpF Q1RfUkVMRUFTRSh0ZXh0dXJlKTsKPiArwqDCoMKgIGF2X2QzZDEydmFfc3luY19jb250ZXh0X2Zy ZWUoJnN5bmNfY3R4KTsKPiArwqDCoMKgIHJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMg QVZCdWZmZXJSZWYgKmQzZDEydmFfcG9vbF9hbGxvYyh2b2lkICpvcGFxdWUsIHNpemVfdCBzaXpl KQo+ICt7Cj4gK8KgwqDCoCBBVkhXRnJhbWVzQ29udGV4dMKgwqDCoMKgwqAgKmN0eMKgwqDCoMKg wqDCoMKgwqDCoCA9IChBVkhXRnJhbWVzQ29udGV4dCAqKW9wYXF1ZTsKPiArwqDCoMKgIEQzRDEy VkFGcmFtZXNDb250ZXh0wqDCoCAqc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBjdHgtPmludGVy bmFsLT5wcml2Owo+ICvCoMKgwqAgQVZEM0QxMlZBRnJhbWVzQ29udGV4dCAqaHdjdHjCoMKgwqDC oMKgwqDCoCA9IGN0eC0+aHdjdHg7Cj4gK8KgwqDCoCBBVkQzRDEyVkFEZXZpY2VDb250ZXh0ICpk ZXZpY2VfaHdjdHggPSBjdHgtPmRldmljZV9jdHgtPmh3Y3R4Owo+ICsKPiArwqDCoMKgIGludCBy ZXQ7Cj4gK8KgwqDCoCBJRDNEMTJSZXNvdXJjZSAqdGV4dHVyZTsKPiArwqDCoMKgIEFWRDNEMTJW QVN5bmNDb250ZXh0ICpzeW5jX2N0eDsKPiArCj4gK8KgwqDCoCBEM0QxMl9SRVNPVVJDRV9ERVND IGRlc2MgPSB7Cj4gK8KgwqDCoMKgwqDCoMKgIC5EaW1lbnNpb27CoMKgwqDCoMKgwqDCoCA9IEQz RDEyX1JFU09VUkNFX0RJTUVOU0lPTl9URVhUVVJFMkQsCj4gK8KgwqDCoMKgwqDCoMKgIC5BbGln bm1lbnTCoMKgwqDCoMKgwqDCoCA9IDAsCj4gK8KgwqDCoMKgwqDCoMKgIC5XaWR0aMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgPSBjdHgtPndpZHRoLAo+ICvCoMKgwqDCoMKgwqDCoCAuSGVpZ2h0wqDC oMKgwqDCoMKgwqDCoMKgwqAgPSBjdHgtPmhlaWdodCwKPiArwqDCoMKgwqDCoMKgwqAgLkRlcHRo T3JBcnJheVNpemUgPSAxLAo+ICvCoMKgwqDCoMKgwqDCoCAuTWlwTGV2ZWxzwqDCoMKgwqDCoMKg wqAgPSAxLAo+ICvCoMKgwqDCoMKgwqDCoCAuRm9ybWF0wqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBz LT5mb3JtYXQsCj4gK8KgwqDCoMKgwqDCoMKgIC5TYW1wbGVEZXNjwqDCoMKgwqDCoMKgID0gey5D b3VudCA9IDEsIC5RdWFsaXR5ID0gMCB9LAo+ICvCoMKgwqDCoMKgwqDCoCAuTGF5b3V0wqDCoMKg wqDCoMKgwqDCoMKgwqAgPSBEM0QxMl9URVhUVVJFX0xBWU9VVF9VTktOT1dOLAo+ICvCoMKgwqDC oMKgwqDCoCAuRmxhZ3PCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gRDNEMTJfUkVTT1VSQ0VfRkxB R19OT05FLAo+ICvCoMKgwqAgfTsKPiArCj4gK8KgwqDCoCBpZiAocy0+bmJfc3VyZmFjZXNfdXNl ZCA+PSBjdHgtPmluaXRpYWxfcG9vbF9zaXplKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhj dHgsIEFWX0xPR19FUlJPUiwgIlN0YXRpYyBzdXJmYWNlIHBvb2wgc2l6ZSBleGNlZWRlZC5cbiIp Owo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gTlVMTDsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDC oCByZXQgPSBjcmVhdGVfcmVzb3VyY2UoZGV2aWNlX2h3Y3R4LT5kZXZpY2UsICZkZXNjLAo+IEQz RDEyX1JFU09VUkNFX1NUQVRFX0NPTU1PTiwgJnRleHR1cmUsIDApOwo+ICvCoMKgwqAgaWYgKHJl dCA8IDApCj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBOVUxMOwo+ICsKPiArwqDCoMKgIHJldCA9 IGF2X2QzZDEydmFfc3luY19jb250ZXh0X2FsbG9jKGRldmljZV9od2N0eCwgJnN5bmNfY3R4KTsK PiArwqDCoMKgIGlmIChyZXQgPCAwKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIEQzRDEyX09CSkVDVF9S RUxFQVNFKHRleHR1cmUpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7Cj4g K8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIHdyYXBfdGV4dHVyZV9idWYoY3R4LCB0ZXh0 dXJlLCBzeW5jX2N0eCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9mcmFtZXNfaW5p dChBVkhXRnJhbWVzQ29udGV4dCAqY3R4KQo+ICt7Cj4gK8KgwqDCoCBBVkQzRDEyVkFGcmFtZXND b250ZXh0ICpod2N0eMKgwqDCoMKgwqDCoMKgID0gY3R4LT5od2N0eDsKPiArwqDCoMKgIEFWRDNE MTJWQURldmljZUNvbnRleHQgKmRldmljZV9od2N0eCA9IGN0eC0+ZGV2aWNlX2N0eC0+aHdjdHg7 Cj4gK8KgwqDCoCBEM0QxMlZBRnJhbWVzQ29udGV4dMKgwqAgKnPCoMKgwqDCoMKgwqDCoMKgwqDC oMKgID0gY3R4LT5pbnRlcm5hbC0+cHJpdjsKPiArCj4gK8KgwqDCoCBpbnQgaTsKPiArCj4gK8Kg wqDCoCBpZiAoY3R4LT5pbml0aWFsX3Bvb2xfc2l6ZSA+IEQzRDEyVkFfTUFYX1NVUkZBQ0VTKSB7 Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhjdHgsIEFWX0xPR19XQVJOSU5HLCAiVG9vIGJpZyBp bml0aWFsIHBvb2wgc2l6ZSglZCkgZm9yCj4gc3VyZmFjZXMuICIKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAiVGhlIHNpemUgd2lsbCBiZSBsaW1pdGVkIHRvICVkIGF1dG9tYXRpY2FsbHlcbiIs IGN0eC0KPiA+aW5pdGlhbF9wb29sX3NpemUsIEQzRDEyVkFfTUFYX1NVUkZBQ0VTKTsKPiArwqDC oMKgwqDCoMKgwqAgY3R4LT5pbml0aWFsX3Bvb2xfc2l6ZSA9IEQzRDEyVkFfTUFYX1NVUkZBQ0VT Owo+ICvCoMKgwqAgfQoKSXMgaXQgcG9zc2libGUgdG8gcmVsYXggdGhpcyBjb25kaXRpb24gYSBi aXQgPyBJIGNhbiB0aGUgd2FybmluZyBiZWxvdyB3aGVuCmRlY29kaW5nIEgyNjQvSDI2NSBjbGlw cy4KCltBVkhXRnJhbWVzQ29udGV4dCBAIDAwMDAwMjFCOTQxMjU4MDBdIFRvbyBiaWcgaW5pdGlh bCBwb29sIHNpemUoMzYpIGZvcgpzdXJmYWNlcy4gVGhlIHNpemUgd2lsbCBiZSBsaW1pdGVkIHRv IDMyIGF1dG9tYXRpY2FsbHkKClRoYW5rcwpIYWloYW8KCgo+ICsKPiArwqDCoMKgIGZvciAoaSA9 IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhzdXBwb3J0ZWRfZm9ybWF0cyk7IGkrKykgewo+ICvCoMKg wqDCoMKgwqDCoCBpZiAoY3R4LT5zd19mb3JtYXQgPT0gc3VwcG9ydGVkX2Zvcm1hdHNbaV0ucGl4 X2ZtdCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHMtPmZvcm1hdCA9IHN1cHBvcnRlZF9m b3JtYXRzW2ldLmQzZF9mb3JtYXQ7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4g K8KgwqDCoMKgwqDCoMKgIH0KPiArwqDCoMKgIH0KPiArwqDCoMKgIGlmIChpID09IEZGX0FSUkFZ X0VMRU1TKHN1cHBvcnRlZF9mb3JtYXRzKSkgewo+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coY3R4 LCBBVl9MT0dfRVJST1IsICJVbnN1cHBvcnRlZCBwaXhlbCBmb3JtYXQ6ICVzXG4iLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2dldF9waXhfZm10X25hbWUoY3R4LT5zd19mb3Jt YXQpKTsKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArwqDCoMKg IH0KPiArCj4gK8KgwqDCoCBod2N0eC0+dGV4dHVyZV9pbmZvcyA9IGF2X3JlYWxsb2NfZihOVUxM LCBjdHgtPmluaXRpYWxfcG9vbF9zaXplLAo+IHNpemVvZigqaHdjdHgtPnRleHR1cmVfaW5mb3Mp KTsKPiArwqDCoMKgIGlmICghaHdjdHgtPnRleHR1cmVfaW5mb3MpCj4gK8KgwqDCoMKgwqDCoMKg IHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKwo+ICvCoMKgwqAgbWVtc2V0KGh3Y3R4LT50ZXh0 dXJlX2luZm9zLCAwLCBjdHgtPmluaXRpYWxfcG9vbF9zaXplICogc2l6ZW9mKCpod2N0eC0KPiA+ dGV4dHVyZV9pbmZvcykpOwo+ICvCoMKgwqAgcy0+bmJfc3VyZmFjZXMgPSBjdHgtPmluaXRpYWxf cG9vbF9zaXplOwo+ICsKPiArwqDCoMKgIGN0eC0+aW50ZXJuYWwtPnBvb2xfaW50ZXJuYWwgPQo+ IGF2X2J1ZmZlcl9wb29sX2luaXQyKHNpemVvZihBVkQzRDEyRnJhbWVEZXNjcmlwdG9yKSwKPiAr wqDCoMKgwqDCoMKgwqAgY3R4LCBkM2QxMnZhX3Bvb2xfYWxsb2MsIE5VTEwpOwo+ICsKPiArwqDC oMKgIGlmICghY3R4LT5pbnRlcm5hbC0+cG9vbF9pbnRlcm5hbCkKPiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArCj4gK8KgwqDCoCByZXR1cm4gMDsKPiArfQo+ICsK PiArc3RhdGljIGludCBkM2QxMnZhX2dldF9idWZmZXIoQVZIV0ZyYW1lc0NvbnRleHQgKmN0eCwg QVZGcmFtZSAqZnJhbWUpCj4gK3sKPiArwqDCoMKgIGludCByZXQ7Cj4gK8KgwqDCoCBBVkQzRDEy RnJhbWVEZXNjcmlwdG9yICpkZXNjOwo+ICsKPiArwqDCoMKgIGZyYW1lLT5idWZbMF0gPSBhdl9i dWZmZXJfcG9vbF9nZXQoY3R4LT5wb29sKTsKPiArwqDCoMKgIGlmICghZnJhbWUtPmJ1ZlswXSkK PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArCj4gK8KgwqDCoCBy ZXQgPSBhdl9pbWFnZV9maWxsX2FycmF5cyhmcmFtZS0+ZGF0YSwgZnJhbWUtPmxpbmVzaXplLCBm cmFtZS0+YnVmWzBdLQo+ID5kYXRhLAo+ICvCoMKgwqDCoMKgwqDCoCBjdHgtPnN3X2Zvcm1hdCwg Y3R4LT53aWR0aCwgY3R4LT5oZWlnaHQsCj4gRDNEMTJfVEVYVFVSRV9EQVRBX1BJVENIX0FMSUdO TUVOVCk7Cj4gK8KgwqDCoCBpZiAocmV0IDwgMCkKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJl dDsKPiArCj4gK8KgwqDCoCBkZXNjID0gKEFWRDNEMTJGcmFtZURlc2NyaXB0b3IgKilmcmFtZS0+ YnVmWzBdLT5kYXRhOwo+ICvCoMKgwqAgZnJhbWUtPmRhdGFbMF0gPSAodWludDhfdCAqKWRlc2Mt PnRleHR1cmU7Cj4gK8KgwqDCoCBmcmFtZS0+ZGF0YVsxXSA9ICh1aW50OF90ICopZGVzYy0+aW5k ZXg7Cj4gK8KgwqDCoCBmcmFtZS0+ZGF0YVsyXSA9ICh1aW50OF90ICopZGVzYy0+c3luY19jdHg7 Cj4gKwo+ICvCoMKgwqAgZnJhbWUtPmZvcm1hdMKgID0gQVZfUElYX0ZNVF9EM0QxMjsKPiArwqDC oMKgIGZyYW1lLT53aWR0aMKgwqAgPSBjdHgtPndpZHRoOwo+ICvCoMKgwqAgZnJhbWUtPmhlaWdo dMKgID0gY3R4LT5oZWlnaHQ7Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgZDNkMTJ2YV90cmFuc2Zlcl9nZXRfZm9ybWF0cyhBVkhXRnJhbWVzQ29udGV4dCAq Y3R4LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW51bSBBVkhXRnJhbWVUcmFuc2ZlckRpcmVj dGlvbiBkaXIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbnVtIEFWUGl4ZWxGb3JtYXQgKipm b3JtYXRzKQo+ICt7Cj4gK8KgwqDCoCBEM0QxMlZBRnJhbWVzQ29udGV4dCAqcyA9IGN0eC0+aW50 ZXJuYWwtPnByaXY7Cj4gK8KgwqDCoCBlbnVtIEFWUGl4ZWxGb3JtYXQgKmZtdHM7Cj4gKwo+ICvC oMKgwqAgZm10cyA9IGF2X21hbGxvY19hcnJheSgyLCBzaXplb2YoKmZtdHMpKTsKPiArwqDCoMKg IGlmICghZm10cykKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiAr Cj4gK8KgwqDCoCBmbXRzWzBdID0gY3R4LT5zd19mb3JtYXQ7Cj4gK8KgwqDCoCBmbXRzWzFdID0g QVZfUElYX0ZNVF9OT05FOwo+ICsKPiArwqDCoMKgICpmb3JtYXRzID0gZm10czsKPiArCj4gK8Kg wqDCoCByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkM2QxMnZhX3RyYW5zZmVyX2Rh dGEoQVZIV0ZyYW1lc0NvbnRleHQgKmN0eCwgQVZGcmFtZSAqZHN0LAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0 IEFWRnJhbWUgKnNyYykKPiArewo+ICvCoMKgwqAgQVZEM0QxMlZBRGV2aWNlQ29udGV4dCAqaHdj dHjCoMKgwqDCoMKgwqDCoCA9IGN0eC0+ZGV2aWNlX2N0eC0+aHdjdHg7Cj4gK8KgwqDCoCBBVkQz RDEyVkFGcmFtZXNDb250ZXh0ICpmcmFtZXNfaHdjdHggPSBjdHgtPmh3Y3R4Owo+ICvCoMKgwqAg RDNEMTJWQUZyYW1lc0NvbnRleHTCoMKgICpzwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGN0eC0+ aW50ZXJuYWwtPnByaXY7Cj4gKwo+ICvCoMKgwqAgaW50IHJldDsKPiArwqDCoMKgIGludCBkb3du bG9hZCA9IHNyYy0+Zm9ybWF0ID09IEFWX1BJWF9GTVRfRDNEMTI7Cj4gK8KgwqDCoCBjb25zdCBB VkZyYW1lICpmcmFtZSA9IGRvd25sb2FkID8gc3JjIDogZHN0Owo+ICvCoMKgwqAgY29uc3QgQVZG cmFtZSAqb3RoZXIgPSBkb3dubG9hZCA/IGRzdCA6IHNyYzsKPiArCj4gK8KgwqDCoCBJRDNEMTJS ZXNvdXJjZcKgwqDCoMKgwqDCoCAqdGV4dHVyZcKgID0gKElEM0QxMlJlc291cmNlICopwqDCoMKg wqDCoCBmcmFtZS0+ZGF0YVswXTsKPiArwqDCoMKgIGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBpbmRleMKgwqDCoCA9IChpbnRwdHJfdCnCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBmcmFtZS0+ZGF0YVsxXTsKPiArwqDCoMKgIEFWRDNEMTJWQVN5bmNDb250ZXh0ICpz eW5jX2N0eCA9IChBVkQzRDEyVkFTeW5jQ29udGV4dCAqKWZyYW1lLT5kYXRhWzJdOwo+ICsKPiAr wqDCoMKgIHVpbnQ4X3QgKm1hcHBlZF9kYXRhOwo+ICvCoMKgwqAgdWludDhfdCAqZGF0YVs0XTsK PiArwqDCoMKgIGludCBsaW5lc2l6ZXNbNF07Cj4gKwo+ICvCoMKgwqAgRDNEMTJfVEVYVFVSRV9D T1BZX0xPQ0FUSU9OIHN0YWdpbmdfeV9sb2NhdGlvbjsKPiArwqDCoMKgIEQzRDEyX1RFWFRVUkVf Q09QWV9MT0NBVElPTiBzdGFnaW5nX3V2X2xvY2F0aW9uOwo+ICsKPiArwqDCoMKgIEQzRDEyX1RF WFRVUkVfQ09QWV9MT0NBVElPTiB0ZXh0dXJlX3lfbG9jYXRpb24gPSB7Cj4gK8KgwqDCoMKgwqDC oMKgIC5wUmVzb3VyY2XCoMKgwqDCoMKgwqDCoCA9IHRleHR1cmUsCj4gK8KgwqDCoMKgwqDCoMKg IC5UeXBlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gRDNEMTJfVEVYVFVSRV9DT1BZX1RZUEVf U1VCUkVTT1VSQ0VfSU5ERVgsCj4gK8KgwqDCoMKgwqDCoMKgIC5TdWJyZXNvdXJjZUluZGV4ID0g MCwKPiArwqDCoMKgIH07Cj4gKwo+ICvCoMKgwqAgRDNEMTJfVEVYVFVSRV9DT1BZX0xPQ0FUSU9O IHRleHR1cmVfdXZfbG9jYXRpb24gPSB7Cj4gK8KgwqDCoMKgwqDCoMKgIC5wUmVzb3VyY2XCoMKg wqDCoMKgwqDCoCA9IHRleHR1cmUsCj4gK8KgwqDCoMKgwqDCoMKgIC5UeXBlwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgID0gRDNEMTJfVEVYVFVSRV9DT1BZX1RZUEVfU1VCUkVTT1VSQ0VfSU5ERVgs Cj4gK8KgwqDCoMKgwqDCoMKgIC5TdWJyZXNvdXJjZUluZGV4ID0gMSwKPiArwqDCoMKgIH07Cj4g Kwo+ICvCoMKgwqAgRDNEMTJfUkVTT1VSQ0VfQkFSUklFUiBiYXJyaWVyID0gewo+ICvCoMKgwqDC oMKgwqDCoCAuVHlwZcKgID0gRDNEMTJfUkVTT1VSQ0VfQkFSUklFUl9UWVBFX1RSQU5TSVRJT04s Cj4gK8KgwqDCoMKgwqDCoMKgIC5GbGFncyA9IEQzRDEyX1JFU09VUkNFX0JBUlJJRVJfRkxBR19O T05FLAo+ICvCoMKgwqDCoMKgwqDCoCAuVHJhbnNpdGlvbiA9IHsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAucFJlc291cmNlwqDCoCA9IHRleHR1cmUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgLlN0YXRlQmVmb3JlID0gRDNEMTJfUkVTT1VSQ0VfU1RBVEVfQ09NTU9OLAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIC5TdGF0ZUFmdGVywqAgPSBEM0QxMl9SRVNPVVJDRV9TVEFURV9DT1BZ X1NPVVJDRSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuU3VicmVzb3VyY2UgPSBEM0QxMl9S RVNPVVJDRV9CQVJSSUVSX0FMTF9TVUJSRVNPVVJDRVMsCj4gK8KgwqDCoMKgwqDCoMKgIH0KPiAr wqDCoMKgIH07Cj4gKwo+ICvCoMKgwqAgcy0+Zm9ybWF0ID0gYXZfZDNkMTJ2YV9tYXBfc3dfdG9f aHdfZm9ybWF0KGN0eC0+c3dfZm9ybWF0KTsKPiArCj4gK8KgwqDCoCBpZiAoZnJhbWUtPmh3X2Zy YW1lc19jdHgtPmRhdGEgIT0gKHVpbnQ4X3QgKiljdHggfHwgb3RoZXItPmZvcm1hdCAhPSBjdHgt Cj4gPnN3X2Zvcm1hdCkKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsK PiArCj4gK8KgwqDCoCBpZiAoIXMtPmNvbW1hbmRfcXVldWUpIHsKPiArwqDCoMKgwqDCoMKgwqAg cmV0ID0gZDNkMTJ2YV9jcmVhdGVfaGVscGVyX29iamVjdHMoY3R4KTsKPiArwqDCoMKgwqDCoMKg wqAgaWYgKHJldCA8IDApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPiAr wqDCoMKgIH0KPiArCj4gK8KgwqDCoCBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykKPiArwqDC oMKgwqDCoMKgwqAgbGluZXNpemVzW2ldID0gRkZBTElHTihmcmFtZS0+d2lkdGggKiAocy0+Zm9y bWF0ID09IERYR0lfRk9STUFUX1AwMTAKPiA/IDIgOiAxKSwgRDNEMTJfVEVYVFVSRV9EQVRBX1BJ VENIX0FMSUdOTUVOVCk7Cj4gKwo+ICvCoMKgwqAgc3RhZ2luZ195X2xvY2F0aW9uID0gKEQzRDEy X1RFWFRVUkVfQ09QWV9MT0NBVElPTikgewo+ICvCoMKgwqDCoMKgwqDCoCAucFJlc291cmNlID0g cy0+c3RhZ2luZ19idWZmZXIsCj4gK8KgwqDCoMKgwqDCoMKgIC5UeXBlwqDCoMKgwqDCoCA9IEQz RDEyX1RFWFRVUkVfQ09QWV9UWVBFX1BMQUNFRF9GT09UUFJJTlQsCj4gK8KgwqDCoMKgwqDCoMKg IC5QbGFjZWRGb290cHJpbnQgPSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLk9mZnNldCA9 IDAsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLkZvb3RwcmludCA9IHsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5Gb3JtYXTCoMKgID0gcy0+Zm9ybWF0ID09IERYR0lfRk9S TUFUX1AwMTAgPwo+IERYR0lfRk9STUFUX1IxNl9VTk9STSA6IERYR0lfRk9STUFUX1I4X1VOT1JN LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLldpZHRowqDCoMKgID0gY3R4LT53 aWR0aCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5IZWlnaHTCoMKgID0gY3R4 LT5oZWlnaHQsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuRGVwdGjCoMKgwqAg PSAxLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLlJvd1BpdGNoID0gbGluZXNp emVzWzBdLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0sCj4gK8KgwqDCoMKgwqDCoMKgIH0s Cj4gK8KgwqDCoCB9Owo+ICsKPiArwqDCoMKgIHN0YWdpbmdfdXZfbG9jYXRpb24gPSAoRDNEMTJf VEVYVFVSRV9DT1BZX0xPQ0FUSU9OKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIC5wUmVzb3VyY2UgPSBz LT5zdGFnaW5nX2J1ZmZlciwKPiArwqDCoMKgwqDCoMKgwqAgLlR5cGXCoMKgwqDCoMKgID0gRDNE MTJfVEVYVFVSRV9DT1BZX1RZUEVfUExBQ0VEX0ZPT1RQUklOVCwKPiArwqDCoMKgwqDCoMKgwqAg LlBsYWNlZEZvb3RwcmludCA9IHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuT2Zmc2V0ID0g cy0+bHVtYV9jb21wb25lbnRfc2l6ZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuRm9vdHBy aW50ID0gewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLkZvcm1hdMKgwqAgPSBz LT5mb3JtYXQgPT0gRFhHSV9GT1JNQVRfUDAxMCA/Cj4gRFhHSV9GT1JNQVRfUjE2RzE2X1VOT1JN IDogRFhHSV9GT1JNQVRfUjhHOF9VTk9STSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIC5XaWR0aMKgwqDCoCA9IGN0eC0+d2lkdGjCoCA+PiAxLAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgLkhlaWdodMKgwqAgPSBjdHgtPmhlaWdodCA+PiAxLAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLkRlcHRowqDCoMKgID0gMSwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIC5Sb3dQaXRjaCA9IGxpbmVzaXplc1swXSwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB9LAo+ICvCoMKgwqDCoMKgwqDCoCB9LAo+ICvCoMKgwqAgfTsKPiArCj4g K8KgwqDCoCBEWF9DSEVDSyhJRDNEMTJDb21tYW5kQWxsb2NhdG9yX1Jlc2V0KHMtPmNvbW1hbmRf YWxsb2NhdG9yKSk7Cj4gKwo+ICvCoMKgwqAgRFhfQ0hFQ0soSUQzRDEyR3JhcGhpY3NDb21tYW5k TGlzdF9SZXNldChzLT5jb21tYW5kX2xpc3QsIHMtCj4gPmNvbW1hbmRfYWxsb2NhdG9yLCBOVUxM KSk7Cj4gKwo+ICvCoMKgwqAgaWYgKGRvd25sb2FkKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIElEM0Qx MkdyYXBoaWNzQ29tbWFuZExpc3RfUmVzb3VyY2VCYXJyaWVyKHMtPmNvbW1hbmRfbGlzdCwgMSwK PiAmYmFycmllcik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBJRDNEMTJHcmFwaGljc0NvbW1hbmRM aXN0X0NvcHlUZXh0dXJlUmVnaW9uKHMtPmNvbW1hbmRfbGlzdCwKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAmc3RhZ2luZ195X2xvY2F0aW9uLCAwLCAwLCAwLCAmdGV4dHVyZV95X2xvY2F0aW9u LCBOVUxMKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgIElEM0QxMkdyYXBoaWNzQ29tbWFuZExpc3Rf Q29weVRleHR1cmVSZWdpb24ocy0+Y29tbWFuZF9saXN0LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICZzdGFnaW5nX3V2X2xvY2F0aW9uLCAwLCAwLCAwLCAmdGV4dHVyZV91dl9sb2NhdGlvbiwg TlVMTCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBiYXJyaWVyLlRyYW5zaXRpb24uU3RhdGVCZWZv cmUgPSBiYXJyaWVyLlRyYW5zaXRpb24uU3RhdGVBZnRlcjsKPiArwqDCoMKgwqDCoMKgwqAgYmFy cmllci5UcmFuc2l0aW9uLlN0YXRlQWZ0ZXIgPSBEM0QxMl9SRVNPVVJDRV9TVEFURV9DT01NT047 Cj4gK8KgwqDCoMKgwqDCoMKgIElEM0QxMkdyYXBoaWNzQ29tbWFuZExpc3RfUmVzb3VyY2VCYXJy aWVyKHMtPmNvbW1hbmRfbGlzdCwgMSwKPiAmYmFycmllcik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oCBEWF9DSEVDSyhJRDNEMTJHcmFwaGljc0NvbW1hbmRMaXN0X0Nsb3NlKHMtPmNvbW1hbmRfbGlz dCkpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKCFod2N0eC0+c3luYykKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBEWF9DSEVDSyhJRDNEMTJDb21tYW5kUXVldWVfV2FpdChzLT5jb21tYW5k X3F1ZXVlLCBzeW5jX2N0eC0KPiA+ZmVuY2UsIHN5bmNfY3R4LT5mZW5jZV92YWx1ZSkpOwo+ICsK PiArwqDCoMKgwqDCoMKgwqAgSUQzRDEyQ29tbWFuZFF1ZXVlX0V4ZWN1dGVDb21tYW5kTGlzdHMo cy0+Y29tbWFuZF9xdWV1ZSwgMSwKPiAoSUQzRDEyQ29tbWFuZExpc3QgKiopJnMtPmNvbW1hbmRf bGlzdCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSBhdl9kM2QxMnZhX3dhaXRfcXVldWVf aWRsZShzLT5zeW5jX2N0eCwgcy0+Y29tbWFuZF9xdWV1ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgIGlm IChyZXQpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPiArCj4gK8KgwqDC oMKgwqDCoMKgIERYX0NIRUNLKElEM0QxMlJlc291cmNlX01hcChzLT5zdGFnaW5nX2J1ZmZlciwg MCwgTlVMTCwKPiAmbWFwcGVkX2RhdGEpKTsKPiArwqDCoMKgwqDCoMKgwqAgYXZfaW1hZ2VfZmls bF9wb2ludGVycyhkYXRhLCBjdHgtPnN3X2Zvcm1hdCwgY3R4LT5oZWlnaHQsCj4gbWFwcGVkX2Rh dGEsIGxpbmVzaXplcyk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBhdl9pbWFnZV9jb3B5KGRzdC0+ ZGF0YSwgZHN0LT5saW5lc2l6ZSwgZGF0YSwgbGluZXNpemVzLAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGN0eC0+c3dfZm9ybWF0LCBjdHgtPndpZHRoLCBjdHgtPmhlaWdodCk7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoCBJRDNEMTJSZXNvdXJjZV9Vbm1hcChzLT5zdGFnaW5nX2J1ZmZlciwgMCwg TlVMTCk7Cj4gK8KgwqDCoCB9IGVsc2Ugewo+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coY3R4LCBB Vl9MT0dfRVJST1IsICJUcmFuc2ZlciBkYXRhIHRvIEFWX1BJWF9GTVRfRDNEMTIgaXMgbm90Cj4g c3VwcG9ydGVkIHlldCFcbiIpOwo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5W QUwpOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIHJldHVybiAwOwo+ICsKPiArZmFpbDoKPiAr wqDCoMKgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZDNk MTJ2YV9kZXZpY2VfaW5pdChBVkhXRGV2aWNlQ29udGV4dCAqaHdkZXYpCj4gK3sKPiArwqDCoMKg IEFWRDNEMTJWQURldmljZUNvbnRleHQgKmN0eCA9IGh3ZGV2LT5od2N0eDsKPiArCj4gK8KgwqDC oCBpZiAoIWN0eC0+dmlkZW9fZGV2aWNlKQo+ICvCoMKgwqDCoMKgwqDCoCBEWF9DSEVDSyhJRDNE MTJEZXZpY2VfUXVlcnlJbnRlcmZhY2UoY3R4LT5kZXZpY2UsCj4gJklJRF9JRDNEMTJWaWRlb0Rl dmljZSwgKHZvaWQgKiopJmN0eC0+dmlkZW9fZGV2aWNlKSk7Cj4gKwo+ICvCoMKgwqAgcmV0dXJu IDA7Cj4gKwo+ICtmYWlsOgo+ICvCoMKgwqAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgZDNkMTJ2YV9kZXZpY2VfdW5pbml0KEFWSFdEZXZpY2VDb250ZXh0 ICpod2RldikKPiArewo+ICvCoMKgwqAgQVZEM0QxMlZBRGV2aWNlQ29udGV4dCAqZGV2aWNlX2h3 Y3R4ID0gaHdkZXYtPmh3Y3R4Owo+ICsKPiArwqDCoMKgIEQzRDEyX09CSkVDVF9SRUxFQVNFKGRl dmljZV9od2N0eC0+dmlkZW9fZGV2aWNlKTsKPiArwqDCoMKgIEQzRDEyX09CSkVDVF9SRUxFQVNF KGRldmljZV9od2N0eC0+ZGV2aWNlKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBkM2QxMnZhX2Rl dmljZV9jcmVhdGUoQVZIV0RldmljZUNvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqZGV2aWNlLAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIEFWRGljdGlvbmFyeSAqb3B0cywgaW50IGZsYWdzKQo+ICt7Cj4gK8KgwqDCoCBB VkQzRDEyVkFEZXZpY2VDb250ZXh0ICpkZXZpY2VfaHdjdHggPSBjdHgtPmh3Y3R4Owo+ICsKPiAr wqDCoMKgIEhSRVNVTFQgaHI7Cj4gK8KgwqDCoCBVSU5UIGNyZWF0ZV9mbGFncyA9IDA7Cj4gK8Kg wqDCoCBJRFhHSUFkYXB0ZXIgKnBBZGFwdGVyID0gTlVMTDsKPiArCj4gK8KgwqDCoCBpbnQgcmV0 Owo+ICvCoMKgwqAgaW50IGlzX2RlYnVnwqDCoMKgwqDCoMKgID0gISFhdl9kaWN0X2dldChvcHRz LCAiZGVidWciLCBOVUxMLCAwKTsKPiArwqDCoMKgIGRldmljZV9od2N0eC0+c3luYyA9ICEhYXZf ZGljdF9nZXQob3B0cywgInN5bmMiLMKgIE5VTEwsIDApOwo+ICsKPiArwqDCoMKgIGlmICgocmV0 ID0gZmZfdGhyZWFkX29uY2UoJmZ1bmN0aW9uc19sb2FkZWQsIGxvYWRfZnVuY3Rpb25zKSkgIT0g MCkKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1JfVU5LTk9XTjsKPiArCj4gK8KgwqDC oCBpZiAoaXNfZGVidWcpIHsKPiArwqDCoMKgwqDCoMKgwqAgSUQzRDEyRGVidWcgKnBEZWJ1ZzsK PiArwqDCoMKgwqDCoMKgwqAgaWYgKGQzZDEydmFfZ2V0X2RlYnVnX2ludGVyZmFjZSAmJgo+IFNV Q0NFRURFRChkM2QxMnZhX2dldF9kZWJ1Z19pbnRlcmZhY2UoJklJRF9JRDNEMTJEZWJ1ZywgJnBE ZWJ1ZykpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3JlYXRlX2ZsYWdzIHw9IERYR0lf Q1JFQVRFX0ZBQ1RPUllfREVCVUc7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSUQzRDEyRGVi dWdfRW5hYmxlRGVidWdMYXllcihwRGVidWcpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEQz RDEyX09CSkVDVF9SRUxFQVNFKHBEZWJ1Zyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZf bG9nKGN0eCwgQVZfTE9HX0lORk8sICJEM0QxMiBkZWJ1ZyBsYXllciBpcyBlbmFibGVkIVxuIik7 Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBpZiAoIWRldmlj ZV9od2N0eC0+ZGV2aWNlKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIElEWEdJRmFjdG9yeTIgKnBEWEdJ RmFjdG9yeSA9IE5VTEw7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIWQzZDEydmFfY3JlYXRl X2RldmljZSB8fCAhZDNkMTJ2YV9jcmVhdGVfZHhnaV9mYWN0b3J5Mikgewo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBsb2FkIEQz RDEyIGxpYnJhcnkgb3IgaXRzCj4gZnVuY3Rpb25zXG4iKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gQVZFUlJPUl9VTktOT1dOOwo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoCBociA9IGQzZDEydmFfY3JlYXRlX2R4Z2lfZmFjdG9yeTIoY3JlYXRlX2Zs YWdzLCAmSUlEX0lEWEdJRmFjdG9yeTIsCj4gKHZvaWQgKiopJnBEWEdJRmFjdG9yeSk7Cj4gK8Kg wqDCoMKgwqDCoMKgIGlmIChTVUNDRUVERUQoaHIpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaW50IGFkYXB0ZXIgPSBkZXZpY2UgPyBhdG9pKGRldmljZSkgOiAwOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGlmIChGQUlMRUQoSURYR0lGYWN0b3J5Ml9FbnVtQWRhcHRlcnMocERYR0lG YWN0b3J5LCBhZGFwdGVyLAo+ICZwQWRhcHRlcikpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcEFkYXB0ZXIgPSBOVUxMOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIElEWEdJ RmFjdG9yeTJfUmVsZWFzZShwRFhHSUZhY3RvcnkpOwo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoCBpZiAocEFkYXB0ZXIpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBEWEdJX0FEQVBURVJfREVTQyBkZXNjOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhyID0g SURYR0lBZGFwdGVyMl9HZXREZXNjKHBBZGFwdGVyLCAmZGVzYyk7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgaWYgKCFGQUlMRUQoaHIpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBhdl9sb2coY3R4LCBBVl9MT0dfSU5GTywgIlVzaW5nIGRldmljZSAlMDR4OiUwNHggKCVs cykuXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBk ZXNjLlZlbmRvcklkLCBkZXNjLkRldmljZUlkLCBkZXNjLkRlc2NyaXB0aW9uKTsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB9Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiArCj4gK8KgwqDCoMKgwqDC oMKgIGhyID0gZDNkMTJ2YV9jcmVhdGVfZGV2aWNlKChJVW5rbm93biAqKXBBZGFwdGVyLAo+IEQz RF9GRUFUVVJFX0xFVkVMXzEyXzAsICZJSURfSUQzRDEyRGV2aWNlLCAmZGV2aWNlX2h3Y3R4LT5k ZXZpY2UpOwo+ICvCoMKgwqDCoMKgwqDCoCBEM0QxMl9PQkpFQ1RfUkVMRUFTRShwQWRhcHRlcik7 Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIChGQUlMRUQoaHIpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGNyZWF0ZSBEaXJlY3RY M0QgMTIgZGV2aWNlCj4gKCVseClcbiIsIChsb25nKWhyKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gQVZFUlJPUl9VTktOT1dOOwo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gK8KgwqDC oCB9Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK2NvbnN0IEhXQ29udGV4dFR5 cGUgZmZfaHdjb250ZXh0X3R5cGVfZDNkMTJ2YSA9IHsKPiArwqDCoMKgIC50eXBlwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gQVZfSFdERVZJQ0VfVFlQRV9EM0QxMlZBLAo+ ICvCoMKgwqAgLm5hbWXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSAiRDNE MTJWQSIsCj4gKwo+ICvCoMKgwqAgLmRldmljZV9od2N0eF9zaXplwqDCoMKgwqDCoCA9IHNpemVv ZihBVkQzRDEyVkFEZXZpY2VDb250ZXh0KSwKPiArwqDCoMKgIC5mcmFtZXNfaHdjdHhfc2l6ZcKg wqDCoMKgwqAgPSBzaXplb2YoQVZEM0QxMlZBRnJhbWVzQ29udGV4dCksCj4gK8KgwqDCoCAuZnJh bWVzX3ByaXZfc2l6ZcKgwqDCoMKgwqDCoCA9IHNpemVvZihEM0QxMlZBRnJhbWVzQ29udGV4dCks Cj4gKwo+ICvCoMKgwqAgLmRldmljZV9jcmVhdGXCoMKgwqDCoMKgwqDCoMKgwqAgPSBkM2QxMnZh X2RldmljZV9jcmVhdGUsCj4gK8KgwqDCoCAuZGV2aWNlX2luaXTCoMKgwqDCoMKgwqDCoMKgwqDC oMKgID0gZDNkMTJ2YV9kZXZpY2VfaW5pdCwKPiArwqDCoMKgIC5kZXZpY2VfdW5pbml0wqDCoMKg wqDCoMKgwqDCoMKgID0gZDNkMTJ2YV9kZXZpY2VfdW5pbml0LAo+ICvCoMKgwqAgLmZyYW1lc19n ZXRfY29uc3RyYWludHMgPSBkM2QxMnZhX2ZyYW1lc19nZXRfY29uc3RyYWludHMsCj4gK8KgwqDC oCAuZnJhbWVzX2luaXTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gZDNkMTJ2YV9mcmFtZXNfaW5p dCwKPiArwqDCoMKgIC5mcmFtZXNfdW5pbml0wqDCoMKgwqDCoMKgwqDCoMKgID0gZDNkMTJ2YV9m cmFtZXNfdW5pbml0LAo+ICvCoMKgwqAgLmZyYW1lc19nZXRfYnVmZmVywqDCoMKgwqDCoCA9IGQz ZDEydmFfZ2V0X2J1ZmZlciwKPiArwqDCoMKgIC50cmFuc2Zlcl9nZXRfZm9ybWF0c8KgwqAgPSBk M2QxMnZhX3RyYW5zZmVyX2dldF9mb3JtYXRzLAo+ICvCoMKgwqAgLnRyYW5zZmVyX2RhdGFfdG/C oMKgwqDCoMKgwqAgPSBkM2QxMnZhX3RyYW5zZmVyX2RhdGEsCj4gK8KgwqDCoCAudHJhbnNmZXJf ZGF0YV9mcm9twqDCoMKgwqAgPSBkM2QxMnZhX3RyYW5zZmVyX2RhdGEsCj4gKwo+ICvCoMKgwqAg LnBpeF9mbXRzwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IChjb25zdCBlbnVtIEFWUGl4 ZWxGb3JtYXRbXSl7IEFWX1BJWF9GTVRfRDNEMTIsCj4gQVZfUElYX0ZNVF9OT05FIH0sCj4gK307 Cj4gZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC9od2NvbnRleHRfZDNkMTJ2YS5oIGIvbGliYXZ1dGls L2h3Y29udGV4dF9kM2QxMnZhLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAwMDAuLjA2MGY2OTJkMTEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliYXZ1dGlsL2h3Y29u dGV4dF9kM2QxMnZhLmgKPiBAQCAtMCwwICsxLDE2NyBAQAo+ICsvKgo+ICsgKiBEaXJlY3QzRCAx MiBIVyBhY2NlbGVyYXRpb24uCj4gKyAqCj4gKyAqIGNvcHlyaWdodCAoYykgMjAyMi0yMDIzIFd1 IEppYW5odWEgPHRvcXN4d0BvdXRsb29rLmNvbT4KPiArICoKPiArICogVGhpcyBmaWxlIGlzIHBh cnQgb2YgRkZtcGVnLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gKyAqIHZlcnNpb24g Mi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u Lgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLsKgIFNlZSB0aGUgR05VCj4gKyAqIExlc3NlciBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMKPiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUg RnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEKPiBVU0EKPiArICovCj4gKwo+ICsj aWZuZGVmIEFWVVRJTF9IV0NPTlRFWFRfRDNEMTJWQV9ICj4gKyNkZWZpbmUgQVZVVElMX0hXQ09O VEVYVF9EM0QxMlZBX0gKPiArCj4gKy8qKgo+ICsgKiBAZmlsZQo+ICsgKiBBbiBBUEktc3BlY2lm aWMgaGVhZGVyIGZvciBBVl9IV0RFVklDRV9UWVBFX0QzRDEyVkEuCj4gKyAqCj4gKyAqLwo+ICsj aW5jbHVkZSA8c3RkaW50Lmg+Cj4gKyNpbmNsdWRlIDxpbml0Z3VpZC5oPgo+ICsjaW5jbHVkZSA8 ZDNkMTIuaD4KPiArI2luY2x1ZGUgPGQzZDEydmlkZW8uaD4KPiArCj4gKy8qKgo+ICsgKiBAYnJp ZWYgVGhpcyBzdHJ1Y3QgaXMgYWxsb2NhdGVkIGFzIEFWSFdEZXZpY2VDb250ZXh0Lmh3Y3R4Cj4g KyAqCj4gKyAqLwo+ICt0eXBlZGVmIHN0cnVjdCBBVkQzRDEyVkFEZXZpY2VDb250ZXh0IHsKPiAr wqDCoMKgIC8qKgo+ICvCoMKgwqDCoCAqIERldmljZSB1c2VkIGZvciBvYmplY3RzIGNyZWF0aW9u IGFuZCBhY2Nlc3MuIFRoaXMgY2FuIGFsc28gYmUKPiArwqDCoMKgwqAgKiB1c2VkIHRvIHNldCB0 aGUgbGliYXZjb2RlYyBkZWNvZGluZyBkZXZpY2UuCj4gK8KgwqDCoMKgICoKPiArwqDCoMKgwqAg KiBDYW4gYmUgc2V0IGJ5IHRoZSB1c2VyLiBUaGlzIGlzIHRoZSBvbmx5IG1hbmRhdG9yeSBmaWVs ZCAtIHRoZSBvdGhlcgo+ICvCoMKgwqDCoCAqIGRldmljZSBjb250ZXh0IGZpZWxkcyBhcmUgc2V0 IGZyb20gdGhpcyBhbmQgYXJlIGF2YWlsYWJsZSBmb3IKPiBjb252ZW5pZW5jZS4KPiArwqDCoMKg wqAgKgo+ICvCoMKgwqDCoCAqIERlYWxsb2NhdGluZyB0aGUgQVZIV0RldmljZUNvbnRleHQgd2ls bCBhbHdheXMgcmVsZWFzZSB0aGlzIGludGVyZmFjZSwKPiArwqDCoMKgwqAgKiBhbmQgaXQgZG9l cyBub3QgbWF0dGVyIHdoZXRoZXIgaXQgd2FzIHVzZXItYWxsb2NhdGVkLgo+ICvCoMKgwqDCoCAq Lwo+ICvCoMKgwqAgSUQzRDEyRGV2aWNlICpkZXZpY2U7Cj4gKwo+ICvCoMKgwqAgLyoqCj4gK8Kg wqDCoMKgICogSWYgdW5zZXQsIHRoaXMgd2lsbCBiZSBzZXQgZnJvbSB0aGUgZGV2aWNlIGZpZWxk IG9uIGluaXQuCj4gK8KgwqDCoMKgICoKPiArwqDCoMKgwqAgKiBEZWFsbG9jYXRpbmcgdGhlIEFW SFdEZXZpY2VDb250ZXh0IHdpbGwgYWx3YXlzIHJlbGVhc2UgdGhpcyBpbnRlcmZhY2UsCj4gK8Kg wqDCoMKgICogYW5kIGl0IGRvZXMgbm90IG1hdHRlciB3aGV0aGVyIGl0IHdhcyB1c2VyLWFsbG9j YXRlZC4KPiArwqDCoMKgwqAgKi8KPiArwqDCoMKgIElEM0QxMlZpZGVvRGV2aWNlICp2aWRlb19k ZXZpY2U7Cj4gKwo+ICvCoMKgwqAgLyoqCj4gK8KgwqDCoMKgICogU3BlY2lmZWQgYnkgc3luYz0x IHdoZW4gaW5pdCBkM2QxMnZhCj4gK8KgwqDCoMKgICoKPiArwqDCoMKgwqAgKiBFeGVjdXRlIGNv bW1hbmRzIGFzIHN5bmMgbW9kZQo+ICvCoMKgwqDCoCAqLwo+ICvCoMKgwqAgaW50IHN5bmM7Cj4g K30gQVZEM0QxMlZBRGV2aWNlQ29udGV4dDsKPiArCj4gKy8qKgo+ICsgKiBAYnJpZWYgVGhpcyBz dHJ1Y3QgaXMgdXNlZCB0byBzeW5jIGQzZDEyIGV4ZWN1dGlvbgo+ICsgKgo+ICsgKi8KPiArdHlw ZWRlZiBzdHJ1Y3QgQVZEM0QxMlZBU3luY0NvbnRleHQgewo+ICvCoMKgwqAgLyoqCj4gK8KgwqDC oMKgICogRDNEMTIgZmVuY2Ugb2JqZWN0Cj4gK8KgwqDCoMKgICovCj4gK8KgwqDCoCBJRDNEMTJG ZW5jZSAqZmVuY2U7Cj4gKwo+ICvCoMKgwqAgLyoqCj4gK8KgwqDCoMKgICogQSBoYW5kbGUgdG8g dGhlIGV2ZW50IG9iamVjdAo+ICvCoMKgwqDCoCAqLwo+ICvCoMKgwqAgSEFORExFIGV2ZW50Owo+ ICsKPiArwqDCoMKgIC8qKgo+ICvCoMKgwqDCoCAqIFRoZSBmZW5jZSB2YWx1ZSB1c2VkIGZvciBz eW5jCj4gK8KgwqDCoMKgICovCj4gK8KgwqDCoCB1aW50NjRfdCBmZW5jZV92YWx1ZTsKPiArfSBB VkQzRDEyVkFTeW5jQ29udGV4dDsKPiArCj4gKy8qKgo+ICsgKiBAYnJpZWYgRDNEMTIgZnJhbWUg ZGVzY3JpcHRvciBmb3IgcG9vbCBhbGxvY2F0aW9uLgo+ICsgKgo+ICsgKi8KPiArdHlwZWRlZiBz dHJ1Y3QgQVZEM0QxMkZyYW1lRGVzY3JpcHRvciB7Cj4gK8KgwqDCoCAvKioKPiArwqDCoMKgwqAg KiBUaGUgdGV4dHVyZSBpbiB3aGljaCB0aGUgZnJhbWUgaXMgbG9jYXRlZC4gVGhlIHJlZmVyZW5j ZSBjb3VudCBpcwo+ICvCoMKgwqDCoCAqIG1hbmFnZWQgYnkgdGhlIEFWQnVmZmVyUmVmLCBhbmQg ZGVzdHJveWluZyB0aGUgcmVmZXJlbmNlIHdpbGwgcmVsZWFzZQo+ICvCoMKgwqDCoCAqIHRoZSBp bnRlcmZhY2UuCj4gK8KgwqDCoMKgICoKPiArwqDCoMKgwqAgKiBOb3JtYWxseSBzdG9yZWQgaW4g QVZGcmFtZS5kYXRhWzBdLgo+ICvCoMKgwqDCoCAqLwo+ICvCoMKgwqAgSUQzRDEyUmVzb3VyY2Ug KnRleHR1cmU7Cj4gKwo+ICvCoMKgwqAgLyoqCj4gK8KgwqDCoMKgICogVGhlIGluZGV4IGludG8g dGhlIGFycmF5IHRleHR1cmUgZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIGZyYW1lCj4gK8KgwqDC oMKgICoKPiArwqDCoMKgwqAgKiBOb3JtYWxseSBzdG9yZWQgaW4gQVZGcmFtZS5kYXRhWzFdIChj YXN0IGZyb20gaW50cHRyX3QpLgo+ICvCoMKgwqDCoCAqLwo+ICvCoMKgwqAgaW50cHRyX3QgaW5k ZXg7Cj4gKwo+ICvCoMKgwqAgLyoqCj4gK8KgwqDCoMKgICogVGhlIHN5bmMgY29udGV4dCBmb3Ig dGhlIHRleHR1cmUKPiArwqDCoMKgwqAgKgo+ICvCoMKgwqDCoCAqIFVzZSBhdl9kM2QxMnZhX3dh aXRfaWRsZShzeW5jX2N0eCkgdG8gZW5zdXJlIHRoZSBkZWNvZGluZyBvciBlbmNvZGluZwo+IGhh dmUgYmVlbiBmaW5pc2VkCj4gK8KgwqDCoMKgICogQHNlZToKPiBodHRwczovL2xlYXJuLm1pY3Jv c29mdC5jb20vZW4tdXMvd2luZG93cy93aW4zMi9tZWRmb3VuZC9kaXJlY3QzZC0xMi12aWRlby1v dmVydmlldyNkaXJlY3R4LTEyLWZlbmNlcwo+ICvCoMKgwqDCoCAqCj4gK8KgwqDCoMKgICogTm9y bWFsbHkgc3RvcmVkIGluIEFWRnJhbWUuZGF0YVsyXS4KPiArwqDCoMKgwqAgKi8KPiArwqDCoMKg IEFWRDNEMTJWQVN5bmNDb250ZXh0ICpzeW5jX2N0eDsKPiArfSBBVkQzRDEyRnJhbWVEZXNjcmlw dG9yOwo+ICsKPiArLyoqCj4gKyAqIEBicmllZiBUaGlzIHN0cnVjdCBpcyBhbGxvY2F0ZWQgYXMg QVZIV0ZyYW1lc0NvbnRleHQuaHdjdHgKPiArICoKPiArICovCj4gK3R5cGVkZWYgc3RydWN0IEFW RDNEMTJWQUZyYW1lc0NvbnRleHQgewo+ICvCoMKgwqAgLyoqCj4gK8KgwqDCoMKgICogVGhlIHNh bWUgaW1wbGVtZW50YXRpb24gYXMgZDNkMTF2YQo+ICvCoMKgwqDCoCAqIFRoaXMgZmllbGQgaXMg bm90IGFibGUgdG8gYmUgdXNlci1hbGxvY2F0ZWQgYXQgdGhlIHByZXNlbnQuCj4gK8KgwqDCoMKg ICovCj4gK8KgwqDCoCBBVkQzRDEyRnJhbWVEZXNjcmlwdG9yICp0ZXh0dXJlX2luZm9zOwo+ICt9 IEFWRDNEMTJWQUZyYW1lc0NvbnRleHQ7Cj4gKwo+ICsvKioKPiArICogQGJyaWVmIE1hcCBzdyBw aXhlbCBmb3JtYXQgdG8gZDNkMTIgZm9ybWF0Cj4gKyAqCj4gKyAqIEByZXR1cm4gZDNkMTIgc3Bl Y2lmaWVkIGZvcm1hdAo+ICsgKi8KPiArRFhHSV9GT1JNQVQgYXZfZDNkMTJ2YV9tYXBfc3dfdG9f aHdfZm9ybWF0KGVudW0gQVZQaXhlbEZvcm1hdCBwaXhfZm10KTsKPiArCj4gKy8qKgo+ICsgKiBA YnJpZWYgQWxsb2NhdGUgYW4gQVZEM0QxMlZBU3luY0NvbnRleHQKPiArICoKPiArICogQHJldHVy biBFcnJvciBjb2RlIChyZXQgPCAwIGlmIGZhaWxlZCkKPiArICovCj4gK2ludCBhdl9kM2QxMnZh X3N5bmNfY29udGV4dF9hbGxvYyhBVkQzRDEyVkFEZXZpY2VDb250ZXh0ICpjdHgsCj4gQVZEM0Qx MlZBU3luY0NvbnRleHQgKipzeW5jX2N0eCk7Cj4gKwo+ICsvKioKPiArICogQGJyaWVmIEZyZWUg YW4gQVZEM0QxMlZBU3luY0NvbnRleHQKPiArICovCj4gK3ZvaWQgYXZfZDNkMTJ2YV9zeW5jX2Nv bnRleHRfZnJlZShBVkQzRDEyVkFTeW5jQ29udGV4dCAqKnN5bmNfY3R4KTsKPiArCj4gKy8qKgo+ ICsgKiBAYnJpZWYgV2FpdCBmb3IgdGhlIHN5bmMgY29udGV4dCB0byB0aGUgaWRsZSBzdGF0ZQo+ ICsgKgo+ICsgKiBAcmV0dXJuIEVycm9yIGNvZGUgKHJldCA8IDAgaWYgZmFpbGVkKQo+ICsgKi8K PiAraW50IGF2X2QzZDEydmFfd2FpdF9pZGxlKEFWRDNEMTJWQVN5bmNDb250ZXh0ICpzeW5jX2N0 eCk7Cj4gKwo+ICsvKioKPiArICogQGJyaWVmIFdhaXQgZm9yIGEgc3BlY2lmaWVkIGNvbW1hbmQg cXVldWUgdG8gdGhlIGlkbGUgc3RhdGUKPiArICoKPiArICogQHJldHVybiBFcnJvciBjb2RlIChy ZXQgPCAwIGlmIGZhaWxlZCkKPiArICovCj4gK2ludCBhdl9kM2QxMnZhX3dhaXRfcXVldWVfaWRs ZShBVkQzRDEyVkFTeW5jQ29udGV4dCAqc3luY19jdHgsCj4gSUQzRDEyQ29tbWFuZFF1ZXVlICpj b21tYW5kX3F1ZXVlKTsKPiArCj4gKyNlbmRpZiAvKiBBVlVUSUxfSFdDT05URVhUX0QzRDEyVkFf SCAqLwo+IGRpZmYgLS1naXQgYS9saWJhdnV0aWwvaHdjb250ZXh0X2QzZDEydmFfaW50ZXJuYWwu aAo+IGIvbGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhX2ludGVybmFsLmgKPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAuLmUxMThhNTc5YWEKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvbGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhX2ludGVybmFsLmgKPiBAQCAtMCww ICsxLDYzIEBACj4gKy8qCj4gKyAqIERpcmVjdDNEIDEyIEhXIGFjY2VsZXJhdGlvbi4KPiArICoK PiArICogY29weXJpZ2h0IChjKSAyMDIyLTIwMjMgV3UgSmlhbmh1YSA8dG9xc3h3QG91dGxvb2su Y29tPgo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAq IEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK PiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIKPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv Zgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuwqAgU2VlIHRoZSBHTlUKPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFsb25nIHdp dGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5k YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg MDIxMTAtMTMwMQo+IFVTQQo+ICsgKi8KPiArCj4gKyNpZm5kZWYgQVZVVElMX0hXQ09OVEVYVF9E M0QxMlZBX0lOVEVSTkFMX0gKPiArI2RlZmluZSBBVlVUSUxfSFdDT05URVhUX0QzRDEyVkFfSU5U RVJOQUxfSAo+ICsKPiArLyoqCj4gKyAqIEBkZWYgQ09CSk1BQ1JPUwo+ICsgKgo+ICsgKiBAYnJp ZWYgRW5hYmxlIEMgc3R5bGUgaW50ZXJmYWNlIGZvciBEM0QxMgo+ICsgKi8KPiArI2lmbmRlZiBD T0JKTUFDUk9TCj4gKyNkZWZpbmUgQ09CSk1BQ1JPUwo+ICsjZW5kaWYKPiArCj4gKy8qKgo+ICsg KiBAZGVmIERYX0NIRUNLCj4gKyAqCj4gKyAqIEBicmllZiBBIGNoZWNrIG1hY3JvIHVzZWQgYnkg RDNEMTIgZnVuY3Rpb25zIGhpZ2hseSBmcmVxdWVudGx5Cj4gKyAqLwo+ICsjZGVmaW5lIERYX0NI RUNLKGhyKSBpZiAoRkFJTEVEKGhyKSkgeyBcCj4gK8KgwqDCoCBnb3RvIGZhaWw7IFwKPiArfQo+ ICsKPiArLyoqCj4gKyAqIEBkZWYgRDNEMTJfT0JKRUNUX1JFTEVBU0UKPiArICoKPiArICogQGJy aWVmIEEgcmVsZWFzZSBtYWNybyB1c2VkIGJ5IEQzRDEyIG9iamVjdHMgaGlnaGx5IGZyZXF1ZW50 bHkKPiArICovCj4gKyNkZWZpbmUgRDNEMTJfT0JKRUNUX1JFTEVBU0UocEludGVyZmFjZSkgaWYg KHBJbnRlcmZhY2UpIHsgXAo+ICvCoMKgwqAgSVVua25vd25fUmVsZWFzZSgoSVVua25vd24gKilw SW50ZXJmYWNlKTsgXAo+ICvCoMKgwqAgcEludGVyZmFjZSA9IE5VTEw7IFwKPiArfQo+ICsKPiAr LyoqCj4gKyAqIEBkZWYgRDNEMTJWQV9NQVhfU1VSRkFDRVMKPiArICoKPiArICogQGJyaWVmIE1h eGltdW0gbnVtYmVyIHN1cmZhY2VzCj4gKyAqIFRoZSByZWZlcmVuY2UgcHJvY2Vzc2luZyBvdmVy IGRlY29kaW5nIHdpbGwgYmUgY29ycnVwdGVkIG9uIHNvbWUgZHJpdmVycwo+ICsgKiBpZiB0aGUg bWF4IG51bWJlciBvZiByZWZlcmVuY2UgZnJhbWVzIGV4Y2VlZHMgdGhpcy4KPiArICovCj4gKyNk ZWZpbmUgRDNEMTJWQV9NQVhfU1VSRkFDRVMgMzIKPiArCj4gKyNlbmRpZiAvKiBBVlVUSUxfSFdD T05URVhUX0QzRDEyVkFfSU5URVJOQUxfSCAqLwo+IFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls ZQo+IGRpZmYgLS1naXQgYS9saWJhdnV0aWwvaHdjb250ZXh0X2ludGVybmFsLmggYi9saWJhdnV0 aWwvaHdjb250ZXh0X2ludGVybmFsLmgKPiBpbmRleCBlNjI2NjQ5NGFjLi40ZGY1MTZlZTZhIDEw MDY0NAo+IC0tLSBhL2xpYmF2dXRpbC9od2NvbnRleHRfaW50ZXJuYWwuaAo+ICsrKyBiL2xpYmF2 dXRpbC9od2NvbnRleHRfaW50ZXJuYWwuaAo+IEBAIC0xNjUsNiArMTY1LDcgQEAgaW50IGZmX2h3 ZnJhbWVfbWFwX3JlcGxhY2UoQVZGcmFtZSAqZHN0LCBjb25zdCBBVkZyYW1lCj4gKnNyYyk7Cj4g wqAKPiDCoGV4dGVybiBjb25zdCBIV0NvbnRleHRUeXBlIGZmX2h3Y29udGV4dF90eXBlX2N1ZGE7 Cj4gwqBleHRlcm4gY29uc3QgSFdDb250ZXh0VHlwZSBmZl9od2NvbnRleHRfdHlwZV9kM2QxMXZh Owo+ICtleHRlcm4gY29uc3QgSFdDb250ZXh0VHlwZSBmZl9od2NvbnRleHRfdHlwZV9kM2QxMnZh Owo+IMKgZXh0ZXJuIGNvbnN0IEhXQ29udGV4dFR5cGUgZmZfaHdjb250ZXh0X3R5cGVfZHJtOwo+ IMKgZXh0ZXJuIGNvbnN0IEhXQ29udGV4dFR5cGUgZmZfaHdjb250ZXh0X3R5cGVfZHh2YTI7Cj4g wqBleHRlcm4gY29uc3QgSFdDb250ZXh0VHlwZSBmZl9od2NvbnRleHRfdHlwZV9vcGVuY2w7Cj4g ZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC9waXhkZXNjLmMgYi9saWJhdnV0aWwvcGl4ZGVzYy5jCj4g aW5kZXggZTFlMGRkMmE5ZS4uMDlmY2E1ZWYxOSAxMDA2NDQKPiAtLS0gYS9saWJhdnV0aWwvcGl4 ZGVzYy5jCj4gKysrIGIvbGliYXZ1dGlsL3BpeGRlc2MuYwo+IEBAIC0yMjgzLDYgKzIyODMsMTAg QEAgc3RhdGljIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvcgo+IGF2X3BpeF9mbXRfZGVzY3JpcHRv cnNbQVZfUElYX0ZNVF9OQl0gPSB7Cj4gwqDCoMKgwqDCoMKgwqDCoCAubmFtZSA9ICJkM2QxMSIs Cj4gwqDCoMKgwqDCoMKgwqDCoCAuZmxhZ3MgPSBBVl9QSVhfRk1UX0ZMQUdfSFdBQ0NFTCwKPiDC oMKgwqDCoCB9LAo+ICvCoMKgwqAgW0FWX1BJWF9GTVRfRDNEMTJdID0gewo+ICvCoMKgwqDCoMKg wqDCoCAubmFtZSA9ICJkM2QxMiIsCj4gK8KgwqDCoMKgwqDCoMKgIC5mbGFncyA9IEFWX1BJWF9G TVRfRkxBR19IV0FDQ0VMLAo+ICvCoMKgwqAgfSwKPiDCoMKgwqDCoCBbQVZfUElYX0ZNVF9HQlJQ RjMyQkVdID0gewo+IMKgwqDCoMKgwqDCoMKgwqAgLm5hbWUgPSAiZ2JycGYzMmJlIiwKPiDCoMKg wqDCoMKgwqDCoMKgIC5uYl9jb21wb25lbnRzID0gMywKPiBkaWZmIC0tZ2l0IGEvbGliYXZ1dGls L3BpeGZtdC5oIGIvbGliYXZ1dGlsL3BpeGZtdC5oCj4gaW5kZXggNjNlMDdiYTY0Zi4uMWYwYWIy YTIzYyAxMDA2NDQKPiAtLS0gYS9saWJhdnV0aWwvcGl4Zm10LmgKPiArKysgYi9saWJhdnV0aWwv cGl4Zm10LmgKPiBAQCAtNDI2LDYgKzQyNiwxNSBAQCBlbnVtIEFWUGl4ZWxGb3JtYXQgewo+IMKg wqDCoMKgIEFWX1BJWF9GTVRfUDQxMkJFLMKgwqDCoMKgwqAgLy8vPCBpbnRlcmxlYXZlZCBjaHJv bWEgWVVWIDQ6NDo0LCAzNmJwcCwgZGF0YSBpbgo+IHRoZSBoaWdoIGJpdHMsIGJpZy1lbmRpYW4K PiDCoMKgwqDCoCBBVl9QSVhfRk1UX1A0MTJMRSzCoMKgwqDCoMKgIC8vLzwgaW50ZXJsZWF2ZWQg Y2hyb21hIFlVViA0OjQ6NCwgMzZicHAsIGRhdGEgaW4KPiB0aGUgaGlnaCBiaXRzLCBsaXR0bGUt ZW5kaWFuCj4gwqAKPiArwqDCoMKgIC8qKgo+ICvCoMKgwqDCoCAqIEhhcmR3YXJlIHN1cmZhY2Vz IGZvciBEaXJlY3QzRCAxMi4KPiArwqDCoMKgwqAgKgo+ICvCoMKgwqDCoCAqIGRhdGFbMF0gY29u dGFpbnMgYSBJRDNEMTJSZXNvdXJjZSBwb2ludGVyLgo+ICvCoMKgwqDCoCAqIGRhdGFbMV0gY29u dGFpbnMgdGhlIHJlc291cmNlIGFycmF5IGluZGV4IG9mIHRoZSBmcmFtZSBhcyBpbnRwdHJfdC4K PiArwqDCoMKgwqAgKiBkYXRhWzJdIGNvbnRhaW5zIHRoZSBzeW5jIGNvbnRleHQgZm9yIGN1cnJl bnQgcmVzb3VyY2UKPiArwqDCoMKgwqAgKi8KPiArwqDCoMKgIEFWX1BJWF9GTVRfRDNEMTIsCj4g Kwo+IMKgwqDCoMKgIEFWX1BJWF9GTVRfTkLCoMKgwqDCoMKgwqDCoMKgIC8vLzwgbnVtYmVyIG9m IHBpeGVsIGZvcm1hdHMsIERPIE5PVCBVU0UgVEhJUyBpZgo+IHlvdSB3YW50IHRvIGxpbmsgd2l0 aCBzaGFyZWQgbGliYXYqIGJlY2F1c2UgdGhlIG51bWJlciBvZiBmb3JtYXRzIG1pZ2h0IGRpZmZl cgo+IGJldHdlZW4gdmVyc2lvbnMKPiDCoH07Cj4gwqAKPiBkaWZmIC0tZ2l0IGEvbGliYXZ1dGls L3Rlc3RzL2h3ZGV2aWNlLmMgYi9saWJhdnV0aWwvdGVzdHMvaHdkZXZpY2UuYwo+IGluZGV4IGM1 NzU4NjYxM2EuLjlkNzk2NGY5ZWUgMTAwNjQ0Cj4gLS0tIGEvbGliYXZ1dGlsL3Rlc3RzL2h3ZGV2 aWNlLmMKPiArKysgYi9saWJhdnV0aWwvdGVzdHMvaHdkZXZpY2UuYwo+IEBAIC0xMzcsNiArMTM3 LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB7Cj4gwqDCoMKgwqDCoMKgIHsgIjAiLCAiMSIsICIy IiB9IH0sCj4gwqDCoMKgwqAgeyBBVl9IV0RFVklDRV9UWVBFX0QzRDExVkEsCj4gwqDCoMKgwqDC oMKgIHsgIjAiLCAiMSIsICIyIiB9IH0sCj4gK8KgwqDCoCB7IEFWX0hXREVWSUNFX1RZUEVfRDNE MTJWQSwKPiArwqDCoMKgwqDCoCB7ICIwIiwgIjEiLCAiMiIgfSB9LAo+IMKgwqDCoMKgIHsgQVZf SFdERVZJQ0VfVFlQRV9PUEVOQ0wsCj4gwqDCoMKgwqDCoMKgIHsgIjAuMCIsICIwLjEiLCAiMS4w IiwgIjEuMSIgfSB9LAo+IMKgwqDCoMKgIHsgQVZfSFdERVZJQ0VfVFlQRV9WQUFQSSwKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBt YWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21h aWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBh Ym92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1Ympl Y3QgInVuc3Vic2NyaWJlIi4K