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 ACF38460A2 for ; Sat, 2 Sep 2023 16:09:55 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CCF3868C7FE; Sat, 2 Sep 2023 19:08:37 +0300 (EEST) Received: from APC01-PSA-obe.outbound.protection.outlook.com (mail-psaapc01olkn2069.outbound.protection.outlook.com [40.92.52.69]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A514368C7DB for ; Sat, 2 Sep 2023 19:08:32 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dan3tUah7WVfTf4K8CDQsj7XkCKO9yxxYVguCpOXDDN0FSr+mTeuyubKgxxbWFWpXS6RTEM3AW5PsgxOLxizwP2GX8aSiXZ1yOfF41nkJOL/MHpdgGYqLhZu4sFc5iCajK/mJIUJUQ8epqoZx/bva6+uCBEcevOHv8wXKkxrFGeG1qin5c7uTHah8ghMSFfyECFLsV3tMritxQWw2+LywUe2aTRyu2FgV/Sis/2127/jNWhP8Oir4djNgSP3A6n/9436qOSbDnmhWSKbmpEsp2rJUcp7mCmr5mpRQnT6b32RY1baJxJFCrJYNsfBi9wl7C6t/gsWOg1RNhtV9VYoDg== 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=uYwtDElp8HaFlO8mMsugO6+m/GhS4pqvpEYtparcJC4=; b=D4fGToz6V1Mv+6gNj40CoG3BOEjTgjI0pMZS18oCbYli0HD8BeJG5VNSfgWl2BqbfsH6/2IeOtcKCc3SmYibUDuft2uu0YdWTTtQxDwbaEd20CfXnl5EHGovphIZAo6oeeG1rVXj78Bi+igYjRc5jza1UhBp+58aCT4gh+hqJ7Ni/qbeCByr5Ls+u5pfxDkMJqVJ0ve9rFk8cMTZioqbhrlcZWW5nL5dzonFkGlnsKbmVvrYwO8gCXHGiJb6nFlzZI19dRuWD2jqrwWnT4cDOYu+k1HBNcsJIZGy/n66GA78F18Zyf8/oqh8xB3Ep4WVJtpmD9Pxj7ea3bJ2gOPMQQ== 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=uYwtDElp8HaFlO8mMsugO6+m/GhS4pqvpEYtparcJC4=; b=loJ1GpGA1RDVHK6prNFL08V9MOKP6AXyoaplflz/KrtfALiWf1rRsfbBmGNPh7hz7jjFahuJHkTVKOZ0HXVPjhSXoLB3YPhLYFRo4rXpUfhGFfhzdVkGglPeBeiEzgI7qjsPXvcOdO0cM2fH+uY6TD0M2ptFvprDSiEnoEuTEH+hqqigEzsSXQ/JVg+WY0hlC3mio20kLhyODZ8+DGTN71m3H5zUebEWAXjwx4Hplv4Jtn8zZygEdBclpsg5w6Ph8RmN1wuruTyb3pnRtBuMPWqxn0mkKxX3MoMPUsuDicU9Un6lbnrc4MLBZEH02LCsVlDLWyxD8bmNZ0t/HaU36A== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by TYZPR06MB4030.apcprd06.prod.outlook.com (2603:1096:400:24::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6745.27; Sat, 2 Sep 2023 16:08:16 +0000 Received: from TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::f1a4:bbff:7592:ee31]) by TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::f1a4:bbff:7592:ee31%5]) with mapi id 15.20.6745.030; Sat, 2 Sep 2023 16:08:16 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sun, 3 Sep 2023 00:07:36 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230902160741.19197-1-nuomi2021@gmail.com> References: <20230902160741.19197-1-nuomi2021@gmail.com> X-TMN: [XMqyAES0G3L4IHdIXKpF3E+5iQJRRxQl] X-ClientProxiedBy: TYCP286CA0242.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:456::9) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20230902160741.19197-9-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|TYZPR06MB4030:EE_ X-MS-Office365-Filtering-Correlation-Id: f7138d40-1bee-41b4-159f-08dbabced0f3 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YnmmyOwBg09EGMSQvUKp+PZbURxiYJi2DeV+nQY4ElrwKG7NCvFpjMckGkxBKq4Of8qCmV1IlTYGUiTHrnAKNMi/Gcmwux9e2v4nXDo1Phxi0vrTK8crBpAlXt7rOMpn+3MevTKU06D06UKRDudqjgr2mjzYbAND/VEwcxdmDQ83o0HL4SxeZxrVi9iFaaergzGKDMyXrIeNCCcSR27lUQoF3YuLtQwJmTFwgpLsBKOqQldoQC8jgV5tIMJ7ZMLvi81q6rtJisywtLgAQBI8M18VTF3UEx+Z5Et07OQ3LSGFlweTIKVN01nfWlcoGJG9hDOUva4lw+ku6q5lH9WDzLg686ITEqjU2ROt2aRSY+RUxdn9sGjFj8bVO9ktmM0eAJLG1iDqB0Vpq8kzIP5l5txF3P5U6OmEETEESNL4kD1IzKtUXTWZR11STtID8po4dcBroYM63xJhA/8lQJEysCycNjA7dVLLQZKv+/kh7fof/iMWMYadJnRQL7ul81aiM4C9XRe2FHAZmsoQ0HivoCC+DSmmPYISuBJxUL4gzcbGwYjpX4IWbcMOQpGuT28Yq3U0+Gp+XN8fRp4ZgZm0BK843VEKrqzdMen3OszIbQqJLO3xgqmrZ81QIZ0JcxRQ X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?K1o4ZldOdEFwTjB6K0lMTnRvWHBLOWtJVFFiVHhnMWc3SHMzKzlwbGk4L2NO?= =?utf-8?B?MG5yWGJGa29xRkU2L2M3SEdpNlJIT2MwNEhBZmNnemFUWXhxY0YwVUFDMm9U?= =?utf-8?B?WEt6dmdRY2hCNGlHNmJwVlc0WFoyV01mLytINlRZMTN4NlljZ2RZRkNSbjU1?= =?utf-8?B?a05HWkQvYi92MHFtU0g2cHNib2ZkVXJQYTNDZUJWcFpDY2hoaG8wRnJoUHhL?= =?utf-8?B?UVEreENQR05SN2VPeU1yajNMbE14d1lZUlFBSklYdzJPdnA4M1IwVENkZ1Vt?= =?utf-8?B?cHRYSnN2VnExRzM5a0VpODhGZVZSUzVwdHNwWWV0SFlaVVpMTFJLTVlkankr?= =?utf-8?B?cHUvRktjZmZzOHVPZk9KZjhqZ3A1YjRGTlBkTXZXa0p6YU5LYnppNnFlcVUy?= =?utf-8?B?ZHU5OWM3cjI0a2g3YVhQMktjcktYclJJYWxwODU0d1MvdW9MNXlPdjZYemNC?= =?utf-8?B?aDk0NjM1ZzE1VnFndGlBdkp1clpRbTdHSFFuNUd5OUZaOGRtMlIvc0J2aVV0?= =?utf-8?B?Ull2REhqYkMxdnF6dUpSWDdBSHNvMnN3cjFXRnJYN0J6dWg1NzdDS1NGNzVn?= =?utf-8?B?ZUoxaFloQWMzREswdE5UUG0xMS9QS1psV1VRYnhaa3VhWkdGNnEzdXRMSG5O?= =?utf-8?B?bHBkU3ZIWDZHOXFBdVBkVUN1Umh0bllXcFY2cVFXQ2FRKzlQRkRTRUtocGNp?= =?utf-8?B?Vlhjc2ZCcXg4bnM0RVBnR3ZmbmRwckFuRnBMSmorZndxcHFrVnBoWm5NZVZQ?= =?utf-8?B?c0FJRGJzY3gzRzlvdE5RQjRja3MvVDlnUXd3RklVUUtPQ21RT0NqWUtoME1V?= =?utf-8?B?NlZmVWVqcG5QVHd3emV3ZEJCUVJPZ0RnOVBrWE9jdFJPbFNMK3NQY3FiSGYz?= =?utf-8?B?Sno2VEsrM2c3WjdZZWtjUERuTWx2S0oxdmhMM3JYOUFrc3N6YnVKYnE2T1Rk?= =?utf-8?B?RlIwSTg1QjdFZFNzblBSK1BORW1hMVVvODczcUpXT0JPbWpidTdiSzBxN2di?= =?utf-8?B?cWdVTHgzN21UMGtNUkdUSk9KemlVS2dJZktFZnlzV1JkRDBDSU96T3BHRFBP?= =?utf-8?B?M0EvZk5OQnh2U2RBZlBGUDhaOStNeW9WdGhTMk5XYUg5K1hFdlpGa09iQ1NR?= =?utf-8?B?aCtCQm0wa2o0V3VJbGRScjl4VEdhV2NHbFhOWTFKQWwzcS8zNWZYa3FJdS9n?= =?utf-8?B?dVptNFpyUzFRU052VHJ4WWJMMkxXZVdwZDBENFpUN3lSZW1EaEVmY0U1dDFq?= =?utf-8?B?cWE2WDJPKzlzbUx1cEZrOWVQT3J2VTFkV1VLSHA0Y2RFb0p5R09zSnFmcFo2?= =?utf-8?B?NVFYOUJXV0x6MjRUUkNLc2FYUlh3T0JwVHNjZ2xGQ2VOb1VMd21yVWFna2hP?= =?utf-8?B?S0FBVTN6Q0pHZnV5cnplSXRMVzIyeGdkOUxzZHNYNlJuL0NZVDNXY2dGeDgr?= =?utf-8?B?V0p1R1VQa2ZYendydDBoa1FCY1lDSDhBSTh5NllpcUFBOWNyRHpPNGl5Mnh3?= =?utf-8?B?MkhxWlgrekROczVpMWdwTWY3VzRPWEl4UjVWSkM4aWVIcG1DQ1JhRzAwWDV6?= =?utf-8?B?dEZSZDNsSHBLc0JsQkhjU00xNllDSngyR2c1ZU93N3dtK2poaFRlVmxUNWtX?= =?utf-8?B?VFFtdEIvRTdXdld2UmI3VjdRUjljYTJnbmNtaC9GVVFwdi9CaEJvRUtDZzZD?= =?utf-8?Q?0LVab1n0zS1Bg5HVUuv0?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f7138d40-1bee-41b4-159f-08dbabced0f3 X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Sep 2023 16:08:16.2395 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYZPR06MB4030 Subject: [FFmpeg-devel] [PATCH v3 09/14] 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: LS0tCiBsaWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgIDMgKy0KIGxpYmF2 Y29kZWMvdnZjL3Z2Y19jdHUuYyAgICAgICAgICAgIHwgICAzOSArCiBsaWJhdmNvZGVjL3Z2Yy92 dmNfY3R1LmggICAgICAgICAgICB8ICAgIDIgKwogbGliYXZjb2RlYy92dmMvdnZjX2ludHJhLmMg ICAgICAgICAgfCAgNzY4ICsrKysrKysrKysrKysrKysrKysrCiBsaWJhdmNvZGVjL3Z2Yy92dmNf aW50cmEuaCAgICAgICAgICB8ICAgNDkgKysKIGxpYmF2Y29kZWMvdnZjL3Z2Y19pbnRyYV90ZW1w bGF0ZS5jIHwgMTAxNSArKysrKysrKysrKysrKysrKysrKysrKysrKysKIDYgZmlsZXMgY2hhbmdl ZCwgMTg3NSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg bGliYXZjb2RlYy92dmMvdnZjX2ludHJhLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVj L3Z2Yy92dmNfaW50cmEuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvdnZjL3Z2Y19p bnRyYV90ZW1wbGF0ZS5jCgpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUgYi9s aWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZQppbmRleCAyNTQyOGMwZWUyLi4xNTMxMmZkMjM2IDEwMDY0 NAotLS0gYS9saWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZQorKysgYi9saWJhdmNvZGVjL3Z2Yy9NYWtl ZmlsZQpAQCAtNiw3ICs2LDggQEAgT0JKUy0kKENPTkZJR19WVkNfREVDT0RFUikgICAgICAgICAg Kz0gIHZ2Yy92dmNkZWMubyAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2dmMvdnZjX2N0dS5vICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19kYXRhLm8gICAgICAgICAgXAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2Yy92dmNfaW50ZXIubyAgICAgICAg IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dmMvdnZjX2ludHJh Lm8gICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZj L3Z2Y19pdHhfMWQubyAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZ2Yy92dmNfbXZzLm8gICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2dmMvdnZjX3BzLm8gICAgICAgICAgICBcCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19yZWZzLm8KXCBObyBuZXdsaW5lIGF0 IGVuZCBvZiBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZj L3Z2Y19yZWZzLm8KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL3Z2Y19jdHUuYyBiL2xpYmF2 Y29kZWMvdnZjL3Z2Y19jdHUuYwppbmRleCBjZmUyNjc1NmZlLi5kNDZhNTIyYTBkIDEwMDY0NAot LS0gYS9saWJhdmNvZGVjL3Z2Yy92dmNfY3R1LmMKKysrIGIvbGliYXZjb2RlYy92dmMvdnZjX2N0 dS5jCkBAIC0yNCw2ICsyNCwzNSBAQAogI2luY2x1ZGUgInZ2Y19jdHUuaCIKICNpbmNsdWRlICJ2 dmNfbXZzLmgiCiAKK3ZvaWQgZmZfdnZjX2RlY29kZV9uZWlnaGJvdXIoVlZDTG9jYWxDb250ZXh0 ICpsYywgY29uc3QgaW50IHhfY3RiLCBjb25zdCBpbnQgeV9jdGIsCisgICAgY29uc3QgaW50IHJ4 LCBjb25zdCBpbnQgcnksIGNvbnN0IGludCBycykKK3sKKyAgICBWVkNGcmFtZUNvbnRleHQgKmZj ID0gbGMtPmZjOworICAgIGNvbnN0IGludCBjdGJfc2l6ZSAgICAgICAgID0gZmMtPnBzLnNwcy0+ Y3RiX3NpemVfeTsKKworICAgIGxjLT5lbmRfb2ZfdGlsZXNfeCA9IGZjLT5wcy5zcHMtPndpZHRo OworICAgIGxjLT5lbmRfb2ZfdGlsZXNfeSA9IGZjLT5wcy5zcHMtPmhlaWdodDsKKyAgICBpZiAo ZmMtPnBzLnBwcy0+Y3RiX3RvX2NvbF9iZFtyeF0gIT0gZmMtPnBzLnBwcy0+Y3RiX3RvX2NvbF9i ZFtyeCArIDFdKQorICAgICAgICBsYy0+ZW5kX29mX3RpbGVzX3ggPSBGRk1JTih4X2N0YiArIGN0 Yl9zaXplLCBsYy0+ZW5kX29mX3RpbGVzX3gpOworICAgIGlmIChmYy0+cHMucHBzLT5jdGJfdG9f cm93X2JkW3J5XSAhPSBmYy0+cHMucHBzLT5jdGJfdG9fcm93X2JkW3J5ICsgMV0pCisgICAgICAg IGxjLT5lbmRfb2ZfdGlsZXNfeSA9IEZGTUlOKHlfY3RiICsgY3RiX3NpemUsIGxjLT5lbmRfb2Zf dGlsZXNfeSk7CisKKyAgICBsYy0+Ym91bmRhcnlfZmxhZ3MgPSAwOworICAgIGlmIChyeCA+IDAg JiYgZmMtPnBzLnBwcy0+Y3RiX3RvX2NvbF9iZFtyeF0gIT0gZmMtPnBzLnBwcy0+Y3RiX3RvX2Nv bF9iZFtyeCAtIDFdKQorICAgICAgICBsYy0+Ym91bmRhcnlfZmxhZ3MgfD0gQk9VTkRBUllfTEVG VF9USUxFOworICAgIGlmIChyeCA+IDAgJiYgZmMtPnRhYi5zbGljZV9pZHhbcnNdICE9IGZjLT50 YWIuc2xpY2VfaWR4W3JzIC0gMV0pCisgICAgICAgIGxjLT5ib3VuZGFyeV9mbGFncyB8PSBCT1VO REFSWV9MRUZUX1NMSUNFOworICAgIGlmIChyeSA+IDAgJiYgZmMtPnBzLnBwcy0+Y3RiX3RvX3Jv d19iZFtyeV0gIT0gZmMtPnBzLnBwcy0+Y3RiX3RvX3Jvd19iZFtyeSAtIDFdKQorICAgICAgICBs Yy0+Ym91bmRhcnlfZmxhZ3MgfD0gQk9VTkRBUllfVVBQRVJfVElMRTsKKyAgICBpZiAocnkgPiAw ICYmIGZjLT50YWIuc2xpY2VfaWR4W3JzXSAhPSBmYy0+dGFiLnNsaWNlX2lkeFtycyAtIGZjLT5w cy5wcHMtPmN0Yl93aWR0aF0pCisgICAgICAgIGxjLT5ib3VuZGFyeV9mbGFncyB8PSBCT1VOREFS WV9VUFBFUl9TTElDRTsKKyAgICBsYy0+Y3RiX2xlZnRfZmxhZyA9IHJ4ID4gMCAmJiAhKGxjLT5i b3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX0xFRlRfVElMRSk7CisgICAgbGMtPmN0Yl91cF9mbGFn ICAgPSByeSA+IDAgJiYgIShsYy0+Ym91bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9VUFBFUl9USUxF KSAmJiAhKGxjLT5ib3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX1VQUEVSX1NMSUNFKTsKKyAgICBs Yy0+Y3RiX3VwX3JpZ2h0X2ZsYWcgPSBsYy0+Y3RiX3VwX2ZsYWcgJiYgKGZjLT5wcy5wcHMtPmN0 Yl90b19jb2xfYmRbcnhdID09IGZjLT5wcy5wcHMtPmN0Yl90b19jb2xfYmRbcnggKyAxXSkgJiYK KyAgICAgICAgKGZjLT5wcy5wcHMtPmN0Yl90b19yb3dfYmRbcnldID09IGZjLT5wcy5wcHMtPmN0 Yl90b19yb3dfYmRbcnkgLSAxXSk7CisgICAgbGMtPmN0Yl91cF9sZWZ0X2ZsYWcgPSBsYy0+Y3Ri X2xlZnRfZmxhZyAmJiBsYy0+Y3RiX3VwX2ZsYWc7Cit9CisKIHZvaWQgZmZfdnZjX3NldF9uZWln aGJvdXJfYXZhaWxhYmxlKFZWQ0xvY2FsQ29udGV4dCAqbGMsCiAgICAgY29uc3QgaW50IHgwLCBj b25zdCBpbnQgeTAsIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCkKIHsKQEAgLTM5LDYgKzY4LDE2 IEBAIHZvaWQgZmZfdnZjX3NldF9uZWlnaGJvdXJfYXZhaWxhYmxlKFZWQ0xvY2FsQ29udGV4dCAq bGMsCiAgICAgbGMtPm5hLmNhbmRfdXBfcmlnaHQgPSBsYy0+bmEuY2FuZF91cF9yaWdodF9zYXAg JiYgKHgwICsgdykgPCBsYy0+ZW5kX29mX3RpbGVzX3g7CiB9CiAKK3ZvaWQgZmZfdnZjX2N0dV9m cmVlX2N1cyhDVFUgKmN0dSkKK3sKKyAgICB3aGlsZSAoY3R1LT5jdXMpIHsKKyAgICAgICAgQ29k aW5nVW5pdCAqY3UgICAgICA9IGN0dS0+Y3VzOworICAgICAgICBBVkJ1ZmZlclJlZiAqYnVmICAg ID0gY3UtPmJ1ZjsKKworICAgICAgICBjdHUtPmN1cyA9IGN0dS0+Y3VzLT5uZXh0OworICAgICAg ICBhdl9idWZmZXJfdW5yZWYoJmJ1Zik7CisgICAgfQorfQogCiB2b2lkIGZmX3Z2Y19lcF9pbml0 X3N0YXRfY29lZmYoRW50cnlQb2ludCAqZXAsCiAJY29uc3QgaW50IGJpdF9kZXB0aCwgY29uc3Qg aW50IHBlcnNpc3RlbnRfcmljZV9hZGFwdGF0aW9uX2VuYWJsZWRfZmxhZykKZGlmZiAtLWdpdCBh L2xpYmF2Y29kZWMvdnZjL3Z2Y19jdHUuaCBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19jdHUuaAppbmRl eCAzNmQyYjEzMjVhLi5lOTEyZDI1YjYyIDEwMDY0NAotLS0gYS9saWJhdmNvZGVjL3Z2Yy92dmNf Y3R1LmgKKysrIGIvbGliYXZjb2RlYy92dmMvdnZjX2N0dS5oCkBAIC00MDQsNSArNDA0LDcgQEAg c3RydWN0IEFMRlBhcmFtcyB7CiAKIC8vdXRpbHMKIHZvaWQgZmZfdnZjX3NldF9uZWlnaGJvdXJf YXZhaWxhYmxlKFZWQ0xvY2FsQ29udGV4dCAqbGMsIGludCB4MCwgaW50IHkwLCBpbnQgdywgaW50 IGgpOwordm9pZCBmZl92dmNfZGVjb2RlX25laWdoYm91cihWVkNMb2NhbENvbnRleHQgKmxjLCBp bnQgeF9jdGIsIGludCB5X2N0YiwgaW50IHJ4LCBpbnQgcnksIGludCBycyk7Cit2b2lkIGZmX3Z2 Y19jdHVfZnJlZV9jdXMoQ1RVICpjdHUpOwogdm9pZCBmZl92dmNfZXBfaW5pdF9zdGF0X2NvZWZm KEVudHJ5UG9pbnQgKmVwLCBpbnQgYml0X2RlcHRoLCBpbnQgcGVyc2lzdGVudF9yaWNlX2FkYXB0 YXRpb25fZW5hYmxlZF9mbGFnKTsKICNlbmRpZiAvLyBBVkNPREVDX1ZWQ19DVFVfSApkaWZmIC0t Z2l0IGEvbGliYXZjb2RlYy92dmMvdnZjX2ludHJhLmMgYi9saWJhdmNvZGVjL3Z2Yy92dmNfaW50 cmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi43YWYyYWY0MzliCi0t LSAvZGV2L251bGwKKysrIGIvbGliYXZjb2RlYy92dmMvdnZjX2ludHJhLmMKQEAgLTAsMCArMSw3 NjggQEAKKy8qCisgKiBWVkMgaW50cmEgcHJlZGljdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykg MjAyMSBOdW8gTWkKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICog RkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRl IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2lu Y2x1ZGUgInZ2Y19kYXRhLmgiCisjaW5jbHVkZSAidnZjX2ludGVyLmgiCisjaW5jbHVkZSAidnZj X2ludHJhLmgiCisjaW5jbHVkZSAidnZjX2l0eF8xZC5oIgorCitzdGF0aWMgaW50IGlzX2NjbG0o ZW51bSBJbnRyYVByZWRNb2RlIG1vZGUpCit7CisgICAgcmV0dXJuIG1vZGUgPT0gSU5UUkFfTFRf Q0NMTSB8fCBtb2RlID09IElOVFJBX0xfQ0NMTSB8fCBtb2RlID09IElOVFJBX1RfQ0NMTTsKK30K Kworc3RhdGljIGludCBkZXJpdmVfaWxmbnN0X3ByZWRfbW9kZV9pbnRyYShjb25zdCBWVkNMb2Nh bENvbnRleHQgKmxjLCBjb25zdCBUcmFuc2Zvcm1CbG9jayAqdGIpCit7CisgICAgY29uc3QgVlZD RnJhbWVDb250ZXh0ICpmYyA9IGxjLT5mYzsKKyAgICBjb25zdCBWVkNTUFMgKnNwcyA9IGZjLT5w cy5zcHM7CisgICAgY29uc3QgQ29kaW5nVW5pdCAqY3UgICAgICAgICAgPSBsYy0+Y3U7CisgICAg Y29uc3QgaW50IHhfdGIgICAgICAgICAgICAgICAgPSB0Yi0+eDAgPj4gZmMtPnBzLnNwcy0+bWlu X2NiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCB5X3RiICAgICAgICAgICAgICAgID0gdGIt PnkwID4+IGZjLT5wcy5zcHMtPm1pbl9jYl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQgeF9j ICAgICAgICAgICAgICAgICA9ICh0Yi0+eDAgKyAodGItPnRiX3dpZHRoIDw8IHNwcy0+aHNoaWZ0 WzFdID4+IDEpICkgPj4gZmMtPnBzLnNwcy0+bWluX2NiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0 IGludCB5X2MgICAgICAgICAgICAgICAgID0gKHRiLT55MCArICh0Yi0+dGJfaGVpZ2h0IDw8IHNw cy0+dnNoaWZ0WzFdID4+IDEpKSA+PiBmYy0+cHMuc3BzLT5taW5fY2JfbG9nMl9zaXplX3k7Cisg ICAgY29uc3QgaW50IG1pbl9jYl93aWR0aCAgICAgICAgPSBmYy0+cHMucHBzLT5taW5fY2Jfd2lk dGg7CisgICAgY29uc3QgaW50IGludHJhX21pcF9mbGFnICAgICAgPSBTQU1QTEVfQ1RCKGZjLT50 YWIuaW1mLCB4X3RiLCB5X3RiKTsKKyAgICBpbnQgcHJlZF9tb2RlX2ludHJhID0gdGItPmNfaWR4 ID09IDAgPyBjdS0+aW50cmFfcHJlZF9tb2RlX3kgOiBjdS0+aW50cmFfcHJlZF9tb2RlX2M7Cisg ICAgaWYgKGludHJhX21pcF9mbGFnICYmICF0Yi0+Y19pZHgpIHsKKyAgICAgICAgcHJlZF9tb2Rl X2ludHJhID0gSU5UUkFfUExBTkFSOworICAgIH0gZWxzZSBpZiAoaXNfY2NsbShwcmVkX21vZGVf aW50cmEpKSB7CisgICAgICAgIGludCBpbnRyYV9taXBfZmxhZ19jID0gU0FNUExFX0NUQihmYy0+ dGFiLmltZiwgeF9jLCB5X2MpOworICAgICAgICBpbnQgY3VfcHJlZF9tb2RlID0gU0FNUExFX0NU QihmYy0+dGFiLmNwbVswXSwgeF9jLCB5X2MpOworICAgICAgICBpZiAoaW50cmFfbWlwX2ZsYWdf YykgeworICAgICAgICAgICAgcHJlZF9tb2RlX2ludHJhID0gSU5UUkFfUExBTkFSOworICAgICAg ICB9IGVsc2UgaWYgKGN1X3ByZWRfbW9kZSA9PSBNT0RFX0lCQyB8fCBjdV9wcmVkX21vZGUgPT0g TU9ERV9QTFQpIHsKKyAgICAgICAgICAgIHByZWRfbW9kZV9pbnRyYSA9IElOVFJBX0RDOworICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJlZF9tb2RlX2ludHJhID0gU0FNUExFX0NUQihm Yy0+dGFiLmlwbSwgeF9jLCB5X2MpOworICAgICAgICB9CisgICAgfQorICAgIHByZWRfbW9kZV9p bnRyYSA9IGZmX3Z2Y193aWRlX2FuZ2xlX21vZGVfbWFwcGluZyhjdSwgdGItPnRiX3dpZHRoLCB0 Yi0+dGJfaGVpZ2h0LCB0Yi0+Y19pZHgsIHByZWRfbW9kZV9pbnRyYSk7CisKKyAgICByZXR1cm4g cHJlZF9tb2RlX2ludHJhOworfQorCisvLzguNy40IFRyYW5zZm9ybWF0aW9uIHByb2Nlc3MgZm9y IHNjYWxlZCB0cmFuc2Zvcm0gY29lZmZpY2llbnRzCitzdGF0aWMgdm9pZCBpbGZuc3RfdHJhbnNm b3JtKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIFRyYW5zZm9ybUJsb2NrICp0YikKK3sKKyAg ICBjb25zdCBWVkNTUFMgKnNwcyAgICAgICAgICAgPSBsYy0+ZmMtPnBzLnNwczsKKyAgICBjb25z dCBDb2RpbmdVbml0ICpjdSAgICAgICAgPSBsYy0+Y3U7CisgICAgY29uc3QgaW50IHcgICAgICAg ICAgICAgICAgID0gdGItPnRiX3dpZHRoOworICAgIGNvbnN0IGludCBoICAgICAgICAgICAgICAg ICA9IHRiLT50Yl9oZWlnaHQ7CisgICAgY29uc3QgaW50IG5fbGZuc3Rfb3V0X3NpemUgID0gKHcg Pj0gOCAmJiBoID49IDgpID8gNDggOiAxNjsgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBu TGZuc3RPdXRTaXplCisgICAgY29uc3QgaW50IGxvZzJfbGZuc3Rfc2l6ZSAgID0gKHcgPj0gOCAm JiBoID49IDgpID8gMyA6IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBsb2cyTGZu c3RTaXplCisgICAgY29uc3QgaW50IG5fbGZuc3Rfc2l6ZSAgICAgID0gMSA8PCBsb2cyX2xmbnN0 X3NpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBuTGZuc3RTaXplCisg ICAgY29uc3QgaW50IG5vbl96ZXJvX3NpemUgICAgID0gKCh3ID09IDggJiYgaCA9PSA4KSB8fCAo dyA9PSA0ICYmIGggPT0gNCkpID8gOCA6IDE2OyAgLy8vPCBub25aZXJvU2l6ZQorICAgIGNvbnN0 IGludCBwcmVkX21vZGVfaW50cmEgICA9IGRlcml2ZV9pbGZuc3RfcHJlZF9tb2RlX2ludHJhKGxj LCB0Yik7CisgICAgY29uc3QgaW50IHRyYW5zcG9zZSAgICAgICAgID0gcHJlZF9tb2RlX2ludHJh ID4gMzQ7CisgICAgaW50IHVbMTZdLCB2WzQ4XTsKKworICAgIGZvciAoaW50IHggPSAwOyB4IDwg bm9uX3plcm9fc2l6ZTsgeCsrKSB7CisgICAgICAgIGludCB4YyA9IGZmX3Z2Y19kaWFnX3NjYW5f eFsyXVsyXVt4XTsKKyAgICAgICAgaW50IHljID0gZmZfdnZjX2RpYWdfc2Nhbl95WzJdWzJdW3hd OworICAgICAgICB1W3hdID0gdGItPmNvZWZmc1t3ICogeWMgKyB4Y107CisgICAgfQorICAgIGZm X3Z2Y19pbnZfbGZuc3RfMWQodiwgdSwgbm9uX3plcm9fc2l6ZSwgbl9sZm5zdF9vdXRfc2l6ZSwg cHJlZF9tb2RlX2ludHJhLAorICAgICAgICAgICAgICAgICAgICAgICAgY3UtPmxmbnN0X2lkeCwg c3BzLT5sb2cyX3RyYW5zZm9ybV9yYW5nZSk7CisgICAgaWYgKHRyYW5zcG9zZSkgeworICAgICAg ICBpbnQgKmRzdCA9IHRiLT5jb2VmZnM7CisgICAgICAgIGNvbnN0IGludCAqc3JjID0gdjsKKyAg ICAgICAgaWYgKG5fbGZuc3Rfc2l6ZSA9PSA0KSB7CisgICAgICAgICAgICBmb3IgKGludCB5ID0g MDsgeSA8IDQ7IHkrKykgeworICAgICAgICAgICAgICAgIGRzdFswXSA9IHNyY1swXTsKKyAgICAg ICAgICAgICAgICBkc3RbMV0gPSBzcmNbNF07CisgICAgICAgICAgICAgICAgZHN0WzJdID0gc3Jj WzhdOworICAgICAgICAgICAgICAgIGRzdFszXSA9IHNyY1sxMl07CisgICAgICAgICAgICAgICAg c3JjKys7CisgICAgICAgICAgICAgICAgZHN0ICs9IHc7CisgICAgICAgICAgICB9CisgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IDg7IHkrKykgeworICAg ICAgICAgICAgICAgIGRzdFswXSA9IHNyY1swXTsKKyAgICAgICAgICAgICAgICBkc3RbMV0gPSBz cmNbOF07CisgICAgICAgICAgICAgICAgZHN0WzJdID0gc3JjWzE2XTsKKyAgICAgICAgICAgICAg ICBkc3RbM10gPSBzcmNbMjRdOworICAgICAgICAgICAgICAgIGlmICh5IDwgNCkgeworICAgICAg ICAgICAgICAgICAgICBkc3RbNF0gPSBzcmNbMzJdOworICAgICAgICAgICAgICAgICAgICBkc3Rb NV0gPSBzcmNbMzZdOworICAgICAgICAgICAgICAgICAgICBkc3RbNl0gPSBzcmNbNDBdOworICAg ICAgICAgICAgICAgICAgICBkc3RbN10gPSBzcmNbNDRdOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBzcmMrKzsKKyAgICAgICAgICAgICAgICBkc3QgKz0gdzsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorCisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50ICpkc3QgPSB0Yi0+ Y29lZmZzOworICAgICAgICBjb25zdCBpbnQgKnNyYyA9IHY7CisgICAgICAgIGZvciAoaW50IHkg PSAwOyB5IDwgbl9sZm5zdF9zaXplOyB5KyspIHsKKyAgICAgICAgICAgIGludCBzaXplID0gKHkg PCA0KSA/IG5fbGZuc3Rfc2l6ZSA6IDQ7CisgICAgICAgICAgICBtZW1jcHkoZHN0LCBzcmMsIHNp emUgKiBzaXplb2YoaW50KSk7CisgICAgICAgICAgICBzcmMgKz0gc2l6ZTsKKyAgICAgICAgICAg IGRzdCArPSB3OworICAgICAgICB9CisgICAgfQorICAgIHRiLT5tYXhfc2Nhbl94ID0gbl9sZm5z dF9zaXplIC0gMTsKKyAgICB0Yi0+bWF4X3NjYW5feSA9IG5fbGZuc3Rfc2l6ZSAtIDE7Cit9CisK Ky8vcGFydCBvZiA4LjcuNCBUcmFuc2Zvcm1hdGlvbiBwcm9jZXNzIGZvciBzY2FsZWQgdHJhbnNm b3JtIGNvZWZmaWNpZW50cworc3RhdGljIHZvaWQgZGVyaXZlX3RyYW5zZm9ybV90eXBlKGNvbnN0 IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IFRy YW5zZm9ybUJsb2NrICp0YiwgZW51bSBUeFR5cGUgKnRyaCwgZW51bSBUeFR5cGUgKnRydikKK3sK KyAgICBjb25zdCBDb2RpbmdVbml0ICpjdSA9IGxjLT5jdTsKKyAgICBzdGF0aWMgY29uc3QgZW51 bSBUeFR5cGUgbXRzX3RvX3RyaFtdID0ge0RDVDIsIERTVDcsIERDVDgsIERTVDcsIERDVDh9Owor ICAgIHN0YXRpYyBjb25zdCBlbnVtIFR4VHlwZSBtdHNfdG9fdHJ2W10gPSB7RENUMiwgRFNUNywg RFNUNywgRENUOCwgRENUOH07CisgICAgY29uc3QgVlZDU1BTICpzcHMgICAgICAgPSBmYy0+cHMu c3BzOworICAgIGludCBpbXBsaWNpdF9tdHNfZW5hYmxlZCA9IDA7CisgICAgaWYgKHRiLT5jX2lk eCB8fCAoY3UtPmlzcF9zcGxpdF90eXBlICE9IElTUF9OT19TUExJVCAmJiBjdS0+bGZuc3RfaWR4 KSkgeworICAgICAgICAqdHJoID0gKnRydiA9IERDVDI7CisgICAgICAgIHJldHVybjsKKyAgICB9 CisKKyAgICBpZiAoc3BzLT5yLT5zcHNfbXRzX2VuYWJsZWRfZmxhZykgeworICAgICAgICBpZiAo Y3UtPmlzcF9zcGxpdF90eXBlICE9IElTUF9OT19TUExJVCB8fAorICAgICAgICAgICAgKGN1LT5z YnRfZmxhZyAmJiBGRk1BWCh0Yi0+dGJfd2lkdGgsIHRiLT50Yl9oZWlnaHQpIDw9IDMyKSB8fAor ICAgICAgICAgICAgKCFzcHMtPnItPnNwc19leHBsaWNpdF9tdHNfaW50cmFfZW5hYmxlZF9mbGFn ICYmIGN1LT5wcmVkX21vZGUgPT0gTU9ERV9JTlRSQSAmJgorICAgICAgICAgICAgIWN1LT5sZm5z dF9pZHggJiYgIWN1LT5pbnRyYV9taXBfZmxhZykpIHsKKyAgICAgICAgICAgIGltcGxpY2l0X210 c19lbmFibGVkID0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoaW1wbGljaXRfbXRzX2Vu YWJsZWQpIHsKKyAgICAgICAgY29uc3QgaW50IHcgPSB0Yi0+dGJfd2lkdGg7CisgICAgICAgIGNv bnN0IGludCBoID0gdGItPnRiX2hlaWdodDsKKyAgICAgICAgaWYgKGN1LT5zYnRfZmxhZykgewor ICAgICAgICAgICAgKnRyaCA9IChjdS0+c2J0X2hvcml6b250YWxfZmxhZyAgfHwgY3UtPnNidF9w b3NfZmxhZykgPyBEU1Q3IDogRENUODsKKyAgICAgICAgICAgICp0cnYgPSAoIWN1LT5zYnRfaG9y aXpvbnRhbF9mbGFnIHx8IGN1LT5zYnRfcG9zX2ZsYWcpID8gRFNUNyA6IERDVDg7CisgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAqdHJoID0gKHcgPj0gNCAmJiB3IDw9IDE2KSA/IERTVDcg OiBEQ1QyOworICAgICAgICAgICAgKnRydiA9IChoID49IDQgJiYgaCA8PSAxNikgPyBEU1Q3IDog RENUMjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgICp0cmggPSBtdHNf dG9fdHJoW2N1LT5tdHNfaWR4XTsKKyAgICAqdHJ2ID0gbXRzX3RvX3RydltjdS0+bXRzX2lkeF07 Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9yZXNpZHVhbF9mb3Jfam9pbnRfY29kaW5nX2Nocm9tYShW VkNMb2NhbENvbnRleHQgKmxjLAorICAgIGNvbnN0IFRyYW5zZm9ybVVuaXQgKnR1LCBUcmFuc2Zv cm1CbG9jayAqdGIsIGNvbnN0IGludCBjaHJvbWFfc2NhbGUpCit7CisgICAgY29uc3QgVlZDRnJh bWVDb250ZXh0ICpmYyAgPSBsYy0+ZmM7CisgICAgY29uc3QgQ29kaW5nVW5pdCAqY3UgPSBsYy0+ Y3U7CisgICAgY29uc3QgaW50IGNfc2lnbiA9IDEgLSAyICogZmMtPnBzLnBoLnItPnBoX2pvaW50 X2NiY3Jfc2lnbl9mbGFnOworICAgIGNvbnN0IGludCBzaGlmdCAgPSB0dS0+Y29kZWRfZmxhZ1sx XSBeIHR1LT5jb2RlZF9mbGFnWzJdOworICAgIGNvbnN0IGludCBjX2lkeCAgPSAxICsgdHUtPmNv ZGVkX2ZsYWdbMV07CisgICAgY29uc3QgcHRyZGlmZl90IHN0cmlkZSA9IGZjLT5mcmFtZS0+bGlu ZXNpemVbY19pZHhdOworICAgIGNvbnN0IGludCBocyA9IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lk eF07CisgICAgY29uc3QgaW50IHZzID0gZmMtPnBzLnNwcy0+dnNoaWZ0W2NfaWR4XTsKKyAgICB1 aW50OF90ICpkc3QgPSAmZmMtPmZyYW1lLT5kYXRhW2NfaWR4XVsodGItPnkwID4+IHZzKSAqIHN0 cmlkZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHRiLT54 MCA+PiBocykgPDwgZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQpXTsKKyAgICBpZiAoY2hyb21hX3Nj YWxlKSB7CisgICAgICAgIGZjLT52dmNkc3AuaXR4LnByZWRfcmVzaWR1YWxfam9pbnQodGItPmNv ZWZmcywgdGItPnRiX3dpZHRoLCB0Yi0+dGJfaGVpZ2h0LCBjX3NpZ24sIHNoaWZ0KTsKKyAgICAg ICAgZmMtPnZ2Y2RzcC5pbnRyYS5sbWNzX3NjYWxlX2Nocm9tYShsYywgdGItPmNvZWZmcywgdGIt PmNvZWZmcywgdGItPnRiX3dpZHRoLCB0Yi0+dGJfaGVpZ2h0LCBjdS0+eDAsIGN1LT55MCk7Cisg ICAgICAgIGZjLT52dmNkc3AuaXR4LmFkZF9yZXNpZHVhbChkc3QsIHRiLT5jb2VmZnMsIHRiLT50 Yl93aWR0aCwgdGItPnRiX2hlaWdodCwgc3RyaWRlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBm Yy0+dnZjZHNwLml0eC5hZGRfcmVzaWR1YWxfam9pbnQoZHN0LCB0Yi0+Y29lZmZzLCB0Yi0+dGJf d2lkdGgsIHRiLT50Yl9oZWlnaHQsIHN0cmlkZSwgY19zaWduLCBzaGlmdCk7CisgICAgfQorfQor CitzdGF0aWMgaW50IGFkZF9yZWNvbnN0cnVjdGVkX2FyZWEoVlZDTG9jYWxDb250ZXh0ICpsYywg Y29uc3QgaW50IGNoX3R5cGUsIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLCBjb25zdCBpbnQg dywgY29uc3QgaW50IGgpCit7CisgICAgY29uc3QgVlZDU1BTICpzcHMgICAgICAgPSBsYy0+ZmMt PnBzLnNwczsKKyAgICBjb25zdCBpbnQgaHMgPSBzcHMtPmhzaGlmdFtjaF90eXBlXTsKKyAgICBj b25zdCBpbnQgdnMgPSBzcHMtPnZzaGlmdFtjaF90eXBlXTsKKyAgICBSZWNvbnN0cnVjdGVkQXJl YSAqYTsKKworICAgIGlmIChsYy0+bnVtX3Jhc1tjaF90eXBlXSA+PSBGRl9BUlJBWV9FTEVNUyhs Yy0+cmFzW2NoX3R5cGVdKSkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisK KyAgICBhID0gJmxjLT5yYXNbY2hfdHlwZV1bbGMtPm51bV9yYXNbY2hfdHlwZV1dOworICAgIGEt PnggPSB4MCA+PiBoczsKKyAgICBhLT55ID0geTAgPj4gdnM7CisgICAgYS0+dyA9IHcgPj4gaHM7 CisgICAgYS0+aCA9IGggPj4gdnM7CisgICAgbGMtPm51bV9yYXNbY2hfdHlwZV0rKzsKKworICAg IHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhZGRfdHVfYXJlYShjb25zdCBUcmFuc2Zvcm1V bml0ICp0dSwgaW50ICp4MCwgaW50ICp5MCwgaW50ICp3LCBpbnQgKmgpCit7CisgICAgKngwID0g dHUtPngwOworICAgICp5MCA9IHR1LT55MDsKKyAgICAqdyA9IHR1LT53aWR0aDsKKyAgICAqaCA9 IHR1LT5oZWlnaHQ7Cit9CisKKyNkZWZpbmUgTUlOX0lTUF9QUkVEX1dJRFRIIDQKK3N0YXRpYyBp bnQgZ2V0X2x1bWFfcHJlZGljdF91bml0KGNvbnN0IENvZGluZ1VuaXQgKmN1LCBjb25zdCBUcmFu c2Zvcm1Vbml0ICp0dSwgY29uc3QgaW50IGlkeCwgaW50ICp4MCwgaW50ICp5MCwgaW50ICp3LCBp bnQgKmgpCit7CisgICAgaW50IGhhc19sdW1hID0gMTsKKyAgICBhZGRfdHVfYXJlYSh0dSwgeDAs IHkwLCB3LCBoKTsKKyAgICBpZiAoY3UtPmlzcF9zcGxpdF90eXBlID09IElTUF9WRVJfU1BMSVQg JiYgdHUtPndpZHRoIDwgTUlOX0lTUF9QUkVEX1dJRFRIKSB7CisgICAgICAgICp3ID0gTUlOX0lT UF9QUkVEX1dJRFRIOworICAgICAgICBoYXNfbHVtYSA9ICEoaWR4ICUgKE1JTl9JU1BfUFJFRF9X SURUSCAvIHR1LT53aWR0aCkpOworICAgIH0KKyAgICByZXR1cm4gaGFzX2x1bWE7Cit9CisKK3N0 YXRpYyBpbnQgZ2V0X2Nocm9tYV9wcmVkaWN0X3VuaXQoY29uc3QgQ29kaW5nVW5pdCAqY3UsIGNv bnN0IFRyYW5zZm9ybVVuaXQgKnR1LCBjb25zdCBpbnQgaWR4LCBpbnQgKngwLCBpbnQgKnkwLCBp bnQgKncsIGludCAqaCkKK3sKKyAgICBpZiAoY3UtPmlzcF9zcGxpdF90eXBlID09IElTUF9OT19T UExJVCkgeworICAgICAgICBhZGRfdHVfYXJlYSh0dSwgeDAsIHkwLCB3LCBoKTsKKyAgICAgICAg cmV0dXJuIDE7CisgICAgfQorICAgIGlmIChpZHggPT0gY3UtPm51bV9pbnRyYV9zdWJwYXJ0aXRp b25zIC0gMSkgeworICAgICAgICAqeDAgPSBjdS0+eDA7CisgICAgICAgICp5MCA9IGN1LT55MDsK KyAgICAgICAgKncgPSBjdS0+Y2Jfd2lkdGg7CisgICAgICAgICpoID0gY3UtPmNiX2hlaWdodDsK KyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvLzguNC41LjEg R2VuZXJhbCBkZWNvZGluZyBwcm9jZXNzIGZvciBpbnRyYSBibG9ja3MKK3N0YXRpYyB2b2lkIHBy ZWRpY3RfaW50cmEoVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgVHJhbnNmb3JtVW5pdCAqdHUs IGNvbnN0IGludCBpZHgsIGNvbnN0IGludCB0YXJnZXRfY2hfdHlwZSkKK3sKKyAgICBjb25zdCBW VkNGcmFtZUNvbnRleHQgKmZjICAgICAgICAgPSBsYy0+ZmM7CisgICAgY29uc3QgQ29kaW5nVW5p dCAqY3UgICAgICAgID0gbGMtPmN1OworICAgIGNvbnN0IFZWQ1RyZWVUeXBlIHRyZWVfdHlwZSA9 IGN1LT50cmVlX3R5cGU7CisgICAgaW50IHgwLCB5MCwgdywgaDsKKyAgICBpZiAoY3UtPnByZWRf bW9kZSAhPSBNT0RFX0lOVFJBKSB7CisgICAgICAgIGFkZF9yZWNvbnN0cnVjdGVkX2FyZWEobGMs IHRhcmdldF9jaF90eXBlLCB0dS0+eDAsIHR1LT55MCwgdHUtPndpZHRoLCB0dS0+aGVpZ2h0KTsK KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXRhcmdldF9jaF90eXBlICYmIHRyZWVf dHlwZSAhPSBEVUFMX1RSRUVfQ0hST01BKSB7CisgICAgICAgIGlmIChnZXRfbHVtYV9wcmVkaWN0 X3VuaXQoY3UsIHR1LCBpZHgsICZ4MCwgJnkwLCAmdywgJmgpKSB7CisgICAgICAgICAgICBmZl92 dmNfc2V0X25laWdoYm91cl9hdmFpbGFibGUobGMsIHgwLCB5MCwgdywgaCk7CisgICAgICAgICAg ICBmYy0+dnZjZHNwLmludHJhLmludHJhX3ByZWQobGMsIHgwLCB5MCwgdywgaCwgMCk7CisgICAg ICAgICAgICBhZGRfcmVjb25zdHJ1Y3RlZF9hcmVhKGxjLCAwLCB4MCwgeTAsIHcsIGgpOworICAg ICAgICB9CisgICAgfQorICAgIGlmICh0YXJnZXRfY2hfdHlwZSAmJiB0cmVlX3R5cGUgIT0gRFVB TF9UUkVFX0xVTUEpIHsKKyAgICAgICAgaWYgKGdldF9jaHJvbWFfcHJlZGljdF91bml0KGN1LCB0 dSwgaWR4LCAmeDAsICZ5MCwgJncsICZoKSl7CisgICAgICAgICAgICBmZl92dmNfc2V0X25laWdo Ym91cl9hdmFpbGFibGUobGMsIHgwLCB5MCwgdywgaCk7CisgICAgICAgICAgICBpZiAoaXNfY2Ns bShjdS0+aW50cmFfcHJlZF9tb2RlX2MpKSB7CisgICAgICAgICAgICAgICAgZmMtPnZ2Y2RzcC5p bnRyYS5pbnRyYV9jY2xtX3ByZWQobGMsIHgwLCB5MCwgdywgaCk7CisgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgIGZjLT52dmNkc3AuaW50cmEuaW50cmFfcHJlZChsYywgeDAs IHkwLCB3LCBoLCAxKTsKKyAgICAgICAgICAgICAgICBmYy0+dnZjZHNwLmludHJhLmludHJhX3By ZWQobGMsIHgwLCB5MCwgdywgaCwgMik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhZGRf cmVjb25zdHJ1Y3RlZF9hcmVhKGxjLCAxLCB4MCwgeTAsIHcsIGgpOworICAgICAgICB9CisgICAg fQorfQorCitzdGF0aWMgdm9pZCBzY2FsZV9jbGlwKGludCAqY29lZmYsIGNvbnN0IGludCBuencs IGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCwKKyAgICBjb25zdCBpbnQgc2hpZnQsIGNvbnN0IGlu dCBsb2cyX3RyYW5zZm9ybV9yYW5nZSkKK3sKKyAgICBjb25zdCBpbnQgYWRkID0gMSA8PCAoc2hp ZnQgLSAxKTsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGg7IHkrKykgeworICAgICAgICBpbnQg KnAgPSBjb2VmZiArIHkgKiB3OworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG56dzsgeCsr KSB7CisgICAgICAgICAgICAqcCA9IGF2X2NsaXBfaW50cDIoKCpwICsgYWRkKSA+PiBzaGlmdCwg bG9nMl90cmFuc2Zvcm1fcmFuZ2UpOworICAgICAgICAgICAgcCsrOworICAgICAgICB9CisgICAg ICAgIG1lbXNldChwLCAwLCBzaXplb2YoKnApICogKHcgLSBuencpKTsKKyAgICB9Cit9CisKK3N0 YXRpYyB2b2lkIHNjYWxlKGludCAqb3V0LCBjb25zdCBpbnQgKmluLCBjb25zdCBpbnQgdywgY29u c3QgaW50IGgsIGNvbnN0IGludCBzaGlmdCkKK3sKKyAgICBjb25zdCBpbnQgYWRkID0gMSA8PCAo c2hpZnQgLSAxKTsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGg7IHkrKykgeworICAgICAgICBm b3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKykgeworICAgICAgICAgICAgaW50ICpvID0gb3V0ICsg eSAqIHcgKyB4OworICAgICAgICAgICAgY29uc3QgaW50ICppID0gaW4gKyB5ICogdyArIHg7Cisg ICAgICAgICAgICAqbyA9ICgqaSArIGFkZCkgPj4gc2hpZnQ7CisgICAgICAgIH0KKyAgICB9Cit9 CisKKy8vIHBhcnQgb2YgOC43LjMgU2NhbGluZyBwcm9jZXNzIGZvciB0cmFuc2Zvcm0gY29lZmZp Y2llbnRzCitzdGF0aWMgdm9pZCBkZXJpdmVfcXAoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywg Y29uc3QgVHJhbnNmb3JtVW5pdCAqdHUsIFRyYW5zZm9ybUJsb2NrICp0YikKK3sKKyAgICBjb25z dCBWVkNTUFMgKnNwcyAgICAgICAgICAgICAgID0gbGMtPmZjLT5wcy5zcHM7CisgICAgY29uc3Qg SDI2NlJhd1NsaWNlSGVhZGVyICpyc2ggICA9IGxjLT5zYy0+c2gucjsKKyAgICBjb25zdCBDb2Rp bmdVbml0ICpjdSAgICAgICAgICAgID0gbGMtPmN1OworICAgIGludCBxcCwgcXBfYWN0X29mZnNl dDsKKworICAgIGlmICh0Yi0+Y19pZHggPT0gMCkgeworICAgICAgICAvL2ZpeCBtZQorICAgICAg ICBxcCA9IGN1LT5xcFtMVU1BXSArIHNwcy0+cXBfYmRfb2Zmc2V0OworICAgICAgICBxcF9hY3Rf b2Zmc2V0ID0gY3UtPmFjdF9lbmFibGVkX2ZsYWcgPyAtNSA6IDA7CisgICAgfSBlbHNlIHsKKyAg ICAgICAgY29uc3QgaW50IGlzX2pjYmNyID0gdHUtPmpvaW50X2NiY3JfcmVzaWR1YWxfZmxhZyAm JiB0dS0+Y29kZWRfZmxhZ1tDQl0gJiYgdHUtPmNvZGVkX2ZsYWdbQ1JdOworICAgICAgICBjb25z dCBpbnQgaWR4ID0gaXNfamNiY3IgPyBKQ0JDUiA6IHRiLT5jX2lkeDsKKyAgICAgICAgcXAgPSBj dS0+cXBbaWR4XTsKKyAgICAgICAgcXBfYWN0X29mZnNldCA9IGN1LT5hY3RfZW5hYmxlZF9mbGFn ID8gMSA6IDA7CisgICAgfQorICAgIGlmICh0Yi0+dHMpIHsKKyAgICAgICAgY29uc3QgaW50IHFw X3ByaW1lX3RzX21pbiA9IDQgKyA2ICogc3BzLT5yLT5zcHNfbWluX3FwX3ByaW1lX3RzOworCisg ICAgICAgIHRiLT5xcCA9IGF2X2NsaXAocXAgKyBxcF9hY3Rfb2Zmc2V0LCBxcF9wcmltZV90c19t aW4sIDYzICsgc3BzLT5xcF9iZF9vZmZzZXQpOworICAgICAgICB0Yi0+cmVjdF9ub25fdHNfZmxh ZyA9IDA7CisgICAgICAgIHRiLT5iZF9zaGlmdCA9IDEwOworICAgIH0gZWxzZSB7CisgICAgICAg IGNvbnN0IGludCBsb2dfc3VtID0gdGItPmxvZzJfdGJfd2lkdGggKyB0Yi0+bG9nMl90Yl9oZWln aHQ7CisgICAgICAgIGNvbnN0IGludCByZWN0X25vbl90c19mbGFnID0gbG9nX3N1bSAmIDE7CisK KyAgICAgICAgdGItPnFwID0gYXZfY2xpcChxcCArIHFwX2FjdF9vZmZzZXQsIDAsIDYzICsgc3Bz LT5xcF9iZF9vZmZzZXQpOworICAgICAgICB0Yi0+cmVjdF9ub25fdHNfZmxhZyA9IHJlY3Rfbm9u X3RzX2ZsYWc7CisgICAgICAgIHRiLT5iZF9zaGlmdCA9IHNwcy0+Yml0X2RlcHRoICsgcmVjdF9u b25fdHNfZmxhZyArIChsb2dfc3VtIC8gMikKKyAgICAgICAgICAgICAgICAgICAgICsgMTAgLSBz cHMtPmxvZzJfdHJhbnNmb3JtX3JhbmdlICsgcnNoLT5zaF9kZXBfcXVhbnRfdXNlZF9mbGFnOwor ICAgIH0KKyAgICB0Yi0+YmRfb2Zmc2V0ID0gKDEgPDwgdGItPmJkX3NoaWZ0KSA+PiAxOworfQor CisvLzguNy4zIFNjYWxpbmcgcHJvY2VzcyBmb3IgdHJhbnNmb3JtIGNvZWZmaWNpZW50cworc3Rh dGljIGF2X2Fsd2F5c19pbmxpbmUgaW50IGRlcml2ZV9zY2FsZShjb25zdCBUcmFuc2Zvcm1CbG9j ayAqdGIsIGNvbnN0IGludCBzaF9kZXBfcXVhbnRfdXNlZF9mbGFnKQoreworICAgIHN0YXRpYyBj b25zdCB1aW50OF90IHJlbTZbNjMgKyAyICogNiArIDFdID0geworICAgICAgICAwLCAxLCAyLCAz LCA0LCA1LCAwLCAxLCAyLCAzLCA0LCA1LCAwLCAxLCAyLCAzLCA0LCA1LCAwLCAxLCAyLAorICAg ICAgICAzLCA0LCA1LCAwLCAxLCAyLCAzLCA0LCA1LCAwLCAxLCAyLCAzLCA0LCA1LCAwLCAxLCAy LCAzLCA0LCA1LAorICAgICAgICAwLCAxLCAyLCAzLCA0LCA1LCAwLCAxLCAyLCAzLCA0LCA1LCAw LCAxLCAyLCAzLCA0LCA1LCAwLCAxLCAyLCAzLAorICAgICAgICA0LCA1LCAwLCAxLCAyLCAzLCA0 LCA1LCAwLCAxLCAyLCAzCisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGRpdjZb NjMgKyAyICogNiArIDFdID0geworICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAx LCAxLCAxLCAyLCAyLCAyLCAyLCAyLCAyLCAzLCAgMywgIDMsCisgICAgICAgIDMsIDMsIDMsIDQs IDQsIDQsIDQsIDQsIDQsIDUsIDUsIDUsIDUsIDUsIDUsIDYsIDYsIDYsIDYsICA2LCAgNiwKKyAg ICAgICAgNywgNywgNywgNywgNywgNywgOCwgOCwgOCwgOCwgOCwgOCwgOSwgOSwgOSwgOSwgOSwg OSwgMTAsIDEwLCAxMCwgMTAsCisgICAgICAgIDEwLCAxMCwgMTEsIDExLCAxMSwgMTEsIDExLCAx MSwgMTIsIDEyLCAxMiwgMTIKKyAgICB9OworCisgICAgY29uc3Qgc3RhdGljIGludCBsZXZlbF9z Y2FsZVsyXVs2XSA9IHsKKyAgICAgICAgeyA0MCwgNDUsIDUxLCA1NywgNjQsIDcyIH0sCisgICAg ICAgIHsgNTcsIDY0LCA3MiwgODAsIDkwLCAxMDIgfQorICAgIH07CisgICAgY29uc3QgaW50IGFk ZGluID0gc2hfZGVwX3F1YW50X3VzZWRfZmxhZyAmJiAhdGItPnRzOworICAgIGNvbnN0IGludCBx cCAgICA9IHRiLT5xcCArIGFkZGluOworCisgICAgcmV0dXJuIGxldmVsX3NjYWxlW3RiLT5yZWN0 X25vbl90c19mbGFnXVtyZW02W3FwXV0gPDwgZGl2NltxcF07Cit9CisKKy8vOC43LjMgU2NhbGlu ZyBwcm9jZXNzIGZvciB0cmFuc2Zvcm0gY29lZmZpY2llbnRzCitzdGF0aWMgY29uc3QgdWludDhf dCogZGVyaXZlX3NjYWxlX20oY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgVHJhbnNm b3JtQmxvY2sgKnRiLCB1aW50OF90ICpzY2FsZV9tKQoreworICAgIC8vVGFibGUgMzgg4oCTIFNw ZWNpZmljYXRpb24gb2YgdGhlIHNjYWxpbmcgbWF0cml4IGlkZW50aWZpZXIgdmFyaWFibGUgaWQg YWNjb3JkaW5nIHRvIHByZWRNb2RlLCBjSWR4LCBuVGJXLCBhbmQgblRiSAorICAgIGNvbnN0IGlu dCBpZHNbMl1bM11bNl0gPSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIHsgIDAsICAyLCAgOCwg MTQsIDIwLCAyNiB9LAorICAgICAgICAgICAgeyAgMCwgIDMsICA5LCAxNSwgMjEsIDIxIH0sCisg ICAgICAgICAgICB7ICAwLCAgNCwgMTAsIDE2LCAyMiwgMjIgfQorICAgICAgICB9LAorICAgICAg ICB7CisgICAgICAgICAgICB7ICAwLCAgNSwgMTEsIDE3LCAyMywgMjcgfSwKKyAgICAgICAgICAg IHsgIDAsICA2LCAxMiwgMTgsIDI0LCAyNCB9LAorICAgICAgICAgICAgeyAgMSwgIDcsIDEzLCAx OSwgMjUsIDI1IH0sCisgICAgICAgIH0KKyAgICB9OworICAgIGNvbnN0IFZWQ0ZyYW1lUGFyYW1T ZXRzICpwcyAgICAgPSAmbGMtPmZjLT5wczsKKyAgICBjb25zdCBWVkNTUFMgKnNwcyAgICAgICAg ICAgICAgID0gcHMtPnNwczsKKyAgICBjb25zdCBIMjY2UmF3U2xpY2VIZWFkZXIgKnJzaCAgID0g bGMtPnNjLT5zaC5yOworICAgIGNvbnN0IENvZGluZ1VuaXQgKmN1ICAgICAgICAgICAgPSBsYy0+ Y3U7CisgICAgY29uc3QgVlZDU2NhbGluZ0xpc3QgKnNsICAgICAgICA9IHBzLT5zbDsKKyAgICBj b25zdCBpbnQgaWQgPSBpZHNbY3UtPnByZWRfbW9kZSAhPSBNT0RFX0lOVFJBXVt0Yi0+Y19pZHhd W0ZGTUFYKHRiLT5sb2cyX3RiX2hlaWdodCwgdGItPmxvZzJfdGJfd2lkdGgpIC0gMV07CisgICAg Y29uc3QgaW50IGxvZzJfbWF0cml4X3NpemUgPSAoaWQgPCAyKSA/IDEgOiAoaWQgPCA4KSA/IDIg OiAzOworICAgIHVpbnQ4X3QgKnAgPSBzY2FsZV9tOworCisgICAgYXZfYXNzZXJ0MCghc3BzLT5y LT5zcHNfc2NhbGluZ19tYXRyaXhfZm9yX2FsdGVybmF0aXZlX2NvbG91cl9zcGFjZV9kaXNhYmxl ZF9mbGFnKTsKKworICAgIGlmICghcnNoLT5zaF9leHBsaWNpdF9zY2FsaW5nX2xpc3RfdXNlZF9m bGFnIHx8IHRiLT50cyB8fAorICAgICAgICBzcHMtPnItPnNwc19zY2FsaW5nX21hdHJpeF9mb3Jf bGZuc3RfZGlzYWJsZWRfZmxhZyAmJiBjdS0+YXBwbHlfbGZuc3RfZmxhZ1t0Yi0+Y19pZHhdKQor ICAgICAgICByZXR1cm4gZmZfdnZjX2RlZmF1bHRfc2NhbGVfbTsKKworICAgIGlmICghc2wpIHsK KyAgICAgICAgYXZfbG9nKGxjLT5mYy0+YXZjdHgsIEFWX0xPR19XQVJOSU5HLCAiYnVnOiBubyBz Y2FsaW5nIGxpc3QgYXBzLCBpZCA9ICVkIiwgcHMtPnBoLnItPnBoX3NjYWxpbmdfbGlzdF9hcHNf aWQpOworICAgICAgICByZXR1cm4gZmZfdnZjX2RlZmF1bHRfc2NhbGVfbTsKKyAgICB9CisKKyAg ICBmb3IgKGludCB5ID0gdGItPm1pbl9zY2FuX3k7IHkgPD0gdGItPm1heF9zY2FuX3k7IHkrKykg eworICAgICAgICBjb25zdCBpbnQgb2ZmID0geSA8PCBsb2cyX21hdHJpeF9zaXplID4+IHRiLT5s b2cyX3RiX2hlaWdodCA8PCBsb2cyX21hdHJpeF9zaXplOworICAgICAgICBjb25zdCB1aW50OF90 ICptID0gJnNsLT5zY2FsaW5nX21hdHJpeF9yZWNbaWRdW29mZl07CisKKyAgICAgICAgZm9yIChp bnQgeCA9IHRiLT5taW5fc2Nhbl94OyB4IDw9IHRiLT5tYXhfc2Nhbl94OyB4KyspCisgICAgICAg ICAgICAqcCsrID0gbVt4IDw8IGxvZzJfbWF0cml4X3NpemUgPj4gdGItPmxvZzJfdGJfd2lkdGhd OworICAgIH0KKyAgICBpZiAoaWQgPj0gU0xfU1RBUlRfMTZ4MTYgJiYgIXRiLT5taW5fc2Nhbl94 ICYmICF0Yi0+bWluX3NjYW5feSkKKyAgICAgICAgKnNjYWxlX20gPSBzbC0+c2NhbGluZ19tYXRy aXhfZGNfcmVjW2lkIC0gU0xfU1RBUlRfMTZ4MTZdOworCisgICAgcmV0dXJuIHNjYWxlX207Cit9 CisKKy8vOC43LjMgU2NhbGluZyBwcm9jZXNzIGZvciB0cmFuc2Zvcm0gY29lZmZpY2llbnRzCitz dGF0aWMgYXZfYWx3YXlzX2lubGluZSBpbnQgc2NhbGVfY29lZmYoY29uc3QgVHJhbnNmb3JtQmxv Y2sgKnRiLCBpbnQgY29lZmYsCisgICAgY29uc3QgaW50IHNjYWxlLCBjb25zdCBpbnQgc2NhbGVf bSwgY29uc3QgaW50IGxvZzJfdHJhbnNmb3JtX3JhbmdlKQoreworICAgIGNvZWZmID0gKGNvZWZm ICogc2NhbGUgKiBzY2FsZV9tICsgdGItPmJkX29mZnNldCkgPj4gdGItPmJkX3NoaWZ0OworICAg IGNvZWZmID0gYXZfY2xpcF9pbnRwMihjb2VmZiwgbG9nMl90cmFuc2Zvcm1fcmFuZ2UpOworICAg IHJldHVybiBjb2VmZjsKK30KKworc3RhdGljIHZvaWQgZGVxdWFudChjb25zdCBWVkNMb2NhbENv bnRleHQgKmxjLCBjb25zdCBUcmFuc2Zvcm1Vbml0ICp0dSwgVHJhbnNmb3JtQmxvY2sgKnRiKQor eworICAgIHVpbnQ4X3QgdG1wW01BWF9UQl9TSVpFICogTUFYX1RCX1NJWkVdOworICAgIGNvbnN0 IEgyNjZSYXdTbGljZUhlYWRlciAqcnNoICAgPSBsYy0+c2MtPnNoLnI7CisgICAgY29uc3QgVlZD U1BTICpzcHMgICAgICAgICAgICAgICA9IGxjLT5mYy0+cHMuc3BzOworICAgIGNvbnN0IHVpbnQ4 X3QgKnNjYWxlX20gICAgICAgICAgPSBkZXJpdmVfc2NhbGVfbShsYywgdGIsIHRtcCk7CisgICAg aW50IHNjYWxlOworCisgICAgZGVyaXZlX3FwKGxjLCB0dSwgdGIpOworICAgIHNjYWxlID0gZGVy aXZlX3NjYWxlKHRiLCByc2gtPnNoX2RlcF9xdWFudF91c2VkX2ZsYWcpOworCisgICAgZm9yIChp bnQgeSA9IHRiLT5taW5fc2Nhbl95OyB5IDw9IHRiLT5tYXhfc2Nhbl95OyB5KyspIHsKKyAgICAg ICAgZm9yIChpbnQgeCA9IHRiLT5taW5fc2Nhbl94OyB4IDw9IHRiLT5tYXhfc2Nhbl94OyB4Kysp IHsKKyAgICAgICAgICAgIGludCAqY29lZmYgPSB0Yi0+Y29lZmZzICsgeSAqIHRiLT50Yl93aWR0 aCArIHg7CisKKyAgICAgICAgICAgIGlmICgqY29lZmYpCisgICAgICAgICAgICAgICAgKmNvZWZm ID0gc2NhbGVfY29lZmYodGIsICpjb2VmZiwgc2NhbGUsICpzY2FsZV9tLCBzcHMtPmxvZzJfdHJh bnNmb3JtX3JhbmdlKTsKKyAgICAgICAgICAgIHNjYWxlX20rKzsKKyAgICAgICAgfQorICAgIH0K K30KKworc3RhdGljIHZvaWQgaXR4XzJkKGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIFRyYW5z Zm9ybUJsb2NrICp0YiwgY29uc3QgZW51bSBUeFR5cGUgdHJoLCBjb25zdCBlbnVtIFR4VHlwZSB0 cnYsIGludCAqdGVtcCkKK3sKKyAgICBjb25zdCBWVkNTUFMgKnNwcyAgID0gZmMtPnBzLnNwczsK KyAgICBjb25zdCBpbnQgdyAgICAgICAgID0gdGItPnRiX3dpZHRoOworICAgIGNvbnN0IGludCBo ICAgICAgICAgPSB0Yi0+dGJfaGVpZ2h0OworICAgIGNvbnN0IGludCBuencgICAgICAgPSB0Yi0+ bWF4X3NjYW5feCArIDE7CisKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IG56dzsgeCsrKQorICAg ICAgICBmYy0+dnZjZHNwLml0eC5pdHhbdHJ2XVt0Yi0+bG9nMl90Yl9oZWlnaHQgLSAxXSh0ZW1w ICsgeCwgdywgdGItPmNvZWZmcyArIHgsIHcpOworICAgIHNjYWxlX2NsaXAodGVtcCwgbnp3LCB3 LCBoLCA3LCBzcHMtPmxvZzJfdHJhbnNmb3JtX3JhbmdlKTsKKworICAgIGZvciAoaW50IHkgPSAw OyB5IDwgaDsgeSsrKQorICAgICAgICBmYy0+dnZjZHNwLml0eC5pdHhbdHJoXVt0Yi0+bG9nMl90 Yl93aWR0aCAtIDFdKHRiLT5jb2VmZnMgKyB5ICogdywgMSwgdGVtcCArIHkgKiB3LCAxKTsKKyAg ICBzY2FsZSh0Yi0+Y29lZmZzLCB0Yi0+Y29lZmZzLCB3LCBoLCA1ICsgc3BzLT5sb2cyX3RyYW5z Zm9ybV9yYW5nZSAtIHNwcy0+Yml0X2RlcHRoKTsKK30KKworc3RhdGljIHZvaWQgaXR4XzFkKGNv bnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIFRyYW5zZm9ybUJsb2NrICp0YiwgY29uc3QgZW51bSBU eFR5cGUgdHJoLCBjb25zdCBlbnVtIFR4VHlwZSB0cnYsIGludCAgKnRlbXApCit7CisgICAgY29u c3QgVlZDU1BTICpzcHMgICA9IGZjLT5wcy5zcHM7CisgICAgY29uc3QgaW50IHcgICAgICAgICA9 IHRiLT50Yl93aWR0aDsKKyAgICBjb25zdCBpbnQgaCAgICAgICAgID0gdGItPnRiX2hlaWdodDsK KworICAgIGlmICh3ID4gMSkKKyAgICAgICAgZmMtPnZ2Y2RzcC5pdHguaXR4W3RyaF1bdGItPmxv ZzJfdGJfd2lkdGggLSAxXSh0ZW1wLCAxLCB0Yi0+Y29lZmZzLCAxKTsKKyAgICBlbHNlCisgICAg ICAgIGZjLT52dmNkc3AuaXR4Lml0eFt0cnZdW3RiLT5sb2cyX3RiX2hlaWdodCAtIDFdKHRlbXAs IDEsIHRiLT5jb2VmZnMsIDEpOworICAgIHNjYWxlKHRiLT5jb2VmZnMsIHRlbXAsIHcsIGgsIDYg KyBzcHMtPmxvZzJfdHJhbnNmb3JtX3JhbmdlIC0gc3BzLT5iaXRfZGVwdGgpOworfQorCitzdGF0 aWMgdm9pZCB0cmFuc2Zvcm1fYmRwY20oVHJhbnNmb3JtQmxvY2sgKnRiLCBjb25zdCBWVkNMb2Nh bENvbnRleHQgKmxjLCBjb25zdCBDb2RpbmdVbml0ICpjdSkKK3sKKyAgICBjb25zdCBWVkNTUFMg KnNwcyAgICAgICAgPSBsYy0+ZmMtPnBzLnNwczsKKyAgICBjb25zdCBJbnRyYVByZWRNb2RlIG1v ZGUgPSB0Yi0+Y19pZHggPyBjdS0+aW50cmFfcHJlZF9tb2RlX2MgOiBjdS0+aW50cmFfcHJlZF9t b2RlX3k7CisgICAgY29uc3QgaW50IHZlcnRpY2FsICAgICAgID0gbW9kZSA9PSBJTlRSQV9WRVJU OworICAgIGxjLT5mYy0+dnZjZHNwLml0eC50cmFuc2Zvcm1fYmRwY20odGItPmNvZWZmcywgdGIt PnRiX3dpZHRoLCB0Yi0+dGJfaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdmVydGljYWwsIHNwcy0+bG9nMl90cmFuc2Zvcm1fcmFuZ2UpOworICAgIGlmICh2 ZXJ0aWNhbCkKKyAgICAgICAgdGItPm1heF9zY2FuX3kgPSB0Yi0+dGJfaGVpZ2h0IC0gMTsKKyAg ICBlbHNlCisgICAgICAgIHRiLT5tYXhfc2Nhbl94ID0gdGItPnRiX3dpZHRoIC0gMTsKK30KKwor c3RhdGljIHZvaWQgaXRyYW5zZm9ybShWVkNMb2NhbENvbnRleHQgKmxjLCBUcmFuc2Zvcm1Vbml0 ICp0dSwgY29uc3QgaW50IHR1X2lkeCwgY29uc3QgaW50IHRhcmdldF9jaF90eXBlKQoreworICAg IGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMgICA9IGxjLT5mYzsKKyAgICBjb25zdCBWVkNTUFMg KnNwcyAgICAgICAgICAgPSBmYy0+cHMuc3BzOworICAgIGNvbnN0IFZWQ1NIICpzaCAgICAgICAg ICAgICA9ICZsYy0+c2MtPnNoOworICAgIGNvbnN0IENvZGluZ1VuaXQgKmN1ICAgICAgICA9IGxj LT5jdTsKKyAgICBjb25zdCBpbnQgcHMgICAgICAgICAgICAgICAgPSBmYy0+cHMuc3BzLT5waXhl bF9zaGlmdDsKKyAgICBERUNMQVJFX0FMSUdORUQoMzIsIGludCwgdGVtcClbTUFYX1RCX1NJWkUg KiBNQVhfVEJfU0laRV07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHR1LT5uYl90YnM7IGkr KykgeworICAgICAgICBUcmFuc2Zvcm1CbG9jayAqdGIgID0gJnR1LT50YnNbaV07CisgICAgICAg IGNvbnN0IGludCBjX2lkeCAgICAgPSB0Yi0+Y19pZHg7CisgICAgICAgIGNvbnN0IGludCBjaF90 eXBlICAgPSBjX2lkeCA+IDA7CisKKyAgICAgICAgaWYgKGNoX3R5cGUgPT0gdGFyZ2V0X2NoX3R5 cGUgJiYgdGItPmhhc19jb2VmZnMpIHsKKyAgICAgICAgICAgIGNvbnN0IGludCB3ICAgICAgICAg ICAgID0gdGItPnRiX3dpZHRoOworICAgICAgICAgICAgY29uc3QgaW50IGggICAgICAgICAgICAg PSB0Yi0+dGJfaGVpZ2h0OworICAgICAgICAgICAgY29uc3QgaW50IGNocm9tYV9zY2FsZSAgPSBj aF90eXBlICYmIHNoLT5yLT5zaF9sbWNzX3VzZWRfZmxhZyAmJiBmYy0+cHMucGguci0+cGhfY2hy b21hX3Jlc2lkdWFsX3NjYWxlX2ZsYWcgJiYgKHcgKiBoID4gNCk7CisgICAgICAgICAgICBjb25z dCBwdHJkaWZmX3Qgc3RyaWRlICA9IGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhdOworICAgICAg ICAgICAgY29uc3QgaW50IGhzICAgICAgICAgICAgPSBzcHMtPmhzaGlmdFtjX2lkeF07CisgICAg ICAgICAgICBjb25zdCBpbnQgdnMgICAgICAgICAgICA9IHNwcy0+dnNoaWZ0W2NfaWR4XTsKKyAg ICAgICAgICAgIHVpbnQ4X3QgKmRzdCAgICAgICAgICAgID0gJmZjLT5mcmFtZS0+ZGF0YVtjX2lk eF1bKHRiLT55MCA+PiB2cykgKiBzdHJpZGUgKyAoKHRiLT54MCA+PiBocykgPDwgcHMpXTsKKwor ICAgICAgICAgICAgaWYgKGN1LT5iZHBjbV9mbGFnW3RiLT5jX2lkeF0pCisgICAgICAgICAgICAg ICAgdHJhbnNmb3JtX2JkcGNtKHRiLCBsYywgY3UpOworICAgICAgICAgICAgZGVxdWFudChsYywg dHUsIHRiKTsKKyAgICAgICAgICAgIGlmICghdGItPnRzKSB7CisgICAgICAgICAgICAgICAgZW51 bSBUeFR5cGUgdHJoLCB0cnY7CisKKyAgICAgICAgICAgICAgICBpZiAoY3UtPmFwcGx5X2xmbnN0 X2ZsYWdbY19pZHhdKQorICAgICAgICAgICAgICAgICAgICBpbGZuc3RfdHJhbnNmb3JtKGxjLCB0 Yik7CisgICAgICAgICAgICAgICAgZGVyaXZlX3RyYW5zZm9ybV90eXBlKGZjLCBsYywgdGIsICZ0 cmgsICZ0cnYpOworICAgICAgICAgICAgICAgIGlmICh3ID4gMSAmJiBoID4gMSkKKyAgICAgICAg ICAgICAgICAgICAgaXR4XzJkKGZjLCB0YiwgdHJoLCB0cnYsIHRlbXApOworICAgICAgICAgICAg ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaXR4XzFkKGZjLCB0YiwgdHJoLCB0cnYsIHRl bXApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY2hyb21hX3NjYWxlKQorICAg ICAgICAgICAgICAgIGZjLT52dmNkc3AuaW50cmEubG1jc19zY2FsZV9jaHJvbWEobGMsIHRlbXAs IHRiLT5jb2VmZnMsIHcsIGgsIGN1LT54MCwgY3UtPnkwKTsKKyAgICAgICAgICAgIGZjLT52dmNk c3AuaXR4LmFkZF9yZXNpZHVhbChkc3QsIGNocm9tYV9zY2FsZSA/IHRlbXAgOiB0Yi0+Y29lZmZz LCB3LCBoLCBzdHJpZGUpOworCisgICAgICAgICAgICBpZiAodHUtPmpvaW50X2NiY3JfcmVzaWR1 YWxfZmxhZyAmJiB0Yi0+Y19pZHgpCisgICAgICAgICAgICAgICAgYWRkX3Jlc2lkdWFsX2Zvcl9q b2ludF9jb2RpbmdfY2hyb21hKGxjLCB0dSwgdGIsIGNocm9tYV9zY2FsZSk7CisgICAgICAgIH0K KyAgICB9Cit9CisKK3N0YXRpYyBpbnQgcmVjb25zdHJ1Y3QoVlZDTG9jYWxDb250ZXh0ICpsYykK K3sKKyAgICBWVkNGcmFtZUNvbnRleHQgKmZjID0gbGMtPmZjOworICAgIENvZGluZ1VuaXQgKmN1 ICAgICAgPSBsYy0+Y3U7CisgICAgY29uc3QgaW50IHN0YXJ0ICAgICA9IGN1LT50cmVlX3R5cGUg PT0gRFVBTF9UUkVFX0NIUk9NQTsKKyAgICBjb25zdCBpbnQgZW5kICAgICAgID0gZmMtPnBzLnNw cy0+ci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjICYmIChjdS0+dHJlZV90eXBlICE9IERVQUxfVFJF RV9MVU1BKTsKKworICAgIGZvciAoaW50IGNoX3R5cGUgPSBzdGFydDsgY2hfdHlwZSA8PSBlbmQ7 IGNoX3R5cGUrKykgeworICAgICAgICBUcmFuc2Zvcm1Vbml0ICp0dSA9IGN1LT50dXMuaGVhZDsK KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IHR1OyBpKyspIHsKKyAgICAgICAgICAgIHByZWRpY3Rf aW50cmEobGMsIHR1LCBpLCBjaF90eXBlKTsKKyAgICAgICAgICAgIGl0cmFuc2Zvcm0obGMsIHR1 LCBpLCBjaF90eXBlKTsKKyAgICAgICAgICAgIHR1ID0gdHUtPm5leHQ7CisgICAgICAgIH0KKyAg ICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBmZl92dmNfcmVjb25zdHJ1Y3QoVlZDTG9jYWxD b250ZXh0ICpsYywgY29uc3QgaW50IHJzLCBjb25zdCBpbnQgcngsIGNvbnN0IGludCByeSkKK3sK KyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjICAgPSBsYy0+ZmM7CisgICAgY29uc3QgVlZD U1BTICpzcHMgICAgICAgICAgID0gZmMtPnBzLnNwczsKKyAgICBjb25zdCBpbnQgeF9jdGIgICAg ICAgICAgICAgPSByeCA8PCBzcHMtPmN0Yl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQgeV9j dGIgICAgICAgICAgICAgPSByeSA8PCBzcHMtPmN0Yl9sb2cyX3NpemVfeTsKKyAgICBDVFUgKmN0 dSAgICAgICAgICAgICAgICAgICAgPSBmYy0+dGFiLmN0dXMgKyByczsKKyAgICBDb2RpbmdVbml0 ICpjdSAgICAgICAgICAgICAgPSBjdHUtPmN1czsKKyAgICBpbnQgcmV0ICAgICAgICAgICAgICAg ICAgICAgPSAwOworCisgICAgbGMtPm51bV9yYXNbMF0gPSBsYy0+bnVtX3Jhc1sxXSA9IDA7Cisg ICAgbGMtPmxtY3MueF92cGR1ID0gLTE7CisgICAgbGMtPmxtY3MueV92cGR1ID0gLTE7CisgICAg ZmZfdnZjX2RlY29kZV9uZWlnaGJvdXIobGMsIHhfY3RiLCB5X2N0YiwgcngsIHJ5LCBycyk7Cisg ICAgd2hpbGUgKGN1KSB7CisgICAgICAgIGxjLT5jdSA9IGN1OworCisgICAgICAgIGlmIChjdS0+ Y2lpcF9mbGFnKQorICAgICAgICAgICAgZmZfdnZjX3ByZWRpY3RfY2lpcChsYyk7CisgICAgICAg IGlmIChjdS0+Y29kZWRfZmxhZykgeworICAgICAgICAgICAgcmV0ID0gcmVjb25zdHJ1Y3QobGMp OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWRkX3JlY29uc3RydWN0ZWRfYXJlYShs YywgTFVNQSwgY3UtPngwLCBjdS0+eTAsIGN1LT5jYl93aWR0aCwgY3UtPmNiX2hlaWdodCk7Cisg ICAgICAgICAgICBhZGRfcmVjb25zdHJ1Y3RlZF9hcmVhKGxjLCBDSFJPTUEsIGN1LT54MCwgY3Ut PnkwLCBjdS0+Y2Jfd2lkdGgsIGN1LT5jYl9oZWlnaHQpOworICAgICAgICB9CisgICAgICAgIGN1 ID0gY3UtPm5leHQ7CisgICAgfQorICAgIGZmX3Z2Y19jdHVfZnJlZV9jdXMoY3R1KTsKKyAgICBy ZXR1cm4gcmV0OworfQorCitpbnQgZmZfdnZjX2dldF9taXBfc2l6ZV9pZChjb25zdCBpbnQgdywg Y29uc3QgaW50IGgpCit7CisgICAgaWYgKHcgPT0gNCAmJiBoID09IDQpCisgICAgICAgIHJldHVy biAwOworICAgIGlmICgodyA9PSA0IHx8IGggPT0gNCkgfHwgKHcgPT0gOCAmJiBoID09IDgpKQor ICAgICAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gMjsKK30KKworaW50IGZmX3Z2Y19uc2NhbGVf ZGVyaXZlKGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCwgY29uc3QgaW50IG1vZGUpCit7CisgICAg aW50IHNpZGVfc2l6ZSwgbnNjYWxlOworICAgIGF2X2Fzc2VydDAobW9kZSA8IElOVFJBX0xUX0ND TE0gJiYgIShtb2RlID4gSU5UUkFfSE9SWiAmJiBtb2RlIDwgSU5UUkFfVkVSVCkpOworICAgIGlm IChtb2RlID09IElOVFJBX1BMQU5BUiB8fCBtb2RlID09IElOVFJBX0RDIHx8CisgICAgICAgIG1v ZGUgPT0gSU5UUkFfSE9SWiB8fCBtb2RlID09IElOVFJBX1ZFUlQpIHsKKyAgICAgICAgbnNjYWxl ID0gKGF2X2xvZzIodykgKyBhdl9sb2cyKGgpIC0gMikgPj4gMjsKKyAgICB9IGVsc2UgeworICAg ICAgICBjb25zdCBpbnQgaW50cmFfcHJlZF9hbmdsZSA9IGZmX3Z2Y19pbnRyYV9wcmVkX2FuZ2xl X2Rlcml2ZShtb2RlKTsKKyAgICAgICAgY29uc3QgaW50IGludl9hbmdsZSAgICAgICAgPSBmZl92 dmNfaW50cmFfaW52X2FuZ2xlX2Rlcml2ZShpbnRyYV9wcmVkX2FuZ2xlKTsKKyAgICAgICAgaWYg KG1vZGUgPj0gSU5UUkFfVkVSVCkKKyAgICAgICAgICAgIHNpZGVfc2l6ZSA9IGg7CisgICAgICAg IGlmIChtb2RlIDw9IElOVFJBX0hPUlopCisgICAgICAgICAgICBzaWRlX3NpemUgPSB3OworICAg ICAgICBuc2NhbGUgPSBGRk1JTigyLCBhdl9sb2cyKHNpZGVfc2l6ZSkgLSBhdl9sb2cyKDMgKiBp bnZfYW5nbGUgLSAyKSArIDgpOworICAgIH0KKyAgICByZXR1cm4gbnNjYWxlOworfQorCitpbnQg ZmZfdnZjX25lZWRfcGRwYyhjb25zdCBpbnQgdywgY29uc3QgaW50IGgsIGNvbnN0IHVpbnQ4X3Qg YmRwY21fZmxhZywgY29uc3QgaW50IG1vZGUsIGNvbnN0IGludCByZWZfaWR4KQoreworICAgIGF2 X2Fzc2VydDAobW9kZSA8IElOVFJBX0xUX0NDTE0pOworICAgIGlmICgodyA+PSA0ICYmIGggPj0g NCkgJiYgIXJlZl9pZHggJiYgIWJkcGNtX2ZsYWcpIHsKKyAgICAgICAgaW50IG5zY2FsZTsKKyAg ICAgICAgaWYgKG1vZGUgPT0gSU5UUkFfUExBTkFSIHx8IG1vZGUgPT0gSU5UUkFfREMgfHwKKyAg ICAgICAgICAgIG1vZGUgPT0gSU5UUkFfSE9SWiB8fCBtb2RlID09IElOVFJBX1ZFUlQpCisgICAg ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgaWYgKG1vZGUgPiBJTlRSQV9IT1JaICYmIG1vZGUg PCBJTlRSQV9WRVJUKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIG5zY2FsZSA9IGZm X3Z2Y19uc2NhbGVfZGVyaXZlKHcsIGgsIG1vZGUpOworICAgICAgICByZXR1cm4gbnNjYWxlID49 IDA7CisKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBSZWNvbnN0cnVj dGVkQXJlYSogZ2V0X3JlY29uc3RydWN0ZWRfYXJlYShjb25zdCBWVkNMb2NhbENvbnRleHQgKmxj LCBjb25zdCBpbnQgeCwgY29uc3QgaW50IHksIGNvbnN0IGludCBjX2lkeCkKK3sKKyAgICBjb25z dCBpbnQgY2hfdHlwZSA9IGNfaWR4ID4gMDsKKyAgICBmb3IgKGludCBpID0gbGMtPm51bV9yYXNb Y2hfdHlwZV0gLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICBjb25zdCBSZWNvbnN0cnVjdGVk QXJlYSogYSA9ICZsYy0+cmFzW2NoX3R5cGVdW2ldOworICAgICAgICBjb25zdCBpbnQgciA9IChh LT54ICsgYS0+dyk7CisgICAgICAgIGNvbnN0IGludCBiID0gKGEtPnkgKyBhLT5oKTsKKyAgICAg ICAgaWYgKGEtPnggPD0geCAmJiB4IDwgciAmJiBhLT55IDw9IHkgJiYgeSA8IGIpCisgICAgICAg ICAgICByZXR1cm4gYTsKKworICAgICAgICAvL2l0J3MgdG9vIGZhciBhd2F5LCBubyBuZWVkIGNo ZWNrIGl0OworICAgICAgICBpZiAoeCA+PSByICYmIHkgPj0gYikKKyAgICAgICAgICAgIGJyZWFr OworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworaW50IGZmX3Z2Y19nZXRfdG9wX2F2YWls YWJsZShjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBpbnQgeCwgY29uc3QgaW50IHks IGludCB0YXJnZXRfc2l6ZSwgY29uc3QgaW50IGNfaWR4KQoreworICAgIGNvbnN0IFZWQ0ZyYW1l Q29udGV4dCAqZmMgPSBsYy0+ZmM7CisgICAgY29uc3QgVlZDU1BTICpzcHMgPSBmYy0+cHMuc3Bz OworICAgIGNvbnN0IGludCBocyA9IHNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICBjb25zdCBpbnQg dnMgPSBzcHMtPnZzaGlmdFtjX2lkeF07CisgICAgY29uc3QgaW50IGxvZzJfY3RiX3NpemVfdiAg ID0gc3BzLT5jdGJfbG9nMl9zaXplX3kgLSB2czsKKyAgICBjb25zdCBpbnQgZW5kX29mX2N0Yl94 ICAgICAgPSAoKGxjLT5jdS0+eDAgPj4gc3BzLT5jdGJfbG9nMl9zaXplX3kpICsgMSkgPDwgc3Bz LT5jdGJfbG9nMl9zaXplX3k7CisgICAgY29uc3QgaW50IHkwYiAgICAgICAgICAgICAgID0gYXZf bW9kX3VpbnRwMih5LCBsb2cyX2N0Yl9zaXplX3YpOworICAgIGNvbnN0IGludCBtYXhfeCAgICAg ICAgICAgICA9IEZGTUlOKGZjLT5wcy5wcHMtPndpZHRoLCBlbmRfb2ZfY3RiX3gpID4+IGhzOwor ICAgIGNvbnN0IFJlY29uc3RydWN0ZWRBcmVhICphOworICAgIGludCBweCA9IHg7CisKKyAgICBp ZiAoIXkwYikgeworICAgICAgICBpZiAoIWxjLT5jdGJfdXBfZmxhZykKKyAgICAgICAgICAgIHJl dHVybiAwOworICAgICAgICB0YXJnZXRfc2l6ZSA9IEZGTUlOKHRhcmdldF9zaXplLCAobGMtPmVu ZF9vZl90aWxlc194ID4+IGhzKSAtIHgpOworICAgICAgICBpZiAoc3BzLT5yLT5zcHNfZW50cm9w eV9jb2Rpbmdfc3luY19lbmFibGVkX2ZsYWcpCisgICAgICAgICAgICB0YXJnZXRfc2l6ZSA9IEZG TUlOKHRhcmdldF9zaXplLCAoZW5kX29mX2N0Yl94ID4+IGhzKSAtIHgpOworICAgICAgICByZXR1 cm4gdGFyZ2V0X3NpemU7CisgICAgfQorCisgICAgdGFyZ2V0X3NpemUgPSBGRk1BWCgwLCBGRk1J Tih0YXJnZXRfc2l6ZSwgbWF4X3ggLSB4KSk7CisgICAgd2hpbGUgKHRhcmdldF9zaXplID4gMCAm JiAoYSA9IGdldF9yZWNvbnN0cnVjdGVkX2FyZWEobGMsIHB4LCB5IC0gMSwgY19pZHgpKSkgewor ICAgICAgICBjb25zdCBpbnQgc3ogPSBGRk1JTih0YXJnZXRfc2l6ZSwgYS0+eCArIGEtPncgLSBw eCk7CisgICAgICAgIHB4ICs9IHN6OworICAgICAgICB0YXJnZXRfc2l6ZSAtPSBzejsKKyAgICB9 CisgICAgcmV0dXJuIHB4IC0geDsKK30KKworaW50IGZmX3Z2Y19nZXRfbGVmdF9hdmFpbGFibGUo Y29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgaW50IHgsIGNvbnN0IGludCB5LCBpbnQg dGFyZ2V0X3NpemUsIGNvbnN0IGludCBjX2lkeCkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRl eHQgKmZjID0gbGMtPmZjOworICAgIGNvbnN0IFZWQ1NQUyAqc3BzID0gZmMtPnBzLnNwczsKKyAg ICBjb25zdCBpbnQgaHMgPSBzcHMtPmhzaGlmdFtjX2lkeF07CisgICAgY29uc3QgaW50IHZzID0g c3BzLT52c2hpZnRbY19pZHhdOworICAgIGNvbnN0IGludCBsb2cyX2N0Yl9zaXplX2ggICA9ICBz cHMtPmN0Yl9sb2cyX3NpemVfeSAtIGhzOworICAgIGNvbnN0IGludCB4MGIgICAgICAgICAgICAg ICA9IGF2X21vZF91aW50cDIoeCwgbG9nMl9jdGJfc2l6ZV9oKTsKKyAgICBjb25zdCBpbnQgZW5k X29mX2N0Yl95ICAgICAgPSAoKGxjLT5jdS0+eTAgPj4gc3BzLT5jdGJfbG9nMl9zaXplX3kpICsg MSkgPDwgc3BzLT5jdGJfbG9nMl9zaXplX3k7CisgICAgY29uc3QgaW50IG1heF95ICAgICAgICAg ICAgID0gRkZNSU4oZmMtPnBzLnBwcy0+aGVpZ2h0LCBlbmRfb2ZfY3RiX3kpID4+IHZzOworICAg IGNvbnN0IFJlY29uc3RydWN0ZWRBcmVhICphOworICAgIGludCAgcHkgPSB5OworCisgICAgaWYg KCF4MGIgJiYgIWxjLT5jdGJfbGVmdF9mbGFnKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHRh cmdldF9zaXplID0gRkZNQVgoMCwgRkZNSU4odGFyZ2V0X3NpemUsIG1heF95IC0geSkpOworICAg IGlmICgheDBiKQorICAgICAgICByZXR1cm4gdGFyZ2V0X3NpemU7CisKKyAgICB3aGlsZSAodGFy Z2V0X3NpemUgPiAwICYmIChhID0gZ2V0X3JlY29uc3RydWN0ZWRfYXJlYShsYywgeCAtIDEsIHB5 LCBjX2lkeCkpKSB7CisgICAgICAgIGNvbnN0IGludCBzeiA9IEZGTUlOKHRhcmdldF9zaXplLCBh LT55ICsgYS0+aCAtIHB5KTsKKyAgICAgICAgcHkgKz0gc3o7CisgICAgICAgIHRhcmdldF9zaXpl IC09IHN6OworICAgIH0KKyAgICByZXR1cm4gcHkgLSB5OworfQorCitzdGF0aWMgaW50IGxlc3Mo Y29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKyAgICByZXR1cm4gKihjb25zdCBpbnQq KWEgLSAqKGNvbnN0IGludCopYjsKK30KKworaW50IGZmX3Z2Y19yZWZfZmlsdGVyX2ZsYWdfZGVy aXZlKGNvbnN0IGludCBtb2RlKQoreworICAgIHN0YXRpYyBjb25zdCBpbnQgbW9kZXNbXSA9IHsg LTE0LCAtMTIsIC0xMCwgLTYsIElOVFJBX1BMQU5BUiwgMiwgMzQsIDY2LCA3MiwgNzYsIDc4LCA4 MH07CisgICAgcmV0dXJuIGJzZWFyY2goJm1vZGUsIG1vZGVzLCBGRl9BUlJBWV9FTEVNUyhtb2Rl cyksIHNpemVvZihpbnQpLCBsZXNzKSAhPSBOVUxMOworfQorCitpbnQgZmZfdnZjX2ludHJhX3By ZWRfYW5nbGVfZGVyaXZlKGNvbnN0IGludCBwcmVkX21vZGUpCit7CisgICAgc3RhdGljIGNvbnN0 IGludCBhbmdsZXNbXSA9IHsKKyAgICAgICAgICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNiwg ICA4LCAgMTAsICAxMiwgIDE0LCAgMTYsICAxOCwgIDIwLCAgMjMsICAyNiwgMjksCisgICAgICAg ICAzMiwgIDM1LCAgMzksICA0NSwgIDUxLCAgNTcsICA2NCwgIDczLCAgODYsIDEwMiwgMTI4LCAx NzEsIDI1NiwgMzQxLCA1MTIKKyAgICB9OworICAgIGludCBzaWduID0gMSwgaWR4LCBpbnRyYV9w cmVkX2FuZ2xlOworICAgIGlmIChwcmVkX21vZGUgPiBJTlRSQV9ESUFHKSB7CisgICAgICAgIGlk eCA9IHByZWRfbW9kZSAtIElOVFJBX1ZFUlQ7CisgICAgfSBlbHNlIGlmIChwcmVkX21vZGUgPiAw KSB7CisgICAgICAgIGlkeCA9IElOVFJBX0hPUlogLSBwcmVkX21vZGU7CisgICAgfSBlbHNlIHsK KyAgICAgICAgaWR4ID0gSU5UUkFfSE9SWiAtIDIgLSBwcmVkX21vZGU7CisgICAgfQorICAgIGlm IChpZHggPCAwKSB7CisgICAgICAgIGlkeCA9IC1pZHg7CisgICAgICAgIHNpZ24gPSAtMTsKKyAg ICB9CisgICAgaW50cmFfcHJlZF9hbmdsZSA9IHNpZ24gKiBhbmdsZXNbaWR4XTsKKyAgICByZXR1 cm4gaW50cmFfcHJlZF9hbmdsZTsKK30KKworI2RlZmluZSBST1VORChmKSAoaW50KShmIDwgMCA/ IC0oLWYgKyAwLjUpIDogKGYgKyAwLjUpKQoraW50IGZmX3Z2Y19pbnRyYV9pbnZfYW5nbGVfZGVy aXZlKGNvbnN0IGludCBpbnRyYV9wcmVkX2FuZ2xlKQoreworICAgIGZsb2F0IGludl9hbmdsZTsK KyAgICBhdl9hc3NlcnQwKGludHJhX3ByZWRfYW5nbGUpOworICAgIGludl9hbmdsZSA9IDMyICog NTEyLjAgLyBpbnRyYV9wcmVkX2FuZ2xlOworICAgIHJldHVybiBST1VORChpbnZfYW5nbGUpOwor fQorCisvLzguNC41LjIuNyBXaWRlIGFuZ2xlIGludHJhIHByZWRpY3Rpb24gbW9kZSBtYXBwaW5n IHByb2NlcworaW50IGZmX3Z2Y193aWRlX2FuZ2xlX21vZGVfbWFwcGluZyhjb25zdCBDb2RpbmdV bml0ICpjdSwKKyAgICBjb25zdCBpbnQgdGJfd2lkdGgsIGNvbnN0IGludCB0Yl9oZWlnaHQsIGNv bnN0IGludCBjX2lkeCwgaW50IHByZWRfbW9kZV9pbnRyYSkKK3sKKyAgICBpbnQgbncsIG5oLCB3 aF9yYXRpbywgbWluLCBtYXg7CisKKyAgICBpZiAoY3UtPmlzcF9zcGxpdF90eXBlID09IElTUF9O T19TUExJVCB8fCBjX2lkeCkgeworICAgICAgICBudyA9IHRiX3dpZHRoOworICAgICAgICBuaCA9 IHRiX2hlaWdodDsKKyAgICB9IGVsc2UgeworICAgICAgICBudyA9IGN1LT5jYl93aWR0aDsKKyAg ICAgICAgbmggPSBjdS0+Y2JfaGVpZ2h0OworICAgIH0KKyAgICB3aF9yYXRpbyAgICA9IEZGQUJT KGZmX2xvZzIobncpIC0gZmZfbG9nMihuaCkpOworICAgIG1heCAgICAgICAgID0gKHdoX3JhdGlv ID4gMSkgPyAoOCAgKyAyICogd2hfcmF0aW8pIDogODsKKyAgICBtaW4gICAgICAgICA9ICh3aF9y YXRpbyA+IDEpID8gKDYwIC0gMiAqIHdoX3JhdGlvKSA6IDYwOworCisgICAgaWYgKG53ID4gbmgg JiYgcHJlZF9tb2RlX2ludHJhID49MiAmJiBwcmVkX21vZGVfaW50cmEgPCBtYXgpCisgICAgICAg IHByZWRfbW9kZV9pbnRyYSArPSA2NTsKKyAgICBlbHNlIGlmIChuaCA+IG53ICYmIHByZWRfbW9k ZV9pbnRyYSA8PSA2NiAmJiBwcmVkX21vZGVfaW50cmEgPiBtaW4pCisgICAgICAgIHByZWRfbW9k ZV9pbnRyYSAtPSA2NzsKKyAgICByZXR1cm4gcHJlZF9tb2RlX2ludHJhOworfQpkaWZmIC0tZ2l0 IGEvbGliYXZjb2RlYy92dmMvdnZjX2ludHJhLmggYi9saWJhdmNvZGVjL3Z2Yy92dmNfaW50cmEu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4xMmQwZGFlODAxCi0tLSAv ZGV2L251bGwKKysrIGIvbGliYXZjb2RlYy92dmMvdnZjX2ludHJhLmgKQEAgLTAsMCArMSw0OSBA QAorLyoKKyAqIFZWQyBpbnRyYSBwcmVkaWN0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDIx IE51byBNaQorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1w ZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg KiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworI2lmbmRlZiBB VkNPREVDX1ZWQ19JTlRSQV9ICisjZGVmaW5lIEFWQ09ERUNfVlZDX0lOVFJBX0gKKworI2luY2x1 ZGUgInZ2Y19jdHUuaCIKKworLyoqCisgKiByZWNvbnN0cnVjdCBhIENUVQorICogQHBhcmFtIGxj IGxvY2FsIGNvbnRleHQgZm9yIENUVQorICogQHBhcmFtIHJzIHJhc3RlciBvcmRlciBmb3IgdGhl IENUVS4KKyAqIEBwYXJhbSByeCByYXN0ZXIgb3JkZXIgeCBmb3IgdGhlIENUVS4KKyAqIEBwYXJh bSByeSByYXN0ZXIgb3JkZXIgeSBmb3IgdGhlIENUVS4KKyAqIEByZXR1cm4gQVZFUlJPUgorICov CitpbnQgZmZfdnZjX3JlY29uc3RydWN0KFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCBy cywgY29uc3QgaW50IHJ4LCBjb25zdCBpbnQgcnkpOworCisvL3V0aWxzIGZvciB2dmNfaW50cmFf dGVtcGxhdGUKK2ludCBmZl92dmNfZ2V0X3RvcF9hdmFpbGFibGUoY29uc3QgVlZDTG9jYWxDb250 ZXh0ICpsYywgaW50IHgwLCBpbnQgeTAsIGludCB0YXJnZXRfc2l6ZSwgaW50IGNfaWR4KTsKK2lu dCBmZl92dmNfZ2V0X2xlZnRfYXZhaWxhYmxlKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGlu dCB4MCwgaW50IHkwLCBpbnQgdGFyZ2V0X3NpemUsIGludCBjX2lkeCk7CitpbnQgZmZfdnZjX2dl dF9taXBfc2l6ZV9pZChpbnQgdywgaW50IGgpOworaW50IGZmX3Z2Y19uZWVkX3BkcGMoaW50IHcs IGludCBoLCB1aW50OF90IGJkcGNtX2ZsYWcsIGludCBtb2RlLCBpbnQgcmVmX2lkeCk7CitpbnQg ZmZfdnZjX25zY2FsZV9kZXJpdmUoaW50IHcsIGludCBoLCBpbnQgbW9kZSk7CitpbnQgZmZfdnZj X3JlZl9maWx0ZXJfZmxhZ19kZXJpdmUoaW50IG1vZGUpOworaW50IGZmX3Z2Y19pbnRyYV9wcmVk X2FuZ2xlX2Rlcml2ZShpbnQgcHJlZF9tb2RlKTsKK2ludCBmZl92dmNfaW50cmFfaW52X2FuZ2xl X2Rlcml2ZShpbnQgcHJlZF9tb2RlKTsKK2ludCBmZl92dmNfd2lkZV9hbmdsZV9tb2RlX21hcHBp bmcoY29uc3QgQ29kaW5nVW5pdCAqY3UsCisgICAgaW50IHRiX3dpZHRoLCBpbnQgdGJfaGVpZ2h0 LCBpbnQgY19pZHgsIGludCBwcmVkX21vZGVfaW50cmEpOworCisjZW5kaWYgLy8gQVZDT0RFQ19W VkNfSU5UUkFfSApkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMvdnZjX2ludHJhX3RlbXBsYXRl LmMgYi9saWJhdmNvZGVjL3Z2Yy92dmNfaW50cmFfdGVtcGxhdGUuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwLi45ZmI0NzU0OWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGli YXZjb2RlYy92dmMvdnZjX2ludHJhX3RlbXBsYXRlLmMKQEAgLTAsMCArMSwxMDE1IEBACisvKgor ICogVlZDIGludHJhIHByZWRpY3Rpb24gRFNQCisgKgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIw MjMgTnVvbWkKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZt cGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRv IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1 ZGUgImxpYmF2Y29kZWMvYml0X2RlcHRoX3RlbXBsYXRlLmMiCisKKyNpbmNsdWRlICJ2dmNfaW50 cmEuaCIKKworI2RlZmluZSBQT1MoeCwgeSkgc3JjWyh4KSArIHN0cmlkZSAqICh5KV0KKworc3Rh dGljIGF2X2Fsd2F5c19pbmxpbmUgdm9pZCBGVU5DKGNjbG1fbGluZWFyX3ByZWQpKFZWQ0ZyYW1l Q29udGV4dCAqZmMsIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLAorICAgIGNvbnN0IGludCB3 LCBjb25zdCBpbnQgaCwgY29uc3QgcGl4ZWwqIHBkc3ksIGNvbnN0IGludCAqYSwgY29uc3QgaW50 ICpiLCBjb25zdCBpbnQgKmspCit7CisgICAgY29uc3QgVlZDU1BTICpzcHMgPSBmYy0+cHMuc3Bz OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgVlZDX01BWF9TQU1QTEVfQVJSQVlTIC0gMTsgaSsr KSB7CisgICAgICAgIGNvbnN0IGludCBjX2lkeCA9IGkgKyAxOworICAgICAgICBjb25zdCBpbnQg eCA9IHgwID4+IHNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IHkgPSB5MCA+ PiBzcHMtPnZzaGlmdFtjX2lkeF07CisgICAgICAgIGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUgPSBm Yy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XSAvIHNpemVvZihwaXhlbCk7CisgICAgICAgIHBpeGVs ICpzcmMgPSAocGl4ZWwqKWZjLT5mcmFtZS0+ZGF0YVtjX2lkeF0gKyB4ICsgeSAqIHN0cmlkZTsK KyAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoOyB5KyspIHsKKyAgICAgICAgICAgIGZvciAo aW50IHggPSAwOyB4IDwgdzsgeCsrKSB7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IGRzeSA9 IHBkc3lbeSAqIHcgKyB4XTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgcHJlZCA9ICgoZHN5 ICogYVtpXSkgPj4ga1tpXSkgKyBiW2ldOworICAgICAgICAgICAgICAgIFBPUyh4LCB5KSA9IENM SVAocHJlZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKKyNkZWZpbmUg TUFYX1BJQ0tfUE9TIDQKKyNkZWZpbmUgVE9QICAwCisjZGVmaW5lIExFRlQgMQorCitzdGF0aWMg YXZfYWx3YXlzX2lubGluZSB2b2lkIEZVTkMoY2NsbV9nZXRfcGFyYW1zX2RlZmF1bHQpKGludCAq YSwgaW50ICpiLCBpbnQgKmspCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsK KyAgICAgICAgYVtpXSA9IGtbaV0gPSAwOworICAgICAgICBiW2ldID0gMSA8PCAoQklUX0RFUFRI IC0gMSk7CisgICAgfQorfQorCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBpbnQgRlVOQyhjY2xt X2dldF9zZWxlY3RfcG9zKShjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLAorICAgIGNvbnN0IGlu dCB4LCBjb25zdCBpbnQgeSwgY29uc3QgaW50IHcsIGNvbnN0IGludCBoLCBjb25zdCBpbnQgYXZh aWxfdCwgY29uc3QgaW50IGF2YWlsX2wsCisgICAgaW50IGNudFsyXSwgaW50IHBvc1syXVtNQVhf UElDS19QT1NdKQoreworICAgIGNvbnN0IGVudW0gSW50cmFQcmVkTW9kZSBtb2RlID0gbGMtPmN1 LT5pbnRyYV9wcmVkX21vZGVfYzsKKyAgICBjb25zdCBpbnQgbnVtX2lzNCA9ICFhdmFpbF90IHx8 ICFhdmFpbF9sIHx8IG1vZGUgIT0gSU5UUkFfTFRfQ0NMTTsKKyAgICBpbnQgbnVtX3NhbXBbMl07 CisKKyAgICBpZiAobW9kZSA9PSBJTlRSQV9MVF9DQ0xNKSB7CisgICAgICAgIG51bV9zYW1wW1RP UF0gID0gYXZhaWxfdCA/IHcgOiAwOworICAgICAgICBudW1fc2FtcFtMRUZUXSA9IGF2YWlsX2wg PyBoIDogMDsKKyAgICB9IGVsc2UgeworICAgICAgICBudW1fc2FtcFtUT1BdID0gKGF2YWlsX3Qg JiYgbW9kZSA9PSBJTlRSQV9UX0NDTE0pID8gZmZfdnZjX2dldF90b3BfYXZhaWxhYmxlKGxjLCAg eCwgeSwgdyArIEZGTUlOKHcsIGgpLCAxKSA6IDA7CisgICAgICAgIG51bV9zYW1wW0xFRlRdID0g KGF2YWlsX2wgJiYgbW9kZSA9PSBJTlRSQV9MX0NDTE0pID8gZmZfdnZjX2dldF9sZWZ0X2F2YWls YWJsZShsYywgeCwgeSwgaCArIEZGTUlOKHcsIGgpLCAxKSA6IDA7CisgICAgfQorICAgIGlmICgh bnVtX3NhbXBbVE9QXSAmJiAhbnVtX3NhbXBbTEVGVF0pIHsKKyAgICAgICAgcmV0dXJuIDA7Cisg ICAgfQorICAgIGZvciAoaW50IGkgPSBUT1A7IGkgPD0gTEVGVDsgaSsrKSB7CisgICAgICAgIGNv bnN0IGludCBzdGFydCA9IG51bV9zYW1wW2ldID4+ICgyICsgbnVtX2lzNCk7CisgICAgICAgIGNv bnN0IGludCBzdGVwICA9IEZGTUFYKDEsIG51bV9zYW1wW2ldID4+ICgxICsgbnVtX2lzNCkpIDsK KyAgICAgICAgY250W2ldID0gRkZNSU4obnVtX3NhbXBbaV0sICgxICsgbnVtX2lzNCkgPDwgMSk7 CisgICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgY250W2ldOyBjKyspCisgICAgICAgICAgICBw b3NbaV1bY10gPSBzdGFydCArIGMgKiBzdGVwOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KKwor c3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgdm9pZCBGVU5DKGNjbG1fc2VsZWN0X2x1bWFfNDQ0KShj b25zdCBwaXhlbCAqc3JjLCBjb25zdCBpbnQgc3RlcCwKKyAgICBjb25zdCBpbnQgY250LCBjb25z dCBpbnQgcG9zW01BWF9QSUNLX1BPU10sICBwaXhlbCAqc2VsX2x1bWEpCit7CisgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBjbnQ7IGkrKykKKyAgICAgICAgc2VsX2x1bWFbaV0gPSBzcmNbcG9zW2ld ICogc3RlcF07Cit9CisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHZvaWQgRlVOQyhjY2xtX3Nl bGVjdF9sdW1hKShjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjLAorICAgIGNvbnN0IGludCB4MCwg Y29uc3QgaW50IHkwLCBjb25zdCBpbnQgYXZhaWxfdCwgY29uc3QgaW50IGF2YWlsX2wsIGNvbnN0 IGludCBjbnRbMl0sIGNvbnN0IGludCBwb3NbMl1bTUFYX1BJQ0tfUE9TXSwKKyAgICBwaXhlbCAq c2VsX2x1bWEpCit7CisgICAgY29uc3QgVlZDU1BTICpzcHMgPSBmYy0+cHMuc3BzOworCisgICAg Y29uc3QgaW50IGJfY3R1X2JvdW5kYXJ5ID0gIWF2X21vZF91aW50cDIoeTAsIHNwcy0+Y3RiX2xv ZzJfc2l6ZV95KTsKKyAgICBjb25zdCBpbnQgaHMgPSBzcHMtPmhzaGlmdFsxXTsKKyAgICBjb25z dCBpbnQgdnMgPSBzcHMtPnZzaGlmdFsxXTsKKyAgICBjb25zdCBwdHJkaWZmX3Qgc3RyaWRlID0g ZmMtPmZyYW1lLT5saW5lc2l6ZVswXSAvIHNpemVvZihwaXhlbCk7CisKKyAgICBpZiAoIWhzICYm ICF2cykgeworICAgICAgICBjb25zdCBwaXhlbCogc3JjID0gKHBpeGVsKilmYy0+ZnJhbWUtPmRh dGFbMF0gKyB4MCArIHkwICogc3RyaWRlOworICAgICAgICBGVU5DKGNjbG1fc2VsZWN0X2x1bWFf NDQ0KShzcmMgLSBhdmFpbF90ICogc3RyaWRlLCAxLCBjbnRbVE9QXSwgcG9zW1RPUF0sIHNlbF9s dW1hKTsKKyAgICAgICAgRlVOQyhjY2xtX3NlbGVjdF9sdW1hXzQ0NCkoc3JjIC0gYXZhaWxfbCwg c3RyaWRlLCBjbnRbTEVGVF0sIHBvc1tMRUZUXSwgc2VsX2x1bWEgKyBjbnRbVE9QXSk7CisgICAg fSBlbHNlIHsKKyAgICAgICAgLy8gdG9wCisgICAgICAgIGlmICh2cyAmJiAhYl9jdHVfYm91bmRh cnkpIHsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzb3VyY2UgPSAocGl4ZWwgKilmYy0+ZnJh bWUtPmRhdGFbMF0gKyB4MCArICh5MCAtIDIpICogc3RyaWRlOworICAgICAgICAgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBjbnRbVE9QXTsgaSsrKSB7CisgICAgICAgICAgICAgICAgY29uc3QgaW50 IHggPSBwb3NbVE9QXVtpXSA8PCBoczsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqc3Jj ID0gc291cmNlICsgeDsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgaGFzX2xlZnQgPSB4IHx8 IGF2YWlsX2w7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgbCA9IGhhc19sZWZ0ID8gUE9T KC0xLCAwKSA6IFBPUygwLCAwKTsKKyAgICAgICAgICAgICAgICBpZiAoc3BzLT5yLT5zcHNfY2hy b21hX3ZlcnRpY2FsX2NvbGxvY2F0ZWRfZmxhZykgeworICAgICAgICAgICAgICAgICAgICBzZWxf bHVtYVtpXSA9IChQT1MoMCwgLTEpICsgbCArIDQgKiBQT1MoMCwgMCkgKyBQT1MoMSwgMCkgKyBQ T1MoMCwgMSkgKyA0KSA+PiAzOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHBpeGVsIGwxID0gaGFzX2xlZnQgPyBQT1MoLTEsIDEpIDogUE9TKDAs IDEpOworICAgICAgICAgICAgICAgICAgICBzZWxfbHVtYVtpXSA9IChsICsgbDEgKyAyICogKFBP UygwLCAwKSArIFBPUygwLCAxKSkgKyBQT1MoMSwgMCkgKyBQT1MoMSwgMSkgKyA0KSA+PiAzOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgIGNvbnN0IHBpeGVsICpzb3VyY2UgPSAocGl4ZWwqKWZjLT5mcmFtZS0+ZGF0YVswXSAr IHgwICsgKHkwIC0gMSkgKiBzdHJpZGU7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8 IGNudFtUT1BdOyBpKyspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgeCA9IHBvc1tUT1Bd W2ldIDw8IGhzOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzcmMgPSBzb3VyY2UgKyB4 OworICAgICAgICAgICAgICAgIGNvbnN0IGludCBoYXNfbGVmdCA9IHggfHwgYXZhaWxfbDsKKyAg ICAgICAgICAgICAgICBjb25zdCBwaXhlbCBsID0gaGFzX2xlZnQgPyBQT1MoLTEsIDApIDogUE9T KDAsIDApOworICAgICAgICAgICAgICAgIHNlbF9sdW1hW2ldID0gKGwgKyAyICogUE9TKDAsIDAp ICsgUE9TKDEsIDApICsgMikgPj4gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg ICAgIC8vIGxlZnQKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKmxlZnQ7Cisg ICAgICAgICAgICBjb25zdCBwaXhlbCAqc291cmNlID0gKHBpeGVsICopZmMtPmZyYW1lLT5kYXRh WzBdICsgeDAgKyB5MCAqIHN0cmlkZSAtICgxICsgaHMpICogYXZhaWxfbDsKKyAgICAgICAgICAg IGxlZnQgPSBzb3VyY2UgLSBhdmFpbF9sOworCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg aSA8IGNudFtMRUZUXTsgaSsrKSB7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHkgPSBwb3Nb TEVGVF1baV0gPDwgdnM7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IG9mZnNldCA9IHkgKiBz dHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKmwgICA9IGxlZnQgKyBvZmZzZXQ7 CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnNyYyA9IHNvdXJjZSArIG9mZnNldDsKKyAg ICAgICAgICAgICAgICBwaXhlbCBwcmVkOworICAgICAgICAgICAgICAgIGlmICghdnMpIHsKKyAg ICAgICAgICAgICAgICAgICAgcHJlZCA9ICgqbCArIDIgKiBQT1MoMCwgMCkgKyBQT1MoMSwgMCkg KyAyKSA+PiAyOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg IGlmIChzcHMtPnItPnNwc19jaHJvbWFfdmVydGljYWxfY29sbG9jYXRlZF9mbGFnKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgaGFzX3RvcCA9IHkgfHwgYXZhaWxfdDsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsIHQgPSBoYXNfdG9wID8gUE9TKDAsIC0x KSA6IFBPUygwLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWQgPSAoKmwgKyB0ICsg NCAqIFBPUygwLCAwKSArIFBPUygxLCAwKSArIFBPUygwLCAxKSArIDQpID4+IDM7CisgICAgICAg ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmVkID0gKCps ICsgKihsICsgc3RyaWRlKSArIDIgKiBQT1MoMCwgMCkgKyAyICogUE9TKDAsIDEpICsgUE9TKDEs IDApICsgUE9TKDEsIDEpICsgNCkgPj4gMzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZWxfbHVtYVtpICsgY250W1RPUF1dID0gcHJl ZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGF2X2Fsd2F5 c19pbmxpbmUgdm9pZCBGVU5DKGNjbG1fc2VsZWN0X2Nocm9tYSkoY29uc3QgVlZDRnJhbWVDb250 ZXh0ICpmYywKKyAgICBjb25zdCBpbnQgeCwgY29uc3QgaW50IHksIGNvbnN0IGludCBjbnRbMl0s IGNvbnN0IGludCBwb3NbMl1bTUFYX1BJQ0tfUE9TXSwKKyAgICBwaXhlbCBzZWxbXVtNQVhfUElD S19QT1MgKiAyXSkKK3sKKyAgICBmb3IgKGludCBjX2lkeCA9IDE7IGNfaWR4IDwgVlZDX01BWF9T QU1QTEVfQVJSQVlTOyBjX2lkeCsrKSB7CisgICAgICAgIGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUg PSBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XSAvIHNpemVvZihwaXhlbCk7CisKKyAgICAgICAg Ly90b3AKKyAgICAgICAgY29uc3QgcGl4ZWwgKnNyYyA9IChwaXhlbCopZmMtPmZyYW1lLT5kYXRh W2NfaWR4XSArIHggKyAoeSAtIDEpKiBzdHJpZGU7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgY250W1RPUF07IGkrKykgeworICAgICAgICAgICAgc2VsW2NfaWR4XVtpXSA9IHNyY1twb3Nb VE9QXVtpXV07CisgICAgICAgIH0KKworICAgICAgICAvL2xlZnQKKyAgICAgICAgc3JjID0gKHBp eGVsKilmYy0+ZnJhbWUtPmRhdGFbY19pZHhdICsgeCAtIDEgKyB5ICogc3RyaWRlOworICAgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IGNudFtMRUZUXTsgaSsrKSB7CisgICAgICAgICAgICBzZWxb Y19pZHhdW2kgKyBjbnRbVE9QXV0gPSBzcmNbcG9zW0xFRlRdW2ldICogc3RyaWRlXTsKKyAgICAg ICAgfQorICAgIH0KK30KKworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgaW50IEZVTkMoY2NsbV9z ZWxlY3Rfc2FtcGxlcykoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywKKyAgICBjb25zdCBpbnQg eDAsIGNvbnN0IGludCB5MCwgY29uc3QgaW50IHcsIGNvbnN0IGludCBoLCBjb25zdCBpbnQgYXZh aWxfdCwgY29uc3QgaW50IGF2YWlsX2wsCisgICAgcGl4ZWwgc2VsW11bTUFYX1BJQ0tfUE9TICog Ml0pCit7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYyA9IGxjLT5mYzsKKyAgICBjb25z dCBWVkNTUFMgKnNwcyAgID0gZmMtPnBzLnNwczsKKyAgICBjb25zdCBpbnQgeCAgPSB4MCA+PiBz cHMtPmhzaGlmdFsxXTsKKyAgICBjb25zdCBpbnQgeSAgPSB5MCA+PiBzcHMtPnZzaGlmdFsxXTsK KyAgICBpbnQgY250WzJdLCBwb3NbMl1bTUFYX1BJQ0tfUE9TXTsKKworICAgIGlmICghRlVOQyhj Y2xtX2dldF9zZWxlY3RfcG9zKShsYywgeCwgeSwgdywgaCwgYXZhaWxfdCwgYXZhaWxfbCwgY250 LCBwb3MpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEZVTkMoY2NsbV9zZWxlY3RfbHVtYSko ZmMsIHgwLCB5MCwgYXZhaWxfdCwgYXZhaWxfbCwgY250LCBwb3MsIHNlbFtMVU1BXSk7CisgICAg RlVOQyhjY2xtX3NlbGVjdF9jaHJvbWEpKGZjLCB4LCB5LCBjbnQsIHBvcywgc2VsKTsKKworICAg IGlmIChjbnRbVE9QXSArIGNudFtMRUZUXSA9PSAyKSB7CisgICAgICAgIGZvciAoaW50IGNfaWR4 ID0gMDsgY19pZHggPCBWVkNfTUFYX1NBTVBMRV9BUlJBWVM7IGNfaWR4KyspIHsKKyAgICAgICAg ICAgIHNlbFtjX2lkeF1bM10gPSBzZWxbY19pZHhdWzBdOworICAgICAgICAgICAgc2VsW2NfaWR4 XVsyXSA9IHNlbFtjX2lkeF1bMV07CisgICAgICAgICAgICBzZWxbY19pZHhdWzBdID0gc2VsW2Nf aWR4XVsxXTsKKyAgICAgICAgICAgIHNlbFtjX2lkeF1bMV0gPSBzZWxbY19pZHhdWzNdOworICAg ICAgICB9CisgICAgfQorICAgIHJldHVybiAxOworfQorCitzdGF0aWMgYXZfYWx3YXlzX2lubGlu ZSB2b2lkIEZVTkMoY2NsbV9nZXRfbWluX21heCkoCisgICAgY29uc3QgcGl4ZWwgc2VsW11bTUFY X1BJQ0tfUE9TICogMl0sIGludCAqbWluLCBpbnQgKm1heCkKK3sKKyAgICBpbnQgbWluX2dycF9p ZHhbXSA9IHsgMCwgMiB9OworICAgIGludCBtYXhfZ3JwX2lkeFtdID0geyAxLCAzIH07CisKKyAg ICBpZiAoc2VsW0xVTUFdW21pbl9ncnBfaWR4WzBdXSA+IHNlbFtMVU1BXVttaW5fZ3JwX2lkeFsx XV0pCisgICAgICAgIEZGU1dBUChpbnQsIG1pbl9ncnBfaWR4WzBdLCBtaW5fZ3JwX2lkeFsxXSk7 CisgICAgaWYgKHNlbFtMVU1BXVttYXhfZ3JwX2lkeFswXV0gPiBzZWxbTFVNQV1bbWF4X2dycF9p ZHhbMV1dKQorICAgICAgICBGRlNXQVAoaW50LCBtYXhfZ3JwX2lkeFswXSwgbWF4X2dycF9pZHhb MV0pOworICAgIGlmIChzZWxbTFVNQV1bbWluX2dycF9pZHhbMF1dID4gc2VsW0xVTUFdW21heF9n cnBfaWR4WzFdXSkgeworICAgICAgICBGRlNXQVAoaW50LCBtaW5fZ3JwX2lkeFswXSwgbWF4X2dy cF9pZHhbMF0pOworICAgICAgICBGRlNXQVAoaW50LCBtaW5fZ3JwX2lkeFsxXSwgbWF4X2dycF9p ZHhbMV0pOworICAgIH0KKyAgICBpZiAoc2VsW0xVTUFdW21pbl9ncnBfaWR4WzFdXSA+IHNlbFtM VU1BXVttYXhfZ3JwX2lkeFswXV0pCisgICAgICAgIEZGU1dBUChpbnQsIG1pbl9ncnBfaWR4WzFd LCBtYXhfZ3JwX2lkeFswXSk7CisgICAgZm9yIChpbnQgY19pZHggPSAwOyBjX2lkeCA8IFZWQ19N QVhfU0FNUExFX0FSUkFZUzsgY19pZHgrKykgeworICAgICAgICBtYXhbY19pZHhdID0gKHNlbFtj X2lkeF1bbWF4X2dycF9pZHhbMF1dICsgc2VsW2NfaWR4XVttYXhfZ3JwX2lkeFsxXV0gKyAxKSA+ PiAxOworICAgICAgICBtaW5bY19pZHhdID0gKHNlbFtjX2lkeF1bbWluX2dycF9pZHhbMF1dICsg c2VsW2NfaWR4XVttaW5fZ3JwX2lkeFsxXV0gKyAxKSA+PiAxOworICAgIH0KK30KKworc3RhdGlj IGF2X2Fsd2F5c19pbmxpbmUgdm9pZCBGVU5DKGNjbG1fZ2V0X3BhcmFtcykoY29uc3QgVlZDTG9j YWxDb250ZXh0ICpsYywKKyAgICBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCwgY29uc3QgaW50 IHcsIGNvbnN0IGludCBoLCBjb25zdCBpbnQgYXZhaWxfdCwgY29uc3QgaW50IGF2YWlsX2wsCisg ICAgaW50ICphLCBpbnQgKmIsIGludCAqaykKK3sKKyAgICBwaXhlbCBzZWxbVlZDX01BWF9TQU1Q TEVfQVJSQVlTXVtNQVhfUElDS19QT1MgKiAyXTsKKyAgICBpbnQgbWF4W1ZWQ19NQVhfU0FNUExF X0FSUkFZU10sIG1pbltWVkNfTUFYX1NBTVBMRV9BUlJBWVNdOworICAgIGludCBkaWZmOworCisg ICAgaWYgKCFGVU5DKGNjbG1fc2VsZWN0X3NhbXBsZXMpKGxjLCB4MCwgeTAsIHcsIGgsIGF2YWls X3QsIGF2YWlsX2wsIHNlbCkpIHsKKyAgICAgICAgRlVOQyhjY2xtX2dldF9wYXJhbXNfZGVmYXVs dCkoYSwgYiwgayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGVU5DKGNjbG1fZ2V0 X21pbl9tYXgpKHNlbCwgbWluLCBtYXgpOworCisgICAgZGlmZiA9IG1heFtMVU1BXSAtIG1pbltM VU1BXTsKKyAgICBpZiAoZGlmZiA9PSAwKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg MjsgaSsrKSB7CisgICAgICAgICAgICBhW2ldID0ga1tpXSA9IDA7CisgICAgICAgICAgICBiW2ld ID0gbWluW2kgKyAxXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAgIGNvbnN0IHN0YXRpYyBpbnQgZGl2 X3NpZ190YWJsZVtdID0gezAsIDcsIDYsIDUsIDUsIDQsIDQsIDMsIDMsIDIsIDIsIDEsIDEsIDEs IDEsIDB9OworICAgICAgICBjb25zdCBpbnQgZGlmZmMgPSBtYXhbaSArIDFdIC0gbWluW2kgKyAx XTsKKyAgICAgICAgaW50ICB4ID0gYXZfbG9nMihkaWZmKTsKKyAgICAgICAgaW50ICB5LCB2LCBz aWduLCBhZGQ7CisgICAgICAgIGNvbnN0IGludCBub3JtX2RpZmYgPSAoKGRpZmYgPDwgNCkgPj4g eCkgJiAxNTsKKyAgICAgICAgeCArPSAobm9ybV9kaWZmKSA/IDEgOiAwOworICAgICAgICB5ID0g YWJzKGRpZmZjKSA+IDAgPyBhdl9sb2cyKGFicyhkaWZmYykpICsgMSA6IDA7CisgICAgICAgIHYg PSBkaXZfc2lnX3RhYmxlW25vcm1fZGlmZl0gfCA4OworICAgICAgICBhZGQgPSAoMSA8PCB5ID4+ IDEpOworICAgICAgICBhW2ldID0gKGRpZmZjICogdiArIGFkZCkgPj4geTsKKyAgICAgICAga1tp XSA9IEZGTUFYKDEsIDMgKyB4IC15KTsKKyAgICAgICAgc2lnbiA9IGFbaV0gPCAwID8gLTEgOiAo YVtpXSA+IDApOworICAgICAgICBhW2ldID0gKCgzICsgeCAtIHkpIDwgMSkgPyAgc2lnbiAqIDE1 IDogYVtpXTsKKyAgICAgICAgYltpXSA9IG1pbltpICsgMV0gLSAoKGFbaV0gKiBtaW5bMF0pID4+ IGtbaV0pOworICAgIH0KKworfQorCisjdW5kZWYgVE9QCisjdW5kZWYgTEVGVAorCitzdGF0aWMg YXZfYWx3YXlzX2lubGluZSB2b2lkIEZVTkMoY2NsbV9nZXRfbHVtYV9yZWNfcGl4ZWxzKShjb25z dCBWVkNGcmFtZUNvbnRleHQgKmZjLAorICAgIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLCBj b25zdCBpbnQgdywgY29uc3QgaW50IGgsIGNvbnN0IGludCBhdmFpbF90LCBjb25zdCBpbnQgYXZh aWxfbCwKKyAgICBwaXhlbCAqcGRzeSkKK3sKKyAgICBjb25zdCBpbnQgaHMgICAgICAgICAgICA9 IGZjLT5wcy5zcHMtPmhzaGlmdFsxXTsKKyAgICBjb25zdCBpbnQgdnMgICAgICAgICAgICA9IGZj LT5wcy5zcHMtPnZzaGlmdFsxXTsKKyAgICBjb25zdCBwdHJkaWZmX3Qgc3RyaWRlICA9IGZjLT5m cmFtZS0+bGluZXNpemVbMF0gLyBzaXplb2YocGl4ZWwpOworICAgIGNvbnN0IHBpeGVsICpzb3Vy Y2UgICAgID0gKHBpeGVsKilmYy0+ZnJhbWUtPmRhdGFbMF0gKyB4MCArIHkwICogc3RyaWRlOwor ICAgIGNvbnN0IHBpeGVsICpsZWZ0ICAgICAgID0gc291cmNlIC0gYXZhaWxfbDsKKyAgICBjb25z dCBwaXhlbCAqdG9wICAgICAgICA9IHNvdXJjZSAtIGF2YWlsX3QgKiBzdHJpZGU7CisKKyAgICBj b25zdCBWVkNTUFMgKnNwcyA9IGZjLT5wcy5zcHM7CisgICAgaWYgKCFocyAmJiAhdnMpIHsKKyAg ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoOyBpKyspCisgICAgICAgICAgICBtZW1jcHkocGRz eSArIGkgKiB3LCBzb3VyY2UgKyBpICogc3RyaWRlLCB3ICogc2l6ZW9mKHBpeGVsKSk7CisgICAg ICAgIHJldHVybjsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoOyBpKyspIHsKKyAg ICAgICAgY29uc3QgcGl4ZWwgKnNyYyAgPSBzb3VyY2U7CisgICAgICAgIGNvbnN0IHBpeGVsICps ID0gbGVmdDsKKyAgICAgICAgY29uc3QgcGl4ZWwgKnQgPSB0b3A7CisgICAgICAgIGlmICghdnMp IHsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdzsgaisrKSB7CisgICAgICAgICAg ICAgICAgcGl4ZWwgcHJlZCAgPSAoKmwgKyAyICogUE9TKDAsIDApICsgUE9TKDEsIDApICsgMikg Pj4gMjsKKyAgICAgICAgICAgICAgICBwZHN5W2kgKiB3ICsgal0gPSBwcmVkOworICAgICAgICAg ICAgICAgIHNyYyArPSAyOworICAgICAgICAgICAgICAgIGwgPSBzcmMgLSAxOworICAgICAgICAg ICAgfQorCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoc3BzLT5yLT5zcHNfY2hy b21hX3ZlcnRpY2FsX2NvbGxvY2F0ZWRfZmxhZykgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGlu dCBqID0gMDsgaiA8IHc7IGorKykgeworICAgICAgICAgICAgICAgICAgICBwaXhlbCBwcmVkICA9 ICgqbCArICp0ICsgNCAqIFBPUygwLCAwKSArIFBPUygxLCAwKSArIFBPUygwLCAxKSArIDQpID4+ IDM7CisgICAgICAgICAgICAgICAgICAgIHBkc3lbaSAqIHcgKyBqXSA9IHByZWQ7CisgICAgICAg ICAgICAgICAgICAgIHNyYyArPSAyOworICAgICAgICAgICAgICAgICAgICB0ICs9IDI7CisgICAg ICAgICAgICAgICAgICAgIGwgPSBzcmMgLSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB3OyBqKysp IHsKKyAgICAgICAgICAgICAgICAgICAgcGl4ZWwgcHJlZCAgPSAoKmwgKyAqKGwgKyBzdHJpZGUp ICsgMiAqIFBPUygwLCAwKSArIDIgKiBQT1MoMCwgMSkgKyBQT1MoMSwgMCkgKyBQT1MoMSwgMSkg KyA0KSA+PiAzOworCisgICAgICAgICAgICAgICAgICAgIHBkc3lbaSAqIHcgKyBqXSA9IHByZWQ7 CisgICAgICAgICAgICAgICAgICAgIHNyYyArPSAyOworICAgICAgICAgICAgICAgICAgICBsID0g c3JjIC0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICAgICAgc291cmNlICs9IChzdHJpZGUgPDwgdnMpOworICAgICAgICBsZWZ0ICAgKz0gKHN0cmlk ZSA8PCB2cyk7CisgICAgICAgIHRvcCAgICA9IHNvdXJjZSAtIHN0cmlkZTsKKyAgICB9Cit9CisK K3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHZvaWQgRlVOQyhjY2xtX3ByZWRfZGVmYXVsdCkoVlZD RnJhbWVDb250ZXh0ICpmYywKKyAgICBjb25zdCBpbnQgeCwgY29uc3QgaW50IHksIGNvbnN0IGlu dCB3LCBjb25zdCBpbnQgaCwgY29uc3QgaW50IGF2YWlsX3QsIGNvbnN0IGludCBhdmFpbF9sKQor eworICAgIGZvciAoaW50IGNfaWR4ID0gMTsgY19pZHggPCBWVkNfTUFYX1NBTVBMRV9BUlJBWVM7 IGNfaWR4KyspIHsKKyAgICAgICAgY29uc3QgcHRyZGlmZl90IHN0cmlkZSA9IGZjLT5mcmFtZS0+ bGluZXNpemVbY19pZHhdIC8gc2l6ZW9mKHBpeGVsKTsKKyAgICAgICAgcGl4ZWwgKmRzdCA9IChw aXhlbCopZmMtPmZyYW1lLT5kYXRhW2NfaWR4XSArIHggKyB5ICogc3RyaWRlOworICAgICAgICBm b3IgKGludCBpID0gMDsgaSA8IGg7IGkrKykgeworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7 IGogPCB3OyBqKyspIHsKKyAgICAgICAgICAgICAgICBkc3Rbal0gPSAxIDw8IChCSVRfREVQVEgg LSAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRzdCArPSBzdHJpZGU7CisgICAgICAg IH0KKyAgICB9Cit9CisKKy8vOC40LjUuMi4xNCBTcGVjaWZpY2F0aW9uIG9mIElOVFJBX0xUX0ND TE0sIElOVFJBX0xfQ0NMTSBhbmQgSU5UUkFfVF9DQ0xNIGludHJhIHByZWRpY3Rpb24gbW9kZQor c3RhdGljIHZvaWQgRlVOQyhpbnRyYV9jY2xtX3ByZWQpKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAq bGMsIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLAorICAgIGNvbnN0IGludCB3aWR0aCwgY29u c3QgaW50IGhlaWdodCkKK3sKKyAgICBWVkNGcmFtZUNvbnRleHQgKmZjICAgICA9IGxjLT5mYzsK KyAgICBjb25zdCBWVkNTUFMgKnNwcyA9IGZjLT5wcy5zcHM7CisgICAgY29uc3QgaW50IGF2YWls X3QgPSBmZl92dmNfZ2V0X3RvcF9hdmFpbGFibGUobGMsIHgwLCB5MCwgMSwgMCk7CisgICAgY29u c3QgaW50IGF2YWlsX2wgPSBmZl92dmNfZ2V0X2xlZnRfYXZhaWxhYmxlKGxjLCB4MCwgeTAsIDEs IDApOworICAgIGNvbnN0IGludCBocyA9IHNwcy0+aHNoaWZ0WzFdOworICAgIGNvbnN0IGludCB2 cyA9IHNwcy0+dnNoaWZ0WzFdOworICAgIGNvbnN0IGludCB4ICA9IHgwID4+IGhzOworICAgIGNv bnN0IGludCB5ICA9IHkwID4+IHZzOworICAgIGNvbnN0IGludCB3ICA9IHdpZHRoID4+IGhzOwor ICAgIGNvbnN0IGludCBoICA9IGhlaWdodCA+PiB2czsKKyAgICBpbnQgYVsyXSwgYlsyXSwga1sy XTsKKworICAgIHBpeGVsIGRzeVtNQVhfVEJfU0laRSAqIE1BWF9UQl9TSVpFXTsKKyAgICBpZiAo IWF2YWlsX3QgJiYgIWF2YWlsX2wpIHsKKyAgICAgICAgRlVOQyhjY2xtX3ByZWRfZGVmYXVsdCko ZmMsIHgsIHksIHcsIGgsIGF2YWlsX3QsIGF2YWlsX2wpOworICAgICAgICByZXR1cm47CisgICAg fQorICAgIEZVTkMoY2NsbV9nZXRfbHVtYV9yZWNfcGl4ZWxzKShmYywgeDAsIHkwLCB3LCBoLCBh dmFpbF90LCBhdmFpbF9sLCBkc3kpOworICAgIEZVTkMoY2NsbV9nZXRfcGFyYW1zKSAobGMsIHgw LCB5MCwgdywgaCwgYXZhaWxfdCwgYXZhaWxfbCwgYSwgYiwgayk7CisgICAgRlVOQyhjY2xtX2xp bmVhcl9wcmVkKShmYywgeDAsIHkwLCB3LCBoLCBkc3ksIGEsIGIsIGspOworfQorCitzdGF0aWMg aW50IEZVTkMobG1jc19zdW1fc2FtcGxlcykoY29uc3QgcGl4ZWwgKnN0YXJ0LCBwdHJkaWZmX3Qg c3RyaWRlLCBjb25zdCBpbnQgYXZhaWwsIGNvbnN0IGludCB0YXJnZXRfc2l6ZSkKK3sKKyAgICBj b25zdCBpbnQgc2l6ZSA9IEZGTUlOKGF2YWlsLCB0YXJnZXRfc2l6ZSk7CisgICAgaW50IHN1bSA9 IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgc3VtICs9 ICpzdGFydDsKKyAgICAgICAgc3RhcnQgKz0gc3RyaWRlOworICAgIH0KKyAgICBzdW0gKz0gKihz dGFydCAtIHN0cmlkZSkgKiAodGFyZ2V0X3NpemUgLSBzaXplKTsKKyAgICByZXR1cm4gc3VtOwor fQorCisvLyA4LjcuNS4zIFBpY3R1cmUgcmVjb25zdHJ1Y3Rpb24gd2l0aCBsdW1hIGRlcGVuZGVu dCBjaHJvbWEgcmVzaWR1YWwgc2NhbGluZyBwcm9jZXNzIGZvciBjaHJvbWEgc2FtcGxlcworc3Rh dGljIGludCBGVU5DKGxtY3NfZGVyaXZlX2Nocm9tYV9zY2FsZSkoVlZDTG9jYWxDb250ZXh0ICps YywgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTApCit7CisgICAgVlZDRnJhbWVDb250ZXh0ICpm YyA9IGxjLT5mYzsKKyAgICBjb25zdCBWVkNMTUNTICpsbWNzID0gJmZjLT5wcy5sbWNzOworICAg IGNvbnN0IGludCBzaXplX3kgICAgPSBGRk1JTihmYy0+cHMuc3BzLT5jdGJfc2l6ZV95LCA2NCk7 CisKKyAgICBjb25zdCBpbnQgeCA9IHgwICYgfihzaXplX3kgLSAxKTsKKyAgICBjb25zdCBpbnQg eSA9IHkwICYgfihzaXplX3kgLSAxKTsKKyAgICBpZiAobGMtPmxtY3MueF92cGR1ICE9IHggfHwg bGMtPmxtY3MueV92cGR1ICE9IHkpIHsKKyAgICAgICAgaW50IGNudCA9IDAsIGx1bWEgPSAwLCBp OworICAgICAgICBjb25zdCBwaXhlbCAqc3JjID0gKGNvbnN0IHBpeGVsICopKGZjLT5mcmFtZS0+ ZGF0YVtMVU1BXSArIHkgKiBmYy0+ZnJhbWUtPmxpbmVzaXplW0xVTUFdICsgKHggPDwgZmMtPnBz LnNwcy0+cGl4ZWxfc2hpZnQpKTsKKyAgICAgICAgY29uc3QgcHRyZGlmZl90IHN0cmlkZSA9IGZj LT5mcmFtZS0+bGluZXNpemVbTFVNQV0gLyBzaXplb2YocGl4ZWwpOworICAgICAgICBjb25zdCBp bnQgYXZhaWxfdCA9IGZmX3Z2Y19nZXRfdG9wX2F2YWlsYWJsZSAobGMsIHgsIHksIDEsIDApOwor ICAgICAgICBjb25zdCBpbnQgYXZhaWxfbCA9IGZmX3Z2Y19nZXRfbGVmdF9hdmFpbGFibGUobGMs IHgsIHksIDEsIDApOworICAgICAgICBpZiAoYXZhaWxfbCkgeworICAgICAgICAgICAgbHVtYSAr PSBGVU5DKGxtY3Nfc3VtX3NhbXBsZXMpKHNyYyAtIDEsIHN0cmlkZSwgZmMtPnBzLnBwcy0+aGVp Z2h0IC0geSwgc2l6ZV95KTsKKyAgICAgICAgICAgIGNudCA9IHNpemVfeTsKKyAgICAgICAgfQor ICAgICAgICBpZiAoYXZhaWxfdCkgeworICAgICAgICAgICAgbHVtYSArPSBGVU5DKGxtY3Nfc3Vt X3NhbXBsZXMpKHNyYyAtIHN0cmlkZSwgMSwgZmMtPnBzLnBwcy0+d2lkdGggLSB4LCBzaXplX3kp OworICAgICAgICAgICAgY250ICs9IHNpemVfeTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY250 KQorICAgICAgICAgICAgbHVtYSA9IChsdW1hICsgKGNudCA+PiAxKSkgPj4gYXZfbG9nMihjbnQp OworICAgICAgICBlbHNlCisgICAgICAgICAgICBsdW1hID0gMSA8PCAoQklUX0RFUFRIIC0gMSk7 CisKKyAgICAgICAgZm9yIChpID0gbG1jcy0+bWluX2Jpbl9pZHg7IGkgPD0gbG1jcy0+bWF4X2Jp bl9pZHg7IGkrKykgeworICAgICAgICAgICAgaWYgKGx1bWEgPCBsbWNzLT5waXZvdFtpICsgMV0p CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaSA9IEZGTUlOKGks IExNQ1NfTUFYX0JJTl9TSVpFIC0gMSk7CisKKyAgICAgICAgbGMtPmxtY3MuY2hyb21hX3NjYWxl ID0gbG1jcy0+Y2hyb21hX3NjYWxlX2NvZWZmW2ldOworICAgICAgICBsYy0+bG1jcy54X3ZwZHUg PSB4OworICAgICAgICBsYy0+bG1jcy55X3ZwZHUgPSB5OworICAgIH0KKyAgICByZXR1cm4gbGMt PmxtY3MuY2hyb21hX3NjYWxlOworfQorCisvLyA4LjcuNS4zIFBpY3R1cmUgcmVjb25zdHJ1Y3Rp b24gd2l0aCBsdW1hIGRlcGVuZGVudCBjaHJvbWEgcmVzaWR1YWwgc2NhbGluZyBwcm9jZXNzIGZv ciBjaHJvbWEgc2FtcGxlcworc3RhdGljIHZvaWQgRlVOQyhsbWNzX3NjYWxlX2Nocm9tYSkoVlZD TG9jYWxDb250ZXh0ICpsYywgaW50ICpkc3QsIGNvbnN0IGludCAqY29lZmYsCisgICAgY29uc3Qg aW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0LCBjb25zdCBpbnQgeDBfY3UsIGNvbnN0IGludCB5 MF9jdSkKK3sKKyAgICBjb25zdCBpbnQgY2hyb21hX3NjYWxlID0gRlVOQyhsbWNzX2Rlcml2ZV9j aHJvbWFfc2NhbGUpKGxjLCB4MF9jdSwgeTBfY3UpOworCisgICAgZm9yIChpbnQgeSA9IDA7IHkg PCBoZWlnaHQ7IHkrKykgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp IHsKKyAgICAgICAgICAgIGNvbnN0IGludCBjID0gYXZfY2xpcF9pbnRwMigqY29lZmYsIEJJVF9E RVBUSCk7CisKKyAgICAgICAgICAgIGlmIChjID4gMCkKKyAgICAgICAgICAgICAgICAqZHN0ID0g KGMgKiBjaHJvbWFfc2NhbGUgKyAoMSA8PCAxMCkpID4+IDExOworICAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICAgICpkc3QgPSAtKCgtYyAqIGNocm9tYV9zY2FsZSArICgxIDw8IDEwKSkg Pj4gMTEpOworICAgICAgICAgICAgY29lZmYrKzsKKyAgICAgICAgICAgIGRzdCsrOworICAgICAg ICB9CisgICAgfQorfQorCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB2b2lkIEZVTkMocmVmX2Zp bHRlcikoY29uc3QgcGl4ZWwgKmxlZnQsIGNvbnN0IHBpeGVsICp0b3AsCisgICAgcGl4ZWwgKmZp bHRlcmVkX2xlZnQsIHBpeGVsICpmaWx0ZXJlZF90b3AsIGNvbnN0IGludCBsZWZ0X3NpemUsIGNv bnN0IGludCB0b3Bfc2l6ZSwKKyAgICBjb25zdCBpbnQgdW5maWx0ZXJfbGFzdF9vbmUpCit7Cisg ICAgZmlsdGVyZWRfbGVmdFstMV0gPSBmaWx0ZXJlZF90b3BbLTFdID0gKGxlZnRbMF0gKyAgMiAq IGxlZnRbLTFdICsgdG9wWzBdICsgMiApID4+IDI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBs ZWZ0X3NpemUgLSB1bmZpbHRlcl9sYXN0X29uZTsgaSsrKSB7CisgICAgICAgIGZpbHRlcmVkX2xl ZnRbaV0gPSAobGVmdFtpLSAxXSArIDIgKiBsZWZ0W2ldICsgbGVmdFtpICsgMV0gKyAyKSA+PiAy OworICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvcF9zaXplIC0gdW5maWx0ZXJfbGFz dF9vbmU7IGkrKykgeworICAgICAgICBmaWx0ZXJlZF90b3BbaV0gPSAodG9wW2ktMV0gKyAyICog dG9wW2ldICsgdG9wW2kgKyAxXSArIDIpID4+IDI7CisgICAgfQorICAgIGlmICh1bmZpbHRlcl9s YXN0X29uZSkgeworICAgICAgICBmaWx0ZXJlZF90b3BbdG9wX3NpemUgLSAxXSA9IHRvcFt0b3Bf c2l6ZSAtIDFdOworICAgICAgICBmaWx0ZXJlZF9sZWZ0W2xlZnRfc2l6ZSAtIDFdID0gbGVmdFts ZWZ0X3NpemUgLSAxXTsKKyAgICB9Cit9CisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHZvaWQg RlVOQyhwcmVwYXJlX2ludHJhX2VkZ2VfcGFyYW1zKShjb25zdCBWVkNMb2NhbENvbnRleHQgKmxj LAorICAgIEludHJhRWRnZVBhcmFtcyogZWRnZSwgY29uc3QgcGl4ZWwgKnNyYywgY29uc3QgcHRy ZGlmZl90IHN0cmlkZSwKKyAgICBjb25zdCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgaW50 IGNfaWR4LCBjb25zdCBpbnQgaXNfaW50cmFfbWlwLAorICAgIGNvbnN0IGludCBtb2RlLCBjb25z dCBpbnQgcmVmX2lkeCwgY29uc3QgaW50IG5lZWRfcGRwYykKK3sKKyNkZWZpbmUgRVhURU5EKHB0 ciwgdmFsLCBsZW4pICAgICAgICAgXAorZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgZm9yIChpID0gMDsgaSA8IChsZW4pOyBpKyspICAgICAgIFwKKyAgICAgICAg KihwdHIgKyBpKSA9IHZhbDsgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKyAgICBjb25zdCBD b2RpbmdVbml0ICpjdSA9IGxjLT5jdTsKKyAgICBjb25zdCBpbnQgcmVmX2ZpbHRlcl9mbGFnID0g aXNfaW50cmFfbWlwID8gMCA6IGZmX3Z2Y19yZWZfZmlsdGVyX2ZsYWdfZGVyaXZlKG1vZGUpOwor ICAgIGNvbnN0IGludCBmaWx0ZXJfZmxhZyA9ICFyZWZfaWR4ICYmIHcgKiBoID4gMzIgJiYgIWNf aWR4ICYmCisgICAgICAgIGN1LT5pc3Bfc3BsaXRfdHlwZSA9PSBJU1BfTk9fU1BMSVQgJiYgcmVm X2ZpbHRlcl9mbGFnOworICAgIGludCBjYW5kX3VwX2xlZnQgICAgICA9IGxjLT5uYS5jYW5kX3Vw X2xlZnQ7CisgICAgcGl4ZWwgICpsZWZ0ICAgICAgICAgID0gKHBpeGVsKillZGdlLT5sZWZ0X2Fy cmF5ICsgTUFYX1RCX1NJWkUgKyAzOworICAgIHBpeGVsICAqdG9wICAgICAgICAgICA9IChwaXhl bCopZWRnZS0+dG9wX2FycmF5ICArIE1BWF9UQl9TSVpFICsgMzsKKyAgICBwaXhlbCAgKmZpbHRl cmVkX2xlZnQgPSAocGl4ZWwqKWVkZ2UtPmZpbHRlcmVkX2xlZnRfYXJyYXkgKyBNQVhfVEJfU0la RSArIDM7CisgICAgcGl4ZWwgICpmaWx0ZXJlZF90b3AgID0gKHBpeGVsKillZGdlLT5maWx0ZXJl ZF90b3BfYXJyYXkgICsgTUFYX1RCX1NJWkUgKyAzOworICAgIGNvbnN0IGludCByZWZfbGluZSA9 IHJlZl9pZHggPT0gMyA/IC00IDogKC0xIC0gcmVmX2lkeCk7CisgICAgaW50IGxlZnRfc2l6ZSwg dG9wX3NpemUsIHVuZmlsdGVyX2xlZnRfc2l6ZSwgdW5maWx0ZXJfdG9wX3NpemU7CisgICAgaW50 IGxlZnRfYXZhaWxhYmxlLCB0b3BfYXZhaWxhYmxlOworICAgIGludCByZWZ3LCByZWZoOworICAg IGludCBpbnRyYV9wcmVkX2FuZ2xlLCBpbnZfYW5nbGU7CisgICAgaW50IGk7CisKKyAgICBpZiAo aXNfaW50cmFfbWlwIHx8IG1vZGUgPT0gSU5UUkFfUExBTkFSKSB7CisgICAgICAgIGxlZnRfc2l6 ZSA9IGggKyAxOworICAgICAgICB0b3Bfc2l6ZSAgPSB3ICsgMTsKKyAgICAgICAgdW5maWx0ZXJf bGVmdF9zaXplID0gbGVmdF9zaXplICsgZmlsdGVyX2ZsYWc7CisgICAgICAgIHVuZmlsdGVyX3Rv cF9zaXplICA9IHRvcF9zaXplICArIGZpbHRlcl9mbGFnOworICAgIH0gZWxzZSBpZiAobW9kZSA9 PSBJTlRSQV9EQykgeworICAgICAgICB1bmZpbHRlcl9sZWZ0X3NpemUgPSBsZWZ0X3NpemUgPSBo OworICAgICAgICB1bmZpbHRlcl90b3Bfc2l6ZSA9IHRvcF9zaXplICA9IHc7CisgICAgfSBlbHNl IGlmIChtb2RlID09IElOVFJBX1ZFUlQpIHsKKyAgICAgICAgLy93ZSBtYXkgbmVlZCAxIHBpeGVs IHRvIHByZWRpY3QgdGhlIHRvcCBsZWZ0LgorICAgICAgICB1bmZpbHRlcl9sZWZ0X3NpemUgPSBs ZWZ0X3NpemUgPSBuZWVkX3BkcGMgPyBoIDogMTsKKyAgICAgICAgdW5maWx0ZXJfdG9wX3NpemUg PSB0b3Bfc2l6ZSAgPSB3OworICAgIH0gZWxzZSBpZiAobW9kZSA9PSBJTlRSQV9IT1JaKSB7Cisg ICAgICAgIHVuZmlsdGVyX2xlZnRfc2l6ZSA9IGxlZnRfc2l6ZSA9IGg7CisgICAgICAgIC8vZXZl biBuZWVkX3BkcGMgPT0gMCwgd2UgbWF5IG5lZWQgMSBwaXhlbCB0byBwcmVkaWN0IHRoZSB0b3Ag bGVmdC4KKyAgICAgICAgdW5maWx0ZXJfdG9wX3NpemUgPSB0b3Bfc2l6ZSA9IG5lZWRfcGRwYyA/ IHcgOiAxOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChjdS0+aXNwX3NwbGl0X3R5cGUgPT0g SVNQX05PX1NQTElUIHx8IGNfaWR4KSB7CisgICAgICAgICAgICByZWZ3ID0gdyAqIDI7CisgICAg ICAgICAgICByZWZoID0gaCAqIDI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZWZ3 ID0gY3UtPmNiX3dpZHRoICsgdzsKKyAgICAgICAgICAgIHJlZmggPSBjdS0+Y2JfaGVpZ2h0ICsg aDsKKyAgICAgICAgfQorICAgICAgICBpbnRyYV9wcmVkX2FuZ2xlID0gZmZfdnZjX2ludHJhX3By ZWRfYW5nbGVfZGVyaXZlKG1vZGUpOworICAgICAgICBpbnZfYW5nbGUgPSBmZl92dmNfaW50cmFf aW52X2FuZ2xlX2Rlcml2ZShpbnRyYV9wcmVkX2FuZ2xlKTsKKyAgICAgICAgdW5maWx0ZXJfdG9w X3NpemUgPSB0b3Bfc2l6ZSAgPSByZWZ3OworICAgICAgICB1bmZpbHRlcl9sZWZ0X3NpemUgPSBs ZWZ0X3NpemUgPSByZWZoOworICAgIH0KKworICAgIGxlZnRfYXZhaWxhYmxlID0gZmZfdnZjX2dl dF9sZWZ0X2F2YWlsYWJsZShsYywgeCwgeSwgdW5maWx0ZXJfbGVmdF9zaXplLCBjX2lkeCk7Cisg ICAgZm9yIChpID0gMDsgaSA8IGxlZnRfYXZhaWxhYmxlOyBpKyspCisgICAgICAgIGxlZnRbaV0g PSBQT1MocmVmX2xpbmUsIGkpOworCisgICAgdG9wX2F2YWlsYWJsZSA9IGZmX3Z2Y19nZXRfdG9w X2F2YWlsYWJsZShsYywgeCwgeSwgdW5maWx0ZXJfdG9wX3NpemUsIGNfaWR4KTsKKyAgICBtZW1j cHkodG9wLCBzcmMgKyByZWZfbGluZSAqIHN0cmlkZSwgdG9wX2F2YWlsYWJsZSAqIHNpemVvZihw aXhlbCkpOworCisgICAgZm9yIChpbnQgaSA9IC0xOyBpID49IHJlZl9saW5lOyBpLS0pIHsKKyAg ICAgICAgaWYgKGNhbmRfdXBfbGVmdCkgeworICAgICAgICAgICAgbGVmdFtpXSA9IFBPUyhyZWZf bGluZSwgaSk7CisgICAgICAgICAgICB0b3BbaV0gID0gUE9TKGksIHJlZl9saW5lKTsKKyAgICAg ICAgfSBlbHNlIGlmIChsZWZ0X2F2YWlsYWJsZSkgeworICAgICAgICAgICAgbGVmdFtpXSA9IHRv cFtpXSA9IGxlZnRbMF07CisgICAgICAgIH0gZWxzZSBpZiAodG9wX2F2YWlsYWJsZSkgeworICAg ICAgICAgICAgbGVmdFtpXSA9IHRvcFtpXSA9IHRvcFswXTsKKyAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgIGxlZnRbaV0gPSB0b3BbaV0gPSAxIDw8IChCSVRfREVQVEggLSAxKTsKKyAgICAg ICAgfQorICAgIH0KKworICAgIEVYVEVORCh0b3AgKyB0b3BfYXZhaWxhYmxlLCB0b3BbdG9wX2F2 YWlsYWJsZS0xXSwgdW5maWx0ZXJfdG9wX3NpemUgLSB0b3BfYXZhaWxhYmxlKTsKKyAgICBFWFRF TkQobGVmdCArIGxlZnRfYXZhaWxhYmxlLCBsZWZ0W2xlZnRfYXZhaWxhYmxlLTFdLCB1bmZpbHRl cl9sZWZ0X3NpemUgLSBsZWZ0X2F2YWlsYWJsZSk7CisKKyAgICBpZiAocmVmX2ZpbHRlcl9mbGFn KSB7CisgICAgICAgIGlmICghcmVmX2lkeCAmJiB3ICogaCA+IDMyICYmICFjX2lkeCAmJiBjdS0+ aXNwX3NwbGl0X3R5cGUgPT0gSVNQX05PX1NQTElUICkgeworICAgICAgICAgICAgY29uc3QgaW50 IHVuZmlsdGVyX2xhc3Rfb25lID0gbGVmdF9zaXplID09IHVuZmlsdGVyX2xlZnRfc2l6ZTsKKyAg ICAgICAgICAgIEZVTkMocmVmX2ZpbHRlcikobGVmdCwgdG9wLCBmaWx0ZXJlZF9sZWZ0LCBmaWx0 ZXJlZF90b3AsIHVuZmlsdGVyX2xlZnRfc2l6ZSwgdW5maWx0ZXJfdG9wX3NpemUsIHVuZmlsdGVy X2xhc3Rfb25lKTsKKyAgICAgICAgICAgIGxlZnQgPSBmaWx0ZXJlZF9sZWZ0OworICAgICAgICAg ICAgdG9wICA9IGZpbHRlcmVkX3RvcDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWlzX2lu dHJhX21pcCAmJiBtb2RlICE9IElOVFJBX1BMQU5BUiAmJiBtb2RlICE9IElOVFJBX0RDKSB7Cisg ICAgICAgIGlmIChyZWZfZmlsdGVyX2ZsYWcgfHwgcmVmX2lkeCB8fCBjdS0+aXNwX3NwbGl0X3R5 cGUgIT0gSVNQX05PX1NQTElUKSB7CisgICAgICAgICAgICBlZGdlLT5maWx0ZXJfZmxhZyA9IDA7 CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb25zdCBpbnQgbWluX2Rpc3RfdmVyX2hv ciA9IEZGTUlOKGFicyhtb2RlIC0gNTApLCBhYnMobW9kZSAtIDE4KSk7CisgICAgICAgICAgICBj b25zdCBpbnQgaW50cmFfaG9yX3Zlcl9kaXN0X3RocmVzW10gPSB7MjQsIDE0LCAyLCAwLCAwfTsK KyAgICAgICAgICAgIGNvbnN0IGludCBudGJzID0gKGF2X2xvZzIodykgKyBhdl9sb2cyKGgpKSA+ PiAxOworICAgICAgICAgICAgZWRnZS0+ZmlsdGVyX2ZsYWcgPSBtaW5fZGlzdF92ZXJfaG9yID4g aW50cmFfaG9yX3Zlcl9kaXN0X3RocmVzW250YnMgLSAyXTsKKyAgICAgICAgfQorCisgICAgICAg IGlmIChtb2RlICE9IElOVFJBX1ZFUlQgJiYgbW9kZSAhPSBJTlRSQV9IT1JaKSB7CisgICAgICAg ICAgICBpZiAobW9kZSA+PSBJTlRSQV9ESUFHKSB7CisgICAgICAgICAgICAgICAgaWYgKGludHJh X3ByZWRfYW5nbGUgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsICpwID0gdG9wIC0g KHJlZl9pZHggKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IC1oOyB4IDwg MDsgeCsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgaWR4ID0gLTEgLSBy ZWZfaWR4ICsgRkZNSU4oKHgqaW52X2FuZ2xlICsgMjU2KSA+PiA5LCBoKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHBbeF0gPSBsZWZ0W2lkeF07CisgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0g cmVmdzsgaSA8PSByZWZ3ICsgRkZNQVgoMSwgdy9oKSAqIHJlZl9pZHggKyAxOyBpKyspCisgICAg ICAgICAgICAgICAgICAgICAgICB0b3BbaV0gPSB0b3BbcmVmdyAtIDFdOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGludHJhX3By ZWRfYW5nbGUgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsICpwID0gbGVmdCAtIChy ZWZfaWR4ICsgMSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAtdzsgeCA8IDA7 IHgrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGlkeCA9IC0xIC0gcmVm X2lkeCArIEZGTUlOKCh4Kmludl9hbmdsZSArIDI1NikgPj4gOSwgdyk7CisgICAgICAgICAgICAg ICAgICAgICAgICBwW3hdID0gdG9wW2lkeF07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gcmVm aDsgaSA8PSByZWZoICsgRkZNQVgoMSwgaC93KSAqIHJlZl9pZHggKyAxOyBpKyspCisgICAgICAg ICAgICAgICAgICAgICAgICBsZWZ0W2ldID0gbGVmdFtyZWZoIC0gMV07CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVkZ2UtPmxlZnQgPSAo dWludDhfdCopbGVmdDsKKyAgICBlZGdlLT50b3AgID0gKHVpbnQ4X3QqKXRvcDsKK30KKworLy84 LjQuMSBHZW5lcmFsIGRlY29kaW5nIHByb2Nlc3MgZm9yIGNvZGluZyB1bml0cyBjb2RlZCBpbiBp bnRyYSBwcmVkaWN0aW9uIG1vZGUKK3N0YXRpYyB2b2lkIEZVTkMoaW50cmFfcHJlZCkoY29uc3Qg VlZDTG9jYWxDb250ZXh0ICpsYywgaW50IHgwLCBpbnQgeTAsCisgICAgY29uc3QgaW50IHdpZHRo LCBjb25zdCBpbnQgaGVpZ2h0LCBpbnQgY19pZHgpCit7CisgICAgVlZDRnJhbWVDb250ZXh0ICpm YyAgICAgPSBsYy0+ZmM7CisgICAgY29uc3QgVlZDU1BTICpzcHMgPSBmYy0+cHMuc3BzOworICAg IGNvbnN0IFZWQ1BQUyAqcHBzID0gZmMtPnBzLnBwczsKKyAgICBjb25zdCBDb2RpbmdVbml0ICpj dSA9IGxjLT5jdTsKKyAgICBjb25zdCBpbnQgbG9nMl9taW5fY2Jfc2l6ZSAgICA9IHNwcy0+bWlu X2NiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCBtaW5fY2Jfd2lkdGggICAgICAgID0gcHBz LT5taW5fY2Jfd2lkdGg7CisgICAgY29uc3QgaW50IHhfY2IgICAgICAgICAgICAgICAgPSB4MCA+ PiBsb2cyX21pbl9jYl9zaXplOworICAgIGNvbnN0IGludCB5X2NiICAgICAgICAgICAgICAgID0g eTAgPj4gbG9nMl9taW5fY2Jfc2l6ZTsKKworICAgIGNvbnN0IGludCBoc2hpZnQgPSBmYy0+cHMu c3BzLT5oc2hpZnRbY19pZHhdOworICAgIGNvbnN0IGludCB2c2hpZnQgPSBmYy0+cHMuc3BzLT52 c2hpZnRbY19pZHhdOworICAgIGNvbnN0IGludCB4ID0geDAgPj4gaHNoaWZ0OworICAgIGNvbnN0 IGludCB5ID0geTAgPj4gdnNoaWZ0OworICAgIGNvbnN0IGludCB3ID0gd2lkdGggPj4gaHNoaWZ0 OworICAgIGNvbnN0IGludCBoID0gaGVpZ2h0ID4+IHZzaGlmdDsKKyAgICBjb25zdCBwdHJkaWZm X3Qgc3RyaWRlID0gZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF0gLyBzaXplb2YocGl4ZWwpOwor CisgICAgY29uc3QgaW50IHByZWRfbW9kZSA9IGNfaWR4ID8gY3UtPmludHJhX3ByZWRfbW9kZV9j IDogY3UtPmludHJhX3ByZWRfbW9kZV95OworICAgIGNvbnN0IGludCBtb2RlID0gZmZfdnZjX3dp ZGVfYW5nbGVfbW9kZV9tYXBwaW5nKGN1LCB3LCBoLCBjX2lkeCwgcHJlZF9tb2RlKTsKKworICAg IGNvbnN0IGludCBpbnRyYV9taXBfZmxhZyAgPSBTQU1QTEVfQ1RCKGZjLT50YWIuaW1mLCB4X2Ni LCB5X2NiKTsKKyAgICBjb25zdCBpbnQgaXNfaW50cmFfbWlwICAgID0gaW50cmFfbWlwX2ZsYWcg JiYgKCFjX2lkeCB8fCBjdS0+bWlwX2Nocm9tYV9kaXJlY3RfZmxhZyk7CisgICAgY29uc3QgaW50 IHJlZl9pZHggPSBjX2lkeCA/IDAgOiBjdS0+aW50cmFfbHVtYV9yZWZfaWR4OworICAgIGNvbnN0 IGludCBuZWVkX3BkcGMgPSBmZl92dmNfbmVlZF9wZHBjKHcsIGgsIGN1LT5iZHBjbV9mbGFnW2Nf aWR4XSwgbW9kZSwgcmVmX2lkeCk7CisKKworICAgIHBpeGVsICpzcmMgPSAocGl4ZWwqKWZjLT5m cmFtZS0+ZGF0YVtjX2lkeF0gKyB4ICsgeSAqIHN0cmlkZTsKKyAgICBJbnRyYUVkZ2VQYXJhbXMg ZWRnZTsKKworICAgIEZVTkMocHJlcGFyZV9pbnRyYV9lZGdlX3BhcmFtcykobGMsICZlZGdlLCBz cmMsIHN0cmlkZSwgeCwgeSwgdywgaCwgY19pZHgsIGlzX2ludHJhX21pcCwgbW9kZSwgcmVmX2lk eCwgbmVlZF9wZHBjKTsKKworICAgIGlmIChpc19pbnRyYV9taXApIHsKKyAgICAgICAgaW50IGlu dHJhX21pcF90cmFuc3Bvc2VkX2ZsYWcgPSBTQU1QTEVfQ1RCKGZjLT50YWIuaW10ZiwgeF9jYiwg eV9jYik7CisgICAgICAgIGludCBpbnRyYV9taXBfbW9kZSA9IFNBTVBMRV9DVEIoZmMtPnRhYi5p bW0sIHhfY2IsIHlfY2IpOworCisgICAgICAgIGZjLT52dmNkc3AuaW50cmEucHJlZF9taXAoKHVp bnQ4X3QgKilzcmMsIGVkZ2UudG9wLCBlZGdlLmxlZnQsCisgICAgICAgICAgICAgICAgICAgICAg ICB3LCBoLCBzdHJpZGUsIGludHJhX21pcF9tb2RlLCBpbnRyYV9taXBfdHJhbnNwb3NlZF9mbGFn KTsKKyAgICB9IGVsc2UgaWYgKG1vZGUgPT0gSU5UUkFfUExBTkFSKSB7CisgICAgICAgIGZjLT52 dmNkc3AuaW50cmEucHJlZF9wbGFuYXIoKHVpbnQ4X3QgKilzcmMsIGVkZ2UudG9wLCBlZGdlLmxl ZnQsIHcsIGgsIHN0cmlkZSk7CisgICAgfSBlbHNlIGlmIChtb2RlID09IElOVFJBX0RDKSB7Cisg ICAgICAgIGZjLT52dmNkc3AuaW50cmEucHJlZF9kYygodWludDhfdCAqKXNyYywgZWRnZS50b3As IGVkZ2UubGVmdCwgdywgaCwgc3RyaWRlKTsKKyAgICB9IGVsc2UgaWYgKG1vZGUgPT0gSU5UUkFf VkVSVCkgeworICAgICAgICBmYy0+dnZjZHNwLmludHJhLnByZWRfdigodWludDhfdCAqKXNyYywg ZWRnZS50b3AsIHcsIGgsIHN0cmlkZSk7CisgICAgfSBlbHNlIGlmIChtb2RlID09IElOVFJBX0hP UlopIHsKKyAgICAgICAgZmMtPnZ2Y2RzcC5pbnRyYS5wcmVkX2goKHVpbnQ4X3QgKilzcmMsIGVk Z2UubGVmdCwgdywgaCwgc3RyaWRlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobW9kZSA+ PSBJTlRSQV9ESUFHKSB7CisgICAgICAgICAgICBmYy0+dnZjZHNwLmludHJhLnByZWRfYW5ndWxh cl92KCh1aW50OF90ICopc3JjLCBlZGdlLnRvcCwgZWRnZS5sZWZ0LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHcsIGgsIHN0cmlkZSwgY19pZHgsIG1vZGUsIHJlZl9pZHgsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS5maWx0ZXJfZmxhZywgbmVlZF9w ZHBjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZjLT52dmNkc3AuaW50cmEucHJl ZF9hbmd1bGFyX2goKHVpbnQ4X3QgKilzcmMsIGVkZ2UudG9wLCBlZGdlLmxlZnQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdywgaCwgc3RyaWRlLCBjX2lkeCwgbW9kZSwgcmVm X2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLmZpbHRlcl9mbGFn LCBuZWVkX3BkcGMpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChuZWVkX3BkcGMpIHsKKyAg ICAgICAgLy84LjQuNS4yLjE1IFBvc2l0aW9uLWRlcGVuZGVudCBpbnRyYSBwcmVkaWN0aW9uIHNh bXBsZSBmaWx0ZXJpbmcgcHJvY2VzcworICAgICAgICBpZiAoIWlzX2ludHJhX21pcCAmJiAobW9k ZSA9PSBJTlRSQV9QTEFOQVIgfHwgbW9kZSA9PSBJTlRSQV9EQyB8fAorICAgICAgICAgICAgbW9k ZSA9PSBJTlRSQV9WRVJUIHx8IG1vZGUgPT0gSU5UUkFfSE9SWikpIHsKKyAgICAgICAgICAgIGNv bnN0IGludCBzY2FsZSA9IChhdl9sb2cyKHcpICsgYXZfbG9nMihoKSAtIDIpID4+IDI7CisgICAg ICAgICAgICBjb25zdCBwaXhlbCAqbGVmdCA9IChwaXhlbCopZWRnZS5sZWZ0OworICAgICAgICAg ICAgY29uc3QgcGl4ZWwgKnRvcCAgPSAocGl4ZWwqKWVkZ2UudG9wOworICAgICAgICAgICAgZm9y IChpbnQgeSA9IDA7IHkgPCBoOyB5KyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g MDsgeCA8IHc7IHgrKykgeworICAgICAgICAgICAgICAgICAgICBpbnQgbCwgdCwgd2wsIHd0LCBw cmVkOworICAgICAgICAgICAgICAgICAgICBwaXhlbCB2YWw7CisgICAgICAgICAgICAgICAgICAg IGlmIChtb2RlID09IElOVFJBX1BMQU5BUiB8fCBtb2RlID09IElOVFJBX0RDKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICBsICA9IGxlZnRbeV07CisgICAgICAgICAgICAgICAgICAgICAgICB0 ID0gdG9wW3hdOworICAgICAgICAgICAgICAgICAgICAgICAgd2wgPSAzMiA+PiBGRk1JTigoeCA8 PCAxKSA+PiBzY2FsZSwgMzEpOworICAgICAgICAgICAgICAgICAgICAgICAgd3QgPSAzMiA+PiBG Rk1JTigoeSA8PCAxKSA+PiBzY2FsZSwgMzEpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgICAgICAgICAgbCAgPSBsZWZ0W3ldIC0gbGVmdFstMV0gKyBQT1Mo eCx5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB0b3BbeF0gLSB0b3BbLTFdICsgUE9T KHgseSk7CisgICAgICAgICAgICAgICAgICAgICAgICB3bCA9IChtb2RlID09IElOVFJBX1ZFUlQp ID8gICgzMiA+PiBGRk1JTigoeCA8PCAxKSA+PiBzY2FsZSwgMzEpKSA6IDA7CisgICAgICAgICAg ICAgICAgICAgICAgICB3dCA9IChtb2RlID09IElOVFJBX0hPUlopID8gICgzMiA+PiBGRk1JTigo eSA8PCAxKSA+PiBzY2FsZSwgMzEpKSA6IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgdmFsID0gUE9TKHgsIHkpOworICAgICAgICAgICAgICAgICAgICBwcmVk ICA9IHZhbCArICgod2wgKiAobCAtIHZhbCkgKyB3dCAqICh0IC0gdmFsKSArIDMyKSA+PiA2KTsK KyAgICAgICAgICAgICAgICAgICAgUE9TKHgsIHkpID0gQ0xJUChwcmVkKTsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vOC40LjUuMi4x MSBTcGVjaWZpY2F0aW9uIG9mIElOVFJBX1BMQU5BUiBpbnRyYSBwcmVkaWN0aW9uIG1vZGUKK3N0 YXRpYyBhdl9hbHdheXNfaW5saW5lIHZvaWQgRlVOQyhwcmVkX3BsYW5hcikodWludDhfdCAqX3Ny YywgY29uc3QgdWludDhfdCAqX3RvcCwKKyAgICBjb25zdCB1aW50OF90ICpfbGVmdCwgY29uc3Qg aW50IHcsIGNvbnN0IGludCBoLCBjb25zdCBwdHJkaWZmX3Qgc3RyaWRlKQoreworICAgIGludCB4 LCB5OworICAgIHBpeGVsICpzcmMgICAgICAgID0gKHBpeGVsICopX3NyYzsKKyAgICBjb25zdCBw aXhlbCAqdG9wICA9IChjb25zdCBwaXhlbCAqKV90b3A7CisgICAgY29uc3QgcGl4ZWwgKmxlZnQg PSAoY29uc3QgcGl4ZWwgKilfbGVmdDsKKyAgICBjb25zdCBpbnQgbG9ndyAgPSBhdl9sb2cyKHcp OworICAgIGNvbnN0IGludCBsb2doICA9IGF2X2xvZzIoaCk7CisgICAgY29uc3QgaW50IHNpemUg ID0gIHcgKiBoOworICAgIGNvbnN0IGludCBzaGlmdCA9IChsb2d3ICsgbG9naCArIDEpOworICAg IGZvciAoeSA9IDA7IHkgPCBoOyB5KyspIHsKKyAgICAgICAgZm9yICh4ID0gMDsgeCA8IHc7IHgr KykgeworICAgICAgICAgICAgY29uc3QgaW50IHByZWRfdiA9ICgoaCAtIDEgLSB5KSAqIHRvcFt4 XSAgKyAoeSArIDEpICogbGVmdFtoXSkgPDwgbG9ndzsKKyAgICAgICAgICAgIGNvbnN0IGludCBw cmVkX2ggPSAoKHcgLSAxIC0geCkgKiBsZWZ0W3ldICsgKHggKyAxKSAqIHRvcFt3XSkgPDwgbG9n aDsKKyAgICAgICAgICAgIGNvbnN0IGludCBwcmVkID0gKHByZWRfdiArIHByZWRfaCArIHNpemUp ID4+IHNoaWZ0OworICAgICAgICAgICAgUE9TKHgsIHkpID0gcHJlZDsKKyAgICAgICAgfQorICAg IH0KK30KKworLy84LjQuNS4yLjMgTUlQIGJvdW5kYXJ5IHNhbXBsZSBkb3duc2FtcGxpbmcgcHJv Y2Vzcworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgdm9pZCBGVU5DKG1pcF9kb3duc2FtcGxpbmcp KGludCAqcmVkdWNlZCwgY29uc3QgaW50IGJvdW5kYXJ5X3NpemUsCisgICAgY29uc3QgcGl4ZWwg KnJlZiwgY29uc3QgaW50IG5fdGJfcykKK3sKKyAgICBjb25zdCBpbnQgYl9kd24gPSBuX3RiX3Mg LyBib3VuZGFyeV9zaXplOworICAgIGNvbnN0IGludCBsb2cyID0gYXZfbG9nMihiX2R3bik7CisK KyAgICBpZiAoYm91bmRhcnlfc2l6ZSA9PSBuX3RiX3MpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCBuX3RiX3M7IGkrKykKKyAgICAgICAgICAgIHJlZHVjZWRbaV0gPSByZWZbaV07Cisg ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBib3VuZGFyeV9z aXplOyBpKyspIHsKKyAgICAgICAgaW50IHI7CisgICAgICAgIHIgPSAqcmVmKys7CisgICAgICAg IGZvciAoaW50IGogPSAxOyBqIDwgYl9kd247IGorKykKKyAgICAgICAgICAgIHIgKz0gKnJlZisr OworICAgICAgICByZWR1Y2VkW2ldID0gKHIgKyAoMSA8PCAobG9nMiAtIDEpKSkgPj4gbG9nMjsK KyAgICB9Cit9CisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHZvaWQgRlVOQyhtaXBfcmVkdWNl ZF9wcmVkKShwaXhlbCAqc3JjLCBjb25zdCBwdHJkaWZmX3Qgc3RyaWRlLAorICAgIGNvbnN0IGlu dCB1cF9ob3IsIGNvbnN0IGludCB1cF92ZXIsIGNvbnN0IGludCBwcmVkX3NpemUsIGNvbnN0IGlu dCAqcmVkdWNlZCwgY29uc3QgaW50IHJlZHVjZWRfc2l6ZSwKKyAgICBjb25zdCBpbnQgb3csIGNv bnN0IGludCB0ZW1wMCwgY29uc3QgdWludDhfdCAqbWF0cml4LCBpbnQgaXNfdHJhbnNwb3NlZCkK K3sKKyAgICBzcmMgPSAmUE9TKHVwX2hvciAtIDEsIHVwX3ZlciAtIDEpOworICAgIGZvciAoaW50 IHkgPSAwOyB5IDwgcHJlZF9zaXplOyB5KyspIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg PCBwcmVkX3NpemU7IHgrKykgeworICAgICAgICAgICAgaW50IHByZWQgPSAwOworICAgICAgICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWR1Y2VkX3NpemU7IGkrKykKKyAgICAgICAgICAgICAg ICBwcmVkICs9IHJlZHVjZWRbaV0gKiBtYXRyaXhbaV07CisgICAgICAgICAgICBtYXRyaXggKz0g cmVkdWNlZF9zaXplOworICAgICAgICAgICAgcHJlZCA9ICgocHJlZCArIG93KSA+PiA2KSArIHRl bXAwOworICAgICAgICAgICAgcHJlZCA9IGF2X2NsaXAocHJlZCwgMCwgKDE8PEJJVF9ERVBUSCkg LSAxKTsKKyAgICAgICAgICAgIGlmIChpc190cmFuc3Bvc2VkKQorICAgICAgICAgICAgICAgIFBP Uyh5ICogdXBfaG9yLCB4ICogdXBfdmVyKSA9IHByZWQ7CisgICAgICAgICAgICBlbHNlCisgICAg ICAgICAgICAgICAgUE9TKHggKiB1cF9ob3IsIHkgKiB1cF92ZXIpID0gcHJlZDsKKyAgICAgICAg fQorICAgIH0KK30KKworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgdm9pZCBGVU5DKG1pcF91cHNh bXBsaW5nXzFkKShwaXhlbCAqZHN0LCBjb25zdCBpbnQgZHN0X3N0ZXAsIGNvbnN0IGludCBkc3Rf c3RyaWRlLCBjb25zdCBpbnQgZHN0X2hlaWdodCwgY29uc3QgaW50IGZhY3RvciwKKyAgICBjb25z dCBwaXhlbCAqYm91bmRhcnksIGNvbnN0IGludCBib3VuZGFyeV9zdGVwLCAgY29uc3QgaW50IHBy ZWRfc2l6ZSkKK3sKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZHN0X2hlaWdodDsgaSsrKSB7 CisgICAgICAgIGNvbnN0IHBpeGVsICpiZWZvcmUgPSBib3VuZGFyeTsKKyAgICAgICAgY29uc3Qg cGl4ZWwgKmFmdGVyICA9IGRzdCAtIGRzdF9zdGVwOworICAgICAgICBwaXhlbCAqZCA9IGRzdDsK KyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBwcmVkX3NpemU7IGorKykgeworICAgICAgICAg ICAgYWZ0ZXIgKz0gZHN0X3N0ZXAgKiBmYWN0b3I7CisgICAgICAgICAgICBmb3IgKGludCBrID0g MTsgayA8IGZhY3RvcjsgaysrKSB7CisgICAgICAgICAgICAgICAgaW50IG1pZCA9IChmYWN0b3Ig LSBrKSAqICgqYmVmb3JlKSArIGsgKiAoKmFmdGVyKTsKKyAgICAgICAgICAgICAgICAqZCA9ICht aWQgKyBmYWN0b3IgLyAyKSAvIGZhY3RvcjsKKyAgICAgICAgICAgICAgICBkICs9IGRzdF9zdGVw OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYmVmb3JlID0gYWZ0ZXI7CisgICAgICAgICAg ICBkICs9IGRzdF9zdGVwOworICAgICAgICB9CisgICAgICAgIGJvdW5kYXJ5ICs9IGJvdW5kYXJ5 X3N0ZXA7CisgICAgICAgIGRzdCArPSBkc3Rfc3RyaWRlOworICAgIH0KK30KKworLy84LjQuNS4y LjIgTWF0cml4LWJhc2VkIGludHJhIHNhbXBsZSBwcmVkaWN0aW9uCitzdGF0aWMgYXZfYWx3YXlz X2lubGluZSB2b2lkIEZVTkMocHJlZF9taXApKHVpbnQ4X3QgKl9zcmMsIGNvbnN0IHVpbnQ4X3Qg Kl90b3AsCisgICAgY29uc3QgdWludDhfdCAqX2xlZnQsIGNvbnN0IGludCB3LCBjb25zdCBpbnQg aCwgY29uc3QgcHRyZGlmZl90IHN0cmlkZSwKKyAgICBpbnQgbW9kZV9pZCwgaW50IGlzX3RyYW5z cG9zZWQpCit7CisgICAgcGl4ZWwgKnNyYyAgICAgICAgPSAocGl4ZWwgKilfc3JjOworICAgIGNv bnN0IHBpeGVsICp0b3AgID0gKGNvbnN0IHBpeGVsICopX3RvcDsKKyAgICBjb25zdCBwaXhlbCAq bGVmdCA9IChjb25zdCBwaXhlbCAqKV9sZWZ0OworCisgICAgY29uc3QgaW50IHNpemVfaWQgPSBm Zl92dmNfZ2V0X21pcF9zaXplX2lkKHcsIGgpOworICAgIHN0YXRpYyBjb25zdCBpbnQgYm91bmRh cnlfc2l6ZXNbXSA9IHsyLCA0LCA0fTsKKyAgICBzdGF0aWMgY29uc3QgaW50IHByZWRfc2l6ZXNb XSA9IHs0LCA0LCA4fTsKKyAgICBjb25zdCBpbnQgYm91bmRhcnlfc2l6ZSA9IGJvdW5kYXJ5X3Np emVzW3NpemVfaWRdOworICAgIGNvbnN0IGludCBwcmVkX3NpemUgICAgID0gcHJlZF9zaXplc1tz aXplX2lkXTsKKyAgICBjb25zdCBpbnQgaW5fc2l6ZSA9IDIgKiBib3VuZGFyeV9zaXplIC0gKChz aXplX2lkID09IDIpID8gMSA6IDApOworICAgIGNvbnN0IHVpbnQ4X3QgKm1hdHJpeCA9IGZmX3Z2 Y19nZXRfbWlwX21hdHJpeChzaXplX2lkLCBtb2RlX2lkKTsKKyAgICBjb25zdCBpbnQgdXBfaG9y ID0gdyAvIHByZWRfc2l6ZTsKKyAgICBjb25zdCBpbnQgdXBfdmVyID0gaCAvIHByZWRfc2l6ZTsK KworICAgIGludCByZWR1Y2VkWzE2XTsKKyAgICBpbnQgKnJlZF90ICA9IHJlZHVjZWQ7CisgICAg aW50ICpyZWRfbCAgPSByZWR1Y2VkICsgYm91bmRhcnlfc2l6ZTsKKyAgICBpbnQgb2ZmID0gMSwg b3cgPSAwOworICAgIGludCB0ZW1wMDsKKworICAgIGlmIChpc190cmFuc3Bvc2VkKSB7CisgICAg ICAgIEZGU1dBUChpbnQqLCByZWRfdCwgcmVkX2wpOworICAgIH0KKyAgICBGVU5DKG1pcF9kb3du c2FtcGxpbmcpKHJlZF90LCBib3VuZGFyeV9zaXplLCB0b3AsIHcpOworICAgIEZVTkMobWlwX2Rv d25zYW1wbGluZykocmVkX2wsIGJvdW5kYXJ5X3NpemUsIGxlZnQsIGgpOworCisgICAgdGVtcDAg PSByZWR1Y2VkWzBdOworICAgIGlmIChzaXplX2lkICE9IDIpIHsKKyAgICAgICAgb2ZmID0gMDsK KyAgICAgICAgb3cgPSAoMSA8PCAoQklUX0RFUFRIIC0gMSkpIC0gdGVtcDA7CisgICAgfSBlbHNl IHsKKyAgICAgICAgb3cgPSByZWR1Y2VkWzFdIC0gdGVtcDA7CisgICAgfQorICAgIHJlZHVjZWRb MF0gPSBvdzsKKyAgICBmb3IgKGludCBpID0gMTsgaSA8IGluX3NpemU7IGkrKykgeworICAgICAg ICByZWR1Y2VkW2ldID0gcmVkdWNlZFtpICsgb2ZmXSAtIHRlbXAwOworICAgICAgICBvdyArPSBy ZWR1Y2VkW2ldOworICAgIH0KKyAgICBvdyA9IDMyIC0gMzIgKiBvdzsKKworICAgIEZVTkMobWlw X3JlZHVjZWRfcHJlZCkoc3JjLCBzdHJpZGUsIHVwX2hvciwgdXBfdmVyLCBwcmVkX3NpemUsIHJl ZHVjZWQsIGluX3NpemUsIG93LCB0ZW1wMCwgbWF0cml4LCBpc190cmFuc3Bvc2VkKTsKKyAgICBp ZiAodXBfaG9yID4gMSB8fCB1cF92ZXIgPiAxKSB7CisgICAgICAgIGlmICh1cF9ob3IgPiAxKQor ICAgICAgICAgICAgRlVOQyhtaXBfdXBzYW1wbGluZ18xZCkoJlBPUygwLCB1cF92ZXIgLSAxKSwg MSwgdXBfdmVyICogc3RyaWRlLCBwcmVkX3NpemUsIHVwX2hvciwgbGVmdCArIHVwX3ZlciAtIDEs IHVwX3ZlciwgcHJlZF9zaXplKTsKKyAgICAgICAgaWYgKHVwX3ZlciA+IDEpCisgICAgICAgICAg ICBGVU5DKG1pcF91cHNhbXBsaW5nXzFkKShzcmMsIHN0cmlkZSwgMSwgdywgdXBfdmVyLCB0b3As IDEsIHByZWRfc2l6ZSk7CisgICAgfQorfQorCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBwaXhl bCBGVU5DKHByZWRfZGNfdmFsKShjb25zdCBwaXhlbCAqdG9wLCBjb25zdCBwaXhlbCAqbGVmdCwK KyAgICBjb25zdCBpbnQgdywgY29uc3QgaW50IGgpCit7CisgICAgcGl4ZWwgZGNfdmFsOworICAg IGludCBzdW0gPSAwOworICAgIHVuc2lnbmVkIGludCBvZmZzZXQgPSAodyA9PSBoKSA/ICh3IDw8 IDEpIDogRkZNQVgodywgaCk7CisgICAgY29uc3QgaW50IHNoaWZ0ID0gYXZfbG9nMihvZmZzZXQp OworICAgIG9mZnNldCA+Pj0gMTsKKyAgICBpZiAodyA+PSBoKSB7CisgICAgICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgdzsgaSsrKQorICAgICAgICAgICAgc3VtICs9IHRvcFtpXTsKKyAgICB9Cisg ICAgaWYgKHcgPD0gaCkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGg7IGkrKykKKyAg ICAgICAgICAgIHN1bSArPSBsZWZ0W2ldOworICAgIH0KKyAgICBkY192YWwgPSAoc3VtICsgb2Zm c2V0KSA+PiBzaGlmdDsKKyAgICByZXR1cm4gZGNfdmFsOworfQorCisvLzguNC41LjIuMTIgU3Bl Y2lmaWNhdGlvbiBvZiBJTlRSQV9EQyBpbnRyYSBwcmVkaWN0aW9uIG1vZGUKK3N0YXRpYyBhdl9h bHdheXNfaW5saW5lIHZvaWQgRlVOQyhwcmVkX2RjKSh1aW50OF90ICpfc3JjLCBjb25zdCB1aW50 OF90ICpfdG9wLAorICAgIGNvbnN0IHVpbnQ4X3QgKl9sZWZ0LCBjb25zdCBpbnQgdywgY29uc3Qg aW50IGgsIGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUpCit7CisgICAgaW50IHgsIHk7CisgICAgcGl4 ZWwgKnNyYyAgICAgICAgICA9IChwaXhlbCAqKV9zcmM7CisgICAgY29uc3QgcGl4ZWwgKnRvcCAg ICA9IChjb25zdCBwaXhlbCAqKV90b3A7CisgICAgY29uc3QgcGl4ZWwgKmxlZnQgICA9IChjb25z dCBwaXhlbCAqKV9sZWZ0OworICAgIGNvbnN0IHBpeGVsIGRjICAgICAgPSBGVU5DKHByZWRfZGNf dmFsKSh0b3AsIGxlZnQsIHcsIGgpOworICAgIGNvbnN0IHBpeGVsNCBhICAgICAgPSBQSVhFTF9T UExBVF9YNChkYyk7CisgICAgZm9yICh5ID0gMDsgeSA8IGg7IHkrKykgeworICAgICAgICBwaXhl bCAqcyA9IHNyYzsKKyAgICAgICAgZm9yICh4ID0gMDsgeCA8IHc7IHggKz0gNCkgeworICAgICAg ICAgICAgQVZfV040UChzLCBhKTsKKyAgICAgICAgICAgIHMgKz0gNDsKKyAgICAgICAgfQorICAg ICAgICBzcmMgKz0gc3RyaWRlOworICAgIH0KK30KKworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUg dm9pZCBGVU5DKHByZWRfdikodWludDhfdCAqX3NyYywgY29uc3QgdWludDhfdCAqX3RvcCwKKyAg ICBjb25zdCBpbnQgdywgY29uc3QgaW50IGgsIGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUpCit7Cisg ICAgcGl4ZWwgKnNyYyAgICAgICAgICA9IChwaXhlbCAqKV9zcmM7CisgICAgY29uc3QgcGl4ZWwg KnRvcCAgICA9IChjb25zdCBwaXhlbCAqKV90b3A7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo OyB5KyspIHsKKyAgICAgICAgbWVtY3B5KHNyYywgdG9wLCBzaXplb2YocGl4ZWwpICAqIHcpOwor ICAgICAgICBzcmMgKz0gc3RyaWRlOworICAgIH0KK30KKworc3RhdGljIHZvaWQgRlVOQyhwcmVk X2gpKHVpbnQ4X3QgKl9zcmMsIGNvbnN0IHVpbnQ4X3QgKl9sZWZ0LCBjb25zdCBpbnQgdywgY29u c3QgaW50IGgsCisgICAgY29uc3QgcHRyZGlmZl90IHN0cmlkZSkKK3sKKyAgICBwaXhlbCAqc3Jj ICAgICAgICAgID0gKHBpeGVsICopX3NyYzsKKyAgICBjb25zdCBwaXhlbCAqbGVmdCAgICA9IChj b25zdCBwaXhlbCAqKV9sZWZ0OworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKSB7Cisg ICAgICAgIGNvbnN0IHBpeGVsNCBhID0gUElYRUxfU1BMQVRfWDQobGVmdFt5XSk7CisgICAgICAg IGZvciAoaW50IHggPSAwOyB4IDwgdzsgeCArPSA0KSB7CisgICAgICAgICAgICBBVl9XTjRQKCZQ T1MoeCwgeSksIGEpOworICAgICAgICB9CisgICAgfQorfQorCisjZGVmaW5lIElOVFJBX0xVTUFf RklMVEVSKHApICAgIENMSVAoKHBbMF0gKiBmWzBdICsgcFsxXSAqIGZbMV0gKyBwWzJdICogZlsy XSArIHBbM10gKiBmWzNdICsgMzIpID4+IDYpCisjZGVmaW5lIElOVFJBX0NIUk9NQV9GSUxURVIo cCkgICgoKDMyIC0gZmFjdCkgKiBwWzFdICsgZmFjdCAqIHBbMl0gKyAxNikgPj4gNSkKKworLy84 LjQuNS4yLjEzIFNwZWNpZmljYXRpb24gb2YgSU5UUkFfQU5HVUxBUjIuLklOVFJBX0FOR1VMQVI2 NiBpbnRyYSBwcmVkaWN0aW9uIG1vZGVzCitzdGF0aWMgdm9pZCBGVU5DKHByZWRfYW5ndWxhcl92 KSh1aW50OF90ICpfc3JjLCBjb25zdCB1aW50OF90ICpfdG9wLCBjb25zdCB1aW50OF90ICpfbGVm dCwKKyAgICBjb25zdCBpbnQgdywgY29uc3QgaW50IGgsIGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUs IGNvbnN0IGludCBjX2lkeCwgY29uc3QgaW50IG1vZGUsCisgICAgY29uc3QgaW50IHJlZl9pZHgs IGNvbnN0IGludCBmaWx0ZXJfZmxhZywgY29uc3QgaW50IG5lZWRfcGRwYykKK3sKKyAgICBwaXhl bCAqc3JjICAgICAgICAgID0gKHBpeGVsICopX3NyYzsKKyAgICBjb25zdCBwaXhlbCAqbGVmdCAg ID0gKGNvbnN0IHBpeGVsICopX2xlZnQ7CisgICAgY29uc3QgcGl4ZWwgKnRvcCAgICA9IChjb25z dCBwaXhlbCAqKV90b3AgLSAoMSArIHJlZl9pZHgpOworICAgIGNvbnN0IGludCBpbnRyYV9wcmVk X2FuZ2xlID0gZmZfdnZjX2ludHJhX3ByZWRfYW5nbGVfZGVyaXZlKG1vZGUpOworICAgIGludCBw b3MgPSAoMSArIHJlZl9pZHgpICogaW50cmFfcHJlZF9hbmdsZTsKKyAgICBjb25zdCBpbnQgZHAg PSBpbnRyYV9wcmVkX2FuZ2xlOworICAgIGNvbnN0IGludCBpc19sdW1hID0gIWNfaWR4OworICAg IGludCBuc2NhbGUsIGludl9hbmdsZTsKKworICAgIGlmIChuZWVkX3BkcGMpIHsKKyAgICAgICAg aW52X2FuZ2xlID0gZmZfdnZjX2ludHJhX2ludl9hbmdsZV9kZXJpdmUoaW50cmFfcHJlZF9hbmds ZSk7CisgICAgICAgIG5zY2FsZSA9IGZmX3Z2Y19uc2NhbGVfZGVyaXZlKHcsIGgsIG1vZGUpOwor ICAgIH0KKworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKSB7CisgICAgICAgIGNvbnN0 IGludCBpZHggICA9IChwb3MgPj4gNSkgKyByZWZfaWR4OworICAgICAgICBjb25zdCBpbnQgZmFj dCA9IHBvcyAmIDMxOworICAgICAgICBpZiAoIWZhY3QgJiYgKCFpc19sdW1hIHx8ICFmaWx0ZXJf ZmxhZykpIHsKKyAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdzsgeCsrKSB7CisgICAg ICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAgPSB0b3AgKyB4ICsgaWR4ICsgMTsKKyAgICAgICAg ICAgICAgICBQT1MoeCwgeSkgPSAqcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgIGlmICghY19pZHgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQ4X3Qg KmYgPSBmZl92dmNfaW50cmFfbHVtYV9maWx0ZXJbZmlsdGVyX2ZsYWddW2ZhY3RdOworICAgICAg ICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdzsgeCsrKSB7CisgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHBpeGVsICpwID0gdG9wICsgeCArIGlkeDsKKyAgICAgICAgICAgICAgICAgICAg UE9TKHgsIHkpID0gSU5UUkFfTFVNQV9GSUxURVIocCk7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7 IHgrKykgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcCA9IHRvcCArIHggKyBp ZHg7CisgICAgICAgICAgICAgICAgICAgIFBPUyh4LCB5KSA9IElOVFJBX0NIUk9NQV9GSUxURVIo cCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg IGlmIChuZWVkX3BkcGMpIHsKKyAgICAgICAgICAgIGludCBpbnZfYW5nbGVfc3VtID0gMjU2ICsg aW52X2FuZ2xlOworICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBGRk1JTih3LCAzIDw8 IG5zY2FsZSk7IHgrKykgeworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsIGwgICA9IGxlZnRb eSArIChpbnZfYW5nbGVfc3VtID4+IDkpXTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCB2 YWwgPSBQT1MoeCwgeSk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHdsICAgID0gMzIgPj4g KCh4IDw8IDEpID4+IG5zY2FsZSk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHByZWQgID0g dmFsICsgKCgobCAtIHZhbCkgKiB3bCArIDMyKSA+PiA2KTsKKyAgICAgICAgICAgICAgICBQT1Mo eCwgeSkgPSBDTElQKHByZWQpOworICAgICAgICAgICAgICAgIGludl9hbmdsZV9zdW0gKz0gaW52 X2FuZ2xlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHBvcyArPSBkcDsKKyAg ICB9Cit9CisKKy8vOC40LjUuMi4xMyBTcGVjaWZpY2F0aW9uIG9mIElOVFJBX0FOR1VMQVIyLi5J TlRSQV9BTkdVTEFSNjYgaW50cmEgcHJlZGljdGlvbiBtb2Rlcworc3RhdGljIHZvaWQgRlVOQyhw cmVkX2FuZ3VsYXJfaCkodWludDhfdCAqX3NyYywgY29uc3QgdWludDhfdCAqX3RvcCwgY29uc3Qg dWludDhfdCAqX2xlZnQsCisgICAgY29uc3QgaW50IHcsIGNvbnN0IGludCBoLCBjb25zdCBwdHJk aWZmX3Qgc3RyaWRlLCBjb25zdCBpbnQgY19pZHgsIGNvbnN0IGludCBtb2RlLAorICAgIGNvbnN0 IGludCByZWZfaWR4LCBjb25zdCBpbnQgZmlsdGVyX2ZsYWcsIGNvbnN0IGludCBuZWVkX3BkcGMp Cit7CisgICAgcGl4ZWwgKnNyYyAgICAgICAgICA9IChwaXhlbCAqKV9zcmM7CisgICAgY29uc3Qg cGl4ZWwgKmxlZnQgICA9IChjb25zdCBwaXhlbCAqKV9sZWZ0IC0gKDEgKyByZWZfaWR4KTsKKyAg ICBjb25zdCBwaXhlbCAqdG9wICAgID0gKGNvbnN0IHBpeGVsICopX3RvcDsKKyAgICBjb25zdCBp bnQgaXNfbHVtYSA9ICFjX2lkeDsKKyAgICBjb25zdCBpbnQgaW50cmFfcHJlZF9hbmdsZSA9IGZm X3Z2Y19pbnRyYV9wcmVkX2FuZ2xlX2Rlcml2ZShtb2RlKTsKKyAgICBjb25zdCBpbnQgZHAgPSBp bnRyYV9wcmVkX2FuZ2xlOworICAgIGludCBuc2NhbGUgPSAwLCBpbnZfYW5nbGUsIGludl9hbmds ZV9zdW07CisKKyAgICBpZiAobmVlZF9wZHBjKSB7CisgICAgICAgIGludl9hbmdsZSA9IGZmX3Z2 Y19pbnRyYV9pbnZfYW5nbGVfZGVyaXZlKGludHJhX3ByZWRfYW5nbGUpOworICAgICAgICBpbnZf YW5nbGVfc3VtID0gMjU2ICsgaW52X2FuZ2xlOworICAgICAgICBuc2NhbGUgPSBmZl92dmNfbnNj YWxlX2Rlcml2ZSh3LCBoLCBtb2RlKTsKKyAgICB9CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8 IGg7IHkrKykgeworICAgICAgICBpbnQgcG9zID0gKDEgKyByZWZfaWR4KSAqIGludHJhX3ByZWRf YW5nbGU7CisgICAgICAgIGludCB3dDsKKyAgICAgICAgaWYgKG5lZWRfcGRwYykKKyAgICAgICAg ICAgIHd0ID0gKDMyID4+ICgoeSAqIDIpID4+IG5zY2FsZSkpOworCisgICAgICAgIGZvciAoaW50 IHggPSAwOyB4IDwgdzsgeCsrKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgaWR4ICA9IChwb3Mg Pj4gNSkgKyByZWZfaWR4OworICAgICAgICAgICAgY29uc3QgaW50IGZhY3QgPSBwb3MgJiAzMTsK KyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwID0gbGVmdCArIHkgKyBpZHg7CisgICAgICAgICAg ICBpbnQgcHJlZDsKKyAgICAgICAgICAgIGlmICghZmFjdCAmJiAoIWlzX2x1bWEgfHwgIWZpbHRl cl9mbGFnKSkgeworICAgICAgICAgICAgICAgIHByZWQgPSBwWzFdOworICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNfaWR4KSB7CisgICAgICAgICAgICAgICAgICAg IGNvbnN0IGludDhfdCAqZiA9IGZmX3Z2Y19pbnRyYV9sdW1hX2ZpbHRlcltmaWx0ZXJfZmxhZ11b ZmFjdF07CisgICAgICAgICAgICAgICAgICAgIHByZWQgPSBJTlRSQV9MVU1BX0ZJTFRFUihwKTsK KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwcmVkID0gSU5U UkFfQ0hST01BX0ZJTFRFUihwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBpZiAobmVlZF9wZHBjKSB7CisgICAgICAgICAgICAgICAgaWYgKHkgPCAoMyA8 PCBuc2NhbGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsIHQgPSB0b3BbeCAr IChpbnZfYW5nbGVfc3VtID4+IDkpXTsKKyAgICAgICAgICAgICAgICAgICAgcHJlZCA9IENMSVAo cHJlZCArICgoKHQgLSBwcmVkKSAqIHd0ICsgMzIpID4+IDYpKTsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQT1MoeCwgeSkgPSBwcmVkOworICAgICAgICAg ICAgcG9zICs9IGRwOworICAgICAgICB9CisgICAgICAgIGlmIChuZWVkX3BkcGMpCisgICAgICAg ICAgICBpbnZfYW5nbGVfc3VtICs9IGludl9hbmdsZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk IEZVTkMoZmZfdnZjX2ludHJhX2RzcF9pbml0KShWVkNJbnRyYURTUENvbnRleHQgKmNvbnN0IGlu dHJhKQoreworICAgIGludHJhLT5sbWNzX3NjYWxlX2Nocm9tYSAgPSBGVU5DKGxtY3Nfc2NhbGVf Y2hyb21hKTsKKyAgICBpbnRyYS0+aW50cmFfY2NsbV9wcmVkICAgID0gRlVOQyhpbnRyYV9jY2xt X3ByZWQpOworICAgIGludHJhLT5pbnRyYV9wcmVkICAgICAgICAgPSBGVU5DKGludHJhX3ByZWQp OworICAgIGludHJhLT5wcmVkX3BsYW5hciAgICAgICAgPSBGVU5DKHByZWRfcGxhbmFyKTsKKyAg ICBpbnRyYS0+cHJlZF9taXAgICAgICAgICAgID0gRlVOQyhwcmVkX21pcCk7CisgICAgaW50cmEt PnByZWRfZGMgICAgICAgICAgICA9IEZVTkMocHJlZF9kYyk7CisgICAgaW50cmEtPnByZWRfdiAg ICAgICAgICAgICA9IEZVTkMocHJlZF92KTsKKyAgICBpbnRyYS0+cHJlZF9oICAgICAgICAgICAg ID0gRlVOQyhwcmVkX2gpOworICAgIGludHJhLT5wcmVkX2FuZ3VsYXJfdiAgICAgPSBGVU5DKHBy ZWRfYW5ndWxhcl92KTsKKyAgICBpbnRyYS0+cHJlZF9hbmd1bGFyX2ggICAgID0gRlVOQyhwcmVk X2FuZ3VsYXJfaCk7Cit9Ci0tIAoyLjI1LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVs QGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRl dmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRl dmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K