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 E525442339 for ; Tue, 12 Apr 2022 05:55:10 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4540368B36E; Tue, 12 Apr 2022 08:54:33 +0300 (EEST) Received: from mail-qv1-f47.google.com (mail-qv1-f47.google.com [209.85.219.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 33FEA68B36F for ; Tue, 12 Apr 2022 08:54:25 +0300 (EEST) Received: by mail-qv1-f47.google.com with SMTP id y19so3447688qvk.5 for ; Mon, 11 Apr 2022 22:54:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=eu+vndcqQ9psmYLI85idQx8sMfORuk+/7IDcVGYAPlc=; b=KZF4ThKMgDV//sRMYkQQQ1PWBWu8cK1zkFNpMa/IQp9rGUixw+rklwgLBlUsXKfxYc mDDrtzyBwT7dQFpvuHZCAiDEB9zf4CCWl3Q/8+XOd5R6hD/UGjZH/Kmjsubi6huKqFfU f4c6y3pkpEy0EVSY5kQmNUGCFAwPhrc6lOhlwv9i+B564GM5Kwar9qdfV8FCquyF3olJ h0hHNRIaqN5iqwH2mF09efpHDPJdAm26lKo2ASYjARTKLWmIfWkD7Uy8pHnPP6X0PdWJ Yjc3ffJs05zsJFgsrU4ZHCPf1qbEXezIZ5fPWIOBT967K1XwOBtpcRE4mP4PD9Coe0w5 ieoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=eu+vndcqQ9psmYLI85idQx8sMfORuk+/7IDcVGYAPlc=; b=M2gzhOoMDmRl6WTDandG6BSP/Yiuur1GZJwDQ5uGo7OiDe14kOPO6Ysdbj1dDUCFtg yy5MRoctMFX9e3rQIj3oAzpw6BRqIqSBe6soafuxiu0bgUdpCxm92emeRW3M06bQd+tZ vlk+CMXVp8VW44fRaNkAQvDkrKenYJmDuPG+fqeTza4PF4IUgppQk/mGPAAEFOtUMcGY Yb1pOIzoPZq8MLlR39QX0iIKPFJdPG4ymg5IzMFBimGgLEQP5GTxv74gjTDze7AGovFp 51rZvozHsoz28QaBSWOYVhiMCefcsyic+uc6JI7UsoFVmAgkYCwn7HvXOPnsvyJR9Qhz ABJQ== X-Gm-Message-State: AOAM530wWYVvUyuL1P7uH+ld51nlOCdzLHMvKm8IAGpF1w8t7kVW6eG1 xLmFK8Zl4OzWLlp8qwBno+zfIl/ED18= X-Google-Smtp-Source: ABdhPJzXSFgFmpLC+V7M+UVdq8YrAPbV1h5pfkgC9mOVIptl5S+epKvzeMMkGkS/2SuPKKG9wPMtJQ== X-Received: by 2002:a0c:f8ca:0:b0:444:41e8:89b1 with SMTP id h10-20020a0cf8ca000000b0044441e889b1mr7735028qvo.22.1649742863959; Mon, 11 Apr 2022 22:54:23 -0700 (PDT) Received: from gauss.local (c-68-41-54-207.hsd1.mi.comcast.net. [68.41.54.207]) by smtp.gmail.com with ESMTPSA id k2-20020a37ba02000000b0067dc1b0104asm19801988qkf.124.2022.04.11.22.54.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Apr 2022 22:54:23 -0700 (PDT) From: Leo Izen To: ffmpeg-devel@ffmpeg.org Date: Tue, 12 Apr 2022 01:53:33 -0400 Message-Id: <20220412055333.62424-5-leo.izen@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220412055333.62424-1-leo.izen@gmail.com> References: <20220412055333.62424-1-leo.izen@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v14 4/4] avformat/image2: add Jpeg XL as image2 format 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: Leo Izen 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: VGhpcyBjb21taXQgYWRkcyBzdXBwb3J0IHRvIGxpYmF2Zm9ybWF0IGZvciBtdXhpbmcKYW5kIGRl bXV4aW5nIEpwZWcgWEwgaW1hZ2VzIGFzIGltYWdlMiBzdHJlYW1zLgotLS0KIE1BSU5UQUlORVJT ICAgICAgICAgICAgICAgIHwgICAxICsKIGxpYmF2Zm9ybWF0L01ha2VmaWxlICAgICAgIHwgICAx ICsKIGxpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYyAgIHwgICAxICsKIGxpYmF2Zm9ybWF0L2ltZzIu YyAgICAgICAgIHwgICAxICsKIGxpYmF2Zm9ybWF0L2ltZzJkZWMuYyAgICAgIHwgIDE4ICsrCiBs aWJhdmZvcm1hdC9pbWcyZW5jLmMgICAgICB8ICAgNiArLQogbGliYXZmb3JtYXQvanBlZ3hsX3By b2JlLmMgfCAzOTMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliYXZm b3JtYXQvanBlZ3hsX3Byb2JlLmggfCAgMzIgKysrCiBsaWJhdmZvcm1hdC9tb3YuYyAgICAgICAg ICB8ICAgMSArCiA5IGZpbGVzIGNoYW5nZWQsIDQ1MSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9u cygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0L2pwZWd4bF9wcm9iZS5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvanBlZ3hsX3Byb2JlLmgKCmRpZmYgLS1naXQgYS9N QUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGZhZWE4NGViZjEuLjQ2NzIzOTcyZGMgMTAw NjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC00MzksNiArNDM5LDcg QEAgTXV4ZXJzL0RlbXV4ZXJzOgogICBpcG1vdmllLmMgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE1pa2UgTWVsYW5zb24KICAgaXJjYW0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQYXVsIEIgTWFob2wKICAgaXNzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT dGVmYW4gR2VocmVyCisgIGpwZWd4bF9wcm9iZS4qICAgICAgICAgICAgICAgICAgICAgICAgTGVv IEl6ZW4KICAganZkZWMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQZXRlciBSb3Nz CiAgIGt2YWcuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWmFuZSB2YW4gSXBlcmVu CiAgIGxpYm1vZHBsdWcuYyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2zDqW1lbnQgQsWTc2No CmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9NYWtlZmlsZSBiL2xpYmF2Zm9ybWF0L01ha2VmaWxl CmluZGV4IGQ3MTgyZDZiZDguLmJlZWNkZjVhNjYgMTAwNjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L01h a2VmaWxlCisrKyBiL2xpYmF2Zm9ybWF0L01ha2VmaWxlCkBAIC0yNzIsNiArMjcyLDcgQEAgT0JK Uy0kKENPTkZJR19JTUFHRV9HSUZfUElQRV9ERU1VWEVSKSAgICAgKz0gaW1nMmRlYy5vIGltZzIu bwogT0JKUy0kKENPTkZJR19JTUFHRV9KMktfUElQRV9ERU1VWEVSKSAgICAgKz0gaW1nMmRlYy5v IGltZzIubwogT0JKUy0kKENPTkZJR19JTUFHRV9KUEVHX1BJUEVfREVNVVhFUikgICAgKz0gaW1n MmRlYy5vIGltZzIubwogT0JKUy0kKENPTkZJR19JTUFHRV9KUEVHTFNfUElQRV9ERU1VWEVSKSAg Kz0gaW1nMmRlYy5vIGltZzIubworT0JKUy0kKENPTkZJR19JTUFHRV9KUEVHWExfUElQRV9ERU1V WEVSKSAgKz0gaW1nMmRlYy5vIGltZzIubyBqcGVneGxfcHJvYmUubwogT0JKUy0kKENPTkZJR19J TUFHRV9QQU1fUElQRV9ERU1VWEVSKSAgICAgKz0gaW1nMmRlYy5vIGltZzIubwogT0JKUy0kKENP TkZJR19JTUFHRV9QQk1fUElQRV9ERU1VWEVSKSAgICAgKz0gaW1nMmRlYy5vIGltZzIubwogT0JK Uy0kKENPTkZJR19JTUFHRV9QQ1hfUElQRV9ERU1VWEVSKSAgICAgKz0gaW1nMmRlYy5vIGltZzIu bwpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jIGIvbGliYXZmb3JtYXQvYWxs Zm9ybWF0cy5jCmluZGV4IDdjMWQwYWMzOGYuLjYzODc2YzQ2OGYgMTAwNjQ0Ci0tLSBhL2xpYmF2 Zm9ybWF0L2FsbGZvcm1hdHMuYworKysgYi9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKQEAgLTUx MCw2ICs1MTAsNyBAQCBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfaW1hZ2VfZ2lmX3Bp cGVfZGVtdXhlcjsKIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9pbWFnZV9qMmtfcGlw ZV9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2ltYWdlX2pwZWdfcGlw ZV9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2ltYWdlX2pwZWdsc19w aXBlX2RlbXV4ZXI7CitleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfaW1hZ2VfanBlZ3hs X3BpcGVfZGVtdXhlcjsKIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9pbWFnZV9wYW1f cGlwZV9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2ltYWdlX3BibV9w aXBlX2RlbXV4ZXI7CiBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfaW1hZ2VfcGN4X3Bp cGVfZGVtdXhlcjsKZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2ltZzIuYyBiL2xpYmF2Zm9ybWF0 L2ltZzIuYwppbmRleCBmZTJjYTdiZmZmLi41NjZlZjg3M2NhIDEwMDY0NAotLS0gYS9saWJhdmZv cm1hdC9pbWcyLmMKKysrIGIvbGliYXZmb3JtYXQvaW1nMi5jCkBAIC04OCw2ICs4OCw3IEBAIGNv bnN0IElkU3RyTWFwIGZmX2ltZ190YWdzW10gPSB7CiAgICAgeyBBVl9DT0RFQ19JRF9HRU0sICAg ICAgICAieGltZyIgICAgIH0sCiAgICAgeyBBVl9DT0RFQ19JRF9HRU0sICAgICAgICAidGltZyIg ICAgIH0sCiAgICAgeyBBVl9DT0RFQ19JRF9WQk4sICAgICAgICAidmJuIiAgICAgIH0sCisgICAg eyBBVl9DT0RFQ19JRF9KUEVHWEwsICAgICAianhsIiAgICAgIH0sCiAgICAgeyBBVl9DT0RFQ19J RF9OT05FLCAgICAgICBOVUxMICAgICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0 L2ltZzJkZWMuYyBiL2xpYmF2Zm9ybWF0L2ltZzJkZWMuYwppbmRleCA1NTFiOWQ1MDhlLi42Mjdi YjY3MjEyIDEwMDY0NAotLS0gYS9saWJhdmZvcm1hdC9pbWcyZGVjLmMKKysrIGIvbGliYXZmb3Jt YXQvaW1nMmRlYy5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiYXZpb19pbnRlcm5hbC5o IgogI2luY2x1ZGUgImludGVybmFsLmgiCiAjaW5jbHVkZSAiaW1nMi5oIgorI2luY2x1ZGUgImpw ZWd4bF9wcm9iZS5oIgogI2luY2x1ZGUgImxpYmF2Y29kZWMvbWpwZWcuaCIKICNpbmNsdWRlICJs aWJhdmNvZGVjL3Zibi5oIgogI2luY2x1ZGUgImxpYmF2Y29kZWMveHdkLmgiCkBAIC04MzcsNiAr ODM4LDIyIEBAIHN0YXRpYyBpbnQganBlZ2xzX3Byb2JlKGNvbnN0IEFWUHJvYmVEYXRhICpwKQog ICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGpwZWd4bF9wcm9iZShjb25zdCBBVlByb2Jl RGF0YSAqcCkKK3sKKyAgICBjb25zdCB1aW50OF90ICpiID0gcC0+YnVmOworCisgICAgLyogSVNP Qk1GRi1iYXNlZCBjb250YWluZXIgKi8KKyAgICAvKiAweDRhNTg0YzIwID09ICJKWEwgIiAqLwor ICAgIGlmIChBVl9STDY0KGIpID09IEZGX0pQRUdYTF9DT05UQUlORVJfU0lHTkFUVVJFX0xFKQor ICAgICAgICByZXR1cm4gQVZQUk9CRV9TQ09SRV9FWFRFTlNJT04gKyAxOworICAgIC8qIFJhdyBj b2Rlc3RyZWFtcyBhbGwgc3RhcnQgd2l0aCAweGZmMGEgKi8KKyAgICBpZiAoQVZfUkwxNihiKSAh PSBGRl9KUEVHWExfQ09ERVNUUkVBTV9TSUdOQVRVUkVfTEUpCisgICAgICAgIHJldHVybiAwOwor ICAgIGlmIChmZl9qcGVneGxfdmVyaWZ5X2NvZGVzdHJlYW1faGVhZGVyKHAtPmJ1ZiwgcC0+YnVm X3NpemUpID49IDApCisgICAgICAgIHJldHVybiBBVlBST0JFX1NDT1JFX01BWCAtIDI7CisgICAg cmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcGN4X3Byb2JlKGNvbnN0IEFWUHJvYmVEYXRhICpw KQogewogICAgIGNvbnN0IHVpbnQ4X3QgKmIgPSBwLT5idWY7CkBAIC0xMTc2LDYgKzExOTMsNyBA QCBJTUFHRUFVVE9fREVNVVhFUihnaWYsICAgICAgIEdJRikKIElNQUdFQVVUT19ERU1VWEVSX0VY VChqMmssICAgSlBFRzIwMDAsIEoySykKIElNQUdFQVVUT19ERU1VWEVSX0VYVChqcGVnLCAgTUpQ RUcsIEpQRUcpCiBJTUFHRUFVVE9fREVNVVhFUihqcGVnbHMsICAgIEpQRUdMUykKK0lNQUdFQVVU T19ERU1VWEVSKGpwZWd4bCwgICAgSlBFR1hMKQogSU1BR0VBVVRPX0RFTVVYRVIocGFtLCAgICAg ICBQQU0pCiBJTUFHRUFVVE9fREVNVVhFUihwYm0sICAgICAgIFBCTSkKIElNQUdFQVVUT19ERU1V WEVSKHBjeCwgICAgICAgUENYKQpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvaW1nMmVuYy5jIGIv bGliYXZmb3JtYXQvaW1nMmVuYy5jCmluZGV4IGFlMzUxOTYzZDkuLjVlZDk3YmI4MzMgMTAwNjQ0 Ci0tLSBhL2xpYmF2Zm9ybWF0L2ltZzJlbmMuYworKysgYi9saWJhdmZvcm1hdC9pbWcyZW5jLmMK QEAgLTI2Myw5ICsyNjMsOSBAQCBzdGF0aWMgY29uc3QgQVZDbGFzcyBpbWcybXV4X2NsYXNzID0g ewogY29uc3QgQVZPdXRwdXRGb3JtYXQgZmZfaW1hZ2UyX211eGVyID0gewogICAgIC5uYW1lICAg ICAgICAgICA9ICJpbWFnZTIiLAogICAgIC5sb25nX25hbWUgICAgICA9IE5VTExfSUZfQ09ORklH X1NNQUxMKCJpbWFnZTIgc2VxdWVuY2UiKSwKLSAgICAuZXh0ZW5zaW9ucyAgICAgPSAiYm1wLGRw eCxleHIsamxzLGpwZWcsanBnLGxqcGcscGFtLHBibSxwY3gscGZtLHBnbSxwZ215dXYscG5nLCIK LSAgICAgICAgICAgICAgICAgICAgICAicHBtLHNnaSx0Z2EsdGlmLHRpZmYsanAyLGoyYyxqMmss eHdkLHN1bixyYXMscnMsaW0xLGltOCxpbTI0LCIKLSAgICAgICAgICAgICAgICAgICAgICAic3Vu cmFzLHZibix4Ym0seGZhY2UscGl4LHkiLAorICAgIC5leHRlbnNpb25zICAgICA9ICJibXAsZHB4 LGV4cixqbHMsanBlZyxqcGcsanhsLGxqcGcscGFtLHBibSxwY3gscGZtLHBnbSxwZ215dXYsIgor ICAgICAgICAgICAgICAgICAgICAgICJwbmcscHBtLHNnaSx0Z2EsdGlmLHRpZmYsanAyLGoyYyxq MmsseHdkLHN1bixyYXMscnMsaW0xLGltOCwiCisgICAgICAgICAgICAgICAgICAgICAgImltMjQs c3VucmFzLHZibix4Ym0seGZhY2UscGl4LHkiLAogICAgIC5wcml2X2RhdGFfc2l6ZSA9IHNpemVv ZihWaWRlb011eERhdGEpLAogICAgIC52aWRlb19jb2RlYyAgICA9IEFWX0NPREVDX0lEX01KUEVH LAogICAgIC53cml0ZV9oZWFkZXIgICA9IHdyaXRlX2hlYWRlciwKZGlmZiAtLWdpdCBhL2xpYmF2 Zm9ybWF0L2pwZWd4bF9wcm9iZS5jIGIvbGliYXZmb3JtYXQvanBlZ3hsX3Byb2JlLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZDNkMzgyMmZlZQotLS0gL2Rldi9udWxs CisrKyBiL2xpYmF2Zm9ybWF0L2pwZWd4bF9wcm9iZS5jCkBAIC0wLDAgKzEsMzkzIEBACisvKgor ICogSnBlZyBYTCBoZWFkZXIgdmVyaWZpY2F0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMjIgTGVv IEl6ZW4gPGxlby5pemVuQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBG Rm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5z ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVn OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMu LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEg VVNBCisgKi8KKworI2luY2x1ZGUgImpwZWd4bF9wcm9iZS5oIgorCisjZGVmaW5lIEJJVFNUUkVB TV9SRUFERVJfTEUKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2dldF9iaXRzLmgiCisKK2VudW0gSnBl Z1hMRXh0cmFDaGFubmVsVHlwZSB7CisgICAgRkZfSlBFR1hMX0NUX0FMUEhBID0gMCwKKyAgICBG Rl9KUEVHWExfQ1RfREVQVEgsCisgICAgRkZfSlBFR1hMX0NUX1NQT1RfQ09MT1IsCisgICAgRkZf SlBFR1hMX0NUX1NFTEVDVElPTl9NQVNLLAorICAgIEZGX0pQRUdYTF9DVF9CTEFDSywKKyAgICBG Rl9KUEVHWExfQ1RfQ0ZBLAorICAgIEZGX0pQRUdYTF9DVF9USEVSTUFMLAorICAgIEZGX0pQRUdY TF9DVF9OT05fT1BUSU9OQUwgPSAxNSwKKyAgICBGRl9KUEVHWExfQ1RfT1BUSU9OQUwKK307CisK K2VudW0gSnBlZ1hMQ29sb3JTcGFjZSB7CisgICAgRkZfSlBFR1hMX0NTX1JHQiA9IDAsCisgICAg RkZfSlBFR1hMX0NTX0dSQVksCisgICAgRkZfSlBFR1hMX0NTX1hZQiwKKyAgICBGRl9KUEVHWExf Q1NfVU5LTk9XTgorfTsKKworZW51bSBKcGVnWExXaGl0ZVBvaW50IHsKKyAgICBGRl9KUEVHWExf V1BfRDY1ID0gMSwKKyAgICBGRl9KUEVHWExfV1BfQ1VTVE9NLAorICAgIEZGX0pQRUdYTF9XUF9F ID0gMTAsCisgICAgRkZfSlBFR1hMX1dQX0RDSSA9IDExCit9OworCitlbnVtIEpwZWdYTFByaW1h cmllcyB7CisgICAgRkZfSlBFR1hMX1BSX1NSR0IgPSAxLAorICAgIEZGX0pQRUdYTF9QUl9DVVNU T00sCisgICAgRkZfSlBFR1hMX1BSXzIxMDAgPSA5LAorICAgIEZGX0pQRUdYTF9QUl9QMyA9IDEx LAorfTsKKworI2RlZmluZSBqeGxfYml0cyhuKSBnZXRfYml0c19sb25nKGdiLCAobikpCisjZGVm aW5lIGp4bF9iaXRzX3NraXAobikgc2tpcF9iaXRzX2xvbmcoZ2IsIChuKSkKKyNkZWZpbmUganhs X3UzMihjMCwgYzEsIGMyLCBjMywgdTAsIHUxLCB1MiwgdTMpIGpwZWd4bF91MzIoZ2IsIFwKKyAg ICAoY29uc3QgdWludDMyX3RbXSl7YzAsIGMxLCBjMiwgYzN9LCAoY29uc3QgdWludDMyX3RbXSl7 dTAsIHUxLCB1MiwgdTN9KQorI2RlZmluZSBqeGxfdTY0KCkganBlZ3hsX3U2NChnYikKKyNkZWZp bmUganhsX2VudW0oKSBqeGxfdTMyKDAsIDEsIDIsIDE4LCAwLCAwLCA0LCA2KQorCisvKiByZWFk IGEgVTMyKGNfaSArIHUodV9pKSkgKi8KK3N0YXRpYyB1aW50MzJfdCBqcGVneGxfdTMyKEdldEJp dENvbnRleHQgKmdiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3Qg Y29uc3RhbnRzWzRdLCBjb25zdCB1aW50MzJfdCB1Yml0c1s0XSkKK3sKKyAgICB1aW50MzJfdCBy ZXQsIGNob2ljZSA9IGp4bF9iaXRzKDIpOworCisgICAgcmV0ID0gY29uc3RhbnRzW2Nob2ljZV07 CisgICAgaWYgKHViaXRzW2Nob2ljZV0pCisgICAgICAgIHJldCArPSBqeGxfYml0cyh1Yml0c1tj aG9pY2VdKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKKy8qIHJlYWQgYSBVNjQoKSAqLworc3Rh dGljIHVpbnQ2NF90IGpwZWd4bF91NjQoR2V0Qml0Q29udGV4dCAqZ2IpCit7CisgICAgdWludDY0 X3Qgc2hpZnQgPSAxMiwgcmV0OworCisgICAgc3dpdGNoIChqeGxfYml0cygyKSkgeworICAgIGNh c2UgMDoKKyAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAg ICAgICByZXQgPSAxICsganhsX2JpdHMoNCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoK KyAgICAgICAgcmV0ID0gMTcgKyBqeGxfYml0cyg4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz ZSAzOgorICAgICAgICByZXQgPSBqeGxfYml0cygxMik7CisgICAgICAgIHdoaWxlIChqeGxfYml0 cygxKSkgeworICAgICAgICAgICAgaWYgKHNoaWZ0IDwgNjApIHsKKyAgICAgICAgICAgICAgICBy ZXQgfD0ganhsX2JpdHMoOCkgPDwgc2hpZnQ7CisgICAgICAgICAgICAgICAgc2hpZnQgKz0gODsK KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0IHw9IGp4bF9iaXRzKDQp IDw8IHNoaWZ0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRp YyB1aW50MzJfdCBqcGVneGxfd2lkdGhfZnJvbV9yYXRpbyh1aW50MzJfdCBoZWlnaHQsIGludCBy YXRpbykKK3sKKyAgICB1aW50NjRfdCBoZWlnaHQ2NCA9IGhlaWdodDsKKyAgICBzd2l0Y2ggKHJh dGlvKSB7CisgICAgY2FzZSAxOgorICAgICAgICByZXR1cm4gaGVpZ2h0OworICAgIGNhc2UgMjoK KyAgICAgICAgcmV0dXJuICh1aW50MzJfdCkoKGhlaWdodDY0ICogMTIpIC8gMTApOworICAgIGNh c2UgMzoKKyAgICAgICAgcmV0dXJuICh1aW50MzJfdCkoKGhlaWdodDY0ICogNCkgLyAzKTsKKyAg ICBjYXNlIDQ6CisgICAgICAgIHJldHVybiAodWludDMyX3QpKChoZWlnaHQ2NCAqIDMpIC8gMik7 CisgICAgY2FzZSA1OgorICAgICAgICByZXR1cm4gKHVpbnQzMl90KSgoaGVpZ2h0NjQgKiAxNikg LyA5KTsKKyAgICBjYXNlIDY6CisgICAgICAgIHJldHVybiAodWludDMyX3QpKChoZWlnaHQ2NCAq IDUpIC8gNCk7CisgICAgY2FzZSA3OgorICAgICAgICByZXR1cm4gKHVpbnQzMl90KShoZWlnaHQ2 NCAqIDIpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVy biAwOyAvKiBtYW51YWwgd2lkdGggKi8KK30KKworLyoqCisgKiB2YWxpZGF0ZSBhIEpwZWcgWEwg U2l6ZSBIZWFkZXIKKyAqIEByZXR1cm4gPj0gMCB1cG9uIHZhbGlkIHNpemUsIDwgMCB1cG9uIGlu dmFsaWQgc2l6ZSBmb3VuZAorICovCitzdGF0aWMgaW50IGpwZWd4bF9yZWFkX3NpemVfaGVhZGVy KEdldEJpdENvbnRleHQgKmdiKQoreworICAgIHVpbnQzMl90IHdpZHRoLCBoZWlnaHQ7CisKKyAg ICBpZiAoanhsX2JpdHMoMSkpIHsKKyAgICAgICAgLyogc21hbGwgc2l6ZSBoZWFkZXIgKi8KKyAg ICAgICAgaGVpZ2h0ID0gKGp4bF9iaXRzKDUpICsgMSkgPDwgMzsKKyAgICAgICAgd2lkdGggPSBq cGVneGxfd2lkdGhfZnJvbV9yYXRpbyhoZWlnaHQsIGp4bF9iaXRzKDMpKTsKKyAgICAgICAgaWYg KCF3aWR0aCkKKyAgICAgICAgICAgIHdpZHRoID0gKGp4bF9iaXRzKDUpICsgMSkgPDwgMzsKKyAg ICB9IGVsc2UgeworICAgICAgICAvKiBsYXJnZSBzaXplIGhlYWRlciAqLworICAgICAgICBoZWln aHQgPSAxICsganhsX3UzMigwLCAwLCAwLCAwLCA5LCAxMywgMTgsIDMwKTsKKyAgICAgICAgd2lk dGggPSBqcGVneGxfd2lkdGhfZnJvbV9yYXRpbyhoZWlnaHQsIGp4bF9iaXRzKDMpKTsKKyAgICAg ICAgaWYgKCF3aWR0aCkKKyAgICAgICAgICAgIHdpZHRoID0gMSArIGp4bF91MzIoMCwgMCwgMCwg MCwgOSwgMTMsIDE4LCAzMCk7CisgICAgfQorICAgIGlmICh3aWR0aCA+ICgxIDw8IDE4KSB8fCBo ZWlnaHQgPiAoMSA8PCAxOCkKKyAgICAgICAgfHwgKHdpZHRoID4+IDQpICogKGhlaWdodCA+PiA0 KSA+ICgxIDw8IDIwKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIDA7Cit9CisK Ky8qKgorICogdmFsaWRhdGUgYSBKcGVnIFhMIFByZXZpZXcgSGVhZGVyCisgKiBAcmV0dXJuID49 IDAgdXBvbiB2YWxpZCBzaXplLCA8IDAgdXBvbiBpbnZhbGlkIHNpemUgZm91bmQKKyAqLworc3Rh dGljIGludCBqcGVneGxfcmVhZF9wcmV2aWV3X2hlYWRlcihHZXRCaXRDb250ZXh0ICpnYikKK3sK KyAgICB1aW50MzJfdCB3aWR0aCwgaGVpZ2h0OworCisgICAgaWYgKGp4bF9iaXRzKDEpKSB7Cisg ICAgICAgIC8qIGNvZGVkIGhlaWdodCBhbmQgd2lkdGggZGl2aWRlZCBieSBlaWdodCAqLworICAg ICAgICBoZWlnaHQgPSBqeGxfdTMyKDE2LCAzMiwgMSwgMzMsIDAsIDAsIDUsIDkpIDw8IDM7Cisg ICAgICAgIHdpZHRoID0ganBlZ3hsX3dpZHRoX2Zyb21fcmF0aW8oaGVpZ2h0LCBqeGxfYml0cygz KSk7CisgICAgICAgIGlmICghd2lkdGgpCisgICAgICAgICAgICB3aWR0aCA9IGp4bF91MzIoMTYs IDMyLCAxLCAzMywgMCwgMCwgNSwgOSkgPDwgMzsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBm dWxsIGhlaWdodCBhbmQgd2lkdGggY29kZWQgKi8KKyAgICAgICAgaGVpZ2h0ID0ganhsX3UzMigx LCA2NSwgMzIxLCAxMzQ1LCA2LCA4LCAxMCwgMTIpOworICAgICAgICB3aWR0aCA9IGpwZWd4bF93 aWR0aF9mcm9tX3JhdGlvKGhlaWdodCwganhsX2JpdHMoMykpOworICAgICAgICBpZiAoIXdpZHRo KQorICAgICAgICAgICAgd2lkdGggPSBqeGxfdTMyKDEsIDY1LCAzMjEsIDEzNDUsIDYsIDgsIDEw LCAxMik7CisgICAgfQorICAgIGlmICh3aWR0aCA+IDQwOTYgfHwgaGVpZ2h0ID4gNDA5NikKKyAg ICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qKgorICogc2tpcCBhIEpw ZWcgWEwgQml0RGVwdGggSGVhZGVyLiBUaGVzZSBjYW5ub3QgYmUgaW52YWxpZC4KKyAqLworc3Rh dGljIHZvaWQganBlZ3hsX3NraXBfYml0X2RlcHRoKEdldEJpdENvbnRleHQgKmdiKQoreworICAg IGlmIChqeGxfYml0cygxKSkgeworICAgICAgICAvKiBmbG9hdCBzYW1wbGVzICovCisgICAgICAg IGp4bF91MzIoMzIsIDE2LCAyNCwgMSwgMCwgMCwgMCwgNik7IC8qIG1hbnRpc3NhICovCisgICAg ICAgIGp4bF9iaXRzX3NraXAoNCk7IC8qIGV4cG9uZW50ICovCisgICAgfSBlbHNlIHsKKyAgICAg ICAgLyogaW50ZWdlciBzYW1wbGVzICovCisgICAgICAgIGp4bF91MzIoOCwgMTAsIDEyLCAxLCAw LCAwLCAwLCA2KTsKKyAgICB9Cit9CisKKy8qKgorICogdmFsaWRhdGUgYSBKcGVnIFhMIFByZXZp ZXcgSGVhZGVyCisgKiBAcmV0dXJuID49IDAgdXBvbiB2YWxpZCwgPCAwIHVwb24gaW52YWxpZAor ICovCitzdGF0aWMgaW50IGpwZWd4bF9yZWFkX2V4dHJhX2NoYW5uZWxfaW5mbyhHZXRCaXRDb250 ZXh0ICpnYikKK3sKKyAgICBpbnQgYWxsX2RlZmF1bHQgPSBqeGxfYml0cygxKTsKKyAgICB1aW50 MzJfdCB0eXBlLCBuYW1lX2xlbiA9IDA7CisKKyAgICBpZiAoIWFsbF9kZWZhdWx0KSB7CisgICAg ICAgIHR5cGUgPSBqeGxfZW51bSgpOworICAgICAgICBpZiAodHlwZSA+IDYzKQorICAgICAgICAg ICAgcmV0dXJuIC0xOyAvKiBlbnVtIHR5cGVzIGNhbm5vdCBiZSA2NCsgKi8KKyAgICAgICAgaWYg KHR5cGUgPT0gRkZfSlBFR1hMX0NUX0JMQUNLKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAg ICAgICBqcGVneGxfc2tpcF9iaXRfZGVwdGgoZ2IpOworICAgICAgICBqeGxfdTMyKDAsIDMsIDQs IDEsIDAsIDAsIDAsIDMpOyAvKiBkaW0tc2hpZnQgKi8KKyAgICAgICAgLyogbWF4IG9mIG5hbWVf bGVuIGlzIDEwNzEgPSA0OCArIDJeMTAgLSAxICovCisgICAgICAgIG5hbWVfbGVuID0ganhsX3Uz MigwLCAwLCAxNiwgNDgsIDAsIDQsIDUsIDEwKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0eXBl ID0gRkZfSlBFR1hMX0NUX0FMUEhBOworICAgIH0KKworICAgIC8qIHNraXAgb3ZlciB0aGUgbmFt ZSAqLworICAgIGp4bF9iaXRzX3NraXAoOCAqIG5hbWVfbGVuKTsKKworICAgIGlmICghYWxsX2Rl ZmF1bHQgJiYgdHlwZSA9PSBGRl9KUEVHWExfQ1RfQUxQSEEpCisgICAgICAgIGp4bF9iaXRzX3Nr aXAoMSk7CisKKyAgICBpZiAodHlwZSA9PSBGRl9KUEVHWExfQ1RfU1BPVF9DT0xPUikKKyAgICAg ICAganhsX2JpdHNfc2tpcCgxNiAqIDQpOworCisgICAgaWYgKHR5cGUgPT0gRkZfSlBFR1hMX0NU X0NGQSkKKyAgICAgICAganhsX3UzMigxLCAwLCAzLCAxOSwgMCwgMiwgNCwgOCk7CisKKyAgICBy ZXR1cm4gMDsKK30KKworLyogdmVyaWZ5IHRoYXQgYSBjb2Rlc3RyZWFtIGhlYWRlciBpcyB2YWxp ZCAqLworaW50IGZmX2pwZWd4bF92ZXJpZnlfY29kZXN0cmVhbV9oZWFkZXIoY29uc3QgdWludDhf dCAqYnVmLCBpbnQgYnVmbGVuKQoreworICAgIEdldEJpdENvbnRleHQgZ2JpLCAqZ2IgPSAmZ2Jp OworICAgIGludCBhbGxfZGVmYXVsdCwgZXh0cmFfZmllbGRzID0gMDsKKyAgICBpbnQgeHliX2Vu Y29kZWQgPSAxLCBoYXZlX2ljY19wcm9maWxlID0gMDsKKyAgICB1aW50MzJfdCBudW1fZXh0cmFf Y2hhbm5lbHM7CisgICAgdWludDY0X3QgZXh0ZW5zaW9uczsKKworICAgIGluaXRfZ2V0X2JpdHM4 KGdiLCBidWYsIGJ1Zmxlbik7CisKKyAgICBpZiAoanhsX2JpdHMoMTYpICE9IEZGX0pQRUdYTF9D T0RFU1RSRUFNX1NJR05BVFVSRV9MRSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKGpw ZWd4bF9yZWFkX3NpemVfaGVhZGVyKGdiKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAg IGFsbF9kZWZhdWx0ID0ganhsX2JpdHMoMSk7CisgICAgaWYgKCFhbGxfZGVmYXVsdCkKKyAgICAg ICAgZXh0cmFfZmllbGRzID0ganhsX2JpdHMoMSk7CisKKyAgICBpZiAoZXh0cmFfZmllbGRzKSB7 CisgICAgICAgIGp4bF9iaXRzX3NraXAoMyk7IC8qIG9yaWVudGF0aW9uICovCisKKyAgICAgICAg LyoKKyAgICAgICAgICogaW50cmluc3RpYyBzaXplCisgICAgICAgICAqIGFueSBzaXplIGhlYWRl ciBoZXJlIGlzIHZhbGlkLCBidXQgYXMgaXQKKyAgICAgICAgICogaXMgdmFyaWFibGUgbGVuZ3Ro IHdlIGhhdmUgdG8gcmVhZCBpdAorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGp4bF9iaXRzKDEp KQorICAgICAgICAgICAganBlZ3hsX3JlYWRfc2l6ZV9oZWFkZXIoZ2IpOworCisgICAgICAgIC8q IHByZXZpZXcgaGVhZGVyICovCisgICAgICAgIGlmIChqeGxfYml0cygxKSkgeworICAgICAgICAg ICAgaWYgKGpwZWd4bF9yZWFkX3ByZXZpZXdfaGVhZGVyKGdiKSA8IDApCisgICAgICAgICAgICAg ICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgLyogYW5pbWF0aW9uIGhlYWRlciAq LworICAgICAgICBpZiAoanhsX2JpdHMoMSkpIHsKKyAgICAgICAgICAgIGp4bF91MzIoMTAwLCAx MDAwLCAxLCAxLCAwLCAwLCAxMCwgMzApOworICAgICAgICAgICAganhsX3UzMigxLCAxMDAxLCAx LCAxLCAwLCAwLCA4LCAxMCk7CisgICAgICAgICAgICBqeGxfdTMyKDAsIDAsIDAsIDAsIDAsIDMs IDE2LCAzMik7CisgICAgICAgICAgICBqeGxfYml0c19za2lwKDEpOworICAgICAgICB9CisgICAg fQorCisgICAgaWYgKCFhbGxfZGVmYXVsdCkgeworICAgICAgICBqcGVneGxfc2tpcF9iaXRfZGVw dGgoZ2IpOworCisgICAgICAgIC8qIG1vZHVsYXJfMTZiaXRfYnVmZmVycyBtdXN0IGVxdWFsIDEg Ki8KKyAgICAgICAgaWYgKCFqeGxfYml0cygxKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKwor ICAgICAgICBudW1fZXh0cmFfY2hhbm5lbHMgPSBqeGxfdTMyKDAsIDEsIDIsIDEsIDAsIDAsIDQs IDEyKTsKKyAgICAgICAgaWYgKG51bV9leHRyYV9jaGFubmVscyA+IDQpCisgICAgICAgICAgICBy ZXR1cm4gLTE7CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1fZXh0cmFfY2hh bm5lbHM7IGkrKykgeworICAgICAgICAgICAgaWYgKGpwZWd4bF9yZWFkX2V4dHJhX2NoYW5uZWxf aW5mbyhnYikgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisg ICAgICAgIHh5Yl9lbmNvZGVkID0ganhsX2JpdHMoMSk7CisKKyAgICAgICAgLyogY29sb3IgZW5j b2RpbmcgYnVuZGxlICovCisgICAgICAgIGlmICghanhsX2JpdHMoMSkpIHsKKyAgICAgICAgICAg IHVpbnQzMl90IGNvbG9yX3NwYWNlOworICAgICAgICAgICAgaGF2ZV9pY2NfcHJvZmlsZSA9IGp4 bF9iaXRzKDEpOworICAgICAgICAgICAgY29sb3Jfc3BhY2UgPSBqeGxfZW51bSgpOworICAgICAg ICAgICAgaWYgKGNvbG9yX3NwYWNlID4gNjMpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwor CisgICAgICAgICAgICBpZiAoIWhhdmVfaWNjX3Byb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBp ZiAoY29sb3Jfc3BhY2UgIT0gRkZfSlBFR1hMX0NTX1hZQikgeworICAgICAgICAgICAgICAgICAg ICB1aW50MzJfdCB3aGl0ZV9wb2ludCA9IGp4bF9lbnVtKCk7CisgICAgICAgICAgICAgICAgICAg IGlmICh3aGl0ZV9wb2ludCA+IDYzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0x OworICAgICAgICAgICAgICAgICAgICBpZiAod2hpdGVfcG9pbnQgPT0gRkZfSlBFR1hMX1dQX0NV U1RPTSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogdXggYW5kIHV5IHZhbHVlcyAqLwor ICAgICAgICAgICAgICAgICAgICAgICAganhsX3UzMigwLCA1MjQyODgsIDEwNDg1NzYsIDIwOTcx NTIsIDE5LCAxOSwgMjAsIDIxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGp4bF91MzIoMCwg NTI0Mjg4LCAxMDQ4NTc2LCAyMDk3MTUyLCAxOSwgMTksIDIwLCAyMSk7CisgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbG9yX3NwYWNlICE9IEZGX0pQRUdY TF9DU19HUkFZKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmltYXJpZXMgKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHByaW1hcmllcyA9IGp4bF9lbnVtKCk7Cisg ICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJpbWFyaWVzID4gNjMpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBy aW1hcmllcyA9PSBGRl9KUEVHWExfUFJfQ1VTVE9NKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogdXgvdXkgdmFsdWVzIGZvciByLGcsYiAqLworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBqeGxfdTMyKDAsIDUyNDI4OCwgMTA0ODU3NiwgMjA5NzE1MiwgMTksIDE5LCAy MCwgMjEpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogdHJhbnNmZXIgY2hhcmFj dGVyaXN0aWNzICovCisgICAgICAgICAgICAgICAgaWYgKGp4bF9iaXRzKDEpKSB7CisgICAgICAg ICAgICAgICAgICAgIC8qIGdhbW1hICovCisgICAgICAgICAgICAgICAgICAgIGp4bF9iaXRzX3Nr aXAoMjQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8q IHRyYW5zZmVyIGZ1bmN0aW9uICovCisgICAgICAgICAgICAgICAgICAgIGlmIChqeGxfZW51bSgp ID4gNjMpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAg ICAgfQorCisgICAgICAgICAgICAgICAgLyogcmVuZGVyaW5nIGludGVudCAqLworICAgICAgICAg ICAgICAgIGlmIChqeGxfZW51bSgpID4gNjMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAt MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIHRvbmUgbWFwcGluZyBi dW5kbGUgKi8KKyAgICAgICAgaWYgKGV4dHJhX2ZpZWxkcyAmJiAhanhsX2JpdHMoMSkpCisgICAg ICAgICAgICBqeGxfYml0c19za2lwKDE2ICsgMTYgKyAxICsgMTYpOworCisgICAgICAgIGV4dGVu c2lvbnMgPSBqeGxfdTY0KCk7CisgICAgICAgIGlmIChleHRlbnNpb25zKSB7CisgICAgICAgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IDY0OyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoZXh0 ZW5zaW9ucyAmIChVSU5UNjRfQygxKSA8PCBpKSkKKyAgICAgICAgICAgICAgICAgICAganhsX3U2 NCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogZGVmYXVsdCB0 cmFuc2Zvcm0gKi8KKyAgICBpZiAoIWp4bF9iaXRzKDEpKSB7CisgICAgICAgIC8qIG9wc2luIGlu dmVyc2UgbWF0cml4ICovCisgICAgICAgIGlmICh4eWJfZW5jb2RlZCAmJiAhanhsX2JpdHMoMSkp CisgICAgICAgICAgICBqeGxfYml0c19za2lwKDE2ICogMTYpOworICAgICAgICAvKiBjd19tYXNr IGFuZCBkZWZhdWx0IHdlaWdodHMgKi8KKyAgICAgICAgaWYgKGp4bF9iaXRzKDEpKQorICAgICAg ICAgICAganhsX2JpdHNfc2tpcCgxNiAqIDE1KTsKKyAgICAgICAgaWYgKGp4bF9iaXRzKDEpKQor ICAgICAgICAgICAganhsX2JpdHNfc2tpcCgxNiAqIDU1KTsKKyAgICAgICAgaWYgKGp4bF9iaXRz KDEpKQorICAgICAgICAgICAganhsX2JpdHNfc2tpcCgxNiAqIDIxMCk7CisgICAgfQorCisgICAg aWYgKCFoYXZlX2ljY19wcm9maWxlKSB7CisgICAgICAgIGludCBiaXRzX3JlbWFpbmluZyA9IDcg LSAoZ2ItPmluZGV4IC0gMSkgJSA4OworICAgICAgICBpZiAoYml0c19yZW1haW5pbmcgJiYganhs X2JpdHMoYml0c19yZW1haW5pbmcpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKwor ICAgIGlmIChnYi0+aW5kZXggPiBnYi0+c2l6ZV9pbl9iaXRzKQorICAgICAgICByZXR1cm4gLTE7 CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2pwZWd4bF9wcm9i ZS5oIGIvbGliYXZmb3JtYXQvanBlZ3hsX3Byb2JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uMjk2MGU4MWUxMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Zm9ybWF0 L2pwZWd4bF9wcm9iZS5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBKcGVnIFhMIGhlYWRlciB2 ZXJpZmljYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAyMiBMZW8gSXplbiA8bGVvLml6ZW5AZ21h aWwuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1w ZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg KiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaWZuZGVm IEFWRk9STUFUX0pQRUdYTF9QUk9CRV9ICisjZGVmaW5lIEFWRk9STUFUX0pQRUdYTF9QUk9CRV9I CisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2RlZmluZSBGRl9KUEVHWExfQ09ERVNUUkVBTV9T SUdOQVRVUkVfTEUgMHgwYWZmCisjZGVmaW5lIEZGX0pQRUdYTF9DT05UQUlORVJfU0lHTkFUVVJF X0xFIDB4MjA0YzU4NGEwYzAwMDAwMAorCitpbnQgZmZfanBlZ3hsX3ZlcmlmeV9jb2Rlc3RyZWFt X2hlYWRlcihjb25zdCB1aW50OF90ICpidWYsIGludCBidWZsZW4pOworCisjZW5kaWYgLyogQVZG T1JNQVRfSlBFR1hMX1BST0JFX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L21vdi5jIGIv bGliYXZmb3JtYXQvbW92LmMKaW5kZXggNmM4NDdkZTE2NC4uYzRiODg3M2IwYSAxMDA2NDQKLS0t IGEvbGliYXZmb3JtYXQvbW92LmMKKysrIGIvbGliYXZmb3JtYXQvbW92LmMKQEAgLTc2OTcsNiAr NzY5Nyw3IEBAIHN0YXRpYyBpbnQgbW92X3Byb2JlKGNvbnN0IEFWUHJvYmVEYXRhICpwKQogICAg ICAgICAgICAgaWYgKHRhZyA9PSBNS1RBRygnZicsJ3QnLCd5JywncCcpICYmCiAgICAgICAgICAg ICAgICAgICAgICAgICggICBBVl9STDMyKHAtPmJ1ZiArIG9mZnNldCArIDgpID09IE1LVEFHKCdq JywncCcsJzInLCcgJykKICAgICAgICAgICAgICAgICAgICAgICAgIHx8IEFWX1JMMzIocC0+YnVm ICsgb2Zmc2V0ICsgOCkgPT0gTUtUQUcoJ2onLCdwJywneCcsJyAnKQorICAgICAgICAgICAgICAg ICAgICAgICAgfHwgQVZfUkwzMihwLT5idWYgKyBvZmZzZXQgKyA4KSA9PSBNS1RBRygnaicsJ3gn LCdsJywnICcpCiAgICAgICAgICAgICAgICAgICAgICkpIHsKICAgICAgICAgICAgICAgICBzY29y ZSA9IEZGTUFYKHNjb3JlLCA1KTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0tIAoyLjM1LjEKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZl bCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3Jn L21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGlu ayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1 YmplY3QgInVuc3Vic2NyaWJlIi4K