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 1nTkBD-00062d-7O for pgsql-hackers@arkaria.postgresql.org; Mon, 14 Mar 2022 12:52:08 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nTkAD-0003IW-AC for pgsql-hackers@arkaria.postgresql.org; Mon, 14 Mar 2022 12:51:05 +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 1nTkAB-0003GO-MG for pgsql-hackers@lists.postgresql.org; Mon, 14 Mar 2022 12:51:04 +0000 Received: from out3-smtp.messagingengine.com ([66.111.4.27]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nTkA4-00010V-6T for pgsql-hackers@postgresql.org; Mon, 14 Mar 2022 12:51:02 +0000 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.nyi.internal (Postfix) with ESMTP id 52CC75C0195; Mon, 14 Mar 2022 08:50:54 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Mon, 14 Mar 2022 08:50:54 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:sender:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=USIC7nEt4fvY5MNuZ 21ETK84tnG1aD9va4qAnQpJ+v8=; b=hhGN8I1tp+ZgOmf5rKVnoALyuwHM0nuc+ PxlvpS98SgqEUj7LkjYeYbi+wmUrYTaAGQc9wIYy0naUQ26+AiAlk5adzl4JVYiU T6AfURUD65+8VuZQJcUKVu/2dboCoGMwoDSGDQzcoeeauZNfA1olLPITMLUJr4Zq UWctSQERrCB2gFN4F3rZnZBRsz3Suvj53MhQltPh1JwepS0YoCC5JAePMlgBP2ds o6TDAzxaBMmQs7gr+KgCPZAXgR4UDyEkdBm6Lvy/zRVVQDsbPv4nJhnt8ZHC4dbC RM2yGTEynoBS88QgD6I6RJZ75w2BObk30XNFARNqFSHkEDF/VjGsA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvvddruddvkedggeefucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurheptgfkffggfgfuvfhfhfgjsehmtderredtfeejnecuhfhrohhmpefrvghtvghr ucfgihhsvghnthhrrghuthcuoehpvghtvghrrdgvihhsvghnthhrrghuthesvghnthgvrh hprhhishgvuggsrdgtohhmqeenucggtffrrghtthgvrhhnpedutdevledtvedvteduvdef vdfhieetkeelvdfhhfejfeejvdeujeeggeefudegtdenucevlhhushhtvghrufhiiigvpe dtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehpvghtvghrrdgvihhsvghnthhrrghuthes vghnthgvrhhprhhishgvuggsrdgtohhm X-ME-Proxy: Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 14 Mar 2022 08:50:52 -0400 (EDT) Content-Type: multipart/mixed; boundary="------------ntZR9akjm4y5J00jSs4GfziJ" Message-ID: <42ce518d-1426-fa9e-1fcc-de090cd55331@enterprisedb.com> Date: Mon, 14 Mar 2022 13:50:50 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.6.2 Subject: Re: ICU for global collation Content-Language: en-US To: Julien Rouhaud Cc: pgsql-hackers , Daniel Verite References: <20220118040246.dewl5pain2gkv2iv@jrouhaud> <171c5f7c-43ee-dbe9-31f9-5e3eb06a54cf@enterprisedb.com> <20220121135119.ywszwl4353v5dzh5@jrouhaud> <20220121161331.xn7fhtfg5j2ucilb@jrouhaud> <87e93704-b7f7-71f6-161d-8713e6334ed3@enterprisedb.com> <704405ed-f1fa-d2a7-b9f9-48a07fb45648@enterprisedb.com> <96a50803-72ba-8eec-948a-d87608ac15a0@enterprisedb.com> <20220305083830.lpz3k3yku5lmm5xs@jrouhaud> From: Peter Eisentraut In-Reply-To: <20220305083830.lpz3k3yku5lmm5xs@jrouhaud> 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. --------------ntZR9akjm4y5J00jSs4GfziJ Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 05.03.22 09:38, Julien Rouhaud wrote: > I say it works because I did manually check, as far as I can see there isn't > any test that ensures it. > > I'm using this naive scenario: > > DROP DATABASE IF EXISTS dbicu; > CREATE DATABASE dbicu LOCALE_PROVIDER icu LOCALE 'en_US' ICU_LOCALE 'en-u-kf-upper' template 'template0'; > \c dbicu > CREATE COLLATION upperfirst (provider = icu, locale = 'en-u-kf-upper'); > CREATE TABLE icu(def text, en text COLLATE "en_US", upfirst text COLLATE upperfirst); > INSERT INTO icu VALUES ('a', 'a', 'a'), ('b','b','b'), ('A','A','A'), ('B','B','B'); > SELECT def AS def FROM icu ORDER BY def; > SELECT def AS en FROM icu ORDER BY en; > SELECT def AS upfirst FROM icu ORDER BY upfirst; > SELECT def AS upfirst_explicit FROM icu ORDER BY en COLLATE upperfirst; > SELECT def AS en_x_explicit FROM icu ORDER BY def COLLATE "en-x-icu"; > > Maybe there should be some test along those lines included in the patch? I added something like this to a new test suite under src/test/icu/. (src/test/locale/ was already used for something else.) > Also, it's not even used consistently in the patch. I can see e.g. "ICU > locale" or "ICU locale setting" being used: I have fixed those. > Maybe we could point to the ICU documentation for a clear notion of what a > locale ID is, and/or use their own short definition [1]: > >> The locale object in ICU is an identifier that specifies a particular locale >> and has fields for language, country, and an optional code to specify further >> variants or subdivisions. These fields also can be represented as a string >> with the fields separated by an underscore. I think the Localization chapter needs to be reorganized a bit, but I'll leave that for a separate patch. > I spent some time looking at the ICU api trying to figure out if using a > posix locale name (e.g. en_US) was actually compatible with an ICU locale name. > It seems that ICU accept any of 'en-us', 'en-US', 'en_us' or 'en_US' as the > same locale, but I might be wrong. I also didn't find a way to figure out how > to ask ICU if the locale identifier passed is complete garbage or not. One > sure thing is that the system collation we import are of the form 'en-us', so > it seems weird to have this form in pg_collation and by default another form in > pg_database. Yeah it seems to be inconsistent about that. The locale ID documentation appears to indicate that "en_US" is the canonical form, but when you ask it to list all the locales it knows about it returns "en-US". > In CREATE DATABASE manual: > > + Specifies the provider to use for the default collation in this > + database. Possible values are: > + icu,ICU > + libc. libc is the default. The > + available choices depend on the operating system and build options. > > That's actually not true as pg_strcasecmp is used in createdb(): > > + if (pg_strcasecmp(locproviderstr, "icu") == 0) > + dblocprovider = COLLPROVIDER_ICU; > + else if (pg_strcasecmp(locproviderstr, "libc") == 0) > + dblocprovider = COLLPROVIDER_LIBC; > + else > + ereport(ERROR, > + (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), > + errmsg("unrecognized locale provider: %s", > + locproviderstr))); I don't understand what the concern is here. > Unless I'm missing something you entirely removed the warninng about the > performance penalty when using non C/POSIX locale? Yeah, I think it is not the job of the initdb man page to lecture people about the merits of their locale choice. The same performance warning can also be found in the localization chapter; we don't need to repeat it everywhere a locale choice is mentioned. > initdb has some specific processing to transform the default libc locale to > something more appropriate, but as far as I can see creatdb / CREATE DATABASE > aren't doing that. It seems inconsistent, and IMHO another reason why > defaulting to the libc locale looks like a bad idea. This has all been removed. The separate ICU locale option should now be required everywhere (initdb, createdb, CREATE DATABASE). > While on that topic, the doc should probably mention that default ICU > collations can only be deterministic. Well, there is no option to do otherwise, so I'm not sure where/how to mention that. We usually don't document options that don't exist. ;-) > Also unrelated, but how about raising a warning about possibly hiding > corruption if you use CREATE COLLATION ... VERSION or CREATE DATABASE ... > COLLATION_VERSION if !IsBinaryUpgrade()? Hmm, there is a point to that. But then we should just make that an error. Otherwise, we raise the warning but then there is no way to "fix" what was warned about. Seems confusing. > in AlterCollation(), pg_collation_actual_version(), AlterDatabaseRefreshColl() > and pg_database_collation_actual_version(): > > - datum = SysCacheGetAttr(COLLOID, tup, Anum_pg_collation_collcollate, &isnull); > - Assert(!isnull); > - newversion = get_collation_actual_version(collForm->collprovider, TextDatumGetCString(datum)); > + datum = SysCacheGetAttr(COLLOID, tup, collForm->collprovider == COLLPROVIDER_ICU ? Anum_pg_collation_colliculocale : Anum_pg_collation_collcollate, &isnull); > + if (!isnull) > + newversion = get_collation_actual_version(collForm->collprovider, TextDatumGetCString(datum)); > + else > + newversion = NULL; > > The columns are now nullable, but can you actually end up with a null locale > name in the expected field without manual DML on the catalog, corruption or > similar? I think it should be a plain error explaining the inconsistency > rather then silently assuming there's no version. Note that at least > pg_newlocale_from_collation() asserts that the specific libc/icu field it's > interested in isn't null. This is required because the default collations's fields are null now. > Why not using errorConflictingDefElem for locale_provider? fixed > in createdb(): > > + if (dblocprovider == COLLPROVIDER_ICU) > + { > + /* > + * This would happen if template0 uses the libc provider but the new > + * database uses icu. > + */ > + if (!dbiculocale) > + ereport(ERROR, > + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), > + errmsg("ICU locale must be specified"))); > + } > + > + if (dblocprovider == COLLPROVIDER_ICU) > + { > +#ifdef USE_ICU > [...] > > Seems like a refactoring leftover, no need for two blocks. These are two independent blocks in my mind. It's possible that someone might want to insert something in the middle at some point. > Also, I think it > would be better to first error out if there's no support for ICU rather than > complaining about a possibly missing locale that wouldn't be accepted anyway. Seems better to do general syntax checks first and then deeper checks of the passed values. > +void > +make_icu_collator(const char *iculocstr, > + struct pg_locale_struct *resultp) > +{ > +#ifdef USE_ICU > +[...] > + /* We will leak this string if we get an error below :-( */ > + resultp->info.icu.locale = MemoryContextStrdup(TopMemoryContext, iculocstr); > + resultp->info.icu.ucol = collator; > +#else /* not USE_ICU */ > + /* could get here if a collation was created by a build with ICU */ > + ereport(ERROR, > + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), > + errmsg("ICU is not supported in this build"), \ > + errhint("You need to rebuild PostgreSQL using %s.", "--with-icu"))); > +#endif /* not USE_ICU */ > +} > > The comment about the leak possibility needs some tweaking since it's been > extracted from a larger function. fixed > Not material for this patch, but: > @@ -1475,7 +1524,12 @@ pg_newlocale_from_collation(Oid collid) > Assert(OidIsValid(collid)); > > if (collid == DEFAULT_COLLATION_OID) > - return (pg_locale_t) 0; > + { > + if (default_locale.provider == COLLPROVIDER_ICU) > + return &default_locale; > + else > + return (pg_locale_t) 0; > + } > > I'm wondering if we could now always return &default_locale and avoid having to > check if the function returned something in all callers, since CheckMyDatabase > now initialize it. Maybe that's something to look into, but that would probably require updating a call callers to handle the return values differently, which would require quite a bit of work. > Shouldn't all the code before checking the locale name also be in the #ifdef > USE_ICU? I like to keep the #ifdef sections as small as possible and limited to the code that really uses the respective library. > @@ -2859,6 +2870,17 @@ dumpDatabase(Archive *fout) > appendPQExpBufferStr(creaQry, " ENCODING = "); > appendStringLiteralAH(creaQry, encoding, fout); > } > + if (strlen(datlocprovider) > 0) > + { > + appendPQExpBufferStr(creaQry, " LOCALE_PROVIDER = "); > + if (datlocprovider[0] == 'c') > + appendPQExpBufferStr(creaQry, "libc"); > + else if (datlocprovider[0] == 'i') > + appendPQExpBufferStr(creaQry, "icu"); > + else > + fatal("unrecognized locale provider: %s", > + datlocprovider); > + } > if (strlen(collate) > 0 && strcmp(collate, ctype) == 0) > { > > AFAICS datlocprovider shouldn't be empty. Maybe raise an error or an assert if > that's the case? Yeah that was bogus, copied from the earlier encoding handling, which is probably also bogus, but I'm not touching that here. > # CREATE DATABASE db1 LOCALE_PROVIDER icu ICU_LOCALE "fr-x-icu"; > ERROR: 22023: new locale provider (i) does not match locale provider of the template database (c) > HINT: Use the same locale provider as in the template database, or use template0 as template. > > It feels strange to write "LOCALE_PROVIDER icu" and get "provider (i)" in the > error message. I think it would be better to emit the user-facing value, not > internal one. Fixed. I had added a collprovider_name() function but didn't use it here. > Finally, there are some changes in pg_collation, I'm assuming it's done for > consistency since pg_database may need two different locale information, but it > should probably be at least mentioned in the commit message. done --------------ntZR9akjm4y5J00jSs4GfziJ Content-Type: text/plain; charset=UTF-8; name="v6-0001-Add-option-to-use-ICU-as-global-locale-provider.patch" Content-Disposition: attachment; filename*0="v6-0001-Add-option-to-use-ICU-as-global-locale-provider.patc"; filename*1="h" Content-Transfer-Encoding: base64 RnJvbSA3ZDk3MDNhZTcyYTBiODIxNjhlYWY4YmUzZDgyNzRlMTEwMWRmNzFhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogTW9uLCAxNCBNYXIgMjAyMiAxMzo0NjoxNSArMDEwMApTdWJqZWN0 OiBbUEFUQ0ggdjZdIEFkZCBvcHRpb24gdG8gdXNlIElDVSBhcyBnbG9iYWwgbG9jYWxlIHBy b3ZpZGVyCgpUaGlzIGFkZHMgdGhlIG9wdGlvbiB0byB1c2UgSUNVIGFzIHRoZSBkZWZhdWx0 IGxvY2FsZSBwcm92aWRlciBmb3IKZWl0aGVyIHRoZSB3aG9sZSBjbHVzdGVyIG9yIGEgZGF0 YWJhc2UuICBOZXcgb3B0aW9ucyBmb3IgaW5pdGRiLApjcmVhdGVkYiwgYW5kIENSRUFURSBE QVRBQkFTRSBhcmUgdXNlZCB0byBzZWxlY3QgdGhpcy4KClNpbmNlIHNvbWUgKGxlZ2FjeSkg Y29kZSBzdGlsbCB1c2VzIHRoZSBsaWJjIGxvY2FsZSBmYWNpbGl0aWVzCmRpcmVjdGx5LCB3 ZSBzdGlsbCBuZWVkIHRvIHNldCB0aGUgbGliYyBnbG9iYWwgbG9jYWxlIHNldHRpbmdzIGV2 ZW4gaWYKSUNVIGlzIG90aGVyd2lzZSBzZWxlY3RlZC4gIFNvIHBnX2RhdGFiYXNlIG5vdyBo YXMgdGhyZWUKbG9jYWxlLXJlbGF0ZWQgZmllbGRzOiB0aGUgZXhpc3RpbmcgZGF0Y29sbGF0 ZSBhbmQgZGF0Y3R5cGUsIHdoaWNoIGFyZQphbHdheXMgc2V0LCBhbmQgYSBuZXcgZGF0aWN1 bG9jYWxlLCB3aGljaCBpcyBvbmx5IHNldCBpZiBJQ1UgaXMKc2VsZWN0ZWQuICBBIHNpbWls YXIgY2hhbmdlIGlzIG1hZGUgaW4gcGdfY29sbGF0aW9uIGZvciBjb25zaXN0ZW5jeSwKYnV0 IGluIHRoYXQgY2FzZSwgb25seSB0aGUgbGliYy1yZWxhdGVkIGZpZWxkcyBvciB0aGUgSUNV LXJlbGF0ZWQKZmllbGQgaXMgc2V0LCBuZXZlciBib3RoLgoKRGlzY3Vzc2lvbjogaHR0cHM6 Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9mbGF0LzVlNzU2ZGQ2LTBlOTEtZDc3 OC05NmZkLWIxYmNiMDZjMTYxYSU0MDJuZHF1YWRyYW50LmNvbQoKWFhYIGNhdHZlcnNpb24g YnVtcAotLS0KIGRvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sICAgICAgICAgICAgICAgICAg ICB8ICAgOSArCiBkb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9kYXRhYmFzZS5zZ21sICAgICAg ICAgfCAgMjUgKysrCiBkb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZWRiLnNnbWwgICAgICAgICAg ICAgICAgfCAgMTkgKysrCiBkb2Mvc3JjL3NnbWwvcmVmL2luaXRkYi5zZ21sICAgICAgICAg ICAgICAgICAgfCAgNzIgKysrKysrLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvcGdfY29sbGF0 aW9uLmMgICAgICAgICAgICB8ICAxOCArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0 aW9uY21kcy5jICAgICAgICAgIHwgIDk2ICsrKysrKystLS0tCiBzcmMvYmFja2VuZC9jb21t YW5kcy9kYmNvbW1hbmRzLmMgICAgICAgICAgICAgfCAxNTkgKysrKysrKysrKysrKysrLS0t CiBzcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMgICAgICAgICAgICAgfCAxNDQg KysrKysrKysrKy0tLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9wb3N0aW5pdC5jICAg ICAgICAgICAgIHwgIDIxICsrLQogc3JjL2Jpbi9pbml0ZGIvTWFrZWZpbGUgICAgICAgICAg ICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvYmluL2luaXRkYi9pbml0ZGIuYyAgICAgICAg ICAgICAgICAgICAgICAgfCAgOTcgKysrKysrKysrLS0KIHNyYy9iaW4vaW5pdGRiL3QvMDAx X2luaXRkYi5wbCAgICAgICAgICAgICAgICB8ICAyNyArKysKIHNyYy9iaW4vcGdfZHVtcC9w Z19kdW1wLmMgICAgICAgICAgICAgICAgICAgICB8ICAzMCArKystCiBzcmMvYmluL3BnX3Vw Z3JhZGUvY2hlY2suYyAgICAgICAgICAgICAgICAgICAgfCAgMTMgKysKIHNyYy9iaW4vcGdf dXBncmFkZS9pbmZvLmMgICAgICAgICAgICAgICAgICAgICB8ICAxOCArLQogc3JjL2Jpbi9w Z191cGdyYWRlL3BnX3VwZ3JhZGUuaCAgICAgICAgICAgICAgIHwgICAyICsKIHNyYy9iaW4v cHNxbC9kZXNjcmliZS5jICAgICAgICAgICAgICAgICAgICAgICB8ICAyMyArKy0KIHNyYy9i aW4vcHNxbC90YWItY29tcGxldGUuYyAgICAgICAgICAgICAgICAgICB8ICAgMyArLQogc3Jj L2Jpbi9zY3JpcHRzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKIHNy Yy9iaW4vc2NyaXB0cy9jcmVhdGVkYi5jICAgICAgICAgICAgICAgICAgICB8ICAyMCArKysK IHNyYy9iaW4vc2NyaXB0cy90LzAyMF9jcmVhdGVkYi5wbCAgICAgICAgICAgICB8ICAyOCAr KysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfY29sbGF0aW9uLmRhdCAgICAgICAgICB8ICAg MyArLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19jb2xsYXRpb24uaCAgICAgICAgICAgIHwg IDIwICsrLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19kYXRhYmFzZS5kYXQgICAgICAgICAg IHwgICA0ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2RhdGFiYXNlLmggICAgICAgICAg ICAgfCAgIDYgKwogc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmggICAgICAgICAgICAg ICAgIHwgICA1ICsKIHNyYy90ZXN0L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgNiArLQogc3JjL3Rlc3QvaWN1Ly5naXRpZ25vcmUgICAgICAgICAgICAgICAg ICAgICAgIHwgICAyICsKIHNyYy90ZXN0L2ljdS9NYWtlZmlsZSAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAyNSArKysKIHNyYy90ZXN0L2ljdS9SRUFETUUgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAyNyArKysKIHNyYy90ZXN0L2ljdS90LzAxMF9kYXRhYmFzZS5wbCAg ICAgICAgICAgICAgICB8ICA1OCArKysrKysrCiAuLi4vcmVncmVzcy9leHBlY3RlZC9jb2xs YXRlLmljdS51dGY4Lm91dCAgICAgfCAgMTAgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Nv bGxhdGUuaWN1LnV0Zjguc3FsICAgICB8ICAgOCArLQogMzMgZmlsZXMgY2hhbmdlZCwgODM3 IGluc2VydGlvbnMoKyksIDE2NyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvdGVzdC9pY3UvLmdpdGlnbm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L2lj dS9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L2ljdS9SRUFETUUKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9pY3UvdC8wMTBfZGF0YWJhc2UucGwKCmRpZmYg LS1naXQgYS9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCBiL2RvYy9zcmMvc2dtbC9jYXRh bG9ncy5zZ21sCmluZGV4IDc3NzdkNjA1MTQuLmJjZjJiNDMyMDYgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5z Z21sCkBAIC0yMzg0LDYgKzIzODQsMTUgQEAgPHRpdGxlPjxzdHJ1Y3RuYW1lPnBnX2NvbGxh dGlvbjwvc3RydWN0bmFtZT4gQ29sdW1uczwvdGl0bGU+CiAgICAgICA8L3BhcmE+PC9lbnRy eT4KICAgICAgPC9yb3c+CiAKKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xlPSJjYXRh bG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CisgICAg ICAgPHN0cnVjdGZpZWxkPmNvbGxpY3Vsb2NhbGU8L3N0cnVjdGZpZWxkPiA8dHlwZT50ZXh0 PC90eXBlPgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgSUNVIGxvY2Fs ZSBJRCBmb3IgdGhpcyBjb2xsYXRpb24gb2JqZWN0CisgICAgICA8L3BhcmE+PC9lbnRyeT4K KyAgICAgPC9yb3c+CisKICAgICAgPHJvdz4KICAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9n X3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CiAgICAgICAg PHN0cnVjdGZpZWxkPmNvbGx2ZXJzaW9uPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+dGV4dDwvdHlw ZT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2RhdGFiYXNlLnNnbWwg Yi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9kYXRhYmFzZS5zZ21sCmluZGV4IGY3MGQwYzc1 YjQuLjMzZTJkN2NlODMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2Rh dGFiYXNlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfZGF0YWJhc2Uuc2dt bApAQCAtMjgsNiArMjgsOCBAQAogICAgICAgICAgICBbIExPQ0FMRSBbPV0gPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmxvY2FsZTwvcmVwbGFjZWFibGU+IF0KICAgICAgICAg ICAgWyBMQ19DT0xMQVRFIFs9XSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bGNf Y29sbGF0ZTwvcmVwbGFjZWFibGU+IF0KICAgICAgICAgICAgWyBMQ19DVFlQRSBbPV0gPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmxjX2N0eXBlPC9yZXBsYWNlYWJsZT4gXQor ICAgICAgICAgICBbIElDVV9MT0NBTEUgWz1dIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj5pY3VfbG9jYWxlPC9yZXBsYWNlYWJsZT4gXQorICAgICAgICAgICBbIExPQ0FMRV9Q Uk9WSURFUiBbPV0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmxvY2FsZV9wcm92 aWRlcjwvcmVwbGFjZWFibGU+IF0KICAgICAgICAgICAgWyBDT0xMQVRJT05fVkVSU0lPTiA9 IDxyZXBsYWNlYWJsZT5jb2xsYXRpb25fdmVyc2lvbjwvcmVwbGFjZWFibGU+IF0KICAgICAg ICAgICAgWyBUQUJMRVNQQUNFIFs9XSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ dGFibGVzcGFjZV9uYW1lPC9yZXBsYWNlYWJsZT4gXQogICAgICAgICAgICBbIEFMTE9XX0NP Tk5FQ1RJT05TIFs9XSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+YWxsb3djb25u PC9yZXBsYWNlYWJsZT4gXQpAQCAtMTYwLDYgKzE2MiwyOSBAQCA8dGl0bGU+UGFyYW1ldGVy czwvdGl0bGU+CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAor ICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPmljdV9sb2NhbGU8L3JlcGxhY2VhYmxlPjwvdGVybT4KKyAgICAgIDxsaXN0 aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgU3BlY2lmaWVzIHRoZSBJQ1UgbG9jYWxl IElEIGlmIHRoZSBJQ1UgbG9jYWxlIHByb3ZpZGVyIGlzIHVzZWQuCisgICAgICAgPC9wYXJh PgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZh cmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxyZXBsYWNlYWJsZT5sb2NhbGVfcHJvdmlkZXI8 L3JlcGxhY2VhYmxlPjwvdGVybT4KKworICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJh PgorICAgICAgICBTcGVjaWZpZXMgdGhlIHByb3ZpZGVyIHRvIHVzZSBmb3IgdGhlIGRlZmF1 bHQgY29sbGF0aW9uIGluIHRoaXMKKyAgICAgICAgZGF0YWJhc2UuICBQb3NzaWJsZSB2YWx1 ZXMgYXJlOgorICAgICAgICA8bGl0ZXJhbD5pY3U8L2xpdGVyYWw+LDxpbmRleHRlcm0+PHBy aW1hcnk+SUNVPC9wcmltYXJ5PjwvaW5kZXh0ZXJtPgorICAgICAgICA8bGl0ZXJhbD5saWJj PC9saXRlcmFsPi4gIDxsaXRlcmFsPmxpYmM8L2xpdGVyYWw+IGlzIHRoZSBkZWZhdWx0LiAg VGhlCisgICAgICAgIGF2YWlsYWJsZSBjaG9pY2VzIGRlcGVuZCBvbiB0aGUgb3BlcmF0aW5n IHN5c3RlbSBhbmQgYnVpbGQgb3B0aW9ucy4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xp c3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5Pgog ICAgICAgPHRlcm0+PHJlcGxhY2VhYmxlPmNvbGxhdGlvbl92ZXJzaW9uPC9yZXBsYWNlYWJs ZT48L3Rlcm0+CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlZGIuc2dt bCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlZGIuc2dtbAppbmRleCA4NjQ3MzQ1NWM5Li5i ZTQyZTUwMmQ2IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZWRiLnNnbWwK KysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVkYi5zZ21sCkBAIC0xNDcsNiArMTQ3LDI1 IEBAIDx0aXRsZT5PcHRpb25zPC90aXRsZT4KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwv dmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0 aW9uPi0taWN1LWxvY2FsZT08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bG9jYWxl PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAg ICAgPHBhcmE+CisgICAgICAgIFNwZWNpZmllcyB0aGUgSUNVIGxvY2FsZSBJRCB0byBiZSB1 c2VkIGluIHRoaXMgZGF0YWJhc2UsIGlmIHRoZQorICAgICAgICBJQ1UgbG9jYWxlIHByb3Zp ZGVyIGlzIHNlbGVjdGVkLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVy bT48b3B0aW9uPi0tbG9jYWxlLXByb3ZpZGVyPXs8bGl0ZXJhbD5saWJjPC9saXRlcmFsPnw8 bGl0ZXJhbD5pY3U8L2xpdGVyYWw+fTwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRl bT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgU3BlY2lmaWVzIHRoZSBsb2NhbGUgcHJvdmlk ZXIgZm9yIHRoZSBkYXRhYmFzZSdzIGRlZmF1bHQgY29sbGF0aW9uLgorICAgICAgIDwvcGFy YT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2 YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi1PIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5vd25lcjwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgogICAg ICAgPHRlcm0+PG9wdGlvbj4tLW93bmVyPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVy Ij5vd25lcjwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgpkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL3JlZi9pbml0ZGIuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvaW5pdGRiLnNn bWwKaW5kZXggOGY3MWM3Yzk2Mi4uZjVkNjMzYjBhZiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9z Z21sL3JlZi9pbml0ZGIuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2luaXRkYi5zZ21s CkBAIC04NiwzMCArODYsNDUgQEAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KICAgPC9w YXJhPgogCiAgIDxwYXJhPgotICAgPGNvbW1hbmQ+aW5pdGRiPC9jb21tYW5kPiBpbml0aWFs aXplcyB0aGUgZGF0YWJhc2UgY2x1c3RlcidzIGRlZmF1bHQKLSAgIGxvY2FsZSBhbmQgY2hh cmFjdGVyIHNldCBlbmNvZGluZy4gVGhlIGNoYXJhY3RlciBzZXQgZW5jb2RpbmcsCi0gICBj b2xsYXRpb24gb3JkZXIgKDxsaXRlcmFsPkxDX0NPTExBVEU8L2xpdGVyYWw+KSBhbmQgY2hh cmFjdGVyIHNldCBjbGFzc2VzCi0gICAoPGxpdGVyYWw+TENfQ1RZUEU8L2xpdGVyYWw+LCBl LmcuLCB1cHBlciwgbG93ZXIsIGRpZ2l0KSBjYW4gYmUgc2V0IHNlcGFyYXRlbHkKLSAgIGZv ciBhIGRhdGFiYXNlIHdoZW4gaXQgaXMgY3JlYXRlZC4gPGNvbW1hbmQ+aW5pdGRiPC9jb21t YW5kPiBkZXRlcm1pbmVzCi0gICB0aG9zZSBzZXR0aW5ncyBmb3IgdGhlIHRlbXBsYXRlIGRh dGFiYXNlcywgd2hpY2ggd2lsbAotICAgc2VydmUgYXMgdGhlIGRlZmF1bHQgZm9yIGFsbCBv dGhlciBkYXRhYmFzZXMuCisgICA8Y29tbWFuZD5pbml0ZGI8L2NvbW1hbmQ+IGluaXRpYWxp emVzIHRoZSBkYXRhYmFzZSBjbHVzdGVyJ3MgZGVmYXVsdCBsb2NhbGUKKyAgIGFuZCBjaGFy YWN0ZXIgc2V0IGVuY29kaW5nLiBUaGVzZSBjYW4gYWxzbyBiZSBzZXQgc2VwYXJhdGVseSBm b3IgZWFjaAorICAgZGF0YWJhc2Ugd2hlbiBpdCBpcyBjcmVhdGVkLiA8Y29tbWFuZD5pbml0 ZGI8L2NvbW1hbmQ+IGRldGVybWluZXMgdGhvc2UKKyAgIHNldHRpbmdzIGZvciB0aGUgdGVt cGxhdGUgZGF0YWJhc2VzLCB3aGljaCB3aWxsIHNlcnZlIGFzIHRoZSBkZWZhdWx0IGZvcgor ICAgYWxsIG90aGVyIGRhdGFiYXNlcy4gIEJ5IGRlZmF1bHQsIDxjb21tYW5kPmluaXRkYjwv Y29tbWFuZD4gdXNlcyB0aGUKKyAgIGxvY2FsZSBwcm92aWRlciA8bGl0ZXJhbD5saWJjPC9s aXRlcmFsPiwgdGFrZXMgdGhlIGxvY2FsZSBzZXR0aW5ncyBmcm9tCisgICB0aGUgZW52aXJv bm1lbnQsIGFuZCBkZXRlcm1pbmVzIHRoZSBlbmNvZGluZyBmcm9tIHRoZSBsb2NhbGUgc2V0 dGluZ3MuCisgICBUaGlzIGlzIGFsbW9zdCBhbHdheXMgc3VmZmljaWVudCwgdW5sZXNzIHRo ZXJlIGFyZSBzcGVjaWFsIHJlcXVpcmVtZW50cy4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgot ICAgVG8gYWx0ZXIgdGhlIGRlZmF1bHQgY29sbGF0aW9uIG9yZGVyIG9yIGNoYXJhY3RlciBz ZXQgY2xhc3NlcywgdXNlIHRoZQotICAgPG9wdGlvbj4tLWxjLWNvbGxhdGU8L29wdGlvbj4g YW5kIDxvcHRpb24+LS1sYy1jdHlwZTwvb3B0aW9uPiBvcHRpb25zLgotICAgQ29sbGF0aW9u IG9yZGVycyBvdGhlciB0aGFuIDxsaXRlcmFsPkM8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPlBP U0lYPC9saXRlcmFsPiBhbHNvIGhhdmUKLSAgIGEgcGVyZm9ybWFuY2UgcGVuYWx0eS4gIEZv ciB0aGVzZSByZWFzb25zIGl0IGlzIGltcG9ydGFudCB0byBjaG9vc2UgdGhlCi0gICByaWdo dCBsb2NhbGUgd2hlbiBydW5uaW5nIDxjb21tYW5kPmluaXRkYjwvY29tbWFuZD4uCisgICBU byBjaG9vc2UgYSBkaWZmZXJlbnQgbG9jYWxlIGZvciB0aGUgY2x1c3RlciwgdXNlIHRoZSBv cHRpb24KKyAgIDxvcHRpb24+LS1sb2NhbGU8L29wdGlvbj4uICBUaGVyZSBhcmUgYWxzbyBp bmRpdmlkdWFsIG9wdGlvbnMKKyAgIDxvcHRpb24+LS1sYy0qPC9vcHRpb24+IChzZWUgYmVs b3cpIHRvIHNldCB2YWx1ZXMgZm9yIHRoZSBpbmRpdmlkdWFsIGxvY2FsZQorICAgY2F0ZWdv cmllcy4gIE5vdGUgdGhhdCBpbmNvbnNpc3RlbnQgc2V0dGluZ3MgZm9yIGRpZmZlcmVudCBs b2NhbGUKKyAgIGNhdGVnb3JpZXMgY2FuIGdpdmUgbm9uc2Vuc2ljYWwgcmVzdWx0cywgc28g dGhpcyBzaG91bGQgYmUgdXNlZCB3aXRoIGNhcmUuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4K LSAgIFRoZSByZW1haW5pbmcgbG9jYWxlIGNhdGVnb3JpZXMgY2FuIGJlIGNoYW5nZWQgbGF0 ZXIgd2hlbiB0aGUgc2VydmVyCi0gICBpcyBzdGFydGVkLiAgWW91IGNhbiBhbHNvIHVzZSA8 b3B0aW9uPi0tbG9jYWxlPC9vcHRpb24+IHRvIHNldCB0aGUKLSAgIGRlZmF1bHQgZm9yIGFs bCBsb2NhbGUgY2F0ZWdvcmllcywgaW5jbHVkaW5nIGNvbGxhdGlvbiBvcmRlciBhbmQKLSAg IGNoYXJhY3RlciBzZXQgY2xhc3Nlcy4gQWxsIHNlcnZlciBsb2NhbGUgdmFsdWVzICg8bGl0 ZXJhbD5sY18qPC9saXRlcmFsPikgY2FuCi0gICBiZSBkaXNwbGF5ZWQgdmlhIDxjb21tYW5k PlNIT1cgQUxMPC9jb21tYW5kPi4KLSAgIE1vcmUgZGV0YWlscyBjYW4gYmUgZm91bmQgaW4g PHhyZWYgbGlua2VuZD0ibG9jYWxlIi8+LgorICAgQWx0ZXJuYXRpdmVseSwgdGhlIElDVSBs aWJyYXJ5IGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgbG9jYWxlIHNlcnZpY2VzLgorICAgKEFn YWluLCB0aGlzIG9ubHkgc2V0cyB0aGUgZGVmYXVsdCBmb3Igc3Vic2VxdWVudGx5IGNyZWF0 ZWQgZGF0YWJhc2VzLikgIFRvCisgICBzZWxlY3QgdGhpcyBvcHRpb24sIHNwZWNpZnkgPGxp dGVyYWw+LS1sb2NhbGUtcHJvdmlkZXI9aWN1PC9saXRlcmFsPi4KKyAgIFRvIGNob3NlIHRo ZSBzcGVjaWZpYyBJQ1UgbG9jYWxlIElEIHRvIGFwcGx5LCB1c2UgdGhlIG9wdGlvbgorICAg PG9wdGlvbj4tLWljdS1sb2NhbGU8L29wdGlvbj4uICBOb3RlIHRoYXQKKyAgIGZvciBpbXBs ZW1lbnRhdGlvbiByZWFzb25zIGFuZCB0byBzdXBwb3J0IGxlZ2FjeSBjb2RlLAorICAgPGNv bW1hbmQ+aW5pdGRiPC9jb21tYW5kPiB3aWxsIHN0aWxsIHNlbGVjdCBhbmQgaW5pdGlhbGl6 ZSBsaWJjIGxvY2FsZQorICAgc2V0dGluZ3Mgd2hlbiB0aGUgSUNVIGxvY2FsZSBwcm92aWRl ciBpcyB1c2VkLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBXaGVuIDxjb21tYW5kPmlu aXRkYjwvY29tbWFuZD4gcnVucywgaXQgd2lsbCBwcmludCBvdXQgdGhlIGxvY2FsZSBzZXR0 aW5ncworICAgaXQgaGFzIGNob3Nlbi4gIElmIHlvdSBoYXZlIGNvbXBsZXggcmVxdWlyZW1l bnRzIG9yIHNwZWNpZmllZCBtdWx0aXBsZQorICAgb3B0aW9ucywgaXQgaXMgYWR2aXNhYmxl IHRvIGNoZWNrIHRoYXQgdGhlIHJlc3VsdCBtYXRjaGVzIHdoYXQgd2FzCisgICBpbnRlbmRl ZC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgTW9yZSBkZXRhaWxzIGFib3V0IGxvY2Fs ZSBzZXR0aW5ncyBjYW4gYmUgZm91bmQgaW4gPHhyZWYKKyAgIGxpbmtlbmQ9ImxvY2FsZSIv Pi4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpAQCAtMjEwLDYgKzIyNSwxNSBAQCA8dGl0bGU+ T3B0aW9uczwvdGl0bGU+CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRy eT4KIAorICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWljdS1s b2NhbGU9PHJlcGxhY2VhYmxlPmxvY2FsZTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJt PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBTcGVjaWZpZXMg dGhlIElDVSBsb2NhbGUgSUQsIGlmIHRoZSBJQ1UgbG9jYWxlIHByb3ZpZGVyIGlzIHVzZWQu CisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50 cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iYXBwLWluaXRkYi1kYXRhLWNoZWNrc3Vt cyIgeHJlZmxhYmVsPSJkYXRhIGNoZWNrc3VtcyI+CiAgICAgICA8dGVybT48b3B0aW9uPi1r PC9vcHRpb24+PC90ZXJtPgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWRhdGEtY2hlY2tzdW1z PC9vcHRpb24+PC90ZXJtPgpAQCAtMjY0LDYgKzI4OCwxOCBAQCA8dGl0bGU+T3B0aW9uczwv dGl0bGU+CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAg ICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWxvY2FsZS1wcm92aWRl cj17PGxpdGVyYWw+bGliYzwvbGl0ZXJhbD58PGxpdGVyYWw+aWN1PC9saXRlcmFsPn08L29w dGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAg IFRoaXMgb3B0aW9uIHNldHMgdGhlIGxvY2FsZSBwcm92aWRlciBmb3IgZGF0YWJhc2VzIGNy ZWF0ZWQgaW4gdGhlCisgICAgICAgIG5ldyBjbHVzdGVyLiAgSXQgY2FuIGJlIG92ZXJyaWRk ZW4gaW4gdGhlIDxjb21tYW5kPkNSRUFURQorICAgICAgICBEQVRBQkFTRTwvY29tbWFuZD4g Y29tbWFuZCB3aGVuIG5ldyBkYXRhYmFzZXMgYXJlIHN1YnNlcXVlbnRseQorICAgICAgICBj cmVhdGVkLiAgVGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+bGliYzwvbGl0ZXJhbD4uCisgICAg ICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisK ICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LU48L29wdGlvbj48 L3Rlcm0+CiAgICAgICA8dGVybT48b3B0aW9uPi0tbm8tc3luYzwvb3B0aW9uPjwvdGVybT4K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfY29sbGF0aW9uLmMgYi9zcmMv YmFja2VuZC9jYXRhbG9nL3BnX2NvbGxhdGlvbi5jCmluZGV4IGJmYzAyZDMwMzguLjkzNTQ1 Nzg2ZGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfY29sbGF0aW9uLmMK KysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19jb2xsYXRpb24uYwpAQCAtNDksNiArNDks NyBAQCBDb2xsYXRpb25DcmVhdGUoY29uc3QgY2hhciAqY29sbG5hbWUsIE9pZCBjb2xsbmFt ZXNwYWNlLAogCQkJCWJvb2wgY29sbGlzZGV0ZXJtaW5pc3RpYywKIAkJCQlpbnQzMiBjb2xs ZW5jb2RpbmcsCiAJCQkJY29uc3QgY2hhciAqY29sbGNvbGxhdGUsIGNvbnN0IGNoYXIgKmNv bGxjdHlwZSwKKwkJCQljb25zdCBjaGFyICpjb2xsaWN1bG9jYWxlLAogCQkJCWNvbnN0IGNo YXIgKmNvbGx2ZXJzaW9uLAogCQkJCWJvb2wgaWZfbm90X2V4aXN0cywKIAkJCQlib29sIHF1 aWV0KQpAQCAtNjYsOCArNjcsNyBAQCBDb2xsYXRpb25DcmVhdGUoY29uc3QgY2hhciAqY29s bG5hbWUsIE9pZCBjb2xsbmFtZXNwYWNlLAogCUFzc2VydEFyZyhjb2xsbmFtZSk7CiAJQXNz ZXJ0QXJnKGNvbGxuYW1lc3BhY2UpOwogCUFzc2VydEFyZyhjb2xsb3duZXIpOwotCUFzc2Vy dEFyZyhjb2xsY29sbGF0ZSk7Ci0JQXNzZXJ0QXJnKGNvbGxjdHlwZSk7CisJQXNzZXJ0QXJn KChjb2xsY29sbGF0ZSAmJiBjb2xsY3R5cGUpIHx8IGNvbGxpY3Vsb2NhbGUpOwogCiAJLyoK IAkgKiBNYWtlIHN1cmUgdGhlcmUgaXMgbm8gZXhpc3RpbmcgY29sbGF0aW9uIG9mIHNhbWUg bmFtZSAmIGVuY29kaW5nLgpAQCAtMTYxLDggKzE2MSwxOCBAQCBDb2xsYXRpb25DcmVhdGUo Y29uc3QgY2hhciAqY29sbG5hbWUsIE9pZCBjb2xsbmFtZXNwYWNlLAogCXZhbHVlc1tBbnVt X3BnX2NvbGxhdGlvbl9jb2xscHJvdmlkZXIgLSAxXSA9IENoYXJHZXREYXR1bShjb2xscHJv dmlkZXIpOwogCXZhbHVlc1tBbnVtX3BnX2NvbGxhdGlvbl9jb2xsaXNkZXRlcm1pbmlzdGlj IC0gMV0gPSBCb29sR2V0RGF0dW0oY29sbGlzZGV0ZXJtaW5pc3RpYyk7CiAJdmFsdWVzW0Fu dW1fcGdfY29sbGF0aW9uX2NvbGxlbmNvZGluZyAtIDFdID0gSW50MzJHZXREYXR1bShjb2xs ZW5jb2RpbmcpOwotCXZhbHVlc1tBbnVtX3BnX2NvbGxhdGlvbl9jb2xsY29sbGF0ZSAtIDFd ID0gQ1N0cmluZ0dldFRleHREYXR1bShjb2xsY29sbGF0ZSk7Ci0JdmFsdWVzW0FudW1fcGdf Y29sbGF0aW9uX2NvbGxjdHlwZSAtIDFdID0gQ1N0cmluZ0dldFRleHREYXR1bShjb2xsY3R5 cGUpOworCWlmIChjb2xsY29sbGF0ZSkKKwkJdmFsdWVzW0FudW1fcGdfY29sbGF0aW9uX2Nv bGxjb2xsYXRlIC0gMV0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKGNvbGxjb2xsYXRlKTsKKwll bHNlCisJCW51bGxzW0FudW1fcGdfY29sbGF0aW9uX2NvbGxjb2xsYXRlIC0gMV0gPSB0cnVl OworCWlmIChjb2xsY3R5cGUpCisJCXZhbHVlc1tBbnVtX3BnX2NvbGxhdGlvbl9jb2xsY3R5 cGUgLSAxXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oY29sbGN0eXBlKTsKKwllbHNlCisJCW51 bGxzW0FudW1fcGdfY29sbGF0aW9uX2NvbGxjdHlwZSAtIDFdID0gdHJ1ZTsKKwlpZiAoY29s bGljdWxvY2FsZSkKKwkJdmFsdWVzW0FudW1fcGdfY29sbGF0aW9uX2NvbGxpY3Vsb2NhbGUg LSAxXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oY29sbGljdWxvY2FsZSk7CisJZWxzZQorCQlu dWxsc1tBbnVtX3BnX2NvbGxhdGlvbl9jb2xsaWN1bG9jYWxlIC0gMV0gPSB0cnVlOwogCWlm IChjb2xsdmVyc2lvbikKIAkJdmFsdWVzW0FudW1fcGdfY29sbGF0aW9uX2NvbGx2ZXJzaW9u IC0gMV0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKGNvbGx2ZXJzaW9uKTsKIAllbHNlCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMKaW5kZXggOTNkZjFkMzY2Yy4uYjg2Njg0 YTgzMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuYwpAQCAtNjUsNiAr NjUsNyBAQCBEZWZpbmVDb2xsYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpuYW1l cywgTGlzdCAqcGFyYW1ldGVycywgYm9vbCBpZl9ub3RfZQogCURlZkVsZW0gICAgKnZlcnNp b25FbCA9IE5VTEw7CiAJY2hhcgkgICAqY29sbGNvbGxhdGU7CiAJY2hhcgkgICAqY29sbGN0 eXBlOworCWNoYXIJICAgKmNvbGxpY3Vsb2NhbGU7CiAJYm9vbAkJY29sbGlzZGV0ZXJtaW5p c3RpYzsKIAlpbnQJCQljb2xsZW5jb2Rpbmc7CiAJY2hhcgkJY29sbHByb3ZpZGVyOwpAQCAt MTUyLDYgKzE1MywxMiBAQCBEZWZpbmVDb2xsYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBM aXN0ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVycywgYm9vbCBpZl9ub3RfZQogCQllbHNlCiAJ CQljb2xsY3R5cGUgPSBOVUxMOwogCisJCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKENPTExP SUQsIHRwLCBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsaWN1bG9jYWxlLCAmaXNudWxsKTsKKwkJ aWYgKCFpc251bGwpCisJCQljb2xsaWN1bG9jYWxlID0gVGV4dERhdHVtR2V0Q1N0cmluZyhk YXR1bSk7CisJCWVsc2UKKwkJCWNvbGxpY3Vsb2NhbGUgPSBOVUxMOworCiAJCVJlbGVhc2VT eXNDYWNoZSh0cCk7CiAKIAkJLyoKQEAgLTE3MiwxOCArMTc5LDcgQEAgRGVmaW5lQ29sbGF0 aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqbmFtZXMsIExpc3QgKnBhcmFtZXRlcnMs IGJvb2wgaWZfbm90X2UKIAogCQljb2xsY29sbGF0ZSA9IE5VTEw7CiAJCWNvbGxjdHlwZSA9 IE5VTEw7Ci0KLQkJaWYgKGxvY2FsZUVsKQotCQl7Ci0JCQljb2xsY29sbGF0ZSA9IGRlZkdl dFN0cmluZyhsb2NhbGVFbCk7Ci0JCQljb2xsY3R5cGUgPSBkZWZHZXRTdHJpbmcobG9jYWxl RWwpOwotCQl9Ci0KLQkJaWYgKGxjY29sbGF0ZUVsKQotCQkJY29sbGNvbGxhdGUgPSBkZWZH ZXRTdHJpbmcobGNjb2xsYXRlRWwpOwotCi0JCWlmIChsY2N0eXBlRWwpCi0JCQljb2xsY3R5 cGUgPSBkZWZHZXRTdHJpbmcobGNjdHlwZUVsKTsKKwkJY29sbGljdWxvY2FsZSA9IE5VTEw7 CiAKIAkJaWYgKHByb3ZpZGVyRWwpCiAJCQljb2xscHJvdmlkZXJzdHIgPSBkZWZHZXRTdHJp bmcocHJvdmlkZXJFbCk7CkBAIC0yMTEsMTUgKzIwNyw0MiBAQCBEZWZpbmVDb2xsYXRpb24o UGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVycywgYm9v bCBpZl9ub3RfZQogCQllbHNlCiAJCQljb2xscHJvdmlkZXIgPSBDT0xMUFJPVklERVJfTElC QzsKIAotCQlpZiAoIWNvbGxjb2xsYXRlKQotCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX09CSkVDVF9ERUZJTklUSU9OKSwKLQkJCQkJIGVycm1z ZygicGFyYW1ldGVyIFwibGNfY29sbGF0ZVwiIG11c3QgYmUgc3BlY2lmaWVkIikpKTsKKwkJ aWYgKGxvY2FsZUVsKQorCQl7CisJCQlpZiAoY29sbHByb3ZpZGVyID09IENPTExQUk9WSURF Ul9MSUJDKQorCQkJeworCQkJCWNvbGxjb2xsYXRlID0gZGVmR2V0U3RyaW5nKGxvY2FsZUVs KTsKKwkJCQljb2xsY3R5cGUgPSBkZWZHZXRTdHJpbmcobG9jYWxlRWwpOworCQkJfQorCQkJ ZWxzZQorCQkJCWNvbGxpY3Vsb2NhbGUgPSBkZWZHZXRTdHJpbmcobG9jYWxlRWwpOworCQl9 CiAKLQkJaWYgKCFjb2xsY3R5cGUpCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfT0JKRUNUX0RFRklOSVRJT04pLAotCQkJCQkgZXJybXNnKCJw YXJhbWV0ZXIgXCJsY19jdHlwZVwiIG11c3QgYmUgc3BlY2lmaWVkIikpKTsKKwkJaWYgKGxj Y29sbGF0ZUVsKQorCQkJY29sbGNvbGxhdGUgPSBkZWZHZXRTdHJpbmcobGNjb2xsYXRlRWwp OworCisJCWlmIChsY2N0eXBlRWwpCisJCQljb2xsY3R5cGUgPSBkZWZHZXRTdHJpbmcobGNj dHlwZUVsKTsKKworCQlpZiAoY29sbHByb3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJDKQor CQl7CisJCQlpZiAoIWNvbGxjb2xsYXRlKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfT0JKRUNUX0RFRklOSVRJT04pLAorCQkJCQkJIGVy cm1zZygicGFyYW1ldGVyIFwibGNfY29sbGF0ZVwiIG11c3QgYmUgc3BlY2lmaWVkIikpKTsK KworCQkJaWYgKCFjb2xsY3R5cGUpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9PQkpFQ1RfREVGSU5JVElPTiksCisJCQkJCQkgZXJybXNn KCJwYXJhbWV0ZXIgXCJsY19jdHlwZVwiIG11c3QgYmUgc3BlY2lmaWVkIikpKTsKKwkJfQor CQllbHNlIGlmIChjb2xscHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwkJeworCQkJ aWYgKCFjb2xsaWN1bG9jYWxlKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfT0JKRUNUX0RFRklOSVRJT04pLAorCQkJCQkJIGVycm1zZygi cGFyYW1ldGVyIFwibG9jYWxlXCIgbXVzdCBiZSBzcGVjaWZpZWQiKSkpOworCQl9CiAKIAkJ LyoKIAkJICogTm9uZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25zIGFyZSBjdXJyZW50bHkgb25s eSBzdXBwb3J0ZWQgd2l0aCBJQ1UKQEAgLTI2MCw3ICsyODMsNyBAQCBEZWZpbmVDb2xsYXRp b24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVycywg Ym9vbCBpZl9ub3RfZQogCX0KIAogCWlmICghY29sbHZlcnNpb24pCi0JCWNvbGx2ZXJzaW9u ID0gZ2V0X2NvbGxhdGlvbl9hY3R1YWxfdmVyc2lvbihjb2xscHJvdmlkZXIsIGNvbGxjb2xs YXRlKTsKKwkJY29sbHZlcnNpb24gPSBnZXRfY29sbGF0aW9uX2FjdHVhbF92ZXJzaW9uKGNv bGxwcm92aWRlciwgY29sbHByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UgPyBjb2xsaWN1 bG9jYWxlIDogY29sbGNvbGxhdGUpOwogCiAJbmV3b2lkID0gQ29sbGF0aW9uQ3JlYXRlKGNv bGxOYW1lLAogCQkJCQkJCSBjb2xsTmFtZXNwYWNlLApAQCAtMjcwLDYgKzI5Myw3IEBAIERl ZmluZUNvbGxhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIExpc3QgKm5hbWVzLCBMaXN0ICpw YXJhbWV0ZXJzLCBib29sIGlmX25vdF9lCiAJCQkJCQkJIGNvbGxlbmNvZGluZywKIAkJCQkJ CQkgY29sbGNvbGxhdGUsCiAJCQkJCQkJIGNvbGxjdHlwZSwKKwkJCQkJCQkgY29sbGljdWxv Y2FsZSwKIAkJCQkJCQkgY29sbHZlcnNpb24sCiAJCQkJCQkJIGlmX25vdF9leGlzdHMsCiAJ CQkJCQkJIGZhbHNlKTsJLyogbm90IHF1aWV0ICovCkBAIC0zNTIsOSArMzc2LDExIEBAIEFs dGVyQ29sbGF0aW9uKEFsdGVyQ29sbGF0aW9uU3RtdCAqc3RtdCkKIAlkYXR1bSA9IFN5c0Nh Y2hlR2V0QXR0cihDT0xMT0lELCB0dXAsIEFudW1fcGdfY29sbGF0aW9uX2NvbGx2ZXJzaW9u LCAmaXNudWxsKTsKIAlvbGR2ZXJzaW9uID0gaXNudWxsID8gTlVMTCA6IFRleHREYXR1bUdl dENTdHJpbmcoZGF0dW0pOwogCi0JZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09MTE9JRCwg dHVwLCBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsY29sbGF0ZSwgJmlzbnVsbCk7Ci0JQXNzZXJ0 KCFpc251bGwpOwotCW5ld3ZlcnNpb24gPSBnZXRfY29sbGF0aW9uX2FjdHVhbF92ZXJzaW9u KGNvbGxGb3JtLT5jb2xscHJvdmlkZXIsIFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pKTsK KwlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihDT0xMT0lELCB0dXAsIGNvbGxGb3JtLT5jb2xs cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSA/IEFudW1fcGdfY29sbGF0aW9uX2NvbGxp Y3Vsb2NhbGUgOiBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsY29sbGF0ZSwgJmlzbnVsbCk7CisJ aWYgKCFpc251bGwpCisJCW5ld3ZlcnNpb24gPSBnZXRfY29sbGF0aW9uX2FjdHVhbF92ZXJz aW9uKGNvbGxGb3JtLT5jb2xscHJvdmlkZXIsIFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0p KTsKKwllbHNlCisJCW5ld3ZlcnNpb24gPSBOVUxMOwogCiAJLyogY2Fubm90IGNoYW5nZSBm cm9tIE5VTEwgdG8gbm9uLU5VTEwgb3IgdmljZSB2ZXJzYSAqLwogCWlmICgoIW9sZHZlcnNp b24gJiYgbmV3dmVyc2lvbikgfHwgKG9sZHZlcnNpb24gJiYgIW5ld3ZlcnNpb24pKQpAQCAt NDE0LDkgKzQ0MCwxMSBAQCBwZ19jb2xsYXRpb25fYWN0dWFsX3ZlcnNpb24oUEdfRlVOQ1RJ T05fQVJHUykKIAogCWNvbGxwcm92aWRlciA9ICgoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNU UlVDVCh0cCkpLT5jb2xscHJvdmlkZXI7CiAKLQlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihD T0xMT0lELCB0cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbGNvbGxhdGUsICZpc251bGwpOwot CUFzc2VydCghaXNudWxsKTsKLQl2ZXJzaW9uID0gZ2V0X2NvbGxhdGlvbl9hY3R1YWxfdmVy c2lvbihjb2xscHJvdmlkZXIsIFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pKTsKKwlkYXR1 bSA9IFN5c0NhY2hlR2V0QXR0cihDT0xMT0lELCB0cCwgY29sbHByb3ZpZGVyID09IENPTExQ Uk9WSURFUl9JQ1UgPyBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsaWN1bG9jYWxlIDogQW51bV9w Z19jb2xsYXRpb25fY29sbGNvbGxhdGUsICZpc251bGwpOworCWlmICghaXNudWxsKQorCQl2 ZXJzaW9uID0gZ2V0X2NvbGxhdGlvbl9hY3R1YWxfdmVyc2lvbihjb2xscHJvdmlkZXIsIFRl eHREYXR1bUdldENTdHJpbmcoZGF0dW0pKTsKKwllbHNlCisJCXZlcnNpb24gPSBOVUxMOwog CiAJUmVsZWFzZVN5c0NhY2hlKHRwKTsKIApAQCAtNjQzLDcgKzY3MSw3IEBAIHBnX2ltcG9y dF9zeXN0ZW1fY29sbGF0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCQkJICovCiAJCQljb2xs aWQgPSBDb2xsYXRpb25DcmVhdGUobG9jYWxlYnVmLCBuc3BpZCwgR2V0VXNlcklkKCksCiAJ CQkJCQkJCQkgQ09MTFBST1ZJREVSX0xJQkMsIHRydWUsIGVuYywKLQkJCQkJCQkJCSBsb2Nh bGVidWYsIGxvY2FsZWJ1ZiwKKwkJCQkJCQkJCSBsb2NhbGVidWYsIGxvY2FsZWJ1ZiwgTlVM TCwKIAkJCQkJCQkJCSBnZXRfY29sbGF0aW9uX2FjdHVhbF92ZXJzaW9uKENPTExQUk9WSURF Ul9MSUJDLCBsb2NhbGVidWYpLAogCQkJCQkJCQkJIHRydWUsIHRydWUpOwogCQkJaWYgKE9p ZElzVmFsaWQoY29sbGlkKSkKQEAgLTcwNCw3ICs3MzIsNyBAQCBwZ19pbXBvcnRfc3lzdGVt X2NvbGxhdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKIAogCQkJY29sbGlkID0gQ29sbGF0aW9u Q3JlYXRlKGFsaWFzLCBuc3BpZCwgR2V0VXNlcklkKCksCiAJCQkJCQkJCQkgQ09MTFBST1ZJ REVSX0xJQkMsIHRydWUsIGVuYywKLQkJCQkJCQkJCSBsb2NhbGUsIGxvY2FsZSwKKwkJCQkJ CQkJCSBsb2NhbGUsIGxvY2FsZSwgTlVMTCwKIAkJCQkJCQkJCSBnZXRfY29sbGF0aW9uX2Fj dHVhbF92ZXJzaW9uKENPTExQUk9WSURFUl9MSUJDLCBsb2NhbGUpLAogCQkJCQkJCQkJIHRy dWUsIHRydWUpOwogCQkJaWYgKE9pZElzVmFsaWQoY29sbGlkKSkKQEAgLTc0NSw3ICs3NzMs NyBAQCBwZ19pbXBvcnRfc3lzdGVtX2NvbGxhdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKIAkJ CWNvbnN0IGNoYXIgKm5hbWU7CiAJCQljaGFyCSAgICpsYW5ndGFnOwogCQkJY2hhcgkgICAq aWN1Y29tbWVudDsKLQkJCWNvbnN0IGNoYXIgKmNvbGxjb2xsYXRlOworCQkJY29uc3QgY2hh ciAqaWN1bG9jc3RyOwogCQkJT2lkCQkJY29sbGlkOwogCiAJCQlpZiAoaSA9PSAtMSkKQEAg LTc1NCwyMCArNzgyLDIwIEBAIHBnX2ltcG9ydF9zeXN0ZW1fY29sbGF0aW9ucyhQR19GVU5D VElPTl9BUkdTKQogCQkJCW5hbWUgPSB1bG9jX2dldEF2YWlsYWJsZShpKTsKIAogCQkJbGFu Z3RhZyA9IGdldF9pY3VfbGFuZ3VhZ2VfdGFnKG5hbWUpOwotCQkJY29sbGNvbGxhdGUgPSBV X0lDVV9WRVJTSU9OX01BSk9SX05VTSA+PSA1NCA/IGxhbmd0YWcgOiBuYW1lOworCQkJaWN1 bG9jc3RyID0gVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPj0gNTQgPyBsYW5ndGFnIDogbmFt ZTsKIAogCQkJLyoKIAkJCSAqIEJlIHBhcmFub2lkIGFib3V0IG5vdCBhbGxvd2luZyBhbnkg bm9uLUFTQ0lJIHN0cmluZ3MgaW50bwogCQkJICogcGdfY29sbGF0aW9uCiAJCQkgKi8KLQkJ CWlmICghcGdfaXNfYXNjaWkobGFuZ3RhZykgfHwgIXBnX2lzX2FzY2lpKGNvbGxjb2xsYXRl KSkKKwkJCWlmICghcGdfaXNfYXNjaWkobGFuZ3RhZykgfHwgIXBnX2lzX2FzY2lpKGljdWxv Y3N0cikpCiAJCQkJY29udGludWU7CiAKIAkJCWNvbGxpZCA9IENvbGxhdGlvbkNyZWF0ZShw c3ByaW50ZigiJXMteC1pY3UiLCBsYW5ndGFnKSwKIAkJCQkJCQkJCSBuc3BpZCwgR2V0VXNl cklkKCksCiAJCQkJCQkJCQkgQ09MTFBST1ZJREVSX0lDVSwgdHJ1ZSwgLTEsCi0JCQkJCQkJ CQkgY29sbGNvbGxhdGUsIGNvbGxjb2xsYXRlLAotCQkJCQkJCQkJIGdldF9jb2xsYXRpb25f YWN0dWFsX3ZlcnNpb24oQ09MTFBST1ZJREVSX0lDVSwgY29sbGNvbGxhdGUpLAorCQkJCQkJ CQkJIE5VTEwsIE5VTEwsIGljdWxvY3N0ciwKKwkJCQkJCQkJCSBnZXRfY29sbGF0aW9uX2Fj dHVhbF92ZXJzaW9uKENPTExQUk9WSURFUl9JQ1UsIGljdWxvY3N0ciksCiAJCQkJCQkJCQkg dHJ1ZSwgdHJ1ZSk7CiAJCQlpZiAoT2lkSXNWYWxpZChjb2xsaWQpKQogCQkJewpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGJjb21tYW5kcy5jIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZGJjb21tYW5kcy5jCmluZGV4IGMzN2UzYzlhOWEuLmYwYjU3ZmQ2OWEgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RiY29tbWFuZHMuYworKysgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9kYmNvbW1hbmRzLmMKQEAgLTg2LDcgKzg2LDggQEAgc3RhdGlj IGJvb2wgZ2V0X2RiX2luZm8oY29uc3QgY2hhciAqbmFtZSwgTE9DS01PREUgbG9ja21vZGUs CiAJCQkJCQlPaWQgKmRiSWRQLCBPaWQgKm93bmVySWRQLAogCQkJCQkJaW50ICplbmNvZGlu Z1AsIGJvb2wgKmRiSXNUZW1wbGF0ZVAsIGJvb2wgKmRiQWxsb3dDb25uUCwKIAkJCQkJCVRy YW5zYWN0aW9uSWQgKmRiRnJvemVuWGlkUCwgTXVsdGlYYWN0SWQgKmRiTWluTXVsdGlQLAot CQkJCQkJT2lkICpkYlRhYmxlc3BhY2UsIGNoYXIgKipkYkNvbGxhdGUsIGNoYXIgKipkYkN0 eXBlLAorCQkJCQkJT2lkICpkYlRhYmxlc3BhY2UsIGNoYXIgKipkYkNvbGxhdGUsIGNoYXIg KipkYkN0eXBlLCBjaGFyICoqZGJJY3Vsb2NhbGUsCisJCQkJCQljaGFyICpkYkxvY1Byb3Zp ZGVyLAogCQkJCQkJY2hhciAqKmRiQ29sbHZlcnNpb24pOwogc3RhdGljIGJvb2wgaGF2ZV9j cmVhdGVkYl9wcml2aWxlZ2Uodm9pZCk7CiBzdGF0aWMgdm9pZCByZW1vdmVfZGJ0YWJsZXNw YWNlcyhPaWQgZGJfaWQpOwpAQCAtMTA3LDYgKzEwOCw4IEBAIGNyZWF0ZWRiKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgY29uc3QgQ3JlYXRlZGJTdG10ICpzdG10KQogCWludAkJCXNyY19lbmNv ZGluZyA9IC0xOwogCWNoYXIJICAgKnNyY19jb2xsYXRlID0gTlVMTDsKIAljaGFyCSAgICpz cmNfY3R5cGUgPSBOVUxMOworCWNoYXIJICAgKnNyY19pY3Vsb2NhbGUgPSBOVUxMOworCWNo YXIJCXNyY19sb2Nwcm92aWRlcjsKIAljaGFyCSAgICpzcmNfY29sbHZlcnNpb24gPSBOVUxM OwogCWJvb2wJCXNyY19pc3RlbXBsYXRlOwogCWJvb2wJCXNyY19hbGxvd2Nvbm47CkBAIC0x MjgsNiArMTMxLDggQEAgY3JlYXRlZGIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBjb25zdCBDcmVh dGVkYlN0bXQgKnN0bXQpCiAJRGVmRWxlbSAgICAqZGxvY2FsZSA9IE5VTEw7CiAJRGVmRWxl bSAgICAqZGNvbGxhdGUgPSBOVUxMOwogCURlZkVsZW0gICAgKmRjdHlwZSA9IE5VTEw7CisJ RGVmRWxlbSAgICAqZGljdWxvY2FsZSA9IE5VTEw7CisJRGVmRWxlbQkgICAqZGxvY3Byb3Zp ZGVyID0gTlVMTDsKIAlEZWZFbGVtICAgICpkaXN0ZW1wbGF0ZSA9IE5VTEw7CiAJRGVmRWxl bSAgICAqZGFsbG93Y29ubmVjdGlvbnMgPSBOVUxMOwogCURlZkVsZW0gICAgKmRjb25ubGlt aXQgPSBOVUxMOwpAQCAtMTM3LDYgKzE0Miw4IEBAIGNyZWF0ZWRiKFBhcnNlU3RhdGUgKnBz dGF0ZSwgY29uc3QgQ3JlYXRlZGJTdG10ICpzdG10KQogCWNvbnN0IGNoYXIgKmRidGVtcGxh dGUgPSBOVUxMOwogCWNoYXIJICAgKmRiY29sbGF0ZSA9IE5VTEw7CiAJY2hhcgkgICAqZGJj dHlwZSA9IE5VTEw7CisJY2hhcgkgICAqZGJpY3Vsb2NhbGUgPSBOVUxMOworCWNoYXIJCWRi bG9jcHJvdmlkZXIgPSAnXDAnOwogCWNoYXIJICAgKmNhbm9ubmFtZTsKIAlpbnQJCQllbmNv ZGluZyA9IC0xOwogCWJvb2wJCWRiaXN0ZW1wbGF0ZSA9IGZhbHNlOwpAQCAtMTk0LDYgKzIw MSwxOCBAQCBjcmVhdGVkYihQYXJzZVN0YXRlICpwc3RhdGUsIGNvbnN0IENyZWF0ZWRiU3Rt dCAqc3RtdCkKIAkJCQllcnJvckNvbmZsaWN0aW5nRGVmRWxlbShkZWZlbCwgcHN0YXRlKTsK IAkJCWRjdHlwZSA9IGRlZmVsOwogCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVm bmFtZSwgImljdV9sb2NhbGUiKSA9PSAwKQorCQl7CisJCQlpZiAoZGljdWxvY2FsZSkKKwkJ CQllcnJvckNvbmZsaWN0aW5nRGVmRWxlbShkZWZlbCwgcHN0YXRlKTsKKwkJCWRpY3Vsb2Nh bGUgPSBkZWZlbDsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJs b2NhbGVfcHJvdmlkZXIiKSA9PSAwKQorCQl7CisJCQlpZiAoZGxvY3Byb3ZpZGVyKQorCQkJ CWVycm9yQ29uZmxpY3RpbmdEZWZFbGVtKGRlZmVsLCBwc3RhdGUpOworCQkJZGxvY3Byb3Zp ZGVyID0gZGVmZWw7CisJCX0KIAkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAi aXNfdGVtcGxhdGUiKSA9PSAwKQogCQl7CiAJCQlpZiAoZGlzdGVtcGxhdGUpCkBAIC0yNTcs MTIgKzI3Niw2IEBAIGNyZWF0ZWRiKFBhcnNlU3RhdGUgKnBzdGF0ZSwgY29uc3QgQ3JlYXRl ZGJTdG10ICpzdG10KQogCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgZGVmZWwt PmxvY2F0aW9uKSkpOwogCX0KIAotCWlmIChkbG9jYWxlICYmIChkY29sbGF0ZSB8fCBkY3R5 cGUpKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VS Uk9SKSwKLQkJCQkgZXJybXNnKCJjb25mbGljdGluZyBvciByZWR1bmRhbnQgb3B0aW9ucyIp LAotCQkJCSBlcnJkZXRhaWwoIkxPQ0FMRSBjYW5ub3QgYmUgc3BlY2lmaWVkIHRvZ2V0aGVy IHdpdGggTENfQ09MTEFURSBvciBMQ19DVFlQRS4iKSkpOwotCiAJaWYgKGRvd25lciAmJiBk b3duZXItPmFyZykKIAkJZGJvd25lciA9IGRlZkdldFN0cmluZyhkb3duZXIpOwogCWlmIChk dGVtcGxhdGUgJiYgZHRlbXBsYXRlLT5hcmcpCkBAIC0zMDQsNiArMzE3LDMxIEBAIGNyZWF0 ZWRiKFBhcnNlU3RhdGUgKnBzdGF0ZSwgY29uc3QgQ3JlYXRlZGJTdG10ICpzdG10KQogCQlk YmNvbGxhdGUgPSBkZWZHZXRTdHJpbmcoZGNvbGxhdGUpOwogCWlmIChkY3R5cGUgJiYgZGN0 eXBlLT5hcmcpCiAJCWRiY3R5cGUgPSBkZWZHZXRTdHJpbmcoZGN0eXBlKTsKKwlpZiAoZGlj dWxvY2FsZSAmJiBkaWN1bG9jYWxlLT5hcmcpCisJCWRiaWN1bG9jYWxlID0gZGVmR2V0U3Ry aW5nKGRpY3Vsb2NhbGUpOworCWlmIChkbG9jcHJvdmlkZXIgJiYgZGxvY3Byb3ZpZGVyLT5h cmcpCisJeworCQljaGFyCSAgICpsb2Nwcm92aWRlcnN0ciA9IGRlZkdldFN0cmluZyhkbG9j cHJvdmlkZXIpOworCisJCWlmIChwZ19zdHJjYXNlY21wKGxvY3Byb3ZpZGVyc3RyLCAiaWN1 IikgPT0gMCkKKwkJCWRibG9jcHJvdmlkZXIgPSBDT0xMUFJPVklERVJfSUNVOworCQllbHNl IGlmIChwZ19zdHJjYXNlY21wKGxvY3Byb3ZpZGVyc3RyLCAibGliYyIpID09IDApCisJCQlk YmxvY3Byb3ZpZGVyID0gQ09MTFBST1ZJREVSX0xJQkM7CisJCWVsc2UKKwkJCWVyZXBvcnQo RVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9PQkpFQ1RfREVGSU5JVElP TiksCisJCQkJCSBlcnJtc2coInVucmVjb2duaXplZCBsb2NhbGUgcHJvdmlkZXI6ICVzIiwK KwkJCQkJCQlsb2Nwcm92aWRlcnN0cikpKTsKKwl9CisJaWYgKGRpY3Vsb2NhbGUgJiYgZGJs b2Nwcm92aWRlciAhPSBDT0xMUFJPVklERVJfSUNVKQorCQllcmVwb3J0KEVSUk9SLAorCQkJ CShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9PQkpFQ1RfREVGSU5JVElPTiksCisJCQkJIGVy cm1zZygiSUNVIGxvY2FsZSBjYW5ub3QgYmUgc3BlY2lmaWVkIHVubGVzcyBsb2NhbGUgcHJv dmlkZXIgaXMgSUNVIikpKTsKKwlpZiAoZGJsb2Nwcm92aWRlciA9PSBDT0xMUFJPVklERVJf SUNVICYmICFkYmljdWxvY2FsZSkKKwl7CisJCWlmIChkbG9jYWxlICYmIGRsb2NhbGUtPmFy ZykKKwkJCWRiaWN1bG9jYWxlID0gZGVmR2V0U3RyaW5nKGRsb2NhbGUpOworCX0KIAlpZiAo ZGlzdGVtcGxhdGUgJiYgZGlzdGVtcGxhdGUtPmFyZykKIAkJZGJpc3RlbXBsYXRlID0gZGVm R2V0Qm9vbGVhbihkaXN0ZW1wbGF0ZSk7CiAJaWYgKGRhbGxvd2Nvbm5lY3Rpb25zICYmIGRh bGxvd2Nvbm5lY3Rpb25zLT5hcmcpCkBAIC0zNTUsNyArMzkzLDggQEAgY3JlYXRlZGIoUGFy c2VTdGF0ZSAqcHN0YXRlLCBjb25zdCBDcmVhdGVkYlN0bXQgKnN0bXQpCiAJCQkJCSAmc3Jj X2Rib2lkLCAmc3JjX293bmVyLCAmc3JjX2VuY29kaW5nLAogCQkJCQkgJnNyY19pc3RlbXBs YXRlLCAmc3JjX2FsbG93Y29ubiwKIAkJCQkJICZzcmNfZnJvemVueGlkLCAmc3JjX21pbm14 aWQsICZzcmNfZGVmdGFibGVzcGFjZSwKLQkJCQkJICZzcmNfY29sbGF0ZSwgJnNyY19jdHlw ZSwgJnNyY19jb2xsdmVyc2lvbikpCisJCQkJCSAmc3JjX2NvbGxhdGUsICZzcmNfY3R5cGUs ICZzcmNfaWN1bG9jYWxlLCAmc3JjX2xvY3Byb3ZpZGVyLAorCQkJCQkgJnNyY19jb2xsdmVy c2lvbikpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklO RURfREFUQUJBU0UpLAogCQkJCSBlcnJtc2coInRlbXBsYXRlIGRhdGFiYXNlIFwiJXNcIiBk b2VzIG5vdCBleGlzdCIsCkBAIC0zODEsNiArNDIwLDEwIEBAIGNyZWF0ZWRiKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgY29uc3QgQ3JlYXRlZGJTdG10ICpzdG10KQogCQlkYmNvbGxhdGUgPSBz cmNfY29sbGF0ZTsKIAlpZiAoZGJjdHlwZSA9PSBOVUxMKQogCQlkYmN0eXBlID0gc3JjX2N0 eXBlOworCWlmIChkYmljdWxvY2FsZSA9PSBOVUxMKQorCQlkYmljdWxvY2FsZSA9IHNyY19p Y3Vsb2NhbGU7CisJaWYgKGRibG9jcHJvdmlkZXIgPT0gJ1wwJykKKwkJZGJsb2Nwcm92aWRl ciA9IHNyY19sb2Nwcm92aWRlcjsKIAogCS8qIFNvbWUgZW5jb2RpbmdzIGFyZSBjbGllbnQg b25seSAqLwogCWlmICghUEdfVkFMSURfQkVfRU5DT0RJTkcoZW5jb2RpbmcpKQpAQCAtNDAy LDYgKzQ0NSwzNyBAQCBjcmVhdGVkYihQYXJzZVN0YXRlICpwc3RhdGUsIGNvbnN0IENyZWF0 ZWRiU3RtdCAqc3RtdCkKIAogCWNoZWNrX2VuY29kaW5nX2xvY2FsZV9tYXRjaGVzKGVuY29k aW5nLCBkYmNvbGxhdGUsIGRiY3R5cGUpOwogCisJaWYgKGRibG9jcHJvdmlkZXIgPT0gQ09M TFBST1ZJREVSX0lDVSkKKwl7CisJCS8qCisJCSAqIFRoaXMgd291bGQgaGFwcGVuIGlmIHRl bXBsYXRlMCB1c2VzIHRoZSBsaWJjIHByb3ZpZGVyIGJ1dCB0aGUgbmV3CisJCSAqIGRhdGFi YXNlIHVzZXMgaWN1LgorCQkgKi8KKwkJaWYgKCFkYmljdWxvY2FsZSkKKwkJCWVyZXBvcnQo RVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUp LAorCQkJCQkgZXJybXNnKCJJQ1UgbG9jYWxlIG11c3QgYmUgc3BlY2lmaWVkIikpKTsKKwl9 CisKKwlpZiAoZGJsb2Nwcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQorCXsKKyNpZmRl ZiBVU0VfSUNVCisJCVVFcnJvckNvZGUgIHN0YXR1czsKKworCQlzdGF0dXMgPSBVX1pFUk9f RVJST1I7CisJCXVjb2xfb3BlbihkYmljdWxvY2FsZSwgJnN0YXR1cyk7CisJCWlmIChVX0ZB SUxVUkUoc3RhdHVzKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJtc2coImNvdWxk IG5vdCBvcGVuIGNvbGxhdG9yIGZvciBsb2NhbGUgXCIlc1wiOiAlcyIsCisJCQkJCQkJZGJp Y3Vsb2NhbGUsIHVfZXJyb3JOYW1lKHN0YXR1cykpKSk7CisjZWxzZQorCQllcmVwb3J0KEVS Uk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJ CQkgZXJybXNnKCJJQ1UgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJ1aWxkIiksIFwKKwkJ CQkgZXJyaGludCgiWW91IG5lZWQgdG8gcmVidWlsZCBQb3N0Z3JlU1FMIHVzaW5nICVzLiIs ICItLXdpdGgtaWN1IikpKTsKKyNlbmRpZgorCX0KKwogCS8qCiAJICogQ2hlY2sgdGhhdCB0 aGUgbmV3IGVuY29kaW5nIGFuZCBsb2NhbGUgc2V0dGluZ3MgbWF0Y2ggdGhlIHNvdXJjZQog CSAqIGRhdGFiYXNlLiAgV2UgaW5zaXN0IG9uIHRoaXMgYmVjYXVzZSB3ZSBzaW1wbHkgY29w eSB0aGUgc291cmNlIGRhdGEgLS0tCkBAIC00MzUsNiArNTA5LDI1IEBAIGNyZWF0ZWRiKFBh cnNlU3RhdGUgKnBzdGF0ZSwgY29uc3QgQ3JlYXRlZGJTdG10ICpzdG10KQogCQkJCQkgZXJy bXNnKCJuZXcgTENfQ1RZUEUgKCVzKSBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgTENfQ1RZ UEUgb2YgdGhlIHRlbXBsYXRlIGRhdGFiYXNlICglcykiLAogCQkJCQkJCWRiY3R5cGUsIHNy Y19jdHlwZSksCiAJCQkJCSBlcnJoaW50KCJVc2UgdGhlIHNhbWUgTENfQ1RZUEUgYXMgaW4g dGhlIHRlbXBsYXRlIGRhdGFiYXNlLCBvciB1c2UgdGVtcGxhdGUwIGFzIHRlbXBsYXRlLiIp KSk7CisKKwkJaWYgKGRibG9jcHJvdmlkZXIgIT0gc3JjX2xvY3Byb3ZpZGVyKQorCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCisJCQkJCSBlcnJtc2coIm5ldyBsb2NhbGUgcHJvdmlkZXIgKCVzKSBkb2VzIG5v dCBtYXRjaCBsb2NhbGUgcHJvdmlkZXIgb2YgdGhlIHRlbXBsYXRlIGRhdGFiYXNlICglcyki LAorCQkJCQkJCWNvbGxwcm92aWRlcl9uYW1lKGRibG9jcHJvdmlkZXIpLCBjb2xscHJvdmlk ZXJfbmFtZShzcmNfbG9jcHJvdmlkZXIpKSwKKwkJCQkJIGVycmhpbnQoIlVzZSB0aGUgc2Ft ZSBsb2NhbGUgcHJvdmlkZXIgYXMgaW4gdGhlIHRlbXBsYXRlIGRhdGFiYXNlLCBvciB1c2Ug dGVtcGxhdGUwIGFzIHRlbXBsYXRlLiIpKSk7CisKKwkJaWYgKGRibG9jcHJvdmlkZXIgPT0g Q09MTFBST1ZJREVSX0lDVSkKKwkJeworCQkJQXNzZXJ0KGRiaWN1bG9jYWxlKTsKKwkJCUFz c2VydChzcmNfaWN1bG9jYWxlKTsKKwkJCWlmIChzdHJjbXAoZGJpY3Vsb2NhbGUsIHNyY19p Y3Vsb2NhbGUpICE9IDApCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygibmV3IElD VSBsb2NhbGUgKCVzKSBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgSUNVIGxvY2FsZSBvZiB0 aGUgdGVtcGxhdGUgZGF0YWJhc2UgKCVzKSIsCisJCQkJCQkJCWRiaWN1bG9jYWxlLCBzcmNf aWN1bG9jYWxlKSwKKwkJCQkJCSBlcnJoaW50KCJVc2UgdGhlIHNhbWUgSUNVIGxvY2FsZSBh cyBpbiB0aGUgdGVtcGxhdGUgZGF0YWJhc2UsIG9yIHVzZSB0ZW1wbGF0ZTAgYXMgdGVtcGxh dGUuIikpKTsKKwkJfQogCX0KIAogCS8qCkBAIC00NTMsNyArNTQ2LDcgQEAgY3JlYXRlZGIo UGFyc2VTdGF0ZSAqcHN0YXRlLCBjb25zdCBDcmVhdGVkYlN0bXQgKnN0bXQpCiAJewogCQlj aGFyCSAgICphY3R1YWxfdmVyc2lvbnN0cjsKIAotCQlhY3R1YWxfdmVyc2lvbnN0ciA9IGdl dF9jb2xsYXRpb25fYWN0dWFsX3ZlcnNpb24oQ09MTFBST1ZJREVSX0xJQkMsIGRiY29sbGF0 ZSk7CisJCWFjdHVhbF92ZXJzaW9uc3RyID0gZ2V0X2NvbGxhdGlvbl9hY3R1YWxfdmVyc2lv bihkYmxvY3Byb3ZpZGVyLCBkYmxvY3Byb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UgPyBk YmljdWxvY2FsZSA6IGRiY29sbGF0ZSk7CiAJCWlmICghYWN0dWFsX3ZlcnNpb25zdHIpCiAJ CQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJybXNnKCJ0ZW1wbGF0ZSBkYXRhYmFzZSBcIiVz XCIgaGFzIGEgY29sbGF0aW9uIHZlcnNpb24sIGJ1dCBubyBhY3R1YWwgY29sbGF0aW9uIHZl cnNpb24gY291bGQgYmUgZGV0ZXJtaW5lZCIsCkBAIC00ODEsNyArNTc0LDcgQEAgY3JlYXRl ZGIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBjb25zdCBDcmVhdGVkYlN0bXQgKnN0bXQpCiAJICog Y29sbGF0aW9uIHZlcnNpb24sIHdoaWNoIGlzIG5vcm1hbGx5IG9ubHkgdGhlIGNhc2UgZm9y IHRlbXBsYXRlMC4KIAkgKi8KIAlpZiAoZGJjb2xsdmVyc2lvbiA9PSBOVUxMKQotCQlkYmNv bGx2ZXJzaW9uID0gZ2V0X2NvbGxhdGlvbl9hY3R1YWxfdmVyc2lvbihDT0xMUFJPVklERVJf TElCQywgZGJjb2xsYXRlKTsKKwkJZGJjb2xsdmVyc2lvbiA9IGdldF9jb2xsYXRpb25fYWN0 dWFsX3ZlcnNpb24oZGJsb2Nwcm92aWRlciwgZGJsb2Nwcm92aWRlciA9PSBDT0xMUFJPVklE RVJfSUNVID8gZGJpY3Vsb2NhbGUgOiBkYmNvbGxhdGUpOwogCiAJLyogUmVzb2x2ZSBkZWZh dWx0IHRhYmxlc3BhY2UgZm9yIG5ldyBkYXRhYmFzZSAqLwogCWlmIChkdGFibGVzcGFjZW5h bWUgJiYgZHRhYmxlc3BhY2VuYW1lLT5hcmcpCkBAIC02MjAsNiArNzEzLDkgQEAgY3JlYXRl ZGIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBjb25zdCBDcmVhdGVkYlN0bXQgKnN0bXQpCiAJICog YmxvY2sgb24gdGhlIHVuaXF1ZSBpbmRleCwgYW5kIGZhaWwgYWZ0ZXIgd2UgY29tbWl0KS4K IAkgKi8KIAorCUFzc2VydCgoZGJsb2Nwcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVICYm IGRiaWN1bG9jYWxlKSB8fAorCQkgICAoZGJsb2Nwcm92aWRlciAhPSBDT0xMUFJPVklERVJf SUNVICYmICFkYmljdWxvY2FsZSkpOworCiAJLyogRm9ybSB0dXBsZSAqLwogCU1lbVNldChu ZXdfcmVjb3JkLCAwLCBzaXplb2YobmV3X3JlY29yZCkpOwogCU1lbVNldChuZXdfcmVjb3Jk X251bGxzLCBmYWxzZSwgc2l6ZW9mKG5ld19yZWNvcmRfbnVsbHMpKTsKQEAgLTYyOSw2ICs3 MjUsNyBAQCBjcmVhdGVkYihQYXJzZVN0YXRlICpwc3RhdGUsIGNvbnN0IENyZWF0ZWRiU3Rt dCAqc3RtdCkKIAkJRGlyZWN0RnVuY3Rpb25DYWxsMShuYW1laW4sIENTdHJpbmdHZXREYXR1 bShkYm5hbWUpKTsKIAluZXdfcmVjb3JkW0FudW1fcGdfZGF0YWJhc2VfZGF0ZGJhIC0gMV0g PSBPYmplY3RJZEdldERhdHVtKGRhdGRiYSk7CiAJbmV3X3JlY29yZFtBbnVtX3BnX2RhdGFi YXNlX2VuY29kaW5nIC0gMV0gPSBJbnQzMkdldERhdHVtKGVuY29kaW5nKTsKKwluZXdfcmVj b3JkW0FudW1fcGdfZGF0YWJhc2VfZGF0bG9jcHJvdmlkZXIgLSAxXSA9IENoYXJHZXREYXR1 bShkYmxvY3Byb3ZpZGVyKTsKIAluZXdfcmVjb3JkW0FudW1fcGdfZGF0YWJhc2VfZGF0aXN0 ZW1wbGF0ZSAtIDFdID0gQm9vbEdldERhdHVtKGRiaXN0ZW1wbGF0ZSk7CiAJbmV3X3JlY29y ZFtBbnVtX3BnX2RhdGFiYXNlX2RhdGFsbG93Y29ubiAtIDFdID0gQm9vbEdldERhdHVtKGRi YWxsb3djb25uZWN0aW9ucyk7CiAJbmV3X3JlY29yZFtBbnVtX3BnX2RhdGFiYXNlX2RhdGNv bm5saW1pdCAtIDFdID0gSW50MzJHZXREYXR1bShkYmNvbm5saW1pdCk7CkBAIC02MzcsNiAr NzM0LDEwIEBAIGNyZWF0ZWRiKFBhcnNlU3RhdGUgKnBzdGF0ZSwgY29uc3QgQ3JlYXRlZGJT dG10ICpzdG10KQogCW5ld19yZWNvcmRbQW51bV9wZ19kYXRhYmFzZV9kYXR0YWJsZXNwYWNl IC0gMV0gPSBPYmplY3RJZEdldERhdHVtKGRzdF9kZWZ0YWJsZXNwYWNlKTsKIAluZXdfcmVj b3JkW0FudW1fcGdfZGF0YWJhc2VfZGF0Y29sbGF0ZSAtIDFdID0gQ1N0cmluZ0dldFRleHRE YXR1bShkYmNvbGxhdGUpOwogCW5ld19yZWNvcmRbQW51bV9wZ19kYXRhYmFzZV9kYXRjdHlw ZSAtIDFdID0gQ1N0cmluZ0dldFRleHREYXR1bShkYmN0eXBlKTsKKwlpZiAoZGJpY3Vsb2Nh bGUpCisJCW5ld19yZWNvcmRbQW51bV9wZ19kYXRhYmFzZV9kYXRpY3Vsb2NhbGUgLSAxXSA9 IENTdHJpbmdHZXRUZXh0RGF0dW0oZGJpY3Vsb2NhbGUpOworCWVsc2UKKwkJbmV3X3JlY29y ZF9udWxsc1tBbnVtX3BnX2RhdGFiYXNlX2RhdGljdWxvY2FsZSAtIDFdID0gdHJ1ZTsKIAlp ZiAoZGJjb2xsdmVyc2lvbikKIAkJbmV3X3JlY29yZFtBbnVtX3BnX2RhdGFiYXNlX2RhdGNv bGx2ZXJzaW9uIC0gMV0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKGRiY29sbHZlcnNpb24pOwog CWVsc2UKQEAgLTkwNyw3ICsxMDA4LDcgQEAgZHJvcGRiKGNvbnN0IGNoYXIgKmRibmFtZSwg Ym9vbCBtaXNzaW5nX29rLCBib29sIGZvcmNlKQogCXBnZGJyZWwgPSB0YWJsZV9vcGVuKERh dGFiYXNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CiAKIAlpZiAoIWdldF9kYl9p bmZvKGRibmFtZSwgQWNjZXNzRXhjbHVzaXZlTG9jaywgJmRiX2lkLCBOVUxMLCBOVUxMLAot CQkJCQkgJmRiX2lzdGVtcGxhdGUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwpKQorCQkJCQkgJmRiX2lzdGVtcGxhdGUsIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpKQogCXsKIAkJaWYgKCFtaXNzaW5n X29rKQogCQl7CkBAIC0xMTA5LDcgKzEyMTAsNyBAQCBSZW5hbWVEYXRhYmFzZShjb25zdCBj aGFyICpvbGRuYW1lLCBjb25zdCBjaGFyICpuZXduYW1lKQogCXJlbCA9IHRhYmxlX29wZW4o RGF0YWJhc2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKIAogCWlmICghZ2V0X2Ri X2luZm8ob2xkbmFtZSwgQWNjZXNzRXhjbHVzaXZlTG9jaywgJmRiX2lkLCBOVUxMLCBOVUxM LAotCQkJCQkgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TCkpCisJCQkJCSBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMKSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJD T0RFX1VOREVGSU5FRF9EQVRBQkFTRSksCiAJCQkJIGVycm1zZygiZGF0YWJhc2UgXCIlc1wi IGRvZXMgbm90IGV4aXN0Iiwgb2xkbmFtZSkpKTsKQEAgLTEyMjIsNyArMTMyMyw3IEBAIG1v dmVkYihjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKnRibHNwY25hbWUpCiAJcGdk YnJlbCA9IHRhYmxlX29wZW4oRGF0YWJhc2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2Nr KTsKIAogCWlmICghZ2V0X2RiX2luZm8oZGJuYW1lLCBBY2Nlc3NFeGNsdXNpdmVMb2NrLCAm ZGJfaWQsIE5VTEwsIE5VTEwsCi0JCQkJCSBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAmc3Jj X3RibHNwY29pZCwgTlVMTCwgTlVMTCwgTlVMTCkpCisJCQkJCSBOVUxMLCBOVUxMLCBOVUxM LCBOVUxMLCAmc3JjX3RibHNwY29pZCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkp CiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfREFU QUJBU0UpLAogCQkJCSBlcnJtc2coImRhdGFiYXNlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIs IGRibmFtZSkpKTsKQEAgLTE3NTUsOSArMTg1NiwxMSBAQCBBbHRlckRhdGFiYXNlUmVmcmVz aENvbGwoQWx0ZXJEYXRhYmFzZVJlZnJlc2hDb2xsU3RtdCAqc3RtdCkKIAlkYXR1bSA9IGhl YXBfZ2V0YXR0cih0dXBsZSwgQW51bV9wZ19kYXRhYmFzZV9kYXRjb2xsdmVyc2lvbiwgUmVs YXRpb25HZXREZXNjcihyZWwpLCAmaXNudWxsKTsKIAlvbGR2ZXJzaW9uID0gaXNudWxsID8g TlVMTCA6IFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pOwogCi0JZGF0dW0gPSBoZWFwX2dl dGF0dHIodHVwbGUsIEFudW1fcGdfZGF0YWJhc2VfZGF0Y29sbGF0ZSwgUmVsYXRpb25HZXRE ZXNjcihyZWwpLCAmaXNudWxsKTsKLQlBc3NlcnQoIWlzbnVsbCk7Ci0JbmV3dmVyc2lvbiA9 IGdldF9jb2xsYXRpb25fYWN0dWFsX3ZlcnNpb24oQ09MTFBST1ZJREVSX0xJQkMsIFRleHRE YXR1bUdldENTdHJpbmcoZGF0dW0pKTsKKwlkYXR1bSA9IGhlYXBfZ2V0YXR0cih0dXBsZSwg ZGF0Rm9ybS0+ZGF0bG9jcHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSA/IEFudW1fcGdf ZGF0YWJhc2VfZGF0aWN1bG9jYWxlIDogQW51bV9wZ19kYXRhYmFzZV9kYXRjb2xsYXRlLCBS ZWxhdGlvbkdldERlc2NyKHJlbCksICZpc251bGwpOworCWlmICghaXNudWxsKQorCQluZXd2 ZXJzaW9uID0gZ2V0X2NvbGxhdGlvbl9hY3R1YWxfdmVyc2lvbihkYXRGb3JtLT5kYXRsb2Nw cm92aWRlciwgVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSkpOworCWVsc2UKKwkJbmV3dmVy c2lvbiA9IE5VTEw7CiAKIAkvKiBjYW5ub3QgY2hhbmdlIGZyb20gTlVMTCB0byBub24tTlVM TCBvciB2aWNlIHZlcnNhICovCiAJaWYgKCghb2xkdmVyc2lvbiAmJiBuZXd2ZXJzaW9uKSB8 fCAob2xkdmVyc2lvbiAmJiAhbmV3dmVyc2lvbikpCkBAIC0xOTQzLDYgKzIwNDYsNyBAQCBw Z19kYXRhYmFzZV9jb2xsYXRpb25fYWN0dWFsX3ZlcnNpb24oUEdfRlVOQ1RJT05fQVJHUykK IHsKIAlPaWQJCQlkYmlkID0gUEdfR0VUQVJHX09JRCgwKTsKIAlIZWFwVHVwbGUJdHA7CisJ Y2hhcgkJZGF0bG9jcHJvdmlkZXI7CiAJRGF0dW0JCWRhdHVtOwogCWJvb2wJCWlzbnVsbDsK IAljaGFyCSAgICp2ZXJzaW9uOwpAQCAtMTk1Myw5ICsyMDU3LDEzIEBAIHBnX2RhdGFiYXNl X2NvbGxhdGlvbl9hY3R1YWxfdmVyc2lvbihQR19GVU5DVElPTl9BUkdTKQogCQkJCShlcnJj b2RlKEVSUkNPREVfVU5ERUZJTkVEX09CSkVDVCksCiAJCQkJIGVycm1zZygiZGF0YWJhc2Ug d2l0aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLCBkYmlkKSkpOwogCi0JZGF0dW0gPSBTeXND YWNoZUdldEF0dHIoREFUQUJBU0VPSUQsIHRwLCBBbnVtX3BnX2RhdGFiYXNlX2RhdGNvbGxh dGUsICZpc251bGwpOwotCUFzc2VydCghaXNudWxsKTsKLQl2ZXJzaW9uID0gZ2V0X2NvbGxh dGlvbl9hY3R1YWxfdmVyc2lvbihDT0xMUFJPVklERVJfTElCQywgVGV4dERhdHVtR2V0Q1N0 cmluZyhkYXR1bSkpOworCWRhdGxvY3Byb3ZpZGVyID0gKChGb3JtX3BnX2RhdGFiYXNlKSBH RVRTVFJVQ1QodHApKS0+ZGF0bG9jcHJvdmlkZXI7CisKKwlkYXR1bSA9IFN5c0NhY2hlR2V0 QXR0cihEQVRBQkFTRU9JRCwgdHAsIGRhdGxvY3Byb3ZpZGVyID09IENPTExQUk9WSURFUl9J Q1UgPyBBbnVtX3BnX2RhdGFiYXNlX2RhdGljdWxvY2FsZSA6IEFudW1fcGdfZGF0YWJhc2Vf ZGF0Y29sbGF0ZSwgJmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJCXZlcnNpb24gPSBnZXRf Y29sbGF0aW9uX2FjdHVhbF92ZXJzaW9uKGRhdGxvY3Byb3ZpZGVyLCBUZXh0RGF0dW1HZXRD U3RyaW5nKGRhdHVtKSk7CisJZWxzZQorCQl2ZXJzaW9uID0gTlVMTDsKIAogCVJlbGVhc2VT eXNDYWNoZSh0cCk7CiAKQEAgLTE5ODEsNyArMjA4OSw4IEBAIGdldF9kYl9pbmZvKGNvbnN0 IGNoYXIgKm5hbWUsIExPQ0tNT0RFIGxvY2ttb2RlLAogCQkJT2lkICpkYklkUCwgT2lkICpv d25lcklkUCwKIAkJCWludCAqZW5jb2RpbmdQLCBib29sICpkYklzVGVtcGxhdGVQLCBib29s ICpkYkFsbG93Q29ublAsCiAJCQlUcmFuc2FjdGlvbklkICpkYkZyb3plblhpZFAsIE11bHRp WGFjdElkICpkYk1pbk11bHRpUCwKLQkJCU9pZCAqZGJUYWJsZXNwYWNlLCBjaGFyICoqZGJD b2xsYXRlLCBjaGFyICoqZGJDdHlwZSwKKwkJCU9pZCAqZGJUYWJsZXNwYWNlLCBjaGFyICoq ZGJDb2xsYXRlLCBjaGFyICoqZGJDdHlwZSwgY2hhciAqKmRiSWN1bG9jYWxlLAorCQkJY2hh ciAqZGJMb2NQcm92aWRlciwKIAkJCWNoYXIgKipkYkNvbGx2ZXJzaW9uKQogewogCWJvb2wJ CXJlc3VsdCA9IGZhbHNlOwpAQCAtMjA3NSw2ICsyMTg0LDggQEAgZ2V0X2RiX2luZm8oY29u c3QgY2hhciAqbmFtZSwgTE9DS01PREUgbG9ja21vZGUsCiAJCQkJaWYgKGRiVGFibGVzcGFj ZSkKIAkJCQkJKmRiVGFibGVzcGFjZSA9IGRiZm9ybS0+ZGF0dGFibGVzcGFjZTsKIAkJCQkv KiBkZWZhdWx0IGxvY2FsZSBzZXR0aW5ncyBmb3IgdGhpcyBkYXRhYmFzZSAqLworCQkJCWlm IChkYkxvY1Byb3ZpZGVyKQorCQkJCQkqZGJMb2NQcm92aWRlciA9IGRiZm9ybS0+ZGF0bG9j cHJvdmlkZXI7CiAJCQkJaWYgKGRiQ29sbGF0ZSkKIAkJCQl7CiAJCQkJCWRhdHVtID0gU3lz Q2FjaGVHZXRBdHRyKERBVEFCQVNFT0lELCB0dXBsZSwgQW51bV9wZ19kYXRhYmFzZV9kYXRj b2xsYXRlLCAmaXNudWxsKTsKQEAgLTIwODcsNiArMjE5OCwxNCBAQCBnZXRfZGJfaW5mbyhj b25zdCBjaGFyICpuYW1lLCBMT0NLTU9ERSBsb2NrbW9kZSwKIAkJCQkJQXNzZXJ0KCFpc251 bGwpOwogCQkJCQkqZGJDdHlwZSA9IFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pOwogCQkJ CX0KKwkJCQlpZiAoZGJJY3Vsb2NhbGUpCisJCQkJeworCQkJCQlkYXR1bSA9IFN5c0NhY2hl R2V0QXR0cihEQVRBQkFTRU9JRCwgdHVwbGUsIEFudW1fcGdfZGF0YWJhc2VfZGF0aWN1bG9j YWxlLCAmaXNudWxsKTsKKwkJCQkJaWYgKGlzbnVsbCkKKwkJCQkJCSpkYkljdWxvY2FsZSA9 IE5VTEw7CisJCQkJCWVsc2UKKwkJCQkJCSpkYkljdWxvY2FsZSA9IFRleHREYXR1bUdldENT dHJpbmcoZGF0dW0pOworCQkJCX0KIAkJCQlpZiAoZGJDb2xsdmVyc2lvbikKIAkJCQl7CiAJ CQkJCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKERBVEFCQVNFT0lELCB0dXBsZSwgQW51bV9w Z19kYXRhYmFzZV9kYXRjb2xsdmVyc2lvbiwgJmlzbnVsbCk7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv cGdfbG9jYWxlLmMKaW5kZXggODcxYTcxMDk2Ny4uNDAxOTI1NWY4ZSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9wZ19sb2NhbGUuYwpAQCAtMTI4OCwyNiArMTI4OCwzNyBAQCBsb29rdXBfY29s bGF0aW9uX2NhY2hlKE9pZCBjb2xsYXRpb24sIGJvb2wgc2V0X2ZsYWdzKQogCXsKIAkJLyog QXR0ZW1wdCB0byBzZXQgdGhlIGZsYWdzICovCiAJCUhlYXBUdXBsZQl0cDsKLQkJRGF0dW0J CWRhdHVtOwotCQlib29sCQlpc251bGw7Ci0JCWNvbnN0IGNoYXIgKmNvbGxjb2xsYXRlOwot CQljb25zdCBjaGFyICpjb2xsY3R5cGU7CisJCUZvcm1fcGdfY29sbGF0aW9uIGNvbGxmb3Jt OwogCiAJCXRwID0gU2VhcmNoU3lzQ2FjaGUxKENPTExPSUQsIE9iamVjdElkR2V0RGF0dW0o Y29sbGF0aW9uKSk7CiAJCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0cCkpCiAJCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29sbGF0aW9uICV1IiwgY29sbGF0aW9u KTsKKwkJY29sbGZvcm0gPSAoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVDVCh0cCk7CiAK LQkJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09MTE9JRCwgdHAsIEFudW1fcGdfY29sbGF0 aW9uX2NvbGxjb2xsYXRlLCAmaXNudWxsKTsKLQkJQXNzZXJ0KCFpc251bGwpOwotCQljb2xs Y29sbGF0ZSA9IFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pOwotCQlkYXR1bSA9IFN5c0Nh Y2hlR2V0QXR0cihDT0xMT0lELCB0cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbGN0eXBlLCAm aXNudWxsKTsKLQkJQXNzZXJ0KCFpc251bGwpOwotCQljb2xsY3R5cGUgPSBUZXh0RGF0dW1H ZXRDU3RyaW5nKGRhdHVtKTsKLQotCQljYWNoZV9lbnRyeS0+Y29sbGF0ZV9pc19jID0gKChz dHJjbXAoY29sbGNvbGxhdGUsICJDIikgPT0gMCkgfHwKLQkJCQkJCQkJCSAoc3RyY21wKGNv bGxjb2xsYXRlLCAiUE9TSVgiKSA9PSAwKSk7Ci0JCWNhY2hlX2VudHJ5LT5jdHlwZV9pc19j ID0gKChzdHJjbXAoY29sbGN0eXBlLCAiQyIpID09IDApIHx8Ci0JCQkJCQkJCSAgIChzdHJj bXAoY29sbGN0eXBlLCAiUE9TSVgiKSA9PSAwKSk7CisJCWlmIChjb2xsZm9ybS0+Y29sbHBy b3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJDKQorCQl7CisJCQlEYXR1bQkJZGF0dW07CisJ CQlib29sCQlpc251bGw7CisJCQljb25zdCBjaGFyICpjb2xsY29sbGF0ZTsKKwkJCWNvbnN0 IGNoYXIgKmNvbGxjdHlwZTsKKworCQkJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09MTE9J RCwgdHAsIEFudW1fcGdfY29sbGF0aW9uX2NvbGxjb2xsYXRlLCAmaXNudWxsKTsKKwkJCUFz c2VydCghaXNudWxsKTsKKwkJCWNvbGxjb2xsYXRlID0gVGV4dERhdHVtR2V0Q1N0cmluZyhk YXR1bSk7CisJCQlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihDT0xMT0lELCB0cCwgQW51bV9w Z19jb2xsYXRpb25fY29sbGN0eXBlLCAmaXNudWxsKTsKKwkJCUFzc2VydCghaXNudWxsKTsK KwkJCWNvbGxjdHlwZSA9IFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pOworCisJCQljYWNo ZV9lbnRyeS0+Y29sbGF0ZV9pc19jID0gKChzdHJjbXAoY29sbGNvbGxhdGUsICJDIikgPT0g MCkgfHwKKwkJCQkJCQkJCQkgKHN0cmNtcChjb2xsY29sbGF0ZSwgIlBPU0lYIikgPT0gMCkp OworCQkJY2FjaGVfZW50cnktPmN0eXBlX2lzX2MgPSAoKHN0cmNtcChjb2xsY3R5cGUsICJD IikgPT0gMCkgfHwKKwkJCQkJCQkJCSAgIChzdHJjbXAoY29sbGN0eXBlLCAiUE9TSVgiKSA9 PSAwKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQljYWNoZV9lbnRyeS0+Y29sbGF0ZV9pc19j ID0gZmFsc2U7CisJCQljYWNoZV9lbnRyeS0+Y3R5cGVfaXNfYyA9IGZhbHNlOworCQl9CiAK IAkJY2FjaGVfZW50cnktPmZsYWdzX3ZhbGlkID0gdHJ1ZTsKIApAQCAtMTM0MCw2ICsxMzUx LDkgQEAgbGNfY29sbGF0ZV9pc19jKE9pZCBjb2xsYXRpb24pCiAJCXN0YXRpYyBpbnQJcmVz dWx0ID0gLTE7CiAJCWNoYXIJICAgKmxvY2FsZXB0cjsKIAorCQlpZiAoZGVmYXVsdF9sb2Nh bGUucHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwkJCXJldHVybiBmYWxzZTsKKwog CQlpZiAocmVzdWx0ID49IDApCiAJCQlyZXR1cm4gKGJvb2wpIHJlc3VsdDsKIAkJbG9jYWxl cHRyID0gc2V0bG9jYWxlKExDX0NPTExBVEUsIE5VTEwpOwpAQCAtMTM5MCw2ICsxNDA0LDkg QEAgbGNfY3R5cGVfaXNfYyhPaWQgY29sbGF0aW9uKQogCQlzdGF0aWMgaW50CXJlc3VsdCA9 IC0xOwogCQljaGFyCSAgICpsb2NhbGVwdHI7CiAKKwkJaWYgKGRlZmF1bHRfbG9jYWxlLnBy b3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpCisJCQlyZXR1cm4gZmFsc2U7CisKIAkJaWYg KHJlc3VsdCA+PSAwKQogCQkJcmV0dXJuIChib29sKSByZXN1bHQ7CiAJCWxvY2FsZXB0ciA9 IHNldGxvY2FsZShMQ19DVFlQRSwgTlVMTCk7CkBAIC0xNDE4LDYgKzE0MzUsMzggQEAgbGNf Y3R5cGVfaXNfYyhPaWQgY29sbGF0aW9uKQogCXJldHVybiAobG9va3VwX2NvbGxhdGlvbl9j YWNoZShjb2xsYXRpb24sIHRydWUpKS0+Y3R5cGVfaXNfYzsKIH0KIAorc3RydWN0IHBnX2xv Y2FsZV9zdHJ1Y3QgZGVmYXVsdF9sb2NhbGU7CisKK3ZvaWQKK21ha2VfaWN1X2NvbGxhdG9y KGNvbnN0IGNoYXIgKmljdWxvY3N0ciwKKwkJCQkgIHN0cnVjdCBwZ19sb2NhbGVfc3RydWN0 ICpyZXN1bHRwKQoreworI2lmZGVmIFVTRV9JQ1UKKwlVQ29sbGF0b3IgICpjb2xsYXRvcjsK KwlVRXJyb3JDb2RlCXN0YXR1czsKKworCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKKwljb2xs YXRvciA9IHVjb2xfb3BlbihpY3Vsb2NzdHIsICZzdGF0dXMpOworCWlmIChVX0ZBSUxVUkUo c3RhdHVzKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCJjb3VsZCBub3Qgb3Bl biBjb2xsYXRvciBmb3IgbG9jYWxlIFwiJXNcIjogJXMiLAorCQkJCQkJaWN1bG9jc3RyLCB1 X2Vycm9yTmFtZShzdGF0dXMpKSkpOworCisJaWYgKFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVN IDwgNTQpCisJCWljdV9zZXRfY29sbGF0aW9uX2F0dHJpYnV0ZXMoY29sbGF0b3IsIGljdWxv Y3N0cik7CisKKwkvKiBXZSB3aWxsIGxlYWsgdGhpcyBzdHJpbmcgaWYgdGhlIGNhbGxlciBl cnJvcnMgbGF0ZXIgOi0oICovCisJcmVzdWx0cC0+aW5mby5pY3UubG9jYWxlID0gTWVtb3J5 Q29udGV4dFN0cmR1cChUb3BNZW1vcnlDb250ZXh0LCBpY3Vsb2NzdHIpOworCXJlc3VsdHAt PmluZm8uaWN1LnVjb2wgPSBjb2xsYXRvcjsKKyNlbHNlCQkJCQkJCS8qIG5vdCBVU0VfSUNV ICovCisJLyogY291bGQgZ2V0IGhlcmUgaWYgYSBjb2xsYXRpb24gd2FzIGNyZWF0ZWQgYnkg YSBidWlsZCB3aXRoIElDVSAqLworCWVyZXBvcnQoRVJST1IsCisJCQkoZXJyY29kZShFUlJD T0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkgZXJybXNnKCJJQ1UgaXMgbm90IHN1 cHBvcnRlZCBpbiB0aGlzIGJ1aWxkIiksIFwKKwkJCSBlcnJoaW50KCJZb3UgbmVlZCB0byBy ZWJ1aWxkIFBvc3RncmVTUUwgdXNpbmcgJXMuIiwgIi0td2l0aC1pY3UiKSkpOworI2VuZGlm CQkJCQkJCS8qIG5vdCBVU0VfSUNVICovCit9CisKIAogLyogc2ltcGxlIHN1YnJvdXRpbmUg Zm9yIHJlcG9ydGluZyBlcnJvcnMgZnJvbSBuZXdsb2NhbGUoKSAqLwogI2lmZGVmIEhBVkVf TE9DQUxFX1QKQEAgLTE0NzUsNyArMTUyNCwxMiBAQCBwZ19uZXdsb2NhbGVfZnJvbV9jb2xs YXRpb24oT2lkIGNvbGxpZCkKIAlBc3NlcnQoT2lkSXNWYWxpZChjb2xsaWQpKTsKIAogCWlm IChjb2xsaWQgPT0gREVGQVVMVF9DT0xMQVRJT05fT0lEKQotCQlyZXR1cm4gKHBnX2xvY2Fs ZV90KSAwOworCXsKKwkJaWYgKGRlZmF1bHRfbG9jYWxlLnByb3ZpZGVyID09IENPTExQUk9W SURFUl9JQ1UpCisJCQlyZXR1cm4gJmRlZmF1bHRfbG9jYWxlOworCQllbHNlCisJCQlyZXR1 cm4gKHBnX2xvY2FsZV90KSAwOworCX0KIAogCWNhY2hlX2VudHJ5ID0gbG9va3VwX2NvbGxh dGlvbl9jYWNoZShjb2xsaWQsIGZhbHNlKTsKIApAQCAtMTQ4NCw4ICsxNTM4LDYgQEAgcGdf bmV3bG9jYWxlX2Zyb21fY29sbGF0aW9uKE9pZCBjb2xsaWQpCiAJCS8qIFdlIGhhdmVuJ3Qg Y29tcHV0ZWQgdGhpcyB5ZXQgaW4gdGhpcyBzZXNzaW9uLCBzbyBkbyBpdCAqLwogCQlIZWFw VHVwbGUJdHA7CiAJCUZvcm1fcGdfY29sbGF0aW9uIGNvbGxmb3JtOwotCQljb25zdCBjaGFy ICpjb2xsY29sbGF0ZTsKLQkJY29uc3QgY2hhciAqY29sbGN0eXBlIHBnX2F0dHJpYnV0ZV91 bnVzZWQoKTsKIAkJc3RydWN0IHBnX2xvY2FsZV9zdHJ1Y3QgcmVzdWx0OwogCQlwZ19sb2Nh bGVfdCByZXN1bHRwOwogCQlEYXR1bQkJZGF0dW07CkBAIC0xNDk2LDEzICsxNTQ4LDYgQEAg cGdfbmV3bG9jYWxlX2Zyb21fY29sbGF0aW9uKE9pZCBjb2xsaWQpCiAJCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29sbGF0aW9uICV1IiwgY29sbGlkKTsKIAkJ Y29sbGZvcm0gPSAoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVDVCh0cCk7CiAKLQkJZGF0 dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09MTE9JRCwgdHAsIEFudW1fcGdfY29sbGF0aW9uX2Nv bGxjb2xsYXRlLCAmaXNudWxsKTsKLQkJQXNzZXJ0KCFpc251bGwpOwotCQljb2xsY29sbGF0 ZSA9IFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pOwotCQlkYXR1bSA9IFN5c0NhY2hlR2V0 QXR0cihDT0xMT0lELCB0cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbGN0eXBlLCAmaXNudWxs KTsKLQkJQXNzZXJ0KCFpc251bGwpOwotCQljb2xsY3R5cGUgPSBUZXh0RGF0dW1HZXRDU3Ry aW5nKGRhdHVtKTsKLQogCQkvKiBXZSdsbCBmaWxsIGluIHRoZSByZXN1bHQgc3RydWN0IGxv Y2FsbHkgYmVmb3JlIGFsbG9jYXRpbmcgbWVtb3J5ICovCiAJCW1lbXNldCgmcmVzdWx0LCAw LCBzaXplb2YocmVzdWx0KSk7CiAJCXJlc3VsdC5wcm92aWRlciA9IGNvbGxmb3JtLT5jb2xs cHJvdmlkZXI7CkBAIC0xNTExLDggKzE1NTYsMTcgQEAgcGdfbmV3bG9jYWxlX2Zyb21fY29s bGF0aW9uKE9pZCBjb2xsaWQpCiAJCWlmIChjb2xsZm9ybS0+Y29sbHByb3ZpZGVyID09IENP TExQUk9WSURFUl9MSUJDKQogCQl7CiAjaWZkZWYgSEFWRV9MT0NBTEVfVAorCQkJY29uc3Qg Y2hhciAqY29sbGNvbGxhdGU7CisJCQljb25zdCBjaGFyICpjb2xsY3R5cGUgcGdfYXR0cmli dXRlX3VudXNlZCgpOwogCQkJbG9jYWxlX3QJbG9jOwogCisJCQlkYXR1bSA9IFN5c0NhY2hl R2V0QXR0cihDT0xMT0lELCB0cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbGNvbGxhdGUsICZp c251bGwpOworCQkJQXNzZXJ0KCFpc251bGwpOworCQkJY29sbGNvbGxhdGUgPSBUZXh0RGF0 dW1HZXRDU3RyaW5nKGRhdHVtKTsKKwkJCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKENPTExP SUQsIHRwLCBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsY3R5cGUsICZpc251bGwpOworCQkJQXNz ZXJ0KCFpc251bGwpOworCQkJY29sbGN0eXBlID0gVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1 bSk7CisKIAkJCWlmIChzdHJjbXAoY29sbGNvbGxhdGUsIGNvbGxjdHlwZSkgPT0gMCkKIAkJ CXsKIAkJCQkvKiBOb3JtYWwgY2FzZSB3aGVyZSB0aGV5J3JlIHRoZSBzYW1lICovCkBAIC0x NTYzLDM2ICsxNjE3LDEyIEBAIHBnX25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbihPaWQgY29s bGlkKQogCQl9CiAJCWVsc2UgaWYgKGNvbGxmb3JtLT5jb2xscHJvdmlkZXIgPT0gQ09MTFBS T1ZJREVSX0lDVSkKIAkJewotI2lmZGVmIFVTRV9JQ1UKLQkJCVVDb2xsYXRvciAgKmNvbGxh dG9yOwotCQkJVUVycm9yQ29kZQlzdGF0dXM7Ci0KLQkJCWlmIChzdHJjbXAoY29sbGNvbGxh dGUsIGNvbGxjdHlwZSkgIT0gMCkKLQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJKGVycmNv ZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAotCQkJCQkJIGVycm1zZygiY29s bGF0aW9ucyB3aXRoIGRpZmZlcmVudCBjb2xsYXRlIGFuZCBjdHlwZSB2YWx1ZXMgYXJlIG5v dCBzdXBwb3J0ZWQgYnkgSUNVIikpKTsKLQotCQkJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwot CQkJY29sbGF0b3IgPSB1Y29sX29wZW4oY29sbGNvbGxhdGUsICZzdGF0dXMpOwotCQkJaWYg KFVfRkFJTFVSRShzdGF0dXMpKQotCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkoZXJybXNn KCJjb3VsZCBub3Qgb3BlbiBjb2xsYXRvciBmb3IgbG9jYWxlIFwiJXNcIjogJXMiLAotCQkJ CQkJCQljb2xsY29sbGF0ZSwgdV9lcnJvck5hbWUoc3RhdHVzKSkpKTsKKwkJCWNvbnN0IGNo YXIgKmljdWxvY3N0cjsKIAotCQkJaWYgKFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNIDwgNTQp Ci0JCQkJaWN1X3NldF9jb2xsYXRpb25fYXR0cmlidXRlcyhjb2xsYXRvciwgY29sbGNvbGxh dGUpOwotCi0JCQkvKiBXZSB3aWxsIGxlYWsgdGhpcyBzdHJpbmcgaWYgd2UgZ2V0IGFuIGVy cm9yIGJlbG93IDotKCAqLwotCQkJcmVzdWx0LmluZm8uaWN1LmxvY2FsZSA9IE1lbW9yeUNv bnRleHRTdHJkdXAoVG9wTWVtb3J5Q29udGV4dCwKLQkJCQkJCQkJCQkJCQkJIGNvbGxjb2xs YXRlKTsKLQkJCXJlc3VsdC5pbmZvLmljdS51Y29sID0gY29sbGF0b3I7Ci0jZWxzZQkJCQkJ CQkvKiBub3QgVVNFX0lDVSAqLwotCQkJLyogY291bGQgZ2V0IGhlcmUgaWYgYSBjb2xsYXRp b24gd2FzIGNyZWF0ZWQgYnkgYSBidWlsZCB3aXRoIElDVSAqLwotCQkJZXJlcG9ydChFUlJP UiwKLQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAotCQkJ CQkgZXJybXNnKCJJQ1UgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJ1aWxkIiksIFwKLQkJ CQkJIGVycmhpbnQoIllvdSBuZWVkIHRvIHJlYnVpbGQgUG9zdGdyZVNRTCB1c2luZyAlcy4i LCAiLS13aXRoLWljdSIpKSk7Ci0jZW5kaWYJCQkJCQkJLyogbm90IFVTRV9JQ1UgKi8KKwkJ CWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKENPTExPSUQsIHRwLCBBbnVtX3BnX2NvbGxhdGlv bl9jb2xsaWN1bG9jYWxlLCAmaXNudWxsKTsKKwkJCUFzc2VydCghaXNudWxsKTsKKwkJCWlj dWxvY3N0ciA9IFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pOworCQkJbWFrZV9pY3VfY29s bGF0b3IoaWN1bG9jc3RyLCAmcmVzdWx0KTsKIAkJfQogCiAJCWRhdHVtID0gU3lzQ2FjaGVH ZXRBdHRyKENPTExPSUQsIHRwLCBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsdmVyc2lvbiwKQEAg LTE2MDQsNyArMTYzNCwxMSBAQCBwZ19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24oT2lkIGNv bGxpZCkKIAogCQkJY29sbHZlcnNpb25zdHIgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVt KTsKIAotCQkJYWN0dWFsX3ZlcnNpb25zdHIgPSBnZXRfY29sbGF0aW9uX2FjdHVhbF92ZXJz aW9uKGNvbGxmb3JtLT5jb2xscHJvdmlkZXIsIGNvbGxjb2xsYXRlKTsKKwkJCWRhdHVtID0g U3lzQ2FjaGVHZXRBdHRyKENPTExPSUQsIHRwLCBjb2xsZm9ybS0+Y29sbHByb3ZpZGVyID09 IENPTExQUk9WSURFUl9JQ1UgPyBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsaWN1bG9jYWxlIDog QW51bV9wZ19jb2xsYXRpb25fY29sbGNvbGxhdGUsICZpc251bGwpOworCQkJQXNzZXJ0KCFp c251bGwpOworCisJCQlhY3R1YWxfdmVyc2lvbnN0ciA9IGdldF9jb2xsYXRpb25fYWN0dWFs X3ZlcnNpb24oY29sbGZvcm0tPmNvbGxwcm92aWRlciwKKwkJCQkJCQkJCQkJCQkJCSBUZXh0 RGF0dW1HZXRDU3RyaW5nKGRhdHVtKSk7CiAJCQlpZiAoIWFjdHVhbF92ZXJzaW9uc3RyKQog CQkJewogCQkJCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9pbml0L3Bvc3Rp bml0LmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L3Bvc3Rpbml0LmMKaW5kZXggODZkMTkz Yzg5Zi4uNjQ1MmI0MmRiZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9w b3N0aW5pdC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvcG9zdGluaXQuYwpAQCAt MzE4LDYgKzMxOCw3IEBAIENoZWNrTXlEYXRhYmFzZShjb25zdCBjaGFyICpuYW1lLCBib29s IGFtX3N1cGVydXNlciwgYm9vbCBvdmVycmlkZV9hbGxvd19jb25uZWN0CiAJYm9vbAkJaXNu dWxsOwogCWNoYXIJICAgKmNvbGxhdGU7CiAJY2hhcgkgICAqY3R5cGU7CisJY2hhcgkgICAq aWN1bG9jYWxlOwogCiAJLyogRmV0Y2ggb3VyIHBnX2RhdGFiYXNlIHJvdyBub3JtYWxseSwg dmlhIHN5c2NhY2hlICovCiAJdHVwID0gU2VhcmNoU3lzQ2FjaGUxKERBVEFCQVNFT0lELCBP YmplY3RJZEdldERhdHVtKE15RGF0YWJhc2VJZCkpOwpAQCAtNDIwLDYgKzQyMSwyNCBAQCBD aGVja015RGF0YWJhc2UoY29uc3QgY2hhciAqbmFtZSwgYm9vbCBhbV9zdXBlcnVzZXIsIGJv b2wgb3ZlcnJpZGVfYWxsb3dfY29ubmVjdAogCQkJCQkJICAgIiB3aGljaCBpcyBub3QgcmVj b2duaXplZCBieSBzZXRsb2NhbGUoKS4iLCBjdHlwZSksCiAJCQkJIGVycmhpbnQoIlJlY3Jl YXRlIHRoZSBkYXRhYmFzZSB3aXRoIGFub3RoZXIgbG9jYWxlIG9yIGluc3RhbGwgdGhlIG1p c3NpbmcgbG9jYWxlLiIpKSk7CiAKKwlpZiAoZGJmb3JtLT5kYXRsb2Nwcm92aWRlciA9PSBD T0xMUFJPVklERVJfSUNVKQorCXsKKwkJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoREFUQUJB U0VPSUQsIHR1cCwgQW51bV9wZ19kYXRhYmFzZV9kYXRpY3Vsb2NhbGUsICZpc251bGwpOwor CQlBc3NlcnQoIWlzbnVsbCk7CisJCWljdWxvY2FsZSA9IFRleHREYXR1bUdldENTdHJpbmco ZGF0dW0pOworCQltYWtlX2ljdV9jb2xsYXRvcihpY3Vsb2NhbGUsICZkZWZhdWx0X2xvY2Fs ZSk7CisJfQorCWVsc2UKKwkJaWN1bG9jYWxlID0gTlVMTDsKKworCWRlZmF1bHRfbG9jYWxl LnByb3ZpZGVyID0gZGJmb3JtLT5kYXRsb2Nwcm92aWRlcjsKKwkvKgorCSAqIERlZmF1bHQg bG9jYWxlIGlzIGN1cnJlbnRseSBhbHdheXMgZGV0ZXJtaW5pc3RpYy4gIE5vbmRldGVybWlu aXN0aWMKKwkgKiBsb2NhbGVzIGN1cnJlbnRseSBkb24ndCBzdXBwb3J0IHBhdHRlcm4gbWF0 Y2hpbmcsIHdoaWNoIHdvdWxkIGJyZWFrIGEKKwkgKiBsb3Qgb2YgdGhpbmdzIGlmIGFwcGxp ZWQgZ2xvYmFsbHkuCisJICovCisJZGVmYXVsdF9sb2NhbGUuZGV0ZXJtaW5pc3RpYyA9IHRy dWU7CisKIAkvKgogCSAqIENoZWNrIGNvbGxhdGlvbiB2ZXJzaW9uLiAgU2VlIHNpbWlsYXIg Y29kZSBpbgogCSAqIHBnX25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbigpLiAgTm90ZSB0aGF0 IGhlcmUgd2Ugd2FybiBpbnN0ZWFkIG9mIGVycm9yCkBAIC00MzQsNyArNDUzLDcgQEAgQ2hl Y2tNeURhdGFiYXNlKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgYW1fc3VwZXJ1c2VyLCBib29s IG92ZXJyaWRlX2FsbG93X2Nvbm5lY3QKIAogCQljb2xsdmVyc2lvbnN0ciA9IFRleHREYXR1 bUdldENTdHJpbmcoZGF0dW0pOwogCi0JCWFjdHVhbF92ZXJzaW9uc3RyID0gZ2V0X2NvbGxh dGlvbl9hY3R1YWxfdmVyc2lvbihDT0xMUFJPVklERVJfTElCQywgY29sbGF0ZSk7CisJCWFj dHVhbF92ZXJzaW9uc3RyID0gZ2V0X2NvbGxhdGlvbl9hY3R1YWxfdmVyc2lvbihkYmZvcm0t PmRhdGxvY3Byb3ZpZGVyLCBkYmZvcm0tPmRhdGxvY3Byb3ZpZGVyID09IENPTExQUk9WSURF Ul9JQ1UgPyBpY3Vsb2NhbGUgOiBjb2xsYXRlKTsKIAkJaWYgKCFhY3R1YWxfdmVyc2lvbnN0 cikKIAkJCWVyZXBvcnQoV0FSTklORywKIAkJCQkJKGVycm1zZygiZGF0YWJhc2UgXCIlc1wi IGhhcyBubyBhY3R1YWwgY29sbGF0aW9uIHZlcnNpb24sIGJ1dCBhIHZlcnNpb24gd2FzIHJl Y29yZGVkIiwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vaW5pdGRiL01ha2VmaWxlIGIvc3JjL2Jp bi9pbml0ZGIvTWFrZWZpbGUKaW5kZXggZWJhMjgyMjY3YS4uOGRkMjVlN2FmYyAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9pbml0ZGIvTWFrZWZpbGUKKysrIGIvc3JjL2Jpbi9pbml0ZGIvTWFr ZWZpbGUKQEAgLTQwLDcgKzQwLDcgQEAgT0JKUyA9IFwKIGFsbDogaW5pdGRiCiAKIGluaXRk YjogJChPQkpTKSB8IHN1Ym1ha2UtbGlicHEgc3VibWFrZS1saWJwZ3BvcnQgc3VibWFrZS1s aWJwZ2ZldXRpbHMKLQkkKENDKSAkKENGTEFHUykgJChPQkpTKSAkKExERkxBR1MpICQoTERG TEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkKKwkkKENDKSAkKENGTEFHUykgJChPQkpTKSAk KExERkxBR1MpICQoTERGTEFHU19FWCkgJChMSUJTKSAkKElDVV9MSUJTKSAtbyAkQCQoWCkK IAogIyBXZSBtdXN0IHB1bGwgaW4gbG9jYWx0aW1lLmMgZnJvbSBzcmMvdGltZXpvbmVzCiBs b2NhbHRpbWUuYzogJSA6ICQodG9wX3NyY2Rpcikvc3JjL3RpbWV6b25lLyUKQEAgLTYyLDYg KzYyLDggQEAgY2xlYW4gZGlzdGNsZWFuIG1haW50YWluZXItY2xlYW46CiAjIGVuc3VyZSB0 aGF0IGNoYW5nZXMgaW4gZGF0YWRpciBwcm9wYWdhdGUgaW50byBvYmplY3QgZmlsZQogaW5p dGRiLm86IGluaXRkYi5jICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiAK K2V4cG9ydCB3aXRoX2ljdQorCiBjaGVjazoKIAkkKHByb3ZlX2NoZWNrKQogCmRpZmYgLS1n aXQgYS9zcmMvYmluL2luaXRkYi9pbml0ZGIuYyBiL3NyYy9iaW4vaW5pdGRiL2luaXRkYi5j CmluZGV4IDk3ZjE1OTcxZTIuLmNiY2Q1NTI4OGYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vaW5p dGRiL2luaXRkYi5jCisrKyBiL3NyYy9iaW4vaW5pdGRiL2luaXRkYi5jCkBAIC01NSw2ICs1 NSwxMCBAQAogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgPHRpbWUuaD4KIAorI2lm ZGVmIFVTRV9JQ1UKKyNpbmNsdWRlIDx1bmljb2RlL3Vjb2wuaD4KKyNlbmRpZgorCiAjaWZk ZWYgSEFWRV9TSE1fT1BFTgogI2luY2x1ZGUgInN5cy9tbWFuLmgiCiAjZW5kaWYKQEAgLTEz Miw2ICsxMzYsOCBAQCBzdGF0aWMgY2hhciAqbGNfbW9uZXRhcnkgPSBOVUxMOwogc3RhdGlj IGNoYXIgKmxjX251bWVyaWMgPSBOVUxMOwogc3RhdGljIGNoYXIgKmxjX3RpbWUgPSBOVUxM Owogc3RhdGljIGNoYXIgKmxjX21lc3NhZ2VzID0gTlVMTDsKK3N0YXRpYyBjaGFyIGxvY2Fs ZV9wcm92aWRlciA9IENPTExQUk9WSURFUl9MSUJDOworc3RhdGljIGNoYXIgKmljdV9sb2Nh bGUgPSBOVUxMOwogc3RhdGljIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGV4dF9zZWFyY2hfY29u ZmlnID0gTlVMTDsKIHN0YXRpYyBjaGFyICp1c2VybmFtZSA9IE5VTEw7CiBzdGF0aWMgYm9v bCBwd3Byb21wdCA9IGZhbHNlOwpAQCAtMTQwNSw2ICsxNDExLDEyIEBAIGJvb3RzdHJhcF90 ZW1wbGF0ZTEodm9pZCkKIAlia2lfbGluZXMgPSByZXBsYWNlX3Rva2VuKGJraV9saW5lcywg IkxDX0NUWVBFIiwKIAkJCQkJCQkgIGVzY2FwZV9xdW90ZXNfYmtpKGxjX2N0eXBlKSk7CiAK Kwlia2lfbGluZXMgPSByZXBsYWNlX3Rva2VuKGJraV9saW5lcywgIklDVV9MT0NBTEUiLAor CQkJCQkJCSAgbG9jYWxlX3Byb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UgPyBlc2NhcGVf cXVvdGVzX2JraShpY3VfbG9jYWxlKSA6ICJfbnVsbF8iKTsKKworCXNwcmludGYoYnVmLCAi JWMiLCBsb2NhbGVfcHJvdmlkZXIpOworCWJraV9saW5lcyA9IHJlcGxhY2VfdG9rZW4oYmtp X2xpbmVzLCAiTE9DQUxFX1BST1ZJREVSIiwgYnVmKTsKKwogCS8qIEFsc28gZW5zdXJlIGJh Y2tlbmQgaXNuJ3QgY29uZnVzZWQgYnkgdGhpcyBlbnZpcm9ubWVudCB2YXI6ICovCiAJdW5z ZXRlbnYoIlBHQ0xJRU5URU5DT0RJTkciKTsKIApAQCAtMjE2NSw3ICsyMTc3LDYgQEAgc2V0 bG9jYWxlcyh2b2lkKQogCSAqIGNhbm9uaWNhbGl6ZSBsb2NhbGUgbmFtZXMsIGFuZCBvYnRh aW4gYW55IG1pc3NpbmcgdmFsdWVzIGZyb20gb3VyCiAJICogY3VycmVudCBlbnZpcm9ubWVu dAogCSAqLwotCiAJY2hlY2tfbG9jYWxlX25hbWUoTENfQ1RZUEUsIGxjX2N0eXBlLCAmY2Fu b25uYW1lKTsKIAlsY19jdHlwZSA9IGNhbm9ubmFtZTsKIAljaGVja19sb2NhbGVfbmFtZShM Q19DT0xMQVRFLCBsY19jb2xsYXRlLCAmY2Fub25uYW1lKTsKQEAgLTIxODQsNiArMjE5NSwz NyBAQCBzZXRsb2NhbGVzKHZvaWQpCiAJY2hlY2tfbG9jYWxlX25hbWUoTENfQ1RZUEUsIGxj X21lc3NhZ2VzLCAmY2Fub25uYW1lKTsKIAlsY19tZXNzYWdlcyA9IGNhbm9ubmFtZTsKICNl bmRpZgorCisJaWYgKGxvY2FsZV9wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQorCXsK KwkJaWYgKCFpY3VfbG9jYWxlKQorCQl7CisJCQlwZ19sb2dfZXJyb3IoIklDVSBsb2NhbGUg bXVzdCBiZSBzcGVjaWZpZWQiKTsKKwkJCWV4aXQoMSk7CisJCX0KKworCQkvKgorCQkgKiBD aGVjayBJQ1UgbG9jYWxlIElECisJCSAqLworI2lmZGVmIFVTRV9JQ1UKKwkJeworCQkJVUVy cm9yQ29kZQlzdGF0dXM7CisKKwkJCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKKwkJCXVjb2xf b3BlbihpY3VfbG9jYWxlLCAmc3RhdHVzKTsKKwkJCWlmIChVX0ZBSUxVUkUoc3RhdHVzKSkK KwkJCXsKKwkJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBvcGVuIGNvbGxhdG9yIGZvciBs b2NhbGUgXCIlc1wiOiAlcyIsCisJCQkJCQkJIGljdV9sb2NhbGUsIHVfZXJyb3JOYW1lKHN0 YXR1cykpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCX0KKyNlbHNlCisJCXBnX2xvZ19lcnJv cigiSUNVIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBidWlsZCIpOworCQlmcHJpbnRmKHN0 ZGVyciwgXygiWW91IG5lZWQgdG8gcmVidWlsZCBQb3N0Z3JlU1FMIHVzaW5nICVzLlxuIiks ICItLXdpdGgtaWN1Iik7CisJCWV4aXQoMSk7CisjZW5kaWYKKwl9CiB9CiAKIC8qCkBAIC0y MjAyLDYgKzIyNDQsNyBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYo XygiIFstRCwgLS1wZ2RhdGE9XURBVEFESVIgICAgIGxvY2F0aW9uIGZvciB0aGlzIGRhdGFi YXNlIGNsdXN0ZXJcbiIpKTsKIAlwcmludGYoXygiICAtRSwgLS1lbmNvZGluZz1FTkNPRElO RyAgIHNldCBkZWZhdWx0IGVuY29kaW5nIGZvciBuZXcgZGF0YWJhc2VzXG4iKSk7CiAJcHJp bnRmKF8oIiAgLWcsIC0tYWxsb3ctZ3JvdXAtYWNjZXNzICBhbGxvdyBncm91cCByZWFkL2V4 ZWN1dGUgb24gZGF0YSBkaXJlY3RvcnlcbiIpKTsKKwlwcmludGYoXygiICAgICAgLS1pY3Ut bG9jYWxlPUxPQ0FMRSAgIHNldCBJQ1UgbG9jYWxlIElEIGZvciBuZXcgZGF0YWJhc2VzXG4i KSk7CiAJcHJpbnRmKF8oIiAgLWssIC0tZGF0YS1jaGVja3N1bXMgICAgICB1c2UgZGF0YSBw YWdlIGNoZWNrc3Vtc1xuIikpOwogCXByaW50ZihfKCIgICAgICAtLWxvY2FsZT1MT0NBTEUg ICAgICAgc2V0IGRlZmF1bHQgbG9jYWxlIGZvciBuZXcgZGF0YWJhc2VzXG4iKSk7CiAJcHJp bnRmKF8oIiAgICAgIC0tbGMtY29sbGF0ZT0sIC0tbGMtY3R5cGU9LCAtLWxjLW1lc3NhZ2Vz PUxPQ0FMRVxuIgpAQCAtMjIwOSw2ICsyMjUyLDggQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJv Z25hbWUpCiAJCQkgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgZGVmYXVsdCBs b2NhbGUgaW4gdGhlIHJlc3BlY3RpdmUgY2F0ZWdvcnkgZm9yXG4iCiAJCQkgIiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBuZXcgZGF0YWJhc2VzIChkZWZhdWx0IHRha2VuIGZyb20g ZW52aXJvbm1lbnQpXG4iKSk7CiAJcHJpbnRmKF8oIiAgICAgIC0tbm8tbG9jYWxlICAgICAg ICAgICBlcXVpdmFsZW50IHRvIC0tbG9jYWxlPUNcbiIpKTsKKwlwcmludGYoXygiICAgICAg LS1sb2NhbGUtcHJvdmlkZXI9e2xpYmN8aWN1fVxuIgorCQkJICIgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2V0IGRlZmF1bHQgbG9jYWxlIHByb3ZpZGVyIGZvciBuZXcgZGF0YWJh c2VzXG4iKSk7CiAJcHJpbnRmKF8oIiAgICAgIC0tcHdmaWxlPUZJTEUgICAgICAgICByZWFk IHBhc3N3b3JkIGZvciB0aGUgbmV3IHN1cGVydXNlciBmcm9tIGZpbGVcbiIpKTsKIAlwcmlu dGYoXygiICAtVCwgLS10ZXh0LXNlYXJjaC1jb25maWc9Q0ZHXG4iCiAJCQkgIiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IHRleHQgc2VhcmNoIGNvbmZpZ3VyYXRpb25c biIpKTsKQEAgLTIzNzIsMjEgKzI0MTcsMjYgQEAgc2V0dXBfbG9jYWxlX2VuY29kaW5nKHZv aWQpCiB7CiAJc2V0bG9jYWxlcygpOwogCi0JaWYgKHN0cmNtcChsY19jdHlwZSwgbGNfY29s bGF0ZSkgPT0gMCAmJgorCWlmIChsb2NhbGVfcHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0xJ QkMgJiYKKwkJc3RyY21wKGxjX2N0eXBlLCBsY19jb2xsYXRlKSA9PSAwICYmCiAJCXN0cmNt cChsY19jdHlwZSwgbGNfdGltZSkgPT0gMCAmJgogCQlzdHJjbXAobGNfY3R5cGUsIGxjX251 bWVyaWMpID09IDAgJiYKIAkJc3RyY21wKGxjX2N0eXBlLCBsY19tb25ldGFyeSkgPT0gMCAm JgotCQlzdHJjbXAobGNfY3R5cGUsIGxjX21lc3NhZ2VzKSA9PSAwKQorCQlzdHJjbXAobGNf Y3R5cGUsIGxjX21lc3NhZ2VzKSA9PSAwICYmCisJCSghaWN1X2xvY2FsZSB8fCBzdHJjbXAo bGNfY3R5cGUsIGljdV9sb2NhbGUpID09IDApKQogCQlwcmludGYoXygiVGhlIGRhdGFiYXNl IGNsdXN0ZXIgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIGxvY2FsZSBcIiVzXCIuXG4iKSwg bGNfY3R5cGUpOwogCWVsc2UKIAl7Ci0JCXByaW50ZihfKCJUaGUgZGF0YWJhc2UgY2x1c3Rl ciB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggbG9jYWxlc1xuIgotCQkJCSAiICBDT0xMQVRF OiAgJXNcbiIKLQkJCQkgIiAgQ1RZUEU6ICAgICVzXG4iCi0JCQkJICIgIE1FU1NBR0VTOiAl c1xuIgotCQkJCSAiICBNT05FVEFSWTogJXNcbiIKLQkJCQkgIiAgTlVNRVJJQzogICVzXG4i Ci0JCQkJICIgIFRJTUU6ICAgICAlc1xuIiksCisJCXByaW50ZihfKCJUaGUgZGF0YWJhc2Ug Y2x1c3RlciB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggdGhpcyBsb2NhbGUgY29uZmlndXJh dGlvbjpcbiIpKTsKKwkJcHJpbnRmKF8oIiAgcHJvdmlkZXI6ICAgICVzXG4iKSwgY29sbHBy b3ZpZGVyX25hbWUobG9jYWxlX3Byb3ZpZGVyKSk7CisJCWlmIChpY3VfbG9jYWxlKQorCQkJ cHJpbnRmKF8oIiAgSUNVIGxvY2FsZTogICVzXG4iKSwgaWN1X2xvY2FsZSk7CisJCXByaW50 ZihfKCIgIExDX0NPTExBVEU6ICAlc1xuIgorCQkJCSAiICBMQ19DVFlQRTogICAgJXNcbiIK KwkJCQkgIiAgTENfTUVTU0FHRVM6ICVzXG4iCisJCQkJICIgIExDX01PTkVUQVJZOiAlc1xu IgorCQkJCSAiICBMQ19OVU1FUklDOiAgJXNcbiIKKwkJCQkgIiAgTENfVElNRTogICAgICVz XG4iKSwKIAkJCSAgIGxjX2NvbGxhdGUsCiAJCQkgICBsY19jdHlwZSwKIAkJCSAgIGxjX21l c3NhZ2VzLApAQCAtMjM5NSw3ICsyNDQ1LDkgQEAgc2V0dXBfbG9jYWxlX2VuY29kaW5nKHZv aWQpCiAJCQkgICBsY190aW1lKTsKIAl9CiAKLQlpZiAoIWVuY29kaW5nKQorCWlmICghZW5j b2RpbmcgJiYgbG9jYWxlX3Byb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpCisJCWVuY29k aW5naWQgPSBQR19VVEY4OworCWVsc2UgaWYgKCFlbmNvZGluZykKIAl7CiAJCWludAkJCWN0 eXBlX2VuYzsKIApAQCAtMjg5OSw2ICsyOTUxLDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQogCQl7ImRhdGEtY2hlY2tzdW1zIiwgbm9fYXJndW1lbnQsIE5VTEwsICdrJ30s CiAJCXsiYWxsb3ctZ3JvdXAtYWNjZXNzIiwgbm9fYXJndW1lbnQsIE5VTEwsICdnJ30sCiAJ CXsiZGlzY2FyZC1jYWNoZXMiLCBub19hcmd1bWVudCwgTlVMTCwgMTR9LAorCQl7ImxvY2Fs ZS1wcm92aWRlciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAxNX0sCisJCXsiaWN1LWxv Y2FsZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAxNn0sCiAJCXtOVUxMLCAwLCBOVUxM LCAwfQogCX07CiAKQEAgLTMwNDUsNiArMzA5OSwyMCBAQCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCiAJCQkJCQkJCQkJIGV4dHJhX29wdGlvbnMsCiAJCQkJCQkJCQkJICItYyBk ZWJ1Z19kaXNjYXJkX2NhY2hlcz0xIik7CiAJCQkJYnJlYWs7CisJCQljYXNlIDE1OgorCQkJ CWlmIChzdHJjbXAob3B0YXJnLCAiaWN1IikgPT0gMCkKKwkJCQkJbG9jYWxlX3Byb3ZpZGVy ID0gQ09MTFBST1ZJREVSX0lDVTsKKwkJCQllbHNlIGlmIChzdHJjbXAob3B0YXJnLCAibGli YyIpID09IDApCisJCQkJCWxvY2FsZV9wcm92aWRlciA9IENPTExQUk9WSURFUl9MSUJDOwor CQkJCWVsc2UKKwkJCQl7CisJCQkJCXBnX2xvZ19lcnJvcigidW5yZWNvZ25pemVkIGxvY2Fs ZSBwcm92aWRlcjogJXMiLCBvcHRhcmcpOworCQkJCQlleGl0KDEpOworCQkJCX0KKwkJCQli cmVhazsKKwkJCWNhc2UgMTY6CisJCQkJaWN1X2xvY2FsZSA9IHBnX3N0cmR1cChvcHRhcmcp OworCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQkvKiBnZXRvcHRfbG9uZyBhbHJlYWR5 IGVtaXR0ZWQgYSBjb21wbGFpbnQgKi8KIAkJCQlmcHJpbnRmKHN0ZGVyciwgXygiVHJ5IFwi JXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iKSwKQEAgLTMwNzMsNiArMzE0 MSwxMyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCWV4aXQoMSk7CiAJfQog CisJaWYgKGljdV9sb2NhbGUgJiYgbG9jYWxlX3Byb3ZpZGVyICE9IENPTExQUk9WSURFUl9J Q1UpCisJeworCQlwZ19sb2dfZXJyb3IoIiVzIGNhbm5vdCBiZSBzcGVjaWZpZWQgdW5sZXNz IGxvY2FsZSBwcm92aWRlciBcIiVzXCIgaXMgY2hvc2VuIiwKKwkJCQkJICItLWljdS1sb2Nh bGUiLCAiaWN1Iik7CisJCWV4aXQoMSk7CisJfQorCiAJYXRleGl0KGNsZWFudXBfZGlyZWN0 b3JpZXNfYXRleGl0KTsKIAogCS8qIElmIHdlIG9ubHkgbmVlZCB0byBmc3luYywganVzdCBk byBpdCBhbmQgZXhpdCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9pbml0ZGIvdC8wMDFfaW5p dGRiLnBsIGIvc3JjL2Jpbi9pbml0ZGIvdC8wMDFfaW5pdGRiLnBsCmluZGV4IDdkYzhjZGQ4 NTUuLmM2MzZiZjNhYjIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vaW5pdGRiL3QvMDAxX2luaXRk Yi5wbAorKysgYi9zcmMvYmluL2luaXRkYi90LzAwMV9pbml0ZGIucGwKQEAgLTkzLDQgKzkz LDMxIEBACiAJCSdjaGVjayBQR0RBVEEgcGVybWlzc2lvbnMnKTsKIH0KIAorIyBMb2NhbGUg cHJvdmlkZXIgdGVzdHMKKworaWYgKCRFTlZ7d2l0aF9pY3V9IGVxICd5ZXMnKQoreworCWNv bW1hbmRfZmFpbHNfbGlrZShbJ2luaXRkYicsICctLW5vLXN5bmMnLCAnLS1sb2NhbGUtcHJv dmlkZXI9aWN1JywgIiR0ZW1wZGlyL2RhdGEyIl0sCisJCXFyL2luaXRkYjogZXJyb3I6IElD VSBsb2NhbGUgbXVzdCBiZSBzcGVjaWZpZWQvLAorCQknbG9jYWxlIHByb3ZpZGVyIElDVSBy ZXF1aXJlcyAtLWljdS1sb2NhbGUnKTsKKworCWNvbW1hbmRfb2soWydpbml0ZGInLCAnLS1u by1zeW5jJywgJy0tbG9jYWxlLXByb3ZpZGVyPWljdScsICctLWljdS1sb2NhbGU9ZW4nLCAi JHRlbXBkaXIvZGF0YTMiXSwKKwkJJ29wdGlvbiAtLWljdS1sb2NhbGUnKTsKKworCWNvbW1h bmRfZmFpbHNfbGlrZShbJ2luaXRkYicsICctLW5vLXN5bmMnLCAnLS1sb2NhbGUtcHJvdmlk ZXI9aWN1JywgJy0taWN1LWxvY2FsZT1AY29sTnVtZXJpYz1sb3dlcicsICIkdGVtcGRpci9k YXRhWCJdLAorCQlxci9pbml0ZGI6IGVycm9yOiBjb3VsZCBub3Qgb3BlbiBjb2xsYXRvciBm b3IgbG9jYWxlLywKKwkJJ2ZhaWxzIGZvciBpbnZhbGlkIElDVSBsb2NhbGUnKTsKK30KK2Vs c2UKK3sKKwljb21tYW5kX2ZhaWxzKFsnaW5pdGRiJywgJy0tbm8tc3luYycsICctLWxvY2Fs ZS1wcm92aWRlcj1pY3UnLCAiJHRlbXBkaXIvZGF0YTIiXSwKKwkJCQkgICdsb2NhbGUgcHJv dmlkZXIgSUNVIGZhaWxzIHNpbmNlIG5vIElDVSBzdXBwb3J0Jyk7Cit9CisKK2NvbW1hbmRf ZmFpbHMoWydpbml0ZGInLCAnLS1uby1zeW5jJywgJy0tbG9jYWxlLXByb3ZpZGVyPXh5eics ICIkdGVtcGRpci9kYXRhWCJdLAorCQkJICAnZmFpbHMgZm9yIGludmFsaWQgbG9jYWxlIHBy b3ZpZGVyJyk7CisKK2NvbW1hbmRfZmFpbHMoWydpbml0ZGInLCAnLS1uby1zeW5jJywgJy0t bG9jYWxlLXByb3ZpZGVyPWxpYmMnLCAnLS1pY3UtbG9jYWxlPWVuJywgIiR0ZW1wZGlyL2Rh dGFYIl0sCisJCQkgICdmYWlscyBmb3IgaW52YWxpZCBvcHRpb24gY29tYmluYXRpb24nKTsK KwogZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVt cC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCA0ZGQyNGI4Yzg5Li43MjVj ZDJlNGViIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3Ny Yy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTI3NTMsOCArMjc1MywxMCBAQCBkdW1wRGF0 YWJhc2UoQXJjaGl2ZSAqZm91dCkKIAkJCQlpX2RhdG5hbWUsCiAJCQkJaV9kYXRkYmEsCiAJ CQkJaV9lbmNvZGluZywKKwkJCQlpX2RhdGxvY3Byb3ZpZGVyLAogCQkJCWlfY29sbGF0ZSwK IAkJCQlpX2N0eXBlLAorCQkJCWlfZGF0aWN1bG9jYWxlLAogCQkJCWlfZnJvemVueGlkLAog CQkJCWlfbWlubXhpZCwKIAkJCQlpX2RhdGFjbCwKQEAgLTI3NjksOCArMjc3MSwxMCBAQCBk dW1wRGF0YWJhc2UoQXJjaGl2ZSAqZm91dCkKIAljb25zdCBjaGFyICpkYXRuYW1lLAogCQkJ ICAgKmRiYSwKIAkJCSAgICplbmNvZGluZywKKwkJCSAgICpkYXRsb2Nwcm92aWRlciwKIAkJ CSAgICpjb2xsYXRlLAogCQkJICAgKmN0eXBlLAorCQkJICAgKmljdWxvY2FsZSwKIAkJCSAg ICpkYXRpc3RlbXBsYXRlLAogCQkJICAgKmRhdGNvbm5saW1pdCwKIAkJCSAgICp0YWJsZXNw YWNlOwpAQCAtMjc5NCw5ICsyNzk4LDkgQEAgZHVtcERhdGFiYXNlKEFyY2hpdmUgKmZvdXQp CiAJZWxzZQogCQlhcHBlbmRQUUV4cEJ1ZmZlcihkYlFyeSwgIjAgQVMgZGF0bWlubXhpZCwg Iik7CiAJaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTUwMDAwKQotCQlhcHBlbmRQUUV4 cEJ1ZmZlcihkYlFyeSwgImRhdGNvbGx2ZXJzaW9uLCAiKTsKKwkJYXBwZW5kUFFFeHBCdWZm ZXIoZGJRcnksICJkYXRsb2Nwcm92aWRlciwgZGF0aWN1bG9jYWxlLCBkYXRjb2xsdmVyc2lv biwgIik7CiAJZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZlcihkYlFyeSwgIk5VTEwgQVMgZGF0 Y29sbHZlcnNpb24sICIpOworCQlhcHBlbmRQUUV4cEJ1ZmZlcihkYlFyeSwgIidjJyBBUyBk YXRsb2Nwcm92aWRlciwgTlVMTCBBUyBkYXRpY3Vsb2NhbGUsIE5VTEwgQVMgZGF0Y29sbHZl cnNpb24sICIpOwogCWFwcGVuZFBRRXhwQnVmZmVyKGRiUXJ5LAogCQkJCQkgICIoU0VMRUNU IHNwY25hbWUgRlJPTSBwZ190YWJsZXNwYWNlIHQgV0hFUkUgdC5vaWQgPSBkYXR0YWJsZXNw YWNlKSBBUyB0YWJsZXNwYWNlLCAiCiAJCQkJCSAgInNob2JqX2Rlc2NyaXB0aW9uKG9pZCwg J3BnX2RhdGFiYXNlJykgQVMgZGVzY3JpcHRpb24gIgpAQCAtMjgxMCw4ICsyODE0LDEwIEBA IGR1bXBEYXRhYmFzZShBcmNoaXZlICpmb3V0KQogCWlfZGF0bmFtZSA9IFBRZm51bWJlcihy ZXMsICJkYXRuYW1lIik7CiAJaV9kYXRkYmEgPSBQUWZudW1iZXIocmVzLCAiZGF0ZGJhIik7 CiAJaV9lbmNvZGluZyA9IFBRZm51bWJlcihyZXMsICJlbmNvZGluZyIpOworCWlfZGF0bG9j cHJvdmlkZXIgPSBQUWZudW1iZXIocmVzLCAiZGF0bG9jcHJvdmlkZXIiKTsKIAlpX2NvbGxh dGUgPSBQUWZudW1iZXIocmVzLCAiZGF0Y29sbGF0ZSIpOwogCWlfY3R5cGUgPSBQUWZudW1i ZXIocmVzLCAiZGF0Y3R5cGUiKTsKKwlpX2RhdGljdWxvY2FsZSA9IFBRZm51bWJlcihyZXMs ICJkYXRpY3Vsb2NhbGUiKTsKIAlpX2Zyb3plbnhpZCA9IFBRZm51bWJlcihyZXMsICJkYXRm cm96ZW54aWQiKTsKIAlpX21pbm14aWQgPSBQUWZudW1iZXIocmVzLCAiZGF0bWlubXhpZCIp OwogCWlfZGF0YWNsID0gUFFmbnVtYmVyKHJlcywgImRhdGFjbCIpOwpAQCAtMjgyNiw4ICsy ODMyLDEzIEBAIGR1bXBEYXRhYmFzZShBcmNoaXZlICpmb3V0KQogCWRhdG5hbWUgPSBQUWdl dHZhbHVlKHJlcywgMCwgaV9kYXRuYW1lKTsKIAlkYmEgPSBnZXRSb2xlTmFtZShQUWdldHZh bHVlKHJlcywgMCwgaV9kYXRkYmEpKTsKIAllbmNvZGluZyA9IFBRZ2V0dmFsdWUocmVzLCAw LCBpX2VuY29kaW5nKTsKKwlkYXRsb2Nwcm92aWRlciA9IFBRZ2V0dmFsdWUocmVzLCAwLCBp X2RhdGxvY3Byb3ZpZGVyKTsKIAljb2xsYXRlID0gUFFnZXR2YWx1ZShyZXMsIDAsIGlfY29s bGF0ZSk7CiAJY3R5cGUgPSBQUWdldHZhbHVlKHJlcywgMCwgaV9jdHlwZSk7CisJaWYgKCFQ UWdldGlzbnVsbChyZXMsIDAsIGlfZGF0aWN1bG9jYWxlKSkKKwkJaWN1bG9jYWxlID0gUFFn ZXR2YWx1ZShyZXMsIDAsIGlfZGF0aWN1bG9jYWxlKTsKKwllbHNlCisJCWljdWxvY2FsZSA9 IE5VTEw7CiAJZnJvemVueGlkID0gYXRvb2lkKFBRZ2V0dmFsdWUocmVzLCAwLCBpX2Zyb3pl bnhpZCkpOwogCW1pbm14aWQgPSBhdG9vaWQoUFFnZXR2YWx1ZShyZXMsIDAsIGlfbWlubXhp ZCkpOwogCWRiZGFjbC5hY2wgPSBQUWdldHZhbHVlKHJlcywgMCwgaV9kYXRhY2wpOwpAQCAt Mjg1OSw2ICsyODcwLDE2IEBAIGR1bXBEYXRhYmFzZShBcmNoaXZlICpmb3V0KQogCQlhcHBl bmRQUUV4cEJ1ZmZlclN0cihjcmVhUXJ5LCAiIEVOQ09ESU5HID0gIik7CiAJCWFwcGVuZFN0 cmluZ0xpdGVyYWxBSChjcmVhUXJ5LCBlbmNvZGluZywgZm91dCk7CiAJfQorCisJYXBwZW5k UFFFeHBCdWZmZXJTdHIoY3JlYVFyeSwgIiBMT0NBTEVfUFJPVklERVIgPSAiKTsKKwlpZiAo ZGF0bG9jcHJvdmlkZXJbMF0gPT0gJ2MnKQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihjcmVh UXJ5LCAibGliYyIpOworCWVsc2UgaWYgKGRhdGxvY3Byb3ZpZGVyWzBdID09ICdpJykKKwkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIoY3JlYVFyeSwgImljdSIpOworCWVsc2UKKwkJZmF0YWwo InVucmVjb2duaXplZCBsb2NhbGUgcHJvdmlkZXI6ICVzIiwKKwkJCSAgZGF0bG9jcHJvdmlk ZXIpOworCiAJaWYgKHN0cmxlbihjb2xsYXRlKSA+IDAgJiYgc3RyY21wKGNvbGxhdGUsIGN0 eXBlKSA9PSAwKQogCXsKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoY3JlYVFyeSwgIiBMT0NB TEUgPSAiKTsKQEAgLTI4NzcsNiArMjg5OCwxMSBAQCBkdW1wRGF0YWJhc2UoQXJjaGl2ZSAq Zm91dCkKIAkJCWFwcGVuZFN0cmluZ0xpdGVyYWxBSChjcmVhUXJ5LCBjdHlwZSwgZm91dCk7 CiAJCX0KIAl9CisJaWYgKGljdWxvY2FsZSkKKwl7CisJCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KGNyZWFRcnksICIgSUNVX0xPQ0FMRSA9ICIpOworCQlhcHBlbmRTdHJpbmdMaXRlcmFsQUgo Y3JlYVFyeSwgaWN1bG9jYWxlLCBmb3V0KTsKKwl9CiAKIAkvKgogCSAqIEZvciBiaW5hcnkg dXBncmFkZSwgY2Fycnkgb3ZlciB0aGUgY29sbGF0aW9uIHZlcnNpb24uICBGb3Igbm9ybWFs CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvY2hlY2suYyBiL3NyYy9iaW4vcGdf dXBncmFkZS9jaGVjay5jCmluZGV4IDAxOWJjYjZjN2IuLmNmM2IzOThkOWUgMTAwNjQ0Ci0t LSBhL3NyYy9iaW4vcGdfdXBncmFkZS9jaGVjay5jCisrKyBiL3NyYy9iaW4vcGdfdXBncmFk ZS9jaGVjay5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIK IAogI2luY2x1ZGUgImNhdGFsb2cvcGdfYXV0aGlkX2QuaCIKKyNpbmNsdWRlICJjYXRhbG9n L3BnX2NvbGxhdGlvbi5oIgogI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgog I2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCiAjaW5jbHVkZSAicGdfdXBncmFkZS5oIgpAQCAt MzQ5LDYgKzM1MCwxOCBAQCBjaGVja19sb2NhbGVfYW5kX2VuY29kaW5nKERiSW5mbyAqb2xk ZGIsIERiSW5mbyAqbmV3ZGIpCiAJaWYgKCFlcXVpdmFsZW50X2xvY2FsZShMQ19DVFlQRSwg b2xkZGItPmRiX2N0eXBlLCBuZXdkYi0+ZGJfY3R5cGUpKQogCQlwZ19mYXRhbCgibGNfY3R5 cGUgdmFsdWVzIGZvciBkYXRhYmFzZSBcIiVzXCIgZG8gbm90IG1hdGNoOiAgb2xkIFwiJXNc IiwgbmV3IFwiJXNcIlxuIiwKIAkJCQkgb2xkZGItPmRiX25hbWUsIG9sZGRiLT5kYl9jdHlw ZSwgbmV3ZGItPmRiX2N0eXBlKTsKKwlpZiAob2xkZGItPmRiX2NvbGxwcm92aWRlciAhPSBu ZXdkYi0+ZGJfY29sbHByb3ZpZGVyKQorCQlwZ19mYXRhbCgibG9jYWxlIHByb3ZpZGVycyBm b3IgZGF0YWJhc2UgXCIlc1wiIGRvIG5vdCBtYXRjaDogIG9sZCBcIiVzXCIsIG5ldyBcIiVz XCJcbiIsCisJCQkJIG9sZGRiLT5kYl9uYW1lLAorCQkJCSBjb2xscHJvdmlkZXJfbmFtZShv bGRkYi0+ZGJfY29sbHByb3ZpZGVyKSwKKwkJCQkgY29sbHByb3ZpZGVyX25hbWUobmV3ZGIt PmRiX2NvbGxwcm92aWRlcikpOworCWlmICgob2xkZGItPmRiX2ljdWxvY2FsZSA9PSBOVUxM ICYmIG5ld2RiLT5kYl9pY3Vsb2NhbGUgIT0gTlVMTCkgfHwKKwkJKG9sZGRiLT5kYl9pY3Vs b2NhbGUgIT0gTlVMTCAmJiBuZXdkYi0+ZGJfaWN1bG9jYWxlID09IE5VTEwpIHx8CisJCShv bGRkYi0+ZGJfaWN1bG9jYWxlICE9IE5VTEwgJiYgbmV3ZGItPmRiX2ljdWxvY2FsZSAhPSBO VUxMICYmIHN0cmNtcChvbGRkYi0+ZGJfaWN1bG9jYWxlLCBuZXdkYi0+ZGJfaWN1bG9jYWxl KSAhPSAwKSkKKwkJcGdfZmF0YWwoIklDVSBsb2NhbGUgdmFsdWVzIGZvciBkYXRhYmFzZSBc IiVzXCIgZG8gbm90IG1hdGNoOiAgb2xkIFwiJXNcIiwgbmV3IFwiJXNcIlxuIiwKKwkJCQkg b2xkZGItPmRiX25hbWUsCisJCQkJIG9sZGRiLT5kYl9pY3Vsb2NhbGUgPyBvbGRkYi0+ZGJf aWN1bG9jYWxlIDogIihudWxsKSIsCisJCQkJIG5ld2RiLT5kYl9pY3Vsb2NhbGUgPyBuZXdk Yi0+ZGJfaWN1bG9jYWxlIDogIihudWxsKSIpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ191cGdyYWRlL2luZm8uYyBiL3NyYy9iaW4vcGdfdXBncmFkZS9pbmZvLmMKaW5k ZXggNjllZjIzMTE5Zi4uNWMzOTY4ZTBlYSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191cGdy YWRlL2luZm8uYworKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvaW5mby5jCkBAIC0zMTIsMTEg KzMxMiwyMCBAQCBnZXRfZGJfaW5mb3MoQ2x1c3RlckluZm8gKmNsdXN0ZXIpCiAJCQkJaV9l bmNvZGluZywKIAkJCQlpX2RhdGNvbGxhdGUsCiAJCQkJaV9kYXRjdHlwZSwKKwkJCQlpX2Rh dGxvY3Byb3ZpZGVyLAorCQkJCWlfZGF0aWN1bG9jYWxlLAogCQkJCWlfc3BjbG9jYXRpb247 CiAJY2hhcgkJcXVlcnlbUVVFUllfQUxMT0NdOwogCiAJc25wcmludGYocXVlcnksIHNpemVv ZihxdWVyeSksCi0JCQkgIlNFTEVDVCBkLm9pZCwgZC5kYXRuYW1lLCBkLmVuY29kaW5nLCBk LmRhdGNvbGxhdGUsIGQuZGF0Y3R5cGUsICIKKwkJCSAiU0VMRUNUIGQub2lkLCBkLmRhdG5h bWUsIGQuZW5jb2RpbmcsIGQuZGF0Y29sbGF0ZSwgZC5kYXRjdHlwZSwgIik7CisJaWYgKEdF VF9NQUpPUl9WRVJTSU9OKG9sZF9jbHVzdGVyLm1ham9yX3ZlcnNpb24pIDw9IDE1MDApCisJ CXNucHJpbnRmKHF1ZXJ5ICsgc3RybGVuKHF1ZXJ5KSwgc2l6ZW9mKHF1ZXJ5KSAtIHN0cmxl bihxdWVyeSksCisJCQkJICInYycgQVMgZGF0bG9jcHJvdmlkZXIsIE5VTEwgQVMgZGF0aWN1 bG9jYWxlLCAiKTsKKwllbHNlCisJCXNucHJpbnRmKHF1ZXJ5ICsgc3RybGVuKHF1ZXJ5KSwg c2l6ZW9mKHF1ZXJ5KSAtIHN0cmxlbihxdWVyeSksCisJCQkJICJkYXRsb2Nwcm92aWRlciwg ZGF0aWN1bG9jYWxlLCAiKTsKKwlzbnByaW50ZihxdWVyeSArIHN0cmxlbihxdWVyeSksIHNp emVvZihxdWVyeSkgLSBzdHJsZW4ocXVlcnkpLAogCQkJICJwZ19jYXRhbG9nLnBnX3RhYmxl c3BhY2VfbG9jYXRpb24odC5vaWQpIEFTIHNwY2xvY2F0aW9uICIKIAkJCSAiRlJPTSBwZ19j YXRhbG9nLnBnX2RhdGFiYXNlIGQgIgogCQkJICIgTEVGVCBPVVRFUiBKT0lOIHBnX2NhdGFs b2cucGdfdGFibGVzcGFjZSB0ICIKQEAgLTMzMSw2ICszNDAsOCBAQCBnZXRfZGJfaW5mb3Mo Q2x1c3RlckluZm8gKmNsdXN0ZXIpCiAJaV9lbmNvZGluZyA9IFBRZm51bWJlcihyZXMsICJl bmNvZGluZyIpOwogCWlfZGF0Y29sbGF0ZSA9IFBRZm51bWJlcihyZXMsICJkYXRjb2xsYXRl Iik7CiAJaV9kYXRjdHlwZSA9IFBRZm51bWJlcihyZXMsICJkYXRjdHlwZSIpOworCWlfZGF0 bG9jcHJvdmlkZXIgPSBQUWZudW1iZXIocmVzLCAiZGF0bG9jcHJvdmlkZXIiKTsKKwlpX2Rh dGljdWxvY2FsZSA9IFBRZm51bWJlcihyZXMsICJkYXRpY3Vsb2NhbGUiKTsKIAlpX3NwY2xv Y2F0aW9uID0gUFFmbnVtYmVyKHJlcywgInNwY2xvY2F0aW9uIik7CiAKIAludHVwcyA9IFBR bnR1cGxlcyhyZXMpOwpAQCAtMzQzLDYgKzM1NCwxMSBAQCBnZXRfZGJfaW5mb3MoQ2x1c3Rl ckluZm8gKmNsdXN0ZXIpCiAJCWRiaW5mb3NbdHVwbnVtXS5kYl9lbmNvZGluZyA9IGF0b2ko UFFnZXR2YWx1ZShyZXMsIHR1cG51bSwgaV9lbmNvZGluZykpOwogCQlkYmluZm9zW3R1cG51 bV0uZGJfY29sbGF0ZSA9IHBnX3N0cmR1cChQUWdldHZhbHVlKHJlcywgdHVwbnVtLCBpX2Rh dGNvbGxhdGUpKTsKIAkJZGJpbmZvc1t0dXBudW1dLmRiX2N0eXBlID0gcGdfc3RyZHVwKFBR Z2V0dmFsdWUocmVzLCB0dXBudW0sIGlfZGF0Y3R5cGUpKTsKKwkJZGJpbmZvc1t0dXBudW1d LmRiX2NvbGxwcm92aWRlciA9IFBRZ2V0dmFsdWUocmVzLCB0dXBudW0sIGlfZGF0bG9jcHJv dmlkZXIpWzBdOworCQlpZiAoUFFnZXRpc251bGwocmVzLCB0dXBudW0sIGlfZGF0aWN1bG9j YWxlKSkKKwkJCWRiaW5mb3NbdHVwbnVtXS5kYl9pY3Vsb2NhbGUgPSBOVUxMOworCQllbHNl CisJCQlkYmluZm9zW3R1cG51bV0uZGJfaWN1bG9jYWxlID0gcGdfc3RyZHVwKFBRZ2V0dmFs dWUocmVzLCB0dXBudW0sIGlfZGF0aWN1bG9jYWxlKSk7CiAJCXNucHJpbnRmKGRiaW5mb3Nb dHVwbnVtXS5kYl90YWJsZXNwYWNlLCBzaXplb2YoZGJpbmZvc1t0dXBudW1dLmRiX3RhYmxl c3BhY2UpLCAiJXMiLAogCQkJCSBQUWdldHZhbHVlKHJlcywgdHVwbnVtLCBpX3NwY2xvY2F0 aW9uKSk7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUu aCBiL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmgKaW5kZXggYjliM2FjODFiMi4u NmQ3ZmQ4OGMwYyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUu aAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5oCkBAIC0xNzEsNiArMTcx LDggQEAgdHlwZWRlZiBzdHJ1Y3QKIAkJCQkJCQkJCQkJICogcGF0aCAqLwogCWNoYXIJICAg KmRiX2NvbGxhdGU7CiAJY2hhcgkgICAqZGJfY3R5cGU7CisJY2hhcgkJZGJfY29sbHByb3Zp ZGVyOworCWNoYXIJICAgKmRiX2ljdWxvY2FsZTsKIAlpbnQJCQlkYl9lbmNvZGluZzsKIAlS ZWxJbmZvQXJyCXJlbF9hcnI7CQkvKiBhcnJheSBvZiBhbGwgdXNlciByZWxpbmZvcyAqLwog fSBEYkluZm87CmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYyBiL3NyYy9i aW4vcHNxbC9kZXNjcmliZS5jCmluZGV4IDkyMjllYWNiNmQuLjk5MWJmYzE1NDYgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCisrKyBiL3NyYy9iaW4vcHNxbC9kZXNj cmliZS5jCkBAIC04OTYsNiArODk2LDE4IEBAIGxpc3RBbGxEYnMoY29uc3QgY2hhciAqcGF0 dGVybiwgYm9vbCB2ZXJib3NlKQogCQkJCQkgIGdldHRleHRfbm9vcCgiRW5jb2RpbmciKSwK IAkJCQkJICBnZXR0ZXh0X25vb3AoIkNvbGxhdGUiKSwKIAkJCQkJICBnZXR0ZXh0X25vb3Ao IkN0eXBlIikpOworCWlmIChwc2V0LnN2ZXJzaW9uID49IDE1MDAwMCkKKwkJYXBwZW5kUFFF eHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCSAgIiAgICAgICBkLmRhdGljdWxvY2FsZSBhcyBcIiVz XCIsXG4iCisJCQkJCQkgICIgICAgICAgQ0FTRSBkLmRhdGxvY3Byb3ZpZGVyIFdIRU4gJ2Mn IFRIRU4gJ2xpYmMnIFdIRU4gJ2knIFRIRU4gJ2ljdScgRU5EIEFTIFwiJXNcIixcbiIsCisJ CQkJCQkgIGdldHRleHRfbm9vcCgiSUNVIExvY2FsZSIpLAorCQkJCQkJICBnZXR0ZXh0X25v b3AoIkxvY2FsZSBQcm92aWRlciIpKTsKKwllbHNlCisJCWFwcGVuZFBRRXhwQnVmZmVyKCZi dWYsCisJCQkJCQkgICIgICAgICAgZC5kYXRjb2xsYXRlIGFzIFwiJXNcIixcbiIKKwkJCQkJ CSAgIiAgICAgICAnbGliYycgQVMgXCIlc1wiLFxuIiwKKwkJCQkJCSAgZ2V0dGV4dF9ub29w KCJJQ1UgTG9jYWxlIiksCisJCQkJCQkgIGdldHRleHRfbm9vcCgiTG9jYWxlIFByb3ZpZGVy IikpOwogCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsICIgICAgICAgIik7CiAJcHJpbnRB Q0xDb2x1bW4oJmJ1ZiwgImQuZGF0YWNsIik7CiAJaWYgKHZlcmJvc2UpCkBAIC00NjI1LDcg KzQ2MzcsNyBAQCBsaXN0Q29sbGF0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuLCBib29sIHZl cmJvc2UsIGJvb2wgc2hvd1N5c3RlbSkKIAlQUUV4cEJ1ZmZlckRhdGEgYnVmOwogCVBHcmVz dWx0ICAgKnJlczsKIAlwcmludFF1ZXJ5T3B0IG15b3B0ID0gcHNldC5wb3B0OwotCXN0YXRp YyBjb25zdCBib29sIHRyYW5zbGF0ZV9jb2x1bW5zW10gPSB7ZmFsc2UsIGZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZX07CisJc3RhdGljIGNvbnN0IGJvb2wgdHJh bnNsYXRlX2NvbHVtbnNbXSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2Us IGZhbHNlLCB0cnVlLCBmYWxzZX07CiAKIAlpbml0UFFFeHBCdWZmZXIoJmJ1Zik7CiAKQEAg LTQ2MzksNiArNDY1MSwxNSBAQCBsaXN0Q29sbGF0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJu LCBib29sIHZlcmJvc2UsIGJvb2wgc2hvd1N5c3RlbSkKIAkJCQkJICBnZXR0ZXh0X25vb3Ao IkNvbGxhdGUiKSwKIAkJCQkJICBnZXR0ZXh0X25vb3AoIkN0eXBlIikpOwogCisJaWYgKHBz ZXQuc3ZlcnNpb24gPj0gMTUwMDAwKQorCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJ CQkJICAiLFxuICAgICAgIGMuY29sbGljdWxvY2FsZSBBUyBcIiVzXCIiLAorCQkJCQkJICBn ZXR0ZXh0X25vb3AoIklDVSBMb2NhbGUiKSk7CisJZWxzZQorCQlhcHBlbmRQUUV4cEJ1ZmZl cigmYnVmLAorCQkJCQkJICAiLFxuICAgICAgIGMuY29sbGNvbGxhdGUgQVMgXCIlc1wiIiwK KwkJCQkJCSAgZ2V0dGV4dF9ub29wKCJJQ1UgTG9jYWxlIikpOworCiAJaWYgKHBzZXQuc3Zl cnNpb24gPj0gMTAwMDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJICAi LFxuICAgICAgIENBU0UgYy5jb2xscHJvdmlkZXIgV0hFTiAnZCcgVEhFTiAnZGVmYXVsdCcg V0hFTiAnYycgVEhFTiAnbGliYycgV0hFTiAnaScgVEhFTiAnaWN1JyBFTkQgQVMgXCIlc1wi IiwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYyBiL3NyYy9iaW4v cHNxbC90YWItY29tcGxldGUuYwppbmRleCAxNzE3MjgyN2E5Li4zODBjYmMwYjFmIDEwMDY0 NAotLS0gYS9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMKKysrIGIvc3JjL2Jpbi9wc3Fs L3RhYi1jb21wbGV0ZS5jCkBAIC0yNzM4LDcgKzI3MzgsOCBAQCBwc3FsX2NvbXBsZXRpb24o Y29uc3QgY2hhciAqdGV4dCwgaW50IHN0YXJ0LCBpbnQgZW5kKQogCQlDT01QTEVURV9XSVRI KCJPV05FUiIsICJURU1QTEFURSIsICJFTkNPRElORyIsICJUQUJMRVNQQUNFIiwKIAkJCQkJ ICAiSVNfVEVNUExBVEUiLAogCQkJCQkgICJBTExPV19DT05ORUNUSU9OUyIsICJDT05ORUNU SU9OIExJTUlUIiwKLQkJCQkJICAiTENfQ09MTEFURSIsICJMQ19DVFlQRSIsICJMT0NBTEUi LCAiT0lEIik7CisJCQkJCSAgIkxDX0NPTExBVEUiLCAiTENfQ1RZUEUiLCAiTE9DQUxFIiwg Ik9JRCIsCisJCQkJCSAgIkxPQ0FMRV9QUk9WSURFUiIsICJJQ1VfTE9DQUxFIik7CiAKIAll bHNlIGlmIChNYXRjaGVzKCJDUkVBVEUiLCAiREFUQUJBU0UiLCBNYXRjaEFueSwgIlRFTVBM QVRFIikpCiAJCUNPTVBMRVRFX1dJVEhfUVVFUlkoUXVlcnlfZm9yX2xpc3Rfb2ZfdGVtcGxh dGVfZGF0YWJhc2VzKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vc2NyaXB0cy9NYWtlZmlsZSBi L3NyYy9iaW4vc2NyaXB0cy9NYWtlZmlsZQppbmRleCBiODMzMTA5ZGE2Li4yNWU3ZGEzZDNm IDEwMDY0NAotLS0gYS9zcmMvYmluL3NjcmlwdHMvTWFrZWZpbGUKKysrIGIvc3JjL2Jpbi9z Y3JpcHRzL01ha2VmaWxlCkBAIC01Myw2ICs1Myw4IEBAIGNsZWFuIGRpc3RjbGVhbiBtYWlu dGFpbmVyLWNsZWFuOgogCXJtIC1mIGNvbW1vbi5vICQoV0lOMzJSRVMpCiAJcm0gLXJmIHRt cF9jaGVjawogCitleHBvcnQgd2l0aF9pY3UKKwogY2hlY2s6CiAJJChwcm92ZV9jaGVjaykK IApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9zY3JpcHRzL2NyZWF0ZWRiLmMgYi9zcmMvYmluL3Nj cmlwdHMvY3JlYXRlZGIuYwppbmRleCBiMGM2ODA1YmM5Li42ZjYxMmFiZjdjIDEwMDY0NAot LS0gYS9zcmMvYmluL3NjcmlwdHMvY3JlYXRlZGIuYworKysgYi9zcmMvYmluL3NjcmlwdHMv Y3JlYXRlZGIuYwpAQCAtMzgsNiArMzgsOCBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2 W10pCiAJCXsibGMtY3R5cGUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMn0sCiAJCXsi bG9jYWxlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdsJ30sCiAJCXsibWFpbnRlbmFu Y2UtZGIiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgM30sCisJCXsibG9jYWxlLXByb3Zp ZGVyIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDR9LAorCQl7ImljdS1sb2NhbGUiLCBy ZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNX0sCiAJCXtOVUxMLCAwLCBOVUxMLCAwfQogCX07 CiAKQEAgLTYxLDYgKzYzLDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWNo YXIJICAgKmxjX2NvbGxhdGUgPSBOVUxMOwogCWNoYXIJICAgKmxjX2N0eXBlID0gTlVMTDsK IAljaGFyCSAgICpsb2NhbGUgPSBOVUxMOworCWNoYXIJICAgKmxvY2FsZV9wcm92aWRlciA9 IE5VTEw7CisJY2hhcgkgICAqaWN1X2xvY2FsZSA9IE5VTEw7CiAKIAlQUUV4cEJ1ZmZlckRh dGEgc3FsOwogCkBAIC0xMTksNiArMTIzLDEyIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKIAkJCWNhc2UgMzoKIAkJCQltYWludGVuYW5jZV9kYiA9IHBnX3N0cmR1cChvcHRh cmcpOwogCQkJCWJyZWFrOworCQkJY2FzZSA0OgorCQkJCWxvY2FsZV9wcm92aWRlciA9IHBn X3N0cmR1cChvcHRhcmcpOworCQkJCWJyZWFrOworCQkJY2FzZSA1OgorCQkJCWljdV9sb2Nh bGUgPSBwZ19zdHJkdXAob3B0YXJnKTsKKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJ ZnByaW50ZihzdGRlcnIsIF8oIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0 aW9uLlxuIiksIHByb2duYW1lKTsKIAkJCQlleGl0KDEpOwpAQCAtMjE3LDYgKzIyNywxMyBA QCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KCZzcWwsICIgTENfQ1RZUEUgIik7CiAJCWFwcGVuZFN0cmluZ0xpdGVyYWxDb25uKCZzcWws IGxjX2N0eXBlLCBjb25uKTsKIAl9CisJaWYgKGxvY2FsZV9wcm92aWRlcikKKwkJYXBwZW5k UFFFeHBCdWZmZXIoJnNxbCwgIiBMT0NBTEVfUFJPVklERVIgJXMiLCBsb2NhbGVfcHJvdmlk ZXIpOworCWlmIChpY3VfbG9jYWxlKQorCXsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJnNx bCwgIiBJQ1VfTE9DQUxFICIpOworCQlhcHBlbmRTdHJpbmdMaXRlcmFsQ29ubigmc3FsLCBp Y3VfbG9jYWxlLCBjb25uKTsKKwl9CiAKIAlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIoJnNxbCwg JzsnKTsKIApAQCAtMjczLDYgKzI5MCw5IEBAIGhlbHAoY29uc3QgY2hhciAqcHJvZ25hbWUp CiAJcHJpbnRmKF8oIiAgLWwsIC0tbG9jYWxlPUxPQ0FMRSAgICAgICAgICBsb2NhbGUgc2V0 dGluZ3MgZm9yIHRoZSBkYXRhYmFzZVxuIikpOwogCXByaW50ZihfKCIgICAgICAtLWxjLWNv bGxhdGU9TE9DQUxFICAgICAgTENfQ09MTEFURSBzZXR0aW5nIGZvciB0aGUgZGF0YWJhc2Vc biIpKTsKIAlwcmludGYoXygiICAgICAgLS1sYy1jdHlwZT1MT0NBTEUgICAgICAgIExDX0NU WVBFIHNldHRpbmcgZm9yIHRoZSBkYXRhYmFzZVxuIikpOworCXByaW50ZihfKCIgICAgICAt LWljdS1sb2NhbGU9TE9DQUxFICAgICAgSUNVIGxvY2FsZSBzZXR0aW5nIGZvciB0aGUgZGF0 YWJhc2VcbiIpKTsKKwlwcmludGYoXygiICAgICAgLS1sb2NhbGUtcHJvdmlkZXI9e2xpYmN8 aWN1fVxuIgorCQkJICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlIHBy b3ZpZGVyIGZvciB0aGUgZGF0YWJhc2UncyBkZWZhdWx0IGNvbGxhdGlvblxuIikpOwogCXBy aW50ZihfKCIgIC1PLCAtLW93bmVyPU9XTkVSICAgICAgICAgICAgZGF0YWJhc2UgdXNlciB0 byBvd24gdGhlIG5ldyBkYXRhYmFzZVxuIikpOwogCXByaW50ZihfKCIgIC1ULCAtLXRlbXBs YXRlPVRFTVBMQVRFICAgICAgdGVtcGxhdGUgZGF0YWJhc2UgdG8gY29weVxuIikpOwogCXBy aW50ZihfKCIgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24g aW5mb3JtYXRpb24sIHRoZW4gZXhpdFxuIikpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9zY3Jp cHRzL3QvMDIwX2NyZWF0ZWRiLnBsIGIvc3JjL2Jpbi9zY3JpcHRzL3QvMDIwX2NyZWF0ZWRi LnBsCmluZGV4IDYzOTI0NTQ2NmUuLjM1ZGVlYzlhOTIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v c2NyaXB0cy90LzAyMF9jcmVhdGVkYi5wbAorKysgYi9zcmMvYmluL3NjcmlwdHMvdC8wMjBf Y3JlYXRlZGIucGwKQEAgLTI1LDkgKzI1LDM3IEBACiAJcXIvc3RhdGVtZW50OiBDUkVBVEUg REFUQUJBU0UgZm9vYmFyMiBFTkNPRElORyAnTEFUSU4xJy8sCiAJJ2NyZWF0ZSBkYXRhYmFz ZSB3aXRoIGVuY29kaW5nJyk7CiAKK2lmICgkRU5We3dpdGhfaWN1fSBlcSAneWVzJykKK3sK KwkjIFRoaXMgZmFpbHMgYmVjYXVzZSB0ZW1wbGF0ZTAgdXNlcyBsaWJjIHByb3ZpZGVyIGFu ZCBoYXMgbm8gSUNVCisJIyBsb2NhbGUgc2V0LiAgSXQgd291bGQgc3VjY2VlZCBpZiB0ZW1w bGF0ZTAgdXNlZCB0aGUgaWN1CisJIyBwcm92aWRlci4gIFhYWCBNYXliZSBzcGxpdCBpbnRv IG11bHRpcGxlIHRlc3RzPworCSRub2RlLT5jb21tYW5kX2ZhaWxzKAorCQlbICdjcmVhdGVk YicsICctVCcsICd0ZW1wbGF0ZTAnLCAnLS1sb2NhbGUtcHJvdmlkZXI9aWN1JywgJ2Zvb2Jh cjQnIF0sCisJCSdjcmVhdGUgZGF0YWJhc2Ugd2l0aCBJQ1UgZmFpbHMgd2l0aG91dCBJQ1Ug bG9jYWxlIHNwZWNpZmllZCcpOworCisJJG5vZGUtPmlzc3Vlc19zcWxfbGlrZSgKKwkJWyAn Y3JlYXRlZGInLCAnLVQnLCAndGVtcGxhdGUwJywgJy0tbG9jYWxlLXByb3ZpZGVyPWljdScs ICctLWljdS1sb2NhbGU9ZW4nLCAnZm9vYmFyNScgXSwKKwkJcXIvc3RhdGVtZW50OiBDUkVB VEUgREFUQUJBU0UgZm9vYmFyNSAuKiBMT0NBTEVfUFJPVklERVIgaWN1IElDVV9MT0NBTEUg J2VuJy8sCisJCSdjcmVhdGUgZGF0YWJhc2Ugd2l0aCBJQ1UgbG9jYWxlIHNwZWNpZmllZCcp OworCisJJG5vZGUtPmNvbW1hbmRfZmFpbHMoCisJCVsgJ2NyZWF0ZWRiJywgJy1UJywgJ3Rl bXBsYXRlMCcsICctLWxvY2FsZS1wcm92aWRlcj1pY3UnLCAnLS1pY3UtbG9jYWxlPUBjb2xO dW1lcmljPWxvd2VyJywgJ2Zvb2JhclgnIF0sCisJCSdmYWlscyBmb3IgaW52YWxpZCBJQ1Ug bG9jYWxlJyk7Cit9CitlbHNlCit7CisJJG5vZGUtPmNvbW1hbmRfZmFpbHMoCisJCVsgJ2Ny ZWF0ZWRiJywgJy1UJywgJ3RlbXBsYXRlMCcsICctLWxvY2FsZS1wcm92aWRlcj1pY3UnLCAn Zm9vYmFyNCcgXSwKKwkJJ2NyZWF0ZSBkYXRhYmFzZSB3aXRoIElDVSBmYWlscyBzaW5jZSBu byBJQ1Ugc3VwcG9ydCcpOworfQorCiAkbm9kZS0+Y29tbWFuZF9mYWlscyhbICdjcmVhdGVk YicsICdmb29iYXIxJyBdLAogCSdmYWlscyBpZiBkYXRhYmFzZSBhbHJlYWR5IGV4aXN0cycp OwogCiskbm9kZS0+Y29tbWFuZF9mYWlscyhbICdjcmVhdGVkYicsICctVCcsICd0ZW1wbGF0 ZTAnLCAnLS1sb2NhbGUtcHJvdmlkZXI9eHl6JywgJ2Zvb2JhclgnIF0sCisJJ2ZhaWxzIGZv ciBpbnZhbGlkIGxvY2FsZSBwcm92aWRlcicpOworCiAjIENoZWNrIHVzZSBvZiB0ZW1wbGF0 ZXMgd2l0aCBzaGFyZWQgZGVwZW5kZW5jaWVzIGNvcGllZCBmcm9tIHRoZSB0ZW1wbGF0ZS4K IG15ICgkcmV0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlLT5wc3FsKAogCSdmb29iYXIy JywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfY29sbGF0aW9uLmRhdCBi L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfY29sbGF0aW9uLmRhdAppbmRleCA0YjU2ODI1ZDgy Li5mNzQ3MGVhZDQ5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2NvbGxh dGlvbi5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19jb2xsYXRpb24uZGF0CkBA IC0xNCw4ICsxNCw3IEBACiAKIHsgb2lkID0+ICcxMDAnLCBvaWRfc3ltYm9sID0+ICdERUZB VUxUX0NPTExBVElPTl9PSUQnLAogICBkZXNjciA9PiAnZGF0YWJhc2VcJ3MgZGVmYXVsdCBj b2xsYXRpb24nLAotICBjb2xsbmFtZSA9PiAnZGVmYXVsdCcsIGNvbGxwcm92aWRlciA9PiAn ZCcsIGNvbGxlbmNvZGluZyA9PiAnLTEnLAotICBjb2xsY29sbGF0ZSA9PiAnJywgY29sbGN0 eXBlID0+ICcnIH0sCisgIGNvbGxuYW1lID0+ICdkZWZhdWx0JywgY29sbHByb3ZpZGVyID0+ ICdkJywgY29sbGVuY29kaW5nID0+ICctMScgfSwKIHsgb2lkID0+ICc5NTAnLCBvaWRfc3lt Ym9sID0+ICdDX0NPTExBVElPTl9PSUQnLAogICBkZXNjciA9PiAnc3RhbmRhcmQgQyBjb2xs YXRpb24nLAogICBjb2xsbmFtZSA9PiAnQycsIGNvbGxwcm92aWRlciA9PiAnYycsIGNvbGxl bmNvZGluZyA9PiAnLTEnLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19j b2xsYXRpb24uaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfY29sbGF0aW9uLmgKaW5kZXgg ODc2M2RkNDA4MC4uYzY0MmMzYmI5NSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19jb2xsYXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2NvbGxhdGlv bi5oCkBAIC00MCw4ICs0MCw5IEBAIENBVEFMT0cocGdfY29sbGF0aW9uLDM0NTYsQ29sbGF0 aW9uUmVsYXRpb25JZCkKIAlib29sCQljb2xsaXNkZXRlcm1pbmlzdGljIEJLSV9ERUZBVUxU KHQpOwogCWludDMyCQljb2xsZW5jb2Rpbmc7CS8qIGVuY29kaW5nIGZvciB0aGlzIGNvbGxh dGlvbjsgLTEgPSAiYWxsIiAqLwogI2lmZGVmIENBVEFMT0dfVkFSTEVOCQkJLyogdmFyaWFi bGUtbGVuZ3RoIGZpZWxkcyBzdGFydCBoZXJlICovCi0JdGV4dAkJY29sbGNvbGxhdGUgQktJ X0ZPUkNFX05PVF9OVUxMOwkJLyogTENfQ09MTEFURSBzZXR0aW5nICovCi0JdGV4dAkJY29s bGN0eXBlIEJLSV9GT1JDRV9OT1RfTlVMTDsJCS8qIExDX0NUWVBFIHNldHRpbmcgKi8KKwl0 ZXh0CQljb2xsY29sbGF0ZSBCS0lfREVGQVVMVChfbnVsbF8pOwkvKiBMQ19DT0xMQVRFIHNl dHRpbmcgKi8KKwl0ZXh0CQljb2xsY3R5cGUgQktJX0RFRkFVTFQoX251bGxfKTsJCS8qIExD X0NUWVBFIHNldHRpbmcgKi8KKwl0ZXh0CQljb2xsaWN1bG9jYWxlIEJLSV9ERUZBVUxUKF9u dWxsXyk7CS8qIElDVSBsb2NhbGUgSUQgKi8KIAl0ZXh0CQljb2xsdmVyc2lvbiBCS0lfREVG QVVMVChfbnVsbF8pOwkvKiBwcm92aWRlci1kZXBlbmRlbnQKIAkJCQkJCQkJCQkJCQkgKiB2 ZXJzaW9uIG9mIGNvbGxhdGlvbgogCQkJCQkJCQkJCQkJCSAqIGRhdGEgKi8KQEAgLTY2LDYg KzY3LDIwIEBAIERFQ0xBUkVfVU5JUVVFX0lOREVYX1BLRVkocGdfY29sbGF0aW9uX29pZF9p bmRleCwgMzA4NSwgQ29sbGF0aW9uT2lkSW5kZXhJZCwgb24KICNkZWZpbmUgQ09MTFBST1ZJ REVSX0lDVQkJJ2knCiAjZGVmaW5lIENPTExQUk9WSURFUl9MSUJDCQknYycKIAorc3RhdGlj IGlubGluZSBjb25zdCBjaGFyICoKK2NvbGxwcm92aWRlcl9uYW1lKGNoYXIgYykKK3sKKwlz d2l0Y2ggKGMpCisJeworCQljYXNlIENPTExQUk9WSURFUl9JQ1U6CisJCQlyZXR1cm4gImlj dSI7CisJCWNhc2UgQ09MTFBST1ZJREVSX0xJQkM6CisJCQlyZXR1cm4gImxpYmMiOworCQlk ZWZhdWx0OgorCQkJcmV0dXJuICI/Pz8iOworCX0KK30KKwogI2VuZGlmCQkJCQkJCS8qIEVY UE9TRV9UT19DTElFTlRfQ09ERSAqLwogCiAKQEAgLTc1LDYgKzkwLDcgQEAgZXh0ZXJuIE9p ZAlDb2xsYXRpb25DcmVhdGUoY29uc3QgY2hhciAqY29sbG5hbWUsIE9pZCBjb2xsbmFtZXNw YWNlLAogCQkJCQkJCWJvb2wgY29sbGlzZGV0ZXJtaW5pc3RpYywKIAkJCQkJCQlpbnQzMiBj b2xsZW5jb2RpbmcsCiAJCQkJCQkJY29uc3QgY2hhciAqY29sbGNvbGxhdGUsIGNvbnN0IGNo YXIgKmNvbGxjdHlwZSwKKwkJCQkJCQljb25zdCBjaGFyICpjb2xsaWN1bG9jYWxlLAogCQkJ CQkJCWNvbnN0IGNoYXIgKmNvbGx2ZXJzaW9uLAogCQkJCQkJCWJvb2wgaWZfbm90X2V4aXN0 cywKIAkJCQkJCQlib29sIHF1aWV0KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfZGF0YWJhc2UuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19kYXRhYmFzZS5k YXQKaW5kZXggZTdlNDJkNjAyMy4uNWZlZWRmZjdiZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19kYXRhYmFzZS5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19kYXRhYmFzZS5kYXQKQEAgLTE0LDkgKzE0LDkgQEAKIAogeyBvaWQgPT4gJzEnLCBvaWRf c3ltYm9sID0+ICdUZW1wbGF0ZURiT2lkJywKICAgZGVzY3IgPT4gJ2RlZmF1bHQgdGVtcGxh dGUgZm9yIG5ldyBkYXRhYmFzZXMnLAotICBkYXRuYW1lID0+ICd0ZW1wbGF0ZTEnLCBlbmNv ZGluZyA9PiAnRU5DT0RJTkcnLCBkYXRpc3RlbXBsYXRlID0+ICd0JywKKyAgZGF0bmFtZSA9 PiAndGVtcGxhdGUxJywgZW5jb2RpbmcgPT4gJ0VOQ09ESU5HJywgZGF0bG9jcHJvdmlkZXIg PT4gJ0xPQ0FMRV9QUk9WSURFUicsIGRhdGlzdGVtcGxhdGUgPT4gJ3QnLAogICBkYXRhbGxv d2Nvbm4gPT4gJ3QnLCBkYXRjb25ubGltaXQgPT4gJy0xJywgZGF0ZnJvemVueGlkID0+ICcw JywKICAgZGF0bWlubXhpZCA9PiAnMScsIGRhdHRhYmxlc3BhY2UgPT4gJ3BnX2RlZmF1bHQn LCBkYXRjb2xsYXRlID0+ICdMQ19DT0xMQVRFJywKLSAgZGF0Y3R5cGUgPT4gJ0xDX0NUWVBF JywgZGF0YWNsID0+ICdfbnVsbF8nIH0sCisgIGRhdGN0eXBlID0+ICdMQ19DVFlQRScsIGRh dGljdWxvY2FsZSA9PiAnSUNVX0xPQ0FMRScsIGRhdGFjbCA9PiAnX251bGxfJyB9LAogCiBd CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2RhdGFiYXNlLmggYi9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX2RhdGFiYXNlLmgKaW5kZXggNzZhZGJkNGFhZC4uYTlmNGE4 MDcxZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19kYXRhYmFzZS5oCisr KyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfZGF0YWJhc2UuaApAQCAtNDAsNiArNDAsOSBA QCBDQVRBTE9HKHBnX2RhdGFiYXNlLDEyNjIsRGF0YWJhc2VSZWxhdGlvbklkKSBCS0lfU0hB UkVEX1JFTEFUSU9OIEJLSV9ST1dUWVBFX09JRAogCS8qIGNoYXJhY3RlciBlbmNvZGluZyAq LwogCWludDMyCQllbmNvZGluZzsKIAorCS8qIGxvY2FsZSBwcm92aWRlciwgc2VlIHBnX2Nv bGxhdGlvbi5jb2xscHJvdmlkZXIgKi8KKwljaGFyCQlkYXRsb2Nwcm92aWRlcjsKKwogCS8q IGFsbG93ZWQgYXMgQ1JFQVRFIERBVEFCQVNFIHRlbXBsYXRlPyAqLwogCWJvb2wJCWRhdGlz dGVtcGxhdGU7CiAKQEAgLTY1LDYgKzY4LDkgQEAgQ0FUQUxPRyhwZ19kYXRhYmFzZSwxMjYy LERhdGFiYXNlUmVsYXRpb25JZCkgQktJX1NIQVJFRF9SRUxBVElPTiBCS0lfUk9XVFlQRV9P SUQKIAkvKiBMQ19DVFlQRSBzZXR0aW5nICovCiAJdGV4dAkJZGF0Y3R5cGUgQktJX0ZPUkNF X05PVF9OVUxMOwogCisJLyogSUNVIGxvY2FsZSBJRCAqLworCXRleHQJCWRhdGljdWxvY2Fs ZTsKKwogCS8qIHByb3ZpZGVyLWRlcGVuZGVudCB2ZXJzaW9uIG9mIGNvbGxhdGlvbiBkYXRh ICovCiAJdGV4dAkJZGF0Y29sbHZlcnNpb24gQktJX0RFRkFVTFQoX251bGxfKTsKIApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmggYi9zcmMvaW5jbHVkZS91 dGlscy9wZ19sb2NhbGUuaAppbmRleCAzMGU0MjNhZjBlLi45YjE1OGYyNGEwIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaAorKysgYi9zcmMvaW5jbHVkZS91 dGlscy9wZ19sb2NhbGUuaApAQCAtMTAzLDYgKzEwMywxMSBAQCBzdHJ1Y3QgcGdfbG9jYWxl X3N0cnVjdAogCiB0eXBlZGVmIHN0cnVjdCBwZ19sb2NhbGVfc3RydWN0ICpwZ19sb2NhbGVf dDsKIAorZXh0ZXJuIHN0cnVjdCBwZ19sb2NhbGVfc3RydWN0IGRlZmF1bHRfbG9jYWxlOwor CitleHRlcm4gdm9pZCBtYWtlX2ljdV9jb2xsYXRvcihjb25zdCBjaGFyICppY3Vsb2NzdHIs CisJCQkJCQkJICBzdHJ1Y3QgcGdfbG9jYWxlX3N0cnVjdCAqcmVzdWx0cCk7CisKIGV4dGVy biBwZ19sb2NhbGVfdCBwZ19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24oT2lkIGNvbGxpZCk7 CiAKIGV4dGVybiBjaGFyICpnZXRfY29sbGF0aW9uX2FjdHVhbF92ZXJzaW9uKGNoYXIgY29s bHByb3ZpZGVyLCBjb25zdCBjaGFyICpjb2xsY29sbGF0ZSk7CmRpZmYgLS1naXQgYS9zcmMv dGVzdC9NYWtlZmlsZSBiL3NyYy90ZXN0L01ha2VmaWxlCmluZGV4IDQ2Mjc1OTE1ZmYuLjY5 ZWYwNzRkNzUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L01ha2VmaWxlCisrKyBiL3NyYy90ZXN0 L01ha2VmaWxlCkBAIC0xNCw2ICsxNCwxMCBAQCBpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9z cmMvTWFrZWZpbGUuZ2xvYmFsCiAKIFNVQkRJUlMgPSBwZXJsIHJlZ3Jlc3MgaXNvbGF0aW9u IG1vZHVsZXMgYXV0aGVudGljYXRpb24gcmVjb3Zlcnkgc3Vic2NyaXB0aW9uCiAKK2lmZXEg KCQod2l0aF9pY3UpLHllcykKK1NVQkRJUlMgKz0gaWN1CitlbmRpZgorCiAjIFRlc3Qgc3Vp dGVzIHRoYXQgYXJlIG5vdCBzYWZlIGJ5IGRlZmF1bHQgYnV0IGNhbiBiZSBydW4gaWYgc2Vs ZWN0ZWQKICMgYnkgdGhlIHVzZXIgdmlhIHRoZSB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBsaXN0 IGluIHZhcmlhYmxlCiAjIFBHX1RFU1RfRVhUUkE6CkBAIC0zNyw3ICs0MSw3IEBAIGVuZGlm CiAjIGNsZWFuIiBldGMgdG8gcmVjdXJzZSBpbnRvIHRoZW0uICAoV2UgbXVzdCBmaWx0ZXIg b3V0IHRob3NlIHRoYXQgd2UKICMgaGF2ZSBjb25kaXRpb25hbGx5IGluY2x1ZGVkIGludG8g U1VCRElSUyBhYm92ZSwgZWxzZSB0aGVyZSB3aWxsIGJlCiAjIG1ha2UgY29uZnVzaW9uLikK LUFMV0FZU19TVUJESVJTID0gJChmaWx0ZXItb3V0ICQoU1VCRElSUyksZXhhbXBsZXMga2Vy YmVyb3MgbGRhcCBzc2wpCitBTFdBWVNfU1VCRElSUyA9ICQoZmlsdGVyLW91dCAkKFNVQkRJ UlMpLGV4YW1wbGVzIGtlcmJlcm9zIGljdSBsZGFwIHNzbCkKIAogIyBXZSB3YW50IHRvIHJl Y3Vyc2UgdG8gYWxsIHN1YmRpcnMgZm9yIGFsbCBzdGFuZGFyZCB0YXJnZXRzLCBleGNlcHQg dGhhdAogIyBpbnN0YWxsY2hlY2sgYW5kIGluc3RhbGwgc2hvdWxkIG5vdCByZWN1cnNlIGlu dG8gdGhlIHN1YmRpcmVjdG9yeSAibW9kdWxlcyIuCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9p Y3UvLmdpdGlnbm9yZSBiL3NyYy90ZXN0L2ljdS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjg3MWU5NDNkNTAKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvdGVzdC9pY3UvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKKyMgR2VuZXJhdGVk IGJ5IHRlc3Qgc3VpdGUKKy90bXBfY2hlY2svCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9pY3Uv TWFrZWZpbGUgYi9zcmMvdGVzdC9pY3UvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uZTMwZjVlOTUyNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90 ZXN0L2ljdS9NYWtlZmlsZQpAQCAtMCwwICsxLDI1IEBACisjLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIworIyBNYWtlZmlsZSBmb3Igc3JjL3Rlc3QvaWN1CisjCisjIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorIyBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZl cnNpdHkgb2YgQ2FsaWZvcm5pYQorIworIyBzcmMvdGVzdC9pY3UvTWFrZWZpbGUKKyMKKyMt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisKK3N1YmRpciA9IHNyYy90ZXN0L2ljdQordG9wX2J1aWxk ZGlyID0gLi4vLi4vLi4KK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5n bG9iYWwKKworZXhwb3J0IHdpdGhfaWN1CisKK2NoZWNrOgorCSQocHJvdmVfY2hlY2spCisK K2luc3RhbGxjaGVjazoKKwkkKHByb3ZlX2luc3RhbGxjaGVjaykKKworY2xlYW4gZGlzdGNs ZWFuIG1haW50YWluZXItY2xlYW46CisJcm0gLXJmIHRtcF9jaGVjawpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvaWN1L1JFQURNRSBiL3NyYy90ZXN0L2ljdS9SRUFETUUKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uY2ZjOTM1M2RmZgotLS0gL2Rldi9udWxsCisr KyBiL3NyYy90ZXN0L2ljdS9SRUFETUUKQEAgLTAsMCArMSwyNyBAQAorc3JjL3Rlc3QvaWN1 L1JFQURNRQorCitSZWdyZXNzaW9uIHRlc3RzIGZvciBJQ1UgZnVuY3Rpb25hbGl0eQorPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkaXJlY3Rvcnkg Y29udGFpbnMgYSB0ZXN0IHN1aXRlIGZvciBJQ1UgZnVuY3Rpb25hbGl0eS4KKworUnVubmlu ZyB0aGUgdGVzdHMKKz09PT09PT09PT09PT09PT09CisKK05PVEU6IFlvdSBtdXN0IGhhdmUg Z2l2ZW4gdGhlIC0tZW5hYmxlLXRhcC10ZXN0cyBhcmd1bWVudCB0byBjb25maWd1cmUuCitB bHNvLCB0byB1c2UgIm1ha2UgaW5zdGFsbGNoZWNrIiwgeW91IG11c3QgaGF2ZSBidWlsdCBh bmQgaW5zdGFsbGVkCitjb250cmliL2hzdG9yZSBpbiBhZGRpdGlvbiB0byB0aGUgY29yZSBj b2RlLgorCitSdW4KKyAgICBtYWtlIGNoZWNrCitvcgorICAgIG1ha2UgaW5zdGFsbGNoZWNr CitZb3UgY2FuIHVzZSAibWFrZSBpbnN0YWxsY2hlY2siIGlmIHlvdSBwcmV2aW91c2x5IGRp ZCAibWFrZSBpbnN0YWxsIi4KK0luIHRoYXQgY2FzZSwgdGhlIGNvZGUgaW4gdGhlIGluc3Rh bGxhdGlvbiB0cmVlIGlzIHRlc3RlZC4gIFdpdGgKKyJtYWtlIGNoZWNrIiwgYSB0ZW1wb3Jh cnkgaW5zdGFsbGF0aW9uIHRyZWUgaXMgYnVpbHQgZnJvbSB0aGUgY3VycmVudAorc291cmNl cyBhbmQgdGhlbiB0ZXN0ZWQuCisKK0VpdGhlciB3YXksIHRoaXMgdGVzdCBpbml0aWFsaXpl cywgc3RhcnRzLCBhbmQgc3RvcHMgc2V2ZXJhbCB0ZXN0IFBvc3RncmVzCitjbHVzdGVycy4K KworU2VlIHNyYy90ZXN0L3BlcmwvUkVBRE1FIGZvciBtb3JlIGluZm8gYWJvdXQgcnVubmlu ZyB0aGVzZSB0ZXN0cy4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2ljdS90LzAxMF9kYXRhYmFz ZS5wbCBiL3NyYy90ZXN0L2ljdS90LzAxMF9kYXRhYmFzZS5wbApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwLi40Y2M4OTA3YjQyCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL3Rlc3QvaWN1L3QvMDEwX2RhdGFiYXNlLnBsCkBAIC0wLDAgKzEsNTggQEAKKyMgQ29w eXJpZ2h0IChjKSAyMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNs dXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsK KworaWYgKCRFTlZ7d2l0aF9pY3V9IG5lICd5ZXMnKQoreworCXBsYW4gc2tpcF9hbGwgPT4g J0lDVSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnVpbGQnOworfQorCitteSAkbm9kZTEgPSBQ b3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGUxJyk7Ciskbm9kZTEtPmluaXQ7 Ciskbm9kZTEtPnN0YXJ0OworCiskbm9kZTEtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCXF7 Q1JFQVRFIERBVEFCQVNFIGRiaWN1IExPQ0FMRV9QUk9WSURFUiBpY3UgTE9DQUxFICdDJyBJ Q1VfTE9DQUxFICdlbi11LWtmLXVwcGVyJyBURU1QTEFURSB0ZW1wbGF0ZTB9KTsKKworJG5v ZGUxLT5zYWZlX3BzcWwoJ2RiaWN1JywKK3F7CitDUkVBVEUgQ09MTEFUSU9OIHVwcGVyZmly c3QgKHByb3ZpZGVyID0gaWN1LCBsb2NhbGUgPSAnZW4tdS1rZi11cHBlcicpOworQ1JFQVRF IFRBQkxFIGljdSAoZGVmIHRleHQsIGVuIHRleHQgQ09MTEFURSAiZW4teC1pY3UiLCB1cGZp cnN0IHRleHQgQ09MTEFURSB1cHBlcmZpcnN0KTsKK0lOU0VSVCBJTlRPIGljdSBWQUxVRVMg KCdhJywgJ2EnLCAnYScpLCAoJ2InLCAnYicsICdiJyksICgnQScsICdBJywgJ0EnKSwgKCdC JywgJ0InLCAnQicpOworfSk7CisKK2lzKCRub2RlMS0+c2FmZV9wc3FsKCdkYmljdScsIHF7 U0VMRUNUIGRlZiBGUk9NIGljdSBPUkRFUiBCWSBkZWZ9KSwKKwlxcShBCithCitCCitiKSwK Kwknc29ydCBieSBkYXRhYmFzZSBkZWZhdWx0IGxvY2FsZScpOworCitpcygkbm9kZTEtPnNh ZmVfcHNxbCgnZGJpY3UnLCBxe1NFTEVDVCBkZWYgRlJPTSBpY3UgT1JERVIgQlkgZGVmIENP TExBVEUgImVuLXgtaWN1In0pLAorCXFxKGEKK0EKK2IKK0IpLAorCSdzb3J0IGJ5IGV4cGxp Y2l0IGNvbGxhdGlvbiBzdGFuZGFyZCcpOworCitpcygkbm9kZTEtPnNhZmVfcHNxbCgnZGJp Y3UnLCBxe1NFTEVDVCBkZWYgRlJPTSBpY3UgT1JERVIgQlkgZW4gQ09MTEFURSB1cHBlcmZp cnN0fSksCisJcXEoQQorYQorQgorYiksCisJJ3NvcnQgYnkgZXhwbGljaXQgY29sbGF0aW9u IHVwcGVyIGZpcnN0Jyk7CisKKworIyBUZXN0IGVycm9yIGNhc2VzIGluIENSRUFURSBEQVRB QkFTRSBpbnZvbHZpbmcgbG9jYWxlLXJlbGF0ZWQgb3B0aW9ucworCitteSAoJHJldCwgJHN0 ZG91dCwgJHN0ZGVycikgPSAkbm9kZTEtPnBzcWwoJ3Bvc3RncmVzJywKKwlxe0NSRUFURSBE QVRBQkFTRSBkYmljdSBMT0NBTEVfUFJPVklERVIgaWN1IFRFTVBMQVRFIHRlbXBsYXRlMH0p OworaXNudCgkcmV0LCAwLCAiSUNVIGxvY2FsZSBtdXN0IGJlIHNwZWNpZmllZCBmb3IgSUNV IHByb3ZpZGVyOiBleGl0IGNvZGUgbm90IDAiKTsKK2xpa2UoJHN0ZGVyciwgcXIvRVJST1I6 ICBJQ1UgbG9jYWxlIG11c3QgYmUgc3BlY2lmaWVkLywgIklDVSBsb2NhbGUgbXVzdCBiZSBz cGVjaWZpZWQgZm9yIElDVSBwcm92aWRlcjogZXJyb3IgbWVzc2FnZSIpOworCisKK2RvbmVf dGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb2xs YXRlLmljdS51dGY4Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29sbGF0ZS5p Y3UudXRmOC5vdXQKaW5kZXggOTY5OWNhMTZjZi4uZDRjOGM2ZGUzOCAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb2xsYXRlLmljdS51dGY4Lm91dAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbGxhdGUuaWN1LnV0Zjgub3V0CkBAIC0xMDI5 LDE0ICsxMDI5LDEyIEBAIENSRUFURSBDT0xMQVRJT04gdGVzdDAgRlJPTSAiQyI7IC0tIGZh aWwsIGR1cGxpY2F0ZSBuYW1lCiBFUlJPUjogIGNvbGxhdGlvbiAidGVzdDAiIGFscmVhZHkg ZXhpc3RzCiBkbyAkJAogQkVHSU4KLSAgRVhFQ1VURSAnQ1JFQVRFIENPTExBVElPTiB0ZXN0 MSAocHJvdmlkZXIgPSBpY3UsIGxjX2NvbGxhdGUgPSAnIHx8Ci0gICAgICAgICAgcXVvdGVf bGl0ZXJhbChjdXJyZW50X3NldHRpbmcoJ2xjX2NvbGxhdGUnKSkgfHwKLSAgICAgICAgICAn LCBsY19jdHlwZSA9ICcgfHwKLSAgICAgICAgICBxdW90ZV9saXRlcmFsKGN1cnJlbnRfc2V0 dGluZygnbGNfY3R5cGUnKSkgfHwgJyk7JzsKKyAgRVhFQ1VURSAnQ1JFQVRFIENPTExBVElP TiB0ZXN0MSAocHJvdmlkZXIgPSBpY3UsIGxvY2FsZSA9ICcgfHwKKyAgICAgICAgICBxdW90 ZV9saXRlcmFsKGN1cnJlbnRfc2V0dGluZygnbGNfY29sbGF0ZScpKSB8fCAnKTsnOwogRU5E CiAkJDsKLUNSRUFURSBDT0xMQVRJT04gdGVzdDMgKHByb3ZpZGVyID0gaWN1LCBsY19jb2xs YXRlID0gJ2VuX1VTLnV0ZjgnKTsgLS0gZmFpbCwgbmVlZCBsY19jdHlwZQotRVJST1I6ICBw YXJhbWV0ZXIgImxjX2N0eXBlIiBtdXN0IGJlIHNwZWNpZmllZAorQ1JFQVRFIENPTExBVElP TiB0ZXN0MyAocHJvdmlkZXIgPSBpY3UsIGxjX2NvbGxhdGUgPSAnZW5fVVMudXRmOCcpOyAt LSBmYWlsLCBuZWVkcyAibG9jYWxlIgorRVJST1I6ICBwYXJhbWV0ZXIgImxvY2FsZSIgbXVz dCBiZSBzcGVjaWZpZWQKIENSRUFURSBDT0xMQVRJT04gdGVzdHggKHByb3ZpZGVyID0gaWN1 LCBsb2NhbGUgPSAnbm9uc2Vuc2UnKTsgLyogbmV2ZXIgZmFpbHMgd2l0aCBJQ1UgKi8gIERS T1AgQ09MTEFUSU9OIHRlc3R4OwogQ1JFQVRFIENPTExBVElPTiB0ZXN0NCBGUk9NIG5vbnNl bnNlOwogRVJST1I6ICBjb2xsYXRpb24gIm5vbnNlbnNlIiBmb3IgZW5jb2RpbmcgIlVURjgi IGRvZXMgbm90IGV4aXN0CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb2xs YXRlLmljdS51dGY4LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvbGxhdGUuaWN1LnV0 Zjguc3FsCmluZGV4IDI0MmE3Y2U2YjcuLmIwZGRjN2RiNDQgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2NvbGxhdGUuaWN1LnV0Zjguc3FsCisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2NvbGxhdGUuaWN1LnV0Zjguc3FsCkBAIC0zNjYsMTMgKzM2NiwxMSBAQCBD UkVBVEUgU0NIRU1BIHRlc3Rfc2NoZW1hOwogQ1JFQVRFIENPTExBVElPTiB0ZXN0MCBGUk9N ICJDIjsgLS0gZmFpbCwgZHVwbGljYXRlIG5hbWUKIGRvICQkCiBCRUdJTgotICBFWEVDVVRF ICdDUkVBVEUgQ09MTEFUSU9OIHRlc3QxIChwcm92aWRlciA9IGljdSwgbGNfY29sbGF0ZSA9 ICcgfHwKLSAgICAgICAgICBxdW90ZV9saXRlcmFsKGN1cnJlbnRfc2V0dGluZygnbGNfY29s bGF0ZScpKSB8fAotICAgICAgICAgICcsIGxjX2N0eXBlID0gJyB8fAotICAgICAgICAgIHF1 b3RlX2xpdGVyYWwoY3VycmVudF9zZXR0aW5nKCdsY19jdHlwZScpKSB8fCAnKTsnOworICBF WEVDVVRFICdDUkVBVEUgQ09MTEFUSU9OIHRlc3QxIChwcm92aWRlciA9IGljdSwgbG9jYWxl ID0gJyB8fAorICAgICAgICAgIHF1b3RlX2xpdGVyYWwoY3VycmVudF9zZXR0aW5nKCdsY19j b2xsYXRlJykpIHx8ICcpOyc7CiBFTkQKICQkOwotQ1JFQVRFIENPTExBVElPTiB0ZXN0MyAo cHJvdmlkZXIgPSBpY3UsIGxjX2NvbGxhdGUgPSAnZW5fVVMudXRmOCcpOyAtLSBmYWlsLCBu ZWVkIGxjX2N0eXBlCitDUkVBVEUgQ09MTEFUSU9OIHRlc3QzIChwcm92aWRlciA9IGljdSwg bGNfY29sbGF0ZSA9ICdlbl9VUy51dGY4Jyk7IC0tIGZhaWwsIG5lZWRzICJsb2NhbGUiCiBD UkVBVEUgQ09MTEFUSU9OIHRlc3R4IChwcm92aWRlciA9IGljdSwgbG9jYWxlID0gJ25vbnNl bnNlJyk7IC8qIG5ldmVyIGZhaWxzIHdpdGggSUNVICovICBEUk9QIENPTExBVElPTiB0ZXN0 eDsKIAogQ1JFQVRFIENPTExBVElPTiB0ZXN0NCBGUk9NIG5vbnNlbnNlOwoKYmFzZS1jb21t aXQ6IDcwNWUyMGY4NTUwYzBlOGU0N2MwYjZiMjBiNWY1ZmZkNmZmZDllMzMKLS0gCjIuMzUu MQoK --------------ntZR9akjm4y5J00jSs4GfziJ--