Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w7Ddk-0055E6-30 for pgsql-hackers@arkaria.postgresql.org; Mon, 30 Mar 2026 14:30:53 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w7Ddj-003h8d-0G for pgsql-hackers@arkaria.postgresql.org; Mon, 30 Mar 2026 14:30:51 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w7Ddi-003h8U-1J for pgsql-hackers@lists.postgresql.org; Mon, 30 Mar 2026 14:30:51 +0000 Received: from lahtoruutu.iki.fi ([2a0b:5c81:1c1::37]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1w7Ddf-00000001ogE-17QT for pgsql-hackers@postgresql.org; Mon, 30 Mar 2026 14:30:49 +0000 Received: from [10.0.2.15] (unknown [130.41.208.2]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4fktvc1n10z49PvY; Mon, 30 Mar 2026 17:30:35 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1774881036; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=CoK9DcJKQLUS2SBevVOcYmcpsYpe91UZkajDwsIF9I0=; b=d2IHDq2cx1QXpTdUn6up/vW4jOcd9uPSIxW5Ic5xFc4gVVMaxBIetK/RKaMSAlDE0E7F/D 2c0/Lw/Q/+kc32/G0xSh51HHe8NaFk02G7h0aDiinuXRKCTjEwHIvzrKCcMTmci34KILPD bKeh2PiPk+G7uZMpuWRAd/LK8lU+GqL2xW07RacxH0Lj38cyMA4Mgedo1OzHErwCxVx01o ibQOW+K1ysHZGYNtcHAQKoo246St7XkwXyr0uWGM4ZFQuOtT/LNgos7eaJ82HcAToRGH+u lZSr4/BmD6ti9ewSDuO3CKPpZDSppHkeLlfrLNujr8tgOGZPwRjtE+yHtklQqw== ARC-Seal: i=1; a=rsa-sha256; d=iki.fi; s=lahtoruutu; cv=none; t=1774881036; b=maEwFwcDijg43B7NLs1vL1pUHxEbdXSxlNU9WsKwFDzn+dwmhdrR1RIZWOHxr4bVY+un26 /QQ6pZvn0lJGg5c+4+WQrxVRhTy2mlYYLCx0xMzBjwfoNzNAaV8+BkT/JUXQYSckwFtjuB 1fC0uRzfuK0GDkg/bCFEPU4FVA85Y3wRYcsqUtZcH8/IbqFnVobX8C48OCD0d43ZYQxLA7 zg7RAjRQT7H2LGu40FzTdA4kmdJd4p7vAkiDtxpZHSp2PvkO41bOkYjd806vp/PZju8PIK vZdPxiz7A+h2fkbq+Ihp2MxDOYKmlAxggV6lND9iC2lFR5FBFoYAVdTerN72Zg== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1774881036; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=CoK9DcJKQLUS2SBevVOcYmcpsYpe91UZkajDwsIF9I0=; b=aPmQ04r0496Nhl38UfNom5Z1y6bi4aU6SbKJlY1R2M+fkxW8eNL/Eyu5BH4dzGVDueoFN7 Q8UNbeGF6R+imLaWmWLlIdM2eR0YRHzHBtnG6RjALZOQBUFVuFy0++ojT8T3Y4F/1qz6ex Uz3HrbxX2g/Zf9N94t7SbCnkpzZVnm66Bf6YUAby1g725trp67Ss+vGwR+s3SuI7nE8fBD Bhla6ZbBFgpGfM1w/4d+22JeYM/mTsy4f+hBf2rcO+Bdbm5o/N61o4JzQc7sGeXjYMTzQz 97OXtb9MMvCilGneVUTaTEbz9+KhtPUtpbVVF/cfz4NRCSj4hltG95DYB6YOQw== Content-Type: multipart/mixed; boundary="------------0gCmxA1gWag3FLKBqbygtrBC" Message-ID: Date: Mon, 30 Mar 2026 17:30:35 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Thread-safe getopt() To: Peter Eisentraut , pgsql-hackers References: <856e5ec3-879f-42ee-8258-8bcc6ec9bdea@eisentraut.org> <2bc824fb-7455-4ce1-97c8-1909ea2cc3cc@eisentraut.org> Content-Language: en-US From: Heikki Linnakangas In-Reply-To: <2bc824fb-7455-4ce1-97c8-1909ea2cc3cc@eisentraut.org> 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. --------------0gCmxA1gWag3FLKBqbygtrBC Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Thanks for the review! On 27/03/2026 16:29, Peter Eisentraut wrote: > On 19.05.25 22:22, Heikki Linnakangas wrote: >>> - getopt() >>> >>> This needs a custom replacement.  (There is no getopt_r() because >>> programs usually don't call getopt() after startup.) >>> >>> (Note: This is also called during session startup, not only during >>> initial postmaster start.  So we definitely need something here, if we >>> want to, like, start more than one session concurrently.) >> >> Here's a patch for a thread-safe version of getopt(). I implemented it >> as two functions, pg_getopt_start() and pg_getopt_next(). Since >> there's no standard to follow, we have freedom on how to implement it, >> and IMHO that feels more natural than the single getopt() function. I >> took the implementation from the getopt() replacement we already had >> for platforms that don't have getopt(), moving all the global >> variables it used to a struct. >> >> The last patch attached replaces all calls in the server to use the >> new variant, but leaves all the calls in client programs alone. I >> considered changing the client programs as well, but there's no >> immediate need, and it seems nice to use OS functions when possible. >> >> (The first patch fixes a little harmless bug in >> get_stats_option_name() that's gone unnoticed since 2006 but got in >> the way now.) > > That first patch seems like a genuine latent bug that should be fixed. > > The API you have created here looks pretty good to me. > > I don't think we need to apply this to BootstrapModeMain() or > PostmasterMain(), it would be sufficient to use it in > process_postgres_switches() in tcop/postgres.c.  It don't see any > advantage in using it where not needed (let alone client programs). I'd prefer to change those too. It's nice to be able to say "there are no getopt() calls in the backend binary", and not have to scrutinize which ones are OK. Also I actually like the new API better than plain getopt(). Agreed on the client programs. > (I don't suppose there is a way to get rid of the need to do command- > line option parsing for the startup packet.  It seems to be too widely > used.) Right.. Attached is a rebased version of the patches, no material changes. Barring objections, I'll commit later tonight or tomorrow. - Heikki --------------0gCmxA1gWag3FLKBqbygtrBC Content-Type: text/x-patch; charset=UTF-8; name="v2-0001-Fix-latent-bug-in-get_stats_option_name.patch" Content-Disposition: attachment; filename="v2-0001-Fix-latent-bug-in-get_stats_option_name.patch" Content-Transfer-Encoding: base64 RnJvbSA5ZGU3ZjY0Njc5OWYxYWRkNjA1MmZhZDkyYmRmMDdjYjNjNzhhZGM1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMzAgTWFyIDIwMjYgMTc6MjA6MjQgKzAzMDAK U3ViamVjdDogW1BBVENIIHYyIDEvM10gRml4IGxhdGVudCBidWcgaW4gZ2V0X3N0YXRzX29w dGlvbl9uYW1lKCkKClRoZSBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byBsb29rIGF0IHRoZSBw YXNzZWQgaW4gJ2FyZycgYXJndW1lbnQsIGJ1dApwZWVrcyBhdCB0aGUgJ29wdGFyZycgZ2xv YmFsIHZhcmlhYmxlIHRoYXQncyBwYXJ0IG9mIGdldG9wdCgpCmluc3RlYWQuIEl0IGhhcHBl bmVkIHRvIHdvcmsgYW55d2F5LCBiZWNhdXNlIGFsbCBjYWxsZXJzIHBhc3NlZAonb3B0YXJn JyBhcyB0aGUgYXJndW1lbnQuCgpSZXZpZXdlZC1ieTogUGV0ZXIgRWlzZW50cmF1dCA8cGV0 ZXJAZWlzZW50cmF1dC5vcmc+CkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwu b3JnL21lc3NhZ2UtaWQvZDFkYTVmMGUtMGQ2OC00N2M5LWE4ODItZWIyMmY0NjI3NTJmQGlr aS5maQotLS0KIHNyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyB8IDQgKystLQogMSBmaWxl IGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3Rn cmVzLmMKaW5kZXggYjM1NjMxMTMyMTkuLjA0ZjRhZTExNmE1IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC90Y29wL3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jl cy5jCkBAIC0zNzk2LDkgKzM3OTYsOSBAQCBnZXRfc3RhdHNfb3B0aW9uX25hbWUoY29uc3Qg Y2hhciAqYXJnKQogCXN3aXRjaCAoYXJnWzBdKQogCXsKIAkJY2FzZSAncCc6Ci0JCQlpZiAo b3B0YXJnWzFdID09ICdhJykJLyogInBhcnNlciIgKi8KKwkJCWlmIChhcmdbMV0gPT0gJ2En KQkvKiAicGFyc2VyIiAqLwogCQkJCXJldHVybiAibG9nX3BhcnNlcl9zdGF0cyI7Ci0JCQll bHNlIGlmIChvcHRhcmdbMV0gPT0gJ2wnKQkvKiAicGxhbm5lciIgKi8KKwkJCWVsc2UgaWYg KGFyZ1sxXSA9PSAnbCcpIC8qICJwbGFubmVyIiAqLwogCQkJCXJldHVybiAibG9nX3BsYW5u ZXJfc3RhdHMiOwogCQkJYnJlYWs7CiAKLS0gCjIuNDcuMwoK --------------0gCmxA1gWag3FLKBqbygtrBC Content-Type: text/x-patch; charset=UTF-8; name="v2-0002-Invent-custom-pg_getopt_ctx-that-is-thread-safe.patch" Content-Disposition: attachment; filename*0="v2-0002-Invent-custom-pg_getopt_ctx-that-is-thread-safe.patc"; filename*1="h" Content-Transfer-Encoding: base64 RnJvbSBlMWY5Y2NiMDBhNjBiZGVhZTRmMjliNGM4NTY0ZGFmNTgwZmIxNzBhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMzAgTWFyIDIwMjYgMTc6MjA6MzIgKzAzMDAK U3ViamVjdDogW1BBVENIIHYyIDIvM10gSW52ZW50IGN1c3RvbSBwZ19nZXRvcHRfY3R4IHRo YXQgaXMgdGhyZWFkLXNhZmUKClRoZSBzdGFuZGFyZCBnZXRvcHQoMykgZnVuY3Rpb24gaXMg bm90IHJlLWVudHJhbnQgbm9yIHRocmVhZC1zYWZlLgpUaGF0J3MgT0sgZm9yIGN1cnJlbnQg dXNhZ2UsIGJ1dCBpdCdzIG9uZSBtb3JlIGxpdHRsZSB0aGluZyB3ZSBuZWVkIHRvCmNoYW5n ZSBpbiBvcmRlciB0byBtYWtlIHRoZSBzZXJ2ZXIgbXVsdGktdGhyZWFkZWQuCgpUaGVyZSdz IG5vIHN0YW5kYXJkIGdldG9wdF9yKCkgZnVuY3Rpb24gb24gYW55IHBsYXRmb3JtLCBiZWNh dXNlCmNvbW1hbmQgbGluZSBhcmd1bWVudHMgYXJlIHVzdWFsbHkgcGFyc2VkIGVhcmx5IHdo ZW4geW91IHN0YXJ0IGEKcHJvZ3JhbSwgdXN1YWxseSBiZWZvcmUgbGF1bmNoaW5nIGFueSB0 aHJlYWRzLCBzbyB0aGVyZSdzIG5vdCBtdWNoCm5lZWQgZm9yIGl0LiBIb3dldmVyLCB3ZSBj YWxsIGl0IGF0IGJhY2tlbmQgc3RhcnR1cCB0byBwYXJzZSBvcHRpb25zCmZyb20gdGhlIHN0 YXJ0dXAgcGFja2V0LiBXZSBhcmUgdGhlcmVmb3JlIGZyZWUgdG8gZGVmaW5lIG91ciBvd24u CgpUaGUgcGdfZ2V0b3B0X3N0YXJ0L25leHQoKSBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBv biB0aGUgb2xkIGdldG9wdAppbXBsZW1lbnRhdGlvbiwgSSBqdXN0IGdhdGhlcmVkIGFsbCB0 aGUgc3RhdGUgdmFyaWFibGVzIHRvIGEgc3RydWN0LgpUaGUgbm9uLXJlLWVudHJhbnQgZ2V0 b3B0KCkgZnVuY3Rpb24gaXMgbm93IGEgd3JhcHBlciBhcm91bmQgdGhlCmN1c3RvbSByZS1l bnRyYW50IHZhcmlhbnQsIG9uIHBsYXRmb3JtcyB0aGF0IGRvbid0IGhhdmUgZ2V0b3B0KDMp LgpnZXRvcHRfbG9uZygpIGlzIG5vdCB1c2VkIGluIHRoZSBzZXJ2ZXIsIHNvIHdlIGRvbid0 IG5lZWQgdG8gcHJvdmlkZSBhCnJlLWVudHJhbnQgdmFyaWFudCBvZiB0aGF0LgoKUmV2aWV3 ZWQtYnk6IFBldGVyIEVpc2VudHJhdXQgPHBldGVyQGVpc2VudHJhdXQub3JnPgpEaXNjdXNz aW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL2QxZGE1ZjBlLTBk NjgtNDdjOS1hODgyLWViMjJmNDYyNzUyZkBpa2kuZmkKLS0tCiBzcmMvaW5jbHVkZS9wb3J0 L3BnX2dldG9wdF9jdHguaCB8ICAyOSArKysrKysrCiBzcmMvcG9ydC9NYWtlZmlsZSAgICAg ICAgICAgICAgICB8ICAgMSArCiBzcmMvcG9ydC9nZXRvcHQuYyAgICAgICAgICAgICAgICB8 ICA5MSArKysrKy0tLS0tLS0tLS0tLS0tLS0KIHNyYy9wb3J0L21lc29uLmJ1aWxkICAgICAg ICAgICAgIHwgICAxICsKIHNyYy9wb3J0L3BnX2dldG9wdF9jdHguYyAgICAgICAgIHwgMTM2 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0IHwgICAxICsKIDYgZmlsZXMgY2hhbmdlZCwgMTg5IGluc2VydGlvbnMo KyksIDcwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3Bv cnQvcGdfZ2V0b3B0X2N0eC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3BvcnQvcGdfZ2V0 b3B0X2N0eC5jCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9ydC9wZ19nZXRvcHRfY3R4 LmggYi9zcmMvaW5jbHVkZS9wb3J0L3BnX2dldG9wdF9jdHguaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTA2NjkxNWQyNTkKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvaW5jbHVkZS9wb3J0L3BnX2dldG9wdF9jdHguaApAQCAtMCwwICsxLDI5IEBACisv KgorICogUmUtZW50cmFudCB2ZXJzaW9uIG9mIHRoZSBzdGFuZGFyZCBnZXRvcHQoMykgZnVu Y3Rpb24uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIHNyYy9pbmNsdWRlL3BvcnQvcGdf Z2V0b3B0X2N0eC5oCisgKi8KKyNpZm5kZWYgUEdfR0VUT1BUX0NUWF9ICisjZGVmaW5lIFBH X0dFVE9QVF9DVFhfSAorCit0eXBlZGVmIHN0cnVjdAoreworCWludAkJCW5hcmdjOworCWNo YXIJICAgKmNvbnN0ICpuYXJndjsKKwljb25zdCBjaGFyICpvc3RyOworCisJY2hhcgkgICAq b3B0YXJnOworCWludAkJCW9wdGluZDsKKwlpbnQJCQlvcHRlcnI7CisJaW50CQkJb3B0b3B0 OworCisJLyogaW50ZXJuYWwgc3RhdGUgKi8KKwljaGFyCSAgICpwbGFjZTsKK30gcGdfZ2V0 b3B0X2N0eDsKKworZXh0ZXJuIHZvaWQgcGdfZ2V0b3B0X3N0YXJ0KHBnX2dldG9wdF9jdHgg KmN0eCwgaW50IG5hcmdjLCBjaGFyICpjb25zdCAqbmFyZ3YsIGNvbnN0IGNoYXIgKm9zdHIp OworZXh0ZXJuIGludAlwZ19nZXRvcHRfbmV4dChwZ19nZXRvcHRfY3R4ICpjdHgpOworCisj ZW5kaWYJCQkJCQkJLyogUEdfR0VUT1BUX0NUWF9IICovCmRpZmYgLS1naXQgYS9zcmMvcG9y dC9NYWtlZmlsZSBiL3NyYy9wb3J0L01ha2VmaWxlCmluZGV4IDQ3Y2ZlYTE1MDdkLi43ZTli NTg3NzY1MiAxMDA2NDQKLS0tIGEvc3JjL3BvcnQvTWFrZWZpbGUKKysrIGIvc3JjL3BvcnQv TWFrZWZpbGUKQEAgLTQ1LDYgKzQ1LDcgQEAgT0JKUyA9IFwKIAlwYXRoLm8gXAogCXBnX2Jp dHV0aWxzLm8gXAogCXBnX2NwdV94ODYubyBcCisJcGdfZ2V0b3B0X2N0eC5vIFwKIAlwZ19s b2NhbGVjb252X3IubyBcCiAJcGdfbnVtYS5vIFwKIAlwZ19wb3Bjb3VudF9hYXJjaDY0Lm8g XApkaWZmIC0tZ2l0IGEvc3JjL3BvcnQvZ2V0b3B0LmMgYi9zcmMvcG9ydC9nZXRvcHQuYwpp bmRleCAyY2NhNWEwNjczYS4uMzRhNjBkNWYzMmQgMTAwNjQ0Ci0tLSBhL3NyYy9wb3J0L2dl dG9wdC5jCisrKyBiL3NyYy9wb3J0L2dldG9wdC5jCkBAIC0zMiwxMSArMzIsNyBAQAogI2lu Y2x1ZGUgImMuaCIKIAogI2luY2x1ZGUgInBnX2dldG9wdC5oIgotCi0jaWYgZGVmaW5lZChM SUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJA KCMpZ2V0b3B0LmMJOC4zIChCZXJrZWxleSkgNC8yNy85NSI7Ci0jZW5kaWYJCQkJCQkJLyog TElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotCisjaW5jbHVkZSAicG9ydC9wZ19nZXRvcHRf Y3R4LmgiCiAKIC8qCiAgKiBPbiBPcGVuQlNEIGFuZCBzb21lIHZlcnNpb25zIG9mIFNvbGFy aXMsIG9wdGVyciBhbmQgZnJpZW5kcyBhcmUgZGVmaW5lZCBpbgpAQCAtNTQsODQgKzUwLDM5 IEBAIGNoYXIJICAgKm9wdGFyZzsJCQkJLyogYXJndW1lbnQgYXNzb2NpYXRlZCB3aXRoIG9w dGlvbiAqLwogCiAjZW5kaWYKIAotI2RlZmluZSBCQURDSAkoaW50KSc/JwotI2RlZmluZSBC QURBUkcJKGludCknOicKLSNkZWZpbmUgRU1TRwkiIgotCiAvKgogICogZ2V0b3B0CiAgKglQ YXJzZSBhcmdjL2FyZ3YgYXJndW1lbnQgdmVjdG9yLgogICoKKyAqIFdlIHVzZSB0aGUgcmUt ZW50cmFudCBwZ19nZXRvcHRfY3R4KCkgZnVuY3Rpb24gdW5kZXIgdGhlIGhvb2QsIGJ1dCBl eHBvc2UgdGhlCisgKiBzdGFuZGFyZCBub24gcmUtZW50cmFudCBBUEkuCisgKgogICogVGhp cyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCB1c2Ugb3B0cmVzZXQuICBJbnN0ZWFkLCB3ZSBn dWFyYW50ZWUgdGhhdAogICogaXQgY2FuIGJlIHJlc3RhcnRlZCBvbiBhIG5ldyBhcmd2IGFy cmF5IGFmdGVyIGEgcHJldmlvdXMgY2FsbCByZXR1cm5lZCAtMSwKICAqIGlmIHRoZSBjYWxs ZXIgcmVzZXRzIG9wdGluZCB0byAxIGJlZm9yZSB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgbmV3 IHNlcmllcy4KLSAqIChJbnRlcm5hbGx5LCB0aGlzIG1lYW5zIHdlIG11c3QgYmUgc3VyZSB0 byByZXNldCAicGxhY2UiIHRvIEVNU0cgYmVmb3JlCisgKiAoSW50ZXJuYWxseSwgdGhpcyBt ZWFucyB3ZSBtdXN0IGJlIHN1cmUgdG8gcmVzZXQgImFjdGl2ZSIgYmVmb3JlCiAgKiByZXR1 cm5pbmcgLTEuKQogICovCiBpbnQKIGdldG9wdChpbnQgbmFyZ2MsIGNoYXIgKmNvbnN0ICpu YXJndiwgY29uc3QgY2hhciAqb3N0cikKIHsKLQlzdGF0aWMgY2hhciAqcGxhY2UgPSBFTVNH OwkvKiBvcHRpb24gbGV0dGVyIHByb2Nlc3NpbmcgKi8KLQljb25zdCBjaGFyICpvbGk7CQkJ Lyogb3B0aW9uIGxldHRlciBsaXN0IGluZGV4ICovCisJc3RhdGljIGJvb2wgYWN0aXZlID0g ZmFsc2U7CisJc3RhdGljIHBnX2dldG9wdF9jdHggY3R4OworCWludAkJCXJlc3VsdDsKIAot CWlmICghKnBsYWNlKQotCXsJCQkJCQkJLyogdXBkYXRlIHNjYW5uaW5nIHBvaW50ZXIgKi8K LQkJaWYgKG9wdGluZCA+PSBuYXJnYyB8fCAqKHBsYWNlID0gbmFyZ3Zbb3B0aW5kXSkgIT0g Jy0nKQotCQl7Ci0JCQlwbGFjZSA9IEVNU0c7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJaWYg KHBsYWNlWzFdICYmICorK3BsYWNlID09ICctJyAmJiBwbGFjZVsxXSA9PSAnXDAnKQotCQl7 CQkJCQkJLyogZm91bmQgIi0tIiAqLwotCQkJKytvcHRpbmQ7Ci0JCQlwbGFjZSA9IEVNU0c7 Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9CQkJCQkJCS8qIG9wdGlvbiBsZXR0ZXIgb2theT8g Ki8KLQlpZiAoKG9wdG9wdCA9IChpbnQpICpwbGFjZSsrKSA9PSAoaW50KSAnOicgfHwKLQkJ IShvbGkgPSBzdHJjaHIob3N0ciwgb3B0b3B0KSkpCisJaWYgKCFhY3RpdmUpCiAJewotCQkv KgotCQkgKiBpZiB0aGUgdXNlciBkaWRuJ3Qgc3BlY2lmeSAnLScgYXMgYW4gb3B0aW9uLCBh c3N1bWUgaXQgbWVhbnMgLTEuCi0JCSAqLwotCQlpZiAob3B0b3B0ID09IChpbnQpICctJykK LQkJewotCQkJcGxhY2UgPSBFTVNHOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCWlmICghKnBs YWNlKQotCQkJKytvcHRpbmQ7Ci0JCWlmIChvcHRlcnIgJiYgKm9zdHIgIT0gJzonKQotCQkJ KHZvaWQpIGZwcmludGYoc3RkZXJyLAotCQkJCQkJICAgImlsbGVnYWwgb3B0aW9uIC0tICVj XG4iLCBvcHRvcHQpOwotCQlyZXR1cm4gQkFEQ0g7CisJCXBnX2dldG9wdF9zdGFydCgmY3R4 LCBuYXJnYywgbmFyZ3YsIG9zdHIpOworCQljdHgub3B0ZXJyID0gb3B0ZXJyOworCQlhY3Rp dmUgPSB0cnVlOwogCX0KLQlpZiAoKisrb2xpICE9ICc6JykKLQl7CQkJCQkJCS8qIGRvbid0 IG5lZWQgYXJndW1lbnQgKi8KLQkJb3B0YXJnID0gTlVMTDsKLQkJaWYgKCEqcGxhY2UpCi0J CQkrK29wdGluZDsKLQl9Ci0JZWxzZQotCXsJCQkJCQkJLyogbmVlZCBhbiBhcmd1bWVudCAq LwotCQlpZiAoKnBsYWNlKQkJCQkvKiBubyB3aGl0ZSBzcGFjZSAqLwotCQkJb3B0YXJnID0g cGxhY2U7Ci0JCWVsc2UgaWYgKG5hcmdjIDw9ICsrb3B0aW5kKQotCQl7CQkJCQkJLyogbm8g YXJnICovCi0JCQlwbGFjZSA9IEVNU0c7Ci0JCQlpZiAoKm9zdHIgPT0gJzonKQotCQkJCXJl dHVybiBCQURBUkc7Ci0JCQlpZiAob3B0ZXJyKQotCQkJCSh2b2lkKSBmcHJpbnRmKHN0ZGVy ciwKLQkJCQkJCQkgICAib3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICVjXG4iLAot CQkJCQkJCSAgIG9wdG9wdCk7Ci0JCQlyZXR1cm4gQkFEQ0g7Ci0JCX0KLQkJZWxzZQotCQkJ Lyogd2hpdGUgc3BhY2UgKi8KLQkJCW9wdGFyZyA9IG5hcmd2W29wdGluZF07Ci0JCXBsYWNl ID0gRU1TRzsKLQkJKytvcHRpbmQ7Ci0JfQotCXJldHVybiBvcHRvcHQ7CQkJCS8qIGR1bXAg YmFjayBvcHRpb24gbGV0dGVyICovCisKKwlyZXN1bHQgPSBwZ19nZXRvcHRfbmV4dCgmY3R4 KTsKKwlvcHRlcnIgPSBjdHgub3B0ZXJyOworCW9wdGluZCA9IGN0eC5vcHRpbmQ7CisJb3B0 b3B0ID0gY3R4Lm9wdG9wdDsKKwlvcHRhcmcgPSBjdHgub3B0YXJnOworCWlmIChyZXN1bHQg PT0gLTEpCisJCWFjdGl2ZSA9IGZhbHNlOworCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1n aXQgYS9zcmMvcG9ydC9tZXNvbi5idWlsZCBiL3NyYy9wb3J0L21lc29uLmJ1aWxkCmluZGV4 IDcyOTZmOGUzYzAzLi5kNTVjYjA0MjRmMyAxMDA2NDQKLS0tIGEvc3JjL3BvcnQvbWVzb24u YnVpbGQKKysrIGIvc3JjL3BvcnQvbWVzb24uYnVpbGQKQEAgLTgsNiArOCw3IEBAIHBncG9y dF9zb3VyY2VzID0gWwogICAncGF0aC5jJywKICAgJ3BnX2JpdHV0aWxzLmMnLAogICAncGdf Y3B1X3g4Ni5jJywKKyAgJ3BnX2dldG9wdF9jdHguYycsCiAgICdwZ19sb2NhbGVjb252X3Iu YycsCiAgICdwZ19udW1hLmMnLAogICAncGdfcG9wY291bnRfYWFyY2g2NC5jJywKZGlmZiAt LWdpdCBhL3NyYy9wb3J0L3BnX2dldG9wdF9jdHguYyBiL3NyYy9wb3J0L3BnX2dldG9wdF9j dHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDA3ZjQwZGQy N2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcG9ydC9wZ19nZXRvcHRfY3R4LmMKQEAgLTAs MCArMSwxMzYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBnX2dldG9wdF9j dHguYworICogICAgVGhyZWFkLXNhZmUgaW1wbGVtZW50YXRpb24gb2YgZ2V0b3B0KCkKKyAq CisgKiBDb3B5cmlnaHQgKGMpIDE5ODcsIDE5OTMsIDE5OTQKKyAqCVRoZSBSZWdlbnRzIG9m IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKyAqCSAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqCSAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluIHRoZQorICoJICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFt ZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMK KyAqCSAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKgkgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQ UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4g IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICog T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg SU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICoKKyAqIElERU5USUZJQ0FUSU9O CisgKiAgICBzcmMvcG9ydC9wZ19nZXRvcHRfY3R4LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqLworCisjaW5jbHVkZSAiYy5oIgorCisjaW5jbHVkZSAicG9ydC9wZ19nZXRv cHRfY3R4LmgiCisKKyNkZWZpbmUgQkFEQ0gJKGludCknPycKKyNkZWZpbmUgQkFEQVJHCShp bnQpJzonCisjZGVmaW5lIEVNU0cJIiIKKworLyoKKyAqIFN0YXJ0IHBhcnNpbmcgYXJnYy9h cmd2IGFyZ3VtZW50IHZlY3Rvci4KKyAqCisgKiBUaGlzIGlzIGEgcmUtZW50cmFudCB2ZXJz aW9uIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGdldG9wdCgzKSBmdW5jdGlvbi4gVG8KKyAq IHVzZSwgZmlyc3QgY2FsbCBwZ19nZXRvcHRfc3RhcnQoKSB0byBpbml0aWFsaXplIHRoZSBz dGF0ZSwgYW5kIHRoZW4gY2FsbAorICogcGdfZ2V0b3B0X25leHQoKSB1bnRpbCBpdCByZXR1 cm5zIC0xLgorICovCit2b2lkCitwZ19nZXRvcHRfc3RhcnQocGdfZ2V0b3B0X2N0eCAqY3R4 LCBpbnQgbmFyZ2MsIGNoYXIgKmNvbnN0ICpuYXJndiwgY29uc3QgY2hhciAqb3N0cikKK3sK KwljdHgtPm5hcmdjID0gbmFyZ2M7CisJY3R4LT5uYXJndiA9IG5hcmd2OworCWN0eC0+b3N0 ciA9IG9zdHI7CisKKwljdHgtPm9wdGluZCA9IDE7CisJY3R4LT5vcHRhcmcgPSBOVUxMOwor CWN0eC0+b3B0ZXJyID0gMDsJCQkvKiBDYWxsZXIgbWF5IHNldCB0aGlzIGFmdGVyIHRoZSBj YWxsICovCisJY3R4LT5vcHRvcHQgPSAwOworCisJY3R4LT5wbGFjZSA9IEVNU0c7CQkJLyog b3B0aW9uIGxldHRlciBwcm9jZXNzaW5nICovCit9CisKKy8qCisgKiBQYXJzZSBuZXh0IG9w dGlvbiBpbiBhcmdjL2FyZ3YgYXJndW1lbnQgdmVjdG9yCisgKi8KK2ludAorcGdfZ2V0b3B0 X25leHQocGdfZ2V0b3B0X2N0eCAqY3R4KQoreworCWNvbnN0IGNoYXIgKm9saTsJCQkvKiBv cHRpb24gbGV0dGVyIGxpc3QgaW5kZXggKi8KKworCWlmICghKmN0eC0+cGxhY2UpCisJewkJ CQkJCQkvKiB1cGRhdGUgc2Nhbm5pbmcgcG9pbnRlciAqLworCQlpZiAoY3R4LT5vcHRpbmQg Pj0gY3R4LT5uYXJnYyB8fCAqKGN0eC0+cGxhY2UgPSBjdHgtPm5hcmd2W2N0eC0+b3B0aW5k XSkgIT0gJy0nKQorCQl7CisJCQljdHgtPnBsYWNlID0gRU1TRzsKKwkJCXJldHVybiAtMTsK KwkJfQorCQlpZiAoY3R4LT5wbGFjZVsxXSAmJiAqKytjdHgtPnBsYWNlID09ICctJyAmJiBj dHgtPnBsYWNlWzFdID09ICdcMCcpCisJCXsJCQkJCQkvKiBmb3VuZCAiLS0iICovCisJCQkr K2N0eC0+b3B0aW5kOworCQkJY3R4LT5wbGFjZSA9IEVNU0c7CisJCQlyZXR1cm4gLTE7CisJ CX0KKwl9CQkJCQkJCS8qIG9wdGlvbiBsZXR0ZXIgb2theT8gKi8KKwlpZiAoKGN0eC0+b3B0 b3B0ID0gKGludCkgKmN0eC0+cGxhY2UrKykgPT0gKGludCkgJzonIHx8CisJCSEob2xpID0g c3RyY2hyKGN0eC0+b3N0ciwgY3R4LT5vcHRvcHQpKSkKKwl7CisJCS8qCisJCSAqIGlmIHRo ZSB1c2VyIGRpZG4ndCBzcGVjaWZ5ICctJyBhcyBhbiBvcHRpb24sIGFzc3VtZSBpdCBtZWFu cyAtMS4KKwkJICovCisJCWlmIChjdHgtPm9wdG9wdCA9PSAoaW50KSAnLScpCisJCXsKKwkJ CWN0eC0+cGxhY2UgPSBFTVNHOworCQkJcmV0dXJuIC0xOworCQl9CisJCWlmICghKmN0eC0+ cGxhY2UpCisJCQkrK2N0eC0+b3B0aW5kOworCQlpZiAoY3R4LT5vcHRlcnIgJiYgKmN0eC0+ b3N0ciAhPSAnOicpCisJCQkodm9pZCkgZnByaW50ZihzdGRlcnIsCisJCQkJCQkgICAiaWxs ZWdhbCBvcHRpb24gLS0gJWNcbiIsIGN0eC0+b3B0b3B0KTsKKwkJcmV0dXJuIEJBRENIOwor CX0KKwlpZiAoKisrb2xpICE9ICc6JykKKwl7CQkJCQkJCS8qIGRvbid0IG5lZWQgYXJndW1l bnQgKi8KKwkJY3R4LT5vcHRhcmcgPSBOVUxMOworCQlpZiAoISpjdHgtPnBsYWNlKQorCQkJ KytjdHgtPm9wdGluZDsKKwl9CisJZWxzZQorCXsJCQkJCQkJLyogbmVlZCBhbiBhcmd1bWVu dCAqLworCQlpZiAoKmN0eC0+cGxhY2UpCQkvKiBubyB3aGl0ZSBzcGFjZSAqLworCQkJY3R4 LT5vcHRhcmcgPSBjdHgtPnBsYWNlOworCQllbHNlIGlmIChjdHgtPm5hcmdjIDw9ICsrY3R4 LT5vcHRpbmQpCisJCXsJCQkJCQkvKiBubyBhcmcgKi8KKwkJCWN0eC0+cGxhY2UgPSBFTVNH OworCQkJaWYgKCpjdHgtPm9zdHIgPT0gJzonKQorCQkJCXJldHVybiBCQURBUkc7CisJCQlp ZiAoY3R4LT5vcHRlcnIpCisJCQkJKHZvaWQpIGZwcmludGYoc3RkZXJyLAorCQkJCQkJCSAg ICJvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gJWNcbiIsCisJCQkJCQkJICAgY3R4 LT5vcHRvcHQpOworCQkJcmV0dXJuIEJBRENIOworCQl9CisJCWVsc2UKKwkJCS8qIHdoaXRl IHNwYWNlICovCisJCQljdHgtPm9wdGFyZyA9IGN0eC0+bmFyZ3ZbY3R4LT5vcHRpbmRdOwor CQljdHgtPnBsYWNlID0gRU1TRzsKKwkJKytjdHgtPm9wdGluZDsKKwl9CisJcmV0dXJuIGN0 eC0+b3B0b3B0OwkJCS8qIGR1bXAgYmFjayBvcHRpb24gbGV0dGVyICovCit9CmRpZmYgLS1n aXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGUzYzEwMDdhYmRmLi44MDFhYjgwOTRlZCAxMDA2 NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTM5ODAsNiArMzk4MCw3IEBAIHBnX2Vu YzJuYW1lCiBwZ19lbmNuYW1lCiBwZ19mZV9zYXNsX21lY2gKIHBnX2Z1bmNwdHJfdAorcGdf Z2V0b3B0X2N0eAogcGdfZ3NzaW5mbwogcGdfaG1hY19jdHgKIHBnX2htYWNfZXJybm8KLS0g CjIuNDcuMwoK --------------0gCmxA1gWag3FLKBqbygtrBC Content-Type: text/x-patch; charset=UTF-8; name="v2-0003-Replace-getopt-with-our-re-entrant-variant-in-the.patch" Content-Disposition: attachment; filename*0="v2-0003-Replace-getopt-with-our-re-entrant-variant-in-the.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAxZTExOWEwYjIyN2Q0NTQ2YTUwMWIyYmI1MzY5NTcwZTgzZjMzY2FiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMzAgTWFyIDIwMjYgMTc6MjI6NTIgKzAzMDAK U3ViamVjdDogW1BBVENIIHYyIDMvM10gUmVwbGFjZSBnZXRvcHQoKSB3aXRoIG91ciByZS1l bnRyYW50IHZhcmlhbnQgaW4gdGhlCiBiYWNrZW5kCgpTb21lIG9mIHRoZXNlIHByb2JhYmx5 IGNvdWxkIGNvbnRpbnVlIHVzaW5nIG5vbi1yZS1lbnRyYW50IGdldG9wdCgpCmV2ZW4gaWYg d2Ugc3RhcnQgdXNpbmcgdGhyZWFkcyBpbiB0aGUgZnV0dXJlLCBidXQgaXQgc2VlbXMgYmV0 dGVyIHRvCm1ha2UgdGhlIHN3aXRjaCBmdWxseSBzbyB0aGF0IHdlIGhhdmUgYSBjbGVhci1j dXQgcnVsZSBvZiAibm8gcGxhaW4KZ2V0b3B0KCkgaW4gdGhlIHBvc3RncmVzIGJpbmFyeSIu CgpSZXZpZXdlZC1ieTogUGV0ZXIgRWlzZW50cmF1dCA8cGV0ZXJAZWlzZW50cmF1dC5vcmc+ CkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvZDFk YTVmMGUtMGQ2OC00N2M5LWE4ODItZWIyMmY0NjI3NTJmQGlraS5maQotLS0KIHNyYy9iYWNr ZW5kL2Jvb3RzdHJhcC9ib290c3RyYXAuYyAgIHwgMjggKysrKysrLS0tLS0KIHNyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jIHwgNjAgKysrKysrKysrKy0tLS0tLS0tLS0t LQogc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jICAgICAgICAgfCA3NyArKysrKysrKysr KysrLS0tLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wc19zdGF0dXMu YyAgfCAgMyArLQogNCBmaWxlcyBjaGFuZ2VkLCA3NyBpbnNlcnRpb25zKCspLCA5MSBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ib290c3RyYXAvYm9vdHN0cmFw LmMgYi9zcmMvYmFja2VuZC9ib290c3RyYXAvYm9vdHN0cmFwLmMKaW5kZXggNjhhNDJkZTA4 ODkuLjM4ZWY2ODNkNGM3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ib290c3RyYXAvYm9v dHN0cmFwLmMKKysrIGIvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jCkBAIC0z Miw3ICszMiw3IEBACiAjaW5jbHVkZSAiY29tbW9uL2xpbmstY2FuYXJ5LmgiCiAjaW5jbHVk ZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCi0jaW5jbHVk ZSAicGdfZ2V0b3B0LmgiCisjaW5jbHVkZSAicG9ydC9wZ19nZXRvcHRfY3R4LmgiCiAjaW5j bHVkZSAicG9zdG1hc3Rlci9wb3N0bWFzdGVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZw YWdlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgpAQCAtMjM2LDYgKzIzNiw3IEBAIEJv b3RzdHJhcE1vZGVNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10sIGJvb2wgY2hlY2tfb25s eSkKIHsKIAlpbnQJCQlpOwogCWNoYXIJICAgKnByb2duYW1lID0gYXJndlswXTsKKwlwZ19n ZXRvcHRfY3R4IG9wdGN0eDsKIAlpbnQJCQlmbGFnOwogCWNoYXIJICAgKnVzZXJEb3B0aW9u ID0gTlVMTDsKIAl1aW50MzIJCWJvb3RzdHJhcF9kYXRhX2NoZWNrc3VtX3ZlcnNpb24gPSAw OwkvKiBObyBjaGVja3N1bSAqLwpAQCAtMjU1LDEyICsyNTYsMTMgQEAgQm9vdHN0cmFwTW9k ZU1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgYm9vbCBjaGVja19vbmx5KQogCWFyZ3Yr KzsKIAlhcmdjLS07CiAKLQl3aGlsZSAoKGZsYWcgPSBnZXRvcHQoYXJnYywgYXJndiwgIkI6 YzpkOkQ6RmtyOlg6LToiKSkgIT0gLTEpCisJcGdfZ2V0b3B0X3N0YXJ0KCZvcHRjdHgsIGFy Z2MsIGFyZ3YsICJCOmM6ZDpEOkZrcjpYOi06Iik7CisJd2hpbGUgKChmbGFnID0gcGdfZ2V0 b3B0X25leHQoJm9wdGN0eCkpICE9IC0xKQogCXsKIAkJc3dpdGNoIChmbGFnKQogCQl7CiAJ CQljYXNlICdCJzoKLQkJCQlTZXRDb25maWdPcHRpb24oInNoYXJlZF9idWZmZXJzIiwgb3B0 YXJnLCBQR0NfUE9TVE1BU1RFUiwgUEdDX1NfQVJHVik7CisJCQkJU2V0Q29uZmlnT3B0aW9u KCJzaGFyZWRfYnVmZmVycyIsIG9wdGN0eC5vcHRhcmcsIFBHQ19QT1NUTUFTVEVSLCBQR0Nf U19BUkdWKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgJy0nOgogCkBAIC0yNzAsMTAgKzI3Miwx MCBAQCBCb290c3RyYXBNb2RlTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdLCBib29sIGNo ZWNrX29ubHkpCiAJCQkJICogcmV0dXJucyBESVNQQVRDSF9QT1NUTUFTVEVSIGlmIGl0IGRv ZXNuJ3QgZmluZCBhIG1hdGNoLCBzbwogCQkJCSAqIGVycm9yIGZvciBhbnl0aGluZyBlbHNl LgogCQkJCSAqLwotCQkJCWlmIChwYXJzZV9kaXNwYXRjaF9vcHRpb24ob3B0YXJnKSAhPSBE SVNQQVRDSF9QT1NUTUFTVEVSKQorCQkJCWlmIChwYXJzZV9kaXNwYXRjaF9vcHRpb24ob3B0 Y3R4Lm9wdGFyZykgIT0gRElTUEFUQ0hfUE9TVE1BU1RFUikKIAkJCQkJZXJlcG9ydChFUlJP UiwKIAkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCi0JCQkJCQkJIGVy cm1zZygiLS0lcyBtdXN0IGJlIGZpcnN0IGFyZ3VtZW50Iiwgb3B0YXJnKSkpOworCQkJCQkJ CSBlcnJtc2coIi0tJXMgbXVzdCBiZSBmaXJzdCBhcmd1bWVudCIsIG9wdGN0eC5vcHRhcmcp KSk7CiAKIAkJCQlwZ19mYWxsdGhyb3VnaDsKIAkJCWNhc2UgJ2MnOgpAQCAtMjgxLDE5ICsy ODMsMTkgQEAgQm9vdHN0cmFwTW9kZU1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgYm9v bCBjaGVja19vbmx5KQogCQkJCQljaGFyCSAgICpuYW1lLAogCQkJCQkJCSAgICp2YWx1ZTsK IAotCQkJCQlQYXJzZUxvbmdPcHRpb24ob3B0YXJnLCAmbmFtZSwgJnZhbHVlKTsKKwkJCQkJ UGFyc2VMb25nT3B0aW9uKG9wdGN0eC5vcHRhcmcsICZuYW1lLCAmdmFsdWUpOwogCQkJCQlp ZiAoIXZhbHVlKQogCQkJCQl7CiAJCQkJCQlpZiAoZmxhZyA9PSAnLScpCiAJCQkJCQkJZXJl cG9ydChFUlJPUiwKIAkJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwK IAkJCQkJCQkJCSBlcnJtc2coIi0tJXMgcmVxdWlyZXMgYSB2YWx1ZSIsCi0JCQkJCQkJCQkJ CW9wdGFyZykpKTsKKwkJCQkJCQkJCQkJb3B0Y3R4Lm9wdGFyZykpKTsKIAkJCQkJCWVsc2UK IAkJCQkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5U QVhfRVJST1IpLAogCQkJCQkJCQkJIGVycm1zZygiLWMgJXMgcmVxdWlyZXMgYSB2YWx1ZSIs Ci0JCQkJCQkJCQkJCW9wdGFyZykpKTsKKwkJCQkJCQkJCQkJb3B0Y3R4Lm9wdGFyZykpKTsK IAkJCQkJfQogCiAJCQkJCVNldENvbmZpZ09wdGlvbihuYW1lLCB2YWx1ZSwgUEdDX1BPU1RN QVNURVIsIFBHQ19TX0FSR1YpOwpAQCAtMzAyLDE0ICszMDQsMTQgQEAgQm9vdHN0cmFwTW9k ZU1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgYm9vbCBjaGVja19vbmx5KQogCQkJCQli cmVhazsKIAkJCQl9CiAJCQljYXNlICdEJzoKLQkJCQl1c2VyRG9wdGlvbiA9IHBzdHJkdXAo b3B0YXJnKTsKKwkJCQl1c2VyRG9wdGlvbiA9IHBzdHJkdXAob3B0Y3R4Lm9wdGFyZyk7CiAJ CQkJYnJlYWs7CiAJCQljYXNlICdkJzoKIAkJCQl7CiAJCQkJCS8qIFR1cm4gb24gZGVidWdn aW5nIGZvciB0aGUgYm9vdHN0cmFwIHByb2Nlc3MuICovCiAJCQkJCWNoYXIJICAgKmRlYnVn c3RyOwogCi0JCQkJCWRlYnVnc3RyID0gcHNwcmludGYoImRlYnVnJXMiLCBvcHRhcmcpOwor CQkJCQlkZWJ1Z3N0ciA9IHBzcHJpbnRmKCJkZWJ1ZyVzIiwgb3B0Y3R4Lm9wdGFyZyk7CiAJ CQkJCVNldENvbmZpZ09wdGlvbigibG9nX21pbl9tZXNzYWdlcyIsIGRlYnVnc3RyLAogCQkJ CQkJCQkJUEdDX1BPU1RNQVNURVIsIFBHQ19TX0FSR1YpOwogCQkJCQlTZXRDb25maWdPcHRp b24oImNsaWVudF9taW5fbWVzc2FnZXMiLCBkZWJ1Z3N0ciwKQEAgLTMyNCwxMCArMzI2LDEw IEBAIEJvb3RzdHJhcE1vZGVNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10sIGJvb2wgY2hl Y2tfb25seSkKIAkJCQlib290c3RyYXBfZGF0YV9jaGVja3N1bV92ZXJzaW9uID0gUEdfREFU QV9DSEVDS1NVTV9WRVJTSU9OOwogCQkJCWJyZWFrOwogCQkJY2FzZSAncic6Ci0JCQkJc3Ry bGNweShPdXRwdXRGaWxlTmFtZSwgb3B0YXJnLCBNQVhQR1BBVEgpOworCQkJCXN0cmxjcHko T3V0cHV0RmlsZU5hbWUsIG9wdGN0eC5vcHRhcmcsIE1BWFBHUEFUSCk7CiAJCQkJYnJlYWs7 CiAJCQljYXNlICdYJzoKLQkJCQlTZXRDb25maWdPcHRpb24oIndhbF9zZWdtZW50X3NpemUi LCBvcHRhcmcsIFBHQ19JTlRFUk5BTCwgUEdDX1NfRFlOQU1JQ19ERUZBVUxUKTsKKwkJCQlT ZXRDb25maWdPcHRpb24oIndhbF9zZWdtZW50X3NpemUiLCBvcHRjdHgub3B0YXJnLCBQR0Nf SU5URVJOQUwsIFBHQ19TX0RZTkFNSUNfREVGQVVMVCk7CiAJCQkJYnJlYWs7CiAJCQlkZWZh dWx0OgogCQkJCXdyaXRlX3N0ZGVycigiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5m b3JtYXRpb24uXG4iLApAQCAtMzM3LDcgKzMzOSw3IEBAIEJvb3RzdHJhcE1vZGVNYWluKGlu dCBhcmdjLCBjaGFyICphcmd2W10sIGJvb2wgY2hlY2tfb25seSkKIAkJfQogCX0KIAotCWlm IChhcmdjICE9IG9wdGluZCkKKwlpZiAoYXJnYyAhPSBvcHRjdHgub3B0aW5kKQogCXsKIAkJ d3JpdGVfc3RkZXJyKCIlczogaW52YWxpZCBjb21tYW5kLWxpbmUgYXJndW1lbnRzXG4iLCBw cm9nbmFtZSk7CiAJCXByb2NfZXhpdCgxKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvcG9zdG1hc3Rlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFz dGVyLmMKaW5kZXggM2ZhYzQ2YzQwMmIuLmFiZjBjOTc1NjllIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL3Bvc3RtYXN0ZXIuYwpAQCAtOTcsOSArOTcsOSBAQAogI2luY2x1ZGUgImxpYi9p bGlzdC5oIgogI2luY2x1ZGUgImxpYnBxL2xpYnBxLmgiCiAjaW5jbHVkZSAibGlicHEvcHFz aWduYWwuaCIKLSNpbmNsdWRlICJwZ19nZXRvcHQuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIK ICNpbmNsdWRlICJwb3J0L3BnX2Jzd2FwLmgiCisjaW5jbHVkZSAicG9ydC9wZ19nZXRvcHRf Y3R4LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCiAjaW5jbHVkZSAi cG9zdG1hc3Rlci9iZ3dvcmtlcl9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVy L3BnYXJjaC5oIgpAQCAtNDkyLDYgKzQ5Miw3IEBAIEhBTkRMRQkJUG9zdG1hc3RlckhhbmRs ZTsKIHZvaWQKIFBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CisJ cGdfZ2V0b3B0X2N0eCBvcHRjdHg7CiAJaW50CQkJb3B0OwogCWludAkJCXN0YXR1czsKIAlj aGFyCSAgICp1c2VyRG9wdGlvbiA9IE5VTEw7CkBAIC01ODgsMTkgKzU4OSwxOSBAQCBQb3N0 bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCSAqLwogCUluaXRpYWxpemVH VUNPcHRpb25zKCk7CiAKLQlvcHRlcnIgPSAxOwotCiAJLyoKIAkgKiBQYXJzZSBjb21tYW5k LWxpbmUgb3B0aW9ucy4gIENBVVRJT046IGtlZXAgdGhpcyBpbiBzeW5jIHdpdGgKIAkgKiB0 Y29wL3Bvc3RncmVzLmMgKHRoZSBvcHRpb24gc2V0cyBzaG91bGQgbm90IGNvbmZsaWN0KSBh bmQgd2l0aCB0aGUKIAkgKiBjb21tb24gaGVscCgpIGZ1bmN0aW9uIGluIG1haW4vbWFpbi5j LgogCSAqLwotCXdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJCOmJDOmM6RDpk OkVlRmY6aDppams6bE46T1BwOnI6UzpzVHQ6VzotOiIpKSAhPSAtMSkKKwlwZ19nZXRvcHRf c3RhcnQoJm9wdGN0eCwgYXJnYywgYXJndiwgIkI6YkM6YzpEOmQ6RWVGZjpoOmlqazpsTjpP UHA6cjpTOnNUdDpXOi06Iik7CisJb3B0Y3R4Lm9wdGVyciA9IDE7CisJd2hpbGUgKChvcHQg PSBwZ19nZXRvcHRfbmV4dCgmb3B0Y3R4KSkgIT0gLTEpCiAJewogCQlzd2l0Y2ggKG9wdCkK IAkJewogCQkJY2FzZSAnQic6Ci0JCQkJU2V0Q29uZmlnT3B0aW9uKCJzaGFyZWRfYnVmZmVy cyIsIG9wdGFyZywgUEdDX1BPU1RNQVNURVIsIFBHQ19TX0FSR1YpOworCQkJCVNldENvbmZp Z09wdGlvbigic2hhcmVkX2J1ZmZlcnMiLCBvcHRjdHgub3B0YXJnLCBQR0NfUE9TVE1BU1RF UiwgUEdDX1NfQVJHVik7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgJ2InOgpAQCAtNjA5LDcg KzYxMCw3IEBAIFBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQkJ YnJlYWs7CiAKIAkJCWNhc2UgJ0MnOgotCQkJCW91dHB1dF9jb25maWdfdmFyaWFibGUgPSBz dHJkdXAob3B0YXJnKTsKKwkJCQlvdXRwdXRfY29uZmlnX3ZhcmlhYmxlID0gc3RyZHVwKG9w dGN0eC5vcHRhcmcpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlICctJzoKQEAgLTYyMCwxMCAr NjIxLDEwIEBAIFBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQkJ ICogcmV0dXJucyBESVNQQVRDSF9QT1NUTUFTVEVSIGlmIGl0IGRvZXNuJ3QgZmluZCBhIG1h dGNoLCBzbwogCQkJCSAqIGVycm9yIGZvciBhbnl0aGluZyBlbHNlLgogCQkJCSAqLwotCQkJ CWlmIChwYXJzZV9kaXNwYXRjaF9vcHRpb24ob3B0YXJnKSAhPSBESVNQQVRDSF9QT1NUTUFT VEVSKQorCQkJCWlmIChwYXJzZV9kaXNwYXRjaF9vcHRpb24ob3B0Y3R4Lm9wdGFyZykgIT0g RElTUEFUQ0hfUE9TVE1BU1RFUikKIAkJCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJCQkoZXJy Y29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCi0JCQkJCQkJIGVycm1zZygiLS0lcyBtdXN0 IGJlIGZpcnN0IGFyZ3VtZW50Iiwgb3B0YXJnKSkpOworCQkJCQkJCSBlcnJtc2coIi0tJXMg bXVzdCBiZSBmaXJzdCBhcmd1bWVudCIsIG9wdGN0eC5vcHRhcmcpKSk7CiAKIAkJCQlwZ19m YWxsdGhyb3VnaDsKIAkJCWNhc2UgJ2MnOgpAQCAtNjMxLDE5ICs2MzIsMTkgQEAgUG9zdG1h c3Rlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCQkJY2hhcgkgICAqbmFtZSwK IAkJCQkJCQkgICAqdmFsdWU7CiAKLQkJCQkJUGFyc2VMb25nT3B0aW9uKG9wdGFyZywgJm5h bWUsICZ2YWx1ZSk7CisJCQkJCVBhcnNlTG9uZ09wdGlvbihvcHRjdHgub3B0YXJnLCAmbmFt ZSwgJnZhbHVlKTsKIAkJCQkJaWYgKCF2YWx1ZSkKIAkJCQkJewogCQkJCQkJaWYgKG9wdCA9 PSAnLScpCiAJCQkJCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJCQkJCShlcnJjb2RlKEVSUkNP REVfU1lOVEFYX0VSUk9SKSwKIAkJCQkJCQkJCSBlcnJtc2coIi0tJXMgcmVxdWlyZXMgYSB2 YWx1ZSIsCi0JCQkJCQkJCQkJCW9wdGFyZykpKTsKKwkJCQkJCQkJCQkJb3B0Y3R4Lm9wdGFy ZykpKTsKIAkJCQkJCWVsc2UKIAkJCQkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAogCQkJCQkJCQkJIGVycm1zZygiLWMgJXMg cmVxdWlyZXMgYSB2YWx1ZSIsCi0JCQkJCQkJCQkJCW9wdGFyZykpKTsKKwkJCQkJCQkJCQkJ b3B0Y3R4Lm9wdGFyZykpKTsKIAkJCQkJfQogCiAJCQkJCVNldENvbmZpZ09wdGlvbihuYW1l LCB2YWx1ZSwgUEdDX1BPU1RNQVNURVIsIFBHQ19TX0FSR1YpOwpAQCAtNjUzLDExICs2NTQs MTEgQEAgUG9zdG1hc3Rlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCQl9CiAK IAkJCWNhc2UgJ0QnOgotCQkJCXVzZXJEb3B0aW9uID0gc3RyZHVwKG9wdGFyZyk7CisJCQkJ dXNlckRvcHRpb24gPSBzdHJkdXAob3B0Y3R4Lm9wdGFyZyk7CiAJCQkJYnJlYWs7CiAKIAkJ CWNhc2UgJ2QnOgotCQkJCXNldF9kZWJ1Z19vcHRpb25zKGF0b2kob3B0YXJnKSwgUEdDX1BP U1RNQVNURVIsIFBHQ19TX0FSR1YpOworCQkJCXNldF9kZWJ1Z19vcHRpb25zKGF0b2kob3B0 Y3R4Lm9wdGFyZyksIFBHQ19QT1NUTUFTVEVSLCBQR0NfU19BUkdWKTsKIAkJCQlicmVhazsK IAogCQkJY2FzZSAnRSc6CkBAIC02NzMsMTYgKzY3NCwxNiBAQCBQb3N0bWFzdGVyTWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJCWJyZWFrOwogCiAJCQljYXNlICdmJzoKLQkJ CQlpZiAoIXNldF9wbGFuX2Rpc2FibGluZ19vcHRpb25zKG9wdGFyZywgUEdDX1BPU1RNQVNU RVIsIFBHQ19TX0FSR1YpKQorCQkJCWlmICghc2V0X3BsYW5fZGlzYWJsaW5nX29wdGlvbnMo b3B0Y3R4Lm9wdGFyZywgUEdDX1BPU1RNQVNURVIsIFBHQ19TX0FSR1YpKQogCQkJCXsKIAkJ CQkJd3JpdGVfc3RkZXJyKCIlczogaW52YWxpZCBhcmd1bWVudCBmb3Igb3B0aW9uIC1mOiBc IiVzXCJcbiIsCi0JCQkJCQkJCSBwcm9nbmFtZSwgb3B0YXJnKTsKKwkJCQkJCQkJIHByb2du YW1lLCBvcHRjdHgub3B0YXJnKTsKIAkJCQkJRXhpdFBvc3RtYXN0ZXIoMSk7CiAJCQkJfQog CQkJCWJyZWFrOwogCiAJCQljYXNlICdoJzoKLQkJCQlTZXRDb25maWdPcHRpb24oImxpc3Rl bl9hZGRyZXNzZXMiLCBvcHRhcmcsIFBHQ19QT1NUTUFTVEVSLCBQR0NfU19BUkdWKTsKKwkJ CQlTZXRDb25maWdPcHRpb24oImxpc3Rlbl9hZGRyZXNzZXMiLCBvcHRjdHgub3B0YXJnLCBQ R0NfUE9TVE1BU1RFUiwgUEdDX1NfQVJHVik7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgJ2kn OgpAQCAtNjk0LDcgKzY5NSw3IEBAIFBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgJ2snOgotCQkJCVNldENvbmZpZ09wdGlv bigidW5peF9zb2NrZXRfZGlyZWN0b3JpZXMiLCBvcHRhcmcsIFBHQ19QT1NUTUFTVEVSLCBQ R0NfU19BUkdWKTsKKwkJCQlTZXRDb25maWdPcHRpb24oInVuaXhfc29ja2V0X2RpcmVjdG9y aWVzIiwgb3B0Y3R4Lm9wdGFyZywgUEdDX1BPU1RNQVNURVIsIFBHQ19TX0FSR1YpOwogCQkJ CWJyZWFrOwogCiAJCQljYXNlICdsJzoKQEAgLTcwMiw3ICs3MDMsNyBAQCBQb3N0bWFzdGVy TWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJCWJyZWFrOwogCiAJCQljYXNlICdO JzoKLQkJCQlTZXRDb25maWdPcHRpb24oIm1heF9jb25uZWN0aW9ucyIsIG9wdGFyZywgUEdD X1BPU1RNQVNURVIsIFBHQ19TX0FSR1YpOworCQkJCVNldENvbmZpZ09wdGlvbigibWF4X2Nv bm5lY3Rpb25zIiwgb3B0Y3R4Lm9wdGFyZywgUEdDX1BPU1RNQVNURVIsIFBHQ19TX0FSR1Yp OwogCQkJCWJyZWFrOwogCiAJCQljYXNlICdPJzoKQEAgLTcxNCw3ICs3MTUsNyBAQCBQb3N0 bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJCWJyZWFrOwogCiAJCQlj YXNlICdwJzoKLQkJCQlTZXRDb25maWdPcHRpb24oInBvcnQiLCBvcHRhcmcsIFBHQ19QT1NU TUFTVEVSLCBQR0NfU19BUkdWKTsKKwkJCQlTZXRDb25maWdPcHRpb24oInBvcnQiLCBvcHRj dHgub3B0YXJnLCBQR0NfUE9TVE1BU1RFUiwgUEdDX1NfQVJHVik7CiAJCQkJYnJlYWs7CiAK IAkJCWNhc2UgJ3InOgpAQCAtNzIyLDcgKzcyMyw3IEBAIFBvc3RtYXN0ZXJNYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgJ1MnOgotCQkJCVNl dENvbmZpZ09wdGlvbigid29ya19tZW0iLCBvcHRhcmcsIFBHQ19QT1NUTUFTVEVSLCBQR0Nf U19BUkdWKTsKKwkJCQlTZXRDb25maWdPcHRpb24oIndvcmtfbWVtIiwgb3B0Y3R4Lm9wdGFy ZywgUEdDX1BPU1RNQVNURVIsIFBHQ19TX0FSR1YpOwogCQkJCWJyZWFrOwogCiAJCQljYXNl ICdzJzoKQEAgLTc0MCw3ICs3NDEsNyBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQogCiAJCQljYXNlICd0JzoKIAkJCQl7Ci0JCQkJCWNvbnN0IGNoYXIgKnRt cCA9IGdldF9zdGF0c19vcHRpb25fbmFtZShvcHRhcmcpOworCQkJCQljb25zdCBjaGFyICp0 bXAgPSBnZXRfc3RhdHNfb3B0aW9uX25hbWUob3B0Y3R4Lm9wdGFyZyk7CiAKIAkJCQkJaWYg KHRtcCkKIAkJCQkJewpAQCAtNzQ5LDE0ICs3NTAsMTQgQEAgUG9zdG1hc3Rlck1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCQkJZWxzZQogCQkJCQl7CiAJCQkJCQl3cml0ZV9z dGRlcnIoIiVzOiBpbnZhbGlkIGFyZ3VtZW50IGZvciBvcHRpb24gLXQ6IFwiJXNcIlxuIiwK LQkJCQkJCQkJCSBwcm9nbmFtZSwgb3B0YXJnKTsKKwkJCQkJCQkJCSBwcm9nbmFtZSwgb3B0 Y3R4Lm9wdGFyZyk7CiAJCQkJCQlFeGl0UG9zdG1hc3RlcigxKTsKIAkJCQkJfQogCQkJCQli cmVhazsKIAkJCQl9CiAKIAkJCWNhc2UgJ1cnOgotCQkJCVNldENvbmZpZ09wdGlvbigicG9z dF9hdXRoX2RlbGF5Iiwgb3B0YXJnLCBQR0NfUE9TVE1BU1RFUiwgUEdDX1NfQVJHVik7CisJ CQkJU2V0Q29uZmlnT3B0aW9uKCJwb3N0X2F1dGhfZGVsYXkiLCBvcHRjdHgub3B0YXJnLCBQ R0NfUE9TVE1BU1RFUiwgUEdDX1NfQVJHVik7CiAJCQkJYnJlYWs7CiAKIAkJCWRlZmF1bHQ6 CkBAIC03NjksMTAgKzc3MCwxMCBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQogCS8qCiAJICogUG9zdG1hc3RlciBhY2NlcHRzIG5vIG5vbi1vcHRpb24gc3dp dGNoIGFyZ3VtZW50cy4KIAkgKi8KLQlpZiAob3B0aW5kIDwgYXJnYykKKwlpZiAob3B0Y3R4 Lm9wdGluZCA8IGFyZ2MpCiAJewogCQl3cml0ZV9zdGRlcnIoIiVzOiBpbnZhbGlkIGFyZ3Vt ZW50OiBcIiVzXCJcbiIsCi0JCQkJCSBwcm9nbmFtZSwgYXJndltvcHRpbmRdKTsKKwkJCQkJ IHByb2duYW1lLCBhcmd2W29wdGN0eC5vcHRpbmRdKTsKIAkJd3JpdGVfc3RkZXJyKCJUcnkg XCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIsCiAJCQkJCSBwcm9nbmFt ZSk7CiAJCUV4aXRQb3N0bWFzdGVyKDEpOwpAQCAtODY4LDE1ICs4NjksNiBAQCBQb3N0bWFz dGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQlFeGl0UG9zdG1hc3RlcigxKTsK IAl9CiAKLQkvKgotCSAqIE5vdyB0aGF0IHdlIGFyZSBkb25lIHByb2Nlc3NpbmcgdGhlIHBv c3RtYXN0ZXIgYXJndW1lbnRzLCByZXNldAotCSAqIGdldG9wdCgzKSBsaWJyYXJ5IHNvIHRo YXQgaXQgd2lsbCB3b3JrIGNvcnJlY3RseSBpbiBzdWJwcm9jZXNzZXMuCi0JICovCi0Jb3B0 aW5kID0gMTsKLSNpZmRlZiBIQVZFX0lOVF9PUFRSRVNFVAotCW9wdHJlc2V0ID0gMTsJCQkJ Lyogc29tZSBzeXN0ZW1zIG5lZWQgdGhpcyB0b28gKi8KLSNlbmRpZgotCiAJLyogRm9yIGRl YnVnZ2luZzogZGlzcGxheSBwb3N0bWFzdGVyIGVudmlyb25tZW50ICovCiAJaWYgKG1lc3Nh Z2VfbGV2ZWxfaXNfaW50ZXJlc3RpbmcoREVCVUczKSkKIAl7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC90Y29wL3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMK aW5kZXggMDRmNGFlMTE2YTUuLjEwYmU2MDAxMWFkIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC90Y29wL3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBA IC01MSw5ICs1MSw5IEBACiAjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgogI2lu Y2x1ZGUgInBhcnNlci9hbmFseXplLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlci5oIgot I2luY2x1ZGUgInBnX2dldG9wdC5oIgogI2luY2x1ZGUgInBnX3RyYWNlLmgiCiAjaW5jbHVk ZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicG9ydC9wZ19nZXRvcHRfY3R4LmgiCiAjaW5jbHVk ZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3Bvc3Rt YXN0ZXIuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaCIKQEAg LTM4MzgsNiArMzgzOCw3IEBAIHByb2Nlc3NfcG9zdGdyZXNfc3dpdGNoZXMoaW50IGFyZ2Ms IGNoYXIgKmFyZ3ZbXSwgR3VjQ29udGV4dCBjdHgsCiAJaW50CQkJZXJycyA9IDA7CiAJR3Vj U291cmNlCWd1Y3NvdXJjZTsKIAlpbnQJCQlmbGFnOworCXBnX2dldG9wdF9jdHggb3B0Y3R4 OwogCiAJaWYgKHNlY3VyZSkKIAl7CkBAIC0zODU1LDI3ICszODU2LDI2IEBAIHByb2Nlc3Nf cG9zdGdyZXNfc3dpdGNoZXMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgR3VjQ29udGV4dCBj dHgsCiAJCWd1Y3NvdXJjZSA9IFBHQ19TX0NMSUVOVDsJLyogc3dpdGNoZXMgY2FtZSBmcm9t IGNsaWVudCAqLwogCX0KIAotI2lmZGVmIEhBVkVfSU5UX09QVEVSUgorCS8qCisJICogUGFy c2UgY29tbWFuZC1saW5lIG9wdGlvbnMuICBDQVVUSU9OOiBrZWVwIHRoaXMgaW4gc3luYyB3 aXRoCisJICogcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgKHRoZSBvcHRpb24gc2V0cyBzaG91 bGQgbm90IGNvbmZsaWN0KSBhbmQgd2l0aAorCSAqIHRoZSBjb21tb24gaGVscCgpIGZ1bmN0 aW9uIGluIG1haW4vbWFpbi5jLgorCSAqLworCXBnX2dldG9wdF9zdGFydCgmb3B0Y3R4LCBh cmdjLCBhcmd2LCAiQjpiQzpjOkQ6ZDpFZUZmOmg6aWprOmxOOm5PUHA6cjpTOnNUdDp2Olc6 LToiKTsKIAogCS8qCiAJICogVHVybiB0aGlzIG9mZiBiZWNhdXNlIGl0J3MgZWl0aGVyIHBy aW50ZWQgdG8gc3RkZXJyIGFuZCBub3QgdGhlIGxvZwogCSAqIHdoZXJlIHdlJ2Qgd2FudCBp dCwgb3IgYXJndlswXSBpcyBub3cgIi0tc2luZ2xlIiwgd2hpY2ggd291bGQgbWFrZSBmb3IK IAkgKiBhIHdlaXJkIGVycm9yIG1lc3NhZ2UuICBXZSBwcmludCBvdXIgb3duIGVycm9yIG1l c3NhZ2UgYmVsb3cuCiAJICovCi0Jb3B0ZXJyID0gMDsKLSNlbmRpZgorCW9wdGN0eC5vcHRl cnIgPSAwOwogCi0JLyoKLQkgKiBQYXJzZSBjb21tYW5kLWxpbmUgb3B0aW9ucy4gIENBVVRJ T046IGtlZXAgdGhpcyBpbiBzeW5jIHdpdGgKLQkgKiBwb3N0bWFzdGVyL3Bvc3RtYXN0ZXIu YyAodGhlIG9wdGlvbiBzZXRzIHNob3VsZCBub3QgY29uZmxpY3QpIGFuZCB3aXRoCi0JICog dGhlIGNvbW1vbiBoZWxwKCkgZnVuY3Rpb24gaW4gbWFpbi9tYWluLmMuCi0JICovCi0Jd2hp bGUgKChmbGFnID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJCOmJDOmM6RDpkOkVlRmY6aDppams6 bE46bk9QcDpyOlM6c1R0OnY6VzotOiIpKSAhPSAtMSkKKwl3aGlsZSAoKGZsYWcgPSBwZ19n ZXRvcHRfbmV4dCgmb3B0Y3R4KSkgIT0gLTEpCiAJewogCQlzd2l0Y2ggKGZsYWcpCiAJCXsK IAkJCWNhc2UgJ0InOgotCQkJCVNldENvbmZpZ09wdGlvbigic2hhcmVkX2J1ZmZlcnMiLCBv cHRhcmcsIGN0eCwgZ3Vjc291cmNlKTsKKwkJCQlTZXRDb25maWdPcHRpb24oInNoYXJlZF9i dWZmZXJzIiwgb3B0Y3R4Lm9wdGFyZywgY3R4LCBndWNzb3VyY2UpOwogCQkJCWJyZWFrOwog CiAJCQljYXNlICdiJzoKQEAgLTM4OTYsMTAgKzM4OTYsMTAgQEAgcHJvY2Vzc19wb3N0Z3Jl c19zd2l0Y2hlcyhpbnQgYXJnYywgY2hhciAqYXJndltdLCBHdWNDb250ZXh0IGN0eCwKIAkJ CQkgKiByZXR1cm5zIERJU1BBVENIX1BPU1RNQVNURVIgaWYgaXQgZG9lc24ndCBmaW5kIGEg bWF0Y2gsIHNvCiAJCQkJICogZXJyb3IgZm9yIGFueXRoaW5nIGVsc2UuCiAJCQkJICovCi0J CQkJaWYgKHBhcnNlX2Rpc3BhdGNoX29wdGlvbihvcHRhcmcpICE9IERJU1BBVENIX1BPU1RN QVNURVIpCisJCQkJaWYgKHBhcnNlX2Rpc3BhdGNoX29wdGlvbihvcHRjdHgub3B0YXJnKSAh PSBESVNQQVRDSF9QT1NUTUFTVEVSKQogCQkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJCShl cnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKLQkJCQkJCQkgZXJybXNnKCItLSVzIG11 c3QgYmUgZmlyc3QgYXJndW1lbnQiLCBvcHRhcmcpKSk7CisJCQkJCQkJIGVycm1zZygiLS0l cyBtdXN0IGJlIGZpcnN0IGFyZ3VtZW50Iiwgb3B0Y3R4Lm9wdGFyZykpKTsKIAogCQkJCXBn X2ZhbGx0aHJvdWdoOwogCQkJY2FzZSAnYyc6CkBAIC0zOTA3LDE5ICszOTA3LDE5IEBAIHBy b2Nlc3NfcG9zdGdyZXNfc3dpdGNoZXMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgR3VjQ29u dGV4dCBjdHgsCiAJCQkJCWNoYXIJICAgKm5hbWUsCiAJCQkJCQkJICAgKnZhbHVlOwogCi0J CQkJCVBhcnNlTG9uZ09wdGlvbihvcHRhcmcsICZuYW1lLCAmdmFsdWUpOworCQkJCQlQYXJz ZUxvbmdPcHRpb24ob3B0Y3R4Lm9wdGFyZywgJm5hbWUsICZ2YWx1ZSk7CiAJCQkJCWlmICgh dmFsdWUpCiAJCQkJCXsKIAkJCQkJCWlmIChmbGFnID09ICctJykKIAkJCQkJCQllcmVwb3J0 KEVSUk9SLAogCQkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAogCQkJ CQkJCQkJIGVycm1zZygiLS0lcyByZXF1aXJlcyBhIHZhbHVlIiwKLQkJCQkJCQkJCQkJb3B0 YXJnKSkpOworCQkJCQkJCQkJCQlvcHRjdHgub3B0YXJnKSkpOwogCQkJCQkJZWxzZQogCQkJ CQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9F UlJPUiksCiAJCQkJCQkJCQkgZXJybXNnKCItYyAlcyByZXF1aXJlcyBhIHZhbHVlIiwKLQkJ CQkJCQkJCQkJb3B0YXJnKSkpOworCQkJCQkJCQkJCQlvcHRjdHgub3B0YXJnKSkpOwogCQkJ CQl9CiAJCQkJCVNldENvbmZpZ09wdGlvbihuYW1lLCB2YWx1ZSwgY3R4LCBndWNzb3VyY2Up OwogCQkJCQlwZnJlZShuYW1lKTsKQEAgLTM5MjksMTEgKzM5MjksMTEgQEAgcHJvY2Vzc19w b3N0Z3Jlc19zd2l0Y2hlcyhpbnQgYXJnYywgY2hhciAqYXJndltdLCBHdWNDb250ZXh0IGN0 eCwKIAogCQkJY2FzZSAnRCc6CiAJCQkJaWYgKHNlY3VyZSkKLQkJCQkJdXNlckRvcHRpb24g PSBzdHJkdXAob3B0YXJnKTsKKwkJCQkJdXNlckRvcHRpb24gPSBzdHJkdXAob3B0Y3R4Lm9w dGFyZyk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgJ2QnOgotCQkJCXNldF9kZWJ1Z19vcHRp b25zKGF0b2kob3B0YXJnKSwgY3R4LCBndWNzb3VyY2UpOworCQkJCXNldF9kZWJ1Z19vcHRp b25zKGF0b2kob3B0Y3R4Lm9wdGFyZyksIGN0eCwgZ3Vjc291cmNlKTsKIAkJCQlicmVhazsK IAogCQkJY2FzZSAnRSc6CkBAIC0zOTUwLDEyICszOTUwLDEyIEBAIHByb2Nlc3NfcG9zdGdy ZXNfc3dpdGNoZXMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgR3VjQ29udGV4dCBjdHgsCiAJ CQkJYnJlYWs7CiAKIAkJCWNhc2UgJ2YnOgotCQkJCWlmICghc2V0X3BsYW5fZGlzYWJsaW5n X29wdGlvbnMob3B0YXJnLCBjdHgsIGd1Y3NvdXJjZSkpCisJCQkJaWYgKCFzZXRfcGxhbl9k aXNhYmxpbmdfb3B0aW9ucyhvcHRjdHgub3B0YXJnLCBjdHgsIGd1Y3NvdXJjZSkpCiAJCQkJ CWVycnMrKzsKIAkJCQlicmVhazsKIAogCQkJY2FzZSAnaCc6Ci0JCQkJU2V0Q29uZmlnT3B0 aW9uKCJsaXN0ZW5fYWRkcmVzc2VzIiwgb3B0YXJnLCBjdHgsIGd1Y3NvdXJjZSk7CisJCQkJ U2V0Q29uZmlnT3B0aW9uKCJsaXN0ZW5fYWRkcmVzc2VzIiwgb3B0Y3R4Lm9wdGFyZywgY3R4 LCBndWNzb3VyY2UpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlICdpJzoKQEAgLTM5NjgsNyAr Mzk2OCw3IEBAIHByb2Nlc3NfcG9zdGdyZXNfc3dpdGNoZXMoaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSwgR3VjQ29udGV4dCBjdHgsCiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgJ2snOgotCQkJ CVNldENvbmZpZ09wdGlvbigidW5peF9zb2NrZXRfZGlyZWN0b3JpZXMiLCBvcHRhcmcsIGN0 eCwgZ3Vjc291cmNlKTsKKwkJCQlTZXRDb25maWdPcHRpb24oInVuaXhfc29ja2V0X2RpcmVj dG9yaWVzIiwgb3B0Y3R4Lm9wdGFyZywgY3R4LCBndWNzb3VyY2UpOwogCQkJCWJyZWFrOwog CiAJCQljYXNlICdsJzoKQEAgLTM5NzYsNyArMzk3Niw3IEBAIHByb2Nlc3NfcG9zdGdyZXNf c3dpdGNoZXMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgR3VjQ29udGV4dCBjdHgsCiAJCQkJ YnJlYWs7CiAKIAkJCWNhc2UgJ04nOgotCQkJCVNldENvbmZpZ09wdGlvbigibWF4X2Nvbm5l Y3Rpb25zIiwgb3B0YXJnLCBjdHgsIGd1Y3NvdXJjZSk7CisJCQkJU2V0Q29uZmlnT3B0aW9u KCJtYXhfY29ubmVjdGlvbnMiLCBvcHRjdHgub3B0YXJnLCBjdHgsIGd1Y3NvdXJjZSk7CiAJ CQkJYnJlYWs7CiAKIAkJCWNhc2UgJ24nOgpAQCAtMzk5MiwxNyArMzk5MiwxNyBAQCBwcm9j ZXNzX3Bvc3RncmVzX3N3aXRjaGVzKGludCBhcmdjLCBjaGFyICphcmd2W10sIEd1Y0NvbnRl eHQgY3R4LAogCQkJCWJyZWFrOwogCiAJCQljYXNlICdwJzoKLQkJCQlTZXRDb25maWdPcHRp b24oInBvcnQiLCBvcHRhcmcsIGN0eCwgZ3Vjc291cmNlKTsKKwkJCQlTZXRDb25maWdPcHRp b24oInBvcnQiLCBvcHRjdHgub3B0YXJnLCBjdHgsIGd1Y3NvdXJjZSk7CiAJCQkJYnJlYWs7 CiAKIAkJCWNhc2UgJ3InOgogCQkJCS8qIHNlbmQgb3V0cHV0IChzdGRvdXQgYW5kIHN0ZGVy cikgdG8gdGhlIGdpdmVuIGZpbGUgKi8KIAkJCQlpZiAoc2VjdXJlKQotCQkJCQlzdHJsY3B5 KE91dHB1dEZpbGVOYW1lLCBvcHRhcmcsIE1BWFBHUEFUSCk7CisJCQkJCXN0cmxjcHkoT3V0 cHV0RmlsZU5hbWUsIG9wdGN0eC5vcHRhcmcsIE1BWFBHUEFUSCk7CiAJCQkJYnJlYWs7CiAK IAkJCWNhc2UgJ1MnOgotCQkJCVNldENvbmZpZ09wdGlvbigid29ya19tZW0iLCBvcHRhcmcs IGN0eCwgZ3Vjc291cmNlKTsKKwkJCQlTZXRDb25maWdPcHRpb24oIndvcmtfbWVtIiwgb3B0 Y3R4Lm9wdGFyZywgY3R4LCBndWNzb3VyY2UpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlICdz JzoKQEAgLTQwMTUsNyArNDAxNSw3IEBAIHByb2Nlc3NfcG9zdGdyZXNfc3dpdGNoZXMoaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgR3VjQ29udGV4dCBjdHgsCiAKIAkJCWNhc2UgJ3QnOgog CQkJCXsKLQkJCQkJY29uc3QgY2hhciAqdG1wID0gZ2V0X3N0YXRzX29wdGlvbl9uYW1lKG9w dGFyZyk7CisJCQkJCWNvbnN0IGNoYXIgKnRtcCA9IGdldF9zdGF0c19vcHRpb25fbmFtZShv cHRjdHgub3B0YXJnKTsKIAogCQkJCQlpZiAodG1wKQogCQkJCQkJU2V0Q29uZmlnT3B0aW9u KHRtcCwgInRydWUiLCBjdHgsIGd1Y3NvdXJjZSk7CkBAIC00MDM0LDExICs0MDM0LDExIEBA IHByb2Nlc3NfcG9zdGdyZXNfc3dpdGNoZXMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgR3Vj Q29udGV4dCBjdHgsCiAJCQkJICogc3RhbmRhbG9uZSBiYWNrZW5kLgogCQkJCSAqLwogCQkJ CWlmIChzZWN1cmUpCi0JCQkJCUZyb250ZW5kUHJvdG9jb2wgPSAoUHJvdG9jb2xWZXJzaW9u KSBhdG9pKG9wdGFyZyk7CisJCQkJCUZyb250ZW5kUHJvdG9jb2wgPSAoUHJvdG9jb2xWZXJz aW9uKSBhdG9pKG9wdGN0eC5vcHRhcmcpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlICdXJzoK LQkJCQlTZXRDb25maWdPcHRpb24oInBvc3RfYXV0aF9kZWxheSIsIG9wdGFyZywgY3R4LCBn dWNzb3VyY2UpOworCQkJCVNldENvbmZpZ09wdGlvbigicG9zdF9hdXRoX2RlbGF5Iiwgb3B0 Y3R4Lm9wdGFyZywgY3R4LCBndWNzb3VyY2UpOwogCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0 OgpAQCAtNDA1MywzNiArNDA1MywyNyBAQCBwcm9jZXNzX3Bvc3RncmVzX3N3aXRjaGVzKGlu dCBhcmdjLCBjaGFyICphcmd2W10sIEd1Y0NvbnRleHQgY3R4LAogCS8qCiAJICogT3B0aW9u YWwgZGF0YWJhc2UgbmFtZSBzaG91bGQgYmUgdGhlcmUgb25seSBpZiAqZGJuYW1lIGlzIE5V TEwuCiAJICovCi0JaWYgKCFlcnJzICYmIGRibmFtZSAmJiAqZGJuYW1lID09IE5VTEwgJiYg YXJnYyAtIG9wdGluZCA+PSAxKQotCQkqZGJuYW1lID0gc3RyZHVwKGFyZ3Zbb3B0aW5kKytd KTsKKwlpZiAoIWVycnMgJiYgZGJuYW1lICYmICpkYm5hbWUgPT0gTlVMTCAmJiBhcmdjIC0g b3B0Y3R4Lm9wdGluZCA+PSAxKQorCQkqZGJuYW1lID0gc3RyZHVwKGFyZ3Zbb3B0Y3R4Lm9w dGluZCsrXSk7CiAKLQlpZiAoZXJycyB8fCBhcmdjICE9IG9wdGluZCkKKwlpZiAoZXJycyB8 fCBhcmdjICE9IG9wdGN0eC5vcHRpbmQpCiAJewogCQlpZiAoZXJycykKLQkJCW9wdGluZC0t OwkJCS8qIGNvbXBsYWluIGFib3V0IHRoZSBwcmV2aW91cyBhcmd1bWVudCAqLworCQkJb3B0 Y3R4Lm9wdGluZC0tOwkvKiBjb21wbGFpbiBhYm91dCB0aGUgcHJldmlvdXMgYXJndW1lbnQg Ki8KIAogCQkvKiBzcGVsbCB0aGUgZXJyb3IgbWVzc2FnZSBhIGJpdCBkaWZmZXJlbnRseSBk ZXBlbmRpbmcgb24gY29udGV4dCAqLwogCQlpZiAoSXNVbmRlclBvc3RtYXN0ZXIpCiAJCQll cmVwb3J0KEZBVEFMLAogCQkJCQllcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKLQkJ CQkJZXJybXNnKCJpbnZhbGlkIGNvbW1hbmQtbGluZSBhcmd1bWVudCBmb3Igc2VydmVyIHBy b2Nlc3M6ICVzIiwgYXJndltvcHRpbmRdKSwKKwkJCQkJZXJybXNnKCJpbnZhbGlkIGNvbW1h bmQtbGluZSBhcmd1bWVudCBmb3Igc2VydmVyIHByb2Nlc3M6ICVzIiwgYXJndltvcHRjdHgu b3B0aW5kXSksCiAJCQkJCWVycmhpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGlu Zm9ybWF0aW9uLiIsIHByb2duYW1lKSk7CiAJCWVsc2UKIAkJCWVyZXBvcnQoRkFUQUwsCiAJ CQkJCWVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAogCQkJCQllcnJtc2coIiVzOiBp bnZhbGlkIGNvbW1hbmQtbGluZSBhcmd1bWVudDogJXMiLAotCQkJCQkJICAgcHJvZ25hbWUs IGFyZ3Zbb3B0aW5kXSksCisJCQkJCQkgICBwcm9nbmFtZSwgYXJndltvcHRjdHgub3B0aW5k XSksCiAJCQkJCWVycmhpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0 aW9uLiIsIHByb2duYW1lKSk7CiAJfQotCi0JLyoKLQkgKiBSZXNldCBnZXRvcHQoMykgbGli cmFyeSBzbyB0aGF0IGl0IHdpbGwgd29yayBjb3JyZWN0bHkgaW4gc3VicHJvY2Vzc2VzCi0J ICogb3Igd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhIHNlY29uZCB0aW1lIHdpdGgg YW5vdGhlciBhcnJheS4KLQkgKi8KLQlvcHRpbmQgPSAxOwotI2lmZGVmIEhBVkVfSU5UX09Q VFJFU0VUCi0Jb3B0cmVzZXQgPSAxOwkJCQkvKiBzb21lIHN5c3RlbXMgbmVlZCB0aGlzIHRv byAqLwotI2VuZGlmCiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9wc19zdGF0dXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcHNfc3RhdHVzLmMKaW5k ZXggNTFkY2UyNDk0N2EuLmNkZTEwZGQ1OWQyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9taXNjL3BzX3N0YXR1cy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcHNf c3RhdHVzLmMKQEAgLTIzNCw3ICsyMzQsOCBAQCBzYXZlX3BzX2Rpc3BsYXlfYXJncyhpbnQg YXJnYywgY2hhciAqKmFyZ3YpCiAJICogaW50byB0aGUgYXJndiBhcnJheSwgYW5kIHdpbGwg Z2V0IGhvcnJpYmx5IGNvbmZ1c2VkIHdoZW4gaXQgaXMKIAkgKiByZS1jYWxsZWQgdG8gYW5h bHl6ZSBhIHN1YnByb2Nlc3MnIGFyZ3VtZW50IHN0cmluZyBpZiB0aGUgYXJndiBzdG9yYWdl CiAJICogaGFzIGJlZW4gY2xvYmJlcmVkIG1lYW53aGlsZS4gIE90aGVyIHBsYXRmb3JtcyBo YXZlIG90aGVyIGRlcGVuZGVuY2llcwotCSAqIG9uIGFyZ3ZbXS4KKwkgKiBvbiBhcmd2W10u IChXZSB1c2UgY3VzdG9tIHBnX2dldG9wdF9zdGFydC9uZXh0KCkgZnVuY3Rpb25zIG5vd2Fk YXlzCisJICogdGhhdCBkb24ndCBkbyB0aGF0LCBidXQgdGhvc2Ugb3RoZXIgZGVwZW5kZW5j aWVzIG1pZ2h0IHN0aWxsIGV4aXN0LikKIAkgKi8KIAl7CiAJCWNoYXIJICAqKm5ld19hcmd2 OwotLSAKMi40Ny4zCgo= --------------0gCmxA1gWag3FLKBqbygtrBC--