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 19833471F3 for ; Sat, 27 Jan 2024 04:15:40 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 10AD468D14F; Sat, 27 Jan 2024 06:15:33 +0200 (EET) Received: from APC01-PSA-obe.outbound.protection.outlook.com (mail-psaapc01olkn2067.outbound.protection.outlook.com [40.92.52.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8F01568D145 for ; Sat, 27 Jan 2024 06:15:26 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=P79yVpgqMKUcQaXdjiM/vm55n4lzgzo3v/z6jRaDQDzYzWnxTux6tT5Yp3eOdGbjoADh42nQ/OAi7jpRFA+NW9MaEHCRIbjXR2lxZqa5FXs5ygYR3gh9D8KIqlEQrnM3Uj4c+pRJfC5udjK9VpKXxDhDtoFpksm3WSLViQoCJeLBxRCWDEGD2mkhD8hL4MU35ZrMxrzA/HFRf4cO9jUOtxVfMVCVQgbwqPBOhN3rgiHMkTFyBeoG70BtMev7b+In05plbcwFTVNfUwOpb9lWGYjrSsXMm0Dn59a2pAh3mBd8lDwxTGNJ+/Ts1rXxIKzF3biok+fH9euYYmjt80c4gA== 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=I6g3BWulvfiniml3byMHcAmomM6O69lR3hi21ybRD94=; b=fb8MgD9ssAsHobo0e0Egt57ytcvmvYgkjeOyh+6I8O9DTyyEM5MoEjzBUQG9MMIZfJ3eZ4zRqyDO+TrU3xqE8Zd/kHG9aAXoHNe+iblUXNkXGv+DkrlL+Mfz6j/BjvAl6/pvaI2zCSFlFEoEzBhcjBFFF7kYW0f1EFLNUabOUa0FhcT0Jfz2U9Of3ihLpbfj/s1jALAd6U0o9qkJhjZv65mt/JrqjQ7Ck2fAGXtunBuJM2RpLj1TJVA0P8qK4U70WjAE+SHu3Y8fXWBTZ/2MXoSt9slhxSljdAiKpcyua2zbXH45/LtLT5ReyEBhp3a42dBRNLKXq2eb9eSubq3+FA== 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=I6g3BWulvfiniml3byMHcAmomM6O69lR3hi21ybRD94=; b=WRf/Hr7zCqQZSsjo7+ombW2jMO6PQZvYzZMbG6tchZor6pzxVkPxXkh4tpO6s4NFHDa9O/ReofEMNAnSvymn0Wdgz1sd4duUL7MuBXL+jp9euE+FUIQfAjWAcfKf8wTv/shiC+NztaA6awbGYIExJpiasHqtRxNejFAWVDJEZzGtHmXI3guA0bmHfpTABlINH6xAi99pFe/ngPfjrZWME09m+DRtnVWq3QejZocG53tPsyh7FgG6GyKfUknmiBmeA92FQwqw2bp7Ju1uHCF/9vHP1/9lbk/RZZCcfGW3Qvk7BA3WP/dWDzTPx6P6Tl8RBIUm7F9s0y+FGOWQ45DavA== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by PUZPR06MB6068.apcprd06.prod.outlook.com (2603:1096:301:112::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7228.28; Sat, 27 Jan 2024 04:15:17 +0000 Received: from TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::e139:fd7a:1b66:a3f7]) by TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::e139:fd7a:1b66:a3f7%7]) with mapi id 15.20.7228.028; Sat, 27 Jan 2024 04:15:17 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sat, 27 Jan 2024 12:15:07 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240127041512.14079-1-nuomi2021@gmail.com> References: <20240127041512.14079-1-nuomi2021@gmail.com> X-TMN: [18VXBnxXN3lhHINecjk2Tgtn6LCxuGhW] X-ClientProxiedBy: TYCP286CA0165.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:383::11) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20240127041512.14079-2-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|PUZPR06MB6068:EE_ X-MS-Office365-Filtering-Correlation-Id: 84fa244f-a5ea-4910-2ea1-08dc1eee9130 X-MS-Exchange-SLBlob-MailProps: laRBL560oLRPh4k2uMNyV8ZBlUJyoQkYzS2HHiNUZ4q5eRpa6UBbqxy3mz7memP0d79xu6nHvay+c3l1Qjn96X/kzCGeftacLP3vOEAdYz8QsndET93X4toZqCD1TaYIbieMtzGmGrFHbjGB0juxLO1vrVlYQ3Mtwl18bLAFMWHKlczJ8Cx/Aj+v7LqOUeShI6lA1wUvVaUikTnC1Y+8UGBYg8RfV3DDXLoOhqH8FX7rouuMrpmGdajzuWPWwjaEq+5I+MxsnIycYHBgA6mfSw/6tSRjyrSF9wk4q9sHDxvmDjx0WyXtozOg4cVOfCC7ZWJhq8Kw5LirqhGqP9LHJhdkXmjJiTuFNVq11bcg6eXynGFMaDAn3xrqgqDWj/thLdRPOwFlXG2m5ZCh63Vs6ka9L2V+g63+t0EUfeIeixED8I+8G8xGMTNq0X9oU48OPDPMB1PUwXXCYvVR5U2AoE5+q6kdiVaivGUJGYSmxNt8Olutn5LNY0GF5x201L2JLqTK/t9ixKjmFDQzJb8b/QUiGKj80dRgBjQw6+qH7i9+jXYxs0GDoanOHuOBdcql/QKuZODNkEtYyLyvNOUQvGL8LAzMa98flWA1jHiZOKS5f+t0zG9gXVUHZWvsRWumAhJu0l1WIwg4vAfA70/0X862vXa+LrIVYiMaIIDcQhbXW0aAxmGnRxqoNm0NLOOQbmqK/jsPmLqL5SOYfC/NyB03qsT+Drp/R6Q2lipHQoRpfIbVHW+6KYOgzAPKK1bXn0B7cLrQ4Nd66L3NC2cnx9WnyPx84AK1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: xFCXArSQGlkPXv8t17xh2MkKOKbFHgTBC5Ml/UDvWr9EJTDZNMQKN30J7r6sJlCr148OTkFnKtjdZ5DIbDftAKfUXNGRUvuzAGs1qlIUoQIRWN9ZXtY49mTGiojrw044ZiDI+1uwpAms+8NPWJbZ98fB2T0RIXmsQ4H3CEEHT8Uc9Nke+di2OV/Bdtqy6sKWXOaepfhDTW+K9KmZ0/KysM2/xSOYgPkByXLfvP7GTCVOxkLAppuXiFhs6IX4D9Q2kCyWjUGynlx/imYtqNqW6yF8LTCKVtAP+sQ/sZjIadGhv0le4BrhMX82b+68vHphs5tkPrIIbX47WkOjiRvk5k0HB+IzF/+WCXMHxzGpOHJSXO9MImO8mGcr40vpmWHQ8WQhjcGK7BYCuqhZIxk9+PlMoINOWGPr8K6Rn5pr4ONK5OaFwA4Pn+S/zSW6Gmib/m+w7Sp07YvavPBWdKqnpaWrfre7+K8LnEA/IRD4GzHHGTsH5BVpG6p5+eZSfZUqwxY4siAu1vvdwOmoedLDHivAF9jGFqsBnLUnH2yUxmIUS4hSvM4Qjs3EipuXoerhMvrnRwtj5Ts4Mv0nagzSCHqxRXl/wGVcDKgfe7XR+S7amQD02Qpz/qgRSE3crQ9c X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UUpRTStZSmZ6WGlwWXE2WHhzNUtqVlRsQnY3WnRIR1M4YUVSS2RZOVVlb2ZT?= =?utf-8?B?MFhTb0czUFI4MGdXbFpFWlQzTG9qNno4MzNCTU9IWkNNeTJ3MzlCbE1ZTVph?= =?utf-8?B?aXVkWUhtVUNUcFN3c01ma2lVYlBteG9pRGFLVjdsZDMvdndhbTNjTFNaYXVU?= =?utf-8?B?VnFyYXZ4UUZlUGg2UkhSRWdmUkZFcXd6VDRLZlY4QzZqdGxRRUVSNW4xbndx?= =?utf-8?B?L3YxeXJjRmQvcXlENjZuRHBacWhiWisyY21Gd2UvSlVudzA4dVRlQ25IQmNi?= =?utf-8?B?ZUhBK00ySktCS1Fsb3RHalU0QVJoeWZBdUJudVk0TnRNaW1oVG1LWFdxR3ZI?= =?utf-8?B?aG1qb2IzWnh6OUdoaEtsSWxiQTg1dWRscWlPMittTXVaK2RoTHc2YnRTVlFo?= =?utf-8?B?VDFEMzRIcTJ2cUZsWC85SkYzVTY5bDBUb0ZyaG5QNXYyMkJmZm95UXRXV05S?= =?utf-8?B?bVRySGlFWW5NaFlKSXEySjRNd0NmY0E4TDV0bnNoRXQwSTVrd21MdzU4MHJT?= =?utf-8?B?UGRpUzBGdUJOZmJEa0MrK05KWW9udFVCUFVKUkx6ODA0MXl3a01sSHl5M2Zn?= =?utf-8?B?bzRsTHRoOXJKUE5BYjg2MENnYzU2dXFHb29MMmxZSm8yWVRsNkkyck4yMVlz?= =?utf-8?B?ZzF1TWJKbnNySXZreTFVSVE3VVh5NVNnWWx0ODRIbUxpSmN1SVpEMnJUUm94?= =?utf-8?B?VHNDNWRaR2FOU044eEdHcDVDWDZadmoya0hFNmJNcnc5czhwRTcwVkYvbU94?= =?utf-8?B?dUFSWFFjaVVMaE50dmRkejY3bkNvVC8yL3A1a3d1NkNYK1IvamRsREl1dWVk?= =?utf-8?B?OWQzM0w4aitQeHBoSGx4L0JxM2p1L1VMOHh1WStLM245QnZFN1N1Q004bm9E?= =?utf-8?B?ellxejJ4c0hsbE1rZVlvNmlLOUZJZGJITDdqdzJUZUtWM2pJY1RyRHQ5Z28z?= =?utf-8?B?cVZuN0RzMnN0WmN5Rm1wMEhId3VsUzF1UmpFVmo3S01QN0trb0tFOWhaWERX?= =?utf-8?B?NllVdzBTZktWQ2dxMmdldzl1bUl2Mnp3NXVhSlR1aDFtQUhCeERJODg4T0hJ?= =?utf-8?B?Y1JSUWFBSm14ZEtEOVNseVlzR045cmxxeEU1eWQ4eGY0VUFJUlhITEVIMFE4?= =?utf-8?B?eU9NSmozWGY2Nkdudk9WckRORnJOUmJEZllDRC9teDNxZW9QTGNuWWdKaEFN?= =?utf-8?B?b212eDlIUzNyQS9vN1ZtTTFyWWNzY3c5Q2F3dDFRNzM3UTE4ZEZnVE50UHY2?= =?utf-8?B?NE9hd0VEZ20yVGk3V3VwcFY1WXZTNVFiUkI5ME4wSXBIVjBGYnFxNUI0Rk41?= =?utf-8?B?aUcvYUE1MERjT2dLVWpkTzFrV0ZlUWlpcVcxUkhYdUQzazFROVBMQmozd214?= =?utf-8?B?RUVDWWlRaFAycmpTM2VQZWMzNTdKWEcxQzlBL1YzRHA1cnBxc0dYS05pVy9j?= =?utf-8?B?dkRmdW8rNmp5T0Z4cWN5bkJZbFlOQXNreUZ5ZkdrMVlMQkg0M2VidzVrSzhQ?= =?utf-8?B?a1M0VGp5RFI5eEhzU0JKdUhmQ0YwRVB0VHR1TXZUbGtVQ3RGdDRYaWczeTRs?= =?utf-8?B?Wngzc2syVDlQdmFremVqcW5raW5EVE83Ny96WXAvY2txdHRWRENKbUtTekZx?= =?utf-8?B?eUZNMzhRcUpkeE9idTJZYTZiS3BvZmVqUW9RbHFockc2WUdsdnVOOWFtNVFp?= =?utf-8?Q?UAKi3SSa4PLLBWzr9Wb1?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 84fa244f-a5ea-4910-2ea1-08dc1eee9130 X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jan 2024 04:15:16.9586 (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: PUZPR06MB6068 Subject: [FFmpeg-devel] [PATCH v3 1/6] avformat: add muxer support for H266/VVC 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 , Thomas Siedel 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: RnJvbTogVGhvbWFzIFNpZWRlbCA8dGhvbWFzLmZmQHNwaW4tZGlnaXRhbC5jb20+CgpBZGQgbXV4 ZXIgZm9yIHZ2Y2MgYnl0ZSBzdHJlYW0gZm9ybWF0LgpBZGQgQVZfQ09ERUNfSURfVlZDIHRvIGZm X21wNF9vYmpfdHlwZS4KQWRkIEFWX0NPREVDX0lEX1ZWQyB0byBJU08gTWVkaWEgY29kZWMgKFZ2 Y0NvbmZpZ3VyYXRpb25Cb3ggdnZpMSwKdnZjMSBkZWZpbmVkIGluIElTTy9JRUMgMTQ0OTYtMTU6 MjAyMSkuCkFkZCBWdmNDb25maWd1cmF0aW9uQm94IHZ2Y0Mgd2hpY2ggZXh0ZW5kcyBGdWxsQm94 IHR5cGUgaW4KSVNPL0lFQyAxNDQ5Ni0xNToyMDIxLgoKVGVzdGVkIHdpdGg6CiAgICBmZm1wZWcg LWkgTm92b3NvYm9ybmF5YVNxdWFyZV8xOTIweDEwODAubXA0IC1jOnYgbGlidnZlbmMgdGVzdC5t cDQgJiYgZmZtcGVnIC1pIHRlc3QubXA0IC1mIG51bGwgLQogICAgZmZtcGVnIC1pIE5vdm9zb2Jv cm5heWFTcXVhcmVfMTkyMHgxMDgwLm1wNCAtYzp2IGNvcHkgdGVzdC5tcDQgICAgICYmIGZmbXBl ZyAtaSB0ZXN0Lm1wNCAtZiBtZDUgLQoKU2lnbmVkLW9mZi1ieTogVGhvbWFzIFNpZWRlbCA8dGhv bWFzLmZmQHNwaW4tZGlnaXRhbC5jb20+CkNvLUF1dGhvcmVkLUJ5OiBOdW8gTWkgPG51b21pMjAy MUBnbWFpbC5jb20+Ci0tLQogbGliYXZmb3JtYXQvTWFrZWZpbGUgICAgfCAgIDYgKy0KIGxpYmF2 Zm9ybWF0L2lzb20uYyAgICAgIHwgICAxICsKIGxpYmF2Zm9ybWF0L2lzb21fdGFncy5jIHwgICAz ICsKIGxpYmF2Zm9ybWF0L21vdi5jICAgICAgIHwgICA2ICsKIGxpYmF2Zm9ybWF0L21vdmVuYy5j ICAgIHwgIDQxICstCiBsaWJhdmZvcm1hdC92dmMuYyAgICAgICB8IDk3MSArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaWJhdmZvcm1hdC92dmMuaCAgICAgICB8ICA5 OSArKysrCiA3IGZpbGVzIGNoYW5nZWQsIDExMjMgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMo LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZvcm1hdC92dmMuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IGxpYmF2Zm9ybWF0L3Z2Yy5oCgpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvTWFrZWZpbGUg Yi9saWJhdmZvcm1hdC9NYWtlZmlsZQppbmRleCBkY2M5OWVlYWM0Li4wNWI5YjhhMTE1IDEwMDY0 NAotLS0gYS9saWJhdmZvcm1hdC9NYWtlZmlsZQorKysgYi9saWJhdmZvcm1hdC9NYWtlZmlsZQpA QCAtMzQzLDcgKzM0Myw3IEBAIE9CSlMtJChDT05GSUdfTUFUUk9TS0FfREVNVVhFUikgICAgICAg ICAgKz0gbWF0cm9za2FkZWMubyBtYXRyb3NrYS5vICBcCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG9nZ3BhcnNldm9yYmlzLm8gdm9yYmlzY29tbWVudC5vIFwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXRwYWxldHRlLm8g cmVwbGF5Z2Fpbi5vIGRvdmlfaXNvbS5vCiBPQkpTLSQoQ09ORklHX01BVFJPU0tBX01VWEVSKSAg ICAgICAgICAgICs9IG1hdHJvc2thZW5jLm8gbWF0cm9za2EubyBcCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2MS5vIGF2Yy5vIGhldmMubyBcCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2MS5vIGF2Yy5vIGhldmMubyB2 dmMub1wKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhY2Vu Y19oZWFkZXIubyBhdmxhbmd1YWdlLm8gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2b3JiaXNjb21tZW50Lm8gd3YubyBkb3ZpX2lzb20ubwogT0JKUy0kKENP TkZJR19NQ0FfREVNVVhFUikgICAgICAgICAgICAgICArPSBtY2EubwpAQCAtMzY1LDcgKzM2NSw3 IEBAIE9CSlMtJChDT05GSUdfTU9EU19ERU1VWEVSKSAgICAgICAgICAgICAgKz0gbW9kcy5vCiBP QkpTLSQoQ09ORklHX01PRkxFWF9ERU1VWEVSKSAgICAgICAgICAgICs9IG1vZmxleC5vCiBPQkpT LSQoQ09ORklHX01PVl9ERU1VWEVSKSAgICAgICAgICAgICAgICs9IG1vdi5vIG1vdl9jaGFuLm8g bW92X2VzZHMubyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHF0cGFsZXR0ZS5vIHJlcGxheWdhaW4ubyBkb3ZpX2lzb20ubwotT0JKUy0kKENPTkZJR19NT1Zf TVVYRVIpICAgICAgICAgICAgICAgICArPSBtb3ZlbmMubyBhdjEubyBhdmMubyBoZXZjLm8gdnBj Yy5vIFwKK09CSlMtJChDT05GSUdfTU9WX01VWEVSKSAgICAgICAgICAgICAgICAgKz0gbW92ZW5j Lm8gYXYxLm8gYXZjLm8gaGV2Yy5vIHZ2Yy5vIHZwY2MubyBcCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVuY2hpbnQubyBtb3ZfY2hhbi5vIHJ0cC5vIFwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZW5jY2VuYy5v IG1vdmVuY190dG1sLm8gcmF3dXRpbHMubyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRvdmlfaXNvbS5vIGV2Yy5vCkBAIC01MjAsNyArNTIwLDcgQEAgT0JK Uy0kKENPTkZJR19SVFBfTVVYRVIpICAgICAgICAgICAgICAgICArPSBydHAubyAgICAgICAgIFwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRwZW5jX3ZwOC5v ICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0cGVuY192 cDkubyAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJ0cGVuY194aXBoLm8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhdmMubyBoZXZjLm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYXZjLm8gaGV2Yy5vIHZ2Yy5vCiBPQkpTLSQoQ09ORklHX1JUU1BfREVN VVhFUikgICAgICAgICAgICAgICs9IHJ0c3AubyBydHNwZGVjLm8gaHR0cGF1dGgubyBcCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybGRlY29kZS5vCiBPQkpT LSQoQ09ORklHX1JUU1BfTVVYRVIpICAgICAgICAgICAgICAgICs9IHJ0c3AubyBydHNwZW5jLm8g aHR0cGF1dGgubyBcCmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9pc29tLmMgYi9saWJhdmZvcm1h dC9pc29tLmMKaW5kZXggNmQwMTk4ODFlNS4uOWZiY2NkNDQzNyAxMDA2NDQKLS0tIGEvbGliYXZm b3JtYXQvaXNvbS5jCisrKyBiL2xpYmF2Zm9ybWF0L2lzb20uYwpAQCAtMzYsNiArMzYsNyBAQCBj b25zdCBBVkNvZGVjVGFnIGZmX21wNF9vYmpfdHlwZVtdID0gewogICAgIHsgQVZfQ09ERUNfSURf TVBFRzQgICAgICAgLCAweDIwIH0sCiAgICAgeyBBVl9DT0RFQ19JRF9IMjY0ICAgICAgICAsIDB4 MjEgfSwKICAgICB7IEFWX0NPREVDX0lEX0hFVkMgICAgICAgICwgMHgyMyB9LAorICAgIHsgQVZf Q09ERUNfSURfVlZDICAgICAgICAgLCAweDMzIH0sCiAgICAgeyBBVl9DT0RFQ19JRF9BQUMgICAg ICAgICAsIDB4NDAgfSwKICAgICB7IEFWX0NPREVDX0lEX01QNEFMUyAgICAgICwgMHg0MCB9LCAv KiAxNDQ5Ni0zIEFMUyAqLwogICAgIHsgQVZfQ09ERUNfSURfTVBFRzJWSURFTyAgLCAweDYxIH0s IC8qIE1QRUctMiBNYWluICovCmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9pc29tX3RhZ3MuYyBi L2xpYmF2Zm9ybWF0L2lzb21fdGFncy5jCmluZGV4IGE1NzViN2MxNjAuLjcwNTgxMWU5NTAgMTAw NjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L2lzb21fdGFncy5jCisrKyBiL2xpYmF2Zm9ybWF0L2lzb21f dGFncy5jCkBAIC0xMjMsNiArMTIzLDkgQEAgY29uc3QgQVZDb2RlY1RhZyBmZl9jb2RlY19tb3Z2 aWRlb190YWdzW10gPSB7CiAgICAgeyBBVl9DT0RFQ19JRF9IRVZDLCBNS1RBRygnZCcsICd2Jywg J2gnLCAnZScpIH0sIC8qIEhFVkMtYmFzZWQgRG9sYnkgVmlzaW9uIGRlcml2ZWQgZnJvbSBoZXYx ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGR2aDEgaXMgaGFuZGxlZCB3aXRoaW4gbW92LmMgKi8KIAorICAgIHsgQVZfQ09ERUNfSURf VlZDLCBNS1RBRygndicsICd2JywgJ2knLCAnMScpIH0sICAvKiBWVkMvSC4yNjYgd2hpY2ggaW5k aWNhdGVzIHBhcmFtZXRlciBzZXRzIG1heSBiZSBpbiBFUyAqLworICAgIHsgQVZfQ09ERUNfSURf VlZDLCBNS1RBRygndicsICd2JywgJ2MnLCAnMScpIH0sICAvKiBWVkMvSC4yNjYgd2hpY2ggaW5k aWNhdGVzIHBhcmFtZXRlciBzaGFsbCBub3QgYmUgaW4gRVMgKi8KKwogICAgIHsgQVZfQ09ERUNf SURfSDI2NCwgTUtUQUcoJ2EnLCAndicsICdjJywgJzEnKSB9LCAvKiBBVkMtMS9ILjI2NCAqLwog ICAgIHsgQVZfQ09ERUNfSURfSDI2NCwgTUtUQUcoJ2EnLCAndicsICdjJywgJzInKSB9LAogICAg IHsgQVZfQ09ERUNfSURfSDI2NCwgTUtUQUcoJ2EnLCAndicsICdjJywgJzMnKSB9LApkaWZmIC0t Z2l0IGEvbGliYXZmb3JtYXQvbW92LmMgYi9saWJhdmZvcm1hdC9tb3YuYwppbmRleCA0Y2ZmZDZj N2RiLi5jZjkzMWQ0NTk0IDEwMDY0NAotLS0gYS9saWJhdmZvcm1hdC9tb3YuYworKysgYi9saWJh dmZvcm1hdC9tb3YuYwpAQCAtMjEyMyw2ICsyMTIzLDExIEBAIHN0YXRpYyBpbnQgbW92X3JlYWRf Z2xibChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICBp ZiAoKHVpbnQ2NF90KWF0b20uc2l6ZSA+ICgxPDwzMCkpCiAgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOwogCisgICAgaWYgKGF0b20udHlwZSA9PSBNS1RBRygndicsJ3YnLCdjJywn QycpKSB7CisgICAgICAgIGF2aW9fc2tpcChwYiwgNCk7CisgICAgICAgIGF0b20uc2l6ZSAtPSA0 OworICAgIH0KKwogICAgIGlmIChhdG9tLnNpemUgPj0gMTApIHsKICAgICAgICAgLy8gQnJva2Vu IGZpbGVzIGNyZWF0ZWQgYnkgbGVnYWN5IHZlcnNpb25zIG9mIGxpYmF2Zm9ybWF0IHdpbGwKICAg ICAgICAgLy8gd3JhcCBhIHdob2xlIGZpZWwgYXRvbSBpbnNpZGUgb2YgYSBnbGJsIGF0b20uCkBA IC04MTI5LDYgKzgxMzQsNyBAQCBzdGF0aWMgY29uc3QgTU9WUGFyc2VUYWJsZUVudHJ5IG1vdl9k ZWZhdWx0X3BhcnNlX3RhYmxlW10gPSB7CiB7IE1LVEFHKCdzJywnZycsJ3AnLCdkJyksIG1vdl9y ZWFkX3NncGQgfSwKIHsgTUtUQUcoJ3MnLCdiJywnZycsJ3AnKSwgbW92X3JlYWRfc2JncCB9LAog eyBNS1RBRygnaCcsJ3YnLCdjJywnQycpLCBtb3ZfcmVhZF9nbGJsIH0sCit7IE1LVEFHKCd2Jywn dicsJ2MnLCdDJyksIG1vdl9yZWFkX2dsYmwgfSwKIHsgTUtUQUcoJ3UnLCd1JywnaScsJ2QnKSwg bW92X3JlYWRfdXVpZCB9LAogeyBNS1RBRygnQycsJ2knLCduJywgMHg4ZSksIG1vdl9yZWFkX3Rh cmdhX3kyMTYgfSwKIHsgTUtUQUcoJ2YnLCdyJywnZScsJ2UnKSwgbW92X3JlYWRfZnJlZSB9LApk aWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvbW92ZW5jLmMgYi9saWJhdmZvcm1hdC9tb3ZlbmMuYwpp bmRleCA4YTI3YWZiYzU3Li40MGJlNzFmM2UwIDEwMDY0NAotLS0gYS9saWJhdmZvcm1hdC9tb3Zl bmMuYworKysgYi9saWJhdmZvcm1hdC9tb3ZlbmMuYwpAQCAtNjgsNiArNjgsNyBAQAogI2luY2x1 ZGUgInR0bWxlbmMuaCIKICNpbmNsdWRlICJ2ZXJzaW9uLmgiCiAjaW5jbHVkZSAidnBjYy5oIgor I2luY2x1ZGUgInZ2Yy5oIgogCiBzdGF0aWMgY29uc3QgQVZPcHRpb24gb3B0aW9uc1tdID0gewog ICAgIHsgImJyYW5kIiwgICAgIk92ZXJyaWRlIG1ham9yIGJyYW5kIiwgb2Zmc2V0b2YoTU9WTXV4 Q29udGV4dCwgbWFqb3JfYnJhbmQpLCAgIEFWX09QVF9UWVBFX1NUUklORywgey5zdHIgPSBOVUxM fSwgLmZsYWdzID0gQVZfT1BUX0ZMQUdfRU5DT0RJTkdfUEFSQU0gfSwKQEAgLTE0NzMsNiArMTQ3 NCwyMyBAQCBzdGF0aWMgaW50IG1vdl93cml0ZV9ldmNjX3RhZyhBVklPQ29udGV4dCAqcGIsIE1P VlRyYWNrICp0cmFjaykKICAgICByZXR1cm4gdXBkYXRlX3NpemUocGIsIHBvcyk7CiB9CiAKK3N0 YXRpYyBpbnQgbW92X3dyaXRlX3Z2Y2NfdGFnKEFWSU9Db250ZXh0ICpwYiwgTU9WVHJhY2sgKnRy YWNrKQoreworICAgIGludDY0X3QgcG9zID0gYXZpb190ZWxsKHBiKTsKKworICAgIGF2aW9fd2Iz MihwYiwgMCk7CisgICAgZmZpb193Zm91cmNjKHBiLCAidnZjQyIpOworCisgICAgYXZpb193OCAg KHBiLCAwKTsgLyogdmVyc2lvbiAqLworICAgIGF2aW9fd2IyNChwYiwgMCk7IC8qIGZsYWdzICov CisKKyAgICBpZiAodHJhY2stPnRhZyA9PSBNS1RBRygndicsJ3YnLCdjJywnMScpKQorICAgICAg ICBmZl9pc29tX3dyaXRlX3Z2Y2MocGIsIHRyYWNrLT52b3NfZGF0YSwgdHJhY2stPnZvc19sZW4s IDEpOworICAgIGVsc2UKKyAgICAgICAgZmZfaXNvbV93cml0ZV92dmNjKHBiLCB0cmFjay0+dm9z X2RhdGEsIHRyYWNrLT52b3NfbGVuLCAwKTsKKyAgICByZXR1cm4gdXBkYXRlX3NpemUocGIsIHBv cyk7Cit9CisKIC8qIGFsc28gdXNlZCBieSBhbGwgYXZpZCBjb2RlY3MgKGR2LCBpbXgsIG1lcmlk aWVuKSBhbmQgdGhlaXIgdmFyaWFudHMgKi8KIHN0YXRpYyBpbnQgbW92X3dyaXRlX2F2aWRfdGFn KEFWSU9Db250ZXh0ICpwYiwgTU9WVHJhY2sgKnRyYWNrKQogewpAQCAtMjM4Miw2ICsyNDAwLDgg QEAgc3RhdGljIGludCBtb3Zfd3JpdGVfdmlkZW9fdGFnKEFWRm9ybWF0Q29udGV4dCAqcywgQVZJ T0NvbnRleHQgKnBiLCBNT1ZNdXhDb250ZXgKICAgICAgICAgYXZpZCA9IDE7CiAgICAgfSBlbHNl IGlmICh0cmFjay0+cGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9IRVZDKQogICAgICAgICBt b3Zfd3JpdGVfaHZjY190YWcocGIsIHRyYWNrKTsKKyAgICBlbHNlIGlmICh0cmFjay0+cGFyLT5j b2RlY19pZCA9PSBBVl9DT0RFQ19JRF9WVkMpCisgICAgICAgIG1vdl93cml0ZV92dmNjX3RhZyhw YiwgdHJhY2spOwogICAgIGVsc2UgaWYgKHRyYWNrLT5wYXItPmNvZGVjX2lkID09IEFWX0NPREVD X0lEX0gyNjQgJiYgIVRBR19JU19BVkNJKHRyYWNrLT50YWcpKSB7CiAgICAgICAgIG1vdl93cml0 ZV9hdmNjX3RhZyhwYiwgdHJhY2spOwogICAgICAgICBpZiAodHJhY2stPm1vZGUgPT0gTU9ERV9J UE9EKQpAQCAtNjE3MCw2ICs2MTkwLDcgQEAgaW50IGZmX21vdl93cml0ZV9wYWNrZXQoQVZGb3Jt YXRDb250ZXh0ICpzLCBBVlBhY2tldCAqcGt0KQogICAgIGlmICgocGFyLT5jb2RlY19pZCA9PSBB Vl9DT0RFQ19JRF9ETlhIRCB8fAogICAgICAgICAgcGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19J RF9IMjY0IHx8CiAgICAgICAgICBwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0hFVkMgfHwK KyAgICAgICAgIHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfVlZDIHx8CiAgICAgICAgICBw YXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX1ZQOSB8fAogICAgICAgICAgcGFyLT5jb2RlY19p ZCA9PSBBVl9DT0RFQ19JRF9FVkMgfHwKICAgICAgICAgIHBhci0+Y29kZWNfaWQgPT0gQVZfQ09E RUNfSURfVFJVRUhEKSAmJiAhdHJrLT52b3NfbGVuICYmCkBAIC02MjM1LDYgKzYyNTYsMTggQEAg aW50IGZmX21vdl93cml0ZV9wYWNrZXQoQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tldCAqcGt0 KQogICAgICAgICAgICAgICAgIHNpemUgPSBmZl9oZXZjX2FubmV4YjJtcDQocGIsIHBrdC0+ZGF0 YSwgcGt0LT5zaXplLCAwLCBOVUxMKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgIH0g ZWxzZSBpZiAocGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9WVkMgJiYgdHJrLT52b3NfbGVu ID4gNiAmJgorICAgICAgICAgICAgIChBVl9SQjI0KHRyay0+dm9zX2RhdGEpID09IDEgfHwgQVZf UkIzMih0cmstPnZvc19kYXRhKSA9PSAxKSkgeworICAgICAgLyogZXh0cmFkYXRhIGlzIEFubmV4 IEIsIGFzc3VtZSB0aGUgYml0c3RyZWFtIGlzIHRvbyBhbmQgY29udmVydCBpdCAqLworICAgICAg aWYgKHRyay0+aGludF90cmFjayA+PSAwICYmIHRyay0+aGludF90cmFjayA8IG1vdi0+bmJfdHJh Y2tzKSB7CisgICAgICAgICAgICByZXQgPSBmZl92dmNfYW5uZXhiMm1wNF9idWYocGt0LT5kYXRh LCAmcmVmb3JtYXR0ZWRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnNpemUsIDAsIE5VTEwpOworICAgICAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAg ICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgIGF2aW9fd3JpdGUocGIsIHJlZm9ybWF0 dGVkX2RhdGEsIHNpemUpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzaXplID0gZmZfdnZj X2FubmV4YjJtcDQocGIsIHBrdC0+ZGF0YSwgcGt0LT5zaXplLCAwLCBOVUxMKTsKKyAgICAgIH0K ICAgICB9IGVsc2UgaWYgKHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfQVYxKSB7CiAgICAg ICAgIGlmICh0cmstPmhpbnRfdHJhY2sgPj0gMCAmJiB0cmstPmhpbnRfdHJhY2sgPCBtb3YtPm5i X3RyYWNrcykgewogICAgICAgICAgICAgcmV0ID0gZmZfYXYxX2ZpbHRlcl9vYnVzX2J1Zihwa3Qt PmRhdGEsICZyZWZvcm1hdHRlZF9kYXRhLApAQCAtNjI4MSw2ICs2MzE0LDkgQEAgaW50IGZmX21v dl93cml0ZV9wYWNrZXQoQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tldCAqcGt0KQogICAgICAg ICAgICAgfSBlbHNlIGlmKHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSEVWQyAmJiBwYXIt PmV4dHJhZGF0YV9zaXplID4gMjEpIHsKICAgICAgICAgICAgICAgICBpbnQgbmFsX3NpemVfbGVu Z3RoID0gKHBhci0+ZXh0cmFkYXRhWzIxXSAmIDB4MykgKyAxOwogICAgICAgICAgICAgICAgIHJl dCA9IGZmX21vdl9jZW5jX2F2Y193cml0ZV9uYWxfdW5pdHMocywgJnRyay0+Y2VuYywgbmFsX3Np emVfbGVuZ3RoLCBwYiwgcGt0LT5kYXRhLCBzaXplKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZihw YXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX1ZWQyAmJiBwYXItPmV4dHJhZGF0YV9zaXplID4g MjEpIHsKKyAgICAgICAgICAgICAgICBpbnQgbmFsX3NpemVfbGVuZ3RoID0gKHBhci0+ZXh0cmFk YXRhWzIxXSAmIDB4MykgKyAxOworICAgICAgICAgICAgICAgIHJldCA9IGZmX21vdl9jZW5jX2F2 Y193cml0ZV9uYWxfdW5pdHMocywgJnRyay0+Y2VuYywgbmFsX3NpemVfbGVuZ3RoLCBwYiwgcGt0 LT5kYXRhLCBzaXplKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcmV0 ID0gZmZfbW92X2NlbmNfd3JpdGVfcGFja2V0KCZ0cmstPmNlbmMsIHBiLCBwa3QtPmRhdGEsIHNp emUpOwogICAgICAgICAgICAgfQpAQCAtNzM2Myw3ICs3Mzk5LDggQEAgc3RhdGljIGludCBtb3Zf aW5pdChBVkZvcm1hdENvbnRleHQgKnMpCiAKICAgICAgICAgaWYgKG1vdi0+ZW5jcnlwdGlvbl9z Y2hlbWUgPT0gTU9WX0VOQ19DRU5DX0FFU19DVFIpIHsKICAgICAgICAgICAgIHJldCA9IGZmX21v dl9jZW5jX2luaXQoJnRyYWNrLT5jZW5jLCBtb3YtPmVuY3J5cHRpb25fa2V5LAotICAgICAgICAg ICAgICAgICh0cmFjay0+cGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9IMjY0IHx8IHRyYWNr LT5wYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0hFVkMpLAorICAgICAgICAgICAgICAgICh0 cmFjay0+cGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9IMjY0IHx8IHRyYWNrLT5wYXItPmNv ZGVjX2lkID09IEFWX0NPREVDX0lEX0hFVkMgfHwKKyAgICAgICAgICAgICAgICAgdHJhY2stPnBh ci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfVlZDKSwKICAgICAgICAgICAgICAgICBzLT5mbGFn cyAmIEFWRk1UX0ZMQUdfQklURVhBQ1QpOwogICAgICAgICAgICAgaWYgKHJldCkKICAgICAgICAg ICAgICAgICByZXR1cm4gcmV0OwpAQCAtNzgzMiw2ICs3ODY5LDggQEAgc3RhdGljIGNvbnN0IEFW Q29kZWNUYWcgY29kZWNfbXA0X3RhZ3NbXSA9IHsKICAgICB7IEFWX0NPREVDX0lEX0hFVkMsICAg ICAgICAgICAgTUtUQUcoJ2gnLCAnZScsICd2JywgJzEnKSB9LAogICAgIHsgQVZfQ09ERUNfSURf SEVWQywgICAgICAgICAgICBNS1RBRygnaCcsICd2JywgJ2MnLCAnMScpIH0sCiAgICAgeyBBVl9D T0RFQ19JRF9IRVZDLCAgICAgICAgICAgIE1LVEFHKCdkJywgJ3YnLCAnaCcsICcxJykgfSwKKyAg ICB7IEFWX0NPREVDX0lEX1ZWQywgICAgICAgICAgICAgTUtUQUcoJ3YnLCAndicsICdjJywgJzEn KSB9LAorICAgIHsgQVZfQ09ERUNfSURfVlZDLCAgICAgICAgICAgICBNS1RBRygndicsICd2Jywg J2knLCAnMScpIH0sCiAgICAgeyBBVl9DT0RFQ19JRF9FVkMsICAgICAgICAgICAgIE1LVEFHKCdl JywgJ3YnLCAnYycsICcxJykgfSwKICAgICB7IEFWX0NPREVDX0lEX01QRUcyVklERU8sICAgICAg TUtUQUcoJ20nLCAncCcsICc0JywgJ3YnKSB9LAogICAgIHsgQVZfQ09ERUNfSURfTVBFRzFWSURF TywgICAgICBNS1RBRygnbScsICdwJywgJzQnLCAndicpIH0sCmRpZmYgLS1naXQgYS9saWJhdmZv cm1hdC92dmMuYyBiL2xpYmF2Zm9ybWF0L3Z2Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAuLjE0YTRjMGEyZjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmZvcm1hdC92 dmMuYwpAQCAtMCwwICsxLDk3MSBAQAorLyoKKyAqIEguMjY2L1ZWQyBoZWxwZXIgZnVuY3Rpb25z IGZvciBtdXhlcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIsIFRob21hcyBTaWVkZWwKKyAq CisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg KiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg KiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv ZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs b29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgImxpYmF2Y29k ZWMvZ2V0X2JpdHMuaCIKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2dvbG9tYi5oIgorI2luY2x1ZGUg ImxpYmF2Y29kZWMvdnZjLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2ludHJlYWR3cml0ZS5oIgor I2luY2x1ZGUgImF2Yy5oIgorI2luY2x1ZGUgImF2aW8uaCIKKyNpbmNsdWRlICJhdmlvX2ludGVy bmFsLmgiCisjaW5jbHVkZSAidnZjLmgiCisKK3R5cGVkZWYgc3RydWN0IFZWQ0NOQUxVbml0QXJy YXkgeworICAgIHVpbnQ4X3QgYXJyYXlfY29tcGxldGVuZXNzOworICAgIHVpbnQ4X3QgTkFMX3Vu aXRfdHlwZTsKKyAgICB1aW50MTZfdCBudW1fbmFsdXM7CisgICAgdWludDE2X3QgKm5hbF91bml0 X2xlbmd0aDsKKyAgICB1aW50OF90ICoqbmFsX3VuaXQ7Cit9IFZWQ0NOQUxVbml0QXJyYXk7CisK K3R5cGVkZWYgc3RydWN0IFZWQ1BUTFJlY29yZCB7CisgICAgdWludDhfdCBudW1fYnl0ZXNfY29u c3RyYWludF9pbmZvOworICAgIHVpbnQ4X3QgZ2VuZXJhbF9wcm9maWxlX2lkYzsKKyAgICB1aW50 OF90IGdlbmVyYWxfdGllcl9mbGFnOworICAgIHVpbnQ4X3QgZ2VuZXJhbF9sZXZlbF9pZGM7Cisg ICAgdWludDhfdCBwdGxfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWc7CisgICAgdWludDhfdCBw dGxfbXVsdGlsYXllcl9lbmFibGVkX2ZsYWc7CisgICAgdWludDhfdCBnZW5lcmFsX2NvbnN0cmFp bnRfaW5mb1s5XTsKKyAgICB1aW50OF90IHB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdb VlZDX01BWF9TVUJMQVlFUlMgLSAxXTsKKyAgICB1aW50OF90IHN1YmxheWVyX2xldmVsX2lkY1tW VkNfTUFYX1NVQkxBWUVSUyAtIDFdOworICAgIHVpbnQ4X3QgcHRsX251bV9zdWJfcHJvZmlsZXM7 CisgICAgdWludDMyX3QgZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGNbVlZDX01BWF9TVUJfUFJPRklM RVNdOworfSBWVkNQVExSZWNvcmQ7CisKK3R5cGVkZWYgc3RydWN0IFZWQ0RlY29kZXJDb25maWd1 cmF0aW9uUmVjb3JkIHsKKyAgICB1aW50OF90IGxlbmd0aFNpemVNaW51c09uZTsKKyAgICB1aW50 OF90IHB0bF9wcmVzZW50X2ZsYWc7CisgICAgdWludDE2X3Qgb2xzX2lkeDsKKyAgICB1aW50OF90 IG51bV9zdWJsYXllcnM7CisgICAgdWludDhfdCBjb25zdGFudF9mcmFtZV9yYXRlOworICAgIHVp bnQ4X3QgY2hyb21hX2Zvcm1hdF9pZGM7CisgICAgdWludDhfdCBiaXRfZGVwdGhfbWludXM4Owor ICAgIFZWQ1BUTFJlY29yZCBwdGw7CisgICAgdWludDE2X3QgbWF4X3BpY3R1cmVfd2lkdGg7Cisg ICAgdWludDE2X3QgbWF4X3BpY3R1cmVfaGVpZ2h0OworICAgIHVpbnQxNl90IGF2Z19mcmFtZV9y YXRlOworICAgIHVpbnQ4X3QgbnVtX29mX2FycmF5czsKKyAgICBWVkNDTkFMVW5pdEFycmF5ICph cnJheTsKK30gVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQ7CisKK3R5cGVkZWYgc3RydWN0 IFZWQ0NQcm9maWxlVGllckxldmVsIHsKKyAgICB1aW50OF90IHByb2ZpbGVfaWRjOworICAgIHVp bnQ4X3QgdGllcl9mbGFnOworICAgIHVpbnQ4X3QgZ2VuZXJhbF9sZXZlbF9pZGM7CisgICAgdWlu dDhfdCBwdGxfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWc7CisgICAgdWludDhfdCBwdGxfbXVs dGlsYXllcl9lbmFibGVkX2ZsYWc7CisvLyBnZW5lcmFsX2NvbnN0cmFpbnRfaW5mbworICAgIHVp bnQ4X3QgZ2NpX3ByZXNlbnRfZmxhZzsKKyAgICB1aW50OF90IGdjaV9nZW5lcmFsX2NvbnN0cmFp bnRzWzldOworICAgIHVpbnQ4X3QgZ2NpX251bV9yZXNlcnZlZF9iaXRzOworLy8gZW5kIGdlbmVy YWxfY29uc3RyYWludF9pbmZvCisgICAgdWludDhfdCBwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2Vu dF9mbGFnW1ZWQ19NQVhfU1VCTEFZRVJTIC0gMV07CisgICAgdWludDhfdCBzdWJsYXllcl9sZXZl bF9pZGNbVlZDX01BWF9TVUJMQVlFUlMgLSAxXTsKKyAgICB1aW50OF90IHB0bF9udW1fc3ViX3By b2ZpbGVzOworICAgIHVpbnQzMl90IGdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjW1ZWQ19NQVhfU1VC X1BST0ZJTEVTXTsKK30gVlZDQ1Byb2ZpbGVUaWVyTGV2ZWw7CisKK3N0YXRpYyB2b2lkIHZ2Y2Nf dXBkYXRlX3B0bChWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBWVkNDUHJvZmlsZVRpZXJMZXZlbCAqcHRsKQoreworICAgIC8q CisgICAgICogVGhlIGxldmVsIGluZGljYXRpb24gZ2VuZXJhbF9sZXZlbF9pZGMgbXVzdCBpbmRp Y2F0ZSBhIGxldmVsIG9mCisgICAgICogY2FwYWJpbGl0eSBlcXVhbCB0byBvciBncmVhdGVyIHRo YW4gdGhlIGhpZ2hlc3QgbGV2ZWwgaW5kaWNhdGVkIGZvciB0aGUKKyAgICAgKiBoaWdoZXN0IHRp ZXIgaW4gYWxsIHRoZSBwYXJhbWV0ZXIgc2V0cy4KKyAgICAgKi8KKyAgICBpZiAodnZjYy0+cHRs LmdlbmVyYWxfdGllcl9mbGFnIDwgcHRsLT50aWVyX2ZsYWcpCisgICAgICAgIHZ2Y2MtPnB0bC5n ZW5lcmFsX2xldmVsX2lkYyA9IHB0bC0+Z2VuZXJhbF9sZXZlbF9pZGM7CisgICAgZWxzZQorICAg ICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9sZXZlbF9pZGMgPQorICAgICAgICAgICAgRkZNQVgodnZj Yy0+cHRsLmdlbmVyYWxfbGV2ZWxfaWRjLCBwdGwtPmdlbmVyYWxfbGV2ZWxfaWRjKTsKKworICAg IC8qCisgICAgICogVGhlIHRpZXIgaW5kaWNhdGlvbiBnZW5lcmFsX3RpZXJfZmxhZyBtdXN0IGlu ZGljYXRlIGEgdGllciBlcXVhbCB0byBvcgorICAgICAqIGdyZWF0ZXIgdGhhbiB0aGUgaGlnaGVz dCB0aWVyIGluZGljYXRlZCBpbiBhbGwgdGhlIHBhcmFtZXRlciBzZXRzLgorICAgICAqLworICAg IHZ2Y2MtPnB0bC5nZW5lcmFsX3RpZXJfZmxhZyA9CisgICAgICAgIEZGTUFYKHZ2Y2MtPnB0bC5n ZW5lcmFsX3RpZXJfZmxhZywgcHRsLT50aWVyX2ZsYWcpOworCisgICAgLyoKKyAgICAgKiBUaGUg cHJvZmlsZSBpbmRpY2F0aW9uIGdlbmVyYWxfcHJvZmlsZV9pZGMgbXVzdCBpbmRpY2F0ZSBhIHBy b2ZpbGUgdG8KKyAgICAgKiB3aGljaCB0aGUgc3RyZWFtIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNv bmZpZ3VyYXRpb24gcmVjb3JkIGNvbmZvcm1zLgorICAgICAqCisgICAgICogSWYgdGhlIHNlcXVl bmNlIHBhcmFtZXRlciBzZXRzIGFyZSBtYXJrZWQgd2l0aCBkaWZmZXJlbnQgcHJvZmlsZXMsIHRo ZW4KKyAgICAgKiB0aGUgc3RyZWFtIG1heSBuZWVkIGV4YW1pbmF0aW9uIHRvIGRldGVybWluZSB3 aGljaCBwcm9maWxlLCBpZiBhbnksIHRoZQorICAgICAqIGVudGlyZSBzdHJlYW0gY29uZm9ybXMg dG8uIElmIHRoZSBlbnRpcmUgc3RyZWFtIGlzIG5vdCBleGFtaW5lZCwgb3IgdGhlCisgICAgICog ZXhhbWluYXRpb24gcmV2ZWFscyB0aGF0IHRoZXJlIGlzIG5vIHByb2ZpbGUgdG8gd2hpY2ggdGhl IGVudGlyZSBzdHJlYW0KKyAgICAgKiBjb25mb3JtcywgdGhlbiB0aGUgZW50aXJlIHN0cmVhbSBt dXN0IGJlIHNwbGl0IGludG8gdHdvIG9yIG1vcmUKKyAgICAgKiBzdWItc3RyZWFtcyB3aXRoIHNl cGFyYXRlIGNvbmZpZ3VyYXRpb24gcmVjb3JkcyBpbiB3aGljaCB0aGVzZSBydWxlcyBjYW4KKyAg ICAgKiBiZSBtZXQuCisgICAgICoKKyAgICAgKiBOb3RlOiBzZXQgdGhlIHByb2ZpbGUgdG8gdGhl IGhpZ2hlc3QgdmFsdWUgZm9yIHRoZSBzYWtlIG9mIHNpbXBsaWNpdHkuCisgICAgICovCisgICAg dnZjYy0+cHRsLmdlbmVyYWxfcHJvZmlsZV9pZGMgPQorICAgICAgICBGRk1BWCh2dmNjLT5wdGwu Z2VuZXJhbF9wcm9maWxlX2lkYywgcHRsLT5wcm9maWxlX2lkYyk7CisKKyAgICAvKgorICAgICAq IEVhY2ggYml0IGluIGZsYWdzIG1heSBvbmx5IGJlIHNldCBpZiBhbGwKKyAgICAgKiB0aGUgcGFy YW1ldGVyIHNldHMgc2V0IHRoYXQgYml0LgorICAgICAqLworICAgIHZ2Y2MtPnB0bC5wdGxfZnJh bWVfb25seV9jb25zdHJhaW50X2ZsYWcgJj0KKyAgICAgICAgcHRsLT5wdGxfZnJhbWVfb25seV9j b25zdHJhaW50X2ZsYWc7CisgICAgdnZjYy0+cHRsLnB0bF9tdWx0aWxheWVyX2VuYWJsZWRfZmxh ZyAmPSBwdGwtPnB0bF9tdWx0aWxheWVyX2VuYWJsZWRfZmxhZzsKKworICAgIC8qCisgICAgICog Q29uc3RyYWludHMgSW5mbworICAgICAqLworICAgIGlmIChwdGwtPmdjaV9wcmVzZW50X2ZsYWcp IHsKKyAgICAgICAgdnZjYy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50X2luZm8gPSA5OworICAg ICAgICBtZW1jcHkoJnZ2Y2MtPnB0bC5nZW5lcmFsX2NvbnN0cmFpbnRfaW5mb1swXSwKKyAgICAg ICAgICAgICAgICZwdGwtPmdjaV9nZW5lcmFsX2NvbnN0cmFpbnRzWzBdLCBzaXplb2YodWludDhf dCkgKiA5KTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29u c3RyYWludF9pbmZvID0gMTsKKyAgICAgICAgbWVtc2V0KCZ2dmNjLT5wdGwuZ2VuZXJhbF9jb25z dHJhaW50X2luZm9bMF0sIDAsIHNpemVvZih1aW50OF90KSAqIDkpOworICAgIH0KKworICAgIC8q CisgICAgICogRWFjaCBiaXQgaW4gZmxhZ3MgbWF5IG9ubHkgYmUgc2V0IGlmIG9uZSBvZgorICAg ICAqIHRoZSBwYXJhbWV0ZXIgc2V0cyBzZXQgdGhhdCBiaXQuCisgICAgICovCisgICAgbWVtc2V0 KHZ2Y2MtPnB0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnLCAwLAorICAgICAgICAg ICBzaXplb2YodWludDhfdCkgKiB2dmNjLT5udW1fc3VibGF5ZXJzIC0gMSk7CisgICAgbWVtc2V0 KHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGMsIDAsCisgICAgICAgICAgIHNpemVvZih1aW50 OF90KSAqIHZ2Y2MtPm51bV9zdWJsYXllcnMgLSAxKTsKKworICAgIGZvciAoaW50IGkgPSB2dmNj LT5udW1fc3VibGF5ZXJzIC0gMjsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgdnZjYy0+cHRsLnB0 bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV0gfD0KKyAgICAgICAgICAgIHB0bC0+cHRs X3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tpXTsKKyAgICAgICAgaWYgKHZ2Y2MtPnB0bC5w dGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ldKSB7CisgICAgICAgICAgICB2dmNjLT5w dGwuc3VibGF5ZXJfbGV2ZWxfaWRjW2ldID0KKyAgICAgICAgICAgICAgICBGRk1BWCh2dmNjLT5w dGwuc3VibGF5ZXJfbGV2ZWxfaWRjW2ldLAorICAgICAgICAgICAgICAgICAgICAgIHB0bC0+c3Vi bGF5ZXJfbGV2ZWxfaWRjW2ldKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChp ID09IHZ2Y2MtPm51bV9zdWJsYXllcnMgLSAxKSB7CisgICAgICAgICAgICAgICAgdnZjYy0+cHRs LnN1YmxheWVyX2xldmVsX2lkY1tpXSA9IHZ2Y2MtPnB0bC5nZW5lcmFsX2xldmVsX2lkYzsKKyAg ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdnZjYy0+cHRsLnN1YmxheWVyX2xl dmVsX2lkY1tpXSA9CisgICAgICAgICAgICAgICAgICAgIHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZl bF9pZGNbaSArIDFdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdnZj Yy0+cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzID0KKyAgICAgICAgRkZNQVgodnZjYy0+cHRsLnB0 bF9udW1fc3ViX3Byb2ZpbGVzLCBwdGwtPnB0bF9udW1fc3ViX3Byb2ZpbGVzKTsKKyAgICBpZiAo dnZjYy0+cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgdnZjYy0+cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzOyBpKyspIHsKKyAgICAgICAgICAg IHZ2Y2MtPnB0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1tpXSA9CisgICAgICAgICAgICAgICAg cHRsLT5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1tpXTsKKyAgICAgICAgfQorICAgIH0KK30KKwor c3RhdGljIHZvaWQgdnZjY19wYXJzZV9wdGwoR2V0Qml0Q29udGV4dCAqZ2IsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwcm9maWxlVGllclByZXNlbnRG bGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1heF9zdWJfbGF5 ZXJzX21pbnVzMSkKK3sKKyAgICBWVkNDUHJvZmlsZVRpZXJMZXZlbCBnZW5lcmFsX3B0bDsKKyAg ICBpbnQgajsKKworICAgIGlmIChwcm9maWxlVGllclByZXNlbnRGbGFnKSB7CisgICAgICAgIGdl bmVyYWxfcHRsLnByb2ZpbGVfaWRjID0gZ2V0X2JpdHMoZ2IsIDcpOworICAgICAgICBnZW5lcmFs X3B0bC50aWVyX2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgIH0KKyAgICBnZW5lcmFsX3B0bC5n ZW5lcmFsX2xldmVsX2lkYyA9IGdldF9iaXRzKGdiLCA4KTsKKworICAgIGdlbmVyYWxfcHRsLnB0 bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZyA9IGdldF9iaXRzMShnYik7CisgICAgZ2VuZXJh bF9wdGwucHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICBp ZiAocHJvZmlsZVRpZXJQcmVzZW50RmxhZykgeyAgICAgICAvLyBwYXJzZSBjb25zdHJhaW50IGlu Zm8KKyAgICAgICAgZ2VuZXJhbF9wdGwuZ2NpX3ByZXNlbnRfZmxhZyA9IGdldF9iaXRzMShnYik7 CisgICAgICAgIGlmIChnZW5lcmFsX3B0bC5nY2lfcHJlc2VudF9mbGFnKSB7CisgICAgICAgICAg ICBmb3IgKGogPSAwOyBqIDwgODsgaisrKQorICAgICAgICAgICAgICAgIGdlbmVyYWxfcHRsLmdj aV9nZW5lcmFsX2NvbnN0cmFpbnRzW2pdID0gZ2V0X2JpdHMoZ2IsIDgpOworICAgICAgICAgICAg Z2VuZXJhbF9wdGwuZ2NpX2dlbmVyYWxfY29uc3RyYWludHNbOF0gPSBnZXRfYml0cyhnYiwgNyk7 CisKKyAgICAgICAgICAgIGdlbmVyYWxfcHRsLmdjaV9udW1fcmVzZXJ2ZWRfYml0cyA9IGdldF9i aXRzKGdiLCA4KTsKKyAgICAgICAgICAgIHNraXBfYml0cyhnYiwgZ2VuZXJhbF9wdGwuZ2NpX251 bV9yZXNlcnZlZF9iaXRzKTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoZ2ItPmluZGV4ICUg OCAhPSAwKQorICAgICAgICAgICAgc2tpcF9iaXRzMShnYik7CisgICAgfQorCisgICAgZm9yIChp bnQgaSA9IG1heF9zdWJfbGF5ZXJzX21pbnVzMSAtIDE7IGkgPj0gMDsgaS0tKQorICAgICAgICBn ZW5lcmFsX3B0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ldID0gZ2V0X2JpdHMx KGdiKTsKKworICAgIHdoaWxlIChnYi0+aW5kZXggJSA4ICE9IDApCisgICAgICAgIHNraXBfYml0 czEoZ2IpOworCisgICAgZm9yIChpbnQgaSA9IG1heF9zdWJfbGF5ZXJzX21pbnVzMSAtIDE7IGkg Pj0gMDsgaS0tKSB7CisgICAgICAgIGlmIChnZW5lcmFsX3B0bC5wdGxfc3VibGF5ZXJfbGV2ZWxf cHJlc2VudF9mbGFnW2ldKQorICAgICAgICAgICAgZ2VuZXJhbF9wdGwuc3VibGF5ZXJfbGV2ZWxf aWRjW2ldID0gZ2V0X2JpdHMoZ2IsIDgpOworICAgIH0KKworICAgIGlmIChwcm9maWxlVGllclBy ZXNlbnRGbGFnKSB7CisgICAgICAgIGdlbmVyYWxfcHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzID0g Z2V0X2JpdHMoZ2IsIDgpOworICAgICAgICBpZiAoZ2VuZXJhbF9wdGwucHRsX251bV9zdWJfcHJv ZmlsZXMpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ2VuZXJhbF9wdGwucHRs X251bV9zdWJfcHJvZmlsZXM7IGkrKykKKyAgICAgICAgICAgICAgICBnZW5lcmFsX3B0bC5nZW5l cmFsX3N1Yl9wcm9maWxlX2lkY1tpXSA9IGdldF9iaXRzX2xvbmcoZ2IsIDMyKTsKKyAgICAgICAg fQorICAgIH0KKworICAgIHZ2Y2NfdXBkYXRlX3B0bCh2dmNjLCAmZ2VuZXJhbF9wdGwpOworfQor CitzdGF0aWMgaW50IHZ2Y2NfcGFyc2VfdnBzKEdldEJpdENvbnRleHQgKmdiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICBWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYykKK3sK KyAgICB1bnNpZ25lZCBpbnQgdnBzX21heF9sYXllcnNfbWludXMxOworICAgIHVuc2lnbmVkIGlu dCB2cHNfbWF4X3N1YmxheWVyc19taW51czE7CisgICAgdW5zaWduZWQgaW50IHZwc19kZWZhdWx0 X3B0bF9kcGJfaHJkX21heF90aWRfZmxhZzsKKyAgICB1bnNpZ25lZCBpbnQgdnBzX2FsbF9pbmRl cGVuZGVudF9sYXllcnNfZmxhZzsKKyAgICB1bnNpZ25lZCBpbnQgdnBzX2VhY2hfbGF5ZXJfaXNf YW5fb2xzX2ZsYWc7CisgICAgdW5zaWduZWQgaW50IHZwc19vbHNfbW9kZV9pZGM7CisKKyAgICB1 bnNpZ25lZCBpbnQgdnBzX3B0X3ByZXNlbnRfZmxhZ1tWVkNfTUFYX1BUTFNdOworICAgIHVuc2ln bmVkIGludCB2cHNfcHRsX21heF90aWRbVlZDX01BWF9QVExTXTsKKyAgICB1bnNpZ25lZCBpbnQg dnBzX251bV9wdGxzX21pbnVzMSA9IDA7CisKKyAgICAvKgorICAgICAqIHZwc192aWRlb19wYXJh bWV0ZXJfc2V0X2lkIHUoNCkKKyAgICAgKi8KKyAgICBza2lwX2JpdHMoZ2IsIDQpOworCisgICAg dnBzX21heF9sYXllcnNfbWludXMxID0gZ2V0X2JpdHMoZ2IsIDYpOworICAgIHZwc19tYXhfc3Vi bGF5ZXJzX21pbnVzMSA9IGdldF9iaXRzKGdiLCAzKTsKKworICAgIC8qCisgICAgICogbnVtVGVt cG9yYWxMYXllcnMgZ3JlYXRlciB0aGFuIDEgaW5kaWNhdGVzIHRoYXQgdGhlIHN0cmVhbSB0byB3 aGljaCB0aGlzCisgICAgICogY29uZmlndXJhdGlvbiByZWNvcmQgYXBwbGllcyBpcyB0ZW1wb3Jh bGx5IHNjYWxhYmxlIGFuZCB0aGUgY29udGFpbmVkCisgICAgICogbnVtYmVyIG9mIHRlbXBvcmFs IGxheWVycyAoYWxzbyByZWZlcnJlZCB0byBhcyB0ZW1wb3JhbCBzdWItbGF5ZXIgb3IKKyAgICAg KiBzdWItbGF5ZXIgaW4gSVNPL0lFQyAyMzAwOC0yKSBpcyBlcXVhbCB0byBudW1UZW1wb3JhbExh eWVycy4gVmFsdWUgMQorICAgICAqIGluZGljYXRlcyB0aGF0IHRoZSBzdHJlYW0gaXMgbm90IHRl bXBvcmFsbHkgc2NhbGFibGUuIFZhbHVlIDAgaW5kaWNhdGVzCisgICAgICogdGhhdCBpdCBpcyB1 bmtub3duIHdoZXRoZXIgdGhlIHN0cmVhbSBpcyB0ZW1wb3JhbGx5IHNjYWxhYmxlLgorICAgICAq LworICAgIHZ2Y2MtPm51bV9zdWJsYXllcnMgPSBGRk1BWCh2dmNjLT5udW1fc3VibGF5ZXJzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cHNfbWF4X3N1YmxheWVyc19taW51czEg KyAxKTsKKworICAgIGlmICh2cHNfbWF4X2xheWVyc19taW51czEgPiAwICYmIHZwc19tYXhfc3Vi bGF5ZXJzX21pbnVzMSA+IDApCisgICAgICAgIHZwc19kZWZhdWx0X3B0bF9kcGJfaHJkX21heF90 aWRfZmxhZyA9IGdldF9iaXRzMShnYik7CisgICAgaWYgKHZwc19tYXhfbGF5ZXJzX21pbnVzMSA+ IDApCisgICAgICAgIHZwc19hbGxfaW5kZXBlbmRlbnRfbGF5ZXJzX2ZsYWcgPSBnZXRfYml0czEo Z2IpOworICAgIGVsc2UKKyAgICAgICAgdnBzX2FsbF9pbmRlcGVuZGVudF9sYXllcnNfZmxhZyA9 IDE7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8PSB2cHNfbWF4X2xheWVyc19taW51czE7IGkr KykgeworICAgICAgICBza2lwX2JpdHMoZ2IsIDYpOyAgICAvL3Zwc19sYXllcl9pZFtpXQorICAg ICAgICBpZiAoaSA+IDAgJiYgIXZwc19hbGxfaW5kZXBlbmRlbnRfbGF5ZXJzX2ZsYWcpIHsKKyAg ICAgICAgICAgIGlmIChnZXRfYml0czEoZ2IpKSB7ICAgIC8vIHZwc19pbmRlcGVuZGVudF9sYXll cl9mbGFnW2ldCisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHZwc19tYXhfdGlkX3JlZl9w cmVzZW50X2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGog PSAwOyBqIDwgaTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2cHNfbWF4X3RpZF9y ZWZfcHJlc2VudF9mbGFnICYmIGdldF9iaXRzMShnYikpICAvLyB2cHNfZGlyZWN0X3JlZl9sYXll cl9mbGFnW2ldW2pdCisgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JpdHMoZ2IsIDMpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2cHNfbWF4X3RpZF9pbF9yZWZfcGljc19w bHVzMQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K KworICAgIGlmICh2cHNfbWF4X2xheWVyc19taW51czEgPiAwKSB7CisgICAgICAgIGlmICh2cHNf YWxsX2luZGVwZW5kZW50X2xheWVyc19mbGFnKQorICAgICAgICAgICAgdnBzX2VhY2hfbGF5ZXJf aXNfYW5fb2xzX2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgICAgICBlbHNlCisgICAgICAgICAg ICB2cHNfZWFjaF9sYXllcl9pc19hbl9vbHNfZmxhZyA9IDA7CisgICAgICAgIGlmICghdnBzX2Vh Y2hfbGF5ZXJfaXNfYW5fb2xzX2ZsYWcpIHsKKyAgICAgICAgICAgIGlmICghdnBzX2FsbF9pbmRl cGVuZGVudF9sYXllcnNfZmxhZykKKyAgICAgICAgICAgICAgICB2cHNfb2xzX21vZGVfaWRjID0g Z2V0X2JpdHMoZ2IsIDIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZwc19v bHNfbW9kZV9pZGMgPSAyOworICAgICAgICAgICAgaWYgKHZwc19vbHNfbW9kZV9pZGMgPT0gMikg eworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB2cHNfbnVtX291dHB1dF9sYXllcl9zZXRz X21pbnVzMiA9IGdldF9iaXRzKGdiLCA4KTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0g MTsgaSA8PSB2cHNfbnVtX291dHB1dF9sYXllcl9zZXRzX21pbnVzMiArIDE7IGkrKykgeworICAg ICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8PSB2cHNfbWF4X2xheWVyc19taW51 czE7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgc2tpcF9iaXRzMShnYik7IC8vIHZw c19vbHNfb3V0cHV0X2xheWVyX2ZsYWdbaV1bal0KKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2cHNfbnVt X3B0bHNfbWludXMxID0gZ2V0X2JpdHMoZ2IsIDgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZw c19lYWNoX2xheWVyX2lzX2FuX29sc19mbGFnID0gMDsKKyAgICB9CisKKyAgICBmb3IgKGludCBp ID0gMDsgaSA8PSB2cHNfbnVtX3B0bHNfbWludXMxOyBpKyspIHsKKyAgICAgICAgaWYgKGkgPiAw KQorICAgICAgICAgICAgdnBzX3B0X3ByZXNlbnRfZmxhZ1tpXSA9IGdldF9iaXRzMShnYik7Cisg ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZwc19wdF9wcmVzZW50X2ZsYWdbaV0gPSAxOworCisg ICAgICAgIGlmICghdnBzX2RlZmF1bHRfcHRsX2RwYl9ocmRfbWF4X3RpZF9mbGFnKQorICAgICAg ICAgICAgdnBzX3B0bF9tYXhfdGlkW2ldID0gZ2V0X2JpdHMoZ2IsIDMpOworICAgICAgICBlbHNl CisgICAgICAgICAgICB2cHNfcHRsX21heF90aWRbaV0gPSB2cHNfbWF4X3N1YmxheWVyc19taW51 czE7CisgICAgfQorCisgICAgd2hpbGUgKGdiLT5pbmRleCAlIDggIT0gMCkKKyAgICAgICAgc2tp cF9iaXRzMShnYik7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8PSB2cHNfbnVtX3B0bHNfbWlu dXMxOyBpKyspCisgICAgICAgIHZ2Y2NfcGFyc2VfcHRsKGdiLCB2dmNjLCB2cHNfcHRfcHJlc2Vu dF9mbGFnW2ldLCB2cHNfcHRsX21heF90aWRbaV0pOworCisgICAgLyogbm90aGluZyB1c2VmdWwg Zm9yIHZ2Y2MgcGFzdCB0aGlzIHBvaW50ICovCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgdnZjY19wYXJzZV9zcHMoR2V0Qml0Q29udGV4dCAqZ2IsCisgICAgICAgICAgICAgICAgICAg ICAgICAgIFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjKQoreworICAgIHVuc2ln bmVkIGludCBzcHNfbWF4X3N1YmxheWVyc19taW51czEsIHNwc19sb2cyX2N0dV9zaXplX21pbnVz NTsKKyAgICB1bnNpZ25lZCBpbnQgc3BzX3N1YnBpY19zYW1lX3NpemVfZmxhZywgc3BzX3BpY19o ZWlnaHRfbWF4X2luX2x1bWFfc2FtcGxlcywKKyAgICAgICAgc3BzX3BpY193aWR0aF9tYXhfaW5f bHVtYV9zYW1wbGVzOworICAgIHVuc2lnbmVkIGludCBzcHNfaW5kZXBlbmRlbnRfc3VicGljc19m bGFnOworCisgICAgc2tpcF9iaXRzKGdiLCA4KTsgIC8vIHNwc19zZXFfcGFyYW1ldGVyX3NldF9p ZCAmJiBzcHNfdmlkZW9fcGFyYW1ldGVyX3NldF9pZAorICAgIHNwc19tYXhfc3VibGF5ZXJzX21p bnVzMSA9IGdldF9iaXRzKGdiLCAzKTsKKworICAgIC8qCisgICAgICogbnVtVGVtcG9yYWxMYXll cnMgZ3JlYXRlciB0aGFuIDEgaW5kaWNhdGVzIHRoYXQgdGhlIHN0cmVhbSB0byB3aGljaCB0aGlz CisgICAgICogY29uZmlndXJhdGlvbiByZWNvcmQgYXBwbGllcyBpcyB0ZW1wb3JhbGx5IHNjYWxh YmxlIGFuZCB0aGUgY29udGFpbmVkCisgICAgICogbnVtYmVyIG9mIHRlbXBvcmFsIGxheWVycyAo YWxzbyByZWZlcnJlZCB0byBhcyB0ZW1wb3JhbCBzdWItbGF5ZXIgb3IKKyAgICAgKiBzdWItbGF5 ZXIgaW4gSVNPL0lFQyAyMzAwOC0yKSBpcyBlcXVhbCB0byBudW1UZW1wb3JhbExheWVycy4gVmFs dWUgMQorICAgICAqIGluZGljYXRlcyB0aGF0IHRoZSBzdHJlYW0gaXMgbm90IHRlbXBvcmFsbHkg c2NhbGFibGUuIFZhbHVlIDAgaW5kaWNhdGVzCisgICAgICogdGhhdCBpdCBpcyB1bmtub3duIHdo ZXRoZXIgdGhlIHN0cmVhbSBpcyB0ZW1wb3JhbGx5IHNjYWxhYmxlLgorICAgICAqLworICAgIHZ2 Y2MtPm51bV9zdWJsYXllcnMgPSBGRk1BWCh2dmNjLT5udW1fc3VibGF5ZXJzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzcHNfbWF4X3N1YmxheWVyc19taW51czEgKyAxKTsKKwor ICAgIHZ2Y2MtPmNocm9tYV9mb3JtYXRfaWRjID0gZ2V0X2JpdHMoZ2IsIDIpOworICAgIHNwc19s b2cyX2N0dV9zaXplX21pbnVzNSA9IGdldF9iaXRzKGdiLCAyKTsKKworICAgIGlmIChnZXRfYml0 czEoZ2IpKSAgICAgICAgICAvLyBzcHNfcHRsX2RwYl9ocmRfcGFyYW1zX3ByZXNlbnRfZmxhZwor ICAgICAgICB2dmNjX3BhcnNlX3B0bChnYiwgdnZjYywgMSwgc3BzX21heF9zdWJsYXllcnNfbWlu dXMxKTsKKworICAgIHNraXBfYml0czEoZ2IpOyAgICAgICAgICAgICAvLyBzcHNfZ2RyX2VuYWJs ZWRfZmxhZworICAgIGlmIChnZXRfYml0cyhnYiwgMSkpICAgICAgICAvLyBzcHNfcmVmX3BpY19y ZXNhbXBsaW5nX2VuYWJsZWRfZmxhZworICAgICAgICBza2lwX2JpdHMxKGdiKTsgICAgICAgICAv LyBzcHNfcmVzX2NoYW5nZV9pbl9jbHZzX2FsbG93ZWRfZmxhZworCisgICAgc3BzX3BpY193aWR0 aF9tYXhfaW5fbHVtYV9zYW1wbGVzID0gZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsKKyAgICB2dmNj LT5tYXhfcGljdHVyZV93aWR0aCA9CisgICAgICAgIEZGTUFYKHZ2Y2MtPm1heF9waWN0dXJlX3dp ZHRoLCBzcHNfcGljX3dpZHRoX21heF9pbl9sdW1hX3NhbXBsZXMpOworICAgIHNwc19waWNfaGVp Z2h0X21heF9pbl9sdW1hX3NhbXBsZXMgPSBnZXRfdWVfZ29sb21iX2xvbmcoZ2IpOworICAgIHZ2 Y2MtPm1heF9waWN0dXJlX2hlaWdodCA9CisgICAgICAgIEZGTUFYKHZ2Y2MtPm1heF9waWN0dXJl X2hlaWdodCwgc3BzX3BpY19oZWlnaHRfbWF4X2luX2x1bWFfc2FtcGxlcyk7CisKKyAgICBpZiAo Z2V0X2JpdHMxKGdiKSkgeworICAgICAgICBnZXRfdWVfZ29sb21iX2xvbmcoZ2IpOyAvLyBzcHNf Y29uZl93aW5fbGVmdF9vZmZzZXQKKyAgICAgICAgZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsgLy8g c3BzX2NvbmZfd2luX3JpZ2h0X29mZnNldAorICAgICAgICBnZXRfdWVfZ29sb21iX2xvbmcoZ2Ip OyAvLyBzcHNfY29uZl93aW5fdG9wX29mZnNldAorICAgICAgICBnZXRfdWVfZ29sb21iX2xvbmco Z2IpOyAvLyBzcHNfY29uZl93aW5fYm90dG9tX29mZnNldAorICAgIH0KKworICAgIGlmIChnZXRf Yml0czEoZ2IpKSB7ICAgICAgICAvLyBzcHNfc3VicGljX2luZm9fcHJlc2VudF9mbGFnCisgICAg ICAgIGNvbnN0IHVuc2lnbmVkIGludCBzcHNfbnVtX3N1YnBpY3NfbWludXMxID0gZ2V0X3VlX2dv bG9tYl9sb25nKGdiKTsKKyAgICAgICAgY29uc3QgaW50IGN0Yl9sb2cyX3NpemVfeSA9IHNwc19s b2cyX2N0dV9zaXplX21pbnVzNSArIDU7CisgICAgICAgIGNvbnN0IGludCBjdGJfc2l6ZV95ICAg ICAgPSAxIDw8IGN0Yl9sb2cyX3NpemVfeTsKKyAgICAgICAgY29uc3QgaW50IHRtcF93aWR0aF92 YWwgICA9IEFWX0NFSUxfUlNISUZUKHNwc19waWNfd2lkdGhfbWF4X2luX2x1bWFfc2FtcGxlcywg IGN0Yl9sb2cyX3NpemVfeSk7CisgICAgICAgIGNvbnN0IGludCB0bXBfaGVpZ2h0X3ZhbCAgPSBB Vl9DRUlMX1JTSElGVChzcHNfcGljX2hlaWdodF9tYXhfaW5fbHVtYV9zYW1wbGVzLCBjdGJfbG9n Ml9zaXplX3kpOworICAgICAgICBjb25zdCBpbnQgd2xlbiAgICAgICAgICAgID0gYXZfY2VpbF9s b2cyKHRtcF93aWR0aF92YWwpOworICAgICAgICBjb25zdCBpbnQgaGxlbiAgICAgICAgICAgID0g YXZfY2VpbF9sb2cyKHRtcF9oZWlnaHRfdmFsKTsKKyAgICAgICAgaWYgKHNwc19udW1fc3VicGlj c19taW51czEgPiAwKSB7ICAgICAgIC8vIHNwc19udW1fc3VicGljc19taW51czEKKyAgICAgICAg ICAgIHNwc19pbmRlcGVuZGVudF9zdWJwaWNzX2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgICAg ICAgICAgc3BzX3N1YnBpY19zYW1lX3NpemVfZmxhZyA9IGdldF9iaXRzMShnYik7CisgICAgICAg IH0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IHNwc19udW1fc3VicGljc19taW51czEgPiAwICYm IGkgPD0gc3BzX251bV9zdWJwaWNzX21pbnVzMTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIXNw c19zdWJwaWNfc2FtZV9zaXplX2ZsYWcgfHwgaSA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYg KGkgPiAwICYmIHNwc19waWNfd2lkdGhfbWF4X2luX2x1bWFfc2FtcGxlcyA+IGN0Yl9zaXplX3kp CisgICAgICAgICAgICAgICAgICAgIHNraXBfYml0cyhnYiwgd2xlbik7CisgICAgICAgICAgICAg ICAgaWYgKGkgPiAwICYmIHNwc19waWNfaGVpZ2h0X21heF9pbl9sdW1hX3NhbXBsZXMgPiBjdGJf c2l6ZV95KQorICAgICAgICAgICAgICAgICAgICBza2lwX2JpdHMoZ2IsIGhsZW4pOworICAgICAg ICAgICAgICAgIGlmIChpIDwgc3BzX251bV9zdWJwaWNzX21pbnVzMSAmJiBzcHNfcGljX3dpZHRo X21heF9pbl9sdW1hX3NhbXBsZXMgPiBjdGJfc2l6ZV95KQorICAgICAgICAgICAgICAgICAgICBz a2lwX2JpdHMoZ2IsIHdsZW4pOworICAgICAgICAgICAgICAgIGlmIChpIDwgc3BzX251bV9zdWJw aWNzX21pbnVzMSAmJiBzcHNfcGljX2hlaWdodF9tYXhfaW5fbHVtYV9zYW1wbGVzID4gY3RiX3Np emVfeSkKKyAgICAgICAgICAgICAgICAgICAgc2tpcF9iaXRzKGdiLCBobGVuKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGlmICghc3BzX2luZGVwZW5kZW50X3N1YnBpY3NfZmxhZykgewor ICAgICAgICAgICAgICAgIHNraXBfYml0cyhnYiwgMik7ICAgICAgIC8vIHNwc19zdWJwaWNfdHJl YXRlZF9hc19waWNfZmxhZyAmJiBzcHNfbG9vcF9maWx0ZXJfYWNyb3NzX3N1YnBpY19lbmFibGVk X2ZsYWcKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBnZXRfdWVfZ29sb21iX2xv bmcoZ2IpOyAvLyBzcHNfc3VicGljX2lkX2xlbl9taW51czEKKyAgICAgICAgaWYgKGdldF9iaXRz MShnYikpIHsgICAgLy8gc3BzX3N1YnBpY19pZF9tYXBwaW5nX2V4cGxpY2l0bHlfc2lnbmFsbGVk X2ZsYWcKKyAgICAgICAgICAgIGlmIChnZXRfYml0czEoZ2IpKSAgLy8gc3BzX3N1YnBpY19pZF9t YXBwaW5nX3ByZXNlbnRfZmxhZworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9 IHNwc19udW1fc3VicGljc19taW51czE7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBza2lw X2JpdHMxKGdiKTsgICAgIC8vIHNwc19zdWJwaWNfaWRbaV0KKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICB9CisgICAgdnZjYy0+Yml0X2RlcHRoX21pbnVzOCA9IGdldF91ZV9nb2xv bWJfbG9uZyhnYik7CisKKyAgICAvKiBub3RoaW5nIHVzZWZ1bCBmb3IgdnZjYyBwYXN0IHRoaXMg cG9pbnQgKi8KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2dmNjX3BhcnNlX3BwcyhH ZXRCaXRDb250ZXh0ICpnYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVlZDRGVjb2RlckNv bmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MpCit7CisKKyAgICAvLyBOb3RoaW5nIG9mIGltcG9ydGFu Y2UgdG8gcGFyc2UgaW4gUFBTCisgICAgLyogbm90aGluZyB1c2VmdWwgZm9yIHZ2Y2MgcGFzdCB0 aGlzIHBvaW50ICovCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5hbF91bml0X3Bh cnNlX2hlYWRlcihHZXRCaXRDb250ZXh0ICpnYiwgdWludDhfdCAqbmFsX3R5cGUpCit7CisgICAg LyoKKyAgICAgKiBmb3JiaWRkZW5femVyb19iaXQgICAgdSgxKQorICAgICAqIG51aF9yZXNlcnZl ZF96ZXJvX2JpdCB1KDEpCisgICAgICogbnVoX2xheWVyX2lkICAgICAgICAgIHUoNikKKyAgICAg Ki8KKyAgICBza2lwX2JpdHMoZ2IsIDgpOworICAgICpuYWxfdHlwZSA9IGdldF9iaXRzKGdiLCA1 KTsKKworICAgIC8qCisgICAgICogbnVoX3RlbXBvcmFsX2lkX3BsdXMxIHUoMykKKyAgICAgKi8K KyAgICBza2lwX2JpdHMoZ2IsIDMpOworfQorCitzdGF0aWMgaW50IHZ2Y2NfYXJyYXlfYWRkX25h bF91bml0KHVpbnQ4X3QgKm5hbF9idWYsIHVpbnQzMl90IG5hbF9zaXplLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IG5hbF90eXBlLCBpbnQgcHNfYXJyYXlfY29t cGxldGVuZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWVkNEZWNvZGVy Q29uZmlndXJhdGlvblJlY29yZCAqdnZjYykKK3sKKyAgICBpbnQgcmV0OworICAgIHVpbnQ4X3Qg aW5kZXg7CisgICAgdWludDE2X3QgbnVtX25hbHVzOworICAgIFZWQ0NOQUxVbml0QXJyYXkgKmFy cmF5OworCisgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdnZjYy0+bnVtX29mX2FycmF5czsg aW5kZXgrKykKKyAgICAgICAgaWYgKHZ2Y2MtPmFycmF5W2luZGV4XS5OQUxfdW5pdF90eXBlID09 IG5hbF90eXBlKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICBpZiAoaW5kZXggPj0gdnZjYy0+ bnVtX29mX2FycmF5cykgeworICAgICAgICB1aW50OF90IGk7CisKKyAgICAgICAgcmV0ID0KKyAg ICAgICAgICAgIGF2X3JlYWxsb2NwX2FycmF5KCZ2dmNjLT5hcnJheSwgaW5kZXggKyAxLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKFZWQ0NOQUxVbml0QXJyYXkpKTsKKyAg ICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICByZXR1cm4gcmV0OworCisgICAgICAgIGZv ciAoaSA9IHZ2Y2MtPm51bV9vZl9hcnJheXM7IGkgPD0gaW5kZXg7IGkrKykKKyAgICAgICAgICAg IG1lbXNldCgmdnZjYy0+YXJyYXlbaV0sIDAsIHNpemVvZihWVkNDTkFMVW5pdEFycmF5KSk7Cisg ICAgICAgIHZ2Y2MtPm51bV9vZl9hcnJheXMgPSBpbmRleCArIDE7CisgICAgfQorCisgICAgYXJy YXkgPSAmdnZjYy0+YXJyYXlbaW5kZXhdOworICAgIG51bV9uYWx1cyA9IGFycmF5LT5udW1fbmFs dXM7CisKKyAgICByZXQgPSBhdl9yZWFsbG9jcF9hcnJheSgmYXJyYXktPm5hbF91bml0LCBudW1f bmFsdXMgKyAxLCBzaXplb2YodWludDhfdCAqKSk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAg IHJldHVybiByZXQ7CisKKyAgICByZXQgPQorICAgICAgICBhdl9yZWFsbG9jcF9hcnJheSgmYXJy YXktPm5hbF91bml0X2xlbmd0aCwgbnVtX25hbHVzICsgMSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZW9mKHVpbnQxNl90KSk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVy biByZXQ7CisKKyAgICBhcnJheS0+bmFsX3VuaXRbbnVtX25hbHVzXSA9IG5hbF9idWY7CisgICAg YXJyYXktPm5hbF91bml0X2xlbmd0aFtudW1fbmFsdXNdID0gbmFsX3NpemU7CisgICAgYXJyYXkt Pk5BTF91bml0X3R5cGUgPSBuYWxfdHlwZTsKKyAgICBhcnJheS0+bnVtX25hbHVzKys7CisKKyAg ICAvKgorICAgICogV2hlbiB0aGUgc2FtcGxlIGVudHJ5IG5hbWUgaXMgJ3Z2YzEnLCB0aGUgZm9s bG93aW5nIGFwcGxpZXM6CisgICAgKiDigKIgVGhlIHZhbHVlIG9mIGFycmF5X2NvbXBsZXRlbmVz cyBzaGFsbCBiZSBlcXVhbCB0byAxIGZvciBhcnJheXMgb2YgU1BTLAorICAgICogICBhbmQgUFBT IE5BTCB1bml0cy4KKyAgICAqIOKAoiBJZiBhIFZWQyBiaXRzdHJlYW0gaW5jbHVkZXMgRENJIE5B TCB1bml0KHMpLCB0aGUgdmFsdWUgb2YKKyAgICAqICAgYXJyYXlfY29tcGxldGVuZXNzIHNoYWxs IGJlIGVxdWFsIHRvIDEgZm9yIHRoZSBhcnJheSBvZiBEQ0kgdW5pdHMuCisgICAgKiAgIE90aGVy d2lzZSwgTkFMX3VuaXRfdHlwZSBzaGFsbCBub3QgaW5kaWNhdGUgRENJIE5BTCB1bml0cy4KKyAg ICAqIOKAoiBJZiBhIFZWQyBiaXRzdHJlYW0gaW5jbHVkZXMgVlBTIE5BTCB1bml0KHMpLCB0aGUg dmFsdWUgb2YKKyAgICAqICAgYXJyYXlfY29tcGxldGVuZXNzIHNoYWxsIGJlIGVxdWFsIHRvIDEg Zm9yIHRoZSBhcnJheSBvZiBWUFMgTkFMIHVuaXRzLgorICAgICogICBPdGhlcndpc2UsIE5BTF91 bml0X3R5cGUgc2hhbGwgbm90IGluZGljYXRlIFZQUyBOQUwgdW5pdHMuCisgICAgKiBXaGVuIHRo ZSB2YWx1ZSBvZiBhcnJheV9jb21wbGV0ZW5lc3MgaXMgZXF1YWwgdG8gMSBmb3IgYW4gYXJyYXkg b2YgYQorICAgICogcGFydGljdWxhciBOQUxfdW5pdF90eXBlIHZhbHVlLCBOQUwgdW5pdHMgb2Yg dGhhdCBOQUxfdW5pdF90eXBlIHZhbHVlCisgICAgKiBjYW5ub3QgYmUgdXBkYXRlZCB3aXRob3V0 IGNhdXNpbmcgYSBkaWZmZXJlbnQgc2FtcGxlIGVudHJ5IHRvIGJlIHVzZWQuCisgICAgKiBXaGVu IHRoZSBzYW1wbGUgZW50cnkgbmFtZSBpcyAndnZpMScsIHRoZSB2YWx1ZSBvZiBhcnJheV9jb21w bGV0ZW5lc3MKKyAgICAqIG9mIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIGFycmF5cyBz aGFsbCBiZSBlcXVhbCB0byAwOgorICAgICAg4oCiIFRoZSBhcnJheSBvZiBEQ0kgTkFMIHVuaXRz LCBpZiBwcmVzZW50LgorICAgICAg4oCiIFRoZSBhcnJheSBvZiBWUFMgTkFMIHVuaXRzLCBpZiBw cmVzZW50LgorICAgICAg4oCiIFRoZSBhcnJheSBvZiBTUFMgTkFMIHVuaXRzCisgICAgICDigKIg VGhlIGFycmF5IG9mIFBQUyBOQUwgdW5pdHMuCisgICAgKi8KKyAgICBpZiAobmFsX3R5cGUgPT0g VlZDX1ZQU19OVVQgfHwgbmFsX3R5cGUgPT0gVlZDX1NQU19OVVQgfHwKKyAgICAgICAgbmFsX3R5 cGUgPT0gVlZDX1BQU19OVVQgfHwgbmFsX3R5cGUgPT0gVlZDX0RDSV9OVVQgKQorICAgICAgICBh cnJheS0+YXJyYXlfY29tcGxldGVuZXNzID0gcHNfYXJyYXlfY29tcGxldGVuZXNzOworCisgICAg cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnZjY19hZGRfbmFsX3VuaXQodWludDhfdCAqbmFs X2J1ZiwgdWludDMyX3QgbmFsX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBwc19hcnJheV9jb21wbGV0ZW5lc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZW Q0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjKQoreworICAgIGludCByZXQgPSAwOwor ICAgIEdldEJpdENvbnRleHQgZ2JjOworICAgIHVpbnQ4X3QgbmFsX3R5cGU7CisgICAgdWludDhf dCAqcmJzcF9idWY7CisgICAgdWludDMyX3QgcmJzcF9zaXplOworCisgICAgcmJzcF9idWYgPSBm Zl9uYWxfdW5pdF9leHRyYWN0X3Jic3AobmFsX2J1ZiwgbmFsX3NpemUsICZyYnNwX3NpemUsIDIp OworICAgIGlmICghcmJzcF9idWYpIHsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwor ICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICByZXQgPSBpbml0X2dldF9iaXRzOCgmZ2Jj LCByYnNwX2J1ZiwgcmJzcF9zaXplKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgZ290byBl bmQ7CisKKyAgICBuYWxfdW5pdF9wYXJzZV9oZWFkZXIoJmdiYywgJm5hbF90eXBlKTsKKworICAg IC8qCisgICAgICogTm90ZTogb25seSAnZGVjbGFyYXRpdmUnIFNFSSBtZXNzYWdlcyBhcmUgYWxs b3dlZCBpbgorICAgICAqIHZ2Y2MuIFBlcmhhcHMgdGhlIFNFSSBwbGF5bG9hZCB0eXBlIHNob3Vs ZCBiZSBjaGVja2VkCisgICAgICogYW5kIG5vbi1kZWNsYXJhdGl2ZSBTRUkgbWVzc2FnZXMgZGlz Y2FyZGVkPworICAgICAqLworICAgIHN3aXRjaCAobmFsX3R5cGUpIHsKKyAgICBjYXNlIFZWQ19P UElfTlVUOgorICAgIGNhc2UgVlZDX1ZQU19OVVQ6CisgICAgY2FzZSBWVkNfU1BTX05VVDoKKyAg ICBjYXNlIFZWQ19QUFNfTlVUOgorICAgIGNhc2UgVlZDX1BSRUZJWF9TRUlfTlVUOgorICAgIGNh c2UgVlZDX1NVRkZJWF9TRUlfTlVUOgorICAgICAgICByZXQgPSB2dmNjX2FycmF5X2FkZF9uYWxf dW5pdChuYWxfYnVmLCBuYWxfc2l6ZSwgbmFsX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBzX2FycmF5X2NvbXBsZXRlbmVzcywgdnZjYyk7CisgICAgICAgIGlm IChyZXQgPCAwKQorICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIGVsc2UgaWYgKG5hbF90 eXBlID09IFZWQ19WUFNfTlVUKQorICAgICAgICAgICAgcmV0ID0gdnZjY19wYXJzZV92cHMoJmdi YywgdnZjYyk7CisgICAgICAgIGVsc2UgaWYgKG5hbF90eXBlID09IFZWQ19TUFNfTlVUKQorICAg ICAgICAgICAgcmV0ID0gdnZjY19wYXJzZV9zcHMoJmdiYywgdnZjYyk7CisgICAgICAgIGVsc2Ug aWYgKG5hbF90eXBlID09IFZWQ19QUFNfTlVUKQorICAgICAgICAgICAgcmV0ID0gdnZjY19wYXJz ZV9wcHMoJmdiYywgdnZjYyk7CisgICAgICAgIGVsc2UgaWYgKG5hbF90eXBlID09IFZWQ19PUElf TlVUKSB7CisgICAgICAgICAgICAvLyBub3QgeWV0IHN1cHBvcnRlZAorICAgICAgICB9CisgICAg ICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIGJyZWFrOwor ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldCA9IEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAg IGdvdG8gZW5kOworICAgIH0KKworICBlbmQ6CisgICAgYXZfZnJlZShyYnNwX2J1Zik7CisgICAg cmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdnZjY19pbml0KFZWQ0RlY29kZXJDb25maWd1 cmF0aW9uUmVjb3JkICp2dmNjKQoreworICAgIG1lbXNldCh2dmNjLCAwLCBzaXplb2YoVlZDRGVj b2RlckNvbmZpZ3VyYXRpb25SZWNvcmQpKTsKKyAgICB2dmNjLT5sZW5ndGhTaXplTWludXNPbmUg PSAzOyAgICAgICAvLyA0IGJ5dGVzCisKKyAgICB2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFp bnRfaW5mbyA9IDE7CisKKyAgICB2dmNjLT5wdGxfcHJlc2VudF9mbGFnID0gMTsKK30KKworc3Rh dGljIHZvaWQgdnZjY19jbG9zZShWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYykK K3sKKyAgICB1aW50OF90IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+bnVtX29mX2Fy cmF5czsgaSsrKSB7CisgICAgICAgIHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1cyA9IDA7CisgICAg ICAgIGF2X2ZyZWVwKCZ2dmNjLT5hcnJheVtpXS5uYWxfdW5pdCk7CisgICAgICAgIGF2X2ZyZWVw KCZ2dmNjLT5hcnJheVtpXS5uYWxfdW5pdF9sZW5ndGgpOworICAgIH0KKworICAgIHZ2Y2MtPm51 bV9vZl9hcnJheXMgPSAwOworICAgIGF2X2ZyZWVwKCZ2dmNjLT5hcnJheSk7Cit9CisKK3N0YXRp YyBpbnQgdnZjY193cml0ZShBVklPQ29udGV4dCAqcGIsIFZWQ0RlY29kZXJDb25maWd1cmF0aW9u UmVjb3JkICp2dmNjKQoreworICAgIHVpbnQ4X3QgaTsKKyAgICB1aW50MTZfdCBqLCB2cHNfY291 bnQgPSAwLCBzcHNfY291bnQgPSAwLCBwcHNfY291bnQgPSAwOworICAgIHVuc2lnbmVkIGNoYXIg KmJ1ZiA9IE5VTEw7CisgICAgLyoKKyAgICAgKiBJdCdzIHVuY2xlYXIgaG93IHRvIHByb3Blcmx5 IGNvbXB1dGUgdGhlc2UgZmllbGRzLCBzbworICAgICAqIGxldCdzIGFsd2F5cyBzZXQgdGhlbSB0 byB2YWx1ZXMgbWVhbmluZyAndW5zcGVjaWZpZWQnLgorICAgICAqLworICAgIHZ2Y2MtPmF2Z19m cmFtZV9yYXRlID0gMDsKKyAgICB2dmNjLT5jb25zdGFudF9mcmFtZV9yYXRlID0gMTsKKworICAg IGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJsZW5ndGhTaXplTWludXNP bmU6ICAgICAgICAgICAgICAgICAgJSIgUFJJdTggIlxuIiwKKyAgICAgICAgICAgdnZjYy0+bGVu Z3RoU2l6ZU1pbnVzT25lKTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAg ICAgICAicHRsX3ByZXNlbnRfZmxhZzogICAgICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIs CisgICAgICAgICAgIHZ2Y2MtPnB0bF9wcmVzZW50X2ZsYWcpOworICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJvbHNfaWR4OiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJSIgUFJJdTE2ICJcbiIsIHZ2Y2MtPm9sc19pZHgpOworICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJudW1fc3VibGF5ZXJzOiAgICAgICAgICAgICAgICAg ICAgICAgJSIgUFJJdTggIlxuIiwKKyAgICAgICAgICAgdnZjYy0+bnVtX3N1YmxheWVycyk7Cisg ICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgImNvbnN0YW50X2ZyYW1l X3JhdGU6ICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5j b25zdGFudF9mcmFtZV9yYXRlKTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAg ICAgICAgICAiY2hyb21hX2Zvcm1hdF9pZGM6ICAgICAgICAgICAgICAgICAgICUiIFBSSXU4ICJc biIsCisgICAgICAgICAgIHZ2Y2MtPmNocm9tYV9mb3JtYXRfaWRjKTsKKworICAgIGF2X2xvZyhO VUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJiaXRfZGVwdGhfbWludXM4OiAgICAgICAg ICAgICAgICAgICAgJSIgUFJJdTggIlxuIiwKKyAgICAgICAgICAgdnZjYy0+Yml0X2RlcHRoX21p bnVzOCk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgIm51bV9i eXRlc19jb25zdHJhaW50X2luZm86ICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAg ICB2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyk7CisgICAgYXZfbG9nKE5VTEws IEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgImdlbmVyYWxfcHJvZmlsZV9pZGM6ICAgICAgICAg ICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9wcm9m aWxlX2lkYyk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgImdl bmVyYWxfdGllcl9mbGFnOiAgICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAg ICAgICB2dmNjLT5wdGwuZ2VuZXJhbF90aWVyX2ZsYWcpOworICAgIGF2X2xvZyhOVUxMLCBBVl9M T0dfVFJBQ0UsCisgICAgICAgICAgICJnZW5lcmFsX2xldmVsX2lkYzogICAgICAgICAgICAgICAg ICAgJSIgUFJJdTggIlxuIiwKKyAgICAgICAgICAgdnZjYy0+cHRsLmdlbmVyYWxfbGV2ZWxfaWRj KTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAicHRsX2ZyYW1l X29ubHlfY29uc3RyYWludF9mbGFnOiAgICAgICUiIFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2 Y2MtPnB0bC5wdGxfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWcpOworICAgIGF2X2xvZyhOVUxM LCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJwdGxfbXVsdGlsYXllcl9lbmFibGVkX2ZsYWc6 ICAgICAgICAgJSIgUFJJdTggIlxuIiwKKyAgICAgICAgICAgdnZjYy0+cHRsLnB0bF9tdWx0aWxh eWVyX2VuYWJsZWRfZmxhZyk7CisgICAgZm9yIChpID0gMDsgaSA8IHZ2Y2MtPnB0bC5udW1fYnl0 ZXNfY29uc3RyYWludF9pbmZvOyBpKyspIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19U UkFDRSwKKyAgICAgICAgICAgICAgICJnZW5lcmFsX2NvbnN0cmFpbnRfaW5mb1slZF06ICAgICAg ICAgICUiIFBSSXU4ICJcbiIsIGksCisgICAgICAgICAgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9j b25zdHJhaW50X2luZm9baV0pOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCB2dmNjLT5u dW1fc3VibGF5ZXJzIC0gMTsgaSsrKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJB Q0UsCisgICAgICAgICAgICAgICAicHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ1slIiBQ Ukl1OCAiXTogICUiIFBSSXU4ICJcbiIsIGksCisgICAgICAgICAgICAgICB2dmNjLT5wdGwucHRs X3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tpXSk7CisgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfVFJBQ0UsCisgICAgICAgICAgICAgICAic3VibGF5ZXJfbGV2ZWxfaWRjWyUiIFBSSXU4 ICJdOiAlIiBQUkl1OCAiXG4iLCBpLAorICAgICAgICAgICAgICAgdnZjYy0+cHRsLnN1YmxheWVy X2xldmVsX2lkY1tpXSk7CisgICAgfQorCisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwK KyAgICAgICAgICAgIm51bV9zdWJfcHJvZmlsZXM6ICAgICAgICAgICAgICAgICAgICAlIiBQUkl1 OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXMpOworCisg ICAgZm9yIChpID0gMDsgaSA8IHZ2Y2MtPnB0bC5wdGxfbnVtX3N1Yl9wcm9maWxlczsgaSsrKSB7 CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICAgICAiZ2Vu ZXJhbF9zdWJfcHJvZmlsZV9pZGNbJSIgUFJJdTggIl06ICAgICAgICAgJSIgUFJJeDMyICJcbiIs IGksCisgICAgICAgICAgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGNbaV0p OworICAgIH0KKworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJt YXhfcGljdHVyZV93aWR0aDogICAgICAgICAgICAgICAgICAgJSIgUFJJdTE2ICJcbiIsCisgICAg ICAgICAgIHZ2Y2MtPm1heF9waWN0dXJlX3dpZHRoKTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9H X1RSQUNFLAorICAgICAgICAgICAibWF4X3BpY3R1cmVfaGVpZ2h0OiAgICAgICAgICAgICAgICAg ICUiIFBSSXUxNiAiXG4iLAorICAgICAgICAgICB2dmNjLT5tYXhfcGljdHVyZV9oZWlnaHQpOwor ICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJhdmdfZnJhbWVfcmF0 ZTogICAgICAgICAgICAgICAgICAgICAgJSIgUFJJdTE2ICJcbiIsCisgICAgICAgICAgIHZ2Y2Mt PmF2Z19mcmFtZV9yYXRlKTsKKworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAg ICAgICAgICJudW1fb2ZfYXJyYXlzOiAgICAgICAgICAgICAgICAgICAgICAgJSIgUFJJdTggIlxu IiwKKyAgICAgICAgICAgdnZjYy0+bnVtX29mX2FycmF5cyk7CisgICAgZm9yIChpID0gMDsgaSA8 IHZ2Y2MtPm51bV9vZl9hcnJheXM7IGkrKykgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9H X1RSQUNFLAorICAgICAgICAgICAgICAgImFycmF5X2NvbXBsZXRlbmVzc1slIiBQUkl1OCAiXTog ICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLCBpLAorICAgICAgICAgICAgICAgdnZjYy0+YXJy YXlbaV0uYXJyYXlfY29tcGxldGVuZXNzKTsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19U UkFDRSwKKyAgICAgICAgICAgICAgICJOQUxfdW5pdF90eXBlWyUiIFBSSXU4ICJdOiAgICAgICAg ICAgICAgICAgICAgJSIgUFJJdTggIlxuIiwgaSwKKyAgICAgICAgICAgICAgIHZ2Y2MtPmFycmF5 W2ldLk5BTF91bml0X3R5cGUpOworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAor ICAgICAgICAgICAgICAgIm51bV9uYWx1c1slIiBQUkl1OCAiXTogICAgICAgICAgICAgICAgICAg ICAgICAlIiBQUkl1MTYgIlxuIiwgaSwKKyAgICAgICAgICAgICAgIHZ2Y2MtPmFycmF5W2ldLm51 bV9uYWx1cyk7CisgICAgICAgIGZvciAoaiA9IDA7IGogPCB2dmNjLT5hcnJheVtpXS5udW1fbmFs dXM7IGorKykKKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAg ICAgICAgICAgICAgIm5hbF91bml0X2xlbmd0aFslIiBQUkl1OCAiXVslIiBQUkl1MTYgIl06ICAg ICAgICAgICAgICAgJSIKKyAgICAgICAgICAgICAgICAgICBQUkl1MTYgIlxuIiwgaSwgaiwgdnZj Yy0+YXJyYXlbaV0ubmFsX3VuaXRfbGVuZ3RoW2pdKTsKKyAgICB9CisKKyAgICAvKgorICAgICAq IFdlIG5lZWQgYXQgbGVhc3Qgb25lIG9mIGVhY2g6IFZQUyBhbmQgU1BTLgorICAgICAqLworICAg IGZvciAoaSA9IDA7IGkgPCB2dmNjLT5udW1fb2ZfYXJyYXlzOyBpKyspCisgICAgICAgIHN3aXRj aCAodnZjYy0+YXJyYXlbaV0uTkFMX3VuaXRfdHlwZSkgeworICAgICAgICBjYXNlIFZWQ19WUFNf TlVUOgorICAgICAgICAgICAgdnBzX2NvdW50ICs9IHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1czsK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZWQ19TUFNfTlVUOgorICAgICAgICAg ICAgc3BzX2NvdW50ICs9IHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1czsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICBjYXNlIFZWQ19QUFNfTlVUOgorICAgICAgICAgICAgcHBzX2NvdW50ICs9 IHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1czsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk ZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIGlmICh2cHNfY291 bnQgPiBWVkNfTUFYX1ZQU19DT1VOVCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7CisgICAgaWYgKCFzcHNfY291bnQgfHwgc3BzX2NvdW50ID4gVlZDX01BWF9TUFNfQ09VTlQp CisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIGlmICghcHBzX2NvdW50 IHx8IHBwc19jb3VudCA+IFZWQ19NQVhfUFBTX0NPVU5UKQorICAgICAgICByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsKKworICAgIC8qIGJpdCg1KSByZXNlcnZlZCA9IOKAmDExMTEx4oCZYjsK KyAgICAgICB1bnNpZ25lZCBpbnQgKDIpIExlbmd0aFNpemVNaW51c09uZQorICAgICAgIHVuc2ln bmVkIGludCAoMSkgcHRsX3ByZXNlbnRfZmxhZyAqLworICAgIGF2aW9fdzgocGIsIHZ2Y2MtPmxl bmd0aFNpemVNaW51c09uZSA8PCAxIHwgdnZjYy0+cHRsX3ByZXNlbnRfZmxhZyB8IDB4ZjgpOwor CisgICAgaWYgKHZ2Y2MtPnB0bF9wcmVzZW50X2ZsYWcpIHsKKyAgICAgICAgLyoKKyAgICAgICAg ICogdW5zaWduZWQgaW50KDkpIG9sc19pZHg7CisgICAgICAgICAqIHVuc2lnbmVkIGludCgzKSBu dW1fc3VibGF5ZXJzOworICAgICAgICAgKiB1bnNpZ25lZCBpbnQoMikgY29uc3RhbnRfZnJhbWVf cmF0ZTsKKyAgICAgICAgICogdW5zaWduZWQgaW50KDIpIGNocm9tYV9mb3JtYXRfaWRjOyAgICAg Ki8KKyAgICAgICAgYXZpb193YjE2KHBiLAorICAgICAgICAgICAgICAgICAgdnZjYy0+b2xzX2lk eCA8PCA3IHwgdnZjYy0+bnVtX3N1YmxheWVycyA8PCA0IHwgdnZjYy0+CisgICAgICAgICAgICAg ICAgICBjb25zdGFudF9mcmFtZV9yYXRlIDw8IDIgfCB2dmNjLT5jaHJvbWFfZm9ybWF0X2lkYyk7 CisKKyAgICAgICAgLyogdW5zaWduZWQgaW50KDMpIGJpdF9kZXB0aF9taW51czg7CisgICAgICAg ICAgIGJpdCg1KSByZXNlcnZlZCA9IOKAmDExMTEx4oCZYjsgKi8KKyAgICAgICAgYXZpb193OChw YiwgdnZjYy0+Yml0X2RlcHRoX21pbnVzOCA8PCA1IHwgMHgxZik7CisKKyAgICAgICAgLy9WVkNQ VExSZWNvcmQKKworICAgICAgICAvKiBiaXQoMikgcmVzZXJ2ZWQgPSDigJgwMOKAmWI7CisgICAg ICAgICAgIHVuc2lnbmVkIGludCAoNikgbnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyAqLworICAg ICAgICBhdmlvX3c4KHBiLCB2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyAmIDB4 M2YpOworCisgICAgICAgIC8qIHVuc2lnbmVkIGludCAoNykgZ2VuZXJhbF9wcm9maWxlX2lkYwor ICAgICAgICAgICB1bnNpZ25lZCBpbnQgKDEpIGdlbmVyYWxfdGllcl9mbGFnICovCisgICAgICAg IGF2aW9fdzgocGIsCisgICAgICAgICAgICAgICAgdnZjYy0+cHRsLmdlbmVyYWxfcHJvZmlsZV9p ZGMgPDwgMSB8IHZ2Y2MtPnB0bC5nZW5lcmFsX3RpZXJfZmxhZyk7CisKKyAgICAgICAgLyogdW5z aWduZWQgaW50ICg4KSBnZW5lcmFsX2xldmVsX2lkYyAqLworICAgICAgICBhdmlvX3c4KHBiLCB2 dmNjLT5wdGwuZ2VuZXJhbF9sZXZlbF9pZGMpOworCisgICAgICAgIC8qCisgICAgICAgICAqIHVu c2lnbmVkIGludCAoMSkgcHRsX2ZyYW1lX29ubHlfY29uc3RyYWludF9mbGFnCisgICAgICAgICAq IHVuc2lnbmVkIGludCAoMSkgcHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnCisgICAgICAgICAq IHVuc2lnbmVkIGludCAoOCpudW1fYnl0ZXNfY29uc3RyYWludF9pbmZvIC0yKSBnZW5lcmFsX2Nv bnN0cmFpbnRfaW5mbyAqLworICAgICAgICBidWYgPQorICAgICAgICAgICAgKHVuc2lnbmVkIGNo YXIgKikgbWFsbG9jKHNpemVvZih1bnNpZ25lZCBjaGFyKSAqCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdnZjYy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50X2luZm8pOwor ICAgICAgICAqYnVmID0gdnZjYy0+cHRsLnB0bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZyA8 PCB2dmNjLT5wdGwuCisgICAgICAgICAgICBudW1fYnl0ZXNfY29uc3RyYWludF9pbmZvICogOCAt IDEgfCB2dmNjLT5wdGwuCisgICAgICAgICAgICBwdGxfbXVsdGlsYXllcl9lbmFibGVkX2ZsYWcg PDwgdnZjYy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50X2luZm8gKgorICAgICAgICAgICAgOCAt IDIgfCAqdnZjYy0+cHRsLmdlbmVyYWxfY29uc3RyYWludF9pbmZvID4+IDI7CisgICAgICAgIGF2 aW9fd3JpdGUocGIsIGJ1ZiwgdnZjYy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50X2luZm8pOwor ICAgICAgICBmcmVlKGJ1Zik7CisKKyAgICAgICAgaWYgKHZ2Y2MtPm51bV9zdWJsYXllcnMgPiAx KSB7CisgICAgICAgICAgICB1aW50OF90IHB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdz ID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSB2dmNjLT5udW1fc3VibGF5ZXJzIC0gMjsg aSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgICAgICBwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2Vu dF9mbGFncyA9CisgICAgICAgICAgICAgICAgICAgIChwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2Vu dF9mbGFncyA8PCAxIHwgdnZjYy0+cHRsLgorICAgICAgICAgICAgICAgICAgICAgcHRsX3N1Ymxh eWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBh dmlvX3c4KHBiLCBwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFncyk7CisgICAgICAgIH0K KworICAgICAgICBmb3IgKGludCBpID0gdnZjYy0+bnVtX3N1YmxheWVycyAtIDI7IGkgPj0gMDsg aS0tKSB7CisgICAgICAgICAgICBpZiAodnZjYy0+cHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVz ZW50X2ZsYWdbaV0pCisgICAgICAgICAgICAgICAgYXZpb193OChwYiwgdnZjYy0+cHRsLnN1Ymxh eWVyX2xldmVsX2lkY1tpXSk7CisgICAgICAgIH0KKworICAgICAgICAvKiB1bnNpZ25lZCBpbnQo OCkgbnVtX3N1Yl9wcm9maWxlczsgKi8KKyAgICAgICAgYXZpb193OChwYiwgdnZjYy0+cHRsLnB0 bF9udW1fc3ViX3Byb2ZpbGVzKTsKKworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHZ2Y2Mt PnB0bC5wdGxfbnVtX3N1Yl9wcm9maWxlczsgaisrKSB7CisgICAgICAgICAgICAvKiB1bnNpZ25l ZCBpbnQoMzIpIGdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjW2pdOyAqLworICAgICAgICAgICAgYXZp b193YjMyKHBiLCB2dmNjLT5wdGwuZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGNbal0pOworICAgICAg ICB9CisKKyAgICAgICAgLy9FbmQgb2YgVnZjUFRMUmVjb3JkCisKKyAgICAgICAgLyoKKyAgICAg ICAgICogdW5zaWduZWQgaW50KDE2KSBtYXhfcGljdHVyZV93aWR0aDsqLworICAgICAgICBhdmlv X3diMTYocGIsIHZ2Y2MtPm1heF9waWN0dXJlX3dpZHRoKTsKKworICAgICAgICAvKgorICAgICAg ICAgKiB1bnNpZ25lZCBpbnQoMTYpIG1heF9waWN0dXJlX2hlaWdodDsqLworICAgICAgICBhdmlv X3diMTYocGIsIHZ2Y2MtPm1heF9waWN0dXJlX2hlaWdodCk7CisKKyAgICAgICAgLyoKKyAgICAg ICAgICogdW5zaWduZWQgaW50KDE2KSBhdmdfZnJhbWVfcmF0ZTsgKi8KKyAgICAgICAgYXZpb193 YjE2KHBiLCB2dmNjLT5hdmdfZnJhbWVfcmF0ZSk7CisgICAgfQorCisgICAgLyogdW5zaWduZWQg aW50KDgpIG51bV9vZl9hcnJheXM7ICovCisgICAgYXZpb193OChwYiwgdnZjYy0+bnVtX29mX2Fy cmF5cyk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+bnVtX29mX2FycmF5czsgaSsrKSB7 CisgICAgICAgIC8qCisgICAgICAgICAqIGJpdCgxKSBhcnJheV9jb21wbGV0ZW5lc3M7CisgICAg ICAgICAqIHVuc2lnbmVkIGludCgyKSByZXNlcnZlZCA9IDA7CisgICAgICAgICAqIHVuc2lnbmVk IGludCg1KSBOQUxfdW5pdF90eXBlOworICAgICAgICAgKi8KKyAgICAgICAgYXZpb193OChwYiwg dnZjYy0+YXJyYXlbaV0uYXJyYXlfY29tcGxldGVuZXNzIDw8IDcgfAorICAgICAgICAgICAgICAg IHZ2Y2MtPmFycmF5W2ldLk5BTF91bml0X3R5cGUgJiAweDFmKTsKKyAgICAgICAgLyogdW5zaWdu ZWQgaW50KDE2KSBudW1fbmFsdXM7ICovCisgICAgICAgIGlmICh2dmNjLT5hcnJheVtpXS5OQUxf dW5pdF90eXBlICE9IFZWQ19EQ0lfTlVUICYmCisgICAgICAgICAgICB2dmNjLT5hcnJheVtpXS5O QUxfdW5pdF90eXBlICE9IFZWQ19PUElfTlVUKQorICAgICAgICAgICAgYXZpb193YjE2KHBiLCB2 dmNjLT5hcnJheVtpXS5udW1fbmFsdXMpOworICAgICAgICBmb3IgKGogPSAwOyBqIDwgdnZjYy0+ YXJyYXlbaV0ubnVtX25hbHVzOyBqKyspIHsKKyAgICAgICAgICAgIC8qIHVuc2lnbmVkIGludCgx NikgbmFsX3VuaXRfbGVuZ3RoOyAqLworICAgICAgICAgICAgYXZpb193YjE2KHBiLCB2dmNjLT5h cnJheVtpXS5uYWxfdW5pdF9sZW5ndGhbal0pOworCisgICAgICAgICAgICAvKiBiaXQoOCpuYWxf dW5pdF9sZW5ndGgpIG5hbF91bml0OyAqLworICAgICAgICAgICAgYXZpb193cml0ZShwYiwgdnZj Yy0+YXJyYXlbaV0ubmFsX3VuaXRbal0sCisgICAgICAgICAgICAgICAgICAgICAgIHZ2Y2MtPmFy cmF5W2ldLm5hbF91bml0X2xlbmd0aFtqXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1 cm4gMDsKK30KKworaW50IGZmX3Z2Y19hbm5leGIybXA0KEFWSU9Db250ZXh0ICpwYiwgY29uc3Qg dWludDhfdCAqYnVmX2luLAorICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplLCBpbnQgZmls dGVyX3BzLCBpbnQgKnBzX2NvdW50KQoreworICAgIGludCBudW1fcHMgPSAwLCByZXQgPSAwOwor ICAgIHVpbnQ4X3QgKmJ1ZiwgKmVuZCwgKnN0YXJ0ID0gTlVMTDsKKworICAgIGlmICghZmlsdGVy X3BzKSB7CisgICAgICAgIHJldCA9IGZmX2F2Y19wYXJzZV9uYWxfdW5pdHMocGIsIGJ1Zl9pbiwg c2l6ZSk7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIHJldCA9IGZmX2F2Y19wYXJz ZV9uYWxfdW5pdHNfYnVmKGJ1Zl9pbiwgJnN0YXJ0LCAmc2l6ZSk7CisgICAgaWYgKHJldCA8IDAp CisgICAgICAgIGdvdG8gZW5kOworCisgICAgcmV0ID0gMDsKKyAgICBidWYgPSBzdGFydDsKKyAg ICBlbmQgPSBzdGFydCArIHNpemU7CisKKyAgICB3aGlsZSAoZW5kIC0gYnVmID4gNCkgeworICAg ICAgICB1aW50MzJfdCBsZW4gPSBGRk1JTihBVl9SQjMyKGJ1ZiksIGVuZCAtIGJ1ZiAtIDQpOwor ICAgICAgICB1aW50OF90IHR5cGUgPSAoYnVmWzVdID4+IDMpOworCisgICAgICAgIGJ1ZiArPSA0 OworCisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFZWQ19WUFNfTlVUOgor ICAgICAgICBjYXNlIFZWQ19TUFNfTlVUOgorICAgICAgICBjYXNlIFZWQ19QUFNfTlVUOgorICAg ICAgICAgICAgbnVtX3BzKys7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK KyAgICAgICAgICAgIHJldCArPSA0ICsgbGVuOworICAgICAgICAgICAgYXZpb193YjMyKHBiLCBs ZW4pOworICAgICAgICAgICAgYXZpb193cml0ZShwYiwgYnVmLCBsZW4pOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBidWYgKz0gbGVuOworICAgIH0KKworICBlbmQ6 CisgICAgYXZfZnJlZShzdGFydCk7CisgICAgaWYgKHBzX2NvdW50KQorICAgICAgICAqcHNfY291 bnQgPSBudW1fcHM7CisgICAgcmV0dXJuIHJldDsKK30KKworaW50IGZmX3Z2Y19hbm5leGIybXA0 X2J1Zihjb25zdCB1aW50OF90ICpidWZfaW4sIHVpbnQ4X3QgKipidWZfb3V0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgKnNpemUsIGludCBmaWx0ZXJfcHMsIGludCAqcHNfY291bnQp Cit7CisgICAgQVZJT0NvbnRleHQgKnBiOworICAgIGludCByZXQ7CisKKyAgICByZXQgPSBhdmlv X29wZW5fZHluX2J1ZigmcGIpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0 OworCisgICAgcmV0ID0gZmZfdnZjX2FubmV4YjJtcDQocGIsIGJ1Zl9pbiwgKnNpemUsIGZpbHRl cl9wcywgcHNfY291bnQpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGZmaW9fZnJlZV9k eW5fYnVmKCZwYik7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgKnNpemUgPSBh dmlvX2Nsb3NlX2R5bl9idWYocGIsIGJ1Zl9vdXQpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2lu dCBmZl9pc29tX3dyaXRlX3Z2Y2MoQVZJT0NvbnRleHQgKnBiLCBjb25zdCB1aW50OF90ICpkYXRh LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSwgaW50IHBzX2FycmF5X2NvbXBsZXRl bmVzcykKK3sKKyAgICBWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCB2dmNjOworICAgIHVp bnQ4X3QgKmJ1ZiwgKmVuZCwgKnN0YXJ0OworICAgIGludCByZXQ7CisKKyAgICBpZiAoc2l6ZSA8 IDYpIHsKKyAgICAgICAgLyogV2UgY2FuJ3Qgd3JpdGUgYSB2YWxpZCB2dmNjIGZyb20gdGhlIHBy b3ZpZGVkIGRhdGEgKi8KKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAg fSBlbHNlIGlmICgoKmRhdGEgJiAweGY4KSA9PSAweGY4KSB7CisgICAgICAgIC8qIERhdGEgaXMg YWxyZWFkeSB2dmNjLWZvcm1hdHRlZCAqLworICAgICAgICBhdmlvX3dyaXRlKHBiLCBkYXRhLCBz aXplKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSBlbHNlIGlmICghKEFWX1JCMjQoZGF0YSkg PT0gMSB8fCBBVl9SQjMyKGRhdGEpID09IDEpKSB7CisgICAgICAgIC8qIE5vdCBhIHZhbGlkIEFu bmV4IEIgc3RhcnQgY29kZSBwcmVmaXggKi8KKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7CisgICAgfQorCisgICAgcmV0ID0gZmZfYXZjX3BhcnNlX25hbF91bml0c19idWYoZGF0 YSwgJnN0YXJ0LCAmc2l6ZSk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7 CisKKyAgICB2dmNjX2luaXQoJnZ2Y2MpOworCisgICAgYnVmID0gc3RhcnQ7CisgICAgZW5kID0g c3RhcnQgKyBzaXplOworCisgICAgd2hpbGUgKGVuZCAtIGJ1ZiA+IDQpIHsKKyAgICAgICAgdWlu dDMyX3QgbGVuID0gRkZNSU4oQVZfUkIzMihidWYpLCBlbmQgLSBidWYgLSA0KTsKKyAgICAgICAg dWludDhfdCB0eXBlID0gKGJ1Zls1XSA+PiAzKTsKKworICAgICAgICBidWYgKz0gNDsKKworICAg ICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBWVkNfT1BJX05VVDoKKyAgICAgICAg Y2FzZSBWVkNfVlBTX05VVDoKKyAgICAgICAgY2FzZSBWVkNfU1BTX05VVDoKKyAgICAgICAgY2Fz ZSBWVkNfUFBTX05VVDoKKyAgICAgICAgY2FzZSBWVkNfUFJFRklYX1NFSV9OVVQ6CisgICAgICAg IGNhc2UgVlZDX1NVRkZJWF9TRUlfTlVUOgorICAgICAgICAgICAgcmV0ID0gdnZjY19hZGRfbmFs X3VuaXQoYnVmLCBsZW4sIHBzX2FycmF5X2NvbXBsZXRlbmVzcywgJnZ2Y2MpOworICAgICAgICAg ICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK KyAgICAgICAgYnVmICs9IGxlbjsKKyAgICB9CisKKyAgICByZXQgPSB2dmNjX3dyaXRlKHBiLCAm dnZjYyk7CisKKyAgZW5kOgorICAgIHZ2Y2NfY2xvc2UoJnZ2Y2MpOworICAgIGF2X2ZyZWUoc3Rh cnQpOworICAgIHJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC92dmMuaCBi L2xpYmF2Zm9ybWF0L3Z2Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LjExYzcwMDU0MGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmZvcm1hdC92dmMuaApAQCAtMCww ICsxLDk5IEBACisvKgorICogSC4yNjYgLyBWVkMgaGVscGVyIGZ1bmN0aW9ucyBmb3IgbXV4ZXJz CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl cgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3Nl ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl ZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0 aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKy8qKgorICogQGZpbGUK KyAqIGludGVybmFsIGhlYWRlciBmb3IgSC4yNjYvVlZDIChkZSltdXhlciB1dGlsaXRpZXMKKyAq LworCisjaWZuZGVmIEFWRk9STUFUX1ZWQ19ICisjZGVmaW5lIEFWRk9STUFUX1ZWQ19ICisKKyNp bmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlICJhdmlvLmgiCisKKy8qKgorICogV3JpdGVzIEFu bmV4IEIgZm9ybWF0dGVkIEguMjY2L1ZWQyBOQUwgdW5pdHMgdG8gdGhlIHByb3ZpZGVkIEFWSU9D b250ZXh0LgorICoKKyAqIFRoZSBOQUwgdW5pdHMgYXJlIGNvbnZlcnRlZCB0byBhbiBNUDQtY29t cGF0aWJsZSBmb3JtYXQgKHN0YXJ0IGNvZGUgcHJlZml4ZXMKKyAqIGFyZSByZXBsYWNlZCBieSA0 LWJ5dGUgc2l6ZSBmaWVsZHMsIGFzIHBlciBJU08vSUVDIDE0NDk2LTE1KS4KKyAqCisgKiBJZiBm aWx0ZXJfcHMgaXMgbm9uLXplcm8sIGFueSBWVkMgcGFyYW1ldGVyIHNldHMgZm91bmQgaW4gdGhl IGlucHV0IHdpbGwgYmUKKyAqIGRpc2NhcmRlZCwgYW5kICpwc19jb3VudCB3aWxsIGJlIHNldCB0 byB0aGUgbnVtYmVyIG9mIGRpc2NhcmRlZCBQUyBOQUwgdW5pdHMuCisgKgorICogQHBhcmFtIHBi IGFkZHJlc3Mgb2YgdGhlIEFWSU9Db250ZXh0IHdoZXJlIHRoZSBkYXRhIHNoYWxsIGJlIHdyaXR0 ZW4KKyAqIEBwYXJhbSBidWZfaW4gYWRkcmVzcyBvZiB0aGUgYnVmZmVyIGhvbGRpbmcgdGhlIGlu cHV0IGRhdGEKKyAqIEBwYXJhbSBzaXplIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgaW5wdXQgYnVm ZmVyCisgKiBAcGFyYW0gZmlsdGVyX3BzIHdoZXRoZXIgdG8gd3JpdGUgcGFyYW1ldGVyIHNldCBO QUwgdW5pdHMgdG8gdGhlIG91dHB1dCAoMCkKKyAqICAgICAgICBvciB0byBkaXNjYXJkIHRoZW0g KG5vbi16ZXJvKQorICogQHBhcmFtIHBzX2NvdW50IGFkZHJlc3Mgb2YgdGhlIHZhcmlhYmxlIHdo ZXJlIHRoZSBudW1iZXIgb2YgZGlzY2FyZGVkCisgKiAgICAgICAgcGFyYW1ldGVyIHNldCBOQUwg dW5pdHMgc2hhbGwgYmUgd3JpdHRlbiwgbWF5IGJlIE5VTEwKKyAqIEByZXR1cm4gdGhlIGFtb3Vu dCAoaW4gYnl0ZXMpIG9mIGRhdGEgd3JpdHRlbiBpbiBjYXNlIG9mIHN1Y2Nlc3MsIGEgbmVnYXRp dmUKKyAqICAgICAgICAgdmFsdWUgY29ycmVzcG9uZGluZyB0byBhbiBBVkVSUk9SIGNvZGUgaW4g Y2FzZSBvZiBmYWlsdXJlCisgKi8KK2ludCBmZl92dmNfYW5uZXhiMm1wNChBVklPQ29udGV4dCAq cGIsIGNvbnN0IHVpbnQ4X3QgKmJ1Zl9pbiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6 ZSwgaW50IGZpbHRlcl9wcywgaW50ICpwc19jb3VudCk7CisKKy8qKgorICogV3JpdGVzIEFubmV4 IEIgZm9ybWF0dGVkIEguMjY2L1ZWQyBOQUwgdW5pdHMgdG8gYSBkYXRhIGJ1ZmZlci4KKyAqCisg KiBUaGUgTkFMIHVuaXRzIGFyZSBjb252ZXJ0ZWQgdG8gYW4gTVA0LWNvbXBhdGlibGUgZm9ybWF0 IChzdGFydCBjb2RlIHByZWZpeGVzCisgKiBhcmUgcmVwbGFjZWQgYnkgNC1ieXRlIHNpemUgZmll bGRzLCBhcyBwZXIgSVNPL0lFQyAxNDQ5Ni0xNSkuCisgKgorICogSWYgZmlsdGVyX3BzIGlzIG5v bi16ZXJvLCBhbnkgVlZDIHBhcmFtZXRlciBzZXRzIGZvdW5kIGluIHRoZSBpbnB1dCB3aWxsIGJl CisgKiBkaXNjYXJkZWQsIGFuZCAqcHNfY291bnQgd2lsbCBiZSBzZXQgdG8gdGhlIG51bWJlciBv ZiBkaXNjYXJkZWQgUFMgTkFMIHVuaXRzLgorICoKKyAqIE9uIHN1Y2Nlc3MsICpzaXplIGhvbGRz IHRoZSBzaXplIChpbiBieXRlcykgb2YgdGhlIG91dHB1dCBkYXRhIGJ1ZmZlci4KKyAqCisgKiBA cGFyYW0gYnVmX2luIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciBob2xkaW5nIHRoZSBpbnB1dCBkYXRh CisgKiBAcGFyYW0gc2l6ZSBhZGRyZXNzIG9mIHRoZSB2YXJpYWJsZSBob2xkaW5nIHRoZSBzaXpl IChpbiBieXRlcykgb2YgdGhlIGlucHV0CisgKiAgICAgICAgYnVmZmVyIChvbiBpbnB1dCkgYW5k IG9mIHRoZSBvdXRwdXQgYnVmZmVyIChvbiBzdWNjZXNzKQorICogQHBhcmFtIGJ1Zl9vdXQgb24g c3VjY2VzcywgYWRkcmVzcyBvZiB0aGUgdmFyaWFibGUgaG9sZGluZyB0aGUgYWRkcmVzcyBvZgor ICogICAgICAgIHRoZSBvdXRwdXQgYnVmZmVyCisgKiBAcGFyYW0gZmlsdGVyX3BzIHdoZXRoZXIg dG8gd3JpdGUgcGFyYW1ldGVyIHNldCBOQUwgdW5pdHMgdG8gdGhlIG91dHB1dCAoMCkKKyAqICAg ICAgICBvciB0byBkaXNjYXJkIHRoZW0gKG5vbi16ZXJvKQorICogQHBhcmFtIHBzX2NvdW50IGFk ZHJlc3Mgb2YgdGhlIHZhcmlhYmxlIHdoZXJlIHRoZSBudW1iZXIgb2YgZGlzY2FyZGVkCisgKiAg ICAgICAgcGFyYW1ldGVyIHNldCBOQUwgdW5pdHMgc2hhbGwgYmUgd3JpdHRlbiwgbWF5IGJlIE5V TEwKKyAqIEByZXR1cm4gMCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgdmFsdWUgY29y cmVzcG9uZGluZyB0byBhbiBBVkVSUk9SCisgKiAgICAgICAgIGNvZGUgaW4gY2FzZSBvZiBmYWls dXJlCisgKiBAbm90ZSAqYnVmX291dCB3aWxsIGJlIHRyZWF0ZWQgYXMgdW5pbml0aWFsaXplZCBv biBpbnB1dCBhbmQgd29uJ3QgYmUgZnJlZWQuCisgKi8KK2ludCBmZl92dmNfYW5uZXhiMm1wNF9i dWYoY29uc3QgdWludDhfdCAqYnVmX2luLCB1aW50OF90ICoqYnVmX291dCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50ICpzaXplLCBpbnQgZmlsdGVyX3BzLCBpbnQgKnBzX2NvdW50KTsK KworLyoqCisgKiBXcml0ZXMgSC4yNjYvVlZDIGV4dHJhZGF0YSAocGFyYW1ldGVyIHNldHMsIGRl Y2xhcmF0aXZlIFNFSSBOQUwgdW5pdHMpIHRvCisgKiB0aGUgcHJvdmlkZWQgQVZJT0NvbnRleHQu CisgKgorICogSWYgdGhlIGV4dHJhZGF0YSBpcyBBbm5leCBCIGZvcm1hdCwgaXQgZ2V0cyBjb252 ZXJ0ZWQgdG8gdnZjQyBmb3JtYXQgYmVmb3JlCisgKiB3cml0aW5nLgorICoKKyAqIEBwYXJhbSBw YiBhZGRyZXNzIG9mIHRoZSBBVklPQ29udGV4dCB3aGVyZSB0aGUgdnZjQyBzaGFsbCBiZSB3cml0 dGVuCisgKiBAcGFyYW0gZGF0YSBhZGRyZXNzIG9mIHRoZSBidWZmZXIgaG9sZGluZyB0aGUgZGF0 YSBuZWVkZWQgdG8gd3JpdGUgdGhlIHZ2Y0MKKyAqIEBwYXJhbSBzaXplIHNpemUgKGluIGJ5dGVz KSBvZiB0aGUgZGF0YSBidWZmZXIKKyAqIEBwYXJhbSBwc19hcnJheV9jb21wbGV0ZW5lc3Mgd2hl dGhlciBhbGwgcGFyYW1ldGVyIHNldHMgYXJlIGluIHRoZSB2dmNDICgxKQorICogICAgICAgIG9y IHRoZXJlIG1heSBiZSBhZGRpdGlvbmFsIHBhcmFtZXRlciBzZXRzIGluIHRoZSBiaXRzdHJlYW0g KDApCisgKiBAcmV0dXJuID49MCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgdmFsdWUg Y29ycmVzcG9uZGluZyB0byBhbiBBVkVSUk9SCisgKiAgICAgICAgIGNvZGUgaW4gY2FzZSBvZiBm YWlsdXJlCisgKi8KK2ludCBmZl9pc29tX3dyaXRlX3Z2Y2MoQVZJT0NvbnRleHQgKnBiLCBjb25z dCB1aW50OF90ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSwgaW50IHBz X2FycmF5X2NvbXBsZXRlbmVzcyk7CisKKyNlbmRpZiAvKiBBVkZPUk1BVF9WVkNfSCAqLwotLSAK Mi4yNS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpm Zm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8v ZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUs IHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5v cmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==