From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 60573 invoked by alias); 26 Jul 2017 07:55:02 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 60531 invoked by uid 89); 26 Jul 2017 07:55:01 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-7.1 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_2,GIT_PATCH_3,KAM_ASCII_DIVIDERS,KAM_LAZY_DOMAIN_SECURITY,RP_MATCHES_RCVD,UNPARSEABLE_RELAY,UNWANTED_LANGUAGE_BODY autolearn=ham version=3.3.2 spammy= X-HELO: smtppost.atos.net Received: from smtppost.atos.net (HELO smtppost.atos.net) (193.56.114.165) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 26 Jul 2017 07:54:56 +0000 Received: from mail2-ext.my-it-solutions.net (mail2-ext.my-it-solutions.net) by smarthost3.atos.net with smtp (TLS: TLSv1/SSLv3,256bits,ECDHE-RSA-AES256-GCM-SHA384) id 2178_8d9c_91930f9c_3419_413c_bec3_1facba966331; Wed, 26 Jul 2017 09:54:48 +0200 Received: from mail2-int.my-it-solutions.net ([10.92.32.13]) by mail2-ext.my-it-solutions.net (8.15.2/8.15.2) with ESMTPS id v6Q7snGk021408 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 26 Jul 2017 09:54:49 +0200 Received: from FRAUVJ99ET2MSX.ww931.my-it-solutions.net ([172.23.231.42]) by mail2-int.my-it-solutions.net (8.15.2/8.15.2) with ESMTPS id v6Q7sm9w030651 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 26 Jul 2017 09:54:49 +0200 Received: from FRCRPVV9ET3MSX.ww931.my-it-solutions.net (172.23.231.45) by FRAUVJ99ET2MSX.ww931.my-it-solutions.net (172.23.231.42) with Microsoft SMTP Server (TLS) id 14.3.352.0; Wed, 26 Jul 2017 09:54:48 +0200 Received: from FRCRPVV9EX4MSX.ww931.my-it-solutions.net ([169.254.7.210]) by FRCRPVV9ET3MSX.ww931.my-it-solutions.net ([172.23.231.45]) with mapi id 14.03.0352.000; Wed, 26 Jul 2017 09:54:48 +0200 From: "REIX, Tony" To: "gcc-patches@gcc.gnu.org" CC: "dje.gcc@gmail.com" Subject: [PATCH,AIX] Fully enable XCOFF in libbacktrace on AIX Date: Wed, 26 Jul 2017 07:55:00 -0000 Message-ID: References: In-Reply-To: Content-Type: multipart/mixed; boundary="_002_B37989F2852398498001550C29155BE51789E743FRCRPVV9EX4MSXw_" MIME-Version: 1.0 X-SW-Source: 2017-07/txt/msg01632.txt.bz2 --_002_B37989F2852398498001550C29155BE51789E743FRCRPVV9EX4MSXw_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-length: 531 Description: * This patch fully enables XCOFF in libbacktrace on AIX. Tests: * Fedora25/x86_64 + GCC v7.1.0 : Configure/Build: SUCCESS - build made by means of gmake. ChangeLog: * configure.ac, filetype.awk: Separate AIX XCOFF32 and XCOFF64. * xcoff.c: Add support for AIX XCOFF32 and XCOFF64 formats. * configure, config.h.in: Regenerate. Cordialement, Tony Reix Bull - ATOS IBM Coop Architect & Technical Leader Office : +33 (0) 4 76 29 72 67 1 rue de Provence - 38432 =C9chirolles - France www.atos.net --_002_B37989F2852398498001550C29155BE51789E743FRCRPVV9EX4MSXw_ Content-Type: text/x-patch; name="libbacktrace.patch" Content-Description: libbacktrace.patch Content-Disposition: attachment; filename="libbacktrace.patch"; size=42660; creation-date="Wed, 26 Jul 2017 07:53:39 GMT"; modification-date="Wed, 26 Jul 2017 07:53:39 GMT" Content-Transfer-Encoding: base64 Content-length: 57828 SW5kZXg6IGxpYmJhY2t0cmFjZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gbGliYmFja3RyYWNlL0NoYW5nZUxvZwkocmV2aXNpb24g MjUwNTE0KQorKysgbGliYmFja3RyYWNlL0NoYW5nZUxvZwkod29ya2luZyBj b3B5KQpAQCAtMSwzICsxLDkgQEAKKzIwMTctMDctMjUgIFRvbnkgUmVpeCAg PHRvbnkucmVpeEBhdG9zLm5ldD4KKworCSogY29uZmlndXJlLmFjLCBmaWxl dHlwZS5hd2s6IFNlcGFyYXRlIEFJWCBYQ09GRjMyIGFuZCBYQ09GRjY0Lgor CSogeGNvZmYuYzogQWRkIHN1cHBvcnQgZm9yIEFJWCBYQ09GRjMyIGFuZCBY Q09GRjY0IGZvcm1hdHMuCisJKiBjb25maWd1cmUsIGNvbmZpZy5oLmluOiBS ZWdlbmVyYXRlLgorCiAyMDE3LTA3LTIxICBUb255IFJlaXggIDx0b255LnJl aXhAYXRvcy5uZXQ+CiAKIAkqIGZpbGV0eXBlLmF3azogQWRkIEFJWCBYQ09G RiB0eXBlIGRldGVjdGlvbi4KSW5kZXg6IGxpYmJhY2t0cmFjZS9jb25maWcu aC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaWJiYWNrdHJhY2Uv Y29uZmlnLmguaW4JKHJldmlzaW9uIDI1MDUxNCkKKysrIGxpYmJhY2t0cmFj ZS9jb25maWcuaC5pbgkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDkgQEAK IC8qIEVMRiBzaXplOiAzMiBvciA2NCAqLwogI3VuZGVmIEJBQ0tUUkFDRV9F TEZfU0laRQogCisvKiBYQ09GRiBzaXplOiAzMiBvciA2NCAqLworI3VuZGVm IEJBQ0tUUkFDRV9YQ09GRl9TSVpFCisKIC8qIERlZmluZSB0byAxIGlmIHlv dSBoYXZlIHRoZSBfX2F0b21pYyBmdW5jdGlvbnMgKi8KICN1bmRlZiBIQVZF X0FUT01JQ19GVU5DVElPTlMKIApJbmRleDogbGliYmFja3RyYWNlL2NvbmZp Z3VyZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaWJiYWNrdHJhY2Uv Y29uZmlndXJlCShyZXZpc2lvbiAyNTA1MTQpCisrKyBsaWJiYWNrdHJhY2Uv Y29uZmlndXJlCSh3b3JraW5nIGNvcHkpCkBAIC0xMjA0OCw5ICsxMjA0OCw5 IEBAIGVsZiopIEZPUk1BVF9GSUxFPSJlbGYubG8iIDs7CiBwZWNvZmYpIEZP Uk1BVF9GSUxFPSJwZWNvZmYubG8iCiAgICAgICAgIGJhY2t0cmFjZV9zdXBw b3J0c19kYXRhPW5vCiAJOzsKLXhjb2ZmKSBGT1JNQVRfRklMRT0ieGNvZmYu bG8iCi0gICAgICAgYmFja3RyYWNlX3N1cHBvcnRzX2RhdGE9bm8KLSAgICAg ICA7OworeGNvZmYqKSBGT1JNQVRfRklMRT0ieGNvZmYubG8iCisgICAgICAg IGJhY2t0cmFjZV9zdXBwb3J0c19kYXRhPW5vCisgICAgICAgIDs7CiAqKSB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5J Tkc6IGNvdWxkIG5vdCBkZXRlcm1pbmUgb3V0cHV0IGZpbGUgdHlwZSIgPiY1 CiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjb3VsZCBub3QgZGV0ZXJt aW5lIG91dHB1dCBmaWxlIHR5cGUiID4mMjt9CiAgICBGT1JNQVRfRklMRT0i dW5rbm93bi5sbyIKQEAgLTEyMDcyLDYgKzEyMDcyLDE5IEBAIGNhdCA+PmNv bmZkZWZzLmggPDxfQUNFT0YKIF9BQ0VPRgogCiAKKyMgWENPRkYgZGVmaW5l cy4KK3hjb2Zmc2l6ZT0KK2Nhc2UgIiRsaWJiYWNrdHJhY2VfY3Zfc3lzX2Zp bGV0eXBlIiBpbgoreGNvZmYzMikgeGNvZmZzaXplPTMyIDs7Cit4Y29mZjY0 KSB4Y29mZnNpemU9NjQgOzsKKyopICAgICAgIHhjb2Zmc2l6ZT11bnVzZWQK K2VzYWMKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBC QUNLVFJBQ0VfWENPRkZfU0laRSAkeGNvZmZzaXplCitfQUNFT0YKKworCiBC QUNLVFJBQ0VfU1VQUE9SVEVEPTAKIGlmIHRlc3QgIiRiYWNrdHJhY2Vfc3Vw cG9ydGVkIiA9ICJ5ZXMiOyB0aGVuCiAgIEJBQ0tUUkFDRV9TVVBQT1JURUQ9 MQpJbmRleDogbGliYmFja3RyYWNlL2NvbmZpZ3VyZS5hYwo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSBsaWJiYWNrdHJhY2UvY29uZmlndXJlLmFjCShy ZXZpc2lvbiAyNTA1MTQpCisrKyBsaWJiYWNrdHJhY2UvY29uZmlndXJlLmFj CSh3b3JraW5nIGNvcHkpCkBAIC0yMzMsOSArMjMzLDkgQEAgZWxmKikgRk9S TUFUX0ZJTEU9ImVsZi5sbyIgOzsKIHBlY29mZikgRk9STUFUX0ZJTEU9InBl Y29mZi5sbyIKICAgICAgICAgYmFja3RyYWNlX3N1cHBvcnRzX2RhdGE9bm8K IAk7OwoteGNvZmYpIEZPUk1BVF9GSUxFPSJ4Y29mZi5sbyIKLSAgICAgICBi YWNrdHJhY2Vfc3VwcG9ydHNfZGF0YT1ubwotICAgICAgIDs7Cit4Y29mZiop IEZPUk1BVF9GSUxFPSJ4Y29mZi5sbyIKKyAgICAgICAgYmFja3RyYWNlX3N1 cHBvcnRzX2RhdGE9bm8KKyAgICAgICAgOzsKICopIEFDX01TR19XQVJOKFtj b3VsZCBub3QgZGV0ZXJtaW5lIG91dHB1dCBmaWxlIHR5cGVdKQogICAgRk9S TUFUX0ZJTEU9InVua25vd24ubG8iCiAgICBiYWNrdHJhY2Vfc3VwcG9ydGVk PW5vCkBAIC0yNTIsNiArMjUyLDE1IEBAIGVsZjY0KSBlbGZzaXplPTY0IDs7 CiBlc2FjCiBBQ19ERUZJTkVfVU5RVU9URUQoW0JBQ0tUUkFDRV9FTEZfU0la RV0sIFskZWxmc2l6ZV0sIFtFTEYgc2l6ZTogMzIgb3IgNjRdKQogCisjIFhD T0ZGIGRlZmluZXMuCit4Y29mZnNpemU9CitjYXNlICIkbGliYmFja3RyYWNl X2N2X3N5c19maWxldHlwZSIgaW4KK3hjb2ZmMzIpIHhjb2Zmc2l6ZT0zMiA7 OworeGNvZmY2NCkgeGNvZmZzaXplPTY0IDs7CisqKSAgICAgICB4Y29mZnNp emU9dW51c2VkCitlc2FjCitBQ19ERUZJTkVfVU5RVU9URUQoW0JBQ0tUUkFD RV9YQ09GRl9TSVpFXSwgWyR4Y29mZnNpemVdLCBbWENPRkYgc2l6ZTogMzIg b3IgNjRdKQorCiBCQUNLVFJBQ0VfU1VQUE9SVEVEPTAKIGlmIHRlc3QgIiRi YWNrdHJhY2Vfc3VwcG9ydGVkIiA9ICJ5ZXMiOyB0aGVuCiAgIEJBQ0tUUkFD RV9TVVBQT1JURUQ9MQpJbmRleDogbGliYmFja3RyYWNlL2ZpbGV0eXBlLmF3 awo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaWJiYWNrdHJhY2UvZmls ZXR5cGUuYXdrCShyZXZpc2lvbiAyNTA1MTQpCisrKyBsaWJiYWNrdHJhY2Uv ZmlsZXR5cGUuYXdrCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNiBAQAog L1wxNzdFTEZcMDAyLyB7IGlmIChOUiA9PSAxKSB7IHByaW50ICJlbGY2NCI7 IGV4aXQgfSB9CiAvXDExNFwwMDEvICAgIHsgaWYgKE5SID09IDEpIHsgcHJp bnQgInBlY29mZiI7IGV4aXQgfSB9CiAvXDE0NFwyMDYvICAgIHsgaWYgKE5S ID09IDEpIHsgcHJpbnQgInBlY29mZiI7IGV4aXQgfSB9Ci0vXDAwMVwzMzcv ICAgIHsgaWYgKE5SID09IDEpIHsgcHJpbnQgInhjb2ZmIjsgZXhpdCB9IH0K LS9cMDAxXDM2Ny8gICAgeyBpZiAoTlIgPT0gMSkgeyBwcmludCAieGNvZmYi OyBleGl0IH0gfQorL1wwMDFcMzM3LyAgICB7IGlmIChOUiA9PSAxKSB7IHBy aW50ICJ4Y29mZjMyIjsgZXhpdCB9IH0KKy9cMDAxXDM2Ny8gICAgeyBpZiAo TlIgPT0gMSkgeyBwcmludCAieGNvZmY2NCI7IGV4aXQgfSB9CiAKSW5kZXg6 IGxpYmJhY2t0cmFjZS94Y29mZi5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIGxpYmJhY2t0cmFjZS94Y29mZi5jCShyZXZpc2lvbiAyNTA1MTQpCisr KyBsaWJiYWNrdHJhY2UveGNvZmYuYwkod29ya2luZyBjb3B5KQpAQCAtMSw1 ICsxLDYgQEAKLS8qIHhjb2ZmLmMgLS0gR2V0IGRlYnVnIGRhdGEgZnJvbSBh IFhDT0ZGRiBmaWxlIGZvciBiYWNrdHJhY2VzLgotICAgQ29weXJpZ2h0IChD KSAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLyogeGNv ZmYuYyAtLSBHZXQgZGVidWcgZGF0YSBmcm9tIGFuIFhDT0ZGIGZpbGUgZm9y IGJhY2t0cmFjZXMuCisgICBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIEFkYXB0ZWQgZnJvbSBl bGYuYy4KIAogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMgYXJlCkBAIC0zMSw0NiArMzIsMTQ2MCBAQCBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4gICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK IAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgog I2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIF9BSVgKKy8qIEFJWCBs b2FkcXVlcnkuICAqLworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8 c3lzL2xkci5oPgorI2VuZGlmCiAKICNpbmNsdWRlICJiYWNrdHJhY2UuaCIK ICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCi0vKiBBIHRyaXZpYWwgcm91dGlu ZSB0aGF0IGFsd2F5cyBmYWlscyB0byBmaW5kIGZpbGVsaW5lIGRhdGEuICAq LworLyogVGhlIGNvbmZpZ3VyZSBzY3JpcHQgbXVzdCB0ZWxsIHVzIHdoZXRo ZXIgd2UgYXJlIDMyLWJpdCBvciA2NC1iaXQKKyAgIFhDT0ZGLiAgV2UgY291 bGQgbWFrZSB0aGlzIGNvZGUgdGVzdCBhbmQgc3VwcG9ydCBlaXRoZXIgcG9z c2liaWxpdHksCisgICBidXQgdGhlcmUgaXMgbm8gcG9pbnQuICBUaGlzIGNv ZGUgb25seSB3b3JrcyBmb3IgdGhlIGN1cnJlbnRseQorICAgcnVubmluZyBl eGVjdXRhYmxlLCB3aGljaCBtZWFucyB0aGF0IHdlIGtub3cgdGhlIFhDT0ZG IG1vZGUgYXQKKyAgIGNvbmZpZ3VyZSBtb2RlLiAgKi8KIAorI2lmIEJBQ0tU UkFDRV9YQ09GRl9TSVpFICE9IDMyICYmIEJBQ0tUUkFDRV9YQ09GRl9TSVpF ICE9IDY0CisjZXJyb3IgIlVua25vd24gQkFDS1RSQUNFX1hDT0ZGX1NJWkUi CisjZW5kaWYKKworLyogWENPRkYgZmlsZSBoZWFkZXIuICAqLworCisjaWYg QkFDS1RSQUNFX1hDT0ZGX1NJWkUgPT0gMzIKKwordHlwZWRlZiBzdHJ1Y3Qg eworICB1aW50MTZfdCBmX21hZ2ljOworICB1aW50MTZfdCBmX25zY25zOwor ICB1aW50MzJfdCBmX3RpbWRhdDsKKyAgdWludDMyX3QgZl9zeW1wdHI7Cisg IHVpbnQzMl90IGZfbnN5bXM7CisgIHVpbnQxNl90IGZfb3B0aGRyOworICB1 aW50MTZfdCBmX2ZsYWdzOworfSBiX3hjb2ZmX2ZpbGhkcjsKKworI2RlZmlu ZSBYQ09GRl9NQUdJQwkwNzM3CisKKyNlbHNlIC8qIEJBQ0tUUkFDRV9YQ09G Rl9TSVpFICE9IDMyICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdWludDE2 X3QgZl9tYWdpYzsKKyAgdWludDE2X3QgZl9uc2NuczsKKyAgdWludDMyX3Qg Zl90aW1kYXQ7CisgIHVpbnQ2NF90IGZfc3ltcHRyOworICB1aW50MTZfdCBm X29wdGhkcjsKKyAgdWludDE2X3QgZl9mbGFnczsKKyAgdWludDMyX3QgZl9u c3ltczsKK30gYl94Y29mZl9maWxoZHI7CisKKyNkZWZpbmUgWENPRkZfTUFH SUMJMDc2NworCisjZW5kaWYgLyogQkFDS1RSQUNFX1hDT0ZGX1NJWkUgIT0g MzIgKi8KKworI2RlZmluZSBGX1NIUk9CSgkweDIwMDAJLyogRmlsZSBpcyBh IHNoYXJlZCBvYmplY3QuICAqLworCisvKiBYQ09GRiBzZWN0aW9uIGhlYWRl ci4gICovCisKKyNpZiBCQUNLVFJBQ0VfWENPRkZfU0laRSA9PSAzMgorCit0 eXBlZGVmIHN0cnVjdCB7CisgIGNoYXIgc19uYW1lWzhdOworICB1aW50MzJf dCBzX3BhZGRyOworICB1aW50MzJfdCBzX3ZhZGRyOworICB1aW50MzJfdCBz X3NpemU7CisgIHVpbnQzMl90IHNfc2NucHRyOworICB1aW50MzJfdCBzX3Jl bHB0cjsKKyAgdWludDMyX3Qgc19sbm5vcHRyOworICB1aW50MTZfdCBzX25y ZWxvYzsKKyAgdWludDE2X3Qgc19ubG5ubzsKKyAgdWludDMyX3Qgc19mbGFn czsKK30gYl94Y29mZl9zY25oZHI7CisKKyNkZWZpbmUgX09WRVJGTE9XX01B UktFUgk2NTUzNQorCisjZWxzZSAvKiBCQUNLVFJBQ0VfWENPRkZfU0laRSAh PSAzMiAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNoYXIgbmFtZVs4XTsK KyAgdWludDY0X3Qgc19wYWRkcjsKKyAgdWludDY0X3Qgc192YWRkcjsKKyAg dWludDY0X3Qgc19zaXplOworICB1aW50NjRfdCBzX3NjbnB0cjsKKyAgdWlu dDY0X3Qgc19yZWxwdHI7CisgIHVpbnQ2NF90IHNfbG5ub3B0cjsKKyAgdWlu dDMyX3Qgc19ucmVsb2M7CisgIHVpbnQzMl90IHNfbmxubm87CisgIHVpbnQz Ml90IHNfZmxhZ3M7Cit9IGJfeGNvZmZfc2NuaGRyOworCisjZW5kaWYgLyog QkFDS1RSQUNFX1hDT0ZGX1NJWkUgIT0gMzIgKi8KKworI2RlZmluZSBTVFlQ X1RFWFQJMHgyMAkvKiBFeGVjdXRhYmxlIHRleHQgKGNvZGUpIHNlY3Rpb24u ICAqLworI2RlZmluZSBTVFlQX09WUkZMTwkweDgwMDAJLyogTGluZS1udW1i ZXIgZmllbGQgb3ZlcmZsb3cgc2VjdGlvbi4gICovCisKKy8qIFhDT0ZGIHN5 bWJvbC4gICovCisKKyNkZWZpbmUgU1lNTk1MRU4JOAorCisjaWYgQkFDS1RS QUNFX1hDT0ZGX1NJWkUgPT0gMzIKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1 bmlvbiB7CisgICAgY2hhciBfbmFtZVtTWU1OTUxFTl07CisgICAgc3RydWN0 IHsKKyAgICAgIHVpbnQzMl90IF96ZXJvZXM7CisgICAgICB1aW50MzJfdCBf b2Zmc2V0OworICAgIH0gX3M7CisgIH0gX3U7CisjZGVmaW5lIG5fbmFtZQkJ X3UuX25hbWUKKyNkZWZpbmUgbl96ZXJvZXMJX3UuX3MuX3plcm9lcworI2Rl ZmluZSBuX29mZnNldF8JX3UuX3MuX29mZnNldAorCisgIHVpbnQzMl90IG5f dmFsdWU7CisgIGludDE2X3QgIG5fc2NudW07CisgIHVpbnQxNl90IG5fdHlw ZTsKKyAgdWludDhfdCAgbl9zY2xhc3M7CisgIHVpbnQ4X3QgIG5fbnVtYXV4 OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYl94Y29mZl9zeW1lbnQ7 CisKKyNlbHNlIC8qIEJBQ0tUUkFDRV9YQ09GRl9TSVpFICE9IDMyICovCisK K3R5cGVkZWYgc3RydWN0IHsKKyAgdWludDY0X3Qgbl92YWx1ZTsKKyAgdWlu dDMyX3Qgbl9vZmZzZXRfOworICBpbnQxNl90ICBuX3NjbnVtOworICB1aW50 MTZfdCBuX3R5cGU7CisgIHVpbnQ4X3QgIG5fc2NsYXNzOworICB1aW50OF90 ICBuX251bWF1eDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGJfeGNv ZmZfc3ltZW50OworCisjZW5kaWYgLyogQkFDS1RSQUNFX1hDT0ZGX1NJWkUg IT0gMzIgKi8KKworI2RlZmluZSBTWU1FU1oJMTgKKworI2RlZmluZSBDX0VY VAkJMgkvKiBFeHRlcm5hbCBzeW1ib2wuICAqLworI2RlZmluZSBDX0ZDTgkJ MTAxCS8qIEJlZ2lubmluZyBvciBlbmQgb2YgZnVuY3Rpb24uICAqLworI2Rl ZmluZSBDX0ZJTEUJCTEwMwkvKiBTb3VyY2UgZmlsZSBuYW1lLiAgKi8KKyNk ZWZpbmUgQ19ISURFWFQJMTA3CS8qIFVubmFtZWQgZXh0ZXJuYWwgc3ltYm9s LiAgKi8KKyNkZWZpbmUgQ19CSU5DTAkJMTA4CS8qIEJlZ2lubmluZyBvZiBp bmNsdWRlIGZpbGUuICAqLworI2RlZmluZSBDX0VJTkNMCQkxMDkJLyogRW5k IG9mIGluY2x1ZGUgZmlsZS4gICovCisjZGVmaW5lIENfV0VBS0VYVAkxMTEJ LyogV2VhayBleHRlcm5hbCBzeW1ib2wuICAqLworCisjZGVmaW5lIElTRkNO KHgpCSgoeCkgJiAweDAwMjApCisKKy8qIFhDT0ZGIEFVWCBlbnRyeS4gICov CisKKyNkZWZpbmUgQVVYRVNaCQkxOAorI2RlZmluZSBGSUxOTUxFTgkxNAor Cit0eXBlZGVmIHVuaW9uIHsKKyNpZiBCQUNLVFJBQ0VfWENPRkZfU0laRSA9 PSAzMgorICBzdHJ1Y3QgeworICAgIHVpbnQxNl90IHBhZDsKKyAgICB1aW50 MTZfdCB4X2xubm9oaTsKKyAgICB1aW50MTZfdCB4X2xubm87CisgIH0geF9i bG9jazsKKyNlbHNlCisgIHN0cnVjdCB7CisgICAgdWludDMyX3QgeF9sbm5v OworICB9IHhfYmxvY2s7CisjZW5kaWYKKyAgdW5pb24geworICAgIGNoYXIg eF9mbmFtZVtGSUxOTUxFTl07CisgICAgc3RydWN0IHsKKyAgICAgIHVpbnQz Ml90IHhfemVyb2VzOworICAgICAgdWludDMyX3QgeF9vZmZzZXQ7CisgICAg ICBjaGFyICAgICBwYWRbRklMTk1MRU4tOF07CisgICAgICB1aW50OF90ICB4 X2Z0eXBlOworICAgIH0gX3g7CisgIH0geF9maWxlOworI2lmIEJBQ0tUUkFD RV9YQ09GRl9TSVpFID09IDMyCisgIHN0cnVjdCB7CisgICAgdWludDMyX3Qg eF9leHB0cjsKKyAgICB1aW50MzJfdCB4X2ZzaXplOworICAgIHVpbnQzMl90 IHhfbG5ub3B0cjsKKyAgICB1aW50MzJfdCB4X2VuZG5keDsKKyAgfSB4X2Zj bjsKKyNlbHNlCisgIHN0cnVjdCB7CisgICAgdWludDY0X3QgeF9sbm5vcHRy OworICAgIHVpbnQzMl90IHhfZnNpemU7CisgICAgdWludDMyX3QgeF9lbmRu ZHg7CisgIH0geF9mY247CisjZW5kaWYKKyAgc3RydWN0IHsKKyAgICB1aW50 OF90IHBhZFtBVVhFU1otMV07CisgICAgdWludDhfdCB4X2F1eHR5cGU7Cisg IH0geF9hdXh0eXBlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYl94 Y29mZl9hdXhlbnQ7CisKKy8qIFhDT0ZGIGxpbmUgbnVtYmVyIGVudHJ5LiAg Ki8KKworI2lmIEJBQ0tUUkFDRV9YQ09GRl9TSVpFID09IDMyCisKK3R5cGVk ZWYgc3RydWN0IHsKKyAgdW5pb24geworICAgIHVpbnQzMl90IGxfc3ltbmR4 OworICAgIHVpbnQzMl90IGxfcGFkZHI7CisgIH0gbF9hZGRyOworICB1aW50 MTZfdCBsX2xubm87Cit9IGJfeGNvZmZfbGluZW5vOworCisjZGVmaW5lIExJ TkVTWgk2CisKKyNlbHNlIC8qIEJBQ0tUUkFDRV9YQ09GRl9TSVpFICE9IDMy ICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5pb24geworICAgIHVpbnQz Ml90IGxfc3ltbmR4OworICAgIHVpbnQ2NF90IGxfcGFkZHI7CisgIH0gbF9h ZGRyOworICB1aW50MzJfdCBsX2xubm87Cit9IGJfeGNvZmZfbGluZW5vOwor CisjZGVmaW5lIExJTkVTWgkxMgorCisjZW5kaWYgLyogQkFDS1RSQUNFX1hD T0ZGX1NJWkUgIT0gMzIgKi8KKworI2lmZGVmIF9BSVgKKyNpZiBCQUNLVFJB Q0VfWENPRkZfU0laRSA9PSAzMgorI2RlZmluZSBYQ09GRl9BSVhfVEVYVEJB U0UJMHgxMDAwMDAwMHUKKyNlbHNlCisjZGVmaW5lIFhDT0ZGX0FJWF9URVhU QkFTRQkweDEwMDAwMDAwMHVsCisjZW5kaWYKKyNlbmRpZgorCisvKiBBSVgg YmlnIGFyY2hpdmUgZml4ZWQtbGVuZ3RoIGhlYWRlci4gICovCisKKyNkZWZp bmUgQUlBTUFHQklHCSI8YmlnYWY+XG4iCisKK3R5cGVkZWYgc3RydWN0IHsK KyAgY2hhciBmbF9tYWdpY1s4XTsJLyogQXJjaGl2ZSBtYWdpYyBzdHJpbmcu ICAqLworICBjaGFyIGZsX21lbW9mZlsyMF07CS8qIE9mZnNldCB0byBtZW1i ZXIgdGFibGUuICAqLworICBjaGFyIGZsX2dzdG9mZlsyMF07CS8qIE9mZnNl dCB0byBnbG9iYWwgc3ltYm9sIHRhYmxlLiAgKi8KKyAgY2hhciBmbF9nc3Q2 NG9mZlsyMF07CS8qIE9mZnNldCB0byBnbG9iYWwgc3ltYm9sIHRhYmxlIGZv ciA2NC1iaXQgb2JqZWN0cy4gICovCisgIGNoYXIgZmxfZnN0bW9mZlsyMF07 CS8qIE9mZnNldCB0byBmaXJzdCBhcmNoaXZlIG1lbWJlci4gICovCisgIGNo YXIgZmxfZnJlZW9mZlsyMF07CS8qIE9mZnNldCB0byBmaXJzdCBtZW1iZXIg b24gZnJlZSBsaXN0LiAgKi8KK30gYl9hcl9mbF9oZHI7CisKKy8qIEFJWCBi aWcgYXJjaGl2ZSBmaWxlIG1lbWJlciBoZWFkZXIuICAqLworCit0eXBlZGVm IHN0cnVjdCB7CisgIGNoYXIgYXJfc2l6ZVsyMF07CS8qIEZpbGUgbWVtYmVy IHNpemUgLSBkZWNpbWFsLiAgKi8KKyAgY2hhciBhcl9ueHRtZW1bMjBdOwkv KiBOZXh0IG1lbWJlciBvZmZzZXQgLSBkZWNpbWFsLiAgKi8KKyAgY2hhciBh cl9wcnZtZW1bMjBdOwkvKiBQcmV2aW91cyBtZW1iZXIgb2Zmc2V0IC0gZGVj aW1hbC4gICovCisgIGNoYXIgYXJfZGF0ZVsxMl07CS8qIEZpbGUgbWVtYmVy IGRhdGUgLSBkZWNpbWFsLiAgKi8KKyAgY2hhciBhcl91aWRbMTJdOwkvKiBG aWxlIG1lbWJlciB1c2VyaWQgLSBkZWNpbWFsLiAgKi8KKyAgY2hhciBhcl9n aWRbMTJdOwkvKiBGaWxlIG1lbWJlciBncm91cCBpZCAtIGRlY2ltYWwuICAq LworICBjaGFyIGFyX21vZGVbMTJdOwkvKiBGaWxlIG1lbWJlciBtb2RlIC0g b2N0YWwuICAqLworICBjaGFyIGFyX25hbWxlbls0XTsJLyogRmlsZSBtZW1i ZXIgbmFtZSBsZW5ndGggLSBkZWNpbWFsLiAgKi8KKyAgY2hhciBhcl9uYW1l WzJdOwkvKiBTdGFydCBvZiBtZW1iZXIgbmFtZS4gICovCit9IGJfYXJfaGRy OworCisKKy8qIEluZm9ybWF0aW9uIHdlIGtlZXAgZm9yIGFuIFhDT0ZGIHN5 bWJvbC4gICovCisKK3N0cnVjdCB4Y29mZl9zeW1ib2wKK3sKKyAgLyogVGhl IG5hbWUgb2YgdGhlIHN5bWJvbC4gICovCisgIGNvbnN0IGNoYXIgKm5hbWU7 CisgIC8qIFRoZSBhZGRyZXNzIG9mIHRoZSBzeW1ib2wuICAqLworICB1aW50 cHRyX3QgYWRkcmVzczsKKyAgLyogVGhlIHNpemUgb2YgdGhlIHN5bWJvbC4g ICovCisgIHNpemVfdCBzaXplOworfTsKKworLyogSW5mb3JtYXRpb24gdG8g cGFzcyB0byB4Y29mZl9zeW1pbmZvLiAgKi8KKworc3RydWN0IHhjb2ZmX3N5 bWluZm9fZGF0YQoreworICAvKiBTeW1ib2xzIGZvciB0aGUgbmV4dCBtb2R1 bGUuICAqLworICBzdHJ1Y3QgeGNvZmZfc3ltaW5mb19kYXRhICpuZXh0Owor ICAvKiBUaGUgWENPRkYgc3ltYm9scywgc29ydGVkIGJ5IGFkZHJlc3MuICAq LworICBzdHJ1Y3QgeGNvZmZfc3ltYm9sICpzeW1ib2xzOworICAvKiBUaGUg bnVtYmVyIG9mIHN5bWJvbHMuICAqLworICBzaXplX3QgY291bnQ7Cit9Owor CisvKiBJbmZvcm1hdGlvbiBhYm91dCBhbiBpbmNsdWRlIGZpbGUuICAqLwor CitzdHJ1Y3QgeGNvZmZfaW5jbAoreworICAvKiBGaWxlIG5hbWUuICAqLwor ICBjb25zdCBjaGFyICpmaWxlbmFtZTsKKyAgLyogT2Zmc2V0IHRvIGZpcnN0 IGxpbmUgbnVtYmVyIGZyb20gdGhlIGluY2x1ZGUgZmlsZS4gICovCisgIHVp bnRwdHJfdCBiZWdpbjsKKyAgLyogT2Zmc2V0IHRvIGxhc3QgbGluZSBudW1i ZXIgZnJvbSB0aGUgaW5jbHVkZSBmaWxlLiAgKi8KKyAgdWludHB0cl90IGVu ZDsKK307CisKKy8qIEEgZ3Jvd2FibGUgdmVjdG9yIG9mIGluY2x1ZGUgZmls ZXMgaW5mb3JtYXRpb24uICAqLworCitzdHJ1Y3QgeGNvZmZfaW5jbF92ZWN0 b3IKK3sKKyAgLyogTWVtb3J5LiAgVGhpcyBpcyBhbiBhcnJheSBvZiBzdHJ1 Y3QgeGNvZmZfaW5jbC4gICovCisgIHN0cnVjdCBiYWNrdHJhY2VfdmVjdG9y IHZlYzsKKyAgLyogTnVtYmVyIG9mIGluY2x1ZGUgZmlsZXMuICAqLworICBz aXplX3QgY291bnQ7Cit9OworCisvKiBNYXAgYSBzaW5nbGUgUEMgdmFsdWUg dG8gYSBmaWxlL2Z1bmN0aW9uL2xpbmUuICAqLworCitzdHJ1Y3QgeGNvZmZf bGluZQoreworICAvKiBQQy4gICovCisgIHVpbnRwdHJfdCBwYzsKKyAgLyog RmlsZSBuYW1lLiAgTWFueSBlbnRyaWVzIGluIHRoZSBhcnJheSBhcmUgZXhw ZWN0ZWQgdG8gcG9pbnQgdG8KKyAgICAgdGhlIHNhbWUgZmlsZSBuYW1lLiAg Ki8KKyAgY29uc3QgY2hhciAqZmlsZW5hbWU7CisgIC8qIEZ1bmN0aW9uIG5h bWUuICAqLworICBjb25zdCBjaGFyICpmdW5jdGlvbjsKKyAgLyogTGluZSBu dW1iZXIuICAqLworICBpbnQgbGluZW5vOworfTsKKworLyogQSBncm93YWJs ZSB2ZWN0b3Igb2YgbGluZSBudW1iZXIgaW5mb3JtYXRpb24uICBUaGlzIGlz IHVzZWQgd2hpbGUKKyAgIHJlYWRpbmcgdGhlIGxpbmUgbnVtYmVycy4gICov CisKK3N0cnVjdCB4Y29mZl9saW5lX3ZlY3RvcgoreworICAvKiBNZW1vcnku ICBUaGlzIGlzIGFuIGFycmF5IG9mIHN0cnVjdCB4Y29mZl9saW5lLiAgKi8K KyAgc3RydWN0IGJhY2t0cmFjZV92ZWN0b3IgdmVjOworICAvKiBOdW1iZXIg b2YgdmFsaWQgbWFwcGluZ3MuICAqLworICBzaXplX3QgY291bnQ7Cit9Owor CisvKiBUaGUgaW5mb3JtYXRpb24gd2UgbmVlZCB0byBtYXAgYSBQQyB0byBh IGZpbGUgYW5kIGxpbmUuICAqLworCitzdHJ1Y3QgeGNvZmZfZmlsZWxpbmVf ZGF0YQoreworICAvKiBUaGUgZGF0YSBmb3IgdGhlIG5leHQgZmlsZSB3ZSBr bm93IGFib3V0LiAgKi8KKyAgc3RydWN0IHhjb2ZmX2ZpbGVsaW5lX2RhdGEg Km5leHQ7CisgIC8qIExpbmUgbnVtYmVyIGluZm9ybWF0aW9uLiAgKi8KKyAg c3RydWN0IHhjb2ZmX2xpbmVfdmVjdG9yIHZlYzsKK307CisKKworLyogQSBk dW1teSBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIHdoZW4gd2UgY2FuJ3QgZmlu ZCBhbnkgZGVidWcgaW5mby4gICovCisKIHN0YXRpYyBpbnQKLXhjb2ZmX2Zp bGVsaW5lIChzdHJ1Y3QgYmFja3RyYWNlX3N0YXRlICpzdGF0ZSBBVFRSSUJV VEVfVU5VU0VELAotCQl1aW50cHRyX3QgcGMsIGJhY2t0cmFjZV9mdWxsX2Nh bGxiYWNrIGNhbGxiYWNrLAotCQliYWNrdHJhY2VfZXJyb3JfY2FsbGJhY2sg ZXJyb3JfY2FsbGJhY2sgQVRUUklCVVRFX1VOVVNFRCwKLQkJdm9pZCAqZGF0 YSkKK3hjb2ZmX25vZGVidWcgKHN0cnVjdCBiYWNrdHJhY2Vfc3RhdGUgKnN0 YXRlIEFUVFJJQlVURV9VTlVTRUQsCisJICAgICAgIHVpbnRwdHJfdCBwYyBB VFRSSUJVVEVfVU5VU0VELAorCSAgICAgICBiYWNrdHJhY2VfZnVsbF9jYWxs YmFjayBjYWxsYmFjayBBVFRSSUJVVEVfVU5VU0VELAorCSAgICAgICBiYWNr dHJhY2VfZXJyb3JfY2FsbGJhY2sgZXJyb3JfY2FsbGJhY2ssIHZvaWQgKmRh dGEpCit7CisgIGVycm9yX2NhbGxiYWNrIChkYXRhLCAibm8gZGVidWcgaW5m byBpbiBYQ09GRiBleGVjdXRhYmxlIiwgLTEpOworICByZXR1cm4gMDsKK30K IAorLyogQSBkdW1teSBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIHdoZW4gd2Ug Y2FuJ3QgZmluZCBhIHN5bWJvbAorICAgdGFibGUuICAqLworCitzdGF0aWMg dm9pZAoreGNvZmZfbm9zeW1zIChzdHJ1Y3QgYmFja3RyYWNlX3N0YXRlICpz dGF0ZSBBVFRSSUJVVEVfVU5VU0VELAorCSAgICAgIHVpbnRwdHJfdCBhZGRy IEFUVFJJQlVURV9VTlVTRUQsCisJICAgICAgYmFja3RyYWNlX3N5bWluZm9f Y2FsbGJhY2sgY2FsbGJhY2sgQVRUUklCVVRFX1VOVVNFRCwKKwkgICAgICBi YWNrdHJhY2VfZXJyb3JfY2FsbGJhY2sgZXJyb3JfY2FsbGJhY2ssIHZvaWQg KmRhdGEpCiB7Ci0gIHN0YXRpYyBjaGFyIGJ1ZlszMl07CisgIGVycm9yX2Nh bGxiYWNrIChkYXRhLCAibm8gc3ltYm9sIHRhYmxlIGluIFhDT0ZGIGV4ZWN1 dGFibGUiLCAtMSk7Cit9CiAKLSAgc25wcmludGYgKGJ1Ziwgc2l6ZW9mKGJ1 ZiksICJwYz0weCVsbHgiLCAodW5zaWduZWQgbG9uZyBsb25nKSBwYyk7Ci0g IHJldHVybiBjYWxsYmFjayAoZGF0YSwgcGMsICJ1bmtub3duX2ZpbGUiLCAx MjMsIGJ1Zik7CisvKiBDb21wYXJlIHN0cnVjdCB4Y29mZl9zeW1ib2wgZm9y IHFzb3J0LiAgKi8KKworc3RhdGljIGludAoreGNvZmZfc3ltYm9sX2NvbXBh cmUgKGNvbnN0IHZvaWQgKnYxLCBjb25zdCB2b2lkICp2MikKK3sKKyAgY29u c3Qgc3RydWN0IHhjb2ZmX3N5bWJvbCAqZTEgPSAoY29uc3Qgc3RydWN0IHhj b2ZmX3N5bWJvbCAqKSB2MTsKKyAgY29uc3Qgc3RydWN0IHhjb2ZmX3N5bWJv bCAqZTIgPSAoY29uc3Qgc3RydWN0IHhjb2ZmX3N5bWJvbCAqKSB2MjsKKwor ICBpZiAoZTEtPmFkZHJlc3MgPCBlMi0+YWRkcmVzcykKKyAgICByZXR1cm4g LTE7CisgIGVsc2UgaWYgKGUxLT5hZGRyZXNzID4gZTItPmFkZHJlc3MpCisg ICAgcmV0dXJuIDE7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKIH0KIAorLyog Q29tcGFyZSBhbiBBRERSIGFnYWluc3QgYW4geGNvZmZfc3ltYm9sIGZvciBi c2VhcmNoLiAgKi8KKworc3RhdGljIGludAoreGNvZmZfc3ltYm9sX3NlYXJj aCAoY29uc3Qgdm9pZCAqdmtleSwgY29uc3Qgdm9pZCAqdmVudHJ5KQorewor ICBjb25zdCB1aW50cHRyX3QgKmtleSA9IChjb25zdCB1aW50cHRyX3QgKikg dmtleTsKKyAgY29uc3Qgc3RydWN0IHhjb2ZmX3N5bWJvbCAqZW50cnkgPSAo Y29uc3Qgc3RydWN0IHhjb2ZmX3N5bWJvbCAqKSB2ZW50cnk7CisgIHVpbnRw dHJfdCBhZGRyOworCisgIGFkZHIgPSAqa2V5OworICBpZiAoYWRkciA8IGVu dHJ5LT5hZGRyZXNzKQorICAgIHJldHVybiAtMTsKKyAgZWxzZSBpZiAoKGVu dHJ5LT5zaXplID09IDAgJiYgYWRkciA+IGVudHJ5LT5hZGRyZXNzKQorCSAg IHx8IChlbnRyeS0+c2l6ZSA+IDAgJiYgYWRkciA+PSBlbnRyeS0+YWRkcmVz cyArIGVudHJ5LT5zaXplKSkKKyAgICByZXR1cm4gMTsKKyAgZWxzZQorICAg IHJldHVybiAwOworfQorCisvKiBBZGQgWERBVEEgdG8gdGhlIGxpc3QgaW4g U1RBVEUuICAqLworCiBzdGF0aWMgdm9pZAoreGNvZmZfYWRkX3N5bWluZm9f ZGF0YSAoc3RydWN0IGJhY2t0cmFjZV9zdGF0ZSAqc3RhdGUsCisJCQlzdHJ1 Y3QgeGNvZmZfc3ltaW5mb19kYXRhICp4ZGF0YSkKK3sKKyAgaWYgKCFzdGF0 ZS0+dGhyZWFkZWQpCisgICAgeworICAgICAgc3RydWN0IHhjb2ZmX3N5bWlu Zm9fZGF0YSAqKnBwOworCisgICAgICBmb3IgKHBwID0gKHN0cnVjdCB4Y29m Zl9zeW1pbmZvX2RhdGEgKiopICh2b2lkICopICZzdGF0ZS0+c3ltaW5mb19k YXRhOworCSAgICpwcCAhPSBOVUxMOworCSAgIHBwID0gJigqcHApLT5uZXh0 KQorCTsKKyAgICAgICpwcCA9IHhkYXRhOworICAgIH0KKyAgZWxzZQorICAg IHsKKyAgICAgIHdoaWxlICgxKQorCXsKKwkgIHN0cnVjdCB4Y29mZl9zeW1p bmZvX2RhdGEgKipwcDsKKworCSAgcHAgPSAoc3RydWN0IHhjb2ZmX3N5bWlu Zm9fZGF0YSAqKikgKHZvaWQgKikgJnN0YXRlLT5zeW1pbmZvX2RhdGE7CisK KwkgIHdoaWxlICgxKQorCSAgICB7CisJICAgICAgc3RydWN0IHhjb2ZmX3N5 bWluZm9fZGF0YSAqcDsKKworCSAgICAgIHAgPSBiYWNrdHJhY2VfYXRvbWlj X2xvYWRfcG9pbnRlciAocHApOworCisJICAgICAgaWYgKHAgPT0gTlVMTCkK KwkJYnJlYWs7CisKKwkgICAgICBwcCA9ICZwLT5uZXh0OworCSAgICB9CisK KwkgIGlmIChfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwIChwcCwgTlVM TCwgeGRhdGEpKQorCSAgICBicmVhazsKKwl9CisgICAgfQorfQorCisvKiBS ZXR1cm4gdGhlIHN5bWJvbCBuYW1lIGFuZCB2YWx1ZSBmb3IgYW4gQUREUi4g ICovCisKK3N0YXRpYyB2b2lkCiB4Y29mZl9zeW1pbmZvIChzdHJ1Y3QgYmFj a3RyYWNlX3N0YXRlICpzdGF0ZSBBVFRSSUJVVEVfVU5VU0VELCB1aW50cHRy X3QgYWRkciwKLSAgICAgICAgICAgICAgIGJhY2t0cmFjZV9zeW1pbmZvX2Nh bGxiYWNrIGNhbGxiYWNrLAotICAgICAgICAgICAgICAgYmFja3RyYWNlX2Vy cm9yX2NhbGxiYWNrIGVycm9yX2NhbGxiYWNrIEFUVFJJQlVURV9VTlVTRUQs Ci0gICAgICAgICAgICAgICB2b2lkICpkYXRhKQorCSAgICAgICBiYWNrdHJh Y2Vfc3ltaW5mb19jYWxsYmFjayBjYWxsYmFjaywKKwkgICAgICAgYmFja3Ry YWNlX2Vycm9yX2NhbGxiYWNrIGVycm9yX2NhbGxiYWNrIEFUVFJJQlVURV9V TlVTRUQsCisJICAgICAgIHZvaWQgKmRhdGEpCiB7Ci0gIGNhbGxiYWNrIChk YXRhLCBhZGRyLCAidW5rbm93biIsIDAsIDApOworICBzdHJ1Y3QgeGNvZmZf c3ltaW5mb19kYXRhICplZGF0YTsKKyAgc3RydWN0IHhjb2ZmX3N5bWJvbCAq c3ltID0gTlVMTDsKKworICBpZiAoIXN0YXRlLT50aHJlYWRlZCkKKyAgICB7 CisgICAgICBmb3IgKGVkYXRhID0gKHN0cnVjdCB4Y29mZl9zeW1pbmZvX2Rh dGEgKikgc3RhdGUtPnN5bWluZm9fZGF0YTsKKwkgICBlZGF0YSAhPSBOVUxM OworCSAgIGVkYXRhID0gZWRhdGEtPm5leHQpCisJeworCSAgc3ltID0gKChz dHJ1Y3QgeGNvZmZfc3ltYm9sICopCisJCSBic2VhcmNoICgmYWRkciwgZWRh dGEtPnN5bWJvbHMsIGVkYXRhLT5jb3VudCwKKwkJCSAgc2l6ZW9mIChzdHJ1 Y3QgeGNvZmZfc3ltYm9sKSwgeGNvZmZfc3ltYm9sX3NlYXJjaCkpOworCSAg aWYgKHN5bSAhPSBOVUxMKQorCSAgICBicmVhazsKKwl9CisgICAgfQorICBl bHNlCisgICAgeworICAgICAgc3RydWN0IHhjb2ZmX3N5bWluZm9fZGF0YSAq KnBwOworCisgICAgICBwcCA9IChzdHJ1Y3QgeGNvZmZfc3ltaW5mb19kYXRh ICoqKSAodm9pZCAqKSAmc3RhdGUtPnN5bWluZm9fZGF0YTsKKyAgICAgIHdo aWxlICgxKQorCXsKKwkgIGVkYXRhID0gYmFja3RyYWNlX2F0b21pY19sb2Fk X3BvaW50ZXIgKHBwKTsKKwkgIGlmIChlZGF0YSA9PSBOVUxMKQorCSAgICBi cmVhazsKKworCSAgc3ltID0gKChzdHJ1Y3QgeGNvZmZfc3ltYm9sICopCisJ CSBic2VhcmNoICgmYWRkciwgZWRhdGEtPnN5bWJvbHMsIGVkYXRhLT5jb3Vu dCwKKwkJCSAgc2l6ZW9mIChzdHJ1Y3QgeGNvZmZfc3ltYm9sKSwgeGNvZmZf c3ltYm9sX3NlYXJjaCkpOworCSAgaWYgKHN5bSAhPSBOVUxMKQorCSAgICBi cmVhazsKKworCSAgcHAgPSAmZWRhdGEtPm5leHQ7CisJfQorICAgIH0KKwor ICBpZiAoc3ltID09IE5VTEwpCisgICAgY2FsbGJhY2sgKGRhdGEsIGFkZHIs IE5VTEwsIDAsIDApOworICBlbHNlCisgICAgY2FsbGJhY2sgKGRhdGEsIGFk ZHIsIHN5bS0+bmFtZSwgc3ltLT5hZGRyZXNzLCBzeW0tPnNpemUpOwogfQog Ci0vKiBJbml0aWFsaXplIHRoZSBiYWNrdHJhY2UgZGF0YSB3aGVuIHdlIGRv bid0IGtub3cgaG93IHRvIHJlYWQgdGhlCi0gICBkZWJ1ZyBpbmZvLiAgKi8K Ky8qIFJldHVybiB0aGUgbmFtZSBvZiBhbiBYQ09GRiBzeW1ib2wuICAqLwog CitzdGF0aWMgY29uc3QgY2hhciAqCit4Y29mZl9zeW1uYW1lIChjb25zdCBi X3hjb2ZmX3N5bWVudCAqYXN5bSwKKwkgICAgICAgY29uc3QgdW5zaWduZWQg Y2hhciAqc3RydGFiLCBzaXplX3Qgc3RydGFiX3NpemUpCit7CisjaWYgQkFD S1RSQUNFX1hDT0ZGX1NJWkUgPT0gMzIKKyAgaWYgKGFzeW0tPm5femVyb2Vz ICE9IDApCisgICAgeworICAgICAgLyogTWFrZSBhIGNvcHkgYXMgd2Ugd2ls bCByZWxlYXNlIHRoZSBzeW10YWIgdmlldy4gICovCisgICAgICBjaGFyIG5h bWVbU1lNTk1MRU4rMV07CisgICAgICBzdHJuY3B5IChuYW1lLCBhc3ltLT5u X25hbWUsIFNZTU5NTEVOKTsKKyAgICAgIG5hbWVbU1lNTk1MRU5dID0gJ1ww JzsKKyAgICAgIHJldHVybiBzdHJkdXAgKG5hbWUpOworICAgIH0KKyNlbmRp ZgorICBpZiAoYXN5bS0+bl9zY2xhc3MgJiAweDgwKQorICAgIHJldHVybiBO VUxMOyAvKiAuZGVidWcgKi8KKyAgaWYgKGFzeW0tPm5fb2Zmc2V0XyA+PSBz dHJ0YWJfc2l6ZSkKKyAgICByZXR1cm4gTlVMTDsKKyAgcmV0dXJuIChjb25z dCBjaGFyICopIHN0cnRhYiArIGFzeW0tPm5fb2Zmc2V0XzsKK30KKworLyog SW5pdGlhbGl6ZSB0aGUgc3ltYm9sIHRhYmxlIGluZm8gZm9yIHhjb2ZmX3N5 bWluZm8uICAqLworCitzdGF0aWMgaW50Cit4Y29mZl9pbml0aWFsaXplX3N5 bWluZm8gKHN0cnVjdCBiYWNrdHJhY2Vfc3RhdGUgKnN0YXRlLAorCQkJICB1 aW50cHRyX3QgYmFzZV9hZGRyZXNzLAorCQkJICBjb25zdCBiX3hjb2ZmX3Nj bmhkciAqc2VjdHMsCisJCQkgIGNvbnN0IGJfeGNvZmZfc3ltZW50ICpzeW1z LCBzaXplX3QgbnN5bXMsCisJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0 cnRhYiwgc2l6ZV90IHN0cnRhYl9zaXplLAorCQkJICBiYWNrdHJhY2VfZXJy b3JfY2FsbGJhY2sgZXJyb3JfY2FsbGJhY2ssIHZvaWQgKmRhdGEsCisJCQkg IHN0cnVjdCB4Y29mZl9zeW1pbmZvX2RhdGEgKnNkYXRhKQoreworICBzaXpl X3QgeGNvZmZfc3ltYm9sX2NvdW50OworICBzaXplX3QgeGNvZmZfc3ltYm9s X3NpemU7CisgIHN0cnVjdCB4Y29mZl9zeW1ib2wgKnhjb2ZmX3N5bWJvbHM7 CisgIHNpemVfdCBpOworICB1bnNpZ25lZCBpbnQgajsKKworICAvKiBXZSBv bmx5IGNhcmUgYWJvdXQgZnVuY3Rpb24gc3ltYm9scy4gIENvdW50IHRoZW0u ICAqLworICB4Y29mZl9zeW1ib2xfY291bnQgPSAwOworICBmb3IgKGkgPSAw OyBpIDwgbnN5bXM7ICsraSkKKyAgICB7CisgICAgICBjb25zdCBiX3hjb2Zm X3N5bWVudCAqYXN5bSA9ICZzeW1zW2ldOworICAgICAgaWYgKChhc3ltLT5u X3NjbGFzcyA9PSBDX0VYVCB8fCBhc3ltLT5uX3NjbGFzcyA9PSBDX0hJREVY VAorCSAgICB8fCBhc3ltLT5uX3NjbGFzcyA9PSBDX1dFQUtFWFQpCisJICAm JiBJU0ZDTiAoYXN5bS0+bl90eXBlKSAmJiBhc3ltLT5uX251bWF1eCA+IDAg JiYgYXN5bS0+bl9zY251bSA+IDApCisJKyt4Y29mZl9zeW1ib2xfY291bnQ7 CisKKyAgICAgIGkgKz0gYXN5bS0+bl9udW1hdXg7CisgICAgfQorCisgIHhj b2ZmX3N5bWJvbF9zaXplID0geGNvZmZfc3ltYm9sX2NvdW50ICogc2l6ZW9m IChzdHJ1Y3QgeGNvZmZfc3ltYm9sKTsKKyAgeGNvZmZfc3ltYm9scyA9ICgo c3RydWN0IHhjb2ZmX3N5bWJvbCAqKQorCQkgICBiYWNrdHJhY2VfYWxsb2Mg KHN0YXRlLCB4Y29mZl9zeW1ib2xfc2l6ZSwgZXJyb3JfY2FsbGJhY2ssCisJ CQkJICAgIGRhdGEpKTsKKyAgaWYgKHhjb2ZmX3N5bWJvbHMgPT0gTlVMTCkK KyAgICByZXR1cm4gMDsKKworICBqID0gMDsKKyAgZm9yIChpID0gMDsgaSA8 IG5zeW1zOyArK2kpCisgICAgeworICAgICAgY29uc3QgYl94Y29mZl9zeW1l bnQgKmFzeW0gPSAmc3ltc1tpXTsKKyAgICAgIGlmICgoYXN5bS0+bl9zY2xh c3MgPT0gQ19FWFQgfHwgYXN5bS0+bl9zY2xhc3MgPT0gQ19ISURFWFQKKwkg ICAgfHwgYXN5bS0+bl9zY2xhc3MgPT0gQ19XRUFLRVhUKQorCSAgJiYgSVNG Q04gKGFzeW0tPm5fdHlwZSkgJiYgYXN5bS0+bl9udW1hdXggPiAwICYmIGFz eW0tPm5fc2NudW0gPiAwKQorCXsKKwkgIGNvbnN0IGJfeGNvZmZfYXV4ZW50 ICphdXggPSAoY29uc3QgYl94Y29mZl9hdXhlbnQgKikgKGFzeW0gKyAxKTsK KwkgIHhjb2ZmX3N5bWJvbHNbal0ubmFtZSA9IHhjb2ZmX3N5bW5hbWUgKGFz eW0sIHN0cnRhYiwgc3RydGFiX3NpemUpOworCSAgeGNvZmZfc3ltYm9sc1tq XS5hZGRyZXNzID0gYmFzZV9hZGRyZXNzICsgYXN5bS0+bl92YWx1ZQorCQkJ CSAgIC0gc2VjdHNbYXN5bS0+bl9zY251bSAtIDFdLnNfcGFkZHI7CisJICAv KiB4X2ZzaXplIHdpbGwgYmUgMCBpZiB0aGVyZSBpcyBubyBkZWJ1ZyBpbmZv cm1hdGlvbi4gICovCisJICB4Y29mZl9zeW1ib2xzW2pdLnNpemUgPSBhdXgt PnhfZmNuLnhfZnNpemU7CisJICArK2o7CisJfQorCisgICAgICBpICs9IGFz eW0tPm5fbnVtYXV4OworICAgIH0KKworICBiYWNrdHJhY2VfcXNvcnQgKHhj b2ZmX3N5bWJvbHMsIHhjb2ZmX3N5bWJvbF9jb3VudCwKKwkJICAgc2l6ZW9m IChzdHJ1Y3QgeGNvZmZfc3ltYm9sKSwgeGNvZmZfc3ltYm9sX2NvbXBhcmUp OworCisgIHNkYXRhLT5uZXh0ID0gTlVMTDsKKyAgc2RhdGEtPnN5bWJvbHMg PSB4Y29mZl9zeW1ib2xzOworICBzZGF0YS0+Y291bnQgPSB4Y29mZl9zeW1i b2xfY291bnQ7CisKKyAgcmV0dXJuIDE7Cit9CisKKy8qIENvbXBhcmUgc3Ry dWN0IHhjb2ZmX2xpbmUgZm9yIHFzb3J0LiAgKi8KKworc3RhdGljIGludAor eGNvZmZfbGluZV9jb21wYXJlIChjb25zdCB2b2lkICp2MSwgY29uc3Qgdm9p ZCAqdjIpCit7CisgIGNvbnN0IHN0cnVjdCB4Y29mZl9saW5lICpsbjEgPSAo Y29uc3Qgc3RydWN0IHhjb2ZmX2xpbmUgKikgdjE7CisgIGNvbnN0IHN0cnVj dCB4Y29mZl9saW5lICpsbjIgPSAoY29uc3Qgc3RydWN0IHhjb2ZmX2xpbmUg KikgdjI7CisKKyAgaWYgKGxuMS0+cGMgPCBsbjItPnBjKQorICAgIHJldHVy biAtMTsKKyAgZWxzZSBpZiAobG4xLT5wYyA+IGxuMi0+cGMpCisgICAgcmV0 dXJuIDE7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworLyogRmluZCBh IFBDIGluIGEgbGluZSB2ZWN0b3IuICBXZSBhbHdheXMgYWxsb2NhdGUgYW4g ZXh0cmEgZW50cnkgYXQKKyAgIHRoZSBlbmQgb2YgdGhlIGxpbmVzIHZlY3Rv ciwgc28gdGhhdCB0aGlzIHJvdXRpbmUgY2FuIHNhZmVseSBsb29rCisgICBh dCB0aGUgbmV4dCBlbnRyeS4gICovCisKK3N0YXRpYyBpbnQKK3hjb2ZmX2xp bmVfc2VhcmNoIChjb25zdCB2b2lkICp2a2V5LCBjb25zdCB2b2lkICp2ZW50 cnkpCit7CisgIGNvbnN0IHVpbnRwdHJfdCAqa2V5ID0gKGNvbnN0IHVpbnRw dHJfdCAqKSB2a2V5OworICBjb25zdCBzdHJ1Y3QgeGNvZmZfbGluZSAqZW50 cnkgPSAoY29uc3Qgc3RydWN0IHhjb2ZmX2xpbmUgKikgdmVudHJ5OworICB1 aW50cHRyX3QgcGM7CisKKyAgcGMgPSAqa2V5OworICBpZiAocGMgPCBlbnRy eS0+cGMpCisgICAgcmV0dXJuIC0xOworICBlbHNlIGlmICgoZW50cnkgKyAx KS0+cGMgPT0gKHVpbnRwdHJfdCkgLTEgfHwgcGMgPj0gKGVudHJ5ICsgMSkt PnBjKQorICAgIHJldHVybiAxOworICBlbHNlCisgICAgcmV0dXJuIDA7Cit9 CisKKy8qIExvb2sgZm9yIGEgUEMgaW4gdGhlIGxpbmUgdmVjdG9yIGZvciBv bmUgbW9kdWxlLiAgT24gc3VjY2VzcywKKyAgIGNhbGwgQ0FMTEJBQ0sgYW5k IHJldHVybiB3aGF0ZXZlciBpdCByZXR1cm5zLiAgT24gZXJyb3IsIGNhbGwK KyAgIEVSUk9SX0NBTExCQUNLIGFuZCByZXR1cm4gMC4gIFNldHMgKkZPVU5E IHRvIDEgaWYgdGhlIFBDIGlzIGZvdW5kLAorICAgMCBpZiBub3QuICAqLwor CitzdGF0aWMgaW50Cit4Y29mZl9sb29rdXBfcGMgKHN0cnVjdCBiYWNrdHJh Y2Vfc3RhdGUgKnN0YXRlIEFUVFJJQlVURV9VTlVTRUQsCisJCSBzdHJ1Y3Qg eGNvZmZfZmlsZWxpbmVfZGF0YSAqZmRhdGEsIHVpbnRwdHJfdCBwYywKKwkJ IGJhY2t0cmFjZV9mdWxsX2NhbGxiYWNrIGNhbGxiYWNrLAorCQkgYmFja3Ry YWNlX2Vycm9yX2NhbGxiYWNrIGVycm9yX2NhbGxiYWNrIEFUVFJJQlVURV9V TlVTRUQsCisJCSB2b2lkICpkYXRhLCBpbnQgKmZvdW5kKQoreworICBjb25z dCBzdHJ1Y3QgeGNvZmZfbGluZSAqbG47CisgIGNvbnN0IGNoYXIgKmZ1bmN0 aW9uOworCisgICpmb3VuZCA9IDE7CisKKyAgbG4gPSAoc3RydWN0IHhjb2Zm X2xpbmUgKikgYnNlYXJjaCAoJnBjLCBmZGF0YS0+dmVjLnZlYy5iYXNlLAor CQkJCSAgICAgIGZkYXRhLT52ZWMuY291bnQsCisJCQkJICAgICAgc2l6ZW9m IChzdHJ1Y3QgeGNvZmZfbGluZSksCisJCQkJICAgICAgeGNvZmZfbGluZV9z ZWFyY2gpOworICBpZiAobG4gPT0gTlVMTCkKKyAgICB7CisgICAgICAqZm91 bmQgPSAwOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIGZ1bmN0aW9u ID0gbG4tPmZ1bmN0aW9uOworI2lmZGVmIF9BSVgKKyAgLyogQUlYIHByZXBl bmRzIGEgJy4nIHRvIGZ1bmN0aW9uIGVudHJ5IHBvaW50cywgcmVtb3ZlIGl0 LiAgKi8KKyAgaWYgKCpmdW5jdGlvbiA9PSAnLicpCisgICAgKytmdW5jdGlv bjsKKyNlbmRpZgorICByZXR1cm4gY2FsbGJhY2sgKGRhdGEsIHBjLCBsbi0+ ZmlsZW5hbWUsIGxuLT5saW5lbm8sIGZ1bmN0aW9uKTsKK30KKworLyogUmV0 dXJuIHRoZSBmaWxlL2xpbmUgaW5mb3JtYXRpb24gZm9yIGEgUEMgdXNpbmcg dGhlIFhDT0ZGIGxpbmVubworICAgbWFwcGluZyB3ZSBidWlsdCBlYXJsaWVy LiAgKi8KKworc3RhdGljIGludAoreGNvZmZfZmlsZWxpbmUgKHN0cnVjdCBi YWNrdHJhY2Vfc3RhdGUgKnN0YXRlLCB1aW50cHRyX3QgcGMsCisJCWJhY2t0 cmFjZV9mdWxsX2NhbGxiYWNrIGNhbGxiYWNrLAorCQliYWNrdHJhY2VfZXJy b3JfY2FsbGJhY2sgZXJyb3JfY2FsbGJhY2ssIHZvaWQgKmRhdGEpCisKK3sK KyAgc3RydWN0IHhjb2ZmX2ZpbGVsaW5lX2RhdGEgKmZkYXRhOworICBpbnQg Zm91bmQ7CisgIGludCByZXQ7CisKKyAgaWYgKCFzdGF0ZS0+dGhyZWFkZWQp CisgICAgeworICAgICAgZm9yIChmZGF0YSA9IChzdHJ1Y3QgeGNvZmZfZmls ZWxpbmVfZGF0YSAqKSBzdGF0ZS0+ZmlsZWxpbmVfZGF0YTsKKwkgICBmZGF0 YSAhPSBOVUxMOworCSAgIGZkYXRhID0gZmRhdGEtPm5leHQpCisJeworCSAg cmV0ID0geGNvZmZfbG9va3VwX3BjIChzdGF0ZSwgZmRhdGEsIHBjLCBjYWxs YmFjaywgZXJyb3JfY2FsbGJhY2ssCisJCQkJIGRhdGEsICZmb3VuZCk7CisJ ICBpZiAocmV0ICE9IDAgfHwgZm91bmQpCisJICAgIHJldHVybiByZXQ7CisJ fQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHN0cnVjdCB4Y29mZl9m aWxlbGluZV9kYXRhICoqcHA7CisKKyAgICAgIHBwID0gKHN0cnVjdCB4Y29m Zl9maWxlbGluZV9kYXRhICoqKSAodm9pZCAqKSAmc3RhdGUtPmZpbGVsaW5l X2RhdGE7CisgICAgICB3aGlsZSAoMSkKKwl7CisJICBmZGF0YSA9IGJhY2t0 cmFjZV9hdG9taWNfbG9hZF9wb2ludGVyIChwcCk7CisJICBpZiAoZmRhdGEg PT0gTlVMTCkKKwkgICAgYnJlYWs7CisKKwkgIHJldCA9IHhjb2ZmX2xvb2t1 cF9wYyAoc3RhdGUsIGZkYXRhLCBwYywgY2FsbGJhY2ssIGVycm9yX2NhbGxi YWNrLAorCQkJCSBkYXRhLCAmZm91bmQpOworCSAgaWYgKHJldCAhPSAwIHx8 IGZvdW5kKQorCSAgICByZXR1cm4gcmV0OworCisJICBwcCA9ICZmZGF0YS0+ bmV4dDsKKwl9CisgICAgfQorCisgIC8qIEZJWE1FOiBTZWUgaWYgYW55IGxp YnJhcmllcyBoYXZlIGJlZW4gZGxvcGVuJ2VkLiAgKi8KKworICByZXR1cm4g Y2FsbGJhY2sgKGRhdGEsIHBjLCBOVUxMLCAwLCBOVUxMKTsKK30KKworLyog QWRkIGEgbmV3IG1hcHBpbmcgdG8gdGhlIHZlY3RvciBvZiBsaW5lIG1hcHBp bmdzIHRoYXQgd2UgYXJlCisgICBidWlsZGluZy4gIFJldHVybnMgMSBvbiBz dWNjZXNzLCAwIG9uIGZhaWx1cmUuICAqLworCitzdGF0aWMgaW50Cit4Y29m Zl9hZGRfbGluZSAoc3RydWN0IGJhY2t0cmFjZV9zdGF0ZSAqc3RhdGUsIHVp bnRwdHJfdCBwYywKKwkJY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNo YXIgKmZ1bmN0aW9uLCB1aW50MzJfdCBsbm5vLAorCQliYWNrdHJhY2VfZXJy b3JfY2FsbGJhY2sgZXJyb3JfY2FsbGJhY2ssIHZvaWQgKmRhdGEsCisJCXN0 cnVjdCB4Y29mZl9saW5lX3ZlY3RvciAqdmVjKQoreworICBzdHJ1Y3QgeGNv ZmZfbGluZSAqbG47CisKKyAgbG4gPSAoKHN0cnVjdCB4Y29mZl9saW5lICop CisJYmFja3RyYWNlX3ZlY3Rvcl9ncm93IChzdGF0ZSwgc2l6ZW9mIChzdHJ1 Y3QgeGNvZmZfbGluZSksCisJCQkgICAgICAgZXJyb3JfY2FsbGJhY2ssIGRh dGEsICZ2ZWMtPnZlYykpOworICBpZiAobG4gPT0gTlVMTCkKKyAgICByZXR1 cm4gMDsKKworICBsbi0+cGMgPSBwYzsKKyAgbG4tPmZpbGVuYW1lID0gZmls ZW5hbWU7CisgIGxuLT5mdW5jdGlvbiA9IGZ1bmN0aW9uOworICBsbi0+bGlu ZW5vID0gbG5ubzsKKworICArK3ZlYy0+Y291bnQ7CisKKyAgcmV0dXJuIDE7 Cit9CisKKy8qIEFkZCB0aGUgbGluZSBudW1iZXIgZW50cmllcyBmb3IgYSBm dW5jdGlvbiB0byB0aGUgbGluZSB2ZWN0b3IuICAqLworCitzdGF0aWMgaW50 Cit4Y29mZl9wcm9jZXNzX2xpbmVub3MgKHN0cnVjdCBiYWNrdHJhY2Vfc3Rh dGUgKnN0YXRlLCB1aW50cHRyX3QgYmFzZV9hZGRyZXNzLAorCQkgICAgICAg Y29uc3QgYl94Y29mZl9zeW1lbnQgKmZzeW0sIGNvbnN0IGNoYXIgKmZpbGVu YW1lLAorCQkgICAgICAgY29uc3QgYl94Y29mZl9zY25oZHIgKnNlY3RzLAor CQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc3RydGFiLCBzaXplX3Qg c3RydGFiX3NpemUsCisJCSAgICAgICB1aW50MzJfdCBmY25fbG5ubywgc3Ry dWN0IHhjb2ZmX2luY2xfdmVjdG9yICp2ZWMsCisJCSAgICAgICBzdHJ1Y3Qg eGNvZmZfbGluZV92ZWN0b3IgKmx2ZWMsCisJCSAgICAgICBjb25zdCB1bnNp Z25lZCBjaGFyICpsaW5lbm9zLCBzaXplX3QgbGluZW5vc19zaXplLAorCQkg ICAgICAgdWludHB0cl90IGxubm9wdHIwLAorCQkgICAgICAgYmFja3RyYWNl X2Vycm9yX2NhbGxiYWNrIGVycm9yX2NhbGxiYWNrLCB2b2lkICpkYXRhKQor eworICBjb25zdCBiX3hjb2ZmX2F1eGVudCAqYXV4OworICBjb25zdCBiX3hj b2ZmX2xpbmVubyAqbGluZW5vOworICBjb25zdCB1bnNpZ25lZCBjaGFyICps aW5lcHRyOworICBjb25zdCBjaGFyICpmdW5jdGlvbjsKKyAgc3RydWN0IHhj b2ZmX2luY2wgKmluY2w7CisgIHVpbnRwdHJfdCBsbm5vcHRyOworICB1aW50 cHRyX3QgcGM7CisgIHVpbnQzMl90IGxubm87CisgIGludCBiZWdpbmNsOwor ICBzaXplX3QgaTsKKworICBhdXggPSAoY29uc3QgYl94Y29mZl9hdXhlbnQg KikgKGZzeW0gKyAxKTsKKyAgbG5ub3B0ciA9IGF1eC0+eF9mY24ueF9sbm5v cHRyOworCisgIGlmIChsbm5vcHRyIDwgbG5ub3B0cjAgfHwgbG5ub3B0ciAr IExJTkVTWiA+IGxubm9wdHIwICsgbGluZW5vc19zaXplKQorICAgIHJldHVy biAwOworCisgIGZ1bmN0aW9uID0geGNvZmZfc3ltbmFtZSAoZnN5bSwgc3Ry dGFiLCBzdHJ0YWJfc2l6ZSk7CisgIGlmIChmdW5jdGlvbiA9PSBOVUxMKQor ICAgIHJldHVybiAwOworCisgIC8qIFNraXAgZmlyc3QgZW50cnkgdGhhdCBw b2ludHMgdG8gc3ltdGFiLiAgKi8KKworICBsbm5vcHRyICs9IExJTkVTWjsK KworICBsaW5lcHRyID0gbGluZW5vcyArIChsbm5vcHRyIC0gbG5ub3B0cjAp OworCisgIGJlZ2luY2wgPSAtMTsKKyAgd2hpbGUgKGxpbmVwdHIgKyBMSU5F U1ogPD0gbGluZW5vcyArIGxpbmVub3Nfc2l6ZSkKKyAgICB7CisgICAgICBs aW5lbm8gPSAoY29uc3QgYl94Y29mZl9saW5lbm8gKikgbGluZXB0cjsKKwor ICAgICAgbG5ubyA9IGxpbmVuby0+bF9sbm5vOworICAgICAgaWYgKGxubm8g PT0gMCkKKwkgIGJyZWFrOworCisgICAgICAvKiBJZiBwYXJ0IG9mIGEgZnVu Y3Rpb24gb3RoZXIgdGhhbiB0aGUgYmVnaW5uaW5nIGNvbWVzIGZyb20gYW4K KwkgaW5jbHVkZSBmaWxlLCB0aGUgbGluZSBudW1iZXJzIGFyZSBhYnNvbHV0 ZSwgcmF0aGVyIHRoYW4KKwkgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBv ZiB0aGUgZnVuY3Rpb24uICAqLworICAgICAgZm9yIChpID0gMDsgaSA8IHZl Yy0+Y291bnQ7ICsraSkKKwl7CisJICBpbmNsID0gKHN0cnVjdCB4Y29mZl9p bmNsICopIHZlYy0+dmVjLmJhc2UgKyBpOworCSAgaWYgKGluY2wtPmJlZ2lu IDw9IGxubm9wdHIgJiYgbG5ub3B0ciA8PSBpbmNsLT5lbmQpCisJICAgIGJy ZWFrOworCX0KKyAgICAgIGlmIChiZWdpbmNsID09IC0xKQorCWJlZ2luY2wg PSAoaSA8IHZlYy0+Y291bnQpOworICAgICAgaWYgKGkgPCB2ZWMtPmNvdW50 KQorCXsKKwkgIGZpbGVuYW1lID0gaW5jbC0+ZmlsZW5hbWU7CisJICBpZiAo YmVnaW5jbCA9PSAxKQorCSAgICBsbm5vICs9IGZjbl9sbm5vIC0gMTsKKwl9 CisgICAgICBlbHNlCisJbG5ubyArPSBmY25fbG5ubyAtIDE7CisKKyAgICAg IHBjID0gYmFzZV9hZGRyZXNzICsgbGluZW5vLT5sX2FkZHIubF9wYWRkcgor CSAtIHNlY3RzW2ZzeW0tPm5fc2NudW0gLSAxXS5zX3BhZGRyOworICAgICAg eGNvZmZfYWRkX2xpbmUgKHN0YXRlLCBwYywgZmlsZW5hbWUsIGZ1bmN0aW9u LCBsbm5vLCBlcnJvcl9jYWxsYmFjaywKKwkJICAgICAgZGF0YSwgbHZlYyk7 CisKKyAgICAgIGxubm9wdHIgKz0gTElORVNaOworICAgICAgbGluZXB0ciAr PSBMSU5FU1o7CisgICAgfQorCisgIHJldHVybiAxOworfQorCisvKiBJbml0 aWFsaXplIHRoZSBsaW5lIHZlY3RvciBpbmZvIGZvciB4Y29mZl9maWxlbGlu ZS4gICovCisKK3N0YXRpYyBpbnQKK3hjb2ZmX2luaXRpYWxpemVfZmlsZWxp bmUgKHN0cnVjdCBiYWNrdHJhY2Vfc3RhdGUgKnN0YXRlLAorCQkJICAgdWlu dHB0cl90IGJhc2VfYWRkcmVzcywKKwkJCSAgIGNvbnN0IGJfeGNvZmZfc2Nu aGRyICpzZWN0cywKKwkJCSAgIGNvbnN0IGJfeGNvZmZfc3ltZW50ICpzeW1z LCBzaXplX3QgbnN5bXMsCisJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpz dHJ0YWIsIHNpemVfdCBzdHJ0YWJfc2l6ZSwKKwkJCSAgIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmxpbmVub3MsIHNpemVfdCBsaW5lbm9zX3NpemUsCisJCQkg ICB1aW50NjRfdCBsbm5vcHRyMCwKKwkJCSAgIGJhY2t0cmFjZV9lcnJvcl9j YWxsYmFjayBlcnJvcl9jYWxsYmFjaywgdm9pZCAqZGF0YSkKK3sKKyAgc3Ry dWN0IHhjb2ZmX2ZpbGVsaW5lX2RhdGEgKmZkYXRhOworICBzdHJ1Y3QgeGNv ZmZfaW5jbF92ZWN0b3IgdmVjOworICBzdHJ1Y3QgeGNvZmZfbGluZSAqbG47 CisgIGNvbnN0IGJfeGNvZmZfc3ltZW50ICpmc3ltOworICBjb25zdCBiX3hj b2ZmX2F1eGVudCAqYXV4OworICBjb25zdCBjaGFyICpmaWxlbmFtZTsKKyAg Y29uc3QgY2hhciAqbmFtZTsKKyAgc3RydWN0IHhjb2ZmX2luY2wgKmluY2w7 CisgIHVpbnRwdHJfdCBiZWdpbiwgZW5kOworICB1aW50cHRyX3QgbG5ubzsK KyAgc2l6ZV90IGk7CisKKyAgZmRhdGEgPSAoKHN0cnVjdCB4Y29mZl9maWxl bGluZV9kYXRhICopCisJICAgYmFja3RyYWNlX2FsbG9jIChzdGF0ZSwgc2l6 ZW9mIChzdHJ1Y3QgeGNvZmZfZmlsZWxpbmVfZGF0YSksCisJCQkgICAgZXJy b3JfY2FsbGJhY2ssIGRhdGEpKTsKKyAgaWYgKGZkYXRhID09IE5VTEwpCisg ICAgcmV0dXJuIDA7CisKKyAgbWVtc2V0IChmZGF0YSwgMCwgc2l6ZW9mICpm ZGF0YSk7CisgIG1lbXNldCAoJnZlYywgMCwgc2l6ZW9mIHZlYyk7CisKKyAg LyogUHJvY2VzcyBpbmNsdWRlIGZpbGVzIGZpcnN0LiAgKi8KKworICBiZWdp biA9IDA7CisgIGZvciAoaSA9IDA7IGkgPCBuc3ltczsgKytpKQorICAgIHsK KyAgICAgIGNvbnN0IGJfeGNvZmZfc3ltZW50ICphc3ltID0gJnN5bXNbaV07 CisKKyAgICAgIHN3aXRjaCAoYXN5bS0+bl9zY2xhc3MpCisJeworCSAgY2Fz ZSBDX0JJTkNMOgorCSAgICBiZWdpbiA9IGFzeW0tPm5fdmFsdWU7CisJICAg IGJyZWFrOworCisJICBjYXNlIENfRUlOQ0w6CisJICAgIGlmIChiZWdpbiA9 PSAwKQorCSAgICAgIGJyZWFrOworCSAgICBlbmQgPSBhc3ltLT5uX3ZhbHVl OworCSAgICBpbmNsID0gKChzdHJ1Y3QgeGNvZmZfaW5jbCAqKQorCQkgICAg YmFja3RyYWNlX3ZlY3Rvcl9ncm93IChzdGF0ZSwgc2l6ZW9mIChzdHJ1Y3Qg eGNvZmZfaW5jbCksCisJCQkJCSAgIGVycm9yX2NhbGxiYWNrLCBkYXRhLCAm dmVjLnZlYykpOworCSAgICBpZiAoaW5jbCAhPSBOVUxMKQorCSAgICAgIHsK KwkJaW5jbC0+ZmlsZW5hbWUgPSB4Y29mZl9zeW1uYW1lIChhc3ltLCBzdHJ0 YWIsIHN0cnRhYl9zaXplKTsKKwkJaW5jbC0+YmVnaW4gPSBiZWdpbjsKKwkJ aW5jbC0+ZW5kID0gZW5kOworCQkrK3ZlYy5jb3VudDsKKwkgICAgICB9CisJ ICAgIGJlZ2luID0gMDsKKwkgICAgYnJlYWs7CisJfQorCisgICAgICBpICs9 IGFzeW0tPm5fbnVtYXV4OworICAgIH0KKworICBmaWxlbmFtZSA9IE5VTEw7 CisgIGZzeW0gPSBOVUxMOworICBmb3IgKGkgPSAwOyBpIDwgbnN5bXM7ICsr aSkKKyAgICB7CisgICAgICBjb25zdCBiX3hjb2ZmX3N5bWVudCAqYXN5bSA9 ICZzeW1zW2ldOworCisgICAgICBzd2l0Y2ggKGFzeW0tPm5fc2NsYXNzKQor CXsKKwkgIGNhc2UgQ19GSUxFOgorCSAgICBmaWxlbmFtZSA9IHhjb2ZmX3N5 bW5hbWUgKGFzeW0sIHN0cnRhYiwgc3RydGFiX3NpemUpOworCSAgICBpZiAo ZmlsZW5hbWUgPT0gTlVMTCkKKwkgICAgICBicmVhazsKKworCSAgICAvKiBJ ZiB0aGUgZmlsZSBhdXhpbGlhcnkgZW50cnkgaXMgbm90IHVzZWQsIHRoZSBz eW1ib2wgbmFtZSBpcworCSAgICAgICB0aGUgbmFtZSBvZiB0aGUgc291cmNl IGZpbGUuIElmIHRoZSBmaWxlIGF1eGlsaWFyeSBlbnRyeSBpcworCSAgICAg ICB1c2VkLCB0aGVuIHRoZSBzeW1ib2wgbmFtZSBzaG91bGQgYmUgLmZpbGUs IGFuZCB0aGUgZmlyc3QKKwkgICAgICAgZmlsZSBhdXhpbGlhcnkgZW50cnkg KGJ5IGNvbnZlbnRpb24pIGNvbnRhaW5zIHRoZSBzb3VyY2UKKwkgICAgICAg ZmlsZSBuYW1lLiAgKi8KKworCSAgICBpZiAoYXN5bS0+bl9udW1hdXggPiAw ICYmICFzdHJjbXAgKGZpbGVuYW1lLCAiLmZpbGUiKSkKKwkgICAgICB7CisJ CWF1eCA9IChjb25zdCBiX3hjb2ZmX2F1eGVudCAqKSAoYXN5bSArIDEpOwor CQlpZiAoYXV4LT54X2ZpbGUuX3gueF96ZXJvZXMgIT0gMCkKKwkJICB7CisJ CSAgICAvKiBNYWtlIGEgY29weSBhcyB3ZSB3aWxsIHJlbGVhc2UgdGhlIHN5 bXRhYiB2aWV3LiAgKi8KKwkJICAgIGNoYXIgbmFtZVtGSUxOTUxFTisxXTsK KwkJICAgIHN0cm5jcHkgKG5hbWUsIGF1eC0+eF9maWxlLnhfZm5hbWUsIEZJ TE5NTEVOKTsKKwkJICAgIG5hbWVbRklMTk1MRU5dID0gJ1wwJzsKKwkJICAg IGZpbGVuYW1lID0gc3RyZHVwIChuYW1lKTsKKwkJICB9CisJCWVsc2UgaWYg KGF1eC0+eF9maWxlLl94Lnhfb2Zmc2V0IDwgc3RydGFiX3NpemUpCisJCSAg ZmlsZW5hbWUgPSAoY29uc3QgY2hhciAqKSBzdHJ0YWIgKyBhdXgtPnhfZmls ZS5feC54X29mZnNldDsKKwkJZWxzZQorCQkgIGZpbGVuYW1lID0gTlVMTDsK KwkgICAgICB9CisJICAgIGJyZWFrOworCisJICBjYXNlIENfRVhUOgorCSAg Y2FzZSBDX0hJREVYVDoKKwkgIGNhc2UgQ19XRUFLRVhUOgorCSAgICBmc3lt ID0gTlVMTDsKKwkgICAgaWYgKCFJU0ZDTiAoYXN5bS0+bl90eXBlKSB8fCBh c3ltLT5uX251bWF1eCA9PSAwKQorCSAgICAgIGJyZWFrOworCSAgICBpZiAo ZmlsZW5hbWUgPT0gTlVMTCkKKwkgICAgICBicmVhazsKKwkgICAgZnN5bSA9 IGFzeW07CisJICAgIGJyZWFrOworCisJICBjYXNlIENfRkNOOgorCSAgICBp ZiAoYXN5bS0+bl9udW1hdXggPT0gMCkKKwkgICAgICBicmVhazsKKwkgICAg aWYgKGZzeW0gPT0gTlVMTCkKKwkgICAgICBicmVhazsKKwkgICAgbmFtZSA9 IHhjb2ZmX3N5bW5hbWUgKGFzeW0sIHN0cnRhYiwgc3RydGFiX3NpemUpOwor CSAgICBpZiAobmFtZSA9PSBOVUxMKQorCSAgICAgIGJyZWFrOworCSAgICBh dXggPSAoY29uc3QgYl94Y29mZl9hdXhlbnQgKikgKGFzeW0gKyAxKTsKKyNp ZiBCQUNLVFJBQ0VfWENPRkZfU0laRSA9PSAzMgorCSAgICBsbm5vID0gKHVp bnQzMl90KSBhdXgtPnhfYmxvY2sueF9sbm5vaGkgPDwgMTYKKwkJIHwgYXV4 LT54X2Jsb2NrLnhfbG5ubzsKKyNlbHNlCisJICAgIGxubm8gPSBhdXgtPnhf YmxvY2sueF9sbm5vOworI2VuZGlmCisJICAgIGlmICghc3RyY21wIChuYW1l LCAiLmJmIikpCisJICAgICAgeworCQl4Y29mZl9wcm9jZXNzX2xpbmVub3Mg KHN0YXRlLCBiYXNlX2FkZHJlc3MsIGZzeW0sIGZpbGVuYW1lLAorCQkJCSAg ICAgICBzZWN0cywgc3RydGFiLCBzdHJ0YWJfc2l6ZSwgbG5ubywgJnZlYywK KwkJCQkgICAgICAgJmZkYXRhLT52ZWMsIGxpbmVub3MsIGxpbmVub3Nfc2l6 ZSwKKwkJCQkgICAgICAgbG5ub3B0cjAsIGVycm9yX2NhbGxiYWNrLCBkYXRh KTsKKwkgICAgICB9CisJICAgIGVsc2UgaWYgKCFzdHJjbXAgKG5hbWUsICIu ZWYiKSkKKwkgICAgICB7CisJCWZzeW0gPSBOVUxMOworCSAgICAgIH0KKwkg ICAgYnJlYWs7CisJfQorCisgICAgICBpICs9IGFzeW0tPm5fbnVtYXV4Owor ICAgIH0KKworICAvKiBBbGxvY2F0ZSBvbmUgZXh0cmEgZW50cnkgYXQgdGhl IGVuZC4gICovCisgIGxuID0gKChzdHJ1Y3QgeGNvZmZfbGluZSAqKQorCWJh Y2t0cmFjZV92ZWN0b3JfZ3JvdyAoc3RhdGUsIHNpemVvZiAoc3RydWN0IHhj b2ZmX2xpbmUpLAorCQkJICAgICAgIGVycm9yX2NhbGxiYWNrLCBkYXRhLCAm ZmRhdGEtPnZlYy52ZWMpKTsKKyAgaWYgKGxuID09IE5VTEwpCisgICAgZ290 byBmYWlsOworICBsbi0+cGMgPSAodWludHB0cl90KSAtMTsKKyAgbG4tPmZp bGVuYW1lID0gTlVMTDsKKyAgbG4tPmZ1bmN0aW9uID0gTlVMTDsKKyAgbG4t PmxpbmVubyA9IDA7CisKKyAgaWYgKCFiYWNrdHJhY2VfdmVjdG9yX3JlbGVh c2UgKHN0YXRlLCAmZmRhdGEtPnZlYy52ZWMsIGVycm9yX2NhbGxiYWNrLCBk YXRhKSkKKyAgICBnb3RvIGZhaWw7CisKKyAgYmFja3RyYWNlX3Fzb3J0IChm ZGF0YS0+dmVjLnZlYy5iYXNlLCBmZGF0YS0+dmVjLmNvdW50LAorCQkgICBz aXplb2YgKHN0cnVjdCB4Y29mZl9saW5lKSwgeGNvZmZfbGluZV9jb21wYXJl KTsKKworICBpZiAoIXN0YXRlLT50aHJlYWRlZCkKKyAgICB7CisgICAgICBz dHJ1Y3QgeGNvZmZfZmlsZWxpbmVfZGF0YSAqKnBwOworCisgICAgICBmb3Ig KHBwID0gKHN0cnVjdCB4Y29mZl9maWxlbGluZV9kYXRhICoqKSAodm9pZCAq KSAmc3RhdGUtPmZpbGVsaW5lX2RhdGE7CisJICAgKnBwICE9IE5VTEw7CisJ ICAgcHAgPSAmKCpwcCktPm5leHQpCisJOworICAgICAgKnBwID0gZmRhdGE7 CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgd2hpbGUgKDEpCisJewor CSAgc3RydWN0IHhjb2ZmX2ZpbGVsaW5lX2RhdGEgKipwcDsKKworCSAgcHAg PSAoc3RydWN0IHhjb2ZmX2ZpbGVsaW5lX2RhdGEgKiopICh2b2lkICopICZz dGF0ZS0+ZmlsZWxpbmVfZGF0YTsKKworCSAgd2hpbGUgKDEpCisJICAgIHsK KwkgICAgICBzdHJ1Y3QgeGNvZmZfZmlsZWxpbmVfZGF0YSAqcDsKKworCSAg ICAgIHAgPSBiYWNrdHJhY2VfYXRvbWljX2xvYWRfcG9pbnRlciAocHApOwor CisJICAgICAgaWYgKHAgPT0gTlVMTCkKKwkJYnJlYWs7CisKKwkgICAgICBw cCA9ICZwLT5uZXh0OworCSAgICB9CisKKwkgIGlmIChfX3N5bmNfYm9vbF9j b21wYXJlX2FuZF9zd2FwIChwcCwgTlVMTCwgZmRhdGEpKQorCSAgICBicmVh azsKKwl9CisgICAgfQorCisgIHJldHVybiAxOworCitmYWlsOgorICByZXR1 cm4gMDsKK30KKworLyogQWRkIHRoZSBiYWNrdHJhY2UgZGF0YSBmb3Igb25l IFhDT0ZGIGZpbGUuICBSZXR1cm5zIDEgb24gc3VjY2VzcywKKyAgIDAgb24g ZmFpbHVyZSAoaW4gYm90aCBjYXNlcyBkZXNjcmlwdG9yIGlzIGNsb3NlZCku ICAqLworCitzdGF0aWMgaW50Cit4Y29mZl9hZGQgKHN0cnVjdCBiYWNrdHJh Y2Vfc3RhdGUgKnN0YXRlLCBpbnQgZGVzY3JpcHRvciwgb2ZmX3Qgb2Zmc2V0 LAorCSAgIHVpbnRwdHJfdCBiYXNlX2FkZHJlc3MsIGJhY2t0cmFjZV9lcnJv cl9jYWxsYmFjayBlcnJvcl9jYWxsYmFjaywKKwkgICB2b2lkICpkYXRhLCBm aWxlbGluZSAqZmlsZWxpbmVfZm4sIGludCAqZm91bmRfc3ltLCBpbnQgZXhl KQoreworICBzdHJ1Y3QgYmFja3RyYWNlX3ZpZXcgZmhkcl92aWV3OworICBz dHJ1Y3QgYmFja3RyYWNlX3ZpZXcgc2VjdHNfdmlldzsKKyAgc3RydWN0IGJh Y2t0cmFjZV92aWV3IGxpbmVub3NfdmlldzsKKyAgc3RydWN0IGJhY2t0cmFj ZV92aWV3IHN5bXNfdmlldzsKKyAgc3RydWN0IGJhY2t0cmFjZV92aWV3IHN0 cl92aWV3OworICBiX3hjb2ZmX2ZpbGhkciBmaGRyOworICBjb25zdCBiX3hj b2ZmX3NjbmhkciAqc2VjdHM7CisgIGNvbnN0IGJfeGNvZmZfc2NuaGRyICpz dGV4dDsKKyAgdWludDY0X3QgbG5ub3B0cjsKKyAgdWludDMyX3Qgbmxubm87 CisgIG9mZl90IHN0cl9vZmY7CisgIHNpemVfdCBzZWN0c19zaXplOworICBz aXplX3Qgc3ltc19zaXplOworICBpbnQzMl90IHN0cl9zaXplOworICBpbnQg c2VjdHNfdmlld192YWxpZDsKKyAgaW50IGxpbmVub3Nfdmlld192YWxpZDsK KyAgaW50IHN5bXNfdmlld192YWxpZDsKKyAgaW50IHN0cl92aWV3X3ZhbGlk OworICBpbnQgbWFnaWNfb2s7CisgIGludCBpOworCisgICpmb3VuZF9zeW0g PSAwOworCisgIHNlY3RzX3ZpZXdfdmFsaWQgPSAwOworICBsaW5lbm9zX3Zp ZXdfdmFsaWQgPSAwOworICBzeW1zX3ZpZXdfdmFsaWQgPSAwOworICBzdHJf dmlld192YWxpZCA9IDA7CisKKyAgLyogTWFwIHRoZSBYQ09GRiBmaWxlIGhl YWRlci4gICovCisgIGlmICghYmFja3RyYWNlX2dldF92aWV3IChzdGF0ZSwg ZGVzY3JpcHRvciwgb2Zmc2V0LCBzaXplb2YgKGJfeGNvZmZfZmlsaGRyKSwK KwkJCSAgIGVycm9yX2NhbGxiYWNrLCBkYXRhLCAmZmhkcl92aWV3KSkKKyAg ICBnb3RvIGZhaWw7CisKKyAgbWVtY3B5ICgmZmhkciwgZmhkcl92aWV3LmRh dGEsIHNpemVvZiBmaGRyKTsKKyAgbWFnaWNfb2sgPSAoZmhkci5mX21hZ2lj ID09IFhDT0ZGX01BR0lDKTsKKworICBiYWNrdHJhY2VfcmVsZWFzZV92aWV3 IChzdGF0ZSwgJmZoZHJfdmlldywgZXJyb3JfY2FsbGJhY2ssIGRhdGEpOwor CisgIGlmICghbWFnaWNfb2spCisgICAgeworICAgICAgaWYgKGV4ZSkKKyAg ICAgICAgZXJyb3JfY2FsbGJhY2sgKGRhdGEsICJleGVjdXRhYmxlIGZpbGUg aXMgbm90IFhDT0ZGIiwgMCk7CisgICAgICBnb3RvIGZhaWw7CisgICAgfQor CisgIC8qIFZlcmlmeSBvYmplY3QgaXMgb2YgZXhwZWN0ZWQgdHlwZS4gICov CisgIGlmICgoZXhlICYmIChmaGRyLmZfZmxhZ3MgJiBGX1NIUk9CSikpCisg ICAgICB8fCAoIWV4ZSAmJiAhKGZoZHIuZl9mbGFncyAmIEZfU0hST0JKKSkp CisgICAgZ290byBmYWlsOworCisgIC8qIFJlYWQgdGhlIHNlY3Rpb24gaGVh ZGVycy4gICovCisKKyAgc2VjdHNfc2l6ZSA9IGZoZHIuZl9uc2NucyAqIHNp emVvZiAoYl94Y29mZl9zY25oZHIpOworCisgIGlmICghYmFja3RyYWNlX2dl dF92aWV3IChzdGF0ZSwgZGVzY3JpcHRvciwKKwkJCSAgIG9mZnNldCArIHNp emVvZiAoZmhkcikgKyBmaGRyLmZfb3B0aGRyLAorCQkJICAgc2VjdHNfc2l6 ZSwgZXJyb3JfY2FsbGJhY2ssIGRhdGEsICZzZWN0c192aWV3KSkKKyAgICBn b3RvIGZhaWw7CisgIHNlY3RzX3ZpZXdfdmFsaWQgPSAxOworICBzZWN0cyA9 IChjb25zdCBiX3hjb2ZmX3NjbmhkciAqKSBzZWN0c192aWV3LmRhdGE7CisK KyAgLyogRklYTUU6IGFzc3VtZXMgb25seSBvbmUgLnRleHQgc2VjdGlvbi4g ICovCisgIGZvciAoaSA9IDA7IGkgPCBmaGRyLmZfbnNjbnM7ICsraSkKKyAg ICAgIGlmICgoc2VjdHNbaV0uc19mbGFncyAmIDB4ZmZmZikgPT0gU1RZUF9U RVhUKQorCSAgYnJlYWs7CisgIGlmIChpID09IGZoZHIuZl9uc2NucykKKyAg ICBnb3RvIGZhaWw7CisKKyAgc3RleHQgPSAmc2VjdHNbaV07CisKKyNpZmRl ZiBfQUlYCisgIC8qIEFJWCBsZGluZm9fdGV4dG9yZyBpbmNsdWRlcyB0aGUg WENPRkYgaGVhZGVycy4gICovCisgIGJhc2VfYWRkcmVzcyA9IChleGUgPyBY Q09GRl9BSVhfVEVYVEJBU0UgOiBiYXNlX2FkZHJlc3MpICsgc3RleHQtPnNf c2NucHRyOworI2Vsc2UKKyAgYmFzZV9hZGRyZXNzID0gc3RleHQtPnNfcGFk ZHI7CisjZW5kaWYKKworICBsbm5vcHRyID0gc3RleHQtPnNfbG5ub3B0cjsK KyAgbmxubm8gPSBzdGV4dC0+c19ubG5ubzsKKworI2lmIEJBQ0tUUkFDRV9Y Q09GRl9TSVpFID09IDMyCisgIGlmIChubG5ubyA9PSBfT1ZFUkZMT1dfTUFS S0VSKQorICAgIHsKKyAgICAgIGludCBzbnRleHQgPSBpICsgMTsKKyAgICAg IC8qIEZpbmQgdGhlIG1hdGNoaW5nIC5vdnJmbG8gc2VjdGlvbi4gICovCisg ICAgICBmb3IgKGkgPSAwOyBpIDwgZmhkci5mX25zY25zOyArK2kpCisJewor CSAgICBpZiAoKChzZWN0c1tpXS5zX2ZsYWdzICYgMHhmZmZmKSA9PSBTVFlQ X09WUkZMTykKKwkJJiYgc2VjdHNbaV0uc19ubG5ubyA9PSBzbnRleHQpCisJ ICAgICAgeworCQlubG5ubyA9IHNlY3RzW2ldLnNfdmFkZHI7CisJCWJyZWFr OworCSAgICAgIH0KKwl9CisgICAgfQorI2VuZGlmCisKKyAgLyogUmVhZCB0 aGUgc3ltYm9sIHRhYmxlIGFuZCB0aGUgc3RyaW5nIHRhYmxlLiAgKi8KKwor ICBpZiAoZmhkci5mX3N5bXB0ciAhPSAwKQorICAgIHsKKyAgICAgIHN0cnVj dCB4Y29mZl9zeW1pbmZvX2RhdGEgKnNkYXRhOworCisgICAgICAvKiBTeW1i b2wgdGFibGUgaXMgZm9sbG93ZWQgYnkgdGhlIHN0cmluZyB0YWJsZS4gIFRo ZSBzdHJpbmcgdGFibGUKKwkgc3RhcnRzIHdpdGggaXRzIGxlbmd0aCAob24g NCBieXRlcykuCisJIE1hcCB0aGUgc3ltYm9sIHRhYmxlIGFuZCB0aGUgbGVu Z3RoIG9mIHRoZSBzdHJpbmcgdGFibGUuICAqLworICAgICAgc3ltc19zaXpl ID0gZmhkci5mX25zeW1zICogc2l6ZW9mIChiX3hjb2ZmX3N5bWVudCk7CisK KyAgICAgIGlmICghYmFja3RyYWNlX2dldF92aWV3IChzdGF0ZSwgZGVzY3Jp cHRvciwgb2Zmc2V0ICsgZmhkci5mX3N5bXB0ciwKKwkJCSAgICAgICBzeW1z X3NpemUgKyA0LCBlcnJvcl9jYWxsYmFjaywgZGF0YSwKKwkJCSAgICAgICAm c3ltc192aWV3KSkKKwlnb3RvIGZhaWw7CisgICAgICBzeW1zX3ZpZXdfdmFs aWQgPSAxOworCisgICAgICBtZW1jcHkgKCZzdHJfc2l6ZSwgc3ltc192aWV3 LmRhdGEgKyBzeW1zX3NpemUsIDQpOworCisgICAgICBzdHJfb2ZmID0gZmhk ci5mX3N5bXB0ciArIHN5bXNfc2l6ZTsKKworICAgICAgaWYgKHN0cl9zaXpl ID4gNCkKKwl7CisJICAvKiBNYXAgc3RyaW5nIHRhYmxlIChpbmNsdWRpbmcg dGhlIGxlbmd0aCB3b3JkKS4gICovCisKKwkgIGlmICghYmFja3RyYWNlX2dl dF92aWV3IChzdGF0ZSwgZGVzY3JpcHRvciwgb2Zmc2V0ICsgc3RyX29mZiwK KwkJCQkgICBzdHJfc2l6ZSwgZXJyb3JfY2FsbGJhY2ssIGRhdGEsICZzdHJf dmlldykpCisJICAgIGdvdG8gZmFpbDsKKwkgIHN0cl92aWV3X3ZhbGlkID0g MTsKKwl9CisKKyAgICAgIHNkYXRhID0gKChzdHJ1Y3QgeGNvZmZfc3ltaW5m b19kYXRhICopCisJICAgICAgIGJhY2t0cmFjZV9hbGxvYyAoc3RhdGUsIHNp emVvZiAqc2RhdGEsIGVycm9yX2NhbGxiYWNrLCBkYXRhKSk7CisgICAgICBp ZiAoc2RhdGEgPT0gTlVMTCkKKwlnb3RvIGZhaWw7CisKKyAgICAgIGlmICgh eGNvZmZfaW5pdGlhbGl6ZV9zeW1pbmZvIChzdGF0ZSwgYmFzZV9hZGRyZXNz LCBzZWN0cywKKwkJCQkgICAgIHN5bXNfdmlldy5kYXRhLCBmaGRyLmZfbnN5 bXMsCisJCQkJICAgICBzdHJfdmlldy5kYXRhLCBzdHJfc2l6ZSwKKwkJCQkg ICAgIGVycm9yX2NhbGxiYWNrLCBkYXRhLCBzZGF0YSkpCisJeworCSAgYmFj a3RyYWNlX2ZyZWUgKHN0YXRlLCBzZGF0YSwgc2l6ZW9mICpzZGF0YSwgZXJy b3JfY2FsbGJhY2ssIGRhdGEpOworCSAgZ290byBmYWlsOworCX0KKworICAg ICAgKmZvdW5kX3N5bSA9IDE7CisKKyAgICAgIHhjb2ZmX2FkZF9zeW1pbmZv X2RhdGEgKHN0YXRlLCBzZGF0YSk7CisgICAgfQorCisgIC8qIFJlYWQgdGhl IGxpbmUgbnVtYmVyIGVudHJpZXMuICAqLworCisgIGlmIChmaGRyLmZfc3lt cHRyICE9IDAgJiYgbG5ub3B0ciAhPSAwKQorICAgIHsKKyAgICAgIHNpemVf dCBsaW5lbm9zX3NpemUgPSAoc2l6ZV90KSBubG5ubyAqIExJTkVTWjsKKwor ICAgICAgaWYgKCFiYWNrdHJhY2VfZ2V0X3ZpZXcgKHN0YXRlLCBkZXNjcmlw dG9yLCBvZmZzZXQgKyBsbm5vcHRyLAorCQkJICAgICAgIGxpbmVub3Nfc2l6 ZSwKKwkJCSAgICAgICBlcnJvcl9jYWxsYmFjaywgZGF0YSwgJmxpbmVub3Nf dmlldykpCisJZ290byBmYWlsOworICAgICAgbGluZW5vc192aWV3X3ZhbGlk ID0gMTsKKworICAgICAgaWYgKHhjb2ZmX2luaXRpYWxpemVfZmlsZWxpbmUg KHN0YXRlLCBiYXNlX2FkZHJlc3MsIHNlY3RzLAorCQkJCSAgICAgc3ltc192 aWV3LmRhdGEsIGZoZHIuZl9uc3ltcywKKwkJCQkgICAgIHN0cl92aWV3LmRh dGEsIHN0cl9zaXplLAorCQkJCSAgICAgbGluZW5vc192aWV3LmRhdGEsIGxp bmVub3Nfc2l6ZSwKKwkJCQkgICAgIGxubm9wdHIsIGVycm9yX2NhbGxiYWNr LCBkYXRhKSkKKwkqZmlsZWxpbmVfZm4gPSB4Y29mZl9maWxlbGluZTsKKwor ICAgICAgYmFja3RyYWNlX3JlbGVhc2VfdmlldyAoc3RhdGUsICZsaW5lbm9z X3ZpZXcsIGVycm9yX2NhbGxiYWNrLCBkYXRhKTsKKyAgICAgIGxpbmVub3Nf dmlld192YWxpZCA9IDA7CisgICAgfQorCisgIGJhY2t0cmFjZV9yZWxlYXNl X3ZpZXcgKHN0YXRlLCAmc2VjdHNfdmlldywgZXJyb3JfY2FsbGJhY2ssIGRh dGEpOworICBzZWN0c192aWV3X3ZhbGlkID0gMDsKKyAgaWYgKHN5bXNfdmll d192YWxpZCkKKyAgICBiYWNrdHJhY2VfcmVsZWFzZV92aWV3IChzdGF0ZSwg JnN5bXNfdmlldywgZXJyb3JfY2FsbGJhY2ssIGRhdGEpOworICBzeW1zX3Zp ZXdfdmFsaWQgPSAwOworCisgIC8qIFdlJ3ZlIHJlYWQgYWxsIHdlIG5lZWQg ZnJvbSB0aGUgZXhlY3V0YWJsZS4gICovCisgIGlmICghYmFja3RyYWNlX2Ns b3NlIChkZXNjcmlwdG9yLCBlcnJvcl9jYWxsYmFjaywgZGF0YSkpCisgICAg Z290byBmYWlsOworICBkZXNjcmlwdG9yID0gLTE7CisKKyAgcmV0dXJuIDE7 CisKKyBmYWlsOgorICBpZiAoc2VjdHNfdmlld192YWxpZCkKKyAgICBiYWNr dHJhY2VfcmVsZWFzZV92aWV3IChzdGF0ZSwgJnNlY3RzX3ZpZXcsIGVycm9y X2NhbGxiYWNrLCBkYXRhKTsKKyAgaWYgKHN0cl92aWV3X3ZhbGlkKQorICAg IGJhY2t0cmFjZV9yZWxlYXNlX3ZpZXcgKHN0YXRlLCAmc3RyX3ZpZXcsIGVy cm9yX2NhbGxiYWNrLCBkYXRhKTsKKyAgaWYgKHN5bXNfdmlld192YWxpZCkK KyAgICBiYWNrdHJhY2VfcmVsZWFzZV92aWV3IChzdGF0ZSwgJnN5bXNfdmll dywgZXJyb3JfY2FsbGJhY2ssIGRhdGEpOworICBpZiAobGluZW5vc192aWV3 X3ZhbGlkKQorICAgIGJhY2t0cmFjZV9yZWxlYXNlX3ZpZXcgKHN0YXRlLCAm bGluZW5vc192aWV3LCBlcnJvcl9jYWxsYmFjaywgZGF0YSk7CisgIGlmIChk ZXNjcmlwdG9yICE9IC0xICYmIG9mZnNldCA9PSAwKQorICAgIGJhY2t0cmFj ZV9jbG9zZSAoZGVzY3JpcHRvciwgZXJyb3JfY2FsbGJhY2ssIGRhdGEpOwor ICByZXR1cm4gMDsKK30KKworI2lmZGVmIF9BSVgKKy8qIFJlYWQgYW4gaW50 ZWdlciB2YWx1ZSBpbiBodW1hbi1yZWFkYWJsZSBmb3JtYXQgZnJvbSBhbiBB SVgKKyAgIGJpZyBhcmNoaXZlIGZpeGVkLWxlbmd0aCBvciBtZW1iZXIgaGVh ZGVyLiAgKi8KKworc3RhdGljIGludAoreGNvZmZfcGFyc2VfZGVjaW1hbCAo Y29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgb2ZmX3QgKm9mZikKK3sK KyAgY2hhciBzdHJbMzJdOworICBjaGFyICplbmQ7CisKKyAgaWYgKHNpemUg Pj0gc2l6ZW9mIHN0cikKKyAgICByZXR1cm4gMDsKKyAgbWVtY3B5IChzdHIs IGJ1Ziwgc2l6ZSk7CisgIHN0cltzaXplXSA9ICdcMCc7CisgICpvZmYgPSBz dHJ0b2wgKHN0ciwgJmVuZCwgMTApOworICBpZiAoKmVuZCAhPSAnXDAnICYm ICplbmQgIT0gJyAnKQorICAgIHJldHVybiAwOworCisgIHJldHVybiAxOwor fQorCisvKiBBZGQgdGhlIGJhY2t0cmFjZSBkYXRhIGZvciBhIG1lbWJlciBv ZiBhbiBBSVggYmlnIGFyY2hpdmUuCisgICBSZXR1cm5zIDEgb24gc3VjY2Vz cywgMCBvbiBmYWlsdXJlLiAgKi8KKworc3RhdGljIGludAoreGNvZmZfYXJt ZW1fYWRkIChzdHJ1Y3QgYmFja3RyYWNlX3N0YXRlICpzdGF0ZSwgaW50IGRl c2NyaXB0b3IsCisJCSB1aW50cHRyX3QgYmFzZV9hZGRyZXNzLCBjb25zdCBj aGFyICptZW1iZXIsCisJCSBiYWNrdHJhY2VfZXJyb3JfY2FsbGJhY2sgZXJy b3JfY2FsbGJhY2ssIHZvaWQgKmRhdGEsCisJCSBmaWxlbGluZSAqZmlsZWxp bmVfZm4sIGludCAqZm91bmRfc3ltKQoreworICBzdHJ1Y3QgYmFja3RyYWNl X3ZpZXcgdmlldzsKKyAgYl9hcl9mbF9oZHIgZmxfaGRyOworICBjb25zdCBi X2FyX2hkciAqYXJfaGRyOworICBvZmZfdCBvZmY7CisgIG9mZl90IGxlbjsK KyAgaW50IG1lbWxlbjsKKworICAqZm91bmRfc3ltID0gMDsKKworICAvKiBN YXAgYXJjaGl2ZSBmaXhlZC1sZW5ndGggaGVhZGVyLiAgKi8KKworICBpZiAo IWJhY2t0cmFjZV9nZXRfdmlldyAoc3RhdGUsIGRlc2NyaXB0b3IsIDAsIHNp emVvZiAoYl9hcl9mbF9oZHIpLAorCQkJICAgZXJyb3JfY2FsbGJhY2ssIGRh dGEsICZ2aWV3KSkKKyAgICByZXR1cm4gMDsKKworICBtZW1jcHkgKCZmbF9o ZHIsIHZpZXcuZGF0YSwgc2l6ZW9mIChiX2FyX2ZsX2hkcikpOworCisgIGJh Y2t0cmFjZV9yZWxlYXNlX3ZpZXcgKHN0YXRlLCAmdmlldywgZXJyb3JfY2Fs bGJhY2ssIGRhdGEpOworCisgIGlmIChtZW1jbXAgKGZsX2hkci5mbF9tYWdp YywgQUlBTUFHQklHLCA4KSAhPSAwKQorICAgIHJldHVybiAwOworCisgIG1l bWxlbiA9IHN0cmxlbiAobWVtYmVyKTsKKworICAvKiBSZWFkIG9mZnNldCBv ZiBmaXJzdCBhcmNoaXZlIG1lbWJlci4gICovCisgIGlmICgheGNvZmZfcGFy c2VfZGVjaW1hbCAoZmxfaGRyLmZsX2ZzdG1vZmYsIHNpemVvZiBmbF9oZHIu ZmxfZnN0bW9mZiwgJm9mZikpCisgICAgcmV0dXJuIDA7CisgIHdoaWxlIChv ZmYgIT0gMCkKKyAgICB7CisgICAgICAvKiBNYXAgYXJjaGl2ZSBtZW1iZXIg aGVhZGVyIGFuZCBtZW1iZXIgbmFtZS4gICovCisKKyAgICAgIGlmICghYmFj a3RyYWNlX2dldF92aWV3IChzdGF0ZSwgZGVzY3JpcHRvciwgb2ZmLAorCQkJ ICAgICAgIHNpemVvZiAoYl9hcl9oZHIpICsgbWVtbGVuLAorCQkJICAgICAg IGVycm9yX2NhbGxiYWNrLCBkYXRhLCAmdmlldykpCisJcmV0dXJuIDA7CisK KyAgICAgIGFyX2hkciA9IChjb25zdCBiX2FyX2hkciAqKSB2aWV3LmRhdGE7 CisKKyAgICAgIC8qIFJlYWQgYXJjaGl2ZSBtZW1iZXIgbmFtZSBsZW5ndGgu ICAqLworICAgICAgaWYgKCF4Y29mZl9wYXJzZV9kZWNpbWFsIChhcl9oZHIt PmFyX25hbWxlbiwgc2l6ZW9mIGFyX2hkci0+YXJfbmFtbGVuLAorCQkJCSZs ZW4pKQorCXsKKwkgIGJhY2t0cmFjZV9yZWxlYXNlX3ZpZXcgKHN0YXRlLCAm dmlldywgZXJyb3JfY2FsbGJhY2ssIGRhdGEpOworCSAgYnJlYWs7CisJfQor ICAgICAgaWYgKGxlbiA9PSBtZW1sZW4gJiYgIW1lbWNtcCAoYXJfaGRyLT5h cl9uYW1lLCBtZW1iZXIsIG1lbWxlbikpCisJeworCSAgb2ZmID0gKG9mZiAr IHNpemVvZiAoYl9hcl9oZHIpICsgbWVtbGVuICsgMSkgJiB+MTsKKworCSAg LyogVGhlIGFyY2hpdmUgY2FuIGNvbnRhaW4gc2V2ZXJhbCBtZW1iZXJzIHdp dGggdGhlIHNhbWUgbmFtZQorCSAgICAgKGUuZy4gMzItYml0IGFuZCA2NC1i aXQpLCBzbyBjb250aW51ZSBpZiBub3Qgb2suICAqLworCisJICBpZiAoeGNv ZmZfYWRkIChzdGF0ZSwgZGVzY3JpcHRvciwgb2ZmLCBiYXNlX2FkZHJlc3Ms IGVycm9yX2NhbGxiYWNrLAorCQkJIGRhdGEsIGZpbGVsaW5lX2ZuLCBmb3Vu ZF9zeW0sIDApKQorCSAgICB7CisJICAgICAgYmFja3RyYWNlX3JlbGVhc2Vf dmlldyAoc3RhdGUsICZ2aWV3LCBlcnJvcl9jYWxsYmFjaywgZGF0YSk7CisJ ICAgICAgcmV0dXJuIDE7CisJICAgIH0KKwl9CisKKyAgICAgIC8qIFJlYWQg b2Zmc2V0IG9mIG5leHQgYXJjaGl2ZSBtZW1iZXIuICAqLworICAgICAgaWYg KCF4Y29mZl9wYXJzZV9kZWNpbWFsIChhcl9oZHItPmFyX254dG1lbSwgc2l6 ZW9mIGFyX2hkci0+YXJfbnh0bWVtLAorCQkJCSZvZmYpKQorCXsKKwkgIGJh Y2t0cmFjZV9yZWxlYXNlX3ZpZXcgKHN0YXRlLCAmdmlldywgZXJyb3JfY2Fs bGJhY2ssIGRhdGEpOworCSAgYnJlYWs7CisJfQorICAgICAgYmFja3RyYWNl X3JlbGVhc2VfdmlldyAoc3RhdGUsICZ2aWV3LCBlcnJvcl9jYWxsYmFjaywg ZGF0YSk7CisgICAgfQorCisgIC8qIE5vIG1hdGNoaW5nIG1lbWJlciBmb3Vu ZC4gICovCisgIGJhY2t0cmFjZV9jbG9zZSAoZGVzY3JpcHRvciwgZXJyb3Jf Y2FsbGJhY2ssIGRhdGEpOworICByZXR1cm4gMDsKK30KKworLyogQWRkIHRo ZSBiYWNrdHJhY2UgZGF0YSBmb3IgZHluYW1pY2FsbHkgbG9hZGVkIGxpYnJh cmllcy4gICovCisKK3N0YXRpYyB2b2lkCit4Y29mZl9hZGRfc2hhcmVkX2xp YnMgKHN0cnVjdCBiYWNrdHJhY2Vfc3RhdGUgKnN0YXRlLAorCQkgICAgICAg YmFja3RyYWNlX2Vycm9yX2NhbGxiYWNrIGVycm9yX2NhbGxiYWNrLAorCQkg ICAgICAgdm9pZCAqZGF0YSwgZmlsZWxpbmUgKmZpbGVsaW5lX2ZuLCBpbnQg KmZvdW5kX3N5bSkKK3sKKyAgY29uc3Qgc3RydWN0IGxkX2luZm8gKmxkaW5m bzsKKyAgdm9pZCAqYnVmOworICB1bnNpZ25lZCBpbnQgYnVmbGVuOworICBj b25zdCBjaGFyICptZW1iZXI7CisgIGludCBkZXNjcmlwdG9yOworICBpbnQg ZG9lc19ub3RfZXhpc3Q7CisgIGludCBsaWJfZm91bmRfc3ltOworICBpbnQg cmV0OworCisgIC8qIFJldHJpZXZlIHRoZSBsaXN0IG9mIGxvYWRlZCBsaWJy YXJpZXMuICAqLworCisgIGJ1ZiA9IE5VTEw7CisgIGJ1ZmxlbiA9IDUxMjsK KyAgZG8KKyAgICB7CisgICAgICBidWYgPSByZWFsbG9jIChidWYsIGJ1Zmxl bik7CisgICAgICBpZiAoYnVmID09IE5VTEwpCisJeworCSAgcmV0ID0gLTE7 CisJICBicmVhazsKKwl9CisgICAgICByZXQgPSBsb2FkcXVlcnkgKExfR0VU SU5GTywgYnVmLCBidWZsZW4pOworICAgICAgaWYgKHJldCA9PSAwKQorCWJy ZWFrOworICAgICAgYnVmbGVuICo9IDI7CisgICAgfQorICB3aGlsZSAocmV0 ID09IC0xICYmIGVycm5vID09IEVOT01FTSk7CisgIGlmIChyZXQgIT0gMCkK KyAgICB7CisgICAgICBmcmVlIChidWYpOworICAgICAgcmV0dXJuOworICAg IH0KKworICBsZGluZm8gPSAoY29uc3Qgc3RydWN0IGxkX2luZm8gKikgYnVm OworICB3aGlsZSAoKGNvbnN0IGNoYXIgKikgbGRpbmZvIDwgKGNvbnN0IGNo YXIgKikgYnVmICsgYnVmbGVuKQorICAgIHsKKyAgICAgIGlmICgqbGRpbmZv LT5sZGluZm9fZmlsZW5hbWUgIT0gJy8nKQorCWdvdG8gbmV4dDsKKworICAg ICAgZGVzY3JpcHRvciA9IGJhY2t0cmFjZV9vcGVuIChsZGluZm8tPmxkaW5m b19maWxlbmFtZSwgZXJyb3JfY2FsbGJhY2ssCisJCQkJICAgZGF0YSwgJmRv ZXNfbm90X2V4aXN0KTsKKyAgICAgIGlmIChkZXNjcmlwdG9yIDwgMCkKKwln b3RvIG5leHQ7CisKKyAgICAgIC8qIENoZWNrIGlmIGl0IGlzIGFuIGFyY2hp dmUgKG1lbWJlciBuYW1lIG5vdCBlbXB0eSkuICAqLworCisgICAgICBtZW1i ZXIgPSBsZGluZm8tPmxkaW5mb19maWxlbmFtZSArIHN0cmxlbiAobGRpbmZv LT5sZGluZm9fZmlsZW5hbWUpICsgMTsKKyAgICAgIGlmICgqbWVtYmVyKQor CXsKKwkgIHhjb2ZmX2FybWVtX2FkZCAoc3RhdGUsIGRlc2NyaXB0b3IsCisJ CQkgICAodWludHB0cl90KSBsZGluZm8tPmxkaW5mb190ZXh0b3JnLCBtZW1i ZXIsCisJCQkgICBlcnJvcl9jYWxsYmFjaywgZGF0YSwgZmlsZWxpbmVfZm4s ICZsaWJfZm91bmRfc3ltKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgeGNv ZmZfYWRkIChzdGF0ZSwgZGVzY3JpcHRvciwgMCwgKHVpbnRwdHJfdCkgbGRp bmZvLT5sZGluZm9fdGV4dG9yZywKKwkJICAgICBlcnJvcl9jYWxsYmFjaywg ZGF0YSwgZmlsZWxpbmVfZm4sICZsaWJfZm91bmRfc3ltLCAwKTsKKwl9Cisg ICAgICBpZiAobGliX2ZvdW5kX3N5bSkKKwkqZm91bmRfc3ltID0gMTsKKwor IG5leHQ6CisgICAgICBpZiAobGRpbmZvLT5sZGluZm9fbmV4dCA9PSAwKQor CWJyZWFrOworICAgICAgbGRpbmZvID0gKGNvbnN0IHN0cnVjdCBsZF9pbmZv ICopICgoY29uc3QgY2hhciAqKSBsZGluZm8KKwkJCQkJICsgbGRpbmZvLT5s ZGluZm9fbmV4dCk7CisgICAgfQorCisgICAgZnJlZSAoYnVmKTsKK30KKyNl bmRpZiAvKiBfQUlYICovCisKKy8qIEluaXRpYWxpemUgdGhlIGJhY2t0cmFj ZSBkYXRhIHdlIG5lZWQgZnJvbSBhbiBYQ09GRiBleGVjdXRhYmxlLgorICAg UmV0dXJucyAxIG9uIHN1Y2Nlc3MsIDAgb24gZmFpbHVyZS4gICovCisKIGlu dAotYmFja3RyYWNlX2luaXRpYWxpemUgKHN0cnVjdCBiYWNrdHJhY2Vfc3Rh dGUgKnN0YXRlIEFUVFJJQlVURV9VTlVTRUQsCi0JCSAgICAgIGludCBkZXNj cmlwdG9yIEFUVFJJQlVURV9VTlVTRUQsCi0JCSAgICAgIGJhY2t0cmFjZV9l cnJvcl9jYWxsYmFjayBlcnJvcl9jYWxsYmFjayBBVFRSSUJVVEVfVU5VU0VE LAotCQkgICAgICB2b2lkICpkYXRhIEFUVFJJQlVURV9VTlVTRUQsIGZpbGVs aW5lICpmaWxlbGluZV9mbikKK2JhY2t0cmFjZV9pbml0aWFsaXplIChzdHJ1 Y3QgYmFja3RyYWNlX3N0YXRlICpzdGF0ZSwgaW50IGRlc2NyaXB0b3IsCisJ CSAgICAgIGJhY2t0cmFjZV9lcnJvcl9jYWxsYmFjayBlcnJvcl9jYWxsYmFj aywKKwkJICAgICAgdm9pZCAqZGF0YSwgZmlsZWxpbmUgKmZpbGVsaW5lX2Zu KQogewotICBzdGF0ZS0+c3ltaW5mb19mbiA9IHhjb2ZmX3N5bWluZm87Ci0g IHN0YXRlLT5maWxlbGluZV9kYXRhID0gTlVMTDsKLSAgKmZpbGVsaW5lX2Zu ID0geGNvZmZfZmlsZWxpbmU7CisgIGludCByZXQ7CisgIGludCBmb3VuZF9z eW07CisgIGZpbGVsaW5lIHhjb2ZmX2ZpbGVsaW5lX2ZuID0geGNvZmZfbm9k ZWJ1ZzsKKworICByZXQgPSB4Y29mZl9hZGQgKHN0YXRlLCBkZXNjcmlwdG9y LCAwLCAwLCBlcnJvcl9jYWxsYmFjaywgZGF0YSwKKwkJICAgJnhjb2ZmX2Zp bGVsaW5lX2ZuLCAmZm91bmRfc3ltLCAxKTsKKyAgaWYgKCFyZXQpCisgICAg cmV0dXJuIDA7CisKKyNpZmRlZiBfQUlYCisgIHhjb2ZmX2FkZF9zaGFyZWRf bGlicyAoc3RhdGUsIGVycm9yX2NhbGxiYWNrLCBkYXRhLCAmeGNvZmZfZmls ZWxpbmVfZm4sCisJCQkgJmZvdW5kX3N5bSk7CisjZW5kaWYKKworICBpZiAo IXN0YXRlLT50aHJlYWRlZCkKKyAgICB7CisgICAgICBpZiAoZm91bmRfc3lt KQorCXN0YXRlLT5zeW1pbmZvX2ZuID0geGNvZmZfc3ltaW5mbzsKKyAgICAg IGVsc2UgaWYgKHN0YXRlLT5zeW1pbmZvX2ZuID09IE5VTEwpCisJc3RhdGUt PnN5bWluZm9fZm4gPSB4Y29mZl9ub3N5bXM7CisgICAgfQorICBlbHNlCisg ICAgeworICAgICAgaWYgKGZvdW5kX3N5bSkKKwliYWNrdHJhY2VfYXRvbWlj X3N0b3JlX3BvaW50ZXIgKCZzdGF0ZS0+c3ltaW5mb19mbiwgeGNvZmZfc3lt aW5mbyk7CisgICAgICBlbHNlCisJX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRf c3dhcCAoJnN0YXRlLT5zeW1pbmZvX2ZuLCBOVUxMLCB4Y29mZl9ub3N5bXMp OworICAgIH0KKworICBpZiAoIXN0YXRlLT50aHJlYWRlZCkKKyAgICB7Cisg ICAgICBpZiAoc3RhdGUtPmZpbGVsaW5lX2ZuID09IE5VTEwgfHwgc3RhdGUt PmZpbGVsaW5lX2ZuID09IHhjb2ZmX25vZGVidWcpCisJKmZpbGVsaW5lX2Zu ID0geGNvZmZfZmlsZWxpbmVfZm47CisgICAgfQorICBlbHNlCisgICAgewor ICAgICAgZmlsZWxpbmUgY3VycmVudF9mbjsKKworICAgICAgY3VycmVudF9m biA9IGJhY2t0cmFjZV9hdG9taWNfbG9hZF9wb2ludGVyICgmc3RhdGUtPmZp bGVsaW5lX2ZuKTsKKyAgICAgIGlmIChjdXJyZW50X2ZuID09IE5VTEwgfHwg Y3VycmVudF9mbiA9PSB4Y29mZl9ub2RlYnVnKQorCSpmaWxlbGluZV9mbiA9 IHhjb2ZmX2ZpbGVsaW5lX2ZuOworICAgIH0KKwogICByZXR1cm4gMTsKIH0K --_002_B37989F2852398498001550C29155BE51789E743FRCRPVV9EX4MSXw_--