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 02C72429D5 for ; Mon, 11 Apr 2022 15:37:27 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 067E268B2BB; Mon, 11 Apr 2022 18:37:10 +0300 (EEST) Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8768F68B22C for ; Mon, 11 Apr 2022 18:37:02 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 41B6449DEF; Mon, 11 Apr 2022 17:37:02 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1649691422; bh=O1+D4piVWQP3fjy16WD/0/NaG/QURczbpkwGRRm4/cQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=L6CCnEhzUZ7+oSk3DyKX/703rSRDQKG2OLR4vPgxsBdDGv9xlwe6yvcCHkVM+GsVe 5sOjLw4WZR3cUd6TQjt7RDJ+oSHEF4dwsfN8sIM5kLj8c1z2QCYDNtS1CE/v/uzBbg DfqjzIadjuTaK0II8HdicB+7d6IoeiEDIhRzeahE= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 11 Apr 2022 17:36:52 +0200 Message-Id: <20220411153654.116722-3-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220411153654.116722-1-ffmpeg@haasn.xyz> References: <20220411153654.116722-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 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 IDMxMSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxpYmF2Zmls dGVyL2ZmbGNtczIuaCB8ICA4NyArKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNDAxIGlu c2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci9mZmxjbXMyLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci9mZmxjbXMyLmgKCmRpZmYgLS1naXQgYS9jb25m aWd1cmUgYi9jb25maWd1cmUKaW5kZXggOWM4OTY1ODUyYi4uMWE5YzNkY2QzYyAxMDA3NTUKLS0t IGEvY29uZmlndXJlCisrKyBiL2NvbmZpZ3VyZQpAQCAtMjE1LDYgKzIxNSw3IEBAIEV4dGVybmFs IGxpYnJhcnkgc3VwcG9ydDoKICAgLS1kaXNhYmxlLWljb252ICAgICAgICAgIGRpc2FibGUgaWNv bnYgW2F1dG9kZXRlY3RdCiAgIC0tZW5hYmxlLWpuaSAgICAgICAgICAgICBlbmFibGUgSk5JIHN1 cHBvcnQgW25vXQogICAtLWVuYWJsZS1sYWRzcGEgICAgICAgICAgZW5hYmxlIExBRFNQQSBhdWRp byBmaWx0ZXJpbmcgW25vXQorICAtLWVuYWJsZS1sY21zMiAgICAgICAgICAgZW5hYmxlIElDQyBw cm9maWxlIHN1cHBvcnQgdmlhIExpdHRsZUNNUyAyIFtub10KICAgLS1lbmFibGUtbGliYW9tICAg ICAgICAgIGVuYWJsZSBBVjEgdmlkZW8gZW5jb2RpbmcvZGVjb2RpbmcgdmlhIGxpYmFvbSBbbm9d CiAgIC0tZW5hYmxlLWxpYmFyaWJiMjQgICAgICBlbmFibGUgQVJJQiB0ZXh0IGFuZCBjYXB0aW9u IGRlY29kaW5nIHZpYSBsaWJhcmliYjI0IFtub10KICAgLS1lbmFibGUtbGliYXNzICAgICAgICAg IGVuYWJsZSBsaWJhc3Mgc3VidGl0bGVzIHJlbmRlcmluZywKQEAgLTE4MTMsNiArMTgxNCw3IEBA IEVYVEVSTkFMX0xJQlJBUllfTElTVD0iCiAgICAgZ251dGxzCiAgICAgam5pCiAgICAgbGFkc3Bh CisgICAgbGNtczIKICAgICBsaWJhb20KICAgICBsaWJhc3MKICAgICBsaWJibHVyYXkKQEAgLTY1 MDQsNiArNjUwNiw3IEBAIGVuYWJsZWQgZ21wICAgICAgICAgICAgICAgJiYgcmVxdWlyZSBnbXAg Z21wLmggbXB6X2V4cG9ydCAtbGdtcAogZW5hYmxlZCBnbnV0bHMgICAgICAgICAgICAmJiByZXF1 aXJlX3BrZ19jb25maWcgZ251dGxzIGdudXRscyBnbnV0bHMvZ251dGxzLmggZ251dGxzX2dsb2Jh bF9pbml0CiBlbmFibGVkIGpuaSAgICAgICAgICAgICAgICYmIHsgWyAkdGFyZ2V0X29zID0gImFu ZHJvaWQiIF0gJiYgY2hlY2tfaGVhZGVycyBqbmkuaCAmJiBlbmFibGVkIHB0aHJlYWRzIHx8IGRp ZSAiRVJST1I6IGpuaSBub3QgZm91bmQiOyB9CiBlbmFibGVkIGxhZHNwYSAgICAgICAgICAgICYm IHJlcXVpcmVfaGVhZGVycyAibGFkc3BhLmggZGxmY24uaCIKK2VuYWJsZWQgbGNtczIgICAgICAg ICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxjbXMyICJsY21zMiA+PSAyLjEzIiBsY21zMi5o IGNtc0NyZWF0ZUNvbnRleHQKIGVuYWJsZWQgbGliYW9tICAgICAgICAgICAgJiYgcmVxdWlyZV9w a2dfY29uZmlnIGxpYmFvbSAiYW9tID49IDEuMC4wIiBhb20vYW9tX2NvZGVjLmggYW9tX2NvZGVj X3ZlcnNpb24KIGVuYWJsZWQgbGliYXJpYmIyNCAgICAgICAgJiYgeyBjaGVja19wa2dfY29uZmln IGxpYmFyaWJiMjQgImFyaWJiMjQgPiAxLjAuMyIgImFyaWJiMjQvYXJpYmIyNC5oIiBhcmliX2lu c3RhbmNlX25ldyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZW5hYmxlZCBn cGwgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYmFyaWJiMjQgYXJpYmIyNCAiYXJpYmIyNC9hcmli YjI0LmgiIGFyaWJfaW5zdGFuY2VfbmV3OyB9IHx8CmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci9m ZmxjbXMyLmMgYi9saWJhdmZpbHRlci9mZmxjbXMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uYWZkZTVkODdhOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2ZmlsdGVy L2ZmbGNtczIuYwpAQCAtMCwwICsxLDMxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAyMiBO 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 ICAgcmV0dXJuICpvdXRfcHJvZmlsZSA9PSBOVUxMID8gQVZFUlJPUl9FWFRFUk5BTCA6IDA7Cit9 CisKK2ludCBmZl9pY2NfcHJvZmlsZV9hdHRhY2goRkZJY2NDb250ZXh0ICpzLCBjbXNIUFJPRklM RSBwcm9maWxlLCBBVkZyYW1lICpmcmFtZSkKK3sKKyAgICBjbXNVSW50MzJOdW1iZXIgc2l6ZTsK KyAgICBBVkJ1ZmZlclJlZiAqYnVmOworICAgIGludCByZXQ7CisKKyAgICBpZiAoIWNtc1NhdmVQ cm9maWxlVG9NZW0ocHJvZmlsZSwgTlVMTCwgJnNpemUpKQorICAgICAgICByZXR1cm4gQVZFUlJP Ul9FWFRFUk5BTDsKKworICAgIGJ1ZiA9IGF2X2J1ZmZlcl9hbGxvYyhzaXplKTsKKyAgICBpZiAo IWJ1ZikKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIGlmICghY21zU2F2 ZVByb2ZpbGVUb01lbShwcm9maWxlLCBidWYtPmRhdGEsICZzaXplKSB8fCBzaXplICE9IGJ1Zi0+ c2l6ZSkgeworICAgICAgICBhdl9idWZmZXJfdW5yZWYoJmJ1Zik7CisgICAgICAgIHJldHVybiBB VkVSUk9SX0VYVEVSTkFMOworICAgIH0KKworICAgIGlmICghYXZfZnJhbWVfbmV3X3NpZGVfZGF0 YV9mcm9tX2J1ZihmcmFtZSwgQVZfRlJBTUVfREFUQV9JQ0NfUFJPRklMRSwgYnVmKSkgeworICAg ICAgICBhdl9idWZmZXJfdW5yZWYoJmJ1Zik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01F TSk7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGF2X2Fsd2F5c19pbmxp bmUgdm9pZCBYWVpfeHkoY21zQ0lFWFlaIFhZWiwgZG91YmxlICp4LCBkb3VibGUgKnkpCit7Cisg ICAgZG91YmxlIGsgPSAxLjAgLyAoWFlaLlggKyBYWVouWSArIFhZWi5aKTsKKyAgICAqeCA9IGsg KiBYWVouWDsKKyAgICAqeSA9IGsgKiBYWVouWTsKK30KKworaW50IGZmX2ljY19wcm9maWxlX3Jl YWRfcHJpbWFyaWVzKEZGSWNjQ29udGV4dCAqcywgY21zSFBST0ZJTEUgcHJvZmlsZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ29sb3JQcmltYXJpZXMgKm91dF9w cmltYXJpZXMpCit7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgdGVzdHByaW1hcmllc1s0XVsz XSA9IHsKKyAgICAgICAgeyAweEZGLCAgICAwLCAgICAwIH0sIC8qIHJlZCAqLworICAgICAgICB7 ICAgIDAsIDB4RkYsICAgIDAgfSwgLyogZ3JlZW4gKi8KKyAgICAgICAgeyAgICAwLCAgICAwLCAw eEZGIH0sIC8qIGJsdWUgKi8KKyAgICAgICAgeyAweEZGLCAweEZGLCAweEZGIH0sIC8qIHdoaXRl ICovCisgICAgfTsKKworICAgIHN0cnVjdCBXaGl0ZXBvaW50Q29lZmZpY2llbnRzICp3cCA9ICZv dXRfcHJpbWFyaWVzLT53cDsKKyAgICBzdHJ1Y3QgUHJpbWFyeUNvZWZmaWNpZW50cyAqcHJpbSA9 ICZvdXRfcHJpbWFyaWVzLT5wcmltOworICAgIGNtc0Zsb2F0NjROdW1iZXIgcHJldl9hZGFwdDsK KyAgICBjbXNIUFJPRklMRSB4eXo7CisgICAgY21zSFRSQU5TRk9STSB0ZjsKKyAgICBjbXNDSUVY WVogZHN0WzRdOworCisgICAgeHl6ID0gY21zQ3JlYXRlWFlaUHJvZmlsZVRIUihzLT5jdHgpOwor ICAgIGlmICgheHl6KQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgLyog V2UgbmVlZCB0byB1c2UgYW4gdW5hZGFwdGVkIG9ic2VydmVyIHRvIGdldCB0aGUgcmF3IHZhbHVl cyAqLworICAgIHByZXZfYWRhcHQgPSBjbXNTZXRBZGFwdGF0aW9uU3RhdGVUSFIocy0+Y3R4LCAw LjApOworICAgIHRmID0gY21zQ3JlYXRlVHJhbnNmb3JtVEhSKHMtPmN0eCwgcHJvZmlsZSwgVFlQ RV9SR0JfOCwgeHl6LCBUWVBFX1hZWl9EQkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSU5URU5UX0FCU09MVVRFX0NPTE9SSU1FVFJJQywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBOb3RlOiBUaGVzZSBmbGFncyBtb3N0bHkgZG9uJ3QgZG8gYW55dGhpbmcKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhbnl3YXksIGJ1dCBzcGVjaWZ5IHRoZW0g cmVnYXJkbGVzcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc0ZMQUdTX05P Q0FDSEUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc0ZMQUdTX05PT1BUSU1J WkUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc0ZMQUdTX0xPV1JFU1BSRUNB TEMgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc0ZMQUdTX0dSSURQT0lOVFMo MikpOworICAgIGNtc1NldEFkYXB0YXRpb25TdGF0ZVRIUihzLT5jdHgsIHByZXZfYWRhcHQpOwor ICAgIGNtc0Nsb3NlUHJvZmlsZSh4eXopOworICAgIGlmICghdGYpIHsKKyAgICAgICAgYXZfbG9n KHMtPmF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIElDQyBwcm9maWxlIChlLmcuIENNWUsp XG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgfQorCisgICAg Y21zRG9UcmFuc2Zvcm0odGYsIHRlc3RwcmltYXJpZXMsIGRzdCwgNCk7CisgICAgY21zRGVsZXRl VHJhbnNmb3JtKHRmKTsKKyAgICBYWVpfeHkoZHN0WzBdLCAmcHJpbS0+eHIsICZwcmltLT55cik7 CisgICAgWFlaX3h5KGRzdFsxXSwgJnByaW0tPnhnLCAmcHJpbS0+eWcpOworICAgIFhZWl94eShk c3RbMl0sICZwcmltLT54YiwgJnByaW0tPnliKTsKKyAgICBYWVpfeHkoZHN0WzNdLCAmd3AtPnh3 LCAmd3AtPnl3KTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IGZmX2ljY19wcm9maWxlX2RldGVj dF90cmFuc2ZlcihGRkljY0NvbnRleHQgKnMsIGNtc0hQUk9GSUxFIHByb2ZpbGUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gQVZDb2xvclRyYW5zZmVyQ2hhcmFjdGVy aXN0aWMgKm91dF90cmMpCit7CisgICAgLyogOC1iaXQgbGluZWFyIGdyYXlzY2FsZSByYW1wICov CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgdGVzdHJhbXBbMTZdWzNdID0geworICAgICAgICB7 ICAxLCAgIDEsICAgMX0sIC8qIGF2b2lkIGV4YWN0IHplcm8gZHVlIHRvIGxvZzEwMCBldGMuICov CisgICAgICAgIHsgMTcsICAxNywgIDE3fSwKKyAgICAgICAgeyAzNCwgIDM0LCAgMzR9LAorICAg ICAgICB7IDUxLCAgNTEsICA1MX0sCisgICAgICAgIHsgNjgsICA2OCwgIDY4fSwKKyAgICAgICAg eyA4NSwgIDg1LCAgODV9LAorICAgICAgICB7IDAyLCAgMDIsICAwMn0sCisgICAgICAgIHsxMTks IDExOSwgMTE5fSwKKyAgICAgICAgezEzNiwgMTM2LCAxMzZ9LAorICAgICAgICB7MTUzLCAxNTMs IDE1M30sCisgICAgICAgIHsxNzAsIDE3MCwgMTcwfSwKKyAgICAgICAgezE4NywgMTg3LCAxODd9 LAorICAgICAgICB7MjA0LCAyMDQsIDIwNH0sCisgICAgICAgIHsyMjEsIDIyMSwgMjIxfSwKKyAg ICAgICAgezIzOCwgMjM4LCAyMzh9LAorICAgICAgICB7MjU1LCAyNTUsIDI1NX0sCisgICAgfTsK KworICAgIGRvdWJsZSBkc3RbRkZfQVJSQVlfRUxFTVModGVzdHJhbXApXTsKKworICAgIGZvciAo ZW51bSBBVkNvbG9yVHJhbnNmZXJDaGFyYWN0ZXJpc3RpYyB0cmMgPSAwOyB0cmMgPCBBVkNPTF9U UkNfTkI7IHRyYysrKSB7CisgICAgICAgIGNtc1RvbmVDdXJ2ZSAqdG9uZWN1cnZlOworICAgICAg ICBjbXNIUFJPRklMRSByZWY7CisgICAgICAgIGNtc0hUUkFOU0ZPUk0gdGY7CisgICAgICAgIGRv dWJsZSBkZWx0YSA9IDAuMDsKKyAgICAgICAgaWYgKGdldF9jdXJ2ZShzLCB0cmMsICZ0b25lY3Vy dmUpIDwgMCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHJlZiA9IGNtc0NyZWF0 ZUdyYXlQcm9maWxlVEhSKHMtPmN0eCwgY21zRDUwX3h5WSgpLCB0b25lY3VydmUpOworICAgICAg ICBpZiAoIXJlZikKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICAg ICAgdGYgPSBjbXNDcmVhdGVUcmFuc2Zvcm1USFIocy0+Y3R4LCBwcm9maWxlLCBUWVBFX1JHQl84 LCByZWYsIFRZUEVfR1JBWV9EQkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IElOVEVOVF9SRUxBVElWRV9DT0xPUklNRVRSSUMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNtc0ZMQUdTX05PQ0FDSEUgfCBjbXNGTEFHU19OT09QVElNSVpFKTsKKyAgICAg ICAgY21zQ2xvc2VQcm9maWxlKHJlZik7CisgICAgICAgIGlmICghdGYpIHsKKyAgICAgICAgICAg IGF2X2xvZyhzLT5hdmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBJQ0MgcHJvZmlsZSAoZS5n LiBDTVlLKVxuIik7CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAg ICAgICAgfQorCisgICAgICAgIGNtc0RvVHJhbnNmb3JtKHRmLCB0ZXN0cmFtcCwgZHN0LCBGRl9B UlJBWV9FTEVNUyhkc3QpKTsKKyAgICAgICAgY21zRGVsZXRlVHJhbnNmb3JtKHRmKTsKKworICAg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKGRzdCk7IGkrKykKKyAgICAg ICAgICAgIGRlbHRhICs9IGZhYnModGVzdHJhbXBbaV1bMF0gLyAyNTUuMCAtIGRzdFtpXSk7Cisg ICAgICAgIGlmIChkZWx0YSA8IDAuMDEpIHsKKyAgICAgICAgICAgICpvdXRfdHJjID0gdHJjOwor ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqb3V0X3RyYyA9 IEFWQ09MX1RSQ19VTlNQRUNJRklFRDsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xp YmF2ZmlsdGVyL2ZmbGNtczIuaCBiL2xpYmF2ZmlsdGVyL2ZmbGNtczIuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5hZDZjOGM0N2NmCi0tLSAvZGV2L251bGwKKysrIGIv bGliYXZmaWx0ZXIvZmZsY21zMi5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQg KGMpIDIwMjIgTmlrbGFzIEhhYXMKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAq CisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwg d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLwor CisvKioKKyAqIEBmaWxlCisgKiBWYXJpb3VzIGZ1bmN0aW9ucyBmb3IgZGVhbGluZyB3aXRoIElD QyBwcm9maWxlcworICovCisKKyNpZm5kZWYgQVZGSUxURVJfRkZMQ01TMl9ICisjZGVmaW5lIEFW RklMVEVSX0ZGTENNUzJfSAorCisjaW5jbHVkZSAibGliYXZ1dGlsL2ZyYW1lLmgiCisjaW5jbHVk ZSAibGliYXZ1dGlsL3BpeGZtdC5oIgorI2luY2x1ZGUgImNvbG9yc3BhY2UuaCIKKworI2luY2x1 ZGUgPGxjbXMyLmg+CisKK3R5cGVkZWYgc3RydWN0IEZGSWNjQ29udGV4dCB7CisgICAgdm9pZCAq YXZjdHg7CisgICAgY21zQ29udGV4dCBjdHg7CisgICAgY21zVG9uZUN1cnZlICpjdXJ2ZXNbQVZD T0xfVFJDX05CXTsgLyogdG9uZSBjdXJ2ZSBjYWNoZSAqLworfSBGRkljY0NvbnRleHQ7CisKKy8q KgorICogSW5pdGlhbGl6ZXMgYW4gRkZJY2NDb250ZXh0LiBUaGlzIG11c3QgYmUgZG9uZSBwcmlv ciB0byB1c2luZyBpdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2 ZSBlcnJvciBjb2RlLgorICovCitpbnQgZmZfaWNjX2NvbnRleHRfaW5pdChGRkljY0NvbnRleHQg KnMsIHZvaWQgKmF2Y3R4KTsKK3ZvaWQgZmZfaWNjX2NvbnRleHRfdW5pbml0KEZGSWNjQ29udGV4 dCAqcyk7CisKKy8qKgorICogR2VuZXJhdGUgYW4gSUNDIHByb2ZpbGUgZm9yIGEgZ2l2ZW4gY29t YmluYXRpb24gb2YgY29sb3IgcHJpbWFyaWVzIGFuZAorICogdHJhbnNmZXIgZnVuY3Rpb24uIEJv dGggdmFsdWVzIG11c3QgYmUgc2V0IHRvIHZhbGlkIGVudHJpZXMgKG5vdAorICogInVuZGVmaW5l ZCIpIGZvciB0aGlzIGZ1bmN0aW9uIHRvIHdvcmsuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nl c3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqLworaW50IGZmX2ljY19wcm9maWxlX2dl bmVyYXRlKEZGSWNjQ29udGV4dCAqcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVt IEFWQ29sb3JQcmltYXJpZXMgY29sb3JfcHJpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBlbnVtIEFWQ29sb3JUcmFuc2ZlckNoYXJhY3RlcmlzdGljIGNvbG9yX3RyYywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjbXNIUFJPRklMRSAqb3V0X3Byb2ZpbGUpOworCisvKioKKyAq IEF0dGFjaCBhbiBJQ0MgcHJvZmlsZSB0byBhIGZyYW1lLiBIZWxwZXIgd3JhcHBlciBhcm91bmQg Y21zU2F2ZVByb2ZpbGVUb01lbQorICogYW5kIGF2X2ZyYW1lX25ld19zaWRlX2RhdGFfZnJvbV9i dWYuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29k ZS4KKyAqLworaW50IGZmX2ljY19wcm9maWxlX2F0dGFjaChGRkljY0NvbnRleHQgKnMsIGNtc0hQ Uk9GSUxFIHByb2ZpbGUsIEFWRnJhbWUgKmZyYW1lKTsKKworLyoqCisgKiBSZWFkIHRoZSBjb2xv ciBwcmltYXJpZXMgYW5kIHdoaXRlIHBvaW50IGNvZWZmaWNpZW50cyBlbmNvZGVkIGJ5IGFuIElD QworICogcHJvZmlsZSwgYW5kIHJldHVybiB0aGUgcmF3IHZhbHVlcyBpbiBgb3V0X3ByaW1hcmll c2AuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29k ZS4KKyAqLworaW50IGZmX2ljY19wcm9maWxlX3JlYWRfcHJpbWFyaWVzKEZGSWNjQ29udGV4dCAq cywgY21zSFBST0ZJTEUgcHJvZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgQ29sb3JQcmltYXJpZXMgKm91dF9wcmltYXJpZXMpOworCisvKioKKyAqIEF0dGVt cHQgZGV0ZWN0aW5nIHRoZSB0cmFuc2ZlciBjaGFyYWN0ZXJpc3RpYyB0aGF0IGJlc3QgYXBwcm94 aW1hdGVzIHRoZQorICogdHJhbnNmZXIgZnVuY3Rpb24gZW5jb2RlZCBieSBhbiBJQ0MgcHJvZmls ZS4gU2V0cyBgb3V0X3RyY2AgdG8KKyAqIEFWQ09MX1RSQ19VTlNQRUNJRklFRCBpZiBubyBjbGVh ciBtYXRjaCBjYW4gYmUgaWRlbnRpZmllZC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyAo aW5jbHVkaW5nIG5vIG1hdGNoKSwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICovCitpbnQg ZmZfaWNjX3Byb2ZpbGVfZGV0ZWN0X3RyYW5zZmVyKEZGSWNjQ29udGV4dCAqcywgY21zSFBST0ZJ TEUgcHJvZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBBVkNv bG9yVHJhbnNmZXJDaGFyYWN0ZXJpc3RpYyAqb3V0X3RyYyk7CisKKyNlbmRpZiAvKiBBVkZJTFRF Ul9GRkxDTVMyX0ggKi8KLS0gCjIuMzUuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxA ZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2 ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2 ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=