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 47A5340322 for ; Mon, 20 Dec 2021 13:45:04 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8A70368AECC; Mon, 20 Dec 2021 15:44:31 +0200 (EET) Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DCE0868A7C8 for ; Mon, 20 Dec 2021 15:44:22 +0200 (EET) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id A212B49361; Mon, 20 Dec 2021 14:44:22 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1640007862; bh=isVqXu9lGYGjUTL2cNtagi5zSn/ba8KNoDmP79ysfVo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mynH8A7ntgPXNxdvb7Y+dzXmkZqDflnWhRZCytULzadqwKJoMjLN+HZzjzb05QV04 zpoCJIT3FPowIEtZ5V18adsLz7ZJxI7ROpYIyKxwqSAfyI96jMj92uPcNII0q0KwCH A7JZxHIolj1wc6Z4j8mk7u/mhowMDnXBVdMdnVpk= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 20 Dec 2021 14:44:18 +0100 Message-Id: <20211220134420.69078-4-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20211220134420.69078-1-ffmpeg@haasn.xyz> References: <20211220134420.69078-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v7 4/6] lavc: Implement Dolby Vision RPU parsing 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: Niklas Haas 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: RnJvbTogTmlrbGFzIEhhYXMgPGdpdEBoYWFzbi5kZXY+CgpCYXNlZCBvbiBhIG1peHR1cmUgb2Yg Z3Vlc3N3b3JrLCBwYXJ0aWFsIGRvY3VtZW50YXRpb24gaW4gcGF0ZW50cywgYW5kCnJldmVyc2Ug ZW5naW5lZXJpbmcgb2YgcmVhbC13b3JsZCBzYW1wbGVzLiBDb25maXJtZWQgd29ya2luZyBmb3Ig YWxsIHRoZQpzYW1wbGVzIEkndmUgdGhyb3duIGF0IGl0LgoKQ29udGFpbnMgc29tZSBhbm5veWlu ZyBtYWNoaW5lcnkgdG8gcGVyc2lzdCB0aGVzZSB2YWx1ZXMgaW4gYmV0d2VlbgpmcmFtZXMsIHdo aWNoIGlzIG5lZWRlZCBpbiB0aGVvcnkgZXZlbiB0aG91Z2ggSSd2ZSBuZXZlciBhY3R1YWxseSBz ZWVuIGEKc2FtcGxlIHRoYXQgcmVsaWVzIG9uIGl0IGluIHByYWN0aWNlLiBNYXkgb3IgbWF5IG5v dCB3b3JrLgoKU2luY2UgdGhlIGRpc3RpbmN0aW9uIG1hdHRlcnMgZ3JlYXRseSBmb3IgcGFyc2lu ZyB0aGUgY29sb3IgbWF0cml4CnZhbHVlcywgdGhpcyBpbmNsdWRlcyBhIHNtYWxsIGhlbHBlciBm dW5jdGlvbiB0byBndWVzcyB0aGUgcmlnaHQgcHJvZmlsZQpmcm9tIHRoZSBSUFUgaXRzZWxmIGlu IGNhc2UgdGhlIHVzZXIgaGFzIGZvcmdvdHRlbiB0byBmb3J3YXJkIHRoZSBkb3ZpCmNvbmZpZ3Vy YXRpb24gcmVjb3JkIHRvIHRoZSBkZWNvZGVyLiAoV2hpY2ggaW4gcHJhY3RpY2UsIG9ubHkgZmZt cGVnLmMKYW5kIGZmcGxheSBkby4uKQoKTm90YWJsZSBvbWlzc2lvbnMgLyBkZXZpYXRpb25zOgot IENSQzMyIHZlcmlmaWNhdGlvbi4gVGhpcyBpcyBiYXNlZCBvbiB0aGUgTVBFRzIgQ1JDMzIgdHlw ZSwgd2hpY2ggZG9lcwogIG5vdCBzZWVtIHRvIGJlIGltcGxlbWVudGVkIGluIGxhdnUuIChBbmQg SSBkb24ndCBjYXJlIGVub3VnaCB0byBkbyBzbykKLSBMaW5lYXIgaW50ZXJwb2xhdGlvbiBzdXBw b3J0LiBOb3RoaW5nIGRvY3VtZW50cyB0aGlzIChiZXlvbmQgaXRzCiAgZXhpc3RlbmNlKSBhbmQg bm8gc2FtcGxlcyB1c2UgaXQsIHNvIGltcG9zc2libGUgdG8gaW1wbGVtZW50LgotIEFsbCBvZiB0 aGUgZXh0ZW5zaW9uIG1ldGFkYXRhIGJsb2NrcywgYnV0IHRoZXNlIGNvbnRhaW4gdmFsdWVzIHRo YXQKICBzZWVtIGxhcmdlbHkgY29uZ3J1ZW50IHdpdGggU1QyMDk0LCBIRFIxMCwgb3Igb3RoZXIg ZXhpc3RpbmcgZm9ybXMgb2YKICBzaWRlIGRhdGEsIHNvIEkgd2lsbCBkZWZlciBwYXJzaW5nL2F0 dGFjaGluZyB0aGVtIHRvIGEgZnV0dXJlIGNvbW1pdC4KLSBUaGUgcGF0ZW50IGRlc2NyaWJlcyBh IG1lY2hhbmlzbSBmb3IgcHJlZGljdGluZyBjb2VmZmljaWVudHMgZnJvbQogIHByZXZpb3VzIFJQ VXMsIGJ1dCB0aGUgYml0IGZvciB0aGUgZmxhZyB3aGV0aGVyIHRvIHVzZSB0aGUKICBwcmVkaWN0 aW9uIGRlbHRhcyBvciBzaWduYWwgZW50aXJlbHkgbmV3IGNvZWZmaWNpZW50cyBkb2VzIG5vdCBz ZWVtIHRvCiAgYmUgcHJlc2VudCBpbiBhY3R1YWwgUlBVcywgc28gd2UgaWdub3JlIHRoaXMgc3Vi c3lzdGVtIGVudGlyZWx5LgotIEluIHRoZSBwYXRlbnQncyBzcGVjLCB0aGUgTkxRIHN1YnN5c3Rl bSBhbHNvIGxvb3BzIG92ZXIKICBudW1fbmxxX3Bpdm90cywgYnV0IGV2ZW4gaW4gdGhlIHBhdGVu dCB0aGUgbnVtYmVyIGlzIGhhcmQtY29kZWQgdG8gb25lCiAgaXRlcmF0aW9uIHJhdGhlciB0aGFu IHNpZ25hbGxlZC4gU28gd2Ugb25seSBzdG9yZSBvbmUgc2V0IG9mIGNvZWZzLgoKSGVhdmlseSBp bmZsdWVuY2VkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9xdWlldHZvaWQvZG92aV90b29sCkRvY3Vt ZW50YXRpb24gZHJhd24gZnJvbSBVUyBQYXRlbnQgMTAsNzAxLDM5OSBCMiBhbmQgRVRTSSBHUyBD Q00gMDAxCgpTaWduZWQtb2ZmLWJ5OiBOaWtsYXMgSGFhcyA8Z2l0QGhhYXNuLmRldj4KLS0tCiBj b25maWd1cmUgICAgICAgICAgICAgfCAgIDIgKwogbGliYXZjb2RlYy9NYWtlZmlsZSAgIHwgICAx ICsKIGxpYmF2Y29kZWMvZG92aV9ycHUuYyB8IDQzMCArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIGxpYmF2Y29kZWMvZG92aV9ycHUuaCB8ICA3MSArKysrKysrCiA0 IGZpbGVzIGNoYW5nZWQsIDUwNCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGli YXZjb2RlYy9kb3ZpX3JwdS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy9kb3ZpX3Jw dS5oCgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4IGQ5ZDQxYjIyNzMu LjlhMjdmZjliYmMgMTAwNzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTI0 MzQsNiArMjQzNCw3IEBAIENPTkZJR19FWFRSQT0iCiAgICAgY2JzX3ZwOQogICAgIGRpcmFjX3Bh cnNlCiAgICAgZG5uCisgICAgZG92aV9ycHUKICAgICBkdnByb2ZpbGUKICAgICBleGlmCiAgICAg ZmFhbmRjdApAQCAtMjcwNiw2ICsyNzA3LDcgQEAgY2JzX21wZWcyX3NlbGVjdD0iY2JzIgogY2Jz X3ZwOV9zZWxlY3Q9ImNicyIKIGRjdF9zZWxlY3Q9InJkZnQiCiBkaXJhY19wYXJzZV9zZWxlY3Q9 ImdvbG9tYiIKK2RvdmlfcnB1X3NlbGVjdD0iZ29sb21iIgogZG5uX3N1Z2dlc3Q9ImxpYnRlbnNv cmZsb3cgbGlib3BlbnZpbm8iCiBkbm5fZGVwcz0iYXZmb3JtYXQgc3dzY2FsZSIKIGVycm9yX3Jl c2lsaWVuY2Vfc2VsZWN0PSJtZV9jbXAiCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL01ha2VmaWxl IGIvbGliYXZjb2RlYy9NYWtlZmlsZQppbmRleCBmYjkwZWNlYTg0Li43MzY0YzdhOTFmIDEwMDY0 NAotLS0gYS9saWJhdmNvZGVjL01ha2VmaWxlCisrKyBiL2xpYmF2Y29kZWMvTWFrZWZpbGUKQEAg LTc3LDYgKzc3LDcgQEAgT0JKUy0kKENPTkZJR19DQlNfTVBFRzIpICAgICAgICAgICAgICAgKz0g Y2JzX21wZWcyLm8KIE9CSlMtJChDT05GSUdfQ0JTX1ZQOSkgICAgICAgICAgICAgICAgICs9IGNi c192cDkubwogT0JKUy0kKENPTkZJR19DUllTVEFMSEQpICAgICAgICAgICAgICAgKz0gY3J5c3Rh bGhkLm8KIE9CSlMtJChDT05GSUdfRENUKSAgICAgICAgICAgICAgICAgICAgICs9IGRjdC5vIGRj dDMyX2ZpeGVkLm8gZGN0MzJfZmxvYXQubworT0JKUy0kKENPTkZJR19ET1ZJX1JQVSkgICAgICAg ICAgICAgICAgKz0gZG92aV9ycHUubwogT0JKUy0kKENPTkZJR19FUlJPUl9SRVNJTElFTkNFKSAg ICAgICAgKz0gZXJyb3JfcmVzaWxpZW5jZS5vCiBPQkpTLSQoQ09ORklHX0VYSUYpICAgICAgICAg ICAgICAgICAgICArPSBleGlmLm8gdGlmZl9jb21tb24ubwogT0JKUy0kKENPTkZJR19GQUFORENU KSAgICAgICAgICAgICAgICAgKz0gZmFhbmRjdC5vCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2Rv dmlfcnB1LmMgYi9saWJhdmNvZGVjL2RvdmlfcnB1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uMWRjZDBmMDZmNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMv ZG92aV9ycHUuYwpAQCAtMCwwICsxLDQzMCBAQAorLyoKKyAqIERvbGJ5IFZpc2lvbiBSUFUgZGVj b2RlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBKYW4gRWtzdHLDtm0KKyAqIENvcHlyaWdo dCAoQykgMjAyMSBOaWtsYXMgSGFhcworICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBl Zy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBv ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlm IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUx IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EK KyAqLworCisjaW5jbHVkZSAibGliYXZ1dGlsL2J1ZmZlci5oIgorCisjaW5jbHVkZSAiZG92aV9y cHUuaCIKKyNpbmNsdWRlICJnb2xvbWIuaCIKKyNpbmNsdWRlICJnZXRfYml0cy5oIgorCitlbnVt IHsKKyAgICBSUFVfQ09FRkZfRklYRUQgPSAwLAorICAgIFJQVV9DT0VGRl9GTE9BVCA9IDEsCit9 OworCisvKioKKyAqIFByaXZhdGUgY29udGVudHMgb2YgdmRyX3JlZi4KKyAqLwordHlwZWRlZiBz dHJ1Y3QgRE9WSVZkclJlZiB7CisgICAgQVZET1ZJRGF0YU1hcHBpbmcgbWFwcGluZzsKKyAgICBB VkRPVklDb2xvck1ldGFkYXRhIGNvbG9yOworfSBET1ZJVmRyUmVmOworCit2b2lkIGZmX2Rvdmlf Y3R4X3VucmVmKERPVklDb250ZXh0ICpzKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRkZf QVJSQVlfRUxFTVMocy0+dmRyX3JlZik7IGkrKykKKyAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZz LT52ZHJfcmVmW2ldKTsKKworICAgIC8qIFByZXNlcnZlIHRoZSB1c2VyLXByb3ZpZGVkIGZpZWxk cyBleHBsaWNpdGx5LCByZXNldCBldmVyeXRoaW5nIGVsc2UgKi8KKyAgICAqcyA9IChET1ZJQ29u dGV4dCkgeworICAgICAgICAuYXZjdHggPSBzLT5hdmN0eCwKKyAgICAgICAgLmNvbmZpZyA9IHMt PmNvbmZpZywKKyAgICB9OworfQorCitpbnQgZmZfZG92aV9jdHhfcmVwbGFjZShET1ZJQ29udGV4 dCAqcywgY29uc3QgRE9WSUNvbnRleHQgKnMwKQoreworICAgIGludCByZXQ7CisgICAgcy0+YXZj dHggPSBzMC0+YXZjdHg7CisgICAgcy0+Y29uZmlnID0gczAtPmNvbmZpZzsKKyAgICBzLT5tYXBw aW5nID0gczAtPm1hcHBpbmc7CisgICAgcy0+Y29sb3IgPSBzMC0+Y29sb3I7CisgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBET1ZJX01BWF9ETV9JRDsgaSsrKSB7CisgICAgICAgIGlmICgocmV0ID0g YXZfYnVmZmVyX3JlcGxhY2UoJnMtPnZkcl9yZWZbaV0sIHMwLT52ZHJfcmVmW2ldKSkgPCAwKQor ICAgICAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHJldHVybiAwOworCitmYWlsOgor ICAgIGZmX2RvdmlfY3R4X3VucmVmKHMpOworICAgIHJldHVybiByZXQ7Cit9CisKK2ludCBmZl9k b3ZpX2F0dGFjaF9zaWRlX2RhdGEoRE9WSUNvbnRleHQgKnMsIEFWRnJhbWUgKmZyYW1lKQorewor ICAgIEFWRnJhbWVTaWRlRGF0YSAqc2Q7CisgICAgQVZCdWZmZXJSZWYgKmJ1ZjsKKyAgICBBVkRP VklNZXRhZGF0YSAqZG92aTsKKyAgICBzaXplX3QgZG92aV9zaXplOworCisgICAgaWYgKCFzLT5t YXBwaW5nIHx8ICFzLT5jb2xvcikKKyAgICAgICAgcmV0dXJuIDA7IC8qIGluY29tcGxldGUgZG92 aSBtZXRhZGF0YSAqLworCisgICAgZG92aSA9IGF2X2RvdmlfbWV0YWRhdGFfYWxsb2MoJmRvdmlf c2l6ZSk7CisgICAgaWYgKCFkb3ZpKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwor CisgICAgYnVmID0gYXZfYnVmZmVyX2NyZWF0ZSgodWludDhfdCAqKSBkb3ZpLCBkb3ZpX3NpemUs IE5VTEwsIE5VTEwsIDApOworICAgIGlmICghYnVmKSB7CisgICAgICAgIGF2X2ZyZWUoZG92aSk7 CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgfQorCisgICAgc2QgPSBhdl9m cmFtZV9uZXdfc2lkZV9kYXRhX2Zyb21fYnVmKGZyYW1lLCBBVl9GUkFNRV9EQVRBX0RPVklfTUVU QURBVEEsIGJ1Zik7CisgICAgaWYgKCFzZCkgeworICAgICAgICBhdl9idWZmZXJfdW5yZWYoJmJ1 Zik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgfQorCisgICAgbWVtY3B5 KCZkb3ZpLT5oZWFkZXIsICZzLT5oZWFkZXIsIHNpemVvZihkb3ZpLT5oZWFkZXIpKTsKKyAgICBt ZW1jcHkoJmRvdmktPm1hcHBpbmcsIHMtPm1hcHBpbmcsIHNpemVvZihkb3ZpLT5tYXBwaW5nKSk7 CisgICAgbWVtY3B5KCZkb3ZpLT5jb2xvciwgcy0+Y29sb3IsIHNpemVvZihkb3ZpLT5jb2xvcikp OworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGd1ZXNzX3Byb2ZpbGUoY29uc3QgQVZE T1ZJUnB1RGF0YUhlYWRlciAqaGRyKQoreworICAgIHN3aXRjaCAoaGRyLT52ZHJfcnB1X3Byb2Zp bGUpIHsKKyAgICBjYXNlIDA6CisgICAgICAgIGlmIChoZHItPmJsX3ZpZGVvX2Z1bGxfcmFuZ2Vf ZmxhZykKKyAgICAgICAgICAgIHJldHVybiA1OworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6 CisgICAgICAgIGlmIChoZHItPmVsX3NwYXRpYWxfcmVzYW1wbGluZ19maWx0ZXJfZmxhZyAmJiAh aGRyLT5kaXNhYmxlX3Jlc2lkdWFsX2ZsYWcpIHsKKyAgICAgICAgICAgIGlmIChoZHItPnZkcl9i aXRfZGVwdGggPT0gMTIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gNzsKKyAgICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgICAgICB9CisgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gODsKKyAgICAgICAgfQorICAgIH0KKwor ICAgIHJldHVybiAwOyAvKiB1bmtub3duICovCit9CisKK3N0YXRpYyBpbmxpbmUgdWludDY0X3Qg Z2V0X3VlX2NvZWYoR2V0Qml0Q29udGV4dCAqZ2IsIGNvbnN0IEFWRE9WSVJwdURhdGFIZWFkZXIg KmhkcikKK3sKKyAgICB1aW50NjRfdCBpcGFydDsKKyAgICB1bmlvbiB7IHVpbnQzMl90IHUzMjsg ZmxvYXQgZjMyOyB9IGZwYXJ0OworCisgICAgc3dpdGNoIChoZHItPmNvZWZfZGF0YV90eXBlKSB7 CisgICAgY2FzZSBSUFVfQ09FRkZfRklYRUQ6CisgICAgICAgIGlwYXJ0ID0gZ2V0X3VlX2dvbG9t Yl9sb25nKGdiKTsKKyAgICAgICAgZnBhcnQudTMyID0gZ2V0X2JpdHNfbG9uZyhnYiwgaGRyLT5j b2VmX2xvZzJfZGVub20pOworICAgICAgICByZXR1cm4gKGlwYXJ0IDw8IGhkci0+Y29lZl9sb2cy X2Rlbm9tKSArIGZwYXJ0LnUzMjsKKworICAgIGNhc2UgUlBVX0NPRUZGX0ZMT0FUOgorICAgICAg ICBmcGFydC51MzIgPSBnZXRfYml0c19sb25nKGdiLCAzMik7CisgICAgICAgIHJldHVybiBmcGFy dC5mMzIgKiAoMSA8PCBoZHItPmNvZWZfbG9nMl9kZW5vbSk7CisgICAgfQorCisgICAgcmV0dXJu IDA7IC8qIHVucmVhY2hhYmxlICovCit9CisKK3N0YXRpYyBpbmxpbmUgaW50NjRfdCBnZXRfc2Vf Y29lZihHZXRCaXRDb250ZXh0ICpnYiwgY29uc3QgQVZET1ZJUnB1RGF0YUhlYWRlciAqaGRyKQor eworICAgIGludDY0X3QgaXBhcnQ7CisgICAgdW5pb24geyB1aW50MzJfdCB1MzI7IGZsb2F0IGYz MjsgfSBmcGFydDsKKworICAgIHN3aXRjaCAoaGRyLT5jb2VmX2RhdGFfdHlwZSkgeworICAgIGNh c2UgUlBVX0NPRUZGX0ZJWEVEOgorICAgICAgICBpcGFydCA9IGdldF9zZV9nb2xvbWJfbG9uZyhn Yik7CisgICAgICAgIGZwYXJ0LnUzMiA9IGdldF9iaXRzX2xvbmcoZ2IsIGhkci0+Y29lZl9sb2cy X2Rlbm9tKTsKKyAgICAgICAgcmV0dXJuIChpcGFydCA8PCBoZHItPmNvZWZfbG9nMl9kZW5vbSkg KyBmcGFydC51MzI7CisKKyAgICBjYXNlIFJQVV9DT0VGRl9GTE9BVDoKKyAgICAgICAgZnBhcnQu dTMyID0gZ2V0X2JpdHNfbG9uZyhnYiwgMzIpOworICAgICAgICByZXR1cm4gZnBhcnQuZjMyICog KDEgPDwgaGRyLT5jb2VmX2xvZzJfZGVub20pOworICAgIH0KKworICAgIHJldHVybiAwOyAvKiB1 bnJlYWNoYWJsZSAqLworfQorCisjZGVmaW5lIFZBTElEQVRFKFZBUiwgTUlOLCBNQVgpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgICAgICBpZiAoVkFSIDwgTUlOIHx8IFZBUiA+IE1BWCkgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBhdl9s b2cocy0+YXZjdHgsIEFWX0xPR19FUlJPUiwgIlJQVSB2YWxpZGF0aW9uIGZhaWxlZDogIiAgICAg ICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAjTUlOIiA8PSAiI1ZBUiIgPSAlZCA8PSAiI01B WCJcbiIsIChpbnQpIFZBUik7ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZ290byBmYWls OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCitpbnQgZmZf ZG92aV9ycHVfcGFyc2UoRE9WSUNvbnRleHQgKnMsIGNvbnN0IHVpbnQ4X3QgKnJwdSwgc2l6ZV90 IHJwdV9zaXplKQoreworICAgIEFWRE9WSVJwdURhdGFIZWFkZXIgKmhkciA9ICZzLT5oZWFkZXI7 CisgICAgR2V0Qml0Q29udGV4dCAqZ2IgPSAmKEdldEJpdENvbnRleHQpezB9OworICAgIERPVklW ZHJSZWYgKnZkcjsKKyAgICBpbnQgcmV0OworCisgICAgdWludDhfdCBuYWxfcHJlZml4OworICAg IHVpbnQ4X3QgcnB1X3R5cGU7CisgICAgdWludDhfdCB2ZHJfc2VxX2luZm9fcHJlc2VudDsKKyAg ICB1aW50OF90IHZkcl9kbV9tZXRhZGF0YV9wcmVzZW50OworICAgIHVpbnQ4X3QgdXNlX3ByZXZf dmRyX3JwdTsKKyAgICB1aW50OF90IHVzZV9ubHE7CisgICAgdWludDhfdCBwcm9maWxlOworICAg IGlmICgocmV0ID0gaW5pdF9nZXRfYml0czgoZ2IsIHJwdSwgcnB1X3NpemUpKSA8IDApCisgICAg ICAgIHJldHVybiByZXQ7CisKKyAgICAvKiBSUFUgaGVhZGVyLCBjb21tb24gdmFsdWVzICovCisg ICAgbmFsX3ByZWZpeCA9IGdldF9iaXRzKGdiLCA4KTsKKyAgICBWQUxJREFURShuYWxfcHJlZml4 LCAyNSwgMjUpOworICAgIHJwdV90eXBlID0gZ2V0X2JpdHMoZ2IsIDYpOworICAgIGlmIChycHVf dHlwZSAhPSAyKSB7CisgICAgICAgIGF2X2xvZyhzLT5hdmN0eCwgQVZfTE9HX1dBUk5JTkcsICJV bnJlY29nbml6ZWQgUlBVIHR5cGUgIgorICAgICAgICAgICAgICAgIiUiUFJJdTgiLCBpZ25vcmlu Z1xuIiwgcnB1X3R5cGUpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBoZHItPnJw dV90eXBlID0gcnB1X3R5cGU7CisgICAgaGRyLT5ycHVfZm9ybWF0ID0gZ2V0X2JpdHMoZ2IsIDEx KTsKKworICAgIC8qIFZhbHVlcyBzcGVjaWZpYyB0byBSUFUgdHlwZSAyICovCisgICAgaGRyLT52 ZHJfcnB1X3Byb2ZpbGUgPSBnZXRfYml0cyhnYiwgNCk7CisgICAgaGRyLT52ZHJfcnB1X2xldmVs ID0gZ2V0X2JpdHMoZ2IsIDQpOworCisgICAgdmRyX3NlcV9pbmZvX3ByZXNlbnQgPSBnZXRfYml0 czEoZ2IpOworICAgIGlmICh2ZHJfc2VxX2luZm9fcHJlc2VudCkgeworICAgICAgICBoZHItPmNo cm9tYV9yZXNhbXBsaW5nX2V4cGxpY2l0X2ZpbHRlcl9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAg ICAgICAgaGRyLT5jb2VmX2RhdGFfdHlwZSA9IGdldF9iaXRzKGdiLCAyKTsKKyAgICAgICAgVkFM SURBVEUoaGRyLT5jb2VmX2RhdGFfdHlwZSwgUlBVX0NPRUZGX0ZJWEVELCBSUFVfQ09FRkZfRkxP QVQpOworICAgICAgICBzd2l0Y2ggKGhkci0+Y29lZl9kYXRhX3R5cGUpIHsKKyAgICAgICAgY2Fz ZSBSUFVfQ09FRkZfRklYRUQ6CisgICAgICAgICAgICBoZHItPmNvZWZfbG9nMl9kZW5vbSA9IGdl dF91ZV9nb2xvbWIoZ2IpOworICAgICAgICAgICAgVkFMSURBVEUoaGRyLT5jb2VmX2xvZzJfZGVu b20sIDEzLCAzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSUFVfQ09FRkZf RkxPQVQ6CisgICAgICAgICAgICBoZHItPmNvZWZfbG9nMl9kZW5vbSA9IDMyOyAvKiBhcmJpdHJh cnksIGNob29zZSBtYXhpbXVtIHByZWNpc2lvbiAqLworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIH0KKworICAgICAgICBoZHItPnZkcl9ycHVfbm9ybWFsaXplZF9pZGMgPSBnZXRfYml0cyhn YiwgMik7CisgICAgICAgIGhkci0+YmxfdmlkZW9fZnVsbF9yYW5nZV9mbGFnID0gZ2V0X2JpdHMx KGdiKTsKKworICAgICAgICBpZiAoKGhkci0+cnB1X2Zvcm1hdCAmIDB4NzAwKSA9PSAwKSB7Cisg ICAgICAgICAgICBpbnQgYmxfYml0X2RlcHRoX21pbnVzOCA9IGdldF91ZV9nb2xvbWJfMzEoZ2Ip OworICAgICAgICAgICAgaW50IGVsX2JpdF9kZXB0aF9taW51czggPSBnZXRfdWVfZ29sb21iXzMx KGdiKTsKKyAgICAgICAgICAgIGludCB2ZHJfYml0X2RlcHRoX21pbnVzOCA9IGdldF91ZV9nb2xv bWJfMzEoZ2IpOworICAgICAgICAgICAgVkFMSURBVEUoYmxfYml0X2RlcHRoX21pbnVzOCwgMCwg OCk7CisgICAgICAgICAgICBWQUxJREFURShlbF9iaXRfZGVwdGhfbWludXM4LCAwLCA4KTsKKyAg ICAgICAgICAgIFZBTElEQVRFKHZkcl9iaXRfZGVwdGhfbWludXM4LCAwLCA4KTsKKyAgICAgICAg ICAgIGhkci0+YmxfYml0X2RlcHRoID0gYmxfYml0X2RlcHRoX21pbnVzOCArIDg7CisgICAgICAg ICAgICBoZHItPmVsX2JpdF9kZXB0aCA9IGVsX2JpdF9kZXB0aF9taW51czggKyA4OworICAgICAg ICAgICAgaGRyLT52ZHJfYml0X2RlcHRoID0gdmRyX2JpdF9kZXB0aF9taW51czggKyA4OworICAg ICAgICAgICAgaGRyLT5zcGF0aWFsX3Jlc2FtcGxpbmdfZmlsdGVyX2ZsYWcgPSBnZXRfYml0czEo Z2IpOworICAgICAgICAgICAgc2tpcF9iaXRzKGdiLCAzKTsgLyogcmVzZXJ2ZWRfemVyb18zYml0 cyAqLworICAgICAgICAgICAgaGRyLT5lbF9zcGF0aWFsX3Jlc2FtcGxpbmdfZmlsdGVyX2ZsYWcg PSBnZXRfYml0czEoZ2IpOworICAgICAgICAgICAgaGRyLT5kaXNhYmxlX3Jlc2lkdWFsX2ZsYWcg PSBnZXRfYml0czEoZ2IpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFoZHItPmJsX2Jp dF9kZXB0aCkgeworICAgICAgICBhdl9sb2cocy0+YXZjdHgsIEFWX0xPR19FUlJPUiwgIk1pc3Np bmcgUlBVIFZEUiBzZXF1ZW5jZSBpbmZvP1xuIik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9 CisKKyAgICB2ZHJfZG1fbWV0YWRhdGFfcHJlc2VudCA9IGdldF9iaXRzMShnYik7CisgICAgdXNl X3ByZXZfdmRyX3JwdSA9IGdldF9iaXRzMShnYik7CisgICAgdXNlX25scSA9IChoZHItPnJwdV9m b3JtYXQgJiAweDcwMCkgPT0gMCAmJiAhaGRyLT5kaXNhYmxlX3Jlc2lkdWFsX2ZsYWc7CisKKyAg ICBwcm9maWxlID0gcy0+Y29uZmlnID8gcy0+Y29uZmlnLT5kdl9wcm9maWxlIDogZ3Vlc3NfcHJv ZmlsZShoZHIpOworICAgIGlmIChwcm9maWxlID09IDUgJiYgdXNlX25scSkgeworICAgICAgICBh dl9sb2cocy0+YXZjdHgsIEFWX0xPR19FUlJPUiwgIlByb2ZpbGUgNSBSUFVzIHNob3VsZCBub3Qg dXNlIE5MUVxuIik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAodXNlX3By ZXZfdmRyX3JwdSkgeworICAgICAgICBpbnQgcHJldl92ZHJfcnB1X2lkID0gZ2V0X3VlX2dvbG9t Yl8zMShnYik7CisgICAgICAgIFZBTElEQVRFKHByZXZfdmRyX3JwdV9pZCwgMCwgRE9WSV9NQVhf RE1fSUQpOworICAgICAgICBpZiAoIXMtPnZkcl9yZWZbcHJldl92ZHJfcnB1X2lkXSkgeworICAg ICAgICAgICAgYXZfbG9nKHMtPmF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbmtub3duIHByZXZpb3Vz IFJQVSBJRDogJXVcbiIsCisgICAgICAgICAgICAgICAgICAgcHJldl92ZHJfcnB1X2lkKTsKKyAg ICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgICAgICB2ZHIgPSAoRE9WSVZkclJl ZiAqKSBzLT52ZHJfcmVmW3ByZXZfdmRyX3JwdV9pZF0tPmRhdGE7CisgICAgICAgIHMtPm1hcHBp bmcgPSAmdmRyLT5tYXBwaW5nOworICAgIH0gZWxzZSB7CisgICAgICAgIGludCB2ZHJfcnB1X2lk ID0gZ2V0X3VlX2dvbG9tYl8zMShnYik7CisgICAgICAgIFZBTElEQVRFKHZkcl9ycHVfaWQsIDAs IERPVklfTUFYX0RNX0lEKTsKKyAgICAgICAgaWYgKCFzLT52ZHJfcmVmW3Zkcl9ycHVfaWRdKSB7 CisgICAgICAgICAgICBzLT52ZHJfcmVmW3Zkcl9ycHVfaWRdID0gYXZfYnVmZmVyX2FsbG9jeihz aXplb2YoRE9WSVZkclJlZikpOworICAgICAgICAgICAgaWYgKCFzLT52ZHJfcmVmW3Zkcl9ycHVf aWRdKQorICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgIH0K KworICAgICAgICB2ZHIgPSAoRE9WSVZkclJlZiAqKSBzLT52ZHJfcmVmW3Zkcl9ycHVfaWRdLT5k YXRhOworICAgICAgICBzLT5tYXBwaW5nID0gJnZkci0+bWFwcGluZzsKKworICAgICAgICB2ZHIt Pm1hcHBpbmcudmRyX3JwdV9pZCA9IHZkcl9ycHVfaWQ7CisgICAgICAgIHZkci0+bWFwcGluZy5t YXBwaW5nX2NvbG9yX3NwYWNlID0gZ2V0X3VlX2dvbG9tYl8zMShnYik7CisgICAgICAgIHZkci0+ bWFwcGluZy5tYXBwaW5nX2Nocm9tYV9mb3JtYXRfaWRjID0gZ2V0X3VlX2dvbG9tYl8zMShnYik7 CisKKyAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCAzOyBjKyspIHsKKyAgICAgICAgICAgIEFW RE9WSVJlc2hhcGluZ0N1cnZlICpjdXJ2ZSA9ICZ2ZHItPm1hcHBpbmcuY3VydmVzW2NdOworICAg ICAgICAgICAgaW50IG51bV9waXZvdHNfbWludXNfMiA9IGdldF91ZV9nb2xvbWJfMzEoZ2IpOwor ICAgICAgICAgICAgaW50IHBpdm90ID0gMDsKKworICAgICAgICAgICAgVkFMSURBVEUobnVtX3Bp dm90c19taW51c18yLCAwLCBBVl9ET1ZJX01BWF9QSUVDRVMgLSAxKTsKKyAgICAgICAgICAgIGN1 cnZlLT5udW1fcGl2b3RzID0gbnVtX3Bpdm90c19taW51c18yICsgMjsKKyAgICAgICAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgY3VydmUtPm51bV9waXZvdHM7IGkrKykgeworICAgICAgICAgICAg ICAgIHBpdm90ICs9IGdldF9iaXRzKGdiLCBoZHItPmJsX2JpdF9kZXB0aCk7CisgICAgICAgICAg ICAgICAgY3VydmUtPnBpdm90c1tpXSA9IGF2X2NsaXBfdWludDE2KHBpdm90KTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh1c2VfbmxxKSB7CisgICAgICAgICAgICB2 ZHItPm1hcHBpbmcubmxxX21ldGhvZF9pZGMgPSBnZXRfYml0cyhnYiwgMyk7CisgICAgICAgICAg ICAvKioKKyAgICAgICAgICAgICAqIFRoZSBwYXRlbnQgbWVudGlvbnMgYW5vdGhlciBsZWdhbCB2 YWx1ZSwgTkxRX01VX0xBVywgYnV0IGl0J3MKKyAgICAgICAgICAgICAqIG5vdCBkb2N1bWVudGVk IGFueXdoZXJlIGhvdyB0byBwYXJzZSBvciBhcHBseSB0aGF0IHR5cGUgb2YgTkxRLgorICAgICAg ICAgICAgICovCisgICAgICAgICAgICBWQUxJREFURSh2ZHItPm1hcHBpbmcubmxxX21ldGhvZF9p ZGMsIDAsIEFWX0RPVklfTkxRX0xJTkVBUl9EWik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICB2ZHItPm1hcHBpbmcubmxxX21ldGhvZF9pZGMgPSBBVl9ET1ZJX05MUV9OT05FOworICAg ICAgICB9CisKKyAgICAgICAgdmRyLT5tYXBwaW5nLm51bV94X3BhcnRpdGlvbnMgPSBnZXRfdWVf Z29sb21iX2xvbmcoZ2IpICsgMTsKKyAgICAgICAgdmRyLT5tYXBwaW5nLm51bV95X3BhcnRpdGlv bnMgPSBnZXRfdWVfZ29sb21iX2xvbmcoZ2IpICsgMTsKKyAgICAgICAgLyogRW5kIG9mIHJwdV9k YXRhX2hlYWRlcigpLCBzdGFydCBvZiB2ZHJfcnB1X2RhdGFfcGF5bG9hZCgpICovCisKKyAgICAg ICAgZm9yIChpbnQgYyA9IDA7IGMgPCAzOyBjKyspIHsKKyAgICAgICAgICAgIEFWRE9WSVJlc2hh cGluZ0N1cnZlICpjdXJ2ZSA9ICZ2ZHItPm1hcHBpbmcuY3VydmVzW2NdOworICAgICAgICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBjdXJ2ZS0+bnVtX3Bpdm90cyAtIDE7IGkrKykgeworICAgICAg ICAgICAgICAgIGludCBtYXBwaW5nX2lkYyA9IGdldF91ZV9nb2xvbWJfMzEoZ2IpOworICAgICAg ICAgICAgICAgIFZBTElEQVRFKG1hcHBpbmdfaWRjLCAwLCAxKTsKKyAgICAgICAgICAgICAgICBj dXJ2ZS0+bWFwcGluZ19pZGNbaV0gPSBtYXBwaW5nX2lkYzsKKyAgICAgICAgICAgICAgICBzd2l0 Y2ggKG1hcHBpbmdfaWRjKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBVl9ET1ZJX01BUFBJTkdf UE9MWU5PTUlBTDogeworICAgICAgICAgICAgICAgICAgICBpbnQgcG9seV9vcmRlcl9taW51czEg PSBnZXRfdWVfZ29sb21iXzMxKGdiKTsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUocG9s eV9vcmRlcl9taW51czEsIDAsIDEpOworICAgICAgICAgICAgICAgICAgICBjdXJ2ZS0+cG9seV9v cmRlcltpXSA9IHBvbHlfb3JkZXJfbWludXMxICsgMTsKKyAgICAgICAgICAgICAgICAgICAgaWYg KHBvbHlfb3JkZXJfbWludXMxID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBs aW5lYXJfaW50ZXJwX2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGxpbmVhcl9pbnRlcnBfZmxhZykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGxhY2sgb2YgZG9jdW1lbnRhdGlvbi9zYW1wbGVzICovCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYXZwcml2X3JlcXVlc3Rfc2FtcGxlKHMtPmF2Y3R4LCAiRG9sYnkgVmlzaW9uICIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmVh ciBpbnRlcnBvbGF0aW9uIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmZfZG92aV9j dHhfdW5yZWYocyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1Jf UEFUQ0hXRUxDT01FOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDw9IGN1cnZlLT5w b2x5X29yZGVyW2ldOyBrKyspCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZS0+cG9seV9j b2VmW2ldW2tdID0gZ2V0X3NlX2NvZWYoZ2IsIGhkcik7CisgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIEFWX0RPVklfTUFQ UElOR19NTVI6IHsKKyAgICAgICAgICAgICAgICAgICAgaW50IG1tcl9vcmRlcl9taW51czEgPSBn ZXRfYml0cyhnYiwgMik7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKG1tcl9vcmRlcl9t aW51czEsIDAsIDIpOworICAgICAgICAgICAgICAgICAgICBjdXJ2ZS0+bW1yX29yZGVyW2ldID0g bW1yX29yZGVyX21pbnVzMSArIDE7CisgICAgICAgICAgICAgICAgICAgIGN1cnZlLT5tbXJfY29u c3RhbnRbaV0gPSBnZXRfc2VfY29lZihnYiwgaGRyKTsKKyAgICAgICAgICAgICAgICAgICAgZm9y IChpbnQgaiA9IDA7IGogPCBjdXJ2ZS0+bW1yX29yZGVyW2ldOyBqKyspIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgNzsgaysrKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGN1cnZlLT5tbXJfY29lZltpXVtqXVtrXSA9IGdldF9zZV9jb2VmKGdiLCBo ZHIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKworICAgICAgICBpZiAodXNlX25scSkgeworICAgICAgICAgICAgZm9yIChpbnQgYyA9 IDA7IGMgPCAzOyBjKyspIHsKKyAgICAgICAgICAgICAgICBBVkRPVklOTFFQYXJhbXMgKm5scSA9 ICZ2ZHItPm1hcHBpbmcubmxxW2NdOworICAgICAgICAgICAgICAgIG5scS0+bmxxX29mZnNldCA9 IGdldF9iaXRzKGdiLCBoZHItPmVsX2JpdF9kZXB0aCk7CisgICAgICAgICAgICAgICAgbmxxLT52 ZHJfaW5fbWF4ID0gZ2V0X3VlX2NvZWYoZ2IsIGhkcik7CisgICAgICAgICAgICAgICAgc3dpdGNo ICh2ZHItPm1hcHBpbmcubmxxX21ldGhvZF9pZGMpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFW X0RPVklfTkxRX0xJTkVBUl9EWjoKKyAgICAgICAgICAgICAgICAgICAgbmxxLT5saW5lYXJfZGVh ZHpvbmVfc2xvcGUgPSBnZXRfdWVfY29lZihnYiwgaGRyKTsKKyAgICAgICAgICAgICAgICAgICAg bmxxLT5saW5lYXJfZGVhZHpvbmVfdGhyZXNob2xkID0gZ2V0X3VlX2NvZWYoZ2IsIGhkcik7Cisg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh2ZHJfZG1fbWV0YWRhdGFfcHJlc2VudCkg eworICAgICAgICBBVkRPVklDb2xvck1ldGFkYXRhICpjb2xvcjsKKyAgICAgICAgaW50IGFmZmVj dGVkX2RtX2lkID0gZ2V0X3VlX2dvbG9tYl8zMShnYik7CisgICAgICAgIGludCBjdXJyZW50X2Rt X2lkID0gZ2V0X3VlX2dvbG9tYl8zMShnYik7CisgICAgICAgIFZBTElEQVRFKGFmZmVjdGVkX2Rt X2lkLCAwLCBET1ZJX01BWF9ETV9JRCk7CisgICAgICAgIFZBTElEQVRFKGN1cnJlbnRfZG1faWQs IDAsIERPVklfTUFYX0RNX0lEKTsKKyAgICAgICAgaWYgKCFzLT52ZHJfcmVmW2FmZmVjdGVkX2Rt X2lkXSkgeworICAgICAgICAgICAgcy0+dmRyX3JlZlthZmZlY3RlZF9kbV9pZF0gPSBhdl9idWZm ZXJfYWxsb2N6KHNpemVvZihET1ZJVmRyUmVmKSk7CisgICAgICAgICAgICBpZiAoIXMtPnZkcl9y ZWZbYWZmZWN0ZWRfZG1faWRdKQorICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01F TSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXMtPnZkcl9yZWZbY3VycmVudF9kbV9pZF0p IHsKKyAgICAgICAgICAgIGF2X2xvZyhzLT5hdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5rbm93biBw cmV2aW91cyBSUFUgRE0gSUQ6ICV1XG4iLAorICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfZG1f aWQpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgLyogVXBk YXRlIGN1cnJlbnQgcG9pbnRlciBiYXNlZCBvbiBjdXJyZW50X2RtX2lkICovCisgICAgICAgIHZk ciA9IChET1ZJVmRyUmVmICopIHMtPnZkcl9yZWZbY3VycmVudF9kbV9pZF0tPmRhdGE7CisgICAg ICAgIHMtPmNvbG9yID0gJnZkci0+Y29sb3I7CisKKyAgICAgICAgLyogVXBkYXRlIHZhbHVlcyBv ZiBhZmZlY3RlZF9kbV9pZCAqLworICAgICAgICB2ZHIgPSAoRE9WSVZkclJlZiAqKSBzLT52ZHJf cmVmW2FmZmVjdGVkX2RtX2lkXS0+ZGF0YTsKKyAgICAgICAgY29sb3IgPSAmdmRyLT5jb2xvcjsK KyAgICAgICAgY29sb3ItPmRtX21ldGFkYXRhX2lkID0gYWZmZWN0ZWRfZG1faWQ7CisgICAgICAg IGNvbG9yLT5zY2VuZV9yZWZyZXNoX2ZsYWcgPSBnZXRfdWVfZ29sb21iXzMxKGdiKTsKKyAgICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5OyBpKyspCisgICAgICAgICAgICBjb2xvci0+eWNjX3Rv X3JnYl9tYXRyaXhbaV0gPSBhdl9tYWtlX3EoZ2V0X3NiaXRzKGdiLCAxNiksIDEgPDwgMTMpOwor ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykgeworICAgICAgICAgICAgaW50IGRl bm9tID0gcHJvZmlsZSA9PSA0ID8gKDEgPDwgMzApIDogKDEgPDwgMjgpOworICAgICAgICAgICAg dW5zaWduZWQgb2Zmc2V0ID0gZ2V0X2JpdHNfbG9uZyhnYiwgMzIpOworICAgICAgICAgICAgaWYg KG9mZnNldCA+IElOVF9NQVgpIHsKKyAgICAgICAgICAgICAgICAvKiBFbnN1cmUgdGhlIHJlc3Vs dCBmaXRzIGluc2lkZSBBVlJhdGlvbmFsICovCisgICAgICAgICAgICAgICAgb2Zmc2V0ID4+PSAx OworICAgICAgICAgICAgICAgIGRlbm9tID4+PSAxOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgY29sb3ItPnljY190b19yZ2Jfb2Zmc2V0W2ldID0gYXZfbWFrZV9xKG9mZnNldCwgZGVub20p OworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKQorICAgICAg ICAgICAgY29sb3ItPnJnYl90b19sbXNfbWF0cml4W2ldID0gYXZfbWFrZV9xKGdldF9zYml0cyhn YiwgMTYpLCAxIDw8IDE0KTsKKworICAgICAgICBjb2xvci0+c2lnbmFsX2VvdGYgPSBnZXRfYml0 cyhnYiwgMTYpOworICAgICAgICBjb2xvci0+c2lnbmFsX2VvdGZfcGFyYW0wID0gZ2V0X2JpdHMo Z2IsIDE2KTsKKyAgICAgICAgY29sb3ItPnNpZ25hbF9lb3RmX3BhcmFtMSA9IGdldF9iaXRzKGdi LCAxNik7CisgICAgICAgIGNvbG9yLT5zaWduYWxfZW90Zl9wYXJhbTIgPSBnZXRfYml0c19sb25n KGdiLCAzMik7CisgICAgICAgIGNvbG9yLT5zaWduYWxfYml0X2RlcHRoID0gZ2V0X2JpdHMoZ2Is IDUpOworICAgICAgICBWQUxJREFURShjb2xvci0+c2lnbmFsX2JpdF9kZXB0aCwgOCwgMTYpOwor ICAgICAgICBjb2xvci0+c2lnbmFsX2NvbG9yX3NwYWNlID0gZ2V0X2JpdHMoZ2IsIDIpOworICAg ICAgICBjb2xvci0+c2lnbmFsX2Nocm9tYV9mb3JtYXQgPSBnZXRfYml0cyhnYiwgMik7CisgICAg ICAgIGNvbG9yLT5zaWduYWxfZnVsbF9yYW5nZV9mbGFnID0gZ2V0X2JpdHMoZ2IsIDIpOworICAg ICAgICBjb2xvci0+c291cmNlX21pbl9wcSA9IGdldF9iaXRzKGdiLCAxMik7CisgICAgICAgIGNv bG9yLT5zb3VyY2VfbWF4X3BxID0gZ2V0X2JpdHMoZ2IsIDEyKTsKKyAgICAgICAgY29sb3ItPnNv dXJjZV9kaWFnb25hbCA9IGdldF9iaXRzKGdiLCAxMCk7CisgICAgfQorCisgICAgLyogRklYTUU6 IHZlcmlmeSBDUkMzMiwgcmVxdWlyZXMgaW1wbGVtZW50YXRpb24gb2YgQVZfQ1JDXzMyX01QRUdf MiAqLworICAgIHJldHVybiAwOworCitmYWlsOgorICAgIGZmX2RvdmlfY3R4X3VucmVmKHMpOyAv KiBkb24ndCBsZWFrIHBvdGVudGlhbGx5IGludmFsaWQgc3RhdGUgKi8KKyAgICByZXR1cm4gQVZF UlJPUihFSU5WQUwpOworfQpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9kb3ZpX3JwdS5oIGIvbGli YXZjb2RlYy9kb3ZpX3JwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LjhjYWJmZjI3MTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmNvZGVjL2RvdmlfcnB1LmgKQEAg LTAsMCArMSw3MSBAQAorLyoKKyAqIERvbGJ5IFZpc2lvbiBSUFUgZGVjb2RlcgorICoKKyAqIENv cHlyaWdodCAoQykgMjAyMSBKYW4gRWtzdHLDtm0KKyAqIENvcHlyaWdodCAoQykgMjAyMSBOaWts YXMgSGFhcworICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1w ZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg KiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaWZuZGVm IEFWQ09ERUNfRE9WSV9SUFVfSAorI2RlZmluZSBBVkNPREVDX0RPVklfUlBVX0gKKworI2luY2x1 ZGUgImxpYmF2dXRpbC9kb3ZpX21ldGEuaCIKKyNpbmNsdWRlICJhdmNvZGVjLmgiCisKKyNkZWZp bmUgRE9WSV9NQVhfRE1fSUQgMTUKK3R5cGVkZWYgc3RydWN0IERPVklDb250ZXh0IHsKKyAgICBB VkNvZGVjQ29udGV4dCAqYXZjdHg7CisgICAgY29uc3QgQVZET1ZJRGVjb2RlckNvbmZpZ3VyYXRp b25SZWNvcmQgKmNvbmZpZzsgLy8vPCBwcm92aWRlZCBieSBBUEkgdXNlcgorICAgIEFWQnVmZmVy UmVmICp2ZHJfcmVmW0RPVklfTUFYX0RNX0lEKzFdOyAvLy88IGRlY29kZWQgVkRSIGRhdGEgbWFw cGluZ3MKKworICAgIC8qKgorICAgICAqIEN1cnJlbnRseSBhY3RpdmUgUlBVIGRhdGEgaGVhZGVy LCB1cGRhdGVzIG9uIGV2ZXJ5IGRvdmlfcnB1X3BhcnNlKCkuCisgICAgICovCisgICAgQVZET1ZJ UnB1RGF0YUhlYWRlciBoZWFkZXI7CisKKyAgICAvKioKKyAgICAgKiBDdXJyZW50bHkgYWN0aXZl IGRhdGEgbWFwcGluZ3MsIG9yIE5VTEwuIFBvaW50cyBpbnRvIG1lbW9yeSBvd25lZCBieSB0aGUK KyAgICAgKiBjb3JyZXNwb25kaW5nIHJwdS92ZHJfcmVmLCB3aGljaCBiZWNvbWVzIGludmFsaWQg b24gdGhlIG5leHQgY2FsbCB0bworICAgICAqIGRvdmlfcnB1X3BhcnNlLgorICAgICAqLworICAg IGNvbnN0IEFWRE9WSURhdGFNYXBwaW5nICptYXBwaW5nOworICAgIGNvbnN0IEFWRE9WSUNvbG9y TWV0YWRhdGEgKmNvbG9yOworfSBET1ZJQ29udGV4dDsKKworLyoqCisgKiBDb21wbGV0ZWx5IHJl c2V0cyB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgYSBET1ZJQ29udGV4dCwgYnV0IGV4cGxpY2l0bHkK KyAqIHByZXNlcnZlcyBhbnkgdXNlci1wcm92aWRlZCBmaWVsZHMuCisgKi8KK3ZvaWQgZmZfZG92 aV9jdHhfdW5yZWYoRE9WSUNvbnRleHQgKnMpOworCitpbnQgZmZfZG92aV9jdHhfcmVwbGFjZShE T1ZJQ29udGV4dCAqcywgY29uc3QgRE9WSUNvbnRleHQgKnMwKTsKKworLyoqCisgKiBQYXJzZSB0 aGUgY29udGVudHMgb2YgYSBEb3ZpIFJQVSBOQUwgYW5kIHVwZGF0ZSB0aGUgcGFyc2VkIHZhbHVl cyBpbiB0aGUKKyAqIERPVklDb250ZXh0IHN0cnVjdC4KKyAqCisgKiBSZXR1cm5zIDAgb3IgYW4g ZXJyb3IgY29kZS4KKyAqLworaW50IGZmX2RvdmlfcnB1X3BhcnNlKERPVklDb250ZXh0ICpzLCBj b25zdCB1aW50OF90ICpycHUsIHNpemVfdCBycHVfc2l6ZSk7CisKKy8qKgorICogQXR0YWNoIHRo ZSBkZWNvZGVkIEFWRE9WSU1ldGFkYXRhIGFzIHNpZGUgZGF0YSB0byBhbiBBVkZyYW1lLgorICov CitpbnQgZmZfZG92aV9hdHRhY2hfc2lkZV9kYXRhKERPVklDb250ZXh0ICpzLCBBVkZyYW1lICpm cmFtZSk7CisKKyNlbmRpZiAvKiBBVkNPREVDX0RPVklfUlBVX0ggKi8KLS0gCjIuMzQuMQoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVs IG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcv bWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5r IGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3Vi amVjdCAidW5zdWJzY3JpYmUiLgo=