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 1A04747ECC for ; Sun, 31 Dec 2023 08:20:07 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0854668CCB4; Sun, 31 Dec 2023 10:20:05 +0200 (EET) Received: from APC01-PSA-obe.outbound.protection.outlook.com (mail-psaapc01olkn2068.outbound.protection.outlook.com [40.92.52.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 61CC768C454 for ; Sun, 31 Dec 2023 10:19:57 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aeABBDuxGMVpdisQ6EAgNAsftUcPyjljjH1OelQWJi26Osn8kZwjKaO6JV8WJ9rd6rVpXgkd1cW2g58oFl9gTL9kG8kS81Vlo0ow13JiRrW1hJz3dfaB1yzi8vIayFy6KoiIZncI1ryf6YqZtQ5diwbBpuua+ZIKyhCQ4PtOoHM6J88aeYCK6Bgq7CwweFy7pV7tbh5agMrW7vdxGYyBh37iyq3aBzDVLkV6+e9YklcVgJbtLHvSXyzRPTMUrBDezn4YZoxeTjppqavGYBLxpx7BymemMTuLU0nJaVtNAgChfRIdFxa1bXmIs2qQtg758taxNcbCdVI38h0UZL9rEQ== 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=g4J8LRFNlnZa0KAtQ5nx2K1uyeuvEOBY200hWiEOkW8=; b=MHo9Usx4CA6JJByh6t88fBenDD/yucvoFWe9uEbkPWiJVX7Y4XJRoMliMT0XTdkegX4Va2i/cRo4taGNTR+KZLsD5bgA85zKVFC0KZx+A6CphBDqSM0zBw1uT8BA+J+zYVZVegXLzim6q4napmw/MUBRLt9kIiDWbNCsxlLCJOQgPRRunYeqNDRVfMREVXCVfYRP8GAeDIVnvqStvKeGXheYaW5CFaPUlt8UHd/hc7dAYCdlXv66gK5GFnRPCLJG6n/5titzMpJ+oD8UbHoZ2KpZcDswpmysu9NRa5ibogZK6k9w8Fwo0Eh0qP3qHt0XvFrQzhvne/Tu/EoPjjhqtg== 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=g4J8LRFNlnZa0KAtQ5nx2K1uyeuvEOBY200hWiEOkW8=; b=EZGxCiAWuX396Q4vlNZekSf3yX3A0guGuIga0sK2rTl93sdMZaQPaobMz2/XQoeNmrnDDUCuSU+vzXMmWnuup1MNeC6jNDfDuqxLeA6J+jsJt1rfysk1KsDcYFTP/g0AfpGObaJ3v7+9hg7U8XlUSxMC4TNSVpKvQZaFMCl6kahAxzvliAyteNfMIiAXrboai+XhVoH8x8UFrAvkgxzk6V/Cs25oaq++O0pUsTP2PtCw34Vb17r0tUq7rfkeCsvpyo77QzQtjIWkoJ0RzfwKL/E4pSaalsDF9QpDuz249NY6lT3PWovZI2Mg15sGeqtQuadWI3WFBX5eeXoOEY0tTw== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by JH0PR06MB6367.apcprd06.prod.outlook.com (2603:1096:990:c::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7135.21; Sun, 31 Dec 2023 08:19:45 +0000 Received: from TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::e139:fd7a:1b66:a3f7]) by TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::e139:fd7a:1b66:a3f7%6]) with mapi id 15.20.7135.023; Sun, 31 Dec 2023 08:19:45 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sun, 31 Dec 2023 16:18:47 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231231081858.1704-1-nuomi2021@gmail.com> References: <20231231081858.1704-1-nuomi2021@gmail.com> X-TMN: [0DbWya0vKEuJ/fW9HXr5hxOWkcsYl+ft] X-ClientProxiedBy: SI2PR02CA0039.apcprd02.prod.outlook.com (2603:1096:4:196::9) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20231231081858.1704-3-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|JH0PR06MB6367:EE_ X-MS-Office365-Filtering-Correlation-Id: ea8d7263-10dd-4f4e-ff8e-08dc09d93edd X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: hs8aH43vxGnzILzZ5TNmgLSUcSgG2g/TPVae4gcVvUJ9udkjcc3d68wvw6QuGW1OHg5e48QNFMNVRIXFcRWsJGrBdqVEhAqqK5HyyDyEQDYJHoT4iOLP8m/awGQ8mac3m5LYnrab5q+3eIWNWXk9HF+pqy+TTzRBX16tvdZfiBdu63Qw5HDEbR9SbtSSmk/Lq3H7QSzO/RKi20O0C9QH4Z3ZAt7vEHVykmZebuiMHouuhfd750+XycbLYB2se+aGS3IeMQ2R6293XtbFOU/fOoWb+1YQYXPyHSlyNSWQIiRvgeZf51/UG08xhxDD0qL5A//xp6sB4CrsNW5utnNItCTwxFd4Pp/pifndcYgzvY7ud7AmmJmKe0QQ7y5yZxK4WOlpooLxz9sb7asPYK3rogfPt47bUomW/gMde34SjQ493YGJnnwZXVGDBSHKq7NvJ21tRcSYE95YkdmFYIx27sLJKH+tiNKUoDfRjN1Vbf7saLN9ahKFgJE8qIg3061XAZv3ylgl2i6XErLRPK/30o05QQjuoMYnxDFc/+hIenGZV4kokgZTxH8lijkmtrD/quJFey/bCmdbsENl5s5gTWiKzVFT7l9G3FOoHKzxQW2NDj5BlRINRgBFLqfb/bQI X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?U1RhMzdEZVFrR0R2c2l4TmJyU2hvUFlRaXBHeSt4V2gvbnc5MHA3Tk80UCtX?= =?utf-8?B?NHFOeERNcmFKZFFHVjAzWUdSNjNVdWZuSmI4RytGV3FmWXliQno3ZWQ1SjVn?= =?utf-8?B?eGk1VVYvQ2h1V3hHZlpFNzhQYlJpZlBxa2dQbXBLL25YUWRwYjY3TDdldDdr?= =?utf-8?B?aCt0Y3FVOE40c3RDRkhUN01BQmhOZ2g1bDdrcmplazFuc3VEeFZTbzlDck5P?= =?utf-8?B?cVhLVG1DbS92NkV4RnhueXVGYzN5UkR5YUhNVDN5dXMyN2RjTHNhNjdqWkJu?= =?utf-8?B?MVVEdGRiUmJMRDlFTjFuMDFwZFRUZlZhWDZ1UzR5clhVOHR4eHNnS1Rpc2dk?= =?utf-8?B?cHVuTEgrdmJWMWVUNzMrWEwvdWVnMFhERFRERW93TUtFNjJ3OFBtbngyNEV4?= =?utf-8?B?TTVob1lZSHIyWlFhOElnSGpmYUV3TTg2dHdJMnA4V2NlNFJFbHdRd3B5Y3U4?= =?utf-8?B?K0tUOWN4bnNuYS9GWlZ0RHlPUnlaN3B1TFpWVW16UVp1YmxIUTJrWDZ6VkVR?= =?utf-8?B?TVRNemJwb2lwYWMydXRrM0tDaEpNSmhqK1RhZTl2eE44TTZhMzB6NVhsSit5?= =?utf-8?B?MVF6ei9RL3pYMHROcURXSFhOUDArM0ZqK1NnemtBY2g5czE0L2tMalJLaVpG?= =?utf-8?B?ZmNqR09Hdkx2Ym5JSExWakV4QmFsVjdUaSt4QWJKekJnNW5TeWpWb0hpbzkv?= =?utf-8?B?UHNmYUg5NS96MTF6S3JIVG8wUkVMZmgzT2FITkdhMUYzMHVDOHNQMFJnMUdm?= =?utf-8?B?OXdaY29zc0VnTVNENjhIbzVMK1VQNXJZMWp4ajYyT2pvaG4yYmF2OHBhQ0tx?= =?utf-8?B?OUplMGtSNFVLd3IzV1JLUmdlekVPeDJpRUlQZVJLMGdtK1pwc0N5NEF3dDFq?= =?utf-8?B?TFZvR0EvQmZuUWx1eDhRRHBlSjhzbkczZDVVdUl5YmZGUFc4UnQ5dVRpbkZq?= =?utf-8?B?MUl0ZDRUaDRTaG1PSGpiY2lRUzVRRHJmMGs5UzdWeFVQbGFRakhra3ZOdk5I?= =?utf-8?B?Y29LbVBZUXUwWUsyMlJLMHdEMk5yUkJra0F2dTFPNFJtdXpTT0hiWDJ6b2M2?= =?utf-8?B?cUZaenZLY0lCenRuelR5blU2clNob00xcGdQMFNIcmIxZHhSVVgvaHd2Smgr?= =?utf-8?B?YllKWmxlcjg0ek1lVDJsV0cvWWhlK2Z4cFdaclA5bUJjcnJqVm9SOGNsenEv?= =?utf-8?B?R1NFVHNOVDRWTk5hMXBhN2ZzVW5QbVBKTTVqZ2FFNUxtM3NxOFdnQzBlbzNa?= =?utf-8?B?T3YzWlRnU1k1TGg4eEpkVTVqSEdCKzFnUmhIY25LN1kzNXhPc1FhSUljbThr?= =?utf-8?B?RmhEUTVBbWRjdkZLZFp1b3VIOFVjbmtvTWNPQU9SZzh5YVdtYkhRVzFyTFpG?= =?utf-8?B?THZ0WDJpZWE4bWF4Vi95ZHRhbWwvdVVXY0pzdUk2VTJqMUxUNUxhbGhVd3R0?= =?utf-8?B?cXgzM1c5endXNVpQRitlMHEvRVcwSTkyeCs0TTRtZnFaT1RFMmJNLzg3RDc0?= =?utf-8?B?QXVpYjE5WUpPZjFBbTZFdGY1dVZ1aVdtT1lrVVU2am9OallTLzI4a041T1ZU?= =?utf-8?B?SzNOckFRUHlFd1ByZnZDTTNXN3FCdlNvek5IUTJzRGZCUDNQSjY3Y285MFJi?= =?utf-8?B?SWJMaks1RWJZQ3Y0VHcxTmxpQk51aE9IUFJPSmQ3endFQUJxYkoyeC9nN2lu?= =?utf-8?Q?DX+kt7w9zcNK5HWGXoMo?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ea8d7263-10dd-4f4e-ff8e-08dc09d93edd X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Dec 2023 08:19:44.9301 (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: JH0PR06MB6367 Subject: [FFmpeg-devel] [PATCH v8 02/13] 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: LS0tCiBsaWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZSB8ICAgIDEgKwogbGliYXZjb2RlYy92dmMvdnZj X3BzLmMgfCAxMTUwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGli YXZjb2RlYy92dmMvdnZjX3BzLmggfCAgMjYzICsrKysrKysrKwogbGliYXZjb2RlYy92dmMvdnZj ZGVjLmggfCAgMjE0ICsrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDE2MjggaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvdnZjL3Z2Y19wcy5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgbGliYXZjb2RlYy92dmMvdnZjX3BzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJh dmNvZGVjL3Z2Yy92dmNkZWMuaAoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL01ha2VmaWxl IGIvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUKaW5kZXggODM2MmI3MjFkMC4uYTRmNmEwYjU4YSAx MDA2NDQKLS0tIGEvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUKKysrIGIvbGliYXZjb2RlYy92dmMv TWFrZWZpbGUKQEAgLTEsMyArMSw0IEBACiBjbGVhbjo6ICAgICQoUk0pICQoQ0xFQU5TVUZGSVhF UzolPWxpYmF2Y29kZWMvdnZjLyUpCiAKIE9CSlMtJChDT05GSUdfVlZDX0RFQ09ERVIpICAgICAg ICAgICs9ICB2dmMvdnZjX2RhdGEubyAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19wcy5vICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEv bGliYXZjb2RlYy92dmMvdnZjX3BzLmMgYi9saWJhdmNvZGVjL3Z2Yy92dmNfcHMuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5hYzk2ZWQ5ZjQzCi0tLSAvZGV2L251bGwK KysrIGIvbGliYXZjb2RlYy92dmMvdnZjX3BzLmMKQEAgLTAsMCArMSwxMTUwIEBACisvKgorICog VlZDIHBhcmFtZXRlciBzZXQgcGFyc2VyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDIzIE51byBN aQorICogQ29weXJpZ2h0IChDKSAyMDIyIFh1IE11CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQg b2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExp Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZt cGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZG bXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwg SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0x MzAxIFVTQQorICovCisjaW5jbHVkZSAibGliYXZjb2RlYy9jYnNfaDI2Ni5oIgorI2luY2x1ZGUg ImxpYmF2dXRpbC9pbWd1dGlscy5oIgorI2luY2x1ZGUgImxpYmF2Y29kZWMvcmVmc3RydWN0Lmgi CisjaW5jbHVkZSAidnZjX2RhdGEuaCIKKyNpbmNsdWRlICJ2dmNfcHMuaCIKKyNpbmNsdWRlICJ2 dmNkZWMuaCIKKworc3RhdGljIGludCBzcHNfbWFwX3BpeGVsX2Zvcm1hdChWVkNTUFMgKnNwcywg dm9pZCAqbG9nX2N0eCkKK3sKKyAgICBjb25zdCBIMjY2UmF3U1BTICpyID0gc3BzLT5yOworICAg IGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqZGVzYzsKKworICAgIHN3aXRjaCAoc3BzLT5iaXRf ZGVwdGgpIHsKKyAgICBjYXNlIDg6CisgICAgICAgIGlmIChyLT5zcHNfY2hyb21hX2Zvcm1hdF9p ZGMgPT0gMCkgc3BzLT5waXhfZm10ID0gQVZfUElYX0ZNVF9HUkFZODsKKyAgICAgICAgaWYgKHIt PnNwc19jaHJvbWFfZm9ybWF0X2lkYyA9PSAxKSBzcHMtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX1lV VjQyMFA7CisgICAgICAgIGlmIChyLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgPT0gMikgc3BzLT5w aXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0MjJQOworICAgICAgICBpZiAoci0+c3BzX2Nocm9tYV9m b3JtYXRfaWRjID09IDMpIHNwcy0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDQ0UDsKKyAgICAg ICBicmVhazsKKyAgICBjYXNlIDEwOgorICAgICAgICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRf aWRjID09IDApIHNwcy0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfR1JBWTEwOworICAgICAgICBpZiAo ci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDEpIHNwcy0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRf WVVWNDIwUDEwOworICAgICAgICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDIpIHNw cy0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDIyUDEwOworICAgICAgICBpZiAoci0+c3BzX2No cm9tYV9mb3JtYXRfaWRjID09IDMpIHNwcy0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDQ0UDEw OworICAgICAgICBicmVhazsKKyAgICBjYXNlIDEyOgorICAgICAgICBpZiAoci0+c3BzX2Nocm9t YV9mb3JtYXRfaWRjID09IDApIHNwcy0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfR1JBWTEyOworICAg ICAgICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDEpIHNwcy0+cGl4X2ZtdCA9IEFW X1BJWF9GTVRfWVVWNDIwUDEyOworICAgICAgICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRj ID09IDIpIHNwcy0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDIyUDEyOworICAgICAgICBpZiAo ci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDMpIHNwcy0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRf WVVWNDQ0UDEyOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBhdl9sb2co bG9nX2N0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgIlRoZSBmb2xsb3dpbmcgYml0 LWRlcHRocyBhcmUgY3VycmVudGx5IHNwZWNpZmllZDogOCwgMTAsIDEyIGJpdHMsICIKKyAgICAg ICAgICAgICAgICJjaHJvbWFfZm9ybWF0X2lkYyBpcyAlZCwgZGVwdGggaXMgJWRcbiIsCisgICAg ICAgICAgICAgICByLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMsIHNwcy0+Yml0X2RlcHRoKTsKKyAg ICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgfQorCisgICAgZGVzYyA9IGF2 X3BpeF9mbXRfZGVzY19nZXQoc3BzLT5waXhfZm10KTsKKyAgICBpZiAoIWRlc2MpCisgICAgICAg IHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisKKyAgICBzcHMtPmhzaGlmdFswXSA9IHNwcy0+dnNo aWZ0WzBdID0gMDsKKyAgICBzcHMtPmhzaGlmdFsyXSA9IHNwcy0+aHNoaWZ0WzFdID0gZGVzYy0+ bG9nMl9jaHJvbWFfdzsKKyAgICBzcHMtPnZzaGlmdFsyXSA9IHNwcy0+dnNoaWZ0WzFdID0gZGVz Yy0+bG9nMl9jaHJvbWFfaDsKKworICAgIHNwcy0+cGl4ZWxfc2hpZnQgPSBzcHMtPmJpdF9kZXB0 aCA+IDg7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzcHNfYml0X2RlcHRoKFZW Q1NQUyAqc3BzLCB2b2lkICpsb2dfY3R4KQoreworICAgIGNvbnN0IEgyNjZSYXdTUFMgKnIgPSBz cHMtPnI7CisKKyAgICBzcHMtPmJpdF9kZXB0aCA9IHItPnNwc19iaXRkZXB0aF9taW51czggKyA4 OworICAgIHNwcy0+cXBfYmRfb2Zmc2V0ID0gNiAqIChzcHMtPmJpdF9kZXB0aCAtIDgpOworICAg IHNwcy0+bG9nMl90cmFuc2Zvcm1fcmFuZ2UgPQorICAgICAgICByLT5zcHNfZXh0ZW5kZWRfcHJl Y2lzaW9uX2ZsYWcgPyBGRk1BWCgxNSwgRkZNSU4oMjAsIHNwcy0+Yml0X2RlcHRoICsgNikpIDog MTU7CisgICAgcmV0dXJuIHNwc19tYXBfcGl4ZWxfZm9ybWF0KHNwcywgbG9nX2N0eCk7Cit9CisK K3N0YXRpYyBpbnQgc3BzX2Nocm9tYV9xcF90YWJsZShWVkNTUFMgKnNwcykKK3sKKyAgICBjb25z dCBIMjY2UmF3U1BTICpyID0gc3BzLT5yOworICAgIGNvbnN0IGludCBudW1fcXBfdGFibGVzID0g ci0+c3BzX3NhbWVfcXBfdGFibGVfZm9yX2Nocm9tYV9mbGFnID8KKyAgICAgICAgMSA6IChyLT5z cHNfam9pbnRfY2Jjcl9lbmFibGVkX2ZsYWcgPyAzIDogMik7CisKKyAgICBmb3IgKGludCBpID0g MDsgaSA8IG51bV9xcF90YWJsZXM7IGkrKykgeworICAgICAgICBpbnQgbnVtX3BvaW50c19pbl9x cF90YWJsZTsKKyAgICAgICAgaW50OF90IHFwX2luW1ZWQ19NQVhfUE9JTlRTX0lOX1FQX1RBQkxF XSwgcXBfb3V0W1ZWQ19NQVhfUE9JTlRTX0lOX1FQX1RBQkxFXTsKKyAgICAgICAgdW5zaWduZWQg aW50IGRlbHRhX3FwX2luW1ZWQ19NQVhfUE9JTlRTX0lOX1FQX1RBQkxFXTsKKyAgICAgICAgaW50 IG9mZiA9IHNwcy0+cXBfYmRfb2Zmc2V0OworCisgICAgICAgIG51bV9wb2ludHNfaW5fcXBfdGFi bGUgPSByLT5zcHNfbnVtX3BvaW50c19pbl9xcF90YWJsZV9taW51czFbaV0gKyAxOworCisgICAg ICAgIHFwX291dFswXSA9IHFwX2luWzBdID0gci0+c3BzX3FwX3RhYmxlX3N0YXJ0X21pbnVzMjZb aV0gKyAyNjsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBudW1fcG9pbnRzX2luX3FwX3Rh YmxlOyBqKysgKSB7CisgICAgICAgICAgICBkZWx0YV9xcF9pbltqXSA9IHItPnNwc19kZWx0YV9x cF9pbl92YWxfbWludXMxW2ldW2pdICsgMTsKKyAgICAgICAgICAgIHFwX2luW2orMV0gPSBxcF9p bltqXSArIGRlbHRhX3FwX2luW2pdOworICAgICAgICAgICAgcXBfb3V0W2orMV0gPSBxcF9vdXRb al0gKyAoci0+c3BzX2RlbHRhX3FwX2luX3ZhbF9taW51czFbaV1bal0gXiByLT5zcHNfZGVsdGFf cXBfZGlmZl92YWxbaV1bal0pOworICAgICAgICB9CisgICAgICAgIHNwcy0+Y2hyb21hX3FwX3Rh YmxlW2ldW3FwX2luWzBdICsgb2ZmXSA9IHFwX291dFswXTsKKyAgICAgICAgZm9yIChpbnQgayA9 IHFwX2luWzBdIC0gMSArIG9mZjsgayA+PSAwOyBrLS0pCisgICAgICAgICAgICBzcHMtPmNocm9t YV9xcF90YWJsZVtpXVtrXSA9IGF2X2NsaXAoc3BzLT5jaHJvbWFfcXBfdGFibGVbaV1baysxXS0x LCAtb2ZmLCA2Myk7CisKKyAgICAgICAgZm9yIChpbnQgaiAgPSAwOyBqIDwgbnVtX3BvaW50c19p bl9xcF90YWJsZTsgaisrKSB7CisgICAgICAgICAgICBpbnQgc2ggPSBkZWx0YV9xcF9pbltqXSA+ PiAxOworICAgICAgICAgICAgZm9yIChpbnQgayA9IHFwX2luW2pdICsgMSArIG9mZiwgbSA9IDE7 IGsgPD0gcXBfaW5baisxXSArIG9mZjsgaysrLCBtKyspIHsKKyAgICAgICAgICAgICAgICBzcHMt PmNocm9tYV9xcF90YWJsZVtpXVtrXSA9IHNwcy0+Y2hyb21hX3FwX3RhYmxlW2ldW3FwX2luW2pd ICsgb2ZmXSArCisgICAgICAgICAgICAgICAgICAgICgocXBfb3V0W2orMV0gLSBxcF9vdXRbal0p ICogbSArIHNoKSAvIGRlbHRhX3FwX2luW2pdOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgICAgIGZvciAoaW50IGsgPSBxcF9pbltudW1fcG9pbnRzX2luX3FwX3RhYmxlXSArIDEgKyBv ZmY7IGsgPD0gNjMgKyBvZmY7IGsrKykKKyAgICAgICAgICAgIHNwcy0+Y2hyb21hX3FwX3RhYmxl W2ldW2tdICA9IGF2X2NsaXAoc3BzLT5jaHJvbWFfcXBfdGFibGVbaV1bay0xXSArIDEsIC1zcHMt PnFwX2JkX29mZnNldCwgNjMpOworICAgIH0KKyAgICBpZiAoci0+c3BzX3NhbWVfcXBfdGFibGVf Zm9yX2Nocm9tYV9mbGFnKSB7CisgICAgICAgIG1lbWNweSgmc3BzLT5jaHJvbWFfcXBfdGFibGVb MV0sICZzcHMtPmNocm9tYV9xcF90YWJsZVswXSwgc2l6ZW9mKHNwcy0+Y2hyb21hX3FwX3RhYmxl WzBdKSk7CisgICAgICAgIG1lbWNweSgmc3BzLT5jaHJvbWFfcXBfdGFibGVbMl0sICZzcHMtPmNo cm9tYV9xcF90YWJsZVswXSwgc2l6ZW9mKHNwcy0+Y2hyb21hX3FwX3RhYmxlWzBdKSk7CisgICAg fQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNwc19wb2MoVlZDU1BTICpzcHMp Cit7CisgICAgc3BzLT5tYXhfcGljX29yZGVyX2NudF9sc2IgPSAxIDw8IChzcHMtPnItPnNwc19s b2cyX21heF9waWNfb3JkZXJfY250X2xzYl9taW51czQgKyA0KTsKK30KKworc3RhdGljIHZvaWQg c3BzX2ludGVyKFZWQ1NQUyAqc3BzKQoreworICAgIGNvbnN0IEgyNjZSYXdTUFMgKnIgPSBzcHMt PnI7CisKKyAgICBzcHMtPm1heF9udW1fbWVyZ2VfY2FuZCAgICAgPSA2IC0gci0+c3BzX3NpeF9t aW51c19tYXhfbnVtX21lcmdlX2NhbmQ7CisgICAgc3BzLT5tYXhfbnVtX2liY19tZXJnZV9jYW5k ID0gNiAtIHItPnNwc19zaXhfbWludXNfbWF4X251bV9pYmNfbWVyZ2VfY2FuZDsKKworICAgIGlm IChzcHMtPnItPnNwc19ncG1fZW5hYmxlZF9mbGFnKSB7CisgICAgICAgIHNwcy0+bWF4X251bV9n cG1fbWVyZ2VfY2FuZCA9IDI7CisgICAgICAgIGlmIChzcHMtPm1heF9udW1fbWVyZ2VfY2FuZCA+ PSAzKQorICAgICAgICAgICAgc3BzLT5tYXhfbnVtX2dwbV9tZXJnZV9jYW5kID0gc3BzLT5tYXhf bnVtX21lcmdlX2NhbmQgLSByLT5zcHNfbWF4X251bV9tZXJnZV9jYW5kX21pbnVzX21heF9udW1f Z3BtX2NhbmQ7CisgICAgfQorCisgICAgc3BzLT5sb2cyX3BhcmFsbGVsX21lcmdlX2xldmVsID0g ci0+c3BzX2xvZzJfcGFyYWxsZWxfbWVyZ2VfbGV2ZWxfbWludXMyICsgMjsKK30KKworc3RhdGlj IHZvaWQgc3BzX3BhcnRpdGlvbl9jb25zdHJhaW50cyhWVkNTUFMqIHNwcykKK3sKKyAgICBjb25z dCBIMjY2UmF3U1BTICpyID0gc3BzLT5yOworCisgICAgc3BzLT5jdGJfbG9nMl9zaXplX3kgICAg PSByLT5zcHNfbG9nMl9jdHVfc2l6ZV9taW51czUgKyA1OworICAgIHNwcy0+Y3RiX3NpemVfeSAg ICAgICAgID0gMSA8PCBzcHMtPmN0Yl9sb2cyX3NpemVfeTsKKyAgICBzcHMtPm1pbl9jYl9sb2cy X3NpemVfeSA9IHItPnNwc19sb2cyX21pbl9sdW1hX2NvZGluZ19ibG9ja19zaXplX21pbnVzMiAr IDI7CisgICAgc3BzLT5taW5fY2Jfc2l6ZV95ICAgICAgPSAxIDw8IHNwcy0+bWluX2NiX2xvZzJf c2l6ZV95OworICAgIHNwcy0+bWF4X3RiX3NpemVfeSAgICAgID0gMSA8PCAoci0+c3BzX21heF9s dW1hX3RyYW5zZm9ybV9zaXplXzY0X2ZsYWcgPyA2IDogNSk7CisgICAgc3BzLT5tYXhfdHNfc2l6 ZSAgICAgICAgPSAxIDw8IChyLT5zcHNfbG9nMl90cmFuc2Zvcm1fc2tpcF9tYXhfc2l6ZV9taW51 czIgKyAyKTsKK30KKworc3RhdGljIHZvaWQgc3BzX2xhZGYoVlZDU1BTKiBzcHMpCit7CisgICAg Y29uc3QgSDI2NlJhd1NQUyAqciA9IHNwcy0+cjsKKworICAgIGlmIChyLT5zcHNfbGFkZl9lbmFi bGVkX2ZsYWcpIHsKKyAgICAgICAgc3BzLT5udW1fbGFkZl9pbnRlcnZhbHMgPSByLT5zcHNfbnVt X2xhZGZfaW50ZXJ2YWxzX21pbnVzMiArIDI7CisgICAgICAgIHNwcy0+bGFkZl9pbnRlcnZhbF9s b3dlcl9ib3VuZFswXSA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3BzLT5udW1f bGFkZl9pbnRlcnZhbHMgLSAxOyBpKyspIHsKKyAgICAgICAgICAgIHNwcy0+bGFkZl9pbnRlcnZh bF9sb3dlcl9ib3VuZFtpICsgMV0gPQorICAgICAgICAgICAgICAgIHNwcy0+bGFkZl9pbnRlcnZh bF9sb3dlcl9ib3VuZFtpXSArIHItPnNwc19sYWRmX2RlbHRhX3RocmVzaG9sZF9taW51czFbaV0g KyAxOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgaW50IHNwc19kZXJpdmUoVlZDU1BT ICpzcHMsIHZvaWQgKmxvZ19jdHgpCit7CisgICAgaW50IHJldDsKKyAgICBjb25zdCBIMjY2UmF3 U1BTICpyID0gc3BzLT5yOworCisgICAgc3BzLT53aWR0aCAgPSByLT5zcHNfcGljX3dpZHRoX21h eF9pbl9sdW1hX3NhbXBsZXM7CisgICAgc3BzLT5oZWlnaHQgPSByLT5zcHNfcGljX2hlaWdodF9t YXhfaW5fbHVtYV9zYW1wbGVzOworCisgICAgcmV0ID0gc3BzX2JpdF9kZXB0aChzcHMsIGxvZ19j dHgpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworICAgIHNwc19wb2Mo c3BzKTsKKyAgICBzcHNfaW50ZXIoc3BzKTsKKyAgICBzcHNfcGFydGl0aW9uX2NvbnN0cmFpbnRz KHNwcyk7CisgICAgc3BzX2xhZGYoc3BzKTsKKyAgICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRf aWRjICE9IDApCisgICAgICAgIHNwc19jaHJvbWFfcXBfdGFibGUoc3BzKTsKKworICAgIHJldHVy biAwOworfQorCitzdGF0aWMgdm9pZCBzcHNfZnJlZShGRlJlZlN0cnVjdE9wYXF1ZSBvcGFxdWUs IHZvaWQgKm9iaikKK3sKKyAgICBWVkNTUFMgKnNwcyA9IG9iajsKKyAgICBmZl9yZWZzdHJ1Y3Rf dW5yZWYoJnNwcy0+cik7Cit9CisKK3N0YXRpYyBjb25zdCBWVkNTUFMgKnNwc19hbGxvYyhjb25z dCBIMjY2UmF3U1BTICpyc3BzLCB2b2lkICpsb2dfY3R4KQoreworICAgIGludCByZXQ7CisgICAg VlZDU1BTICpzcHMgPSBmZl9yZWZzdHJ1Y3RfYWxsb2NfZXh0KHNpemVvZigqc3BzKSwgMCwgTlVM TCwgc3BzX2ZyZWUpOworCisgICAgaWYgKCFzcHMpCisgICAgICAgIHJldHVybiBOVUxMOworCisg ICAgZmZfcmVmc3RydWN0X3JlcGxhY2UoJnNwcy0+ciwgcnNwcyk7CisKKyAgICByZXQgPSBzcHNf ZGVyaXZlKHNwcywgbG9nX2N0eCk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIGdvdG8gZmFp bDsKKworICAgIHJldHVybiBzcHM7CisKK2ZhaWw6CisgICAgZmZfcmVmc3RydWN0X3VucmVmKCZz cHMpOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGRlY29kZV9zcHMoVlZDUGFy YW1TZXRzICpwcywgY29uc3QgSDI2NlJhd1NQUyAqcnNwcywgdm9pZCAqbG9nX2N0eCkKK3sKKyAg ICBjb25zdCBpbnQgc3BzX2lkICAgICAgICA9IHJzcHMtPnNwc19zZXFfcGFyYW1ldGVyX3NldF9p ZDsKKyAgICBjb25zdCBWVkNTUFMgKm9sZF9zcHMgICA9IHBzLT5zcHNfbGlzdFtzcHNfaWRdOwor ICAgIGNvbnN0IFZWQ1NQUyAqc3BzOworCisgICAgaWYgKG9sZF9zcHMgJiYgb2xkX3Nwcy0+ciA9 PSByc3BzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHNwcyA9IHNwc19hbGxvYyhyc3BzLCBs b2dfY3R4KTsKKyAgICBpZiAoIXNwcykKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsK KworICAgIGZmX3JlZnN0cnVjdF91bnJlZigmcHMtPnNwc19saXN0W3Nwc19pZF0pOworICAgIHBz LT5zcHNfbGlzdFtzcHNfaWRdID0gc3BzOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2 b2lkIHBwc19jaHJvbWFfcXBfb2Zmc2V0KFZWQ1BQUyAqcHBzKQoreworICAgIHBwcy0+Y2hyb21h X3FwX29mZnNldFtDQiAtIDFdICAgPSBwcHMtPnItPnBwc19jYl9xcF9vZmZzZXQ7CisgICAgcHBz LT5jaHJvbWFfcXBfb2Zmc2V0W0NSIC0gMV0gICA9IHBwcy0+ci0+cHBzX2NyX3FwX29mZnNldDsK KyAgICBwcHMtPmNocm9tYV9xcF9vZmZzZXRbSkNCQ1IgLSAxXT0gcHBzLT5yLT5wcHNfam9pbnRf Y2Jjcl9xcF9vZmZzZXRfdmFsdWU7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspIHsK KyAgICAgICAgcHBzLT5jaHJvbWFfcXBfb2Zmc2V0X2xpc3RbaV1bQ0IgLSAxXSAgID0gcHBzLT5y LT5wcHNfY2JfcXBfb2Zmc2V0X2xpc3RbaV07CisgICAgICAgIHBwcy0+Y2hyb21hX3FwX29mZnNl dF9saXN0W2ldW0NSIC0gMV0gICA9IHBwcy0+ci0+cHBzX2NyX3FwX29mZnNldF9saXN0W2ldOwor ICAgICAgICBwcHMtPmNocm9tYV9xcF9vZmZzZXRfbGlzdFtpXVtKQ0JDUiAtIDFdPSBwcHMtPnIt PnBwc19qb2ludF9jYmNyX3FwX29mZnNldF9saXN0W2ldOworICAgIH0KK30KKworc3RhdGljIHZv aWQgcHBzX3dpZHRoX2hlaWdodChWVkNQUFMgKnBwcywgY29uc3QgVlZDU1BTICpzcHMpCit7Cisg ICAgY29uc3QgSDI2NlJhd1BQUyAqciA9IHBwcy0+cjsKKworICAgIHBwcy0+d2lkdGggICAgICAg ICAgPSByLT5wcHNfcGljX3dpZHRoX2luX2x1bWFfc2FtcGxlczsKKyAgICBwcHMtPmhlaWdodCAg ICAgICAgID0gci0+cHBzX3BpY19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzOworCisgICAgcHBzLT5j dGJfd2lkdGggICAgICA9IEFWX0NFSUxfUlNISUZUKHBwcy0+d2lkdGgsICBzcHMtPmN0Yl9sb2cy X3NpemVfeSk7CisgICAgcHBzLT5jdGJfaGVpZ2h0ICAgICA9IEFWX0NFSUxfUlNISUZUKHBwcy0+ aGVpZ2h0LCBzcHMtPmN0Yl9sb2cyX3NpemVfeSk7CisgICAgcHBzLT5jdGJfY291bnQgICAgICA9 IHBwcy0+Y3RiX3dpZHRoICogcHBzLT5jdGJfaGVpZ2h0OworCisgICAgcHBzLT5taW5fY2Jfd2lk dGggICA9IHBwcy0+d2lkdGggID4+IHNwcy0+bWluX2NiX2xvZzJfc2l6ZV95OworICAgIHBwcy0+ bWluX2NiX2hlaWdodCAgPSBwcHMtPmhlaWdodCA+PiBzcHMtPm1pbl9jYl9sb2cyX3NpemVfeTsK KworICAgIHBwcy0+bWluX3B1X3dpZHRoICAgPSBwcHMtPndpZHRoICA+PiBNSU5fUFVfTE9HMjsK KyAgICBwcHMtPm1pbl9wdV9oZWlnaHQgID0gcHBzLT5oZWlnaHQgPj4gTUlOX1BVX0xPRzI7Cisg ICAgcHBzLT5taW5fdHVfd2lkdGggICA9IHBwcy0+d2lkdGggID4+IE1JTl9UVV9MT0cyOworICAg IHBwcy0+bWluX3R1X2hlaWdodCAgPSBwcHMtPmhlaWdodCA+PiBNSU5fVFVfTE9HMjsKKworICAg IHBwcy0+d2lkdGgzMiAgICAgICAgPSBBVl9DRUlMX1JTSElGVChwcHMtPndpZHRoLCAgNSk7Cisg ICAgcHBzLT5oZWlnaHQzMiAgICAgICA9IEFWX0NFSUxfUlNISUZUKHBwcy0+aGVpZ2h0LCA1KTsK KyAgICBwcHMtPndpZHRoNjQgICAgICAgID0gQVZfQ0VJTF9SU0hJRlQocHBzLT53aWR0aCwgIDYp OworICAgIHBwcy0+aGVpZ2h0NjQgICAgICAgPSBBVl9DRUlMX1JTSElGVChwcHMtPmhlaWdodCwg Nik7Cit9CisKK3N0YXRpYyBpbnQgcHBzX2JkKFZWQ1BQUyAqcHBzKQoreworICAgIGNvbnN0IEgy NjZSYXdQUFMgKnIgPSBwcHMtPnI7CisKKyAgICBwcHMtPmNvbF9iZCAgICAgICAgPSBhdl9jYWxs b2Moci0+bnVtX3RpbGVfY29sdW1ucyAgKyAxLCBzaXplb2YoKnBwcy0+Y29sX2JkKSk7CisgICAg cHBzLT5yb3dfYmQgICAgICAgID0gYXZfY2FsbG9jKHItPm51bV90aWxlX3Jvd3MgICsgMSwgICAg c2l6ZW9mKCpwcHMtPnJvd19iZCkpOworICAgIHBwcy0+Y3RiX3RvX2NvbF9iZCA9IGF2X2NhbGxv YyhwcHMtPmN0Yl93aWR0aCAgKyAxLCAgICAgIHNpemVvZigqcHBzLT5jdGJfdG9fY29sX2JkKSk7 CisgICAgcHBzLT5jdGJfdG9fcm93X2JkID0gYXZfY2FsbG9jKHBwcy0+Y3RiX2hlaWdodCArIDEs ICAgICAgc2l6ZW9mKCpwcHMtPmN0Yl90b19jb2xfYmQpKTsKKyAgICBpZiAoIXBwcy0+Y29sX2Jk IHx8ICFwcHMtPnJvd19iZCB8fCAhcHBzLT5jdGJfdG9fY29sX2JkIHx8ICFwcHMtPmN0Yl90b19y b3dfYmQpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICBmb3IgKGludCBp ID0gMCwgaiA9IDA7IGkgPCByLT5udW1fdGlsZV9jb2x1bW5zOyBpKyspIHsKKyAgICAgICAgcHBz LT5jb2xfYmRbaV0gPSBqOworICAgICAgICBqICs9IHItPmNvbF93aWR0aF92YWxbaV07CisgICAg ICAgIGZvciAoaW50IGsgPSBwcHMtPmNvbF9iZFtpXTsgayA8IGo7IGsrKykKKyAgICAgICAgICAg IHBwcy0+Y3RiX3RvX2NvbF9iZFtrXSA9IHBwcy0+Y29sX2JkW2ldOworICAgIH0KKworICAgIGZv ciAoaW50IGkgPSAwLCBqID0gMDsgaSA8IHItPm51bV90aWxlX3Jvd3M7IGkrKykgeworICAgICAg ICBwcHMtPnJvd19iZFtpXSA9IGo7CisgICAgICAgIGogKz0gci0+cm93X2hlaWdodF92YWxbaV07 CisgICAgICAgIGZvciAoaW50IGsgPSBwcHMtPnJvd19iZFtpXTsgayA8IGo7IGsrKykKKyAgICAg ICAgICAgIHBwcy0+Y3RiX3RvX3Jvd19iZFtrXSA9IHBwcy0+cm93X2JkW2ldOworICAgIH0KKyAg ICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IG5leHRfdGlsZV9pZHgoaW50IHRpbGVfaWR4 LCBjb25zdCBpbnQgaSwgY29uc3QgSDI2NlJhd1BQUyAqcikKK3sKKyAgICBpZiAoci0+cHBzX3Rp bGVfaWR4X2RlbHRhX3ByZXNlbnRfZmxhZykgeworICAgICAgICB0aWxlX2lkeCArPSByLT5wcHNf dGlsZV9pZHhfZGVsdGFfdmFsW2ldOworICAgIH0gZWxzZSB7CisgICAgICAgIHRpbGVfaWR4ICs9 IHItPnBwc19zbGljZV93aWR0aF9pbl90aWxlc19taW51czFbaV0gKyAxOworICAgICAgICBpZiAo dGlsZV9pZHggJSByLT5udW1fdGlsZV9jb2x1bW5zID09IDApCisgICAgICAgICAgICB0aWxlX2lk eCArPSAoci0+cHBzX3NsaWNlX2hlaWdodF9pbl90aWxlc19taW51czFbaV0pICogci0+bnVtX3Rp bGVfY29sdW1uczsKKyAgICB9CisgICAgcmV0dXJuIHRpbGVfaWR4OworfQorCitzdGF0aWMgdm9p ZCB0aWxlX3h5KGludCAqdGlsZV94LCBpbnQgKnRpbGVfeSwgY29uc3QgaW50IHRpbGVfaWR4LCBj b25zdCBWVkNQUFMgKnBwcykKK3sKKyAgICAqdGlsZV94ID0gdGlsZV9pZHggJSBwcHMtPnItPm51 bV90aWxlX2NvbHVtbnM7CisgICAgKnRpbGVfeSA9IHRpbGVfaWR4IC8gcHBzLT5yLT5udW1fdGls ZV9jb2x1bW5zOworfQorCitzdGF0aWMgdm9pZCBjdHVfeHkoaW50ICpjdHVfeCwgaW50ICpjdHVf eSwgY29uc3QgaW50IHRpbGVfeCwgY29uc3QgaW50IHRpbGVfeSwgY29uc3QgVlZDUFBTICpwcHMp Cit7CisgICAgKmN0dV94ID0gcHBzLT5jb2xfYmRbdGlsZV94XTsKKyAgICAqY3R1X3kgPSBwcHMt PnJvd19iZFt0aWxlX3ldOworfQorCitzdGF0aWMgaW50IGN0dV9ycyhjb25zdCBpbnQgY3R1X3gs IGNvbnN0IGludCBjdHVfeSwgY29uc3QgVlZDUFBTICpwcHMpCit7CisgICAgcmV0dXJuIHBwcy0+ Y3RiX3dpZHRoICogY3R1X3kgKyBjdHVfeDsKK30KKworc3RhdGljIGludCBwcHNfYWRkX2N0dXMo VlZDUFBTICpwcHMsIGludCAqb2ZmLCBjb25zdCBpbnQgY3R1X3gsIGNvbnN0IGludCBjdHVfeSwK KyAgICBjb25zdCBpbnQgdywgY29uc3QgaW50IGgpCit7CisgICAgaW50IHN0YXJ0ID0gKm9mZjsK KyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGg7IHkrKykgeworICAgICAgICBmb3IgKGludCB4ID0g MDsgeCA8IHc7IHgrKykgeworICAgICAgICAgICAgcHBzLT5jdGJfYWRkcl9pbl9zbGljZVsqb2Zm XSA9IGN0dV9ycyhjdHVfeCArIHgsIGN0dV95ICsgeSwgcHBzKTsKKyAgICAgICAgICAgICgqb2Zm KSsrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAqb2ZmIC0gc3RhcnQ7Cit9CisKK3N0 YXRpYyBpbnQgcHBzX29uZV90aWxlX3NsaWNlcyhWVkNQUFMgKnBwcywgY29uc3QgaW50IHRpbGVf aWR4LCBpbnQgaSwgaW50ICpvZmYpCit7CisgICAgY29uc3QgSDI2NlJhd1BQUyAqciA9IHBwcy0+ cjsKKyAgICBpbnQgY3R1X3gsIGN0dV95LCBjdHVfeV9lbmQsIHRpbGVfeCwgdGlsZV95OworCisg ICAgdGlsZV94eSgmdGlsZV94LCAmdGlsZV95LCB0aWxlX2lkeCwgcHBzKTsKKyAgICBjdHVfeHko JmN0dV94LCAmY3R1X3ksIHRpbGVfeCwgdGlsZV95LCBwcHMpOworICAgIGN0dV95X2VuZCA9IGN0 dV95ICsgci0+cm93X2hlaWdodF92YWxbdGlsZV95XTsKKyAgICB3aGlsZSAoY3R1X3kgPCBjdHVf eV9lbmQpIHsKKyAgICAgICAgcHBzLT5zbGljZV9zdGFydF9vZmZzZXRbaV0gPSAqb2ZmOworICAg ICAgICBwcHMtPm51bV9jdHVzX2luX3NsaWNlW2ldID0gcHBzX2FkZF9jdHVzKHBwcywgb2ZmLCBj dHVfeCwgY3R1X3ksCisgICAgICAgICAgICByLT5jb2xfd2lkdGhfdmFsW3RpbGVfeF0sIHItPnNs aWNlX2hlaWdodF9pbl9jdHVzW2ldKTsKKyAgICAgICAgY3R1X3kgKz0gci0+c2xpY2VfaGVpZ2h0 X2luX2N0dXNbaSsrXTsKKyAgICB9CisgICAgaS0tOworICAgIHJldHVybiBpOworfQorCitzdGF0 aWMgdm9pZCBwcHNfbXVsdGlfdGlsZXNfc2xpY2UoVlZDUFBTICpwcHMsIGNvbnN0IGludCB0aWxl X2lkeCwgY29uc3QgaW50IGksIGludCAqb2ZmKQoreworICAgIGNvbnN0IEgyNjZSYXdQUFMgKnIg PSBwcHMtPnI7CisgICAgaW50IGN0dV94LCBjdHVfeSx0aWxlX3gsIHRpbGVfeTsKKworICAgIHRp bGVfeHkoJnRpbGVfeCwgJnRpbGVfeSwgdGlsZV9pZHgsIHBwcyk7CisgICAgcHBzLT5zbGljZV9z dGFydF9vZmZzZXRbaV0gPSAqb2ZmOworICAgIHBwcy0+bnVtX2N0dXNfaW5fc2xpY2VbaV0gPSAw OworICAgIGZvciAoaW50IHR5ID0gdGlsZV95OyB0eSA8PSB0aWxlX3kgKyByLT5wcHNfc2xpY2Vf aGVpZ2h0X2luX3RpbGVzX21pbnVzMVtpXTsgdHkrKykgeworICAgICAgICBmb3IgKGludCB0eCA9 IHRpbGVfeDsgdHggPD0gdGlsZV94ICsgci0+cHBzX3NsaWNlX3dpZHRoX2luX3RpbGVzX21pbnVz MVtpXTsgdHgrKykgeworICAgICAgICAgICAgY3R1X3h5KCZjdHVfeCwgJmN0dV95LCB0eCwgdHks IHBwcyk7CisgICAgICAgICAgICBwcHMtPm51bV9jdHVzX2luX3NsaWNlW2ldICs9IHBwc19hZGRf Y3R1cyhwcHMsIG9mZiwgY3R1X3gsIGN0dV95LAorICAgICAgICAgICAgICAgIHItPmNvbF93aWR0 aF92YWxbdHhdLCByLT5yb3dfaGVpZ2h0X3ZhbFt0eV0pOworICAgICAgICB9CisgICAgfQorfQor CitzdGF0aWMgdm9pZCBwcHNfcmVjdF9zbGljZShWVkNQUFMqIHBwcykKK3sKKyAgICBjb25zdCBI MjY2UmF3UFBTKiByID0gcHBzLT5yOworICAgIGludCB0aWxlX2lkeCA9IDAsIG9mZiA9IDA7CisK KyAgICBmb3IgKGludCBpID0gMDsgaSA8IHItPnBwc19udW1fc2xpY2VzX2luX3BpY19taW51czEg KyAxOyBpKyspIHsKKyAgICAgICAgaWYgKCFyLT5wcHNfc2xpY2Vfd2lkdGhfaW5fdGlsZXNfbWlu dXMxW2ldICYmCisgICAgICAgICAgICAhci0+cHBzX3NsaWNlX2hlaWdodF9pbl90aWxlc19taW51 czFbaV0pIHsKKyAgICAgICAgICAgIGkgPSBwcHNfb25lX3RpbGVfc2xpY2VzKHBwcywgdGlsZV9p ZHgsIGksICZvZmYpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHBzX211bHRpX3Rp bGVzX3NsaWNlKHBwcywgdGlsZV9pZHgsIGksICZvZmYpOworCisgICAgICAgIH0KKyAgICAgICAg dGlsZV9pZHggPSBuZXh0X3RpbGVfaWR4KHRpbGVfaWR4LCBpLCByKTsKKyAgICB9Cit9CisKK3N0 YXRpYyB2b2lkIHBwc19ub19yZWN0X3NsaWNlKFZWQ1BQUyogcHBzKQoreworICAgIGNvbnN0IEgy NjZSYXdQUFMqIHIgPSBwcHMtPnI7CisgICAgaW50IGN0dV94LCBjdHVfeSwgb2ZmID0gMDsKKwor ICAgIGZvciAoaW50IHRpbGVfeSA9IDA7IHRpbGVfeSA8IHItPm51bV90aWxlX3Jvd3M7IHRpbGVf eSsrKSB7CisgICAgICAgIGZvciAoaW50IHRpbGVfeCA9IDA7IHRpbGVfeCA8IHItPm51bV90aWxl X2NvbHVtbnM7IHRpbGVfeCsrKSB7CisgICAgICAgICAgICBjdHVfeHkoJmN0dV94LCAmY3R1X3ks IHRpbGVfeCwgdGlsZV95LCBwcHMpOworICAgICAgICAgICAgcHBzX2FkZF9jdHVzKHBwcywgJm9m ZiwgY3R1X3gsIGN0dV95LCByLT5jb2xfd2lkdGhfdmFsW3RpbGVfeF0sIHItPnJvd19oZWlnaHRf dmFsW3RpbGVfeV0pOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgaW50IHBwc19zbGlj ZV9tYXAoVlZDUFBTICpwcHMpCit7CisgICAgcHBzLT5jdGJfYWRkcl9pbl9zbGljZSA9IGF2X2Nh bGxvYyhwcHMtPmN0Yl9jb3VudCwgc2l6ZW9mKCpwcHMtPmN0Yl9hZGRyX2luX3NsaWNlKSk7Cisg ICAgaWYgKCFwcHMtPmN0Yl9hZGRyX2luX3NsaWNlKQorICAgICAgICByZXR1cm4gQVZFUlJPUihF Tk9NRU0pOworCisgICAgaWYgKHBwcy0+ci0+cHBzX3JlY3Rfc2xpY2VfZmxhZykKKyAgICAgICAg cHBzX3JlY3Rfc2xpY2UocHBzKTsKKyAgICBlbHNlCisgICAgICAgIHBwc19ub19yZWN0X3NsaWNl KHBwcyk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHBzX3JlZl93cmFwYXJv dW5kX29mZnNldChWVkNQUFMgKnBwcywgY29uc3QgVlZDU1BTICpzcHMpCit7CisgICAgY29uc3Qg SDI2NlJhd1BQUyAqciA9IHBwcy0+cjsKKworICAgIGlmIChyLT5wcHNfcmVmX3dyYXBhcm91bmRf ZW5hYmxlZF9mbGFnKQorICAgICAgICBwcHMtPnJlZl93cmFwYXJvdW5kX29mZnNldCA9IChwcHMt PndpZHRoIC8gc3BzLT5taW5fY2Jfc2l6ZV95KSAtIHItPnBwc19waWNfd2lkdGhfbWludXNfd3Jh cGFyb3VuZF9vZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQgcHBzX2Rlcml2ZShWVkNQUFMgKnBwcywg Y29uc3QgVlZDU1BTICpzcHMpCit7CisgICAgaW50IHJldDsKKworICAgIHBwc19jaHJvbWFfcXBf b2Zmc2V0KHBwcyk7CisgICAgcHBzX3dpZHRoX2hlaWdodChwcHMsIHNwcyk7CisKKyAgICByZXQg PSBwcHNfYmQocHBzKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKwor ICAgIHJldCA9IHBwc19zbGljZV9tYXAocHBzKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAg cmV0dXJuIHJldDsKKworICAgIHBwc19yZWZfd3JhcGFyb3VuZF9vZmZzZXQocHBzLCBzcHMpOwor CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBwc19mcmVlKEZGUmVmU3RydWN0T3Bh cXVlIG9wYXF1ZSwgdm9pZCAqb2JqKQoreworICAgIFZWQ1BQUyAqcHBzID0gb2JqOworCisgICAg ZmZfcmVmc3RydWN0X3VucmVmKCZwcHMtPnIpOworCisgICAgYXZfZnJlZXAoJnBwcy0+Y29sX2Jk KTsKKyAgICBhdl9mcmVlcCgmcHBzLT5yb3dfYmQpOworICAgIGF2X2ZyZWVwKCZwcHMtPmN0Yl90 b19jb2xfYmQpOworICAgIGF2X2ZyZWVwKCZwcHMtPmN0Yl90b19yb3dfYmQpOworICAgIGF2X2Zy ZWVwKCZwcHMtPmN0Yl9hZGRyX2luX3NsaWNlKTsKK30KKworc3RhdGljIGNvbnN0IFZWQ1BQUyAq cHBzX2FsbG9jKGNvbnN0IEgyNjZSYXdQUFMgKnJwcHMsIGNvbnN0IFZWQ1NQUyAqc3BzKQorewor ICAgIGludCByZXQ7CisgICAgVlZDUFBTICpwcHMgPSBmZl9yZWZzdHJ1Y3RfYWxsb2NfZXh0KHNp emVvZigqcHBzKSwgMCwgTlVMTCwgcHBzX2ZyZWUpOworCisgICAgaWYgKCFwcHMpCisgICAgICAg IHJldHVybiBOVUxMOworCisgICAgZmZfcmVmc3RydWN0X3JlcGxhY2UoJnBwcy0+ciwgcnBwcyk7 CisKKyAgICByZXQgPSBwcHNfZGVyaXZlKHBwcywgc3BzKTsKKyAgICBpZiAocmV0IDwgMCkKKyAg ICAgICAgZ290byBmYWlsOworCisgICAgcmV0dXJuIHBwczsKKworZmFpbDoKKyAgICBmZl9yZWZz dHJ1Y3RfdW5yZWYoJnBwcyk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgZGVj b2RlX3BwcyhWVkNQYXJhbVNldHMgKnBzLCBjb25zdCBIMjY2UmF3UFBTICpycHBzKQoreworICAg IGludCByZXQgICAgICAgICAgICAgICAgID0gMDsKKyAgICBjb25zdCBpbnQgcHBzX2lkICAgICAg ICA9IHJwcHMtPnBwc19waWNfcGFyYW1ldGVyX3NldF9pZDsKKyAgICBjb25zdCBpbnQgc3BzX2lk ICAgICAgICA9IHJwcHMtPnBwc19zZXFfcGFyYW1ldGVyX3NldF9pZDsKKyAgICBjb25zdCBWVkNQ UFMgKm9sZF9wcHMgICA9IHBzLT5wcHNfbGlzdFtwcHNfaWRdOworICAgIGNvbnN0IFZWQ1BQUyAq cHBzOworCisgICAgaWYgKG9sZF9wcHMgJiYgb2xkX3Bwcy0+ciA9PSBycHBzKQorICAgICAgICBy ZXR1cm4gMDsKKworICAgIHBwcyA9IHBwc19hbGxvYyhycHBzLCBwcy0+c3BzX2xpc3Rbc3BzX2lk XSk7CisgICAgaWYgKCFwcHMpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAg ICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJnBzLT5wcHNfbGlzdFtwcHNfaWRdKTsKKyAgICBwcy0+cHBz X2xpc3RbcHBzX2lkXSA9IHBwczsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQg ZGVjb2RlX3BzKFZWQ1BhcmFtU2V0cyAqcHMsIGNvbnN0IENvZGVkQml0c3RyZWFtSDI2NkNvbnRl eHQgKmgyNjYsIHZvaWQgKmxvZ19jdHgpCit7CisgICAgY29uc3QgSDI2NlJhd1BpY3R1cmVIZWFk ZXIgKnBoID0gaDI2Ni0+cGg7CisgICAgY29uc3QgSDI2NlJhd1BQUyAqcnBwczsKKyAgICBjb25z dCBIMjY2UmF3U1BTICpyc3BzOworICAgIGludCByZXQ7CisKKyAgICBpZiAoIXBoKQorICAgICAg ICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKworICAgIHJwcHMgPSBoMjY2LT5wcHNbcGgt PnBoX3BpY19wYXJhbWV0ZXJfc2V0X2lkXTsKKyAgICBpZiAoIXJwcHMpCisgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgcnNwcyA9IGgyNjYtPnNwc1tycHBzLT5wcHNf c2VxX3BhcmFtZXRlcl9zZXRfaWRdOworICAgIGlmICghcnNwcykKKyAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7CisKKyAgICByZXQgPSBkZWNvZGVfc3BzKHBzLCByc3BzLCBsb2df Y3R4KTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldCA9 IGRlY29kZV9wcHMocHMsIHJwcHMpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4g cmV0OworCisgICAgcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgV0VJR0hUX1RBQkxFKHgpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgIHctPm5iX3dlaWdodHNbTCMjeF0gPSByLT5udW1fd2Vp Z2h0c19sIyN4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3LT5uYl93ZWlnaHRzW0wjI3hd OyBpKyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICAgICAgdy0+d2VpZ2h0X2ZsYWdbTCMjeF1bTFVNQV1baV0gICAgID0gci0+bHVt YV93ZWlnaHRfbCMjeCMjX2ZsYWdbaV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICB3LT53ZWlnaHRfZmxhZ1tMIyN4XVtDSFJPTUFdW2ldICAgPSByLT5jaHJvbWFfd2Vp Z2h0X2wjI3gjI19mbGFnW2ldOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg IHctPndlaWdodFtMIyN4XVtMVU1BXVtpXSAgICAgICAgICA9IGRlbm9tW0xVTUFdICsgci0+ZGVs dGFfbHVtYV93ZWlnaHRfbCMjeFtpXTsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdy0+b2Zm c2V0W0wjI3hdW0xVTUFdW2ldICAgICAgICAgID0gci0+bHVtYV9vZmZzZXRfbCMjeFtpXTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmb3IgKGludCBqID0g Q0I7IGogPD0gQ1I7IGorKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB3LT53ZWlnaHRbTCMjeF1b al1baV0gICAgICAgICA9IGRlbm9tW0NIUk9NQV0gKyByLT5kZWx0YV9jaHJvbWFfd2VpZ2h0X2wj I3hbaV1baiAtIDFdOyAgICAgIFwKKyAgICAgICAgICAgIHctPm9mZnNldFtMIyN4XVtqXVtpXSAg ICAgICAgID0gMTI4ICsgci0+ZGVsdGFfY2hyb21hX29mZnNldF9sIyN4W2ldW2ogLSAxXTsgICAg ICAgICAgICAgICAgXAorICAgICAgICAgICAgdy0+b2Zmc2V0W0wjI3hdW2pdW2ldICAgICAgICAt PSAoMTI4ICogdy0+d2VpZ2h0W0wjI3hdW2pdW2ldKSA+PiB3LT5sb2cyX2Rlbm9tW0NIUk9NQV07 ICAgICBcCisgICAgICAgICAgICB3LT5vZmZzZXRbTCMjeF1bal1baV0gICAgICAgICA9IGF2X2Ns aXBfaW50cDIody0+b2Zmc2V0W0wjI3hdW2pdW2ldLCA3KTsgICAgICAgICAgICAgICAgICAgIFwK KyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKK3N0YXRpYyB2b2lk IHByZWRfd2VpZ2h0X3RhYmxlKFByZWRXZWlnaHRUYWJsZSAqdywgY29uc3QgSDI2NlJhd1ByZWRX ZWlnaHRUYWJsZSAqcikKK3sKKyAgICBpbnQgZGVub21bMl07CisKKyAgICB3LT5sb2cyX2Rlbm9t W0xVTUFdID0gci0+bHVtYV9sb2cyX3dlaWdodF9kZW5vbTsKKyAgICB3LT5sb2cyX2Rlbm9tW0NI Uk9NQV0gPSB3LT5sb2cyX2Rlbm9tW0xVTUFdICsgci0+ZGVsdGFfY2hyb21hX2xvZzJfd2VpZ2h0 X2Rlbm9tOworICAgIGRlbm9tW0xVTUFdID0gMSA8PCB3LT5sb2cyX2Rlbm9tW0xVTUFdOworICAg IGRlbm9tW0NIUk9NQV0gPSAxIDw8IHctPmxvZzJfZGVub21bQ0hST01BXTsKKyAgICBXRUlHSFRf VEFCTEUoMCkKKyAgICBXRUlHSFRfVEFCTEUoMSkKK30KKworLy8gOC4zLjEgRGVjb2RpbmcgcHJv Y2VzcyBmb3IgcGljdHVyZSBvcmRlciBjb3VudAorc3RhdGljIGludCBwaF9jb21wdXRlX3BvYyhj b25zdCBIMjY2UmF3UGljdHVyZUhlYWRlciAqcGgsIGNvbnN0IEgyNjZSYXdTUFMgKnNwcywgY29u c3QgaW50IHBvY190aWQwLCBjb25zdCBpbnQgaXNfY2x2c3MpCit7CisgICAgY29uc3QgaW50IG1h eF9wb2NfbHNiICAgICAgID0gMSA8PCAoc3BzLT5zcHNfbG9nMl9tYXhfcGljX29yZGVyX2NudF9s c2JfbWludXM0ICsgNCk7CisgICAgY29uc3QgaW50IHByZXZfcG9jX2xzYiAgICAgID0gcG9jX3Rp ZDAgJSBtYXhfcG9jX2xzYjsKKyAgICBjb25zdCBpbnQgcHJldl9wb2NfbXNiICAgICAgPSBwb2Nf dGlkMCAtIHByZXZfcG9jX2xzYjsKKyAgICBjb25zdCBpbnQgcG9jX2xzYiAgICAgICAgICAgPSBw aC0+cGhfcGljX29yZGVyX2NudF9sc2I7CisgICAgaW50IHBvY19tc2I7CisKKyAgICBpZiAocGgt PnBoX3BvY19tc2JfY3ljbGVfcHJlc2VudF9mbGFnKSB7CisgICAgICAgIHBvY19tc2IgPSBwaC0+ cGhfcG9jX21zYl9jeWNsZV92YWwgKiBtYXhfcG9jX2xzYjsKKyAgICB9IGVsc2UgaWYgKGlzX2Ns dnNzKSB7CisgICAgICAgIHBvY19tc2IgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChw b2NfbHNiIDwgcHJldl9wb2NfbHNiICYmIHByZXZfcG9jX2xzYiAtIHBvY19sc2IgPj0gbWF4X3Bv Y19sc2IgLyAyKQorICAgICAgICAgICAgcG9jX21zYiA9IHByZXZfcG9jX21zYiArIG1heF9wb2Nf bHNiOworICAgICAgICBlbHNlIGlmIChwb2NfbHNiID4gcHJldl9wb2NfbHNiICYmIHBvY19sc2Ig LSBwcmV2X3BvY19sc2IgPiBtYXhfcG9jX2xzYiAvIDIpCisgICAgICAgICAgICBwb2NfbXNiID0g cHJldl9wb2NfbXNiIC0gbWF4X3BvY19sc2I7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBv Y19tc2IgPSBwcmV2X3BvY19tc2I7CisgICAgfQorCisgICAgcmV0dXJuIHBvY19tc2IgKyBwb2Nf bHNiOworfQorCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB1aW50MTZfdCBsbWNzX2Rlcml2ZV9s dXRfc2FtcGxlKHVpbnQxNl90IHNhbXBsZSwKKyAgICB1aW50MTZfdCAqcGl2b3QxLCB1aW50MTZf dCAqcGl2b3QyLCB1aW50MTZfdCAqc2NhbGVfY29lZmYsIGNvbnN0IGludCBpZHgsIGNvbnN0IGlu dCBtYXgpCit7CisgICAgY29uc3QgaW50IGx1dF9zYW1wbGUgPQorICAgICAgICBwaXZvdDFbaWR4 XSArICgoc2NhbGVfY29lZmZbaWR4XSAqIChzYW1wbGUgLSBwaXZvdDJbaWR4XSkgKyAoMTw8IDEw KSkgPj4gMTEpOworICAgIHJldHVybiBhdl9jbGlwKGx1dF9zYW1wbGUsIDAsIG1heCAtIDEpOwor fQorCisvLzguOC4yLjIgSW52ZXJzZSBtYXBwaW5nIHByb2Nlc3MgZm9yIGEgbHVtYSBzYW1wbGUK K3N0YXRpYyBpbnQgbG1jc19kZXJpdmVfbHV0KFZWQ0xNQ1MgKmxtY3MsIGNvbnN0IEgyNjZSYXdB UFMgKnJsbWNzLCBjb25zdCBIMjY2UmF3U1BTICpzcHMpCit7CisgICAgY29uc3QgaW50IGJpdF9k ZXB0aCA9IChzcHMtPnNwc19iaXRkZXB0aF9taW51czggKyA4KTsKKyAgICBjb25zdCBpbnQgbWF4 ICAgICAgID0gKDEgPDwgYml0X2RlcHRoKTsKKyAgICBjb25zdCBpbnQgb3JnX2N3ICAgID0gbWF4 IC8gTE1DU19NQVhfQklOX1NJWkU7CisgICAgY29uc3QgaW50IHNoaWZ0ICAgICA9IGF2X2xvZzIo b3JnX2N3KTsKKyAgICBjb25zdCBpbnQgb2ZmICAgICAgID0gMSA8PCAoc2hpZnQgLSAxKTsKKyAg ICBpbnQgY3dbTE1DU19NQVhfQklOX1NJWkVdOworICAgIHVpbnQxNl90IGlucHV0X3Bpdm90W0xN Q1NfTUFYX0JJTl9TSVpFXTsKKyAgICB1aW50MTZfdCBzY2FsZV9jb2VmZltMTUNTX01BWF9CSU5f U0laRV07CisgICAgdWludDE2X3QgaW52X3NjYWxlX2NvZWZmW0xNQ1NfTUFYX0JJTl9TSVpFXTsK KyAgICBpbnQgaSwgZGVsdGFfY3JzOworICAgIGlmIChiaXRfZGVwdGggPiBMTUNTX01BWF9CSVRf REVQVEgpCisgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKworICAgIGlmICgh cmxtY3MpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgbG1jcy0+ bWluX2Jpbl9pZHggPSBybG1jcy0+bG1jc19taW5fYmluX2lkeDsKKyAgICBsbWNzLT5tYXhfYmlu X2lkeCA9IExNQ1NfTUFYX0JJTl9TSVpFIC0gMSAtIHJsbWNzLT5sbWNzX21pbl9iaW5faWR4Owor CisgICAgbWVtc2V0KGN3LCAwLCBzaXplb2YoY3cpKTsKKyAgICBmb3IgKGludCBpID0gbG1jcy0+ bWluX2Jpbl9pZHg7IGkgPD0gbG1jcy0+bWF4X2Jpbl9pZHg7IGkrKykKKyAgICAgICAgY3dbaV0g PSBvcmdfY3cgKyAoMSAtIDIgKiBybG1jcy0+bG1jc19kZWx0YV9zaWduX2N3X2ZsYWdbaV0pICog cmxtY3MtPmxtY3NfZGVsdGFfYWJzX2N3W2ldOworCisgICAgZGVsdGFfY3JzID0gKDEgLSAyICog cmxtY3MtPmxtY3NfZGVsdGFfc2lnbl9jcnNfZmxhZykgKiBybG1jcy0+bG1jc19kZWx0YV9hYnNf Y3JzOworCisgICAgbG1jcy0+cGl2b3RbMF0gPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBMTUNT X01BWF9CSU5fU0laRTsgaSsrKSB7CisgICAgICAgIGlucHV0X3Bpdm90W2ldICAgICAgICA9IGkg KiBvcmdfY3c7CisgICAgICAgIGxtY3MtPnBpdm90W2kgKyAxXSA9IGxtY3MtPnBpdm90W2ldICsg Y3dbaV07CisgICAgICAgIHNjYWxlX2NvZWZmW2ldICAgICAgICA9IChjd1tpXSAqICgxIDw8IDEx KSArICBvZmYpID4+IHNoaWZ0OworICAgICAgICBpZiAoY3dbaV0gPT0gMCkgeworICAgICAgICAg ICAgaW52X3NjYWxlX2NvZWZmW2ldID0gMDsKKyAgICAgICAgICAgIGxtY3MtPmNocm9tYV9zY2Fs ZV9jb2VmZltpXSA9ICgxIDw8IDExKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlu dl9zY2FsZV9jb2VmZltpXSA9IG9yZ19jdyAqICgxIDw8IDExKSAvIGN3W2ldOworICAgICAgICAg ICAgbG1jcy0+Y2hyb21hX3NjYWxlX2NvZWZmW2ldID0gb3JnX2N3ICogKDEgPDwgMTEpIC8gKGN3 W2ldICsgZGVsdGFfY3JzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vZGVyaXZlIGxtY3Nf ZndkX2x1dAorICAgIGZvciAodWludDE2X3Qgc2FtcGxlID0gMDsgc2FtcGxlIDwgbWF4OyBzYW1w bGUrKykgeworICAgICAgICBjb25zdCBpbnQgaWR4X3kgPSBzYW1wbGUgLyBvcmdfY3c7CisgICAg ICAgIGNvbnN0IHVpbnQxNl90IGZ3ZF9zYW1wbGUgPSBsbWNzX2Rlcml2ZV9sdXRfc2FtcGxlKHNh bXBsZSwgbG1jcy0+cGl2b3QsCisgICAgICAgICAgICBpbnB1dF9waXZvdCwgc2NhbGVfY29lZmYs IGlkeF95LCBtYXgpOworICAgICAgICBpZiAoYml0X2RlcHRoID4gOCkKKyAgICAgICAgICAgICgo dWludDE2X3QgKilsbWNzLT5md2RfbHV0KVtzYW1wbGVdID0gZndkX3NhbXBsZTsKKyAgICAgICAg ZWxzZQorICAgICAgICAgICAgbG1jcy0+ZndkX2x1dFtzYW1wbGVdID0gZndkX3NhbXBsZTsKKwor ICAgIH0KKworICAgIC8vZGVyaXZlIGxtY3NfaW52X2x1dAorICAgIGkgPSBsbWNzLT5taW5fYmlu X2lkeDsKKyAgICBmb3IgKHVpbnQxNl90IHNhbXBsZSA9IDA7IHNhbXBsZSA8IG1heDsgc2FtcGxl KyspIHsKKyAgICAgICAgdWludDE2X3QgaW52X3NhbXBsZTsKKyAgICAgICAgd2hpbGUgKHNhbXBs ZSA+PSBsbWNzLT5waXZvdFtpICsgMV0gJiYgaSA8PSBsbWNzLT5tYXhfYmluX2lkeCkKKyAgICAg ICAgICAgIGkrKzsKKworICAgICAgICBpbnZfc2FtcGxlID0gbG1jc19kZXJpdmVfbHV0X3NhbXBs ZShzYW1wbGUsIGlucHV0X3Bpdm90LCBsbWNzLT5waXZvdCwKKyAgICAgICAgICAgIGludl9zY2Fs ZV9jb2VmZiwgaSwgbWF4KTsKKworICAgICAgICBpZiAoYml0X2RlcHRoID4gOCkKKyAgICAgICAg ICAgICgodWludDE2X3QgKilsbWNzLT5pbnZfbHV0KVtzYW1wbGVdID0gaW52X3NhbXBsZTsKKyAg ICAgICAgZWxzZQorICAgICAgICAgICAgbG1jcy0+aW52X2x1dFtzYW1wbGVdID0gaW52X3NhbXBs ZTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwaF9tYXhfbnVtX3N1 YmJsb2NrX21lcmdlX2NhbmQoY29uc3QgSDI2NlJhd1NQUyAqc3BzLCBjb25zdCBIMjY2UmF3UGlj dHVyZUhlYWRlciAqcGgpCit7CisgICAgaWYgKHNwcy0+c3BzX2FmZmluZV9lbmFibGVkX2ZsYWcp CisgICAgICAgIHJldHVybiA1IC0gc3BzLT5zcHNfZml2ZV9taW51c19tYXhfbnVtX3N1YmJsb2Nr X21lcmdlX2NhbmQ7CisgICAgcmV0dXJuIHNwcy0+c3BzX3NidG12cF9lbmFibGVkX2ZsYWcgJiYg cGgtPnBoX3RlbXBvcmFsX212cF9lbmFibGVkX2ZsYWc7Cit9CisKK3N0YXRpYyBpbnQgcGhfZGVy aXZlKFZWQ1BIICpwaCwgY29uc3QgSDI2NlJhd1NQUyAqc3BzLCBjb25zdCBIMjY2UmF3UFBTICpw cHMsIGNvbnN0IGludCBwb2NfdGlkMCwgY29uc3QgaW50IGlzX2NsdnNzKQoreworICAgIHBoLT5t YXhfbnVtX3N1YmJsb2NrX21lcmdlX2NhbmQgPSBwaF9tYXhfbnVtX3N1YmJsb2NrX21lcmdlX2Nh bmQoc3BzLCBwaC0+cik7CisKKyAgICBwaC0+cG9jID0gcGhfY29tcHV0ZV9wb2MocGgtPnIsIHNw cywgcG9jX3RpZDAsIGlzX2NsdnNzKTsKKworICAgIGlmIChwcHMtPnBwc193cF9pbmZvX2luX3Bo X2ZsYWcpCisgICAgICAgIHByZWRfd2VpZ2h0X3RhYmxlKCZwaC0+cHd0LCAmcGgtPnItPnBoX3By ZWRfd2VpZ2h0X3RhYmxlKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRlY29k ZV9waChWVkNGcmFtZVBhcmFtU2V0cyAqZnBzLCBjb25zdCBIMjY2UmF3UGljdHVyZUhlYWRlciAq cnBoLCB2b2lkICpycGhfcmVmLAorICAgIGNvbnN0IGludCBwb2NfdGlkMCwgY29uc3QgaW50IGlz X2NsdnNzKQoreworICAgIGludCByZXQ7CisgICAgVlZDUEggKnBoID0gJmZwcy0+cGg7CisgICAg Y29uc3QgSDI2NlJhd1NQUyAqc3BzID0gZnBzLT5zcHMtPnI7CisgICAgY29uc3QgSDI2NlJhd1BQ UyAqcHBzID0gZnBzLT5wcHMtPnI7CisKKyAgICBwaC0+ciA9IHJwaDsKKyAgICBmZl9yZWZzdHJ1 Y3RfcmVwbGFjZSgmcGgtPnJyZWYsIHJwaF9yZWYpOworICAgIHJldCA9IHBoX2Rlcml2ZShwaCwg c3BzLCBwcHMsIHBvY190aWQwLCBpc19jbHZzcyk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAg IHJldHVybiByZXQ7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkZWNvZGVfZnJh bWVfcHMoVlZDRnJhbWVQYXJhbVNldHMgKmZwcywgY29uc3QgVlZDUGFyYW1TZXRzICpwcywKKyAg ICBjb25zdCBDb2RlZEJpdHN0cmVhbUgyNjZDb250ZXh0ICpoMjY2LCBjb25zdCBpbnQgcG9jX3Rp ZDAsIGNvbnN0IGludCBpc19jbHZzcykKK3sKKyAgICBjb25zdCBIMjY2UmF3UGljdHVyZUhlYWRl ciAqcGggPSBoMjY2LT5waDsKKyAgICBjb25zdCBIMjY2UmF3UFBTICpycHBzOworICAgIGludCBy ZXQ7CisKKyAgICBpZiAoIXBoKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsK KworICAgIHJwcHMgPSBoMjY2LT5wcHNbcGgtPnBoX3BpY19wYXJhbWV0ZXJfc2V0X2lkXTsKKyAg ICBpZiAoIXJwcHMpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAg ZmZfcmVmc3RydWN0X3JlcGxhY2UoJmZwcy0+c3BzLCBwcy0+c3BzX2xpc3RbcnBwcy0+cHBzX3Nl cV9wYXJhbWV0ZXJfc2V0X2lkXSk7CisgICAgZmZfcmVmc3RydWN0X3JlcGxhY2UoJmZwcy0+cHBz LCBwcy0+cHBzX2xpc3RbcnBwcy0+cHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkXSk7CisKKyAgICBy ZXQgPSBkZWNvZGVfcGgoZnBzLCBwaCwgaDI2Ni0+cGhfcmVmLCBwb2NfdGlkMCwgaXNfY2x2c3Mp OworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgaWYgKHBoLT5w aF9leHBsaWNpdF9zY2FsaW5nX2xpc3RfZW5hYmxlZF9mbGFnKQorICAgICAgICBmZl9yZWZzdHJ1 Y3RfcmVwbGFjZSgmZnBzLT5zbCwgcHMtPnNjYWxpbmdfbGlzdFtwaC0+cGhfc2NhbGluZ19saXN0 X2Fwc19pZF0pOworCisgICAgaWYgKHBoLT5waF9sbWNzX2VuYWJsZWRfZmxhZykgeworICAgICAg ICByZXQgPSBsbWNzX2Rlcml2ZV9sdXQoJmZwcy0+bG1jcywgcHMtPmxtY3NfbGlzdFtwaC0+cGhf bG1jc19hcHNfaWRdLCBmcHMtPnNwcy0+cik7CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAg ICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FS UkFZX0VMRU1TKGZwcy0+YWxmX2xpc3QpOyBpKyspCisgICAgICAgIGZmX3JlZnN0cnVjdF9yZXBs YWNlKCZmcHMtPmFsZl9saXN0W2ldLCBwcy0+YWxmX2xpc3RbaV0pOworCisgICAgcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyB2b2lkIGRlY29kZV9yZWNvdmVyeV9mbGFnKFZWQ0NvbnRleHQgKnMpCit7 CisgICAgaWYgKElTX0lEUihzKSkKKyAgICAgICAgcy0+bm9fb3V0cHV0X2JlZm9yZV9yZWNvdmVy eV9mbGFnID0gMDsKKyAgICBlbHNlIGlmIChJU19DUkEocykgfHwgSVNfR0RSKHMpKQorICAgICAg ICBzLT5ub19vdXRwdXRfYmVmb3JlX3JlY292ZXJ5X2ZsYWcgPSBzLT5sYXN0X2VvczsKK30KKwor c3RhdGljIHZvaWQgZGVjb2RlX3JlY292ZXJ5X3BvYyhWVkNDb250ZXh0ICpzLCBjb25zdCBWVkNQ SCAqcGgpCit7CisgICAgaWYgKHMtPm5vX291dHB1dF9iZWZvcmVfcmVjb3ZlcnlfZmxhZykgewor ICAgICAgICBpZiAoSVNfR0RSKHMpKQorICAgICAgICAgICAgcy0+Z2RyX3JlY292ZXJ5X3BvaW50 X3BvYyA9IHBoLT5wb2MgKyBwaC0+ci0+cGhfcmVjb3ZlcnlfcG9jX2NudDsKKyAgICAgICAgaWYg KCFHRFJfSVNfUkVDT1ZFUkVEKHMpICYmIHMtPmdkcl9yZWNvdmVyeV9wb2ludF9wb2MgPD0gcGgt PnBvYykKKyAgICAgICAgICAgIEdEUl9TRVRfUkVDT1ZFUkVEKHMpOworICAgIH0KK30KKworaW50 IGZmX3Z2Y19kZWNvZGVfZnJhbWVfcHMoVlZDRnJhbWVQYXJhbVNldHMgKmZwcywgc3RydWN0IFZW Q0NvbnRleHQgKnMpCit7CisgICAgaW50IHJldCA9IDA7CisgICAgVlZDUGFyYW1TZXRzICpwcyAg ICAgICAgICAgICAgICAgICAgICAgID0gJnMtPnBzOworICAgIGNvbnN0IENvZGVkQml0c3RyZWFt SDI2NkNvbnRleHQgKmgyNjYgICA9IHMtPmNiYy0+cHJpdl9kYXRhOworCisgICAgcmV0ID0gZGVj b2RlX3BzKHBzLCBoMjY2LCBzLT5hdmN0eCk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJl dHVybiByZXQ7CisKKyAgICBkZWNvZGVfcmVjb3ZlcnlfZmxhZyhzKTsKKyAgICByZXQgPSBkZWNv ZGVfZnJhbWVfcHMoZnBzLCBwcywgaDI2Niwgcy0+cG9jX3RpZDAsIElTX0NMVlNTKHMpKTsKKyAg ICBkZWNvZGVfcmVjb3ZlcnlfcG9jKHMsICZmcHMtPnBoKTsKKyAgICByZXR1cm4gcmV0OworfQor Cit2b2lkIGZmX3Z2Y19mcmFtZV9wc19mcmVlKFZWQ0ZyYW1lUGFyYW1TZXRzICpmcHMpCit7Cisg ICAgZmZfcmVmc3RydWN0X3VucmVmKCZmcHMtPnNwcyk7CisgICAgZmZfcmVmc3RydWN0X3VucmVm KCZmcHMtPnBwcyk7CisgICAgZmZfcmVmc3RydWN0X3VucmVmKCZmcHMtPnBoLnJyZWYpOworICAg IGZmX3JlZnN0cnVjdF91bnJlZigmZnBzLT5zbCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBG Rl9BUlJBWV9FTEVNUyhmcHMtPmFsZl9saXN0KTsgaSsrKQorICAgICAgICBmZl9yZWZzdHJ1Y3Rf dW5yZWYoJmZwcy0+YWxmX2xpc3RbaV0pOworfQorCit2b2lkIGZmX3Z2Y19wc191bmluaXQoVlZD UGFyYW1TZXRzICpwcykKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1T KHBzLT5zY2FsaW5nX2xpc3QpOyBpKyspCisgICAgICAgIGZmX3JlZnN0cnVjdF91bnJlZigmcHMt PnNjYWxpbmdfbGlzdFtpXSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVN Uyhwcy0+bG1jc19saXN0KTsgaSsrKQorICAgICAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJnBzLT5s bWNzX2xpc3RbaV0pOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMocHMt PmFsZl9saXN0KTsgaSsrKQorICAgICAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJnBzLT5hbGZfbGlz dFtpXSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhwcy0+c3BzX2xp c3QpOyBpKyspCisgICAgICAgIGZmX3JlZnN0cnVjdF91bnJlZigmcHMtPnNwc19saXN0W2ldKTsK KyAgICBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHBzLT5wcHNfbGlzdCk7IGkr KykKKyAgICAgICAgZmZfcmVmc3RydWN0X3VucmVmKCZwcy0+cHBzX2xpc3RbaV0pOworfQorCitl bnVtIHsKKyAgICBBUFNfQUxGLAorICAgIEFQU19MTUNTLAorICAgIEFQU19TQ0FMSU5HLAorfTsK Kworc3RhdGljIHZvaWQgYWxmX2NvZWZmKGludDE2X3QgKmNvZWZmLAorICAgIGNvbnN0IHVpbnQ4 X3QgKmFicywgY29uc3QgdWludDhfdCAqc2lnbiwgY29uc3QgaW50IHNpemUpCit7CisgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgIGNvZWZmW2ldID0gKDEgLSAyICog c2lnbltpXSkgKiBhYnNbaV07Cit9CisKK3N0YXRpYyB2b2lkIGFsZl9jb2VmZl9jYyhpbnQxNl90 ICpjb2VmZiwKKyAgICBjb25zdCB1aW50OF90ICptYXBwZWRfYWJzLCBjb25zdCB1aW50OF90ICpz aWduKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgQUxGX05VTV9DT0VGRl9DQzsgaSsrKSB7 CisgICAgICAgIGludCBjID0gbWFwcGVkX2Fic1tpXTsKKyAgICAgICAgaWYgKGMpCisgICAgICAg ICAgICBjID0gKDEgLSAyICogc2lnbltpXSkgKiAoMSA8PCAoYyAtIDEpKTsKKyAgICAgICAgY29l ZmZbaV0gPSBjOworICAgIH0KK30KKworc3RhdGljIHZvaWQgYWxmX2x1bWEoVlZDQUxGICphbGYs IGNvbnN0IEgyNjZSYXdBUFMgKmFwcykKK3sKKyAgICBpZiAoIWFwcy0+YWxmX2x1bWFfZmlsdGVy X3NpZ25hbF9mbGFnKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8 IEFMRl9OVU1fRklMVEVSU19MVU1BOyBpKyspIHsKKyAgICAgICAgY29uc3QgaW50IHJlZiAgICAg ICA9IGFwcy0+YWxmX2x1bWFfY29lZmZfZGVsdGFfaWR4W2ldOworICAgICAgICBjb25zdCB1aW50 OF90ICphYnMgID0gYXBzLT5hbGZfbHVtYV9jb2VmZl9hYnNbcmVmXTsKKyAgICAgICAgY29uc3Qg dWludDhfdCAqc2lnbiA9IGFwcy0+YWxmX2x1bWFfY29lZmZfc2lnbltyZWZdOworCisgICAgICAg IGFsZl9jb2VmZihhbGYtPmx1bWFfY29lZmZbaV0sIGFicywgc2lnbiwgQUxGX05VTV9DT0VGRl9M VU1BKTsKKyAgICAgICAgbWVtY3B5KGFsZi0+bHVtYV9jbGlwX2lkeFtpXSwgYXBzLT5hbGZfbHVt YV9jbGlwX2lkeFtyZWZdLAorICAgICAgICAgICAgc2l6ZW9mKGFsZi0+bHVtYV9jbGlwX2lkeFtp XSkpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgYWxmX2Nocm9tYShWVkNBTEYgKmFsZiwgY29u c3QgSDI2NlJhd0FQUyAqYXBzKQoreworICAgIGlmICghYXBzLT5hbGZfY2hyb21hX2ZpbHRlcl9z aWduYWxfZmxhZykKKyAgICAgICAgcmV0dXJuOworCisgICAgYWxmLT5udW1fY2hyb21hX2ZpbHRl cnMgID0gYXBzLT5hbGZfY2hyb21hX251bV9hbHRfZmlsdGVyc19taW51czEgKyAxOworICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgYWxmLT5udW1fY2hyb21hX2ZpbHRlcnM7IGkrKykgeworICAgICAg ICBjb25zdCB1aW50OF90ICphYnMgID0gYXBzLT5hbGZfY2hyb21hX2NvZWZmX2Fic1tpXTsKKyAg ICAgICAgY29uc3QgdWludDhfdCAqc2lnbiA9IGFwcy0+YWxmX2Nocm9tYV9jb2VmZl9zaWduW2ld OworCisgICAgICAgIGFsZl9jb2VmZihhbGYtPmNocm9tYV9jb2VmZltpXSwgYWJzLCBzaWduLCBB TEZfTlVNX0NPRUZGX0NIUk9NQSk7CisgICAgICAgIG1lbWNweShhbGYtPmNocm9tYV9jbGlwX2lk eFtpXSwgYXBzLT5hbGZfY2hyb21hX2NsaXBfaWR4W2ldLAorICAgICAgICAgICAgc2l6ZW9mKGFs Zi0+Y2hyb21hX2NsaXBfaWR4W2ldKSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBhbGZfY2Mo VlZDQUxGICphbGYsIGNvbnN0IEgyNjZSYXdBUFMgKmFwcykKK3sKKyAgICBjb25zdCB1aW50OF90 ICgqYWJzW10pW0FMRl9OVU1fQ09FRkZfQ0NdID0KKyAgICAgICAgeyBhcHMtPmFsZl9jY19jYl9t YXBwZWRfY29lZmZfYWJzLCBhcHMtPmFsZl9jY19jcl9tYXBwZWRfY29lZmZfYWJzIH07CisgICAg Y29uc3QgdWludDhfdCAoKnNpZ25bXSlbQUxGX05VTV9DT0VGRl9DQ10gPQorICAgICAgICB7YXBz LT5hbGZfY2NfY2JfY29lZmZfc2lnbiwgYXBzLT5hbGZfY2NfY3JfY29lZmZfc2lnbiB9OworICAg IGNvbnN0IGludCBzaWduYWxlZFtdID0geyBhcHMtPmFsZl9jY19jYl9maWx0ZXJfc2lnbmFsX2Zs YWcsIGFwcy0+YWxmX2NjX2NyX2ZpbHRlcl9zaWduYWxfZmxhZ307CisKKyAgICBhbGYtPm51bV9j Y19maWx0ZXJzWzBdID0gYXBzLT5hbGZfY2NfY2JfZmlsdGVyc19zaWduYWxsZWRfbWludXMxICsg MTsKKyAgICBhbGYtPm51bV9jY19maWx0ZXJzWzFdID0gYXBzLT5hbGZfY2NfY3JfZmlsdGVyc19z aWduYWxsZWRfbWludXMxICsgMTsKKworICAgIGZvciAoaW50IGlkeCA9IDA7IGlkeCA8IDI7IGlk eCsrKSB7CisgICAgICAgIGlmIChzaWduYWxlZFtpZHhdKSB7CisgICAgICAgICAgICBmb3IgKGlu dCBpID0gMDsgaSA8IGFsZi0+bnVtX2NjX2ZpbHRlcnNbaWR4XTsgaSsrKQorICAgICAgICAgICAg ICAgIGFsZl9jb2VmZl9jYyhhbGYtPmNjX2NvZWZmW2lkeF1baV0sIGFic1tpZHhdW2ldLCBzaWdu W2lkeF1baV0pOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBhbGZfZGVyaXZl KFZWQ0FMRiAqYWxmLCBjb25zdCBIMjY2UmF3QVBTICphcHMpCit7CisgICAgYWxmX2x1bWEoYWxm LCBhcHMpOworICAgIGFsZl9jaHJvbWEoYWxmLCBhcHMpOworICAgIGFsZl9jYyhhbGYsIGFwcyk7 Cit9CisKK3N0YXRpYyBpbnQgYXBzX2RlY29kZV9hbGYoY29uc3QgVlZDQUxGICoqYWxmLCBjb25z dCBIMjY2UmF3QVBTICphcHMpCit7CisgICAgVlZDQUxGICphID0gZmZfcmVmc3RydWN0X2FsbG9j eihzaXplb2YoKmEpKTsKKyAgICBpZiAoIWEpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01F TSk7CisKKyAgICBhbGZfZGVyaXZlKGEsIGFwcyk7CisgICAgZmZfcmVmc3RydWN0X3JlcGxhY2Uo YWxmLCBhKTsKKyAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJmEpOworCisgICAgcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgaXNfbHVtYV9saXN0KGNvbnN0IGludCBpZCkKK3sKKyAgICByZXR1cm4g aWQgJSBWVkNfTUFYX1NBTVBMRV9BUlJBWVMgPT0gU0xfU1RBUlRfNHg0IHx8IGlkID09IFNMX1NU QVJUXzY0eDY0ICsgMTsKK30KKworc3RhdGljIGludCBkZXJpdmVfbWF0cml4X3NpemUoY29uc3Qg aW50IGlkKQoreworICAgIHJldHVybiBpZCA8IFNMX1NUQVJUXzR4NCA/IDIgOiAoaWQgPCBTTF9T VEFSVF84eDggPyA0IDogOCk7Cit9CisKKy8vIDcuNC4zLjIwIFNjYWxpbmcgbGlzdCBkYXRhIHNl bWFudGljcworc3RhdGljIHZvaWQgc2NhbGluZ19kZXJpdmUoVlZDU2NhbGluZ0xpc3QgKnNsLCBj b25zdCBIMjY2UmF3QVBTICphcHMpCit7CisgICAgZm9yIChpbnQgaWQgPSAwOyBpZCA8IFNMX01B WF9JRDsgaWQrKykgeworICAgICAgICBjb25zdCBpbnQgbWF0cml4X3NpemUgICA9IGRlcml2ZV9t YXRyaXhfc2l6ZShpZCk7CisgICAgICAgIGNvbnN0IGludCBsb2cyX3NpemUgICAgID0gbG9nMiht YXRyaXhfc2l6ZSk7CisgICAgICAgIGNvbnN0IGludCBsaXN0X3NpemUgICAgID0gbWF0cml4X3Np emUgKiBtYXRyaXhfc2l6ZTsKKyAgICAgICAgaW50IGNvZWZmW1NMX01BWF9NQVRSSVhfU0laRSAq IFNMX01BWF9NQVRSSVhfU0laRV07CisgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnByZWQ7CisgICAg ICAgIGNvbnN0IGludCAqc2NhbGluZ19saXN0OworICAgICAgICBpbnQgZGMgPSAwOworCisgICAg ICAgIGlmIChhcHMtPmFwc19jaHJvbWFfcHJlc2VudF9mbGFnIHx8IGlzX2x1bWFfbGlzdChpZCkp IHsKKyAgICAgICAgICAgIGlmICghYXBzLT5zY2FsaW5nX2xpc3RfY29weV9tb2RlX2ZsYWdbaWRd KSB7CisgICAgICAgICAgICAgICAgaW50IG5leHRfY29lZiA9IDA7CisKKyAgICAgICAgICAgICAg ICBpZiAoaWQgPj0gU0xfU1RBUlRfMTZ4MTYpCisgICAgICAgICAgICAgICAgICAgIGRjID0gbmV4 dF9jb2VmID0gYXBzLT5zY2FsaW5nX2xpc3RfZGNfY29lZltpZCAtIFNMX1NUQVJUXzE2eDE2XTsK KworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdF9zaXplOyBpKyspIHsK KyAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHggPSBmZl92dmNfZGlhZ19zY2FuX3hbM11b M11baV07CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCB5ID0gZmZfdnZjX2RpYWdfc2Nh bl95WzNdWzNdW2ldOworCisgICAgICAgICAgICAgICAgICAgIGlmICghKGlkID49IFNMX1NUQVJU XzY0eDY0ICYmIHggPj0gNCAmJiB5ID49IDQpKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV4 dF9jb2VmICs9IGFwcy0+c2NhbGluZ19saXN0X2RlbHRhX2NvZWZbaWRdW2ldOworICAgICAgICAg ICAgICAgICAgICBjb2VmZltpXSA9IG5leHRfY29lZjsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvL2RjCisgICAgICAgIGlmIChpZCA+PSBT TF9TVEFSVF8xNngxNikgeworICAgICAgICAgICAgaWYgKCFhcHMtPnNjYWxpbmdfbGlzdF9jb3B5 X21vZGVfZmxhZ1tpZF0gJiYgIWFwcy0+c2NhbGluZ19saXN0X3ByZWRfbW9kZV9mbGFnW2lkXSkg eworICAgICAgICAgICAgICAgIHNsLT5zY2FsaW5nX21hdHJpeF9kY19yZWNbaWQgLSBTTF9TVEFS VF8xNngxNl0gPSA4OworICAgICAgICAgICAgfSBlbHNlIGlmICghYXBzLT5zY2FsaW5nX2xpc3Rf cHJlZF9pZF9kZWx0YVtpZF0pIHsKKyAgICAgICAgICAgICAgICBzbC0+c2NhbGluZ19tYXRyaXhf ZGNfcmVjW2lkIC0gU0xfU1RBUlRfMTZ4MTZdID0gMTY7CisgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgIGNvbnN0IGludCByZWZfaWQgPSBpZCAtIGFwcy0+c2NhbGluZ19saXN0 X3ByZWRfaWRfZGVsdGFbaWRdOworICAgICAgICAgICAgICAgIGlmIChyZWZfaWQgPj0gU0xfU1RB UlRfMTZ4MTYpCisgICAgICAgICAgICAgICAgICAgIGRjICs9IHNsLT5zY2FsaW5nX21hdHJpeF9k Y19yZWNbcmVmX2lkIC0gU0xfU1RBUlRfMTZ4MTZdOworICAgICAgICAgICAgICAgIGVsc2UKKyAg ICAgICAgICAgICAgICAgICAgZGMgKz0gc2wtPnNjYWxpbmdfbWF0cml4X3JlY1tyZWZfaWRdWzBd OworICAgICAgICAgICAgICAgIHNsLT5zY2FsaW5nX21hdHJpeF9kY19yZWNbaWQgLSBTTF9TVEFS VF8xNngxNl0gPSBkYyAmIDI1NTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg IC8vYWMKKyAgICAgICAgc2NhbGluZ19saXN0ID0gYXBzLT5zY2FsaW5nX2xpc3RfY29weV9tb2Rl X2ZsYWdbaWRdID8gZmZfdnZjX3NjYWxpbmdfbGlzdDAgOiBjb2VmZjsKKyAgICAgICAgaWYgKCFh cHMtPnNjYWxpbmdfbGlzdF9jb3B5X21vZGVfZmxhZ1tpZF0gJiYgIWFwcy0+c2NhbGluZ19saXN0 X3ByZWRfbW9kZV9mbGFnW2lkXSkKKyAgICAgICAgICAgIHByZWQgPSBmZl92dmNfc2NhbGluZ19w cmVkXzg7CisgICAgICAgIGVsc2UgaWYgKCFhcHMtPnNjYWxpbmdfbGlzdF9wcmVkX2lkX2RlbHRh W2lkXSkKKyAgICAgICAgICAgIHByZWQgPSBmZl92dmNfc2NhbGluZ19wcmVkXzE2OworICAgICAg ICBlbHNlCisgICAgICAgICAgICBwcmVkID0gc2wtPnNjYWxpbmdfbWF0cml4X3JlY1tpZCAtIGFw cy0+c2NhbGluZ19saXN0X3ByZWRfaWRfZGVsdGFbaWRdXTsKKyAgICAgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCBsaXN0X3NpemU7IGkrKykgeworICAgICAgICAgICAgY29uc3QgaW50IHggPSBmZl92 dmNfZGlhZ19zY2FuX3hbbG9nMl9zaXplXVtsb2cyX3NpemVdW2ldOworICAgICAgICAgICAgY29u c3QgaW50IHkgPSBmZl92dmNfZGlhZ19zY2FuX3lbbG9nMl9zaXplXVtsb2cyX3NpemVdW2ldOwor ICAgICAgICAgICAgY29uc3QgaW50IG9mZiA9IHkgKiBtYXRyaXhfc2l6ZSArIHg7CisgICAgICAg ICAgICBzbC0+c2NhbGluZ19tYXRyaXhfcmVjW2lkXVtvZmZdID0gKHByZWRbb2ZmXSArIHNjYWxp bmdfbGlzdFtpXSkgJiAyNTU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgYXBz X2RlY29kZV9zY2FsaW5nKGNvbnN0IFZWQ1NjYWxpbmdMaXN0ICoqc2NhbGluZywgY29uc3QgSDI2 NlJhd0FQUyAqYXBzKQoreworICAgIFZWQ1NjYWxpbmdMaXN0ICpzbCA9IGZmX3JlZnN0cnVjdF9h bGxvY3ooc2l6ZW9mKCpzbCkpOworICAgIGlmICghc2wpCisgICAgICAgIHJldHVybiBBVkVSUk9S KEVOT01FTSk7CisKKyAgICBzY2FsaW5nX2Rlcml2ZShzbCwgYXBzKTsKKyAgICBmZl9yZWZzdHJ1 Y3RfcmVwbGFjZShzY2FsaW5nLCBzbCk7CisgICAgZmZfcmVmc3RydWN0X3VucmVmKCZzbCk7CisK KyAgICByZXR1cm4gMDsKK30KKworaW50IGZmX3Z2Y19kZWNvZGVfYXBzKFZWQ1BhcmFtU2V0cyAq cHMsIGNvbnN0IENvZGVkQml0c3RyZWFtVW5pdCAqdW5pdCkKK3sKKyAgICBjb25zdCBIMjY2UmF3 QVBTICphcHMgPSB1bml0LT5jb250ZW50X3JlZjsKKyAgICBpbnQgcmV0ICAgICAgICAgICAgICAg PSAwOworCisgICAgaWYgKCFhcHMpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRB OworCisgICAgc3dpdGNoIChhcHMtPmFwc19wYXJhbXNfdHlwZSkgeworICAgICAgICBjYXNlIEFQ U19BTEY6CisgICAgICAgICAgICByZXQgPSBhcHNfZGVjb2RlX2FsZigmcHMtPmFsZl9saXN0W2Fw cy0+YXBzX2FkYXB0YXRpb25fcGFyYW1ldGVyX3NldF9pZF0sIGFwcyk7CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgY2FzZSBBUFNfTE1DUzoKKyAgICAgICAgICAgIGZmX3JlZnN0cnVjdF9y ZXBsYWNlKCZwcy0+bG1jc19saXN0W2Fwcy0+YXBzX2FkYXB0YXRpb25fcGFyYW1ldGVyX3NldF9p ZF0sIGFwcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBUFNfU0NBTElORzoK KyAgICAgICAgICAgIHJldCA9IGFwc19kZWNvZGVfc2NhbGluZygmcHMtPnNjYWxpbmdfbGlzdFth cHMtPmFwc19hZGFwdGF0aW9uX3BhcmFtZXRlcl9zZXRfaWRdLCBhcHMpOworICAgICAgICAgICAg YnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc2hfc2xp Y2VfYWRkcmVzcyhWVkNTSCAqc2gsIGNvbnN0IEgyNjZSYXdTUFMgKnNwcywgY29uc3QgVlZDUFBT ICpwcHMpCit7CisgICAgY29uc3QgaW50IHNsaWNlX2FkZHJlc3MgICAgID0gc2gtPnItPnNoX3Ns aWNlX2FkZHJlc3M7CisKKyAgICBpZiAocHBzLT5yLT5wcHNfcmVjdF9zbGljZV9mbGFnKSB7Cisg ICAgICAgIGludCBwaWNfbGV2ZWxfc2xpY2VfaWR4ID0gc2xpY2VfYWRkcmVzczsKKyAgICAgICAg Zm9yIChpbnQgaiA9IDA7IGogPCBzaC0+ci0+Y3Vycl9zdWJwaWNfaWR4OyBqKyspCisgICAgICAg ICAgICBwaWNfbGV2ZWxfc2xpY2VfaWR4ICs9IHBwcy0+ci0+bnVtX3NsaWNlc19pbl9zdWJwaWNb al07CisgICAgICAgIHNoLT5jdGJfYWRkcl9pbl9jdXJyX3NsaWNlID0gcHBzLT5jdGJfYWRkcl9p bl9zbGljZSArIHBwcy0+c2xpY2Vfc3RhcnRfb2Zmc2V0W3BpY19sZXZlbF9zbGljZV9pZHhdOwor ICAgICAgICBzaC0+bnVtX2N0dXNfaW5fY3Vycl9zbGljZSA9IHBwcy0+bnVtX2N0dXNfaW5fc2xp Y2VbcGljX2xldmVsX3NsaWNlX2lkeF07CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IHRpbGVf eCA9IHNsaWNlX2FkZHJlc3MgJSBwcHMtPnItPm51bV90aWxlX2NvbHVtbnM7CisgICAgICAgIGlu dCB0aWxlX3kgPSBzbGljZV9hZGRyZXNzIC8gcHBzLT5yLT5udW1fdGlsZV9jb2x1bW5zOworICAg ICAgICBjb25zdCBpbnQgc2xpY2Vfc3RhcnRfY3RiID0gcHBzLT5yb3dfYmRbdGlsZV95XSAqIHBw cy0+Y3RiX3dpZHRoICsgcHBzLT5jb2xfYmRbdGlsZV94XSAqIHBwcy0+ci0+cm93X2hlaWdodF92 YWxbdGlsZV95XTsKKworICAgICAgICBzaC0+Y3RiX2FkZHJfaW5fY3Vycl9zbGljZSA9IHBwcy0+ Y3RiX2FkZHJfaW5fc2xpY2UgKyBzbGljZV9zdGFydF9jdGI7CisKKyAgICAgICAgc2gtPm51bV9j dHVzX2luX2N1cnJfc2xpY2UgPSAwOworICAgICAgICBmb3IgKGludCB0aWxlX2lkeCA9IHNsaWNl X2FkZHJlc3M7IHRpbGVfaWR4IDw9IHNsaWNlX2FkZHJlc3MgKyBzaC0+ci0+c2hfbnVtX3RpbGVz X2luX3NsaWNlX21pbnVzMTsgdGlsZV9pZHgrKykgeworICAgICAgICAgICAgdGlsZV94ID0gdGls ZV9pZHggJSBwcHMtPnItPm51bV90aWxlX2NvbHVtbnM7CisgICAgICAgICAgICB0aWxlX3kgPSB0 aWxlX2lkeCAvIHBwcy0+ci0+bnVtX3RpbGVfY29sdW1uczsKKyAgICAgICAgICAgIHNoLT5udW1f Y3R1c19pbl9jdXJyX3NsaWNlICs9IHBwcy0+ci0+cm93X2hlaWdodF92YWxbdGlsZV95XSAqIHBw cy0+ci0+Y29sX3dpZHRoX3ZhbFt0aWxlX3hdOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0 aWMgdm9pZCBzaF9xcF95KFZWQ1NIICpzaCwgY29uc3QgSDI2NlJhd1BQUyAqcHBzLCBjb25zdCBI MjY2UmF3UGljdHVyZUhlYWRlciAqcGgpCit7CisgICAgY29uc3QgaW50IGluaXRfcXAgPSBwcHMt PnBwc19pbml0X3FwX21pbnVzMjYgKyAyNjsKKworICAgIGlmICghcHBzLT5wcHNfcXBfZGVsdGFf aW5mb19pbl9waF9mbGFnKQorICAgICAgICBzaC0+c2xpY2VfcXBfeSA9IGluaXRfcXAgKyBzaC0+ ci0+c2hfcXBfZGVsdGE7CisgICAgZWxzZQorICAgICAgICBzaC0+c2xpY2VfcXBfeSA9IGluaXRf cXAgKyBwaC0+cGhfcXBfZGVsdGE7Cit9CisKK3N0YXRpYyB2b2lkIHNoX2ludGVyKFZWQ1NIICpz aCwgY29uc3QgSDI2NlJhd1NQUyAqc3BzLCBjb25zdCBIMjY2UmF3UFBTICpwcHMpCit7CisgICAg Y29uc3QgSDI2NlJhd1NsaWNlSGVhZGVyICpyc2ggPSBzaC0+cjsKKworICAgIGlmICghcHBzLT5w cHNfd3BfaW5mb19pbl9waF9mbGFnICYmCisgICAgICAgICgocHBzLT5wcHNfd2VpZ2h0ZWRfcHJl ZF9mbGFnICYmIElTX1AocnNoKSkgfHwKKyAgICAgICAgIChwcHMtPnBwc193ZWlnaHRlZF9iaXBy ZWRfZmxhZyAmJiBJU19CKHJzaCkpKSkKKyAgICAgICAgcHJlZF93ZWlnaHRfdGFibGUoJnNoLT5w d3QsICZyc2gtPnNoX3ByZWRfd2VpZ2h0X3RhYmxlKTsKK30KKworc3RhdGljIHZvaWQgc2hfZGVi bG9ja19vZmZzZXRzKFZWQ1NIICpzaCkKK3sKKyAgICBjb25zdCBIMjY2UmF3U2xpY2VIZWFkZXIg KnIgPSBzaC0+cjsKKworICAgIGlmICghci0+c2hfZGVibG9ja2luZ19maWx0ZXJfZGlzYWJsZWRf ZmxhZykgeworICAgICAgICBzaC0+ZGVibG9jay5iZXRhX29mZnNldFtMVU1BXSA9IHItPnNoX2x1 bWFfYmV0YV9vZmZzZXRfZGl2MiA8PCAxOworICAgICAgICBzaC0+ZGVibG9jay50Y19vZmZzZXRb TFVNQV0gICA9IHItPnNoX2x1bWFfdGNfb2Zmc2V0X2RpdjIgPDwgMTsKKyAgICAgICAgc2gtPmRl YmxvY2suYmV0YV9vZmZzZXRbQ0JdICAgPSByLT5zaF9jYl9iZXRhX29mZnNldF9kaXYyIDw8IDE7 CisgICAgICAgIHNoLT5kZWJsb2NrLnRjX29mZnNldFtDQl0gICAgID0gci0+c2hfY2JfdGNfb2Zm c2V0X2RpdjIgPDwgMTsKKyAgICAgICAgc2gtPmRlYmxvY2suYmV0YV9vZmZzZXRbQ1JdICAgPSBy LT5zaF9jcl9iZXRhX29mZnNldF9kaXYyIDw8IDE7CisgICAgICAgIHNoLT5kZWJsb2NrLnRjX29m ZnNldFtDUl0gICAgID0gci0+c2hfY3JfdGNfb2Zmc2V0X2RpdjIgPDwgMTsKKyAgICB9Cit9CisK K3N0YXRpYyB2b2lkIHNoX3BhcnRpdGlvbl9jb25zdHJhaW50cyhWVkNTSCAqc2gsIGNvbnN0IEgy NjZSYXdTUFMgKnNwcywgY29uc3QgSDI2NlJhd1BpY3R1cmVIZWFkZXIgKnBoKQoreworICAgIGNv bnN0IGludCBtaW5fY2JfbG9nMl9zaXplX3kgPSBzcHMtPnNwc19sb2cyX21pbl9sdW1hX2NvZGlu Z19ibG9ja19zaXplX21pbnVzMiArIDI7CisgICAgaW50IG1pbl9xdF9sb2cyX3NpemVfeVsyXTsK KworICAgIGlmIChJU19JKHNoLT5yKSkgeworICAgICAgICBtaW5fcXRfbG9nMl9zaXplX3lbTFVN QV0gICAgICAgID0gKG1pbl9jYl9sb2cyX3NpemVfeSArIHBoLT5waF9sb2cyX2RpZmZfbWluX3F0 X21pbl9jYl9pbnRyYV9zbGljZV9sdW1hKTsKKyAgICAgICAgbWluX3F0X2xvZzJfc2l6ZV95W0NI Uk9NQV0gICAgICA9IChtaW5fY2JfbG9nMl9zaXplX3kgKyBwaC0+cGhfbG9nMl9kaWZmX21pbl9x dF9taW5fY2JfaW50cmFfc2xpY2VfY2hyb21hKTsKKworICAgICAgICBzaC0+bWF4X2J0X3NpemVb TFVNQV0gICAgICAgICAgID0gMSA8PCAobWluX3F0X2xvZzJfc2l6ZV95W0xVTUFdICArIHBoLT5w aF9sb2cyX2RpZmZfbWF4X2J0X21pbl9xdF9pbnRyYV9zbGljZV9sdW1hKTsKKyAgICAgICAgc2gt Pm1heF9idF9zaXplW0NIUk9NQV0gICAgICAgICA9IDEgPDwgKG1pbl9xdF9sb2cyX3NpemVfeVtD SFJPTUFdKyBwaC0+cGhfbG9nMl9kaWZmX21heF9idF9taW5fcXRfaW50cmFfc2xpY2VfY2hyb21h KTsKKworICAgICAgICBzaC0+bWF4X3R0X3NpemVbTFVNQV0gICAgICAgICAgID0gMSA8PCAobWlu X3F0X2xvZzJfc2l6ZV95W0xVTUFdICArIHBoLT5waF9sb2cyX2RpZmZfbWF4X3R0X21pbl9xdF9p bnRyYV9zbGljZV9sdW1hKTsKKyAgICAgICAgc2gtPm1heF90dF9zaXplW0NIUk9NQV0gICAgICAg ICA9IDEgPDwgKG1pbl9xdF9sb2cyX3NpemVfeVtDSFJPTUFdKyBwaC0+cGhfbG9nMl9kaWZmX21h eF90dF9taW5fcXRfaW50cmFfc2xpY2VfY2hyb21hKTsKKworICAgICAgICBzaC0+bWF4X210dF9k ZXB0aFtMVU1BXSAgICAgICAgID0gcGgtPnBoX21heF9tdHRfaGllcmFyY2h5X2RlcHRoX2ludHJh X3NsaWNlX2x1bWE7CisgICAgICAgIHNoLT5tYXhfbXR0X2RlcHRoW0NIUk9NQV0gICAgICAgPSBw aC0+cGhfbWF4X210dF9oaWVyYXJjaHlfZGVwdGhfaW50cmFfc2xpY2VfY2hyb21hOworCisgICAg ICAgIHNoLT5jdV9xcF9kZWx0YV9zdWJkaXYgICAgICAgICAgPSBwaC0+cGhfY3VfcXBfZGVsdGFf c3ViZGl2X2ludHJhX3NsaWNlOworICAgICAgICBzaC0+Y3VfY2hyb21hX3FwX29mZnNldF9zdWJk aXYgID0gcGgtPnBoX2N1X2Nocm9tYV9xcF9vZmZzZXRfc3ViZGl2X2ludHJhX3NsaWNlOworICAg IH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IGkgPSBMVU1BOyBpIDw9IENIUk9NQTsgaSsrKSAg eworICAgICAgICAgICAgbWluX3F0X2xvZzJfc2l6ZV95W2ldICAgICAgICA9IChtaW5fY2JfbG9n Ml9zaXplX3kgKyBwaC0+cGhfbG9nMl9kaWZmX21pbl9xdF9taW5fY2JfaW50ZXJfc2xpY2UpOwor ICAgICAgICAgICAgc2gtPm1heF9idF9zaXplW2ldICAgICAgICAgICA9IDEgPDwgKG1pbl9xdF9s b2cyX3NpemVfeVtpXSAgKyBwaC0+cGhfbG9nMl9kaWZmX21heF9idF9taW5fcXRfaW50ZXJfc2xp Y2UpOworICAgICAgICAgICAgc2gtPm1heF90dF9zaXplW2ldICAgICAgICAgICA9IDEgPDwgKG1p bl9xdF9sb2cyX3NpemVfeVtpXSAgKyBwaC0+cGhfbG9nMl9kaWZmX21heF90dF9taW5fcXRfaW50 ZXJfc2xpY2UpOworICAgICAgICAgICAgc2gtPm1heF9tdHRfZGVwdGhbaV0gICAgICAgICA9IHBo LT5waF9tYXhfbXR0X2hpZXJhcmNoeV9kZXB0aF9pbnRlcl9zbGljZTsKKyAgICAgICAgfQorCisg ICAgICAgIHNoLT5jdV9xcF9kZWx0YV9zdWJkaXYgICAgICAgICAgPSBwaC0+cGhfY3VfcXBfZGVs dGFfc3ViZGl2X2ludGVyX3NsaWNlOworICAgICAgICBzaC0+Y3VfY2hyb21hX3FwX29mZnNldF9z dWJkaXYgID0gcGgtPnBoX2N1X2Nocm9tYV9xcF9vZmZzZXRfc3ViZGl2X2ludGVyX3NsaWNlOwor ICAgIH0KKworICAgIHNoLT5taW5fcXRfc2l6ZVtMVU1BXSAgID0gMSA8PCBtaW5fcXRfbG9nMl9z aXplX3lbTFVNQV07CisgICAgc2gtPm1pbl9xdF9zaXplW0NIUk9NQV0gPSAxIDw8IG1pbl9xdF9s b2cyX3NpemVfeVtDSFJPTUFdOworfQorCitzdGF0aWMgdm9pZCBzaF9lbnRyeV9wb2ludHMoVlZD U0ggKnNoLCBjb25zdCBIMjY2UmF3U1BTICpzcHMsIGNvbnN0IFZWQ1BQUyAqcHBzKQoreworICAg IGlmIChzcHMtPnNwc19lbnRyeV9wb2ludF9vZmZzZXRzX3ByZXNlbnRfZmxhZykgeworICAgICAg ICBmb3IgKGludCBpID0gMSwgaiA9IDA7IGkgPCBzaC0+bnVtX2N0dXNfaW5fY3Vycl9zbGljZTsg aSsrKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJlX2N0Yl9hZGRyX3ggPSBzaC0+Y3RiX2Fk ZHJfaW5fY3Vycl9zbGljZVtpIC0gMV0gJSBwcHMtPmN0Yl93aWR0aDsKKyAgICAgICAgICAgIGNv bnN0IGludCBwcmVfY3RiX2FkZHJfeSA9IHNoLT5jdGJfYWRkcl9pbl9jdXJyX3NsaWNlW2kgLSAx XSAvIHBwcy0+Y3RiX3dpZHRoOworICAgICAgICAgICAgY29uc3QgaW50IGN0Yl9hZGRyX3ggICAg ID0gc2gtPmN0Yl9hZGRyX2luX2N1cnJfc2xpY2VbaV0gJSBwcHMtPmN0Yl93aWR0aDsKKyAgICAg ICAgICAgIGNvbnN0IGludCBjdGJfYWRkcl95ICAgICA9IHNoLT5jdGJfYWRkcl9pbl9jdXJyX3Ns aWNlW2ldIC8gcHBzLT5jdGJfd2lkdGg7CisgICAgICAgICAgICBpZiAocHBzLT5jdGJfdG9fcm93 X2JkW2N0Yl9hZGRyX3ldICE9IHBwcy0+Y3RiX3RvX3Jvd19iZFtwcmVfY3RiX2FkZHJfeV0gfHwK KyAgICAgICAgICAgICAgICBwcHMtPmN0Yl90b19jb2xfYmRbY3RiX2FkZHJfeF0gIT0gcHBzLT5j dGJfdG9fY29sX2JkW3ByZV9jdGJfYWRkcl94XSB8fAorICAgICAgICAgICAgICAgIChjdGJfYWRk cl95ICE9IHByZV9jdGJfYWRkcl95ICYmIHNwcy0+c3BzX2VudHJvcHlfY29kaW5nX3N5bmNfZW5h YmxlZF9mbGFnKSkgeworICAgICAgICAgICAgICAgIHNoLT5lbnRyeV9wb2ludF9zdGFydF9jdHVb aisrXSA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBp bnQgc2hfZGVyaXZlKFZWQ1NIICpzaCwgY29uc3QgVlZDRnJhbWVQYXJhbVNldHMgKmZwcykKK3sK KyAgICBjb25zdCBIMjY2UmF3U1BTICpzcHMgICAgICAgICAgID0gZnBzLT5zcHMtPnI7CisgICAg Y29uc3QgSDI2NlJhd1BQUyAqcHBzICAgICAgICAgICA9IGZwcy0+cHBzLT5yOworICAgIGNvbnN0 IEgyNjZSYXdQaWN0dXJlSGVhZGVyICpwaCAgPSBmcHMtPnBoLnI7CisKKyAgICBzaF9zbGljZV9h ZGRyZXNzKHNoLCBzcHMsIGZwcy0+cHBzKTsKKyAgICBzaF9pbnRlcihzaCwgc3BzLCBwcHMpOwor ICAgIHNoX3FwX3koc2gsIHBwcywgcGgpOworICAgIHNoX2RlYmxvY2tfb2Zmc2V0cyhzaCk7Cisg ICAgc2hfcGFydGl0aW9uX2NvbnN0cmFpbnRzKHNoLCBzcHMsIHBoKTsKKyAgICBzaF9lbnRyeV9w b2ludHMoc2gsIHNwcywgZnBzLT5wcHMpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBmZl92 dmNfZGVjb2RlX3NoKFZWQ1NIICpzaCwgY29uc3QgVlZDRnJhbWVQYXJhbVNldHMgKmZwcywgY29u c3QgQ29kZWRCaXRzdHJlYW1Vbml0ICp1bml0KQoreworICAgIGludCByZXQ7CisKKyAgICBpZiAo IWZwcy0+c3BzIHx8ICFmcHMtPnBwcykKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7CisKKyAgICBmZl9yZWZzdHJ1Y3RfcmVwbGFjZSgmc2gtPnIsIHVuaXQtPmNvbnRlbnRfcmVm KTsKKworICAgIHJldCA9IHNoX2Rlcml2ZShzaCwgZnBzKTsKKyAgICBpZiAocmV0IDwgMCkKKyAg ICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliYXZj b2RlYy92dmMvdnZjX3BzLmggYi9saWJhdmNvZGVjL3Z2Yy92dmNfcHMuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5lZGU0ZTc0MDA5Ci0tLSAvZGV2L251bGwKKysrIGIv bGliYXZjb2RlYy92dmMvdnZjX3BzLmgKQEAgLTAsMCArMSwyNjMgQEAKKy8qCisgKiBWVkMgcGFy YW1ldGVyIHNldCBwYXJzZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjMgTnVvIE1pCisgKgor ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog dmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog TGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0 d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v ciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpZm5kZWYgQVZDT0RFQ19WVkNf VlZDX1BTX0gKKyNkZWZpbmUgQVZDT0RFQ19WVkNfVlZDX1BTX0gKKworI2luY2x1ZGUgImxpYmF2 Y29kZWMvY2JzX2gyNjYuaCIKKyNpbmNsdWRlICJsaWJhdmNvZGVjL3Z2Yy5oIgorCisjZGVmaW5l IElTX0lEUihzKSAgKChzKS0+dmNsX3VuaXRfdHlwZSA9PSBWVkNfSURSX1dfUkFETCB8fCAocykt PnZjbF91bml0X3R5cGUgPT0gVlZDX0lEUl9OX0xQKQorI2RlZmluZSBJU19DUkEocykgICgocykt PnZjbF91bml0X3R5cGUgPT0gVlZDX0NSQV9OVVQpCisjZGVmaW5lIElTX0lSQVAocykgKElTX0lE UihzKSB8fCBJU19DUkEocykpCisjZGVmaW5lIElTX0dEUihzKSAgKChzKS0+dmNsX3VuaXRfdHlw ZSA9PSBWVkNfR0RSX05VVCkKKyNkZWZpbmUgSVNfQ1ZTUyhzKSAoSVNfSVJBUChzKXx8IElTX0dE UihzKSkKKyNkZWZpbmUgSVNfQ0xWU1MocykgKElTX0NWU1MocykgJiYgcy0+bm9fb3V0cHV0X2Jl Zm9yZV9yZWNvdmVyeV9mbGFnKQorI2RlZmluZSBJU19SQVNMKHMpICgocyktPnZjbF91bml0X3R5 cGUgPT0gVlZDX1JBU0xfTlVUKQorI2RlZmluZSBJU19SQURMKHMpICgocyktPnZjbF91bml0X3R5 cGUgPT0gVlZDX1JBRExfTlVUKQorCisjZGVmaW5lIElTX0kocnNoKSAoKHJzaCktPnNoX3NsaWNl X3R5cGUgPT0gVlZDX1NMSUNFX1RZUEVfSSkKKyNkZWZpbmUgSVNfUChyc2gpICgocnNoKS0+c2hf c2xpY2VfdHlwZSA9PSBWVkNfU0xJQ0VfVFlQRV9QKQorI2RlZmluZSBJU19CKHJzaCkgKChyc2gp LT5zaF9zbGljZV90eXBlID09IFZWQ19TTElDRV9UWVBFX0IpCisKKyNkZWZpbmUgSU5WX1BPQyBJ TlRfTUlOCisjZGVmaW5lIEdEUl9JU19SRUNPVkVSRUQocykgIChzLT5nZHJfcmVjb3ZlcnlfcG9p bnRfcG9jID09IElOVl9QT0MpCisjZGVmaW5lIEdEUl9TRVRfUkVDT1ZFUkVEKHMpIChzLT5nZHJf cmVjb3ZlcnlfcG9pbnRfcG9jID0gIElOVl9QT0MpCisKKyNkZWZpbmUgTE1DU19NQVhfQklUX0RF UFRIICAxMgorI2RlZmluZSBMTUNTX01BWF9MVVRfU0laRSAgICgxIDw8IExNQ1NfTUFYX0JJVF9E RVBUSCkKKyNkZWZpbmUgTE1DU19NQVhfQklOX1NJWkUgICAxNgorI2RlZmluZSBMQURGX01BWF9J TlRFUlZBTCAgIDUKKworZW51bSB7CisgICAgQ0hST01BX0ZPUk1BVF9NT05PLAorICAgIENIUk9N QV9GT1JNQVRfNDIwLAorICAgIENIUk9NQV9GT1JNQVRfNDIyLAorICAgIENIUk9NQV9GT1JNQVRf NDQ0LAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgVlZDU1BTIHsKKyAgICBjb25zdCBIMjY2UmF3U1BT ICpyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBSZWZT dHJ1Y3QgcmVmZXJlbmNlCisKKyAgICAvL2Rlcml2ZWQgdmFsdWVzCisgICAgdWludDE2X3QgICAg d2lkdGg7CisgICAgdWludDE2X3QgICAgaGVpZ2h0OworICAgIHVpbnQ4X3QgICAgIGhzaGlmdFtW VkNfTUFYX1NBTVBMRV9BUlJBWVNdOworICAgIHVpbnQ4X3QgICAgIHZzaGlmdFtWVkNfTUFYX1NB TVBMRV9BUlJBWVNdOworICAgIHVpbnQzMl90ICAgIG1heF9waWNfb3JkZXJfY250X2xzYjsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTWF4UGljT3JkZXJDbnRMc2IKKworICAgIHVp bnQ4X3QgICAgIHBpeGVsX3NoaWZ0OworICAgIGVudW0gQVZQaXhlbEZvcm1hdCBwaXhfZm10Owor CisgICAgdWludDhfdCAgICAgYml0X2RlcHRoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8vLzwgQml0RGVwdGgKKyAgICB1aW50OF90ICAgICBxcF9iZF9vZmZzZXQ7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBRcEJkT2Zmc2V0Cisg ICAgdWludDhfdCAgICAgY3RiX2xvZzJfc2l6ZV95OyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vLzwgQ3RiTG9nMlNpemVZCisgICAgdWludDhfdCAgICAgY3RiX3NpemVfeTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgQ3RiU2l6ZVkKKyAg ICB1aW50OF90ICAgICBtaW5fY2JfbG9nMl9zaXplX3k7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8vPCBNaW5DYkxvZzJTaXplWQorICAgIHVpbnQ4X3QgICAgIG1pbl9jYl9zaXpl X3k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IE1pbkNiU2l6ZVkK KyAgICB1aW50OF90ICAgICBtYXhfdGJfc2l6ZV95OyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLy8vPCBNYXhUYlNpemVZCisgICAgdWludDhfdCAgICAgbWF4X3RzX3NpemU7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTWF4VHNTaXplCisg ICAgdWludDhfdCAgICAgbWF4X251bV9tZXJnZV9jYW5kOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vLzwgTWF4TnVtTWVyZ2VDYW5kCisgICAgdWludDhfdCAgICAgbWF4X251bV9p YmNfbWVyZ2VfY2FuZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTWF4TnVtSWJj TWVyZ2VDYW5kCisgICAgdWludDhfdCAgICAgbWF4X251bV9ncG1fbWVyZ2VfY2FuZDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTWF4TnVtR3BtTWVyZ2VDYW5kCisgICAgdWludDhf dCAgICAgbnVtX2xhZGZfaW50ZXJ2YWxzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8vLzwgc3BzX251bV9sYWRmX2ludGVydmFsc19taW51czIgKyAyOworICAgIHVpbnQzMl90ICAg IGxhZGZfaW50ZXJ2YWxfbG93ZXJfYm91bmRbTEFERl9NQVhfSU5URVJWQUxdOyAgICAgICAvLy88 IFNwc0xhZGZJbnRlcnZhbExvd2VyQm91bmRbXQorICAgIHVpbnQ4X3QgICAgIGxvZzJfcGFyYWxs ZWxfbWVyZ2VfbGV2ZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IHNwc19sb2cyX3Bh cmFsbGVsX21lcmdlX2xldmVsX21pbnVzMiArIDI7CisgICAgdWludDhfdCAgICAgbG9nMl90cmFu c2Zvcm1fcmFuZ2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTG9nMlRyYW5z Zm9ybVJhbmdlCisgICAgaW50OF90ICAgICAgY2hyb21hX3FwX3RhYmxlWzNdW1ZWQ19NQVhfUE9J TlRTX0lOX1FQX1RBQkxFXTsgICAgIC8vLzwgQ2hyb21hUXBUYWJsZQorfSBWVkNTUFM7CisKK3R5 cGVkZWYgc3RydWN0IERCUGFyYW1zIHsKKyAgICBpbnQ4X3QgYmV0YV9vZmZzZXRbVlZDX01BWF9T QU1QTEVfQVJSQVlTXTsKKyAgICBpbnQ4X3QgdGNfb2Zmc2V0W1ZWQ19NQVhfU0FNUExFX0FSUkFZ U107Cit9IERCUGFyYW1zOworCit0eXBlZGVmIHN0cnVjdCBWVkNQUFMgeworICAgIGNvbnN0IEgy NjZSYXdQUFMgKnI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv Ly88IFJlZlN0cnVjdCByZWZlcmVuY2UKKworICAgIC8vZGVyaXZlZCB2YWx1ZTsKKyAgICBpbnQ4 X3QgICBjaHJvbWFfcXBfb2Zmc2V0WzNdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLy8vPCBwcHNfY2JfcXBfb2Zmc2V0LCBwcHNfY3JfcXBfb2Zmc2V0LCBwcHNfam9pbnRfY2Jj cl9xcF9vZmZzZXRfdmFsdWUKKyAgICBpbnQ4X3QgICBjaHJvbWFfcXBfb2Zmc2V0X2xpc3RbNl1b M107ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBwcHNfY2JfcXBfb2Zmc2V0X2xpc3Qs IHBwc19jcl9xcF9vZmZzZXRfbGlzdCwgcHBzX2pvaW50X2NiY3JfcXBfb2Zmc2V0X2xpc3QKKwor ICAgIHVpbnQxNl90IHdpZHRoOworICAgIHVpbnQxNl90IGhlaWdodDsKKworICAgIHVpbnQxNl90 IHNsaWNlX3N0YXJ0X29mZnNldFtWVkNfTUFYX1NMSUNFU107CisgICAgdWludDE2X3QgbnVtX2N0 dXNfaW5fc2xpY2UgW1ZWQ19NQVhfU0xJQ0VTXTsKKworICAgIHVpbnQxNl90IG1pbl9jYl93aWR0 aDsKKyAgICB1aW50MTZfdCBtaW5fY2JfaGVpZ2h0OworCisgICAgdWludDE2X3QgY3RiX3dpZHRo OworICAgIHVpbnQxNl90IGN0Yl9oZWlnaHQ7CisgICAgdWludDMyX3QgY3RiX2NvdW50OworCisg ICAgdWludDE2X3QgbWluX3B1X3dpZHRoOworICAgIHVpbnQxNl90IG1pbl9wdV9oZWlnaHQ7Cisg ICAgdWludDE2X3QgbWluX3R1X3dpZHRoOworICAgIHVpbnQxNl90IG1pbl90dV9oZWlnaHQ7CisK KyAgICB1aW50MzJfdCAqY3RiX2FkZHJfaW5fc2xpY2U7ICAgICAgICAgICAgLy8vPCBDdGJBZGRy SW5DdXJyU2xpY2UgZm9yIGVudGlyZSBwaWN0dXJlCisgICAgdWludDE2X3QgKmNvbF9iZDsKKyAg ICB1aW50MTZfdCAqcm93X2JkOworICAgIHVpbnQxNl90ICpjdGJfdG9fY29sX2JkOworICAgIHVp bnQxNl90ICpjdGJfdG9fcm93X2JkOworCisgICAgdWludDE2X3Qgd2lkdGgzMjsgICAgICAgICAg ICAgICAgICAgICAgIC8vLzwgd2lkdGggIGluIDMyIHBpeGVscworICAgIHVpbnQxNl90IGhlaWdo dDMyOyAgICAgICAgICAgICAgICAgICAgICAvLy88IGhlaWdodCBpbiAzMiBwaXhlbHMKKyAgICB1 aW50MTZfdCB3aWR0aDY0OyAgICAgICAgICAgICAgICAgICAgICAgLy8vPCB3aWR0aCAgaW4gNjQg cGl4ZWxzCisgICAgdWludDE2X3QgaGVpZ2h0NjQ7ICAgICAgICAgICAgICAgICAgICAgIC8vLzwg aGVpZ2h0IGluIDY0IHBpeGVscworCisgICAgdWludDE2X3QgcmVmX3dyYXBhcm91bmRfb2Zmc2V0 OyAgICAgICAgIC8vLzwgUHBzUmVmV3JhcGFyb3VuZE9mZnNldAorCit9IFZWQ1BQUzsKKworI2Rl ZmluZSBNQVhfV0VJR0hUUyAxNQordHlwZWRlZiBzdHJ1Y3QgUHJlZFdlaWdodFRhYmxlIHsKKyAg ICB1aW50OF90IGxvZzJfZGVub21bMl07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvLy88IGx1bWFfbG9nMl93ZWlnaHRfZGVub20sIENocm9tYUxvZzJXZWlnaHREZW5vbQor CisgICAgdWludDhfdCBuYl93ZWlnaHRzWzJdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8vPCBudW1fbDBfd2VpZ2h0cywgbnVtX2wxX3dlaWdodHMKKyAgICB1aW50OF90 IHdlaWdodF9mbGFnWzJdWzJdW01BWF9XRUlHSFRTXTsgICAgICAgICAgICAgICAgICAgICAvLy88 IGx1bWFfd2VpZ2h0X2wwX2ZsYWcsIGNocm9tYV93ZWlnaHRfbDBfZmxhZywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88 IGx1bWFfd2VpZ2h0X2wxX2ZsYWcsIGNocm9tYV93ZWlnaHRfbDFfZmxhZywKKyAgICBpbnQxNl90 IHdlaWdodFsyXVtWVkNfTUFYX1NBTVBMRV9BUlJBWVNdW01BWF9XRUlHSFRTXTsgICAgICAvLy88 IEx1bWFXZWlnaHRMMCwgTHVtYVdlaWdodEwxLCBDaHJvbWFXZWlnaHRMMCwgQ2hyb21hV2VpZ2h0 TDEKKyAgICBpbnQxNl90IG9mZnNldFsyXVtWVkNfTUFYX1NBTVBMRV9BUlJBWVNdW01BWF9XRUlH SFRTXTsgICAgICAvLy88IGx1bWFfb2Zmc2V0X2wwLCBsdW1hX29mZnNldF9sMSwgQ2hyb21hT2Zm c2V0TDAsIENocm9tYU9mZnNldEwxCit9IFByZWRXZWlnaHRUYWJsZTsKKwordHlwZWRlZiBzdHJ1 Y3QgVlZDUEggeworICAgIGNvbnN0IEgyNjZSYXdQaWN0dXJlSGVhZGVyICpyOworICAgIHZvaWQg KnJyZWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgUmVmU3RydWN0 IHJlZmVyZW5jZSwgYmFja2luZyBwaCBhYm92ZQorCisgICAgLy9kZXJpdmVkIHZhbHVlcworICAg IHVpbnQzMl90IG1heF9udW1fc3ViYmxvY2tfbWVyZ2VfY2FuZDsgICAgICAgICAgIC8vLzwgTWF4 TnVtU3ViYmxvY2tNZXJnZUNhbmQKKyAgICBpbnQzMl90ICBwb2M7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvLy88IFBpY09yZGVyQ250VmFsCisgICAgUHJlZFdlaWdodFRhYmxl IHB3dDsKK30gVlZDUEg7CisKKyNkZWZpbmUgQUxGX05VTV9GSUxURVJTX0xVTUEgICAgMjUKKyNk ZWZpbmUgQUxGX05VTV9GSUxURVJTX0NIUk9NQSAgIDgKKyNkZWZpbmUgQUxGX05VTV9GSUxURVJT X0NDICAgICAgIDUKKworI2RlZmluZSBBTEZfTlVNX0NPRUZGX0xVTUEgICAgICAxMgorI2RlZmlu ZSBBTEZfTlVNX0NPRUZGX0NIUk9NQSAgICAgNgorI2RlZmluZSBBTEZfTlVNX0NPRUZGX0NDICAg ICAgICAgNworCit0eXBlZGVmIHN0cnVjdCBWVkNBTEYgeworICAgIGludDE2X3QgbHVtYV9jb2Vm ZiAgICAgW0FMRl9OVU1fRklMVEVSU19MVU1BXVtBTEZfTlVNX0NPRUZGX0xVTUFdOworICAgIHVp bnQ4X3QgbHVtYV9jbGlwX2lkeCAgW0FMRl9OVU1fRklMVEVSU19MVU1BXVtBTEZfTlVNX0NPRUZG X0xVTUFdOworCisgICAgdWludDhfdCBudW1fY2hyb21hX2ZpbHRlcnM7CisgICAgaW50MTZfdCBj aHJvbWFfY29lZmYgICBbQUxGX05VTV9GSUxURVJTX0NIUk9NQV1bQUxGX05VTV9DT0VGRl9DSFJP TUFdOworICAgIHVpbnQ4X3QgY2hyb21hX2NsaXBfaWR4W0FMRl9OVU1fRklMVEVSU19DSFJPTUFd W0FMRl9OVU1fQ09FRkZfQ0hST01BXTsKKworICAgIHVpbnQ4X3QgbnVtX2NjX2ZpbHRlcnNbMl07 ICAgICAgICAvLy88IGFsZl9jY19jYl9maWx0ZXJzX3NpZ25hbGxlZF9taW51czEgKyAxLCBhbGZf Y2NfY3JfZmlsdGVyc19zaWduYWxsZWRfbWludXMxICsgMQorICAgIGludDE2X3QgY2NfY29lZmZb Ml1bQUxGX05VTV9GSUxURVJTX0NDXVtBTEZfTlVNX0NPRUZGX0NDXTsKK30gVlZDQUxGOworCitl bnVtIHsKKyAgU0xfU1RBUlRfMngyICAgID0gMCwKKyAgU0xfU1RBUlRfNHg0ICAgID0gMiwKKyAg U0xfU1RBUlRfOHg4ICAgID0gOCwKKyAgU0xfU1RBUlRfMTZ4MTYgID0gMTQsCisgIFNMX1NUQVJU XzMyeDMyICA9IDIwLAorICBTTF9TVEFSVF82NHg2NCAgPSAyNiwKKyAgU0xfTUFYX0lEICAgICAg ID0gMjgsCit9OworCisjZGVmaW5lIFNMX01BWF9NQVRSSVhfU0laRSA4CisKK3R5cGVkZWYgc3Ry dWN0IFZWQ1NjYWxpbmdMaXN0IHsKKyAgICB1aW50OF90IHNjYWxpbmdfbWF0cml4X3JlY1tTTF9N QVhfSURdW1NMX01BWF9NQVRSSVhfU0laRSAqIFNMX01BWF9NQVRSSVhfU0laRV07ICAvLy88IFNj YWxpbmdNYXRyaXhSZWMKKyAgICB1aW50OF90IHNjYWxpbmdfbWF0cml4X2RjX3JlY1tTTF9NQVhf SUQgLSBTTF9TVEFSVF8xNngxNl07ICAgICAgICAgICAgICAgICAgICAgICAvLy88IFNjYWxpbmdN YXRyaXhEY1JlY1tyZWZJZCDiiJIgMTRdCit9IFZWQ1NjYWxpbmdMaXN0OworCit0eXBlZGVmIHN0 cnVjdCBWVkNMTUNTIHsKKyAgICB1aW50OF90ICBtaW5fYmluX2lkeDsKKyAgICB1aW50OF90ICBt YXhfYmluX2lkeDsKKworICAgIC8vKjIgZm9yIGhpZ2ggZGVwdGgKKyAgICB1aW50OF90ICBmd2Rf bHV0W0xNQ1NfTUFYX0xVVF9TSVpFICogMl07CisgICAgdWludDhfdCAgaW52X2x1dFtMTUNTX01B WF9MVVRfU0laRSAqIDJdOworCisgICAgdWludDE2X3QgcGl2b3RbTE1DU19NQVhfQklOX1NJWkUg KyAxXTsKKyAgICB1aW50MTZfdCBjaHJvbWFfc2NhbGVfY29lZmZbTE1DU19NQVhfQklOX1NJWkVd OworfSBWVkNMTUNTOworCisjZGVmaW5lIFZWQ19NQVhfQUxGX0NPVU5UICAgICAgICA4CisjZGVm aW5lIFZWQ19NQVhfTE1DU19DT1VOVCAgICAgICA0CisjZGVmaW5lIFZWQ19NQVhfU0xfQ09VTlQg ICAgICAgICA4CisKK3R5cGVkZWYgc3RydWN0IFZWQ1BhcmFtU2V0cyB7CisgICAgY29uc3QgVlZD U1BTICAgICAgICAgICAgKnNwc19saXN0W1ZWQ19NQVhfU1BTX0NPVU5UXTsgICAgICAgLy8vPCBS ZWZTdHJ1Y3QgcmVmZXJlbmNlCisgICAgY29uc3QgVlZDUFBTICAgICAgICAgICAgKnBwc19saXN0 W1ZWQ19NQVhfUFBTX0NPVU5UXTsgICAgICAgLy8vPCBSZWZTdHJ1Y3QgcmVmZXJlbmNlCisgICAg Y29uc3QgVlZDQUxGICAgICAgICAgICAgKmFsZl9saXN0W1ZWQ19NQVhfQUxGX0NPVU5UXTsgICAg ICAgLy8vPCBSZWZTdHJ1Y3QgcmVmZXJlbmNlCisgICAgY29uc3QgSDI2NlJhd0FQUyAgICAgICAg KmxtY3NfbGlzdFtWVkNfTUFYX0xNQ1NfQ09VTlRdOyAgICAgLy8vPCBSZWZTdHJ1Y3QgcmVmZXJl bmNlCisgICAgY29uc3QgVlZDU2NhbGluZ0xpc3QgICAgKnNjYWxpbmdfbGlzdFtWVkNfTUFYX1NM X0NPVU5UXTsgICAgLy8vPCBSZWZTdHJ1Y3QgcmVmZXJlbmNlCit9IFZWQ1BhcmFtU2V0czsKKwor dHlwZWRlZiBzdHJ1Y3QgVlZDRnJhbWVQYXJhbVNldHMgeworICAgIGNvbnN0IFZWQ1NQUyAgICAg ICAgICAgKnNwczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgUmVmU3RydWN0 IHJlZmVyZW5jZQorICAgIGNvbnN0IFZWQ1BQUyAgICAgICAgICAgKnBwczsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8vLzwgUmVmU3RydWN0IHJlZmVyZW5jZQorICAgIFZWQ1BIICAg ICAgICAgICAgICAgICAgIHBoOworICAgIGNvbnN0IFZWQ0FMRiAgICAgICAgICAgKmFsZl9saXN0 W1ZWQ19NQVhfQUxGX0NPVU5UXTsgICAgICAgIC8vLzwgUmVmU3RydWN0IHJlZmVyZW5jZQorICAg IFZWQ0xNQ1MgICAgICAgICAgICAgICAgIGxtY3M7CisgICAgY29uc3QgVlZDU2NhbGluZ0xpc3Qg ICAqc2w7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBSZWZTdHJ1Y3QgcmVm ZXJlbmNlCit9IFZWQ0ZyYW1lUGFyYW1TZXRzOworCit0eXBlZGVmIHN0cnVjdCBWVkNTSCB7Cisg ICAgY29uc3QgSDI2NlJhd1NsaWNlSGVhZGVyICpyOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvLy88IFJlZlN0cnVjdCByZWZlcmVuY2UKKworICAgIC8vIGRlcml2ZWQgdmFsdWVzCisgICAg Ly8gY3R1IGFkZHJlc3MKKyAgICB1aW50MzJfdCAgICAgICAgbnVtX2N0dXNfaW5fY3Vycl9zbGlj ZTsgICAgICAgICAgICAgICAgIC8vLzwgTnVtQ3R1c0luQ3VyclNsaWNlCisgICAgY29uc3QgdWlu dDMyX3QqIGN0Yl9hZGRyX2luX2N1cnJfc2xpY2U7ICAgICAgICAgICAgICAgICAvLy88IEN0YkFk ZHJJbkN1cnJTbGljZQorCisgICAgLy8gaW50ZXIKKyAgICBQcmVkV2VpZ2h0VGFibGUgcHd0Owor ICAgIGludDhfdCAgIHJlZl9pZHhfc3ltWzJdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLy8vPCBSZWZJZHhTeW1MMCwgUmVmSWR4U3ltTDEKKworICAgIC8vIHFwX3kKKyAgICBpbnQ4 X3QgICBzbGljZV9xcF95OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwg U2xpY2VRcFkKKworICAgIC8vIGRlYmxvY2tfb2Zmc2V0cworICAgIERCUGFyYW1zIGRlYmxvY2s7 CisKKyAgICAvLyBwYXJ0aXRpb24gY29uc3RyYWlucworICAgIHVpbnQ4X3QgIG1pbl9xdF9zaXpl WzJdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBNaW5RdFNpemVZLCBNaW5R dFNpemVDCisgICAgdWludDhfdCAgbWF4X2J0X3NpemVbMl07ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvLy88IE1heEJ0U2l6ZVksIE1heEJ0U2l6ZUMKKyAgICB1aW50OF90ICBtYXhf dHRfc2l6ZVsyXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTWF4VHRTaXpl WSwgTWF4VHRTaXplQworICAgIHVpbnQ4X3QgIG1heF9tdHRfZGVwdGhbMl07ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLy8vPCBNYXhNdHREZXB0aFksIE1heE10dERlcHRoQworICAgIHVp bnQ4X3QgIGN1X3FwX2RlbHRhX3N1YmRpdjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8v PCBDdVFwRGVsdGFTdWJkaXYKKyAgICB1aW50OF90ICBjdV9jaHJvbWFfcXBfb2Zmc2V0X3N1YmRp djsgICAgICAgICAgICAgICAgICAgIC8vLzwgQ3VDaHJvbWFRcE9mZnNldFN1YmRpdgorCisgICAg Ly8gZW50cmllcworICAgIHVpbnQzMl90IGVudHJ5X3BvaW50X3N0YXJ0X2N0dVtWVkNfTUFYX0VO VFJZX1BPSU5UU107ICAgLy8vPCBlbnRyeSBwb2ludCBzdGFydCBpbiBjdHVfYWRkcgorfSBWVkNT SDsKKworc3RydWN0IFZWQ0NvbnRleHQ7CisKK2ludCBmZl92dmNfZGVjb2RlX2ZyYW1lX3BzKFZW Q0ZyYW1lUGFyYW1TZXRzICpmcHMsIHN0cnVjdCBWVkNDb250ZXh0ICpzKTsKK2ludCBmZl92dmNf ZGVjb2RlX2FwcyhWVkNQYXJhbVNldHMgKnBzLCBjb25zdCBDb2RlZEJpdHN0cmVhbVVuaXQgKnVu aXQpOworaW50IGZmX3Z2Y19kZWNvZGVfc2goVlZDU0ggKnNoLCBjb25zdCBWVkNGcmFtZVBhcmFt U2V0cyAqcHMsIGNvbnN0IENvZGVkQml0c3RyZWFtVW5pdCAqdW5pdCk7Cit2b2lkIGZmX3Z2Y19m cmFtZV9wc19mcmVlKFZWQ0ZyYW1lUGFyYW1TZXRzICpmcHMpOwordm9pZCBmZl92dmNfcHNfdW5p bml0KFZWQ1BhcmFtU2V0cyAqcHMpOworCisjZW5kaWYgLyogQVZDT0RFQ19WVkNfVlZDX1BTX0gg Ki8KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL3Z2Y2RlYy5oIGIvbGliYXZjb2RlYy92dmMv dnZjZGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uY2RlOWIyYzk2 NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMvdnZjL3Z2Y2RlYy5oCkBAIC0wLDAgKzEs MjE0IEBACisvKgorICogVlZDIHZpZGVvIGRlY29kZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIw MjEgTnVvIE1pCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgWHUgTXUKKyAqCisgKiBUaGlzIGZpbGUg aXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBv ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq CisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25n IHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3Vu ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B IDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2lmbmRlZiBBVkNPREVDX1ZWQ19WVkNERUNfSAorI2Rl ZmluZSBBVkNPREVDX1ZWQ19WVkNERUNfSAorCisjaW5jbHVkZSAibGliYXZjb2RlYy92dmMuaCIK KworI2luY2x1ZGUgInZ2Y19wcy5oIgorCisjZGVmaW5lIExVTUEgICAgICAgICAgICAgICAgICAg IDAKKyNkZWZpbmUgQ0hST01BICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDQiAgICAgICAg ICAgICAgICAgICAgICAxCisjZGVmaW5lIENSICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZp bmUgSkNCQ1IgICAgICAgICAgICAgICAgICAgMworCisjZGVmaW5lIE1JTl9UVV9MT0cyICAgICAg ICAgICAgIDIgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTWluVGJMb2cyU2l6ZVkKKyNkZWZp bmUgTUlOX1BVX0xPRzIgICAgICAgICAgICAgMgorCisjZGVmaW5lIEwwICAgICAgICAgICAgICAg ICAgICAgIDAKKyNkZWZpbmUgTDEgICAgICAgICAgICAgICAgICAgICAgMQorCit0eXBlZGVmIHN0 cnVjdCBSZWZQaWNMaXN0IHsKKyAgICBzdHJ1Y3QgVlZDRnJhbWUgKnJlZltWVkNfTUFYX1JFRl9F TlRSSUVTXTsKKyAgICBpbnQgbGlzdFtWVkNfTUFYX1JFRl9FTlRSSUVTXTsKKyAgICBpbnQgaXNM b25nVGVybVtWVkNfTUFYX1JFRl9FTlRSSUVTXTsKKyAgICBpbnQgbmJfcmVmczsKK30gUmVmUGlj TGlzdDsKKwordHlwZWRlZiBzdHJ1Y3QgUmVmUGljTGlzdFRhYiB7CisgICAgUmVmUGljTGlzdCBy ZWZQaWNMaXN0WzJdOworfSBSZWZQaWNMaXN0VGFiOworCit0eXBlZGVmIHN0cnVjdCBWVkNGcmFt ZSB7CisgICAgc3RydWN0IEFWRnJhbWUgKmZyYW1lOworCisgICAgc3RydWN0IE12RmllbGQgKnRh Yl9kbXZyX212ZjsgICAgICAgICAgICAgICAvLy88IFJlZlN0cnVjdCByZWZlcmVuY2UKKyAgICBS ZWZQaWNMaXN0VGFiICoqcnBsX3RhYjsgICAgICAgICAgICAgICAgICAgIC8vLzwgUmVmU3RydWN0 IHJlZmVyZW5jZQorICAgIFJlZlBpY0xpc3RUYWIgICpycGw7ICAgICAgICAgICAgICAgICAgICAg ICAgLy8vPCBSZWZTdHJ1Y3QgcmVmZXJlbmNlCisgICAgaW50IG5iX3JwbF9lbGVtczsKKworICAg IGludCBjdGJfY291bnQ7CisKKyAgICBpbnQgcG9jOworCisgICAgc3RydWN0IFZWQ0ZyYW1lICpj b2xsb2NhdGVkX3JlZjsKKworICAgIHN0cnVjdCBGcmFtZVByb2dyZXNzICpwcm9ncmVzczsgICAg ICAgICAgICAgLy8vPCBSZWZTdHJ1Y3QgcmVmZXJlbmNlCisKKyAgICAvKioKKyAgICAgKiBBIHNl cXVlbmNlIGNvdW50ZXIsIHNvIHRoYXQgb2xkIGZyYW1lcyBhcmUgb3V0cHV0IGZpcnN0CisgICAg ICogYWZ0ZXIgYSBQT0MgcmVzZXQKKyAgICAgKi8KKyAgICB1aW50MTZfdCBzZXF1ZW5jZTsKKyAg ICAvKioKKyAgICAgKiBBIGNvbWJpbmF0aW9uIG9mIFZWQ19GUkFNRV9GTEFHXyoKKyAgICAgKi8K KyAgICB1aW50OF90IGZsYWdzOworfSBWVkNGcmFtZTsKKwordHlwZWRlZiBzdHJ1Y3QgU2xpY2VD b250ZXh0IHsKKyAgICBpbnQgc2xpY2VfaWR4OworICAgIHN0cnVjdCBFbnRyeVBvaW50ICplcHM7 CisgICAgaW50IG5iX2VwczsKKyAgICBSZWZQaWNMaXN0ICpycGw7CisgICAgdm9pZCAqcmVmOyAg ICAgICAgICAgICAgICAgICAgICAvLy88IFJlZlN0cnVjdCByZWZlcmVuY2UsIGJhY2tpbmcgc2xp Y2UgZGF0YQorfSBTbGljZUNvbnRleHQ7CisKK3R5cGVkZWYgc3RydWN0IFZWQ0ZyYW1lQ29udGV4 dCB7CisgICAgdm9pZCAqbG9nX2N0eDsKKworICAgIC8vICsxIGZvciB0aGUgY3VycmVudCBmcmFt ZQorICAgIFZWQ0ZyYW1lIERQQltWVkNfTUFYX0RQQl9TSVpFICsgMV07CisKKyAgICBzdHJ1Y3Qg QVZGcmFtZSAqZnJhbWU7CisgICAgc3RydWN0IEFWRnJhbWUgKm91dHB1dF9mcmFtZTsKKworICAg IFNsaWNlQ29udGV4dCAgKipzbGljZXM7CisgICAgaW50IG5iX3NsaWNlczsKKyAgICBpbnQgbmJf c2xpY2VzX2FsbG9jYXRlZDsKKworICAgIFZWQ0ZyYW1lICpyZWY7CisKKyAgICBzdHJ1Y3QgVlZD RnJhbWVUaHJlYWQgKmZ0OworCisgICAgdWludDY0X3QgZGVjb2RlX29yZGVyOworCisgICAgc3Ry dWN0IEZGUmVmU3RydWN0UG9vbCAqdGFiX2RtdnJfbXZmX3Bvb2w7CisgICAgc3RydWN0IEZGUmVm U3RydWN0UG9vbCAqcnBsX3RhYl9wb29sOworCisgICAgc3RydWN0IEZGUmVmU3RydWN0UG9vbCAq Y3VfcG9vbDsKKyAgICBzdHJ1Y3QgRkZSZWZTdHJ1Y3RQb29sICp0dV9wb29sOworCisgICAgc3Ry dWN0IHsKKyAgICAgICAgaW50MTZfdCAqc2xpY2VfaWR4OworCisgICAgICAgIGludCAgICAgKmNi X3Bvc194WzJdOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgQ2JQb3NYW11bXVtdCisg ICAgICAgIGludCAgICAgKmNiX3Bvc195WzJdOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v LzwgQ2JQb3NZW11bXVtdCisgICAgICAgIHVpbnQ4X3QgKmNiX3dpZHRoWzJdOyAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8vLzwgQ2JXaWR0aFtdW11bXQorICAgICAgICB1aW50OF90ICpjYl9o ZWlnaHRbMl07ICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IENiSGVpZ2h0W11bXVtdCisg ICAgICAgIHVpbnQ4X3QgKmNxdF9kZXB0aFsyXTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8v LzwgQ3F0RGVwdGhbXVtdW10KKyAgICAgICAgaW50OF90ICAqcXBbVlZDX01BWF9TQU1QTEVfQVJS QVlTXTsKKworICAgICAgICB1aW50OF90ICpza2lwOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvLy88IEN1U2tpcEZsYWdbXVtdCisgICAgICAgIHVpbnQ4X3QgKmlzcG1mOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgaW50cmFfc3ViX3BhcnRpdGlvbnNfbW9k ZV9mbGFnCisgICAgICAgIHVpbnQ4X3QgKm1zbVsyXTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8vLzwgTXR0U3BsaXRNb2RlW11bXVtdIGluIDMyIHBpeGVscworICAgICAgICB1aW50 OF90ICppbWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEludHJhTWlw RmxhZ1tdW10KKyAgICAgICAgdWludDhfdCAqaW10ZjsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8vPCBpbnRyYV9taXBfdHJhbnNwb3NlZF9mbGFnW11bXQorICAgICAgICB1aW50 OF90ICppbW07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IGludHJhX21p cF9tb2RlW11bXQorICAgICAgICB1aW50OF90ICppcG07ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvLy88IEludHJhUHJlZE1vZGVZW11bXQorICAgICAgICB1aW50OF90ICpjcG1b Ml07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEN1UHJlZE1vZGVbXVtdW10K KyAgICAgICAgdWludDhfdCAqbXNmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ly8vPCBNZXJnZVN1YmJsb2NrRmxhZ1tdW10KKyAgICAgICAgdWludDhfdCAqaWFmOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBJbnRlckFmZmluZUZsYWdbXVtdCisgICAg ICAgIHVpbnQ4X3QgKm1taTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwg TW90aW9uTW9kZWxJZGNbXVtdCisgICAgICAgIHN0cnVjdCBNdiAgICAgICpjcF9tdlsyXTsgICAg ICAgICAgICAgICAgICAgICAgIC8vLzwgQ3BNdkxYW11bXVtdW01BWF9DT05UUk9MX1BPSU5UU107 CisgICAgICAgIHN0cnVjdCBNdkZpZWxkICptdmY7ICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8vLzwgTXZEbXZyTDAsIE12RG12ckwxCisKKyAgICAgICAgdWludDhfdCAqdHVfY29kZWRfZmxh Z1tWVkNfTUFYX1NBTVBMRV9BUlJBWVNdOyAgLy8vPCB0dV95X2NvZGVkX2ZsYWdbXVtdLCAgdHVf Y2JfY29kZWRfZmxhZ1tdW10sICB0dV9jcl9jb2RlZF9mbGFnW11bXQorICAgICAgICB1aW50OF90 ICp0dV9qb2ludF9jYmNyX3Jlc2lkdWFsX2ZsYWc7ICAgICAgICAgICAvLy88IHR1X2pvaW50X2Ni Y3JfcmVzaWR1YWxfZmxhZ1tdW10KKyAgICAgICAgaW50ICAgICAqdGJfcG9zX3gwWzJdOworICAg ICAgICBpbnQgICAgICp0Yl9wb3NfeTBbMl07CisgICAgICAgIHVpbnQ4X3QgKnRiX3dpZHRoWzJd OworICAgICAgICB1aW50OF90ICp0Yl9oZWlnaHRbMl07CisgICAgICAgIHVpbnQ4X3QgKnBjbWZb Ml07CisKKyAgICAgICAgdWludDhfdCAqaG9yaXpvbnRhbF9ic1tWVkNfTUFYX1NBTVBMRV9BUlJB WVNdOworICAgICAgICB1aW50OF90ICp2ZXJ0aWNhbF9ic1tWVkNfTUFYX1NBTVBMRV9BUlJBWVNd OworICAgICAgICB1aW50OF90ICpob3Jpem9udGFsX3A7ICAgICAgICAgICAgICAgICAgICAgICAg ICAvLy88IGhvcml6b250YWwgbWF4RmlsdGVyTGVuZ3RoUHMgZm9yIGx1bWEKKyAgICAgICAgdWlu dDhfdCAqaG9yaXpvbnRhbF9xOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBob3Jpem9u dGFsIG1heEZpbHRlckxlbmd0aFFzIGZvciBsdW1hCisgICAgICAgIHVpbnQ4X3QgKnZlcnRpY2Fs X3A7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgdmVydGljYWwgICBtYXhGaWx0ZXJM ZW5ndGhQcyBmb3IgbHVtYQorICAgICAgICB1aW50OF90ICp2ZXJ0aWNhbF9xOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvLy88IHZlcnRpY2FsICAgbWF4RmlsdGVyTGVuZ3RoUXMgZm9yIGx1 bWEKKworICAgICAgICB1aW50OF90ICpzYW9fcGl4ZWxfYnVmZmVyX2hbVlZDX01BWF9TQU1QTEVf QVJSQVlTXTsKKyAgICAgICAgdWludDhfdCAqc2FvX3BpeGVsX2J1ZmZlcl92W1ZWQ19NQVhfU0FN UExFX0FSUkFZU107CisgICAgICAgIHVpbnQ4X3QgKmFsZl9waXhlbF9idWZmZXJfaFtWVkNfTUFY X1NBTVBMRV9BUlJBWVNdWzJdOworICAgICAgICB1aW50OF90ICphbGZfcGl4ZWxfYnVmZmVyX3Zb VlZDX01BWF9TQU1QTEVfQVJSQVlTXVsyXTsKKworICAgICAgICBpbnQgICAgICAgICAqY29lZmZz OworICAgICAgICBzdHJ1Y3QgQ1RVICAqY3R1czsKKworICAgICAgICAvL3VzZWQgaW4gYXJyYXlz X2luaXQgb25seQorICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgaW50IGN0dV9jb3VudDsK KyAgICAgICAgICAgIGludCBjdHVfc2l6ZTsKKyAgICAgICAgICAgIGludCBwaWNfc2l6ZV9pbl9t aW5fY2I7CisgICAgICAgICAgICBpbnQgcGljX3NpemVfaW5fbWluX3B1OworICAgICAgICAgICAg aW50IHBpY19zaXplX2luX21pbl90dTsKKyAgICAgICAgICAgIGludCBjdHVfd2lkdGg7CisgICAg ICAgICAgICBpbnQgY3R1X2hlaWdodDsKKyAgICAgICAgICAgIGludCB3aWR0aDsKKyAgICAgICAg ICAgIGludCBoZWlnaHQ7CisgICAgICAgICAgICBpbnQgY2hyb21hX2Zvcm1hdF9pZGM7CisgICAg ICAgICAgICBpbnQgcGl4ZWxfc2hpZnQ7CisgICAgICAgICAgICBpbnQgYnNfd2lkdGg7CisgICAg ICAgICAgICBpbnQgYnNfaGVpZ2h0OworICAgICAgICB9IHN6OworICAgIH0gdGFiOworfSBWVkNG cmFtZUNvbnRleHQ7CisKK3R5cGVkZWYgc3RydWN0IFZWQ0NvbnRleHQgeworICAgIHN0cnVjdCBB VkNvZGVjQ29udGV4dCAqYXZjdHg7CisKKyAgICBDb2RlZEJpdHN0cmVhbUNvbnRleHQgKmNiYzsK KyAgICBDb2RlZEJpdHN0cmVhbUZyYWdtZW50IGN1cnJlbnRfZnJhbWU7CisKKyAgICBWVkNQYXJh bVNldHMgcHM7CisKKyAgICBpbnQgdGVtcG9yYWxfaWQ7ICAgICAgICAvLy88IHRlbXBvcmFsX2lk X3BsdXMxIC0gMQorICAgIGludCBwb2NfdGlkMDsKKworICAgIGludCBlb3M7ICAgICAgICAgICAg ICAgIC8vLzwgY3VycmVudCBwYWNrZXQgY29udGFpbnMgYW4gRU9TL0VPQiBOQUwKKyAgICBpbnQg bGFzdF9lb3M7ICAgICAgICAgICAvLy88IGxhc3QgcGFja2V0IGNvbnRhaW5zIGFuIEVPUy9FT0Ig TkFMCisKKyAgICBlbnVtIFZWQ05BTFVuaXRUeXBlIHZjbF91bml0X3R5cGU7CisgICAgaW50IG5v X291dHB1dF9iZWZvcmVfcmVjb3ZlcnlfZmxhZzsgLy8vPCBOb091dHB1dEJlZm9yZVJlY292ZXJ5 RmxhZworICAgIGludCBnZHJfcmVjb3ZlcnlfcG9pbnRfcG9jOyAgICAgICAgIC8vLzwgcmVjb3Zl cnlQb2ludFBvY1ZhbAorCisgICAgLyoqCisgICAgICogU2VxdWVuY2UgY291bnRlcnMgZm9yIGRl Y29kZWQgYW5kIG91dHB1dCBmcmFtZXMsIHNvIHRoYXQgb2xkCisgICAgICogZnJhbWVzIGFyZSBv dXRwdXQgZmlyc3QgYWZ0ZXIgYSBQT0MgcmVzZXQKKyAgICAgKi8KKyAgICB1aW50MTZfdCBzZXFf ZGVjb2RlOworICAgIHVpbnQxNl90IHNlcV9vdXRwdXQ7CisKKyAgICBzdHJ1Y3QgQVZFeGVjdXRv ciAqZXhlY3V0b3I7CisKKyAgICBWVkNGcmFtZUNvbnRleHQgKmZjczsKKyAgICBpbnQgbmJfZmNz OworCisgICAgdWludDY0X3QgbmJfZnJhbWVzOyAgICAgLy8vPCBwcm9jZXNzZWQgZnJhbWVzCisg ICAgaW50IG5iX2RlbGF5ZWQ7ICAgICAgICAgLy8vPCBkZWxheWVkIGZyYW1lcworfSAgVlZDQ29u dGV4dCA7CisKKyNlbmRpZiAvKiBBVkNPREVDX1ZWQ19WVkNERUNfSCAqLwotLSAKMi4yNS4xCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2 ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxp bmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBz dWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==