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 161D2460A8 for ; Sat, 2 Sep 2023 16:08:43 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A53AE68C7BB; Sat, 2 Sep 2023 19:08:27 +0300 (EEST) Received: from APC01-PSA-obe.outbound.protection.outlook.com (mail-psaapc01olkn2069.outbound.protection.outlook.com [40.92.52.69]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C795B68C778 for ; Sat, 2 Sep 2023 19:08:20 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JRgZv/aXIl4UgEwE5WCPG1gWEyAkF5NtG5EirlgnRk4acAy9U7XKyXZcApwiN8SDnpFR0jTVKJnMOtpVzMj0ysBZ1bbiZ686z8j8PTlPDoMlG6ZjV/BBf3LOiKLZ0OBkM51bC3f/MgLtuLxLV8iVnLNCD36cn79V+VqrtzVWDKc5NCC4LAgRQy5/H+bWTDX1VKKU9c2FhoN5EeCvlA9IjkUOwkNo4Rd8kvBw5RLH0swfP4+eyLBCit4K3VaaMGp8DTElzPWD5dWmgkiUrAiZCP5wQEUTVkwUmJp1CgQxBKBHHCl0t/2701QdZxnnXc7KdqEiyHhc6LEqcTdeeNG4UQ== 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=zevRXOORVfqYvpRbfzAuAX+wpQXniCsM3o6uXo4vbu4=; b=jRFDQ6RLlC2/UvZE5PmySDqkfXbx+VhH61TX1pY2EZigTqccpJ3VtDXbvgEQkh5hF8B9IJbn9h03j6tUhrg27cWhZE64N/HL9T1TBek/Yb0gQrlbrSdkq75fj3lwag5wbD0QDu8dIzm753mnxbuy6DKavULEhJUWRmTv9y/cJUr5BoGt5ssIDtkPY6TvCrWsemiySPQ7JJO20DOyA1nCVb89qS1vj561XatfaBP/k7c+gKU8RmoSvp1Sedb8AfzUIDrFDQtqI5cq6NotGZjiyqJxBpeNCLwwrUCOars0h4hq0qY55QtOwKM3FO5fAknN96umHxHQTiYzc0S4BYh7bA== 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=zevRXOORVfqYvpRbfzAuAX+wpQXniCsM3o6uXo4vbu4=; b=G8yK/CtBWrxVTYdAGSsHXPdiM3e3cbJYOrR+ANlw9OsLTkG51GPfsOgWcGHp767BZAsbgt8dI1Xjhp2ITonbKZYvqhxi0lMCkk0SO8WspVeG9Icx3fGWb659nGT+ZTYrJopIgYhHdnTqbY5a/gcADmJ1xFDi6rD51Bf+NE3rZFw9j8UyRr+dHN+hRaOY4+CcStWtMobPuw7TUa87TjhgfAiE84lMNADcCXgAfleY4U+/dpovzq/O9PNf/hqsDxx4l4aNJBSjZOwgBGPtynk/vZjMiKmWaJCgp+l1MEXF8pdG72yF9iIiz1oBSGuU7vctCJb/YyLz9vcc0CT0vj9OOQ== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by TYZPR06MB4030.apcprd06.prod.outlook.com (2603:1096:400:24::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6745.27; Sat, 2 Sep 2023 16:08:11 +0000 Received: from TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::f1a4:bbff:7592:ee31]) by TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::f1a4:bbff:7592:ee31%5]) with mapi id 15.20.6745.030; Sat, 2 Sep 2023 16:08:11 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sun, 3 Sep 2023 00:07:30 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230902160741.19197-1-nuomi2021@gmail.com> References: <20230902160741.19197-1-nuomi2021@gmail.com> X-TMN: [FDEg6GnV+m+jy/HDeCcC3t7SjhFKuuwW] X-ClientProxiedBy: TYCP286CA0242.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:456::9) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20230902160741.19197-3-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|TYZPR06MB4030:EE_ X-MS-Office365-Filtering-Correlation-Id: 19b5d37e-a492-49b5-4831-08dbabcece50 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QP75G6X5lasMf8E1FJ5S0aCvRA4ZuLRjSoH3kpuvZig9sQ0b6/It+vfUnDhpS8OJFJg0ohRd+isjkO8PZO5IOQKm3ykHFcv+XrPnfBu6bY9P97rNUvZS4XCos4r0IKMuc/HfVxnKA5W276Y0EmVfNcyJxYlqjq7pZMVl2hADGpZxI5E2dXWiG4dmIonbrGtXXA0uTgPSZokdu21qyorH/74n3/EwI+QANoceCGNgXsUNu/oKk+xB1gRb/kfAwiOu1wGcZt7VwvLZzJ1d6YRgt9SPfip94IAqjt6ASLFT6xyb9ICeYFdbFkUdAVVrnvQLwWEBPQH8VSmEfHK1VxyegUmBPDThvHyNDNXuI4GCB7+KLgxBeg9aOAKRQFRehaXYRThzhPU/PFWDcq9Q29dZSeZoYnLYPBwuIyJrUVOur/+jRacgT2n9B4SRAQ6/xG5GpNyaHRZOgIRA+aX0q2K7L8Gg7WLYEukYwib6rP+NIn0XCbZqddCFZjvjstjYFmbUzxWOf7SrMjdIi5P+G0aMh5uVLVdGiOPtdndOTu9wNWNgqlBIv28JZNFgvuCelU8dsWTmYn1SUGefWlnEHrOZsJGbSnOWrirWcAlXV0UO5+iALxWaMUZBbw7L4JJdOXQA X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?T2xJU3p3THEyKzJrVjhsUEhTdnlvTWxFRWxTbGV3aDVVOVNSd29VRWE4S09H?= =?utf-8?B?dEQ1M1RNMHgrYnllOUJtNU4yZWM3QXNNdnRRTHVsdnBFYnh6TldYa3kwK1Fz?= =?utf-8?B?TUovVHdoRHAxbzVlMW9rY0ZQZzFWU2pxcEhjMTVjZmpjSWhNeklodldOTURS?= =?utf-8?B?ai9xV3k0a1VjUWhLZXB0cmJYeSsxb2UxSWpxNlcrZWw2NDd5TVNXdk5xT3BJ?= =?utf-8?B?U2RFNTRUTzdKdGlLeE0yQ0ZIQWsrVk9vUlZnSVlTTURRNUF1aktGL3N2ZDJ4?= =?utf-8?B?bFlSUGxJVWdZQWZUcCtDN2FTVnNGV2ZNRjBhL3hJNlRwWE93dXRucHNlUFRj?= =?utf-8?B?eHc0RFVCMEMyaFliZlZVcjV2YlBJMFNFdXJuV0ZRQ1Flb3l3NVNYYkJCaGwr?= =?utf-8?B?NytxTm9pb0pRM3lmL1pZUVNmSW12RERHNHJQekJkeEhGYVFobmR1VjZlcUw4?= =?utf-8?B?cFJhb0tnMERqWUZ1ZmhTdEhuWmtMZXFkb1cyU0YzcG9iRFh2a01kcUdESko4?= =?utf-8?B?dEdJNnpFYXkySTlTb2c0bkc4TmtLQnFRZWVza2UweXcxcW15RVFLNUNCMm1m?= =?utf-8?B?bktadStNOGhlNUFPQVQwNE9WQlZ3MzlVTldTNno2OVhUQXIxcjFyMjNMTTZw?= =?utf-8?B?aXg3d2JMT2lENkc5bzBYT2kwSWJsTnk5L3JUMzV3VTIyQVVPZjhiNXBFTDkw?= =?utf-8?B?Ujl0dDliQ2Z5R1VnaCs3L2cvcFhhYmN2N0p5Y0FBV2x5OEdqYU8xNEhPclB1?= =?utf-8?B?TGltNEhDekpmLzd4aVhxT3dkM09CZWU2czFYb0UwblR4RDJxVkFsYTkvczJr?= =?utf-8?B?QUZ6Vlg5dnc3TnBZanNaNlIxMHFic0hhMTJDY08veHQ2Y2F3VVRmeUMzUG9F?= =?utf-8?B?ZmJKS2VwYi9hQzJyOTZnRy9zL3BxSEhienJlbnJUdVh6c2JsQlhuWnYrU2pU?= =?utf-8?B?Z2tsUk15RlpYNVdIZ3F2blFMcWVXbnFlRXU3T3J6ek5QaGc2bmVwT0gwVk9X?= =?utf-8?B?Tm1LbGpBczZudjE1NHV6Y0tQT2JacXJaYVBpcjdrbmlLd0o2WEdjb2lUKzZE?= =?utf-8?B?akJvQlZLNnFXZi8rOHlmeUZBeWpzaXYvYTFpeVo3bG1FY05KT2NwVVpVN0Z1?= =?utf-8?B?emJTNUlRZjREUnFxUU9JdVdJdDBnenhPeUJhMXNSN1BGNm1Dclkxc2huMmgw?= =?utf-8?B?VVk2RUEyc2Nlb2RrdWJXMzIxemtjTENmTlNJYVZXeWlpTzg0NW5salQ5Ukh5?= =?utf-8?B?cUlZZStiNHJ3S2x4SVNiM2JPNVNSWnVPdHlZanJNUWtuN2E2aHFnTTFYbmov?= =?utf-8?B?UzdTQWdIY2F3ODV3Ti96V0RVSmliekVod2FQR0VCWnQzUndWbmdEMU9RSUVU?= =?utf-8?B?ekVQdGJrMGc2WFBhV0RucHpSMkw5OXVsbUJ3bWhiNDBPRi9zM1lGTXpNMnpU?= =?utf-8?B?ZFhoT2IxVEJRcmFWS2o4MGxpNCt6VFlZNEZBR2Z5UWE1SUp4Z2NkbUdlZHMy?= =?utf-8?B?ZGIyaXpxL3FRd3RvYzJ1TldvT0NaRFBUVHA1R2kzVkVDa1hQR09QRWhjN2pS?= =?utf-8?B?aXBZamROcVVGYUJEeGFaV3QrVWZWZ1hNSEhRM1MwMnBHZnZVSzFQWEp3ZllO?= =?utf-8?B?MnRIdS85TGd2TGMybDlIZGxPZlpjNlpFZHJmUHo0SXlZVlFuekUzNnZ1dDJK?= =?utf-8?Q?rOEJrnuoHmfjPWzauVeF?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 19b5d37e-a492-49b5-4831-08dbabcece50 X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Sep 2023 16:08:11.8019 (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: TYZPR06MB4030 Subject: [FFmpeg-devel] [PATCH v3 03/14] vvcdec: add parameter parser for sps, pps, ph, sh 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: LS0tCiBsaWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZSB8ICAgIDMgKy0KIGxpYmF2Y29kZWMvdnZjL3Z2 Y19wcy5jIHwgMTMyNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxp YmF2Y29kZWMvdnZjL3Z2Y19wcy5oIHwgIDI3NCArKysrKysrKwogbGliYXZjb2RlYy92dmMvdnZj ZGVjLmggfCAgICA0ICsKIDQgZmlsZXMgY2hhbmdlZCwgMTYwNSBpbnNlcnRpb25zKCspLCAxIGRl bGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92dmMvdnZjX3BzLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL3Z2Yy92dmNfcHMuaAoKZGlmZiAtLWdpdCBhL2xp YmF2Y29kZWMvdnZjL01ha2VmaWxlIGIvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUKaW5kZXggMTA0 YjE3ZGIyOS4uM2VhNDMwZjYxYSAxMDA2NDQKLS0tIGEvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUK KysrIGIvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUKQEAgLTIsNCArMiw1IEBAIGNsZWFuOjoKIAkk KFJNKSAkKENMRUFOU1VGRklYRVM6JT1saWJhdmNvZGVjL3Z2Yy8lKQogCiBPQkpTLSQoQ09ORklH X1ZWQ19ERUNPREVSKSAgICAgICAgICArPSAgdnZjL3Z2Y2RlYy5vICAgICAgICAgICAgXAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2Yy92dmNfZGF0YS5vCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19kYXRhLm8gICAgICAg ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2Yy92dmNfcHMu bwpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMvdnZjX3BzLmMgYi9saWJhdmNvZGVjL3Z2Yy92 dmNfcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5jMTgwYTQwMWYw Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYXZjb2RlYy92dmMvdnZjX3BzLmMKQEAgLTAsMCArMSwx MzI1IEBACisvKgorICogVlZDIHBhcmFtZXRlciBzZXQgcGFyc2VyCisgKgorICogQ29weXJpZ2h0 IChDKSAyMDIzIE51byBNaQorICogQ29weXJpZ2h0IChDKSAyMDIyIFh1IE11CisgKgorICogVGhp cyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv biAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z ZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor ICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z dG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisjaW5jbHVkZSAibGliYXZjb2RlYy9jYnNfaDI2 Ni5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9pbWd1dGlscy5oIgorI2luY2x1ZGUgInZ2Y19kYXRh LmgiCisjaW5jbHVkZSAidnZjX3BzLmgiCisjaW5jbHVkZSAidnZjZGVjLmgiCisKKwordHlwZWRl ZiB2b2lkICgqZnJlZV9mbikodWludDhfdCAqZGF0YSk7CisKK3N0YXRpYyB2b2lkIHBzX2ZyZWUo dm9pZCAqb3BhcXVlLCB1aW50OF90ICpkYXRhKQoreworICAgIGZyZWVfZm4gZnJlZSA9IChmcmVl X2ZuKW9wYXF1ZTsKKworICAgIGZyZWUoZGF0YSk7CisgICAgYXZfZnJlZXAoJmRhdGEpOworfQor CitzdGF0aWMgQVZCdWZmZXJSZWYqIHBzX2FsbG9jKHNpemVfdCBzaXplLCBmcmVlX2ZuIGZyZWUp Cit7CisgICAgQVZCdWZmZXJSZWYgKmJ1ZjsKKyAgICB1aW50OF90ICpkYXRhID0gYXZfbWFsbG9j eihzaXplKTsKKworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBi dWYgPSBhdl9idWZmZXJfY3JlYXRlKGRhdGEsIHNpemUsIHBzX2ZyZWUsIGZyZWUsIDApOworICAg IGlmICghYnVmKQorICAgICAgICBhdl9mcmVlcCgmZGF0YSk7CisKKyAgICByZXR1cm4gYnVmOwor fQorCitzdGF0aWMgaW50IHNwc19tYXBfcGl4ZWxfZm9ybWF0KFZWQ1NQUyAqc3BzLCB2b2lkICps b2dfY3R4KQoreworICAgIGNvbnN0IEgyNjZSYXdTUFMgKnIgPSBzcHMtPnI7CisgICAgY29uc3Qg QVZQaXhGbXREZXNjcmlwdG9yICpkZXNjOworCisgICAgc3dpdGNoIChzcHMtPmJpdF9kZXB0aCkg eworICAgIGNhc2UgODoKKyAgICAgICAgaWYgKHItPnNwc19jaHJvbWFfZm9ybWF0X2lkYyA9PSAw KSBzcHMtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX0dSQVk4OworICAgICAgICBpZiAoci0+c3BzX2No cm9tYV9mb3JtYXRfaWRjID09IDEpIHNwcy0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDIwUDsK KyAgICAgICAgaWYgKHItPnNwc19jaHJvbWFfZm9ybWF0X2lkYyA9PSAyKSBzcHMtPnBpeF9mbXQg PSBBVl9QSVhfRk1UX1lVVjQyMlA7CisgICAgICAgIGlmIChyLT5zcHNfY2hyb21hX2Zvcm1hdF9p ZGMgPT0gMykgc3BzLT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0NDRQOworICAgICAgIGJyZWFr OworICAgIGNhc2UgMTA6CisgICAgICAgIGlmIChyLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgPT0g MCkgc3BzLT5waXhfZm10ID0gQVZfUElYX0ZNVF9HUkFZMTA7CisgICAgICAgIGlmIChyLT5zcHNf Y2hyb21hX2Zvcm1hdF9pZGMgPT0gMSkgc3BzLT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0MjBQ MTA7CisgICAgICAgIGlmIChyLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgPT0gMikgc3BzLT5waXhf Zm10ID0gQVZfUElYX0ZNVF9ZVVY0MjJQMTA7CisgICAgICAgIGlmIChyLT5zcHNfY2hyb21hX2Zv cm1hdF9pZGMgPT0gMykgc3BzLT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0NDRQMTA7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgMTI6CisgICAgICAgIGlmIChyLT5zcHNfY2hyb21hX2Zvcm1h dF9pZGMgPT0gMCkgc3BzLT5waXhfZm10ID0gQVZfUElYX0ZNVF9HUkFZMTI7CisgICAgICAgIGlm IChyLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgPT0gMSkgc3BzLT5waXhfZm10ID0gQVZfUElYX0ZN VF9ZVVY0MjBQMTI7CisgICAgICAgIGlmIChyLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgPT0gMikg c3BzLT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0MjJQMTI7CisgICAgICAgIGlmIChyLT5zcHNf Y2hyb21hX2Zvcm1hdF9pZGMgPT0gMykgc3BzLT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0NDRQ MTI7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGF2X2xvZyhsb2dfY3R4 LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAiVGhlIGZvbGxvd2luZyBiaXQtZGVwdGhz IGFyZSBjdXJyZW50bHkgc3BlY2lmaWVkOiA4LCAxMCwgMTIgYml0cywgIgorICAgICAgICAgICAg ICAgImNocm9tYV9mb3JtYXRfaWRjIGlzICVkLCBkZXB0aCBpcyAlZFxuIiwKKyAgICAgICAgICAg ICAgIHItPnNwc19jaHJvbWFfZm9ybWF0X2lkYywgc3BzLT5iaXRfZGVwdGgpOworICAgICAgICBy ZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9CisKKyAgICBkZXNjID0gYXZfcGl4X2Zt dF9kZXNjX2dldChzcHMtPnBpeF9mbXQpOworICAgIGlmICghZGVzYykKKyAgICAgICAgcmV0dXJu IEFWRVJST1IoRUlOVkFMKTsKKworICAgIHNwcy0+aHNoaWZ0WzBdID0gc3BzLT52c2hpZnRbMF0g PSAwOworICAgIHNwcy0+aHNoaWZ0WzJdID0gc3BzLT5oc2hpZnRbMV0gPSBkZXNjLT5sb2cyX2No cm9tYV93OworICAgIHNwcy0+dnNoaWZ0WzJdID0gc3BzLT52c2hpZnRbMV0gPSBkZXNjLT5sb2cy X2Nocm9tYV9oOworCisgICAgc3BzLT5waXhlbF9zaGlmdCA9IHNwcy0+Yml0X2RlcHRoID4gODsK KworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNwc19iaXRfZGVwdGgoVlZDU1BTICpz cHMsIHZvaWQgKmxvZ19jdHgpCit7CisgICAgY29uc3QgSDI2NlJhd1NQUyAqciA9IHNwcy0+cjsK KworICAgIHNwcy0+Yml0X2RlcHRoID0gci0+c3BzX2JpdGRlcHRoX21pbnVzOCArIDg7CisgICAg c3BzLT5xcF9iZF9vZmZzZXQgPSA2ICogKHNwcy0+Yml0X2RlcHRoIC0gOCk7CisgICAgc3BzLT5s b2cyX3RyYW5zZm9ybV9yYW5nZSA9CisgICAgICAgIHItPnNwc19leHRlbmRlZF9wcmVjaXNpb25f ZmxhZyA/IEZGTUFYKDE1LCBGRk1JTigyMCwgc3BzLT5iaXRfZGVwdGggKyA2KSkgOiAxNTsKKyAg ICByZXR1cm4gc3BzX21hcF9waXhlbF9mb3JtYXQoc3BzLCBsb2dfY3R4KTsKK30KKworc3RhdGlj IGludCBzcHNfY2hyb21hX3FwX3RhYmxlKFZWQ1NQUyAqc3BzKQoreworICAgIGNvbnN0IEgyNjZS YXdTUFMgKnIgPSBzcHMtPnI7CisgICAgY29uc3QgaW50IG51bV9xcF90YWJsZXMgPSByLT5zcHNf c2FtZV9xcF90YWJsZV9mb3JfY2hyb21hX2ZsYWcgPworICAgICAgICAxIDogKHItPnNwc19qb2lu dF9jYmNyX2VuYWJsZWRfZmxhZyA/IDMgOiAyKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg bnVtX3FwX3RhYmxlczsgaSsrKSB7CisgICAgICAgIGludCBudW1fcG9pbnRzX2luX3FwX3RhYmxl OworICAgICAgICBpbnQ4X3QgcXBfaW5bVlZDX01BWF9QT0lOVFNfSU5fUVBfVEFCTEVdLCBxcF9v dXRbVlZDX01BWF9QT0lOVFNfSU5fUVBfVEFCTEVdOworICAgICAgICB1bnNpZ25lZCBpbnQgZGVs dGFfcXBfaW5bVlZDX01BWF9QT0lOVFNfSU5fUVBfVEFCTEVdOworICAgICAgICBpbnQgb2ZmID0g c3BzLT5xcF9iZF9vZmZzZXQ7CisKKyAgICAgICAgbnVtX3BvaW50c19pbl9xcF90YWJsZSA9IHIt PnNwc19udW1fcG9pbnRzX2luX3FwX3RhYmxlX21pbnVzMVtpXSArIDE7CisKKyAgICAgICAgcXBf b3V0WzBdID0gcXBfaW5bMF0gPSByLT5zcHNfcXBfdGFibGVfc3RhcnRfbWludXMyNltpXSArIDI2 OworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG51bV9wb2ludHNfaW5fcXBfdGFibGU7IGor KyApIHsKKyAgICAgICAgICAgIGRlbHRhX3FwX2luW2pdID0gci0+c3BzX2RlbHRhX3FwX2luX3Zh bF9taW51czFbaV1bal0gKyAxOworICAgICAgICAgICAgcXBfaW5baisxXSA9IHFwX2luW2pdICsg ZGVsdGFfcXBfaW5bal07CisgICAgICAgICAgICBxcF9vdXRbaisxXSA9IHFwX291dFtqXSArIChy LT5zcHNfZGVsdGFfcXBfaW5fdmFsX21pbnVzMVtpXVtqXSBeIHItPnNwc19kZWx0YV9xcF9kaWZm X3ZhbFtpXVtqXSk7CisgICAgICAgIH0KKyAgICAgICAgc3BzLT5jaHJvbWFfcXBfdGFibGVbaV1b cXBfaW5bMF0gKyBvZmZdID0gcXBfb3V0WzBdOworICAgICAgICBmb3IgKGludCBrID0gcXBfaW5b MF0gLSAxICsgb2ZmOyBrID49IDA7IGstLSkKKyAgICAgICAgICAgIHNwcy0+Y2hyb21hX3FwX3Rh YmxlW2ldW2tdID0gYXZfY2xpcChzcHMtPmNocm9tYV9xcF90YWJsZVtpXVtrKzFdLTEsIC1vZmYs IDYzKTsKKworICAgICAgICBmb3IgKGludCBqICA9IDA7IGogPCBudW1fcG9pbnRzX2luX3FwX3Rh YmxlOyBqKyspIHsKKyAgICAgICAgICAgIGludCBzaCA9IGRlbHRhX3FwX2luW2pdID4+IDE7Cisg ICAgICAgICAgICBmb3IgKGludCBrID0gcXBfaW5bal0gKyAxICsgb2ZmLCBtID0gMTsgayA8PSBx cF9pbltqKzFdICsgb2ZmOyBrKyssIG0rKykgeworICAgICAgICAgICAgICAgIHNwcy0+Y2hyb21h X3FwX3RhYmxlW2ldW2tdID0gc3BzLT5jaHJvbWFfcXBfdGFibGVbaV1bcXBfaW5bal0gKyBvZmZd ICsKKyAgICAgICAgICAgICAgICAgICAgKChxcF9vdXRbaisxXSAtIHFwX291dFtqXSkgKiBtICsg c2gpIC8gZGVsdGFfcXBfaW5bal07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg Zm9yIChpbnQgayA9IHFwX2luW251bV9wb2ludHNfaW5fcXBfdGFibGVdICsgMSArIG9mZjsgayA8 PSA2MyArIG9mZjsgaysrKQorICAgICAgICAgICAgc3BzLT5jaHJvbWFfcXBfdGFibGVbaV1ba10g ID0gYXZfY2xpcChzcHMtPmNocm9tYV9xcF90YWJsZVtpXVtrLTFdICsgMSwgLXNwcy0+cXBfYmRf b2Zmc2V0LCA2Myk7CisgICAgfQorICAgIGlmIChyLT5zcHNfc2FtZV9xcF90YWJsZV9mb3JfY2hy b21hX2ZsYWcpIHsKKyAgICAgICAgbWVtY3B5KCZzcHMtPmNocm9tYV9xcF90YWJsZVsxXSwgJnNw cy0+Y2hyb21hX3FwX3RhYmxlWzBdLCBzaXplb2Yoc3BzLT5jaHJvbWFfcXBfdGFibGVbMF0pKTsK KyAgICAgICAgbWVtY3B5KCZzcHMtPmNocm9tYV9xcF90YWJsZVsyXSwgJnNwcy0+Y2hyb21hX3Fw X3RhYmxlWzBdLCBzaXplb2Yoc3BzLT5jaHJvbWFfcXBfdGFibGVbMF0pKTsKKyAgICB9CisKKyAg ICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3BzX3BvYyhWVkNTUFMgKnNwcykKK3sKKyAg ICBzcHMtPm1heF9waWNfb3JkZXJfY250X2xzYiA9IDEgPDwgKHNwcy0+ci0+c3BzX2xvZzJfbWF4 X3BpY19vcmRlcl9jbnRfbHNiX21pbnVzNCArIDQpOworfQorCitzdGF0aWMgdm9pZCBzcHNfaW50 ZXIoVlZDU1BTICpzcHMpCit7CisgICAgY29uc3QgSDI2NlJhd1NQUyAqciA9IHNwcy0+cjsKKwor ICAgIHNwcy0+bWF4X251bV9tZXJnZV9jYW5kICAgICA9IDYgLSByLT5zcHNfc2l4X21pbnVzX21h eF9udW1fbWVyZ2VfY2FuZDsKKyAgICBzcHMtPm1heF9udW1faWJjX21lcmdlX2NhbmQgPSA2IC0g ci0+c3BzX3NpeF9taW51c19tYXhfbnVtX2liY19tZXJnZV9jYW5kOworCisgICAgaWYgKHNwcy0+ ci0+c3BzX2dwbV9lbmFibGVkX2ZsYWcpIHsKKyAgICAgICAgc3BzLT5tYXhfbnVtX2dwbV9tZXJn ZV9jYW5kID0gMjsKKyAgICAgICAgaWYgKHNwcy0+bWF4X251bV9tZXJnZV9jYW5kID49IDMpCisg ICAgICAgICAgICBzcHMtPm1heF9udW1fZ3BtX21lcmdlX2NhbmQgPSBzcHMtPm1heF9udW1fbWVy Z2VfY2FuZCAtIHItPnNwc19tYXhfbnVtX21lcmdlX2NhbmRfbWludXNfbWF4X251bV9ncG1fY2Fu ZDsKKyAgICB9CisKKyAgICBzcHMtPmxvZzJfcGFyYWxsZWxfbWVyZ2VfbGV2ZWwgPSByLT5zcHNf bG9nMl9wYXJhbGxlbF9tZXJnZV9sZXZlbF9taW51czIgKyAyOworfQorCitzdGF0aWMgdm9pZCBz cHNfcGFydGl0aW9uX2NvbnN0cmFpbnRzKFZWQ1NQUyogc3BzKQoreworICAgIGNvbnN0IEgyNjZS YXdTUFMgKnIgPSBzcHMtPnI7CisKKyAgICBzcHMtPmN0Yl9sb2cyX3NpemVfeSAgICA9IHItPnNw c19sb2cyX2N0dV9zaXplX21pbnVzNSArIDU7CisgICAgc3BzLT5jdGJfc2l6ZV95ICAgICAgICAg PSAxIDw8IHNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIHNwcy0+bWluX2NiX2xvZzJfc2l6ZV95 ID0gci0+c3BzX2xvZzJfbWluX2x1bWFfY29kaW5nX2Jsb2NrX3NpemVfbWludXMyICsgMjsKKyAg ICBzcHMtPm1pbl9jYl9zaXplX3kgICAgICA9IDEgPDwgc3BzLT5taW5fY2JfbG9nMl9zaXplX3k7 CisgICAgc3BzLT5tYXhfdGJfc2l6ZV95ICAgICAgPSAxIDw8IChyLT5zcHNfbWF4X2x1bWFfdHJh bnNmb3JtX3NpemVfNjRfZmxhZyA/IDYgOiA1KTsKKyAgICBzcHMtPm1heF90c19zaXplICAgICAg ICA9IDEgPDwgKHItPnNwc19sb2cyX3RyYW5zZm9ybV9za2lwX21heF9zaXplX21pbnVzMiArIDIp OworfQorCitzdGF0aWMgdm9pZCBzcHNfbGFkZihWVkNTUFMqIHNwcykKK3sKKyAgICBjb25zdCBI MjY2UmF3U1BTICpyID0gc3BzLT5yOworCisgICAgaWYgKHItPnNwc19sYWRmX2VuYWJsZWRfZmxh ZykgeworICAgICAgICBzcHMtPm51bV9sYWRmX2ludGVydmFscyA9IHItPnNwc19udW1fbGFkZl9p bnRlcnZhbHNfbWludXMyICsgMjsKKyAgICAgICAgc3BzLT5sYWRmX2ludGVydmFsX2xvd2VyX2Jv dW5kWzBdID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzcHMtPm51bV9sYWRmX2lu dGVydmFscyAtIDE7IGkrKykgeworICAgICAgICAgICAgc3BzLT5sYWRmX2ludGVydmFsX2xvd2Vy X2JvdW5kW2kgKyAxXSA9CisgICAgICAgICAgICAgICAgc3BzLT5sYWRmX2ludGVydmFsX2xvd2Vy X2JvdW5kW2ldICsgci0+c3BzX2xhZGZfZGVsdGFfdGhyZXNob2xkX21pbnVzMVtpXSArIDE7Cisg ICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgc3BzX2Rlcml2ZShWVkNTUFMgKnNwcywg dm9pZCAqbG9nX2N0eCkKK3sKKyAgICBpbnQgcmV0OworICAgIGNvbnN0IEgyNjZSYXdTUFMgKnIg PSBzcHMtPnI7CisKKyAgICBzcHMtPndpZHRoICA9IHItPnNwc19waWNfd2lkdGhfbWF4X2luX2x1 bWFfc2FtcGxlczsKKyAgICBzcHMtPmhlaWdodCA9IHItPnNwc19waWNfaGVpZ2h0X21heF9pbl9s dW1hX3NhbXBsZXM7CisKKyAgICByZXQgPSBzcHNfYml0X2RlcHRoKHNwcywgbG9nX2N0eCk7Cisg ICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisgICAgc3BzX3BvYyhzcHMpOwor ICAgIHNwc19pbnRlcihzcHMpOworICAgIHNwc19wYXJ0aXRpb25fY29uc3RyYWludHMoc3BzKTsK KyAgICBzcHNfbGFkZihzcHMpOworICAgIGlmIChyLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgIT0g MCkKKyAgICAgICAgc3BzX2Nocm9tYV9xcF90YWJsZShzcHMpOworCisgICAgcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyB2b2lkIHNwc19mcmVlKHVpbnQ4X3QgKmRhdGEpCit7CisgICAgVlZDU1BTICpz cHMgPSAoVlZDU1BTKilkYXRhOworICAgIGF2X2J1ZmZlcl91bnJlZigmc3BzLT5ycmVmKTsKK30K Kworc3RhdGljIEFWQnVmZmVyUmVmICpzcHNfYWxsb2MoY29uc3QgSDI2NlJhd1NQUyAqcnNwcywg QVZCdWZmZXJSZWYgKnJzcHNfYnVmLCB2b2lkICpsb2dfY3R4KQoreworICAgIGludCByZXQ7Cisg ICAgVlZDU1BTICpzcHM7CisgICAgQVZCdWZmZXJSZWYgKnNwc19idWYgPSBwc19hbGxvYyhzaXpl b2YoKnNwcyksIHNwc19mcmVlKTsKKworICAgIGlmICghc3BzX2J1ZikKKyAgICAgICAgcmV0dXJu IE5VTEw7CisgICAgc3BzID0gKFZWQ1NQUyAqKXNwc19idWYtPmRhdGE7CisKKyAgICByZXQgPSBh dl9idWZmZXJfcmVwbGFjZSgmc3BzLT5ycmVmLCByc3BzX2J1Zik7CisgICAgaWYgKHJldCA8IDAp CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBzcHMtPnIgPSByc3BzOworCisgICAgcmV0ID0gc3Bz X2Rlcml2ZShzcHMsIGxvZ19jdHgpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICBnb3RvIGZh aWw7CisKKyAgICByZXR1cm4gc3BzX2J1ZjsKKworZmFpbDoKKyAgICBhdl9idWZmZXJfdW5yZWYo JnNwc19idWYpOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGRlY29kZV9zcHMo VlZDUGFyYW1TZXRzICpwcywKKyAgICBjb25zdCBIMjY2UmF3U1BTICpyc3BzLCBBVkJ1ZmZlclJl ZiAqcnNwc19idWYsIHZvaWQgKmxvZ19jdHgpCit7CisgICAgaW50IHJldDsKKyAgICBjb25zdCBp bnQgc3BzX2lkID0gcnNwcy0+c3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkOworICAgIEFWQnVmZmVy UmVmICpzcHNfYnVmID0gcHMtPnNwc19saXN0W3Nwc19pZF07CisKKyAgICBpZiAoc3BzX2J1ZiAm JiAoKFZWQ1NQUyAqKXNwc19idWYtPmRhdGEpLT5yID09IHJzcHMpCisgICAgICAgIHJldHVybiAw OworCisgICAgc3BzX2J1ZiA9IHNwc19hbGxvYyhyc3BzLCByc3BzX2J1ZiwgbG9nX2N0eCk7Cisg ICAgaWYgKCFzcHNfYnVmKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAg cmV0ID0gYXZfYnVmZmVyX3JlcGxhY2UoJnBzLT5zcHNfbGlzdFtzcHNfaWRdLCBzcHNfYnVmKTsK KworICAgIGF2X2J1ZmZlcl91bnJlZigmc3BzX2J1Zik7CisgICAgcmV0dXJuIHJldDsKK30KKwor c3RhdGljIHZvaWQgcHBzX2Nocm9tYV9xcF9vZmZzZXQoVlZDUFBTICpwcHMpCit7CisgICAgcHBz LT5jaHJvbWFfcXBfb2Zmc2V0W0NCIC0gMV0gICA9IHBwcy0+ci0+cHBzX2NiX3FwX29mZnNldDsK KyAgICBwcHMtPmNocm9tYV9xcF9vZmZzZXRbQ1IgLSAxXSAgID0gcHBzLT5yLT5wcHNfY3JfcXBf b2Zmc2V0OworICAgIHBwcy0+Y2hyb21hX3FwX29mZnNldFtKQ0JDUiAtIDFdPSBwcHMtPnItPnBw c19qb2ludF9jYmNyX3FwX29mZnNldF92YWx1ZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7 IGkrKykgeworICAgICAgICBwcHMtPmNocm9tYV9xcF9vZmZzZXRfbGlzdFtpXVtDQiAtIDFdICAg PSBwcHMtPnItPnBwc19jYl9xcF9vZmZzZXRfbGlzdFtpXTsKKyAgICAgICAgcHBzLT5jaHJvbWFf cXBfb2Zmc2V0X2xpc3RbaV1bQ1IgLSAxXSAgID0gcHBzLT5yLT5wcHNfY3JfcXBfb2Zmc2V0X2xp c3RbaV07CisgICAgICAgIHBwcy0+Y2hyb21hX3FwX29mZnNldF9saXN0W2ldW0pDQkNSIC0gMV09 IHBwcy0+ci0+cHBzX2pvaW50X2NiY3JfcXBfb2Zmc2V0X2xpc3RbaV07CisgICAgfQorfQorCitz dGF0aWMgdm9pZCBwcHNfd2lkdGhfaGVpZ2h0KFZWQ1BQUyAqcHBzLCBjb25zdCBWVkNTUFMgKnNw cykKK3sKKyAgICBjb25zdCBIMjY2UmF3UFBTICpyID0gcHBzLT5yOworCisgICAgcHBzLT53aWR0 aCAgICAgICAgICA9IHItPnBwc19waWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzOworICAgIHBwcy0+ aGVpZ2h0ICAgICAgICAgPSByLT5wcHNfcGljX2hlaWdodF9pbl9sdW1hX3NhbXBsZXM7CisKKyAg ICBwcHMtPmN0Yl93aWR0aCAgICAgID0gQVZfQ0VJTF9SU0hJRlQocHBzLT53aWR0aCwgIHNwcy0+ Y3RiX2xvZzJfc2l6ZV95KTsKKyAgICBwcHMtPmN0Yl9oZWlnaHQgICAgID0gQVZfQ0VJTF9SU0hJ RlQocHBzLT5oZWlnaHQsIHNwcy0+Y3RiX2xvZzJfc2l6ZV95KTsKKyAgICBwcHMtPmN0Yl9jb3Vu dCAgICAgID0gcHBzLT5jdGJfd2lkdGggKiBwcHMtPmN0Yl9oZWlnaHQ7CisKKyAgICBwcHMtPm1p bl9jYl93aWR0aCAgID0gcHBzLT53aWR0aCAgPj4gc3BzLT5taW5fY2JfbG9nMl9zaXplX3k7Cisg ICAgcHBzLT5taW5fY2JfaGVpZ2h0ICA9IHBwcy0+aGVpZ2h0ID4+IHNwcy0+bWluX2NiX2xvZzJf c2l6ZV95OworCisgICAgcHBzLT5taW5fcHVfd2lkdGggICA9IHBwcy0+d2lkdGggID4+IE1JTl9Q VV9MT0cyOworICAgIHBwcy0+bWluX3B1X2hlaWdodCAgPSBwcHMtPmhlaWdodCA+PiBNSU5fUFVf TE9HMjsKKyAgICBwcHMtPm1pbl90dV93aWR0aCAgID0gcHBzLT53aWR0aCAgPj4gTUlOX1RVX0xP RzI7CisgICAgcHBzLT5taW5fdHVfaGVpZ2h0ICA9IHBwcy0+aGVpZ2h0ID4+IE1JTl9UVV9MT0cy OworCisgICAgcHBzLT53aWR0aDMyICAgICAgICA9IEFWX0NFSUxfUlNISUZUKHBwcy0+d2lkdGgs ICA1KTsKKyAgICBwcHMtPmhlaWdodDMyICAgICAgID0gQVZfQ0VJTF9SU0hJRlQocHBzLT5oZWln aHQsIDUpOworICAgIHBwcy0+d2lkdGg2NCAgICAgICAgPSBBVl9DRUlMX1JTSElGVChwcHMtPndp ZHRoLCAgNik7CisgICAgcHBzLT5oZWlnaHQ2NCAgICAgICA9IEFWX0NFSUxfUlNISUZUKHBwcy0+ aGVpZ2h0LCA2KTsKK30KKworc3RhdGljIGludCBwcHNfYmQoVlZDUFBTICpwcHMpCit7CisgICAg Y29uc3QgSDI2NlJhd1BQUyAqciA9IHBwcy0+cjsKKworICAgIHBwcy0+Y29sX2JkICAgICAgICA9 IGF2X2NhbGxvYyhyLT5udW1fdGlsZV9jb2x1bW5zICArIDEsIHNpemVvZigqcHBzLT5jb2xfYmQp KTsKKyAgICBwcHMtPnJvd19iZCAgICAgICAgPSBhdl9jYWxsb2Moci0+bnVtX3RpbGVfcm93cyAg KyAxLCAgICBzaXplb2YoKnBwcy0+cm93X2JkKSk7CisgICAgcHBzLT5jdGJfdG9fY29sX2JkID0g YXZfY2FsbG9jKHBwcy0+Y3RiX3dpZHRoICArIDEsICAgICAgc2l6ZW9mKCpwcHMtPmN0Yl90b19j b2xfYmQpKTsKKyAgICBwcHMtPmN0Yl90b19yb3dfYmQgPSBhdl9jYWxsb2MocHBzLT5jdGJfaGVp Z2h0ICsgMSwgICAgICBzaXplb2YoKnBwcy0+Y3RiX3RvX2NvbF9iZCkpOworICAgIGlmICghcHBz LT5jb2xfYmQgfHwgIXBwcy0+cm93X2JkIHx8ICFwcHMtPmN0Yl90b19jb2xfYmQgfHwgIXBwcy0+ Y3RiX3RvX3Jvd19iZCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIGZv ciAoaW50IGkgPSAwLCBqID0gMDsgaSA8IHItPm51bV90aWxlX2NvbHVtbnM7IGkrKykgeworICAg ICAgICBwcHMtPmNvbF9iZFtpXSA9IGo7CisgICAgICAgIGogKz0gci0+Y29sX3dpZHRoX3ZhbFtp XTsKKyAgICAgICAgZm9yIChpbnQgayA9IHBwcy0+Y29sX2JkW2ldOyBrIDwgajsgaysrKQorICAg ICAgICAgICAgcHBzLT5jdGJfdG9fY29sX2JkW2tdID0gcHBzLT5jb2xfYmRbaV07CisgICAgfQor CisgICAgZm9yIChpbnQgaSA9IDAsIGogPSAwOyBpIDwgci0+bnVtX3RpbGVfcm93czsgaSsrKSB7 CisgICAgICAgIHBwcy0+cm93X2JkW2ldID0gajsKKyAgICAgICAgaiArPSByLT5yb3dfaGVpZ2h0 X3ZhbFtpXTsKKyAgICAgICAgZm9yIChpbnQgayA9IHBwcy0+cm93X2JkW2ldOyBrIDwgajsgaysr KQorICAgICAgICAgICAgcHBzLT5jdGJfdG9fcm93X2JkW2tdID0gcHBzLT5yb3dfYmRbaV07Cisg ICAgfQorICAgIHJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgbmV4dF90aWxlX2lkeChpbnQg dGlsZV9pZHgsIGNvbnN0IGludCBpLCBjb25zdCBIMjY2UmF3UFBTICpyKQoreworICAgIGlmIChy LT5wcHNfdGlsZV9pZHhfZGVsdGFfcHJlc2VudF9mbGFnKSB7CisgICAgICAgIHRpbGVfaWR4ICs9 IHItPnBwc190aWxlX2lkeF9kZWx0YV92YWxbaV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGls ZV9pZHggKz0gci0+cHBzX3NsaWNlX3dpZHRoX2luX3RpbGVzX21pbnVzMVtpXSArIDE7CisgICAg ICAgIGlmICh0aWxlX2lkeCAlIHItPm51bV90aWxlX2NvbHVtbnMgPT0gMCkKKyAgICAgICAgICAg IHRpbGVfaWR4ICs9IChyLT5wcHNfc2xpY2VfaGVpZ2h0X2luX3RpbGVzX21pbnVzMVtpXSkgKiBy LT5udW1fdGlsZV9jb2x1bW5zOworICAgIH0KKyAgICByZXR1cm4gdGlsZV9pZHg7Cit9CisKK3N0 YXRpYyB2b2lkIHRpbGVfeHkoaW50ICp0aWxlX3gsIGludCAqdGlsZV95LCBjb25zdCBpbnQgdGls ZV9pZHgsIGNvbnN0IFZWQ1BQUyAqcHBzKQoreworICAgICp0aWxlX3ggPSB0aWxlX2lkeCAlIHBw cy0+ci0+bnVtX3RpbGVfY29sdW1uczsKKyAgICAqdGlsZV95ID0gdGlsZV9pZHggLyBwcHMtPnIt Pm51bV90aWxlX2NvbHVtbnM7Cit9CisKK3N0YXRpYyB2b2lkIGN0dV94eShpbnQgKmN0dV94LCBp bnQgKmN0dV95LCBjb25zdCBpbnQgdGlsZV94LCBjb25zdCBpbnQgdGlsZV95LCBjb25zdCBWVkNQ UFMgKnBwcykKK3sKKyAgICAqY3R1X3ggPSBwcHMtPmNvbF9iZFt0aWxlX3hdOworICAgICpjdHVf eSA9IHBwcy0+cm93X2JkW3RpbGVfeV07Cit9CisKK3N0YXRpYyBpbnQgY3R1X3JzKGNvbnN0IGlu dCBjdHVfeCwgY29uc3QgaW50IGN0dV95LCBjb25zdCBWVkNQUFMgKnBwcykKK3sKKyAgICByZXR1 cm4gcHBzLT5jdGJfd2lkdGggKiBjdHVfeSArIGN0dV94OworfQorCitzdGF0aWMgaW50IHBwc19h ZGRfY3R1cyhWVkNQUFMgKnBwcywgaW50ICpvZmYsIGNvbnN0IGludCBjdHVfeCwgY29uc3QgaW50 IGN0dV95LAorICAgIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCkKK3sKKyAgICBpbnQgc3RhcnQg PSAqb2ZmOworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKSB7CisgICAgICAgIGZvciAo aW50IHggPSAwOyB4IDwgdzsgeCsrKSB7CisgICAgICAgICAgICBwcHMtPmN0Yl9hZGRyX2luX3Ns aWNlWypvZmZdID0gY3R1X3JzKGN0dV94ICsgeCwgY3R1X3kgKyB5LCBwcHMpOworICAgICAgICAg ICAgKCpvZmYpKys7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuICpvZmYgLSBzdGFydDsK K30KKworc3RhdGljIGludCBwcHNfb25lX3RpbGVfc2xpY2VzKFZWQ1BQUyAqcHBzLCBjb25zdCBp bnQgdGlsZV9pZHgsIGludCBpLCBpbnQgKm9mZikKK3sKKyAgICBjb25zdCBIMjY2UmF3UFBTICpy ID0gcHBzLT5yOworICAgIGludCBjdHVfeCwgY3R1X3ksIGN0dV95X2VuZCwgdGlsZV94LCB0aWxl X3k7CisKKyAgICB0aWxlX3h5KCZ0aWxlX3gsICZ0aWxlX3ksIHRpbGVfaWR4LCBwcHMpOworICAg IGN0dV94eSgmY3R1X3gsICZjdHVfeSwgdGlsZV94LCB0aWxlX3ksIHBwcyk7CisgICAgY3R1X3lf ZW5kID0gY3R1X3kgKyByLT5yb3dfaGVpZ2h0X3ZhbFt0aWxlX3ldOworICAgIHdoaWxlIChjdHVf eSA8IGN0dV95X2VuZCkgeworICAgICAgICBwcHMtPnNsaWNlX3N0YXJ0X29mZnNldFtpXSA9ICpv ZmY7CisgICAgICAgIHBwcy0+bnVtX2N0dXNfaW5fc2xpY2VbaV0gPSBwcHNfYWRkX2N0dXMocHBz LCBvZmYsIGN0dV94LCBjdHVfeSwKKyAgICAgICAgICAgIHItPmNvbF93aWR0aF92YWxbdGlsZV94 XSwgci0+c2xpY2VfaGVpZ2h0X2luX2N0dXNbaV0pOworICAgICAgICBjdHVfeSArPSByLT5zbGlj ZV9oZWlnaHRfaW5fY3R1c1tpKytdOworICAgIH0KKyAgICBpLS07CisgICAgcmV0dXJuIGk7Cit9 CisKK3N0YXRpYyB2b2lkIHBwc19tdWx0aV90aWxlc19zbGljZShWVkNQUFMgKnBwcywgY29uc3Qg aW50IHRpbGVfaWR4LCBjb25zdCBpbnQgaSwgaW50ICpvZmYpCit7CisgICAgY29uc3QgSDI2NlJh d1BQUyAqciA9IHBwcy0+cjsKKyAgICBpbnQgY3R1X3gsIGN0dV95LHRpbGVfeCwgdGlsZV95Owor CisgICAgdGlsZV94eSgmdGlsZV94LCAmdGlsZV95LCB0aWxlX2lkeCwgcHBzKTsKKyAgICBwcHMt PnNsaWNlX3N0YXJ0X29mZnNldFtpXSA9ICpvZmY7CisgICAgcHBzLT5udW1fY3R1c19pbl9zbGlj ZVtpXSA9IDA7CisgICAgZm9yIChpbnQgdHkgPSB0aWxlX3k7IHR5IDw9IHRpbGVfeSArIHItPnBw c19zbGljZV9oZWlnaHRfaW5fdGlsZXNfbWludXMxW2ldOyB0eSsrKSB7CisgICAgICAgIGZvciAo aW50IHR4ID0gdGlsZV94OyB0eCA8PSB0aWxlX3ggKyByLT5wcHNfc2xpY2Vfd2lkdGhfaW5fdGls ZXNfbWludXMxW2ldOyB0eCsrKSB7CisgICAgICAgICAgICBjdHVfeHkoJmN0dV94LCAmY3R1X3ks IHR4LCB0eSwgcHBzKTsKKyAgICAgICAgICAgIHBwcy0+bnVtX2N0dXNfaW5fc2xpY2VbaV0gKz0g cHBzX2FkZF9jdHVzKHBwcywgb2ZmLCBjdHVfeCwgY3R1X3ksCisgICAgICAgICAgICAgICAgci0+ Y29sX3dpZHRoX3ZhbFt0eF0sIHItPnJvd19oZWlnaHRfdmFsW3R5XSk7CisgICAgICAgIH0KKyAg ICB9Cit9CisKK3N0YXRpYyB2b2lkIHBwc19yZWN0X3NsaWNlKFZWQ1BQUyogcHBzKQoreworICAg IGNvbnN0IEgyNjZSYXdQUFMqIHIgPSBwcHMtPnI7CisgICAgaW50IHRpbGVfaWR4ID0gMCwgb2Zm ID0gMDsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgci0+cHBzX251bV9zbGljZXNfaW5fcGlj X21pbnVzMSArIDE7IGkrKykgeworICAgICAgICBpZiAoIXItPnBwc19zbGljZV93aWR0aF9pbl90 aWxlc19taW51czFbaV0gJiYKKyAgICAgICAgICAgICFyLT5wcHNfc2xpY2VfaGVpZ2h0X2luX3Rp bGVzX21pbnVzMVtpXSkgeworICAgICAgICAgICAgaSA9IHBwc19vbmVfdGlsZV9zbGljZXMocHBz LCB0aWxlX2lkeCwgaSwgJm9mZik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcHNf bXVsdGlfdGlsZXNfc2xpY2UocHBzLCB0aWxlX2lkeCwgaSwgJm9mZik7CisKKyAgICAgICAgfQor ICAgICAgICB0aWxlX2lkeCA9IG5leHRfdGlsZV9pZHgodGlsZV9pZHgsIGksIHIpOworICAgIH0K K30KKworc3RhdGljIHZvaWQgcHBzX25vX3JlY3Rfc2xpY2UoVlZDUFBTKiBwcHMpCit7CisgICAg Y29uc3QgSDI2NlJhd1BQUyogciA9IHBwcy0+cjsKKyAgICBpbnQgY3R1X3gsIGN0dV95LCBvZmYg PSAwOworCisgICAgZm9yIChpbnQgdGlsZV95ID0gMDsgdGlsZV95IDwgci0+bnVtX3RpbGVfcm93 czsgdGlsZV95KyspIHsKKyAgICAgICAgZm9yIChpbnQgdGlsZV94ID0gMDsgdGlsZV94IDwgci0+ bnVtX3RpbGVfY29sdW1uczsgdGlsZV94KyspIHsKKyAgICAgICAgICAgIGN0dV94eSgmY3R1X3gs ICZjdHVfeSwgdGlsZV94LCB0aWxlX3ksIHBwcyk7CisgICAgICAgICAgICBwcHNfYWRkX2N0dXMo cHBzLCAmb2ZmLCBjdHVfeCwgY3R1X3ksIHItPmNvbF93aWR0aF92YWxbdGlsZV94XSwgci0+cm93 X2hlaWdodF92YWxbdGlsZV95XSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBpbnQg cHBzX3NsaWNlX21hcChWVkNQUFMgKnBwcykKK3sKKyAgICBwcHMtPmN0Yl9hZGRyX2luX3NsaWNl ID0gYXZfY2FsbG9jKHBwcy0+Y3RiX2NvdW50LCBzaXplb2YoKnBwcy0+Y3RiX2FkZHJfaW5fc2xp Y2UpKTsKKyAgICBpZiAoIXBwcy0+Y3RiX2FkZHJfaW5fc2xpY2UpCisgICAgICAgIHJldHVybiBB VkVSUk9SKEVOT01FTSk7CisKKyAgICBpZiAocHBzLT5yLT5wcHNfcmVjdF9zbGljZV9mbGFnKQor ICAgICAgICBwcHNfcmVjdF9zbGljZShwcHMpOworICAgIGVsc2UKKyAgICAgICAgcHBzX25vX3Jl Y3Rfc2xpY2UocHBzKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwcHNfcmVm X3dyYXBhcm91bmRfb2Zmc2V0KFZWQ1BQUyAqcHBzLCBjb25zdCBWVkNTUFMgKnNwcykKK3sKKyAg ICBjb25zdCBIMjY2UmF3UFBTICpyID0gcHBzLT5yOworCisgICAgaWYgKHItPnBwc19yZWZfd3Jh cGFyb3VuZF9lbmFibGVkX2ZsYWcpCisgICAgICAgIHBwcy0+cmVmX3dyYXBhcm91bmRfb2Zmc2V0 ID0gKHBwcy0+d2lkdGggLyBzcHMtPm1pbl9jYl9zaXplX3kpIC0gci0+cHBzX3BpY193aWR0aF9t aW51c193cmFwYXJvdW5kX29mZnNldDsKK30KKworc3RhdGljIGludCBwcHNfZGVyaXZlKFZWQ1BQ UyAqcHBzLCBjb25zdCBWVkNTUFMgKnNwcykKK3sKKyAgICBpbnQgcmV0OworCisgICAgcHBzX2No cm9tYV9xcF9vZmZzZXQocHBzKTsKKyAgICBwcHNfd2lkdGhfaGVpZ2h0KHBwcywgc3BzKTsKKwor ICAgIHJldCA9IHBwc19iZChwcHMpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4g cmV0OworCisgICAgcmV0ID0gcHBzX3NsaWNlX21hcChwcHMpOworICAgIGlmIChyZXQgPCAwKQor ICAgICAgICByZXR1cm4gcmV0OworCisgICAgcHBzX3JlZl93cmFwYXJvdW5kX29mZnNldChwcHMs IHNwcyk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHBzX2ZyZWUodWludDhf dCAqZGF0YSkKK3sKKyAgICBWVkNQUFMgKnBwcyA9IChWVkNQUFMgKilkYXRhOworCisgICAgYXZf YnVmZmVyX3VucmVmKCZwcHMtPnJyZWYpOworCisgICAgYXZfZnJlZXAoJnBwcy0+Y29sX2JkKTsK KyAgICBhdl9mcmVlcCgmcHBzLT5yb3dfYmQpOworICAgIGF2X2ZyZWVwKCZwcHMtPmN0Yl90b19j b2xfYmQpOworICAgIGF2X2ZyZWVwKCZwcHMtPmN0Yl90b19yb3dfYmQpOworICAgIGF2X2ZyZWVw KCZwcHMtPmN0Yl9hZGRyX2luX3NsaWNlKTsKK30KKworc3RhdGljIEFWQnVmZmVyUmVmICpwcHNf YWxsb2MoY29uc3QgSDI2NlJhd1BQUyAqcnBwcywgQVZCdWZmZXJSZWYgKnJwcHNfYnVmLCBjb25z dCBWVkNTUFMgKnNwcykKK3sKKyAgICBpbnQgcmV0OworICAgIEFWQnVmZmVyUmVmICpwcHNfYnVm OworICAgIFZWQ1BQUyAqcHBzOworCisgICAgcHBzX2J1ZiA9IHBzX2FsbG9jKHNpemVvZigqcHBz KSwgcHBzX2ZyZWUpOworICAgIGlmICghcHBzX2J1ZikKKyAgICAgICAgcmV0dXJuIE5VTEw7Cisg ICAgcHBzID0gKFZWQ1BQUyAqKXBwc19idWYtPmRhdGE7CisKKyAgICByZXQgPSBhdl9idWZmZXJf cmVwbGFjZSgmcHBzLT5ycmVmLCBycHBzX2J1Zik7CisgICAgaWYgKHJldCA8IDApCisgICAgICAg IGdvdG8gZmFpbDsKKyAgICBwcHMtPnIgPSBycHBzOworCisgICAgcmV0ID0gcHBzX2Rlcml2ZShw cHMsIHNwcyk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIHJl dHVybiBwcHNfYnVmOworCitmYWlsOgorICAgIGF2X2J1ZmZlcl91bnJlZigmcHBzX2J1Zik7Cisg ICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgZGVjb2RlX3BwcyhWVkNQYXJhbVNldHMg KnBzLAorICAgIGNvbnN0IEgyNjZSYXdQUFMgKnJwcHMsIEFWQnVmZmVyUmVmICpycHBzX2J1ZikK K3sKKyAgICBBVkJ1ZmZlclJlZiAqcHBzX2J1ZjsKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBjb25z dCBpbnQgcHBzX2lkID0gcnBwcy0+cHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkOworICAgIGNvbnN0 IGludCBzcHNfaWQgPSBycHBzLT5wcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQ7CisKKyAgICBwcHNf YnVmID0gcHMtPnBwc19saXN0W3Bwc19pZF07CisgICAgaWYgKHBwc19idWYgJiYgKChWVkNQUFMq KXBwc19idWYtPmRhdGEpLT5yID09IHJwcHMpCisgICAgICAgIHJldHVybiAwOworCisgICAgcHBz X2J1ZiA9IHBwc19hbGxvYyhycHBzLCBycHBzX2J1ZiwgKFZWQ1NQUyopKHBzLT5zcHNfbGlzdFtz cHNfaWRdLT5kYXRhKSk7CisgICAgaWYgKCFwcHNfYnVmKQorICAgICAgICByZXR1cm4gQVZFUlJP UihFTk9NRU0pOworCisgICAgcmV0ID0gYXZfYnVmZmVyX3JlcGxhY2UoJnBzLT5wcHNfbGlzdFtw cHNfaWRdLCBwcHNfYnVmKTsKKworICAgIGF2X2J1ZmZlcl91bnJlZigmcHBzX2J1Zik7CisgICAg cmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkZWNvZGVfcHMoVlZDUGFyYW1TZXRzICpwcywg Y29uc3QgQ29kZWRCaXRzdHJlYW1IMjY2Q29udGV4dCAqaDI2Niwgdm9pZCAqbG9nX2N0eCkKK3sK KyAgICBjb25zdCBIMjY2UmF3UGljdHVyZUhlYWRlciAqcGggPSBoMjY2LT5waDsKKyAgICBjb25z dCBIMjY2UmF3UFBTICpycHBzOworICAgIGNvbnN0IEgyNjZSYXdTUFMgKnJzcHM7CisgICAgQVZC dWZmZXJSZWYgKnJzcHNfYnVmLCAqcnBwc19idWY7CisgICAgaW50IHJldDsKKworICAgIGlmICgh cGgpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgcnBwcyAgICAg PSBoMjY2LT5wcHNbcGgtPnBoX3BpY19wYXJhbWV0ZXJfc2V0X2lkXTsKKyAgICBycHBzX2J1ZiA9 IGgyNjYtPnBwc19yZWZbcGgtPnBoX3BpY19wYXJhbWV0ZXJfc2V0X2lkXTsKKyAgICBpZiAoIXJw cHMgfHwgIXJwcHNfYnVmKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKwor ICAgIHJzcHMgICAgID0gaDI2Ni0+c3BzW3JwcHMtPnBwc19zZXFfcGFyYW1ldGVyX3NldF9pZF07 CisgICAgcnNwc19idWYgPSBoMjY2LT5zcHNfcmVmW3JwcHMtPnBwc19zZXFfcGFyYW1ldGVyX3Nl dF9pZF07CisgICAgaWYgKCFyc3BzIHx8ICFyc3BzX2J1ZikKKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7CisKKyAgICByZXQgPSBkZWNvZGVfc3BzKHBzLCByc3BzLCByc3BzX2J1 ZiwgbG9nX2N0eCk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAg ICByZXQgPSBkZWNvZGVfcHBzKHBzLCBycHBzLCBycHBzX2J1Zik7CisgICAgaWYgKHJldCA8IDAp CisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXR1cm4gMDsKK30KKworI2RlZmluZSBXRUlH SFRfVEFCTEUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdy0+bmJfd2VpZ2h0c1tM IyN4XSA9IHItPm51bV93ZWlnaHRzX2wjI3g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHct Pm5iX3dlaWdodHNbTCMjeF07IGkrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB3LT53ZWlnaHRfZmxhZ1tMIyN4XVtMVU1B XVtpXSAgICAgPSByLT5sdW1hX3dlaWdodF9sIyN4IyNfZmxhZ1tpXTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgICAgIHctPndlaWdodF9mbGFnW0wjI3hdW0NIUk9NQV1baV0g ICA9IHItPmNocm9tYV93ZWlnaHRfbCMjeCMjX2ZsYWdbaV07ICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICAgICAgdy0+d2VpZ2h0W0wjI3hdW0xVTUFdW2ldICAgICAgICAgID0gZGVu b21bTFVNQV0gKyByLT5kZWx0YV9sdW1hX3dlaWdodF9sIyN4W2ldOyAgICAgICAgICAgICAgICAg XAorICAgICAgICB3LT5vZmZzZXRbTCMjeF1bTFVNQV1baV0gICAgICAgICAgPSByLT5sdW1hX29m ZnNldF9sIyN4W2ldOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg ICAgIGZvciAoaW50IGogPSBDQjsgaiA8PSBDUjsgaisrKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg IHctPndlaWdodFtMIyN4XVtqXVtpXSAgICAgICAgID0gZGVub21bQ0hST01BXSArIHItPmRlbHRh X2Nocm9tYV93ZWlnaHRfbCMjeFtpXVtqIC0gMV07ICAgICAgXAorICAgICAgICAgICAgdy0+b2Zm c2V0W0wjI3hdW2pdW2ldICAgICAgICAgPSAxMjggKyByLT5kZWx0YV9jaHJvbWFfb2Zmc2V0X2wj I3hbaV1baiAtIDFdOyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB3LT5vZmZzZXRbTCMj eF1bal1baV0gICAgICAgIC09ICgxMjggKiB3LT53ZWlnaHRbTCMjeF1bal1baV0pID4+IHctPmxv ZzJfZGVub21bQ0hST01BXTsgICAgIFwKKyAgICAgICAgICAgIHctPm9mZnNldFtMIyN4XVtqXVtp XSAgICAgICAgID0gYXZfY2xpcF9pbnRwMih3LT5vZmZzZXRbTCMjeF1bal1baV0sIDcpOyAgICAg ICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKworc3RhdGljIHZvaWQgcHJlZF93ZWlnaHRfdGFibGUoUHJlZFdlaWdodFRhYmxlICp3LCBj b25zdCBIMjY2UmF3UHJlZFdlaWdodFRhYmxlICpyKQoreworICAgIGludCBkZW5vbVsyXTsKKwor ICAgIHctPmxvZzJfZGVub21bTFVNQV0gPSByLT5sdW1hX2xvZzJfd2VpZ2h0X2Rlbm9tOworICAg IHctPmxvZzJfZGVub21bQ0hST01BXSA9IHctPmxvZzJfZGVub21bTFVNQV0gKyByLT5kZWx0YV9j aHJvbWFfbG9nMl93ZWlnaHRfZGVub207CisgICAgZGVub21bTFVNQV0gPSAxIDw8IHctPmxvZzJf ZGVub21bTFVNQV07CisgICAgZGVub21bQ0hST01BXSA9IDEgPDwgdy0+bG9nMl9kZW5vbVtDSFJP TUFdOworICAgIFdFSUdIVF9UQUJMRSgwKQorICAgIFdFSUdIVF9UQUJMRSgxKQorfQorCisvLyA4 LjMuMSBEZWNvZGluZyBwcm9jZXNzIGZvciBwaWN0dXJlIG9yZGVyIGNvdW50CitzdGF0aWMgaW50 IHBoX2NvbXB1dGVfcG9jKGNvbnN0IEgyNjZSYXdQaWN0dXJlSGVhZGVyICpwaCwgY29uc3QgSDI2 NlJhd1NQUyAqc3BzLCBjb25zdCBpbnQgcG9jX3RpZDAsIGNvbnN0IGludCBpc19jbHZzcykKK3sK KyAgICBjb25zdCBpbnQgbWF4X3BvY19sc2IgICAgICAgPSAxIDw8IChzcHMtPnNwc19sb2cyX21h eF9waWNfb3JkZXJfY250X2xzYl9taW51czQgKyA0KTsKKyAgICBjb25zdCBpbnQgcHJldl9wb2Nf bHNiICAgICAgPSBwb2NfdGlkMCAlIG1heF9wb2NfbHNiOworICAgIGNvbnN0IGludCBwcmV2X3Bv Y19tc2IgICAgICA9IHBvY190aWQwIC0gcHJldl9wb2NfbHNiOworICAgIGNvbnN0IGludCBwb2Nf bHNiICAgICAgICAgICA9IHBoLT5waF9waWNfb3JkZXJfY250X2xzYjsKKyAgICBpbnQgcG9jX21z YjsKKworICAgIGlmIChwaC0+cGhfcG9jX21zYl9jeWNsZV9wcmVzZW50X2ZsYWcpIHsKKyAgICAg ICAgcG9jX21zYiA9IHBoLT5waF9wb2NfbXNiX2N5Y2xlX3ZhbCAqIG1heF9wb2NfbHNiOworICAg IH0gZWxzZSBpZiAoaXNfY2x2c3MpIHsKKyAgICAgICAgcG9jX21zYiA9IDA7CisgICAgfSBlbHNl IHsKKyAgICAgICAgaWYgKHBvY19sc2IgPCBwcmV2X3BvY19sc2IgJiYgcHJldl9wb2NfbHNiIC0g cG9jX2xzYiA+PSBtYXhfcG9jX2xzYiAvIDIpCisgICAgICAgICAgICBwb2NfbXNiID0gcHJldl9w b2NfbXNiICsgbWF4X3BvY19sc2I7CisgICAgICAgIGVsc2UgaWYgKHBvY19sc2IgPiBwcmV2X3Bv Y19sc2IgJiYgcG9jX2xzYiAtIHByZXZfcG9jX2xzYiA+IG1heF9wb2NfbHNiIC8gMikKKyAgICAg ICAgICAgIHBvY19tc2IgPSBwcmV2X3BvY19tc2IgLSBtYXhfcG9jX2xzYjsKKyAgICAgICAgZWxz ZQorICAgICAgICAgICAgcG9jX21zYiA9IHByZXZfcG9jX21zYjsKKyAgICB9CisKKyAgICByZXR1 cm4gcG9jX21zYiArIHBvY19sc2I7Cit9CisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHVpbnQx Nl90IGxtY3NfZGVyaXZlX2x1dF9zYW1wbGUodWludDE2X3Qgc2FtcGxlLAorICAgIHVpbnQxNl90 ICpwaXZvdDEsIHVpbnQxNl90ICpwaXZvdDIsIHVpbnQxNl90ICpzY2FsZV9jb2VmZiwgY29uc3Qg aW50IGlkeCwgY29uc3QgaW50IG1heCkKK3sKKyAgICBjb25zdCBpbnQgbHV0X3NhbXBsZSA9Cisg ICAgICAgIHBpdm90MVtpZHhdICsgKChzY2FsZV9jb2VmZltpZHhdICogKHNhbXBsZSAtIHBpdm90 MltpZHhdKSArICgxPDwgMTApKSA+PiAxMSk7CisgICAgcmV0dXJuIGF2X2NsaXAobHV0X3NhbXBs ZSwgMCwgbWF4IC0gMSk7Cit9CisKKy8vOC44LjIuMiBJbnZlcnNlIG1hcHBpbmcgcHJvY2VzcyBm b3IgYSBsdW1hIHNhbXBsZQorc3RhdGljIGludCBsbWNzX2Rlcml2ZV9sdXQoVlZDTE1DUyAqbG1j cywgY29uc3QgQVZCdWZmZXJSZWYgKmxtY3NfYnVmLCBjb25zdCBIMjY2UmF3U1BTICpzcHMpCit7 CisgICAgY29uc3QgSDI2NlJhd0FQUyAqcmxtY3M7CisgICAgY29uc3QgaW50IGJpdF9kZXB0aCA9 IChzcHMtPnNwc19iaXRkZXB0aF9taW51czggKyA4KTsKKyAgICBjb25zdCBpbnQgbWF4ICAgICAg ID0gKDEgPDwgYml0X2RlcHRoKTsKKyAgICBjb25zdCBpbnQgb3JnX2N3ICAgID0gbWF4IC8gTE1D U19NQVhfQklOX1NJWkU7CisgICAgY29uc3QgaW50IHNoaWZ0ICAgICA9IGF2X2xvZzIob3JnX2N3 KTsKKyAgICBjb25zdCBpbnQgb2ZmICAgICAgID0gMSA8PCAoc2hpZnQgLSAxKTsKKyAgICBpbnQg Y3dbTE1DU19NQVhfQklOX1NJWkVdOworICAgIHVpbnQxNl90IGlucHV0X3Bpdm90W0xNQ1NfTUFY X0JJTl9TSVpFXTsKKyAgICB1aW50MTZfdCBzY2FsZV9jb2VmZltMTUNTX01BWF9CSU5fU0laRV07 CisgICAgdWludDE2X3QgaW52X3NjYWxlX2NvZWZmW0xNQ1NfTUFYX0JJTl9TSVpFXTsKKyAgICBp bnQgaSwgZGVsdGFfY3JzOworICAgIGlmIChiaXRfZGVwdGggPiBMTUNTX01BWF9CSVRfREVQVEgp CisgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKworICAgIGlmICghbG1jc19i dWYpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIHJsbWNzID0gKGNv bnN0IEgyNjZSYXdBUFMgKilsbWNzX2J1Zi0+ZGF0YTsKKworCisgICAgbG1jcy0+bWluX2Jpbl9p ZHggPSBybG1jcy0+bG1jc19taW5fYmluX2lkeDsKKyAgICBsbWNzLT5tYXhfYmluX2lkeCA9IExN Q1NfTUFYX0JJTl9TSVpFIC0gMSAtIHJsbWNzLT5sbWNzX21pbl9iaW5faWR4OworCisgICAgbWVt c2V0KGN3LCAwLCBzaXplb2YoY3cpKTsKKyAgICBmb3IgKGludCBpID0gbG1jcy0+bWluX2Jpbl9p ZHg7IGkgPD0gbG1jcy0+bWF4X2Jpbl9pZHg7IGkrKykKKyAgICAgICAgY3dbaV0gPSBvcmdfY3cg KyAoMSAtIDIgKiBybG1jcy0+bG1jc19kZWx0YV9zaWduX2N3X2ZsYWdbaV0pICogcmxtY3MtPmxt Y3NfZGVsdGFfYWJzX2N3W2ldOworCisgICAgZGVsdGFfY3JzID0gKDEgLSAyICogcmxtY3MtPmxt Y3NfZGVsdGFfc2lnbl9jcnNfZmxhZykgKiBybG1jcy0+bG1jc19kZWx0YV9hYnNfY3JzOworCisg ICAgbG1jcy0+cGl2b3RbMF0gPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBMTUNTX01BWF9CSU5f U0laRTsgaSsrKSB7CisgICAgICAgIGlucHV0X3Bpdm90W2ldICAgICAgICA9IGkgKiBvcmdfY3c7 CisgICAgICAgIGxtY3MtPnBpdm90W2kgKyAxXSA9IGxtY3MtPnBpdm90W2ldICsgY3dbaV07Cisg ICAgICAgIHNjYWxlX2NvZWZmW2ldICAgICAgICA9IChjd1tpXSAqICgxIDw8IDExKSArICBvZmYp ID4+IHNoaWZ0OworICAgICAgICBpZiAoY3dbaV0gPT0gMCkgeworICAgICAgICAgICAgaW52X3Nj YWxlX2NvZWZmW2ldID0gMDsKKyAgICAgICAgICAgIGxtY3MtPmNocm9tYV9zY2FsZV9jb2VmZltp XSA9ICgxIDw8IDExKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludl9zY2FsZV9j b2VmZltpXSA9IG9yZ19jdyAqICgxIDw8IDExKSAvIGN3W2ldOworICAgICAgICAgICAgbG1jcy0+ Y2hyb21hX3NjYWxlX2NvZWZmW2ldID0gb3JnX2N3ICogKDEgPDwgMTEpIC8gKGN3W2ldICsgZGVs dGFfY3JzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vZGVyaXZlIGxtY3NfZndkX2x1dAor ICAgIGZvciAodWludDE2X3Qgc2FtcGxlID0gMDsgc2FtcGxlIDwgbWF4OyBzYW1wbGUrKykgewor ICAgICAgICBjb25zdCBpbnQgaWR4X3kgPSBzYW1wbGUgLyBvcmdfY3c7CisgICAgICAgIGNvbnN0 IHVpbnQxNl90IGZ3ZF9zYW1wbGUgPSBsbWNzX2Rlcml2ZV9sdXRfc2FtcGxlKHNhbXBsZSwgbG1j cy0+cGl2b3QsCisgICAgICAgICAgICBpbnB1dF9waXZvdCwgc2NhbGVfY29lZmYsIGlkeF95LCBt YXgpOworICAgICAgICBpZiAoYml0X2RlcHRoID4gOCkKKyAgICAgICAgICAgICgodWludDE2X3Qg KilsbWNzLT5md2RfbHV0KVtzYW1wbGVdID0gZndkX3NhbXBsZTsKKyAgICAgICAgZWxzZQorICAg ICAgICAgICAgbG1jcy0+ZndkX2x1dFtzYW1wbGVdID0gZndkX3NhbXBsZTsKKworICAgIH0KKwor ICAgIC8vZGVyaXZlIGxtY3NfaW52X2x1dAorICAgIGkgPSBsbWNzLT5taW5fYmluX2lkeDsKKyAg ICBmb3IgKHVpbnQxNl90IHNhbXBsZSA9IDA7IHNhbXBsZSA8IG1heDsgc2FtcGxlKyspIHsKKyAg ICAgICAgdWludDE2X3QgaW52X3NhbXBsZTsKKyAgICAgICAgd2hpbGUgKHNhbXBsZSA+PSBsbWNz LT5waXZvdFtpICsgMV0gJiYgaSA8PSBsbWNzLT5tYXhfYmluX2lkeCkKKyAgICAgICAgICAgIGkr KzsKKworICAgICAgICBpbnZfc2FtcGxlID0gbG1jc19kZXJpdmVfbHV0X3NhbXBsZShzYW1wbGUs IGlucHV0X3Bpdm90LCBsbWNzLT5waXZvdCwKKyAgICAgICAgICAgIGludl9zY2FsZV9jb2VmZiwg aSwgbWF4KTsKKworICAgICAgICBpZiAoYml0X2RlcHRoID4gOCkKKyAgICAgICAgICAgICgodWlu dDE2X3QgKilsbWNzLT5pbnZfbHV0KVtzYW1wbGVdID0gaW52X3NhbXBsZTsKKyAgICAgICAgZWxz ZQorICAgICAgICAgICAgbG1jcy0+aW52X2x1dFtzYW1wbGVdID0gaW52X3NhbXBsZTsKKyAgICB9 CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwaF9tYXhfbnVtX3N1YmJsb2NrX21l cmdlX2NhbmQoY29uc3QgSDI2NlJhd1NQUyAqc3BzLCBjb25zdCBIMjY2UmF3UGljdHVyZUhlYWRl ciAqcGgpCit7CisgICAgaWYgKHNwcy0+c3BzX2FmZmluZV9lbmFibGVkX2ZsYWcpCisgICAgICAg IHJldHVybiA1IC0gc3BzLT5zcHNfZml2ZV9taW51c19tYXhfbnVtX3N1YmJsb2NrX21lcmdlX2Nh bmQ7CisgICAgcmV0dXJuIHNwcy0+c3BzX3NidG12cF9lbmFibGVkX2ZsYWcgJiYgcGgtPnBoX3Rl bXBvcmFsX212cF9lbmFibGVkX2ZsYWc7Cit9CisKK3N0YXRpYyBpbnQgcGhfZGVyaXZlKFZWQ1BI ICpwaCwgY29uc3QgSDI2NlJhd1NQUyAqc3BzLCBjb25zdCBIMjY2UmF3UFBTICpwcHMsIGNvbnN0 IGludCBwb2NfdGlkMCwgY29uc3QgaW50IGlzX2NsdnNzKQoreworICAgIHBoLT5tYXhfbnVtX3N1 YmJsb2NrX21lcmdlX2NhbmQgPSBwaF9tYXhfbnVtX3N1YmJsb2NrX21lcmdlX2NhbmQoc3BzLCBw aC0+cik7CisKKyAgICBwaC0+cG9jID0gcGhfY29tcHV0ZV9wb2MocGgtPnIsIHNwcywgcG9jX3Rp ZDAsIGlzX2NsdnNzKTsKKworICAgIGlmIChwcHMtPnBwc193cF9pbmZvX2luX3BoX2ZsYWcpCisg ICAgICAgIHByZWRfd2VpZ2h0X3RhYmxlKCZwaC0+cHd0LCAmcGgtPnItPnBoX3ByZWRfd2VpZ2h0 X3RhYmxlKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRlY29kZV9waChWVkNG cmFtZVBhcmFtU2V0cyAqZnBzLCBjb25zdCBIMjY2UmF3UGljdHVyZUhlYWRlciAqcnBoLCBBVkJ1 ZmZlclJlZiAqcnBoX3JlZiwKKyAgICBjb25zdCBpbnQgcG9jX3RpZDAsIGNvbnN0IGludCBpc19j bHZzcykKK3sKKyAgICBpbnQgcmV0OworICAgIFZWQ1BIICpwaCA9ICZmcHMtPnBoOworICAgIGNv bnN0IEgyNjZSYXdTUFMgKnNwcyA9IGZwcy0+c3BzLT5yOworICAgIGNvbnN0IEgyNjZSYXdQUFMg KnBwcyA9IGZwcy0+cHBzLT5yOworCisgICAgcmV0ID0gYXZfYnVmZmVyX3JlcGxhY2UoJnBoLT5y cmVmLCBycGhfcmVmKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKyAg ICBwaC0+ciA9IHJwaDsKKworICAgIHJldCA9IHBoX2Rlcml2ZShwaCwgc3BzLCBwcHMsIHBvY190 aWQwLCBpc19jbHZzcyk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisK KyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkZWNvZGVfc2NhbGluZ19saXN0KFZWQ0Zy YW1lUGFyYW1TZXRzICpmcHMsIEFWQnVmZmVyUmVmICpzbF9idWYpCit7CisgICAgaW50IHJldDsK KworICAgIGlmICghc2xfYnVmKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsK KworICAgIHJldCA9IGF2X2J1ZmZlcl9yZXBsYWNlKCZmcHMtPnNsX2J1Ziwgc2xfYnVmKTsKKyAg ICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuICByZXQ7CisKKyAgICBmcHMtPnNsID0gKGNv bnN0IFZWQ1NjYWxpbmdMaXN0KilzbF9idWYtPmRhdGE7CisKKyAgICByZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBkZWNvZGVfZnJhbWVfcHMoVlZDRnJhbWVQYXJhbVNldHMgKmZwcywgY29uc3Qg VlZDUGFyYW1TZXRzICpwcywKKyAgICBjb25zdCBDb2RlZEJpdHN0cmVhbUgyNjZDb250ZXh0ICpo MjY2LCBjb25zdCBpbnQgcG9jX3RpZDAsIGNvbnN0IGludCBpc19jbHZzcykKK3sKKyAgICBjb25z dCBIMjY2UmF3UGljdHVyZUhlYWRlciAqcGggPSBoMjY2LT5waDsKKyAgICBjb25zdCBIMjY2UmF3 UFBTICpycHBzOworICAgIGludCByZXQ7CisKKyAgICBpZiAoIXBoKQorICAgICAgICByZXR1cm4g QVZFUlJPUl9JTlZBTElEREFUQTsKKworICAgIHJwcHMgPSBoMjY2LT5wcHNbcGgtPnBoX3BpY19w YXJhbWV0ZXJfc2V0X2lkXTsKKyAgICBpZiAoIXJwcHMpCisgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOworCisgICAgcmV0ID0gYXZfYnVmZmVyX3JlcGxhY2UoJmZwcy0+c3BzX2J1 ZiwgcHMtPnNwc19saXN0W3JwcHMtPnBwc19zZXFfcGFyYW1ldGVyX3NldF9pZF0pOworICAgIGlm IChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworICAgIGZwcy0+c3BzID0gKFZWQ1NQUyAq KWZwcy0+c3BzX2J1Zi0+ZGF0YTsKKworICAgIHJldCA9IGF2X2J1ZmZlcl9yZXBsYWNlKCZmcHMt PnBwc19idWYsIHBzLT5wcHNfbGlzdFtycHBzLT5wcHNfcGljX3BhcmFtZXRlcl9zZXRfaWRdKTsK KyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICBmcHMtPnBwcyA9IChW VkNQUFMgKilmcHMtPnBwc19idWYtPmRhdGE7CisKKyAgICByZXQgPSBkZWNvZGVfcGgoZnBzLCBw aCwgaDI2Ni0+cGhfcmVmLCBwb2NfdGlkMCwgaXNfY2x2c3MpOworICAgIGlmIChyZXQgPCAwKQor ICAgICAgICByZXR1cm4gcmV0OworCisgICAgaWYgKHBoLT5waF9leHBsaWNpdF9zY2FsaW5nX2xp c3RfZW5hYmxlZF9mbGFnKSB7CisgICAgICAgIHJldCA9IGRlY29kZV9zY2FsaW5nX2xpc3QoZnBz LCBwcy0+c2NhbGluZ19saXN0W3BoLT5waF9zY2FsaW5nX2xpc3RfYXBzX2lkXSk7CisgICAgICAg IGlmIChyZXQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBpZiAo cGgtPnBoX2xtY3NfZW5hYmxlZF9mbGFnKSB7CisgICAgICAgIHJldCA9IGxtY3NfZGVyaXZlX2x1 dCgmZnBzLT5sbWNzLCBwcy0+bG1jc19saXN0W3BoLT5waF9sbWNzX2Fwc19pZF0sIGZwcy0+c3Bz LT5yKTsKKyAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICByZXR1cm4gcmV0OworICAg IH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMoZnBzLT5hbGZfbGlz dCk7IGkrKykgeworICAgICAgICByZXQgPSBhdl9idWZmZXJfcmVwbGFjZSgmZnBzLT5hbGZfbGlz dFtpXSwgcHMtPmFsZl9saXN0W2ldKTsKKyAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAg ICByZXR1cm4gcmV0OworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGVj b2RlX3JlY292ZXJ5X2ZsYWcoVlZDQ29udGV4dCAqcykKK3sKKyAgICBpZiAoSVNfSURSKHMpKQor ICAgICAgICBzLT5ub19vdXRwdXRfYmVmb3JlX3JlY292ZXJ5X2ZsYWcgPSAwOworICAgIGVsc2Ug aWYgKElTX0NSQShzKSB8fCBJU19HRFIocykpCisgICAgICAgIHMtPm5vX291dHB1dF9iZWZvcmVf cmVjb3ZlcnlfZmxhZyA9IHMtPmxhc3RfZW9zOworfQorCitzdGF0aWMgdm9pZCBkZWNvZGVfcmVj b3ZlcnlfcG9jKFZWQ0NvbnRleHQgKnMsIGNvbnN0IFZWQ1BIICpwaCkKK3sKKyAgICBpZiAocy0+ bm9fb3V0cHV0X2JlZm9yZV9yZWNvdmVyeV9mbGFnKSB7CisgICAgICAgIGlmIChJU19HRFIocykp CisgICAgICAgICAgICBzLT5nZHJfcmVjb3ZlcnlfcG9pbnRfcG9jID0gcGgtPnBvYyArIHBoLT5y LT5waF9yZWNvdmVyeV9wb2NfY250OworICAgICAgICBpZiAoIUdEUl9JU19SRUNPVkVSRUQocykg JiYgcy0+Z2RyX3JlY292ZXJ5X3BvaW50X3BvYyA8PSBwaC0+cG9jKQorICAgICAgICAgICAgR0RS X1NFVF9SRUNPVkVSRUQocyk7CisgICAgfQorfQorCitpbnQgZmZfdnZjX2RlY29kZV9mcmFtZV9w cyhWVkNGcmFtZVBhcmFtU2V0cyAqZnBzLCBzdHJ1Y3QgVlZDQ29udGV4dCAqcykKK3sKKyAgICBp bnQgcmV0ID0gMDsKKyAgICBWVkNQYXJhbVNldHMgKnBzICAgICAgICAgICAgICAgICAgICAgICAg PSAmcy0+cHM7CisgICAgY29uc3QgQ29kZWRCaXRzdHJlYW1IMjY2Q29udGV4dCAqaDI2NiAgID0g cy0+Y2JjLT5wcml2X2RhdGE7CisKKyAgICByZXQgPSBkZWNvZGVfcHMocHMsIGgyNjYsIHMtPmF2 Y3R4KTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIGRlY29k ZV9yZWNvdmVyeV9mbGFnKHMpOworICAgIHJldCA9IGRlY29kZV9mcmFtZV9wcyhmcHMsIHBzLCBo MjY2LCBzLT5wb2NfdGlkMCwgSVNfQ0xWU1MocykpOworICAgIGRlY29kZV9yZWNvdmVyeV9wb2Mo cywgJmZwcy0+cGgpOworICAgIHJldHVybiByZXQ7Cit9CisKK3ZvaWQgZmZfdnZjX2ZyYW1lX3Bz X2ZyZWUoVlZDRnJhbWVQYXJhbVNldHMgKmZwcykKK3sKKyAgICBhdl9idWZmZXJfdW5yZWYoJmZw cy0+c3BzX2J1Zik7CisgICAgYXZfYnVmZmVyX3VucmVmKCZmcHMtPnBwc19idWYpOworICAgIGF2 X2J1ZmZlcl91bnJlZigmZnBzLT5waC5ycmVmKTsKKyAgICBhdl9idWZmZXJfdW5yZWYoJmZwcy0+ c2xfYnVmKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKGZwcy0+YWxm X2xpc3QpOyBpKyspCisgICAgICAgIGF2X2J1ZmZlcl91bnJlZigmZnBzLT5hbGZfbGlzdFtpXSk7 Cit9CisKK3ZvaWQgZmZfdnZjX3BzX3VuaW5pdChWVkNQYXJhbVNldHMgKnBzKQoreworICAgIGlu dCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHBzLT5zY2FsaW5nX2xp c3QpOyBpKyspCisgICAgICAgIGF2X2J1ZmZlcl91bnJlZigmcHMtPnNjYWxpbmdfbGlzdFtpXSk7 CisgICAgZm9yIChpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHBzLT5sbWNzX2xpc3QpOyBpKysp CisgICAgICAgIGF2X2J1ZmZlcl91bnJlZigmcHMtPmxtY3NfbGlzdFtpXSk7CisgICAgZm9yIChp ID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHBzLT5hbGZfbGlzdCk7IGkrKykKKyAgICAgICAgYXZf YnVmZmVyX3VucmVmKCZwcy0+YWxmX2xpc3RbaV0pOworICAgIGZvciAoaSA9IDA7IGkgPCBGRl9B UlJBWV9FTEVNUyhwcy0+dnBzX2xpc3QpOyBpKyspCisgICAgICAgIGF2X2J1ZmZlcl91bnJlZigm cHMtPnZwc19saXN0W2ldKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMocHMt PnNwc19saXN0KTsgaSsrKQorICAgICAgICBhdl9idWZmZXJfdW5yZWYoJnBzLT5zcHNfbGlzdFtp XSk7CisgICAgZm9yIChpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHBzLT5wcHNfbGlzdCk7IGkr KykKKyAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZwcy0+cHBzX2xpc3RbaV0pOworfQorCitlbnVt IHsKKyAgICBBUFNfQUxGLAorICAgIEFQU19MTUNTLAorICAgIEFQU19TQ0FMSU5HLAorfTsKKwor c3RhdGljIHZvaWQgYWxmX2NvZWZmKGludDE2X3QgKmNvZWZmLAorICAgIGNvbnN0IHVpbnQ4X3Qg KmFicywgY29uc3QgdWludDhfdCAqc2lnbiwgY29uc3QgaW50IHNpemUpCit7CisgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgIGNvZWZmW2ldID0gKDEgLSAyICogc2ln bltpXSkgKiBhYnNbaV07Cit9CisKK3N0YXRpYyB2b2lkIGFsZl9jb2VmZl9jYyhpbnQxNl90ICpj b2VmZiwKKyAgICBjb25zdCB1aW50OF90ICptYXBwZWRfYWJzLCBjb25zdCB1aW50OF90ICpzaWdu KQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgQUxGX05VTV9DT0VGRl9DQzsgaSsrKSB7Cisg ICAgICAgIGludCBjID0gbWFwcGVkX2Fic1tpXTs7CisgICAgICAgIGlmIChjKQorICAgICAgICAg ICAgYyA9ICgxIC0gMiAqIHNpZ25baV0pICogKDEgPDwgKGMgLSAxKSk7CisgICAgICAgIGNvZWZm W2ldID0gYzsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGFsZl9sdW1hKFZWQ0FMRiAqYWxmKQor eworICAgIGNvbnN0IEgyNjZSYXdBUFMgKmFwcyA9IChjb25zdCBIMjY2UmF3QVBTICopYWxmLT5y cmVmLT5kYXRhOworCisgICAgaWYgKCFhcHMtPmFsZl9sdW1hX2ZpbHRlcl9zaWduYWxfZmxhZykK KyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBBTEZfTlVNX0ZJTFRF UlNfTFVNQTsgaSsrKSB7CisgICAgICAgIGNvbnN0IGludCByZWYgICAgICAgPSBhcHMtPmFsZl9s dW1hX2NvZWZmX2RlbHRhX2lkeFtpXTsKKyAgICAgICAgY29uc3QgdWludDhfdCAqYWJzICA9IGFw cy0+YWxmX2x1bWFfY29lZmZfYWJzW3JlZl07CisgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNpZ24g PSBhcHMtPmFsZl9sdW1hX2NvZWZmX3NpZ25bcmVmXTsKKworICAgICAgICBhbGZfY29lZmYoYWxm LT5sdW1hX2NvZWZmW2ldLCBhYnMsIHNpZ24sIEFMRl9OVU1fQ09FRkZfTFVNQSk7CisgICAgICAg IG1lbWNweShhbGYtPmx1bWFfY2xpcF9pZHhbaV0sIGFwcy0+YWxmX2x1bWFfY2xpcF9pZHhbcmVm XSwKKyAgICAgICAgICAgIHNpemVvZihhbGYtPmx1bWFfY2xpcF9pZHhbaV0pKTsKKyAgICB9Cit9 CisKK3N0YXRpYyB2b2lkIGFsZl9jaHJvbWEoVlZDQUxGICphbGYpCit7CisgICAgY29uc3QgSDI2 NlJhd0FQUyAqYXBzID0gKGNvbnN0IEgyNjZSYXdBUFMgKilhbGYtPnJyZWYtPmRhdGE7CisKKwor ICAgIGlmICghYXBzLT5hbGZfY2hyb21hX2ZpbHRlcl9zaWduYWxfZmxhZykKKyAgICAgICAgcmV0 dXJuOworCisgICAgYWxmLT5udW1fY2hyb21hX2ZpbHRlcnMgID0gYXBzLT5hbGZfY2hyb21hX251 bV9hbHRfZmlsdGVyc19taW51czEgKyAxOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWxmLT5u dW1fY2hyb21hX2ZpbHRlcnM7IGkrKykgeworICAgICAgICBjb25zdCB1aW50OF90ICphYnMgID0g YXBzLT5hbGZfY2hyb21hX2NvZWZmX2Fic1tpXTsKKyAgICAgICAgY29uc3QgdWludDhfdCAqc2ln biA9IGFwcy0+YWxmX2Nocm9tYV9jb2VmZl9zaWduW2ldOworCisgICAgICAgIGFsZl9jb2VmZihh bGYtPmNocm9tYV9jb2VmZltpXSwgYWJzLCBzaWduLCBBTEZfTlVNX0NPRUZGX0NIUk9NQSk7Cisg ICAgICAgIG1lbWNweShhbGYtPmNocm9tYV9jbGlwX2lkeFtpXSwgYXBzLT5hbGZfY2hyb21hX2Ns aXBfaWR4W2ldLAorICAgICAgICAgICAgc2l6ZW9mKGFsZi0+Y2hyb21hX2NsaXBfaWR4W2ldKSk7 CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBhbGZfY2MoVlZDQUxGICphbGYpCit7CisgICAgY29u c3QgSDI2NlJhd0FQUyAqYXBzICA9IChjb25zdCBIMjY2UmF3QVBTICopYWxmLT5ycmVmLT5kYXRh OworICAgIGNvbnN0IHVpbnQ4X3QgKCphYnNbXSlbQUxGX05VTV9DT0VGRl9DQ10gPQorICAgICAg ICB7IGFwcy0+YWxmX2NjX2NiX21hcHBlZF9jb2VmZl9hYnMsIGFwcy0+YWxmX2NjX2NyX21hcHBl ZF9jb2VmZl9hYnMgfTsKKyAgICBjb25zdCB1aW50OF90ICgqc2lnbltdKVtBTEZfTlVNX0NPRUZG X0NDXSA9CisgICAgICAgIHthcHMtPmFsZl9jY19jYl9jb2VmZl9zaWduLCBhcHMtPmFsZl9jY19j cl9jb2VmZl9zaWduIH07CisgICAgY29uc3QgaW50IHNpZ25hbGVkW10gPSB7IGFwcy0+YWxmX2Nj X2NiX2ZpbHRlcl9zaWduYWxfZmxhZywgYXBzLT5hbGZfY2NfY3JfZmlsdGVyX3NpZ25hbF9mbGFn fTsKKworICAgIGFsZi0+bnVtX2NjX2ZpbHRlcnNbMF0gPSBhcHMtPmFsZl9jY19jYl9maWx0ZXJz X3NpZ25hbGxlZF9taW51czEgKyAxOworICAgIGFsZi0+bnVtX2NjX2ZpbHRlcnNbMV0gPSBhcHMt PmFsZl9jY19jcl9maWx0ZXJzX3NpZ25hbGxlZF9taW51czEgKyAxOworCisgICAgZm9yIChpbnQg aWR4ID0gMDsgaWR4IDwgMjsgaWR4KyspIHsKKyAgICAgICAgaWYgKHNpZ25hbGVkW2lkeF0pIHsK KyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWxmLT5udW1fY2NfZmlsdGVyc1tpZHhd OyBpKyspCisgICAgICAgICAgICAgICAgYWxmX2NvZWZmX2NjKGFsZi0+Y2NfY29lZmZbaWR4XVtp XSwgYWJzW2lkeF1baV0sIHNpZ25baWR4XVtpXSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0 YXRpYyB2b2lkIGFsZl9kZXJpdmUoVlZDQUxGICphbGYpCit7CisgICAgYWxmX2x1bWEoYWxmKTsK KyAgICBhbGZfY2hyb21hKGFsZik7CisgICAgYWxmX2NjKGFsZik7Cit9CisKK3N0YXRpYyB2b2lk IGFsZl9mcmVlKHVpbnQ4X3QgKmRhdGEpCit7CisgICAgVlZDQUxGICphbGYgPSAoVlZDQUxGKilk YXRhOworCisgICAgYXZfYnVmZmVyX3VucmVmKCZhbGYtPnJyZWYpOworfQorCitzdGF0aWMgQVZC dWZmZXJSZWYgKmFsZl9hbGxvYyhBVkJ1ZmZlclJlZiAqYXBzX2J1ZikKK3sKKyAgICBpbnQgcmV0 OworICAgIFZWQ0FMRiAqYWxmOworICAgIEFWQnVmZmVyUmVmICpidWYgPSBwc19hbGxvYyhzaXpl b2YoKmFsZiksIGFsZl9mcmVlKTsKKyAgICBpZiAoIWJ1ZikKKyAgICAgICAgcmV0dXJuIE5VTEw7 CisKKyAgICBhbGYgPSAoVlZDQUxGICopYnVmLT5kYXRhOworICAgIHJldCA9IGF2X2J1ZmZlcl9y ZXBsYWNlKCZhbGYtPnJyZWYsIGFwc19idWYpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICBn b3RvIGZhaWw7CisKKyAgICBhbGZfZGVyaXZlKGFsZik7CisKKyAgICByZXR1cm4gYnVmOworCitm YWlsOgorICAgIGF2X2J1ZmZlcl91bnJlZigmYnVmKTsKKyAgICByZXR1cm4gYnVmOworfQorCitz dGF0aWMgaW50IGFwc19kZWNvZGVfYWxmKEFWQnVmZmVyUmVmICoqYWxmX2J1ZiwgQVZCdWZmZXJS ZWYgKmFwc19idWYpCit7CisgICAgaW50IHJldDsKKyAgICBBVkJ1ZmZlclJlZiAqYnVmID0gYWxm X2FsbG9jKGFwc19idWYpOworCisgICAgaWYgKCFidWYpCisgICAgICAgIHJldHVybiBBVkVSUk9S KEVOT01FTSk7CisKKyAgICByZXQgPSBhdl9idWZmZXJfcmVwbGFjZShhbGZfYnVmLCBidWYpOwor CisgICAgYXZfYnVmZmVyX3VucmVmKCZidWYpOworICAgIHJldHVybiByZXQ7CisKK30KKworc3Rh dGljIGludCBpc19sdW1hX2xpc3QoY29uc3QgaW50IGlkKQoreworICAgIHJldHVybiBpZCAlIFZW Q19NQVhfU0FNUExFX0FSUkFZUyA9PSBTTF9TVEFSVF80eDQgfHwgaWQgPT0gU0xfU1RBUlRfNjR4 NjQgKyAxOworfQorCitzdGF0aWMgaW50IGRlcml2ZV9tYXRyaXhfc2l6ZShjb25zdCBpbnQgaWQp Cit7CisgICAgcmV0dXJuIGlkIDwgU0xfU1RBUlRfNHg0ID8gMiA6IChpZCA8IFNMX1NUQVJUXzh4 OCA/IDQgOiA4KTsKK30KKworLy8gNy40LjMuMjAgU2NhbGluZyBsaXN0IGRhdGEgc2VtYW50aWNz CitzdGF0aWMgaW50IHNjYWxpbmdfZGVyaXZlKFZWQ1NjYWxpbmdMaXN0ICpzbCkKK3sKKyAgICBj b25zdCBIMjY2UmF3QVBTICphcHMgPSAoY29uc3QgSDI2NlJhd0FQUyAqKXNsLT5ycmVmLT5kYXRh OworCisgICAgZm9yIChpbnQgaWQgPSAwOyBpZCA8IFNMX01BWF9JRDsgaWQrKykgeworICAgICAg ICBjb25zdCBpbnQgbWF0cml4X3NpemUgICA9IGRlcml2ZV9tYXRyaXhfc2l6ZShpZCk7CisgICAg ICAgIGNvbnN0IGludCBsb2cyX3NpemUgICAgID0gbG9nMihtYXRyaXhfc2l6ZSk7CisgICAgICAg IGNvbnN0IGludCBsaXN0X3NpemUgICAgID0gbWF0cml4X3NpemUgKiBtYXRyaXhfc2l6ZTsKKyAg ICAgICAgaW50IGNvZWZmW1NMX01BWF9NQVRSSVhfU0laRSAqIFNMX01BWF9NQVRSSVhfU0laRV07 CisgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnByZWQ7CisgICAgICAgIGNvbnN0IGludCAqc2NhbGlu Z19saXN0OworICAgICAgICBpbnQgZGMgPSAwOworCisgICAgICAgIGlmIChhcHMtPmFwc19jaHJv bWFfcHJlc2VudF9mbGFnIHx8IGlzX2x1bWFfbGlzdChpZCkpIHsKKyAgICAgICAgICAgIGlmICgh YXBzLT5zY2FsaW5nX2xpc3RfY29weV9tb2RlX2ZsYWdbaWRdKSB7CisgICAgICAgICAgICAgICAg aW50IG5leHRfY29lZiA9IDA7CisKKyAgICAgICAgICAgICAgICBpZiAoaWQgPj0gU0xfU1RBUlRf MTZ4MTYpCisgICAgICAgICAgICAgICAgICAgIGRjID0gbmV4dF9jb2VmID0gYXBzLT5zY2FsaW5n X2xpc3RfZGNfY29lZltpZCAtIFNMX1NUQVJUXzE2eDE2XTsKKworICAgICAgICAgICAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgbGlzdF9zaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAg Y29uc3QgaW50IHggPSBmZl92dmNfZGlhZ19zY2FuX3hbM11bM11baV07CisgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGludCB5ID0gZmZfdnZjX2RpYWdfc2Nhbl95WzNdWzNdW2ldOworCisgICAg ICAgICAgICAgICAgICAgIGlmICghKGlkID49IFNMX1NUQVJUXzY0eDY0ICYmIHggPj0gNCAmJiB5 ID49IDQpKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9jb2VmICs9IGFwcy0+c2NhbGlu Z19saXN0X2RlbHRhX2NvZWZbaWRdW2ldOworICAgICAgICAgICAgICAgICAgICBjb2VmZltpXSA9 IG5leHRfY29lZjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K KworICAgICAgICAvL2RjCisgICAgICAgIGlmIChpZCA+PSBTTF9TVEFSVF8xNngxNikgeworICAg ICAgICAgICAgaWYgKCFhcHMtPnNjYWxpbmdfbGlzdF9jb3B5X21vZGVfZmxhZ1tpZF0gJiYgIWFw cy0+c2NhbGluZ19saXN0X3ByZWRfbW9kZV9mbGFnW2lkXSkgeworICAgICAgICAgICAgICAgIHNs LT5zY2FsaW5nX21hdHJpeF9kY19yZWNbaWQgLSBTTF9TVEFSVF8xNngxNl0gPSA4OworICAgICAg ICAgICAgfSBlbHNlIGlmICghYXBzLT5zY2FsaW5nX2xpc3RfcHJlZF9pZF9kZWx0YVtpZF0pIHsK KyAgICAgICAgICAgICAgICBzbC0+c2NhbGluZ19tYXRyaXhfZGNfcmVjW2lkIC0gU0xfU1RBUlRf MTZ4MTZdID0gMTY7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnN0 IGludCByZWZfaWQgPSBpZCAtIGFwcy0+c2NhbGluZ19saXN0X3ByZWRfaWRfZGVsdGFbaWRdOwor ICAgICAgICAgICAgICAgIGlmIChyZWZfaWQgPj0gU0xfU1RBUlRfMTZ4MTYpCisgICAgICAgICAg ICAgICAgICAgIGRjICs9IHNsLT5zY2FsaW5nX21hdHJpeF9kY19yZWNbcmVmX2lkIC0gU0xfU1RB UlRfMTZ4MTZdOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZGMg Kz0gc2wtPnNjYWxpbmdfbWF0cml4X3JlY1tyZWZfaWRdWzBdOworICAgICAgICAgICAgICAgIHNs LT5zY2FsaW5nX21hdHJpeF9kY19yZWNbaWQgLSBTTF9TVEFSVF8xNngxNl0gPSBkYyAmIDI1NTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vYWMKKyAgICAgICAgc2NhbGlu Z19saXN0ID0gYXBzLT5zY2FsaW5nX2xpc3RfY29weV9tb2RlX2ZsYWdbaWRdID8gZmZfdnZjX3Nj YWxpbmdfbGlzdDAgOiBjb2VmZjsKKyAgICAgICAgaWYgKCFhcHMtPnNjYWxpbmdfbGlzdF9jb3B5 X21vZGVfZmxhZ1tpZF0gJiYgIWFwcy0+c2NhbGluZ19saXN0X3ByZWRfbW9kZV9mbGFnW2lkXSkK KyAgICAgICAgICAgIHByZWQgPSBmZl92dmNfc2NhbGluZ19wcmVkXzg7CisgICAgICAgIGVsc2Ug aWYgKCFhcHMtPnNjYWxpbmdfbGlzdF9wcmVkX2lkX2RlbHRhW2lkXSkKKyAgICAgICAgICAgIHBy ZWQgPSBmZl92dmNfc2NhbGluZ19wcmVkXzE2OworICAgICAgICBlbHNlCisgICAgICAgICAgICBw cmVkID0gc2wtPnNjYWxpbmdfbWF0cml4X3JlY1tpZCAtIGFwcy0+c2NhbGluZ19saXN0X3ByZWRf aWRfZGVsdGFbaWRdXTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0X3NpemU7IGkr KykgeworICAgICAgICAgICAgY29uc3QgaW50IHggPSBmZl92dmNfZGlhZ19zY2FuX3hbbG9nMl9z aXplXVtsb2cyX3NpemVdW2ldOworICAgICAgICAgICAgY29uc3QgaW50IHkgPSBmZl92dmNfZGlh Z19zY2FuX3lbbG9nMl9zaXplXVtsb2cyX3NpemVdW2ldOworICAgICAgICAgICAgY29uc3QgaW50 IG9mZiA9IHkgKiBtYXRyaXhfc2l6ZSArIHg7CisgICAgICAgICAgICBzbC0+c2NhbGluZ19tYXRy aXhfcmVjW2lkXVtvZmZdID0gKHByZWRbb2ZmXSArIHNjYWxpbmdfbGlzdFtpXSkgJiAyNTU7Cisg ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2NhbGlu Z19mcmVlKHVpbnQ4X3QgKmRhdGEpCit7CisgICAgVlZDU2NhbGluZ0xpc3QgKnNsID0gKFZWQ1Nj YWxpbmdMaXN0KilkYXRhOworCisgICAgYXZfYnVmZmVyX3VucmVmKCZzbC0+cnJlZik7Cit9CisK K3N0YXRpYyBBVkJ1ZmZlclJlZiAqc2NhbGluZ19hbGxvYyhBVkJ1ZmZlclJlZiAqYXBzX2J1ZikK K3sKKyAgICBpbnQgcmV0OworICAgIFZWQ1NjYWxpbmdMaXN0ICpzbDsKKyAgICBBVkJ1ZmZlclJl ZiAqYnVmID0gcHNfYWxsb2Moc2l6ZW9mKCpzbCksIHNjYWxpbmdfZnJlZSk7CisKKyAgICBpZiAo IWJ1ZikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc2wgPSAoVlZDU2NhbGluZ0xpc3QgKili dWYtPmRhdGE7CisKKyAgICByZXQgPSBhdl9idWZmZXJfcmVwbGFjZSgmc2wtPnJyZWYsIGFwc19i dWYpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICByZXQgPSBz Y2FsaW5nX2Rlcml2ZShzbCk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIGdvdG8gZmFpbDsK KworICAgIHJldHVybiBidWY7CisKK2ZhaWw6CisgICAgYXZfYnVmZmVyX3VucmVmKCZidWYpOwor ICAgIHJldHVybiBidWY7Cit9CisKK3N0YXRpYyBpbnQgYXBzX2RlY29kZV9zY2FsaW5nKEFWQnVm ZmVyUmVmICoqc2xfYnVmLCBBVkJ1ZmZlclJlZiAqYXBzX2J1ZikKK3sKKyAgICBpbnQgcmV0Owor ICAgIEFWQnVmZmVyUmVmICpidWYgPSBzY2FsaW5nX2FsbG9jKGFwc19idWYpOworICAgIGlmICgh YnVmKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgcmV0ID0gYXZfYnVm ZmVyX3JlcGxhY2Uoc2xfYnVmLCBidWYpOworCisgICAgYXZfYnVmZmVyX3VucmVmKCZidWYpOwor ICAgIHJldHVybiByZXQ7Cit9CisKK2ludCBmZl92dmNfZGVjb2RlX2FwcyhWVkNQYXJhbVNldHMg KnBzLCBjb25zdCBDb2RlZEJpdHN0cmVhbVVuaXQgKnVuaXQpCit7CisgICAgQVZCdWZmZXJSZWYg KmFwc19idWYgICAgICAgICAgICAgICAgICAgID0gdW5pdC0+Y29udGVudF9yZWY7CisgICAgY29u c3QgSDI2NlJhd0FQUyAqYXBzICAgICAgICAgICAgICAgICAgID0gdW5pdC0+Y29udGVudDsKKyAg ICBpbnQgcmV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwOworCisgICAgaWYg KCFhcHNfYnVmIHx8ICFhcHMpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwor CisgICAgc3dpdGNoIChhcHMtPmFwc19wYXJhbXNfdHlwZSkgeworICAgICAgICBjYXNlIEFQU19B TEY6CisgICAgICAgICAgICByZXQgPSBhcHNfZGVjb2RlX2FsZigmcHMtPmFsZl9saXN0W2Fwcy0+ YXBzX2FkYXB0YXRpb25fcGFyYW1ldGVyX3NldF9pZF0sIGFwc19idWYpOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIGNhc2UgQVBTX0xNQ1M6CisgICAgICAgICAgICByZXQgPSBhdl9idWZm ZXJfcmVwbGFjZSgmcHMtPmxtY3NfbGlzdFthcHMtPmFwc19hZGFwdGF0aW9uX3BhcmFtZXRlcl9z ZXRfaWRdLCBhcHNfYnVmKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFQU19T Q0FMSU5HOgorICAgICAgICAgICAgcmV0ID0gYXBzX2RlY29kZV9zY2FsaW5nKCZwcy0+c2NhbGlu Z19saXN0W2Fwcy0+YXBzX2FkYXB0YXRpb25fcGFyYW1ldGVyX3NldF9pZF0sIGFwc19idWYpOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGlj IGludCBzaF9zdWJwaWNfaWR4KGNvbnN0IEgyNjZSYXdTbGljZUhlYWRlciAqc2gsIGNvbnN0IEgy NjZSYXdTUFMgKnNwcywgY29uc3QgSDI2NlJhd1BQUyAqcHBzKQoreworICAgIGNvbnN0IGludCBz cHNfbnVtX3N1YnBpY3MgPSBzcHMtPnNwc19udW1fc3VicGljc19taW51czEgKyAxOworCisgICAg aWYgKCFzcHMtPnNwc19zdWJwaWNfaW5mb19wcmVzZW50X2ZsYWcpCisgICAgICAgIHJldHVybiAw OworCisgICAgaWYgKCFzcHMtPnNwc19zdWJwaWNfaWRfbWFwcGluZ19leHBsaWNpdGx5X3NpZ25h bGxlZF9mbGFnKQorICAgICAgICByZXR1cm4gc2gtPnNoX3N1YnBpY19pZDsKKworICAgIGZvciAo aW50IGkgPSAwOyBpIDw9IHNwc19udW1fc3VicGljczsgaSsrKSB7CisgICAgICAgIGlmIChwcHMt PnBwc19zdWJwaWNfaWRbaV0gPT0gc2gtPnNoX3N1YnBpY19pZCkKKyAgICAgICAgICAgIHJldHVy biBpOworICAgIH0KKworICAgIHJldHVybiBzcHNfbnVtX3N1YnBpY3M7Cit9CisKK3N0YXRpYyB2 b2lkIHNoX3NsaWNlX2FkZHJlc3MoVlZDU0ggKnNoLCBjb25zdCBIMjY2UmF3U1BTICpzcHMsIGNv bnN0IFZWQ1BQUyAqcHBzKQoreworICAgIGNvbnN0IGludCBzbGljZV9hZGRyZXNzICAgICA9IHNo LT5yLT5zaF9zbGljZV9hZGRyZXNzOworICAgIGNvbnN0IGludCBjdXJyX3N1YnBpY19pZHggICA9 IHNoX3N1YnBpY19pZHgoc2gtPnIsIHNwcywgcHBzLT5yKTsKKworICAgIGlmIChwcHMtPnItPnBw c19yZWN0X3NsaWNlX2ZsYWcpIHsKKyAgICAgICAgaW50IHBpY19sZXZlbF9zbGljZV9pZHggPSBz bGljZV9hZGRyZXNzOworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGN1cnJfc3VicGljX2lk eDsgaisrKQorICAgICAgICAgICAgcGljX2xldmVsX3NsaWNlX2lkeCArPSBwcHMtPnItPm51bV9z bGljZXNfaW5fc3VicGljW2pdOworICAgICAgICBzaC0+Y3RiX2FkZHJfaW5fY3Vycl9zbGljZSA9 IHBwcy0+Y3RiX2FkZHJfaW5fc2xpY2UgKyBwcHMtPnNsaWNlX3N0YXJ0X29mZnNldFtwaWNfbGV2 ZWxfc2xpY2VfaWR4XTsKKyAgICAgICAgc2gtPm51bV9jdHVzX2luX2N1cnJfc2xpY2UgPSBwcHMt Pm51bV9jdHVzX2luX3NsaWNlW3BpY19sZXZlbF9zbGljZV9pZHhdOworICAgIH0gZWxzZSB7Cisg ICAgICAgIGludCB0aWxlX3ggPSBzbGljZV9hZGRyZXNzICUgcHBzLT5yLT5udW1fdGlsZV9jb2x1 bW5zOworICAgICAgICBpbnQgdGlsZV95ID0gc2xpY2VfYWRkcmVzcyAvIHBwcy0+ci0+bnVtX3Rp bGVfY29sdW1uczsKKyAgICAgICAgY29uc3QgaW50IHNsaWNlX3N0YXJ0X2N0YiA9IHBwcy0+cm93 X2JkW3RpbGVfeV0gKiBwcHMtPmN0Yl93aWR0aCArIHBwcy0+Y29sX2JkW3RpbGVfeF0gKiBwcHMt PnItPnJvd19oZWlnaHRfdmFsW3RpbGVfeV07CisKKyAgICAgICAgc2gtPmN0Yl9hZGRyX2luX2N1 cnJfc2xpY2UgPSBwcHMtPmN0Yl9hZGRyX2luX3NsaWNlICsgc2xpY2Vfc3RhcnRfY3RiOworCisg ICAgICAgIHNoLT5udW1fY3R1c19pbl9jdXJyX3NsaWNlID0gMDsKKyAgICAgICAgZm9yIChpbnQg dGlsZV9pZHggPSBzbGljZV9hZGRyZXNzOyB0aWxlX2lkeCA8PSBzbGljZV9hZGRyZXNzICsgc2gt PnItPnNoX251bV90aWxlc19pbl9zbGljZV9taW51czE7IHRpbGVfaWR4KyspIHsKKyAgICAgICAg ICAgIHRpbGVfeCA9IHRpbGVfaWR4ICUgcHBzLT5yLT5udW1fdGlsZV9jb2x1bW5zOworICAgICAg ICAgICAgdGlsZV95ID0gdGlsZV9pZHggLyBwcHMtPnItPm51bV90aWxlX2NvbHVtbnM7CisgICAg ICAgICAgICBzaC0+bnVtX2N0dXNfaW5fY3Vycl9zbGljZSArPSBwcHMtPnItPnJvd19oZWlnaHRf dmFsW3RpbGVfeV0gKiBwcHMtPnItPmNvbF93aWR0aF92YWxbdGlsZV94XTsKKyAgICAgICAgfQor ICAgIH0KK30KKworc3RhdGljIHZvaWQgc2hfcXBfeShWVkNTSCAqc2gsIGNvbnN0IEgyNjZSYXdQ UFMgKnBwcywgY29uc3QgSDI2NlJhd1BpY3R1cmVIZWFkZXIgKnBoKQoreworICAgIGNvbnN0IGlu dCBpbml0X3FwID0gcHBzLT5wcHNfaW5pdF9xcF9taW51czI2ICsgMjY7CisKKyAgICBpZiAoIXBw cy0+cHBzX3FwX2RlbHRhX2luZm9faW5fcGhfZmxhZykKKyAgICAgICAgc2gtPnNsaWNlX3FwX3kg PSBpbml0X3FwICsgc2gtPnItPnNoX3FwX2RlbHRhOworICAgIGVsc2UKKyAgICAgICAgc2gtPnNs aWNlX3FwX3kgPSBpbml0X3FwICsgcGgtPnBoX3FwX2RlbHRhOworfQorCitzdGF0aWMgdm9pZCBz aF9pbnRlcihWVkNTSCAqc2gsIGNvbnN0IEgyNjZSYXdTUFMgKnNwcywgY29uc3QgSDI2NlJhd1BQ UyAqcHBzKQoreworICAgIGNvbnN0IEgyNjZSYXdTbGljZUhlYWRlciAqcnNoID0gc2gtPnI7CisK KyAgICBpZiAoIXBwcy0+cHBzX3dwX2luZm9faW5fcGhfZmxhZyAmJgorICAgICAgICAoKHBwcy0+ cHBzX3dlaWdodGVkX3ByZWRfZmxhZyAmJiBJU19QKHJzaCkpIHx8CisgICAgICAgICAocHBzLT5w cHNfd2VpZ2h0ZWRfYmlwcmVkX2ZsYWcgJiYgSVNfQihyc2gpKSkpCisgICAgICAgIHByZWRfd2Vp Z2h0X3RhYmxlKCZzaC0+cHd0LCAmcnNoLT5zaF9wcmVkX3dlaWdodF90YWJsZSk7Cit9CisKK3N0 YXRpYyB2b2lkIHNoX2RlYmxvY2tfb2Zmc2V0cyhWVkNTSCAqc2gpCit7CisgICAgY29uc3QgSDI2 NlJhd1NsaWNlSGVhZGVyICpyID0gc2gtPnI7CisKKyAgICBpZiAoIXItPnNoX2RlYmxvY2tpbmdf ZmlsdGVyX2Rpc2FibGVkX2ZsYWcpIHsKKyAgICAgICAgc2gtPmRlYmxvY2suYmV0YV9vZmZzZXRb TFVNQV0gPSByLT5zaF9sdW1hX2JldGFfb2Zmc2V0X2RpdjIgPDwgMTsKKyAgICAgICAgc2gtPmRl YmxvY2sudGNfb2Zmc2V0W0xVTUFdICAgPSByLT5zaF9sdW1hX3RjX29mZnNldF9kaXYyIDw8IDE7 CisgICAgICAgIHNoLT5kZWJsb2NrLmJldGFfb2Zmc2V0W0NCXSAgID0gci0+c2hfY2JfYmV0YV9v ZmZzZXRfZGl2MiA8PCAxOworICAgICAgICBzaC0+ZGVibG9jay50Y19vZmZzZXRbQ0JdICAgICA9 IHItPnNoX2NiX3RjX29mZnNldF9kaXYyIDw8IDE7CisgICAgICAgIHNoLT5kZWJsb2NrLmJldGFf b2Zmc2V0W0NSXSAgID0gci0+c2hfY3JfYmV0YV9vZmZzZXRfZGl2MiA8PCAxOworICAgICAgICBz aC0+ZGVibG9jay50Y19vZmZzZXRbQ1JdICAgICA9IHItPnNoX2NyX3RjX29mZnNldF9kaXYyIDw8 IDE7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzaF9wYXJ0aXRpb25fY29uc3RyYWludHMoVlZD U0ggKnNoLCBjb25zdCBIMjY2UmF3U1BTICpzcHMsIGNvbnN0IEgyNjZSYXdQaWN0dXJlSGVhZGVy ICpwaCkKK3sKKyAgICBjb25zdCBpbnQgbWluX2NiX2xvZzJfc2l6ZV95ID0gc3BzLT5zcHNfbG9n Ml9taW5fbHVtYV9jb2RpbmdfYmxvY2tfc2l6ZV9taW51czIgKyAyOworICAgIGludCBtaW5fcXRf bG9nMl9zaXplX3lbMl07CisKKyAgICBpZiAoSVNfSShzaC0+cikpIHsKKyAgICAgICAgbWluX3F0 X2xvZzJfc2l6ZV95W0xVTUFdICAgICAgICA9IChtaW5fY2JfbG9nMl9zaXplX3kgKyBwaC0+cGhf bG9nMl9kaWZmX21pbl9xdF9taW5fY2JfaW50cmFfc2xpY2VfbHVtYSk7CisgICAgICAgIG1pbl9x dF9sb2cyX3NpemVfeVtDSFJPTUFdICAgICAgPSAobWluX2NiX2xvZzJfc2l6ZV95ICsgcGgtPnBo X2xvZzJfZGlmZl9taW5fcXRfbWluX2NiX2ludHJhX3NsaWNlX2Nocm9tYSk7CisKKyAgICAgICAg c2gtPm1heF9idF9zaXplW0xVTUFdICAgICAgICAgICA9IDEgPDwgKG1pbl9xdF9sb2cyX3NpemVf eVtMVU1BXSAgKyBwaC0+cGhfbG9nMl9kaWZmX21heF9idF9taW5fcXRfaW50cmFfc2xpY2VfbHVt YSk7CisgICAgICAgIHNoLT5tYXhfYnRfc2l6ZVtDSFJPTUFdICAgICAgICAgPSAxIDw8IChtaW5f cXRfbG9nMl9zaXplX3lbQ0hST01BXSsgcGgtPnBoX2xvZzJfZGlmZl9tYXhfYnRfbWluX3F0X2lu dHJhX3NsaWNlX2Nocm9tYSk7CisKKyAgICAgICAgc2gtPm1heF90dF9zaXplW0xVTUFdICAgICAg ICAgICA9IDEgPDwgKG1pbl9xdF9sb2cyX3NpemVfeVtMVU1BXSAgKyBwaC0+cGhfbG9nMl9kaWZm X21heF90dF9taW5fcXRfaW50cmFfc2xpY2VfbHVtYSk7CisgICAgICAgIHNoLT5tYXhfdHRfc2l6 ZVtDSFJPTUFdICAgICAgICAgPSAxIDw8IChtaW5fcXRfbG9nMl9zaXplX3lbQ0hST01BXSsgcGgt PnBoX2xvZzJfZGlmZl9tYXhfdHRfbWluX3F0X2ludHJhX3NsaWNlX2Nocm9tYSk7CisKKyAgICAg ICAgc2gtPm1heF9tdHRfZGVwdGhbTFVNQV0gICAgICAgICA9IHBoLT5waF9tYXhfbXR0X2hpZXJh cmNoeV9kZXB0aF9pbnRyYV9zbGljZV9sdW1hOworICAgICAgICBzaC0+bWF4X210dF9kZXB0aFtD SFJPTUFdICAgICAgID0gcGgtPnBoX21heF9tdHRfaGllcmFyY2h5X2RlcHRoX2ludHJhX3NsaWNl X2Nocm9tYTsKKworICAgICAgICBzaC0+Y3VfcXBfZGVsdGFfc3ViZGl2ICAgICAgICAgID0gcGgt PnBoX2N1X3FwX2RlbHRhX3N1YmRpdl9pbnRyYV9zbGljZTsKKyAgICAgICAgc2gtPmN1X2Nocm9t YV9xcF9vZmZzZXRfc3ViZGl2ICA9IHBoLT5waF9jdV9jaHJvbWFfcXBfb2Zmc2V0X3N1YmRpdl9p bnRyYV9zbGljZTsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGludCBpID0gTFVNQTsgaSA8 PSBDSFJPTUE7IGkrKykgIHsKKyAgICAgICAgICAgIG1pbl9xdF9sb2cyX3NpemVfeVtpXSAgICAg ICAgPSAobWluX2NiX2xvZzJfc2l6ZV95ICsgcGgtPnBoX2xvZzJfZGlmZl9taW5fcXRfbWluX2Ni X2ludGVyX3NsaWNlKTsKKyAgICAgICAgICAgIHNoLT5tYXhfYnRfc2l6ZVtpXSAgICAgICAgICAg PSAxIDw8IChtaW5fcXRfbG9nMl9zaXplX3lbaV0gICsgcGgtPnBoX2xvZzJfZGlmZl9tYXhfYnRf bWluX3F0X2ludGVyX3NsaWNlKTsKKyAgICAgICAgICAgIHNoLT5tYXhfdHRfc2l6ZVtpXSAgICAg ICAgICAgPSAxIDw8IChtaW5fcXRfbG9nMl9zaXplX3lbaV0gICsgcGgtPnBoX2xvZzJfZGlmZl9t YXhfdHRfbWluX3F0X2ludGVyX3NsaWNlKTsKKyAgICAgICAgICAgIHNoLT5tYXhfbXR0X2RlcHRo W2ldICAgICAgICAgPSBwaC0+cGhfbWF4X210dF9oaWVyYXJjaHlfZGVwdGhfaW50ZXJfc2xpY2U7 CisgICAgICAgIH0KKworICAgICAgICBzaC0+Y3VfcXBfZGVsdGFfc3ViZGl2ICAgICAgICAgID0g cGgtPnBoX2N1X3FwX2RlbHRhX3N1YmRpdl9pbnRlcl9zbGljZTsKKyAgICAgICAgc2gtPmN1X2No cm9tYV9xcF9vZmZzZXRfc3ViZGl2ICA9IHBoLT5waF9jdV9jaHJvbWFfcXBfb2Zmc2V0X3N1YmRp dl9pbnRlcl9zbGljZTsKKyAgICB9CisKKyAgICBzaC0+bWluX3F0X3NpemVbTFVNQV0gICA9IDEg PDwgbWluX3F0X2xvZzJfc2l6ZV95W0xVTUFdOworICAgIHNoLT5taW5fcXRfc2l6ZVtDSFJPTUFd ID0gMSA8PCBtaW5fcXRfbG9nMl9zaXplX3lbQ0hST01BXTsKK30KKworc3RhdGljIHZvaWQgc2hf ZW50cnlfcG9pbnRzKFZWQ1NIICpzaCwgY29uc3QgSDI2NlJhd1NQUyAqc3BzLCBjb25zdCBWVkNQ UFMgKnBwcykKK3sKKyAgICBpZiAoc3BzLT5zcHNfZW50cnlfcG9pbnRfb2Zmc2V0c19wcmVzZW50 X2ZsYWcpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDEsIGogPSAwOyBpIDwgc2gtPm51bV9jdHVz X2luX2N1cnJfc2xpY2U7IGkrKykgeworICAgICAgICAgICAgY29uc3QgaW50IHByZV9jdGJfYWRk cl94ID0gc2gtPmN0Yl9hZGRyX2luX2N1cnJfc2xpY2VbaSAtIDFdICUgcHBzLT5jdGJfd2lkdGg7 CisgICAgICAgICAgICBjb25zdCBpbnQgcHJlX2N0Yl9hZGRyX3kgPSBzaC0+Y3RiX2FkZHJfaW5f Y3Vycl9zbGljZVtpIC0gMV0gLyBwcHMtPmN0Yl93aWR0aDsKKyAgICAgICAgICAgIGNvbnN0IGlu dCBjdGJfYWRkcl94ICAgICA9IHNoLT5jdGJfYWRkcl9pbl9jdXJyX3NsaWNlW2ldICUgcHBzLT5j dGJfd2lkdGg7CisgICAgICAgICAgICBjb25zdCBpbnQgY3RiX2FkZHJfeSAgICAgPSBzaC0+Y3Ri X2FkZHJfaW5fY3Vycl9zbGljZVtpXSAvIHBwcy0+Y3RiX3dpZHRoOworICAgICAgICAgICAgaWYg KHBwcy0+Y3RiX3RvX3Jvd19iZFtjdGJfYWRkcl95XSAhPSBwcHMtPmN0Yl90b19yb3dfYmRbcHJl X2N0Yl9hZGRyX3ldIHx8CisgICAgICAgICAgICAgICAgcHBzLT5jdGJfdG9fY29sX2JkW2N0Yl9h ZGRyX3hdICE9IHBwcy0+Y3RiX3RvX2NvbF9iZFtwcmVfY3RiX2FkZHJfeF0gfHwKKyAgICAgICAg ICAgICAgICAoY3RiX2FkZHJfeSAhPSBwcmVfY3RiX2FkZHJfeSAmJiBzcHMtPnNwc19lbnRyb3B5 X2NvZGluZ19zeW5jX2VuYWJsZWRfZmxhZykpIHsKKyAgICAgICAgICAgICAgICBzaC0+ZW50cnlf cG9pbnRfc3RhcnRfY3R1W2orK10gPSBpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg fQorfQorCitzdGF0aWMgaW50IHNoX2Rlcml2ZShWVkNTSCAqc2gsIGNvbnN0IFZWQ0ZyYW1lUGFy YW1TZXRzICpmcHMpCit7CisgICAgY29uc3QgSDI2NlJhd1NQUyAqc3BzICAgICAgICAgICA9IGZw cy0+c3BzLT5yOworICAgIGNvbnN0IEgyNjZSYXdQUFMgKnBwcyAgICAgICAgICAgPSBmcHMtPnBw cy0+cjsKKyAgICBjb25zdCBIMjY2UmF3UGljdHVyZUhlYWRlciAqcGggID0gZnBzLT5waC5yOwor CisgICAgc2hfc2xpY2VfYWRkcmVzcyhzaCwgc3BzLCBmcHMtPnBwcyk7CisgICAgc2hfaW50ZXIo c2gsIHNwcywgcHBzKTsKKyAgICBzaF9xcF95KHNoLCBwcHMsIHBoKTsKKyAgICBzaF9kZWJsb2Nr X29mZnNldHMoc2gpOworICAgIHNoX3BhcnRpdGlvbl9jb25zdHJhaW50cyhzaCwgc3BzLCBwaCk7 CisgICAgc2hfZW50cnlfcG9pbnRzKHNoLCBzcHMsIGZwcy0+cHBzKTsKKworICAgIHJldHVybiAw OworfQorCitpbnQgZmZfdnZjX2RlY29kZV9zaChWVkNTSCAqc2gsIGNvbnN0IFZWQ0ZyYW1lUGFy YW1TZXRzICpmcHMsIGNvbnN0IENvZGVkQml0c3RyZWFtVW5pdCAqdW5pdCkKK3sKKyAgICBpbnQg cmV0OworCisgICAgaWYgKCFmcHMtPnNwcyB8fCAhZnBzLT5wcHMpCisgICAgICAgIHJldHVybiBB VkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgcmV0ID0gYXZfYnVmZmVyX3JlcGxhY2UoJnNoLT5y cmVmLCB1bml0LT5jb250ZW50X3JlZik7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVy biByZXQ7CisgICAgc2gtPnIgPSAoY29uc3QgSDI2NlJhd1NsaWNlSGVhZGVyICopdW5pdC0+Y29u dGVudDsKKworICAgIHJldCA9IHNoX2Rlcml2ZShzaCwgZnBzKTsKKyAgICBpZiAocmV0IDwgMCkK KyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGli YXZjb2RlYy92dmMvdnZjX3BzLmggYi9saWJhdmNvZGVjL3Z2Yy92dmNfcHMuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5jMmE5ZmU4YjliCi0tLSAvZGV2L251bGwKKysr IGIvbGliYXZjb2RlYy92dmMvdnZjX3BzLmgKQEAgLTAsMCArMSwyNzQgQEAKKy8qCisgKiBWVkMg cGFyYW1ldGVyIHNldCBwYXJzZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjMgTnVvIE1pCisg KgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor ICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor ICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT b2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG bG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpZm5kZWYgQVZDT0RFQ19W VkNfUFNfSAorI2RlZmluZSBBVkNPREVDX1ZWQ19QU19ICisKKyNpbmNsdWRlICJsaWJhdmNvZGVj L3Z2Yy5oIgorCisjZGVmaW5lIElTX0lEUihzKSAgKChzKS0+dmNsX3VuaXRfdHlwZSA9PSBWVkNf SURSX1dfUkFETCB8fCAocyktPnZjbF91bml0X3R5cGUgPT0gVlZDX0lEUl9OX0xQKQorI2RlZmlu ZSBJU19DUkEocykgICgocyktPnZjbF91bml0X3R5cGUgPT0gVlZDX0NSQV9OVVQpCisjZGVmaW5l IElTX0lSQVAocykgKElTX0lEUihzKSB8fCBJU19DUkEocykpCisjZGVmaW5lIElTX0dEUihzKSAg KChzKS0+dmNsX3VuaXRfdHlwZSA9PSBWVkNfR0RSX05VVCkKKyNkZWZpbmUgSVNfQ1ZTUyhzKSAo SVNfSVJBUChzKXx8IElTX0dEUihzKSkKKyNkZWZpbmUgSVNfQ0xWU1MocykgKElTX0NWU1Mocykg JiYgcy0+bm9fb3V0cHV0X2JlZm9yZV9yZWNvdmVyeV9mbGFnKQorI2RlZmluZSBJU19SQVNMKHMp ICgocyktPnZjbF91bml0X3R5cGUgPT0gVlZDX1JBU0xfTlVUKQorI2RlZmluZSBJU19SQURMKHMp ICgocyktPnZjbF91bml0X3R5cGUgPT0gVlZDX1JBRExfTlVUKQorCisjZGVmaW5lIElTX0kocnNo KSAoKHJzaCktPnNoX3NsaWNlX3R5cGUgPT0gVlZDX1NMSUNFX1RZUEVfSSkKKyNkZWZpbmUgSVNf UChyc2gpICgocnNoKS0+c2hfc2xpY2VfdHlwZSA9PSBWVkNfU0xJQ0VfVFlQRV9QKQorI2RlZmlu ZSBJU19CKHJzaCkgKChyc2gpLT5zaF9zbGljZV90eXBlID09IFZWQ19TTElDRV9UWVBFX0IpCisK KyNkZWZpbmUgSU5WX1BPQyBJTlRfTUlOCisjZGVmaW5lIEdEUl9JU19SRUNPVkVSRUQocykgIChz LT5nZHJfcmVjb3ZlcnlfcG9pbnRfcG9jID09IElOVl9QT0MpCisjZGVmaW5lIEdEUl9TRVRfUkVD T1ZFUkVEKHMpIChzLT5nZHJfcmVjb3ZlcnlfcG9pbnRfcG9jID0gIElOVl9QT0MpCisKKyNkZWZp bmUgTE1DU19NQVhfQklUX0RFUFRIICAxMgorI2RlZmluZSBMTUNTX01BWF9MVVRfU0laRSAgICgx IDw8IExNQ1NfTUFYX0JJVF9ERVBUSCkKKyNkZWZpbmUgTE1DU19NQVhfQklOX1NJWkUgICAxNgor I2RlZmluZSBMQURGX01BWF9JTlRFUlZBTCAgIDUKKworZW51bSB7CisgICAgQ0hST01BX0ZPUk1B VF9NT05PLAorICAgIENIUk9NQV9GT1JNQVRfNDIwLAorICAgIENIUk9NQV9GT1JNQVRfNDIyLAor ICAgIENIUk9NQV9GT1JNQVRfNDQ0LAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgVlZDU1BTIHsKKyAg ICBBVkJ1ZmZlclJlZiAqcnJlZjsKKyAgICBjb25zdCBIMjY2UmF3U1BTICpyOworCisgICAgLy9k ZXJpdmVkIHZhbHVlcworICAgIHVpbnQxNl90ICAgIHdpZHRoOworICAgIHVpbnQxNl90ICAgIGhl aWdodDsKKyAgICB1aW50OF90ICAgICBoc2hpZnRbVlZDX01BWF9TQU1QTEVfQVJSQVlTXTsKKyAg ICB1aW50OF90ICAgICB2c2hpZnRbVlZDX01BWF9TQU1QTEVfQVJSQVlTXTsKKyAgICB1aW50MzJf dCAgICBtYXhfcGljX29yZGVyX2NudF9sc2I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv Ly88IE1heFBpY09yZGVyQ250THNiCisKKyAgICB1aW50OF90ICAgICBwaXhlbF9zaGlmdDsKKyAg ICBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdDsKKworICAgIHVpbnQ4X3QgICAgIGJpdF9kZXB0 aDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEJpdERlcHRo CisgICAgdWludDhfdCAgICAgcXBfYmRfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8vLzwgUXBCZE9mZnNldAorICAgIHVpbnQ4X3QgICAgIGN0Yl9sb2cyX3Np emVfeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEN0YkxvZzJTaXpl WQorICAgIHVpbnQ4X3QgICAgIGN0Yl9zaXplX3k7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvLy88IEN0YlNpemVZCisgICAgdWludDhfdCAgICAgbWluX2NiX2xvZzJf c2l6ZV95OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTWluQ2JMb2cyU2l6 ZVkKKyAgICB1aW50OF90ICAgICBtaW5fY2Jfc2l6ZV95OyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLy8vPCBNaW5DYlNpemVZCisgICAgdWludDhfdCAgICAgbWF4X3RiX3Np emVfeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTWF4VGJTaXpl WQorICAgIHVpbnQ4X3QgICAgIG1heF90c19zaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvLy88IE1heFRzU2l6ZQorICAgIHVpbnQ4X3QgICAgIG1heF9udW1fbWVy Z2VfY2FuZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IE1heE51bU1lcmdl Q2FuZAorICAgIHVpbnQ4X3QgICAgIG1heF9udW1faWJjX21lcmdlX2NhbmQ7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvLy88IE1heE51bUliY01lcmdlQ2FuZAorICAgIHVpbnQ4X3QgICAg IG1heF9udW1fZ3BtX21lcmdlX2NhbmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88 IE1heE51bUdwbU1lcmdlQ2FuZAorICAgIHVpbnQ4X3QgICAgIG51bV9sYWRmX2ludGVydmFsczsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IHNwc19udW1fbGFkZl9pbnRlcnZh bHNfbWludXMyICsgMjsKKyAgICB1aW50MzJfdCAgICBsYWRmX2ludGVydmFsX2xvd2VyX2JvdW5k W0xBREZfTUFYX0lOVEVSVkFMXTsgICAgICAgLy8vPCBTcHNMYWRmSW50ZXJ2YWxMb3dlckJvdW5k W10KKyAgICB1aW50OF90ICAgICBsb2cyX3BhcmFsbGVsX21lcmdlX2xldmVsOyAgICAgICAgICAg ICAgICAgICAgICAgICAgLy8vPCBzcHNfbG9nMl9wYXJhbGxlbF9tZXJnZV9sZXZlbF9taW51czIg KyAyOworICAgIHVpbnQ4X3QgICAgIGxvZzJfdHJhbnNmb3JtX3JhbmdlOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvLy88IExvZzJUcmFuc2Zvcm1SYW5nZQorICAgIGludDhfdCAgICAg IGNocm9tYV9xcF90YWJsZVszXVtWVkNfTUFYX1BPSU5UU19JTl9RUF9UQUJMRV07ICAgICAvLy88 IENocm9tYVFwVGFibGUKK30gVlZDU1BTOworCit0eXBlZGVmIHN0cnVjdCBEQlBhcmFtcyB7Cisg ICAgaW50OF90IGJldGFfb2Zmc2V0W1ZWQ19NQVhfU0FNUExFX0FSUkFZU107CisgICAgaW50OF90 IHRjX29mZnNldFtWVkNfTUFYX1NBTVBMRV9BUlJBWVNdOworfSBEQlBhcmFtczsKKwordHlwZWRl ZiBzdHJ1Y3QgVlZDUFBTIHsKKyAgICBBVkJ1ZmZlclJlZiAqcnJlZjsKKyAgICBjb25zdCBIMjY2 UmF3UFBTICpyOworCisgICAgLy9kZXJpdmVkIHZhbHVlOworICAgIGludDhfdCAgIGNocm9tYV9x cF9vZmZzZXRbM107ICAgICAgICAgICAgICAgICAgICAgICAvLy88IHBwc19jYl9xcF9vZmZzZXQs IHBwc19jcl9xcF9vZmZzZXQsIHBwc19qb2ludF9jYmNyX3FwX29mZnNldF92YWx1ZQorICAgIGlu dDhfdCAgIGNocm9tYV9xcF9vZmZzZXRfbGlzdFs2XVszXTsgICAgICAgICAgICAgICAvLy88IHBw c19jYl9xcF9vZmZzZXRfbGlzdCwgcHBzX2NyX3FwX29mZnNldF9saXN0LCBwcHNfam9pbnRfY2Jj cl9xcF9vZmZzZXRfbGlzdAorCisgICAgdWludDE2X3Qgd2lkdGg7CisgICAgdWludDE2X3QgaGVp Z2h0OworCisgICAgdWludDE2X3Qgc2xpY2Vfc3RhcnRfb2Zmc2V0W1ZWQ19NQVhfU0xJQ0VTXTsK KyAgICB1aW50MTZfdCBudW1fY3R1c19pbl9zbGljZSBbVlZDX01BWF9TTElDRVNdOworCisgICAg dWludDE2X3QgbWluX2NiX3dpZHRoOworICAgIHVpbnQxNl90IG1pbl9jYl9oZWlnaHQ7CisKKyAg ICB1aW50MTZfdCBjdGJfd2lkdGg7CisgICAgdWludDE2X3QgY3RiX2hlaWdodDsKKyAgICB1aW50 MzJfdCBjdGJfY291bnQ7CisKKyAgICB1aW50MTZfdCBtaW5fcHVfd2lkdGg7CisgICAgdWludDE2 X3QgbWluX3B1X2hlaWdodDsKKyAgICB1aW50MTZfdCBtaW5fdHVfd2lkdGg7CisgICAgdWludDE2 X3QgbWluX3R1X2hlaWdodDsKKworICAgIHVpbnQzMl90ICpjdGJfYWRkcl9pbl9zbGljZTsgICAg ICAgICAgICAvLy88IEN0YkFkZHJJbkN1cnJTbGljZSBmb3IgZW50aXJlIHBpY3R1cmUKKyAgICB1 aW50MTZfdCAqY29sX2JkOworICAgIHVpbnQxNl90ICpyb3dfYmQ7CisgICAgdWludDE2X3QgKmN0 Yl90b19jb2xfYmQ7CisgICAgdWludDE2X3QgKmN0Yl90b19yb3dfYmQ7CisKKyAgICB1aW50MTZf dCB3aWR0aDMyOyAgICAgICAgICAgICAgICAgICAgICAgLy8vPCB3aWR0aCAgaW4gMzIgcGl4ZWxz CisgICAgdWludDE2X3QgaGVpZ2h0MzI7ICAgICAgICAgICAgICAgICAgICAgIC8vLzwgaGVpZ2h0 IGluIDMyIHBpeGVscworICAgIHVpbnQxNl90IHdpZHRoNjQ7ICAgICAgICAgICAgICAgICAgICAg ICAvLy88IHdpZHRoICBpbiA2NCBwaXhlbHMKKyAgICB1aW50MTZfdCBoZWlnaHQ2NDsgICAgICAg ICAgICAgICAgICAgICAgLy8vPCBoZWlnaHQgaW4gNjQgcGl4ZWxzCisKKyAgICB1aW50MTZfdCBy ZWZfd3JhcGFyb3VuZF9vZmZzZXQ7ICAgICAgICAgLy8vPCBQcHNSZWZXcmFwYXJvdW5kT2Zmc2V0 CisKK30gVlZDUFBTOworCisjZGVmaW5lIE1BWF9XRUlHSFRTIDE1Cit0eXBlZGVmIHN0cnVjdCBQ cmVkV2VpZ2h0VGFibGUgeworICAgIHVpbnQ4X3QgbG9nMl9kZW5vbVsyXTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgbHVtYV9sb2cyX3dlaWdodF9kZW5vbSwgQ2hy b21hTG9nMldlaWdodERlbm9tCisKKyAgICB1aW50OF90IG5iX3dlaWdodHNbMl07ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IG51bV9sMF93ZWlnaHRzLCBudW1fbDFf d2VpZ2h0cworICAgIHVpbnQ4X3Qgd2VpZ2h0X2ZsYWdbMl1bMl1bTUFYX1dFSUdIVFNdOyAgICAg ICAgICAgICAgICAgICAgIC8vLzwgbHVtYV93ZWlnaHRfbDBfZmxhZywgY2hyb21hX3dlaWdodF9s MF9mbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8vLzwgbHVtYV93ZWlnaHRfbDFfZmxhZywgY2hyb21hX3dlaWdodF9s MV9mbGFnLAorICAgIGludDE2X3Qgd2VpZ2h0WzJdW1ZWQ19NQVhfU0FNUExFX0FSUkFZU11bTUFY X1dFSUdIVFNdOyAgICAgIC8vLzwgTHVtYVdlaWdodEwwLCBMdW1hV2VpZ2h0TDEsIENocm9tYVdl aWdodEwwLCBDaHJvbWFXZWlnaHRMMQorICAgIGludDE2X3Qgb2Zmc2V0WzJdW1ZWQ19NQVhfU0FN UExFX0FSUkFZU11bTUFYX1dFSUdIVFNdOyAgICAgIC8vLzwgbHVtYV9vZmZzZXRfbDAsIGx1bWFf b2Zmc2V0X2wxLCBDaHJvbWFPZmZzZXRMMCwgQ2hyb21hT2Zmc2V0TDEKK30gUHJlZFdlaWdodFRh YmxlOworCit0eXBlZGVmIHN0cnVjdCBWVkNQSCB7CisgICAgQVZCdWZmZXJSZWYgKnJyZWY7Cisg ICAgY29uc3QgSDI2NlJhd1BpY3R1cmVIZWFkZXIgKnI7CisKKyAgICAvL2Rlcml2ZWQgdmFsdWVz CisgICAgdWludDMyX3QgbWF4X251bV9zdWJibG9ja19tZXJnZV9jYW5kOyAgICAgICAgICAgLy8v PCBNYXhOdW1TdWJibG9ja01lcmdlQ2FuZAorICAgIGludDMyX3QgIHBvYzsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8vLzwgUGljT3JkZXJDbnRWYWwKKyAgICBQcmVkV2VpZ2h0 VGFibGUgcHd0OworfSBWVkNQSDsKKworI2RlZmluZSBWVkNfTUFYX0FMRl9DT1VOVCAgICAgICAg OAorI2RlZmluZSBWVkNfTUFYX0xNQ1NfQ09VTlQgICAgICAgNAorI2RlZmluZSBWVkNfTUFYX1NM X0NPVU5UICAgICAgICAgOAorCit0eXBlZGVmIHN0cnVjdCBWVkNQYXJhbVNldHMgeworICAgIEFW QnVmZmVyUmVmICp2cHNfbGlzdFtWVkNfTUFYX1ZQU19DT1VOVF07CisgICAgQVZCdWZmZXJSZWYg KnNwc19saXN0W1ZWQ19NQVhfU1BTX0NPVU5UXTsKKyAgICBBVkJ1ZmZlclJlZiAqcHBzX2xpc3Rb VlZDX01BWF9QUFNfQ09VTlRdOworICAgIEFWQnVmZmVyUmVmICphbGZfbGlzdFtWVkNfTUFYX0FM Rl9DT1VOVF07CisgICAgQVZCdWZmZXJSZWYgKmxtY3NfbGlzdFtWVkNfTUFYX0xNQ1NfQ09VTlRd OworICAgIEFWQnVmZmVyUmVmICpzY2FsaW5nX2xpc3RbVlZDX01BWF9TTF9DT1VOVF07Cit9IFZW Q1BhcmFtU2V0czsKKworI2RlZmluZSBBTEZfTlVNX0ZJTFRFUlNfTFVNQSAgICAyNQorI2RlZmlu ZSBBTEZfTlVNX0ZJTFRFUlNfQ0hST01BICAgOAorI2RlZmluZSBBTEZfTlVNX0ZJTFRFUlNfQ0Mg ICAgICAgNQorCisjZGVmaW5lIEFMRl9OVU1fQ09FRkZfTFVNQSAgICAgIDEyCisjZGVmaW5lIEFM Rl9OVU1fQ09FRkZfQ0hST01BICAgICA2CisjZGVmaW5lIEFMRl9OVU1fQ09FRkZfQ0MgICAgICAg ICA3CisKK3R5cGVkZWYgc3RydWN0IFZWQ0FMRiB7CisgICAgQVZCdWZmZXJSZWYgKnJyZWY7CisK KyAgICBpbnQxNl90IGx1bWFfY29lZmYgICAgIFtBTEZfTlVNX0ZJTFRFUlNfTFVNQV1bQUxGX05V TV9DT0VGRl9MVU1BXTsKKyAgICB1aW50OF90IGx1bWFfY2xpcF9pZHggIFtBTEZfTlVNX0ZJTFRF UlNfTFVNQV1bQUxGX05VTV9DT0VGRl9MVU1BXTsKKworICAgIHVpbnQ4X3QgbnVtX2Nocm9tYV9m aWx0ZXJzOworICAgIGludDE2X3QgY2hyb21hX2NvZWZmICAgW0FMRl9OVU1fRklMVEVSU19DSFJP TUFdW0FMRl9OVU1fQ09FRkZfQ0hST01BXTsKKyAgICB1aW50OF90IGNocm9tYV9jbGlwX2lkeFtB TEZfTlVNX0ZJTFRFUlNfQ0hST01BXVtBTEZfTlVNX0NPRUZGX0NIUk9NQV07CisKKyAgICB1aW50 OF90IG51bV9jY19maWx0ZXJzWzJdOyAgICAgICAgLy8vPCBhbGZfY2NfY2JfZmlsdGVyc19zaWdu YWxsZWRfbWludXMxICsgMSwgYWxmX2NjX2NyX2ZpbHRlcnNfc2lnbmFsbGVkX21pbnVzMSArIDEK KyAgICBpbnQxNl90IGNjX2NvZWZmWzJdW0FMRl9OVU1fRklMVEVSU19DQ11bQUxGX05VTV9DT0VG Rl9DQ107Cit9IFZWQ0FMRjsKKworZW51bSB7CisgIFNMX1NUQVJUXzJ4MiAgICA9IDAsCisgIFNM X1NUQVJUXzR4NCAgICA9IDIsCisgIFNMX1NUQVJUXzh4OCAgICA9IDgsCisgIFNMX1NUQVJUXzE2 eDE2ICA9IDE0LAorICBTTF9TVEFSVF8zMngzMiAgPSAyMCwKKyAgU0xfU1RBUlRfNjR4NjQgID0g MjYsCisgIFNMX01BWF9JRCAgICAgICA9IDI4LAorfTsKKworI2RlZmluZSBTTF9NQVhfTUFUUklY X1NJWkUgOAorCit0eXBlZGVmIHN0cnVjdCBWVkNTY2FsaW5nTGlzdCB7CisgICAgQVZCdWZmZXJS ZWYgKnJyZWY7CisKKyAgICB1aW50OF90IHNjYWxpbmdfbWF0cml4X3JlY1tTTF9NQVhfSURdW1NM X01BWF9NQVRSSVhfU0laRSAqIFNMX01BWF9NQVRSSVhfU0laRV07ICAvLy88IFNjYWxpbmdNYXRy aXhSZWMKKyAgICB1aW50OF90IHNjYWxpbmdfbWF0cml4X2RjX3JlY1tTTF9NQVhfSUQgLSBTTF9T VEFSVF8xNngxNl07ICAgICAgICAgICAgICAgICAgICAgICAvLy88IFNjYWxpbmdNYXRyaXhEY1Jl Y1tyZWZJZCDiiJIgMTRdCit9IFZWQ1NjYWxpbmdMaXN0OworCit0eXBlZGVmIHN0cnVjdCBWVkNM TUNTIHsKKyAgICB1aW50OF90ICBtaW5fYmluX2lkeDsKKyAgICB1aW50OF90ICBtYXhfYmluX2lk eDsKKworICAgIC8vKjIgZm9yIGhpZ2ggZGVwdGgKKyAgICB1aW50OF90ICBmd2RfbHV0W0xNQ1Nf TUFYX0xVVF9TSVpFICogMl07CisgICAgdWludDhfdCAgaW52X2x1dFtMTUNTX01BWF9MVVRfU0la RSAqIDJdOworCisgICAgdWludDE2X3QgcGl2b3RbTE1DU19NQVhfQklOX1NJWkUgKyAxXTsKKyAg ICB1aW50MTZfdCBjaHJvbWFfc2NhbGVfY29lZmZbTE1DU19NQVhfQklOX1NJWkVdOworfSBWVkNM TUNTOworCit0eXBlZGVmIHN0cnVjdCBWVkNGcmFtZVBhcmFtU2V0cyB7CisgICAgQVZCdWZmZXJS ZWYgICAgICAgICAgICAqc3BzX2J1ZjsKKyAgICBBVkJ1ZmZlclJlZiAgICAgICAgICAgICpwcHNf YnVmOworICAgIEFWQnVmZmVyUmVmICAgICAgICAgICAgKmFsZl9saXN0W1ZWQ19NQVhfQUxGX0NP VU5UXTsKKyAgICBBVkJ1ZmZlclJlZiAgICAgICAgICAgICpzbF9idWY7CisKKyAgICBjb25zdCBW VkNTUFMgICAgICAgICAgICpzcHM7CisgICAgY29uc3QgVlZDUFBTICAgICAgICAgICAqcHBzOwor ICAgIFZWQ1BIICAgICAgICAgICAgICAgICAgIHBoOworICAgIFZWQ0xNQ1MgICAgICAgICAgICAg ICAgIGxtY3M7CisgICAgY29uc3QgVlZDU2NhbGluZ0xpc3QgICAqc2w7Cit9IFZWQ0ZyYW1lUGFy YW1TZXRzOworCit0eXBlZGVmIHN0cnVjdCBWVkNTSCB7CisgICAgQVZCdWZmZXJSZWYgKnJyZWY7 CisgICAgY29uc3QgSDI2NlJhd1NsaWNlSGVhZGVyICpyOworCisgICAgLy8gZGVyaXZlZCB2YWx1 ZXMKKyAgICAvLyBjdHUgYWRkcmVzcworICAgIHVpbnQzMl90ICAgICAgICBudW1fY3R1c19pbl9j dXJyX3NsaWNlOyAgICAgICAgICAgICAgICAgLy8vPCBOdW1DdHVzSW5DdXJyU2xpY2UKKyAgICBj b25zdCB1aW50MzJfdCogY3RiX2FkZHJfaW5fY3Vycl9zbGljZTsgICAgICAgICAgICAgICAgIC8v LzwgQ3RiQWRkckluQ3VyclNsaWNlCisKKyAgICAvLyBpbnRlcgorICAgIFByZWRXZWlnaHRUYWJs ZSBwd3Q7CisgICAgaW50OF90ICAgcmVmX2lkeF9zeW1bMl07ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvLy88IFJlZklkeFN5bUwwLCBSZWZJZHhTeW1MMQorCisgICAgLy8gcXBfeQor ICAgIGludDhfdCAgIHNsaWNlX3FwX3k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLy8vPCBTbGljZVFwWQorCisgICAgLy8gZGVibG9ja19vZmZzZXRzCisgICAgREJQYXJhbXMg ZGVibG9jazsKKworICAgIC8vIHBhcnRpdGlvbiBjb25zdHJhaW5zCisgICAgdWludDhfdCAgbWlu X3F0X3NpemVbMl07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IE1pblF0U2l6 ZVksIE1pblF0U2l6ZUMKKyAgICB1aW50OF90ICBtYXhfYnRfc2l6ZVsyXTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8vLzwgTWF4QnRTaXplWSwgTWF4QnRTaXplQworICAgIHVpbnQ4 X3QgIG1heF90dF9zaXplWzJdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBN YXhUdFNpemVZLCBNYXhUdFNpemVDCisgICAgdWludDhfdCAgbWF4X210dF9kZXB0aFsyXTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IE1heE10dERlcHRoWSwgTWF4TXR0RGVwdGhD CisgICAgdWludDhfdCAgY3VfcXBfZGVsdGFfc3ViZGl2OyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvLy88IEN1UXBEZWx0YVN1YmRpdgorICAgIHVpbnQ4X3QgIGN1X2Nocm9tYV9xcF9vZmZz ZXRfc3ViZGl2OyAgICAgICAgICAgICAgICAgICAgLy8vPCBDdUNocm9tYVFwT2Zmc2V0U3ViZGl2 CisKKyAgICAvLyBlbnRyaWVzCisgICAgdWludDMyX3QgZW50cnlfcG9pbnRfc3RhcnRfY3R1W1ZW Q19NQVhfRU5UUllfUE9JTlRTXTsgICAvLy88IGVudHJ5IHBvaW50IHN0YXJ0IGluIGN0dV9hZGRy Cit9IFZWQ1NIOworCitzdHJ1Y3QgVlZDQ29udGV4dDsKKworaW50IGZmX3Z2Y19kZWNvZGVfZnJh bWVfcHMoVlZDRnJhbWVQYXJhbVNldHMgKmZwcywgc3RydWN0IFZWQ0NvbnRleHQgKnMpOworaW50 IGZmX3Z2Y19kZWNvZGVfYXBzKFZWQ1BhcmFtU2V0cyAqcHMsIGNvbnN0IENvZGVkQml0c3RyZWFt VW5pdCAqdW5pdCk7CitpbnQgZmZfdnZjX2RlY29kZV9zaChWVkNTSCAqc2gsIGNvbnN0IFZWQ0Zy YW1lUGFyYW1TZXRzICpwcywgY29uc3QgQ29kZWRCaXRzdHJlYW1Vbml0ICp1bml0KTsKK3ZvaWQg ZmZfdnZjX2ZyYW1lX3BzX2ZyZWUoVlZDRnJhbWVQYXJhbVNldHMgKmZwcyk7Cit2b2lkIGZmX3Z2 Y19wc191bmluaXQoVlZDUGFyYW1TZXRzICpwcyk7CisKKyNlbmRpZiAvKiBBVkNPREVDX1ZWQ19Q U19IICovCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Z2Yy92dmNkZWMuaCBiL2xpYmF2Y29kZWMv dnZjL3Z2Y2RlYy5oCmluZGV4IDY5OGFiODliOWQuLmE0NmVjMjhiOGEgMTAwNjQ0Ci0tLSBhL2xp YmF2Y29kZWMvdnZjL3Z2Y2RlYy5oCisrKyBiL2xpYmF2Y29kZWMvdnZjL3Z2Y2RlYy5oCkBAIC0z Miw2ICszMiw4IEBACiAjaW5jbHVkZSAibGliYXZjb2RlYy92dmMuaCIKICNpbmNsdWRlICJsaWJh dnV0aWwvZXhlY3V0b3IuaCIKIAorI2luY2x1ZGUgInZ2Y19wcy5oIgorCiAjZGVmaW5lIExVTUEg ICAgICAgICAgICAgICAgICAgIDAKICNkZWZpbmUgQ0hST01BICAgICAgICAgICAgICAgICAgMQog I2RlZmluZSBDQiAgICAgICAgICAgICAgICAgICAgICAxCkBAIC0yNzEsNiArMjczLDggQEAgdHlw ZWRlZiBzdHJ1Y3QgVlZDQ29udGV4dCB7CiAgICAgQ29kZWRCaXRzdHJlYW1Db250ZXh0ICpjYmM7 CiAgICAgQ29kZWRCaXRzdHJlYW1GcmFnbWVudCBjdXJyZW50X2ZyYW1lOwogCisgICAgVlZDUGFy YW1TZXRzIHBzOworCiAgICAgaW50IHRlbXBvcmFsX2lkOyAgICAgICAgLy8vPCB0ZW1wb3JhbF9p ZF9wbHVzMSAtIDEKICAgICBpbnQgcG9jX3RpZDA7CiAKLS0gCjIuMjUuMQoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcg bGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9s aXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBv ciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5z dWJzY3JpYmUiLgo=