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 5D1AC4782C for ; Sat, 23 Sep 2023 15:42:29 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0B31D68C9CC; Sat, 23 Sep 2023 18:42:26 +0300 (EEST) Received: from mail-oo1-f43.google.com (mail-oo1-f43.google.com [209.85.161.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2677868C6D8 for ; Sat, 23 Sep 2023 18:42:20 +0300 (EEST) Received: by mail-oo1-f43.google.com with SMTP id 006d021491bc7-57bb0f5d00aso143261eaf.1 for ; Sat, 23 Sep 2023 08:42:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695483738; x=1696088538; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=X/QQbblOLcCycbGj+7khz0dDx2yzqWdhaPjl4qN8Bs0=; b=c60xOS4WuMTgBnzBJDKcm2eleCDy5PMLc4sL+abUaI9vP0xoZ4oHea37fsgEXoTOQ0 2ZuOuda6COZakCOFSq8wWOkWk3Cfe+GhxFSAWUHg0e8CXCsAHWcvieBm1r/OiE70ZtP4 D2ZFYS9gh0F+3kKfmbOPwh/ddw+b1euD8tylDO7yyj49+3AjoYKhJnAFqlhrfMgENWyJ 1ju5rS19dAOVfOe005f3Fnh8jwbKDLlkfSMp+pslRUeVndX1QfXeHaXC2miL8qoYWCqh HPe/MjG8PlVlo/Cb11fCfkbVgWSS0EeOYg7yqoYzIrnTKitbasW0gbRbwTpCP78BSAjJ ZQMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695483738; x=1696088538; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=X/QQbblOLcCycbGj+7khz0dDx2yzqWdhaPjl4qN8Bs0=; b=R5E8v74HZxJhUsKNY8y+hkfXnDuuKiu8mmMUuBc0Y8Y2oKjNQOcy3Ub/jH7J79Ygaw tT1fuaPdr3dFvOLf2Sne2ZbnsUdClcjkc+oUnoFdWBaHhU/kZbSV+0jGPtU29G0RMfFB kmgW2GuNOh+8ZwWbtqKZWc+4Qtx6OKZPMURR14yKOy3BqrbLUdckfRudv9aPMHs+TNgR QkOqJo02ETGm/20fP55k2b3C6Y13eXwX7dEUjDMcgi7yZWEJ3F+cp01OiSvDRwN2ScQX 8+kkawMLlfw+GtL8ZpELCmAVS5P8O/hscROCHYWqd+ybavbcSJ7I2g8m/gZfma0hbrqn SPpg== X-Gm-Message-State: AOJu0YxoenC+KWu6TN9N2Py2+ib4F6TM76dO02l4paFNQB/+sGqOWZ/9 eZbcg57jkbODBmM8l+mV7V4Moq7hU9c= X-Google-Smtp-Source: AGHT+IGPLYddZFXs/NcSTHNp7ec+6GzrhaNXSkO3bgCn+YaVIJZUdor+NaEiJlJXV0x1ai3YhF2pnw== X-Received: by 2002:a05:6358:99a9:b0:142:e357:e777 with SMTP id j41-20020a05635899a900b00142e357e777mr3076247rwb.25.1695483737705; Sat, 23 Sep 2023 08:42:17 -0700 (PDT) Received: from archvm.home (hwsrv-1088392.hostwindsdns.com. [23.254.253.23]) by smtp.gmail.com with ESMTPSA id e2-20020a63ae42000000b0057c630d606asm3307178pgp.69.2023.09.23.08.42.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Sep 2023 08:42:17 -0700 (PDT) From: Chen Yufei To: ffmpeg-devel@ffmpeg.org Date: Sat, 23 Sep 2023 23:36:09 +0800 Message-ID: <20230923154125.31376-2-cyfdecyf@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230923154125.31376-1-cyfdecyf@gmail.com> References: <20230923154125.31376-1-cyfdecyf@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] avfilter/vf_lut3d: expose 3D LUT file parse function. 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: Chen Yufei 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: U2lnbmVkLW9mZi1ieTogQ2hlbiBZdWZlaSA8Y3lmZGVjeWZAZ21haWwuY29tPgotLS0KIGxpYmF2 ZmlsdGVyL01ha2VmaWxlICAgfCAgIDggKy0KIGxpYmF2ZmlsdGVyL2x1dDNkLmMgICAgfCA2Njkg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxpYmF2ZmlsdGVyL2x1 dDNkLmggICAgfCAgMTMgKwogbGliYXZmaWx0ZXIvdmZfbHV0M2QuYyB8IDU5MCArLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDQgZmlsZXMgY2hhbmdlZCwgNjg5IGluc2VydGlv bnMoKyksIDU5MSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci9s dXQzZC5jCgpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvTWFrZWZpbGUgYi9saWJhdmZpbHRlci9N YWtlZmlsZQppbmRleCAyZmUwMDMzYjIxLi5jMWNkNzk3ZTVjIDEwMDY0NAotLS0gYS9saWJhdmZp bHRlci9NYWtlZmlsZQorKysgYi9saWJhdmZpbHRlci9NYWtlZmlsZQpAQCAtMzMwLDcgKzMzMCw3 IEBAIE9CSlMtJChDT05GSUdfR1JBUEhNT05JVE9SX0ZJTFRFUikgICAgICAgICAgICs9IGZfZ3Jh cGhtb25pdG9yLm8KIE9CSlMtJChDT05GSUdfR1JBWVdPUkxEX0ZJTFRFUikgICAgICAgICAgICAg ICs9IHZmX2dyYXl3b3JsZC5vCiBPQkpTLSQoQ09ORklHX0dSRVlFREdFX0ZJTFRFUikgICAgICAg ICAgICAgICArPSB2Zl9jb2xvcmNvbnN0YW5jeS5vCiBPQkpTLSQoQ09ORklHX0dVSURFRF9GSUxU RVIpICAgICAgICAgICAgICAgICArPSB2Zl9ndWlkZWQubwotT0JKUy0kKENPTkZJR19IQUxEQ0xV VF9GSUxURVIpICAgICAgICAgICAgICAgKz0gdmZfbHV0M2QubyBmcmFtZXN5bmMubworT0JKUy0k KENPTkZJR19IQUxEQ0xVVF9GSUxURVIpICAgICAgICAgICAgICAgKz0gdmZfbHV0M2QubyBsdXQz ZC5vIGZyYW1lc3luYy5vCiBPQkpTLSQoQ09ORklHX0hGTElQX0ZJTFRFUikgICAgICAgICAgICAg ICAgICArPSB2Zl9oZmxpcC5vCiBPQkpTLSQoQ09ORklHX0hGTElQX1ZVTEtBTl9GSUxURVIpICAg ICAgICAgICArPSB2Zl9mbGlwX3Z1bGthbi5vIHZ1bGthbi5vCiBPQkpTLSQoQ09ORklHX0hJU1RF UV9GSUxURVIpICAgICAgICAgICAgICAgICArPSB2Zl9oaXN0ZXEubwpAQCAtMzY3LDEwICszNjcs MTAgQEAgT0JKUy0kKENPTkZJR19MSU1JVERJRkZfRklMVEVSKSAgICAgICAgICAgICAgKz0gdmZf bGltaXRkaWZmLm8gZnJhbWVzeW5jLm8KIE9CSlMtJChDT05GSUdfTElNSVRFUl9GSUxURVIpICAg ICAgICAgICAgICAgICs9IHZmX2xpbWl0ZXIubwogT0JKUy0kKENPTkZJR19MT09QX0ZJTFRFUikg ICAgICAgICAgICAgICAgICAgKz0gZl9sb29wLm8KIE9CSlMtJChDT05GSUdfTFVNQUtFWV9GSUxU RVIpICAgICAgICAgICAgICAgICs9IHZmX2x1bWFrZXkubwotT0JKUy0kKENPTkZJR19MVVQxRF9G SUxURVIpICAgICAgICAgICAgICAgICAgKz0gdmZfbHV0M2QubworT0JKUy0kKENPTkZJR19MVVQx RF9GSUxURVIpICAgICAgICAgICAgICAgICAgKz0gdmZfbHV0M2QubyBsdXQzZC5vCiBPQkpTLSQo Q09ORklHX0xVVF9GSUxURVIpICAgICAgICAgICAgICAgICAgICArPSB2Zl9sdXQubwogT0JKUy0k KENPTkZJR19MVVQyX0ZJTFRFUikgICAgICAgICAgICAgICAgICAgKz0gdmZfbHV0Mi5vIGZyYW1l c3luYy5vCi1PQkpTLSQoQ09ORklHX0xVVDNEX0ZJTFRFUikgICAgICAgICAgICAgICAgICArPSB2 Zl9sdXQzZC5vIGZyYW1lc3luYy5vCitPQkpTLSQoQ09ORklHX0xVVDNEX0ZJTFRFUikgICAgICAg ICAgICAgICAgICArPSB2Zl9sdXQzZC5vIGx1dDNkLm8gZnJhbWVzeW5jLm8KIE9CSlMtJChDT05G SUdfTFVUUkdCX0ZJTFRFUikgICAgICAgICAgICAgICAgICs9IHZmX2x1dC5vCiBPQkpTLSQoQ09O RklHX0xVVFlVVl9GSUxURVIpICAgICAgICAgICAgICAgICArPSB2Zl9sdXQubwogT0JKUy0kKENP TkZJR19NQVNLRURDTEFNUF9GSUxURVIpICAgICAgICAgICAgKz0gdmZfbWFza2VkY2xhbXAubyBm cmFtZXN5bmMubwpAQCAtNTQ5LDcgKzU0OSw3IEBAIE9CSlMtJChDT05GSUdfVklEU1RBQlRSQU5T Rk9STV9GSUxURVIpICAgICAgICs9IHZpZHN0YWJ1dGlscy5vIHZmX3ZpZHN0YWJ0cmFuc2ZvCiBP QkpTLSQoQ09ORklHX1ZJRl9GSUxURVIpICAgICAgICAgICAgICAgICAgICArPSB2Zl92aWYubyBm cmFtZXN5bmMubwogT0JKUy0kKENPTkZJR19WSUdORVRURV9GSUxURVIpICAgICAgICAgICAgICAg Kz0gdmZfdmlnbmV0dGUubwogT0JKUy0kKENPTkZJR19WTUFGTU9USU9OX0ZJTFRFUikgICAgICAg ICAgICAgKz0gdmZfdm1hZm1vdGlvbi5vIGZyYW1lc3luYy5vCi1PQkpTLSQoQ09ORklHX1ZQUF9R U1ZfRklMVEVSKSAgICAgICAgICAgICAgICArPSB2Zl92cHBfcXN2Lm8KK09CSlMtJChDT05GSUdf VlBQX1FTVl9GSUxURVIpICAgICAgICAgICAgICAgICs9IHZmX3ZwcF9xc3YubyBsdXQzZC5vCiBP QkpTLSQoQ09ORklHX1ZTVEFDS19GSUxURVIpICAgICAgICAgICAgICAgICArPSB2Zl9zdGFjay5v IGZyYW1lc3luYy5vCiBPQkpTLSQoQ09ORklHX1czRkRJRl9GSUxURVIpICAgICAgICAgICAgICAg ICArPSB2Zl93M2ZkaWYubwogT0JKUy0kKENPTkZJR19XQVZFRk9STV9GSUxURVIpICAgICAgICAg ICAgICAgKz0gdmZfd2F2ZWZvcm0ubwpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvbHV0M2QuYyBi L2xpYmF2ZmlsdGVyL2x1dDNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MC4uMTczOTc5YWRjYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2ZmlsdGVyL2x1dDNkLmMKQEAg LTAsMCArMSw2NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgQ2zDqW1lbnQgQsWTc2No CisgKiBDb3B5cmlnaHQgKGMpIDIwMTggUGF1bCBCIE1haG9sCisgKgorICogVGhpcyBmaWxlIGlz IHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2Yg dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor ICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3 aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRh dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAw MjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlICJsdXQzZC5oIgorCisjaW5jbHVkZSA8Zmxv YXQuaD4KKworI2luY2x1ZGUgImxpYmF2dXRpbC9hdnN0cmluZy5oIgorI2luY2x1ZGUgImxpYmF2 dXRpbC9maWxlX29wZW4uaCIKKworI2RlZmluZSBFWFBPTkVOVF9NQVNLIDB4N0Y4MDAwMDAKKyNk ZWZpbmUgTUFOVElTU0FfTUFTSyAweDAwN0ZGRkZGCisjZGVmaW5lIFNJR05fTUFTSyAgICAgMHg4 MDAwMDAwMAorCitzdGF0aWMgaW5saW5lIGZsb2F0IHNhbml0aXplZihmbG9hdCBmKQoreworICAg IHVuaW9uIGF2X2ludGZsb2F0MzIgdDsKKyAgICB0LmYgPSBmOworCisgICAgaWYgKCh0LmkgJiBF WFBPTkVOVF9NQVNLKSA9PSBFWFBPTkVOVF9NQVNLKSB7CisgICAgICAgIGlmICgodC5pICYgTUFO VElTU0FfTUFTSykgIT0gMCkgeworICAgICAgICAgICAgLy8gTkFOCisgICAgICAgICAgICByZXR1 cm4gMC4wZjsKKyAgICAgICAgfSBlbHNlIGlmICh0LmkgJiBTSUdOX01BU0spIHsKKyAgICAgICAg ICAgIC8vIC1JTkYKKyAgICAgICAgICAgIHJldHVybiAtRkxUX01BWDsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIC8vICtJTkYKKyAgICAgICAgICAgIHJldHVybiBGTFRfTUFYOworICAg ICAgICB9CisgICAgfQorICAgIHJldHVybiBmOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IGxl cnBmKGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgZikKK3sKKyAgICByZXR1cm4gdjAgKyAodjEg LSB2MCkgKiBmOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCByZ2J2ZWMgbGVycChjb25zdCBz dHJ1Y3QgcmdidmVjICp2MCwgY29uc3Qgc3RydWN0IHJnYnZlYyAqdjEsIGZsb2F0IGYpCit7Cisg ICAgc3RydWN0IHJnYnZlYyB2ID0geworICAgICAgICBsZXJwZih2MC0+ciwgdjEtPnIsIGYpLCBs ZXJwZih2MC0+ZywgdjEtPmcsIGYpLCBsZXJwZih2MC0+YiwgdjEtPmIsIGYpCisgICAgfTsKKyAg ICByZXR1cm4gdjsKK30KKworaW50IGZmX2FsbG9jYXRlXzNkbHV0KEFWRmlsdGVyQ29udGV4dCAq Y3R4LCBMVVQzRENvbnRleHQgKmx1dDNkLCBpbnQgbHV0c2l6ZSwgaW50IHByZWx1dCkKK3sKKyAg ICBpbnQgaTsKKyAgICBpZiAobHV0c2l6ZSA8IDIgfHwgbHV0c2l6ZSA+IE1BWF9MRVZFTCkgewor ICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJUb28gbGFyZ2Ugb3IgaW52YWxpZCAz RCBMVVQgc2l6ZVxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAgfQor CisgICAgYXZfZnJlZXAoJmx1dDNkLT5sdXQpOworICAgIGx1dDNkLT5sdXQgPSBhdl9tYWxsb2Nf YXJyYXkobHV0c2l6ZSAqIGx1dHNpemUgKiBsdXRzaXplLCBzaXplb2YoKmx1dDNkLT5sdXQpKTsK KyAgICBpZiAoIWx1dDNkLT5sdXQpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisK KyAgICBpZiAocHJlbHV0KSB7CisgICAgICAgIGx1dDNkLT5wcmVsdXQuc2l6ZSA9IFBSRUxVVF9T SVpFOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgICAgICAgICAgICBhdl9m cmVlcCgmbHV0M2QtPnByZWx1dC5sdXRbaV0pOworICAgICAgICAgICAgbHV0M2QtPnByZWx1dC5s dXRbaV0gPSBhdl9tYWxsb2NfYXJyYXkoUFJFTFVUX1NJWkUsIHNpemVvZigqbHV0M2QtPnByZWx1 dC5sdXRbMF0pKTsKKyAgICAgICAgICAgIGlmICghbHV0M2QtPnByZWx1dC5sdXRbaV0pCisgICAg ICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgfQorICAgIH0gZWxz ZSB7CisgICAgICAgIGx1dDNkLT5wcmVsdXQuc2l6ZSA9IDA7CisgICAgICAgIGZvciAoaSA9IDA7 IGkgPCAzOyBpKyspIHsKKyAgICAgICAgICAgIGF2X2ZyZWVwKCZsdXQzZC0+cHJlbHV0Lmx1dFtp XSk7CisgICAgICAgIH0KKyAgICB9CisgICAgbHV0M2QtPmx1dHNpemUgPSBsdXRzaXplOworICAg IGx1dDNkLT5sdXRzaXplMiA9IGx1dHNpemUgKiBsdXRzaXplOworICAgIHJldHVybiAwOworfQor CitzdGF0aWMgaW50IHNldF9pZGVudGl0eV9tYXRyaXgoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIExV VDNEQ29udGV4dCAqbHV0M2QsIGludCBzaXplKQoreworICAgIGludCByZXQsIGksIGosIGs7Cisg ICAgY29uc3QgaW50IHNpemUyID0gc2l6ZSAqIHNpemU7CisgICAgY29uc3QgZmxvYXQgYyA9IDEu IC8gKHNpemUgLSAxKTsKKworICAgIHJldCA9IGZmX2FsbG9jYXRlXzNkbHV0KGN0eCwgbHV0M2Qs IHNpemUsIDApOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAg Zm9yIChrID0gMDsgayA8IHNpemU7IGsrKykgeworICAgICAgICBmb3IgKGogPSAwOyBqIDwgc2l6 ZTsgaisrKSB7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAg ICAgICAgICAgICAgc3RydWN0IHJnYnZlYyAqdmVjID0gJmx1dDNkLT5sdXRbayAqIHNpemUyICsg aiAqIHNpemUgKyBpXTsKKyAgICAgICAgICAgICAgICB2ZWMtPnIgPSBrICogYzsKKyAgICAgICAg ICAgICAgICB2ZWMtPmcgPSBqICogYzsKKyAgICAgICAgICAgICAgICB2ZWMtPmIgPSBpICogYzsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCisj ZGVmaW5lIE1BWF9MSU5FX1NJWkUgNTEyCisKK3N0YXRpYyBpbnQgc2tpcF9saW5lKGNvbnN0IGNo YXIgKnApCit7CisgICAgd2hpbGUgKCpwICYmIGF2X2lzc3BhY2UoKnApKQorICAgICAgICBwKys7 CisgICAgcmV0dXJuICEqcCB8fCAqcCA9PSAnIyc7Cit9CisKK3N0YXRpYyBjaGFyKiBmZ2V0X25l eHRfd29yZChjaGFyKiBkc3QsIGludCBtYXgsIEZJTEUqIGYpCit7CisgICAgaW50IGM7CisgICAg Y2hhciAqcCA9IGRzdDsKKworICAgIC8qIGZvciBudWxsICovCisgICAgbWF4LS07CisgICAgLyog c2tpcCB1bnRpbCBuZXh0IG5vbiB3aGl0ZXNwYWNlIGNoYXIgKi8KKyAgICB3aGlsZSAoKGMgPSBm Z2V0YyhmKSkgIT0gRU9GKSB7CisgICAgICAgIGlmIChhdl9pc3NwYWNlKGMpKQorICAgICAgICAg ICAgY29udGludWU7CisKKyAgICAgICAgKnArKyA9IGM7CisgICAgICAgIG1heC0tOworICAgICAg ICBicmVhazsKKyAgICB9CisKKyAgICAvKiBnZXQgbWF4IGJ5dGVzIG9yIHVwIHVudGlsIG5leHQg d2hpdGVzcGFjZSBjaGFyICovCisgICAgZm9yICg7IG1heCA+IDA7IG1heC0tKSB7CisgICAgICAg IGlmICgoYyA9IGZnZXRjKGYpKSA9PSBFT0YpCisgICAgICAgICAgICBicmVhazsKKworICAgICAg ICBpZiAoYXZfaXNzcGFjZShjKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICpwKysg PSBjOworICAgIH0KKworICAgICpwID0gMDsKKyAgICBpZiAocCA9PSBkc3QpCisgICAgICAgIHJl dHVybiBOVUxMOworICAgIHJldHVybiBwOworfQorCisKKyNkZWZpbmUgTkVYVF9MSU5FKGxvb3Bf Y29uZCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIWZnZXRzKGxp bmUsIHNpemVvZihsaW5lKSwgZikpIHsgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYXZf bG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5leHBlY3RlZCBFT0ZcbiIpOyAgICAgIFwKKyAgICAg ICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7ICAgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKK30gd2hpbGUgKGxvb3BfY29uZCkKKworI2RlZmluZSBORVhUX0xJTkVfT1JfR09UTyhs b29wX2NvbmQsIGxhYmVsKSBkbyB7ICAgICAgICAgICAgXAorICAgIGlmICghZmdldHMobGluZSwg c2l6ZW9mKGxpbmUpLCBmKSkgeyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhdl9sb2co Y3R4LCBBVl9MT0dfRVJST1IsICJVbmV4cGVjdGVkIEVPRlxuIik7ICAgICAgXAorICAgICAgICBy ZXQgPSBBVkVSUk9SX0lOVkFMSUREQVRBOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg ICAgICBnb3RvIGxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorfSB3aGlsZSAobG9vcF9jb25kKQorCisvKiBCYXNpY2FsbHkgciBnIGFuZCBiIGZs b2F0IHZhbHVlcyBvbiBlYWNoIGxpbmUsIHdpdGggYSBmYWN1bHRhdGl2ZSAzRExVVFNJWkUKKyAq IGRpcmVjdGl2ZTsgc2VlbXMgdG8gYmUgZ2VuZXJhdGVkIGJ5IERhdmluY2kgKi8KK3N0YXRpYyBp bnQgcGFyc2VfZGF0KEFWRmlsdGVyQ29udGV4dCAqY3R4LCBMVVQzRENvbnRleHQgKmx1dDNkLCBG SUxFICpmKQoreworICAgIGNoYXIgbGluZVtNQVhfTElORV9TSVpFXTsKKyAgICBpbnQgcmV0LCBp LCBqLCBrLCBzaXplLCBzaXplMjsKKworICAgIGx1dDNkLT5sdXRzaXplID0gc2l6ZSA9IDMzOwor ICAgIHNpemUyID0gc2l6ZSAqIHNpemU7CisKKyAgICBORVhUX0xJTkUoc2tpcF9saW5lKGxpbmUp KTsKKyAgICBpZiAoIXN0cm5jbXAobGluZSwgIjNETFVUU0laRSAiLCAxMCkpIHsKKyAgICAgICAg c2l6ZSA9IHN0cnRvbChsaW5lICsgMTAsIE5VTEwsIDApOworCisgICAgICAgIE5FWFRfTElORShz a2lwX2xpbmUobGluZSkpOworICAgIH0KKworICAgIHJldCA9IGZmX2FsbG9jYXRlXzNkbHV0KGN0 eCwgbHV0M2QsIHNpemUsIDApOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0 OworCisgICAgZm9yIChrID0gMDsgayA8IHNpemU7IGsrKykgeworICAgICAgICBmb3IgKGogPSAw OyBqIDwgc2l6ZTsgaisrKSB7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsr KSB7CisgICAgICAgICAgICAgICAgc3RydWN0IHJnYnZlYyAqdmVjID0gJmx1dDNkLT5sdXRbayAq IHNpemUyICsgaiAqIHNpemUgKyBpXTsKKyAgICAgICAgICAgICAgICBpZiAoayAhPSAwIHx8IGog IT0gMCB8fCBpICE9IDApCisgICAgICAgICAgICAgICAgICAgIE5FWFRfTElORShza2lwX2xpbmUo bGluZSkpOworICAgICAgICAgICAgICAgIGlmIChhdl9zc2NhbmYobGluZSwgIiVmICVmICVmIiwg JnZlYy0+ciwgJnZlYy0+ZywgJnZlYy0+YikgIT0gMykKKyAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9 CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIElyaWRhcyBmb3JtYXQgKi8KK3N0YXRpYyBpbnQgcGFy c2VfY3ViZShBVkZpbHRlckNvbnRleHQgKmN0eCwgTFVUM0RDb250ZXh0ICpsdXQzZCwgRklMRSAq ZikKK3sKKyAgICBjaGFyIGxpbmVbTUFYX0xJTkVfU0laRV07CisgICAgZmxvYXQgbWluWzNdID0g ezAuMCwgMC4wLCAwLjB9OworICAgIGZsb2F0IG1heFszXSA9IHsxLjAsIDEuMCwgMS4wfTsKKwor ICAgIHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7CisgICAgICAgIGlmICgh c3RybmNtcChsaW5lLCAiTFVUXzNEX1NJWkUiLCAxMSkpIHsKKyAgICAgICAgICAgIGludCByZXQs IGksIGosIGs7CisgICAgICAgICAgICBjb25zdCBpbnQgc2l6ZSA9IHN0cnRvbChsaW5lICsgMTIs IE5VTEwsIDApOworICAgICAgICAgICAgY29uc3QgaW50IHNpemUyID0gc2l6ZSAqIHNpemU7CisK KyAgICAgICAgICAgIHJldCA9IGZmX2FsbG9jYXRlXzNkbHV0KGN0eCwgbHV0M2QsIHNpemUsIDAp OworICAgICAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsK KworICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IHNpemU7IGsrKykgeworICAgICAgICAgICAg ICAgIGZvciAoaiA9IDA7IGogPCBzaXplOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZm9y IChpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHJnYnZlYyAqdmVjID0gJmx1dDNkLT5sdXRbaSAqIHNpemUyICsgaiAqIHNpemUgKyBrXTsKKwor ICAgICAgICAgICAgICAgICAgICAgICAgZG8gewordHJ5X2FnYWluOgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE5FWFRfTElORSgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoIXN0cm5jbXAobGluZSwgIkRPTUFJTl8iLCA3KSkgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBmbG9hdCAqdmFscyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmICAgICAgKCFzdHJuY21wKGxpbmUgKyA3LCAiTUlOICIsIDQpKSB2YWxzID0gbWlu OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghc3RybmNtcChsaW5l ICsgNywgIk1BWCAiLCA0KSkgdmFscyA9IG1heDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKCF2YWxzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGF2X3NzY2FuZihsaW5lICsgMTEsICIlZiAlZiAlZiIsIHZhbHMsIHZhbHMgKyAxLCB2YWxzICsg Mik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19E RUJVRywgIm1pbjogJWYgJWYgJWYgfCBtYXg6ICVmICVmICVmXG4iLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbWluWzBdLCBtaW5bMV0sIG1pblsyXSwgbWF4WzBdLCBt YXhbMV0sIG1heFsyXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gdHJ5 X2FnYWluOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cm5jbXAo bGluZSwgIlRJVExFIiwgNSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290 byB0cnlfYWdhaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICAgICAgfSB3aGlsZSAoc2tpcF9saW5lKGxpbmUpKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChhdl9zc2NhbmYobGluZSwgIiVmICVmICVmIiwgJnZlYy0+ciwgJnZlYy0+Zywg JnZlYy0+YikgIT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisg ICAgbHV0M2QtPnNjYWxlLnIgPSBhdl9jbGlwZigxLiAvIChtYXhbMF0gLSBtaW5bMF0pLCAwLmYs IDEuZik7CisgICAgbHV0M2QtPnNjYWxlLmcgPSBhdl9jbGlwZigxLiAvIChtYXhbMV0gLSBtaW5b MV0pLCAwLmYsIDEuZik7CisgICAgbHV0M2QtPnNjYWxlLmIgPSBhdl9jbGlwZigxLiAvIChtYXhb Ml0gLSBtaW5bMl0pLCAwLmYsIDEuZik7CisKKyAgICByZXR1cm4gMDsKK30KKworLyogQXNzdW1l IDE3eDE3eDE3IExVVCB3aXRoIGEgMTYtYml0IGRlcHRoCisgKiBGSVhNRTogaXQgc2VlbXMgdGhl cmUgYXJlIHZhcmlvdXMgM2RsIGZvcm1hdHMgKi8KK3N0YXRpYyBpbnQgcGFyc2VfM2RsKEFWRmls dGVyQ29udGV4dCAqY3R4LCBMVVQzRENvbnRleHQgKmx1dDNkLCBGSUxFICpmKQoreworICAgIGNo YXIgbGluZVtNQVhfTElORV9TSVpFXTsKKyAgICBpbnQgcmV0LCBpLCBqLCBrOworICAgIGNvbnN0 IGludCBzaXplID0gMTc7CisgICAgY29uc3QgaW50IHNpemUyID0gMTcgKiAxNzsKKyAgICBjb25z dCBmbG9hdCBzY2FsZSA9IDE2KjE2KjE2OworCisgICAgbHV0M2QtPmx1dHNpemUgPSBzaXplOwor CisgICAgcmV0ID0gZmZfYWxsb2NhdGVfM2RsdXQoY3R4LCBsdXQzZCwgc2l6ZSwgMCk7CisgICAg aWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBORVhUX0xJTkUoc2tpcF9s aW5lKGxpbmUpKTsKKyAgICBmb3IgKGsgPSAwOyBrIDwgc2l6ZTsgaysrKSB7CisgICAgICAgIGZv ciAoaiA9IDA7IGogPCBzaXplOyBqKyspIHsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBz aXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpbnQgciwgZywgYjsKKyAgICAgICAgICAgICAg ICBzdHJ1Y3QgcmdidmVjICp2ZWMgPSAmbHV0M2QtPmx1dFtrICogc2l6ZTIgKyBqICogc2l6ZSAr IGldOworCisgICAgICAgICAgICAgICAgTkVYVF9MSU5FKHNraXBfbGluZShsaW5lKSk7CisgICAg ICAgICAgICAgICAgaWYgKGF2X3NzY2FuZihsaW5lLCAiJWQgJWQgJWQiLCAmciwgJmcsICZiKSAh PSAzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAg ICAgICAgICAgICAgICB2ZWMtPnIgPSByIC8gc2NhbGU7CisgICAgICAgICAgICAgICAgdmVjLT5n ID0gZyAvIHNjYWxlOworICAgICAgICAgICAgICAgIHZlYy0+YiA9IGIgLyBzY2FsZTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLyogUGFuZG9y YSBmb3JtYXQgKi8KK3N0YXRpYyBpbnQgcGFyc2VfbTNkKEFWRmlsdGVyQ29udGV4dCAqY3R4LCBM VVQzRENvbnRleHQgKmx1dDNkLCBGSUxFICpmKQoreworICAgIGZsb2F0IHNjYWxlOworICAgIGlu dCByZXQsIGksIGosIGssIHNpemUsIHNpemUyLCBpbiA9IC0xLCBvdXQgPSAtMTsKKyAgICBjaGFy IGxpbmVbTUFYX0xJTkVfU0laRV07CisgICAgdWludDhfdCByZ2JfbWFwWzNdID0gezAsIDEsIDJ9 OworCisgICAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHsKKyAgICAgICAg aWYgICAgICAoIXN0cm5jbXAobGluZSwgImluIiwgIDIpKSBpbiAgPSBzdHJ0b2wobGluZSArIDIs IE5VTEwsIDApOworICAgICAgICBlbHNlIGlmICghc3RybmNtcChsaW5lLCAib3V0IiwgMykpIG91 dCA9IHN0cnRvbChsaW5lICsgMywgTlVMTCwgMCk7CisgICAgICAgIGVsc2UgaWYgKCFzdHJuY21w KGxpbmUsICJ2YWx1ZXMiLCA2KSkgeworICAgICAgICAgICAgY29uc3QgY2hhciAqcCA9IGxpbmUg KyA2OworI2RlZmluZSBTRVRfQ09MT1IoaWQpIGRvIHsgICAgICAgICAgICAgICAgICBcCisgICAg d2hpbGUgKGF2X2lzc3BhY2UoKnApKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcCsrOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN3aXRjaCAoKnApIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSAncic6IHJnYl9tYXBbaWRdID0gMDsgYnJl YWs7ICAgICAgIFwKKyAgICBjYXNlICdnJzogcmdiX21hcFtpZF0gPSAxOyBicmVhazsgICAgICAg XAorICAgIGNhc2UgJ2InOiByZ2JfbWFwW2lkXSA9IDI7IGJyZWFrOyAgICAgICBcCisgICAgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB3aGlsZSAoKnAgJiYg IWF2X2lzc3BhY2UoKnApKSAgICAgICAgICAgXAorICAgICAgICBwKys7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQorICAgICAgICAgICAgU0VUX0NPTE9SKDAp OworICAgICAgICAgICAgU0VUX0NPTE9SKDEpOworICAgICAgICAgICAgU0VUX0NPTE9SKDIpOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaW4gPT0gLTEg fHwgb3V0ID09IC0xKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgImluIGFu ZCBvdXQgbXVzdCBiZSBkZWZpbmVkXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7CisgICAgfQorICAgIGlmIChpbiA8IDIgfHwgb3V0IDwgMiB8fAorICAgICAgICBpbiAg PiBNQVhfTEVWRUwqTUFYX0xFVkVMKk1BWF9MRVZFTCB8fAorICAgICAgICBvdXQgPiBNQVhfTEVW RUwqTUFYX0xFVkVMKk1BWF9MRVZFTCkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJS T1IsICJpbnZhbGlkIGluICglZCkgb3Igb3V0ICglZClcbiIsIGluLCBvdXQpOworICAgICAgICBy ZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9CisgICAgZm9yIChzaXplID0gMTsgc2l6 ZSpzaXplKnNpemUgPCBpbjsgc2l6ZSsrKTsKKyAgICBsdXQzZC0+bHV0c2l6ZSA9IHNpemU7Cisg ICAgc2l6ZTIgPSBzaXplICogc2l6ZTsKKworICAgIHJldCA9IGZmX2FsbG9jYXRlXzNkbHV0KGN0 eCwgbHV0M2QsIHNpemUsIDApOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0 OworCisgICAgc2NhbGUgPSAxLiAvIChvdXQgLSAxKTsKKworICAgIGZvciAoayA9IDA7IGsgPCBz aXplOyBrKyspIHsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IHNpemU7IGorKykgeworICAgICAg ICAgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgICAgIHN0cnVj dCByZ2J2ZWMgKnZlYyA9ICZsdXQzZC0+bHV0W2sgKiBzaXplMiArIGogKiBzaXplICsgaV07Cisg ICAgICAgICAgICAgICAgZmxvYXQgdmFsWzNdOworCisgICAgICAgICAgICAgICAgTkVYVF9MSU5F KDApOworICAgICAgICAgICAgICAgIGlmIChhdl9zc2NhbmYobGluZSwgIiVmICVmICVmIiwgdmFs LCB2YWwgKyAxLCB2YWwgKyAyKSAhPSAzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgICAgICAgICB2ZWMtPnIgPSB2YWxbcmdiX21hcFsw XV0gKiBzY2FsZTsKKyAgICAgICAgICAgICAgICB2ZWMtPmcgPSB2YWxbcmdiX21hcFsxXV0gKiBz Y2FsZTsKKyAgICAgICAgICAgICAgICB2ZWMtPmIgPSB2YWxbcmdiX21hcFsyXV0gKiBzY2FsZTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBuZWFyZXN0X3NhbXBsZV9pbmRleChmbG9hdCAqZGF0YSwgZmxvYXQgeCwgaW50IGxv dywgaW50IGhpKQoreworICAgIGludCBtaWQ7CisgICAgaWYgKHggPCBkYXRhW2xvd10pCisgICAg ICAgIHJldHVybiBsb3c7CisKKyAgICBpZiAoeCA+IGRhdGFbaGldKQorICAgICAgICByZXR1cm4g aGk7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGF2X2Fzc2VydDAoeCA+PSBkYXRhW2xvd10p OworICAgICAgICBhdl9hc3NlcnQwKHggPD0gZGF0YVtoaV0pOworICAgICAgICBhdl9hc3NlcnQw KChoaS1sb3cpID4gMCk7CisKKyAgICAgICAgaWYgKGhpIC0gbG93ID09IDEpCisgICAgICAgICAg ICByZXR1cm4gbG93OworCisgICAgICAgIG1pZCA9IChsb3cgKyBoaSkgLyAyOworCisgICAgICAg IGlmICh4IDwgZGF0YVttaWRdKQorICAgICAgICAgICAgaGkgPSBtaWQ7CisgICAgICAgIGVsc2UK KyAgICAgICAgICAgIGxvdyA9IG1pZDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworI2Rl ZmluZSBORVhUX0ZMT0FUX09SX0dPVE8odmFsdWUsIGxhYmVsKSAgICAgICAgICAgICAgICAgICAg XAorICAgIGlmICghZmdldF9uZXh0X3dvcmQobGluZSwgc2l6ZW9mKGxpbmUpICxmKSkgeyAgICAg ICAgICAgXAorICAgICAgICByZXQgPSBBVkVSUk9SX0lOVkFMSUREQVRBOyAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgICAgICBnb3RvIGxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChhdl9zc2NhbmYobGluZSwgIiVmIiwg JnZhbHVlKSAhPSAxKSB7ICAgICAgICAgICAgICAgXAorICAgICAgICByZXQgPSBBVkVSUk9SX0lO VkFMSUREQVRBOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBnb3RvIGxhYmVs OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKworc3Rh dGljIGludCBwYXJzZV9jaW5lc3BhY2UoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIExVVDNEQ29udGV4 dCAqbHV0M2QsIEZJTEUgKmYpCit7CisgICAgY2hhciBsaW5lW01BWF9MSU5FX1NJWkVdOworICAg IGZsb2F0IGluX21pblszXSAgPSB7MC4wLCAwLjAsIDAuMH07CisgICAgZmxvYXQgaW5fbWF4WzNd ICA9IHsxLjAsIDEuMCwgMS4wfTsKKyAgICBmbG9hdCBvdXRfbWluWzNdID0gezAuMCwgMC4wLCAw LjB9OworICAgIGZsb2F0IG91dF9tYXhbM10gPSB7MS4wLCAxLjAsIDEuMH07CisgICAgaW50IGlu c2lkZV9tZXRhZGF0YSA9IDAsIHNpemUsIHNpemUyOworICAgIGludCBwcmVsdXQgPSAwOworICAg IGludCByZXQgPSAwOworCisgICAgaW50IHByZWx1dF9zaXplc1szXSA9IHswLCAwLCAwfTsKKyAg ICBmbG9hdCAqaW5fcHJlbHV0WzNdICA9IHtOVUxMLCBOVUxMLCBOVUxMfTsKKyAgICBmbG9hdCAq b3V0X3ByZWx1dFszXSA9IHtOVUxMLCBOVUxMLCBOVUxMfTsKKworICAgIE5FWFRfTElORV9PUl9H T1RPKHNraXBfbGluZShsaW5lKSwgZW5kKTsKKyAgICBpZiAoc3RybmNtcChsaW5lLCAiQ1NQTFVU VjEwMCIsIDEwKSkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJOb3QgY2lu ZVNwYWNlIExVVCBmb3JtYXRcbiIpOworICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cisg ICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIE5FWFRfTElORV9PUl9HT1RPKHNraXBfbGlu ZShsaW5lKSwgZW5kKTsKKyAgICBpZiAoc3RybmNtcChsaW5lLCAiM0QiLCAyKSkgeworICAgICAg ICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJOb3QgM0QgTFVUIGZvcm1hdFxuIik7CisgICAg ICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisg ICAgd2hpbGUgKDEpIHsKKyAgICAgICAgTkVYVF9MSU5FX09SX0dPVE8oc2tpcF9saW5lKGxpbmUp LCBlbmQpOworCisgICAgICAgIGlmICghc3RybmNtcChsaW5lLCAiQkVHSU4gTUVUQURBVEEiLCAx NCkpIHsKKyAgICAgICAgICAgIGluc2lkZV9tZXRhZGF0YSA9IDE7CisgICAgICAgICAgICBjb250 aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXN0cm5jbXAobGluZSwgIkVORCBNRVRBREFU QSIsIDEyKSkgeworICAgICAgICAgICAgaW5zaWRlX21ldGFkYXRhID0gMDsKKyAgICAgICAgICAg IGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChpbnNpZGVfbWV0YWRhdGEgPT0gMCkg eworICAgICAgICAgICAgaW50IHNpemVfciwgc2l6ZV9nLCBzaXplX2I7CisKKyAgICAgICAgICAg IGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgICAgICAgICAgICAgICAgaW50IG5wb2lu dHMgPSBzdHJ0b2wobGluZSwgTlVMTCwgMCk7CisKKyAgICAgICAgICAgICAgICBpZiAobnBvaW50 cyA+IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgdixsYXN0OworCisgICAgICAgICAg ICAgICAgICAgIGlmIChucG9pbnRzID4gUFJFTFVUX1NJWkUpIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlByZWx1dCBzaXplIHRvbyBsYXJnZS5c biIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsK KyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICAgICAgICAgICAgICB9 CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluX3ByZWx1dFtpXSB8fCBvdXRfcHJlbHV0W2ld KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJJ bnZhbGlkIGZpbGUgaGFzIG11bHRpcGxlIHByZWx1dHMuXG4iKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIHJldCA9IEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAgICAgICAgICAgICAg ICBnb3RvIGVuZDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg IGluX3ByZWx1dFtpXSAgPSAoZmxvYXQqKWF2X21hbGxvYyhucG9pbnRzICogc2l6ZW9mKGZsb2F0 KSk7CisgICAgICAgICAgICAgICAgICAgIG91dF9wcmVsdXRbaV0gPSAoZmxvYXQqKWF2X21hbGxv YyhucG9pbnRzICogc2l6ZW9mKGZsb2F0KSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5f cHJlbHV0W2ldIHx8ICFvdXRfcHJlbHV0W2ldKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy ZXQgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsK KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHByZWx1dF9zaXpl c1tpXSA9IG5wb2ludHM7CisgICAgICAgICAgICAgICAgICAgIGluX21pbltpXSA9IEZMVF9NQVg7 CisgICAgICAgICAgICAgICAgICAgIGluX21heFtpXSA9IC1GTFRfTUFYOworICAgICAgICAgICAg ICAgICAgICBvdXRfbWluW2ldID0gRkxUX01BWDsKKyAgICAgICAgICAgICAgICAgICAgb3V0X21h eFtpXSA9IC1GTFRfTUFYOworCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBq IDwgbnBvaW50czsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBORVhUX0ZMT0FUX09S X0dPVE8odiwgZW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgaW5fbWluW2ldID0gRkZNSU4o aW5fbWluW2ldLCB2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluX21heFtpXSA9IEZGTUFY KGluX21heFtpXSwgdik7CisgICAgICAgICAgICAgICAgICAgICAgICBpbl9wcmVsdXRbaV1bal0g PSB2OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPiAwICYmIHYgPCBsYXN0KSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiSW52 YWxpZCBmaWxlLCBub24gaW5jcmVhc2luZyBwcmVsdXQuXG4iKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ290byBlbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgICAgICBsYXN0ID0gdjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg ICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnBvaW50czsgaisrKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICBORVhUX0ZMT0FUX09SX0dPVE8odiwgZW5kKQorICAgICAgICAgICAgICAg ICAgICAgICAgb3V0X21pbltpXSA9IEZGTUlOKG91dF9taW5baV0sIHYpOworICAgICAgICAgICAg ICAgICAgICAgICAgb3V0X21heFtpXSA9IEZGTUFYKG91dF9tYXhbaV0sIHYpOworICAgICAgICAg ICAgICAgICAgICAgICAgb3V0X3ByZWx1dFtpXVtqXSA9IHY7CisgICAgICAgICAgICAgICAgICAg IH0KKworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnBvaW50cyA9PSAyKSAgeworICAgICAg ICAgICAgICAgICAgICBORVhUX0xJTkVfT1JfR09UTyhza2lwX2xpbmUobGluZSksIGVuZCk7Cisg ICAgICAgICAgICAgICAgICAgIGlmIChhdl9zc2NhbmYobGluZSwgIiVmICVmIiwgJmluX21pbltp XSwgJmluX21heFtpXSkgIT0gMikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gQVZF UlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kOworICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIE5FWFRfTElORV9PUl9HT1RP KHNraXBfbGluZShsaW5lKSwgZW5kKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF2X3NzY2Fu ZihsaW5lLCAiJWYgJWYiLCAmb3V0X21pbltpXSwgJm91dF9tYXhbaV0pICE9IDIpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHJldCA9IEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAg ICAgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9H X0VSUk9SLCAiVW5zdXBwb3J0ZWQgbnVtYmVyIG9mIHByZS1sdXQgcG9pbnRzLlxuIik7CisgICAg ICAgICAgICAgICAgICAgIHJldCA9IEFWRVJST1JfUEFUQ0hXRUxDT01FOworICAgICAgICAgICAg ICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBO RVhUX0xJTkVfT1JfR09UTyhza2lwX2xpbmUobGluZSksIGVuZCk7CisgICAgICAgICAgICB9CisK KyAgICAgICAgICAgIGlmIChhdl9zc2NhbmYobGluZSwgIiVkICVkICVkIiwgJnNpemVfciwgJnNp emVfZywgJnNpemVfYikgIT0gMykgeworICAgICAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRUlO VkFMKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGlmIChzaXplX3IgIT0gc2l6ZV9nIHx8IHNpemVfciAhPSBzaXplX2IpIHsKKyAgICAgICAg ICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJVbnN1cHBvcnRlZCBzaXplIGNvbWJp bmF0aW9uOiAlZHglZHglZC5cbiIsIHNpemVfciwgc2l6ZV9nLCBzaXplX2IpOworICAgICAgICAg ICAgICAgIHJldCA9IEFWRVJST1JfUEFUQ0hXRUxDT01FOworICAgICAgICAgICAgICAgIGdvdG8g ZW5kOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzaXplID0gc2l6ZV9yOworICAgICAg ICAgICAgc2l6ZTIgPSBzaXplICogc2l6ZTsKKworICAgICAgICAgICAgaWYgKHByZWx1dF9zaXpl c1swXSAmJiBwcmVsdXRfc2l6ZXNbMV0gJiYgcHJlbHV0X3NpemVzWzJdKQorICAgICAgICAgICAg ICAgIHByZWx1dCA9IDE7CisKKyAgICAgICAgICAgIHJldCA9IGZmX2FsbG9jYXRlXzNkbHV0KGN0 eCwgbHV0M2QsIHNpemUsIHByZWx1dCk7CisgICAgICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAg ICAgICAgICAgICByZXR1cm4gcmV0OworCisgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8 IHNpemU7IGsrKykgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2l6ZTsg aisrKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsr KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmdidmVjICp2ZWMgPSAmbHV0M2Qt Pmx1dFtpICogc2l6ZTIgKyBqICogc2l6ZSArIGtdOworCisgICAgICAgICAgICAgICAgICAgICAg ICBORVhUX0xJTkVfT1JfR09UTyhza2lwX2xpbmUobGluZSksIGVuZCk7CisgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoYXZfc3NjYW5mKGxpbmUsICIlZiAlZiAlZiIsICZ2ZWMtPnIsICZ2ZWMt PmcsICZ2ZWMtPmIpICE9IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBB VkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5k OworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICB2 ZWMtPnIgKj0gb3V0X21heFswXSAtIG91dF9taW5bMF07CisgICAgICAgICAgICAgICAgICAgICAg ICB2ZWMtPmcgKj0gb3V0X21heFsxXSAtIG91dF9taW5bMV07CisgICAgICAgICAgICAgICAgICAg ICAgICB2ZWMtPmIgKj0gb3V0X21heFsyXSAtIG91dF9taW5bMl07CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHByZWx1dCkgeworICAgICAgICBmb3Ig KGludCBjID0gMDsgYyA8IDM7IGMrKykgeworCisgICAgICAgICAgICBsdXQzZC0+cHJlbHV0Lm1p bltjXSA9IGluX21pbltjXTsKKyAgICAgICAgICAgIGx1dDNkLT5wcmVsdXQubWF4W2NdID0gaW5f bWF4W2NdOworICAgICAgICAgICAgbHV0M2QtPnByZWx1dC5zY2FsZVtjXSA9ICAoMS4wZiAvIChm bG9hdCkoaW5fbWF4W2NdIC0gaW5fbWluW2NdKSkgKiAobHV0M2QtPnByZWx1dC5zaXplIC0gMSk7 CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbHV0M2QtPnByZWx1dC5zaXplOyAr K2kpIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBtaXggPSAoZmxvYXQpIGkgLyAoZmxvYXQpKGx1 dDNkLT5wcmVsdXQuc2l6ZSAtIDEpOworICAgICAgICAgICAgICAgIGZsb2F0IHggPSBsZXJwZihp bl9taW5bY10sIGluX21heFtjXSwgbWl4KSwgYSwgYjsKKworICAgICAgICAgICAgICAgIGludCBp ZHggPSBuZWFyZXN0X3NhbXBsZV9pbmRleChpbl9wcmVsdXRbY10sIHgsIDAsIHByZWx1dF9zaXpl c1tjXS0xKTsKKyAgICAgICAgICAgICAgICBhdl9hc3NlcnQwKGlkeCArIDEgPCBwcmVsdXRfc2l6 ZXNbY10pOworCisgICAgICAgICAgICAgICAgYSAgID0gb3V0X3ByZWx1dFtjXVtpZHggKyAwXTsK KyAgICAgICAgICAgICAgICBiICAgPSBvdXRfcHJlbHV0W2NdW2lkeCArIDFdOworICAgICAgICAg ICAgICAgIG1peCA9IHggLSBpbl9wcmVsdXRbY11baWR4XTsKKworICAgICAgICAgICAgICAgIGx1 dDNkLT5wcmVsdXQubHV0W2NdW2ldID0gc2FuaXRpemVmKGxlcnBmKGEsIGIsIG1peCkpOworICAg ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGx1dDNkLT5zY2FsZS5yID0gMS4wMGY7Cisg ICAgICAgIGx1dDNkLT5zY2FsZS5nID0gMS4wMGY7CisgICAgICAgIGx1dDNkLT5zY2FsZS5iID0g MS4wMGY7CisKKyAgICB9IGVsc2UgeworICAgICAgICBsdXQzZC0+c2NhbGUuciA9IGF2X2NsaXBm KDEuIC8gKGluX21heFswXSAtIGluX21pblswXSksIDAuZiwgMS5mKTsKKyAgICAgICAgbHV0M2Qt PnNjYWxlLmcgPSBhdl9jbGlwZigxLiAvIChpbl9tYXhbMV0gLSBpbl9taW5bMV0pLCAwLmYsIDEu Zik7CisgICAgICAgIGx1dDNkLT5zY2FsZS5iID0gYXZfY2xpcGYoMS4gLyAoaW5fbWF4WzJdIC0g aW5fbWluWzJdKSwgMC5mLCAxLmYpOworICAgIH0KKworZW5kOgorICAgIGZvciAoaW50IGMgPSAw OyBjIDwgMzsgYysrKSB7CisgICAgICAgIGF2X2ZyZWVwKCZpbl9wcmVsdXRbY10pOworICAgICAg ICBhdl9mcmVlcCgmb3V0X3ByZWx1dFtjXSk7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisK K2F2X2NvbGQgaW50IGZmX2x1dDNkX2luaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIExVVDNEQ29u dGV4dCAqbHV0M2QpCit7CisgICAgaW50IHJldDsKKyAgICBGSUxFICpmOworICAgIGNvbnN0IGNo YXIgKmV4dDsKKworICAgIGx1dDNkLT5zY2FsZS5yID0gbHV0M2QtPnNjYWxlLmcgPSBsdXQzZC0+ c2NhbGUuYiA9IDEuZjsKKworICAgIGlmICghbHV0M2QtPmZpbGUpIHsKKyAgICAgICAgcmV0dXJu IHNldF9pZGVudGl0eV9tYXRyaXgoY3R4LCBsdXQzZCwgMzIpOworICAgIH0KKworICAgIGYgPSBh dnByaXZfZm9wZW5fdXRmOChsdXQzZC0+ZmlsZSwgInIiKTsKKyAgICBpZiAoIWYpIHsKKyAgICAg ICAgcmV0ID0gQVZFUlJPUihlcnJubyk7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJP UiwgIiVzOiAlc1xuIiwgbHV0M2QtPmZpbGUsIGF2X2VycjJzdHIocmV0KSk7CisgICAgICAgIHJl dHVybiByZXQ7CisgICAgfQorCisgICAgZXh0ID0gc3RycmNocihsdXQzZC0+ZmlsZSwgJy4nKTsK KyAgICBpZiAoIWV4dCkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJVbmFi bGUgdG8gZ3Vlc3MgdGhlIGZvcm1hdCBmcm9tIHRoZSBleHRlbnNpb25cbiIpOworICAgICAgICBy ZXQgPSBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisgICAg ZXh0Kys7CisKKyAgICBpZiAoIWF2X3N0cmNhc2VjbXAoZXh0LCAiZGF0IikpIHsKKyAgICAgICAg cmV0ID0gcGFyc2VfZGF0KGN0eCwgbHV0M2QsIGYpOworICAgIH0gZWxzZSBpZiAoIWF2X3N0cmNh c2VjbXAoZXh0LCAiM2RsIikpIHsKKyAgICAgICAgcmV0ID0gcGFyc2VfM2RsKGN0eCwgbHV0M2Qs IGYpOworICAgIH0gZWxzZSBpZiAoIWF2X3N0cmNhc2VjbXAoZXh0LCAiY3ViZSIpKSB7CisgICAg ICAgIHJldCA9IHBhcnNlX2N1YmUoY3R4LCBsdXQzZCwgZik7CisgICAgfSBlbHNlIGlmICghYXZf c3RyY2FzZWNtcChleHQsICJtM2QiKSkgeworICAgICAgICByZXQgPSBwYXJzZV9tM2QoY3R4LCBs dXQzZCwgZik7CisgICAgfSBlbHNlIGlmICghYXZfc3RyY2FzZWNtcChleHQsICJjc3AiKSkgewor ICAgICAgICByZXQgPSBwYXJzZV9jaW5lc3BhY2UoY3R4LCBsdXQzZCwgZik7CisgICAgfSBlbHNl IHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5yZWNvZ25pemVkICcuJXMn IGZpbGUgdHlwZVxuIiwgZXh0KTsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOworICAg IH0KKworICAgIGlmICghcmV0ICYmICFsdXQzZC0+bHV0c2l6ZSkgeworICAgICAgICBhdl9sb2co Y3R4LCBBVl9MT0dfRVJST1IsICIzRCBMVVQgaXMgZW1wdHlcbiIpOworICAgICAgICByZXQgPSBB VkVSUk9SX0lOVkFMSUREQVRBOworICAgIH0KKworZW5kOgorICAgIGZjbG9zZShmKTsKKyAgICBy ZXR1cm4gcmV0OworfQorCithdl9jb2xkIHZvaWQgZmZfbHV0M2RfdW5pbml0KExVVDNEQ29udGV4 dCAqbHV0M2QpCit7CisgICAgaW50IGk7CisgICAgYXZfZnJlZXAoJmx1dDNkLT5sdXQpOworCisg ICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworICAgICAgICBhdl9mcmVlcCgmbHV0M2QtPnBy ZWx1dC5sdXRbaV0pOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL2x1dDNkLmgg Yi9saWJhdmZpbHRlci9sdXQzZC5oCmluZGV4IDE0ZTNjN2ZlYTYuLmI2YWFlZDg1ZjEgMTAwNjQ0 Ci0tLSBhL2xpYmF2ZmlsdGVyL2x1dDNkLmgKKysrIGIvbGliYXZmaWx0ZXIvbHV0M2QuaApAQCAt ODQsNCArODQsMTcgQEAgdHlwZWRlZiBzdHJ1Y3QgVGhyZWFkRGF0YSB7CiAKIHZvaWQgZmZfbHV0 M2RfaW5pdF94ODYoTFVUM0RDb250ZXh0ICpzLCBjb25zdCBBVlBpeEZtdERlc2NyaXB0b3IgKmRl c2MpOwogCitpbnQgZmZfYWxsb2NhdGVfM2RsdXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIExVVDNE Q29udGV4dCAqbHV0M2QsIGludCBsdXRzaXplLCBpbnQgcHJlbHV0KTsKKworLyoqCisgKiBMb2Fk IDNEIExVVCBmcm9tIGZpbGUuCisgKgorICogQHBhcmFtIGx1dDNkIExVVDNEQ29udGV4dCBMb2Fk IDNEIExVVCBmcm9tIHBhdGggc3BlY2lmaWVkIGJ5IGBsdXQzZC0+ZmlsZWAuCisgKiAgICAgSWYg YGx1dDNkLT5maWxlYCBpcyBOVUxMLCBpbml0aWFsaXplIGFuIGlkZW50aXR5IDNEIExVVC4KKyAq LworaW50IGZmX2x1dDNkX2luaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIExVVDNEQ29udGV4dCAq bHV0M2QpOworCisvKiogIFJlbGVhc2UgbWVtb3J5IHVzZWQgdG8gaG9sZCAzRCBMVVQuICovCit2 b2lkIGZmX2x1dDNkX3VuaW5pdChMVVQzRENvbnRleHQgKmx1dDNkKTsKKwogI2VuZGlmIC8qIEFW RklMVEVSX0xVVDNEX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL3ZmX2x1dDNkLmMgYi9s aWJhdmZpbHRlci92Zl9sdXQzZC5jCmluZGV4IDRlZGNjMmM3YTcuLjFkYTc5OGUyMTAgMTAwNjQ0 Ci0tLSBhL2xpYmF2ZmlsdGVyL3ZmX2x1dDNkLmMKKysrIGIvbGliYXZmaWx0ZXIvdmZfbHV0M2Qu YwpAQCAtNTUyLDM5ICs1NTIsNiBAQCBzdGF0aWMgaW50IHNraXBfbGluZShjb25zdCBjaGFyICpw KQogICAgIHJldHVybiAhKnAgfHwgKnAgPT0gJyMnOwogfQogCi1zdGF0aWMgY2hhciogZmdldF9u ZXh0X3dvcmQoY2hhciogZHN0LCBpbnQgbWF4LCBGSUxFKiBmKQotewotICAgIGludCBjOwotICAg IGNoYXIgKnAgPSBkc3Q7Ci0KLSAgICAvKiBmb3IgbnVsbCAqLwotICAgIG1heC0tOwotICAgIC8q IHNraXAgdW50aWwgbmV4dCBub24gd2hpdGVzcGFjZSBjaGFyICovCi0gICAgd2hpbGUgKChjID0g ZmdldGMoZikpICE9IEVPRikgewotICAgICAgICBpZiAoYXZfaXNzcGFjZShjKSkKLSAgICAgICAg ICAgIGNvbnRpbnVlOwotCi0gICAgICAgICpwKysgPSBjOwotICAgICAgICBtYXgtLTsKLSAgICAg ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgLyogZ2V0IG1heCBieXRlcyBvciB1cCB1bnRpbCBuZXh0 IHdoaXRlc3BhY2UgY2hhciAqLwotICAgIGZvciAoOyBtYXggPiAwOyBtYXgtLSkgewotICAgICAg ICBpZiAoKGMgPSBmZ2V0YyhmKSkgPT0gRU9GKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg ICAgaWYgKGF2X2lzc3BhY2UoYykpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAqcCsr ID0gYzsKLSAgICB9Ci0KLSAgICAqcCA9IDA7Ci0gICAgaWYgKHAgPT0gZHN0KQotICAgICAgICBy ZXR1cm4gTlVMTDsKLSAgICByZXR1cm4gcDsKLX0KIAogI2RlZmluZSBORVhUX0xJTkUobG9vcF9j b25kKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmICghZmdldHMobGlu ZSwgc2l6ZW9mKGxpbmUpLCBmKSkgeyAgICAgICAgICAgICAgICAgICAgXApAQCAtNTkzLDUwNSAr NTYwLDYgQEAgc3RhdGljIGNoYXIqIGZnZXRfbmV4dF93b3JkKGNoYXIqIGRzdCwgaW50IG1heCwg RklMRSogZikKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKIH0gd2hpbGUgKGxvb3BfY29uZCkKIAotI2RlZmluZSBORVhUX0xJTkVf T1JfR09UTyhsb29wX2NvbmQsIGxhYmVsKSBkbyB7ICAgICAgICAgICAgXAotICAgIGlmICghZmdl dHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkgeyAgICAgICAgICAgICAgICAgICAgXAotICAgICAg ICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJVbmV4cGVjdGVkIEVPRlxuIik7ICAgICAgXAot ICAgICAgICByZXQgPSBBVkVSUk9SX0lOVkFMSUREQVRBOyAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotICAgICAgICBnb3RvIGxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotfSB3aGlsZSAobG9vcF9jb25kKQotCi1zdGF0aWMgaW50IGFsbG9j YXRlXzNkbHV0KEFWRmlsdGVyQ29udGV4dCAqY3R4LCBpbnQgbHV0c2l6ZSwgaW50IHByZWx1dCkK LXsKLSAgICBMVVQzRENvbnRleHQgKmx1dDNkID0gY3R4LT5wcml2OwotICAgIGludCBpOwotICAg IGlmIChsdXRzaXplIDwgMiB8fCBsdXRzaXplID4gTUFYX0xFVkVMKSB7Ci0gICAgICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19FUlJPUiwgIlRvbyBsYXJnZSBvciBpbnZhbGlkIDNEIExVVCBzaXplXG4i KTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKLSAgICB9Ci0KLSAgICBhdl9mcmVl cCgmbHV0M2QtPmx1dCk7Ci0gICAgbHV0M2QtPmx1dCA9IGF2X21hbGxvY19hcnJheShsdXRzaXpl ICogbHV0c2l6ZSAqIGx1dHNpemUsIHNpemVvZigqbHV0M2QtPmx1dCkpOwotICAgIGlmICghbHV0 M2QtPmx1dCkKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLQotICAgIGlmIChwcmVs dXQpIHsKLSAgICAgICAgbHV0M2QtPnByZWx1dC5zaXplID0gUFJFTFVUX1NJWkU7Ci0gICAgICAg IGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLSAgICAgICAgICAgIGF2X2ZyZWVwKCZsdXQzZC0+ cHJlbHV0Lmx1dFtpXSk7Ci0gICAgICAgICAgICBsdXQzZC0+cHJlbHV0Lmx1dFtpXSA9IGF2X21h bGxvY19hcnJheShQUkVMVVRfU0laRSwgc2l6ZW9mKCpsdXQzZC0+cHJlbHV0Lmx1dFswXSkpOwot ICAgICAgICAgICAgaWYgKCFsdXQzZC0+cHJlbHV0Lmx1dFtpXSkKLSAgICAgICAgICAgICAgICBy ZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg bHV0M2QtPnByZWx1dC5zaXplID0gMDsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykg ewotICAgICAgICAgICAgYXZfZnJlZXAoJmx1dDNkLT5wcmVsdXQubHV0W2ldKTsKLSAgICAgICAg fQotICAgIH0KLSAgICBsdXQzZC0+bHV0c2l6ZSA9IGx1dHNpemU7Ci0gICAgbHV0M2QtPmx1dHNp emUyID0gbHV0c2l6ZSAqIGx1dHNpemU7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIEJhc2ljYWxs eSByIGcgYW5kIGIgZmxvYXQgdmFsdWVzIG9uIGVhY2ggbGluZSwgd2l0aCBhIGZhY3VsdGF0aXZl IDNETFVUU0laRQotICogZGlyZWN0aXZlOyBzZWVtcyB0byBiZSBnZW5lcmF0ZWQgYnkgRGF2aW5j aSAqLwotc3RhdGljIGludCBwYXJzZV9kYXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIEZJTEUgKmYp Ci17Ci0gICAgTFVUM0RDb250ZXh0ICpsdXQzZCA9IGN0eC0+cHJpdjsKLSAgICBjaGFyIGxpbmVb TUFYX0xJTkVfU0laRV07Ci0gICAgaW50IHJldCwgaSwgaiwgaywgc2l6ZSwgc2l6ZTI7Ci0KLSAg ICBsdXQzZC0+bHV0c2l6ZSA9IHNpemUgPSAzMzsKLSAgICBzaXplMiA9IHNpemUgKiBzaXplOwot Ci0gICAgTkVYVF9MSU5FKHNraXBfbGluZShsaW5lKSk7Ci0gICAgaWYgKCFzdHJuY21wKGxpbmUs ICIzRExVVFNJWkUgIiwgMTApKSB7Ci0gICAgICAgIHNpemUgPSBzdHJ0b2wobGluZSArIDEwLCBO VUxMLCAwKTsKLQotICAgICAgICBORVhUX0xJTkUoc2tpcF9saW5lKGxpbmUpKTsKLSAgICB9Ci0K LSAgICByZXQgPSBhbGxvY2F0ZV8zZGx1dChjdHgsIHNpemUsIDApOwotICAgIGlmIChyZXQgPCAw KQotICAgICAgICByZXR1cm4gcmV0OwotCi0gICAgZm9yIChrID0gMDsgayA8IHNpemU7IGsrKykg ewotICAgICAgICBmb3IgKGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7Ci0gICAgICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgc3RydWN0IHJnYnZlYyAq dmVjID0gJmx1dDNkLT5sdXRbayAqIHNpemUyICsgaiAqIHNpemUgKyBpXTsKLSAgICAgICAgICAg ICAgICBpZiAoayAhPSAwIHx8IGogIT0gMCB8fCBpICE9IDApCi0gICAgICAgICAgICAgICAgICAg IE5FWFRfTElORShza2lwX2xpbmUobGluZSkpOwotICAgICAgICAgICAgICAgIGlmIChhdl9zc2Nh bmYobGluZSwgIiVmICVmICVmIiwgJnZlYy0+ciwgJnZlYy0+ZywgJnZlYy0+YikgIT0gMykKLSAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIElyaWRhcyBmb3Jt YXQgKi8KLXN0YXRpYyBpbnQgcGFyc2VfY3ViZShBVkZpbHRlckNvbnRleHQgKmN0eCwgRklMRSAq ZikKLXsKLSAgICBMVVQzRENvbnRleHQgKmx1dDNkID0gY3R4LT5wcml2OwotICAgIGNoYXIgbGlu ZVtNQVhfTElORV9TSVpFXTsKLSAgICBmbG9hdCBtaW5bM10gPSB7MC4wLCAwLjAsIDAuMH07Ci0g ICAgZmxvYXQgbWF4WzNdID0gezEuMCwgMS4wLCAxLjB9OwotCi0gICAgd2hpbGUgKGZnZXRzKGxp bmUsIHNpemVvZihsaW5lKSwgZikpIHsKLSAgICAgICAgaWYgKCFzdHJuY21wKGxpbmUsICJMVVRf M0RfU0laRSIsIDExKSkgewotICAgICAgICAgICAgaW50IHJldCwgaSwgaiwgazsKLSAgICAgICAg ICAgIGNvbnN0IGludCBzaXplID0gc3RydG9sKGxpbmUgKyAxMiwgTlVMTCwgMCk7Ci0gICAgICAg ICAgICBjb25zdCBpbnQgc2l6ZTIgPSBzaXplICogc2l6ZTsKLQotICAgICAgICAgICAgcmV0ID0g YWxsb2NhdGVfM2RsdXQoY3R4LCBzaXplLCAwKTsKLSAgICAgICAgICAgIGlmIChyZXQgPCAwKQot ICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0KLSAgICAgICAgICAgIGZvciAoayA9IDA7IGsg PCBzaXplOyBrKyspIHsKLSAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgc2l6ZTsgaisr KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZ2J2ZWMgKnZlYyA9ICZsdXQzZC0+bHV0W2kg KiBzaXplMiArIGogKiBzaXplICsga107Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsK LXRyeV9hZ2FpbjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVhUX0xJTkUoMCk7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJuY21wKGxpbmUsICJET01BSU5fIiwg NykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKnZhbHMgPSBOVUxM OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAgICAgICghc3RybmNtcChsaW5l ICsgNywgIk1JTiAiLCA0KSkgdmFscyA9IG1pbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZWxzZSBpZiAoIXN0cm5jbXAobGluZSArIDcsICJNQVggIiwgNCkpIHZhbHMgPSBtYXg7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFscykKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdl9zc2NhbmYobGluZSArIDExLCAiJWYgJWYg JWYiLCB2YWxzLCB2YWxzICsgMSwgdmFscyArIDIpOwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJtaW46ICVmICVmICVmIHwgbWF4OiAl ZiAlZiAlZlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pblsw XSwgbWluWzFdLCBtaW5bMl0sIG1heFswXSwgbWF4WzFdLCBtYXhbMl0pOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBnb3RvIHRyeV9hZ2FpbjsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9IGVsc2UgaWYgKCFzdHJuY21wKGxpbmUsICJUSVRMRSIsIDUpKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gdHJ5X2FnYWluOwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKHNraXBfbGlu ZShsaW5lKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXZfc3NjYW5mKGxpbmUsICIl ZiAlZiAlZiIsICZ2ZWMtPnIsICZ2ZWMtPmcsICZ2ZWMtPmIpICE9IDMpCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi cmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGx1dDNkLT5zY2FsZS5yID0gYXZfY2xpcGYo MS4gLyAobWF4WzBdIC0gbWluWzBdKSwgMC5mLCAxLmYpOwotICAgIGx1dDNkLT5zY2FsZS5nID0g YXZfY2xpcGYoMS4gLyAobWF4WzFdIC0gbWluWzFdKSwgMC5mLCAxLmYpOwotICAgIGx1dDNkLT5z Y2FsZS5iID0gYXZfY2xpcGYoMS4gLyAobWF4WzJdIC0gbWluWzJdKSwgMC5mLCAxLmYpOwotCi0g ICAgcmV0dXJuIDA7Ci19Ci0KLS8qIEFzc3VtZSAxN3gxN3gxNyBMVVQgd2l0aCBhIDE2LWJpdCBk ZXB0aAotICogRklYTUU6IGl0IHNlZW1zIHRoZXJlIGFyZSB2YXJpb3VzIDNkbCBmb3JtYXRzICov Ci1zdGF0aWMgaW50IHBhcnNlXzNkbChBVkZpbHRlckNvbnRleHQgKmN0eCwgRklMRSAqZikKLXsK LSAgICBjaGFyIGxpbmVbTUFYX0xJTkVfU0laRV07Ci0gICAgTFVUM0RDb250ZXh0ICpsdXQzZCA9 IGN0eC0+cHJpdjsKLSAgICBpbnQgcmV0LCBpLCBqLCBrOwotICAgIGNvbnN0IGludCBzaXplID0g MTc7Ci0gICAgY29uc3QgaW50IHNpemUyID0gMTcgKiAxNzsKLSAgICBjb25zdCBmbG9hdCBzY2Fs ZSA9IDE2KjE2KjE2OwotCi0gICAgbHV0M2QtPmx1dHNpemUgPSBzaXplOwotCi0gICAgcmV0ID0g YWxsb2NhdGVfM2RsdXQoY3R4LCBzaXplLCAwKTsKLSAgICBpZiAocmV0IDwgMCkKLSAgICAgICAg cmV0dXJuIHJldDsKLQotICAgIE5FWFRfTElORShza2lwX2xpbmUobGluZSkpOwotICAgIGZvciAo ayA9IDA7IGsgPCBzaXplOyBrKyspIHsKLSAgICAgICAgZm9yIChqID0gMDsgaiA8IHNpemU7IGor KykgewotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAg ICAgICAgIGludCByLCBnLCBiOwotICAgICAgICAgICAgICAgIHN0cnVjdCByZ2J2ZWMgKnZlYyA9 ICZsdXQzZC0+bHV0W2sgKiBzaXplMiArIGogKiBzaXplICsgaV07Ci0KLSAgICAgICAgICAgICAg ICBORVhUX0xJTkUoc2tpcF9saW5lKGxpbmUpKTsKLSAgICAgICAgICAgICAgICBpZiAoYXZfc3Nj YW5mKGxpbmUsICIlZCAlZCAlZCIsICZyLCAmZywgJmIpICE9IDMpCi0gICAgICAgICAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwotICAgICAgICAgICAgICAgIHZlYy0+ciA9 IHIgLyBzY2FsZTsKLSAgICAgICAgICAgICAgICB2ZWMtPmcgPSBnIC8gc2NhbGU7Ci0gICAgICAg ICAgICAgICAgdmVjLT5iID0gYiAvIHNjYWxlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g ICAgfQotICAgIHJldHVybiAwOwotfQotCi0vKiBQYW5kb3JhIGZvcm1hdCAqLwotc3RhdGljIGlu dCBwYXJzZV9tM2QoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIEZJTEUgKmYpCi17Ci0gICAgTFVUM0RD b250ZXh0ICpsdXQzZCA9IGN0eC0+cHJpdjsKLSAgICBmbG9hdCBzY2FsZTsKLSAgICBpbnQgcmV0 LCBpLCBqLCBrLCBzaXplLCBzaXplMiwgaW4gPSAtMSwgb3V0ID0gLTE7Ci0gICAgY2hhciBsaW5l W01BWF9MSU5FX1NJWkVdOwotICAgIHVpbnQ4X3QgcmdiX21hcFszXSA9IHswLCAxLCAyfTsKLQot ICAgIHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7Ci0gICAgICAgIGlmICAg ICAgKCFzdHJuY21wKGxpbmUsICJpbiIsICAyKSkgaW4gID0gc3RydG9sKGxpbmUgKyAyLCBOVUxM LCAwKTsKLSAgICAgICAgZWxzZSBpZiAoIXN0cm5jbXAobGluZSwgIm91dCIsIDMpKSBvdXQgPSBz dHJ0b2wobGluZSArIDMsIE5VTEwsIDApOwotICAgICAgICBlbHNlIGlmICghc3RybmNtcChsaW5l LCAidmFsdWVzIiwgNikpIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKnAgPSBsaW5lICsgNjsK LSNkZWZpbmUgU0VUX0NPTE9SKGlkKSBkbyB7ICAgICAgICAgICAgICAgICAgXAotICAgIHdoaWxl IChhdl9pc3NwYWNlKCpwKSkgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHArKzsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBzd2l0Y2ggKCpwKSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotICAgIGNhc2UgJ3InOiByZ2JfbWFwW2lkXSA9IDA7IGJyZWFrOyAg ICAgICBcCi0gICAgY2FzZSAnZyc6IHJnYl9tYXBbaWRdID0gMTsgYnJlYWs7ICAgICAgIFwKLSAg ICBjYXNlICdiJzogcmdiX21hcFtpZF0gPSAyOyBicmVhazsgICAgICAgXAotICAgIH0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgd2hpbGUgKCpwICYmICFhdl9p c3NwYWNlKCpwKSkgICAgICAgICAgIFwKLSAgICAgICAgcCsrOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotfSB3aGlsZSAoMCkKLSAgICAgICAgICAgIFNFVF9DT0xPUigwKTsKLSAg ICAgICAgICAgIFNFVF9DT0xPUigxKTsKLSAgICAgICAgICAgIFNFVF9DT0xPUigyKTsKLSAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGluID09IC0xIHx8IG91 dCA9PSAtMSkgewotICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJpbiBhbmQgb3V0 IG11c3QgYmUgZGVmaW5lZFxuIik7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRB OwotICAgIH0KLSAgICBpZiAoaW4gPCAyIHx8IG91dCA8IDIgfHwKLSAgICAgICAgaW4gID4gTUFY X0xFVkVMKk1BWF9MRVZFTCpNQVhfTEVWRUwgfHwKLSAgICAgICAgb3V0ID4gTUFYX0xFVkVMKk1B WF9MRVZFTCpNQVhfTEVWRUwpIHsKLSAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAi aW52YWxpZCBpbiAoJWQpIG9yIG91dCAoJWQpXG4iLCBpbiwgb3V0KTsKLSAgICAgICAgcmV0dXJu IEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAgfQotICAgIGZvciAoc2l6ZSA9IDE7IHNpemUqc2l6 ZSpzaXplIDwgaW47IHNpemUrKyk7Ci0gICAgbHV0M2QtPmx1dHNpemUgPSBzaXplOwotICAgIHNp emUyID0gc2l6ZSAqIHNpemU7Ci0KLSAgICByZXQgPSBhbGxvY2F0ZV8zZGx1dChjdHgsIHNpemUs IDApOwotICAgIGlmIChyZXQgPCAwKQotICAgICAgICByZXR1cm4gcmV0OwotCi0gICAgc2NhbGUg PSAxLiAvIChvdXQgLSAxKTsKLQotICAgIGZvciAoayA9IDA7IGsgPCBzaXplOyBrKyspIHsKLSAg ICAgICAgZm9yIChqID0gMDsgaiA8IHNpemU7IGorKykgewotICAgICAgICAgICAgZm9yIChpID0g MDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgICAgIHN0cnVjdCByZ2J2ZWMgKnZlYyA9 ICZsdXQzZC0+bHV0W2sgKiBzaXplMiArIGogKiBzaXplICsgaV07Ci0gICAgICAgICAgICAgICAg ZmxvYXQgdmFsWzNdOwotCi0gICAgICAgICAgICAgICAgTkVYVF9MSU5FKDApOwotICAgICAgICAg ICAgICAgIGlmIChhdl9zc2NhbmYobGluZSwgIiVmICVmICVmIiwgdmFsLCB2YWwgKyAxLCB2YWwg KyAyKSAhPSAzKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFU QTsKLSAgICAgICAgICAgICAgICB2ZWMtPnIgPSB2YWxbcmdiX21hcFswXV0gKiBzY2FsZTsKLSAg ICAgICAgICAgICAgICB2ZWMtPmcgPSB2YWxbcmdiX21hcFsxXV0gKiBzY2FsZTsKLSAgICAgICAg ICAgICAgICB2ZWMtPmIgPSB2YWxbcmdiX21hcFsyXV0gKiBzY2FsZTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBuZWFyZXN0 X3NhbXBsZV9pbmRleChmbG9hdCAqZGF0YSwgZmxvYXQgeCwgaW50IGxvdywgaW50IGhpKQotewot ICAgIGludCBtaWQ7Ci0gICAgaWYgKHggPCBkYXRhW2xvd10pCi0gICAgICAgIHJldHVybiBsb3c7 Ci0KLSAgICBpZiAoeCA+IGRhdGFbaGldKQotICAgICAgICByZXR1cm4gaGk7Ci0KLSAgICBmb3Ig KDs7KSB7Ci0gICAgICAgIGF2X2Fzc2VydDAoeCA+PSBkYXRhW2xvd10pOwotICAgICAgICBhdl9h c3NlcnQwKHggPD0gZGF0YVtoaV0pOwotICAgICAgICBhdl9hc3NlcnQwKChoaS1sb3cpID4gMCk7 Ci0KLSAgICAgICAgaWYgKGhpIC0gbG93ID09IDEpCi0gICAgICAgICAgICByZXR1cm4gbG93Owot Ci0gICAgICAgIG1pZCA9IChsb3cgKyBoaSkgLyAyOwotCi0gICAgICAgIGlmICh4IDwgZGF0YVtt aWRdKQotICAgICAgICAgICAgaGkgPSBtaWQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxv dyA9IG1pZDsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotI2RlZmluZSBORVhUX0ZMT0FU X09SX0dPVE8odmFsdWUsIGxhYmVsKSAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICghZmdl dF9uZXh0X3dvcmQobGluZSwgc2l6ZW9mKGxpbmUpICxmKSkgeyAgICAgICAgICAgXAotICAgICAg ICByZXQgPSBBVkVSUk9SX0lOVkFMSUREQVRBOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAot ICAgICAgICBnb3RvIGxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotICAgIGlmIChhdl9zc2NhbmYobGluZSwgIiVmIiwgJnZhbHVlKSAhPSAxKSB7 ICAgICAgICAgICAgICAgXAotICAgICAgICByZXQgPSBBVkVSUk9SX0lOVkFMSUREQVRBOyAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBnb3RvIGxhYmVsOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0KLQotc3RhdGljIGludCBwYXJzZV9j aW5lc3BhY2UoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIEZJTEUgKmYpCi17Ci0gICAgTFVUM0RDb250 ZXh0ICpsdXQzZCA9IGN0eC0+cHJpdjsKLSAgICBjaGFyIGxpbmVbTUFYX0xJTkVfU0laRV07Ci0g ICAgZmxvYXQgaW5fbWluWzNdICA9IHswLjAsIDAuMCwgMC4wfTsKLSAgICBmbG9hdCBpbl9tYXhb M10gID0gezEuMCwgMS4wLCAxLjB9OwotICAgIGZsb2F0IG91dF9taW5bM10gPSB7MC4wLCAwLjAs IDAuMH07Ci0gICAgZmxvYXQgb3V0X21heFszXSA9IHsxLjAsIDEuMCwgMS4wfTsKLSAgICBpbnQg aW5zaWRlX21ldGFkYXRhID0gMCwgc2l6ZSwgc2l6ZTI7Ci0gICAgaW50IHByZWx1dCA9IDA7Ci0g ICAgaW50IHJldCA9IDA7Ci0KLSAgICBpbnQgcHJlbHV0X3NpemVzWzNdID0gezAsIDAsIDB9Owot ICAgIGZsb2F0ICppbl9wcmVsdXRbM10gID0ge05VTEwsIE5VTEwsIE5VTEx9OwotICAgIGZsb2F0 ICpvdXRfcHJlbHV0WzNdID0ge05VTEwsIE5VTEwsIE5VTEx9OwotCi0gICAgTkVYVF9MSU5FX09S X0dPVE8oc2tpcF9saW5lKGxpbmUpLCBlbmQpOwotICAgIGlmIChzdHJuY21wKGxpbmUsICJDU1BM VVRWMTAwIiwgMTApKSB7Ci0gICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIk5vdCBj aW5lU3BhY2UgTFVUIGZvcm1hdFxuIik7Ci0gICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsK LSAgICAgICAgZ290byBlbmQ7Ci0gICAgfQotCi0gICAgTkVYVF9MSU5FX09SX0dPVE8oc2tpcF9s aW5lKGxpbmUpLCBlbmQpOwotICAgIGlmIChzdHJuY21wKGxpbmUsICIzRCIsIDIpKSB7Ci0gICAg ICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIk5vdCAzRCBMVVQgZm9ybWF0XG4iKTsKLSAg ICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwotICAgICAgICBnb3RvIGVuZDsKLSAgICB9Ci0K LSAgICB3aGlsZSAoMSkgewotICAgICAgICBORVhUX0xJTkVfT1JfR09UTyhza2lwX2xpbmUobGlu ZSksIGVuZCk7Ci0KLSAgICAgICAgaWYgKCFzdHJuY21wKGxpbmUsICJCRUdJTiBNRVRBREFUQSIs IDE0KSkgewotICAgICAgICAgICAgaW5zaWRlX21ldGFkYXRhID0gMTsKLSAgICAgICAgICAgIGNv bnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICghc3RybmNtcChsaW5lLCAiRU5EIE1FVEFE QVRBIiwgMTIpKSB7Ci0gICAgICAgICAgICBpbnNpZGVfbWV0YWRhdGEgPSAwOwotICAgICAgICAg ICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGluc2lkZV9tZXRhZGF0YSA9PSAw KSB7Ci0gICAgICAgICAgICBpbnQgc2l6ZV9yLCBzaXplX2csIHNpemVfYjsKLQotICAgICAgICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpbnQgbnBv aW50cyA9IHN0cnRvbChsaW5lLCBOVUxMLCAwKTsKLQotICAgICAgICAgICAgICAgIGlmIChucG9p bnRzID4gMikgewotICAgICAgICAgICAgICAgICAgICBmbG9hdCB2LGxhc3Q7Ci0KLSAgICAgICAg ICAgICAgICAgICAgaWYgKG5wb2ludHMgPiBQUkVMVVRfU0laRSkgewotICAgICAgICAgICAgICAg ICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiUHJlbHV0IHNpemUgdG9vIGxhcmdl LlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBBVkVSUk9SX0lOVkFMSUREQVRB OwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgICAgICAgICAgICAg IH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoaW5fcHJlbHV0W2ldIHx8IG91dF9wcmVsdXRb aV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwg IkludmFsaWQgZmlsZSBoYXMgbXVsdGlwbGUgcHJlbHV0cy5cbiIpOwotICAgICAgICAgICAgICAg ICAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICAgICAgICAgICAgICAgICAg ICAgIGdvdG8gZW5kOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg ICAgaW5fcHJlbHV0W2ldICA9IChmbG9hdCopYXZfbWFsbG9jKG5wb2ludHMgKiBzaXplb2YoZmxv YXQpKTsKLSAgICAgICAgICAgICAgICAgICAgb3V0X3ByZWx1dFtpXSA9IChmbG9hdCopYXZfbWFs bG9jKG5wb2ludHMgKiBzaXplb2YoZmxvYXQpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFp bl9wcmVsdXRbaV0gfHwgIW91dF9wcmVsdXRbaV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAg IHJldCA9IEFWRVJST1IoRU5PTUVNKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5k OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcHJlbHV0X3Np emVzW2ldID0gbnBvaW50czsKLSAgICAgICAgICAgICAgICAgICAgaW5fbWluW2ldID0gRkxUX01B WDsKLSAgICAgICAgICAgICAgICAgICAgaW5fbWF4W2ldID0gLUZMVF9NQVg7Ci0gICAgICAgICAg ICAgICAgICAgIG91dF9taW5baV0gPSBGTFRfTUFYOwotICAgICAgICAgICAgICAgICAgICBvdXRf bWF4W2ldID0gLUZMVF9NQVg7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7 IGogPCBucG9pbnRzOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5FWFRfRkxPQVRf T1JfR09UTyh2LCBlbmQpCi0gICAgICAgICAgICAgICAgICAgICAgICBpbl9taW5baV0gPSBGRk1J Tihpbl9taW5baV0sIHYpOwotICAgICAgICAgICAgICAgICAgICAgICAgaW5fbWF4W2ldID0gRkZN QVgoaW5fbWF4W2ldLCB2KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluX3ByZWx1dFtpXVtq XSA9IHY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaiA+IDAgJiYgdiA8IGxhc3QpIHsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJJ bnZhbGlkIGZpbGUsIG5vbiBpbmNyZWFzaW5nIHByZWx1dC5cbiIpOwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICAgICAgICAgIGxhc3QgPSB2OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg ICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBucG9pbnRzOyBqKyspIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgIE5FWFRfRkxPQVRfT1JfR09UTyh2LCBlbmQpCi0gICAgICAgICAgICAg ICAgICAgICAgICBvdXRfbWluW2ldID0gRkZNSU4ob3V0X21pbltpXSwgdik7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBvdXRfbWF4W2ldID0gRkZNQVgob3V0X21heFtpXSwgdik7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBvdXRfcHJlbHV0W2ldW2pdID0gdjsKLSAgICAgICAgICAgICAgICAg ICAgfQotCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChucG9pbnRzID09IDIpICB7Ci0gICAg ICAgICAgICAgICAgICAgIE5FWFRfTElORV9PUl9HT1RPKHNraXBfbGluZShsaW5lKSwgZW5kKTsK LSAgICAgICAgICAgICAgICAgICAgaWYgKGF2X3NzY2FuZihsaW5lLCAiJWYgJWYiLCAmaW5fbWlu W2ldLCAmaW5fbWF4W2ldKSAhPSAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBB VkVSUk9SX0lOVkFMSUREQVRBOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlbmQ7Ci0g ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgTkVYVF9MSU5FX09SX0dP VE8oc2tpcF9saW5lKGxpbmUpLCBlbmQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoYXZfc3Nj YW5mKGxpbmUsICIlZiAlZiIsICZvdXRfbWluW2ldLCAmb3V0X21heFtpXSkgIT0gMikgewotICAg ICAgICAgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICAgICAg ICAgICAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9M T0dfRVJST1IsICJVbnN1cHBvcnRlZCBudW1iZXIgb2YgcHJlLWx1dCBwb2ludHMuXG4iKTsKLSAg ICAgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUl9QQVRDSFdFTENPTUU7Ci0gICAgICAgICAg ICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg IE5FWFRfTElORV9PUl9HT1RPKHNraXBfbGluZShsaW5lKSwgZW5kKTsKLSAgICAgICAgICAgIH0K LQotICAgICAgICAgICAgaWYgKGF2X3NzY2FuZihsaW5lLCAiJWQgJWQgJWQiLCAmc2l6ZV9yLCAm c2l6ZV9nLCAmc2l6ZV9iKSAhPSAzKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihF SU5WQUwpOwotICAgICAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICAgICAgfQotICAgICAg ICAgICAgaWYgKHNpemVfciAhPSBzaXplX2cgfHwgc2l6ZV9yICE9IHNpemVfYikgewotICAgICAg ICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVuc3VwcG9ydGVkIHNpemUgY29t YmluYXRpb246ICVkeCVkeCVkLlxuIiwgc2l6ZV9yLCBzaXplX2csIHNpemVfYik7Ci0gICAgICAg ICAgICAgICAgcmV0ID0gQVZFUlJPUl9QQVRDSFdFTENPTUU7Ci0gICAgICAgICAgICAgICAgZ290 byBlbmQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNpemUgPSBzaXplX3I7Ci0gICAg ICAgICAgICBzaXplMiA9IHNpemUgKiBzaXplOwotCi0gICAgICAgICAgICBpZiAocHJlbHV0X3Np emVzWzBdICYmIHByZWx1dF9zaXplc1sxXSAmJiBwcmVsdXRfc2l6ZXNbMl0pCi0gICAgICAgICAg ICAgICAgcHJlbHV0ID0gMTsKLQotICAgICAgICAgICAgcmV0ID0gYWxsb2NhdGVfM2RsdXQoY3R4 LCBzaXplLCBwcmVsdXQpOwotICAgICAgICAgICAgaWYgKHJldCA8IDApCi0gICAgICAgICAgICAg ICAgcmV0dXJuIHJldDsKLQotICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBzaXplOyBr KyspIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNpemU7IGorKykgewot ICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJnYnZlYyAqdmVjID0gJmx1dDNkLT5sdXRbaSAq IHNpemUyICsgaiAqIHNpemUgKyBrXTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgTkVYVF9M SU5FX09SX0dPVE8oc2tpcF9saW5lKGxpbmUpLCBlbmQpOwotICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGF2X3NzY2FuZihsaW5lLCAiJWYgJWYgJWYiLCAmdmVjLT5yLCAmdmVjLT5nLCAmdmVj LT5iKSAhPSAzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUl9J TlZBTElEREFUQTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAg ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgdmVjLT5yICo9 IG91dF9tYXhbMF0gLSBvdXRfbWluWzBdOwotICAgICAgICAgICAgICAgICAgICAgICAgdmVjLT5n ICo9IG91dF9tYXhbMV0gLSBvdXRfbWluWzFdOwotICAgICAgICAgICAgICAgICAgICAgICAgdmVj LT5iICo9IG91dF9tYXhbMl0gLSBvdXRfbWluWzJdOwotICAgICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBicmVhazsKLSAg ICAgICAgfQotICAgIH0KLQotICAgIGlmIChwcmVsdXQpIHsKLSAgICAgICAgZm9yIChpbnQgYyA9 IDA7IGMgPCAzOyBjKyspIHsKLQotICAgICAgICAgICAgbHV0M2QtPnByZWx1dC5taW5bY10gPSBp bl9taW5bY107Ci0gICAgICAgICAgICBsdXQzZC0+cHJlbHV0Lm1heFtjXSA9IGluX21heFtjXTsK LSAgICAgICAgICAgIGx1dDNkLT5wcmVsdXQuc2NhbGVbY10gPSAgKDEuMGYgLyAoZmxvYXQpKGlu X21heFtjXSAtIGluX21pbltjXSkpICogKGx1dDNkLT5wcmVsdXQuc2l6ZSAtIDEpOwotCi0gICAg ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGx1dDNkLT5wcmVsdXQuc2l6ZTsgKytpKSB7Ci0g ICAgICAgICAgICAgICAgZmxvYXQgbWl4ID0gKGZsb2F0KSBpIC8gKGZsb2F0KShsdXQzZC0+cHJl bHV0LnNpemUgLSAxKTsKLSAgICAgICAgICAgICAgICBmbG9hdCB4ID0gbGVycGYoaW5fbWluW2Nd LCBpbl9tYXhbY10sIG1peCksIGEsIGI7Ci0KLSAgICAgICAgICAgICAgICBpbnQgaWR4ID0gbmVh cmVzdF9zYW1wbGVfaW5kZXgoaW5fcHJlbHV0W2NdLCB4LCAwLCBwcmVsdXRfc2l6ZXNbY10tMSk7 Ci0gICAgICAgICAgICAgICAgYXZfYXNzZXJ0MChpZHggKyAxIDwgcHJlbHV0X3NpemVzW2NdKTsK LQotICAgICAgICAgICAgICAgIGEgICA9IG91dF9wcmVsdXRbY11baWR4ICsgMF07Ci0gICAgICAg ICAgICAgICAgYiAgID0gb3V0X3ByZWx1dFtjXVtpZHggKyAxXTsKLSAgICAgICAgICAgICAgICBt aXggPSB4IC0gaW5fcHJlbHV0W2NdW2lkeF07Ci0KLSAgICAgICAgICAgICAgICBsdXQzZC0+cHJl bHV0Lmx1dFtjXVtpXSA9IHNhbml0aXplZihsZXJwZihhLCBiLCBtaXgpKTsKLSAgICAgICAgICAg IH0KLSAgICAgICAgfQotICAgICAgICBsdXQzZC0+c2NhbGUuciA9IDEuMDBmOwotICAgICAgICBs dXQzZC0+c2NhbGUuZyA9IDEuMDBmOwotICAgICAgICBsdXQzZC0+c2NhbGUuYiA9IDEuMDBmOwot Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbHV0M2QtPnNjYWxlLnIgPSBhdl9jbGlwZigxLiAvIChp bl9tYXhbMF0gLSBpbl9taW5bMF0pLCAwLmYsIDEuZik7Ci0gICAgICAgIGx1dDNkLT5zY2FsZS5n ID0gYXZfY2xpcGYoMS4gLyAoaW5fbWF4WzFdIC0gaW5fbWluWzFdKSwgMC5mLCAxLmYpOwotICAg ICAgICBsdXQzZC0+c2NhbGUuYiA9IGF2X2NsaXBmKDEuIC8gKGluX21heFsyXSAtIGluX21pblsy XSksIDAuZiwgMS5mKTsKLSAgICB9Ci0KLWVuZDoKLSAgICBmb3IgKGludCBjID0gMDsgYyA8IDM7 IGMrKykgewotICAgICAgICBhdl9mcmVlcCgmaW5fcHJlbHV0W2NdKTsKLSAgICAgICAgYXZfZnJl ZXAoJm91dF9wcmVsdXRbY10pOwotICAgIH0KLSAgICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMg aW50IHNldF9pZGVudGl0eV9tYXRyaXgoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIGludCBzaXplKQot ewotICAgIExVVDNEQ29udGV4dCAqbHV0M2QgPSBjdHgtPnByaXY7Ci0gICAgaW50IHJldCwgaSwg aiwgazsKLSAgICBjb25zdCBpbnQgc2l6ZTIgPSBzaXplICogc2l6ZTsKLSAgICBjb25zdCBmbG9h dCBjID0gMS4gLyAoc2l6ZSAtIDEpOwotCi0gICAgcmV0ID0gYWxsb2NhdGVfM2RsdXQoY3R4LCBz aXplLCAwKTsKLSAgICBpZiAocmV0IDwgMCkKLSAgICAgICAgcmV0dXJuIHJldDsKLQotICAgIGZv ciAoayA9IDA7IGsgPCBzaXplOyBrKyspIHsKLSAgICAgICAgZm9yIChqID0gMDsgaiA8IHNpemU7 IGorKykgewotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAg ICAgICAgICAgIHN0cnVjdCByZ2J2ZWMgKnZlYyA9ICZsdXQzZC0+bHV0W2sgKiBzaXplMiArIGog KiBzaXplICsgaV07Ci0gICAgICAgICAgICAgICAgdmVjLT5yID0gayAqIGM7Ci0gICAgICAgICAg ICAgICAgdmVjLT5nID0gaiAqIGM7Ci0gICAgICAgICAgICAgICAgdmVjLT5iID0gaSAqIGM7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQogc3Rh dGljIGNvbnN0IGVudW0gQVZQaXhlbEZvcm1hdCBwaXhfZm10c1tdID0gewogICAgIEFWX1BJWF9G TVRfUkdCMjQsICBBVl9QSVhfRk1UX0JHUjI0LAogICAgIEFWX1BJWF9GTVRfUkdCQSwgICBBVl9Q SVhfRk1UX0JHUkEsCkBAIC0xMjMwLDY2ICs2OTgsMTQgQEAgQVZGSUxURVJfREVGSU5FX0NMQVNT X0VYVChsdXQzZCwgImx1dDNkIiwgbHV0M2RfaGFsZGNsdXRfb3B0aW9ucyk7CiAKIHN0YXRpYyBh dl9jb2xkIGludCBsdXQzZF9pbml0KEFWRmlsdGVyQ29udGV4dCAqY3R4KQogewotICAgIGludCBy ZXQ7Ci0gICAgRklMRSAqZjsKLSAgICBjb25zdCBjaGFyICpleHQ7CiAgICAgTFVUM0RDb250ZXh0 ICpsdXQzZCA9IGN0eC0+cHJpdjsKLQotICAgIGx1dDNkLT5zY2FsZS5yID0gbHV0M2QtPnNjYWxl LmcgPSBsdXQzZC0+c2NhbGUuYiA9IDEuZjsKLQotICAgIGlmICghbHV0M2QtPmZpbGUpIHsKLSAg ICAgICAgcmV0dXJuIHNldF9pZGVudGl0eV9tYXRyaXgoY3R4LCAzMik7Ci0gICAgfQotCi0gICAg ZiA9IGF2cHJpdl9mb3Blbl91dGY4KGx1dDNkLT5maWxlLCAiciIpOwotICAgIGlmICghZikgewot ICAgICAgICByZXQgPSBBVkVSUk9SKGVycm5vKTsKLSAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9H X0VSUk9SLCAiJXM6ICVzXG4iLCBsdXQzZC0+ZmlsZSwgYXZfZXJyMnN0cihyZXQpKTsKLSAgICAg ICAgcmV0dXJuIHJldDsKLSAgICB9Ci0KLSAgICBleHQgPSBzdHJyY2hyKGx1dDNkLT5maWxlLCAn LicpOwotICAgIGlmICghZXh0KSB7Ci0gICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwg IlVuYWJsZSB0byBndWVzcyB0aGUgZm9ybWF0IGZyb20gdGhlIGV4dGVuc2lvblxuIik7Ci0gICAg ICAgIHJldCA9IEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAgICAgIGdvdG8gZW5kOwotICAgIH0K LSAgICBleHQrKzsKLQotICAgIGlmICghYXZfc3RyY2FzZWNtcChleHQsICJkYXQiKSkgewotICAg ICAgICByZXQgPSBwYXJzZV9kYXQoY3R4LCBmKTsKLSAgICB9IGVsc2UgaWYgKCFhdl9zdHJjYXNl Y21wKGV4dCwgIjNkbCIpKSB7Ci0gICAgICAgIHJldCA9IHBhcnNlXzNkbChjdHgsIGYpOwotICAg IH0gZWxzZSBpZiAoIWF2X3N0cmNhc2VjbXAoZXh0LCAiY3ViZSIpKSB7Ci0gICAgICAgIHJldCA9 IHBhcnNlX2N1YmUoY3R4LCBmKTsKLSAgICB9IGVsc2UgaWYgKCFhdl9zdHJjYXNlY21wKGV4dCwg Im0zZCIpKSB7Ci0gICAgICAgIHJldCA9IHBhcnNlX20zZChjdHgsIGYpOwotICAgIH0gZWxzZSBp ZiAoIWF2X3N0cmNhc2VjbXAoZXh0LCAiY3NwIikpIHsKLSAgICAgICAgcmV0ID0gcGFyc2VfY2lu ZXNwYWNlKGN0eCwgZik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9H X0VSUk9SLCAiVW5yZWNvZ25pemVkICcuJXMnIGZpbGUgdHlwZVxuIiwgZXh0KTsKLSAgICAgICAg cmV0ID0gQVZFUlJPUihFSU5WQUwpOwotICAgIH0KLQotICAgIGlmICghcmV0ICYmICFsdXQzZC0+ bHV0c2l6ZSkgewotICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICIzRCBMVVQgaXMg ZW1wdHlcbiIpOwotICAgICAgICByZXQgPSBBVkVSUk9SX0lOVkFMSUREQVRBOwotICAgIH0KLQot ZW5kOgotICAgIGZjbG9zZShmKTsKLSAgICByZXR1cm4gcmV0OworICAgIHJldHVybiBmZl9sdXQz ZF9pbml0KGN0eCwgbHV0M2QpOwogfQogCiBzdGF0aWMgYXZfY29sZCB2b2lkIGx1dDNkX3VuaW5p dChBVkZpbHRlckNvbnRleHQgKmN0eCkKIHsKICAgICBMVVQzRENvbnRleHQgKmx1dDNkID0gY3R4 LT5wcml2OwotICAgIGludCBpOwotICAgIGF2X2ZyZWVwKCZsdXQzZC0+bHV0KTsKLQotICAgIGZv ciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLSAgICAgICAgYXZfZnJlZXAoJmx1dDNkLT5wcmVsdXQu bHV0W2ldKTsKLSAgICB9CisgICAgZmZfbHV0M2RfdW5pbml0KGx1dDNkKTsKIH0KIAogc3RhdGlj IGNvbnN0IEFWRmlsdGVyUGFkIGx1dDNkX2lucHV0c1tdID0gewpAQCAtMTQ5OSw3ICs5MTUsNyBA QCBzdGF0aWMgaW50IGNvbmZpZ19jbHV0KEFWRmlsdGVyTGluayAqaW5saW5rKQogICAgICAgICBy ZXR1cm4gQVZFUlJPUihFSU5WQUwpOwogICAgIH0KIAotICAgIHJldHVybiBhbGxvY2F0ZV8zZGx1 dChjdHgsIGxldmVsLCAwKTsKKyAgICByZXR1cm4gZmZfYWxsb2NhdGVfM2RsdXQoY3R4LCBsdXQz ZCwgbGV2ZWwsIDApOwogfQogCiBzdGF0aWMgaW50IHVwZGF0ZV9hcHBseV9jbHV0KEZGRnJhbWVT eW5jICpmcykKLS0gCjIuNDIuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVn Lm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRv IHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVx dWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=