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 33006411AE for ; Sun, 17 Apr 2022 13:23:24 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 043C768B2F6; Sun, 17 Apr 2022 16:22:57 +0300 (EEST) Received: from mail-qk1-f180.google.com (mail-qk1-f180.google.com [209.85.222.180]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C1A3C68B2BA for ; Sun, 17 Apr 2022 16:22:49 +0300 (EEST) Received: by mail-qk1-f180.google.com with SMTP id b189so9598326qkf.11 for ; Sun, 17 Apr 2022 06:22:49 -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=ZtssLozzBSsgzi+EjdzMTBykKG6A8Hgq97Nu8nmKCn0=; b=ebmYh5dJswaleHO2jEj6mfMYgt9sWClRMSAbReoAqw7z+3rTg7os02CC5CpKM3fgcg Z130yrmJsj5HPUMo3WDz7bp7K3k1ZZprLAe4mR8nUwK4bZeTqVOOJLSmruY/BBGcAIWn KBMbeo1d9qr+QIcm2UM3ortpuEMHsSsqAoIbmbTG6ZL0E6JutbaUGc5C3kAiYjzLrbrk nhT7XxLuSP+FjL2NfLL+xT3Y2BSo/sMUprWZihnQ0qj8+f57DxOxf8HV2CaB24Dvab2F 2prR6mXdheQ3Sqnqesz66u8CLnVGH/vv5kl2Wh+iAW/LLIXioVr/jtEtN4gE2lqutIqd 2XZg== 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=ZtssLozzBSsgzi+EjdzMTBykKG6A8Hgq97Nu8nmKCn0=; b=SMrab7XXcyhGxWRzz31mcwVaFfwbyK28wD9Saf/swfRvJR0Hm0K7USBdM4GNCs6bBh eI2hrMbJ8MRFTkpQce+GVPId0RsapHkYaIaPwjBPjSzGIJKksBHB1VnF/gx/WozFmjn6 ba88idJ9vvhQ3QBU2p3XDXwO70U9guwdcAYOwLSYe8ROeYPQ1F6lY7cRvNCpEvuUbofR KcYBbOV7hQywu09IyzgPI2mCOSExkgllXmto5UMZCi1n9izU/1i48NSbI2ZQqsZNqkNt XVA70y1RIsZOYqz0yqwHU8J2uy+uj2GiRuJ/jgDOcoXxyzr5DJRowjBFHBOZRNXrTG2P bAUw== X-Gm-Message-State: AOAM533EV6EHgTjf3l5RcCwDkVUMh0LjtumNCbF+MM31lWF3u1ku2hOH 84cUVkRHFtv1683XtKgzdkvR4fPPCLU= X-Google-Smtp-Source: ABdhPJxKfY0Yx6hjYQaDfXfDvlhtUXlOCEQ/1qeo6ZwmfrKRBCA06mjNlJL0orcetdSpH3Ew61Hpjg== X-Received: by 2002:a37:bd4:0:b0:69c:7957:1b57 with SMTP id 203-20020a370bd4000000b0069c79571b57mr3944727qkl.761.1650201767772; Sun, 17 Apr 2022 06:22:47 -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 s195-20020a37a9cc000000b0069ca29ab6f4sm3903381qke.26.2022.04.17.06.22.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 Apr 2022 06:22:47 -0700 (PDT) From: Leo Izen To: ffmpeg-devel@ffmpeg.org Date: Sun, 17 Apr 2022 09:22:34 -0400 Message-Id: <20220417132236.200239-3-leo.izen@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220417132236.200239-1-leo.izen@gmail.com> References: <20220417132236.200239-1-leo.izen@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v15 2/4] avcodec/libjxl: add Jpeg XL decoding via libjxl 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: VGhpcyBjb21taXQgYWRkcyBkZWNvZGluZyBzdXBwb3J0IHRvIGxpYmF2Y29kZWMKZm9yIEpwZWcg WEwgaW1hZ2VzIHZpYSB0aGUgZXh0ZXJuYWwgbGlicmFyeSBsaWJqeGwuCi0tLQogTUFJTlRBSU5F UlMgICAgICAgICAgICAgICB8ICAgMSArCiBjb25maWd1cmUgICAgICAgICAgICAgICAgIHwgICA1 ICsKIGRvYy9nZW5lcmFsX2NvbnRlbnRzLnRleGkgfCAgIDcgKwogbGliYXZjb2RlYy9NYWtlZmls ZSAgICAgICB8ICAgMSArCiBsaWJhdmNvZGVjL2FsbGNvZGVjcy5jICAgIHwgICAxICsKIGxpYmF2 Y29kZWMvbGlianhsLmMgICAgICAgfCAgNzAgKysrKysrKysrKwogbGliYXZjb2RlYy9saWJqeGwu aCAgICAgICB8ICA0OCArKysrKysrCiBsaWJhdmNvZGVjL2xpYmp4bGRlYy5jICAgIHwgMjgwICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDQx MyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy9saWJqeGwuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvbGlianhsLmgKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBsaWJhdmNvZGVjL2xpYmp4bGRlYy5jCgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlO VEFJTkVSUwppbmRleCA4NTlhNTAwNWQ0Li5mYWVhODRlYmYxIDEwMDY0NAotLS0gYS9NQUlOVEFJ TkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMTk0LDYgKzE5NCw3IEBAIENvZGVjczoKICAgbGli Y29kZWMyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICBUb21hcyBIw6RyZGluCiAgIGxpYmRp cmFjKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF2aWQgQ29ucmFkCiAgIGxpYmRhdnMy LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgSHVpd2VuIFJlbgorICBsaWJqeGwqLmMsIGxp Ymp4bC5oICAgICAgICAgICAgICAgICAgIExlbyBJemVuCiAgIGxpYmdzbS5jICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTWljaGVsIEJhcmRpYXV4CiAgIGxpYmt2YXphYXIuYyAgICAgICAg ICAgICAgICAgICAgICAgICAgQXJ0dHUgWWzDpC1PdXRpbmVuCiAgIGxpYm9wZW5oMjY0ZW5jLmMg ICAgICAgICAgICAgICAgICAgICAgTWFydGluIFN0b3Jzam8sIExpbmppZSBGdQpkaWZmIC0tZ2l0 IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4IDM1OGE2MTQ4NTQuLmRmNGY2ZDI0MmQgMTAw NzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTI0MCw2ICsyNDAsNyBAQCBF eHRlcm5hbCBsaWJyYXJ5IHN1cHBvcnQ6CiAgIC0tZW5hYmxlLWxpYmllYzYxODgzICAgICBlbmFi bGUgaWVjNjE4ODMgdmlhIGxpYmllYzYxODgzIFtub10KICAgLS1lbmFibGUtbGliaWxiYyAgICAg ICAgIGVuYWJsZSBpTEJDIGRlL2VuY29kaW5nIHZpYSBsaWJpbGJjIFtub10KICAgLS1lbmFibGUt bGliamFjayAgICAgICAgIGVuYWJsZSBKQUNLIGF1ZGlvIHNvdW5kIHNlcnZlciBbbm9dCisgIC0t ZW5hYmxlLWxpYmp4bCAgICAgICAgICBlbmFibGUgSlBFRyBYTCBkZWNvZGluZyB2aWEgbGlianhs IFtub10KICAgLS1lbmFibGUtbGlia2x2YW5jICAgICAgIGVuYWJsZSBLZXJuZWwgTGFicyBWQU5D IHByb2Nlc3NpbmcgW25vXQogICAtLWVuYWJsZS1saWJrdmF6YWFyICAgICAgZW5hYmxlIEhFVkMg ZW5jb2RpbmcgdmlhIGxpYmt2YXphYXIgW25vXQogICAtLWVuYWJsZS1saWJsZW5zZnVuICAgICAg ZW5hYmxlIGxlbnNmdW4gbGVucyBjb3JyZWN0aW9uIFtub10KQEAgLTE4MzMsNiArMTgzNCw3IEBA IEVYVEVSTkFMX0xJQlJBUllfTElTVD0iCiAgICAgbGliaWVjNjE4ODMKICAgICBsaWJpbGJjCiAg ICAgbGliamFjaworICAgIGxpYmp4bAogICAgIGxpYmtsdmFuYwogICAgIGxpYmt2YXphYXIKICAg ICBsaWJtb2RwbHVnCkBAIC0zMzMxLDYgKzMzMzMsNyBAQCBsaWJnc21fbXNfZGVjb2Rlcl9kZXBz PSJsaWJnc20iCiBsaWJnc21fbXNfZW5jb2Rlcl9kZXBzPSJsaWJnc20iCiBsaWJpbGJjX2RlY29k ZXJfZGVwcz0ibGliaWxiYyIKIGxpYmlsYmNfZW5jb2Rlcl9kZXBzPSJsaWJpbGJjIgorbGlianhs X2RlY29kZXJfZGVwcz0ibGlianhsIGxpYmp4bF90aHJlYWRzIgogbGlia3ZhemFhcl9lbmNvZGVy X2RlcHM9ImxpYmt2YXphYXIiCiBsaWJtb2RwbHVnX2RlbXV4ZXJfZGVwcz0ibGlibW9kcGx1ZyIK IGxpYm1wM2xhbWVfZW5jb2Rlcl9kZXBzPSJsaWJtcDNsYW1lIgpAQCAtNjU0NSw2ICs2NTQ4LDgg QEAgZW5hYmxlZCBsaWJnc20gICAgICAgICAgICAmJiB7IGZvciBnc21faGRyIGluICJnc20uaCIg ImdzbS9nc20uaCI7IGRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNr X2xpYiBsaWJnc20gIiR7Z3NtX2hkcn0iIGdzbV9jcmVhdGUgLWxnc20gJiYgYnJlYWs7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSB8fCBkaWUgIkVSUk9SOiBsaWJnc20gbm90 IGZvdW5kIjsgfQogZW5hYmxlZCBsaWJpbGJjICAgICAgICAgICAmJiByZXF1aXJlIGxpYmlsYmMg aWxiYy5oIFdlYlJ0Y0lsYmNmaXhfSW5pdERlY29kZSAtbGlsYmMgJHB0aHJlYWRzX2V4dHJhbGli cworZW5hYmxlZCBsaWJqeGwgICAgICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGlianhs ICJsaWJqeGwgPj0gMC43LjAiIGp4bC9kZWNvZGUuaCBKeGxEZWNvZGVyVmVyc2lvbiAmJgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlX3BrZ19jb25maWcgbGlianhsX3RocmVh ZHMgImxpYmp4bF90aHJlYWRzID49IDAuNy4wIiBqeGwvdGhyZWFkX3BhcmFsbGVsX3J1bm5lci5o IEp4bFRocmVhZFBhcmFsbGVsUnVubmVyCiBlbmFibGVkIGxpYmtsdmFuYyAgICAgICAgICYmIHJl cXVpcmUgbGlia2x2YW5jIGxpYmtsdmFuYy92YW5jLmgga2x2YW5jX2NvbnRleHRfY3JlYXRlIC1s a2x2YW5jCiBlbmFibGVkIGxpYmt2YXphYXIgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBs aWJrdmF6YWFyICJrdmF6YWFyID49IDAuOC4xIiBrdmF6YWFyLmgga3Z6X2FwaV9nZXQKIGVuYWJs ZWQgbGlibGVuc2Z1biAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYmxlbnNmdW4gbGVu c2Z1biBsZW5zZnVuLmggbGZfZGJfbmV3CmRpZmYgLS1naXQgYS9kb2MvZ2VuZXJhbF9jb250ZW50 cy50ZXhpIGIvZG9jL2dlbmVyYWxfY29udGVudHMudGV4aQppbmRleCAyMzg1NjhmMmJiLi45M2E5 MGE1ZTUyIDEwMDY0NAotLS0gYS9kb2MvZ2VuZXJhbF9jb250ZW50cy50ZXhpCisrKyBiL2RvYy9n ZW5lcmFsX2NvbnRlbnRzLnRleGkKQEAgLTE3MSw2ICsxNzEsMTMgQEAgR28gdG8gQHVybHtodHRw czovL2dpdGh1Yi5jb20vVGltb3RoeUd1L2xpYmlsYmN9IGFuZCBmb2xsb3cgdGhlIGluc3RydWN0 aW9ucyBmb3IKIGluc3RhbGxpbmcgdGhlIGxpYnJhcnkuIFRoZW4gcGFzcyBAY29kZXstLWVuYWJs ZS1saWJpbGJjfSB0byBjb25maWd1cmUgdG8KIGVuYWJsZSBpdC4KIAorQHNlY3Rpb24gbGlianhs CisKK0pQRUcgWEwgaXMgYW4gaW1hZ2UgZm9ybWF0IGludGVuZGVkIHRvIGZ1bGx5IHJlcGxhY2Ug bGVnYWN5IEpQRUcgZm9yIGFuIGV4dGVuZGVkCitwZXJpb2Qgb2YgbGlmZS4gU2VlIEB1cmx7aHR0 cHM6Ly9qcGVneGwuaW5mby99IGZvciBtb3JlIGluZm9ybWF0aW9uLCBhbmQgc2VlCitAdXJse2h0 dHBzOi8vZ2l0aHViLmNvbS9saWJqeGwvbGlianhsfSBmb3IgdGhlIGxpYnJhcnkgc291cmNlLiBZ b3UgY2FuIHBhc3MKK0Bjb2Rley0tZW5hYmxlLWxpYmp4bH0gdG8gY29uZmlndXJlIGluIG9yZGVy IGVuYWJsZSB0aGUgbGlianhsIHdyYXBwZXIuCisKIEBzZWN0aW9uIGxpYnZweAogCiBGRm1wZWcg Y2FuIG1ha2UgdXNlIG9mIHRoZSBsaWJ2cHggbGlicmFyeSBmb3IgVlA4L1ZQOSBkZWNvZGluZyBh bmQgZW5jb2RpbmcuCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL01ha2VmaWxlIGIvbGliYXZjb2Rl Yy9NYWtlZmlsZQppbmRleCA0YjEyMjI4MDcwLi5lYmE5ODM1YzUyIDEwMDY0NAotLS0gYS9saWJh dmNvZGVjL01ha2VmaWxlCisrKyBiL2xpYmF2Y29kZWMvTWFrZWZpbGUKQEAgLTEwNjIsNiArMTA2 Miw3IEBAIE9CSlMtJChDT05GSUdfTElCR1NNX01TX0RFQ09ERVIpICAgICAgICAgICs9IGxpYmdz bWRlYy5vCiBPQkpTLSQoQ09ORklHX0xJQkdTTV9NU19FTkNPREVSKSAgICAgICAgICArPSBsaWJn c21lbmMubwogT0JKUy0kKENPTkZJR19MSUJJTEJDX0RFQ09ERVIpICAgICAgICAgICAgKz0gbGli aWxiYy5vCiBPQkpTLSQoQ09ORklHX0xJQklMQkNfRU5DT0RFUikgICAgICAgICAgICArPSBsaWJp bGJjLm8KK09CSlMtJChDT05GSUdfTElCSlhMX0RFQ09ERVIpICAgICAgICAgICAgICs9IGxpYmp4 bGRlYy5vIGxpYmp4bC5vCiBPQkpTLSQoQ09ORklHX0xJQktWQVpBQVJfRU5DT0RFUikgICAgICAg ICArPSBsaWJrdmF6YWFyLm8KIE9CSlMtJChDT05GSUdfTElCTVAzTEFNRV9FTkNPREVSKSAgICAg ICAgICs9IGxpYm1wM2xhbWUubwogT0JKUy0kKENPTkZJR19MSUJPUEVOQ09SRV9BTVJOQl9ERUNP REVSKSAgKz0gbGlib3BlbmNvcmUtYW1yLm8KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvYWxsY29k ZWNzLmMgYi9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCmluZGV4IDU4NTkxOGRhOTMuLjA3ZjViYWZk MjcgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMKKysrIGIvbGliYXZjb2RlYy9h bGxjb2RlY3MuYwpAQCAtNzUxLDYgKzc1MSw3IEBAIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xp YmdzbV9tc19lbmNvZGVyOwogZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGliZ3NtX21zX2RlY29k ZXI7CiBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJpbGJjX2VuY29kZXI7CiBleHRlcm4gY29u c3QgRkZDb2RlYyBmZl9saWJpbGJjX2RlY29kZXI7CitleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9s aWJqeGxfZGVjb2RlcjsKIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYm1wM2xhbWVfZW5jb2Rl cjsKIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYm9wZW5jb3JlX2Ftcm5iX2VuY29kZXI7CiBl eHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJvcGVuY29yZV9hbXJuYl9kZWNvZGVyOwpkaWZmIC0t Z2l0IGEvbGliYXZjb2RlYy9saWJqeGwuYyBiL2xpYmF2Y29kZWMvbGlianhsLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMjA0ZDkxZDhhOAotLS0gL2Rldi9udWxsCisr KyBiL2xpYmF2Y29kZWMvbGlianhsLmMKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIEpQRUcgWEwg ZGUvZW5jb2RpbmcgdmlhIGxpYmp4bCwgY29tbW9uIHN1cHBvcnQgaW1wbGVtZW50YXRpb24KKyAq IENvcHlyaWdodCAoYykgMjAyMSBMZW8gSXplbiA8bGVvLml6ZW5AZ21haWwuY29tPgorICoKKyAq IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp Y2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBKUEVH IFhMIHZpYSBsaWJqeGwgY29tbW9uIHN1cHBvcnQgaW1wbGVtZW50YXRpb24KKyAqLworCisjaW5j bHVkZSAibGliYXZ1dGlsL2NwdS5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKKworI2lu Y2x1ZGUgPGp4bC9tZW1vcnlfbWFuYWdlci5oPgorI2luY2x1ZGUgImxpYmp4bC5oIgorCitzaXpl X3QgZmZfbGlianhsX2dldF90aHJlYWRjb3VudChpbnQgdGhyZWFkcykKK3sKKyAgICBpZiAodGhy ZWFkcyA8PSAwKQorICAgICAgICByZXR1cm4gYXZfY3B1X2NvdW50KCk7CisgICAgaWYgKHRocmVh ZHMgPT0gMSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHRocmVhZHM7Cit9CisKKy8q KgorICogV3JhcHBlciBhcm91bmQgYXZfbWFsbG9jIHVzZWQgYXMgYSBqcGVneGxfYWxsb2NfZnVu Yy4KKyAqCisgKiBAcGFyYW0gIG9wYXF1ZSBvcGFxdWUgcG9pbnRlciBmb3IganBlZ3hsX2FsbG9j X2Z1bmMsIGFsd2F5cyBpZ25vcmVkCisgKiBAcGFyYW0gIHNpemUgU2l6ZSBpbiBieXRlcyBmb3Ig dGhlIG1lbW9yeSBibG9jayB0byBiZSBhbGxvY2F0ZWQKKyAqIEByZXR1cm4gUG9pbnRlciB0byB0 aGUgYWxsb2NhdGVkIGJsb2NrLCBvciBgTlVMTGAgaWYgaXQgY2Fubm90IGJlIGFsbG9jYXRlZAor ICovCitzdGF0aWMgdm9pZCAqbGlianhsX2F2X21hbGxvYyh2b2lkICpvcGFxdWUsIHNpemVfdCBz aXplKQoreworICAgIHJldHVybiBhdl9tYWxsb2Moc2l6ZSk7Cit9CisKKy8qKgorICogV3JhcHBl ciBhcm91bmQgYXZfZnJlZSB1c2VkIGFzIGEganBlZ3hsX2ZyZWVfZnVuYy4KKyAqCisgKiBAcGFy YW0gb3BhcXVlICBvcGFxdWUgcG9pbnRlciBmb3IganBlZ3hsX2ZyZWVfZnVuYywgYWx3YXlzIGln bm9yZWQKKyAqIEBwYXJhbSBhZGRyZXNzIFBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBibG9jaywg dG8gZnJlZS4gYE5VTExgIHBlcm1pdHRlZCBhcyBhIG5vLW9wLgorICovCitzdGF0aWMgdm9pZCBs aWJqeGxfYXZfZnJlZSh2b2lkICpvcGFxdWUsIHZvaWQgKmFkZHJlc3MpCit7CisgICAgYXZfZnJl ZShhZGRyZXNzKTsKK30KKwordm9pZCBmZl9saWJqeGxfaW5pdF9tZW1vcnlfbWFuYWdlcihKeGxN ZW1vcnlNYW5hZ2VyICptYW5hZ2VyKQoreworICAgIG1hbmFnZXItPm9wYXF1ZSA9IE5VTEw7Cisg ICAgbWFuYWdlci0+YWxsb2MgPSAmbGlianhsX2F2X21hbGxvYzsKKyAgICBtYW5hZ2VyLT5mcmVl ID0gJmxpYmp4bF9hdl9mcmVlOworfQpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9saWJqeGwuaCBi L2xpYmF2Y29kZWMvbGlianhsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MC4uNTM4N2M0MzhmZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMvbGlianhsLmgKQEAg LTAsMCArMSw0OCBAQAorLyoKKyAqIEpQRUcgWEwgZGUvZW5jb2RpbmcgdmlhIGxpYmp4bCwgY29t bW9uIHN1cHBvcnQgaGVhZGVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMjEgTGVvIEl6ZW4gPGxlby5p emVuQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgor ICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl IEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKwor LyoqCisgKiBAZmlsZQorICogSlBFRyBYTCB2aWEgbGlianhsIGNvbW1vbiBzdXBwb3J0IGhlYWRl cgorICovCisKKyNpZm5kZWYgQVZDT0RFQ19MSUJKWExfSAorI2RlZmluZSBBVkNPREVDX0xJQkpY TF9ICisKKyNpbmNsdWRlIDxqeGwvbWVtb3J5X21hbmFnZXIuaD4KKworLyoqCisgKiBUcmFuc2Zv cm0gdGhyZWFkY291bnQgaW4gZmZtcGVnIHRvIG9uZSB1c2VkIGJ5IGxpYmp4bC4KKyAqCisgKiBA cGFyYW0gIHRocmVhZHMgZmZtcGVnJ3MgdGhyZWFkcyBBVk9wdGlvbgorICogQHJldHVybiAgICAg ICAgIHRocmVhZCBjb3VudCBmb3IgbGlianhsJ3MgcGFyYWxsZWwgcnVubmVyCisgKi8KK3NpemVf dCBmZl9saWJqeGxfZ2V0X3RocmVhZGNvdW50KGludCB0aHJlYWRzKTsKKworLyoqCisgKiBJbml0 aWFsaXplIGFuZCBwb3B1bGF0ZSBhIEp4bE1lbW9yeU1hbmFnZXIKKyAqIHdpdGggYXZfbWFsbG9j KCkgYW5kIGF2X2ZyZWUoKSBzbyBsaWJqeGwgd2lsbCB1c2UgdGhlc2UKKyAqIGZ1bmN0aW9ucy4K KyAqIEBwYXJhbSBtYW5hZ2VyIGEgcG9pbnRlciB0byBhIEp4bE1lbW9yeU1hbmFnZXIgc3RydWN0 CisgKi8KK3ZvaWQgZmZfbGlianhsX2luaXRfbWVtb3J5X21hbmFnZXIoSnhsTWVtb3J5TWFuYWdl ciAqbWFuYWdlcik7CisKKyNlbmRpZiAvKiBBVkNPREVDX0xJQkpYTF9IICovCmRpZmYgLS1naXQg YS9saWJhdmNvZGVjL2xpYmp4bGRlYy5jIGIvbGliYXZjb2RlYy9saWJqeGxkZWMuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5jZDRiY2EzMzQzCi0tLSAvZGV2L251bGwK KysrIGIvbGliYXZjb2RlYy9saWJqeGxkZWMuYwpAQCAtMCwwICsxLDI4MCBAQAorLyoKKyAqIEpQ RUcgWEwgZGVjb2Rpbmcgc3VwcG9ydCB2aWEgbGlianhsCisgKiBDb3B5cmlnaHQgKGMpIDIwMjEg TGVvIEl6ZW4gPGxlby5pemVuQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBv ZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGlj ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1w ZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZt cGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJ bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEz MDEgVVNBCisgKi8KKworLyoqCisgKiBAZmlsZQorICogSlBFRyBYTCBkZWNvZGVyIHVzaW5nIGxp Ymp4bAorICovCisKKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIKKyNpbmNsdWRlICJs aWJhdnV0aWwvYnVmZmVyLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2NvbW1vbi5oIgorI2luY2x1 ZGUgImxpYmF2dXRpbC9lcnJvci5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKKyNpbmNs dWRlICJsaWJhdnV0aWwvcGl4ZGVzYy5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9waXhmbXQuaCIK KyNpbmNsdWRlICJsaWJhdnV0aWwvZnJhbWUuaCIKKworI2luY2x1ZGUgImF2Y29kZWMuaCIKKyNp bmNsdWRlICJjb2RlY19pbnRlcm5hbC5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCisKKyNpbmNs dWRlIDxqeGwvZGVjb2RlLmg+CisjaW5jbHVkZSA8anhsL3RocmVhZF9wYXJhbGxlbF9ydW5uZXIu aD4KKyNpbmNsdWRlICJsaWJqeGwuaCIKKwordHlwZWRlZiBzdHJ1Y3QgTGliSnhsRGVjb2RlQ29u dGV4dCB7CisgICAgdm9pZCAqcnVubmVyOworICAgIEp4bERlY29kZXIgKmRlY29kZXI7CisgICAg SnhsQmFzaWNJbmZvIGJhc2ljX2luZm87CisgICAgSnhsUGl4ZWxGb3JtYXQganhsX3BpeGZtdDsK KyAgICBKeGxEZWNvZGVyU3RhdHVzIGV2ZW50czsKKyAgICBBVkJ1ZmZlclJlZiAqaWNjcDsKK30g TGliSnhsRGVjb2RlQ29udGV4dDsKKworc3RhdGljIGludCBsaWJqeGxfaW5pdF9qeGxfZGVjb2Rl cihBVkNvZGVjQ29udGV4dCAqYXZjdHgpCit7CisgICAgTGliSnhsRGVjb2RlQ29udGV4dCAqY3R4 ID0gYXZjdHgtPnByaXZfZGF0YTsKKworICAgIGN0eC0+ZXZlbnRzID0gSlhMX0RFQ19CQVNJQ19J TkZPIHwgSlhMX0RFQ19GVUxMX0lNQUdFIHwgSlhMX0RFQ19DT0xPUl9FTkNPRElORzsKKyAgICBp ZiAoSnhsRGVjb2RlclN1YnNjcmliZUV2ZW50cyhjdHgtPmRlY29kZXIsIGN0eC0+ZXZlbnRzKSAh PSBKWExfREVDX1NVQ0NFU1MpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1Is ICJFcnJvciBzdWJzY3JpYmluZyB0byBKWEwgZXZlbnRzXG4iKTsKKyAgICAgICAgcmV0dXJuIEFW RVJST1JfRVhURVJOQUw7CisgICAgfQorCisgICAgaWYgKEp4bERlY29kZXJTZXRQYXJhbGxlbFJ1 bm5lcihjdHgtPmRlY29kZXIsIEp4bFRocmVhZFBhcmFsbGVsUnVubmVyLCBjdHgtPnJ1bm5lcikg IT0gSlhMX0RFQ19TVUNDRVNTKSB7CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9S LCAiRmFpbGVkIHRvIHNldCBKeGxUaHJlYWRQYXJhbGxlbFJ1bm5lclxuIik7CisgICAgICAgIHJl dHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgIH0KKworICAgIG1lbXNldCgmY3R4LT5iYXNpY19p bmZvLCAwLCBzaXplb2YoSnhsQmFzaWNJbmZvKSk7CisgICAgbWVtc2V0KCZjdHgtPmp4bF9waXhm bXQsIDAsIHNpemVvZihKeGxQaXhlbEZvcm1hdCkpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBhdl9jb2xkIGludCBsaWJqeGxfZGVjb2RlX2luaXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4 KQoreworICAgIExpYkp4bERlY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cisg ICAgSnhsTWVtb3J5TWFuYWdlciBtYW5hZ2VyOworCisgICAgZmZfbGlianhsX2luaXRfbWVtb3J5 X21hbmFnZXIoJm1hbmFnZXIpOworICAgIGN0eC0+ZGVjb2RlciA9IEp4bERlY29kZXJDcmVhdGUo Jm1hbmFnZXIpOworICAgIGlmICghY3R4LT5kZWNvZGVyKSB7CisgICAgICAgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGNyZWF0ZSBKeGxEZWNvZGVyXG4iKTsKKyAgICAg ICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorCisgICAgY3R4LT5ydW5uZXIgPSBK eGxUaHJlYWRQYXJhbGxlbFJ1bm5lckNyZWF0ZSgmbWFuYWdlciwgZmZfbGlianhsX2dldF90aHJl YWRjb3VudChhdmN0eC0+dGhyZWFkX2NvdW50KSk7CisgICAgaWYgKCFjdHgtPnJ1bm5lcikgewor ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBjcmVhdGUgSnhs VGhyZWFkUGFyYWxsZWxSdW5uZXJcbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5B TDsKKyAgICB9CisKKyAgICByZXR1cm4gbGlianhsX2luaXRfanhsX2RlY29kZXIoYXZjdHgpOwor fQorCitzdGF0aWMgZW51bSBBVlBpeGVsRm9ybWF0IGxpYmp4bF9nZXRfcGl4X2ZtdChBVkNvZGVj Q29udGV4dCAqYXZjdHgsIEp4bEJhc2ljSW5mbyAqYmFzaWNfaW5mbywgSnhsUGl4ZWxGb3JtYXQg KmZvcm1hdCkKK3sKKyAgICBmb3JtYXQtPmVuZGlhbm5lc3MgPSBKWExfTkFUSVZFX0VORElBTjsK KyAgICBmb3JtYXQtPm51bV9jaGFubmVscyA9IGJhc2ljX2luZm8tPm51bV9jb2xvcl9jaGFubmVs cyArIChiYXNpY19pbmZvLT5hbHBoYV9iaXRzID4gMCk7CisgICAgLyogR3JheSAqLworICAgIGlm IChiYXNpY19pbmZvLT5udW1fY29sb3JfY2hhbm5lbHMgPT0gMSkgeworICAgICAgICBpZiAoYmFz aWNfaW5mby0+Yml0c19wZXJfc2FtcGxlIDw9IDgpIHsKKyAgICAgICAgICAgIGZvcm1hdC0+ZGF0 YV90eXBlID0gSlhMX1RZUEVfVUlOVDg7CisgICAgICAgICAgICByZXR1cm4gYmFzaWNfaW5mby0+ YWxwaGFfYml0cyA/IEFWX1BJWF9GTVRfWUE4IDogQVZfUElYX0ZNVF9HUkFZODsKKyAgICAgICAg fQorICAgICAgICBpZiAoYmFzaWNfaW5mby0+ZXhwb25lbnRfYml0c19wZXJfc2FtcGxlIHx8IGJh c2ljX2luZm8tPmJpdHNfcGVyX3NhbXBsZSA+IDE2KSB7CisgICAgICAgICAgICBpZiAoYmFzaWNf aW5mby0+YWxwaGFfYml0cykKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZfUElYX0ZNVF9OT05F OworICAgICAgICAgICAgZm9ybWF0LT5kYXRhX3R5cGUgPSBKWExfVFlQRV9GTE9BVDsKKyAgICAg ICAgICAgIHJldHVybiBBVl9QSVhfRk1UX0dSQVlGMzI7CisgICAgICAgIH0KKyAgICAgICAgZm9y bWF0LT5kYXRhX3R5cGUgPSBKWExfVFlQRV9VSU5UMTY7CisgICAgICAgIHJldHVybiBiYXNpY19p bmZvLT5hbHBoYV9iaXRzID8gQVZfUElYX0ZNVF9ZQTE2IDogQVZfUElYX0ZNVF9HUkFZMTY7Cisg ICAgfQorICAgIC8qIHJnYiBvbmx5ICovCisgICAgLyogbGlianhsIG9ubHkgc3VwcG9ydHMgcGFj a2VkIFJHQiBhbmQgZ3JheSBvdXRwdXQgYXQgdGhlIG1vbWVudCAqLworICAgIGlmIChiYXNpY19p bmZvLT5udW1fY29sb3JfY2hhbm5lbHMgPT0gMykgeworICAgICAgICBpZiAoYmFzaWNfaW5mby0+ Yml0c19wZXJfc2FtcGxlIDw9IDgpIHsKKyAgICAgICAgICAgIGZvcm1hdC0+ZGF0YV90eXBlID0g SlhMX1RZUEVfVUlOVDg7CisgICAgICAgICAgICByZXR1cm4gYmFzaWNfaW5mby0+YWxwaGFfYml0 cyA/IEFWX1BJWF9GTVRfUkdCQSA6IEFWX1BJWF9GTVRfUkdCMjQ7CisgICAgICAgIH0KKyAgICAg ICAgaWYgKGJhc2ljX2luZm8tPmJpdHNfcGVyX3NhbXBsZSA+IDE2KQorICAgICAgICAgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfV0FSTklORywgIkRvd25zYW1wbGluZyBsYXJnZXIgaW50ZWdlciB0 byAxNi1iaXQgdmlhIGxpYmp4bFxuIik7CisgICAgICAgIGlmIChiYXNpY19pbmZvLT5leHBvbmVu dF9iaXRzX3Blcl9zYW1wbGUpCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJO SU5HLCAiRG93bnNhbXBsaW5nIGZsb2F0IHRvIDE2LWJpdCBpbnRlZ2VyIHZpYSBsaWJqeGxcbiIp OworICAgICAgICBmb3JtYXQtPmRhdGFfdHlwZSA9IEpYTF9UWVBFX1VJTlQxNjsKKyAgICAgICAg cmV0dXJuIGJhc2ljX2luZm8tPmFscGhhX2JpdHMgPyBBVl9QSVhfRk1UX1JHQkE2NCA6IEFWX1BJ WF9GTVRfUkdCNDg7CisgICAgfQorCisgICAgcmV0dXJuIEFWX1BJWF9GTVRfTk9ORTsKK30KKwor c3RhdGljIGludCBsaWJqeGxfZGVjb2RlX2ZyYW1lKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZG cmFtZSAqZnJhbWUsIGludCAqZ290X2ZyYW1lLCBBVlBhY2tldCAqYXZwa3QpCit7CisgICAgTGli SnhsRGVjb2RlQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKKyAgICB1aW50OF90ICpi dWYgPSBhdnBrdC0+ZGF0YTsKKyAgICBzaXplX3QgcmVtYWluaW5nID0gYXZwa3QtPnNpemUsIGlj Y3BfbGVuOworICAgIEp4bERlY29kZXJTdGF0dXMganJldDsKKyAgICBpbnQgcmV0OworICAgICpn b3RfZnJhbWUgPSAwOworCisgICAgd2hpbGUgKDEpIHsKKworICAgICAgICBqcmV0ID0gSnhsRGVj b2RlclNldElucHV0KGN0eC0+ZGVjb2RlciwgYnVmLCByZW1haW5pbmcpOworCisgICAgICAgIGlm IChqcmV0ID09IEpYTF9ERUNfRVJST1IpIHsKKyAgICAgICAgICAgIC8qIHRoaXMgc2hvdWxkIG5l dmVyIGhhcHBlbiBoZXJlIHVubGVzcyB0aGVyZSdzIGEgYnVnIGluIGxpYmp4bCAqLworICAgICAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbmtub3duIGxpYmp4bCBkZWNvZGUg ZXJyb3JcbiIpOworICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgICAg IH0KKworICAgICAgICBqcmV0ID0gSnhsRGVjb2RlclByb2Nlc3NJbnB1dChjdHgtPmRlY29kZXIp OworICAgICAgICAvKgorICAgICAgICAgKiBKeGxEZWNvZGVyUmVsZWFzZUlucHV0IHJldHVybnMg dGhlIG51bWJlcgorICAgICAgICAgKiBvZiBieXRlcyByZW1haW5pbmcgdG8gYmUgcmVhZCwgcmF0 aGVyIHRoYW4KKyAgICAgICAgICogdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IGl0IGRpZCByZWFk CisgICAgICAgICAqLworICAgICAgICByZW1haW5pbmcgPSBKeGxEZWNvZGVyUmVsZWFzZUlucHV0 KGN0eC0+ZGVjb2Rlcik7CisgICAgICAgIGJ1ZiA9IGF2cGt0LT5kYXRhICsgYXZwa3QtPnNpemUg LSByZW1haW5pbmc7CisKKyAgICAgICAgc3dpdGNoKGpyZXQpIHsKKyAgICAgICAgY2FzZSBKWExf REVDX0VSUk9SOgorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbmtu b3duIGxpYmp4bCBkZWNvZGUgZXJyb3JcbiIpOworICAgICAgICAgICAgcmV0dXJuIEFWRVJST1Jf SU5WQUxJRERBVEE7CisgICAgICAgIGNhc2UgSlhMX0RFQ19ORUVEX01PUkVfSU5QVVQ6CisgICAg ICAgICAgICBpZiAocmVtYWluaW5nID09IDApIHsKKyAgICAgICAgICAgICAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19FUlJPUiwgIlVuZXhwZWN0ZWQgZW5kIG9mIEpYTCBjb2Rlc3RyZWFtXG4iKTsK KyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiTkVFRF9NT1JFX0lO UFVUIGV2ZW50IGVtaXR0ZWRcbiIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNh c2UgSlhMX0RFQ19CQVNJQ19JTkZPOgorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df REVCVUcsICJCQVNJQ19JTkZPIGV2ZW50IGVtaXR0ZWRcbiIpOworICAgICAgICAgICAgaWYgKEp4 bERlY29kZXJHZXRCYXNpY0luZm8oY3R4LT5kZWNvZGVyLCAmY3R4LT5iYXNpY19pbmZvKSAhPSBK WExfREVDX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAq IHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbgorICAgICAgICAgICAgICAgICAqIGlmIGl0IGRvZXMg aXQgaXMgbGlrZWx5IGEgbGlianhsIGRlY29kZXIgYnVnCisgICAgICAgICAgICAgICAgICovCisg ICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJCYWQgbGlianhsIGJh c2ljIGluZm8gZXZlbnRcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVS TkFMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXZjdHgtPnBpeF9mbXQgPSBsaWJqeGxf Z2V0X3BpeF9mbXQoYXZjdHgsICZjdHgtPmJhc2ljX2luZm8sICZjdHgtPmp4bF9waXhmbXQpOwor ICAgICAgICAgICAgaWYgKGF2Y3R4LT5waXhfZm10ID09IEFWX1BJWF9GTVRfTk9ORSkgeworICAg ICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQmFkIGxpYmp4bCBwaXhl bCBmb3JtYXRcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0ID0gZmZfc2V0X2RpbWVuc2lvbnMoYXZjdHgs IGN0eC0+YmFzaWNfaW5mby54c2l6ZSwgY3R4LT5iYXNpY19pbmZvLnlzaXplKTsKKyAgICAgICAg ICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAg ICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBKWExfREVDX0NPTE9SX0VOQ09ESU5HOgorICAgICAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJDT0xPUl9FTkNPRElORyBldmVudCBl bWl0dGVkXG4iKTsKKyAgICAgICAgICAgIGpyZXQgPSBKeGxEZWNvZGVyR2V0SUNDUHJvZmlsZVNp emUoY3R4LT5kZWNvZGVyLCAmY3R4LT5qeGxfcGl4Zm10LCBKWExfQ09MT1JfUFJPRklMRV9UQVJH RVRfT1JJR0lOQUwsICZpY2NwX2xlbik7CisgICAgICAgICAgICBpZiAoanJldCA9PSBKWExfREVD X1NVQ0NFU1MgJiYgaWNjcF9sZW4gPiAwKSB7CisgICAgICAgICAgICAgICAgYXZfYnVmZmVyX3Vu cmVmKCZjdHgtPmljY3ApOworICAgICAgICAgICAgICAgIGN0eC0+aWNjcCA9IGF2X2J1ZmZlcl9h bGxvYyhpY2NwX2xlbik7CisgICAgICAgICAgICAgICAgaWYgKCFjdHgtPmljY3ApCisgICAgICAg ICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICAgICAganJl dCA9IEp4bERlY29kZXJHZXRDb2xvckFzSUNDUHJvZmlsZShjdHgtPmRlY29kZXIsICZjdHgtPmp4 bF9waXhmbXQsIEpYTF9DT0xPUl9QUk9GSUxFX1RBUkdFVF9PUklHSU5BTCwgY3R4LT5pY2NwLT5k YXRhLCBpY2NwX2xlbik7CisgICAgICAgICAgICAgICAgaWYgKGpyZXQgIT0gSlhMX0RFQ19TVUND RVNTKQorICAgICAgICAgICAgICAgICAgICBhdl9idWZmZXJfdW5yZWYoJmN0eC0+aWNjcCk7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBKWExfREVD X05FRURfSU1BR0VfT1VUX0JVRkZFUjoKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0RFQlVHLCAiTkVFRF9JTUFHRV9PVVRfQlVGRkVSIGV2ZW50IGVtaXR0ZWRcbiIpOworICAgICAg ICAgICAgcmV0ID0gZmZfZ2V0X2J1ZmZlcihhdmN0eCwgZnJhbWUsIDApOworICAgICAgICAgICAg aWYgKHJldCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgIGN0 eC0+anhsX3BpeGZtdC5hbGlnbiA9IGZyYW1lLT5saW5lc2l6ZVswXTsKKyAgICAgICAgICAgIGlm IChKeGxEZWNvZGVyU2V0SW1hZ2VPdXRCdWZmZXIoY3R4LT5kZWNvZGVyLCAmY3R4LT5qeGxfcGl4 Zm10LCBmcmFtZS0+ZGF0YVswXSwgZnJhbWUtPmJ1ZlswXS0+c2l6ZSkgIT0gSlhMX0RFQ19TVUND RVNTKSB7CisgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJCYWQg bGlianhsIGRlYyBuZWVkIGltYWdlIG91dCBidWZmZXIgZXZlbnRcbiIpOworICAgICAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgICAgICAgICAgfQorICAgICAgICAgICAg Y29udGludWU7CisgICAgICAgIGNhc2UgSlhMX0RFQ19GVUxMX0lNQUdFOgorICAgICAgICAgICAg LyogZnVsbCBpbWFnZSBpcyBvbmUgZnJhbWUsIGV2ZW4gaWYgYW5pbWF0ZWQgKi8KKyAgICAgICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiRlVMTF9JTUFHRSBldmVudCBlbWl0dGVk XG4iKTsKKyAgICAgICAgICAgIGZyYW1lLT5waWN0X3R5cGUgPSBBVl9QSUNUVVJFX1RZUEVfSTsK KyAgICAgICAgICAgIGZyYW1lLT5rZXlfZnJhbWUgPSAxOworICAgICAgICAgICAgaWYgKGN0eC0+ aWNjcCkgeworICAgICAgICAgICAgICAgIEFWRnJhbWVTaWRlRGF0YSAqc2QgPSBhdl9mcmFtZV9u ZXdfc2lkZV9kYXRhX2Zyb21fYnVmKGZyYW1lLCBBVl9GUkFNRV9EQVRBX0lDQ19QUk9GSUxFLCBj dHgtPmljY3ApOworICAgICAgICAgICAgICAgIGlmICghc2QpCisgICAgICAgICAgICAgICAgICAg IHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICAgICAgLyogb3duZXJzaGlwIGlz IHRyYW5zZmVyZWQsIGFuZCBpdCBpcyBub3QgcmVmLWVkICovCisgICAgICAgICAgICAgICAgY3R4 LT5pY2NwID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpnb3RfZnJhbWUgPSAx OworICAgICAgICAgICAgcmV0dXJuIGF2cGt0LT5zaXplIC0gcmVtYWluaW5nOworICAgICAgICBj YXNlIEpYTF9ERUNfU1VDQ0VTUzoKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RF QlVHLCAiU1VDQ0VTUyBldmVudCBlbWl0dGVkXG4iKTsKKyAgICAgICAgICAgIC8qCisgICAgICAg ICAgICAgKiBUaGUgU1VDQ0VTUyBldmVudCBpc24ndCBmaXJlZCB1bnRpbCBhZnRlciBKWExfREVD X0ZVTExfSU1BR0UuIElmIHRoaXMKKyAgICAgICAgICAgICAqIHN0cmVhbSBvbmx5IGNvbnRhaW5z IG9uZSBKWEwgaW1hZ2UgdGhlbiBKWExfREVDX1NVQ0NFU1Mgd2lsbCBuZXZlciBmaXJlLgorICAg ICAgICAgICAgICogSWYgdGhlIGltYWdlMiBzZXF1ZW5jZSBiZWluZyBkZWNvZGVkIGNvbnRhaW5z IHNldmVyYWwgSlhMIGZpbGVzLCB0aGVuCisgICAgICAgICAgICAgKiBsaWJqeGwgd2lsbCBmaXJl IHRoaXMgZXZlbnQgYWZ0ZXIgdGhlIG5leHQgQVZQYWNrZXQgaGFzIGJlZW4gcGFzc2VkLAorICAg ICAgICAgICAgICogd2hpY2ggbWVhbnMgdGhlIGN1cnJlbnQgcGFja2V0IGlzIGFjdHVhbGx5IHRo ZSBuZXh0IGltYWdlIGluIHRoZSBzZXF1ZW5jZS4KKyAgICAgICAgICAgICAqIFRoaXMgaXMgd2h5 IHdlIHJlc2V0IHRoZSBkZWNvZGVyIGFuZCBwb3B1bGF0ZSB0aGUgcGFja2V0IGRhdGEgbm93LCBz aW5jZQorICAgICAgICAgICAgICogdGhpcyBpcyB0aGUgbmV4dCBwYWNrZXQgYW5kIGl0IGhhcyBu b3QgYmVlbiBkZWNvZGVkIHlldC4gVGhlIGRlY29kZXIgZG9lcworICAgICAgICAgICAgICogaGF2 ZSB0byBiZSByZXNldCB0byBhbGxvdyB1cyB0byB1c2UgaXQgZm9yIHRoZSBuZXh0IGltYWdlLCBv ciBsaWJqeGwKKyAgICAgICAgICAgICAqIHdpbGwgYmVjb21lIHZlcnkgY29uZnVzZWQgaWYgdGhl IGhlYWRlciBpbmZvcm1hdGlvbiBpcyBub3QgaWRlbnRpY2FsLgorICAgICAgICAgICAgICovCisg ICAgICAgICAgICBKeGxEZWNvZGVyUmVzZXQoY3R4LT5kZWNvZGVyKTsKKyAgICAgICAgICAgIGxp Ymp4bF9pbml0X2p4bF9kZWNvZGVyKGF2Y3R4KTsKKyAgICAgICAgICAgIGJ1ZiA9IGF2cGt0LT5k YXRhOworICAgICAgICAgICAgcmVtYWluaW5nID0gYXZwa3QtPnNpemU7CisgICAgICAgICAgICBj b250aW51ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19FUlJPUiwgIkJhZCBsaWJqeGwgZXZlbnQ6ICVkXG4iLCBqcmV0KTsKKyAgICAgICAgICAg ICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGlj IGF2X2NvbGQgaW50IGxpYmp4bF9kZWNvZGVfY2xvc2UoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQor eworICAgIExpYkp4bERlY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7CisKKyAg ICBpZiAoY3R4LT5ydW5uZXIpCisgICAgICAgIEp4bFRocmVhZFBhcmFsbGVsUnVubmVyRGVzdHJv eShjdHgtPnJ1bm5lcik7CisgICAgY3R4LT5ydW5uZXIgPSBOVUxMOworICAgIGlmIChjdHgtPmRl Y29kZXIpCisgICAgICAgIEp4bERlY29kZXJEZXN0cm95KGN0eC0+ZGVjb2Rlcik7CisgICAgY3R4 LT5kZWNvZGVyID0gTlVMTDsKKyAgICBhdl9idWZmZXJfdW5yZWYoJmN0eC0+aWNjcCk7CisKKyAg ICByZXR1cm4gMDsKK30KKworY29uc3QgRkZDb2RlYyBmZl9saWJqeGxfZGVjb2RlciA9IHsKKyAg ICAucC5uYW1lICAgICAgICAgICA9ICJsaWJqeGwiLAorICAgIC5wLmxvbmdfbmFtZSAgICAgID0g TlVMTF9JRl9DT05GSUdfU01BTEwoImxpYmp4bCBKUEVHIFhMIiksCisgICAgLnAudHlwZSAgICAg ICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCisgICAgLnAuaWQgICAgICAgICAgICAgPSBBVl9D T0RFQ19JRF9KUEVHWEwsCisgICAgLnByaXZfZGF0YV9zaXplICAgPSBzaXplb2YoTGliSnhsRGVj b2RlQ29udGV4dCksCisgICAgLmluaXQgICAgICAgICAgICAgPSBsaWJqeGxfZGVjb2RlX2luaXQs CisgICAgRkZfQ09ERUNfREVDT0RFX0NCKGxpYmp4bF9kZWNvZGVfZnJhbWUpLAorICAgIC5jbG9z ZSAgICAgICAgICAgID0gbGlianhsX2RlY29kZV9jbG9zZSwKKyAgICAucC5jYXBhYmlsaXRpZXMg ICA9IEFWX0NPREVDX0NBUF9EUjEgfCBBVl9DT0RFQ19DQVBfT1RIRVJfVEhSRUFEUywKKyAgICAu Y2Fwc19pbnRlcm5hbCAgICA9IEZGX0NPREVDX0NBUF9BVVRPX1RIUkVBRFMgfCBGRl9DT0RFQ19D QVBfSU5JVF9DTEVBTlVQLAorICAgIC5wLndyYXBwZXJfbmFtZSAgID0gImxpYmp4bCIsCit9Owot LSAKMi4zNS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBz Oi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3Jp YmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBl Zy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==