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 98FDB41073 for ; Mon, 3 Jan 2022 00:28:08 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C729A68B1A6; Mon, 3 Jan 2022 02:27:39 +0200 (EET) Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F336168B17E for ; Mon, 3 Jan 2022 02:27:29 +0200 (EET) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 975144949B; Mon, 3 Jan 2022 01:27:28 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1641169648; bh=XFuHlMkdlQBtbEDNbKBGwFg7+nXLBd6v3hK/wxcSvwI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Wy2A3Eh3DC93OiuU3TMjG7Cz2WBEfUA3cnLcWyZe3uyqTOWBAi83OdJMN/bi9Ai6n f+qUfTkpEvZuEancl4+tTEhgWH3iAlASwmBclD8VqWVU8n3AkDwAU4Aek53Kq49I+j LB7PixH2pnUbH3gqpJTOxqnSywnfQMuNiBADoPTE= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 3 Jan 2022 01:27:25 +0100 Message-Id: <20220103002727.38840-4-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220103002727.38840-1-ffmpeg@haasn.xyz> References: <20220103002727.38840-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v10 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 ZSwgd2hpY2ggaXMKICBzaW1pbGFyIHRvIElFRUUgQ1JDMzIgYnV0IGFwcGFyZW50bHkgZGlmZmVy ZW50IGluIHN1YnRsZSBlbm91Z2ggd2F5cwogIHRoYXQgSSBjb3VsZCBub3QgZ2V0IGl0IHRvIHBh c3MgdmVyaWZpY2F0aW9uIG5vIG1hdHRlciB3aGF0IHBhcmFtZXRlcnMKICBJIGZlZCB0byBhdl9j cmMuIEl0J3MgcG9zc2libGUgdGhlIGNvZGUgbmVlZHMgc29tZSBjaGFuZ2VzLgotIExpbmVhciBp bnRlcnBvbGF0aW9uIHN1cHBvcnQuIE5vdGhpbmcgZG9jdW1lbnRzIHRoaXMgKGJleW9uZCBpdHMK ICBleGlzdGVuY2UpIGFuZCBubyBzYW1wbGVzIHVzZSBpdCwgc28gaW1wb3NzaWJsZSB0byBpbXBs ZW1lbnQuCi0gQWxsIG9mIHRoZSBleHRlbnNpb24gbWV0YWRhdGEgYmxvY2tzLCBidXQgdGhlc2Ug Y29udGFpbiB2YWx1ZXMgdGhhdAogIHNlZW0gbGFyZ2VseSBjb25ncnVlbnQgd2l0aCBTVDIwOTQs IEhEUjEwLCBvciBvdGhlciBleGlzdGluZyBmb3JtcyBvZgogIHNpZGUgZGF0YSwgc28gSSB3aWxs IGRlZmVyIHBhcnNpbmcvYXR0YWNoaW5nIHRoZW0gdG8gYSBmdXR1cmUgY29tbWl0LgotIFRoZSBw YXRlbnQgZGVzY3JpYmVzIGEgbWVjaGFuaXNtIGZvciBwcmVkaWN0aW5nIGNvZWZmaWNpZW50cyBm cm9tCiAgcHJldmlvdXMgUlBVcywgYnV0IHRoZSBiaXQgZm9yIHRoZSBmbGFnIHdoZXRoZXIgdG8g dXNlIHRoZQogIHByZWRpY3Rpb24gZGVsdGFzIG9yIHNpZ25hbCBlbnRpcmVseSBuZXcgY29lZmZp Y2llbnRzIGRvZXMgbm90IHNlZW0gdG8KICBiZSBwcmVzZW50IGluIGFjdHVhbCBSUFVzLCBzbyB3 ZSBpZ25vcmUgdGhpcyBzdWJzeXN0ZW0gZW50aXJlbHkuCi0gSW4gdGhlIHBhdGVudCdzIHNwZWMs IHRoZSBOTFEgc3Vic3lzdGVtIGFsc28gbG9vcHMgb3ZlcgogIG51bV9ubHFfcGl2b3RzLCBidXQg ZXZlbiBpbiB0aGUgcGF0ZW50IHRoZSBudW1iZXIgaXMgaGFyZC1jb2RlZCB0byBvbmUKICBpdGVy YXRpb24gcmF0aGVyIHRoYW4gc2lnbmFsbGVkLiBTbyB3ZSBvbmx5IHN0b3JlIG9uZSBzZXQgb2Yg Y29lZnMuCgpIZWF2aWx5IGluZmx1ZW5jZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL3F1aWV0dm9p ZC9kb3ZpX3Rvb2wKRG9jdW1lbnRhdGlvbiBkcmF3biBmcm9tIFVTIFBhdGVudCAxMCw3MDEsMzk5 IEIyIGFuZCBFVFNJIEdTIENDTSAwMDEKClNpZ25lZC1vZmYtYnk6IE5pa2xhcyBIYWFzIDxnaXRA aGFhc24uZGV2PgotLS0KIGNvbmZpZ3VyZSAgICAgICAgICAgICB8ICAgMiArCiBsaWJhdmNvZGVj L01ha2VmaWxlICAgfCAgIDEgKwogbGliYXZjb2RlYy9kb3ZpX3JwdS5jIHwgNDQ5ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliYXZjb2RlYy9kb3ZpX3JwdS5o IHwgIDg3ICsrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDUzOSBpbnNlcnRpb25zKCspCiBjcmVh dGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy9kb3ZpX3JwdS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg bGliYXZjb2RlYy9kb3ZpX3JwdS5oCgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJl CmluZGV4IDZhZDcwYjlmN2IuLjgzMDNlMTMyOWUgMTAwNzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysg Yi9jb25maWd1cmUKQEAgLTI0MzQsNiArMjQzNCw3IEBAIENPTkZJR19FWFRSQT0iCiAgICAgY2Jz X3ZwOQogICAgIGRpcmFjX3BhcnNlCiAgICAgZG5uCisgICAgZG92aV9ycHUKICAgICBkdnByb2Zp bGUKICAgICBleGlmCiAgICAgZmFhbmRjdApAQCAtMjcwNiw2ICsyNzA3LDcgQEAgY2JzX21wZWcy X3NlbGVjdD0iY2JzIgogY2JzX3ZwOV9zZWxlY3Q9ImNicyIKIGRjdF9zZWxlY3Q9InJkZnQiCiBk aXJhY19wYXJzZV9zZWxlY3Q9ImdvbG9tYiIKK2RvdmlfcnB1X3NlbGVjdD0iZ29sb21iIgogZG5u X3N1Z2dlc3Q9ImxpYnRlbnNvcmZsb3cgbGlib3BlbnZpbm8iCiBkbm5fZGVwcz0iYXZmb3JtYXQg c3dzY2FsZSIKIGVycm9yX3Jlc2lsaWVuY2Vfc2VsZWN0PSJtZV9jbXAiCmRpZmYgLS1naXQgYS9s aWJhdmNvZGVjL01ha2VmaWxlIGIvbGliYXZjb2RlYy9NYWtlZmlsZQppbmRleCA5NTc3MDYyZWVj Li5jZWVjZGYwNWUxIDEwMDY0NAotLS0gYS9saWJhdmNvZGVjL01ha2VmaWxlCisrKyBiL2xpYmF2 Y29kZWMvTWFrZWZpbGUKQEAgLTc3LDYgKzc3LDcgQEAgT0JKUy0kKENPTkZJR19DQlNfTVBFRzIp ICAgICAgICAgICAgICAgKz0gY2JzX21wZWcyLm8KIE9CSlMtJChDT05GSUdfQ0JTX1ZQOSkgICAg ICAgICAgICAgICAgICs9IGNic192cDkubwogT0JKUy0kKENPTkZJR19DUllTVEFMSEQpICAgICAg ICAgICAgICAgKz0gY3J5c3RhbGhkLm8KIE9CSlMtJChDT05GSUdfRENUKSAgICAgICAgICAgICAg ICAgICAgICs9IGRjdC5vIGRjdDMyX2ZpeGVkLm8gZGN0MzJfZmxvYXQubworT0JKUy0kKENPTkZJ R19ET1ZJX1JQVSkgICAgICAgICAgICAgICAgKz0gZG92aV9ycHUubwogT0JKUy0kKENPTkZJR19F UlJPUl9SRVNJTElFTkNFKSAgICAgICAgKz0gZXJyb3JfcmVzaWxpZW5jZS5vCiBPQkpTLSQoQ09O RklHX0VYSUYpICAgICAgICAgICAgICAgICAgICArPSBleGlmLm8gdGlmZl9jb21tb24ubwogT0JK Uy0kKENPTkZJR19GQUFORENUKSAgICAgICAgICAgICAgICAgKz0gZmFhbmRjdC5vCmRpZmYgLS1n aXQgYS9saWJhdmNvZGVjL2RvdmlfcnB1LmMgYi9saWJhdmNvZGVjL2RvdmlfcnB1LmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYTg3NTYyYzhhMwotLS0gL2Rldi9udWxs CisrKyBiL2xpYmF2Y29kZWMvZG92aV9ycHUuYwpAQCAtMCwwICsxLDQ0OSBAQAorLyoKKyAqIERv bGJ5IFZpc2lvbiBSUFUgZGVjb2RlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBKYW4gRWtz dHLDtm0KKyAqIENvcHlyaWdodCAoQykgMjAyMSBOaWtsYXMgSGFhcworICoKKyAqIFRoaXMgZmls ZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4x IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor ICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxv bmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZv dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg TUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSAibGliYXZ1dGlsL2J1ZmZlci5oIgor CisjaW5jbHVkZSAiZG92aV9ycHUuaCIKKyNpbmNsdWRlICJnb2xvbWIuaCIKKyNpbmNsdWRlICJn ZXRfYml0cy5oIgorCitlbnVtIHsKKyAgICBSUFVfQ09FRkZfRklYRUQgPSAwLAorICAgIFJQVV9D T0VGRl9GTE9BVCA9IDEsCit9OworCisvKioKKyAqIFByaXZhdGUgY29udGVudHMgb2YgdmRyX3Jl Zi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgRE9WSVZkclJlZiB7CisgICAgQVZET1ZJRGF0YU1hcHBp bmcgbWFwcGluZzsKKyAgICBBVkRPVklDb2xvck1ldGFkYXRhIGNvbG9yOworfSBET1ZJVmRyUmVm OworCit2b2lkIGZmX2RvdmlfY3R4X3VucmVmKERPVklDb250ZXh0ICpzKQoreworICAgIGZvciAo aW50IGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMocy0+dmRyX3JlZik7IGkrKykKKyAgICAgICAg YXZfYnVmZmVyX3VucmVmKCZzLT52ZHJfcmVmW2ldKTsKKworICAgICpzID0gKERPVklDb250ZXh0 KSB7CisgICAgICAgIC5sb2djdHggPSBzLT5sb2djdHgsCisgICAgfTsKK30KKwordm9pZCBmZl9k b3ZpX2N0eF9mbHVzaChET1ZJQ29udGV4dCAqcykKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8 IEZGX0FSUkFZX0VMRU1TKHMtPnZkcl9yZWYpOyBpKyspCisgICAgICAgIGF2X2J1ZmZlcl91bnJl Zigmcy0+dmRyX3JlZltpXSk7CisKKyAgICAqcyA9IChET1ZJQ29udGV4dCkgeworICAgICAgICAu bG9nY3R4ID0gcy0+bG9nY3R4LAorICAgICAgICAuZHZfcHJvZmlsZSA9IHMtPmR2X3Byb2ZpbGUs CisgICAgfTsKK30KKworaW50IGZmX2RvdmlfY3R4X3JlcGxhY2UoRE9WSUNvbnRleHQgKnMsIGNv bnN0IERPVklDb250ZXh0ICpzMCkKK3sKKyAgICBpbnQgcmV0OworICAgIHMtPmxvZ2N0eCA9IHMw LT5sb2djdHg7CisgICAgcy0+bWFwcGluZyA9IHMwLT5tYXBwaW5nOworICAgIHMtPmNvbG9yID0g czAtPmNvbG9yOworICAgIHMtPmR2X3Byb2ZpbGUgPSBzMC0+ZHZfcHJvZmlsZTsKKyAgICBmb3Ig KGludCBpID0gMDsgaSA8IERPVklfTUFYX0RNX0lEOyBpKyspIHsKKyAgICAgICAgaWYgKChyZXQg PSBhdl9idWZmZXJfcmVwbGFjZSgmcy0+dmRyX3JlZltpXSwgczAtPnZkcl9yZWZbaV0pKSA8IDAp CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgcmV0dXJuIDA7CisKK2ZhaWw6 CisgICAgZmZfZG92aV9jdHhfdW5yZWYocyk7CisgICAgcmV0dXJuIHJldDsKK30KKwordm9pZCBm Zl9kb3ZpX3VwZGF0ZV9jZmcoRE9WSUNvbnRleHQgKnMsIGNvbnN0IEFWRE9WSURlY29kZXJDb25m aWd1cmF0aW9uUmVjb3JkICpjZmcpCit7CisgICAgaWYgKCFjZmcpCisgICAgICAgIHJldHVybjsK KworICAgIHMtPmR2X3Byb2ZpbGUgPSBjZmctPmR2X3Byb2ZpbGU7Cit9CisKK2ludCBmZl9kb3Zp X2F0dGFjaF9zaWRlX2RhdGEoRE9WSUNvbnRleHQgKnMsIEFWRnJhbWUgKmZyYW1lKQoreworICAg IEFWRnJhbWVTaWRlRGF0YSAqc2Q7CisgICAgQVZCdWZmZXJSZWYgKmJ1ZjsKKyAgICBBVkRPVklN ZXRhZGF0YSAqZG92aTsKKyAgICBzaXplX3QgZG92aV9zaXplOworCisgICAgaWYgKCFzLT5tYXBw aW5nIHx8ICFzLT5jb2xvcikKKyAgICAgICAgcmV0dXJuIDA7IC8qIGluY29tcGxldGUgZG92aSBt ZXRhZGF0YSAqLworCisgICAgZG92aSA9IGF2X2RvdmlfbWV0YWRhdGFfYWxsb2MoJmRvdmlfc2l6 ZSk7CisgICAgaWYgKCFkb3ZpKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisg ICAgYnVmID0gYXZfYnVmZmVyX2NyZWF0ZSgodWludDhfdCAqKSBkb3ZpLCBkb3ZpX3NpemUsIE5V TEwsIE5VTEwsIDApOworICAgIGlmICghYnVmKSB7CisgICAgICAgIGF2X2ZyZWUoZG92aSk7Cisg ICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgfQorCisgICAgc2QgPSBhdl9mcmFt ZV9uZXdfc2lkZV9kYXRhX2Zyb21fYnVmKGZyYW1lLCBBVl9GUkFNRV9EQVRBX0RPVklfTUVUQURB VEEsIGJ1Zik7CisgICAgaWYgKCFzZCkgeworICAgICAgICBhdl9idWZmZXJfdW5yZWYoJmJ1Zik7 CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgfQorCisgICAgLyogQ29weSBv bmx5IHRoZSBwYXJ0cyBvZiB0aGVzZSBzdHJ1Y3RzIGtub3duIHRvIHVzIGF0IGNvbXBpbGVyLXRp bWUuICovCisjZGVmaW5lIENPUFkodCwgYSwgYiwgbGFzdCkgbWVtY3B5KGEsIGIsIG9mZnNldG9m KHQsIGxhc3QpICsgc2l6ZW9mKChiKS0+bGFzdCkpCisgICAgQ09QWShBVkRPVklScHVEYXRhSGVh ZGVyLCBhdl9kb3ZpX2dldF9oZWFkZXIoZG92aSksICZzLT5oZWFkZXIsIGRpc2FibGVfcmVzaWR1 YWxfZmxhZyk7CisgICAgQ09QWShBVkRPVklEYXRhTWFwcGluZywgYXZfZG92aV9nZXRfbWFwcGlu Zyhkb3ZpKSwgcy0+bWFwcGluZywgbmxxWzJdLmxpbmVhcl9kZWFkem9uZV90aHJlc2hvbGQpOwor ICAgIENPUFkoQVZET1ZJQ29sb3JNZXRhZGF0YSwgYXZfZG92aV9nZXRfY29sb3IoZG92aSksIHMt PmNvbG9yLCBzb3VyY2VfZGlhZ29uYWwpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50 IGd1ZXNzX3Byb2ZpbGUoY29uc3QgQVZET1ZJUnB1RGF0YUhlYWRlciAqaGRyKQoreworICAgIHN3 aXRjaCAoaGRyLT52ZHJfcnB1X3Byb2ZpbGUpIHsKKyAgICBjYXNlIDA6CisgICAgICAgIGlmICho ZHItPmJsX3ZpZGVvX2Z1bGxfcmFuZ2VfZmxhZykKKyAgICAgICAgICAgIHJldHVybiA1OworICAg ICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICAgIGlmIChoZHItPmVsX3NwYXRpYWxfcmVz YW1wbGluZ19maWx0ZXJfZmxhZyAmJiAhaGRyLT5kaXNhYmxlX3Jlc2lkdWFsX2ZsYWcpIHsKKyAg ICAgICAgICAgIGlmIChoZHItPnZkcl9iaXRfZGVwdGggPT0gMTIpIHsKKyAgICAgICAgICAgICAg ICByZXR1cm4gNzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJu IDQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4g ODsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOyAvKiB1bmtub3duICovCit9CisK K3N0YXRpYyBpbmxpbmUgdWludDY0X3QgZ2V0X3VlX2NvZWYoR2V0Qml0Q29udGV4dCAqZ2IsIGNv bnN0IEFWRE9WSVJwdURhdGFIZWFkZXIgKmhkcikKK3sKKyAgICB1aW50NjRfdCBpcGFydDsKKyAg ICB1bmlvbiB7IHVpbnQzMl90IHUzMjsgZmxvYXQgZjMyOyB9IGZwYXJ0OworCisgICAgc3dpdGNo IChoZHItPmNvZWZfZGF0YV90eXBlKSB7CisgICAgY2FzZSBSUFVfQ09FRkZfRklYRUQ6CisgICAg ICAgIGlwYXJ0ID0gZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsKKyAgICAgICAgZnBhcnQudTMyID0g Z2V0X2JpdHNfbG9uZyhnYiwgaGRyLT5jb2VmX2xvZzJfZGVub20pOworICAgICAgICByZXR1cm4g KGlwYXJ0IDw8IGhkci0+Y29lZl9sb2cyX2Rlbm9tKSArIGZwYXJ0LnUzMjsKKworICAgIGNhc2Ug UlBVX0NPRUZGX0ZMT0FUOgorICAgICAgICBmcGFydC51MzIgPSBnZXRfYml0c19sb25nKGdiLCAz Mik7CisgICAgICAgIHJldHVybiBmcGFydC5mMzIgKiAoMSA8PCBoZHItPmNvZWZfbG9nMl9kZW5v bSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7IC8qIHVucmVhY2hhYmxlICovCit9CisKK3N0YXRp YyBpbmxpbmUgaW50NjRfdCBnZXRfc2VfY29lZihHZXRCaXRDb250ZXh0ICpnYiwgY29uc3QgQVZE T1ZJUnB1RGF0YUhlYWRlciAqaGRyKQoreworICAgIGludDY0X3QgaXBhcnQ7CisgICAgdW5pb24g eyB1aW50MzJfdCB1MzI7IGZsb2F0IGYzMjsgfSBmcGFydDsKKworICAgIHN3aXRjaCAoaGRyLT5j b2VmX2RhdGFfdHlwZSkgeworICAgIGNhc2UgUlBVX0NPRUZGX0ZJWEVEOgorICAgICAgICBpcGFy dCA9IGdldF9zZV9nb2xvbWJfbG9uZyhnYik7CisgICAgICAgIGZwYXJ0LnUzMiA9IGdldF9iaXRz X2xvbmcoZ2IsIGhkci0+Y29lZl9sb2cyX2Rlbm9tKTsKKyAgICAgICAgcmV0dXJuIChpcGFydCA8 PCBoZHItPmNvZWZfbG9nMl9kZW5vbSkgKyBmcGFydC51MzI7CisKKyAgICBjYXNlIFJQVV9DT0VG Rl9GTE9BVDoKKyAgICAgICAgZnBhcnQudTMyID0gZ2V0X2JpdHNfbG9uZyhnYiwgMzIpOworICAg ICAgICByZXR1cm4gZnBhcnQuZjMyICogKDEgPDwgaGRyLT5jb2VmX2xvZzJfZGVub20pOworICAg IH0KKworICAgIHJldHVybiAwOyAvKiB1bnJlYWNoYWJsZSAqLworfQorCisjZGVmaW5lIFZBTElE QVRFKFZBUiwgTUlOLCBNQVgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoVkFSIDwg TUlOIHx8IFZBUiA+IE1BWCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgICAgICAgICBhdl9sb2cocy0+bG9nY3R4LCBBVl9MT0dfRVJST1IsICJSUFUg dmFsaWRhdGlvbiBmYWlsZWQ6ICIgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAjTUlO IiA8PSAiI1ZBUiIgPSAlZCA8PSAiI01BWCJcbiIsIChpbnQpIFZBUik7ICAgICAgICAgICAgICAg XAorICAgICAgICAgICAgZ290byBmYWlsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICB9IHdoaWxlICgwKQorCitpbnQgZmZfZG92aV9ycHVfcGFyc2UoRE9WSUNvbnRleHQgKnMsIGNv bnN0IHVpbnQ4X3QgKnJwdSwgc2l6ZV90IHJwdV9zaXplKQoreworICAgIEFWRE9WSVJwdURhdGFI ZWFkZXIgKmhkciA9ICZzLT5oZWFkZXI7CisgICAgR2V0Qml0Q29udGV4dCAqZ2IgPSAmKEdldEJp dENvbnRleHQpezB9OworICAgIERPVklWZHJSZWYgKnZkcjsKKyAgICBpbnQgcmV0OworCisgICAg dWludDhfdCBuYWxfcHJlZml4OworICAgIHVpbnQ4X3QgcnB1X3R5cGU7CisgICAgdWludDhfdCB2 ZHJfc2VxX2luZm9fcHJlc2VudDsKKyAgICB1aW50OF90IHZkcl9kbV9tZXRhZGF0YV9wcmVzZW50 OworICAgIHVpbnQ4X3QgdXNlX3ByZXZfdmRyX3JwdTsKKyAgICB1aW50OF90IHVzZV9ubHE7Cisg ICAgdWludDhfdCBwcm9maWxlOworICAgIGlmICgocmV0ID0gaW5pdF9nZXRfYml0czgoZ2IsIHJw dSwgcnB1X3NpemUpKSA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICAvKiBSUFUgaGVh ZGVyLCBjb21tb24gdmFsdWVzICovCisgICAgbmFsX3ByZWZpeCA9IGdldF9iaXRzKGdiLCA4KTsK KyAgICBWQUxJREFURShuYWxfcHJlZml4LCAyNSwgMjUpOworICAgIHJwdV90eXBlID0gZ2V0X2Jp dHMoZ2IsIDYpOworICAgIGlmIChycHVfdHlwZSAhPSAyKSB7CisgICAgICAgIGF2X2xvZyhzLT5s b2djdHgsIEFWX0xPR19XQVJOSU5HLCAiVW5yZWNvZ25pemVkIFJQVSB0eXBlICIKKyAgICAgICAg ICAgICAgICIlIlBSSXU4IiwgaWdub3JpbmdcbiIsIHJwdV90eXBlKTsKKyAgICAgICAgcmV0dXJu IDA7CisgICAgfQorCisgICAgaGRyLT5ycHVfdHlwZSA9IHJwdV90eXBlOworICAgIGhkci0+cnB1 X2Zvcm1hdCA9IGdldF9iaXRzKGdiLCAxMSk7CisKKyAgICAvKiBWYWx1ZXMgc3BlY2lmaWMgdG8g UlBVIHR5cGUgMiAqLworICAgIGhkci0+dmRyX3JwdV9wcm9maWxlID0gZ2V0X2JpdHMoZ2IsIDQp OworICAgIGhkci0+dmRyX3JwdV9sZXZlbCA9IGdldF9iaXRzKGdiLCA0KTsKKworICAgIHZkcl9z ZXFfaW5mb19wcmVzZW50ID0gZ2V0X2JpdHMxKGdiKTsKKyAgICBpZiAodmRyX3NlcV9pbmZvX3By ZXNlbnQpIHsKKyAgICAgICAgaGRyLT5jaHJvbWFfcmVzYW1wbGluZ19leHBsaWNpdF9maWx0ZXJf ZmxhZyA9IGdldF9iaXRzMShnYik7CisgICAgICAgIGhkci0+Y29lZl9kYXRhX3R5cGUgPSBnZXRf Yml0cyhnYiwgMik7CisgICAgICAgIFZBTElEQVRFKGhkci0+Y29lZl9kYXRhX3R5cGUsIFJQVV9D T0VGRl9GSVhFRCwgUlBVX0NPRUZGX0ZMT0FUKTsKKyAgICAgICAgc3dpdGNoIChoZHItPmNvZWZf ZGF0YV90eXBlKSB7CisgICAgICAgIGNhc2UgUlBVX0NPRUZGX0ZJWEVEOgorICAgICAgICAgICAg aGRyLT5jb2VmX2xvZzJfZGVub20gPSBnZXRfdWVfZ29sb21iKGdiKTsKKyAgICAgICAgICAgIFZB TElEQVRFKGhkci0+Y29lZl9sb2cyX2Rlbm9tLCAxMywgMzIpOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIGNhc2UgUlBVX0NPRUZGX0ZMT0FUOgorICAgICAgICAgICAgaGRyLT5jb2VmX2xv ZzJfZGVub20gPSAzMjsgLyogYXJiaXRyYXJ5LCBjaG9vc2UgbWF4aW11bSBwcmVjaXNpb24gKi8K KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaGRyLT52ZHJfcnB1X25v cm1hbGl6ZWRfaWRjID0gZ2V0X2JpdHMoZ2IsIDIpOworICAgICAgICBoZHItPmJsX3ZpZGVvX2Z1 bGxfcmFuZ2VfZmxhZyA9IGdldF9iaXRzMShnYik7CisKKyAgICAgICAgaWYgKChoZHItPnJwdV9m b3JtYXQgJiAweDcwMCkgPT0gMCkgeworICAgICAgICAgICAgaW50IGJsX2JpdF9kZXB0aF9taW51 czggPSBnZXRfdWVfZ29sb21iXzMxKGdiKTsKKyAgICAgICAgICAgIGludCBlbF9iaXRfZGVwdGhf bWludXM4ID0gZ2V0X3VlX2dvbG9tYl8zMShnYik7CisgICAgICAgICAgICBpbnQgdmRyX2JpdF9k ZXB0aF9taW51czggPSBnZXRfdWVfZ29sb21iXzMxKGdiKTsKKyAgICAgICAgICAgIFZBTElEQVRF KGJsX2JpdF9kZXB0aF9taW51czgsIDAsIDgpOworICAgICAgICAgICAgVkFMSURBVEUoZWxfYml0 X2RlcHRoX21pbnVzOCwgMCwgOCk7CisgICAgICAgICAgICBWQUxJREFURSh2ZHJfYml0X2RlcHRo X21pbnVzOCwgMCwgOCk7CisgICAgICAgICAgICBoZHItPmJsX2JpdF9kZXB0aCA9IGJsX2JpdF9k ZXB0aF9taW51czggKyA4OworICAgICAgICAgICAgaGRyLT5lbF9iaXRfZGVwdGggPSBlbF9iaXRf ZGVwdGhfbWludXM4ICsgODsKKyAgICAgICAgICAgIGhkci0+dmRyX2JpdF9kZXB0aCA9IHZkcl9i aXRfZGVwdGhfbWludXM4ICsgODsKKyAgICAgICAgICAgIGhkci0+c3BhdGlhbF9yZXNhbXBsaW5n X2ZpbHRlcl9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICAgICAgICAgIHNraXBfYml0cyhnYiwg Myk7IC8qIHJlc2VydmVkX3plcm9fM2JpdHMgKi8KKyAgICAgICAgICAgIGhkci0+ZWxfc3BhdGlh bF9yZXNhbXBsaW5nX2ZpbHRlcl9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICAgICAgICAgIGhk ci0+ZGlzYWJsZV9yZXNpZHVhbF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICAgICAgfQorICAg IH0KKworICAgIGlmICghaGRyLT5ibF9iaXRfZGVwdGgpIHsKKyAgICAgICAgYXZfbG9nKHMtPmxv Z2N0eCwgQVZfTE9HX0VSUk9SLCAiTWlzc2luZyBSUFUgVkRSIHNlcXVlbmNlIGluZm8/XG4iKTsK KyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHZkcl9kbV9tZXRhZGF0YV9wcmVzZW50 ID0gZ2V0X2JpdHMxKGdiKTsKKyAgICB1c2VfcHJldl92ZHJfcnB1ID0gZ2V0X2JpdHMxKGdiKTsK KyAgICB1c2VfbmxxID0gKGhkci0+cnB1X2Zvcm1hdCAmIDB4NzAwKSA9PSAwICYmICFoZHItPmRp c2FibGVfcmVzaWR1YWxfZmxhZzsKKworICAgIHByb2ZpbGUgPSBzLT5kdl9wcm9maWxlID8gcy0+ ZHZfcHJvZmlsZSA6IGd1ZXNzX3Byb2ZpbGUoaGRyKTsKKyAgICBpZiAocHJvZmlsZSA9PSA1ICYm IHVzZV9ubHEpIHsKKyAgICAgICAgYXZfbG9nKHMtPmxvZ2N0eCwgQVZfTE9HX0VSUk9SLCAiUHJv ZmlsZSA1IFJQVXMgc2hvdWxkIG5vdCB1c2UgTkxRXG4iKTsKKyAgICAgICAgZ290byBmYWlsOwor ICAgIH0KKworICAgIGlmICh1c2VfcHJldl92ZHJfcnB1KSB7CisgICAgICAgIGludCBwcmV2X3Zk cl9ycHVfaWQgPSBnZXRfdWVfZ29sb21iXzMxKGdiKTsKKyAgICAgICAgVkFMSURBVEUocHJldl92 ZHJfcnB1X2lkLCAwLCBET1ZJX01BWF9ETV9JRCk7CisgICAgICAgIGlmICghcy0+dmRyX3JlZltw cmV2X3Zkcl9ycHVfaWRdKSB7CisgICAgICAgICAgICBhdl9sb2cocy0+bG9nY3R4LCBBVl9MT0df RVJST1IsICJVbmtub3duIHByZXZpb3VzIFJQVSBJRDogJXVcbiIsCisgICAgICAgICAgICAgICAg ICAgcHJldl92ZHJfcnB1X2lkKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQor ICAgICAgICB2ZHIgPSAoRE9WSVZkclJlZiAqKSBzLT52ZHJfcmVmW3ByZXZfdmRyX3JwdV9pZF0t PmRhdGE7CisgICAgICAgIHMtPm1hcHBpbmcgPSAmdmRyLT5tYXBwaW5nOworICAgIH0gZWxzZSB7 CisgICAgICAgIGludCB2ZHJfcnB1X2lkID0gZ2V0X3VlX2dvbG9tYl8zMShnYik7CisgICAgICAg IFZBTElEQVRFKHZkcl9ycHVfaWQsIDAsIERPVklfTUFYX0RNX0lEKTsKKyAgICAgICAgaWYgKCFz LT52ZHJfcmVmW3Zkcl9ycHVfaWRdKSB7CisgICAgICAgICAgICBzLT52ZHJfcmVmW3Zkcl9ycHVf aWRdID0gYXZfYnVmZmVyX2FsbG9jeihzaXplb2YoRE9WSVZkclJlZikpOworICAgICAgICAgICAg aWYgKCFzLT52ZHJfcmVmW3Zkcl9ycHVfaWRdKQorICAgICAgICAgICAgICAgIHJldHVybiBBVkVS Uk9SKEVOT01FTSk7CisgICAgICAgIH0KKworICAgICAgICB2ZHIgPSAoRE9WSVZkclJlZiAqKSBz LT52ZHJfcmVmW3Zkcl9ycHVfaWRdLT5kYXRhOworICAgICAgICBzLT5tYXBwaW5nID0gJnZkci0+ bWFwcGluZzsKKworICAgICAgICB2ZHItPm1hcHBpbmcudmRyX3JwdV9pZCA9IHZkcl9ycHVfaWQ7 CisgICAgICAgIHZkci0+bWFwcGluZy5tYXBwaW5nX2NvbG9yX3NwYWNlID0gZ2V0X3VlX2dvbG9t Yl8zMShnYik7CisgICAgICAgIHZkci0+bWFwcGluZy5tYXBwaW5nX2Nocm9tYV9mb3JtYXRfaWRj ID0gZ2V0X3VlX2dvbG9tYl8zMShnYik7CisKKyAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCAz OyBjKyspIHsKKyAgICAgICAgICAgIEFWRE9WSVJlc2hhcGluZ0N1cnZlICpjdXJ2ZSA9ICZ2ZHIt Pm1hcHBpbmcuY3VydmVzW2NdOworICAgICAgICAgICAgaW50IG51bV9waXZvdHNfbWludXNfMiA9 IGdldF91ZV9nb2xvbWJfMzEoZ2IpOworICAgICAgICAgICAgaW50IHBpdm90ID0gMDsKKworICAg ICAgICAgICAgVkFMSURBVEUobnVtX3Bpdm90c19taW51c18yLCAwLCBBVl9ET1ZJX01BWF9QSUVD RVMgLSAxKTsKKyAgICAgICAgICAgIGN1cnZlLT5udW1fcGl2b3RzID0gbnVtX3Bpdm90c19taW51 c18yICsgMjsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY3VydmUtPm51bV9waXZv dHM7IGkrKykgeworICAgICAgICAgICAgICAgIHBpdm90ICs9IGdldF9iaXRzKGdiLCBoZHItPmJs X2JpdF9kZXB0aCk7CisgICAgICAgICAgICAgICAgY3VydmUtPnBpdm90c1tpXSA9IGF2X2NsaXBf dWludDE2KHBpdm90KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh1 c2VfbmxxKSB7CisgICAgICAgICAgICB2ZHItPm1hcHBpbmcubmxxX21ldGhvZF9pZGMgPSBnZXRf Yml0cyhnYiwgMyk7CisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFRoZSBwYXRlbnQg bWVudGlvbnMgYW5vdGhlciBsZWdhbCB2YWx1ZSwgTkxRX01VX0xBVywgYnV0IGl0J3MKKyAgICAg ICAgICAgICAqIG5vdCBkb2N1bWVudGVkIGFueXdoZXJlIGhvdyB0byBwYXJzZSBvciBhcHBseSB0 aGF0IHR5cGUgb2YgTkxRLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBWQUxJREFURSh2 ZHItPm1hcHBpbmcubmxxX21ldGhvZF9pZGMsIDAsIEFWX0RPVklfTkxRX0xJTkVBUl9EWik7Cisg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2ZHItPm1hcHBpbmcubmxxX21ldGhvZF9pZGMg PSBBVl9ET1ZJX05MUV9OT05FOworICAgICAgICB9CisKKyAgICAgICAgdmRyLT5tYXBwaW5nLm51 bV94X3BhcnRpdGlvbnMgPSBnZXRfdWVfZ29sb21iX2xvbmcoZ2IpICsgMTsKKyAgICAgICAgdmRy LT5tYXBwaW5nLm51bV95X3BhcnRpdGlvbnMgPSBnZXRfdWVfZ29sb21iX2xvbmcoZ2IpICsgMTsK KyAgICAgICAgLyogRW5kIG9mIHJwdV9kYXRhX2hlYWRlcigpLCBzdGFydCBvZiB2ZHJfcnB1X2Rh dGFfcGF5bG9hZCgpICovCisKKyAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCAzOyBjKyspIHsK KyAgICAgICAgICAgIEFWRE9WSVJlc2hhcGluZ0N1cnZlICpjdXJ2ZSA9ICZ2ZHItPm1hcHBpbmcu Y3VydmVzW2NdOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjdXJ2ZS0+bnVtX3Bp dm90cyAtIDE7IGkrKykgeworICAgICAgICAgICAgICAgIGludCBtYXBwaW5nX2lkYyA9IGdldF91 ZV9nb2xvbWJfMzEoZ2IpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKG1hcHBpbmdfaWRjLCAw LCAxKTsKKyAgICAgICAgICAgICAgICBjdXJ2ZS0+bWFwcGluZ19pZGNbaV0gPSBtYXBwaW5nX2lk YzsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1hcHBpbmdfaWRjKSB7CisgICAgICAgICAgICAg ICAgY2FzZSBBVl9ET1ZJX01BUFBJTkdfUE9MWU5PTUlBTDogeworICAgICAgICAgICAgICAgICAg ICBpbnQgcG9seV9vcmRlcl9taW51czEgPSBnZXRfdWVfZ29sb21iXzMxKGdiKTsKKyAgICAgICAg ICAgICAgICAgICAgVkFMSURBVEUocG9seV9vcmRlcl9taW51czEsIDAsIDEpOworICAgICAgICAg ICAgICAgICAgICBjdXJ2ZS0+cG9seV9vcmRlcltpXSA9IHBvbHlfb3JkZXJfbWludXMxICsgMTsK KyAgICAgICAgICAgICAgICAgICAgaWYgKHBvbHlfb3JkZXJfbWludXMxID09IDApIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGludCBsaW5lYXJfaW50ZXJwX2ZsYWcgPSBnZXRfYml0czEoZ2Ip OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVhcl9pbnRlcnBfZmxhZykgeworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxhY2sgb2YgZG9jdW1lbnRhdGlvbi9zYW1wbGVz ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZwcml2X3JlcXVlc3Rfc2FtcGxlKHMt PmxvZ2N0eCwgIkRvbGJ5IFZpc2lvbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJsaW5lYXIgaW50ZXJwb2xhdGlvbiIpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZmX2RvdmlfY3R4X3VucmVmKHMpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmb3Ig KGludCBrID0gMDsgayA8PSBjdXJ2ZS0+cG9seV9vcmRlcltpXTsgaysrKQorICAgICAgICAgICAg ICAgICAgICAgICAgY3VydmUtPnBvbHlfY29lZltpXVtrXSA9IGdldF9zZV9jb2VmKGdiLCBoZHIp OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgY2FzZSBBVl9ET1ZJX01BUFBJTkdfTU1SOiB7CisgICAgICAgICAgICAgICAgICAg IGludCBtbXJfb3JkZXJfbWludXMxID0gZ2V0X2JpdHMoZ2IsIDIpOworICAgICAgICAgICAgICAg ICAgICBWQUxJREFURShtbXJfb3JkZXJfbWludXMxLCAwLCAyKTsKKyAgICAgICAgICAgICAgICAg ICAgY3VydmUtPm1tcl9vcmRlcltpXSA9IG1tcl9vcmRlcl9taW51czEgKyAxOworICAgICAgICAg ICAgICAgICAgICBjdXJ2ZS0+bW1yX2NvbnN0YW50W2ldID0gZ2V0X3NlX2NvZWYoZ2IsIGhkcik7 CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY3VydmUtPm1tcl9vcmRl cltpXTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8 IDc7IGsrKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZS0+bW1yX2NvZWZbaV1b al1ba10gPSBnZXRfc2VfY29lZihnYiwgaGRyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZV9ubHEpIHsK KyAgICAgICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgMzsgYysrKSB7CisgICAgICAgICAgICAg ICAgQVZET1ZJTkxRUGFyYW1zICpubHEgPSAmdmRyLT5tYXBwaW5nLm5scVtjXTsKKyAgICAgICAg ICAgICAgICBubHEtPm5scV9vZmZzZXQgPSBnZXRfYml0cyhnYiwgaGRyLT5lbF9iaXRfZGVwdGgp OworICAgICAgICAgICAgICAgIG5scS0+dmRyX2luX21heCA9IGdldF91ZV9jb2VmKGdiLCBoZHIp OworICAgICAgICAgICAgICAgIHN3aXRjaCAodmRyLT5tYXBwaW5nLm5scV9tZXRob2RfaWRjKSB7 CisgICAgICAgICAgICAgICAgY2FzZSBBVl9ET1ZJX05MUV9MSU5FQVJfRFo6CisgICAgICAgICAg ICAgICAgICAgIG5scS0+bGluZWFyX2RlYWR6b25lX3Nsb3BlID0gZ2V0X3VlX2NvZWYoZ2IsIGhk cik7CisgICAgICAgICAgICAgICAgICAgIG5scS0+bGluZWFyX2RlYWR6b25lX3RocmVzaG9sZCA9 IGdldF91ZV9jb2VmKGdiLCBoZHIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo dmRyX2RtX21ldGFkYXRhX3ByZXNlbnQpIHsKKyAgICAgICAgQVZET1ZJQ29sb3JNZXRhZGF0YSAq Y29sb3I7CisgICAgICAgIGludCBhZmZlY3RlZF9kbV9pZCA9IGdldF91ZV9nb2xvbWJfMzEoZ2Ip OworICAgICAgICBpbnQgY3VycmVudF9kbV9pZCA9IGdldF91ZV9nb2xvbWJfMzEoZ2IpOworICAg ICAgICBWQUxJREFURShhZmZlY3RlZF9kbV9pZCwgMCwgRE9WSV9NQVhfRE1fSUQpOworICAgICAg ICBWQUxJREFURShjdXJyZW50X2RtX2lkLCAwLCBET1ZJX01BWF9ETV9JRCk7CisgICAgICAgIGlm ICghcy0+dmRyX3JlZlthZmZlY3RlZF9kbV9pZF0pIHsKKyAgICAgICAgICAgIHMtPnZkcl9yZWZb YWZmZWN0ZWRfZG1faWRdID0gYXZfYnVmZmVyX2FsbG9jeihzaXplb2YoRE9WSVZkclJlZikpOwor ICAgICAgICAgICAgaWYgKCFzLT52ZHJfcmVmW2FmZmVjdGVkX2RtX2lkXSkKKyAgICAgICAgICAg ICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFz LT52ZHJfcmVmW2N1cnJlbnRfZG1faWRdKSB7CisgICAgICAgICAgICBhdl9sb2cocy0+bG9nY3R4 LCBBVl9MT0dfRVJST1IsICJVbmtub3duIHByZXZpb3VzIFJQVSBETSBJRDogJXVcbiIsCisgICAg ICAgICAgICAgICAgICAgY3VycmVudF9kbV9pZCk7CisgICAgICAgICAgICBnb3RvIGZhaWw7Cisg ICAgICAgIH0KKworICAgICAgICAvKiBVcGRhdGUgY3VycmVudCBwb2ludGVyIGJhc2VkIG9uIGN1 cnJlbnRfZG1faWQgKi8KKyAgICAgICAgdmRyID0gKERPVklWZHJSZWYgKikgcy0+dmRyX3JlZltj dXJyZW50X2RtX2lkXS0+ZGF0YTsKKyAgICAgICAgcy0+Y29sb3IgPSAmdmRyLT5jb2xvcjsKKwor ICAgICAgICAvKiBVcGRhdGUgdmFsdWVzIG9mIGFmZmVjdGVkX2RtX2lkICovCisgICAgICAgIHZk ciA9IChET1ZJVmRyUmVmICopIHMtPnZkcl9yZWZbYWZmZWN0ZWRfZG1faWRdLT5kYXRhOworICAg ICAgICBjb2xvciA9ICZ2ZHItPmNvbG9yOworICAgICAgICBjb2xvci0+ZG1fbWV0YWRhdGFfaWQg PSBhZmZlY3RlZF9kbV9pZDsKKyAgICAgICAgY29sb3ItPnNjZW5lX3JlZnJlc2hfZmxhZyA9IGdl dF91ZV9nb2xvbWJfMzEoZ2IpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDk7IGkrKykK KyAgICAgICAgICAgIGNvbG9yLT55Y2NfdG9fcmdiX21hdHJpeFtpXSA9IGF2X21ha2VfcShnZXRf c2JpdHMoZ2IsIDE2KSwgMSA8PCAxMyk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsg aSsrKSB7CisgICAgICAgICAgICBpbnQgZGVub20gPSBwcm9maWxlID09IDQgPyAoMSA8PCAzMCkg OiAoMSA8PCAyOCk7CisgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBnZXRfYml0c19sb25n KGdiLCAzMik7CisgICAgICAgICAgICBpZiAob2Zmc2V0ID4gSU5UX01BWCkgeworICAgICAgICAg ICAgICAgIC8qIEVuc3VyZSB0aGUgcmVzdWx0IGZpdHMgaW5zaWRlIEFWUmF0aW9uYWwgKi8KKyAg ICAgICAgICAgICAgICBvZmZzZXQgPj49IDE7CisgICAgICAgICAgICAgICAgZGVub20gPj49IDE7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb2xvci0+eWNjX3RvX3JnYl9vZmZzZXRbaV0g PSBhdl9tYWtlX3Eob2Zmc2V0LCBkZW5vbSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCA5OyBpKyspCisgICAgICAgICAgICBjb2xvci0+cmdiX3RvX2xtc19tYXRyaXhb aV0gPSBhdl9tYWtlX3EoZ2V0X3NiaXRzKGdiLCAxNiksIDEgPDwgMTQpOworCisgICAgICAgIGNv bG9yLT5zaWduYWxfZW90ZiA9IGdldF9iaXRzKGdiLCAxNik7CisgICAgICAgIGNvbG9yLT5zaWdu YWxfZW90Zl9wYXJhbTAgPSBnZXRfYml0cyhnYiwgMTYpOworICAgICAgICBjb2xvci0+c2lnbmFs X2VvdGZfcGFyYW0xID0gZ2V0X2JpdHMoZ2IsIDE2KTsKKyAgICAgICAgY29sb3ItPnNpZ25hbF9l b3RmX3BhcmFtMiA9IGdldF9iaXRzX2xvbmcoZ2IsIDMyKTsKKyAgICAgICAgY29sb3ItPnNpZ25h bF9iaXRfZGVwdGggPSBnZXRfYml0cyhnYiwgNSk7CisgICAgICAgIFZBTElEQVRFKGNvbG9yLT5z aWduYWxfYml0X2RlcHRoLCA4LCAxNik7CisgICAgICAgIGNvbG9yLT5zaWduYWxfY29sb3Jfc3Bh Y2UgPSBnZXRfYml0cyhnYiwgMik7CisgICAgICAgIGNvbG9yLT5zaWduYWxfY2hyb21hX2Zvcm1h dCA9IGdldF9iaXRzKGdiLCAyKTsKKyAgICAgICAgY29sb3ItPnNpZ25hbF9mdWxsX3JhbmdlX2Zs YWcgPSBnZXRfYml0cyhnYiwgMik7CisgICAgICAgIGNvbG9yLT5zb3VyY2VfbWluX3BxID0gZ2V0 X2JpdHMoZ2IsIDEyKTsKKyAgICAgICAgY29sb3ItPnNvdXJjZV9tYXhfcHEgPSBnZXRfYml0cyhn YiwgMTIpOworICAgICAgICBjb2xvci0+c291cmNlX2RpYWdvbmFsID0gZ2V0X2JpdHMoZ2IsIDEw KTsKKyAgICB9CisKKyAgICAvKiBGSVhNRTogdmVyaWZ5IENSQzMyLCByZXF1aXJlcyBpbXBsZW1l bnRhdGlvbiBvZiBBVl9DUkNfMzJfTVBFR18yICovCisgICAgcmV0dXJuIDA7CisKK2ZhaWw6Cisg ICAgZmZfZG92aV9jdHhfdW5yZWYocyk7IC8qIGRvbid0IGxlYWsgcG90ZW50aWFsbHkgaW52YWxp ZCBzdGF0ZSAqLworICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cit9CmRpZmYgLS1naXQgYS9s aWJhdmNvZGVjL2RvdmlfcnB1LmggYi9saWJhdmNvZGVjL2RvdmlfcnB1LmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZjZjYTViYmJjNQotLS0gL2Rldi9udWxsCisrKyBi L2xpYmF2Y29kZWMvZG92aV9ycHUuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogRG9sYnkgVmlz aW9uIFJQVSBkZWNvZGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEphbiBFa3N0csO2bQor ICogQ29weXJpZ2h0IChDKSAyMDIxIE5pa2xhcyBIYWFzCisgKgorICogVGhpcyBmaWxlIGlzIHBh cnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhl IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog RkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRo IEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlv biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjEx MC0xMzAxIFVTQQorICovCisKKyNpZm5kZWYgQVZDT0RFQ19ET1ZJX1JQVV9ICisjZGVmaW5lIEFW Q09ERUNfRE9WSV9SUFVfSAorCisjaW5jbHVkZSAibGliYXZ1dGlsL2RvdmlfbWV0YS5oIgorI2lu Y2x1ZGUgImxpYmF2dXRpbC9mcmFtZS5oIgorCisjZGVmaW5lIERPVklfTUFYX0RNX0lEIDE1Cit0 eXBlZGVmIHN0cnVjdCBET1ZJQ29udGV4dCB7CisgICAgdm9pZCAqbG9nY3R4OworCisgICAgLyoq CisgICAgICogQ3VycmVudGx5IGFjdGl2ZSBSUFUgZGF0YSBoZWFkZXIsIHVwZGF0ZXMgb24gZXZl cnkgZG92aV9ycHVfcGFyc2UoKS4KKyAgICAgKi8KKyAgICBBVkRPVklScHVEYXRhSGVhZGVyIGhl YWRlcjsKKworICAgIC8qKgorICAgICAqIEN1cnJlbnRseSBhY3RpdmUgZGF0YSBtYXBwaW5ncywg b3IgTlVMTC4gUG9pbnRzIGludG8gbWVtb3J5IG93bmVkIGJ5IHRoZQorICAgICAqIGNvcnJlc3Bv bmRpbmcgcnB1L3Zkcl9yZWYsIHdoaWNoIGJlY29tZXMgaW52YWxpZCBvbiB0aGUgbmV4dCBjYWxs IHRvCisgICAgICogZG92aV9ycHVfcGFyc2UuCisgICAgICovCisgICAgY29uc3QgQVZET1ZJRGF0 YU1hcHBpbmcgKm1hcHBpbmc7CisgICAgY29uc3QgQVZET1ZJQ29sb3JNZXRhZGF0YSAqY29sb3I7 CisKKyAgICAvKioKKyAgICAgKiBQcml2YXRlIGZpZWxkcyBpbnRlcm5hbCB0byBkb3ZpX3JwdS5j CisgICAgICovCisgICAgQVZCdWZmZXJSZWYgKnZkcl9yZWZbRE9WSV9NQVhfRE1fSUQrMV07Cisg ICAgdWludDhfdCBkdl9wcm9maWxlOworCit9IERPVklDb250ZXh0OworCitpbnQgZmZfZG92aV9j dHhfcmVwbGFjZShET1ZJQ29udGV4dCAqcywgY29uc3QgRE9WSUNvbnRleHQgKnMwKTsKKworLyoq CisgKiBDb21wbGV0ZWx5IHJlc2V0IGEgRE9WSUNvbnRleHQsIHByZXNlcnZpbmcgb25seSBsb2dj dHguCisgKi8KK3ZvaWQgZmZfZG92aV9jdHhfdW5yZWYoRE9WSUNvbnRleHQgKnMpOworCisvKioK KyAqIFBhcnRpYWxseSByZXNldCB0aGUgaW50ZXJuYWwgc3RhdGUuIFJlc2V0cyBwZXItZnJhbWUg c3RhdGUgd2hpbGUgcHJlc2VydmluZworICogZmllbGRzIHBhcnNlZCBmcm9tIHRoZSBjb25maWd1 cmF0aW9uIHJlY29yZC4KKyAqLwordm9pZCBmZl9kb3ZpX2N0eF9mbHVzaChET1ZJQ29udGV4dCAq cyk7CisKKy8qKgorICogUmVhZCB0aGUgY29udGVudHMgb2YgYW4gQVZET1ZJRGVjb2RlckNvbmZp Z3VyYXRpb25SZWNvcmQgKHVzdWFsbHkgcHJvdmlkZWQKKyAqIGJ5IHN0cmVhbSBzaWRlIGRhdGEp IGFuZCB1cGRhdGUgaW50ZXJuYWwgc3RhdGUgYWNjb3JkaW5nbHkuCisgKi8KK3ZvaWQgZmZfZG92 aV91cGRhdGVfY2ZnKERPVklDb250ZXh0ICpzLCBjb25zdCBBVkRPVklEZWNvZGVyQ29uZmlndXJh dGlvblJlY29yZCAqY2ZnKTsKKworLyoqCisgKiBQYXJzZSB0aGUgY29udGVudHMgb2YgYSBEb3Zp IFJQVSBOQUwgYW5kIHVwZGF0ZSB0aGUgcGFyc2VkIHZhbHVlcyBpbiB0aGUKKyAqIERPVklDb250 ZXh0IHN0cnVjdC4KKyAqCisgKiBSZXR1cm5zIDAgb3IgYW4gZXJyb3IgY29kZS4KKyAqLworaW50 IGZmX2RvdmlfcnB1X3BhcnNlKERPVklDb250ZXh0ICpzLCBjb25zdCB1aW50OF90ICpycHUsIHNp emVfdCBycHVfc2l6ZSk7CisKKy8qKgorICogQXR0YWNoIHRoZSBkZWNvZGVkIEFWRE9WSU1ldGFk YXRhIGFzIHNpZGUgZGF0YSB0byBhbiBBVkZyYW1lLgorICovCitpbnQgZmZfZG92aV9hdHRhY2hf c2lkZV9kYXRhKERPVklDb250ZXh0ICpzLCBBVkZyYW1lICpmcmFtZSk7CisKKyNlbmRpZiAvKiBB VkNPREVDX0RPVklfUlBVX0ggKi8KLS0gCjIuMzQuMQoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWct ZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1w ZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1w ZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=