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 C801741214 for ; Tue, 19 Apr 2022 12:48:02 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 264C968B373; Tue, 19 Apr 2022 15:47:41 +0300 (EEST) Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4281668B34F for ; Tue, 19 Apr 2022 15:47:32 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id EAE2E49E1E; Tue, 19 Apr 2022 14:47:31 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1650372452; bh=G5ZTZoSeVq6zi07UKk+NFU6OHocGaL2Z5cjDh6hw5h8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=AHknVTyoFkdEf3RqcbpvyPQ2rrlDQyBeIAc32N28hzQArMK/1seppJq0QpR87dsDa /IqVhDDB9aFFNoWWLNA6j7Md0X23diQ+8E9IJU0+veKI6RTxjUXepS2rGpdSsszwPk /uhBY0K9JER3v0Em03Yfci7OHQsFOFHVYCzXgko0= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Tue, 19 Apr 2022 14:46:55 +0200 Message-Id: <20220419124656.121638-3-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220419124656.121638-1-ffmpeg@haasn.xyz> References: <20220419124656.121638-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 3/5] lavfi: add ICC profile support via lcms2 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+CgpUaGlzIGludHJvZHVjZXMgYW4gb3B0 aW9uYWwgZGVwZW5kZW5jeSBvbiBsY21zMiBpbnRvIEZGbXBlZy4gbGNtczIgaXMgYQp3aWRlbHkg dXNlZCBsaWJyYXJ5IGZvciBJQ0MgcHJvZmlsZSBoYW5kbGluZywgd2hpY2ggYXBhcnQgZnJvbSBi ZWluZwp1c2VkIGluIGFsbW9zdCBhbGwgbWFqb3IgaW1hZ2UgcHJvY2Vzc2luZyBwcm9ncmFtcyBh bmQgdmlkZW8gcGxheWVycywKaGFzIGFsc28gYmVlbiBkZXBsb3llZCBpbiBicm93c2Vycy4gQXMg c3VjaCwgaXQncyBib3RoIHdpZGVseSBhdmFpbGFibGUKYW5kIHdlbGwtdGVzdGVkLgoKQWRkIGEg ZmV3IGhlbHBlcnMgdG8gY292ZXIgb3VyIG1ham9yIHVzZSBjYXNlcy4gVGhpcyBjb21taXQgbWVy ZWx5CmludHJvZHVjZXMgdGhlIGhlbHBlcnMgKGFuZCBjb25maWd1cmUgY2hlY2spLCBldmVuIHRo b3VnaCBub3RoaW5nIHVzZXMKdGhlbSB5ZXQuCgpJdCdzIHdvcnRoIHBvaW50aW5nIG91dCB0aGF0 IHRoZSByZWFzb24gdGhlIGNtc1RvbmVDdXJ2ZXMgZm9yIGVhY2gKQVZDT0xfVFJDIGFyZSBjYWNo ZWQgaW5zaWRlIHRoZSBjb250ZXh0LCBpcyBiZWNhdXNlIGNvbnN0cnVjdGluZyBhCmNtc1RvbmVD dXJ2ZSByZXF1aXJlcyBldmFsdWF0aW5nIHRoZSBjdXJ2ZSBhdCA0MDk2IChieSBkZWZhdWx0KSBn cmlkCnBvaW50cyBhbmQgY29uc3RydWN0aW5nIGEgTFVULiBTbywgd2UgaWRlYWxseSBvbmx5IHdh bnQgdG8gZG8gdGhpcyBvbmNlCnBlciBjdXJ2ZS4gVGhpcyBtYXR0ZXJzIGZvciBlLmcuIGZmX2lj Y19wcm9maWxlX2RldGVjdF90cmFuc2Zlciwgd2hpY2gKZXNzZW50aWFsbHkgY29tcGFyZXMgYSBw cm9maWxlIGFnYWluc3QgYWxsIG9mIHRoZXNlIGdlbmVyYXRlZCBMVVRzLgpSZS1nZW5lcmF0aW5n IHRoZSBMVVRzIGZvciBldmVyeSBpdGVyYXRpb24gd291bGQgYmUgdW5uZWNlc3NhcmlseQp3YXN0 ZWZ1bC4KClRoZSBzYW1lIGNvbnNpZGVyYXRpb24gZG9lcyBub3QgYXBwbHkgdG8gZS5nLiBjbXND cmVhdGUqUHJvZmlsZSwgd2hpY2gKaXMgYSB2ZXJ5IGxpZ2h0d2VpZ2h0IG9wZXJhdGlvbiBqdXN0 IGludm9sdmluZyBzdHJ1Y3QgYWxsb2NhdGlvbiBhbmQKc2V0dGluZyBhIGZldyBwb2ludGVycy4K ClRoZSBjdXRvZmYgdmFsdWUgb2YgMC4wMSB3YXMgZGV0ZXJtaW5lZCBieSBleHBlcmltZW50YXRp b24uIFRoZSBsb3dlc3QKImZhbHNlIHBvc2l0aXZlIiBkZWx0YSBJIHNhdyBpbiBwcmFjdGljZSB3 YXMgMC4xMywgYW5kIHRoZSBsYXJnZXN0CiJmYWxzZSBuZWdhdGl2ZSIgZGVsdGEgd2FzIDAuMDAw OC4gU28gYSB2YWx1ZSBvZiAwLjAxIHNpdHMgY29tZm9ydGFieQphbG1vc3QgZXhhY3RseSBpbiB0 aGUgbWlkZGxlLgoKU2lnbmVkLW9mZi1ieTogTmlrbGFzIEhhYXMgPGdpdEBoYWFzbi5kZXY+Ci0t LQogY29uZmlndXJlICAgICAgICAgICAgIHwgICAzICsKIGxpYmF2ZmlsdGVyL2ZmbGNtczIuYyB8 IDMxMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxpYmF2Zmls dGVyL2ZmbGNtczIuaCB8ICA4NyArKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNDAwIGlu c2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci9mZmxjbXMyLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci9mZmxjbXMyLmgKCmRpZmYgLS1naXQgYS9jb25m aWd1cmUgYi9jb25maWd1cmUKaW5kZXggMzU4YTYxNDg1NC4uYzg5NGVmYTYwMCAxMDA3NTUKLS0t IGEvY29uZmlndXJlCisrKyBiL2NvbmZpZ3VyZQpAQCAtMjE1LDYgKzIxNSw3IEBAIEV4dGVybmFs IGxpYnJhcnkgc3VwcG9ydDoKICAgLS1kaXNhYmxlLWljb252ICAgICAgICAgIGRpc2FibGUgaWNv bnYgW2F1dG9kZXRlY3RdCiAgIC0tZW5hYmxlLWpuaSAgICAgICAgICAgICBlbmFibGUgSk5JIHN1 cHBvcnQgW25vXQogICAtLWVuYWJsZS1sYWRzcGEgICAgICAgICAgZW5hYmxlIExBRFNQQSBhdWRp byBmaWx0ZXJpbmcgW25vXQorICAtLWVuYWJsZS1sY21zMiAgICAgICAgICAgZW5hYmxlIElDQyBw cm9maWxlIHN1cHBvcnQgdmlhIExpdHRsZUNNUyAyIFtub10KICAgLS1lbmFibGUtbGliYW9tICAg ICAgICAgIGVuYWJsZSBBVjEgdmlkZW8gZW5jb2RpbmcvZGVjb2RpbmcgdmlhIGxpYmFvbSBbbm9d CiAgIC0tZW5hYmxlLWxpYmFyaWJiMjQgICAgICBlbmFibGUgQVJJQiB0ZXh0IGFuZCBjYXB0aW9u IGRlY29kaW5nIHZpYSBsaWJhcmliYjI0IFtub10KICAgLS1lbmFibGUtbGliYXNzICAgICAgICAg IGVuYWJsZSBsaWJhc3Mgc3VidGl0bGVzIHJlbmRlcmluZywKQEAgLTE4MTMsNiArMTgxNCw3IEBA IEVYVEVSTkFMX0xJQlJBUllfTElTVD0iCiAgICAgZ251dGxzCiAgICAgam5pCiAgICAgbGFkc3Bh CisgICAgbGNtczIKICAgICBsaWJhb20KICAgICBsaWJhc3MKICAgICBsaWJibHVyYXkKQEAgLTY1 MDYsNiArNjUwOCw3IEBAIGVuYWJsZWQgZ21wICAgICAgICAgICAgICAgJiYgcmVxdWlyZSBnbXAg Z21wLmggbXB6X2V4cG9ydCAtbGdtcAogZW5hYmxlZCBnbnV0bHMgICAgICAgICAgICAmJiByZXF1 aXJlX3BrZ19jb25maWcgZ251dGxzIGdudXRscyBnbnV0bHMvZ251dGxzLmggZ251dGxzX2dsb2Jh bF9pbml0CiBlbmFibGVkIGpuaSAgICAgICAgICAgICAgICYmIHsgWyAkdGFyZ2V0X29zID0gImFu ZHJvaWQiIF0gJiYgY2hlY2tfaGVhZGVycyBqbmkuaCAmJiBlbmFibGVkIHB0aHJlYWRzIHx8IGRp ZSAiRVJST1I6IGpuaSBub3QgZm91bmQiOyB9CiBlbmFibGVkIGxhZHNwYSAgICAgICAgICAgICYm IHJlcXVpcmVfaGVhZGVycyAibGFkc3BhLmggZGxmY24uaCIKK2VuYWJsZWQgbGNtczIgICAgICAg ICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxjbXMyICJsY21zMiA+PSAyLjEzIiBsY21zMi5o IGNtc0NyZWF0ZUNvbnRleHQKIGVuYWJsZWQgbGliYW9tICAgICAgICAgICAgJiYgcmVxdWlyZV9w a2dfY29uZmlnIGxpYmFvbSAiYW9tID49IDEuMC4wIiBhb20vYW9tX2NvZGVjLmggYW9tX2NvZGVj X3ZlcnNpb24KIGVuYWJsZWQgbGliYXJpYmIyNCAgICAgICAgJiYgeyBjaGVja19wa2dfY29uZmln IGxpYmFyaWJiMjQgImFyaWJiMjQgPiAxLjAuMyIgImFyaWJiMjQvYXJpYmIyNC5oIiBhcmliX2lu c3RhbmNlX25ldyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZW5hYmxlZCBn cGwgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYmFyaWJiMjQgYXJpYmIyNCAiYXJpYmIyNC9hcmli YjI0LmgiIGFyaWJfaW5zdGFuY2VfbmV3OyB9IHx8CmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci9m ZmxjbXMyLmMgYi9saWJhdmZpbHRlci9mZmxjbXMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uZWZjN2NiNTE4OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2ZmlsdGVy L2ZmbGNtczIuYwpAQCAtMCwwICsxLDMxMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAyMiBO aWtsYXMgSGFhcworICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBl ZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0 aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0 LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRl ICJsaWJhdnV0aWwvY29sb3JfdXRpbHMuaCIKKworI2luY2x1ZGUgImZmbGNtczIuaCIKKworc3Rh dGljIHZvaWQgbG9nX2NiKGNtc0NvbnRleHQgY3R4LCBjbXNVSW50MzJOdW1iZXIgZXJyb3IsIGNv bnN0IGNoYXIgKnN0cikKK3sKKyAgICBGRkljY0NvbnRleHQgKnMgPSBjbXNHZXRDb250ZXh0VXNl ckRhdGEoY3R4KTsKKyAgICBhdl9sb2cocy0+YXZjdHgsIEFWX0xPR19FUlJPUiwgImxjbXMyOiBb JSJQUkl1MzIiXSAlc1xuIiwgZXJyb3IsIHN0cik7Cit9CisKK2ludCBmZl9pY2NfY29udGV4dF9p bml0KEZGSWNjQ29udGV4dCAqcywgdm9pZCAqYXZjdHgpCit7CisgICAgbWVtc2V0KHMsIDAsIHNp emVvZigqcykpOworICAgIHMtPmF2Y3R4ID0gYXZjdHg7CisgICAgcy0+Y3R4ID0gY21zQ3JlYXRl Q29udGV4dChOVUxMLCBzKTsKKyAgICBpZiAoIXMtPmN0eCkKKyAgICAgICAgcmV0dXJuIEFWRVJS T1IoRU5PTUVNKTsKKworICAgIGNtc1NldExvZ0Vycm9ySGFuZGxlclRIUihzLT5jdHgsIGxvZ19j Yik7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgZmZfaWNjX2NvbnRleHRfdW5pbml0KEZGSWNj Q29udGV4dCAqcykKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHMt PmN1cnZlcyk7IGkrKykKKyAgICAgICAgY21zRnJlZVRvbmVDdXJ2ZShzLT5jdXJ2ZXNbaV0pOwor ICAgIGNtc0RlbGV0ZUNvbnRleHQocy0+Y3R4KTsKKyAgICBtZW1zZXQocywgMCwgc2l6ZW9mKCpz KSk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2N1cnZlKEZGSWNjQ29udGV4dCAqcywgZW51bSBBVkNv bG9yVHJhbnNmZXJDaGFyYWN0ZXJpc3RpYyB0cmMsCisgICAgICAgICAgICAgICAgICAgICBjbXNU b25lQ3VydmUgKipvdXRfY3VydmUpCit7CisgICAgaWYgKHRyYyA+PSBBVkNPTF9UUkNfTkIpCisg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgaWYgKHMtPmN1cnZlc1t0 cmNdKQorICAgICAgICBnb3RvIGRvbmU7CisKKyAgICBzd2l0Y2ggKHRyYykgeworICAgIGNhc2Ug QVZDT0xfVFJDX0xJTkVBUjoKKyAgICAgICAgcy0+Y3VydmVzW3RyY10gPSBjbXNCdWlsZEdhbW1h KHMtPmN0eCwgMS4wKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBVkNPTF9UUkNfR0FNTUEy MjoKKyAgICAgICAgcy0+Y3VydmVzW3RyY10gPSBjbXNCdWlsZEdhbW1hKHMtPmN0eCwgMi4yKTsK KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBVkNPTF9UUkNfR0FNTUEyODoKKyAgICAgICAgcy0+ Y3VydmVzW3RyY10gPSBjbXNCdWlsZEdhbW1hKHMtPmN0eCwgMi44KTsKKyAgICAgICAgYnJlYWs7 CisgICAgY2FzZSBBVkNPTF9UUkNfQlQ3MDk6CisgICAgY2FzZSBBVkNPTF9UUkNfU01QVEUxNzBN OgorICAgIGNhc2UgQVZDT0xfVFJDX0JUMjAyMF8xMDoKKyAgICBjYXNlIEFWQ09MX1RSQ19CVDIw MjBfMTI6CisgICAgICAgIHMtPmN1cnZlc1t0cmNdID0gY21zQnVpbGRQYXJhbWV0cmljVG9uZUN1 cnZlKHMtPmN0eCwgNCwgKGRvdWJsZVs1XSkgeworICAgICAgICAgICAgLyogzrMgPSAqLyAxLzAu NDUsCisgICAgICAgICAgICAvKiBhID0gKi8gMS8xLjA5OTI5NjgyNjgwOTQ0MiwKKyAgICAgICAg ICAgIC8qIGIgPSAqLyAxIC0gMS8xLjA5OTI5NjgyNjgwOTQ0MiwKKyAgICAgICAgICAgIC8qIGMg PSAqLyAxLzQuNSwKKyAgICAgICAgICAgIC8qIGQgPSAqLyA0LjUgKiAwLjAxODA1Mzk2ODUxMDgw NywKKyAgICAgICAgfSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVZDT0xfVFJDX1NNUFRF MjQwTToKKyAgICAgICAgcy0+Y3VydmVzW3RyY10gPSBjbXNCdWlsZFBhcmFtZXRyaWNUb25lQ3Vy dmUocy0+Y3R4LCA0LCAoZG91YmxlWzVdKSB7CisgICAgICAgICAgICAvKiDOsyA9ICovIDEvMC40 NSwKKyAgICAgICAgICAgIC8qIGEgPSAqLyAxLzEuMTExNSwKKyAgICAgICAgICAgIC8qIGIgPSAq LyAxIC0gMS8xLjExMTUsCisgICAgICAgICAgICAvKiBjID0gKi8gMS80LjAsCisgICAgICAgICAg ICAvKiBkID0gKi8gNC4wICogMC4wMjI4LAorICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7Cisg ICAgY2FzZSBBVkNPTF9UUkNfTE9HOgorICAgICAgICBzLT5jdXJ2ZXNbdHJjXSA9IGNtc0J1aWxk UGFyYW1ldHJpY1RvbmVDdXJ2ZShzLT5jdHgsIDgsIChkb3VibGVbNV0pIHsKKyAgICAgICAgICAg IC8qIGEgPSAqLyAxLjAsCisgICAgICAgICAgICAvKiBiID0gKi8gMTAuMCwKKyAgICAgICAgICAg IC8qIGMgPSAqLyAyLjAsCisgICAgICAgICAgICAvKiBkID0gKi8gLTEuMCwKKyAgICAgICAgICAg IC8qIGUgPSAqLyAwLjAKKyAgICAgICAgfSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVZD T0xfVFJDX0xPR19TUVJUOgorICAgICAgICBzLT5jdXJ2ZXNbdHJjXSA9IGNtc0J1aWxkUGFyYW1l dHJpY1RvbmVDdXJ2ZShzLT5jdHgsIDgsIChkb3VibGVbNV0pIHsKKyAgICAgICAgICAgIC8qIGEg PSAqLyAxLjAsCisgICAgICAgICAgICAvKiBiID0gKi8gMTAuMCwKKyAgICAgICAgICAgIC8qIGMg PSAqLyAyLjUsCisgICAgICAgICAgICAvKiBkID0gKi8gLTEuMCwKKyAgICAgICAgICAgIC8qIGUg PSAqLyAwLjAKKyAgICAgICAgfSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVZDT0xfVFJD X0lFQzYxOTY2XzJfMToKKyAgICAgICAgcy0+Y3VydmVzW3RyY10gPSBjbXNCdWlsZFBhcmFtZXRy aWNUb25lQ3VydmUocy0+Y3R4LCA0LCAoZG91YmxlWzVdKSB7CisgICAgICAgICAgICAvKiDOsyA9 ICovIDIuNCwKKyAgICAgICAgICAgIC8qIGEgPSAqLyAxLzEuMDU1LAorICAgICAgICAgICAgLyog YiA9ICovIDEgLSAxLzEuMDU1LAorICAgICAgICAgICAgLyogYyA9ICovIDEvMTIuOTIsCisgICAg ICAgICAgICAvKiBkID0gKi8gMTIuOTIgKiAwLjAwMzEzMDgsCisgICAgICAgIH0pOworICAgICAg ICBicmVhazsKKyAgICBjYXNlIEFWQ09MX1RSQ19TTVBURTQyODoKKyAgICAgICAgcy0+Y3VydmVz W3RyY10gPSBjbXNCdWlsZFBhcmFtZXRyaWNUb25lQ3VydmUocy0+Y3R4LCAyLCAoZG91YmxlWzNd KSB7CisgICAgICAgICAgICAvKiDOsyA9ICovIDIuNiwKKyAgICAgICAgICAgIC8qIGEgPSAqLyBw b3coNTIuMzcvNDguMCwgMS8yLjYpLAorICAgICAgICAgICAgLyogYiA9ICovIDAuMAorICAgICAg ICB9KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAvKiBDYW4ndCBiZSByZXByZXNlbnRlZCB1c2lu ZyB0aGUgZXhpc3RpbmcgcGFyYW1ldHJpYyB0b25lIGN1cnZlcy4KKyAgICAgKiBGSVhNRTogdXNl IGNtc0J1aWxkVGFidWxhdGVkVG9uZUN1cnZlRmxvYXQgaW5zdGVhZCAqLworICAgIGNhc2UgQVZD T0xfVFJDX0lFQzYxOTY2XzJfNDoKKyAgICBjYXNlIEFWQ09MX1RSQ19CVDEzNjFfRUNHOgorICAg IGNhc2UgQVZDT0xfVFJDX1NNUFRFMjA4NDoKKyAgICBjYXNlIEFWQ09MX1RSQ19BUklCX1NURF9C Njc6CisgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKworICAgIGRlZmF1bHQ6 CisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIH0KKworICAgIGlmICgh cy0+Y3VydmVzW3RyY10pCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKK2RvbmU6 CisgICAgKm91dF9jdXJ2ZSA9IHMtPmN1cnZlc1t0cmNdOworICAgIHJldHVybiAwOworfQorCitp bnQgZmZfaWNjX3Byb2ZpbGVfZ2VuZXJhdGUoRkZJY2NDb250ZXh0ICpzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGVudW0gQVZDb2xvclByaW1hcmllcyBjb2xvcl9wcmltLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGVudW0gQVZDb2xvclRyYW5zZmVyQ2hhcmFjdGVyaXN0aWMg Y29sb3JfdHJjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc0hQUk9GSUxFICpvdXRf cHJvZmlsZSkKK3sKKyAgICBjbXNUb25lQ3VydmUgKnRvbmVjdXJ2ZTsKKyAgICBjb25zdCBzdHJ1 Y3QgQ29sb3JQcmltYXJpZXMgKnByaW07CisgICAgaW50IHJldDsKKworICAgIGlmICghKHByaW0g PSBmZl9nZXRfY29sb3JfcHJpbWFyaWVzKGNvbG9yX3ByaW0pKSkKKyAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7CisgICAgaWYgKChyZXQgPSBnZXRfY3VydmUocywgY29sb3JfdHJj LCAmdG9uZWN1cnZlKSkgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgKm91dF9wcm9m aWxlID0gY21zQ3JlYXRlUkdCUHJvZmlsZVRIUihzLT5jdHgsCisgICAgICAgICYoY21zQ0lFeHlZ KSB7IHByaW0tPndwLnh3LCBwcmltLT53cC55dywgMS4wIH0sCisgICAgICAgICYoY21zQ0lFeHlZ VFJJUExFKSB7CisgICAgICAgICAgICAuUmVkICAgID0geyBwcmltLT5wcmltLnhyLCBwcmltLT5w cmltLnlyLCAxLjAgfSwKKyAgICAgICAgICAgIC5HcmVlbiAgPSB7IHByaW0tPnByaW0ueGcsIHBy aW0tPnByaW0ueWcsIDEuMCB9LAorICAgICAgICAgICAgLkJsdWUgICA9IHsgcHJpbS0+cHJpbS54 YiwgcHJpbS0+cHJpbS55YiwgMS4wIH0sCisgICAgICAgIH0sCisgICAgICAgIChjbXNUb25lQ3Vy dmUgKlszXSkgeyB0b25lY3VydmUsIHRvbmVjdXJ2ZSwgdG9uZWN1cnZlIH0KKyAgICApOworCisg ICAgcmV0dXJuICpvdXRfcHJvZmlsZSA9PSBOVUxMID8gQVZFUlJPUihFTk9NRU0pIDogMDsKK30K KworaW50IGZmX2ljY19wcm9maWxlX2F0dGFjaChGRkljY0NvbnRleHQgKnMsIGNtc0hQUk9GSUxF IHByb2ZpbGUsIEFWRnJhbWUgKmZyYW1lKQoreworICAgIGNtc1VJbnQzMk51bWJlciBzaXplOwor ICAgIEFWQnVmZmVyUmVmICpidWY7CisKKyAgICBpZiAoIWNtc1NhdmVQcm9maWxlVG9NZW0ocHJv ZmlsZSwgTlVMTCwgJnNpemUpKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKwor ICAgIGJ1ZiA9IGF2X2J1ZmZlcl9hbGxvYyhzaXplKTsKKyAgICBpZiAoIWJ1ZikKKyAgICAgICAg cmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIGlmICghY21zU2F2ZVByb2ZpbGVUb01lbShw cm9maWxlLCBidWYtPmRhdGEsICZzaXplKSB8fCBzaXplICE9IGJ1Zi0+c2l6ZSkgeworICAgICAg ICBhdl9idWZmZXJfdW5yZWYoJmJ1Zik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFM OworICAgIH0KKworICAgIGlmICghYXZfZnJhbWVfbmV3X3NpZGVfZGF0YV9mcm9tX2J1ZihmcmFt ZSwgQVZfRlJBTUVfREFUQV9JQ0NfUFJPRklMRSwgYnVmKSkgeworICAgICAgICBhdl9idWZmZXJf dW5yZWYoJmJ1Zik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgfQorCisg ICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHZvaWQgWFlaX3h5KGNt c0NJRVhZWiBYWVosIGRvdWJsZSAqeCwgZG91YmxlICp5KQoreworICAgIGRvdWJsZSBrID0gMS4w IC8gKFhZWi5YICsgWFlaLlkgKyBYWVouWik7CisgICAgKnggPSBrICogWFlaLlg7CisgICAgKnkg PSBrICogWFlaLlk7Cit9CisKK2ludCBmZl9pY2NfcHJvZmlsZV9yZWFkX3ByaW1hcmllcyhGRklj Y0NvbnRleHQgKnMsIGNtc0hQUk9GSUxFIHByb2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IENvbG9yUHJpbWFyaWVzICpvdXRfcHJpbWFyaWVzKQoreworICAg IHN0YXRpYyBjb25zdCB1aW50OF90IHRlc3RwcmltYXJpZXNbNF1bM10gPSB7CisgICAgICAgIHsg MHhGRiwgICAgMCwgICAgMCB9LCAvKiByZWQgKi8KKyAgICAgICAgeyAgICAwLCAweEZGLCAgICAw IH0sIC8qIGdyZWVuICovCisgICAgICAgIHsgICAgMCwgICAgMCwgMHhGRiB9LCAvKiBibHVlICov CisgICAgICAgIHsgMHhGRiwgMHhGRiwgMHhGRiB9LCAvKiB3aGl0ZSAqLworICAgIH07CisKKyAg ICBzdHJ1Y3QgV2hpdGVwb2ludENvZWZmaWNpZW50cyAqd3AgPSAmb3V0X3ByaW1hcmllcy0+d3A7 CisgICAgc3RydWN0IFByaW1hcnlDb2VmZmljaWVudHMgKnByaW0gPSAmb3V0X3ByaW1hcmllcy0+ cHJpbTsKKyAgICBjbXNGbG9hdDY0TnVtYmVyIHByZXZfYWRhcHQ7CisgICAgY21zSFBST0ZJTEUg eHl6OworICAgIGNtc0hUUkFOU0ZPUk0gdGY7CisgICAgY21zQ0lFWFlaIGRzdFs0XTsKKworICAg IHh5eiA9IGNtc0NyZWF0ZVhZWlByb2ZpbGVUSFIocy0+Y3R4KTsKKyAgICBpZiAoIXh5eikKKyAg ICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIC8qIFdlIG5lZWQgdG8gdXNlIGFu IHVuYWRhcHRlZCBvYnNlcnZlciB0byBnZXQgdGhlIHJhdyB2YWx1ZXMgKi8KKyAgICBwcmV2X2Fk YXB0ID0gY21zU2V0QWRhcHRhdGlvblN0YXRlVEhSKHMtPmN0eCwgMC4wKTsKKyAgICB0ZiA9IGNt c0NyZWF0ZVRyYW5zZm9ybVRIUihzLT5jdHgsIHByb2ZpbGUsIFRZUEVfUkdCXzgsIHh5eiwgVFlQ RV9YWVpfREJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVEVOVF9BQlNPTFVU RV9DT0xPUklNRVRSSUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90ZTog VGhlc2UgZmxhZ3MgbW9zdGx5IGRvbid0IGRvIGFueXRoaW5nCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICogYW55d2F5LCBidXQgc3BlY2lmeSB0aGVtIHJlZ2FyZGxlc3MgKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXNGTEFHU19OT0NBQ0hFIHwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjbXNGTEFHU19OT09QVElNSVpFIHwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjbXNGTEFHU19MT1dSRVNQUkVDQUxDIHwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjbXNGTEFHU19HUklEUE9JTlRTKDIpKTsKKyAgICBjbXNTZXRB ZGFwdGF0aW9uU3RhdGVUSFIocy0+Y3R4LCBwcmV2X2FkYXB0KTsKKyAgICBjbXNDbG9zZVByb2Zp bGUoeHl6KTsKKyAgICBpZiAoIXRmKSB7CisgICAgICAgIGF2X2xvZyhzLT5hdmN0eCwgQVZfTE9H X0VSUk9SLCAiSW52YWxpZCBJQ0MgcHJvZmlsZSAoZS5nLiBDTVlLKVxuIik7CisgICAgICAgIHJl dHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIH0KKworICAgIGNtc0RvVHJhbnNmb3JtKHRm LCB0ZXN0cHJpbWFyaWVzLCBkc3QsIDQpOworICAgIGNtc0RlbGV0ZVRyYW5zZm9ybSh0Zik7Cisg ICAgWFlaX3h5KGRzdFswXSwgJnByaW0tPnhyLCAmcHJpbS0+eXIpOworICAgIFhZWl94eShkc3Rb MV0sICZwcmltLT54ZywgJnByaW0tPnlnKTsKKyAgICBYWVpfeHkoZHN0WzJdLCAmcHJpbS0+eGIs ICZwcmltLT55Yik7CisgICAgWFlaX3h5KGRzdFszXSwgJndwLT54dywgJndwLT55dyk7CisgICAg cmV0dXJuIDA7Cit9CisKK2ludCBmZl9pY2NfcHJvZmlsZV9kZXRlY3RfdHJhbnNmZXIoRkZJY2ND b250ZXh0ICpzLCBjbXNIUFJPRklMRSBwcm9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBlbnVtIEFWQ29sb3JUcmFuc2ZlckNoYXJhY3RlcmlzdGljICpvdXRfdHJjKQor eworICAgIC8qIDgtYml0IGxpbmVhciBncmF5c2NhbGUgcmFtcCAqLworICAgIHN0YXRpYyBjb25z dCB1aW50OF90IHRlc3RyYW1wWzE2XVszXSA9IHsKKyAgICAgICAgeyAgMSwgICAxLCAgIDF9LCAv KiBhdm9pZCBleGFjdCB6ZXJvIGR1ZSB0byBsb2cxMDAgZXRjLiAqLworICAgICAgICB7IDE3LCAg MTcsICAxN30sCisgICAgICAgIHsgMzQsICAzNCwgIDM0fSwKKyAgICAgICAgeyA1MSwgIDUxLCAg NTF9LAorICAgICAgICB7IDY4LCAgNjgsICA2OH0sCisgICAgICAgIHsgODUsICA4NSwgIDg1fSwK KyAgICAgICAgeyAwMiwgIDAyLCAgMDJ9LAorICAgICAgICB7MTE5LCAxMTksIDExOX0sCisgICAg ICAgIHsxMzYsIDEzNiwgMTM2fSwKKyAgICAgICAgezE1MywgMTUzLCAxNTN9LAorICAgICAgICB7 MTcwLCAxNzAsIDE3MH0sCisgICAgICAgIHsxODcsIDE4NywgMTg3fSwKKyAgICAgICAgezIwNCwg MjA0LCAyMDR9LAorICAgICAgICB7MjIxLCAyMjEsIDIyMX0sCisgICAgICAgIHsyMzgsIDIzOCwg MjM4fSwKKyAgICAgICAgezI1NSwgMjU1LCAyNTV9LAorICAgIH07CisKKyAgICBkb3VibGUgZHN0 W0ZGX0FSUkFZX0VMRU1TKHRlc3RyYW1wKV07CisKKyAgICBmb3IgKGVudW0gQVZDb2xvclRyYW5z ZmVyQ2hhcmFjdGVyaXN0aWMgdHJjID0gMDsgdHJjIDwgQVZDT0xfVFJDX05COyB0cmMrKykgewor ICAgICAgICBjbXNUb25lQ3VydmUgKnRvbmVjdXJ2ZTsKKyAgICAgICAgY21zSFBST0ZJTEUgcmVm OworICAgICAgICBjbXNIVFJBTlNGT1JNIHRmOworICAgICAgICBkb3VibGUgZGVsdGEgPSAwLjA7 CisgICAgICAgIGlmIChnZXRfY3VydmUocywgdHJjLCAmdG9uZWN1cnZlKSA8IDApCisgICAgICAg ICAgICBjb250aW51ZTsKKworICAgICAgICByZWYgPSBjbXNDcmVhdGVHcmF5UHJvZmlsZVRIUihz LT5jdHgsIGNtc0Q1MF94eVkoKSwgdG9uZWN1cnZlKTsKKyAgICAgICAgaWYgKCFyZWYpCisgICAg ICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgICAgIHRmID0gY21zQ3JlYXRl VHJhbnNmb3JtVEhSKHMtPmN0eCwgcHJvZmlsZSwgVFlQRV9SR0JfOCwgcmVmLCBUWVBFX0dSQVlf REJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlRFTlRfUkVMQVRJVkVf Q09MT1JJTUVUUklDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXNGTEFH U19OT0NBQ0hFIHwgY21zRkxBR1NfTk9PUFRJTUlaRSk7CisgICAgICAgIGNtc0Nsb3NlUHJvZmls ZShyZWYpOworICAgICAgICBpZiAoIXRmKSB7CisgICAgICAgICAgICBhdl9sb2cocy0+YXZjdHgs IEFWX0xPR19FUlJPUiwgIkludmFsaWQgSUNDIHByb2ZpbGUgKGUuZy4gQ01ZSylcbiIpOworICAg ICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIH0KKworICAgICAg ICBjbXNEb1RyYW5zZm9ybSh0ZiwgdGVzdHJhbXAsIGRzdCwgRkZfQVJSQVlfRUxFTVMoZHN0KSk7 CisgICAgICAgIGNtc0RlbGV0ZVRyYW5zZm9ybSh0Zik7CisKKyAgICAgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhkc3QpOyBpKyspCisgICAgICAgICAgICBkZWx0YSArPSBm YWJzKHRlc3RyYW1wW2ldWzBdIC8gMjU1LjAgLSBkc3RbaV0pOworICAgICAgICBpZiAoZGVsdGEg PCAwLjAxKSB7CisgICAgICAgICAgICAqb3V0X3RyYyA9IHRyYzsKKyAgICAgICAgICAgIHJldHVy biAwOworICAgICAgICB9CisgICAgfQorCisgICAgKm91dF90cmMgPSBBVkNPTF9UUkNfVU5TUEVD SUZJRUQ7CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci9mZmxjbXMy LmggYi9saWJhdmZpbHRlci9mZmxjbXMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uYWQ2YzhjNDdjZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2ZmlsdGVyL2ZmbGNt czIuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDIyIE5pa2xhcyBI YWFzCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy CisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2Vy IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj CisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl IFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo IEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworLyoqCisgKiBAZmlsZQor ICogVmFyaW91cyBmdW5jdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCBJQ0MgcHJvZmlsZXMKKyAqLwor CisjaWZuZGVmIEFWRklMVEVSX0ZGTENNUzJfSAorI2RlZmluZSBBVkZJTFRFUl9GRkxDTVMyX0gK KworI2luY2x1ZGUgImxpYmF2dXRpbC9mcmFtZS5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9waXhm bXQuaCIKKyNpbmNsdWRlICJjb2xvcnNwYWNlLmgiCisKKyNpbmNsdWRlIDxsY21zMi5oPgorCit0 eXBlZGVmIHN0cnVjdCBGRkljY0NvbnRleHQgeworICAgIHZvaWQgKmF2Y3R4OworICAgIGNtc0Nv bnRleHQgY3R4OworICAgIGNtc1RvbmVDdXJ2ZSAqY3VydmVzW0FWQ09MX1RSQ19OQl07IC8qIHRv bmUgY3VydmUgY2FjaGUgKi8KK30gRkZJY2NDb250ZXh0OworCisvKioKKyAqIEluaXRpYWxpemVz IGFuIEZGSWNjQ29udGV4dC4gVGhpcyBtdXN0IGJlIGRvbmUgcHJpb3IgdG8gdXNpbmcgaXQuCisg KgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAq LworaW50IGZmX2ljY19jb250ZXh0X2luaXQoRkZJY2NDb250ZXh0ICpzLCB2b2lkICphdmN0eCk7 Cit2b2lkIGZmX2ljY19jb250ZXh0X3VuaW5pdChGRkljY0NvbnRleHQgKnMpOworCisvKioKKyAq IEdlbmVyYXRlIGFuIElDQyBwcm9maWxlIGZvciBhIGdpdmVuIGNvbWJpbmF0aW9uIG9mIGNvbG9y IHByaW1hcmllcyBhbmQKKyAqIHRyYW5zZmVyIGZ1bmN0aW9uLiBCb3RoIHZhbHVlcyBtdXN0IGJl IHNldCB0byB2YWxpZCBlbnRyaWVzIChub3QKKyAqICJ1bmRlZmluZWQiKSBmb3IgdGhpcyBmdW5j dGlvbiB0byB3b3JrLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZl IGVycm9yIGNvZGUuCisgKi8KK2ludCBmZl9pY2NfcHJvZmlsZV9nZW5lcmF0ZShGRkljY0NvbnRl eHQgKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBBVkNvbG9yUHJpbWFyaWVz IGNvbG9yX3ByaW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBBVkNvbG9yVHJh bnNmZXJDaGFyYWN0ZXJpc3RpYyBjb2xvcl90cmMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY21zSFBST0ZJTEUgKm91dF9wcm9maWxlKTsKKworLyoqCisgKiBBdHRhY2ggYW4gSUNDIHBy b2ZpbGUgdG8gYSBmcmFtZS4gSGVscGVyIHdyYXBwZXIgYXJvdW5kIGNtc1NhdmVQcm9maWxlVG9N ZW0KKyAqIGFuZCBhdl9mcmFtZV9uZXdfc2lkZV9kYXRhX2Zyb21fYnVmLgorICoKKyAqIFJldHVy bnMgMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKi8KK2ludCBmZl9p Y2NfcHJvZmlsZV9hdHRhY2goRkZJY2NDb250ZXh0ICpzLCBjbXNIUFJPRklMRSBwcm9maWxlLCBB VkZyYW1lICpmcmFtZSk7CisKKy8qKgorICogUmVhZCB0aGUgY29sb3IgcHJpbWFyaWVzIGFuZCB3 aGl0ZSBwb2ludCBjb2VmZmljaWVudHMgZW5jb2RlZCBieSBhbiBJQ0MKKyAqIHByb2ZpbGUsIGFu ZCByZXR1cm4gdGhlIHJhdyB2YWx1ZXMgaW4gYG91dF9wcmltYXJpZXNgLgorICoKKyAqIFJldHVy bnMgMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKi8KK2ludCBmZl9p Y2NfcHJvZmlsZV9yZWFkX3ByaW1hcmllcyhGRkljY0NvbnRleHQgKnMsIGNtc0hQUk9GSUxFIHBy b2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IENvbG9yUHJp bWFyaWVzICpvdXRfcHJpbWFyaWVzKTsKKworLyoqCisgKiBBdHRlbXB0IGRldGVjdGluZyB0aGUg dHJhbnNmZXIgY2hhcmFjdGVyaXN0aWMgdGhhdCBiZXN0IGFwcHJveGltYXRlcyB0aGUKKyAqIHRy YW5zZmVyIGZ1bmN0aW9uIGVuY29kZWQgYnkgYW4gSUNDIHByb2ZpbGUuIFNldHMgYG91dF90cmNg IHRvCisgKiBBVkNPTF9UUkNfVU5TUEVDSUZJRUQgaWYgbm8gY2xlYXIgbWF0Y2ggY2FuIGJlIGlk ZW50aWZpZWQuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MgKGluY2x1ZGluZyBubyBtYXRj aCksIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqLworaW50IGZmX2ljY19wcm9maWxlX2Rl dGVjdF90cmFuc2ZlcihGRkljY0NvbnRleHQgKnMsIGNtc0hQUk9GSUxFIHByb2ZpbGUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gQVZDb2xvclRyYW5zZmVyQ2hhcmFj dGVyaXN0aWMgKm91dF90cmMpOworCisjZW5kaWYgLyogQVZGSUxURVJfRkZMQ01TMl9IICovCi0t IAoyLjM1LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6 Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmli ZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVn Lm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K