Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vTCca-00EhUq-0l for pgsql-hackers@arkaria.postgresql.org; Wed, 10 Dec 2025 05:20:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vTCcY-009l25-2k for pgsql-hackers@arkaria.postgresql.org; Wed, 10 Dec 2025 05:20:15 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vTCcY-009l1x-14 for pgsql-hackers@lists.postgresql.org; Wed, 10 Dec 2025 05:20:14 +0000 Received: from mail-japanwestazolkn19011025.outbound.protection.outlook.com ([52.103.66.25] helo=OS0P286CU010.outbound.protection.outlook.com) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vTCcV-004CPG-1C for pgsql-hackers@lists.postgresql.org; Wed, 10 Dec 2025 05:20:14 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SdnOjTCn157AYLeSq7ldx6QdScAXMhCGkarXeIssrwZ1LdgsDLTUUruHRZgLBW0ZjN24cYll+nZUCaz+Hd23cy+XxclUF3u33aMlfloLvOj55y9DBK+yy/d1cM9ACnV8amoflg3UGAAe9hA748gitoSiRt3EZyGKXXG63VZ3cIPIsAgtJRbNWnu2kGbdAMIwnAey+aPFWLiCCRwU0CEVcn4zg1lRcCA8xYohbiHYhU50HzWutnhBOgx+gv9m/m938XMhKeGPAB0G13+Ki+L1LxEVBu+5RFDohT4Dx7GZg5ShepsQ9JocpybUQ081tbbwwyMYydz1JR95r2w0pvA9kQ== 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=uhFFjCZD6zYsheewiC0hGAOVeXc6VnO4LonuhNfa8HE=; b=fs4w0k2mUfR+vlfvmIYKdVFik0zBSSg3wSrBv9QWN6N3ipXbKi9l/5A8hN6qkwjosFJS5hPhFqu7ICOJ9NKYUFFrV6meRBfAoxueCYxAXJHqg6b0B4EQHNKNW3peXRm3/fvzesO5JyRjlJu3CrX3z1Il/02EFjknyPf05jyPC8UlgzOPdjE+NnaW0dwNesLEvbBNyaVf0M2guhQdxsTcA/WyIyWt6jJ35VdLzQ79pxo9tyWE853dxUOIbD9MS8QhPxIgL1YM5k1dsRLEWlmdFqO0CB6KUzxkSAhAu3rsxxxDN5KXxjaRRut5VhRh7p+DPrZlhWzf/YMJfWpKJDKzkw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uhFFjCZD6zYsheewiC0hGAOVeXc6VnO4LonuhNfa8HE=; b=D/0Us5U0GmTVzpOXJ1hyr1Vq0xtLQv2u83gNQOtRLf577OsOYFYAesnHr+B60U4JMUcebFDP7yZpDOvajQoSp6Scg7j+GhXxssqMgUPIlvdGm27a7nUav5jjt7oJFckylzhpdSB6uc+o5vDvoC9y0zBeBVh0IFJRpWFq6lYyL04oHpbz8LhDEKcTY16P0Rv5AHOb2dPCQsOhZ/MhKWoCc/ogPVDBnTaZb8L3ca1nO2ADr5FsD0TTVxPxgZ8agkyBMHFeHYCxX2D5DSHtF5eeUEH1H9rIJZl65s5Y1TJHDqZSIzPbdjMlX9AwghjXH9l/shY/cd3mkMbfug0Ld9ZPtQ== Received: from TYYPR01MB14116.jpnprd01.prod.outlook.com (2603:1096:405:212::9) by TYYPR01MB7710.jpnprd01.prod.outlook.com (2603:1096:400:11a::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.12; Wed, 10 Dec 2025 05:20:04 +0000 Received: from TYYPR01MB14116.jpnprd01.prod.outlook.com ([fe80::31dd:4ff2:eea8:c663]) by TYYPR01MB14116.jpnprd01.prod.outlook.com ([fe80::31dd:4ff2:eea8:c663%7]) with mapi id 15.20.9412.005; Wed, 10 Dec 2025 05:20:04 +0000 From: Chengpeng Yan To: Tomas Vondra CC: "pgsql-hackers@lists.postgresql.org" , John Naylor Subject: Re: Add a greedy join search algorithm to handle large join problems Thread-Topic: Add a greedy join search algorithm to handle large join problems Thread-Index: AQHcYz6EDs5PHcthrkCEncSOS1ScQLUOLg+AgAAjtACAC2mFAIAAReyAgABhgoA= Date: Wed, 10 Dec 2025 05:20:01 +0000 Message-ID: <938E2286-9B0D-4F8D-A916-8E0E35D55034@Outlook.com> References: <3FF63E99-AB4F-41A9-BC78-AAB28823FBD0@Outlook.com> <6db6d2ec-7529-4add-9a95-178fc318311d@vondra.me> <313ACE5A-CBF1-43B3-9181-10D3E8ADF424@Outlook.com> <5abd6054-413c-4f48-9172-d8b31062b266@vondra.me> In-Reply-To: Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-traffictypediagnostic: TYYPR01MB14116:EE_|TYYPR01MB7710:EE_ x-ms-office365-filtering-correlation-id: 9010c41b-6b28-4359-c736-08de37abc4a5 x-ms-exchange-slblob-mailprops: EgT5Wr3QDKyO+K31TYcDJnS3Nb0QmDRHCr+51D0pOg4c0vPTMMM62UPnfJ5muw6dYIOuSgVJKLJZLTHFMhACIFjPeFB8UWl8L+KxRcUw4tkFoAZdvosEkrysDP9YUeE2YkcG8iDTVy8Ot6RCc/TSDm63UqxJ7D03BkkacIdo4gwpRm2z6BCR9X5vvwNy7etQJR1dkrLzMHGst5tKvZ0benZK4RGmbvOnSB3BAJz0k1HOLED6mwjSzs3UW75C6jY0lGoE6sa1BboeCACduuoxArMZprbfKJ0gJeOBsp8+wo3zX+/YMRu3djfW7/bQ9+fEE9fR3ELi8XX3y9jWaDSapX9CQRtjr5dWO31nVTDTNbWfSH5s4q6YUjECw5Ch+NQl7qf8SNNtwKOSPF0SvMPtN72tNGk9CJr+4dQCFLG4ptQ9PaExqpfPl4v3WzYqEUQkgp4DRzPLunKr/SjpCmet8G1ze7OnAEA8u52ccom+s/KeZRVvB7jH8cD+6zDXdNqaMQ+uMhyBs5dEAGd2quoeXIQRFzwCmUD8JRCVNRPPrpA2tHV4Rh7KT8HMmhk2juxAaaoB8zFUttVizPVImcT0B7v33/V4IEp+AP0xfG/0pdOd9/NReo7nf420x/XvZLGSyyEoaKJYbufUBMsgs/3MPhjxm6yI3Jq68AkkiJpdJaPPGyPXC2EOjXTkQTL+7vyK5DOH9dSfdbEH659aB0bxLkQgkb5YboPvBCnKoTEN1WE= x-microsoft-antispam: BCL:0;ARA:14566002|19110799012|8062599012|8060799015|461199028|6092099016|15080799012|31061999003|52005399003|102099032|40105399003|440099028|3412199025; x-microsoft-antispam-message-info: =?utf-8?B?OFRxZy85T3V1VHh1WXVBZTFFcWxpTUY2NWw0Y293dE94U0xZTFYwb0xVU2hH?= =?utf-8?B?ek5mTGdPaCtPUTdFOVREbTlSamVKSGtDYzdlMDVROEQ0bmR1c1ZlUmZWSUpq?= =?utf-8?B?d3c2WlNxL2xXeHUvV0Q1RlRrTWtUbGt2RlQzWlMyclJEMEVhODJKL0RtZmtw?= =?utf-8?B?cHFJY0M5aDhwOUpQMytzU20xT2owa2x0RDVSdFBRVkFmUGIwZk1CRG83blVl?= =?utf-8?B?cUhhRzd3UURhb2MvYjFIWGlCTTJYcTU3N3RoY1F0T3VVOUpqaUZCVUFQZGZ3?= =?utf-8?B?SlBHYmQxdXR6QVNwSmRyWHdPYy9mSEwvbEpFSUk0QnJMcENZYUZUVVNXbHBW?= =?utf-8?B?QStVL3hMTFBNWmc3TEVPbVRuSm5ZSXFkckIyeVFNV1FWVHZDY3djTXQ5UjFh?= =?utf-8?B?cGU1YVUzVkJUREM2N2N2anFoeHgxQ1pyOHJXdVRNbGFiVGg1cDRZUVlrVGFL?= =?utf-8?B?Y2s5bTdPT0hpZnhxK3BOSGltVjl0dHJaYmVUZVlUZW9aRWRqUDdmODdGdmJP?= =?utf-8?B?MTlzOGx4ZVoreXVyNXdiYzR2OWlLUG12cXNFTDdrWWNabXh6bU9KNm14d3hM?= =?utf-8?B?bWdydTF6TGQzL0hMcG1YaTVRYjNraWZkSmZvMDg1Ny9DM1I5N0l2K2Z0dDRS?= =?utf-8?B?U3psczJicUliMldlNnVYZk5mYmRYU2ZTdEtXSEQ5cHRCREFCVWQ5ajdMK1VH?= =?utf-8?B?S29xcjFvaVZKZ1JITmZjR2lOWDRNS29lRGJMdmwvUytiR1pXWGlkakNaY0M4?= =?utf-8?B?RHVZWnFTTzRycGZBcWlSUmhTS1NiTlVGOU5HbjdmUzRTRTBJMWlMS2dOZWJX?= =?utf-8?B?US9ibjZaTmhtR3hnb1FaL0RkeXlrdXN1VkdoYTZqL3FLVU02MUhMTTkzT0p6?= =?utf-8?B?USsrNFdvS212cHI5cldiVFpFUUZwamttaTZWMEUrUlQ3enFoQ2JxNmZ4RVk1?= =?utf-8?B?OEQzdFRsaXBTZUlkbnVHVkxyRFQ2MVF2WFdNN0xzS2xrWGl5dW9yRTVWd05D?= =?utf-8?B?Nm1hVjlrVzRaOHJKcm40Mkx2ZWtmRWNGNkh5b2ExZFpsaGtocjk2c0lidlZ1?= =?utf-8?B?QW9ncVMvSE9EMmZKaWFKeEZROHBMcDZEakpudzVOUlFpYzk3dlNPSGpvNVFH?= =?utf-8?B?bEhPSlJVSzlZNFVKenZycFp4TU5BdThSTnVxUGUrdDJ0bVZKT1hqSkhZZENN?= =?utf-8?B?OGh3bDloU2lmeTlEdndmUTVKK1VQNmhFYnJja1BLRnN1MTUybk9wT1RjRFQ5?= =?utf-8?B?N1QzWFBtRmlOQnY1V24vdDZ2RzNkbURnaEpHTDJSN0J2ZjdrWDQrVG5jZnQ2?= =?utf-8?B?V2pZSExHKytTSVp6Z1dxSUdFVVpmcWh1WjdJN2pmUVV1eEFGVGwxUVEwK3Z5?= =?utf-8?B?WndIeWxPbzZuSEdkcHZpZW5aeStZTW9rU0JHbWFKaS9TYVVndmpFWVIwQnZJ?= =?utf-8?B?bHM5bVptODd0T2tVZVBpbWlRd2tvU2RQRzV6TjR2OUJXNTc4K1Q0Q2pmMDJX?= =?utf-8?B?UDM3SnFVcSt2cjlCRnhYYUMxK0JIcjR1MHNoOUtkbDJkWWJ5dHVReUpmTFRY?= =?utf-8?B?clYrUzFBeE84QlBwZkt0dzk3VjBIU2syQmJiNEUvTURtYnk1VUVxZi91UExP?= =?utf-8?B?VWJrbnFrQVp5cWdVYXBzQXFpVmxKU2c9PQ==?= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?anZPdVlGK2lPQkpiU2NQalRXSWJFNVRRY1IzK295ak5ibWtnblpFNDJ1TERs?= =?utf-8?B?T0RQNXl2aWh6RUI2LzlYdUszSnBGZHdkUWZQT3hMSDNIeWptbTZBcUlSYTBl?= =?utf-8?B?ZVZ3M1Z5M0s1RlllRC9yTG5pMDJKNnc1eEdQS0g0SHdKa2QxZ2phWmYyT3pz?= =?utf-8?B?bzY5dXF4ZWJGRGtieUs0OEdHU2R4b090UVJqOEhZOURmVDhDalBkZVRUSkk3?= =?utf-8?B?M1hoZCtBd3NTeGdqdGc1bVJ3UmUrSVlydUphcFIwaUcxWUtuQjRhalRqNXNQ?= =?utf-8?B?MTE2QmYzNWd0QUtxeVFibFk1R2NneFphcFUvWXpZWDNrWVdpZDBlbTlWMUUy?= =?utf-8?B?aWRwWmFkZlhTa1pVM2V4bStwdTNBdDdta2cyN3FYVXdEa1NQMERxVTJIbFdL?= =?utf-8?B?ckJ0bUJHc0JKK2lVTDh5SFR5Q0czSHc1WmkycUUrZzRKWDBTYnBORlFRU0Rs?= =?utf-8?B?OVU0V3lEQ0xTVXN5L0NlWmE0cFBYT2E3aHhSdGhROVN3T05WdlVqVzRLNzJC?= =?utf-8?B?VEpNeHI0UzJDR241d0QwTHRYUnVsUHZEdVNqRHNWM3Z0Z3lYdjZvcS85UjZz?= =?utf-8?B?Q1dxRDlFQmU3bHJRQTh5cEdDeWZjVVVnTWJoRnJXSDgrbFRCb3RkRUJvR2lu?= =?utf-8?B?TWt3b3lNVUMvc09FbzQ5KzV6bFRSUmEwUzByUzVPOVBrblNBL0wvLy80amd2?= =?utf-8?B?MmlvSisvS2tGS0IxZmp6bll2Wk91N1J5TXZJdjM1STRDenk4d2ZIOFBGalhY?= =?utf-8?B?VGxKTmkwakFmUUUzNXRXUEFZRFdHTmlaeGVjZXZDQ0hwVFQyRFJhQzhmWVB2?= =?utf-8?B?Q3IxTkRFOWFQeTJ2MGRWQ0I3blY5d3hDVEtYeTcxR0xFaVV1WUpJdUVVRUpL?= =?utf-8?B?MHhaK2FKSnNUSnZ3aEkzWWkyMW9jeFhZR3dXU2gvMDZmRW5WV3BtNyt6UW9u?= =?utf-8?B?SlVDdER2eXZXT2hSeUJTQytvcXVPeGRiREFhNS9haDZqaDZ3SzFPV2RBUlZx?= =?utf-8?B?c2lFME4wMzNjelJXb05NRVB3M2p2dVdOSEI0YTBWUCtERzZSTGdjZ2pZaEdV?= =?utf-8?B?MTJSNERmckdoSTNWWm1XQm1YSng4UkxheTgrY3F3YVNVYzhjeVVoVW9iUDVr?= =?utf-8?B?cGIyN0lMWTRRVDVnZmhQZUcramU5clk1dGQ5cWtEblR1cDFaRmpSaUhnc0gz?= =?utf-8?B?RGhyNjZ0ZHNVQXhnMVdDL045M0V4aSt5RzJDVHU3a1FNRkN3RlI3ejVDN2s5?= =?utf-8?B?SEdaVllxaTdCdVJJeTdYQTFqVGdwTkxySnFvMGhVNGpMVi9DZGRMV0tFcWd3?= =?utf-8?B?OTM2OE0walhIQTZYRHJYZUpKMXJ1MUc0RDQvVTVmdmNueDhRQnJxOHdudnVh?= =?utf-8?B?RjErNjgvQkNocjV6VEN5cngxVDA2TFErM2YwN2dWNlVLdEdMQmt5aWlyNFZW?= =?utf-8?B?T3dYR3ZYK2FrbWk1Qm1rOVZWbU0yemZ1MEwrTTk2MUxQOTZrVlZrNUZhcGpz?= =?utf-8?B?NS9IaFMvTHdBN3Vqd1dUMGIwUnFCSHRWSUw2RVF1QzVMSE1GZzJsdXRyQzBM?= =?utf-8?B?WUV6YUNaaEFYV3VBdWd0Nis3eUJDY1JRUnhFVCsraEdhT3ZFL21XUkd3Y2FZ?= =?utf-8?B?NDhWRDVOQlFpZmgybTBWS3NiaXFRR1E1V1Q0NGFEL2RMRlpIM3RqVEduWWdU?= =?utf-8?Q?NdYeHgYlFvvtvRb/vQiw?= Content-Type: multipart/mixed; boundary="_004_938E22869B0D4F8DA9168E0E35D55034Outlookcom_" MIME-Version: 1.0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYYPR01MB14116.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: 9010c41b-6b28-4359-c736-08de37abc4a5 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Dec 2025 05:20:01.1162 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYYPR01MB7710 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_004_938E22869B0D4F8DA9168E0E35D55034Outlookcom_ Content-Type: multipart/alternative; boundary="_000_938E22869B0D4F8DA9168E0E35D55034Outlookcom_" --_000_938E22869B0D4F8DA9168E0E35D55034Outlookcom_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGksDQoNCj4gT24gRGVjIDEwLCAyMDI1LCBhdCAwNzozMCwgVG9tYXMgVm9uZHJhIDx0b21hc0B2 b25kcmEubWU+IHdyb3RlOg0KPg0KPiBJIGxvb2tlZCBhdCBhIGNvdXBsZSBtb3JlIGZhaWxpbmcg cXVlcmllcywgYW5kIHJlbW92aW5nIHRoZSBhZ2dyZWdhdGVzDQo+IGZpeGVzIHRoZW0gdG9vLiBN YXliZSB0aGVyZSBhcmUgb3RoZXIgaXNzdWVzL2NyYXNoZXMsIG9mIGNvdXJzZS4NCg0KVGhhbmtz IGEgbG90IGZvciBwb2ludGluZyB0aGlzIG91dC4gSSBhbHNvIG5vdGljZWQgdGhlIHNhbWUgaXNz dWUgd2hlbg0KdGVzdGluZyBUUEMtSCBRNS4gVGhlIHJvb3QgY2F1c2Ugd2FzIHRoYXQgaW4gdGhl IGdvbyBhbGdvcml0aG0gSSBmb3Jnb3QNCnRvIGhhbmRsZSB0aGUgY2FzZSBvZiBlYWdlciBhZ2dy ZWdhdGlvbi4gVGhpcyBoYXMgYmVlbiBmaXhlZCBpbiB0aGUgdjINCnBhdGNoIChhZnRlciB0aGUg Zml4LCB0aGUgdjIgdmVyc2lvbiB3b3JrcyBjb3JyZWN0bHkgZm9yIGFsbCBUUEMtSA0KcXVlcmll cykuIEkgd2lsbCBjb250aW51ZSB0ZXN0aW5nIGl0IG9uIFRQQy1EUyBhcyB3ZWxsLg0KDQpTb3Jy eSB0aGF0IEkgZGlkbuKAmXQgcHVzaCB0aGUgcmVsYXRlZCBjaGFuZ2VzIGVhcmxpZXIuIEkgd2Fz IHJ1bm5pbmcgbW9yZQ0KZXhwZXJpbWVudHMgb24gdGhlIGdyZWVkeSBzdHJhdGVneSwgYW5kIEkg c3RpbGwgbmVlZGVkIHNvbWUgdGltZSB0bw0Kb3JnYW5pemUgYW5kIGFuYWx5emUgdGhlIHJlc3Vs dHMuIER1cmluZyB0aGlzIHByb2Nlc3MsIEkgZm91bmQgdGhhdCB0aGUNCmN1cnJlbnQgZ3JlZWR5 IHN0cmF0ZWd5IG1heSBsZWFkIHRvIHN1Ym9wdGltYWwgcGxhbiBxdWFsaXR5IGluIHNvbWUNCmNh c2VzLiBCZWNhdXNlIG9mIHRoYXQsIEkgcGxhbiB0byBmaXJzdCBldmFsdWF0ZSBhIGZldyBiYXNp YyBncmVlZHkNCmhldXJpc3RpY3Mgb24gVFBDLUggdG8gdW5kZXJzdGFuZCB0aGVpciBiZWhhdmlv ciBhbmQgbGltaXRhdGlvbnMuIElmDQp0aGVyZSBhcmUgbWVhbmluZ2Z1bCByZXN1bHRzIG9yIGNv bmNsdXNpb25zLCBJIHdpbGwgc2hhcmUgdGhlbSBmb3INCmRpc2N1c3Npb24uDQoNCkJhc2VkIG9u IHNvbWUgcHJlbGltaW5hcnkgdGVzdGluZywgSeKAmW0gbGVhbmluZyB0b3dhcmQga2VlcGluZyB0 aGUgZ3JlZWR5DQpzdHJhdGVneSBzaW1wbGUgYW5kIGV4cGxhaW5hYmxlLCBhbmQgZm9jdXNpbmcg b24gdGhlIGZvbGxvd2luZw0KaW5kaWNhdG9ycyB0b2dldGhlciB3aXRoIHRoZSBwbGFubmVy4oCZ cyBjb3N0IGVzdGltYXRlczoNCiogam9pbiBjYXJkaW5hbGl0eSAobnVtYmVyIG9mIG91dHB1dCBy b3dzKQ0KKiBzZWxlY3Rpdml0eSAoam9pbl9zaXplIC8gKGxlZnRfc2l6ZSAqIHJpZ2h0X3NpemUp KQ0KKiBlc3RpbWF0ZWQgcmVzdWx0IHNpemUgaW4gYnl0ZXMoam9pbnJlbC0+cmVsdGFyZ2V0LT53 aWR0aCAqIGpvaW5yZWwtPnJvd3MpDQoqIGNoZWFwZXN0IHRvdGFsIHBhdGggY29zdCAoY2hlYXBl c3RfdG90YWxfcGF0aC0+dG90YWxfY29zdCkNCg0KQXQgdGhlIG1vbWVudCwgSeKAmW0gaW5jbGlu ZWQgdG8gcHJpb3JpdGl6ZSBqb2luIGNhcmRpbmFsaXR5IHdpdGggaW5wdXQNCnNpemUgYXMgYSBz ZWNvbmRhcnkgZmFjdG9yLCBidXQgSeKAmWQgbGlrZSB0byB2YWxpZGF0ZSB0aGlzIHN0ZXAgYnkg c3RlcDoNCmZpcnN0IGJ5IHRlc3RpbmcgdGhlc2Ugc2ltcGxlIGhldXJpc3RpY3Mgb24gVFBDLUgg KGFzIGEgcmVsYXRpdmVseQ0Kc2ltcGxlIHdvcmtsb2FkKSBhbmQgc3VtbWFyaXppbmcgc29tZSBp bml0aWFsIGNvbmNsdXNpb25zIHRoZXJlLiBBZnRlcg0KdGhhdCwgSSBwbGFuIHRvIHJ1biBtb3Jl IGNvbXByZWhlbnNpdmUgZXhwZXJpbWVudHMgb24gbW9yZSBjb21wbGV4DQpiZW5jaG1hcmtzIHN1 Y2ggYXMgSk9CIGFuZCBUUEMtRFMgYW5kIHJlcG9ydCB0aGUgcmVzdWx0cy4NCg0KRG8geW91IGhh dmUgYW55IHRob3VnaHRzIG9yIHN1Z2dlc3Rpb25zIG9uIHRoaXMgZGlyZWN0aW9uPw0KDQpUaGFu a3MgYWdhaW4gZm9yIHlvdXIgZmVlZGJhY2sgYW5kIGhlbHAuDQoNCi0tDQpCZXN0IHJlZ2FyZHMs DQpDaGVuZ3BlbmcgWWFuDQo= --_000_938E22869B0D4F8DA9168E0E35D55034Outlookcom_ Content-Type: text/html; charset="utf-8" Content-ID: <724017B2A2E207469299F1DA842FC7E1@jpnprd01.prod.outlook.com> Content-Transfer-Encoding: base64 PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0i dGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjwvaGVhZD4NCjxib2R5Pg0KPGRpdiBjbGFzcz0i Qm9keUZyYWdtZW50Ij48Zm9udCBzaXplPSIyIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExcHQ7 Ij4NCjxkaXYgY2xhc3M9IlBsYWluVGV4dCI+SGksPGJyPg0KPGJyPg0KJmd0OyBPbiBEZWMgMTAs IDIwMjUsIGF0IDA3OjMwLCBUb21hcyBWb25kcmEgJmx0O3RvbWFzQHZvbmRyYS5tZSZndDsgd3Jv dGU6PGJyPg0KJmd0OyA8YnI+DQomZ3Q7IEkgbG9va2VkIGF0IGEgY291cGxlIG1vcmUgZmFpbGlu ZyBxdWVyaWVzLCBhbmQgcmVtb3ZpbmcgdGhlIGFnZ3JlZ2F0ZXM8YnI+DQomZ3Q7IGZpeGVzIHRo ZW0gdG9vLiBNYXliZSB0aGVyZSBhcmUgb3RoZXIgaXNzdWVzL2NyYXNoZXMsIG9mIGNvdXJzZS48 YnI+DQo8YnI+DQpUaGFua3MgYSBsb3QgZm9yIHBvaW50aW5nIHRoaXMgb3V0LiBJIGFsc28gbm90 aWNlZCB0aGUgc2FtZSBpc3N1ZSB3aGVuPGJyPg0KdGVzdGluZyBUUEMtSCBRNS4gVGhlIHJvb3Qg Y2F1c2Ugd2FzIHRoYXQgaW4gdGhlIGdvbyBhbGdvcml0aG0gSSBmb3Jnb3Q8YnI+DQp0byBoYW5k bGUgdGhlIGNhc2Ugb2YgZWFnZXIgYWdncmVnYXRpb24uIFRoaXMgaGFzIGJlZW4gZml4ZWQgaW4g dGhlIHYyPGJyPg0KcGF0Y2ggKGFmdGVyIHRoZSBmaXgsIHRoZSB2MiB2ZXJzaW9uIHdvcmtzIGNv cnJlY3RseSBmb3IgYWxsIFRQQy1IPGJyPg0KcXVlcmllcykuIEkgd2lsbCBjb250aW51ZSB0ZXN0 aW5nIGl0IG9uIFRQQy1EUyBhcyB3ZWxsLjxicj4NCjxicj4NClNvcnJ5IHRoYXQgSSBkaWRu4oCZ dCBwdXNoIHRoZSByZWxhdGVkIGNoYW5nZXMgZWFybGllci4gSSB3YXMgcnVubmluZyBtb3JlPGJy Pg0KZXhwZXJpbWVudHMgb24gdGhlIGdyZWVkeSBzdHJhdGVneSwgYW5kIEkgc3RpbGwgbmVlZGVk IHNvbWUgdGltZSB0bzxicj4NCm9yZ2FuaXplIGFuZCBhbmFseXplIHRoZSByZXN1bHRzLiBEdXJp bmcgdGhpcyBwcm9jZXNzLCBJIGZvdW5kIHRoYXQgdGhlPGJyPg0KY3VycmVudCBncmVlZHkgc3Ry YXRlZ3kgbWF5IGxlYWQgdG8gc3Vib3B0aW1hbCBwbGFuIHF1YWxpdHkgaW4gc29tZTxicj4NCmNh c2VzLiBCZWNhdXNlIG9mIHRoYXQsIEkgcGxhbiB0byBmaXJzdCBldmFsdWF0ZSBhIGZldyBiYXNp YyBncmVlZHk8YnI+DQpoZXVyaXN0aWNzIG9uIFRQQy1IIHRvIHVuZGVyc3RhbmQgdGhlaXIgYmVo YXZpb3IgYW5kIGxpbWl0YXRpb25zLiBJZjxicj4NCnRoZXJlIGFyZSBtZWFuaW5nZnVsIHJlc3Vs dHMgb3IgY29uY2x1c2lvbnMsIEkgd2lsbCBzaGFyZSB0aGVtIGZvcjxicj4NCmRpc2N1c3Npb24u PGJyPg0KPGJyPg0KQmFzZWQgb24gc29tZSBwcmVsaW1pbmFyeSB0ZXN0aW5nLCBJ4oCZbSBsZWFu aW5nIHRvd2FyZCBrZWVwaW5nIHRoZSBncmVlZHk8YnI+DQpzdHJhdGVneSBzaW1wbGUgYW5kIGV4 cGxhaW5hYmxlLCBhbmQgZm9jdXNpbmcgb24gdGhlIGZvbGxvd2luZzxicj4NCmluZGljYXRvcnMg dG9nZXRoZXIgd2l0aCB0aGUgcGxhbm5lcuKAmXMgY29zdCBlc3RpbWF0ZXM6IDxicj4NCiogam9p biBjYXJkaW5hbGl0eSAobnVtYmVyIG9mIG91dHB1dCByb3dzKSA8YnI+DQoqIHNlbGVjdGl2aXR5 IChqb2luX3NpemUgLyAobGVmdF9zaXplICogcmlnaHRfc2l6ZSkpIDxicj4NCiogZXN0aW1hdGVk IHJlc3VsdCBzaXplIGluIGJ5dGVzKGpvaW5yZWwtJmd0O3JlbHRhcmdldC0mZ3Q7d2lkdGggKiBq b2lucmVsLSZndDtyb3dzKSA8YnI+DQoqIGNoZWFwZXN0IHRvdGFsIHBhdGggY29zdCAoY2hlYXBl c3RfdG90YWxfcGF0aC0mZ3Q7dG90YWxfY29zdCk8YnI+DQo8YnI+DQpBdCB0aGUgbW9tZW50LCBJ 4oCZbSBpbmNsaW5lZCB0byBwcmlvcml0aXplIGpvaW4gY2FyZGluYWxpdHkgd2l0aCBpbnB1dDxi cj4NCnNpemUgYXMgYSBzZWNvbmRhcnkgZmFjdG9yLCBidXQgSeKAmWQgbGlrZSB0byB2YWxpZGF0 ZSB0aGlzIHN0ZXAgYnkgc3RlcDo8YnI+DQpmaXJzdCBieSB0ZXN0aW5nIHRoZXNlIHNpbXBsZSBo ZXVyaXN0aWNzIG9uIFRQQy1IIChhcyBhIHJlbGF0aXZlbHk8YnI+DQpzaW1wbGUgd29ya2xvYWQp IGFuZCBzdW1tYXJpemluZyBzb21lIGluaXRpYWwgY29uY2x1c2lvbnMgdGhlcmUuIEFmdGVyPGJy Pg0KdGhhdCwgSSBwbGFuIHRvIHJ1biBtb3JlIGNvbXByZWhlbnNpdmUgZXhwZXJpbWVudHMgb24g bW9yZSBjb21wbGV4PGJyPg0KYmVuY2htYXJrcyBzdWNoIGFzIEpPQiBhbmQgVFBDLURTIGFuZCBy ZXBvcnQgdGhlIHJlc3VsdHMuPGJyPg0KPGJyPg0KRG8geW91IGhhdmUgYW55IHRob3VnaHRzIG9y IHN1Z2dlc3Rpb25zIG9uIHRoaXMgZGlyZWN0aW9uPzxicj4NCjxicj4NClRoYW5rcyBhZ2FpbiBm b3IgeW91ciBmZWVkYmFjayBhbmQgaGVscC48L2Rpdj4NCjwvc3Bhbj48L2ZvbnQ+PC9kaXY+DQo8 ZGl2IGNsYXNzPSJCb2R5RnJhZ21lbnQiPjxmb250IHNpemU9IjIiPjxzcGFuIHN0eWxlPSJmb250 LXNpemU6MTFwdDsiPg0KPGRpdiBjbGFzcz0iUGxhaW5UZXh0Ij48YnI+DQotLTxicj4NCkJlc3Qg cmVnYXJkcyw8YnI+DQpDaGVuZ3BlbmcgWWFuPGJyPg0KPC9kaXY+DQo8L3NwYW4+PC9mb250Pjwv ZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPg0K --_000_938E22869B0D4F8DA9168E0E35D55034Outlookcom_-- --_004_938E22869B0D4F8DA9168E0E35D55034Outlookcom_ Content-Type: application/octet-stream; name="v2-0001-Add-GOO-Greedy-Operator-Ordering-join-search-as-a.patch" Content-Description: v2-0001-Add-GOO-Greedy-Operator-Ordering-join-search-as-a.patch Content-Disposition: attachment; filename="v2-0001-Add-GOO-Greedy-Operator-Ordering-join-search-as-a.patch"; size=65036; creation-date="Wed, 10 Dec 2025 05:20:00 GMT"; modification-date="Wed, 10 Dec 2025 05:20:00 GMT" Content-ID: <44568EA7681AB6458D88C2A18FB4758A@jpnprd01.prod.outlook.com> Content-Transfer-Encoding: base64 RnJvbSA3OWM0ZDNmYTdkODNhMjRiMzkzN2VkMmU0ZDU1NjhiY2I5NDllODIwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDaGVuZ3BlbmcgWWFuIDxjaGVuZ3BlbmdfeWFuQG91dGxvb2su Y29tPgpEYXRlOiBXZWQsIDEwIERlYyAyMDI1IDEyOjUyOjE3ICswODAwClN1YmplY3Q6IFtQQVRD SCB2Ml0gQWRkIEdPTyAoR3JlZWR5IE9wZXJhdG9yIE9yZGVyaW5nKSBqb2luIHNlYXJjaCBhcyBh bgogYWx0ZXJuYXRpdmUgdG8gR0VRTwoKSW50cm9kdWNlIGEgZ3JlZWR5IGpvaW4gc2VhcmNoIGFs Z29yaXRobSAoR09PKSB0byBoYW5kbGUKbGFyZ2Ugam9pbiBwcm9ibGVtcy4gR09PIGJ1aWxkcyBq b2luIHJlbGF0aW9ucyBpdGVyYXRpdmVseSwgbWFpbnRhaW5pbmcKYSBsaXN0IG9mIGNsdW1wcyAo am9pbiBjb21wb25lbnRzKSBhbmQgY29tbWl0dGluZyB0byB0aGUgY2hlYXBlc3QKbGVnYWwgam9p biBhdCBlYWNoIHN0ZXAgdW50aWwgb25seSBvbmUgY2x1bXAgcmVtYWlucy4KClNpZ25lZC1vZmYt Ynk6IENoZW5ncGVuZyBZYW4gPGNoZW5ncGVuZ195YW5Ab3V0bG9vay5jb20+Ci0tLQogc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvTWFrZWZpbGUgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgICAgICAgICB8ICAgNCArCiBzcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9nb28uYyAgICAgICAgICAgICAgfCA2MTIgKysrKysrKysrKysrKysr CiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9tZXNvbi5idWlsZCAgICAgICAgfCAgIDEgKwog c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgICAgIHwgICA5ICsKIHNy Yy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMSArCiBzcmMv aW5jbHVkZS9vcHRpbWl6ZXIvZ29vLmggICAgICAgICAgICAgICAgICAgfCAgMjMgKwogc3JjL2lu Y2x1ZGUvb3B0aW1pemVyL3BhdGhzLmggICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvZ29vLm91dCAgICAgICAgICAgICB8IDcwMCArKysrKysrKysrKysr KysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0ICAgICAgICB8ICAg MyArLQogc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSAgICAgICAgICAgIHwgICA5 ICstCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9nb28uc3FsICAgICAgICAgICAgICAgICAgfCAzNjQg KysrKysrKysrCiAxMiBmaWxlcyBjaGFuZ2VkLCAxNzI0IGluc2VydGlvbnMoKyksIDQgZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvZ29v LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvZ29vLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dvby5vdXQKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzL3NxbC9nb28uc3FsCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9NYWtlZmlsZQppbmRleCAxZTE5OWZmNjZmNy4uM2JjODI1Y2Q4NDUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL01ha2VmaWxlCkBAIC0xNyw2ICsxNyw3IEBAIE9CSlMgPSBcCiAJY2xhdXNl c2VsLm8gXAogCWNvc3RzaXplLm8gXAogCWVxdWl2Y2xhc3MubyBcCisJZ29vLm8gXAogCWluZHhw YXRoLm8gXAogCWpvaW5wYXRoLm8gXAogCWpvaW5yZWxzLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w YXRoL2FsbHBhdGhzLmMKaW5kZXggNGM0M2ZkMGIxOWIuLjQ1NzRiMWY0NGNjIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJv cHRpbWl6ZXIvY2xhdXNlcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9jb3N0LmgiCiAjaW5jbHVk ZSAib3B0aW1pemVyL2dlcW8uaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvZ29vLmgiCiAjaW5jbHVk ZSAib3B0aW1pemVyL29wdGltaXplci5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wYXRobm9kZS5o IgogI2luY2x1ZGUgIm9wdGltaXplci9wYXRocy5oIgpAQCAtMzg0NSw2ICszODQ2LDkgQEAgbWFr ZV9yZWxfZnJvbV9qb2lubGlzdChQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqam9pbmxpc3QpCiAK IAkJaWYgKGpvaW5fc2VhcmNoX2hvb2spCiAJCQlyZXR1cm4gKCpqb2luX3NlYXJjaF9ob29rKSAo cm9vdCwgbGV2ZWxzX25lZWRlZCwgaW5pdGlhbF9yZWxzKTsKKwkJLyogV0lQOiBmb3Igbm93IHVz ZSBnZXFvX3RocmVzaG9sZCBmb3IgdGVzdGluZyAqLworCQllbHNlIGlmIChlbmFibGVfZ29vX2pv aW5fc2VhcmNoICYmIGxldmVsc19uZWVkZWQgPj0gZ2Vxb190aHJlc2hvbGQpCisJCQlyZXR1cm4g Z29vX2pvaW5fc2VhcmNoKHJvb3QsIGxldmVsc19uZWVkZWQsIGluaXRpYWxfcmVscyk7CiAJCWVs c2UgaWYgKGVuYWJsZV9nZXFvICYmIGxldmVsc19uZWVkZWQgPj0gZ2Vxb190aHJlc2hvbGQpCiAJ CQlyZXR1cm4gZ2Vxbyhyb290LCBsZXZlbHNfbmVlZGVkLCBpbml0aWFsX3JlbHMpOwogCQllbHNl CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9nb28uYyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2dvby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi4yNDdkYmI1ZjkyMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci9wYXRoL2dvby5jCkBAIC0wLDAgKzEsNjEyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBnb28uYworICogICAgIEdyZWVkeSBvcGVyYXRvciBvcmRlcmluZyAoR09PKSBqb2luIHNl YXJjaCBmb3IgbGFyZ2Ugam9pbiBwcm9ibGVtcworICoKKyAqIEdPTyBpcyBhIGRldGVybWluaXN0 aWMgZ3JlZWR5IG9wZXJhdG9yIG9yZGVyaW5nIGFsZ29yaXRobSB0aGF0IGNvbnN0cnVjdHMKKyAq IGpvaW4gcmVsYXRpb25zIGl0ZXJhdGl2ZWx5LCBhbHdheXMgY29tbWl0dGluZyB0byB0aGUgY2hl YXBlc3QgbGVnYWwgam9pbiBhdAorICogZWFjaCBzdGVwLiBUaGUgYWxnb3JpdGhtIG1haW50YWlu cyBhIGxpc3Qgb2YgImNsdW1wcyIgKGpvaW4gY29tcG9uZW50cyksCisgKiBpbml0aWFsbHkgb25l IHBlciBiYXNlIHJlbGF0aW9uLiBBdCBlYWNoIGl0ZXJhdGlvbiwgaXQgZXZhbHVhdGVzIGFsbCBs ZWdhbAorICogcGFpcnMgb2YgY2x1bXBzLCBzZWxlY3RzIHRoZSBwYWlyIHRoYXQgcHJvZHVjZXMg dGhlIGNoZWFwZXN0IGpvaW4gYWNjb3JkaW5nCisgKiB0byB0aGUgcGxhbm5lcidzIGNvc3QgbW9k ZWwsIGFuZCByZXBsYWNlcyB0aG9zZSB0d28gY2x1bXBzIHdpdGggdGhlCisgKiByZXN1bHRpbmcg am9pbnJlbC4gVGhpcyBjb250aW51ZXMgdW50aWwgb25seSBvbmUgY2x1bXAgcmVtYWlucy4KKyAq CisgKiBBTEdPUklUSE0gQ09NUExFWElUWToKKyAqCisgKiBUaW1lIENvbXBsZXhpdHk6IE8obl4z KSB3aGVyZSBuIGlzIHRoZSBudW1iZXIgb2YgYmFzZSByZWxhdGlvbnMuCisgKiAtIFRoZSBhbGdv cml0aG0gcGVyZm9ybXMgKG4gLSAxKSBpdGVyYXRpb25zLCBtZXJnaW5nIHR3byBjbHVtcHMgZWFj aCB0aW1lLgorICogLSBBdCBpdGVyYXRpb24gaSwgdGhlcmUgYXJlIChuIC0gaSArIDEpIHJlbWFp bmluZyBjbHVtcHMsIHJlcXVpcmluZworICogICBPKChuLWkpXjIpIHBhaXIgZXZhbHVhdGlvbnMg dG8gZmluZCB0aGUgY2hlYXBlc3Qgam9pbi4KKyAqIC0gVG90YWw6IFN1bSBvZiAobi1pKV4yIGZv ciBpPTEgdG8gbi0xIOKJiCBPKG5eMykKKyAqCisgKiBSRUZFUkVOQ0VTOgorICoKKyAqIFRoaXMg aW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gdGhlIGFsZ29yaXRobSBkZXNjcmliZWQgaW46Cisg KgorICogTGVvbmlkYXMgRmVnYXJhcywgIkEgTmV3IEhldXJpc3RpYyBmb3IgT3B0aW1pemluZyBM YXJnZSBRdWVyaWVzIiwKKyAqIFByb2NlZWRpbmdzIG9mIHRoZSA5dGggSW50ZXJuYXRpb25hbCBD b25mZXJlbmNlIG9uIERhdGFiYXNlIGFuZCBFeHBlcnQKKyAqIFN5c3RlbXMgQXBwbGljYXRpb25z IChERVhBICc5OCksIEF1Z3VzdCAxOTk4LCBQYWdlcyA3MjYtNzM1LgorICogaHR0cHM6Ly9kbC5h Y20ub3JnL2RvaS8xMC41NTU1LzY0ODMxMS43NTQ4OTIKKyAqCisgKgorICogUG9ydGlvbnMgQ29w eXJpZ2h0IChjKSAxOTk2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNp dHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKiAgICAgc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvZ29vLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisj aW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUg Im5vZGVzL2JpdG1hcHNldC5oIgorI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5oIgorI2luY2x1 ZGUgIm9wdGltaXplci9nZXFvLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL2dvby5oIgorI2luY2x1 ZGUgIm9wdGltaXplci9qb2luaW5mby5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wYXRobm9kZS5o IgorI2luY2x1ZGUgIm9wdGltaXplci9wYXRocy5oIgorI2luY2x1ZGUgInV0aWxzL2hzZWFyY2gu aCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorCisvKgorICogQ29uZmlndXJhdGlvbiBk ZWZhdWx0cy4gIFRoZXNlIGFyZSBleHBvc2VkIGFzIEdVQ3MgaW4gZ3VjX3RhYmxlcy5jLgorICov Citib29sCQllbmFibGVfZ29vX2pvaW5fc2VhcmNoID0gZmFsc2U7CisKKy8qCisgKiBXb3JraW5n IHN0YXRlIGZvciBhIHNpbmdsZSBHT08gc2VhcmNoIGludm9jYXRpb24uCisgKgorICogVGhpcyBz dHJ1Y3R1cmUgaG9sZHMgYWxsIHRoZSBzdGF0ZSBuZWVkZWQgZHVyaW5nIGEgZ3JlZWR5IGpvaW4g b3JkZXIgc2VhcmNoLgorICogSXQgbWFuYWdlcyB0aHJlZSBtZW1vcnkgY29udGV4dHMgd2l0aCBk aWZmZXJlbnQgbGlmZXRpbWVzIHRvIGF2b2lkIG1lbW9yeQorICogYmxvYXQgZHVyaW5nIGxhcmdl IGpvaW4gc2VhcmNoZXMuCisgKgorICogVE9ETzogQ29uc2lkZXIgdXNpbmcgdGhlIGV4dGVuc2lv bl9zdGF0ZSBtZWNoYW5pc20gaW4gUGxhbm5lckluZm8gKHNpbWlsYXIKKyAqIHRvIEdFUU8ncyBh cHByb2FjaCkgaW5zdGVhZCBvZiBwYXNzaW5nIEdvb1N0YXRlIHNlcGFyYXRlbHkuCisgKi8KK3R5 cGVkZWYgc3RydWN0IEdvb1N0YXRlCit7CisJUGxhbm5lckluZm8gKnJvb3Q7CQkJLyogZ2xvYmFs IHBsYW5uZXIgc3RhdGUgKi8KKwlNZW1vcnlDb250ZXh0IGdvb19jeHQ7CQkvKiBsb25nLWxpdmVk IChwZXItc2VhcmNoKSBhbGxvY2F0aW9ucyAqLworCU1lbW9yeUNvbnRleHQgY2FuZF9jeHQ7CQkv KiBwZXItaXRlcmF0aW9uIGNhbmRpZGF0ZSBzdG9yYWdlICovCisJTWVtb3J5Q29udGV4dCBzY3Jh dGNoX2N4dDsJLyogcGVyLWNhbmRpZGF0ZSBzcGVjdWxhdGl2ZSBldmFsdWF0aW9uICovCisJTGlz dAkgICAqY2x1bXBzOwkJCS8qIHJlbWFpbmluZyBqb2luIGNvbXBvbmVudHMgKFJlbE9wdEluZm8g KikgKi8KKworCS8qCisJICogImNsdW1wcyIgYXJlIHNpbWlsYXIgdG8gR0VRTydzIGNvbmNlcHQg KHNlZSBnZXFvX2V2YWwuYyk6IGpvaW4KKwkgKiBjb21wb25lbnRzIHRoYXQgaGF2ZW4ndCBiZWVu IG1lcmdlZCB5ZXQuIEluaXRpYWxseSBvbmUgcGVyIGJhc2UKKwkgKiByZWxhdGlvbiwgZ3JhZHVh bGx5IG1lcmdlZCB1bnRpbCBvbmUgcmVtYWlucy4KKwkgKi8KKwlib29sCQljbGF1c2VfcGFpcl9w cmVzZW50OwkvKiBhbnkgY2xhdXNlLWNvbm5lY3RlZCBwYWlyIGV4aXN0cz8gKi8KK30JCQlHb29T dGF0ZTsKKworLyoKKyAqIENhbmRpZGF0ZSBqb2luIGJldHdlZW4gdHdvIGNsdW1wcy4KKyAqCisg KiBUaGlzIHN0cnVjdHVyZSBob2xkcyB0aGUgZ3JlZWR5IG1ldHJpY3MgZnJvbSBhIHNwZWN1bGF0 aXZlIGpvaW5yZWwKKyAqIGV2YWx1YXRpb24uIFdlIGNyZWF0ZSB0aGlzIGxpZ2h0d2VpZ2h0IHN0 cnVjdHVyZSBpbiBjYW5kX2N4dCBhZnRlciBkaXNjYXJkaW5nCisgKiB0aGUgYWN0dWFsIGpvaW5y ZWwgZnJvbSBzY3JhdGNoX2N4dCwgYWxsb3dpbmcgdXMgdG8gY29tcGFyZSBtYW55IGNhbmRpZGF0 ZXMKKyAqIHdpdGhvdXQgZXhoYXVzdGluZyBtZW1vcnkuCisgKi8KK3R5cGVkZWYgc3RydWN0IEdv b0NhbmRpZGF0ZQoreworCVJlbE9wdEluZm8gKmxlZnQ7CQkJLyogbGVmdCBpbnB1dCBjbHVtcCAq LworCVJlbE9wdEluZm8gKnJpZ2h0OwkJCS8qIHJpZ2h0IGlucHV0IGNsdW1wICovCisJQ29zdAkJ dG90YWxfY29zdDsJCS8qIHRvdGFsIGNvc3Qgb2YgY2hlYXBlc3QgcGF0aCAqLworfQkJCUdvb0Nh bmRpZGF0ZTsKKworc3RhdGljIEdvb1N0YXRlICogZ29vX2luaXRfc3RhdGUoUGxhbm5lckluZm8g KnJvb3QsIExpc3QgKmluaXRpYWxfcmVscyk7CitzdGF0aWMgdm9pZCBnb29fZGVzdHJveV9zdGF0 ZShHb29TdGF0ZSAqIHN0YXRlKTsKK3N0YXRpYyBSZWxPcHRJbmZvICpnb29fc2VhcmNoX2ludGVy bmFsKEdvb1N0YXRlICogc3RhdGUpOworc3RhdGljIHZvaWQgZ29vX3Jlc2V0X3Byb2JlX3N0YXRl KEdvb1N0YXRlICogc3RhdGUsIGludCBzYXZlZF9yZWxfbGVuLAorCQkJCQkJCQkgIHN0cnVjdCBI VEFCICpzYXZlZF9oYXNoKTsKK3N0YXRpYyBHb29DYW5kaWRhdGUgKiBnb29fYnVpbGRfY2FuZGlk YXRlKEdvb1N0YXRlICogc3RhdGUsIFJlbE9wdEluZm8gKmxlZnQsCisJCQkJCQkJCQkJICBSZWxP cHRJbmZvICpyaWdodCk7CitzdGF0aWMgUmVsT3B0SW5mbyAqZ29vX2NvbW1pdF9qb2luKEdvb1N0 YXRlICogc3RhdGUsIEdvb0NhbmRpZGF0ZSAqIGNhbmQpOworc3RhdGljIGJvb2wgZ29vX2NhbmRp ZGF0ZV9iZXR0ZXIoR29vQ2FuZGlkYXRlICogYSwgR29vQ2FuZGlkYXRlICogYik7CitzdGF0aWMg Ym9vbCBnb29fY2FuZGlkYXRlX3BydW5hYmxlKEdvb1N0YXRlICogc3RhdGUsIFJlbE9wdEluZm8g KmxlZnQsCisJCQkJCQkJCSAgIFJlbE9wdEluZm8gKnJpZ2h0KTsKKworLyoKKyAqIGdvb19qb2lu X3NlYXJjaAorICoJCUVudHJ5IHBvaW50IGZvciBHcmVlZHkgT3BlcmF0b3IgT3JkZXJpbmcgam9p biBzZWFyY2ggYWxnb3JpdGhtLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20g bWFrZV9yZWxfZnJvbV9qb2lubGlzdCgpIHdoZW4KKyAqIGVuYWJsZV9nb29fam9pbl9zZWFyY2gg aXMgdHJ1ZSBhbmQgdGhlIG51bWJlciBvZiByZWxhdGlvbnMgbWVldHMgb3IKKyAqIGV4Y2VlZHMg Z2Vxb190aHJlc2hvbGQuCisgKgorICogUmV0dXJucyB0aGUgZmluYWwgUmVsT3B0SW5mbyByZXBy ZXNlbnRpbmcgdGhlIGpvaW4gb2YgYWxsIGJhc2UgcmVsYXRpb25zLAorICogb3IgZXJyb3JzIG91 dCBpZiBubyB2YWxpZCBqb2luIG9yZGVyIGNhbiBiZSBmb3VuZC4KKyAqLworUmVsT3B0SW5mbyAq Citnb29fam9pbl9zZWFyY2goUGxhbm5lckluZm8gKnJvb3QsIGludCBsZXZlbHNfbmVlZGVkLAor CQkJCUxpc3QgKmluaXRpYWxfcmVscykKK3sKKwlHb29TdGF0ZSAgICpzdGF0ZTsKKwlSZWxPcHRJ bmZvICpyZXN1bHQ7CisJaW50CQkJYmFzZV9yZWxfY291bnQ7CisJc3RydWN0IEhUQUIgKmJhc2Vf aGFzaDsKKworCS8qIEluaXRpYWxpemUgc2VhcmNoIHN0YXRlIGFuZCBtZW1vcnkgY29udGV4dHMg Ki8KKwlzdGF0ZSA9IGdvb19pbml0X3N0YXRlKHJvb3QsIGluaXRpYWxfcmVscyk7CisKKwkvKgor CSAqIFNhdmUgaW5pdGlhbCBzdGF0ZSBvZiBqb2luX3JlbF9saXN0IGFuZCBqb2luX3JlbF9oYXNo IHNvIHdlIGNhbiByZXN0b3JlCisJICogdGhlbSBpZiB0aGUgc2VhcmNoIGZhaWxzLgorCSAqLwor CWJhc2VfcmVsX2NvdW50ID0gbGlzdF9sZW5ndGgocm9vdC0+am9pbl9yZWxfbGlzdCk7CisJYmFz ZV9oYXNoID0gcm9vdC0+am9pbl9yZWxfaGFzaDsKKworCS8qIFJ1biB0aGUgbWFpbiBncmVlZHkg c2VhcmNoIGxvb3AgKi8KKwlyZXN1bHQgPSBnb29fc2VhcmNoX2ludGVybmFsKHN0YXRlKTsKKwor CWlmIChyZXN1bHQgPT0gTlVMTCkKKwl7CisJCS8qIFJlc3RvcmUgcGxhbm5lciBzdGF0ZSBiZWZv cmUgcmVwb3J0aW5nIGVycm9yICovCisJCXJvb3QtPmpvaW5fcmVsX2xpc3QgPSBsaXN0X3RydW5j YXRlKHJvb3QtPmpvaW5fcmVsX2xpc3QsIGJhc2VfcmVsX2NvdW50KTsKKwkJcm9vdC0+am9pbl9y ZWxfaGFzaCA9IGJhc2VfaGFzaDsKKwkJZWxvZyhFUlJPUiwgIkdPTyBqb2luIHNlYXJjaCBmYWls ZWQgdG8gZmluZCBhIHZhbGlkIGpvaW4gb3JkZXIiKTsKKwl9CisKKwlnb29fZGVzdHJveV9zdGF0 ZShzdGF0ZSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIGdvb19pbml0X3N0YXRlCisg KgkJSW5pdGlhbGl6ZSBwZXItc2VhcmNoIHN0YXRlIGFuZCBtZW1vcnkgY29udGV4dHMuCisgKgor ICogQ3JlYXRlcyB0aGUgR29vU3RhdGUgc3RydWN0dXJlIGFuZCB0aHJlZSBtZW1vcnkgY29udGV4 dHMgd2l0aCBkaWZmZXJlbnQKKyAqIGxpZmV0aW1lczoKKyAqCisgKiAtIGdvb19jeHQ6IExpdmVz IGZvciB0aGUgZW50aXJlIHNlYXJjaCwgaG9sZHMgdGhlIGNsdW1wcyBsaXN0IGFuZCBzdGF0ZS4K KyAqIC0gY2FuZF9jeHQ6IFJlc2V0IGFmdGVyIGVhY2ggaXRlcmF0aW9uLCBob2xkcyBjYW5kaWRh dGUgc3RydWN0dXJlcyBkdXJpbmcKKyAqICAgdGhlIGNvbXBhcmlzb24gcGhhc2UuCisgKiAtIHNj cmF0Y2hfY3h0OiBSZXNldCBhZnRlciBlYWNoIGNhbmRpZGF0ZSBldmFsdWF0aW9uLCBob2xkcyBz cGVjdWxhdGl2ZQorICogICBqb2lucmVscyB0aGF0IGFyZSBkaXNjYXJkZWQgYmVmb3JlIGNvbW1p dHRpbmcgdG8gYSBjaG9pY2UuCisgKgorICogVGhlIHRocmVlLWNvbnRleHQgZGVzaWduIHByZXZl bnRzIG1lbW9yeSBibG9hdCBkdXJpbmcgbGFyZ2Ugam9pbiBzZWFyY2hlcworICogd2hlcmUgd2Ug bWF5IGV2YWx1YXRlIGh1bmRyZWRzIG9yIHRob3VzYW5kcyBvZiBjYW5kaWRhdGUgam9pbnMuCisg Ki8KK3N0YXRpYyBHb29TdGF0ZSAqIGdvb19pbml0X3N0YXRlKFBsYW5uZXJJbmZvICpyb290LCBM aXN0ICppbml0aWFsX3JlbHMpCit7CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisJR29vU3RhdGUg ICAqc3RhdGU7CisKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocm9vdC0+cGxhbm5l cl9jeHQpOworCisJc3RhdGUgPSBwYWxsb2Moc2l6ZW9mKEdvb1N0YXRlKSk7CisJc3RhdGUtPnJv b3QgPSByb290OworCXN0YXRlLT5jbHVtcHMgPSBOSUw7CisJc3RhdGUtPmNsYXVzZV9wYWlyX3By ZXNlbnQgPSBmYWxzZTsKKworCS8qIENyZWF0ZSB0aGUgdGhyZWUtbGV2ZWwgbWVtb3J5IGNvbnRl eHQgaGllcmFyY2h5ICovCisJc3RhdGUtPmdvb19jeHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUo cm9vdC0+cGxhbm5lcl9jeHQsICJHT09TdGF0ZUNvbnRleHQiLAorCQkJCQkJCQkJCSAgIEFMTE9D U0VUX0RFRkFVTFRfU0laRVMpOworCXN0YXRlLT5jYW5kX2N4dCA9IEFsbG9jU2V0Q29udGV4dENy ZWF0ZShzdGF0ZS0+Z29vX2N4dCwgIkdPT0NhbmRpZGF0ZUNvbnRleHQiLAorCQkJCQkJCQkJCQlB TExPQ1NFVF9TTUFMTF9TSVpFUyk7CisJc3RhdGUtPnNjcmF0Y2hfY3h0ID0gQWxsb2NTZXRDb250 ZXh0Q3JlYXRlKAorCQkJCQkJCQkJCQkgICBzdGF0ZS0+Z29vX2N4dCwgIkdPT1NjcmF0Y2hDb250 ZXh0IiwgQUxMT0NTRVRfU01BTExfU0laRVMpOworCisJLyoKKwkgKiBDb3B5IHRoZSBpbml0aWFs X3JlbHMgbGlzdCBpbnRvIGdvb19jeHQuIFRoaXMgYmVjb21lcyBvdXIgd29ya2luZworCSAqIGNs dW1wcyBsaXN0IHRoYXQgd2UnbGwgbW9kaWZ5IHRocm91Z2hvdXQgdGhlIHNlYXJjaC4KKwkgKi8K KwlNZW1vcnlDb250ZXh0U3dpdGNoVG8oc3RhdGUtPmdvb19jeHQpOworCXN0YXRlLT5jbHVtcHMg PSBsaXN0X2NvcHkoaW5pdGlhbF9yZWxzKTsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRj eHQpOworCisJcmV0dXJuIHN0YXRlOworfQorCisvKgorICogZ29vX2Rlc3Ryb3lfc3RhdGUKKyAq CQlGcmVlIGFsbCBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgR09PIHNlYXJjaC4KKyAqCisgKiBE ZWxldGVzIHRoZSBnb29fY3h0IG1lbW9yeSBjb250ZXh0ICh3aGljaCByZWN1cnNpdmVseSBkZWxl dGVzIGNhbmRfY3h0CisgKiBhbmQgc2NyYXRjaF9jeHQgYXMgY2hpbGRyZW4pIGFuZCB0aGVuIGZy ZWVzIHRoZSBzdGF0ZSBzdHJ1Y3R1cmUgaXRzZWxmLgorICogVGhpcyBpcyBjYWxsZWQgYWZ0ZXIg dGhlIHNlYXJjaCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IG9yIGZhaWxzLgorICovCitzdGF0aWMg dm9pZAorZ29vX2Rlc3Ryb3lfc3RhdGUoR29vU3RhdGUgKiBzdGF0ZSkKK3sKKwlNZW1vcnlDb250 ZXh0RGVsZXRlKHN0YXRlLT5nb29fY3h0KTsKKwlwZnJlZShzdGF0ZSk7Cit9CisKKy8qCisgKiBn b29fc2VhcmNoX2ludGVybmFsCisgKgkJTWFpbiBncmVlZHkgc2VhcmNoIGxvb3AuCisgKgorICog SW1wbGVtZW50cyBhIHR3by1wYXNzIGFsZ29yaXRobSBhdCBlYWNoIGl0ZXJhdGlvbjoKKyAqCisg KiBQYXNzIDE6IFNjYW4gYWxsIGNsdW1wIHBhaXJzIHRvIGRldGVjdCB3aGV0aGVyIGFueSBjbGF1 c2UtY29ubmVjdGVkIHBhaXJzCisgKiAgICAgICAgIGV4aXN0LiBUaGlzIHNldHMgdGhlIGNsYXVz ZV9wYWlyX3ByZXNlbnQgZmxhZy4KKyAqCisgKiBQYXNzIDI6IEV2YWx1YXRlIGFsbCB2aWFibGUg Y2FuZGlkYXRlIHBhaXJzLCBrZWVwaW5nIHRyYWNrIG9mIHRoZSBiZXN0IG9uZQorICogICAgICAg ICBhY2NvcmRpbmcgdG8gb3VyIGNvbXBhcmlzb24gY3JpdGVyaWEuIElmIGNsYXVzZV9wYWlyX3By ZXNlbnQgaXMgdHJ1ZSwKKyAqICAgICAgICAgd2Ugc2tpcCBDYXJ0ZXNpYW4gcHJvZHVjdHMgZW50 aXJlbHkgdG8gYXZvaWQgZXhwZW5zaXZlIGNyb3NzIGpvaW5zLgorICoKKyAqIEFmdGVyIHNlbGVj dGluZyB0aGUgYmVzdCBjYW5kaWRhdGUsIHdlIHBlcm1hbmVudGx5IGNyZWF0ZSBpdHMgam9pbnJl bCBpbgorICogcGxhbm5lcl9jeHQgYW5kIHJlcGxhY2UgdGhlIHR3byBpbnB1dCBjbHVtcHMgd2l0 aCB0aGlzIG5ldyBqb2lucmVsLiBUaGlzCisgKiBjb250aW51ZXMgdW50aWwgb25seSBvbmUgY2x1 bXAgcmVtYWlucy4KKyAqCisgKiBUaGUgZnVuY3Rpb24gcnVucyBwcmltYXJpbHkgaW4gZ29vX2N4 dCwgdGVtcG9yYXJpbHkgc3dpdGNoaW5nIHRvIHBsYW5uZXJfY3h0CisgKiB3aGVuIGNyZWF0aW5n IHBlcm1hbmVudCBqb2lucmVscyBhbmQgdG8gc2NyYXRjaF9jeHQgd2hlbiBldmFsdWF0aW5nCisg KiBzcGVjdWxhdGl2ZSBjYW5kaWRhdGVzLgorICoKKyAqIFJldHVybnMgdGhlIGZpbmFsIGpvaW5y ZWwgc3Bhbm5pbmcgYWxsIGJhc2UgcmVsYXRpb25zLCBvciBOVUxMIG9uIGZhaWx1cmUuCisgKi8K K3N0YXRpYyBSZWxPcHRJbmZvICoKK2dvb19zZWFyY2hfaW50ZXJuYWwoR29vU3RhdGUgKiBzdGF0 ZSkKK3sKKwlQbGFubmVySW5mbyAqcm9vdCA9IHN0YXRlLT5yb290OworCVJlbE9wdEluZm8gKmZp bmFsX3JlbCA9IE5VTEw7CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisKKwkvKgorCSAqIFN3aXRj aCB0byBnb29fY3h0IGZvciB0aGUgZW50aXJlIHNlYXJjaCBwcm9jZXNzLiBUaGlzIGVuc3VyZXMg dGhhdCBhbGwKKwkgKiBvcGVyYXRpb25zIG9uIHN0YXRlLT5jbHVtcHMgYW5kIHJlbGF0ZWQgc3Ry dWN0dXJlcyBoYXBwZW4gaW4gdGhlCisJICogY29ycmVjdCBtZW1vcnkgY29udGV4dC4KKwkgKi8K KwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oc3RhdGUtPmdvb19jeHQpOworCisJd2hp bGUgKGxpc3RfbGVuZ3RoKHN0YXRlLT5jbHVtcHMpID4gMSkKKwl7CisJCUxpc3RDZWxsICAgKmxj MTsKKwkJaW50CQkJaTsKKwkJR29vQ2FuZGlkYXRlICpiZXN0X2NhbmRpZGF0ZSA9IE5VTEw7CisK KwkJLyogQWxsb3cgcXVlcnkgY2FuY2VsbGF0aW9uIGR1cmluZyBsb25nIGpvaW4gc2VhcmNoZXMg Ki8KKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKiBSZXNldCBjYW5kaWRhdGUgY29u dGV4dCBmb3IgdGhpcyBpdGVyYXRpb24gKi8KKwkJTWVtb3J5Q29udGV4dFJlc2V0KHN0YXRlLT5j YW5kX2N4dCk7CisJCXN0YXRlLT5jbGF1c2VfcGFpcl9wcmVzZW50ID0gZmFsc2U7CisKKwkJLyoK KwkJICogUGFzcyAxOiBTY2FuIGFsbCBwYWlycyB0byBkZXRlY3QgY2xhdXNlLWNvbm5lY3RlZCBq b2lucy4KKwkJICoKKwkJICogV2UgbmVlZCB0byBrbm93IHdoZXRoZXIgQU5ZIGNsYXVzZS1jb25u ZWN0ZWQgcGFpcnMgZXhpc3QgYmVmb3JlIHdlCisJCSAqIGNhbiBkZWNpZGUgd2hldGhlciB0byBz a2lwIENhcnRlc2lhbiBwcm9kdWN0cy4gVGhpcyBxdWljayBzY2FuCisJCSAqIGFsbG93cyB1cyB0 byBwcmVmZXIgd2VsbC1jb25uZWN0ZWQgam9pbnMgd2l0aG91dCBjb21wbGV0ZWx5CisJCSAqIGZv cmJpZGRpbmcgQ2FydGVzaWFuIHByb2R1Y3RzICh3aGljaCBtYXkgYmUgbmVjZXNzYXJ5IGZvcgor CQkgKiBkaXNjb25uZWN0ZWQgcXVlcnkgZ3JhcGhzKS4KKwkJICovCisJCWZvciAoaSA9IDAsIGxj MSA9IGxpc3RfaGVhZChzdGF0ZS0+Y2x1bXBzKTsgbGMxICE9IE5VTEw7CisJCQkgbGMxID0gbG5l eHQoc3RhdGUtPmNsdW1wcywgbGMxKSwgaSsrKQorCQl7CisJCQlSZWxPcHRJbmZvICpsZWZ0ID0g bGZpcnN0X25vZGUoUmVsT3B0SW5mbywgbGMxKTsKKwkJCUxpc3RDZWxsICAgKmxjMiA9IGxuZXh0 KHN0YXRlLT5jbHVtcHMsIGxjMSk7CisKKwkJCWZvciAoOyBsYzIgIT0gTlVMTDsgbGMyID0gbG5l eHQoc3RhdGUtPmNsdW1wcywgbGMyKSkKKwkJCXsKKwkJCQlSZWxPcHRJbmZvICpyaWdodCA9IGxm aXJzdF9ub2RlKFJlbE9wdEluZm8sIGxjMik7CisKKwkJCQkvKiBDaGVjayBpZiB0aGlzIHBhaXIg aGFzIGEgam9pbiBjbGF1c2Ugb3Igb3JkZXIgcmVzdHJpY3Rpb24gKi8KKwkJCQlpZiAoaGF2ZV9y ZWxldmFudF9qb2luY2xhdXNlKHJvb3QsIGxlZnQsIHJpZ2h0KSB8fAorCQkJCQloYXZlX2pvaW5f b3JkZXJfcmVzdHJpY3Rpb24ocm9vdCwgbGVmdCwgcmlnaHQpKQorCQkJCXsKKwkJCQkJLyogRm91 bmQgYXQgbGVhc3Qgb25lIGNsYXVzZS1jb25uZWN0ZWQgcGFpciAqLworCQkJCQlzdGF0ZS0+Y2xh dXNlX3BhaXJfcHJlc2VudCA9IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJ aWYgKHN0YXRlLT5jbGF1c2VfcGFpcl9wcmVzZW50KQorCQkJCWJyZWFrOworCQl9CisKKwkJLyoK KwkJICogUGFzcyAyOiBFdmFsdWF0ZSBhbGwgdmlhYmxlIGNhbmRpZGF0ZSBwYWlycyBhbmQgc2Vs ZWN0IHRoZSBiZXN0LgorCQkgKgorCQkgKiBGb3IgZWFjaCBwYWlyIHRoYXQgcGFzc2VzIHRoZSBw cnVuaW5nIGNoZWNrLCB3ZSBkbyBhIGZ1bGwKKwkJICogc3BlY3VsYXRpdmUgZXZhbHVhdGlvbiB1 c2luZyBtYWtlX2pvaW5fcmVsKCkgdG8gZ2V0IGFjY3VyYXRlIGNvc3RzLgorCQkgKiBUaGUgY2Fu ZGlkYXRlIHdpdGggdGhlIGJlc3QgY29zdCAoYWNjb3JkaW5nIHRvCisJCSAqIGdvb19jYW5kaWRh dGVfYmV0dGVyKSBpcyByZW1lbWJlcmVkIGFuZCB3aWxsIGJlIGNvbW1pdHRlZCBhZnRlcgorCQkg KiB0aGlzIHBhc3MuCisJCSAqCisJCSAqIFRPRE86IEl0IG1pZ2h0IGJlIHdvcnRoIGNhY2hpbmcg Y29zdCBlc3RpbWF0ZXMgaWYgdGhlIHNhbWUgam9pbgorCQkgKiBwYWlyIGFwcGVhcnMgaW4gbXVs dGlwbGUgaXRlcmF0aW9ucy4KKwkJICovCisJCWZvciAobGMxID0gbGlzdF9oZWFkKHN0YXRlLT5j bHVtcHMpOyBsYzEgIT0gTlVMTDsKKwkJCSBsYzEgPSBsbmV4dChzdGF0ZS0+Y2x1bXBzLCBsYzEp KQorCQl7CisJCQlSZWxPcHRJbmZvICpsZWZ0ID0gbGZpcnN0X25vZGUoUmVsT3B0SW5mbywgbGMx KTsKKwkJCUxpc3RDZWxsICAgKmxjMiA9IGxuZXh0KHN0YXRlLT5jbHVtcHMsIGxjMSk7CisKKwkJ CWZvciAoOyBsYzIgIT0gTlVMTDsgbGMyID0gbG5leHQoc3RhdGUtPmNsdW1wcywgbGMyKSkKKwkJ CXsKKwkJCQlSZWxPcHRJbmZvICpyaWdodCA9IGxmaXJzdF9ub2RlKFJlbE9wdEluZm8sIGxjMik7 CisJCQkJR29vQ2FuZGlkYXRlICpjYW5kOworCisJCQkJY2FuZCA9IGdvb19idWlsZF9jYW5kaWRh dGUoc3RhdGUsIGxlZnQsIHJpZ2h0KTsKKwkJCQlpZiAoY2FuZCA9PSBOVUxMKQorCQkJCQljb250 aW51ZTsKKworCQkJCS8qIFRyYWNrIHRoZSBiZXN0IGNhbmRpZGF0ZSBzZWVuIHNvIGZhciAqLwor CQkJCWlmIChiZXN0X2NhbmRpZGF0ZSA9PSBOVUxMIHx8CisJCQkJCWdvb19jYW5kaWRhdGVfYmV0 dGVyKGNhbmQsIGJlc3RfY2FuZGlkYXRlKSkKKwkJCQkJYmVzdF9jYW5kaWRhdGUgPSBjYW5kOwor CQkJfQorCQl9CisKKwkJLyogV2UgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSB2YWxpZCBqb2luIGNh bmRpZGF0ZSAqLworCQlpZiAoYmVzdF9jYW5kaWRhdGUgPT0gTlVMTCkKKwkJCWVsb2coRVJST1Is ICJHT08gam9pbiBzZWFyY2ggZmFpbGVkIHRvIGZpbmQgYW55IHZhbGlkIGpvaW4gY2FuZGlkYXRl cyIpOworCisJCS8qCisJCSAqIENvbW1pdCB0aGUgYmVzdCBjYW5kaWRhdGU6IGNyZWF0ZSB0aGUg am9pbnJlbCBwZXJtYW5lbnRseSBhbmQKKwkJICogdXBkYXRlIHRoZSBjbHVtcHMgbGlzdC4KKwkJ ICovCisJCWZpbmFsX3JlbCA9IGdvb19jb21taXRfam9pbihzdGF0ZSwgYmVzdF9jYW5kaWRhdGUp OworCisJCWlmIChmaW5hbF9yZWwgPT0gTlVMTCkKKwkJCWVsb2coRVJST1IsICJHT08gam9pbiBz ZWFyY2ggZmFpbGVkIHRvIGNvbW1pdCBqb2luIik7CisJfQorCisJLyogU3dpdGNoIGJhY2sgdG8g dGhlIG9yaWdpbmFsIGNvbnRleHQgYmVmb3JlIHJldHVybmluZyAqLworCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRjeHQpOworCisJcmV0dXJuIGZpbmFsX3JlbDsKK30KKworLyoKKyAqIGdvb19j YW5kaWRhdGVfcHJ1bmFibGUKKyAqCQlEZXRlcm1pbmUgd2hldGhlciBhIGNhbmRpZGF0ZSBwYWly IHNob3VsZCBiZSBza2lwcGVkLgorICoKKyAqIFdlIHVzZSBhIHR3by1sZXZlbCBwcnVuaW5nIHN0 cmF0ZWd5OgorICoKKyAqIDEuIFBhaXJzIHdpdGggam9pbiBjbGF1c2VzIG9yIGpvaW4tb3JkZXIg cmVzdHJpY3Rpb25zIGFyZSBuZXZlciBwcnVuYWJsZS4KKyAqICAgIFRoZXNlIHJlcHJlc2VudCBu YXR1cmFsIGpvaW5zIG9yIHJlcXVpcmVkIGpvaW4gb3JkZXJzIChlLmcuLCBmcm9tIG91dGVyCisg KiAgICBqb2lucyBvciBMQVRFUkFMIHJlZmVyZW5jZXMpLgorICoKKyAqIDIuIElmIGNsYXVzZV9w YWlyX3ByZXNlbnQgaXMgdHJ1ZSAobWVhbmluZyBhdCBsZWFzdCBvbmUgY2xhdXNlLWNvbm5lY3Rl ZAorICogICAgcGFpciBleGlzdHMgaW4gdGhpcyBpdGVyYXRpb24pLCB3ZSBwcnVuZSBDYXJ0ZXNp YW4gcHJvZHVjdHMgdG8gYXZvaWQKKyAqICAgIGV2YWx1YXRpbmcgZXhwZW5zaXZlIGNyb3NzIGpv aW5zIHdoZW4gYmV0dGVyIG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4KKyAqCisgKiBIb3dldmVyLCBp ZiBOTyBjbGF1c2UtY29ubmVjdGVkIHBhaXJzIGV4aXN0IGluIGFuIGl0ZXJhdGlvbiwgd2UgYWxs b3cKKyAqIENhcnRlc2lhbiBwcm9kdWN0cyB0byBiZSBjb25zaWRlcmVkLiBUaGlzIGVuc3VyZXMg d2UgY2FuIGFsd2F5cyBtYWtlCisgKiBwcm9ncmVzcyBldmVuIHdpdGggZGlzY29ubmVjdGVkIHF1 ZXJ5IGdyYXBocy4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhaXIgc2hvdWxkIGJlIHBy dW5lZCAoc2tpcHBlZCksIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wKK2dvb19j YW5kaWRhdGVfcHJ1bmFibGUoR29vU3RhdGUgKiBzdGF0ZSwgUmVsT3B0SW5mbyAqbGVmdCwKKwkJ CQkJICAgUmVsT3B0SW5mbyAqcmlnaHQpCit7CisJUGxhbm5lckluZm8gKnJvb3QgPSBzdGF0ZS0+ cm9vdDsKKwlib29sCQloYXNfY2xhdXNlID0gaGF2ZV9yZWxldmFudF9qb2luY2xhdXNlKHJvb3Qs IGxlZnQsIHJpZ2h0KTsKKwlib29sCQloYXNfcmVzdHJpY3Rpb24gPSBoYXZlX2pvaW5fb3JkZXJf cmVzdHJpY3Rpb24ocm9vdCwgbGVmdCwgcmlnaHQpOworCisJaWYgKGhhc19jbGF1c2UgfHwgaGFz X3Jlc3RyaWN0aW9uKQorCQlyZXR1cm4gZmFsc2U7CQkJLyogbmV2ZXIgcHJ1bmUgY2xhdXNlLWNv bm5lY3RlZCBqb2lucyAqLworCisJcmV0dXJuIHN0YXRlLT5jbGF1c2VfcGFpcl9wcmVzZW50Owor fQorCisvKgorICogZ29vX2J1aWxkX2NhbmRpZGF0ZQorICoJCUV2YWx1YXRlIGEgcG90ZW50aWFs IGpvaW4gYmV0d2VlbiB0d28gY2x1bXBzIGFuZCByZXR1cm4gYSBjYW5kaWRhdGUuCisgKgorICog VGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhIHNwZWN1bGF0aXZlIGpvaW4gZXZhbHVhdGlvbiB0byBl eHRyYWN0IGdyZWVkeSBtZXRyaWNzCisgKiB3aXRob3V0IHBlcm1hbmVudGx5IGNyZWF0aW5nIHRo ZSBqb2lucmVsLiBUaGUgcHJvY2VzcyBpczoKKyAqCisgKiAxLiBDaGVjayBiYXNpYyB2aWFiaWxp dHkgKHBydW5pbmcsIG92ZXJsYXBwaW5nIHJlbGlkcykuCisgKiAyLiBTd2l0Y2ggdG8gc2NyYXRj aF9jeHQgYW5kIGNyZWF0ZSB0aGUgam9pbnJlbCB1c2luZyBtYWtlX2pvaW5fcmVsKCkuCisgKiAz LiBHZW5lcmF0ZSBwYXRocyAoaW5jbHVkaW5nIHBhcnRpdGlvbndpc2UgYW5kIHBhcmFsbGVsIHZh cmlhbnRzKS4KKyAqIDQuIEV4dHJhY3QgdGhlIGdyZWVkeSBtZXRyaWNzIGZyb20gdGhlIGNoZWFw ZXN0IHBhdGguCisgKiA1LiBEaXNjYXJkIHRoZSBqb2lucmVsIGJ5IGNhbGxpbmcgZ29vX3Jlc2V0 X3Byb2JlX3N0YXRlKCkuCisgKiA2LiBDcmVhdGUgYSBsaWdodHdlaWdodCBHb29DYW5kaWRhdGUg aW4gY2FuZF9jeHQgd2l0aCB0aGUgZXh0cmFjdGVkIG1ldHJpY3MuCisgKgorICogVGhpcyBldmFs dWF0ZS1hbmQtZGlzY2FyZCBwYXR0ZXJuIHByZXZlbnRzIG1lbW9yeSBibG9hdCB3aGVuIGV2YWx1 YXRpbmcKKyAqIG1hbnkgY2FuZGlkYXRlcy4gVGhlIHdpbm5pbmcgY2FuZGlkYXRlIHdpbGwgYmUg cmVidWlsdCBwZXJtYW5lbnRseSBsYXRlcgorICogYnkgZ29vX2NvbW1pdF9qb2luKCkuCisgKgor ICogUmV0dXJucyBhIEdvb0NhbmRpZGF0ZSBzdHJ1Y3R1cmUsIG9yIE5VTEwgaWYgdGhlIGpvaW4g aXMgaWxsZWdhbCBvcgorICogb3ZlcmxhcHBpbmcuIEFzc3VtZXMgdGhlIGNhbGxlciBpcyBpbiBn b29fY3h0LgorICovCitzdGF0aWMgR29vQ2FuZGlkYXRlICogZ29vX2J1aWxkX2NhbmRpZGF0ZShH b29TdGF0ZSAqIHN0YXRlLCBSZWxPcHRJbmZvICpsZWZ0LAorCQkJCQkJCQkJCSAgUmVsT3B0SW5m byAqcmlnaHQpCit7CisJUGxhbm5lckluZm8gKnJvb3QgPSBzdGF0ZS0+cm9vdDsKKwlNZW1vcnlD b250ZXh0IG9sZGN4dDsKKwlpbnQJCQlzYXZlZF9yZWxfbGVuOworCXN0cnVjdCBIVEFCICpzYXZl ZF9oYXNoOworCVJlbE9wdEluZm8gKmpvaW5yZWw7CisJQ29zdAkJdG90YWxfY29zdDsKKwlHb29D YW5kaWRhdGUgKmNhbmQ7CisKKwkvKiBTa2lwIGlmIHRoaXMgcGFpciBzaG91bGQgYmUgcHJ1bmVk ICovCisJaWYgKGdvb19jYW5kaWRhdGVfcHJ1bmFibGUoc3RhdGUsIGxlZnQsIHJpZ2h0KSkKKwkJ cmV0dXJuIE5VTEw7CisKKwkvKiBTYW5pdHkgY2hlY2s6IGVuc3VyZSB0aGUgY2x1bXBzIGRvbid0 IG92ZXJsYXAgKi8KKwlpZiAoYm1zX292ZXJsYXAobGVmdC0+cmVsaWRzLCByaWdodC0+cmVsaWRz KSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIFNhdmUgc3RhdGUgYmVmb3JlIHNwZWN1bGF0 aXZlIGpvaW4gZXZhbHVhdGlvbi4gV2UnbGwgY3JlYXRlIHRoZSBqb2lucmVsCisJICogaW4gc2Ny YXRjaF9jeHQgYW5kIHRoZW4gZGlzY2FyZCBpdC4KKwkgKi8KKwlzYXZlZF9yZWxfbGVuID0gbGlz dF9sZW5ndGgocm9vdC0+am9pbl9yZWxfbGlzdCk7CisJc2F2ZWRfaGFzaCA9IHJvb3QtPmpvaW5f cmVsX2hhc2g7CisKKwkvKiBTd2l0Y2ggdG8gc2NyYXRjaF9jeHQgZm9yIHNwZWN1bGF0aXZlIGpv aW5yZWwgY3JlYXRpb24gKi8KKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oc3RhdGUt PnNjcmF0Y2hfY3h0KTsKKworCS8qCisJICogVGVtcG9yYXJpbHkgZGlzYWJsZSBqb2luX3JlbF9o YXNoIHNvIG1ha2Vfam9pbl9yZWwoKSBkb2Vzbid0IGZpbmQgb3IKKwkgKiBjYWNoZSB0aGlzIHNw ZWN1bGF0aXZlIGpvaW5yZWwuCisJICovCisJcm9vdC0+am9pbl9yZWxfaGFzaCA9IE5VTEw7CisK KwkvKgorCSAqIENyZWF0ZSB0aGUgam9pbnJlbCBhbmQgZ2VuZXJhdGUgYWxsIGl0cyBwYXRocy4K KwkgKgorCSAqIFRPRE86IFRoaXMgaXMgdGhlIG1vc3QgZXhwZW5zaXZlIHBhcnQgb2YgR09PLiBF YWNoIGNhbmRpZGF0ZSBldmFsdWF0aW9uCisJICogcGVyZm9ybXMgZnVsbCBwYXRoIGdlbmVyYXRp b24gdmlhIG1ha2Vfam9pbl9yZWwoKS4KKwkgKi8KKwlqb2lucmVsID0gbWFrZV9qb2luX3JlbChy b290LCBsZWZ0LCByaWdodCk7CisKKwlpZiAoam9pbnJlbCA9PSBOVUxMKQorCXsKKwkJLyogSW52 YWxpZCBvciBpbGxlZ2FsIGpvaW4sIGNsZWFuIHVwIGFuZCByZXR1cm4gTlVMTCAqLworCQlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKwkJZ29vX3Jlc2V0X3Byb2JlX3N0YXRlKHN0YXRl LCBzYXZlZF9yZWxfbGVuLCBzYXZlZF9oYXNoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJYm9v bAkJaXNfdG9wX3JlbCA9IGJtc19lcXVhbChqb2lucmVsLT5yZWxpZHMsIHJvb3QtPmFsbF9xdWVy eV9yZWxzKTsKKworCWdlbmVyYXRlX3BhcnRpdGlvbndpc2Vfam9pbl9wYXRocyhyb290LCBqb2lu cmVsKTsKKwlpZiAoIWlzX3RvcF9yZWwpCisJCWdlbmVyYXRlX3VzZWZ1bF9nYXRoZXJfcGF0aHMo cm9vdCwgam9pbnJlbCwgZmFsc2UpOworCXNldF9jaGVhcGVzdChqb2lucmVsKTsKKworCWlmIChq b2lucmVsLT5ncm91cGVkX3JlbCAhPSBOVUxMICYmICFpc190b3BfcmVsKQorCXsKKwkJUmVsT3B0 SW5mbyAqZ3JvdXBlZF9yZWwgPSBqb2lucmVsLT5ncm91cGVkX3JlbDsKKworCQlBc3NlcnQoSVNf R1JPVVBFRF9SRUwoZ3JvdXBlZF9yZWwpKTsKKworCQlnZW5lcmF0ZV9ncm91cGVkX3BhdGhzKHJv b3QsIGdyb3VwZWRfcmVsLCBqb2lucmVsKTsKKwkJc2V0X2NoZWFwZXN0KGdyb3VwZWRfcmVsKTsK Kwl9CisKKwl0b3RhbF9jb3N0ID0gam9pbnJlbC0+Y2hlYXBlc3RfdG90YWxfcGF0aC0+dG90YWxf Y29zdDsKKworCS8qCisJICogU3dpdGNoIGJhY2sgdG8gZ29vX2N4dCBhbmQgZGlzY2FyZCB0aGUg c3BlY3VsYXRpdmUgam9pbnJlbC4KKwkgKiBnb29fcmVzZXRfcHJvYmVfc3RhdGUoKSB3aWxsIGNs ZWFuIHVwIGpvaW5fcmVsX2xpc3QsIGpvaW5fcmVsX2hhc2gsIGFuZAorCSAqIHJlc2V0IHNjcmF0 Y2hfY3h0IHRvIGZyZWUgYWxsIHRoZSBqb2lucmVsJ3MgbWVtb3J5LgorCSAqLworCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCWdvb19yZXNldF9wcm9iZV9zdGF0ZShzdGF0ZSwgc2F2 ZWRfcmVsX2xlbiwgc2F2ZWRfaGFzaCk7CisKKwkvKgorCSAqIE5vdyBjcmVhdGUgdGhlIGNhbmRp ZGF0ZSBzdHJ1Y3R1cmUgaW4gY2FuZF9jeHQuIFRoaXMgd2lsbCBzdXJ2aXZlIHVudGlsCisJICog dGhlIGVuZCBvZiB0aGlzIGl0ZXJhdGlvbiAod2hlbiBjYW5kX2N4dCBpcyByZXNldCkuCisJICov CisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHN0YXRlLT5jYW5kX2N4dCk7CisJY2Fu ZCA9IHBhbGxvYyhzaXplb2YoR29vQ2FuZGlkYXRlKSk7CisJY2FuZC0+bGVmdCA9IGxlZnQ7CisJ Y2FuZC0+cmlnaHQgPSByaWdodDsKKwljYW5kLT50b3RhbF9jb3N0ID0gdG90YWxfY29zdDsKKwlN ZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKworCXJldHVybiBjYW5kOworfQorCisvKgor ICogZ29vX3Jlc2V0X3Byb2JlX3N0YXRlCisgKgkJQ2xlYW4gdXAgYWZ0ZXIgYSBzcGVjdWxhdGl2 ZSBqb2lucmVsIGV2YWx1YXRpb24uCisgKgorICogUmV2ZXJ0cyB0aGUgcGxhbm5lcidzIGpvaW5f cmVsX2xpc3QgYW5kIGpvaW5fcmVsX2hhc2ggdG8gdGhlaXIgc2F2ZWQgc3RhdGUsCisgKiByZW1v dmluZyBhbnkgam9pbnJlbHMgdGhhdCB3ZXJlIGNyZWF0ZWQgZHVyaW5nIHNwZWN1bGF0aXZlIGV2 YWx1YXRpb24uCisgKiBBbHNvIHJlc2V0cyBzY3JhdGNoX2N4dCB0byBmcmVlIGFsbCBtZW1vcnkg dXNlZCBieSB0aGUgZGlzY2FyZGVkIGpvaW5yZWwKKyAqIGFuZCBpdHMgcGF0aHMuCisgKgorICog VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgZXh0cmFjdGluZyBjb3N0IG1ldHJpY3MgZnJv bSBhIHNwZWN1bGF0aXZlCisgKiBqb2lucmVsIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBrZWVwLgor ICovCitzdGF0aWMgdm9pZAorZ29vX3Jlc2V0X3Byb2JlX3N0YXRlKEdvb1N0YXRlICogc3RhdGUs IGludCBzYXZlZF9yZWxfbGVuLAorCQkJCQkgIHN0cnVjdCBIVEFCICpzYXZlZF9oYXNoKQorewor CVBsYW5uZXJJbmZvICpyb290ID0gc3RhdGUtPnJvb3Q7CisKKwkvKiBSZW1vdmUgc3BlY3VsYXRp dmUgam9pbnJlbHMgZnJvbSB0aGUgcGxhbm5lcidzIGxpc3RzICovCisJcm9vdC0+am9pbl9yZWxf bGlzdCA9IGxpc3RfdHJ1bmNhdGUocm9vdC0+am9pbl9yZWxfbGlzdCwgc2F2ZWRfcmVsX2xlbik7 CisJcm9vdC0+am9pbl9yZWxfaGFzaCA9IHNhdmVkX2hhc2g7CisKKwkvKiBGcmVlIGFsbCBtZW1v cnkgdXNlZCBkdXJpbmcgc3BlY3VsYXRpdmUgZXZhbHVhdGlvbiAqLworCU1lbW9yeUNvbnRleHRS ZXNldChzdGF0ZS0+c2NyYXRjaF9jeHQpOworfQorCisvKgorICogZ29vX2NvbW1pdF9qb2luCisg KgkJUGVybWFuZW50bHkgY3JlYXRlIHRoZSBjaG9zZW4gam9pbiBhbmQgdXBkYXRlIHRoZSBjbHVt cHMgbGlzdC4KKyAqCisgKiBBZnRlciBzZWxlY3RpbmcgdGhlIGJlc3QgY2FuZGlkYXRlIGluIGFu IGl0ZXJhdGlvbiwgd2UgbmVlZCB0byBwZXJtYW5lbnRseQorICogY3JlYXRlIGl0cyBqb2lucmVs ICh3aXRoIGFsbCBwYXRocykgYW5kIGludGVncmF0ZSBpdCBpbnRvIHRoZSBwbGFubmVyIHN0YXRl LgorICogVGhpcyBmdW5jdGlvbjoKKyAqCisgKiAxLiBTd2l0Y2hlcyB0byBwbGFubmVyX2N4dCBh bmQgY3JlYXRlcyB0aGUgam9pbnJlbCB1c2luZyBtYWtlX2pvaW5fcmVsKCkuCisgKiAgICBVbmxp a2UgdGhlIHNwZWN1bGF0aXZlIGV2YWx1YXRpb24sIHRoaXMgam9pbnJlbCBpcyBrZXB0IHBlcm1h bmVudGx5LgorICogMi4gR2VuZXJhdGVzIHBhcnRpdGlvbndpc2UgYW5kIHBhcmFsbGVsIHBhdGgg dmFyaWFudHMuCisgKiAzLiBEZXRlcm1pbmVzIHRoZSBjaGVhcGVzdCBwYXRocy4KKyAqIDQuIFVw ZGF0ZXMgc3RhdGUtPmNsdW1wcyBieSByZW1vdmluZyB0aGUgdHdvIGlucHV0IGNsdW1wcyBhbmQg YWRkaW5nIHRoZQorICogICAgbmV3IGpvaW5yZWwgYXMgYSBzaW5nbGUgY2x1bXAuCisgKgorICog VGhlIG5leHQgaXRlcmF0aW9uIHdpbGwgdHJlYXQgdGhpcyBqb2lucmVsIGFzIGFuIGF0b21pYyB1 bml0IHRoYXQgY2FuIGJlCisgKiBqb2luZWQgd2l0aCBvdGhlciByZW1haW5pbmcgY2x1bXBzLgor ICoKKyAqIFJldHVybnMgdGhlIG5ld2x5IGNyZWF0ZWQgam9pbnJlbC4gQXNzdW1lcyB0aGUgY2Fs bGVyIGlzIGluIGdvb19jeHQuCisgKi8KK3N0YXRpYyBSZWxPcHRJbmZvICoKK2dvb19jb21taXRf am9pbihHb29TdGF0ZSAqIHN0YXRlLCBHb29DYW5kaWRhdGUgKiBjYW5kKQoreworCU1lbW9yeUNv bnRleHQgb2xkY3h0OworCVBsYW5uZXJJbmZvICpyb290ID0gc3RhdGUtPnJvb3Q7CisJUmVsT3B0 SW5mbyAqam9pbnJlbDsKKworCS8qCisJICogQ3JlYXRlIHRoZSBqb2lucmVsIHBlcm1hbmVudGx5 IGluIHBsYW5uZXJfY3h0LiBVbmxpa2UgdGhlIHNwZWN1bGF0aXZlCisJICogZXZhbHVhdGlvbiBp biBnb29fYnVpbGRfY2FuZGlkYXRlKCksIHRoaXMgam9pbnJlbCB3aWxsIGJlIGtlcHQgYW5kCisJ ICogYWRkZWQgdG8gcm9vdC0+am9pbl9yZWxfbGlzdCBmb3IgdXNlIGJ5IHRoZSByZXN0IG9mIHRo ZSBwbGFubmVyLgorCSAqLworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhyb290LT5w bGFubmVyX2N4dCk7CisKKwlqb2lucmVsID0gbWFrZV9qb2luX3JlbChyb290LCBjYW5kLT5sZWZ0 LCBjYW5kLT5yaWdodCk7CisJaWYgKGpvaW5yZWwgPT0gTlVMTCkKKwl7CisJCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjeHQpOworCQllbG9nKEVSUk9SLCAiR09PIGpvaW4gc2VhcmNoIGZhaWxl ZCB0byBjcmVhdGUgam9pbiByZWxhdGlvbiIpOworCX0KKworCS8qIEdlbmVyYXRlIGFkZGl0aW9u YWwgcGF0aCB2YXJpYW50cywganVzdCBsaWtlIHN0YW5kYXJkX2pvaW5fc2VhcmNoKCkgKi8KKwli b29sCQlpc190b3BfcmVsID0gYm1zX2VxdWFsKGpvaW5yZWwtPnJlbGlkcywgcm9vdC0+YWxsX3F1 ZXJ5X3JlbHMpOworCisJZ2VuZXJhdGVfcGFydGl0aW9ud2lzZV9qb2luX3BhdGhzKHJvb3QsIGpv aW5yZWwpOworCWlmICghaXNfdG9wX3JlbCkKKwkJZ2VuZXJhdGVfdXNlZnVsX2dhdGhlcl9wYXRo cyhyb290LCBqb2lucmVsLCBmYWxzZSk7CisJc2V0X2NoZWFwZXN0KGpvaW5yZWwpOworCisJaWYg KGpvaW5yZWwtPmdyb3VwZWRfcmVsICE9IE5VTEwgJiYgIWlzX3RvcF9yZWwpCisJeworCQlSZWxP cHRJbmZvICpncm91cGVkX3JlbCA9IGpvaW5yZWwtPmdyb3VwZWRfcmVsOworCisJCUFzc2VydChJ U19HUk9VUEVEX1JFTChncm91cGVkX3JlbCkpOworCisJCWdlbmVyYXRlX2dyb3VwZWRfcGF0aHMo cm9vdCwgZ3JvdXBlZF9yZWwsIGpvaW5yZWwpOworCQlzZXRfY2hlYXBlc3QoZ3JvdXBlZF9yZWwp OworCX0KKworCS8qCisJICogU3dpdGNoIGJhY2sgdG8gZ29vX2N4dCBhbmQgdXBkYXRlIHRoZSBj bHVtcHMgbGlzdC4gUmVtb3ZlIHRoZSB0d28gaW5wdXQKKwkgKiBjbHVtcHMgYW5kIGFkZCB0aGUg bmV3IGpvaW5yZWwgYXMgYSBzaW5nbGUgY2x1bXAuCisJICovCisJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZGN4dCk7CisKKwlzdGF0ZS0+Y2x1bXBzID0gbGlzdF9kZWxldGVfcHRyKHN0YXRlLT5j bHVtcHMsIGNhbmQtPmxlZnQpOworCXN0YXRlLT5jbHVtcHMgPSBsaXN0X2RlbGV0ZV9wdHIoc3Rh dGUtPmNsdW1wcywgY2FuZC0+cmlnaHQpOworCXN0YXRlLT5jbHVtcHMgPSBsYXBwZW5kKHN0YXRl LT5jbHVtcHMsIGpvaW5yZWwpOworCisJcmV0dXJuIGpvaW5yZWw7Cit9CisKKy8qCisgKiBnb29f Y2FuZGlkYXRlX2JldHRlcgorICoJCUNvbXBhcmUgdHdvIGpvaW4gY2FuZGlkYXRlcyBhbmQgZGV0 ZXJtaW5lIHdoaWNoIGlzIGJldHRlci4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgY2FuZGlkYXRl ICdhJyBzaG91bGQgYmUgcHJlZmVycmVkIG92ZXIgY2FuZGlkYXRlICdiJy4KKyAqLworc3RhdGlj IGJvb2wKK2dvb19jYW5kaWRhdGVfYmV0dGVyKEdvb0NhbmRpZGF0ZSAqIGEsIEdvb0NhbmRpZGF0 ZSAqIGIpCit7CisJcmV0dXJuIChhLT50b3RhbF9jb3N0IDwgYi0+dG90YWxfY29zdCk7Cit9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9tZXNvbi5idWlsZCBiL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL21lc29uLmJ1aWxkCmluZGV4IDEyZjM2ZDg1Y2I2Li5lNTA0 NjM2NWEzNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvbWVzb24uYnVp bGQKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvbWVzb24uYnVpbGQKQEAgLTUsNiAr NSw3IEBAIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKICAgJ2NsYXVzZXNlbC5jJywKICAgJ2Nv c3RzaXplLmMnLAogICAnZXF1aXZjbGFzcy5jJywKKyAgJ2dvby5jJywKICAgJ2luZHhwYXRoLmMn LAogICAnam9pbnBhdGguYycsCiAgICdqb2lucmVscy5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9ndWNfcGFyYW1ldGVycy5kYXQKaW5kZXggM2I5ZDgzNDkwNzguLmE4Y2UzMWFiOGE3IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9z cmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAtODQwLDYgKzg0MCwx NSBAQAogICBib290X3ZhbCA9PiAndHJ1ZScsCiB9LAogCisvKiBXSVA6IGZvciBub3cga2VlcCB0 aGlzIGluIFFVRVJZX1RVTklOR19HRVFPIGdyb3VwIGZvciB0ZXN0aW5nIGNvbnZlbmllbmNlICov Cit7IG5hbWUgPT4gJ2VuYWJsZV9nb29fam9pbl9zZWFyY2gnLCB0eXBlID0+ICdib29sJywgY29u dGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVFUllfVFVOSU5HX0dFUU8nLAorICBz aG9ydF9kZXNjID0+ICdFbmFibGVzIHRoZSBwbGFubmVyXCdzIHVzZSBvZiBHT08gam9pbiBzZWFy Y2ggZm9yIGxhcmdlIGpvaW4gcHJvYmxlbXMuJywKKyAgbG9uZ19kZXNjID0+ICdHcmVlZHkgT3Bl cmF0b3IgT3JkZXJpbmcgKEdPTykgaXMgYSBkZXRlcm1pbmlzdGljIGpvaW4gc2VhcmNoIGFsZ29y aXRobSBmb3IgcXVlcmllcyB3aXRoIG1hbnkgcmVsYXRpb25zLicsCisgIGZsYWdzID0+ICdHVUNf RVhQTEFJTicsCisgIHZhcmlhYmxlID0+ICdlbmFibGVfZ29vX2pvaW5fc2VhcmNoJywKKyAgYm9v dF92YWwgPT4gJ2ZhbHNlJywKK30sCisKIHsgbmFtZSA9PiAnZW5hYmxlX2dyb3VwX2J5X3Jlb3Jk ZXJpbmcnLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9 PiAnUVVFUllfVFVOSU5HX01FVEhPRCcsCiAgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgcmVvcmRl cmluZyBvZiBHUk9VUCBCWSBrZXlzLicsCiAgIGZsYWdzID0+ICdHVUNfRVhQTEFJTicsCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgYi9z cmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKaW5kZXggZGM5ZTIy NTVmOGEuLjgyODRlOGIxZGE3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bv c3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jl c3FsLmNvbmYuc2FtcGxlCkBAIC00NTYsNiArNDU2LDcgQEAKICMgLSBHZW5ldGljIFF1ZXJ5IE9w dGltaXplciAtCiAKICNnZXFvID0gb24KKyNlbmFibGVfZ29vX2pvaW5fc2VhcmNoID0gb2ZmCiAj Z2Vxb190aHJlc2hvbGQgPSAxMgogI2dlcW9fZWZmb3J0ID0gNSAgICAgICAgICAgICAgICAgICAg ICAgICMgcmFuZ2UgMS0xMAogI2dlcW9fcG9vbF9zaXplID0gMCAgICAgICAgICAgICAgICAgICAg ICMgc2VsZWN0cyBkZWZhdWx0IGJhc2VkIG9uIGVmZm9ydApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvb3B0aW1pemVyL2dvby5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2dvby5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wMDgwZGZhMmFjOAotLS0gL2Rldi9udWxs CisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9nb28uaApAQCAtMCwwICsxLDIzIEBACisvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqCisgKiBnb28uaAorICogICAgIHByb3RvdHlwZSBmb3IgdGhlIGdy ZWVkeSBvcGVyYXRvciBvcmRlcmluZyBqb2luIHNlYXJjaAorICoKKyAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5 IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICogICAgIHNyYy9pbmNsdWRl L29wdGltaXplci9nb28uaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIEdP T19ICisjZGVmaW5lIEdPT19ICisKKyNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKKyNpbmNs dWRlICJub2Rlcy9wZ19saXN0LmgiCisKK2V4dGVybiBSZWxPcHRJbmZvICpnb29fam9pbl9zZWFy Y2goUGxhbm5lckluZm8gKnJvb3QsIGludCBsZXZlbHNfbmVlZGVkLAorCQkJCQkJCQkgICBMaXN0 ICppbml0aWFsX3JlbHMpOworCisjZW5kaWYJCQkJCQkJLyogR09PX0ggKi8KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3Bh dGhzLmgKaW5kZXggZjZhNjJkZjBiNDMuLjViM2ViZTVmMWQyIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9vcHRpbWl6ZXIvcGF0aHMuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMu aApAQCAtMjEsNiArMjEsNyBAQAogICogYWxscGF0aHMuYwogICovCiBleHRlcm4gUEdETExJTVBP UlQgYm9vbCBlbmFibGVfZ2VxbzsKK2V4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9nb29f am9pbl9zZWFyY2g7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfZWFnZXJfYWdncmVn YXRlOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBnZXFvX3RocmVzaG9sZDsKIGV4dGVybiBQR0RM TElNUE9SVCBkb3VibGUgbWluX2VhZ2VyX2FnZ19ncm91cF9zaXplOwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9nb28ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9nb28ub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wYjQxNjM0 Yzk2OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ29vLm91 dApAQCAtMCwwICsxLDcwMCBAQAorLS0KKy0tIEdPTyAoR3JlZWR5IE9wZXJhdG9yIE9yZGVyaW5n KSBKb2luIFNlYXJjaCBUZXN0cworLS0KKy0tIFRoaXMgdGVzdCBzdWl0ZSB2YWxpZGF0ZXMgdGhl IEdPTyBqb2luIG9yZGVyaW5nIGFsZ29yaXRobSBhbmQgdmVyaWZpZXMKKy0tIGNvcnJlY3QgYmVo YXZpb3IgZm9yIHZhcmlvdXMgcXVlcnkgcGF0dGVybnMuCistLQorLS0gQ3JlYXRlIHRlc3QgdGFi bGVzIHdpdGggdmFyaW91cyBzaXplcyBhbmQgam9pbiBwYXR0ZXJucworQ1JFQVRFIFRFTVAgVEFC TEUgdDEgKGEgaW50LCBiIGludCk7CitDUkVBVEUgVEVNUCBUQUJMRSB0MiAoYSBpbnQsIGMgaW50 KTsKK0NSRUFURSBURU1QIFRBQkxFIHQzIChiIGludCwgZCBpbnQpOworQ1JFQVRFIFRFTVAgVEFC TEUgdDQgKGMgaW50LCBlIGludCk7CitDUkVBVEUgVEVNUCBUQUJMRSB0NSAoZCBpbnQsIGYgaW50 KTsKK0NSRUFURSBURU1QIFRBQkxFIHQ2IChlIGludCwgZyBpbnQpOworQ1JFQVRFIFRFTVAgVEFC TEUgdDcgKGYgaW50LCBoIGludCk7CitDUkVBVEUgVEVNUCBUQUJMRSB0OCAoZyBpbnQsIGkgaW50 KTsKK0NSRUFURSBURU1QIFRBQkxFIHQ5IChoIGludCwgaiBpbnQpOworQ1JFQVRFIFRFTVAgVEFC TEUgdDEwIChpIGludCwgayBpbnQpOworQ1JFQVRFIFRFTVAgVEFCTEUgdDExIChqIGludCwgbCBp bnQpOworQ1JFQVRFIFRFTVAgVEFCTEUgdDEyIChrIGludCwgbSBpbnQpOworQ1JFQVRFIFRFTVAg VEFCTEUgdDEzIChsIGludCwgbiBpbnQpOworQ1JFQVRFIFRFTVAgVEFCTEUgdDE0IChtIGludCwg byBpbnQpOworQ1JFQVRFIFRFTVAgVEFCTEUgdDE1IChuIGludCwgcCBpbnQpOworQ1JFQVRFIFRF TVAgVEFCTEUgdDE2IChvIGludCwgcSBpbnQpOworQ1JFQVRFIFRFTVAgVEFCTEUgdDE3IChwIGlu dCwgciBpbnQpOworQ1JFQVRFIFRFTVAgVEFCTEUgdDE4IChxIGludCwgcyBpbnQpOworLS0gUG9w dWxhdGUgd2l0aCBzbWFsbCBhbW91bnQgb2YgZGF0YQorSU5TRVJUIElOVE8gdDEgU0VMRUNUIGks IGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgaTsKK0lOU0VSVCBJTlRPIHQyIFNFTEVDVCBp LCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGk7CitJTlNFUlQgSU5UTyB0MyBTRUxFQ1Qg aSwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwKSBpOworSU5TRVJUIElOVE8gdDQgU0VMRUNU IGksIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgaTsKK0lOU0VSVCBJTlRPIHQ1IFNFTEVD VCBpLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGk7CitJTlNFUlQgSU5UTyB0NiBTRUxF Q1QgaSwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwKSBpOworSU5TRVJUIElOVE8gdDcgU0VM RUNUIGksIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgaTsKK0lOU0VSVCBJTlRPIHQ4IFNF TEVDVCBpLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGk7CitJTlNFUlQgSU5UTyB0OSBT RUxFQ1QgaSwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwKSBpOworSU5TRVJUIElOVE8gdDEw IFNFTEVDVCBpLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGk7CitJTlNFUlQgSU5UTyB0 MTEgU0VMRUNUIGksIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgaTsKK0lOU0VSVCBJTlRP IHQxMiBTRUxFQ1QgaSwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwKSBpOworSU5TRVJUIElO VE8gdDEzIFNFTEVDVCBpLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGk7CitJTlNFUlQg SU5UTyB0MTQgU0VMRUNUIGksIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgaTsKK0lOU0VS VCBJTlRPIHQxNSBTRUxFQ1QgaSwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwKSBpOworSU5T RVJUIElOVE8gdDE2IFNFTEVDVCBpLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGk7CitJ TlNFUlQgSU5UTyB0MTcgU0VMRUNUIGksIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgaTsK K0lOU0VSVCBJTlRPIHQxOCBTRUxFQ1QgaSwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwKSBp OworQU5BTFlaRTsKKy0tCistLSBCYXNpYyAzLXdheSBqb2luIChzYW5pdHkgY2hlY2spCistLQor U0VUIGVuYWJsZV9nb29fam9pbl9zZWFyY2ggPSBvbjsKK1NFVCBnZXFvX3RocmVzaG9sZCA9IDI7 CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikKK0ZST00gKFZBTFVFUyAoMSks KDIpKSBBUyBhKHgpCitKT0lOIChWQUxVRVMgKDEpLCgyKSkgQVMgYih4KSBVU0lORyAoeCkKK0pP SU4gKFZBTFVFUyAoMSksKDMpKSBBUyBjKHgpIFVTSU5HICh4KTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2gg Q29uZDogKCIqVkFMVUVTKiIuY29sdW1uMSA9ICIqVkFMVUVTKl8yIi5jb2x1bW4xKQorICAgICAg ICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAoIipWQUxVRVMqIi5j b2x1bW4xID0gIipWQUxVRVMqXzEiLmNvbHVtbjEpCisgICAgICAgICAgICAgICAtPiAgVmFsdWVz IFNjYW4gb24gIipWQUxVRVMqIgorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBWYWx1ZXMgU2NhbiBvbiAiKlZBTFVFUypfMSIKKyAgICAgICAgIC0+ICBI YXNoCisgICAgICAgICAgICAgICAtPiAgVmFsdWVzIFNjYW4gb24gIipWQUxVRVMqXzIiCisoMTAg cm93cykKKworU0VMRUNUIGNvdW50KCopCitGUk9NIChWQUxVRVMgKDEpLCgyKSkgQVMgYSh4KQor Sk9JTiAoVkFMVUVTICgxKSwoMikpIEFTIGIoeCkgVVNJTkcgKHgpCitKT0lOIChWQUxVRVMgKDEp LCgzKSkgQVMgYyh4KSBVU0lORyAoeCk7CisgY291bnQgCistLS0tLS0tCisgICAgIDEKKygxIHJv dykKKworLS0KKy0tIERpc2Nvbm5lY3RlZCBncmFwaCAoQ2FydGVzaWFuIHByb2R1Y3RzIHJlcXVp cmVkKQorLS0KKy0tIFRoaXMgdGVzdHMgR09PJ3MgYWJpbGl0eSB0byBoYW5kbGUgcXVlcmllcyB3 aGVyZSBzb21lIHJlbGF0aW9ucworLS0gaGF2ZSBubyBqb2luIGNsYXVzZXMgY29ubmVjdGluZyB0 aGVtLiBHT08gc2hvdWxkIGFsbG93IENhcnRlc2lhbgorLS0gcHJvZHVjdHMgd2hlbiBubyBjbGF1 c2UtY29ubmVjdGVkIGpvaW5zIGFyZSBhdmFpbGFibGUuCistLQorRVhQTEFJTiAoQ09TVFMgT0ZG KQorU0VMRUNUIGNvdW50KCopCitGUk9NIHQxLCB0MiwgdDUKK1dIRVJFIHQxLmEgPSAxIEFORCB0 Mi5jID0gMiBBTkQgdDUuZiA9IDM7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisg ICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0NQorICAgICAgICAg ICAgICAgRmlsdGVyOiAoZiA9IDMpCisgICAgICAgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0MQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAo YSA9IDEpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdDIKKyAgICAgICAgICAgICAg ICAgICAgIEZpbHRlcjogKGMgPSAyKQorKDkgcm93cykKKworU0VMRUNUIGNvdW50KCopCitGUk9N IHQxLCB0MiwgdDUKK1dIRVJFIHQxLmEgPSAxIEFORCB0Mi5jID0gMiBBTkQgdDUuZiA9IDM7Cisg Y291bnQgCistLS0tLS0tCisgICAgIDEKKygxIHJvdykKKworLS0KKy0tIFN0YXIgc2NoZW1hIChm YWN0IHRhYmxlIHdpdGggbXVsdGlwbGUgZGltZW5zaW9uIHRhYmxlcykKKy0tCistLSBUZXN0IEdP TyB3aXRoIGEgdHlwaWNhbCBzdGFyIHNjaGVtYSBqb2luIHBhdHRlcm4uCistLQorQ1JFQVRFIFRF TVAgVEFCTEUgZmFjdCAoaWQgaW50LCBkaW0xX2lkIGludCwgZGltMl9pZCBpbnQsIGRpbTNfaWQg aW50LCBkaW00X2lkIGludCwgdmFsdWUgaW50KTsKK0NSRUFURSBURU1QIFRBQkxFIGRpbTEgKGlk IGludCwgbmFtZSB0ZXh0KTsKK0NSRUFURSBURU1QIFRBQkxFIGRpbTIgKGlkIGludCwgbmFtZSB0 ZXh0KTsKK0NSRUFURSBURU1QIFRBQkxFIGRpbTMgKGlkIGludCwgbmFtZSB0ZXh0KTsKK0NSRUFU RSBURU1QIFRBQkxFIGRpbTQgKGlkIGludCwgbmFtZSB0ZXh0KTsKK0lOU0VSVCBJTlRPIGZhY3Qg U0VMRUNUIGksIGksIGksIGksIGksIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGk7CitJ TlNFUlQgSU5UTyBkaW0xIFNFTEVDVCBpLCAnZGltMV8nfHxpIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsMTApIGk7CitJTlNFUlQgSU5UTyBkaW0yIFNFTEVDVCBpLCAnZGltMl8nfHxpIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsMTApIGk7CitJTlNFUlQgSU5UTyBkaW0zIFNFTEVDVCBpLCAnZGltM18n fHxpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGk7CitJTlNFUlQgSU5UTyBkaW00IFNFTEVD VCBpLCAnZGltNF8nfHxpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGk7CitBTkFMWVpFOwor RVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopCitGUk9NIGZhY3QKK0pPSU4gZGlt MSBPTiBmYWN0LmRpbTFfaWQgPSBkaW0xLmlkCitKT0lOIGRpbTIgT04gZmFjdC5kaW0yX2lkID0g ZGltMi5pZAorSk9JTiBkaW0zIE9OIGZhY3QuZGltM19pZCA9IGRpbTMuaWQKK0pPSU4gZGltNCBP TiBmYWN0LmRpbTRfaWQgPSBkaW00LmlkCitXSEVSRSBkaW0xLmlkIDwgNTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgTmVzdGVkIExv b3AKKyAgICAgICAgIEpvaW4gRmlsdGVyOiAoZmFjdC5kaW00X2lkID0gZGltNC5pZCkKKyAgICAg ICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKGRpbTMuaWQgPSBm YWN0LmRpbTNfaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZGltMworICAgICAg ICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKGRpbTIuaWQgPSBmYWN0LmRpbTJf aWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZGltMgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEhhc2ggQ29uZDogKGZhY3QuZGltMV9pZCA9IGRpbTEuaWQpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZmFjdAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBkaW0xCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChpZCA8 IDUpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZGltNAorKDE4IHJvd3MpCisKKy0tCistLSBM b25nIGpvaW4gY2hhaW4KKy0tCistLSBUZXN0cyBHT08gd2l0aCBhIGxhcmdlIGpvaW4gaW52b2x2 aW5nIDE1IHJlbGF0aW9ucy4KKy0tCitTRVQgZ2Vxb190aHJlc2hvbGQgPSA4OworRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopCitGUk9NIHQxCitKT0lOIHQyIE9OIHQxLmEgPSB0 Mi5hCitKT0lOIHQzIE9OIHQxLmIgPSB0My5iCitKT0lOIHQ0IE9OIHQyLmMgPSB0NC5jCitKT0lO IHQ1IE9OIHQzLmQgPSB0NS5kCitKT0lOIHQ2IE9OIHQ0LmUgPSB0Ni5lCitKT0lOIHQ3IE9OIHQ1 LmYgPSB0Ny5mCitKT0lOIHQ4IE9OIHQ2LmcgPSB0OC5nCitKT0lOIHQ5IE9OIHQ3LmggPSB0OS5o CitKT0lOIHQxMCBPTiB0OC5pID0gdDEwLmkKK0pPSU4gdDExIE9OIHQ5LmogPSB0MTEuagorSk9J TiB0MTIgT04gdDEwLmsgPSB0MTIuaworSk9JTiB0MTMgT04gdDExLmwgPSB0MTMubAorSk9JTiB0 MTQgT04gdDEyLm0gPSB0MTQubQorSk9JTiB0MTUgT04gdDEzLm4gPSB0MTUubjsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29u ZDogKHQ3LmggPSB0OS5oKQorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAg SGFzaCBDb25kOiAodDguaSA9IHQxMC5pKQorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgor ICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDIuYyA9IHQ0LmMpCisgICAgICAgICAg ICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNo IENvbmQ6ICh0My5iID0gdDEuYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNo IEpvaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQ1LmYg PSB0Ny5mKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDMuZCA9 IHQ1LmQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gdDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNo CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gdDUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdDcKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBIYXNoIENvbmQ6ICh0MS5hID0gdDIuYSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0MQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0MgorICAgICAgICAgICAgICAgICAgICAg LT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQ2LmcgPSB0OC5nKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDQuZSA9IHQ2LmUpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdDQKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdDYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdDgKKyAgICAgICAgICAgICAg IC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MTIubSA9IHQxNC5tKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSGFzaCBDb25kOiAodDEwLmsgPSB0MTIuaykKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0MTAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gdDEyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHQxNAorICAg ICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAg ICAgICAgICAgIEhhc2ggQ29uZDogKHQxMS5sID0gdDEzLmwpCisgICAgICAgICAgICAgICAgICAg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0 OS5qID0gdDExLmopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g dDkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdDExCisgICAgICAgICAgICAgICAgICAg ICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDEzLm4gPSB0MTUubikK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0MTMKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdDE1CisoNTggcm93cykKKwor LS0gRXhlY3V0ZSB0byB2ZXJpZnkgY29ycmVjdG5lc3MKK1NFTEVDVCBjb3VudCgqKQorRlJPTSB0 MQorSk9JTiB0MiBPTiB0MS5hID0gdDIuYQorSk9JTiB0MyBPTiB0MS5iID0gdDMuYgorSk9JTiB0 NCBPTiB0Mi5jID0gdDQuYworSk9JTiB0NSBPTiB0My5kID0gdDUuZAorSk9JTiB0NiBPTiB0NC5l ID0gdDYuZQorSk9JTiB0NyBPTiB0NS5mID0gdDcuZgorSk9JTiB0OCBPTiB0Ni5nID0gdDguZwor Sk9JTiB0OSBPTiB0Ny5oID0gdDkuaAorSk9JTiB0MTAgT04gdDguaSA9IHQxMC5pCitKT0lOIHQx MSBPTiB0OS5qID0gdDExLmoKK0pPSU4gdDEyIE9OIHQxMC5rID0gdDEyLmsKK0pPSU4gdDEzIE9O IHQxMS5sID0gdDEzLmwKK0pPSU4gdDE0IE9OIHQxMi5tID0gdDE0Lm0KK0pPSU4gdDE1IE9OIHQx My5uID0gdDE1Lm47CisgY291bnQgCistLS0tLS0tCisgICAgMTAKKygxIHJvdykKKworLS0KKy0t IEJ1c2h5IHRyZWUgc3VwcG9ydAorLS0KKy0tIFZlcmlmeSB0aGF0IEdPTyBjYW4gcHJvZHVjZSBi dXNoeSBqb2luIHRyZWVzLCBub3QganVzdCBsZWZ0LWRlZXAgb3IgcmlnaHQtZGVlcC4KKy0tIFdp dGggYXBwcm9wcmlhdGUgY29zdCBtb2RlbCwgR09PIHNob3VsZCBqb2luICh0MSx0MikgYW5kICh0 Myx0NCkgZmlyc3QsCistLSB0aGVuIGpvaW4gdGhvc2UgcmVzdWx0cyAoYnVzaHkgdHJlZSkuCist LQorU0VUIGdlcW9fdGhyZXNob2xkID0gNDsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBj b3VudCgqKQorRlJPTSB0MSwgdDIsIHQzLCB0NAorV0hFUkUgdDEuYSA9IHQyLmEKKyAgQU5EIHQz LmIgPSB0NC5jCisgIEFORCB0MS5hID0gdDMuYjsKKyAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2gg Q29uZDogKHQxLmEgPSB0My5iKQorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAg ICAgSGFzaCBDb25kOiAodDEuYSA9IHQyLmEpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gdDEKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gdDIKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgSGFz aCBKb2luCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0My5iID0gdDQuYykKKyAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0MworICAgICAgICAgICAgICAgICAg ICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0 NAorKDE0IHJvd3MpCisKKy0tCistLSBDb21wYXJlIEdPTyB2cyBzdGFuZGFyZCBqb2luIHNlYXJj aAorLS0KKy0tIFJ1biB0aGUgc2FtZSBxdWVyeSB3aXRoIEdPTyBhbmQgc3RhbmRhcmQgam9pbiBz ZWFyY2ggdG8gdmVyaWZ5IGJvdGgKKy0tIHByb2R1Y2UgdmFsaWQgcGxhbnMuIFJlc3VsdHMgc2hv dWxkIGJlIGlkZW50aWNhbCBldmVuIGlmIHBsYW5zIGRpZmZlci4KKy0tCitTRVQgZW5hYmxlX2dv b19qb2luX3NlYXJjaCA9IG9uOworUFJFUEFSRSBnb29fcGxhbiBBUworU0VMRUNUIGNvdW50KCop CitGUk9NIHQxIEpPSU4gdDIgT04gdDEuYSA9IHQyLmEKK0pPSU4gdDMgT04gdDEuYiA9IHQzLmIK K0pPSU4gdDQgT04gdDIuYyA9IHQ0LmMKK0pPSU4gdDUgT04gdDMuZCA9IHQ1LmQKK0pPSU4gdDYg T04gdDQuZSA9IHQ2LmU7CitFWEVDVVRFIGdvb19wbGFuOworIGNvdW50IAorLS0tLS0tLQorICAg IDEwCisoMSByb3cpCisKK1NFVCBlbmFibGVfZ29vX2pvaW5fc2VhcmNoID0gb2ZmOworU0VUIGdl cW9fdGhyZXNob2xkID0gZGVmYXVsdDsKK1BSRVBBUkUgc3RhbmRhcmRfcGxhbiBBUworU0VMRUNU IGNvdW50KCopCitGUk9NIHQxIEpPSU4gdDIgT04gdDEuYSA9IHQyLmEKK0pPSU4gdDMgT04gdDEu YiA9IHQzLmIKK0pPSU4gdDQgT04gdDIuYyA9IHQ0LmMKK0pPSU4gdDUgT04gdDMuZCA9IHQ1LmQK K0pPSU4gdDYgT04gdDQuZSA9IHQ2LmU7CitFWEVDVVRFIHN0YW5kYXJkX3BsYW47CisgY291bnQg CistLS0tLS0tCisgICAgMTAKKygxIHJvdykKKworLS0gUmVzdWx0cyBzaG91bGQgbWF0Y2gKK0VY RUNVVEUgZ29vX3BsYW47CisgY291bnQgCistLS0tLS0tCisgICAgMTAKKygxIHJvdykKKworRVhF Q1VURSBzdGFuZGFyZF9wbGFuOworIGNvdW50IAorLS0tLS0tLQorICAgIDEwCisoMSByb3cpCisK Ky0tCistLSBMYXJnZSBqb2luICgxOCByZWxhdGlvbnMpCistLQorLS0gVGVzdCBHT08gd2l0aCBh IGxhcmdlIG51bWJlciBvZiByZWxhdGlvbnMuCistLQorU0VUIGVuYWJsZV9nb29fam9pbl9zZWFy Y2ggPSBvbjsKK1NFVCBnZXFvX3RocmVzaG9sZCA9IDEwOworRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUIGNvdW50KCopCitGUk9NIHQxCitKT0lOIHQyIE9OIHQxLmEgPSB0Mi5hCitKT0lOIHQz IE9OIHQxLmIgPSB0My5iCitKT0lOIHQ0IE9OIHQyLmMgPSB0NC5jCitKT0lOIHQ1IE9OIHQzLmQg PSB0NS5kCitKT0lOIHQ2IE9OIHQ0LmUgPSB0Ni5lCitKT0lOIHQ3IE9OIHQ1LmYgPSB0Ny5mCitK T0lOIHQ4IE9OIHQ2LmcgPSB0OC5nCitKT0lOIHQ5IE9OIHQ3LmggPSB0OS5oCitKT0lOIHQxMCBP TiB0OC5pID0gdDEwLmkKK0pPSU4gdDExIE9OIHQ5LmogPSB0MTEuagorSk9JTiB0MTIgT04gdDEw LmsgPSB0MTIuaworSk9JTiB0MTMgT04gdDExLmwgPSB0MTMubAorSk9JTiB0MTQgT04gdDEyLm0g PSB0MTQubQorSk9JTiB0MTUgT04gdDEzLm4gPSB0MTUubgorSk9JTiB0MTYgT04gdDE0Lm8gPSB0 MTYubworSk9JTiB0MTcgT04gdDE1LnAgPSB0MTcucAorSk9JTiB0MTggT04gdDE2LnEgPSB0MTgu cTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKHQxNi5xID0gdDE4LnEpCisgICAgICAg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MTUucCA9IHQxNy5w KQorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgSGFz aCBDb25kOiAodDE0Lm8gPSB0MTYubykKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpv aW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxMy5uID0gdDE1Lm4p CisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MTIubSA9IHQxNC5tKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDExLmwgPSB0MTMubCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxMC5rID0gdDEy LmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFz aCBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBIYXNoIENvbmQ6ICh0OS5qID0gdDExLmopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0OC5pID0g dDEwLmkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ny5oID0gdDkuaCkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQ2LmcgPSB0OC5nKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAo dDUuZiA9IHQ3LmYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0NC5lID0gdDYuZSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2gg Q29uZDogKHQzLmQgPSB0NS5kKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhh c2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAo dDIuYyA9IHQ0LmMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFz aCBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENv bmQ6ICh0MS5iID0gdDMuYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEhhc2ggQ29uZDogKHQxLmEgPSB0Mi5hKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHQxCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFz aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHQzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFz aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHQ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHQ1CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHQ2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHQ3CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHQ4CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHQ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHQxMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0MTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdDEyCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHQxMworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0MTQKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gdDE1CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHQxNgorICAgICAgICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0MTcKKyAgICAgICAgIC0+ICBI YXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdDE4CisoNzAgcm93cykKKworLS0K Ky0tIE1peGVkIGNvbm5lY3RlZCBhbmQgZGlzY29ubmVjdGVkIGNvbXBvbmVudHMKKy0tCistLSBR dWVyeSB3aXRoIHR3byBjb25uZWN0ZWQgY29tcG9uZW50cyB0aGF0IG5lZWQgYSBDYXJ0ZXNpYW4g cHJvZHVjdCBiZXR3ZWVuIHRoZW0uCistLQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNv dW50KCopCitGUk9NIHQxIEpPSU4gdDIgT04gdDEuYSA9IHQyLmEsCisgICAgIHQ1IEpPSU4gdDYg T04gdDUuZiA9IHQ2LmUKK1dIRVJFIHQxLmEgPCA1IEFORCB0NS5kIDwgMzsKKyAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUK KyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKHQyLmEgPSB0MS5hKQorICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHQyCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAg ICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ni5lID0gdDUuZikKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0NgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiB0NQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmlsdGVyOiAoZCA8IDMpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdDEK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGEgPCA1KQorKDE0IHJvd3MpCisK Ky0tCistLSBPdXRlciBqb2lucworLS0KKy0tIFZlcmlmeSBHT08gaGFuZGxlcyBvdXRlciBqb2lu cyBjb3JyZWN0bHkgKHJlc3BlY3RzIGpvaW4gb3JkZXIgcmVzdHJpY3Rpb25zKQorLS0KK0VYUExB SU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKQorRlJPTSB0MQorTEVGVCBKT0lOIHQyIE9O IHQxLmEgPSB0Mi5hCitMRUZUIEpPSU4gdDMgT04gdDIuYSA9IHQzLmIKK0xFRlQgSk9JTiB0NCBP TiB0My5kID0gdDQuYzsKKyAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBB Z2dyZWdhdGUKKyAgIC0+ICBIYXNoIExlZnQgSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAodDMu ZCA9IHQ0LmMpCisgICAgICAgICAtPiAgSGFzaCBMZWZ0IEpvaW4KKyAgICAgICAgICAgICAgIEhh c2ggQ29uZDogKHQyLmEgPSB0My5iKQorICAgICAgICAgICAgICAgLT4gIEhhc2ggTGVmdCBKb2lu CisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MS5hID0gdDIuYSkKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0MQorICAgICAgICAgICAgICAgICAgICAgLT4g IEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0MgorICAg ICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biB0MworICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0 NAorKDE0IHJvd3MpCisKKy0tCistLSBDb21wbGV0ZSBDYXJ0ZXNpYW4gcHJvZHVjdHMgKGRpc2Nv bm5lY3RlZCBncmFwaHMpCistLQorLS0gVGVzdCBHT08ncyBhYmlsaXR5IHRvIGhhbmRsZSBxdWVy aWVzIHdpdGggbm8gam9pbiBjbGF1c2VzIGF0IGFsbC4KKy0tCitTRVQgZW5hYmxlX2dvb19qb2lu X3NlYXJjaCA9IG9uOworU0VUIGdlcW9fdGhyZXNob2xkID0gMjsKK0VYUExBSU4gKENPU1RTIE9G RikKK1NFTEVDVCBjb3VudCgqKQorRlJPTSB0MSwgdDI7CisgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVn YXRlCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0MQorICAg ICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdDIK Kyg1IHJvd3MpCisKK1NFTEVDVCBjb3VudCgqKQorRlJPTSB0MSwgdDI7CisgY291bnQgCistLS0t LS0tCisgICAxMDAKKygxIHJvdykKKworLS0KKy0tIEpvaW4gb3JkZXIgcmVzdHJpY3Rpb25zIHdp dGggRlVMTCBPVVRFUiBKT0lOCistLQorLS0gRlVMTCBPVVRFUiBKT0lOIGNyZWF0ZXMgc3Ryb25n IG9yZGVyaW5nIGNvbnN0cmFpbnRzIHRoYXQgR09PIG11c3QgcmVzcGVjdAorLS0KK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKQorRlJPTSB0MQorRlVMTCBPVVRFUiBKT0lOIHQy IE9OIHQxLmEgPSB0Mi5hCitGVUxMIE9VVEVSIEpPSU4gdDMgT04gdDIuYSA9IHQzLmI7CisgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgSGFzaCBGdWxsIEpvaW4K KyAgICAgICAgIEhhc2ggQ29uZDogKHQyLmEgPSB0My5iKQorICAgICAgICAgLT4gIEhhc2ggRnVs bCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MS5hID0gdDIuYSkKKyAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0MQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0MgorICAgICAgICAgLT4gIEhhc2gKKyAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0MworKDEwIHJvd3MpCisKKy0tCistLSBTZWxm LWpvaW4gaGFuZGxpbmcKKy0tCistLSBUZXN0IEdPTyB3aXRoIHRoZSBzYW1lIHRhYmxlIGFwcGVh cmluZyBtdWx0aXBsZSB0aW1lcy4gR09PIG11c3QgY29ycmVjdGx5CistLSBoYW5kbGUgc2VsZi1q b2lucyB0aGF0IHdlcmUgbm90IHJlbW92ZWQgYnkgU2VsZi1Kb2luIEVsaW1pbmF0aW9uLgorLS0K K0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKQorRlJPTSB0MSBhCitKT0lOIHQx IGIgT04gYS5hID0gYi5hCitKT0lOIHQyIGMgT04gYi5iID0gYy5jOworICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhh c2ggQ29uZDogKGIuYiA9IGMuYykKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAg ICAgIEhhc2ggQ29uZDogKGEuYSA9IGIuYSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biB0MSBhCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHQxIGIKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gdDIgYworKDEwIHJvd3MpCisKKy0tCistLSBDb21wbGV4IGJ1c2h5IHRyZWUg cGF0dGVybgorLS0KKy0tIENyZWF0ZSBhIHF1ZXJ5IHRoYXQgbmF0dXJhbGx5IGxlYWRzIHRvIGJ1 c2h5IHRyZWU6IG11bHRpcGxlIGluZGVwZW5kZW50CistLSBqb2luIGNoYWlucyB0aGF0IG5lZWQg dG8gYmUgY29tYmluZWQKKy0tCitDUkVBVEUgVEVNUCBUQUJMRSBjaGFpbjFhIChpZCBpbnQsIHZh bCBpbnQpOworQ1JFQVRFIFRFTVAgVEFCTEUgY2hhaW4xYiAoaWQgaW50LCB2YWwgaW50KTsKK0NS RUFURSBURU1QIFRBQkxFIGNoYWluMWMgKGlkIGludCwgdmFsIGludCk7CitDUkVBVEUgVEVNUCBU QUJMRSBjaGFpbjJhIChpZCBpbnQsIHZhbCBpbnQpOworQ1JFQVRFIFRFTVAgVEFCTEUgY2hhaW4y YiAoaWQgaW50LCB2YWwgaW50KTsKK0NSRUFURSBURU1QIFRBQkxFIGNoYWluMmMgKGlkIGludCwg dmFsIGludCk7CitJTlNFUlQgSU5UTyBjaGFpbjFhIFNFTEVDVCBpLCBpIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsMTAwKSBpOworSU5TRVJUIElOVE8gY2hhaW4xYiBTRUxFQ1QgaSwgaSBGUk9NIGdl bmVyYXRlX3NlcmllcygxLDEwMCkgaTsKK0lOU0VSVCBJTlRPIGNoYWluMWMgU0VMRUNUIGksIGkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGk7CitJTlNFUlQgSU5UTyBjaGFpbjJhIFNFTEVD VCBpLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBpOworSU5TRVJUIElOVE8gY2hhaW4y YiBTRUxFQ1QgaSwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkgaTsKK0lOU0VSVCBJTlRP IGNoYWluMmMgU0VMRUNUIGksIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGk7CitBTkFM WVpFOworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopCitGUk9NIGNoYWluMWEK K0pPSU4gY2hhaW4xYiBPTiBjaGFpbjFhLmlkID0gY2hhaW4xYi5pZAorSk9JTiBjaGFpbjFjIE9O IGNoYWluMWIudmFsID0gY2hhaW4xYy5pZAorSk9JTiBjaGFpbjJhIE9OIGNoYWluMWEudmFsID0g Y2hhaW4yYS5pZCAgLS0gQ3Jvc3MtY2hhaW4gam9pbgorSk9JTiBjaGFpbjJiIE9OIGNoYWluMmEu dmFsID0gY2hhaW4yYi5pZAorSk9JTiBjaGFpbjJjIE9OIGNoYWluMmIudmFsID0gY2hhaW4yYy5p ZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIEhhc2ggSm9pbgorICAg ICAgICAgSGFzaCBDb25kOiAoY2hhaW4xYS52YWwgPSBjaGFpbjJhLmlkKQorICAgICAgICAgLT4g IEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAoY2hhaW4xYi52YWwgPSBjaGFp bjFjLmlkKQorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAg ICAgSGFzaCBDb25kOiAoY2hhaW4xYS5pZCA9IGNoYWluMWIuaWQpCisgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gY2hhaW4xYQorICAgICAgICAgICAgICAgICAgICAgLT4gIEhh c2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBjaGFpbjFiCisg ICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIGNoYWluMWMKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgSGFzaCBK b2luCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChjaGFpbjJiLnZhbCA9IGNoYWlu MmMuaWQpCisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBIYXNoIENvbmQ6IChjaGFpbjJhLnZhbCA9IGNoYWluMmIuaWQpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gY2hhaW4yYQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBjaGFpbjJiCisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFz aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGNoYWluMmMKKygy MiByb3dzKQorCistLQorLS0gRWFnZXIgYWdncmVnYXRpb24gd2l0aCBHT08gam9pbiBzZWFyY2gK Ky0tIEVuc3VyZSBncm91cGVkX3JlbCBoYW5kbGluZyB3aGVuIGVhZ2VyIGFnZ3JlZ2F0aW9uIGlz IGVuYWJsZWQuCistLQorU0VUIGVuYWJsZV9lYWdlcl9hZ2dyZWdhdGUgPSBvbjsKK1NFVCBtaW5f ZWFnZXJfYWdnX2dyb3VwX3NpemUgPSAwOworQ1JFQVRFIFRFTVAgVEFCTEUgY2VudGVyX3RibCAo aWQgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBURU1QIFRBQkxFIGFybTFfdGJsIChjZW50ZXJf aWQgaW50LCBwYXlsb2FkIGludCk7CitDUkVBVEUgVEVNUCBUQUJMRSBhcm0yX3RibCAoY2VudGVy X2lkIGludCwgcGF5bG9hZCBpbnQpOworSU5TRVJUIElOVE8gY2VudGVyX3RibCBTRUxFQ1QgaSBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMCkgaTsKK0lOU0VSVCBJTlRPIGFybTFfdGJsIFNFTEVD VCBpJTEwICsgMSwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBpOworSU5TRVJUIElO VE8gYXJtMl90YmwgU0VMRUNUIGklMTAgKyAxLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEw MDApIGk7CitBTkFMWVpFIGNlbnRlcl90Ymw7CitBTkFMWVpFIGFybTFfdGJsOworQU5BTFlaRSBh cm0yX3RibDsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCBjLmlkLCBjb3Vu dCgqKQorRlJPTSBjZW50ZXJfdGJsIGMKK0pPSU4gYXJtMV90YmwgYTEgT04gYy5pZCA9IGExLmNl bnRlcl9pZAorSk9JTiBhcm0yX3RibCBhMiBPTiBjLmlkID0gYTIuY2VudGVyX2lkCitHUk9VUCBC WSBjLmlkOworICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIEhhc2hBZ2dyZWdhdGUKKyAgIE91dHB1dDogYy5pZCwgY291bnQoKikK KyAgIEdyb3VwIEtleTogYy5pZAorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgT3V0cHV0OiBj LmlkCisgICAgICAgICBIYXNoIENvbmQ6IChjLmlkID0gYTIuY2VudGVyX2lkKQorICAgICAgICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgT3V0cHV0OiBjLmlkLCBhMS5jZW50ZXJfaWQK KyAgICAgICAgICAgICAgIElubmVyIFVuaXF1ZTogdHJ1ZQorICAgICAgICAgICAgICAgSGFzaCBD b25kOiAoYTEuY2VudGVyX2lkID0gYy5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwZ190ZW1wLmFybTFfdGJsIGExCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IGExLmNl bnRlcl9pZCwgYTEucGF5bG9hZAorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogYy5pZAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHBnX3RlbXAuY2VudGVyX3RibCBjCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IGMuaWQKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICBPdXRwdXQ6IGEyLmNl bnRlcl9pZAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBnX3RlbXAuYXJtMl90Ymwg YTIKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogYTIuY2VudGVyX2lkCisoMjAgcm93cykK KworU0VMRUNUIGMuaWQsIGNvdW50KCopCitGUk9NIGNlbnRlcl90YmwgYworSk9JTiBhcm0xX3Ri bCBhMSBPTiBjLmlkID0gYTEuY2VudGVyX2lkCitKT0lOIGFybTJfdGJsIGEyIE9OIGMuaWQgPSBh Mi5jZW50ZXJfaWQKK0dST1VQIEJZIGMuaWQ7CisgaWQgfCBjb3VudCAKKy0tLS0rLS0tLS0tLQor ICA4IHwgMTAwMDAKKyAxMCB8IDEwMDAwCisgIDkgfCAxMDAwMAorICA3IHwgMTAwMDAKKyAgMSB8 IDEwMDAwCisgIDUgfCAxMDAwMAorICA0IHwgMTAwMDAKKyAgMiB8IDEwMDAwCisgIDYgfCAxMDAw MAorICAzIHwgMTAwMDAKKygxMCByb3dzKQorCitSRVNFVCBtaW5fZWFnZXJfYWdnX2dyb3VwX3Np emU7CitSRVNFVCBlbmFibGVfZWFnZXJfYWdncmVnYXRlOworLS0gQ2xlYW51cAorREVBTExPQ0FU RSBnb29fcGxhbjsKK0RFQUxMT0NBVEUgc3RhbmRhcmRfcGxhbjsKK1JFU0VUIGdlcW9fdGhyZXNo b2xkOworUkVTRVQgZW5hYmxlX2dvb19qb2luX3NlYXJjaDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9zeXN2aWV3cy5vdXQKaW5kZXggM2IzN2ZhZmE2NWIuLmNiMGM4NGNlYmZmIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dApAQCAtMTUzLDYgKzE1Myw3IEBAIHNlbGVjdCBu YW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsK ICBlbmFibGVfZGlzdGluY3RfcmVvcmRlcmluZyAgICAgfCBvbgogIGVuYWJsZV9lYWdlcl9hZ2dy ZWdhdGUgICAgICAgICB8IG9uCiAgZW5hYmxlX2dhdGhlcm1lcmdlICAgICAgICAgICAgIHwgb24K KyBlbmFibGVfZ29vX2pvaW5fc2VhcmNoICAgICAgICAgfCBvZmYKICBlbmFibGVfZ3JvdXBfYnlf cmVvcmRlcmluZyAgICAgfCBvbgogIGVuYWJsZV9oYXNoYWdnICAgICAgICAgICAgICAgICB8IG9u CiAgZW5hYmxlX2hhc2hqb2luICAgICAgICAgICAgICAgIHwgb24KQEAgLTE3Myw3ICsxNzQsNyBA QCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAn ZW5hYmxlJSc7CiAgZW5hYmxlX3NlcXNjYW4gICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVf c29ydCAgICAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV90aWRzY2FuICAgICAgICAgICAg ICAgICB8IG9uCi0oMjUgcm93cykKKygyNiByb3dzKQogCiAtLSBUaGVyZSBhcmUgYWx3YXlzIHdh aXQgZXZlbnQgZGVzY3JpcHRpb25zIGZvciB2YXJpb3VzIHR5cGVzLiAgSW5qZWN0aW9uUG9pbnQK IC0tIG1heSBiZSBwcmVzZW50IG9yIGFic2VudCwgZGVwZW5kaW5nIG9uIGhpc3Rvcnkgc2luY2Ug bGFzdCBwb3N0bWFzdGVyIHN0YXJ0LgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJh bGxlbF9zY2hlZHVsZSBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKaW5kZXgg Y2M2ZDc5OWJjZWEuLjE0ZTNhNDc1OTA2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3Bh cmFsbGVsX3NjaGVkdWxlCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUK QEAgLTY4LDYgKzY4LDEyIEBAIHRlc3Q6IHNlbGVjdF9pbnRvIHNlbGVjdF9kaXN0aW5jdCBzZWxl Y3RfZGlzdGluY3Rfb24gc2VsZWN0X2ltcGxpY2l0IHNlbGVjdF9oYXZpCiAjIC0tLS0tLS0tLS0K IHRlc3Q6IGJyaW4gZ2luIGdpc3Qgc3BnaXN0IHByaXZpbGVnZXMgaW5pdF9wcml2cyBzZWN1cml0 eV9sYWJlbCBjb2xsYXRlIG1hdHZpZXcgbG9jayByZXBsaWNhX2lkZW50aXR5IHJvd3NlY3VyaXR5 IG9iamVjdF9hZGRyZXNzIHRhYmxlc2FtcGxlIGdyb3VwaW5nc2V0cyBkcm9wX29wZXJhdG9yIHBh c3N3b3JkIGlkZW50aXR5IGdlbmVyYXRlZF9zdG9yZWQgam9pbl9oYXNoCiAKKyMgLS0tLS0tLS0t LQorIyBBZGRpdGlvbmFsIEpPSU4gT1JERVIgdGVzdHMKKyMgV0lQOiBuZWVkIHRvIGZpbmQgYW4g YXBwcm9wcmlhdGUgZ3JvdXAgZm9yIHRoaXMgdGVzdAorIyAtLS0tLS0tLS0tCit0ZXN0OiBnb28K KwogIyAtLS0tLS0tLS0tCiAjIEFkZGl0aW9uYWwgQlJJTiB0ZXN0cwogIyAtLS0tLS0tLS0tCkBA IC05OCw5ICsxMDQsNiBAQCB0ZXN0OiBtYWludGFpbl9ldmVyeQogIyBubyByZWxhdGlvbiByZWxh dGVkIHRlc3RzIGNhbiBiZSBwdXQgaW4gdGhpcyBncm91cAogdGVzdDogcHVibGljYXRpb24gc3Vi c2NyaXB0aW9uCiAKLSMgLS0tLS0tLS0tLQotIyBBbm90aGVyIGdyb3VwIG9mIHBhcmFsbGVsIHRl c3RzCi0jIHNlbGVjdF92aWV3cyBkZXBlbmRzIG9uIGNyZWF0ZV92aWV3CiAjIC0tLS0tLS0tLS0K IHRlc3Q6IHNlbGVjdF92aWV3cyBwb3J0YWxzX3AyIGZvcmVpZ25fa2V5IGNsdXN0ZXIgZGVwZW5k ZW5jeSBndWMgYml0bWFwb3BzIGNvbWJvY2lkIHRzZWFyY2ggdHNkaWN0cyBmb3JlaWduX2RhdGEg d2luZG93IHhtbG1hcCBmdW5jdGlvbmFsX2RlcHMgYWR2aXNvcnlfbG9jayBpbmRpcmVjdF90b2Fz dCBlcXVpdmNsYXNzIHN0YXRzX3Jld3JpdGUKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvZ29vLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dvby5zcWwKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmFiMDQ4ZDhlMzRlCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ29vLnNxbApAQCAtMCwwICsxLDM2NCBAQAorLS0KKy0t IEdPTyAoR3JlZWR5IE9wZXJhdG9yIE9yZGVyaW5nKSBKb2luIFNlYXJjaCBUZXN0cworLS0KKy0t IFRoaXMgdGVzdCBzdWl0ZSB2YWxpZGF0ZXMgdGhlIEdPTyBqb2luIG9yZGVyaW5nIGFsZ29yaXRo bSBhbmQgdmVyaWZpZXMKKy0tIGNvcnJlY3QgYmVoYXZpb3IgZm9yIHZhcmlvdXMgcXVlcnkgcGF0 dGVybnMuCistLQorCistLSBDcmVhdGUgdGVzdCB0YWJsZXMgd2l0aCB2YXJpb3VzIHNpemVzIGFu ZCBqb2luIHBhdHRlcm5zCitDUkVBVEUgVEVNUCBUQUJMRSB0MSAoYSBpbnQsIGIgaW50KTsKK0NS RUFURSBURU1QIFRBQkxFIHQyIChhIGludCwgYyBpbnQpOworQ1JFQVRFIFRFTVAgVEFCTEUgdDMg KGIgaW50LCBkIGludCk7CitDUkVBVEUgVEVNUCBUQUJMRSB0NCAoYyBpbnQsIGUgaW50KTsKK0NS RUFURSBURU1QIFRBQkxFIHQ1IChkIGludCwgZiBpbnQpOworQ1JFQVRFIFRFTVAgVEFCTEUgdDYg KGUgaW50LCBnIGludCk7CitDUkVBVEUgVEVNUCBUQUJMRSB0NyAoZiBpbnQsIGggaW50KTsKK0NS RUFURSBURU1QIFRBQkxFIHQ4IChnIGludCwgaSBpbnQpOworQ1JFQVRFIFRFTVAgVEFCTEUgdDkg KGggaW50LCBqIGludCk7CitDUkVBVEUgVEVNUCBUQUJMRSB0MTAgKGkgaW50LCBrIGludCk7CitD UkVBVEUgVEVNUCBUQUJMRSB0MTEgKGogaW50LCBsIGludCk7CitDUkVBVEUgVEVNUCBUQUJMRSB0 MTIgKGsgaW50LCBtIGludCk7CitDUkVBVEUgVEVNUCBUQUJMRSB0MTMgKGwgaW50LCBuIGludCk7 CitDUkVBVEUgVEVNUCBUQUJMRSB0MTQgKG0gaW50LCBvIGludCk7CitDUkVBVEUgVEVNUCBUQUJM RSB0MTUgKG4gaW50LCBwIGludCk7CitDUkVBVEUgVEVNUCBUQUJMRSB0MTYgKG8gaW50LCBxIGlu dCk7CitDUkVBVEUgVEVNUCBUQUJMRSB0MTcgKHAgaW50LCByIGludCk7CitDUkVBVEUgVEVNUCBU QUJMRSB0MTggKHEgaW50LCBzIGludCk7CisKKy0tIFBvcHVsYXRlIHdpdGggc21hbGwgYW1vdW50 IG9mIGRhdGEKK0lOU0VSVCBJTlRPIHQxIFNFTEVDVCBpLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsMTApIGk7CitJTlNFUlQgSU5UTyB0MiBTRUxFQ1QgaSwgaSBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLDEwKSBpOworSU5TRVJUIElOVE8gdDMgU0VMRUNUIGksIGkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwxMCkgaTsKK0lOU0VSVCBJTlRPIHQ0IFNFTEVDVCBpLCBpIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsMTApIGk7CitJTlNFUlQgSU5UTyB0NSBTRUxFQ1QgaSwgaSBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLDEwKSBpOworSU5TRVJUIElOVE8gdDYgU0VMRUNUIGksIGkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwxMCkgaTsKK0lOU0VSVCBJTlRPIHQ3IFNFTEVDVCBpLCBpIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsMTApIGk7CitJTlNFUlQgSU5UTyB0OCBTRUxFQ1QgaSwgaSBGUk9NIGdlbmVyYXRl X3NlcmllcygxLDEwKSBpOworSU5TRVJUIElOVE8gdDkgU0VMRUNUIGksIGkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMSwxMCkgaTsKK0lOU0VSVCBJTlRPIHQxMCBTRUxFQ1QgaSwgaSBGUk9NIGdlbmVy YXRlX3NlcmllcygxLDEwKSBpOworSU5TRVJUIElOVE8gdDExIFNFTEVDVCBpLCBpIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsMTApIGk7CitJTlNFUlQgSU5UTyB0MTIgU0VMRUNUIGksIGkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwxMCkgaTsKK0lOU0VSVCBJTlRPIHQxMyBTRUxFQ1QgaSwgaSBGUk9N IGdlbmVyYXRlX3NlcmllcygxLDEwKSBpOworSU5TRVJUIElOVE8gdDE0IFNFTEVDVCBpLCBpIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGk7CitJTlNFUlQgSU5UTyB0MTUgU0VMRUNUIGksIGkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgaTsKK0lOU0VSVCBJTlRPIHQxNiBTRUxFQ1QgaSwg aSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwKSBpOworSU5TRVJUIElOVE8gdDE3IFNFTEVDVCBp LCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGk7CitJTlNFUlQgSU5UTyB0MTggU0VMRUNU IGksIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgaTsKKworQU5BTFlaRTsKKworLS0KKy0t IEJhc2ljIDMtd2F5IGpvaW4gKHNhbml0eSBjaGVjaykKKy0tCitTRVQgZW5hYmxlX2dvb19qb2lu X3NlYXJjaCA9IG9uOworU0VUIGdlcW9fdGhyZXNob2xkID0gMjsKKworRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUIGNvdW50KCopCitGUk9NIChWQUxVRVMgKDEpLCgyKSkgQVMgYSh4KQorSk9J TiAoVkFMVUVTICgxKSwoMikpIEFTIGIoeCkgVVNJTkcgKHgpCitKT0lOIChWQUxVRVMgKDEpLCgz KSkgQVMgYyh4KSBVU0lORyAoeCk7CisKK1NFTEVDVCBjb3VudCgqKQorRlJPTSAoVkFMVUVTICgx KSwoMikpIEFTIGEoeCkKK0pPSU4gKFZBTFVFUyAoMSksKDIpKSBBUyBiKHgpIFVTSU5HICh4KQor Sk9JTiAoVkFMVUVTICgxKSwoMykpIEFTIGMoeCkgVVNJTkcgKHgpOworCistLQorLS0gRGlzY29u bmVjdGVkIGdyYXBoIChDYXJ0ZXNpYW4gcHJvZHVjdHMgcmVxdWlyZWQpCistLQorLS0gVGhpcyB0 ZXN0cyBHT08ncyBhYmlsaXR5IHRvIGhhbmRsZSBxdWVyaWVzIHdoZXJlIHNvbWUgcmVsYXRpb25z CistLSBoYXZlIG5vIGpvaW4gY2xhdXNlcyBjb25uZWN0aW5nIHRoZW0uIEdPTyBzaG91bGQgYWxs b3cgQ2FydGVzaWFuCistLSBwcm9kdWN0cyB3aGVuIG5vIGNsYXVzZS1jb25uZWN0ZWQgam9pbnMg YXJlIGF2YWlsYWJsZS4KKy0tCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikK K0ZST00gdDEsIHQyLCB0NQorV0hFUkUgdDEuYSA9IDEgQU5EIHQyLmMgPSAyIEFORCB0NS5mID0g MzsKKworU0VMRUNUIGNvdW50KCopCitGUk9NIHQxLCB0MiwgdDUKK1dIRVJFIHQxLmEgPSAxIEFO RCB0Mi5jID0gMiBBTkQgdDUuZiA9IDM7CisKKy0tCistLSBTdGFyIHNjaGVtYSAoZmFjdCB0YWJs ZSB3aXRoIG11bHRpcGxlIGRpbWVuc2lvbiB0YWJsZXMpCistLQorLS0gVGVzdCBHT08gd2l0aCBh IHR5cGljYWwgc3RhciBzY2hlbWEgam9pbiBwYXR0ZXJuLgorLS0KK0NSRUFURSBURU1QIFRBQkxF IGZhY3QgKGlkIGludCwgZGltMV9pZCBpbnQsIGRpbTJfaWQgaW50LCBkaW0zX2lkIGludCwgZGlt NF9pZCBpbnQsIHZhbHVlIGludCk7CitDUkVBVEUgVEVNUCBUQUJMRSBkaW0xIChpZCBpbnQsIG5h bWUgdGV4dCk7CitDUkVBVEUgVEVNUCBUQUJMRSBkaW0yIChpZCBpbnQsIG5hbWUgdGV4dCk7CitD UkVBVEUgVEVNUCBUQUJMRSBkaW0zIChpZCBpbnQsIG5hbWUgdGV4dCk7CitDUkVBVEUgVEVNUCBU QUJMRSBkaW00IChpZCBpbnQsIG5hbWUgdGV4dCk7CisKK0lOU0VSVCBJTlRPIGZhY3QgU0VMRUNU IGksIGksIGksIGksIGksIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGk7CitJTlNFUlQg SU5UTyBkaW0xIFNFTEVDVCBpLCAnZGltMV8nfHxpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAp IGk7CitJTlNFUlQgSU5UTyBkaW0yIFNFTEVDVCBpLCAnZGltMl8nfHxpIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsMTApIGk7CitJTlNFUlQgSU5UTyBkaW0zIFNFTEVDVCBpLCAnZGltM18nfHxpIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGk7CitJTlNFUlQgSU5UTyBkaW00IFNFTEVDVCBpLCAn ZGltNF8nfHxpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGk7CisKK0FOQUxZWkU7CisKK0VY UExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKQorRlJPTSBmYWN0CitKT0lOIGRpbTEg T04gZmFjdC5kaW0xX2lkID0gZGltMS5pZAorSk9JTiBkaW0yIE9OIGZhY3QuZGltMl9pZCA9IGRp bTIuaWQKK0pPSU4gZGltMyBPTiBmYWN0LmRpbTNfaWQgPSBkaW0zLmlkCitKT0lOIGRpbTQgT04g ZmFjdC5kaW00X2lkID0gZGltNC5pZAorV0hFUkUgZGltMS5pZCA8IDU7CisKKy0tCistLSBMb25n IGpvaW4gY2hhaW4KKy0tCistLSBUZXN0cyBHT08gd2l0aCBhIGxhcmdlIGpvaW4gaW52b2x2aW5n IDE1IHJlbGF0aW9ucy4KKy0tCitTRVQgZ2Vxb190aHJlc2hvbGQgPSA4OworCitFWFBMQUlOIChD T1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikKK0ZST00gdDEKK0pPSU4gdDIgT04gdDEuYSA9IHQy LmEKK0pPSU4gdDMgT04gdDEuYiA9IHQzLmIKK0pPSU4gdDQgT04gdDIuYyA9IHQ0LmMKK0pPSU4g dDUgT04gdDMuZCA9IHQ1LmQKK0pPSU4gdDYgT04gdDQuZSA9IHQ2LmUKK0pPSU4gdDcgT04gdDUu ZiA9IHQ3LmYKK0pPSU4gdDggT04gdDYuZyA9IHQ4LmcKK0pPSU4gdDkgT04gdDcuaCA9IHQ5LmgK K0pPSU4gdDEwIE9OIHQ4LmkgPSB0MTAuaQorSk9JTiB0MTEgT04gdDkuaiA9IHQxMS5qCitKT0lO IHQxMiBPTiB0MTAuayA9IHQxMi5rCitKT0lOIHQxMyBPTiB0MTEubCA9IHQxMy5sCitKT0lOIHQx NCBPTiB0MTIubSA9IHQxNC5tCitKT0lOIHQxNSBPTiB0MTMubiA9IHQxNS5uOworCistLSBFeGVj dXRlIHRvIHZlcmlmeSBjb3JyZWN0bmVzcworU0VMRUNUIGNvdW50KCopCitGUk9NIHQxCitKT0lO IHQyIE9OIHQxLmEgPSB0Mi5hCitKT0lOIHQzIE9OIHQxLmIgPSB0My5iCitKT0lOIHQ0IE9OIHQy LmMgPSB0NC5jCitKT0lOIHQ1IE9OIHQzLmQgPSB0NS5kCitKT0lOIHQ2IE9OIHQ0LmUgPSB0Ni5l CitKT0lOIHQ3IE9OIHQ1LmYgPSB0Ny5mCitKT0lOIHQ4IE9OIHQ2LmcgPSB0OC5nCitKT0lOIHQ5 IE9OIHQ3LmggPSB0OS5oCitKT0lOIHQxMCBPTiB0OC5pID0gdDEwLmkKK0pPSU4gdDExIE9OIHQ5 LmogPSB0MTEuagorSk9JTiB0MTIgT04gdDEwLmsgPSB0MTIuaworSk9JTiB0MTMgT04gdDExLmwg PSB0MTMubAorSk9JTiB0MTQgT04gdDEyLm0gPSB0MTQubQorSk9JTiB0MTUgT04gdDEzLm4gPSB0 MTUubjsKKworLS0KKy0tIEJ1c2h5IHRyZWUgc3VwcG9ydAorLS0KKy0tIFZlcmlmeSB0aGF0IEdP TyBjYW4gcHJvZHVjZSBidXNoeSBqb2luIHRyZWVzLCBub3QganVzdCBsZWZ0LWRlZXAgb3Igcmln aHQtZGVlcC4KKy0tIFdpdGggYXBwcm9wcmlhdGUgY29zdCBtb2RlbCwgR09PIHNob3VsZCBqb2lu ICh0MSx0MikgYW5kICh0Myx0NCkgZmlyc3QsCistLSB0aGVuIGpvaW4gdGhvc2UgcmVzdWx0cyAo YnVzaHkgdHJlZSkuCistLQorU0VUIGdlcW9fdGhyZXNob2xkID0gNDsKKworRVhQTEFJTiAoQ09T VFMgT0ZGKQorU0VMRUNUIGNvdW50KCopCitGUk9NIHQxLCB0MiwgdDMsIHQ0CitXSEVSRSB0MS5h ID0gdDIuYQorICBBTkQgdDMuYiA9IHQ0LmMKKyAgQU5EIHQxLmEgPSB0My5iOworCistLQorLS0g Q29tcGFyZSBHT08gdnMgc3RhbmRhcmQgam9pbiBzZWFyY2gKKy0tCistLSBSdW4gdGhlIHNhbWUg cXVlcnkgd2l0aCBHT08gYW5kIHN0YW5kYXJkIGpvaW4gc2VhcmNoIHRvIHZlcmlmeSBib3RoCist LSBwcm9kdWNlIHZhbGlkIHBsYW5zLiBSZXN1bHRzIHNob3VsZCBiZSBpZGVudGljYWwgZXZlbiBp ZiBwbGFucyBkaWZmZXIuCistLQorU0VUIGVuYWJsZV9nb29fam9pbl9zZWFyY2ggPSBvbjsKK1BS RVBBUkUgZ29vX3BsYW4gQVMKK1NFTEVDVCBjb3VudCgqKQorRlJPTSB0MSBKT0lOIHQyIE9OIHQx LmEgPSB0Mi5hCitKT0lOIHQzIE9OIHQxLmIgPSB0My5iCitKT0lOIHQ0IE9OIHQyLmMgPSB0NC5j CitKT0lOIHQ1IE9OIHQzLmQgPSB0NS5kCitKT0lOIHQ2IE9OIHQ0LmUgPSB0Ni5lOworCitFWEVD VVRFIGdvb19wbGFuOworCitTRVQgZW5hYmxlX2dvb19qb2luX3NlYXJjaCA9IG9mZjsKK1NFVCBn ZXFvX3RocmVzaG9sZCA9IGRlZmF1bHQ7CitQUkVQQVJFIHN0YW5kYXJkX3BsYW4gQVMKK1NFTEVD VCBjb3VudCgqKQorRlJPTSB0MSBKT0lOIHQyIE9OIHQxLmEgPSB0Mi5hCitKT0lOIHQzIE9OIHQx LmIgPSB0My5iCitKT0lOIHQ0IE9OIHQyLmMgPSB0NC5jCitKT0lOIHQ1IE9OIHQzLmQgPSB0NS5k CitKT0lOIHQ2IE9OIHQ0LmUgPSB0Ni5lOworCitFWEVDVVRFIHN0YW5kYXJkX3BsYW47CisKKy0t IFJlc3VsdHMgc2hvdWxkIG1hdGNoCitFWEVDVVRFIGdvb19wbGFuOworRVhFQ1VURSBzdGFuZGFy ZF9wbGFuOworCistLQorLS0gTGFyZ2Ugam9pbiAoMTggcmVsYXRpb25zKQorLS0KKy0tIFRlc3Qg R09PIHdpdGggYSBsYXJnZSBudW1iZXIgb2YgcmVsYXRpb25zLgorLS0KK1NFVCBlbmFibGVfZ29v X2pvaW5fc2VhcmNoID0gb247CitTRVQgZ2Vxb190aHJlc2hvbGQgPSAxMDsKKworRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopCitGUk9NIHQxCitKT0lOIHQyIE9OIHQxLmEgPSB0 Mi5hCitKT0lOIHQzIE9OIHQxLmIgPSB0My5iCitKT0lOIHQ0IE9OIHQyLmMgPSB0NC5jCitKT0lO IHQ1IE9OIHQzLmQgPSB0NS5kCitKT0lOIHQ2IE9OIHQ0LmUgPSB0Ni5lCitKT0lOIHQ3IE9OIHQ1 LmYgPSB0Ny5mCitKT0lOIHQ4IE9OIHQ2LmcgPSB0OC5nCitKT0lOIHQ5IE9OIHQ3LmggPSB0OS5o CitKT0lOIHQxMCBPTiB0OC5pID0gdDEwLmkKK0pPSU4gdDExIE9OIHQ5LmogPSB0MTEuagorSk9J TiB0MTIgT04gdDEwLmsgPSB0MTIuaworSk9JTiB0MTMgT04gdDExLmwgPSB0MTMubAorSk9JTiB0 MTQgT04gdDEyLm0gPSB0MTQubQorSk9JTiB0MTUgT04gdDEzLm4gPSB0MTUubgorSk9JTiB0MTYg T04gdDE0Lm8gPSB0MTYubworSk9JTiB0MTcgT04gdDE1LnAgPSB0MTcucAorSk9JTiB0MTggT04g dDE2LnEgPSB0MTgucTsKKworLS0KKy0tIE1peGVkIGNvbm5lY3RlZCBhbmQgZGlzY29ubmVjdGVk IGNvbXBvbmVudHMKKy0tCistLSBRdWVyeSB3aXRoIHR3byBjb25uZWN0ZWQgY29tcG9uZW50cyB0 aGF0IG5lZWQgYSBDYXJ0ZXNpYW4gcHJvZHVjdCBiZXR3ZWVuIHRoZW0uCistLQorRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopCitGUk9NIHQxIEpPSU4gdDIgT04gdDEuYSA9IHQy LmEsCisgICAgIHQ1IEpPSU4gdDYgT04gdDUuZiA9IHQ2LmUKK1dIRVJFIHQxLmEgPCA1IEFORCB0 NS5kIDwgMzsKKworLS0KKy0tIE91dGVyIGpvaW5zCistLQorLS0gVmVyaWZ5IEdPTyBoYW5kbGVz IG91dGVyIGpvaW5zIGNvcnJlY3RseSAocmVzcGVjdHMgam9pbiBvcmRlciByZXN0cmljdGlvbnMp CistLQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopCitGUk9NIHQxCitMRUZU IEpPSU4gdDIgT04gdDEuYSA9IHQyLmEKK0xFRlQgSk9JTiB0MyBPTiB0Mi5hID0gdDMuYgorTEVG VCBKT0lOIHQ0IE9OIHQzLmQgPSB0NC5jOworCistLQorLS0gQ29tcGxldGUgQ2FydGVzaWFuIHBy b2R1Y3RzIChkaXNjb25uZWN0ZWQgZ3JhcGhzKQorLS0KKy0tIFRlc3QgR09PJ3MgYWJpbGl0eSB0 byBoYW5kbGUgcXVlcmllcyB3aXRoIG5vIGpvaW4gY2xhdXNlcyBhdCBhbGwuCistLQorU0VUIGVu YWJsZV9nb29fam9pbl9zZWFyY2ggPSBvbjsKK1NFVCBnZXFvX3RocmVzaG9sZCA9IDI7CisKK0VY UExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKQorRlJPTSB0MSwgdDI7CisKK1NFTEVD VCBjb3VudCgqKQorRlJPTSB0MSwgdDI7CisKKy0tCistLSBKb2luIG9yZGVyIHJlc3RyaWN0aW9u cyB3aXRoIEZVTEwgT1VURVIgSk9JTgorLS0KKy0tIEZVTEwgT1VURVIgSk9JTiBjcmVhdGVzIHN0 cm9uZyBvcmRlcmluZyBjb25zdHJhaW50cyB0aGF0IEdPTyBtdXN0IHJlc3BlY3QKKy0tCitFWFBM QUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikKK0ZST00gdDEKK0ZVTEwgT1VURVIgSk9J TiB0MiBPTiB0MS5hID0gdDIuYQorRlVMTCBPVVRFUiBKT0lOIHQzIE9OIHQyLmEgPSB0My5iOwor CistLQorLS0gU2VsZi1qb2luIGhhbmRsaW5nCistLQorLS0gVGVzdCBHT08gd2l0aCB0aGUgc2Ft ZSB0YWJsZSBhcHBlYXJpbmcgbXVsdGlwbGUgdGltZXMuIEdPTyBtdXN0IGNvcnJlY3RseQorLS0g aGFuZGxlIHNlbGYtam9pbnMgdGhhdCB3ZXJlIG5vdCByZW1vdmVkIGJ5IFNlbGYtSm9pbiBFbGlt aW5hdGlvbi4KKy0tCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikKK0ZST00g dDEgYQorSk9JTiB0MSBiIE9OIGEuYSA9IGIuYQorSk9JTiB0MiBjIE9OIGIuYiA9IGMuYzsKKwor LS0KKy0tIENvbXBsZXggYnVzaHkgdHJlZSBwYXR0ZXJuCistLQorLS0gQ3JlYXRlIGEgcXVlcnkg dGhhdCBuYXR1cmFsbHkgbGVhZHMgdG8gYnVzaHkgdHJlZTogbXVsdGlwbGUgaW5kZXBlbmRlbnQK Ky0tIGpvaW4gY2hhaW5zIHRoYXQgbmVlZCB0byBiZSBjb21iaW5lZAorLS0KK0NSRUFURSBURU1Q IFRBQkxFIGNoYWluMWEgKGlkIGludCwgdmFsIGludCk7CitDUkVBVEUgVEVNUCBUQUJMRSBjaGFp bjFiIChpZCBpbnQsIHZhbCBpbnQpOworQ1JFQVRFIFRFTVAgVEFCTEUgY2hhaW4xYyAoaWQgaW50 LCB2YWwgaW50KTsKK0NSRUFURSBURU1QIFRBQkxFIGNoYWluMmEgKGlkIGludCwgdmFsIGludCk7 CitDUkVBVEUgVEVNUCBUQUJMRSBjaGFpbjJiIChpZCBpbnQsIHZhbCBpbnQpOworQ1JFQVRFIFRF TVAgVEFCTEUgY2hhaW4yYyAoaWQgaW50LCB2YWwgaW50KTsKKworSU5TRVJUIElOVE8gY2hhaW4x YSBTRUxFQ1QgaSwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkgaTsKK0lOU0VSVCBJTlRP IGNoYWluMWIgU0VMRUNUIGksIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGk7CitJTlNF UlQgSU5UTyBjaGFpbjFjIFNFTEVDVCBpLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBp OworSU5TRVJUIElOVE8gY2hhaW4yYSBTRUxFQ1QgaSwgaSBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDEwMCkgaTsKK0lOU0VSVCBJTlRPIGNoYWluMmIgU0VMRUNUIGksIGkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwxMDApIGk7CitJTlNFUlQgSU5UTyBjaGFpbjJjIFNFTEVDVCBpLCBpIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsMTAwKSBpOworCitBTkFMWVpFOworCitFWFBMQUlOIChDT1NUUyBPRkYp CitTRUxFQ1QgY291bnQoKikKK0ZST00gY2hhaW4xYQorSk9JTiBjaGFpbjFiIE9OIGNoYWluMWEu aWQgPSBjaGFpbjFiLmlkCitKT0lOIGNoYWluMWMgT04gY2hhaW4xYi52YWwgPSBjaGFpbjFjLmlk CitKT0lOIGNoYWluMmEgT04gY2hhaW4xYS52YWwgPSBjaGFpbjJhLmlkICAtLSBDcm9zcy1jaGFp biBqb2luCitKT0lOIGNoYWluMmIgT04gY2hhaW4yYS52YWwgPSBjaGFpbjJiLmlkCitKT0lOIGNo YWluMmMgT04gY2hhaW4yYi52YWwgPSBjaGFpbjJjLmlkOworCistLQorLS0gRWFnZXIgYWdncmVn YXRpb24gd2l0aCBHT08gam9pbiBzZWFyY2gKKy0tIEVuc3VyZSBncm91cGVkX3JlbCBoYW5kbGlu ZyB3aGVuIGVhZ2VyIGFnZ3JlZ2F0aW9uIGlzIGVuYWJsZWQuCistLQorU0VUIGVuYWJsZV9lYWdl cl9hZ2dyZWdhdGUgPSBvbjsKK1NFVCBtaW5fZWFnZXJfYWdnX2dyb3VwX3NpemUgPSAwOworCitD UkVBVEUgVEVNUCBUQUJMRSBjZW50ZXJfdGJsIChpZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRF IFRFTVAgVEFCTEUgYXJtMV90YmwgKGNlbnRlcl9pZCBpbnQsIHBheWxvYWQgaW50KTsKK0NSRUFU RSBURU1QIFRBQkxFIGFybTJfdGJsIChjZW50ZXJfaWQgaW50LCBwYXlsb2FkIGludCk7CisKK0lO U0VSVCBJTlRPIGNlbnRlcl90YmwgU0VMRUNUIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAp IGk7CitJTlNFUlQgSU5UTyBhcm0xX3RibCBTRUxFQ1QgaSUxMCArIDEsIGkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMSwgMTAwMCkgaTsKK0lOU0VSVCBJTlRPIGFybTJfdGJsIFNFTEVDVCBpJTEwICsg MSwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBpOworCitBTkFMWVpFIGNlbnRlcl90 Ymw7CitBTkFMWVpFIGFybTFfdGJsOworQU5BTFlaRSBhcm0yX3RibDsKKworRVhQTEFJTiAoVkVS Qk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIGMuaWQsIGNvdW50KCopCitGUk9NIGNlbnRlcl90Ymwg YworSk9JTiBhcm0xX3RibCBhMSBPTiBjLmlkID0gYTEuY2VudGVyX2lkCitKT0lOIGFybTJfdGJs IGEyIE9OIGMuaWQgPSBhMi5jZW50ZXJfaWQKK0dST1VQIEJZIGMuaWQ7CisKK1NFTEVDVCBjLmlk LCBjb3VudCgqKQorRlJPTSBjZW50ZXJfdGJsIGMKK0pPSU4gYXJtMV90YmwgYTEgT04gYy5pZCA9 IGExLmNlbnRlcl9pZAorSk9JTiBhcm0yX3RibCBhMiBPTiBjLmlkID0gYTIuY2VudGVyX2lkCitH Uk9VUCBCWSBjLmlkOworCitSRVNFVCBtaW5fZWFnZXJfYWdnX2dyb3VwX3NpemU7CitSRVNFVCBl bmFibGVfZWFnZXJfYWdncmVnYXRlOworCistLSBDbGVhbnVwCitERUFMTE9DQVRFIGdvb19wbGFu OworREVBTExPQ0FURSBzdGFuZGFyZF9wbGFuOworCitSRVNFVCBnZXFvX3RocmVzaG9sZDsKK1JF U0VUIGVuYWJsZV9nb29fam9pbl9zZWFyY2g7Ci0tIAoyLjM5LjMgKEFwcGxlIEdpdC0xNDYpCgo= --_004_938E22869B0D4F8DA9168E0E35D55034Outlookcom_--