Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p7JYD-00011A-9T for pgsql-hackers@arkaria.postgresql.org; Mon, 19 Dec 2022 17:03:42 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1p7JYC-0002Ba-1h for pgsql-hackers@arkaria.postgresql.org; Mon, 19 Dec 2022 17:03:40 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p7JYB-00027m-41 for pgsql-hackers@lists.postgresql.org; Mon, 19 Dec 2022 17:03:39 +0000 Received: from mail-4322.protonmail.ch ([185.70.43.22]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p7JY2-00015m-K7 for pgsql-hackers@lists.postgresql.org; Mon, 19 Dec 2022 17:03:37 +0000 Date: Mon, 19 Dec 2022 17:03:21 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail3; t=1671469404; x=1671728604; bh=C2FeNGUAPZfaHWGBfn+Nh7jqkH9V+nIs1h3HGyny7xE=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=aiWc8AxH/kzlscWrjs+pb6juOtJ8th3N+HdTEQHJl9c4eSs157YYwOwmSl+DA08Fl yNHGbH0F4NaRF2M5UJazPnO8huN+8aYMqeQRTw9T4Ktf9bwkR+Qdnrr96EnojNFPV0 fvFzVn3nChm8Mzz38EjFX1BoPq4C+U3/poEP2jTra/3gDGmO4suO/Hox6wRDPeQzw1 T9b/FkzuhGgzYB0tiCO6E1geTtxIZmkv/ZjdK05wzvvouypO6NAIdqzeaa4+4Yymsy EQo9qXJOtdupRbt+BC0oQQTRVU7YMQhk6Pesws0No+T+KK2AYjp6hBcCCjYBYCTIla U16aSZbRdvi6A== To: Michael Paquier From: gkokolatos@pm.me Cc: Justin Pryzby , pgsql-hackers@lists.postgresql.org, Rachel Heaton Subject: Re: Add LZ4 compression in pg_dump Message-ID: In-Reply-To: References: <4wfmZ9BuGbkM6JXggut4g_gPl1hLbVeUwPEQh5nGgzlKCgnbtRaw7-nPcyPelGdG8ttH9A7vgyX_Z2fwZxuqHt1xENg9mqDfP_94qoZ5WxQ=@pm.me> <20221217232615.GS1153@telsasoft.com> Feedback-ID: 6383013:user:proton MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_deAkqpRYEv9bfARgIiya5BWa42kQe417DwyygRq8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --b1_deAkqpRYEv9bfARgIiya5BWa42kQe417DwyygRq8 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable ------- Original Message ------- On Monday, December 19th, 2022 at 5:06 AM, Michael Paquier wrote: >=20 >=20 > On Sat, Dec 17, 2022 at 05:26:15PM -0600, Justin Pryzby wrote: >=20 Thank you for the comments, please find v18 attached. > > 001: still refers to "gzip", which is correct for -Fp and -Fd but not > > for -Fc, for which it's more correct to say "zlib". >=20 >=20 > Or should we begin by changing all these existing "not built with zlib > support" error strings to the more generic "this build does not > support compression with %s" to reduce the number of messages to > translate? That would bring consistency with the other tools dealing > with compression. This has been the approach from 0002 on-wards. In the attached it is also applied on the remaining location in 0001.=20 >=20 > > That affects the > > name of the function, structures, comments, etc. I'm not sure if it's > > an issue to re-use the basebackup compression routines here. Maybe we > > should accept "-Zn" for zlib output (-Fc), but reject "gzip:9", which > > I'm sure some will find confusing, as it does not output. Maybe 001 > > should be split into a patch to re-use the existing "cfp" interface > > (which is a clear win), and 002 to re-use the basebackup interfaces for > > user input and constants, etc. > >=20 > > 001 still doesn't compile on freebsd, and 002 doesn't compile on > > windows. Have you checked test results from cirrusci on your private > > github account ? There are still known gaps in 0002 and 0003, for example documentation, and I have not been focusing too much on those. You are right, it is helpfu= l and kind to try to reduce the noise. The attached should have hopefully tackled the ci errors. >=20 > FYI, I have re-added an entry to the CF app to get some automated > coverage: > https://commitfest.postgresql.org/41/3571/ Much obliged. Should I change the state to "ready for review" when post a new version or should I leave that to the senior personnel? =20 >=20 > On MinGW, a complain about the open() callback, which I guess ought to > be avoided with a rename: > [00:16:37.254] compress_gzip.c:356:38: error: macro "open" passed 4 argum= ents, but takes just 3 > [00:16:37.254] 356 | ret =3D CFH->open(fname, -1, mode, CFH); >=20 > [00:16:37.254] | ^ > [00:16:37.254] In file included from ../../../src/include/c.h:1309, > [00:16:37.254] from ../../../src/include/postgres_fe.h:25, > [00:16:37.254] from compress_gzip.c:15: >=20 > On MSVC, some declaration conflicts, for a similar issue: > [00:12:31.966] ../src/bin/pg_dump/compress_io.c(193): error C2371: '_read= ': redefinition; different basic types > [00:12:31.966] C:\Program Files (x86)\Windows Kits\10\include\10.0.20348.= 0\ucrt\corecrt_io.h(252): note: see declaration of '_read' > [00:12:31.966] ../src/bin/pg_dump/compress_io.c(210): error C2371: '_writ= e': redefinition; different basic types > [00:12:31.966] C:\Program Files (x86)\Windows Kits\10\include\10.0.20348.= 0\ucrt\corecrt_io.h(294): note: see declaration of '_write' >=20 A rename was enough. > > 002 breaks "pg_dump -Fc -Z2" because (I think) AllocateCompressor() > > doesn't store the passed-in compression_spec. >=20 I am afraid I have not been able to reproduce this error. I tried both debian and freebsd after I addressed the compilation warnings. Which error did you get? Is it still present in the attached? > Hmm. This looks like a gap in the existing tests that we'd better fix > first. This CI is green on Linux. As the code stands, the compression level is not stored in the custom format's header as it is no longer relevant information. We can decide to make it relevant for the tests only on the expense of increasing dump size by four bytes. In either case this is not applicable in current head and can wait for 0002's turn. Cheers, //Georgios >=20 > > 003 still uses and not "lz4.h". >=20 >=20 > This should be , not "lz4.h". >=20 > -- > Michael --b1_deAkqpRYEv9bfARgIiya5BWa42kQe417DwyygRq8 Content-Type: text/x-patch; name=v18-0001-Prepare-pg_dump-internals-for-additional-compres.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v18-0001-Prepare-pg_dump-internals-for-additional-compres.patch RnJvbSAzZjMxOWQ2MmZiOThmMWJiNmM2MGVlZjQ4YjhmZDA0YTFhZGNhMjg5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IE1vbiwgMTkgRGVjIDIwMjIgMTU6MDI6MTcgKzAwMDAKU3ViamVjdDogW1BBVENIIHYx OCAxLzNdIFByZXBhcmUgcGdfZHVtcCBpbnRlcm5hbHMgZm9yIGFkZGl0aW9uYWwgY29tcHJlc3Np b24KIG1ldGhvZHMuCgpDb21taXQgIGJmOWFhNDkwZGIgaW50cm9kdWNlZCBjZnAgaW4gY29tcHJl c3NfaW8ue2MsaH0gd2l0aCB0aGUgaW50ZW50IG9mCnVuaWZ5aW5nIGNvbXByZXNzaW9uIHJlbGF0 ZWQgY29kZSBhbmQgYWxsb3cgZm9yIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYWRkaXRpb25hbAphcmNo aXZlIGZvcm1hdHMuIEhvd2V2ZXIsIHBnX2JhY2t1cF9hcmNoaXZlci5jIHdhcyBub3QgdXNpbmcg dGhhdCBBUEkuIFRoaXMKY29tbWl0IHRlYWNoZXMgcGdfYmFja3VwX2FyY2hpdmVyLmMgYWJvdXQg aXQgYW5kIGlzIHVzaW5nIGl0IHRocm91Z2hvdXQuCi0tLQogc3JjL2Jpbi9wZ19kdW1wL2NvbXBy ZXNzX2lvLmMgICAgICAgIHwgMzk4ICsrKysrKysrKysrKysrKysrKystLS0tLS0tLQogc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIHwgMTI4ICsrKy0tLS0tLQogc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oIHwgIDI3ICstCiAzIGZpbGVzIGNoYW5nZWQsIDMy NCBpbnNlcnRpb25zKCspLCAyMjkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL2NvbXByZXNzX2lvLmMgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwppbmRl eCBhN2RmNjAwY2MwLi5iYmFjMTU0NjY5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfaW8uYworKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwpAQCAtNTYsNiAr NTYsMTAgQEAKICNpbmNsdWRlICJjb21wcmVzc19pby5oIgogI2luY2x1ZGUgInBnX2JhY2t1cF91 dGlscy5oIgogCisjaWZkZWYgSEFWRV9MSUJaCisjaW5jbHVkZSA8emxpYi5oPgorI2VuZGlmCisK IC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogQ29tcHJlc3NvciBBUEkKICAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQpAQCAtMTAxLDcgKzEwNSw3IEBAIEFsbG9jYXRlQ29tcHJlc3Nvcihjb25z dCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCiAKICNpZm5kZWYg SEFWRV9MSUJaCiAJaWYgKGNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNT SU9OX0daSVApCi0JCXBnX2ZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsKKwkJ cGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVz IiwgImd6aXAiKTsKICNlbmRpZgogCiAJY3MgPSAoQ29tcHJlc3NvclN0YXRlICopIHBnX21hbGxv YzAoc2l6ZW9mKENvbXByZXNzb3JTdGF0ZSkpOwpAQCAtMTI4LDE1ICsxMzIsMjUgQEAgUmVhZERh dGFGcm9tQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwKIAkJCQkJY29uc3QgcGdfY29tcHJlc3Nf c3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLAogCQkJCQlSZWFkRnVuYyByZWFkRikKIHsK LQlpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fTk9ORSkK LQkJUmVhZERhdGFGcm9tQXJjaGl2ZU5vbmUoQUgsIHJlYWRGKTsKLQlpZiAoY29tcHJlc3Npb25f c3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKKwlzd2l0Y2ggKGNvbXByZXNz aW9uX3NwZWMuYWxnb3JpdGhtKQogCXsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgorCQkJ UmVhZERhdGFGcm9tQXJjaGl2ZU5vbmUoQUgsIHJlYWRGKTsKKwkJCWJyZWFrOworCQljYXNlIFBH X0NPTVBSRVNTSU9OX0daSVA6CiAjaWZkZWYgSEFWRV9MSUJaCi0JCVJlYWREYXRhRnJvbUFyY2hp dmVabGliKEFILCByZWFkRik7CisJCQlSZWFkRGF0YUZyb21BcmNoaXZlWmxpYihBSCwgcmVhZEYp OwogI2Vsc2UKLQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIpOworCQkJ cGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVz IiwKKwkJCQkJImd6aXAiKTsKICNlbmRpZgorCQkJYnJlYWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJ T05fTFo0OgorCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBw b3J0ZWQiLCAiTFo0Iik7CisJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9aU1REOgor CQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAi WlNURCIpOworCQkJYnJlYWs7CiAJfQogfQogCkBAIC0xNDksMjAgKzE2MywyMiBAQCBXcml0ZURh dGFUb0FyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCiB7CiAJ c3dpdGNoIChjcy0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pCiAJeworCQljYXNlIFBHX0NP TVBSRVNTSU9OX05PTkU6CisJCQlXcml0ZURhdGFUb0FyY2hpdmVOb25lKEFILCBjcywgZGF0YSwg ZExlbik7CisJCQlicmVhazsKIAkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgogI2lmZGVmIEhB VkVfTElCWgogCQkJV3JpdGVEYXRhVG9BcmNoaXZlWmxpYihBSCwgY3MsIGRhdGEsIGRMZW4pOwog I2Vsc2UKLQkJCXBnX2ZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsKKwkJCXBn X2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIs CisJCQkJCSJnemlwIik7CiAjZW5kaWYKIAkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9O X05PTkU6Ci0JCQlXcml0ZURhdGFUb0FyY2hpdmVOb25lKEFILCBjcywgZGF0YSwgZExlbik7Ci0J CQlicmVhazsKIAkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6Ci0JCQkvKiBmYWxsdGhyb3VnaCAq LworCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQi LCAiTFo0Iik7CisJCQlicmVhazsKIAkJY2FzZSBQR19DT01QUkVTU0lPTl9aU1REOgotCQkJcGdf ZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7CisJCQlwZ19mYXRhbCgiY29tcHJl c3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJaU1REIik7CiAJCQlicmVhazsK IAl9CiB9CkBAIC0xNzMsMTAgKzE4OSwyNiBAQCBXcml0ZURhdGFUb0FyY2hpdmUoQXJjaGl2ZUhh bmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCiB2b2lkCiBFbmRDb21wcmVzc29yKEFyY2hp dmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKQogeworCXN3aXRjaCAoY3MtPmNvbXBy ZXNzaW9uX3NwZWMuYWxnb3JpdGhtKQorCXsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgor CQkJYnJlYWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKICNpZmRlZiBIQVZFX0xJQloK LQlpZiAoY3MtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0da SVApCi0JCUVuZENvbXByZXNzb3JabGliKEFILCBjcyk7CisJCQlFbmRDb21wcmVzc29yWmxpYihB SCwgY3MpOworI2Vsc2UKKwkJCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQg Y29tcHJlc3Npb24gd2l0aCAlcyIsCisJCQkJCSJnemlwIik7CiAjZW5kaWYKKwkJCWJyZWFrOwor CQljYXNlIFBHX0NPTVBSRVNTSU9OX0xaNDoKKwkJCXBnX2ZhdGFsKCJjb21wcmVzc2lvbiB3aXRo ICVzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIiwgIkxaNCIpOworCQkJYnJlYWs7CisJCWNhc2UgUEdf Q09NUFJFU1NJT05fWlNURDoKKwkJCXBnX2ZhdGFsKCJjb21wcmVzc2lvbiB3aXRoICVzIGlzIG5v dCB5ZXQgc3VwcG9ydGVkIiwgIlpTVEQiKTsKKwkJCWJyZWFrOworCX0KKwogCWZyZWUoY3MpOwog fQogCkBAIC0zOTEsMTAgKzQyMyw4IEBAIFdyaXRlRGF0YVRvQXJjaGl2ZU5vbmUoQXJjaGl2ZUhh bmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCiAgKi8KIHN0cnVjdCBjZnAKIHsKLQlGSUxF CSAgICp1bmNvbXByZXNzZWRmcDsKLSNpZmRlZiBIQVZFX0xJQloKLQlnekZpbGUJCWNvbXByZXNz ZWRmcDsKLSNlbmRpZgorCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3Bl YzsKKwl2b2lkCSAgICpmcDsKIH07CiAKICNpZmRlZiBIQVZFX0xJQloKQEAgLTQ4Miw3ICs1MTIs NyBAQCBjZm9wZW5fd3JpdGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwKIAkJ ZnAgPSBjZm9wZW4oZm5hbWUsIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOwogCQlmcmVlX2tlZXBf ZXJybm8oZm5hbWUpOwogI2Vsc2UKLQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3Vw cG9ydCIpOworCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNz aW9uIHdpdGggJXMiLCAiZ3ppcCIpOwogCQlmcCA9IE5VTEw7CQkJCS8qIGtlZXAgY29tcGlsZXIg cXVpZXQgKi8KICNlbmRpZgogCX0KQEAgLTQ5MCwxMjcgKzUyMCwyMDMgQEAgY2ZvcGVuX3dyaXRl KGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCiB9CiAKIC8qCi0gKiBPcGVucyBm aWxlICdwYXRoJyBpbiAnbW9kZScuIElmIGNvbXByZXNzaW9uIGlzIEdaSVAsIHRoZSBmaWxlCi0g KiBpcyBvcGVuZWQgd2l0aCBsaWJ6IGd6b3BlbigpLCBvdGhlcndpc2Ugd2l0aCBwbGFpbiBmb3Bl bigpLgorICogVGhpcyBpcyB0aGUgd29ya2hvcnNlIGZvciBjZm9wZW4oKSBvciBjZmRvcGVuKCku IEl0IG9wZW5zIGZpbGUgJ3BhdGgnIG9yCisgKiBhc3NvY2lhdGVzIGEgc3RyZWFtICdmZCcsIGlm ICdmZCcgaXMgYSB2YWxpZCBkZXNjcmlwdG9yLCBpbiAnbW9kZScuIFRoZQorICogZGVzY3JpcHRv ciBpcyBub3QgZHVwJ2VkIGFuZCBpdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8g ZG8gc28uCisgKiBUaGUgY2FsbGVyIG11c3QgdmVyaWZ5IHRoYXQgdGhlICdjb21wcmVzc19hbGdv cml0aG0nIGlzIHN1cHBvcnRlZCBieSB0aGUKKyAqIGN1cnJlbnQgYnVpbGQuCiAgKgogICogT24g ZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJvciBjb2RlIGluIGVycm5vLgogICovCi1j ZnAgKgotY2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCi0JICAgY29u c3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQorc3RhdGljIGNm cCAqCitjZm9wZW5faW50ZXJuYWwoY29uc3QgY2hhciAqcGF0aCwgaW50IGZkLCBjb25zdCBjaGFy ICptb2RlLAorCQkJCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykK IHsKIAljZnAJCSAgICpmcCA9IHBnX21hbGxvYyhzaXplb2YoY2ZwKSk7CiAKLQlpZiAoY29tcHJl c3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKKwlmcC0+Y29tcHJl c3Npb25fc3BlYyA9IGNvbXByZXNzaW9uX3NwZWM7CisKKwlzd2l0Y2ggKGNvbXByZXNzaW9uX3Nw ZWMuYWxnb3JpdGhtKQogCXsKLSNpZmRlZiBIQVZFX0xJQloKLQkJaWYgKGNvbXByZXNzaW9uX3Nw ZWMubGV2ZWwgIT0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OKQotCQl7Ci0JCQkvKiB1c2VyIGhhcyBz cGVjaWZpZWQgYSBjb21wcmVzc2lvbiBsZXZlbCwgc28gdGVsbCB6bGliIHRvIHVzZSBpdCAqLwot CQkJY2hhcgkJbW9kZV9jb21wcmVzc2lvblszMl07CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9O RToKKwkJCWlmIChmZCA+PSAwKQorCQkJCWZwLT5mcCA9IGZkb3BlbihmZCwgbW9kZSk7CisJCQll bHNlCisJCQkJZnAtPmZwID0gZm9wZW4ocGF0aCwgbW9kZSk7CisJCQlpZiAoZnAtPmZwID09IE5V TEwpCisJCQl7CisJCQkJZnJlZV9rZWVwX2Vycm5vKGZwKTsKKwkJCQlmcCA9IE5VTEw7CisJCQl9 CiAKLQkJCXNucHJpbnRmKG1vZGVfY29tcHJlc3Npb24sIHNpemVvZihtb2RlX2NvbXByZXNzaW9u KSwgIiVzJWQiLAotCQkJCQkgbW9kZSwgY29tcHJlc3Npb25fc3BlYy5sZXZlbCk7Ci0JCQlmcC0+ Y29tcHJlc3NlZGZwID0gZ3pvcGVuKHBhdGgsIG1vZGVfY29tcHJlc3Npb24pOwotCQl9Ci0JCWVs c2UKLQkJewotCQkJLyogZG9uJ3Qgc3BlY2lmeSBhIGxldmVsLCBqdXN0IHVzZSB0aGUgemxpYiBk ZWZhdWx0ICovCi0JCQlmcC0+Y29tcHJlc3NlZGZwID0gZ3pvcGVuKHBhdGgsIG1vZGUpOwotCQl9 CisJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgorI2lmZGVmIEhBVkVfTElC WgorCQkJaWYgKGNvbXByZXNzaW9uX3NwZWMubGV2ZWwgIT0gWl9ERUZBVUxUX0NPTVBSRVNTSU9O KQorCQkJeworCQkJCS8qCisJCQkJICogdXNlciBoYXMgc3BlY2lmaWVkIGEgY29tcHJlc3Npb24g bGV2ZWwsIHNvIHRlbGwgemxpYiB0byB1c2UKKwkJCQkgKiBpdAorCQkJCSAqLworCQkJCWNoYXIJ CW1vZGVfY29tcHJlc3Npb25bMzJdOworCisJCQkJc25wcmludGYobW9kZV9jb21wcmVzc2lvbiwg c2l6ZW9mKG1vZGVfY29tcHJlc3Npb24pLCAiJXMlZCIsCisJCQkJCQkgbW9kZSwgY29tcHJlc3Np b25fc3BlYy5sZXZlbCk7CisJCQkJaWYgKGZkID49IDApCisJCQkJCWZwLT5mcCA9IGd6ZG9wZW4o ZmQsIG1vZGVfY29tcHJlc3Npb24pOworCQkJCWVsc2UKKwkJCQkJZnAtPmZwID0gZ3pvcGVuKHBh dGgsIG1vZGVfY29tcHJlc3Npb24pOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qIGRvbid0 IHNwZWNpZnkgYSBsZXZlbCwganVzdCB1c2UgdGhlIHpsaWIgZGVmYXVsdCAqLworCQkJCWlmIChm ZCA+PSAwKQorCQkJCQlmcC0+ZnAgPSBnemRvcGVuKGZkLCBtb2RlKTsKKwkJCQllbHNlCisJCQkJ CWZwLT5mcCA9IGd6b3BlbihwYXRoLCBtb2RlKTsKKwkJCX0KIAotCQlmcC0+dW5jb21wcmVzc2Vk ZnAgPSBOVUxMOwotCQlpZiAoZnAtPmNvbXByZXNzZWRmcCA9PSBOVUxMKQotCQl7Ci0JCQlmcmVl X2tlZXBfZXJybm8oZnApOwotCQkJZnAgPSBOVUxMOwotCQl9CisJCQlpZiAoZnAtPmZwID09IE5V TEwpCisJCQl7CisJCQkJZnJlZV9rZWVwX2Vycm5vKGZwKTsKKwkJCQlmcCA9IE5VTEw7CisJCQl9 CiAjZWxzZQotCQlwZ19mYXRhbCgibm90IGJ1aWx0IHdpdGggemxpYiBzdXBwb3J0Iik7Ci0jZW5k aWYKLQl9Ci0JZWxzZQotCXsKLSNpZmRlZiBIQVZFX0xJQloKLQkJZnAtPmNvbXByZXNzZWRmcCA9 IE5VTEw7CisJCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNz aW9uIHdpdGggJXMiLAorCQkJCQkiZ3ppcCIpOwogI2VuZGlmCi0JCWZwLT51bmNvbXByZXNzZWRm cCA9IGZvcGVuKHBhdGgsIG1vZGUpOwotCQlpZiAoZnAtPnVuY29tcHJlc3NlZGZwID09IE5VTEwp Ci0JCXsKLQkJCWZyZWVfa2VlcF9lcnJubyhmcCk7Ci0JCQlmcCA9IE5VTEw7Ci0JCX0KKwkJCWJy ZWFrOworCQljYXNlIFBHX0NPTVBSRVNTSU9OX0xaNDoKKwkJCXBnX2ZhdGFsKCJjb21wcmVzc2lv biB3aXRoICVzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIiwgIkxaNCIpOworCQkJYnJlYWs7CisJCWNh c2UgUEdfQ09NUFJFU1NJT05fWlNURDoKKwkJCXBnX2ZhdGFsKCJjb21wcmVzc2lvbiB3aXRoICVz IGlzIG5vdCB5ZXQgc3VwcG9ydGVkIiwgIlpTVEQiKTsKKwkJCWJyZWFrOwogCX0KIAogCXJldHVy biBmcDsKIH0KIAorY2ZwICoKK2Nmb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpt b2RlLAorCSAgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3Bl YykKK3sKKwlyZXR1cm4gY2ZvcGVuX2ludGVybmFsKHBhdGgsIC0xLCBtb2RlLCBjb21wcmVzc2lv bl9zcGVjKTsKK30KKworY2ZwICoKK2NmZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2RlLAor CQljb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJ cmV0dXJuIGNmb3Blbl9pbnRlcm5hbChOVUxMLCBmZCwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7 Cit9CiAKIGludAogY2ZyZWFkKHZvaWQgKnB0ciwgaW50IHNpemUsIGNmcCAqZnApCiB7Ci0JaW50 CQkJcmV0OworCWludAkJCXJldCA9IDA7CiAKIAlpZiAoc2l6ZSA9PSAwKQogCQlyZXR1cm4gMDsK IAotI2lmZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3NlZGZwKQorCXN3aXRjaCAoZnAt PmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtKQogCXsKLQkJcmV0ID0gZ3pyZWFkKGZwLT5jb21w cmVzc2VkZnAsIHB0ciwgc2l6ZSk7Ci0JCWlmIChyZXQgIT0gc2l6ZSAmJiAhZ3plb2YoZnAtPmNv bXByZXNzZWRmcCkpCi0JCXsKLQkJCWludAkJCWVycm51bTsKLQkJCWNvbnN0IGNoYXIgKmVycm1z ZyA9IGd6ZXJyb3IoZnAtPmNvbXByZXNzZWRmcCwgJmVycm51bSk7CisJCWNhc2UgUEdfQ09NUFJF U1NJT05fTk9ORToKKwkJCXJldCA9IGZyZWFkKHB0ciwgMSwgc2l6ZSwgKEZJTEUgKikgZnAtPmZw KTsKKwkJCWlmIChyZXQgIT0gc2l6ZSAmJiAhZmVvZigoRklMRSAqKSBmcC0+ZnApKQorCQkJCVJF QURfRVJST1JfRVhJVCgoRklMRSAqKSBmcC0+ZnApOwogCi0JCQlwZ19mYXRhbCgiY291bGQgbm90 IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsCi0JCQkJCSBlcnJudW0gPT0gWl9FUlJOTyA/IHN0 cmVycm9yKGVycm5vKSA6IGVycm1zZyk7Ci0JCX0KLQl9Ci0JZWxzZQorCQkJYnJlYWs7CisJCWNh c2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKKyNpZmRlZiBIQVZFX0xJQloKKwkJCXJldCA9IGd6cmVh ZCgoZ3pGaWxlKSBmcC0+ZnAsIHB0ciwgc2l6ZSk7CisJCQlpZiAocmV0ICE9IHNpemUgJiYgIWd6 ZW9mKChnekZpbGUpIGZwLT5mcCkpCisJCQl7CisJCQkJaW50CQkJZXJybnVtOworCQkJCWNvbnN0 IGNoYXIgKmVycm1zZyA9IGd6ZXJyb3IoKGd6RmlsZSkgZnAtPmZwLCAmZXJybnVtKTsKKworCQkJ CXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwKKwkJCQkJCSBl cnJudW0gPT0gWl9FUlJOTyA/IHN0cmVycm9yKGVycm5vKSA6IGVycm1zZyk7CisJCQl9CisjZWxz ZQorCQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3 aXRoICVzIiwKKwkJCQkJImd6aXAiKTsKICNlbmRpZgotCXsKLQkJcmV0ID0gZnJlYWQocHRyLCAx LCBzaXplLCBmcC0+dW5jb21wcmVzc2VkZnApOwotCQlpZiAocmV0ICE9IHNpemUgJiYgIWZlb2Yo ZnAtPnVuY29tcHJlc3NlZGZwKSkKLQkJCVJFQURfRVJST1JfRVhJVChmcC0+dW5jb21wcmVzc2Vk ZnApOworCQkJYnJlYWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTFo0OgorCQkJcGdfZmF0YWwo ImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiTFo0Iik7CisJCQli cmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9aU1REOgorCQkJcGdfZmF0YWwoImNvbXByZXNz aW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiWlNURCIpOworCQkJYnJlYWs7CiAJ fQorCiAJcmV0dXJuIHJldDsKIH0KIAogaW50CiBjZndyaXRlKGNvbnN0IHZvaWQgKnB0ciwgaW50 IHNpemUsIGNmcCAqZnApCiB7CisJaW50CQkJcmV0ID0gMDsKKworCXN3aXRjaCAoZnAtPmNvbXBy ZXNzaW9uX3NwZWMuYWxnb3JpdGhtKQorCXsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgor CQkJcmV0ID0gZndyaXRlKHB0ciwgMSwgc2l6ZSwgKEZJTEUgKikgZnAtPmZwKTsKKwkJCWJyZWFr OworCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6CiAjaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGZw LT5jb21wcmVzc2VkZnApCi0JCXJldHVybiBnendyaXRlKGZwLT5jb21wcmVzc2VkZnAsIHB0ciwg c2l6ZSk7Ci0JZWxzZQorCQkJcmV0ID0gZ3p3cml0ZSgoZ3pGaWxlKSBmcC0+ZnAsIHB0ciwgc2l6 ZSk7CisjZWxzZQorCQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21w cmVzc2lvbiB3aXRoICVzIiwKKwkJCQkJImd6aXAiKTsKICNlbmRpZgotCQlyZXR1cm4gZndyaXRl KHB0ciwgMSwgc2l6ZSwgZnAtPnVuY29tcHJlc3NlZGZwKTsKKwkJCWJyZWFrOworCQljYXNlIFBH X0NPTVBSRVNTSU9OX0xaNDoKKwkJCXBnX2ZhdGFsKCJjb21wcmVzc2lvbiB3aXRoICVzIGlzIG5v dCB5ZXQgc3VwcG9ydGVkIiwgIkxaNCIpOworCQkJYnJlYWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJ T05fWlNURDoKKwkJCXBnX2ZhdGFsKCJjb21wcmVzc2lvbiB3aXRoICVzIGlzIG5vdCB5ZXQgc3Vw cG9ydGVkIiwgIlpTVEQiKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7CiB9CiAKIGlu dAogY2ZnZXRjKGNmcCAqZnApCiB7Ci0JaW50CQkJcmV0OworCWludAkJCXJldCA9IDA7CiAKLSNp ZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKKwlzd2l0Y2ggKGZwLT5jb21w cmVzc2lvbl9zcGVjLmFsZ29yaXRobSkKIAl7Ci0JCXJldCA9IGd6Z2V0YyhmcC0+Y29tcHJlc3Nl ZGZwKTsKLQkJaWYgKHJldCA9PSBFT0YpCi0JCXsKLQkJCWlmICghZ3plb2YoZnAtPmNvbXByZXNz ZWRmcCkpCi0JCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMi LCBzdHJlcnJvcihlcnJubykpOwotCQkJZWxzZQotCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVh ZCBmcm9tIGlucHV0IGZpbGU6IGVuZCBvZiBmaWxlIik7Ci0JCX0KLQl9Ci0JZWxzZQorCQljYXNl IFBHX0NPTVBSRVNTSU9OX05PTkU6CisJCQlyZXQgPSBmZ2V0YygoRklMRSAqKSBmcC0+ZnApOwor CQkJaWYgKHJldCA9PSBFT0YpCisJCQkJUkVBRF9FUlJPUl9FWElUKChGSUxFICopIGZwLT5mcCk7 CisKKwkJCWJyZWFrOworCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6CisjaWZkZWYgSEFWRV9M SUJaCisJCQlyZXQgPSBnemdldGMoKGd6RmlsZSkgZnAtPmZwKTsKKwkJCWlmIChyZXQgPT0gRU9G KQorCQkJeworCQkJCWlmICghZ3plb2YoKGd6RmlsZSkgZnAtPmZwKSkKKwkJCQkJcGdfZmF0YWwo ImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOwor CQkJCWVsc2UKKwkJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTog ZW5kIG9mIGZpbGUiKTsKKwkJCX0KKyNlbHNlCisJCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2Vz IG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLAorCQkJCQkiZ3ppcCIpOwogI2VuZGlm Ci0JewotCQlyZXQgPSBmZ2V0YyhmcC0+dW5jb21wcmVzc2VkZnApOwotCQlpZiAocmV0ID09IEVP RikKLQkJCVJFQURfRVJST1JfRVhJVChmcC0+dW5jb21wcmVzc2VkZnApOworCQkJYnJlYWs7CisJ CWNhc2UgUEdfQ09NUFJFU1NJT05fTFo0OgorCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGgg JXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiTFo0Iik7CisJCQlicmVhazsKKwkJY2FzZSBQR19D T01QUkVTU0lPTl9aU1REOgorCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90 IHlldCBzdXBwb3J0ZWQiLCAiWlNURCIpOworCQkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIHJldDsK QEAgLTYxOSw2NSArNzI1LDExOSBAQCBjZmdldGMoY2ZwICpmcCkKIGNoYXIgKgogY2ZnZXRzKGNm cCAqZnAsIGNoYXIgKmJ1ZiwgaW50IGxlbikKIHsKKwljaGFyCSAgICpyZXQgPSBOVUxMOworCisJ c3dpdGNoIChmcC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pCisJeworCQljYXNlIFBHX0NP TVBSRVNTSU9OX05PTkU6CisJCQlyZXQgPSBmZ2V0cyhidWYsIGxlbiwgKEZJTEUgKikgZnAtPmZw KTsKKworCQkJYnJlYWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKICNpZmRlZiBIQVZF X0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKLQkJcmV0dXJuIGd6Z2V0cyhmcC0+Y29tcHJl c3NlZGZwLCBidWYsIGxlbik7Ci0JZWxzZQorCQkJcmV0ID0gZ3pnZXRzKChnekZpbGUpIGZwLT5m cCwgYnVmLCBsZW4pOworI2Vsc2UKKwkJCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1 cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsCisJCQkJCSJnemlwIik7CiAjZW5kaWYKLQkJcmV0 dXJuIGZnZXRzKGJ1ZiwgbGVuLCBmcC0+dW5jb21wcmVzc2VkZnApOworCQkJYnJlYWs7CisJCWNh c2UgUEdfQ09NUFJFU1NJT05fTFo0OgorCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMg aXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiTFo0Iik7CisJCQlicmVhazsKKwkJY2FzZSBQR19DT01Q UkVTU0lPTl9aU1REOgorCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHll dCBzdXBwb3J0ZWQiLCAiWlNURCIpOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKIH0K IAogaW50CiBjZmNsb3NlKGNmcCAqZnApCiB7Ci0JaW50CQkJcmVzdWx0OworCWludAkJCXJldCA9 IDA7CiAKIAlpZiAoZnAgPT0gTlVMTCkKIAl7CiAJCWVycm5vID0gRUJBREY7CiAJCXJldHVybiBF T0Y7CiAJfQotI2lmZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3NlZGZwKQorCisJc3dp dGNoIChmcC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pCiAJewotCQlyZXN1bHQgPSBnemNs b3NlKGZwLT5jb21wcmVzc2VkZnApOwotCQlmcC0+Y29tcHJlc3NlZGZwID0gTlVMTDsKLQl9Ci0J ZWxzZQorCQljYXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6CisJCQlyZXQgPSBmY2xvc2UoKEZJTEUg KikgZnAtPmZwKTsKKwkJCWZwLT5mcCA9IE5VTEw7CisKKwkJCWJyZWFrOworCQljYXNlIFBHX0NP TVBSRVNTSU9OX0daSVA6CisjaWZkZWYgSEFWRV9MSUJaCisJCQlyZXQgPSBnemNsb3NlKChnekZp bGUpIGZwLT5mcCk7CisJCQlmcC0+ZnAgPSBOVUxMOworI2Vsc2UKKwkJCXBnX2ZhdGFsKCJ0aGlz IGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsCisJCQkJCSJnemlw Iik7CiAjZW5kaWYKLQl7Ci0JCXJlc3VsdCA9IGZjbG9zZShmcC0+dW5jb21wcmVzc2VkZnApOwot CQlmcC0+dW5jb21wcmVzc2VkZnAgPSBOVUxMOworCQkJYnJlYWs7CisJCWNhc2UgUEdfQ09NUFJF U1NJT05fTFo0OgorCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBz dXBwb3J0ZWQiLCAiTFo0Iik7CisJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9aU1RE OgorCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQi LCAiWlNURCIpOworCQkJYnJlYWs7CiAJfQorCiAJZnJlZV9rZWVwX2Vycm5vKGZwKTsKIAotCXJl dHVybiByZXN1bHQ7CisJcmV0dXJuIHJldDsKIH0KIAogaW50CiBjZmVvZihjZnAgKmZwKQogewor CWludAkJCXJldCA9IDA7CisKKwlzd2l0Y2ggKGZwLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRo bSkKKwl7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKKwkJCXJldCA9IGZlb2YoKEZJTEUg KikgZnAtPmZwKTsKKworCQkJYnJlYWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKICNp ZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKLQkJcmV0dXJuIGd6ZW9mKGZw LT5jb21wcmVzc2VkZnApOwotCWVsc2UKKwkJCXJldCA9IGd6ZW9mKChnekZpbGUpIGZwLT5mcCk7 CisjZWxzZQorCQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVz c2lvbiB3aXRoICVzIiwKKwkJCQkJImd6aXAiKTsKICNlbmRpZgotCQlyZXR1cm4gZmVvZihmcC0+ dW5jb21wcmVzc2VkZnApOworCQkJYnJlYWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTFo0Ogor CQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAi TFo0Iik7CisJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9aU1REOgorCQkJcGdfZmF0 YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiWlNURCIpOwor CQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAogY29uc3QgY2hhciAqCiBnZXRfY2Zw X2Vycm9yKGNmcCAqZnApCiB7Ci0jaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGZwLT5jb21wcmVzc2Vk ZnApCisJaWYgKGZwLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lP Tl9HWklQKQogCXsKKyNpZmRlZiBIQVZFX0xJQloKIAkJaW50CQkJZXJybnVtOwotCQljb25zdCBj aGFyICplcnJtc2cgPSBnemVycm9yKGZwLT5jb21wcmVzc2VkZnAsICZlcnJudW0pOworCQljb25z dCBjaGFyICplcnJtc2cgPSBnemVycm9yKChnekZpbGUpIGZwLT5mcCwgJmVycm51bSk7CiAKIAkJ aWYgKGVycm51bSAhPSBaX0VSUk5PKQogCQkJcmV0dXJuIGVycm1zZzsKLQl9CisjZWxzZQorCQlw Z19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMi LCAiZ3ppcCIpOwogI2VuZGlmCisJfQorCiAJcmV0dXJuIHN0cmVycm9yKGVycm5vKTsKIH0KIApk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCmluZGV4IDdmN2EwZjFjZTcuLmZiOTQzMTdh ZDkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYworKysg Yi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKQEAgLTMxLDYgKzMxLDcgQEAK ICNlbmRpZgogCiAjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgImNvbXByZXNz X2lvLmgiCiAjaW5jbHVkZSAiZHVtcHV0aWxzLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5n X3V0aWxzLmgiCiAjaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKQEAgLTQzLDEzICs0NCw2IEBA CiAjZGVmaW5lIFRFWFRfRFVNUF9IRUFERVIgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGR1 bXBcbi0tXG5cbiIKICNkZWZpbmUgVEVYVF9EVU1QQUxMX0hFQURFUiAiLS1cbi0tIFBvc3RncmVT UUwgZGF0YWJhc2UgY2x1c3RlciBkdW1wXG4tLVxuXG4iCiAKLS8qIHN0YXRlIG5lZWRlZCB0byBz YXZlL3Jlc3RvcmUgYW4gYXJjaGl2ZSdzIG91dHB1dCB0YXJnZXQgKi8KLXR5cGVkZWYgc3RydWN0 IF9vdXRwdXRDb250ZXh0Ci17Ci0Jdm9pZAkgICAqT0Y7Ci0JaW50CQkJZ3pPdXQ7Ci19IE91dHB1 dENvbnRleHQ7Ci0KIC8qCiAgKiBTdGF0ZSBmb3IgdHJhY2tpbmcgVG9jRW50cnlzIHRoYXQgYXJl IHJlYWR5IHRvIHByb2Nlc3MgZHVyaW5nIGEgcGFyYWxsZWwKICAqIHJlc3RvcmUuICAoVGhpcyB1 c2VkIHRvIGJlIGEgbGlzdCwgYW5kIHdlIHN0aWxsIGNhbGwgaXQgdGhhdCwgdGhvdWdoIG5vdwpA QCAtMTAxLDggKzk1LDggQEAgc3RhdGljIHZvaWQgZHVtcF9sb19idWYoQXJjaGl2ZUhhbmRsZSAq QUgpOwogc3RhdGljIHZvaWQgZHVtcFRpbWVzdGFtcChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3Qg Y2hhciAqbXNnLCB0aW1lX3QgdGltKTsKIHN0YXRpYyB2b2lkIFNldE91dHB1dChBcmNoaXZlSGFu ZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nf c3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKLXN0YXRpYyBPdXRwdXRDb250ZXh0IFNh dmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgpOwotc3RhdGljIHZvaWQgUmVzdG9yZU91dHB1dChB cmNoaXZlSGFuZGxlICpBSCwgT3V0cHV0Q29udGV4dCBzYXZlZENvbnRleHQpOworc3RhdGljIGNm cCAqU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCk7CitzdGF0aWMgdm9pZCBSZXN0b3JlT3V0 cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjZnAgKnNhdmVkT3V0cHV0KTsKIAogc3RhdGljIGludAly ZXN0b3JlX3RvY19lbnRyeShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlLCBib29sIGlz X3BhcmFsbGVsKTsKIHN0YXRpYyB2b2lkIHJlc3RvcmVfdG9jX2VudHJpZXNfcHJlZm9yayhBcmNo aXZlSGFuZGxlICpBSCwKQEAgLTI3NywxMSArMjcxLDggQEAgQ2xvc2VBcmNoaXZlKEFyY2hpdmUg KkFIWCkKIAlBSC0+Q2xvc2VQdHIoQUgpOwogCiAJLyogQ2xvc2UgdGhlIG91dHB1dCAqLwotCWVy cm5vID0gMDsJCQkJCS8qIGluIGNhc2UgZ3pjbG9zZSgpIGRvZXNuJ3Qgc2V0IGl0ICovCi0JaWYg KEFILT5nek91dCkKLQkJcmVzID0gR1pDTE9TRShBSC0+T0YpOwotCWVsc2UgaWYgKEFILT5PRiAh PSBzdGRvdXQpCi0JCXJlcyA9IGZjbG9zZShBSC0+T0YpOworCWVycm5vID0gMDsKKwlyZXMgPSBj ZmNsb3NlKEFILT5PRik7CiAKIAlpZiAocmVzICE9IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qg Y2xvc2Ugb3V0cHV0IGZpbGU6ICVtIik7CkBAIC0zNjIsOCArMzUzLDkgQEAgUmVzdG9yZUFyY2hp dmUoQXJjaGl2ZSAqQUhYKQogCUFyY2hpdmVIYW5kbGUgKkFIID0gKEFyY2hpdmVIYW5kbGUgKikg QUhYOwogCVJlc3RvcmVPcHRpb25zICpyb3B0ID0gQUgtPnB1YmxpYy5yb3B0OwogCWJvb2wJCXBh cmFsbGVsX21vZGU7CisJYm9vbAkJc3VwcG9ydHNfY29tcHJlc3Npb247CiAJVG9jRW50cnkgICAq dGU7Ci0JT3V0cHV0Q29udGV4dCBzYXY7CisJY2ZwCQkgICAqc2F2OwogCiAJQUgtPnN0YWdlID0g U1RBR0VfSU5JVElBTElaSU5HOwogCkBAIC0zOTEsMTcgKzM4MywyNCBAQCBSZXN0b3JlQXJjaGl2 ZShBcmNoaXZlICpBSFgpCiAJLyoKIAkgKiBNYWtlIHN1cmUgd2Ugd29uJ3QgbmVlZCAoZGUpY29t cHJlc3Npb24gd2UgaGF2ZW4ndCBnb3QKIAkgKi8KLSNpZm5kZWYgSEFWRV9MSUJaCi0JaWYgKEFI LT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQICYmCisJ c3VwcG9ydHNfY29tcHJlc3Npb24gPSB0cnVlOworCWlmIChBSC0+Y29tcHJlc3Npb25fc3BlYy5h bGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJT05fTk9ORSAmJgorCQlBSC0+Y29tcHJlc3Npb25fc3Bl Yy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCAmJgogCQlBSC0+UHJpbnRUb2NEYXRh UHRyICE9IE5VTEwpCiAJewogCQlmb3IgKHRlID0gQUgtPnRvYy0+bmV4dDsgdGUgIT0gQUgtPnRv YzsgdGUgPSB0ZS0+bmV4dCkKIAkJewogCQkJaWYgKHRlLT5oYWREdW1wZXIgJiYgKHRlLT5yZXFz ICYgUkVRX0RBVEEpICE9IDApCi0JCQkJcGdfZmF0YWwoImNhbm5vdCByZXN0b3JlIGZyb20gY29t cHJlc3NlZCBhcmNoaXZlIChjb21wcmVzc2lvbiBub3Qgc3VwcG9ydGVkIGluIHRoaXMgaW5zdGFs bGF0aW9uKSIpOworCQkJeworI2lmbmRlZiBIQVZFX0xJQloKKwkJCQlpZiAoQUgtPmNvbXByZXNz aW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCisJCQkJCXN1cHBvcnRz X2NvbXByZXNzaW9uID0gZmFsc2U7CisjZW5kaWYKKwkJCQlpZiAoc3VwcG9ydHNfY29tcHJlc3Np b24gPT0gZmFsc2UpCisJCQkJCXBnX2ZhdGFsKCJjYW5ub3QgcmVzdG9yZSBmcm9tIGNvbXByZXNz ZWQgYXJjaGl2ZSAoY29tcHJlc3Npb24gbm90IHN1cHBvcnRlZCBpbiB0aGlzIGluc3RhbGxhdGlv bikiKTsKKwkJCX0KIAkJfQogCX0KLSNlbmRpZgogCiAJLyoKIAkgKiBQcmVwYXJlIGluZGV4IGFy cmF5cywgc28gd2UgY2FuIGFzc3VtZSB3ZSBoYXZlIHRoZW0gdGhyb3VnaG91dCByZXN0b3JlLgpA QCAtMTEyOCw3ICsxMTI3LDcgQEAgUHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCkKIAlUb2NF bnRyeSAgICp0ZTsKIAlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIG91dF9jb21wcmVzc2lvbl9z cGVjID0gezB9OwogCXRlU2VjdGlvbgljdXJTZWN0aW9uOwotCU91dHB1dENvbnRleHQgc2F2Owor CWNmcAkJICAgKnNhdjsKIAljb25zdCBjaGFyICpmbXROYW1lOwogCWNoYXIJCXN0YW1wX3N0cls2 NF07CiAKQEAgLTE1MDMsNTggKzE1MDIsMzIgQEAgc3RhdGljIHZvaWQKIFNldE91dHB1dChBcmNo aXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJCSAgY29uc3QgcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQogewotCWludAkJCWZuOworCWNvbnN0 IGNoYXIgKm1vZGU7CisJaW50CQkJZm4gPSAtMTsKIAogCWlmIChmaWxlbmFtZSkKIAl7CiAJCWlm IChzdHJjbXAoZmlsZW5hbWUsICItIikgPT0gMCkKIAkJCWZuID0gZmlsZW5vKHN0ZG91dCk7Ci0J CWVsc2UKLQkJCWZuID0gLTE7CiAJfQogCWVsc2UgaWYgKEFILT5GSCkKIAkJZm4gPSBmaWxlbm8o QUgtPkZIKTsKIAllbHNlIGlmIChBSC0+ZlNwZWMpCiAJewotCQlmbiA9IC0xOwogCQlmaWxlbmFt ZSA9IEFILT5mU3BlYzsKIAl9CiAJZWxzZQogCQlmbiA9IGZpbGVubyhzdGRvdXQpOwogCi0JLyog SWYgY29tcHJlc3Npb24gZXhwbGljaXRseSByZXF1ZXN0ZWQsIHVzZSBnem9wZW4gKi8KLSNpZmRl ZiBIQVZFX0xJQloKLQlpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJF U1NJT05fR1pJUCkKLQl7Ci0JCWNoYXIJCWZtb2RlWzE0XTsKKwlpZiAoQUgtPm1vZGUgPT0gYXJj aE1vZGVBcHBlbmQpCisJCW1vZGUgPSBQR19CSU5BUllfQTsKKwllbHNlCisJCW1vZGUgPSBQR19C SU5BUllfVzsKIAotCQkvKiBEb24ndCB1c2UgUEdfQklOQVJZX3ggc2luY2UgdGhpcyBpcyB6bGli ICovCi0JCXNwcmludGYoZm1vZGUsICJ3YiVkIiwgY29tcHJlc3Npb25fc3BlYy5sZXZlbCk7Ci0J CWlmIChmbiA+PSAwKQotCQkJQUgtPk9GID0gZ3pkb3BlbihkdXAoZm4pLCBmbW9kZSk7Ci0JCWVs c2UKLQkJCUFILT5PRiA9IGd6b3BlbihmaWxlbmFtZSwgZm1vZGUpOwotCQlBSC0+Z3pPdXQgPSAx OwotCX0KKwlpZiAoZm4gPj0gMCkKKwkJQUgtPk9GID0gY2Zkb3BlbihkdXAoZm4pLCBtb2RlLCBj b21wcmVzc2lvbl9zcGVjKTsKIAllbHNlCi0jZW5kaWYKLQl7CQkJCQkJCS8qIFVzZSBmb3BlbiAq LwotCQlpZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBlbmQpCi0JCXsKLQkJCWlmIChmbiA+PSAw KQotCQkJCUFILT5PRiA9IGZkb3BlbihkdXAoZm4pLCBQR19CSU5BUllfQSk7Ci0JCQllbHNlCi0J CQkJQUgtPk9GID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9BKTsKLQkJfQotCQllbHNlCi0J CXsKLQkJCWlmIChmbiA+PSAwKQotCQkJCUFILT5PRiA9IGZkb3BlbihkdXAoZm4pLCBQR19CSU5B UllfVyk7Ci0JCQllbHNlCi0JCQkJQUgtPk9GID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9X KTsKLQkJfQotCQlBSC0+Z3pPdXQgPSAwOwotCX0KKwkJQUgtPk9GID0gY2ZvcGVuKGZpbGVuYW1l LCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKIAogCWlmICghQUgtPk9GKQogCXsKQEAgLTE1NjUs MzMgKzE1MzgsMjQgQEAgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpm aWxlbmFtZSwKIAl9CiB9CiAKLXN0YXRpYyBPdXRwdXRDb250ZXh0CitzdGF0aWMgY2ZwICoKIFNh dmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgpCiB7Ci0JT3V0cHV0Q29udGV4dCBzYXY7Ci0KLQlz YXYuT0YgPSBBSC0+T0Y7Ci0Jc2F2Lmd6T3V0ID0gQUgtPmd6T3V0OwotCi0JcmV0dXJuIHNhdjsK KwlyZXR1cm4gKGNmcCAqKSBBSC0+T0Y7CiB9CiAKIHN0YXRpYyB2b2lkCi1SZXN0b3JlT3V0cHV0 KEFyY2hpdmVIYW5kbGUgKkFILCBPdXRwdXRDb250ZXh0IHNhdmVkQ29udGV4dCkKK1Jlc3RvcmVP dXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNmcCAqc2F2ZWRPdXRwdXQpCiB7CiAJaW50CQkJcmVz OwogCi0JZXJybm8gPSAwOwkJCQkJLyogaW4gY2FzZSBnemNsb3NlKCkgZG9lc24ndCBzZXQgaXQg Ki8KLQlpZiAoQUgtPmd6T3V0KQotCQlyZXMgPSBHWkNMT1NFKEFILT5PRik7Ci0JZWxzZQotCQly ZXMgPSBmY2xvc2UoQUgtPk9GKTsKKwllcnJubyA9IDA7CisJcmVzID0gY2ZjbG9zZShBSC0+T0Yp OwogCiAJaWYgKHJlcyAhPSAwKQogCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIG91dHB1dCBm aWxlOiAlbSIpOwogCi0JQUgtPmd6T3V0ID0gc2F2ZWRDb250ZXh0Lmd6T3V0OwotCUFILT5PRiA9 IHNhdmVkQ29udGV4dC5PRjsKKwlBSC0+T0YgPSBzYXZlZE91dHB1dDsKIH0KIAogCkBAIC0xNzE1 LDIyICsxNjc5LDE3IEBAIGFod3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6 ZV90IG5tZW1iLCBBcmNoaXZlSGFuZGxlICpBSCkKIAogCQlieXRlc193cml0dGVuID0gc2l6ZSAq IG5tZW1iOwogCX0KLQllbHNlIGlmIChBSC0+Z3pPdXQpCi0JCWJ5dGVzX3dyaXR0ZW4gPSBHWldS SVRFKHB0ciwgc2l6ZSwgbm1lbWIsIEFILT5PRik7CiAJZWxzZSBpZiAoQUgtPkN1c3RvbU91dFB0 cikKIAkJYnl0ZXNfd3JpdHRlbiA9IEFILT5DdXN0b21PdXRQdHIoQUgsIHB0ciwgc2l6ZSAqIG5t ZW1iKTsKIAorCS8qCisJICogSWYgd2UncmUgZG9pbmcgYSByZXN0b3JlLCBhbmQgaXQncyBkaXJl Y3QgdG8gREIsIGFuZCB3ZSdyZSBjb25uZWN0ZWQKKwkgKiB0aGVuIHNlbmQgaXQgdG8gdGhlIERC LgorCSAqLworCWVsc2UgaWYgKFJlc3RvcmluZ1RvREIoQUgpKQorCQlieXRlc193cml0dGVuID0g RXhlY3V0ZVNxbENvbW1hbmRCdWYoJkFILT5wdWJsaWMsIChjb25zdCBjaGFyICopIHB0ciwgc2l6 ZSAqIG5tZW1iKTsKIAllbHNlCi0JewotCQkvKgotCQkgKiBJZiB3ZSdyZSBkb2luZyBhIHJlc3Rv cmUsIGFuZCBpdCdzIGRpcmVjdCB0byBEQiwgYW5kIHdlJ3JlCi0JCSAqIGNvbm5lY3RlZCB0aGVu IHNlbmQgaXQgdG8gdGhlIERCLgotCQkgKi8KLQkJaWYgKFJlc3RvcmluZ1RvREIoQUgpKQotCQkJ Ynl0ZXNfd3JpdHRlbiA9IEV4ZWN1dGVTcWxDb21tYW5kQnVmKCZBSC0+cHVibGljLCAoY29uc3Qg Y2hhciAqKSBwdHIsIHNpemUgKiBubWVtYik7Ci0JCWVsc2UKLQkJCWJ5dGVzX3dyaXR0ZW4gPSBm d3JpdGUocHRyLCBzaXplLCBubWVtYiwgQUgtPk9GKSAqIHNpemU7Ci0JfQorCQlieXRlc193cml0 dGVuID0gY2Z3cml0ZShwdHIsIHNpemUgKiBubWVtYiwgQUgtPk9GKTsKIAogCWlmIChieXRlc193 cml0dGVuICE9IHNpemUgKiBubWVtYikKIAkJV1JJVEVfRVJST1JfRVhJVDsKQEAgLTIyMTksNiAr MjE3OCw3IEBAIF9hbGxvY0FIKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9y bWF0IGZtdCwKIAkJIFNldHVwV29ya2VyUHRyVHlwZSBzZXR1cFdvcmtlclB0cikKIHsKIAlBcmNo aXZlSGFuZGxlICpBSDsKKwlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIG91dF9jb21wcmVzc19z cGVjID0gezB9OwogCiAJcGdfbG9nX2RlYnVnKCJhbGxvY2F0aW5nIEFIIGZvciAlcywgZm9ybWF0 ICVkIiwKIAkJCQkgRmlsZVNwZWMgPyBGaWxlU3BlYyA6ICIoc3RkaW8pIiwgZm10KTsKQEAgLTIy NzIsOCArMjIzMiw4IEBAIF9hbGxvY0FIKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNo aXZlRm9ybWF0IGZtdCwKIAltZW1zZXQoJihBSC0+c3FscGFyc2UpLCAwLCBzaXplb2YoQUgtPnNx bHBhcnNlKSk7CiAKIAkvKiBPcGVuIHN0ZG91dCB3aXRoIG5vIGNvbXByZXNzaW9uIGZvciBBSCBv dXRwdXQgaGFuZGxlICovCi0JQUgtPmd6T3V0ID0gMDsKLQlBSC0+T0YgPSBzdGRvdXQ7CisJb3V0 X2NvbXByZXNzX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKKwlBSC0+T0Yg PSBjZmRvcGVuKGR1cChmaWxlbm8oc3Rkb3V0KSksIFBHX0JJTkFSWV9BLCBvdXRfY29tcHJlc3Nf c3BlYyk7CiAKIAkvKgogCSAqIE9uIFdpbmRvd3MsIHdlIG5lZWQgdG8gdXNlIGJpbmFyeSBtb2Rl IHRvIHJlYWQvd3JpdGUgbm9uLXRleHQgZmlsZXMsCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hp dmVyLmgKaW5kZXggZjcyNDQ2ZWQ1Yi4uNDcyNWU0OTc0NyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXBfYXJjaGl2ZXIuaApAQCAtMzIsMzAgKzMyLDYgQEAKIAogI2RlZmluZSBMT0JCVUZTSVpFIDE2 Mzg0CiAKLSNpZmRlZiBIQVZFX0xJQloKLSNpbmNsdWRlIDx6bGliLmg+Ci0jZGVmaW5lIEdaQ0xP U0UoZmgpIGd6Y2xvc2UoZmgpCi0jZGVmaW5lIEdaV1JJVEUocCwgcywgbiwgZmgpIGd6d3JpdGUo ZmgsIHAsIChuKSAqIChzKSkKLSNkZWZpbmUgR1pSRUFEKHAsIHMsIG4sIGZoKSBnenJlYWQoZmgs IHAsIChuKSAqIChzKSkKLSNkZWZpbmUgR1pFT0YoZmgpCWd6ZW9mKGZoKQotI2Vsc2UKLSNkZWZp bmUgR1pDTE9TRShmaCkgZmNsb3NlKGZoKQotI2RlZmluZSBHWldSSVRFKHAsIHMsIG4sIGZoKSAo ZndyaXRlKHAsIHMsIG4sIGZoKSAqIChzKSkKLSNkZWZpbmUgR1pSRUFEKHAsIHMsIG4sIGZoKSBm cmVhZChwLCBzLCBuLCBmaCkKLSNkZWZpbmUgR1pFT0YoZmgpCWZlb2YoZmgpCi0vKiB0aGlzIGlz IGp1c3QgdGhlIHJlZGVmaW5pdGlvbiBvZiBhIGxpYnogY29uc3RhbnQgKi8KLSNkZWZpbmUgWl9E RUZBVUxUX0NPTVBSRVNTSU9OICgtMSkKLQotdHlwZWRlZiBzdHJ1Y3QgX3pfc3RyZWFtCi17Ci0J dm9pZAkgICAqbmV4dF9pbjsKLQl2b2lkCSAgICpuZXh0X291dDsKLQlzaXplX3QJCWF2YWlsX2lu OwotCXNpemVfdAkJYXZhaWxfb3V0OwotfSB6X3N0cmVhbTsKLXR5cGVkZWYgel9zdHJlYW0gKnpf c3RyZWFtcDsKLSNlbmRpZgotCiAvKiBEYXRhIGJsb2NrIHR5cGVzICovCiAjZGVmaW5lIEJMS19E QVRBIDEKICNkZWZpbmUgQkxLX0JMT0JTIDMKQEAgLTMxOSw4ICsyOTUsNyBAQCBzdHJ1Y3QgX2Fy Y2hpdmVIYW5kbGUKIAogCWNoYXIJICAgKmZTcGVjOwkJCS8qIEFyY2hpdmUgRmlsZSBTcGVjICov CiAJRklMRQkgICAqRkg7CQkJCS8qIEdlbmVyYWwgcHVycG9zZSBmaWxlIGhhbmRsZSAqLwotCXZv aWQJICAgKk9GOwotCWludAkJCWd6T3V0OwkJCS8qIE91dHB1dCBmaWxlICovCisJdm9pZAkgICAq T0Y7CQkJCS8qIE91dHB1dCBmaWxlICovCiAKIAlzdHJ1Y3QgX3RvY0VudHJ5ICp0b2M7CQkvKiBI ZWFkZXIgb2YgY2lyY3VsYXIgbGlzdCBvZiBUT0MgZW50cmllcyAqLwogCWludAkJCXRvY0NvdW50 OwkJLyogTnVtYmVyIG9mIFRPQyBlbnRyaWVzICovCi0tIAoyLjM0LjEKCg== --b1_deAkqpRYEv9bfARgIiya5BWa42kQe417DwyygRq8 Content-Type: text/x-patch; name=v18-0002-Introduce-Compressor-API-in-pg_dump.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v18-0002-Introduce-Compressor-API-in-pg_dump.patch RnJvbSBiNmY3NDYzMjU5OWIzMGVlNTQ3OWI1NDhlNGE5MDY4MzllYjMwOGU3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IE1vbiwgMTkgRGVjIDIwMjIgMTU6MTY6NDUgKzAwMDAKU3ViamVjdDogW1BBVENIIHYx OCAyLzNdIEludHJvZHVjZSBDb21wcmVzc29yIEFQSSBpbiBwZ19kdW1wCgpUaGUgcHVycG9zZSBv ZiB0aGlzIEFQSSBpcyB0byBhbGxvdyBmb3IgZWFzaWVyIGFkZGl0aW9uIG9mIG5ldyBjb21wcmVz c2lvbgptZXRob2RzLiBDb21wcmVzc0ZpbGVIYW5kbGUgaXMgc3Vic3RpdHV0aW5nIHRoZSBjZnAq IGZhbWlseSBvZiBmdW5jdGlvbnMgdW5kZXIgYQpzdHJ1Y3Qgb2YgZnVuY3Rpb24gcG9pbnRlcnMg Zm9yIG9wZW5pbmcsIHdyaXRpbmcsIGV0Yy4gVGhlIGltcGxlbWVudG9yIG9mIGEgbmV3CmNvbXBy ZXNzaW9uIG1ldGhvZCBpcyBub3cgYWJsZSB0byAic2ltcGx5IiBqdXN0IGFkZCB0aG9zZSBkZWZp bml0aW9ucy4KCkN1c3RvbSBjb21wcmVzc2VkIGFyY2hpdmVzIG5vdyBuZWVkIHRvIHN0b3JlIHRo ZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gaW4gdGhlaXIKaGVhZGVyLiBUaGlzIHJlcXVpcmVzIGEg YnVtcCBpbiB0aGUgdmVyc2lvbiBudW1iZXIuIFRoZSBsZXZlbCBvZiBjb21wcmVzc2lvbgppcyBu byBsb25nZXIgc3RvcmVkIGluIHRoZSBkdW1wIGFzIGl0IGlzIGlycmVsZXZhbnQuCi0tLQogc3Jj L2Jpbi9wZ19kdW1wL01ha2VmaWxlICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BnX2R1 bXAvY29tcHJlc3NfZ3ppcC5jICAgICAgIHwgMzk4ICsrKysrKysrKysrCiBzcmMvYmluL3BnX2R1 bXAvY29tcHJlc3NfZ3ppcC5oICAgICAgIHwgIDIyICsKIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVz c19pby5jICAgICAgICAgfCA5MTggKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iaW4v cGdfZHVtcC9jb21wcmVzc19pby5oICAgICAgICAgfCAgNzEgKy0KIHNyYy9iaW4vcGdfZHVtcC9t ZXNvbi5idWlsZCAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5jICB8IDEwMiArLS0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIu aCAgfCAgIDUgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9tLmMgICAgfCAgMjMg Ky0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMgfCAgOTQgKy0tCiBzcmMv YmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCAgICAgIHwgIDEwICstCiBzcmMvdG9vbHMvcGdp bmNsdWRlL2NwbHVzcGx1c2NoZWNrICAgIHwgICAxICsKIHNyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0ICAgICAgfCAgIDIgKwogMTMgZmlsZXMgY2hhbmdlZCwgODQ2IGluc2VydGlvbnMo KyksIDgwMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAv Y29tcHJlc3NfZ3ppcC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19kdW1wL2NvbXBy ZXNzX2d6aXAuaAoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZSBiL3NyYy9i aW4vcGdfZHVtcC9NYWtlZmlsZQppbmRleCA5ZGM1YTc4NGRkLi4yOWVhYjAyZDM3IDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL01ha2Vm aWxlCkBAIC0yNCw2ICsyNCw3IEBAIExERkxBR1NfSU5URVJOQUwgKz0gLUwkKHRvcF9idWlsZGRp cikvc3JjL2ZlX3V0aWxzIC1scGdmZXV0aWxzICQobGlicHFfcGdwb3J0KQogCiBPQkpTID0gXAog CSQoV0lOMzJSRVMpIFwKKwljb21wcmVzc19nemlwLm8gXAogCWNvbXByZXNzX2lvLm8gXAogCWR1 bXB1dGlscy5vIFwKIAlwYXJhbGxlbC5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9j b21wcmVzc19nemlwLmMgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjk1ZTFkNmMyNzYKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5jCkBAIC0wLDAgKzEsMzk4IEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb21wcmVzc19nemlwLmMKKyAqCSBSb3V0aW5lcyBm b3IgYXJjaGl2ZXJzIHRvIHdyaXRlIGFuIHVuY29tcHJlc3NlZCBvciBjb21wcmVzc2VkIGRhdGEK KyAqCSBzdHJlYW0uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAq IElERU5USUZJQ0FUSU9OCisgKgkgICBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5jCisg KgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorI2lu Y2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiY29tcHJlc3NfZ3ppcC5oIgorI2luY2x1ZGUg InBnX2JhY2t1cF91dGlscy5oIgorCisjaWZkZWYgSEFWRV9MSUJaCisjaW5jbHVkZSAiemxpYi5o IgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvbXByZXNzb3IgQVBJCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordHlwZWRlZiBzdHJ1Y3QgR3ppcENvbXByZXNzb3JTdGF0 ZQoreworCXpfc3RyZWFtcAl6cDsKKworCXZvaWQJICAgKm91dGJ1ZjsKKwlzaXplX3QJCW91dHNp emU7Cit9IEd6aXBDb21wcmVzc29yU3RhdGU7CisKKy8qIFByaXZhdGUgcm91dGluZXMgdGhhdCBz dXBwb3J0IGd6aXAgY29tcHJlc3NlZCBkYXRhIEkvTyAqLworc3RhdGljIHZvaWQKK0RlZmxhdGVD b21wcmVzc29yR3ppcChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywgYm9v bCBmbHVzaCkKK3sKKwlHemlwQ29tcHJlc3NvclN0YXRlICpnemlwY3MgPSAoR3ppcENvbXByZXNz b3JTdGF0ZSAqKSBjcy0+cHJpdmF0ZV9kYXRhOworCXpfc3RyZWFtcAl6cCA9IGd6aXBjcy0+enA7 CisJdm9pZAkgICAqb3V0ID0gZ3ppcGNzLT5vdXRidWY7CisJaW50CQkJcmVzID0gWl9PSzsKKwor CXdoaWxlIChnemlwY3MtPnpwLT5hdmFpbF9pbiAhPSAwIHx8IGZsdXNoKQorCXsKKwkJcmVzID0g ZGVmbGF0ZSh6cCwgZmx1c2ggPyBaX0ZJTklTSCA6IFpfTk9fRkxVU0gpOworCQlpZiAocmVzID09 IFpfU1RSRUFNX0VSUk9SKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb21wcmVzcyBkYXRhOiAl cyIsIHpwLT5tc2cpOworCQlpZiAoKGZsdXNoICYmICh6cC0+YXZhaWxfb3V0IDwgZ3ppcGNzLT5v dXRzaXplKSkKKwkJCXx8ICh6cC0+YXZhaWxfb3V0ID09IDApCisJCQl8fCAoenAtPmF2YWlsX2lu ICE9IDApCisJCQkpCisJCXsKKwkJCS8qCisJCQkgKiBFeHRyYSBwYXJhbm9pYTogYXZvaWQgemVy by1sZW5ndGggY2h1bmtzLCBzaW5jZSBhIHplcm8gbGVuZ3RoCisJCQkgKiBjaHVuayBpcyB0aGUg RU9GIG1hcmtlciBpbiB0aGUgY3VzdG9tIGZvcm1hdC4gVGhpcyBzaG91bGQgbmV2ZXIKKwkJCSAq IGhhcHBlbiBidXQuLi4KKwkJCSAqLworCQkJaWYgKHpwLT5hdmFpbF9vdXQgPCBnemlwY3MtPm91 dHNpemUpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBBbnkgd3JpdGUgZnVuY3Rpb24gc2hvdWxkIGRv IGl0cyBvd24gZXJyb3IgY2hlY2tpbmcgYnV0IHRvCisJCQkJICogbWFrZSBzdXJlIHdlIGRvIGEg Y2hlY2sgaGVyZSBhcyB3ZWxsLi4uCisJCQkJICovCisJCQkJc2l6ZV90CQlsZW4gPSBnemlwY3Mt Pm91dHNpemUgLSB6cC0+YXZhaWxfb3V0OworCisJCQkJY3MtPndyaXRlRihBSCwgKGNoYXIgKikg b3V0LCBsZW4pOworCQkJfQorCQkJenAtPm5leHRfb3V0ID0gb3V0OworCQkJenAtPmF2YWlsX291 dCA9IGd6aXBjcy0+b3V0c2l6ZTsKKwkJfQorCisJCWlmIChyZXMgPT0gWl9TVFJFQU1fRU5EKQor CQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZAorRW5kQ29tcHJlc3Nvckd6aXAoQXJjaGl2 ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpCit7CisJR3ppcENvbXByZXNzb3JTdGF0 ZSAqZ3ppcGNzID0gKEd6aXBDb21wcmVzc29yU3RhdGUgKikgY3MtPnByaXZhdGVfZGF0YTsKKwl6 X3N0cmVhbXAJenA7CisKKwlpZiAoZ3ppcGNzLT56cCkKKwl7CisJCXpwID0gZ3ppcGNzLT56cDsK KwkJenAtPm5leHRfaW4gPSBOVUxMOworCQl6cC0+YXZhaWxfaW4gPSAwOworCisJCS8qIEZsdXNo IGFueSByZW1haW5pbmcgZGF0YSBmcm9tIHpsaWIgYnVmZmVyICovCisJCURlZmxhdGVDb21wcmVz c29yR3ppcChBSCwgY3MsIHRydWUpOworCisJCWlmIChkZWZsYXRlRW5kKHpwKSAhPSBaX09LKQor CQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBjb21wcmVzc2lvbiBzdHJlYW06ICVzIiwgenAt Pm1zZyk7CisKKwkJcGdfZnJlZShnemlwY3MtPm91dGJ1Zik7CisJCXBnX2ZyZWUoZ3ppcGNzLT56 cCk7CisJfQorCisJcGdfZnJlZShnemlwY3MpOworCWNzLT5wcml2YXRlX2RhdGEgPSBOVUxMOwor fQorCitzdGF0aWMgdm9pZAorV3JpdGVEYXRhVG9BcmNoaXZlR3ppcChBcmNoaXZlSGFuZGxlICpB SCwgQ29tcHJlc3NvclN0YXRlICpjcywKKwkJCQkJICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90 IGRMZW4pCit7CisJR3ppcENvbXByZXNzb3JTdGF0ZSAqZ3ppcGNzID0gKEd6aXBDb21wcmVzc29y U3RhdGUgKikgY3MtPnByaXZhdGVfZGF0YTsKKwl6X3N0cmVhbXAJenA7CisKKwlpZiAoIWd6aXBj cy0+enApCisJeworCQl6cCA9IGd6aXBjcy0+enAgPSAoel9zdHJlYW1wKSBwZ19tYWxsb2Moc2l6 ZW9mKHpfc3RyZWFtKSk7CisJCXpwLT56YWxsb2MgPSBaX05VTEw7CisJCXpwLT56ZnJlZSA9IFpf TlVMTDsKKwkJenAtPm9wYXF1ZSA9IFpfTlVMTDsKKworCQkvKgorCQkgKiBvdXRzaXplIGlzIHRo ZSBidWZmZXIgc2l6ZSB3ZSB0ZWxsIHpsaWIgaXQgY2FuIG91dHB1dCB0by4gIFdlCisJCSAqIGFj dHVhbGx5IGFsbG9jYXRlIG9uZSBleHRyYSBieXRlIGJlY2F1c2Ugc29tZSByb3V0aW5lcyB3YW50 IHRvCisJCSAqIGFwcGVuZCBhIHRyYWlsaW5nIHplcm8gYnl0ZSB0byB0aGUgemxpYiBvdXRwdXQu CisJCSAqLworCQlnemlwY3MtPm91dGJ1ZiA9IHBnX21hbGxvYyhaTElCX09VVF9TSVpFICsgMSk7 CisJCWd6aXBjcy0+b3V0c2l6ZSA9IFpMSUJfT1VUX1NJWkU7CisKKwkJaWYgKGRlZmxhdGVJbml0 KHpwLCBjcy0+Y29tcHJlc3Npb25fc3BlYy5sZXZlbCkgIT0gWl9PSykKKwkJCXBnX2ZhdGFsKCJj b3VsZCBub3QgaW5pdGlhbGl6ZSBjb21wcmVzc2lvbiBsaWJyYXJ5OiAlcyIsIHpwLT5tc2cpOwor CisJCS8qIEp1c3QgYmUgcGFyYW5vaWQgLSBtYXliZSBFbmQgaXMgY2FsbGVkIGFmdGVyIFN0YXJ0 LCB3aXRoIG5vIFdyaXRlICovCisJCXpwLT5uZXh0X291dCA9IGd6aXBjcy0+b3V0YnVmOworCQl6 cC0+YXZhaWxfb3V0ID0gZ3ppcGNzLT5vdXRzaXplOworCX0KKworCWd6aXBjcy0+enAtPm5leHRf aW4gPSAodm9pZCAqKSB1bmNvbnN0aWZ5KHZvaWQgKiwgZGF0YSk7CisJZ3ppcGNzLT56cC0+YXZh aWxfaW4gPSBkTGVuOworCURlZmxhdGVDb21wcmVzc29yR3ppcChBSCwgY3MsIGZhbHNlKTsKK30K Kworc3RhdGljIHZvaWQKK1JlYWREYXRhRnJvbUFyY2hpdmVHemlwKEFyY2hpdmVIYW5kbGUgKkFI LCBDb21wcmVzc29yU3RhdGUgKmNzKQoreworCXpfc3RyZWFtcAl6cDsKKwljaGFyCSAgICpvdXQ7 CisJaW50CQkJcmVzID0gWl9PSzsKKwlzaXplX3QJCWNudDsKKwljaGFyCSAgICpidWY7CisJc2l6 ZV90CQlidWZsZW47CisKKwl6cCA9ICh6X3N0cmVhbXApIHBnX21hbGxvYyhzaXplb2Yoel9zdHJl YW0pKTsKKwl6cC0+emFsbG9jID0gWl9OVUxMOworCXpwLT56ZnJlZSA9IFpfTlVMTDsKKwl6cC0+ b3BhcXVlID0gWl9OVUxMOworCisJYnVmID0gcGdfbWFsbG9jKFpMSUJfSU5fU0laRSk7CisJYnVm bGVuID0gWkxJQl9JTl9TSVpFOworCisJb3V0ID0gcGdfbWFsbG9jKFpMSUJfT1VUX1NJWkUgKyAx KTsKKworCWlmIChpbmZsYXRlSW5pdCh6cCkgIT0gWl9PSykKKwkJcGdfZmF0YWwoImNvdWxkIG5v dCBpbml0aWFsaXplIGNvbXByZXNzaW9uIGxpYnJhcnk6ICVzIiwKKwkJCQkgenAtPm1zZyk7CisK KwkvKiBubyBtaW5pbWFsIGNodW5rIHNpemUgZm9yIHpsaWIgKi8KKwl3aGlsZSAoKGNudCA9IGNz LT5yZWFkRihBSCwgJmJ1ZiwgJmJ1ZmxlbikpKQorCXsKKwkJenAtPm5leHRfaW4gPSAodm9pZCAq KSBidWY7CisJCXpwLT5hdmFpbF9pbiA9IGNudDsKKworCQl3aGlsZSAoenAtPmF2YWlsX2luID4g MCkKKwkJeworCQkJenAtPm5leHRfb3V0ID0gKHZvaWQgKikgb3V0OworCQkJenAtPmF2YWlsX291 dCA9IFpMSUJfT1VUX1NJWkU7CisKKwkJCXJlcyA9IGluZmxhdGUoenAsIDApOworCQkJaWYgKHJl cyAhPSBaX09LICYmIHJlcyAhPSBaX1NUUkVBTV9FTkQpCisJCQkJcGdfZmF0YWwoImNvdWxkIG5v dCB1bmNvbXByZXNzIGRhdGE6ICVzIiwgenAtPm1zZyk7CisKKwkJCW91dFtaTElCX09VVF9TSVpF IC0genAtPmF2YWlsX291dF0gPSAnXDAnOworCQkJYWh3cml0ZShvdXQsIDEsIFpMSUJfT1VUX1NJ WkUgLSB6cC0+YXZhaWxfb3V0LCBBSCk7CisJCX0KKwl9CisKKwl6cC0+bmV4dF9pbiA9IE5VTEw7 CisJenAtPmF2YWlsX2luID0gMDsKKwl3aGlsZSAocmVzICE9IFpfU1RSRUFNX0VORCkKKwl7CisJ CXpwLT5uZXh0X291dCA9ICh2b2lkICopIG91dDsKKwkJenAtPmF2YWlsX291dCA9IFpMSUJfT1VU X1NJWkU7CisJCXJlcyA9IGluZmxhdGUoenAsIDApOworCQlpZiAocmVzICE9IFpfT0sgJiYgcmVz ICE9IFpfU1RSRUFNX0VORCkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgdW5jb21wcmVzcyBkYXRh OiAlcyIsIHpwLT5tc2cpOworCisJCW91dFtaTElCX09VVF9TSVpFIC0genAtPmF2YWlsX291dF0g PSAnXDAnOworCQlhaHdyaXRlKG91dCwgMSwgWkxJQl9PVVRfU0laRSAtIHpwLT5hdmFpbF9vdXQs IEFIKTsKKwl9CisKKwlpZiAoaW5mbGF0ZUVuZCh6cCkgIT0gWl9PSykKKwkJcGdfZmF0YWwoImNv dWxkIG5vdCBjbG9zZSBjb21wcmVzc2lvbiBsaWJyYXJ5OiAlcyIsIHpwLT5tc2cpOworCisJZnJl ZShidWYpOworCWZyZWUob3V0KTsKKwlmcmVlKHpwKTsKK30KKworLyogUHVibGljIHJvdXRpbmVz IHRoYXQgc3VwcG9ydCBnemlwIGNvbXByZXNzZWQgZGF0YSBJL08gKi8KK3ZvaWQKK0luaXRDb21w cmVzc29yR3ppcChDb21wcmVzc29yU3RhdGUgKmNzLCBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZp Y2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJR3ppcENvbXByZXNzb3JTdGF0ZSAqZ3ppcGNz OworCisJY3MtPnJlYWREYXRhID0gUmVhZERhdGFGcm9tQXJjaGl2ZUd6aXA7CisJY3MtPndyaXRl RGF0YSA9IFdyaXRlRGF0YVRvQXJjaGl2ZUd6aXA7CisJY3MtPmVuZCA9IEVuZENvbXByZXNzb3JH emlwOworCisJY3MtPmNvbXByZXNzaW9uX3NwZWMgPSBjb21wcmVzc2lvbl9zcGVjOworCisJZ3pp cGNzID0gKEd6aXBDb21wcmVzc29yU3RhdGUgKikgcGdfbWFsbG9jMChzaXplb2YoR3ppcENvbXBy ZXNzb3JTdGF0ZSkpOworCisJY3MtPnByaXZhdGVfZGF0YSA9IGd6aXBjczsKK30KKworCisvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvbXByZXNzIEZpbGUgQVBJCisgKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworCitzdGF0aWMgc2l6ZV90CitHemlwX3JlYWQodm9pZCAqcHRyLCBz aXplX3Qgc2l6ZSwgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJZ3pGaWxlCQlnemZwID0g KGd6RmlsZSkgQ0ZILT5wcml2YXRlX2RhdGE7CisJc2l6ZV90CQlyZXQ7CisKKwlyZXQgPSBnenJl YWQoZ3pmcCwgcHRyLCBzaXplKTsKKwlpZiAocmV0ICE9IHNpemUgJiYgIWd6ZW9mKGd6ZnApKQor CXsKKwkJaW50CQkJZXJybnVtOworCQljb25zdCBjaGFyICplcnJtc2cgPSBnemVycm9yKGd6ZnAs ICZlcnJudW0pOworCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6 ICVzIiwKKwkJCQkgZXJybnVtID09IFpfRVJSTk8gPyBzdHJlcnJvcihlcnJubykgOiBlcnJtc2cp OworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzaXplX3QKK0d6aXBfd3JpdGUoY29u c3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJ Z3pGaWxlCQlnemZwID0gKGd6RmlsZSkgQ0ZILT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gZ3p3 cml0ZShnemZwLCBwdHIsIHNpemUpOworfQorCitzdGF0aWMgaW50CitHemlwX2dldGMoQ29tcHJl c3NGaWxlSGFuZGxlICpDRkgpCit7CisJZ3pGaWxlCQlnemZwID0gKGd6RmlsZSkgQ0ZILT5wcml2 YXRlX2RhdGE7CisJaW50CQkJcmV0OworCisJZXJybm8gPSAwOworCXJldCA9IGd6Z2V0YyhnemZw KTsKKwlpZiAocmV0ID09IEVPRikKKwl7CisJCWlmICghZ3plb2YoZ3pmcCkpCisJCQlwZ19mYXRh bCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7 CisJCWVsc2UKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6IGVu ZCBvZiBmaWxlIik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNoYXIgKgorR3pp cF9nZXRzKGNoYXIgKnB0ciwgaW50IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQorewor CWd6RmlsZQkJZ3pmcCA9IChnekZpbGUpIENGSC0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIGd6 Z2V0cyhnemZwLCBwdHIsIHNpemUpOworfQorCitzdGF0aWMgaW50CitHemlwX2Nsb3NlKENvbXBy ZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCWd6RmlsZQkJZ3pmcCA9IChnekZpbGUpIENGSC0+cHJp dmF0ZV9kYXRhOworCWludAkJCXNhdmVfZXJybm87CisJaW50CQkJcmV0OworCisJQ0ZILT5wcml2 YXRlX2RhdGEgPSBOVUxMOworCisJcmV0ID0gZ3pjbG9zZShnemZwKTsKKworCXNhdmVfZXJybm8g PSBlcnJubzsKKwllcnJubyA9IHNhdmVfZXJybm87CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgaW50CitHemlwX2VvZihDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlnekZpbGUJCWd6 ZnAgPSAoZ3pGaWxlKSBDRkgtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiBnemVvZihnemZwKTsK K30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorR3ppcF9nZXRfZXJyb3IoQ29tcHJlc3NGaWxlSGFu ZGxlICpDRkgpCit7CisJZ3pGaWxlCQlnemZwID0gKGd6RmlsZSkgQ0ZILT5wcml2YXRlX2RhdGE7 CisJY29uc3QgY2hhciAqZXJybXNnOworCWludAkJCWVycm51bTsKKworCWVycm1zZyA9IGd6ZXJy b3IoZ3pmcCwgJmVycm51bSk7CisJaWYgKGVycm51bSA9PSBaX0VSUk5PKQorCQllcnJtc2cgPSBz dHJlcnJvcihlcnJubyk7CisKKwlyZXR1cm4gZXJybXNnOworfQorCitzdGF0aWMgaW50CitHemlw X29wZW4oY29uc3QgY2hhciAqcGF0aCwgaW50IGZkLCBjb25zdCBjaGFyICptb2RlLCBDb21wcmVz c0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlnekZpbGUJCWd6ZnA7CisJY2hhcgkJbW9kZV9jb21wcmVz c2lvblszMl07CisKKwlpZiAoQ0ZILT5jb21wcmVzc2lvbl9zcGVjLmxldmVsICE9IFpfREVGQVVM VF9DT01QUkVTU0lPTikKKwl7CisJCS8qCisJCSAqIHVzZXIgaGFzIHNwZWNpZmllZCBhIGNvbXBy ZXNzaW9uIGxldmVsLCBzbyB0ZWxsIHpsaWIgdG8gdXNlIGl0CisJCSAqLworCQlzbnByaW50Ziht b2RlX2NvbXByZXNzaW9uLCBzaXplb2YobW9kZV9jb21wcmVzc2lvbiksICIlcyVkIiwKKwkJCQkg bW9kZSwgQ0ZILT5jb21wcmVzc2lvbl9zcGVjLmxldmVsKTsKKwl9CisJZWxzZQorCQlzdHJjcHko bW9kZV9jb21wcmVzc2lvbiwgbW9kZSk7CisKKwlpZiAoZmQgPj0gMCkKKwkJZ3pmcCA9IGd6ZG9w ZW4oZHVwKGZkKSwgbW9kZV9jb21wcmVzc2lvbik7CisJZWxzZQorCQlnemZwID0gZ3pvcGVuKHBh dGgsIG1vZGVfY29tcHJlc3Npb24pOworCisJaWYgKGd6ZnAgPT0gTlVMTCkKKwkJcmV0dXJuIDE7 CisKKwlDRkgtPnByaXZhdGVfZGF0YSA9IGd6ZnA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludAorR3ppcF9vcGVuX3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUs IENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCWNoYXIJICAgKmZuYW1lOworCWludAkJCXJl dDsKKwlpbnQJCQlzYXZlX2Vycm5vOworCisJZm5hbWUgPSBwc3ByaW50ZigiJXMuZ3oiLCBwYXRo KTsKKwlyZXQgPSBDRkgtPm9wZW5fZnVuYyhmbmFtZSwgLTEsIG1vZGUsIENGSCk7CisKKwlzYXZl X2Vycm5vID0gZXJybm87CisJcGdfZnJlZShmbmFtZSk7CisJZXJybm8gPSBzYXZlX2Vycm5vOwor CisJcmV0dXJuIHJldDsKK30KKwordm9pZAorSW5pdENvbXByZXNzR3ppcChDb21wcmVzc0ZpbGVI YW5kbGUgKkNGSCwgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9z cGVjKQoreworCUNGSC0+b3Blbl9mdW5jID0gR3ppcF9vcGVuOworCUNGSC0+b3Blbl93cml0ZV9m dW5jID0gR3ppcF9vcGVuX3dyaXRlOworCUNGSC0+cmVhZF9mdW5jID0gR3ppcF9yZWFkOworCUNG SC0+d3JpdGVfZnVuYyA9IEd6aXBfd3JpdGU7CisJQ0ZILT5nZXRzX2Z1bmMgPSBHemlwX2dldHM7 CisJQ0ZILT5nZXRjX2Z1bmMgPSBHemlwX2dldGM7CisJQ0ZILT5jbG9zZV9mdW5jID0gR3ppcF9j bG9zZTsKKwlDRkgtPmVvZl9mdW5jID0gR3ppcF9lb2Y7CisJQ0ZILT5nZXRfZXJyb3JfZnVuYyA9 IEd6aXBfZ2V0X2Vycm9yOworCisJQ0ZILT5jb21wcmVzc2lvbl9zcGVjID0gY29tcHJlc3Npb25f c3BlYzsKKworCUNGSC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKK30KKyNlbHNlCQkJCQkJCS8qIEhB VkVfTElCWiAqLwordm9pZAorSW5pdENvbXByZXNzb3JHemlwKENvbXByZXNzb3JTdGF0ZSAqY3Ms IGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKK3sKKwlw Z19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMi LCAiZ3ppcCIpOworfQorCit2b2lkCitJbml0Q29tcHJlc3NHemlwKENvbXByZXNzRmlsZUhhbmRs ZSAqQ0ZILCBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMp Cit7CisJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3 aXRoICVzIiwgImd6aXAiKTsKK30KKyNlbmRpZgkJCQkJCQkvKiBIQVZFX0xJQlogKi8KZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmggYi9zcmMvYmluL3BnX2R1bXAv Y29tcHJlc3NfZ3ppcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjZk ZmQwZWIwNGQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3pp cC5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGNvbXByZXNz X2d6aXAuaAorICoJIEludGVyZmFjZSB0byBjb21wcmVzc19pby5jIHJvdXRpbmVzCisgKgorICog UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2Yg dGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkg ICBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5oCisgKgorICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKyNpZm5kZWYgX0NPTVBSRVNTX0daSVBfSF8KKyNkZWZpbmUgX0NPTVBSRVNTX0daSVBf SF8KKworI2luY2x1ZGUgImNvbXByZXNzX2lvLmgiCisKK2V4dGVybiB2b2lkIEluaXRDb21wcmVz c29yR3ppcChDb21wcmVzc29yU3RhdGUgKmNzLCBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0 aW9uIGNvbXByZXNzaW9uX3NwZWMpOworZXh0ZXJuIHZvaWQgSW5pdENvbXByZXNzR3ppcChDb21w cmVzc0ZpbGVIYW5kbGUgKkNGSCwgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21w cmVzc2lvbl9zcGVjKTsKKworI2VuZGlmCQkJCQkJCS8qIF9DT01QUkVTU19HWklQX0hfICovCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYyBiL3NyYy9iaW4vcGdfZHVt cC9jb21wcmVzc19pby5jCmluZGV4IGJiYWMxNTQ2NjkuLjRmZTViMjYyYWQgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21w cmVzc19pby5jCkBAIC05LDQyICs5LDQ0IEBACiAgKgogICogVGhpcyBmaWxlIGluY2x1ZGVzIHR3 byBBUElzIGZvciBkZWFsaW5nIHdpdGggY29tcHJlc3NlZCBkYXRhLiBUaGUgZmlyc3QKICAqIHBy b3ZpZGVzIG1vcmUgZmxleGliaWxpdHksIHVzaW5nIGNhbGxiYWNrcyB0byByZWFkL3dyaXRlIGRh dGEgZnJvbSB0aGUKLSAqIHVuZGVybHlpbmcgc3RyZWFtLiBUaGUgc2Vjb25kIEFQSSBpcyBhIHdy YXBwZXIgYXJvdW5kIGZvcGVuL2d6b3BlbiBhbmQKKyAqIHVuZGVybHlpbmcgc3RyZWFtLiBUaGUg c2Vjb25kIEFQSSBpcyBhIHdyYXBwZXIgYXJvdW5kIGZvcGVuIGFuZAogICogZnJpZW5kcywgcHJv dmlkaW5nIGFuIGludGVyZmFjZSBzaW1pbGFyIHRvIHRob3NlLCBidXQgYWJzdHJhY3RzIGF3YXkK LSAqIHRoZSBwb3NzaWJsZSBjb21wcmVzc2lvbi4gQm90aCBBUElzIHVzZSBsaWJ6IGZvciB0aGUg Y29tcHJlc3Npb24sIGJ1dAotICogdGhlIHNlY29uZCBBUEkgdXNlcyBnemlwIGhlYWRlcnMsIHNv IHRoZSByZXN1bHRpbmcgZmlsZXMgY2FuIGJlIGVhc2lseQotICogbWFuaXB1bGF0ZWQgd2l0aCB0 aGUgZ3ppcCB1dGlsaXR5LgorICogdGhlIHBvc3NpYmxlIGNvbXByZXNzaW9uLiBUaGUgc2Vjb25k IEFQSSBpcyBhaW1lZCBmb3IgdGhlIHJlc3VsdGluZworICogZmlsZXMgY2FuIGJlIGVhc2lseSBt YW5pcHVsYXRlZCB3aXRoIGFuIGV4dGVybmFsIGNvbXByZXNzaW9uIHV0aWxpdHkKKyAqIHByb2dy YW0uCiAgKgogICogQ29tcHJlc3NvciBBUEkKICAqIC0tLS0tLS0tLS0tLS0tCiAgKgogICoJVGhl IGludGVyZmFjZSBmb3Igd3JpdGluZyB0byBhbiBhcmNoaXZlIGNvbnNpc3RzIG9mIHRocmVlIGZ1 bmN0aW9uczoKLSAqCUFsbG9jYXRlQ29tcHJlc3NvciwgV3JpdGVEYXRhVG9BcmNoaXZlIGFuZCBF bmRDb21wcmVzc29yLiBGaXJzdCB5b3UgY2FsbAotICoJQWxsb2NhdGVDb21wcmVzc29yLCB0aGVu IHdyaXRlIGFsbCB0aGUgZGF0YSBieSBjYWxsaW5nIFdyaXRlRGF0YVRvQXJjaGl2ZQotICoJYXMg bWFueSB0aW1lcyBhcyBuZWVkZWQsIGFuZCBmaW5hbGx5IEVuZENvbXByZXNzb3IuIFdyaXRlRGF0 YVRvQXJjaGl2ZQotICoJYW5kIEVuZENvbXByZXNzb3Igd2lsbCBjYWxsIHRoZSBXcml0ZUZ1bmMg dGhhdCB3YXMgcHJvdmlkZWQgdG8KLSAqCUFsbG9jYXRlQ29tcHJlc3NvciBmb3IgZWFjaCBjaHVu ayBvZiBjb21wcmVzc2VkIGRhdGEuCisgKglBbGxvY2F0ZUNvbXByZXNzb3IsIHdyaXRlRGF0YSwg YW5kIEVuZENvbXByZXNzb3IuIEZpcnN0IHlvdSBjYWxsCisgKglBbGxvY2F0ZUNvbXByZXNzb3Is IHRoZW4gd3JpdGUgYWxsIHRoZSBkYXRhIGJ5IGNhbGxpbmcgd3JpdGVEYXRhIGFzIG1hbnkKKyAq CXRpbWVzIGFzIG5lZWRlZCwgYW5kIGZpbmFsbHkgRW5kQ29tcHJlc3Nvci4gd3JpdGVEYXRhIHdp bGwgY2FsbCB0aGUKKyAqCVdyaXRlRnVuYyB0aGF0IHdhcyBwcm92aWRlZCB0byBBbGxvY2F0ZUNv bXByZXNzb3IgZm9yIGVhY2ggY2h1bmsgb2YKKyAqCWNvbXByZXNzZWQgZGF0YS4KICAqCi0gKglU aGUgaW50ZXJmYWNlIGZvciByZWFkaW5nIGFuIGFyY2hpdmUgY29uc2lzdHMgb2YganVzdCBvbmUg ZnVuY3Rpb246Ci0gKglSZWFkRGF0YUZyb21BcmNoaXZlLiBSZWFkRGF0YUZyb21BcmNoaXZlIHJl YWRzIHRoZSB3aG9sZSBjb21wcmVzc2VkIGlucHV0Ci0gKglzdHJlYW0sIGJ5IHJlcGVhdGVkbHkg Y2FsbGluZyB0aGUgZ2l2ZW4gUmVhZEZ1bmMuIFJlYWRGdW5jIHJldHVybnMgdGhlCi0gKgljb21w cmVzc2VkIGRhdGEgY2h1bmsgYXQgYSB0aW1lLCBhbmQgUmVhZERhdGFGcm9tQXJjaGl2ZSBkZWNv bXByZXNzZXMgaXQKLSAqCWFuZCBwYXNzZXMgdGhlIGRlY29tcHJlc3NlZCBkYXRhIHRvIGFod3Jp dGUoKSwgdW50aWwgUmVhZEZ1bmMgcmV0dXJucyAwCi0gKgl0byBzaWduYWwgRU9GLgotICoKLSAq CVRoZSBpbnRlcmZhY2UgaXMgdGhlIHNhbWUgZm9yIGNvbXByZXNzZWQgYW5kIHVuY29tcHJlc3Nl ZCBzdHJlYW1zLgorICoJVGhlIGludGVyZmFjZSBmb3IgcmVhZGluZyBhbiBhcmNoaXZlIGNvbnNp c3RzIG9mIHRoZSBzYW1lIHRocmVlIGZ1bmN0aW9uczoKKyAqCUFsbG9jYXRlQ29tcHJlc3Nvciwg cmVhZERhdGEsIGFuZCBFbmRDb21wcmVzc29yLiBGaXJzdCB5b3UgY2FsbAorICoJQWxsb2NhdGVD b21wcmVzc29yLCB0aGVuIHJlYWQgYWxsIHRoZSBkYXRhIGJ5IGNhbGxpbmcgcmVhZERhdGEgdG8g cmVhZCB0aGUKKyAqCXdob2xlIGNvbXByZXNzZWQgc3RyZWFtIHdoaWNoIHJlcGVhdGVkbHkgY2Fs bHMgdGhlIGdpdmVuIFJlYWRGdW5jLiBSZWFkRnVuYworICoJcmV0dXJucyB0aGUgY29tcHJlc3Nl ZCBkYXRhIGNodW5rIGF0IGEgdGltZSwgYW5kIHJlYWREYXRhICBkZWNvbXByZXNzZXMgaXQKKyAq CWFuZCBwYXNzZXMgdGhlIGRlY29tcHJlc3NlZCBkYXRhIHRvIGFod3JpdGUoKSwgdW50aWwgUmVh ZEZ1bmMgcmV0dXJucyAwIHRvCisgKglzaWduYWwgRU9GLiBUaGUgaW50ZXJmYWNlIGlzIHRoZSBz YW1lIGZvciBjb21wcmVzc2VkIGFuZCB1bmNvbXByZXNzZWQKKyAqCXN0cmVhbXMuCiAgKgogICog Q29tcHJlc3NlZCBzdHJlYW0gQVBJCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICoJ VGhlIGNvbXByZXNzZWQgc3RyZWFtIEFQSSBpcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBDIHN0YW5k YXJkIGZvcGVuKCkgYW5kCi0gKglsaWJ6J3MgZ3pvcGVuKCkgQVBJcy4gSXQgYWxsb3dzIHlvdSB0 byB1c2UgdGhlIHNhbWUgZnVuY3Rpb25zIGZvcgotICoJY29tcHJlc3NlZCBhbmQgdW5jb21wcmVz c2VkIHN0cmVhbXMuIGNmb3Blbl9yZWFkKCkgZmlyc3QgdHJpZXMgdG8gb3BlbgotICoJdGhlIGZp bGUgd2l0aCBnaXZlbiBuYW1lLCBhbmQgaWYgaXQgZmFpbHMsIGl0IHRyaWVzIHRvIG9wZW4gdGhl IHNhbWUKLSAqCWZpbGUgd2l0aCB0aGUgLmd6IHN1ZmZpeC4gY2ZvcGVuX3dyaXRlKCkgb3BlbnMg YSBmaWxlIGZvciB3cml0aW5nLCBhbgotICoJZXh0cmEgYXJndW1lbnQgc3BlY2lmaWVzIGlmIHRo ZSBmaWxlIHNob3VsZCBiZSBjb21wcmVzc2VkLCBhbmQgYWRkcyB0aGUKLSAqCS5neiBzdWZmaXgg dG8gdGhlIGZpbGVuYW1lIGlmIHNvLiBUaGlzIGFsbG93cyB5b3UgdG8gZWFzaWx5IGhhbmRsZSBi b3RoCi0gKgljb21wcmVzc2VkIGFuZCB1bmNvbXByZXNzZWQgZmlsZXMuCisgKglsaWJ6J3MgZ3pv cGVuKCkgQVBJcyBhbmQgY3VzdG9tIExaNCBjYWxscyB3aGljaCBwcm92aWRlIHNpbWlsYXIKKyAq CWZ1bmN0aW9uYWxpdHkuIEl0IGFsbG93cyB5b3UgdG8gdXNlIHRoZSBzYW1lIGZ1bmN0aW9ucyBm b3IgY29tcHJlc3NlZCBhbmQKKyAqCXVuY29tcHJlc3NlZCBzdHJlYW1zLiBjZm9wZW5fcmVhZCgp IGZpcnN0IHRyaWVzIHRvIG9wZW4gdGhlIGZpbGUgd2l0aCBnaXZlbgorICoJbmFtZSwgYW5kIGlm IGl0IGZhaWxzLCBpdCB0cmllcyB0byBvcGVuIHRoZSBzYW1lIGZpbGUgd2l0aCB0aGUgLmd6IHN1 ZmZpeCwKKyAqCWZhaWxpbmcgdGhhdCBpdCB0cmllcyB0byBvcGVuIHRoZSBzYW1lIGZpbGUgd2l0 aCB0aGUgLmx6NCBzdWZmaXguCisgKgljZm9wZW5fd3JpdGUoKSBvcGVucyBhIGZpbGUgZm9yIHdy aXRpbmcsIGFuIGV4dHJhIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUKKyAqCW1ldGhvZCB0byB1c2Ug c2hvdWxkIHRoZSBmaWxlIGJlIGNvbXByZXNzZWQsIGFuZCBhZGRzIHRoZSBhcHByb3ByaWF0ZQor ICoJc3VmZml4LCAuZ3ogb3IgLmx6NCwgdG8gdGhlIGZpbGVuYW1lIGlmIHNvLiBUaGlzIGFsbG93 cyB5b3UgdG8gZWFzaWx5IGhhbmRsZQorICoJYm90aCBjb21wcmVzc2VkIGFuZCB1bmNvbXByZXNz ZWQgZmlsZXMuCiAgKgogICogSURFTlRJRklDQVRJT04KICAqCSAgIHNyYy9iaW4vcGdfZHVtcC9j b21wcmVzc19pby5jCkBAIC01Myw3ICs1NSwxMSBAQAogICovCiAjaW5jbHVkZSAicG9zdGdyZXNf ZmUuaCIKIAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKICNp bmNsdWRlICJjb21wcmVzc19pby5oIgorI2luY2x1ZGUgImNvbXByZXNzX2d6aXAuaCIKICNpbmNs dWRlICJwZ19iYWNrdXBfdXRpbHMuaCIKIAogI2lmZGVmIEhBVkVfTElCWgpAQCAtNjUsODUgKzcx LDcwIEBACiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCi0vKiB0eXBlZGVmIGFwcGVh cnMgaW4gY29tcHJlc3NfaW8uaCAqLwotc3RydWN0IENvbXByZXNzb3JTdGF0ZQorLyogUHJpdmF0 ZSByb3V0aW5lcyB0aGF0IHN1cHBvcnQgdW5jb21wcmVzc2VkIGRhdGEgSS9PICovCitzdGF0aWMg dm9pZAorUmVhZERhdGFGcm9tQXJjaGl2ZU5vbmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNz b3JTdGF0ZSAqY3MpCiB7Ci0JcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9z cGVjOwotCVdyaXRlRnVuYwl3cml0ZUY7CisJc2l6ZV90CQljbnQ7CisJY2hhcgkgICAqYnVmOwor CXNpemVfdAkJYnVmbGVuOwogCi0jaWZkZWYgSEFWRV9MSUJaCi0Jel9zdHJlYW1wCXpwOwotCWNo YXIJICAgKnpsaWJPdXQ7Ci0Jc2l6ZV90CQl6bGliT3V0U2l6ZTsKLSNlbmRpZgotfTsKKwlidWYg PSBwZ19tYWxsb2MoWkxJQl9PVVRfU0laRSk7CisJYnVmbGVuID0gWkxJQl9PVVRfU0laRTsKKwor CXdoaWxlICgoY250ID0gY3MtPnJlYWRGKEFILCAmYnVmLCAmYnVmbGVuKSkpCisJeworCQlhaHdy aXRlKGJ1ZiwgMSwgY250LCBBSCk7CisJfQorCisJZnJlZShidWYpOworfQogCi0vKiBSb3V0aW5l cyB0aGF0IHN1cHBvcnQgemxpYiBjb21wcmVzc2VkIGRhdGEgSS9PICovCi0jaWZkZWYgSEFWRV9M SUJaCi1zdGF0aWMgdm9pZCBJbml0Q29tcHJlc3NvclpsaWIoQ29tcHJlc3NvclN0YXRlICpjcywg aW50IGxldmVsKTsKLXN0YXRpYyB2b2lkIERlZmxhdGVDb21wcmVzc29yWmxpYihBcmNoaXZlSGFu ZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJCQkJICBib29sIGZsdXNoKTsKLXN0 YXRpYyB2b2lkIFJlYWREYXRhRnJvbUFyY2hpdmVabGliKEFyY2hpdmVIYW5kbGUgKkFILCBSZWFk RnVuYyByZWFkRik7Ci1zdGF0aWMgdm9pZCBXcml0ZURhdGFUb0FyY2hpdmVabGliKEFyY2hpdmVI YW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAotCQkJCQkJCQkgICBjb25zdCBjaGFyICpk YXRhLCBzaXplX3QgZExlbik7Ci1zdGF0aWMgdm9pZCBFbmRDb21wcmVzc29yWmxpYihBcmNoaXZl SGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcyk7Ci0jZW5kaWYKIAotLyogUm91dGluZXMg dGhhdCBzdXBwb3J0IHVuY29tcHJlc3NlZCBkYXRhIEkvTyAqLwotc3RhdGljIHZvaWQgUmVhZERh dGFGcm9tQXJjaGl2ZU5vbmUoQXJjaGl2ZUhhbmRsZSAqQUgsIFJlYWRGdW5jIHJlYWRGKTsKLXN0 YXRpYyB2b2lkIFdyaXRlRGF0YVRvQXJjaGl2ZU5vbmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXBy ZXNzb3JTdGF0ZSAqY3MsCi0JCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBkTGVu KTsKK3N0YXRpYyB2b2lkCitXcml0ZURhdGFUb0FyY2hpdmVOb25lKEFyY2hpdmVIYW5kbGUgKkFI LCBDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJCQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qg ZExlbikKK3sKKwljcy0+d3JpdGVGKEFILCBkYXRhLCBkTGVuKTsKK30KKworc3RhdGljIHZvaWQK K0VuZENvbXByZXNzb3JOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNz KQoreworCS8qIG5vIG9wICovCit9CisKK3N0YXRpYyB2b2lkCitJbml0Q29tcHJlc3Nvck5vbmUo Q29tcHJlc3NvclN0YXRlICpjcywKKwkJCQkgICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0 aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJY3MtPnJlYWREYXRhID0gUmVhZERhdGFGcm9tQXJj aGl2ZU5vbmU7CisJY3MtPndyaXRlRGF0YSA9IFdyaXRlRGF0YVRvQXJjaGl2ZU5vbmU7CisJY3Mt PmVuZCA9IEVuZENvbXByZXNzb3JOb25lOworCisJY3MtPmNvbXByZXNzaW9uX3NwZWMgPSBjb21w cmVzc2lvbl9zcGVjOworfQogCiAvKiBQdWJsaWMgaW50ZXJmYWNlIHJvdXRpbmVzICovCiAKIC8q IEFsbG9jYXRlIGEgbmV3IGNvbXByZXNzb3IgKi8KIENvbXByZXNzb3JTdGF0ZSAqCiBBbGxvY2F0 ZUNvbXByZXNzb3IoY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9z cGVjLAotCQkJCSAgIFdyaXRlRnVuYyB3cml0ZUYpCisJCQkJICAgUmVhZEZ1bmMgcmVhZEYsIFdy aXRlRnVuYyB3cml0ZUYpCiB7CiAJQ29tcHJlc3NvclN0YXRlICpjczsKIAotI2lmbmRlZiBIQVZF X0xJQloKLQlpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05f R1pJUCkKLQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lv biB3aXRoICVzIiwgImd6aXAiKTsKLSNlbmRpZgotCiAJY3MgPSAoQ29tcHJlc3NvclN0YXRlICop IHBnX21hbGxvYzAoc2l6ZW9mKENvbXByZXNzb3JTdGF0ZSkpOworCWNzLT5yZWFkRiA9IHJlYWRG OwogCWNzLT53cml0ZUYgPSB3cml0ZUY7Ci0JY3MtPmNvbXByZXNzaW9uX3NwZWMgPSBjb21wcmVz c2lvbl9zcGVjOwogCi0JLyoKLQkgKiBQZXJmb3JtIGNvbXByZXNzaW9uIGFsZ29yaXRobSBzcGVj aWZpYyBpbml0aWFsaXphdGlvbi4KLQkgKi8KLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoY3MtPmNv bXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCi0JCUluaXRD b21wcmVzc29yWmxpYihjcywgY3MtPmNvbXByZXNzaW9uX3NwZWMubGV2ZWwpOwotI2VuZGlmCi0K LQlyZXR1cm4gY3M7Ci19Ci0KLS8qCi0gKiBSZWFkIGFsbCBjb21wcmVzc2VkIGRhdGEgZnJvbSB0 aGUgaW5wdXQgc3RyZWFtICh2aWEgcmVhZEYpIGFuZCBwcmludCBpdAotICogb3V0IHdpdGggYWh3 cml0ZSgpLgotICovCi12b2lkCi1SZWFkRGF0YUZyb21BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFI LAotCQkJCQljb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMs Ci0JCQkJCVJlYWRGdW5jIHJlYWRGKQotewogCXN3aXRjaCAoY29tcHJlc3Npb25fc3BlYy5hbGdv cml0aG0pCiAJewogCQljYXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6Ci0JCQlSZWFkRGF0YUZyb21B cmNoaXZlTm9uZShBSCwgcmVhZEYpOworCQkJSW5pdENvbXByZXNzb3JOb25lKGNzLCBjb21wcmVz c2lvbl9zcGVjKTsKIAkJCWJyZWFrOwogCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6Ci0jaWZk ZWYgSEFWRV9MSUJaCi0JCQlSZWFkRGF0YUZyb21BcmNoaXZlWmxpYihBSCwgcmVhZEYpOwotI2Vs c2UKLQkJCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24g d2l0aCAlcyIsCi0JCQkJCSJnemlwIik7Ci0jZW5kaWYKKwkJCUluaXRDb21wcmVzc29yR3ppcChj cywgY29tcHJlc3Npb25fc3BlYyk7CiAJCQlicmVhazsKIAkJY2FzZSBQR19DT01QUkVTU0lPTl9M WjQ6CiAJCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRl ZCIsICJMWjQiKTsKQEAgLTE1MiwzNSArMTQzLDggQEAgUmVhZERhdGFGcm9tQXJjaGl2ZShBcmNo aXZlSGFuZGxlICpBSCwKIAkJCXBnX2ZhdGFsKCJjb21wcmVzc2lvbiB3aXRoICVzIGlzIG5vdCB5 ZXQgc3VwcG9ydGVkIiwgIlpTVEQiKTsKIAkJCWJyZWFrOwogCX0KLX0KIAotLyoKLSAqIENvbXBy ZXNzIGFuZCB3cml0ZSBkYXRhIHRvIHRoZSBvdXRwdXQgc3RyZWFtICh2aWEgd3JpdGVGKS4KLSAq Lwotdm9pZAotV3JpdGVEYXRhVG9BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29y U3RhdGUgKmNzLAotCQkJCSAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKQotewotCXN3 aXRjaCAoY3MtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtKQotCXsKLQkJY2FzZSBQR19DT01Q UkVTU0lPTl9OT05FOgotCQkJV3JpdGVEYXRhVG9BcmNoaXZlTm9uZShBSCwgY3MsIGRhdGEsIGRM ZW4pOwotCQkJYnJlYWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKLSNpZmRlZiBIQVZF X0xJQloKLQkJCVdyaXRlRGF0YVRvQXJjaGl2ZVpsaWIoQUgsIGNzLCBkYXRhLCBkTGVuKTsKLSNl bHNlCi0JCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9u IHdpdGggJXMiLAotCQkJCQkiZ3ppcCIpOwotI2VuZGlmCi0JCQlicmVhazsKLQkJY2FzZSBQR19D T01QUkVTU0lPTl9MWjQ6Ci0JCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3Qg eWV0IHN1cHBvcnRlZCIsICJMWjQiKTsKLQkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9O X1pTVEQ6Ci0JCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBv cnRlZCIsICJaU1REIik7Ci0JCQlicmVhazsKLQl9CisJcmV0dXJuIGNzOwogfQogCiAvKgpAQCAt MTg5LDQwMiArMTUzLDE3OCBAQCBXcml0ZURhdGFUb0FyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgs IENvbXByZXNzb3JTdGF0ZSAqY3MsCiB2b2lkCiBFbmRDb21wcmVzc29yKEFyY2hpdmVIYW5kbGUg KkFILCBDb21wcmVzc29yU3RhdGUgKmNzKQogewotCXN3aXRjaCAoY3MtPmNvbXByZXNzaW9uX3Nw ZWMuYWxnb3JpdGhtKQotCXsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgotCQkJYnJlYWs7 Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKLSNpZmRlZiBIQVZFX0xJQloKLQkJCUVuZENv bXByZXNzb3JabGliKEFILCBjcyk7Ci0jZWxzZQotCQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9l cyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwKLQkJCQkJImd6aXAiKTsKLSNlbmRp ZgotCQkJYnJlYWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fTFo0OgotCQkJcGdfZmF0YWwoImNv bXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiTFo0Iik7Ci0JCQlicmVh azsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9aU1REOgotCQkJcGdfZmF0YWwoImNvbXByZXNzaW9u IHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiWlNURCIpOwotCQkJYnJlYWs7Ci0JfQot Ci0JZnJlZShjcyk7CisJY3MtPmVuZChBSCwgY3MpOworCXBnX2ZyZWUoY3MpOwogfQogCi0vKiBQ cml2YXRlIHJvdXRpbmVzLCBzcGVjaWZpYyB0byBlYWNoIGNvbXByZXNzaW9uIG1ldGhvZC4gKi8K LQotI2lmZGVmIEhBVkVfTElCWgotLyoKLSAqIEZ1bmN0aW9ucyBmb3IgemxpYiBjb21wcmVzc2Vk IG91dHB1dC4KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29tcHJlc3NlZCBzdHJlYW0g QVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCi1zdGF0aWMgdm9pZAotSW5pdENv bXByZXNzb3JabGliKENvbXByZXNzb3JTdGF0ZSAqY3MsIGludCBsZXZlbCkKK3N0YXRpYyBpbnQK K2hhc1N1ZmZpeChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqc3VmZml4KQogewot CXpfc3RyZWFtcAl6cDsKLQotCXpwID0gY3MtPnpwID0gKHpfc3RyZWFtcCkgcGdfbWFsbG9jKHNp emVvZih6X3N0cmVhbSkpOwotCXpwLT56YWxsb2MgPSBaX05VTEw7Ci0JenAtPnpmcmVlID0gWl9O VUxMOwotCXpwLT5vcGFxdWUgPSBaX05VTEw7Ci0KLQkvKgotCSAqIHpsaWJPdXRTaXplIGlzIHRo ZSBidWZmZXIgc2l6ZSB3ZSB0ZWxsIHpsaWIgaXQgY2FuIG91dHB1dCB0by4gIFdlCi0JICogYWN0 dWFsbHkgYWxsb2NhdGUgb25lIGV4dHJhIGJ5dGUgYmVjYXVzZSBzb21lIHJvdXRpbmVzIHdhbnQg dG8gYXBwZW5kIGEKLQkgKiB0cmFpbGluZyB6ZXJvIGJ5dGUgdG8gdGhlIHpsaWIgb3V0cHV0Lgot CSAqLwotCWNzLT56bGliT3V0ID0gKGNoYXIgKikgcGdfbWFsbG9jKFpMSUJfT1VUX1NJWkUgKyAx KTsKLQljcy0+emxpYk91dFNpemUgPSBaTElCX09VVF9TSVpFOwotCi0JaWYgKGRlZmxhdGVJbml0 KHpwLCBsZXZlbCkgIT0gWl9PSykKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCBpbml0aWFsaXplIGNv bXByZXNzaW9uIGxpYnJhcnk6ICVzIiwKLQkJCQkgenAtPm1zZyk7Ci0KLQkvKiBKdXN0IGJlIHBh cmFub2lkIC0gbWF5YmUgRW5kIGlzIGNhbGxlZCBhZnRlciBTdGFydCwgd2l0aCBubyBXcml0ZSAq LwotCXpwLT5uZXh0X291dCA9ICh2b2lkICopIGNzLT56bGliT3V0OwotCXpwLT5hdmFpbF9vdXQg PSBjcy0+emxpYk91dFNpemU7CisJaW50CQkJZmlsZW5hbWVsZW4gPSBzdHJsZW4oZmlsZW5hbWUp OworCWludAkJCXN1ZmZpeGxlbiA9IHN0cmxlbihzdWZmaXgpOworCisJaWYgKGZpbGVuYW1lbGVu IDwgc3VmZml4bGVuKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBtZW1jbXAoJmZpbGVuYW1lW2Zp bGVuYW1lbGVuIC0gc3VmZml4bGVuXSwKKwkJCQkgIHN1ZmZpeCwKKwkJCQkgIHN1ZmZpeGxlbikg PT0gMDsKIH0KIAorLyogZnJlZSgpIHdpdGhvdXQgY2hhbmdpbmcgZXJybm87IHVzZWZ1bCBpbiBz ZXZlcmFsIHBsYWNlcyBiZWxvdyAqLwogc3RhdGljIHZvaWQKLUVuZENvbXByZXNzb3JabGliKEFy Y2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKQorZnJlZV9rZWVwX2Vycm5vKHZv aWQgKnApCiB7Ci0Jel9zdHJlYW1wCXpwID0gY3MtPnpwOwotCi0JenAtPm5leHRfaW4gPSBOVUxM OwotCXpwLT5hdmFpbF9pbiA9IDA7Ci0KLQkvKiBGbHVzaCBhbnkgcmVtYWluaW5nIGRhdGEgZnJv bSB6bGliIGJ1ZmZlciAqLwotCURlZmxhdGVDb21wcmVzc29yWmxpYihBSCwgY3MsIHRydWUpOwot Ci0JaWYgKGRlZmxhdGVFbmQoenApICE9IFpfT0spCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xv c2UgY29tcHJlc3Npb24gc3RyZWFtOiAlcyIsIHpwLT5tc2cpOworCWludAkJCXNhdmVfZXJybm8g PSBlcnJubzsKIAotCWZyZWUoY3MtPnpsaWJPdXQpOwotCWZyZWUoY3MtPnpwKTsKKwlmcmVlKHAp OworCWVycm5vID0gc2F2ZV9lcnJubzsKIH0KIAotc3RhdGljIHZvaWQKLURlZmxhdGVDb21wcmVz c29yWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywgYm9vbCBmbHVz aCkKKy8qCisgKiBDb21wcmVzc2lvbiBOb25lIGltcGxlbWVudGF0aW9uCisgKi8KK3N0YXRpYyBz aXplX3QKK3JlYWRfbm9uZSh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBDb21wcmVzc0ZpbGVIYW5k bGUgKkNGSCkKIHsKLQl6X3N0cmVhbXAJenAgPSBjcy0+enA7Ci0JY2hhcgkgICAqb3V0ID0gY3Mt PnpsaWJPdXQ7Ci0JaW50CQkJcmVzID0gWl9PSzsKKwlGSUxFCSAgICpmcCA9IChGSUxFICopIENG SC0+cHJpdmF0ZV9kYXRhOworCXNpemVfdAkJcmV0OwogCi0Jd2hpbGUgKGNzLT56cC0+YXZhaWxf aW4gIT0gMCB8fCBmbHVzaCkKLQl7Ci0JCXJlcyA9IGRlZmxhdGUoenAsIGZsdXNoID8gWl9GSU5J U0ggOiBaX05PX0ZMVVNIKTsKLQkJaWYgKHJlcyA9PSBaX1NUUkVBTV9FUlJPUikKLQkJCXBnX2Zh dGFsKCJjb3VsZCBub3QgY29tcHJlc3MgZGF0YTogJXMiLCB6cC0+bXNnKTsKLQkJaWYgKChmbHVz aCAmJiAoenAtPmF2YWlsX291dCA8IGNzLT56bGliT3V0U2l6ZSkpCi0JCQl8fCAoenAtPmF2YWls X291dCA9PSAwKQotCQkJfHwgKHpwLT5hdmFpbF9pbiAhPSAwKQotCQkJKQotCQl7Ci0JCQkvKgot CQkJICogRXh0cmEgcGFyYW5vaWE6IGF2b2lkIHplcm8tbGVuZ3RoIGNodW5rcywgc2luY2UgYSB6 ZXJvIGxlbmd0aAotCQkJICogY2h1bmsgaXMgdGhlIEVPRiBtYXJrZXIgaW4gdGhlIGN1c3RvbSBm b3JtYXQuIFRoaXMgc2hvdWxkIG5ldmVyCi0JCQkgKiBoYXBwZW4gYnV0Li4uCi0JCQkgKi8KLQkJ CWlmICh6cC0+YXZhaWxfb3V0IDwgY3MtPnpsaWJPdXRTaXplKQotCQkJewotCQkJCS8qCi0JCQkJ ICogQW55IHdyaXRlIGZ1bmN0aW9uIHNob3VsZCBkbyBpdHMgb3duIGVycm9yIGNoZWNraW5nIGJ1 dCB0bwotCQkJCSAqIG1ha2Ugc3VyZSB3ZSBkbyBhIGNoZWNrIGhlcmUgYXMgd2VsbC4uLgotCQkJ CSAqLwotCQkJCXNpemVfdAkJbGVuID0gY3MtPnpsaWJPdXRTaXplIC0genAtPmF2YWlsX291dDsK LQotCQkJCWNzLT53cml0ZUYoQUgsIG91dCwgbGVuKTsKLQkJCX0KLQkJCXpwLT5uZXh0X291dCA9 ICh2b2lkICopIG91dDsKLQkJCXpwLT5hdmFpbF9vdXQgPSBjcy0+emxpYk91dFNpemU7Ci0JCX0K KwlpZiAoc2l6ZSA9PSAwKQorCQlyZXR1cm4gMDsKIAotCQlpZiAocmVzID09IFpfU1RSRUFNX0VO RCkKLQkJCWJyZWFrOwotCX0KKwlyZXQgPSBmcmVhZChwdHIsIDEsIHNpemUsIGZwKTsKKwlpZiAo cmV0ICE9IHNpemUgJiYgIWZlb2YoZnApKQorCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJv bSBpbnB1dCBmaWxlOiAlcyIsCisJCQkJIHN0cmVycm9yKGVycm5vKSk7CisKKwlyZXR1cm4gcmV0 OwogfQogCi1zdGF0aWMgdm9pZAotV3JpdGVEYXRhVG9BcmNoaXZlWmxpYihBcmNoaXZlSGFuZGxl ICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJICAgY29uc3QgY2hhciAqZGF0YSwgc2l6 ZV90IGRMZW4pCitzdGF0aWMgc2l6ZV90Cit3cml0ZV9ub25lKGNvbnN0IHZvaWQgKnB0ciwgc2l6 ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQogewotCWNzLT56cC0+bmV4dF9pbiA9 ICh2b2lkICopIHVuY29uc3RpZnkoY2hhciAqLCBkYXRhKTsKLQljcy0+enAtPmF2YWlsX2luID0g ZExlbjsKLQlEZWZsYXRlQ29tcHJlc3NvclpsaWIoQUgsIGNzLCBmYWxzZSk7CisJcmV0dXJuIGZ3 cml0ZShwdHIsIDEsIHNpemUsIChGSUxFICopIENGSC0+cHJpdmF0ZV9kYXRhKTsKIH0KIAotc3Rh dGljIHZvaWQKLVJlYWREYXRhRnJvbUFyY2hpdmVabGliKEFyY2hpdmVIYW5kbGUgKkFILCBSZWFk RnVuYyByZWFkRikKK3N0YXRpYyBjb25zdCBjaGFyICoKK2dldF9lcnJvcl9ub25lKENvbXByZXNz RmlsZUhhbmRsZSAqQ0ZIKQogewotCXpfc3RyZWFtcAl6cDsKLQljaGFyCSAgICpvdXQ7Ci0JaW50 CQkJcmVzID0gWl9PSzsKLQlzaXplX3QJCWNudDsKLQljaGFyCSAgICpidWY7Ci0Jc2l6ZV90CQli dWZsZW47Ci0KLQl6cCA9ICh6X3N0cmVhbXApIHBnX21hbGxvYyhzaXplb2Yoel9zdHJlYW0pKTsK LQl6cC0+emFsbG9jID0gWl9OVUxMOwotCXpwLT56ZnJlZSA9IFpfTlVMTDsKLQl6cC0+b3BhcXVl ID0gWl9OVUxMOwotCi0JYnVmID0gcGdfbWFsbG9jKFpMSUJfSU5fU0laRSk7Ci0JYnVmbGVuID0g WkxJQl9JTl9TSVpFOwotCi0Jb3V0ID0gcGdfbWFsbG9jKFpMSUJfT1VUX1NJWkUgKyAxKTsKLQot CWlmIChpbmZsYXRlSW5pdCh6cCkgIT0gWl9PSykKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCBpbml0 aWFsaXplIGNvbXByZXNzaW9uIGxpYnJhcnk6ICVzIiwKLQkJCQkgenAtPm1zZyk7Ci0KLQkvKiBu byBtaW5pbWFsIGNodW5rIHNpemUgZm9yIHpsaWIgKi8KLQl3aGlsZSAoKGNudCA9IHJlYWRGKEFI LCAmYnVmLCAmYnVmbGVuKSkpCi0JewotCQl6cC0+bmV4dF9pbiA9ICh2b2lkICopIGJ1ZjsKLQkJ enAtPmF2YWlsX2luID0gY250OwotCi0JCXdoaWxlICh6cC0+YXZhaWxfaW4gPiAwKQotCQl7Ci0J CQl6cC0+bmV4dF9vdXQgPSAodm9pZCAqKSBvdXQ7Ci0JCQl6cC0+YXZhaWxfb3V0ID0gWkxJQl9P VVRfU0laRTsKKwlyZXR1cm4gc3RyZXJyb3IoZXJybm8pOworfQogCi0JCQlyZXMgPSBpbmZsYXRl KHpwLCAwKTsKLQkJCWlmIChyZXMgIT0gWl9PSyAmJiByZXMgIT0gWl9TVFJFQU1fRU5EKQotCQkJ CXBnX2ZhdGFsKCJjb3VsZCBub3QgdW5jb21wcmVzcyBkYXRhOiAlcyIsIHpwLT5tc2cpOworc3Rh dGljIGNoYXIgKgorZ2V0c19ub25lKGNoYXIgKnB0ciwgaW50IHNpemUsIENvbXByZXNzRmlsZUhh bmRsZSAqQ0ZIKQoreworCXJldHVybiBmZ2V0cyhwdHIsIHNpemUsIChGSUxFICopIENGSC0+cHJp dmF0ZV9kYXRhKTsKK30KIAotCQkJb3V0W1pMSUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0XSA9 ICdcMCc7Ci0JCQlhaHdyaXRlKG91dCwgMSwgWkxJQl9PVVRfU0laRSAtIHpwLT5hdmFpbF9vdXQs IEFIKTsKLQkJfQotCX0KK3N0YXRpYyBpbnQKK2dldGNfbm9uZShDb21wcmVzc0ZpbGVIYW5kbGUg KkNGSCkKK3sKKwlGSUxFCSAgICpmcCA9IChGSUxFICopIENGSC0+cHJpdmF0ZV9kYXRhOworCWlu dAkJCXJldDsKIAotCXpwLT5uZXh0X2luID0gTlVMTDsKLQl6cC0+YXZhaWxfaW4gPSAwOwotCXdo aWxlIChyZXMgIT0gWl9TVFJFQU1fRU5EKQorCXJldCA9IGZnZXRjKGZwKTsKKwlpZiAocmV0ID09 IEVPRikKIAl7Ci0JCXpwLT5uZXh0X291dCA9ICh2b2lkICopIG91dDsKLQkJenAtPmF2YWlsX291 dCA9IFpMSUJfT1VUX1NJWkU7Ci0JCXJlcyA9IGluZmxhdGUoenAsIDApOwotCQlpZiAocmVzICE9 IFpfT0sgJiYgcmVzICE9IFpfU1RSRUFNX0VORCkKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgdW5j b21wcmVzcyBkYXRhOiAlcyIsIHpwLT5tc2cpOwotCi0JCW91dFtaTElCX09VVF9TSVpFIC0genAt PmF2YWlsX291dF0gPSAnXDAnOwotCQlhaHdyaXRlKG91dCwgMSwgWkxJQl9PVVRfU0laRSAtIHpw LT5hdmFpbF9vdXQsIEFIKTsKKwkJaWYgKCFmZW9mKGZwKSkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBu b3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZWxzZQor CQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogZW5kIG9mIGZpbGUi KTsKIAl9CiAKLQlpZiAoaW5mbGF0ZUVuZCh6cCkgIT0gWl9PSykKLQkJcGdfZmF0YWwoImNvdWxk IG5vdCBjbG9zZSBjb21wcmVzc2lvbiBsaWJyYXJ5OiAlcyIsIHpwLT5tc2cpOwotCi0JZnJlZShi dWYpOwotCWZyZWUob3V0KTsKLQlmcmVlKHpwKTsKKwlyZXR1cm4gcmV0OwogfQotI2VuZGlmCQkJ CQkJCS8qIEhBVkVfTElCWiAqLwotCiAKLS8qCi0gKiBGdW5jdGlvbnMgZm9yIHVuY29tcHJlc3Nl ZCBvdXRwdXQuCi0gKi8KLQotc3RhdGljIHZvaWQKLVJlYWREYXRhRnJvbUFyY2hpdmVOb25lKEFy Y2hpdmVIYW5kbGUgKkFILCBSZWFkRnVuYyByZWFkRikKK3N0YXRpYyBpbnQKK2Nsb3NlX25vbmUo Q29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCiB7Ci0Jc2l6ZV90CQljbnQ7Ci0JY2hhcgkgICAqYnVm OwotCXNpemVfdAkJYnVmbGVuOworCUZJTEUJICAgKmZwID0gKEZJTEUgKikgQ0ZILT5wcml2YXRl X2RhdGE7CisJaW50CQkJcmV0ID0gMDsKIAotCWJ1ZiA9IHBnX21hbGxvYyhaTElCX09VVF9TSVpF KTsKLQlidWZsZW4gPSBaTElCX09VVF9TSVpFOworCUNGSC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsK IAotCXdoaWxlICgoY250ID0gcmVhZEYoQUgsICZidWYsICZidWZsZW4pKSkKLQl7Ci0JCWFod3Jp dGUoYnVmLCAxLCBjbnQsIEFIKTsKLQl9CisJaWYgKGZwKQorCQlyZXQgPSBmY2xvc2UoZnApOwog Ci0JZnJlZShidWYpOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkCi1Xcml0ZURhdGFU b0FyY2hpdmVOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAotCQkJ CQkgICBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgZExlbikKKworc3RhdGljIGludAorZW9mX25v bmUoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCiB7Ci0JY3MtPndyaXRlRihBSCwgZGF0YSwgZExl bik7CisJcmV0dXJuIGZlb2YoKEZJTEUgKikgQ0ZILT5wcml2YXRlX2RhdGEpOwogfQogCi0KLS8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ29tcHJlc3NlZCBzdHJlYW0gQVBJCi0gKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi0vKgotICogY2ZwIHJlcHJlc2VudHMgYW4gb3BlbiBz dHJlYW0sIHdyYXBwaW5nIHRoZSB1bmRlcmx5aW5nIEZJTEUgb3IgZ3pGaWxlCi0gKiBwb2ludGVy LiBUaGlzIGlzIG9wYXF1ZSB0byB0aGUgY2FsbGVycy4KLSAqLwotc3RydWN0IGNmcAorc3RhdGlj IGludAorb3Blbl9ub25lKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmZCwgY29uc3QgY2hhciAqbW9k ZSwgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCiB7Ci0JcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlv biBjb21wcmVzc2lvbl9zcGVjOwotCXZvaWQJICAgKmZwOwotfTsKKwlBc3NlcnQoQ0ZILT5wcml2 YXRlX2RhdGEgPT0gTlVMTCk7CiAKLSNpZmRlZiBIQVZFX0xJQloKLXN0YXRpYyBpbnQJaGFzU3Vm Zml4KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpzdWZmaXgpOwotI2VuZGlmCisJ aWYgKGZkID49IDApCisJCUNGSC0+cHJpdmF0ZV9kYXRhID0gZmRvcGVuKGR1cChmZCksIG1vZGUp OworCWVsc2UKKwkJQ0ZILT5wcml2YXRlX2RhdGEgPSBmb3BlbihwYXRoLCBtb2RlKTsKIAotLyog ZnJlZSgpIHdpdGhvdXQgY2hhbmdpbmcgZXJybm87IHVzZWZ1bCBpbiBzZXZlcmFsIHBsYWNlcyBi ZWxvdyAqLwotc3RhdGljIHZvaWQKLWZyZWVfa2VlcF9lcnJubyh2b2lkICpwKQotewotCWludAkJ CXNhdmVfZXJybm8gPSBlcnJubzsKKwlpZiAoQ0ZILT5wcml2YXRlX2RhdGEgPT0gTlVMTCkKKwkJ cmV0dXJuIDE7CiAKLQlmcmVlKHApOwotCWVycm5vID0gc2F2ZV9lcnJubzsKKwlyZXR1cm4gMDsK IH0KIAotLyoKLSAqIE9wZW4gYSBmaWxlIGZvciByZWFkaW5nLiAncGF0aCcgaXMgdGhlIGZpbGUg dG8gb3BlbiwgYW5kICdtb2RlJyBzaG91bGQKLSAqIGJlIGVpdGhlciAiciIgb3IgInJiIi4KLSAq Ci0gKiBJZiB0aGUgZmlsZSBhdCAncGF0aCcgZG9lcyBub3QgZXhpc3QsIHdlIGFwcGVuZCB0aGUg Ii5neiIgc3VmZml4IChpZiAncGF0aCcKLSAqIGRvZXNuJ3QgYWxyZWFkeSBoYXZlIGl0KSBhbmQg dHJ5IGFnYWluLiBTbyBpZiB5b3UgcGFzcyAiZm9vIiBhcyAncGF0aCcsCi0gKiB0aGlzIHdpbGwg b3BlbiBlaXRoZXIgImZvbyIgb3IgImZvby5neiIuCi0gKgotICogT24gZmFpbHVyZSwgcmV0dXJu IE5VTEwgd2l0aCBhbiBlcnJvciBjb2RlIGluIGVycm5vLgotICovCi1jZnAgKgotY2ZvcGVuX3Jl YWQoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkKK3N0YXRpYyBpbnQKK29wZW5f d3JpdGVfbm9uZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLCBDb21wcmVzc0Zp bGVIYW5kbGUgKkNGSCkKIHsKLQljZnAJCSAgICpmcDsKLQotCXBnX2NvbXByZXNzX3NwZWNpZmlj YXRpb24gY29tcHJlc3Npb25fc3BlYyA9IHswfTsKKwlBc3NlcnQoQ0ZILT5wcml2YXRlX2RhdGEg PT0gTlVMTCk7CiAKLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoaGFzU3VmZml4KHBhdGgsICIuZ3oi KSkKLQl7Ci0JCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJ UDsKLQkJZnAgPSBjZm9wZW4ocGF0aCwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7Ci0JfQotCWVs c2UKLSNlbmRpZgotCXsKLQkJY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVT U0lPTl9OT05FOwotCQlmcCA9IGNmb3BlbihwYXRoLCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsK LSNpZmRlZiBIQVZFX0xJQloKLQkJaWYgKGZwID09IE5VTEwpCi0JCXsKLQkJCWNoYXIJICAgKmZu YW1lOworCUNGSC0+cHJpdmF0ZV9kYXRhID0gZm9wZW4ocGF0aCwgbW9kZSk7CisJaWYgKENGSC0+ cHJpdmF0ZV9kYXRhID09IE5VTEwpCisJCXJldHVybiAxOwogCi0JCQlmbmFtZSA9IHBzcHJpbnRm KCIlcy5neiIsIHBhdGgpOwotCQkJY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01Q UkVTU0lPTl9HWklQOwotCQkJZnAgPSBjZm9wZW4oZm5hbWUsIG1vZGUsIGNvbXByZXNzaW9uX3Nw ZWMpOwotCQkJZnJlZV9rZWVwX2Vycm5vKGZuYW1lKTsKLQkJfQotI2VuZGlmCi0JfQotCXJldHVy biBmcDsKKwlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIE9wZW4gYSBmaWxlIGZvciB3cml0aW5nLiAn cGF0aCcgaW5kaWNhdGVzIHRoZSBwYXRoIG5hbWUsIGFuZCAnbW9kZScgbXVzdAotICogYmUgYSBm aWxlbW9kZSBhcyBhY2NlcHRlZCBieSBmb3BlbigpIGFuZCBnem9wZW4oKSB0aGF0IGluZGljYXRl cyB3cml0aW5nCi0gKiAoInciLCAid2IiLCAiYSIsIG9yICJhYiIpLgotICoKLSAqIElmICdjb21w cmVzc2lvbl9zcGVjLmFsZ29yaXRobScgaXMgR1pJUCwgYSBnemlwIGNvbXByZXNzZWQgc3RyZWFt IGlzIG9wZW5lZCwKLSAqIGFuZCAnY29tcHJlc3Npb25fc3BlYy5sZXZlbCcgdXNlZC4gVGhlICIu Z3oiIHN1ZmZpeCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvCi0gKiAncGF0aCcgaW4gdGhhdCBj YXNlLgotICoKLSAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdpdGggYW4gZXJyb3IgY29kZSBp biBlcnJuby4KLSAqLwotY2ZwICoKLWNmb3Blbl93cml0ZShjb25zdCBjaGFyICpwYXRoLCBjb25z dCBjaGFyICptb2RlLAotCQkJIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJl c3Npb25fc3BlYykKK3N0YXRpYyB2b2lkCitJbml0Q29tcHJlc3NOb25lKENvbXByZXNzRmlsZUhh bmRsZSAqQ0ZILAorCQkJCSBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNz aW9uX3NwZWMpCiB7Ci0JY2ZwCQkgICAqZnA7Ci0KLQlpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdv cml0aG0gPT0gUEdfQ09NUFJFU1NJT05fTk9ORSkKLQkJZnAgPSBjZm9wZW4ocGF0aCwgbW9kZSwg Y29tcHJlc3Npb25fc3BlYyk7Ci0JZWxzZQotCXsKLSNpZmRlZiBIQVZFX0xJQloKLQkJY2hhcgkg ICAqZm5hbWU7Ci0KLQkJZm5hbWUgPSBwc3ByaW50ZigiJXMuZ3oiLCBwYXRoKTsKLQkJZnAgPSBj Zm9wZW4oZm5hbWUsIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOwotCQlmcmVlX2tlZXBfZXJybm8o Zm5hbWUpOwotI2Vsc2UKLQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBj b21wcmVzc2lvbiB3aXRoICVzIiwgImd6aXAiKTsKLQkJZnAgPSBOVUxMOwkJCQkvKiBrZWVwIGNv bXBpbGVyIHF1aWV0ICovCi0jZW5kaWYKLQl9Ci0JcmV0dXJuIGZwOworCUNGSC0+b3Blbl9mdW5j ID0gb3Blbl9ub25lOworCUNGSC0+b3Blbl93cml0ZV9mdW5jID0gb3Blbl93cml0ZV9ub25lOwor CUNGSC0+cmVhZF9mdW5jID0gcmVhZF9ub25lOworCUNGSC0+d3JpdGVfZnVuYyA9IHdyaXRlX25v bmU7CisJQ0ZILT5nZXRzX2Z1bmMgPSBnZXRzX25vbmU7CisJQ0ZILT5nZXRjX2Z1bmMgPSBnZXRj X25vbmU7CisJQ0ZILT5jbG9zZV9mdW5jID0gY2xvc2Vfbm9uZTsKKwlDRkgtPmVvZl9mdW5jID0g ZW9mX25vbmU7CisJQ0ZILT5nZXRfZXJyb3JfZnVuYyA9IGdldF9lcnJvcl9ub25lOworCisJQ0ZI LT5wcml2YXRlX2RhdGEgPSBOVUxMOwogfQogCiAvKgotICogVGhpcyBpcyB0aGUgd29ya2hvcnNl IGZvciBjZm9wZW4oKSBvciBjZmRvcGVuKCkuIEl0IG9wZW5zIGZpbGUgJ3BhdGgnIG9yCi0gKiBh c3NvY2lhdGVzIGEgc3RyZWFtICdmZCcsIGlmICdmZCcgaXMgYSB2YWxpZCBkZXNjcmlwdG9yLCBp biAnbW9kZScuIFRoZQotICogZGVzY3JpcHRvciBpcyBub3QgZHVwJ2VkIGFuZCBpdCBpcyB0aGUg Y2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZG8gc28uCi0gKiBUaGUgY2FsbGVyIG11c3QgdmVy aWZ5IHRoYXQgdGhlICdjb21wcmVzc19hbGdvcml0aG0nIGlzIHN1cHBvcnRlZCBieSB0aGUKLSAq IGN1cnJlbnQgYnVpbGQuCi0gKgotICogT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0aCBhbiBl cnJvciBjb2RlIGluIGVycm5vLgorICogUHVibGljIGludGVyZmFjZQogICovCi1zdGF0aWMgY2Zw ICoKLWNmb3Blbl9pbnRlcm5hbChjb25zdCBjaGFyICpwYXRoLCBpbnQgZmQsIGNvbnN0IGNoYXIg Km1vZGUsCi0JCQkJcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQor Q29tcHJlc3NGaWxlSGFuZGxlICoKK0luaXRDb21wcmVzc0ZpbGVIYW5kbGUoY29uc3QgcGdfY29t cHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQogewotCWNmcAkJICAgKmZwID0g cGdfbWFsbG9jKHNpemVvZihjZnApKTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAotCWZw LT5jb21wcmVzc2lvbl9zcGVjID0gY29tcHJlc3Npb25fc3BlYzsKKwlDRkggPSBwZ19tYWxsb2Mw KHNpemVvZihDb21wcmVzc0ZpbGVIYW5kbGUpKTsKIAogCXN3aXRjaCAoY29tcHJlc3Npb25fc3Bl Yy5hbGdvcml0aG0pCiAJewogCQljYXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6Ci0JCQlpZiAoZmQg Pj0gMCkKLQkJCQlmcC0+ZnAgPSBmZG9wZW4oZmQsIG1vZGUpOwotCQkJZWxzZQotCQkJCWZwLT5m cCA9IGZvcGVuKHBhdGgsIG1vZGUpOwotCQkJaWYgKGZwLT5mcCA9PSBOVUxMKQotCQkJewotCQkJ CWZyZWVfa2VlcF9lcnJubyhmcCk7Ci0JCQkJZnAgPSBOVUxMOwotCQkJfQotCisJCQlJbml0Q29t cHJlc3NOb25lKENGSCwgY29tcHJlc3Npb25fc3BlYyk7CiAJCQlicmVhazsKIAkJY2FzZSBQR19D T01QUkVTU0lPTl9HWklQOgotI2lmZGVmIEhBVkVfTElCWgotCQkJaWYgKGNvbXByZXNzaW9uX3Nw ZWMubGV2ZWwgIT0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OKQotCQkJewotCQkJCS8qCi0JCQkJICog dXNlciBoYXMgc3BlY2lmaWVkIGEgY29tcHJlc3Npb24gbGV2ZWwsIHNvIHRlbGwgemxpYiB0byB1 c2UKLQkJCQkgKiBpdAotCQkJCSAqLwotCQkJCWNoYXIJCW1vZGVfY29tcHJlc3Npb25bMzJdOwot Ci0JCQkJc25wcmludGYobW9kZV9jb21wcmVzc2lvbiwgc2l6ZW9mKG1vZGVfY29tcHJlc3Npb24p LCAiJXMlZCIsCi0JCQkJCQkgbW9kZSwgY29tcHJlc3Npb25fc3BlYy5sZXZlbCk7Ci0JCQkJaWYg KGZkID49IDApCi0JCQkJCWZwLT5mcCA9IGd6ZG9wZW4oZmQsIG1vZGVfY29tcHJlc3Npb24pOwot CQkJCWVsc2UKLQkJCQkJZnAtPmZwID0gZ3pvcGVuKHBhdGgsIG1vZGVfY29tcHJlc3Npb24pOwot CQkJfQotCQkJZWxzZQotCQkJewotCQkJCS8qIGRvbid0IHNwZWNpZnkgYSBsZXZlbCwganVzdCB1 c2UgdGhlIHpsaWIgZGVmYXVsdCAqLwotCQkJCWlmIChmZCA+PSAwKQotCQkJCQlmcC0+ZnAgPSBn emRvcGVuKGZkLCBtb2RlKTsKLQkJCQllbHNlCi0JCQkJCWZwLT5mcCA9IGd6b3BlbihwYXRoLCBt b2RlKTsKLQkJCX0KLQotCQkJaWYgKGZwLT5mcCA9PSBOVUxMKQotCQkJewotCQkJCWZyZWVfa2Vl cF9lcnJubyhmcCk7Ci0JCQkJZnAgPSBOVUxMOwotCQkJfQotI2Vsc2UKLQkJCXBnX2ZhdGFsKCJ0 aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsCi0JCQkJCSJn emlwIik7Ci0jZW5kaWYKKwkJCUluaXRDb21wcmVzc0d6aXAoQ0ZILCBjb21wcmVzc2lvbl9zcGVj KTsKIAkJCWJyZWFrOwogCQljYXNlIFBHX0NPTVBSRVNTSU9OX0xaNDoKIAkJCXBnX2ZhdGFsKCJj b21wcmVzc2lvbiB3aXRoICVzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIiwgIkxaNCIpOwpAQCAtNTk0 LDI2NiArMzM0LDg4IEBAIGNmb3Blbl9pbnRlcm5hbChjb25zdCBjaGFyICpwYXRoLCBpbnQgZmQs IGNvbnN0IGNoYXIgKm1vZGUsCiAJCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gZnA7CisJcmV0dXJu IENGSDsKIH0KIAotY2ZwICoKLWNmb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpt b2RlLAotCSAgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3Bl YykKKy8qCisgKiBPcGVuIGEgZmlsZSBmb3IgcmVhZGluZy4gJ3BhdGgnIGlzIHRoZSBmaWxlIHRv IG9wZW4sIGFuZCAnbW9kZScgc2hvdWxkCisgKiBiZSBlaXRoZXIgInIiIG9yICJyYiIuCisgKgor ICogSWYgdGhlIGZpbGUgYXQgJ3BhdGgnIGRvZXMgbm90IGV4aXN0LCB3ZSBhcHBlbmQgdGhlICJ7 Lmd6LC5sejR9IiBzdWZmaXggKGkKKyAqICdwYXRoJyBkb2Vzbid0IGFscmVhZHkgaGF2ZSBpdCkg YW5kIHRyeSBhZ2Fpbi4gU28gaWYgeW91IHBhc3MgImZvbyIgYXMKKyAqICdwYXRoJywgdGhpcyB3 aWxsIG9wZW4gZWl0aGVyICJmb28iIG9yICJmb28uZ3oiIG9yICJmb28ubHo0IiwgdHJ5aW5nIGlu IHRoYXQKKyAqIG9yZGVyLgorICoKKyAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdpdGggYW4g ZXJyb3IgY29kZSBpbiBlcnJuby4KKyAqLworQ29tcHJlc3NGaWxlSGFuZGxlICoKK0luaXREaXNj b3ZlckNvbXByZXNzRmlsZUhhbmRsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2Rl KQogewotCXJldHVybiBjZm9wZW5faW50ZXJuYWwocGF0aCwgLTEsIG1vZGUsIGNvbXByZXNzaW9u X3NwZWMpOwotfQorCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIID0gTlVMTDsKKwlzdHJ1Y3Qgc3Rh dCBzdDsKKwljaGFyCSAgICpmbmFtZTsKKwlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXBy ZXNzaW9uX3NwZWMgPSB7MH07CiAKLWNmcCAqCi1jZmRvcGVuKGludCBmZCwgY29uc3QgY2hhciAq bW9kZSwKLQkJY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVj KQotewotCXJldHVybiBjZm9wZW5faW50ZXJuYWwoTlVMTCwgZmQsIG1vZGUsIGNvbXByZXNzaW9u X3NwZWMpOwotfQorCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05f Tk9ORTsKIAotaW50Ci1jZnJlYWQodm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCkKLXsKLQlp bnQJCQlyZXQgPSAwOworCUFzc2VydChzdHJjbXAobW9kZSwgInIiKSA9PSAwIHx8IHN0cmNtcCht b2RlLCAicmIiKSA9PSAwKTsKIAotCWlmIChzaXplID09IDApCi0JCXJldHVybiAwOworCWZuYW1l ID0gc3RyZHVwKHBhdGgpOwogCi0Jc3dpdGNoIChmcC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0 aG0pCisJaWYgKGhhc1N1ZmZpeChmbmFtZSwgIi5neiIpKQorCQljb21wcmVzc2lvbl9zcGVjLmFs Z29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7CisJZWxzZQogCXsKLQkJY2FzZSBQR19DT01Q UkVTU0lPTl9OT05FOgotCQkJcmV0ID0gZnJlYWQocHRyLCAxLCBzaXplLCAoRklMRSAqKSBmcC0+ ZnApOwotCQkJaWYgKHJldCAhPSBzaXplICYmICFmZW9mKChGSUxFICopIGZwLT5mcCkpCi0JCQkJ UkVBRF9FUlJPUl9FWElUKChGSUxFICopIGZwLT5mcCk7CisJCWJvb2wJCWV4aXN0czsKIAotCQkJ YnJlYWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKKwkJZXhpc3RzID0gKHN0YXQocGF0 aCwgJnN0KSA9PSAwKTsKKwkJLyogYXZvaWQgdW51c2VkIHdhcm5pbmcgaWYgaXQgaXMgbm90IGJ1 aWxkIHdpdGggY29tcHJlc3Npb24gKi8KKwkJaWYgKGV4aXN0cykKKwkJCWNvbXByZXNzaW9uX3Nw ZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKICNpZmRlZiBIQVZFX0xJQloKLQkJ CXJldCA9IGd6cmVhZCgoZ3pGaWxlKSBmcC0+ZnAsIHB0ciwgc2l6ZSk7Ci0JCQlpZiAocmV0ICE9 IHNpemUgJiYgIWd6ZW9mKChnekZpbGUpIGZwLT5mcCkpCi0JCQl7Ci0JCQkJaW50CQkJZXJybnVt OwotCQkJCWNvbnN0IGNoYXIgKmVycm1zZyA9IGd6ZXJyb3IoKGd6RmlsZSkgZnAtPmZwLCAmZXJy bnVtKTsKLQotCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVz IiwKLQkJCQkJCSBlcnJudW0gPT0gWl9FUlJOTyA/IHN0cmVycm9yKGVycm5vKSA6IGVycm1zZyk7 Ci0JCQl9Ci0jZWxzZQotCQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBj b21wcmVzc2lvbiB3aXRoICVzIiwKLQkJCQkJImd6aXAiKTsKLSNlbmRpZgotCQkJYnJlYWs7Ci0J CWNhc2UgUEdfQ09NUFJFU1NJT05fTFo0OgotCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGgg JXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiTFo0Iik7Ci0JCQlicmVhazsKLQkJY2FzZSBQR19D T01QUkVTU0lPTl9aU1REOgotCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90 IHlldCBzdXBwb3J0ZWQiLCAiWlNURCIpOwotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJldDsK LX0KLQotaW50Ci1jZndyaXRlKGNvbnN0IHZvaWQgKnB0ciwgaW50IHNpemUsIGNmcCAqZnApCi17 Ci0JaW50CQkJcmV0ID0gMDsKLQotCXN3aXRjaCAoZnAtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3Jp dGhtKQotCXsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgotCQkJcmV0ID0gZndyaXRlKHB0 ciwgMSwgc2l6ZSwgKEZJTEUgKikgZnAtPmZwKTsKLQkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBS RVNTSU9OX0daSVA6Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCQlyZXQgPSBnendyaXRlKChnekZpbGUp IGZwLT5mcCwgcHRyLCBzaXplKTsKLSNlbHNlCi0JCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2Vz IG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLAotCQkJCQkiZ3ppcCIpOwotI2VuZGlm Ci0JCQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6Ci0JCQlwZ19mYXRhbCgiY29t cHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJMWjQiKTsKLQkJCWJyZWFr OwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX1pTVEQ6Ci0JCQlwZ19mYXRhbCgiY29tcHJlc3Npb24g d2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJaU1REIik7Ci0JCQlicmVhazsKLQl9Ci0K LQlyZXR1cm4gcmV0OwotfQotCi1pbnQKLWNmZ2V0YyhjZnAgKmZwKQotewotCWludAkJCXJldCA9 IDA7Ci0KLQlzd2l0Y2ggKGZwLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkKLQl7Ci0JCWNh c2UgUEdfQ09NUFJFU1NJT05fTk9ORToKLQkJCXJldCA9IGZnZXRjKChGSUxFICopIGZwLT5mcCk7 Ci0JCQlpZiAocmV0ID09IEVPRikKLQkJCQlSRUFEX0VSUk9SX0VYSVQoKEZJTEUgKikgZnAtPmZw KTsKKwkJaWYgKCFleGlzdHMpCisJCXsKKwkJCWZyZWVfa2VlcF9lcnJubyhmbmFtZSk7CisJCQlm bmFtZSA9IHBzcHJpbnRmKCIlcy5neiIsIHBhdGgpOworCQkJZXhpc3RzID0gKHN0YXQoZm5hbWUs ICZzdCkgPT0gMCk7CiAKLQkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6Ci0j aWZkZWYgSEFWRV9MSUJaCi0JCQlyZXQgPSBnemdldGMoKGd6RmlsZSkgZnAtPmZwKTsKLQkJCWlm IChyZXQgPT0gRU9GKQotCQkJewotCQkJCWlmICghZ3plb2YoKGd6RmlsZSkgZnAtPmZwKSkKLQkJ CQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLCBzdHJlcnJv cihlcnJubykpOwotCQkJCWVsc2UKLQkJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20g aW5wdXQgZmlsZTogZW5kIG9mIGZpbGUiKTsKLQkJCX0KLSNlbHNlCi0JCQlwZ19mYXRhbCgidGhp cyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLAotCQkJCQkiZ3pp cCIpOworCQkJaWYgKGV4aXN0cykKKwkJCQljb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IFBH X0NPTVBSRVNTSU9OX0daSVA7CisJCX0KICNlbmRpZgotCQkJYnJlYWs7Ci0JCWNhc2UgUEdfQ09N UFJFU1NJT05fTFo0OgotCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHll dCBzdXBwb3J0ZWQiLCAiTFo0Iik7Ci0JCQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9a U1REOgotCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0 ZWQiLCAiWlNURCIpOwotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotY2hhciAq Ci1jZmdldHMoY2ZwICpmcCwgY2hhciAqYnVmLCBpbnQgbGVuKQotewotCWNoYXIJICAgKnJldCA9 IE5VTEw7Ci0KLQlzd2l0Y2ggKGZwLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkKLQl7Ci0J CWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKLQkJCXJldCA9IGZnZXRzKGJ1ZiwgbGVuLCAoRklM RSAqKSBmcC0+ZnApOworI2lmZGVmIFVTRV9MWjQKKwkJaWYgKCFleGlzdHMpCisJCXsKKwkJCWZy ZWVfa2VlcF9lcnJubyhmbmFtZSk7CisJCQlmbmFtZSA9IHBzcHJpbnRmKCIlcy5sejQiLCBwYXRo KTsKKwkJCWV4aXN0cyA9IChzdGF0KGZuYW1lLCAmc3QpID09IDApOwogCi0JCQlicmVhazsKLQkJ Y2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgotI2lmZGVmIEhBVkVfTElCWgotCQkJcmV0ID0gZ3pn ZXRzKChnekZpbGUpIGZwLT5mcCwgYnVmLCBsZW4pOwotI2Vsc2UKLQkJCXBnX2ZhdGFsKCJ0aGlz IGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsCi0JCQkJCSJnemlw Iik7CisJCQlpZiAoZXhpc3RzKQorCQkJCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdf Q09NUFJFU1NJT05fTFo0OworCQl9CiAjZW5kaWYKLQkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBS RVNTSU9OX0xaNDoKLQkJCXBnX2ZhdGFsKCJjb21wcmVzc2lvbiB3aXRoICVzIGlzIG5vdCB5ZXQg c3VwcG9ydGVkIiwgIkxaNCIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fWlNU RDoKLQkJCXBnX2ZhdGFsKCJjb21wcmVzc2lvbiB3aXRoICVzIGlzIG5vdCB5ZXQgc3VwcG9ydGVk IiwgIlpTVEQiKTsKLQkJCWJyZWFrOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLWludAotY2Zj bG9zZShjZnAgKmZwKQotewotCWludAkJCXJldCA9IDA7Ci0KLQlpZiAoZnAgPT0gTlVMTCkKLQl7 Ci0JCWVycm5vID0gRUJBREY7Ci0JCXJldHVybiBFT0Y7CiAJfQogCi0Jc3dpdGNoIChmcC0+Y29t cHJlc3Npb25fc3BlYy5hbGdvcml0aG0pCisJQ0ZIID0gSW5pdENvbXByZXNzRmlsZUhhbmRsZShj b21wcmVzc2lvbl9zcGVjKTsKKwlpZiAoQ0ZILT5vcGVuX2Z1bmMoZm5hbWUsIC0xLCBtb2RlLCBD RkgpKQogCXsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgotCQkJcmV0ID0gZmNsb3NlKChG SUxFICopIGZwLT5mcCk7Ci0JCQlmcC0+ZnAgPSBOVUxMOwotCi0JCQlicmVhazsKLQkJY2FzZSBQ R19DT01QUkVTU0lPTl9HWklQOgotI2lmZGVmIEhBVkVfTElCWgotCQkJcmV0ID0gZ3pjbG9zZSgo Z3pGaWxlKSBmcC0+ZnApOwotCQkJZnAtPmZwID0gTlVMTDsKLSNlbHNlCi0JCQlwZ19mYXRhbCgi dGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLAotCQkJCQki Z3ppcCIpOwotI2VuZGlmCi0JCQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6Ci0J CQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJM WjQiKTsKLQkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX1pTVEQ6Ci0JCQlwZ19mYXRh bCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJaU1REIik7Ci0J CQlicmVhazsKKwkJZnJlZV9rZWVwX2Vycm5vKENGSCk7CisJCUNGSCA9IE5VTEw7CiAJfQorCWZy ZWVfa2VlcF9lcnJubyhmbmFtZSk7CiAKLQlmcmVlX2tlZXBfZXJybm8oZnApOwotCi0JcmV0dXJu IHJldDsKKwlyZXR1cm4gQ0ZIOwogfQogCiBpbnQKLWNmZW9mKGNmcCAqZnApCitEZXN0cm95Q29t cHJlc3NGaWxlSGFuZGxlKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQogewogCWludAkJCXJldCA9 IDA7CiAKLQlzd2l0Y2ggKGZwLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkKLQl7Ci0JCWNh c2UgUEdfQ09NUFJFU1NJT05fTk9ORToKLQkJCXJldCA9IGZlb2YoKEZJTEUgKikgZnAtPmZwKTsK KwlpZiAoQ0ZILT5wcml2YXRlX2RhdGEpCisJCXJldCA9IENGSC0+Y2xvc2VfZnVuYyhDRkgpOwog Ci0JCQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgotI2lmZGVmIEhBVkVfTElC WgotCQkJcmV0ID0gZ3plb2YoKGd6RmlsZSkgZnAtPmZwKTsKLSNlbHNlCi0JCQlwZ19mYXRhbCgi dGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLAotCQkJCQki Z3ppcCIpOwotI2VuZGlmCi0JCQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6Ci0J CQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJM WjQiKTsKLQkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX1pTVEQ6Ci0JCQlwZ19mYXRh bCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJaU1REIik7Ci0J CQlicmVhazsKLQl9CisJZnJlZV9rZWVwX2Vycm5vKENGSCk7CiAKIAlyZXR1cm4gcmV0OwogfQot Ci1jb25zdCBjaGFyICoKLWdldF9jZnBfZXJyb3IoY2ZwICpmcCkKLXsKLQlpZiAoZnAtPmNvbXBy ZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCi0JewotI2lmZGVm IEhBVkVfTElCWgotCQlpbnQJCQllcnJudW07Ci0JCWNvbnN0IGNoYXIgKmVycm1zZyA9IGd6ZXJy b3IoKGd6RmlsZSkgZnAtPmZwLCAmZXJybnVtKTsKLQotCQlpZiAoZXJybnVtICE9IFpfRVJSTk8p Ci0JCQlyZXR1cm4gZXJybXNnOwotI2Vsc2UKLQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBu b3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwgImd6aXAiKTsKLSNlbmRpZgotCX0KLQot CXJldHVybiBzdHJlcnJvcihlcnJubyk7Ci19Ci0KLSNpZmRlZiBIQVZFX0xJQloKLXN0YXRpYyBp bnQKLWhhc1N1ZmZpeChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqc3VmZml4KQot ewotCWludAkJCWZpbGVuYW1lbGVuID0gc3RybGVuKGZpbGVuYW1lKTsKLQlpbnQJCQlzdWZmaXhs ZW4gPSBzdHJsZW4oc3VmZml4KTsKLQotCWlmIChmaWxlbmFtZWxlbiA8IHN1ZmZpeGxlbikKLQkJ cmV0dXJuIDA7Ci0KLQlyZXR1cm4gbWVtY21wKCZmaWxlbmFtZVtmaWxlbmFtZWxlbiAtIHN1ZmZp eGxlbl0sCi0JCQkJICBzdWZmaXgsCi0JCQkJICBzdWZmaXhsZW4pID09IDA7Ci19Ci0KLSNlbmRp ZgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmggYi9zcmMvYmluL3Bn X2R1bXAvY29tcHJlc3NfaW8uaAppbmRleCA2ZmFkNmMyY2Q1Li42MmUzZGExYjFkIDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaAorKysgYi9zcmMvYmluL3BnX2R1bXAv Y29tcHJlc3NfaW8uaApAQCAtMzcsMzQgKzM3LDYzIEBAIHR5cGVkZWYgdm9pZCAoKldyaXRlRnVu YykgKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pOwogICov CiB0eXBlZGVmIHNpemVfdCAoKlJlYWRGdW5jKSAoQXJjaGl2ZUhhbmRsZSAqQUgsIGNoYXIgKipi dWYsIHNpemVfdCAqYnVmbGVuKTsKIAotLyogc3RydWN0IGRlZmluaXRpb24gYXBwZWFycyBpbiBj b21wcmVzc19pby5jICovCiB0eXBlZGVmIHN0cnVjdCBDb21wcmVzc29yU3RhdGUgQ29tcHJlc3Nv clN0YXRlOworc3RydWN0IENvbXByZXNzb3JTdGF0ZQoreworCS8qCisJICogUmVhZCBhbGwgY29t cHJlc3NlZCBkYXRhIGZyb20gdGhlIGlucHV0IHN0cmVhbSAodmlhIHJlYWRGKSBhbmQgcHJpbnQg aXQKKwkgKiBvdXQgd2l0aCBhaHdyaXRlKCkuCisJICovCisJdm9pZAkJKCpyZWFkRGF0YSkgKEFy Y2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKTsKKworCS8qCisJICogQ29tcHJl c3MgYW5kIHdyaXRlIGRhdGEgdG8gdGhlIG91dHB1dCBzdHJlYW0gKHZpYSB3cml0ZUYpLgorCSAq LworCXZvaWQJCSgqd3JpdGVEYXRhKSAoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0 ZSAqY3MsCisJCQkJCQkJICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbik7CisJdm9pZAkJ KCplbmQpIChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcyk7CisKKwlSZWFk RnVuYwlyZWFkRjsKKwlXcml0ZUZ1bmMJd3JpdGVGOworCisJcGdfY29tcHJlc3Nfc3BlY2lmaWNh dGlvbiBjb21wcmVzc2lvbl9zcGVjOworCXZvaWQJICAgKnByaXZhdGVfZGF0YTsKK307CiAKIGV4 dGVybiBDb21wcmVzc29yU3RhdGUgKkFsbG9jYXRlQ29tcHJlc3Nvcihjb25zdCBwZ19jb21wcmVz c19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCisJCQkJCQkJCQkJICAgUmVhZEZ1bmMg cmVhZEYsCiAJCQkJCQkJCQkJICAgV3JpdGVGdW5jIHdyaXRlRik7Ci1leHRlcm4gdm9pZCBSZWFk RGF0YUZyb21BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILAotCQkJCQkJCQljb25zdCBwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCi0JCQkJCQkJCVJlYWRGdW5jIHJl YWRGKTsKLWV4dGVybiB2b2lkIFdyaXRlRGF0YVRvQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwg Q29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJCQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qg ZExlbik7CiBleHRlcm4gdm9pZCBFbmRDb21wcmVzc29yKEFyY2hpdmVIYW5kbGUgKkFILCBDb21w cmVzc29yU3RhdGUgKmNzKTsKIAorLyoKKyAqIENvbXByZXNzIEZpbGUgSGFuZGxlCisgKi8KK3R5 cGVkZWYgc3RydWN0IENvbXByZXNzRmlsZUhhbmRsZSBDb21wcmVzc0ZpbGVIYW5kbGU7CisKK3N0 cnVjdCBDb21wcmVzc0ZpbGVIYW5kbGUKK3sKKwlpbnQJCQkoKm9wZW5fZnVuYykgKGNvbnN0IGNo YXIgKnBhdGgsIGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwKKwkJCQkJCQkgIENvbXByZXNzRmls ZUhhbmRsZSAqQ0ZIKTsKKwlpbnQJCQkoKm9wZW5fd3JpdGVfZnVuYykgKGNvbnN0IGNoYXIgKnBh dGgsIGNvbnN0IGNoYXIgKm1vZGUsCisJCQkJCQkJCQlDb21wcmVzc0ZpbGVIYW5kbGUgKmN4dCk7 CisJc2l6ZV90CQkoKnJlYWRfZnVuYykgKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNz RmlsZUhhbmRsZSAqQ0ZIKTsKKwlzaXplX3QJCSgqd3JpdGVfZnVuYykgKGNvbnN0IHZvaWQgKnB0 ciwgc2l6ZV90IHNpemUsCisJCQkJCQkJICAgc3RydWN0IENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZI KTsKKwljaGFyCSAgICooKmdldHNfZnVuYykgKGNoYXIgKnMsIGludCBzaXplLCBDb21wcmVzc0Zp bGVIYW5kbGUgKkNGSCk7CisJaW50CQkJKCpnZXRjX2Z1bmMpIChDb21wcmVzc0ZpbGVIYW5kbGUg KkNGSCk7CisJaW50CQkJKCplb2ZfZnVuYykgKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKwlp bnQJCQkoKmNsb3NlX2Z1bmMpIChDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCk7CisJY29uc3QgY2hh ciAqKCpnZXRfZXJyb3JfZnVuYykgKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKworCXBnX2Nv bXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYzsKKwl2b2lkCSAgICpwcml2YXRl X2RhdGE7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBjZnAgY2ZwOworZXh0ZXJuIENvbXByZXNzRmls ZUhhbmRsZSAqSW5pdENvbXByZXNzRmlsZUhhbmRsZSgKKwkJCQkJCQkJCQkJCSAgY29uc3QgcGdf Y29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKIAotZXh0ZXJuIGNmcCAq Y2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCi0JCQkJICAgY29uc3Qg cGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKLWV4dGVybiBjZnAg KmNmZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2RlLAotCQkJCQlwZ19jb21wcmVzc19zcGVj aWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOwotZXh0ZXJuIGNmcCAqY2ZvcGVuX3JlYWQoY29u c3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSk7Ci1leHRlcm4gY2ZwICpjZm9wZW5fd3Jp dGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwKLQkJCQkJCSBjb25zdCBwZ19j b21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOwotZXh0ZXJuIGludAljZnJl YWQodm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCk7Ci1leHRlcm4gaW50CWNmd3JpdGUoY29u c3Qgdm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCk7Ci1leHRlcm4gaW50CWNmZ2V0YyhjZnAg KmZwKTsKLWV4dGVybiBjaGFyICpjZmdldHMoY2ZwICpmcCwgY2hhciAqYnVmLCBpbnQgbGVuKTsK LWV4dGVybiBpbnQJY2ZjbG9zZShjZnAgKmZwKTsKLWV4dGVybiBpbnQJY2Zlb2YoY2ZwICpmcCk7 Ci1leHRlcm4gY29uc3QgY2hhciAqZ2V0X2NmcF9lcnJvcihjZnAgKmZwKTsKK2V4dGVybiBDb21w cmVzc0ZpbGVIYW5kbGUgKkluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZShjb25zdCBjaGFy ICpwYXRoLAorCQkJCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKm1vZGUpOwogCitleHRlcm4gaW50 CURlc3Ryb3lDb21wcmVzc0ZpbGVIYW5kbGUoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpOwogI2Vu ZGlmCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgYi9zcmMvYmluL3Bn X2R1bXAvbWVzb24uYnVpbGQKaW5kZXggZDk2ZTU2Njg0Ni4uMGM3M2E0NzA3ZSAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9tZXNv bi5idWlsZApAQCAtMSw1ICsxLDYgQEAKIHBnX2R1bXBfY29tbW9uX3NvdXJjZXMgPSBmaWxlcygK ICAgJ2NvbXByZXNzX2lvLmMnLAorICAnY29tcHJlc3NfZ3ppcC5jJywKICAgJ2R1bXB1dGlscy5j JywKICAgJ3BhcmFsbGVsLmMnLAogICAncGdfYmFja3VwX2FyY2hpdmVyLmMnLApkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9hcmNoaXZlci5jCmluZGV4IGZiOTQzMTdhZDkuLjFmMjA3YzZmNGQgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYworKysgYi9zcmMvYmlu L3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKQEAgLTk1LDggKzk1LDggQEAgc3RhdGljIHZv aWQgZHVtcF9sb19idWYoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcFRpbWVz dGFtcChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqbXNnLCB0aW1lX3QgdGltKTsKIHN0 YXRpYyB2b2lkIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5h bWUsCiAJCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9z cGVjKTsKLXN0YXRpYyBjZnAgKlNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgpOwotc3RhdGlj IHZvaWQgUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY2ZwICpzYXZlZE91dHB1dCk7 CitzdGF0aWMgQ29tcHJlc3NGaWxlSGFuZGxlICpTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFI KTsKK3N0YXRpYyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNz RmlsZUhhbmRsZSAqc2F2ZWRPdXRwdXQpOwogCiBzdGF0aWMgaW50CXJlc3RvcmVfdG9jX2VudHJ5 KEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUsIGJvb2wgaXNfcGFyYWxsZWwpOwogc3Rh dGljIHZvaWQgcmVzdG9yZV90b2NfZW50cmllc19wcmVmb3JrKEFyY2hpdmVIYW5kbGUgKkFILApA QCAtMjcyLDcgKzI3Miw3IEBAIENsb3NlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAKIAkvKiBDbG9z ZSB0aGUgb3V0cHV0ICovCiAJZXJybm8gPSAwOwotCXJlcyA9IGNmY2xvc2UoQUgtPk9GKTsKKwly ZXMgPSBEZXN0cm95Q29tcHJlc3NGaWxlSGFuZGxlKEFILT5PRik7CiAKIAlpZiAocmVzICE9IDAp CiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2Ugb3V0cHV0IGZpbGU6ICVtIik7CkBAIC0zNTUs NyArMzU1LDcgQEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCWJvb2wJCXBhcmFsbGVs X21vZGU7CiAJYm9vbAkJc3VwcG9ydHNfY29tcHJlc3Npb247CiAJVG9jRW50cnkgICAqdGU7Ci0J Y2ZwCQkgICAqc2F2OworCUNvbXByZXNzRmlsZUhhbmRsZSAqc2F2OwogCiAJQUgtPnN0YWdlID0g U1RBR0VfSU5JVElBTElaSU5HOwogCkBAIC0xMTI3LDcgKzExMjcsNyBAQCBQcmludFRPQ1N1bW1h cnkoQXJjaGl2ZSAqQUhYKQogCVRvY0VudHJ5ICAgKnRlOwogCXBnX2NvbXByZXNzX3NwZWNpZmlj YXRpb24gb3V0X2NvbXByZXNzaW9uX3NwZWMgPSB7MH07CiAJdGVTZWN0aW9uCWN1clNlY3Rpb247 Ci0JY2ZwCQkgICAqc2F2OworCUNvbXByZXNzRmlsZUhhbmRsZSAqc2F2OwogCWNvbnN0IGNoYXIg KmZtdE5hbWU7CiAJY2hhcgkJc3RhbXBfc3RyWzY0XTsKIApAQCAtMTE0Myw5ICsxMTQzLDEwIEBA IFByaW50VE9DU3VtbWFyeShBcmNoaXZlICpBSFgpCiAJCXN0cmNweShzdGFtcF9zdHIsICJbdW5r bm93bl0iKTsKIAogCWFocHJpbnRmKEFILCAiO1xuOyBBcmNoaXZlIGNyZWF0ZWQgYXQgJXNcbiIs IHN0YW1wX3N0cik7Ci0JYWhwcmludGYoQUgsICI7ICAgICBkYm5hbWU6ICVzXG47ICAgICBUT0Mg RW50cmllczogJWRcbjsgICAgIENvbXByZXNzaW9uOiAlZFxuIiwKKwlhaHByaW50ZihBSCwgIjsg ICAgIGRibmFtZTogJXNcbjsgICAgIFRPQyBFbnRyaWVzOiAlZFxuOyAgICAgQ29tcHJlc3Npb246 ICVzXG4iLAogCQkJIHNhbml0aXplX2xpbmUoQUgtPmFyY2hkYm5hbWUsIGZhbHNlKSwKLQkJCSBB SC0+dG9jQ291bnQsIEFILT5jb21wcmVzc2lvbl9zcGVjLmxldmVsKTsKKwkJCSBBSC0+dG9jQ291 bnQsCisJCQkgZ2V0X2NvbXByZXNzX2FsZ29yaXRobV9uYW1lKEFILT5jb21wcmVzc2lvbl9zcGVj LmFsZ29yaXRobSkpOwogCiAJc3dpdGNoIChBSC0+Zm9ybWF0KQogCXsKQEAgLTE1MDIsNiArMTUw Myw3IEBAIHN0YXRpYyB2b2lkCiBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNo YXIgKmZpbGVuYW1lLAogCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJl c3Npb25fc3BlYykKIHsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAljb25zdCBjaGFyICpt b2RlOwogCWludAkJCWZuID0gLTE7CiAKQEAgLTE1MjQsMzMgKzE1MjYsMzIgQEAgU2V0T3V0cHV0 KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKIAllbHNlCiAJCW1vZGUg PSBQR19CSU5BUllfVzsKIAotCWlmIChmbiA+PSAwKQotCQlBSC0+T0YgPSBjZmRvcGVuKGR1cChm biksIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOwotCWVsc2UKLQkJQUgtPk9GID0gY2ZvcGVuKGZp bGVuYW1lLCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKKwlDRkggPSBJbml0Q29tcHJlc3NGaWxl SGFuZGxlKGNvbXByZXNzaW9uX3NwZWMpOwogCi0JaWYgKCFBSC0+T0YpCisJaWYgKENGSC0+b3Bl bl9mdW5jKGZpbGVuYW1lLCBmbiwgbW9kZSwgQ0ZIKSkKIAl7CiAJCWlmIChmaWxlbmFtZSkKIAkJ CXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwgZmlsZW5h bWUpOwogCQllbHNlCiAJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGU6ICVt Iik7CiAJfQorCisJQUgtPk9GID0gQ0ZIOwogfQogCi1zdGF0aWMgY2ZwICoKK3N0YXRpYyBDb21w cmVzc0ZpbGVIYW5kbGUgKgogU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCkKIHsKLQlyZXR1 cm4gKGNmcCAqKSBBSC0+T0Y7CisJcmV0dXJuIChDb21wcmVzc0ZpbGVIYW5kbGUgKikgQUgtPk9G OwogfQogCiBzdGF0aWMgdm9pZAotUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY2Zw ICpzYXZlZE91dHB1dCkKK1Jlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNz RmlsZUhhbmRsZSAqc2F2ZWRPdXRwdXQpCiB7CiAJaW50CQkJcmVzOwogCiAJZXJybm8gPSAwOwot CXJlcyA9IGNmY2xvc2UoQUgtPk9GKTsKKwlyZXMgPSBEZXN0cm95Q29tcHJlc3NGaWxlSGFuZGxl KEFILT5PRik7CiAKIAlpZiAocmVzICE9IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2Ug b3V0cHV0IGZpbGU6ICVtIik7CkBAIC0xNjg5LDcgKzE2OTAsMTEgQEAgYWh3cml0ZShjb25zdCB2 b2lkICpwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIEFyY2hpdmVIYW5kbGUgKkFIKQog CWVsc2UgaWYgKFJlc3RvcmluZ1RvREIoQUgpKQogCQlieXRlc193cml0dGVuID0gRXhlY3V0ZVNx bENvbW1hbmRCdWYoJkFILT5wdWJsaWMsIChjb25zdCBjaGFyICopIHB0ciwgc2l6ZSAqIG5tZW1i KTsKIAllbHNlCi0JCWJ5dGVzX3dyaXR0ZW4gPSBjZndyaXRlKHB0ciwgc2l6ZSAqIG5tZW1iLCBB SC0+T0YpOworCXsKKwkJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkggPSAoQ29tcHJlc3NGaWxlSGFu ZGxlICopIEFILT5PRjsKKworCQlieXRlc193cml0dGVuID0gQ0ZILT53cml0ZV9mdW5jKHB0ciwg c2l6ZSAqIG5tZW1iLCBDRkgpOworCX0KIAogCWlmIChieXRlc193cml0dGVuICE9IHNpemUgKiBu bWVtYikKIAkJV1JJVEVfRVJST1JfRVhJVDsKQEAgLTIwMzEsNiArMjAzNiwxOCBAQCBSZWFkU3Ry KEFyY2hpdmVIYW5kbGUgKkFIKQogCXJldHVybiBidWY7CiB9CiAKK3N0YXRpYyBib29sCitfZmls ZUV4aXN0c0luRGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUp Cit7CisJc3RydWN0IHN0YXQgc3Q7CisJY2hhcgkJYnVmW01BWFBHUEFUSF07CisKKwlpZiAoc25w cmludGYoYnVmLCBNQVhQR1BBVEgsICIlcy8lcyIsIGRpciwgZmlsZW5hbWUpID49IE1BWFBHUEFU SCkKKwkJcGdfZmF0YWwoImRpcmVjdG9yeSBuYW1lIHRvbyBsb25nOiBcIiVzXCIiLCBkaXIpOwor CisJcmV0dXJuIChzdGF0KGJ1ZiwgJnN0KSA9PSAwICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkpOwor fQorCiBzdGF0aWMgaW50CiBfZGlzY292ZXJBcmNoaXZlRm9ybWF0KEFyY2hpdmVIYW5kbGUgKkFI KQogewpAQCAtMjA2MSwyNiArMjA3OCwxMiBAQCBfZGlzY292ZXJBcmNoaXZlRm9ybWF0KEFyY2hp dmVIYW5kbGUgKkFIKQogCQkgKi8KIAkJaWYgKHN0YXQoQUgtPmZTcGVjLCAmc3QpID09IDAgJiYg U19JU0RJUihzdC5zdF9tb2RlKSkKIAkJewotCQkJY2hhcgkJYnVmW01BWFBHUEFUSF07Ci0KLQkJ CWlmIChzbnByaW50ZihidWYsIE1BWFBHUEFUSCwgIiVzL3RvYy5kYXQiLCBBSC0+ZlNwZWMpID49 IE1BWFBHUEFUSCkKLQkJCQlwZ19mYXRhbCgiZGlyZWN0b3J5IG5hbWUgdG9vIGxvbmc6IFwiJXNc IiIsCi0JCQkJCQkgQUgtPmZTcGVjKTsKLQkJCWlmIChzdGF0KGJ1ZiwgJnN0KSA9PSAwICYmIFNf SVNSRUcoc3Quc3RfbW9kZSkpCi0JCQl7Ci0JCQkJQUgtPmZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7 CisJCQlBSC0+Zm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwkJCWlmIChfZmlsZUV4aXN0c0luRGly ZWN0b3J5KEFILT5mU3BlYywgInRvYy5kYXQiKSkKIAkJCQlyZXR1cm4gQUgtPmZvcm1hdDsKLQkJ CX0KLQogI2lmZGVmIEhBVkVfTElCWgotCQkJaWYgKHNucHJpbnRmKGJ1ZiwgTUFYUEdQQVRILCAi JXMvdG9jLmRhdC5neiIsIEFILT5mU3BlYykgPj0gTUFYUEdQQVRIKQotCQkJCXBnX2ZhdGFsKCJk aXJlY3RvcnkgbmFtZSB0b28gbG9uZzogXCIlc1wiIiwKLQkJCQkJCSBBSC0+ZlNwZWMpOwotCQkJ aWYgKHN0YXQoYnVmLCAmc3QpID09IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSkKLQkJCXsKLQkJ CQlBSC0+Zm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwkJCWlmIChfZmlsZUV4aXN0c0luRGlyZWN0 b3J5KEFILT5mU3BlYywgInRvYy5kYXQuZ3oiKSkKIAkJCQlyZXR1cm4gQUgtPmZvcm1hdDsKLQkJ CX0KICNlbmRpZgogCQkJcGdfZmF0YWwoImRpcmVjdG9yeSBcIiVzXCIgZG9lcyBub3QgYXBwZWFy IHRvIGJlIGEgdmFsaWQgYXJjaGl2ZSAoXCJ0b2MuZGF0XCIgZG9lcyBub3QgZXhpc3QpIiwKIAkJ CQkJIEFILT5mU3BlYyk7CkBAIC0yMTc4LDYgKzIxODEsNyBAQCBfYWxsb2NBSChjb25zdCBjaGFy ICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQsCiAJCSBTZXR1cFdvcmtlclB0clR5 cGUgc2V0dXBXb3JrZXJQdHIpCiB7CiAJQXJjaGl2ZUhhbmRsZSAqQUg7CisJQ29tcHJlc3NGaWxl SGFuZGxlICpDRkg7CiAJcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBvdXRfY29tcHJlc3Nfc3Bl YyA9IHswfTsKIAogCXBnX2xvZ19kZWJ1ZygiYWxsb2NhdGluZyBBSCBmb3IgJXMsIGZvcm1hdCAl ZCIsCkBAIC0yMjMzLDcgKzIyMzcsMTAgQEAgX2FsbG9jQUgoY29uc3QgY2hhciAqRmlsZVNwZWMs IGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10LAogCiAJLyogT3BlbiBzdGRvdXQgd2l0aCBubyBjb21w cmVzc2lvbiBmb3IgQUggb3V0cHV0IGhhbmRsZSAqLwogCW91dF9jb21wcmVzc19zcGVjLmFsZ29y aXRobSA9IFBHX0NPTVBSRVNTSU9OX05PTkU7Ci0JQUgtPk9GID0gY2Zkb3BlbihkdXAoZmlsZW5v KHN0ZG91dCkpLCBQR19CSU5BUllfQSwgb3V0X2NvbXByZXNzX3NwZWMpOworCUNGSCA9IEluaXRD b21wcmVzc0ZpbGVIYW5kbGUob3V0X2NvbXByZXNzX3NwZWMpOworCWlmIChDRkgtPm9wZW5fZnVu YyhOVUxMLCBmaWxlbm8oc3Rkb3V0KSwgUEdfQklOQVJZX0EsIENGSCkpCisJCXBnX2ZhdGFsKCJj b3VsZCBub3Qgb3BlbiBzdGRvdXQgZm9yIGFwcGVuZGluZzogJW0iKTsKKwlBSC0+T0YgPSBDRkg7 CiAKIAkvKgogCSAqIE9uIFdpbmRvd3MsIHdlIG5lZWQgdG8gdXNlIGJpbmFyeSBtb2RlIHRvIHJl YWQvd3JpdGUgbm9uLXRleHQgZmlsZXMsCkBAIC0zNjQ2LDEyICszNjUzLDcgQEAgV3JpdGVIZWFk KEFyY2hpdmVIYW5kbGUgKkFIKQogCUFILT5Xcml0ZUJ5dGVQdHIoQUgsIEFILT5pbnRTaXplKTsK IAlBSC0+V3JpdGVCeXRlUHRyKEFILCBBSC0+b2ZmU2l6ZSk7CiAJQUgtPldyaXRlQnl0ZVB0cihB SCwgQUgtPmZvcm1hdCk7Ci0JLyoKLQkgKiBGb3Igbm93IHRoZSBjb21wcmVzc2lvbiB0eXBlIGlz IGltcGxpZWQgYnkgdGhlIGxldmVsLiAgVGhpcyB3aWxsIG5lZWQKLQkgKiB0byBjaGFuZ2Ugb25j ZSBzdXBwb3J0IGZvciBtb3JlIGNvbXByZXNzaW9uIGFsZ29yaXRobXMgaXMgYWRkZWQsCi0JICog cmVxdWlyaW5nIGEgZm9ybWF0IGJ1bXAuCi0JICovCi0JV3JpdGVJbnQoQUgsIEFILT5jb21wcmVz c2lvbl9zcGVjLmxldmVsKTsKKwlBSC0+V3JpdGVCeXRlUHRyKEFILCBBSC0+Y29tcHJlc3Npb25f c3BlYy5hbGdvcml0aG0pOwogCWNydG0gPSAqbG9jYWx0aW1lKCZBSC0+Y3JlYXRlRGF0ZSk7CiAJ V3JpdGVJbnQoQUgsIGNydG0udG1fc2VjKTsKIAlXcml0ZUludChBSCwgY3J0bS50bV9taW4pOwpA QCAtMzcyMiwxMCArMzcyNCwxMSBAQCBSZWFkSGVhZChBcmNoaXZlSGFuZGxlICpBSCkKIAkJcGdf ZmF0YWwoImV4cGVjdGVkIGZvcm1hdCAoJWQpIGRpZmZlcnMgZnJvbSBmb3JtYXQgZm91bmQgaW4g ZmlsZSAoJWQpIiwKIAkJCQkgQUgtPmZvcm1hdCwgZm10KTsKIAotCS8qIEd1ZXNzIHRoZSBjb21w cmVzc2lvbiBtZXRob2QgYmFzZWQgb24gdGhlIGxldmVsICovCi0JQUgtPmNvbXByZXNzaW9uX3Nw ZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKLQlpZiAoQUgtPnZlcnNpb24gPj0g S19WRVJTXzFfMikKKwlpZiAoQUgtPnZlcnNpb24gPj0gS19WRVJTXzFfMTUpCisJCUFILT5jb21w cmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IEFILT5SZWFkQnl0ZVB0cihBSCk7CisJZWxzZSBpZiAo QUgtPnZlcnNpb24gPj0gS19WRVJTXzFfMikKIAl7CisJCS8qIEd1ZXNzIHRoZSBjb21wcmVzc2lv biBtZXRob2QgYmFzZWQgb24gdGhlIGxldmVsICovCiAJCWlmIChBSC0+dmVyc2lvbiA8IEtfVkVS U18xXzQpCiAJCQlBSC0+Y29tcHJlc3Npb25fc3BlYy5sZXZlbCA9IEFILT5SZWFkQnl0ZVB0cihB SCk7CiAJCWVsc2UKQEAgLTM3MzcsMTAgKzM3NDAsMTcgQEAgUmVhZEhlYWQoQXJjaGl2ZUhhbmRs ZSAqQUgpCiAJZWxzZQogCQlBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01Q UkVTU0lPTl9HWklQOwogCisJaWYgKEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSAhPSBQ R19DT01QUkVTU0lPTl9OT05FKQorCXsKKwkJYm9vbAkJdW5zdXBwb3J0ZWQgPSBmYWxzZTsKKwog I2lmbmRlZiBIQVZFX0xJQloKLQlpZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09 IFBHX0NPTVBSRVNTSU9OX0daSVApCi0JCXBnX2ZhdGFsKCJhcmNoaXZlIGlzIGNvbXByZXNzZWQs IGJ1dCB0aGlzIGluc3RhbGxhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIik7CisJ CWlmIChBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJ UCkKKwkJCXVuc3VwcG9ydGVkID0gdHJ1ZTsKICNlbmRpZgorCQlpZiAodW5zdXBwb3J0ZWQpCisJ CQlwZ19mYXRhbCgiYXJjaGl2ZSBpcyBjb21wcmVzc2VkLCBidXQgdGhpcyBpbnN0YWxsYXRpb24g ZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiIpOworCX0KIAogCWlmIChBSC0+dmVyc2lvbiA+ PSBLX1ZFUlNfMV80KQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf YXJjaGl2ZXIuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaAppbmRleCA0 NzI1ZTQ5NzQ3Li4xOGIzOGMxN2FiIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFj a3VwX2FyY2hpdmVyLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5o CkBAIC02NSwxMCArNjUsMTMgQEAKICNkZWZpbmUgS19WRVJTXzFfMTMgTUFLRV9BUkNISVZFX1ZF UlNJT04oMSwgMTMsIDApCS8qIGNoYW5nZSBzZWFyY2hfcGF0aAogCQkJCQkJCQkJCQkJCSAqIGJl aGF2aW9yICovCiAjZGVmaW5lIEtfVkVSU18xXzE0IE1BS0VfQVJDSElWRV9WRVJTSU9OKDEsIDE0 LCAwKQkvKiBhZGQgdGFibGVhbSAqLworI2RlZmluZSBLX1ZFUlNfMV8xNSBNQUtFX0FSQ0hJVkVf VkVSU0lPTigxLCAxNSwgMCkJLyogYWRkCisJCQkJCQkJCQkJCQkJICogY29tcHJlc3Npb25fYWxn b3JpdGhtCisJCQkJCQkJCQkJCQkJICogaW4gaGVhZGVyICovCiAKIC8qIEN1cnJlbnQgYXJjaGl2 ZSB2ZXJzaW9uIG51bWJlciAodGhlIGZvcm1hdCB3ZSBjYW4gb3V0cHV0KSAqLwogI2RlZmluZSBL X1ZFUlNfTUFKT1IgMQotI2RlZmluZSBLX1ZFUlNfTUlOT1IgMTQKKyNkZWZpbmUgS19WRVJTX01J Tk9SIDE1CiAjZGVmaW5lIEtfVkVSU19SRVYgMAogI2RlZmluZSBLX1ZFUlNfU0VMRiBNQUtFX0FS Q0hJVkVfVkVSU0lPTihLX1ZFUlNfTUFKT1IsIEtfVkVSU19NSU5PUiwgS19WRVJTX1JFVikKIApk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYyBiL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9tLmMKaW5kZXggZDFlNTQ2NDRhOS4uNTEyYWIwNDNhZiAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYworKysgYi9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2N1c3RvbS5jCkBAIC0yOTgsNyArMjk4LDkgQEAgX1N0YXJ0 RGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogCV9Xcml0ZUJ5dGUoQUgsIEJM S19EQVRBKTsJLyogQmxvY2sgdHlwZSAqLwogCVdyaXRlSW50KEFILCB0ZS0+ZHVtcElkKTsJLyog Rm9yIHNhbml0eSBjaGVjayAqLwogCi0JY3R4LT5jcyA9IEFsbG9jYXRlQ29tcHJlc3NvcihBSC0+ Y29tcHJlc3Npb25fc3BlYywgX0N1c3RvbVdyaXRlRnVuYyk7CisJY3R4LT5jcyA9IEFsbG9jYXRl Q29tcHJlc3NvcihBSC0+Y29tcHJlc3Npb25fc3BlYywKKwkJCQkJCQkJIE5VTEwsCisJCQkJCQkJ CSBfQ3VzdG9tV3JpdGVGdW5jKTsKIH0KIAogLyoKQEAgLTMxNywxNSArMzE5LDE1IEBAIF9Xcml0 ZURhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKQog CUNvbXByZXNzb3JTdGF0ZSAqY3MgPSBjdHgtPmNzOwogCiAJaWYgKGRMZW4gPiAwKQotCQkvKiBX cml0ZURhdGFUb0FyY2hpdmUoKSBpbnRlcm5hbGx5IHRocm93cyB3cml0ZSBlcnJvcnMgKi8KLQkJ V3JpdGVEYXRhVG9BcmNoaXZlKEFILCBjcywgZGF0YSwgZExlbik7CisJCS8qIHdyaXRlRGF0YSgp IGludGVybmFsbHkgdGhyb3dzIHdyaXRlIGVycm9ycyAqLworCQljcy0+d3JpdGVEYXRhKEFILCBj cywgZGF0YSwgZExlbik7CiB9CiAKIC8qCiAgKiBDYWxsZWQgYnkgdGhlIGFyY2hpdmVyIHdoZW4g YSBkdW1wZXIncyAnRGF0YUR1bXBlcicgcm91dGluZSBoYXMKICAqIGZpbmlzaGVkLgogICoKLSAq IE9wdGlvbmFsLgorICogTWFuZGF0b3J5LgogICovCiBzdGF0aWMgdm9pZAogX0VuZERhdGEoQXJj aGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKQEAgLTMzMyw2ICszMzUsOCBAQCBfRW5kRGF0 YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogCWxjbENvbnRleHQgKmN0eCA9IChs Y2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOwogCiAJRW5kQ29tcHJlc3NvcihBSCwgY3R4LT5j cyk7CisJY3R4LT5jcyA9IE5VTEw7CisKIAkvKiBTZW5kIHRoZSBlbmQgbWFya2VyICovCiAJV3Jp dGVJbnQoQUgsIDApOwogfQpAQCAtMzc3LDcgKzM4MSw5IEBAIF9TdGFydExPKEFyY2hpdmVIYW5k bGUgKkFILCBUb2NFbnRyeSAqdGUsIE9pZCBvaWQpCiAKIAlXcml0ZUludChBSCwgb2lkKTsKIAot CWN0eC0+Y3MgPSBBbGxvY2F0ZUNvbXByZXNzb3IoQUgtPmNvbXByZXNzaW9uX3NwZWMsIF9DdXN0 b21Xcml0ZUZ1bmMpOworCWN0eC0+Y3MgPSBBbGxvY2F0ZUNvbXByZXNzb3IoQUgtPmNvbXByZXNz aW9uX3NwZWMsCisJCQkJCQkJCSBOVUxMLAorCQkJCQkJCQkgX0N1c3RvbVdyaXRlRnVuYyk7CiB9 CiAKIC8qCkBAIC01NjYsNyArNTcyLDEyIEBAIF9QcmludFRvY0RhdGEoQXJjaGl2ZUhhbmRsZSAq QUgsIFRvY0VudHJ5ICp0ZSkKIHN0YXRpYyB2b2lkCiBfUHJpbnREYXRhKEFyY2hpdmVIYW5kbGUg KkFIKQogewotCVJlYWREYXRhRnJvbUFyY2hpdmUoQUgsIEFILT5jb21wcmVzc2lvbl9zcGVjLCBf Q3VzdG9tUmVhZEZ1bmMpOworCUNvbXByZXNzb3JTdGF0ZSAqY3M7CisKKwljcyA9IEFsbG9jYXRl Q29tcHJlc3NvcihBSC0+Y29tcHJlc3Npb25fc3BlYywKKwkJCQkJCQlfQ3VzdG9tUmVhZEZ1bmMs IE5VTEwpOworCWNzLT5yZWFkRGF0YShBSCwgY3MpOworCUVuZENvbXByZXNzb3IoQUgsIGNzKTsK IH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf ZGlyZWN0b3J5LmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RpcmVjdG9yeS5jCmluZGV4 IGY2YWVlNzc1ZWIuLmI2ZDAyNTU3NmYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfZGlyZWN0b3J5LmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3Rv cnkuYwpAQCAtNTAsOSArNTAsOCBAQCB0eXBlZGVmIHN0cnVjdAogCSAqLwogCWNoYXIJICAgKmRp cmVjdG9yeTsKIAotCWNmcAkJICAgKmRhdGFGSDsJCQkvKiBjdXJyZW50bHkgb3BlbiBkYXRhIGZp bGUgKi8KLQotCWNmcAkJICAgKkxPc1RvY0ZIOwkJLyogZmlsZSBoYW5kbGUgZm9yIGJsb2JzLnRv YyAqLworCUNvbXByZXNzRmlsZUhhbmRsZSAqZGF0YUZIOyAvKiBjdXJyZW50bHkgb3BlbiBkYXRh IGZpbGUgKi8KKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkxPc1RvY0ZIOyAvKiBmaWxlIGhhbmRsZSBm b3IgYmxvYnMudG9jICovCiAJUGFyYWxsZWxTdGF0ZSAqcHN0YXRlOwkJLyogZm9yIHBhcmFsbGVs IGJhY2t1cCAvIHJlc3RvcmUgKi8KIH0gbGNsQ29udGV4dDsKIApAQCAtMTk4LDExICsxOTcsMTEg QEAgSW5pdEFyY2hpdmVGbXRfRGlyZWN0b3J5KEFyY2hpdmVIYW5kbGUgKkFIKQogCWVsc2UKIAl7 CQkJCQkJCS8qIFJlYWQgTW9kZSAqLwogCQljaGFyCQlmbmFtZVtNQVhQR1BBVEhdOwotCQljZnAJ CSAgICp0b2NGSDsKKwkJQ29tcHJlc3NGaWxlSGFuZGxlICp0b2NGSDsKIAogCQlzZXRGaWxlUGF0 aChBSCwgZm5hbWUsICJ0b2MuZGF0Iik7CiAKLQkJdG9jRkggPSBjZm9wZW5fcmVhZChmbmFtZSwg UEdfQklOQVJZX1IpOworCQl0b2NGSCA9IEluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZShm bmFtZSwgUEdfQklOQVJZX1IpOwogCQlpZiAodG9jRkggPT0gTlVMTCkKIAkJCXBnX2ZhdGFsKCJj b3VsZCBub3Qgb3BlbiBpbnB1dCBmaWxlIFwiJXNcIjogJW0iLCBmbmFtZSk7CiAKQEAgLTIxOCw3 ICsyMTcsNyBAQCBJbml0QXJjaGl2ZUZtdF9EaXJlY3RvcnkoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJ CVJlYWRUb2MoQUgpOwogCiAJCS8qIE5vdGhpbmcgZWxzZSBpbiB0aGUgZmlsZSwgc28gY2xvc2Ug aXQgYWdhaW4uLi4gKi8KLQkJaWYgKGNmY2xvc2UodG9jRkgpICE9IDApCisJCWlmIChEZXN0cm95 Q29tcHJlc3NGaWxlSGFuZGxlKHRvY0ZIKSAhPSAwKQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBj bG9zZSBUT0MgZmlsZTogJW0iKTsKIAkJY3R4LT5kYXRhRkggPSBOVUxMOwogCX0KQEAgLTMyNyw5 ICszMjYsOSBAQCBfU3RhcnREYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUpCiAK IAlzZXRGaWxlUGF0aChBSCwgZm5hbWUsIHRjdHgtPmZpbGVuYW1lKTsKIAotCWN0eC0+ZGF0YUZI ID0gY2ZvcGVuX3dyaXRlKGZuYW1lLCBQR19CSU5BUllfVywKLQkJCQkJCQkgICBBSC0+Y29tcHJl c3Npb25fc3BlYyk7Ci0JaWYgKGN0eC0+ZGF0YUZIID09IE5VTEwpCisJY3R4LT5kYXRhRkggPSBJ bml0Q29tcHJlc3NGaWxlSGFuZGxlKEFILT5jb21wcmVzc2lvbl9zcGVjKTsKKworCWlmIChjdHgt PmRhdGFGSC0+b3Blbl93cml0ZV9mdW5jKGZuYW1lLCBQR19CSU5BUllfVywgY3R4LT5kYXRhRkgp KQogCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZu YW1lKTsKIH0KIApAQCAtMzQ2LDE1ICszNDUsMTYgQEAgc3RhdGljIHZvaWQKIF9Xcml0ZURhdGEo QXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKQogewogCWxj bENvbnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXByZXNz RmlsZUhhbmRsZSAqQ0ZIID0gY3R4LT5kYXRhRkg7CiAKIAllcnJubyA9IDA7Ci0JaWYgKGRMZW4g PiAwICYmIGNmd3JpdGUoZGF0YSwgZExlbiwgY3R4LT5kYXRhRkgpICE9IGRMZW4pCisJaWYgKGRM ZW4gPiAwICYmIENGSC0+d3JpdGVfZnVuYyhkYXRhLCBkTGVuLCBDRkgpICE9IGRMZW4pCiAJewog CQkvKiBpZiB3cml0ZSBkaWRuJ3Qgc2V0IGVycm5vLCBhc3N1bWUgcHJvYmxlbSBpcyBubyBkaXNr IHNwYWNlICovCiAJCWlmIChlcnJubyA9PSAwKQogCQkJZXJybm8gPSBFTk9TUEM7CiAJCXBnX2Zh dGFsKCJjb3VsZCBub3Qgd3JpdGUgdG8gb3V0cHV0IGZpbGU6ICVzIiwKLQkJCQkgZ2V0X2NmcF9l cnJvcihjdHgtPmRhdGFGSCkpOworCQkJCSBDRkgtPmdldF9lcnJvcl9mdW5jKENGSCkpOwogCX0K IH0KIApAQCAtMzcwLDcgKzM3MCw3IEBAIF9FbmREYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NF bnRyeSAqdGUpCiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERh dGE7CiAKIAkvKiBDbG9zZSB0aGUgZmlsZSAqLwotCWlmIChjZmNsb3NlKGN0eC0+ZGF0YUZIKSAh PSAwKQorCWlmIChEZXN0cm95Q29tcHJlc3NGaWxlSGFuZGxlKGN0eC0+ZGF0YUZIKSAhPSAwKQog CQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGRhdGEgZmlsZTogJW0iKTsKIAogCWN0eC0+ZGF0 YUZIID0gTlVMTDsKQEAgLTM4NSwyNiArMzg1LDI1IEBAIF9QcmludEZpbGVEYXRhKEFyY2hpdmVI YW5kbGUgKkFILCBjaGFyICpmaWxlbmFtZSkKIAlzaXplX3QJCWNudDsKIAljaGFyCSAgICpidWY7 CiAJc2l6ZV90CQlidWZsZW47Ci0JY2ZwCQkgICAqY2ZwOworCUNvbXByZXNzRmlsZUhhbmRsZSAq Q0ZIOwogCiAJaWYgKCFmaWxlbmFtZSkKIAkJcmV0dXJuOwogCi0JY2ZwID0gY2ZvcGVuX3JlYWQo ZmlsZW5hbWUsIFBHX0JJTkFSWV9SKTsKLQotCWlmICghY2ZwKQorCUNGSCA9IEluaXREaXNjb3Zl ckNvbXByZXNzRmlsZUhhbmRsZShmaWxlbmFtZSwgUEdfQklOQVJZX1IpOworCWlmICghQ0ZIKQog CQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gaW5wdXQgZmlsZSBcIiVzXCI6ICVtIiwgZmlsZW5h bWUpOwogCiAJYnVmID0gcGdfbWFsbG9jKFpMSUJfT1VUX1NJWkUpOwogCWJ1ZmxlbiA9IFpMSUJf T1VUX1NJWkU7CiAKLQl3aGlsZSAoKGNudCA9IGNmcmVhZChidWYsIGJ1ZmxlbiwgY2ZwKSkpCisJ d2hpbGUgKChjbnQgPSBDRkgtPnJlYWRfZnVuYyhidWYsIGJ1ZmxlbiwgQ0ZIKSkpCiAJewogCQlh aHdyaXRlKGJ1ZiwgMSwgY250LCBBSCk7CiAJfQogCiAJZnJlZShidWYpOwotCWlmIChjZmNsb3Nl KGNmcCkgIT0gMCkKKwlpZiAoRGVzdHJveUNvbXByZXNzRmlsZUhhbmRsZShDRkgpICE9IDApCiAJ CXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgZGF0YSBmaWxlIFwiJXNcIjogJW0iLCBmaWxlbmFt ZSk7CiB9CiAKQEAgLTQzNSw2ICs0MzQsNyBAQCBfTG9hZExPcyhBcmNoaXZlSGFuZGxlICpBSCkK IHsKIAlPaWQJCQlvaWQ7CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZv cm1hdERhdGE7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkg7CiAJY2hhcgkJdG9jZm5hbWVbTUFY UEdQQVRIXTsKIAljaGFyCQlsaW5lW01BWFBHUEFUSF07CiAKQEAgLTQ0MiwxNCArNDQyLDE0IEBA IF9Mb2FkTE9zKEFyY2hpdmVIYW5kbGUgKkFIKQogCiAJc2V0RmlsZVBhdGgoQUgsIHRvY2ZuYW1l LCAiYmxvYnMudG9jIik7CiAKLQljdHgtPkxPc1RvY0ZIID0gY2ZvcGVuX3JlYWQodG9jZm5hbWUs IFBHX0JJTkFSWV9SKTsKKwlDRkggPSBjdHgtPkxPc1RvY0ZIID0gSW5pdERpc2NvdmVyQ29tcHJl c3NGaWxlSGFuZGxlKHRvY2ZuYW1lLCBQR19CSU5BUllfUik7CiAKIAlpZiAoY3R4LT5MT3NUb2NG SCA9PSBOVUxMKQogCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gbGFyZ2Ugb2JqZWN0IFRPQyBm aWxlIFwiJXNcIiBmb3IgaW5wdXQ6ICVtIiwKIAkJCQkgdG9jZm5hbWUpOwogCiAJLyogUmVhZCB0 aGUgTE9zIFRPQyBmaWxlIGxpbmUtYnktbGluZSwgYW5kIHByb2Nlc3MgZWFjaCBMTyAqLwotCXdo aWxlICgoY2ZnZXRzKGN0eC0+TE9zVG9jRkgsIGxpbmUsIE1BWFBHUEFUSCkpICE9IE5VTEwpCisJ d2hpbGUgKChDRkgtPmdldHNfZnVuYyhsaW5lLCBNQVhQR1BBVEgsIENGSCkpICE9IE5VTEwpCiAJ ewogCQljaGFyCQlsb2ZuYW1lW01BWFBHUEFUSCArIDFdOwogCQljaGFyCQlwYXRoW01BWFBHUEFU SF07CkBAIC00NjQsMTEgKzQ2NCwxMSBAQCBfTG9hZExPcyhBcmNoaXZlSGFuZGxlICpBSCkKIAkJ X1ByaW50RmlsZURhdGEoQUgsIHBhdGgpOwogCQlFbmRSZXN0b3JlTE8oQUgsIG9pZCk7CiAJfQot CWlmICghY2Zlb2YoY3R4LT5MT3NUb2NGSCkpCisJaWYgKCFDRkgtPmVvZl9mdW5jKENGSCkpCiAJ CXBnX2ZhdGFsKCJlcnJvciByZWFkaW5nIGxhcmdlIG9iamVjdCBUT0MgZmlsZSBcIiVzXCIiLAog CQkJCSB0b2NmbmFtZSk7CiAKLQlpZiAoY2ZjbG9zZShjdHgtPkxPc1RvY0ZIKSAhPSAwKQorCWlm IChEZXN0cm95Q29tcHJlc3NGaWxlSGFuZGxlKGN0eC0+TE9zVG9jRkgpICE9IDApCiAJCXBnX2Zh dGFsKCJjb3VsZCBub3QgY2xvc2UgbGFyZ2Ugb2JqZWN0IFRPQyBmaWxlIFwiJXNcIjogJW0iLAog CQkJCSB0b2NmbmFtZSk7CiAKQEAgLTQ4OCwxNSArNDg4LDE2IEBAIF9Xcml0ZUJ5dGUoQXJjaGl2 ZUhhbmRsZSAqQUgsIGNvbnN0IGludCBpKQogewogCXVuc2lnbmVkIGNoYXIgYyA9ICh1bnNpZ25l ZCBjaGFyKSBpOwogCWxjbENvbnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXRE YXRhOworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIID0gY3R4LT5kYXRhRkg7CiAKIAllcnJubyA9 IDA7Ci0JaWYgKGNmd3JpdGUoJmMsIDEsIGN0eC0+ZGF0YUZIKSAhPSAxKQorCWlmIChDRkgtPndy aXRlX2Z1bmMoJmMsIDEsIENGSCkgIT0gMSkKIAl7CiAJCS8qIGlmIHdyaXRlIGRpZG4ndCBzZXQg ZXJybm8sIGFzc3VtZSBwcm9ibGVtIGlzIG5vIGRpc2sgc3BhY2UgKi8KIAkJaWYgKGVycm5vID09 IDApCiAJCQllcnJubyA9IEVOT1NQQzsKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSB0byBv dXRwdXQgZmlsZTogJXMiLAotCQkJCSBnZXRfY2ZwX2Vycm9yKGN0eC0+ZGF0YUZIKSk7CisJCQkJ IENGSC0+Z2V0X2Vycm9yX2Z1bmMoQ0ZIKSk7CiAJfQogCiAJcmV0dXJuIDE7CkBAIC01MTIsOCAr NTEzLDkgQEAgc3RhdGljIGludAogX1JlYWRCeXRlKEFyY2hpdmVIYW5kbGUgKkFIKQogewogCWxj bENvbnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXByZXNz RmlsZUhhbmRsZSAqQ0ZIID0gY3R4LT5kYXRhRkg7CiAKLQlyZXR1cm4gY2ZnZXRjKGN0eC0+ZGF0 YUZIKTsKKwlyZXR1cm4gQ0ZILT5nZXRjX2Z1bmMoQ0ZIKTsKIH0KIAogLyoKQEAgLTUyNCwxNSAr NTI2LDE2IEBAIHN0YXRpYyB2b2lkCiBfV3JpdGVCdWYoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0 IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4 dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9IGN0eC0+ZGF0 YUZIOwogCiAJZXJybm8gPSAwOwotCWlmIChjZndyaXRlKGJ1ZiwgbGVuLCBjdHgtPmRhdGFGSCkg IT0gbGVuKQorCWlmIChDRkgtPndyaXRlX2Z1bmMoYnVmLCBsZW4sIENGSCkgIT0gbGVuKQogCXsK IAkJLyogaWYgd3JpdGUgZGlkbid0IHNldCBlcnJubywgYXNzdW1lIHByb2JsZW0gaXMgbm8gZGlz ayBzcGFjZSAqLwogCQlpZiAoZXJybm8gPT0gMCkKIAkJCWVycm5vID0gRU5PU1BDOwogCQlwZ19m YXRhbCgiY291bGQgbm90IHdyaXRlIHRvIG91dHB1dCBmaWxlOiAlcyIsCi0JCQkJIGdldF9jZnBf ZXJyb3IoY3R4LT5kYXRhRkgpKTsKKwkJCQkgQ0ZILT5nZXRfZXJyb3JfZnVuYyhDRkgpKTsKIAl9 CiB9CiAKQEAgLTU0NSwxMiArNTQ4LDEzIEBAIHN0YXRpYyB2b2lkCiBfUmVhZEJ1ZihBcmNoaXZl SGFuZGxlICpBSCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQogewogCWxjbENvbnRleHQgKmN0eCA9 IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZI ID0gY3R4LT5kYXRhRkg7CiAKIAkvKgotCSAqIElmIHRoZXJlIHdhcyBhbiBJL08gZXJyb3IsIHdl IGFscmVhZHkgZXhpdGVkIGluIGNmcmVhZCgpLCBzbyBoZXJlIHdlCisJICogSWYgdGhlcmUgd2Fz IGFuIEkvTyBlcnJvciwgd2UgYWxyZWFkeSBleGl0ZWQgaW4gcmVhZEYoKSwgc28gaGVyZSB3ZQog CSAqIGV4aXQgb24gc2hvcnQgcmVhZHMuCiAJICovCi0JaWYgKGNmcmVhZChidWYsIGxlbiwgY3R4 LT5kYXRhRkgpICE9IGxlbikKKwlpZiAoQ0ZILT5yZWFkX2Z1bmMoYnVmLCBsZW4sIENGSCkgIT0g bGVuKQogCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiBlbmQgb2Yg ZmlsZSIpOwogfQogCkBAIC01NzMsNyArNTc3LDcgQEAgX0Nsb3NlQXJjaGl2ZShBcmNoaXZlSGFu ZGxlICpBSCkKIAogCWlmIChBSC0+bW9kZSA9PSBhcmNoTW9kZVdyaXRlKQogCXsKLQkJY2ZwCQkg ICAqdG9jRkg7CisJCUNvbXByZXNzRmlsZUhhbmRsZSAqdG9jRkg7CiAJCXBnX2NvbXByZXNzX3Nw ZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyA9IHswfTsKIAkJY2hhcgkJZm5hbWVbTUFYUEdQ QVRIXTsKIApAQCAtNTg0LDggKzU4OCw4IEBAIF9DbG9zZUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAq QUgpCiAKIAkJLyogVGhlIFRPQyBpcyBhbHdheXMgY3JlYXRlZCB1bmNvbXByZXNzZWQgKi8KIAkJ Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOwotCQl0b2NG SCA9IGNmb3Blbl93cml0ZShmbmFtZSwgUEdfQklOQVJZX1csIGNvbXByZXNzaW9uX3NwZWMpOwot CQlpZiAodG9jRkggPT0gTlVMTCkKKwkJdG9jRkggPSBJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNv bXByZXNzaW9uX3NwZWMpOworCQlpZiAodG9jRkgtPm9wZW5fd3JpdGVfZnVuYyhmbmFtZSwgUEdf QklOQVJZX1csIHRvY0ZIKSkKIAkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmls ZSBcIiVzXCI6ICVtIiwgZm5hbWUpOwogCQljdHgtPmRhdGFGSCA9IHRvY0ZIOwogCkBAIC01OTgs NyArNjAyLDcgQEAgX0Nsb3NlQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCkKIAkJV3JpdGVIZWFk KEFIKTsKIAkJQUgtPmZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CiAJCVdyaXRlVG9jKEFIKTsKLQkJ aWYgKGNmY2xvc2UodG9jRkgpICE9IDApCisJCWlmIChEZXN0cm95Q29tcHJlc3NGaWxlSGFuZGxl KHRvY0ZIKSAhPSAwKQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBUT0MgZmlsZTogJW0i KTsKIAkJV3JpdGVEYXRhQ2h1bmtzKEFILCBjdHgtPnBzdGF0ZSk7CiAKQEAgLTY0OSw4ICs2NTMs OCBAQCBfU3RhcnRMT3MoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIAogCS8qIFRo ZSBMTyBUT0MgZmlsZSBpcyBuZXZlciBjb21wcmVzc2VkICovCiAJY29tcHJlc3Npb25fc3BlYy5h bGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOwotCWN0eC0+TE9zVG9jRkggPSBjZm9wZW5f d3JpdGUoZm5hbWUsICJhYiIsIGNvbXByZXNzaW9uX3NwZWMpOwotCWlmIChjdHgtPkxPc1RvY0ZI ID09IE5VTEwpCisJY3R4LT5MT3NUb2NGSCA9IEluaXRDb21wcmVzc0ZpbGVIYW5kbGUoY29tcHJl c3Npb25fc3BlYyk7CisJaWYgKGN0eC0+TE9zVG9jRkgtPm9wZW5fd3JpdGVfZnVuYyhmbmFtZSwg ImFiIiwgY3R4LT5MT3NUb2NGSCkpCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQg ZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUpOwogfQogCkBAIC02NjcsOSArNjcxLDggQEAgX1N0YXJ0 TE8oQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwgT2lkIG9pZCkKIAogCXNucHJpbnRm KGZuYW1lLCBNQVhQR1BBVEgsICIlcy9ibG9iXyV1LmRhdCIsIGN0eC0+ZGlyZWN0b3J5LCBvaWQp OwogCi0JY3R4LT5kYXRhRkggPSBjZm9wZW5fd3JpdGUoZm5hbWUsIFBHX0JJTkFSWV9XLCBBSC0+ Y29tcHJlc3Npb25fc3BlYyk7Ci0KLQlpZiAoY3R4LT5kYXRhRkggPT0gTlVMTCkKKwljdHgtPmRh dGFGSCA9IEluaXRDb21wcmVzc0ZpbGVIYW5kbGUoQUgtPmNvbXByZXNzaW9uX3NwZWMpOworCWlm IChjdHgtPmRhdGFGSC0+b3Blbl93cml0ZV9mdW5jKGZuYW1lLCBQR19CSU5BUllfVywgY3R4LT5k YXRhRkgpKQogCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAl bSIsIGZuYW1lKTsKIH0KIApAQCAtNjgyLDE4ICs2ODUsMTkgQEAgc3RhdGljIHZvaWQKIF9FbmRM TyhBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlLCBPaWQgb2lkKQogewogCWxjbENvbnRl eHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXByZXNzRmlsZUhh bmRsZSAqQ0ZIID0gY3R4LT5MT3NUb2NGSDsKIAljaGFyCQlidWZbNTBdOwogCWludAkJCWxlbjsK IAotCS8qIENsb3NlIHRoZSBMTyBkYXRhIGZpbGUgaXRzZWxmICovCi0JaWYgKGNmY2xvc2UoY3R4 LT5kYXRhRkgpICE9IDApCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgTE8gZGF0YSBmaWxl OiAlbSIpOworCS8qIENsb3NlIHRoZSBCTE9CIGRhdGEgZmlsZSBpdHNlbGYgKi8KKwlpZiAoRGVz dHJveUNvbXByZXNzRmlsZUhhbmRsZShjdHgtPmRhdGFGSCkgIT0gMCkKKwkJcGdfZmF0YWwoImNv dWxkIG5vdCBjbG9zZSBibG9iIGRhdGEgZmlsZTogJW0iKTsKIAljdHgtPmRhdGFGSCA9IE5VTEw7 CiAKIAkvKiByZWdpc3RlciB0aGUgTE8gaW4gYmxvYnMudG9jICovCiAJbGVuID0gc25wcmludGYo YnVmLCBzaXplb2YoYnVmKSwgIiV1IGJsb2JfJXUuZGF0XG4iLCBvaWQsIG9pZCk7Ci0JaWYgKGNm d3JpdGUoYnVmLCBsZW4sIGN0eC0+TE9zVG9jRkgpICE9IGxlbikKLQkJcGdfZmF0YWwoImNvdWxk IG5vdCB3cml0ZSB0byBMT3MgVE9DIGZpbGUiKTsKKwlpZiAoQ0ZILT53cml0ZV9mdW5jKGJ1Ziwg bGVuLCBDRkgpICE9IGxlbikKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSB0byBibG9icyBU T0MgZmlsZSIpOwogfQogCiAvKgpAQCAtNzA2LDggKzcxMCw4IEBAIF9FbmRMT3MoQXJjaGl2ZUhh bmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIHsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4 dCAqKSBBSC0+Zm9ybWF0RGF0YTsKIAotCWlmIChjZmNsb3NlKGN0eC0+TE9zVG9jRkgpICE9IDAp Ci0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgTE9zIFRPQyBmaWxlOiAlbSIpOworCWlmIChE ZXN0cm95Q29tcHJlc3NGaWxlSGFuZGxlKGN0eC0+TE9zVG9jRkgpICE9IDApCisJCXBnX2ZhdGFs KCJjb3VsZCBub3QgY2xvc2UgYmxvYnMgVE9DIGZpbGU6ICVtIik7CiAJY3R4LT5MT3NUb2NGSCA9 IE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBs IGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKaW5kZXggMWM3ZmM3MjhjMi4uMzlk YWExZmM0MyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKKysr IGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKQEAgLTk0LDcgKzk0LDcgQEAgbXkg JXBnZHVtcF9ydW5zID0gKAogCQkJY29tbWFuZCA9PiBbCiAJCQkJJ3BnX3Jlc3RvcmUnLCAnLWwn LCAiJHRlbXBkaXIvY29tcHJlc3Npb25fZ3ppcF9jdXN0b20uZHVtcCIsCiAJCQldLAotCQkJZXhw ZWN0ZWQgPT4gcXIvQ29tcHJlc3Npb246IDEvLAorCQkJZXhwZWN0ZWQgPT4gcXIvQ29tcHJlc3Np b246IGd6aXAvLAogCQkJbmFtZSAgICAgPT4gJ2RhdGEgY29udGVudCBpcyBnemlwLWNvbXByZXNz ZWQnCiAJCX0sCiAJfSwKQEAgLTIzOSw4ICsyMzksOCBAQCBteSAlcGdkdW1wX3J1bnMgPSAoCiAJ CQljb21tYW5kID0+CiAJCQkgIFsgJ3BnX3Jlc3RvcmUnLCAnLWwnLCAiJHRlbXBkaXIvZGVmYXVs dHNfY3VzdG9tX2Zvcm1hdC5kdW1wIiwgXSwKIAkJCWV4cGVjdGVkID0+ICRzdXBwb3J0c19nemlw ID8KLQkJCXFyL0NvbXByZXNzaW9uOiAtMS8gOgotCQkJcXIvQ29tcHJlc3Npb246IDAvLAorCQkJ cXIvQ29tcHJlc3Npb246IGd6aXAvIDoKKwkJCXFyL0NvbXByZXNzaW9uOiBub25lLywKIAkJCW5h bWUgPT4gJ2RhdGEgY29udGVudCBpcyBnemlwLWNvbXByZXNzZWQgYnkgZGVmYXVsdCBpZiBhdmFp bGFibGUnLAogCQl9LAogCX0sCkBAIC0yNjQsOCArMjY0LDggQEAgbXkgJXBnZHVtcF9ydW5zID0g KAogCQkJY29tbWFuZCA9PgogCQkJICBbICdwZ19yZXN0b3JlJywgJy1sJywgIiR0ZW1wZGlyL2Rl ZmF1bHRzX2Rpcl9mb3JtYXQiLCBdLAogCQkJZXhwZWN0ZWQgPT4gJHN1cHBvcnRzX2d6aXAgPwot CQkJcXIvQ29tcHJlc3Npb246IC0xLyA6Ci0JCQlxci9Db21wcmVzc2lvbjogMC8sCisJCQlxci9D b21wcmVzc2lvbjogZ3ppcC8gOgorCQkJcXIvQ29tcHJlc3Npb246IG5vbmUvLAogCQkJbmFtZSA9 PiAnZGF0YSBjb250ZW50IGlzIGd6aXAtY29tcHJlc3NlZCBieSBkZWZhdWx0JywKIAkJfSwKIAkJ Z2xvYl9wYXR0ZXJucyA9PiBbCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVz cGx1c2NoZWNrIGIvc3JjL3Rvb2xzL3BnaW5jbHVkZS9jcGx1c3BsdXNjaGVjawppbmRleCBiMzkz ZjJhMmVhLi44ODA1MjM3ZWRiIDEwMDc1NQotLS0gYS9zcmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVz cGx1c2NoZWNrCisrKyBiL3NyYy90b29scy9wZ2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sKQEAgLTE1 MCw2ICsxNTAsNyBAQCBkbwogCiAJIyBwZ19kdW1wIGlzIG5vdCBDKystY2xlYW4gYmVjYXVzZSBp dCB1c2VzICJwdWJsaWMiIGFuZCAibmFtZXNwYWNlIgogCSMgYXMgZmllbGQgbmFtZXMsIHdoaWNo IGlzIHVuZm9ydHVuYXRlIGJ1dCB3ZSB3b24ndCBjaGFuZ2UgaXQgbm93LgorCXRlc3QgIiRmIiA9 IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmggJiYgY29udGludWUKIAl0ZXN0ICIkZiIg PSBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaCAmJiBjb250aW51ZQogCXRlc3QgIiRmIiA9 IHNyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5oICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYiID0gc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oICYmIGNvbnRpbnVlCmRpZmYgLS1naXQg YS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CmluZGV4IDYwYzcxZDA1ZmUuLjgxYTQ1MTY0MWEgMTAwNjQ0Ci0tLSBhL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CkBAIC00MjgsNiArNDI4LDcgQEAgQ29tcGlsZWRFeHByU3RhdGUKIENvbXBv c2l0ZUlPRGF0YQogQ29tcG9zaXRlVHlwZVN0bXQKIENvbXBvdW5kQWZmaXhGbGFnCitDb21wcmVz c0ZpbGVIYW5kbGUKIENvbXByZXNzaW9uTG9jYXRpb24KIENvbXByZXNzb3JTdGF0ZQogQ29tcHV0 ZVhpZEhvcml6b25zUmVzdWx0CkBAIC0xMDM0LDYgKzEwMzUsNyBAQCBHdWNTdGFjawogR3VjU3Rh Y2tTdGF0ZQogR3VjU3RyaW5nQXNzaWduSG9vawogR3VjU3RyaW5nQ2hlY2tIb29rCitHemlwQ29t cHJlc3NvclN0YXRlCiBIQU5ETEUKIEhBU0hBQ1RJT04KIEhBU0hCVUNLRVQKLS0gCjIuMzQuMQoK --b1_deAkqpRYEv9bfARgIiya5BWa42kQe417DwyygRq8 Content-Type: text/x-patch; name=v18-0003-Add-LZ4-compression-in-pg_-dump-restore.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v18-0003-Add-LZ4-compression-in-pg_-dump-restore.patch RnJvbSAwM2MxMDFlODRiNzQwNzhiM2JiNGE3Yjg1NjM3ZGI3MTE1N2ZkMmJlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IE1vbiwgMTkgRGVjIDIwMjIgMTU6NDM6NTYgKzAwMDAKU3ViamVjdDogW1BBVENIIHYx OCAzLzNdIEFkZCBMWjQgY29tcHJlc3Npb24gaW4gcGdfe2R1bXB8cmVzdG9yZX0KCldpdGhpbiBj b21wcmVzc19sejQue2MsaH0gdGhlIHN0cmVhbWluZyBBUEkgYW5kIGEgZmlsZSBBUEkgY29tcHJl c3Npb24gaXMKaW1wbGVtZW50ZWQuLiBUaGUgZmlyc3Qgb25lLCBpcyBhaW1lZCBhdCBpbmxpbmVk IHVzZSBjYXNlcyBhbmQgdGh1cyBzaW1wbGUKbHo0LmggY2FsbHMgY2FuIGJlIHVzZWQgZGlyZWN0 bHkuIFRoZSBzZWNvbmQgb25lIGlzIGdlbmVyYXRpbmcgb3V0cHV0LCBvciBpcwpwYXJzaW5nIGlu cHV0LCB3aGljaCBjYW4gYmUgcmVhZC9nZW5lcmF0ZWQgdmlhIHRoZSBsejQgdXRpbGl0eS4KCldo ZXJldmVyIHRoZSBMWjRGIGFwaSBkb2VzIG5vdCBpbXBsZW1lbnQgYWxsIHRoZSBmdW5jdGlvbmFs aXR5IGNvcnJlc3BvbmRpbmcKdG8gZnJlYWQoKSwgZndyaXRlKCksIGZnZXRzKCksIGZnZXRjKCks IGZlb2YoKSwgYW5kIGZjbG9zZSgpLCBpdCBoYXMgYmVlbgppbXBsZW1lbnRlZCBsb2NhbHkuCi0t LQogZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwgICAgICAgIHwgIDEzICstCiBzcmMvYmlu L3BnX2R1bXAvTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2Jpbi9wZ19kdW1wL2Nv bXByZXNzX2lvLmMgICAgICAgIHwgIDExICstCiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0 LmMgICAgICAgfCA2MTggKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmluL3BnX2R1 bXAvY29tcHJlc3NfbHo0LmggICAgICAgfCAgMjIgKwogc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1 aWxkICAgICAgICAgIHwgICA4ICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmMgfCAgMTQgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICB8ICAgNSAr LQogc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwgICAgIHwgIDgyICsrKy0KIHNyYy90 b29scy9wZ2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sgICB8ICAgMSArCiBzcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCAgICAgfCAgIDEgKwogMTEgZmlsZXMgY2hhbmdlZCwgNzU2IGluc2Vy dGlvbnMoKyksIDIxIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdf ZHVtcC9jb21wcmVzc19sejQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfZHVtcC9j b21wcmVzc19sejQuaAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcC5zZ21s IGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwKaW5kZXggMmM5MzhjZDdlMS4uNDlkMjE4 OTA1ZiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwKQEAgLTMzMCw5ICszMzAsMTAgQEAgUG9zdGdyZVNR TCBkb2N1bWVudGF0aW9uCiAgICAgICAgICAgIG1hY2hpbmUtcmVhZGFibGUgZm9ybWF0IHRoYXQg PGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPgogICAgICAgICAgICBjYW4gcmVh ZC4gQSBkaXJlY3RvcnkgZm9ybWF0IGFyY2hpdmUgY2FuIGJlIG1hbmlwdWxhdGVkIHdpdGgKICAg ICAgICAgICAgc3RhbmRhcmQgVW5peCB0b29sczsgZm9yIGV4YW1wbGUsIGZpbGVzIGluIGFuIHVu Y29tcHJlc3NlZCBhcmNoaXZlCi0gICAgICAgICAgIGNhbiBiZSBjb21wcmVzc2VkIHdpdGggdGhl IDxhcHBsaWNhdGlvbj5nemlwPC9hcHBsaWNhdGlvbj4gdG9vbC4KLSAgICAgICAgICAgVGhpcyBm b3JtYXQgaXMgY29tcHJlc3NlZCBieSBkZWZhdWx0IGFuZCBhbHNvIHN1cHBvcnRzIHBhcmFsbGVs Ci0gICAgICAgICAgIGR1bXBzLgorICAgICAgICAgICBjYW4gYmUgY29tcHJlc3NlZCB3aXRoIHRo ZSA8YXBwbGljYXRpb24+Z3ppcDwvYXBwbGljYXRpb24+IG9yCisgICAgICAgICAgIDxhcHBsaWNh dGlvbj5sejQ8L2FwcGxpY2F0aW9uPnRvb2wuCisgICAgICAgICAgIFRoaXMgZm9ybWF0IGlzIGNv bXByZXNzZWQgYnkgZGVmYXVsdCB1c2luZyA8bGl0ZXJhbD5nemlwPC9saXRlcmFsPgorICAgICAg ICAgICBhbmQgYWxzbyBzdXBwb3J0cyBwYXJhbGxlbCBkdW1wcy4KICAgICAgICAgICA8L3BhcmE+ CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KQEAgLTY1NCw3 ICs2NTUsNyBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgICA8cGFyYT4KICAgICAg ICAgU3BlY2lmeSB0aGUgY29tcHJlc3Npb24gbWV0aG9kIGFuZC9vciB0aGUgY29tcHJlc3Npb24g bGV2ZWwgdG8gdXNlLgogICAgICAgICBUaGUgY29tcHJlc3Npb24gbWV0aG9kIGNhbiBiZSBzZXQg dG8gPGxpdGVyYWw+Z3ppcDwvbGl0ZXJhbD4gb3IKLSAgICAgICAgPGxpdGVyYWw+bm9uZTwvbGl0 ZXJhbD4gZm9yIG5vIGNvbXByZXNzaW9uLgorICAgICAgICA8bGl0ZXJhbD5sejQ8L2xpdGVyYWw+ IG9yIDxsaXRlcmFsPm5vbmU8L2xpdGVyYWw+IGZvciBubyBjb21wcmVzc2lvbi4KICAgICAgICAg QSBjb21wcmVzc2lvbiBkZXRhaWwgc3RyaW5nIGNhbiBvcHRpb25hbGx5IGJlIHNwZWNpZmllZC4g IElmIHRoZQogICAgICAgICBkZXRhaWwgc3RyaW5nIGlzIGFuIGludGVnZXIsIGl0IHNwZWNpZmll cyB0aGUgY29tcHJlc3Npb24gbGV2ZWwuCiAgICAgICAgIE90aGVyd2lzZSwgaXQgc2hvdWxkIGJl IGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgaXRlbXMsIGVhY2ggb2YgdGhlCkBAIC02NzUsOCAr Njc2LDggQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAgIGluZGl2aWR1YWwgdGFi bGUtZGF0YSBzZWdtZW50cywgYW5kIHRoZSBkZWZhdWx0IGlzIHRvIGNvbXByZXNzIHVzaW5nCiAg ICAgICAgIDxsaXRlcmFsPmd6aXA8L2xpdGVyYWw+IGF0IGEgbW9kZXJhdGUgbGV2ZWwuIEZvciBw bGFpbiB0ZXh0IG91dHB1dCwKICAgICAgICAgc2V0dGluZyBhIG5vbnplcm8gY29tcHJlc3Npb24g bGV2ZWwgY2F1c2VzIHRoZSBlbnRpcmUgb3V0cHV0IGZpbGUgdG8gYmUgY29tcHJlc3NlZCwKLSAg ICAgICAgYXMgdGhvdWdoIGl0IGhhZCBiZWVuIGZlZCB0aHJvdWdoIDxhcHBsaWNhdGlvbj5nemlw PC9hcHBsaWNhdGlvbj47IGJ1dCB0aGUgZGVmYXVsdAotICAgICAgICBpcyBub3QgdG8gY29tcHJl c3MuCisgICAgICAgIGFzIHRob3VnaCBpdCBoYWQgYmVlbiBmZWQgdGhyb3VnaCA8YXBwbGljYXRp b24+Z3ppcDwvYXBwbGljYXRpb24+IG9yCisgICAgICAgIDxhcHBsaWNhdGlvbj5sejQ8L2FwcGxp Y2F0aW9uPjsgYnV0IHRoZSBkZWZhdWx0IGlzIG5vdCB0byBjb21wcmVzcy4KICAgICAgICA8L3Bh cmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgIFRoZSB0YXIgYXJjaGl2ZSBmb3JtYXQgY3VycmVu dGx5IGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gYXQgYWxsLgpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19kdW1wL01ha2VmaWxlIGIvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCmluZGV4IDI5 ZWFiMDJkMzcuLjI4YzFmYzI3Y2MgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmls ZQorKysgYi9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKQEAgLTE3LDYgKzE3LDcgQEAgdG9wX2J1 aWxkZGlyID0gLi4vLi4vLi4KIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5n bG9iYWwKIAogZXhwb3J0IEdaSVBfUFJPR1JBTT0kKEdaSVApCitleHBvcnQgTFo0CiBleHBvcnQg d2l0aF9pY3UKIAogb3ZlcnJpZGUgQ1BQRkxBR1MgOj0gLUkkKGxpYnBxX3NyY2RpcikgJChDUFBG TEFHUykKQEAgLTI1LDYgKzI2LDcgQEAgTERGTEFHU19JTlRFUk5BTCArPSAtTCQodG9wX2J1aWxk ZGlyKS9zcmMvZmVfdXRpbHMgLWxwZ2ZldXRpbHMgJChsaWJwcV9wZ3BvcnQpCiBPQkpTID0gXAog CSQoV0lOMzJSRVMpIFwKIAljb21wcmVzc19nemlwLm8gXAorCWNvbXByZXNzX2x6NC5vIFwKIAlj b21wcmVzc19pby5vIFwKIAlkdW1wdXRpbHMubyBcCiAJcGFyYWxsZWwubyBcCmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVz c19pby5jCmluZGV4IDRmZTViMjYyYWQuLmZhOTcxZmE5NWMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cGdfZHVtcC9jb21wcmVzc19pby5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5j CkBAIC02MCw2ICs2MCw3IEBACiAKICNpbmNsdWRlICJjb21wcmVzc19pby5oIgogI2luY2x1ZGUg ImNvbXByZXNzX2d6aXAuaCIKKyNpbmNsdWRlICJjb21wcmVzc19sejQuaCIKICNpbmNsdWRlICJw Z19iYWNrdXBfdXRpbHMuaCIKIAogI2lmZGVmIEhBVkVfTElCWgpAQCAtMTM3LDcgKzEzOCw3IEBA IEFsbG9jYXRlQ29tcHJlc3Nvcihjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXBy ZXNzaW9uX3NwZWMsCiAJCQlJbml0Q29tcHJlc3Nvckd6aXAoY3MsIGNvbXByZXNzaW9uX3NwZWMp OwogCQkJYnJlYWs7CiAJCWNhc2UgUEdfQ09NUFJFU1NJT05fTFo0OgotCQkJcGdfZmF0YWwoImNv bXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiTFo0Iik7CisJCQlJbml0 Q29tcHJlc3NvckxaNChjcywgY29tcHJlc3Npb25fc3BlYyk7CiAJCQlicmVhazsKIAkJY2FzZSBQ R19DT01QUkVTU0lPTl9aU1REOgogCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMg bm90IHlldCBzdXBwb3J0ZWQiLCAiWlNURCIpOwpAQCAtMzI3LDcgKzMyOCw3IEBAIEluaXRDb21w cmVzc0ZpbGVIYW5kbGUoY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lv bl9zcGVjKQogCQkJSW5pdENvbXByZXNzR3ppcChDRkgsIGNvbXByZXNzaW9uX3NwZWMpOwogCQkJ YnJlYWs7CiAJCWNhc2UgUEdfQ09NUFJFU1NJT05fTFo0OgotCQkJcGdfZmF0YWwoImNvbXByZXNz aW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiTFo0Iik7CisJCQlJbml0Q29tcHJl c3NMWjQoQ0ZILCBjb21wcmVzc2lvbl9zcGVjKTsKIAkJCWJyZWFrOwogCQljYXNlIFBHX0NPTVBS RVNTSU9OX1pTVEQ6CiAJCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0 IHN1cHBvcnRlZCIsICJaU1REIik7CkBAIC0zNDEsMTIgKzM0MiwxMiBAQCBJbml0Q29tcHJlc3NG aWxlSGFuZGxlKGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3Bl YykKICAqIE9wZW4gYSBmaWxlIGZvciByZWFkaW5nLiAncGF0aCcgaXMgdGhlIGZpbGUgdG8gb3Bl biwgYW5kICdtb2RlJyBzaG91bGQKICAqIGJlIGVpdGhlciAiciIgb3IgInJiIi4KICAqCi0gKiBJ ZiB0aGUgZmlsZSBhdCAncGF0aCcgZG9lcyBub3QgZXhpc3QsIHdlIGFwcGVuZCB0aGUgInsuZ3os Lmx6NH0iIHN1ZmZpeCAoaQorICogSWYgdGhlIGZpbGUgYXQgJ3BhdGgnIGRvZXMgbm90IGV4aXN0 LCB3ZSBhcHBlbmQgdGhlICIuZ3oiIHN1ZmZpeCAoaWYKICAqICdwYXRoJyBkb2Vzbid0IGFscmVh ZHkgaGF2ZSBpdCkgYW5kIHRyeSBhZ2Fpbi4gU28gaWYgeW91IHBhc3MgImZvbyIgYXMKLSAqICdw YXRoJywgdGhpcyB3aWxsIG9wZW4gZWl0aGVyICJmb28iIG9yICJmb28uZ3oiIG9yICJmb28ubHo0 IiwgdHJ5aW5nIGluIHRoYXQKLSAqIG9yZGVyLgorICogJ3BhdGgnLCB0aGlzIHdpbGwgb3BlbiBl aXRoZXIgImZvbyIgb3IgImZvby5neiIsIHRyeWluZyBpbiB0aGF0IG9yZGVyLgogICoKICAqIE9u IGZhaWx1cmUsIHJldHVybiBOVUxMIHdpdGggYW4gZXJyb3IgY29kZSBpbiBlcnJuby4KKyAqCiAg Ki8KIENvbXByZXNzRmlsZUhhbmRsZSAqCiBJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUo Y29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkKZGlmZiAtLWdpdCBhL3NyYy9iaW4v cGdfZHVtcC9jb21wcmVzc19sejQuYyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5jOTdlMTYxODdhCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5jCkBAIC0wLDAgKzEsNjE4 IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb21wcmVzc19sejQuYworICoJIFJvdXRp bmVzIGZvciBhcmNoaXZlcnMgdG8gd3JpdGUgYW4gdW5jb21wcmVzc2VkIG9yIGNvbXByZXNzZWQg ZGF0YQorICoJIHN0cmVhbS4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAy MiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisg KgorICogSURFTlRJRklDQVRJT04KKyAqCSAgIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQu YworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIK KyNpbmNsdWRlICJwZ19iYWNrdXBfdXRpbHMuaCIKKworI2luY2x1ZGUgImNvbXByZXNzX2x6NC5o IgorCisjaWZkZWYgVVNFX0xaNAorI2luY2x1ZGUgPGx6NC5oPgorI2luY2x1ZGUgPGx6NGZyYW1l Lmg+CisKKyNkZWZpbmUgTFo0X09VVF9TSVpFCSg0ICogMTAyNCkKKyNkZWZpbmUgTFo0X0lOX1NJ WkUJCSgxNiAqIDEwMjQpCisKKy8qCisgKiBMWjRGX0hFQURFUl9TSVpFX01BWCBmaXJzdCBhcHBl YXJlZCBpbiB2MS43LjUgb2YgdGhlIGxpYnJhcnkuCisgKiBSZWRlZmluZSBpdCBmb3IgaW5zdGFs bGF0aW9ucyB3aXRoIGEgbGVzc2VyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgTFo0Rl9IRUFERVJf U0laRV9NQVgKKyNkZWZpbmUgTFo0Rl9IRUFERVJfU0laRV9NQVgJMzIKKyNlbmRpZgorCisvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvbXByZXNzb3IgQVBJCisgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworCit0eXBlZGVmIHN0cnVjdCBMWjRDb21wcmVzc29yU3RhdGUKK3sKKwlj aGFyCSAgICpvdXRidWY7CisJc2l6ZV90CQlvdXRzaXplOworfSBMWjRDb21wcmVzc29yU3RhdGU7 CisKKy8qIFByaXZhdGUgcm91dGluZXMgdGhhdCBzdXBwb3J0IExaNCBjb21wcmVzc2VkIGRhdGEg SS9PICovCitzdGF0aWMgdm9pZCBSZWFkRGF0YUZyb21BcmNoaXZlTFo0KEFyY2hpdmVIYW5kbGUg KkFILCBDb21wcmVzc29yU3RhdGUgKmNzKTsKK3N0YXRpYyB2b2lkIFdyaXRlRGF0YVRvQXJjaGl2 ZUxaNChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKKwkJCQkJCQkJICBj b25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbik7CitzdGF0aWMgdm9pZCBFbmRDb21wcmVzc29y TFo0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKTsKKworc3RhdGljIHZv aWQKK1JlYWREYXRhRnJvbUFyY2hpdmVMWjQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JT dGF0ZSAqY3MpCit7CisJTFo0X3N0cmVhbURlY29kZV90IGx6NFN0cmVhbURlY29kZTsKKwljaGFy CSAgICpidWY7CisJY2hhcgkgICAqZGVjYnVmOworCXNpemVfdAkJYnVmbGVuOworCXNpemVfdAkJ Y250OworCisJYnVmbGVuID0gTFo0X0lOX1NJWkU7CisJYnVmID0gcGdfbWFsbG9jKGJ1Zmxlbik7 CisJZGVjYnVmID0gcGdfbWFsbG9jKGJ1Zmxlbik7CisKKwlMWjRfc2V0U3RyZWFtRGVjb2RlKCZs ejRTdHJlYW1EZWNvZGUsIE5VTEwsIDApOworCisJd2hpbGUgKChjbnQgPSBjcy0+cmVhZEYoQUgs ICZidWYsICZidWZsZW4pKSkKKwl7CisJCWludAkJCWRlY0J5dGVzID0gTFo0X2RlY29tcHJlc3Nf c2FmZV9jb250aW51ZSgmbHo0U3RyZWFtRGVjb2RlLAorCQkJCQkJCQkJCQkJCQkJYnVmLCBkZWNi dWYsCisJCQkJCQkJCQkJCQkJCQljbnQsIGJ1Zmxlbik7CisKKwkJYWh3cml0ZShkZWNidWYsIDEs IGRlY0J5dGVzLCBBSCk7CisJfQorCisJcGdfZnJlZShidWYpOworCXBnX2ZyZWUoZGVjYnVmKTsK K30KKworc3RhdGljIHZvaWQKK1dyaXRlRGF0YVRvQXJjaGl2ZUxaNChBcmNoaXZlSGFuZGxlICpB SCwgQ29tcHJlc3NvclN0YXRlICpjcywKKwkJCQkJICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qg ZExlbikKK3sKKwlMWjRDb21wcmVzc29yU3RhdGUgKkxaNGNzID0gKExaNENvbXByZXNzb3JTdGF0 ZSAqKSBjcy0+cHJpdmF0ZV9kYXRhOworCXNpemVfdAkJY29tcHJlc3NlZDsKKwlzaXplX3QJCXJl cXVpcmVkc2l6ZSA9IExaNF9jb21wcmVzc0JvdW5kKGRMZW4pOworCisJaWYgKHJlcXVpcmVkc2l6 ZSA+IExaNGNzLT5vdXRzaXplKQorCXsKKwkJTFo0Y3MtPm91dGJ1ZiA9IHBnX3JlYWxsb2MoTFo0 Y3MtPm91dGJ1ZiwgcmVxdWlyZWRzaXplKTsKKwkJTFo0Y3MtPm91dHNpemUgPSByZXF1aXJlZHNp emU7CisJfQorCisJY29tcHJlc3NlZCA9IExaNF9jb21wcmVzc19kZWZhdWx0KGRhdGEsIExaNGNz LT5vdXRidWYsCisJCQkJCQkJCQkgIGRMZW4sIExaNGNzLT5vdXRzaXplKTsKKworCWlmIChjb21w cmVzc2VkIDw9IDApCisJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gTFo0IGNvbXByZXNzIGRhdGEiKTsK KworCWNzLT53cml0ZUYoQUgsIExaNGNzLT5vdXRidWYsIGNvbXByZXNzZWQpOworfQorCitzdGF0 aWMgdm9pZAorRW5kQ29tcHJlc3NvckxaNChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0 YXRlICpjcykKK3sKKwlMWjRDb21wcmVzc29yU3RhdGUgKkxaNGNzOworCisJTFo0Y3MgPSAoTFo0 Q29tcHJlc3NvclN0YXRlICopIGNzLT5wcml2YXRlX2RhdGE7CisJaWYgKExaNGNzKQorCXsKKwkJ cGdfZnJlZShMWjRjcy0+b3V0YnVmKTsKKwkJcGdfZnJlZShMWjRjcyk7CisJCWNzLT5wcml2YXRl X2RhdGEgPSBOVUxMOworCX0KK30KKworCisvKiBQdWJsaWMgcm91dGluZXMgdGhhdCBzdXBwb3J0 IExaNCBjb21wcmVzc2VkIGRhdGEgSS9PICovCit2b2lkCitJbml0Q29tcHJlc3NvckxaNChDb21w cmVzc29yU3RhdGUgKmNzLCBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNz aW9uX3NwZWMpCit7CisJY3MtPnJlYWREYXRhID0gUmVhZERhdGFGcm9tQXJjaGl2ZUxaNDsKKwlj cy0+d3JpdGVEYXRhID0gV3JpdGVEYXRhVG9BcmNoaXZlTFo0OworCWNzLT5lbmQgPSBFbmRDb21w cmVzc29yTFo0OworCisJY3MtPmNvbXByZXNzaW9uX3NwZWMgPSBjb21wcmVzc2lvbl9zcGVjOwor CisJLyogV2lsbCBiZSBsYXp5IGluaXQnZCAqLworCWNzLT5wcml2YXRlX2RhdGEgPSBwZ19tYWxs b2MwKHNpemVvZihMWjRDb21wcmVzc29yU3RhdGUpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKiBDb21wcmVzcyBGaWxlIEFQSQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KKworLyoKKyAqIFN0YXRlIG5lZWRlZCBmb3IgTFo0IChkZSljb21wcmVzc2lvbiB1c2luZyB0 aGUgQ29tcHJlc3NGaWxlSGFuZGxlIEFQSS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgTFo0RmlsZQor eworCUZJTEUJICAgKmZwOworCisJTFo0Rl9wcmVmZXJlbmNlc190IHByZWZzOworCisJTFo0Rl9j b21wcmVzc2lvbkNvbnRleHRfdCBjdHg7CisJTFo0Rl9kZWNvbXByZXNzaW9uQ29udGV4dF90IGR0 eDsKKworCWJvb2wJCWluaXRlZDsKKwlib29sCQljb21wcmVzc2luZzsKKworCXNpemVfdAkJYnVm bGVuOworCWNoYXIJICAgKmJ1ZmZlcjsKKworCXNpemVfdAkJb3ZlcmZsb3dhbGxvY2xlbjsKKwlz aXplX3QJCW92ZXJmbG93bGVuOworCWNoYXIJICAgKm92ZXJmbG93YnVmOworCisJc2l6ZV90CQll cnJjb2RlOworfQkJCUxaNEZpbGU7CisKKy8qCisgKiBMWjQgZXF1aXZhbGVudCB0byBmZW9mKCkg b3IgZ3plb2YoKS4gVGhlIGVuZCBvZiBmaWxlCisgKiBpcyByZWFjaGVkIGlmIHRoZXJlIGlzIG5v IGRlY29tcHJlc3NlZCBvdXRwdXQgaW4gdGhlCisgKiBvdmVyZmxvdyBidWZmZXIgYW5kIHRoZSBl bmQgb2YgdGhlIGZpbGUgaXMgcmVhY2hlZC4KKyAqLworc3RhdGljIGludAorTFo0RmlsZV9lb2Yo Q29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0RmlsZSAq KSBDRkgtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiBmcy0+b3ZlcmZsb3dsZW4gPT0gMCAmJiBm ZW9mKGZzLT5mcCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK0xaNEZpbGVfZ2V0X2Vycm9y KENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCUxaNEZpbGUgICAgKmZzID0gKExaNEZpbGUg KikgQ0ZILT5wcml2YXRlX2RhdGE7CisJY29uc3QgY2hhciAqZXJybXNnOworCisJaWYgKExaNEZf aXNFcnJvcihmcy0+ZXJyY29kZSkpCisJCWVycm1zZyA9IExaNEZfZ2V0RXJyb3JOYW1lKGZzLT5l cnJjb2RlKTsKKwllbHNlCisJCWVycm1zZyA9IHN0cmVycm9yKGVycm5vKTsKKworCXJldHVybiBl cnJtc2c7Cit9CisKKy8qCisgKiBQcmVwYXJlIGFuIGFscmVhZHkgYWxsb2MnZWQgTFo0RmlsZSBz dHJ1Y3QgZm9yIHN1YnNlcXVlbnQgY2FsbHMuCisgKgorICogSXQgY3JlYXRlcyB0aGUgbmVzc2Fy eSBjb250ZXh0cyBmb3IgdGhlIG9wZXJhdGlvbnMuIFdoZW4gY29tcHJlc3NpbmcsCisgKiBpdCBh ZGRpdGlvbmFsbHkgd3JpdGVzIHRoZSBMWjQgaGVhZGVyIGluIHRoZSBvdXRwdXQgc3RyZWFtLgor ICovCitzdGF0aWMgaW50CitMWjRGaWxlX2luaXQoTFo0RmlsZSAqIGZzLCBpbnQgc2l6ZSwgYm9v bCBjb21wcmVzc2luZykKK3sKKwlzaXplX3QJCXN0YXR1czsKKworCWlmIChmcy0+aW5pdGVkKQor CQlyZXR1cm4gMDsKKworCWZzLT5jb21wcmVzc2luZyA9IGNvbXByZXNzaW5nOworCWZzLT5pbml0 ZWQgPSB0cnVlOworCisJaWYgKGZzLT5jb21wcmVzc2luZykKKwl7CisJCWZzLT5idWZsZW4gPSBM WjRGX2NvbXByZXNzQm91bmQoTFo0X0lOX1NJWkUsICZmcy0+cHJlZnMpOworCQlpZiAoZnMtPmJ1 ZmxlbiA8IExaNEZfSEVBREVSX1NJWkVfTUFYKQorCQkJZnMtPmJ1ZmxlbiA9IExaNEZfSEVBREVS X1NJWkVfTUFYOworCisJCXN0YXR1cyA9IExaNEZfY3JlYXRlQ29tcHJlc3Npb25Db250ZXh0KCZm cy0+Y3R4LCBMWjRGX1ZFUlNJT04pOworCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykpCisJCXsK KwkJCWZzLT5lcnJjb2RlID0gc3RhdHVzOworCQkJcmV0dXJuIDE7CisJCX0KKworCQlmcy0+YnVm ZmVyID0gcGdfbWFsbG9jKGZzLT5idWZsZW4pOworCQlzdGF0dXMgPSBMWjRGX2NvbXByZXNzQmVn aW4oZnMtPmN0eCwgZnMtPmJ1ZmZlciwgZnMtPmJ1ZmxlbiwKKwkJCQkJCQkJCSZmcy0+cHJlZnMp OworCisJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJeworCQkJZnMtPmVycmNvZGUgPSBz dGF0dXM7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWlmIChmd3JpdGUoZnMtPmJ1ZmZlciwgMSwg c3RhdHVzLCBmcy0+ZnApICE9IHN0YXR1cykKKwkJeworCQkJZXJybm8gPSBlcnJubyA/IDogRU5P U1BDOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJc3RhdHVzID0gTFo0Rl9j cmVhdGVEZWNvbXByZXNzaW9uQ29udGV4dCgmZnMtPmR0eCwgTFo0Rl9WRVJTSU9OKTsKKwkJaWYg KExaNEZfaXNFcnJvcihzdGF0dXMpKQorCQl7CisJCQlmcy0+ZXJyY29kZSA9IHN0YXR1czsKKwkJ CXJldHVybiAxOworCQl9CisKKwkJZnMtPmJ1ZmxlbiA9IHNpemUgPiBMWjRfT1VUX1NJWkUgPyBz aXplIDogTFo0X09VVF9TSVpFOworCQlmcy0+YnVmZmVyID0gcGdfbWFsbG9jKGZzLT5idWZsZW4p OworCisJCWZzLT5vdmVyZmxvd2FsbG9jbGVuID0gZnMtPmJ1ZmxlbjsKKwkJZnMtPm92ZXJmbG93 YnVmID0gcGdfbWFsbG9jKGZzLT5vdmVyZmxvd2FsbG9jbGVuKTsKKwkJZnMtPm92ZXJmbG93bGVu ID0gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlYWQgYWxyZWFkeSBkZWNvbXBy ZXNzZWQgY29udGVudCBmcm9tIHRoZSBvdmVyZmxvdyBidWZmZXIgaW50byAncHRyJyB1cCB0bwor ICogJ3NpemUnIGJ5dGVzLCBpZiBhdmFpbGFibGUuIElmIHRoZSBlb2xfZmxhZyBpcyBzZXQsIHRo ZW4gc3RvcCBhdCB0aGUgZmlyc3QKKyAqIG9jY3VyYW5jZSBvZiB0aGUgbmV3IGxpbmUgY2hhciBw cmlvciB0byAnc2l6ZScgYnl0ZXMuCisgKgorICogQW55IHVucmVhZCBjb250ZW50IGluIHRoZSBv dmVyZmxvdyBidWZmZXIsIGlzIG1vdmVkIHRvIHRoZSBiZWdpbm5pbmcuCisgKi8KK3N0YXRpYyBp bnQKK0xaNEZpbGVfcmVhZF9vdmVyZmxvdyhMWjRGaWxlICogZnMsIHZvaWQgKnB0ciwgaW50IHNp emUsIGJvb2wgZW9sX2ZsYWcpCit7CisJY2hhcgkgICAqcDsKKwlpbnQJCQlyZWFkbGVuID0gMDsK KworCWlmIChmcy0+b3ZlcmZsb3dsZW4gPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZnMtPm92 ZXJmbG93bGVuID49IHNpemUpCisJCXJlYWRsZW4gPSBzaXplOworCWVsc2UKKwkJcmVhZGxlbiA9 IGZzLT5vdmVyZmxvd2xlbjsKKworCWlmIChlb2xfZmxhZyAmJiAocCA9IG1lbWNocihmcy0+b3Zl cmZsb3didWYsICdcbicsIHJlYWRsZW4pKSkKKwkJLyogSW5jbHVkZSB0aGUgbGluZSB0ZXJtaW5h dGluZyBjaGFyICovCisJCXJlYWRsZW4gPSBwIC0gZnMtPm92ZXJmbG93YnVmICsgMTsKKworCW1l bWNweShwdHIsIGZzLT5vdmVyZmxvd2J1ZiwgcmVhZGxlbik7CisJZnMtPm92ZXJmbG93bGVuIC09 IHJlYWRsZW47CisKKwlpZiAoZnMtPm92ZXJmbG93bGVuID4gMCkKKwkJbWVtbW92ZShmcy0+b3Zl cmZsb3didWYsIGZzLT5vdmVyZmxvd2J1ZiArIHJlYWRsZW4sIGZzLT5vdmVyZmxvd2xlbik7CisK KwlyZXR1cm4gcmVhZGxlbjsKK30KKworLyoKKyAqIFRoZSB3b3JraG9yc2UgZm9yIHJlYWRpbmcg ZGVjb21wcmVzc2VkIGNvbnRlbnQgb3V0IG9mIGFuIExaNCBjb21wcmVzc2VkCisgKiBzdHJlYW0u CisgKgorICogSXQgd2lsbCByZWFkIHVwIHRvICdwdHJzaXplJyBkZWNvbXByZXNzZWQgY29udGVu dCwgb3IgdXAgdG8gdGhlIG5ldyBsaW5lIGNoYXIKKyAqIGlmIGZvdW5kIGZpcnN0IHdoZW4gdGhl IGVvbF9mbGFnIGlzIHNldC4gSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgZGVjb21wcmVzc2VkCisg KiBvdXRwdXQgZ2VuZXJhdGVkIGJ5IHJlYWRpbmcgYW55IGNvbXByZXNzZWQgaW5wdXQgdmlhIHRo ZSBMWjRGIEFQSSwgZXhjZWVkcworICogJ3B0cnNpemUnLiBBbnkgZXhjZWVkaW5nIGRlY29tcHJl c3NlZCBjb250ZW50IGlzIHN0b3JlZCBhdCBhbiBvdmVyZmxvdworICogYnVmZmVyIHdpdGhpbiBM WjRGaWxlLiBPZiBjb3Vyc2UsIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCwgaXQgd2lsbCBm aXJzdAorICogdHJ5IHRvIGNvbnN1bWUgYW55IGRlY29tcHJlc3NlZCBjb250ZW50IGFscmVhZHkg cHJlc2VudCBpbiB0aGUgb3ZlcmZsb3cKKyAqIGJ1ZmZlciwgYmVmb3JlIGRlY29tcHJlc3Npbmcg bmV3IGNvbnRlbnQuCisgKi8KK3N0YXRpYyBpbnQKK0xaNEZpbGVfcmVhZF9pbnRlcm5hbChMWjRG aWxlICogZnMsIHZvaWQgKnB0ciwgaW50IHB0cnNpemUsIGJvb2wgZW9sX2ZsYWcpCit7CisJc2l6 ZV90CQlkc2l6ZSA9IDA7CisJc2l6ZV90CQlyc2l6ZTsKKwlzaXplX3QJCXNpemUgPSBwdHJzaXpl OworCWJvb2wJCWVvbF9mb3VuZCA9IGZhbHNlOworCisJdm9pZAkgICAqcmVhZGJ1ZjsKKworCS8q IExhenkgaW5pdCAqLworCWlmICghZnMtPmluaXRlZCAmJiBMWjRGaWxlX2luaXQoZnMsIHNpemUs IGZhbHNlIC8qIGRlY29tcHJlc3NpbmcgKi8gKSkKKwkJcmV0dXJuIC0xOworCisJLyogVmVyZml5 IHRoYXQgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGluIHRoZSBvdXRidWYgKi8KKwlpZiAoc2l6ZSA+ IGZzLT5idWZsZW4pCisJeworCQlmcy0+YnVmbGVuID0gc2l6ZTsKKwkJZnMtPmJ1ZmZlciA9IHBn X3JlYWxsb2MoZnMtPmJ1ZmZlciwgc2l6ZSk7CisJfQorCisJLyogdXNlIGFscmVhZHkgZGVjb21w cmVzc2VkIGNvbnRlbnQgaWYgYXZhaWxhYmxlICovCisJZHNpemUgPSBMWjRGaWxlX3JlYWRfb3Zl cmZsb3coZnMsIHB0ciwgc2l6ZSwgZW9sX2ZsYWcpOworCWlmIChkc2l6ZSA9PSBzaXplIHx8IChl b2xfZmxhZyAmJiBtZW1jaHIocHRyLCAnXG4nLCBkc2l6ZSkpKQorCQlyZXR1cm4gZHNpemU7CisK KwlyZWFkYnVmID0gcGdfbWFsbG9jKHNpemUpOworCisJZG8KKwl7CisJCWNoYXIJICAgKnJwOwor CQljaGFyCSAgICpyZW5kOworCisJCXJzaXplID0gZnJlYWQocmVhZGJ1ZiwgMSwgc2l6ZSwgZnMt PmZwKTsKKwkJaWYgKHJzaXplIDwgc2l6ZSAmJiAhZmVvZihmcy0+ZnApKQorCQkJcmV0dXJuIC0x OworCisJCXJwID0gKGNoYXIgKikgcmVhZGJ1ZjsKKwkJcmVuZCA9IChjaGFyICopIHJlYWRidWYg KyByc2l6ZTsKKworCQl3aGlsZSAocnAgPCByZW5kKQorCQl7CisJCQlzaXplX3QJCXN0YXR1czsK KwkJCXNpemVfdAkJb3V0bGVuID0gZnMtPmJ1ZmxlbjsKKwkJCXNpemVfdAkJcmVhZF9yZW1haW4g PSByZW5kIC0gcnA7CisKKwkJCW1lbXNldChmcy0+YnVmZmVyLCAwLCBvdXRsZW4pOworCQkJc3Rh dHVzID0gTFo0Rl9kZWNvbXByZXNzKGZzLT5kdHgsIGZzLT5idWZmZXIsICZvdXRsZW4sCisJCQkJ CQkJCQkgcnAsICZyZWFkX3JlbWFpbiwgTlVMTCk7CisJCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1 cykpCisJCQl7CisJCQkJZnMtPmVycmNvZGUgPSBzdGF0dXM7CisJCQkJcmV0dXJuIC0xOworCQkJ fQorCisJCQlycCArPSByZWFkX3JlbWFpbjsKKworCQkJLyoKKwkJCSAqIGZpbGwgaW4gd2hhdCBz cGFjZSBpcyBhdmFpbGFibGUgaW4gcHRyIGlmIHRoZSBlb2wgZmxhZyBpcyBzZXQsCisJCQkgKiBl aXRoZXIgc2tpcCBpZiBvbmUgYWxyZWFkeSBmb3VuZCBvciBmaWxsIHVwIHRvIEVPTCBpZiBwcmVz ZW50CisJCQkgKiBpbiB0aGUgb3V0YnVmCisJCQkgKi8KKwkJCWlmIChvdXRsZW4gPiAwICYmIGRz aXplIDwgc2l6ZSAmJiBlb2xfZm91bmQgPT0gZmFsc2UpCisJCQl7CisJCQkJY2hhcgkgICAqcDsK KwkJCQlzaXplX3QJCWxpYiA9IChlb2xfZmxhZyA9PSAwKSA/IHNpemUgLSBkc2l6ZSA6IHNpemUg LSAxIC0gZHNpemU7CisJCQkJc2l6ZV90CQlsZW4gPSBvdXRsZW4gPCBsaWIgPyBvdXRsZW4gOiBs aWI7CisKKwkJCQlpZiAoZW9sX2ZsYWcgPT0gdHJ1ZSAmJgorCQkJCQkocCA9IG1lbWNocihmcy0+ YnVmZmVyLCAnXG4nLCBvdXRsZW4pKSAmJgorCQkJCQkoc2l6ZV90KSAocCAtIGZzLT5idWZmZXIg KyAxKSA8PSBsZW4pCisJCQkJeworCQkJCQlsZW4gPSBwIC0gZnMtPmJ1ZmZlciArIDE7CisJCQkJ CWVvbF9mb3VuZCA9IHRydWU7CisJCQkJfQorCisJCQkJbWVtY3B5KChjaGFyICopIHB0ciArIGRz aXplLCBmcy0+YnVmZmVyLCBsZW4pOworCQkJCWRzaXplICs9IGxlbjsKKworCQkJCS8qIG1vdmUg d2hhdCBkaWQgbm90IGZpdCwgaWYgYW55LCBhdCB0aGUgYmVnaW5pbmcgb2YgdGhlIGJ1ZiAqLwor CQkJCWlmIChsZW4gPCBvdXRsZW4pCisJCQkJCW1lbW1vdmUoZnMtPmJ1ZmZlciwgZnMtPmJ1ZmZl ciArIGxlbiwgb3V0bGVuIC0gbGVuKTsKKwkJCQlvdXRsZW4gLT0gbGVuOworCQkJfQorCisJCQkv KiBpZiB0aGVyZSBpcyBhdmFpbGFibGUgb3V0cHV0LCBzYXZlIGl0ICovCisJCQlpZiAob3V0bGVu ID4gMCkKKwkJCXsKKwkJCQl3aGlsZSAoZnMtPm92ZXJmbG93bGVuICsgb3V0bGVuID4gZnMtPm92 ZXJmbG93YWxsb2NsZW4pCisJCQkJeworCQkJCQlmcy0+b3ZlcmZsb3dhbGxvY2xlbiAqPSAyOwor CQkJCQlmcy0+b3ZlcmZsb3didWYgPSBwZ19yZWFsbG9jKGZzLT5vdmVyZmxvd2J1ZiwKKwkJCQkJ CQkJCQkJCSBmcy0+b3ZlcmZsb3dhbGxvY2xlbik7CisJCQkJfQorCisJCQkJbWVtY3B5KGZzLT5v dmVyZmxvd2J1ZiArIGZzLT5vdmVyZmxvd2xlbiwgZnMtPmJ1ZmZlciwgb3V0bGVuKTsKKwkJCQlm cy0+b3ZlcmZsb3dsZW4gKz0gb3V0bGVuOworCQkJfQorCQl9CisJfSB3aGlsZSAocnNpemUgPT0g c2l6ZSAmJiBkc2l6ZSA8IHNpemUgJiYgZW9sX2ZvdW5kID09IDApOworCisJcGdfZnJlZShyZWFk YnVmKTsKKworCXJldHVybiAoaW50KSBkc2l6ZTsKK30KKworLyoKKyAqIENvbXByZXNzIHNpemUg Ynl0ZXMgZnJvbSBwdHIgYW5kIHdyaXRlIHRoZW0gdG8gdGhlIHN0cmVhbS4KKyAqLworc3RhdGlj IHNpemVfdAorTFo0RmlsZV93cml0ZShjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBDb21w cmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxlICopIENG SC0+cHJpdmF0ZV9kYXRhOworCXNpemVfdAkJc3RhdHVzOworCWludAkJCXJlbWFpbmluZyA9IHNp emU7CisKKwlpZiAoIWZzLT5pbml0ZWQgJiYgTFo0RmlsZV9pbml0KGZzLCBzaXplLCB0cnVlKSkK KwkJcmV0dXJuIC0xOworCisJd2hpbGUgKHJlbWFpbmluZyA+IDApCisJeworCQlpbnQJCQljaHVu ayA9IHJlbWFpbmluZyA8IExaNF9JTl9TSVpFID8gcmVtYWluaW5nIDogTFo0X0lOX1NJWkU7CisK KwkJcmVtYWluaW5nIC09IGNodW5rOworCisJCXN0YXR1cyA9IExaNEZfY29tcHJlc3NVcGRhdGUo ZnMtPmN0eCwgZnMtPmJ1ZmZlciwgZnMtPmJ1ZmxlbiwKKwkJCQkJCQkJCSBwdHIsIGNodW5rLCBO VUxMKTsKKwkJaWYgKExaNEZfaXNFcnJvcihzdGF0dXMpKQorCQl7CisJCQlmcy0+ZXJyY29kZSA9 IHN0YXR1czsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChmd3JpdGUoZnMtPmJ1ZmZlciwg MSwgc3RhdHVzLCBmcy0+ZnApICE9IHN0YXR1cykKKwkJeworCQkJZXJybm8gPSBlcnJubyA/IDog RU5PU1BDOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gc2l6ZTsKK30KKworLyoK KyAqIGZyZWFkKCkgZXF1aXZhbGVudCBpbXBsZW1lbnRhdGlvbiBmb3IgTFo0IGNvbXByZXNzZWQg ZmlsZXMuCisgKi8KK3N0YXRpYyBzaXplX3QKK0xaNEZpbGVfcmVhZCh2b2lkICpwdHIsIHNpemVf dCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChM WjRGaWxlICopIENGSC0+cHJpdmF0ZV9kYXRhOworCWludAkJCXJldDsKKworCXJldCA9IExaNEZp bGVfcmVhZF9pbnRlcm5hbChmcywgcHRyLCBzaXplLCBmYWxzZSk7CisJaWYgKHJldCAhPSBzaXpl ICYmICFMWjRGaWxlX2VvZihDRkgpKQorCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBp bnB1dCBmaWxlOiAlcyIsIExaNEZpbGVfZ2V0X2Vycm9yKENGSCkpOworCisJcmV0dXJuIHJldDsK K30KKworLyoKKyAqIGZnZXRjKCkgZXF1aXZhbGVudCBpbXBsZW1lbnRhdGlvbiBmb3IgTFo0IGNv bXByZXNzZWQgZmlsZXMuCisgKi8KK3N0YXRpYyBpbnQKK0xaNEZpbGVfZ2V0YyhDb21wcmVzc0Zp bGVIYW5kbGUgKkNGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxlICopIENGSC0+cHJp dmF0ZV9kYXRhOworCXVuc2lnbmVkIGNoYXIgYzsKKworCWlmIChMWjRGaWxlX3JlYWRfaW50ZXJu YWwoZnMsICZjLCAxLCBmYWxzZSkgIT0gMSkKKwl7CisJCWlmICghTFo0RmlsZV9lb2YoQ0ZIKSkK KwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwgTFo0Rmls ZV9nZXRfZXJyb3IoQ0ZIKSk7CisJCWVsc2UKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBm cm9tIGlucHV0IGZpbGU6IGVuZCBvZiBmaWxlIik7CisJfQorCisJcmV0dXJuIGM7Cit9CisKKy8q CisgKiBmZ2V0cygpIGVxdWl2YWxlbnQgaW1wbGVtZW50YXRpb24gZm9yIExaNCBjb21wcmVzc2Vk IGZpbGVzLgorICovCitzdGF0aWMgY2hhciAqCitMWjRGaWxlX2dldHMoY2hhciAqcHRyLCBpbnQg c2l6ZSwgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0 RmlsZSAqKSBDRkgtPnByaXZhdGVfZGF0YTsKKwlzaXplX3QJCWRzaXplOworCisJZHNpemUgPSBM WjRGaWxlX3JlYWRfaW50ZXJuYWwoZnMsIHB0ciwgc2l6ZSwgdHJ1ZSk7CisJaWYgKGRzaXplIDwg MCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLCBMWjRG aWxlX2dldF9lcnJvcihDRkgpKTsKKworCS8qIERvbmUgcmVhZGluZyAqLworCWlmIChkc2l6ZSA9 PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBwdHI7Cit9CisKKy8qCisgKiBGaW5hbGl6 ZSAoZGUpY29tcHJlc3Npb24gb2YgYSBzdHJlYW0uIFdoZW4gY29tcHJlc3NpbmcgaXQgd2lsbCB3 cml0ZSBhbnkKKyAqIHJlbWFpbmluZyBjb250ZW50IGFuZC9vciBnZW5lcmF0ZWQgZm9vdGVyIGZy b20gdGhlIExaNCBBUEkuCisgKi8KK3N0YXRpYyBpbnQKK0xaNEZpbGVfY2xvc2UoQ29tcHJlc3NG aWxlSGFuZGxlICpDRkgpCit7CisJRklMRQkgICAqZnA7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0 RmlsZSAqKSBDRkgtPnByaXZhdGVfZGF0YTsKKwlzaXplX3QJCXN0YXR1czsKKwlpbnQJCQlyZXQ7 CisKKwlmcCA9IGZzLT5mcDsKKwlpZiAoZnMtPmluaXRlZCkKKwl7CisJCWlmIChmcy0+Y29tcHJl c3NpbmcpCisJCXsKKwkJCXN0YXR1cyA9IExaNEZfY29tcHJlc3NFbmQoZnMtPmN0eCwgZnMtPmJ1 ZmZlciwgZnMtPmJ1ZmxlbiwgTlVMTCk7CisJCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykpCisJ CQkJcGdfZmF0YWwoImZhaWxlZCB0byBlbmQgY29tcHJlc3Npb246ICVzIiwKKwkJCQkJCSBMWjRG X2dldEVycm9yTmFtZShzdGF0dXMpKTsKKwkJCWVsc2UgaWYgKChyZXQgPSBmd3JpdGUoZnMtPmJ1 ZmZlciwgMSwgc3RhdHVzLCBmcy0+ZnApKSAhPSBzdGF0dXMpCisJCQl7CisJCQkJZXJybm8gPSBl cnJubyA/IDogRU5PU1BDOworCQkJCVdSSVRFX0VSUk9SX0VYSVQ7CisJCQl9CisKKwkJCXN0YXR1 cyA9IExaNEZfZnJlZUNvbXByZXNzaW9uQ29udGV4dChmcy0+Y3R4KTsKKwkJCWlmIChMWjRGX2lz RXJyb3Ioc3RhdHVzKSkKKwkJCQlwZ19mYXRhbCgiZmFpbGVkIHRvIGVuZCBjb21wcmVzc2lvbjog JXMiLAorCQkJCQkJIExaNEZfZ2V0RXJyb3JOYW1lKHN0YXR1cykpOworCQl9CisJCWVsc2UKKwkJ eworCQkJc3RhdHVzID0gTFo0Rl9mcmVlRGVjb21wcmVzc2lvbkNvbnRleHQoZnMtPmR0eCk7CisJ CQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykpCisJCQkJcGdfZmF0YWwoImZhaWxlZCB0byBlbmQg ZGVjb21wcmVzc2lvbjogJXMiLAorCQkJCQkJIExaNEZfZ2V0RXJyb3JOYW1lKHN0YXR1cykpOwor CQkJcGdfZnJlZShmcy0+b3ZlcmZsb3didWYpOworCQl9CisKKwkJcGdfZnJlZShmcy0+YnVmZmVy KTsKKwl9CisKKwlwZ19mcmVlKGZzKTsKKworCXJldHVybiBmY2xvc2UoZnApOworfQorCitzdGF0 aWMgaW50CitMWjRGaWxlX29wZW4oY29uc3QgY2hhciAqcGF0aCwgaW50IGZkLCBjb25zdCBjaGFy ICptb2RlLAorCQkJIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCUZJTEUJICAgKmZwOwor CUxaNEZpbGUgICAgKmx6NGZwID0gKExaNEZpbGUgKikgQ0ZILT5wcml2YXRlX2RhdGE7CisKKwlp ZiAoZmQgPj0gMCkKKwkJZnAgPSBmZG9wZW4oZmQsIG1vZGUpOworCWVsc2UKKwkJZnAgPSBmb3Bl bihwYXRoLCBtb2RlKTsKKwlpZiAoZnAgPT0gTlVMTCkKKwl7CisJCWx6NGZwLT5lcnJjb2RlID0g ZXJybm87CisJCXJldHVybiAxOworCX0KKworCWx6NGZwLT5mcCA9IGZwOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQKK0xaNEZpbGVfb3Blbl93cml0ZShjb25zdCBjaGFyICpwYXRoLCBj b25zdCBjaGFyICptb2RlLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwljaGFyCSAgICpm bmFtZTsKKwlpbnQJCQlyZXQ7CisKKwlmbmFtZSA9IHBzcHJpbnRmKCIlcy5sejQiLCBwYXRoKTsK KwlyZXQgPSBDRkgtPm9wZW5fZnVuYyhmbmFtZSwgLTEsIG1vZGUsIENGSCk7CisJcGdfZnJlZShm bmFtZSk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkCitJbml0Q29tcHJlc3NMWjQoQ29tcHJl c3NGaWxlSGFuZGxlICpDRkgsIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJl c3Npb25fc3BlYykKK3sKKwlMWjRGaWxlICAgICpsejRmcDsKKworCUNGSC0+b3Blbl9mdW5jID0g TFo0RmlsZV9vcGVuOworCUNGSC0+b3Blbl93cml0ZV9mdW5jID0gTFo0RmlsZV9vcGVuX3dyaXRl OworCUNGSC0+cmVhZF9mdW5jID0gTFo0RmlsZV9yZWFkOworCUNGSC0+d3JpdGVfZnVuYyA9IExa NEZpbGVfd3JpdGU7CisJQ0ZILT5nZXRzX2Z1bmMgPSBMWjRGaWxlX2dldHM7CisJQ0ZILT5nZXRj X2Z1bmMgPSBMWjRGaWxlX2dldGM7CisJQ0ZILT5lb2ZfZnVuYyA9IExaNEZpbGVfZW9mOworCUNG SC0+Y2xvc2VfZnVuYyA9IExaNEZpbGVfY2xvc2U7CisJQ0ZILT5nZXRfZXJyb3JfZnVuYyA9IExa NEZpbGVfZ2V0X2Vycm9yOworCisJQ0ZILT5jb21wcmVzc2lvbl9zcGVjID0gY29tcHJlc3Npb25f c3BlYzsKKwlsejRmcCA9IHBnX21hbGxvYzAoc2l6ZW9mKCpsejRmcCkpOworCWlmIChDRkgtPmNv bXByZXNzaW9uX3NwZWMubGV2ZWwgPj0gMCkKKwkJbHo0ZnAtPnByZWZzLmNvbXByZXNzaW9uTGV2 ZWwgPSBDRkgtPmNvbXByZXNzaW9uX3NwZWMubGV2ZWw7CisKKwlDRkgtPnByaXZhdGVfZGF0YSA9 IGx6NGZwOworfQorI2Vsc2UJCQkJCQkJLyogVVNFX0xaNCAqLwordm9pZAorSW5pdENvbXByZXNz b3JMWjQoQ29tcHJlc3NvclN0YXRlICpjcywgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlv biBjb21wcmVzc2lvbl9zcGVjKQoreworCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1 cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJMWjQiKTsKK30KKwordm9pZAorSW5pdENvbXBy ZXNzTFo0KENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZILCBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZp Y2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBu b3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwgIkxaNCIpOworfQorI2VuZGlmCQkJCQkJ CS8qIFVTRV9MWjQgKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQu aCBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi43NDU5NWRiMWI5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL2NvbXByZXNzX2x6NC5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICoKKyAqIGNvbXByZXNzX2x6NC5oCisgKgkgSW50ZXJmYWNlIHRvIGNvbXByZXNzX2lvLmMg cm91dGluZXMKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg MTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURF TlRJRklDQVRJT04KKyAqCSAgIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQuaAorICoKKyAq LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIF9DT01QUkVTU19MWjRfSF8KKyNkZWZpbmUg X0NPTVBSRVNTX0xaNF9IXworCisjaW5jbHVkZSAiY29tcHJlc3NfaW8uaCIKKworZXh0ZXJuIHZv aWQgSW5pdENvbXByZXNzb3JMWjQoQ29tcHJlc3NvclN0YXRlICpjcywgY29uc3QgcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKK2V4dGVybiB2b2lkIEluaXRDb21w cmVzc0xaNChDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCwgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lm aWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKKworI2VuZGlmCQkJCQkJCS8qIF9DT01QUkVTU19M WjRfSF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCBiL3NyYy9i aW4vcGdfZHVtcC9tZXNvbi5idWlsZAppbmRleCAwYzczYTQ3MDdlLi5iMjdlOTJmZmQwIDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jpbi9wZ19kdW1w L21lc29uLmJ1aWxkCkBAIC0xLDYgKzEsNyBAQAogcGdfZHVtcF9jb21tb25fc291cmNlcyA9IGZp bGVzKAogICAnY29tcHJlc3NfaW8uYycsCiAgICdjb21wcmVzc19nemlwLmMnLAorICAnY29tcHJl c3NfbHo0LmMnLAogICAnZHVtcHV0aWxzLmMnLAogICAncGFyYWxsZWwuYycsCiAgICdwZ19iYWNr dXBfYXJjaGl2ZXIuYycsCkBAIC0xNSw3ICsxNiw3IEBAIHBnX2R1bXBfY29tbW9uX3NvdXJjZXMg PSBmaWxlcygKIHBnX2R1bXBfY29tbW9uID0gc3RhdGljX2xpYnJhcnkoJ2xpYnBnZHVtcF9jb21t b24nLAogICBwZ19kdW1wX2NvbW1vbl9zb3VyY2VzLAogICBjX3BjaDogcGNoX3Bvc3RncmVzX2Zl X2gsCi0gIGRlcGVuZGVuY2llczogW2Zyb250ZW5kX2NvZGUsIGxpYnBxLCB6bGliXSwKKyAgZGVw ZW5kZW5jaWVzOiBbZnJvbnRlbmRfY29kZSwgbGlicHEsIGx6NCwgemxpYl0sCiAgIGt3YXJnczog aW50ZXJuYWxfbGliX2FyZ3MsCiApCiAKQEAgLTgzLDcgKzg0LDEwIEBAIHRlc3RzICs9IHsKICAg J3NkJzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCiAgICdiZCc6IG1lc29uLmN1cnJlbnRf YnVpbGRfZGlyKCksCiAgICd0YXAnOiB7Ci0gICAgJ2Vudic6IHsnR1pJUF9QUk9HUkFNJzogZ3pp cC5wYXRoKCl9LAorICAgICdlbnYnOiB7CisgICAgICAnR1pJUF9QUk9HUkFNJzogZ3ppcC5wYXRo KCksCisgICAgICAnTFo0JzogcHJvZ3JhbV9sejQuZm91bmQoKSA/IHByb2dyYW1fbHo0LnBhdGgo KSA6ICcnLAorICAgIH0sCiAgICAgJ3Rlc3RzJzogWwogICAgICAgJ3QvMDAxX2Jhc2ljLnBsJywK ICAgICAgICd0LzAwMl9wZ19kdW1wLnBsJywKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfYXJjaGl2ZXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIu YwppbmRleCAxZjIwN2M2ZjRkLi4xMTliN2YyNTUzIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5jCkBAIC0zOTUsNiArMzk1LDEwIEBAIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFI WCkKICNpZm5kZWYgSEFWRV9MSUJaCiAJCQkJaWYgKEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29y aXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQogCQkJCQlzdXBwb3J0c19jb21wcmVzc2lvbiA9 IGZhbHNlOworI2VuZGlmCisjaWZuZGVmIFVTRV9MWjQKKwkJCQlpZiAoQUgtPmNvbXByZXNzaW9u X3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0xaNCkKKwkJCQkJc3VwcG9ydHNfY29t cHJlc3Npb24gPSBmYWxzZTsKICNlbmRpZgogCQkJCWlmIChzdXBwb3J0c19jb21wcmVzc2lvbiA9 PSBmYWxzZSkKIAkJCQkJcGdfZmF0YWwoImNhbm5vdCByZXN0b3JlIGZyb20gY29tcHJlc3NlZCBh cmNoaXZlIChjb21wcmVzc2lvbiBub3Qgc3VwcG9ydGVkIGluIHRoaXMgaW5zdGFsbGF0aW9uKSIp OwpAQCAtMjA3NCw3ICsyMDc4LDcgQEAgX2Rpc2NvdmVyQXJjaGl2ZUZvcm1hdChBcmNoaXZlSGFu ZGxlICpBSCkKIAogCQkvKgogCQkgKiBDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGFyY2hpdmUgaXMg YSBkaXJlY3RvcnkuIElmIHNvLCBjaGVjayBpZgotCQkgKiB0aGVyZSdzIGEgInRvYy5kYXQiIChv ciAidG9jLmRhdC5neiIpIGZpbGUgaW4gaXQuCisJCSAqIHRoZXJlJ3MgYSAidG9jLmRhdCIgKG9y ICJ0b2MuZGF0LntneixsejR9IikgZmlsZSBpbiBpdC4KIAkJICovCiAJCWlmIChzdGF0KEFILT5m U3BlYywgJnN0KSA9PSAwICYmIFNfSVNESVIoc3Quc3RfbW9kZSkpCiAJCXsKQEAgLTIwODQsNiAr MjA4OCwxMCBAQCBfZGlzY292ZXJBcmNoaXZlRm9ybWF0KEFyY2hpdmVIYW5kbGUgKkFIKQogI2lm ZGVmIEhBVkVfTElCWgogCQkJaWYgKF9maWxlRXhpc3RzSW5EaXJlY3RvcnkoQUgtPmZTcGVjLCAi dG9jLmRhdC5neiIpKQogCQkJCXJldHVybiBBSC0+Zm9ybWF0OworI2VuZGlmCisjaWZkZWYgVVNF X0xaNAorCQkJaWYgKF9maWxlRXhpc3RzSW5EaXJlY3RvcnkoQUgtPmZTcGVjLCAidG9jLmRhdC5s ejQiKSkKKwkJCQlyZXR1cm4gQUgtPmZvcm1hdDsKICNlbmRpZgogCQkJcGdfZmF0YWwoImRpcmVj dG9yeSBcIiVzXCIgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgdmFsaWQgYXJjaGl2ZSAoXCJ0b2Mu ZGF0XCIgZG9lcyBub3QgZXhpc3QpIiwKIAkJCQkJIEFILT5mU3BlYyk7CkBAIC0zNzQ3LDYgKzM3 NTUsMTAgQEAgUmVhZEhlYWQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAjaWZuZGVmIEhBVkVfTElCWgog CQlpZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0da SVApCiAJCQl1bnN1cHBvcnRlZCA9IHRydWU7CisjZW5kaWYKKyNpZm5kZWYgVVNFX0xaNAorCQlp ZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0xaNCkK KwkJCXVuc3VwcG9ydGVkID0gdHJ1ZTsKICNlbmRpZgogCQlpZiAodW5zdXBwb3J0ZWQpCiAJCQlw Z19mYXRhbCgiYXJjaGl2ZSBpcyBjb21wcmVzc2VkLCBidXQgdGhpcyBpbnN0YWxsYXRpb24gZG9l cyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiIpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggNDRkOTU3YzAzOC4u MWJiODc0YjhlMyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9z cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC03MTUsMTMgKzcxNSwxMiBAQCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKIAkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgogCQkJLyogZmFs bHRocm91Z2ggKi8KIAkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgorCQkJLyogZmFsbHRocm91 Z2ggKi8KKwkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6CiAJCQlicmVhazsKIAkJY2FzZSBQR19D T01QUkVTU0lPTl9aU1REOgogCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90 IHlldCBzdXBwb3J0ZWQiLCAiWlNURCIpOwogCQkJYnJlYWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJ T05fTFo0OgotCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBw b3J0ZWQiLCAiTFo0Iik7Ci0JCQlicmVhazsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVt cC5wbAppbmRleCAzOWRhYTFmYzQzLi5kM2YyOGRmYmE3IDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X2R1bXAvdC8wMDJfcGdfZHVtcC5wbAorKysgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVt cC5wbApAQCAtMTM5LDYgKzEzOSw4MCBAQCBteSAlcGdkdW1wX3J1bnMgPSAoCiAJCQlhcmdzICAg ID0+IFsgJy1kJywgIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2d6aXBfcGxhaW4uc3FsLmd6IiwgXSwK IAkJfSwKIAl9LAorCisJIyBEbyBub3QgdXNlIC0tbm8tc3luYyB0byBnaXZlIHRlc3QgY292ZXJh Z2UgZm9yIGRhdGEgc3luYy4KKwljb21wcmVzc2lvbl9sejRfY3VzdG9tID0+IHsKKwkJdGVzdF9r ZXkgICAgICAgPT4gJ2NvbXByZXNzaW9uJywKKwkJY29tcGlsZV9vcHRpb24gPT4gJ2x6NCcsCisJ CWR1bXBfY21kICAgICAgID0+IFsKKwkJCSdwZ19kdW1wJywgICAgICAnLS1mb3JtYXQ9Y3VzdG9t JywKKwkJCSctLWNvbXByZXNzPWx6NCcsICItLWZpbGU9JHRlbXBkaXIvY29tcHJlc3Npb25fbHo0 X2N1c3RvbS5kdW1wIiwKKwkJCSdwb3N0Z3JlcycsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsK KwkJCSdwZ19yZXN0b3JlJywKKwkJCSItLWZpbGU9JHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2N1 c3RvbS5zcWwiLAorCQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9jdXN0b20uZHVtcCIsCisJ CV0sCisJCWNvbW1hbmRfbGlrZSA9PiB7CisJCQljb21tYW5kID0+IFsKKwkJCQkncGdfcmVzdG9y ZScsCisJCQkJJy1sJywgIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9jdXN0b20uZHVtcCIsCisJ CQldLAorCQkJZXhwZWN0ZWQgPT4gcXIvQ29tcHJlc3Npb246IGx6NC8sCisJCQluYW1lID0+ICdk YXRhIGNvbnRlbnQgaXMgbHo0IGNvbXByZXNzZWQnCisJCX0sCisJfSwKKworCSMgRG8gbm90IHVz ZSAtLW5vLXN5bmMgdG8gZ2l2ZSB0ZXN0IGNvdmVyYWdlIGZvciBkYXRhIHN5bmMuCisJY29tcHJl c3Npb25fbHo0X2RpciA9PiB7CisJCXRlc3Rfa2V5ICAgICAgID0+ICdjb21wcmVzc2lvbicsCisJ CWNvbXBpbGVfb3B0aW9uID0+ICdsejQnLAorCQlkdW1wX2NtZCAgICAgICA9PiBbCisJCQkncGdf ZHVtcCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tam9icz0yJywKKwkJCSctLWZv cm1hdD1kaXJlY3RvcnknLCAgICAgICAgICAgICAgICAgICAnLS1jb21wcmVzcz1sejQ6MScsCisJ CQkiLS1maWxlPSR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXIiLCAncG9zdGdyZXMnLAorCQld LAorCQkjIEdpdmUgY292ZXJhZ2UgZm9yIG1hbnVhbGx5IGNvbXByZXNzZWQgYmxvYi50b2MgZmls ZXMgZHVyaW5nCisJCSMgcmVzdG9yZS4KKwkJY29tcHJlc3NfY21kID0+IHsKKwkJCXByb2dyYW0g PT4gJEVOVnsnTFo0J30sCisJCQlhcmdzICAgID0+IFsKKwkJCQknLXonLCAnLWYnLCAnLS1ybScs CisJCQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXIvYmxvYnMudG9jIiwKKwkJCQkiJHRl bXBkaXIvY29tcHJlc3Npb25fbHo0X2Rpci9ibG9icy50b2MubHo0IiwKKwkJCV0sCisJCX0sCisJ CSMgVmVyaWZ5IHRoYXQgZGF0YSBmaWxlcyB3aGVyZSBjb21wcmVzc2VkCisJCWdsb2JfcGF0dGVy bnMgPT4gWworCQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXIvdG9jLmRhdCIsCisJCSAg ICAiJHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2Rpci8qLmRhdC5sejQiLAorCQldLAorCQlyZXN0 b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctLWpvYnM9MicsCisJCQkiLS1maWxlPSR0 ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXIuc3FsIiwKKwkJCSIkdGVtcGRpci9jb21wcmVzc2lv bl9sejRfZGlyIiwKKwkJXSwKKwl9LAorCisJY29tcHJlc3Npb25fbHo0X3BsYWluID0+IHsKKwkJ dGVzdF9rZXkgICAgICAgPT4gJ2NvbXByZXNzaW9uJywKKwkJY29tcGlsZV9vcHRpb24gPT4gJ2x6 NCcsCisJCWR1bXBfY21kICAgICAgID0+IFsKKwkJCSdwZ19kdW1wJywgJy0tZm9ybWF0PXBsYWlu JywgJy0tY29tcHJlc3M9bHo0JywKKwkJCSItLWZpbGU9JHRlbXBkaXIvY29tcHJlc3Npb25fbHo0 X3BsYWluLnNxbC5sejQiLCAncG9zdGdyZXMnLAorCQldLAorCQkjIERlY29tcHJlc3MgdGhlIGdl bmVyYXRlZCBmaWxlIHRvIHJ1biB0aHJvdWdoIHRoZSB0ZXN0cy4KKwkJY29tcHJlc3NfY21kID0+ IHsKKwkJCXByb2dyYW0gPT4gJEVOVnsnTFo0J30sCisJCQlhcmdzICAgID0+IFsKKwkJCQknLWQn LCAnLWYnLAorCQkJCSIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRfcGxhaW4uc3FsLmx6NCIsCisJ CQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9wbGFpbi5zcWwiLAorCQkJXSwKKwkJfSwKKwl9 LAorCiAJY2xlYW4gPT4gewogCQlkdW1wX2NtZCA9PiBbCiAJCQkncGdfZHVtcCcsCkBAIC00MTc1 LDExICs0MjQ5LDExIEBAIGZvcmVhY2ggbXkgJHJ1biAoc29ydCBrZXlzICVwZ2R1bXBfcnVucykK IAlteSAkcnVuX2RiICAgPSAncG9zdGdyZXMnOwogCiAJIyBTa2lwIGNvbW1hbmQtbGV2ZWwgdGVz dHMgZm9yIGd6aXAgaWYgdGhlcmUgaXMgbm8gc3VwcG9ydCBmb3IgaXQuCi0JaWYgKCAgIGRlZmlu ZWQoJHBnZHVtcF9ydW5zeyRydW59LT57Y29tcGlsZV9vcHRpb259KQotCQkmJiAkcGdkdW1wX3J1 bnN7JHJ1bn0tPntjb21waWxlX29wdGlvbn0gZXEgJ2d6aXAnCi0JCSYmICEkc3VwcG9ydHNfZ3pp cCkKKwlpZiAoJHBnZHVtcF9ydW5zeyRydW59LT57Y29tcGlsZV9vcHRpb259ICYmCisJCSgkcGdk dW1wX3J1bnN7JHJ1bn0tPntjb21waWxlX29wdGlvbn0gZXEgJ2d6aXAnICYmICEkc3VwcG9ydHNf Z3ppcCkgfHwKKwkJKCRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVfb3B0aW9ufSBlcSAnbHo0 JyAmJiAhJHN1cHBvcnRzX2x6NCkpCiAJewotCQlub3RlICIkcnVuOiBza2lwcGVkIGR1ZSB0byBu byBnemlwIHN1cHBvcnQiOworCQlub3RlICIkcnVuOiBza2lwcGVkIGR1ZSB0byBubyAkcGdkdW1w X3J1bnN7JHJ1bn0tPntjb21waWxlX29wdGlvbn0gc3VwcG9ydCI7CiAJCW5leHQ7CiAJfQogCmRp ZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVzcGx1c2NoZWNrIGIvc3JjL3Rvb2xz L3BnaW5jbHVkZS9jcGx1c3BsdXNjaGVjawppbmRleCA4ODA1MjM3ZWRiLi5kNDRjZTY0ZmQ3IDEw MDc1NQotLS0gYS9zcmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVzcGx1c2NoZWNrCisrKyBiL3NyYy90 b29scy9wZ2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sKQEAgLTE1Miw2ICsxNTIsNyBAQCBkbwogCSMg YXMgZmllbGQgbmFtZXMsIHdoaWNoIGlzIHVuZm9ydHVuYXRlIGJ1dCB3ZSB3b24ndCBjaGFuZ2Ug aXQgbm93LgogCXRlc3QgIiRmIiA9IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmggJiYg Y29udGludWUKIAl0ZXN0ICIkZiIgPSBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaCAmJiBj b250aW51ZQorCXRlc3QgIiRmIiA9IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQuaCAmJiBj b250aW51ZQogCXRlc3QgIiRmIiA9IHNyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5oICYmIGNvbnRp bnVlCiAJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oICYm IGNvbnRpbnVlCiAJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCAmJiBjb250 aW51ZQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA4MWE0NTE2NDFhLi4wZTI1YzdmNThh IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTM4MSw2ICsxMzgxLDcgQEAgTFdMb2Nr CiBMV0xvY2tIYW5kbGUKIExXTG9ja01vZGUKIExXTG9ja1BhZGRlZAorTFo0Q29tcHJlc3NvclN0 YXRlCiBMWjRGX2NvbXByZXNzaW9uQ29udGV4dF90CiBMWjRGX2RlY29tcHJlc3NPcHRpb25zX3QK IExaNEZfZGVjb21wcmVzc2lvbkNvbnRleHRfdAotLSAKMi4zNC4xCgo= --b1_deAkqpRYEv9bfARgIiya5BWa42kQe417DwyygRq8--