From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 491CD46AF3 for ; Mon, 1 Jan 2024 14:15:39 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6E81C68CF03; Mon, 1 Jan 2024 16:13:48 +0200 (EET) Received: from APC01-TYZ-obe.outbound.protection.outlook.com (mail-tyzapc01olkn2103.outbound.protection.outlook.com [40.92.107.103]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4487F68CE28 for ; Mon, 1 Jan 2024 16:13:44 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JL8GUgIQ4QH0Ad8/J5bJyGUtAYhQV9NFpGrT5FMQ17mfZE4eZim98XOv+CRCLqWKcqjlEwaxuy34qGa2W3zuAQJVoxW24Sx+9jjAdM+qU1RIm+UULs/pfzEebeVq29PdO6MgPbsZvwGYynMGYNDSBKJ3NqLlFHO458YQD77biOUBUfy/vsmFnBga1rQ6XEHywslCHS0W5L5YtdU1awOz25ZKHLm2GNSOINRXENgTyOqba2FsCImKSBxaJnTpTLmqondpzWRvhsp4sHQ7ipDClH+oVRlrlzFyZQNGjQ6SgeLTVoIlPnOoA1uCMSeTFXg+d7XTnxhJAR6/vipFNgEh/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=i7G6V4AgTcC0kZV8WVScwRkWLSCR0Zi+cWmcYJwV/ps=; b=TZ0U/SMkccXv9mCc4bt17Vd9C8imvFgq43aywQesS/GXskP3Vo543Yx0ZNaMi5htox7WyR0J9PWNBLzky6XJz920qfqU5VVCrf2m9F97uR5qQ+GBRBtNaoGUzCAdXfTZX2uFwrJlRzirKnnwtg94+vymkX0/+5cQaPaC7zU8DqbH0c5VTGu8LQjZC+D/7EF4n0YUXps5skWR8bfzVdxe+0WlGf1M8syBy/2qH4CY7stUMIP70aDbppUDwLbkuWzZozD0/hZVhRXHSb4q0WQVzH+Sgza7j3t6Zs1LVXiGtKQrpSMeg52KmqGkgtHOPGwGjX/PQeDLabdLgVEuW2WkFw== 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=i7G6V4AgTcC0kZV8WVScwRkWLSCR0Zi+cWmcYJwV/ps=; b=KbsKhNVxByYEjmK3pWeMn3f7QXDAK3a6uLkguSXsOOofjQd+OTi+Wzbv49TjBhna0Y4YRBzzX5xateS+Nz6R7+LjTn8Ryl8aSVTovloDCPaR21s+3Rxy7LsbwAoLEzifzzX3O9HmaHLIYbxR7dHnGQE8bl6Jpp0nX1frPOPMVy+BRPqzQgWjoySLwKZK3GhLTZGCCwTL3IlQFmDPxaVaotKyxAaAgkBkp9o2CXDEPP7UkSXqczk5mhrcKae1jWGCEsGuvni6hQ4OjCk7hPeNFLXaHx6bmXpRb8K7muAzGFQ+UFhgsCvhaRBTPtc8X2Sb9/Yf1IrBtk3oDesxWlRmMQ== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by TYZPR06MB3965.apcprd06.prod.outlook.com (2603:1096:400:23::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7135.25; Mon, 1 Jan 2024 14:13:28 +0000 Received: from TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::e139:fd7a:1b66:a3f7]) by TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::e139:fd7a:1b66:a3f7%6]) with mapi id 15.20.7135.023; Mon, 1 Jan 2024 14:13:28 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Mon, 1 Jan 2024 22:12:35 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240101141239.6623-1-nuomi2021@gmail.com> References: <20240101141239.6623-1-nuomi2021@gmail.com> X-TMN: [2Js0cv0wA5fjQYrmkY652Ft9Kz6FH0kx] X-ClientProxiedBy: SI1PR02CA0012.apcprd02.prod.outlook.com (2603:1096:4:1f7::8) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20240101141239.6623-10-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|TYZPR06MB3965:EE_ X-MS-Office365-Filtering-Correlation-Id: 836c65a5-e7cd-41ac-71f1-08dc0ad3d3a5 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: PbJnYGk8G9LsfMXc6riOtWGdtLnV8QqZADtnnJL/5PY1L1dwOtsMYANbWS0h7dJS8S0CDVNCRguEup8fUBJyXNcSuZxPhW1tXhSJp2OH2mMXtdHa8a+UgjDMu/1I1qvZheKpPNHzBZWJhlAgXes6f2C8qMTo5eDGT61M+jQGeJf3msCIDgAJ32XepaSuGuSGW/GryGpypsiFFucrjTgfTyhQxjnRO1p0NgqACHdLZdCvB7I46TOHDhm1uk6UXuFwZaL38UDGjMXMfUx7xAWzxmSukyawslpOemsoHo3F3XW59ohLyHwNhQfV3YEUWAQtpZMGheSKTpYM4e6+TM7aY1fM7uxN/ayvKskJkccmX5DtvxcjMsq1s/SRrpVmJvP88EHj8vELQpXdrYSt2X7YcAWr/1mHzbUCOyCb8VwKYx+2uLUTThgPG15iN/w6oqXo/kvLnHPThttpU5NGE18BUezpHR/jXlPJlovEbhjM8a3lvQ+K3yJtX4JSVg2t4gePMc7xLH1AQunq+8eCcfS3/FWF7E3Nuw4Kb/E/3NccQ8bRWsC0qBQFX0kEUVQB3/V2QyHJSSmcc8IW6c0bnACMsMnWGfvMjd4qk5B+9l/dyRE= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?c3RMczIzZFBiak9EWEtKU1ViRVkxaTVacXdmYWFzbldtbG9aYlVud0FWdDds?= =?utf-8?B?ckZud0R6QjM0Mk05N1VWb3NsZVJMOS9uN1U2SnVmcG9tSWNTcU1hWTUrcERu?= =?utf-8?B?U1grMm1RMU4xNXNlR3VUQ2FDSXREOW1Eay9KVVpIenlyUE44VWJkWFRnMGFm?= =?utf-8?B?ZWplQzJWNmZCMkJYN0RpdlowbXVrRHJPSnpZcUprZGlvWCtZSWZTTXBqTXEw?= =?utf-8?B?MDlhNEN5MU03d3lQQkozUTVoNjNiQ095Z3JhdzhzQWRZdElzT1d4bys0YmZq?= =?utf-8?B?dXdSU0IxVEEyaTBNNFh6cjQwL2RBeXc5cWpSczduaG1hSWMvVHU3Qm1zbXIz?= =?utf-8?B?VFhKT1lIYXgyQUdNNFhFMGV0V2VjUk50bDFvL09JUUMzZTFmNm5scXlVT1VQ?= =?utf-8?B?Q0RTQ2wxQ3AwaTJkVER0THVJdUJISmZOV1NDYk1MSllKbGl0YVhhK21tbkt1?= =?utf-8?B?YlFxYldUMzB0TFZBWnVtYUxNdzhRYytRckZsNjZOWk9VM1ZYUGFZbGxqdnBp?= =?utf-8?B?Tk9sQUNRRjJwd1dWd2hpcHR0SWN0WSt3OUtPcWZMNXIxSjAyRmQ0UTNJUDVF?= =?utf-8?B?S2hzTnZaT3RNVFNNTW1waWZaalZPVXJNdHlKZW5SYzhST1dMOXgwcWZrV1VY?= =?utf-8?B?QlpMVlNYaDhEcUt6RjF1SnFpKzdjbEZDQ1ppWURWSFlmWkhMQ254aFdwdE5B?= =?utf-8?B?YS9tUHVUcmx6NlZPSWt5b1haL05uVkZ5RkRiMXAyRE1Td1h5WGgyUExlU2JZ?= =?utf-8?B?OHdQWTNjUnhDVm0wd2FTYkJFYTZ4NUM3WktZOUNJSGN0LzRCNythUTJzdCtn?= =?utf-8?B?MkYrRmVjRzBPK3oxVEcxalF0QU1YTTBydTN5NDFrR3ZzZWwvbk5ZMVRDcVRV?= =?utf-8?B?QUIvTjVmbEtHT3BLeTBheGZuQXRySzJETHA3K2dYVmFMcW52N1BvMGRkYlFI?= =?utf-8?B?QTVnS3Z0bVZvdWFNaDFHelIxbDVVMEkyTVFWd3NlOUdMREUvaStuSWFEYU9k?= =?utf-8?B?WHVDK1I3VGZ3a0VTQ0MzZnR5VDk5Y1J5eVFlK3NEQnVlU1R4OFlYR0dJMkc0?= =?utf-8?B?WU0yS2hzK3BaSHJyclZJazNCQUY4ZDNHM1pyNjF5aUZKSG05YlNNYTFhbGtZ?= =?utf-8?B?a1h4cGt6bGgxRkhkMUNFK1JESWU4WGI0cC9uM3ZVY21uYlBoZ291S205a3dZ?= =?utf-8?B?QmJGdENIZFozSkRJQXEweHViTEVXYU5UR0YrQjFiT0NZcU1JN1gwRm43UTNy?= =?utf-8?B?UDRuci9IQUN6UWZBd3g1dlRUUHBCU3IvUUs5OU14bStKZFRveUtLenVuenM2?= =?utf-8?B?MVRqNnJkWk9UaVNsSnZwVHBhZzF4ZXI2U1lqV01Hdk04dE1NTUpGOWJ6V0Vt?= =?utf-8?B?cGdEbTlBNGlRUWVXY0U4NitETlFKOFhqN3NIVGJ4dStBakJ4Tm9kV2ZHbEVD?= =?utf-8?B?YXR5aGNWV1YvZFpaeHZvM24rckVCY1VGdnk4Um9sSXpCQzRJcWs2Z2FBamxu?= =?utf-8?B?Z1JXcnNIZ3JBMmt4M0Q5emFaaGpCajgzbHQ2OGlzNE5RdFpMQldGemMwVGpv?= =?utf-8?B?dkdkQW9IcGQ4Tno4QkhpMzVnT0x1VFA3TXhsdE10MWdBY1VnbWMyU0pGOEpP?= =?utf-8?B?aXBLQllsU2JYTzJmU0RvT0trOC9uNUprYmJNZWRMZDB5eEtwN3U0d01YaEFn?= =?utf-8?Q?sFEMPht2/91x3ZhttgF2?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 836c65a5-e7cd-41ac-71f1-08dc0ad3d3a5 X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jan 2024 14:13:28.7397 (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: TYZPR06MB3965 Subject: [FFmpeg-devel] [PATCH v9 09/13] vvcdec: add LMCS, Deblocking, SAO, and ALF filters X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Frank Plowman , Nuo Mi , Xu Mu , Shaun Loo , Wu Jianhua Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Q28tYXV0aG9yZWQtYnk6IFh1IE11IDx0b3h1bXVAb3V0bG9vay5jb20+CkNvLWF1dGhvcmVkLWJ5 OiBGcmFuayBQbG93bWFuIDxwb3N0QGZyYW5rcGxvd21hbi5jb20+CkNvLWF1dGhvcmVkLWJ5OiBT aGF1biBMb28gPHNoYXVubG9vMTBAZ21haWwuY29tPgpDby1hdXRob3JlZC1ieTogV3UgSmlhbmh1 YSA8dG9xc3h3QG91dGxvb2suY29tPgotLS0KIGxpYmF2Y29kZWMvdnZjL01ha2VmaWxlICAgICAg ICAgICAgICB8ICAgIDEgKwogbGliYXZjb2RlYy92dmMvdnZjX2N0dS5oICAgICAgICAgICAgIHwg ICAgMSArCiBsaWJhdmNvZGVjL3Z2Yy92dmNfZmlsdGVyLmMgICAgICAgICAgfCAxMzMyICsrKysr KysrKysrKysrKysrKysrKysrKysrCiBsaWJhdmNvZGVjL3Z2Yy92dmNfZmlsdGVyLmggICAgICAg ICAgfCAgIDcxICsrCiBsaWJhdmNvZGVjL3Z2Yy92dmNfZmlsdGVyX3RlbXBsYXRlLmMgfCAxMTM1 ICsrKysrKysrKysrKysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgMjU0MCBpbnNlcnRpb25z KCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92dmMvdnZjX2ZpbHRlci5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92dmMvdnZjX2ZpbHRlci5oCiBjcmVhdGUgbW9kZSAx MDA2NDQgbGliYXZjb2RlYy92dmMvdnZjX2ZpbHRlcl90ZW1wbGF0ZS5jCgpkaWZmIC0tZ2l0IGEv bGliYXZjb2RlYy92dmMvTWFrZWZpbGUgYi9saWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZQppbmRleCAz NWJiNTY1NjgwLi41N2UyYTJhZjc1IDEwMDY0NAotLS0gYS9saWJhdmNvZGVjL3Z2Yy9NYWtlZmls ZQorKysgYi9saWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZQpAQCAtNCw2ICs0LDcgQEAgY2xlYW46Ogog T0JKUy0kKENPTkZJR19WVkNfREVDT0RFUikgICAgICAgICAgKz0gIHZ2Yy92dmNfY2FiYWMubyAg ICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dmMvdnZj X2N0dS5vICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdnZjL3Z2Y19kYXRhLm8gICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZ2Yy92dmNfZmlsdGVyLm8gICAgICAgIFwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2dmMvdnZjX2ludGVyLm8gICAgICAgICBcCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19pbnRyYS5vICAgICAgICAg XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2Yy92dmNfaXR4XzFk Lm8gICAgICAgIFwKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL3Z2Y19jdHUuaCBiL2xpYmF2 Y29kZWMvdnZjL3Z2Y19jdHUuaAppbmRleCA0N2M5ZjE4MWJiLi5mM2IxYjRiN2UzIDEwMDY0NAot LS0gYS9saWJhdmNvZGVjL3Z2Yy92dmNfY3R1LmgKKysrIGIvbGliYXZjb2RlYy92dmMvdnZjX2N0 dS5oCkBAIC00NjMsNiArNDYzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQUxGUGFyYW1zIHsKIHZvaWQg ZmZfdnZjX3NldF9uZWlnaGJvdXJfYXZhaWxhYmxlKFZWQ0xvY2FsQ29udGV4dCAqbGMsIGludCB4 MCwgaW50IHkwLCBpbnQgdywgaW50IGgpOwogdm9pZCBmZl92dmNfZGVjb2RlX25laWdoYm91cihW VkNMb2NhbENvbnRleHQgKmxjLCBpbnQgeF9jdGIsIGludCB5X2N0YiwgaW50IHJ4LCBpbnQgcnks IGludCBycyk7CiB2b2lkIGZmX3Z2Y19jdHVfZnJlZV9jdXMoQ1RVICpjdHUpOworaW50IGZmX3Z2 Y19nZXRfcVB5KGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGludCB4YywgaW50IHljKTsKIHZv aWQgZmZfdnZjX2VwX2luaXRfc3RhdF9jb2VmZihFbnRyeVBvaW50ICplcCwgaW50IGJpdF9kZXB0 aCwgaW50IHBlcnNpc3RlbnRfcmljZV9hZGFwdGF0aW9uX2VuYWJsZWRfZmxhZyk7CiAKICNlbmRp ZiAvLyBBVkNPREVDX1ZWQ19WVkNfQ1RVX0gKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL3Z2 Y19maWx0ZXIuYyBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19maWx0ZXIuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwLi5lNWNkODliOGEzCi0tLSAvZGV2L251bGwKKysrIGIvbGli YXZjb2RlYy92dmMvdnZjX2ZpbHRlci5jCkBAIC0wLDAgKzEsMTMzMiBAQAorLyoKKyAqIFZWQyBm aWx0ZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDIxIE51byBNaQorICoKKyAqIFRoaXMgZmls ZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4x IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor ICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxv bmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZv dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg TUEgMDIxMTAtMTMwMSBVU0EKKyAqLworI2luY2x1ZGUgImxpYmF2dXRpbC9mcmFtZS5oIgorCisj aW5jbHVkZSAidnZjX2N0dS5oIgorI2luY2x1ZGUgInZ2Y19kYXRhLmgiCisjaW5jbHVkZSAidnZj X2ZpbHRlci5oIgorI2luY2x1ZGUgInZ2Y19yZWZzLmgiCisKKyNkZWZpbmUgTEVGVCAgICAgICAg MAorI2RlZmluZSBUT1AgICAgICAgICAxCisjZGVmaW5lIFJJR0hUICAgICAgIDIKKyNkZWZpbmUg Qk9UVE9NICAgICAgMworI2RlZmluZSBNQVhfRURHRVMgICA0CisKKyNkZWZpbmUgREVGQVVMVF9J TlRSQV9UQ19PRkZTRVQgMgorCisvL1RhYmxlIDQzIERlcml2YXRpb24gb2YgdGhyZXNob2xkIHZh cmlhYmxlcyBiZXRhJyBhbmQgdGMnIGZyb20gaW5wdXQgUQorc3RhdGljIGNvbnN0IHVpbnQxNl90 IHRjdGFibGVbNjZdID0geworICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAgIDAsICAg MCwgICAzLCAgIDQsICAgNCwgICA0LCAgIDQsICAgNSwgICA1LCAgIDUsICAgNSwgICA3LCAgIDcs ICAgOCwgICA5LCAgMTAsCisgICAgIDEwLCAgMTEsICAxMywgIDE0LCAgMTUsICAxNywgIDE5LCAg MjEsICAyNCwgIDI1LCAgMjksICAzMywgIDM2LCAgNDEsICA0NSwgIDUxLAorICAgICA1NywgIDY0 LCAgNzEsICA4MCwgIDg5LCAxMDAsIDExMiwgMTI1LCAxNDEsIDE1NywgMTc3LCAxOTgsIDIyMiwg MjUwLCAyODAsIDMxNCwKKyAgICAzNTIsIDM5NSwKK307CisKKy8vVGFibGUgNDMgRGVyaXZhdGlv biBvZiB0aHJlc2hvbGQgdmFyaWFibGVzIGJldGEnIGFuZCB0YycgZnJvbSBpbnB1dCBRCitzdGF0 aWMgY29uc3QgdWludDhfdCBiZXRhdGFibGVbNjRdID0geworICAgICAgMCwgICAwLCAgIDAsICAg MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs ICAgMCwKKyAgICAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAg MTUsICAxNiwgIDE3LCAgMTgsICAyMCwgIDIyLCAgMjQsCisgICAgIDI2LCAgMjgsICAzMCwgIDMy LCAgMzQsICAzNiwgIDM4LCAgNDAsICA0MiwgIDQ0LCAgNDYsICA0OCwgIDUwLCAgNTIsICA1NCwg IDU2LAorICAgICA1OCwgIDYwLCAgNjIsICA2NCwgIDY2LCAgNjgsICA3MCwgIDcyLCAgNzQsICA3 NiwgIDc4LCAgODAsICA4MiwgIDg0LCAgODYsICA4OCwKK307CisKK3N0YXRpYyBpbnQgZ2V0X3FQ Yyhjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjLCBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCwg Y29uc3QgaW50IGNocm9tYSkKK3sKKyAgICBjb25zdCBpbnQgeCAgICAgICAgICAgID0geDAgPj4g TUlOX1RVX0xPRzI7CisgICAgY29uc3QgaW50IHkgICAgICAgICAgICA9IHkwID4+IE1JTl9UVV9M T0cyOworICAgIGNvbnN0IGludCBtaW5fdHVfd2lkdGggPSBmYy0+cHMucHBzLT5taW5fdHVfd2lk dGg7CisgICAgcmV0dXJuIGZjLT50YWIucXBbY2hyb21hXVt4ICsgeSAqIG1pbl90dV93aWR0aF07 Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfY3RiKHVpbnQ4X3QgKmRzdCwgY29uc3QgdWludDhfdCAq c3JjLCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsCisgICAgY29uc3QgcHRyZGlm Zl90IGRzdF9zdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlKQoreworICAgIGZvciAo aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCB3 aWR0aCk7CisKKyAgICAgICAgZHN0ICs9IGRzdF9zdHJpZGU7CisgICAgICAgIHNyYyArPSBzcmNf c3RyaWRlOworICAgIH0KK30KKworc3RhdGljIHZvaWQgY29weV9waXhlbCh1aW50OF90ICpkc3Qs IGNvbnN0IHVpbnQ4X3QgKnNyYywgY29uc3QgaW50IHBpeGVsX3NoaWZ0KQoreworICAgIGlmIChw aXhlbF9zaGlmdCkKKyAgICAgICAgKih1aW50MTZfdCAqKWRzdCA9ICoodWludDE2X3QgKilzcmM7 CisgICAgZWxzZQorICAgICAgICAqZHN0ID0gKnNyYzsKK30KKworc3RhdGljIHZvaWQgY29weV92 ZXJ0KHVpbnQ4X3QgKmRzdCwgY29uc3QgdWludDhfdCAqc3JjLCBjb25zdCBpbnQgcGl4ZWxfc2hp ZnQsIGNvbnN0IGludCBoZWlnaHQsCisgICAgY29uc3QgcHRyZGlmZl90IGRzdF9zdHJpZGUsIGNv bnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlKQoreworICAgIGludCBpOworICAgIGlmIChwaXhlbF9z aGlmdCA9PSAwKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgeworICAg ICAgICAgICAgKmRzdCA9ICpzcmM7CisgICAgICAgICAgICBkc3QgKz0gZHN0X3N0cmlkZTsKKyAg ICAgICAgICAgIHNyYyArPSBzcmNfc3RyaWRlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg ICAgICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisgICAgICAgICAgICAqKHVpbnQx Nl90ICopZHN0ID0gKih1aW50MTZfdCAqKXNyYzsKKyAgICAgICAgICAgIGRzdCArPSBkc3Rfc3Ry aWRlOworICAgICAgICAgICAgc3JjICs9IHNyY19zdHJpZGU7CisgICAgICAgIH0KKyAgICB9Cit9 CisKK3N0YXRpYyB2b2lkIGNvcHlfY3RiX3RvX2h2KFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0 IHVpbnQ4X3QgKnNyYywKKyAgICBjb25zdCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwgY29uc3QgaW50 IHgsIGNvbnN0IGludCB5LCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsCisgICAg Y29uc3QgaW50IGNfaWR4LCBjb25zdCBpbnQgeF9jdGIsIGNvbnN0IGludCB5X2N0YiwgY29uc3Qg aW50IHRvcCkKK3sKKyAgICBjb25zdCBpbnQgcHMgPSBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdDsK KyAgICBjb25zdCBpbnQgdyAgPSBmYy0+cHMuc3BzLT53aWR0aCA+PiBmYy0+cHMuc3BzLT5oc2hp ZnRbY19pZHhdOworICAgIGNvbnN0IGludCBoICA9IGZjLT5wcy5zcHMtPmhlaWdodCA+PiBmYy0+ cHMuc3BzLT52c2hpZnRbY19pZHhdOworCisgICAgaWYgKHRvcCkgeworICAgICAgICAvKiB0b3Ag Ki8KKyAgICAgICAgbWVtY3B5KGZjLT50YWIuc2FvX3BpeGVsX2J1ZmZlcl9oW2NfaWR4XSArICgo KDIgKiB5X2N0YikgKiB3ICsgeCkgPDwgcHMpLAorICAgICAgICAgICAgc3JjLCB3aWR0aCA8PCBw cyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogYm90dG9tICovCisgICAgICAgIG1lbWNweShm Yy0+dGFiLnNhb19waXhlbF9idWZmZXJfaFtjX2lkeF0gKyAoKCgyICogeV9jdGIgKyAxKSAqIHcg KyB4KSA8PCBwcyksCisgICAgICAgICAgICBzcmMgKyBzcmNfc3RyaWRlICogKGhlaWdodCAtIDEp LCB3aWR0aCA8PCBwcyk7CisKKyAgICAgICAgLyogY29weSB2ZXJ0aWNhbCBlZGdlcyAqLworICAg ICAgICBjb3B5X3ZlcnQoZmMtPnRhYi5zYW9fcGl4ZWxfYnVmZmVyX3ZbY19pZHhdICsgKCgoMiAq IHhfY3RiKSAqIGggKyB5KSA8PCBwcyksIHNyYywgcHMsIGhlaWdodCwgMSA8PCBwcywgc3JjX3N0 cmlkZSk7CisgICAgICAgIGNvcHlfdmVydChmYy0+dGFiLnNhb19waXhlbF9idWZmZXJfdltjX2lk eF0gKyAoKCgyICogeF9jdGIgKyAxKSAqIGggKyB5KSA8PCBwcyksIHNyYyArICgod2lkdGggLSAx KSA8PCBwcyksIHBzLCBoZWlnaHQsIDEgPDwgcHMsIHNyY19zdHJpZGUpOworICAgIH0KK30KKwor c3RhdGljIHZvaWQgc2FvX2NvcHlfY3RiX3RvX2h2KFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0 IGludCByeCwgY29uc3QgaW50IHJ5LCBjb25zdCBpbnQgdG9wKQoreworICAgIFZWQ0ZyYW1lQ29u dGV4dCAqZmMgID0gbGMtPmZjOworICAgIGNvbnN0IGludCBjdGJfc2l6ZV95ID0gZmMtPnBzLnNw cy0+Y3RiX3NpemVfeTsKKyAgICBjb25zdCBpbnQgeDAgICAgICAgICA9IHJ4IDw8IGZjLT5wcy5z cHMtPmN0Yl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQgeTAgICAgICAgICA9IHJ5IDw8IGZj LT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeTsKKworICAgIGZvciAoaW50IGNfaWR4ID0gMDsgY19p ZHggPCAoZmMtPnBzLnNwcy0+ci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID8gMyA6IDEpOyBjX2lk eCsrKSB7CisgICAgICAgIGNvbnN0IGludCB4ICAgICAgICAgICAgICAgID0geDAgPj4gZmMtPnBz LnNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IHkgICAgICAgICAgICAgICAg PSB5MCA+PiBmYy0+cHMuc3BzLT52c2hpZnRbY19pZHhdOworICAgICAgICBjb25zdCBwdHJkaWZm X3Qgc3JjX3N0cmlkZSA9IGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhdOworICAgICAgICBjb25z dCBpbnQgY3RiX3NpemVfaCAgICAgICA9IGN0Yl9zaXplX3kgPj4gZmMtPnBzLnNwcy0+aHNoaWZ0 W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IGN0Yl9zaXplX3YgICAgICAgPSBjdGJfc2l6ZV95 ID4+IGZjLT5wcy5zcHMtPnZzaGlmdFtjX2lkeF07CisgICAgICAgIGNvbnN0IGludCB3aWR0aCAg ICAgICAgICAgID0gRkZNSU4oY3RiX3NpemVfaCwgKGZjLT5wcy5zcHMtPndpZHRoICA+PiBmYy0+ cHMuc3BzLT5oc2hpZnRbY19pZHhdKSAtIHgpOworICAgICAgICBjb25zdCBpbnQgaGVpZ2h0ICAg ICAgICAgICA9IEZGTUlOKGN0Yl9zaXplX3YsIChmYy0+cHMuc3BzLT5oZWlnaHQgPj4gZmMtPnBz LnNwcy0+dnNoaWZ0W2NfaWR4XSkgLSB5KTsKKyAgICAgICAgY29uc3QgdWludDhfdCAqc3JjICAg ICAgICAgID0gJmZjLT5mcmFtZS0+ZGF0YVtjX2lkeF1beSAqIHNyY19zdHJpZGUgKyAoeCA8PCBm Yy0+cHMuc3BzLT5waXhlbF9zaGlmdCldOworICAgICAgICBjb3B5X2N0Yl90b19odihmYywgc3Jj LCBzcmNfc3RyaWRlLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjX2lkeCwgcngsIHJ5LCB0b3ApOwor ICAgIH0KK30KKwordm9pZCBmZl92dmNfc2FvX2NvcHlfY3RiX3RvX2h2KFZWQ0xvY2FsQ29udGV4 dCAqbGMsIGNvbnN0IGludCByeCwgY29uc3QgaW50IHJ5LCBjb25zdCBpbnQgbGFzdF9yb3cpCit7 CisgICAgaWYgKHJ5KQorICAgICAgICBzYW9fY29weV9jdGJfdG9faHYobGMsIHJ4LCByeSAtIDEs IDApOworCisgICAgc2FvX2NvcHlfY3RiX3RvX2h2KGxjLCByeCwgcnksIDEpOworCisgICAgaWYg KGxhc3Rfcm93KQorICAgICAgICBzYW9fY29weV9jdGJfdG9faHYobGMsIHJ4LCByeSwgMCk7Cit9 CisKK3ZvaWQgZmZfdnZjX3Nhb19maWx0ZXIoVlZDTG9jYWxDb250ZXh0ICpsYywgaW50IHgsIGlu dCB5KQoreworICAgIFZWQ0ZyYW1lQ29udGV4dCAqZmMgID0gbGMtPmZjOworICAgIGNvbnN0IGlu dCBjdGJfc2l6ZV95ID0gZmMtPnBzLnNwcy0+Y3RiX3NpemVfeTsKKyAgICBzdGF0aWMgY29uc3Qg dWludDhfdCBzYW9fdGFiWzE2XSA9IHsgMCwgMSwgMiwgMiwgMywgMywgNCwgNCwgNSwgNSwgNiwg NiwgNywgNywgOCwgOCB9OworICAgIGludCBjX2lkeDsKKyAgICBpbnQgZWRnZXNbNF07ICAvLyAw IGxlZnQgMSB0b3AgMiByaWdodCAzIGJvdHRvbQorICAgIGNvbnN0IGludCB4X2N0YiAgICAgID0g eCA+PiBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3k7CisgICAgY29uc3QgaW50IHlfY3RiICAg ICAgPSB5ID4+IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBTQU9QYXJh bXMgKnNhbyA9ICZDVEIoZmMtPnRhYi5zYW8sIHhfY3RiLCB5X2N0Yik7CisgICAgLy8gZmxhZ3Mg aW5kaWNhdGluZyB1bmZpbHRlcmFibGUgZWRnZXMKKyAgICB1aW50OF90IHZlcnRfZWRnZVtdICAg ICAgICAgID0geyAwLCAwIH07CisgICAgdWludDhfdCBob3Jpel9lZGdlW10gICAgICAgICA9IHsg MCwgMCB9OworICAgIHVpbnQ4X3QgZGlhZ19lZGdlW10gICAgICAgICAgPSB7IDAsIDAsIDAsIDAg fTsKKyAgICBjb25zdCB1aW50OF90IGxmYXNlICAgICAgICAgID0gZmMtPnBzLnBwcy0+ci0+cHBz X2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnOworICAgIGNvbnN0IHVpbnQ4 X3Qgbm9fdGlsZV9maWx0ZXIgPSBmYy0+cHMucHBzLT5yLT5udW1fdGlsZXNfaW5fcGljID4gMSAm JgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFmYy0+cHMucHBzLT5yLT5wcHNfbG9v cF9maWx0ZXJfYWNyb3NzX3RpbGVzX2VuYWJsZWRfZmxhZzsKKyAgICBjb25zdCB1aW50OF90IHJl c3RvcmUgICAgICAgID0gbm9fdGlsZV9maWx0ZXIgfHwgIWxmYXNlOworICAgIHVpbnQ4X3QgbGVm dF90aWxlX2VkZ2UgICA9IDA7CisgICAgdWludDhfdCByaWdodF90aWxlX2VkZ2UgID0gMDsKKyAg ICB1aW50OF90IHVwX3RpbGVfZWRnZSAgICAgPSAwOworICAgIHVpbnQ4X3QgYm90dG9tX3RpbGVf ZWRnZSA9IDA7CisKKyAgICBlZGdlc1tMRUZUXSAgID0geF9jdGIgPT0gMDsKKyAgICBlZGdlc1tU T1BdICAgID0geV9jdGIgPT0gMDsKKyAgICBlZGdlc1tSSUdIVF0gID0geF9jdGIgPT0gZmMtPnBz LnBwcy0+Y3RiX3dpZHRoICAtIDE7CisgICAgZWRnZXNbQk9UVE9NXSA9IHlfY3RiID09IGZjLT5w cy5wcHMtPmN0Yl9oZWlnaHQgLSAxOworCisgICAgaWYgKHJlc3RvcmUpIHsKKyAgICAgICAgaWYg KCFlZGdlc1tMRUZUXSkgeworICAgICAgICAgICAgbGVmdF90aWxlX2VkZ2UgID0gbm9fdGlsZV9m aWx0ZXIgJiYgZmMtPnBzLnBwcy0+Y3RiX3RvX2NvbF9iZFt4X2N0Yl0gPT0geF9jdGI7CisgICAg ICAgICAgICB2ZXJ0X2VkZ2VbMF0gICAgPSAoIWxmYXNlICYmIENUQihmYy0+dGFiLnNsaWNlX2lk eCwgeF9jdGIsIHlfY3RiKSAhPSBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiIC0gMSwgeV9j dGIpKSB8fCBsZWZ0X3RpbGVfZWRnZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWVkZ2VzW1JJ R0hUXSkgeworICAgICAgICAgICAgcmlnaHRfdGlsZV9lZGdlID0gbm9fdGlsZV9maWx0ZXIgJiYg ZmMtPnBzLnBwcy0+Y3RiX3RvX2NvbF9iZFt4X2N0Yl0gIT0gZmMtPnBzLnBwcy0+Y3RiX3RvX2Nv bF9iZFt4X2N0YiArIDFdOworICAgICAgICAgICAgdmVydF9lZGdlWzFdICAgID0gKCFsZmFzZSAm JiBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YikgIT0gQ1RCKGZjLT50YWIuc2xp Y2VfaWR4LCB4X2N0YiArIDEsIHlfY3RiKSkgfHwgcmlnaHRfdGlsZV9lZGdlOworICAgICAgICB9 CisgICAgICAgIGlmICghZWRnZXNbVE9QXSkgeworICAgICAgICAgICAgdXBfdGlsZV9lZGdlICAg ICA9IG5vX3RpbGVfZmlsdGVyICYmIGZjLT5wcy5wcHMtPmN0Yl90b19yb3dfYmRbeV9jdGJdID09 IHlfY3RiOworICAgICAgICAgICAgaG9yaXpfZWRnZVswXSAgICA9ICghbGZhc2UgJiYgQ1RCKGZj LT50YWIuc2xpY2VfaWR4LCB4X2N0YiwgeV9jdGIpICE9IENUQihmYy0+dGFiLnNsaWNlX2lkeCwg eF9jdGIsIHlfY3RiIC0gMSkpIHx8IHVwX3RpbGVfZWRnZTsKKyAgICAgICAgfQorICAgICAgICBp ZiAoIWVkZ2VzW0JPVFRPTV0pIHsKKyAgICAgICAgICAgIGJvdHRvbV90aWxlX2VkZ2UgPSBub190 aWxlX2ZpbHRlciAmJiBmYy0+cHMucHBzLT5jdGJfdG9fcm93X2JkW3lfY3RiXSAhPSBmYy0+cHMu cHBzLT5jdGJfdG9fcm93X2JkW3lfY3RiICsgMV07CisgICAgICAgICAgICBob3Jpel9lZGdlWzFd ICAgID0gKCFsZmFzZSAmJiBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YikgIT0g Q1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0YiwgeV9jdGIgKyAxKSkgfHwgYm90dG9tX3RpbGVf ZWRnZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWVkZ2VzW0xFRlRdICYmICFlZGdlc1tUT1Bd KSB7CisgICAgICAgICAgICBkaWFnX2VkZ2VbMF0gPSAoIWxmYXNlICYmIENUQihmYy0+dGFiLnNs aWNlX2lkeCwgeF9jdGIsIHlfY3RiKSAhPSBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiIC0g MSwgeV9jdGIgLSAxKSkgfHwgbGVmdF90aWxlX2VkZ2UgfHwgdXBfdGlsZV9lZGdlOworICAgICAg ICB9CisgICAgICAgIGlmICghZWRnZXNbVE9QXSAmJiAhZWRnZXNbUklHSFRdKSB7CisgICAgICAg ICAgICBkaWFnX2VkZ2VbMV0gPSAoIWxmYXNlICYmIENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9j dGIsIHlfY3RiKSAhPSBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiICsgMSwgeV9jdGIgLSAx KSkgfHwgcmlnaHRfdGlsZV9lZGdlIHx8IHVwX3RpbGVfZWRnZTsKKyAgICAgICAgfQorICAgICAg ICBpZiAoIWVkZ2VzW1JJR0hUXSAmJiAhZWRnZXNbQk9UVE9NXSkgeworICAgICAgICAgICAgZGlh Z19lZGdlWzJdID0gKCFsZmFzZSAmJiBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0 YikgIT0gQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0YiArIDEsIHlfY3RiICsgMSkpIHx8IHJp Z2h0X3RpbGVfZWRnZSB8fCBib3R0b21fdGlsZV9lZGdlOworICAgICAgICB9CisgICAgICAgIGlm ICghZWRnZXNbTEVGVF0gJiYgIWVkZ2VzW0JPVFRPTV0pIHsKKyAgICAgICAgICAgIGRpYWdfZWRn ZVszXSA9ICghbGZhc2UgJiYgQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0YiwgeV9jdGIpICE9 IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIgLSAxLCB5X2N0YiArIDEpKSB8fCBsZWZ0X3Rp bGVfZWRnZSB8fCBib3R0b21fdGlsZV9lZGdlOworICAgICAgICB9CisgICAgfQorCisgICAgZm9y IChjX2lkeCA9IDA7IGNfaWR4IDwgKGZjLT5wcy5zcHMtPnItPnNwc19jaHJvbWFfZm9ybWF0X2lk YyA/IDMgOiAxKTsgY19pZHgrKykgeworICAgICAgICBpbnQgeDAgICAgICAgPSB4ID4+IGZjLT5w cy5zcHMtPmhzaGlmdFtjX2lkeF07CisgICAgICAgIGludCB5MCAgICAgICA9IHkgPj4gZmMtPnBz LnNwcy0+dnNoaWZ0W2NfaWR4XTsKKyAgICAgICAgcHRyZGlmZl90IHNyY19zdHJpZGUgPSBmYy0+ ZnJhbWUtPmxpbmVzaXplW2NfaWR4XTsKKyAgICAgICAgaW50IGN0Yl9zaXplX2ggPSBjdGJfc2l6 ZV95ID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF07CisgICAgICAgIGludCBjdGJfc2l6ZV92 ID0gY3RiX3NpemVfeSA+PiBmYy0+cHMuc3BzLT52c2hpZnRbY19pZHhdOworICAgICAgICBpbnQg d2lkdGggICAgPSBGRk1JTihjdGJfc2l6ZV9oLCAoZmMtPnBzLnNwcy0+d2lkdGggID4+IGZjLT5w cy5zcHMtPmhzaGlmdFtjX2lkeF0pIC0geDApOworICAgICAgICBpbnQgaGVpZ2h0ICAgPSBGRk1J TihjdGJfc2l6ZV92LCAoZmMtPnBzLnNwcy0+aGVpZ2h0ID4+IGZjLT5wcy5zcHMtPnZzaGlmdFtj X2lkeF0pIC0geTApOworICAgICAgICBpbnQgdGFiICAgICAgPSBzYW9fdGFiWyhGRkFMSUdOKHdp ZHRoLCA4KSA+PiAzKSAtIDFdOworICAgICAgICB1aW50OF90ICpzcmMgPSAmZmMtPmZyYW1lLT5k YXRhW2NfaWR4XVt5MCAqIHNyY19zdHJpZGUgKyAoeDAgPDwgZmMtPnBzLnNwcy0+cGl4ZWxfc2hp ZnQpXTsKKyAgICAgICAgcHRyZGlmZl90IGRzdF9zdHJpZGU7CisgICAgICAgIHVpbnQ4X3QgKmRz dDsKKworICAgICAgICBzd2l0Y2ggKHNhby0+dHlwZV9pZHhbY19pZHhdKSB7CisgICAgICAgIGNh c2UgU0FPX0JBTkQ6CisgICAgICAgICAgICBmYy0+dnZjZHNwLnNhby5iYW5kX2ZpbHRlclt0YWJd KHNyYywgc3JjLCBzcmNfc3RyaWRlLCBzcmNfc3RyaWRlLAorICAgICAgICAgICAgICAgIHNhby0+ b2Zmc2V0X3ZhbFtjX2lkeF0sIHNhby0+YmFuZF9wb3NpdGlvbltjX2lkeF0sIHdpZHRoLCBoZWln aHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0FPX0VER0U6CisgICAgICAg IHsKKyAgICAgICAgICAgIGNvbnN0IGludCB3ID0gZmMtPnBzLnNwcy0+d2lkdGggPj4gZmMtPnBz LnNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICAgICAgICAgIGNvbnN0IGludCBoID0gZmMtPnBzLnNw cy0+aGVpZ2h0ID4+IGZjLT5wcy5zcHMtPnZzaGlmdFtjX2lkeF07CisgICAgICAgICAgICBjb25z dCBpbnQgc2ggPSBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdDsKKworICAgICAgICAgICAgZHN0X3N0 cmlkZSA9IDIqTUFYX1BCX1NJWkUgKyBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFOworICAg ICAgICAgICAgZHN0ID0gbGMtPnNhb19idWZmZXIgKyBkc3Rfc3RyaWRlICsgQVZfSU5QVVRfQlVG RkVSX1BBRERJTkdfU0laRTsKKworICAgICAgICAgICAgaWYgKCFlZGdlc1tUT1BdKSB7CisgICAg ICAgICAgICAgICAgY29uc3QgaW50IGxlZnQgPSAxIC0gZWRnZXNbTEVGVF07CisgICAgICAgICAg ICAgICAgY29uc3QgaW50IHJpZ2h0ID0gMSAtIGVkZ2VzW1JJR0hUXTsKKyAgICAgICAgICAgICAg ICBjb25zdCB1aW50OF90ICpzcmMxOworICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmRzdDE7Cisg ICAgICAgICAgICAgICAgaW50IHBvcyA9IDA7CisKKyAgICAgICAgICAgICAgICBkc3QxID0gZHN0 IC0gZHN0X3N0cmlkZSAtIChsZWZ0IDw8IHNoKTsKKyAgICAgICAgICAgICAgICBzcmMxID0gZmMt PnRhYi5zYW9fcGl4ZWxfYnVmZmVyX2hbY19pZHhdICsgKCgoMiAqIHlfY3RiIC0gMSkgKiB3ICsg eDAgLSBsZWZ0KSA8PCBzaCk7CisgICAgICAgICAgICAgICAgaWYgKGxlZnQpIHsKKyAgICAgICAg ICAgICAgICAgICAgY29weV9waXhlbChkc3QxLCBzcmMxLCBzaCk7CisgICAgICAgICAgICAgICAg ICAgIHBvcyArPSAoMSA8PCBzaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IG1lbWNweShkc3QxICsgcG9zLCBzcmMxICsgcG9zLCB3aWR0aCA8PCBzaCk7CisgICAgICAgICAg ICAgICAgaWYgKHJpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIHBvcyArPSB3aWR0aCA8PCBz aDsKKyAgICAgICAgICAgICAgICAgICAgY29weV9waXhlbChkc3QxICsgcG9zLCBzcmMxICsgcG9z LCBzaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg KCFlZGdlc1tCT1RUT01dKSB7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IGxlZnQgPSAxIC0g ZWRnZXNbTEVGVF07CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHJpZ2h0ID0gMSAtIGVkZ2Vz W1JJR0hUXTsKKyAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpzcmMxOworICAgICAgICAg ICAgICAgIHVpbnQ4X3QgKmRzdDE7CisgICAgICAgICAgICAgICAgaW50IHBvcyA9IDA7CisKKyAg ICAgICAgICAgICAgICBkc3QxID0gZHN0ICsgaGVpZ2h0ICogZHN0X3N0cmlkZSAtIChsZWZ0IDw8 IHNoKTsKKyAgICAgICAgICAgICAgICBzcmMxID0gZmMtPnRhYi5zYW9fcGl4ZWxfYnVmZmVyX2hb Y19pZHhdICsgKCgoMiAqIHlfY3RiICsgMikgKiB3ICsgeDAgLSBsZWZ0KSA8PCBzaCk7CisgICAg ICAgICAgICAgICAgaWYgKGxlZnQpIHsKKyAgICAgICAgICAgICAgICAgICAgY29weV9waXhlbChk c3QxLCBzcmMxLCBzaCk7CisgICAgICAgICAgICAgICAgICAgIHBvcyArPSAoMSA8PCBzaCk7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1lbWNweShkc3QxICsgcG9zLCBzcmMx ICsgcG9zLCB3aWR0aCA8PCBzaCk7CisgICAgICAgICAgICAgICAgaWYgKHJpZ2h0KSB7CisgICAg ICAgICAgICAgICAgICAgIHBvcyArPSB3aWR0aCA8PCBzaDsKKyAgICAgICAgICAgICAgICAgICAg Y29weV9waXhlbChkc3QxICsgcG9zLCBzcmMxICsgcG9zLCBzaCk7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFlZGdlc1tMRUZUXSkgeworICAgICAg ICAgICAgICAgIGNvcHlfdmVydChkc3QgLSAoMSA8PCBzaCksCisgICAgICAgICAgICAgICAgICAg IGZjLT50YWIuc2FvX3BpeGVsX2J1ZmZlcl92W2NfaWR4XSArICgoKDIgKiB4X2N0YiAtIDEpICog aCArIHkwKSA8PCBzaCksCisgICAgICAgICAgICAgICAgICAgIHNoLCBoZWlnaHQsIGRzdF9zdHJp ZGUsIDEgPDwgc2gpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFlZGdlc1tSSUdI VF0pIHsKKyAgICAgICAgICAgICAgICBjb3B5X3ZlcnQoZHN0ICsgKHdpZHRoIDw8IHNoKSwKKyAg ICAgICAgICAgICAgICAgICAgZmMtPnRhYi5zYW9fcGl4ZWxfYnVmZmVyX3ZbY19pZHhdICsgKCgo MiAqIHhfY3RiICsgMikgKiBoICsgeTApIDw8IHNoKSwKKyAgICAgICAgICAgICAgICAgICAgc2gs IGhlaWdodCwgZHN0X3N0cmlkZSwgMSA8PCBzaCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg ICAgIGNvcHlfY3RiKGRzdCwgc3JjLCAgd2lkdGggPDwgc2gsIGhlaWdodCwgZHN0X3N0cmlkZSwg c3JjX3N0cmlkZSk7CisgICAgICAgICAgICBmYy0+dnZjZHNwLnNhby5lZGdlX2ZpbHRlclt0YWJd KHNyYywgZHN0LCBzcmNfc3RyaWRlLCBzYW8tPm9mZnNldF92YWxbY19pZHhdLAorICAgICAgICAg ICAgICAgIHNhby0+ZW9fY2xhc3NbY19pZHhdLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAg IGZjLT52dmNkc3Auc2FvLmVkZ2VfcmVzdG9yZVtyZXN0b3JlXShzcmMsIGRzdCwgc3JjX3N0cmlk ZSwgZHN0X3N0cmlkZSwKKyAgICAgICAgICAgICAgICBzYW8sIGVkZ2VzLCB3aWR0aCwgaGVpZ2h0 LCBjX2lkeCwgdmVydF9lZGdlLCBob3Jpel9lZGdlLCBkaWFnX2VkZ2UpOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworI2RlZmluZSBUQUJfQlMo dCwgeCwgeSkgICAgICAgKHQpWygoeSkgPj4gMikgKiAoZmMtPnRhYi5zei5ic193aWR0aCkgKyAo KHgpID4+IDIpXQorI2RlZmluZSBUQUJfTUFYX0xFTih0LCB4LCB5KSAgKHQpWygoeSkgPj4gMikg KiAoZmMtPnRhYi5zei5ic193aWR0aCkgKyAoKHgpID4+IDIpXQorCisvLzggc2FtcGxlcyBhIHRp bWUKKyNkZWZpbmUgREVCTE9DS19TVEVQICAgICAgICAgICAgOAorI2RlZmluZSBMVU1BX0dSSUQg ICAgICAgICAgICAgICA0CisjZGVmaW5lIENIUk9NQV9HUklEICAgICAgICAgICAgIDgKKworc3Rh dGljIGludCBib3VuZGFyeV9zdHJlbmd0aChjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBjb25z dCBNdkZpZWxkICpjdXJyLCBjb25zdCBNdkZpZWxkICpuZWlnaCwKKyAgICBjb25zdCBSZWZQaWNM aXN0ICpuZWlnaF9ycGwpCit7CisgICAgUmVmUGljTGlzdCAqcnBsID0gbGMtPnNjLT5ycGw7Cisg ICAgaWYgKGN1cnItPnByZWRfZmxhZyA9PSBQRl9CSSAmJiAgbmVpZ2gtPnByZWRfZmxhZyA9PSBQ Rl9CSSkgeworICAgICAgICAvLyBzYW1lIEwwIGFuZCBMMQorICAgICAgICBpZiAocnBsWzBdLmxp c3RbY3Vyci0+cmVmX2lkeFswXV0gPT0gbmVpZ2hfcnBsWzBdLmxpc3RbbmVpZ2gtPnJlZl9pZHhb MF1dICAmJgorICAgICAgICAgICAgcnBsWzBdLmxpc3RbY3Vyci0+cmVmX2lkeFswXV0gPT0gcnBs WzFdLmxpc3RbY3Vyci0+cmVmX2lkeFsxXV0gJiYKKyAgICAgICAgICAgIG5laWdoX3JwbFswXS5s aXN0W25laWdoLT5yZWZfaWR4WzBdXSA9PSBuZWlnaF9ycGxbMV0ubGlzdFtuZWlnaC0+cmVmX2lk eFsxXV0pIHsKKyAgICAgICAgICAgIGlmICgoRkZBQlMobmVpZ2gtPm12WzBdLnggLSBjdXJyLT5t dlswXS54KSA+PSA4IHx8IEZGQUJTKG5laWdoLT5tdlswXS55IC0gY3Vyci0+bXZbMF0ueSkgPj0g OCB8fAorICAgICAgICAgICAgICAgICBGRkFCUyhuZWlnaC0+bXZbMV0ueCAtIGN1cnItPm12WzFd LngpID49IDggfHwgRkZBQlMobmVpZ2gtPm12WzFdLnkgLSBjdXJyLT5tdlsxXS55KSA+PSA4KSAm JgorICAgICAgICAgICAgICAgIChGRkFCUyhuZWlnaC0+bXZbMV0ueCAtIGN1cnItPm12WzBdLngp ID49IDggfHwgRkZBQlMobmVpZ2gtPm12WzFdLnkgLSBjdXJyLT5tdlswXS55KSA+PSA4IHx8Cisg ICAgICAgICAgICAgICAgIEZGQUJTKG5laWdoLT5tdlswXS54IC0gY3Vyci0+bXZbMV0ueCkgPj0g OCB8fCBGRkFCUyhuZWlnaC0+bXZbMF0ueSAtIGN1cnItPm12WzFdLnkpID49IDgpKQorICAgICAg ICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJl dHVybiAwOworICAgICAgICB9IGVsc2UgaWYgKG5laWdoX3JwbFswXS5saXN0W25laWdoLT5yZWZf aWR4WzBdXSA9PSBycGxbMF0ubGlzdFtjdXJyLT5yZWZfaWR4WzBdXSAmJgorICAgICAgICAgICAg ICAgICAgIG5laWdoX3JwbFsxXS5saXN0W25laWdoLT5yZWZfaWR4WzFdXSA9PSBycGxbMV0ubGlz dFtjdXJyLT5yZWZfaWR4WzFdXSkgeworICAgICAgICAgICAgaWYgKEZGQUJTKG5laWdoLT5tdlsw XS54IC0gY3Vyci0+bXZbMF0ueCkgPj0gOCB8fCBGRkFCUyhuZWlnaC0+bXZbMF0ueSAtIGN1cnIt Pm12WzBdLnkpID49IDggfHwKKyAgICAgICAgICAgICAgICBGRkFCUyhuZWlnaC0+bXZbMV0ueCAt IGN1cnItPm12WzFdLngpID49IDggfHwgRkZBQlMobmVpZ2gtPm12WzFdLnkgLSBjdXJyLT5tdlsx XS55KSA+PSA4KQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9IGVsc2UgaWYgKG5laWdoX3JwbFsx XS5saXN0W25laWdoLT5yZWZfaWR4WzFdXSA9PSBycGxbMF0ubGlzdFtjdXJyLT5yZWZfaWR4WzBd XSAmJgorICAgICAgICAgICAgICAgICAgIG5laWdoX3JwbFswXS5saXN0W25laWdoLT5yZWZfaWR4 WzBdXSA9PSBycGxbMV0ubGlzdFtjdXJyLT5yZWZfaWR4WzFdXSkgeworICAgICAgICAgICAgaWYg KEZGQUJTKG5laWdoLT5tdlsxXS54IC0gY3Vyci0+bXZbMF0ueCkgPj0gOCB8fCBGRkFCUyhuZWln aC0+bXZbMV0ueSAtIGN1cnItPm12WzBdLnkpID49IDggfHwKKyAgICAgICAgICAgICAgICBGRkFC UyhuZWlnaC0+bXZbMF0ueCAtIGN1cnItPm12WzFdLngpID49IDggfHwgRkZBQlMobmVpZ2gtPm12 WzBdLnkgLSBjdXJyLT5tdlsxXS55KSA+PSA4KQorICAgICAgICAgICAgICAgIHJldHVybiAxOwor ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKChj dXJyLT5wcmVkX2ZsYWcgIT0gUEZfQkkpICYmIChuZWlnaC0+cHJlZF9mbGFnICE9IFBGX0JJKSl7 IC8vIDEgTVYKKyAgICAgICAgTXYgQSwgQjsKKyAgICAgICAgaW50IHJlZl9BLCByZWZfQjsKKwor ICAgICAgICBpZiAoY3Vyci0+cHJlZF9mbGFnICYgMSkgeworICAgICAgICAgICAgQSAgICAgPSBj dXJyLT5tdlswXTsKKyAgICAgICAgICAgIHJlZl9BID0gcnBsWzBdLmxpc3RbY3Vyci0+cmVmX2lk eFswXV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBICAgICA9IGN1cnItPm12WzFd OworICAgICAgICAgICAgcmVmX0EgPSBycGxbMV0ubGlzdFtjdXJyLT5yZWZfaWR4WzFdXTsKKyAg ICAgICAgfQorCisgICAgICAgIGlmIChuZWlnaC0+cHJlZF9mbGFnICYgMSkgeworICAgICAgICAg ICAgQiAgICAgPSBuZWlnaC0+bXZbMF07CisgICAgICAgICAgICByZWZfQiA9IG5laWdoX3JwbFsw XS5saXN0W25laWdoLT5yZWZfaWR4WzBdXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg IEIgICAgID0gbmVpZ2gtPm12WzFdOworICAgICAgICAgICAgcmVmX0IgPSBuZWlnaF9ycGxbMV0u bGlzdFtuZWlnaC0+cmVmX2lkeFsxXV07CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVmX0Eg PT0gcmVmX0IpIHsKKyAgICAgICAgICAgIGlmIChGRkFCUyhBLnggLSBCLngpID49IDggfHwgRkZB QlMoQS55IC0gQi55KSA+PSA4KQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9IGVsc2UKKyAgICAg ICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHJldHVybiAxOworfQorCisvL3BhcnQgb2Yg OC44LjMuMyBEZXJpdmF0aW9uIHByb2Nlc3Mgb2YgdHJhbnNmb3JtIGJsb2NrIGJvdW5kYXJ5Citz dGF0aWMgdm9pZCBkZXJpdmVfbWF4X2ZpbHRlcl9sZW5ndGhfbHVtYShjb25zdCBWVkNGcmFtZUNv bnRleHQgKmZjLCBjb25zdCBpbnQgcXgsIGNvbnN0IGludCBxeSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBpc19pbnRyYSwgY29uc3QgaW50IGhh c19zdWJibG9jaywgY29uc3QgaW50IHZlcnRpY2FsLCB1aW50OF90ICptYXhfbGVuX3AsIHVpbnQ4 X3QgKm1heF9sZW5fcSkKK3sKKyAgICBjb25zdCBpbnQgcHggPSAgdmVydGljYWwgPyBxeCAtIDEg OiBxeDsKKyAgICBjb25zdCBpbnQgcHkgPSAhdmVydGljYWwgPyBxeSAtIDEgOiBxeTsKKyAgICBj b25zdCB1aW50OF90ICp0Yl9zaXplID0gdmVydGljYWwgPyBmYy0+dGFiLnRiX3dpZHRoW0xVTUFd IDogZmMtPnRhYi50Yl9oZWlnaHRbTFVNQV07CisgICAgY29uc3QgaW50IHNpemVfcCA9IHRiX3Np emVbKHB5ID4+IE1JTl9UVV9MT0cyKSAqIGZjLT5wcy5wcHMtPm1pbl90dV93aWR0aCArIChweCA+ PiBNSU5fVFVfTE9HMildOworICAgIGNvbnN0IGludCBzaXplX3EgPSB0Yl9zaXplWyhxeSA+PiBN SU5fVFVfTE9HMikgKiBmYy0+cHMucHBzLT5taW5fdHVfd2lkdGggKyAocXggPj4gTUlOX1RVX0xP RzIpXTsKKyAgICBjb25zdCBpbnQgbWluX2NiX2xvZzIgPSBmYy0+cHMuc3BzLT5taW5fY2JfbG9n Ml9zaXplX3k7CisgICAgY29uc3QgaW50IG9mZl9wID0gKHB5ID4+IG1pbl9jYl9sb2cyKSAqIGZj LT5wcy5wcHMtPm1pbl9jYl93aWR0aCArIChweCA+PiBtaW5fY2JfbG9nMik7CisgICAgaWYgKHNp emVfcCA8PSA0IHx8IHNpemVfcSA8PSA0KSB7CisgICAgICAgICptYXhfbGVuX3AgPSAqbWF4X2xl bl9xID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgICAqbWF4X2xlbl9wID0gKm1heF9sZW5fcSA9 IDM7CisgICAgICAgIGlmIChzaXplX3AgPj0gMzIpCisgICAgICAgICAgICAqbWF4X2xlbl9wID0g NzsKKyAgICAgICAgaWYgKHNpemVfcSA+PSAzMikKKyAgICAgICAgICAgICptYXhfbGVuX3EgPSA3 OworICAgIH0KKyAgICBpZiAoaGFzX3N1YmJsb2NrKQorICAgICAgICAqbWF4X2xlbl9xID0gRkZN SU4oNSwgKm1heF9sZW5fcSk7CisgICAgaWYgKGZjLT50YWIubXNmW29mZl9wXSB8fCBmYy0+dGFi LmlhZltvZmZfcF0pCisgICAgICAgICptYXhfbGVuX3AgPSBGRk1JTig1LCAqbWF4X2xlbl9wKTsK K30KKworc3RhdGljIHZvaWQgdnZjX2RlYmxvY2tfc3ViYmxvY2tfYnNfdmVydGljYWwoY29uc3Qg VlZDTG9jYWxDb250ZXh0ICpsYywKKyAgICBjb25zdCBpbnQgY2JfeCwgY29uc3QgaW50IGNiX3ks IGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBo ZWlnaHQpCit7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICAqZmMgPSBsYy0+ZmM7CisgICAg Y29uc3QgTXZGaWVsZCAqdGFiX212ZiAgICAgPSBmYy0+dGFiLm12ZjsKKyAgICBjb25zdCBSZWZQ aWNMaXN0ICpycGwgICAgICA9IGxjLT5zYy0+cnBsOworICAgIGNvbnN0IGludCBtaW5fcHVfd2lk dGggICAgID0gZmMtPnBzLnBwcy0+bWluX3B1X3dpZHRoOworICAgIGNvbnN0IGludCBsb2cyX21p bl9wdV9zaXplID0gTUlOX1BVX0xPRzI7CisKKyAgICAvLyBicyBmb3IgVFUgaW50ZXJuYWwgdmVy dGljYWwgUFUgYm91bmRhcmllcworICAgIGZvciAoaW50IGogPSAwOyBqIDwgaGVpZ2h0OyBqICs9 IDQpIHsKKyAgICAgICAgY29uc3QgaW50IHlfcHUgPSAoeTAgKyBqKSA+PiBsb2cyX21pbl9wdV9z aXplOworCisgICAgICAgIGZvciAoaW50IGkgPSA4IC0gKCh4MCAtIGNiX3gpICUgOCk7IGkgPCB3 aWR0aDsgaSArPSA4KSB7CisgICAgICAgICAgICBjb25zdCBpbnQgeHBfcHUgPSAoeDAgKyBpIC0g MSkgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgICAgIGNvbnN0IGludCB4cV9wdSA9ICh4 MCArIGkpICAgICA+PiBsb2cyX21pbl9wdV9zaXplOworICAgICAgICAgICAgY29uc3QgTXZGaWVs ZCAqbGVmdCA9ICZ0YWJfbXZmW3lfcHUgKiBtaW5fcHVfd2lkdGggKyB4cF9wdV07CisgICAgICAg ICAgICBjb25zdCBNdkZpZWxkICpjdXJyID0gJnRhYl9tdmZbeV9wdSAqIG1pbl9wdV93aWR0aCAr IHhxX3B1XTsKKyAgICAgICAgICAgIGNvbnN0IGludCB4ID0geDAgKyBpOworICAgICAgICAgICAg Y29uc3QgaW50IHkgPSB5MCArIGo7CisgICAgICAgICAgICBjb25zdCBpbnQgYnMgPSBib3VuZGFy eV9zdHJlbmd0aChsYywgY3VyciwgbGVmdCwgcnBsKTsKKyAgICAgICAgICAgIHVpbnQ4X3QgbWF4 X2xlbl9wID0gMCwgbWF4X2xlbl9xID0gMDsKKworICAgICAgICAgICAgVEFCX0JTKGZjLT50YWIu dmVydGljYWxfYnNbTFVNQV0sIHgsIHkpID0gYnM7CisKKyAgICAgICAgICAgIGlmIChpID09IDQg fHwgaSA9PSB3aWR0aCAtIDQpCisgICAgICAgICAgICAgICAgbWF4X2xlbl9wID0gbWF4X2xlbl9x ID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGkgPT0gOCB8fCBpID09IHdpZHRoIC0gOCkKKyAg ICAgICAgICAgICAgICBtYXhfbGVuX3AgPSBtYXhfbGVuX3EgPSAyOworICAgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgICAgIG1heF9sZW5fcCA9IG1heF9sZW5fcSA9IDM7CisKKyAgICAgICAg ICAgIFRBQl9NQVhfTEVOKGZjLT50YWIudmVydGljYWxfcCwgeCwgeSkgPSBtYXhfbGVuX3A7Cisg ICAgICAgICAgICBUQUJfTUFYX0xFTihmYy0+dGFiLnZlcnRpY2FsX3EsIHgsIHkpID0gbWF4X2xl bl9xOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB2dmNfZGVibG9ja19zdWJi bG9ja19ic19ob3Jpem9udGFsKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsCisgICAgY29uc3Qg aW50IGNiX3gsIGNvbnN0IGludCBjYl95LCBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCwgY29u c3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0KQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29u dGV4dCAgKmZjID0gbGMtPmZjOworICAgIGNvbnN0IE12RmllbGQqIHRhYl9tdmYgICAgID0gZmMt PnRhYi5tdmY7CisgICAgY29uc3QgUmVmUGljTGlzdCogcnBsICAgICAgPSBsYy0+c2MtPnJwbDsK KyAgICBjb25zdCBpbnQgbWluX3B1X3dpZHRoICAgICA9IGZjLT5wcy5wcHMtPm1pbl9wdV93aWR0 aDsKKyAgICBjb25zdCBpbnQgbG9nMl9taW5fcHVfc2l6ZSA9IE1JTl9QVV9MT0cyOworCisgICAg Ly8gYnMgZm9yIFRVIGludGVybmFsIGhvcml6b250YWwgUFUgYm91bmRhcmllcworICAgIGZvciAo aW50IGogPSA4IC0gKCh5MCAtIGNiX3kpICUgOCk7IGogPCBoZWlnaHQ7IGogKz0gOCkgeworICAg ICAgICBpbnQgeXBfcHUgPSAoeTAgKyBqIC0gMSkgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAg ICAgaW50IHlxX3B1ID0gKHkwICsgaikgICAgID4+IGxvZzJfbWluX3B1X3NpemU7CisKKyAgICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0aDsgaSArPSA0KSB7CisgICAgICAgICAgICBjb25z dCBpbnQgeF9wdSA9ICh4MCArIGkpID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgICAgICBj b25zdCBNdkZpZWxkICp0b3AgID0gJnRhYl9tdmZbeXBfcHUgKiBtaW5fcHVfd2lkdGggKyB4X3B1 XTsKKyAgICAgICAgICAgIGNvbnN0IE12RmllbGQgKmN1cnIgPSAmdGFiX212Zlt5cV9wdSAqIG1p bl9wdV93aWR0aCArIHhfcHVdOworICAgICAgICAgICAgY29uc3QgaW50IHggPSB4MCArIGk7Cisg ICAgICAgICAgICBjb25zdCBpbnQgeSA9IHkwICsgajsKKyAgICAgICAgICAgIGNvbnN0IGludCBi cyA9IGJvdW5kYXJ5X3N0cmVuZ3RoKGxjLCBjdXJyLCB0b3AsIHJwbCk7CisgICAgICAgICAgICB1 aW50OF90IG1heF9sZW5fcCA9IDAsIG1heF9sZW5fcSA9IDA7CisKKyAgICAgICAgICAgIFRBQl9C UyhmYy0+dGFiLmhvcml6b250YWxfYnNbTFVNQV0sIHgsIHkpID0gYnM7CisKKyAgICAgICAgICAg IC8vZml4bWU6CisgICAgICAgICAgICAvL2VkZ2VUYkZsYWdzWyB4IOKIkiBzYlcgXVsgeSBdIGlz IGVxdWFsIHRvIDEKKyAgICAgICAgICAgIC8vZWRnZVRiRmxhZ3NbIHggKyBzYlcgXVsgeSBdIGlz IGVxdWFsIHRvIDEKKyAgICAgICAgICAgIGlmIChqID09IDQgfHwgaiA9PSBoZWlnaHQgLSA0KQor ICAgICAgICAgICAgICAgIG1heF9sZW5fcCA9IG1heF9sZW5fcSA9IDE7CisgICAgICAgICAgICBl bHNlIGlmIChqID09IDggfHwgaiA9PSBoZWlnaHQgLSA4KQorICAgICAgICAgICAgICAgIG1heF9s ZW5fcCA9IG1heF9sZW5fcSA9IDI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg bWF4X2xlbl9wID0gbWF4X2xlbl9xID0gMzsKKyAgICAgICAgICAgIFRBQl9NQVhfTEVOKGZjLT50 YWIuaG9yaXpvbnRhbF9wLCB4LCB5KSA9IG1heF9sZW5fcDsKKyAgICAgICAgICAgIFRBQl9NQVhf TEVOKGZjLT50YWIuaG9yaXpvbnRhbF9xLCB4LCB5KSA9IG1heF9sZW5fcTsKKyAgICAgICAgfQor ICAgIH0KK30KKworc3RhdGljIHZvaWQgdnZjX2RlYmxvY2tfYnNfbHVtYV92ZXJ0aWNhbChjb25z dCBWVkNMb2NhbENvbnRleHQgKmxjLAorICAgIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLCBj b25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQpCit7CisgICAgY29uc3QgVlZDRnJhbWVD b250ZXh0ICpmYyAgPSBsYy0+ZmM7CisgICAgY29uc3QgTXZGaWVsZCAqdGFiX212ZiAgICAgPSBm Yy0+dGFiLm12ZjsKKyAgICBjb25zdCBpbnQgbG9nMl9taW5fcHVfc2l6ZSA9IE1JTl9QVV9MT0cy OworICAgIGNvbnN0IGludCBsb2cyX21pbl90dV9zaXplID0gTUlOX1RVX0xPRzI7CisgICAgY29u c3QgaW50IG1pbl9wdV93aWR0aCAgICAgPSBmYy0+cHMucHBzLT5taW5fcHVfd2lkdGg7CisgICAg Y29uc3QgaW50IG1pbl90dV93aWR0aCAgICAgPSBmYy0+cHMucHBzLT5taW5fdHVfd2lkdGg7Cisg ICAgY29uc3QgaW50IG1pbl9jYl9sb2cyICAgICAgPSBmYy0+cHMuc3BzLT5taW5fY2JfbG9nMl9z aXplX3k7CisgICAgY29uc3QgaW50IG1pbl9jYl93aWR0aCAgICAgPSBmYy0+cHMucHBzLT5taW5f Y2Jfd2lkdGg7CisgICAgY29uc3QgaW50IGlzX2ludHJhICAgICAgICAgPSB0YWJfbXZmWyh5MCA+ PiBsb2cyX21pbl9wdV9zaXplKSAqIG1pbl9wdV93aWR0aCArCisgICAgICAgICh4MCA+PiBsb2cy X21pbl9wdV9zaXplKV0ucHJlZF9mbGFnID09IFBGX0lOVFJBOworICAgIGludCBib3VuZGFyeV9s ZWZ0OworICAgIGludCBoYXNfdmVydGljYWxfc2IgPSAwOworCisgICAgY29uc3QgaW50IG9mZl9x ICAgICAgICAgICAgPSAoeTAgPj4gbWluX2NiX2xvZzIpICogbWluX2NiX3dpZHRoICsgKHgwID4+ IG1pbl9jYl9sb2cyKTsKKyAgICBjb25zdCBpbnQgY2JfeCAgICAgICAgICAgICA9IGZjLT50YWIu Y2JfcG9zX3hbTFVNQV1bb2ZmX3FdOworICAgIGNvbnN0IGludCBjYl95ICAgICAgICAgICAgID0g ZmMtPnRhYi5jYl9wb3NfeVtMVU1BXVtvZmZfcV07CisgICAgY29uc3QgaW50IGNiX3dpZHRoICAg ICAgICAgPSBmYy0+dGFiLmNiX3dpZHRoW0xVTUFdW29mZl9xXTsKKworICAgIGlmICghaXNfaW50 cmEpIHsKKyAgICAgICAgaWYgKGZjLT50YWIubXNmW29mZl9xXSB8fCBmYy0+dGFiLmlhZltvZmZf cV0pCisgICAgICAgICAgICBoYXNfdmVydGljYWxfc2IgPSBjYl93aWR0aCAgPiA4OworICAgIH0K KworICAgIC8vIGJzIGZvciB2ZXJ0aWNhbCBUVSBib3VuZGFyaWVzCisgICAgYm91bmRhcnlfbGVm dCA9IHgwID4gMCAmJiAhKHgwICYgMyk7CisgICAgaWYgKGJvdW5kYXJ5X2xlZnQgJiYKKyAgICAg ICAgKCghZmMtPnBzLnBwcy0+ci0+cHBzX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxl ZF9mbGFnICYmCisgICAgICAgICAgICBsYy0+Ym91bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9MRUZU X1NMSUNFICYmCisgICAgICAgICAgICAoeDAgJSAoMSA8PCBmYy0+cHMuc3BzLT5jdGJfbG9nMl9z aXplX3kpKSA9PSAwKSB8fAorICAgICAgICAgICAgKCFmYy0+cHMucHBzLT5yLT5wcHNfbG9vcF9m aWx0ZXJfYWNyb3NzX3RpbGVzX2VuYWJsZWRfZmxhZyAmJgorICAgICAgICAgICAgbGMtPmJvdW5k YXJ5X2ZsYWdzICYgQk9VTkRBUllfTEVGVF9USUxFICYmCisgICAgICAgICAgICAoeDAgJSAoMSA8 PCBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3kpKSA9PSAwKSkpCisgICAgICAgIGJvdW5kYXJ5 X2xlZnQgPSAwOworCisgICAgaWYgKGJvdW5kYXJ5X2xlZnQpIHsKKyAgICAgICAgY29uc3QgUmVm UGljTGlzdCAqcnBsX2xlZnQgPQorICAgICAgICAgICAgKGxjLT5ib3VuZGFyeV9mbGFncyAmIEJP VU5EQVJZX0xFRlRfU0xJQ0UpID8gZmZfdnZjX2dldF9yZWZfbGlzdChmYywgZmMtPnJlZiwgeDAg LSAxLCB5MCkgOiBsYy0+c2MtPnJwbDsKKyAgICAgICAgY29uc3QgaW50IHhwX3B1ID0gKHgwIC0g MSkgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgY29uc3QgaW50IHhxX3B1ID0gIHgwICAg ICAgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgY29uc3QgaW50IHhwX3R1ID0gKHgwIC0g MSkgPj4gbG9nMl9taW5fdHVfc2l6ZTsKKyAgICAgICAgY29uc3QgaW50IHhxX3R1ID0gIHgwICAg ICAgPj4gbG9nMl9taW5fdHVfc2l6ZTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGhl aWdodDsgaSArPSA0KSB7CisgICAgICAgICAgICBjb25zdCBpbnQgb2ZmX3ggPSBjYl94IC0geDA7 CisgICAgICAgICAgICBjb25zdCBpbnQgeV9wdSAgPSAoeTAgKyBpKSA+PiBsb2cyX21pbl9wdV9z aXplOworICAgICAgICAgICAgY29uc3QgaW50IHlfdHUgID0gKHkwICsgaSkgPj4gbG9nMl9taW5f dHVfc2l6ZTsKKyAgICAgICAgICAgIGNvbnN0IE12RmllbGQgKmxlZnQgPSAmdGFiX212Zlt5X3B1 ICogbWluX3B1X3dpZHRoICsgeHBfcHVdOworICAgICAgICAgICAgY29uc3QgTXZGaWVsZCAqY3Vy ciA9ICZ0YWJfbXZmW3lfcHUgKiBtaW5fcHVfd2lkdGggKyB4cV9wdV07CisgICAgICAgICAgICBj b25zdCB1aW50OF90IGxlZnRfY2JmX2x1bWEgPSBmYy0+dGFiLnR1X2NvZGVkX2ZsYWdbTFVNQV1b eV90dSAqIG1pbl90dV93aWR0aCArIHhwX3R1XTsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qg Y3Vycl9jYmZfbHVtYSA9IGZjLT50YWIudHVfY29kZWRfZmxhZ1tMVU1BXVt5X3R1ICogbWluX3R1 X3dpZHRoICsgeHFfdHVdOworICAgICAgICAgICAgY29uc3QgdWludDhfdCBwY21mICAgICAgICAg ID0gZmMtPnRhYi5wY21mW0xVTUFdW3lfdHUgKiBtaW5fdHVfd2lkdGggKyB4cF90dV0gJiYKKyAg ICAgICAgICAgICAgICBmYy0+dGFiLnBjbWZbTFVNQV1beV90dSAqIG1pbl90dV93aWR0aCArIHhx X3R1XTsKKyAgICAgICAgICAgIHVpbnQ4X3QgbWF4X2xlbl9wLCBtYXhfbGVuX3E7CisgICAgICAg ICAgICBpbnQgYnM7CisKKyAgICAgICAgICAgIGlmIChwY21mKQorICAgICAgICAgICAgICAgIGJz ID0gMDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGN1cnItPnByZWRfZmxhZyA9PSBQRl9JTlRSQSB8 fCBsZWZ0LT5wcmVkX2ZsYWcgPT0gUEZfSU5UUkEgfHwgY3Vyci0+Y2lpcF9mbGFnIHx8IGxlZnQt PmNpaXBfZmxhZykKKyAgICAgICAgICAgICAgICBicyA9IDI7CisgICAgICAgICAgICBlbHNlIGlm IChjdXJyX2NiZl9sdW1hIHx8IGxlZnRfY2JmX2x1bWEpCisgICAgICAgICAgICAgICAgYnMgPSAx OworICAgICAgICAgICAgZWxzZSBpZiAob2ZmX3ggJiYgKChvZmZfeCAlIDgpIHx8ICFoYXNfdmVy dGljYWxfc2IpKQorICAgICAgICAgICAgICAgIGJzID0gMDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLy8vL2luc2lkZSBhIGN1LCBub3QgYWxpZ25lZCB0byA4IG9yIHdpdGgg bm8gc3ViYmxvY2tzCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYnMgPSBib3Vu ZGFyeV9zdHJlbmd0aChsYywgY3VyciwgbGVmdCwgcnBsX2xlZnQpOworCisgICAgICAgICAgICBU QUJfQlMoZmMtPnRhYi52ZXJ0aWNhbF9ic1tMVU1BXSwgeDAsICh5MCArIGkpKSA9IGJzOworCisg ICAgICAgICAgICBkZXJpdmVfbWF4X2ZpbHRlcl9sZW5ndGhfbHVtYShmYywgeDAsIHkwICsgaSwg aXNfaW50cmEsIGhhc192ZXJ0aWNhbF9zYiwgMSwgJm1heF9sZW5fcCwgJm1heF9sZW5fcSk7Cisg ICAgICAgICAgICBUQUJfTUFYX0xFTihmYy0+dGFiLnZlcnRpY2FsX3AsIHgwLCB5MCArIGkpID0g bWF4X2xlbl9wOworICAgICAgICAgICAgVEFCX01BWF9MRU4oZmMtPnRhYi52ZXJ0aWNhbF9xLCB4 MCwgeTAgKyBpKSA9IG1heF9sZW5fcTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghaXNf aW50cmEpIHsKKyAgICAgICAgaWYgKGZjLT50YWIubXNmW29mZl9xXSB8fCBmYy0+dGFiLmlhZltv ZmZfcV0pCisgICAgICAgICAgICB2dmNfZGVibG9ja19zdWJibG9ja19ic192ZXJ0aWNhbChsYywg Y2JfeCwgY2JfeSwgeDAsIHkwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2 b2lkIHZ2Y19kZWJsb2NrX2JzX2x1bWFfaG9yaXpvbnRhbChjb25zdCBWVkNMb2NhbENvbnRleHQg KmxjLAorICAgIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLCBjb25zdCBpbnQgd2lkdGgsIGNv bnN0IGludCBoZWlnaHQpCit7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYyAgPSBsYy0+ ZmM7CisgICAgY29uc3QgTXZGaWVsZCAqdGFiX212ZiAgICAgICAgICAgPSBmYy0+dGFiLm12ZjsK KyAgICBjb25zdCBpbnQgbG9nMl9taW5fcHVfc2l6ZSA9IE1JTl9QVV9MT0cyOworICAgIGNvbnN0 IGludCBsb2cyX21pbl90dV9zaXplID0gTUlOX1RVX0xPRzI7CisgICAgY29uc3QgaW50IG1pbl9w dV93aWR0aCAgICAgPSBmYy0+cHMucHBzLT5taW5fcHVfd2lkdGg7CisgICAgY29uc3QgaW50IG1p bl90dV93aWR0aCAgICAgPSBmYy0+cHMucHBzLT5taW5fdHVfd2lkdGg7CisgICAgY29uc3QgaW50 IG1pbl9jYl9sb2cyICAgICAgPSBmYy0+cHMuc3BzLT5taW5fY2JfbG9nMl9zaXplX3k7CisgICAg Y29uc3QgaW50IG1pbl9jYl93aWR0aCAgICAgPSBmYy0+cHMucHBzLT5taW5fY2Jfd2lkdGg7Cisg ICAgY29uc3QgaW50IGlzX2ludHJhID0gdGFiX212ZlsoeTAgPj4gbG9nMl9taW5fcHVfc2l6ZSkg KiBtaW5fcHVfd2lkdGggKworICAgICAgICAgICAgICAgICAgICAgICAgICAgKHgwID4+IGxvZzJf bWluX3B1X3NpemUpXS5wcmVkX2ZsYWcgPT0gUEZfSU5UUkE7CisgICAgaW50IGJvdW5kYXJ5X3Vw cGVyOworICAgIGludCBoYXNfaG9yaXpvbnRhbF9zYiA9IDA7CisKKyAgICBjb25zdCBpbnQgb2Zm X3EgICAgICAgICAgICA9ICh5MCA+PiBtaW5fY2JfbG9nMikgKiBtaW5fY2Jfd2lkdGggKyAoeDAg Pj4gbWluX2NiX2xvZzIpOworICAgIGNvbnN0IGludCBjYl94ICAgICAgICAgICAgID0gZmMtPnRh Yi5jYl9wb3NfeFtMVU1BXVtvZmZfcV07CisgICAgY29uc3QgaW50IGNiX3kgICAgICAgICAgICAg PSBmYy0+dGFiLmNiX3Bvc195W0xVTUFdW29mZl9xXTsKKyAgICBjb25zdCBpbnQgY2JfaGVpZ2h0 ICAgICAgICA9IGZjLT50YWIuY2JfaGVpZ2h0W0xVTUFdW29mZl9xXTsKKworICAgIGlmICghaXNf aW50cmEpIHsKKyAgICAgICAgaWYgKGZjLT50YWIubXNmW29mZl9xXSB8fCBmYy0+dGFiLmlhZltv ZmZfcV0pCisgICAgICAgICAgICBoYXNfaG9yaXpvbnRhbF9zYiA9IGNiX2hlaWdodCA+IDg7Cisg ICAgfQorCisgICAgYm91bmRhcnlfdXBwZXIgPSB5MCA+IDAgJiYgISh5MCAmIDMpOworICAgIGlm IChib3VuZGFyeV91cHBlciAmJgorICAgICAgICAoKCFmYy0+cHMucHBzLT5yLT5wcHNfbG9vcF9m aWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWcgJiYKKyAgICAgICAgICAgIGxjLT5ib3Vu ZGFyeV9mbGFncyAmIEJPVU5EQVJZX1VQUEVSX1NMSUNFICYmCisgICAgICAgICAgICAoeTAgJSAo MSA8PCBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3kpKSA9PSAwKSB8fAorICAgICAgICAgICAg KCFmYy0+cHMucHBzLT5yLT5wcHNfbG9vcF9maWx0ZXJfYWNyb3NzX3RpbGVzX2VuYWJsZWRfZmxh ZyAmJgorICAgICAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfVVBQRVJfVElM RSAmJgorICAgICAgICAgICAgKHkwICUgKDEgPDwgZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95 KSkgPT0gMCkpKQorICAgICAgICBib3VuZGFyeV91cHBlciA9IDA7CisKKyAgICBpZiAoYm91bmRh cnlfdXBwZXIpIHsKKyAgICAgICAgY29uc3QgUmVmUGljTGlzdCAqcnBsX3RvcCA9CisgICAgICAg ICAgICAobGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfVVBQRVJfU0xJQ0UpID8gZmZfdnZj X2dldF9yZWZfbGlzdChmYywgZmMtPnJlZiwgeDAsIHkwIC0gMSkgOiBsYy0+c2MtPnJwbDsKKyAg ICAgICAgaW50IHlwX3B1ID0gKHkwIC0gMSkgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAg aW50IHlxX3B1ID0gIHkwICAgICAgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgaW50IHlw X3R1ID0gKHkwIC0gMSkgPj4gbG9nMl9taW5fdHVfc2l6ZTsKKyAgICAgICAgaW50IHlxX3R1ID0g IHkwICAgICAgPj4gbG9nMl9taW5fdHVfc2l6ZTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsg aSA8IHdpZHRoOyBpICs9IDQpIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBvZmZfeSA9IHkwIC0g Y2JfeTsKKyAgICAgICAgICAgIGNvbnN0IGludCB4X3B1ICA9ICh4MCArIGkpID4+IGxvZzJfbWlu X3B1X3NpemU7CisgICAgICAgICAgICBjb25zdCBpbnQgeF90dSAgPSAoeDAgKyBpKSA+PiBsb2cy X21pbl90dV9zaXplOworICAgICAgICAgICAgY29uc3QgTXZGaWVsZCAqdG9wICA9ICZ0YWJfbXZm W3lwX3B1ICogbWluX3B1X3dpZHRoICsgeF9wdV07CisgICAgICAgICAgICBjb25zdCBNdkZpZWxk ICpjdXJyID0gJnRhYl9tdmZbeXFfcHUgKiBtaW5fcHVfd2lkdGggKyB4X3B1XTsKKyAgICAgICAg ICAgIGNvbnN0IHVpbnQ4X3QgdG9wX2NiZl9sdW1hICA9IGZjLT50YWIudHVfY29kZWRfZmxhZ1tM VU1BXVt5cF90dSAqIG1pbl90dV93aWR0aCArIHhfdHVdOworICAgICAgICAgICAgY29uc3QgdWlu dDhfdCBjdXJyX2NiZl9sdW1hID0gZmMtPnRhYi50dV9jb2RlZF9mbGFnW0xVTUFdW3lxX3R1ICog bWluX3R1X3dpZHRoICsgeF90dV07CisgICAgICAgICAgICBjb25zdCB1aW50OF90IHBjbWYgICAg ICAgICAgPSBmYy0+dGFiLnBjbWZbTFVNQV1beXBfdHUgKiBtaW5fdHVfd2lkdGggKyB4X3R1XSAm JgorICAgICAgICAgICAgICAgIGZjLT50YWIucGNtZltMVU1BXVt5cV90dSAqIG1pbl90dV93aWR0 aCArIHhfdHVdOworICAgICAgICAgICAgdWludDhfdCBtYXhfbGVuX3AsIG1heF9sZW5fcTsKKyAg ICAgICAgICAgIGludCBiczsKKworICAgICAgICAgICAgaWYgKHBjbWYpCisgICAgICAgICAgICAg ICAgYnMgPSAwOworICAgICAgICAgICAgZWxzZSBpZiAoY3Vyci0+cHJlZF9mbGFnID09IFBGX0lO VFJBIHx8IHRvcC0+cHJlZF9mbGFnID09IFBGX0lOVFJBIHx8IGN1cnItPmNpaXBfZmxhZyB8fCB0 b3AtPmNpaXBfZmxhZykKKyAgICAgICAgICAgICAgICBicyA9IDI7CisgICAgICAgICAgICBlbHNl IGlmIChjdXJyX2NiZl9sdW1hIHx8IHRvcF9jYmZfbHVtYSkKKyAgICAgICAgICAgICAgICBicyA9 IDE7CisgICAgICAgICAgICBlbHNlIGlmIChvZmZfeSAmJiAoKG9mZl95ICUgOCkgfHwgIWhhc19o b3Jpem9udGFsX3NiKSkKKyAgICAgICAgICAgICAgICBicyA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8vaW5zaWRlIGEgY3UsIG5vdCBhbGlnbmVkIHRvIDggb3Igd2l0 aCBubyBzdWJibG9ja3MKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBicyA9IGJv dW5kYXJ5X3N0cmVuZ3RoKGxjLCBjdXJyLCB0b3AsIHJwbF90b3ApOworCisgICAgICAgICAgICBU QUJfQlMoZmMtPnRhYi5ob3Jpem9udGFsX2JzW0xVTUFdLCB4MCArIGksIHkwKSA9IGJzOworCisg ICAgICAgICAgICBkZXJpdmVfbWF4X2ZpbHRlcl9sZW5ndGhfbHVtYShmYywgeDAgKyBpLCB5MCwg aXNfaW50cmEsIGhhc19ob3Jpem9udGFsX3NiLCAwLCAmbWF4X2xlbl9wLCAmbWF4X2xlbl9xKTsK KyAgICAgICAgICAgIFRBQl9NQVhfTEVOKGZjLT50YWIuaG9yaXpvbnRhbF9wLCB4MCArIGksIHkw KSA9IG1heF9sZW5fcDsKKyAgICAgICAgICAgIFRBQl9NQVhfTEVOKGZjLT50YWIuaG9yaXpvbnRh bF9xLCB4MCArIGksIHkwKSA9IG1heF9sZW5fcTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm ICghaXNfaW50cmEpIHsKKyAgICAgICAgaWYgKGZjLT50YWIubXNmW29mZl9xXSB8fCBmYy0+dGFi LmlhZltvZmZfcV0pCisgICAgICAgICAgICB2dmNfZGVibG9ja19zdWJibG9ja19ic19ob3Jpem9u dGFsKGxjLCBjYl94LCBjYl95LCB4MCwgeTAsIHdpZHRoLCBoZWlnaHQpOworICAgIH0KK30KKwor c3RhdGljIHZvaWQgdnZjX2RlYmxvY2tfYnNfY2hyb21hX3ZlcnRpY2FsKGNvbnN0IFZWQ0xvY2Fs Q29udGV4dCAqbGMsCisgICAgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAsIGNvbnN0IGludCB3 aWR0aCwgY29uc3QgaW50IGhlaWdodCkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZj ICA9IGxjLT5mYzsKKyAgICBjb25zdCBNdkZpZWxkICp0YWJfbXZmICAgICAgICAgICA9IGZjLT50 YWIubXZmOworICAgIGNvbnN0IGludCBsb2cyX21pbl9wdV9zaXplID0gTUlOX1BVX0xPRzI7Cisg ICAgY29uc3QgaW50IGxvZzJfbWluX3R1X3NpemUgPSBNSU5fUFVfTE9HMjsKKyAgICBjb25zdCBp bnQgbWluX3B1X3dpZHRoICAgICA9IGZjLT5wcy5wcHMtPm1pbl9wdV93aWR0aDsKKyAgICBjb25z dCBpbnQgbWluX3R1X3dpZHRoICAgICA9IGZjLT5wcy5wcHMtPm1pbl90dV93aWR0aDsKKyAgICBp bnQgYm91bmRhcnlfbGVmdDsKKworICAgIC8vIGJzIGZvciB2ZXJ0aWNhbCBUVSBib3VuZGFyaWVz CisgICAgYm91bmRhcnlfbGVmdCA9IHgwID4gMCAmJiAhKHgwICYgKChDSFJPTUFfR1JJRCA8PCBm Yy0+cHMuc3BzLT5oc2hpZnRbMV0pIC0gMSkpOworICAgIGlmIChib3VuZGFyeV9sZWZ0ICYmCisg ICAgICAgICgoIWZjLT5wcy5wcHMtPnItPnBwc19sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2Vu YWJsZWRfZmxhZyAmJgorICAgICAgICAgIGxjLT5ib3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX0xF RlRfU0xJQ0UgJiYKKyAgICAgICAgICAoeDAgJSAoMSA8PCBmYy0+cHMuc3BzLT5jdGJfbG9nMl9z aXplX3kpKSA9PSAwKSB8fAorICAgICAgICAgKCFmYy0+cHMucHBzLT5yLT5wcHNfbG9vcF9maWx0 ZXJfYWNyb3NzX3RpbGVzX2VuYWJsZWRfZmxhZyAmJgorICAgICAgICAgIGxjLT5ib3VuZGFyeV9m bGFncyAmIEJPVU5EQVJZX0xFRlRfVElMRSAmJgorICAgICAgICAgICh4MCAlICgxIDw8IGZjLT5w cy5zcHMtPmN0Yl9sb2cyX3NpemVfeSkpID09IDApKSkKKyAgICAgICAgYm91bmRhcnlfbGVmdCA9 IDA7CisKKyAgICBpZiAoYm91bmRhcnlfbGVmdCkgeworICAgICAgICBjb25zdCBpbnQgeHBfcHUg PSAoeDAgLSAxKSA+PiBsb2cyX21pbl9wdV9zaXplOworICAgICAgICBjb25zdCBpbnQgeHFfcHUg PSAgeDAgICAgICA+PiBsb2cyX21pbl9wdV9zaXplOworICAgICAgICBjb25zdCBpbnQgeHBfdHUg PSAoeDAgLSAxKSA+PiBsb2cyX21pbl90dV9zaXplOworICAgICAgICBjb25zdCBpbnQgeHFfdHUg PSAgeDAgICAgICA+PiBsb2cyX21pbl90dV9zaXplOworCisgICAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgaGVpZ2h0OyBpICs9IDIpIHsKKyAgICAgICAgICAgIGNvbnN0IGludCB5X3B1ICAgICAg PSAoeTAgKyBpKSA+PiBsb2cyX21pbl9wdV9zaXplOworICAgICAgICAgICAgY29uc3QgaW50IHlf dHUgICAgICA9ICh5MCArIGkpID4+IGxvZzJfbWluX3R1X3NpemU7CisgICAgICAgICAgICBjb25z dCBNdkZpZWxkICpsZWZ0ID0gJnRhYl9tdmZbeV9wdSAqIG1pbl9wdV93aWR0aCArIHhwX3B1XTsK KyAgICAgICAgICAgIGNvbnN0IE12RmllbGQgKmN1cnIgPSAmdGFiX212Zlt5X3B1ICogbWluX3B1 X3dpZHRoICsgeHFfcHVdOworICAgICAgICAgICAgY29uc3QgaW50IGxlZnRfdHUgICA9IHlfdHUg KiBtaW5fdHVfd2lkdGggKyB4cF90dTsKKyAgICAgICAgICAgIGNvbnN0IGludCBjdXJyX3R1ICAg PSB5X3R1ICogbWluX3R1X3dpZHRoICsgeHFfdHU7CisgICAgICAgICAgICBjb25zdCB1aW50OF90 IHBjbWYgID0gZmMtPnRhYi5wY21mW0NIUk9NQV1bbGVmdF90dV0gJiYgZmMtPnRhYi5wY21mW0NI Uk9NQV1bY3Vycl90dV07CisKKyAgICAgICAgICAgIGZvciAoaW50IGMgPSBDQjsgYyA8PSBDUjsg YysrKSB7CisgICAgICAgICAgICAgICAgdWludDhfdCBjYmYgPSBmYy0+dGFiLnR1X2NvZGVkX2Zs YWdbY11bbGVmdF90dV0gfAorICAgICAgICAgICAgICAgICAgICBmYy0+dGFiLnR1X2NvZGVkX2Zs YWdbY11bY3Vycl90dV0gfAorICAgICAgICAgICAgICAgICAgICBmYy0+dGFiLnR1X2pvaW50X2Ni Y3JfcmVzaWR1YWxfZmxhZ1tsZWZ0X3R1XSB8CisgICAgICAgICAgICAgICAgICAgIGZjLT50YWIu dHVfam9pbnRfY2Jjcl9yZXNpZHVhbF9mbGFnW2N1cnJfdHVdOworICAgICAgICAgICAgICAgIGlu dCBicyA9IDA7CisKKyAgICAgICAgICAgICAgICBpZiAocGNtZikKKyAgICAgICAgICAgICAgICAg ICAgYnMgPSAwOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnItPnByZWRfZmxhZyA9PSBQ Rl9JTlRSQSB8fCBsZWZ0LT5wcmVkX2ZsYWcgPT0gUEZfSU5UUkEgfHwgY3Vyci0+Y2lpcF9mbGFn IHx8IGxlZnQtPmNpaXBfZmxhZykKKyAgICAgICAgICAgICAgICAgICAgYnMgPSAyOworICAgICAg ICAgICAgICAgIGVsc2UgaWYgKGNiZikKKyAgICAgICAgICAgICAgICAgICAgYnMgPSAxOworICAg ICAgICAgICAgICAgIFRBQl9CUyhmYy0+dGFiLnZlcnRpY2FsX2JzW2NdLCB4MCwgKHkwICsgaSkp ID0gYnM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk IHZ2Y19kZWJsb2NrX2JzX2Nocm9tYV9ob3Jpem9udGFsKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAq bGMsCisgICAgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAsIGNvbnN0IGludCB3aWR0aCwgY29u c3QgaW50IGhlaWdodCkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjID0gbGMtPmZj OworICAgIE12RmllbGQgKnRhYl9tdmYgPSBmYy0+dGFiLm12ZjsKKyAgICBjb25zdCBpbnQgbG9n Ml9taW5fcHVfc2l6ZSA9IE1JTl9QVV9MT0cyOworICAgIGNvbnN0IGludCBsb2cyX21pbl90dV9z aXplID0gTUlOX1BVX0xPRzI7CisgICAgY29uc3QgaW50IG1pbl9wdV93aWR0aCA9IGZjLT5wcy5w cHMtPm1pbl9wdV93aWR0aDsKKyAgICBjb25zdCBpbnQgbWluX3R1X3dpZHRoID0gZmMtPnBzLnBw cy0+bWluX3R1X3dpZHRoOworICAgIGludCBib3VuZGFyeV91cHBlcjsKKworICAgIGJvdW5kYXJ5 X3VwcGVyID0geTAgPiAwICYmICEoeTAgJiAoKENIUk9NQV9HUklEIDw8IGZjLT5wcy5zcHMtPnZz aGlmdFsxXSkgLSAxKSk7CisgICAgaWYgKGJvdW5kYXJ5X3VwcGVyICYmCisgICAgICAgICgoIWZj LT5wcy5wcHMtPnItPnBwc19sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZyAm JgorICAgICAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfVVBQRVJfU0xJQ0Ug JiYKKyAgICAgICAgICAgICh5MCAlICgxIDw8IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeSkp ID09IDApIHx8CisgICAgICAgICAgICAoIWZjLT5wcy5wcHMtPnItPnBwc19sb29wX2ZpbHRlcl9h Y3Jvc3NfdGlsZXNfZW5hYmxlZF9mbGFnICYmCisgICAgICAgICAgICAgICAgbGMtPmJvdW5kYXJ5 X2ZsYWdzICYgQk9VTkRBUllfVVBQRVJfVElMRSAmJgorICAgICAgICAgICAgICAgICh5MCAlICgx IDw8IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeSkpID09IDApKSkKKyAgICAgICAgYm91bmRh cnlfdXBwZXIgPSAwOworCisgICAgaWYgKGJvdW5kYXJ5X3VwcGVyKSB7CisgICAgICAgIGludCB5 cF9wdSA9ICh5MCAtIDEpID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgIGludCB5cV9wdSA9 IHkwID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgIGludCB5cF90dSA9ICh5MCAtIDEpID4+ IGxvZzJfbWluX3R1X3NpemU7CisgICAgICAgIGludCB5cV90dSA9IHkwID4+IGxvZzJfbWluX3R1 X3NpemU7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0aDsgaSArPSAyKSB7Cisg ICAgICAgICAgICBjb25zdCBpbnQgeF9wdSA9ICh4MCArIGkpID4+IGxvZzJfbWluX3B1X3NpemU7 CisgICAgICAgICAgICBjb25zdCBpbnQgeF90dSA9ICh4MCArIGkpID4+IGxvZzJfbWluX3R1X3Np emU7CisgICAgICAgICAgICBjb25zdCBNdkZpZWxkICp0b3AgID0gJnRhYl9tdmZbeXBfcHUgKiBt aW5fcHVfd2lkdGggKyB4X3B1XTsKKyAgICAgICAgICAgIGNvbnN0IE12RmllbGQgKmN1cnIgPSAm dGFiX212Zlt5cV9wdSAqIG1pbl9wdV93aWR0aCArIHhfcHVdOworICAgICAgICAgICAgY29uc3Qg aW50IHRvcF90dSAgPSB5cF90dSAqIG1pbl90dV93aWR0aCArIHhfdHU7CisgICAgICAgICAgICBj b25zdCBpbnQgY3Vycl90dSA9IHlxX3R1ICogbWluX3R1X3dpZHRoICsgeF90dTsKKyAgICAgICAg ICAgIGNvbnN0IHVpbnQ4X3QgcGNtZiA9IGZjLT50YWIucGNtZltDSFJPTUFdW3RvcF90dV0gJiYg ZmMtPnRhYi5wY21mW0NIUk9NQV1bY3Vycl90dV07CisKKyAgICAgICAgICAgIGZvciAoaW50IGMg PSBDQjsgYyA8PSBDUjsgYysrKSB7CisgICAgICAgICAgICAgICAgdWludDhfdCBjYmYgPSBmYy0+ dGFiLnR1X2NvZGVkX2ZsYWdbY11bdG9wX3R1XSB8CisgICAgICAgICAgICAgICAgICAgIGZjLT50 YWIudHVfY29kZWRfZmxhZ1tjXVtjdXJyX3R1XSB8CisgICAgICAgICAgICAgICAgICAgIGZjLT50 YWIudHVfam9pbnRfY2Jjcl9yZXNpZHVhbF9mbGFnW3RvcF90dV0gfAorICAgICAgICAgICAgICAg ICAgICBmYy0+dGFiLnR1X2pvaW50X2NiY3JfcmVzaWR1YWxfZmxhZ1tjdXJyX3R1XTsKKyAgICAg ICAgICAgICAgICBpbnQgYnMgPSAwOworCisgICAgICAgICAgICAgICAgaWYgKHBjbWYpCisgICAg ICAgICAgICAgICAgICAgIGJzID0gMDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyLT5w cmVkX2ZsYWcgPT0gUEZfSU5UUkEgfHwgdG9wLT5wcmVkX2ZsYWcgPT0gUEZfSU5UUkEgfHwgY3Vy ci0+Y2lpcF9mbGFnIHx8IHRvcC0+Y2lpcF9mbGFnKQorICAgICAgICAgICAgICAgICAgICBicyA9 IDI7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2JmKQorICAgICAgICAgICAgICAgICAgICBi cyA9IDE7CisgICAgICAgICAgICAgICAgVEFCX0JTKGZjLT50YWIuaG9yaXpvbnRhbF9ic1tjXSwg eDAgKyBpLCB5MCkgPSBiczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwor dHlwZWRlZiB2b2lkICgqZGVibG9ja19ic19mbikoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywg Y29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAsCisgICAgY29uc3QgaW50IHdpZHRoLCBjb25zdCBp bnQgaGVpZ2h0KTsKKworc3RhdGljIHZvaWQgdnZjX2RlYmxvY2tfYnMoY29uc3QgVlZDTG9jYWxD b250ZXh0ICpsYywgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAsIGNvbnN0IGludCB2ZXJ0aWNh bCkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjID0gbGMtPmZjOworICAgIGNvbnN0 IFZWQ1NQUyAqc3BzICA9IGZjLT5wcy5zcHM7CisgICAgY29uc3QgVlZDUFBTICpwcHMgID0gZmMt PnBzLnBwczsKKyAgICBjb25zdCBpbnQgY3RiX3NpemUgPSBzcHMtPmN0Yl9zaXplX3k7CisgICAg Y29uc3QgaW50IHhfZW5kICAgID0gRkZNSU4oeDAgKyBjdGJfc2l6ZSwgcHBzLT53aWR0aCkgPj4g TUlOX1RVX0xPRzI7CisgICAgY29uc3QgaW50IHlfZW5kICAgID0gRkZNSU4oeTAgKyBjdGJfc2l6 ZSwgcHBzLT5oZWlnaHQpID4+IE1JTl9UVV9MT0cyOworICAgIGRlYmxvY2tfYnNfZm4gZGVibG9j a19ic1syXVsyXSA9IHsKKyAgICAgICAgeyB2dmNfZGVibG9ja19ic19sdW1hX2hvcml6b250YWws IHZ2Y19kZWJsb2NrX2JzX2Nocm9tYV9ob3Jpem9udGFsIH0sCisgICAgICAgIHsgdnZjX2RlYmxv Y2tfYnNfbHVtYV92ZXJ0aWNhbCwgICB2dmNfZGVibG9ja19ic19jaHJvbWFfdmVydGljYWwgICB9 CisgICAgfTsKKworICAgIGZvciAoaW50IGlzX2Nocm9tYSA9IDA7IGlzX2Nocm9tYSA8PSAxOyBp c19jaHJvbWErKykgeworICAgICAgICBjb25zdCBpbnQgaHMgPSBzcHMtPmhzaGlmdFtpc19jaHJv bWFdOworICAgICAgICBjb25zdCBpbnQgdnMgPSBzcHMtPnZzaGlmdFtpc19jaHJvbWFdOworICAg ICAgICBmb3IgKGludCB5ID0geTAgPj4gTUlOX1RVX0xPRzI7IHkgPCB5X2VuZDsgeSsrKSB7Cisg ICAgICAgICAgICBmb3IgKGludCB4ID0geDAgPj4gTUlOX1RVX0xPRzI7IHggPCB4X2VuZDsgeCsr KSB7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IG9mZiA9IHkgKiBmYy0+cHMucHBzLT5taW5f dHVfd2lkdGggKyB4OworICAgICAgICAgICAgICAgIGlmICgoZmMtPnRhYi50Yl9wb3NfeDBbaXNf Y2hyb21hXVtvZmZdID4+IE1JTl9UVV9MT0cyKSA9PSB4ICYmIChmYy0+dGFiLnRiX3Bvc195MFtp c19jaHJvbWFdW29mZl0gPj4gTUlOX1RVX0xPRzIpID09IHkpIHsKKyAgICAgICAgICAgICAgICAg ICAgZGVibG9ja19ic1t2ZXJ0aWNhbF1baXNfY2hyb21hXShsYywgeCA8PCBNSU5fVFVfTE9HMiwg eSA8PCBNSU5fVFVfTE9HMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZjLT50YWIudGJfd2lk dGhbaXNfY2hyb21hXVtvZmZdIDw8IGhzLCBmYy0+dGFiLnRiX2hlaWdodFtpc19jaHJvbWFdW29m Zl0gPDwgdnMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgIH0KK30KKworLy9wYXJ0IG9mIDguOC4zLjMgRGVyaXZhdGlvbiBwcm9jZXNzIG9mIHRyYW5z Zm9ybSBibG9jayBib3VuZGFyeQorc3RhdGljIHZvaWQgbWF4X2ZpbHRlcl9sZW5ndGhfbHVtYShj b25zdCBWVkNGcmFtZUNvbnRleHQgKmZjLCBjb25zdCBpbnQgcXgsIGNvbnN0IGludCBxeSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHZlcnRpY2FsLCB1aW50 OF90ICptYXhfbGVuX3AsIHVpbnQ4X3QgKm1heF9sZW5fcSkKK3sKKyAgICBjb25zdCB1aW50OF90 ICp0YWJfbGVuX3AgPSB2ZXJ0aWNhbCA/IGZjLT50YWIudmVydGljYWxfcCA6IGZjLT50YWIuaG9y aXpvbnRhbF9wOworICAgIGNvbnN0IHVpbnQ4X3QgKnRhYl9sZW5fcSA9IHZlcnRpY2FsID8gZmMt PnRhYi52ZXJ0aWNhbF9xIDogZmMtPnRhYi5ob3Jpem9udGFsX3E7CisgICAgKm1heF9sZW5fcCA9 IFRBQl9NQVhfTEVOKHRhYl9sZW5fcCwgcXgsIHF5KTsKKyAgICAqbWF4X2xlbl9xID0gVEFCX01B WF9MRU4odGFiX2xlbl9xLCBxeCwgcXkpOworfQorCisvL3BhcnQgb2YgOC44LjMuMyBEZXJpdmF0 aW9uIHByb2Nlc3Mgb2YgdHJhbnNmb3JtIGJsb2NrIGJvdW5kYXJ5CitzdGF0aWMgdm9pZCBtYXhf ZmlsdGVyX2xlbmd0aF9jaHJvbWEoY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYywgY29uc3QgaW50 IHF4LCBjb25zdCBpbnQgcXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgaW50IHZlcnRpY2FsLCBjb25zdCBpbnQgaG9yaXpvbnRhbF9jdHVfZWRnZSwgY29uc3Qg aW50IGJzLCB1aW50OF90ICptYXhfbGVuX3AsIHVpbnQ4X3QgKm1heF9sZW5fcSkKK3sKKyAgICBj b25zdCBpbnQgcHggPSAgdmVydGljYWwgPyBxeCAtIDEgOiBxeDsKKyAgICBjb25zdCBpbnQgcHkg PSAhdmVydGljYWwgPyBxeSAtIDEgOiBxeTsKKyAgICBjb25zdCB1aW50OF90ICp0Yl9zaXplID0g dmVydGljYWwgPyBmYy0+dGFiLnRiX3dpZHRoW0NIUk9NQV0gOiBmYy0+dGFiLnRiX2hlaWdodFtD SFJPTUFdOworCisgICAgY29uc3QgaW50IHNpemVfcCA9IHRiX3NpemVbKHB5ID4+IE1JTl9UVV9M T0cyKSAqIGZjLT5wcy5wcHMtPm1pbl90dV93aWR0aCArIChweCA+PiBNSU5fVFVfTE9HMildOwor ICAgIGNvbnN0IGludCBzaXplX3EgPSB0Yl9zaXplWyhxeSA+PiBNSU5fVFVfTE9HMikgKiBmYy0+ cHMucHBzLT5taW5fdHVfd2lkdGggKyAocXggPj4gTUlOX1RVX0xPRzIpXTsKKyAgICBpZiAoc2l6 ZV9wID49IDggJiYgc2l6ZV9xID49IDgpIHsKKyAgICAgICAgKm1heF9sZW5fcCA9ICptYXhfbGVu X3EgPSAzOworICAgICAgICBpZiAoaG9yaXpvbnRhbF9jdHVfZWRnZSkKKyAgICAgICAgICAgICpt YXhfbGVuX3AgPSAxOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vcGFydCBvZiA4LjguMy42LjQg RGVjaXNpb24gcHJvY2VzcyBmb3IgY2hyb21hIGJsb2NrIGVkZ2VzCisgICAgICAgICptYXhfbGVu X3AgPSAqbWF4X2xlbl9xID0gKGJzID09IDIpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgbWF4 X2ZpbHRlcl9sZW5ndGgoY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYywgY29uc3QgaW50IHF4LCBj b25zdCBpbnQgcXksCisgICAgY29uc3QgaW50IGNfaWR4LCBjb25zdCBpbnQgdmVydGljYWwsIGNv bnN0IGludCBob3Jpem9udGFsX2N0dV9lZGdlLCBjb25zdCBpbnQgYnMsIHVpbnQ4X3QgKm1heF9s ZW5fcCwgdWludDhfdCAqbWF4X2xlbl9xKQoreworICAgIGlmICghY19pZHgpCisgICAgICAgIG1h eF9maWx0ZXJfbGVuZ3RoX2x1bWEoZmMsIHF4LCBxeSwgdmVydGljYWwsIG1heF9sZW5fcCwgbWF4 X2xlbl9xKTsKKyAgICBlbHNlCisgICAgICAgIG1heF9maWx0ZXJfbGVuZ3RoX2Nocm9tYShmYywg cXgsIHF5LCB2ZXJ0aWNhbCwgaG9yaXpvbnRhbF9jdHVfZWRnZSwgYnMsIG1heF9sZW5fcCwgbWF4 X2xlbl9xKTsKK30KKworI2RlZmluZSBUQ19DQUxDKHFwLCBicykgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRjdGFibGVbYXZfY2xpcCgocXAp ICsgREVGQVVMVF9JTlRSQV9UQ19PRkZTRVQgKiAoKGJzKSAtIDEpICsgICAgICAgXAorICAgICAg ICAgICAgICAgICAgICAodGNfb2Zmc2V0ICYgLTIpLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAwLCBNQVhfUVAgKyBERUZBVUxUX0lOVFJB X1RDX09GRlNFVCldCisKKy8vIHBhcnQgb2YgOC44LjMuNi4yIERlY2lzaW9uIHByb2Nlc3MgZm9y IGx1bWEgYmxvY2sgZWRnZXMKK3N0YXRpYyBpbnQgZ2V0X3FwX3koY29uc3QgVlZDRnJhbWVDb250 ZXh0ICpmYywgY29uc3QgdWludDhfdCAqc3JjLCBjb25zdCBpbnQgeCwgY29uc3QgaW50IHksIGNv bnN0IGludCB2ZXJ0aWNhbCkKK3sKKyAgICBjb25zdCBWVkNTUFMgKnNwcyA9IGZjLT5wcy5zcHM7 CisgICAgY29uc3QgaW50IHFwICAgICAgPSAoZmZfdnZjX2dldF9xUHkoZmMsIHggLSB2ZXJ0aWNh bCwgeSAtICF2ZXJ0aWNhbCkgKyBmZl92dmNfZ2V0X3FQeShmYywgeCwgeSkgKyAxKSA+PiAxOwor ICAgIGludCBxcF9vZmZzZXQgICAgID0gMDsKKyAgICBpbnQgbGV2ZWw7CisKKyAgICBpZiAoIXNw cy0+ci0+c3BzX2xhZGZfZW5hYmxlZF9mbGFnKQorICAgICAgICByZXR1cm4gcXA7CisKKyAgICBs ZXZlbCA9IGZjLT52dmNkc3AubGYubGFkZl9sZXZlbFt2ZXJ0aWNhbF0oc3JjLCBmYy0+ZnJhbWUt PmxpbmVzaXplW0xVTUFdKTsKKyAgICBxcF9vZmZzZXQgPSBzcHMtPnItPnNwc19sYWRmX2xvd2Vz dF9pbnRlcnZhbF9xcF9vZmZzZXQ7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzcHMtPm51bV9s YWRmX2ludGVydmFscyAtIDEgJiYgbGV2ZWwgPiBzcHMtPmxhZGZfaW50ZXJ2YWxfbG93ZXJfYm91 bmRbaSArIDFdOyBpKyspCisgICAgICAgIHFwX29mZnNldCA9IHNwcy0+ci0+c3BzX2xhZGZfcXBf b2Zmc2V0W2ldOworCisgICAgcmV0dXJuIHFwICsgcXBfb2Zmc2V0OworfQorCisvLyBwYXJ0IG9m IDguOC4zLjYuMiBEZWNpc2lvbiBwcm9jZXNzIGZvciBsdW1hIGJsb2NrIGVkZ2VzCitzdGF0aWMg aW50IGdldF9xcF9jKGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IGludCB4LCBjb25z dCBpbnQgeSwgY29uc3QgaW50IGNfaWR4LCBjb25zdCBpbnQgdmVydGljYWwpCit7CisgICAgY29u c3QgVlZDU1BTICpzcHMgPSBmYy0+cHMuc3BzOworICAgIHJldHVybiAoZ2V0X3FQYyhmYywgeCAt IHZlcnRpY2FsLCB5IC0gIXZlcnRpY2FsLCBjX2lkeCkgKyBnZXRfcVBjKGZjLCB4LCB5LCBjX2lk eCkgLSAyICogc3BzLT5xcF9iZF9vZmZzZXQgKyAxKSA+PiAxOworfQorCitzdGF0aWMgaW50IGdl dF9xcChjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjLCBjb25zdCB1aW50OF90ICpzcmMsIGNvbnN0 IGludCB4LCBjb25zdCBpbnQgeSwgY29uc3QgaW50IGNfaWR4LCBjb25zdCBpbnQgdmVydGljYWwp Cit7CisgICAgaWYgKCFjX2lkeCkKKyAgICAgICAgcmV0dXJuIGdldF9xcF95KGZjLCBzcmMsIHgs IHksIHZlcnRpY2FsKTsKKyAgICByZXR1cm4gZ2V0X3FwX2MoZmMsIHgsIHksIGNfaWR4LCB2ZXJ0 aWNhbCk7Cit9CisKK3ZvaWQgZmZfdnZjX2RlYmxvY2tfdmVydGljYWwoY29uc3QgVlZDTG9jYWxD b250ZXh0ICpsYywgaW50IHgwLCBpbnQgeTApCit7CisgICAgVlZDRnJhbWVDb250ZXh0ICpmYyA9 IGxjLT5mYzsKKyAgICBjb25zdCBWVkNTUFMgKnNwcyAgID0gZmMtPnBzLnNwczsKKyAgICBjb25z dCBpbnQgY19lbmQgICAgID0gc3BzLT5yLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgPyBWVkNfTUFY X1NBTVBMRV9BUlJBWVMgOiAxOworICAgIHVpbnQ4X3QgKnNyYzsKKyAgICBpbnQgeCwgeSwgcXA7 CisKKyAgICAvL25vdCB1c2UgdGhpcyB5ZXQsIG1heSBuZWVkZWQgYnkgcGx0LgorICAgIGNvbnN0 IHVpbnQ4X3Qgbm9fcFs0XSA9IHsgMCB9OworICAgIGNvbnN0IHVpbnQ4X3Qgbm9fcVs0XSA9IHsg MCB9IDsKKworICAgIGNvbnN0IGludCBjdGJfbG9nMl9zaXplX3kgPSBmYy0+cHMuc3BzLT5jdGJf bG9nMl9zaXplX3k7CisgICAgaW50IHhfZW5kLCB5X2VuZDsKKyAgICBjb25zdCBpbnQgY3RiX3Np emUgPSAxIDw8IGN0Yl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQgY3RiID0gKHgwID4+IGN0 Yl9sb2cyX3NpemVfeSkgKworICAgICAgICAoeTAgPj4gY3RiX2xvZzJfc2l6ZV95KSAqIGZjLT5w cy5wcHMtPmN0Yl93aWR0aDsKKyAgICBjb25zdCBEQlBhcmFtcyAgKnBhcmFtcyA9IGZjLT50YWIu ZGVibG9jayArIGN0YjsKKworICAgIHZ2Y19kZWJsb2NrX2JzKGxjLCB4MCwgeTAsIDEpOworCisg ICAgeF9lbmQgPSB4MCArIGN0Yl9zaXplOworICAgIGlmICh4X2VuZCA+IGZjLT5wcy5zcHMtPndp ZHRoKQorICAgICAgICB4X2VuZCA9IGZjLT5wcy5zcHMtPndpZHRoOworICAgIHlfZW5kID0geTAg KyBjdGJfc2l6ZTsKKyAgICBpZiAoeV9lbmQgPiBmYy0+cHMuc3BzLT5oZWlnaHQpCisgICAgICAg IHlfZW5kID0gZmMtPnBzLnNwcy0+aGVpZ2h0OworCisgICAgZm9yIChpbnQgY19pZHggPSAwOyBj X2lkeCA8IGNfZW5kOyBjX2lkeCsrKSB7CisgICAgICAgIGNvbnN0IGludCBocyAgICAgICAgICA9 IHNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IHZzICAgICAgICAgID0gc3Bz LT52c2hpZnRbY19pZHhdOworICAgICAgICBjb25zdCBpbnQgZ3JpZCAgICAgICAgPSBjX2lkeCA/ IChDSFJPTUFfR1JJRCA8PCBocykgOiBMVU1BX0dSSUQ7CisgICAgICAgIGNvbnN0IGludCB0Y19v ZmZzZXQgICA9IHBhcmFtcy0+dGNfb2Zmc2V0W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IGJl dGFfb2Zmc2V0ID0gcGFyYW1zLT5iZXRhX29mZnNldFtjX2lkeF07CisKKyAgICAgICAgZm9yICh5 ID0geTA7IHkgPCB5X2VuZDsgeSArPSAoREVCTE9DS19TVEVQIDw8IHZzKSkgeworICAgICAgICAg ICAgZm9yICh4ID0geDAgPyB4MCA6IGdyaWQ7IHggPCB4X2VuZDsgeCArPSBncmlkKSB7CisgICAg ICAgICAgICAgICAgaW50MzJfdCBic1s0XSwgYmV0YVs0XSwgdGNbNF0sIGFsbF96ZXJvX2JzID0g MTsKKyAgICAgICAgICAgICAgICB1aW50OF90IG1heF9sZW5fcFs0XSwgbWF4X2xlbl9xWzRdOwor CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBERUJMT0NLX1NURVAgPj4gKDIg LSB2cyk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgZHkgPSBpIDw8IDI7 CisgICAgICAgICAgICAgICAgICAgIGJzW2ldID0gKHkgKyBkeSA8IHlfZW5kKSA/IFRBQl9CUyhm Yy0+dGFiLnZlcnRpY2FsX2JzW2NfaWR4XSwgeCwgeSArIGR5KSA6IDA7CisgICAgICAgICAgICAg ICAgICAgIGlmIChic1tpXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gJmZjLT5m cmFtZS0+ZGF0YVtjX2lkeF1bKCh5ICsgZHkpID4+IHZzKSAqIGZjLT5mcmFtZS0+bGluZXNpemVb Y19pZHhdICsgKCh4ID4+IGhzKSA8PCBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdCldOworICAgICAg ICAgICAgICAgICAgICAgICAgcXAgPSBnZXRfcXAoZmMsIHNyYywgeCwgeSArIGR5LCBjX2lkeCwg MSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGJldGFbaV0gPSBiZXRhdGFibGVbYXZfY2xp cChxcCArIGJldGFfb2Zmc2V0LCAwLCBNQVhfUVApXTsKKworICAgICAgICAgICAgICAgICAgICAg ICAgbWF4X2ZpbHRlcl9sZW5ndGgoZmMsIHgsIHkgKyBkeSwgY19pZHgsIDEsIDAsIGJzW2ldLCAm bWF4X2xlbl9wW2ldLCAmbWF4X2xlbl9xW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFs bF96ZXJvX2JzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICB0Y1tpXSA9IGJzW2ldID8gVENfQ0FMQyhxcCwgYnNbaV0pIDogMDsKKyAgICAgICAgICAgICAg ICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIWFsbF96ZXJvX2JzKSB7CisgICAgICAgICAgICAg ICAgICAgIHNyYyA9ICZmYy0+ZnJhbWUtPmRhdGFbY19pZHhdWyh5ID4+IHZzKSAqIGZjLT5mcmFt ZS0+bGluZXNpemVbY19pZHhdICsgKCh4ID4+IGhzKSA8PCBmYy0+cHMuc3BzLT5waXhlbF9zaGlm dCldOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNfaWR4KSB7CisgICAgICAgICAgICAgICAg ICAgICAgICBmYy0+dnZjZHNwLmxmLmZpbHRlcl9sdW1hWzFdKHNyYywgZmMtPmZyYW1lLT5saW5l c2l6ZVtjX2lkeF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV0YSwgdGMsIG5vX3As IG5vX3EsIG1heF9sZW5fcCwgbWF4X2xlbl9xLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZjLT52dmNkc3AubGYuZmlsdGVyX2Nocm9t YVsxXShzcmMsIGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhdLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJldGEsIHRjLCBub19wLCBub19xLCBtYXhfbGVuX3AsIG1heF9sZW5fcSwgdnMp OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIGZmX3Z2Y19kZWJsb2NrX2hvcml6b250YWwo Y29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgaW50IHgwLCBpbnQgeTApCit7CisgICAgVlZDRnJh bWVDb250ZXh0ICpmYyA9IGxjLT5mYzsKKyAgICBjb25zdCBWVkNTUFMgKnNwcyAgID0gZmMtPnBz LnNwczsKKyAgICBjb25zdCBpbnQgY19lbmQgICAgID0gZmMtPnBzLnNwcy0+ci0+c3BzX2Nocm9t YV9mb3JtYXRfaWRjID8gVlZDX01BWF9TQU1QTEVfQVJSQVlTIDogMTsKKyAgICB1aW50OF90KiBz cmM7CisgICAgaW50IHgsIHksIHFwOworCisgICAgLy9ub3QgdXNlIHRoaXMgeWV0LCBtYXkgbmVl ZGVkIGJ5IHBsdC4KKyAgICBjb25zdCB1aW50OF90IG5vX3BbNF0gPSB7IDAgfTsKKyAgICBjb25z dCB1aW50OF90IG5vX3FbNF0gPSB7IDAgfSA7CisKKyAgICBjb25zdCBpbnQgY3RiX2xvZzJfc2l6 ZV95ID0gZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIGludCB4X2VuZCwgeV9lbmQ7 CisgICAgY29uc3QgaW50IGN0Yl9zaXplID0gMSA8PCBjdGJfbG9nMl9zaXplX3k7CisgICAgY29u c3QgaW50IGN0YiA9ICh4MCA+PiBjdGJfbG9nMl9zaXplX3kpICsKKyAgICAgICAgKHkwID4+IGN0 Yl9sb2cyX3NpemVfeSkgKiBmYy0+cHMucHBzLT5jdGJfd2lkdGg7CisgICAgY29uc3QgREJQYXJh bXMgKnBhcmFtcyA9IGZjLT50YWIuZGVibG9jayArIGN0YjsKKworICAgIHZ2Y19kZWJsb2NrX2Jz KGxjLCB4MCwgeTAsIDApOworCisgICAgeF9lbmQgPSB4MCArIGN0Yl9zaXplOworICAgIGlmICh4 X2VuZCA+IGZjLT5wcy5zcHMtPndpZHRoKQorICAgICAgICB4X2VuZCA9IGZjLT5wcy5zcHMtPndp ZHRoOworICAgIHlfZW5kID0geTAgKyBjdGJfc2l6ZTsKKyAgICBpZiAoeV9lbmQgPiBmYy0+cHMu c3BzLT5oZWlnaHQpCisgICAgICAgIHlfZW5kID0gZmMtPnBzLnNwcy0+aGVpZ2h0OworCisgICAg Zm9yIChpbnQgY19pZHggPSAwOyBjX2lkeCA8IGNfZW5kOyBjX2lkeCsrKSB7CisgICAgICAgIGNv bnN0IGludCBocyAgICAgICAgICA9IHNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29uc3Qg aW50IHZzICAgICAgICAgID0gc3BzLT52c2hpZnRbY19pZHhdOworICAgICAgICBjb25zdCBpbnQg Z3JpZCAgICAgICAgPSBjX2lkeCA/IChDSFJPTUFfR1JJRCA8PCB2cykgOiBMVU1BX0dSSUQ7Cisg ICAgICAgIGNvbnN0IGludCBiZXRhX29mZnNldCA9IHBhcmFtcy0+YmV0YV9vZmZzZXRbY19pZHhd OworICAgICAgICBjb25zdCBpbnQgdGNfb2Zmc2V0ICAgPSBwYXJhbXMtPnRjX29mZnNldFtjX2lk eF07CisKKyAgICAgICAgZm9yICh5ID0geTA7IHkgPCB5X2VuZDsgeSArPSBncmlkKSB7CisgICAg ICAgICAgICBjb25zdCB1aW50OF90IGhvcml6b250YWxfY3R1X2VkZ2UgPSAhKHkgJSBmYy0+cHMu c3BzLT5jdGJfc2l6ZV95KTsKKyAgICAgICAgICAgIGlmICgheSkKKyAgICAgICAgICAgICAgICBj b250aW51ZTsKKworICAgICAgICAgICAgZm9yICh4ID0geDAgPyB4MDogMDsgeCA8IHhfZW5kOyB4 ICs9IChERUJMT0NLX1NURVAgPDwgaHMpKSB7CisgICAgICAgICAgICAgICAgaW50MzJfdCBic1s0 XSwgYmV0YVs0XSwgdGNbNF0sIGFsbF96ZXJvX2JzID0gMTsKKyAgICAgICAgICAgICAgICB1aW50 OF90IG1heF9sZW5fcFs0XSwgbWF4X2xlbl9xWzRdOworCisgICAgICAgICAgICAgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBERUJMT0NLX1NURVAgPj4gKDIgLSBocyk7IGkrKykgeworICAgICAgICAg ICAgICAgICAgICBjb25zdCBpbnQgZHggPSBpIDw8IDI7CisKKyAgICAgICAgICAgICAgICAgICAg YnNbaV0gPSAoeCArIGR4IDwgeF9lbmQpID8gVEFCX0JTKGZjLT50YWIuaG9yaXpvbnRhbF9ic1tj X2lkeF0sIHggKyBkeCwgeSkgOiAwOworICAgICAgICAgICAgICAgICAgICBpZiAoYnNbaV0pIHsK KyAgICAgICAgICAgICAgICAgICAgICAgIHNyYyA9ICZmYy0+ZnJhbWUtPmRhdGFbY19pZHhdWyh5 ID4+IHZzKSAqIGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhdICsgKCgoeCArIGR4KT4+IGhzKSA8 PCBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdCldOworICAgICAgICAgICAgICAgICAgICAgICAgcXAg PSBnZXRfcXAoZmMsIHNyYywgeCArIGR4LCB5LCBjX2lkeCwgMCk7CisKKyAgICAgICAgICAgICAg ICAgICAgICAgIGJldGFbaV0gPSBiZXRhdGFibGVbYXZfY2xpcChxcCArIGJldGFfb2Zmc2V0LCAw LCBNQVhfUVApXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2ZpbHRlcl9sZW5ndGgo ZmMsIHggKyBkeCwgeSwgY19pZHgsIDAsIGhvcml6b250YWxfY3R1X2VkZ2UsIGJzW2ldLCAmbWF4 X2xlbl9wW2ldLCAmbWF4X2xlbl9xW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsbF96 ZXJvX2JzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0 Y1tpXSA9IGJzW2ldID8gVENfQ0FMQyhxcCwgYnNbaV0pIDogMDsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgaWYgKCFhbGxfemVyb19icykgeworICAgICAgICAgICAgICAgICAg ICBzcmMgPSAmZmMtPmZyYW1lLT5kYXRhW2NfaWR4XVsoeSA+PiB2cykgKiBmYy0+ZnJhbWUtPmxp bmVzaXplW2NfaWR4XSArICgoeCA+PiBocykgPDwgZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQpXTsK KyAgICAgICAgICAgICAgICAgICAgaWYgKCFjX2lkeCkgeworICAgICAgICAgICAgICAgICAgICAg ICAgZmMtPnZ2Y2RzcC5sZi5maWx0ZXJfbHVtYVswXShzcmMsIGZjLT5mcmFtZS0+bGluZXNpemVb Y19pZHhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJldGEsIHRjLCBub19wLCBub19x LCBtYXhfbGVuX3AsIG1heF9sZW5fcSwgaG9yaXpvbnRhbF9jdHVfZWRnZSk7CisgICAgICAgICAg ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmYy0+dnZjZHNwLmxm LmZpbHRlcl9jaHJvbWFbMF0oc3JjLCBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBiZXRhLCB0Yywgbm9fcCwgbm9fcSwgbWF4X2xlbl9wLCBt YXhfbGVuX3EsIGhzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgYWxmX2Nv cHlfYm9yZGVyKHVpbnQ4X3QgKmRzdCwgY29uc3QgdWludDhfdCAqc3JjLAorICAgIGNvbnN0IGlu dCBwaXhlbF9zaGlmdCwgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0LCBjb25zdCBwdHJkaWZm X3QgZHN0X3N0cmlkZSwgY29uc3QgcHRyZGlmZl90IHNyY19zdHJpZGUpCit7CisgICAgd2lkdGgg PDw9IHBpeGVsX3NoaWZ0OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsK KyAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCB3aWR0aCk7CisgICAgICAgIGRzdCArPSBkc3Rfc3Ry aWRlOworICAgICAgICBzcmMgKz0gc3JjX3N0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk IGFsZl9leHRlbmRfdmVydCh1aW50OF90ICpfZHN0LCBjb25zdCB1aW50OF90ICpfc3JjLAorICAg IGNvbnN0IGludCBwaXhlbF9zaGlmdCwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0 LCBwdHJkaWZmX3Qgc3RyaWRlKQoreworICAgIGlmIChwaXhlbF9zaGlmdCA9PSAwKSB7CisgICAg ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKKyAgICAgICAgICAgIG1lbXNl dChfZHN0LCAqX3NyYywgd2lkdGgpOworICAgICAgICAgICAgX3NyYyArPSBzdHJpZGU7CisgICAg ICAgICAgICBfZHN0ICs9IHN0cmlkZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg IGNvbnN0IHVpbnQxNl90ICpzcmMgPSAoY29uc3QgdWludDE2X3QgKilfc3JjOworICAgICAgICB1 aW50MTZfdCAqZHN0ID0gKHVpbnQxNl90ICopX2RzdDsKKyAgICAgICAgc3RyaWRlID4+PSBwaXhl bF9zaGlmdDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7Cisg ICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHdpZHRoOyBqKyspCisgICAgICAgICAgICAg ICAgZHN0W2pdID0gKnNyYzsKKyAgICAgICAgICAgIHNyYyArPSBzdHJpZGU7CisgICAgICAgICAg ICBkc3QgKz0gc3RyaWRlOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBhbGZf ZXh0ZW5kX2hvcnoodWludDhfdCAqZHN0LCBjb25zdCB1aW50OF90ICpzcmMsCisgICAgY29uc3Qg aW50IHBpeGVsX3NoaWZ0LCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IHB0cmRp ZmZfdCBzdHJpZGUpCit7CisgICAgd2lkdGggPDw9IHBpeGVsX3NoaWZ0OworICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKKyAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCB3aWR0 aCk7CisgICAgICAgIGRzdCArPSBzdHJpZGU7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBhbGZf Y29weV9jdGJfdG9faHYoVlZDRnJhbWVDb250ZXh0ICpmYywgY29uc3QgdWludDhfdCAqc3JjLCBj b25zdCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwKKyAgICBjb25zdCBpbnQgeCwgY29uc3QgaW50IHks IGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwgY29uc3QgaW50IHhfY3RiLCBjb25z dCBpbnQgeV9jdGIsIGNvbnN0IGludCBjX2lkeCkKK3sKKyAgICBjb25zdCBpbnQgcHMgICAgICAg ICAgICA9IGZjLT5wcy5zcHMtPnBpeGVsX3NoaWZ0OworICAgIGNvbnN0IGludCB3ICAgICAgICAg ICAgID0gZmMtPnBzLnNwcy0+d2lkdGggPj4gZmMtPnBzLnNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAg ICBjb25zdCBpbnQgaCAgICAgICAgICAgICA9IGZjLT5wcy5zcHMtPmhlaWdodCA+PiBmYy0+cHMu c3BzLT52c2hpZnRbY19pZHhdOworICAgIGNvbnN0IGludCBib3JkZXJfcGl4ZWxzID0gKGNfaWR4 ID09IDApID8gQUxGX0JPUkRFUl9MVU1BIDogQUxGX0JPUkRFUl9DSFJPTUE7CisgICAgY29uc3Qg aW50IG9mZnNldF9oW10gICAgPSB7IDAsIGhlaWdodCAtIGJvcmRlcl9waXhlbHMgfTsKKyAgICBj b25zdCBpbnQgb2Zmc2V0X3ZbXSAgICA9IHsgMCwgd2lkdGggIC0gYm9yZGVyX3BpeGVscyB9Owor CisgICAgLyogY29weSBob3Jpem9udGFsIGVkZ2VzICovCisgICAgZm9yIChpbnQgaSA9IDA7IGkg PCBGRl9BUlJBWV9FTEVNUyhvZmZzZXRfaCk7IGkrKykgeworICAgICAgICBhbGZfY29weV9ib3Jk ZXIoZmMtPnRhYi5hbGZfcGl4ZWxfYnVmZmVyX2hbY19pZHhdW2ldICsgKChib3JkZXJfcGl4ZWxz ICogeV9jdGIgKiB3ICsgeCk8PCBwcyksCisgICAgICAgICAgICBzcmMgKyBvZmZzZXRfaFtpXSAq IHNyY19zdHJpZGUsIHBzLCB3aWR0aCwgYm9yZGVyX3BpeGVscywgdyA8PCBwcywgc3JjX3N0cmlk ZSk7CisgICAgfQorICAgIC8qIGNvcHkgdmVydGljYWwgZWRnZXMgKi8KKyAgICBmb3IgKGludCBp ID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKG9mZnNldF92KTsgaSsrKSB7CisgICAgICAgIGFsZl9j b3B5X2JvcmRlcihmYy0+dGFiLmFsZl9waXhlbF9idWZmZXJfdltjX2lkeF1baV0gKyAoKGggKiB4 X2N0YiArIHkpICogKGJvcmRlcl9waXhlbHMgPDwgcHMpKSwKKyAgICAgICAgICAgIHNyYyArIChv ZmZzZXRfdltpXSA8PCBwcyksIHBzLCBib3JkZXJfcGl4ZWxzLCBoZWlnaHQsIGJvcmRlcl9waXhl bHMgPDwgcHMsIHNyY19zdHJpZGUpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgYWxmX2ZpbGxf Ym9yZGVyX2godWludDhfdCAqZHN0LCBjb25zdCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwgY29uc3Qg dWludDhfdCAqc3JjLCBjb25zdCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwKKyAgICBjb25zdCB1aW50 OF90ICpib3JkZXIsIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGJvcmRlcl9waXhlbHMsIGNv bnN0IGludCBwcywgY29uc3QgaW50IGVkZ2UpCit7CisgICAgaWYgKGVkZ2UpCisgICAgICAgIGFs Zl9leHRlbmRfaG9yeihkc3QsIGJvcmRlciwgcHMsIHdpZHRoLCBib3JkZXJfcGl4ZWxzLCBkc3Rf c3RyaWRlKTsKKyAgICBlbHNlCisgICAgICAgIGFsZl9jb3B5X2JvcmRlcihkc3QsIHNyYywgcHMs IHdpZHRoLCBib3JkZXJfcGl4ZWxzLCBkc3Rfc3RyaWRlLCBzcmNfc3RyaWRlKTsKK30KKworc3Rh dGljIHZvaWQgYWxmX2ZpbGxfYm9yZGVyX3YodWludDhfdCAqZHN0LCBjb25zdCBwdHJkaWZmX3Qg ZHN0X3N0cmlkZSwgY29uc3QgdWludDhfdCAqc3JjLAorICAgIGNvbnN0IHVpbnQ4X3QgKmJvcmRl ciwgY29uc3QgaW50IGJvcmRlcl9waXhlbHMsIGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IGludCBw aXhlbF9zaGlmdCwgY29uc3QgaW50ICplZGdlcywgY29uc3QgaW50IGVkZ2UpCit7CisgICAgY29u c3QgcHRyZGlmZl90IHNyY19zdHJpZGUgPSAoYm9yZGVyX3BpeGVscyA8PCBwaXhlbF9zaGlmdCk7 CisKKyAgICBpZiAoZWRnZSkgeworICAgICAgICBhbGZfZXh0ZW5kX3ZlcnQoZHN0LCBib3JkZXIs IHBpeGVsX3NoaWZ0LCBib3JkZXJfcGl4ZWxzLCBoZWlnaHQgKyAyICogYm9yZGVyX3BpeGVscywg ZHN0X3N0cmlkZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvL2xlZnQvcmlnaHQK KyAgICBhbGZfY29weV9ib3JkZXIoZHN0ICsgZHN0X3N0cmlkZSAqIGJvcmRlcl9waXhlbHMgKiBl ZGdlc1tUT1BdLCBzcmMgKyBzcmNfc3RyaWRlICogYm9yZGVyX3BpeGVscyAqIGVkZ2VzW1RPUF0s CisgICAgICAgIHBpeGVsX3NoaWZ0LCBib3JkZXJfcGl4ZWxzLCBoZWlnaHQgKyAoIWVkZ2VzW1RP UF0gKyAhZWRnZXNbQk9UVE9NXSkgKiBib3JkZXJfcGl4ZWxzLCBkc3Rfc3RyaWRlLCBzcmNfc3Ry aWRlKTsKKworICAgIC8vdG9wIGxlZnQvcmlnaHQKKyAgICBpZiAoZWRnZXNbVE9QXSkKKyAgICAg ICAgYWxmX2V4dGVuZF9ob3J6KGRzdCwgZHN0ICsgZHN0X3N0cmlkZSAqIGJvcmRlcl9waXhlbHMs IHBpeGVsX3NoaWZ0LCBib3JkZXJfcGl4ZWxzLCBib3JkZXJfcGl4ZWxzLCBkc3Rfc3RyaWRlKTsK KworICAgIC8vYm90dG9tIGxlZnQvcmlnaHQKKyAgICBpZiAoZWRnZXNbQk9UVE9NXSkgeworICAg ICAgICBkc3QgKz0gZHN0X3N0cmlkZSAqIChib3JkZXJfcGl4ZWxzICsgaGVpZ2h0KTsKKyAgICAg ICAgYWxmX2V4dGVuZF9ob3J6KGRzdCwgZHN0IC0gZHN0X3N0cmlkZSwgcGl4ZWxfc2hpZnQsIGJv cmRlcl9waXhlbHMsIGJvcmRlcl9waXhlbHMsIGRzdF9zdHJpZGUpOworICAgIH0KK30KKworc3Rh dGljIHZvaWQgYWxmX3ByZXBhcmVfYnVmZmVyKFZWQ0ZyYW1lQ29udGV4dCAqZmMsIHVpbnQ4X3Qg Kl9kc3QsIGNvbnN0IHVpbnQ4X3QgKl9zcmMsIGNvbnN0IGludCB4LCBjb25zdCBpbnQgeSwKKyAg ICBjb25zdCBpbnQgeF9jdGIsIGNvbnN0IGludCB5X2N0YiwgY29uc3QgaW50IHdpZHRoLCBjb25z dCBpbnQgaGVpZ2h0LCBjb25zdCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwgY29uc3QgcHRyZGlmZl90 IHNyY19zdHJpZGUsCisgICAgY29uc3QgaW50IGNfaWR4LCBjb25zdCBpbnQgKmVkZ2VzKQorewor ICAgIGNvbnN0IGludCBwcyA9IGZjLT5wcy5zcHMtPnBpeGVsX3NoaWZ0OworICAgIGNvbnN0IGlu dCB3ID0gZmMtPnBzLnNwcy0+d2lkdGggPj4gZmMtPnBzLnNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAg ICBjb25zdCBpbnQgaCA9IGZjLT5wcy5zcHMtPmhlaWdodCA+PiBmYy0+cHMuc3BzLT52c2hpZnRb Y19pZHhdOworICAgIGNvbnN0IGludCBib3JkZXJfcGl4ZWxzID0gY19pZHggPT0gMCA/IEFMRl9C T1JERVJfTFVNQSA6IEFMRl9CT1JERVJfQ0hST01BOworICAgIHVpbnQ4X3QgKmRzdCwgKnNyYzsK KworICAgIGNvcHlfY3RiKF9kc3QsIF9zcmMsIHdpZHRoIDw8IHBzLCBoZWlnaHQsIGRzdF9zdHJp ZGUsIHNyY19zdHJpZGUpOworCisgICAgLy90b3AKKyAgICBzcmMgPSBmYy0+dGFiLmFsZl9waXhl bF9idWZmZXJfaFtjX2lkeF1bMV0gKyAoKChib3JkZXJfcGl4ZWxzICogKHlfY3RiIC0gMSkpICog dyArIHgpIDw8IHBzKTsKKyAgICBkc3QgPSBfZHN0IC0gYm9yZGVyX3BpeGVscyAqIGRzdF9zdHJp ZGU7CisgICAgYWxmX2ZpbGxfYm9yZGVyX2goZHN0LCBkc3Rfc3RyaWRlLCBzcmMsIHcgIDw8IHBz LCBfZHN0LCB3aWR0aCwgYm9yZGVyX3BpeGVscywgcHMsIGVkZ2VzW1RPUF0pOworCisgICAgLy9i b3R0b20KKyAgICBzcmMgPSBmYy0+dGFiLmFsZl9waXhlbF9idWZmZXJfaFtjX2lkeF1bMF0gKyAo KGJvcmRlcl9waXhlbHMgKiAoeV9jdGIgKyAxKSAqIHcgKyB4KSA8PCBwcyk7CisgICAgZHN0ID0g X2RzdCArIGhlaWdodCAqIGRzdF9zdHJpZGU7CisgICAgYWxmX2ZpbGxfYm9yZGVyX2goZHN0LCBk c3Rfc3RyaWRlLCBzcmMsIHcgIDw8IHBzLCBfZHN0ICsgKGhlaWdodCAtIDEpICogZHN0X3N0cmlk ZSwgd2lkdGgsIGJvcmRlcl9waXhlbHMsIHBzLCBlZGdlc1tCT1RUT01dKTsKKworCisgICAgLy9s ZWZ0CisgICAgc3JjID0gZmMtPnRhYi5hbGZfcGl4ZWxfYnVmZmVyX3ZbY19pZHhdWzFdICsgKGgg KiAoeF9jdGIgLSAxKSArIHkgLSBib3JkZXJfcGl4ZWxzKSAqIChib3JkZXJfcGl4ZWxzIDw8IHBz KTsKKyAgICBkc3QgPSBfZHN0IC0gKGJvcmRlcl9waXhlbHMgPDwgcHMpIC0gYm9yZGVyX3BpeGVs cyAqIGRzdF9zdHJpZGU7CisgICAgYWxmX2ZpbGxfYm9yZGVyX3YoZHN0LCBkc3Rfc3RyaWRlLCBz cmMsICBkc3QgKyAoYm9yZGVyX3BpeGVscyA8PCBwcyksIGJvcmRlcl9waXhlbHMsIGhlaWdodCwg cHMsIGVkZ2VzLCBlZGdlc1tMRUZUXSk7CisKKyAgICAvL3JpZ2h0CisgICAgc3JjID0gZmMtPnRh Yi5hbGZfcGl4ZWxfYnVmZmVyX3ZbY19pZHhdWzBdICsgKGggKiAoeF9jdGIgKyAxKSArIHkgLSBi b3JkZXJfcGl4ZWxzKSAqIChib3JkZXJfcGl4ZWxzIDw8IHBzKTsKKyAgICBkc3QgPSBfZHN0ICsg KHdpZHRoIDw8IHBzKSAtIGJvcmRlcl9waXhlbHMgKiBkc3Rfc3RyaWRlOworICAgIGFsZl9maWxs X2JvcmRlcl92KGRzdCwgZHN0X3N0cmlkZSwgc3JjLCAgZHN0IC0gKDEgPDwgcHMpLCBib3JkZXJf cGl4ZWxzLCBoZWlnaHQsIHBzLCBlZGdlcywgZWRnZXNbUklHSFRdKTsKK30KKworI2RlZmluZSBB TEZfTUFYX0JMT0NLU19JTl9DVFUgICAoTUFYX0NUVV9TSVpFICogTUFYX0NUVV9TSVpFIC8gQUxG X0JMT0NLX1NJWkUgLyBBTEZfQkxPQ0tfU0laRSkKKyNkZWZpbmUgQUxGX01BWF9GSUxURVJfU0la RSAgICAgKEFMRl9NQVhfQkxPQ0tTX0lOX0NUVSAqIEFMRl9OVU1fQ09FRkZfTFVNQSkKKworc3Rh dGljIHZvaWQgYWxmX2dldF9jb2VmZl9hbmRfY2xpcChWVkNMb2NhbENvbnRleHQgKmxjLCBpbnQx Nl90ICpjb2VmZiwgaW50MTZfdCAqY2xpcCwKKyAgICBjb25zdCB1aW50OF90ICpzcmMsIHB0cmRp ZmZfdCBzcmNfc3RyaWRlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCB2Yl9wb3MsIEFMRlBh cmFtcyAqYWxmKQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMgICAgID0gbGMtPmZj OworICAgIGNvbnN0IEgyNjZSYXdTbGljZUhlYWRlciAqcnNoID0gbGMtPnNjLT5zaC5yOworICAg IHVpbnQ4X3QgZml4ZWRfY2xpcF9zZXRbQUxGX05VTV9GSUxURVJTX0xVTUFdW0FMRl9OVU1fQ09F RkZfTFVNQV0gPSB7IDAgfTsKKyAgICBjb25zdCBpbnQxNl90ICpjb2VmZl9zZXQ7CisgICAgY29u c3QgdWludDhfdCAqY2xpcF9pZHhfc2V0OworICAgIGNvbnN0IHVpbnQ4X3QgKmNsYXNzX3RvX2Zp bHQ7CisgICAgY29uc3QgaW50IHNpemUgPSB3aWR0aCAqIGhlaWdodCAvIEFMRl9CTE9DS19TSVpF IC8gQUxGX0JMT0NLX1NJWkU7CisgICAgaW50IGNsYXNzX2lkeFtBTEZfTUFYX0JMT0NLU19JTl9D VFVdOworICAgIGludCB0cmFuc3Bvc2VfaWR4W0FMRl9NQVhfQkxPQ0tTX0lOX0NUVV07CisKKyAg ICBpZiAoYWxmLT5jdGJfZmlsdF9zZXRfaWR4X3kgPCAxNikgeworICAgICAgICBjb2VmZl9zZXQg ICAgICAgICA9ICZmZl92dmNfYWxmX2ZpeF9maWx0X2NvZWZmWzBdWzBdOworICAgICAgICBjbGlw X2lkeF9zZXQgICAgICA9ICZmaXhlZF9jbGlwX3NldFswXVswXTsKKyAgICAgICAgY2xhc3NfdG9f ZmlsdCAgICAgPSBmZl92dmNfYWxmX2NsYXNzX3RvX2ZpbHRfbWFwW2FsZi0+Y3RiX2ZpbHRfc2V0 X2lkeF95XTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCBpbnQgaWQgICAgICA9IHJzaC0+ c2hfYWxmX2Fwc19pZF9sdW1hW2FsZi0+Y3RiX2ZpbHRfc2V0X2lkeF95IC0gMTZdOworICAgICAg ICBjb25zdCBWVkNBTEYgKmFwcyA9IGZjLT5wcy5hbGZfbGlzdFtpZF07CisgICAgICAgIGNvZWZm X3NldCAgICAgICAgID0gJmFwcy0+bHVtYV9jb2VmZlswXVswXTsKKyAgICAgICAgY2xpcF9pZHhf c2V0ICAgICAgPSAmYXBzLT5sdW1hX2NsaXBfaWR4WzBdWzBdOworICAgICAgICBjbGFzc190b19m aWx0ICAgICA9IGZmX3Z2Y19hbGZfYXBzX2NsYXNzX3RvX2ZpbHRfbWFwOworICAgIH0KKyAgICBm Yy0+dnZjZHNwLmFsZi5jbGFzc2lmeShjbGFzc19pZHgsIHRyYW5zcG9zZV9pZHgsIHNyYywgc3Jj X3N0cmlkZSwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgdmJfcG9zLCBsYy0+YWxmX2dyYWRpZW50 X3RtcCk7CisgICAgZmMtPnZ2Y2RzcC5hbGYucmVjb25fY29lZmZfYW5kX2NsaXAoY29lZmYsIGNs aXAsIGNsYXNzX2lkeCwgdHJhbnNwb3NlX2lkeCwgc2l6ZSwKKyAgICAgICAgY29lZmZfc2V0LCBj bGlwX2lkeF9zZXQsIGNsYXNzX3RvX2ZpbHQpOworfQorCitzdGF0aWMgdm9pZCBhbGZfZmlsdGVy X2x1bWEoVlZDTG9jYWxDb250ZXh0ICpsYywgdWludDhfdCAqZHN0LCBjb25zdCB1aW50OF90ICpz cmMsCisgICAgY29uc3QgcHRyZGlmZl90IGRzdF9zdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCBzcmNf c3RyaWRlLCBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCwKKyAgICBjb25zdCBpbnQgd2lkdGgs IGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IGludCBfdmJfcG9zLCBBTEZQYXJhbXMgKmFsZikKK3sK KyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjID0gbGMtPmZjOworICAgIGludCB2Yl9wb3Mg ICAgICAgICAgICAgICAgPSBfdmJfcG9zIC0geTA7CisgICAgaW50MTZfdCAqY29lZmYgICAgICAg ICAgICA9IChpbnQxNl90KilsYy0+dG1wOworICAgIGludDE2X3QgKmNsaXAgICAgICAgICAgICAg PSAoaW50MTZfdCAqKWxjLT50bXAxOworCisgICAgYXZfYXNzZXJ0MChBTEZfTUFYX0ZJTFRFUl9T SVpFIDw9IHNpemVvZihsYy0+dG1wKSk7CisgICAgYXZfYXNzZXJ0MChBTEZfTUFYX0ZJTFRFUl9T SVpFICogc2l6ZW9mKGludDE2X3QpIDw9IHNpemVvZihsYy0+dG1wMSkpOworCisgICAgYWxmX2dl dF9jb2VmZl9hbmRfY2xpcChsYywgY29lZmYsIGNsaXAsIHNyYywgc3JjX3N0cmlkZSwgd2lkdGgs IGhlaWdodCwgdmJfcG9zLCBhbGYpOworICAgIGZjLT52dmNkc3AuYWxmLmZpbHRlcltMVU1BXShk c3QsIGRzdF9zdHJpZGUsIHNyYywgc3JjX3N0cmlkZSwgd2lkdGgsIGhlaWdodCwgY29lZmYsIGNs aXAsIHZiX3Bvcyk7Cit9CisKK3N0YXRpYyBpbnQgYWxmX2NsaXBfZnJvbV9pZHgoY29uc3QgVlZD RnJhbWVDb250ZXh0ICpmYywgY29uc3QgaW50IGlkeCkKK3sKKyAgICBjb25zdCBWVkNTUFMgKnNw cyAgPSBmYy0+cHMuc3BzOworICAgIGNvbnN0IGludCBvZmZzZXRbXSA9IHswLCAzLCA1LCA3fTsK KworICAgIHJldHVybiAxIDw8IChzcHMtPmJpdF9kZXB0aCAtIG9mZnNldFtpZHhdKTsKK30KKwor c3RhdGljIHZvaWQgYWxmX2ZpbHRlcl9jaHJvbWEoVlZDTG9jYWxDb250ZXh0ICpsYywgdWludDhf dCAqZHN0LCBjb25zdCB1aW50OF90ICpzcmMsCisgICAgY29uc3QgcHRyZGlmZl90IGRzdF9zdHJp ZGUsIGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlLCBjb25zdCBpbnQgY19pZHgsCisgICAgY29u c3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0LCBjb25zdCBpbnQgdmJfcG9zLCBBTEZQYXJh bXMgKmFsZikKK3sKKyAgICBWVkNGcmFtZUNvbnRleHQgKmZjICAgICAgICAgICA9IGxjLT5mYzsK KyAgICBjb25zdCBIMjY2UmF3U2xpY2VIZWFkZXIgKnJzaCA9IGxjLT5zYy0+c2gucjsKKyAgICBj b25zdCBWVkNBTEYgKmFwcyAgICAgICAgICAgICA9IGZjLT5wcy5hbGZfbGlzdFtyc2gtPnNoX2Fs Zl9hcHNfaWRfY2hyb21hXTsKKyAgICBjb25zdCBpbnQgaWR4ICAgICAgICAgICAgICAgICA9IGFs Zi0+YWxmX2N0Yl9maWx0ZXJfYWx0X2lkeFtjX2lkeCAtIDFdOworICAgIGNvbnN0IGludDE2X3Qg KmNvZWZmICAgICAgICAgID0gYXBzLT5jaHJvbWFfY29lZmZbaWR4XTsKKyAgICBpbnQxNl90IGNs aXBbQUxGX05VTV9DT0VGRl9DSFJPTUFdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBBTEZf TlVNX0NPRUZGX0NIUk9NQTsgaSsrKQorICAgICAgICBjbGlwW2ldID0gYWxmX2NsaXBfZnJvbV9p ZHgoZmMsIGFwcy0+Y2hyb21hX2NsaXBfaWR4W2lkeF1baV0pOworCisgICAgZmMtPnZ2Y2RzcC5h bGYuZmlsdGVyW0NIUk9NQV0oZHN0LCBkc3Rfc3RyaWRlLCBzcmMsIHNyY19zdHJpZGUsIHdpZHRo LCBoZWlnaHQsIGNvZWZmLCBjbGlwLCB2Yl9wb3MpOworfQorCitzdGF0aWMgdm9pZCBhbGZfZmls dGVyX2NjKFZWQ0xvY2FsQ29udGV4dCAqbGMsIHVpbnQ4X3QgKmRzdCwgY29uc3QgdWludDhfdCAq bHVtYSwKKyAgICBjb25zdCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwgY29uc3QgcHRyZGlmZl90IGx1 bWFfc3RyaWRlLCBjb25zdCBpbnQgY19pZHgsCisgICAgY29uc3QgaW50IHdpZHRoLCBjb25zdCBp bnQgaGVpZ2h0LCBjb25zdCBpbnQgaHMsIGNvbnN0IGludCB2cywgY29uc3QgaW50IHZiX3Bvcywg QUxGUGFyYW1zICphbGYpCit7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYyAgICAgPSBs Yy0+ZmM7CisgICAgY29uc3QgSDI2NlJhd1NsaWNlSGVhZGVyICpyc2ggPSBsYy0+c2MtPnNoLnI7 CisgICAgY29uc3QgaW50IGlkeCAgICAgICAgICAgICAgICAgPSBjX2lkeCAtIDE7CisgICAgY29u c3QgaW50IGNjX2Fwc19pZCAgICAgICAgICAgPSBjX2lkeCA9PSBDQiA/IHJzaC0+c2hfYWxmX2Nj X2NiX2Fwc19pZCA6IHJzaC0+c2hfYWxmX2NjX2NyX2Fwc19pZDsKKyAgICBjb25zdCBWVkNBTEYg KmFwcyAgICAgICAgICAgICA9IGZjLT5wcy5hbGZfbGlzdFtjY19hcHNfaWRdOworCisgICAgaWYg KGFwcykgeworICAgICAgICBjb25zdCBpbnQxNl90ICpjb2VmZiA9IGFwcy0+Y2NfY29lZmZbaWR4 XVthbGYtPmN0Yl9jY19pZGNbaWR4XSAtIDFdOworCisgICAgICAgIGZjLT52dmNkc3AuYWxmLmZp bHRlcl9jYyhkc3QsIGRzdF9zdHJpZGUsIGx1bWEsIGx1bWFfc3RyaWRlLCB3aWR0aCwgaGVpZ2h0 LCBocywgdnMsIGNvZWZmLCB2Yl9wb3MpOworICAgIH0KK30KKwordm9pZCBmZl92dmNfYWxmX2Nv cHlfY3R1X3RvX2h2KFZWQ0xvY2FsQ29udGV4dCogbGMsIGNvbnN0IGludCB4MCwgY29uc3QgaW50 IHkwKQoreworICAgIFZWQ0ZyYW1lQ29udGV4dCAqZmMgID0gbGMtPmZjOworICAgIGNvbnN0IGlu dCB4X2N0YiAgICAgID0geDAgPj4gZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIGNv bnN0IGludCB5X2N0YiAgICAgID0geTAgPj4gZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95Owor ICAgIGNvbnN0IGludCBjdGJfc2l6ZV95ID0gZmMtPnBzLnNwcy0+Y3RiX3NpemVfeTsKKyAgICBj b25zdCBpbnQgcHMgICAgICAgICA9IGZjLT5wcy5zcHMtPnBpeGVsX3NoaWZ0OworICAgIGNvbnN0 IGludCBjX2VuZCAgICAgID0gZmMtPnBzLnNwcy0+ci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID8g VlZDX01BWF9TQU1QTEVfQVJSQVlTIDogMTsKKworICAgIGZvciAoaW50IGNfaWR4ID0gMDsgY19p ZHggPCBjX2VuZDsgY19pZHgrKykgeworICAgICAgICBjb25zdCBpbnQgaHMgICAgID0gZmMtPnBz LnNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IHZzICAgICA9IGZjLT5wcy5z cHMtPnZzaGlmdFtjX2lkeF07CisgICAgICAgIGNvbnN0IGludCB4ICAgICAgPSB4MCA+PiBoczsK KyAgICAgICAgY29uc3QgaW50IHkgICAgICA9IHkwID4+IHZzOworICAgICAgICBjb25zdCBpbnQg d2lkdGggID0gRkZNSU4oZmMtPnBzLnNwcy0+d2lkdGggLSB4MCwgY3RiX3NpemVfeSkgPj4gaHM7 CisgICAgICAgIGNvbnN0IGludCBoZWlnaHQgPSBGRk1JTihmYy0+cHMuc3BzLT5oZWlnaHQgLSB5 MCwgY3RiX3NpemVfeSkgPj4gdnM7CisKKyAgICAgICAgY29uc3QgaW50IHNyY19zdHJpZGUgPSBm Yy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XTsKKyAgICAgICAgdWludDhfdCogc3JjID0gJmZjLT5m cmFtZS0+ZGF0YVtjX2lkeF1beSAqIHNyY19zdHJpZGUgKyAoeCA8PCBwcyldOworCisgICAgICAg IGFsZl9jb3B5X2N0Yl90b19odihmYywgc3JjLCBzcmNfc3RyaWRlLCB4LCB5LCB3aWR0aCwgaGVp Z2h0LCB4X2N0YiwgeV9jdGIsIGNfaWR4KTsKKyAgICB9Cit9CisKK3ZvaWQgZmZfdnZjX2FsZl9m aWx0ZXIoVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTApCit7 CisgICAgVlZDRnJhbWVDb250ZXh0ICpmYyAgICAgPSBsYy0+ZmM7CisgICAgY29uc3QgVlZDUFBT ICpwcHMgICAgICAgPSBmYy0+cHMucHBzOworICAgIGNvbnN0IGludCB4X2N0YiAgICAgICAgID0g eDAgPj4gZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCB5X2N0YiAg ICAgICAgID0geTAgPj4gZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGlu dCBjdGJfc2l6ZV95ICAgID0gZmMtPnBzLnNwcy0+Y3RiX3NpemVfeTsKKyAgICBjb25zdCBpbnQg cHMgICAgICAgICAgICA9IGZjLT5wcy5zcHMtPnBpeGVsX3NoaWZ0OworICAgIGNvbnN0IGludCBw YWRkZWRfc3RyaWRlID0gRURHRV9FTVVfQlVGRkVSX1NUUklERSA8PCBwczsKKyAgICBjb25zdCBp bnQgcGFkZGVkX29mZnNldCA9IHBhZGRlZF9zdHJpZGUgKiBBTEZfUEFERElOR19TSVpFICsgKEFM Rl9QQURESU5HX1NJWkUgPDwgcHMpOworICAgIGNvbnN0IGludCBjX2VuZCAgICAgICAgID0gZmMt PnBzLnNwcy0+ci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID8gVlZDX01BWF9TQU1QTEVfQVJSQVlT IDogMTsKKyAgICBBTEZQYXJhbXMgKmFsZiAgICAgICAgICA9ICZDVEIoZmMtPnRhYi5hbGYsIHhf Y3RiLCB5X2N0Yik7CisgICAgaW50IGVkZ2VzW01BWF9FREdFU10gICAgPSB7IHhfY3RiID09IDAs IHlfY3RiID09IDAsIHhfY3RiID09IHBwcy0+Y3RiX3dpZHRoIC0gMSwgeV9jdGIgPT0gcHBzLT5j dGJfaGVpZ2h0IC0gMSB9OworCisgICAgaWYgKCFwcHMtPnItPnBwc19sb29wX2ZpbHRlcl9hY3Jv c3NfdGlsZXNfZW5hYmxlZF9mbGFnKSB7CisgICAgICAgIGVkZ2VzW0xFRlRdICAgPSBlZGdlc1tM RUZUXSB8fCAobGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfTEVGVF9USUxFKTsKKyAgICAg ICAgZWRnZXNbVE9QXSAgICA9IGVkZ2VzW1RPUF0gfHwgKGxjLT5ib3VuZGFyeV9mbGFncyAmIEJP VU5EQVJZX1VQUEVSX1RJTEUpOworICAgICAgICBlZGdlc1tSSUdIVF0gID0gZWRnZXNbUklHSFRd IHx8IHBwcy0+Y3RiX3RvX2NvbF9iZFt4X2N0Yl0gIT0gcHBzLT5jdGJfdG9fY29sX2JkW3hfY3Ri ICsgMV07CisgICAgICAgIGVkZ2VzW0JPVFRPTV0gPSBlZGdlc1tCT1RUT01dIHx8IHBwcy0+Y3Ri X3RvX3Jvd19iZFt5X2N0Yl0gIT0gcHBzLT5jdGJfdG9fcm93X2JkW3lfY3RiICsgMV07CisgICAg fQorCisgICAgaWYgKCFwcHMtPnItPnBwc19sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJs ZWRfZmxhZykgeworICAgICAgICBlZGdlc1tMRUZUXSAgID0gZWRnZXNbTEVGVF0gfHwgKGxjLT5i b3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX0xFRlRfU0xJQ0UpOworICAgICAgICBlZGdlc1tUT1Bd ICAgID0gZWRnZXNbVE9QXSB8fCAobGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfVVBQRVJf U0xJQ0UpOworICAgICAgICBlZGdlc1tSSUdIVF0gID0gZWRnZXNbUklHSFRdIHx8IENUQihmYy0+ dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlfY3RiKSAhPSBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhf Y3RiICsgMSwgeV9jdGIpOworICAgICAgICBlZGdlc1tCT1RUT01dID0gZWRnZXNbQk9UVE9NXSB8 fCBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YikgIT0gQ1RCKGZjLT50YWIuc2xp Y2VfaWR4LCB4X2N0YiwgeV9jdGIgKyAxKTsKKyAgICB9CisKKyAgICBmb3IgKGludCBjX2lkeCA9 IDA7IGNfaWR4IDwgY19lbmQ7IGNfaWR4KyspIHsKKyAgICAgICAgY29uc3QgaW50IGhzID0gZmMt PnBzLnNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IHZzID0gZmMtPnBzLnNw cy0+dnNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IGN0Yl9zaXplX2ggPSBjdGJfc2l6 ZV95ID4+IGhzOworICAgICAgICBjb25zdCBpbnQgY3RiX3NpemVfdiA9IGN0Yl9zaXplX3kgPj4g dnM7CisgICAgICAgIGNvbnN0IGludCB4ID0geDAgPj4gaHM7CisgICAgICAgIGNvbnN0IGludCB5 ID0geTAgPj4gdnM7CisgICAgICAgIGNvbnN0IGludCBwaWNfd2lkdGggPSBmYy0+cHMuc3BzLT53 aWR0aCA+PiBoczsKKyAgICAgICAgY29uc3QgaW50IHBpY19oZWlnaHQgPSBmYy0+cHMuc3BzLT5o ZWlnaHQgPj4gdnM7CisgICAgICAgIGNvbnN0IGludCB3aWR0aCAgPSBGRk1JTihwaWNfd2lkdGgg IC0geCwgY3RiX3NpemVfaCk7CisgICAgICAgIGNvbnN0IGludCBoZWlnaHQgPSBGRk1JTihwaWNf aGVpZ2h0IC0geSwgY3RiX3NpemVfdik7CisgICAgICAgIGNvbnN0IGludCBzcmNfc3RyaWRlID0g ZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF07CisgICAgICAgIHVpbnQ4X3QgKnNyYyA9ICZmYy0+ ZnJhbWUtPmRhdGFbY19pZHhdW3kgKiBzcmNfc3RyaWRlICsgKHggPDwgcHMpXTsKKyAgICAgICAg dWludDhfdCAqcGFkZGVkOworCisgICAgICAgIGlmIChhbGYtPmN0Yl9mbGFnW2NfaWR4XSB8fCAo IWNfaWR4ICYmIChhbGYtPmN0Yl9jY19pZGNbMF0gfHwgYWxmLT5jdGJfY2NfaWRjWzFdKSkpIHsK KyAgICAgICAgICAgIHBhZGRlZCA9IChjX2lkeCA/IGxjLT5hbGZfYnVmZmVyX2Nocm9tYSA6IGxj LT5hbGZfYnVmZmVyX2x1bWEpICsgcGFkZGVkX29mZnNldDsKKyAgICAgICAgICAgIGFsZl9wcmVw YXJlX2J1ZmZlcihmYywgcGFkZGVkLCBzcmMsIHgsIHksIHhfY3RiLCB5X2N0Yiwgd2lkdGgsIGhl aWdodCwKKyAgICAgICAgICAgICAgICBwYWRkZWRfc3RyaWRlLCBzcmNfc3RyaWRlLCBjX2lkeCwg ZWRnZXMpOworICAgICAgICB9CisgICAgICAgIGlmIChhbGYtPmN0Yl9mbGFnW2NfaWR4XSkgewor ICAgICAgICAgICAgaWYgKCFjX2lkeCkgIHsKKyAgICAgICAgICAgICAgICBhbGZfZmlsdGVyX2x1 bWEobGMsIHNyYywgcGFkZGVkLCBzcmNfc3RyaWRlLCBwYWRkZWRfc3RyaWRlLCB4LCB5LAorICAg ICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCB5ICsgY3RiX3NpemVfdiAtIEFMRl9WQl9Q T1NfQUJPVkVfTFVNQSwgYWxmKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgYWxmX2ZpbHRlcl9jaHJvbWEobGMsIHNyYywgcGFkZGVkLCBzcmNfc3RyaWRlLCBwYWRkZWRf c3RyaWRlLCBjX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgY3RiX3Np emVfdiAtIEFMRl9WQl9QT1NfQUJPVkVfQ0hST01BLCBhbGYpOworICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgICAgIGlmIChjX2lkeCAmJiBhbGYtPmN0Yl9jY19pZGNbY19pZHggLSAxXSkg eworICAgICAgICAgICAgcGFkZGVkID0gbGMtPmFsZl9idWZmZXJfbHVtYSArIHBhZGRlZF9vZmZz ZXQ7CisgICAgICAgICAgICBhbGZfZmlsdGVyX2NjKGxjLCBzcmMsIHBhZGRlZCwgc3JjX3N0cmlk ZSwgcGFkZGVkX3N0cmlkZSwgY19pZHgsCisgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwg aHMsIHZzLCAoY3RiX3NpemVfdiA8PCB2cykgLSBBTEZfVkJfUE9TX0FCT1ZFX0xVTUEsIGFsZik7 CisgICAgICAgIH0KKworICAgICAgICBhbGYtPmFwcGxpZWRbY19pZHhdID0gMTsKKyAgICB9Cit9 CisKKwordm9pZCBmZl92dmNfbG1jc19maWx0ZXIoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywg Y29uc3QgaW50IHgsIGNvbnN0IGludCB5KQoreworICAgIGNvbnN0IFNsaWNlQ29udGV4dCAqc2Mg PSBsYy0+c2M7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYyA9IGxjLT5mYzsKKyAgICBj b25zdCBpbnQgY3RiX3NpemUgPSBmYy0+cHMuc3BzLT5jdGJfc2l6ZV95OworICAgIGNvbnN0IGlu dCB3aWR0aCAgICA9IEZGTUlOKGZjLT5wcy5wcHMtPndpZHRoICAtIHgsIGN0Yl9zaXplKTsKKyAg ICBjb25zdCBpbnQgaGVpZ2h0ICAgPSBGRk1JTihmYy0+cHMucHBzLT5oZWlnaHQgLSB5LCBjdGJf c2l6ZSk7CisgICAgdWludDhfdCAqZGF0YSAgICAgID0gZmMtPmZyYW1lLT5kYXRhW0xVTUFdICsg eSAqIGZjLT5mcmFtZS0+bGluZXNpemVbTFVNQV0gKyAoeCA8PCBmYy0+cHMuc3BzLT5waXhlbF9z aGlmdCk7CisgICAgaWYgKHNjLT5zaC5yLT5zaF9sbWNzX3VzZWRfZmxhZykKKyAgICAgICAgZmMt PnZ2Y2RzcC5sbWNzLmZpbHRlcihkYXRhLCBmYy0+ZnJhbWUtPmxpbmVzaXplW0xVTUFdLCB3aWR0 aCwgaGVpZ2h0LCBmYy0+cHMubG1jcy5pbnZfbHV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmF2Y29k ZWMvdnZjL3Z2Y19maWx0ZXIuaCBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19maWx0ZXIuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4yYWU0YzMzZTJkCi0tLSAvZGV2L251bGwK KysrIGIvbGliYXZjb2RlYy92dmMvdnZjX2ZpbHRlci5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisg KiBWVkMgZmlsdGVycworICoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBOdW8gTWkKKyAqCisgKgor ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog dmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog TGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0 d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v ciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisjaWZuZGVmIEFWQ09ERUNfVlZDX1ZW Q19GSUxURVJfSAorI2RlZmluZSBBVkNPREVDX1ZWQ19WVkNfRklMVEVSX0gKKworI2luY2x1ZGUg InZ2Y2RlYy5oIgorCisvKioKKyAqIGxtY3MgZmlsdGVyIGZvciB0aGUgQ1RVCisgKiBAcGFyYW0g bGMgbG9jYWwgY29udGV4dCBmb3IgQ1RVCisgKiBAcGFyYW0geDAgeCBwb3NpdGlvbiBmb3IgdGhl IENUVQorICogQHBhcmFtIHkwIHkgcG9zaXRpb24gZm9yIHRoZSBDVFUKKyAqLwordm9pZCBmZl92 dmNfbG1jc19maWx0ZXIoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgaW50IHgwLCBj b25zdCBpbnQgeTApOworCisvKioKKyAqIHZlcnRpY2FsIGRlYmxvY2sgZmlsdGVyIGZvciB0aGUg Q1RVCisgKiBAcGFyYW0gbGMgbG9jYWwgY29udGV4dCBmb3IgQ1RVCisgKiBAcGFyYW0geDAgeCBw b3NpdGlvbiBmb3IgdGhlIENUVQorICogQHBhcmFtIHkwIHkgcG9zaXRpb24gZm9yIHRoZSBDVFUK KyAqLwordm9pZCBmZl92dmNfZGVibG9ja192ZXJ0aWNhbChjb25zdCBWVkNMb2NhbENvbnRleHQg KmxjLCBpbnQgeDAsIGludCB5MCk7CisKKy8qKgorICogaG9yaXpvbnRhbCBkZWJsb2NrIGZpbHRl ciBmb3IgdGhlIENUVQorICogQHBhcmFtIGxjIGxvY2FsIGNvbnRleHQgZm9yIENUVQorICogQHBh cmFtIHgwIHggcG9zaXRpb24gZm9yIHRoZSBDVFUKKyAqIEBwYXJhbSB5MCB5IHBvc2l0aW9uIGZv ciB0aGUgQ1RVCisgKi8KK3ZvaWQgZmZfdnZjX2RlYmxvY2tfaG9yaXpvbnRhbChjb25zdCBWVkNM b2NhbENvbnRleHQgKmxjLCBpbnQgeDAsIGludCB5MCk7CisKKy8qKgorICogc2FvIGZpbHRlciBm b3IgdGhlIENUVQorICogQHBhcmFtIGxjIGxvY2FsIGNvbnRleHQgZm9yIENUVQorICogQHBhcmFt IHgwIHggcG9zaXRpb24gZm9yIHRoZSBDVFUKKyAqIEBwYXJhbSB5MCB5IHBvc2l0aW9uIGZvciB0 aGUgQ1RVCisgKi8KK3ZvaWQgZmZfdnZjX3Nhb19maWx0ZXIoVlZDTG9jYWxDb250ZXh0ICpsYywg Y29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTApOworCit2b2lkIGZmX3Z2Y19zYW9fY29weV9jdGJf dG9faHYoVlZDTG9jYWxDb250ZXh0KiBsYywgaW50IHJ4LCBpbnQgcnksIGludCBsYXN0X3Jvdyk7 Cit2b2lkIGZmX3Z2Y19hbGZfY29weV9jdHVfdG9faHYoVlZDTG9jYWxDb250ZXh0KiBsYywgaW50 IHgwLCBpbnQgeTApOworCisvKioKKyAqIGFsZiBmaWx0ZXIgZm9yIHRoZSBDVFUKKyAqIEBwYXJh bSBsYyBsb2NhbCBjb250ZXh0IGZvciBDVFUKKyAqIEBwYXJhbSB4MCB4IHBvc2l0aW9uIGZvciB0 aGUgQ1RVCisgKiBAcGFyYW0geTAgeSBwb3NpdGlvbiBmb3IgdGhlIENUVQorICovCit2b2lkIGZm X3Z2Y19hbGZfZmlsdGVyKFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCB4MCwgY29uc3Qg aW50IHkwKTsKKworI2VuZGlmIC8vIEFWQ09ERUNfVlZDX1ZWQ19DVFVfSApkaWZmIC0tZ2l0IGEv bGliYXZjb2RlYy92dmMvdnZjX2ZpbHRlcl90ZW1wbGF0ZS5jIGIvbGliYXZjb2RlYy92dmMvdnZj X2ZpbHRlcl90ZW1wbGF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LmE0ZjE3OTJlYzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmNvZGVjL3Z2Yy92dmNfZmlsdGVy X3RlbXBsYXRlLmMKQEAgLTAsMCArMSwxMTM1IEBACisvKgorICogVlZDIGZpbHRlcnMgRFNQCisg KgorICogQ29weXJpZ2h0IChDKSAyMDIyIE51byBNaQorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0 IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBM aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZG bXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBG Rm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24s IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAt MTMwMSBVU0EKKyAqLworCitzdGF0aWMgdm9pZCBGVU5DKGxtY3NfZmlsdGVyX2x1bWEpKHVpbnQ4 X3QgKl9kc3QsIHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGlu dCBoZWlnaHQsIGNvbnN0IHVpbnQ4X3QgKl9sdXQpCit7CisgICAgY29uc3QgcGl4ZWwgKmx1dCA9 IChjb25zdCBwaXhlbCAqKV9sdXQ7CisgICAgcGl4ZWwgKmRzdCA9IChwaXhlbCopX2RzdDsKKyAg ICBkc3Rfc3RyaWRlIC89IHNpemVvZihwaXhlbCk7CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8 IGhlaWdodDsgeSsrKSB7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK KyAgICAgICAgICAgIGRzdFt4XSA9IGx1dFtkc3RbeF1dOworICAgICAgICBkc3QgKz0gZHN0X3N0 cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMoc2FvX2JhbmRfZmlsdGVyKSh1aW50 OF90ICpfZHN0LCBjb25zdCB1aW50OF90ICpfc3JjLCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwgcHRy ZGlmZl90IHNyY19zdHJpZGUsCisgICAgY29uc3QgaW50MTZfdCAqc2FvX29mZnNldF92YWwsIGNv bnN0IGludCBzYW9fbGVmdF9jbGFzcywgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0 KQoreworICAgIHBpeGVsICpkc3QgICAgICAgPSAocGl4ZWwgKilfZHN0OworICAgIGNvbnN0IHBp eGVsICpzcmMgPSAocGl4ZWwgKilfc3JjOworICAgIGludCBvZmZzZXRfdGFibGVbMzJdID0geyAw IH07CisgICAgaW50IGssIHksIHg7CisgICAgaW50IHNoaWZ0ICA9IEJJVF9ERVBUSCAtIDU7CisK KyAgICBkc3Rfc3RyaWRlIC89IHNpemVvZihwaXhlbCk7CisgICAgc3JjX3N0cmlkZSAvPSBzaXpl b2YocGl4ZWwpOworCisgICAgZm9yIChrID0gMDsgayA8IDQ7IGsrKykKKyAgICAgICAgb2Zmc2V0 X3RhYmxlWyhrICsgc2FvX2xlZnRfY2xhc3MpICYgMzFdID0gc2FvX29mZnNldF92YWxbayArIDFd OworICAgIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAgICBmb3IgKHggPSAw OyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgICAgIGRzdFt4XSA9IGF2X2NsaXBfcGl4ZWwoc3Jj W3hdICsgb2Zmc2V0X3RhYmxlW3NyY1t4XSA+PiBzaGlmdF0pOworICAgICAgICBkc3QgKz0gZHN0 X3N0cmlkZTsKKyAgICAgICAgc3JjICs9IHNyY19zdHJpZGU7CisgICAgfQorfQorCisjZGVmaW5l IENNUChhLCBiKSAoKChhKSA+IChiKSkgLSAoKGEpIDwgKGIpKSkKKworc3RhdGljIHZvaWQgRlVO QyhzYW9fZWRnZV9maWx0ZXIpKHVpbnQ4X3QgKl9kc3QsIGNvbnN0IHVpbnQ4X3QgKl9zcmMsIHB0 cmRpZmZfdCBkc3Rfc3RyaWRlLAorICAgIGNvbnN0IGludDE2X3QgKnNhb19vZmZzZXRfdmFsLCBj b25zdCBpbnQgZW8sIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCkKK3sKKyAgICBz dGF0aWMgY29uc3QgdWludDhfdCBlZGdlX2lkeFtdID0geyAxLCAyLCAwLCAzLCA0IH07CisgICAg c3RhdGljIGNvbnN0IGludDhfdCBwb3NbNF1bMl1bMl0gPSB7CisgICAgICAgIHsgeyAtMSwgIDAg fSwgeyAgMSwgMCB9IH0sIC8vIGhvcml6b250YWwKKyAgICAgICAgeyB7ICAwLCAtMSB9LCB7ICAw LCAxIH0gfSwgLy8gdmVydGljYWwKKyAgICAgICAgeyB7IC0xLCAtMSB9LCB7ICAxLCAxIH0gfSwg Ly8gNDUgZGVncmVlCisgICAgICAgIHsgeyAgMSwgLTEgfSwgeyAtMSwgMSB9IH0sIC8vIDEzNSBk ZWdyZWUKKyAgICB9OworICAgIHBpeGVsICpkc3QgICAgICAgICAgPSAocGl4ZWwgKilfZHN0Owor ICAgIGNvbnN0IHBpeGVsICpzcmMgICAgPSAocGl4ZWwgKilfc3JjOworICAgIGludCBhX3N0cmlk ZSwgYl9zdHJpZGU7CisgICAgaW50IHgsIHk7CisgICAgcHRyZGlmZl90IHNyY19zdHJpZGUgPSAo MiAqIE1BWF9QQl9TSVpFICsgQVZfSU5QVVRfQlVGRkVSX1BBRERJTkdfU0laRSkgLyBzaXplb2Yo cGl4ZWwpOworICAgIGRzdF9zdHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsKKworICAgIGFfc3RyaWRl ID0gcG9zW2VvXVswXVswXSArIHBvc1tlb11bMF1bMV0gKiBzcmNfc3RyaWRlOworICAgIGJfc3Ry aWRlID0gcG9zW2VvXVsxXVswXSArIHBvc1tlb11bMV1bMV0gKiBzcmNfc3RyaWRlOworICAgIGZv ciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAgICBmb3IgKHggPSAwOyB4IDwgd2lk dGg7IHgrKykgeworICAgICAgICAgICAgaW50IGRpZmYwID0gQ01QKHNyY1t4XSwgc3JjW3ggKyBh X3N0cmlkZV0pOworICAgICAgICAgICAgaW50IGRpZmYxID0gQ01QKHNyY1t4XSwgc3JjW3ggKyBi X3N0cmlkZV0pOworICAgICAgICAgICAgaW50IG9mZnNldF92YWwgICAgICAgID0gZWRnZV9pZHhb MiArIGRpZmYwICsgZGlmZjFdOworICAgICAgICAgICAgZHN0W3hdID0gYXZfY2xpcF9waXhlbChz cmNbeF0gKyBzYW9fb2Zmc2V0X3ZhbFtvZmZzZXRfdmFsXSk7CisgICAgICAgIH0KKyAgICAgICAg c3JjICs9IHNyY19zdHJpZGU7CisgICAgICAgIGRzdCArPSBkc3Rfc3RyaWRlOworICAgIH0KK30K Kworc3RhdGljIHZvaWQgRlVOQyhzYW9fZWRnZV9yZXN0b3JlXzApKHVpbnQ4X3QgKl9kc3QsIGNv bnN0IHVpbnQ4X3QgKl9zcmMsCisgICAgcHRyZGlmZl90IGRzdF9zdHJpZGUsIHB0cmRpZmZfdCBz cmNfc3RyaWRlLCBjb25zdCBTQU9QYXJhbXMgKnNhbywKKyAgICBjb25zdCBpbnQgKmJvcmRlcnMs IGNvbnN0IGludCBfd2lkdGgsIGNvbnN0IGludCBfaGVpZ2h0LCBjb25zdCBpbnQgY19pZHgsCisg ICAgY29uc3QgdWludDhfdCAqdmVydF9lZGdlLCBjb25zdCB1aW50OF90ICpob3Jpel9lZGdlLCBj b25zdCB1aW50OF90ICpkaWFnX2VkZ2UpCit7CisgICAgaW50IHgsIHk7CisgICAgcGl4ZWwgKmRz dCAgICAgICAgICAgICAgICAgICAgICA9IChwaXhlbCAqKV9kc3Q7CisgICAgY29uc3QgcGl4ZWwg KnNyYyAgICAgICAgICAgICAgICA9IChwaXhlbCAqKV9zcmM7CisgICAgY29uc3QgaW50MTZfdCAq c2FvX29mZnNldF92YWwgICA9IHNhby0+b2Zmc2V0X3ZhbFtjX2lkeF07CisgICAgY29uc3QgaW50 IHNhb19lb19jbGFzcyAgICAgICAgICA9IHNhby0+ZW9fY2xhc3NbY19pZHhdOworICAgIGludCBp bml0X3ggPSAwLCB3aWR0aCA9IF93aWR0aCwgaGVpZ2h0ID0gX2hlaWdodDsKKworICAgIGRzdF9z dHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsKKyAgICBzcmNfc3RyaWRlIC89IHNpemVvZihwaXhlbCk7 CisKKyAgICBpZiAoc2FvX2VvX2NsYXNzICE9IFNBT19FT19WRVJUKSB7CisgICAgICAgIGlmIChi b3JkZXJzWzBdKSB7CisgICAgICAgICAgICBpbnQgb2Zmc2V0X3ZhbCA9IHNhb19vZmZzZXRfdmFs WzBdOworICAgICAgICAgICAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7CisgICAgICAg ICAgICAgICAgZHN0W3kgKiBkc3Rfc3RyaWRlXSA9IGF2X2NsaXBfcGl4ZWwoc3JjW3kgKiBzcmNf c3RyaWRlXSArIG9mZnNldF92YWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5pdF94 ID0gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYm9yZGVyc1syXSkgeworICAgICAgICAgICAg aW50IG9mZnNldF92YWwgPSBzYW9fb2Zmc2V0X3ZhbFswXTsKKyAgICAgICAgICAgIGludCBvZmZz ZXQgICAgID0gd2lkdGggLSAxOworICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IGhlaWdodDsg eCsrKSB7CisgICAgICAgICAgICAgICAgZHN0W3ggKiBkc3Rfc3RyaWRlICsgb2Zmc2V0XSA9IGF2 X2NsaXBfcGl4ZWwoc3JjW3ggKiBzcmNfc3RyaWRlICsgb2Zmc2V0XSArIG9mZnNldF92YWwpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgd2lkdGgtLTsKKyAgICAgICAgfQorICAgIH0KKyAg ICBpZiAoc2FvX2VvX2NsYXNzICE9IFNBT19FT19IT1JJWikgeworICAgICAgICBpZiAoYm9yZGVy c1sxXSkgeworICAgICAgICAgICAgaW50IG9mZnNldF92YWwgPSBzYW9fb2Zmc2V0X3ZhbFswXTsK KyAgICAgICAgICAgIGZvciAoeCA9IGluaXRfeDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgICAg ICAgICAgZHN0W3hdID0gYXZfY2xpcF9waXhlbChzcmNbeF0gKyBvZmZzZXRfdmFsKTsKKyAgICAg ICAgfQorICAgICAgICBpZiAoYm9yZGVyc1szXSkgeworICAgICAgICAgICAgaW50IG9mZnNldF92 YWwgICA9IHNhb19vZmZzZXRfdmFsWzBdOworICAgICAgICAgICAgcHRyZGlmZl90IHlfZHN0X3N0 cmlkZSA9IGRzdF9zdHJpZGUgKiAoaGVpZ2h0IC0gMSk7CisgICAgICAgICAgICBwdHJkaWZmX3Qg eV9zcmNfc3RyaWRlID0gc3JjX3N0cmlkZSAqIChoZWlnaHQgLSAxKTsKKyAgICAgICAgICAgIGZv ciAoeCA9IGluaXRfeDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgICAgICAgICAgZHN0W3ggKyB5 X2RzdF9zdHJpZGVdID0gYXZfY2xpcF9waXhlbChzcmNbeCArIHlfc3JjX3N0cmlkZV0gKyBvZmZz ZXRfdmFsKTsKKyAgICAgICAgICAgIGhlaWdodC0tOworICAgICAgICB9CisgICAgfQorfQorCitz dGF0aWMgdm9pZCBGVU5DKHNhb19lZGdlX3Jlc3RvcmVfMSkodWludDhfdCAqX2RzdCwgY29uc3Qg dWludDhfdCAqX3NyYywKKyAgICBwdHJkaWZmX3QgZHN0X3N0cmlkZSwgcHRyZGlmZl90IHNyY19z dHJpZGUsIGNvbnN0IFNBT1BhcmFtcyAqc2FvLAorICAgIGNvbnN0IGludCAqYm9yZGVycywgY29u c3QgaW50IF93aWR0aCwgY29uc3QgaW50IF9oZWlnaHQsIGNvbnN0IGludCBjX2lkeCwKKyAgICBj b25zdCB1aW50OF90ICp2ZXJ0X2VkZ2UsIGNvbnN0IHVpbnQ4X3QgKmhvcml6X2VkZ2UsIGNvbnN0 IHVpbnQ4X3QgKmRpYWdfZWRnZSkKK3sKKyAgICBpbnQgeCwgeTsKKyAgICBwaXhlbCAqZHN0ICAg ICAgICAgICAgICAgICAgICAgID0gKHBpeGVsICopX2RzdDsKKyAgICBjb25zdCBwaXhlbCAqc3Jj ICAgICAgICAgICAgICAgID0gKHBpeGVsICopX3NyYzsKKyAgICBjb25zdCBpbnQxNl90ICpzYW9f b2Zmc2V0X3ZhbCAgID0gc2FvLT5vZmZzZXRfdmFsW2NfaWR4XTsKKyAgICBjb25zdCBpbnQgc2Fv X2VvX2NsYXNzICAgICAgICAgID0gc2FvLT5lb19jbGFzc1tjX2lkeF07CisgICAgaW50IGluaXRf eCA9IDAsIGluaXRfeSA9IDAsIHdpZHRoID0gX3dpZHRoLCBoZWlnaHQgPSBfaGVpZ2h0OworCisg ICAgZHN0X3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOworICAgIHNyY19zdHJpZGUgLz0gc2l6ZW9m KHBpeGVsKTsKKworICAgIGlmIChzYW9fZW9fY2xhc3MgIT0gU0FPX0VPX1ZFUlQpIHsKKyAgICAg ICAgaWYgKGJvcmRlcnNbMF0pIHsKKyAgICAgICAgICAgIGludCBvZmZzZXRfdmFsID0gc2FvX29m ZnNldF92YWxbMF07CisgICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsK KyAgICAgICAgICAgICAgICBkc3RbeSAqIGRzdF9zdHJpZGVdID0gYXZfY2xpcF9waXhlbChzcmNb eSAqIHNyY19zdHJpZGVdICsgb2Zmc2V0X3ZhbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBpbml0X3ggPSAxOworICAgICAgICB9CisgICAgICAgIGlmIChib3JkZXJzWzJdKSB7CisgICAg ICAgICAgICBpbnQgb2Zmc2V0X3ZhbCA9IHNhb19vZmZzZXRfdmFsWzBdOworICAgICAgICAgICAg aW50IG9mZnNldCAgICAgPSB3aWR0aCAtIDE7CisgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwg aGVpZ2h0OyB4KyspIHsKKyAgICAgICAgICAgICAgICBkc3RbeCAqIGRzdF9zdHJpZGUgKyBvZmZz ZXRdID0gYXZfY2xpcF9waXhlbChzcmNbeCAqIHNyY19zdHJpZGUgKyBvZmZzZXRdICsgb2Zmc2V0 X3ZhbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aWR0aC0tOworICAgICAgICB9Cisg ICAgfQorICAgIGlmIChzYW9fZW9fY2xhc3MgIT0gU0FPX0VPX0hPUklaKSB7CisgICAgICAgIGlm IChib3JkZXJzWzFdKSB7CisgICAgICAgICAgICBpbnQgb2Zmc2V0X3ZhbCA9IHNhb19vZmZzZXRf dmFsWzBdOworICAgICAgICAgICAgZm9yICh4ID0gaW5pdF94OyB4IDwgd2lkdGg7IHgrKykKKyAg ICAgICAgICAgICAgICBkc3RbeF0gPSBhdl9jbGlwX3BpeGVsKHNyY1t4XSArIG9mZnNldF92YWwp OworICAgICAgICAgICAgaW5pdF95ID0gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYm9yZGVy c1szXSkgeworICAgICAgICAgICAgaW50IG9mZnNldF92YWwgICA9IHNhb19vZmZzZXRfdmFsWzBd OworICAgICAgICAgICAgcHRyZGlmZl90IHlfZHN0X3N0cmlkZSA9IGRzdF9zdHJpZGUgKiAoaGVp Z2h0IC0gMSk7CisgICAgICAgICAgICBwdHJkaWZmX3QgeV9zcmNfc3RyaWRlID0gc3JjX3N0cmlk ZSAqIChoZWlnaHQgLSAxKTsKKyAgICAgICAgICAgIGZvciAoeCA9IGluaXRfeDsgeCA8IHdpZHRo OyB4KyspCisgICAgICAgICAgICAgICAgZHN0W3ggKyB5X2RzdF9zdHJpZGVdID0gYXZfY2xpcF9w aXhlbChzcmNbeCArIHlfc3JjX3N0cmlkZV0gKyBvZmZzZXRfdmFsKTsKKyAgICAgICAgICAgIGhl aWdodC0tOworICAgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgICBpbnQgc2F2ZV91cHBl cl9sZWZ0ICA9ICFkaWFnX2VkZ2VbMF0gJiYgc2FvX2VvX2NsYXNzID09IFNBT19FT18xMzVEICYm ICFib3JkZXJzWzBdICYmICFib3JkZXJzWzFdOworICAgICAgICBpbnQgc2F2ZV91cHBlcl9yaWdo dCA9ICFkaWFnX2VkZ2VbMV0gJiYgc2FvX2VvX2NsYXNzID09IFNBT19FT180NUQgICYmICFib3Jk ZXJzWzFdICYmICFib3JkZXJzWzJdOworICAgICAgICBpbnQgc2F2ZV9sb3dlcl9yaWdodCA9ICFk aWFnX2VkZ2VbMl0gJiYgc2FvX2VvX2NsYXNzID09IFNBT19FT18xMzVEICYmICFib3JkZXJzWzJd ICYmICFib3JkZXJzWzNdOworICAgICAgICBpbnQgc2F2ZV9sb3dlcl9sZWZ0ICA9ICFkaWFnX2Vk Z2VbM10gJiYgc2FvX2VvX2NsYXNzID09IFNBT19FT180NUQgICYmICFib3JkZXJzWzBdICYmICFi b3JkZXJzWzNdOworCisgICAgICAgIC8vIFJlc3RvcmUgcGl4ZWxzIHRoYXQgY2FuJ3QgYmUgbW9k aWZpZWQKKyAgICAgICAgaWYgKHZlcnRfZWRnZVswXSAmJiBzYW9fZW9fY2xhc3MgIT0gU0FPX0VP X1ZFUlQpIHsKKyAgICAgICAgICAgIGZvciAoeSA9IGluaXRfeSArIHNhdmVfdXBwZXJfbGVmdDsg eSA8IGhlaWdodCAtIHNhdmVfbG93ZXJfbGVmdDsgeSsrKQorICAgICAgICAgICAgICAgIGRzdFt5 ICogZHN0X3N0cmlkZV0gPSBzcmNbeSAqIHNyY19zdHJpZGVdOworICAgICAgICB9CisgICAgICAg IGlmICh2ZXJ0X2VkZ2VbMV0gJiYgc2FvX2VvX2NsYXNzICE9IFNBT19FT19WRVJUKSB7CisgICAg ICAgICAgICBmb3IgKHkgPSBpbml0X3kgKyBzYXZlX3VwcGVyX3JpZ2h0OyB5IDwgaGVpZ2h0IC0g c2F2ZV9sb3dlcl9yaWdodDsgeSsrKQorICAgICAgICAgICAgICAgIGRzdFt5ICogZHN0X3N0cmlk ZSArIHdpZHRoIC0gMV0gPSBzcmNbeSAqIHNyY19zdHJpZGUgKyB3aWR0aCAtIDFdOworICAgICAg ICB9CisKKyAgICAgICAgaWYgKGhvcml6X2VkZ2VbMF0gJiYgc2FvX2VvX2NsYXNzICE9IFNBT19F T19IT1JJWikgeworICAgICAgICAgICAgZm9yICh4ID0gaW5pdF94ICsgc2F2ZV91cHBlcl9sZWZ0 OyB4IDwgd2lkdGggLSBzYXZlX3VwcGVyX3JpZ2h0OyB4KyspCisgICAgICAgICAgICAgICAgZHN0 W3hdID0gc3JjW3hdOworICAgICAgICB9CisgICAgICAgIGlmIChob3Jpel9lZGdlWzFdICYmIHNh b19lb19jbGFzcyAhPSBTQU9fRU9fSE9SSVopIHsKKyAgICAgICAgICAgIGZvciAoeCA9IGluaXRf eCArIHNhdmVfbG93ZXJfbGVmdDsgeCA8IHdpZHRoIC0gc2F2ZV9sb3dlcl9yaWdodDsgeCsrKQor ICAgICAgICAgICAgICAgIGRzdFsoaGVpZ2h0IC0gMSkgKiBkc3Rfc3RyaWRlICsgeF0gPSBzcmNb KGhlaWdodCAtIDEpICogc3JjX3N0cmlkZSArIHhdOworICAgICAgICB9CisgICAgICAgIGlmIChk aWFnX2VkZ2VbMF0gJiYgc2FvX2VvX2NsYXNzID09IFNBT19FT18xMzVEKQorICAgICAgICAgICAg ZHN0WzBdID0gc3JjWzBdOworICAgICAgICBpZiAoZGlhZ19lZGdlWzFdICYmIHNhb19lb19jbGFz cyA9PSBTQU9fRU9fNDVEKQorICAgICAgICAgICAgZHN0W3dpZHRoIC0gMV0gPSBzcmNbd2lkdGgg LSAxXTsKKyAgICAgICAgaWYgKGRpYWdfZWRnZVsyXSAmJiBzYW9fZW9fY2xhc3MgPT0gU0FPX0VP XzEzNUQpCisgICAgICAgICAgICBkc3RbZHN0X3N0cmlkZSAqIChoZWlnaHQgLSAxKSArIHdpZHRo IC0gMV0gPSBzcmNbc3JjX3N0cmlkZSAqIChoZWlnaHQgLSAxKSArIHdpZHRoIC0gMV07CisgICAg ICAgIGlmIChkaWFnX2VkZ2VbM10gJiYgc2FvX2VvX2NsYXNzID09IFNBT19FT180NUQpCisgICAg ICAgICAgICBkc3RbZHN0X3N0cmlkZSAqIChoZWlnaHQgLSAxKV0gPSBzcmNbc3JjX3N0cmlkZSAq IChoZWlnaHQgLSAxKV07CisKKyAgICB9Cit9CisKKyN1bmRlZiBDTVAKKworc3RhdGljIGF2X2Fs d2F5c19pbmxpbmUgaW50MTZfdCBGVU5DKGFsZl9jbGlwKShwaXhlbCBjdXJyLCBwaXhlbCB2MCwg cGl4ZWwgdjEsIGludDE2X3QgY2xpcCkKK3sKKyAgICByZXR1cm4gYXZfY2xpcCh2MCAtIGN1cnIs IC1jbGlwLCBjbGlwKSArIGF2X2NsaXAodjEgLSBjdXJyLCAtY2xpcCwgY2xpcCk7Cit9CisKK3N0 YXRpYyB2b2lkIEZVTkMoYWxmX2ZpbHRlcl9sdW1hKSh1aW50OF90ICpfZHN0LCBwdHJkaWZmX3Qg ZHN0X3N0cmlkZSwgY29uc3QgdWludDhfdCAqX3NyYywgcHRyZGlmZl90IHNyY19zdHJpZGUsCisg ICAgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0LCBjb25zdCBpbnQxNl90ICpmaWx0 ZXIsIGNvbnN0IGludDE2X3QgKmNsaXAsIGNvbnN0IGludCB2Yl9wb3MpCit7CisgICAgY29uc3Qg cGl4ZWwgKnNyYyAgICA9IChwaXhlbCAqKV9zcmM7CisgICAgY29uc3QgaW50IHNoaWZ0ICAgICA9 IDc7CisgICAgY29uc3QgaW50IG9mZnNldCAgICA9IDEgPDwgKCBzaGlmdCAtIDEgKTsKKyAgICBj b25zdCBpbnQgdmJfYWJvdmUgID0gdmJfcG9zIC0gNDsKKyAgICBjb25zdCBpbnQgdmJfYmVsb3cg ID0gdmJfcG9zICsgMzsKKworICAgIGRzdF9zdHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsKKyAgICBz cmNfc3RyaWRlIC89IHNpemVvZihwaXhlbCk7CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl aWdodDsgeSArPSBBTEZfQkxPQ0tfU0laRSkgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8 IHdpZHRoOyB4ICs9IEFMRl9CTE9DS19TSVpFKSB7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAq czAgPSBzcmMgKyB5ICogc3JjX3N0cmlkZSArIHg7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAq czEgPSBzMCArIHNyY19zdHJpZGU7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczIgPSBzMCAt IHNyY19zdHJpZGU7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczMgPSBzMSArIHNyY19zdHJp ZGU7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczQgPSBzMiAtIHNyY19zdHJpZGU7CisgICAg ICAgICAgICBjb25zdCBwaXhlbCAqczUgPSBzMyArIHNyY19zdHJpZGU7CisgICAgICAgICAgICBj b25zdCBwaXhlbCAqczYgPSBzNCAtIHNyY19zdHJpZGU7CisKKyAgICAgICAgICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgQUxGX0JMT0NLX1NJWkU7IGkrKykgeworICAgICAgICAgICAgICAgIHBpeGVs ICpkc3QgPSAocGl4ZWwgKilfZHN0ICsgKHkgKyBpKSAqIGRzdF9zdHJpZGUgKyB4OworCisgICAg ICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAwID0gczAgKyBpICogc3JjX3N0cmlkZTsKKyAgICAg ICAgICAgICAgICBjb25zdCBwaXhlbCAqcDEgPSBzMSArIGkgKiBzcmNfc3RyaWRlOworICAgICAg ICAgICAgICAgIGNvbnN0IHBpeGVsICpwMiA9IHMyICsgaSAqIHNyY19zdHJpZGU7CisgICAgICAg ICAgICAgICAgY29uc3QgcGl4ZWwgKnAzID0gczMgKyBpICogc3JjX3N0cmlkZTsKKyAgICAgICAg ICAgICAgICBjb25zdCBwaXhlbCAqcDQgPSBzNCArIGkgKiBzcmNfc3RyaWRlOworICAgICAgICAg ICAgICAgIGNvbnN0IHBpeGVsICpwNSA9IHM1ICsgaSAqIHNyY19zdHJpZGU7CisgICAgICAgICAg ICAgICAgY29uc3QgcGl4ZWwgKnA2ID0gczYgKyBpICogc3JjX3N0cmlkZTsKKworICAgICAgICAg ICAgICAgIGNvbnN0IGludCBpc19uZWFyX3ZiX2Fib3ZlID0gKHkgKyBpIDwgIHZiX3BvcykgJiYg KHkgKyBpID49IHZiX3BvcyAtIDEpOworICAgICAgICAgICAgICAgIGNvbnN0IGludCBpc19uZWFy X3ZiX2JlbG93ID0gKHkgKyBpID49IHZiX3BvcykgJiYgKHkgKyBpIDw9IHZiX3Bvcyk7CisgICAg ICAgICAgICAgICAgY29uc3QgaW50IGlzX25lYXJfdmIgPSBpc19uZWFyX3ZiX2Fib3ZlIHx8IGlz X25lYXJfdmJfYmVsb3c7CisKKyAgICAgICAgICAgICAgICBpZiAoKHkgKyBpIDwgdmJfcG9zKSAm JiAoKHkgKyBpKSA+PSB2Yl9hYm92ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcDEgPSAoeSAr IGkgPT0gdmJfcG9zIC0gMSkgPyBwMCA6IHAxOworICAgICAgICAgICAgICAgICAgICBwMyA9ICh5 ICsgaSA+PSB2Yl9wb3MgLSAyKSA/IHAxIDogcDM7CisgICAgICAgICAgICAgICAgICAgIHA1ID0g KHkgKyBpID49IHZiX3BvcyAtIDMpID8gcDMgOiBwNTsKKworICAgICAgICAgICAgICAgICAgICBw MiA9ICh5ICsgaSA9PSB2Yl9wb3MgLSAxKSA/IHAwIDogcDI7CisgICAgICAgICAgICAgICAgICAg IHA0ID0gKHkgKyBpID49IHZiX3BvcyAtIDIpID8gcDIgOiBwNDsKKyAgICAgICAgICAgICAgICAg ICAgcDYgPSAoeSArIGkgPj0gdmJfcG9zIC0gMykgPyBwNCA6IHA2OworICAgICAgICAgICAgICAg IH0gZWxzZSBpZiAoKHkgKyBpID49IHZiX3BvcykgJiYgKCh5ICsgaSkgPD0gdmJfYmVsb3cpKSB7 CisgICAgICAgICAgICAgICAgICAgIHAyID0gKHkgKyBpID09IHZiX3BvcyAgICApID8gcDAgOiBw MjsKKyAgICAgICAgICAgICAgICAgICAgcDQgPSAoeSArIGkgPD0gdmJfcG9zICsgMSkgPyBwMiA6 IHA0OworICAgICAgICAgICAgICAgICAgICBwNiA9ICh5ICsgaSA8PSB2Yl9wb3MgKyAyKSA/IHA0 IDogcDY7CisKKyAgICAgICAgICAgICAgICAgICAgcDEgPSAoeSArIGkgPT0gdmJfcG9zICAgICkg PyBwMCA6IHAxOworICAgICAgICAgICAgICAgICAgICBwMyA9ICh5ICsgaSA8PSB2Yl9wb3MgKyAx KSA/IHAxIDogcDM7CisgICAgICAgICAgICAgICAgICAgIHA1ID0gKHkgKyBpIDw9IHZiX3BvcyAr IDIpID8gcDMgOiBwNTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmb3Ig KGludCBqID0gMDsgaiA8IEFMRl9CTE9DS19TSVpFOyBqKyspIHsKKyAgICAgICAgICAgICAgICAg ICAgaW50IHN1bSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsIGN1cnIgPSAq cDA7CisKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlclswXSAgKiBGVU5DKGFsZl9j bGlwKShjdXJyLCBwNVsrMF0sIHA2WyswXSwgY2xpcFswXSk7CisgICAgICAgICAgICAgICAgICAg IHN1bSArPSBmaWx0ZXJbMV0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDNbKzFdLCBwNFstMV0s IGNsaXBbMV0pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzJdICAqIEZVTkMo YWxmX2NsaXApKGN1cnIsIHAzWyswXSwgcDRbKzBdLCBjbGlwWzJdKTsKKyAgICAgICAgICAgICAg ICAgICAgc3VtICs9IGZpbHRlclszXSAgKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwM1stMV0sIHA0 WysxXSwgY2xpcFszXSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbNF0gICog RlVOQyhhbGZfY2xpcCkoY3VyciwgcDFbKzJdLCBwMlstMl0sIGNsaXBbNF0pOworICAgICAgICAg ICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzVdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAxWysx XSwgcDJbLTFdLCBjbGlwWzVdKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlcls2 XSAgKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwMVsrMF0sIHAyWyswXSwgY2xpcFs2XSk7CisgICAg ICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbN10gICogRlVOQyhhbGZfY2xpcCkoY3Vyciwg cDFbLTFdLCBwMlsrMV0sIGNsaXBbN10pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmls dGVyWzhdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAxWy0yXSwgcDJbKzJdLCBjbGlwWzhdKTsK KyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlcls5XSAgKiBGVU5DKGFsZl9jbGlwKShj dXJyLCBwMFsrM10sIHAwWy0zXSwgY2xpcFs5XSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSAr PSBmaWx0ZXJbMTBdICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDBbKzJdLCBwMFstMl0sIGNsaXBb MTBdKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlclsxMV0gKiBGVU5DKGFsZl9j bGlwKShjdXJyLCBwMFsrMV0sIHAwWy0xXSwgY2xpcFsxMV0pOworCisgICAgICAgICAgICAgICAg ICAgIGlmICghaXNfbmVhcl92YikKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1bSA9IChzdW0g KyBvZmZzZXQpID4+IHNoaWZ0OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg ICAgICAgICAgICAgICBzdW0gPSAoc3VtICsgKDEgPDwgKChzaGlmdCArIDMpIC0gMSkpKSA+PiAo c2hpZnQgKyAzKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGN1cnI7CisgICAgICAgICAg ICAgICAgICAgIGRzdFtqXSA9IENMSVAoc3VtKTsKKworICAgICAgICAgICAgICAgICAgICBwMCsr OworICAgICAgICAgICAgICAgICAgICBwMSsrOworICAgICAgICAgICAgICAgICAgICBwMisrOwor ICAgICAgICAgICAgICAgICAgICBwMysrOworICAgICAgICAgICAgICAgICAgICBwNCsrOworICAg ICAgICAgICAgICAgICAgICBwNSsrOworICAgICAgICAgICAgICAgICAgICBwNisrOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbHRlciArPSBBTEZfTlVN X0NPRUZGX0xVTUE7CisgICAgICAgICAgICBjbGlwICs9IEFMRl9OVU1fQ09FRkZfTFVNQTsKKyAg ICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgRlVOQyhhbGZfZmlsdGVyX2Nocm9tYSko dWludDhfdCogX2RzdCwgcHRyZGlmZl90IGRzdF9zdHJpZGUsIGNvbnN0IHVpbnQ4X3QqIF9zcmMs IHB0cmRpZmZfdCBzcmNfc3RyaWRlLAorICAgIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhl aWdodCwgY29uc3QgaW50MTZfdCogZmlsdGVyLCBjb25zdCBpbnQxNl90KiBjbGlwLCBjb25zdCBp bnQgdmJfcG9zKQoreworICAgIGNvbnN0IHBpeGVsICpzcmMgPSAocGl4ZWwgKilfc3JjOworICAg IGNvbnN0IGludCBzaGlmdCAgPSA3OworICAgIGNvbnN0IGludCBvZmZzZXQgPSAxIDw8ICggc2hp ZnQgLSAxICk7CisgICAgY29uc3QgaW50IHZiX2Fib3ZlICA9IHZiX3BvcyAtIDI7CisgICAgY29u c3QgaW50IHZiX2JlbG93ICA9IHZiX3BvcyArIDE7CisKKyAgICBkc3Rfc3RyaWRlIC89IHNpemVv ZihwaXhlbCk7CisgICAgc3JjX3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOworCisgICAgZm9yIChp bnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkgKz0gQUxGX0JMT0NLX1NJWkUpIHsKKyAgICAgICAgZm9y IChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCArPSBBTEZfQkxPQ0tfU0laRSkgeworICAgICAgICAg ICAgY29uc3QgcGl4ZWwgKnMwID0gc3JjICsgeSAqIHNyY19zdHJpZGUgKyB4OworICAgICAgICAg ICAgY29uc3QgcGl4ZWwgKnMxID0gczAgKyBzcmNfc3RyaWRlOworICAgICAgICAgICAgY29uc3Qg cGl4ZWwgKnMyID0gczAgLSBzcmNfc3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnMz ID0gczEgKyBzcmNfc3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnM0ID0gczIgLSBz cmNfc3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnM1ID0gczMgKyBzcmNfc3RyaWRl OworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnM2ID0gczQgLSBzcmNfc3RyaWRlOworCisgICAg ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IEFMRl9CTE9DS19TSVpFOyBpKyspIHsKKyAgICAg ICAgICAgICAgICBwaXhlbCAqZHN0ID0gKHBpeGVsICopX2RzdCArICh5ICsgaSkgKiBkc3Rfc3Ry aWRlICsgeDsKKworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwMCA9IHMwICsgaSAqIHNy Y19zdHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAxID0gczEgKyBpICogc3Jj X3N0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDIgPSBzMiArIGkgKiBzcmNf c3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwMyA9IHMzICsgaSAqIHNyY19z dHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnA0ID0gczQgKyBpICogc3JjX3N0 cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDUgPSBzNSArIGkgKiBzcmNfc3Ry aWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwNiA9IHM2ICsgaSAqIHNyY19zdHJp ZGU7CisKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgaXNfbmVhcl92Yl9hYm92ZSA9ICh5ICsg aSA8ICB2Yl9wb3MpICYmICh5ICsgaSA+PSB2Yl9wb3MgLSAxKTsKKyAgICAgICAgICAgICAgICBj b25zdCBpbnQgaXNfbmVhcl92Yl9iZWxvdyA9ICh5ICsgaSA+PSB2Yl9wb3MpICYmICh5ICsgaSA8 PSB2Yl9wb3MpOworICAgICAgICAgICAgICAgIGNvbnN0IGludCBpc19uZWFyX3ZiID0gaXNfbmVh cl92Yl9hYm92ZSB8fCBpc19uZWFyX3ZiX2JlbG93OworCisgICAgICAgICAgICAgICAgaWYgKCh5 ICsgaSA8IHZiX3BvcykgJiYgKCh5ICsgaSkgPj0gdmJfYWJvdmUpKSB7CisgICAgICAgICAgICAg ICAgICAgIHAxID0gKHkgKyBpID09IHZiX3BvcyAtIDEpID8gcDAgOiBwMTsKKyAgICAgICAgICAg ICAgICAgICAgcDMgPSAoeSArIGkgPj0gdmJfcG9zIC0gMikgPyBwMSA6IHAzOworICAgICAgICAg ICAgICAgICAgICBwNSA9ICh5ICsgaSA+PSB2Yl9wb3MgLSAzKSA/IHAzIDogcDU7CisKKyAgICAg ICAgICAgICAgICAgICAgcDIgPSAoeSArIGkgPT0gdmJfcG9zIC0gMSkgPyBwMCA6IHAyOworICAg ICAgICAgICAgICAgICAgICBwNCA9ICh5ICsgaSA+PSB2Yl9wb3MgLSAyKSA/IHAyIDogcDQ7Cisg ICAgICAgICAgICAgICAgICAgIHA2ID0gKHkgKyBpID49IHZiX3BvcyAtIDMpID8gcDQgOiBwNjsK KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCh5ICsgaSA+PSB2Yl9wb3MpICYmICgoeSArIGkp IDw9IHZiX2JlbG93KSkgeworICAgICAgICAgICAgICAgICAgICBwMiA9ICh5ICsgaSA9PSB2Yl9w b3MgICAgKSA/IHAwIDogcDI7CisgICAgICAgICAgICAgICAgICAgIHA0ID0gKHkgKyBpIDw9IHZi X3BvcyArIDEpID8gcDIgOiBwNDsKKyAgICAgICAgICAgICAgICAgICAgcDYgPSAoeSArIGkgPD0g dmJfcG9zICsgMikgPyBwNCA6IHA2OworCisgICAgICAgICAgICAgICAgICAgIHAxID0gKHkgKyBp ID09IHZiX3BvcyAgICApID8gcDAgOiBwMTsKKyAgICAgICAgICAgICAgICAgICAgcDMgPSAoeSAr IGkgPD0gdmJfcG9zICsgMSkgPyBwMSA6IHAzOworICAgICAgICAgICAgICAgICAgICBwNSA9ICh5 ICsgaSA8PSB2Yl9wb3MgKyAyKSA/IHAzIDogcDU7CisgICAgICAgICAgICAgICAgfQorCisgICAg ICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBBTEZfQkxPQ0tfU0laRTsgaisrKSB7Cisg ICAgICAgICAgICAgICAgICAgIGludCBzdW0gPSAwOworICAgICAgICAgICAgICAgICAgICBjb25z dCBwaXhlbCBjdXJyID0gKnAwOworCisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJb MF0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDNbKzBdLCBwNFsrMF0sIGNsaXBbMF0pOworICAg ICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzFdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIs IHAxWysxXSwgcDJbLTFdLCBjbGlwWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZp bHRlclsyXSAgKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwMVsrMF0sIHAyWyswXSwgY2xpcFsyXSk7 CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbM10gICogRlVOQyhhbGZfY2xpcCko Y3VyciwgcDFbLTFdLCBwMlsrMV0sIGNsaXBbM10pOworICAgICAgICAgICAgICAgICAgICBzdW0g Kz0gZmlsdGVyWzRdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAwWysyXSwgcDBbLTJdLCBjbGlw WzRdKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlcls1XSAgKiBGVU5DKGFsZl9j bGlwKShjdXJyLCBwMFsrMV0sIHAwWy0xXSwgY2xpcFs1XSk7CisKKyAgICAgICAgICAgICAgICAg ICAgaWYgKCFpc19uZWFyX3ZiKQorICAgICAgICAgICAgICAgICAgICAgICAgc3VtID0gKHN1bSAr IG9mZnNldCkgPj4gc2hpZnQ7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg ICAgICAgICAgICAgIHN1bSA9IChzdW0gKyAoMSA8PCAoKHNoaWZ0ICsgMykgLSAxKSkpID4+IChz aGlmdCArIDMpOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gY3VycjsKKyAgICAgICAgICAg ICAgICAgICAgZHN0W2pdID0gQ0xJUChzdW0pOworCisgICAgICAgICAgICAgICAgICAgIHAwKys7 CisgICAgICAgICAgICAgICAgICAgIHAxKys7CisgICAgICAgICAgICAgICAgICAgIHAyKys7Cisg ICAgICAgICAgICAgICAgICAgIHAzKys7CisgICAgICAgICAgICAgICAgICAgIHA0Kys7CisgICAg ICAgICAgICAgICAgICAgIHA1Kys7CisgICAgICAgICAgICAgICAgICAgIHA2Kys7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMg dm9pZCBGVU5DKGFsZl9maWx0ZXJfY2MpKHVpbnQ4X3QgKl9kc3QsIHB0cmRpZmZfdCBkc3Rfc3Ry aWRlLCBjb25zdCB1aW50OF90ICpfbHVtYSwgY29uc3QgcHRyZGlmZl90IGx1bWFfc3RyaWRlLAor ICAgIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwgY29uc3QgaW50IGhzLCBjb25z dCBpbnQgdnMsIGNvbnN0IGludDE2X3QgKmZpbHRlciwgY29uc3QgaW50IHZiX3BvcykKK3sKKyAg ICBjb25zdCBwdHJkaWZmX3Qgc3RyaWRlID0gbHVtYV9zdHJpZGUgLyBzaXplb2YocGl4ZWwpOwor CisgICAgZHN0X3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOworCisgICAgZm9yIChpbnQgeSA9IDA7 IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4 KyspIHsKKyAgICAgICAgICAgIGludCBzdW0gPSAwOworICAgICAgICAgICAgcGl4ZWwgKmRzdCAg PSAocGl4ZWwgKilfZHN0ICArIHkgKiBkc3Rfc3RyaWRlICsgeDsKKyAgICAgICAgICAgIGNvbnN0 IHBpeGVsICpzcmMgID0gKHBpeGVsICopX2x1bWEgKyAoeSA8PCB2cykgKiBzdHJpZGUgKyAoeCA8 PCBocyk7CisKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzMCA9IHNyYyAtIHN0cmlkZTsKKyAg ICAgICAgICAgIGNvbnN0IHBpeGVsICpzMSA9IHNyYzsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVs ICpzMiA9IHNyYyArIHN0cmlkZTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzMyA9IHNyYyAr IDIgKiBzdHJpZGU7CisKKyAgICAgICAgICAgIGNvbnN0IGludCBwb3MgPSB5IDw8IHZzOworICAg ICAgICAgICAgaWYgKCF2cyAmJiAocG9zID09IHZiX3BvcyB8fCBwb3MgPT0gdmJfcG9zICsgMSkp CisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChwb3MgPT0gKHZi X3BvcyAtIDIpIHx8IHBvcyA9PSAodmJfcG9zICsgMSkpCisgICAgICAgICAgICAgICAgczMgPSBz MjsKKyAgICAgICAgICAgIGVsc2UgIGlmIChwb3MgPT0gKHZiX3BvcyAtIDEpIHx8IHBvcyA9PSB2 Yl9wb3MpCisgICAgICAgICAgICAgICAgczMgPSBzMiA9IHMwID0gczE7CisKKworICAgICAgICAg ICAgc3VtICs9IGZpbHRlclswXSAqICgqczAgLSAqc3JjKTsKKyAgICAgICAgICAgIHN1bSArPSBm aWx0ZXJbMV0gKiAoKihzMSAtIDEpIC0gKnNyYyk7CisgICAgICAgICAgICBzdW0gKz0gZmlsdGVy WzJdICogKCooczEgKyAxKSAtICpzcmMpOworICAgICAgICAgICAgc3VtICs9IGZpbHRlclszXSAq ICgqKHMyIC0gMSkgLSAqc3JjKTsKKyAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbNF0gKiAoKnMy IC0gKnNyYyk7CisgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzVdICogKCooczIgKyAxKSAtICpz cmMpOworICAgICAgICAgICAgc3VtICs9IGZpbHRlcls2XSAqICgqczMgLSAqc3JjKTsKKyAgICAg ICAgICAgIHN1bSA9IGF2X2NsaXAoKHN1bSArIDY0KSA+PiA3LCAtKDEgPDwgKEJJVF9ERVBUSCAt IDEpKSwgKDEgPDwgKEJJVF9ERVBUSCAtIDEpKSAtIDEpOworICAgICAgICAgICAgc3VtICs9ICpk c3Q7CisgICAgICAgICAgICAqZHN0ID0gYXZfY2xpcF9waXhlbChzdW0pOworICAgICAgICB9Cisg ICAgfQorfQorCisjZGVmaW5lIEFMRl9ESVJfVkVSVCAgICAgICAgMAorI2RlZmluZSBBTEZfRElS X0hPUlogICAgICAgIDEKKyNkZWZpbmUgQUxGX0RJUl9ESUdBMCAgICAgICAyCisjZGVmaW5lIEFM Rl9ESVJfRElHQTEgICAgICAgMworCitzdGF0aWMgdm9pZCBGVU5DKGFsZl9nZXRfaWR4KShpbnQg KmNsYXNzX2lkeCwgaW50ICp0cmFuc3Bvc2VfaWR4LCBjb25zdCBpbnQgKnN1bSwgY29uc3QgaW50 IGFjKQoreworICAgIHN0YXRpYyBjb25zdCBpbnQgYXJnX3ZhcltdID0gezAsIDEsIDIsIDIsIDIs IDIsIDIsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDQgfTsKKworICAgIGludCBodjAsIGh2MSwg ZGlyX2h2LCBkMCwgZDEsIGRpcl9kLCBodmQxLCBodmQwLCBzdW1faHYsIGRpcjE7CisKKyAgICBk aXJfaHYgPSBzdW1bQUxGX0RJUl9WRVJUXSA8PSBzdW1bQUxGX0RJUl9IT1JaXTsKKyAgICBodjEg ICAgPSBGRk1BWChzdW1bQUxGX0RJUl9WRVJUXSwgc3VtW0FMRl9ESVJfSE9SWl0pOworICAgIGh2 MCAgICA9IEZGTUlOKHN1bVtBTEZfRElSX1ZFUlRdLCBzdW1bQUxGX0RJUl9IT1JaXSk7CisKKyAg ICBkaXJfZCAgPSBzdW1bQUxGX0RJUl9ESUdBMF0gPD0gc3VtW0FMRl9ESVJfRElHQTFdOworICAg IGQxICAgICA9IEZGTUFYKHN1bVtBTEZfRElSX0RJR0EwXSwgc3VtW0FMRl9ESVJfRElHQTFdKTsK KyAgICBkMCAgICAgPSBGRk1JTihzdW1bQUxGX0RJUl9ESUdBMF0sIHN1bVtBTEZfRElSX0RJR0Ex XSk7CisKKyAgICAvL3Byb21vdGUgdG8gYXZvaWQgb3ZlcmZsb3cKKyAgICBkaXIxID0gKHVpbnQ2 NF90KWQxICogaHYwIDw9ICh1aW50NjRfdClodjEgKiBkMDsKKyAgICBodmQxID0gZGlyMSA/IGh2 MSA6IGQxOworICAgIGh2ZDAgPSBkaXIxID8gaHYwIDogZDA7CisKKyAgICBzdW1faHYgPSBzdW1b QUxGX0RJUl9IT1JaXSArIHN1bVtBTEZfRElSX1ZFUlRdOworICAgICpjbGFzc19pZHggPSBhcmdf dmFyW2F2X2NsaXBfdWludHAyKHN1bV9odiAqIGFjID4+IChCSVRfREVQVEggLSAxKSwgNCldOwor ICAgIGlmIChodmQxICogMiA+IDkgKiBodmQwKQorICAgICAgICAqY2xhc3NfaWR4ICs9ICgoZGly MSA8PCAxKSArIDIpICogNTsKKyAgICBlbHNlIGlmIChodmQxID4gMiAqIGh2ZDApCisgICAgICAg ICpjbGFzc19pZHggKz0gKChkaXIxIDw8IDEpICsgMSkgKiA1OworCisgICAgKnRyYW5zcG9zZV9p ZHggPSBkaXJfZCAqIDIgKyBkaXJfaHY7Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMoYWxmX2NsYXNz aWZ5KShpbnQgKmNsYXNzX2lkeCwgaW50ICp0cmFuc3Bvc2VfaWR4LAorICAgIGNvbnN0IHVpbnQ4 X3QgKl9zcmMsIGNvbnN0IHB0cmRpZmZfdCBfc3JjX3N0cmlkZSwgY29uc3QgaW50IHdpZHRoLCBj b25zdCBpbnQgaGVpZ2h0LAorICAgIGNvbnN0IGludCB2Yl9wb3MsIGludCAqZ3JhZGllbnRfdG1w KQoreworICAgIGludCAqZ3JhZDsKKworICAgIGNvbnN0IGludCBoID0gaGVpZ2h0ICsgQUxGX0dS QURJRU5UX0JPUkRFUiAqIDI7CisgICAgY29uc3QgaW50IHcgPSB3aWR0aCAgKyBBTEZfR1JBRElF TlRfQk9SREVSICogMjsKKyAgICBjb25zdCBpbnQgc2l6ZSA9IChBTEZfQkxPQ0tfU0laRSArIEFM Rl9HUkFESUVOVF9CT1JERVIgKiAyKSAvIEFMRl9HUkFESUVOVF9TVEVQOworICAgIGNvbnN0IGlu dCBnc3RyaWRlID0gKHcgLyBBTEZfR1JBRElFTlRfU1RFUCkgKiBBTEZfTlVNX0RJUjsKKworICAg IGNvbnN0IHBpeGVsICpzcmMgICAgICAgICAgID0gKGNvbnN0IHBpeGVsICopX3NyYzsKKyAgICBj b25zdCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSA9IF9zcmNfc3RyaWRlIC8gc2l6ZW9mKHBpeGVsKTsK KyAgICBzcmMgLT0gKEFMRl9HUkFESUVOVF9CT1JERVIgKyAxKSAqIHNyY19zdHJpZGUgKyBBTEZf R1JBRElFTlRfQk9SREVSOworCisgICAgZ3JhZCA9IGdyYWRpZW50X3RtcDsKKyAgICBmb3IgKGlu dCB5ID0gMDsgeSA8IGg7IHkgKz0gQUxGX0dSQURJRU5UX1NURVApIHsKKyAgICAgICAgY29uc3Qg cGl4ZWwgKnMwICA9IHNyYyArIHkgKiBzcmNfc3RyaWRlOworICAgICAgICBjb25zdCBwaXhlbCAq czEgID0gczAgKyBzcmNfc3RyaWRlOworICAgICAgICBjb25zdCBwaXhlbCAqczIgID0gczEgKyBz cmNfc3RyaWRlOworICAgICAgICBjb25zdCBwaXhlbCAqczMgID0gczIgKyBzcmNfc3RyaWRlOwor CisgICAgICAgIGlmICh5ID09IHZiX3BvcykgICAgICAgICAgLy9hYm92ZQorICAgICAgICAgICAg czMgPSBzMjsKKyAgICAgICAgZWxzZSBpZiAoeSA9PSB2Yl9wb3MgKyBBTEZfR1JBRElFTlRfQk9S REVSKQorICAgICAgICAgICAgczAgPSBzMTsKKworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8 IHc7IHggKz0gQUxGX0dSQURJRU5UX1NURVApIHsKKyAgICAgICAgICAgIC8vdHdvIHBvaW50cyBh IHRpbWUKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICphMCAgPSBzMCArIHg7CisgICAgICAgICAg ICBjb25zdCBwaXhlbCAqcDAgID0gczEgKyB4OworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKmIw ICA9IHMyICsgeDsKKyAgICAgICAgICAgIGNvbnN0IGludCB2YWwwICAgPSAoKnAwKSA8PCAxOwor CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqYTEgID0gczEgKyB4ICsgMTsKKyAgICAgICAgICAg IGNvbnN0IHBpeGVsICpwMSAgPSBzMiArIHggKyAxOworICAgICAgICAgICAgY29uc3QgcGl4ZWwg KmIxICA9IHMzICsgeCArIDE7CisgICAgICAgICAgICBjb25zdCBpbnQgdmFsMSAgID0gKCpwMSkg PDwgMTsKKworICAgICAgICAgICAgZ3JhZFtBTEZfRElSX1ZFUlRdICA9IEZGQUJTKHZhbDAgLSAq YTAgLSAqYjApICsgRkZBQlModmFsMSAtICphMSAtICpiMSk7CisgICAgICAgICAgICBncmFkW0FM Rl9ESVJfSE9SWl0gID0gRkZBQlModmFsMCAtICoocDAgLSAxKSAtICoocDAgKyAxKSkgKyBGRkFC Uyh2YWwxIC0gKihwMSAtIDEpIC0gKihwMSArIDEpKTsKKyAgICAgICAgICAgIGdyYWRbQUxGX0RJ Ul9ESUdBMF0gPSBGRkFCUyh2YWwwIC0gKihhMCAtIDEpIC0gKihiMCArIDEpKSArIEZGQUJTKHZh bDEgLSAqKGExIC0gMSkgLSAqKGIxICsgMSkpOworICAgICAgICAgICAgZ3JhZFtBTEZfRElSX0RJ R0ExXSA9IEZGQUJTKHZhbDAgLSAqKGEwICsgMSkgLSAqKGIwIC0gMSkpICsgRkZBQlModmFsMSAt ICooYTEgKyAxKSAtICooYjEgLSAxKSk7CisgICAgICAgICAgICBncmFkICs9IEFMRl9OVU1fRElS OworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQgOyB5 ICs9IEFMRl9CTE9DS19TSVpFICkgeworICAgICAgICBpbnQgc3RhcnQgPSAwOworICAgICAgICBp bnQgZW5kICAgPSAoQUxGX0JMT0NLX1NJWkUgKyBBTEZfR1JBRElFTlRfQk9SREVSICogMikgLyBB TEZfR1JBRElFTlRfU1RFUDsKKyAgICAgICAgaW50IGFjICAgID0gMjsKKyAgICAgICAgaWYgKHkg KyBBTEZfQkxPQ0tfU0laRSA9PSB2Yl9wb3MpIHsKKyAgICAgICAgICAgIGVuZCAtPSBBTEZfR1JB RElFTlRfQk9SREVSIC8gQUxGX0dSQURJRU5UX1NURVA7CisgICAgICAgICAgICBhYyA9IDM7Cisg ICAgICAgIH0gZWxzZSBpZiAoeSA9PSB2Yl9wb3MpIHsKKyAgICAgICAgICAgIHN0YXJ0ICs9IEFM Rl9HUkFESUVOVF9CT1JERVIgLyBBTEZfR1JBRElFTlRfU1RFUDsKKyAgICAgICAgICAgIGFjID0g MzsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4ICs9IEFM Rl9CTE9DS19TSVpFKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgeGcgPSB4IC8gQUxGX0dSQURJ RU5UX1NURVA7CisgICAgICAgICAgICBjb25zdCBpbnQgeWcgPSB5IC8gQUxGX0dSQURJRU5UX1NU RVA7CisgICAgICAgICAgICBpbnQgc3VtW0FMRl9OVU1fRElSXSA9IHsgMCB9OworCisgICAgICAg ICAgICBncmFkID0gZ3JhZGllbnRfdG1wICsgKHlnICsgc3RhcnQpICogZ3N0cmlkZSArIHhnICog QUxGX05VTV9ESVI7CisgICAgICAgICAgICAvL3RvZG86IG9wdGltaXplIHRoaXMgbG9vcAorICAg ICAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKKyAgICAgICAgICAg ICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNpemU7IGorKykgeworICAgICAgICAgICAgICAgICAg ICBzdW1bQUxGX0RJUl9WRVJUXSAgKz0gZ3JhZFtBTEZfRElSX1ZFUlRdOworICAgICAgICAgICAg ICAgICAgICBzdW1bQUxGX0RJUl9IT1JaXSAgKz0gZ3JhZFtBTEZfRElSX0hPUlpdOworICAgICAg ICAgICAgICAgICAgICBzdW1bQUxGX0RJUl9ESUdBMF0gKz0gZ3JhZFtBTEZfRElSX0RJR0EwXTsK KyAgICAgICAgICAgICAgICAgICAgc3VtW0FMRl9ESVJfRElHQTFdICs9IGdyYWRbQUxGX0RJUl9E SUdBMV07CisgICAgICAgICAgICAgICAgICAgIGdyYWQgKz0gQUxGX05VTV9ESVI7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdyYWQgKz0gZ3N0cmlkZSAtIHNpemUgKiBBTEZf TlVNX0RJUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZVTkMoYWxmX2dldF9pZHgpKGNs YXNzX2lkeCwgdHJhbnNwb3NlX2lkeCwgc3VtLCBhYyk7CisKKyAgICAgICAgICAgIGNsYXNzX2lk eCsrOworICAgICAgICAgICAgdHJhbnNwb3NlX2lkeCsrOworICAgICAgICB9CisgICAgfQorCit9 CisKK3N0YXRpYyB2b2lkIEZVTkMoYWxmX3JlY29uX2NvZWZmX2FuZF9jbGlwKShpbnQxNl90ICpj b2VmZiwgaW50MTZfdCAqY2xpcCwKKyAgICBjb25zdCBpbnQgKmNsYXNzX2lkeCwgY29uc3QgaW50 ICp0cmFuc3Bvc2VfaWR4LCBjb25zdCBpbnQgc2l6ZSwKKyAgICBjb25zdCBpbnQxNl90ICpjb2Vm Zl9zZXQsIGNvbnN0IHVpbnQ4X3QgKmNsaXBfaWR4X3NldCwgY29uc3QgdWludDhfdCAqY2xhc3Nf dG9fZmlsdCkKK3sKKyAgICBjb25zdCBzdGF0aWMgaW50IGluZGV4W11bQUxGX05VTV9DT0VGRl9M VU1BXSA9IHsKKyAgICAgICAgeyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEg fSwKKyAgICAgICAgeyA5LCA0LCAxMCwgOCwgMSwgNSwgMTEsIDcsIDMsIDAsIDIsIDYgfSwKKyAg ICAgICAgeyAwLCAzLCAyLCAxLCA4LCA3LCA2LCA1LCA0LCA5LCAxMCwgMTEgfSwKKyAgICAgICAg eyA5LCA4LCAxMCwgNCwgMywgNywgMTEsIDUsIDEsIDAsIDIsIDYgfSwKKyAgICB9OworCisgICAg Y29uc3QgaW50MTZfdCBjbGlwX3NldFtdID0geworICAgICAgICAxIDw8IEJJVF9ERVBUSCwgMSA8 PCAoQklUX0RFUFRIIC0gMyksIDEgPDwgKEJJVF9ERVBUSCAtIDUpLCAxIDw8IChCSVRfREVQVEgg LSA3KQorICAgIH07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAg ICAgICBjb25zdCBpbnQxNl90ICAqc3JjX2NvZWZmID0gY29lZmZfc2V0ICsgY2xhc3NfdG9fZmls dFtjbGFzc19pZHhbaV1dICogQUxGX05VTV9DT0VGRl9MVU1BOworICAgICAgICBjb25zdCB1aW50 OF90ICpjbGlwX2lkeCAgPSBjbGlwX2lkeF9zZXQgKyBjbGFzc19pZHhbaV0gKiBBTEZfTlVNX0NP RUZGX0xVTUE7CisKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBBTEZfTlVNX0NPRUZGX0xV TUE7IGorKykgeworICAgICAgICAgICAgY29uc3QgaW50IGlkeCA9IGluZGV4W3RyYW5zcG9zZV9p ZHhbaV1dW2pdOworICAgICAgICAgICAgKmNvZWZmKysgPSBzcmNfY29lZmZbaWR4XTsKKyAgICAg ICAgICAgICpjbGlwKysgID0gY2xpcF9zZXRbY2xpcF9pZHhbaWR4XV07CisgICAgICAgIH0KKyAg ICB9Cit9CisKKyN1bmRlZiBBTEZfRElSX0hPUloKKyN1bmRlZiBBTEZfRElSX1ZFUlQKKyN1bmRl ZiBBTEZfRElSX0RJR0EwCisjdW5kZWYgQUxGX0RJUl9ESUdBMQorCisvLyBsaW5lIHplcm8KKyNk ZWZpbmUgUDcgcGl4Wy04ICogeHN0cmlkZV0KKyNkZWZpbmUgUDYgcGl4Wy03ICogeHN0cmlkZV0K KyNkZWZpbmUgUDUgcGl4Wy02ICogeHN0cmlkZV0KKyNkZWZpbmUgUDQgcGl4Wy01ICogeHN0cmlk ZV0KKyNkZWZpbmUgUDMgcGl4Wy00ICogeHN0cmlkZV0KKyNkZWZpbmUgUDIgcGl4Wy0zICogeHN0 cmlkZV0KKyNkZWZpbmUgUDEgcGl4Wy0yICogeHN0cmlkZV0KKyNkZWZpbmUgUDAgcGl4Wy0xICog eHN0cmlkZV0KKyNkZWZpbmUgUTAgcGl4WzAgKiB4c3RyaWRlXQorI2RlZmluZSBRMSBwaXhbMSAq IHhzdHJpZGVdCisjZGVmaW5lIFEyIHBpeFsyICogeHN0cmlkZV0KKyNkZWZpbmUgUTMgcGl4WzMg KiB4c3RyaWRlXQorI2RlZmluZSBRNCBwaXhbNCAqIHhzdHJpZGVdCisjZGVmaW5lIFE1IHBpeFs1 ICogeHN0cmlkZV0KKyNkZWZpbmUgUTYgcGl4WzYgKiB4c3RyaWRlXQorI2RlZmluZSBRNyBwaXhb NyAqIHhzdHJpZGVdCisjZGVmaW5lIFAoeCkgcGl4WygtKHgpLTEpICogeHN0cmlkZV0KKyNkZWZp bmUgUSh4KSBwaXhbKHgpICAgICAgKiB4c3RyaWRlXQorCisvLyBsaW5lIHRocmVlLiB1c2VkIG9u bHkgZm9yIGRlYmxvY2tpbmcgZGVjaXNpb24KKyNkZWZpbmUgVFA3IHBpeFstOCAqIHhzdHJpZGUg KyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFA2IHBpeFstNyAqIHhzdHJpZGUgKyAzICogeXN0cmlk ZV0KKyNkZWZpbmUgVFA1IHBpeFstNiAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUg VFA0IHBpeFstNSAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFAzIHBpeFstNCAq IHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFAyIHBpeFstMyAqIHhzdHJpZGUgKyAz ICogeXN0cmlkZV0KKyNkZWZpbmUgVFAxIHBpeFstMiAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0K KyNkZWZpbmUgVFAwIHBpeFstMSAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFEw IHBpeFswICAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFExIHBpeFsxICAqIHhz dHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFEyIHBpeFsyICAqIHhzdHJpZGUgKyAzICog eXN0cmlkZV0KKyNkZWZpbmUgVFEzIHBpeFszICAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNk ZWZpbmUgVFE0IHBpeFs0ICAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFE1IHBp eFs1ICAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFE2IHBpeFs2ICAqIHhzdHJp ZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFE3IHBpeFs3ICAqIHhzdHJpZGUgKyAzICogeXN0 cmlkZV0KKyNkZWZpbmUgVFAoeCkgcGl4WygtKHgpLTEpICogeHN0cmlkZSArIDMgKiB5c3RyaWRl XQorI2RlZmluZSBUUSh4KSBwaXhbKHgpICAgICAgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisK KyNkZWZpbmUgRlAzIHBpeFstNCAqIHhzdHJpZGUgKyAxICogeXN0cmlkZV0KKyNkZWZpbmUgRlAy IHBpeFstMyAqIHhzdHJpZGUgKyAxICogeXN0cmlkZV0KKyNkZWZpbmUgRlAxIHBpeFstMiAqIHhz dHJpZGUgKyAxICogeXN0cmlkZV0KKyNkZWZpbmUgRlAwIHBpeFstMSAqIHhzdHJpZGUgKyAxICog eXN0cmlkZV0KKyNkZWZpbmUgRlEwIHBpeFswICAqIHhzdHJpZGUgKyAxICogeXN0cmlkZV0KKyNk ZWZpbmUgRlExIHBpeFsxICAqIHhzdHJpZGUgKyAxICogeXN0cmlkZV0KKyNkZWZpbmUgRlEyIHBp eFsyICAqIHhzdHJpZGUgKyAxICogeXN0cmlkZV0KKyNkZWZpbmUgRlEzIHBpeFszICAqIHhzdHJp ZGUgKyAxICogeXN0cmlkZV0KKworc3RhdGljIHZvaWQgRlVOQyhsb29wX2ZpbHRlcl9sdW1hX2xh cmdlKShwaXhlbCAqcGl4LCBjb25zdCBwdHJkaWZmX3QgeHN0cmlkZSwgY29uc3QgcHRyZGlmZl90 IHlzdHJpZGUsIGNvbnN0IGludDMyX3QgdGMsCisgICAgY29uc3QgdWludDhfdCBub19wLCBjb25z dCB1aW50OF90IG5vX3EsIGNvbnN0IHVpbnQ4X3QgbWF4X2xlbl9wLCBjb25zdCB1aW50OF90IG1h eF9sZW5fcSkKK3sKKyAgICBmb3IgKGludCBkID0gMDsgZCA8IDQ7IGQrKykgeworICAgICAgICBj b25zdCBpbnQgcDYgPSBQNjsKKyAgICAgICAgY29uc3QgaW50IHA1ID0gUDU7CisgICAgICAgIGNv bnN0IGludCBwNCA9IFA0OworICAgICAgICBjb25zdCBpbnQgcDMgPSBQMzsKKyAgICAgICAgY29u c3QgaW50IHAyID0gUDI7CisgICAgICAgIGNvbnN0IGludCBwMSA9IFAxOworICAgICAgICBjb25z dCBpbnQgcDAgPSBQMDsKKyAgICAgICAgY29uc3QgaW50IHEwID0gUTA7CisgICAgICAgIGNvbnN0 IGludCBxMSA9IFExOworICAgICAgICBjb25zdCBpbnQgcTIgPSBRMjsKKyAgICAgICAgY29uc3Qg aW50IHEzID0gUTM7CisgICAgICAgIGNvbnN0IGludCBxNCA9IFE0OworICAgICAgICBjb25zdCBp bnQgcTUgPSBRNTsKKyAgICAgICAgY29uc3QgaW50IHE2ID0gUTY7CisgICAgICAgIGludCBtOwor ICAgICAgICBpZiAobWF4X2xlbl9wID09IDUgJiYgbWF4X2xlbl9xID09IDUpCisgICAgICAgICAg ICBtID0gKHA0ICsgcDMgKyAyICogKHAyICsgcDEgKyBwMCArIHEwICsgcTEgKyBxMikgKyBxMyAr IHE0ICsgOCkgPj4gNDsKKyAgICAgICAgZWxzZSBpZiAobWF4X2xlbl9wID09IG1heF9sZW5fcSkK KyAgICAgICAgICAgIG0gPSAocDYgKyBwNSArIHA0ICsgcDMgKyBwMiArIHAxICsgMiAqIChwMCAr IHEwKSArIHExICsgcTIgKyBxMyArIHE0ICsgcTUgKyBxNiArIDgpID4+IDQ7CisgICAgICAgIGVs c2UgaWYgKG1heF9sZW5fcCArIG1heF9sZW5fcSA9PSAxMikKKyAgICAgICAgICAgIG0gPSAocDUg KyBwNCArIHAzICsgcDIgKyAyICogKHAxICsgcDAgKyBxMCArIHExKSArIHEyICsgcTMgKyBxNCAr IHE1ICsgOCkgPj4gNDsKKyAgICAgICAgZWxzZSBpZiAobWF4X2xlbl9wICsgbWF4X2xlbl9xID09 IDgpCisgICAgICAgICAgICBtID0gKHAzICsgcDIgKyBwMSArIHAwICsgcTAgKyBxMSArIHEyICsg cTMgKyA0KSA+PiAzOworICAgICAgICBlbHNlIGlmIChtYXhfbGVuX3EgPT0gNykKKyAgICAgICAg ICAgIG0gPSAoMiAqIChwMiArIHAxICsgcDAgKyBxMCkgKyBwMCArIHAxICsgcTEgKyBxMiArIHEz ICsgcTQgKyBxNSArIHE2ICsgOCkgPj4gNDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbSA9 IChwNiArIHA1ICsgcDQgKyBwMyArIHAyICsgcDEgKyAyICogKHEyICsgcTEgKyBxMCArIHAwKSAr IHEwICsgcTEgKyA4KSA+PiA0OworICAgICAgICBpZiAoIW5vX3ApIHsKKyAgICAgICAgICAgIGNv bnN0IGludCByZWZwID0gKFAobWF4X2xlbl9wKSArIFAobWF4X2xlbl9wIC0gMSkgKyAxKSA+PiAx OworICAgICAgICAgICAgaWYgKG1heF9sZW5fcCA9PSAzKSB7CisgICAgICAgICAgICAgICAgUDAg PSBwMCArIGF2X2NsaXAoKChtICogNTMgKyByZWZwICogMTEgKyAzMikgPj4gNikgLSBwMCwgLSh0 YyAqIDYgPj4gMSksICh0YyAqIDYgPj4gMSkpOworICAgICAgICAgICAgICAgIFAxID0gcDEgKyBh dl9jbGlwKCgobSAqIDMyICsgcmVmcCAqIDMyICsgMzIpID4+IDYpIC0gcDEsIC0odGMgKiA0ID4+ IDEpLCAodGMgKiA0ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBQMiA9IHAyICsgYXZfY2xpcCgo KG0gKiAxMSArIHJlZnAgKiA1MyArIDMyKSA+PiA2KSAtIHAyLCAtKHRjICogMiA+PiAxKSwgKHRj ICogMiA+PiAxKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1heF9sZW5fcCA9PSA1KSB7Cisg ICAgICAgICAgICAgICAgUDAgPSBwMCArIGF2X2NsaXAoKChtICogNTggKyByZWZwICogIDYgKyAz MikgPj4gNikgLSBwMCwgLSh0YyAqIDYgPj4gMSksICh0YyAqIDYgPj4gMSkpOworICAgICAgICAg ICAgICAgIFAxID0gcDEgKyBhdl9jbGlwKCgobSAqIDQ1ICsgcmVmcCAqIDE5ICsgMzIpID4+IDYp IC0gcDEsIC0odGMgKiA1ID4+IDEpLCAodGMgKiA1ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBQ MiA9IHAyICsgYXZfY2xpcCgoKG0gKiAzMiArIHJlZnAgKiAzMiArIDMyKSA+PiA2KSAtIHAyLCAt KHRjICogNCA+PiAxKSwgKHRjICogNCA+PiAxKSk7CisgICAgICAgICAgICAgICAgUDMgPSBwMyAr IGF2X2NsaXAoKChtICogMTkgKyByZWZwICogNDUgKyAzMikgPj4gNikgLSBwMywgLSh0YyAqIDMg Pj4gMSksICh0YyAqIDMgPj4gMSkpOworICAgICAgICAgICAgICAgIFA0ID0gcDQgKyBhdl9jbGlw KCgobSAqICA2ICsgcmVmcCAqIDU4ICsgMzIpID4+IDYpIC0gcDQsIC0odGMgKiAyID4+IDEpLCAo dGMgKiAyID4+IDEpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgUDAg PSBwMCArIGF2X2NsaXAoKChtICogNTkgKyByZWZwICogIDUgKyAzMikgPj4gNikgLSBwMCwgLSh0 YyAqIDYgPj4gMSksICh0YyAqIDYgPj4gMSkpOworICAgICAgICAgICAgICAgIFAxID0gcDEgKyBh dl9jbGlwKCgobSAqIDUwICsgcmVmcCAqIDE0ICsgMzIpID4+IDYpIC0gcDEsIC0odGMgKiA1ID4+ IDEpLCAodGMgKiA1ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBQMiA9IHAyICsgYXZfY2xpcCgo KG0gKiA0MSArIHJlZnAgKiAyMyArIDMyKSA+PiA2KSAtIHAyLCAtKHRjICogNCA+PiAxKSwgKHRj ICogNCA+PiAxKSk7CisgICAgICAgICAgICAgICAgUDMgPSBwMyArIGF2X2NsaXAoKChtICogMzIg KyByZWZwICogMzIgKyAzMikgPj4gNikgLSBwMywgLSh0YyAqIDMgPj4gMSksICh0YyAqIDMgPj4g MSkpOworICAgICAgICAgICAgICAgIFA0ID0gcDQgKyBhdl9jbGlwKCgobSAqIDIzICsgcmVmcCAq IDQxICsgMzIpID4+IDYpIC0gcDQsIC0odGMgKiAyID4+IDEpLCAodGMgKiAyID4+IDEpKTsKKyAg ICAgICAgICAgICAgICBQNSA9IHA1ICsgYXZfY2xpcCgoKG0gKiAxNCArIHJlZnAgKiA1MCArIDMy KSA+PiA2KSAtIHA1LCAtKHRjICogMSA+PiAxKSwgKHRjICogMSA+PiAxKSk7CisgICAgICAgICAg ICAgICAgUDYgPSBwNiArIGF2X2NsaXAoKChtICogIDUgKyByZWZwICogNTkgKyAzMikgPj4gNikg LSBwNiwgLSh0YyAqIDEgPj4gMSksICh0YyAqIDEgPj4gMSkpOworICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgICAgIGlmICghbm9fcSkgeworICAgICAgICAgICAgY29uc3QgaW50IHJlZnEg PSAoUShtYXhfbGVuX3EpICsgUShtYXhfbGVuX3EgLSAxKSArIDEpID4+IDE7CisgICAgICAgICAg ICBpZiAobWF4X2xlbl9xID09IDMpIHsKKyAgICAgICAgICAgICAgICBRMCA9IHEwICsgYXZfY2xp cCgoKG0gKiA1MyArIHJlZnEgKiAxMSArIDMyKSA+PiA2KSAtIHEwLCAgLSh0YyAqIDYgPj4gMSks ICh0YyAqIDYgPj4gMSkpOworICAgICAgICAgICAgICAgIFExID0gcTEgKyBhdl9jbGlwKCgobSAq IDMyICsgcmVmcSAqIDMyICsgMzIpID4+IDYpIC0gcTEsICAtKHRjICogNCA+PiAxKSwgKHRjICog NCA+PiAxKSk7CisgICAgICAgICAgICAgICAgUTIgPSBxMiArIGF2X2NsaXAoKChtICogMTEgKyBy ZWZxICogNTMgKyAzMikgPj4gNikgLSBxMiwgIC0odGMgKiAyID4+IDEpLCAodGMgKiAyID4+IDEp KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobWF4X2xlbl9xID09IDUpIHsKKyAgICAgICAgICAg ICAgICBRMCA9IHEwICsgYXZfY2xpcCgoKG0gKiA1OCArIHJlZnEgKiAgNiArIDMyKSA+PiA2KSAt IHEwLCAtKHRjICogNiA+PiAxKSwgKHRjICogNiA+PiAxKSk7CisgICAgICAgICAgICAgICAgUTEg PSBxMSArIGF2X2NsaXAoKChtICogNDUgKyByZWZxICogMTkgKyAzMikgPj4gNikgLSBxMSwgLSh0 YyAqIDUgPj4gMSksICh0YyAqIDUgPj4gMSkpOworICAgICAgICAgICAgICAgIFEyID0gcTIgKyBh dl9jbGlwKCgobSAqIDMyICsgcmVmcSAqIDMyICsgMzIpID4+IDYpIC0gcTIsIC0odGMgKiA0ID4+ IDEpLCAodGMgKiA0ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBRMyA9IHEzICsgYXZfY2xpcCgo KG0gKiAxOSArIHJlZnEgKiA0NSArIDMyKSA+PiA2KSAtIHEzLCAtKHRjICogMyA+PiAxKSwgKHRj ICogMyA+PiAxKSk7CisgICAgICAgICAgICAgICAgUTQgPSBxNCArIGF2X2NsaXAoKChtICogIDYg KyByZWZxICogNTggKyAzMikgPj4gNikgLSBxNCwgLSh0YyAqIDIgPj4gMSksICh0YyAqIDIgPj4g MSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBRMCA9IHEwICsgYXZf Y2xpcCgoKG0gKiA1OSArIHJlZnEgKiAgNSArIDMyKSA+PiA2KSAtIHEwLCAtKHRjICogNiA+PiAx KSwgKHRjICogNiA+PiAxKSk7CisgICAgICAgICAgICAgICAgUTEgPSBxMSArIGF2X2NsaXAoKCht ICogNTAgKyByZWZxICogMTQgKyAzMikgPj4gNikgLSBxMSwgLSh0YyAqIDUgPj4gMSksICh0YyAq IDUgPj4gMSkpOworICAgICAgICAgICAgICAgIFEyID0gcTIgKyBhdl9jbGlwKCgobSAqIDQxICsg cmVmcSAqIDIzICsgMzIpID4+IDYpIC0gcTIsIC0odGMgKiA0ID4+IDEpLCAodGMgKiA0ID4+IDEp KTsKKyAgICAgICAgICAgICAgICBRMyA9IHEzICsgYXZfY2xpcCgoKG0gKiAzMiArIHJlZnEgKiAz MiArIDMyKSA+PiA2KSAtIHEzLCAtKHRjICogMyA+PiAxKSwgKHRjICogMyA+PiAxKSk7CisgICAg ICAgICAgICAgICAgUTQgPSBxNCArIGF2X2NsaXAoKChtICogMjMgKyByZWZxICogNDEgKyAzMikg Pj4gNikgLSBxNCwgLSh0YyAqIDIgPj4gMSksICh0YyAqIDIgPj4gMSkpOworICAgICAgICAgICAg ICAgIFE1ID0gcTUgKyBhdl9jbGlwKCgobSAqIDE0ICsgcmVmcSAqIDUwICsgMzIpID4+IDYpIC0g cTUsIC0odGMgKiAxID4+IDEpLCAodGMgKiAxID4+IDEpKTsKKyAgICAgICAgICAgICAgICBRNiA9 IHE2ICsgYXZfY2xpcCgoKG0gKiAgNSArIHJlZnEgKiA1OSArIDMyKSA+PiA2KSAtIHE2LCAtKHRj ICogMSA+PiAxKSwgKHRjICogMSA+PiAxKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQor ICAgICAgICBwaXggKz0geXN0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMobG9v cF9maWx0ZXJfbHVtYV9zdHJvbmcpKHBpeGVsICpwaXgsIGNvbnN0IHB0cmRpZmZfdCB4c3RyaWRl LCBjb25zdCBwdHJkaWZmX3QgeXN0cmlkZSwgY29uc3QgaW50MzJfdCB0YywKKyAgICBjb25zdCB1 aW50OF90IG5vX3AsIGNvbnN0IHVpbnQ4X3Qgbm9fcSkKK3sKKyAgICBjb25zdCBpbnQgdGMyID0g dGMgPDwgMTsKKyAgICBjb25zdCBpbnQgdGMzID0gdGMgKiAzOworICAgIGZvciAoaW50IGQgPSAw OyBkIDwgNDsgZCsrKSB7CisgICAgICAgIGNvbnN0IGludCBwMyA9IFAzOworICAgICAgICBjb25z dCBpbnQgcDIgPSBQMjsKKyAgICAgICAgY29uc3QgaW50IHAxID0gUDE7CisgICAgICAgIGNvbnN0 IGludCBwMCA9IFAwOworICAgICAgICBjb25zdCBpbnQgcTAgPSBRMDsKKyAgICAgICAgY29uc3Qg aW50IHExID0gUTE7CisgICAgICAgIGNvbnN0IGludCBxMiA9IFEyOworICAgICAgICBjb25zdCBp bnQgcTMgPSBRMzsKKyAgICAgICAgaWYgKCFub19wKSB7CisgICAgICAgICAgICBQMCA9IHAwICsg YXZfY2xpcCgoKHAyICsgMiAqIHAxICsgMiAqIHAwICsgMiAqIHEwICsgcTEgKyA0KSA+PiAzKSAt IHAwLCAtdGMzLCB0YzMpOworICAgICAgICAgICAgUDEgPSBwMSArIGF2X2NsaXAoKChwMiArIHAx ICsgcDAgKyBxMCArIDIpID4+IDIpIC0gcDEsIC10YzIsIHRjMik7CisgICAgICAgICAgICBQMiA9 IHAyICsgYXZfY2xpcCgoKDIgKiBwMyArIDMgKiBwMiArIHAxICsgcDAgKyBxMCArIDQpID4+IDMp IC0gcDIsIC10YywgdGMpOworICAgICAgICB9CisgICAgICAgIGlmICghbm9fcSkgeworICAgICAg ICAgICAgUTAgPSBxMCArIGF2X2NsaXAoKChwMSArIDIgKiBwMCArIDIgKiBxMCArIDIgKiBxMSAr IHEyICsgNCkgPj4gMykgLSBxMCwgLXRjMywgdGMzKTsKKyAgICAgICAgICAgIFExID0gcTEgKyBh dl9jbGlwKCgocDAgKyBxMCArIHExICsgcTIgKyAyKSA+PiAyKSAtIHExLCAtdGMyLCB0YzIpOwor ICAgICAgICAgICAgUTIgPSBxMiArIGF2X2NsaXAoKCgyICogcTMgKyAzICogcTIgKyBxMSArIHEw ICsgcDAgKyA0KSA+PiAzKSAtIHEyLCAtdGMsIHRjKTsKKyAgICAgICAgfQorICAgICAgICBwaXgg Kz0geXN0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMobG9vcF9maWx0ZXJfbHVt YV93ZWFrKShwaXhlbCAqcGl4LCBjb25zdCBwdHJkaWZmX3QgeHN0cmlkZSwgY29uc3QgcHRyZGlm Zl90IHlzdHJpZGUsCisgICAgY29uc3QgaW50MzJfdCB0YywgY29uc3QgaW50MzJfdCBiZXRhLCBj b25zdCB1aW50OF90IG5vX3AsIGNvbnN0IHVpbnQ4X3Qgbm9fcSwgY29uc3QgaW50IG5kX3AsIGNv bnN0IGludCBuZF9xKQoreworICAgIGNvbnN0IGludCB0Y18yID0gdGMgPj4gMTsKKyAgICBmb3Ig KGludCBkID0gMDsgZCA8IDQ7IGQrKykgeworICAgICAgICBjb25zdCBpbnQgcDIgPSBQMjsKKyAg ICAgICAgY29uc3QgaW50IHAxID0gUDE7CisgICAgICAgIGNvbnN0IGludCBwMCA9IFAwOworICAg ICAgICBjb25zdCBpbnQgcTAgPSBRMDsKKyAgICAgICAgY29uc3QgaW50IHExID0gUTE7CisgICAg ICAgIGNvbnN0IGludCBxMiA9IFEyOworICAgICAgICBpbnQgZGVsdGEwID0gKDkgKiAocTAgLSBw MCkgLSAzICogKHExIC0gcDEpICsgOCkgPj4gNDsKKyAgICAgICAgaWYgKGFicyhkZWx0YTApIDwg MTAgKiB0YykgeworICAgICAgICAgICAgZGVsdGEwID0gYXZfY2xpcChkZWx0YTAsIC10YywgdGMp OworICAgICAgICAgICAgaWYgKCFub19wKQorICAgICAgICAgICAgICAgIFAwID0gYXZfY2xpcF9w aXhlbChwMCArIGRlbHRhMCk7CisgICAgICAgICAgICBpZiAoIW5vX3EpCisgICAgICAgICAgICAg ICAgUTAgPSBhdl9jbGlwX3BpeGVsKHEwIC0gZGVsdGEwKTsKKyAgICAgICAgICAgIGlmICghbm9f cCAmJiBuZF9wID4gMSkgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCBkZWx0YXAxID0gYXZf Y2xpcCgoKChwMiArIHAwICsgMSkgPj4gMSkgLSBwMSArIGRlbHRhMCkgPj4gMSwgLXRjXzIsIHRj XzIpOworICAgICAgICAgICAgICAgIFAxID0gYXZfY2xpcF9waXhlbChwMSArIGRlbHRhcDEpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFub19xICYmIG5kX3EgPiAxKSB7CisgICAg ICAgICAgICAgICAgY29uc3QgaW50IGRlbHRhcTEgPSBhdl9jbGlwKCgoKHEyICsgcTAgKyAxKSA+ PiAxKSAtIHExIC0gZGVsdGEwKSA+PiAxLCAtdGNfMiwgdGNfMik7CisgICAgICAgICAgICAgICAg UTEgPSBhdl9jbGlwX3BpeGVsKHExICsgZGVsdGFxMSk7CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICAgICAgcGl4ICs9IHlzdHJpZGU7CisgICAgfQorCit9CisKK3N0YXRpYyB2b2lkIEZV TkModnZjX2xvb3BfZmlsdGVyX2x1bWEpKHVpbnQ4X3QqIF9waXgsIHB0cmRpZmZfdCBfeHN0cmlk ZSwgcHRyZGlmZl90IF95c3RyaWRlLAorICAgIGNvbnN0IGludDMyX3QgKl9iZXRhLCBjb25zdCBp bnQzMl90ICpfdGMsIGNvbnN0IHVpbnQ4X3QgKl9ub19wLCBjb25zdCB1aW50OF90ICpfbm9fcSwK KyAgICBjb25zdCB1aW50OF90ICpfbWF4X2xlbl9wLCBjb25zdCB1aW50OF90ICpfbWF4X2xlbl9x LCBpbnQgaG9yX2N0dV9lZGdlKQoreworICAgIGNvbnN0IHB0cmRpZmZfdCB4c3RyaWRlID0gX3hz dHJpZGUgLyBzaXplb2YocGl4ZWwpOworICAgIGNvbnN0IHB0cmRpZmZfdCB5c3RyaWRlID0gX3lz dHJpZGUgLyBzaXplb2YocGl4ZWwpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKysp IHsKKyAgICAgICAgcGl4ZWwqIHBpeCAgICAgID0gKHBpeGVsKilfcGl4ICsgaSAqIDQgKiB5c3Ry aWRlOworICAgICAgICBjb25zdCBpbnQgZHAwICAgPSBhYnMoUDIgLSAyICogUDEgKyBQMCk7Cisg ICAgICAgIGNvbnN0IGludCBkcTAgICA9IGFicyhRMiAtIDIgKiBRMSArIFEwKTsKKyAgICAgICAg Y29uc3QgaW50IGRwMyAgID0gYWJzKFRQMiAtIDIgKiBUUDEgKyBUUDApOworICAgICAgICBjb25z dCBpbnQgZHEzICAgPSBhYnMoVFEyIC0gMiAqIFRRMSArIFRRMCk7CisgICAgICAgIGNvbnN0IGlu dCBkMCAgICA9IGRwMCArIGRxMDsKKyAgICAgICAgY29uc3QgaW50IGQzICAgID0gZHAzICsgZHEz OworI2lmIEJJVF9ERVBUSCA8IDEwCisgICAgICAgIGNvbnN0IGludCB0YyAgICA9IChfdGNbaV0g KyAoMSA8PCAoOSAtIEJJVF9ERVBUSCkpKSA+PiAoMTAgLSBCSVRfREVQVEgpOworI2Vsc2UKKyAg ICAgICAgY29uc3QgaW50IHRjICAgID0gX3RjW2ldIDw8IChCSVRfREVQVEggLSAxMCk7CisjZW5k aWYKKyAgICAgICAgY29uc3QgaW50IHRjMjUgID0gKCh0YyAqIDUgKyAxKSA+PiAxKTsKKworICAg ICAgICBjb25zdCBpbnQgbm9fcCAgPSBfbm9fcFtpXTsKKyAgICAgICAgY29uc3QgaW50IG5vX3Eg ID0gX25vX3FbaV07CisKKyAgICAgICAgaW50IG1heF9sZW5fcCAgID0gX21heF9sZW5fcFtpXTsK KyAgICAgICAgaW50IG1heF9sZW5fcSAgID0gX21heF9sZW5fcVtpXTsKKworICAgICAgICBjb25z dCBpbnQgbGFyZ2VfcCA9IChtYXhfbGVuX3AgPiAzICYmICFob3JfY3R1X2VkZ2UpOworICAgICAg ICBjb25zdCBpbnQgbGFyZ2VfcSA9IG1heF9sZW5fcSA+IDM7CisgICAgICAgIGNvbnN0IGludCBi ZXRhID0gX2JldGFbaV0gPDwgQklUX0RFUFRIIC0gODsKKworICAgICAgICBjb25zdCBpbnQgYmV0 YV8zID0gYmV0YSA+PiAzOworICAgICAgICBjb25zdCBpbnQgYmV0YV8yID0gYmV0YSA+PiAyOwor CisgICAgICAgIGlmICghdGMpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAo bGFyZ2VfcCB8fCBsYXJnZV9xKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgZHAwbCA9IGxhcmdl X3AgPyAoKGRwMCArIGFicyhQNSAtIDIgKiBQNCArIFAzKSArIDEpID4+IDEpIDogZHAwOworICAg ICAgICAgICAgY29uc3QgaW50IGRxMGwgPSBsYXJnZV9xID8gKChkcTAgKyBhYnMoUTUgLSAyICog UTQgKyBRMykgKyAxKSA+PiAxKSA6IGRxMDsKKyAgICAgICAgICAgIGNvbnN0IGludCBkcDNsID0g bGFyZ2VfcCA/ICgoZHAzICsgYWJzKFRQNSAtIDIgKiBUUDQgKyBUUDMpICsgMSkgPj4gMSkgOiBk cDM7CisgICAgICAgICAgICBjb25zdCBpbnQgZHEzbCA9IGxhcmdlX3EgPyAoKGRxMyArIGFicyhU UTUgLSAyICogVFE0ICsgVFEzKSArIDEpID4+IDEpIDogZHEzOworICAgICAgICAgICAgY29uc3Qg aW50IGQwbCA9IGRwMGwgKyBkcTBsOworICAgICAgICAgICAgY29uc3QgaW50IGQzbCA9IGRwM2wg KyBkcTNsOworICAgICAgICAgICAgY29uc3QgaW50IGJldGE1MyA9IGJldGEgKiAzID4+IDU7Cisg ICAgICAgICAgICBjb25zdCBpbnQgYmV0YV80ID0gYmV0YSA+PiA0OworICAgICAgICAgICAgbWF4 X2xlbl9wID0gbGFyZ2VfcCA/IG1heF9sZW5fcCA6IDM7CisgICAgICAgICAgICBtYXhfbGVuX3Eg PSBsYXJnZV9xID8gbWF4X2xlbl9xIDogMzsKKworICAgICAgICAgICAgaWYgKGQwbCArIGQzbCA8 IGJldGEpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgc3AwbCA9IGFicyhQMyAtIFAwKSAr IChtYXhfbGVuX3AgPT0gNyA/IGFicyhQNyAtIFA2IC0gUDUgKyBQNCkgOiAwKTsKKyAgICAgICAg ICAgICAgICBjb25zdCBpbnQgc3EwbCA9IGFicyhRMCAtIFEzKSArIChtYXhfbGVuX3EgPT0gNyA/ IGFicyhRNCAtIFE1IC0gUTYgKyBRNykgOiAwKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQg c3AzbCA9IGFicyhUUDMgLSBUUDApICsgKG1heF9sZW5fcCA9PSA3ID8gYWJzKFRQNyAtIFRQNiAt IFRQNSArIFRQNCkgOiAwKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgc3EzbCA9IGFicyhU UTAgLSBUUTMpICsgKG1heF9sZW5fcSA9PSA3ID8gYWJzKFRRNCAtIFRRNSAtIFRRNiArIFRRNykg OiAwKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgc3AwID0gbGFyZ2VfcCA/ICgoc3AwbCAr IGFicyhQMyAtICAgUChtYXhfbGVuX3ApKSArIDEpID4+IDEpIDogc3AwbDsKKyAgICAgICAgICAg ICAgICBjb25zdCBpbnQgc3AzID0gbGFyZ2VfcCA/ICgoc3AzbCArIGFicyhUUDMgLSBUUChtYXhf bGVuX3ApKSArIDEpID4+IDEpIDogc3AzbDsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgc3Ew ID0gbGFyZ2VfcSA/ICgoc3EwbCArIGFicyhRMyAtICAgUShtYXhfbGVuX3EpKSArIDEpID4+IDEp IDogc3EwbDsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgc3EzID0gbGFyZ2VfcSA/ICgoc3Ez bCArIGFicyhUUTMgLSBUUShtYXhfbGVuX3EpKSArIDEpID4+IDEpIDogc3EzbDsKKyAgICAgICAg ICAgICAgICBpZiAoc3AwICsgc3EwIDwgYmV0YTUzICYmIGFicyhQMCAtIFEwKSA8IHRjMjUgJiYK KyAgICAgICAgICAgICAgICAgICAgc3AzICsgc3EzIDwgYmV0YTUzICYmIGFicyhUUDAgLSBUUTAp IDwgdGMyNSAmJgorICAgICAgICAgICAgICAgICAgICAoZDBsIDw8IDEpIDwgYmV0YV80ICYmIChk M2wgPDwgMSkgPCBiZXRhXzQpIHsKKyAgICAgICAgICAgICAgICAgICAgRlVOQyhsb29wX2ZpbHRl cl9sdW1hX2xhcmdlKShwaXgsIHhzdHJpZGUsIHlzdHJpZGUsIHRjLCBub19wLCBub19xLCBtYXhf bGVuX3AsIG1heF9sZW5fcSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZDAgKyBk MyA8IGJldGEpIHsKKyAgICAgICAgICAgIGlmIChtYXhfbGVuX3AgPiAyICYmIG1heF9sZW5fcSA+ IDIgJiYKKyAgICAgICAgICAgICAgICBhYnMoUDMgLSBQMCkgKyBhYnMoUTMgLSBRMCkgPCBiZXRh XzMgJiYgYWJzKFAwIC0gUTApIDwgdGMyNSAmJgorICAgICAgICAgICAgICAgIGFicyhUUDMgLSBU UDApICsgYWJzKFRRMyAtIFRRMCkgPCBiZXRhXzMgJiYgYWJzKFRQMCAtIFRRMCkgPCB0YzI1ICYm CisgICAgICAgICAgICAgICAgKGQwIDw8IDEpIDwgYmV0YV8yICYmIChkMyA8PCAxKSA8IGJldGFf MikgeworICAgICAgICAgICAgICAgIEZVTkMobG9vcF9maWx0ZXJfbHVtYV9zdHJvbmcpKHBpeCwg eHN0cmlkZSwgeXN0cmlkZSwgdGMsIG5vX3AsIG5vX3EpOworICAgICAgICAgICAgfSBlbHNlIHsg Ly8gd2VhayBmaWx0ZXJpbmcKKyAgICAgICAgICAgICAgICBpbnQgbmRfcCA9IDE7CisgICAgICAg ICAgICAgICAgaW50IG5kX3EgPSAxOworICAgICAgICAgICAgICAgIGlmIChtYXhfbGVuX3AgPiAx ICYmIG1heF9sZW5fcSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRwMCArIGRwMyA8 ICgoYmV0YSArIChiZXRhID4+IDEpKSA+PiAzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5k X3AgPSAyOworICAgICAgICAgICAgICAgICAgICBpZiAoZHEwICsgZHEzIDwgKChiZXRhICsgKGJl dGEgPj4gMSkpID4+IDMpKQorICAgICAgICAgICAgICAgICAgICAgICAgbmRfcSA9IDI7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEZVTkMobG9vcF9maWx0ZXJfbHVtYV93ZWFr KShwaXgsIHhzdHJpZGUsIHlzdHJpZGUsIHRjLCBiZXRhLCBub19wLCBub19xLCBuZF9wLCBuZF9x KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgRlVO Qyhsb29wX2ZpbHRlcl9jaHJvbWFfc3Ryb25nKShwaXhlbCAqcGl4LCBjb25zdCBwdHJkaWZmX3Qg eHN0cmlkZSwgY29uc3QgcHRyZGlmZl90IHlzdHJpZGUsCisgICAgY29uc3QgaW50IHNpemUsIGNv bnN0IGludDMyX3QgdGMsIGNvbnN0IHVpbnQ4X3Qgbm9fcCwgY29uc3QgdWludDhfdCBub19xKQor eworICAgIGZvciAoaW50IGQgPSAwOyBkIDwgc2l6ZTsgZCsrKSB7CisgICAgICAgIGNvbnN0IGlu dCBwMyA9IFAzOworICAgICAgICBjb25zdCBpbnQgcDIgPSBQMjsKKyAgICAgICAgY29uc3QgaW50 IHAxID0gUDE7CisgICAgICAgIGNvbnN0IGludCBwMCA9IFAwOworICAgICAgICBjb25zdCBpbnQg cTAgPSBRMDsKKyAgICAgICAgY29uc3QgaW50IHExID0gUTE7CisgICAgICAgIGNvbnN0IGludCBx MiA9IFEyOworICAgICAgICBjb25zdCBpbnQgcTMgPSBRMzsKKyAgICAgICAgaWYgKCFub19wKSB7 CisgICAgICAgICAgICBQMCA9IGF2X2NsaXAoKHAzICsgcDIgKyBwMSArIDIgKiBwMCArIHEwICsg cTEgKyBxMiArIDQpID4+IDMsIHAwIC0gdGMsIHAwICsgdGMpOworICAgICAgICAgICAgUDEgPSBh dl9jbGlwKCgyICogcDMgKyBwMiArIDIgKiBwMSArIHAwICsgcTAgKyBxMSArIDQpID4+IDMsIHAx IC0gdGMsIHAxICsgdGMpOworICAgICAgICAgICAgUDIgPSBhdl9jbGlwKCgzICogcDMgKyAyICog cDIgKyBwMSArIHAwICsgcTAgKyA0KSA+PiAzLCBwMiAtIHRjLCBwMiArIHRjICk7CisgICAgICAg IH0KKyAgICAgICAgaWYgKCFub19xKSB7CisgICAgICAgICAgICBRMCA9IGF2X2NsaXAoKHAyICsg cDEgKyBwMCArIDIgKiBxMCArIHExICsgcTIgKyBxMyArIDQpID4+IDMsIHEwIC0gdGMsIHEwICsg dGMpOworICAgICAgICAgICAgUTEgPSBhdl9jbGlwKChwMSArIHAwICsgcTAgKyAyICogcTEgKyBx MiArIDIgKiBxMyArIDQpID4+IDMsIHExIC0gdGMsIHExICsgdGMpOworICAgICAgICAgICAgUTIg PSBhdl9jbGlwKChwMCArIHEwICsgcTEgKyAyICogcTIgKyAzICogcTMgKyA0KSA+PiAzLCBxMiAt IHRjLCBxMiArIHRjKTsKKyAgICAgICAgfQorICAgICAgICBwaXggKz0geXN0cmlkZTsKKyAgICB9 Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMobG9vcF9maWx0ZXJfY2hyb21hX3N0cm9uZ19vbmVfc2lk ZSkocGl4ZWwgKnBpeCwgY29uc3QgcHRyZGlmZl90IHhzdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCB5 c3RyaWRlLAorICAgIGNvbnN0IGludCBzaXplLCBjb25zdCBpbnQzMl90IHRjLCBjb25zdCB1aW50 OF90IG5vX3AsIGNvbnN0IHVpbnQ4X3Qgbm9fcSkKK3sKKyAgICBmb3IgKGludCBkID0gMDsgZCA8 IHNpemU7IGQrKykgeworICAgICAgICBjb25zdCBpbnQgcDEgPSBQMTsKKyAgICAgICAgY29uc3Qg aW50IHAwID0gUDA7CisgICAgICAgIGNvbnN0IGludCBxMCA9IFEwOworICAgICAgICBjb25zdCBp bnQgcTEgPSBRMTsKKyAgICAgICAgY29uc3QgaW50IHEyID0gUTI7CisgICAgICAgIGNvbnN0IGlu dCBxMyA9IFEzOworICAgICAgICBpZiAoIW5vX3ApIHsKKyAgICAgICAgICAgIFAwID0gYXZfY2xp cCgoMyAqIHAxICsgMiAqIHAwICsgcTAgKyBxMSArIHEyICsgNCkgPj4gMywgcDAgLSB0YywgcDAg KyB0Yyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFub19xKSB7CisgICAgICAgICAgICBRMCA9 IGF2X2NsaXAoKDIgKiBwMSArIHAwICsgMiAqIHEwICsgcTEgKyBxMiArIHEzICsgNCkgPj4gMywg cTAgLSB0YywgcTAgKyB0Yyk7CisgICAgICAgICAgICBRMSA9IGF2X2NsaXAoKHAxICsgcDAgKyBx MCArIDIgKiBxMSArIHEyICsgMiAqIHEzICsgNCkgPj4gMywgcTEgLSB0YywgcTEgKyB0Yyk7Cisg ICAgICAgICAgICBRMiA9IGF2X2NsaXAoKHAwICsgcTAgKyBxMSArIDIgKiBxMiArIDMgKiBxMyAr IDQpID4+IDMsIHEyIC0gdGMsIHEyICsgdGMpOworICAgICAgICB9CisgICAgICAgIHBpeCArPSB5 c3RyaWRlOworICAgIH0KK30KKworc3RhdGljIHZvaWQgRlVOQyhsb29wX2ZpbHRlcl9jaHJvbWFf d2VhaykocGl4ZWwgKnBpeCwgY29uc3QgcHRyZGlmZl90IHhzdHJpZGUsIGNvbnN0IHB0cmRpZmZf dCB5c3RyaWRlLAorICAgIGNvbnN0IGludCBzaXplLCBjb25zdCBpbnQzMl90IHRjLCBjb25zdCB1 aW50OF90IG5vX3AsIGNvbnN0IHVpbnQ4X3Qgbm9fcSkKK3sKKyAgICBmb3IgKGludCBkID0gMDsg ZCA8IHNpemU7IGQrKykgeworICAgICAgICBpbnQgZGVsdGEwOworICAgICAgICBjb25zdCBpbnQg cDEgPSBQMTsKKyAgICAgICAgY29uc3QgaW50IHAwID0gUDA7CisgICAgICAgIGNvbnN0IGludCBx MCA9IFEwOworICAgICAgICBjb25zdCBpbnQgcTEgPSBRMTsKKyAgICAgICAgZGVsdGEwID0gYXZf Y2xpcCgoKChxMCAtIHAwKSAqIDQpICsgcDEgLSBxMSArIDQpID4+IDMsIC10YywgdGMpOworICAg ICAgICBpZiAoIW5vX3ApCisgICAgICAgICAgICBQMCA9IGF2X2NsaXBfcGl4ZWwocDAgKyBkZWx0 YTApOworICAgICAgICBpZiAoIW5vX3EpCisgICAgICAgICAgICBRMCA9IGF2X2NsaXBfcGl4ZWwo cTAgLSBkZWx0YTApOworICAgICAgICBwaXggKz0geXN0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRp YyB2b2lkIEZVTkModnZjX2xvb3BfZmlsdGVyX2Nocm9tYSkodWludDhfdCAqX3BpeCwgY29uc3Qg cHRyZGlmZl90ICBfeHN0cmlkZSwgY29uc3QgcHRyZGlmZl90IF95c3RyaWRlLAorICAgIGNvbnN0 IGludDMyX3QgKl9iZXRhLCBjb25zdCBpbnQzMl90ICpfdGMsIGNvbnN0IHVpbnQ4X3QgKl9ub19w LCBjb25zdCB1aW50OF90ICpfbm9fcSwKKyAgICBjb25zdCB1aW50OF90ICpfbWF4X2xlbl9wLCBj b25zdCB1aW50OF90ICpfbWF4X2xlbl9xLCBjb25zdCBpbnQgc2hpZnQpCit7CisgICAgY29uc3Qg cHRyZGlmZl90IHhzdHJpZGUgPSBfeHN0cmlkZSAvIHNpemVvZihwaXhlbCk7CisgICAgY29uc3Qg cHRyZGlmZl90IHlzdHJpZGUgPSBfeXN0cmlkZSAvIHNpemVvZihwaXhlbCk7CisgICAgY29uc3Qg aW50IHNpemUgICAgICAgICAgPSBzaGlmdCA/IDIgOiA0OworICAgIGNvbnN0IGludCBlbmQgICAg ICAgICAgID0gOCAvIHNpemU7ICAgICAgICAgLy8gOCBzYW1wbGVzIGEgbG9vcAorCisgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBlbmQ7IGkrKykgeworICAgICAgICBwaXhlbCAqcGl4ICAgICAgICAg ID0gKHBpeGVsICopX3BpeCArIGkgKiBzaXplICogeXN0cmlkZTsKKyAgICAgICAgY29uc3QgdWlu dDhfdCBub19wICA9IF9ub19wW2ldOworICAgICAgICBjb25zdCB1aW50OF90IG5vX3EgID0gX25v X3FbaV07CisgICAgICAgIGNvbnN0IGludCBiZXRhICAgICAgPSBfYmV0YVtpXSA8PCAoQklUX0RF UFRIIC0gOCk7CisgICAgICAgIGNvbnN0IGludCBiZXRhXzMgICAgPSBiZXRhID4+IDM7CisgICAg ICAgIGNvbnN0IGludCBiZXRhXzIgICAgPSBiZXRhID4+IDI7CisKKyNpZiBCSVRfREVQVEggPCAx MAorICAgICAgICBjb25zdCBpbnQgdGMgPSAoX3RjW2ldICsgKDEgPDwgKDkgLSBCSVRfREVQVEgp KSkgPj4gKDEwIC0gQklUX0RFUFRIKTsKKyNlbHNlCisgICAgICAgIGNvbnN0IGludCB0YyA9IF90 Y1tpXSA8PCAoQklUX0RFUFRIIC0gMTApOworI2VuZGlmCisgICAgICAgIGNvbnN0IGludCB0YzI1 ICAgICAgPSAoKHRjICogNSArIDEpID4+IDEpOworCisgICAgICAgIHVpbnQ4X3QgbWF4X2xlbl9w ICAgPSBfbWF4X2xlbl9wW2ldOworICAgICAgICB1aW50OF90IG1heF9sZW5fcSAgID0gX21heF9s ZW5fcVtpXTsKKworICAgICAgICBpZiAoIW1heF9sZW5fcCB8fCAhbWF4X2xlbl9xIHx8ICF0YykK KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChtYXhfbGVuX3EgPT0gMyl7Cisg ICAgICAgICAgICBjb25zdCBpbnQgcDFuICA9IHNoaWZ0ID8gRlAxIDogVFAxOworICAgICAgICAg ICAgY29uc3QgaW50IHAybiA9IG1heF9sZW5fcCA9PSAxID8gcDFuIDogKHNoaWZ0ID8gRlAyIDog VFAyKTsKKyAgICAgICAgICAgIGNvbnN0IGludCBwMG4gID0gc2hpZnQgPyBGUDAgOiBUUDA7Cisg ICAgICAgICAgICBjb25zdCBpbnQgcTBuICA9IHNoaWZ0ID8gRlEwIDogVFEwOworICAgICAgICAg ICAgY29uc3QgaW50IHExbiAgPSBzaGlmdCA/IEZRMSA6IFRRMTsKKyAgICAgICAgICAgIGNvbnN0 IGludCBxMm4gID0gc2hpZnQgPyBGUTIgOiBUUTI7CisgICAgICAgICAgICBjb25zdCBpbnQgcDMg ICA9IG1heF9sZW5fcCA9PSAxID8gUDEgOiBQMzsKKyAgICAgICAgICAgIGNvbnN0IGludCBwMiAg ID0gbWF4X2xlbl9wID09IDEgPyBQMSA6IFAyOworICAgICAgICAgICAgY29uc3QgaW50IHAxICAg PSBQMTsKKyAgICAgICAgICAgIGNvbnN0IGludCBwMCAgID0gUDA7CisgICAgICAgICAgICBjb25z dCBpbnQgZHAwICA9IGFicyhwMiAtIDIgKiBwMSArIHAwKTsKKyAgICAgICAgICAgIGNvbnN0IGlu dCBkcTAgID0gYWJzKFEyIC0gMiAqIFExICsgUTApOworCisgICAgICAgICAgICBjb25zdCBpbnQg ZHAxID0gYWJzKHAybiAtIDIgKiBwMW4gKyBwMG4pOworICAgICAgICAgICAgY29uc3QgaW50IGRx MSA9IGFicyhxMm4gLSAyICogcTFuICsgcTBuKTsKKyAgICAgICAgICAgIGNvbnN0IGludCBkMCAg PSBkcDAgKyBkcTA7CisgICAgICAgICAgICBjb25zdCBpbnQgZDEgID0gZHAxICsgZHExOworCisg ICAgICAgICAgICBpZiAoZDAgKyBkMSA8IGJldGEpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBp bnQgcDNuID0gbWF4X2xlbl9wID09IDEgPyBwMW4gOiAoc2hpZnQgPyBGUDMgOiBUUDMpOworICAg ICAgICAgICAgICAgIGNvbnN0IGludCBxM24gPSBzaGlmdCA/IEZRMyA6IFRRMzsKKyAgICAgICAg ICAgICAgICBjb25zdCBpbnQgZHNhbTAgPSAoZDAgPDwgMSkgPCBiZXRhXzIgJiYgKGFicyhwMyAt IHAwKSArIGFicyhRMCAtIFEzKSAgICAgPCBiZXRhXzMpICYmCisgICAgICAgICAgICAgICAgICAg IGFicyhwMCAtIFEwKSAgIDwgdGMyNTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgZHNhbTEg PSAoZDEgPDwgMSkgPCBiZXRhXzIgJiYgKGFicyhwM24gLSBwMG4pICsgYWJzKHEwbiAtIHEzbikg PCBiZXRhXzMpICYmCisgICAgICAgICAgICAgICAgICAgIGFicyhwMG4gLSBxMG4pIDwgdGMyNTsK KyAgICAgICAgICAgICAgICBpZiAoIWRzYW0wIHx8ICFkc2FtMSkKKyAgICAgICAgICAgICAgICAg ICAgbWF4X2xlbl9wID0gbWF4X2xlbl9xID0gMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICAgICAgbWF4X2xlbl9wID0gbWF4X2xlbl9xID0gMTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorCisgICAgICAgIGlmIChtYXhfbGVuX3AgPT0gMyAmJiBtYXhfbGVuX3EgPT0gMykK KyAgICAgICAgICAgIEZVTkMobG9vcF9maWx0ZXJfY2hyb21hX3N0cm9uZykocGl4LCB4c3RyaWRl LCB5c3RyaWRlLCBzaXplLCB0Yywgbm9fcCwgbm9fcSk7CisgICAgICAgIGVsc2UgaWYgKG1heF9s ZW5fcSA9PSAzKQorICAgICAgICAgICAgRlVOQyhsb29wX2ZpbHRlcl9jaHJvbWFfc3Ryb25nX29u ZV9zaWRlKShwaXgsIHhzdHJpZGUsIHlzdHJpZGUsIHNpemUsIHRjLCBub19wLCBub19xKTsKKyAg ICAgICAgZWxzZQorICAgICAgICAgICAgRlVOQyhsb29wX2ZpbHRlcl9jaHJvbWFfd2VhaykocGl4 LCB4c3RyaWRlLCB5c3RyaWRlLCBzaXplLCB0Yywgbm9fcCwgbm9fcSk7CisgICAgfQorfQorCitz dGF0aWMgdm9pZCBGVU5DKHZ2Y19oX2xvb3BfZmlsdGVyX2Nocm9tYSkodWludDhfdCAqcGl4LCBw dHJkaWZmX3Qgc3RyaWRlLAorICAgIGNvbnN0IGludDMyX3QgKmJldGEsIGNvbnN0IGludDMyX3Qg KnRjLCBjb25zdCB1aW50OF90ICpub19wLCBjb25zdCB1aW50OF90ICpub19xLAorICAgIGNvbnN0 IHVpbnQ4X3QgKm1heF9sZW5fcCwgY29uc3QgdWludDhfdCAqbWF4X2xlbl9xLCBpbnQgc2hpZnQp Cit7CisgICAgRlVOQyh2dmNfbG9vcF9maWx0ZXJfY2hyb21hKShwaXgsIHN0cmlkZSwgc2l6ZW9m KHBpeGVsKSwgYmV0YSwgdGMsCisgICAgICAgIG5vX3AsIG5vX3EsIG1heF9sZW5fcCwgbWF4X2xl bl9xLCBzaGlmdCk7Cit9CisKK3N0YXRpYyB2b2lkIEZVTkModnZjX3ZfbG9vcF9maWx0ZXJfY2hy b21hKSh1aW50OF90ICpwaXgsIHB0cmRpZmZfdCBzdHJpZGUsCisgICAgY29uc3QgaW50MzJfdCAq YmV0YSwgY29uc3QgaW50MzJfdCAqdGMsIGNvbnN0IHVpbnQ4X3QgKm5vX3AsIGNvbnN0IHVpbnQ4 X3QgKm5vX3EsCisgICAgY29uc3QgdWludDhfdCAqbWF4X2xlbl9wLCBjb25zdCB1aW50OF90ICpt YXhfbGVuX3EsIGludCBzaGlmdCkKK3sKKyAgICBGVU5DKHZ2Y19sb29wX2ZpbHRlcl9jaHJvbWEp KHBpeCwgc2l6ZW9mKHBpeGVsKSwgc3RyaWRlLCBiZXRhLCB0YywKKyAgICAgICAgbm9fcCwgbm9f cSwgIG1heF9sZW5fcCwgbWF4X2xlbl9xLCBzaGlmdCk7Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMo dnZjX2hfbG9vcF9maWx0ZXJfbHVtYSkodWludDhfdCAqcGl4LCBwdHJkaWZmX3Qgc3RyaWRlLAor ICAgIGNvbnN0IGludDMyX3QgKmJldGEsIGNvbnN0IGludDMyX3QgKnRjLCBjb25zdCB1aW50OF90 ICpub19wLCBjb25zdCB1aW50OF90ICpub19xLAorICAgIGNvbnN0IHVpbnQ4X3QgKm1heF9sZW5f cCwgY29uc3QgdWludDhfdCAqbWF4X2xlbl9xLCBpbnQgaG9yX2N0dV9lZGdlKQoreworICAgIEZV TkModnZjX2xvb3BfZmlsdGVyX2x1bWEpKHBpeCwgc3RyaWRlLCBzaXplb2YocGl4ZWwpLCBiZXRh LCB0YywKKyAgICAgICAgbm9fcCwgbm9fcSwgbWF4X2xlbl9wLCBtYXhfbGVuX3EsIGhvcl9jdHVf ZWRnZSk7Cit9CisKK3N0YXRpYyB2b2lkIEZVTkModnZjX3ZfbG9vcF9maWx0ZXJfbHVtYSkodWlu dDhfdCAqcGl4LCBwdHJkaWZmX3Qgc3RyaWRlLAorICAgIGNvbnN0IGludDMyX3QgKmJldGEsIGNv bnN0IGludDMyX3QgKnRjLCBjb25zdCB1aW50OF90ICpub19wLCBjb25zdCB1aW50OF90ICpub19x LAorICAgIGNvbnN0IHVpbnQ4X3QgKm1heF9sZW5fcCwgY29uc3QgdWludDhfdCAqbWF4X2xlbl9x LCBpbnQgaG9yX2N0dV9lZGdlKQoreworICAgIEZVTkModnZjX2xvb3BfZmlsdGVyX2x1bWEpKHBp eCwgc2l6ZW9mKHBpeGVsKSwgc3RyaWRlLCBiZXRhLCB0YywKKyAgICAgICAgbm9fcCwgbm9fcSwg bWF4X2xlbl9wLCBtYXhfbGVuX3EsIGhvcl9jdHVfZWRnZSk7Cit9CisKK3N0YXRpYyBpbnQgRlVO Qyh2dmNfbG9vcF9sYWRmX2xldmVsKShjb25zdCB1aW50OF90ICpfcGl4LCBjb25zdCBwdHJkaWZm X3QgX3hzdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCBfeXN0cmlkZSkKK3sKKyAgICBjb25zdCBwaXhl bCAqcGl4ICAgICAgICA9IChwaXhlbCAqKV9waXg7CisgICAgY29uc3QgcHRyZGlmZl90IHhzdHJp ZGUgPSBfeHN0cmlkZSAvIHNpemVvZihwaXhlbCk7CisgICAgY29uc3QgcHRyZGlmZl90IHlzdHJp ZGUgPSBfeXN0cmlkZSAvIHNpemVvZihwaXhlbCk7CisgICAgcmV0dXJuIChQMCArIFRQMCArIFEw ICsgVFEwKSA+PiAyOworfQorCitzdGF0aWMgaW50IEZVTkModnZjX2hfbG9vcF9sYWRmX2xldmVs KShjb25zdCB1aW50OF90ICpwaXgsIHB0cmRpZmZfdCBzdHJpZGUpCit7CisgICAgcmV0dXJuIEZV TkModnZjX2xvb3BfbGFkZl9sZXZlbCkocGl4LCBzdHJpZGUsIHNpemVvZihwaXhlbCkpOworfQor CitzdGF0aWMgaW50IEZVTkModnZjX3ZfbG9vcF9sYWRmX2xldmVsKShjb25zdCB1aW50OF90ICpw aXgsIHB0cmRpZmZfdCBzdHJpZGUpCit7CisgICAgcmV0dXJuIEZVTkModnZjX2xvb3BfbGFkZl9s ZXZlbCkocGl4LCBzaXplb2YocGl4ZWwpLCBzdHJpZGUpOworfQorCisjdW5kZWYgUDcKKyN1bmRl ZiBQNgorI3VuZGVmIFA1CisjdW5kZWYgUDQKKyN1bmRlZiBQMworI3VuZGVmIFAyCisjdW5kZWYg UDEKKyN1bmRlZiBQMAorI3VuZGVmIFEwCisjdW5kZWYgUTEKKyN1bmRlZiBRMgorI3VuZGVmIFEz CisjdW5kZWYgUTQKKyN1bmRlZiBRNQorI3VuZGVmIFE2CisjdW5kZWYgUTcKKworI3VuZGVmIFRQ NworI3VuZGVmIFRQNgorI3VuZGVmIFRQNQorI3VuZGVmIFRQNAorI3VuZGVmIFRQMworI3VuZGVm IFRQMgorI3VuZGVmIFRQMQorI3VuZGVmIFRQMAorI3VuZGVmIFRRMAorI3VuZGVmIFRRMQorI3Vu ZGVmIFRRMgorI3VuZGVmIFRRMworI3VuZGVmIFRRNAorI3VuZGVmIFRRNQorI3VuZGVmIFRRNgor I3VuZGVmIFRRNworCitzdGF0aWMgdm9pZCBGVU5DKGZmX3Z2Y19sbWNzX2RzcF9pbml0KShWVkNM TUNTRFNQQ29udGV4dCAqY29uc3QgbG1jcykKK3sKKyAgICBsbWNzLT5maWx0ZXIgPSBGVU5DKGxt Y3NfZmlsdGVyX2x1bWEpOworfQorCitzdGF0aWMgdm9pZCBGVU5DKGZmX3Z2Y19sZl9kc3BfaW5p dCkoVlZDTEZEU1BDb250ZXh0ICpjb25zdCBsZikKK3sKKyAgICBsZi0+bGFkZl9sZXZlbFswXSAg ICAgID0gRlVOQyh2dmNfaF9sb29wX2xhZGZfbGV2ZWwpOworICAgIGxmLT5sYWRmX2xldmVsWzFd ICAgICAgPSBGVU5DKHZ2Y192X2xvb3BfbGFkZl9sZXZlbCk7CisgICAgbGYtPmZpbHRlcl9sdW1h WzBdICAgICA9IEZVTkModnZjX2hfbG9vcF9maWx0ZXJfbHVtYSk7CisgICAgbGYtPmZpbHRlcl9s dW1hWzFdICAgICA9IEZVTkModnZjX3ZfbG9vcF9maWx0ZXJfbHVtYSk7CisgICAgbGYtPmZpbHRl cl9jaHJvbWFbMF0gICA9IEZVTkModnZjX2hfbG9vcF9maWx0ZXJfY2hyb21hKTsKKyAgICBsZi0+ ZmlsdGVyX2Nocm9tYVsxXSAgID0gRlVOQyh2dmNfdl9sb29wX2ZpbHRlcl9jaHJvbWEpOworfQor CitzdGF0aWMgdm9pZCBGVU5DKGZmX3Z2Y19zYW9fZHNwX2luaXQpKFZWQ1NBT0RTUENvbnRleHQg KmNvbnN0IHNhbykKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHNh by0+YmFuZF9maWx0ZXIpOyBpKyspCisgICAgICAgIHNhby0+YmFuZF9maWx0ZXJbaV0gPSBGVU5D KHNhb19iYW5kX2ZpbHRlcik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVN UyhzYW8tPmVkZ2VfZmlsdGVyKTsgaSsrKQorICAgICAgICBzYW8tPmVkZ2VfZmlsdGVyW2ldID0g RlVOQyhzYW9fZWRnZV9maWx0ZXIpOworICAgIHNhby0+ZWRnZV9yZXN0b3JlWzBdID0gRlVOQyhz YW9fZWRnZV9yZXN0b3JlXzApOworICAgIHNhby0+ZWRnZV9yZXN0b3JlWzFdID0gRlVOQyhzYW9f ZWRnZV9yZXN0b3JlXzEpOworfQorCitzdGF0aWMgdm9pZCBGVU5DKGZmX3Z2Y19hbGZfZHNwX2lu aXQpKFZWQ0FMRkRTUENvbnRleHQgKmNvbnN0IGFsZikKK3sKKyAgICBhbGYtPmZpbHRlcltMVU1B XSAgICA9IEZVTkMoYWxmX2ZpbHRlcl9sdW1hKTsKKyAgICBhbGYtPmZpbHRlcltDSFJPTUFdICA9 IEZVTkMoYWxmX2ZpbHRlcl9jaHJvbWEpOworICAgIGFsZi0+ZmlsdGVyX2NjICAgICAgID0gRlVO QyhhbGZfZmlsdGVyX2NjKTsKKyAgICBhbGYtPmNsYXNzaWZ5ICAgICAgICA9IEZVTkMoYWxmX2Ns YXNzaWZ5KTsKKyAgICBhbGYtPnJlY29uX2NvZWZmX2FuZF9jbGlwID0gRlVOQyhhbGZfcmVjb25f Y29lZmZfYW5kX2NsaXApOworfQotLSAKMi4yNS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1k ZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBl Zy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBl Zy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==