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 E48DA48F5C for ; Tue, 30 Jan 2024 12:51:05 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3EE4068D350; Tue, 30 Jan 2024 14:51:01 +0200 (EET) Received: from APC01-TYZ-obe.outbound.protection.outlook.com (mail-tyzapc01olkn2061.outbound.protection.outlook.com [40.92.107.61]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4A6B168D346 for ; Tue, 30 Jan 2024 14:50:53 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oXu25N01+akYIeO78HD/I8kpidyqrD2bsio0YfNe82mJ0N4gAw0OCatvSeaF0jldKGYcdqZDKwgDBuokBHNsU3Bbir96wBWo/JrijZ+li+Kg5WW1ICi3qcDaS2airHTnFNoapJUUKTHRvSmKDzXCQeoc+8BbyF/b8idFqAqHzXxJNwJdL4Z2uO1+OZf4O+aAxuk8pIbrOAKlLEcA7tS4EoN4RJmB6f5nEMOi1JGp4a8zF7WBC5HzRAnUFV7jOGZuCNiRiUP8QubX9/T4CWhphUKAS0u6nlavreLJw4F2olLhLCM1SYddYMpj1JKrxE0qgWRZCVUyECSOfWVxXo+dzg== 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=eUy7p2aRxoT45pgfoP5JM45kFGXNEc/L+LnQWVLs+fw=; b=mZ2AXxHKlaIIKzjthFmg6Ui5pk4GG4vpMMUnENYBRw0wmU4vzMg1QBKVq2CRnM5AKcsOoATTjpR8ZdyZer+YUqpYKuKL/6s0JZrFEc5Hd7hFAukgElczleBSQtmbO3Sr5rzngsfhiT0shmjFw0+hYpbXI4T3jnCHSgXxAXFBiXMPS4ORsF7ImLeEcMB2nYDhBLib60RhC7lHSfxD+wI23zcIHmd6ZIQ9OX8aBiweTkiRLzvlqBTJw1QNLTRBxcN1ix9IrtzddQsZ1Uw74r5snDKkaExmojsWFOpeCP8M4VN+PV4SHCpTFrk0Juram5SqUD6x6zGQkKEQ2V6vPRfZ3Q== 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=eUy7p2aRxoT45pgfoP5JM45kFGXNEc/L+LnQWVLs+fw=; b=cpqP8rpiDlWM2oRusJRfzvtbnjJrR6kYZkqfO8CBBmMT5hvGGmpU4hYD6/8i5S62Gns3QuYQ8VJjjqslNrQNcG4+yhAHa7aDfaPQtflAadu7ygDmPhvxftfYjVfDv5ot9/bjTLrXtXBvmYwektNhOoc2iUgcLIoC7Hwui8mNECwH3a5hYncMQYQtm6Xm8y9w8Wkj5l8Tmp56Be1rus9RtFB4Jilabpmw3yAkOTLN4rtOic8POhXRZIpd55nSxb9/y4a1j9bcveC7bSnYk7MWtd1KO0T+ZmKb5l9YcWWzkzbneh7pcdCOzmZjSXZQIddBrQL84BnEFhKY6HG276W1kA== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by TYZPR06MB7274.apcprd06.prod.outlook.com (2603:1096:405:ab::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7228.32; Tue, 30 Jan 2024 12:50: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%7]) with mapi id 15.20.7228.029; Tue, 30 Jan 2024 12:50:45 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Tue, 30 Jan 2024 20:48:58 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240130124903.16892-1-nuomi2021@gmail.com> References: <20240130124903.16892-1-nuomi2021@gmail.com> X-TMN: [+jRihCQbnTylagGzqPPHpYNJA0lDwY9P] X-ClientProxiedBy: SI2PR02CA0035.apcprd02.prod.outlook.com (2603:1096:4:195::22) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20240130124903.16892-2-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|TYZPR06MB7274:EE_ X-MS-Office365-Filtering-Correlation-Id: 88f3a105-59c8-42bc-5106-08dc219212fa X-MS-Exchange-SLBlob-MailProps: WaIXnCbdHrMX0ub4IzufZP48szTFHkH0Rp78Htu2j4bzlb60ArULl7mN+kY+ftl5FhtjFEJ+o3qUkNj91kFeKEdloPa+7vtnxHssAD1Vxtd6WDOXO3mqRmGSowKo0h0MZONYDgBWrZlluHSl/DE82mB6Xc61wxO6UcVjPVpCpYiW6zWOjHL5XOVdrhJgABxtmgMMxKxfuOQnys9W+80KAs4Y6nySqy1QRUqKZpmtRwARLJsj9e+WzlwiQVh0MSWVhGnrzXFJa2Y1+zXsP9OLK4+FUdxKgR25sycT6TXZV1Ds16w7tIY1AVnQ/mUafeS7IVlpAk+Z3/YL46xeXkjUfXMkHbxc9mNwhflZ/sijQSuLAdiAie27SaEHi5YDx+VM2m1MbHVLuhuiN9GBxJpnQyi7tRV6q2rx7Crq7S6zxWNHVssb/tLqMWNusItW8FrX1LOJNc+Eq3hd74q7gnwxKhfFRe8y6vY2JEWTI5kcHOfd2al98Z0wnzwO0+93yvfOSC74rksmNOUkOih3OP21tikqnqfcWFxUb0q/JRjUs4t1FrHunCIHAzA1rTL1sJ95L6LKT8Re2jLtuvR1asV7OK0TA6M/NxChWcSQebmLBsFdLizh4PaU/TWvpp8wv/7V94iST8e6IC0e4qCRDkqmsToZ0Ja+i2hwo5TxdYf5ZsqB3LYh3eWB6aa/agnm9jMj3rE1M2VPsJ//K8xfxI3ul1/WIVDkXz7xgZpQGov8vQNVxEoQPD0iPLurf01Rp3jQ64MKNBmqbFk= X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +MpI8Rj1EA4Vhye4cMy9zZER3i2IRI+A3onkl9kvKqIKCz/+ueCy6tR4GIo5+JVcXnnhXfWmkaI+2QVM/wUbn8VKO0bAsqE29MdhxTZdRKAI4dwKE05xuyHbATQP1zZJAyiGN7nrFscsEFED0WleocmfMVjUgiBxK6e9okv6RiXxHnQHwvhcdskG+InaHnBsjXMgb2Kwan92+8A+410wIMqQER68nfrF33w/kLs1/NY99plCanUEFvmsUSSUiwTVgmNM2lyZYJu7wgptQ9lTtyIzqvUEhEy8eMbW6mjaY51NOhDAP7Dej3GEKYP8b1K3ApNONwSSLgIDBACNeQ0r+YHLL/X2gJyBHxgL0yWpvToAePlZJM0WCavtfWdxA/IPnivY0ZWt7D2HZccmmtVpYhisM41RjsEhZ0zj1VF/NRVxIl8itVXfBRDWhuOlg7V8gl2dB0nmZq5amd86wAvOvmAXl+qZrEEQGpXHkYXyk2QJjxV16Zpbi/oMFOME7FnhZIn/ww9PUeycdAgb6C1EmsOEnQmsxQhb9fjGSjfHnt1cTuqWMyCSsThRHa1PRjnogSL2rIXZ2DnrsvJeMZXN1LCMfPylhl3t80GtJxfHBI2n5ZdYYuHYJJ4XULeZWwDh X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?a09hSEkzay93VnRuSUQvVUU5S1IwMU11eFZONENOOEp1LzJNKytBUk9kdkpW?= =?utf-8?B?TlphZjR6N3ZuUlQzY2ZjNCtBS2N2K3J1TU85KzUrSGpMMWRmRjJCQUxmNjg5?= =?utf-8?B?SXd4ZWFqbDRRODFnSDNXYTNVeUdjQ0FQMGc4NTNXSk96c3FmQ3drc0R4VEtl?= =?utf-8?B?eXdDY1hiNlBuUmVQN2IyRHE0VEtjbFh2elNIV0JIUEV4dVRERTU4OUNaM2hO?= =?utf-8?B?RHhZZXJrMG1XdGdVMHNnWjZpMzRwMldpNyszMUo4dmZIbGZDWWVLSUlLZjFw?= =?utf-8?B?Q1R5K2Z2djEzbnpqa2srekRnbWNWT01zVDBNNWJPN1U1aTNrNnNzc3pKNHN4?= =?utf-8?B?QUNmMS9pekRoRUpxdlE1UWxZQWVWdXJpVFhveG1MajAra09vRW90emdtaDV1?= =?utf-8?B?TFRZaUZSZ296dUxtZXRJNjNJL3Z1UXJFVHJRMk5WNlZZMUE1QVZTcDRycEpM?= =?utf-8?B?RjUzc1N3RkpKc2hCNFRVaEVSM0ZjMTh3THkxZi9VVWpFY3llOVVUajRDdTdj?= =?utf-8?B?UFdhdEs2UXY4bG8rNW5ueHJYMjl5c2I1QVdONUhlNVZmZVNDMXhtcGxBRjBZ?= =?utf-8?B?a3hmRktKa3dOcGluNllsQWFvSWlINDh2cUppZHJyMUxZcGRzdFU3VzIyZGJ1?= =?utf-8?B?N2JUS1Y3K2lMWUROa3o5OGxicjZrRjBpZ2g3T0NqeDk5b1czQkFTUjBWc053?= =?utf-8?B?K3Zja2h1bUFMcTF5UkNnVlN2cm5oeEtua1Y3YUxuWFlpNXZTTExMV3hNSG1z?= =?utf-8?B?K01jM0RiOHFMNXhsTUFEc25xMTQzb3paTWVxZUJzU3k4QWlocFEzdGxZOHNn?= =?utf-8?B?SGFHY0ZjVFNKWkNWb2RURzJ6Tk52QWVLaFZtL3cxb29qNThqb3dYUlBYeWkw?= =?utf-8?B?a1lON29hSXNEUXVUQ2xPY2Y1ME42Z1ArbkRsamJlODNITnJRL3FIS1dQYmZZ?= =?utf-8?B?WXpmaUQ0Y0tpN3lCbTJnMWtNY1RZWCtxUEFSYkptaThabVFmNCtIY3VsSFJR?= =?utf-8?B?QmV5bm9wZUcwTlVPK3grN01aTExaczNPU1R3OXBtcDNMbmFPeWhsRFl4RXha?= =?utf-8?B?QTYrMUl6akJ3eTNFNWpEaDZKMHlCSWpzZ3QyY1Nub0pXV3VDZlpiZVVpcDNO?= =?utf-8?B?bTNHZDhyM0tSNXZVUndYckc1czdBSHV3UmpVTEFJci9tNW5aK1k2WjVYR2p1?= =?utf-8?B?QlBiVjNlaFRUUzJKcXpiaFJTZnM2OGp4OHNRaFg4K3VHTVIwY2I2N2MyZFpF?= =?utf-8?B?Yk85eU5Zb2gvVUs1SVZRbzFXL3hsQXQ2RVMzWHE2N3ZHWlJIS2x6SGZzeFM0?= =?utf-8?B?MXRqZDFZRHRSSDB6R3ZCKzhJRkJCallZTHh1ZkRjRHlUeFFsYnJIVmtDNGNh?= =?utf-8?B?WkpUc2lCY2xYL3k4Z0NQUk9yVXJlYUJNK3J6bVpRZEExQkpSVStXY2VWZURo?= =?utf-8?B?a0k3SGZVVXh2L3M1aC8rUWFJY3Y1dzVEemxMY3pETlEwU3E5SE5jam01WGlG?= =?utf-8?B?eEczd0JDSlRodFh3OTFsUUFNWCtVLytPWW90OE5sY3lHU1JwZnRoeEpQa24w?= =?utf-8?B?dlM5Wm1SL2lmZ2FkcmxDYnVDVDJ1bHR2L2JmMWV5SnNJWGlHRkhKTGRZRG5J?= =?utf-8?B?aGZnTS9wRVRFSTlMcmpKTlRmK2lCeWRrY25mK1E4RWJoRzZ2SHhXVGZDdGRC?= =?utf-8?Q?lfvMcq8njDSLcrClNWjm?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 88f3a105-59c8-42bc-5106-08dc219212fa X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jan 2024 12:50:45.0141 (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: TYZPR06MB7274 Subject: [FFmpeg-devel] [PATCH v5 1/6] avformat/mp4: 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 ICAgIHwgIDQwICstCiBsaWJhdmZvcm1hdC92dmMuYyAgICAgICB8IDk3MSArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaWJhdmZvcm1hdC92dmMuaCAgICAgICB8ICA5 OSArKysrCiA3IGZpbGVzIGNoYW5nZWQsIDExMjIgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMo 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 L2xpYmF2Zm9ybWF0L2lzb21fdGFncy5jCmluZGV4IGE1NzViN2MxNjAuLjA1OGYwZjJhNTkgMTAw NjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L2lzb21fdGFncy5jCisrKyBiL2xpYmF2Zm9ybWF0L2lzb21f dGFncy5jCkBAIC0xMTgsNiArMTE4LDkgQEAgY29uc3QgQVZDb2RlY1RhZyBmZl9jb2RlY19tb3Z2 aWRlb190YWdzW10gPSB7CiAKICAgICB7IEFWX0NPREVDX0lEX1JBV1ZJREVPLCBNS1RBRygnVycs ICdSJywgJ0EnLCAnVycpIH0sCiAKKyAgICB7IEFWX0NPREVDX0lEX1ZWQywgIE1LVEFHKCd2Jywg J3YnLCAnYycsICcxJykgfSwKKyAgICB7IEFWX0NPREVDX0lEX1ZWQywgIE1LVEFHKCd2JywgJ3Yn LCAnaScsICcxJykgfSwKKwogICAgIHsgQVZfQ09ERUNfSURfSEVWQywgTUtUQUcoJ2gnLCAnZScs ICd2JywgJzEnKSB9LCAvKiBIRVZDL0guMjY1IHdoaWNoIGluZGljYXRlcyBwYXJhbWV0ZXIgc2V0 cyBtYXkgYmUgaW4gRVMgKi8KICAgICB7IEFWX0NPREVDX0lEX0hFVkMsIE1LVEFHKCdoJywgJ3Yn LCAnYycsICcxJykgfSwgLyogSEVWQy9ILjI2NSB3aGljaCBpbmRpY2F0ZXMgcGFyYW1ldGVyIHNl dHMgc2hhbGwgbm90IGJlIGluIEVTICovCiAgICAgeyBBVl9DT0RFQ19JRF9IRVZDLCBNS1RBRygn ZCcsICd2JywgJ2gnLCAnZScpIH0sIC8qIEhFVkMtYmFzZWQgRG9sYnkgVmlzaW9uIGRlcml2ZWQg ZnJvbSBoZXYxICovCmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9tb3YuYyBiL2xpYmF2Zm9ybWF0 L21vdi5jCmluZGV4IDRjZmZkNmM3ZGIuLmNmOTMxZDQ1OTQgMTAwNjQ0Ci0tLSBhL2xpYmF2Zm9y bWF0L21vdi5jCisrKyBiL2xpYmF2Zm9ybWF0L21vdi5jCkBAIC0yMTIzLDYgKzIxMjMsMTEgQEAg c3RhdGljIGludCBtb3ZfcmVhZF9nbGJsKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwg TU9WQXRvbSBhdG9tKQogICAgIGlmICgodWludDY0X3QpYXRvbS5zaXplID4gKDE8PDMwKSkKICAg ICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CiAKKyAgICBpZiAoYXRvbS50eXBlID09 IE1LVEFHKCd2JywndicsJ2MnLCdDJykpIHsKKyAgICAgICAgYXZpb19za2lwKHBiLCA0KTsKKyAg ICAgICAgYXRvbS5zaXplIC09IDQ7CisgICAgfQorCiAgICAgaWYgKGF0b20uc2l6ZSA+PSAxMCkg ewogICAgICAgICAvLyBCcm9rZW4gZmlsZXMgY3JlYXRlZCBieSBsZWdhY3kgdmVyc2lvbnMgb2Yg bGliYXZmb3JtYXQgd2lsbAogICAgICAgICAvLyB3cmFwIGEgd2hvbGUgZmllbCBhdG9tIGluc2lk ZSBvZiBhIGdsYmwgYXRvbS4KQEAgLTgxMjksNiArODEzNCw3IEBAIHN0YXRpYyBjb25zdCBNT1ZQ YXJzZVRhYmxlRW50cnkgbW92X2RlZmF1bHRfcGFyc2VfdGFibGVbXSA9IHsKIHsgTUtUQUcoJ3Mn LCdnJywncCcsJ2QnKSwgbW92X3JlYWRfc2dwZCB9LAogeyBNS1RBRygncycsJ2InLCdnJywncCcp LCBtb3ZfcmVhZF9zYmdwIH0sCiB7IE1LVEFHKCdoJywndicsJ2MnLCdDJyksIG1vdl9yZWFkX2ds YmwgfSwKK3sgTUtUQUcoJ3YnLCd2JywnYycsJ0MnKSwgbW92X3JlYWRfZ2xibCB9LAogeyBNS1RB RygndScsJ3UnLCdpJywnZCcpLCBtb3ZfcmVhZF91dWlkIH0sCiB7IE1LVEFHKCdDJywnaScsJ24n LCAweDhlKSwgbW92X3JlYWRfdGFyZ2FfeTIxNiB9LAogeyBNS1RBRygnZicsJ3InLCdlJywnZScp LCBtb3ZfcmVhZF9mcmVlIH0sCmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9tb3ZlbmMuYyBiL2xp YmF2Zm9ybWF0L21vdmVuYy5jCmluZGV4IDhhMjdhZmJjNTcuLmI3MjRiZDVlYmMgMTAwNjQ0Ci0t LSBhL2xpYmF2Zm9ybWF0L21vdmVuYy5jCisrKyBiL2xpYmF2Zm9ybWF0L21vdmVuYy5jCkBAIC02 OCw2ICs2OCw3IEBACiAjaW5jbHVkZSAidHRtbGVuYy5oIgogI2luY2x1ZGUgInZlcnNpb24uaCIK ICNpbmNsdWRlICJ2cGNjLmgiCisjaW5jbHVkZSAidnZjLmgiCiAKIHN0YXRpYyBjb25zdCBBVk9w dGlvbiBvcHRpb25zW10gPSB7CiAgICAgeyAiYnJhbmQiLCAgICAiT3ZlcnJpZGUgbWFqb3IgYnJh bmQiLCBvZmZzZXRvZihNT1ZNdXhDb250ZXh0LCBtYWpvcl9icmFuZCksICAgQVZfT1BUX1RZUEVf U1RSSU5HLCB7LnN0ciA9IE5VTEx9LCAuZmxhZ3MgPSBBVl9PUFRfRkxBR19FTkNPRElOR19QQVJB TSB9LApAQCAtMTQ3Myw2ICsxNDc0LDIzIEBAIHN0YXRpYyBpbnQgbW92X3dyaXRlX2V2Y2NfdGFn KEFWSU9Db250ZXh0ICpwYiwgTU9WVHJhY2sgKnRyYWNrKQogICAgIHJldHVybiB1cGRhdGVfc2l6 ZShwYiwgcG9zKTsKIH0KIAorc3RhdGljIGludCBtb3Zfd3JpdGVfdnZjY190YWcoQVZJT0NvbnRl eHQgKnBiLCBNT1ZUcmFjayAqdHJhY2spCit7CisgICAgaW50NjRfdCBwb3MgPSBhdmlvX3RlbGwo cGIpOworCisgICAgYXZpb193YjMyKHBiLCAwKTsKKyAgICBmZmlvX3dmb3VyY2MocGIsICJ2dmND Iik7CisKKyAgICBhdmlvX3c4ICAocGIsIDApOyAvKiB2ZXJzaW9uICovCisgICAgYXZpb193YjI0 KHBiLCAwKTsgLyogZmxhZ3MgKi8KKworICAgIGlmICh0cmFjay0+dGFnID09IE1LVEFHKCd2Jywn dicsJ2MnLCcxJykpCisgICAgICAgIGZmX2lzb21fd3JpdGVfdnZjYyhwYiwgdHJhY2stPnZvc19k YXRhLCB0cmFjay0+dm9zX2xlbiwgMSk7CisgICAgZWxzZQorICAgICAgICBmZl9pc29tX3dyaXRl X3Z2Y2MocGIsIHRyYWNrLT52b3NfZGF0YSwgdHJhY2stPnZvc19sZW4sIDApOworICAgIHJldHVy biB1cGRhdGVfc2l6ZShwYiwgcG9zKTsKK30KKwogLyogYWxzbyB1c2VkIGJ5IGFsbCBhdmlkIGNv ZGVjcyAoZHYsIGlteCwgbWVyaWRpZW4pIGFuZCB0aGVpciB2YXJpYW50cyAqLwogc3RhdGljIGlu dCBtb3Zfd3JpdGVfYXZpZF90YWcoQVZJT0NvbnRleHQgKnBiLCBNT1ZUcmFjayAqdHJhY2spCiB7 CkBAIC0yMzgyLDYgKzI0MDAsOCBAQCBzdGF0aWMgaW50IG1vdl93cml0ZV92aWRlb190YWcoQVZG b3JtYXRDb250ZXh0ICpzLCBBVklPQ29udGV4dCAqcGIsIE1PVk11eENvbnRleAogICAgICAgICBh dmlkID0gMTsKICAgICB9IGVsc2UgaWYgKHRyYWNrLT5wYXItPmNvZGVjX2lkID09IEFWX0NPREVD X0lEX0hFVkMpCiAgICAgICAgIG1vdl93cml0ZV9odmNjX3RhZyhwYiwgdHJhY2spOworICAgIGVs c2UgaWYgKHRyYWNrLT5wYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX1ZWQykKKyAgICAgICAg bW92X3dyaXRlX3Z2Y2NfdGFnKHBiLCB0cmFjayk7CiAgICAgZWxzZSBpZiAodHJhY2stPnBhci0+ Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSDI2NCAmJiAhVEFHX0lTX0FWQ0kodHJhY2stPnRhZykp IHsKICAgICAgICAgbW92X3dyaXRlX2F2Y2NfdGFnKHBiLCB0cmFjayk7CiAgICAgICAgIGlmICh0 cmFjay0+bW9kZSA9PSBNT0RFX0lQT0QpCkBAIC02MTcwLDYgKzYxOTAsNyBAQCBpbnQgZmZfbW92 X3dyaXRlX3BhY2tldChBVkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QpCiAgICAgaWYg KChwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0ROWEhEIHx8CiAgICAgICAgICBwYXItPmNv ZGVjX2lkID09IEFWX0NPREVDX0lEX0gyNjQgfHwKICAgICAgICAgIHBhci0+Y29kZWNfaWQgPT0g QVZfQ09ERUNfSURfSEVWQyB8fAorICAgICAgICAgcGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19J RF9WVkMgfHwKICAgICAgICAgIHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfVlA5IHx8CiAg ICAgICAgICBwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0VWQyB8fAogICAgICAgICAgcGFy LT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9UUlVFSEQpICYmICF0cmstPnZvc19sZW4gJiYKQEAg LTYyMzUsNiArNjI1NiwxOCBAQCBpbnQgZmZfbW92X3dyaXRlX3BhY2tldChBVkZvcm1hdENvbnRl eHQgKnMsIEFWUGFja2V0ICpwa3QpCiAgICAgICAgICAgICAgICAgc2l6ZSA9IGZmX2hldmNfYW5u ZXhiMm1wNChwYiwgcGt0LT5kYXRhLCBwa3QtPnNpemUsIDAsIE5VTEwpOwogICAgICAgICAgICAg fQogICAgICAgICB9CisgICAgfSBlbHNlIGlmIChwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lE X1ZWQyAmJiB0cmstPnZvc19sZW4gPiA2ICYmCisgICAgICAgICAgICAgKEFWX1JCMjQodHJrLT52 b3NfZGF0YSkgPT0gMSB8fCBBVl9SQjMyKHRyay0+dm9zX2RhdGEpID09IDEpKSB7CisgICAgICAg IC8qIGV4dHJhZGF0YSBpcyBBbm5leCBCLCBhc3N1bWUgdGhlIGJpdHN0cmVhbSBpcyB0b28gYW5k IGNvbnZlcnQgaXQgKi8KKyAgICAgICAgaWYgKHRyay0+aGludF90cmFjayA+PSAwICYmIHRyay0+ aGludF90cmFjayA8IG1vdi0+bmJfdHJhY2tzKSB7CisgICAgICAgICAgICByZXQgPSBmZl92dmNf YW5uZXhiMm1wNF9idWYocGt0LT5kYXRhLCAmcmVmb3JtYXR0ZWRfZGF0YSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2l6ZSwgMCwgTlVMTCk7CisgICAgICAgICAg ICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAg YXZpb193cml0ZShwYiwgcmVmb3JtYXR0ZWRfZGF0YSwgc2l6ZSk7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICBzaXplID0gZmZfdnZjX2FubmV4YjJtcDQocGIsIHBrdC0+ZGF0YSwgcGt0 LT5zaXplLCAwLCBOVUxMKTsKKyAgICAgICAgfQogICAgIH0gZWxzZSBpZiAocGFyLT5jb2RlY19p ZCA9PSBBVl9DT0RFQ19JRF9BVjEpIHsKICAgICAgICAgaWYgKHRyay0+aGludF90cmFjayA+PSAw ICYmIHRyay0+aGludF90cmFjayA8IG1vdi0+bmJfdHJhY2tzKSB7CiAgICAgICAgICAgICByZXQg PSBmZl9hdjFfZmlsdGVyX29idXNfYnVmKHBrdC0+ZGF0YSwgJnJlZm9ybWF0dGVkX2RhdGEsCkBA IC02MjgxLDYgKzYzMTQsOCBAQCBpbnQgZmZfbW92X3dyaXRlX3BhY2tldChBVkZvcm1hdENvbnRl eHQgKnMsIEFWUGFja2V0ICpwa3QpCiAgICAgICAgICAgICB9IGVsc2UgaWYocGFyLT5jb2RlY19p ZCA9PSBBVl9DT0RFQ19JRF9IRVZDICYmIHBhci0+ZXh0cmFkYXRhX3NpemUgPiAyMSkgewogICAg ICAgICAgICAgICAgIGludCBuYWxfc2l6ZV9sZW5ndGggPSAocGFyLT5leHRyYWRhdGFbMjFdICYg MHgzKSArIDE7CiAgICAgICAgICAgICAgICAgcmV0ID0gZmZfbW92X2NlbmNfYXZjX3dyaXRlX25h bF91bml0cyhzLCAmdHJrLT5jZW5jLCBuYWxfc2l6ZV9sZW5ndGgsIHBiLCBwa3QtPmRhdGEsIHNp emUpOworICAgICAgICAgICAgfSBlbHNlIGlmKHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURf VlZDKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUl9QQVRDSFdFTENPTUU7CiAgICAg ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHJldCA9IGZmX21vdl9jZW5jX3dyaXRl X3BhY2tldCgmdHJrLT5jZW5jLCBwYiwgcGt0LT5kYXRhLCBzaXplKTsKICAgICAgICAgICAgIH0K QEAgLTczNjMsNyArNzM5OCw4IEBAIHN0YXRpYyBpbnQgbW92X2luaXQoQVZGb3JtYXRDb250ZXh0 ICpzKQogCiAgICAgICAgIGlmIChtb3YtPmVuY3J5cHRpb25fc2NoZW1lID09IE1PVl9FTkNfQ0VO Q19BRVNfQ1RSKSB7CiAgICAgICAgICAgICByZXQgPSBmZl9tb3ZfY2VuY19pbml0KCZ0cmFjay0+ Y2VuYywgbW92LT5lbmNyeXB0aW9uX2tleSwKLSAgICAgICAgICAgICAgICAodHJhY2stPnBhci0+ Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSDI2NCB8fCB0cmFjay0+cGFyLT5jb2RlY19pZCA9PSBB Vl9DT0RFQ19JRF9IRVZDKSwKKyAgICAgICAgICAgICAgICAodHJhY2stPnBhci0+Y29kZWNfaWQg PT0gQVZfQ09ERUNfSURfSDI2NCB8fCB0cmFjay0+cGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19J RF9IRVZDIHx8CisgICAgICAgICAgICAgICAgIHRyYWNrLT5wYXItPmNvZGVjX2lkID09IEFWX0NP REVDX0lEX1ZWQyksCiAgICAgICAgICAgICAgICAgcy0+ZmxhZ3MgJiBBVkZNVF9GTEFHX0JJVEVY QUNUKTsKICAgICAgICAgICAgIGlmIChyZXQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsK QEAgLTc4MzIsNiArNzg2OCw4IEBAIHN0YXRpYyBjb25zdCBBVkNvZGVjVGFnIGNvZGVjX21wNF90 YWdzW10gPSB7CiAgICAgeyBBVl9DT0RFQ19JRF9IRVZDLCAgICAgICAgICAgIE1LVEFHKCdoJywg J2UnLCAndicsICcxJykgfSwKICAgICB7IEFWX0NPREVDX0lEX0hFVkMsICAgICAgICAgICAgTUtU QUcoJ2gnLCAndicsICdjJywgJzEnKSB9LAogICAgIHsgQVZfQ09ERUNfSURfSEVWQywgICAgICAg ICAgICBNS1RBRygnZCcsICd2JywgJ2gnLCAnMScpIH0sCisgICAgeyBBVl9DT0RFQ19JRF9WVkMs ICAgICAgICAgICAgIE1LVEFHKCd2JywgJ3YnLCAnYycsICcxJykgfSwKKyAgICB7IEFWX0NPREVD X0lEX1ZWQywgICAgICAgICAgICAgTUtUQUcoJ3YnLCAndicsICdpJywgJzEnKSB9LAogICAgIHsg QVZfQ09ERUNfSURfRVZDLCAgICAgICAgICAgICBNS1RBRygnZScsICd2JywgJ2MnLCAnMScpIH0s CiAgICAgeyBBVl9DT0RFQ19JRF9NUEVHMlZJREVPLCAgICAgIE1LVEFHKCdtJywgJ3AnLCAnNCcs ICd2JykgfSwKICAgICB7IEFWX0NPREVDX0lEX01QRUcxVklERU8sICAgICAgTUtUQUcoJ20nLCAn cCcsICc0JywgJ3YnKSB9LApkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvdnZjLmMgYi9saWJhdmZv cm1hdC92dmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4xNGE0YzBh MmYzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZmb3JtYXQvdnZjLmMKQEAgLTAsMCArMSw5NzEg QEAKKy8qCisgKiBILjI2Ni9WVkMgaGVscGVyIGZ1bmN0aW9ucyBmb3IgbXV4ZXJzCisgKgorICog Q29weXJpZ2h0IChDKSAyMDIyLCBUaG9tYXMgU2llZGVsCisgKgorICogVGhpcyBmaWxlIGlzIHBh cnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhl IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog RkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRo IEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlv biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjEx MC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2dldF9iaXRzLmgiCisjaW5j bHVkZSAibGliYXZjb2RlYy9nb2xvbWIuaCIKKyNpbmNsdWRlICJsaWJhdmNvZGVjL3Z2Yy5oIgor I2luY2x1ZGUgImxpYmF2dXRpbC9pbnRyZWFkd3JpdGUuaCIKKyNpbmNsdWRlICJhdmMuaCIKKyNp bmNsdWRlICJhdmlvLmgiCisjaW5jbHVkZSAiYXZpb19pbnRlcm5hbC5oIgorI2luY2x1ZGUgInZ2 Yy5oIgorCit0eXBlZGVmIHN0cnVjdCBWVkNDTkFMVW5pdEFycmF5IHsKKyAgICB1aW50OF90IGFy cmF5X2NvbXBsZXRlbmVzczsKKyAgICB1aW50OF90IE5BTF91bml0X3R5cGU7CisgICAgdWludDE2 X3QgbnVtX25hbHVzOworICAgIHVpbnQxNl90ICpuYWxfdW5pdF9sZW5ndGg7CisgICAgdWludDhf dCAqKm5hbF91bml0OworfSBWVkNDTkFMVW5pdEFycmF5OworCit0eXBlZGVmIHN0cnVjdCBWVkNQ VExSZWNvcmQgeworICAgIHVpbnQ4X3QgbnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbzsKKyAgICB1 aW50OF90IGdlbmVyYWxfcHJvZmlsZV9pZGM7CisgICAgdWludDhfdCBnZW5lcmFsX3RpZXJfZmxh ZzsKKyAgICB1aW50OF90IGdlbmVyYWxfbGV2ZWxfaWRjOworICAgIHVpbnQ4X3QgcHRsX2ZyYW1l X29ubHlfY29uc3RyYWludF9mbGFnOworICAgIHVpbnQ4X3QgcHRsX211bHRpbGF5ZXJfZW5hYmxl ZF9mbGFnOworICAgIHVpbnQ4X3QgZ2VuZXJhbF9jb25zdHJhaW50X2luZm9bOV07CisgICAgdWlu dDhfdCBwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW1ZWQ19NQVhfU1VCTEFZRVJTIC0g MV07CisgICAgdWludDhfdCBzdWJsYXllcl9sZXZlbF9pZGNbVlZDX01BWF9TVUJMQVlFUlMgLSAx XTsKKyAgICB1aW50OF90IHB0bF9udW1fc3ViX3Byb2ZpbGVzOworICAgIHVpbnQzMl90IGdlbmVy YWxfc3ViX3Byb2ZpbGVfaWRjW1ZWQ19NQVhfU1VCX1BST0ZJTEVTXTsKK30gVlZDUFRMUmVjb3Jk OworCit0eXBlZGVmIHN0cnVjdCBWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCB7CisgICAg dWludDhfdCBsZW5ndGhTaXplTWludXNPbmU7CisgICAgdWludDhfdCBwdGxfcHJlc2VudF9mbGFn OworICAgIHVpbnQxNl90IG9sc19pZHg7CisgICAgdWludDhfdCBudW1fc3VibGF5ZXJzOworICAg IHVpbnQ4X3QgY29uc3RhbnRfZnJhbWVfcmF0ZTsKKyAgICB1aW50OF90IGNocm9tYV9mb3JtYXRf aWRjOworICAgIHVpbnQ4X3QgYml0X2RlcHRoX21pbnVzODsKKyAgICBWVkNQVExSZWNvcmQgcHRs OworICAgIHVpbnQxNl90IG1heF9waWN0dXJlX3dpZHRoOworICAgIHVpbnQxNl90IG1heF9waWN0 dXJlX2hlaWdodDsKKyAgICB1aW50MTZfdCBhdmdfZnJhbWVfcmF0ZTsKKyAgICB1aW50OF90IG51 bV9vZl9hcnJheXM7CisgICAgVlZDQ05BTFVuaXRBcnJheSAqYXJyYXk7Cit9IFZWQ0RlY29kZXJD b25maWd1cmF0aW9uUmVjb3JkOworCit0eXBlZGVmIHN0cnVjdCBWVkNDUHJvZmlsZVRpZXJMZXZl bCB7CisgICAgdWludDhfdCBwcm9maWxlX2lkYzsKKyAgICB1aW50OF90IHRpZXJfZmxhZzsKKyAg ICB1aW50OF90IGdlbmVyYWxfbGV2ZWxfaWRjOworICAgIHVpbnQ4X3QgcHRsX2ZyYW1lX29ubHlf Y29uc3RyYWludF9mbGFnOworICAgIHVpbnQ4X3QgcHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFn OworLy8gZ2VuZXJhbF9jb25zdHJhaW50X2luZm8KKyAgICB1aW50OF90IGdjaV9wcmVzZW50X2Zs YWc7CisgICAgdWludDhfdCBnY2lfZ2VuZXJhbF9jb25zdHJhaW50c1s5XTsKKyAgICB1aW50OF90 IGdjaV9udW1fcmVzZXJ2ZWRfYml0czsKKy8vIGVuZCBnZW5lcmFsX2NvbnN0cmFpbnRfaW5mbwor ICAgIHVpbnQ4X3QgcHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tWVkNfTUFYX1NVQkxB WUVSUyAtIDFdOworICAgIHVpbnQ4X3Qgc3VibGF5ZXJfbGV2ZWxfaWRjW1ZWQ19NQVhfU1VCTEFZ RVJTIC0gMV07CisgICAgdWludDhfdCBwdGxfbnVtX3N1Yl9wcm9maWxlczsKKyAgICB1aW50MzJf dCBnZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1tWVkNfTUFYX1NVQl9QUk9GSUxFU107Cit9IFZWQ0NQ cm9maWxlVGllckxldmVsOworCitzdGF0aWMgdm9pZCB2dmNjX3VwZGF0ZV9wdGwoVlZDRGVjb2Rl ckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg VlZDQ1Byb2ZpbGVUaWVyTGV2ZWwgKnB0bCkKK3sKKyAgICAvKgorICAgICAqIFRoZSBsZXZlbCBp bmRpY2F0aW9uIGdlbmVyYWxfbGV2ZWxfaWRjIG11c3QgaW5kaWNhdGUgYSBsZXZlbCBvZgorICAg ICAqIGNhcGFiaWxpdHkgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIHRoZSBoaWdoZXN0IGxldmVs IGluZGljYXRlZCBmb3IgdGhlCisgICAgICogaGlnaGVzdCB0aWVyIGluIGFsbCB0aGUgcGFyYW1l dGVyIHNldHMuCisgICAgICovCisgICAgaWYgKHZ2Y2MtPnB0bC5nZW5lcmFsX3RpZXJfZmxhZyA8 IHB0bC0+dGllcl9mbGFnKQorICAgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9sZXZlbF9pZGMgPSBw dGwtPmdlbmVyYWxfbGV2ZWxfaWRjOworICAgIGVsc2UKKyAgICAgICAgdnZjYy0+cHRsLmdlbmVy YWxfbGV2ZWxfaWRjID0KKyAgICAgICAgICAgIEZGTUFYKHZ2Y2MtPnB0bC5nZW5lcmFsX2xldmVs X2lkYywgcHRsLT5nZW5lcmFsX2xldmVsX2lkYyk7CisKKyAgICAvKgorICAgICAqIFRoZSB0aWVy IGluZGljYXRpb24gZ2VuZXJhbF90aWVyX2ZsYWcgbXVzdCBpbmRpY2F0ZSBhIHRpZXIgZXF1YWwg dG8gb3IKKyAgICAgKiBncmVhdGVyIHRoYW4gdGhlIGhpZ2hlc3QgdGllciBpbmRpY2F0ZWQgaW4g YWxsIHRoZSBwYXJhbWV0ZXIgc2V0cy4KKyAgICAgKi8KKyAgICB2dmNjLT5wdGwuZ2VuZXJhbF90 aWVyX2ZsYWcgPQorICAgICAgICBGRk1BWCh2dmNjLT5wdGwuZ2VuZXJhbF90aWVyX2ZsYWcsIHB0 bC0+dGllcl9mbGFnKTsKKworICAgIC8qCisgICAgICogVGhlIHByb2ZpbGUgaW5kaWNhdGlvbiBn ZW5lcmFsX3Byb2ZpbGVfaWRjIG11c3QgaW5kaWNhdGUgYSBwcm9maWxlIHRvCisgICAgICogd2hp Y2ggdGhlIHN0cmVhbSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb25maWd1cmF0aW9uIHJlY29yZCBj b25mb3Jtcy4KKyAgICAgKgorICAgICAqIElmIHRoZSBzZXF1ZW5jZSBwYXJhbWV0ZXIgc2V0cyBh cmUgbWFya2VkIHdpdGggZGlmZmVyZW50IHByb2ZpbGVzLCB0aGVuCisgICAgICogdGhlIHN0cmVh bSBtYXkgbmVlZCBleGFtaW5hdGlvbiB0byBkZXRlcm1pbmUgd2hpY2ggcHJvZmlsZSwgaWYgYW55 LCB0aGUKKyAgICAgKiBlbnRpcmUgc3RyZWFtIGNvbmZvcm1zIHRvLiBJZiB0aGUgZW50aXJlIHN0 cmVhbSBpcyBub3QgZXhhbWluZWQsIG9yIHRoZQorICAgICAqIGV4YW1pbmF0aW9uIHJldmVhbHMg dGhhdCB0aGVyZSBpcyBubyBwcm9maWxlIHRvIHdoaWNoIHRoZSBlbnRpcmUgc3RyZWFtCisgICAg ICogY29uZm9ybXMsIHRoZW4gdGhlIGVudGlyZSBzdHJlYW0gbXVzdCBiZSBzcGxpdCBpbnRvIHR3 byBvciBtb3JlCisgICAgICogc3ViLXN0cmVhbXMgd2l0aCBzZXBhcmF0ZSBjb25maWd1cmF0aW9u IHJlY29yZHMgaW4gd2hpY2ggdGhlc2UgcnVsZXMgY2FuCisgICAgICogYmUgbWV0LgorICAgICAq CisgICAgICogTm90ZTogc2V0IHRoZSBwcm9maWxlIHRvIHRoZSBoaWdoZXN0IHZhbHVlIGZvciB0 aGUgc2FrZSBvZiBzaW1wbGljaXR5LgorICAgICAqLworICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX3By b2ZpbGVfaWRjID0KKyAgICAgICAgRkZNQVgodnZjYy0+cHRsLmdlbmVyYWxfcHJvZmlsZV9pZGMs IHB0bC0+cHJvZmlsZV9pZGMpOworCisgICAgLyoKKyAgICAgKiBFYWNoIGJpdCBpbiBmbGFncyBt YXkgb25seSBiZSBzZXQgaWYgYWxsCisgICAgICogdGhlIHBhcmFtZXRlciBzZXRzIHNldCB0aGF0 IGJpdC4KKyAgICAgKi8KKyAgICB2dmNjLT5wdGwucHRsX2ZyYW1lX29ubHlfY29uc3RyYWludF9m bGFnICY9CisgICAgICAgIHB0bC0+cHRsX2ZyYW1lX29ubHlfY29uc3RyYWludF9mbGFnOworICAg IHZ2Y2MtPnB0bC5wdGxfbXVsdGlsYXllcl9lbmFibGVkX2ZsYWcgJj0gcHRsLT5wdGxfbXVsdGls YXllcl9lbmFibGVkX2ZsYWc7CisKKyAgICAvKgorICAgICAqIENvbnN0cmFpbnRzIEluZm8KKyAg ICAgKi8KKyAgICBpZiAocHRsLT5nY2lfcHJlc2VudF9mbGFnKSB7CisgICAgICAgIHZ2Y2MtPnB0 bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZvID0gOTsKKyAgICAgICAgbWVtY3B5KCZ2dmNjLT5w dGwuZ2VuZXJhbF9jb25zdHJhaW50X2luZm9bMF0sCisgICAgICAgICAgICAgICAmcHRsLT5nY2lf Z2VuZXJhbF9jb25zdHJhaW50c1swXSwgc2l6ZW9mKHVpbnQ4X3QpICogOSk7CisKKyAgICB9IGVs c2UgeworICAgICAgICB2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyA9IDE7Cisg ICAgICAgIG1lbXNldCgmdnZjYy0+cHRsLmdlbmVyYWxfY29uc3RyYWludF9pbmZvWzBdLCAwLCBz aXplb2YodWludDhfdCkgKiA5KTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEVhY2ggYml0IGlu IGZsYWdzIG1heSBvbmx5IGJlIHNldCBpZiBvbmUgb2YKKyAgICAgKiB0aGUgcGFyYW1ldGVyIHNl dHMgc2V0IHRoYXQgYml0LgorICAgICAqLworICAgIG1lbXNldCh2dmNjLT5wdGwucHRsX3N1Ymxh eWVyX2xldmVsX3ByZXNlbnRfZmxhZywgMCwKKyAgICAgICAgICAgc2l6ZW9mKHVpbnQ4X3QpICog dnZjYy0+bnVtX3N1YmxheWVycyAtIDEpOworICAgIG1lbXNldCh2dmNjLT5wdGwuc3VibGF5ZXJf bGV2ZWxfaWRjLCAwLAorICAgICAgICAgICBzaXplb2YodWludDhfdCkgKiB2dmNjLT5udW1fc3Vi bGF5ZXJzIC0gMSk7CisKKyAgICBmb3IgKGludCBpID0gdnZjYy0+bnVtX3N1YmxheWVycyAtIDI7 IGkgPj0gMDsgaS0tKSB7CisgICAgICAgIHZ2Y2MtPnB0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJl c2VudF9mbGFnW2ldIHw9CisgICAgICAgICAgICBwdGwtPnB0bF9zdWJsYXllcl9sZXZlbF9wcmVz ZW50X2ZsYWdbaV07CisgICAgICAgIGlmICh2dmNjLT5wdGwucHRsX3N1YmxheWVyX2xldmVsX3By ZXNlbnRfZmxhZ1tpXSkgeworICAgICAgICAgICAgdnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lk Y1tpXSA9CisgICAgICAgICAgICAgICAgRkZNQVgodnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lk Y1tpXSwKKyAgICAgICAgICAgICAgICAgICAgICBwdGwtPnN1YmxheWVyX2xldmVsX2lkY1tpXSk7 CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaSA9PSB2dmNjLT5udW1fc3VibGF5 ZXJzIC0gMSkgeworICAgICAgICAgICAgICAgIHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGNb aV0gPSB2dmNjLT5wdGwuZ2VuZXJhbF9sZXZlbF9pZGM7CisgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgIHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0gPQorICAgICAg ICAgICAgICAgICAgICB2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjW2kgKyAxXTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZ2Y2MtPnB0bC5wdGxfbnVtX3N1Yl9w cm9maWxlcyA9CisgICAgICAgIEZGTUFYKHZ2Y2MtPnB0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcywg cHRsLT5wdGxfbnVtX3N1Yl9wcm9maWxlcyk7CisgICAgaWYgKHZ2Y2MtPnB0bC5wdGxfbnVtX3N1 Yl9wcm9maWxlcykgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZ2Y2MtPnB0bC5wdGxf bnVtX3N1Yl9wcm9maWxlczsgaSsrKSB7CisgICAgICAgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9z dWJfcHJvZmlsZV9pZGNbaV0gPQorICAgICAgICAgICAgICAgIHB0bC0+Z2VuZXJhbF9zdWJfcHJv ZmlsZV9pZGNbaV07CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHZ2Y2NfcGFy c2VfcHRsKEdldEJpdENvbnRleHQgKmdiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVlZD RGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgcHJvZmlsZVRpZXJQcmVzZW50RmxhZywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYXhfc3ViX2xheWVyc19taW51czEpCit7CisgICAg VlZDQ1Byb2ZpbGVUaWVyTGV2ZWwgZ2VuZXJhbF9wdGw7CisgICAgaW50IGo7CisKKyAgICBpZiAo cHJvZmlsZVRpZXJQcmVzZW50RmxhZykgeworICAgICAgICBnZW5lcmFsX3B0bC5wcm9maWxlX2lk YyA9IGdldF9iaXRzKGdiLCA3KTsKKyAgICAgICAgZ2VuZXJhbF9wdGwudGllcl9mbGFnID0gZ2V0 X2JpdHMxKGdiKTsKKyAgICB9CisgICAgZ2VuZXJhbF9wdGwuZ2VuZXJhbF9sZXZlbF9pZGMgPSBn ZXRfYml0cyhnYiwgOCk7CisKKyAgICBnZW5lcmFsX3B0bC5wdGxfZnJhbWVfb25seV9jb25zdHJh aW50X2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgIGdlbmVyYWxfcHRsLnB0bF9tdWx0aWxheWVy X2VuYWJsZWRfZmxhZyA9IGdldF9iaXRzMShnYik7CisgICAgaWYgKHByb2ZpbGVUaWVyUHJlc2Vu dEZsYWcpIHsgICAgICAgLy8gcGFyc2UgY29uc3RyYWludCBpbmZvCisgICAgICAgIGdlbmVyYWxf cHRsLmdjaV9wcmVzZW50X2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgICAgICBpZiAoZ2VuZXJh bF9wdGwuZ2NpX3ByZXNlbnRfZmxhZykgeworICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IDg7 IGorKykKKyAgICAgICAgICAgICAgICBnZW5lcmFsX3B0bC5nY2lfZ2VuZXJhbF9jb25zdHJhaW50 c1tqXSA9IGdldF9iaXRzKGdiLCA4KTsKKyAgICAgICAgICAgIGdlbmVyYWxfcHRsLmdjaV9nZW5l cmFsX2NvbnN0cmFpbnRzWzhdID0gZ2V0X2JpdHMoZ2IsIDcpOworCisgICAgICAgICAgICBnZW5l cmFsX3B0bC5nY2lfbnVtX3Jlc2VydmVkX2JpdHMgPSBnZXRfYml0cyhnYiwgOCk7CisgICAgICAg ICAgICBza2lwX2JpdHMoZ2IsIGdlbmVyYWxfcHRsLmdjaV9udW1fcmVzZXJ2ZWRfYml0cyk7Cisg ICAgICAgIH0KKyAgICAgICAgd2hpbGUgKGdiLT5pbmRleCAlIDggIT0gMCkKKyAgICAgICAgICAg IHNraXBfYml0czEoZ2IpOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSBtYXhfc3ViX2xheWVy c19taW51czEgLSAxOyBpID49IDA7IGktLSkKKyAgICAgICAgZ2VuZXJhbF9wdGwucHRsX3N1Ymxh eWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tpXSA9IGdldF9iaXRzMShnYik7CisKKyAgICB3aGlsZSAo Z2ItPmluZGV4ICUgOCAhPSAwKQorICAgICAgICBza2lwX2JpdHMxKGdiKTsKKworICAgIGZvciAo aW50IGkgPSBtYXhfc3ViX2xheWVyc19taW51czEgLSAxOyBpID49IDA7IGktLSkgeworICAgICAg ICBpZiAoZ2VuZXJhbF9wdGwucHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tpXSkKKyAg ICAgICAgICAgIGdlbmVyYWxfcHRsLnN1YmxheWVyX2xldmVsX2lkY1tpXSA9IGdldF9iaXRzKGdi LCA4KTsKKyAgICB9CisKKyAgICBpZiAocHJvZmlsZVRpZXJQcmVzZW50RmxhZykgeworICAgICAg ICBnZW5lcmFsX3B0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcyA9IGdldF9iaXRzKGdiLCA4KTsKKyAg ICAgICAgaWYgKGdlbmVyYWxfcHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzKSB7CisgICAgICAgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IGdlbmVyYWxfcHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzOyBp KyspCisgICAgICAgICAgICAgICAgZ2VuZXJhbF9wdGwuZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGNb aV0gPSBnZXRfYml0c19sb25nKGdiLCAzMik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2dmNj X3VwZGF0ZV9wdGwodnZjYywgJmdlbmVyYWxfcHRsKTsKK30KKworc3RhdGljIGludCB2dmNjX3Bh cnNlX3ZwcyhHZXRCaXRDb250ZXh0ICpnYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVlZD RGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MpCit7CisgICAgdW5zaWduZWQgaW50IHZw c19tYXhfbGF5ZXJzX21pbnVzMTsKKyAgICB1bnNpZ25lZCBpbnQgdnBzX21heF9zdWJsYXllcnNf bWludXMxOworICAgIHVuc2lnbmVkIGludCB2cHNfZGVmYXVsdF9wdGxfZHBiX2hyZF9tYXhfdGlk X2ZsYWc7CisgICAgdW5zaWduZWQgaW50IHZwc19hbGxfaW5kZXBlbmRlbnRfbGF5ZXJzX2ZsYWc7 CisgICAgdW5zaWduZWQgaW50IHZwc19lYWNoX2xheWVyX2lzX2FuX29sc19mbGFnOworICAgIHVu c2lnbmVkIGludCB2cHNfb2xzX21vZGVfaWRjOworCisgICAgdW5zaWduZWQgaW50IHZwc19wdF9w cmVzZW50X2ZsYWdbVlZDX01BWF9QVExTXTsKKyAgICB1bnNpZ25lZCBpbnQgdnBzX3B0bF9tYXhf dGlkW1ZWQ19NQVhfUFRMU107CisgICAgdW5zaWduZWQgaW50IHZwc19udW1fcHRsc19taW51czEg PSAwOworCisgICAgLyoKKyAgICAgKiB2cHNfdmlkZW9fcGFyYW1ldGVyX3NldF9pZCB1KDQpCisg ICAgICovCisgICAgc2tpcF9iaXRzKGdiLCA0KTsKKworICAgIHZwc19tYXhfbGF5ZXJzX21pbnVz MSA9IGdldF9iaXRzKGdiLCA2KTsKKyAgICB2cHNfbWF4X3N1YmxheWVyc19taW51czEgPSBnZXRf Yml0cyhnYiwgMyk7CisKKyAgICAvKgorICAgICAqIG51bVRlbXBvcmFsTGF5ZXJzIGdyZWF0ZXIg dGhhbiAxIGluZGljYXRlcyB0aGF0IHRoZSBzdHJlYW0gdG8gd2hpY2ggdGhpcworICAgICAqIGNv bmZpZ3VyYXRpb24gcmVjb3JkIGFwcGxpZXMgaXMgdGVtcG9yYWxseSBzY2FsYWJsZSBhbmQgdGhl IGNvbnRhaW5lZAorICAgICAqIG51bWJlciBvZiB0ZW1wb3JhbCBsYXllcnMgKGFsc28gcmVmZXJy ZWQgdG8gYXMgdGVtcG9yYWwgc3ViLWxheWVyIG9yCisgICAgICogc3ViLWxheWVyIGluIElTTy9J RUMgMjMwMDgtMikgaXMgZXF1YWwgdG8gbnVtVGVtcG9yYWxMYXllcnMuIFZhbHVlIDEKKyAgICAg KiBpbmRpY2F0ZXMgdGhhdCB0aGUgc3RyZWFtIGlzIG5vdCB0ZW1wb3JhbGx5IHNjYWxhYmxlLiBW YWx1ZSAwIGluZGljYXRlcworICAgICAqIHRoYXQgaXQgaXMgdW5rbm93biB3aGV0aGVyIHRoZSBz dHJlYW0gaXMgdGVtcG9yYWxseSBzY2FsYWJsZS4KKyAgICAgKi8KKyAgICB2dmNjLT5udW1fc3Vi bGF5ZXJzID0gRkZNQVgodnZjYy0+bnVtX3N1YmxheWVycywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdnBzX21heF9zdWJsYXllcnNfbWludXMxICsgMSk7CisKKyAgICBpZiAodnBz X21heF9sYXllcnNfbWludXMxID4gMCAmJiB2cHNfbWF4X3N1YmxheWVyc19taW51czEgPiAwKQor ICAgICAgICB2cHNfZGVmYXVsdF9wdGxfZHBiX2hyZF9tYXhfdGlkX2ZsYWcgPSBnZXRfYml0czEo Z2IpOworICAgIGlmICh2cHNfbWF4X2xheWVyc19taW51czEgPiAwKQorICAgICAgICB2cHNfYWxs X2luZGVwZW5kZW50X2xheWVyc19mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICBlbHNlCisgICAg ICAgIHZwc19hbGxfaW5kZXBlbmRlbnRfbGF5ZXJzX2ZsYWcgPSAxOworCisgICAgZm9yIChpbnQg aSA9IDA7IGkgPD0gdnBzX21heF9sYXllcnNfbWludXMxOyBpKyspIHsKKyAgICAgICAgc2tpcF9i aXRzKGdiLCA2KTsgICAgLy92cHNfbGF5ZXJfaWRbaV0KKyAgICAgICAgaWYgKGkgPiAwICYmICF2 cHNfYWxsX2luZGVwZW5kZW50X2xheWVyc19mbGFnKSB7CisgICAgICAgICAgICBpZiAoZ2V0X2Jp dHMxKGdiKSkgeyAgICAvLyB2cHNfaW5kZXBlbmRlbnRfbGF5ZXJfZmxhZ1tpXQorICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGludCB2cHNfbWF4X3RpZF9yZWZfcHJlc2VudF9mbGFnID0gZ2V0X2Jp dHMxKGdiKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGk7IGorKykgewor ICAgICAgICAgICAgICAgICAgICBpZiAodnBzX21heF90aWRfcmVmX3ByZXNlbnRfZmxhZyAmJiBn ZXRfYml0czEoZ2IpKSAgLy8gdnBzX2RpcmVjdF9yZWZfbGF5ZXJfZmxhZ1tpXVtqXQorICAgICAg ICAgICAgICAgICAgICAgICAgc2tpcF9iaXRzKGdiLCAzKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8gdnBzX21heF90aWRfaWxfcmVmX3BpY3NfcGx1czEKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodnBzX21heF9s YXllcnNfbWludXMxID4gMCkgeworICAgICAgICBpZiAodnBzX2FsbF9pbmRlcGVuZGVudF9sYXll cnNfZmxhZykKKyAgICAgICAgICAgIHZwc19lYWNoX2xheWVyX2lzX2FuX29sc19mbGFnID0gZ2V0 X2JpdHMxKGdiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdnBzX2VhY2hfbGF5ZXJfaXNf YW5fb2xzX2ZsYWcgPSAwOworICAgICAgICBpZiAoIXZwc19lYWNoX2xheWVyX2lzX2FuX29sc19m bGFnKSB7CisgICAgICAgICAgICBpZiAoIXZwc19hbGxfaW5kZXBlbmRlbnRfbGF5ZXJzX2ZsYWcp CisgICAgICAgICAgICAgICAgdnBzX29sc19tb2RlX2lkYyA9IGdldF9iaXRzKGdiLCAyKTsKKyAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB2cHNfb2xzX21vZGVfaWRjID0gMjsKKyAg ICAgICAgICAgIGlmICh2cHNfb2xzX21vZGVfaWRjID09IDIpIHsKKyAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgdnBzX251bV9vdXRwdXRfbGF5ZXJfc2V0c19taW51czIgPSBnZXRfYml0cyhn YiwgOCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gdnBzX251bV9vdXRw dXRfbGF5ZXJfc2V0c19taW51czIgKyAxOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZm9y IChpbnQgaiA9IDA7IGogPD0gdnBzX21heF9sYXllcnNfbWludXMxOyBqKyspIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIHNraXBfYml0czEoZ2IpOyAvLyB2cHNfb2xzX291dHB1dF9sYXllcl9m bGFnW2ldW2pdCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdnBzX251bV9wdGxzX21pbnVzMSA9IGdldF9i aXRzKGdiLCA4KTsKKyAgICB9IGVsc2UgeworICAgICAgICB2cHNfZWFjaF9sYXllcl9pc19hbl9v bHNfZmxhZyA9IDA7CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gdnBzX251bV9w dGxzX21pbnVzMTsgaSsrKSB7CisgICAgICAgIGlmIChpID4gMCkKKyAgICAgICAgICAgIHZwc19w dF9wcmVzZW50X2ZsYWdbaV0gPSBnZXRfYml0czEoZ2IpOworICAgICAgICBlbHNlCisgICAgICAg ICAgICB2cHNfcHRfcHJlc2VudF9mbGFnW2ldID0gMTsKKworICAgICAgICBpZiAoIXZwc19kZWZh dWx0X3B0bF9kcGJfaHJkX21heF90aWRfZmxhZykKKyAgICAgICAgICAgIHZwc19wdGxfbWF4X3Rp ZFtpXSA9IGdldF9iaXRzKGdiLCAzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdnBzX3B0 bF9tYXhfdGlkW2ldID0gdnBzX21heF9zdWJsYXllcnNfbWludXMxOworICAgIH0KKworICAgIHdo aWxlIChnYi0+aW5kZXggJSA4ICE9IDApCisgICAgICAgIHNraXBfYml0czEoZ2IpOworCisgICAg Zm9yIChpbnQgaSA9IDA7IGkgPD0gdnBzX251bV9wdGxzX21pbnVzMTsgaSsrKQorICAgICAgICB2 dmNjX3BhcnNlX3B0bChnYiwgdnZjYywgdnBzX3B0X3ByZXNlbnRfZmxhZ1tpXSwgdnBzX3B0bF9t YXhfdGlkW2ldKTsKKworICAgIC8qIG5vdGhpbmcgdXNlZnVsIGZvciB2dmNjIHBhc3QgdGhpcyBw b2ludCAqLworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZ2Y2NfcGFyc2Vfc3BzKEdl dEJpdENvbnRleHQgKmdiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBWVkNEZWNvZGVyQ29u ZmlndXJhdGlvblJlY29yZCAqdnZjYykKK3sKKyAgICB1bnNpZ25lZCBpbnQgc3BzX21heF9zdWJs YXllcnNfbWludXMxLCBzcHNfbG9nMl9jdHVfc2l6ZV9taW51czU7CisgICAgdW5zaWduZWQgaW50 IHNwc19zdWJwaWNfc2FtZV9zaXplX2ZsYWcsIHNwc19waWNfaGVpZ2h0X21heF9pbl9sdW1hX3Nh bXBsZXMsCisgICAgICAgIHNwc19waWNfd2lkdGhfbWF4X2luX2x1bWFfc2FtcGxlczsKKyAgICB1 bnNpZ25lZCBpbnQgc3BzX2luZGVwZW5kZW50X3N1YnBpY3NfZmxhZzsKKworICAgIHNraXBfYml0 cyhnYiwgOCk7ICAvLyBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQgJiYgc3BzX3ZpZGVvX3BhcmFt ZXRlcl9zZXRfaWQKKyAgICBzcHNfbWF4X3N1YmxheWVyc19taW51czEgPSBnZXRfYml0cyhnYiwg Myk7CisKKyAgICAvKgorICAgICAqIG51bVRlbXBvcmFsTGF5ZXJzIGdyZWF0ZXIgdGhhbiAxIGlu ZGljYXRlcyB0aGF0IHRoZSBzdHJlYW0gdG8gd2hpY2ggdGhpcworICAgICAqIGNvbmZpZ3VyYXRp b24gcmVjb3JkIGFwcGxpZXMgaXMgdGVtcG9yYWxseSBzY2FsYWJsZSBhbmQgdGhlIGNvbnRhaW5l ZAorICAgICAqIG51bWJlciBvZiB0ZW1wb3JhbCBsYXllcnMgKGFsc28gcmVmZXJyZWQgdG8gYXMg dGVtcG9yYWwgc3ViLWxheWVyIG9yCisgICAgICogc3ViLWxheWVyIGluIElTTy9JRUMgMjMwMDgt MikgaXMgZXF1YWwgdG8gbnVtVGVtcG9yYWxMYXllcnMuIFZhbHVlIDEKKyAgICAgKiBpbmRpY2F0 ZXMgdGhhdCB0aGUgc3RyZWFtIGlzIG5vdCB0ZW1wb3JhbGx5IHNjYWxhYmxlLiBWYWx1ZSAwIGlu ZGljYXRlcworICAgICAqIHRoYXQgaXQgaXMgdW5rbm93biB3aGV0aGVyIHRoZSBzdHJlYW0gaXMg dGVtcG9yYWxseSBzY2FsYWJsZS4KKyAgICAgKi8KKyAgICB2dmNjLT5udW1fc3VibGF5ZXJzID0g RkZNQVgodnZjYy0+bnVtX3N1YmxheWVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3BzX21heF9zdWJsYXllcnNfbWludXMxICsgMSk7CisKKyAgICB2dmNjLT5jaHJvbWFfZm9y bWF0X2lkYyA9IGdldF9iaXRzKGdiLCAyKTsKKyAgICBzcHNfbG9nMl9jdHVfc2l6ZV9taW51czUg PSBnZXRfYml0cyhnYiwgMik7CisKKyAgICBpZiAoZ2V0X2JpdHMxKGdiKSkgICAgICAgICAgLy8g c3BzX3B0bF9kcGJfaHJkX3BhcmFtc19wcmVzZW50X2ZsYWcKKyAgICAgICAgdnZjY19wYXJzZV9w dGwoZ2IsIHZ2Y2MsIDEsIHNwc19tYXhfc3VibGF5ZXJzX21pbnVzMSk7CisKKyAgICBza2lwX2Jp dHMxKGdiKTsgICAgICAgICAgICAgLy8gc3BzX2dkcl9lbmFibGVkX2ZsYWcKKyAgICBpZiAoZ2V0 X2JpdHMoZ2IsIDEpKSAgICAgICAgLy8gc3BzX3JlZl9waWNfcmVzYW1wbGluZ19lbmFibGVkX2Zs YWcKKyAgICAgICAgc2tpcF9iaXRzMShnYik7ICAgICAgICAgLy8gc3BzX3Jlc19jaGFuZ2VfaW5f Y2x2c19hbGxvd2VkX2ZsYWcKKworICAgIHNwc19waWNfd2lkdGhfbWF4X2luX2x1bWFfc2FtcGxl cyA9IGdldF91ZV9nb2xvbWJfbG9uZyhnYik7CisgICAgdnZjYy0+bWF4X3BpY3R1cmVfd2lkdGgg PQorICAgICAgICBGRk1BWCh2dmNjLT5tYXhfcGljdHVyZV93aWR0aCwgc3BzX3BpY193aWR0aF9t YXhfaW5fbHVtYV9zYW1wbGVzKTsKKyAgICBzcHNfcGljX2hlaWdodF9tYXhfaW5fbHVtYV9zYW1w bGVzID0gZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsKKyAgICB2dmNjLT5tYXhfcGljdHVyZV9oZWln aHQgPQorICAgICAgICBGRk1BWCh2dmNjLT5tYXhfcGljdHVyZV9oZWlnaHQsIHNwc19waWNfaGVp Z2h0X21heF9pbl9sdW1hX3NhbXBsZXMpOworCisgICAgaWYgKGdldF9iaXRzMShnYikpIHsKKyAg ICAgICAgZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsgLy8gc3BzX2NvbmZfd2luX2xlZnRfb2Zmc2V0 CisgICAgICAgIGdldF91ZV9nb2xvbWJfbG9uZyhnYik7IC8vIHNwc19jb25mX3dpbl9yaWdodF9v ZmZzZXQKKyAgICAgICAgZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsgLy8gc3BzX2NvbmZfd2luX3Rv cF9vZmZzZXQKKyAgICAgICAgZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsgLy8gc3BzX2NvbmZfd2lu X2JvdHRvbV9vZmZzZXQKKyAgICB9CisKKyAgICBpZiAoZ2V0X2JpdHMxKGdiKSkgeyAgICAgICAg Ly8gc3BzX3N1YnBpY19pbmZvX3ByZXNlbnRfZmxhZworICAgICAgICBjb25zdCB1bnNpZ25lZCBp bnQgc3BzX251bV9zdWJwaWNzX21pbnVzMSA9IGdldF91ZV9nb2xvbWJfbG9uZyhnYik7CisgICAg ICAgIGNvbnN0IGludCBjdGJfbG9nMl9zaXplX3kgPSBzcHNfbG9nMl9jdHVfc2l6ZV9taW51czUg KyA1OworICAgICAgICBjb25zdCBpbnQgY3RiX3NpemVfeSAgICAgID0gMSA8PCBjdGJfbG9nMl9z aXplX3k7CisgICAgICAgIGNvbnN0IGludCB0bXBfd2lkdGhfdmFsICAgPSBBVl9DRUlMX1JTSElG VChzcHNfcGljX3dpZHRoX21heF9pbl9sdW1hX3NhbXBsZXMsICBjdGJfbG9nMl9zaXplX3kpOwor ICAgICAgICBjb25zdCBpbnQgdG1wX2hlaWdodF92YWwgID0gQVZfQ0VJTF9SU0hJRlQoc3BzX3Bp Y19oZWlnaHRfbWF4X2luX2x1bWFfc2FtcGxlcywgY3RiX2xvZzJfc2l6ZV95KTsKKyAgICAgICAg Y29uc3QgaW50IHdsZW4gICAgICAgICAgICA9IGF2X2NlaWxfbG9nMih0bXBfd2lkdGhfdmFsKTsK KyAgICAgICAgY29uc3QgaW50IGhsZW4gICAgICAgICAgICA9IGF2X2NlaWxfbG9nMih0bXBfaGVp Z2h0X3ZhbCk7CisgICAgICAgIGlmIChzcHNfbnVtX3N1YnBpY3NfbWludXMxID4gMCkgeyAgICAg ICAvLyBzcHNfbnVtX3N1YnBpY3NfbWludXMxCisgICAgICAgICAgICBzcHNfaW5kZXBlbmRlbnRf c3VicGljc19mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICAgICAgICAgIHNwc19zdWJwaWNfc2Ft ZV9zaXplX2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50 IGkgPSAwOyBzcHNfbnVtX3N1YnBpY3NfbWludXMxID4gMCAmJiBpIDw9IHNwc19udW1fc3VicGlj c19taW51czE7IGkrKykgeworICAgICAgICAgICAgaWYgKCFzcHNfc3VicGljX3NhbWVfc2l6ZV9m bGFnIHx8IGkgPT0gMCkgeworICAgICAgICAgICAgICAgIGlmIChpID4gMCAmJiBzcHNfcGljX3dp ZHRoX21heF9pbl9sdW1hX3NhbXBsZXMgPiBjdGJfc2l6ZV95KQorICAgICAgICAgICAgICAgICAg ICBza2lwX2JpdHMoZ2IsIHdsZW4pOworICAgICAgICAgICAgICAgIGlmIChpID4gMCAmJiBzcHNf cGljX2hlaWdodF9tYXhfaW5fbHVtYV9zYW1wbGVzID4gY3RiX3NpemVfeSkKKyAgICAgICAgICAg ICAgICAgICAgc2tpcF9iaXRzKGdiLCBobGVuKTsKKyAgICAgICAgICAgICAgICBpZiAoaSA8IHNw c19udW1fc3VicGljc19taW51czEgJiYgc3BzX3BpY193aWR0aF9tYXhfaW5fbHVtYV9zYW1wbGVz ID4gY3RiX3NpemVfeSkKKyAgICAgICAgICAgICAgICAgICAgc2tpcF9iaXRzKGdiLCB3bGVuKTsK KyAgICAgICAgICAgICAgICBpZiAoaSA8IHNwc19udW1fc3VicGljc19taW51czEgJiYgc3BzX3Bp Y19oZWlnaHRfbWF4X2luX2x1bWFfc2FtcGxlcyA+IGN0Yl9zaXplX3kpCisgICAgICAgICAgICAg ICAgICAgIHNraXBfYml0cyhnYiwgaGxlbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp ZiAoIXNwc19pbmRlcGVuZGVudF9zdWJwaWNzX2ZsYWcpIHsKKyAgICAgICAgICAgICAgICBza2lw X2JpdHMoZ2IsIDIpOyAgICAgICAvLyBzcHNfc3VicGljX3RyZWF0ZWRfYXNfcGljX2ZsYWcgJiYg c3BzX2xvb3BfZmlsdGVyX2Fjcm9zc19zdWJwaWNfZW5hYmxlZF9mbGFnCisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICAgICAgZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsgLy8gc3BzX3N1YnBp Y19pZF9sZW5fbWludXMxCisgICAgICAgIGlmIChnZXRfYml0czEoZ2IpKSB7ICAgIC8vIHNwc19z dWJwaWNfaWRfbWFwcGluZ19leHBsaWNpdGx5X3NpZ25hbGxlZF9mbGFnCisgICAgICAgICAgICBp ZiAoZ2V0X2JpdHMxKGdiKSkgIC8vIHNwc19zdWJwaWNfaWRfbWFwcGluZ19wcmVzZW50X2ZsYWcK KyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSBzcHNfbnVtX3N1YnBpY3NfbWlu dXMxOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgc2tpcF9iaXRzMShnYik7ICAgICAvLyBz cHNfc3VicGljX2lkW2ldCisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg IHZ2Y2MtPmJpdF9kZXB0aF9taW51czggPSBnZXRfdWVfZ29sb21iX2xvbmcoZ2IpOworCisgICAg Lyogbm90aGluZyB1c2VmdWwgZm9yIHZ2Y2MgcGFzdCB0aGlzIHBvaW50ICovCisgICAgcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgdnZjY19wYXJzZV9wcHMoR2V0Qml0Q29udGV4dCAqZ2IsCisg ICAgICAgICAgICAgICAgICAgICAgICAgIFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2 dmNjKQoreworCisgICAgLy8gTm90aGluZyBvZiBpbXBvcnRhbmNlIHRvIHBhcnNlIGluIFBQUwor ICAgIC8qIG5vdGhpbmcgdXNlZnVsIGZvciB2dmNjIHBhc3QgdGhpcyBwb2ludCAqLworICAgIHJl dHVybiAwOworfQorCitzdGF0aWMgdm9pZCBuYWxfdW5pdF9wYXJzZV9oZWFkZXIoR2V0Qml0Q29u dGV4dCAqZ2IsIHVpbnQ4X3QgKm5hbF90eXBlKQoreworICAgIC8qCisgICAgICogZm9yYmlkZGVu X3plcm9fYml0ICAgIHUoMSkKKyAgICAgKiBudWhfcmVzZXJ2ZWRfemVyb19iaXQgdSgxKQorICAg ICAqIG51aF9sYXllcl9pZCAgICAgICAgICB1KDYpCisgICAgICovCisgICAgc2tpcF9iaXRzKGdi LCA4KTsKKyAgICAqbmFsX3R5cGUgPSBnZXRfYml0cyhnYiwgNSk7CisKKyAgICAvKgorICAgICAq IG51aF90ZW1wb3JhbF9pZF9wbHVzMSB1KDMpCisgICAgICovCisgICAgc2tpcF9iaXRzKGdiLCAz KTsKK30KKworc3RhdGljIGludCB2dmNjX2FycmF5X2FkZF9uYWxfdW5pdCh1aW50OF90ICpuYWxf YnVmLCB1aW50MzJfdCBuYWxfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWludDhfdCBuYWxfdHlwZSwgaW50IHBzX2FycmF5X2NvbXBsZXRlbmVzcywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQg KnZ2Y2MpCit7CisgICAgaW50IHJldDsKKyAgICB1aW50OF90IGluZGV4OworICAgIHVpbnQxNl90 IG51bV9uYWx1czsKKyAgICBWVkNDTkFMVW5pdEFycmF5ICphcnJheTsKKworICAgIGZvciAoaW5k ZXggPSAwOyBpbmRleCA8IHZ2Y2MtPm51bV9vZl9hcnJheXM7IGluZGV4KyspCisgICAgICAgIGlm ICh2dmNjLT5hcnJheVtpbmRleF0uTkFMX3VuaXRfdHlwZSA9PSBuYWxfdHlwZSkKKyAgICAgICAg ICAgIGJyZWFrOworCisgICAgaWYgKGluZGV4ID49IHZ2Y2MtPm51bV9vZl9hcnJheXMpIHsKKyAg ICAgICAgdWludDhfdCBpOworCisgICAgICAgIHJldCA9CisgICAgICAgICAgICBhdl9yZWFsbG9j cF9hcnJheSgmdnZjYy0+YXJyYXksIGluZGV4ICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVvZihWVkNDTkFMVW5pdEFycmF5KSk7CisgICAgICAgIGlmIChyZXQgPCAwKQor ICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAgICAgICBmb3IgKGkgPSB2dmNjLT5udW1fb2Zf YXJyYXlzOyBpIDw9IGluZGV4OyBpKyspCisgICAgICAgICAgICBtZW1zZXQoJnZ2Y2MtPmFycmF5 W2ldLCAwLCBzaXplb2YoVlZDQ05BTFVuaXRBcnJheSkpOworICAgICAgICB2dmNjLT5udW1fb2Zf YXJyYXlzID0gaW5kZXggKyAxOworICAgIH0KKworICAgIGFycmF5ID0gJnZ2Y2MtPmFycmF5W2lu ZGV4XTsKKyAgICBudW1fbmFsdXMgPSBhcnJheS0+bnVtX25hbHVzOworCisgICAgcmV0ID0gYXZf cmVhbGxvY3BfYXJyYXkoJmFycmF5LT5uYWxfdW5pdCwgbnVtX25hbHVzICsgMSwgc2l6ZW9mKHVp bnQ4X3QgKikpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAg cmV0ID0KKyAgICAgICAgYXZfcmVhbGxvY3BfYXJyYXkoJmFycmF5LT5uYWxfdW5pdF9sZW5ndGgs IG51bV9uYWx1cyArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1aW50MTZf dCkpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgYXJyYXkt Pm5hbF91bml0W251bV9uYWx1c10gPSBuYWxfYnVmOworICAgIGFycmF5LT5uYWxfdW5pdF9sZW5n dGhbbnVtX25hbHVzXSA9IG5hbF9zaXplOworICAgIGFycmF5LT5OQUxfdW5pdF90eXBlID0gbmFs X3R5cGU7CisgICAgYXJyYXktPm51bV9uYWx1cysrOworCisgICAgLyoKKyAgICAqIFdoZW4gdGhl IHNhbXBsZSBlbnRyeSBuYW1lIGlzICd2dmMxJywgdGhlIGZvbGxvd2luZyBhcHBsaWVzOgorICAg ICog4oCiIFRoZSB2YWx1ZSBvZiBhcnJheV9jb21wbGV0ZW5lc3Mgc2hhbGwgYmUgZXF1YWwgdG8g MSBmb3IgYXJyYXlzIG9mIFNQUywKKyAgICAqICAgYW5kIFBQUyBOQUwgdW5pdHMuCisgICAgKiDi gKIgSWYgYSBWVkMgYml0c3RyZWFtIGluY2x1ZGVzIERDSSBOQUwgdW5pdChzKSwgdGhlIHZhbHVl IG9mCisgICAgKiAgIGFycmF5X2NvbXBsZXRlbmVzcyBzaGFsbCBiZSBlcXVhbCB0byAxIGZvciB0 aGUgYXJyYXkgb2YgRENJIHVuaXRzLgorICAgICogICBPdGhlcndpc2UsIE5BTF91bml0X3R5cGUg c2hhbGwgbm90IGluZGljYXRlIERDSSBOQUwgdW5pdHMuCisgICAgKiDigKIgSWYgYSBWVkMgYml0 c3RyZWFtIGluY2x1ZGVzIFZQUyBOQUwgdW5pdChzKSwgdGhlIHZhbHVlIG9mCisgICAgKiAgIGFy cmF5X2NvbXBsZXRlbmVzcyBzaGFsbCBiZSBlcXVhbCB0byAxIGZvciB0aGUgYXJyYXkgb2YgVlBT IE5BTCB1bml0cy4KKyAgICAqICAgT3RoZXJ3aXNlLCBOQUxfdW5pdF90eXBlIHNoYWxsIG5vdCBp bmRpY2F0ZSBWUFMgTkFMIHVuaXRzLgorICAgICogV2hlbiB0aGUgdmFsdWUgb2YgYXJyYXlfY29t cGxldGVuZXNzIGlzIGVxdWFsIHRvIDEgZm9yIGFuIGFycmF5IG9mIGEKKyAgICAqIHBhcnRpY3Vs YXIgTkFMX3VuaXRfdHlwZSB2YWx1ZSwgTkFMIHVuaXRzIG9mIHRoYXQgTkFMX3VuaXRfdHlwZSB2 YWx1ZQorICAgICogY2Fubm90IGJlIHVwZGF0ZWQgd2l0aG91dCBjYXVzaW5nIGEgZGlmZmVyZW50 IHNhbXBsZSBlbnRyeSB0byBiZSB1c2VkLgorICAgICogV2hlbiB0aGUgc2FtcGxlIGVudHJ5IG5h bWUgaXMgJ3Z2aTEnLCB0aGUgdmFsdWUgb2YgYXJyYXlfY29tcGxldGVuZXNzCisgICAgKiBvZiBh dCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZyBhcnJheXMgc2hhbGwgYmUgZXF1YWwgdG8gMDoK KyAgICAgIOKAoiBUaGUgYXJyYXkgb2YgRENJIE5BTCB1bml0cywgaWYgcHJlc2VudC4KKyAgICAg IOKAoiBUaGUgYXJyYXkgb2YgVlBTIE5BTCB1bml0cywgaWYgcHJlc2VudC4KKyAgICAgIOKAoiBU aGUgYXJyYXkgb2YgU1BTIE5BTCB1bml0cworICAgICAg4oCiIFRoZSBhcnJheSBvZiBQUFMgTkFM IHVuaXRzLgorICAgICovCisgICAgaWYgKG5hbF90eXBlID09IFZWQ19WUFNfTlVUIHx8IG5hbF90 eXBlID09IFZWQ19TUFNfTlVUIHx8CisgICAgICAgIG5hbF90eXBlID09IFZWQ19QUFNfTlVUIHx8 IG5hbF90eXBlID09IFZWQ19EQ0lfTlVUICkKKyAgICAgICAgYXJyYXktPmFycmF5X2NvbXBsZXRl bmVzcyA9IHBzX2FycmF5X2NvbXBsZXRlbmVzczsKKworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHZ2Y2NfYWRkX25hbF91bml0KHVpbnQ4X3QgKm5hbF9idWYsIHVpbnQzMl90IG5hbF9z aXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHNfYXJyYXlfY29tcGxldGVu ZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWVkNEZWNvZGVyQ29uZmlndXJhdGlv blJlY29yZCAqdnZjYykKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBHZXRCaXRDb250ZXh0IGdi YzsKKyAgICB1aW50OF90IG5hbF90eXBlOworICAgIHVpbnQ4X3QgKnJic3BfYnVmOworICAgIHVp bnQzMl90IHJic3Bfc2l6ZTsKKworICAgIHJic3BfYnVmID0gZmZfbmFsX3VuaXRfZXh0cmFjdF9y YnNwKG5hbF9idWYsIG5hbF9zaXplLCAmcmJzcF9zaXplLCAyKTsKKyAgICBpZiAoIXJic3BfYnVm KSB7CisgICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgZ290byBlbmQ7Cisg ICAgfQorCisgICAgcmV0ID0gaW5pdF9nZXRfYml0czgoJmdiYywgcmJzcF9idWYsIHJic3Bfc2l6 ZSk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIGdvdG8gZW5kOworCisgICAgbmFsX3VuaXRf cGFyc2VfaGVhZGVyKCZnYmMsICZuYWxfdHlwZSk7CisKKyAgICAvKgorICAgICAqIE5vdGU6IG9u bHkgJ2RlY2xhcmF0aXZlJyBTRUkgbWVzc2FnZXMgYXJlIGFsbG93ZWQgaW4KKyAgICAgKiB2dmNj LiBQZXJoYXBzIHRoZSBTRUkgcGxheWxvYWQgdHlwZSBzaG91bGQgYmUgY2hlY2tlZAorICAgICAq IGFuZCBub24tZGVjbGFyYXRpdmUgU0VJIG1lc3NhZ2VzIGRpc2NhcmRlZD8KKyAgICAgKi8KKyAg ICBzd2l0Y2ggKG5hbF90eXBlKSB7CisgICAgY2FzZSBWVkNfT1BJX05VVDoKKyAgICBjYXNlIFZW Q19WUFNfTlVUOgorICAgIGNhc2UgVlZDX1NQU19OVVQ6CisgICAgY2FzZSBWVkNfUFBTX05VVDoK KyAgICBjYXNlIFZWQ19QUkVGSVhfU0VJX05VVDoKKyAgICBjYXNlIFZWQ19TVUZGSVhfU0VJX05V VDoKKyAgICAgICAgcmV0ID0gdnZjY19hcnJheV9hZGRfbmFsX3VuaXQobmFsX2J1ZiwgbmFsX3Np emUsIG5hbF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc19h cnJheV9jb21wbGV0ZW5lc3MsIHZ2Y2MpOworICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAg ICAgIGdvdG8gZW5kOworICAgICAgICBlbHNlIGlmIChuYWxfdHlwZSA9PSBWVkNfVlBTX05VVCkK KyAgICAgICAgICAgIHJldCA9IHZ2Y2NfcGFyc2VfdnBzKCZnYmMsIHZ2Y2MpOworICAgICAgICBl bHNlIGlmIChuYWxfdHlwZSA9PSBWVkNfU1BTX05VVCkKKyAgICAgICAgICAgIHJldCA9IHZ2Y2Nf cGFyc2Vfc3BzKCZnYmMsIHZ2Y2MpOworICAgICAgICBlbHNlIGlmIChuYWxfdHlwZSA9PSBWVkNf UFBTX05VVCkKKyAgICAgICAgICAgIHJldCA9IHZ2Y2NfcGFyc2VfcHBzKCZnYmMsIHZ2Y2MpOwor ICAgICAgICBlbHNlIGlmIChuYWxfdHlwZSA9PSBWVkNfT1BJX05VVCkgeworICAgICAgICAgICAg Ly8gbm90IHlldCBzdXBwb3J0ZWQKKyAgICAgICAgfQorICAgICAgICBpZiAocmV0IDwgMCkKKyAg ICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg ICByZXQgPSBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisK KyAgZW5kOgorICAgIGF2X2ZyZWUocmJzcF9idWYpOworICAgIHJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyB2b2lkIHZ2Y2NfaW5pdChWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYykK K3sKKyAgICBtZW1zZXQodnZjYywgMCwgc2l6ZW9mKFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVj b3JkKSk7CisgICAgdnZjYy0+bGVuZ3RoU2l6ZU1pbnVzT25lID0gMzsgICAgICAgLy8gNCBieXRl cworCisgICAgdnZjYy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50X2luZm8gPSAxOworCisgICAg dnZjYy0+cHRsX3ByZXNlbnRfZmxhZyA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHZ2Y2NfY2xvc2Uo VlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MpCit7CisgICAgdWludDhfdCBpOwor CisgICAgZm9yIChpID0gMDsgaSA8IHZ2Y2MtPm51bV9vZl9hcnJheXM7IGkrKykgeworICAgICAg ICB2dmNjLT5hcnJheVtpXS5udW1fbmFsdXMgPSAwOworICAgICAgICBhdl9mcmVlcCgmdnZjYy0+ YXJyYXlbaV0ubmFsX3VuaXQpOworICAgICAgICBhdl9mcmVlcCgmdnZjYy0+YXJyYXlbaV0ubmFs X3VuaXRfbGVuZ3RoKTsKKyAgICB9CisKKyAgICB2dmNjLT5udW1fb2ZfYXJyYXlzID0gMDsKKyAg ICBhdl9mcmVlcCgmdnZjYy0+YXJyYXkpOworfQorCitzdGF0aWMgaW50IHZ2Y2Nfd3JpdGUoQVZJ T0NvbnRleHQgKnBiLCBWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYykKK3sKKyAg ICB1aW50OF90IGk7CisgICAgdWludDE2X3QgaiwgdnBzX2NvdW50ID0gMCwgc3BzX2NvdW50ID0g MCwgcHBzX2NvdW50ID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMOworICAgIC8q CisgICAgICogSXQncyB1bmNsZWFyIGhvdyB0byBwcm9wZXJseSBjb21wdXRlIHRoZXNlIGZpZWxk cywgc28KKyAgICAgKiBsZXQncyBhbHdheXMgc2V0IHRoZW0gdG8gdmFsdWVzIG1lYW5pbmcgJ3Vu c3BlY2lmaWVkJy4KKyAgICAgKi8KKyAgICB2dmNjLT5hdmdfZnJhbWVfcmF0ZSA9IDA7CisgICAg dnZjYy0+Y29uc3RhbnRfZnJhbWVfcmF0ZSA9IDE7CisKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9H X1RSQUNFLAorICAgICAgICAgICAibGVuZ3RoU2l6ZU1pbnVzT25lOiAgICAgICAgICAgICAgICAg ICUiIFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPmxlbmd0aFNpemVNaW51c09uZSk7Cisg ICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgInB0bF9wcmVzZW50X2Zs YWc6ICAgICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5w dGxfcHJlc2VudF9mbGFnKTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAg ICAgICAib2xzX2lkeDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICUiIFBSSXUxNiAiXG4i LCB2dmNjLT5vbHNfaWR4KTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAg ICAgICAibnVtX3N1YmxheWVyczogICAgICAgICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIs CisgICAgICAgICAgIHZ2Y2MtPm51bV9zdWJsYXllcnMpOworICAgIGF2X2xvZyhOVUxMLCBBVl9M T0dfVFJBQ0UsCisgICAgICAgICAgICJjb25zdGFudF9mcmFtZV9yYXRlOiAgICAgICAgICAgICAg ICAgJSIgUFJJdTggIlxuIiwKKyAgICAgICAgICAgdnZjYy0+Y29uc3RhbnRfZnJhbWVfcmF0ZSk7 CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgImNocm9tYV9mb3Jt YXRfaWRjOiAgICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNj LT5jaHJvbWFfZm9ybWF0X2lkYyk7CisKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAor ICAgICAgICAgICAiYml0X2RlcHRoX21pbnVzODogICAgICAgICAgICAgICAgICAgICUiIFBSSXU4 ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPmJpdF9kZXB0aF9taW51czgpOworICAgIGF2X2xvZyhO VUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJudW1fYnl0ZXNfY29uc3RyYWludF9pbmZv OiAgICAgICAgICAgJSIgUFJJdTggIlxuIiwKKyAgICAgICAgICAgdnZjYy0+cHRsLm51bV9ieXRl c19jb25zdHJhaW50X2luZm8pOworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAg ICAgICAgICJnZW5lcmFsX3Byb2ZpbGVfaWRjOiAgICAgICAgICAgICAgICAgJSIgUFJJdTggIlxu IiwKKyAgICAgICAgICAgdnZjYy0+cHRsLmdlbmVyYWxfcHJvZmlsZV9pZGMpOworICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJnZW5lcmFsX3RpZXJfZmxhZzogICAg ICAgICAgICAgICAgICAgJSIgUFJJdTggIlxuIiwKKyAgICAgICAgICAgdnZjYy0+cHRsLmdlbmVy YWxfdGllcl9mbGFnKTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAg ICAiZ2VuZXJhbF9sZXZlbF9pZGM6ICAgICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsCisg ICAgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX2xldmVsX2lkYyk7CisgICAgYXZfbG9nKE5VTEws IEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgInB0bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxh ZzogICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5wdGwucHRsX2ZyYW1lX29u bHlfY29uc3RyYWludF9mbGFnKTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAg ICAgICAgICAicHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnOiAgICAgICAgICUiIFBSSXU4ICJc biIsCisgICAgICAgICAgIHZ2Y2MtPnB0bC5wdGxfbXVsdGlsYXllcl9lbmFibGVkX2ZsYWcpOwor ICAgIGZvciAoaSA9IDA7IGkgPCB2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbzsg aSsrKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICAg ICAiZ2VuZXJhbF9jb25zdHJhaW50X2luZm9bJWRdOiAgICAgICAgICAlIiBQUkl1OCAiXG4iLCBp LAorICAgICAgICAgICAgICAgdnZjYy0+cHRsLmdlbmVyYWxfY29uc3RyYWludF9pbmZvW2ldKTsK KyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+bnVtX3N1YmxheWVycyAtIDE7IGkr KykgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAgICAg InB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbJSIgUFJJdTggIl06ICAlIiBQUkl1OCAi XG4iLCBpLAorICAgICAgICAgICAgICAgdnZjYy0+cHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVz ZW50X2ZsYWdbaV0pOworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAg ICAgICAgICAgInN1YmxheWVyX2xldmVsX2lkY1slIiBQUkl1OCAiXTogJSIgUFJJdTggIlxuIiwg aSwKKyAgICAgICAgICAgICAgIHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0pOworICAg IH0KKworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJudW1fc3Vi X3Byb2ZpbGVzOiAgICAgICAgICAgICAgICAgICAgJSIgUFJJdTggIlxuIiwKKyAgICAgICAgICAg dnZjYy0+cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCB2 dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXM7IGkrKykgeworICAgICAgICBhdl9sb2coTlVM TCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAgICAgImdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRj WyUiIFBSSXU4ICJdOiAgICAgICAgICUiIFBSSXgzMiAiXG4iLCBpLAorICAgICAgICAgICAgICAg dnZjYy0+cHRsLmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjW2ldKTsKKyAgICB9CisKKyAgICBhdl9s b2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAibWF4X3BpY3R1cmVfd2lkdGg6ICAg ICAgICAgICAgICAgICAgICUiIFBSSXUxNiAiXG4iLAorICAgICAgICAgICB2dmNjLT5tYXhfcGlj dHVyZV93aWR0aCk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAg Im1heF9waWN0dXJlX2hlaWdodDogICAgICAgICAgICAgICAgICAlIiBQUkl1MTYgIlxuIiwKKyAg ICAgICAgICAgdnZjYy0+bWF4X3BpY3R1cmVfaGVpZ2h0KTsKKyAgICBhdl9sb2coTlVMTCwgQVZf TE9HX1RSQUNFLAorICAgICAgICAgICAiYXZnX2ZyYW1lX3JhdGU6ICAgICAgICAgICAgICAgICAg ICAgICUiIFBSSXUxNiAiXG4iLAorICAgICAgICAgICB2dmNjLT5hdmdfZnJhbWVfcmF0ZSk7CisK KyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAibnVtX29mX2FycmF5 czogICAgICAgICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2Y2Mt Pm51bV9vZl9hcnJheXMpOworICAgIGZvciAoaSA9IDA7IGkgPCB2dmNjLT5udW1fb2ZfYXJyYXlz OyBpKyspIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAg ICAgICJhcnJheV9jb21wbGV0ZW5lc3NbJSIgUFJJdTggIl06ICAgICAgICAgICAgICAgJSIgUFJJ dTggIlxuIiwgaSwKKyAgICAgICAgICAgICAgIHZ2Y2MtPmFycmF5W2ldLmFycmF5X2NvbXBsZXRl bmVzcyk7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICAg ICAiTkFMX3VuaXRfdHlwZVslIiBQUkl1OCAiXTogICAgICAgICAgICAgICAgICAgICUiIFBSSXU4 ICJcbiIsIGksCisgICAgICAgICAgICAgICB2dmNjLT5hcnJheVtpXS5OQUxfdW5pdF90eXBlKTsK KyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgICAgICJudW1f bmFsdXNbJSIgUFJJdTggIl06ICAgICAgICAgICAgICAgICAgICAgICAgJSIgUFJJdTE2ICJcbiIs IGksCisgICAgICAgICAgICAgICB2dmNjLT5hcnJheVtpXS5udW1fbmFsdXMpOworICAgICAgICBm b3IgKGogPSAwOyBqIDwgdnZjYy0+YXJyYXlbaV0ubnVtX25hbHVzOyBqKyspCisgICAgICAgICAg ICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAgICAgICAgICJuYWxfdW5p dF9sZW5ndGhbJSIgUFJJdTggIl1bJSIgUFJJdTE2ICJdOiAgICAgICAgICAgICAgICUiCisgICAg ICAgICAgICAgICAgICAgUFJJdTE2ICJcbiIsIGksIGosIHZ2Y2MtPmFycmF5W2ldLm5hbF91bml0 X2xlbmd0aFtqXSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBXZSBuZWVkIGF0IGxlYXN0IG9u ZSBvZiBlYWNoOiBWUFMgYW5kIFNQUy4KKyAgICAgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgdnZj Yy0+bnVtX29mX2FycmF5czsgaSsrKQorICAgICAgICBzd2l0Y2ggKHZ2Y2MtPmFycmF5W2ldLk5B TF91bml0X3R5cGUpIHsKKyAgICAgICAgY2FzZSBWVkNfVlBTX05VVDoKKyAgICAgICAgICAgIHZw c19jb3VudCArPSB2dmNjLT5hcnJheVtpXS5udW1fbmFsdXM7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgY2FzZSBWVkNfU1BTX05VVDoKKyAgICAgICAgICAgIHNwc19jb3VudCArPSB2dmNj LT5hcnJheVtpXS5udW1fbmFsdXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBW VkNfUFBTX05VVDoKKyAgICAgICAgICAgIHBwc19jb3VudCArPSB2dmNjLT5hcnJheVtpXS5udW1f bmFsdXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICB9CisKKyAgICBpZiAodnBzX2NvdW50ID4gVlZDX01BWF9WUFNfQ09V TlQpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIGlmICghc3BzX2Nv dW50IHx8IHNwc19jb3VudCA+IFZWQ19NQVhfU1BTX0NPVU5UKQorICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKKyAgICBpZiAoIXBwc19jb3VudCB8fCBwcHNfY291bnQgPiBWVkNf TUFYX1BQU19DT1VOVCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisKKyAg ICAvKiBiaXQoNSkgcmVzZXJ2ZWQgPSDigJgxMTExMeKAmWI7CisgICAgICAgdW5zaWduZWQgaW50 ICgyKSBMZW5ndGhTaXplTWludXNPbmUKKyAgICAgICB1bnNpZ25lZCBpbnQgKDEpIHB0bF9wcmVz ZW50X2ZsYWcgKi8KKyAgICBhdmlvX3c4KHBiLCB2dmNjLT5sZW5ndGhTaXplTWludXNPbmUgPDwg MSB8IHZ2Y2MtPnB0bF9wcmVzZW50X2ZsYWcgfCAweGY4KTsKKworICAgIGlmICh2dmNjLT5wdGxf cHJlc2VudF9mbGFnKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIHVuc2lnbmVkIGludCg5KSBv bHNfaWR4OworICAgICAgICAgKiB1bnNpZ25lZCBpbnQoMykgbnVtX3N1YmxheWVyczsKKyAgICAg ICAgICogdW5zaWduZWQgaW50KDIpIGNvbnN0YW50X2ZyYW1lX3JhdGU7CisgICAgICAgICAqIHVu c2lnbmVkIGludCgyKSBjaHJvbWFfZm9ybWF0X2lkYzsgICAgICovCisgICAgICAgIGF2aW9fd2Ix NihwYiwKKyAgICAgICAgICAgICAgICAgIHZ2Y2MtPm9sc19pZHggPDwgNyB8IHZ2Y2MtPm51bV9z dWJsYXllcnMgPDwgNCB8IHZ2Y2MtPgorICAgICAgICAgICAgICAgICAgY29uc3RhbnRfZnJhbWVf cmF0ZSA8PCAyIHwgdnZjYy0+Y2hyb21hX2Zvcm1hdF9pZGMpOworCisgICAgICAgIC8qIHVuc2ln bmVkIGludCgzKSBiaXRfZGVwdGhfbWludXM4OworICAgICAgICAgICBiaXQoNSkgcmVzZXJ2ZWQg PSDigJgxMTExMeKAmWI7ICovCisgICAgICAgIGF2aW9fdzgocGIsIHZ2Y2MtPmJpdF9kZXB0aF9t aW51czggPDwgNSB8IDB4MWYpOworCisgICAgICAgIC8vVlZDUFRMUmVjb3JkCisKKyAgICAgICAg LyogYml0KDIpIHJlc2VydmVkID0g4oCYMDDigJliOworICAgICAgICAgICB1bnNpZ25lZCBpbnQg KDYpIG51bV9ieXRlc19jb25zdHJhaW50X2luZm8gKi8KKyAgICAgICAgYXZpb193OChwYiwgdnZj Yy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50X2luZm8gJiAweDNmKTsKKworICAgICAgICAvKiB1 bnNpZ25lZCBpbnQgKDcpIGdlbmVyYWxfcHJvZmlsZV9pZGMKKyAgICAgICAgICAgdW5zaWduZWQg aW50ICgxKSBnZW5lcmFsX3RpZXJfZmxhZyAqLworICAgICAgICBhdmlvX3c4KHBiLAorICAgICAg ICAgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX3Byb2ZpbGVfaWRjIDw8IDEgfCB2dmNjLT5wdGwu Z2VuZXJhbF90aWVyX2ZsYWcpOworCisgICAgICAgIC8qIHVuc2lnbmVkIGludCAoOCkgZ2VuZXJh bF9sZXZlbF9pZGMgKi8KKyAgICAgICAgYXZpb193OChwYiwgdnZjYy0+cHRsLmdlbmVyYWxfbGV2 ZWxfaWRjKTsKKworICAgICAgICAvKgorICAgICAgICAgKiB1bnNpZ25lZCBpbnQgKDEpIHB0bF9m cmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZworICAgICAgICAgKiB1bnNpZ25lZCBpbnQgKDEpIHB0 bF9tdWx0aWxheWVyX2VuYWJsZWRfZmxhZworICAgICAgICAgKiB1bnNpZ25lZCBpbnQgKDgqbnVt X2J5dGVzX2NvbnN0cmFpbnRfaW5mbyAtMikgZ2VuZXJhbF9jb25zdHJhaW50X2luZm8gKi8KKyAg ICAgICAgYnVmID0KKyAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopIG1hbGxvYyhzaXplb2Yo dW5zaWduZWQgY2hhcikgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2 Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZvKTsKKyAgICAgICAgKmJ1ZiA9IHZ2Y2Mt PnB0bC5wdGxfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWcgPDwgdnZjYy0+cHRsLgorICAgICAg ICAgICAgbnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyAqIDggLSAxIHwgdnZjYy0+cHRsLgorICAg ICAgICAgICAgcHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnIDw8IHZ2Y2MtPnB0bC5udW1fYnl0 ZXNfY29uc3RyYWludF9pbmZvICoKKyAgICAgICAgICAgIDggLSAyIHwgKnZ2Y2MtPnB0bC5nZW5l cmFsX2NvbnN0cmFpbnRfaW5mbyA+PiAyOworICAgICAgICBhdmlvX3dyaXRlKHBiLCBidWYsIHZ2 Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZvKTsKKyAgICAgICAgZnJlZShidWYpOwor CisgICAgICAgIGlmICh2dmNjLT5udW1fc3VibGF5ZXJzID4gMSkgeworICAgICAgICAgICAgdWlu dDhfdCBwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFncyA9IDA7CisgICAgICAgICAgICBm b3IgKGludCBpID0gdnZjYy0+bnVtX3N1YmxheWVycyAtIDI7IGkgPj0gMDsgaS0tKSB7CisgICAg ICAgICAgICAgICAgcHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ3MgPQorICAgICAgICAg ICAgICAgICAgICAocHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ3MgPDwgMSB8IHZ2Y2Mt PnB0bC4KKyAgICAgICAgICAgICAgICAgICAgIHB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2Zs YWdbaV0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXZpb193OChwYiwgcHRsX3N1Ymxh eWVyX2xldmVsX3ByZXNlbnRfZmxhZ3MpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChpbnQg aSA9IHZ2Y2MtPm51bV9zdWJsYXllcnMgLSAyOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAg aWYgKHZ2Y2MtPnB0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ldKQorICAgICAg ICAgICAgICAgIGF2aW9fdzgocGIsIHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0pOwor ICAgICAgICB9CisKKyAgICAgICAgLyogdW5zaWduZWQgaW50KDgpIG51bV9zdWJfcHJvZmlsZXM7 ICovCisgICAgICAgIGF2aW9fdzgocGIsIHZ2Y2MtPnB0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcyk7 CisKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB2dmNjLT5wdGwucHRsX251bV9zdWJfcHJv ZmlsZXM7IGorKykgeworICAgICAgICAgICAgLyogdW5zaWduZWQgaW50KDMyKSBnZW5lcmFsX3N1 Yl9wcm9maWxlX2lkY1tqXTsgKi8KKyAgICAgICAgICAgIGF2aW9fd2IzMihwYiwgdnZjYy0+cHRs LmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjW2pdKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vRW5k IG9mIFZ2Y1BUTFJlY29yZAorCisgICAgICAgIC8qCisgICAgICAgICAqIHVuc2lnbmVkIGludCgx NikgbWF4X3BpY3R1cmVfd2lkdGg7Ki8KKyAgICAgICAgYXZpb193YjE2KHBiLCB2dmNjLT5tYXhf cGljdHVyZV93aWR0aCk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogdW5zaWduZWQgaW50KDE2 KSBtYXhfcGljdHVyZV9oZWlnaHQ7Ki8KKyAgICAgICAgYXZpb193YjE2KHBiLCB2dmNjLT5tYXhf cGljdHVyZV9oZWlnaHQpOworCisgICAgICAgIC8qCisgICAgICAgICAqIHVuc2lnbmVkIGludCgx NikgYXZnX2ZyYW1lX3JhdGU7ICovCisgICAgICAgIGF2aW9fd2IxNihwYiwgdnZjYy0+YXZnX2Zy YW1lX3JhdGUpOworICAgIH0KKworICAgIC8qIHVuc2lnbmVkIGludCg4KSBudW1fb2ZfYXJyYXlz OyAqLworICAgIGF2aW9fdzgocGIsIHZ2Y2MtPm51bV9vZl9hcnJheXMpOworCisgICAgZm9yIChp ID0gMDsgaSA8IHZ2Y2MtPm51bV9vZl9hcnJheXM7IGkrKykgeworICAgICAgICAvKgorICAgICAg ICAgKiBiaXQoMSkgYXJyYXlfY29tcGxldGVuZXNzOworICAgICAgICAgKiB1bnNpZ25lZCBpbnQo MikgcmVzZXJ2ZWQgPSAwOworICAgICAgICAgKiB1bnNpZ25lZCBpbnQoNSkgTkFMX3VuaXRfdHlw ZTsKKyAgICAgICAgICovCisgICAgICAgIGF2aW9fdzgocGIsIHZ2Y2MtPmFycmF5W2ldLmFycmF5 X2NvbXBsZXRlbmVzcyA8PCA3IHwKKyAgICAgICAgICAgICAgICB2dmNjLT5hcnJheVtpXS5OQUxf dW5pdF90eXBlICYgMHgxZik7CisgICAgICAgIC8qIHVuc2lnbmVkIGludCgxNikgbnVtX25hbHVz OyAqLworICAgICAgICBpZiAodnZjYy0+YXJyYXlbaV0uTkFMX3VuaXRfdHlwZSAhPSBWVkNfRENJ X05VVCAmJgorICAgICAgICAgICAgdnZjYy0+YXJyYXlbaV0uTkFMX3VuaXRfdHlwZSAhPSBWVkNf T1BJX05VVCkKKyAgICAgICAgICAgIGF2aW9fd2IxNihwYiwgdnZjYy0+YXJyYXlbaV0ubnVtX25h bHVzKTsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1czsg aisrKSB7CisgICAgICAgICAgICAvKiB1bnNpZ25lZCBpbnQoMTYpIG5hbF91bml0X2xlbmd0aDsg Ki8KKyAgICAgICAgICAgIGF2aW9fd2IxNihwYiwgdnZjYy0+YXJyYXlbaV0ubmFsX3VuaXRfbGVu Z3RoW2pdKTsKKworICAgICAgICAgICAgLyogYml0KDgqbmFsX3VuaXRfbGVuZ3RoKSBuYWxfdW5p dDsgKi8KKyAgICAgICAgICAgIGF2aW9fd3JpdGUocGIsIHZ2Y2MtPmFycmF5W2ldLm5hbF91bml0 W2pdLAorICAgICAgICAgICAgICAgICAgICAgICB2dmNjLT5hcnJheVtpXS5uYWxfdW5pdF9sZW5n dGhbal0pOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBmZl92 dmNfYW5uZXhiMm1wNChBVklPQ29udGV4dCAqcGIsIGNvbnN0IHVpbnQ4X3QgKmJ1Zl9pbiwKKyAg ICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSwgaW50IGZpbHRlcl9wcywgaW50ICpwc19jb3Vu dCkKK3sKKyAgICBpbnQgbnVtX3BzID0gMCwgcmV0ID0gMDsKKyAgICB1aW50OF90ICpidWYsICpl bmQsICpzdGFydCA9IE5VTEw7CisKKyAgICBpZiAoIWZpbHRlcl9wcykgeworICAgICAgICByZXQg PSBmZl9hdmNfcGFyc2VfbmFsX3VuaXRzKHBiLCBidWZfaW4sIHNpemUpOworICAgICAgICBnb3Rv IGVuZDsKKyAgICB9CisKKyAgICByZXQgPSBmZl9hdmNfcGFyc2VfbmFsX3VuaXRzX2J1ZihidWZf aW4sICZzdGFydCwgJnNpemUpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICBnb3RvIGVuZDsK KworICAgIHJldCA9IDA7CisgICAgYnVmID0gc3RhcnQ7CisgICAgZW5kID0gc3RhcnQgKyBzaXpl OworCisgICAgd2hpbGUgKGVuZCAtIGJ1ZiA+IDQpIHsKKyAgICAgICAgdWludDMyX3QgbGVuID0g RkZNSU4oQVZfUkIzMihidWYpLCBlbmQgLSBidWYgLSA0KTsKKyAgICAgICAgdWludDhfdCB0eXBl ID0gKGJ1Zls1XSA+PiAzKTsKKworICAgICAgICBidWYgKz0gNDsKKworICAgICAgICBzd2l0Y2gg KHR5cGUpIHsKKyAgICAgICAgY2FzZSBWVkNfVlBTX05VVDoKKyAgICAgICAgY2FzZSBWVkNfU1BT X05VVDoKKyAgICAgICAgY2FzZSBWVkNfUFBTX05VVDoKKyAgICAgICAgICAgIG51bV9wcysrOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXQgKz0g NCArIGxlbjsKKyAgICAgICAgICAgIGF2aW9fd2IzMihwYiwgbGVuKTsKKyAgICAgICAgICAgIGF2 aW9fd3JpdGUocGIsIGJ1ZiwgbGVuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK KyAgICAgICAgYnVmICs9IGxlbjsKKyAgICB9CisKKyAgZW5kOgorICAgIGF2X2ZyZWUoc3RhcnQp OworICAgIGlmIChwc19jb3VudCkKKyAgICAgICAgKnBzX2NvdW50ID0gbnVtX3BzOworICAgIHJl dHVybiByZXQ7Cit9CisKK2ludCBmZl92dmNfYW5uZXhiMm1wNF9idWYoY29uc3QgdWludDhfdCAq YnVmX2luLCB1aW50OF90ICoqYnVmX291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 ICpzaXplLCBpbnQgZmlsdGVyX3BzLCBpbnQgKnBzX2NvdW50KQoreworICAgIEFWSU9Db250ZXh0 ICpwYjsKKyAgICBpbnQgcmV0OworCisgICAgcmV0ID0gYXZpb19vcGVuX2R5bl9idWYoJnBiKTsK KyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldCA9IGZmX3Z2 Y19hbm5leGIybXA0KHBiLCBidWZfaW4sICpzaXplLCBmaWx0ZXJfcHMsIHBzX2NvdW50KTsKKyAg ICBpZiAocmV0IDwgMCkgeworICAgICAgICBmZmlvX2ZyZWVfZHluX2J1ZigmcGIpOworICAgICAg ICByZXR1cm4gcmV0OworICAgIH0KKworICAgICpzaXplID0gYXZpb19jbG9zZV9keW5fYnVmKHBi LCBidWZfb3V0KTsKKworICAgIHJldHVybiAwOworfQorCitpbnQgZmZfaXNvbV93cml0ZV92dmNj KEFWSU9Db250ZXh0ICpwYiwgY29uc3QgdWludDhfdCAqZGF0YSwKKyAgICAgICAgICAgICAgICAg ICAgICAgaW50IHNpemUsIGludCBwc19hcnJheV9jb21wbGV0ZW5lc3MpCit7CisgICAgVlZDRGVj b2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgdnZjYzsKKyAgICB1aW50OF90ICpidWYsICplbmQsICpz dGFydDsKKyAgICBpbnQgcmV0OworCisgICAgaWYgKHNpemUgPCA2KSB7CisgICAgICAgIC8qIFdl IGNhbid0IHdyaXRlIGEgdmFsaWQgdnZjYyBmcm9tIHRoZSBwcm92aWRlZCBkYXRhICovCisgICAg ICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIH0gZWxzZSBpZiAoKCpkYXRhICYg MHhmOCkgPT0gMHhmOCkgeworICAgICAgICAvKiBEYXRhIGlzIGFscmVhZHkgdnZjYy1mb3JtYXR0 ZWQgKi8KKyAgICAgICAgYXZpb193cml0ZShwYiwgZGF0YSwgc2l6ZSk7CisgICAgICAgIHJldHVy biAwOworICAgIH0gZWxzZSBpZiAoIShBVl9SQjI0KGRhdGEpID09IDEgfHwgQVZfUkIzMihkYXRh KSA9PSAxKSkgeworICAgICAgICAvKiBOb3QgYSB2YWxpZCBBbm5leCBCIHN0YXJ0IGNvZGUgcHJl Zml4ICovCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIH0KKworICAg IHJldCA9IGZmX2F2Y19wYXJzZV9uYWxfdW5pdHNfYnVmKGRhdGEsICZzdGFydCwgJnNpemUpOwor ICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgdnZjY19pbml0KCZ2 dmNjKTsKKworICAgIGJ1ZiA9IHN0YXJ0OworICAgIGVuZCA9IHN0YXJ0ICsgc2l6ZTsKKworICAg IHdoaWxlIChlbmQgLSBidWYgPiA0KSB7CisgICAgICAgIHVpbnQzMl90IGxlbiA9IEZGTUlOKEFW X1JCMzIoYnVmKSwgZW5kIC0gYnVmIC0gNCk7CisgICAgICAgIHVpbnQ4X3QgdHlwZSA9IChidWZb NV0gPj4gMyk7CisKKyAgICAgICAgYnVmICs9IDQ7CisKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7 CisgICAgICAgIGNhc2UgVlZDX09QSV9OVVQ6CisgICAgICAgIGNhc2UgVlZDX1ZQU19OVVQ6Cisg ICAgICAgIGNhc2UgVlZDX1NQU19OVVQ6CisgICAgICAgIGNhc2UgVlZDX1BQU19OVVQ6CisgICAg ICAgIGNhc2UgVlZDX1BSRUZJWF9TRUlfTlVUOgorICAgICAgICBjYXNlIFZWQ19TVUZGSVhfU0VJ X05VVDoKKyAgICAgICAgICAgIHJldCA9IHZ2Y2NfYWRkX25hbF91bml0KGJ1ZiwgbGVuLCBwc19h cnJheV9jb21wbGV0ZW5lc3MsICZ2dmNjKTsKKyAgICAgICAgICAgIGlmIChyZXQgPCAwKQorICAg ICAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1 bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGJ1ZiArPSBsZW47 CisgICAgfQorCisgICAgcmV0ID0gdnZjY193cml0ZShwYiwgJnZ2Y2MpOworCisgIGVuZDoKKyAg ICB2dmNjX2Nsb3NlKCZ2dmNjKTsKKyAgICBhdl9mcmVlKHN0YXJ0KTsKKyAgICByZXR1cm4gcmV0 OworfQpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvdnZjLmggYi9saWJhdmZvcm1hdC92dmMuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4xMWM3MDA1NDBmCi0tLSAvZGV2 L251bGwKKysrIGIvbGliYXZmb3JtYXQvdnZjLmgKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIEgu MjY2IC8gVlZDIGhlbHBlciBmdW5jdGlvbnMgZm9yIG11eGVycworICoKKyAqIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9m IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK KyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcg d2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5k YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg MDIxMTAtMTMwMSBVU0EKKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBpbnRlcm5hbCBoZWFkZXIg Zm9yIEguMjY2L1ZWQyAoZGUpbXV4ZXIgdXRpbGl0aWVzCisgKi8KKworI2lmbmRlZiBBVkZPUk1B VF9WVkNfSAorI2RlZmluZSBBVkZPUk1BVF9WVkNfSAorCisjaW5jbHVkZSA8c3RkaW50Lmg+Cisj aW5jbHVkZSAiYXZpby5oIgorCisvKioKKyAqIFdyaXRlcyBBbm5leCBCIGZvcm1hdHRlZCBILjI2 Ni9WVkMgTkFMIHVuaXRzIHRvIHRoZSBwcm92aWRlZCBBVklPQ29udGV4dC4KKyAqCisgKiBUaGUg TkFMIHVuaXRzIGFyZSBjb252ZXJ0ZWQgdG8gYW4gTVA0LWNvbXBhdGlibGUgZm9ybWF0IChzdGFy dCBjb2RlIHByZWZpeGVzCisgKiBhcmUgcmVwbGFjZWQgYnkgNC1ieXRlIHNpemUgZmllbGRzLCBh cyBwZXIgSVNPL0lFQyAxNDQ5Ni0xNSkuCisgKgorICogSWYgZmlsdGVyX3BzIGlzIG5vbi16ZXJv LCBhbnkgVlZDIHBhcmFtZXRlciBzZXRzIGZvdW5kIGluIHRoZSBpbnB1dCB3aWxsIGJlCisgKiBk aXNjYXJkZWQsIGFuZCAqcHNfY291bnQgd2lsbCBiZSBzZXQgdG8gdGhlIG51bWJlciBvZiBkaXNj YXJkZWQgUFMgTkFMIHVuaXRzLgorICoKKyAqIEBwYXJhbSBwYiBhZGRyZXNzIG9mIHRoZSBBVklP Q29udGV4dCB3aGVyZSB0aGUgZGF0YSBzaGFsbCBiZSB3cml0dGVuCisgKiBAcGFyYW0gYnVmX2lu IGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciBob2xkaW5nIHRoZSBpbnB1dCBkYXRhCisgKiBAcGFyYW0g c2l6ZSBzaXplIChpbiBieXRlcykgb2YgdGhlIGlucHV0IGJ1ZmZlcgorICogQHBhcmFtIGZpbHRl cl9wcyB3aGV0aGVyIHRvIHdyaXRlIHBhcmFtZXRlciBzZXQgTkFMIHVuaXRzIHRvIHRoZSBvdXRw dXQgKDApCisgKiAgICAgICAgb3IgdG8gZGlzY2FyZCB0aGVtIChub24temVybykKKyAqIEBwYXJh bSBwc19jb3VudCBhZGRyZXNzIG9mIHRoZSB2YXJpYWJsZSB3aGVyZSB0aGUgbnVtYmVyIG9mIGRp c2NhcmRlZAorICogICAgICAgIHBhcmFtZXRlciBzZXQgTkFMIHVuaXRzIHNoYWxsIGJlIHdyaXR0 ZW4sIG1heSBiZSBOVUxMCisgKiBAcmV0dXJuIHRoZSBhbW91bnQgKGluIGJ5dGVzKSBvZiBkYXRh IHdyaXR0ZW4gaW4gY2FzZSBvZiBzdWNjZXNzLCBhIG5lZ2F0aXZlCisgKiAgICAgICAgIHZhbHVl IGNvcnJlc3BvbmRpbmcgdG8gYW4gQVZFUlJPUiBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZQorICov CitpbnQgZmZfdnZjX2FubmV4YjJtcDQoQVZJT0NvbnRleHQgKnBiLCBjb25zdCB1aW50OF90ICpi dWZfaW4sCisgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUsIGludCBmaWx0ZXJfcHMsIGlu dCAqcHNfY291bnQpOworCisvKioKKyAqIFdyaXRlcyBBbm5leCBCIGZvcm1hdHRlZCBILjI2Ni9W VkMgTkFMIHVuaXRzIHRvIGEgZGF0YSBidWZmZXIuCisgKgorICogVGhlIE5BTCB1bml0cyBhcmUg Y29udmVydGVkIHRvIGFuIE1QNC1jb21wYXRpYmxlIGZvcm1hdCAoc3RhcnQgY29kZSBwcmVmaXhl cworICogYXJlIHJlcGxhY2VkIGJ5IDQtYnl0ZSBzaXplIGZpZWxkcywgYXMgcGVyIElTTy9JRUMg MTQ0OTYtMTUpLgorICoKKyAqIElmIGZpbHRlcl9wcyBpcyBub24temVybywgYW55IFZWQyBwYXJh bWV0ZXIgc2V0cyBmb3VuZCBpbiB0aGUgaW5wdXQgd2lsbCBiZQorICogZGlzY2FyZGVkLCBhbmQg KnBzX2NvdW50IHdpbGwgYmUgc2V0IHRvIHRoZSBudW1iZXIgb2YgZGlzY2FyZGVkIFBTIE5BTCB1 bml0cy4KKyAqCisgKiBPbiBzdWNjZXNzLCAqc2l6ZSBob2xkcyB0aGUgc2l6ZSAoaW4gYnl0ZXMp IG9mIHRoZSBvdXRwdXQgZGF0YSBidWZmZXIuCisgKgorICogQHBhcmFtIGJ1Zl9pbiBhZGRyZXNz IG9mIHRoZSBidWZmZXIgaG9sZGluZyB0aGUgaW5wdXQgZGF0YQorICogQHBhcmFtIHNpemUgYWRk cmVzcyBvZiB0aGUgdmFyaWFibGUgaG9sZGluZyB0aGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBp bnB1dAorICogICAgICAgIGJ1ZmZlciAob24gaW5wdXQpIGFuZCBvZiB0aGUgb3V0cHV0IGJ1ZmZl ciAob24gc3VjY2VzcykKKyAqIEBwYXJhbSBidWZfb3V0IG9uIHN1Y2Nlc3MsIGFkZHJlc3Mgb2Yg dGhlIHZhcmlhYmxlIGhvbGRpbmcgdGhlIGFkZHJlc3Mgb2YKKyAqICAgICAgICB0aGUgb3V0cHV0 IGJ1ZmZlcgorICogQHBhcmFtIGZpbHRlcl9wcyB3aGV0aGVyIHRvIHdyaXRlIHBhcmFtZXRlciBz ZXQgTkFMIHVuaXRzIHRvIHRoZSBvdXRwdXQgKDApCisgKiAgICAgICAgb3IgdG8gZGlzY2FyZCB0 aGVtIChub24temVybykKKyAqIEBwYXJhbSBwc19jb3VudCBhZGRyZXNzIG9mIHRoZSB2YXJpYWJs ZSB3aGVyZSB0aGUgbnVtYmVyIG9mIGRpc2NhcmRlZAorICogICAgICAgIHBhcmFtZXRlciBzZXQg TkFMIHVuaXRzIHNoYWxsIGJlIHdyaXR0ZW4sIG1heSBiZSBOVUxMCisgKiBAcmV0dXJuIDAgaW4g Y2FzZSBvZiBzdWNjZXNzLCBhIG5lZ2F0aXZlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gYW4gQVZF UlJPUgorICogICAgICAgICBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZQorICogQG5vdGUgKmJ1Zl9v dXQgd2lsbCBiZSB0cmVhdGVkIGFzIHVuaW5pdGlhbGl6ZWQgb24gaW5wdXQgYW5kIHdvbid0IGJl IGZyZWVkLgorICovCitpbnQgZmZfdnZjX2FubmV4YjJtcDRfYnVmKGNvbnN0IHVpbnQ4X3QgKmJ1 Zl9pbiwgdWludDhfdCAqKmJ1Zl9vdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAq c2l6ZSwgaW50IGZpbHRlcl9wcywgaW50ICpwc19jb3VudCk7CisKKy8qKgorICogV3JpdGVzIEgu MjY2L1ZWQyBleHRyYWRhdGEgKHBhcmFtZXRlciBzZXRzLCBkZWNsYXJhdGl2ZSBTRUkgTkFMIHVu aXRzKSB0bworICogdGhlIHByb3ZpZGVkIEFWSU9Db250ZXh0LgorICoKKyAqIElmIHRoZSBleHRy YWRhdGEgaXMgQW5uZXggQiBmb3JtYXQsIGl0IGdldHMgY29udmVydGVkIHRvIHZ2Y0MgZm9ybWF0 IGJlZm9yZQorICogd3JpdGluZy4KKyAqCisgKiBAcGFyYW0gcGIgYWRkcmVzcyBvZiB0aGUgQVZJ T0NvbnRleHQgd2hlcmUgdGhlIHZ2Y0Mgc2hhbGwgYmUgd3JpdHRlbgorICogQHBhcmFtIGRhdGEg YWRkcmVzcyBvZiB0aGUgYnVmZmVyIGhvbGRpbmcgdGhlIGRhdGEgbmVlZGVkIHRvIHdyaXRlIHRo ZSB2dmNDCisgKiBAcGFyYW0gc2l6ZSBzaXplIChpbiBieXRlcykgb2YgdGhlIGRhdGEgYnVmZmVy CisgKiBAcGFyYW0gcHNfYXJyYXlfY29tcGxldGVuZXNzIHdoZXRoZXIgYWxsIHBhcmFtZXRlciBz ZXRzIGFyZSBpbiB0aGUgdnZjQyAoMSkKKyAqICAgICAgICBvciB0aGVyZSBtYXkgYmUgYWRkaXRp b25hbCBwYXJhbWV0ZXIgc2V0cyBpbiB0aGUgYml0c3RyZWFtICgwKQorICogQHJldHVybiA+PTAg aW4gY2FzZSBvZiBzdWNjZXNzLCBhIG5lZ2F0aXZlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gYW4g QVZFUlJPUgorICogICAgICAgICBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZQorICovCitpbnQgZmZf aXNvbV93cml0ZV92dmNjKEFWSU9Db250ZXh0ICpwYiwgY29uc3QgdWludDhfdCAqZGF0YSwKKyAg ICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUsIGludCBwc19hcnJheV9jb21wbGV0ZW5lc3Mp OworCisjZW5kaWYgLyogQVZGT1JNQVRfVlZDX0ggKi8KLS0gCjIuMjUuMQoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcg bGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9s aXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBv ciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5z dWJzY3JpYmUiLgo=