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 8D2EF482BC for ; Sat, 20 Jan 2024 15:16:27 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DAC3468D030; Sat, 20 Jan 2024 17:16:25 +0200 (EET) Received: from mail-pf1-f181.google.com (mail-pf1-f181.google.com [209.85.210.181]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D2D8568CABA for ; Sat, 20 Jan 2024 17:16:18 +0200 (EET) Received: by mail-pf1-f181.google.com with SMTP id d2e1a72fcca58-6dbb003be79so1870655b3a.0 for ; Sat, 20 Jan 2024 07:16:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705763777; x=1706368577; 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=qSDDpPnAEE91BkMgincqQDWhtNZ+PAzRxCGjqE5u2i4=; b=Ai6hqgOOno/xxUvgVQ1SjRwC1CrKqzSeys4u1xVo7zeE3Ulk1TME5Mz+ObjmNayw+B 08GpQDgxHiafOggwdEOoZPSHo2rFndwnVemq/zw0kvydZGy9YR4rQKuE77Gw4HINIzJ0 EqB/k8AfFY6TSFSPbMQLIdrI7k6AS0FC1ZnMgXlF4CG7D9UxejpNLIAJpR+U35RknQvQ Q9Ok4pF+uaiD0rI2owBK/3fI7a81l2+t1NBhuSk7gGK8ma5RrajBnFsZTmiw+WokdZcC Z9latAMDNJMgoIumDrrIewE5GbcmRxR2AmE/B8ypy5cc+qngjvDS8Sgat8eyo+G+ire9 z9Wg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705763777; x=1706368577; 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=qSDDpPnAEE91BkMgincqQDWhtNZ+PAzRxCGjqE5u2i4=; b=ZKz6lfKCmXJED2G3ovkJxnjS1LKfl6eIKjHVk9BHMvvnMDZme+IfAT0l1IRX7lYKdy cBoJ79svYYsaWQ9NX/zb7XOcjBG7rrFctjaAglOaoaGRUQmtlXTJ1sicRl4L+zEZhEXF LICCCpd+LrZZYnuzJoTp0SlrOPyr6lzUlmTUkihluANE8OYWNbgpfL1fWF3d4VYQd9Ze ceL/BIQcl1zT+9XRDBh14gBDLmTmvLFKRksBqz6LO65Hy9/54hy9r0rDUWYW/FCI7FBK uMdji85ftjphF9cjJKrpOzN0Yy+cyCiEkya9jYshZqt3hQ8//CsHMjOzHYUe+eWim0bq dFDA== X-Gm-Message-State: AOJu0Yw3q/6W/X/4YLanHCefggCoXe/DBtzERwaJU48DMqUz/hqb2kz5 Quz7aE79YM1vEUnezM9Ki69ZHu/WVSgzvsyfnU1jJjNK+EWvEWt6SRCo2uHtoXw= X-Google-Smtp-Source: AGHT+IE/Vz7uRPLP3zhcJNDgPx8+w2YqnwqDzOmPqDpA1au9qHkLAVHzUP4Jysy4bb5kHP9uA4kICg== X-Received: by 2002:a05:6a21:1509:b0:19b:4eec:cbd9 with SMTP id nq9-20020a056a21150900b0019b4eeccbd9mr1847813pzb.42.1705763776347; Sat, 20 Jan 2024 07:16:16 -0800 (PST) Received: from arch.home (hwsrv-1088392.hostwindsdns.com. [23.254.253.23]) by smtp.gmail.com with ESMTPSA id d2-20020a056a00198200b006d99f930607sm7071495pfl.140.2024.01.20.07.16.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Jan 2024 07:16:15 -0800 (PST) From: Chen Yufei To: ffmpeg-devel@ffmpeg.org Date: Sat, 20 Jan 2024 23:14:29 +0800 Message-ID: <20240120151504.118057-3-cyfdecyf@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240120151504.118057-1-cyfdecyf@gmail.com> References: <20240120151504.118057-1-cyfdecyf@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 1/1] avfilter/vf_vpp_qsv: apply 3D LUT from file. 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: haihao.xiang@intel.com, 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: VXNhZ2U6ICJ2cHBfcXN2PWx1dDNkX2ZpbGU9PHBhdGggdG8gZmlsZT4iCgpSZXF1aXJlcyBvbmVW UEwsIHVzaW5nIHN5c3RlbSBtZW1vcnkgM0QgTFVUIHN1cmZhY2UuCgpTaWduZWQtb2ZmLWJ5OiBD aGVuIFl1ZmVpIDxjeWZkZWN5ZkBnbWFpbC5jb20+Ci0tLQogbGliYXZmaWx0ZXIvTWFrZWZpbGUg ICAgIHwgICA4ICstCiBsaWJhdmZpbHRlci9sdXQzZC5jICAgICAgfCA2NjkgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaWJhdmZpbHRlci9sdXQzZC5oICAgICAgfCAg MTMgKwogbGliYXZmaWx0ZXIvdmZfbHV0M2QuYyAgIHwgNTkwICstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KIGxpYmF2ZmlsdGVyL3ZmX3ZwcF9xc3YuYyB8IDExMyArKysrKystCiA1 IGZpbGVzIGNoYW5nZWQsIDc5OSBpbnNlcnRpb25zKCspLCA1OTQgZGVsZXRpb25zKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgbGliYXZmaWx0ZXIvbHV0M2QuYwoKZGlmZiAtLWdpdCBhL2xpYmF2Zmls dGVyL01ha2VmaWxlIGIvbGliYXZmaWx0ZXIvTWFrZWZpbGUKaW5kZXggYmJhMDIxOTg3Ni4uZjY4 MmVhNTNjMiAxMDA2NDQKLS0tIGEvbGliYXZmaWx0ZXIvTWFrZWZpbGUKKysrIGIvbGliYXZmaWx0 ZXIvTWFrZWZpbGUKQEAgLTMzMiw3ICszMzIsNyBAQCBPQkpTLSQoQ09ORklHX0dSQVBITU9OSVRP Ul9GSUxURVIpICAgICAgICAgICArPSBmX2dyYXBobW9uaXRvci5vCiBPQkpTLSQoQ09ORklHX0dS QVlXT1JMRF9GSUxURVIpICAgICAgICAgICAgICArPSB2Zl9ncmF5d29ybGQubwogT0JKUy0kKENP TkZJR19HUkVZRURHRV9GSUxURVIpICAgICAgICAgICAgICAgKz0gdmZfY29sb3Jjb25zdGFuY3ku bwogT0JKUy0kKENPTkZJR19HVUlERURfRklMVEVSKSAgICAgICAgICAgICAgICAgKz0gdmZfZ3Vp ZGVkLm8KLU9CSlMtJChDT05GSUdfSEFMRENMVVRfRklMVEVSKSAgICAgICAgICAgICAgICs9IHZm X2x1dDNkLm8gZnJhbWVzeW5jLm8KK09CSlMtJChDT05GSUdfSEFMRENMVVRfRklMVEVSKSAgICAg ICAgICAgICAgICs9IHZmX2x1dDNkLm8gbHV0M2QubyBmcmFtZXN5bmMubwogT0JKUy0kKENPTkZJ R19IRkxJUF9GSUxURVIpICAgICAgICAgICAgICAgICAgKz0gdmZfaGZsaXAubwogT0JKUy0kKENP TkZJR19IRkxJUF9WVUxLQU5fRklMVEVSKSAgICAgICAgICAgKz0gdmZfZmxpcF92dWxrYW4ubyB2 dWxrYW4ubwogT0JKUy0kKENPTkZJR19ISVNURVFfRklMVEVSKSAgICAgICAgICAgICAgICAgKz0g dmZfaGlzdGVxLm8KQEAgLTM3MCwxMCArMzcwLDEwIEBAIE9CSlMtJChDT05GSUdfTElNSVRESUZG X0ZJTFRFUikgICAgICAgICAgICAgICs9IHZmX2xpbWl0ZGlmZi5vIGZyYW1lc3luYy5vCiBPQkpT LSQoQ09ORklHX0xJTUlURVJfRklMVEVSKSAgICAgICAgICAgICAgICArPSB2Zl9saW1pdGVyLm8K IE9CSlMtJChDT05GSUdfTE9PUF9GSUxURVIpICAgICAgICAgICAgICAgICAgICs9IGZfbG9vcC5v CiBPQkpTLSQoQ09ORklHX0xVTUFLRVlfRklMVEVSKSAgICAgICAgICAgICAgICArPSB2Zl9sdW1h a2V5Lm8KLU9CSlMtJChDT05GSUdfTFVUMURfRklMVEVSKSAgICAgICAgICAgICAgICAgICs9IHZm X2x1dDNkLm8KK09CSlMtJChDT05GSUdfTFVUMURfRklMVEVSKSAgICAgICAgICAgICAgICAgICs9 IHZmX2x1dDNkLm8gbHV0M2QubwogT0JKUy0kKENPTkZJR19MVVRfRklMVEVSKSAgICAgICAgICAg ICAgICAgICAgKz0gdmZfbHV0Lm8KIE9CSlMtJChDT05GSUdfTFVUMl9GSUxURVIpICAgICAgICAg ICAgICAgICAgICs9IHZmX2x1dDIubyBmcmFtZXN5bmMubwotT0JKUy0kKENPTkZJR19MVVQzRF9G SUxURVIpICAgICAgICAgICAgICAgICAgKz0gdmZfbHV0M2QubyBmcmFtZXN5bmMubworT0JKUy0k KENPTkZJR19MVVQzRF9GSUxURVIpICAgICAgICAgICAgICAgICAgKz0gdmZfbHV0M2QubyBsdXQz ZC5vIGZyYW1lc3luYy5vCiBPQkpTLSQoQ09ORklHX0xVVFJHQl9GSUxURVIpICAgICAgICAgICAg ICAgICArPSB2Zl9sdXQubwogT0JKUy0kKENPTkZJR19MVVRZVVZfRklMVEVSKSAgICAgICAgICAg ICAgICAgKz0gdmZfbHV0Lm8KIE9CSlMtJChDT05GSUdfTUFTS0VEQ0xBTVBfRklMVEVSKSAgICAg ICAgICAgICs9IHZmX21hc2tlZGNsYW1wLm8gZnJhbWVzeW5jLm8KQEAgLTU1Myw3ICs1NTMsNyBA QCBPQkpTLSQoQ09ORklHX1ZJRFNUQUJUUkFOU0ZPUk1fRklMVEVSKSAgICAgICArPSB2aWRzdGFi dXRpbHMubyB2Zl92aWRzdGFidHJhbnNmbwogT0JKUy0kKENPTkZJR19WSUZfRklMVEVSKSAgICAg ICAgICAgICAgICAgICAgKz0gdmZfdmlmLm8gZnJhbWVzeW5jLm8KIE9CSlMtJChDT05GSUdfVklH TkVUVEVfRklMVEVSKSAgICAgICAgICAgICAgICs9IHZmX3ZpZ25ldHRlLm8KIE9CSlMtJChDT05G SUdfVk1BRk1PVElPTl9GSUxURVIpICAgICAgICAgICAgICs9IHZmX3ZtYWZtb3Rpb24ubyBmcmFt ZXN5bmMubwotT0JKUy0kKENPTkZJR19WUFBfUVNWX0ZJTFRFUikgICAgICAgICAgICAgICAgKz0g dmZfdnBwX3Fzdi5vCitPQkpTLSQoQ09ORklHX1ZQUF9RU1ZfRklMVEVSKSAgICAgICAgICAgICAg ICArPSB2Zl92cHBfcXN2Lm8gbHV0M2QubwogT0JKUy0kKENPTkZJR19WU1RBQ0tfRklMVEVSKSAg ICAgICAgICAgICAgICAgKz0gdmZfc3RhY2subyBmcmFtZXN5bmMubwogT0JKUy0kKENPTkZJR19X M0ZESUZfRklMVEVSKSAgICAgICAgICAgICAgICAgKz0gdmZfdzNmZGlmLm8KIE9CSlMtJChDT05G SUdfV0FWRUZPUk1fRklMVEVSKSAgICAgICAgICAgICAgICs9IHZmX3dhdmVmb3JtLm8KZGlmZiAt LWdpdCBhL2xpYmF2ZmlsdGVyL2x1dDNkLmMgYi9saWJhdmZpbHRlci9sdXQzZC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjE3Mzk3OWFkY2MKLS0tIC9kZXYvbnVsbAor KysgYi9saWJhdmZpbHRlci9sdXQzZC5jCkBAIC0wLDAgKzEsNjY5IEBACisvKgorICogQ29weXJp Z2h0IChjKSAyMDEzIENsw6ltZW50IELFk3NjaAorICogQ29weXJpZ2h0IChjKSAyMDE4IFBhdWwg QiBNYWhvbAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1w ZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg KiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVk ZSAibHV0M2QuaCIKKworI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNpbmNsdWRlICJsaWJhdnV0aWwv YXZzdHJpbmcuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvZmlsZV9vcGVuLmgiCisKKyNkZWZpbmUg RVhQT05FTlRfTUFTSyAweDdGODAwMDAwCisjZGVmaW5lIE1BTlRJU1NBX01BU0sgMHgwMDdGRkZG RgorI2RlZmluZSBTSUdOX01BU0sgICAgIDB4ODAwMDAwMDAKKworc3RhdGljIGlubGluZSBmbG9h dCBzYW5pdGl6ZWYoZmxvYXQgZikKK3sKKyAgICB1bmlvbiBhdl9pbnRmbG9hdDMyIHQ7CisgICAg dC5mID0gZjsKKworICAgIGlmICgodC5pICYgRVhQT05FTlRfTUFTSykgPT0gRVhQT05FTlRfTUFT SykgeworICAgICAgICBpZiAoKHQuaSAmIE1BTlRJU1NBX01BU0spICE9IDApIHsKKyAgICAgICAg ICAgIC8vIE5BTgorICAgICAgICAgICAgcmV0dXJuIDAuMGY7CisgICAgICAgIH0gZWxzZSBpZiAo dC5pICYgU0lHTl9NQVNLKSB7CisgICAgICAgICAgICAvLyAtSU5GCisgICAgICAgICAgICByZXR1 cm4gLUZMVF9NQVg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyArSU5GCisgICAg ICAgICAgICByZXR1cm4gRkxUX01BWDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZjsK K30KKworc3RhdGljIGlubGluZSBmbG9hdCBsZXJwZihmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0 IGYpCit7CisgICAgcmV0dXJuIHYwICsgKHYxIC0gdjApICogZjsKK30KKworc3RhdGljIGlubGlu ZSBzdHJ1Y3QgcmdidmVjIGxlcnAoY29uc3Qgc3RydWN0IHJnYnZlYyAqdjAsIGNvbnN0IHN0cnVj dCByZ2J2ZWMgKnYxLCBmbG9hdCBmKQoreworICAgIHN0cnVjdCByZ2J2ZWMgdiA9IHsKKyAgICAg ICAgbGVycGYodjAtPnIsIHYxLT5yLCBmKSwgbGVycGYodjAtPmcsIHYxLT5nLCBmKSwgbGVycGYo djAtPmIsIHYxLT5iLCBmKQorICAgIH07CisgICAgcmV0dXJuIHY7Cit9CisKK2ludCBmZl9hbGxv Y2F0ZV8zZGx1dChBVkZpbHRlckNvbnRleHQgKmN0eCwgTFVUM0RDb250ZXh0ICpsdXQzZCwgaW50 IGx1dHNpemUsIGludCBwcmVsdXQpCit7CisgICAgaW50IGk7CisgICAgaWYgKGx1dHNpemUgPCAy IHx8IGx1dHNpemUgPiBNQVhfTEVWRUwpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VS Uk9SLCAiVG9vIGxhcmdlIG9yIGludmFsaWQgM0QgTFVUIHNpemVcbiIpOworICAgICAgICByZXR1 cm4gQVZFUlJPUihFSU5WQUwpOworICAgIH0KKworICAgIGF2X2ZyZWVwKCZsdXQzZC0+bHV0KTsK KyAgICBsdXQzZC0+bHV0ID0gYXZfbWFsbG9jX2FycmF5KGx1dHNpemUgKiBsdXRzaXplICogbHV0 c2l6ZSwgc2l6ZW9mKCpsdXQzZC0+bHV0KSk7CisgICAgaWYgKCFsdXQzZC0+bHV0KQorICAgICAg ICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgaWYgKHByZWx1dCkgeworICAgICAgICBs dXQzZC0+cHJlbHV0LnNpemUgPSBQUkVMVVRfU0laRTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8 IDM7IGkrKykgeworICAgICAgICAgICAgYXZfZnJlZXAoJmx1dDNkLT5wcmVsdXQubHV0W2ldKTsK KyAgICAgICAgICAgIGx1dDNkLT5wcmVsdXQubHV0W2ldID0gYXZfbWFsbG9jX2FycmF5KFBSRUxV VF9TSVpFLCBzaXplb2YoKmx1dDNkLT5wcmVsdXQubHV0WzBdKSk7CisgICAgICAgICAgICBpZiAo IWx1dDNkLT5wcmVsdXQubHV0W2ldKQorICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVO T01FTSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBsdXQzZC0+cHJlbHV0LnNp emUgPSAwOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgICAgICAgICAgICBh dl9mcmVlcCgmbHV0M2QtPnByZWx1dC5sdXRbaV0pOworICAgICAgICB9CisgICAgfQorICAgIGx1 dDNkLT5sdXRzaXplID0gbHV0c2l6ZTsKKyAgICBsdXQzZC0+bHV0c2l6ZTIgPSBsdXRzaXplICog bHV0c2l6ZTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfaWRlbnRpdHlfbWF0 cml4KEFWRmlsdGVyQ29udGV4dCAqY3R4LCBMVVQzRENvbnRleHQgKmx1dDNkLCBpbnQgc2l6ZSkK K3sKKyAgICBpbnQgcmV0LCBpLCBqLCBrOworICAgIGNvbnN0IGludCBzaXplMiA9IHNpemUgKiBz aXplOworICAgIGNvbnN0IGZsb2F0IGMgPSAxLiAvIChzaXplIC0gMSk7CisKKyAgICByZXQgPSBm Zl9hbGxvY2F0ZV8zZGx1dChjdHgsIGx1dDNkLCBzaXplLCAwKTsKKyAgICBpZiAocmV0IDwgMCkK KyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIGZvciAoayA9IDA7IGsgPCBzaXplOyBrKyspIHsK KyAgICAgICAgZm9yIChqID0gMDsgaiA8IHNpemU7IGorKykgeworICAgICAgICAgICAgZm9yIChp ID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgICAgIHN0cnVjdCByZ2J2ZWMgKnZl YyA9ICZsdXQzZC0+bHV0W2sgKiBzaXplMiArIGogKiBzaXplICsgaV07CisgICAgICAgICAgICAg ICAgdmVjLT5yID0gayAqIGM7CisgICAgICAgICAgICAgICAgdmVjLT5nID0gaiAqIGM7CisgICAg ICAgICAgICAgICAgdmVjLT5iID0gaSAqIGM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICB9CisKKyAgICByZXR1cm4gMDsKK30KKworI2RlZmluZSBNQVhfTElORV9TSVpFIDUxMgorCitz dGF0aWMgaW50IHNraXBfbGluZShjb25zdCBjaGFyICpwKQoreworICAgIHdoaWxlICgqcCAmJiBh dl9pc3NwYWNlKCpwKSkKKyAgICAgICAgcCsrOworICAgIHJldHVybiAhKnAgfHwgKnAgPT0gJyMn OworfQorCitzdGF0aWMgY2hhciogZmdldF9uZXh0X3dvcmQoY2hhciogZHN0LCBpbnQgbWF4LCBG SUxFKiBmKQoreworICAgIGludCBjOworICAgIGNoYXIgKnAgPSBkc3Q7CisKKyAgICAvKiBmb3Ig bnVsbCAqLworICAgIG1heC0tOworICAgIC8qIHNraXAgdW50aWwgbmV4dCBub24gd2hpdGVzcGFj ZSBjaGFyICovCisgICAgd2hpbGUgKChjID0gZmdldGMoZikpICE9IEVPRikgeworICAgICAgICBp ZiAoYXZfaXNzcGFjZShjKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICpwKysg PSBjOworICAgICAgICBtYXgtLTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyogZ2V0 IG1heCBieXRlcyBvciB1cCB1bnRpbCBuZXh0IHdoaXRlc3BhY2UgY2hhciAqLworICAgIGZvciAo OyBtYXggPiAwOyBtYXgtLSkgeworICAgICAgICBpZiAoKGMgPSBmZ2V0YyhmKSkgPT0gRU9GKQor ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGF2X2lzc3BhY2UoYykpCisgICAgICAg ICAgICBicmVhazsKKworICAgICAgICAqcCsrID0gYzsKKyAgICB9CisKKyAgICAqcCA9IDA7Cisg ICAgaWYgKHAgPT0gZHN0KQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gcDsKK30K KworCisjZGVmaW5lIE5FWFRfTElORShsb29wX2NvbmQpIGRvIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgaWYgKCFmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7ICAgICAg ICAgICAgICAgICAgICBcCisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVuZXhw ZWN0ZWQgRU9GXG4iKTsgICAgICBcCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRB OyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlIChsb29wX2NvbmQpCisK KyNkZWZpbmUgTkVYVF9MSU5FX09SX0dPVE8obG9vcF9jb25kLCBsYWJlbCkgZG8geyAgICAgICAg ICAgIFwKKyAgICBpZiAoIWZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHsgICAgICAgICAg ICAgICAgICAgIFwKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5leHBlY3Rl ZCBFT0ZcbiIpOyAgICAgIFwKKyAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZ290byBsYWJlbDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKGxvb3BfY29uZCkK KworLyogQmFzaWNhbGx5IHIgZyBhbmQgYiBmbG9hdCB2YWx1ZXMgb24gZWFjaCBsaW5lLCB3aXRo IGEgZmFjdWx0YXRpdmUgM0RMVVRTSVpFCisgKiBkaXJlY3RpdmU7IHNlZW1zIHRvIGJlIGdlbmVy YXRlZCBieSBEYXZpbmNpICovCitzdGF0aWMgaW50IHBhcnNlX2RhdChBVkZpbHRlckNvbnRleHQg KmN0eCwgTFVUM0RDb250ZXh0ICpsdXQzZCwgRklMRSAqZikKK3sKKyAgICBjaGFyIGxpbmVbTUFY X0xJTkVfU0laRV07CisgICAgaW50IHJldCwgaSwgaiwgaywgc2l6ZSwgc2l6ZTI7CisKKyAgICBs dXQzZC0+bHV0c2l6ZSA9IHNpemUgPSAzMzsKKyAgICBzaXplMiA9IHNpemUgKiBzaXplOworCisg ICAgTkVYVF9MSU5FKHNraXBfbGluZShsaW5lKSk7CisgICAgaWYgKCFzdHJuY21wKGxpbmUsICIz RExVVFNJWkUgIiwgMTApKSB7CisgICAgICAgIHNpemUgPSBzdHJ0b2wobGluZSArIDEwLCBOVUxM LCAwKTsKKworICAgICAgICBORVhUX0xJTkUoc2tpcF9saW5lKGxpbmUpKTsKKyAgICB9CisKKyAg ICByZXQgPSBmZl9hbGxvY2F0ZV8zZGx1dChjdHgsIGx1dDNkLCBzaXplLCAwKTsKKyAgICBpZiAo cmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIGZvciAoayA9IDA7IGsgPCBzaXpl OyBrKyspIHsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IHNpemU7IGorKykgeworICAgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgICAgIHN0cnVjdCBy Z2J2ZWMgKnZlYyA9ICZsdXQzZC0+bHV0W2sgKiBzaXplMiArIGogKiBzaXplICsgaV07CisgICAg ICAgICAgICAgICAgaWYgKGsgIT0gMCB8fCBqICE9IDAgfHwgaSAhPSAwKQorICAgICAgICAgICAg ICAgICAgICBORVhUX0xJTkUoc2tpcF9saW5lKGxpbmUpKTsKKyAgICAgICAgICAgICAgICBpZiAo YXZfc3NjYW5mKGxpbmUsICIlZiAlZiAlZiIsICZ2ZWMtPnIsICZ2ZWMtPmcsICZ2ZWMtPmIpICE9 IDMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAg ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKiBJcmlk YXMgZm9ybWF0ICovCitzdGF0aWMgaW50IHBhcnNlX2N1YmUoQVZGaWx0ZXJDb250ZXh0ICpjdHgs IExVVDNEQ29udGV4dCAqbHV0M2QsIEZJTEUgKmYpCit7CisgICAgY2hhciBsaW5lW01BWF9MSU5F X1NJWkVdOworICAgIGZsb2F0IG1pblszXSA9IHswLjAsIDAuMCwgMC4wfTsKKyAgICBmbG9hdCBt YXhbM10gPSB7MS4wLCAxLjAsIDEuMH07CisKKyAgICB3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9m KGxpbmUpLCBmKSkgeworICAgICAgICBpZiAoIXN0cm5jbXAobGluZSwgIkxVVF8zRF9TSVpFIiwg MTEpKSB7CisgICAgICAgICAgICBpbnQgcmV0LCBpLCBqLCBrOworICAgICAgICAgICAgY29uc3Qg aW50IHNpemUgPSBzdHJ0b2wobGluZSArIDEyLCBOVUxMLCAwKTsKKyAgICAgICAgICAgIGNvbnN0 IGludCBzaXplMiA9IHNpemUgKiBzaXplOworCisgICAgICAgICAgICByZXQgPSBmZl9hbGxvY2F0 ZV8zZGx1dChjdHgsIGx1dDNkLCBzaXplLCAwKTsKKyAgICAgICAgICAgIGlmIChyZXQgPCAwKQor ICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisKKyAgICAgICAgICAgIGZvciAoayA9IDA7IGsg PCBzaXplOyBrKyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgc2l6ZTsgaisr KSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZ2J2ZWMgKnZlYyA9ICZsdXQzZC0+bHV0W2kg KiBzaXplMiArIGogKiBzaXplICsga107CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsK K3RyeV9hZ2FpbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVhUX0xJTkUoMCk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJuY21wKGxpbmUsICJET01BSU5fIiwg NykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKnZhbHMgPSBOVUxM OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAgICAgICghc3RybmNtcChsaW5l ICsgNywgIk1JTiAiLCA0KSkgdmFscyA9IG1pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZWxzZSBpZiAoIXN0cm5jbXAobGluZSArIDcsICJNQVggIiwgNCkpIHZhbHMgPSBtYXg7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFscykKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdl9zc2NhbmYobGluZSArIDExLCAiJWYgJWYg JWYiLCB2YWxzLCB2YWxzICsgMSwgdmFscyArIDIpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJtaW46ICVmICVmICVmIHwgbWF4OiAl ZiAlZiAlZlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pblsw XSwgbWluWzFdLCBtaW5bMl0sIG1heFswXSwgbWF4WzFdLCBtYXhbMl0pOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBnb3RvIHRyeV9hZ2FpbjsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9IGVsc2UgaWYgKCFzdHJuY21wKGxpbmUsICJUSVRMRSIsIDUpKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gdHJ5X2FnYWluOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKHNraXBfbGlu ZShsaW5lKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXZfc3NjYW5mKGxpbmUsICIl ZiAlZiAlZiIsICZ2ZWMtPnIsICZ2ZWMtPmcsICZ2ZWMtPmIpICE9IDMpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGx1dDNkLT5zY2FsZS5yID0gYXZfY2xpcGYo MS4gLyAobWF4WzBdIC0gbWluWzBdKSwgMC5mLCAxLmYpOworICAgIGx1dDNkLT5zY2FsZS5nID0g YXZfY2xpcGYoMS4gLyAobWF4WzFdIC0gbWluWzFdKSwgMC5mLCAxLmYpOworICAgIGx1dDNkLT5z Y2FsZS5iID0gYXZfY2xpcGYoMS4gLyAobWF4WzJdIC0gbWluWzJdKSwgMC5mLCAxLmYpOworCisg ICAgcmV0dXJuIDA7Cit9CisKKy8qIEFzc3VtZSAxN3gxN3gxNyBMVVQgd2l0aCBhIDE2LWJpdCBk ZXB0aAorICogRklYTUU6IGl0IHNlZW1zIHRoZXJlIGFyZSB2YXJpb3VzIDNkbCBmb3JtYXRzICov CitzdGF0aWMgaW50IHBhcnNlXzNkbChBVkZpbHRlckNvbnRleHQgKmN0eCwgTFVUM0RDb250ZXh0 ICpsdXQzZCwgRklMRSAqZikKK3sKKyAgICBjaGFyIGxpbmVbTUFYX0xJTkVfU0laRV07CisgICAg aW50IHJldCwgaSwgaiwgazsKKyAgICBjb25zdCBpbnQgc2l6ZSA9IDE3OworICAgIGNvbnN0IGlu dCBzaXplMiA9IDE3ICogMTc7CisgICAgY29uc3QgZmxvYXQgc2NhbGUgPSAxNioxNioxNjsKKwor ICAgIGx1dDNkLT5sdXRzaXplID0gc2l6ZTsKKworICAgIHJldCA9IGZmX2FsbG9jYXRlXzNkbHV0 KGN0eCwgbHV0M2QsIHNpemUsIDApOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4g cmV0OworCisgICAgTkVYVF9MSU5FKHNraXBfbGluZShsaW5lKSk7CisgICAgZm9yIChrID0gMDsg ayA8IHNpemU7IGsrKykgeworICAgICAgICBmb3IgKGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7Cisg ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAg aW50IHIsIGcsIGI7CisgICAgICAgICAgICAgICAgc3RydWN0IHJnYnZlYyAqdmVjID0gJmx1dDNk LT5sdXRbayAqIHNpemUyICsgaiAqIHNpemUgKyBpXTsKKworICAgICAgICAgICAgICAgIE5FWFRf TElORShza2lwX2xpbmUobGluZSkpOworICAgICAgICAgICAgICAgIGlmIChhdl9zc2NhbmYobGlu ZSwgIiVkICVkICVkIiwgJnIsICZnLCAmYikgIT0gMykKKyAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAgICAgICAgdmVjLT5yID0gciAvIHNj YWxlOworICAgICAgICAgICAgICAgIHZlYy0+ZyA9IGcgLyBzY2FsZTsKKyAgICAgICAgICAgICAg ICB2ZWMtPmIgPSBiIC8gc2NhbGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg ICAgcmV0dXJuIDA7Cit9CisKKy8qIFBhbmRvcmEgZm9ybWF0ICovCitzdGF0aWMgaW50IHBhcnNl X20zZChBVkZpbHRlckNvbnRleHQgKmN0eCwgTFVUM0RDb250ZXh0ICpsdXQzZCwgRklMRSAqZikK K3sKKyAgICBmbG9hdCBzY2FsZTsKKyAgICBpbnQgcmV0LCBpLCBqLCBrLCBzaXplLCBzaXplMiwg aW4gPSAtMSwgb3V0ID0gLTE7CisgICAgY2hhciBsaW5lW01BWF9MSU5FX1NJWkVdOworICAgIHVp bnQ4X3QgcmdiX21hcFszXSA9IHswLCAxLCAyfTsKKworICAgIHdoaWxlIChmZ2V0cyhsaW5lLCBz aXplb2YobGluZSksIGYpKSB7CisgICAgICAgIGlmICAgICAgKCFzdHJuY21wKGxpbmUsICJpbiIs ICAyKSkgaW4gID0gc3RydG9sKGxpbmUgKyAyLCBOVUxMLCAwKTsKKyAgICAgICAgZWxzZSBpZiAo IXN0cm5jbXAobGluZSwgIm91dCIsIDMpKSBvdXQgPSBzdHJ0b2wobGluZSArIDMsIE5VTEwsIDAp OworICAgICAgICBlbHNlIGlmICghc3RybmNtcChsaW5lLCAidmFsdWVzIiwgNikpIHsKKyAgICAg ICAgICAgIGNvbnN0IGNoYXIgKnAgPSBsaW5lICsgNjsKKyNkZWZpbmUgU0VUX0NPTE9SKGlkKSBk byB7ICAgICAgICAgICAgICAgICAgXAorICAgIHdoaWxlIChhdl9pc3NwYWNlKCpwKSkgICAgICAg ICAgICAgICAgICBcCisgICAgICAgIHArKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgICBzd2l0Y2ggKCpwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNh c2UgJ3InOiByZ2JfbWFwW2lkXSA9IDA7IGJyZWFrOyAgICAgICBcCisgICAgY2FzZSAnZyc6IHJn Yl9tYXBbaWRdID0gMTsgYnJlYWs7ICAgICAgIFwKKyAgICBjYXNlICdiJzogcmdiX21hcFtpZF0g PSAyOyBicmVhazsgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgd2hpbGUgKCpwICYmICFhdl9pc3NwYWNlKCpwKSkgICAgICAgICAgIFwK KyAgICAgICAgcCsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAo MCkKKyAgICAgICAgICAgIFNFVF9DT0xPUigwKTsKKyAgICAgICAgICAgIFNFVF9DT0xPUigxKTsK KyAgICAgICAgICAgIFNFVF9DT0xPUigyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9 CisgICAgfQorCisgICAgaWYgKGluID09IC0xIHx8IG91dCA9PSAtMSkgeworICAgICAgICBhdl9s b2coY3R4LCBBVl9MT0dfRVJST1IsICJpbiBhbmQgb3V0IG11c3QgYmUgZGVmaW5lZFxuIik7Cisg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIH0KKyAgICBpZiAoaW4gPCAy IHx8IG91dCA8IDIgfHwKKyAgICAgICAgaW4gID4gTUFYX0xFVkVMKk1BWF9MRVZFTCpNQVhfTEVW RUwgfHwKKyAgICAgICAgb3V0ID4gTUFYX0xFVkVMKk1BWF9MRVZFTCpNQVhfTEVWRUwpIHsKKyAg ICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiaW52YWxpZCBpbiAoJWQpIG9yIG91dCAo JWQpXG4iLCBpbiwgb3V0KTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cisg ICAgfQorICAgIGZvciAoc2l6ZSA9IDE7IHNpemUqc2l6ZSpzaXplIDwgaW47IHNpemUrKyk7Cisg ICAgbHV0M2QtPmx1dHNpemUgPSBzaXplOworICAgIHNpemUyID0gc2l6ZSAqIHNpemU7CisKKyAg ICByZXQgPSBmZl9hbGxvY2F0ZV8zZGx1dChjdHgsIGx1dDNkLCBzaXplLCAwKTsKKyAgICBpZiAo cmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHNjYWxlID0gMS4gLyAob3V0IC0g MSk7CisKKyAgICBmb3IgKGsgPSAwOyBrIDwgc2l6ZTsgaysrKSB7CisgICAgICAgIGZvciAoaiA9 IDA7IGogPCBzaXplOyBqKyspIHsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBp KyspIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgcmdidmVjICp2ZWMgPSAmbHV0M2QtPmx1dFtr ICogc2l6ZTIgKyBqICogc2l6ZSArIGldOworICAgICAgICAgICAgICAgIGZsb2F0IHZhbFszXTsK KworICAgICAgICAgICAgICAgIE5FWFRfTElORSgwKTsKKyAgICAgICAgICAgICAgICBpZiAoYXZf c3NjYW5mKGxpbmUsICIlZiAlZiAlZiIsIHZhbCwgdmFsICsgMSwgdmFsICsgMikgIT0gMykKKyAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAg ICAgICAgdmVjLT5yID0gdmFsW3JnYl9tYXBbMF1dICogc2NhbGU7CisgICAgICAgICAgICAgICAg dmVjLT5nID0gdmFsW3JnYl9tYXBbMV1dICogc2NhbGU7CisgICAgICAgICAgICAgICAgdmVjLT5i ID0gdmFsW3JnYl9tYXBbMl1dICogc2NhbGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmVhcmVzdF9zYW1wbGVfaW5kZXgo ZmxvYXQgKmRhdGEsIGZsb2F0IHgsIGludCBsb3csIGludCBoaSkKK3sKKyAgICBpbnQgbWlkOwor ICAgIGlmICh4IDwgZGF0YVtsb3ddKQorICAgICAgICByZXR1cm4gbG93OworCisgICAgaWYgKHgg PiBkYXRhW2hpXSkKKyAgICAgICAgcmV0dXJuIGhpOworCisgICAgZm9yICg7OykgeworICAgICAg ICBhdl9hc3NlcnQwKHggPj0gZGF0YVtsb3ddKTsKKyAgICAgICAgYXZfYXNzZXJ0MCh4IDw9IGRh dGFbaGldKTsKKyAgICAgICAgYXZfYXNzZXJ0MCgoaGktbG93KSA+IDApOworCisgICAgICAgIGlm IChoaSAtIGxvdyA9PSAxKQorICAgICAgICAgICAgcmV0dXJuIGxvdzsKKworICAgICAgICBtaWQg PSAobG93ICsgaGkpIC8gMjsKKworICAgICAgICBpZiAoeCA8IGRhdGFbbWlkXSkKKyAgICAgICAg ICAgIGhpID0gbWlkOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb3cgPSBtaWQ7CisgICAg fQorCisgICAgcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgTkVYVF9GTE9BVF9PUl9HT1RPKHZhbHVl LCBsYWJlbCkgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIWZnZXRfbmV4dF93b3JkKGxp bmUsIHNpemVvZihsaW5lKSAsZikpIHsgICAgICAgICAgIFwKKyAgICAgICAgcmV0ID0gQVZFUlJP Ul9JTlZBTElEREFUQTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZ290byBs YWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICBpZiAoYXZfc3NjYW5mKGxpbmUsICIlZiIsICZ2YWx1ZSkgIT0gMSkgeyAgICAgICAgICAgICAg IFwKKyAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICAgICAgZ290byBsYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICB9CisKK3N0YXRpYyBpbnQgcGFyc2VfY2luZXNwYWNlKEFWRmls dGVyQ29udGV4dCAqY3R4LCBMVVQzRENvbnRleHQgKmx1dDNkLCBGSUxFICpmKQoreworICAgIGNo YXIgbGluZVtNQVhfTElORV9TSVpFXTsKKyAgICBmbG9hdCBpbl9taW5bM10gID0gezAuMCwgMC4w LCAwLjB9OworICAgIGZsb2F0IGluX21heFszXSAgPSB7MS4wLCAxLjAsIDEuMH07CisgICAgZmxv YXQgb3V0X21pblszXSA9IHswLjAsIDAuMCwgMC4wfTsKKyAgICBmbG9hdCBvdXRfbWF4WzNdID0g ezEuMCwgMS4wLCAxLjB9OworICAgIGludCBpbnNpZGVfbWV0YWRhdGEgPSAwLCBzaXplLCBzaXpl MjsKKyAgICBpbnQgcHJlbHV0ID0gMDsKKyAgICBpbnQgcmV0ID0gMDsKKworICAgIGludCBwcmVs dXRfc2l6ZXNbM10gPSB7MCwgMCwgMH07CisgICAgZmxvYXQgKmluX3ByZWx1dFszXSAgPSB7TlVM TCwgTlVMTCwgTlVMTH07CisgICAgZmxvYXQgKm91dF9wcmVsdXRbM10gPSB7TlVMTCwgTlVMTCwg TlVMTH07CisKKyAgICBORVhUX0xJTkVfT1JfR09UTyhza2lwX2xpbmUobGluZSksIGVuZCk7Cisg ICAgaWYgKHN0cm5jbXAobGluZSwgIkNTUExVVFYxMDAiLCAxMCkpIHsKKyAgICAgICAgYXZfbG9n KGN0eCwgQVZfTE9HX0VSUk9SLCAiTm90IGNpbmVTcGFjZSBMVVQgZm9ybWF0XG4iKTsKKyAgICAg ICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAg ICBORVhUX0xJTkVfT1JfR09UTyhza2lwX2xpbmUobGluZSksIGVuZCk7CisgICAgaWYgKHN0cm5j bXAobGluZSwgIjNEIiwgMikpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAi Tm90IDNEIExVVCBmb3JtYXRcbiIpOworICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cisg ICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIE5FWFRf TElORV9PUl9HT1RPKHNraXBfbGluZShsaW5lKSwgZW5kKTsKKworICAgICAgICBpZiAoIXN0cm5j bXAobGluZSwgIkJFR0lOIE1FVEFEQVRBIiwgMTQpKSB7CisgICAgICAgICAgICBpbnNpZGVfbWV0 YWRhdGEgPSAxOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYg KCFzdHJuY21wKGxpbmUsICJFTkQgTUVUQURBVEEiLCAxMikpIHsKKyAgICAgICAgICAgIGluc2lk ZV9tZXRhZGF0YSA9IDA7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAg ICBpZiAoaW5zaWRlX21ldGFkYXRhID09IDApIHsKKyAgICAgICAgICAgIGludCBzaXplX3IsIHNp emVfZywgc2l6ZV9iOworCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykg eworICAgICAgICAgICAgICAgIGludCBucG9pbnRzID0gc3RydG9sKGxpbmUsIE5VTEwsIDApOwor CisgICAgICAgICAgICAgICAgaWYgKG5wb2ludHMgPiAyKSB7CisgICAgICAgICAgICAgICAgICAg IGZsb2F0IHYsbGFzdDsKKworICAgICAgICAgICAgICAgICAgICBpZiAobnBvaW50cyA+IFBSRUxV VF9TSVpFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJS T1IsICJQcmVsdXQgc2l6ZSB0b28gbGFyZ2UuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IHJldCA9IEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IGVuZDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChp bl9wcmVsdXRbaV0gfHwgb3V0X3ByZWx1dFtpXSkgeworICAgICAgICAgICAgICAgICAgICAgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBmaWxlIGhhcyBtdWx0aXBsZSBwcmVs dXRzLlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBBVkVSUk9SX0lOVkFMSURE QVRBOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgICAgICAgICAg ICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpbl9wcmVsdXRbaV0gID0gKGZsb2F0Kilhdl9t YWxsb2MobnBvaW50cyAqIHNpemVvZihmbG9hdCkpOworICAgICAgICAgICAgICAgICAgICBvdXRf cHJlbHV0W2ldID0gKGZsb2F0Kilhdl9tYWxsb2MobnBvaW50cyAqIHNpemVvZihmbG9hdCkpOwor ICAgICAgICAgICAgICAgICAgICBpZiAoIWluX3ByZWx1dFtpXSB8fCAhb3V0X3ByZWx1dFtpXSkg eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAg ICAgICAgICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg ICAgICAgICAgICAgICAgICBwcmVsdXRfc2l6ZXNbaV0gPSBucG9pbnRzOworICAgICAgICAgICAg ICAgICAgICBpbl9taW5baV0gPSBGTFRfTUFYOworICAgICAgICAgICAgICAgICAgICBpbl9tYXhb aV0gPSAtRkxUX01BWDsKKyAgICAgICAgICAgICAgICAgICAgb3V0X21pbltpXSA9IEZMVF9NQVg7 CisgICAgICAgICAgICAgICAgICAgIG91dF9tYXhbaV0gPSAtRkxUX01BWDsKKworICAgICAgICAg ICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG5wb2ludHM7IGorKykgeworICAgICAgICAg ICAgICAgICAgICAgICAgTkVYVF9GTE9BVF9PUl9HT1RPKHYsIGVuZCkKKyAgICAgICAgICAgICAg ICAgICAgICAgIGluX21pbltpXSA9IEZGTUlOKGluX21pbltpXSwgdik7CisgICAgICAgICAgICAg ICAgICAgICAgICBpbl9tYXhbaV0gPSBGRk1BWChpbl9tYXhbaV0sIHYpOworICAgICAgICAgICAg ICAgICAgICAgICAgaW5fcHJlbHV0W2ldW2pdID0gdjsKKyAgICAgICAgICAgICAgICAgICAgICAg IGlmIChqID4gMCAmJiB2IDwgbGFzdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgZmlsZSwgbm9uIGluY3JlYXNpbmcgcHJl bHV0LlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9N RU0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IHY7CisgICAgICAg ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8 IG5wb2ludHM7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgTkVYVF9GTE9BVF9PUl9H T1RPKHYsIGVuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dF9taW5baV0gPSBGRk1JTihv dXRfbWluW2ldLCB2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dF9tYXhbaV0gPSBGRk1B WChvdXRfbWF4W2ldLCB2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wcmVsdXRbaV1b al0gPSB2OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB9IGVsc2Ug aWYgKG5wb2ludHMgPT0gMikgIHsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9MSU5FX09SX0dP VE8oc2tpcF9saW5lKGxpbmUpLCBlbmQpOworICAgICAgICAgICAgICAgICAgICBpZiAoYXZfc3Nj YW5mKGxpbmUsICIlZiAlZiIsICZpbl9taW5baV0sICZpbl9tYXhbaV0pICE9IDIpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHJldCA9IEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAg ICAgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICBORVhUX0xJTkVfT1JfR09UTyhza2lwX2xpbmUobGluZSksIGVuZCk7CisgICAg ICAgICAgICAgICAgICAgIGlmIChhdl9zc2NhbmYobGluZSwgIiVmICVmIiwgJm91dF9taW5baV0s ICZvdXRfbWF4W2ldKSAhPSAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBBVkVS Uk9SX0lOVkFMSUREQVRBOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlbmQ7CisgICAg ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVuc3VwcG9ydGVkIG51bWJlciBv ZiBwcmUtbHV0IHBvaW50cy5cbiIpOworICAgICAgICAgICAgICAgICAgICByZXQgPSBBVkVSUk9S X1BBVENIV0VMQ09NRTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgICAg ICAgICAgfQorCisgICAgICAgICAgICAgICAgTkVYVF9MSU5FX09SX0dPVE8oc2tpcF9saW5lKGxp bmUpLCBlbmQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYXZfc3NjYW5mKGxp bmUsICIlZCAlZCAlZCIsICZzaXplX3IsICZzaXplX2csICZzaXplX2IpICE9IDMpIHsKKyAgICAg ICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgICAgICAgICAgZ290byBl bmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2l6ZV9yICE9IHNpemVfZyB8fCBz aXplX3IgIT0gc2l6ZV9iKSB7CisgICAgICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VS Uk9SLCAiVW5zdXBwb3J0ZWQgc2l6ZSBjb21iaW5hdGlvbjogJWR4JWR4JWQuXG4iLCBzaXplX3Is IHNpemVfZywgc2l6ZV9iKTsKKyAgICAgICAgICAgICAgICByZXQgPSBBVkVSUk9SX1BBVENIV0VM Q09NRTsKKyAgICAgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgICAgIH0KKworICAgICAg ICAgICAgc2l6ZSA9IHNpemVfcjsKKyAgICAgICAgICAgIHNpemUyID0gc2l6ZSAqIHNpemU7CisK KyAgICAgICAgICAgIGlmIChwcmVsdXRfc2l6ZXNbMF0gJiYgcHJlbHV0X3NpemVzWzFdICYmIHBy ZWx1dF9zaXplc1syXSkKKyAgICAgICAgICAgICAgICBwcmVsdXQgPSAxOworCisgICAgICAgICAg ICByZXQgPSBmZl9hbGxvY2F0ZV8zZGx1dChjdHgsIGx1dDNkLCBzaXplLCBwcmVsdXQpOworICAg ICAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAg ICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBzaXplOyBrKyspIHsKKyAgICAgICAgICAgICAg ICBmb3IgKGludCBqID0gMDsgaiA8IHNpemU7IGorKykgeworICAgICAgICAgICAgICAgICAgICBm b3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IHJnYnZlYyAqdmVjID0gJmx1dDNkLT5sdXRbaSAqIHNpemUyICsgaiAqIHNpemUgKyBr XTsKKworICAgICAgICAgICAgICAgICAgICAgICAgTkVYVF9MSU5FX09SX0dPVE8oc2tpcF9saW5l KGxpbmUpLCBlbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF2X3NzY2FuZihsaW5l LCAiJWYgJWYgJWYiLCAmdmVjLT5yLCAmdmVjLT5nLCAmdmVjLT5iKSAhPSAzKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K KworICAgICAgICAgICAgICAgICAgICAgICAgdmVjLT5yICo9IG91dF9tYXhbMF0gLSBvdXRfbWlu WzBdOworICAgICAgICAgICAgICAgICAgICAgICAgdmVjLT5nICo9IG91dF9tYXhbMV0gLSBvdXRf bWluWzFdOworICAgICAgICAgICAgICAgICAgICAgICAgdmVjLT5iICo9IG91dF9tYXhbMl0gLSBv dXRfbWluWzJdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAg IGlmIChwcmVsdXQpIHsKKyAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCAzOyBjKyspIHsKKwor ICAgICAgICAgICAgbHV0M2QtPnByZWx1dC5taW5bY10gPSBpbl9taW5bY107CisgICAgICAgICAg ICBsdXQzZC0+cHJlbHV0Lm1heFtjXSA9IGluX21heFtjXTsKKyAgICAgICAgICAgIGx1dDNkLT5w cmVsdXQuc2NhbGVbY10gPSAgKDEuMGYgLyAoZmxvYXQpKGluX21heFtjXSAtIGluX21pbltjXSkp ICogKGx1dDNkLT5wcmVsdXQuc2l6ZSAtIDEpOworCisgICAgICAgICAgICBmb3IgKGludCBpID0g MDsgaSA8IGx1dDNkLT5wcmVsdXQuc2l6ZTsgKytpKSB7CisgICAgICAgICAgICAgICAgZmxvYXQg bWl4ID0gKGZsb2F0KSBpIC8gKGZsb2F0KShsdXQzZC0+cHJlbHV0LnNpemUgLSAxKTsKKyAgICAg ICAgICAgICAgICBmbG9hdCB4ID0gbGVycGYoaW5fbWluW2NdLCBpbl9tYXhbY10sIG1peCksIGEs IGI7CisKKyAgICAgICAgICAgICAgICBpbnQgaWR4ID0gbmVhcmVzdF9zYW1wbGVfaW5kZXgoaW5f cHJlbHV0W2NdLCB4LCAwLCBwcmVsdXRfc2l6ZXNbY10tMSk7CisgICAgICAgICAgICAgICAgYXZf YXNzZXJ0MChpZHggKyAxIDwgcHJlbHV0X3NpemVzW2NdKTsKKworICAgICAgICAgICAgICAgIGEg ICA9IG91dF9wcmVsdXRbY11baWR4ICsgMF07CisgICAgICAgICAgICAgICAgYiAgID0gb3V0X3By ZWx1dFtjXVtpZHggKyAxXTsKKyAgICAgICAgICAgICAgICBtaXggPSB4IC0gaW5fcHJlbHV0W2Nd W2lkeF07CisKKyAgICAgICAgICAgICAgICBsdXQzZC0+cHJlbHV0Lmx1dFtjXVtpXSA9IHNhbml0 aXplZihsZXJwZihhLCBiLCBtaXgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg ICBsdXQzZC0+c2NhbGUuciA9IDEuMDBmOworICAgICAgICBsdXQzZC0+c2NhbGUuZyA9IDEuMDBm OworICAgICAgICBsdXQzZC0+c2NhbGUuYiA9IDEuMDBmOworCisgICAgfSBlbHNlIHsKKyAgICAg ICAgbHV0M2QtPnNjYWxlLnIgPSBhdl9jbGlwZigxLiAvIChpbl9tYXhbMF0gLSBpbl9taW5bMF0p LCAwLmYsIDEuZik7CisgICAgICAgIGx1dDNkLT5zY2FsZS5nID0gYXZfY2xpcGYoMS4gLyAoaW5f bWF4WzFdIC0gaW5fbWluWzFdKSwgMC5mLCAxLmYpOworICAgICAgICBsdXQzZC0+c2NhbGUuYiA9 IGF2X2NsaXBmKDEuIC8gKGluX21heFsyXSAtIGluX21pblsyXSksIDAuZiwgMS5mKTsKKyAgICB9 CisKK2VuZDoKKyAgICBmb3IgKGludCBjID0gMDsgYyA8IDM7IGMrKykgeworICAgICAgICBhdl9m cmVlcCgmaW5fcHJlbHV0W2NdKTsKKyAgICAgICAgYXZfZnJlZXAoJm91dF9wcmVsdXRbY10pOwor ICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCithdl9jb2xkIGludCBmZl9sdXQzZF9pbml0KEFW RmlsdGVyQ29udGV4dCAqY3R4LCBMVVQzRENvbnRleHQgKmx1dDNkKQoreworICAgIGludCByZXQ7 CisgICAgRklMRSAqZjsKKyAgICBjb25zdCBjaGFyICpleHQ7CisKKyAgICBsdXQzZC0+c2NhbGUu ciA9IGx1dDNkLT5zY2FsZS5nID0gbHV0M2QtPnNjYWxlLmIgPSAxLmY7CisKKyAgICBpZiAoIWx1 dDNkLT5maWxlKSB7CisgICAgICAgIHJldHVybiBzZXRfaWRlbnRpdHlfbWF0cml4KGN0eCwgbHV0 M2QsIDMyKTsKKyAgICB9CisKKyAgICBmID0gYXZwcml2X2ZvcGVuX3V0ZjgobHV0M2QtPmZpbGUs ICJyIik7CisgICAgaWYgKCFmKSB7CisgICAgICAgIHJldCA9IEFWRVJST1IoZXJybm8pOworICAg ICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICIlczogJXNcbiIsIGx1dDNkLT5maWxlLCBh dl9lcnIyc3RyKHJldCkpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIGV4dCA9 IHN0cnJjaHIobHV0M2QtPmZpbGUsICcuJyk7CisgICAgaWYgKCFleHQpIHsKKyAgICAgICAgYXZf bG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGd1ZXNzIHRoZSBmb3JtYXQgZnJvbSB0 aGUgZXh0ZW5zaW9uXG4iKTsKKyAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAg ICAgICAgZ290byBlbmQ7CisgICAgfQorICAgIGV4dCsrOworCisgICAgaWYgKCFhdl9zdHJjYXNl Y21wKGV4dCwgImRhdCIpKSB7CisgICAgICAgIHJldCA9IHBhcnNlX2RhdChjdHgsIGx1dDNkLCBm KTsKKyAgICB9IGVsc2UgaWYgKCFhdl9zdHJjYXNlY21wKGV4dCwgIjNkbCIpKSB7CisgICAgICAg IHJldCA9IHBhcnNlXzNkbChjdHgsIGx1dDNkLCBmKTsKKyAgICB9IGVsc2UgaWYgKCFhdl9zdHJj YXNlY21wKGV4dCwgImN1YmUiKSkgeworICAgICAgICByZXQgPSBwYXJzZV9jdWJlKGN0eCwgbHV0 M2QsIGYpOworICAgIH0gZWxzZSBpZiAoIWF2X3N0cmNhc2VjbXAoZXh0LCAibTNkIikpIHsKKyAg ICAgICAgcmV0ID0gcGFyc2VfbTNkKGN0eCwgbHV0M2QsIGYpOworICAgIH0gZWxzZSBpZiAoIWF2 X3N0cmNhc2VjbXAoZXh0LCAiY3NwIikpIHsKKyAgICAgICAgcmV0ID0gcGFyc2VfY2luZXNwYWNl KGN0eCwgbHV0M2QsIGYpOworICAgIH0gZWxzZSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xP R19FUlJPUiwgIlVucmVjb2duaXplZCAnLiVzJyBmaWxlIHR5cGVcbiIsIGV4dCk7CisgICAgICAg IHJldCA9IEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAgICBpZiAoIXJldCAmJiAhbHV0M2Qt Pmx1dHNpemUpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiM0QgTFVUIGlz IGVtcHR5XG4iKTsKKyAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9CisK K2VuZDoKKyAgICBmY2xvc2UoZik7CisgICAgcmV0dXJuIHJldDsKK30KKworYXZfY29sZCB2b2lk IGZmX2x1dDNkX3VuaW5pdChMVVQzRENvbnRleHQgKmx1dDNkKQoreworICAgIGludCBpOworICAg IGF2X2ZyZWVwKCZsdXQzZC0+bHV0KTsKKworICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsK KyAgICAgICAgYXZfZnJlZXAoJmx1dDNkLT5wcmVsdXQubHV0W2ldKTsKKyAgICB9Cit9CmRpZmYg LS1naXQgYS9saWJhdmZpbHRlci9sdXQzZC5oIGIvbGliYXZmaWx0ZXIvbHV0M2QuaAppbmRleCAx NGUzYzdmZWE2Li5iNmFhZWQ4NWYxIDEwMDY0NAotLS0gYS9saWJhdmZpbHRlci9sdXQzZC5oCisr KyBiL2xpYmF2ZmlsdGVyL2x1dDNkLmgKQEAgLTg0LDQgKzg0LDE3IEBAIHR5cGVkZWYgc3RydWN0 IFRocmVhZERhdGEgewogCiB2b2lkIGZmX2x1dDNkX2luaXRfeDg2KExVVDNEQ29udGV4dCAqcywg Y29uc3QgQVZQaXhGbXREZXNjcmlwdG9yICpkZXNjKTsKIAoraW50IGZmX2FsbG9jYXRlXzNkbHV0 KEFWRmlsdGVyQ29udGV4dCAqY3R4LCBMVVQzRENvbnRleHQgKmx1dDNkLCBpbnQgbHV0c2l6ZSwg aW50IHByZWx1dCk7CisKKy8qKgorICogTG9hZCAzRCBMVVQgZnJvbSBmaWxlLgorICoKKyAqIEBw YXJhbSBsdXQzZCBMVVQzRENvbnRleHQgTG9hZCAzRCBMVVQgZnJvbSBwYXRoIHNwZWNpZmllZCBi eSBgbHV0M2QtPmZpbGVgLgorICogICAgIElmIGBsdXQzZC0+ZmlsZWAgaXMgTlVMTCwgaW5pdGlh bGl6ZSBhbiBpZGVudGl0eSAzRCBMVVQuCisgKi8KK2ludCBmZl9sdXQzZF9pbml0KEFWRmlsdGVy Q29udGV4dCAqY3R4LCBMVVQzRENvbnRleHQgKmx1dDNkKTsKKworLyoqICBSZWxlYXNlIG1lbW9y eSB1c2VkIHRvIGhvbGQgM0QgTFVULiAqLwordm9pZCBmZl9sdXQzZF91bmluaXQoTFVUM0RDb250 ZXh0ICpsdXQzZCk7CisKICNlbmRpZiAvKiBBVkZJTFRFUl9MVVQzRF9IICovCmRpZmYgLS1naXQg YS9saWJhdmZpbHRlci92Zl9sdXQzZC5jIGIvbGliYXZmaWx0ZXIvdmZfbHV0M2QuYwppbmRleCA0 ZWRjYzJjN2E3Li4xZGE3OThlMjEwIDEwMDY0NAotLS0gYS9saWJhdmZpbHRlci92Zl9sdXQzZC5j CisrKyBiL2xpYmF2ZmlsdGVyL3ZmX2x1dDNkLmMKQEAgLTU1MiwzOSArNTUyLDYgQEAgc3RhdGlj IGludCBza2lwX2xpbmUoY29uc3QgY2hhciAqcCkKICAgICByZXR1cm4gISpwIHx8ICpwID09ICcj JzsKIH0KIAotc3RhdGljIGNoYXIqIGZnZXRfbmV4dF93b3JkKGNoYXIqIGRzdCwgaW50IG1heCwg RklMRSogZikKLXsKLSAgICBpbnQgYzsKLSAgICBjaGFyICpwID0gZHN0OwotCi0gICAgLyogZm9y IG51bGwgKi8KLSAgICBtYXgtLTsKLSAgICAvKiBza2lwIHVudGlsIG5leHQgbm9uIHdoaXRlc3Bh Y2UgY2hhciAqLwotICAgIHdoaWxlICgoYyA9IGZnZXRjKGYpKSAhPSBFT0YpIHsKLSAgICAgICAg aWYgKGF2X2lzc3BhY2UoYykpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAqcCsr ID0gYzsKLSAgICAgICAgbWF4LS07Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIC8qIGdl dCBtYXggYnl0ZXMgb3IgdXAgdW50aWwgbmV4dCB3aGl0ZXNwYWNlIGNoYXIgKi8KLSAgICBmb3Ig KDsgbWF4ID4gMDsgbWF4LS0pIHsKLSAgICAgICAgaWYgKChjID0gZmdldGMoZikpID09IEVPRikK LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChhdl9pc3NwYWNlKGMpKQotICAgICAg ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgKnArKyA9IGM7Ci0gICAgfQotCi0gICAgKnAgPSAwOwot ICAgIGlmIChwID09IGRzdCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIHA7Ci19 CiAKICNkZWZpbmUgTkVYVF9MSU5FKGxvb3BfY29uZCkgZG8geyAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKICAgICBpZiAoIWZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHsgICAgICAg ICAgICAgICAgICAgIFwKQEAgLTU5Myw1MDUgKzU2MCw2IEBAIHN0YXRpYyBjaGFyKiBmZ2V0X25l eHRfd29yZChjaGFyKiBkc3QsIGludCBtYXgsIEZJTEUqIGYpCiAgICAgfSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9IHdoaWxlIChsb29w X2NvbmQpCiAKLSNkZWZpbmUgTkVYVF9MSU5FX09SX0dPVE8obG9vcF9jb25kLCBsYWJlbCkgZG8g eyAgICAgICAgICAgIFwKLSAgICBpZiAoIWZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHsg ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAi VW5leHBlY3RlZCBFT0ZcbiIpOyAgICAgIFwKLSAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElE REFUQTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZ290byBsYWJlbDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKGxv b3BfY29uZCkKLQotc3RhdGljIGludCBhbGxvY2F0ZV8zZGx1dChBVkZpbHRlckNvbnRleHQgKmN0 eCwgaW50IGx1dHNpemUsIGludCBwcmVsdXQpCi17Ci0gICAgTFVUM0RDb250ZXh0ICpsdXQzZCA9 IGN0eC0+cHJpdjsKLSAgICBpbnQgaTsKLSAgICBpZiAobHV0c2l6ZSA8IDIgfHwgbHV0c2l6ZSA+ IE1BWF9MRVZFTCkgewotICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJUb28gbGFy Z2Ugb3IgaW52YWxpZCAzRCBMVVQgc2l6ZVxuIik7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SKEVJ TlZBTCk7Ci0gICAgfQotCi0gICAgYXZfZnJlZXAoJmx1dDNkLT5sdXQpOwotICAgIGx1dDNkLT5s dXQgPSBhdl9tYWxsb2NfYXJyYXkobHV0c2l6ZSAqIGx1dHNpemUgKiBsdXRzaXplLCBzaXplb2Yo Kmx1dDNkLT5sdXQpKTsKLSAgICBpZiAoIWx1dDNkLT5sdXQpCi0gICAgICAgIHJldHVybiBBVkVS Uk9SKEVOT01FTSk7Ci0KLSAgICBpZiAocHJlbHV0KSB7Ci0gICAgICAgIGx1dDNkLT5wcmVsdXQu c2l6ZSA9IFBSRUxVVF9TSVpFOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0g ICAgICAgICAgICBhdl9mcmVlcCgmbHV0M2QtPnByZWx1dC5sdXRbaV0pOwotICAgICAgICAgICAg bHV0M2QtPnByZWx1dC5sdXRbaV0gPSBhdl9tYWxsb2NfYXJyYXkoUFJFTFVUX1NJWkUsIHNpemVv ZigqbHV0M2QtPnByZWx1dC5sdXRbMF0pKTsKLSAgICAgICAgICAgIGlmICghbHV0M2QtPnByZWx1 dC5sdXRbaV0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLSAgICAg ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGx1dDNkLT5wcmVsdXQuc2l6ZSA9IDA7Ci0gICAg ICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLSAgICAgICAgICAgIGF2X2ZyZWVwKCZsdXQz ZC0+cHJlbHV0Lmx1dFtpXSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbHV0M2QtPmx1dHNpemUg PSBsdXRzaXplOwotICAgIGx1dDNkLT5sdXRzaXplMiA9IGx1dHNpemUgKiBsdXRzaXplOwotICAg IHJldHVybiAwOwotfQotCi0vKiBCYXNpY2FsbHkgciBnIGFuZCBiIGZsb2F0IHZhbHVlcyBvbiBl YWNoIGxpbmUsIHdpdGggYSBmYWN1bHRhdGl2ZSAzRExVVFNJWkUKLSAqIGRpcmVjdGl2ZTsgc2Vl bXMgdG8gYmUgZ2VuZXJhdGVkIGJ5IERhdmluY2kgKi8KLXN0YXRpYyBpbnQgcGFyc2VfZGF0KEFW RmlsdGVyQ29udGV4dCAqY3R4LCBGSUxFICpmKQotewotICAgIExVVDNEQ29udGV4dCAqbHV0M2Qg PSBjdHgtPnByaXY7Ci0gICAgY2hhciBsaW5lW01BWF9MSU5FX1NJWkVdOwotICAgIGludCByZXQs IGksIGosIGssIHNpemUsIHNpemUyOwotCi0gICAgbHV0M2QtPmx1dHNpemUgPSBzaXplID0gMzM7 Ci0gICAgc2l6ZTIgPSBzaXplICogc2l6ZTsKLQotICAgIE5FWFRfTElORShza2lwX2xpbmUobGlu ZSkpOwotICAgIGlmICghc3RybmNtcChsaW5lLCAiM0RMVVRTSVpFICIsIDEwKSkgewotICAgICAg ICBzaXplID0gc3RydG9sKGxpbmUgKyAxMCwgTlVMTCwgMCk7Ci0KLSAgICAgICAgTkVYVF9MSU5F KHNraXBfbGluZShsaW5lKSk7Ci0gICAgfQotCi0gICAgcmV0ID0gYWxsb2NhdGVfM2RsdXQoY3R4 LCBzaXplLCAwKTsKLSAgICBpZiAocmV0IDwgMCkKLSAgICAgICAgcmV0dXJuIHJldDsKLQotICAg IGZvciAoayA9IDA7IGsgPCBzaXplOyBrKyspIHsKLSAgICAgICAgZm9yIChqID0gMDsgaiA8IHNp emU7IGorKykgewotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAg ICAgICAgICAgICAgIHN0cnVjdCByZ2J2ZWMgKnZlYyA9ICZsdXQzZC0+bHV0W2sgKiBzaXplMiAr IGogKiBzaXplICsgaV07Ci0gICAgICAgICAgICAgICAgaWYgKGsgIT0gMCB8fCBqICE9IDAgfHwg aSAhPSAwKQotICAgICAgICAgICAgICAgICAgICBORVhUX0xJTkUoc2tpcF9saW5lKGxpbmUpKTsK LSAgICAgICAgICAgICAgICBpZiAoYXZfc3NjYW5mKGxpbmUsICIlZiAlZiAlZiIsICZ2ZWMtPnIs ICZ2ZWMtPmcsICZ2ZWMtPmIpICE9IDMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVS Uk9SX0lOVkFMSUREQVRBOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJl dHVybiAwOwotfQotCi0vKiBJcmlkYXMgZm9ybWF0ICovCi1zdGF0aWMgaW50IHBhcnNlX2N1YmUo QVZGaWx0ZXJDb250ZXh0ICpjdHgsIEZJTEUgKmYpCi17Ci0gICAgTFVUM0RDb250ZXh0ICpsdXQz ZCA9IGN0eC0+cHJpdjsKLSAgICBjaGFyIGxpbmVbTUFYX0xJTkVfU0laRV07Ci0gICAgZmxvYXQg bWluWzNdID0gezAuMCwgMC4wLCAwLjB9OwotICAgIGZsb2F0IG1heFszXSA9IHsxLjAsIDEuMCwg MS4wfTsKLQotICAgIHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7Ci0gICAg ICAgIGlmICghc3RybmNtcChsaW5lLCAiTFVUXzNEX1NJWkUiLCAxMSkpIHsKLSAgICAgICAgICAg IGludCByZXQsIGksIGosIGs7Ci0gICAgICAgICAgICBjb25zdCBpbnQgc2l6ZSA9IHN0cnRvbChs aW5lICsgMTIsIE5VTEwsIDApOwotICAgICAgICAgICAgY29uc3QgaW50IHNpemUyID0gc2l6ZSAq IHNpemU7Ci0KLSAgICAgICAgICAgIHJldCA9IGFsbG9jYXRlXzNkbHV0KGN0eCwgc2l6ZSwgMCk7 Ci0gICAgICAgICAgICBpZiAocmV0IDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owot Ci0gICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgc2l6ZTsgaysrKSB7Ci0gICAgICAgICAgICAg ICAgZm9yIChqID0gMDsgaiA8IHNpemU7IGorKykgewotICAgICAgICAgICAgICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg cmdidmVjICp2ZWMgPSAmbHV0M2QtPmx1dFtpICogc2l6ZTIgKyBqICogc2l6ZSArIGtdOwotCi0g ICAgICAgICAgICAgICAgICAgICAgICBkbyB7Ci10cnlfYWdhaW46Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgTkVYVF9MSU5FKDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm ICghc3RybmNtcChsaW5lLCAiRE9NQUlOXyIsIDcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZsb2F0ICp2YWxzID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgICAgICAoIXN0cm5jbXAobGluZSArIDcsICJNSU4gIiwgNCkpIHZhbHMgPSBtaW47 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJuY21wKGxpbmUg KyA3LCAiTUFYICIsIDQpKSB2YWxzID0gbWF4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoIXZhbHMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YXZfc3NjYW5mKGxpbmUgKyAxMSwgIiVmICVmICVmIiwgdmFscywgdmFscyArIDEsIHZhbHMgKyAy KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RF QlVHLCAibWluOiAlZiAlZiAlZiB8IG1heDogJWYgJWYgJWZcbiIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBtaW5bMF0sIG1pblsxXSwgbWluWzJdLCBtYXhbMF0sIG1h eFsxXSwgbWF4WzJdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byB0cnlf YWdhaW47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RybmNtcChs aW5lLCAiVElUTEUiLCA1KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IHRyeV9hZ2FpbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgICAgICAgICB9IHdoaWxlIChza2lwX2xpbmUobGluZSkpOwotICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGF2X3NzY2FuZihsaW5lLCAiJWYgJWYgJWYiLCAmdmVjLT5yLCAmdmVjLT5nLCAm dmVjLT5iKSAhPSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg ICBsdXQzZC0+c2NhbGUuciA9IGF2X2NsaXBmKDEuIC8gKG1heFswXSAtIG1pblswXSksIDAuZiwg MS5mKTsKLSAgICBsdXQzZC0+c2NhbGUuZyA9IGF2X2NsaXBmKDEuIC8gKG1heFsxXSAtIG1pblsx XSksIDAuZiwgMS5mKTsKLSAgICBsdXQzZC0+c2NhbGUuYiA9IGF2X2NsaXBmKDEuIC8gKG1heFsy XSAtIG1pblsyXSksIDAuZiwgMS5mKTsKLQotICAgIHJldHVybiAwOwotfQotCi0vKiBBc3N1bWUg MTd4MTd4MTcgTFVUIHdpdGggYSAxNi1iaXQgZGVwdGgKLSAqIEZJWE1FOiBpdCBzZWVtcyB0aGVy ZSBhcmUgdmFyaW91cyAzZGwgZm9ybWF0cyAqLwotc3RhdGljIGludCBwYXJzZV8zZGwoQVZGaWx0 ZXJDb250ZXh0ICpjdHgsIEZJTEUgKmYpCi17Ci0gICAgY2hhciBsaW5lW01BWF9MSU5FX1NJWkVd OwotICAgIExVVDNEQ29udGV4dCAqbHV0M2QgPSBjdHgtPnByaXY7Ci0gICAgaW50IHJldCwgaSwg aiwgazsKLSAgICBjb25zdCBpbnQgc2l6ZSA9IDE3OwotICAgIGNvbnN0IGludCBzaXplMiA9IDE3 ICogMTc7Ci0gICAgY29uc3QgZmxvYXQgc2NhbGUgPSAxNioxNioxNjsKLQotICAgIGx1dDNkLT5s dXRzaXplID0gc2l6ZTsKLQotICAgIHJldCA9IGFsbG9jYXRlXzNkbHV0KGN0eCwgc2l6ZSwgMCk7 Ci0gICAgaWYgKHJldCA8IDApCi0gICAgICAgIHJldHVybiByZXQ7Ci0KLSAgICBORVhUX0xJTkUo c2tpcF9saW5lKGxpbmUpKTsKLSAgICBmb3IgKGsgPSAwOyBrIDwgc2l6ZTsgaysrKSB7Ci0gICAg ICAgIGZvciAoaiA9IDA7IGogPCBzaXplOyBqKyspIHsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpbnQgciwgZywgYjsKLSAgICAgICAg ICAgICAgICBzdHJ1Y3QgcmdidmVjICp2ZWMgPSAmbHV0M2QtPmx1dFtrICogc2l6ZTIgKyBqICog c2l6ZSArIGldOwotCi0gICAgICAgICAgICAgICAgTkVYVF9MSU5FKHNraXBfbGluZShsaW5lKSk7 Ci0gICAgICAgICAgICAgICAgaWYgKGF2X3NzY2FuZihsaW5lLCAiJWQgJWQgJWQiLCAmciwgJmcs ICZiKSAhPSAzKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFU QTsKLSAgICAgICAgICAgICAgICB2ZWMtPnIgPSByIC8gc2NhbGU7Ci0gICAgICAgICAgICAgICAg dmVjLT5nID0gZyAvIHNjYWxlOwotICAgICAgICAgICAgICAgIHZlYy0+YiA9IGIgLyBzY2FsZTsK LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotLyog UGFuZG9yYSBmb3JtYXQgKi8KLXN0YXRpYyBpbnQgcGFyc2VfbTNkKEFWRmlsdGVyQ29udGV4dCAq Y3R4LCBGSUxFICpmKQotewotICAgIExVVDNEQ29udGV4dCAqbHV0M2QgPSBjdHgtPnByaXY7Ci0g ICAgZmxvYXQgc2NhbGU7Ci0gICAgaW50IHJldCwgaSwgaiwgaywgc2l6ZSwgc2l6ZTIsIGluID0g LTEsIG91dCA9IC0xOwotICAgIGNoYXIgbGluZVtNQVhfTElORV9TSVpFXTsKLSAgICB1aW50OF90 IHJnYl9tYXBbM10gPSB7MCwgMSwgMn07Ci0KLSAgICB3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9m KGxpbmUpLCBmKSkgewotICAgICAgICBpZiAgICAgICghc3RybmNtcChsaW5lLCAiaW4iLCAgMikp IGluICA9IHN0cnRvbChsaW5lICsgMiwgTlVMTCwgMCk7Ci0gICAgICAgIGVsc2UgaWYgKCFzdHJu Y21wKGxpbmUsICJvdXQiLCAzKSkgb3V0ID0gc3RydG9sKGxpbmUgKyAzLCBOVUxMLCAwKTsKLSAg ICAgICAgZWxzZSBpZiAoIXN0cm5jbXAobGluZSwgInZhbHVlcyIsIDYpKSB7Ci0gICAgICAgICAg ICBjb25zdCBjaGFyICpwID0gbGluZSArIDY7Ci0jZGVmaW5lIFNFVF9DT0xPUihpZCkgZG8geyAg ICAgICAgICAgICAgICAgIFwKLSAgICB3aGlsZSAoYXZfaXNzcGFjZSgqcCkpICAgICAgICAgICAg ICAgICAgXAotICAgICAgICBwKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g ICAgc3dpdGNoICgqcCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlICdy JzogcmdiX21hcFtpZF0gPSAwOyBicmVhazsgICAgICAgXAotICAgIGNhc2UgJ2cnOiByZ2JfbWFw W2lkXSA9IDE7IGJyZWFrOyAgICAgICBcCi0gICAgY2FzZSAnYic6IHJnYl9tYXBbaWRdID0gMjsg YnJlYWs7ICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotICAgIHdoaWxlICgqcCAmJiAhYXZfaXNzcGFjZSgqcCkpICAgICAgICAgICBcCi0gICAg ICAgIHArKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKDApCi0g ICAgICAgICAgICBTRVRfQ09MT1IoMCk7Ci0gICAgICAgICAgICBTRVRfQ09MT1IoMSk7Ci0gICAg ICAgICAgICBTRVRfQ09MT1IoMik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg IH0KLQotICAgIGlmIChpbiA9PSAtMSB8fCBvdXQgPT0gLTEpIHsKLSAgICAgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0VSUk9SLCAiaW4gYW5kIG91dCBtdXN0IGJlIGRlZmluZWRcbiIpOwotICAgICAg ICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICB9Ci0gICAgaWYgKGluIDwgMiB8fCBv dXQgPCAyIHx8Ci0gICAgICAgIGluICA+IE1BWF9MRVZFTCpNQVhfTEVWRUwqTUFYX0xFVkVMIHx8 Ci0gICAgICAgIG91dCA+IE1BWF9MRVZFTCpNQVhfTEVWRUwqTUFYX0xFVkVMKSB7Ci0gICAgICAg IGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgImludmFsaWQgaW4gKCVkKSBvciBvdXQgKCVkKVxu IiwgaW4sIG91dCk7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwotICAgIH0K LSAgICBmb3IgKHNpemUgPSAxOyBzaXplKnNpemUqc2l6ZSA8IGluOyBzaXplKyspOwotICAgIGx1 dDNkLT5sdXRzaXplID0gc2l6ZTsKLSAgICBzaXplMiA9IHNpemUgKiBzaXplOwotCi0gICAgcmV0 ID0gYWxsb2NhdGVfM2RsdXQoY3R4LCBzaXplLCAwKTsKLSAgICBpZiAocmV0IDwgMCkKLSAgICAg ICAgcmV0dXJuIHJldDsKLQotICAgIHNjYWxlID0gMS4gLyAob3V0IC0gMSk7Ci0KLSAgICBmb3Ig KGsgPSAwOyBrIDwgc2l6ZTsgaysrKSB7Ci0gICAgICAgIGZvciAoaiA9IDA7IGogPCBzaXplOyBq KyspIHsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAg ICAgICAgICBzdHJ1Y3QgcmdidmVjICp2ZWMgPSAmbHV0M2QtPmx1dFtrICogc2l6ZTIgKyBqICog c2l6ZSArIGldOwotICAgICAgICAgICAgICAgIGZsb2F0IHZhbFszXTsKLQotICAgICAgICAgICAg ICAgIE5FWFRfTElORSgwKTsKLSAgICAgICAgICAgICAgICBpZiAoYXZfc3NjYW5mKGxpbmUsICIl ZiAlZiAlZiIsIHZhbCwgdmFsICsgMSwgdmFsICsgMikgIT0gMykKLSAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAgICAgICAgICAgICAgdmVjLT5yID0g dmFsW3JnYl9tYXBbMF1dICogc2NhbGU7Ci0gICAgICAgICAgICAgICAgdmVjLT5nID0gdmFsW3Jn Yl9tYXBbMV1dICogc2NhbGU7Ci0gICAgICAgICAgICAgICAgdmVjLT5iID0gdmFsW3JnYl9tYXBb Ml1dICogc2NhbGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu IDA7Ci19Ci0KLXN0YXRpYyBpbnQgbmVhcmVzdF9zYW1wbGVfaW5kZXgoZmxvYXQgKmRhdGEsIGZs b2F0IHgsIGludCBsb3csIGludCBoaSkKLXsKLSAgICBpbnQgbWlkOwotICAgIGlmICh4IDwgZGF0 YVtsb3ddKQotICAgICAgICByZXR1cm4gbG93OwotCi0gICAgaWYgKHggPiBkYXRhW2hpXSkKLSAg ICAgICAgcmV0dXJuIGhpOwotCi0gICAgZm9yICg7OykgewotICAgICAgICBhdl9hc3NlcnQwKHgg Pj0gZGF0YVtsb3ddKTsKLSAgICAgICAgYXZfYXNzZXJ0MCh4IDw9IGRhdGFbaGldKTsKLSAgICAg ICAgYXZfYXNzZXJ0MCgoaGktbG93KSA+IDApOwotCi0gICAgICAgIGlmIChoaSAtIGxvdyA9PSAx KQotICAgICAgICAgICAgcmV0dXJuIGxvdzsKLQotICAgICAgICBtaWQgPSAobG93ICsgaGkpIC8g MjsKLQotICAgICAgICBpZiAoeCA8IGRhdGFbbWlkXSkKLSAgICAgICAgICAgIGhpID0gbWlkOwot ICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb3cgPSBtaWQ7Ci0gICAgfQotCi0gICAgcmV0dXJu IDA7Ci19Ci0KLSNkZWZpbmUgTkVYVF9GTE9BVF9PUl9HT1RPKHZhbHVlLCBsYWJlbCkgICAgICAg ICAgICAgICAgICAgIFwKLSAgICBpZiAoIWZnZXRfbmV4dF93b3JkKGxpbmUsIHNpemVvZihsaW5l KSAsZikpIHsgICAgICAgICAgIFwKLSAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZ290byBsYWJlbDsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoYXZfc3NjYW5m KGxpbmUsICIlZiIsICZ2YWx1ZSkgIT0gMSkgeyAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0 ID0gQVZFUlJPUl9JTlZBTElEREFUQTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg ICAgZ290byBsYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSAgICB9Ci0KLXN0YXRpYyBpbnQgcGFyc2VfY2luZXNwYWNlKEFWRmlsdGVyQ29udGV4dCAqY3R4 LCBGSUxFICpmKQotewotICAgIExVVDNEQ29udGV4dCAqbHV0M2QgPSBjdHgtPnByaXY7Ci0gICAg Y2hhciBsaW5lW01BWF9MSU5FX1NJWkVdOwotICAgIGZsb2F0IGluX21pblszXSAgPSB7MC4wLCAw LjAsIDAuMH07Ci0gICAgZmxvYXQgaW5fbWF4WzNdICA9IHsxLjAsIDEuMCwgMS4wfTsKLSAgICBm bG9hdCBvdXRfbWluWzNdID0gezAuMCwgMC4wLCAwLjB9OwotICAgIGZsb2F0IG91dF9tYXhbM10g PSB7MS4wLCAxLjAsIDEuMH07Ci0gICAgaW50IGluc2lkZV9tZXRhZGF0YSA9IDAsIHNpemUsIHNp emUyOwotICAgIGludCBwcmVsdXQgPSAwOwotICAgIGludCByZXQgPSAwOwotCi0gICAgaW50IHBy ZWx1dF9zaXplc1szXSA9IHswLCAwLCAwfTsKLSAgICBmbG9hdCAqaW5fcHJlbHV0WzNdICA9IHtO VUxMLCBOVUxMLCBOVUxMfTsKLSAgICBmbG9hdCAqb3V0X3ByZWx1dFszXSA9IHtOVUxMLCBOVUxM LCBOVUxMfTsKLQotICAgIE5FWFRfTElORV9PUl9HT1RPKHNraXBfbGluZShsaW5lKSwgZW5kKTsK LSAgICBpZiAoc3RybmNtcChsaW5lLCAiQ1NQTFVUVjEwMCIsIDEwKSkgewotICAgICAgICBhdl9s b2coY3R4LCBBVl9MT0dfRVJST1IsICJOb3QgY2luZVNwYWNlIExVVCBmb3JtYXRcbiIpOwotICAg ICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Ci0gICAgICAgIGdvdG8gZW5kOwotICAgIH0KLQot ICAgIE5FWFRfTElORV9PUl9HT1RPKHNraXBfbGluZShsaW5lKSwgZW5kKTsKLSAgICBpZiAoc3Ry bmNtcChsaW5lLCAiM0QiLCAyKSkgewotICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1Is ICJOb3QgM0QgTFVUIGZvcm1hdFxuIik7Ci0gICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsK LSAgICAgICAgZ290byBlbmQ7Ci0gICAgfQotCi0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgTkVY VF9MSU5FX09SX0dPVE8oc2tpcF9saW5lKGxpbmUpLCBlbmQpOwotCi0gICAgICAgIGlmICghc3Ry bmNtcChsaW5lLCAiQkVHSU4gTUVUQURBVEEiLCAxNCkpIHsKLSAgICAgICAgICAgIGluc2lkZV9t ZXRhZGF0YSA9IDE7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBp ZiAoIXN0cm5jbXAobGluZSwgIkVORCBNRVRBREFUQSIsIDEyKSkgewotICAgICAgICAgICAgaW5z aWRlX21ldGFkYXRhID0gMDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAg ICAgIGlmIChpbnNpZGVfbWV0YWRhdGEgPT0gMCkgewotICAgICAgICAgICAgaW50IHNpemVfciwg c2l6ZV9nLCBzaXplX2I7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsr KSB7Ci0gICAgICAgICAgICAgICAgaW50IG5wb2ludHMgPSBzdHJ0b2wobGluZSwgTlVMTCwgMCk7 Ci0KLSAgICAgICAgICAgICAgICBpZiAobnBvaW50cyA+IDIpIHsKLSAgICAgICAgICAgICAgICAg ICAgZmxvYXQgdixsYXN0OwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChucG9pbnRzID4gUFJF TFVUX1NJWkUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19F UlJPUiwgIlByZWx1dCBzaXplIHRvbyBsYXJnZS5cbiIpOwotICAgICAgICAgICAgICAgICAgICAg ICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdv dG8gZW5kOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYg KGluX3ByZWx1dFtpXSB8fCBvdXRfcHJlbHV0W2ldKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIGZpbGUgaGFzIG11bHRpcGxlIHBy ZWx1dHMuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IEFWRVJST1JfSU5WQUxJ RERBVEE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgICAgICAg ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGluX3ByZWx1dFtpXSAgPSAoZmxvYXQqKWF2 X21hbGxvYyhucG9pbnRzICogc2l6ZW9mKGZsb2F0KSk7Ci0gICAgICAgICAgICAgICAgICAgIG91 dF9wcmVsdXRbaV0gPSAoZmxvYXQqKWF2X21hbGxvYyhucG9pbnRzICogc2l6ZW9mKGZsb2F0KSk7 Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5fcHJlbHV0W2ldIHx8ICFvdXRfcHJlbHV0W2ld KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7Ci0gICAg ICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0g ICAgICAgICAgICAgICAgICAgIHByZWx1dF9zaXplc1tpXSA9IG5wb2ludHM7Ci0gICAgICAgICAg ICAgICAgICAgIGluX21pbltpXSA9IEZMVF9NQVg7Ci0gICAgICAgICAgICAgICAgICAgIGluX21h eFtpXSA9IC1GTFRfTUFYOwotICAgICAgICAgICAgICAgICAgICBvdXRfbWluW2ldID0gRkxUX01B WDsKLSAgICAgICAgICAgICAgICAgICAgb3V0X21heFtpXSA9IC1GTFRfTUFYOwotCi0gICAgICAg ICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnBvaW50czsgaisrKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBORVhUX0ZMT0FUX09SX0dPVE8odiwgZW5kKQotICAgICAgICAgICAg ICAgICAgICAgICAgaW5fbWluW2ldID0gRkZNSU4oaW5fbWluW2ldLCB2KTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGluX21heFtpXSA9IEZGTUFYKGluX21heFtpXSwgdik7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBpbl9wcmVsdXRbaV1bal0gPSB2OwotICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGogPiAwICYmIHYgPCBsYXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBmaWxlLCBub24gaW5jcmVhc2luZyBw cmVsdXQuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVO T01FTSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBsYXN0ID0gdjsKLSAgICAg ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBq IDwgbnBvaW50czsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBORVhUX0ZMT0FUX09S X0dPVE8odiwgZW5kKQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0X21pbltpXSA9IEZGTUlO KG91dF9taW5baV0sIHYpOwotICAgICAgICAgICAgICAgICAgICAgICAgb3V0X21heFtpXSA9IEZG TUFYKG91dF9tYXhbaV0sIHYpOwotICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3ByZWx1dFtp XVtqXSA9IHY7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIH0gZWxz ZSBpZiAobnBvaW50cyA9PSAyKSAgewotICAgICAgICAgICAgICAgICAgICBORVhUX0xJTkVfT1Jf R09UTyhza2lwX2xpbmUobGluZSksIGVuZCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdl9z c2NhbmYobGluZSwgIiVmICVmIiwgJmluX21pbltpXSwgJmluX21heFtpXSkgIT0gMikgewotICAg ICAgICAgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICAgICAg ICAgICAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgICAgIE5FWFRfTElORV9PUl9HT1RPKHNraXBfbGluZShsaW5lKSwgZW5kKTsKLSAg ICAgICAgICAgICAgICAgICAgaWYgKGF2X3NzY2FuZihsaW5lLCAiJWYgJWYiLCAmb3V0X21pbltp XSwgJm91dF9tYXhbaV0pICE9IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IEFW RVJST1JfSU5WQUxJRERBVEE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKLSAg ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5zdXBwb3J0ZWQgbnVtYmVy IG9mIHByZS1sdXQgcG9pbnRzLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IEFWRVJS T1JfUEFUQ0hXRUxDT01FOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAg ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBORVhUX0xJTkVfT1JfR09UTyhza2lwX2xpbmUo bGluZSksIGVuZCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChhdl9zc2NhbmYo bGluZSwgIiVkICVkICVkIiwgJnNpemVfciwgJnNpemVfZywgJnNpemVfYikgIT0gMykgewotICAg ICAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKLSAgICAgICAgICAgICAgICBnb3Rv IGVuZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzaXplX3IgIT0gc2l6ZV9nIHx8 IHNpemVfciAhPSBzaXplX2IpIHsKLSAgICAgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0df RVJST1IsICJVbnN1cHBvcnRlZCBzaXplIGNvbWJpbmF0aW9uOiAlZHglZHglZC5cbiIsIHNpemVf ciwgc2l6ZV9nLCBzaXplX2IpOwotICAgICAgICAgICAgICAgIHJldCA9IEFWRVJST1JfUEFUQ0hX RUxDT01FOwotICAgICAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICAgICAgfQotCi0gICAg ICAgICAgICBzaXplID0gc2l6ZV9yOwotICAgICAgICAgICAgc2l6ZTIgPSBzaXplICogc2l6ZTsK LQotICAgICAgICAgICAgaWYgKHByZWx1dF9zaXplc1swXSAmJiBwcmVsdXRfc2l6ZXNbMV0gJiYg cHJlbHV0X3NpemVzWzJdKQotICAgICAgICAgICAgICAgIHByZWx1dCA9IDE7Ci0KLSAgICAgICAg ICAgIHJldCA9IGFsbG9jYXRlXzNkbHV0KGN0eCwgc2l6ZSwgcHJlbHV0KTsKLSAgICAgICAgICAg IGlmIChyZXQgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0KLSAgICAgICAgICAg IGZvciAoaW50IGsgPSAwOyBrIDwgc2l6ZTsgaysrKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChp bnQgaiA9IDA7IGogPCBzaXplOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBy Z2J2ZWMgKnZlYyA9ICZsdXQzZC0+bHV0W2kgKiBzaXplMiArIGogKiBzaXplICsga107Ci0KLSAg ICAgICAgICAgICAgICAgICAgICAgIE5FWFRfTElORV9PUl9HT1RPKHNraXBfbGluZShsaW5lKSwg ZW5kKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdl9zc2NhbmYobGluZSwgIiVmICVm ICVmIiwgJnZlYy0+ciwgJnZlYy0+ZywgJnZlYy0+YikgIT0gMykgewotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJldCA9IEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg ICAgICAgICAgICAgICAgICAgIHZlYy0+ciAqPSBvdXRfbWF4WzBdIC0gb3V0X21pblswXTsKLSAg ICAgICAgICAgICAgICAgICAgICAgIHZlYy0+ZyAqPSBvdXRfbWF4WzFdIC0gb3V0X21pblsxXTsK LSAgICAgICAgICAgICAgICAgICAgICAgIHZlYy0+YiAqPSBvdXRfbWF4WzJdIC0gb3V0X21pblsy XTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg IH0KLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocHJl bHV0KSB7Ci0gICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgMzsgYysrKSB7Ci0KLSAgICAgICAg ICAgIGx1dDNkLT5wcmVsdXQubWluW2NdID0gaW5fbWluW2NdOwotICAgICAgICAgICAgbHV0M2Qt PnByZWx1dC5tYXhbY10gPSBpbl9tYXhbY107Ci0gICAgICAgICAgICBsdXQzZC0+cHJlbHV0LnNj YWxlW2NdID0gICgxLjBmIC8gKGZsb2F0KShpbl9tYXhbY10gLSBpbl9taW5bY10pKSAqIChsdXQz ZC0+cHJlbHV0LnNpemUgLSAxKTsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBs dXQzZC0+cHJlbHV0LnNpemU7ICsraSkgewotICAgICAgICAgICAgICAgIGZsb2F0IG1peCA9IChm bG9hdCkgaSAvIChmbG9hdCkobHV0M2QtPnByZWx1dC5zaXplIC0gMSk7Ci0gICAgICAgICAgICAg ICAgZmxvYXQgeCA9IGxlcnBmKGluX21pbltjXSwgaW5fbWF4W2NdLCBtaXgpLCBhLCBiOwotCi0g ICAgICAgICAgICAgICAgaW50IGlkeCA9IG5lYXJlc3Rfc2FtcGxlX2luZGV4KGluX3ByZWx1dFtj XSwgeCwgMCwgcHJlbHV0X3NpemVzW2NdLTEpOwotICAgICAgICAgICAgICAgIGF2X2Fzc2VydDAo aWR4ICsgMSA8IHByZWx1dF9zaXplc1tjXSk7Ci0KLSAgICAgICAgICAgICAgICBhICAgPSBvdXRf cHJlbHV0W2NdW2lkeCArIDBdOwotICAgICAgICAgICAgICAgIGIgICA9IG91dF9wcmVsdXRbY11b aWR4ICsgMV07Ci0gICAgICAgICAgICAgICAgbWl4ID0geCAtIGluX3ByZWx1dFtjXVtpZHhdOwot Ci0gICAgICAgICAgICAgICAgbHV0M2QtPnByZWx1dC5sdXRbY11baV0gPSBzYW5pdGl6ZWYobGVy cGYoYSwgYiwgbWl4KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbHV0M2Qt PnNjYWxlLnIgPSAxLjAwZjsKLSAgICAgICAgbHV0M2QtPnNjYWxlLmcgPSAxLjAwZjsKLSAgICAg ICAgbHV0M2QtPnNjYWxlLmIgPSAxLjAwZjsKLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGx1dDNk LT5zY2FsZS5yID0gYXZfY2xpcGYoMS4gLyAoaW5fbWF4WzBdIC0gaW5fbWluWzBdKSwgMC5mLCAx LmYpOwotICAgICAgICBsdXQzZC0+c2NhbGUuZyA9IGF2X2NsaXBmKDEuIC8gKGluX21heFsxXSAt IGluX21pblsxXSksIDAuZiwgMS5mKTsKLSAgICAgICAgbHV0M2QtPnNjYWxlLmIgPSBhdl9jbGlw ZigxLiAvIChpbl9tYXhbMl0gLSBpbl9taW5bMl0pLCAwLmYsIDEuZik7Ci0gICAgfQotCi1lbmQ6 Ci0gICAgZm9yIChpbnQgYyA9IDA7IGMgPCAzOyBjKyspIHsKLSAgICAgICAgYXZfZnJlZXAoJmlu X3ByZWx1dFtjXSk7Ci0gICAgICAgIGF2X2ZyZWVwKCZvdXRfcHJlbHV0W2NdKTsKLSAgICB9Ci0g ICAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBzZXRfaWRlbnRpdHlfbWF0cml4KEFWRmls dGVyQ29udGV4dCAqY3R4LCBpbnQgc2l6ZSkKLXsKLSAgICBMVVQzRENvbnRleHQgKmx1dDNkID0g Y3R4LT5wcml2OwotICAgIGludCByZXQsIGksIGosIGs7Ci0gICAgY29uc3QgaW50IHNpemUyID0g c2l6ZSAqIHNpemU7Ci0gICAgY29uc3QgZmxvYXQgYyA9IDEuIC8gKHNpemUgLSAxKTsKLQotICAg IHJldCA9IGFsbG9jYXRlXzNkbHV0KGN0eCwgc2l6ZSwgMCk7Ci0gICAgaWYgKHJldCA8IDApCi0g ICAgICAgIHJldHVybiByZXQ7Ci0KLSAgICBmb3IgKGsgPSAwOyBrIDwgc2l6ZTsgaysrKSB7Ci0g ICAgICAgIGZvciAoaiA9IDA7IGogPCBzaXplOyBqKyspIHsKLSAgICAgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgcmdidmVjICp2ZWMg PSAmbHV0M2QtPmx1dFtrICogc2l6ZTIgKyBqICogc2l6ZSArIGldOwotICAgICAgICAgICAgICAg IHZlYy0+ciA9IGsgKiBjOwotICAgICAgICAgICAgICAgIHZlYy0+ZyA9IGogKiBjOwotICAgICAg ICAgICAgICAgIHZlYy0+YiA9IGkgKiBjOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg fQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBlbnVtIEFWUGl4ZWxGb3JtYXQg cGl4X2ZtdHNbXSA9IHsKICAgICBBVl9QSVhfRk1UX1JHQjI0LCAgQVZfUElYX0ZNVF9CR1IyNCwK ICAgICBBVl9QSVhfRk1UX1JHQkEsICAgQVZfUElYX0ZNVF9CR1JBLApAQCAtMTIzMCw2NiArNjk4 LDE0IEBAIEFWRklMVEVSX0RFRklORV9DTEFTU19FWFQobHV0M2QsICJsdXQzZCIsIGx1dDNkX2hh bGRjbHV0X29wdGlvbnMpOwogCiBzdGF0aWMgYXZfY29sZCBpbnQgbHV0M2RfaW5pdChBVkZpbHRl ckNvbnRleHQgKmN0eCkKIHsKLSAgICBpbnQgcmV0OwotICAgIEZJTEUgKmY7Ci0gICAgY29uc3Qg Y2hhciAqZXh0OwogICAgIExVVDNEQ29udGV4dCAqbHV0M2QgPSBjdHgtPnByaXY7Ci0KLSAgICBs dXQzZC0+c2NhbGUuciA9IGx1dDNkLT5zY2FsZS5nID0gbHV0M2QtPnNjYWxlLmIgPSAxLmY7Ci0K LSAgICBpZiAoIWx1dDNkLT5maWxlKSB7Ci0gICAgICAgIHJldHVybiBzZXRfaWRlbnRpdHlfbWF0 cml4KGN0eCwgMzIpOwotICAgIH0KLQotICAgIGYgPSBhdnByaXZfZm9wZW5fdXRmOChsdXQzZC0+ ZmlsZSwgInIiKTsKLSAgICBpZiAoIWYpIHsKLSAgICAgICAgcmV0ID0gQVZFUlJPUihlcnJubyk7 Ci0gICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIiVzOiAlc1xuIiwgbHV0M2QtPmZp bGUsIGF2X2VycjJzdHIocmV0KSk7Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAg ZXh0ID0gc3RycmNocihsdXQzZC0+ZmlsZSwgJy4nKTsKLSAgICBpZiAoIWV4dCkgewotICAgICAg ICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gZ3Vlc3MgdGhlIGZvcm1hdCBm cm9tIHRoZSBleHRlbnNpb25cbiIpOwotICAgICAgICByZXQgPSBBVkVSUk9SX0lOVkFMSUREQVRB OwotICAgICAgICBnb3RvIGVuZDsKLSAgICB9Ci0gICAgZXh0Kys7Ci0KLSAgICBpZiAoIWF2X3N0 cmNhc2VjbXAoZXh0LCAiZGF0IikpIHsKLSAgICAgICAgcmV0ID0gcGFyc2VfZGF0KGN0eCwgZik7 Ci0gICAgfSBlbHNlIGlmICghYXZfc3RyY2FzZWNtcChleHQsICIzZGwiKSkgewotICAgICAgICBy ZXQgPSBwYXJzZV8zZGwoY3R4LCBmKTsKLSAgICB9IGVsc2UgaWYgKCFhdl9zdHJjYXNlY21wKGV4 dCwgImN1YmUiKSkgewotICAgICAgICByZXQgPSBwYXJzZV9jdWJlKGN0eCwgZik7Ci0gICAgfSBl bHNlIGlmICghYXZfc3RyY2FzZWNtcChleHQsICJtM2QiKSkgewotICAgICAgICByZXQgPSBwYXJz ZV9tM2QoY3R4LCBmKTsKLSAgICB9IGVsc2UgaWYgKCFhdl9zdHJjYXNlY21wKGV4dCwgImNzcCIp KSB7Ci0gICAgICAgIHJldCA9IHBhcnNlX2NpbmVzcGFjZShjdHgsIGYpOwotICAgIH0gZWxzZSB7 Ci0gICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVucmVjb2duaXplZCAnLiVzJyBm aWxlIHR5cGVcbiIsIGV4dCk7Ci0gICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKLSAgICB9 Ci0KLSAgICBpZiAoIXJldCAmJiAhbHV0M2QtPmx1dHNpemUpIHsKLSAgICAgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0VSUk9SLCAiM0QgTFVUIGlzIGVtcHR5XG4iKTsKLSAgICAgICAgcmV0ID0gQVZF UlJPUl9JTlZBTElEREFUQTsKLSAgICB9Ci0KLWVuZDoKLSAgICBmY2xvc2UoZik7Ci0gICAgcmV0 dXJuIHJldDsKKyAgICByZXR1cm4gZmZfbHV0M2RfaW5pdChjdHgsIGx1dDNkKTsKIH0KIAogc3Rh dGljIGF2X2NvbGQgdm9pZCBsdXQzZF91bmluaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCiB7CiAg ICAgTFVUM0RDb250ZXh0ICpsdXQzZCA9IGN0eC0+cHJpdjsKLSAgICBpbnQgaTsKLSAgICBhdl9m cmVlcCgmbHV0M2QtPmx1dCk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0gICAg ICAgIGF2X2ZyZWVwKCZsdXQzZC0+cHJlbHV0Lmx1dFtpXSk7Ci0gICAgfQorICAgIGZmX2x1dDNk X3VuaW5pdChsdXQzZCk7CiB9CiAKIHN0YXRpYyBjb25zdCBBVkZpbHRlclBhZCBsdXQzZF9pbnB1 dHNbXSA9IHsKQEAgLTE0OTksNyArOTE1LDcgQEAgc3RhdGljIGludCBjb25maWdfY2x1dChBVkZp bHRlckxpbmsgKmlubGluaykKICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKICAgICB9 CiAKLSAgICByZXR1cm4gYWxsb2NhdGVfM2RsdXQoY3R4LCBsZXZlbCwgMCk7CisgICAgcmV0dXJu IGZmX2FsbG9jYXRlXzNkbHV0KGN0eCwgbHV0M2QsIGxldmVsLCAwKTsKIH0KIAogc3RhdGljIGlu dCB1cGRhdGVfYXBwbHlfY2x1dChGRkZyYW1lU3luYyAqZnMpCmRpZmYgLS1naXQgYS9saWJhdmZp bHRlci92Zl92cHBfcXN2LmMgYi9saWJhdmZpbHRlci92Zl92cHBfcXN2LmMKaW5kZXggZmRmOTkx MDE4Ni4uZjhhZTNiN2RlNyAxMDA2NDQKLS0tIGEvbGliYXZmaWx0ZXIvdmZfdnBwX3Fzdi5jCisr KyBiL2xpYmF2ZmlsdGVyL3ZmX3ZwcF9xc3YuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUg ImludGVybmFsLmgiCiAjaW5jbHVkZSAiYXZmaWx0ZXIuaCIKICNpbmNsdWRlICJmaWx0ZXJzLmgi CisjaW5jbHVkZSAibHV0M2QuaCIKIAogI2luY2x1ZGUgInFzdnZwcC5oIgogI2luY2x1ZGUgInRy YW5zcG9zZS5oIgpAQCAtNjcsNiArNjgsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgVlBQQ29udGV4dHsK ICAgICAvKiogSERSIHBhcmFtZXRlcnMgYXR0YWNoZWQgb24gdGhlIGlucHV0IGZyYW1lICovCiAg ICAgbWZ4RXh0TWFzdGVyaW5nRGlzcGxheUNvbG91clZvbHVtZSBtZGN2X2NvbmY7CiAgICAgbWZ4 RXh0Q29udGVudExpZ2h0TGV2ZWxJbmZvIGNsbGlfY29uZjsKKworICAgIC8qKiBMVVQgcGFyYW1l dGVycyBhdHRhY2hlZCBvbiB0aGUgaW5wdXQgZnJhbWUgKi8KKyAgICBtZnhFeHRWUFAzREx1dCBs dXQzZF9jb25mOworICAgIExVVDNEQ29udGV4dCBsdXQzZDsKKyAgICBtZnhVMTYqIGx1dDNkX3I7 CisgICAgbWZ4VTE2KiBsdXQzZF9nOworICAgIG1meFUxNiogbHV0M2RfYjsKICNlbmRpZgogCiAg ICAgLyoqCkBAIC0zODgsNiArMzk2LDc1IEBAIHN0YXRpYyBtZnhTdGF0dXMgZ2V0X21meF92ZXJz aW9uKGNvbnN0IEFWRmlsdGVyQ29udGV4dCAqY3R4LCBtZnhWZXJzaW9uICptZnhfdmVyCiAgICAg cmV0dXJuIE1GWFF1ZXJ5VmVyc2lvbihkZXZpY2VfaHdjdHgtPnNlc3Npb24sIG1meF92ZXJzaW9u KTsKIH0KIAorI2lmIFFTVl9PTkVWUEwKKy8vIENyZWF0ZSAzRCBMVVQgc3VyZmFjZSB1c2luZyBz eXN0ZW0gbWVtb3J5LgorLy8gUmVmZXJlbmNlIGh0dHBzOi8vc3BlYy5vbmVhcGkuaW8vb25ldnBs LzIuOS4wL3Byb2dyYW1taW5nX2d1aWRlL1ZQTF9wcmdfdnBwLmh0bWwjdmlkZW8tcHJvY2Vzc2lu Zy0zZGx1dAorc3RhdGljIHZvaWQgaW5pdF8zZGx1dF9zdXJmYWNlKEFWRmlsdGVyQ29udGV4dCAq Y3R4KQoreworICAgIFZQUENvbnRleHQgKnZwcCA9IGN0eC0+cHJpdjsKKyAgICBMVVQzRENvbnRl eHQgKmx1dDNkID0gJnZwcC0+bHV0M2Q7CisgICAgbWZ4RXh0VlBQM0RMdXQgKmx1dDNkX2NvbmYg PSAmdnBwLT5sdXQzZF9jb25mOworICAgIGludCByLCBnLCBiLCBpZHg7CisgICAgc3RydWN0IHJn YnZlYyAqdiA9IE5VTEw7CisgICAgaW50IGx1dF9zaXplID0gbHV0M2QtPmx1dHNpemU7CisgICAg aW50IGx1dF9zaXplMiA9IGx1dF9zaXplICogbHV0X3NpemU7CisgICAgaW50IGx1dF9zaXplMyA9 IGx1dF9zaXplICogbHV0X3NpemUyOworCisgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAi Y3JlYXRlIDNEIExVVCBzdXJmYWNlIHdpdGggc3lzdGVtIG1lbW9yeSwgTFVUIHNpemU6ICVkLlxu IiwgbHV0X3NpemUpOworCisgICAgdnBwLT5sdXQzZF9yID0gYXZfY2FsbG9jKGx1dF9zaXplMywg c2l6ZW9mKG1meFUxNikpOworICAgIHZwcC0+bHV0M2RfZyA9IGF2X2NhbGxvYyhsdXRfc2l6ZTMs IHNpemVvZihtZnhVMTYpKTsKKyAgICB2cHAtPmx1dDNkX2IgPSBhdl9jYWxsb2MobHV0X3NpemUz LCBzaXplb2YobWZ4VTE2KSk7CisKKyAgICAvLyBDb3B5IDNEIExVVCB0byBzeXN0ZW0gbWVtb3J5 IHN1cmZhY2UuCisgICAgZm9yIChyID0gMCwgaWR4ID0gMDsgciA8IGx1dF9zaXplOyArK3IpIHsK KyAgICAgICAgZm9yIChnID0gMDsgZyA8IGx1dF9zaXplOyArK2cpIHsKKyAgICAgICAgICAgIGZv ciAoYiA9IDA7IGIgPCBsdXRfc2l6ZTsgKytiKSB7CisgICAgICAgICAgICAgICAgdiA9ICZsdXQz ZC0+bHV0W3IgKiBsdXRfc2l6ZTIgKyBnICogbHV0X3NpemUgKyBiXTsKKworICAgICAgICAgICAg ICAgIHZwcC0+bHV0M2RfcltpZHhdID0gKG1meFUxNikodi0+ciAqIFVJTlQxNl9NQVgpOworICAg ICAgICAgICAgICAgIHZwcC0+bHV0M2RfZ1tpZHhdID0gKG1meFUxNikodi0+ZyAqIFVJTlQxNl9N QVgpOworICAgICAgICAgICAgICAgIHZwcC0+bHV0M2RfYltpZHhdID0gKG1meFUxNikodi0+YiAq IFVJTlQxNl9NQVgpOworICAgICAgICAgICAgICAgIGlkeCsrOworICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgfQorCisgICAgbWVtc2V0KGx1dDNkX2NvbmYsIDAsIHNpemVvZigqbHV0M2Rf Y29uZikpOworICAgIGx1dDNkX2NvbmYtPkhlYWRlci5CdWZmZXJJZCA9IE1GWF9FWFRCVUZGX1ZQ UF8zRExVVDsKKyAgICBsdXQzZF9jb25mLT5IZWFkZXIuQnVmZmVyU3ogPSBzaXplb2YoKmx1dDNk X2NvbmYpOworICAgIGx1dDNkX2NvbmYtPkNoYW5uZWxNYXBwaW5nID0gTUZYXzNETFVUX0NIQU5O RUxfTUFQUElOR19SR0JfUkdCOworICAgIGx1dDNkX2NvbmYtPkJ1ZmZlclR5cGUgPSBNRlhfUkVT T1VSQ0VfU1lTVEVNX1NVUkZBQ0U7CisKKyAgICBsdXQzZF9jb25mLT5TeXN0ZW1CdWZmZXIuQ2hh bm5lbFswXS5EYXRhVHlwZSA9IE1GWF9EQVRBX1RZUEVfVTE2OworICAgIGx1dDNkX2NvbmYtPlN5 c3RlbUJ1ZmZlci5DaGFubmVsWzBdLlNpemUgPSBsdXRfc2l6ZTsKKyAgICBsdXQzZF9jb25mLT5T eXN0ZW1CdWZmZXIuQ2hhbm5lbFswXS5EYXRhMTYgPSB2cHAtPmx1dDNkX3I7CisKKyAgICBsdXQz ZF9jb25mLT5TeXN0ZW1CdWZmZXIuQ2hhbm5lbFsxXS5EYXRhVHlwZSA9IE1GWF9EQVRBX1RZUEVf VTE2OworICAgIGx1dDNkX2NvbmYtPlN5c3RlbUJ1ZmZlci5DaGFubmVsWzFdLlNpemUgPSBsdXRf c2l6ZTsKKyAgICBsdXQzZF9jb25mLT5TeXN0ZW1CdWZmZXIuQ2hhbm5lbFsxXS5EYXRhMTYgPSB2 cHAtPmx1dDNkX2c7CisKKyAgICBsdXQzZF9jb25mLT5TeXN0ZW1CdWZmZXIuQ2hhbm5lbFsyXS5E YXRhVHlwZSA9IE1GWF9EQVRBX1RZUEVfVTE2OworICAgIGx1dDNkX2NvbmYtPlN5c3RlbUJ1ZmZl ci5DaGFubmVsWzJdLlNpemUgPSBsdXRfc2l6ZTsKKyAgICBsdXQzZF9jb25mLT5TeXN0ZW1CdWZm ZXIuQ2hhbm5lbFsyXS5EYXRhMTYgPSB2cHAtPmx1dDNkX2I7Cit9CisKK3N0YXRpYyB2b2lkIHVu aW5pdF8zZGx1dF9zdXJmYWNlKEFWRmlsdGVyQ29udGV4dCAqY3R4KSB7CisgICAgVlBQQ29udGV4 dCAqdnBwID0gY3R4LT5wcml2OworICAgIG1meEV4dFZQUDNETHV0ICpsdXQzZF9jb25mID0gJnZw cC0+bHV0M2RfY29uZjsKKworICAgIGlmIChsdXQzZF9jb25mLT5IZWFkZXIuQnVmZmVySWQgPT0g TUZYX0VYVEJVRkZfVlBQXzNETFVUKSB7CisgICAgICAgIGF2X2ZyZWUodnBwLT5sdXQzZF9yKTsK KyAgICAgICAgYXZfZnJlZSh2cHAtPmx1dDNkX2cpOworICAgICAgICBhdl9mcmVlKHZwcC0+bHV0 M2RfYik7CisgICAgICAgIHZwcC0+bHV0M2RfciA9IE5VTEw7CisgICAgICAgIHZwcC0+bHV0M2Rf ZyA9IE5VTEw7CisgICAgICAgIHZwcC0+bHV0M2RfYiA9IE5VTEw7CisgICAgfQorICAgIG1lbXNl dChsdXQzZF9jb25mLCAwLCBzaXplb2YoKmx1dDNkX2NvbmYpKTsKK30KKyNlbmRpZiAvLyBRU1Zf T05FVlBMCisKIHN0YXRpYyBpbnQgdnBwX3NldF9mcmFtZV9leHRfcGFyYW1zKEFWRmlsdGVyQ29u dGV4dCAqY3R4LCBjb25zdCBBVkZyYW1lICppbiwgQVZGcmFtZSAqb3V0LCAgUVNWVlBQRnJhbWVQ YXJhbSAqZnApCiB7CiAjaWYgUVNWX09ORVZQTApAQCAtNDk5LDYgKzU3NiwxMCBAQCBzdGF0aWMg aW50IHZwcF9zZXRfZnJhbWVfZXh0X3BhcmFtcyhBVkZpbHRlckNvbnRleHQgKmN0eCwgY29uc3Qg QVZGcmFtZSAqaW4sIEFWRgogICAgIG91dHZzaV9jb25mLk1hdHJpeENvZWZmaWNpZW50cyAgICAg ICA9IChvdXQtPmNvbG9yc3BhY2UgPT0gQVZDT0xfU1BDX1VOU1BFQ0lGSUVEKSA/IEFWQ09MX1NQ Q19CVDcwOSA6IG91dC0+Y29sb3JzcGFjZTsKICAgICBvdXR2c2lfY29uZi5Db2xvdXJEZXNjcmlw dGlvblByZXNlbnQgPSAxOwogCisgICAgLy8gM0QgTFVUIGRvZXMgbm90IGRlcGVuZCBvbiBpbi9v dXQgZnJhbWUsIHNvIGluaXRpYWxpemUganVzdCBvbmNlLgorICAgIGlmICh2cHAtPmx1dDNkLmZp bGUgJiYgKHZwcC0+bHV0M2RfY29uZi5IZWFkZXIuQnVmZmVySWQgPT0gMCkpCisgICAgICAgIGlu aXRfM2RsdXRfc3VyZmFjZShjdHgpOworCiAgICAgaWYgKG1lbWNtcCgmdnBwLT5pbnZzaV9jb25m LCAmaW52c2lfY29uZiwgc2l6ZW9mKG1meEV4dFZpZGVvU2lnbmFsSW5mbykpIHx8CiAgICAgICAg IG1lbWNtcCgmdnBwLT5tZGN2X2NvbmYsICZtZGN2X2NvbmYsIHNpemVvZihtZnhFeHRNYXN0ZXJp bmdEaXNwbGF5Q29sb3VyVm9sdW1lKSkgfHwKICAgICAgICAgbWVtY21wKCZ2cHAtPmNsbGlfY29u ZiwgJmNsbGlfY29uZiwgc2l6ZW9mKG1meEV4dENvbnRlbnRMaWdodExldmVsSW5mbykpIHx8CkBA IC01MTYsNiArNTk3LDkgQEAgc3RhdGljIGludCB2cHBfc2V0X2ZyYW1lX2V4dF9wYXJhbXMoQVZG aWx0ZXJDb250ZXh0ICpjdHgsIGNvbnN0IEFWRnJhbWUgKmluLCBBVkYKICAgICAgICAgdnBwLT5j bGxpX2NvbmYgICAgICAgICAgICAgICAgICAgICA9IGNsbGlfY29uZjsKICAgICAgICAgaWYgKGNs bGlfY29uZi5IZWFkZXIuQnVmZmVySWQpCiAgICAgICAgICAgICBmcC0+ZXh0X2J1ZltmcC0+bnVt X2V4dF9idWYrK10gPSAobWZ4RXh0QnVmZmVyKikmdnBwLT5jbGxpX2NvbmY7CisKKyAgICAgICAg aWYgKHZwcC0+bHV0M2RfY29uZi5IZWFkZXIuQnVmZmVySWQpCisgICAgICAgICAgICBmcC0+ZXh0 X2J1ZltmcC0+bnVtX2V4dF9idWYrK10gPSAobWZ4RXh0QnVmZmVyICopJnZwcC0+bHV0M2RfY29u ZjsKICAgICB9CiAjZW5kaWYKIApAQCAtNzExLDkgKzc5NSwyMiBAQCBzdGF0aWMgaW50IGNvbmZp Z19vdXRwdXQoQVZGaWx0ZXJMaW5rICpvdXRsaW5rKQogICAgICAgICB2cHAtPmNvbG9yX3RyYW5z ZmVyICE9IEFWQ09MX1RSQ19VTlNQRUNJRklFRCB8fAogICAgICAgICB2cHAtPmNvbG9yX21hdHJp eCAhPSBBVkNPTF9TUENfVU5TUEVDSUZJRUQgfHwKICAgICAgICAgdnBwLT50b25lbWFwIHx8Ci0g ICAgICAgICF2cHAtPmhhc19wYXNzdGhyb3VnaCkKKyNpZiBRU1ZfT05FVlBMCisgICAgICAgIHZw cC0+bHV0M2QuZmlsZSB8fAorI2VuZGlmCisgICAgICAgICF2cHAtPmhhc19wYXNzdGhyb3VnaCkg eworI2lmIFFTVl9PTkVWUEwKKyAgICAgICAgaWYgKHZwcC0+bHV0M2QuZmlsZSkgeworICAgICAg ICAgICAgaW50IHJldDsKKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19JTkZPLCAiTG9h ZCAzRCBMVVQgZnJvbSBmaWxlOiAlc1xuIiwgdnBwLT5sdXQzZC5maWxlKTsKKyAgICAgICAgICAg IGF2X2xvZyhjdHgsIEFWX0xPR19JTkZPLCAiRm9yIG9uZVZQTC1pbnRlbC1ncHUsIG11c3QgdXNl IHZlcnNpb24gPj0gMjQuMS4xIHRvIGNvcnJlY3RseSBhcHBseSAzRCBMVVQuXG4iKTsKKyAgICAg ICAgICAgIHJldCA9IGZmX2x1dDNkX2luaXQoY3R4LCAmdnBwLT5sdXQzZCk7CisgICAgICAgICAg ICBpZiAocmV0ICE9IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQor I2VuZGlmCiAgICAgICAgIHJldHVybiBmZl9xc3Z2cHBfaW5pdChjdHgsICZwYXJhbSk7Ci0gICAg ZWxzZSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgLyogTm8gTUZYIHNlc3Npb24gaXMgY3JlYXRl ZCBpbiB0aGlzIGNhc2UgKi8KICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX1ZFUkJPU0UsICJx c3YgdnBwIHBhc3MgdGhyb3VnaCBtb2RlLlxuIik7CiAgICAgICAgIGlmIChpbmxpbmstPmh3X2Zy YW1lc19jdHgpCkBAIC04MDEsNiArODk4LDE0IEBAIGVvZjoKIAogc3RhdGljIGF2X2NvbGQgdm9p ZCB2cHBfdW5pbml0KEFWRmlsdGVyQ29udGV4dCAqY3R4KQogeworICAgIFZQUENvbnRleHQgKnZw cCA9IGN0eC0+cHJpdjsKKworI2lmIFFTVl9PTkVWUEwKKyAgICB1bmluaXRfM2RsdXRfc3VyZmFj ZShjdHgpOworICAgIGlmICh2cHAtPmx1dDNkLmZpbGUpCisgICAgICAgIGZmX2x1dDNkX3VuaW5p dCgmdnBwLT5sdXQzZCk7CisjZW5kaWYKKwogICAgIGZmX3FzdnZwcF9jbG9zZShjdHgpOwogfQog CkBAIC05MjMsNyArMTAyOCw5IEBAIHN0YXRpYyBjb25zdCBBVk9wdGlvbiB2cHBfb3B0aW9uc1td ID0gewogICAgICAgT0ZGU0VUKGNvbG9yX3RyYW5zZmVyX3N0ciksICBBVl9PUFRfVFlQRV9TVFJJ TkcsIHsgLnN0ciA9IE5VTEwgfSwgLmZsYWdzID0gRkxBR1MgfSwKIAogICAgIHsidG9uZW1hcCIs ICJQZXJmb3JtIHRvbmVtYXBwaW5nICgwPWRpc2FibGUgdG9uZW1hcHBpbmcsIDE9cGVyZm9ybSB0 b25lbWFwcGluZyBpZiB0aGUgaW5wdXQgaGFzIEhEUiBtZXRhZGF0YSkiLCBPRkZTRVQodG9uZW1h cCksIEFWX09QVF9UWVBFX0lOVCwgey5pNjQgPSAwIH0sIDAsIDEsIC5mbGFncyA9IEZMQUdTfSwK LQorI2lmIFFTVl9PTkVWUEwKKyAgICB7ICJsdXQzZF9maWxlIiwgIkxvYWQgYW5kIGFwcGx5IDNE IExVVCBmaWxlIiwgT0ZGU0VUKGx1dDNkKSArIG9mZnNldG9mKExVVDNEQ29udGV4dCwgZmlsZSks IEFWX09QVF9UWVBFX1NUUklORywgeyAuc3RyID0gTlVMTCB9LCAuZmxhZ3MgPSBGTEFHUyB9LAor I2VuZGlmCiAgICAgeyBOVUxMIH0KIH07CiAKLS0gCjIuNDMuMAoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApm Zm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5m by9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFp bApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3Jp YmUiLgo=