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 CD09D47EF0 for ; Sun, 31 Dec 2023 08:21:41 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E5F4D68CE3E; Sun, 31 Dec 2023 10:20:20 +0200 (EET) Received: from APC01-PSA-obe.outbound.protection.outlook.com (mail-psaapc01olkn2068.outbound.protection.outlook.com [40.92.52.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B0E2F68CD8D for ; Sun, 31 Dec 2023 10:20:09 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=N9KDa9QQeqTYTee9JS8meaGZwBkk1KH+icwXGgF1cUCFddJ6kNqyZBGecZbxRQqxYC1Joa6DZhrvOcnCJP0vGrHFp9f8N/abymUDVk/BHf+8+tfMXXpcqmsMsf+gBMe94XIf2JwyXxafXEfEIjjvvC2hSRfiDa2hpOy+kQQOpVxzVOsgF5z+zro9elNjpKZp8FLzQcNWw9C4H2o8ft7UWnpqB0r7F9QMA6pccUSVgPV6MBFLbadn8KsDYmD/0QRcQXJjaXHOrDgOv7BXw08LzPXPSqyT8tkv51Mx8JANKUBL2aU7ZTZXyh6Eu/Owin/rVeiNyUjB8jut5RpYVpdh3g== 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=rFvNzrizeJuIDnvnqv1w1Ts4jMMmdU015tJAf9Kgou4=; b=eYvdC6d4l3YkGD6kjvvWDqKYKGsnuA3sFhKXyZjEG0OHMFf7Yb47fiOpncLua1bzE7r+HPkNAE2s3a+hfD3yhvxrNxLCfQuphL8BXmgasnrcSMnXQrbUi9fATMECYBBtzDGLKMOmcN5MUDCoKIVEbAZfAF/LnQokz8CYKhKwCsyZHKJ1EjvxsFnQBYvOiucd84mRBSJi2gE84XKl+5+aakO7sVNwqpcG8NlSrP7ACqmcwtrS4ZUtvUvcab1mGqHaXNeXPjb3kA2aiQLCevw3da06ThNOONTD3bXzu53F052cLbcraP1Nmm3YeD7bksIBtIpxtvnds9Bs64M1xjiQvA== 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=rFvNzrizeJuIDnvnqv1w1Ts4jMMmdU015tJAf9Kgou4=; b=TVbV8wCC8+CSoLifgeDcyfFs9iGXUhiO2w74ciozNY66ZDu/gpQLrWGqzwdi9NR1AN59tw3CWiFWiA5ExYG/R7mzGGa+Naoh77To0YB7eB9FuwkCD93QDyJmXe+Yq/TkgsgFQN/FYggap1uanMZX7KXLTGchdJuUQm0I0AH3etQTZ/PI31jqMSEMyIBPtS5eW2gmPlpfImjaHe1RMjV+/Mp3BLLQeoiFBm1Rqtiwze9SD54PMvYkUE22KKwhxChgWM3yAz0Bw64Ddg1bcCuGHeI6iYjgWX1S4nCP+cNsg/iQO55rKZBA9GGZNCeNSz7Na/XHNlHjf4Q0CFPOQQMfCQ== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by JH0PR06MB6367.apcprd06.prod.outlook.com (2603:1096:990:c::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7135.21; Sun, 31 Dec 2023 08:19:51 +0000 Received: from TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::e139:fd7a:1b66:a3f7]) by TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::e139:fd7a:1b66:a3f7%6]) with mapi id 15.20.7135.023; Sun, 31 Dec 2023 08:19:51 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sun, 31 Dec 2023 16:18:53 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231231081858.1704-1-nuomi2021@gmail.com> References: <20231231081858.1704-1-nuomi2021@gmail.com> X-TMN: [0AiW9c/Kbzuwmqet7pxxLDN5S5bylvoe] X-ClientProxiedBy: SI2PR02CA0039.apcprd02.prod.outlook.com (2603:1096:4:196::9) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20231231081858.1704-9-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|JH0PR06MB6367:EE_ X-MS-Office365-Filtering-Correlation-Id: b3089a88-fa6d-4832-cdaa-08dc09d9426c X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Z+IercmqZGlDN4lwAyiurKPGDm4Br0wea9XBJJl9IPwZFDptlW4txn2Los7haMVLQELzSlX6kmcPKd/hux8DWc1yCQND3XUsWggaI2CxQEg6dOM9qqZtseiKMjdGpfOI1rkg5q/ItAniXN4Ri72SnXui+6ociC3jwzloXDfGRMuh0uSphAzIT1RwyDiKpKajg+iwKUEUhEliDkOpg2ejp/V4kAzeq8YE0+p11KveJunYG75DJ23odJojyORKy4jFkf1b+I462U3zbcCzpX/hBKX9fzmCoW9qnxaE10ACF7zyqBCHVrAPWhVXAE3mlBcQEdK18XUJngChKBEFsR1m4OBv0Ey9wIzaIAUGlsbJQ9WHFgv/LzvESS+YwbLZFsBeySH0dA9CMDX0BYmRgV7GcZ4gNhDaqlWDuGrknwuOhqdkNDfhQPxGj0jSzXftcsn7MeX58Hoi2eufuifMHXJ3EqCZdvDZ6hZlC+fcbDvTPxCbfhzKGxyiLUXoDL9SuV7V3WJt77UmN1gLCSqVFJ3zsZbEBXSVdSAtS7ZdP6ox28BLAIPFTzbNA4xQH742zHMwJWjXPXYmGTiKtLfOFxwaBjQPs25eU51K1H2dEjXjJ+D2dDdTBGnKWx+fLEdCXvc4 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dEx3c3hnTjE4TmxLeUZlSFd6Q3JjaHpPZXZ4dDVKUjZEQUg5R3F0Z0RPZFhZ?= =?utf-8?B?aGlON0pyUWRhRklKdmxLYXNwNWVUcVZTZjZhVk01UzVpdk1Wbm45UmZKSjRR?= =?utf-8?B?VUtjUDlDSUxhZGM0eEFhc0lMSTFYMHkzN1lMdTNwL0d0VG4yL214QXNIV2Fn?= =?utf-8?B?SEluaE1PM0tvSGExZm8xMFVDdkdRSWVHZWd0MTYva0E3dWU3WW1wZDd5RHQ0?= =?utf-8?B?Sk94dFhQbjRJUlNBTzRMZnJXSnJIYkdVSGxDSS9tb2xLVVd2RmdoRjExbXkx?= =?utf-8?B?ajlqRkcwMzBkSUVqOEg5d1E4c3F6L2JYQVQ0MWJ1djRMd3VUTisxZEl4Qyt6?= =?utf-8?B?ZTAvSG5YTWRWNnhsTk9NSWV3M2VPS0l1eHYxVWFvVjgxVktpaGxVWkRmZ2dh?= =?utf-8?B?TW9WdU5oS0FkMUJ6dWRpRFM4OTg2ZHFxdDhPQ0tOR3QzU0dTeG9ZRnYxVzRB?= =?utf-8?B?a0RrRUtLL0J0RkF1Tnd5R1RXQlNoUjRnZmFlSGV0OVpnTEdUMlpMRzRSNjNt?= =?utf-8?B?RS9KYnpIY1VOMm13WEVJdnFVcDZITUVPUENvVHExck5oUTE3dC9PeER6ZTlX?= =?utf-8?B?YmFHSVplQ3VYQkJaNkptem9wUmtVUGozbWlZQzRySktZa0xyNTZQL2NBVGpE?= =?utf-8?B?cUpDbVdJVlhpZTNzUDRNQmh5OGhMNEdiMjdLQWdCRjRLNGoxUGdmLzdQSWli?= =?utf-8?B?WnVXR0ZzY29OZW1WRnRzVkFacUZacXI1MzVENTNBTi9wemx2NjNPMkxlUFR0?= =?utf-8?B?Q2dhcDg3eWZDY1RTQ01qSzJrUWdmNnI5T0xCUWNZN3JNeDFtWVNIbTVoYkM0?= =?utf-8?B?WWZoUGk2UkJ3Vk5paW9CaUJtU2pldWJUSkJXSVZQK3N1NWtmSFp1M0VLZUJS?= =?utf-8?B?QVBzZkZ3emY3dmlHMVZFRDE4RnZjLzRGdWlhVWNpYVBzWmNPR2FrdmtVRlNE?= =?utf-8?B?eWZORWFaRjYzK1h2WE10NElYT1VNOGhrQVA1Tkl1SExJdUt4T0J3aHRPK1RF?= =?utf-8?B?aGsvQ2UrTWZoclJOR25HQlEzdWdxMzgrSDZUOTdNQ05uTHlqWTdJMVJYWDg2?= =?utf-8?B?QWowTWNtVUszTGlxUWFCMXR6eFpaLytIVkpKWVVIK3hwNXU1SEI1WXpRaXF3?= =?utf-8?B?T1pCOXh3RmRObjZ2bHB3Uzl3ZmdUSXJvc1lhUnNFQkNNbFZ4SHcxelY1Nk1D?= =?utf-8?B?MmQ5TjgybmNEVDVpTkVVNGUrb0ROS0VEaXdHWVUvWUMveExCQldBSnU2ZnFu?= =?utf-8?B?czJGTFM2VzlUQU5ScWRtSEdLeHdVUEl1U3lIUFlrQ25xM09aMnZGeCtoSkRB?= =?utf-8?B?bk5XeEs1ZjgyMmNPWEVGK1JLZTJHdzN3SWlyRThsMlJ0Zzc3OFhFSFRoektT?= =?utf-8?B?OTU3ajBUV01jV0l6RzJUQW8zMzRSQUN1ZXd3aU9DaFdsRVdiWURQYlZ2TlNX?= =?utf-8?B?eDVRejFYUVA5dExPYysxeG1DM3AxRG5XeVl1WjIwVXZUQ3hNenJDaTVEVjVi?= =?utf-8?B?aUh4eUQ3OEtpcHIwUWJPVEF1eW91VnZYeXh3OTg5eTVVWjVmWG85MXN1R200?= =?utf-8?B?emNKWU40T3AvbklkOGhrQTFITmN3Qm00bVp5QXNKZEo0MWZmMkRhMmdRdDdQ?= =?utf-8?B?VmRBWlNadlVZcU1naEY5YjVaQnYyMElUMU9uT2VDZjlNUE92VEVhNkpRYkkv?= =?utf-8?Q?RW7cw5UjPWnYX9F4t0XR?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b3089a88-fa6d-4832-cdaa-08dc09d9426c X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Dec 2023 08:19:50.9094 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: JH0PR06MB6367 Subject: [FFmpeg-devel] [PATCH v8 08/13] vvcdec: add intra prediction X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Nuo Mi Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: LS0tCiBsaWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgIDEgKwogbGliYXZj b2RlYy92dmMvdnZjX2N0dS5jICAgICAgICAgICAgfCAgIDUwICsrCiBsaWJhdmNvZGVjL3Z2Yy92 dmNfY3R1LmggICAgICAgICAgICB8ICAgIDIgKwogbGliYXZjb2RlYy92dmMvdnZjX2ludHJhLmMg ICAgICAgICAgfCAgNzk3ICsrKysrKysrKysrKysrKysrKysrKwogbGliYXZjb2RlYy92dmMvdnZj X2ludHJhLmggICAgICAgICAgfCAgIDQ5ICsrCiBsaWJhdmNvZGVjL3Z2Yy92dmNfaW50cmFfdGVt cGxhdGUuYyB8IDEwMTUgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA2IGZpbGVzIGNoYW5n ZWQsIDE5MTQgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvdnZj L3Z2Y19pbnRyYS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92dmMvdnZjX2ludHJh LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL3Z2Yy92dmNfaW50cmFfdGVtcGxhdGUu YwoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL01ha2VmaWxlIGIvbGliYXZjb2RlYy92dmMv TWFrZWZpbGUKaW5kZXggZDE4ZDFlMGY3ZS4uODFkZjE1ZjZlOCAxMDA2NDQKLS0tIGEvbGliYXZj b2RlYy92dmMvTWFrZWZpbGUKKysrIGIvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUKQEAgLTQsNiAr NCw3IEBAIE9CSlMtJChDT05GSUdfVlZDX0RFQ09ERVIpICAgICAgICAgICs9ICB2dmMvdnZjX2Nh YmFjLm8gICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dnZjL3Z2Y19jdHUubyAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZ2Yy92dmNfZGF0YS5vICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2dmMvdnZjX2ludGVyLm8gICAgICAgICBcCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19pbnRyYS5vICAgICAgICAgXAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2Yy92dmNfaXR4XzFkLm8g ICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dmMvdnZj X212cy5vICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdnZjL3Z2Y19wcy5vICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMv dnZjX2N0dS5jIGIvbGliYXZjb2RlYy92dmMvdnZjX2N0dS5jCmluZGV4IDNkMzFiODYyYWUuLjYx MzhkMmZjOWYgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvdnZjL3Z2Y19jdHUuYworKysgYi9saWJh dmNvZGVjL3Z2Yy92dmNfY3R1LmMKQEAgLTIwLDEwICsyMCw0MSBAQAogICogRm91bmRhdGlvbiwg SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0x MzAxIFVTQQogICovCiAKKyNpbmNsdWRlICJsaWJhdmNvZGVjL3JlZnN0cnVjdC5oIgorCiAjaW5j bHVkZSAidnZjX2NhYmFjLmgiCiAjaW5jbHVkZSAidnZjX2N0dS5oIgogI2luY2x1ZGUgInZ2Y19t dnMuaCIKIAordm9pZCBmZl92dmNfZGVjb2RlX25laWdoYm91cihWVkNMb2NhbENvbnRleHQgKmxj LCBjb25zdCBpbnQgeF9jdGIsIGNvbnN0IGludCB5X2N0YiwKKyAgICBjb25zdCBpbnQgcngsIGNv bnN0IGludCByeSwgY29uc3QgaW50IHJzKQoreworICAgIFZWQ0ZyYW1lQ29udGV4dCAqZmMgPSBs Yy0+ZmM7CisgICAgY29uc3QgaW50IGN0Yl9zaXplICAgICAgICAgPSBmYy0+cHMuc3BzLT5jdGJf c2l6ZV95OworCisgICAgbGMtPmVuZF9vZl90aWxlc194ID0gZmMtPnBzLnNwcy0+d2lkdGg7Cisg ICAgbGMtPmVuZF9vZl90aWxlc195ID0gZmMtPnBzLnNwcy0+aGVpZ2h0OworICAgIGlmIChmYy0+ cHMucHBzLT5jdGJfdG9fY29sX2JkW3J4XSAhPSBmYy0+cHMucHBzLT5jdGJfdG9fY29sX2JkW3J4 ICsgMV0pCisgICAgICAgIGxjLT5lbmRfb2ZfdGlsZXNfeCA9IEZGTUlOKHhfY3RiICsgY3RiX3Np emUsIGxjLT5lbmRfb2ZfdGlsZXNfeCk7CisgICAgaWYgKGZjLT5wcy5wcHMtPmN0Yl90b19yb3df YmRbcnldICE9IGZjLT5wcy5wcHMtPmN0Yl90b19yb3dfYmRbcnkgKyAxXSkKKyAgICAgICAgbGMt PmVuZF9vZl90aWxlc195ID0gRkZNSU4oeV9jdGIgKyBjdGJfc2l6ZSwgbGMtPmVuZF9vZl90aWxl c195KTsKKworICAgIGxjLT5ib3VuZGFyeV9mbGFncyA9IDA7CisgICAgaWYgKHJ4ID4gMCAmJiBm Yy0+cHMucHBzLT5jdGJfdG9fY29sX2JkW3J4XSAhPSBmYy0+cHMucHBzLT5jdGJfdG9fY29sX2Jk W3J4IC0gMV0pCisgICAgICAgIGxjLT5ib3VuZGFyeV9mbGFncyB8PSBCT1VOREFSWV9MRUZUX1RJ TEU7CisgICAgaWYgKHJ4ID4gMCAmJiBmYy0+dGFiLnNsaWNlX2lkeFtyc10gIT0gZmMtPnRhYi5z bGljZV9pZHhbcnMgLSAxXSkKKyAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzIHw9IEJPVU5EQVJZ X0xFRlRfU0xJQ0U7CisgICAgaWYgKHJ5ID4gMCAmJiBmYy0+cHMucHBzLT5jdGJfdG9fcm93X2Jk W3J5XSAhPSBmYy0+cHMucHBzLT5jdGJfdG9fcm93X2JkW3J5IC0gMV0pCisgICAgICAgIGxjLT5i b3VuZGFyeV9mbGFncyB8PSBCT1VOREFSWV9VUFBFUl9USUxFOworICAgIGlmIChyeSA+IDAgJiYg ZmMtPnRhYi5zbGljZV9pZHhbcnNdICE9IGZjLT50YWIuc2xpY2VfaWR4W3JzIC0gZmMtPnBzLnBw cy0+Y3RiX3dpZHRoXSkKKyAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzIHw9IEJPVU5EQVJZX1VQ UEVSX1NMSUNFOworICAgIGxjLT5jdGJfbGVmdF9mbGFnID0gcnggPiAwICYmICEobGMtPmJvdW5k YXJ5X2ZsYWdzICYgQk9VTkRBUllfTEVGVF9USUxFKTsKKyAgICBsYy0+Y3RiX3VwX2ZsYWcgICA9 IHJ5ID4gMCAmJiAhKGxjLT5ib3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX1VQUEVSX1RJTEUpICYm ICEobGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfVVBQRVJfU0xJQ0UpOworICAgIGxjLT5j dGJfdXBfcmlnaHRfZmxhZyA9IGxjLT5jdGJfdXBfZmxhZyAmJiAoZmMtPnBzLnBwcy0+Y3RiX3Rv X2NvbF9iZFtyeF0gPT0gZmMtPnBzLnBwcy0+Y3RiX3RvX2NvbF9iZFtyeCArIDFdKSAmJgorICAg ICAgICAoZmMtPnBzLnBwcy0+Y3RiX3RvX3Jvd19iZFtyeV0gPT0gZmMtPnBzLnBwcy0+Y3RiX3Rv X3Jvd19iZFtyeSAtIDFdKTsKKyAgICBsYy0+Y3RiX3VwX2xlZnRfZmxhZyA9IGxjLT5jdGJfbGVm dF9mbGFnICYmIGxjLT5jdGJfdXBfZmxhZzsKK30KKwogdm9pZCBmZl92dmNfc2V0X25laWdoYm91 cl9hdmFpbGFibGUoVlZDTG9jYWxDb250ZXh0ICpsYywKICAgICBjb25zdCBpbnQgeDAsIGNvbnN0 IGludCB5MCwgY29uc3QgaW50IHcsIGNvbnN0IGludCBoKQogewpAQCAtMzksNiArNzAsMjUgQEAg dm9pZCBmZl92dmNfc2V0X25laWdoYm91cl9hdmFpbGFibGUoVlZDTG9jYWxDb250ZXh0ICpsYywK ICAgICBsYy0+bmEuY2FuZF91cF9yaWdodCA9IGxjLT5uYS5jYW5kX3VwX3JpZ2h0X3NhcCAmJiAo eDAgKyB3KSA8IGxjLT5lbmRfb2ZfdGlsZXNfeDsKIH0KIAordm9pZCBmZl92dmNfY3R1X2ZyZWVf Y3VzKENUVSAqY3R1KQoreworICAgIENvZGluZ1VuaXQgKipjdXMgID0gJmN0dS0+Y3VzOworICAg IHdoaWxlICgqY3VzKSB7CisgICAgICAgIENvZGluZ1VuaXQgKmN1ICAgICAgICAgID0gKmN1czsK KyAgICAgICAgVHJhbnNmb3JtVW5pdCAqKmhlYWQgICAgPSAmY3UtPnR1cy5oZWFkOworCisgICAg ICAgICpjdXMgPSBjdS0+bmV4dDsKKworICAgICAgICB3aGlsZSAoKmhlYWQpIHsKKyAgICAgICAg ICAgIFRyYW5zZm9ybVVuaXQgKnR1ID0gKmhlYWQ7CisgICAgICAgICAgICAqaGVhZCA9IHR1LT5u ZXh0OworICAgICAgICAgICAgZmZfcmVmc3RydWN0X3VucmVmKCZ0dSk7CisgICAgICAgIH0KKyAg ICAgICAgY3UtPnR1cy50YWlsID0gTlVMTDsKKworICAgICAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYo JmN1KTsKKyAgICB9Cit9CiAKIHZvaWQgZmZfdnZjX2VwX2luaXRfc3RhdF9jb2VmZihFbnRyeVBv aW50ICplcCwKIAljb25zdCBpbnQgYml0X2RlcHRoLCBjb25zdCBpbnQgcGVyc2lzdGVudF9yaWNl X2FkYXB0YXRpb25fZW5hYmxlZF9mbGFnKQpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMvdnZj X2N0dS5oIGIvbGliYXZjb2RlYy92dmMvdnZjX2N0dS5oCmluZGV4IGQzNWI2ODBhZmYuLjQ3Yzlm MTgxYmIgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvdnZjL3Z2Y19jdHUuaAorKysgYi9saWJhdmNv ZGVjL3Z2Yy92dmNfY3R1LmgKQEAgLTQ2MSw2ICs0NjEsOCBAQCB0eXBlZGVmIHN0cnVjdCBBTEZQ YXJhbXMgewogCiAvL3V0aWxzCiB2b2lkIGZmX3Z2Y19zZXRfbmVpZ2hib3VyX2F2YWlsYWJsZShW VkNMb2NhbENvbnRleHQgKmxjLCBpbnQgeDAsIGludCB5MCwgaW50IHcsIGludCBoKTsKK3ZvaWQg ZmZfdnZjX2RlY29kZV9uZWlnaGJvdXIoVlZDTG9jYWxDb250ZXh0ICpsYywgaW50IHhfY3RiLCBp bnQgeV9jdGIsIGludCByeCwgaW50IHJ5LCBpbnQgcnMpOwordm9pZCBmZl92dmNfY3R1X2ZyZWVf Y3VzKENUVSAqY3R1KTsKIHZvaWQgZmZfdnZjX2VwX2luaXRfc3RhdF9jb2VmZihFbnRyeVBvaW50 ICplcCwgaW50IGJpdF9kZXB0aCwgaW50IHBlcnNpc3RlbnRfcmljZV9hZGFwdGF0aW9uX2VuYWJs ZWRfZmxhZyk7CiAKICNlbmRpZiAvLyBBVkNPREVDX1ZWQ19WVkNfQ1RVX0gKZGlmZiAtLWdpdCBh L2xpYmF2Y29kZWMvdnZjL3Z2Y19pbnRyYS5jIGIvbGliYXZjb2RlYy92dmMvdnZjX2ludHJhLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNDNkZTMxMmE3MQotLS0gL2Rl di9udWxsCisrKyBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19pbnRyYS5jCkBAIC0wLDAgKzEsNzk3IEBA CisvKgorICogVlZDIGludHJhIHByZWRpY3Rpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg TnVvIE1pCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBl ZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0 aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0 LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisjaW5jbHVkZSAi bGliYXZ1dGlsL2ZyYW1lLmgiCisKKyNpbmNsdWRlICJ2dmNfZGF0YS5oIgorI2luY2x1ZGUgInZ2 Y19pbnRlci5oIgorI2luY2x1ZGUgInZ2Y19pbnRyYS5oIgorI2luY2x1ZGUgInZ2Y19pdHhfMWQu aCIKKworc3RhdGljIGludCBpc19jY2xtKGVudW0gSW50cmFQcmVkTW9kZSBtb2RlKQoreworICAg IHJldHVybiBtb2RlID09IElOVFJBX0xUX0NDTE0gfHwgbW9kZSA9PSBJTlRSQV9MX0NDTE0gfHwg bW9kZSA9PSBJTlRSQV9UX0NDTE07Cit9CisKK3N0YXRpYyBpbnQgZGVyaXZlX2lsZm5zdF9wcmVk X21vZGVfaW50cmEoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgVHJhbnNmb3JtQmxv Y2sgKnRiKQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMgPSBsYy0+ZmM7CisgICAg Y29uc3QgVlZDU1BTICpzcHMgPSBmYy0+cHMuc3BzOworICAgIGNvbnN0IENvZGluZ1VuaXQgKmN1 ICAgICAgICAgID0gbGMtPmN1OworICAgIGNvbnN0IGludCB4X3RiICAgICAgICAgICAgICAgID0g dGItPngwID4+IGZjLT5wcy5zcHMtPm1pbl9jYl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQg eV90YiAgICAgICAgICAgICAgICA9IHRiLT55MCA+PiBmYy0+cHMuc3BzLT5taW5fY2JfbG9nMl9z aXplX3k7CisgICAgY29uc3QgaW50IHhfYyAgICAgICAgICAgICAgICAgPSAodGItPngwICsgKHRi LT50Yl93aWR0aCA8PCBzcHMtPmhzaGlmdFsxXSA+PiAxKSApID4+IGZjLT5wcy5zcHMtPm1pbl9j Yl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQgeV9jICAgICAgICAgICAgICAgICA9ICh0Yi0+ eTAgKyAodGItPnRiX2hlaWdodCA8PCBzcHMtPnZzaGlmdFsxXSA+PiAxKSkgPj4gZmMtPnBzLnNw cy0+bWluX2NiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCBtaW5fY2Jfd2lkdGggICAgICAg ID0gZmMtPnBzLnBwcy0+bWluX2NiX3dpZHRoOworICAgIGNvbnN0IGludCBpbnRyYV9taXBfZmxh ZyAgICAgID0gU0FNUExFX0NUQihmYy0+dGFiLmltZiwgeF90YiwgeV90Yik7CisgICAgaW50IHBy ZWRfbW9kZV9pbnRyYSA9IHRiLT5jX2lkeCA9PSAwID8gY3UtPmludHJhX3ByZWRfbW9kZV95IDog Y3UtPmludHJhX3ByZWRfbW9kZV9jOworICAgIGlmIChpbnRyYV9taXBfZmxhZyAmJiAhdGItPmNf aWR4KSB7CisgICAgICAgIHByZWRfbW9kZV9pbnRyYSA9IElOVFJBX1BMQU5BUjsKKyAgICB9IGVs c2UgaWYgKGlzX2NjbG0ocHJlZF9tb2RlX2ludHJhKSkgeworICAgICAgICBpbnQgaW50cmFfbWlw X2ZsYWdfYyA9IFNBTVBMRV9DVEIoZmMtPnRhYi5pbWYsIHhfYywgeV9jKTsKKyAgICAgICAgaW50 IGN1X3ByZWRfbW9kZSA9IFNBTVBMRV9DVEIoZmMtPnRhYi5jcG1bMF0sIHhfYywgeV9jKTsKKyAg ICAgICAgaWYgKGludHJhX21pcF9mbGFnX2MpIHsKKyAgICAgICAgICAgIHByZWRfbW9kZV9pbnRy YSA9IElOVFJBX1BMQU5BUjsKKyAgICAgICAgfSBlbHNlIGlmIChjdV9wcmVkX21vZGUgPT0gTU9E RV9JQkMgfHwgY3VfcHJlZF9tb2RlID09IE1PREVfUExUKSB7CisgICAgICAgICAgICBwcmVkX21v ZGVfaW50cmEgPSBJTlRSQV9EQzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByZWRf bW9kZV9pbnRyYSA9IFNBTVBMRV9DVEIoZmMtPnRhYi5pcG0sIHhfYywgeV9jKTsKKyAgICAgICAg fQorICAgIH0KKyAgICBwcmVkX21vZGVfaW50cmEgPSBmZl92dmNfd2lkZV9hbmdsZV9tb2RlX21h cHBpbmcoY3UsIHRiLT50Yl93aWR0aCwgdGItPnRiX2hlaWdodCwgdGItPmNfaWR4LCBwcmVkX21v ZGVfaW50cmEpOworCisgICAgcmV0dXJuIHByZWRfbW9kZV9pbnRyYTsKK30KKworLy84LjcuNCBU cmFuc2Zvcm1hdGlvbiBwcm9jZXNzIGZvciBzY2FsZWQgdHJhbnNmb3JtIGNvZWZmaWNpZW50cwor c3RhdGljIHZvaWQgaWxmbnN0X3RyYW5zZm9ybShjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBU cmFuc2Zvcm1CbG9jayAqdGIpCit7CisgICAgY29uc3QgVlZDU1BTICpzcHMgICAgICAgICAgID0g bGMtPmZjLT5wcy5zcHM7CisgICAgY29uc3QgQ29kaW5nVW5pdCAqY3UgICAgICAgID0gbGMtPmN1 OworICAgIGNvbnN0IGludCB3ICAgICAgICAgICAgICAgICA9IHRiLT50Yl93aWR0aDsKKyAgICBj b25zdCBpbnQgaCAgICAgICAgICAgICAgICAgPSB0Yi0+dGJfaGVpZ2h0OworICAgIGNvbnN0IGlu dCBuX2xmbnN0X291dF9zaXplICA9ICh3ID49IDggJiYgaCA+PSA4KSA/IDQ4IDogMTY7ICAgICAg ICAgICAgICAgICAgICAgICAgIC8vLzwgbkxmbnN0T3V0U2l6ZQorICAgIGNvbnN0IGludCBsb2cy X2xmbnN0X3NpemUgICA9ICh3ID49IDggJiYgaCA+PSA4KSA/IDMgOiAyOyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8vLzwgbG9nMkxmbnN0U2l6ZQorICAgIGNvbnN0IGludCBuX2xmbnN0X3Np emUgICAgICA9IDEgPDwgbG9nMl9sZm5zdF9zaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8vLzwgbkxmbnN0U2l6ZQorICAgIGNvbnN0IGludCBub25femVyb19zaXplICAgICA9 ICgodyA9PSA4ICYmIGggPT0gOCkgfHwgKHcgPT0gNCAmJiBoID09IDQpKSA/IDggOiAxNjsgIC8v Lzwgbm9uWmVyb1NpemUKKyAgICBjb25zdCBpbnQgcHJlZF9tb2RlX2ludHJhICAgPSBkZXJpdmVf aWxmbnN0X3ByZWRfbW9kZV9pbnRyYShsYywgdGIpOworICAgIGNvbnN0IGludCB0cmFuc3Bvc2Ug ICAgICAgICA9IHByZWRfbW9kZV9pbnRyYSA+IDM0OworICAgIGludCB1WzE2XSwgdls0OF07CisK KyAgICBmb3IgKGludCB4ID0gMDsgeCA8IG5vbl96ZXJvX3NpemU7IHgrKykgeworICAgICAgICBp bnQgeGMgPSBmZl92dmNfZGlhZ19zY2FuX3hbMl1bMl1beF07CisgICAgICAgIGludCB5YyA9IGZm X3Z2Y19kaWFnX3NjYW5feVsyXVsyXVt4XTsKKyAgICAgICAgdVt4XSA9IHRiLT5jb2VmZnNbdyAq IHljICsgeGNdOworICAgIH0KKyAgICBmZl92dmNfaW52X2xmbnN0XzFkKHYsIHUsIG5vbl96ZXJv X3NpemUsIG5fbGZuc3Rfb3V0X3NpemUsIHByZWRfbW9kZV9pbnRyYSwKKyAgICAgICAgICAgICAg ICAgICAgICAgIGN1LT5sZm5zdF9pZHgsIHNwcy0+bG9nMl90cmFuc2Zvcm1fcmFuZ2UpOworICAg IGlmICh0cmFuc3Bvc2UpIHsKKyAgICAgICAgaW50ICpkc3QgPSB0Yi0+Y29lZmZzOworICAgICAg ICBjb25zdCBpbnQgKnNyYyA9IHY7CisgICAgICAgIGlmIChuX2xmbnN0X3NpemUgPT0gNCkgewor ICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCA0OyB5KyspIHsKKyAgICAgICAgICAgICAg ICBkc3RbMF0gPSBzcmNbMF07CisgICAgICAgICAgICAgICAgZHN0WzFdID0gc3JjWzRdOworICAg ICAgICAgICAgICAgIGRzdFsyXSA9IHNyY1s4XTsKKyAgICAgICAgICAgICAgICBkc3RbM10gPSBz cmNbMTJdOworICAgICAgICAgICAgICAgIHNyYysrOworICAgICAgICAgICAgICAgIGRzdCArPSB3 OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChpbnQg eSA9IDA7IHkgPCA4OyB5KyspIHsKKyAgICAgICAgICAgICAgICBkc3RbMF0gPSBzcmNbMF07Cisg ICAgICAgICAgICAgICAgZHN0WzFdID0gc3JjWzhdOworICAgICAgICAgICAgICAgIGRzdFsyXSA9 IHNyY1sxNl07CisgICAgICAgICAgICAgICAgZHN0WzNdID0gc3JjWzI0XTsKKyAgICAgICAgICAg ICAgICBpZiAoeSA8IDQpIHsKKyAgICAgICAgICAgICAgICAgICAgZHN0WzRdID0gc3JjWzMyXTsK KyAgICAgICAgICAgICAgICAgICAgZHN0WzVdID0gc3JjWzM2XTsKKyAgICAgICAgICAgICAgICAg ICAgZHN0WzZdID0gc3JjWzQwXTsKKyAgICAgICAgICAgICAgICAgICAgZHN0WzddID0gc3JjWzQ0 XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3JjKys7CisgICAgICAgICAg ICAgICAgZHN0ICs9IHc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH0gZWxzZSB7 CisgICAgICAgIGludCAqZHN0ID0gdGItPmNvZWZmczsKKyAgICAgICAgY29uc3QgaW50ICpzcmMg PSB2OworICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG5fbGZuc3Rfc2l6ZTsgeSsrKSB7Cisg ICAgICAgICAgICBpbnQgc2l6ZSA9ICh5IDwgNCkgPyBuX2xmbnN0X3NpemUgOiA0OworICAgICAg ICAgICAgbWVtY3B5KGRzdCwgc3JjLCBzaXplICogc2l6ZW9mKGludCkpOworICAgICAgICAgICAg c3JjICs9IHNpemU7CisgICAgICAgICAgICBkc3QgKz0gdzsKKyAgICAgICAgfQorICAgIH0KKyAg ICB0Yi0+bWF4X3NjYW5feCA9IG5fbGZuc3Rfc2l6ZSAtIDE7CisgICAgdGItPm1heF9zY2FuX3kg PSBuX2xmbnN0X3NpemUgLSAxOworfQorCisvL3BhcnQgb2YgOC43LjQgVHJhbnNmb3JtYXRpb24g cHJvY2VzcyBmb3Igc2NhbGVkIHRyYW5zZm9ybSBjb2VmZmljaWVudHMKK3N0YXRpYyB2b2lkIGRl cml2ZV90cmFuc2Zvcm1fdHlwZShjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjLCBjb25zdCBWVkNM b2NhbENvbnRleHQgKmxjLCBjb25zdCBUcmFuc2Zvcm1CbG9jayAqdGIsIGVudW0gVHhUeXBlICp0 cmgsIGVudW0gVHhUeXBlICp0cnYpCit7CisgICAgY29uc3QgQ29kaW5nVW5pdCAqY3UgPSBsYy0+ Y3U7CisgICAgc3RhdGljIGNvbnN0IGVudW0gVHhUeXBlIG10c190b190cmhbXSA9IHtEQ1QyLCBE U1Q3LCBEQ1Q4LCBEU1Q3LCBEQ1Q4fTsKKyAgICBzdGF0aWMgY29uc3QgZW51bSBUeFR5cGUgbXRz X3RvX3RydltdID0ge0RDVDIsIERTVDcsIERTVDcsIERDVDgsIERDVDh9OworICAgIGNvbnN0IFZW Q1NQUyAqc3BzICAgICAgID0gZmMtPnBzLnNwczsKKyAgICBpbnQgaW1wbGljaXRfbXRzX2VuYWJs ZWQgPSAwOworICAgIGlmICh0Yi0+Y19pZHggfHwgKGN1LT5pc3Bfc3BsaXRfdHlwZSAhPSBJU1Bf Tk9fU1BMSVQgJiYgY3UtPmxmbnN0X2lkeCkpIHsKKyAgICAgICAgKnRyaCA9ICp0cnYgPSBEQ1Qy OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNwcy0+ci0+c3BzX210c19lbmFi bGVkX2ZsYWcpIHsKKyAgICAgICAgaWYgKGN1LT5pc3Bfc3BsaXRfdHlwZSAhPSBJU1BfTk9fU1BM SVQgfHwKKyAgICAgICAgICAgIChjdS0+c2J0X2ZsYWcgJiYgRkZNQVgodGItPnRiX3dpZHRoLCB0 Yi0+dGJfaGVpZ2h0KSA8PSAzMikgfHwKKyAgICAgICAgICAgICghc3BzLT5yLT5zcHNfZXhwbGlj aXRfbXRzX2ludHJhX2VuYWJsZWRfZmxhZyAmJiBjdS0+cHJlZF9tb2RlID09IE1PREVfSU5UUkEg JiYKKyAgICAgICAgICAgICFjdS0+bGZuc3RfaWR4ICYmICFjdS0+aW50cmFfbWlwX2ZsYWcpKSB7 CisgICAgICAgICAgICBpbXBsaWNpdF9tdHNfZW5hYmxlZCA9IDE7CisgICAgICAgIH0KKyAgICB9 CisgICAgaWYgKGltcGxpY2l0X210c19lbmFibGVkKSB7CisgICAgICAgIGNvbnN0IGludCB3ID0g dGItPnRiX3dpZHRoOworICAgICAgICBjb25zdCBpbnQgaCA9IHRiLT50Yl9oZWlnaHQ7CisgICAg ICAgIGlmIChjdS0+c2J0X2ZsYWcpIHsKKyAgICAgICAgICAgICp0cmggPSAoY3UtPnNidF9ob3Jp em9udGFsX2ZsYWcgIHx8IGN1LT5zYnRfcG9zX2ZsYWcpID8gRFNUNyA6IERDVDg7CisgICAgICAg ICAgICAqdHJ2ID0gKCFjdS0+c2J0X2hvcml6b250YWxfZmxhZyB8fCBjdS0+c2J0X3Bvc19mbGFn KSA/IERTVDcgOiBEQ1Q4OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKnRyaCA9ICh3 ID49IDQgJiYgdyA8PSAxNikgPyBEU1Q3IDogRENUMjsKKyAgICAgICAgICAgICp0cnYgPSAoaCA+ PSA0ICYmIGggPD0gMTYpID8gRFNUNyA6IERDVDI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu OworICAgIH0KKyAgICAqdHJoID0gbXRzX3RvX3RyaFtjdS0+bXRzX2lkeF07CisgICAgKnRydiA9 IG10c190b190cnZbY3UtPm10c19pZHhdOworfQorCitzdGF0aWMgdm9pZCBhZGRfcmVzaWR1YWxf Zm9yX2pvaW50X2NvZGluZ19jaHJvbWEoVlZDTG9jYWxDb250ZXh0ICpsYywKKyAgICBjb25zdCBU cmFuc2Zvcm1Vbml0ICp0dSwgVHJhbnNmb3JtQmxvY2sgKnRiLCBjb25zdCBpbnQgY2hyb21hX3Nj YWxlKQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMgID0gbGMtPmZjOworICAgIGNv bnN0IENvZGluZ1VuaXQgKmN1ID0gbGMtPmN1OworICAgIGNvbnN0IGludCBjX3NpZ24gPSAxIC0g MiAqIGZjLT5wcy5waC5yLT5waF9qb2ludF9jYmNyX3NpZ25fZmxhZzsKKyAgICBjb25zdCBpbnQg c2hpZnQgID0gdHUtPmNvZGVkX2ZsYWdbMV0gXiB0dS0+Y29kZWRfZmxhZ1syXTsKKyAgICBjb25z dCBpbnQgY19pZHggID0gMSArIHR1LT5jb2RlZF9mbGFnWzFdOworICAgIGNvbnN0IHB0cmRpZmZf dCBzdHJpZGUgPSBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XTsKKyAgICBjb25zdCBpbnQgaHMg PSBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhdOworICAgIGNvbnN0IGludCB2cyA9IGZjLT5wcy5z cHMtPnZzaGlmdFtjX2lkeF07CisgICAgdWludDhfdCAqZHN0ID0gJmZjLT5mcmFtZS0+ZGF0YVtj X2lkeF1bKHRiLT55MCA+PiB2cykgKiBzdHJpZGUgKworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKCh0Yi0+eDAgPj4gaHMpIDw8IGZjLT5wcy5zcHMtPnBpeGVsX3No aWZ0KV07CisgICAgaWYgKGNocm9tYV9zY2FsZSkgeworICAgICAgICBmYy0+dnZjZHNwLml0eC5w cmVkX3Jlc2lkdWFsX2pvaW50KHRiLT5jb2VmZnMsIHRiLT50Yl93aWR0aCwgdGItPnRiX2hlaWdo dCwgY19zaWduLCBzaGlmdCk7CisgICAgICAgIGZjLT52dmNkc3AuaW50cmEubG1jc19zY2FsZV9j aHJvbWEobGMsIHRiLT5jb2VmZnMsIHRiLT5jb2VmZnMsIHRiLT50Yl93aWR0aCwgdGItPnRiX2hl aWdodCwgY3UtPngwLCBjdS0+eTApOworICAgICAgICBmYy0+dnZjZHNwLml0eC5hZGRfcmVzaWR1 YWwoZHN0LCB0Yi0+Y29lZmZzLCB0Yi0+dGJfd2lkdGgsIHRiLT50Yl9oZWlnaHQsIHN0cmlkZSk7 CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmMtPnZ2Y2RzcC5pdHguYWRkX3Jlc2lkdWFsX2pvaW50 KGRzdCwgdGItPmNvZWZmcywgdGItPnRiX3dpZHRoLCB0Yi0+dGJfaGVpZ2h0LCBzdHJpZGUsIGNf c2lnbiwgc2hpZnQpOworICAgIH0KK30KKworc3RhdGljIGludCBhZGRfcmVjb25zdHJ1Y3RlZF9h cmVhKFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCBjaF90eXBlLCBjb25zdCBpbnQgeDAs IGNvbnN0IGludCB5MCwgY29uc3QgaW50IHcsIGNvbnN0IGludCBoKQoreworICAgIGNvbnN0IFZW Q1NQUyAqc3BzICAgICAgID0gbGMtPmZjLT5wcy5zcHM7CisgICAgY29uc3QgaW50IGhzID0gc3Bz LT5oc2hpZnRbY2hfdHlwZV07CisgICAgY29uc3QgaW50IHZzID0gc3BzLT52c2hpZnRbY2hfdHlw ZV07CisgICAgUmVjb25zdHJ1Y3RlZEFyZWEgKmE7CisKKyAgICBpZiAobGMtPm51bV9yYXNbY2hf dHlwZV0gPj0gRkZfQVJSQVlfRUxFTVMobGMtPnJhc1tjaF90eXBlXSkpCisgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgYSA9ICZsYy0+cmFzW2NoX3R5cGVdW2xjLT5u dW1fcmFzW2NoX3R5cGVdXTsKKyAgICBhLT54ID0geDAgPj4gaHM7CisgICAgYS0+eSA9IHkwID4+ IHZzOworICAgIGEtPncgPSB3ID4+IGhzOworICAgIGEtPmggPSBoID4+IHZzOworICAgIGxjLT5u dW1fcmFzW2NoX3R5cGVdKys7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWRk X3R1X2FyZWEoY29uc3QgVHJhbnNmb3JtVW5pdCAqdHUsIGludCAqeDAsIGludCAqeTAsIGludCAq dywgaW50ICpoKQoreworICAgICp4MCA9IHR1LT54MDsKKyAgICAqeTAgPSB0dS0+eTA7CisgICAg KncgPSB0dS0+d2lkdGg7CisgICAgKmggPSB0dS0+aGVpZ2h0OworfQorCisjZGVmaW5lIE1JTl9J U1BfUFJFRF9XSURUSCA0CitzdGF0aWMgaW50IGdldF9sdW1hX3ByZWRpY3RfdW5pdChjb25zdCBD b2RpbmdVbml0ICpjdSwgY29uc3QgVHJhbnNmb3JtVW5pdCAqdHUsIGNvbnN0IGludCBpZHgsIGlu dCAqeDAsIGludCAqeTAsIGludCAqdywgaW50ICpoKQoreworICAgIGludCBoYXNfbHVtYSA9IDE7 CisgICAgYWRkX3R1X2FyZWEodHUsIHgwLCB5MCwgdywgaCk7CisgICAgaWYgKGN1LT5pc3Bfc3Bs aXRfdHlwZSA9PSBJU1BfVkVSX1NQTElUICYmIHR1LT53aWR0aCA8IE1JTl9JU1BfUFJFRF9XSURU SCkgeworICAgICAgICAqdyA9IE1JTl9JU1BfUFJFRF9XSURUSDsKKyAgICAgICAgaGFzX2x1bWEg PSAhKGlkeCAlIChNSU5fSVNQX1BSRURfV0lEVEggLyB0dS0+d2lkdGgpKTsKKyAgICB9CisgICAg cmV0dXJuIGhhc19sdW1hOworfQorCitzdGF0aWMgaW50IGdldF9jaHJvbWFfcHJlZGljdF91bml0 KGNvbnN0IENvZGluZ1VuaXQgKmN1LCBjb25zdCBUcmFuc2Zvcm1Vbml0ICp0dSwgY29uc3QgaW50 IGlkeCwgaW50ICp4MCwgaW50ICp5MCwgaW50ICp3LCBpbnQgKmgpCit7CisgICAgaWYgKGN1LT5p c3Bfc3BsaXRfdHlwZSA9PSBJU1BfTk9fU1BMSVQpIHsKKyAgICAgICAgYWRkX3R1X2FyZWEodHUs IHgwLCB5MCwgdywgaCk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBpZiAoaWR4ID09 IGN1LT5udW1faW50cmFfc3VicGFydGl0aW9ucyAtIDEpIHsKKyAgICAgICAgKngwID0gY3UtPngw OworICAgICAgICAqeTAgPSBjdS0+eTA7CisgICAgICAgICp3ID0gY3UtPmNiX3dpZHRoOworICAg ICAgICAqaCA9IGN1LT5jYl9oZWlnaHQ7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBy ZXR1cm4gMDsKK30KKworLy84LjQuNS4xIEdlbmVyYWwgZGVjb2RpbmcgcHJvY2VzcyBmb3IgaW50 cmEgYmxvY2tzCitzdGF0aWMgdm9pZCBwcmVkaWN0X2ludHJhKFZWQ0xvY2FsQ29udGV4dCAqbGMs IGNvbnN0IFRyYW5zZm9ybVVuaXQgKnR1LCBjb25zdCBpbnQgaWR4LCBjb25zdCBpbnQgdGFyZ2V0 X2NoX3R5cGUpCit7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYyAgICAgICAgID0gbGMt PmZjOworICAgIGNvbnN0IENvZGluZ1VuaXQgKmN1ICAgICAgICA9IGxjLT5jdTsKKyAgICBjb25z dCBWVkNUcmVlVHlwZSB0cmVlX3R5cGUgPSBjdS0+dHJlZV90eXBlOworICAgIGludCB4MCwgeTAs IHcsIGg7CisgICAgaWYgKGN1LT5wcmVkX21vZGUgIT0gTU9ERV9JTlRSQSkgeworICAgICAgICBh ZGRfcmVjb25zdHJ1Y3RlZF9hcmVhKGxjLCB0YXJnZXRfY2hfdHlwZSwgdHUtPngwLCB0dS0+eTAs IHR1LT53aWR0aCwgdHUtPmhlaWdodCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg KCF0YXJnZXRfY2hfdHlwZSAmJiB0cmVlX3R5cGUgIT0gRFVBTF9UUkVFX0NIUk9NQSkgeworICAg ICAgICBpZiAoZ2V0X2x1bWFfcHJlZGljdF91bml0KGN1LCB0dSwgaWR4LCAmeDAsICZ5MCwgJncs ICZoKSkgeworICAgICAgICAgICAgZmZfdnZjX3NldF9uZWlnaGJvdXJfYXZhaWxhYmxlKGxjLCB4 MCwgeTAsIHcsIGgpOworICAgICAgICAgICAgZmMtPnZ2Y2RzcC5pbnRyYS5pbnRyYV9wcmVkKGxj LCB4MCwgeTAsIHcsIGgsIDApOworICAgICAgICAgICAgYWRkX3JlY29uc3RydWN0ZWRfYXJlYShs YywgMCwgeDAsIHkwLCB3LCBoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAodGFyZ2V0X2No X3R5cGUgJiYgdHJlZV90eXBlICE9IERVQUxfVFJFRV9MVU1BKSB7CisgICAgICAgIGlmIChnZXRf Y2hyb21hX3ByZWRpY3RfdW5pdChjdSwgdHUsIGlkeCwgJngwLCAmeTAsICZ3LCAmaCkpeworICAg ICAgICAgICAgZmZfdnZjX3NldF9uZWlnaGJvdXJfYXZhaWxhYmxlKGxjLCB4MCwgeTAsIHcsIGgp OworICAgICAgICAgICAgaWYgKGlzX2NjbG0oY3UtPmludHJhX3ByZWRfbW9kZV9jKSkgeworICAg ICAgICAgICAgICAgIGZjLT52dmNkc3AuaW50cmEuaW50cmFfY2NsbV9wcmVkKGxjLCB4MCwgeTAs IHcsIGgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmYy0+dnZjZHNw LmludHJhLmludHJhX3ByZWQobGMsIHgwLCB5MCwgdywgaCwgMSk7CisgICAgICAgICAgICAgICAg ZmMtPnZ2Y2RzcC5pbnRyYS5pbnRyYV9wcmVkKGxjLCB4MCwgeTAsIHcsIGgsIDIpOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgYWRkX3JlY29uc3RydWN0ZWRfYXJlYShsYywgMSwgeDAsIHkw LCB3LCBoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgc2NhbGVfY2xpcChp bnQgKmNvZWZmLCBjb25zdCBpbnQgbnp3LCBjb25zdCBpbnQgdywgY29uc3QgaW50IGgsCisgICAg Y29uc3QgaW50IHNoaWZ0LCBjb25zdCBpbnQgbG9nMl90cmFuc2Zvcm1fcmFuZ2UpCit7CisgICAg Y29uc3QgaW50IGFkZCA9IDEgPDwgKHNoaWZ0IC0gMSk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkg PCBoOyB5KyspIHsKKyAgICAgICAgaW50ICpwID0gY29lZmYgKyB5ICogdzsKKyAgICAgICAgZm9y IChpbnQgeCA9IDA7IHggPCBuenc7IHgrKykgeworICAgICAgICAgICAgKnAgPSBhdl9jbGlwX2lu dHAyKCgqcCArIGFkZCkgPj4gc2hpZnQsIGxvZzJfdHJhbnNmb3JtX3JhbmdlKTsKKyAgICAgICAg ICAgIHArKzsKKyAgICAgICAgfQorICAgICAgICBtZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSAqICh3 IC0gbnp3KSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzY2FsZShpbnQgKm91dCwgY29uc3Qg aW50ICppbiwgY29uc3QgaW50IHcsIGNvbnN0IGludCBoLCBjb25zdCBpbnQgc2hpZnQpCit7Cisg ICAgY29uc3QgaW50IGFkZCA9IDEgPDwgKHNoaWZ0IC0gMSk7CisgICAgZm9yIChpbnQgeSA9IDA7 IHkgPCBoOyB5KyspIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3OyB4KyspIHsKKyAg ICAgICAgICAgIGludCAqbyA9IG91dCArIHkgKiB3ICsgeDsKKyAgICAgICAgICAgIGNvbnN0IGlu dCAqaSA9IGluICsgeSAqIHcgKyB4OworICAgICAgICAgICAgKm8gPSAoKmkgKyBhZGQpID4+IHNo aWZ0OworICAgICAgICB9CisgICAgfQorfQorCisvLyBwYXJ0IG9mIDguNy4zIFNjYWxpbmcgcHJv Y2VzcyBmb3IgdHJhbnNmb3JtIGNvZWZmaWNpZW50cworc3RhdGljIHZvaWQgZGVyaXZlX3FwKGNv bnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IFRyYW5zZm9ybVVuaXQgKnR1LCBUcmFuc2Zv cm1CbG9jayAqdGIpCit7CisgICAgY29uc3QgVlZDU1BTICpzcHMgICAgICAgICAgICAgICA9IGxj LT5mYy0+cHMuc3BzOworICAgIGNvbnN0IEgyNjZSYXdTbGljZUhlYWRlciAqcnNoICAgPSBsYy0+ c2MtPnNoLnI7CisgICAgY29uc3QgQ29kaW5nVW5pdCAqY3UgICAgICAgICAgICA9IGxjLT5jdTsK KyAgICBpbnQgcXAsIHFwX2FjdF9vZmZzZXQ7CisKKyAgICBpZiAodGItPmNfaWR4ID09IDApIHsK KyAgICAgICAgLy9maXggbWUKKyAgICAgICAgcXAgPSBjdS0+cXBbTFVNQV0gKyBzcHMtPnFwX2Jk X29mZnNldDsKKyAgICAgICAgcXBfYWN0X29mZnNldCA9IGN1LT5hY3RfZW5hYmxlZF9mbGFnID8g LTUgOiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnN0IGludCBpc19qY2JjciA9IHR1LT5q b2ludF9jYmNyX3Jlc2lkdWFsX2ZsYWcgJiYgdHUtPmNvZGVkX2ZsYWdbQ0JdICYmIHR1LT5jb2Rl ZF9mbGFnW0NSXTsKKyAgICAgICAgY29uc3QgaW50IGlkeCA9IGlzX2pjYmNyID8gSkNCQ1IgOiB0 Yi0+Y19pZHg7CisgICAgICAgIHFwID0gY3UtPnFwW2lkeF07CisgICAgICAgIHFwX2FjdF9vZmZz ZXQgPSBjdS0+YWN0X2VuYWJsZWRfZmxhZyA/IDEgOiAwOworICAgIH0KKyAgICBpZiAodGItPnRz KSB7CisgICAgICAgIGNvbnN0IGludCBxcF9wcmltZV90c19taW4gPSA0ICsgNiAqIHNwcy0+ci0+ c3BzX21pbl9xcF9wcmltZV90czsKKworICAgICAgICB0Yi0+cXAgPSBhdl9jbGlwKHFwICsgcXBf YWN0X29mZnNldCwgcXBfcHJpbWVfdHNfbWluLCA2MyArIHNwcy0+cXBfYmRfb2Zmc2V0KTsKKyAg ICAgICAgdGItPnJlY3Rfbm9uX3RzX2ZsYWcgPSAwOworICAgICAgICB0Yi0+YmRfc2hpZnQgPSAx MDsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCBpbnQgbG9nX3N1bSA9IHRiLT5sb2cyX3Ri X3dpZHRoICsgdGItPmxvZzJfdGJfaGVpZ2h0OworICAgICAgICBjb25zdCBpbnQgcmVjdF9ub25f dHNfZmxhZyA9IGxvZ19zdW0gJiAxOworCisgICAgICAgIHRiLT5xcCA9IGF2X2NsaXAocXAgKyBx cF9hY3Rfb2Zmc2V0LCAwLCA2MyArIHNwcy0+cXBfYmRfb2Zmc2V0KTsKKyAgICAgICAgdGItPnJl Y3Rfbm9uX3RzX2ZsYWcgPSByZWN0X25vbl90c19mbGFnOworICAgICAgICB0Yi0+YmRfc2hpZnQg PSBzcHMtPmJpdF9kZXB0aCArIHJlY3Rfbm9uX3RzX2ZsYWcgKyAobG9nX3N1bSAvIDIpCisgICAg ICAgICAgICAgICAgICAgICArIDEwIC0gc3BzLT5sb2cyX3RyYW5zZm9ybV9yYW5nZSArIHJzaC0+ c2hfZGVwX3F1YW50X3VzZWRfZmxhZzsKKyAgICB9CisgICAgdGItPmJkX29mZnNldCA9ICgxIDw8 IHRiLT5iZF9zaGlmdCkgPj4gMTsKK30KKworLy84LjcuMyBTY2FsaW5nIHByb2Nlc3MgZm9yIHRy YW5zZm9ybSBjb2VmZmljaWVudHMKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIGludCBkZXJpdmVf c2NhbGUoY29uc3QgVHJhbnNmb3JtQmxvY2sgKnRiLCBjb25zdCBpbnQgc2hfZGVwX3F1YW50X3Vz ZWRfZmxhZykKK3sKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCByZW02WzYzICsgMiAqIDYgKyAx XSA9IHsKKyAgICAgICAgMCwgMSwgMiwgMywgNCwgNSwgMCwgMSwgMiwgMywgNCwgNSwgMCwgMSwg MiwgMywgNCwgNSwgMCwgMSwgMiwKKyAgICAgICAgMywgNCwgNSwgMCwgMSwgMiwgMywgNCwgNSwg MCwgMSwgMiwgMywgNCwgNSwgMCwgMSwgMiwgMywgNCwgNSwKKyAgICAgICAgMCwgMSwgMiwgMywg NCwgNSwgMCwgMSwgMiwgMywgNCwgNSwgMCwgMSwgMiwgMywgNCwgNSwgMCwgMSwgMiwgMywKKyAg ICAgICAgNCwgNSwgMCwgMSwgMiwgMywgNCwgNSwgMCwgMSwgMiwgMworICAgIH07CisKKyAgICBz dGF0aWMgY29uc3QgdWludDhfdCBkaXY2WzYzICsgMiAqIDYgKyAxXSA9IHsKKyAgICAgICAgMCwg MCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMiwgMiwgMiwgMiwgMiwgMiwgMywgIDMs ICAzLAorICAgICAgICAzLCAzLCAzLCA0LCA0LCA0LCA0LCA0LCA0LCA1LCA1LCA1LCA1LCA1LCA1 LCA2LCA2LCA2LCA2LCAgNiwgIDYsCisgICAgICAgIDcsIDcsIDcsIDcsIDcsIDcsIDgsIDgsIDgs IDgsIDgsIDgsIDksIDksIDksIDksIDksIDksIDEwLCAxMCwgMTAsIDEwLAorICAgICAgICAxMCwg MTAsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDEyLCAxMiwgMTIsIDEyCisgICAgfTsKKworICAg IGNvbnN0IHN0YXRpYyBpbnQgbGV2ZWxfc2NhbGVbMl1bNl0gPSB7CisgICAgICAgIHsgNDAsIDQ1 LCA1MSwgNTcsIDY0LCA3MiB9LAorICAgICAgICB7IDU3LCA2NCwgNzIsIDgwLCA5MCwgMTAyIH0K KyAgICB9OworICAgIGNvbnN0IGludCBhZGRpbiA9IHNoX2RlcF9xdWFudF91c2VkX2ZsYWcgJiYg IXRiLT50czsKKyAgICBjb25zdCBpbnQgcXAgICAgPSB0Yi0+cXAgKyBhZGRpbjsKKworICAgIHJl dHVybiBsZXZlbF9zY2FsZVt0Yi0+cmVjdF9ub25fdHNfZmxhZ11bcmVtNltxcF1dIDw8IGRpdjZb cXBdOworfQorCisvLzguNy4zIFNjYWxpbmcgcHJvY2VzcyBmb3IgdHJhbnNmb3JtIGNvZWZmaWNp ZW50cworc3RhdGljIGNvbnN0IHVpbnQ4X3QqIGRlcml2ZV9zY2FsZV9tKGNvbnN0IFZWQ0xvY2Fs Q29udGV4dCAqbGMsIGNvbnN0IFRyYW5zZm9ybUJsb2NrICp0YiwgdWludDhfdCAqc2NhbGVfbSkK K3sKKyAgICAvL1RhYmxlIDM4IOKAkyBTcGVjaWZpY2F0aW9uIG9mIHRoZSBzY2FsaW5nIG1hdHJp eCBpZGVudGlmaWVyIHZhcmlhYmxlIGlkIGFjY29yZGluZyB0byBwcmVkTW9kZSwgY0lkeCwgblRi VywgYW5kIG5UYkgKKyAgICBjb25zdCBpbnQgaWRzWzJdWzNdWzZdID0geworICAgICAgICB7Cisg ICAgICAgICAgICB7ICAwLCAgMiwgIDgsIDE0LCAyMCwgMjYgfSwKKyAgICAgICAgICAgIHsgIDAs ICAzLCAgOSwgMTUsIDIxLCAyMSB9LAorICAgICAgICAgICAgeyAgMCwgIDQsIDEwLCAxNiwgMjIs IDIyIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgeyAgMCwgIDUsIDExLCAx NywgMjMsIDI3IH0sCisgICAgICAgICAgICB7ICAwLCAgNiwgMTIsIDE4LCAyNCwgMjQgfSwKKyAg ICAgICAgICAgIHsgIDEsICA3LCAxMywgMTksIDI1LCAyNSB9LAorICAgICAgICB9CisgICAgfTsK KyAgICBjb25zdCBWVkNGcmFtZVBhcmFtU2V0cyAqcHMgICAgID0gJmxjLT5mYy0+cHM7CisgICAg Y29uc3QgVlZDU1BTICpzcHMgICAgICAgICAgICAgICA9IHBzLT5zcHM7CisgICAgY29uc3QgSDI2 NlJhd1NsaWNlSGVhZGVyICpyc2ggICA9IGxjLT5zYy0+c2gucjsKKyAgICBjb25zdCBDb2RpbmdV bml0ICpjdSAgICAgICAgICAgID0gbGMtPmN1OworICAgIGNvbnN0IFZWQ1NjYWxpbmdMaXN0ICpz bCAgICAgICAgPSBwcy0+c2w7CisgICAgY29uc3QgaW50IGlkID0gaWRzW2N1LT5wcmVkX21vZGUg IT0gTU9ERV9JTlRSQV1bdGItPmNfaWR4XVtGRk1BWCh0Yi0+bG9nMl90Yl9oZWlnaHQsIHRiLT5s b2cyX3RiX3dpZHRoKSAtIDFdOworICAgIGNvbnN0IGludCBsb2cyX21hdHJpeF9zaXplID0gKGlk IDwgMikgPyAxIDogKGlkIDwgOCkgPyAyIDogMzsKKyAgICB1aW50OF90ICpwID0gc2NhbGVfbTsK KworICAgIGF2X2Fzc2VydDAoIXNwcy0+ci0+c3BzX3NjYWxpbmdfbWF0cml4X2Zvcl9hbHRlcm5h dGl2ZV9jb2xvdXJfc3BhY2VfZGlzYWJsZWRfZmxhZyk7CisKKyAgICBpZiAoIXJzaC0+c2hfZXhw bGljaXRfc2NhbGluZ19saXN0X3VzZWRfZmxhZyB8fCB0Yi0+dHMgfHwKKyAgICAgICAgc3BzLT5y LT5zcHNfc2NhbGluZ19tYXRyaXhfZm9yX2xmbnN0X2Rpc2FibGVkX2ZsYWcgJiYgY3UtPmFwcGx5 X2xmbnN0X2ZsYWdbdGItPmNfaWR4XSkKKyAgICAgICAgcmV0dXJuIGZmX3Z2Y19kZWZhdWx0X3Nj YWxlX207CisKKyAgICBpZiAoIXNsKSB7CisgICAgICAgIGF2X2xvZyhsYy0+ZmMtPmxvZ19jdHgs IEFWX0xPR19XQVJOSU5HLCAiYnVnOiBubyBzY2FsaW5nIGxpc3QgYXBzLCBpZCA9ICVkIiwgcHMt PnBoLnItPnBoX3NjYWxpbmdfbGlzdF9hcHNfaWQpOworICAgICAgICByZXR1cm4gZmZfdnZjX2Rl ZmF1bHRfc2NhbGVfbTsKKyAgICB9CisKKyAgICBmb3IgKGludCB5ID0gdGItPm1pbl9zY2FuX3k7 IHkgPD0gdGItPm1heF9zY2FuX3k7IHkrKykgeworICAgICAgICBjb25zdCBpbnQgb2ZmID0geSA8 PCBsb2cyX21hdHJpeF9zaXplID4+IHRiLT5sb2cyX3RiX2hlaWdodCA8PCBsb2cyX21hdHJpeF9z aXplOworICAgICAgICBjb25zdCB1aW50OF90ICptID0gJnNsLT5zY2FsaW5nX21hdHJpeF9yZWNb aWRdW29mZl07CisKKyAgICAgICAgZm9yIChpbnQgeCA9IHRiLT5taW5fc2Nhbl94OyB4IDw9IHRi LT5tYXhfc2Nhbl94OyB4KyspCisgICAgICAgICAgICAqcCsrID0gbVt4IDw8IGxvZzJfbWF0cml4 X3NpemUgPj4gdGItPmxvZzJfdGJfd2lkdGhdOworICAgIH0KKyAgICBpZiAoaWQgPj0gU0xfU1RB UlRfMTZ4MTYgJiYgIXRiLT5taW5fc2Nhbl94ICYmICF0Yi0+bWluX3NjYW5feSkKKyAgICAgICAg KnNjYWxlX20gPSBzbC0+c2NhbGluZ19tYXRyaXhfZGNfcmVjW2lkIC0gU0xfU1RBUlRfMTZ4MTZd OworCisgICAgcmV0dXJuIHNjYWxlX207Cit9CisKKy8vOC43LjMgU2NhbGluZyBwcm9jZXNzIGZv ciB0cmFuc2Zvcm0gY29lZmZpY2llbnRzCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBpbnQgc2Nh bGVfY29lZmYoY29uc3QgVHJhbnNmb3JtQmxvY2sgKnRiLCBpbnQgY29lZmYsCisgICAgY29uc3Qg aW50IHNjYWxlLCBjb25zdCBpbnQgc2NhbGVfbSwgY29uc3QgaW50IGxvZzJfdHJhbnNmb3JtX3Jh bmdlKQoreworICAgIGNvZWZmID0gKGNvZWZmICogc2NhbGUgKiBzY2FsZV9tICsgdGItPmJkX29m ZnNldCkgPj4gdGItPmJkX3NoaWZ0OworICAgIGNvZWZmID0gYXZfY2xpcF9pbnRwMihjb2VmZiwg bG9nMl90cmFuc2Zvcm1fcmFuZ2UpOworICAgIHJldHVybiBjb2VmZjsKK30KKworc3RhdGljIHZv aWQgZGVxdWFudChjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBUcmFuc2Zvcm1Vbml0 ICp0dSwgVHJhbnNmb3JtQmxvY2sgKnRiKQoreworICAgIHVpbnQ4X3QgdG1wW01BWF9UQl9TSVpF ICogTUFYX1RCX1NJWkVdOworICAgIGNvbnN0IEgyNjZSYXdTbGljZUhlYWRlciAqcnNoICAgPSBs Yy0+c2MtPnNoLnI7CisgICAgY29uc3QgVlZDU1BTICpzcHMgICAgICAgICAgICAgICA9IGxjLT5m Yy0+cHMuc3BzOworICAgIGNvbnN0IHVpbnQ4X3QgKnNjYWxlX20gICAgICAgICAgPSBkZXJpdmVf c2NhbGVfbShsYywgdGIsIHRtcCk7CisgICAgaW50IHNjYWxlOworCisgICAgZGVyaXZlX3FwKGxj LCB0dSwgdGIpOworICAgIHNjYWxlID0gZGVyaXZlX3NjYWxlKHRiLCByc2gtPnNoX2RlcF9xdWFu dF91c2VkX2ZsYWcpOworCisgICAgZm9yIChpbnQgeSA9IHRiLT5taW5fc2Nhbl95OyB5IDw9IHRi LT5tYXhfc2Nhbl95OyB5KyspIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IHRiLT5taW5fc2Nhbl94 OyB4IDw9IHRiLT5tYXhfc2Nhbl94OyB4KyspIHsKKyAgICAgICAgICAgIGludCAqY29lZmYgPSB0 Yi0+Y29lZmZzICsgeSAqIHRiLT50Yl93aWR0aCArIHg7CisKKyAgICAgICAgICAgIGlmICgqY29l ZmYpCisgICAgICAgICAgICAgICAgKmNvZWZmID0gc2NhbGVfY29lZmYodGIsICpjb2VmZiwgc2Nh bGUsICpzY2FsZV9tLCBzcHMtPmxvZzJfdHJhbnNmb3JtX3JhbmdlKTsKKyAgICAgICAgICAgIHNj YWxlX20rKzsKKyAgICAgICAgfQorICAgIH0KK30KKworLy90cmFuc21hdHJpeFswXVswXQorI2Rl ZmluZSBEQ1RfQSA2NAorc3RhdGljIHZvaWQgaXR4XzJkKGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAq ZmMsIFRyYW5zZm9ybUJsb2NrICp0YiwgY29uc3QgZW51bSBUeFR5cGUgdHJoLCBjb25zdCBlbnVt IFR4VHlwZSB0cnYpCit7CisgICAgY29uc3QgVlZDU1BTICpzcHMgICA9IGZjLT5wcy5zcHM7Cisg ICAgY29uc3QgaW50IHcgICAgICAgICA9IHRiLT50Yl93aWR0aDsKKyAgICBjb25zdCBpbnQgaCAg ICAgICAgID0gdGItPnRiX2hlaWdodDsKKyAgICBjb25zdCBzaXplX3Qgbnp3ICAgID0gdGItPm1h eF9zY2FuX3ggKyAxOworICAgIGNvbnN0IHNpemVfdCBuemggICAgPSB0Yi0+bWF4X3NjYW5feSAr IDE7CisgICAgY29uc3QgaW50IHNoaWZ0W10gICA9IHsgNywgNSArIHNwcy0+bG9nMl90cmFuc2Zv cm1fcmFuZ2UgLSBzcHMtPmJpdF9kZXB0aCB9OworCisgICAgaWYgKHcgPT0gaCAmJiBuencgPT0g MSAmJiBuemggPT0gMSAmJiB0cmggPT0gRENUMiAmJiB0cnYgPT0gRENUMikgeworICAgICAgICBj b25zdCBpbnQgYWRkW10gPSB7IDEgPDwgKHNoaWZ0WzBdIC0gMSksIDEgPDwgKHNoaWZ0WzFdIC0g MSkgfTsKKyAgICAgICAgY29uc3QgaW50IHQgICAgID0gKHRiLT5jb2VmZnNbMF0gKiBEQ1RfQSAr IGFkZFswXSkgPj4gc2hpZnRbMF07CisgICAgICAgIGNvbnN0IGludCBkYyAgICA9ICh0ICogRENU X0EgKyBhZGRbMV0pID4+IHNoaWZ0WzFdOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg dyAqIGg7IGkrKykKKyAgICAgICAgICAgIHRiLT5jb2VmZnNbaV0gPSBkYzsKKworICAgICAgICBy ZXR1cm47CisgICAgfQorCisgICAgZm9yIChpbnQgeCA9IDA7IHggPCBuenc7IHgrKykKKyAgICAg ICAgZmMtPnZ2Y2RzcC5pdHguaXR4W3Rydl1bdGItPmxvZzJfdGJfaGVpZ2h0IC0gMV0odGItPmNv ZWZmcyArIHgsIHcsIG56aCk7CisgICAgc2NhbGVfY2xpcCh0Yi0+Y29lZmZzLCBuencsIHcsIGgs IHNoaWZ0WzBdLCBzcHMtPmxvZzJfdHJhbnNmb3JtX3JhbmdlKTsKKworICAgIGZvciAoaW50IHkg PSAwOyB5IDwgaDsgeSsrKQorICAgICAgICBmYy0+dnZjZHNwLml0eC5pdHhbdHJoXVt0Yi0+bG9n Ml90Yl93aWR0aCAtIDFdKHRiLT5jb2VmZnMgKyB5ICogdywgMSwgbnp3KTsKKyAgICBzY2FsZSh0 Yi0+Y29lZmZzLCB0Yi0+Y29lZmZzLCB3LCBoLCBzaGlmdFsxXSk7Cit9CisKK3N0YXRpYyB2b2lk IGl0eF8xZChjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjLCBUcmFuc2Zvcm1CbG9jayAqdGIsIGNv bnN0IGVudW0gVHhUeXBlIHRyaCwgY29uc3QgZW51bSBUeFR5cGUgdHJ2KQoreworICAgIGNvbnN0 IFZWQ1NQUyAqc3BzICAgPSBmYy0+cHMuc3BzOworICAgIGNvbnN0IGludCB3ICAgICAgICAgPSB0 Yi0+dGJfd2lkdGg7CisgICAgY29uc3QgaW50IGggICAgICAgICA9IHRiLT50Yl9oZWlnaHQ7Cisg ICAgY29uc3Qgc2l6ZV90IG56dyAgICA9IHRiLT5tYXhfc2Nhbl94ICsgMTsKKyAgICBjb25zdCBz aXplX3QgbnpoICAgID0gdGItPm1heF9zY2FuX3kgKyAxOworCisgICAgaWYgKCh3ID4gMSAmJiBu encgPT0gMSAmJiB0cmggPT0gRENUMikgfHwgKGggPiAxICYmIG56aCA9PSAxICYmIHRydiA9PSBE Q1QyKSkgeworICAgICAgICBjb25zdCBpbnQgc2hpZnQgPSA2ICsgc3BzLT5sb2cyX3RyYW5zZm9y bV9yYW5nZSAtIHNwcy0+Yml0X2RlcHRoOworICAgICAgICBjb25zdCBpbnQgYWRkICAgPSAxIDw8 IChzaGlmdCAtIDEpOworICAgICAgICBjb25zdCBpbnQgZGMgICAgPSAodGItPmNvZWZmc1swXSAq IERDVF9BICsgYWRkKSA+PiBzaGlmdDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHcg KiBoOyBpKyspCisgICAgICAgICAgICB0Yi0+Y29lZmZzW2ldID0gZGM7CisKKyAgICAgICAgcmV0 dXJuOworICAgIH0KKworICAgIGlmICh3ID4gMSkKKyAgICAgICAgZmMtPnZ2Y2RzcC5pdHguaXR4 W3RyaF1bdGItPmxvZzJfdGJfd2lkdGggLSAxXSh0Yi0+Y29lZmZzLCAxLCBuencpOworICAgIGVs c2UKKyAgICAgICAgZmMtPnZ2Y2RzcC5pdHguaXR4W3Rydl1bdGItPmxvZzJfdGJfaGVpZ2h0IC0g MV0odGItPmNvZWZmcywgMSwgbnpoKTsKKyAgICBzY2FsZSh0Yi0+Y29lZmZzLCB0Yi0+Y29lZmZz LCB3LCBoLCA2ICsgc3BzLT5sb2cyX3RyYW5zZm9ybV9yYW5nZSAtIHNwcy0+Yml0X2RlcHRoKTsK K30KKworc3RhdGljIHZvaWQgdHJhbnNmb3JtX2JkcGNtKFRyYW5zZm9ybUJsb2NrICp0YiwgY29u c3QgVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgQ29kaW5nVW5pdCAqY3UpCit7CisgICAgY29u c3QgVlZDU1BTICpzcHMgICAgICAgID0gbGMtPmZjLT5wcy5zcHM7CisgICAgY29uc3QgSW50cmFQ cmVkTW9kZSBtb2RlID0gdGItPmNfaWR4ID8gY3UtPmludHJhX3ByZWRfbW9kZV9jIDogY3UtPmlu dHJhX3ByZWRfbW9kZV95OworICAgIGNvbnN0IGludCB2ZXJ0aWNhbCAgICAgICA9IG1vZGUgPT0g SU5UUkFfVkVSVDsKKyAgICBsYy0+ZmMtPnZ2Y2RzcC5pdHgudHJhbnNmb3JtX2JkcGNtKHRiLT5j b2VmZnMsIHRiLT50Yl93aWR0aCwgdGItPnRiX2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLCBzcHMtPmxvZzJfdHJhbnNmb3JtX3JhbmdlKTsK KyAgICBpZiAodmVydGljYWwpCisgICAgICAgIHRiLT5tYXhfc2Nhbl95ID0gdGItPnRiX2hlaWdo dCAtIDE7CisgICAgZWxzZQorICAgICAgICB0Yi0+bWF4X3NjYW5feCA9IHRiLT50Yl93aWR0aCAt IDE7Cit9CisKK3N0YXRpYyB2b2lkIGl0cmFuc2Zvcm0oVlZDTG9jYWxDb250ZXh0ICpsYywgVHJh bnNmb3JtVW5pdCAqdHUsIGNvbnN0IGludCB0dV9pZHgsIGNvbnN0IGludCB0YXJnZXRfY2hfdHlw ZSkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjICAgPSBsYy0+ZmM7CisgICAgY29u c3QgVlZDU1BTICpzcHMgICAgICAgICAgID0gZmMtPnBzLnNwczsKKyAgICBjb25zdCBWVkNTSCAq c2ggICAgICAgICAgICAgPSAmbGMtPnNjLT5zaDsKKyAgICBjb25zdCBDb2RpbmdVbml0ICpjdSAg ICAgICAgPSBsYy0+Y3U7CisgICAgY29uc3QgaW50IHBzICAgICAgICAgICAgICAgID0gZmMtPnBz LnNwcy0+cGl4ZWxfc2hpZnQ7CisgICAgREVDTEFSRV9BTElHTkVEKDMyLCBpbnQsIHRlbXApW01B WF9UQl9TSVpFICogTUFYX1RCX1NJWkVdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0dS0+ bmJfdGJzOyBpKyspIHsKKyAgICAgICAgVHJhbnNmb3JtQmxvY2sgKnRiICA9ICZ0dS0+dGJzW2ld OworICAgICAgICBjb25zdCBpbnQgY19pZHggICAgID0gdGItPmNfaWR4OworICAgICAgICBjb25z dCBpbnQgY2hfdHlwZSAgID0gY19pZHggPiAwOworCisgICAgICAgIGlmIChjaF90eXBlID09IHRh cmdldF9jaF90eXBlICYmIHRiLT5oYXNfY29lZmZzKSB7CisgICAgICAgICAgICBjb25zdCBpbnQg dyAgICAgICAgICAgICA9IHRiLT50Yl93aWR0aDsKKyAgICAgICAgICAgIGNvbnN0IGludCBoICAg ICAgICAgICAgID0gdGItPnRiX2hlaWdodDsKKyAgICAgICAgICAgIGNvbnN0IGludCBjaHJvbWFf c2NhbGUgID0gY2hfdHlwZSAmJiBzaC0+ci0+c2hfbG1jc191c2VkX2ZsYWcgJiYgZmMtPnBzLnBo LnItPnBoX2Nocm9tYV9yZXNpZHVhbF9zY2FsZV9mbGFnICYmICh3ICogaCA+IDQpOworICAgICAg ICAgICAgY29uc3QgcHRyZGlmZl90IHN0cmlkZSAgPSBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4 XTsKKyAgICAgICAgICAgIGNvbnN0IGludCBocyAgICAgICAgICAgID0gc3BzLT5oc2hpZnRbY19p ZHhdOworICAgICAgICAgICAgY29uc3QgaW50IHZzICAgICAgICAgICAgPSBzcHMtPnZzaGlmdFtj X2lkeF07CisgICAgICAgICAgICB1aW50OF90ICpkc3QgICAgICAgICAgICA9ICZmYy0+ZnJhbWUt PmRhdGFbY19pZHhdWyh0Yi0+eTAgPj4gdnMpICogc3RyaWRlICsgKCh0Yi0+eDAgPj4gaHMpIDw8 IHBzKV07CisKKyAgICAgICAgICAgIGlmIChjdS0+YmRwY21fZmxhZ1t0Yi0+Y19pZHhdKQorICAg ICAgICAgICAgICAgIHRyYW5zZm9ybV9iZHBjbSh0YiwgbGMsIGN1KTsKKyAgICAgICAgICAgIGRl cXVhbnQobGMsIHR1LCB0Yik7CisgICAgICAgICAgICBpZiAoIXRiLT50cykgeworICAgICAgICAg ICAgICAgIGVudW0gVHhUeXBlIHRyaCwgdHJ2OworCisgICAgICAgICAgICAgICAgaWYgKGN1LT5h cHBseV9sZm5zdF9mbGFnW2NfaWR4XSkKKyAgICAgICAgICAgICAgICAgICAgaWxmbnN0X3RyYW5z Zm9ybShsYywgdGIpOworICAgICAgICAgICAgICAgIGRlcml2ZV90cmFuc2Zvcm1fdHlwZShmYywg bGMsIHRiLCAmdHJoLCAmdHJ2KTsKKyAgICAgICAgICAgICAgICBpZiAodyA+IDEgJiYgaCA+IDEp CisgICAgICAgICAgICAgICAgICAgIGl0eF8yZChmYywgdGIsIHRyaCwgdHJ2KTsKKyAgICAgICAg ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGl0eF8xZChmYywgdGIsIHRyaCwgdHJ2 KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNocm9tYV9zY2FsZSkKKyAgICAg ICAgICAgICAgICBmYy0+dnZjZHNwLmludHJhLmxtY3Nfc2NhbGVfY2hyb21hKGxjLCB0ZW1wLCB0 Yi0+Y29lZmZzLCB3LCBoLCBjdS0+eDAsIGN1LT55MCk7CisgICAgICAgICAgICBmYy0+dnZjZHNw Lml0eC5hZGRfcmVzaWR1YWwoZHN0LCBjaHJvbWFfc2NhbGUgPyB0ZW1wIDogdGItPmNvZWZmcywg dywgaCwgc3RyaWRlKTsKKworICAgICAgICAgICAgaWYgKHR1LT5qb2ludF9jYmNyX3Jlc2lkdWFs X2ZsYWcgJiYgdGItPmNfaWR4KQorICAgICAgICAgICAgICAgIGFkZF9yZXNpZHVhbF9mb3Jfam9p bnRfY29kaW5nX2Nocm9tYShsYywgdHUsIHRiLCBjaHJvbWFfc2NhbGUpOworICAgICAgICB9Cisg ICAgfQorfQorCitzdGF0aWMgaW50IHJlY29uc3RydWN0KFZWQ0xvY2FsQ29udGV4dCAqbGMpCit7 CisgICAgVlZDRnJhbWVDb250ZXh0ICpmYyA9IGxjLT5mYzsKKyAgICBDb2RpbmdVbml0ICpjdSAg ICAgID0gbGMtPmN1OworICAgIGNvbnN0IGludCBzdGFydCAgICAgPSBjdS0+dHJlZV90eXBlID09 IERVQUxfVFJFRV9DSFJPTUE7CisgICAgY29uc3QgaW50IGVuZCAgICAgICA9IGZjLT5wcy5zcHMt PnItPnNwc19jaHJvbWFfZm9ybWF0X2lkYyAmJiAoY3UtPnRyZWVfdHlwZSAhPSBEVUFMX1RSRUVf TFVNQSk7CisKKyAgICBmb3IgKGludCBjaF90eXBlID0gc3RhcnQ7IGNoX3R5cGUgPD0gZW5kOyBj aF90eXBlKyspIHsKKyAgICAgICAgVHJhbnNmb3JtVW5pdCAqdHUgPSBjdS0+dHVzLmhlYWQ7Cisg ICAgICAgIGZvciAoaW50IGkgPSAwOyB0dTsgaSsrKSB7CisgICAgICAgICAgICBwcmVkaWN0X2lu dHJhKGxjLCB0dSwgaSwgY2hfdHlwZSk7CisgICAgICAgICAgICBpdHJhbnNmb3JtKGxjLCB0dSwg aSwgY2hfdHlwZSk7CisgICAgICAgICAgICB0dSA9IHR1LT5uZXh0OworICAgICAgICB9CisgICAg fQorICAgIHJldHVybiAwOworfQorCitpbnQgZmZfdnZjX3JlY29uc3RydWN0KFZWQ0xvY2FsQ29u dGV4dCAqbGMsIGNvbnN0IGludCBycywgY29uc3QgaW50IHJ4LCBjb25zdCBpbnQgcnkpCit7Cisg ICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYyAgID0gbGMtPmZjOworICAgIGNvbnN0IFZWQ1NQ UyAqc3BzICAgICAgICAgICA9IGZjLT5wcy5zcHM7CisgICAgY29uc3QgaW50IHhfY3RiICAgICAg ICAgICAgID0gcnggPDwgc3BzLT5jdGJfbG9nMl9zaXplX3k7CisgICAgY29uc3QgaW50IHlfY3Ri ICAgICAgICAgICAgID0gcnkgPDwgc3BzLT5jdGJfbG9nMl9zaXplX3k7CisgICAgQ1RVICpjdHUg ICAgICAgICAgICAgICAgICAgID0gZmMtPnRhYi5jdHVzICsgcnM7CisgICAgQ29kaW5nVW5pdCAq Y3UgICAgICAgICAgICAgID0gY3R1LT5jdXM7CisgICAgaW50IHJldCAgICAgICAgICAgICAgICAg ICAgID0gMDsKKworICAgIGxjLT5udW1fcmFzWzBdID0gbGMtPm51bV9yYXNbMV0gPSAwOworICAg IGxjLT5sbWNzLnhfdnBkdSA9IC0xOworICAgIGxjLT5sbWNzLnlfdnBkdSA9IC0xOworICAgIGZm X3Z2Y19kZWNvZGVfbmVpZ2hib3VyKGxjLCB4X2N0YiwgeV9jdGIsIHJ4LCByeSwgcnMpOworICAg IHdoaWxlIChjdSkgeworICAgICAgICBsYy0+Y3UgPSBjdTsKKworICAgICAgICBpZiAoY3UtPmNp aXBfZmxhZykKKyAgICAgICAgICAgIGZmX3Z2Y19wcmVkaWN0X2NpaXAobGMpOworICAgICAgICBp ZiAoY3UtPmNvZGVkX2ZsYWcpIHsKKyAgICAgICAgICAgIHJldCA9IHJlY29uc3RydWN0KGxjKTsK KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFkZF9yZWNvbnN0cnVjdGVkX2FyZWEobGMs IExVTUEsIGN1LT54MCwgY3UtPnkwLCBjdS0+Y2Jfd2lkdGgsIGN1LT5jYl9oZWlnaHQpOworICAg ICAgICAgICAgYWRkX3JlY29uc3RydWN0ZWRfYXJlYShsYywgQ0hST01BLCBjdS0+eDAsIGN1LT55 MCwgY3UtPmNiX3dpZHRoLCBjdS0+Y2JfaGVpZ2h0KTsKKyAgICAgICAgfQorICAgICAgICBjdSA9 IGN1LT5uZXh0OworICAgIH0KKyAgICBmZl92dmNfY3R1X2ZyZWVfY3VzKGN0dSk7CisgICAgcmV0 dXJuIHJldDsKK30KKworaW50IGZmX3Z2Y19nZXRfbWlwX3NpemVfaWQoY29uc3QgaW50IHcsIGNv bnN0IGludCBoKQoreworICAgIGlmICh3ID09IDQgJiYgaCA9PSA0KQorICAgICAgICByZXR1cm4g MDsKKyAgICBpZiAoKHcgPT0gNCB8fCBoID09IDQpIHx8ICh3ID09IDggJiYgaCA9PSA4KSkKKyAg ICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIDI7Cit9CisKK2ludCBmZl92dmNfbnNjYWxlX2Rl cml2ZShjb25zdCBpbnQgdywgY29uc3QgaW50IGgsIGNvbnN0IGludCBtb2RlKQoreworICAgIGlu dCBzaWRlX3NpemUsIG5zY2FsZTsKKyAgICBhdl9hc3NlcnQwKG1vZGUgPCBJTlRSQV9MVF9DQ0xN ICYmICEobW9kZSA+IElOVFJBX0hPUlogJiYgbW9kZSA8IElOVFJBX1ZFUlQpKTsKKyAgICBpZiAo bW9kZSA9PSBJTlRSQV9QTEFOQVIgfHwgbW9kZSA9PSBJTlRSQV9EQyB8fAorICAgICAgICBtb2Rl ID09IElOVFJBX0hPUlogfHwgbW9kZSA9PSBJTlRSQV9WRVJUKSB7CisgICAgICAgIG5zY2FsZSA9 IChhdl9sb2cyKHcpICsgYXZfbG9nMihoKSAtIDIpID4+IDI7CisgICAgfSBlbHNlIHsKKyAgICAg ICAgY29uc3QgaW50IGludHJhX3ByZWRfYW5nbGUgPSBmZl92dmNfaW50cmFfcHJlZF9hbmdsZV9k ZXJpdmUobW9kZSk7CisgICAgICAgIGNvbnN0IGludCBpbnZfYW5nbGUgICAgICAgID0gZmZfdnZj X2ludHJhX2ludl9hbmdsZV9kZXJpdmUoaW50cmFfcHJlZF9hbmdsZSk7CisgICAgICAgIGlmICht b2RlID49IElOVFJBX1ZFUlQpCisgICAgICAgICAgICBzaWRlX3NpemUgPSBoOworICAgICAgICBp ZiAobW9kZSA8PSBJTlRSQV9IT1JaKQorICAgICAgICAgICAgc2lkZV9zaXplID0gdzsKKyAgICAg ICAgbnNjYWxlID0gRkZNSU4oMiwgYXZfbG9nMihzaWRlX3NpemUpIC0gYXZfbG9nMigzICogaW52 X2FuZ2xlIC0gMikgKyA4KTsKKyAgICB9CisgICAgcmV0dXJuIG5zY2FsZTsKK30KKworaW50IGZm X3Z2Y19uZWVkX3BkcGMoY29uc3QgaW50IHcsIGNvbnN0IGludCBoLCBjb25zdCB1aW50OF90IGJk cGNtX2ZsYWcsIGNvbnN0IGludCBtb2RlLCBjb25zdCBpbnQgcmVmX2lkeCkKK3sKKyAgICBhdl9h c3NlcnQwKG1vZGUgPCBJTlRSQV9MVF9DQ0xNKTsKKyAgICBpZiAoKHcgPj0gNCAmJiBoID49IDQp ICYmICFyZWZfaWR4ICYmICFiZHBjbV9mbGFnKSB7CisgICAgICAgIGludCBuc2NhbGU7CisgICAg ICAgIGlmIChtb2RlID09IElOVFJBX1BMQU5BUiB8fCBtb2RlID09IElOVFJBX0RDIHx8CisgICAg ICAgICAgICBtb2RlID09IElOVFJBX0hPUlogfHwgbW9kZSA9PSBJTlRSQV9WRVJUKQorICAgICAg ICAgICAgcmV0dXJuIDE7CisgICAgICAgIGlmIChtb2RlID4gSU5UUkFfSE9SWiAmJiBtb2RlIDwg SU5UUkFfVkVSVCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBuc2NhbGUgPSBmZl92 dmNfbnNjYWxlX2Rlcml2ZSh3LCBoLCBtb2RlKTsKKyAgICAgICAgcmV0dXJuIG5zY2FsZSA+PSAw OworCisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgUmVjb25zdHJ1Y3Rl ZEFyZWEqIGdldF9yZWNvbnN0cnVjdGVkX2FyZWEoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywg Y29uc3QgaW50IHgsIGNvbnN0IGludCB5LCBjb25zdCBpbnQgY19pZHgpCit7CisgICAgY29uc3Qg aW50IGNoX3R5cGUgPSBjX2lkeCA+IDA7CisgICAgZm9yIChpbnQgaSA9IGxjLT5udW1fcmFzW2No X3R5cGVdIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgY29uc3QgUmVjb25zdHJ1Y3RlZEFy ZWEqIGEgPSAmbGMtPnJhc1tjaF90eXBlXVtpXTsKKyAgICAgICAgY29uc3QgaW50IHIgPSAoYS0+ eCArIGEtPncpOworICAgICAgICBjb25zdCBpbnQgYiA9IChhLT55ICsgYS0+aCk7CisgICAgICAg IGlmIChhLT54IDw9IHggJiYgeCA8IHIgJiYgYS0+eSA8PSB5ICYmIHkgPCBiKQorICAgICAgICAg ICAgcmV0dXJuIGE7CisKKyAgICAgICAgLy9pdCdzIHRvbyBmYXIgYXdheSwgbm8gbmVlZCBjaGVj ayBpdDsKKyAgICAgICAgaWYgKHggPj0gciAmJiB5ID49IGIpCisgICAgICAgICAgICBicmVhazsK KyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK2ludCBmZl92dmNfZ2V0X3RvcF9hdmFpbGFi bGUoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgaW50IHgsIGNvbnN0IGludCB5LCBp bnQgdGFyZ2V0X3NpemUsIGNvbnN0IGludCBjX2lkeCkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNv bnRleHQgKmZjID0gbGMtPmZjOworICAgIGNvbnN0IFZWQ1NQUyAqc3BzID0gZmMtPnBzLnNwczsK KyAgICBjb25zdCBpbnQgaHMgPSBzcHMtPmhzaGlmdFtjX2lkeF07CisgICAgY29uc3QgaW50IHZz ID0gc3BzLT52c2hpZnRbY19pZHhdOworICAgIGNvbnN0IGludCBsb2cyX2N0Yl9zaXplX3YgICA9 IHNwcy0+Y3RiX2xvZzJfc2l6ZV95IC0gdnM7CisgICAgY29uc3QgaW50IGVuZF9vZl9jdGJfeCAg ICAgID0gKChsYy0+Y3UtPngwID4+IHNwcy0+Y3RiX2xvZzJfc2l6ZV95KSArIDEpIDw8IHNwcy0+ Y3RiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCB5MGIgICAgICAgICAgICAgICA9IGF2X21v ZF91aW50cDIoeSwgbG9nMl9jdGJfc2l6ZV92KTsKKyAgICBjb25zdCBpbnQgbWF4X3ggICAgICAg ICAgICAgPSBGRk1JTihmYy0+cHMucHBzLT53aWR0aCwgZW5kX29mX2N0Yl94KSA+PiBoczsKKyAg ICBjb25zdCBSZWNvbnN0cnVjdGVkQXJlYSAqYTsKKyAgICBpbnQgcHggPSB4OworCisgICAgaWYg KCF5MGIpIHsKKyAgICAgICAgaWYgKCFsYy0+Y3RiX3VwX2ZsYWcpCisgICAgICAgICAgICByZXR1 cm4gMDsKKyAgICAgICAgdGFyZ2V0X3NpemUgPSBGRk1JTih0YXJnZXRfc2l6ZSwgKGxjLT5lbmRf b2ZfdGlsZXNfeCA+PiBocykgLSB4KTsKKyAgICAgICAgaWYgKHNwcy0+ci0+c3BzX2VudHJvcHlf Y29kaW5nX3N5bmNfZW5hYmxlZF9mbGFnKQorICAgICAgICAgICAgdGFyZ2V0X3NpemUgPSBGRk1J Tih0YXJnZXRfc2l6ZSwgKGVuZF9vZl9jdGJfeCA+PiBocykgLSB4KTsKKyAgICAgICAgcmV0dXJu IHRhcmdldF9zaXplOworICAgIH0KKworICAgIHRhcmdldF9zaXplID0gRkZNQVgoMCwgRkZNSU4o dGFyZ2V0X3NpemUsIG1heF94IC0geCkpOworICAgIHdoaWxlICh0YXJnZXRfc2l6ZSA+IDAgJiYg KGEgPSBnZXRfcmVjb25zdHJ1Y3RlZF9hcmVhKGxjLCBweCwgeSAtIDEsIGNfaWR4KSkpIHsKKyAg ICAgICAgY29uc3QgaW50IHN6ID0gRkZNSU4odGFyZ2V0X3NpemUsIGEtPnggKyBhLT53IC0gcHgp OworICAgICAgICBweCArPSBzejsKKyAgICAgICAgdGFyZ2V0X3NpemUgLT0gc3o7CisgICAgfQor ICAgIHJldHVybiBweCAtIHg7Cit9CisKK2ludCBmZl92dmNfZ2V0X2xlZnRfYXZhaWxhYmxlKGNv bnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCB4LCBjb25zdCBpbnQgeSwgaW50IHRh cmdldF9zaXplLCBjb25zdCBpbnQgY19pZHgpCit7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0 ICpmYyA9IGxjLT5mYzsKKyAgICBjb25zdCBWVkNTUFMgKnNwcyA9IGZjLT5wcy5zcHM7CisgICAg Y29uc3QgaW50IGhzID0gc3BzLT5oc2hpZnRbY19pZHhdOworICAgIGNvbnN0IGludCB2cyA9IHNw cy0+dnNoaWZ0W2NfaWR4XTsKKyAgICBjb25zdCBpbnQgbG9nMl9jdGJfc2l6ZV9oICAgPSAgc3Bz LT5jdGJfbG9nMl9zaXplX3kgLSBoczsKKyAgICBjb25zdCBpbnQgeDBiICAgICAgICAgICAgICAg PSBhdl9tb2RfdWludHAyKHgsIGxvZzJfY3RiX3NpemVfaCk7CisgICAgY29uc3QgaW50IGVuZF9v Zl9jdGJfeSAgICAgID0gKChsYy0+Y3UtPnkwID4+IHNwcy0+Y3RiX2xvZzJfc2l6ZV95KSArIDEp IDw8IHNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCBtYXhfeSAgICAgICAgICAg ICA9IEZGTUlOKGZjLT5wcy5wcHMtPmhlaWdodCwgZW5kX29mX2N0Yl95KSA+PiB2czsKKyAgICBj b25zdCBSZWNvbnN0cnVjdGVkQXJlYSAqYTsKKyAgICBpbnQgIHB5ID0geTsKKworICAgIGlmICgh eDBiICYmICFsYy0+Y3RiX2xlZnRfZmxhZykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB0YXJn ZXRfc2l6ZSA9IEZGTUFYKDAsIEZGTUlOKHRhcmdldF9zaXplLCBtYXhfeSAtIHkpKTsKKyAgICBp ZiAoIXgwYikKKyAgICAgICAgcmV0dXJuIHRhcmdldF9zaXplOworCisgICAgd2hpbGUgKHRhcmdl dF9zaXplID4gMCAmJiAoYSA9IGdldF9yZWNvbnN0cnVjdGVkX2FyZWEobGMsIHggLSAxLCBweSwg Y19pZHgpKSkgeworICAgICAgICBjb25zdCBpbnQgc3ogPSBGRk1JTih0YXJnZXRfc2l6ZSwgYS0+ eSArIGEtPmggLSBweSk7CisgICAgICAgIHB5ICs9IHN6OworICAgICAgICB0YXJnZXRfc2l6ZSAt PSBzejsKKyAgICB9CisgICAgcmV0dXJuIHB5IC0geTsKK30KKworc3RhdGljIGludCBsZXNzKGNv bnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisgICAgcmV0dXJuICooY29uc3QgaW50Kilh IC0gKihjb25zdCBpbnQqKWI7Cit9CisKK2ludCBmZl92dmNfcmVmX2ZpbHRlcl9mbGFnX2Rlcml2 ZShjb25zdCBpbnQgbW9kZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50IG1vZGVzW10gPSB7IC0x NCwgLTEyLCAtMTAsIC02LCBJTlRSQV9QTEFOQVIsIDIsIDM0LCA2NiwgNzIsIDc2LCA3OCwgODB9 OworICAgIHJldHVybiBic2VhcmNoKCZtb2RlLCBtb2RlcywgRkZfQVJSQVlfRUxFTVMobW9kZXMp LCBzaXplb2YoaW50KSwgbGVzcykgIT0gTlVMTDsKK30KKworaW50IGZmX3Z2Y19pbnRyYV9wcmVk X2FuZ2xlX2Rlcml2ZShjb25zdCBpbnQgcHJlZF9tb2RlKQoreworICAgIHN0YXRpYyBjb25zdCBp bnQgYW5nbGVzW10gPSB7CisgICAgICAgICAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDYsICAg OCwgIDEwLCAgMTIsICAxNCwgIDE2LCAgMTgsICAyMCwgIDIzLCAgMjYsIDI5LAorICAgICAgICAg MzIsICAzNSwgIDM5LCAgNDUsICA1MSwgIDU3LCAgNjQsICA3MywgIDg2LCAxMDIsIDEyOCwgMTcx LCAyNTYsIDM0MSwgNTEyCisgICAgfTsKKyAgICBpbnQgc2lnbiA9IDEsIGlkeCwgaW50cmFfcHJl ZF9hbmdsZTsKKyAgICBpZiAocHJlZF9tb2RlID4gSU5UUkFfRElBRykgeworICAgICAgICBpZHgg PSBwcmVkX21vZGUgLSBJTlRSQV9WRVJUOworICAgIH0gZWxzZSBpZiAocHJlZF9tb2RlID4gMCkg eworICAgICAgICBpZHggPSBJTlRSQV9IT1JaIC0gcHJlZF9tb2RlOworICAgIH0gZWxzZSB7Cisg ICAgICAgIGlkeCA9IElOVFJBX0hPUlogLSAyIC0gcHJlZF9tb2RlOworICAgIH0KKyAgICBpZiAo aWR4IDwgMCkgeworICAgICAgICBpZHggPSAtaWR4OworICAgICAgICBzaWduID0gLTE7CisgICAg fQorICAgIGludHJhX3ByZWRfYW5nbGUgPSBzaWduICogYW5nbGVzW2lkeF07CisgICAgcmV0dXJu IGludHJhX3ByZWRfYW5nbGU7Cit9CisKKyNkZWZpbmUgUk9VTkQoZikgKGludCkoZiA8IDAgPyAt KC1mICsgMC41KSA6IChmICsgMC41KSkKK2ludCBmZl92dmNfaW50cmFfaW52X2FuZ2xlX2Rlcml2 ZShjb25zdCBpbnQgaW50cmFfcHJlZF9hbmdsZSkKK3sKKyAgICBmbG9hdCBpbnZfYW5nbGU7Cisg ICAgYXZfYXNzZXJ0MChpbnRyYV9wcmVkX2FuZ2xlKTsKKyAgICBpbnZfYW5nbGUgPSAzMiAqIDUx Mi4wIC8gaW50cmFfcHJlZF9hbmdsZTsKKyAgICByZXR1cm4gUk9VTkQoaW52X2FuZ2xlKTsKK30K KworLy84LjQuNS4yLjcgV2lkZSBhbmdsZSBpbnRyYSBwcmVkaWN0aW9uIG1vZGUgbWFwcGluZyBw cm9jZXMKK2ludCBmZl92dmNfd2lkZV9hbmdsZV9tb2RlX21hcHBpbmcoY29uc3QgQ29kaW5nVW5p dCAqY3UsCisgICAgY29uc3QgaW50IHRiX3dpZHRoLCBjb25zdCBpbnQgdGJfaGVpZ2h0LCBjb25z dCBpbnQgY19pZHgsIGludCBwcmVkX21vZGVfaW50cmEpCit7CisgICAgaW50IG53LCBuaCwgd2hf cmF0aW8sIG1pbiwgbWF4OworCisgICAgaWYgKGN1LT5pc3Bfc3BsaXRfdHlwZSA9PSBJU1BfTk9f U1BMSVQgfHwgY19pZHgpIHsKKyAgICAgICAgbncgPSB0Yl93aWR0aDsKKyAgICAgICAgbmggPSB0 Yl9oZWlnaHQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbncgPSBjdS0+Y2Jfd2lkdGg7CisgICAg ICAgIG5oID0gY3UtPmNiX2hlaWdodDsKKyAgICB9CisgICAgd2hfcmF0aW8gICAgPSBGRkFCUyhm Zl9sb2cyKG53KSAtIGZmX2xvZzIobmgpKTsKKyAgICBtYXggICAgICAgICA9ICh3aF9yYXRpbyA+ IDEpID8gKDggICsgMiAqIHdoX3JhdGlvKSA6IDg7CisgICAgbWluICAgICAgICAgPSAod2hfcmF0 aW8gPiAxKSA/ICg2MCAtIDIgKiB3aF9yYXRpbykgOiA2MDsKKworICAgIGlmIChudyA+IG5oICYm IHByZWRfbW9kZV9pbnRyYSA+PTIgJiYgcHJlZF9tb2RlX2ludHJhIDwgbWF4KQorICAgICAgICBw cmVkX21vZGVfaW50cmEgKz0gNjU7CisgICAgZWxzZSBpZiAobmggPiBudyAmJiBwcmVkX21vZGVf aW50cmEgPD0gNjYgJiYgcHJlZF9tb2RlX2ludHJhID4gbWluKQorICAgICAgICBwcmVkX21vZGVf aW50cmEgLT0gNjc7CisgICAgcmV0dXJuIHByZWRfbW9kZV9pbnRyYTsKK30KZGlmZiAtLWdpdCBh L2xpYmF2Y29kZWMvdnZjL3Z2Y19pbnRyYS5oIGIvbGliYXZjb2RlYy92dmMvdnZjX2ludHJhLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNmI2NzQwMDhmOQotLS0gL2Rl di9udWxsCisrKyBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19pbnRyYS5oCkBAIC0wLDAgKzEsNDkgQEAK Ky8qCisgKiBWVkMgaW50cmEgcHJlZGljdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBO dW8gTWkKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVn IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRo ZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKyNpZm5kZWYgQVZD T0RFQ19WVkNfVlZDX0lOVFJBX0gKKyNkZWZpbmUgQVZDT0RFQ19WVkNfVlZDX0lOVFJBX0gKKwor I2luY2x1ZGUgInZ2Y19jdHUuaCIKKworLyoqCisgKiByZWNvbnN0cnVjdCBhIENUVQorICogQHBh cmFtIGxjIGxvY2FsIGNvbnRleHQgZm9yIENUVQorICogQHBhcmFtIHJzIHJhc3RlciBvcmRlciBm b3IgdGhlIENUVS4KKyAqIEBwYXJhbSByeCByYXN0ZXIgb3JkZXIgeCBmb3IgdGhlIENUVS4KKyAq IEBwYXJhbSByeSByYXN0ZXIgb3JkZXIgeSBmb3IgdGhlIENUVS4KKyAqIEByZXR1cm4gQVZFUlJP UgorICovCitpbnQgZmZfdnZjX3JlY29uc3RydWN0KFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0 IGludCBycywgY29uc3QgaW50IHJ4LCBjb25zdCBpbnQgcnkpOworCisvL3V0aWxzIGZvciB2dmNf aW50cmFfdGVtcGxhdGUKK2ludCBmZl92dmNfZ2V0X3RvcF9hdmFpbGFibGUoY29uc3QgVlZDTG9j YWxDb250ZXh0ICpsYywgaW50IHgwLCBpbnQgeTAsIGludCB0YXJnZXRfc2l6ZSwgaW50IGNfaWR4 KTsKK2ludCBmZl92dmNfZ2V0X2xlZnRfYXZhaWxhYmxlKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAq bGMsIGludCB4MCwgaW50IHkwLCBpbnQgdGFyZ2V0X3NpemUsIGludCBjX2lkeCk7CitpbnQgZmZf dnZjX2dldF9taXBfc2l6ZV9pZChpbnQgdywgaW50IGgpOworaW50IGZmX3Z2Y19uZWVkX3BkcGMo aW50IHcsIGludCBoLCB1aW50OF90IGJkcGNtX2ZsYWcsIGludCBtb2RlLCBpbnQgcmVmX2lkeCk7 CitpbnQgZmZfdnZjX25zY2FsZV9kZXJpdmUoaW50IHcsIGludCBoLCBpbnQgbW9kZSk7CitpbnQg ZmZfdnZjX3JlZl9maWx0ZXJfZmxhZ19kZXJpdmUoaW50IG1vZGUpOworaW50IGZmX3Z2Y19pbnRy YV9wcmVkX2FuZ2xlX2Rlcml2ZShpbnQgcHJlZF9tb2RlKTsKK2ludCBmZl92dmNfaW50cmFfaW52 X2FuZ2xlX2Rlcml2ZShpbnQgcHJlZF9tb2RlKTsKK2ludCBmZl92dmNfd2lkZV9hbmdsZV9tb2Rl X21hcHBpbmcoY29uc3QgQ29kaW5nVW5pdCAqY3UsCisgICAgaW50IHRiX3dpZHRoLCBpbnQgdGJf aGVpZ2h0LCBpbnQgY19pZHgsIGludCBwcmVkX21vZGVfaW50cmEpOworCisjZW5kaWYgLy8gQVZD T0RFQ19WVkNfVlZDX0lOVFJBX0gKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL3Z2Y19pbnRy YV90ZW1wbGF0ZS5jIGIvbGliYXZjb2RlYy92dmMvdnZjX2ludHJhX3RlbXBsYXRlLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uOWZiNDc1NDlkNQotLS0gL2Rldi9udWxs CisrKyBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19pbnRyYV90ZW1wbGF0ZS5jCkBAIC0wLDAgKzEsMTAx NSBAQAorLyoKKyAqIFZWQyBpbnRyYSBwcmVkaWN0aW9uIERTUAorICoKKyAqIENvcHlyaWdodCAo QykgMjAyMS0yMDIzIE51b21pCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgor ICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICov CisKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2JpdF9kZXB0aF90ZW1wbGF0ZS5jIgorCisjaW5jbHVk ZSAidnZjX2ludHJhLmgiCisKKyNkZWZpbmUgUE9TKHgsIHkpIHNyY1soeCkgKyBzdHJpZGUgKiAo eSldCisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHZvaWQgRlVOQyhjY2xtX2xpbmVhcl9wcmVk KShWVkNGcmFtZUNvbnRleHQgKmZjLCBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCwKKyAgICBj b25zdCBpbnQgdywgY29uc3QgaW50IGgsIGNvbnN0IHBpeGVsKiBwZHN5LCBjb25zdCBpbnQgKmEs IGNvbnN0IGludCAqYiwgY29uc3QgaW50ICprKQoreworICAgIGNvbnN0IFZWQ1NQUyAqc3BzID0g ZmMtPnBzLnNwczsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IFZWQ19NQVhfU0FNUExFX0FSUkFZ UyAtIDE7IGkrKykgeworICAgICAgICBjb25zdCBpbnQgY19pZHggPSBpICsgMTsKKyAgICAgICAg Y29uc3QgaW50IHggPSB4MCA+PiBzcHMtPmhzaGlmdFtjX2lkeF07CisgICAgICAgIGNvbnN0IGlu dCB5ID0geTAgPj4gc3BzLT52c2hpZnRbY19pZHhdOworICAgICAgICBjb25zdCBwdHJkaWZmX3Qg c3RyaWRlID0gZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF0gLyBzaXplb2YocGl4ZWwpOworICAg ICAgICBwaXhlbCAqc3JjID0gKHBpeGVsKilmYy0+ZnJhbWUtPmRhdGFbY19pZHhdICsgeCArIHkg KiBzdHJpZGU7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKSB7CisgICAgICAg ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKykgeworICAgICAgICAgICAgICAgIGNvbnN0 IGludCBkc3kgPSBwZHN5W3kgKiB3ICsgeF07CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHBy ZWQgPSAoKGRzeSAqIGFbaV0pID4+IGtbaV0pICsgYltpXTsKKyAgICAgICAgICAgICAgICBQT1Mo eCwgeSkgPSBDTElQKHByZWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor CisjZGVmaW5lIE1BWF9QSUNLX1BPUyA0CisjZGVmaW5lIFRPUCAgMAorI2RlZmluZSBMRUZUIDEK Kworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgdm9pZCBGVU5DKGNjbG1fZ2V0X3BhcmFtc19kZWZh dWx0KShpbnQgKmEsIGludCAqYiwgaW50ICprKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg MjsgaSsrKSB7CisgICAgICAgIGFbaV0gPSBrW2ldID0gMDsKKyAgICAgICAgYltpXSA9IDEgPDwg KEJJVF9ERVBUSCAtIDEpOworICAgIH0KK30KKworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgaW50 IEZVTkMoY2NsbV9nZXRfc2VsZWN0X3BvcykoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywKKyAg ICBjb25zdCBpbnQgeCwgY29uc3QgaW50IHksIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCwgY29u c3QgaW50IGF2YWlsX3QsIGNvbnN0IGludCBhdmFpbF9sLAorICAgIGludCBjbnRbMl0sIGludCBw b3NbMl1bTUFYX1BJQ0tfUE9TXSkKK3sKKyAgICBjb25zdCBlbnVtIEludHJhUHJlZE1vZGUgbW9k ZSA9IGxjLT5jdS0+aW50cmFfcHJlZF9tb2RlX2M7CisgICAgY29uc3QgaW50IG51bV9pczQgPSAh YXZhaWxfdCB8fCAhYXZhaWxfbCB8fCBtb2RlICE9IElOVFJBX0xUX0NDTE07CisgICAgaW50IG51 bV9zYW1wWzJdOworCisgICAgaWYgKG1vZGUgPT0gSU5UUkFfTFRfQ0NMTSkgeworICAgICAgICBu dW1fc2FtcFtUT1BdICA9IGF2YWlsX3QgPyB3IDogMDsKKyAgICAgICAgbnVtX3NhbXBbTEVGVF0g PSBhdmFpbF9sID8gaCA6IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbnVtX3NhbXBbVE9QXSA9 IChhdmFpbF90ICYmIG1vZGUgPT0gSU5UUkFfVF9DQ0xNKSA/IGZmX3Z2Y19nZXRfdG9wX2F2YWls YWJsZShsYywgIHgsIHksIHcgKyBGRk1JTih3LCBoKSwgMSkgOiAwOworICAgICAgICBudW1fc2Ft cFtMRUZUXSA9IChhdmFpbF9sICYmIG1vZGUgPT0gSU5UUkFfTF9DQ0xNKSA/IGZmX3Z2Y19nZXRf bGVmdF9hdmFpbGFibGUobGMsIHgsIHksIGggKyBGRk1JTih3LCBoKSwgMSkgOiAwOworICAgIH0K KyAgICBpZiAoIW51bV9zYW1wW1RPUF0gJiYgIW51bV9zYW1wW0xFRlRdKSB7CisgICAgICAgIHJl dHVybiAwOworICAgIH0KKyAgICBmb3IgKGludCBpID0gVE9QOyBpIDw9IExFRlQ7IGkrKykgewor ICAgICAgICBjb25zdCBpbnQgc3RhcnQgPSBudW1fc2FtcFtpXSA+PiAoMiArIG51bV9pczQpOwor ICAgICAgICBjb25zdCBpbnQgc3RlcCAgPSBGRk1BWCgxLCBudW1fc2FtcFtpXSA+PiAoMSArIG51 bV9pczQpKSA7CisgICAgICAgIGNudFtpXSA9IEZGTUlOKG51bV9zYW1wW2ldLCAoMSArIG51bV9p czQpIDw8IDEpOworICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IGNudFtpXTsgYysrKQorICAg ICAgICAgICAgcG9zW2ldW2NdID0gc3RhcnQgKyBjICogc3RlcDsKKyAgICB9CisgICAgcmV0dXJu IDE7Cit9CisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHZvaWQgRlVOQyhjY2xtX3NlbGVjdF9s dW1hXzQ0NCkoY29uc3QgcGl4ZWwgKnNyYywgY29uc3QgaW50IHN0ZXAsCisgICAgY29uc3QgaW50 IGNudCwgY29uc3QgaW50IHBvc1tNQVhfUElDS19QT1NdLCAgcGl4ZWwgKnNlbF9sdW1hKQorewor ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY250OyBpKyspCisgICAgICAgIHNlbF9sdW1hW2ldID0g c3JjW3Bvc1tpXSAqIHN0ZXBdOworfQorCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB2b2lkIEZV TkMoY2NsbV9zZWxlY3RfbHVtYSkoY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYywKKyAgICBjb25z dCBpbnQgeDAsIGNvbnN0IGludCB5MCwgY29uc3QgaW50IGF2YWlsX3QsIGNvbnN0IGludCBhdmFp bF9sLCBjb25zdCBpbnQgY250WzJdLCBjb25zdCBpbnQgcG9zWzJdW01BWF9QSUNLX1BPU10sCisg ICAgcGl4ZWwgKnNlbF9sdW1hKQoreworICAgIGNvbnN0IFZWQ1NQUyAqc3BzID0gZmMtPnBzLnNw czsKKworICAgIGNvbnN0IGludCBiX2N0dV9ib3VuZGFyeSA9ICFhdl9tb2RfdWludHAyKHkwLCBz cHMtPmN0Yl9sb2cyX3NpemVfeSk7CisgICAgY29uc3QgaW50IGhzID0gc3BzLT5oc2hpZnRbMV07 CisgICAgY29uc3QgaW50IHZzID0gc3BzLT52c2hpZnRbMV07CisgICAgY29uc3QgcHRyZGlmZl90 IHN0cmlkZSA9IGZjLT5mcmFtZS0+bGluZXNpemVbMF0gLyBzaXplb2YocGl4ZWwpOworCisgICAg aWYgKCFocyAmJiAhdnMpIHsKKyAgICAgICAgY29uc3QgcGl4ZWwqIHNyYyA9IChwaXhlbCopZmMt PmZyYW1lLT5kYXRhWzBdICsgeDAgKyB5MCAqIHN0cmlkZTsKKyAgICAgICAgRlVOQyhjY2xtX3Nl bGVjdF9sdW1hXzQ0NCkoc3JjIC0gYXZhaWxfdCAqIHN0cmlkZSwgMSwgY250W1RPUF0sIHBvc1tU T1BdLCBzZWxfbHVtYSk7CisgICAgICAgIEZVTkMoY2NsbV9zZWxlY3RfbHVtYV80NDQpKHNyYyAt IGF2YWlsX2wsIHN0cmlkZSwgY250W0xFRlRdLCBwb3NbTEVGVF0sIHNlbF9sdW1hICsgY250W1RP UF0pOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIHRvcAorICAgICAgICBpZiAodnMgJiYgIWJf Y3R1X2JvdW5kYXJ5KSB7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqc291cmNlID0gKHBpeGVs ICopZmMtPmZyYW1lLT5kYXRhWzBdICsgeDAgKyAoeTAgLSAyKSAqIHN0cmlkZTsKKyAgICAgICAg ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY250W1RPUF07IGkrKykgeworICAgICAgICAgICAgICAg IGNvbnN0IGludCB4ID0gcG9zW1RPUF1baV0gPDwgaHM7CisgICAgICAgICAgICAgICAgY29uc3Qg cGl4ZWwgKnNyYyA9IHNvdXJjZSArIHg7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IGhhc19s ZWZ0ID0geCB8fCBhdmFpbF9sOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsIGwgPSBoYXNf bGVmdCA/IFBPUygtMSwgMCkgOiBQT1MoMCwgMCk7CisgICAgICAgICAgICAgICAgaWYgKHNwcy0+ ci0+c3BzX2Nocm9tYV92ZXJ0aWNhbF9jb2xsb2NhdGVkX2ZsYWcpIHsKKyAgICAgICAgICAgICAg ICAgICAgc2VsX2x1bWFbaV0gPSAoUE9TKDAsIC0xKSArIGwgKyA0ICogUE9TKDAsIDApICsgUE9T KDEsIDApICsgUE9TKDAsIDEpICsgNCkgPj4gMzsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCBsMSA9IGhhc19sZWZ0ID8gUE9TKC0xLCAx KSA6IFBPUygwLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgc2VsX2x1bWFbaV0gPSAobCArIGwx ICsgMiAqIChQT1MoMCwgMCkgKyBQT1MoMCwgMSkpICsgUE9TKDEsIDApICsgUE9TKDEsIDEpICsg NCkgPj4gMzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqc291cmNlID0gKHBpeGVsKilmYy0+ZnJhbWUt PmRhdGFbMF0gKyB4MCArICh5MCAtIDEpICogc3RyaWRlOworICAgICAgICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCBjbnRbVE9QXTsgaSsrKSB7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHgg PSBwb3NbVE9QXVtpXSA8PCBoczsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqc3JjID0g c291cmNlICsgeDsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgaGFzX2xlZnQgPSB4IHx8IGF2 YWlsX2w7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgbCA9IGhhc19sZWZ0ID8gUE9TKC0x LCAwKSA6IFBPUygwLCAwKTsKKyAgICAgICAgICAgICAgICBzZWxfbHVtYVtpXSA9IChsICsgMiAq IFBPUygwLCAwKSArIFBPUygxLCAwKSArIDIpID4+IDI7CisgICAgICAgICAgICB9CisgICAgICAg IH0KKworICAgICAgICAvLyBsZWZ0CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVs ICpsZWZ0OworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnNvdXJjZSA9IChwaXhlbCAqKWZjLT5m cmFtZS0+ZGF0YVswXSArIHgwICsgeTAgKiBzdHJpZGUgLSAoMSArIGhzKSAqIGF2YWlsX2w7Cisg ICAgICAgICAgICBsZWZ0ID0gc291cmNlIC0gYXZhaWxfbDsKKworICAgICAgICAgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBjbnRbTEVGVF07IGkrKykgeworICAgICAgICAgICAgICAgIGNvbnN0IGlu dCB5ID0gcG9zW0xFRlRdW2ldIDw8IHZzOworICAgICAgICAgICAgICAgIGNvbnN0IGludCBvZmZz ZXQgPSB5ICogc3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpsICAgPSBsZWZ0 ICsgb2Zmc2V0OworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzcmMgPSBzb3VyY2UgKyBv ZmZzZXQ7CisgICAgICAgICAgICAgICAgcGl4ZWwgcHJlZDsKKyAgICAgICAgICAgICAgICBpZiAo IXZzKSB7CisgICAgICAgICAgICAgICAgICAgIHByZWQgPSAoKmwgKyAyICogUE9TKDAsIDApICsg UE9TKDEsIDApICsgMikgPj4gMjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgICAgICBpZiAoc3BzLT5yLT5zcHNfY2hyb21hX3ZlcnRpY2FsX2NvbGxvY2F0ZWRfZmxh ZykgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGhhc190b3AgPSB5IHx8IGF2 YWlsX3Q7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCB0ID0gaGFzX3RvcCA/ IFBPUygwLCAtMSkgOiBQT1MoMCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmVkID0g KCpsICsgdCArIDQgKiBQT1MoMCwgMCkgKyBQT1MoMSwgMCkgKyBQT1MoMCwgMSkgKyA0KSA+PiAz OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg cHJlZCA9ICgqbCArICoobCArIHN0cmlkZSkgKyAyICogUE9TKDAsIDApICsgMiAqIFBPUygwLCAx KSArIFBPUygxLCAwKSArIFBPUygxLCAxKSArIDQpID4+IDM7CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2VsX2x1bWFbaSArIGNudFtU T1BdXSA9IHByZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRp YyBhdl9hbHdheXNfaW5saW5lIHZvaWQgRlVOQyhjY2xtX3NlbGVjdF9jaHJvbWEpKGNvbnN0IFZW Q0ZyYW1lQ29udGV4dCAqZmMsCisgICAgY29uc3QgaW50IHgsIGNvbnN0IGludCB5LCBjb25zdCBp bnQgY250WzJdLCBjb25zdCBpbnQgcG9zWzJdW01BWF9QSUNLX1BPU10sCisgICAgcGl4ZWwgc2Vs W11bTUFYX1BJQ0tfUE9TICogMl0pCit7CisgICAgZm9yIChpbnQgY19pZHggPSAxOyBjX2lkeCA8 IFZWQ19NQVhfU0FNUExFX0FSUkFZUzsgY19pZHgrKykgeworICAgICAgICBjb25zdCBwdHJkaWZm X3Qgc3RyaWRlID0gZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF0gLyBzaXplb2YocGl4ZWwpOwor CisgICAgICAgIC8vdG9wCisgICAgICAgIGNvbnN0IHBpeGVsICpzcmMgPSAocGl4ZWwqKWZjLT5m cmFtZS0+ZGF0YVtjX2lkeF0gKyB4ICsgKHkgLSAxKSogc3RyaWRlOworICAgICAgICBmb3IgKGlu dCBpID0gMDsgaSA8IGNudFtUT1BdOyBpKyspIHsKKyAgICAgICAgICAgIHNlbFtjX2lkeF1baV0g PSBzcmNbcG9zW1RPUF1baV1dOworICAgICAgICB9CisKKyAgICAgICAgLy9sZWZ0CisgICAgICAg IHNyYyA9IChwaXhlbCopZmMtPmZyYW1lLT5kYXRhW2NfaWR4XSArIHggLSAxICsgeSAqIHN0cmlk ZTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbnRbTEVGVF07IGkrKykgeworICAgICAg ICAgICAgc2VsW2NfaWR4XVtpICsgY250W1RPUF1dID0gc3JjW3Bvc1tMRUZUXVtpXSAqIHN0cmlk ZV07CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIGludCBG VU5DKGNjbG1fc2VsZWN0X3NhbXBsZXMpKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsCisgICAg Y29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAsIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCwgY29u c3QgaW50IGF2YWlsX3QsIGNvbnN0IGludCBhdmFpbF9sLAorICAgIHBpeGVsIHNlbFtdW01BWF9Q SUNLX1BPUyAqIDJdKQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMgPSBsYy0+ZmM7 CisgICAgY29uc3QgVlZDU1BTICpzcHMgICA9IGZjLT5wcy5zcHM7CisgICAgY29uc3QgaW50IHgg ID0geDAgPj4gc3BzLT5oc2hpZnRbMV07CisgICAgY29uc3QgaW50IHkgID0geTAgPj4gc3BzLT52 c2hpZnRbMV07CisgICAgaW50IGNudFsyXSwgcG9zWzJdW01BWF9QSUNLX1BPU107CisKKyAgICBp ZiAoIUZVTkMoY2NsbV9nZXRfc2VsZWN0X3BvcykobGMsIHgsIHksIHcsIGgsIGF2YWlsX3QsIGF2 YWlsX2wsIGNudCwgcG9zKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBGVU5DKGNjbG1fc2Vs ZWN0X2x1bWEpKGZjLCB4MCwgeTAsIGF2YWlsX3QsIGF2YWlsX2wsIGNudCwgcG9zLCBzZWxbTFVN QV0pOworICAgIEZVTkMoY2NsbV9zZWxlY3RfY2hyb21hKShmYywgeCwgeSwgY250LCBwb3MsIHNl bCk7CisKKyAgICBpZiAoY250W1RPUF0gKyBjbnRbTEVGVF0gPT0gMikgeworICAgICAgICBmb3Ig KGludCBjX2lkeCA9IDA7IGNfaWR4IDwgVlZDX01BWF9TQU1QTEVfQVJSQVlTOyBjX2lkeCsrKSB7 CisgICAgICAgICAgICBzZWxbY19pZHhdWzNdID0gc2VsW2NfaWR4XVswXTsKKyAgICAgICAgICAg IHNlbFtjX2lkeF1bMl0gPSBzZWxbY19pZHhdWzFdOworICAgICAgICAgICAgc2VsW2NfaWR4XVsw XSA9IHNlbFtjX2lkeF1bMV07CisgICAgICAgICAgICBzZWxbY19pZHhdWzFdID0gc2VsW2NfaWR4 XVszXTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIGF2X2Fs d2F5c19pbmxpbmUgdm9pZCBGVU5DKGNjbG1fZ2V0X21pbl9tYXgpKAorICAgIGNvbnN0IHBpeGVs IHNlbFtdW01BWF9QSUNLX1BPUyAqIDJdLCBpbnQgKm1pbiwgaW50ICptYXgpCit7CisgICAgaW50 IG1pbl9ncnBfaWR4W10gPSB7IDAsIDIgfTsKKyAgICBpbnQgbWF4X2dycF9pZHhbXSA9IHsgMSwg MyB9OworCisgICAgaWYgKHNlbFtMVU1BXVttaW5fZ3JwX2lkeFswXV0gPiBzZWxbTFVNQV1bbWlu X2dycF9pZHhbMV1dKQorICAgICAgICBGRlNXQVAoaW50LCBtaW5fZ3JwX2lkeFswXSwgbWluX2dy cF9pZHhbMV0pOworICAgIGlmIChzZWxbTFVNQV1bbWF4X2dycF9pZHhbMF1dID4gc2VsW0xVTUFd W21heF9ncnBfaWR4WzFdXSkKKyAgICAgICAgRkZTV0FQKGludCwgbWF4X2dycF9pZHhbMF0sIG1h eF9ncnBfaWR4WzFdKTsKKyAgICBpZiAoc2VsW0xVTUFdW21pbl9ncnBfaWR4WzBdXSA+IHNlbFtM VU1BXVttYXhfZ3JwX2lkeFsxXV0pIHsKKyAgICAgICAgRkZTV0FQKGludCwgbWluX2dycF9pZHhb MF0sIG1heF9ncnBfaWR4WzBdKTsKKyAgICAgICAgRkZTV0FQKGludCwgbWluX2dycF9pZHhbMV0s IG1heF9ncnBfaWR4WzFdKTsKKyAgICB9CisgICAgaWYgKHNlbFtMVU1BXVttaW5fZ3JwX2lkeFsx XV0gPiBzZWxbTFVNQV1bbWF4X2dycF9pZHhbMF1dKQorICAgICAgICBGRlNXQVAoaW50LCBtaW5f Z3JwX2lkeFsxXSwgbWF4X2dycF9pZHhbMF0pOworICAgIGZvciAoaW50IGNfaWR4ID0gMDsgY19p ZHggPCBWVkNfTUFYX1NBTVBMRV9BUlJBWVM7IGNfaWR4KyspIHsKKyAgICAgICAgbWF4W2NfaWR4 XSA9IChzZWxbY19pZHhdW21heF9ncnBfaWR4WzBdXSArIHNlbFtjX2lkeF1bbWF4X2dycF9pZHhb MV1dICsgMSkgPj4gMTsKKyAgICAgICAgbWluW2NfaWR4XSA9IChzZWxbY19pZHhdW21pbl9ncnBf aWR4WzBdXSArIHNlbFtjX2lkeF1bbWluX2dycF9pZHhbMV1dICsgMSkgPj4gMTsKKyAgICB9Cit9 CisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHZvaWQgRlVOQyhjY2xtX2dldF9wYXJhbXMpKGNv bnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsCisgICAgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAs IGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCwgY29uc3QgaW50IGF2YWlsX3QsIGNvbnN0IGludCBh dmFpbF9sLAorICAgIGludCAqYSwgaW50ICpiLCBpbnQgKmspCit7CisgICAgcGl4ZWwgc2VsW1ZW Q19NQVhfU0FNUExFX0FSUkFZU11bTUFYX1BJQ0tfUE9TICogMl07CisgICAgaW50IG1heFtWVkNf TUFYX1NBTVBMRV9BUlJBWVNdLCBtaW5bVlZDX01BWF9TQU1QTEVfQVJSQVlTXTsKKyAgICBpbnQg ZGlmZjsKKworICAgIGlmICghRlVOQyhjY2xtX3NlbGVjdF9zYW1wbGVzKShsYywgeDAsIHkwLCB3 LCBoLCBhdmFpbF90LCBhdmFpbF9sLCBzZWwpKSB7CisgICAgICAgIEZVTkMoY2NsbV9nZXRfcGFy YW1zX2RlZmF1bHQpKGEsIGIsIGspOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRlVO QyhjY2xtX2dldF9taW5fbWF4KShzZWwsIG1pbiwgbWF4KTsKKworICAgIGRpZmYgPSBtYXhbTFVN QV0gLSBtaW5bTFVNQV07CisgICAgaWYgKGRpZmYgPT0gMCkgeworICAgICAgICBmb3IgKGludCBp ID0gMDsgaSA8IDI7IGkrKykgeworICAgICAgICAgICAgYVtpXSA9IGtbaV0gPSAwOworICAgICAg ICAgICAgYltpXSA9IG1pbltpICsgMV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAg IH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeworICAgICAgICBjb25zdCBzdGF0 aWMgaW50IGRpdl9zaWdfdGFibGVbXSA9IHswLCA3LCA2LCA1LCA1LCA0LCA0LCAzLCAzLCAyLCAy LCAxLCAxLCAxLCAxLCAwfTsKKyAgICAgICAgY29uc3QgaW50IGRpZmZjID0gbWF4W2kgKyAxXSAt IG1pbltpICsgMV07CisgICAgICAgIGludCAgeCA9IGF2X2xvZzIoZGlmZik7CisgICAgICAgIGlu dCAgeSwgdiwgc2lnbiwgYWRkOworICAgICAgICBjb25zdCBpbnQgbm9ybV9kaWZmID0gKChkaWZm IDw8IDQpID4+IHgpICYgMTU7CisgICAgICAgIHggKz0gKG5vcm1fZGlmZikgPyAxIDogMDsKKyAg ICAgICAgeSA9IGFicyhkaWZmYykgPiAwID8gYXZfbG9nMihhYnMoZGlmZmMpKSArIDEgOiAwOwor ICAgICAgICB2ID0gZGl2X3NpZ190YWJsZVtub3JtX2RpZmZdIHwgODsKKyAgICAgICAgYWRkID0g KDEgPDwgeSA+PiAxKTsKKyAgICAgICAgYVtpXSA9IChkaWZmYyAqIHYgKyBhZGQpID4+IHk7Cisg ICAgICAgIGtbaV0gPSBGRk1BWCgxLCAzICsgeCAteSk7CisgICAgICAgIHNpZ24gPSBhW2ldIDwg MCA/IC0xIDogKGFbaV0gPiAwKTsKKyAgICAgICAgYVtpXSA9ICgoMyArIHggLSB5KSA8IDEpID8g IHNpZ24gKiAxNSA6IGFbaV07CisgICAgICAgIGJbaV0gPSBtaW5baSArIDFdIC0gKChhW2ldICog bWluWzBdKSA+PiBrW2ldKTsKKyAgICB9CisKK30KKworI3VuZGVmIFRPUAorI3VuZGVmIExFRlQK Kworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgdm9pZCBGVU5DKGNjbG1fZ2V0X2x1bWFfcmVjX3Bp eGVscykoY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYywKKyAgICBjb25zdCBpbnQgeDAsIGNvbnN0 IGludCB5MCwgY29uc3QgaW50IHcsIGNvbnN0IGludCBoLCBjb25zdCBpbnQgYXZhaWxfdCwgY29u c3QgaW50IGF2YWlsX2wsCisgICAgcGl4ZWwgKnBkc3kpCit7CisgICAgY29uc3QgaW50IGhzICAg ICAgICAgICAgPSBmYy0+cHMuc3BzLT5oc2hpZnRbMV07CisgICAgY29uc3QgaW50IHZzICAgICAg ICAgICAgPSBmYy0+cHMuc3BzLT52c2hpZnRbMV07CisgICAgY29uc3QgcHRyZGlmZl90IHN0cmlk ZSAgPSBmYy0+ZnJhbWUtPmxpbmVzaXplWzBdIC8gc2l6ZW9mKHBpeGVsKTsKKyAgICBjb25zdCBw aXhlbCAqc291cmNlICAgICA9IChwaXhlbCopZmMtPmZyYW1lLT5kYXRhWzBdICsgeDAgKyB5MCAq IHN0cmlkZTsKKyAgICBjb25zdCBwaXhlbCAqbGVmdCAgICAgICA9IHNvdXJjZSAtIGF2YWlsX2w7 CisgICAgY29uc3QgcGl4ZWwgKnRvcCAgICAgICAgPSBzb3VyY2UgLSBhdmFpbF90ICogc3RyaWRl OworCisgICAgY29uc3QgVlZDU1BTICpzcHMgPSBmYy0+cHMuc3BzOworICAgIGlmICghaHMgJiYg IXZzKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaDsgaSsrKQorICAgICAgICAgICAg bWVtY3B5KHBkc3kgKyBpICogdywgc291cmNlICsgaSAqIHN0cmlkZSwgdyAqIHNpemVvZihwaXhl bCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaDsg aSsrKSB7CisgICAgICAgIGNvbnN0IHBpeGVsICpzcmMgID0gc291cmNlOworICAgICAgICBjb25z dCBwaXhlbCAqbCA9IGxlZnQ7CisgICAgICAgIGNvbnN0IHBpeGVsICp0ID0gdG9wOworICAgICAg ICBpZiAoIXZzKSB7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHc7IGorKykgewor ICAgICAgICAgICAgICAgIHBpeGVsIHByZWQgID0gKCpsICsgMiAqIFBPUygwLCAwKSArIFBPUygx LCAwKSArIDIpID4+IDI7CisgICAgICAgICAgICAgICAgcGRzeVtpICogdyArIGpdID0gcHJlZDsK KyAgICAgICAgICAgICAgICBzcmMgKz0gMjsKKyAgICAgICAgICAgICAgICBsID0gc3JjIC0gMTsK KyAgICAgICAgICAgIH0KKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHNwcy0+ ci0+c3BzX2Nocm9tYV92ZXJ0aWNhbF9jb2xsb2NhdGVkX2ZsYWcpICB7CisgICAgICAgICAgICAg ICAgZm9yIChpbnQgaiA9IDA7IGogPCB3OyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgcGl4 ZWwgcHJlZCAgPSAoKmwgKyAqdCArIDQgKiBQT1MoMCwgMCkgKyBQT1MoMSwgMCkgKyBQT1MoMCwg MSkgKyA0KSA+PiAzOworICAgICAgICAgICAgICAgICAgICBwZHN5W2kgKiB3ICsgal0gPSBwcmVk OworICAgICAgICAgICAgICAgICAgICBzcmMgKz0gMjsKKyAgICAgICAgICAgICAgICAgICAgdCAr PSAyOworICAgICAgICAgICAgICAgICAgICBsID0gc3JjIC0gMTsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBq IDwgdzsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsIHByZWQgID0gKCpsICsgKihs ICsgc3RyaWRlKSArIDIgKiBQT1MoMCwgMCkgKyAyICogUE9TKDAsIDEpICsgUE9TKDEsIDApICsg UE9TKDEsIDEpICsgNCkgPj4gMzsKKworICAgICAgICAgICAgICAgICAgICBwZHN5W2kgKiB3ICsg al0gPSBwcmVkOworICAgICAgICAgICAgICAgICAgICBzcmMgKz0gMjsKKyAgICAgICAgICAgICAg ICAgICAgbCA9IHNyYyAtIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgICAgIHNvdXJjZSArPSAoc3RyaWRlIDw8IHZzKTsKKyAgICAgICAgbGVmdCAg ICs9IChzdHJpZGUgPDwgdnMpOworICAgICAgICB0b3AgICAgPSBzb3VyY2UgLSBzdHJpZGU7Cisg ICAgfQorfQorCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB2b2lkIEZVTkMoY2NsbV9wcmVkX2Rl ZmF1bHQpKFZWQ0ZyYW1lQ29udGV4dCAqZmMsCisgICAgY29uc3QgaW50IHgsIGNvbnN0IGludCB5 LCBjb25zdCBpbnQgdywgY29uc3QgaW50IGgsIGNvbnN0IGludCBhdmFpbF90LCBjb25zdCBpbnQg YXZhaWxfbCkKK3sKKyAgICBmb3IgKGludCBjX2lkeCA9IDE7IGNfaWR4IDwgVlZDX01BWF9TQU1Q TEVfQVJSQVlTOyBjX2lkeCsrKSB7CisgICAgICAgIGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUgPSBm Yy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XSAvIHNpemVvZihwaXhlbCk7CisgICAgICAgIHBpeGVs ICpkc3QgPSAocGl4ZWwqKWZjLT5mcmFtZS0+ZGF0YVtjX2lkeF0gKyB4ICsgeSAqIHN0cmlkZTsK KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoOyBpKyspIHsKKyAgICAgICAgICAgIGZvciAo aW50IGogPSAwOyBqIDwgdzsgaisrKSB7CisgICAgICAgICAgICAgICAgZHN0W2pdID0gMSA8PCAo QklUX0RFUFRIIC0gMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkc3QgKz0gc3RyaWRl OworICAgICAgICB9CisgICAgfQorfQorCisvLzguNC41LjIuMTQgU3BlY2lmaWNhdGlvbiBvZiBJ TlRSQV9MVF9DQ0xNLCBJTlRSQV9MX0NDTE0gYW5kIElOVFJBX1RfQ0NMTSBpbnRyYSBwcmVkaWN0 aW9uIG1vZGUKK3N0YXRpYyB2b2lkIEZVTkMoaW50cmFfY2NsbV9wcmVkKShjb25zdCBWVkNMb2Nh bENvbnRleHQgKmxjLCBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCwKKyAgICBjb25zdCBpbnQg d2lkdGgsIGNvbnN0IGludCBoZWlnaHQpCit7CisgICAgVlZDRnJhbWVDb250ZXh0ICpmYyAgICAg PSBsYy0+ZmM7CisgICAgY29uc3QgVlZDU1BTICpzcHMgPSBmYy0+cHMuc3BzOworICAgIGNvbnN0 IGludCBhdmFpbF90ID0gZmZfdnZjX2dldF90b3BfYXZhaWxhYmxlKGxjLCB4MCwgeTAsIDEsIDAp OworICAgIGNvbnN0IGludCBhdmFpbF9sID0gZmZfdnZjX2dldF9sZWZ0X2F2YWlsYWJsZShsYywg eDAsIHkwLCAxLCAwKTsKKyAgICBjb25zdCBpbnQgaHMgPSBzcHMtPmhzaGlmdFsxXTsKKyAgICBj b25zdCBpbnQgdnMgPSBzcHMtPnZzaGlmdFsxXTsKKyAgICBjb25zdCBpbnQgeCAgPSB4MCA+PiBo czsKKyAgICBjb25zdCBpbnQgeSAgPSB5MCA+PiB2czsKKyAgICBjb25zdCBpbnQgdyAgPSB3aWR0 aCA+PiBoczsKKyAgICBjb25zdCBpbnQgaCAgPSBoZWlnaHQgPj4gdnM7CisgICAgaW50IGFbMl0s IGJbMl0sIGtbMl07CisKKyAgICBwaXhlbCBkc3lbTUFYX1RCX1NJWkUgKiBNQVhfVEJfU0laRV07 CisgICAgaWYgKCFhdmFpbF90ICYmICFhdmFpbF9sKSB7CisgICAgICAgIEZVTkMoY2NsbV9wcmVk X2RlZmF1bHQpKGZjLCB4LCB5LCB3LCBoLCBhdmFpbF90LCBhdmFpbF9sKTsKKyAgICAgICAgcmV0 dXJuOworICAgIH0KKyAgICBGVU5DKGNjbG1fZ2V0X2x1bWFfcmVjX3BpeGVscykoZmMsIHgwLCB5 MCwgdywgaCwgYXZhaWxfdCwgYXZhaWxfbCwgZHN5KTsKKyAgICBGVU5DKGNjbG1fZ2V0X3BhcmFt cykgKGxjLCB4MCwgeTAsIHcsIGgsIGF2YWlsX3QsIGF2YWlsX2wsIGEsIGIsIGspOworICAgIEZV TkMoY2NsbV9saW5lYXJfcHJlZCkoZmMsIHgwLCB5MCwgdywgaCwgZHN5LCBhLCBiLCBrKTsKK30K Kworc3RhdGljIGludCBGVU5DKGxtY3Nfc3VtX3NhbXBsZXMpKGNvbnN0IHBpeGVsICpzdGFydCwg cHRyZGlmZl90IHN0cmlkZSwgY29uc3QgaW50IGF2YWlsLCBjb25zdCBpbnQgdGFyZ2V0X3NpemUp Cit7CisgICAgY29uc3QgaW50IHNpemUgPSBGRk1JTihhdmFpbCwgdGFyZ2V0X3NpemUpOworICAg IGludCBzdW0gPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAg ICAgIHN1bSArPSAqc3RhcnQ7CisgICAgICAgIHN0YXJ0ICs9IHN0cmlkZTsKKyAgICB9CisgICAg c3VtICs9ICooc3RhcnQgLSBzdHJpZGUpICogKHRhcmdldF9zaXplIC0gc2l6ZSk7CisgICAgcmV0 dXJuIHN1bTsKK30KKworLy8gOC43LjUuMyBQaWN0dXJlIHJlY29uc3RydWN0aW9uIHdpdGggbHVt YSBkZXBlbmRlbnQgY2hyb21hIHJlc2lkdWFsIHNjYWxpbmcgcHJvY2VzcyBmb3IgY2hyb21hIHNh bXBsZXMKK3N0YXRpYyBpbnQgRlVOQyhsbWNzX2Rlcml2ZV9jaHJvbWFfc2NhbGUpKFZWQ0xvY2Fs Q29udGV4dCAqbGMsIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwKQoreworICAgIFZWQ0ZyYW1l Q29udGV4dCAqZmMgPSBsYy0+ZmM7CisgICAgY29uc3QgVlZDTE1DUyAqbG1jcyA9ICZmYy0+cHMu bG1jczsKKyAgICBjb25zdCBpbnQgc2l6ZV95ICAgID0gRkZNSU4oZmMtPnBzLnNwcy0+Y3RiX3Np emVfeSwgNjQpOworCisgICAgY29uc3QgaW50IHggPSB4MCAmIH4oc2l6ZV95IC0gMSk7CisgICAg Y29uc3QgaW50IHkgPSB5MCAmIH4oc2l6ZV95IC0gMSk7CisgICAgaWYgKGxjLT5sbWNzLnhfdnBk dSAhPSB4IHx8IGxjLT5sbWNzLnlfdnBkdSAhPSB5KSB7CisgICAgICAgIGludCBjbnQgPSAwLCBs dW1hID0gMCwgaTsKKyAgICAgICAgY29uc3QgcGl4ZWwgKnNyYyA9IChjb25zdCBwaXhlbCAqKShm Yy0+ZnJhbWUtPmRhdGFbTFVNQV0gKyB5ICogZmMtPmZyYW1lLT5saW5lc2l6ZVtMVU1BXSArICh4 IDw8IGZjLT5wcy5zcHMtPnBpeGVsX3NoaWZ0KSk7CisgICAgICAgIGNvbnN0IHB0cmRpZmZfdCBz dHJpZGUgPSBmYy0+ZnJhbWUtPmxpbmVzaXplW0xVTUFdIC8gc2l6ZW9mKHBpeGVsKTsKKyAgICAg ICAgY29uc3QgaW50IGF2YWlsX3QgPSBmZl92dmNfZ2V0X3RvcF9hdmFpbGFibGUgKGxjLCB4LCB5 LCAxLCAwKTsKKyAgICAgICAgY29uc3QgaW50IGF2YWlsX2wgPSBmZl92dmNfZ2V0X2xlZnRfYXZh aWxhYmxlKGxjLCB4LCB5LCAxLCAwKTsKKyAgICAgICAgaWYgKGF2YWlsX2wpIHsKKyAgICAgICAg ICAgIGx1bWEgKz0gRlVOQyhsbWNzX3N1bV9zYW1wbGVzKShzcmMgLSAxLCBzdHJpZGUsIGZjLT5w cy5wcHMtPmhlaWdodCAtIHksIHNpemVfeSk7CisgICAgICAgICAgICBjbnQgPSBzaXplX3k7Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKGF2YWlsX3QpIHsKKyAgICAgICAgICAgIGx1bWEgKz0gRlVO QyhsbWNzX3N1bV9zYW1wbGVzKShzcmMgLSBzdHJpZGUsIDEsIGZjLT5wcy5wcHMtPndpZHRoIC0g eCwgc2l6ZV95KTsKKyAgICAgICAgICAgIGNudCArPSBzaXplX3k7CisgICAgICAgIH0KKyAgICAg ICAgaWYgKGNudCkKKyAgICAgICAgICAgIGx1bWEgPSAobHVtYSArIChjbnQgPj4gMSkpID4+IGF2 X2xvZzIoY250KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbHVtYSA9IDEgPDwgKEJJVF9E RVBUSCAtIDEpOworCisgICAgICAgIGZvciAoaSA9IGxtY3MtPm1pbl9iaW5faWR4OyBpIDw9IGxt Y3MtPm1heF9iaW5faWR4OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChsdW1hIDwgbG1jcy0+cGl2 b3RbaSArIDFdKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGkg PSBGRk1JTihpLCBMTUNTX01BWF9CSU5fU0laRSAtIDEpOworCisgICAgICAgIGxjLT5sbWNzLmNo cm9tYV9zY2FsZSA9IGxtY3MtPmNocm9tYV9zY2FsZV9jb2VmZltpXTsKKyAgICAgICAgbGMtPmxt Y3MueF92cGR1ID0geDsKKyAgICAgICAgbGMtPmxtY3MueV92cGR1ID0geTsKKyAgICB9CisgICAg cmV0dXJuIGxjLT5sbWNzLmNocm9tYV9zY2FsZTsKK30KKworLy8gOC43LjUuMyBQaWN0dXJlIHJl Y29uc3RydWN0aW9uIHdpdGggbHVtYSBkZXBlbmRlbnQgY2hyb21hIHJlc2lkdWFsIHNjYWxpbmcg cHJvY2VzcyBmb3IgY2hyb21hIHNhbXBsZXMKK3N0YXRpYyB2b2lkIEZVTkMobG1jc19zY2FsZV9j aHJvbWEpKFZWQ0xvY2FsQ29udGV4dCAqbGMsIGludCAqZHN0LCBjb25zdCBpbnQgKmNvZWZmLAor ICAgIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwgY29uc3QgaW50IHgwX2N1LCBj b25zdCBpbnQgeTBfY3UpCit7CisgICAgY29uc3QgaW50IGNocm9tYV9zY2FsZSA9IEZVTkMobG1j c19kZXJpdmVfY2hyb21hX3NjYWxlKShsYywgeDBfY3UsIHkwX2N1KTsKKworICAgIGZvciAoaW50 IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3 aWR0aDsgeCsrKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgYyA9IGF2X2NsaXBfaW50cDIoKmNv ZWZmLCBCSVRfREVQVEgpOworCisgICAgICAgICAgICBpZiAoYyA+IDApCisgICAgICAgICAgICAg ICAgKmRzdCA9IChjICogY2hyb21hX3NjYWxlICsgKDEgPDwgMTApKSA+PiAxMTsKKyAgICAgICAg ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAqZHN0ID0gLSgoLWMgKiBjaHJvbWFfc2NhbGUgKyAo MSA8PCAxMCkpID4+IDExKTsKKyAgICAgICAgICAgIGNvZWZmKys7CisgICAgICAgICAgICBkc3Qr KzsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgdm9pZCBG VU5DKHJlZl9maWx0ZXIpKGNvbnN0IHBpeGVsICpsZWZ0LCBjb25zdCBwaXhlbCAqdG9wLAorICAg IHBpeGVsICpmaWx0ZXJlZF9sZWZ0LCBwaXhlbCAqZmlsdGVyZWRfdG9wLCBjb25zdCBpbnQgbGVm dF9zaXplLCBjb25zdCBpbnQgdG9wX3NpemUsCisgICAgY29uc3QgaW50IHVuZmlsdGVyX2xhc3Rf b25lKQoreworICAgIGZpbHRlcmVkX2xlZnRbLTFdID0gZmlsdGVyZWRfdG9wWy0xXSA9IChsZWZ0 WzBdICsgIDIgKiBsZWZ0Wy0xXSArIHRvcFswXSArIDIgKSA+PiAyOworICAgIGZvciAoaW50IGkg PSAwOyBpIDwgbGVmdF9zaXplIC0gdW5maWx0ZXJfbGFzdF9vbmU7IGkrKykgeworICAgICAgICBm aWx0ZXJlZF9sZWZ0W2ldID0gKGxlZnRbaS0gMV0gKyAyICogbGVmdFtpXSArIGxlZnRbaSArIDFd ICsgMikgPj4gMjsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3Bfc2l6ZSAtIHVu ZmlsdGVyX2xhc3Rfb25lOyBpKyspIHsKKyAgICAgICAgZmlsdGVyZWRfdG9wW2ldID0gKHRvcFtp LTFdICsgMiAqIHRvcFtpXSArIHRvcFtpICsgMV0gKyAyKSA+PiAyOworICAgIH0KKyAgICBpZiAo dW5maWx0ZXJfbGFzdF9vbmUpIHsKKyAgICAgICAgZmlsdGVyZWRfdG9wW3RvcF9zaXplIC0gMV0g PSB0b3BbdG9wX3NpemUgLSAxXTsKKyAgICAgICAgZmlsdGVyZWRfbGVmdFtsZWZ0X3NpemUgLSAx XSA9IGxlZnRbbGVmdF9zaXplIC0gMV07CisgICAgfQorfQorCitzdGF0aWMgYXZfYWx3YXlzX2lu bGluZSB2b2lkIEZVTkMocHJlcGFyZV9pbnRyYV9lZGdlX3BhcmFtcykoY29uc3QgVlZDTG9jYWxD b250ZXh0ICpsYywKKyAgICBJbnRyYUVkZ2VQYXJhbXMqIGVkZ2UsIGNvbnN0IHBpeGVsICpzcmMs IGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUsCisgICAgY29uc3QgaW50IHgsIGludCB5LCBpbnQgdywg aW50IGgsIGludCBjX2lkeCwgY29uc3QgaW50IGlzX2ludHJhX21pcCwKKyAgICBjb25zdCBpbnQg bW9kZSwgY29uc3QgaW50IHJlZl9pZHgsIGNvbnN0IGludCBuZWVkX3BkcGMpCit7CisjZGVmaW5l IEVYVEVORChwdHIsIHZhbCwgbGVuKSAgICAgICAgIFwKK2RvIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgIGZvciAoaSA9IDA7IGkgPCAobGVuKTsgaSsrKSAgICAgICBc CisgICAgICAgICoocHRyICsgaSkgPSB2YWw7ICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCisg ICAgY29uc3QgQ29kaW5nVW5pdCAqY3UgPSBsYy0+Y3U7CisgICAgY29uc3QgaW50IHJlZl9maWx0 ZXJfZmxhZyA9IGlzX2ludHJhX21pcCA/IDAgOiBmZl92dmNfcmVmX2ZpbHRlcl9mbGFnX2Rlcml2 ZShtb2RlKTsKKyAgICBjb25zdCBpbnQgZmlsdGVyX2ZsYWcgPSAhcmVmX2lkeCAmJiB3ICogaCA+ IDMyICYmICFjX2lkeCAmJgorICAgICAgICBjdS0+aXNwX3NwbGl0X3R5cGUgPT0gSVNQX05PX1NQ TElUICYmIHJlZl9maWx0ZXJfZmxhZzsKKyAgICBpbnQgY2FuZF91cF9sZWZ0ICAgICAgPSBsYy0+ bmEuY2FuZF91cF9sZWZ0OworICAgIHBpeGVsICAqbGVmdCAgICAgICAgICA9IChwaXhlbCopZWRn ZS0+bGVmdF9hcnJheSArIE1BWF9UQl9TSVpFICsgMzsKKyAgICBwaXhlbCAgKnRvcCAgICAgICAg ICAgPSAocGl4ZWwqKWVkZ2UtPnRvcF9hcnJheSAgKyBNQVhfVEJfU0laRSArIDM7CisgICAgcGl4 ZWwgICpmaWx0ZXJlZF9sZWZ0ID0gKHBpeGVsKillZGdlLT5maWx0ZXJlZF9sZWZ0X2FycmF5ICsg TUFYX1RCX1NJWkUgKyAzOworICAgIHBpeGVsICAqZmlsdGVyZWRfdG9wICA9IChwaXhlbCopZWRn ZS0+ZmlsdGVyZWRfdG9wX2FycmF5ICArIE1BWF9UQl9TSVpFICsgMzsKKyAgICBjb25zdCBpbnQg cmVmX2xpbmUgPSByZWZfaWR4ID09IDMgPyAtNCA6ICgtMSAtIHJlZl9pZHgpOworICAgIGludCBs ZWZ0X3NpemUsIHRvcF9zaXplLCB1bmZpbHRlcl9sZWZ0X3NpemUsIHVuZmlsdGVyX3RvcF9zaXpl OworICAgIGludCBsZWZ0X2F2YWlsYWJsZSwgdG9wX2F2YWlsYWJsZTsKKyAgICBpbnQgcmVmdywg cmVmaDsKKyAgICBpbnQgaW50cmFfcHJlZF9hbmdsZSwgaW52X2FuZ2xlOworICAgIGludCBpOwor CisgICAgaWYgKGlzX2ludHJhX21pcCB8fCBtb2RlID09IElOVFJBX1BMQU5BUikgeworICAgICAg ICBsZWZ0X3NpemUgPSBoICsgMTsKKyAgICAgICAgdG9wX3NpemUgID0gdyArIDE7CisgICAgICAg IHVuZmlsdGVyX2xlZnRfc2l6ZSA9IGxlZnRfc2l6ZSArIGZpbHRlcl9mbGFnOworICAgICAgICB1 bmZpbHRlcl90b3Bfc2l6ZSAgPSB0b3Bfc2l6ZSAgKyBmaWx0ZXJfZmxhZzsKKyAgICB9IGVsc2Ug aWYgKG1vZGUgPT0gSU5UUkFfREMpIHsKKyAgICAgICAgdW5maWx0ZXJfbGVmdF9zaXplID0gbGVm dF9zaXplID0gaDsKKyAgICAgICAgdW5maWx0ZXJfdG9wX3NpemUgPSB0b3Bfc2l6ZSAgPSB3Owor ICAgIH0gZWxzZSBpZiAobW9kZSA9PSBJTlRSQV9WRVJUKSB7CisgICAgICAgIC8vd2UgbWF5IG5l ZWQgMSBwaXhlbCB0byBwcmVkaWN0IHRoZSB0b3AgbGVmdC4KKyAgICAgICAgdW5maWx0ZXJfbGVm dF9zaXplID0gbGVmdF9zaXplID0gbmVlZF9wZHBjID8gaCA6IDE7CisgICAgICAgIHVuZmlsdGVy X3RvcF9zaXplID0gdG9wX3NpemUgID0gdzsKKyAgICB9IGVsc2UgaWYgKG1vZGUgPT0gSU5UUkFf SE9SWikgeworICAgICAgICB1bmZpbHRlcl9sZWZ0X3NpemUgPSBsZWZ0X3NpemUgPSBoOworICAg ICAgICAvL2V2ZW4gbmVlZF9wZHBjID09IDAsIHdlIG1heSBuZWVkIDEgcGl4ZWwgdG8gcHJlZGlj dCB0aGUgdG9wIGxlZnQuCisgICAgICAgIHVuZmlsdGVyX3RvcF9zaXplID0gdG9wX3NpemUgPSBu ZWVkX3BkcGMgPyB3IDogMTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoY3UtPmlzcF9zcGxp dF90eXBlID09IElTUF9OT19TUExJVCB8fCBjX2lkeCkgeworICAgICAgICAgICAgcmVmdyA9IHcg KiAyOworICAgICAgICAgICAgcmVmaCA9IGggKiAyOworICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgcmVmdyA9IGN1LT5jYl93aWR0aCArIHc7CisgICAgICAgICAgICByZWZoID0gY3UtPmNi X2hlaWdodCArIGg7CisgICAgICAgIH0KKyAgICAgICAgaW50cmFfcHJlZF9hbmdsZSA9IGZmX3Z2 Y19pbnRyYV9wcmVkX2FuZ2xlX2Rlcml2ZShtb2RlKTsKKyAgICAgICAgaW52X2FuZ2xlID0gZmZf dnZjX2ludHJhX2ludl9hbmdsZV9kZXJpdmUoaW50cmFfcHJlZF9hbmdsZSk7CisgICAgICAgIHVu ZmlsdGVyX3RvcF9zaXplID0gdG9wX3NpemUgID0gcmVmdzsKKyAgICAgICAgdW5maWx0ZXJfbGVm dF9zaXplID0gbGVmdF9zaXplID0gcmVmaDsKKyAgICB9CisKKyAgICBsZWZ0X2F2YWlsYWJsZSA9 IGZmX3Z2Y19nZXRfbGVmdF9hdmFpbGFibGUobGMsIHgsIHksIHVuZmlsdGVyX2xlZnRfc2l6ZSwg Y19pZHgpOworICAgIGZvciAoaSA9IDA7IGkgPCBsZWZ0X2F2YWlsYWJsZTsgaSsrKQorICAgICAg ICBsZWZ0W2ldID0gUE9TKHJlZl9saW5lLCBpKTsKKworICAgIHRvcF9hdmFpbGFibGUgPSBmZl92 dmNfZ2V0X3RvcF9hdmFpbGFibGUobGMsIHgsIHksIHVuZmlsdGVyX3RvcF9zaXplLCBjX2lkeCk7 CisgICAgbWVtY3B5KHRvcCwgc3JjICsgcmVmX2xpbmUgKiBzdHJpZGUsIHRvcF9hdmFpbGFibGUg KiBzaXplb2YocGl4ZWwpKTsKKworICAgIGZvciAoaW50IGkgPSAtMTsgaSA+PSByZWZfbGluZTsg aS0tKSB7CisgICAgICAgIGlmIChjYW5kX3VwX2xlZnQpIHsKKyAgICAgICAgICAgIGxlZnRbaV0g PSBQT1MocmVmX2xpbmUsIGkpOworICAgICAgICAgICAgdG9wW2ldICA9IFBPUyhpLCByZWZfbGlu ZSk7CisgICAgICAgIH0gZWxzZSBpZiAobGVmdF9hdmFpbGFibGUpIHsKKyAgICAgICAgICAgIGxl ZnRbaV0gPSB0b3BbaV0gPSBsZWZ0WzBdOworICAgICAgICB9IGVsc2UgaWYgKHRvcF9hdmFpbGFi bGUpIHsKKyAgICAgICAgICAgIGxlZnRbaV0gPSB0b3BbaV0gPSB0b3BbMF07CisgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICBsZWZ0W2ldID0gdG9wW2ldID0gMSA8PCAoQklUX0RFUFRIIC0g MSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBFWFRFTkQodG9wICsgdG9wX2F2YWlsYWJsZSwg dG9wW3RvcF9hdmFpbGFibGUtMV0sIHVuZmlsdGVyX3RvcF9zaXplIC0gdG9wX2F2YWlsYWJsZSk7 CisgICAgRVhURU5EKGxlZnQgKyBsZWZ0X2F2YWlsYWJsZSwgbGVmdFtsZWZ0X2F2YWlsYWJsZS0x XSwgdW5maWx0ZXJfbGVmdF9zaXplIC0gbGVmdF9hdmFpbGFibGUpOworCisgICAgaWYgKHJlZl9m aWx0ZXJfZmxhZykgeworICAgICAgICBpZiAoIXJlZl9pZHggJiYgdyAqIGggPiAzMiAmJiAhY19p ZHggJiYgY3UtPmlzcF9zcGxpdF90eXBlID09IElTUF9OT19TUExJVCApIHsKKyAgICAgICAgICAg IGNvbnN0IGludCB1bmZpbHRlcl9sYXN0X29uZSA9IGxlZnRfc2l6ZSA9PSB1bmZpbHRlcl9sZWZ0 X3NpemU7CisgICAgICAgICAgICBGVU5DKHJlZl9maWx0ZXIpKGxlZnQsIHRvcCwgZmlsdGVyZWRf bGVmdCwgZmlsdGVyZWRfdG9wLCB1bmZpbHRlcl9sZWZ0X3NpemUsIHVuZmlsdGVyX3RvcF9zaXpl LCB1bmZpbHRlcl9sYXN0X29uZSk7CisgICAgICAgICAgICBsZWZ0ID0gZmlsdGVyZWRfbGVmdDsK KyAgICAgICAgICAgIHRvcCAgPSBmaWx0ZXJlZF90b3A7CisgICAgICAgIH0KKyAgICB9CisgICAg aWYgKCFpc19pbnRyYV9taXAgJiYgbW9kZSAhPSBJTlRSQV9QTEFOQVIgJiYgbW9kZSAhPSBJTlRS QV9EQykgeworICAgICAgICBpZiAocmVmX2ZpbHRlcl9mbGFnIHx8IHJlZl9pZHggfHwgY3UtPmlz cF9zcGxpdF90eXBlICE9IElTUF9OT19TUExJVCkgeworICAgICAgICAgICAgZWRnZS0+ZmlsdGVy X2ZsYWcgPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29uc3QgaW50IG1pbl9k aXN0X3Zlcl9ob3IgPSBGRk1JTihhYnMobW9kZSAtIDUwKSwgYWJzKG1vZGUgLSAxOCkpOworICAg ICAgICAgICAgY29uc3QgaW50IGludHJhX2hvcl92ZXJfZGlzdF90aHJlc1tdID0gezI0LCAxNCwg MiwgMCwgMH07CisgICAgICAgICAgICBjb25zdCBpbnQgbnRicyA9IChhdl9sb2cyKHcpICsgYXZf bG9nMihoKSkgPj4gMTsKKyAgICAgICAgICAgIGVkZ2UtPmZpbHRlcl9mbGFnID0gbWluX2Rpc3Rf dmVyX2hvciA+IGludHJhX2hvcl92ZXJfZGlzdF90aHJlc1tudGJzIC0gMl07CisgICAgICAgIH0K KworICAgICAgICBpZiAobW9kZSAhPSBJTlRSQV9WRVJUICYmIG1vZGUgIT0gSU5UUkFfSE9SWikg eworICAgICAgICAgICAgaWYgKG1vZGUgPj0gSU5UUkFfRElBRykgeworICAgICAgICAgICAgICAg IGlmIChpbnRyYV9wcmVkX2FuZ2xlIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBwaXhlbCAq cCA9IHRvcCAtIChyZWZfaWR4ICsgMSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHgg PSAtaDsgeCA8IDA7IHgrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGlk eCA9IC0xIC0gcmVmX2lkeCArIEZGTUlOKCh4Kmludl9hbmdsZSArIDI1NikgPj4gOSwgaCk7Cisg ICAgICAgICAgICAgICAgICAgICAgICBwW3hdID0gbGVmdFtpZHhdOworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZm9y IChpbnQgaSA9IHJlZnc7IGkgPD0gcmVmdyArIEZGTUFYKDEsIHcvaCkgKiByZWZfaWR4ICsgMTsg aSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgdG9wW2ldID0gdG9wW3JlZncgLSAxXTsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlm IChpbnRyYV9wcmVkX2FuZ2xlIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBwaXhlbCAqcCA9 IGxlZnQgLSAocmVmX2lkeCArIDEpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g LXc7IHggPCAwOyB4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBpZHgg PSAtMSAtIHJlZl9pZHggKyBGRk1JTigoeCppbnZfYW5nbGUgKyAyNTYpID4+IDksIHcpOworICAg ICAgICAgICAgICAgICAgICAgICAgcFt4XSA9IHRvcFtpZHhdOworICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChp bnQgaSA9IHJlZmg7IGkgPD0gcmVmaCArIEZGTUFYKDEsIGgvdykgKiByZWZfaWR4ICsgMTsgaSsr KQorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFtpXSA9IGxlZnRbcmVmaCAtIDFdOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlZGdl LT5sZWZ0ID0gKHVpbnQ4X3QqKWxlZnQ7CisgICAgZWRnZS0+dG9wICA9ICh1aW50OF90Kil0b3A7 Cit9CisKKy8vOC40LjEgR2VuZXJhbCBkZWNvZGluZyBwcm9jZXNzIGZvciBjb2RpbmcgdW5pdHMg Y29kZWQgaW4gaW50cmEgcHJlZGljdGlvbiBtb2RlCitzdGF0aWMgdm9pZCBGVU5DKGludHJhX3By ZWQpKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGludCB4MCwgaW50IHkwLAorICAgIGNvbnN0 IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwgaW50IGNfaWR4KQoreworICAgIFZWQ0ZyYW1l Q29udGV4dCAqZmMgICAgID0gbGMtPmZjOworICAgIGNvbnN0IFZWQ1NQUyAqc3BzID0gZmMtPnBz LnNwczsKKyAgICBjb25zdCBWVkNQUFMgKnBwcyA9IGZjLT5wcy5wcHM7CisgICAgY29uc3QgQ29k aW5nVW5pdCAqY3UgPSBsYy0+Y3U7CisgICAgY29uc3QgaW50IGxvZzJfbWluX2NiX3NpemUgICAg PSBzcHMtPm1pbl9jYl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQgbWluX2NiX3dpZHRoICAg ICAgICA9IHBwcy0+bWluX2NiX3dpZHRoOworICAgIGNvbnN0IGludCB4X2NiICAgICAgICAgICAg ICAgID0geDAgPj4gbG9nMl9taW5fY2Jfc2l6ZTsKKyAgICBjb25zdCBpbnQgeV9jYiAgICAgICAg ICAgICAgICA9IHkwID4+IGxvZzJfbWluX2NiX3NpemU7CisKKyAgICBjb25zdCBpbnQgaHNoaWZ0 ID0gZmMtPnBzLnNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICBjb25zdCBpbnQgdnNoaWZ0ID0gZmMt PnBzLnNwcy0+dnNoaWZ0W2NfaWR4XTsKKyAgICBjb25zdCBpbnQgeCA9IHgwID4+IGhzaGlmdDsK KyAgICBjb25zdCBpbnQgeSA9IHkwID4+IHZzaGlmdDsKKyAgICBjb25zdCBpbnQgdyA9IHdpZHRo ID4+IGhzaGlmdDsKKyAgICBjb25zdCBpbnQgaCA9IGhlaWdodCA+PiB2c2hpZnQ7CisgICAgY29u c3QgcHRyZGlmZl90IHN0cmlkZSA9IGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhdIC8gc2l6ZW9m KHBpeGVsKTsKKworICAgIGNvbnN0IGludCBwcmVkX21vZGUgPSBjX2lkeCA/IGN1LT5pbnRyYV9w cmVkX21vZGVfYyA6IGN1LT5pbnRyYV9wcmVkX21vZGVfeTsKKyAgICBjb25zdCBpbnQgbW9kZSA9 IGZmX3Z2Y193aWRlX2FuZ2xlX21vZGVfbWFwcGluZyhjdSwgdywgaCwgY19pZHgsIHByZWRfbW9k ZSk7CisKKyAgICBjb25zdCBpbnQgaW50cmFfbWlwX2ZsYWcgID0gU0FNUExFX0NUQihmYy0+dGFi LmltZiwgeF9jYiwgeV9jYik7CisgICAgY29uc3QgaW50IGlzX2ludHJhX21pcCAgICA9IGludHJh X21pcF9mbGFnICYmICghY19pZHggfHwgY3UtPm1pcF9jaHJvbWFfZGlyZWN0X2ZsYWcpOworICAg IGNvbnN0IGludCByZWZfaWR4ID0gY19pZHggPyAwIDogY3UtPmludHJhX2x1bWFfcmVmX2lkeDsK KyAgICBjb25zdCBpbnQgbmVlZF9wZHBjID0gZmZfdnZjX25lZWRfcGRwYyh3LCBoLCBjdS0+YmRw Y21fZmxhZ1tjX2lkeF0sIG1vZGUsIHJlZl9pZHgpOworCisKKyAgICBwaXhlbCAqc3JjID0gKHBp eGVsKilmYy0+ZnJhbWUtPmRhdGFbY19pZHhdICsgeCArIHkgKiBzdHJpZGU7CisgICAgSW50cmFF ZGdlUGFyYW1zIGVkZ2U7CisKKyAgICBGVU5DKHByZXBhcmVfaW50cmFfZWRnZV9wYXJhbXMpKGxj LCAmZWRnZSwgc3JjLCBzdHJpZGUsIHgsIHksIHcsIGgsIGNfaWR4LCBpc19pbnRyYV9taXAsIG1v ZGUsIHJlZl9pZHgsIG5lZWRfcGRwYyk7CisKKyAgICBpZiAoaXNfaW50cmFfbWlwKSB7CisgICAg ICAgIGludCBpbnRyYV9taXBfdHJhbnNwb3NlZF9mbGFnID0gU0FNUExFX0NUQihmYy0+dGFiLmlt dGYsIHhfY2IsIHlfY2IpOworICAgICAgICBpbnQgaW50cmFfbWlwX21vZGUgPSBTQU1QTEVfQ1RC KGZjLT50YWIuaW1tLCB4X2NiLCB5X2NiKTsKKworICAgICAgICBmYy0+dnZjZHNwLmludHJhLnBy ZWRfbWlwKCh1aW50OF90ICopc3JjLCBlZGdlLnRvcCwgZWRnZS5sZWZ0LAorICAgICAgICAgICAg ICAgICAgICAgICAgdywgaCwgc3RyaWRlLCBpbnRyYV9taXBfbW9kZSwgaW50cmFfbWlwX3RyYW5z cG9zZWRfZmxhZyk7CisgICAgfSBlbHNlIGlmIChtb2RlID09IElOVFJBX1BMQU5BUikgeworICAg ICAgICBmYy0+dnZjZHNwLmludHJhLnByZWRfcGxhbmFyKCh1aW50OF90ICopc3JjLCBlZGdlLnRv cCwgZWRnZS5sZWZ0LCB3LCBoLCBzdHJpZGUpOworICAgIH0gZWxzZSBpZiAobW9kZSA9PSBJTlRS QV9EQykgeworICAgICAgICBmYy0+dnZjZHNwLmludHJhLnByZWRfZGMoKHVpbnQ4X3QgKilzcmMs IGVkZ2UudG9wLCBlZGdlLmxlZnQsIHcsIGgsIHN0cmlkZSk7CisgICAgfSBlbHNlIGlmIChtb2Rl ID09IElOVFJBX1ZFUlQpIHsKKyAgICAgICAgZmMtPnZ2Y2RzcC5pbnRyYS5wcmVkX3YoKHVpbnQ4 X3QgKilzcmMsIGVkZ2UudG9wLCB3LCBoLCBzdHJpZGUpOworICAgIH0gZWxzZSBpZiAobW9kZSA9 PSBJTlRSQV9IT1JaKSB7CisgICAgICAgIGZjLT52dmNkc3AuaW50cmEucHJlZF9oKCh1aW50OF90 ICopc3JjLCBlZGdlLmxlZnQsIHcsIGgsIHN0cmlkZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg aWYgKG1vZGUgPj0gSU5UUkFfRElBRykgeworICAgICAgICAgICAgZmMtPnZ2Y2RzcC5pbnRyYS5w cmVkX2FuZ3VsYXJfdigodWludDhfdCAqKXNyYywgZWRnZS50b3AsIGVkZ2UubGVmdCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LCBoLCBzdHJpZGUsIGNfaWR4LCBtb2RlLCBy ZWZfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UuZmlsdGVyX2Zs YWcsIG5lZWRfcGRwYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmYy0+dnZjZHNw LmludHJhLnByZWRfYW5ndWxhcl9oKCh1aW50OF90ICopc3JjLCBlZGdlLnRvcCwgZWRnZS5sZWZ0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcsIGgsIHN0cmlkZSwgY19pZHgs IG1vZGUsIHJlZl9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS5m aWx0ZXJfZmxhZywgbmVlZF9wZHBjKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobmVlZF9w ZHBjKSB7CisgICAgICAgIC8vOC40LjUuMi4xNSBQb3NpdGlvbi1kZXBlbmRlbnQgaW50cmEgcHJl ZGljdGlvbiBzYW1wbGUgZmlsdGVyaW5nIHByb2Nlc3MKKyAgICAgICAgaWYgKCFpc19pbnRyYV9t aXAgJiYgKG1vZGUgPT0gSU5UUkFfUExBTkFSIHx8IG1vZGUgPT0gSU5UUkFfREMgfHwKKyAgICAg ICAgICAgIG1vZGUgPT0gSU5UUkFfVkVSVCB8fCBtb2RlID09IElOVFJBX0hPUlopKSB7CisgICAg ICAgICAgICBjb25zdCBpbnQgc2NhbGUgPSAoYXZfbG9nMih3KSArIGF2X2xvZzIoaCkgLSAyKSA+ PiAyOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKmxlZnQgPSAocGl4ZWwqKWVkZ2UubGVmdDsK KyAgICAgICAgICAgIGNvbnN0IHBpeGVsICp0b3AgID0gKHBpeGVsKillZGdlLnRvcDsKKyAgICAg ICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKSB7CisgICAgICAgICAgICAgICAgZm9y IChpbnQgeCA9IDA7IHggPCB3OyB4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGwsIHQs IHdsLCB3dCwgcHJlZDsKKyAgICAgICAgICAgICAgICAgICAgcGl4ZWwgdmFsOworICAgICAgICAg ICAgICAgICAgICBpZiAobW9kZSA9PSBJTlRSQV9QTEFOQVIgfHwgbW9kZSA9PSBJTlRSQV9EQykg eworICAgICAgICAgICAgICAgICAgICAgICAgbCAgPSBsZWZ0W3ldOworICAgICAgICAgICAgICAg ICAgICAgICAgdCA9IHRvcFt4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdsID0gMzIgPj4g RkZNSU4oKHggPDwgMSkgPj4gc2NhbGUsIDMxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHd0 ID0gMzIgPj4gRkZNSU4oKHkgPDwgMSkgPj4gc2NhbGUsIDMxKTsKKyAgICAgICAgICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGwgID0gbGVmdFt5XSAtIGxlZnRb LTFdICsgUE9TKHgseSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0ID0gdG9wW3hdIC0gdG9w Wy0xXSArIFBPUyh4LHkpOworICAgICAgICAgICAgICAgICAgICAgICAgd2wgPSAobW9kZSA9PSBJ TlRSQV9WRVJUKSA/ICAoMzIgPj4gRkZNSU4oKHggPDwgMSkgPj4gc2NhbGUsIDMxKSkgOiAwOwor ICAgICAgICAgICAgICAgICAgICAgICAgd3QgPSAobW9kZSA9PSBJTlRSQV9IT1JaKSA/ICAoMzIg Pj4gRkZNSU4oKHkgPDwgMSkgPj4gc2NhbGUsIDMxKSkgOiAwOworICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgIHZhbCA9IFBPUyh4LCB5KTsKKyAgICAgICAgICAgICAg ICAgICAgcHJlZCAgPSB2YWwgKyAoKHdsICogKGwgLSB2YWwpICsgd3QgKiAodCAtIHZhbCkgKyAz MikgPj4gNik7CisgICAgICAgICAgICAgICAgICAgIFBPUyh4LCB5KSA9IENMSVAocHJlZCk7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCisv LzguNC41LjIuMTEgU3BlY2lmaWNhdGlvbiBvZiBJTlRSQV9QTEFOQVIgaW50cmEgcHJlZGljdGlv biBtb2RlCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB2b2lkIEZVTkMocHJlZF9wbGFuYXIpKHVp bnQ4X3QgKl9zcmMsIGNvbnN0IHVpbnQ4X3QgKl90b3AsCisgICAgY29uc3QgdWludDhfdCAqX2xl ZnQsIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCwgY29uc3QgcHRyZGlmZl90IHN0cmlkZSkKK3sK KyAgICBpbnQgeCwgeTsKKyAgICBwaXhlbCAqc3JjICAgICAgICA9IChwaXhlbCAqKV9zcmM7Cisg ICAgY29uc3QgcGl4ZWwgKnRvcCAgPSAoY29uc3QgcGl4ZWwgKilfdG9wOworICAgIGNvbnN0IHBp eGVsICpsZWZ0ID0gKGNvbnN0IHBpeGVsICopX2xlZnQ7CisgICAgY29uc3QgaW50IGxvZ3cgID0g YXZfbG9nMih3KTsKKyAgICBjb25zdCBpbnQgbG9naCAgPSBhdl9sb2cyKGgpOworICAgIGNvbnN0 IGludCBzaXplICA9ICB3ICogaDsKKyAgICBjb25zdCBpbnQgc2hpZnQgPSAobG9ndyArIGxvZ2gg KyAxKTsKKyAgICBmb3IgKHkgPSAwOyB5IDwgaDsgeSsrKSB7CisgICAgICAgIGZvciAoeCA9IDA7 IHggPCB3OyB4KyspIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBwcmVkX3YgPSAoKGggLSAxIC0g eSkgKiB0b3BbeF0gICsgKHkgKyAxKSAqIGxlZnRbaF0pIDw8IGxvZ3c7CisgICAgICAgICAgICBj b25zdCBpbnQgcHJlZF9oID0gKCh3IC0gMSAtIHgpICogbGVmdFt5XSArICh4ICsgMSkgKiB0b3Bb d10pIDw8IGxvZ2g7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJlZCA9IChwcmVkX3YgKyBwcmVk X2ggKyBzaXplKSA+PiBzaGlmdDsKKyAgICAgICAgICAgIFBPUyh4LCB5KSA9IHByZWQ7CisgICAg ICAgIH0KKyAgICB9Cit9CisKKy8vOC40LjUuMi4zIE1JUCBib3VuZGFyeSBzYW1wbGUgZG93bnNh bXBsaW5nIHByb2Nlc3MKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHZvaWQgRlVOQyhtaXBfZG93 bnNhbXBsaW5nKShpbnQgKnJlZHVjZWQsIGNvbnN0IGludCBib3VuZGFyeV9zaXplLAorICAgIGNv bnN0IHBpeGVsICpyZWYsIGNvbnN0IGludCBuX3RiX3MpCit7CisgICAgY29uc3QgaW50IGJfZHdu ID0gbl90Yl9zIC8gYm91bmRhcnlfc2l6ZTsKKyAgICBjb25zdCBpbnQgbG9nMiA9IGF2X2xvZzIo Yl9kd24pOworCisgICAgaWYgKGJvdW5kYXJ5X3NpemUgPT0gbl90Yl9zKSB7CisgICAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgbl90Yl9zOyBpKyspCisgICAgICAgICAgICByZWR1Y2VkW2ldID0g cmVmW2ldOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwg Ym91bmRhcnlfc2l6ZTsgaSsrKSB7CisgICAgICAgIGludCByOworICAgICAgICByID0gKnJlZisr OworICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8IGJfZHduOyBqKyspCisgICAgICAgICAgICBy ICs9ICpyZWYrKzsKKyAgICAgICAgcmVkdWNlZFtpXSA9IChyICsgKDEgPDwgKGxvZzIgLSAxKSkp ID4+IGxvZzI7CisgICAgfQorfQorCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB2b2lkIEZVTkMo bWlwX3JlZHVjZWRfcHJlZCkocGl4ZWwgKnNyYywgY29uc3QgcHRyZGlmZl90IHN0cmlkZSwKKyAg ICBjb25zdCBpbnQgdXBfaG9yLCBjb25zdCBpbnQgdXBfdmVyLCBjb25zdCBpbnQgcHJlZF9zaXpl LCBjb25zdCBpbnQgKnJlZHVjZWQsIGNvbnN0IGludCByZWR1Y2VkX3NpemUsCisgICAgY29uc3Qg aW50IG93LCBjb25zdCBpbnQgdGVtcDAsIGNvbnN0IHVpbnQ4X3QgKm1hdHJpeCwgaW50IGlzX3Ry YW5zcG9zZWQpCit7CisgICAgc3JjID0gJlBPUyh1cF9ob3IgLSAxLCB1cF92ZXIgLSAxKTsKKyAg ICBmb3IgKGludCB5ID0gMDsgeSA8IHByZWRfc2l6ZTsgeSsrKSB7CisgICAgICAgIGZvciAoaW50 IHggPSAwOyB4IDwgcHJlZF9zaXplOyB4KyspIHsKKyAgICAgICAgICAgIGludCBwcmVkID0gMDsK KyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVkdWNlZF9zaXplOyBpKyspCisgICAg ICAgICAgICAgICAgcHJlZCArPSByZWR1Y2VkW2ldICogbWF0cml4W2ldOworICAgICAgICAgICAg bWF0cml4ICs9IHJlZHVjZWRfc2l6ZTsKKyAgICAgICAgICAgIHByZWQgPSAoKHByZWQgKyBvdykg Pj4gNikgKyB0ZW1wMDsKKyAgICAgICAgICAgIHByZWQgPSBhdl9jbGlwKHByZWQsIDAsICgxPDxC SVRfREVQVEgpIC0gMSk7CisgICAgICAgICAgICBpZiAoaXNfdHJhbnNwb3NlZCkKKyAgICAgICAg ICAgICAgICBQT1MoeSAqIHVwX2hvciwgeCAqIHVwX3ZlcikgPSBwcmVkOworICAgICAgICAgICAg ZWxzZQorICAgICAgICAgICAgICAgIFBPUyh4ICogdXBfaG9yLCB5ICogdXBfdmVyKSA9IHByZWQ7 CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHZvaWQgRlVO QyhtaXBfdXBzYW1wbGluZ18xZCkocGl4ZWwgKmRzdCwgY29uc3QgaW50IGRzdF9zdGVwLCBjb25z dCBpbnQgZHN0X3N0cmlkZSwgY29uc3QgaW50IGRzdF9oZWlnaHQsIGNvbnN0IGludCBmYWN0b3Is CisgICAgY29uc3QgcGl4ZWwgKmJvdW5kYXJ5LCBjb25zdCBpbnQgYm91bmRhcnlfc3RlcCwgIGNv bnN0IGludCBwcmVkX3NpemUpCit7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGRzdF9oZWln aHQ7IGkrKykgeworICAgICAgICBjb25zdCBwaXhlbCAqYmVmb3JlID0gYm91bmRhcnk7CisgICAg ICAgIGNvbnN0IHBpeGVsICphZnRlciAgPSBkc3QgLSBkc3Rfc3RlcDsKKyAgICAgICAgcGl4ZWwg KmQgPSBkc3Q7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcHJlZF9zaXplOyBqKyspIHsK KyAgICAgICAgICAgIGFmdGVyICs9IGRzdF9zdGVwICogZmFjdG9yOworICAgICAgICAgICAgZm9y IChpbnQgayA9IDE7IGsgPCBmYWN0b3I7IGsrKykgeworICAgICAgICAgICAgICAgIGludCBtaWQg PSAoZmFjdG9yIC0gaykgKiAoKmJlZm9yZSkgKyBrICogKCphZnRlcik7CisgICAgICAgICAgICAg ICAgKmQgPSAobWlkICsgZmFjdG9yIC8gMikgLyBmYWN0b3I7CisgICAgICAgICAgICAgICAgZCAr PSBkc3Rfc3RlcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJlZm9yZSA9IGFmdGVyOwor ICAgICAgICAgICAgZCArPSBkc3Rfc3RlcDsKKyAgICAgICAgfQorICAgICAgICBib3VuZGFyeSAr PSBib3VuZGFyeV9zdGVwOworICAgICAgICBkc3QgKz0gZHN0X3N0cmlkZTsKKyAgICB9Cit9CisK Ky8vOC40LjUuMi4yIE1hdHJpeC1iYXNlZCBpbnRyYSBzYW1wbGUgcHJlZGljdGlvbgorc3RhdGlj IGF2X2Fsd2F5c19pbmxpbmUgdm9pZCBGVU5DKHByZWRfbWlwKSh1aW50OF90ICpfc3JjLCBjb25z dCB1aW50OF90ICpfdG9wLAorICAgIGNvbnN0IHVpbnQ4X3QgKl9sZWZ0LCBjb25zdCBpbnQgdywg Y29uc3QgaW50IGgsIGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUsCisgICAgaW50IG1vZGVfaWQsIGlu dCBpc190cmFuc3Bvc2VkKQoreworICAgIHBpeGVsICpzcmMgICAgICAgID0gKHBpeGVsICopX3Ny YzsKKyAgICBjb25zdCBwaXhlbCAqdG9wICA9IChjb25zdCBwaXhlbCAqKV90b3A7CisgICAgY29u c3QgcGl4ZWwgKmxlZnQgPSAoY29uc3QgcGl4ZWwgKilfbGVmdDsKKworICAgIGNvbnN0IGludCBz aXplX2lkID0gZmZfdnZjX2dldF9taXBfc2l6ZV9pZCh3LCBoKTsKKyAgICBzdGF0aWMgY29uc3Qg aW50IGJvdW5kYXJ5X3NpemVzW10gPSB7MiwgNCwgNH07CisgICAgc3RhdGljIGNvbnN0IGludCBw cmVkX3NpemVzW10gPSB7NCwgNCwgOH07CisgICAgY29uc3QgaW50IGJvdW5kYXJ5X3NpemUgPSBi b3VuZGFyeV9zaXplc1tzaXplX2lkXTsKKyAgICBjb25zdCBpbnQgcHJlZF9zaXplICAgICA9IHBy ZWRfc2l6ZXNbc2l6ZV9pZF07CisgICAgY29uc3QgaW50IGluX3NpemUgPSAyICogYm91bmRhcnlf c2l6ZSAtICgoc2l6ZV9pZCA9PSAyKSA/IDEgOiAwKTsKKyAgICBjb25zdCB1aW50OF90ICptYXRy aXggPSBmZl92dmNfZ2V0X21pcF9tYXRyaXgoc2l6ZV9pZCwgbW9kZV9pZCk7CisgICAgY29uc3Qg aW50IHVwX2hvciA9IHcgLyBwcmVkX3NpemU7CisgICAgY29uc3QgaW50IHVwX3ZlciA9IGggLyBw cmVkX3NpemU7CisKKyAgICBpbnQgcmVkdWNlZFsxNl07CisgICAgaW50ICpyZWRfdCAgPSByZWR1 Y2VkOworICAgIGludCAqcmVkX2wgID0gcmVkdWNlZCArIGJvdW5kYXJ5X3NpemU7CisgICAgaW50 IG9mZiA9IDEsIG93ID0gMDsKKyAgICBpbnQgdGVtcDA7CisKKyAgICBpZiAoaXNfdHJhbnNwb3Nl ZCkgeworICAgICAgICBGRlNXQVAoaW50KiwgcmVkX3QsIHJlZF9sKTsKKyAgICB9CisgICAgRlVO QyhtaXBfZG93bnNhbXBsaW5nKShyZWRfdCwgYm91bmRhcnlfc2l6ZSwgdG9wLCB3KTsKKyAgICBG VU5DKG1pcF9kb3duc2FtcGxpbmcpKHJlZF9sLCBib3VuZGFyeV9zaXplLCBsZWZ0LCBoKTsKKwor ICAgIHRlbXAwID0gcmVkdWNlZFswXTsKKyAgICBpZiAoc2l6ZV9pZCAhPSAyKSB7CisgICAgICAg IG9mZiA9IDA7CisgICAgICAgIG93ID0gKDEgPDwgKEJJVF9ERVBUSCAtIDEpKSAtIHRlbXAwOwor ICAgIH0gZWxzZSB7CisgICAgICAgIG93ID0gcmVkdWNlZFsxXSAtIHRlbXAwOworICAgIH0KKyAg ICByZWR1Y2VkWzBdID0gb3c7CisgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBpbl9zaXplOyBpKysp IHsKKyAgICAgICAgcmVkdWNlZFtpXSA9IHJlZHVjZWRbaSArIG9mZl0gLSB0ZW1wMDsKKyAgICAg ICAgb3cgKz0gcmVkdWNlZFtpXTsKKyAgICB9CisgICAgb3cgPSAzMiAtIDMyICogb3c7CisKKyAg ICBGVU5DKG1pcF9yZWR1Y2VkX3ByZWQpKHNyYywgc3RyaWRlLCB1cF9ob3IsIHVwX3ZlciwgcHJl ZF9zaXplLCByZWR1Y2VkLCBpbl9zaXplLCBvdywgdGVtcDAsIG1hdHJpeCwgaXNfdHJhbnNwb3Nl ZCk7CisgICAgaWYgKHVwX2hvciA+IDEgfHwgdXBfdmVyID4gMSkgeworICAgICAgICBpZiAodXBf aG9yID4gMSkKKyAgICAgICAgICAgIEZVTkMobWlwX3Vwc2FtcGxpbmdfMWQpKCZQT1MoMCwgdXBf dmVyIC0gMSksIDEsIHVwX3ZlciAqIHN0cmlkZSwgcHJlZF9zaXplLCB1cF9ob3IsIGxlZnQgKyB1 cF92ZXIgLSAxLCB1cF92ZXIsIHByZWRfc2l6ZSk7CisgICAgICAgIGlmICh1cF92ZXIgPiAxKQor ICAgICAgICAgICAgRlVOQyhtaXBfdXBzYW1wbGluZ18xZCkoc3JjLCBzdHJpZGUsIDEsIHcsIHVw X3ZlciwgdG9wLCAxLCBwcmVkX3NpemUpOworICAgIH0KK30KKworc3RhdGljIGF2X2Fsd2F5c19p bmxpbmUgcGl4ZWwgRlVOQyhwcmVkX2RjX3ZhbCkoY29uc3QgcGl4ZWwgKnRvcCwgY29uc3QgcGl4 ZWwgKmxlZnQsCisgICAgY29uc3QgaW50IHcsIGNvbnN0IGludCBoKQoreworICAgIHBpeGVsIGRj X3ZhbDsKKyAgICBpbnQgc3VtID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gKHcgPT0g aCkgPyAodyA8PCAxKSA6IEZGTUFYKHcsIGgpOworICAgIGNvbnN0IGludCBzaGlmdCA9IGF2X2xv ZzIob2Zmc2V0KTsKKyAgICBvZmZzZXQgPj49IDE7CisgICAgaWYgKHcgPj0gaCkgeworICAgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IHc7IGkrKykKKyAgICAgICAgICAgIHN1bSArPSB0b3BbaV07 CisgICAgfQorICAgIGlmICh3IDw9IGgpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBo OyBpKyspCisgICAgICAgICAgICBzdW0gKz0gbGVmdFtpXTsKKyAgICB9CisgICAgZGNfdmFsID0g KHN1bSArIG9mZnNldCkgPj4gc2hpZnQ7CisgICAgcmV0dXJuIGRjX3ZhbDsKK30KKworLy84LjQu NS4yLjEyIFNwZWNpZmljYXRpb24gb2YgSU5UUkFfREMgaW50cmEgcHJlZGljdGlvbiBtb2RlCitz dGF0aWMgYXZfYWx3YXlzX2lubGluZSB2b2lkIEZVTkMocHJlZF9kYykodWludDhfdCAqX3NyYywg Y29uc3QgdWludDhfdCAqX3RvcCwKKyAgICBjb25zdCB1aW50OF90ICpfbGVmdCwgY29uc3QgaW50 IHcsIGNvbnN0IGludCBoLCBjb25zdCBwdHJkaWZmX3Qgc3RyaWRlKQoreworICAgIGludCB4LCB5 OworICAgIHBpeGVsICpzcmMgICAgICAgICAgPSAocGl4ZWwgKilfc3JjOworICAgIGNvbnN0IHBp eGVsICp0b3AgICAgPSAoY29uc3QgcGl4ZWwgKilfdG9wOworICAgIGNvbnN0IHBpeGVsICpsZWZ0 ICAgPSAoY29uc3QgcGl4ZWwgKilfbGVmdDsKKyAgICBjb25zdCBwaXhlbCBkYyAgICAgID0gRlVO QyhwcmVkX2RjX3ZhbCkodG9wLCBsZWZ0LCB3LCBoKTsKKyAgICBjb25zdCBwaXhlbDQgYSAgICAg ID0gUElYRUxfU1BMQVRfWDQoZGMpOworICAgIGZvciAoeSA9IDA7IHkgPCBoOyB5KyspIHsKKyAg ICAgICAgcGl4ZWwgKnMgPSBzcmM7CisgICAgICAgIGZvciAoeCA9IDA7IHggPCB3OyB4ICs9IDQp IHsKKyAgICAgICAgICAgIEFWX1dONFAocywgYSk7CisgICAgICAgICAgICBzICs9IDQ7CisgICAg ICAgIH0KKyAgICAgICAgc3JjICs9IHN0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyBhdl9hbHdh eXNfaW5saW5lIHZvaWQgRlVOQyhwcmVkX3YpKHVpbnQ4X3QgKl9zcmMsIGNvbnN0IHVpbnQ4X3Qg Kl90b3AsCisgICAgY29uc3QgaW50IHcsIGNvbnN0IGludCBoLCBjb25zdCBwdHJkaWZmX3Qgc3Ry aWRlKQoreworICAgIHBpeGVsICpzcmMgICAgICAgICAgPSAocGl4ZWwgKilfc3JjOworICAgIGNv bnN0IHBpeGVsICp0b3AgICAgPSAoY29uc3QgcGl4ZWwgKilfdG9wOworICAgIGZvciAoaW50IHkg PSAwOyB5IDwgaDsgeSsrKSB7CisgICAgICAgIG1lbWNweShzcmMsIHRvcCwgc2l6ZW9mKHBpeGVs KSAgKiB3KTsKKyAgICAgICAgc3JjICs9IHN0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk IEZVTkMocHJlZF9oKSh1aW50OF90ICpfc3JjLCBjb25zdCB1aW50OF90ICpfbGVmdCwgY29uc3Qg aW50IHcsIGNvbnN0IGludCBoLAorICAgIGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUpCit7CisgICAg cGl4ZWwgKnNyYyAgICAgICAgICA9IChwaXhlbCAqKV9zcmM7CisgICAgY29uc3QgcGl4ZWwgKmxl ZnQgICAgPSAoY29uc3QgcGl4ZWwgKilfbGVmdDsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGg7 IHkrKykgeworICAgICAgICBjb25zdCBwaXhlbDQgYSA9IFBJWEVMX1NQTEFUX1g0KGxlZnRbeV0p OworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHggKz0gNCkgeworICAgICAgICAgICAg QVZfV040UCgmUE9TKHgsIHkpLCBhKTsKKyAgICAgICAgfQorICAgIH0KK30KKworI2RlZmluZSBJ TlRSQV9MVU1BX0ZJTFRFUihwKSAgICBDTElQKChwWzBdICogZlswXSArIHBbMV0gKiBmWzFdICsg cFsyXSAqIGZbMl0gKyBwWzNdICogZlszXSArIDMyKSA+PiA2KQorI2RlZmluZSBJTlRSQV9DSFJP TUFfRklMVEVSKHApICAoKCgzMiAtIGZhY3QpICogcFsxXSArIGZhY3QgKiBwWzJdICsgMTYpID4+ IDUpCisKKy8vOC40LjUuMi4xMyBTcGVjaWZpY2F0aW9uIG9mIElOVFJBX0FOR1VMQVIyLi5JTlRS QV9BTkdVTEFSNjYgaW50cmEgcHJlZGljdGlvbiBtb2Rlcworc3RhdGljIHZvaWQgRlVOQyhwcmVk X2FuZ3VsYXJfdikodWludDhfdCAqX3NyYywgY29uc3QgdWludDhfdCAqX3RvcCwgY29uc3QgdWlu dDhfdCAqX2xlZnQsCisgICAgY29uc3QgaW50IHcsIGNvbnN0IGludCBoLCBjb25zdCBwdHJkaWZm X3Qgc3RyaWRlLCBjb25zdCBpbnQgY19pZHgsIGNvbnN0IGludCBtb2RlLAorICAgIGNvbnN0IGlu dCByZWZfaWR4LCBjb25zdCBpbnQgZmlsdGVyX2ZsYWcsIGNvbnN0IGludCBuZWVkX3BkcGMpCit7 CisgICAgcGl4ZWwgKnNyYyAgICAgICAgICA9IChwaXhlbCAqKV9zcmM7CisgICAgY29uc3QgcGl4 ZWwgKmxlZnQgICA9IChjb25zdCBwaXhlbCAqKV9sZWZ0OworICAgIGNvbnN0IHBpeGVsICp0b3Ag ICAgPSAoY29uc3QgcGl4ZWwgKilfdG9wIC0gKDEgKyByZWZfaWR4KTsKKyAgICBjb25zdCBpbnQg aW50cmFfcHJlZF9hbmdsZSA9IGZmX3Z2Y19pbnRyYV9wcmVkX2FuZ2xlX2Rlcml2ZShtb2RlKTsK KyAgICBpbnQgcG9zID0gKDEgKyByZWZfaWR4KSAqIGludHJhX3ByZWRfYW5nbGU7CisgICAgY29u c3QgaW50IGRwID0gaW50cmFfcHJlZF9hbmdsZTsKKyAgICBjb25zdCBpbnQgaXNfbHVtYSA9ICFj X2lkeDsKKyAgICBpbnQgbnNjYWxlLCBpbnZfYW5nbGU7CisKKyAgICBpZiAobmVlZF9wZHBjKSB7 CisgICAgICAgIGludl9hbmdsZSA9IGZmX3Z2Y19pbnRyYV9pbnZfYW5nbGVfZGVyaXZlKGludHJh X3ByZWRfYW5nbGUpOworICAgICAgICBuc2NhbGUgPSBmZl92dmNfbnNjYWxlX2Rlcml2ZSh3LCBo LCBtb2RlKTsKKyAgICB9CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGg7IHkrKykgeworICAg ICAgICBjb25zdCBpbnQgaWR4ICAgPSAocG9zID4+IDUpICsgcmVmX2lkeDsKKyAgICAgICAgY29u c3QgaW50IGZhY3QgPSBwb3MgJiAzMTsKKyAgICAgICAgaWYgKCFmYWN0ICYmICghaXNfbHVtYSB8 fCAhZmlsdGVyX2ZsYWcpKSB7CisgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgr KykgeworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwID0gdG9wICsgeCArIGlkeCArIDE7 CisgICAgICAgICAgICAgICAgUE9TKHgsIHkpID0gKnA7CisgICAgICAgICAgICB9CisgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIWNfaWR4KSB7CisgICAgICAgICAgICAgICAgY29u c3QgaW50OF90ICpmID0gZmZfdnZjX2ludHJhX2x1bWFfZmlsdGVyW2ZpbHRlcl9mbGFnXVtmYWN0 XTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKykgeworICAgICAg ICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcCA9IHRvcCArIHggKyBpZHg7CisgICAgICAgICAg ICAgICAgICAgIFBPUyh4LCB5KSA9IElOVFJBX0xVTUFfRklMVEVSKHApOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9 IDA7IHggPCB3OyB4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAgPSB0 b3AgKyB4ICsgaWR4OworICAgICAgICAgICAgICAgICAgICBQT1MoeCwgeSkgPSBJTlRSQV9DSFJP TUFfRklMVEVSKHApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgICAgICBpZiAobmVlZF9wZHBjKSB7CisgICAgICAgICAgICBpbnQgaW52X2FuZ2xlX3N1 bSA9IDI1NiArIGludl9hbmdsZTsKKyAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgRkZN SU4odywgMyA8PCBuc2NhbGUpOyB4KyspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCBs ICAgPSBsZWZ0W3kgKyAoaW52X2FuZ2xlX3N1bSA+PiA5KV07CisgICAgICAgICAgICAgICAgY29u c3QgcGl4ZWwgdmFsID0gUE9TKHgsIHkpOworICAgICAgICAgICAgICAgIGNvbnN0IGludCB3bCAg ICA9IDMyID4+ICgoeCA8PCAxKSA+PiBuc2NhbGUpOworICAgICAgICAgICAgICAgIGNvbnN0IGlu dCBwcmVkICA9IHZhbCArICgoKGwgLSB2YWwpICogd2wgKyAzMikgPj4gNik7CisgICAgICAgICAg ICAgICAgUE9TKHgsIHkpID0gQ0xJUChwcmVkKTsKKyAgICAgICAgICAgICAgICBpbnZfYW5nbGVf c3VtICs9IGludl9hbmdsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwb3Mg Kz0gZHA7CisgICAgfQorfQorCisvLzguNC41LjIuMTMgU3BlY2lmaWNhdGlvbiBvZiBJTlRSQV9B TkdVTEFSMi4uSU5UUkFfQU5HVUxBUjY2IGludHJhIHByZWRpY3Rpb24gbW9kZXMKK3N0YXRpYyB2 b2lkIEZVTkMocHJlZF9hbmd1bGFyX2gpKHVpbnQ4X3QgKl9zcmMsIGNvbnN0IHVpbnQ4X3QgKl90 b3AsIGNvbnN0IHVpbnQ4X3QgKl9sZWZ0LAorICAgIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCwg Y29uc3QgcHRyZGlmZl90IHN0cmlkZSwgY29uc3QgaW50IGNfaWR4LCBjb25zdCBpbnQgbW9kZSwK KyAgICBjb25zdCBpbnQgcmVmX2lkeCwgY29uc3QgaW50IGZpbHRlcl9mbGFnLCBjb25zdCBpbnQg bmVlZF9wZHBjKQoreworICAgIHBpeGVsICpzcmMgICAgICAgICAgPSAocGl4ZWwgKilfc3JjOwor ICAgIGNvbnN0IHBpeGVsICpsZWZ0ICAgPSAoY29uc3QgcGl4ZWwgKilfbGVmdCAtICgxICsgcmVm X2lkeCk7CisgICAgY29uc3QgcGl4ZWwgKnRvcCAgICA9IChjb25zdCBwaXhlbCAqKV90b3A7Cisg ICAgY29uc3QgaW50IGlzX2x1bWEgPSAhY19pZHg7CisgICAgY29uc3QgaW50IGludHJhX3ByZWRf YW5nbGUgPSBmZl92dmNfaW50cmFfcHJlZF9hbmdsZV9kZXJpdmUobW9kZSk7CisgICAgY29uc3Qg aW50IGRwID0gaW50cmFfcHJlZF9hbmdsZTsKKyAgICBpbnQgbnNjYWxlID0gMCwgaW52X2FuZ2xl LCBpbnZfYW5nbGVfc3VtOworCisgICAgaWYgKG5lZWRfcGRwYykgeworICAgICAgICBpbnZfYW5n bGUgPSBmZl92dmNfaW50cmFfaW52X2FuZ2xlX2Rlcml2ZShpbnRyYV9wcmVkX2FuZ2xlKTsKKyAg ICAgICAgaW52X2FuZ2xlX3N1bSA9IDI1NiArIGludl9hbmdsZTsKKyAgICAgICAgbnNjYWxlID0g ZmZfdnZjX25zY2FsZV9kZXJpdmUodywgaCwgbW9kZSk7CisgICAgfQorCisgICAgZm9yIChpbnQg eSA9IDA7IHkgPCBoOyB5KyspIHsKKyAgICAgICAgaW50IHBvcyA9ICgxICsgcmVmX2lkeCkgKiBp bnRyYV9wcmVkX2FuZ2xlOworICAgICAgICBpbnQgd3Q7CisgICAgICAgIGlmIChuZWVkX3BkcGMp CisgICAgICAgICAgICB3dCA9ICgzMiA+PiAoKHkgKiAyKSA+PiBuc2NhbGUpKTsKKworICAgICAg ICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKykgeworICAgICAgICAgICAgY29uc3QgaW50IGlk eCAgPSAocG9zID4+IDUpICsgcmVmX2lkeDsKKyAgICAgICAgICAgIGNvbnN0IGludCBmYWN0ID0g cG9zICYgMzE7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqcCA9IGxlZnQgKyB5ICsgaWR4Owor ICAgICAgICAgICAgaW50IHByZWQ7CisgICAgICAgICAgICBpZiAoIWZhY3QgJiYgKCFpc19sdW1h IHx8ICFmaWx0ZXJfZmxhZykpIHsKKyAgICAgICAgICAgICAgICBwcmVkID0gcFsxXTsKKyAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFjX2lkeCkgeworICAgICAgICAg ICAgICAgICAgICBjb25zdCBpbnQ4X3QgKmYgPSBmZl92dmNfaW50cmFfbHVtYV9maWx0ZXJbZmls dGVyX2ZsYWddW2ZhY3RdOworICAgICAgICAgICAgICAgICAgICBwcmVkID0gSU5UUkFfTFVNQV9G SUxURVIocCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg cHJlZCA9IElOVFJBX0NIUk9NQV9GSUxURVIocCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorICAgICAgICAgICAgaWYgKG5lZWRfcGRwYykgeworICAgICAgICAgICAgICAgIGlm ICh5IDwgKDMgPDwgbnNjYWxlKSkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCB0 ID0gdG9wW3ggKyAoaW52X2FuZ2xlX3N1bSA+PiA5KV07CisgICAgICAgICAgICAgICAgICAgIHBy ZWQgPSBDTElQKHByZWQgKyAoKCh0IC0gcHJlZCkgKiB3dCArIDMyKSA+PiA2KSk7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgUE9TKHgsIHkpID0gcHJlZDsK KyAgICAgICAgICAgIHBvcyArPSBkcDsKKyAgICAgICAgfQorICAgICAgICBpZiAobmVlZF9wZHBj KQorICAgICAgICAgICAgaW52X2FuZ2xlX3N1bSArPSBpbnZfYW5nbGU7CisgICAgfQorfQorCitz dGF0aWMgdm9pZCBGVU5DKGZmX3Z2Y19pbnRyYV9kc3BfaW5pdCkoVlZDSW50cmFEU1BDb250ZXh0 ICpjb25zdCBpbnRyYSkKK3sKKyAgICBpbnRyYS0+bG1jc19zY2FsZV9jaHJvbWEgID0gRlVOQyhs bWNzX3NjYWxlX2Nocm9tYSk7CisgICAgaW50cmEtPmludHJhX2NjbG1fcHJlZCAgICA9IEZVTkMo aW50cmFfY2NsbV9wcmVkKTsKKyAgICBpbnRyYS0+aW50cmFfcHJlZCAgICAgICAgID0gRlVOQyhp bnRyYV9wcmVkKTsKKyAgICBpbnRyYS0+cHJlZF9wbGFuYXIgICAgICAgID0gRlVOQyhwcmVkX3Bs YW5hcik7CisgICAgaW50cmEtPnByZWRfbWlwICAgICAgICAgICA9IEZVTkMocHJlZF9taXApOwor ICAgIGludHJhLT5wcmVkX2RjICAgICAgICAgICAgPSBGVU5DKHByZWRfZGMpOworICAgIGludHJh LT5wcmVkX3YgICAgICAgICAgICAgPSBGVU5DKHByZWRfdik7CisgICAgaW50cmEtPnByZWRfaCAg ICAgICAgICAgICA9IEZVTkMocHJlZF9oKTsKKyAgICBpbnRyYS0+cHJlZF9hbmd1bGFyX3YgICAg ID0gRlVOQyhwcmVkX2FuZ3VsYXJfdik7CisgICAgaW50cmEtPnByZWRfYW5ndWxhcl9oICAgICA9 IEZVTkMocHJlZF9hbmd1bGFyX2gpOworfQotLSAKMi4yNS4xCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZm bXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWls CmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmli ZSIuCg==