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 5BB3546CCF for ; Fri, 7 Jul 2023 14:22:07 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B1A6268C813; Fri, 7 Jul 2023 17:22:05 +0300 (EEST) Received: from APC01-PSA-obe.outbound.protection.outlook.com (mail-psaapc01olkn2035.outbound.protection.outlook.com [40.92.52.35]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 171AF68C6E5 for ; Fri, 7 Jul 2023 17:21:58 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eHBCY5ZqlWgbZ6nnyi9SdIK39QxG87L5H677ZCA0oVID6AZy1MjmbHTQhecKqRIg+l8jMQFvk49IJj63Ef90wNBu0T5GnGf/WoxQyl9VdX0YQPphvkfUgRw4quoM53g6EKywNUVeEFEJNo/iJHJONEnlxZhiImJFVMX5iLHhWafaFVdPcJYDlR99MDbCCLd/jb/Q+ya61AV0SWdsHvuwMC/PnXs+ln9x/wD/FzAuh4JXuTmmOD0J42LtCgSm2EwV7Ajrf8ZOR+RhKOhlYsEHxZEhQLsY1t/k37K3WPYtSOtDyjMURlk3hq1O+bTik6tkyxKHY3ON5K5qFoN0zpQSyA== 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=IsliKgD7R6gk0766ahZ5u/HzmS1mW3zL7MdmrRUMok8=; b=kli96K2FuDx35em7ngellruA1BbjB6Ol0UbSFtWBDenVh86nJqkvHEIgrVK+mYbJC1YgGYHhuxM29bXr/OX3aYDtfLBvVUCaQETKvieKOEp6dkl8H6qu2TCSFjrkPVZyZ6BXrTIQKqAP87bEQU7Gw7U10saJtMu5I7agV7xhU4tO9Kz3rWhJa59tbD0kF7iTUgLg9LZPP+NRNIcoAAwGjFBAab2BCzxBDWXjBfs3FUXxhzyWFgOCPv50UyulETRzMMtJxiBTjd6y65wkLebJrFdd8arSDF/dR65MMT5NNiH7eUqskk2NVyxc7mc3pySGap+gWK135DoeUp6lsiWQOA== 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=IsliKgD7R6gk0766ahZ5u/HzmS1mW3zL7MdmrRUMok8=; b=MAz9uK05cf/pHsibX5EQGvwfpRIcdYmJqRnJCKQ3mTiL2jqF0MZOx1zNrspl85RKL0Fmasr7LvBWTaR4sFG5IGNBZzmn7qV+eamfkdCHPCGkWs4BrwyKDTM7Mo1jgrqkPuR3TnD+suCKLPxLSRKVLp4aGcHzFK8THmaHGRQZmmOecRemijCawY+qML/fflqmMdOsc9K+9B+sAeuN/4q+z32OBhexEU7aMwLwGq/iDiFTT//RGkAC12geZxTFcS5K3uG5wdHz71+m1ZyHuk4AbyhY+0Iphyhs6jDgiIKRFLbe05cS7VkKpZiq6i+1lvRmhHpuqLxTNMFWuOs9KS3h8g== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by KL1PR0601MB5445.apcprd06.prod.outlook.com (2603:1096:820:c0::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6565.25; Fri, 7 Jul 2023 14:05:59 +0000 Received: from TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::7d80:1294:fd54:a7f]) by TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::7d80:1294:fd54:a7f%7]) with mapi id 15.20.6565.016; Fri, 7 Jul 2023 14:05:59 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Fri, 7 Jul 2023 22:05:36 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230707140540.10279-1-nuomi2021@gmail.com> References: <20230707140540.10279-1-nuomi2021@gmail.com> X-TMN: [I4sX6dlAFR2gZc+UAY17nl4ykt+DNfcn] X-ClientProxiedBy: TYCP286CA0251.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:456::20) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20230707140540.10279-11-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|KL1PR0601MB5445:EE_ X-MS-Office365-Filtering-Correlation-Id: f4c63aa0-8a71-4938-0fe6-08db7ef349d6 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: z1RJes5tWo57E2iJATIFm0J+10nILEDCRDCjdLm2RfnOMGFoaMxWoqQexQC54MlAbkT9FgxLapHjWNUbPfUKkM7fOcM21j7OB0ej6ruuIJ/F2cPaJ5jodZxNQgSwNlqIrw2/VOwKs4Nis1h48clv0h+fKyfJ3QTj5LJeQrm5pt5NQjvFm1aCpgqOfCWAe9JU6SJLZXDwVoR7+nsNBPnrindq9tywZq2MCkLhHTEfjdpSf1SvHkp2xDvSmoyzJ1dKYUUecFAP//Qxp2tM9/jX6TforAH/3Cm/Z9WzID9pmdc1P2z03gWvrd0gjolongCoy/jt7uT2ThXPQu63bzHpqQ0qYvQS61+VBVWC0mvoriABFNasOTwhHm4nGQhKwUNkDT6YHSNbVmZTk2kgHveT/Q9FlN+gUwvkKtamkE21tUigVX7xxHV3JGnTIEf2C+91Kni7PRlszW9hVg66aSoAFePUDq0DutHKvFl0sUuvLmTuWZXvTz7qrSon4u2gxMPLS/EU5EkO0lPhhoxCJ16OZ7E1qsLe7M/8gOfrG/5AZavbPtPh68cuqlTv3pS0yLqG7lUPXS5zYowSv+zi5wu7vF6VBwYu2USmk+YwexdPw04= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?OEFUSFRHTmZSRFhqb2JheGtvQUJvZklMUlpISjVtem1vZWJzQkpXcUZiZWEv?= =?utf-8?B?SUc5YW1ZZUJXUVB4QkFNaEY3cHZhamQyKzlYK3RNQkhXSkdhbkw1ZFNENllo?= =?utf-8?B?V3hkWEtrdlpiQi9iS3lndkcrcjQwZ3U3ajRsc1VuVlRzNDk0bTI5cGQ3Zm9I?= =?utf-8?B?VjJlT2RFbVJ6NERGUEdOU0pndUNZUW1oaVdSWXAvWEhzQzN0b1JCa2JvT0Zh?= =?utf-8?B?RGJjRnFaZXVxZ3ZRWU1CaFRHbllzbThQQWNkZTVMd21DdXNmSnRaTmVvNTEy?= =?utf-8?B?ZHg3YmFxb0hzWDd3MDVZeE1sVkVSYnc5YkkybDE4RmppWDZKVlJIalpjUldj?= =?utf-8?B?L1luaG5hMHorSjBiK25sTFR4c1ZLNVVEOWFlVmtVOE9BY2NoUExWS1oxNXdO?= =?utf-8?B?RGhqWWk4VDFEa3JkdnRsaExhcG94Yk52Kzl3eGhEMG9ONWdsZ2pkeitER043?= =?utf-8?B?dFZaeml4MlVTalZBbVZlV2ZBT3hCVUJDdTBnTmNRSGU2U2tUUEk0N0p2QUxv?= =?utf-8?B?TVNTbFhHcFJrbUt6dmQyUFBNMVB1K3Y5Y0JwUy9hZzhDdUhsNGVBKzRSVlRL?= =?utf-8?B?T3ljRTRtU0pxc3FkYkRqZ3EvL1FoVVUrSEJ1VWhkYklKTnh0ek5rbGpPUDdo?= =?utf-8?B?QWp5Q1BZTSs3TjU3QjlIbi9RK0JhL01PRjhBdE9mK0VRV21uU2VXKzlTUDY3?= =?utf-8?B?TWhFelZRTHQyTDkzcmJVbGhueXZ3WE1IQU5keVhSREdHMjdHM2htbVZiTVVD?= =?utf-8?B?VmxZSEdjV2RMa1J0Wld1SW5RRnhVUzlqVjhGWEcxa0tKQVVXNTBudjVDbUoy?= =?utf-8?B?YVoxQ3VkNHYrdzFTbFlkMFMxQmthTkhyMko2MUIrYVR6TnF5SmJrNURLWWd5?= =?utf-8?B?bzJuaU95dlAvL2hWSzBIRi9SRXMyZ1JicVVZQ2FHaEdleGtUQVdNR0JTL2hz?= =?utf-8?B?UUFKYXliZ1A4Q2MwdTk2aXJwRUtYSEYrV1hpUU1uaUUwNDZkcGw2dnQ5OTZr?= =?utf-8?B?aFNaeFlrNHI5cE81NEdZZHBUa1RwMHVWYXpvekZzZ04xSXUrUmcvVlhGS0lS?= =?utf-8?B?QnpuU0M3NEhWaW5tYzVPRHI3bmI1YUp1SDZvZ05zQUIxSHd3eUNxSkxiMG5I?= =?utf-8?B?dmNsdlBMMFVTWWxCVGpoUUIwcW50Nmk0Tll4Yitzdm51Qzd0UGVuZUEzMXEy?= =?utf-8?B?MG1pQUJsc3FYNWNrS2tOaWk1RWplYjNuMWsvNFVXRC9Xd29INWx6Vkx0elVa?= =?utf-8?B?QkxoelJyU2JscmhiWC9NVFhZZzNMcnVneE44S1Zod3RGaUNvZEZyeVNDaDZS?= =?utf-8?B?V1NZV05DUXVHQ0pkMjBRajdua1VFY3h0dzlhTmk0ZGNFOUlGRGQ4WFcxb2pM?= =?utf-8?B?TGhsbzVvT3FNMG1vbVpDc1I5QnA2QytaZnpyM2trNjFMZEtXanZvc3dsRTlm?= =?utf-8?B?NDkzY00xYytYblg1UitVazN4Y2c4b3MvNDRvZjlKMkJ4VW5HR1loRmNHbmxk?= =?utf-8?B?VXFWY2d0N3A5VUpBWUVkM0Z5OUhENWFGRFd1cCtlck5lclhMQW5BeEJkL0sw?= =?utf-8?B?QXh4cktTNEpSOWZJSlZvRCtSeFNBaTJkRDRYQWVnbjdVSFhRY1FsbUNMaVFU?= =?utf-8?B?SERya1pvRWw4aktuYmFuYTc1TFJmNU5BTHNadkgyQVg0eVNGc0VYc0Nucjl1?= =?utf-8?Q?ykA8jZxubU9ia6xf1APY?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f4c63aa0-8a71-4938-0fe6-08db7ef349d6 X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2023 14:05:59.0101 (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: KL1PR0601MB5445 Subject: [FFmpeg-devel] [PATCH v2 10/14] 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: Nuo Mi 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: LS0tCiBsaWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgICAxICsKIGxpYmF2 Y29kZWMvdnZjL3Z2Y19jdHUuaCAgICAgICAgICAgICB8ICAgIDIgKwogbGliYXZjb2RlYy92dmMv dnZjX2ZpbHRlci5jICAgICAgICAgIHwgMTMzMCArKysrKysrKysrKysrKysrKysrKysrKysrKwog bGliYXZjb2RlYy92dmMvdnZjX2ZpbHRlci5oICAgICAgICAgIHwgICA3MCArKwogbGliYXZjb2Rl Yy92dmMvdnZjX2ZpbHRlcl90ZW1wbGF0ZS5jIHwgMTA4OCArKysrKysrKysrKysrKysrKysrKysK IDUgZmlsZXMgY2hhbmdlZCwgMjQ5MSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg bGliYXZjb2RlYy92dmMvdnZjX2ZpbHRlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2Rl Yy92dmMvdnZjX2ZpbHRlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92dmMvdnZj X2ZpbHRlcl90ZW1wbGF0ZS5jCgpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUg Yi9saWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZQppbmRleCA4MzAyMWU0OTUzLi4zMmQwOGZmNjBiIDEw MDY0NAotLS0gYS9saWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZQorKysgYi9saWJhdmNvZGVjL3Z2Yy9N YWtlZmlsZQpAQCAtNiw2ICs2LDcgQEAgT0JKUy0kKENPTkZJR19WVkNfREVDT0RFUikgICAgICAg ICAgKz0gIHZ2Yy92dmNkZWMubyAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2dmMvdnZjX2NhYmFjLm8gICAgICAgICBcCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19jdHUubyAgICAgICAgICAgXAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2Yy92dmNfZGF0YS5vICAgICAg ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dmMvdnZjX2Zp bHRlci5vICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dnZjL3Z2Y19pbnRlci5vICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZ2Yy92dmNfaW50cmEubyAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2dmMvdnZjX2l0eF8xZC5vICAgICAgICBcCmRpZmYgLS1naXQg YS9saWJhdmNvZGVjL3Z2Yy92dmNfY3R1LmggYi9saWJhdmNvZGVjL3Z2Yy92dmNfY3R1LmgKaW5k ZXggNzYyYWM1N2YwYS4uZGY1Njg0OGUxMyAxMDA2NDQKLS0tIGEvbGliYXZjb2RlYy92dmMvdnZj X2N0dS5oCisrKyBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19jdHUuaApAQCAtNDA0LDUgKzQwNCw3IEBA IHN0cnVjdCBBTEZQYXJhbXMgewogdm9pZCBmZl92dmNfc2V0X25laWdoYm91cl9hdmFpbGFibGUo VlZDTG9jYWxDb250ZXh0ICpsYywgaW50IHgwLCBpbnQgeTAsIGludCB3LCBpbnQgaCk7CiB2b2lk IGZmX3Z2Y19kZWNvZGVfbmVpZ2hib3VyKFZWQ0xvY2FsQ29udGV4dCAqbGMsIGludCB4X2N0Yiwg aW50IHlfY3RiLCBpbnQgcngsIGludCByeSwgaW50IHJzKTsKIHZvaWQgZmZfdnZjX2N0dV9mcmVl X2N1cyhDVFUgKmN0dSk7CitpbnQgZmZfdnZjX2dldF9xUHkoY29uc3QgVlZDRnJhbWVDb250ZXh0 ICpmYywgaW50IHhjLCBpbnQgeWMpOwogdm9pZCBmZl92dmNfZXBfaW5pdF9zdGF0X2NvZWZmKEVu dHJ5UG9pbnQgKmVwLCBpbnQgYml0X2RlcHRoLCBpbnQgcGVyc2lzdGVudF9yaWNlX2FkYXB0YXRp b25fZW5hYmxlZF9mbGFnKTsKKwogI2VuZGlmIC8vIEFWQ09ERUNfVlZDX0NUVV9ICmRpZmYgLS1n aXQgYS9saWJhdmNvZGVjL3Z2Yy92dmNfZmlsdGVyLmMgYi9saWJhdmNvZGVjL3Z2Yy92dmNfZmls dGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uODk1YmNhNjNmYQot LS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19maWx0ZXIuYwpAQCAtMCwwICsx LDEzMzAgQEAKKy8qCisgKiBWVkMgZmlsdGVycworICoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBO dW8gTWkKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVn IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRo ZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUg InZ2Y19jdHUuaCIKKyNpbmNsdWRlICJ2dmNfZGF0YS5oIgorI2luY2x1ZGUgInZ2Y19maWx0ZXIu aCIKKyNpbmNsdWRlICJ2dmNfcmVmcy5oIgorCisjZGVmaW5lIExFRlQgICAgICAgIDAKKyNkZWZp bmUgVE9QICAgICAgICAgMQorI2RlZmluZSBSSUdIVCAgICAgICAyCisjZGVmaW5lIEJPVFRPTSAg ICAgIDMKKyNkZWZpbmUgTUFYX0VER0VTICAgNAorCisvL1RhYmxlIDQzIERlcml2YXRpb24gb2Yg dGhyZXNob2xkIHZhcmlhYmxlcyBiZXRhJyBhbmQgdGMnIGZyb20gaW5wdXQgUQorc3RhdGljIGNv bnN0IHVpbnQxNl90IHRjdGFibGVbNjZdID0geworICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwK KyAgICAgIDAsICAgMCwgICAzLCAgIDQsICAgNCwgICA0LCAgIDQsICAgNSwgICA1LCAgIDUsICAg NSwgICA3LCAgIDcsICAgOCwgICA5LCAgMTAsCisgICAgIDEwLCAgMTEsICAxMywgIDE0LCAgMTUs ICAxNywgIDE5LCAgMjEsICAyNCwgIDI1LCAgMjksICAzMywgIDM2LCAgNDEsICA0NSwgIDUxLAor ICAgICA1NywgIDY0LCAgNzEsICA4MCwgIDg5LCAxMDAsIDExMiwgMTI1LCAxNDEsIDE1NywgMTc3 LCAxOTgsIDIyMiwgMjUwLCAyODAsIDMxNCwKKyAgICAzNTIsIDM5NSwKKworfTsKKworLy9UYWJs ZSA0MyBEZXJpdmF0aW9uIG9mIHRocmVzaG9sZCB2YXJpYWJsZXMgYmV0YScgYW5kIHRjJyBmcm9t IGlucHV0IFEKK3N0YXRpYyBjb25zdCB1aW50OF90IGJldGF0YWJsZVs2NF0gPSB7CisgICAgICAw LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg ICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAx MiwgIDEzLCAgMTQsICAxNSwgIDE2LCAgMTcsICAxOCwgIDIwLCAgMjIsICAyNCwKKyAgICAgMjYs ICAyOCwgIDMwLCAgMzIsICAzNCwgIDM2LCAgMzgsICA0MCwgIDQyLCAgNDQsICA0NiwgIDQ4LCAg NTAsICA1MiwgIDU0LCAgNTYsCisgICAgIDU4LCAgNjAsICA2MiwgIDY0LCAgNjYsICA2OCwgIDcw LCAgNzIsICA3NCwgIDc2LCAgNzgsICA4MCwgIDgyLCAgODQsICA4NiwgIDg4LAorfTsKKworCitz dGF0aWMgaW50IGdldF9xUGMoY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYywgY29uc3QgaW50IHgw LCBjb25zdCBpbnQgeTAsIGNvbnN0IGludCBjaHJvbWEpCit7CisgICAgY29uc3QgaW50IHggICAg ICAgICAgICAgPSB4MCA+PiBNSU5fVFVfTE9HMjsKKyAgICBjb25zdCBpbnQgeSAgICAgICAgICAg ICA9IHkwID4+IE1JTl9UVV9MT0cyOworICAgIGNvbnN0IGludCBtaW5fdHVfd2lkdGggID0gZmMt PnBzLnBwcy0+bWluX3R1X3dpZHRoOworICAgIHJldHVybiBmYy0+dGFiLnFwW2Nocm9tYV1beCAr IHkgKiBtaW5fdHVfd2lkdGhdOworfQorCitzdGF0aWMgdm9pZCBjb3B5X2N0Yih1aW50OF90ICpk c3QsIGNvbnN0IHVpbnQ4X3QgKnNyYywgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0 LAorICAgIGNvbnN0IHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCBwdHJkaWZmX3Qgc3JjX3N0 cmlkZSkKK3sKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7CisgICAgICAg IG1lbWNweShkc3QsIHNyYywgd2lkdGgpOworCisgICAgICAgIGRzdCArPSBkc3Rfc3RyaWRlOwor ICAgICAgICBzcmMgKz0gc3JjX3N0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlf cGl4ZWwodWludDhfdCAqZHN0LCBjb25zdCB1aW50OF90ICpzcmMsIGNvbnN0IGludCBwaXhlbF9z aGlmdCkKK3sKKyAgICBpZiAocGl4ZWxfc2hpZnQpCisgICAgICAgICoodWludDE2X3QgKilkc3Qg PSAqKHVpbnQxNl90ICopc3JjOworICAgIGVsc2UKKyAgICAgICAgKmRzdCA9ICpzcmM7Cit9CisK K3N0YXRpYyB2b2lkIGNvcHlfdmVydCh1aW50OF90ICpkc3QsIGNvbnN0IHVpbnQ4X3QgKnNyYywg Y29uc3QgaW50IHBpeGVsX3NoaWZ0LCBjb25zdCBpbnQgaGVpZ2h0LAorICAgIGNvbnN0IHB0cmRp ZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSkKK3sKKyAgICBpbnQg aTsKKyAgICBpZiAocGl4ZWxfc2hpZnQgPT0gMCkgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwg aGVpZ2h0OyBpKyspIHsKKyAgICAgICAgICAgICpkc3QgPSAqc3JjOworICAgICAgICAgICAgZHN0 ICs9IGRzdF9zdHJpZGU7CisgICAgICAgICAgICBzcmMgKz0gc3JjX3N0cmlkZTsKKyAgICAgICAg fQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewor ICAgICAgICAgICAgKih1aW50MTZfdCAqKWRzdCA9ICoodWludDE2X3QgKilzcmM7CisgICAgICAg ICAgICBkc3QgKz0gZHN0X3N0cmlkZTsKKyAgICAgICAgICAgIHNyYyArPSBzcmNfc3RyaWRlOwor ICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjb3B5X2N0Yl90b19odihWVkNGcmFt ZUNvbnRleHQgKmZjLCBjb25zdCB1aW50OF90ICpzcmMsCisgICAgY29uc3QgcHRyZGlmZl90IHNy Y19zdHJpZGUsIGNvbnN0IGludCB4LCBjb25zdCBpbnQgeSwgY29uc3QgaW50IHdpZHRoLCBjb25z dCBpbnQgaGVpZ2h0LAorICAgIGNvbnN0IGludCBjX2lkeCwgY29uc3QgaW50IHhfY3RiLCBjb25z dCBpbnQgeV9jdGIpCit7CisgICAgaW50IHBzID0gZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQ7Cisg ICAgaW50IHcgID0gZmMtPnBzLnNwcy0+d2lkdGggPj4gZmMtPnBzLnNwcy0+aHNoaWZ0W2NfaWR4 XTsKKyAgICBpbnQgaCAgPSBmYy0+cHMuc3BzLT5oZWlnaHQgPj4gZmMtPnBzLnNwcy0+dnNoaWZ0 W2NfaWR4XTsKKworICAgIC8qIGNvcHkgaG9yaXpvbnRhbCBlZGdlcyAqLworICAgIG1lbWNweShm Yy0+dGFiLnNhb19waXhlbF9idWZmZXJfaFtjX2lkeF0gKyAoKCgyICogeV9jdGIpICogdyArIHgp IDw8IHBzKSwKKyAgICAgICAgc3JjLCB3aWR0aCA8PCBwcyk7CisgICAgbWVtY3B5KGZjLT50YWIu c2FvX3BpeGVsX2J1ZmZlcl9oW2NfaWR4XSArICgoKDIgKiB5X2N0YiArIDEpICogdyArIHgpIDw8 IHBzKSwKKyAgICAgICAgc3JjICsgc3JjX3N0cmlkZSAqIChoZWlnaHQgLSAxKSwgd2lkdGggPDwg cHMpOworCisgICAgLyogY29weSB2ZXJ0aWNhbCBlZGdlcyAqLworICAgIGNvcHlfdmVydChmYy0+ dGFiLnNhb19waXhlbF9idWZmZXJfdltjX2lkeF0gKyAoKCgyICogeF9jdGIpICogaCArIHkpIDw8 IHBzKSwgc3JjLCBwcywgaGVpZ2h0LCAxIDw8IHBzLCBzcmNfc3RyaWRlKTsKKworICAgIGNvcHlf dmVydChmYy0+dGFiLnNhb19waXhlbF9idWZmZXJfdltjX2lkeF0gKyAoKCgyICogeF9jdGIgKyAx KSAqIGggKyB5KSA8PCBwcyksIHNyYyArICgod2lkdGggLSAxKSA8PCBwcyksIHBzLCBoZWlnaHQs IDEgPDwgcHMsIHNyY19zdHJpZGUpOworfQorCit2b2lkIGZmX3Z2Y19zYW9fZmlsdGVyKFZWQ0xv Y2FsQ29udGV4dCAqbGMsIGludCB4LCBpbnQgeSkKK3sKKyAgICBWVkNGcmFtZUNvbnRleHQgKmZj ICA9IGxjLT5mYzsKKyAgICBjb25zdCBpbnQgY3RiX3NpemVfeSA9IGZjLT5wcy5zcHMtPmN0Yl9z aXplX3k7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc2FvX3RhYlsxNl0gPSB7IDAsIDEsIDIs IDIsIDMsIDMsIDQsIDQsIDUsIDUsIDYsIDYsIDcsIDcsIDgsIDggfTsKKyAgICBpbnQgY19pZHg7 CisgICAgaW50IGVkZ2VzWzRdOyAgLy8gMCBsZWZ0IDEgdG9wIDIgcmlnaHQgMyBib3R0b20KKyAg ICBpbnQgeF9jdGIgICAgICAgICAgICAgICAgPSB4ID4+IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3Np emVfeTsKKyAgICBpbnQgeV9jdGIgICAgICAgICAgICAgICAgPSB5ID4+IGZjLT5wcy5zcHMtPmN0 Yl9sb2cyX3NpemVfeTsKKyAgICBTQU9QYXJhbXMgKnNhbyAgICAgICAgICAgPSAmQ1RCKGZjLT50 YWIuc2FvLCB4X2N0YiwgeV9jdGIpOworICAgIC8vIGZsYWdzIGluZGljYXRpbmcgdW5maWx0ZXJh YmxlIGVkZ2VzCisgICAgdWludDhfdCB2ZXJ0X2VkZ2VbXSAgICAgID0geyAwLCAwIH07CisgICAg dWludDhfdCBob3Jpel9lZGdlW10gICAgID0geyAwLCAwIH07CisgICAgdWludDhfdCBkaWFnX2Vk Z2VbXSAgICAgID0geyAwLCAwLCAwLCAwIH07CisgICAgdWludDhfdCBsZmFzZSAgICAgICAgICAg ID0gZmMtPnBzLnBwcy0+bG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWc7Cisg ICAgdWludDhfdCBub190aWxlX2ZpbHRlciAgID0gZmMtPnBzLnBwcy0+bnVtX3RpbGVzX2luX3Bp YyA+IDEgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZmMtPnBzLnBwcy0+bG9v cF9maWx0ZXJfYWNyb3NzX3RpbGVzX2VuYWJsZWRfZmxhZzsKKyAgICB1aW50OF90IHJlc3RvcmUg ICAgICAgICAgPSBub190aWxlX2ZpbHRlciB8fCAhbGZhc2U7CisgICAgdWludDhfdCBsZWZ0X3Rp bGVfZWRnZSAgID0gMDsKKyAgICB1aW50OF90IHJpZ2h0X3RpbGVfZWRnZSAgPSAwOworICAgIHVp bnQ4X3QgdXBfdGlsZV9lZGdlICAgICA9IDA7CisgICAgdWludDhfdCBib3R0b21fdGlsZV9lZGdl ID0gMDsKKworICAgIGVkZ2VzW0xFRlRdICAgPSB4X2N0YiA9PSAwOworICAgIGVkZ2VzW1RPUF0g ICAgPSB5X2N0YiA9PSAwOworICAgIGVkZ2VzW1JJR0hUXSAgPSB4X2N0YiA9PSBmYy0+cHMucHBz LT5jdGJfd2lkdGggIC0gMTsKKyAgICBlZGdlc1tCT1RUT01dID0geV9jdGIgPT0gZmMtPnBzLnBw cy0+Y3RiX2hlaWdodCAtIDE7CisKKyAgICBpZiAocmVzdG9yZSkgeworICAgICAgICBpZiAoIWVk Z2VzW0xFRlRdKSB7CisgICAgICAgICAgICBsZWZ0X3RpbGVfZWRnZSAgPSBub190aWxlX2ZpbHRl ciAmJiBmYy0+cHMucHBzLT5jdGJfdG9fY29sX2JkW3hfY3RiXSA9PSB4X2N0YjsKKyAgICAgICAg ICAgIHZlcnRfZWRnZVswXSAgICA9ICghbGZhc2UgJiYgQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4 X2N0YiwgeV9jdGIpICE9IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIgLSAxLCB5X2N0Yikp IHx8IGxlZnRfdGlsZV9lZGdlOworICAgICAgICB9CisgICAgICAgIGlmICghZWRnZXNbUklHSFRd KSB7CisgICAgICAgICAgICByaWdodF90aWxlX2VkZ2UgPSBub190aWxlX2ZpbHRlciAmJiBmYy0+ cHMucHBzLT5jdGJfdG9fY29sX2JkW3hfY3RiXSAhPSBmYy0+cHMucHBzLT5jdGJfdG9fY29sX2Jk W3hfY3RiICsgMV07CisgICAgICAgICAgICB2ZXJ0X2VkZ2VbMV0gICAgPSAoIWxmYXNlICYmIENU QihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlfY3RiKSAhPSBDVEIoZmMtPnRhYi5zbGljZV9p ZHgsIHhfY3RiICsgMSwgeV9jdGIpKSB8fCByaWdodF90aWxlX2VkZ2U7CisgICAgICAgIH0KKyAg ICAgICAgaWYgKCFlZGdlc1tUT1BdKSB7CisgICAgICAgICAgICB1cF90aWxlX2VkZ2UgICAgID0g bm9fdGlsZV9maWx0ZXIgJiYgZmMtPnBzLnBwcy0+Y3RiX3RvX3Jvd19iZFt5X2N0Yl0gPT0geV9j dGI7CisgICAgICAgICAgICBob3Jpel9lZGdlWzBdICAgID0gKCFsZmFzZSAmJiBDVEIoZmMtPnRh Yi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YikgIT0gQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0 YiwgeV9jdGIgLSAxKSkgfHwgdXBfdGlsZV9lZGdlOworICAgICAgICB9CisgICAgICAgIGlmICgh ZWRnZXNbQk9UVE9NXSkgeworICAgICAgICAgICAgYm90dG9tX3RpbGVfZWRnZSA9IG5vX3RpbGVf ZmlsdGVyICYmIGZjLT5wcy5wcHMtPmN0Yl90b19yb3dfYmRbeV9jdGJdICE9IGZjLT5wcy5wcHMt PmN0Yl90b19yb3dfYmRbeV9jdGIgKyAxXTsKKyAgICAgICAgICAgIGhvcml6X2VkZ2VbMV0gICAg PSAoIWxmYXNlICYmIENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlfY3RiKSAhPSBDVEIo ZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YiArIDEpKSB8fCBib3R0b21fdGlsZV9lZGdl OworICAgICAgICB9CisgICAgICAgIGlmICghZWRnZXNbTEVGVF0gJiYgIWVkZ2VzW1RPUF0pIHsK KyAgICAgICAgICAgIGRpYWdfZWRnZVswXSA9ICghbGZhc2UgJiYgQ1RCKGZjLT50YWIuc2xpY2Vf aWR4LCB4X2N0YiwgeV9jdGIpICE9IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIgLSAxLCB5 X2N0YiAtIDEpKSB8fCBsZWZ0X3RpbGVfZWRnZSB8fCB1cF90aWxlX2VkZ2U7CisgICAgICAgIH0K KyAgICAgICAgaWYgKCFlZGdlc1tUT1BdICYmICFlZGdlc1tSSUdIVF0pIHsKKyAgICAgICAgICAg IGRpYWdfZWRnZVsxXSA9ICghbGZhc2UgJiYgQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0Yiwg eV9jdGIpICE9IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIgKyAxLCB5X2N0YiAtIDEpKSB8 fCByaWdodF90aWxlX2VkZ2UgfHwgdXBfdGlsZV9lZGdlOworICAgICAgICB9CisgICAgICAgIGlm ICghZWRnZXNbUklHSFRdICYmICFlZGdlc1tCT1RUT01dKSB7CisgICAgICAgICAgICBkaWFnX2Vk Z2VbMl0gPSAoIWxmYXNlICYmIENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlfY3RiKSAh PSBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiICsgMSwgeV9jdGIgKyAxKSkgfHwgcmlnaHRf dGlsZV9lZGdlIHx8IGJvdHRvbV90aWxlX2VkZ2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFl ZGdlc1tMRUZUXSAmJiAhZWRnZXNbQk9UVE9NXSkgeworICAgICAgICAgICAgZGlhZ19lZGdlWzNd ID0gKCFsZmFzZSAmJiBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YikgIT0gQ1RC KGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0YiAtIDEsIHlfY3RiICsgMSkpIHx8IGxlZnRfdGlsZV9l ZGdlIHx8IGJvdHRvbV90aWxlX2VkZ2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGNf aWR4ID0gMDsgY19pZHggPCAoZmMtPnBzLnNwcy0+Y2hyb21hX2Zvcm1hdF9pZGMgPyAzIDogMSk7 IGNfaWR4KyspIHsKKyAgICAgICAgaW50IHgwICAgICAgID0geCA+PiBmYy0+cHMuc3BzLT5oc2hp ZnRbY19pZHhdOworICAgICAgICBpbnQgeTAgICAgICAgPSB5ID4+IGZjLT5wcy5zcHMtPnZzaGlm dFtjX2lkeF07CisgICAgICAgIHB0cmRpZmZfdCBzcmNfc3RyaWRlID0gZmMtPmZyYW1lLT5saW5l c2l6ZVtjX2lkeF07CisgICAgICAgIGludCBjdGJfc2l6ZV9oID0gY3RiX3NpemVfeSA+PiBmYy0+ cHMuc3BzLT5oc2hpZnRbY19pZHhdOworICAgICAgICBpbnQgY3RiX3NpemVfdiA9IGN0Yl9zaXpl X3kgPj4gZmMtPnBzLnNwcy0+dnNoaWZ0W2NfaWR4XTsKKyAgICAgICAgaW50IHdpZHRoICAgID0g RkZNSU4oY3RiX3NpemVfaCwgKGZjLT5wcy5zcHMtPndpZHRoICA+PiBmYy0+cHMuc3BzLT5oc2hp ZnRbY19pZHhdKSAtIHgwKTsKKyAgICAgICAgaW50IGhlaWdodCAgID0gRkZNSU4oY3RiX3NpemVf diwgKGZjLT5wcy5zcHMtPmhlaWdodCA+PiBmYy0+cHMuc3BzLT52c2hpZnRbY19pZHhdKSAtIHkw KTsKKyAgICAgICAgaW50IHRhYiAgICAgID0gc2FvX3RhYlsoRkZBTElHTih3aWR0aCwgOCkgPj4g MykgLSAxXTsKKyAgICAgICAgdWludDhfdCAqc3JjID0gJmZjLT5mcmFtZS0+ZGF0YVtjX2lkeF1b eTAgKiBzcmNfc3RyaWRlICsgKHgwIDw8IGZjLT5wcy5zcHMtPnBpeGVsX3NoaWZ0KV07CisgICAg ICAgIHB0cmRpZmZfdCBkc3Rfc3RyaWRlOworICAgICAgICB1aW50OF90ICpkc3Q7CisKKyAgICAg ICAgc3dpdGNoIChzYW8tPnR5cGVfaWR4W2NfaWR4XSkgeworICAgICAgICBjYXNlIFNBT19CQU5E OgorICAgICAgICAgICAgY29weV9jdGJfdG9faHYoZmMsIHNyYywgc3JjX3N0cmlkZSwgeDAsIHkw LCB3aWR0aCwgaGVpZ2h0LCBjX2lkeCwgeF9jdGIsIHlfY3RiKTsKKyAgICAgICAgICAgIGZjLT52 dmNkc3Auc2FvLmJhbmRfZmlsdGVyW3RhYl0oc3JjLCBzcmMsIHNyY19zdHJpZGUsIHNyY19zdHJp ZGUsCisgICAgICAgICAgICAgICAgc2FvLT5vZmZzZXRfdmFsW2NfaWR4XSwgc2FvLT5iYW5kX3Bv c2l0aW9uW2NfaWR4XSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICBzYW8tPnR5cGVfaWR4 W2NfaWR4XSA9IFNBT19BUFBMSUVEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug U0FPX0VER0U6CisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB3ID0gZmMtPnBzLnNwcy0+d2lk dGggPj4gZmMtPnBzLnNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICAgICAgICAgIGludCBoID0gZmMt PnBzLnNwcy0+aGVpZ2h0ID4+IGZjLT5wcy5zcHMtPnZzaGlmdFtjX2lkeF07CisgICAgICAgICAg ICBpbnQgc2ggPSBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdDsKKyAgICAgICAgICAgIGludCBsZWZ0 X3BpeGVscywgcmlnaHRfcGl4ZWxzOworCisgICAgICAgICAgICBkc3Rfc3RyaWRlID0gMipNQVhf UEJfU0laRSArIEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkU7CisgICAgICAgICAgICBkc3Qg PSBsYy0+c2FvX2J1ZmZlciArIGRzdF9zdHJpZGUgKyBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19T SVpFOworCisgICAgICAgICAgICBpZiAoIWVkZ2VzW1RPUF0pIHsKKyAgICAgICAgICAgICAgICBp bnQgbGVmdCA9IDEgLSBlZGdlc1tMRUZUXTsKKyAgICAgICAgICAgICAgICBpbnQgcmlnaHQgPSAx IC0gZWRnZXNbUklHSFRdOworICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNyYzFbMl07 CisgICAgICAgICAgICAgICAgdWludDhfdCAqZHN0MTsKKyAgICAgICAgICAgICAgICBpbnQgc3Jj X2lkeCwgcG9zOworCisgICAgICAgICAgICAgICAgZHN0MSA9IGRzdCAtIGRzdF9zdHJpZGUgLSAo bGVmdCA8PCBzaCk7CisgICAgICAgICAgICAgICAgc3JjMVswXSA9IHNyYyAtIHNyY19zdHJpZGUg LSAobGVmdCA8PCBzaCk7CisgICAgICAgICAgICAgICAgc3JjMVsxXSA9IGZjLT50YWIuc2FvX3Bp eGVsX2J1ZmZlcl9oW2NfaWR4XSArICgoKDIgKiB5X2N0YiAtIDEpICogdyArIHgwIC0gbGVmdCkg PDwgc2gpOworICAgICAgICAgICAgICAgIHBvcyA9IDA7CisgICAgICAgICAgICAgICAgaWYgKGxl ZnQpIHsKKyAgICAgICAgICAgICAgICAgICAgc3JjX2lkeCA9IChDVEIoZmMtPnRhYi5zYW8sIHhf Y3RiLTEsIHlfY3RiLTEpLnR5cGVfaWR4W2NfaWR4XSA9PQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFNBT19BUFBMSUVEKTsKKyAgICAgICAgICAgICAgICAgICAgY29weV9waXhlbChk c3QxLCBzcmMxW3NyY19pZHhdLCBzaCk7CisgICAgICAgICAgICAgICAgICAgIHBvcyArPSAoMSA8 PCBzaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNyY19pZHggPSAoQ1RC KGZjLT50YWIuc2FvLCB4X2N0YiwgeV9jdGItMSkudHlwZV9pZHhbY19pZHhdID09CisgICAgICAg ICAgICAgICAgICAgICAgICAgICBTQU9fQVBQTElFRCk7CisgICAgICAgICAgICAgICAgbWVtY3B5 KGRzdDEgKyBwb3MsIHNyYzFbc3JjX2lkeF0gKyBwb3MsIHdpZHRoIDw8IHNoKTsKKyAgICAgICAg ICAgICAgICBpZiAocmlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgcG9zICs9IHdpZHRoIDw8 IHNoOworICAgICAgICAgICAgICAgICAgICBzcmNfaWR4ID0gKENUQihmYy0+dGFiLnNhbywgeF9j dGIrMSwgeV9jdGItMSkudHlwZV9pZHhbY19pZHhdID09CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU0FPX0FQUExJRUQpOworICAgICAgICAgICAgICAgICAgICBjb3B5X3BpeGVsKGRz dDEgKyBwb3MsIHNyYzFbc3JjX2lkeF0gKyBwb3MsIHNoKTsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWVkZ2VzW0JPVFRPTV0pIHsKKyAgICAgICAg ICAgICAgICBpbnQgbGVmdCA9IDEgLSBlZGdlc1tMRUZUXTsKKyAgICAgICAgICAgICAgICBpbnQg cmlnaHQgPSAxIC0gZWRnZXNbUklHSFRdOworICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qg KnNyYzFbMl07CisgICAgICAgICAgICAgICAgdWludDhfdCAqZHN0MTsKKyAgICAgICAgICAgICAg ICBpbnQgc3JjX2lkeCwgcG9zOworCisgICAgICAgICAgICAgICAgZHN0MSA9IGRzdCArIGhlaWdo dCAqIGRzdF9zdHJpZGUgLSAobGVmdCA8PCBzaCk7CisgICAgICAgICAgICAgICAgc3JjMVswXSA9 IHNyYyArIGhlaWdodCAqIHNyY19zdHJpZGUgLSAobGVmdCA8PCBzaCk7CisgICAgICAgICAgICAg ICAgc3JjMVsxXSA9IGZjLT50YWIuc2FvX3BpeGVsX2J1ZmZlcl9oW2NfaWR4XSArICgoKDIgKiB5 X2N0YiArIDIpICogdyArIHgwIC0gbGVmdCkgPDwgc2gpOworICAgICAgICAgICAgICAgIHBvcyA9 IDA7CisgICAgICAgICAgICAgICAgaWYgKGxlZnQpIHsKKyAgICAgICAgICAgICAgICAgICAgc3Jj X2lkeCA9IChDVEIoZmMtPnRhYi5zYW8sIHhfY3RiLTEsIHlfY3RiKzEpLnR5cGVfaWR4W2NfaWR4 XSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNBT19BUFBMSUVEKTsKKyAgICAg ICAgICAgICAgICAgICAgY29weV9waXhlbChkc3QxLCBzcmMxW3NyY19pZHhdLCBzaCk7CisgICAg ICAgICAgICAgICAgICAgIHBvcyArPSAoMSA8PCBzaCk7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIHNyY19pZHggPSAoQ1RCKGZjLT50YWIuc2FvLCB4X2N0YiwgeV9jdGIrMSku dHlwZV9pZHhbY19pZHhdID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICBTQU9fQVBQTElF RCk7CisgICAgICAgICAgICAgICAgbWVtY3B5KGRzdDEgKyBwb3MsIHNyYzFbc3JjX2lkeF0gKyBw b3MsIHdpZHRoIDw8IHNoKTsKKyAgICAgICAgICAgICAgICBpZiAocmlnaHQpIHsKKyAgICAgICAg ICAgICAgICAgICAgcG9zICs9IHdpZHRoIDw8IHNoOworICAgICAgICAgICAgICAgICAgICBzcmNf aWR4ID0gKENUQihmYy0+dGFiLnNhbywgeF9jdGIrMSwgeV9jdGIrMSkudHlwZV9pZHhbY19pZHhd ID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0FPX0FQUExJRUQpOworICAgICAg ICAgICAgICAgICAgICBjb3B5X3BpeGVsKGRzdDEgKyBwb3MsIHNyYzFbc3JjX2lkeF0gKyBwb3Ms IHNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsZWZ0 X3BpeGVscyA9IDA7CisgICAgICAgICAgICBpZiAoIWVkZ2VzW0xFRlRdKSB7CisgICAgICAgICAg ICAgICAgaWYgKENUQihmYy0+dGFiLnNhbywgeF9jdGItMSwgeV9jdGIpLnR5cGVfaWR4W2NfaWR4 XSA9PSBTQU9fQVBQTElFRCkgeworICAgICAgICAgICAgICAgICAgICBjb3B5X3ZlcnQoZHN0IC0g KDEgPDwgc2gpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmMtPnRhYi5zYW9fcGl4 ZWxfYnVmZmVyX3ZbY19pZHhdICsgKCgoMiAqIHhfY3RiIC0gMSkgKiBoICsgeTApIDw8IHNoKSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoLCBoZWlnaHQsIGRzdF9zdHJpZGUsIDEg PDwgc2gpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxl ZnRfcGl4ZWxzID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg ICAgICByaWdodF9waXhlbHMgPSAwOworICAgICAgICAgICAgaWYgKCFlZGdlc1tSSUdIVF0pIHsK KyAgICAgICAgICAgICAgICBpZiAoQ1RCKGZjLT50YWIuc2FvLCB4X2N0YisxLCB5X2N0YikudHlw ZV9pZHhbY19pZHhdID09IFNBT19BUFBMSUVEKSB7CisgICAgICAgICAgICAgICAgICAgIGNvcHlf dmVydChkc3QgKyAod2lkdGggPDwgc2gpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZmMtPnRhYi5zYW9fcGl4ZWxfYnVmZmVyX3ZbY19pZHhdICsgKCgoMiAqIHhfY3RiICsgMikgKiBo ICsgeTApIDw8IHNoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoLCBoZWlnaHQs IGRzdF9zdHJpZGUsIDEgPDwgc2gpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgICAgIHJpZ2h0X3BpeGVscyA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorCisgICAgICAgICAgICBjb3B5X2N0Yihkc3QgLSAobGVmdF9waXhlbHMgPDwgc2gp LAorICAgICAgICAgICAgICAgICAgICAgc3JjIC0gKGxlZnRfcGl4ZWxzIDw8IHNoKSwKKyAgICAg ICAgICAgICAgICAgICAgICh3aWR0aCArIGxlZnRfcGl4ZWxzICsgcmlnaHRfcGl4ZWxzKSA8PCBz aCwKKyAgICAgICAgICAgICAgICAgICAgIGhlaWdodCwgZHN0X3N0cmlkZSwgc3JjX3N0cmlkZSk7 CisKKyAgICAgICAgICAgIGNvcHlfY3RiX3RvX2h2KGZjLCBzcmMsIHNyY19zdHJpZGUsIHgwLCB5 MCwgd2lkdGgsIGhlaWdodCwgY19pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB4X2N0 YiwgeV9jdGIpOworICAgICAgICAgICAgZmMtPnZ2Y2RzcC5zYW8uZWRnZV9maWx0ZXJbdGFiXShz cmMsIGRzdCwgc3JjX3N0cmlkZSwgc2FvLT5vZmZzZXRfdmFsW2NfaWR4XSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FvLT5lb19jbGFzc1tjX2lkeF0sIHdp ZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgZmMtPnZ2Y2RzcC5zYW8uZWRnZV9yZXN0b3JlW3Jl c3RvcmVdKHNyYywgZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3JjX3N0cmlkZSwgZHN0X3N0cmlkZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNhbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGVkZ2VzLCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCwgY19pZHgsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0X2VkZ2UsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3Jpel9lZGdlLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlhZ19lZGdlKTsKKyAg ICAgICAgICAgIHNhby0+dHlwZV9pZHhbY19pZHhdID0gU0FPX0FQUExJRUQ7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCisjZGVmaW5lIFRBQl9C Uyh0LCB4LCB5KSAgICAgKHQpWygoeSkgPj4gMikgKiAoZmMtPnRhYi5ic193aWR0aCkgKyAoKHgp ID4+IDIpXQorI2RlZmluZSBUQUJfTUFYX0xFTih0LCB4LCB5KSAgKHQpWygoeSkgPj4gMikgKiAo ZmMtPnRhYi5ic193aWR0aCkgKyAoKHgpID4+IDIpXQorI2RlZmluZSBERUJMT0NLX1NURVAgICAg ICAgICAgICA0CisjZGVmaW5lIE1BWF9GSUxURVJfTEVOICAgICAgICAgIDgKKyNkZWZpbmUgTFVN QV9HUklEICAgICAgICAgICAgICAgNAorI2RlZmluZSBDSFJPTUFfR1JJRCAgICAgICAgICAgICA4 CisKK3N0YXRpYyBpbnQgYm91bmRhcnlfc3RyZW5ndGgoY29uc3QgVlZDTG9jYWxDb250ZXh0ICps YywgTXZGaWVsZCAqY3VyciwgTXZGaWVsZCAqbmVpZ2gsCisgICAgY29uc3QgUmVmUGljTGlzdCAq bmVpZ2hfcnBsKQoreworICAgIFJlZlBpY0xpc3QgKnJwbCA9IGxjLT5zYy0+cnBsOworICAgIGlm IChjdXJyLT5wcmVkX2ZsYWcgPT0gUEZfQkkgJiYgIG5laWdoLT5wcmVkX2ZsYWcgPT0gUEZfQkkp IHsKKyAgICAgICAgLy8gc2FtZSBMMCBhbmQgTDEKKyAgICAgICAgaWYgKHJwbFswXS5saXN0W2N1 cnItPnJlZl9pZHhbMF1dID09IG5laWdoX3JwbFswXS5saXN0W25laWdoLT5yZWZfaWR4WzBdXSAg JiYKKyAgICAgICAgICAgIHJwbFswXS5saXN0W2N1cnItPnJlZl9pZHhbMF1dID09IHJwbFsxXS5s aXN0W2N1cnItPnJlZl9pZHhbMV1dICYmCisgICAgICAgICAgICBuZWlnaF9ycGxbMF0ubGlzdFtu ZWlnaC0+cmVmX2lkeFswXV0gPT0gbmVpZ2hfcnBsWzFdLmxpc3RbbmVpZ2gtPnJlZl9pZHhbMV1d KSB7CisgICAgICAgICAgICBpZiAoKEZGQUJTKG5laWdoLT5tdlswXS54IC0gY3Vyci0+bXZbMF0u eCkgPj0gOCB8fCBGRkFCUyhuZWlnaC0+bXZbMF0ueSAtIGN1cnItPm12WzBdLnkpID49IDggfHwK KyAgICAgICAgICAgICAgICAgRkZBQlMobmVpZ2gtPm12WzFdLnggLSBjdXJyLT5tdlsxXS54KSA+ PSA4IHx8IEZGQUJTKG5laWdoLT5tdlsxXS55IC0gY3Vyci0+bXZbMV0ueSkgPj0gOCkgJiYKKyAg ICAgICAgICAgICAgICAoRkZBQlMobmVpZ2gtPm12WzFdLnggLSBjdXJyLT5tdlswXS54KSA+PSA4 IHx8IEZGQUJTKG5laWdoLT5tdlsxXS55IC0gY3Vyci0+bXZbMF0ueSkgPj0gOCB8fAorICAgICAg ICAgICAgICAgICBGRkFCUyhuZWlnaC0+bXZbMF0ueCAtIGN1cnItPm12WzFdLngpID49IDggfHwg RkZBQlMobmVpZ2gtPm12WzBdLnkgLSBjdXJyLT5tdlsxXS55KSA+PSA4KSkKKyAgICAgICAgICAg ICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4g MDsKKyAgICAgICAgfSBlbHNlIGlmIChuZWlnaF9ycGxbMF0ubGlzdFtuZWlnaC0+cmVmX2lkeFsw XV0gPT0gcnBsWzBdLmxpc3RbY3Vyci0+cmVmX2lkeFswXV0gJiYKKyAgICAgICAgICAgICAgICAg ICBuZWlnaF9ycGxbMV0ubGlzdFtuZWlnaC0+cmVmX2lkeFsxXV0gPT0gcnBsWzFdLmxpc3RbY3Vy ci0+cmVmX2lkeFsxXV0pIHsKKyAgICAgICAgICAgIGlmIChGRkFCUyhuZWlnaC0+bXZbMF0ueCAt IGN1cnItPm12WzBdLngpID49IDggfHwgRkZBQlMobmVpZ2gtPm12WzBdLnkgLSBjdXJyLT5tdlsw XS55KSA+PSA4IHx8CisgICAgICAgICAgICAgICAgRkZBQlMobmVpZ2gtPm12WzFdLnggLSBjdXJy LT5tdlsxXS54KSA+PSA4IHx8IEZGQUJTKG5laWdoLT5tdlsxXS55IC0gY3Vyci0+bXZbMV0ueSkg Pj0gOCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSBlbHNlIGlmIChuZWlnaF9ycGxbMV0ubGlz dFtuZWlnaC0+cmVmX2lkeFsxXV0gPT0gcnBsWzBdLmxpc3RbY3Vyci0+cmVmX2lkeFswXV0gJiYK KyAgICAgICAgICAgICAgICAgICBuZWlnaF9ycGxbMF0ubGlzdFtuZWlnaC0+cmVmX2lkeFswXV0g PT0gcnBsWzFdLmxpc3RbY3Vyci0+cmVmX2lkeFsxXV0pIHsKKyAgICAgICAgICAgIGlmIChGRkFC UyhuZWlnaC0+bXZbMV0ueCAtIGN1cnItPm12WzBdLngpID49IDggfHwgRkZBQlMobmVpZ2gtPm12 WzFdLnkgLSBjdXJyLT5tdlswXS55KSA+PSA4IHx8CisgICAgICAgICAgICAgICAgRkZBQlMobmVp Z2gtPm12WzBdLnggLSBjdXJyLT5tdlsxXS54KSA+PSA4IHx8IEZGQUJTKG5laWdoLT5tdlswXS55 IC0gY3Vyci0+bXZbMV0ueSkgPj0gOCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICgoY3Vyci0+ cHJlZF9mbGFnICE9IFBGX0JJKSAmJiAobmVpZ2gtPnByZWRfZmxhZyAhPSBQRl9CSSkpeyAvLyAx IE1WCisgICAgICAgIE12IEEsIEI7CisgICAgICAgIGludCByZWZfQSwgcmVmX0I7CisKKyAgICAg ICAgaWYgKGN1cnItPnByZWRfZmxhZyAmIDEpIHsKKyAgICAgICAgICAgIEEgICAgID0gY3Vyci0+ bXZbMF07CisgICAgICAgICAgICByZWZfQSA9IHJwbFswXS5saXN0W2N1cnItPnJlZl9pZHhbMF1d OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQSAgICAgPSBjdXJyLT5tdlsxXTsKKyAg ICAgICAgICAgIHJlZl9BID0gcnBsWzFdLmxpc3RbY3Vyci0+cmVmX2lkeFsxXV07CisgICAgICAg IH0KKworICAgICAgICBpZiAobmVpZ2gtPnByZWRfZmxhZyAmIDEpIHsKKyAgICAgICAgICAgIEIg ICAgID0gbmVpZ2gtPm12WzBdOworICAgICAgICAgICAgcmVmX0IgPSBuZWlnaF9ycGxbMF0ubGlz dFtuZWlnaC0+cmVmX2lkeFswXV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBCICAg ICA9IG5laWdoLT5tdlsxXTsKKyAgICAgICAgICAgIHJlZl9CID0gbmVpZ2hfcnBsWzFdLmxpc3Rb bmVpZ2gtPnJlZl9pZHhbMV1dOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlZl9BID09IHJl Zl9CKSB7CisgICAgICAgICAgICBpZiAoRkZBQlMoQS54IC0gQi54KSA+PSA4IHx8IEZGQUJTKEEu eSAtIEIueSkgPj0gOCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg ICByZXR1cm4gMTsKKyAgICB9CisKKyAgICByZXR1cm4gMTsKK30KKworLy9wYXJ0IG9mIDguOC4z LjMgRGVyaXZhdGlvbiBwcm9jZXNzIG9mIHRyYW5zZm9ybSBibG9jayBib3VuZGFyeQorc3RhdGlj IHZvaWQgZGVyaXZlX21heF9maWx0ZXJfbGVuZ3RoX2x1bWEoY29uc3QgVlZDRnJhbWVDb250ZXh0 ICpmYywgY29uc3QgaW50IHF4LCBjb25zdCBpbnQgcXksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgaXNfaW50cmEsIGNvbnN0IGludCBoYXNfc3Vi YmxvY2ssIGNvbnN0IGludCB2ZXJ0aWNhbCwgdWludDhfdCAqbWF4X2xlbl9wLCB1aW50OF90ICpt YXhfbGVuX3EpCit7CisgICAgY29uc3QgaW50IHB4ID0gIHZlcnRpY2FsID8gcXggLSAxIDogcXg7 CisgICAgY29uc3QgaW50IHB5ID0gIXZlcnRpY2FsID8gcXkgLSAxIDogcXk7CisgICAgY29uc3Qg dWludDhfdCAqdGJfc2l6ZSA9IHZlcnRpY2FsID8gZmMtPnRhYi50Yl93aWR0aFtMVU1BXSA6IGZj LT50YWIudGJfaGVpZ2h0W0xVTUFdOworICAgIGNvbnN0IGludCBzaXplX3AgPSB0Yl9zaXplWyhw eSA+PiBNSU5fVFVfTE9HMikgKiBmYy0+cHMucHBzLT5taW5fdHVfd2lkdGggKyAocHggPj4gTUlO X1RVX0xPRzIpXTsKKyAgICBjb25zdCBpbnQgc2l6ZV9xID0gdGJfc2l6ZVsocXkgPj4gTUlOX1RV X0xPRzIpICogZmMtPnBzLnBwcy0+bWluX3R1X3dpZHRoICsgKHF4ID4+IE1JTl9UVV9MT0cyKV07 CisgICAgY29uc3QgaW50IG1pbl9jYl9sb2cyID0gZmMtPnBzLnNwcy0+bWluX2NiX2xvZzJfc2l6 ZV95OworICAgIGNvbnN0IGludCBvZmZfcCA9IChweSA+PiBtaW5fY2JfbG9nMikgKiBmYy0+cHMu cHBzLT5taW5fY2Jfd2lkdGggKyAocHggPj4gbWluX2NiX2xvZzIpOworICAgIGlmIChzaXplX3Ag PD0gNCB8fCBzaXplX3EgPD0gNCkgeworICAgICAgICAqbWF4X2xlbl9wID0gKm1heF9sZW5fcSA9 IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKm1heF9sZW5fcCA9ICptYXhfbGVuX3EgPSAzOwor ICAgICAgICBpZiAoc2l6ZV9wID49IDMyKQorICAgICAgICAgICAgKm1heF9sZW5fcCA9IDc7Cisg ICAgICAgIGlmIChzaXplX3EgPj0gMzIpCisgICAgICAgICAgICAqbWF4X2xlbl9xID0gNzsKKyAg ICB9CisgICAgaWYgKGhhc19zdWJibG9jaykKKyAgICAgICAgKm1heF9sZW5fcSA9IEZGTUlOKDUs ICptYXhfbGVuX3EpOworICAgIGlmIChmYy0+dGFiLm1zZltvZmZfcF0gfHwgZmMtPnRhYi5pYWZb b2ZmX3BdKQorICAgICAgICAqbWF4X2xlbl9wID0gRkZNSU4oNSwgKm1heF9sZW5fcCk7Cit9CisK K3N0YXRpYyB2b2lkIHZ2Y19kZWJsb2NrX3N1YmJsb2NrX2JzX3ZlcnRpY2FsKGNvbnN0IFZWQ0xv Y2FsQ29udGV4dCAqbGMsCisgICAgY29uc3QgaW50IGNiX3gsIGNvbnN0IGludCBjYl95LCBjb25z dCBpbnQgeDAsIGNvbnN0IGludCB5MCwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0 KQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAgKmZjICA9IGxjLT5mYzsKKyAgICBNdkZp ZWxkICp0YWJfbXZmICAgICAgICAgICAgPSBmYy0+dGFiLm12ZjsKKyAgICBSZWZQaWNMaXN0ICpy cGwgICAgICAgICAgICAgPSBsYy0+c2MtPnJwbDsKKyAgICBjb25zdCBpbnQgbWluX3B1X3dpZHRo ICAgICAgPSBmYy0+cHMucHBzLT5taW5fcHVfd2lkdGg7CisgICAgY29uc3QgaW50IGxvZzJfbWlu X3B1X3NpemUgID0gTUlOX1BVX0xPRzI7CisgICAgdWludDhfdCBtYXhfbGVuX3AsIG1heF9sZW5f cTsKKyAgICBpbnQgYnMsIGksIGo7CisKKyAgICAvLyBicyBmb3IgVFUgaW50ZXJuYWwgdmVydGlj YWwgUFUgYm91bmRhcmllcworICAgIGZvciAoaiA9IDA7IGogPCBoZWlnaHQ7IGogKz0gNCkgewor ICAgICAgICBpbnQgeV9wdSA9ICh5MCArIGopID4+IGxvZzJfbWluX3B1X3NpemU7CisKKyAgICAg ICAgZm9yIChpID0gOCAtICgoeDAgLSBjYl94KSAlIDgpOyBpIDwgd2lkdGg7IGkgKz0gOCkgewor ICAgICAgICAgICAgaW50IHhwX3B1ID0gKHgwICsgaSAtIDEpID4+IGxvZzJfbWluX3B1X3NpemU7 CisgICAgICAgICAgICBpbnQgeHFfcHUgPSAoeDAgKyBpKSAgICAgPj4gbG9nMl9taW5fcHVfc2l6 ZTsKKyAgICAgICAgICAgIE12RmllbGQgKmxlZnQgPSAmdGFiX212Zlt5X3B1ICogbWluX3B1X3dp ZHRoICsgeHBfcHVdOworICAgICAgICAgICAgTXZGaWVsZCAqY3VyciA9ICZ0YWJfbXZmW3lfcHUg KiBtaW5fcHVfd2lkdGggKyB4cV9wdV07CisgICAgICAgICAgICBjb25zdCBpbnQgeCA9IHgwICsg aTsKKyAgICAgICAgICAgIGNvbnN0IGludCB5ID0geTAgKyBqOworCisgICAgICAgICAgICBicyA9 IGJvdW5kYXJ5X3N0cmVuZ3RoKGxjLCBjdXJyLCBsZWZ0LCBycGwpOworICAgICAgICAgICAgVEFC X0JTKGZjLT50YWIudmVydGljYWxfYnNbTFVNQV0sIHgsIHkpID0gYnM7CisKKworICAgICAgICAg ICAgbWF4X2xlbl9wID0gbWF4X2xlbl9xID0gMDsKKyAgICAgICAgICAgIGlmIChpID09IDQgfHwg aSA9PSB3aWR0aCAtIDQpCisgICAgICAgICAgICAgICAgbWF4X2xlbl9wID0gbWF4X2xlbl9xID0g MTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGkgPT0gOCB8fCBpID09IHdpZHRoIC0gOCkKKyAgICAg ICAgICAgICAgICBtYXhfbGVuX3AgPSBtYXhfbGVuX3EgPSAyOworICAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICAgIG1heF9sZW5fcCA9IG1heF9sZW5fcSA9IDM7CisKKyAgICAgICAgICAg IFRBQl9NQVhfTEVOKGZjLT50YWIudmVydGljYWxfcCwgeCwgeSkgPSBtYXhfbGVuX3A7CisgICAg ICAgICAgICBUQUJfTUFYX0xFTihmYy0+dGFiLnZlcnRpY2FsX3EsIHgsIHkpID0gbWF4X2xlbl9x OworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB2dmNfZGVibG9ja19zdWJibG9j a19ic19ob3Jpem9udGFsKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsCisgICAgY29uc3QgaW50 IGNiX3gsIGNvbnN0IGludCBjYl95LCBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCwgY29uc3Qg aW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0KQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4 dCAgKmZjICA9IGxjLT5mYzsKKyAgICBNdkZpZWxkKiB0YWJfbXZmICAgICAgICAgICAgPSBmYy0+ dGFiLm12ZjsKKyAgICBSZWZQaWNMaXN0KiBycGwgICAgICAgICAgICAgPSBsYy0+c2MtPnJwbDsK KyAgICBjb25zdCBpbnQgbWluX3B1X3dpZHRoICAgICAgPSBmYy0+cHMucHBzLT5taW5fcHVfd2lk dGg7CisgICAgY29uc3QgaW50IGxvZzJfbWluX3B1X3NpemUgID0gTUlOX1BVX0xPRzI7CisgICAg dWludDhfdCBtYXhfbGVuX3AsIG1heF9sZW5fcTsKKyAgICBpbnQgYnMsIGksIGo7CisKKyAgICAv LyBicyBmb3IgVFUgaW50ZXJuYWwgaG9yaXpvbnRhbCBQVSBib3VuZGFyaWVzCisgICAgZm9yIChq ID0gOCAtICgoeTAgLSBjYl95KSAlIDgpOyBqIDwgaGVpZ2h0OyBqICs9IDgpIHsKKyAgICAgICAg aW50IHlwX3B1ID0gKHkwICsgaiAtIDEpID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgIGlu dCB5cV9wdSA9ICh5MCArIGopICAgICA+PiBsb2cyX21pbl9wdV9zaXplOworCisgICAgICAgIGZv ciAoaSA9IDA7IGkgPCB3aWR0aDsgaSArPSA0KSB7CisgICAgICAgICAgICBpbnQgeF9wdSA9ICh4 MCArIGkpID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgICAgICBNdkZpZWxkICp0b3AgID0g JnRhYl9tdmZbeXBfcHUgKiBtaW5fcHVfd2lkdGggKyB4X3B1XTsKKyAgICAgICAgICAgIE12Rmll bGQgKmN1cnIgPSAmdGFiX212Zlt5cV9wdSAqIG1pbl9wdV93aWR0aCArIHhfcHVdOworICAgICAg ICAgICAgY29uc3QgaW50IHggPSB4MCArIGk7CisgICAgICAgICAgICBjb25zdCBpbnQgeSA9IHkw ICsgajsKKworICAgICAgICAgICAgYnMgPSBib3VuZGFyeV9zdHJlbmd0aChsYywgY3VyciwgdG9w LCBycGwpOworICAgICAgICAgICAgVEFCX0JTKGZjLT50YWIuaG9yaXpvbnRhbF9ic1tMVU1BXSwg eCwgeSkgPSBiczsKKworICAgICAgICAgICAgLy9maXhtZToKKyAgICAgICAgICAgIC8vZWRnZVRi RmxhZ3NbIHgg4oiSIHNiVyBdWyB5IF0gaXMgZXF1YWwgdG8gMQorICAgICAgICAgICAgLy9lZGdl VGJGbGFnc1sgeCArIHNiVyBdWyB5IF0gaXMgZXF1YWwgdG8gMQorICAgICAgICAgICAgbWF4X2xl bl9wID0gbWF4X2xlbl9xID0gMDsKKyAgICAgICAgICAgIGlmIChqID09IDQgfHwgaiA9PSBoZWln aHQgLSA0KQorICAgICAgICAgICAgICAgIG1heF9sZW5fcCA9IG1heF9sZW5fcSA9IDE7CisgICAg ICAgICAgICBlbHNlIGlmIChqID09IDggfHwgaiA9PSBoZWlnaHQgLSA4KQorICAgICAgICAgICAg ICAgIG1heF9sZW5fcCA9IG1heF9sZW5fcSA9IDI7CisgICAgICAgICAgICBlbHNlCisgICAgICAg ICAgICAgICAgbWF4X2xlbl9wID0gbWF4X2xlbl9xID0gMzsKKyAgICAgICAgICAgIFRBQl9NQVhf TEVOKGZjLT50YWIuaG9yaXpvbnRhbF9wLCB4LCB5KSA9IG1heF9sZW5fcDsKKyAgICAgICAgICAg IFRBQl9NQVhfTEVOKGZjLT50YWIuaG9yaXpvbnRhbF9xLCB4LCB5KSA9IG1heF9sZW5fcTsKKyAg ICAgICAgfQorICAgIH0KKworfQorCitzdGF0aWMgdm9pZCB2dmNfZGVibG9ja19ic19sdW1hX3Zl cnRpY2FsKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsCisgICAgY29uc3QgaW50IHgwLCBjb25z dCBpbnQgeTAsIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCkKK3sKKyAgICBjb25z dCBWVkNGcmFtZUNvbnRleHQgKmZjICA9IGxjLT5mYzsKKyAgICBNdkZpZWxkICp0YWJfbXZmICAg ICAgICAgICA9IGZjLT50YWIubXZmOworICAgIGNvbnN0IGludCBsb2cyX21pbl9wdV9zaXplID0g TUlOX1BVX0xPRzI7CisgICAgY29uc3QgaW50IGxvZzJfbWluX3R1X3NpemUgPSBNSU5fVFVfTE9H MjsKKyAgICBjb25zdCBpbnQgbWluX3B1X3dpZHRoICAgICA9IGZjLT5wcy5wcHMtPm1pbl9wdV93 aWR0aDsKKyAgICBjb25zdCBpbnQgbWluX3R1X3dpZHRoICAgICA9IGZjLT5wcy5wcHMtPm1pbl90 dV93aWR0aDsKKyAgICBjb25zdCBpbnQgbWluX2NiX2xvZzIgICAgICA9IGZjLT5wcy5zcHMtPm1p bl9jYl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQgbWluX2NiX3dpZHRoICAgICA9IGZjLT5w cy5wcHMtPm1pbl9jYl93aWR0aDsKKyAgICBpbnQgaXNfaW50cmEgPSB0YWJfbXZmWyh5MCA+PiBs b2cyX21pbl9wdV9zaXplKSAqIG1pbl9wdV93aWR0aCArCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAoeDAgPj4gbG9nMl9taW5fcHVfc2l6ZSldLnByZWRfZmxhZyA9PSBQRl9JTlRSQTsKKyAg ICBpbnQgYm91bmRhcnlfbGVmdDsKKyAgICBpbnQgaSwgYnMsIGhhc192ZXJ0aWNhbF9zYiA9IDA7 CisgICAgdWludDhfdCBtYXhfbGVuX3AsIG1heF9sZW5fcTsKKworICAgIGNvbnN0IGludCBvZmZf cSAgICAgICAgICAgID0gKHkwID4+IG1pbl9jYl9sb2cyKSAqIG1pbl9jYl93aWR0aCArICh4MCA+ PiBtaW5fY2JfbG9nMik7CisgICAgY29uc3QgaW50IGNiX3ggICAgICAgICAgICAgPSBmYy0+dGFi LmNiX3Bvc194W0xVTUFdW29mZl9xXTsKKyAgICBjb25zdCBpbnQgY2JfeSAgICAgICAgICAgICA9 IGZjLT50YWIuY2JfcG9zX3lbTFVNQV1bb2ZmX3FdOworICAgIGNvbnN0IGludCBjYl93aWR0aCAg ICAgICAgID0gZmMtPnRhYi5jYl93aWR0aFtMVU1BXVtvZmZfcV07CisKKyAgICBpZiAoIWlzX2lu dHJhKSB7CisgICAgICAgIGlmIChmYy0+dGFiLm1zZltvZmZfcV0gfHwgZmMtPnRhYi5pYWZbb2Zm X3FdKQorICAgICAgICAgICAgaGFzX3ZlcnRpY2FsX3NiICAgPSBjYl93aWR0aCAgPiA4OworICAg IH0KKworICAgIC8vIGJzIGZvciB2ZXJ0aWNhbCBUVSBib3VuZGFyaWVzCisgICAgYm91bmRhcnlf bGVmdCA9IHgwID4gMCAmJiAhKHgwICYgMyk7CisgICAgaWYgKGJvdW5kYXJ5X2xlZnQgJiYKKyAg ICAgICAgKCghZmMtPnBzLnBwcy0+bG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2Zs YWcgJiYKKyAgICAgICAgICAgIGxjLT5ib3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX0xFRlRfU0xJ Q0UgJiYKKyAgICAgICAgICAgICh4MCAlICgxIDw8IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVf eSkpID09IDApIHx8CisgICAgICAgICAgICAoIWZjLT5wcy5wcHMtPmxvb3BfZmlsdGVyX2Fjcm9z c190aWxlc19lbmFibGVkX2ZsYWcgJiYKKyAgICAgICAgICAgIGxjLT5ib3VuZGFyeV9mbGFncyAm IEJPVU5EQVJZX0xFRlRfVElMRSAmJgorICAgICAgICAgICAgKHgwICUgKDEgPDwgZmMtPnBzLnNw cy0+Y3RiX2xvZzJfc2l6ZV95KSkgPT0gMCkpKQorICAgICAgICBib3VuZGFyeV9sZWZ0ID0gMDsK KworICAgIGlmIChib3VuZGFyeV9sZWZ0KSB7CisgICAgICAgIGNvbnN0IFJlZlBpY0xpc3QgKnJw bF9sZWZ0ID0KKyAgICAgICAgICAgIChsYy0+Ym91bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9MRUZU X1NMSUNFKSA/IGZmX3Z2Y19nZXRfcmVmX2xpc3QoZmMsIGZjLT5yZWYsIHgwIC0gMSwgeTApIDog bGMtPnNjLT5ycGw7CisgICAgICAgIGludCB4cF9wdSA9ICh4MCAtIDEpID4+IGxvZzJfbWluX3B1 X3NpemU7CisgICAgICAgIGludCB4cV9wdSA9ICB4MCAgICAgID4+IGxvZzJfbWluX3B1X3NpemU7 CisgICAgICAgIGludCB4cF90dSA9ICh4MCAtIDEpID4+IGxvZzJfbWluX3R1X3NpemU7CisgICAg ICAgIGludCB4cV90dSA9ICB4MCAgICAgID4+IGxvZzJfbWluX3R1X3NpemU7CisKKyAgICAgICAg Zm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSArPSA0KSB7CisgICAgICAgICAgICBjb25zdCBpbnQg b2ZmX3ggPSBjYl94IC0geDA7CisgICAgICAgICAgICBpbnQgeV9wdSAgICAgID0gKHkwICsgaSkg Pj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgICAgIGludCB5X3R1ICAgICAgPSAoeTAgKyBp KSA+PiBsb2cyX21pbl90dV9zaXplOworICAgICAgICAgICAgTXZGaWVsZCAqbGVmdCA9ICZ0YWJf bXZmW3lfcHUgKiBtaW5fcHVfd2lkdGggKyB4cF9wdV07CisgICAgICAgICAgICBNdkZpZWxkICpj dXJyID0gJnRhYl9tdmZbeV9wdSAqIG1pbl9wdV93aWR0aCArIHhxX3B1XTsKKyAgICAgICAgICAg IHVpbnQ4X3QgbGVmdF9jYmZfbHVtYSA9IGZjLT50YWIudHVfY29kZWRfZmxhZ1tMVU1BXVt5X3R1 ICogbWluX3R1X3dpZHRoICsgeHBfdHVdOworICAgICAgICAgICAgdWludDhfdCBjdXJyX2NiZl9s dW1hID0gZmMtPnRhYi50dV9jb2RlZF9mbGFnW0xVTUFdW3lfdHUgKiBtaW5fdHVfd2lkdGggKyB4 cV90dV07CisgICAgICAgICAgICB1aW50OF90IHBjbWYgICAgICAgICAgPSBmYy0+dGFiLnBjbWZb TFVNQV1beV90dSAqIG1pbl90dV93aWR0aCArIHhwX3R1XSAmJgorICAgICAgICAgICAgICAgIGZj LT50YWIucGNtZltMVU1BXVt5X3R1ICogbWluX3R1X3dpZHRoICsgeHFfdHVdOworCisgICAgICAg ICAgICBpZiAocGNtZikKKyAgICAgICAgICAgICAgICBicyA9IDA7CisgICAgICAgICAgICBlbHNl IGlmIChjdXJyLT5wcmVkX2ZsYWcgPT0gUEZfSU5UUkEgfHwgbGVmdC0+cHJlZF9mbGFnID09IFBG X0lOVFJBIHx8IGN1cnItPmNpaXBfZmxhZyB8fCBsZWZ0LT5jaWlwX2ZsYWcpCisgICAgICAgICAg ICAgICAgYnMgPSAyOworICAgICAgICAgICAgZWxzZSBpZiAoY3Vycl9jYmZfbHVtYSB8fCBsZWZ0 X2NiZl9sdW1hKQorICAgICAgICAgICAgICAgIGJzID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYg KG9mZl94ICYmICgob2ZmX3ggJSA4KSB8fCAhaGFzX3ZlcnRpY2FsX3NiKSkKKyAgICAgICAgICAg ICAgICBicyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy9pbnNp ZGUgYSBjdSwgbm90IGFsaWduZWQgdG8gOCBvciB3aXRoIG5vIHN1YmJsb2NrcworICAgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgICAgIGJzID0gYm91bmRhcnlfc3RyZW5ndGgobGMsIGN1cnIs IGxlZnQsIHJwbF9sZWZ0KTsKKworICAgICAgICAgICAgVEFCX0JTKGZjLT50YWIudmVydGljYWxf YnNbTFVNQV0sIHgwLCAoeTAgKyBpKSkgPSBiczsKKworICAgICAgICAgICAgZGVyaXZlX21heF9m aWx0ZXJfbGVuZ3RoX2x1bWEoZmMsIHgwLCB5MCArIGksIGlzX2ludHJhLCBoYXNfdmVydGljYWxf c2IsIDEsICZtYXhfbGVuX3AsICZtYXhfbGVuX3EpOworICAgICAgICAgICAgVEFCX01BWF9MRU4o ZmMtPnRhYi52ZXJ0aWNhbF9wLCB4MCwgeTAgKyBpKSA9IG1heF9sZW5fcDsKKyAgICAgICAgICAg IFRBQl9NQVhfTEVOKGZjLT50YWIudmVydGljYWxfcSwgeDAsIHkwICsgaSkgPSBtYXhfbGVuX3E7 CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWlzX2ludHJhKSB7CisgICAgICAgIGlmIChm Yy0+dGFiLm1zZltvZmZfcV0gfHwgZmMtPnRhYi5pYWZbb2ZmX3FdKQorICAgICAgICAgICAgdnZj X2RlYmxvY2tfc3ViYmxvY2tfYnNfdmVydGljYWwobGMsIGNiX3gsIGNiX3ksIHgwLCB5MCwgd2lk dGgsIGhlaWdodCk7CisgICAgfQorCit9CitzdGF0aWMgdm9pZCB2dmNfZGVibG9ja19ic19sdW1h X2hvcml6b250YWwoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywKKyAgICBjb25zdCBpbnQgeDAs IGNvbnN0IGludCB5MCwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0KQoreworICAg IGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMgID0gbGMtPmZjOworICAgIE12RmllbGQgKnRhYl9t dmYgICAgICAgICAgID0gZmMtPnRhYi5tdmY7CisgICAgY29uc3QgaW50IGxvZzJfbWluX3B1X3Np emUgPSBNSU5fUFVfTE9HMjsKKyAgICBjb25zdCBpbnQgbG9nMl9taW5fdHVfc2l6ZSA9IE1JTl9U VV9MT0cyOworICAgIGNvbnN0IGludCBtaW5fcHVfd2lkdGggICAgID0gZmMtPnBzLnBwcy0+bWlu X3B1X3dpZHRoOworICAgIGNvbnN0IGludCBtaW5fdHVfd2lkdGggICAgID0gZmMtPnBzLnBwcy0+ bWluX3R1X3dpZHRoOworICAgIGNvbnN0IGludCBtaW5fY2JfbG9nMiAgICAgID0gZmMtPnBzLnNw cy0+bWluX2NiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCBtaW5fY2Jfd2lkdGggICAgID0g ZmMtPnBzLnBwcy0+bWluX2NiX3dpZHRoOworICAgIGludCBpc19pbnRyYSA9IHRhYl9tdmZbKHkw ID4+IGxvZzJfbWluX3B1X3NpemUpICogbWluX3B1X3dpZHRoICsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICh4MCA+PiBsb2cyX21pbl9wdV9zaXplKV0ucHJlZF9mbGFnID09IFBGX0lOVFJB OworICAgIGludCBib3VuZGFyeV91cHBlcjsKKyAgICBpbnQgaSwgYnMsIGhhc19ob3Jpem9udGFs X3NiID0gMDsKKyAgICB1aW50OF90IG1heF9sZW5fcCwgbWF4X2xlbl9xOworCisgICAgY29uc3Qg aW50IG9mZl9xICAgICAgICAgICAgPSAoeTAgPj4gbWluX2NiX2xvZzIpICogbWluX2NiX3dpZHRo ICsgKHgwID4+IG1pbl9jYl9sb2cyKTsKKyAgICBjb25zdCBpbnQgY2JfeCAgICAgICAgICAgICA9 IGZjLT50YWIuY2JfcG9zX3hbTFVNQV1bb2ZmX3FdOworICAgIGNvbnN0IGludCBjYl95ICAgICAg ICAgICAgID0gZmMtPnRhYi5jYl9wb3NfeVtMVU1BXVtvZmZfcV07CisgICAgY29uc3QgaW50IGNi X2hlaWdodCAgICAgICAgPSBmYy0+dGFiLmNiX2hlaWdodFtMVU1BXVtvZmZfcV07CisKKyAgICBp ZiAoIWlzX2ludHJhKSB7CisgICAgICAgIGlmIChmYy0+dGFiLm1zZltvZmZfcV0gfHwgZmMtPnRh Yi5pYWZbb2ZmX3FdKQorICAgICAgICAgICAgaGFzX2hvcml6b250YWxfc2IgPSBjYl9oZWlnaHQg PiA4OworICAgIH0KKworICAgIGJvdW5kYXJ5X3VwcGVyID0geTAgPiAwICYmICEoeTAgJiAzKTsK KyAgICBpZiAoYm91bmRhcnlfdXBwZXIgJiYKKyAgICAgICAgKCghZmMtPnBzLnBwcy0+bG9vcF9m aWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWcgJiYKKyAgICAgICAgICAgIGxjLT5ib3Vu ZGFyeV9mbGFncyAmIEJPVU5EQVJZX1VQUEVSX1NMSUNFICYmCisgICAgICAgICAgICAoeTAgJSAo MSA8PCBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3kpKSA9PSAwKSB8fAorICAgICAgICAgICAg KCFmYy0+cHMucHBzLT5sb29wX2ZpbHRlcl9hY3Jvc3NfdGlsZXNfZW5hYmxlZF9mbGFnICYmCisg ICAgICAgICAgICBsYy0+Ym91bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9VUFBFUl9USUxFICYmCisg ICAgICAgICAgICAoeTAgJSAoMSA8PCBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3kpKSA9PSAw KSkpCisgICAgICAgIGJvdW5kYXJ5X3VwcGVyID0gMDsKKworICAgIGlmIChib3VuZGFyeV91cHBl cikgeworICAgICAgICBjb25zdCBSZWZQaWNMaXN0ICpycGxfdG9wID0KKyAgICAgICAgICAgIChs Yy0+Ym91bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9VUFBFUl9TTElDRSkgPyBmZl92dmNfZ2V0X3Jl Zl9saXN0KGZjLCBmYy0+cmVmLCB4MCwgeTAgLSAxKSA6IGxjLT5zYy0+cnBsOworICAgICAgICBp bnQgeXBfcHUgPSAoeTAgLSAxKSA+PiBsb2cyX21pbl9wdV9zaXplOworICAgICAgICBpbnQgeXFf cHUgPSAgeTAgICAgICA+PiBsb2cyX21pbl9wdV9zaXplOworICAgICAgICBpbnQgeXBfdHUgPSAo eTAgLSAxKSA+PiBsb2cyX21pbl90dV9zaXplOworICAgICAgICBpbnQgeXFfdHUgPSAgeTAgICAg ICA+PiBsb2cyX21pbl90dV9zaXplOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB3aWR0aDsg aSArPSA0KSB7CisgICAgICAgICAgICBjb25zdCBpbnQgb2ZmX3kgPSB5MCAtIGNiX3k7CisgICAg ICAgICAgICBpbnQgeF9wdSA9ICh4MCArIGkpID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAg ICAgICBpbnQgeF90dSA9ICh4MCArIGkpID4+IGxvZzJfbWluX3R1X3NpemU7CisgICAgICAgICAg ICBNdkZpZWxkICp0b3AgID0gJnRhYl9tdmZbeXBfcHUgKiBtaW5fcHVfd2lkdGggKyB4X3B1XTsK KyAgICAgICAgICAgIE12RmllbGQgKmN1cnIgPSAmdGFiX212Zlt5cV9wdSAqIG1pbl9wdV93aWR0 aCArIHhfcHVdOworICAgICAgICAgICAgdWludDhfdCB0b3BfY2JmX2x1bWEgID0gZmMtPnRhYi50 dV9jb2RlZF9mbGFnW0xVTUFdW3lwX3R1ICogbWluX3R1X3dpZHRoICsgeF90dV07CisgICAgICAg ICAgICB1aW50OF90IGN1cnJfY2JmX2x1bWEgPSBmYy0+dGFiLnR1X2NvZGVkX2ZsYWdbTFVNQV1b eXFfdHUgKiBtaW5fdHVfd2lkdGggKyB4X3R1XTsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qg cGNtZiAgICA9IGZjLT50YWIucGNtZltMVU1BXVt5cF90dSAqIG1pbl90dV93aWR0aCArIHhfdHVd ICYmCisgICAgICAgICAgICAgICAgZmMtPnRhYi5wY21mW0xVTUFdW3lxX3R1ICogbWluX3R1X3dp ZHRoICsgeF90dV07CisKKyAgICAgICAgICAgIGlmIChwY21mKQorICAgICAgICAgICAgICAgIGJz ID0gMDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGN1cnItPnByZWRfZmxhZyA9PSBQRl9JTlRSQSB8 fCB0b3AtPnByZWRfZmxhZyA9PSBQRl9JTlRSQSB8fCBjdXJyLT5jaWlwX2ZsYWcgfHwgdG9wLT5j aWlwX2ZsYWcpCisgICAgICAgICAgICAgICAgYnMgPSAyOworICAgICAgICAgICAgZWxzZSBpZiAo Y3Vycl9jYmZfbHVtYSB8fCB0b3BfY2JmX2x1bWEpCisgICAgICAgICAgICAgICAgYnMgPSAxOwor ICAgICAgICAgICAgZWxzZSBpZiAob2ZmX3kgJiYgKChvZmZfeSAlIDgpIHx8ICFoYXNfaG9yaXpv bnRhbF9zYikpCisgICAgICAgICAgICAgICAgYnMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvL2luc2lkZSBhIGN1LCBub3QgYWxpZ25lZCB0byA4IG9yIHdpdGggbm8g c3ViYmxvY2tzCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYnMgPSBib3VuZGFy eV9zdHJlbmd0aChsYywgY3VyciwgdG9wLCBycGxfdG9wKTsKKworICAgICAgICAgICAgVEFCX0JT KGZjLT50YWIuaG9yaXpvbnRhbF9ic1tMVU1BXSwgeDAgKyBpLCB5MCkgPSBiczsKKworICAgICAg ICAgICAgZGVyaXZlX21heF9maWx0ZXJfbGVuZ3RoX2x1bWEoZmMsIHgwICsgaSwgeTAsIGlzX2lu dHJhLCBoYXNfaG9yaXpvbnRhbF9zYiwgMCwgJm1heF9sZW5fcCwgJm1heF9sZW5fcSk7CisgICAg ICAgICAgICBUQUJfTUFYX0xFTihmYy0+dGFiLmhvcml6b250YWxfcCwgeDAgKyBpLCB5MCkgPSBt YXhfbGVuX3A7CisgICAgICAgICAgICBUQUJfTUFYX0xFTihmYy0+dGFiLmhvcml6b250YWxfcSwg eDAgKyBpLCB5MCkgPSBtYXhfbGVuX3E7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWlz X2ludHJhKSB7CisgICAgICAgIGlmIChmYy0+dGFiLm1zZltvZmZfcV0gfHwgZmMtPnRhYi5pYWZb b2ZmX3FdKQorICAgICAgICAgICAgdnZjX2RlYmxvY2tfc3ViYmxvY2tfYnNfaG9yaXpvbnRhbChs YywgY2JfeCwgY2JfeSwgeDAsIHkwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9Cit9CisKK3N0YXRp YyB2b2lkIHZ2Y19kZWJsb2NrX2JzX2Nocm9tYV92ZXJ0aWNhbChjb25zdCBWVkNMb2NhbENvbnRl eHQgKmxjLAorICAgIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLCBjb25zdCBpbnQgd2lkdGgs IGNvbnN0IGludCBoZWlnaHQpCit7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYyAgPSBs Yy0+ZmM7CisgICAgTXZGaWVsZCAqdGFiX212ZiAgICAgICAgICAgPSBmYy0+dGFiLm12ZjsKKyAg ICBjb25zdCBpbnQgbG9nMl9taW5fcHVfc2l6ZSA9IE1JTl9QVV9MT0cyOworICAgIGNvbnN0IGlu dCBsb2cyX21pbl90dV9zaXplID0gTUlOX1BVX0xPRzI7CisgICAgY29uc3QgaW50IG1pbl9wdV93 aWR0aCAgICAgPSBmYy0+cHMucHBzLT5taW5fcHVfd2lkdGg7CisgICAgY29uc3QgaW50IG1pbl90 dV93aWR0aCAgICAgPSBmYy0+cHMucHBzLT5taW5fdHVfd2lkdGg7CisgICAgaW50IGJvdW5kYXJ5 X2xlZnQsIGk7CisKKyAgICAvLyBicyBmb3IgdmVydGljYWwgVFUgYm91bmRhcmllcworICAgIGJv dW5kYXJ5X2xlZnQgPSB4MCA+IDAgJiYgISh4MCAmICgoQ0hST01BX0dSSUQgPDwgZmMtPnBzLnNw cy0+aHNoaWZ0WzFdKSAtIDEpKTsKKyAgICBpZiAoYm91bmRhcnlfbGVmdCAmJgorICAgICAgICAo KCFmYy0+cHMucHBzLT5sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZyAmJgor ICAgICAgICAgIGxjLT5ib3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX0xFRlRfU0xJQ0UgJiYKKyAg ICAgICAgICAoeDAgJSAoMSA8PCBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3kpKSA9PSAwKSB8 fAorICAgICAgICAgKCFmYy0+cHMucHBzLT5sb29wX2ZpbHRlcl9hY3Jvc3NfdGlsZXNfZW5hYmxl ZF9mbGFnICYmCisgICAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfTEVGVF9U SUxFICYmCisgICAgICAgICAgKHgwICUgKDEgPDwgZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95 KSkgPT0gMCkpKQorICAgICAgICBib3VuZGFyeV9sZWZ0ID0gMDsKKworICAgIGlmIChib3VuZGFy eV9sZWZ0KSB7CisgICAgICAgIGludCB4cF9wdSA9ICh4MCAtIDEpID4+IGxvZzJfbWluX3B1X3Np emU7CisgICAgICAgIGludCB4cV9wdSA9ICB4MCAgICAgID4+IGxvZzJfbWluX3B1X3NpemU7Cisg ICAgICAgIGludCB4cF90dSA9ICh4MCAtIDEpID4+IGxvZzJfbWluX3R1X3NpemU7CisgICAgICAg IGludCB4cV90dSA9ICB4MCAgICAgID4+IGxvZzJfbWluX3R1X3NpemU7CisKKyAgICAgICAgZm9y IChpID0gMDsgaSA8IGhlaWdodDsgaSArPSAyKSB7CisgICAgICAgICAgICBpbnQgeV9wdSAgICAg ID0gKHkwICsgaSkgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgICAgIGludCB5X3R1ICAg ICAgPSAoeTAgKyBpKSA+PiBsb2cyX21pbl90dV9zaXplOworICAgICAgICAgICAgTXZGaWVsZCAq bGVmdCA9ICZ0YWJfbXZmW3lfcHUgKiBtaW5fcHVfd2lkdGggKyB4cF9wdV07CisgICAgICAgICAg ICBNdkZpZWxkICpjdXJyID0gJnRhYl9tdmZbeV9wdSAqIG1pbl9wdV93aWR0aCArIHhxX3B1XTsK KyAgICAgICAgICAgIGNvbnN0IGludCBsZWZ0X3R1ID0geV90dSAqIG1pbl90dV93aWR0aCArIHhw X3R1OworICAgICAgICAgICAgY29uc3QgaW50IGN1cnJfdHUgPSB5X3R1ICogbWluX3R1X3dpZHRo ICsgeHFfdHU7CisgICAgICAgICAgICBjb25zdCB1aW50OF90IHBjbWYgPSBmYy0+dGFiLnBjbWZb Q0hST01BXVtsZWZ0X3R1XSAmJiBmYy0+dGFiLnBjbWZbQ0hST01BXVtjdXJyX3R1XTsKKworICAg ICAgICAgICAgZm9yIChpbnQgYyA9IENCOyBjIDw9IENSOyBjKyspIHsKKyAgICAgICAgICAgICAg ICB1aW50OF90IGNiZiAgPSBmYy0+dGFiLnR1X2NvZGVkX2ZsYWdbY11bbGVmdF90dV0gfAorICAg ICAgICAgICAgICAgICAgICBmYy0+dGFiLnR1X2NvZGVkX2ZsYWdbY11bY3Vycl90dV0gfAorICAg ICAgICAgICAgICAgICAgICBmYy0+dGFiLnR1X2pvaW50X2NiY3JfcmVzaWR1YWxfZmxhZ1tsZWZ0 X3R1XSB8CisgICAgICAgICAgICAgICAgICAgIGZjLT50YWIudHVfam9pbnRfY2Jjcl9yZXNpZHVh bF9mbGFnW2N1cnJfdHVdOworICAgICAgICAgICAgICAgIGludCBicyA9IDA7CisKKyAgICAgICAg ICAgICAgICBpZiAocGNtZikKKyAgICAgICAgICAgICAgICAgICAgYnMgPSAwOworICAgICAgICAg ICAgICAgIGVsc2UgaWYgKGN1cnItPnByZWRfZmxhZyA9PSBQRl9JTlRSQSB8fCBsZWZ0LT5wcmVk X2ZsYWcgPT0gUEZfSU5UUkEgfHwgY3Vyci0+Y2lpcF9mbGFnIHx8IGxlZnQtPmNpaXBfZmxhZykK KyAgICAgICAgICAgICAgICAgICAgYnMgPSAyOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNi ZikKKyAgICAgICAgICAgICAgICAgICAgYnMgPSAxOworICAgICAgICAgICAgICAgIFRBQl9CUyhm Yy0+dGFiLnZlcnRpY2FsX2JzW2NdLCB4MCwgKHkwICsgaSkpID0gYnM7CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHZ2Y19kZWJsb2NrX2JzX2Nocm9t YV9ob3Jpem9udGFsKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsCisgICAgY29uc3QgaW50IHgw LCBjb25zdCBpbnQgeTAsIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCkKK3sKKyAg ICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjID0gbGMtPmZjOworICAgIE12RmllbGQgKnRhYl9t dmYgPSBmYy0+dGFiLm12ZjsKKyAgICBjb25zdCBpbnQgbG9nMl9taW5fcHVfc2l6ZSA9IE1JTl9Q VV9MT0cyOworICAgIGNvbnN0IGludCBsb2cyX21pbl90dV9zaXplID0gTUlOX1BVX0xPRzI7Cisg ICAgY29uc3QgaW50IG1pbl9wdV93aWR0aCA9IGZjLT5wcy5wcHMtPm1pbl9wdV93aWR0aDsKKyAg ICBjb25zdCBpbnQgbWluX3R1X3dpZHRoID0gZmMtPnBzLnBwcy0+bWluX3R1X3dpZHRoOworICAg IGludCBib3VuZGFyeV91cHBlcjsKKyAgICBpbnQgaTsKKworICAgIGJvdW5kYXJ5X3VwcGVyID0g eTAgPiAwICYmICEoeTAgJiAoKENIUk9NQV9HUklEIDw8IGZjLT5wcy5zcHMtPnZzaGlmdFsxXSkg LSAxKSk7CisgICAgaWYgKGJvdW5kYXJ5X3VwcGVyICYmCisgICAgICAgICgoIWZjLT5wcy5wcHMt Pmxvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnICYmCisgICAgICAgICAgICBs Yy0+Ym91bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9VUFBFUl9TTElDRSAmJgorICAgICAgICAgICAg KHkwICUgKDEgPDwgZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95KSkgPT0gMCkgfHwKKyAgICAg ICAgICAgICghZmMtPnBzLnBwcy0+bG9vcF9maWx0ZXJfYWNyb3NzX3RpbGVzX2VuYWJsZWRfZmxh ZyAmJgorICAgICAgICAgICAgICAgIGxjLT5ib3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX1VQUEVS X1RJTEUgJiYKKyAgICAgICAgICAgICAgICAoeTAgJSAoMSA8PCBmYy0+cHMuc3BzLT5jdGJfbG9n Ml9zaXplX3kpKSA9PSAwKSkpCisgICAgICAgIGJvdW5kYXJ5X3VwcGVyID0gMDsKKworICAgIGlm IChib3VuZGFyeV91cHBlcikgeworICAgICAgICBpbnQgeXBfcHUgPSAoeTAgLSAxKSA+PiBsb2cy X21pbl9wdV9zaXplOworICAgICAgICBpbnQgeXFfcHUgPSB5MCA+PiBsb2cyX21pbl9wdV9zaXpl OworICAgICAgICBpbnQgeXBfdHUgPSAoeTAgLSAxKSA+PiBsb2cyX21pbl90dV9zaXplOworICAg ICAgICBpbnQgeXFfdHUgPSB5MCA+PiBsb2cyX21pbl90dV9zaXplOworCisgICAgICAgIGZvciAo aSA9IDA7IGkgPCB3aWR0aDsgaSArPSAyKSB7CisgICAgICAgICAgICBpbnQgeF9wdSA9ICh4MCAr IGkpID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgICAgICBpbnQgeF90dSA9ICh4MCArIGkp ID4+IGxvZzJfbWluX3R1X3NpemU7CisgICAgICAgICAgICBNdkZpZWxkICp0b3AgPSAmdGFiX212 Zlt5cF9wdSAqIG1pbl9wdV93aWR0aCArIHhfcHVdOworICAgICAgICAgICAgTXZGaWVsZCAqY3Vy ciA9ICZ0YWJfbXZmW3lxX3B1ICogbWluX3B1X3dpZHRoICsgeF9wdV07CisgICAgICAgICAgICBj b25zdCBpbnQgdG9wX3R1ID0geXBfdHUgKiBtaW5fdHVfd2lkdGggKyB4X3R1OworICAgICAgICAg ICAgY29uc3QgaW50IGN1cnJfdHUgPSB5cV90dSAqIG1pbl90dV93aWR0aCArIHhfdHU7CisgICAg ICAgICAgICBjb25zdCB1aW50OF90IHBjbWYgPSBmYy0+dGFiLnBjbWZbQ0hST01BXVt0b3BfdHVd ICYmIGZjLT50YWIucGNtZltDSFJPTUFdW2N1cnJfdHVdOworCisgICAgICAgICAgICBmb3IgKGlu dCBjID0gQ0I7IGMgPD0gQ1I7IGMrKykgeworICAgICAgICAgICAgICAgIHVpbnQ4X3QgY2JmID0g ZmMtPnRhYi50dV9jb2RlZF9mbGFnW2NdW3RvcF90dV0gfAorICAgICAgICAgICAgICAgICAgICBm Yy0+dGFiLnR1X2NvZGVkX2ZsYWdbY11bY3Vycl90dV0gfAorICAgICAgICAgICAgICAgICAgICBm Yy0+dGFiLnR1X2pvaW50X2NiY3JfcmVzaWR1YWxfZmxhZ1t0b3BfdHVdIHwKKyAgICAgICAgICAg ICAgICAgICAgZmMtPnRhYi50dV9qb2ludF9jYmNyX3Jlc2lkdWFsX2ZsYWdbY3Vycl90dV07Cisg ICAgICAgICAgICAgICAgaW50IGJzID0gMDsKKworICAgICAgICAgICAgICAgIGlmIChwY21mKQor ICAgICAgICAgICAgICAgICAgICBicyA9IDA7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3Vy ci0+cHJlZF9mbGFnID09IFBGX0lOVFJBIHx8IHRvcC0+cHJlZF9mbGFnID09IFBGX0lOVFJBIHx8 IGN1cnItPmNpaXBfZmxhZyB8fCB0b3AtPmNpaXBfZmxhZykKKyAgICAgICAgICAgICAgICAgICAg YnMgPSAyOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNiZikKKyAgICAgICAgICAgICAgICAg ICAgYnMgPSAxOworICAgICAgICAgICAgICAgIFRBQl9CUyhmYy0+dGFiLmhvcml6b250YWxfYnNb Y10sIHgwICsgaSwgeTApID0gYnM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9 CisKK3R5cGVkZWYgdm9pZCAoKmRlYmxvY2tfYnNfZm4pKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAq bGMsIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLAorICAgIGNvbnN0IGludCB3aWR0aCwgY29u c3QgaW50IGhlaWdodCk7CisKK3N0YXRpYyB2b2lkIHZ2Y19kZWJsb2NrX2JzKGNvbnN0IFZWQ0xv Y2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLCBjb25zdCBpbnQgdmVy dGljYWwpCit7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYyA9IGxjLT5mYzsKKyAgICBj b25zdCBWVkNTUFMgKnNwcyAgID0gZmMtPnBzLnNwczsKKyAgICBjb25zdCBWVkNQUFMgKnBwcyAg ID0gZmMtPnBzLnBwczsKKyAgICBjb25zdCBpbnQgY3RiX3NpemUgID0gc3BzLT5jdGJfc2l6ZV95 OworICAgIGNvbnN0IGludCB4X2VuZCAgICAgPSBGRk1JTih4MCArIGN0Yl9zaXplLCBwcHMtPndp ZHRoKSA+PiBNSU5fVFVfTE9HMjsKKyAgICBjb25zdCBpbnQgeV9lbmQgICAgID0gRkZNSU4oeTAg KyBjdGJfc2l6ZSwgcHBzLT5oZWlnaHQpID4+IE1JTl9UVV9MT0cyOworICAgIGRlYmxvY2tfYnNf Zm4gZGVibG9ja19ic1syXVsyXSA9IHsKKyAgICAgICAgeyB2dmNfZGVibG9ja19ic19sdW1hX2hv cml6b250YWwsIHZ2Y19kZWJsb2NrX2JzX2Nocm9tYV9ob3Jpem9udGFsIH0sCisgICAgICAgIHsg dnZjX2RlYmxvY2tfYnNfbHVtYV92ZXJ0aWNhbCwgICB2dmNfZGVibG9ja19ic19jaHJvbWFfdmVy dGljYWwgICB9CisgICAgfTsKKworICAgIGZvciAoaW50IGlzX2Nocm9tYSA9IDA7IGlzX2Nocm9t YSA8PSAxOyBpc19jaHJvbWErKykgeworICAgICAgICBjb25zdCBpbnQgaHMgPSBzcHMtPmhzaGlm dFtpc19jaHJvbWFdOworICAgICAgICBjb25zdCBpbnQgdnMgPSBzcHMtPnZzaGlmdFtpc19jaHJv bWFdOworICAgICAgICBmb3IgKGludCB5ID0geTAgPj4gTUlOX1RVX0xPRzI7IHkgPCB5X2VuZDsg eSsrKSB7CisgICAgICAgICAgICBmb3IgKGludCB4ID0geDAgPj4gTUlOX1RVX0xPRzI7IHggPCB4 X2VuZDsgeCsrKSB7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IG9mZiA9IHkgKiBmYy0+cHMu cHBzLT5taW5fdHVfd2lkdGggKyB4OworICAgICAgICAgICAgICAgIGlmICgoZmMtPnRhYi50Yl9w b3NfeDBbaXNfY2hyb21hXVtvZmZdID4+IE1JTl9UVV9MT0cyKSA9PSB4ICYmIChmYy0+dGFiLnRi X3Bvc195MFtpc19jaHJvbWFdW29mZl0gPj4gTUlOX1RVX0xPRzIpID09IHkpIHsKKyAgICAgICAg ICAgICAgICAgICAgZGVibG9ja19ic1t2ZXJ0aWNhbF1baXNfY2hyb21hXShsYywgeCA8PCBNSU5f VFVfTE9HMiwgeSA8PCBNSU5fVFVfTE9HMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZjLT50 YWIudGJfd2lkdGhbaXNfY2hyb21hXVtvZmZdIDw8IGhzLCBmYy0+dGFiLnRiX2hlaWdodFtpc19j aHJvbWFdW29mZl0gPDwgdnMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgIH0KK30KKworLy9wYXJ0IG9mIDguOC4zLjMgRGVyaXZhdGlvbiBwcm9jZXNz IG9mIHRyYW5zZm9ybSBibG9jayBib3VuZGFyeQorc3RhdGljIHZvaWQgbWF4X2ZpbHRlcl9sZW5n dGhfbHVtYShjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjLCBjb25zdCBpbnQgcXgsIGNvbnN0IGlu dCBxeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHZlcnRp Y2FsLCB1aW50OF90ICptYXhfbGVuX3AsIHVpbnQ4X3QgKm1heF9sZW5fcSkKK3sKKyAgICBjb25z dCB1aW50OF90ICp0YWJfbGVuX3AgPSB2ZXJ0aWNhbCA/IGZjLT50YWIudmVydGljYWxfcCA6IGZj LT50YWIuaG9yaXpvbnRhbF9wOworICAgIGNvbnN0IHVpbnQ4X3QgKnRhYl9sZW5fcSA9IHZlcnRp Y2FsID8gZmMtPnRhYi52ZXJ0aWNhbF9xIDogZmMtPnRhYi5ob3Jpem9udGFsX3E7CisgICAgKm1h eF9sZW5fcCA9IFRBQl9NQVhfTEVOKHRhYl9sZW5fcCwgcXgsIHF5KTsKKyAgICAqbWF4X2xlbl9x ID0gVEFCX01BWF9MRU4odGFiX2xlbl9xLCBxeCwgcXkpOworfQorCisvL3BhcnQgb2YgOC44LjMu MyBEZXJpdmF0aW9uIHByb2Nlc3Mgb2YgdHJhbnNmb3JtIGJsb2NrIGJvdW5kYXJ5CitzdGF0aWMg dm9pZCBtYXhfZmlsdGVyX2xlbmd0aF9jaHJvbWEoY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYywg Y29uc3QgaW50IHF4LCBjb25zdCBpbnQgcXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgaW50IHZlcnRpY2FsLCBjb25zdCBpbnQgaG9yaXpvbnRhbF9jdHVfZWRn ZSwgY29uc3QgaW50IGJzLCB1aW50OF90ICptYXhfbGVuX3AsIHVpbnQ4X3QgKm1heF9sZW5fcSkK K3sKKyAgICBjb25zdCBpbnQgcHggPSAgdmVydGljYWwgPyBxeCAtIDEgOiBxeDsKKyAgICBjb25z dCBpbnQgcHkgPSAhdmVydGljYWwgPyBxeSAtIDEgOiBxeTsKKyAgICBjb25zdCB1aW50OF90ICp0 Yl9zaXplID0gdmVydGljYWwgPyBmYy0+dGFiLnRiX3dpZHRoW0NIUk9NQV0gOiBmYy0+dGFiLnRi X2hlaWdodFtDSFJPTUFdOworCisgICAgY29uc3QgaW50IHNpemVfcCA9IHRiX3NpemVbKHB5ID4+ IE1JTl9UVV9MT0cyKSAqIGZjLT5wcy5wcHMtPm1pbl90dV93aWR0aCArIChweCA+PiBNSU5fVFVf TE9HMildOworICAgIGNvbnN0IGludCBzaXplX3EgPSB0Yl9zaXplWyhxeSA+PiBNSU5fVFVfTE9H MikgKiBmYy0+cHMucHBzLT5taW5fdHVfd2lkdGggKyAocXggPj4gTUlOX1RVX0xPRzIpXTsKKyAg ICBpZiAoc2l6ZV9wID49IDggJiYgc2l6ZV9xID49IDgpIHsKKyAgICAgICAgKm1heF9sZW5fcCA9 ICptYXhfbGVuX3EgPSAzOworICAgICAgICBpZiAoaG9yaXpvbnRhbF9jdHVfZWRnZSkKKyAgICAg ICAgICAgICptYXhfbGVuX3AgPSAxOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vcGFydCBvZiA4 LjguMy42LjQgRGVjaXNpb24gcHJvY2VzcyBmb3IgY2hyb21hIGJsb2NrIGVkZ2VzCisgICAgICAg ICptYXhfbGVuX3AgPSAqbWF4X2xlbl9xID0gKGJzID09IDIpOworICAgIH0KK30KKworc3RhdGlj IHZvaWQgbWF4X2ZpbHRlcl9sZW5ndGgoY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYywgY29uc3Qg aW50IHF4LCBjb25zdCBpbnQgcXksCisgICAgY29uc3QgaW50IGNfaWR4LCBjb25zdCBpbnQgdmVy dGljYWwsIGNvbnN0IGludCBob3Jpem9udGFsX2N0dV9lZGdlLCBjb25zdCBpbnQgYnMsIHVpbnQ4 X3QgKm1heF9sZW5fcCwgdWludDhfdCAqbWF4X2xlbl9xKQoreworICAgIGlmICghY19pZHgpCisg ICAgICAgIG1heF9maWx0ZXJfbGVuZ3RoX2x1bWEoZmMsIHF4LCBxeSwgdmVydGljYWwsIG1heF9s ZW5fcCwgbWF4X2xlbl9xKTsKKyAgICBlbHNlCisgICAgICAgIG1heF9maWx0ZXJfbGVuZ3RoX2No cm9tYShmYywgcXgsIHF5LCB2ZXJ0aWNhbCwgaG9yaXpvbnRhbF9jdHVfZWRnZSwgYnMsIG1heF9s ZW5fcCwgbWF4X2xlbl9xKTsKK30KKworI2RlZmluZSBUQ19DQUxDKHFwLCBicykgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRjdGFibGVbYXZf Y2xpcCgocXApICsgREVGQVVMVF9JTlRSQV9UQ19PRkZTRVQgKiAoKGJzKSAtIDEpICsgICAgICAg XAorICAgICAgICAgICAgICAgICAgICAodGNfb2Zmc2V0ICYgLTIpLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAwLCBNQVhfUVAgKyBERUZB VUxUX0lOVFJBX1RDX09GRlNFVCldCisKKy8vIHBhcnQgb2YgOC44LjMuNi4yIERlY2lzaW9uIHBy b2Nlc3MgZm9yIGx1bWEgYmxvY2sgZWRnZXMKK3N0YXRpYyBpbnQgZ2V0X3FwX3koY29uc3QgVlZD RnJhbWVDb250ZXh0ICpmYywgY29uc3QgdWludDhfdCAqc3JjLCBjb25zdCBpbnQgeCwgY29uc3Qg aW50IHksIGNvbnN0IGludCB2ZXJ0aWNhbCkKK3sKKyAgICBjb25zdCBWVkNTUFMgKnNwcyAgID0g ZmMtPnBzLnNwczsKKyAgICBjb25zdCBpbnQgcXAgICAgICAgID0gKGZmX3Z2Y19nZXRfcVB5KGZj LCB4IC0gdmVydGljYWwsIHkgLSAhdmVydGljYWwpICsgZmZfdnZjX2dldF9xUHkoZmMsIHgsIHkp ICsgMSkgPj4gMTsKKyAgICBpbnQgcXBfb2Zmc2V0ICAgICAgID0gMDsKKyAgICBpbnQgbGV2ZWw7 CisKKyAgICBpZiAoIXNwcy0+bGFkZl9lbmFibGVkX2ZsYWcpCisgICAgICAgIHJldHVybiBxcDsK KworICAgIGxldmVsID0gZmMtPnZ2Y2RzcC5sZi5sYWRmX2xldmVsW3ZlcnRpY2FsXShzcmMsIGZj LT5mcmFtZS0+bGluZXNpemVbTFVNQV0pOworICAgIHFwX29mZnNldCA9IHNwcy0+bGFkZl9sb3dl c3RfaW50ZXJ2YWxfcXBfb2Zmc2V0OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3BzLT5udW1f bGFkZl9pbnRlcnZhbHMgLSAxICYmIGxldmVsID4gc3BzLT5sYWRmX2ludGVydmFsX2xvd2VyX2Jv dW5kW2kgKyAxXTsgaSsrKQorICAgICAgICBxcF9vZmZzZXQgPSBzcHMtPmxhZGZfcXBfb2Zmc2V0 W2ldOworCisgICAgcmV0dXJuIHFwICsgcXBfb2Zmc2V0OworfQorCisvLyBwYXJ0IG9mIDguOC4z LjYuMiBEZWNpc2lvbiBwcm9jZXNzIGZvciBsdW1hIGJsb2NrIGVkZ2VzCitzdGF0aWMgaW50IGdl dF9xcF9jKGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IGludCB4LCBjb25zdCBpbnQg eSwgY29uc3QgaW50IGNfaWR4LCBjb25zdCBpbnQgdmVydGljYWwpCit7CisgICAgY29uc3QgVlZD U1BTICpzcHMgICA9IGZjLT5wcy5zcHM7CisgICAgcmV0dXJuIChnZXRfcVBjKGZjLCB4IC0gdmVy dGljYWwsIHkgLSAhdmVydGljYWwsIGNfaWR4KSArIGdldF9xUGMoZmMsIHgsIHksIGNfaWR4KSAt IDIgKiBzcHMtPnFwX2JkX29mZnNldCArIDEpID4+IDE7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3Fw KGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IHVpbnQ4X3QgKnNyYywgY29uc3QgaW50 IHgsIGNvbnN0IGludCB5LCBjb25zdCBpbnQgY19pZHgsIGNvbnN0IGludCB2ZXJ0aWNhbCkKK3sK KyAgICBpZiAoIWNfaWR4KQorICAgICAgICByZXR1cm4gZ2V0X3FwX3koZmMsIHNyYywgeCwgeSwg dmVydGljYWwpOworICAgIHJldHVybiBnZXRfcXBfYyhmYywgeCwgeSwgY19pZHgsIHZlcnRpY2Fs KTsKK30KKwordm9pZCBmZl92dmNfZGVibG9ja192ZXJ0aWNhbChjb25zdCBWVkNMb2NhbENvbnRl eHQgKmxjLCBpbnQgeDAsIGludCB5MCkKK3sKKyAgICBWVkNGcmFtZUNvbnRleHQgKmZjID0gbGMt PmZjOworICAgIGNvbnN0IFZWQ1NQUyAqc3BzICAgPSBmYy0+cHMuc3BzOworICAgIGNvbnN0IGlu dCBjX2VuZCAgICAgPSBmYy0+cHMuc3BzLT5jaHJvbWFfZm9ybWF0X2lkYyA/IFZWQ19NQVhfU0FN UExFX0FSUkFZUyA6IDE7CisgICAgdWludDhfdCAqc3JjOworICAgIGludCB4LCB5LCBiZXRhLCB0 YywgcXA7CisgICAgdWludDhfdCBub19wID0gMDsKKyAgICB1aW50OF90IG5vX3EgPSAwOworCisg ICAgaW50IGN0Yl9sb2cyX3NpemVfeSA9IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeTsKKyAg ICBpbnQgeF9lbmQsIHlfZW5kOworICAgIGludCBjdGJfc2l6ZSA9IDEgPDwgY3RiX2xvZzJfc2l6 ZV95OworICAgIGludCBjdGIgPSAoeDAgPj4gY3RiX2xvZzJfc2l6ZV95KSArCisgICAgICAgICh5 MCA+PiBjdGJfbG9nMl9zaXplX3kpICogZmMtPnBzLnBwcy0+Y3RiX3dpZHRoOworICAgIERCUGFy YW1zICAqcGFyYW1zID0gZmMtPnRhYi5kZWJsb2NrICsgY3RiOworCisgICAgdnZjX2RlYmxvY2tf YnMobGMsIHgwLCB5MCwgMSk7CisKKyAgICB4X2VuZCA9IHgwICsgY3RiX3NpemU7CisgICAgaWYg KHhfZW5kID4gZmMtPnBzLnNwcy0+d2lkdGgpCisgICAgICAgIHhfZW5kID0gZmMtPnBzLnNwcy0+ d2lkdGg7CisgICAgeV9lbmQgPSB5MCArIGN0Yl9zaXplOworICAgIGlmICh5X2VuZCA+IGZjLT5w cy5zcHMtPmhlaWdodCkKKyAgICAgICAgeV9lbmQgPSBmYy0+cHMuc3BzLT5oZWlnaHQ7CisKKyAg ICBmb3IgKGludCBjX2lkeCA9IDA7IGNfaWR4IDwgY19lbmQ7IGNfaWR4KyspIHsKKyAgICAgICAg Y29uc3QgaW50IGhzICAgICAgICAgICAgPSBzcHMtPmhzaGlmdFtjX2lkeF07CisgICAgICAgIGNv bnN0IGludCB2cyAgICAgICAgICAgID0gc3BzLT52c2hpZnRbY19pZHhdOworICAgICAgICBjb25z dCBpbnQgZ3JpZCAgICAgICAgICA9IGNfaWR4ID8gKENIUk9NQV9HUklEIDw8IGhzKSA6IExVTUFf R1JJRDsKKyAgICAgICAgY29uc3QgaW50IHRjX29mZnNldCAgICAgPSBwYXJhbXMtPnRjX29mZnNl dFtjX2lkeF07CisgICAgICAgIGNvbnN0IGludCBiZXRhX29mZnNldCAgID0gcGFyYW1zLT5iZXRh X29mZnNldFtjX2lkeF07CisKKyAgICAgICAgZm9yICh5ID0geTA7IHkgPCB5X2VuZDsgeSArPSBE RUJMT0NLX1NURVApIHsKKyAgICAgICAgICAgIGZvciAoeCA9IHgwID8geDAgOiBncmlkOyB4IDwg eF9lbmQ7IHggKz0gZ3JpZCkgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCBicyA9IFRBQl9C UyhmYy0+dGFiLnZlcnRpY2FsX2JzW2NfaWR4XSwgeCwgeSk7CisgICAgICAgICAgICAgICAgaWYg KGJzKSB7CisgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWF4X2xlbl9wLCBtYXhfbGVuX3E7 CisKKyAgICAgICAgICAgICAgICAgICAgc3JjID0gJmZjLT5mcmFtZS0+ZGF0YVtjX2lkeF1bKHkg Pj4gdnMpICogZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF0gKyAoKHggPj4gaHMpIDw8IGZjLT5w cy5zcHMtPnBpeGVsX3NoaWZ0KV07CisgICAgICAgICAgICAgICAgICAgIHFwID0gZ2V0X3FwKGZj LCBzcmMsIHgsIHksIGNfaWR4LCAxKTsKKworICAgICAgICAgICAgICAgICAgICBiZXRhID0gYmV0 YXRhYmxlW2F2X2NsaXAocXAgKyBiZXRhX29mZnNldCwgMCwgTUFYX1FQKV07CisKKyAgICAgICAg ICAgICAgICAgICAgdGMgPSBUQ19DQUxDKHFwLCBicyk7CisKKyAgICAgICAgICAgICAgICAgICAg bWF4X2ZpbHRlcl9sZW5ndGgoZmMsIHgsIHksIGNfaWR4LCAxLCAwLCBicywgJm1heF9sZW5fcCwg Jm1heF9sZW5fcSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjX2lkeCkgeworICAgICAg ICAgICAgICAgICAgICAgICAgZmMtPnZ2Y2RzcC5sZi5maWx0ZXJfbHVtYVsxXShzcmMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF0sIGJldGEs IHRjLCBub19wLCBub19xLCBtYXhfbGVuX3AsIG1heF9sZW5fcSwgMCk7CisgICAgICAgICAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmYy0+dnZjZHNwLmxmLmZp bHRlcl9jaHJvbWFbMV0oc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjLT5mcmFt ZS0+bGluZXNpemVbY19pZHhdLCBiZXRhLCB0Yywgbm9fcCwgbm9fcSwgdnMsIG1heF9sZW5fcCwg bWF4X2xlbl9xKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBmZl92dmNfZGVibG9ja19o b3Jpem9udGFsKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGludCB4MCwgaW50IHkwKQorewor ICAgIFZWQ0ZyYW1lQ29udGV4dCAqZmMgPSBsYy0+ZmM7CisgICAgY29uc3QgVlZDU1BTICpzcHMg ICA9IGZjLT5wcy5zcHM7CisgICAgY29uc3QgaW50IGNfZW5kICAgICA9IGZjLT5wcy5zcHMtPmNo cm9tYV9mb3JtYXRfaWRjID8gVlZDX01BWF9TQU1QTEVfQVJSQVlTIDogMTsKKyAgICB1aW50OF90 KiBzcmM7CisgICAgaW50IHgsIHksIGJldGEsIHRjLCBxcDsKKyAgICB1aW50OF90IG5vX3AgPSAw OworICAgIHVpbnQ4X3Qgbm9fcSA9IDA7CisKKyAgICBpbnQgY3RiX2xvZzJfc2l6ZV95ID0gZmMt PnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIGludCB4X2VuZCwgeF9lbmQyLCB5X2VuZDsK KyAgICBpbnQgY3RiX3NpemUgPSAxIDw8IGN0Yl9sb2cyX3NpemVfeTsKKyAgICBpbnQgY3RiID0g KHgwID4+IGN0Yl9sb2cyX3NpemVfeSkgKworICAgICAgICAoeTAgPj4gY3RiX2xvZzJfc2l6ZV95 KSAqIGZjLT5wcy5wcHMtPmN0Yl93aWR0aDsKKyAgICBpbnQgdGNfb2Zmc2V0LCBiZXRhX29mZnNl dDsKKworICAgIHZ2Y19kZWJsb2NrX2JzKGxjLCB4MCwgeTAsIDApOworCisgICAgeF9lbmQgPSB4 MCArIGN0Yl9zaXplOworICAgIGlmICh4X2VuZCA+IGZjLT5wcy5zcHMtPndpZHRoKQorICAgICAg ICB4X2VuZCA9IGZjLT5wcy5zcHMtPndpZHRoOworICAgIHlfZW5kID0geTAgKyBjdGJfc2l6ZTsK KyAgICBpZiAoeV9lbmQgPiBmYy0+cHMuc3BzLT5oZWlnaHQpCisgICAgICAgIHlfZW5kID0gZmMt PnBzLnNwcy0+aGVpZ2h0OworCisgICAgZm9yIChpbnQgY19pZHggPSAwOyBjX2lkeCA8IGNfZW5k OyBjX2lkeCsrKSB7CisgICAgICAgIGNvbnN0IGludCBocyAgICAgICAgICAgID0gc3BzLT5oc2hp ZnRbY19pZHhdOworICAgICAgICBjb25zdCBpbnQgdnMgICAgICAgICAgICA9IHNwcy0+dnNoaWZ0 W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IGdyaWQgICAgICAgICAgPSBjX2lkeCA/IChDSFJP TUFfR1JJRCA8PCB2cykgOiBMVU1BX0dSSUQ7CisKKyAgICAgICAgeF9lbmQyID0geF9lbmQgPT0g ZmMtPnBzLnNwcy0+d2lkdGggPyB4X2VuZCA6IHhfZW5kIC0gKE1BWF9GSUxURVJfTEVOIDw8IGhz KTsKKworICAgICAgICBmb3IgKHkgPSB5MDsgeSA8IHlfZW5kOyB5ICs9IGdyaWQpIHsKKyAgICAg ICAgICAgIGlmICgheSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAg Ly8gaG9yaXpvbnRhbCBmaWx0ZXJpbmcgbHVtYQorICAgICAgICAgICAgZm9yICh4ID0geDAgPyB4 MCAtIChNQVhfRklMVEVSX0xFTiA8PCBocykgOiAwOyB4IDwgeF9lbmQyOyB4ICs9IERFQkxPQ0tf U1RFUCkgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCBicyA9IFRBQl9CUyhmYy0+dGFiLmhv cml6b250YWxfYnNbY19pZHhdLCB4LCB5KTsKKyAgICAgICAgICAgICAgICBpZiAoYnMpIHsKKyAg ICAgICAgICAgICAgICAgICAgY29uc3QgREJQYXJhbXMgICpwYXJhbXMgPSBmYy0+dGFiLmRlYmxv Y2sgKyBjdGIgLSAoeCA8IHgwKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGhvcml6 b250YWxfY3R1X2VkZ2UgPSAhKHkgJSBmYy0+cHMuc3BzLT5jdGJfc2l6ZV95KTsKKyAgICAgICAg ICAgICAgICAgICAgdWludDhfdCBtYXhfbGVuX3AsIG1heF9sZW5fcTsKKworICAgICAgICAgICAg ICAgICAgICBzcmMgPSAmZmMtPmZyYW1lLT5kYXRhW2NfaWR4XVsoeSA+PiB2cykgKiBmYy0+ZnJh bWUtPmxpbmVzaXplW2NfaWR4XSArICgoeCA+PiBocykgPDwgZmMtPnBzLnNwcy0+cGl4ZWxfc2hp ZnQpXTsKKyAgICAgICAgICAgICAgICAgICAgcXAgPSBnZXRfcXAoZmMsIHNyYywgeCwgeSwgY19p ZHgsIDApOworCisgICAgICAgICAgICAgICAgICAgIHRjX29mZnNldCA9IHBhcmFtcy0+dGNfb2Zm c2V0W2NfaWR4XTsKKyAgICAgICAgICAgICAgICAgICAgYmV0YV9vZmZzZXQgPSBwYXJhbXMtPmJl dGFfb2Zmc2V0W2NfaWR4XTsKKworICAgICAgICAgICAgICAgICAgICBiZXRhID0gYmV0YXRhYmxl W2F2X2NsaXAocXAgKyBiZXRhX29mZnNldCwgMCwgTUFYX1FQKV07CisgICAgICAgICAgICAgICAg ICAgIHRjID0gVENfQ0FMQyhxcCwgYnMpOworCisgICAgICAgICAgICAgICAgICAgIG1heF9maWx0 ZXJfbGVuZ3RoKGZjLCB4LCB5LCBjX2lkeCwgMCwgaG9yaXpvbnRhbF9jdHVfZWRnZSwgYnMsICZt YXhfbGVuX3AsICZtYXhfbGVuX3EpOworCisgICAgICAgICAgICAgICAgICAgIGlmICghY19pZHgp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZjLT52dmNkc3AubGYuZmlsdGVyX2x1bWFbMF0o c3JjLCBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBiZXRhLCB0Yywgbm9fcCwgbm9fcSwgbWF4X2xlbl9wLCBtYXhfbGVuX3EsIGhvcml6b250 YWxfY3R1X2VkZ2UpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgICAgICAgICAgZmMtPnZ2Y2RzcC5sZi5maWx0ZXJfY2hyb21hWzBdKHNyYywgZmMtPmZyYW1l LT5saW5lc2l6ZVtjX2lkeF0sIGJldGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGMs IG5vX3AsIG5vX3EsIGhzLCBtYXhfbGVuX3AsIG1heF9sZW5fcSk7CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9 Cit9CisKK3N0YXRpYyB2b2lkIGFsZl9jb3B5X2JvcmRlcih1aW50OF90ICpkc3QsIGNvbnN0IHVp bnQ4X3QgKnNyYywKKyAgICBjb25zdCBpbnQgcGl4ZWxfc2hpZnQsIGludCB3aWR0aCwgY29uc3Qg aW50IGhlaWdodCwgY29uc3QgcHRyZGlmZl90IGRzdF9zdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCBz cmNfc3RyaWRlKQoreworICAgIHdpZHRoIDw8PSBwaXhlbF9zaGlmdDsKKyAgICBmb3IgKGludCBp ID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisgICAgICAgIG1lbWNweShkc3QsIHNyYywgd2lkdGgp OworICAgICAgICBkc3QgKz0gZHN0X3N0cmlkZTsKKyAgICAgICAgc3JjICs9IHNyY19zdHJpZGU7 CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBhbGZfZXh0ZW5kX3ZlcnQodWludDhfdCAqX2RzdCwg Y29uc3QgdWludDhfdCAqX3NyYywKKyAgICBjb25zdCBpbnQgcGl4ZWxfc2hpZnQsIGNvbnN0IGlu dCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwgcHRyZGlmZl90IHN0cmlkZSkKK3sKKyAgICBpZiAo cGl4ZWxfc2hpZnQgPT0gMCkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGhlaWdodDsg aSsrKSB7CisgICAgICAgICAgICBtZW1zZXQoX2RzdCwgKl9zcmMsIHdpZHRoKTsKKyAgICAgICAg ICAgIF9zcmMgKz0gc3RyaWRlOworICAgICAgICAgICAgX2RzdCArPSBzdHJpZGU7CisgICAgICAg IH0KKyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCB1aW50MTZfdCAqc3JjID0gKGNvbnN0IHVp bnQxNl90ICopX3NyYzsKKyAgICAgICAgdWludDE2X3QgKmRzdCA9ICh1aW50MTZfdCAqKV9kc3Q7 CisgICAgICAgIHN0cmlkZSA+Pj0gcGl4ZWxfc2hpZnQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCBoZWlnaHQ7IGkrKykgeworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB3 aWR0aDsgaisrKQorICAgICAgICAgICAgICAgIGRzdFtqXSA9ICpzcmM7CisgICAgICAgICAgICBz cmMgKz0gc3RyaWRlOworICAgICAgICAgICAgZHN0ICs9IHN0cmlkZTsKKyAgICAgICAgfQorICAg IH0KK30KKworc3RhdGljIHZvaWQgYWxmX2V4dGVuZF9ob3J6KHVpbnQ4X3QgKmRzdCwgY29uc3Qg dWludDhfdCAqc3JjLAorICAgIGNvbnN0IGludCBwaXhlbF9zaGlmdCwgaW50IHdpZHRoLCBjb25z dCBpbnQgaGVpZ2h0LCBjb25zdCBwdHJkaWZmX3Qgc3RyaWRlKQoreworICAgIHdpZHRoIDw8PSBw aXhlbF9zaGlmdDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisgICAg ICAgIG1lbWNweShkc3QsIHNyYywgd2lkdGgpOworICAgICAgICBkc3QgKz0gc3RyaWRlOworICAg IH0KK30KKworc3RhdGljIHZvaWQgYWxmX2NvcHlfY3RiX3RvX2h2KFZWQ0ZyYW1lQ29udGV4dCAq ZmMsIGNvbnN0IHVpbnQ4X3QgKnNyYywgY29uc3QgcHRyZGlmZl90IHNyY19zdHJpZGUsCisgICAg Y29uc3QgaW50IHgsIGNvbnN0IGludCB5LCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWln aHQsIGNvbnN0IGludCB4X2N0YiwgY29uc3QgaW50IHlfY3RiLCBjb25zdCBpbnQgY19pZHgpCit7 CisgICAgY29uc3QgaW50IHBzICAgICAgICAgICAgPSBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdDsK KyAgICBjb25zdCBpbnQgdyAgICAgICAgICAgICA9IGZjLT5wcy5zcHMtPndpZHRoID4+IGZjLT5w cy5zcHMtPmhzaGlmdFtjX2lkeF07CisgICAgY29uc3QgaW50IGggICAgICAgICAgICAgPSBmYy0+ cHMuc3BzLT5oZWlnaHQgPj4gZmMtPnBzLnNwcy0+dnNoaWZ0W2NfaWR4XTsKKyAgICBjb25zdCBp bnQgYm9yZGVyX3BpeGVscyA9IChjX2lkeCA9PSAwKSA/IEFMRl9CT1JERVJfTFVNQSA6IEFMRl9C T1JERVJfQ0hST01BOworICAgIGNvbnN0IGludCBvZmZzZXRfaFtdICAgID0geyAwLCBoZWlnaHQg LSBib3JkZXJfcGl4ZWxzIH07CisgICAgY29uc3QgaW50IG9mZnNldF92W10gICAgPSB7IDAsIHdp ZHRoICAtIGJvcmRlcl9waXhlbHMgfTsKKworICAgIC8qIGNvcHkgaG9yaXpvbnRhbCBlZGdlcyAq LworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMob2Zmc2V0X2gpOyBpKysp IHsKKyAgICAgICAgYWxmX2NvcHlfYm9yZGVyKGZjLT50YWIuYWxmX3BpeGVsX2J1ZmZlcl9oW2Nf aWR4XVtpXSArICgoYm9yZGVyX3BpeGVscyAqIHlfY3RiICogdyArIHgpPDwgcHMpLAorICAgICAg ICAgICAgc3JjICsgb2Zmc2V0X2hbaV0gKiBzcmNfc3RyaWRlLCBwcywgd2lkdGgsIGJvcmRlcl9w aXhlbHMsIHcgPDwgcHMsIHNyY19zdHJpZGUpOworICAgIH0KKyAgICAvKiBjb3B5IHZlcnRpY2Fs IGVkZ2VzICovCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhvZmZzZXRf dik7IGkrKykgeworICAgICAgICBhbGZfY29weV9ib3JkZXIoZmMtPnRhYi5hbGZfcGl4ZWxfYnVm ZmVyX3ZbY19pZHhdW2ldICsgKChoICogeF9jdGIgKyB5KSAqIChib3JkZXJfcGl4ZWxzIDw8IHBz KSksCisgICAgICAgICAgICBzcmMgKyAob2Zmc2V0X3ZbaV0gPDwgcHMpLCBwcywgYm9yZGVyX3Bp eGVscywgaGVpZ2h0LCBib3JkZXJfcGl4ZWxzIDw8IHBzLCBzcmNfc3RyaWRlKTsKKyAgICB9Cit9 CisKK3N0YXRpYyB2b2lkIGFsZl9maWxsX2JvcmRlcl9oKHVpbnQ4X3QgKmRzdCwgY29uc3QgcHRy ZGlmZl90IGRzdF9zdHJpZGUsIGNvbnN0IHVpbnQ4X3QgKnNyYywgY29uc3QgcHRyZGlmZl90IHNy Y19zdHJpZGUsCisgICAgY29uc3QgdWludDhfdCAqYm9yZGVyLCBjb25zdCBpbnQgd2lkdGgsIGNv bnN0IGludCBib3JkZXJfcGl4ZWxzLCBjb25zdCBpbnQgcHMsIGNvbnN0IGludCBlZGdlKQorewor ICAgIGlmIChlZGdlKQorICAgICAgICBhbGZfZXh0ZW5kX2hvcnooZHN0LCBib3JkZXIsIHBzLCB3 aWR0aCwgYm9yZGVyX3BpeGVscywgZHN0X3N0cmlkZSk7CisgICAgZWxzZQorICAgICAgICBhbGZf Y29weV9ib3JkZXIoZHN0LCBzcmMsIHBzLCB3aWR0aCwgYm9yZGVyX3BpeGVscywgZHN0X3N0cmlk ZSwgc3JjX3N0cmlkZSk7Cit9CisKK3N0YXRpYyB2b2lkIGFsZl9maWxsX2JvcmRlcl92KHVpbnQ4 X3QgKmRzdCwgY29uc3QgcHRyZGlmZl90IGRzdF9zdHJpZGUsIGNvbnN0IHVpbnQ4X3QgKnNyYywK KyAgICBjb25zdCB1aW50OF90ICpib3JkZXIsIGNvbnN0IGludCBib3JkZXJfcGl4ZWxzLCBjb25z dCBpbnQgaGVpZ2h0LCBjb25zdCBpbnQgcGl4ZWxfc2hpZnQsIGNvbnN0IGludCAqZWRnZXMsIGNv bnN0IGludCBlZGdlKQoreworICAgIGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlID0gKGJvcmRl cl9waXhlbHMgPDwgcGl4ZWxfc2hpZnQpOworCisgICAgaWYgKGVkZ2UpIHsKKyAgICAgICAgYWxm X2V4dGVuZF92ZXJ0KGRzdCwgYm9yZGVyLCBwaXhlbF9zaGlmdCwgYm9yZGVyX3BpeGVscywgaGVp Z2h0ICsgMiAqIGJvcmRlcl9waXhlbHMsIGRzdF9zdHJpZGUpOworICAgICAgICByZXR1cm47Cisg ICAgfQorCisgICAgLy9sZWZ0L3JpZ2h0CisgICAgYWxmX2NvcHlfYm9yZGVyKGRzdCArIGRzdF9z dHJpZGUgKiBib3JkZXJfcGl4ZWxzICogZWRnZXNbVE9QXSwgc3JjICsgc3JjX3N0cmlkZSAqIGJv cmRlcl9waXhlbHMgKiBlZGdlc1tUT1BdLAorICAgICAgICBwaXhlbF9zaGlmdCwgYm9yZGVyX3Bp eGVscywgaGVpZ2h0ICsgKCFlZGdlc1tUT1BdICsgIWVkZ2VzW0JPVFRPTV0pICogYm9yZGVyX3Bp eGVscywgZHN0X3N0cmlkZSwgc3JjX3N0cmlkZSk7CisKKyAgICAvL3RvcCBsZWZ0L3JpZ2h0Cisg ICAgaWYgKGVkZ2VzW1RPUF0pCisgICAgICAgIGFsZl9leHRlbmRfaG9yeihkc3QsIGRzdCArIGRz dF9zdHJpZGUgKiBib3JkZXJfcGl4ZWxzLCBwaXhlbF9zaGlmdCwgYm9yZGVyX3BpeGVscywgYm9y ZGVyX3BpeGVscywgZHN0X3N0cmlkZSk7CisKKyAgICAvL2JvdHRvbSBsZWZ0L3JpZ2h0CisgICAg aWYgKGVkZ2VzW0JPVFRPTV0pIHsKKyAgICAgICAgZHN0ICs9IGRzdF9zdHJpZGUgKiAoYm9yZGVy X3BpeGVscyArIGhlaWdodCk7CisgICAgICAgIGFsZl9leHRlbmRfaG9yeihkc3QsIGRzdCAtIGRz dF9zdHJpZGUsIHBpeGVsX3NoaWZ0LCBib3JkZXJfcGl4ZWxzLCBib3JkZXJfcGl4ZWxzLCBkc3Rf c3RyaWRlKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGFsZl9wcmVwYXJlX2J1ZmZlcihWVkNG cmFtZUNvbnRleHQgKmZjLCB1aW50OF90ICpfZHN0LCBjb25zdCB1aW50OF90ICpfc3JjLCBjb25z dCBpbnQgeCwgY29uc3QgaW50IHksCisgICAgY29uc3QgaW50IHhfY3RiLCBjb25zdCBpbnQgeV9j dGIsIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwgY29uc3QgcHRyZGlmZl90IGRz dF9zdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlLAorICAgIGNvbnN0IGludCBjX2lk eCwgY29uc3QgaW50ICplZGdlcykKK3sKKyAgICBjb25zdCBpbnQgcHMgPSBmYy0+cHMuc3BzLT5w aXhlbF9zaGlmdDsKKyAgICBjb25zdCBpbnQgdyA9IGZjLT5wcy5zcHMtPndpZHRoID4+IGZjLT5w cy5zcHMtPmhzaGlmdFtjX2lkeF07CisgICAgY29uc3QgaW50IGggPSBmYy0+cHMuc3BzLT5oZWln aHQgPj4gZmMtPnBzLnNwcy0+dnNoaWZ0W2NfaWR4XTsKKyAgICBjb25zdCBpbnQgYm9yZGVyX3Bp eGVscyA9IGNfaWR4ID09IDAgPyBBTEZfQk9SREVSX0xVTUEgOiBBTEZfQk9SREVSX0NIUk9NQTsK KyAgICB1aW50OF90ICpkc3QsICpzcmM7CisKKyAgICBjb3B5X2N0YihfZHN0LCBfc3JjLCB3aWR0 aCA8PCBwcywgaGVpZ2h0LCBkc3Rfc3RyaWRlLCBzcmNfc3RyaWRlKTsKKworICAgIC8vdG9wCisg ICAgc3JjID0gZmMtPnRhYi5hbGZfcGl4ZWxfYnVmZmVyX2hbY19pZHhdWzFdICsgKCgoYm9yZGVy X3BpeGVscyAqICh5X2N0YiAtIDEpKSAqIHcgKyB4KSA8PCBwcyk7CisgICAgZHN0ID0gX2RzdCAt IGJvcmRlcl9waXhlbHMgKiBkc3Rfc3RyaWRlOworICAgIGFsZl9maWxsX2JvcmRlcl9oKGRzdCwg ZHN0X3N0cmlkZSwgc3JjLCB3ICA8PCBwcywgX2RzdCwgd2lkdGgsIGJvcmRlcl9waXhlbHMsIHBz LCBlZGdlc1tUT1BdKTsKKworICAgIC8vYm90dG9tCisgICAgc3JjID0gZmMtPnRhYi5hbGZfcGl4 ZWxfYnVmZmVyX2hbY19pZHhdWzBdICsgKChib3JkZXJfcGl4ZWxzICogKHlfY3RiICsgMSkgKiB3 ICsgeCkgPDwgcHMpOworICAgIGRzdCA9IF9kc3QgKyBoZWlnaHQgKiBkc3Rfc3RyaWRlOworICAg IGFsZl9maWxsX2JvcmRlcl9oKGRzdCwgZHN0X3N0cmlkZSwgc3JjLCB3ICA8PCBwcywgX2RzdCAr IChoZWlnaHQgLSAxKSAqIGRzdF9zdHJpZGUsIHdpZHRoLCBib3JkZXJfcGl4ZWxzLCBwcywgZWRn ZXNbQk9UVE9NXSk7CisKKworICAgIC8vbGVmdAorICAgIHNyYyA9IGZjLT50YWIuYWxmX3BpeGVs X2J1ZmZlcl92W2NfaWR4XVsxXSArIChoICogKHhfY3RiIC0gMSkgKyB5IC0gYm9yZGVyX3BpeGVs cykgKiAoYm9yZGVyX3BpeGVscyA8PCBwcyk7CisgICAgZHN0ID0gX2RzdCAtIChib3JkZXJfcGl4 ZWxzIDw8IHBzKSAtIGJvcmRlcl9waXhlbHMgKiBkc3Rfc3RyaWRlOworICAgIGFsZl9maWxsX2Jv cmRlcl92KGRzdCwgZHN0X3N0cmlkZSwgc3JjLCAgZHN0ICsgKGJvcmRlcl9waXhlbHMgPDwgcHMp LCBib3JkZXJfcGl4ZWxzLCBoZWlnaHQsIHBzLCBlZGdlcywgZWRnZXNbTEVGVF0pOworCisgICAg Ly9yaWdodAorICAgIHNyYyA9IGZjLT50YWIuYWxmX3BpeGVsX2J1ZmZlcl92W2NfaWR4XVswXSAr IChoICogKHhfY3RiICsgMSkgKyB5IC0gYm9yZGVyX3BpeGVscykgKiAoYm9yZGVyX3BpeGVscyA8 PCBwcyk7CisgICAgZHN0ID0gX2RzdCArICh3aWR0aCA8PCBwcykgLSBib3JkZXJfcGl4ZWxzICog ZHN0X3N0cmlkZTsKKyAgICBhbGZfZmlsbF9ib3JkZXJfdihkc3QsIGRzdF9zdHJpZGUsIHNyYywg IGRzdCAtICgxIDw8IHBzKSwgYm9yZGVyX3BpeGVscywgaGVpZ2h0LCBwcywgZWRnZXMsIGVkZ2Vz W1JJR0hUXSk7Cit9CisKKyNkZWZpbmUgQUxGX01BWF9CTE9DS1NfSU5fQ1RVICAgKE1BWF9DVFVf U0laRSAqIE1BWF9DVFVfU0laRSAvIEFMRl9CTE9DS19TSVpFIC8gQUxGX0JMT0NLX1NJWkUpCisj ZGVmaW5lIEFMRl9NQVhfRklMVEVSX1NJWkUgICAgIChBTEZfTUFYX0JMT0NLU19JTl9DVFUgKiBB TEZfTlVNX0NPRUZGX0xVTUEpCisKK3N0YXRpYyB2b2lkIGFsZl9nZXRfY29lZmZfYW5kX2NsaXAo VlZDTG9jYWxDb250ZXh0ICpsYywgaW50MTZfdCAqY29lZmYsIGludDE2X3QgKmNsaXAsCisgICAg Y29uc3QgdWludDhfdCAqc3JjLCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwgaW50IHdpZHRoLCBpbnQg aGVpZ2h0LCBpbnQgdmJfcG9zLCBBTEZQYXJhbXMgKmFsZikKK3sKKyAgICBjb25zdCBWVkNGcmFt ZUNvbnRleHQgKmZjICAgPSBsYy0+ZmM7CisgICAgY29uc3QgVlZDU0ggKnNoICAgICAgICAgICAg ID0gJmxjLT5zYy0+c2g7CisgICAgdWludDhfdCBmaXhlZF9jbGlwX3NldFtBTEZfTlVNX0ZJTFRF UlNfTFVNQSAqIEFMRl9OVU1fQ09FRkZfTFVNQV0gPSB7IDAgfTsKKyAgICBjb25zdCBpbnQxNl90 ICpjb2VmZl9zZXQ7CisgICAgY29uc3QgdWludDhfdCAqY2xpcF9pZHhfc2V0OworICAgIGNvbnN0 IHVpbnQ4X3QgKmNsYXNzX3RvX2ZpbHQ7CisgICAgY29uc3QgaW50IHNpemUgPSB3aWR0aCAqIGhl aWdodCAvIEFMRl9CTE9DS19TSVpFIC8gQUxGX0JMT0NLX1NJWkU7CisgICAgaW50IGNsYXNzX2lk eFtBTEZfTUFYX0JMT0NLU19JTl9DVFVdOworICAgIGludCB0cmFuc3Bvc2VfaWR4W0FMRl9NQVhf QkxPQ0tTX0lOX0NUVV07CisKKyAgICBpZiAoYWxmLT5jdGJfZmlsdF9zZXRfaWR4X3kgPCAxNikg eworICAgICAgICBjb2VmZl9zZXQgPSAmZmZfdnZjX2FsZl9maXhfZmlsdF9jb2VmZlswXVswXTsK KyAgICAgICAgY2xpcF9pZHhfc2V0ID0gZml4ZWRfY2xpcF9zZXQ7CisgICAgICAgIGNsYXNzX3Rv X2ZpbHQgPSBmZl92dmNfYWxmX2NsYXNzX3RvX2ZpbHRfbWFwW2FsZi0+Y3RiX2ZpbHRfc2V0X2lk eF95XTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCBpbnQgaWQgPSBzaC0+YWxmLmFwc19p ZF9sdW1hW2FsZi0+Y3RiX2ZpbHRfc2V0X2lkeF95IC0gMTZdOworICAgICAgICBjb25zdCBWVkNB TEYgKmFwcyA9IChWVkNBTEYgKilmYy0+cHMuYWxmX2xpc3RbaWRdLT5kYXRhOworICAgICAgICBj b2VmZl9zZXQgICAgPSBhcHMtPmx1bWFfY29lZmY7CisgICAgICAgIGNsaXBfaWR4X3NldCA9IGFw cy0+bHVtYV9jbGlwX2lkeDsKKyAgICAgICAgY2xhc3NfdG9fZmlsdCA9IGZmX3Z2Y19hbGZfYXBz X2NsYXNzX3RvX2ZpbHRfbWFwOworICAgIH0KKyAgICBmYy0+dnZjZHNwLmFsZi5jbGFzc2lmeShj bGFzc19pZHgsIHRyYW5zcG9zZV9pZHgsIHNyYywgc3JjX3N0cmlkZSwgd2lkdGgsIGhlaWdodCwK KyAgICAgICAgdmJfcG9zLCBsYy0+YWxmX2dyYWRpZW50X3RtcCk7CisgICAgZmMtPnZ2Y2RzcC5h bGYucmVjb25fY29lZmZfYW5kX2NsaXAoY29lZmYsIGNsaXAsIGNsYXNzX2lkeCwgdHJhbnNwb3Nl X2lkeCwgc2l6ZSwKKyAgICAgICAgY29lZmZfc2V0LCBjbGlwX2lkeF9zZXQsIGNsYXNzX3RvX2Zp bHQpOworfQorCitzdGF0aWMgdm9pZCBhbGZfZmlsdGVyX2x1bWEoVlZDTG9jYWxDb250ZXh0ICps YywgdWludDhfdCAqZHN0LCBjb25zdCB1aW50OF90ICpzcmMsCisgICAgY29uc3QgcHRyZGlmZl90 IGRzdF9zdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlLCBjb25zdCBpbnQgeDAsIGNv bnN0IGludCB5MCwKKyAgICBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIGNvbnN0 IGludCBfdmJfcG9zLCBBTEZQYXJhbXMgKmFsZikKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRl eHQgKmZjICAgPSBsYy0+ZmM7CisgICAgaW50IHZiX3BvcyAgICAgICAgICAgICAgICAgID0gX3Zi X3BvcyAtIHkwOworICAgIGludDE2X3QgKmNvZWZmICAgICAgICAgICAgICAgPSAoaW50MTZfdCop bGMtPnRtcDsKKyAgICBpbnQxNl90ICpjbGlwICAgICAgICAgICAgICAgPSAoaW50MTZfdCAqKWxj LT50bXAxOworCisgICAgYXZfYXNzZXJ0MChBTEZfTUFYX0ZJTFRFUl9TSVpFIDw9IHNpemVvZihs Yy0+dG1wKSk7CisgICAgYXZfYXNzZXJ0MChBTEZfTUFYX0ZJTFRFUl9TSVpFICogc2l6ZW9mKGlu dDE2X3QpIDw9IHNpemVvZihsYy0+dG1wMSkpOworCisgICAgYWxmX2dldF9jb2VmZl9hbmRfY2xp cChsYywgY29lZmYsIGNsaXAsIHNyYywgc3JjX3N0cmlkZSwgd2lkdGgsIGhlaWdodCwgdmJfcG9z LCBhbGYpOworICAgIGZjLT52dmNkc3AuYWxmLmZpbHRlcltMVU1BXShkc3QsIGRzdF9zdHJpZGUs IHNyYywgc3JjX3N0cmlkZSwgd2lkdGgsIGhlaWdodCwgY29lZmYsIGNsaXAsIHZiX3Bvcyk7Cit9 CisKK3N0YXRpYyBpbnQgYWxmX2NsaXBfZnJvbV9pZHgoY29uc3QgVlZDRnJhbWVDb250ZXh0ICpm YywgY29uc3QgaW50IGlkeCkKK3sKKyAgICBjb25zdCBWVkNTUFMgKnNwcyAgID0gZmMtPnBzLnNw czsKKyAgICBjb25zdCBpbnQgb2Zmc2V0W10gPSB7MCwgMywgNSwgN307CisKKyAgICByZXR1cm4g MSA8PCAoc3BzLT5iaXRfZGVwdGggLSBvZmZzZXRbaWR4XSk7Cit9CisKK3N0YXRpYyB2b2lkIGFs Zl9maWx0ZXJfY2hyb21hKFZWQ0xvY2FsQ29udGV4dCAqbGMsIHVpbnQ4X3QgKmRzdCwgY29uc3Qg dWludDhfdCAqc3JjLAorICAgIGNvbnN0IHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCBwdHJk aWZmX3Qgc3JjX3N0cmlkZSwgY29uc3QgaW50IGNfaWR4LAorICAgIGNvbnN0IGludCB3aWR0aCwg Y29uc3QgaW50IGhlaWdodCwgY29uc3QgaW50IHZiX3BvcywgQUxGUGFyYW1zICphbGYpCit7Cisg ICAgVlZDRnJhbWVDb250ZXh0ICpmYyAgICAgPSBsYy0+ZmM7CisgICAgY29uc3QgVlZDU0ggKnNo ICAgICAgICAgPSAmbGMtPnNjLT5zaDsKKyAgICBjb25zdCBWVkNBTEYgKmFwcyAgICAgICA9IChW VkNBTEYgKilmYy0+cHMuYWxmX2xpc3Rbc2gtPmFsZi5hcHNfaWRfY2hyb21hXS0+ZGF0YTsKKyAg ICBjb25zdCBpbnQgb2ZmICAgICAgICAgICA9IGFsZi0+YWxmX2N0Yl9maWx0ZXJfYWx0X2lkeFtj X2lkeCAtIDFdICogQUxGX05VTV9DT0VGRl9DSFJPTUE7CisgICAgY29uc3QgaW50MTZfdCAqY29l ZmYgICAgID0gYXBzLT5jaHJvbWFfY29lZmYgKyBvZmY7CisgICAgaW50MTZfdCBjbGlwW0FMRl9O VU1fQ09FRkZfQ0hST01BXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgQUxGX05VTV9DT0VG Rl9DSFJPTUE7IGkrKykKKyAgICAgICAgY2xpcFtpXSA9IGFsZl9jbGlwX2Zyb21faWR4KGZjLCBh cHMtPmNocm9tYV9jbGlwX2lkeFtvZmYgKyBpXSk7CisKKyAgICBmYy0+dnZjZHNwLmFsZi5maWx0 ZXJbQ0hST01BXShkc3QsIGRzdF9zdHJpZGUsIHNyYywgc3JjX3N0cmlkZSwgd2lkdGgsIGhlaWdo dCwgY29lZmYsIGNsaXAsIHZiX3Bvcyk7Cit9CisKK3N0YXRpYyB2b2lkIGFsZl9maWx0ZXJfY2Mo VlZDTG9jYWxDb250ZXh0ICpsYywgdWludDhfdCAqZHN0LCBjb25zdCB1aW50OF90ICpsdW1hLAor ICAgIGNvbnN0IHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCBwdHJkaWZmX3QgbHVtYV9zdHJp ZGUsIGNvbnN0IGludCBjX2lkeCwKKyAgICBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWln aHQsIGNvbnN0IGludCBocywgY29uc3QgaW50IHZzLCBjb25zdCBpbnQgdmJfcG9zLCBBTEZQYXJh bXMgKmFsZikKK3sKKyAgICBWVkNGcmFtZUNvbnRleHQgKmZjICAgICA9IGxjLT5mYzsKKyAgICBj b25zdCBWVkNTSCAqc2ggICAgICAgICA9ICZsYy0+c2MtPnNoOworICAgIGNvbnN0IGludCBpZHgg ICAgICAgICAgID0gY19pZHggLSAxOworICAgIEFWQnVmZmVyUmVmICphcHNfYnVmICAgID0gZmMt PnBzLmFsZl9saXN0W3NoLT5hbGYuY2NfYXBzX2lkW2lkeF1dOworCisgICAgaWYgKGFwc19idWYp IHsKKyAgICAgICAgY29uc3QgVlZDQUxGICphcHMgICA9IChWVkNBTEYgKilhcHNfYnVmLT5kYXRh OworICAgICAgICBjb25zdCBpbnQgb2ZmICAgICAgID0gKGFsZi0+Y3RiX2NjX2lkY1tpZHhdIC0g MSkqIEFMRl9OVU1fQ09FRkZfQ0M7CisgICAgICAgIGNvbnN0IGludDE2X3QgKmNvZWZmID0gYXBz LT5jY19jb2VmZltpZHhdICsgb2ZmOworCisgICAgICAgIGZjLT52dmNkc3AuYWxmLmZpbHRlcl9j Yyhkc3QsIGRzdF9zdHJpZGUsIGx1bWEsIGx1bWFfc3RyaWRlLCB3aWR0aCwgaGVpZ2h0LCBocywg dnMsIGNvZWZmLCB2Yl9wb3MpOworICAgIH0KK30KKwordm9pZCBmZl92dmNfYWxmX2NvcHlfY3R1 X3RvX2h2KFZWQ0xvY2FsQ29udGV4dCogbGMsIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwKQor eworICAgIFZWQ0ZyYW1lQ29udGV4dCAqZmMgICAgID0gbGMtPmZjOworICAgIGNvbnN0IGludCB4 X2N0YiAgICAgICAgID0geDAgPj4gZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIGNv bnN0IGludCB5X2N0YiAgICAgICAgID0geTAgPj4gZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95 OworICAgIGNvbnN0IGludCBjdGJfc2l6ZV95ICAgID0gZmMtPnBzLnNwcy0+Y3RiX3NpemVfeTsK KyAgICBjb25zdCBpbnQgcHMgICAgICAgICAgICA9IGZjLT5wcy5zcHMtPnBpeGVsX3NoaWZ0Owor ICAgIGNvbnN0IGludCBjX2VuZCAgICAgICAgID0gZmMtPnBzLnNwcy0+Y2hyb21hX2Zvcm1hdF9p ZGMgPyBWVkNfTUFYX1NBTVBMRV9BUlJBWVMgOiAxOworCisgICAgZm9yIChpbnQgY19pZHggPSAw OyBjX2lkeCA8IGNfZW5kOyBjX2lkeCsrKSB7CisgICAgICAgIGNvbnN0IGludCBocyAgICAgICAg PSBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhdOworICAgICAgICBjb25zdCBpbnQgdnMgICAgICAg ID0gZmMtPnBzLnNwcy0+dnNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IHggICAgICAg ICA9IHgwID4+IGhzOworICAgICAgICBjb25zdCBpbnQgeSAgICAgICAgID0geTAgPj4gdnM7Cisg ICAgICAgIGNvbnN0IGludCB3aWR0aCAgICAgPSBGRk1JTihmYy0+cHMuc3BzLT53aWR0aCAtIHgw LCBjdGJfc2l6ZV95KSA+PiBoczsKKyAgICAgICAgY29uc3QgaW50IGhlaWdodCAgICA9IEZGTUlO KGZjLT5wcy5zcHMtPmhlaWdodCAtIHkwLCBjdGJfc2l6ZV95KSA+PiB2czsKKworICAgICAgICBj b25zdCBpbnQgc3JjX3N0cmlkZSA9IGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhdOworICAgICAg ICB1aW50OF90KiBzcmMgPSAmZmMtPmZyYW1lLT5kYXRhW2NfaWR4XVt5ICogc3JjX3N0cmlkZSAr ICh4IDw8IHBzKV07CisKKyAgICAgICAgYWxmX2NvcHlfY3RiX3RvX2h2KGZjLCBzcmMsIHNyY19z dHJpZGUsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHhfY3RiLCB5X2N0YiwgY19pZHgpOworICAgIH0K K30KKwordm9pZCBmZl92dmNfYWxmX2ZpbHRlcihWVkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBp bnQgeDAsIGNvbnN0IGludCB5MCkKK3sKKyAgICBWVkNGcmFtZUNvbnRleHQgKmZjICAgICA9IGxj LT5mYzsKKyAgICBjb25zdCBWVkNQUFMgKnBwcyAgICAgICA9IGZjLT5wcy5wcHM7CisgICAgY29u c3QgaW50IHhfY3RiICAgICAgICAgPSB4MCA+PiBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3k7 CisgICAgY29uc3QgaW50IHlfY3RiICAgICAgICAgPSB5MCA+PiBmYy0+cHMuc3BzLT5jdGJfbG9n Ml9zaXplX3k7CisgICAgY29uc3QgaW50IGN0Yl9zaXplX3kgICAgPSBmYy0+cHMuc3BzLT5jdGJf c2l6ZV95OworICAgIGNvbnN0IGludCBwcyAgICAgICAgICAgID0gZmMtPnBzLnNwcy0+cGl4ZWxf c2hpZnQ7CisgICAgY29uc3QgaW50IHBhZGRlZF9zdHJpZGUgPSBFREdFX0VNVV9CVUZGRVJfU1RS SURFIDw8IHBzOworICAgIGNvbnN0IGludCBwYWRkZWRfb2Zmc2V0ID0gcGFkZGVkX3N0cmlkZSAq IEFMRl9QQURESU5HX1NJWkUgKyAoQUxGX1BBRERJTkdfU0laRSA8PCBwcyk7CisgICAgY29uc3Qg aW50IGNfZW5kICAgICAgICAgPSBmYy0+cHMuc3BzLT5jaHJvbWFfZm9ybWF0X2lkYyA/IFZWQ19N QVhfU0FNUExFX0FSUkFZUyA6IDE7CisgICAgQUxGUGFyYW1zICphbGYgICAgICAgICAgPSAmQ1RC KGZjLT50YWIuYWxmLCB4X2N0YiwgeV9jdGIpOworICAgIGludCBlZGdlc1tNQVhfRURHRVNdICAg ID0geyB4X2N0YiA9PSAwLCB5X2N0YiA9PSAwLCB4X2N0YiA9PSBwcHMtPmN0Yl93aWR0aCAtIDEs IHlfY3RiID09IHBwcy0+Y3RiX2hlaWdodCAtIDEgfTsKKworICAgIGlmICghcHBzLT5sb29wX2Zp bHRlcl9hY3Jvc3NfdGlsZXNfZW5hYmxlZF9mbGFnKSB7CisgICAgICAgIGVkZ2VzW0xFRlRdID0g ZWRnZXNbTEVGVF0gfHwgKGxjLT5ib3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX0xFRlRfVElMRSk7 CisgICAgICAgIGVkZ2VzW1RPUF0gID0gZWRnZXNbVE9QXSB8fCAobGMtPmJvdW5kYXJ5X2ZsYWdz ICYgQk9VTkRBUllfVVBQRVJfVElMRSk7CisgICAgICAgIGVkZ2VzW1JJR0hUXSA9IGVkZ2VzW1JJ R0hUXSB8fCBwcHMtPmN0Yl90b19jb2xfYmRbeF9jdGJdICE9IHBwcy0+Y3RiX3RvX2NvbF9iZFt4 X2N0YiArIDFdOworICAgICAgICBlZGdlc1tCT1RUT01dID0gZWRnZXNbQk9UVE9NXSB8fCBwcHMt PmN0Yl90b19yb3dfYmRbeV9jdGJdICE9IHBwcy0+Y3RiX3RvX3Jvd19iZFt5X2N0YiArIDFdOwor ICAgIH0KKworICAgIGlmICghcHBzLT5sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRf ZmxhZykgeworICAgICAgICBlZGdlc1tMRUZUXSA9IGVkZ2VzW0xFRlRdIHx8IChsYy0+Ym91bmRh cnlfZmxhZ3MgJiBCT1VOREFSWV9MRUZUX1NMSUNFKTsKKyAgICAgICAgZWRnZXNbVE9QXSA9IGVk Z2VzW1RPUF0gfHwgKGxjLT5ib3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX1VQUEVSX1NMSUNFKTsK KyAgICAgICAgZWRnZXNbUklHSFRdID0gZWRnZXNbUklHSFRdIHx8IENUQihmYy0+dGFiLnNsaWNl X2lkeCwgeF9jdGIsIHlfY3RiKSAhPSBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiICsgMSwg eV9jdGIpOworICAgICAgICBlZGdlc1tCT1RUT01dID0gZWRnZXNbQk9UVE9NXSB8fCBDVEIoZmMt PnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YikgIT0gQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4 X2N0YiwgeV9jdGIgKyAxKTsKKyAgICB9CisKKyAgICBmb3IgKGludCBjX2lkeCA9IDA7IGNfaWR4 IDwgY19lbmQ7IGNfaWR4KyspIHsKKyAgICAgICAgY29uc3QgaW50IGhzID0gZmMtPnBzLnNwcy0+ aHNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IHZzID0gZmMtPnBzLnNwcy0+dnNoaWZ0 W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IGN0Yl9zaXplX2ggPSBjdGJfc2l6ZV95ID4+IGhz OworICAgICAgICBjb25zdCBpbnQgY3RiX3NpemVfdiA9IGN0Yl9zaXplX3kgPj4gdnM7CisgICAg ICAgIGNvbnN0IGludCB4ID0geDAgPj4gaHM7CisgICAgICAgIGNvbnN0IGludCB5ID0geTAgPj4g dnM7CisgICAgICAgIGNvbnN0IGludCBwaWNfd2lkdGggPSBmYy0+cHMuc3BzLT53aWR0aCA+PiBo czsKKyAgICAgICAgY29uc3QgaW50IHBpY19oZWlnaHQgPSBmYy0+cHMuc3BzLT5oZWlnaHQgPj4g dnM7CisgICAgICAgIGNvbnN0IGludCB3aWR0aCAgPSBGRk1JTihwaWNfd2lkdGggIC0geCwgY3Ri X3NpemVfaCk7CisgICAgICAgIGNvbnN0IGludCBoZWlnaHQgPSBGRk1JTihwaWNfaGVpZ2h0IC0g eSwgY3RiX3NpemVfdik7CisgICAgICAgIGNvbnN0IGludCBzcmNfc3RyaWRlID0gZmMtPmZyYW1l LT5saW5lc2l6ZVtjX2lkeF07CisgICAgICAgIHVpbnQ4X3QgKnNyYyA9ICZmYy0+ZnJhbWUtPmRh dGFbY19pZHhdW3kgKiBzcmNfc3RyaWRlICsgKHggPDwgcHMpXTsKKyAgICAgICAgdWludDhfdCAq cGFkZGVkOworCisgICAgICAgIGlmIChhbGYtPmN0Yl9mbGFnW2NfaWR4XSB8fCAoIWNfaWR4ICYm IChhbGYtPmN0Yl9jY19pZGNbMF0gfHwgYWxmLT5jdGJfY2NfaWRjWzFdKSkpIHsKKyAgICAgICAg ICAgIHBhZGRlZCA9IChjX2lkeCA/IGxjLT5hbGZfYnVmZmVyX2Nocm9tYSA6IGxjLT5hbGZfYnVm ZmVyX2x1bWEpICsgcGFkZGVkX29mZnNldDsKKyAgICAgICAgICAgIGFsZl9wcmVwYXJlX2J1ZmZl cihmYywgcGFkZGVkLCBzcmMsIHgsIHksIHhfY3RiLCB5X2N0Yiwgd2lkdGgsIGhlaWdodCwKKyAg ICAgICAgICAgICAgICBwYWRkZWRfc3RyaWRlLCBzcmNfc3RyaWRlLCBjX2lkeCwgZWRnZXMpOwor ICAgICAgICB9CisgICAgICAgIGlmIChhbGYtPmN0Yl9mbGFnW2NfaWR4XSkgeworICAgICAgICAg ICAgaWYgKCFjX2lkeCkgIHsKKyAgICAgICAgICAgICAgICBhbGZfZmlsdGVyX2x1bWEobGMsIHNy YywgcGFkZGVkLCBzcmNfc3RyaWRlLCBwYWRkZWRfc3RyaWRlLCB4LCB5LAorICAgICAgICAgICAg ICAgICAgICB3aWR0aCwgaGVpZ2h0LCB5ICsgY3RiX3NpemVfdiAtIEFMRl9WQl9QT1NfQUJPVkVf TFVNQSwgYWxmKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYWxmX2Zp bHRlcl9jaHJvbWEobGMsIHNyYywgcGFkZGVkLCBzcmNfc3RyaWRlLCBwYWRkZWRfc3RyaWRlLCBj X2lkeCwKKyAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgY3RiX3NpemVfdiAtIEFM Rl9WQl9QT1NfQUJPVkVfQ0hST01BLCBhbGYpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgICAgIGlmIChjX2lkeCAmJiBhbGYtPmN0Yl9jY19pZGNbY19pZHggLSAxXSkgeworICAgICAg ICAgICAgcGFkZGVkID0gbGMtPmFsZl9idWZmZXJfbHVtYSArIHBhZGRlZF9vZmZzZXQ7CisgICAg ICAgICAgICBhbGZfZmlsdGVyX2NjKGxjLCBzcmMsIHBhZGRlZCwgc3JjX3N0cmlkZSwgcGFkZGVk X3N0cmlkZSwgY19pZHgsCisgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgaHMsIHZzLCAo Y3RiX3NpemVfdiA8PCB2cykgLSBBTEZfVkJfUE9TX0FCT1ZFX0xVTUEsIGFsZik7CisgICAgICAg IH0KKworICAgICAgICBhbGYtPmFwcGxpZWRbY19pZHhdID0gMTsKKyAgICB9Cit9CisKKwordm9p ZCBmZl92dmNfbG1jc19maWx0ZXIoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgaW50 IHgsIGNvbnN0IGludCB5KQoreworICAgIGNvbnN0IFNsaWNlQ29udGV4dCAqc2MgPSBsYy0+c2M7 CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYyA9IGxjLT5mYzsKKyAgICBjb25zdCBpbnQg Y3RiX3NpemUgID0gZmMtPnBzLnNwcy0+Y3RiX3NpemVfeTsKKyAgICBjb25zdCBpbnQgd2lkdGgg ICAgID0gRkZNSU4oZmMtPnBzLnBwcy0+d2lkdGggIC0geCwgY3RiX3NpemUpOworICAgIGNvbnN0 IGludCBoZWlnaHQgICAgPSBGRk1JTihmYy0+cHMucHBzLT5oZWlnaHQgLSB5LCBjdGJfc2l6ZSk7 CisgICAgdWludDhfdCAqZGF0YSAgICAgICA9IGZjLT5mcmFtZS0+ZGF0YVtMVU1BXSArIHkgKiBm Yy0+ZnJhbWUtPmxpbmVzaXplW0xVTUFdICsgKHggPDwgZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQp OworICAgIGlmIChzYy0+c2gubG1jc191c2VkX2ZsYWcpCisgICAgICAgIGZjLT52dmNkc3AubG1j cy5maWx0ZXIoZGF0YSwgZmMtPmZyYW1lLT5saW5lc2l6ZVtMVU1BXSwgd2lkdGgsIGhlaWdodCwg ZmMtPnBzLnBoLT5sbWNzX2ludl9sdXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMv dnZjX2ZpbHRlci5oIGIvbGliYXZjb2RlYy92dmMvdnZjX2ZpbHRlci5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjJmYmZhYTIzYjEKLS0tIC9kZXYvbnVsbAorKysgYi9s aWJhdmNvZGVjL3Z2Yy92dmNfZmlsdGVyLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIFZWQyBm aWx0ZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDIyIE51byBNaQorICoKKyAqCisgKiBUaGlz IGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u IDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl IGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg KiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0 b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKyNpZm5kZWYgQVZDT0RFQ19WVkNfRklMVEVSX0gK KyNkZWZpbmUgQVZDT0RFQ19WVkNfRklMVEVSX0gKKworI2luY2x1ZGUgInZ2Y2RlYy5oIgorCisv KioKKyAqIGxtY3MgZmlsdGVyIGZvciB0aGUgQ1RVCisgKiBAcGFyYW0gbGMgbG9jYWwgY29udGV4 dCBmb3IgQ1RVCisgKiBAcGFyYW0geDAgeCBwb3NpdGlvbiBmb3IgdGhlIENUVQorICogQHBhcmFt IHkwIHkgcG9zaXRpb24gZm9yIHRoZSBDVFUKKyAqLwordm9pZCBmZl92dmNfbG1jc19maWx0ZXIo Y29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTApOwor CisvKioKKyAqIHZlcnRpY2FsIGRlYmxvY2sgZmlsdGVyIGZvciB0aGUgQ1RVCisgKiBAcGFyYW0g bGMgbG9jYWwgY29udGV4dCBmb3IgQ1RVCisgKiBAcGFyYW0geDAgeCBwb3NpdGlvbiBmb3IgdGhl IENUVQorICogQHBhcmFtIHkwIHkgcG9zaXRpb24gZm9yIHRoZSBDVFUKKyAqLwordm9pZCBmZl92 dmNfZGVibG9ja192ZXJ0aWNhbChjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBpbnQgeDAsIGlu dCB5MCk7CisKKy8qKgorICogaG9yaXpvbnRhbCBkZWJsb2NrIGZpbHRlciBmb3IgdGhlIENUVQor ICogQHBhcmFtIGxjIGxvY2FsIGNvbnRleHQgZm9yIENUVQorICogQHBhcmFtIHgwIHggcG9zaXRp b24gZm9yIHRoZSBDVFUKKyAqIEBwYXJhbSB5MCB5IHBvc2l0aW9uIGZvciB0aGUgQ1RVCisgKi8K K3ZvaWQgZmZfdnZjX2RlYmxvY2tfaG9yaXpvbnRhbChjb25zdCBWVkNMb2NhbENvbnRleHQgKmxj LCBpbnQgeDAsIGludCB5MCk7CisKKy8qKgorICogc2FvIGZpbHRlciBmb3IgdGhlIENUVQorICog QHBhcmFtIGxjIGxvY2FsIGNvbnRleHQgZm9yIENUVQorICogQHBhcmFtIHgwIHggcG9zaXRpb24g Zm9yIHRoZSBDVFUKKyAqIEBwYXJhbSB5MCB5IHBvc2l0aW9uIGZvciB0aGUgQ1RVCisgKi8KK3Zv aWQgZmZfdnZjX3Nhb19maWx0ZXIoVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgaW50IHgwLCBj b25zdCBpbnQgeTApOworCit2b2lkIGZmX3Z2Y19hbGZfY29weV9jdHVfdG9faHYoVlZDTG9jYWxD b250ZXh0KiBsYywgaW50IHgwLCBpbnQgeTApOworCisvKioKKyAqIGFsZiBmaWx0ZXIgZm9yIHRo ZSBDVFUKKyAqIEBwYXJhbSBsYyBsb2NhbCBjb250ZXh0IGZvciBDVFUKKyAqIEBwYXJhbSB4MCB4 IHBvc2l0aW9uIGZvciB0aGUgQ1RVCisgKiBAcGFyYW0geTAgeSBwb3NpdGlvbiBmb3IgdGhlIENU VQorICovCit2b2lkIGZmX3Z2Y19hbGZfZmlsdGVyKFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0 IGludCB4MCwgY29uc3QgaW50IHkwKTsKKworI2VuZGlmIC8vIEFWQ09ERUNfVlZDX0NUVV9ICmRp ZmYgLS1naXQgYS9saWJhdmNvZGVjL3Z2Yy92dmNfZmlsdGVyX3RlbXBsYXRlLmMgYi9saWJhdmNv ZGVjL3Z2Yy92dmNfZmlsdGVyX3RlbXBsYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uMmNlM2U5M2ZmMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMvdnZj L3Z2Y19maWx0ZXJfdGVtcGxhdGUuYwpAQCAtMCwwICsxLDEwODggQEAKKy8qCisgKiBWVkMgZmls dGVycyBEU1AKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgTnVvIE1pCisgKgorICogVGhpcyBm aWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy LjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh bG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u LCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKK3N0YXRpYyB2b2lkIEZVTkMobG1jc19maWx0ZXJf bHVtYSkodWludDhfdCAqX2RzdCwgcHRyZGlmZl90IGRzdF9zdHJpZGUsIGNvbnN0IGludCB3aWR0 aCwgY29uc3QgaW50IGhlaWdodCwgY29uc3QgdWludDhfdCAqX2x1dCkKK3sKKyAgICBjb25zdCBw aXhlbCAqbHV0ID0gKGNvbnN0IHBpeGVsICopX2x1dDsKKyAgICBwaXhlbCAqZHN0ID0gKHBpeGVs KilfZHN0OworICAgIGRzdF9zdHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsKKworICAgIGZvciAoaW50 IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3 aWR0aDsgeCsrKQorICAgICAgICAgICAgZHN0W3hdID0gbHV0W2RzdFt4XV07CisgICAgICAgIGRz dCArPSBkc3Rfc3RyaWRlOworICAgIH0KK30KKworc3RhdGljIHZvaWQgRlVOQyhzYW9fYmFuZF9m aWx0ZXIpKHVpbnQ4X3QgKl9kc3QsIGNvbnN0IHVpbnQ4X3QgKl9zcmMsIHB0cmRpZmZfdCBkc3Rf c3RyaWRlLCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwKKyAgICBjb25zdCBpbnQxNl90ICpzYW9fb2Zm c2V0X3ZhbCwgY29uc3QgaW50IHNhb19sZWZ0X2NsYXNzLCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0 IGludCBoZWlnaHQpCit7CisgICAgcGl4ZWwgKmRzdCAgICAgICA9IChwaXhlbCAqKV9kc3Q7Cisg ICAgY29uc3QgcGl4ZWwgKnNyYyA9IChwaXhlbCAqKV9zcmM7CisgICAgaW50IG9mZnNldF90YWJs ZVszMl0gPSB7IDAgfTsKKyAgICBpbnQgaywgeSwgeDsKKyAgICBpbnQgc2hpZnQgID0gQklUX0RF UFRIIC0gNTsKKworICAgIGRzdF9zdHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsKKyAgICBzcmNfc3Ry aWRlIC89IHNpemVvZihwaXhlbCk7CisKKyAgICBmb3IgKGsgPSAwOyBrIDwgNDsgaysrKQorICAg ICAgICBvZmZzZXRfdGFibGVbKGsgKyBzYW9fbGVmdF9jbGFzcykgJiAzMV0gPSBzYW9fb2Zmc2V0 X3ZhbFtrICsgMV07CisgICAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7CisgICAgICAg IGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICAgICAgZHN0W3hdID0gYXZfY2xp cF9waXhlbChzcmNbeF0gKyBvZmZzZXRfdGFibGVbc3JjW3hdID4+IHNoaWZ0XSk7CisgICAgICAg IGRzdCArPSBkc3Rfc3RyaWRlOworICAgICAgICBzcmMgKz0gc3JjX3N0cmlkZTsKKyAgICB9Cit9 CisKKyNkZWZpbmUgQ01QKGEsIGIpICgoKGEpID4gKGIpKSAtICgoYSkgPCAoYikpKQorCitzdGF0 aWMgdm9pZCBGVU5DKHNhb19lZGdlX2ZpbHRlcikodWludDhfdCAqX2RzdCwgY29uc3QgdWludDhf dCAqX3NyYywgcHRyZGlmZl90IGRzdF9zdHJpZGUsCisgICAgY29uc3QgaW50MTZfdCAqc2FvX29m ZnNldF92YWwsIGNvbnN0IGludCBlbywgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0 KQoreworICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGVkZ2VfaWR4W10gPSB7IDEsIDIsIDAsIDMs IDQgfTsKKyAgICBzdGF0aWMgY29uc3QgaW50OF90IHBvc1s0XVsyXVsyXSA9IHsKKyAgICAgICAg eyB7IC0xLCAgMCB9LCB7ICAxLCAwIH0gfSwgLy8gaG9yaXpvbnRhbAorICAgICAgICB7IHsgIDAs IC0xIH0sIHsgIDAsIDEgfSB9LCAvLyB2ZXJ0aWNhbAorICAgICAgICB7IHsgLTEsIC0xIH0sIHsg IDEsIDEgfSB9LCAvLyA0NSBkZWdyZWUKKyAgICAgICAgeyB7ICAxLCAtMSB9LCB7IC0xLCAxIH0g fSwgLy8gMTM1IGRlZ3JlZQorICAgIH07CisgICAgcGl4ZWwgKmRzdCAgICAgICAgICA9IChwaXhl bCAqKV9kc3Q7CisgICAgY29uc3QgcGl4ZWwgKnNyYyAgICA9IChwaXhlbCAqKV9zcmM7CisgICAg aW50IGFfc3RyaWRlLCBiX3N0cmlkZTsKKyAgICBpbnQgeCwgeTsKKyAgICBwdHJkaWZmX3Qgc3Jj X3N0cmlkZSA9ICgyICogTUFYX1BCX1NJWkUgKyBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpF KSAvIHNpemVvZihwaXhlbCk7CisgICAgZHN0X3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOworCisg ICAgYV9zdHJpZGUgPSBwb3NbZW9dWzBdWzBdICsgcG9zW2VvXVswXVsxXSAqIHNyY19zdHJpZGU7 CisgICAgYl9zdHJpZGUgPSBwb3NbZW9dWzFdWzBdICsgcG9zW2VvXVsxXVsxXSAqIHNyY19zdHJp ZGU7CisgICAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7CisgICAgICAgIGZvciAoeCA9 IDA7IHggPCB3aWR0aDsgeCsrKSB7CisgICAgICAgICAgICBpbnQgZGlmZjAgPSBDTVAoc3JjW3hd LCBzcmNbeCArIGFfc3RyaWRlXSk7CisgICAgICAgICAgICBpbnQgZGlmZjEgPSBDTVAoc3JjW3hd LCBzcmNbeCArIGJfc3RyaWRlXSk7CisgICAgICAgICAgICBpbnQgb2Zmc2V0X3ZhbCAgICAgICAg PSBlZGdlX2lkeFsyICsgZGlmZjAgKyBkaWZmMV07CisgICAgICAgICAgICBkc3RbeF0gPSBhdl9j bGlwX3BpeGVsKHNyY1t4XSArIHNhb19vZmZzZXRfdmFsW29mZnNldF92YWxdKTsKKyAgICAgICAg fQorICAgICAgICBzcmMgKz0gc3JjX3N0cmlkZTsKKyAgICAgICAgZHN0ICs9IGRzdF9zdHJpZGU7 CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBGVU5DKHNhb19lZGdlX3Jlc3RvcmVfMCkodWludDhf dCAqX2RzdCwgY29uc3QgdWludDhfdCAqX3NyYywKKyAgICBwdHJkaWZmX3QgZHN0X3N0cmlkZSwg cHRyZGlmZl90IHNyY19zdHJpZGUsIGNvbnN0IFNBT1BhcmFtcyAqc2FvLAorICAgIGNvbnN0IGlu dCAqYm9yZGVycywgY29uc3QgaW50IF93aWR0aCwgY29uc3QgaW50IF9oZWlnaHQsIGNvbnN0IGlu dCBjX2lkeCwKKyAgICBjb25zdCB1aW50OF90ICp2ZXJ0X2VkZ2UsIGNvbnN0IHVpbnQ4X3QgKmhv cml6X2VkZ2UsIGNvbnN0IHVpbnQ4X3QgKmRpYWdfZWRnZSkKK3sKKyAgICBpbnQgeCwgeTsKKyAg ICBwaXhlbCAqZHN0ICAgICAgICAgICAgICAgICAgICAgID0gKHBpeGVsICopX2RzdDsKKyAgICBj b25zdCBwaXhlbCAqc3JjICAgICAgICAgICAgICAgID0gKHBpeGVsICopX3NyYzsKKyAgICBjb25z dCBpbnQxNl90ICpzYW9fb2Zmc2V0X3ZhbCAgID0gc2FvLT5vZmZzZXRfdmFsW2NfaWR4XTsKKyAg ICBjb25zdCBpbnQgc2FvX2VvX2NsYXNzICAgICAgICAgID0gc2FvLT5lb19jbGFzc1tjX2lkeF07 CisgICAgaW50IGluaXRfeCA9IDAsIHdpZHRoID0gX3dpZHRoLCBoZWlnaHQgPSBfaGVpZ2h0Owor CisgICAgZHN0X3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOworICAgIHNyY19zdHJpZGUgLz0gc2l6 ZW9mKHBpeGVsKTsKKworICAgIGlmIChzYW9fZW9fY2xhc3MgIT0gU0FPX0VPX1ZFUlQpIHsKKyAg ICAgICAgaWYgKGJvcmRlcnNbMF0pIHsKKyAgICAgICAgICAgIGludCBvZmZzZXRfdmFsID0gc2Fv X29mZnNldF92YWxbMF07CisgICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp IHsKKyAgICAgICAgICAgICAgICBkc3RbeSAqIGRzdF9zdHJpZGVdID0gYXZfY2xpcF9waXhlbChz cmNbeSAqIHNyY19zdHJpZGVdICsgb2Zmc2V0X3ZhbCk7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBpbml0X3ggPSAxOworICAgICAgICB9CisgICAgICAgIGlmIChib3JkZXJzWzJdKSB7Cisg ICAgICAgICAgICBpbnQgb2Zmc2V0X3ZhbCA9IHNhb19vZmZzZXRfdmFsWzBdOworICAgICAgICAg ICAgaW50IG9mZnNldCAgICAgPSB3aWR0aCAtIDE7CisgICAgICAgICAgICBmb3IgKHggPSAwOyB4 IDwgaGVpZ2h0OyB4KyspIHsKKyAgICAgICAgICAgICAgICBkc3RbeCAqIGRzdF9zdHJpZGUgKyBv ZmZzZXRdID0gYXZfY2xpcF9waXhlbChzcmNbeCAqIHNyY19zdHJpZGUgKyBvZmZzZXRdICsgb2Zm c2V0X3ZhbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aWR0aC0tOworICAgICAgICB9 CisgICAgfQorICAgIGlmIChzYW9fZW9fY2xhc3MgIT0gU0FPX0VPX0hPUklaKSB7CisgICAgICAg IGlmIChib3JkZXJzWzFdKSB7CisgICAgICAgICAgICBpbnQgb2Zmc2V0X3ZhbCA9IHNhb19vZmZz ZXRfdmFsWzBdOworICAgICAgICAgICAgZm9yICh4ID0gaW5pdF94OyB4IDwgd2lkdGg7IHgrKykK KyAgICAgICAgICAgICAgICBkc3RbeF0gPSBhdl9jbGlwX3BpeGVsKHNyY1t4XSArIG9mZnNldF92 YWwpOworICAgICAgICB9CisgICAgICAgIGlmIChib3JkZXJzWzNdKSB7CisgICAgICAgICAgICBp bnQgb2Zmc2V0X3ZhbCAgID0gc2FvX29mZnNldF92YWxbMF07CisgICAgICAgICAgICBwdHJkaWZm X3QgeV9kc3Rfc3RyaWRlID0gZHN0X3N0cmlkZSAqIChoZWlnaHQgLSAxKTsKKyAgICAgICAgICAg IHB0cmRpZmZfdCB5X3NyY19zdHJpZGUgPSBzcmNfc3RyaWRlICogKGhlaWdodCAtIDEpOworICAg ICAgICAgICAgZm9yICh4ID0gaW5pdF94OyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgICAgICAg ICBkc3RbeCArIHlfZHN0X3N0cmlkZV0gPSBhdl9jbGlwX3BpeGVsKHNyY1t4ICsgeV9zcmNfc3Ry aWRlXSArIG9mZnNldF92YWwpOworICAgICAgICAgICAgaGVpZ2h0LS07CisgICAgICAgIH0KKyAg ICB9Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMoc2FvX2VkZ2VfcmVzdG9yZV8xKSh1aW50OF90ICpf ZHN0LCBjb25zdCB1aW50OF90ICpfc3JjLAorICAgIHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBwdHJk aWZmX3Qgc3JjX3N0cmlkZSwgY29uc3QgU0FPUGFyYW1zICpzYW8sCisgICAgY29uc3QgaW50ICpi b3JkZXJzLCBjb25zdCBpbnQgX3dpZHRoLCBjb25zdCBpbnQgX2hlaWdodCwgY29uc3QgaW50IGNf aWR4LAorICAgIGNvbnN0IHVpbnQ4X3QgKnZlcnRfZWRnZSwgY29uc3QgdWludDhfdCAqaG9yaXpf ZWRnZSwgY29uc3QgdWludDhfdCAqZGlhZ19lZGdlKQoreworICAgIGludCB4LCB5OworICAgIHBp eGVsICpkc3QgICAgICAgICAgICAgICAgICAgICAgPSAocGl4ZWwgKilfZHN0OworICAgIGNvbnN0 IHBpeGVsICpzcmMgICAgICAgICAgICAgICAgPSAocGl4ZWwgKilfc3JjOworICAgIGNvbnN0IGlu dDE2X3QgKnNhb19vZmZzZXRfdmFsICAgPSBzYW8tPm9mZnNldF92YWxbY19pZHhdOworICAgIGNv bnN0IGludCBzYW9fZW9fY2xhc3MgICAgICAgICAgPSBzYW8tPmVvX2NsYXNzW2NfaWR4XTsKKyAg ICBpbnQgaW5pdF94ID0gMCwgaW5pdF95ID0gMCwgd2lkdGggPSBfd2lkdGgsIGhlaWdodCA9IF9o ZWlnaHQ7CisKKyAgICBkc3Rfc3RyaWRlIC89IHNpemVvZihwaXhlbCk7CisgICAgc3JjX3N0cmlk ZSAvPSBzaXplb2YocGl4ZWwpOworCisgICAgaWYgKHNhb19lb19jbGFzcyAhPSBTQU9fRU9fVkVS VCkgeworICAgICAgICBpZiAoYm9yZGVyc1swXSkgeworICAgICAgICAgICAgaW50IG9mZnNldF92 YWwgPSBzYW9fb2Zmc2V0X3ZhbFswXTsKKyAgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCBoZWln aHQ7IHkrKykgeworICAgICAgICAgICAgICAgIGRzdFt5ICogZHN0X3N0cmlkZV0gPSBhdl9jbGlw X3BpeGVsKHNyY1t5ICogc3JjX3N0cmlkZV0gKyBvZmZzZXRfdmFsKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGluaXRfeCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJvcmRlcnNb Ml0pIHsKKyAgICAgICAgICAgIGludCBvZmZzZXRfdmFsID0gc2FvX29mZnNldF92YWxbMF07Cisg ICAgICAgICAgICBpbnQgb2Zmc2V0ICAgICA9IHdpZHRoIC0gMTsKKyAgICAgICAgICAgIGZvciAo eCA9IDA7IHggPCBoZWlnaHQ7IHgrKykgeworICAgICAgICAgICAgICAgIGRzdFt4ICogZHN0X3N0 cmlkZSArIG9mZnNldF0gPSBhdl9jbGlwX3BpeGVsKHNyY1t4ICogc3JjX3N0cmlkZSArIG9mZnNl dF0gKyBvZmZzZXRfdmFsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdpZHRoLS07Cisg ICAgICAgIH0KKyAgICB9CisgICAgaWYgKHNhb19lb19jbGFzcyAhPSBTQU9fRU9fSE9SSVopIHsK KyAgICAgICAgaWYgKGJvcmRlcnNbMV0pIHsKKyAgICAgICAgICAgIGludCBvZmZzZXRfdmFsID0g c2FvX29mZnNldF92YWxbMF07CisgICAgICAgICAgICBmb3IgKHggPSBpbml0X3g7IHggPCB3aWR0 aDsgeCsrKQorICAgICAgICAgICAgICAgIGRzdFt4XSA9IGF2X2NsaXBfcGl4ZWwoc3JjW3hdICsg b2Zmc2V0X3ZhbCk7CisgICAgICAgICAgICBpbml0X3kgPSAxOworICAgICAgICB9CisgICAgICAg IGlmIChib3JkZXJzWzNdKSB7CisgICAgICAgICAgICBpbnQgb2Zmc2V0X3ZhbCAgID0gc2FvX29m ZnNldF92YWxbMF07CisgICAgICAgICAgICBwdHJkaWZmX3QgeV9kc3Rfc3RyaWRlID0gZHN0X3N0 cmlkZSAqIChoZWlnaHQgLSAxKTsKKyAgICAgICAgICAgIHB0cmRpZmZfdCB5X3NyY19zdHJpZGUg PSBzcmNfc3RyaWRlICogKGhlaWdodCAtIDEpOworICAgICAgICAgICAgZm9yICh4ID0gaW5pdF94 OyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgICAgICAgICBkc3RbeCArIHlfZHN0X3N0cmlkZV0g PSBhdl9jbGlwX3BpeGVsKHNyY1t4ICsgeV9zcmNfc3RyaWRlXSArIG9mZnNldF92YWwpOworICAg ICAgICAgICAgaGVpZ2h0LS07CisgICAgICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICAgIGlu dCBzYXZlX3VwcGVyX2xlZnQgID0gIWRpYWdfZWRnZVswXSAmJiBzYW9fZW9fY2xhc3MgPT0gU0FP X0VPXzEzNUQgJiYgIWJvcmRlcnNbMF0gJiYgIWJvcmRlcnNbMV07CisgICAgICAgIGludCBzYXZl X3VwcGVyX3JpZ2h0ID0gIWRpYWdfZWRnZVsxXSAmJiBzYW9fZW9fY2xhc3MgPT0gU0FPX0VPXzQ1 RCAgJiYgIWJvcmRlcnNbMV0gJiYgIWJvcmRlcnNbMl07CisgICAgICAgIGludCBzYXZlX2xvd2Vy X3JpZ2h0ID0gIWRpYWdfZWRnZVsyXSAmJiBzYW9fZW9fY2xhc3MgPT0gU0FPX0VPXzEzNUQgJiYg IWJvcmRlcnNbMl0gJiYgIWJvcmRlcnNbM107CisgICAgICAgIGludCBzYXZlX2xvd2VyX2xlZnQg ID0gIWRpYWdfZWRnZVszXSAmJiBzYW9fZW9fY2xhc3MgPT0gU0FPX0VPXzQ1RCAgJiYgIWJvcmRl cnNbMF0gJiYgIWJvcmRlcnNbM107CisKKyAgICAgICAgLy8gUmVzdG9yZSBwaXhlbHMgdGhhdCBj YW4ndCBiZSBtb2RpZmllZAorICAgICAgICBpZiAodmVydF9lZGdlWzBdICYmIHNhb19lb19jbGFz cyAhPSBTQU9fRU9fVkVSVCkgeworICAgICAgICAgICAgZm9yICh5ID0gaW5pdF95ICsgc2F2ZV91 cHBlcl9sZWZ0OyB5IDwgaGVpZ2h0IC0gc2F2ZV9sb3dlcl9sZWZ0OyB5KyspCisgICAgICAgICAg ICAgICAgZHN0W3kgKiBkc3Rfc3RyaWRlXSA9IHNyY1t5ICogc3JjX3N0cmlkZV07CisgICAgICAg IH0KKyAgICAgICAgaWYgKHZlcnRfZWRnZVsxXSAmJiBzYW9fZW9fY2xhc3MgIT0gU0FPX0VPX1ZF UlQpIHsKKyAgICAgICAgICAgIGZvciAoeSA9IGluaXRfeSArIHNhdmVfdXBwZXJfcmlnaHQ7IHkg PCBoZWlnaHQgLSBzYXZlX2xvd2VyX3JpZ2h0OyB5KyspCisgICAgICAgICAgICAgICAgZHN0W3kg KiBkc3Rfc3RyaWRlICsgd2lkdGggLSAxXSA9IHNyY1t5ICogc3JjX3N0cmlkZSArIHdpZHRoIC0g MV07CisgICAgICAgIH0KKworICAgICAgICBpZiAoaG9yaXpfZWRnZVswXSAmJiBzYW9fZW9fY2xh c3MgIT0gU0FPX0VPX0hPUklaKSB7CisgICAgICAgICAgICBmb3IgKHggPSBpbml0X3ggKyBzYXZl X3VwcGVyX2xlZnQ7IHggPCB3aWR0aCAtIHNhdmVfdXBwZXJfcmlnaHQ7IHgrKykKKyAgICAgICAg ICAgICAgICBkc3RbeF0gPSBzcmNbeF07CisgICAgICAgIH0KKyAgICAgICAgaWYgKGhvcml6X2Vk Z2VbMV0gJiYgc2FvX2VvX2NsYXNzICE9IFNBT19FT19IT1JJWikgeworICAgICAgICAgICAgZm9y ICh4ID0gaW5pdF94ICsgc2F2ZV9sb3dlcl9sZWZ0OyB4IDwgd2lkdGggLSBzYXZlX2xvd2VyX3Jp Z2h0OyB4KyspCisgICAgICAgICAgICAgICAgZHN0WyhoZWlnaHQgLSAxKSAqIGRzdF9zdHJpZGUg KyB4XSA9IHNyY1soaGVpZ2h0IC0gMSkgKiBzcmNfc3RyaWRlICsgeF07CisgICAgICAgIH0KKyAg ICAgICAgaWYgKGRpYWdfZWRnZVswXSAmJiBzYW9fZW9fY2xhc3MgPT0gU0FPX0VPXzEzNUQpCisg ICAgICAgICAgICBkc3RbMF0gPSBzcmNbMF07CisgICAgICAgIGlmIChkaWFnX2VkZ2VbMV0gJiYg c2FvX2VvX2NsYXNzID09IFNBT19FT180NUQpCisgICAgICAgICAgICBkc3Rbd2lkdGggLSAxXSA9 IHNyY1t3aWR0aCAtIDFdOworICAgICAgICBpZiAoZGlhZ19lZGdlWzJdICYmIHNhb19lb19jbGFz cyA9PSBTQU9fRU9fMTM1RCkKKyAgICAgICAgICAgIGRzdFtkc3Rfc3RyaWRlICogKGhlaWdodCAt IDEpICsgd2lkdGggLSAxXSA9IHNyY1tzcmNfc3RyaWRlICogKGhlaWdodCAtIDEpICsgd2lkdGgg LSAxXTsKKyAgICAgICAgaWYgKGRpYWdfZWRnZVszXSAmJiBzYW9fZW9fY2xhc3MgPT0gU0FPX0VP XzQ1RCkKKyAgICAgICAgICAgIGRzdFtkc3Rfc3RyaWRlICogKGhlaWdodCAtIDEpXSA9IHNyY1tz cmNfc3RyaWRlICogKGhlaWdodCAtIDEpXTsKKworICAgIH0KK30KKworI3VuZGVmIENNUAorCitz dGF0aWMgYXZfYWx3YXlzX2lubGluZSBpbnQxNl90IEZVTkMoYWxmX2NsaXApKHBpeGVsIGN1cnIs IHBpeGVsIHYwLCBwaXhlbCB2MSwgaW50MTZfdCBjbGlwKQoreworICAgIHJldHVybiBhdl9jbGlw KHYwIC0gY3VyciwgLWNsaXAsIGNsaXApICsgYXZfY2xpcCh2MSAtIGN1cnIsIC1jbGlwLCBjbGlw KTsKK30KKworc3RhdGljIHZvaWQgRlVOQyhhbGZfZmlsdGVyX2x1bWEpKHVpbnQ4X3QgKl9kc3Qs IHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCB1aW50OF90ICpfc3JjLCBwdHJkaWZmX3Qgc3Jj X3N0cmlkZSwKKyAgICBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IGlu dDE2X3QgKmZpbHRlciwgY29uc3QgaW50MTZfdCAqY2xpcCwgY29uc3QgaW50IHZiX3BvcykKK3sK KyAgICBjb25zdCBwaXhlbCAqc3JjICAgID0gKHBpeGVsICopX3NyYzsKKyAgICBjb25zdCBpbnQg c2hpZnQgICAgID0gNzsKKyAgICBjb25zdCBpbnQgb2Zmc2V0ICAgID0gMSA8PCAoIHNoaWZ0IC0g MSApOworICAgIGNvbnN0IGludCB2Yl9hYm92ZSAgPSB2Yl9wb3MgLSA0OworICAgIGNvbnN0IGlu dCB2Yl9iZWxvdyAgPSB2Yl9wb3MgKyAzOworCisgICAgZHN0X3N0cmlkZSAvPSBzaXplb2YocGl4 ZWwpOworICAgIHNyY19zdHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsKKworICAgIGZvciAoaW50IHkg PSAwOyB5IDwgaGVpZ2h0OyB5ICs9IEFMRl9CTE9DS19TSVpFKSB7CisgICAgICAgIGZvciAoaW50 IHggPSAwOyB4IDwgd2lkdGg7IHggKz0gQUxGX0JMT0NLX1NJWkUpIHsKKyAgICAgICAgICAgIGNv bnN0IHBpeGVsICpzMCA9IHNyYyArIHkgKiBzcmNfc3RyaWRlICsgeDsKKyAgICAgICAgICAgIGNv bnN0IHBpeGVsICpzMSA9IHMwICsgc3JjX3N0cmlkZTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVs ICpzMiA9IHMwIC0gc3JjX3N0cmlkZTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzMyA9IHMx ICsgc3JjX3N0cmlkZTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzNCA9IHMyIC0gc3JjX3N0 cmlkZTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzNSA9IHMzICsgc3JjX3N0cmlkZTsKKyAg ICAgICAgICAgIGNvbnN0IHBpeGVsICpzNiA9IHM0IC0gc3JjX3N0cmlkZTsKKworICAgICAgICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBBTEZfQkxPQ0tfU0laRTsgaSsrKSB7CisgICAgICAgICAg ICAgICAgcGl4ZWwgKmRzdCA9IChwaXhlbCAqKV9kc3QgKyAoeSArIGkpICogZHN0X3N0cmlkZSAr IHg7CisKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDAgPSBzMCArIGkgKiBzcmNfc3Ry aWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwMSA9IHMxICsgaSAqIHNyY19zdHJp ZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAyID0gczIgKyBpICogc3JjX3N0cmlk ZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDMgPSBzMyArIGkgKiBzcmNfc3RyaWRl OworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwNCA9IHM0ICsgaSAqIHNyY19zdHJpZGU7 CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnA1ID0gczUgKyBpICogc3JjX3N0cmlkZTsK KyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDYgPSBzNiArIGkgKiBzcmNfc3RyaWRlOwor CisgICAgICAgICAgICAgICAgY29uc3QgaW50IGlzX25lYXJfdmJfYWJvdmUgPSAoeSArIGkgPCAg dmJfcG9zKSAmJiAoeSArIGkgPj0gdmJfcG9zIC0gMSk7CisgICAgICAgICAgICAgICAgY29uc3Qg aW50IGlzX25lYXJfdmJfYmVsb3cgPSAoeSArIGkgPj0gdmJfcG9zKSAmJiAoeSArIGkgPD0gdmJf cG9zKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgaXNfbmVhcl92YiA9IGlzX25lYXJfdmJf YWJvdmUgfHwgaXNfbmVhcl92Yl9iZWxvdzsKKworICAgICAgICAgICAgICAgIGlmICgoeSArIGkg PCB2Yl9wb3MpICYmICgoeSArIGkpID49IHZiX2Fib3ZlKSkgeworICAgICAgICAgICAgICAgICAg ICBwMSA9ICh5ICsgaSA9PSB2Yl9wb3MgLSAxKSA/IHAwIDogcDE7CisgICAgICAgICAgICAgICAg ICAgIHAzID0gKHkgKyBpID49IHZiX3BvcyAtIDIpID8gcDEgOiBwMzsKKyAgICAgICAgICAgICAg ICAgICAgcDUgPSAoeSArIGkgPj0gdmJfcG9zIC0gMykgPyBwMyA6IHA1OworCisgICAgICAgICAg ICAgICAgICAgIHAyID0gKHkgKyBpID09IHZiX3BvcyAtIDEpID8gcDAgOiBwMjsKKyAgICAgICAg ICAgICAgICAgICAgcDQgPSAoeSArIGkgPj0gdmJfcG9zIC0gMikgPyBwMiA6IHA0OworICAgICAg ICAgICAgICAgICAgICBwNiA9ICh5ICsgaSA+PSB2Yl9wb3MgLSAzKSA/IHA0IDogcDY7CisgICAg ICAgICAgICAgICAgfSBlbHNlIGlmICgoeSArIGkgPj0gdmJfcG9zKSAmJiAoKHkgKyBpKSA8PSB2 Yl9iZWxvdykpIHsKKyAgICAgICAgICAgICAgICAgICAgcDIgPSAoeSArIGkgPT0gdmJfcG9zICAg ICkgPyBwMCA6IHAyOworICAgICAgICAgICAgICAgICAgICBwNCA9ICh5ICsgaSA8PSB2Yl9wb3Mg KyAxKSA/IHAyIDogcDQ7CisgICAgICAgICAgICAgICAgICAgIHA2ID0gKHkgKyBpIDw9IHZiX3Bv cyArIDIpID8gcDQgOiBwNjsKKworICAgICAgICAgICAgICAgICAgICBwMSA9ICh5ICsgaSA9PSB2 Yl9wb3MgICAgKSA/IHAwIDogcDE7CisgICAgICAgICAgICAgICAgICAgIHAzID0gKHkgKyBpIDw9 IHZiX3BvcyArIDEpID8gcDEgOiBwMzsKKyAgICAgICAgICAgICAgICAgICAgcDUgPSAoeSArIGkg PD0gdmJfcG9zICsgMikgPyBwMyA6IHA1OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgQUxGX0JMT0NLX1NJWkU7IGorKykgeworICAgICAg ICAgICAgICAgICAgICBpbnQgc3VtID0gMDsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgcGl4 ZWwgY3VyciA9ICpwMDsKKworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzBdICAq IEZVTkMoYWxmX2NsaXApKGN1cnIsIHA1WyswXSwgcDZbKzBdLCBjbGlwWzBdKTsKKyAgICAgICAg ICAgICAgICAgICAgc3VtICs9IGZpbHRlclsxXSAgKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwM1sr MV0sIHA0Wy0xXSwgY2xpcFsxXSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJb Ml0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDNbKzBdLCBwNFsrMF0sIGNsaXBbMl0pOworICAg ICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzNdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIs IHAzWy0xXSwgcDRbKzFdLCBjbGlwWzNdKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZp bHRlcls0XSAgKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwMVsrMl0sIHAyWy0yXSwgY2xpcFs0XSk7 CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbNV0gICogRlVOQyhhbGZfY2xpcCko Y3VyciwgcDFbKzFdLCBwMlstMV0sIGNsaXBbNV0pOworICAgICAgICAgICAgICAgICAgICBzdW0g Kz0gZmlsdGVyWzZdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAxWyswXSwgcDJbKzBdLCBjbGlw WzZdKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlcls3XSAgKiBGVU5DKGFsZl9j bGlwKShjdXJyLCBwMVstMV0sIHAyWysxXSwgY2xpcFs3XSk7CisgICAgICAgICAgICAgICAgICAg IHN1bSArPSBmaWx0ZXJbOF0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDFbLTJdLCBwMlsrMl0s IGNsaXBbOF0pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzldICAqIEZVTkMo YWxmX2NsaXApKGN1cnIsIHAwWyszXSwgcDBbLTNdLCBjbGlwWzldKTsKKyAgICAgICAgICAgICAg ICAgICAgc3VtICs9IGZpbHRlclsxMF0gKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwMFsrMl0sIHAw Wy0yXSwgY2xpcFsxMF0pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzExXSAq IEZVTkMoYWxmX2NsaXApKGN1cnIsIHAwWysxXSwgcDBbLTFdLCBjbGlwWzExXSk7CisKKyAgICAg ICAgICAgICAgICAgICAgaWYgKCFpc19uZWFyX3ZiKQorICAgICAgICAgICAgICAgICAgICAgICAg c3VtID0gKHN1bSArIG9mZnNldCkgPj4gc2hpZnQ7CisgICAgICAgICAgICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgICAgICAgICAgICAgIHN1bSA9IChzdW0gKyAoMSA8PCAoKHNoaWZ0ICsgMykg LSAxKSkpID4+IChzaGlmdCArIDMpOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gY3VycjsK KyAgICAgICAgICAgICAgICAgICAgZHN0W2pdID0gQ0xJUChzdW0pOworCisgICAgICAgICAgICAg ICAgICAgIHAwKys7CisgICAgICAgICAgICAgICAgICAgIHAxKys7CisgICAgICAgICAgICAgICAg ICAgIHAyKys7CisgICAgICAgICAgICAgICAgICAgIHAzKys7CisgICAgICAgICAgICAgICAgICAg IHA0Kys7CisgICAgICAgICAgICAgICAgICAgIHA1Kys7CisgICAgICAgICAgICAgICAgICAgIHA2 Kys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZmlsdGVy ICs9IEFMRl9OVU1fQ09FRkZfTFVNQTsKKyAgICAgICAgICAgIGNsaXAgKz0gQUxGX05VTV9DT0VG Rl9MVU1BOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBGVU5DKGFsZl9maWx0 ZXJfY2hyb21hKSh1aW50OF90KiBfZHN0LCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwgY29uc3QgdWlu dDhfdCogX3NyYywgcHRyZGlmZl90IHNyY19zdHJpZGUsCisgICAgY29uc3QgaW50IHdpZHRoLCBj b25zdCBpbnQgaGVpZ2h0LCBjb25zdCBpbnQxNl90KiBmaWx0ZXIsIGNvbnN0IGludDE2X3QqIGNs aXAsIGNvbnN0IGludCB2Yl9wb3MpCit7CisgICAgY29uc3QgcGl4ZWwgKnNyYyA9IChwaXhlbCAq KV9zcmM7CisgICAgY29uc3QgaW50IHNoaWZ0ICA9IDc7CisgICAgY29uc3QgaW50IG9mZnNldCA9 IDEgPDwgKCBzaGlmdCAtIDEgKTsKKyAgICBjb25zdCBpbnQgdmJfYWJvdmUgID0gdmJfcG9zIC0g MjsKKyAgICBjb25zdCBpbnQgdmJfYmVsb3cgID0gdmJfcG9zICsgMTsKKworICAgIGRzdF9zdHJp ZGUgLz0gc2l6ZW9mKHBpeGVsKTsKKyAgICBzcmNfc3RyaWRlIC89IHNpemVvZihwaXhlbCk7CisK KyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSArPSBBTEZfQkxPQ0tfU0laRSkgewor ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4ICs9IEFMRl9CTE9DS19TSVpFKSB7 CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczAgPSBzcmMgKyB5ICogc3JjX3N0cmlkZSArIHg7 CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczEgPSBzMCArIHNyY19zdHJpZGU7CisgICAgICAg ICAgICBjb25zdCBwaXhlbCAqczIgPSBzMCAtIHNyY19zdHJpZGU7CisgICAgICAgICAgICBjb25z dCBwaXhlbCAqczMgPSBzMSArIHNyY19zdHJpZGU7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAq czQgPSBzMiAtIHNyY19zdHJpZGU7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczUgPSBzMyAr IHNyY19zdHJpZGU7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczYgPSBzNCAtIHNyY19zdHJp ZGU7CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgQUxGX0JMT0NLX1NJWkU7IGkr KykgeworICAgICAgICAgICAgICAgIHBpeGVsICpkc3QgPSAocGl4ZWwgKilfZHN0ICsgKHkgKyBp KSAqIGRzdF9zdHJpZGUgKyB4OworCisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAwID0g czAgKyBpICogc3JjX3N0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDEgPSBz MSArIGkgKiBzcmNfc3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwMiA9IHMy ICsgaSAqIHNyY19zdHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAzID0gczMg KyBpICogc3JjX3N0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDQgPSBzNCAr IGkgKiBzcmNfc3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwNSA9IHM1ICsg aSAqIHNyY19zdHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnA2ID0gczYgKyBp ICogc3JjX3N0cmlkZTsKKworICAgICAgICAgICAgICAgIGNvbnN0IGludCBpc19uZWFyX3ZiX2Fi b3ZlID0gKHkgKyBpIDwgIHZiX3BvcykgJiYgKHkgKyBpID49IHZiX3BvcyAtIDEpOworICAgICAg ICAgICAgICAgIGNvbnN0IGludCBpc19uZWFyX3ZiX2JlbG93ID0gKHkgKyBpID49IHZiX3Bvcykg JiYgKHkgKyBpIDw9IHZiX3Bvcyk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IGlzX25lYXJf dmIgPSBpc19uZWFyX3ZiX2Fib3ZlIHx8IGlzX25lYXJfdmJfYmVsb3c7CisKKyAgICAgICAgICAg ICAgICBpZiAoKHkgKyBpIDwgdmJfcG9zKSAmJiAoKHkgKyBpKSA+PSB2Yl9hYm92ZSkpIHsKKyAg ICAgICAgICAgICAgICAgICAgcDEgPSAoeSArIGkgPT0gdmJfcG9zIC0gMSkgPyBwMCA6IHAxOwor ICAgICAgICAgICAgICAgICAgICBwMyA9ICh5ICsgaSA+PSB2Yl9wb3MgLSAyKSA/IHAxIDogcDM7 CisgICAgICAgICAgICAgICAgICAgIHA1ID0gKHkgKyBpID49IHZiX3BvcyAtIDMpID8gcDMgOiBw NTsKKworICAgICAgICAgICAgICAgICAgICBwMiA9ICh5ICsgaSA9PSB2Yl9wb3MgLSAxKSA/IHAw IDogcDI7CisgICAgICAgICAgICAgICAgICAgIHA0ID0gKHkgKyBpID49IHZiX3BvcyAtIDIpID8g cDIgOiBwNDsKKyAgICAgICAgICAgICAgICAgICAgcDYgPSAoeSArIGkgPj0gdmJfcG9zIC0gMykg PyBwNCA6IHA2OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHkgKyBpID49IHZiX3Bvcykg JiYgKCh5ICsgaSkgPD0gdmJfYmVsb3cpKSB7CisgICAgICAgICAgICAgICAgICAgIHAyID0gKHkg KyBpID09IHZiX3BvcyAgICApID8gcDAgOiBwMjsKKyAgICAgICAgICAgICAgICAgICAgcDQgPSAo eSArIGkgPD0gdmJfcG9zICsgMSkgPyBwMiA6IHA0OworICAgICAgICAgICAgICAgICAgICBwNiA9 ICh5ICsgaSA8PSB2Yl9wb3MgKyAyKSA/IHA0IDogcDY7CisKKyAgICAgICAgICAgICAgICAgICAg cDEgPSAoeSArIGkgPT0gdmJfcG9zICAgICkgPyBwMCA6IHAxOworICAgICAgICAgICAgICAgICAg ICBwMyA9ICh5ICsgaSA8PSB2Yl9wb3MgKyAxKSA/IHAxIDogcDM7CisgICAgICAgICAgICAgICAg ICAgIHA1ID0gKHkgKyBpIDw9IHZiX3BvcyArIDIpID8gcDMgOiBwNTsKKyAgICAgICAgICAgICAg ICB9CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IEFMRl9CTE9DS19TSVpF OyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHN1bSA9IDA7CisgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHBpeGVsIGN1cnIgPSAqcDA7CisKKyAgICAgICAgICAgICAgICAgICAgc3Vt ICs9IGZpbHRlclswXSAgKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwM1srMF0sIHA0WyswXSwgY2xp cFswXSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbMV0gICogRlVOQyhhbGZf Y2xpcCkoY3VyciwgcDFbKzFdLCBwMlstMV0sIGNsaXBbMV0pOworICAgICAgICAgICAgICAgICAg ICBzdW0gKz0gZmlsdGVyWzJdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAxWyswXSwgcDJbKzBd LCBjbGlwWzJdKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlclszXSAgKiBGVU5D KGFsZl9jbGlwKShjdXJyLCBwMVstMV0sIHAyWysxXSwgY2xpcFszXSk7CisgICAgICAgICAgICAg ICAgICAgIHN1bSArPSBmaWx0ZXJbNF0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDBbKzJdLCBw MFstMl0sIGNsaXBbNF0pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzVdICAq IEZVTkMoYWxmX2NsaXApKGN1cnIsIHAwWysxXSwgcDBbLTFdLCBjbGlwWzVdKTsKKworICAgICAg ICAgICAgICAgICAgICBpZiAoIWlzX25lYXJfdmIpCisgICAgICAgICAgICAgICAgICAgICAgICBz dW0gPSAoc3VtICsgb2Zmc2V0KSA+PiBzaGlmdDsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICAgICAgICAgICAgc3VtID0gKHN1bSArICgxIDw8ICgoc2hpZnQgKyAzKSAt IDEpKSkgPj4gKHNoaWZ0ICsgMyk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBjdXJyOwor ICAgICAgICAgICAgICAgICAgICBkc3Rbal0gPSBDTElQKHN1bSk7CisKKyAgICAgICAgICAgICAg ICAgICAgcDArKzsKKyAgICAgICAgICAgICAgICAgICAgcDErKzsKKyAgICAgICAgICAgICAgICAg ICAgcDIrKzsKKyAgICAgICAgICAgICAgICAgICAgcDMrKzsKKyAgICAgICAgICAgICAgICAgICAg cDQrKzsKKyAgICAgICAgICAgICAgICAgICAgcDUrKzsKKyAgICAgICAgICAgICAgICAgICAgcDYr KzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9 CisKK3N0YXRpYyB2b2lkIEZVTkMoYWxmX2ZpbHRlcl9jYykodWludDhfdCAqX2RzdCwgcHRyZGlm Zl90IGRzdF9zdHJpZGUsIGNvbnN0IHVpbnQ4X3QgKl9sdW1hLCBjb25zdCBwdHJkaWZmX3QgbHVt YV9zdHJpZGUsCisgICAgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0LCBjb25zdCBp bnQgaHMsIGNvbnN0IGludCB2cywgY29uc3QgaW50MTZfdCAqZmlsdGVyLCBjb25zdCBpbnQgdmJf cG9zKQoreworICAgIGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUgPSBsdW1hX3N0cmlkZSAvIHNpemVv ZihwaXhlbCk7CisKKyAgICBkc3Rfc3RyaWRlIC89IHNpemVvZihwaXhlbCk7CisKKyAgICBmb3Ig KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4 IDwgd2lkdGg7IHgrKykgeworICAgICAgICAgICAgaW50IHN1bSA9IDA7CisgICAgICAgICAgICBw aXhlbCAqZHN0ICA9IChwaXhlbCAqKV9kc3QgICsgeSAqIGRzdF9zdHJpZGUgKyB4OworICAgICAg ICAgICAgY29uc3QgcGl4ZWwgKnNyYyAgPSAocGl4ZWwgKilfbHVtYSArICh5IDw8IHZzKSAqIHN0 cmlkZSArICh4IDw8IGhzKTsKKworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnMwID0gc3JjIC0g c3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnMxID0gc3JjOworICAgICAgICAgICAg Y29uc3QgcGl4ZWwgKnMyID0gc3JjICsgc3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwg KnMzID0gc3JjICsgMiAqIHN0cmlkZTsKKworICAgICAgICAgICAgY29uc3QgaW50IHBvcyA9IHkg PDwgdnM7CisgICAgICAgICAgICBpZiAoIXZzICYmIChwb3MgPT0gdmJfcG9zIHx8IHBvcyA9PSB2 Yl9wb3MgKyAxKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYg KHBvcyA9PSAodmJfcG9zIC0gMikgfHwgcG9zID09ICh2Yl9wb3MgKyAxKSkKKyAgICAgICAgICAg ICAgICBzMyA9IHMyOworICAgICAgICAgICAgZWxzZSAgaWYgKHBvcyA9PSAodmJfcG9zIC0gMSkg fHwgcG9zID09IHZiX3BvcykKKyAgICAgICAgICAgICAgICBzMyA9IHMyID0gczAgPSBzMTsKKwor CisgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzBdICogKCpzMCAtICpzcmMpOworICAgICAgICAg ICAgc3VtICs9IGZpbHRlclsxXSAqICgqKHMxIC0gMSkgLSAqc3JjKTsKKyAgICAgICAgICAgIHN1 bSArPSBmaWx0ZXJbMl0gKiAoKihzMSArIDEpIC0gKnNyYyk7CisgICAgICAgICAgICBzdW0gKz0g ZmlsdGVyWzNdICogKCooczIgLSAxKSAtICpzcmMpOworICAgICAgICAgICAgc3VtICs9IGZpbHRl cls0XSAqICgqczIgLSAqc3JjKTsKKyAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbNV0gKiAoKihz MiArIDEpIC0gKnNyYyk7CisgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzZdICogKCpzMyAtICpz cmMpOworICAgICAgICAgICAgc3VtID0gYXZfY2xpcCgoc3VtICsgNjQpID4+IDcsIC0oMSA8PCAo QklUX0RFUFRIIC0gMSkpLCAoMSA8PCAoQklUX0RFUFRIIC0gMSkpIC0gMSk7CisgICAgICAgICAg ICBzdW0gKz0gKmRzdDsKKyAgICAgICAgICAgICpkc3QgPSBhdl9jbGlwX3BpeGVsKHN1bSk7Cisg ICAgICAgIH0KKyAgICB9Cit9CisKKyNkZWZpbmUgQUxGX0RJUl9WRVJUICAgICAgICAwCisjZGVm aW5lIEFMRl9ESVJfSE9SWiAgICAgICAgMQorI2RlZmluZSBBTEZfRElSX0RJR0EwICAgICAgIDIK KyNkZWZpbmUgQUxGX0RJUl9ESUdBMSAgICAgICAzCisKK3N0YXRpYyB2b2lkIEZVTkMoYWxmX2dl dF9pZHgpKGludCAqY2xhc3NfaWR4LCBpbnQgKnRyYW5zcG9zZV9pZHgsIGNvbnN0IGludCAqc3Vt LCBjb25zdCBpbnQgYWMpCit7CisgICAgc3RhdGljIGNvbnN0IGludCBhcmdfdmFyW10gPSB7MCwg MSwgMiwgMiwgMiwgMiwgMiwgMywgMywgMywgMywgMywgMywgMywgMywgNCB9OworCisgICAgaW50 IGh2MCwgaHYxLCBkaXJfaHYsIGQwLCBkMSwgZGlyX2QsIGh2ZDEsIGh2ZDAsIHN1bV9odiwgZGly MTsKKworICAgIGRpcl9odiA9IHN1bVtBTEZfRElSX1ZFUlRdIDw9IHN1bVtBTEZfRElSX0hPUlpd OworICAgIGh2MSAgICA9IEZGTUFYKHN1bVtBTEZfRElSX1ZFUlRdLCBzdW1bQUxGX0RJUl9IT1Ja XSk7CisgICAgaHYwICAgID0gRkZNSU4oc3VtW0FMRl9ESVJfVkVSVF0sIHN1bVtBTEZfRElSX0hP UlpdKTsKKworICAgIGRpcl9kICA9IHN1bVtBTEZfRElSX0RJR0EwXSA8PSBzdW1bQUxGX0RJUl9E SUdBMV07CisgICAgZDEgICAgID0gRkZNQVgoc3VtW0FMRl9ESVJfRElHQTBdLCBzdW1bQUxGX0RJ Ul9ESUdBMV0pOworICAgIGQwICAgICA9IEZGTUlOKHN1bVtBTEZfRElSX0RJR0EwXSwgc3VtW0FM Rl9ESVJfRElHQTFdKTsKKworICAgIC8vcHJvbW90ZSB0byBhdm9pZCBvdmVyZmxvdworICAgIGRp cjEgPSAodWludDY0X3QpZDEgKiBodjAgPD0gKHVpbnQ2NF90KWh2MSAqIGQwOworICAgIGh2ZDEg PSBkaXIxID8gaHYxIDogZDE7CisgICAgaHZkMCA9IGRpcjEgPyBodjAgOiBkMDsKKworICAgIHN1 bV9odiA9IHN1bVtBTEZfRElSX0hPUlpdICsgc3VtW0FMRl9ESVJfVkVSVF07CisgICAgKmNsYXNz X2lkeCA9IGFyZ192YXJbYXZfY2xpcF91aW50cDIoc3VtX2h2ICogYWMgPj4gKEJJVF9ERVBUSCAt IDEpLCA0KV07CisgICAgaWYgKGh2ZDEgKiAyID4gOSAqIGh2ZDApCisgICAgICAgICpjbGFzc19p ZHggKz0gKChkaXIxIDw8IDEpICsgMikgKiA1OworICAgIGVsc2UgaWYgKGh2ZDEgPiAyICogaHZk MCkKKyAgICAgICAgKmNsYXNzX2lkeCArPSAoKGRpcjEgPDwgMSkgKyAxKSAqIDU7CisKKyAgICAq dHJhbnNwb3NlX2lkeCA9IGRpcl9kICogMiArIGRpcl9odjsKK30KKworc3RhdGljIHZvaWQgRlVO QyhhbGZfY2xhc3NpZnkpKGludCAqY2xhc3NfaWR4LCBpbnQgKnRyYW5zcG9zZV9pZHgsCisgICAg Y29uc3QgdWludDhfdCAqX3NyYywgY29uc3QgcHRyZGlmZl90IF9zcmNfc3RyaWRlLCBjb25zdCBp bnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsCisgICAgY29uc3QgaW50IHZiX3BvcywgaW50ICpn cmFkaWVudF90bXApCit7CisgICAgaW50ICpncmFkOworCisgICAgY29uc3QgaW50IGggPSBoZWln aHQgKyBBTEZfR1JBRElFTlRfQk9SREVSICogMjsKKyAgICBjb25zdCBpbnQgdyA9IHdpZHRoICAr IEFMRl9HUkFESUVOVF9CT1JERVIgKiAyOworICAgIGNvbnN0IGludCBzaXplID0gKEFMRl9CTE9D S19TSVpFICsgQUxGX0dSQURJRU5UX0JPUkRFUiAqIDIpIC8gQUxGX0dSQURJRU5UX1NURVA7Cisg ICAgY29uc3QgaW50IGdzdHJpZGUgPSAodyAvIEFMRl9HUkFESUVOVF9TVEVQKSAqIEFMRl9OVU1f RElSOworCisgICAgY29uc3QgcGl4ZWwgKnNyYyAgICAgICAgICAgPSAoY29uc3QgcGl4ZWwgKilf c3JjOworICAgIGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlID0gX3NyY19zdHJpZGUgLyBzaXpl b2YocGl4ZWwpOworICAgIHNyYyAtPSAoQUxGX0dSQURJRU5UX0JPUkRFUiArIDEpICogc3JjX3N0 cmlkZSArIEFMRl9HUkFESUVOVF9CT1JERVI7CisKKyAgICBncmFkID0gZ3JhZGllbnRfdG1wOwor ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSArPSBBTEZfR1JBRElFTlRfU1RFUCkgeworICAg ICAgICBjb25zdCBwaXhlbCAqczAgID0gc3JjICsgeSAqIHNyY19zdHJpZGU7CisgICAgICAgIGNv bnN0IHBpeGVsICpzMSAgPSBzMCArIHNyY19zdHJpZGU7CisgICAgICAgIGNvbnN0IHBpeGVsICpz MiAgPSBzMSArIHNyY19zdHJpZGU7CisgICAgICAgIGNvbnN0IHBpeGVsICpzMyAgPSBzMiArIHNy Y19zdHJpZGU7CisKKyAgICAgICAgaWYgKHkgPT0gdmJfcG9zKSAgICAgICAgICAvL2Fib3ZlCisg ICAgICAgICAgICBzMyA9IHMyOworICAgICAgICBlbHNlIGlmICh5ID09IHZiX3BvcyArIEFMRl9H UkFESUVOVF9CT1JERVIpCisgICAgICAgICAgICBzMCA9IHMxOworCisgICAgICAgIGZvciAoaW50 IHggPSAwOyB4IDwgdzsgeCArPSBBTEZfR1JBRElFTlRfU1RFUCkgeworICAgICAgICAgICAgLy90 d28gcG9pbnRzIGEgdGltZQorICAgICAgICAgICAgY29uc3QgcGl4ZWwgKmEwICA9IHMwICsgeDsK KyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwMCAgPSBzMSArIHg7CisgICAgICAgICAgICBjb25z dCBwaXhlbCAqYjAgID0gczIgKyB4OworICAgICAgICAgICAgY29uc3QgaW50IHZhbDAgICA9ICgq cDApIDw8IDE7CisKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICphMSAgPSBzMSArIHggKyAxOwor ICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAxICA9IHMyICsgeCArIDE7CisgICAgICAgICAgICBj b25zdCBwaXhlbCAqYjEgID0gczMgKyB4ICsgMTsKKyAgICAgICAgICAgIGNvbnN0IGludCB2YWwx ICAgPSAoKnAxKSA8PCAxOworCisgICAgICAgICAgICBncmFkW0FMRl9ESVJfVkVSVF0gID0gRkZB QlModmFsMCAtICphMCAtICpiMCkgKyBGRkFCUyh2YWwxIC0gKmExIC0gKmIxKTsKKyAgICAgICAg ICAgIGdyYWRbQUxGX0RJUl9IT1JaXSAgPSBGRkFCUyh2YWwwIC0gKihwMCAtIDEpIC0gKihwMCAr IDEpKSArIEZGQUJTKHZhbDEgLSAqKHAxIC0gMSkgLSAqKHAxICsgMSkpOworICAgICAgICAgICAg Z3JhZFtBTEZfRElSX0RJR0EwXSA9IEZGQUJTKHZhbDAgLSAqKGEwIC0gMSkgLSAqKGIwICsgMSkp ICsgRkZBQlModmFsMSAtICooYTEgLSAxKSAtICooYjEgKyAxKSk7CisgICAgICAgICAgICBncmFk W0FMRl9ESVJfRElHQTFdID0gRkZBQlModmFsMCAtICooYTAgKyAxKSAtICooYjAgLSAxKSkgKyBG RkFCUyh2YWwxIC0gKihhMSArIDEpIC0gKihiMSAtIDEpKTsKKyAgICAgICAgICAgIGdyYWQgKz0g QUxGX05VTV9ESVI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8 IGhlaWdodCA7IHkgKz0gQUxGX0JMT0NLX1NJWkUgKSB7CisgICAgICAgIGludCBzdGFydCA9IDA7 CisgICAgICAgIGludCBlbmQgICA9IChBTEZfQkxPQ0tfU0laRSArIEFMRl9HUkFESUVOVF9CT1JE RVIgKiAyKSAvIEFMRl9HUkFESUVOVF9TVEVQOworICAgICAgICBpbnQgYWMgICAgPSAyOworICAg ICAgICBpZiAoeSArIEFMRl9CTE9DS19TSVpFID09IHZiX3BvcykgeworICAgICAgICAgICAgZW5k IC09IEFMRl9HUkFESUVOVF9CT1JERVIgLyBBTEZfR1JBRElFTlRfU1RFUDsKKyAgICAgICAgICAg IGFjID0gMzsKKyAgICAgICAgfSBlbHNlIGlmICh5ID09IHZiX3BvcykgeworICAgICAgICAgICAg c3RhcnQgKz0gQUxGX0dSQURJRU5UX0JPUkRFUiAvIEFMRl9HUkFESUVOVF9TVEVQOworICAgICAg ICAgICAgYWMgPSAzOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk dGg7IHggKz0gQUxGX0JMT0NLX1NJWkUpIHsKKyAgICAgICAgICAgIGNvbnN0IGludCB4ZyA9IHgg LyBBTEZfR1JBRElFTlRfU1RFUDsKKyAgICAgICAgICAgIGNvbnN0IGludCB5ZyA9IHkgLyBBTEZf R1JBRElFTlRfU1RFUDsKKyAgICAgICAgICAgIGludCBzdW1bQUxGX05VTV9ESVJdID0geyAwIH07 CisKKyAgICAgICAgICAgIGdyYWQgPSBncmFkaWVudF90bXAgKyAoeWcgKyBzdGFydCkgKiBnc3Ry aWRlICsgeGcgKiBBTEZfTlVNX0RJUjsKKyAgICAgICAgICAgIC8vdG9kbzogb3B0aW1pemUgdGhp cyBsb29wCisgICAgICAgICAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewor ICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7CisgICAgICAg ICAgICAgICAgICAgIHN1bVtBTEZfRElSX1ZFUlRdICArPSBncmFkW0FMRl9ESVJfVkVSVF07Cisg ICAgICAgICAgICAgICAgICAgIHN1bVtBTEZfRElSX0hPUlpdICArPSBncmFkW0FMRl9ESVJfSE9S Wl07CisgICAgICAgICAgICAgICAgICAgIHN1bVtBTEZfRElSX0RJR0EwXSArPSBncmFkW0FMRl9E SVJfRElHQTBdOworICAgICAgICAgICAgICAgICAgICBzdW1bQUxGX0RJUl9ESUdBMV0gKz0gZ3Jh ZFtBTEZfRElSX0RJR0ExXTsKKyAgICAgICAgICAgICAgICAgICAgZ3JhZCArPSBBTEZfTlVNX0RJ UjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZ3JhZCArPSBnc3RyaWRlIC0g c2l6ZSAqIEFMRl9OVU1fRElSOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlVOQyhhbGZf Z2V0X2lkeCkoY2xhc3NfaWR4LCB0cmFuc3Bvc2VfaWR4LCBzdW0sIGFjKTsKKworICAgICAgICAg ICAgY2xhc3NfaWR4Kys7CisgICAgICAgICAgICB0cmFuc3Bvc2VfaWR4Kys7CisgICAgICAgIH0K KyAgICB9CisKK30KKworc3RhdGljIHZvaWQgRlVOQyhhbGZfcmVjb25fY29lZmZfYW5kX2NsaXAp KGludDE2X3QgKmNvZWZmLCBpbnQxNl90ICpjbGlwLAorICAgIGNvbnN0IGludCAqY2xhc3NfaWR4 LCBjb25zdCBpbnQgKnRyYW5zcG9zZV9pZHgsIGNvbnN0IGludCBzaXplLAorICAgIGNvbnN0IGlu dDE2X3QgKmNvZWZmX3NldCwgY29uc3QgdWludDhfdCAqY2xpcF9pZHhfc2V0LCBjb25zdCB1aW50 OF90ICpjbGFzc190b19maWx0KQoreworICAgIGNvbnN0IHN0YXRpYyBpbnQgaW5kZXhbXVtBTEZf TlVNX0NPRUZGX0xVTUFdID0geworICAgICAgICB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgs IDksIDEwLCAxMSB9LAorICAgICAgICB7IDksIDQsIDEwLCA4LCAxLCA1LCAxMSwgNywgMywgMCwg MiwgNiB9LAorICAgICAgICB7IDAsIDMsIDIsIDEsIDgsIDcsIDYsIDUsIDQsIDksIDEwLCAxMSB9 LAorICAgICAgICB7IDksIDgsIDEwLCA0LCAzLCA3LCAxMSwgNSwgMSwgMCwgMiwgNiB9LAorICAg IH07CisKKyAgICBjb25zdCBpbnQxNl90IGNsaXBfc2V0W10gPSB7CisgICAgICAgIDEgPDwgQklU X0RFUFRILCAxIDw8IChCSVRfREVQVEggLSAzKSwgMSA8PCAoQklUX0RFUFRIIC0gNSksIDEgPDwg KEJJVF9ERVBUSCAtIDcpCisgICAgfTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsg aSsrKSB7CisgICAgICAgIGNvbnN0IGludDE2X3QgICpzcmNfY29lZmYgPSBjb2VmZl9zZXQgKyBj bGFzc190b19maWx0W2NsYXNzX2lkeFtpXV0gKiBBTEZfTlVNX0NPRUZGX0xVTUE7CisgICAgICAg IGNvbnN0IHVpbnQ4X3QgKmNsaXBfaWR4ICA9IGNsaXBfaWR4X3NldCArIGNsYXNzX2lkeFtpXSAq IEFMRl9OVU1fQ09FRkZfTFVNQTsKKworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IEFMRl9O VU1fQ09FRkZfTFVNQTsgaisrKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgaWR4ID0gaW5kZXhb dHJhbnNwb3NlX2lkeFtpXV1bal07CisgICAgICAgICAgICAqY29lZmYrKyA9IHNyY19jb2VmZltp ZHhdOworICAgICAgICAgICAgKmNsaXArKyAgPSBjbGlwX3NldFtjbGlwX2lkeFtpZHhdXTsKKyAg ICAgICAgfQorICAgIH0KK30KKworI3VuZGVmIEFMRl9ESVJfSE9SWgorI3VuZGVmIEFMRl9ESVJf VkVSVAorI3VuZGVmIEFMRl9ESVJfRElHQTAKKyN1bmRlZiBBTEZfRElSX0RJR0ExCisKKy8vIGxp bmUgemVybworI2RlZmluZSBQNyBwaXhbLTggKiB4c3RyaWRlXQorI2RlZmluZSBQNiBwaXhbLTcg KiB4c3RyaWRlXQorI2RlZmluZSBQNSBwaXhbLTYgKiB4c3RyaWRlXQorI2RlZmluZSBQNCBwaXhb LTUgKiB4c3RyaWRlXQorI2RlZmluZSBQMyBwaXhbLTQgKiB4c3RyaWRlXQorI2RlZmluZSBQMiBw aXhbLTMgKiB4c3RyaWRlXQorI2RlZmluZSBQMSBwaXhbLTIgKiB4c3RyaWRlXQorI2RlZmluZSBQ MCBwaXhbLTEgKiB4c3RyaWRlXQorI2RlZmluZSBRMCBwaXhbMCAqIHhzdHJpZGVdCisjZGVmaW5l IFExIHBpeFsxICogeHN0cmlkZV0KKyNkZWZpbmUgUTIgcGl4WzIgKiB4c3RyaWRlXQorI2RlZmlu ZSBRMyBwaXhbMyAqIHhzdHJpZGVdCisjZGVmaW5lIFE0IHBpeFs0ICogeHN0cmlkZV0KKyNkZWZp bmUgUTUgcGl4WzUgKiB4c3RyaWRlXQorI2RlZmluZSBRNiBwaXhbNiAqIHhzdHJpZGVdCisjZGVm aW5lIFE3IHBpeFs3ICogeHN0cmlkZV0KKyNkZWZpbmUgUCh4KSBwaXhbKC0oeCktMSkgKiB4c3Ry aWRlXQorI2RlZmluZSBRKHgpIHBpeFsoeCkgICAgICAqIHhzdHJpZGVdCisKKy8vIGxpbmUgdGhy ZWUuIHVzZWQgb25seSBmb3IgZGVibG9ja2luZyBkZWNpc2lvbgorI2RlZmluZSBUUDcgcGl4Wy04 ICogeHN0cmlkZSArIDMgKiB5c3RyaWRlXQorI2RlZmluZSBUUDYgcGl4Wy03ICogeHN0cmlkZSAr IDMgKiB5c3RyaWRlXQorI2RlZmluZSBUUDUgcGl4Wy02ICogeHN0cmlkZSArIDMgKiB5c3RyaWRl XQorI2RlZmluZSBUUDQgcGl4Wy01ICogeHN0cmlkZSArIDMgKiB5c3RyaWRlXQorI2RlZmluZSBU UDMgcGl4Wy00ICogeHN0cmlkZSArIDMgKiB5c3RyaWRlXQorI2RlZmluZSBUUDIgcGl4Wy0zICog eHN0cmlkZSArIDMgKiB5c3RyaWRlXQorI2RlZmluZSBUUDEgcGl4Wy0yICogeHN0cmlkZSArIDMg KiB5c3RyaWRlXQorI2RlZmluZSBUUDAgcGl4Wy0xICogeHN0cmlkZSArIDMgKiB5c3RyaWRlXQor I2RlZmluZSBUUTAgcGl4WzAgICogeHN0cmlkZSArIDMgKiB5c3RyaWRlXQorI2RlZmluZSBUUTEg cGl4WzEgICogeHN0cmlkZSArIDMgKiB5c3RyaWRlXQorI2RlZmluZSBUUTIgcGl4WzIgICogeHN0 cmlkZSArIDMgKiB5c3RyaWRlXQorI2RlZmluZSBUUTMgcGl4WzMgICogeHN0cmlkZSArIDMgKiB5 c3RyaWRlXQorI2RlZmluZSBUUTQgcGl4WzQgICogeHN0cmlkZSArIDMgKiB5c3RyaWRlXQorI2Rl ZmluZSBUUTUgcGl4WzUgICogeHN0cmlkZSArIDMgKiB5c3RyaWRlXQorI2RlZmluZSBUUTYgcGl4 WzYgICogeHN0cmlkZSArIDMgKiB5c3RyaWRlXQorI2RlZmluZSBUUTcgcGl4WzcgICogeHN0cmlk ZSArIDMgKiB5c3RyaWRlXQorI2RlZmluZSBUUCh4KSBwaXhbKC0oeCktMSkgKiB4c3RyaWRlICsg MyAqIHlzdHJpZGVdCisjZGVmaW5lIFRRKHgpIHBpeFsoeCkgICAgICAqIHhzdHJpZGUgKyAzICog eXN0cmlkZV0KKworI2RlZmluZSBGUDMgcGl4Wy00ICogeHN0cmlkZSArIDEgKiB5c3RyaWRlXQor I2RlZmluZSBGUDIgcGl4Wy0zICogeHN0cmlkZSArIDEgKiB5c3RyaWRlXQorI2RlZmluZSBGUDEg cGl4Wy0yICogeHN0cmlkZSArIDEgKiB5c3RyaWRlXQorI2RlZmluZSBGUDAgcGl4Wy0xICogeHN0 cmlkZSArIDEgKiB5c3RyaWRlXQorI2RlZmluZSBGUTAgcGl4WzAgICogeHN0cmlkZSArIDEgKiB5 c3RyaWRlXQorI2RlZmluZSBGUTEgcGl4WzEgICogeHN0cmlkZSArIDEgKiB5c3RyaWRlXQorI2Rl ZmluZSBGUTIgcGl4WzIgICogeHN0cmlkZSArIDEgKiB5c3RyaWRlXQorI2RlZmluZSBGUTMgcGl4 WzMgICogeHN0cmlkZSArIDEgKiB5c3RyaWRlXQorCitzdGF0aWMgdm9pZCBGVU5DKHZ2Y19sb29w X2ZpbHRlcl9sdW1hKSh1aW50OF90KiBfcGl4LAorICAgIHB0cmRpZmZfdCBfeHN0cmlkZSwgcHRy ZGlmZl90IF95c3RyaWRlLAorICAgIGludCBfYmV0YSwgaW50IF90YywKKyAgICB1aW50OF90IF9u b19wLCB1aW50OF90IF9ub19xLAorICAgIHVpbnQ4X3QgbWF4X2xlbl9wLCB1aW50OF90IG1heF9s ZW5fcSwKKyAgICBpbnQgaG9yX2N0dV9lZGdlKQoreworICAgIGludCBkOworICAgIHBpeGVsKiBw aXggPSAocGl4ZWwqKV9waXg7CisgICAgcHRyZGlmZl90IHhzdHJpZGUgPSBfeHN0cmlkZSAvIHNp emVvZihwaXhlbCk7CisgICAgcHRyZGlmZl90IHlzdHJpZGUgPSBfeXN0cmlkZSAvIHNpemVvZihw aXhlbCk7CisKKyAgICBjb25zdCBpbnQgZHAwID0gYWJzKFAyIC0gMiAqIFAxICsgUDApOworICAg IGNvbnN0IGludCBkcTAgPSBhYnMoUTIgLSAyICogUTEgKyBRMCk7CisgICAgY29uc3QgaW50IGRw MyA9IGFicyhUUDIgLSAyICogVFAxICsgVFAwKTsKKyAgICBjb25zdCBpbnQgZHEzID0gYWJzKFRR MiAtIDIgKiBUUTEgKyBUUTApOworICAgIGNvbnN0IGludCBkMCA9IGRwMCArIGRxMDsKKyAgICBj b25zdCBpbnQgZDMgPSBkcDMgKyBkcTM7CisjaWYgQklUX0RFUFRIIDwgMTAKKyAgICBjb25zdCBp bnQgdGMgPSAoX3RjICsgKDEgPDwgKDkgLSBCSVRfREVQVEgpKSkgPj4gKDEwIC0gQklUX0RFUFRI KTsKKyNlbHNlCisgICAgY29uc3QgaW50IHRjID0gX3RjIDw8IChCSVRfREVQVEggLSAxMCk7Cisj ZW5kaWYKKyAgICBjb25zdCBpbnQgbm9fcCA9IF9ub19wOworICAgIGNvbnN0IGludCBub19xID0g X25vX3E7CisKKyAgICBjb25zdCBpbnQgbGFyZ2VfcCA9IChtYXhfbGVuX3AgPiAzICYmICFob3Jf Y3R1X2VkZ2UpOworICAgIGNvbnN0IGludCBsYXJnZV9xID0gbWF4X2xlbl9xID4gMzsKKyAgICBj b25zdCBpbnQgYmV0YSA9IF9iZXRhIDw8IEJJVF9ERVBUSCAtIDg7CisKKyAgICBjb25zdCBpbnQg YmV0YV8zID0gYmV0YSA+PiAzOworICAgIGNvbnN0IGludCBiZXRhXzIgPSBiZXRhID4+IDI7Cisg ICAgY29uc3QgaW50IHRjMjUgPSAoKHRjICogNSArIDEpID4+IDEpOworCisKKyAgICBpZiAobGFy Z2VfcCB8fCBsYXJnZV9xKSB7CisgICAgICAgIGNvbnN0IGludCBkcDBsID0gbGFyZ2VfcCA/ICgo ZHAwICsgYWJzKFA1IC0gMiAqIFA0ICsgUDMpICsgMSkgPj4gMSkgOiBkcDA7CisgICAgICAgIGNv bnN0IGludCBkcTBsID0gbGFyZ2VfcSA/ICgoZHEwICsgYWJzKFE1IC0gMiAqIFE0ICsgUTMpICsg MSkgPj4gMSkgOiBkcTA7CisgICAgICAgIGNvbnN0IGludCBkcDNsID0gbGFyZ2VfcCA/ICgoZHAz ICsgYWJzKFRQNSAtIDIgKiBUUDQgKyBUUDMpICsgMSkgPj4gMSkgOiBkcDM7CisgICAgICAgIGNv bnN0IGludCBkcTNsID0gbGFyZ2VfcSA/ICgoZHEzICsgYWJzKFRRNSAtIDIgKiBUUTQgKyBUUTMp ICsgMSkgPj4gMSkgOiBkcTM7CisgICAgICAgIGNvbnN0IGludCBkMGwgPSBkcDBsICsgZHEwbDsK KyAgICAgICAgY29uc3QgaW50IGQzbCA9IGRwM2wgKyBkcTNsOworICAgICAgICBjb25zdCBpbnQg YmV0YTUzID0gYmV0YSAqIDMgPj4gNTsKKyAgICAgICAgY29uc3QgaW50IGJldGFfNCA9IGJldGEg Pj4gNDsKKyAgICAgICAgbWF4X2xlbl9wID0gbGFyZ2VfcCA/IG1heF9sZW5fcCA6IDM7CisgICAg ICAgIG1heF9sZW5fcSA9IGxhcmdlX3EgPyBtYXhfbGVuX3EgOiAzOworCisgICAgICAgIGlmIChk MGwgKyBkM2wgPCBiZXRhKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgc3AwbCA9IGFicyhQMyAt IFAwKSArIChtYXhfbGVuX3AgPT0gNyA/IGFicyhQNyAtIFA2IC0gUDUgKyBQNCkgOiAwKTsKKyAg ICAgICAgICAgIGNvbnN0IGludCBzcTBsID0gYWJzKFEwIC0gUTMpICsgKG1heF9sZW5fcSA9PSA3 ID8gYWJzKFE0IC0gUTUgLSBRNiArIFE3KSA6IDApOworICAgICAgICAgICAgY29uc3QgaW50IHNw M2wgPSBhYnMoVFAzIC0gVFAwKSArIChtYXhfbGVuX3AgPT0gNyA/IGFicyhUUDcgLSBUUDYgLSBU UDUgKyBUUDQpIDogMCk7CisgICAgICAgICAgICBjb25zdCBpbnQgc3EzbCA9IGFicyhUUTAgLSBU UTMpICsgKG1heF9sZW5fcSA9PSA3ID8gYWJzKFRRNCAtIFRRNSAtIFRRNiArIFRRNykgOiAwKTsK KyAgICAgICAgICAgIGNvbnN0IGludCBzcDAgPSBsYXJnZV9wID8gKChzcDBsICsgYWJzKFAzIC0g ICBQKG1heF9sZW5fcCkpICsgMSkgPj4gMSkgOiBzcDBsOworICAgICAgICAgICAgY29uc3QgaW50 IHNwMyA9IGxhcmdlX3AgPyAoKHNwM2wgKyBhYnMoVFAzIC0gVFAobWF4X2xlbl9wKSkgKyAxKSA+ PiAxKSA6IHNwM2w7CisgICAgICAgICAgICBjb25zdCBpbnQgc3EwID0gbGFyZ2VfcSA/ICgoc3Ew bCArIGFicyhRMyAtICAgUShtYXhfbGVuX3EpKSArIDEpID4+IDEpIDogc3EwbDsKKyAgICAgICAg ICAgIGNvbnN0IGludCBzcTMgPSBsYXJnZV9xID8gKChzcTNsICsgYWJzKFRRMyAtIFRRKG1heF9s ZW5fcSkpICsgMSkgPj4gMSkgOiBzcTNsOworICAgICAgICAgICAgaWYgKHNwMCArIHNxMCA8IGJl dGE1MyAmJiBhYnMoUDAgLSBRMCkgPCB0YzI1ICYmCisgICAgICAgICAgICAgICAgc3AzICsgc3Ez IDwgYmV0YTUzICYmIGFicyhUUDAgLSBUUTApIDwgdGMyNSAmJgorICAgICAgICAgICAgICAgIChk MGwgPDwgMSkgPCBiZXRhXzQgJiYgKGQzbCA8PCAxKSA8IGJldGFfNCkgeworICAgICAgICAgICAg ICAgIGZvciAoZCA9IDA7IGQgPCA0OyBkKyspIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qg aW50IHA2ID0gUDY7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBwNSA9IFA1OworICAg ICAgICAgICAgICAgICAgICBjb25zdCBpbnQgcDQgPSBQNDsKKyAgICAgICAgICAgICAgICAgICAg Y29uc3QgaW50IHAzID0gUDM7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBwMiA9IFAy OworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgcDEgPSBQMTsKKyAgICAgICAgICAgICAg ICAgICAgY29uc3QgaW50IHAwID0gUDA7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBx MCA9IFEwOworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgcTEgPSBRMTsKKyAgICAgICAg ICAgICAgICAgICAgY29uc3QgaW50IHEyID0gUTI7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGludCBxMyA9IFEzOworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgcTQgPSBRNDsKKyAg ICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHE1ID0gUTU7CisgICAgICAgICAgICAgICAgICAg IGNvbnN0IGludCBxNiA9IFE2OworICAgICAgICAgICAgICAgICAgICBpbnQgbTsKKyAgICAgICAg ICAgICAgICAgICAgaWYgKG1heF9sZW5fcCA9PSA1ICYmIG1heF9sZW5fcSA9PSA1KQorICAgICAg ICAgICAgICAgICAgICAgICAgbSA9IChwNCArIHAzICsgMiAqIChwMiArIHAxICsgcDAgKyBxMCAr IHExICsgcTIpICsgcTMgKyBxNCArIDgpID4+IDQ7CisgICAgICAgICAgICAgICAgICAgIGVsc2Ug aWYgKG1heF9sZW5fcCA9PSBtYXhfbGVuX3EpCisgICAgICAgICAgICAgICAgICAgICAgICBtID0g KHA2ICsgcDUgKyBwNCArIHAzICsgcDIgKyBwMSArIDIgKiAocDAgKyBxMCkgKyBxMSArIHEyICsg cTMgKyBxNCArIHE1ICsgcTYgKyA4KSA+PiA0OworICAgICAgICAgICAgICAgICAgICBlbHNlIGlm IChtYXhfbGVuX3AgKyBtYXhfbGVuX3EgPT0gMTIpCisgICAgICAgICAgICAgICAgICAgICAgICBt ID0gKHA1ICsgcDQgKyBwMyArIHAyICsgMiAqIChwMSArIHAwICsgcTAgKyBxMSkgKyBxMiArIHEz ICsgcTQgKyBxNSArIDgpID4+IDQ7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1heF9s ZW5fcCArIG1heF9sZW5fcSA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgbSA9IChwMyAr IHAyICsgcDEgKyBwMCArIHEwICsgcTEgKyBxMiArIHEzICsgNCkgPj4gMzsKKyAgICAgICAgICAg ICAgICAgICAgZWxzZSBpZiAobWF4X2xlbl9xID09IDcpCisgICAgICAgICAgICAgICAgICAgICAg ICBtID0gKDIgKiAocDIgKyBwMSArIHAwICsgcTApICsgcDAgKyBwMSArIHExICsgcTIgKyBxMyAr IHE0ICsgcTUgKyBxNiArIDgpID4+IDQ7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgICAgICAgICAgICAgIG0gPSAocDYgKyBwNSArIHA0ICsgcDMgKyBwMiArIHAxICsgMiAq IChxMiArIHExICsgcTAgKyBwMCkgKyBxMCArIHExICsgOCkgPj4gNDsKKyAgICAgICAgICAgICAg ICAgICAgaWYgKCFub19wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgcmVm cCA9IChQKG1heF9sZW5fcCkgKyBQKG1heF9sZW5fcCAtIDEpICsgMSkgPj4gMTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChtYXhfbGVuX3AgPT0gMykgeworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFAwID0gcDAgKyBhdl9jbGlwKCgobSAqIDUzICsgcmVmcCAqIDExICsgMzIpID4+ IDYpIC0gcDAsIC0odGMgKiA2ID4+IDEpLCAodGMgKiA2ID4+IDEpKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQMSA9IHAxICsgYXZfY2xpcCgoKG0gKiAzMiArIHJlZnAgKiAzMiArIDMy KSA+PiA2KSAtIHAxLCAtKHRjICogNCA+PiAxKSwgKHRjICogNCA+PiAxKSk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUDIgPSBwMiArIGF2X2NsaXAoKChtICogMTEgKyByZWZwICogNTMg KyAzMikgPj4gNikgLSBwMiwgLSh0YyAqIDIgPj4gMSksICh0YyAqIDIgPj4gMSkpOworICAgICAg ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXhfbGVuX3AgPT0gNSkgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFAwID0gcDAgKyBhdl9jbGlwKCgobSAqIDU4ICsgcmVmcCAqICA2 ICsgMzIpID4+IDYpIC0gcDAsIC0odGMgKiA2ID4+IDEpLCAodGMgKiA2ID4+IDEpKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQMSA9IHAxICsgYXZfY2xpcCgoKG0gKiA0NSArIHJlZnAg KiAxOSArIDMyKSA+PiA2KSAtIHAxLCAtKHRjICogNSA+PiAxKSwgKHRjICogNSA+PiAxKSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUDIgPSBwMiArIGF2X2NsaXAoKChtICogMzIgKyBy ZWZwICogMzIgKyAzMikgPj4gNikgLSBwMiwgLSh0YyAqIDQgPj4gMSksICh0YyAqIDQgPj4gMSkp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAzID0gcDMgKyBhdl9jbGlwKCgobSAqIDE5 ICsgcmVmcCAqIDQ1ICsgMzIpID4+IDYpIC0gcDMsIC0odGMgKiAzID4+IDEpLCAodGMgKiAzID4+ IDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQNCA9IHA0ICsgYXZfY2xpcCgoKG0g KiAgNiArIHJlZnAgKiA1OCArIDMyKSA+PiA2KSAtIHA0LCAtKHRjICogMiA+PiAxKSwgKHRjICog MiA+PiAxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFAwID0gcDAgKyBhdl9jbGlwKCgobSAqIDU5ICsgcmVmcCAqICA1ICsg MzIpID4+IDYpIC0gcDAsIC0odGMgKiA2ID4+IDEpLCAodGMgKiA2ID4+IDEpKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQMSA9IHAxICsgYXZfY2xpcCgoKG0gKiA1MCArIHJlZnAgKiAx NCArIDMyKSA+PiA2KSAtIHAxLCAtKHRjICogNSA+PiAxKSwgKHRjICogNSA+PiAxKSk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUDIgPSBwMiArIGF2X2NsaXAoKChtICogNDEgKyByZWZw ICogMjMgKyAzMikgPj4gNikgLSBwMiwgLSh0YyAqIDQgPj4gMSksICh0YyAqIDQgPj4gMSkpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAzID0gcDMgKyBhdl9jbGlwKCgobSAqIDMyICsg cmVmcCAqIDMyICsgMzIpID4+IDYpIC0gcDMsIC0odGMgKiAzID4+IDEpLCAodGMgKiAzID4+IDEp KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQNCA9IHA0ICsgYXZfY2xpcCgoKG0gKiAy MyArIHJlZnAgKiA0MSArIDMyKSA+PiA2KSAtIHA0LCAtKHRjICogMiA+PiAxKSwgKHRjICogMiA+ PiAxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUDUgPSBwNSArIGF2X2NsaXAoKCht ICogMTQgKyByZWZwICogNTAgKyAzMikgPj4gNikgLSBwNSwgLSh0YyAqIDEgPj4gMSksICh0YyAq IDEgPj4gMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFA2ID0gcDYgKyBhdl9jbGlw KCgobSAqICA1ICsgcmVmcCAqIDU5ICsgMzIpID4+IDYpIC0gcDYsIC0odGMgKiAxID4+IDEpLCAo dGMgKiAxID4+IDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIW5vX3EpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGludCByZWZxID0gKFEobWF4X2xlbl9xKSArIFEobWF4X2xlbl9xIC0g MSkgKyAxKSA+PiAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heF9sZW5fcSA9PSAz KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUTAgPSBxMCArIGF2X2NsaXAoKChtICog NTMgKyByZWZxICogMTEgKyAzMikgPj4gNikgLSBxMCwgIC0odGMgKiA2ID4+IDEpLCAodGMgKiA2 ID4+IDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBRMSA9IHExICsgYXZfY2xpcCgo KG0gKiAzMiArIHJlZnEgKiAzMiArIDMyKSA+PiA2KSAtIHExLCAgLSh0YyAqIDQgPj4gMSksICh0 YyAqIDQgPj4gMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEyID0gcTIgKyBhdl9j bGlwKCgobSAqIDExICsgcmVmcSAqIDUzICsgMzIpID4+IDYpIC0gcTIsICAtKHRjICogMiA+PiAx KSwgKHRjICogMiA+PiAxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1h eF9sZW5fcSA9PSA1KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUTAgPSBxMCArIGF2 X2NsaXAoKChtICogNTggKyByZWZxICogIDYgKyAzMikgPj4gNikgLSBxMCwgLSh0YyAqIDYgPj4g MSksICh0YyAqIDYgPj4gMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFExID0gcTEg KyBhdl9jbGlwKCgobSAqIDQ1ICsgcmVmcSAqIDE5ICsgMzIpID4+IDYpIC0gcTEsIC0odGMgKiA1 ID4+IDEpLCAodGMgKiA1ID4+IDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBRMiA9 IHEyICsgYXZfY2xpcCgoKG0gKiAzMiArIHJlZnEgKiAzMiArIDMyKSA+PiA2KSAtIHEyLCAtKHRj ICogNCA+PiAxKSwgKHRjICogNCA+PiAxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg UTMgPSBxMyArIGF2X2NsaXAoKChtICogMTkgKyByZWZxICogNDUgKyAzMikgPj4gNikgLSBxMywg LSh0YyAqIDMgPj4gMSksICh0YyAqIDMgPj4gMSkpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFE0ID0gcTQgKyBhdl9jbGlwKCgobSAqICA2ICsgcmVmcSAqIDU4ICsgMzIpID4+IDYpIC0g cTQsIC0odGMgKiAyID4+IDEpLCAodGMgKiAyID4+IDEpKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUTAgPSBxMCArIGF2X2Ns aXAoKChtICogNTkgKyByZWZxICogIDUgKyAzMikgPj4gNikgLSBxMCwgLSh0YyAqIDYgPj4gMSks ICh0YyAqIDYgPj4gMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFExID0gcTEgKyBh dl9jbGlwKCgobSAqIDUwICsgcmVmcSAqIDE0ICsgMzIpID4+IDYpIC0gcTEsIC0odGMgKiA1ID4+ IDEpLCAodGMgKiA1ID4+IDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBRMiA9IHEy ICsgYXZfY2xpcCgoKG0gKiA0MSArIHJlZnEgKiAyMyArIDMyKSA+PiA2KSAtIHEyLCAtKHRjICog NCA+PiAxKSwgKHRjICogNCA+PiAxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUTMg PSBxMyArIGF2X2NsaXAoKChtICogMzIgKyByZWZxICogMzIgKyAzMikgPj4gNikgLSBxMywgLSh0 YyAqIDMgPj4gMSksICh0YyAqIDMgPj4gMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg IFE0ID0gcTQgKyBhdl9jbGlwKCgobSAqIDIzICsgcmVmcSAqIDQxICsgMzIpID4+IDYpIC0gcTQs IC0odGMgKiAyID4+IDEpLCAodGMgKiAyID4+IDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRNSA9IHE1ICsgYXZfY2xpcCgoKG0gKiAxNCArIHJlZnEgKiA1MCArIDMyKSA+PiA2KSAt IHE1LCAtKHRjICogMSA+PiAxKSwgKHRjICogMSA+PiAxKSk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUTYgPSBxNiArIGF2X2NsaXAoKChtICogIDUgKyByZWZxICogNTkgKyAzMikgPj4g NikgLSBxNiwgLSh0YyAqIDEgPj4gMSksICh0YyAqIDEgPj4gMSkpOworICAgICAgICAgICAgICAg ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg ICBwaXggKz0geXN0cmlkZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0 dXJuOworCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGQwICsgZDMg PCBiZXRhKSB7CisgICAgICAgIGlmIChtYXhfbGVuX3AgPiAyICYmIG1heF9sZW5fcSA+IDIgJiYK KyAgICAgICAgICAgIGFicyhQMyAtIFAwKSArIGFicyhRMyAtIFEwKSA8IGJldGFfMyAmJiBhYnMo UDAgLSBRMCkgPCB0YzI1ICYmCisgICAgICAgICAgICBhYnMoVFAzIC0gVFAwKSArIGFicyhUUTMg LSBUUTApIDwgYmV0YV8zICYmIGFicyhUUDAgLSBUUTApIDwgdGMyNSAmJgorICAgICAgICAgICAg KGQwIDw8IDEpIDwgYmV0YV8yICYmIChkMyA8PCAxKSA8IGJldGFfMikgeworICAgICAgICAgICAg Ly8gc3Ryb25nIGZpbHRlcmluZworICAgICAgICAgICAgY29uc3QgaW50IHRjMiA9IHRjIDw8IDE7 CisgICAgICAgICAgICBjb25zdCBpbnQgdGMzID0gdGMgKiAzOworICAgICAgICAgICAgZm9yIChk ID0gMDsgZCA8IDQ7IGQrKykgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCBwMyA9IFAzOwor ICAgICAgICAgICAgICAgIGNvbnN0IGludCBwMiA9IFAyOworICAgICAgICAgICAgICAgIGNvbnN0 IGludCBwMSA9IFAxOworICAgICAgICAgICAgICAgIGNvbnN0IGludCBwMCA9IFAwOworICAgICAg ICAgICAgICAgIGNvbnN0IGludCBxMCA9IFEwOworICAgICAgICAgICAgICAgIGNvbnN0IGludCBx MSA9IFExOworICAgICAgICAgICAgICAgIGNvbnN0IGludCBxMiA9IFEyOworICAgICAgICAgICAg ICAgIGNvbnN0IGludCBxMyA9IFEzOworICAgICAgICAgICAgICAgIGlmICghbm9fcCkgeworICAg ICAgICAgICAgICAgICAgICBQMCA9IHAwICsgYXZfY2xpcCgoKHAyICsgMiAqIHAxICsgMiAqIHAw ICsgMiAqIHEwICsgcTEgKyA0KSA+PiAzKSAtIHAwLCAtdGMzLCB0YzMpOworICAgICAgICAgICAg ICAgICAgICBQMSA9IHAxICsgYXZfY2xpcCgoKHAyICsgcDEgKyBwMCArIHEwICsgMikgPj4gMikg LSBwMSwgLXRjMiwgdGMyKTsKKyAgICAgICAgICAgICAgICAgICAgUDIgPSBwMiArIGF2X2NsaXAo KCgyICogcDMgKyAzICogcDIgKyBwMSArIHAwICsgcTAgKyA0KSA+PiAzKSAtIHAyLCAtdGMsIHRj KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFub19xKSB7CisgICAg ICAgICAgICAgICAgICAgIFEwID0gcTAgKyBhdl9jbGlwKCgocDEgKyAyICogcDAgKyAyICogcTAg KyAyICogcTEgKyBxMiArIDQpID4+IDMpIC0gcTAsIC10YzMsIHRjMyk7CisgICAgICAgICAgICAg ICAgICAgIFExID0gcTEgKyBhdl9jbGlwKCgocDAgKyBxMCArIHExICsgcTIgKyAyKSA+PiAyKSAt IHExLCAtdGMyLCB0YzIpOworICAgICAgICAgICAgICAgICAgICBRMiA9IHEyICsgYXZfY2xpcCgo KDIgKiBxMyArIDMgKiBxMiArIHExICsgcTAgKyBwMCArIDQpID4+IDMpIC0gcTIsIC10YywgdGMp OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwaXggKz0geXN0cmlkZTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsgLy8gd2VhayBmaWx0ZXJpbmcKKyAgICAgICAg ICAgIGludCBuZF9wID0gMTsKKyAgICAgICAgICAgIGludCBuZF9xID0gMTsKKyAgICAgICAgICAg IGNvbnN0IGludCB0Y18yID0gdGMgPj4gMTsKKyAgICAgICAgICAgIGlmIChtYXhfbGVuX3AgPiAx ICYmIG1heF9sZW5fcSA+IDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoZHAwICsgZHAzIDwgKChi ZXRhICsgKGJldGEgPj4gMSkpID4+IDMpKQorICAgICAgICAgICAgICAgICAgICBuZF9wID0gMjsK KyAgICAgICAgICAgICAgICBpZiAoZHEwICsgZHEzIDwgKChiZXRhICsgKGJldGEgPj4gMSkpID4+ IDMpKQorICAgICAgICAgICAgICAgICAgICBuZF9xID0gMjsKKyAgICAgICAgICAgIH0KKworICAg ICAgICAgICAgZm9yIChkID0gMDsgZCA8IDQ7IGQrKykgeworICAgICAgICAgICAgICAgIGNvbnN0 IGludCBwMiA9IFAyOworICAgICAgICAgICAgICAgIGNvbnN0IGludCBwMSA9IFAxOworICAgICAg ICAgICAgICAgIGNvbnN0IGludCBwMCA9IFAwOworICAgICAgICAgICAgICAgIGNvbnN0IGludCBx MCA9IFEwOworICAgICAgICAgICAgICAgIGNvbnN0IGludCBxMSA9IFExOworICAgICAgICAgICAg ICAgIGNvbnN0IGludCBxMiA9IFEyOworICAgICAgICAgICAgICAgIGludCBkZWx0YTAgPSAoOSAq IChxMCAtIHAwKSAtIDMgKiAocTEgLSBwMSkgKyA4KSA+PiA0OworICAgICAgICAgICAgICAgIGlm IChhYnMoZGVsdGEwKSA8IDEwICogdGMpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsdGEwID0g YXZfY2xpcChkZWx0YTAsIC10YywgdGMpOworICAgICAgICAgICAgICAgICAgICBpZiAoIW5vX3Ap CisgICAgICAgICAgICAgICAgICAgICAgICBQMCA9IGF2X2NsaXBfcGl4ZWwocDAgKyBkZWx0YTAp OworICAgICAgICAgICAgICAgICAgICBpZiAoIW5vX3EpCisgICAgICAgICAgICAgICAgICAgICAg ICBRMCA9IGF2X2NsaXBfcGl4ZWwocTAgLSBkZWx0YTApOworICAgICAgICAgICAgICAgICAgICBp ZiAoIW5vX3AgJiYgbmRfcCA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlu dCBkZWx0YXAxID0gYXZfY2xpcCgoKChwMiArIHAwICsgMSkgPj4gMSkgLSBwMSArIGRlbHRhMCkg Pj4gMSwgLXRjXzIsIHRjXzIpOworICAgICAgICAgICAgICAgICAgICAgICAgUDEgPSBhdl9jbGlw X3BpeGVsKHAxICsgZGVsdGFwMSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgaWYgKCFub19xICYmIG5kX3EgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBpbnQgZGVsdGFxMSA9IGF2X2NsaXAoKCgocTIgKyBxMCArIDEpID4+IDEpIC0gcTEg LSBkZWx0YTApID4+IDEsIC10Y18yLCB0Y18yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFEx ID0gYXZfY2xpcF9waXhlbChxMSArIGRlbHRhcTEpOworICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBpeCArPSB5c3RyaWRlOworICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBGVU5DKHZ2Y19sb29w X2ZpbHRlcl9jaHJvbWEpKHVpbnQ4X3QgKl9waXgsIGNvbnN0IHB0cmRpZmZfdCAgX3hzdHJpZGUs CisgICAgY29uc3QgcHRyZGlmZl90IF95c3RyaWRlLCBjb25zdCBpbnQgX2JldGEsIGNvbnN0IGlu dCBfdGMsIGNvbnN0IHVpbnQ4X3Qgbm9fcCwgY29uc3QgdWludDhfdCBub19xLAorICAgIGNvbnN0 IGludCBzaGlmdCwgIGludCBtYXhfbGVuX3AsIGludCBtYXhfbGVuX3EpCit7CisgICAgcGl4ZWwg KnBpeCAgICAgICAgPSAocGl4ZWwgKilfcGl4OworICAgIGNvbnN0IHB0cmRpZmZfdCB4c3RyaWRl ID0gX3hzdHJpZGUgLyBzaXplb2YocGl4ZWwpOworICAgIGNvbnN0IHB0cmRpZmZfdCB5c3RyaWRl ID0gX3lzdHJpZGUgLyBzaXplb2YocGl4ZWwpOworICAgIGNvbnN0IGludCBlbmQgID0gc2hpZnQg PyAyIDogNDsKKyAgICBjb25zdCBpbnQgYmV0YSA9IF9iZXRhIDw8IChCSVRfREVQVEggLSA4KTsK KyAgICBjb25zdCBpbnQgYmV0YV8zID0gYmV0YSA+PiAzOworICAgIGNvbnN0IGludCBiZXRhXzIg PSBiZXRhID4+IDI7CisKKyNpZiBCSVRfREVQVEggPCAxMAorICAgIGNvbnN0IGludCB0YyA9IChf dGMgKyAoMSA8PCAoOSAtIEJJVF9ERVBUSCkpKSA+PiAoMTAgLSBCSVRfREVQVEgpOworI2Vsc2UK KyAgICBjb25zdCBpbnQgdGMgPSBfdGMgPDwgKEJJVF9ERVBUSCAtIDEwKTsKKyNlbmRpZgorICAg IGNvbnN0IGludCB0YzI1ID0gKCh0YyAqIDUgKyAxKSA+PiAxKTsKKworICAgIGlmICghbWF4X2xl bl9wIHx8ICFtYXhfbGVuX3EpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtYXhfbGVuX3Eg PT0gMyl7CisgICAgICAgIGNvbnN0IGludCBwMW4gID0gc2hpZnQgPyBGUDEgOiBUUDE7CisgICAg ICAgIGNvbnN0IGludCBwMm4gPSBtYXhfbGVuX3AgPT0gMSA/IHAxbiA6IChzaGlmdCA/IEZQMiA6 IFRQMik7CisgICAgICAgIGNvbnN0IGludCBwMG4gID0gc2hpZnQgPyBGUDAgOiBUUDA7CisgICAg ICAgIGNvbnN0IGludCBxMG4gID0gc2hpZnQgPyBGUTAgOiBUUTA7CisgICAgICAgIGNvbnN0IGlu dCBxMW4gID0gc2hpZnQgPyBGUTEgOiBUUTE7CisgICAgICAgIGNvbnN0IGludCBxMm4gID0gc2hp ZnQgPyBGUTIgOiBUUTI7CisgICAgICAgIGNvbnN0IGludCBwMyAgID0gbWF4X2xlbl9wID09IDEg PyBQMSA6IFAzOworICAgICAgICBjb25zdCBpbnQgcDIgICA9IG1heF9sZW5fcCA9PSAxID8gUDEg OiBQMjsKKyAgICAgICAgY29uc3QgaW50IHAxICAgPSBQMTsKKyAgICAgICAgY29uc3QgaW50IHAw ICAgPSBQMDsKKyAgICAgICAgY29uc3QgaW50IGRwMCAgPSBhYnMocDIgLSAyICogcDEgKyBwMCk7 CisgICAgICAgIGNvbnN0IGludCBkcTAgID0gYWJzKFEyIC0gMiAqIFExICsgUTApOworCisgICAg ICAgIGNvbnN0IGludCBkcDEgPSBhYnMocDJuIC0gMiAqIHAxbiArIHAwbik7CisgICAgICAgIGNv bnN0IGludCBkcTEgPSBhYnMocTJuIC0gMiAqIHExbiArIHEwbik7CisgICAgICAgIGNvbnN0IGlu dCBkMCAgPSBkcDAgKyBkcTA7CisgICAgICAgIGNvbnN0IGludCBkMSAgPSBkcDEgKyBkcTE7CisK KyAgICAgICAgaWYgKGQwICsgZDEgPCBiZXRhKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgcDNu ID0gbWF4X2xlbl9wID09IDEgPyBwMW4gOiAoc2hpZnQgPyBGUDMgOiBUUDMpOworICAgICAgICAg ICAgY29uc3QgaW50IHEzbiA9IHNoaWZ0ID8gRlEzIDogVFEzOworICAgICAgICAgICAgY29uc3Qg aW50IGRzYW0wID0gKGQwIDw8IDEpIDwgYmV0YV8yICYmIChhYnMocDMgLSBwMCkgKyBhYnMoUTAg LSBRMykgICAgIDwgYmV0YV8zKSAmJgorICAgICAgICAgICAgICAgIGFicyhwMCAtIFEwKSAgIDwg dGMyNTsKKyAgICAgICAgICAgIGNvbnN0IGludCBkc2FtMSA9IChkMSA8PCAxKSA8IGJldGFfMiAm JiAoYWJzKHAzbiAtIHAwbikgKyBhYnMocTBuIC0gcTNuKSA8IGJldGFfMykgJiYKKyAgICAgICAg ICAgICAgICBhYnMocDBuIC0gcTBuKSA8IHRjMjU7CisgICAgICAgICAgICBpZiAoIWRzYW0wIHx8 ICFkc2FtMSkKKyAgICAgICAgICAgICAgICBtYXhfbGVuX3AgPSBtYXhfbGVuX3EgPSAxOworICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWF4X2xlbl9wID0gbWF4X2xlbl9xID0gMTsKKyAg ICAgICAgfQorICAgIH0KKworICAgIGlmIChtYXhfbGVuX3AgPT0gMyAmJiBtYXhfbGVuX3EgPT0g MykgeworICAgICAgICAvL3N0cm9uZworICAgICAgICBmb3IgKGludCBkID0gMDsgZCA8IGVuZDsg ZCsrKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgcDMgPSBQMzsKKyAgICAgICAgICAgIGNvbnN0 IGludCBwMiA9IFAyOworICAgICAgICAgICAgY29uc3QgaW50IHAxID0gUDE7CisgICAgICAgICAg ICBjb25zdCBpbnQgcDAgPSBQMDsKKyAgICAgICAgICAgIGNvbnN0IGludCBxMCA9IFEwOworICAg ICAgICAgICAgY29uc3QgaW50IHExID0gUTE7CisgICAgICAgICAgICBjb25zdCBpbnQgcTIgPSBR MjsKKyAgICAgICAgICAgIGNvbnN0IGludCBxMyA9IFEzOworICAgICAgICAgICAgaWYgKCFub19w KSB7CisgICAgICAgICAgICAgICAgUDAgPSBhdl9jbGlwKChwMyArIHAyICsgcDEgKyAyICogcDAg KyBxMCArIHExICsgcTIgKyA0KSA+PiAzLCBwMCAtIHRjLCBwMCArIHRjKTsKKyAgICAgICAgICAg ICAgICBQMSA9IGF2X2NsaXAoKDIgKiBwMyArIHAyICsgMiAqIHAxICsgcDAgKyBxMCArIHExICsg NCkgPj4gMywgcDEgLSB0YywgcDEgKyB0Yyk7CisgICAgICAgICAgICAgICAgUDIgPSBhdl9jbGlw KCgzICogcDMgKyAyICogcDIgKyBwMSArIHAwICsgcTAgKyA0KSA+PiAzLCBwMiAtIHRjLCBwMiAr IHRjICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW5vX3EpIHsKKyAgICAgICAg ICAgICAgICBRMCA9IGF2X2NsaXAoKHAyICsgcDEgKyBwMCArIDIgKiBxMCArIHExICsgcTIgKyBx MyArIDQpID4+IDMsIHEwIC0gdGMsIHEwICsgdGMpOworICAgICAgICAgICAgICAgIFExID0gYXZf Y2xpcCgocDEgKyBwMCArIHEwICsgMiAqIHExICsgcTIgKyAyICogcTMgKyA0KSA+PiAzLCBxMSAt IHRjLCBxMSArIHRjKTsKKyAgICAgICAgICAgICAgICBRMiA9IGF2X2NsaXAoKHAwICsgcTAgKyBx MSArIDIgKiBxMiArIDMgKiBxMyArIDQpID4+IDMsIHEyIC0gdGMsIHEyICsgdGMpOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgcGl4ICs9IHlzdHJpZGU7CisgICAgICAgIH0KKyAgICB9IGVs c2UgaWYgKG1heF9sZW5fcSA9PSAzKSB7CisgICAgICAgIGZvciAoaW50IGQgPSAwOyBkIDwgZW5k OyBkKyspIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBwMSA9IFAxOworICAgICAgICAgICAgY29u c3QgaW50IHAwID0gUDA7CisgICAgICAgICAgICBjb25zdCBpbnQgcTAgPSBRMDsKKyAgICAgICAg ICAgIGNvbnN0IGludCBxMSA9IFExOworICAgICAgICAgICAgY29uc3QgaW50IHEyID0gUTI7Cisg ICAgICAgICAgICBjb25zdCBpbnQgcTMgPSBRMzsKKyAgICAgICAgICAgIGlmICghbm9fcCkgewor ICAgICAgICAgICAgICAgIFAwID0gYXZfY2xpcCgoMyAqIHAxICsgMiAqIHAwICsgcTAgKyBxMSAr IHEyICsgNCkgPj4gMywgcDAgLSB0YywgcDAgKyB0Yyk7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBpZiAoIW5vX3EpIHsKKyAgICAgICAgICAgICAgICBRMCA9IGF2X2NsaXAoKDIgKiBwMSAr IHAwICsgMiAqIHEwICsgcTEgKyBxMiArIHEzICsgNCkgPj4gMywgcTAgLSB0YywgcTAgKyB0Yyk7 CisgICAgICAgICAgICAgICAgUTEgPSBhdl9jbGlwKChwMSArIHAwICsgcTAgKyAyICogcTEgKyBx MiArIDIgKiBxMyArIDQpID4+IDMsIHExIC0gdGMsIHExICsgdGMpOworICAgICAgICAgICAgICAg IFEyID0gYXZfY2xpcCgocDAgKyBxMCArIHExICsgMiAqIHEyICsgMyAqIHEzICsgNCkgPj4gMywg cTIgLSB0YywgcTIgKyB0Yyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwaXggKz0geXN0 cmlkZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vd2VhaworICAgICAgICBm b3IgKGludCBkID0gMDsgZCA8IGVuZDsgZCsrKSB7CisgICAgICAgICAgICBpbnQgZGVsdGEwOwor ICAgICAgICAgICAgY29uc3QgaW50IHAxID0gUDE7CisgICAgICAgICAgICBjb25zdCBpbnQgcDAg PSBQMDsKKyAgICAgICAgICAgIGNvbnN0IGludCBxMCA9IFEwOworICAgICAgICAgICAgY29uc3Qg aW50IHExID0gUTE7CisgICAgICAgICAgICBkZWx0YTAgPSBhdl9jbGlwKCgoKHEwIC0gcDApICog NCkgKyBwMSAtIHExICsgNCkgPj4gMywgLXRjLCB0Yyk7CisgICAgICAgICAgICBpZiAoIW5vX3Ap CisgICAgICAgICAgICAgICAgUDAgPSBhdl9jbGlwX3BpeGVsKHAwICsgZGVsdGEwKTsKKyAgICAg ICAgICAgIGlmICghbm9fcSkKKyAgICAgICAgICAgICAgICBRMCA9IGF2X2NsaXBfcGl4ZWwocTAg LSBkZWx0YTApOworICAgICAgICAgICAgcGl4ICs9IHlzdHJpZGU7CisgICAgICAgIH0KKyAgICB9 Cit9CisKK3N0YXRpYyB2b2lkIEZVTkModnZjX2hfbG9vcF9maWx0ZXJfY2hyb21hKSh1aW50OF90 ICpwaXgsIHB0cmRpZmZfdCBzdHJpZGUsCisgICAgaW50IGJldGEsIGludDMyX3QgdGMsIHVpbnQ4 X3Qgbm9fcCwgdWludDhfdCBub19xLCBpbnQgc2hpZnQsIGludCBtYXhfbGVuX3AsIGludCBtYXhf bGVuX3EpCit7CisgICAgRlVOQyh2dmNfbG9vcF9maWx0ZXJfY2hyb21hKShwaXgsIHN0cmlkZSwg c2l6ZW9mKHBpeGVsKSwgYmV0YSwgdGMsIG5vX3AsIG5vX3EsIHNoaWZ0LCBtYXhfbGVuX3AsIG1h eF9sZW5fcSk7Cit9CisKK3N0YXRpYyB2b2lkIEZVTkModnZjX3ZfbG9vcF9maWx0ZXJfY2hyb21h KSh1aW50OF90ICpwaXgsIHB0cmRpZmZfdCBzdHJpZGUsCisgICAgaW50IGJldGEsIGludDMyX3Qg dGMsIHVpbnQ4X3Qgbm9fcCwgdWludDhfdCBub19xLCBpbnQgc2hpZnQsIGludCBtYXhfbGVuX3As IGludCBtYXhfbGVuX3EpCit7CisgICAgRlVOQyh2dmNfbG9vcF9maWx0ZXJfY2hyb21hKShwaXgs IHNpemVvZihwaXhlbCksIHN0cmlkZSwgYmV0YSwgdGMsIG5vX3AsIG5vX3EsIHNoaWZ0LCBtYXhf bGVuX3AsIG1heF9sZW5fcSk7Cit9CisKK3N0YXRpYyB2b2lkIEZVTkModnZjX2hfbG9vcF9maWx0 ZXJfbHVtYSkodWludDhfdCAqcGl4LCBwdHJkaWZmX3Qgc3RyaWRlLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJldGEsIGludDMyX3QgdGMsIHVpbnQ4X3Qg bm9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qg bm9fcSwgdWludDhfdCBtYXhfbGVuX3AsIHVpbnQ4X3QgbWF4X2xlbl9xLCBpbnQgaG9yX2N0dV9l ZGdlKQoreworICAgIEZVTkModnZjX2xvb3BfZmlsdGVyX2x1bWEpKHBpeCwgc3RyaWRlLCBzaXpl b2YocGl4ZWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXRhLCB0Yywgbm9f cCwgbm9fcSwgbWF4X2xlbl9wLCBtYXhfbGVuX3EsIGhvcl9jdHVfZWRnZSk7Cit9CisKK3N0YXRp YyB2b2lkIEZVTkModnZjX3ZfbG9vcF9maWx0ZXJfbHVtYSkodWludDhfdCAqcGl4LCBwdHJkaWZm X3Qgc3RyaWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IGJldGEsIGludDMyX3QgdGMsIHVpbnQ4X3Qgbm9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgbm9fcSwgdWludDhfdCBtYXhfbGVuX3AsIHVpbnQ4 X3QgbWF4X2xlbl9xLCBpbnQgaG9yX2N0dV9lZGdlKQoreworICAgIEZVTkModnZjX2xvb3BfZmls dGVyX2x1bWEpKHBpeCwgc2l6ZW9mKHBpeGVsKSwgc3RyaWRlLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBiZXRhLCB0Yywgbm9fcCwgbm9fcSwgbWF4X2xlbl9wLCBtYXhfbGVuX3Es IGhvcl9jdHVfZWRnZSk7Cit9CisKK3N0YXRpYyBpbnQgRlVOQyh2dmNfbG9vcF9sYWRmX2xldmVs KShjb25zdCB1aW50OF90ICpfcGl4LCBjb25zdCBwdHJkaWZmX3QgX3hzdHJpZGUsIGNvbnN0IHB0 cmRpZmZfdCBfeXN0cmlkZSkKK3sKKyAgICBjb25zdCBwaXhlbCAqcGl4ICAgICAgICA9IChwaXhl bCAqKV9waXg7CisgICAgY29uc3QgcHRyZGlmZl90IHhzdHJpZGUgPSBfeHN0cmlkZSAvIHNpemVv ZihwaXhlbCk7CisgICAgY29uc3QgcHRyZGlmZl90IHlzdHJpZGUgPSBfeXN0cmlkZSAvIHNpemVv ZihwaXhlbCk7CisgICAgcmV0dXJuIChQMCArIFRQMCArIFEwICsgVFEwKSA+PiAyOworfQorCitz dGF0aWMgaW50IEZVTkModnZjX2hfbG9vcF9sYWRmX2xldmVsKShjb25zdCB1aW50OF90ICpwaXgs IHB0cmRpZmZfdCBzdHJpZGUpCit7CisgICAgcmV0dXJuIEZVTkModnZjX2xvb3BfbGFkZl9sZXZl bCkocGl4LCBzdHJpZGUsIHNpemVvZihwaXhlbCkpOworfQorCitzdGF0aWMgaW50IEZVTkModnZj X3ZfbG9vcF9sYWRmX2xldmVsKShjb25zdCB1aW50OF90ICpwaXgsIHB0cmRpZmZfdCBzdHJpZGUp Cit7CisgICAgcmV0dXJuIEZVTkModnZjX2xvb3BfbGFkZl9sZXZlbCkocGl4LCBzaXplb2YocGl4 ZWwpLCBzdHJpZGUpOworfQorCisjdW5kZWYgUDcKKyN1bmRlZiBQNgorI3VuZGVmIFA1CisjdW5k ZWYgUDQKKyN1bmRlZiBQMworI3VuZGVmIFAyCisjdW5kZWYgUDEKKyN1bmRlZiBQMAorI3VuZGVm IFEwCisjdW5kZWYgUTEKKyN1bmRlZiBRMgorI3VuZGVmIFEzCisjdW5kZWYgUTQKKyN1bmRlZiBR NQorI3VuZGVmIFE2CisjdW5kZWYgUTcKKworI3VuZGVmIFRQNworI3VuZGVmIFRQNgorI3VuZGVm IFRQNQorI3VuZGVmIFRQNAorI3VuZGVmIFRQMworI3VuZGVmIFRQMgorI3VuZGVmIFRQMQorI3Vu ZGVmIFRQMAorI3VuZGVmIFRRMAorI3VuZGVmIFRRMQorI3VuZGVmIFRRMgorI3VuZGVmIFRRMwor I3VuZGVmIFRRNAorI3VuZGVmIFRRNQorI3VuZGVmIFRRNgorI3VuZGVmIFRRNworCitzdGF0aWMg dm9pZCBGVU5DKGZmX3Z2Y19sbWNzX2RzcF9pbml0KShWVkNMTUNTRFNQQ29udGV4dCAqY29uc3Qg bG1jcykKK3sKKyAgICBsbWNzLT5maWx0ZXIgPSBGVU5DKGxtY3NfZmlsdGVyX2x1bWEpOworfQor CitzdGF0aWMgdm9pZCBGVU5DKGZmX3Z2Y19sZl9kc3BfaW5pdCkoVlZDTEZEU1BDb250ZXh0ICpj b25zdCBsZikKK3sKKyAgICBsZi0+bGFkZl9sZXZlbFswXSAgICAgID0gRlVOQyh2dmNfaF9sb29w X2xhZGZfbGV2ZWwpOworICAgIGxmLT5sYWRmX2xldmVsWzFdICAgICAgPSBGVU5DKHZ2Y192X2xv b3BfbGFkZl9sZXZlbCk7CisgICAgbGYtPmZpbHRlcl9sdW1hWzBdICAgICA9IEZVTkModnZjX2hf bG9vcF9maWx0ZXJfbHVtYSk7CisgICAgbGYtPmZpbHRlcl9sdW1hWzFdICAgICA9IEZVTkModnZj X3ZfbG9vcF9maWx0ZXJfbHVtYSk7CisgICAgbGYtPmZpbHRlcl9jaHJvbWFbMF0gICA9IEZVTkMo dnZjX2hfbG9vcF9maWx0ZXJfY2hyb21hKTsKKyAgICBsZi0+ZmlsdGVyX2Nocm9tYVsxXSAgID0g RlVOQyh2dmNfdl9sb29wX2ZpbHRlcl9jaHJvbWEpOworfQorCitzdGF0aWMgdm9pZCBGVU5DKGZm X3Z2Y19zYW9fZHNwX2luaXQpKFZWQ1NBT0RTUENvbnRleHQgKmNvbnN0IHNhbykKK3sKKyAgICBm b3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHNhby0+YmFuZF9maWx0ZXIpOyBpKysp CisgICAgICAgIHNhby0+YmFuZF9maWx0ZXJbaV0gPSBGVU5DKHNhb19iYW5kX2ZpbHRlcik7Cisg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhzYW8tPmVkZ2VfZmlsdGVyKTsg aSsrKQorICAgICAgICBzYW8tPmVkZ2VfZmlsdGVyW2ldID0gRlVOQyhzYW9fZWRnZV9maWx0ZXIp OworICAgIHNhby0+ZWRnZV9yZXN0b3JlWzBdID0gRlVOQyhzYW9fZWRnZV9yZXN0b3JlXzApOwor ICAgIHNhby0+ZWRnZV9yZXN0b3JlWzFdID0gRlVOQyhzYW9fZWRnZV9yZXN0b3JlXzEpOworfQor CitzdGF0aWMgdm9pZCBGVU5DKGZmX3Z2Y19hbGZfZHNwX2luaXQpKFZWQ0FMRkRTUENvbnRleHQg KmNvbnN0IGFsZikKK3sKKyAgICBhbGYtPmZpbHRlcltMVU1BXSAgICA9IEZVTkMoYWxmX2ZpbHRl cl9sdW1hKTsKKyAgICBhbGYtPmZpbHRlcltDSFJPTUFdICA9IEZVTkMoYWxmX2ZpbHRlcl9jaHJv bWEpOworICAgIGFsZi0+ZmlsdGVyX2NjICAgICAgID0gRlVOQyhhbGZfZmlsdGVyX2NjKTsKKyAg ICBhbGYtPmNsYXNzaWZ5ICAgICAgICA9IEZVTkMoYWxmX2NsYXNzaWZ5KTsKKyAgICBhbGYtPnJl Y29uX2NvZWZmX2FuZF9jbGlwID0gRlVOQyhhbGZfcmVjb25fY29lZmZfYW5kX2NsaXApOworfQot LSAKMi4yNS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBz Oi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3Jp YmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBl Zy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==