Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w808W-0007Fa-1d for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2026 18:17:54 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w808U-001nJG-15 for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2026 18:17:50 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w808T-001nJ8-0E for pgsql-hackers@lists.postgresql.org; Wed, 01 Apr 2026 18:17:50 +0000 Received: from lahtoruutu.iki.fi ([2a0b:5c81:1c1::37]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1w808A-000000003Ou-2UTw for pgsql-hackers@postgresql.org; Wed, 01 Apr 2026 18:17:48 +0000 Received: from [10.0.2.15] (unknown [130.41.208.1]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4fmCr92RWlz49PtJ; Wed, 01 Apr 2026 21:17:13 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1775067437; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=p2xWAfPcOOlMf/OdSLZA55H3SOEGRLWiCH5iABm6esc=; b=EwMmOM+DhkE+r9vKl7WM7nO6EO2WUT4MRe1lsPNIBomOPyP0ubJLANj5AeP9qoF6QjODxC cXOAQvJuEcDilbPMZ/oYONlwR3iYQfStlmiys79vbu/P5Ym8bD+bd09KVaSxV1UMn67x6i NuPOK5N2cXsoJtW2i0bg+PmDzJxr4Ixqwa3lLJZKyxg0jlLURaKakhpu6kGi6o5fy7kJcV CyMsQp+VYY6AffhIAKzDPfBgpWaGjXm6cBsqP2hNCOY55i5EuqwL07Tm7uNpxg9ZoRUMuu kWC2ZJVx5vXhn5qC26q2VYuVkuGOLWadOrqbUhHmY30SYmn4voOYA1838plNrw== ARC-Seal: i=1; a=rsa-sha256; d=iki.fi; s=lahtoruutu; cv=none; t=1775067437; b=FOeXMTumg+aHxcXXWBbl4r5lI1diV0BpmoBR98DVHjFNiMl/DkYu+BjlHckxlJJ33G0oBi 560jGsLcxF0Gb3P7YfNjdseSIShFHDn0eLaFfMHNrUqLCM/PzdABA92dO37O6xPn5b6yqV DflmtAeWYVzX3gwpSRZYy0vBv5MVz4mmumuCbXOQPUZhrLS3uARqLxsOgf2Ws/2iyAmFhK bQ+P5L4qj7b3+CxvJo8u4lBNKXOClSJMt4F1LmSyL4i/Ox2UOqqm5wlzPEz9z/vjm9+gAC BZR3T5nDsWmVSSV7JiYhNbxJrWyGgM7PZW69nOWXdq6wm33eWYaClYsQb6HXaA== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1775067437; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=p2xWAfPcOOlMf/OdSLZA55H3SOEGRLWiCH5iABm6esc=; b=ToevcZsSDLcFinLYOZDCYpiDOiBO7e42MOGIxBH8lykj8ec0tP3zCfg3X+gnbU7cBJ50Bo WzVnBk7SjJDfDYYmEHy0YaoSwphs/F0bD3OMNN1fI1kRsdCJFP0H6IPMUpIPotFYNzIFaj Ao+u76E7XdFawU2S8wgMM+cGf6H7hucZf8k9hAnwrAzM6AisVPbTmAPjGM4b8lD3zWye/+ OOkftZ6X8ERMZt8erEVX4bdmgCF3yxmiIzJoQJhGW0phQKx9yneB5R0f+bepVuz8WoAP/3 Gm1zEYvIF1YB4fkXSg+gXFbG0IPxsWxYyQyLG41V/wAJuUIjYO+DcBIjJvVjeQ== Content-Type: multipart/mixed; boundary="------------cltwtZYaOf76t571xokamZd0" Message-ID: <9d919bd9-94dd-4bda-8ccf-ebced4178c53@iki.fi> Date: Wed, 1 Apr 2026 21:17:12 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Better shared data structure management and resizable shared data structures To: Ashutosh Bapat Cc: Robert Haas , Andres Freund , pgsql-hackers , chaturvedipalak1911@gmail.com References: <8a6799be-bd42-49fb-8914-856c97bb1977@iki.fi> <113724ab-0028-493f-9605-6e8570f0939f@iki.fi> <791c3f18-f4de-4d84-ac6b-c7ccc074dd38@iki.fi> Content-Language: en-US From: Heikki Linnakangas In-Reply-To: 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. --------------cltwtZYaOf76t571xokamZd0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Yet another version attached (also available at: https://github.com/hlinnaka/postgres/tree/shmem-init-refactor-9). The main change is the shape of the ShmemRequest*() calls: On 27/03/2026 02:51, Heikki Linnakangas wrote: > Another idea is to use a macro to hide that from pgindent, which would > make the calls little less verbose anyway: > > #define ShmemRequestStruct(desc, ...) ShmemRequestStructWithOpts(desc, > &(ShmemRequestStructOpts) { __VA_ARGS__ }) > > Then the call would be simply: > > ShmemRequestStruct(&pgssSharedStateDesc, > .name = "pg_stat_statements", > .size = sizeof(pgssSharedState), > .ptr = (void **) &pgss, > ); I went with that approach. We're already doing something similar with XL_ROUTINE in xlogreader.h: #define XL_ROUTINE(...) &(XLogReaderRoutine){__VA_ARGS__} The calls look like this: xlogreader = XLogReaderAllocate(wal_segment_size, NULL, XL_ROUTINE(.page_read = &XLogPageRead, .segment_open = NULL, .segment_close = wal_segment_close), private); If we followed that example, ShmemRequestStruct() calls would look like this: ShmemRequestStruct(&pgssSharedStateDesc, SHMEM_STRUCT_OPTS(.name = "pg_stat_statements", .size = sizeof(pgssSharedState), .ptr = (void **) &pgss, ); However, I don't like the deep indentation, it feels like the important stuff is buried to the right. And pgindent insists on that. So I went with the proposal I quoted above, turning ShmemRequestStruct(...) itself into a macro. If you need more complex options setup, you can set up the struct without the macro and call ShmemRequestStructWithOpts() directly, but so far all of the callers can use the macro. Ashutosh, I think I've addressed most of your comments so far. I'm replying to just a few of them here that might need more discussion: > > +} shmem_startup_state; > > This isn't just startup state since the backend can toggle between > DONE and LATE_ATTACH_OR_INIT states after the startup. Probably > "shmem_state" would be a better name. Renamed to "shmem_request_state". And renamed "LATE_ATTACH_OR_INIT" to "AFTER_STARTUP_ATTACH_OR_INIT" to match the terminology I used elsewhere. I'm still not entirely happy with this state machine. It seems useful to have it for sanity checking, but it still feels a little unclear what state you're in at different points in the code, and as an aesthetic thing, the whole enum feels too prominent given that it's just for sanity checks. > + ShmemStructDesc *desc = area->desc; > + > + AttachOrInit(desc, false, true); > + } > + list_free(requested_shmem_areas); > + requested_shmem_areas = NIL; > > If we pop all the nodes from the list, then the list should be NIL > right? Why do we need to free it? > > + else if (!init_allowed) > + { > > For the sake of documentation and sanity, I would add > Assert(!index_entry) here, possibly with a comment. Otherwise it feels > like we might be leaving a half-initialized entry in the hash table. > > What if attach_allowed is false and the entry is not found? Should we > throw an error in that case too? It would be foolish to call > AttachOrInit with both init_allowed and attach_allowed set to false, > but the API allows it and we should check for that. > > It feels like we should do something about the arguments. The function > is hard to read. init_allowed is actually the action the caller wants > to take if the entry is not found, and attach_allowed is the action > the caller wants to take if the entry is found. > > Also explain in the comment what does attach mean here especially in > case of fixed sized structures. I renamed it to AttachOrInitShmemIndexEntry, and the args to 'may_init' and 'may_attach'. But more importantly I added comments to explain the different usages. Hope that helps.. On 01/04/2026 14:59, Ashutosh Bapat wrote: > 0008 > ------ > - LWLockRelease(AddinShmemInitLock); > + /* The hash table must be initialized already */ > + Assert(pgss_hash != NULL); > > Does it make sense to also Assert(pgss)? A broader question is do we > want to make it a pattern that every user of ShmemRequest*() also > Assert()s that the pointer is non-NULL in the init callback? It is a > test that the ShmemRequest*(), which is far from, init_fn is working > correctly. The function does a lot of accesses of 'pgss' so if that's NULL you'll get a crash pretty quickly. I'm not sure if the Assert(pgss_hash != NULL) is really needed either, but I'm inclined to keep it, as pgss_hash might not otherwise be accessed in the function, and there are runtime checks for it in the other functions, so if it's not initialized for some reason, things might still appear to work to some extent. I don't think I want to have that as a broader pattern though. > + /* > + * Extra space to reserve in the shared memory segment, but it's not part > + * of the struct itself. This is used for shared memory hash tables that > + * can grow beyond the initial size when more buckets are allocated. > + */ > + size_t extra_size; > > When we introduce resizable structures (where even the hash table > directly itself could be resizable), we will introduce a new field > max_size which is easy to get confused with extra_size. Maybe we can > rename extra_size to something like "auxilliary_size" to mean size of > the auxiliary parts of the structure which are not part of the main > struct itself. > > + /* > + * max_size is the estimated maximum number of hashtable entries. This is > + * not a hard limit, but the access efficiency will degrade if it is > + * exceeded substantially (since it's used to compute directory size and > + * the hash table buckets will get overfull). > + */ > + size_t max_size; > + > + /* > + * init_size is the number of hashtable entries to preallocate. For a > + * table whose maximum size is certain, this should be equal to max_size; > + * that ensures that no run-time out-of-shared-memory failures can occur. > + */ > + size_t init_size; > > Everytime I look at these two fields, I question whether those are the > number of entries (i.e. size of the hash table) or number of bytes > (size of the memory). I know it's the former, but it indicates that > something needs to be changed here, like changing the names to have > _entries instead of _size, or changing the type to int64 or some such. > Renaming to _entries would conflict with dynahash APIs since they use > _size, so maybe the latter? I hear you, but I didn't change these yet. If we go with the patches from the "Shared hash table allocations" thread, max_size and init_size will be merged into one. I'll try to settle that thread before making changes here. > /* > - * If we're in the postmaster (or a standalone backend...), set up a shmem > - * exit hook to dump the statistics to disk. > + * Set up a shmem exit hook to dump the statistics to disk on postmaster > + * (or standalone backend) exit. > */ > - if (!IsUnderPostmaster) > - on_shmem_exit(pgss_shmem_shutdown, (Datum) 0); > - > - /* > - * Done if some other process already completed our initialization. > - */ > - if (found) > - return; > + on_shmem_exit(pgss_shmem_shutdown, (Datum) 0); > Given that the structures are registered only at the startup, this > function will be called only from Postmaster, but given that the > structures can be registered and initialized after startup in any > backend, it's better to at least Assert(!IsUnderPostmaster) at the > beginning of this function. The code below is not expected to be > called in any backend too. So Assert(IsUnderPostmaster) at the > beginning of the function would be good safety catch too. Ok, added an assertion. > /* > + * Load any pre-existing statistics from file. > + * > * Note: we don't bother with locks here, because there should be no other > * processes running when this code is reached. > */ > > I was a bit worried that the code next to read stat files is being > crammed in init_fn, but given that the contents of the files are used > to initialize the shared hash table, I think this is fine. Yeah, I went through that train of thought too. Loading the file into the hash table is a kind of initialization. > 0009 > ------- > +void > +RegisterBuiltinShmemCallbacks(void) > +{ > + const ShmemCallbacks *builtin_subsystems[] = { > +#define PG_SHMEM_SUBSYSTEM(subsystem_callbacks) &subsystem_callbacks, > +#include "storage/subsystemlist.h" > +#undef PG_SHMEM_SUBSYSTEM > + }; > + > + for (int i = 0; i < lengthof(builtin_subsystems); i++) > + RegisterShmemCallbacks(builtin_subsystems[i]); > +} > + > > I don't think we need to use a separate array here, we can just call > RegisterShmemCallbacks() directly in the macro as attached. Ah, clever. > 0011 > ------ > + InjectionPointAttach("aio-process-completion-before-shared", > + "test_aio", > + "inj_io_short_read", > + NULL, > + 0); > + InjectionPointLoad("aio-process-completion-before-shared"); > + > + InjectionPointAttach("aio-worker-after-reopen", > + "test_aio", > + "inj_io_reopen", > + NULL, > + 0); > + InjectionPointLoad("aio-worker-after-reopen"); > > Attaching and loading an injection point shouldn't be part of the > shared memory initialization. It doens't feel like it should be part > of shmem_startup_hook as well. So not a fault of this patch. I am > wondering why can't it be done in the tests themselves? I think it's the same reason that's explained in the comment in test_aio_shmem_attach(): > /* > * Pre-load the injection points now, so we can call them in a critical > * section. > */ > #ifdef USE_INJECTION_POINTS > InjectionPointLoad("aio-process-completion-before-shared"); > InjectionPointLoad("aio-worker-after-reopen"); > elog(LOG, "injection point loaded"); > #endif > -void > -InitProcGlobal(void) > +static void > +ProcGlobalShmemInit(void *arg) > { I'm not sure what you meant to say here, but I did notice that there were a bunch of references to InitProcGlobal() left over in comments. Fixed those. - Heikki --------------cltwtZYaOf76t571xokamZd0 Content-Type: text/x-patch; charset=UTF-8; name="v9-0001-Test-pg_stat_statements-across-crash-restart.patch" Content-Disposition: attachment; filename*0="v9-0001-Test-pg_stat_statements-across-crash-restart.patch" Content-Transfer-Encoding: base64 RnJvbSA1NmJhMGE3MjliMDgwN2VhZmU3MDE4Yzc4MDc1NTM3NDBiZmY5NTdhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMjcgTWFyIDIwMjYgMDE6NDU6MTYgKzAyMDAK U3ViamVjdDogW1BBVENIIHY5IDAxLzE2XSBUZXN0IHBnX3N0YXRfc3RhdGVtZW50cyBhY3Jv c3MgY3Jhc2ggcmVzdGFydAoKQWRkICdwZ19zdGF0X3N0YXRlbWVudHMnIHRvIHRoZSBjcmFz aCByZXN0YXJ0IHRlc3QsIHRvIHRlc3QgdGhhdApzaGFyZWQgbWVtb3J5IGFuZCBMV0xvY2sg aW5pdGlhbGl6YXRpb24gd29ya3MgYWNyb3NzIGNyYXNoIHJlc3RhcnQgaW4KYSBsaWJyYXJ5 IGxpc3RlZCBpbiBzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMuCgpSZXZpZXdlZC1ieTogQXNo dXRvc2ggQmFwYXQgPGFzaHV0b3NoLmJhcGF0Lm9zc0BnbWFpbC5jb20+CkRpc2N1c3Npb246 IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvQ0FFeEhXNXZNMWJuZUxZ Zmcwd0dlQWE9NTJVaUozejR2S2QzQUo3Mlg4Rnc2azNLS3JnQG1haWwuZ21haWwuY29tCi0t LQogc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMTNfY3Jhc2hfcmVzdGFydC5wbCB8IDMzICsrKysr KysrKysrKysrKysrKysrKy0tLQogMSBmaWxlIGNoYW5nZWQsIDI5IGluc2VydGlvbnMoKyks IDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMTNf Y3Jhc2hfcmVzdGFydC5wbCBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDEzX2NyYXNoX3Jlc3Rh cnQucGwKaW5kZXggMjBkNjQ4YWQ2YWYuLjU2YWZiMWFhNmViIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWNvdmVyeS90LzAxM19jcmFzaF9yZXN0YXJ0LnBsCisrKyBiL3NyYy90ZXN0L3Jl Y292ZXJ5L3QvMDEzX2NyYXNoX3Jlc3RhcnQucGwKQEAgLTIxLDE0ICsyMSwzMiBAQCBteSAk cHNxbF90aW1lb3V0ID0gSVBDOjpSdW46OnRpbWVyKCRQb3N0Z3JlU1FMOjpUZXN0OjpVdGls czo6dGltZW91dF9kZWZhdWx0KTsKIAogbXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpD bHVzdGVyLT5uZXcoJ3ByaW1hcnknKTsKICRub2RlLT5pbml0KGFsbG93c19zdHJlYW1pbmcg PT4gMSk7CisKKyMgRW5hYmxlIHBnX3N0YXRfc3RhdGVtZW50cyB0byB0ZXN0IHJlc3RhcnQg b2Ygc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzLgorJG5vZGUtPmFwcGVuZF9jb25mKAorCSdw b3N0Z3Jlc3FsLmNvbmYnLAorCXFxe3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllcyA9ICdwZ19z dGF0X3N0YXRlbWVudHMnCitwZ19zdGF0X3N0YXRlbWVudHMubWF4ID0gNTAwMDAKK2NvbXB1 dGVfcXVlcnlfaWQgPSAncmVncmVzcycKK30pOworCiAkbm9kZS0+c3RhcnQoKTsKIAogIyBi eSBkZWZhdWx0IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXIgZG9lc24ndCByZXN0YXJ0IGFm dGVyIGEgY3Jhc2gKICRub2RlLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywKLQlxW0FMVEVS IFNZU1RFTSBTRVQgcmVzdGFydF9hZnRlcl9jcmFzaCA9IDE7Ci0JCQkJICAgQUxURVIgU1lT VEVNIFNFVCBsb2dfY29ubmVjdGlvbnMgPSByZWNlaXB0OwotCQkJCSAgIFNFTEVDVCBwZ19y ZWxvYWRfY29uZigpO10pOworCSdwb3N0Z3JlcycsIHFbCisJCUFMVEVSIFNZU1RFTSBTRVQg cmVzdGFydF9hZnRlcl9jcmFzaCA9IDE7CisJCUFMVEVSIFNZU1RFTSBTRVQgbG9nX2Nvbm5l Y3Rpb25zID0gcmVjZWlwdDsKKwkJU0VMRUNUIHBnX3JlbG9hZF9jb25mKCk7CisJXSk7CisK KyMgUmVtZW1iZXIgdGhlIHRpbWUgdGhhdCBwZ19zdGF0X3N0YXRlbWVudHMgd2FzIHJlc2V0 LiBXZSdsbCB1c2UgaXQgbGF0ZXIgdG8KKyMgdmVyaWZ5IHRoYXQgaXQgZ2V0cyByZS1pbml0 aWFsaXplZCBhZnRlciBjcmFzaC4KK215ICRzdGF0c19yZXNldCA9ICRub2RlLT5zYWZlX3Bz cWwoCisJJ3Bvc3RncmVzJywgcVsKKwkJQ1JFQVRFIEVYVEVOU0lPTiBwZ19zdGF0X3N0YXRl bWVudHM7CisJCVNFTEVDVCBzdGF0c19yZXNldCBGUk9NIHBnX3N0YXRfc3RhdGVtZW50c19p bmZvOworCV0pOwogCiAjIFJ1biBwc3FsLCBrZWVwaW5nIHNlc3Npb24gYWxpdmUsIHNvIHdl IGhhdmUgYW4gYWxpdmUgYmFja2VuZCB0byBraWxsLgogbXkgKCRraWxsbWVfc3RkaW4sICRr aWxsbWVfc3Rkb3V0LCAka2lsbG1lX3N0ZGVycikgPSAoJycsICcnLCAnJyk7CkBAIC0xNDEs NiArMTU5LDEzIEBAICRraWxsbWUtPnJ1bigpOwogKCRtb25pdG9yX3N0ZGluLCAkbW9uaXRv cl9zdGRvdXQsICRtb25pdG9yX3N0ZGVycikgPSAoJycsICcnLCAnJyk7CiAkbW9uaXRvci0+ cnVuKCk7CiAKKyMgVmVyaWZ5IHRoYXQgcGdfc3RhdF9zdGF0ZW1lbnRzLCBsb2FkZWQgdmlh IHNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcywKKyMgd2FzIHJlLWluaXRpYWxpemVkIGF0IHRo ZSBjcmFzaC4KK215ICRzdGF0c19yZXNldF9hZnRlciA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwlxW1NFTEVDVCBzdGF0c19yZXNldCBGUk9NIHBnX3N0YXRfc3RhdGVtZW50 c19pbmZvXSk7CitjbXBfb2soJHN0YXRzX3Jlc2V0LCAnbmUnLCAkc3RhdHNfcmVzZXRfYWZ0 ZXIsCisJInBnX3N0YXRfc3RhdGVtZW50cyB3YXMgcmVzZXQgYnkgcmVzdGFydCIpOworCiAK ICMgQWNxdWlyZSBwaWQgb2YgbmV3IGJhY2tlbmQKICRraWxsbWVfc3RkaW4gLj0gcVsKLS0g CjIuNDcuMwoK --------------cltwtZYaOf76t571xokamZd0 Content-Type: text/x-patch; charset=UTF-8; name="v9-0002-refactor-Move-ShmemInitHash-to-separate-file.patch" Content-Disposition: attachment; filename*0="v9-0002-refactor-Move-ShmemInitHash-to-separate-file.patch" Content-Transfer-Encoding: base64 RnJvbSAxYzYxZjIwYWU0YmY0NWQxZjkxODgxOWZmZDJmOTJlZmVkYzM5NDQ4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFNhdCwgMjEgTWFyIDIwMjYgMTM6MDc6MjggKzAyMDAK U3ViamVjdDogW1BBVENIIHY5IDAyLzE2XSByZWZhY3RvcjogTW92ZSBTaG1lbUluaXRIYXNo IHRvIHNlcGFyYXRlIGZpbGUKCkluIHByZXBhcmF0aW9uIGZvciBuZXh0IGNvbW1pdHMKLS0t CiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9NYWtlZmlsZSAgICAgfCAgMSArCiBzcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9tZXNvbi5idWlsZCAgfCAgMSArCiBzcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9zaG1lbS5jICAgICAgfCA3NyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbV9oYXNoLmMgfCA5OCArKysrKysrKysrKysrKysr KysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3NobWVtLmggICAgICAgICAgfCAg MSArCiA1IGZpbGVzIGNoYW5nZWQsIDEwMSBpbnNlcnRpb25zKCspLCA3NyBkZWxldGlvbnMo LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbV9o YXNoLmMKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9NYWtlZmlsZSBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL01ha2VmaWxlCmluZGV4IDlhMDdmNmUxZDkyLi5m NzE2NTNiYmU0OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvTWFrZWZp bGUKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvTWFrZWZpbGUKQEAgLTIyLDYgKzIy LDcgQEAgT0JKUyA9IFwKIAlzaG1fbXEubyBcCiAJc2htX3RvYy5vIFwKIAlzaG1lbS5vIFwK KwlzaG1lbV9oYXNoLm8gXAogCXNpZ25hbGZ1bmNzLm8gXAogCXNpbnZhbC5vIFwKIAlzaW52 YWxhZHQubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9tZXNvbi5i dWlsZCBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL21lc29uLmJ1aWxkCmluZGV4IDljMWNh OTU0ZDlkLi5iOGMzMWUyOTk2NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvbWVzb24uYnVp bGQKQEAgLTE0LDYgKzE0LDcgQEAgYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAnc2ht X21xLmMnLAogICAnc2htX3RvYy5jJywKICAgJ3NobWVtLmMnLAorICAnc2htZW1faGFzaC5j JywKICAgJ3NpZ25hbGZ1bmNzLmMnLAogICAnc2ludmFsLmMnLAogICAnc2ludmFsYWR0LmMn LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKaW5kZXggMGU0OWRlYmFhYWMuLjE0ODVmMWZm MzhmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCisrKyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKQEAgLTEwMCw3ICsxMDAsNiBAQCB0 eXBlZGVmIHN0cnVjdCBTaG1lbUFsbG9jYXRvckRhdGEKIAogI2RlZmluZSBTaG1lbUluZGV4 TG9jayAoJlNobWVtQWxsb2NhdG9yLT5pbmRleF9sb2NrKQogCi1zdGF0aWMgdm9pZCAqU2ht ZW1IYXNoQWxsb2MoU2l6ZSBzaXplLCB2b2lkICphbGxvY19hcmcpOwogc3RhdGljIHZvaWQg KlNobWVtQWxsb2NSYXcoU2l6ZSBzaXplLCBTaXplICphbGxvY2F0ZWRfc2l6ZSk7CiAKIC8q IHNoYXJlZCBtZW1vcnkgZ2xvYmFsIHZhcmlhYmxlcyAqLwpAQCAtMjM1LDE1ICsyMzQsNiBA QCBTaG1lbUFsbG9jTm9FcnJvcihTaXplIHNpemUpCiAJcmV0dXJuIFNobWVtQWxsb2NSYXco c2l6ZSwgJmFsbG9jYXRlZF9zaXplKTsKIH0KIAotLyogQWxsb2MgY2FsbGJhY2sgZm9yIHNo YXJlZCBtZW1vcnkgaGFzaCB0YWJsZXMgKi8KLXN0YXRpYyB2b2lkICoKLVNobWVtSGFzaEFs bG9jKFNpemUgc2l6ZSwgdm9pZCAqYWxsb2NfYXJnKQotewotCVNpemUJCWFsbG9jYXRlZF9z aXplOwotCi0JcmV0dXJuIFNobWVtQWxsb2NSYXcoc2l6ZSwgJmFsbG9jYXRlZF9zaXplKTsK LX0KLQogLyoKICAqIFNobWVtQWxsb2NSYXcgLS0gYWxsb2NhdGUgYWxpZ24gY2h1bmsgYW5k IHJldHVybiBhbGxvY2F0ZWQgc2l6ZQogICoKQEAgLTMwNSw3MyArMjk1LDYgQEAgU2htZW1B ZGRySXNWYWxpZChjb25zdCB2b2lkICphZGRyKQogCXJldHVybiAoYWRkciA+PSBTaG1lbUJh c2UpICYmIChhZGRyIDwgU2htZW1FbmQpOwogfQogCi0vKgotICogU2htZW1Jbml0SGFzaCAt LSBDcmVhdGUgYW5kIGluaXRpYWxpemUsIG9yIGF0dGFjaCB0bywgYQotICoJCXNoYXJlZCBt ZW1vcnkgaGFzaCB0YWJsZS4KLSAqCi0gKiBXZSBhc3N1bWUgY2FsbGVyIGlzIGRvaW5nIHNv bWUga2luZCBvZiBzeW5jaHJvbml6YXRpb24KLSAqIHNvIHRoYXQgdHdvIHByb2Nlc3NlcyBk b24ndCB0cnkgdG8gY3JlYXRlL2luaXRpYWxpemUgdGhlIHNhbWUKLSAqIHRhYmxlIGF0IG9u Y2UuICAoSW4gcHJhY3RpY2UsIGFsbCBjcmVhdGlvbnMgYXJlIGRvbmUgaW4gdGhlIHBvc3Rt YXN0ZXIKLSAqIHByb2Nlc3M7IGNoaWxkIHByb2Nlc3NlcyBzaG91bGQgYWx3YXlzIGJlIGF0 dGFjaGluZyB0byBleGlzdGluZyB0YWJsZXMuKQotICoKLSAqIG1heF9zaXplIGlzIHRoZSBl c3RpbWF0ZWQgbWF4aW11bSBudW1iZXIgb2YgaGFzaHRhYmxlIGVudHJpZXMuICBUaGlzIGlz Ci0gKiBub3QgYSBoYXJkIGxpbWl0LCBidXQgdGhlIGFjY2VzcyBlZmZpY2llbmN5IHdpbGwg ZGVncmFkZSBpZiBpdCBpcwotICogZXhjZWVkZWQgc3Vic3RhbnRpYWxseSAoc2luY2UgaXQn cyB1c2VkIHRvIGNvbXB1dGUgZGlyZWN0b3J5IHNpemUgYW5kCi0gKiB0aGUgaGFzaCB0YWJs ZSBidWNrZXRzIHdpbGwgZ2V0IG92ZXJmdWxsKS4KLSAqCi0gKiBpbml0X3NpemUgaXMgdGhl IG51bWJlciBvZiBoYXNodGFibGUgZW50cmllcyB0byBwcmVhbGxvY2F0ZS4gIEZvciBhIHRh YmxlCi0gKiB3aG9zZSBtYXhpbXVtIHNpemUgaXMgY2VydGFpbiwgdGhpcyBzaG91bGQgYmUg ZXF1YWwgdG8gbWF4X3NpemU7IHRoYXQKLSAqIGVuc3VyZXMgdGhhdCBubyBydW4tdGltZSBv dXQtb2Ytc2hhcmVkLW1lbW9yeSBmYWlsdXJlcyBjYW4gb2NjdXIuCi0gKgotICogKmluZm9Q IGFuZCBoYXNoX2ZsYWdzIG11c3Qgc3BlY2lmeSBhdCBsZWFzdCB0aGUgZW50cnkgc2l6ZXMg YW5kIGtleQotICogY29tcGFyaXNvbiBzZW1hbnRpY3MgKHNlZSBoYXNoX2NyZWF0ZSgpKS4g IEZsYWcgYml0cyBhbmQgdmFsdWVzIHNwZWNpZmljCi0gKiB0byBzaGFyZWQtbWVtb3J5IGhh c2ggdGFibGVzIGFyZSBhZGRlZCBoZXJlLCBleGNlcHQgdGhhdCBjYWxsZXJzIG1heQotICog Y2hvb3NlIHRvIHNwZWNpZnkgSEFTSF9QQVJUSVRJT04gYW5kL29yIEhBU0hfRklYRURfU0la RS4KLSAqCi0gKiBOb3RlOiBiZWZvcmUgUG9zdGdyZXMgOS4wLCB0aGlzIGZ1bmN0aW9uIHJl dHVybmVkIE5VTEwgZm9yIHNvbWUgZmFpbHVyZQotICogY2FzZXMuICBOb3csIGl0IGFsd2F5 cyB0aHJvd3MgZXJyb3IgaW5zdGVhZCwgc28gY2FsbGVycyBuZWVkIG5vdCBjaGVjawotICog Zm9yIE5VTEwuCi0gKi8KLUhUQUIgKgotU2htZW1Jbml0SGFzaChjb25zdCBjaGFyICpuYW1l LAkJLyogdGFibGUgc3RyaW5nIG5hbWUgZm9yIHNobWVtIGluZGV4ICovCi0JCQkgIGludDY0 IGluaXRfc2l6ZSwJLyogaW5pdGlhbCB0YWJsZSBzaXplICovCi0JCQkgIGludDY0IG1heF9z aXplLAkvKiBtYXggc2l6ZSBvZiB0aGUgdGFibGUgKi8KLQkJCSAgSEFTSENUTCAqaW5mb1As CS8qIGluZm8gYWJvdXQga2V5IGFuZCBidWNrZXQgc2l6ZSAqLwotCQkJICBpbnQgaGFzaF9m bGFncykJLyogaW5mbyBhYm91dCBpbmZvUCAqLwotewotCWJvb2wJCWZvdW5kOwotCXZvaWQJ ICAgKmxvY2F0aW9uOwotCi0JLyoKLQkgKiBIYXNoIHRhYmxlcyBhbGxvY2F0ZWQgaW4gc2hh cmVkIG1lbW9yeSBoYXZlIGEgZml4ZWQgZGlyZWN0b3J5OyBpdCBjYW4ndAotCSAqIGdyb3cg b3Igb3RoZXIgYmFja2VuZHMgd291bGRuJ3QgYmUgYWJsZSB0byBmaW5kIGl0LiBTbywgbWFr ZSBzdXJlIHdlCi0JICogbWFrZSBpdCBiaWcgZW5vdWdoIHRvIHN0YXJ0IHdpdGguCi0JICoK LQkgKiBUaGUgc2hhcmVkIG1lbW9yeSBhbGxvY2F0b3IgbXVzdCBiZSBzcGVjaWZpZWQgdG9v LgotCSAqLwotCWluZm9QLT5kc2l6ZSA9IGluZm9QLT5tYXhfZHNpemUgPSBoYXNoX3NlbGVj dF9kaXJzaXplKG1heF9zaXplKTsKLQlpbmZvUC0+YWxsb2MgPSBTaG1lbUhhc2hBbGxvYzsK LQlpbmZvUC0+YWxsb2NfYXJnID0gTlVMTDsKLQloYXNoX2ZsYWdzIHw9IEhBU0hfU0hBUkVE X01FTSB8IEhBU0hfQUxMT0MgfCBIQVNIX0RJUlNJWkU7Ci0KLQkvKiBsb29rIGl0IHVwIGlu IHRoZSBzaG1lbSBpbmRleCAqLwotCWxvY2F0aW9uID0gU2htZW1Jbml0U3RydWN0KG5hbWUs Ci0JCQkJCQkJICAgaGFzaF9nZXRfc2hhcmVkX3NpemUoaW5mb1AsIGhhc2hfZmxhZ3MpLAot CQkJCQkJCSAgICZmb3VuZCk7Ci0KLQkvKgotCSAqIGlmIGl0IGFscmVhZHkgZXhpc3RzLCBh dHRhY2ggdG8gaXQgcmF0aGVyIHRoYW4gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUKLQkgKiBu ZXcgc3BhY2UKLQkgKi8KLQlpZiAoZm91bmQpCi0JCWhhc2hfZmxhZ3MgfD0gSEFTSF9BVFRB Q0g7Ci0KLQkvKiBQYXNzIGxvY2F0aW9uIG9mIGhhc2h0YWJsZSBoZWFkZXIgdG8gaGFzaF9j cmVhdGUgKi8KLQlpbmZvUC0+aGN0bCA9IChIQVNISERSICopIGxvY2F0aW9uOwotCi0JcmV0 dXJuIGhhc2hfY3JlYXRlKG5hbWUsIGluaXRfc2l6ZSwgaW5mb1AsIGhhc2hfZmxhZ3MpOwot fQotCiAvKgogICogU2htZW1Jbml0U3RydWN0IC0tIENyZWF0ZS9hdHRhY2ggdG8gYSBzdHJ1 Y3R1cmUgaW4gc2hhcmVkIG1lbW9yeS4KICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9z dG9yYWdlL2lwYy9zaG1lbV9oYXNoLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1l bV9oYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ3MTY2 ZmYzMDFkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2ht ZW1faGFzaC5jCkBAIC0wLDAgKzEsOTggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoK KyAqIHNobWVtX2hhc2guYworICoJICBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uIGluIHNo YXJlZCBtZW1vcnkKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh CisgKgorICogQSBzaGFyZWQgbWVtb3J5IGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24gb24g dG9wIG9mIHRoZSBuYW1lZCwgZml4ZWQtc2l6ZQorICogc2hhcmVkIG1lbW9yeSBhcmVhcyBt YW5hZ2VkIGJ5IHNobWVtLmMuICBIYXNoIHRhYmxlcyBoYXZlIGEgZml4ZWQgbWF4aW11bQor ICogc2l6ZSwgYnV0IHRoZWlyIGFjdHVhbCBzaXplIGNhbiB2YXJ5IGR5bmFtaWNhbGx5LiAg V2hlbiBlbnRyaWVzIGFyZSBhZGRlZAorICogdG8gdGhlIHRhYmxlLCBtb3JlIHNwYWNlIGlz IGFsbG9jYXRlZC4gIEVhY2ggc2hhcmVkIGRhdGEgc3RydWN0dXJlIGFuZCBoYXNoCisgKiBo YXMgYSBzdHJpbmcgbmFtZSB0byBpZGVudGlmeSBpdC4KKyAqCisgKiBJREVOVElGSUNBVElP TgorICoJICBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbV9oYXNoLmMKKyAqCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2lu Y2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKKworCisvKgorICogU2htZW1Jbml0SGFzaCAtLSBD cmVhdGUgYW5kIGluaXRpYWxpemUsIG9yIGF0dGFjaCB0bywgYQorICoJCXNoYXJlZCBtZW1v cnkgaGFzaCB0YWJsZS4KKyAqCisgKiBXZSBhc3N1bWUgY2FsbGVyIGlzIGRvaW5nIHNvbWUg a2luZCBvZiBzeW5jaHJvbml6YXRpb24KKyAqIHNvIHRoYXQgdHdvIHByb2Nlc3NlcyBkb24n dCB0cnkgdG8gY3JlYXRlL2luaXRpYWxpemUgdGhlIHNhbWUKKyAqIHRhYmxlIGF0IG9uY2Uu ICAoSW4gcHJhY3RpY2UsIGFsbCBjcmVhdGlvbnMgYXJlIGRvbmUgaW4gdGhlIHBvc3RtYXN0 ZXIKKyAqIHByb2Nlc3M7IGNoaWxkIHByb2Nlc3NlcyBzaG91bGQgYWx3YXlzIGJlIGF0dGFj aGluZyB0byBleGlzdGluZyB0YWJsZXMuKQorICoKKyAqIG1heF9zaXplIGlzIHRoZSBlc3Rp bWF0ZWQgbWF4aW11bSBudW1iZXIgb2YgaGFzaHRhYmxlIGVudHJpZXMuICBUaGlzIGlzCisg KiBub3QgYSBoYXJkIGxpbWl0LCBidXQgdGhlIGFjY2VzcyBlZmZpY2llbmN5IHdpbGwgZGVn cmFkZSBpZiBpdCBpcworICogZXhjZWVkZWQgc3Vic3RhbnRpYWxseSAoc2luY2UgaXQncyB1 c2VkIHRvIGNvbXB1dGUgZGlyZWN0b3J5IHNpemUgYW5kCisgKiB0aGUgaGFzaCB0YWJsZSBi dWNrZXRzIHdpbGwgZ2V0IG92ZXJmdWxsKS4KKyAqCisgKiBpbml0X3NpemUgaXMgdGhlIG51 bWJlciBvZiBoYXNodGFibGUgZW50cmllcyB0byBwcmVhbGxvY2F0ZS4gIEZvciBhIHRhYmxl CisgKiB3aG9zZSBtYXhpbXVtIHNpemUgaXMgY2VydGFpbiwgdGhpcyBzaG91bGQgYmUgZXF1 YWwgdG8gbWF4X3NpemU7IHRoYXQKKyAqIGVuc3VyZXMgdGhhdCBubyBydW4tdGltZSBvdXQt b2Ytc2hhcmVkLW1lbW9yeSBmYWlsdXJlcyBjYW4gb2NjdXIuCisgKgorICogKmluZm9QIGFu ZCBoYXNoX2ZsYWdzIG11c3Qgc3BlY2lmeSBhdCBsZWFzdCB0aGUgZW50cnkgc2l6ZXMgYW5k IGtleQorICogY29tcGFyaXNvbiBzZW1hbnRpY3MgKHNlZSBoYXNoX2NyZWF0ZSgpKS4gIEZs YWcgYml0cyBhbmQgdmFsdWVzIHNwZWNpZmljCisgKiB0byBzaGFyZWQtbWVtb3J5IGhhc2gg dGFibGVzIGFyZSBhZGRlZCBoZXJlLCBleGNlcHQgdGhhdCBjYWxsZXJzIG1heQorICogY2hv b3NlIHRvIHNwZWNpZnkgSEFTSF9QQVJUSVRJT04gYW5kL29yIEhBU0hfRklYRURfU0laRS4K KyAqCisgKiBOb3RlOiBiZWZvcmUgUG9zdGdyZXMgOS4wLCB0aGlzIGZ1bmN0aW9uIHJldHVy bmVkIE5VTEwgZm9yIHNvbWUgZmFpbHVyZQorICogY2FzZXMuICBOb3csIGl0IGFsd2F5cyB0 aHJvd3MgZXJyb3IgaW5zdGVhZCwgc28gY2FsbGVycyBuZWVkIG5vdCBjaGVjaworICogZm9y IE5VTEwuCisgKi8KK0hUQUIgKgorU2htZW1Jbml0SGFzaChjb25zdCBjaGFyICpuYW1lLAkJ LyogdGFibGUgc3RyaW5nIG5hbWUgZm9yIHNobWVtIGluZGV4ICovCisJCQkgIGludDY0IGlu aXRfc2l6ZSwJLyogaW5pdGlhbCB0YWJsZSBzaXplICovCisJCQkgIGludDY0IG1heF9zaXpl LAkvKiBtYXggc2l6ZSBvZiB0aGUgdGFibGUgKi8KKwkJCSAgSEFTSENUTCAqaW5mb1AsCS8q IGluZm8gYWJvdXQga2V5IGFuZCBidWNrZXQgc2l6ZSAqLworCQkJICBpbnQgaGFzaF9mbGFn cykJLyogaW5mbyBhYm91dCBpbmZvUCAqLworeworCWJvb2wJCWZvdW5kOworCXZvaWQJICAg KmxvY2F0aW9uOworCisJLyoKKwkgKiBIYXNoIHRhYmxlcyBhbGxvY2F0ZWQgaW4gc2hhcmVk IG1lbW9yeSBoYXZlIGEgZml4ZWQgZGlyZWN0b3J5OyBpdCBjYW4ndAorCSAqIGdyb3cgb3Ig b3RoZXIgYmFja2VuZHMgd291bGRuJ3QgYmUgYWJsZSB0byBmaW5kIGl0LiBTbywgbWFrZSBz dXJlIHdlCisJICogbWFrZSBpdCBiaWcgZW5vdWdoIHRvIHN0YXJ0IHdpdGguCisJICoKKwkg KiBUaGUgc2hhcmVkIG1lbW9yeSBhbGxvY2F0b3IgbXVzdCBiZSBzcGVjaWZpZWQgdG9vLgor CSAqLworCWluZm9QLT5kc2l6ZSA9IGluZm9QLT5tYXhfZHNpemUgPSBoYXNoX3NlbGVjdF9k aXJzaXplKG1heF9zaXplKTsKKwlpbmZvUC0+YWxsb2MgPSBTaG1lbUhhc2hBbGxvYzsKKwlp bmZvUC0+YWxsb2NfYXJnID0gTlVMTDsKKwloYXNoX2ZsYWdzIHw9IEhBU0hfU0hBUkVEX01F TSB8IEhBU0hfQUxMT0MgfCBIQVNIX0RJUlNJWkU7CisKKwkvKiBsb29rIGl0IHVwIGluIHRo ZSBzaG1lbSBpbmRleCAqLworCWxvY2F0aW9uID0gU2htZW1Jbml0U3RydWN0KG5hbWUsCisJ CQkJCQkJICAgaGFzaF9nZXRfc2hhcmVkX3NpemUoaW5mb1AsIGhhc2hfZmxhZ3MpLAorCQkJ CQkJCSAgICZmb3VuZCk7CisKKwkvKgorCSAqIGlmIGl0IGFscmVhZHkgZXhpc3RzLCBhdHRh Y2ggdG8gaXQgcmF0aGVyIHRoYW4gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUKKwkgKiBuZXcg c3BhY2UKKwkgKi8KKwlpZiAoZm91bmQpCisJCWhhc2hfZmxhZ3MgfD0gSEFTSF9BVFRBQ0g7 CisKKwkvKiBQYXNzIGxvY2F0aW9uIG9mIGhhc2h0YWJsZSBoZWFkZXIgdG8gaGFzaF9jcmVh dGUgKi8KKwlpbmZvUC0+aGN0bCA9IChIQVNISERSICopIGxvY2F0aW9uOworCisJcmV0dXJu IGhhc2hfY3JlYXRlKG5hbWUsIGluaXRfc2l6ZSwgaW5mb1AsIGhhc2hfZmxhZ3MpOworfQor CisvKiBBbGxvYyBjYWxsYmFjayBmb3Igc2hhcmVkIG1lbW9yeSBoYXNoIHRhYmxlcyAqLwor dm9pZCAqCitTaG1lbUhhc2hBbGxvYyhTaXplIHNpemUsIHZvaWQgKmFsbG9jX2FyZykKK3sK KwlyZXR1cm4gU2htZW1BbGxvY05vRXJyb3Ioc2l6ZSk7Cit9CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9zdG9yYWdlL3NobWVtLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3NobWVtLmgK aW5kZXggMmE5ZTliZWNkMjYuLmQyNjIwNjEzMWQ3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL3NobWVtLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zaG1lbS5oCkBA IC0zMSw2ICszMSw3IEBAIHR5cGVkZWYgc3RydWN0IFBHU2htZW1IZWFkZXIgUEdTaG1lbUhl YWRlcjsgLyogYXZvaWQgaW5jbHVkaW5nCiBleHRlcm4gdm9pZCBJbml0U2htZW1BbGxvY2F0 b3IoUEdTaG1lbUhlYWRlciAqc2VnaGRyKTsKIGV4dGVybiB2b2lkICpTaG1lbUFsbG9jKFNp emUgc2l6ZSk7CiBleHRlcm4gdm9pZCAqU2htZW1BbGxvY05vRXJyb3IoU2l6ZSBzaXplKTsK K2V4dGVybiB2b2lkICpTaG1lbUhhc2hBbGxvYyhTaXplIHNpemUsIHZvaWQgKmFsbG9jX2Fy Zyk7CiBleHRlcm4gYm9vbCBTaG1lbUFkZHJJc1ZhbGlkKGNvbnN0IHZvaWQgKmFkZHIpOwog ZXh0ZXJuIEhUQUIgKlNobWVtSW5pdEhhc2goY29uc3QgY2hhciAqbmFtZSwgaW50NjQgaW5p dF9zaXplLCBpbnQ2NCBtYXhfc2l6ZSwKIAkJCQkJCSAgIEhBU0hDVEwgKmluZm9QLCBpbnQg aGFzaF9mbGFncyk7Ci0tIAoyLjQ3LjMKCg== --------------cltwtZYaOf76t571xokamZd0 Content-Type: text/x-patch; charset=UTF-8; name="v9-0003-refactor-predicate.c-inline-SerialInit-to-the-cal.patch" Content-Disposition: attachment; filename*0="v9-0003-refactor-predicate.c-inline-SerialInit-to-the-cal.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA0OWVlZmEwYTIwOWUzMjY2NTJlYTAyNDAyZDMxN2M4NWIxNWVkNTJiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgMTkgTWFyIDIwMjYgMTc6MjE6MzAgKzAyMDAK U3ViamVjdDogW1BBVENIIHY5IDAzLzE2XSByZWZhY3RvciBwcmVkaWNhdGUuYzogaW5saW5l IFNlcmlhbEluaXQgdG8gdGhlCiBjYWxsZXIKClRoZSBTaG1lbUluaXQgZnVuY3Rpb24gaXMg dmVyeSBjb21wbGljYXRlZCBjdXJyZW50bHkuIFRoZXNlCnJlZmFjdG9yaW5ncyBtb3ZlIGl0 IGluIGEgZGlyZWN0aW9uIHRoYXQgaXMgbW9yZSBuYXR1cmFsIHdpdGggdGhlIG5ldwpzaG1l bSBjYWxsYmFja3MuCi0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5j IHwgNzMgKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDI5 IGluc2VydGlvbnMoKyksIDQ0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1n ci9wcmVkaWNhdGUuYwppbmRleCBhZTBlOTZhZWU1Zi4uNDA5NTBlZTNhNGYgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYworKysgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMKQEAgLTQ0NCw3ICs0NDQsNiBAQCBzdGF0 aWMgdm9pZCBGbGFnU3hhY3RVbnNhZmUoU0VSSUFMSVpBQkxFWEFDVCAqc3hhY3QpOwogCiBz dGF0aWMgYm9vbCBTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2FsbHkoaW50NjQgcGFnZTEsIGlu dDY0IHBhZ2UyKTsKIHN0YXRpYyBpbnQJc2VyaWFsX2VycmRldGFpbF9mb3JfaW9fZXJyb3Io Y29uc3Qgdm9pZCAqb3BhcXVlX2RhdGEpOwotc3RhdGljIHZvaWQgU2VyaWFsSW5pdCh2b2lk KTsKIHN0YXRpYyB2b2lkIFNlcmlhbEFkZChUcmFuc2FjdGlvbklkIHhpZCwgU2VyQ29tbWl0 U2VxTm8gbWluQ29uZmxpY3RDb21taXRTZXFObyk7CiBzdGF0aWMgU2VyQ29tbWl0U2VxTm8g U2VyaWFsR2V0TWluQ29uZmxpY3RDb21taXRTZXFObyhUcmFuc2FjdGlvbklkIHhpZCk7CiBz dGF0aWMgdm9pZCBTZXJpYWxTZXRBY3RpdmVTZXJYbWluKFRyYW5zYWN0aW9uSWQgeGlkKTsK QEAgLTgwOSw0OCArODA4LDYgQEAgU2VyaWFsUGFnZVByZWNlZGVzTG9naWNhbGx5VW5pdFRl c3RzKHZvaWQpCiB9CiAjZW5kaWYKIAotLyoKLSAqIEluaXRpYWxpemUgZm9yIHRoZSB0cmFj a2luZyBvZiBvbGQgc2VyaWFsaXphYmxlIGNvbW1pdHRlZCB4aWRzLgotICovCi1zdGF0aWMg dm9pZAotU2VyaWFsSW5pdCh2b2lkKQotewotCWJvb2wJCWZvdW5kOwotCi0JLyoKLQkgKiBT ZXQgdXAgU0xSVSBtYW5hZ2VtZW50IG9mIHRoZSBwZ19zZXJpYWwgZGF0YS4KLQkgKi8KLQlT ZXJpYWxTbHJ1Q3RsLT5QYWdlUHJlY2VkZXMgPSBTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2Fs bHk7Ci0JU2VyaWFsU2xydUN0bC0+ZXJyZGV0YWlsX2Zvcl9pb19lcnJvciA9IHNlcmlhbF9l cnJkZXRhaWxfZm9yX2lvX2Vycm9yOwotCVNpbXBsZUxydUluaXQoU2VyaWFsU2xydUN0bCwg InNlcmlhbGl6YWJsZSIsCi0JCQkJICBzZXJpYWxpemFibGVfYnVmZmVycywgMCwgInBnX3Nl cmlhbCIsCi0JCQkJICBMV1RSQU5DSEVfU0VSSUFMX0JVRkZFUiwgTFdUUkFOQ0hFX1NFUklB TF9TTFJVLAotCQkJCSAgU1lOQ19IQU5ETEVSX05PTkUsIGZhbHNlKTsKLSNpZmRlZiBVU0Vf QVNTRVJUX0NIRUNLSU5HCi0JU2VyaWFsUGFnZVByZWNlZGVzTG9naWNhbGx5VW5pdFRlc3Rz KCk7Ci0jZW5kaWYKLQlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFNlcmlhbFNscnVDdGws IFNFUklBTF9FTlRSSUVTUEVSUEFHRSk7Ci0KLQkvKgotCSAqIENyZWF0ZSBvciBhdHRhY2gg dG8gdGhlIFNlcmlhbENvbnRyb2wgc3RydWN0dXJlLgotCSAqLwotCXNlcmlhbENvbnRyb2wg PSAoU2VyaWFsQ29udHJvbCkKLQkJU2htZW1Jbml0U3RydWN0KCJTZXJpYWxDb250cm9sRGF0 YSIsIHNpemVvZihTZXJpYWxDb250cm9sRGF0YSksICZmb3VuZCk7Ci0KLQlBc3NlcnQoZm91 bmQgPT0gSXNVbmRlclBvc3RtYXN0ZXIpOwotCWlmICghZm91bmQpCi0JewotCQkvKgotCQkg KiBTZXQgY29udHJvbCBpbmZvcm1hdGlvbiB0byByZWZsZWN0IGVtcHR5IFNMUlUuCi0JCSAq LwotCQlMV0xvY2tBY3F1aXJlKFNlcmlhbENvbnRyb2xMb2NrLCBMV19FWENMVVNJVkUpOwot CQlzZXJpYWxDb250cm9sLT5oZWFkUGFnZSA9IC0xOwotCQlzZXJpYWxDb250cm9sLT5oZWFk WGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7Ci0JCXNlcmlhbENvbnRyb2wtPnRhaWxYaWQg PSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKLQkJTFdMb2NrUmVsZWFzZShTZXJpYWxDb250cm9s TG9jayk7Ci0JfQotfQotCiAvKgogICogR1VDIGNoZWNrX2hvb2sgZm9yIHNlcmlhbGl6YWJs ZV9idWZmZXJzCiAgKi8KQEAgLTEzNTgsNyArMTMxNSwzNSBAQCBQcmVkaWNhdGVMb2NrU2ht ZW1Jbml0KHZvaWQpCiAJICogSW5pdGlhbGl6ZSB0aGUgU0xSVSBzdG9yYWdlIGZvciBvbGQg Y29tbWl0dGVkIHNlcmlhbGl6YWJsZQogCSAqIHRyYW5zYWN0aW9ucy4KIAkgKi8KLQlTZXJp YWxJbml0KCk7CisJU2VyaWFsU2xydUN0bC0+UGFnZVByZWNlZGVzID0gU2VyaWFsUGFnZVBy ZWNlZGVzTG9naWNhbGx5OworCVNlcmlhbFNscnVDdGwtPmVycmRldGFpbF9mb3JfaW9fZXJy b3IgPSBzZXJpYWxfZXJyZGV0YWlsX2Zvcl9pb19lcnJvcjsKKwlTaW1wbGVMcnVJbml0KFNl cmlhbFNscnVDdGwsICJzZXJpYWxpemFibGUiLAorCQkJCSAgc2VyaWFsaXphYmxlX2J1ZmZl cnMsIDAsICJwZ19zZXJpYWwiLAorCQkJCSAgTFdUUkFOQ0hFX1NFUklBTF9CVUZGRVIsIExX VFJBTkNIRV9TRVJJQUxfU0xSVSwKKwkJCQkgIFNZTkNfSEFORExFUl9OT05FLCBmYWxzZSk7 CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCVNlcmlhbFBhZ2VQcmVjZWRlc0xvZ2lj YWxseVVuaXRUZXN0cygpOworI2VuZGlmCisJU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhT ZXJpYWxTbHJ1Q3RsLCBTRVJJQUxfRU5UUklFU1BFUlBBR0UpOworCisJLyoKKwkgKiBDcmVh dGUgb3IgYXR0YWNoIHRvIHRoZSBTZXJpYWxDb250cm9sIHN0cnVjdHVyZS4KKwkgKi8KKwlz ZXJpYWxDb250cm9sID0gKFNlcmlhbENvbnRyb2wpCisJCVNobWVtSW5pdFN0cnVjdCgiU2Vy aWFsQ29udHJvbERhdGEiLCBzaXplb2YoU2VyaWFsQ29udHJvbERhdGEpLCAmZm91bmQpOwor CisJQXNzZXJ0KGZvdW5kID09IElzVW5kZXJQb3N0bWFzdGVyKTsKKwlpZiAoIWZvdW5kKQor CXsKKwkJLyoKKwkJICogU2V0IGNvbnRyb2wgaW5mb3JtYXRpb24gdG8gcmVmbGVjdCBlbXB0 eSBTTFJVLgorCQkgKi8KKwkJTFdMb2NrQWNxdWlyZShTZXJpYWxDb250cm9sTG9jaywgTFdf RVhDTFVTSVZFKTsKKwkJc2VyaWFsQ29udHJvbC0+aGVhZFBhZ2UgPSAtMTsKKwkJc2VyaWFs Q29udHJvbC0+aGVhZFhpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCQlzZXJpYWxDb250 cm9sLT50YWlsWGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJCUxXTG9ja1JlbGVhc2Uo U2VyaWFsQ29udHJvbExvY2spOworCX0KIH0KIAogLyoKLS0gCjIuNDcuMwoK --------------cltwtZYaOf76t571xokamZd0 Content-Type: text/x-patch; charset=UTF-8; name="v9-0004-refactor-predicate.c-Move-all-the-initialization-.patch" Content-Disposition: attachment; filename*0="v9-0004-refactor-predicate.c-Move-all-the-initialization-.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA5ZjJlZjEzY2NhODNlNjY3MTc1NmJjOWYyMWE0MTZjMTMxOGFjZDFmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMjAgTWFyIDIwMjYgMjA6Mjc6NTAgKzAyMDAK U3ViamVjdDogW1BBVENIIHY5IDA0LzE2XSByZWZhY3RvciBwcmVkaWNhdGUuYzogTW92ZSBh bGwgdGhlIGluaXRpYWxpemF0aW9uCiB0b2dldGhlcgoKVGhlIFNobWVtSW5pdCBmdW5jdGlv biBpcyB2ZXJ5IGNvbXBsaWNhdGVkIGN1cnJlbnRseS4gVGhlc2UKcmVmYWN0b3JpbmdzIG1v dmUgaXQgaW4gYSBkaXJlY3Rpb24gdGhhdCBpcyBtb3JlIG5hdHVyYWwgd2l0aCB0aGUgbmV3 CnNobWVtIGNhbGxiYWNrcy4KLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGlj YXRlLmMgfCAxNjQgKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdl ZCwgNzkgaW5zZXJ0aW9ucygrKSwgODUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9sbWdyL3ByZWRpY2F0ZS5jCmluZGV4IDQwOTUwZWUzYTRmLi40ZjgwZmM3MzYzOSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYwpAQCAtMTE0NSwxOSArMTE0NSw2 IEBAIFByZWRpY2F0ZUxvY2tTaG1lbUluaXQodm9pZCkKIAkJCQkJCQkJCQkJSEFTSF9FTEVN IHwgSEFTSF9CTE9CUyB8CiAJCQkJCQkJCQkJCUhBU0hfUEFSVElUSU9OIHwgSEFTSF9GSVhF RF9TSVpFKTsKIAotCS8qCi0JICogUmVzZXJ2ZSBhIGR1bW15IGVudHJ5IGluIHRoZSBoYXNo IHRhYmxlOyB3ZSB1c2UgaXQgdG8gbWFrZSBzdXJlIHRoZXJlJ3MKLQkgKiBhbHdheXMgb25l IGVudHJ5IGF2YWlsYWJsZSB3aGVuIHdlIG5lZWQgdG8gc3BsaXQgb3IgY29tYmluZSBhIHBh Z2UsCi0JICogYmVjYXVzZSBydW5uaW5nIG91dCBvZiBzcGFjZSB0aGVyZSBjb3VsZCBtZWFu IGFib3J0aW5nIGEKLQkgKiBub24tc2VyaWFsaXphYmxlIHRyYW5zYWN0aW9uLgotCSAqLwot CWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCi0JewotCQkodm9pZCkgaGFzaF9zZWFyY2goUHJl ZGljYXRlTG9ja1RhcmdldEhhc2gsICZTY3JhdGNoVGFyZ2V0VGFnLAotCQkJCQkJICAgSEFT SF9FTlRFUiwgJmZvdW5kKTsKLQkJQXNzZXJ0KCFmb3VuZCk7Ci0JfQotCiAJLyogUHJlLWNh bGN1bGF0ZSB0aGUgaGFzaCBhbmQgcGFydGl0aW9uIGxvY2sgb2YgdGhlIHNjcmF0Y2ggZW50 cnkgKi8KIAlTY3JhdGNoVGFyZ2V0VGFnSGFzaCA9IFByZWRpY2F0ZUxvY2tUYXJnZXRUYWdI YXNoQ29kZSgmU2NyYXRjaFRhcmdldFRhZyk7CiAJU2NyYXRjaFBhcnRpdGlvbkxvY2sgPSBQ cmVkaWNhdGVMb2NrSGFzaFBhcnRpdGlvbkxvY2soU2NyYXRjaFRhcmdldFRhZ0hhc2gpOwpA QCAtMTIwMiw0OSArMTE4OSw2IEBAIFByZWRpY2F0ZUxvY2tTaG1lbUluaXQodm9pZCkKIAkJ CQkJCQkgICByZXF1ZXN0U2l6ZSwKIAkJCQkJCQkgICAmZm91bmQpOwogCUFzc2VydChmb3Vu ZCA9PSBJc1VuZGVyUG9zdG1hc3Rlcik7Ci0JaWYgKCFmb3VuZCkKLQl7Ci0JCWludAkJCWk7 Ci0KLQkJLyogY2xlYW4gZXZlcnl0aGluZywgYm90aCB0aGUgaGVhZGVyIGFuZCB0aGUgZWxl bWVudCAqLwotCQltZW1zZXQoUHJlZFhhY3QsIDAsIHJlcXVlc3RTaXplKTsKLQotCQlkbGlz dF9pbml0KCZQcmVkWGFjdC0+YXZhaWxhYmxlTGlzdCk7Ci0JCWRsaXN0X2luaXQoJlByZWRY YWN0LT5hY3RpdmVMaXN0KTsKLQkJUHJlZFhhY3QtPlN4YWN0R2xvYmFsWG1pbiA9IEludmFs aWRUcmFuc2FjdGlvbklkOwotCQlQcmVkWGFjdC0+U3hhY3RHbG9iYWxYbWluQ291bnQgPSAw OwotCQlQcmVkWGFjdC0+V3JpdGFibGVTeGFjdENvdW50ID0gMDsKLQkJUHJlZFhhY3QtPkxh c3RTeGFjdENvbW1pdFNlcU5vID0gRmlyc3ROb3JtYWxTZXJDb21taXRTZXFObyAtIDE7Ci0J CVByZWRYYWN0LT5DYW5QYXJ0aWFsQ2xlYXJUaHJvdWdoID0gMDsKLQkJUHJlZFhhY3QtPkhh dmVQYXJ0aWFsQ2xlYXJlZFRocm91Z2ggPSAwOwotCQlQcmVkWGFjdC0+ZWxlbWVudAotCQkJ PSAoU0VSSUFMSVpBQkxFWEFDVCAqKSAoKGNoYXIgKikgUHJlZFhhY3QgKyBQcmVkWGFjdExp c3REYXRhU2l6ZSk7Ci0JCS8qIEFkZCBhbGwgZWxlbWVudHMgdG8gYXZhaWxhYmxlIGxpc3Qs IGNsZWFuLiAqLwotCQlmb3IgKGkgPSAwOyBpIDwgbWF4X3NlcmlhbGl6YWJsZV94YWN0czsg aSsrKQotCQl7Ci0JCQlMV0xvY2tJbml0aWFsaXplKCZQcmVkWGFjdC0+ZWxlbWVudFtpXS5w ZXJYYWN0UHJlZGljYXRlTGlzdExvY2ssCi0JCQkJCQkJIExXVFJBTkNIRV9QRVJfWEFDVF9Q UkVESUNBVEVfTElTVCk7Ci0JCQlkbGlzdF9wdXNoX3RhaWwoJlByZWRYYWN0LT5hdmFpbGFi bGVMaXN0LCAmUHJlZFhhY3QtPmVsZW1lbnRbaV0ueGFjdExpbmspOwotCQl9Ci0JCVByZWRY YWN0LT5PbGRDb21taXR0ZWRTeGFjdCA9IENyZWF0ZVByZWRYYWN0KCk7Ci0JCVNldEludmFs aWRWaXJ0dWFsVHJhbnNhY3Rpb25JZChQcmVkWGFjdC0+T2xkQ29tbWl0dGVkU3hhY3QtPnZ4 aWQpOwotCQlQcmVkWGFjdC0+T2xkQ29tbWl0dGVkU3hhY3QtPnByZXBhcmVTZXFObyA9IDA7 Ci0JCVByZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFjdC0+Y29tbWl0U2VxTm8gPSAwOwotCQlQ cmVkWGFjdC0+T2xkQ29tbWl0dGVkU3hhY3QtPlNlcU5vLmxhc3RDb21taXRCZWZvcmVTbmFw c2hvdCA9IDA7Ci0JCWRsaXN0X2luaXQoJlByZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFjdC0+ b3V0Q29uZmxpY3RzKTsKLQkJZGxpc3RfaW5pdCgmUHJlZFhhY3QtPk9sZENvbW1pdHRlZFN4 YWN0LT5pbkNvbmZsaWN0cyk7Ci0JCWRsaXN0X2luaXQoJlByZWRYYWN0LT5PbGRDb21taXR0 ZWRTeGFjdC0+cHJlZGljYXRlTG9ja3MpOwotCQlkbGlzdF9ub2RlX2luaXQoJlByZWRYYWN0 LT5PbGRDb21taXR0ZWRTeGFjdC0+ZmluaXNoZWRMaW5rKTsKLQkJZGxpc3RfaW5pdCgmUHJl ZFhhY3QtPk9sZENvbW1pdHRlZFN4YWN0LT5wb3NzaWJsZVVuc2FmZUNvbmZsaWN0cyk7Ci0J CVByZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFjdC0+dG9wWGlkID0gSW52YWxpZFRyYW5zYWN0 aW9uSWQ7Ci0JCVByZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFjdC0+ZmluaXNoZWRCZWZvcmUg PSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKLQkJUHJlZFhhY3QtPk9sZENvbW1pdHRlZFN4YWN0 LT54bWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7Ci0JCVByZWRYYWN0LT5PbGRDb21taXR0 ZWRTeGFjdC0+ZmxhZ3MgPSBTWEFDVF9GTEFHX0NPTU1JVFRFRDsKLQkJUHJlZFhhY3QtPk9s ZENvbW1pdHRlZFN4YWN0LT5waWQgPSAwOwotCQlQcmVkWGFjdC0+T2xkQ29tbWl0dGVkU3hh Y3QtPnBncHJvY25vID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKLQl9Ci0JLyogVGhpcyBuZXZl ciBjaGFuZ2VzLCBzbyBsZXQncyBrZWVwIGEgbG9jYWwgY29weS4gKi8KLQlPbGRDb21taXR0 ZWRTeGFjdCA9IFByZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFjdDsKIAogCS8qCiAJICogQWxs b2NhdGUgaGFzaCB0YWJsZSBmb3IgU0VSSUFMSVpBQkxFWElEIHN0cnVjdHMuICBUaGlzIHN0 b3JlcyBwZXIteGlkCkBAIC0xMjgxLDIzICsxMjI1LDYgQEAgUHJlZGljYXRlTG9ja1NobWVt SW5pdCh2b2lkKQogCQkJCQkJCQkJIHJlcXVlc3RTaXplLAogCQkJCQkJCQkJICZmb3VuZCk7 CiAJQXNzZXJ0KGZvdW5kID09IElzVW5kZXJQb3N0bWFzdGVyKTsKLQlpZiAoIWZvdW5kKQot CXsKLQkJaW50CQkJaTsKLQotCQkvKiBjbGVhbiBldmVyeXRoaW5nLCBpbmNsdWRpbmcgdGhl IGVsZW1lbnRzICovCi0JCW1lbXNldChSV0NvbmZsaWN0UG9vbCwgMCwgcmVxdWVzdFNpemUp OwotCi0JCWRsaXN0X2luaXQoJlJXQ29uZmxpY3RQb29sLT5hdmFpbGFibGVMaXN0KTsKLQkJ UldDb25mbGljdFBvb2wtPmVsZW1lbnQgPSAoUldDb25mbGljdCkgKChjaGFyICopIFJXQ29u ZmxpY3RQb29sICsKLQkJCQkJCQkJCQkJCVJXQ29uZmxpY3RQb29sSGVhZGVyRGF0YVNpemUp OwotCQkvKiBBZGQgYWxsIGVsZW1lbnRzIHRvIGF2YWlsYWJsZSBsaXN0LCBjbGVhbi4gKi8K LQkJZm9yIChpID0gMDsgaSA8IG1heF9yd19jb25mbGljdHM7IGkrKykKLQkJewotCQkJZGxp c3RfcHVzaF90YWlsKCZSV0NvbmZsaWN0UG9vbC0+YXZhaWxhYmxlTGlzdCwKLQkJCQkJCQkm UldDb25mbGljdFBvb2wtPmVsZW1lbnRbaV0ub3V0TGluayk7Ci0JCX0KLQl9CiAKIAkvKgog CSAqIENyZWF0ZSBvciBhdHRhY2ggdG8gdGhlIGhlYWRlciBmb3IgdGhlIGxpc3Qgb2YgZmlu aXNoZWQgc2VyaWFsaXphYmxlCkBAIC0xMzA4LDggKzEyMzUsNiBAQCBQcmVkaWNhdGVMb2Nr U2htZW1Jbml0KHZvaWQpCiAJCQkJCQlzaXplb2YoZGxpc3RfaGVhZCksCiAJCQkJCQkmZm91 bmQpOwogCUFzc2VydChmb3VuZCA9PSBJc1VuZGVyUG9zdG1hc3Rlcik7Ci0JaWYgKCFmb3Vu ZCkKLQkJZGxpc3RfaW5pdChGaW5pc2hlZFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9ucyk7CiAK IAkvKgogCSAqIEluaXRpYWxpemUgdGhlIFNMUlUgc3RvcmFnZSBmb3Igb2xkIGNvbW1pdHRl ZCBzZXJpYWxpemFibGUKQEAgLTEzMzEsMTkgKzEyNTYsODggQEAgUHJlZGljYXRlTG9ja1No bWVtSW5pdCh2b2lkKQogCSAqLwogCXNlcmlhbENvbnRyb2wgPSAoU2VyaWFsQ29udHJvbCkK IAkJU2htZW1Jbml0U3RydWN0KCJTZXJpYWxDb250cm9sRGF0YSIsIHNpemVvZihTZXJpYWxD b250cm9sRGF0YSksICZmb3VuZCk7Ci0KIAlBc3NlcnQoZm91bmQgPT0gSXNVbmRlclBvc3Rt YXN0ZXIpOwotCWlmICghZm91bmQpCisKKwkvKgorCSAqIElmIHdlIGp1c3QgYXR0YWNoZWQg dG8gZXhpc3Rpbmcgc2hhcmVkIG1lbW9yeSAoRVhFQ19CQUNLRU5EKSwgd2UncmUgYWxsCisJ ICogZG9uZS4gIE90aGVyd2lzZSwgZHVyaW5nIHBvc3RtYXN0ZXIgc3RhcnR1cCBwcm9jZWVk IHRvIGluaXRpYWxpemUgdGhlCisJICogc2hhcmVkIG1lbW9yeS4KKwkgKi8KKwlpZiAoSXNV bmRlclBvc3RtYXN0ZXIpCiAJewotCQkvKgotCQkgKiBTZXQgY29udHJvbCBpbmZvcm1hdGlv biB0byByZWZsZWN0IGVtcHR5IFNMUlUuCi0JCSAqLwotCQlMV0xvY2tBY3F1aXJlKFNlcmlh bENvbnRyb2xMb2NrLCBMV19FWENMVVNJVkUpOwotCQlzZXJpYWxDb250cm9sLT5oZWFkUGFn ZSA9IC0xOwotCQlzZXJpYWxDb250cm9sLT5oZWFkWGlkID0gSW52YWxpZFRyYW5zYWN0aW9u SWQ7Ci0JCXNlcmlhbENvbnRyb2wtPnRhaWxYaWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsK LQkJTFdMb2NrUmVsZWFzZShTZXJpYWxDb250cm9sTG9jayk7CisJCS8qIFRoaXMgbmV2ZXIg Y2hhbmdlcywgc28gbGV0J3Mga2VlcCBhIGxvY2FsIGNvcHkuICovCisJCU9sZENvbW1pdHRl ZFN4YWN0ID0gUHJlZFhhY3QtPk9sZENvbW1pdHRlZFN4YWN0OworCQlyZXR1cm47CisJfQor CisJLyoKKwkgKiBSZXNlcnZlIGEgZHVtbXkgZW50cnkgaW4gdGhlIGhhc2ggdGFibGU7IHdl IHVzZSBpdCB0byBtYWtlIHN1cmUgdGhlcmUncworCSAqIGFsd2F5cyBvbmUgZW50cnkgYXZh aWxhYmxlIHdoZW4gd2UgbmVlZCB0byBzcGxpdCBvciBjb21iaW5lIGEgcGFnZSwKKwkgKiBi ZWNhdXNlIHJ1bm5pbmcgb3V0IG9mIHNwYWNlIHRoZXJlIGNvdWxkIG1lYW4gYWJvcnRpbmcg YQorCSAqIG5vbi1zZXJpYWxpemFibGUgdHJhbnNhY3Rpb24uCisJICovCisJKHZvaWQpIGhh c2hfc2VhcmNoKFByZWRpY2F0ZUxvY2tUYXJnZXRIYXNoLCAmU2NyYXRjaFRhcmdldFRhZywK KwkJCQkJICAgSEFTSF9FTlRFUiwgJmZvdW5kKTsKKwlBc3NlcnQoIWZvdW5kKTsKKworCS8q IEluaXRpYWxpemUgUHJlZFhhY3QgbGlzdCAqLworCWRsaXN0X2luaXQoJlByZWRYYWN0LT5h dmFpbGFibGVMaXN0KTsKKwlkbGlzdF9pbml0KCZQcmVkWGFjdC0+YWN0aXZlTGlzdCk7CisJ UHJlZFhhY3QtPlN4YWN0R2xvYmFsWG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCVBy ZWRYYWN0LT5TeGFjdEdsb2JhbFhtaW5Db3VudCA9IDA7CisJUHJlZFhhY3QtPldyaXRhYmxl U3hhY3RDb3VudCA9IDA7CisJUHJlZFhhY3QtPkxhc3RTeGFjdENvbW1pdFNlcU5vID0gRmly c3ROb3JtYWxTZXJDb21taXRTZXFObyAtIDE7CisJUHJlZFhhY3QtPkNhblBhcnRpYWxDbGVh clRocm91Z2ggPSAwOworCVByZWRYYWN0LT5IYXZlUGFydGlhbENsZWFyZWRUaHJvdWdoID0g MDsKKwlQcmVkWGFjdC0+ZWxlbWVudAorCQk9IChTRVJJQUxJWkFCTEVYQUNUICopICgoY2hh ciAqKSBQcmVkWGFjdCArIFByZWRYYWN0TGlzdERhdGFTaXplKTsKKwkvKiBBZGQgYWxsIGVs ZW1lbnRzIHRvIGF2YWlsYWJsZSBsaXN0LCBjbGVhbi4gKi8KKwlmb3IgKGludCBpID0gMDsg aSA8IG1heF9zZXJpYWxpemFibGVfeGFjdHM7IGkrKykKKwl7CisJCUxXTG9ja0luaXRpYWxp emUoJlByZWRYYWN0LT5lbGVtZW50W2ldLnBlclhhY3RQcmVkaWNhdGVMaXN0TG9jaywKKwkJ CQkJCSBMV1RSQU5DSEVfUEVSX1hBQ1RfUFJFRElDQVRFX0xJU1QpOworCQlkbGlzdF9wdXNo X3RhaWwoJlByZWRYYWN0LT5hdmFpbGFibGVMaXN0LCAmUHJlZFhhY3QtPmVsZW1lbnRbaV0u eGFjdExpbmspOwogCX0KKwlQcmVkWGFjdC0+T2xkQ29tbWl0dGVkU3hhY3QgPSBDcmVhdGVQ cmVkWGFjdCgpOworCVNldEludmFsaWRWaXJ0dWFsVHJhbnNhY3Rpb25JZChQcmVkWGFjdC0+ T2xkQ29tbWl0dGVkU3hhY3QtPnZ4aWQpOworCVByZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFj dC0+cHJlcGFyZVNlcU5vID0gMDsKKwlQcmVkWGFjdC0+T2xkQ29tbWl0dGVkU3hhY3QtPmNv bW1pdFNlcU5vID0gMDsKKwlQcmVkWGFjdC0+T2xkQ29tbWl0dGVkU3hhY3QtPlNlcU5vLmxh c3RDb21taXRCZWZvcmVTbmFwc2hvdCA9IDA7CisJZGxpc3RfaW5pdCgmUHJlZFhhY3QtPk9s ZENvbW1pdHRlZFN4YWN0LT5vdXRDb25mbGljdHMpOworCWRsaXN0X2luaXQoJlByZWRYYWN0 LT5PbGRDb21taXR0ZWRTeGFjdC0+aW5Db25mbGljdHMpOworCWRsaXN0X2luaXQoJlByZWRY YWN0LT5PbGRDb21taXR0ZWRTeGFjdC0+cHJlZGljYXRlTG9ja3MpOworCWRsaXN0X25vZGVf aW5pdCgmUHJlZFhhY3QtPk9sZENvbW1pdHRlZFN4YWN0LT5maW5pc2hlZExpbmspOworCWRs aXN0X2luaXQoJlByZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFjdC0+cG9zc2libGVVbnNhZmVD b25mbGljdHMpOworCVByZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFjdC0+dG9wWGlkID0gSW52 YWxpZFRyYW5zYWN0aW9uSWQ7CisJUHJlZFhhY3QtPk9sZENvbW1pdHRlZFN4YWN0LT5maW5p c2hlZEJlZm9yZSA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCVByZWRYYWN0LT5PbGRDb21t aXR0ZWRTeGFjdC0+eG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCVByZWRYYWN0LT5P bGRDb21taXR0ZWRTeGFjdC0+ZmxhZ3MgPSBTWEFDVF9GTEFHX0NPTU1JVFRFRDsKKwlQcmVk WGFjdC0+T2xkQ29tbWl0dGVkU3hhY3QtPnBpZCA9IDA7CisJUHJlZFhhY3QtPk9sZENvbW1p dHRlZFN4YWN0LT5wZ3Byb2NubyA9IElOVkFMSURfUFJPQ19OVU1CRVI7CisKKwkvKiBUaGlz IG5ldmVyIGNoYW5nZXMsIHNvIGxldCdzIGtlZXAgYSBsb2NhbCBjb3B5LiAqLworCU9sZENv bW1pdHRlZFN4YWN0ID0gUHJlZFhhY3QtPk9sZENvbW1pdHRlZFN4YWN0OworCisJLyogSW5p dGlhbGl6ZSB0aGUgcnctY29uZmxpY3QgcG9vbCAqLworCWRsaXN0X2luaXQoJlJXQ29uZmxp Y3RQb29sLT5hdmFpbGFibGVMaXN0KTsKKwlSV0NvbmZsaWN0UG9vbC0+ZWxlbWVudCA9IChS V0NvbmZsaWN0KSAoKGNoYXIgKikgUldDb25mbGljdFBvb2wgKworCQkJCQkJCQkJCQlSV0Nv bmZsaWN0UG9vbEhlYWRlckRhdGFTaXplKTsKKwkvKiBBZGQgYWxsIGVsZW1lbnRzIHRvIGF2 YWlsYWJsZSBsaXN0LCBjbGVhbi4gKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IG1heF9yd19j b25mbGljdHM7IGkrKykKKwl7CisJCWRsaXN0X3B1c2hfdGFpbCgmUldDb25mbGljdFBvb2wt PmF2YWlsYWJsZUxpc3QsCisJCQkJCQkmUldDb25mbGljdFBvb2wtPmVsZW1lbnRbaV0ub3V0 TGluayk7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgbGlzdCBvZiBmaW5pc2hlZCBzZXJp YWxpemFibGUgdHJhbnNhY3Rpb25zICovCisJZGxpc3RfaW5pdChGaW5pc2hlZFNlcmlhbGl6 YWJsZVRyYW5zYWN0aW9ucyk7CisKKwkvKiBJbml0aWFsaXplIFNlcmlhbENvbnRyb2wgdG8g cmVmbGVjdCBlbXB0eSBTTFJVLiAqLworCUxXTG9ja0FjcXVpcmUoU2VyaWFsQ29udHJvbExv Y2ssIExXX0VYQ0xVU0lWRSk7CisJc2VyaWFsQ29udHJvbC0+aGVhZFBhZ2UgPSAtMTsKKwlz ZXJpYWxDb250cm9sLT5oZWFkWGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJc2VyaWFs Q29udHJvbC0+dGFpbFhpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCUxXTG9ja1JlbGVh c2UoU2VyaWFsQ29udHJvbExvY2spOwogfQogCiAvKgotLSAKMi40Ny4zCgo= --------------cltwtZYaOf76t571xokamZd0 Content-Type: text/x-patch; charset=UTF-8; name="v9-0005-Introduce-a-new-mechanism-for-registering-shared-.patch" Content-Disposition: attachment; filename*0="v9-0005-Introduce-a-new-mechanism-for-registering-shared-.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBiYTk2MTk2ODkxYmVlZmU3NTg0MmY2MmMzOTc2MjhjMTc5ZDM4MTFjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMSBBcHIgMjAyNiAyMDowMTozOSArMDMwMApT dWJqZWN0OiBbUEFUQ0ggdjkgMDUvMTZdIEludHJvZHVjZSBhIG5ldyBtZWNoYW5pc20gZm9y IHJlZ2lzdGVyaW5nIHNoYXJlZAogbWVtb3J5IGFyZWFzCgpFYWNoIHNoYXJlZCBtZW1vcnkg YXJlYSBpcyByZWdpc3RlcmVkIHdpdGggYSAiZGVzY3JpcHRvciBzdHJ1Y3QiIHRoYXQKY29u dGFpbnMgcGFyYW1ldGVycyBsaWtlIG5hbWUgYW5kIHNpemUgb2YgdGhlIGFyZWEuIFRoZSBk ZXNjcmlwdG9yCnN0cnVjdCBtYWtlcyBpdCBlYXNpZXIgdG8gYWRkIG9wdGlvbmFsIGZpZWxk cyBpbiB0aGUgZnV0dXJlOyB0aGUKYWRkaXRpb25hbCBmaWVsZHMgY2FuIGp1c3QgYmUgbGVm dCBhcyB6ZXJvcy4KClRoaXMgbWVyZ2VzIHRoZSBzZXBhcmF0ZSBbU3Vic3lzdGVtXVNobWVt U2l6ZSgpIGFuZApbU3Vic3lzdGVtXVNobWVtSW5pdCgpIHBoYXNlcyBhdCBwb3N0bWFzdGVy IHN0YXJ0dXAuIEVhY2ggc3Vic3lzdGVtIGlzCm5vdyBjYWxsZWQgaW50byBqdXN0IG9uY2Us IGJlZm9yZSB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50IGhhcyBiZWVuCmFsbG9jYXRlZCwg dG8gcmVnaXN0ZXIgdGhlIHN1YnN5c3RlbSdzIHNoYXJlZCBtZW1vcnkgbmVlZHMuIFRoZQpy ZWdpc3RyYXRpb24gaW5jbHVkZXMgdGhlIHNpemUsIHdoaWNoIHJlcGxhY2VzIHRoZQpbU3Vi c3lzdGVtXVNobWVtU2l6ZSgpIGNhbGxzLCBhbmQgYSBwb2ludGVyIHRvIGFuIGluaXRpYWxp emF0aW9uCmNhbGxiYWNrIGZ1bmN0aW9uLCB3aGljaCByZXBsYWNlcyB0aGUgW1N1YnN5c3Rl bV1TaG1lbUluaXQoKQpjYWxscy4gVGhpcyBpcyBtb3JlIGVyZ29ub21pYywgYXMgeW91IG9u bHkgbmVlZCB0byBjYWxjdWxhdGUgdGhlIHNpemUKb25jZSwgd2hlbiB5b3UgcmVnaXN0ZXIg dGhlIHN0cnVjdC4KClRoaXMgcmVwbGFjZXMgU2htZW1Jbml0U3RydWN0KCkgYW5kIFNobWVt SW5pdEhhc2goKSwgd2hpY2ggYmVjb21lIGp1c3QKYmFja3dhcmRzLWNvbXBhdGliaWxpdHkg d3JhcHBlcnMgYXJvdW5kIHRoZSBuZXcgZnVuY3Rpb25zLiBJbiBmdXR1cmUKY29tbWl0cywg SSBwbGFuIHRvIHJlcGxhY2UgYWxsIFNobWVtSW5pdFN0cnVjdCgpIGFuZCBTaG1lbUluaXRI YXNoKCkKY2FsbHMgd2l0aCB0aGUgbmV3IGZ1bmN0aW9ucywgYWx0aG91Z2ggd2UnbGwgc3Rp bGwgbmVlZCB0byBrZWVwIHRoZW0KYXJvdW5kIGZvciBleHRlbnNpb25zLgoKUmV2aWV3ZWQt Ynk6IEFzaHV0b3NoIEJhcGF0IDxhc2h1dG9zaC5iYXBhdC5vc3NAZ21haWwuY29tPgpSZXZp ZXdlZC1ieTogWnNvbHQgUGFycmFnaSA8enNvbHQucGFycmFnaUBwZXJjb25hLmNvbT4KUmV2 aWV3ZWQtYnk6IFJvYmVydCBIYWFzIDxyb2JlcnRtaGFhc0BnbWFpbC5jb20+ClJldmlld2Vk LWJ5OiBEYW5pZWwgR3VzdGFmc3NvbiA8ZGFuaWVsQHllc3FsLnNlPgpEaXNjdXNzaW9uOiBo dHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL0NBRXhIVzV2TTFibmVMWWZn MHdHZUFhPTUyVWlKM3o0dktkM0FKNzJYOEZ3NmszS0tyZ0BtYWlsLmdtYWlsLmNvbQotLS0K IGRvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbCAgICAgICAgICB8ICAgNCArLQogZG9j L3NyYy9zZ21sL3hmdW5jLnNnbWwgICAgICAgICAgICAgICAgIHwgMTYyICsrKy0tCiBzcmMv YmFja2VuZC9ib290c3RyYXAvYm9vdHN0cmFwLmMgICAgICAgfCAgIDEgKwogc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jIHwgICA0ICsKIHNyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvcG9zdG1hc3Rlci5jICAgICB8ICAxOCArLQogc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvaXBjaS5jICAgICAgICAgIHwgIDI5ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9zaG1lbS5jICAgICAgICAgfCA4MDIgKysrKysrKysrKysrKysrKysrKystLS0tCiBzcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbV9oYXNoLmMgICAgfCAgODIgKystCiBzcmMvYmFj a2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jICAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQv dGNvcC9wb3N0Z3Jlcy5jICAgICAgICAgICAgIHwgICA5ICstCiBzcmMvaW5jbHVkZS9zdG9y YWdlL3NobWVtLmggICAgICAgICAgICAgfCAyMjQgKysrKysrLQogc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2Fpby90ZXN0X2Fpby5jICAgIHwgICAxIC0KIHNyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0ICAgICAgICB8ICAgOSArLQogMTMgZmlsZXMgY2hhbmdlZCwgMTE1NCBp bnNlcnRpb25zKCspLCAxOTQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9z Z21sL3N5c3RlbS12aWV3cy5zZ21sIGIvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21s CmluZGV4IDllZTFhMmJmYzZhLi4yZWJlYzY5MjhkNSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9z Z21sL3N5c3RlbS12aWV3cy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Mu c2dtbApAQCAtNDI1NCw4ICs0MjU0LDggQEAgU0VMRUNUICogRlJPTSBwZ19sb2NrcyBwbCBM RUZUIEpPSU4gcGdfcHJlcGFyZWRfeGFjdHMgcHB4CiAgIDxwYXJhPgogICAgQW5vbnltb3Vz IGFsbG9jYXRpb25zIGFyZSBhbGxvY2F0aW9ucyB0aGF0IGhhdmUgYmVlbiBtYWRlCiAgICB3 aXRoIDxsaXRlcmFsPlNobWVtQWxsb2MoKTwvbGl0ZXJhbD4gZGlyZWN0bHksIHJhdGhlciB0 aGFuIHZpYQotICAgPGxpdGVyYWw+U2htZW1Jbml0U3RydWN0KCk8L2xpdGVyYWw+IG9yCi0g ICA8bGl0ZXJhbD5TaG1lbUluaXRIYXNoKCk8L2xpdGVyYWw+LgorICAgPGxpdGVyYWw+U2ht ZW1SZXF1ZXN0U3RydWN0KCk8L2xpdGVyYWw+IG9yCisgICA8bGl0ZXJhbD5TaG1lbVJlcXVl c3RIYXNoKCk8L2xpdGVyYWw+LgogICA8L3BhcmE+CiAKICAgPHBhcmE+CmRpZmYgLS1naXQg YS9kb2Mvc3JjL3NnbWwveGZ1bmMuc2dtbCBiL2RvYy9zcmMvc2dtbC94ZnVuYy5zZ21sCmlu ZGV4IDcwZTgxNWI4YTJjLi5hZWQzZjJmMDA3MSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21s L3hmdW5jLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3hmdW5jLnNnbWwKQEAgLTM2MjgsNzEg KzM2MjgsMTMyIEBAIENSRUFURSBGVU5DVElPTiBtYWtlX2FycmF5KGFueWVsZW1lbnQpIFJF VFVSTlMgYW55YXJyYXkKICAgICAgIEFkZC1pbnMgY2FuIHJlc2VydmUgc2hhcmVkIG1lbW9y eSBvbiBzZXJ2ZXIgc3RhcnR1cC4gIFRvIGRvIHNvLCB0aGUKICAgICAgIGFkZC1pbidzIHNo YXJlZCBsaWJyYXJ5IG11c3QgYmUgcHJlbG9hZGVkIGJ5IHNwZWNpZnlpbmcgaXQgaW4KICAg ICAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1zaGFyZWQtcHJlbG9hZC1saWJyYXJpZXMiLz48aW5k ZXh0ZXJtPjxwcmltYXJ5PnNoYXJlZF9wcmVsb2FkX2xpYnJhcmllczwvcHJpbWFyeT48L2lu ZGV4dGVybT4uCi0gICAgICBUaGUgc2hhcmVkIGxpYnJhcnkgc2hvdWxkIGFsc28gcmVnaXN0 ZXIgYQotICAgICAgPGxpdGVyYWw+c2htZW1fcmVxdWVzdF9ob29rPC9saXRlcmFsPiBpbiBp dHMKLSAgICAgIDxmdW5jdGlvbj5fUEdfaW5pdDwvZnVuY3Rpb24+IGZ1bmN0aW9uLiAgVGhp cwotICAgICAgPGxpdGVyYWw+c2htZW1fcmVxdWVzdF9ob29rPC9saXRlcmFsPiBjYW4gcmVz ZXJ2ZSBzaGFyZWQgbWVtb3J5IGJ5Ci0gICAgICBjYWxsaW5nOgorICAgICAgVGhlIHNoYXJl ZCBsaWJyYXJ5IHNob3VsZCByZWdpc3RlciBjYWxsYmFja3MgaW4KKyAgICAgIGl0cyA8ZnVu Y3Rpb24+X1BHX2luaXQ8L2Z1bmN0aW9uPiBmdW5jdGlvbiwgd2hpY2ggdGhlbiBnZXQgY2Fs bGVkIGF0IHRoZQorICAgICAgcmlnaHQgc3RhZ2VzIG9mIHRoZSBzeXN0ZW0gc3RhcnR1cCB0 byBpbml0aWFsaXplIHRoZSBzaGFyZWQgbWVtb3J5LgorICAgICAgSGVyZSBpcyBhbiBleGFt cGxlOgogPHByb2dyYW1saXN0aW5nPgotdm9pZCBSZXF1ZXN0QWRkaW5TaG1lbVNwYWNlKFNp emUgc2l6ZSkKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICBFYWNoIGJhY2tlbmQgc2hvdWxk IG9idGFpbiBhIHBvaW50ZXIgdG8gdGhlIHJlc2VydmVkIHNoYXJlZCBtZW1vcnkgYnkKLSAg ICAgIGNhbGxpbmc6Ci08cHJvZ3JhbWxpc3Rpbmc+Ci12b2lkICpTaG1lbUluaXRTdHJ1Y3Qo Y29uc3QgY2hhciAqbmFtZSwgU2l6ZSBzaXplLCBib29sICpmb3VuZFB0cikKLTwvcHJvZ3Jh bWxpc3Rpbmc+Ci0gICAgICBJZiB0aGlzIGZ1bmN0aW9uIHNldHMgPGxpdGVyYWw+Zm91bmRQ dHI8L2xpdGVyYWw+IHRvCi0gICAgICA8bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4sIHRoZSBj YWxsZXIgc2hvdWxkIHByb2NlZWQgdG8gaW5pdGlhbGl6ZSB0aGUKLSAgICAgIGNvbnRlbnRz IG9mIHRoZSByZXNlcnZlZCBzaGFyZWQgbWVtb3J5LiAgSWYgPGxpdGVyYWw+Zm91bmRQdHI8 L2xpdGVyYWw+Ci0gICAgICBpcyBzZXQgdG8gPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4sIHRo ZSBzaGFyZWQgbWVtb3J5IHdhcyBhbHJlYWR5Ci0gICAgICBpbml0aWFsaXplZCBieSBhbm90 aGVyIGJhY2tlbmQsIGFuZCB0aGUgY2FsbGVyIG5lZWQgbm90IGluaXRpYWxpemUKLSAgICAg IGZ1cnRoZXIuCi0gICAgIDwvcGFyYT4KK3R5cGVkZWYgc3RydWN0IE15U2htZW1EYXRhIHsK KyAgICBMV0xvY2sgICAgICBsb2NrOyAgICAvKiBwcm90ZWN0cyB0aGUgZmllbGRzIGJlbG93 ICovCiAKLSAgICAgPHBhcmE+Ci0gICAgICBUbyBhdm9pZCByYWNlIGNvbmRpdGlvbnMsIGVh Y2ggYmFja2VuZCBzaG91bGQgdXNlIHRoZSBMV0xvY2sKLSAgICAgIDxmdW5jdGlvbj5BZGRp blNobWVtSW5pdExvY2s8L2Z1bmN0aW9uPiB3aGVuIGluaXRpYWxpemluZyBpdHMgYWxsb2Nh dGlvbgotICAgICAgb2Ygc2hhcmVkIG1lbW9yeSwgYXMgc2hvd24gaGVyZToKLTxwcm9ncmFt bGlzdGluZz4KLXN0YXRpYyBteXN0cnVjdCAqcHRyID0gTlVMTDsKLWJvb2wgICAgICAgIGZv dW5kOworICAgIC4uLiBzaGFyZWQgbWVtb3J5IGNvbnRlbnRzIC4uLgorfSBNeVNobWVtRGF0 YTsKKworc3RhdGljIE15U2htZW1EYXRhICpNeVNobWVtOyAgICAvKiBwb2ludGVyIHRvIHRo ZSBzdHJ1Y3QgaW4gc2hhcmVkIG1lbW9yeSAqLworCitzdGF0aWMgdm9pZCBteV9zaG1lbV9y ZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBteV9zaG1lbV9pbml0KHZvaWQgKmFy Zyk7CisKK2NvbnN0IFNobWVtQ2FsbGJhY2tzIG15X3NobWVtX2NhbGxiYWNrcyA9IHsKKyAg ICAucmVxdWVzdF9mbiA9IG15X3NobWVtX3JlcXVlc3QsCisgICAgLmluaXRfZm4gPSBteV9z aG1lbV9pbml0LAorfTsKKworLyoKKyAqIE1vZHVsZSBsb2FkIGNhbGxiYWNrCisgKi8KK3Zv aWQKK19QR19pbml0KHZvaWQpCit7CisgICAgLyoKKyAgICAgKiBJbiBvcmRlciB0byBjcmVh dGUgb3VyIHNoYXJlZCBtZW1vcnkgYXJlYSwgd2UgaGF2ZSB0byBiZSBsb2FkZWQgdmlhCisg ICAgICogc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzLgorICAgICAqLworICAgIGlmICghcHJv Y2Vzc19zaGFyZWRfcHJlbG9hZF9saWJyYXJpZXNfaW5fcHJvZ3Jlc3MpCisgICAgICAgIHJl dHVybjsKKworICAgIC8qIFJlZ2lzdGVyIG91ciBzaGFyZWQgbWVtb3J5IG5lZWRzICovCisg ICAgUmVnaXN0ZXJTaG1lbUNhbGxiYWNrcygmYW1wO215X3NobWVtX2NhbGxiYWNrcyk7Cit9 CisKKy8qIGNhbGxiYWNrIHRvIHJlcXVlc3QgICovCitzdGF0aWMgdm9pZAorbXlfc2htZW1f cmVxdWVzdCh2b2lkICphcmcpCit7CisgICAgLyogQSBwZXJzaXN0ZW50IGhhbmRsZSB0byB0 aGUgc2hhcmVkIG1lbW9yeSBhcmVhIGluIHRoaXMgYmFja2VuZCAqLworICAgIHN0YXRpYyBT aG1lbVN0cnVjdERlc2MgTXlTaG1lbURlc2M7CisKKyAgICBTaG1lbVJlcXVlc3RTdHJ1Y3Qo JmFtcDtNeVNobWVtRGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAgLm5hbWUgPSAiTXkg c2htZW0gYXJlYSIsCisgICAgICAgICAgICAgICAgICAgICAgIC5zaXplID0gc2l6ZW9mKE15 U2htZW1EYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgLnB0ciA9ICh2b2lkICoqKSAm YW1wO015U2htZW0sCisgICAgICAgICk7Cit9CiAKLUxXTG9ja0FjcXVpcmUoQWRkaW5TaG1l bUluaXRMb2NrLCBMV19FWENMVVNJVkUpOwotcHRyID0gU2htZW1Jbml0U3RydWN0KCJteSBz dHJ1Y3QgbmFtZSIsIHNpemUsICZhbXA7Zm91bmQpOwotaWYgKCFmb3VuZCkKKy8qIGNhbGxi YWNrIHRvIGluaXRpYWxpemUgdGhlIGNvbnRlbnRzIG9mIHRoZSBNeVNobWVtIGFyZWEgYXQg c3RhcnR1cCAqLworc3RhdGljIHZvaWQKK215X3NobWVtX2luaXQodm9pZCAqYXJnKQogewot ICAgIC4uLiBpbml0aWFsaXplIGNvbnRlbnRzIG9mIHNoYXJlZCBtZW1vcnkgLi4uCi0gICAg cHRyLT5sb2NrcyA9IEdldE5hbWVkTFdMb2NrVHJhbmNoZSgibXkgdHJhbmNoZSBuYW1lIik7 CisgICAgaW50ICAgICAgICAgdHJhbmNoZV9pZDsKKworICAgIC8qIEluaXRpYWxpemUgdGhl IGxvY2sgKi8KKyAgICB0cmFuY2hlX2lkID0gTFdMb2NrTmV3VHJhbmNoZUlkKCJteSB0cmFu Y2hlIG5hbWUiKTsKKyAgICBMV0xvY2tJbml0aWFsaXplKCZhbXA7TXlTaG1lbS0+bG9jaywg dHJhbmNoZV9pZCk7CisKKyAgICAuLi4gaW5pdGlhbGl6ZSB0aGUgcmVzdCBvZiBNeVNobWVt IGZpZWxkcyAuLi4KIH0KLUxXTG9ja1JlbGVhc2UoQWRkaW5TaG1lbUluaXRMb2NrKTsKKwog PC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIDxsaXRlcmFsPnNobWVtX3N0YXJ0dXBfaG9vazwv bGl0ZXJhbD4gcHJvdmlkZXMgYSBjb252ZW5pZW50IHBsYWNlIGZvciB0aGUKLSAgICAgIGlu aXRpYWxpemF0aW9uIGNvZGUsIGJ1dCBpdCBpcyBub3Qgc3RyaWN0bHkgcmVxdWlyZWQgdGhh dCBhbGwgc3VjaCBjb2RlCi0gICAgICBiZSBwbGFjZWQgaW4gdGhpcyBob29rLiAgT24gV2lu ZG93cyAoYW5kIGFueXdoZXJlIGVsc2Ugd2hlcmUKLSAgICAgIDxsaXRlcmFsPkVYRUNfQkFD S0VORDwvbGl0ZXJhbD4gaXMgZGVmaW5lZCksIGVhY2ggYmFja2VuZCBleGVjdXRlcyB0aGUK LSAgICAgIHJlZ2lzdGVyZWQgPGxpdGVyYWw+c2htZW1fc3RhcnR1cF9ob29rPC9saXRlcmFs PiBzaG9ydGx5IGFmdGVyIGl0Ci0gICAgICBhdHRhY2hlcyB0byBzaGFyZWQgbWVtb3J5LCBz byBhZGQtaW5zIHNob3VsZCBzdGlsbCBhY3F1aXJlCi0gICAgICA8ZnVuY3Rpb24+QWRkaW5T aG1lbUluaXRMb2NrPC9mdW5jdGlvbj4gd2l0aGluIHRoaXMgaG9vaywgYXMgc2hvd24gaW4g dGhlCi0gICAgICBleGFtcGxlIGFib3ZlLiAgT24gb3RoZXIgcGxhdGZvcm1zLCBvbmx5IHRo ZSBwb3N0bWFzdGVyIHByb2Nlc3MgZXhlY3V0ZXMKLSAgICAgIHRoZSA8bGl0ZXJhbD5zaG1l bV9zdGFydHVwX2hvb2s8L2xpdGVyYWw+LCBhbmQgZWFjaCBiYWNrZW5kIGF1dG9tYXRpY2Fs bHkKLSAgICAgIGluaGVyaXRzIHRoZSBwb2ludGVycyB0byBzaGFyZWQgbWVtb3J5LgorICAg ICAgVGhlIDxmdW5jdGlvbj5yZXF1ZXN0X2ZuPC9mdW5jdGlvbj4gY2FsbGJhY2sgaXMgY2Fs bGVkIGR1cmluZyBzeXN0ZW0KKyAgICAgIHN0YXJ0dXAsIGJlZm9yZSB0aGUgc2hhcmVkIG1l bW9yeSBoYXMgYmVlbiBhbGxvY2F0ZWQuIEl0IHNob3VsZCBjYWxsCisgICAgICA8ZnVuY3Rp b24+U2htZW1SZXF1ZXN0U3RydWN0KCk8L2Z1bmN0aW9uPiB0byByZWdpc3RlciB0aGUgYWRk LWluJ3MKKyAgICAgIHNoYXJlZCBtZW1vcnkgbmVlZHMuIE5vdGUgdGhhdCA8ZnVuY3Rpb24+ U2htZW1SZXF1ZXN0U3RydWN0KCk8L2Z1bmN0aW9uPgorICAgICAgZG9lc24ndCBpbW1lZGlh dGVseSBhbGxvY2F0ZSBvciBpbml0aWFsaXplIHRoZSBtZW1vcnksIGl0IG1lcmVseQorICAg ICAgcmVnaXN0ZXJzIHRoZSBzcGFjZSB0byBiZSBhbGxvY2F0ZWQgbGF0ZXIgaW4gdGhlIHN0 YXJ0dXAgc2VxdWVuY2UuICBXaGVuCisgICAgICB0aGUgbWVtb3J5IGlzIGFsbG9jYXRlZCwg aXQgaXMgaW5pdGlhbGl6ZWQgdG8gemVyby4gIEZvciBhbnkgbW9yZQorICAgICAgY29tcGxl eCBpbml0aWFsaXphdGlvbiwgc2V0IHRoZSA8ZnVuY3Rpb24+aW5pdF9mbigpPC9mdW5jdGlv bj4gY2FsbGJhY2ssCisgICAgICB3aGljaCB3aWxsIGJlIGNhbGxlZCBhZnRlciB0aGUgbWVt b3J5IGhhcyBiZWVuIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQKKyAgICAgIHRvIHplcm8s IGJ1dCBiZWZvcmUgYW55IG90aGVyIHByb2Nlc3NlcyBhcmUgcnVubmluZywgYW5kIHRodXMg bm8gbG9ja2luZworICAgICAgaXMgcmVxdWlyZWQuCiAgICAgIDwvcGFyYT4KLQogICAgICA8 cGFyYT4KLSAgICAgIEFuIGV4YW1wbGUgb2YgYSA8bGl0ZXJhbD5zaG1lbV9yZXF1ZXN0X2hv b2s8L2xpdGVyYWw+IGFuZAotICAgICAgPGxpdGVyYWw+c2htZW1fc3RhcnR1cF9ob29rPC9s aXRlcmFsPiBjYW4gYmUgZm91bmQgaW4KKyAgICAgIE9uIFdpbmRvd3MsIHRoZSA8ZnVuY3Rp b24+YXR0YWNoX2ZuPC9mdW5jdGlvbj4gY2FsbGJhY2ssIGlmIGFueSwgaXMKKyAgICAgIGFk ZGl0aW9uYWxseSBjYWxsZWQgYXQgZXZlcnkgYmFja2VuZCBzdGFydHVwLiAgSXQgY2FuIGJl IHVzZWQgdG8KKyAgICAgIGluaXRpYWxpemUgYWRkaXRpb25hbCBwZXItYmFja2VuZCBzdGF0 ZSByZWxhdGVkIHRvIHRoZSBzaGFyZWQgbWVtb3J5CisgICAgICBhcmVhIHRoYXQgaXMgaW5o ZXJpdGVkIHZpYSA8ZnVuY3Rpb24+Zm9yaygpPC9mdW5jdGlvbj4gb24gb3RoZXIgc3lzdGVt cy4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIEFuIGV4YW1wbGUgb2YgYWxs b2NhdGluZyBzaGFyZWQgbWVtb3J5IGNhbiBiZSBmb3VuZCBpbgogICAgICAgPGZpbGVuYW1l PmNvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jPC9maWxl bmFtZT4gaW4KICAgICAgIHRoZSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5h bWU+IHNvdXJjZSB0cmVlLgogICAgICA8L3BhcmE+CiAgICAgPC9zZWN0Mz4KIAogICAgIDxz ZWN0MyBpZD0ieGZ1bmMtc2hhcmVkLWFkZGluLWFmdGVyLXN0YXJ0dXAiPgotICAgICA8dGl0 bGU+UmVxdWVzdGluZyBTaGFyZWQgTWVtb3J5IEFmdGVyIFN0YXJ0dXA8L3RpdGxlPgorICAg ICA8dGl0bGU+UmVxdWVzdGluZyBTaGFyZWQgTWVtb3J5IEFmdGVyIFN0YXJ0dXAgd2l0aCA8 ZnVuY3Rpb24+U2htZW1SZXF1ZXN0U3RydWN0PC9mdW5jdGlvbj48L3RpdGxlPgorCisgICAg IDxwYXJhPgorICAgICAgVGhlIDxmdW5jdGlvbj5TaG1lbVJlcXVlc3RTdHJ1Y3QoKTwvZnVu Y3Rpb24+IGNhbiBhbHNvIGJlIGNhbGxlZCBhZnRlcgorICAgICAgc3lzdGVtIHN0YXJ0dXAs IHdoaWNoIGlzIHVzZWZ1bCB0byBhbGxvdyBzbWFsbCBhbGxvY2F0aW9ucyBpbiBhZGQtaW4K KyAgICAgIGxpYnJhcmllcyB0aGF0IGFyZSBub3Qgc3BlY2lmaWVkIGluCisgICAgICA8eHJl ZiBsaW5rZW5kPSJndWMtc2hhcmVkLXByZWxvYWQtbGlicmFyaWVzIi8+PGluZGV4dGVybT48 cHJpbWFyeT5zaGFyZWRfcHJlbG9hZF9saWJyYXJpZXM8L3ByaW1hcnk+PC9pbmRleHRlcm0+ LgorICAgICAgSG93ZXZlciwgYWZ0ZXIgc3RhcnR1cCB0aGUgYWxsb2NhdGlvbiBjYW4gZmFp bCBpZiB0aGVyZSBpcyBub3QgZW5vdWdoCisgICAgICBzaGFyZWQgbWVtb3J5IGF2YWlsYWJs ZS4gVGhlIHN5c3RlbSByZXNlcnZlcyBzb21lIG1lbW9yeSBmb3IgYWxsb2NhdGlvbnMKKyAg ICAgIGFmdGVyIHN0YXJ0dXAsIGJ1dCB0aGF0IHJlc2VydmF0aW9uIGlzIHNtYWxsLgorICAg ICA8L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAgQnkgZGVmYXVsdCwgPGZ1bmN0aW9uPlJl Z2lzdGVyU2htZW1DYWxsYmFja3MoKTwvZnVuY3Rpb24+IGZhaWxzIHdpdGggYW4KKyAgICAg IGVycm9yIGlmIGNhbGxlZCBhZnRlciBzeXN0ZW0gc3RhcnR1cC4gVG8gdXNlIGl0IGFmdGVy IHN0YXJ0dXAsIHlvdSBtdXN0CisgICAgICBzZXQgdGhlIDxsaXRlcmFsPlNITUVNX0NBTExC QUNLU19BTExPV19BRlRFUl9TVEFSVFVQPC9saXRlcmFsPiBmbGFnIGluCisgICAgICB0aGUg YXJndW1lbnQgPHN0cnVjdG5hbWU+U2htZW1DYWxsYmFja3M8L3N0cnVjdG5hbWU+IHN0cnVj dCB0bworICAgICAgYWNrbm93bGVkZ2UgdGhlIHJpc2suCisgICAgIDwvcGFyYT4KKyAgICAg PHBhcmE+CisgICAgICBXaGVuIDxmdW5jdGlvbj5SZWdpc3RlclNobWVtQ2FsbGJhY2tzKCk8 L2Z1bmN0aW9uPiBpcyBjYWxsZWQgYWZ0ZXIKKyAgICAgIHN0YXJ0dXAsIGl0IHdpbGwgaW1t ZWRpYXRlbHkgY2FsbCB0aGUgYXBwcm9wcmlhdGUgY2FsbGJhY2tzLCBkZXBlbmRpbmcKKyAg ICAgIG9uIHdoZXRoZXIgdGhlIHJlcXVlc3RlZCBtZW1vcnkgYXJlYXMgd2VyZSBhbHJlYWR5 IGluaXRpYWxpemVkIGJ5CisgICAgICBhbm90aGVyIGJhY2tlbmQuIFRoZSBjYWxsYmFja3Mg d2lsbCBiZSBjYWxsZWQgd2hpbGUgaG9sZGluZyBhbiBpbnRlcm5hbAorICAgICAgbG9jaywg d2hpY2ggcHJldmVudHMgY29uY3VycmVudCB0d28gYmFja2VuZHMgZnJvbSBpbml0aWFsaXph dGluZyB0aGUKKyAgICAgIG1lbW9yeSBhcmVhIGNvbmN1cnJlbnRseS4KKyAgICAgPC9wYXJh PgorICAgIDwvc2VjdDM+CisKKyAgICA8c2VjdDMgaWQ9InhmdW5jLXNoYXJlZC1hZGRpbi1k eW5hbWljIj4KKyAgICAgPHRpdGxlPkFsbG9jYXRpbmcgRHluYW1pYyBTaGFyZWQgTWVtb3J5 IEFmdGVyIFN0YXJ0dXA8L3RpdGxlPgogCiAgICAgIDxwYXJhPgogICAgICAgVGhlcmUgaXMg YW5vdGhlciwgbW9yZSBmbGV4aWJsZSBtZXRob2Qgb2YgcmVzZXJ2aW5nIHNoYXJlZCBtZW1v cnkgdGhhdAotICAgICAgY2FuIGJlIGRvbmUgYWZ0ZXIgc2VydmVyIHN0YXJ0dXAgYW5kIG91 dHNpZGUgYQotICAgICAgPGxpdGVyYWw+c2htZW1fcmVxdWVzdF9ob29rPC9saXRlcmFsPi4g IFRvIGRvIHNvLCBlYWNoIGJhY2tlbmQgdGhhdCB3aWxsCisgICAgICBjYW4gYmUgZG9uZSBh ZnRlciBzZXJ2ZXIgc3RhcnR1cC4gIFRvIGRvIHNvLCBlYWNoIGJhY2tlbmQgdGhhdCB3aWxs CiAgICAgICB1c2UgdGhlIHNoYXJlZCBtZW1vcnkgc2hvdWxkIG9idGFpbiBhIHBvaW50ZXIg dG8gaXQgYnkgY2FsbGluZzoKIDxwcm9ncmFtbGlzdGluZz4KIHZvaWQgKkdldE5hbWVkRFNN U2VnbWVudChjb25zdCBjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSwKQEAgLTM3MTEsMTAgKzM3 NzIsNyBAQCB2b2lkICpHZXROYW1lZERTTVNlZ21lbnQoY29uc3QgY2hhciAqbmFtZSwgc2l6 ZV90IHNpemUsCiAgICAgIDwvcGFyYT4KIAogICAgICA8cGFyYT4KLSAgICAgIFVubGlrZSBz aGFyZWQgbWVtb3J5IHJlc2VydmVkIGF0IHNlcnZlciBzdGFydHVwLCB0aGVyZSBpcyBubyBu ZWVkIHRvCi0gICAgICBhY3F1aXJlIDxmdW5jdGlvbj5BZGRpblNobWVtSW5pdExvY2s8L2Z1 bmN0aW9uPiBvciBvdGhlcndpc2UgdGFrZSBhY3Rpb24KLSAgICAgIHRvIGF2b2lkIHJhY2Ug Y29uZGl0aW9ucyB3aGVuIHJlc2VydmluZyBzaGFyZWQgbWVtb3J5IHdpdGgKLSAgICAgIDxm dW5jdGlvbj5HZXROYW1lZERTTVNlZ21lbnQ8L2Z1bmN0aW9uPi4gIFRoaXMgZnVuY3Rpb24g ZW5zdXJlcyB0aGF0IG9ubHkKKyAgICAgIDxmdW5jdGlvbj5HZXROYW1lZERTTVNlZ21lbnQ8 L2Z1bmN0aW9uPiBlbnN1cmVzIHRoYXQgb25seQogICAgICAgb25lIGJhY2tlbmQgYWxsb2Nh dGVzIGFuZCBpbml0aWFsaXplcyB0aGUgc2VnbWVudCBhbmQgdGhhdCBhbGwgb3RoZXIKICAg ICAgIGJhY2tlbmRzIHJlY2VpdmUgYSBwb2ludGVyIHRvIHRoZSBmdWxseSBhbGxvY2F0ZWQg YW5kIGluaXRpYWxpemVkCiAgICAgICBzZWdtZW50LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jIGIvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3Rz dHJhcC5jCmluZGV4IDM4ZWY2ODNkNGM3Li5jYTc1YWZlOGNjNyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jCisrKyBiL3NyYy9iYWNrZW5kL2Jvb3Rz dHJhcC9ib290c3RyYXAuYwpAQCAtMzcyLDYgKzM3Miw3IEBAIEJvb3RzdHJhcE1vZGVNYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10sIGJvb2wgY2hlY2tfb25seSkKIAogCUluaXRpYWxp emVGYXN0UGF0aExvY2tzKCk7CiAKKwlTaG1lbUNhbGxSZXF1ZXN0Q2FsbGJhY2tzKCk7CiAJ Q3JlYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlcygpOwogCiAJLyoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYyBiL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYwppbmRleCA0MzRlMDY0MzAyMi4uNzU0MjMx MDRiZTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tl bmQuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2xhdW5jaF9iYWNrZW5kLmMKQEAg LTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oIgog I2luY2x1ZGUgInN0b3JhZ2UvZHNtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pb193b3JrZXIu aCIKKyNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcGdfc2ht ZW0uaCIKICNpbmNsdWRlICJ0Y29wL2JhY2tlbmRfc3RhcnR1cC5oIgogI2luY2x1ZGUgInV0 aWxzL21lbXV0aWxzLmgiCkBAIC02NzIsNyArNjczLDEwIEBAIFN1YlBvc3RtYXN0ZXJNYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCiAKIAkvKiBSZXN0b3JlIGJhc2ljIHNoYXJlZCBt ZW1vcnkgcG9pbnRlcnMgKi8KIAlpZiAoVXNlZFNobWVtU2VnQWRkciAhPSBOVUxMKQorCXsK IAkJSW5pdFNobWVtQWxsb2NhdG9yKFVzZWRTaG1lbVNlZ0FkZHIpOworCQlTaG1lbUNhbGxS ZXF1ZXN0Q2FsbGJhY2tzKCk7CisJfQogCiAJLyoKIAkgKiBSdW4gdGhlIGFwcHJvcHJpYXRl IE1haW4gZnVuY3Rpb24KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9z dG1hc3Rlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKaW5kZXgg YWJmMGM5NzU2OWUuLjkxZTE2NTdiY2Y0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL3Bvc3RtYXN0ZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3Rt YXN0ZXIuYwpAQCAtOTUxLDcgKzk1MSwxNCBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKQogCUluaXRpYWxpemVGYXN0UGF0aExvY2tzKCk7CiAKIAkvKgotCSAq IEdpdmUgcHJlbG9hZGVkIGxpYnJhcmllcyBhIGNoYW5jZSB0byByZXF1ZXN0IGFkZGl0aW9u YWwgc2hhcmVkIG1lbW9yeS4KKwkgKiBBc2sgYWxsIHN1YnN5c3RlbXMsIGluY2x1ZGluZyBw cmVsb2FkZWQgbGlicmFyaWVzLCB0byByZWdpc3RlciB0aGVpcgorCSAqIHNoYXJlZCBtZW1v cnkgbmVlZHMuCisJICovCisJU2htZW1DYWxsUmVxdWVzdENhbGxiYWNrcygpOworCisJLyoK KwkgKiBBbHNvIGNhbGwgYW55IGxlZ2FjeSBzaG1lbSByZXF1ZXN0IGhvb2tzIHRoYXQgbWln aHQnYmUgYmVlbiBpbnN0YWxsZWQKKwkgKiBieSBwcmVsb2FkZWQgbGlicmFyaWVzLgogCSAq LwogCXByb2Nlc3Nfc2htZW1fcmVxdWVzdHMoKTsKIApAQCAtMzIyNyw3ICszMjM0LDE0IEBA IFBvc3RtYXN0ZXJTdGF0ZU1hY2hpbmUodm9pZCkKIAkJLyogcmUtcmVhZCBjb250cm9sIGZp bGUgaW50byBsb2NhbCBtZW1vcnkgKi8KIAkJTG9jYWxQcm9jZXNzQ29udHJvbEZpbGUodHJ1 ZSk7CiAKLQkJLyogcmUtY3JlYXRlIHNoYXJlZCBtZW1vcnkgYW5kIHNlbWFwaG9yZXMgKi8K KwkJLyoKKwkJICogUmUtaW5pdGlhbGl6ZSBzaGFyZWQgbWVtb3J5IGFuZCBzZW1hcGhvcmVz LiAgTm90ZTogV2UgZG9uJ3QgY2FsbAorCQkgKiBSZWdpc3RlckJ1aWx0aW5TaG1lbUNhbGxi YWNrcygpLCB3ZSBrZWVwIHRoZSBvbGQgcmVnaXN0cmF0aW9ucy4gIEluCisJCSAqIG9yZGVy IHRvIHJlLXJlZ2lzdGVyIHN0cnVjdHMgaW4gZXh0ZW5zaW9ucywgd2UnZCBuZWVkIHRvIHJl bG9hZAorCQkgKiBzaGFyZWQgcHJlbG9hZCBsaWJyYXJpZXMsIGFuZCB3ZSBkb24ndCB3YW50 IHRvIGRvIHRoYXQuCisJCSAqLworCQlSZXNldFNobWVtQWxsb2NhdG9yKCk7CisJCVNobWVt Q2FsbFJlcXVlc3RDYWxsYmFja3MoKTsKIAkJQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBo b3JlcygpOwogCiAJCVVwZGF0ZVBNU3RhdGUoUE1fU1RBUlRVUCk7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9pcGNpLmMKaW5kZXggZDY5MmQ0MTk4NDYuLjM0YWNhZWVlZmUwIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvaXBjaS5jCkBAIC05OSw4ICs5OSw5IEBAIENhbGN1bGF0ZVNobWVtU2l6ZSh2b2lk KQogCSAqIGR1cmluZyB0aGUgYWN0dWFsIGFsbG9jYXRpb24gcGhhc2UuCiAJICovCiAJc2l6 ZSA9IDEwMDAwMDsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgaGFzaF9lc3RpbWF0ZV9zaXpl KFNITUVNX0lOREVYX1NJWkUsCi0JCQkJCQkJCQkJCSBzaXplb2YoU2htZW1JbmRleEVudCkp KTsKKwlzaXplID0gYWRkX3NpemUoc2l6ZSwgU2htZW1HZXRSZXF1ZXN0ZWRTaXplKCkpOwor CisJLyogbGVnYWN5IHN1YnN5c3RlbXMgKi8KIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgZHNt X2VzdGltYXRlX3NpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIERTTVJlZ2lzdHJ5 U2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBCdWZmZXJNYW5hZ2VyU2ht ZW1TaXplKCkpOwpAQCAtMTc0LDYgKzE3NSwxMyBAQCBBdHRhY2hTaGFyZWRNZW1vcnlTdHJ1 Y3RzKHZvaWQpCiAJICovCiAJSW5pdGlhbGl6ZUZhc3RQYXRoTG9ja3MoKTsKIAorCS8qCisJ ICogQXR0YWNoIHRvIExXTG9ja3MgZmlyc3QuIFRoZXkgYXJlIG5lZWRlZCBieSBtb3N0IG90 aGVyIHN1YnN5c3RlbXMuCisJICovCisJTFdMb2NrU2htZW1Jbml0KCk7CisKKwkvKiBFc3Rh Ymxpc2ggcG9pbnRlcnMgdG8gYWxsIHNoYXJlZCBtZW1vcnkgYXJlYXMgaW4gdGhpcyBiYWNr ZW5kICovCisJU2htZW1BdHRhY2hSZXF1ZXN0ZWQoKTsKIAlDcmVhdGVPckF0dGFjaFNobWVt U3RydWN0cygpOwogCiAJLyoKQEAgLTIxOCw3ICsyMjYsMTcgQEAgQ3JlYXRlU2hhcmVkTWVt b3J5QW5kU2VtYXBob3Jlcyh2b2lkKQogCSAqLwogCUluaXRTaG1lbUFsbG9jYXRvcihzZWdo ZHIpOwogCi0JLyogSW5pdGlhbGl6ZSBzdWJzeXN0ZW1zICovCisJLyoKKwkgKiBJbml0aWFs aXplIExXTG9ja3MgZmlyc3QsIGluIGNhc2UgYW55IG9mIHRoZSBzaG1lbSBpbml0IGZ1bmN0 aW9uIHVzZQorCSAqIExXTG9ja3MuICAoTm90aGluZyBlbHNlIGNhbiBiZSBydW5uaW5nIGR1 cmluZyBzdGFydHVwLCBzbyB0aGV5IGRvbid0CisJICogbmVlZCB0byBkbyBhbnkgbG9ja2lu ZyB5ZXQsIGJ1dCB3ZSBuZXZlcnRoZWxlc3MgYWxsb3cgaXQuKQorCSAqLworCUxXTG9ja1No bWVtSW5pdCgpOworCisJLyogSW5pdGlhbGl6ZSBhbGwgc2htZW0gYXJlYXMgKi8KKwlTaG1l bUluaXRSZXF1ZXN0ZWQoKTsKKworCS8qIEluaXRpYWxpemUgbGVnYWN5IHN1YnN5c3RlbXMg Ki8KIAlDcmVhdGVPckF0dGFjaFNobWVtU3RydWN0cygpOwogCiAJLyogSW5pdGlhbGl6ZSBk eW5hbWljIHNoYXJlZCBtZW1vcnkgZmFjaWxpdGllcy4gKi8KQEAgLTI0OSwxMSArMjY3LDYg QEAgQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3Jlcyh2b2lkKQogc3RhdGljIHZvaWQK IENyZWF0ZU9yQXR0YWNoU2htZW1TdHJ1Y3RzKHZvaWQpCiB7Ci0JLyoKLQkgKiBTZXQgdXAg TFdMb2Nrcy4gIFRoZXkgYXJlIG5lZWRlZCBieSBtb3N0IG90aGVyIHN1YnN5c3RlbXMuCi0J ICovCi0JTFdMb2NrU2htZW1Jbml0KCk7Ci0KIAlkc21fc2htZW1faW5pdCgpOwogCURTTVJl Z2lzdHJ5U2htZW1Jbml0KCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL3NobWVtLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCmluZGV4IDE0 ODVmMWZmMzhmLi4xMmQwNjI5OWRjOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvc2htZW0uYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCkBA IC0xOSw0OCArMTksMTE1IEBACiAgKiBtZXRob2RzKS4gIFRoZSByb3V0aW5lcyBpbiB0aGlz IGZpbGUgYXJlIHVzZWQgZm9yIGFsbG9jYXRpbmcgYW5kCiAgKiBiaW5kaW5nIHRvIHNoYXJl ZCBtZW1vcnkgZGF0YSBzdHJ1Y3R1cmVzLgogICoKLSAqIE5PVEVTOgotICoJCShhKSBUaGVy ZSBhcmUgdGhyZWUga2luZHMgb2Ygc2hhcmVkIG1lbW9yeSBkYXRhIHN0cnVjdHVyZXMKLSAq CWF2YWlsYWJsZSB0byBQT1NUR1JFUzogZml4ZWQtc2l6ZSBzdHJ1Y3R1cmVzLCBxdWV1ZXMg YW5kIGhhc2gKLSAqCXRhYmxlcy4gIEZpeGVkLXNpemUgc3RydWN0dXJlcyBjb250YWluIHRo aW5ncyBsaWtlIGdsb2JhbCB2YXJpYWJsZXMKLSAqCWZvciBhIG1vZHVsZSBhbmQgc2hvdWxk IG5ldmVyIGJlIGFsbG9jYXRlZCBhZnRlciB0aGUgc2hhcmVkIG1lbW9yeQotICoJaW5pdGlh bGl6YXRpb24gcGhhc2UuICBIYXNoIHRhYmxlcyBoYXZlIGEgZml4ZWQgbWF4aW11bSBzaXpl LCBidXQKLSAqCXRoZWlyIGFjdHVhbCBzaXplIGNhbiB2YXJ5IGR5bmFtaWNhbGx5LiAgV2hl biBlbnRyaWVzIGFyZSBhZGRlZAotICoJdG8gdGhlIHRhYmxlLCBtb3JlIHNwYWNlIGlzIGFs bG9jYXRlZC4gIFF1ZXVlcyBsaW5rIGRhdGEgc3RydWN0dXJlcwotICoJdGhhdCBoYXZlIGJl ZW4gYWxsb2NhdGVkIGVpdGhlciB3aXRoaW4gZml4ZWQtc2l6ZSBzdHJ1Y3R1cmVzIG9yIGFz IGhhc2gKLSAqCWJ1Y2tldHMuICBFYWNoIHNoYXJlZCBkYXRhIHN0cnVjdHVyZSBoYXMgYSBz dHJpbmcgbmFtZSB0byBpZGVudGlmeQotICoJaXQgKGFzc2lnbmVkIGluIHRoZSBtb2R1bGUg dGhhdCBkZWNsYXJlcyBpdCkuCi0gKgotICoJCShiKSBEdXJpbmcgaW5pdGlhbGl6YXRpb24s IGVhY2ggbW9kdWxlIGxvb2tzIGZvciBpdHMKLSAqCXNoYXJlZCBkYXRhIHN0cnVjdHVyZXMg aW4gYSBoYXNoIHRhYmxlIGNhbGxlZCB0aGUgIlNobWVtIEluZGV4Ii4KLSAqCUlmIHRoZSBk YXRhIHN0cnVjdHVyZSBpcyBub3QgcHJlc2VudCwgdGhlIGNhbGxlciBjYW4gYWxsb2NhdGUK LSAqCWEgbmV3IG9uZSBhbmQgaW5pdGlhbGl6ZSBpdC4gIElmIHRoZSBkYXRhIHN0cnVjdHVy ZSBpcyBwcmVzZW50LAotICoJdGhlIGNhbGxlciAiYXR0YWNoZXMiIHRvIHRoZSBzdHJ1Y3R1 cmUgYnkgaW5pdGlhbGl6aW5nIGEgcG9pbnRlcgotICoJaW4gdGhlIGxvY2FsIGFkZHJlc3Mg c3BhY2UuCi0gKgkJVGhlIHNobWVtIGluZGV4IGhhcyB0d28gcHVycG9zZXM6IGZpcnN0LCBp dCBnaXZlcyB1cwotICoJYSBzaW1wbGUgbW9kZWwgb2YgaG93IHRoZSB3b3JsZCBsb29rcyB3 aGVuIGEgYmFja2VuZCBwcm9jZXNzCi0gKglpbml0aWFsaXplcy4gIElmIHNvbWV0aGluZyBp cyBwcmVzZW50IGluIHRoZSBzaG1lbSBpbmRleCwKLSAqCWl0IGlzIGluaXRpYWxpemVkLiAg SWYgaXQgaXMgbm90LCBpdCBpcyB1bmluaXRpYWxpemVkLiAgU2Vjb25kLAotICoJdGhlIHNo bWVtIGluZGV4IGFsbG93cyB1cyB0byBhbGxvY2F0ZSBzaGFyZWQgbWVtb3J5IG9uIGRlbWFu ZAotICoJaW5zdGVhZCBvZiB0cnlpbmcgdG8gcHJlYWxsb2NhdGUgc3RydWN0dXJlcyBhbmQg aGFyZC13aXJlIHRoZQotICoJc2l6ZXMgYW5kIGxvY2F0aW9ucyBpbiBoZWFkZXIgZmlsZXMu ICBJZiB5b3UgYXJlIHVzaW5nIGEgbG90Ci0gKglvZiBzaGFyZWQgbWVtb3J5IGluIGEgbG90 IG9mIGRpZmZlcmVudCBwbGFjZXMgKGFuZCBjaGFuZ2luZwotICoJdGhpbmdzIGR1cmluZyBk ZXZlbG9wbWVudCksIHRoaXMgaXMgaW1wb3J0YW50LgotICoKLSAqCQkoYykgSW4gc3RhbmRh cmQgVW5peC1pc2ggZW52aXJvbm1lbnRzLCBpbmRpdmlkdWFsIGJhY2tlbmRzIGRvIG5vdAot ICoJbmVlZCB0byByZS1lc3RhYmxpc2ggdGhlaXIgbG9jYWwgcG9pbnRlcnMgaW50byBzaGFy ZWQgbWVtb3J5LCBiZWNhdXNlCi0gKgl0aGV5IGluaGVyaXQgY29ycmVjdCB2YWx1ZXMgb2Yg dGhvc2UgdmFyaWFibGVzIHZpYSBmb3JrKCkgZnJvbSB0aGUKLSAqCXBvc3RtYXN0ZXIuICBI b3dldmVyLCB0aGlzIGRvZXMgbm90IHdvcmsgaW4gdGhlIEVYRUNfQkFDS0VORCBjYXNlLgot ICoJSW4gcG9ydHMgdXNpbmcgRVhFQ19CQUNLRU5ELCBuZXcgYmFja2VuZHMgaGF2ZSB0byBz ZXQgdXAgdGhlaXIgbG9jYWwKLSAqCXBvaW50ZXJzIHVzaW5nIHRoZSBtZXRob2QgZGVzY3Jp YmVkIGluIChiKSBhYm92ZS4KLSAqCi0gKgkJKGQpIG1lbW9yeSBhbGxvY2F0aW9uIG1vZGVs OiBzaGFyZWQgbWVtb3J5IGNhbiBuZXZlciBiZQotICoJZnJlZWQsIG9uY2UgYWxsb2NhdGVk LiAgIEVhY2ggaGFzaCB0YWJsZSBoYXMgaXRzIG93biBmcmVlIGxpc3QsCi0gKglzbyBoYXNo IGJ1Y2tldHMgY2FuIGJlIHJldXNlZCB3aGVuIGFuIGl0ZW0gaXMgZGVsZXRlZC4gIEhvd2V2 ZXIsCi0gKglpZiBvbmUgaGFzaCB0YWJsZSBncm93cyB2ZXJ5IGxhcmdlIGFuZCB0aGVuIHNo cmlua3MsIGl0cyBzcGFjZQotICoJY2Fubm90IGJlIHJlZGlzdHJpYnV0ZWQgdG8gb3RoZXIg dGFibGVzLiAgV2UgY291bGQgYnVpbGQgYSBzaW1wbGUKLSAqCWhhc2ggYnVja2V0IGdhcmJh Z2UgY29sbGVjdG9yIGlmIG5lZWQgYmUuICBSaWdodCBub3csIGl0IHNlZW1zCi0gKgl1bm5l Y2Vzc2FyeS4KKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGZhY2lsaXRpZXMgdG8gYWxsb2Nh dGUgZml4ZWQtc2l6ZSBzdHJ1Y3R1cmVzIGluIHNoYXJlZAorICogbWVtb3J5LCBmb3IgdGhp bmdzIGxpa2UgdmFyaWFibGVzIHNoYXJlZCBiZXR3ZWVuIGFsbCBiYWNrZW5kIHByb2Nlc3Nl cy4KKyAqIEVhY2ggc3VjaCBzdHJ1Y3R1cmUgaGFzIGEgc3RyaW5nIG5hbWUgdG8gaWRlbnRp ZnkgaXQsIHNwZWNpZmllZCB3aGVuIGl0IGlzCisgKiByZXF1ZXN0ZWQuICBzaG1lbV9oYXNo LmMgcHJvdmlkZXMgYSBzaGFyZWQgaGFzaCB0YWJsZSBpbXBsZW1lbnRhdGlvbiBvbiB0b3AK KyAqIG9mIHRoYXQuCisgKgorICogU2hhcmVkIG1lbW9yeSBhcmVhcyBzaG91bGQgdXN1YWxs eSBub3QgYmUgYWxsb2NhdGVkIGFmdGVyIHBvc3RtYXN0ZXIKKyAqIHN0YXJ0dXAsIGFsdGhv dWdoIHdlIGRvIGFsbG93IHNtYWxsIGFsbG9jYXRpb25zIGxhdGVyIGZvciB0aGUgYmVuZWZp dCBvZgorICogZXh0ZW5zaW9uIG1vZHVsZXMgdGhhdCBhcmUgbG9hZGVkIGFmdGVyIHN0YXJ0 dXAuICBEZXNwaXRlIHRoYXQgYWxsb3dhbmNlLAorICogZXh0ZW5zaW9ucyB0aGF0IG5lZWQg c2hhcmVkIG1lbW9yeSBzaG91bGQgYmUgYWRkZWQgaW4KKyAqIHNoYXJlZF9wcmVsb2FkX2xp YnJhcmllcywgYmVjYXVzZSB0aGUgYWxsb3dhbmNlIGlzIHF1aXRlIHNtYWxsIGFuZCB0aGVy ZSBpcworICogbm8gZ3VhcmFudGVlIHRoYXQgYW55IG1lbW9yeSBpcyBhdmFpbGFibGUgYWZ0 ZXIgc3RhcnR1cC4KKyAqCisgKiBOb3dhZGF5cywgdGhlcmUgaXMgYWxzbyBhIHRoaXJkIHdh eSB0byBhbGxvY2F0ZSBzaGFyZWQgbWVtb3J5IGNhbGxlZAorICogRHluYW1pYyBTaGFyZWQg TWVtb3J5LiAgU2VlIGRzbS5jIGZvciB0aGF0IGZhY2lsaXR5LiAgT25lIGJpZyBkaWZmZXJl bmNlCisgKiBiZXR3ZWVuIHRyYWRpdGlvbmFsIHNoYXJlZCBtZW1vcnkgaGFuZGxlZCBieSBz aG1lbS5jIGFuZCBkeW5hbWljIHNoYXJlZAorICogbWVtb3J5IGlzIHRoYXQgdHJhZGl0aW9u YWwgc2hhcmVkIG1lbW9yeSBhcmVhcyBhcmUgbWFwcGVkIHRvIHRoZSBzYW1lCisgKiBhZGRy ZXNzIGluIGFsbCBwcm9jZXNzZXMsIHNvIHlvdSBjYW4gdXNlIG5vcm1hbCBwb2ludGVycyBp biBzaGFyZWQgbWVtb3J5CisgKiBzdHJ1Y3RzLiAgV2l0aCBEeW5hbWljIFNoYXJlZCBNZW1v cnksIHlvdSBtdXN0IHVzZSBvZmZzZXRzIG9yIERTQSBwb2ludGVycworICogaW5zdGVhZC4K KyAqCisgKiBTaGFyZWQgbWVtb3J5IG1hbmFnZWQgYnkgc2htZW0uYyBjYW4gbmV2ZXIgYmUg ZnJlZWQsIG9uY2UgYWxsb2NhdGVkLiAgRWFjaAorICogaGFzaCB0YWJsZSBoYXMgaXRzIG93 biBmcmVlIGxpc3QsIHNvIGhhc2ggYnVja2V0cyBjYW4gYmUgcmV1c2VkIHdoZW4gYW4KKyAq IGl0ZW0gaXMgZGVsZXRlZC4gIEhvd2V2ZXIsIGlmIG9uZSBoYXNoIHRhYmxlIGdyb3dzIHZl cnkgbGFyZ2UgYW5kIHRoZW4KKyAqIHNocmlua3MsIGl0cyBzcGFjZSBjYW5ub3QgYmUgcmVk aXN0cmlidXRlZCB0byBvdGhlciB0YWJsZXMuICBXZSBjb3VsZCBidWlsZAorICogYSBzaW1w bGUgaGFzaCBidWNrZXQgZ2FyYmFnZSBjb2xsZWN0b3IgaWYgbmVlZCBiZS4gIFJpZ2h0IG5v dywgaXQgc2VlbXMKKyAqIHVubmVjZXNzYXJ5LgorICoKKyAqIFVzYWdlCisgKiAtLS0tLQor ICoKKyAqIFRvIGFsbG9jYXRlIHNoYXJlZCBtZW1vcnksIHlvdSBuZWVkIHRvIHJlZ2lzdGVy IGEgc2V0IG9mIGNhbGxiYWNrIGZ1bmN0aW9ucworICogd2hpY2ggaGFuZGxlIHRoZSBsaWZl Y3ljbGUgb2YgdGhlIGFsbG9jYXRpb24uICBJbiB0aGUgcmVxdWVzdF9mbiBjYWxsYmFjaywK KyAqIGZpbGwgaW4gYSBTaG1lbVJlcXVlc3RTdHJ1Y3RPcHRzIHN0cnVjdCB3aXRoIHRoZSBu YW1lLCBzaXplLCBhbmQgYW55IG90aGVyCisgKiBvcHRpb25zLCBhbmQgY2FsbCBTaG1lbVJl cXVlc3RTdHJ1Y3QoKS4gIExlYXZlIGFueSB1bnVzZWQgZmllbGRzIGFzIHplcm9zLgorICoK KyAqCXR5cGVkZWYgc3RydWN0IE15U2htZW1EYXRhIHsKKyAqCQkuLi4KKyAqCX0gTXlTaG1l bURhdGE7CisgKgorICoJc3RhdGljIE15U2htZW1EYXRhICpNeVNobWVtOworICoKKyAqCXN0 YXRpYyB2b2lkIG15X3NobWVtX3JlcXVlc3Qodm9pZCAqYXJnKTsKKyAqCXN0YXRpYyB2b2lk IG15X3NobWVtX2luaXQodm9pZCAqYXJnKTsKKyAqCisgKiAgY29uc3QgU2htZW1DYWxsYmFj a3MgTXlTaG1lbUNhbGxiYWNrcyA9IHsKKyAqCQkucmVxdWVzdF9mbiA9IG15X3NobWVtX3Jl cXVlc3QsCisgKgkJLmluaXRfZm4gPSBteV9zaG1lbV9pbml0LAorICoJfTsKKyAqCisgKglz dGF0aWMgdm9pZAorICoJbXlfc2htZW1fcmVxdWVzdCh2b2lkICphcmcpCisgKgl7CisgKgkJ c3RhdGljIFNobWVtU3RydWN0RGVzYyBNeVNobWVtRGVzYzsKKyAqCisgKgkJU2htZW1SZXF1 ZXN0U3RydWN0KCZNeVNobWVtRGVzYywgJihTaG1lbVJlcXVlc3RTdHJ1Y3RPcHRzKSB7Cisg KgkJCS5uYW1lID0gIk15IHNobWVtIGFyZWEiLAorICoJCQkuc2l6ZSA9IHNpemVvZihNeVNo bWVtRGF0YSksCisgKgkJCS5wdHIgPSAodm9pZCAqKikgJk15U2htZW0sCisgKgkJfSk7Cisg Kgl9CisgKgorICogSW4gYnVpbHRpbiBQb3N0Z3JlU1FMIGNvZGUsIGFkZCB0aGUgY2FsbGJh Y2tzIHRvIHRoZSBsaXN0IGluCisgKiBzcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3RlbWxp c3QuaC4gSW4gYW4gYWRkLWluIG1vZHVsZSwgeW91IGNhbiByZWdpc3RlcgorICogdGhlIGNh bGxiYWNrcyBieSBjYWxsaW5nIFJlZ2lzdGVyU2htZW1DYWxsYmFja3MoJk15U2htZW1DYWxs YmFja3MpIGluIHRoZQorICogZXh0ZW5zaW9uJ3MgX1BHX2luaXQoKSBmdW5jdGlvbi4KKyAq CisgKiBMaWZlY3ljbGUKKyAqIC0tLS0tLS0tLQorICoKKyAqIEluaXRpYWxpemluZyBzaGFy ZWQgbWVtb3J5IGhhcHBlbnMgaW4gbXVsdGlwbGUgcGhhc2VzLiBJbiB0aGUgZmlyc3QgcGhh c2UsCisgKiBkdXJpbmcgcG9zdG1hc3RlciBzdGFydHVwLCBhbGwgdGhlIHJlcXVlc3RfZm4g Y2FsbGJhY2tzIGFyZSBjYWxsZWQuICBPbmx5CisgKiBhZnRlciBhbGwgdGhlIHJlcXVlc3Rf Zm4gY2FsbGJhY2tzIGhhdmUgYmVlbiBjYWxsZWQgYW5kIGFsbCB0aGUgc2htZW0gYXJlYXMK KyAqIGhhdmUgYmVlbiByZXF1ZXN0ZWQgYnkgdGhlIFNobWVtUmVxdWVzdFN0cnVjdCgpIGNh bGxzIHdlIGtub3cgaG93IG11Y2gKKyAqIHNoYXJlZCBtZW1vcnkgd2UgbmVlZCBpbiB0b3Rh bC4gQWZ0ZXIgdGhhdCwgcG9zdG1hc3RlciBhbGxvY2F0ZXMgZ2xvYmFsCisgKiBzaGFyZWQg bWVtb3J5IHNlZ21lbnQsIGFuZCBjYWxscyBhbGwgdGhlIGluaXRfZm4gY2FsbGJhY2tzIHRv IGluaXRpYWxpemUKKyAqIGFsbCB0aGUgcmVxdWVzdGVkIHNobWVtIGFyZWFzLgorICoKKyAq IEluIHN0YW5kYXJkIFVuaXgtaXNoIGVudmlyb25tZW50cywgaW5kaXZpZHVhbCBiYWNrZW5k cyBkbyBub3QgbmVlZCB0bworICogcmUtZXN0YWJsaXNoIHRoZWlyIGxvY2FsIHBvaW50ZXJz IGludG8gc2hhcmVkIG1lbW9yeSwgYmVjYXVzZSB0aGV5IGluaGVyaXQKKyAqIGNvcnJlY3Qg dmFsdWVzIG9mIHRob3NlIHZhcmlhYmxlcyB2aWEgZm9yaygpIGZyb20gdGhlIHBvc3RtYXN0 ZXIuICBIb3dldmVyLAorICogdGhpcyBkb2VzIG5vdCB3b3JrIGluIHRoZSBFWEVDX0JBQ0tF TkQgY2FzZS4gIEluIHBvcnRzIHVzaW5nIEVYRUNfQkFDS0VORCwKKyAqIGJhY2tlbmQgc3Rh cnR1cCBhbHNvIGNhbGxzIHRoZSBzaG1lbV9yZXF1ZXN0IGNhbGxiYWNrcyB0byByZS1lc3Rh Ymxpc2ggdGhlCisgKiBrbm93bGVkZ2UgYWJvdXQgZWFjaCBzaGFyZWQgbWVtb3J5IGFyZWEs IHNldHMgdGhlIHBvaW50ZXIgdmFyaWFibGVzCisgKiAoKlNobWVtU3RydWN0RGVzYy0+cHRy KSwgYW5kIGNhbGxzIHRoZSBhdHRhY2hfZm4gY2FsbGJhY2ssIGlmIGFueSwgZm9yCisgKiBh ZGRpdGlvbmFsIHBlci1iYWNrZW5kIHNldHVwLgorICoKKyAqIExlZ2FjeSBTaG1lbUluaXRT dHJ1Y3QoKS9TaG1lbUluaXRIYXNoKCkgZnVuY3Rpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNobWVtSW5pdFN0 cnVjdCgpL1NobWVtSW5pdEhhc2goKSBpcyBhbm90aGVyIHdheSBvZiByZWdpc3RlcmluZyBz aG1lbQorICogYXJlYXMuICBJdCBwcmUtZGF0ZXMgdGhlIFNobWVtUmVxdWVzdFN0cnVjdCgp L1NobWVtUmVxdWVzdEhhc2goKSBmdW5jdGlvbnMsCisgKiBhbmQgc2hvdWxkIG5vdCBiZSB1 c2VkIGluIG5ldyBjb2RlLCBidXQgYXMgb2YgdGhpcyB3cml0aW5nIGl0IGlzIHN0aWxsCisg KiB3aWRlbHkgdXNlZCBpbiBleHRlbnNpb25zLgorICoKKyAqIFRvIGFsbG9jYXRlIGEgc2ht ZW0gYXJlYSB3aXRoIFNobWVtSW5pdFN0cnVjdCgpLCB5b3UgbmVlZCB0byBzZXBhcmF0ZWx5 CisgKiByZWdpc3RlciB0aGUgc2l6ZSBuZWVkZWQgZm9yIHRoZSBhcmVhIGJ5IGNhbGxpbmcg UmVxdWVzdEFkZGluU2htZW1TcGFjZSgpCisgKiBmcm9tIHRoZSBleHRlbnNpb24ncyBzaG1l bV9yZXF1ZXN0X2hvb2ssIGFuZCBhbGxvY2F0ZSB0aGUgYXJlYSBieSBjYWxsaW5nCisgKiBT aG1lbUluaXRTdHJ1Y3QoKSBmcm9tIHRoZSBleHRlbnNpb24ncyBzaG1lbV9zdGFydHVwX2hv b2suICBUaGVyZSBhcmUgbm8KKyAqIGluaXQvYXR0YWNoIGNhbGxiYWNrcy4gIEluc3RlYWQs IHRoZSBjYWxsZXIgb2YgU2htZW1Jbml0U3RydWN0KCkgbXVzdCBjaGVjaworICogdGhlIHJl dHVybiBzdGF0dXMgb2YgU2htZW1Jbml0U3RydWN0KCkgYW5kIGluaXRpYWxpemUgdGhlIHN0 cnVjdCBpZiBpdCB3YXMKKyAqIG5vdCBwcmV2aW91c2x5IGluaXRpYWxpemVkLgorICoKKyAq IENhbGxpbmcgU2htZW1BbGxvYygpIGRpcmVjdGx5CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICoKKyAqIFRoZXJlJ3MgYSBtb3JlIGxvdy1sZXZlbCB3YXkgb2YgYWxs b2NhdGluZyBzaGFyZWQgbWVtb3J5IHRvbzogeW91IGNhbiBjYWxsCisgKiBTaG1lbUFsbG9j KCkgZGlyZWN0bHkuICBJdCdzIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBoaWdoZXIgbGV2ZWwg bWVjaGFuaXNtcywKKyAqIGFuZCBzaG91bGQgZ2VuZXJhbGx5IG5vdCBiZSBjYWxsZWQgZGly ZWN0bHkuCiAgKi8KIAogI2luY2x1ZGUgInBvc3RncmVzLmgiCkBAIC03OSw2ICsxNDYsNzYg QEAKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL3R1cGxl c3RvcmUuaCIKIAorLyoKKyAqIFJlZ2lzdGVyZWQgY2FsbGJhY2tzLgorICoKKyAqIER1cmlu ZyBwb3N0bWFzdGVyIHN0YXJ0dXAsIHdlIGFjY3VtdWxhdGUgdGhlIGNhbGxiYWNrcyBmcm9t IGFsbCBzdWJzeXN0ZW1zCisgKiBpbiB0aGlzIGxpc3QuCisgKgorICogVGhpcyBpcyBpbiBw cm9jZXNzIHByaXZhdGUgbWVtb3J5LCBhbHRob3VnaCBvbiBVbml4LWxpa2Ugc3lzdGVtcywg d2UgZXhwZWN0CisgKiBhbGwgdGhlIHJlZ2lzdHJhdGlvbnMgdG8gaGFwcGVuIGF0IHBvc3Rt YXN0ZXIgc3RhcnR1cCB0aW1lIGFuZCBiZSBpbmhlcml0ZWQKKyAqIGJ5IGFsbCB0aGUgY2hp bGQgcHJvY2Vzc2VzIHZpYSBmb3JrKCkuCisgKi8KK3N0YXRpYyBMaXN0ICpyZWdpc3RlcmVk X3NobWVtX2NhbGxiYWNrczsKKworLyoKKyAqIEluIHRoZSBzaG1lbSByZXF1ZXN0IHBoYXNl LCBhbGwgdGhlIHNobWVtIGFyZWFzIHJlcXVlc3RlZCB3aXRoIHRoZQorICogU2htZW1SZXF1 ZXN0KigpIGZ1bmN0aW9ucyBhcmUgYWNjdW11bGF0ZWQgaGVyZS4KKyAqLwordHlwZWRlZiBz dHJ1Y3QKK3sKKwlTaG1lbVN0cnVjdERlc2MgKmRlc2M7CisJU2htZW1TdHJ1Y3RPcHRzICpv cHRpb25zOworCVNobWVtQXJlYUtpbmQga2luZDsKK30gU2htZW1SZXF1ZXN0OworCitzdGF0 aWMgTGlzdCAqcGVuZGluZ19zaG1lbV9yZXF1ZXN0czsKKworLyoKKyAqIFBlci1wcm9jZXNz IHN0YXRlIG1hY2hpbmUsIGZvciBzYW5pdHkgY2hlY2tpbmcgdGhhdCB3ZSBkbyB0aGluZ3Mg aW4gdGhlCisgKiByaWdodCBvcmRlci4KKyAqCisgKiBQb3N0bWFzdGVyOgorICogICBJTklU SUFMIC0+IFJFUVVFU1RJTkcgLT4gSU5JVElBTElaSU5HIC0+IERPTkUKKyAqCisgKiBCYWNr ZW5kcyBpbiBFWEVDX0JBQ0tFTkQgbW9kZToKKyAqICAgSU5JVElBTCAtPiBSRVFVRVNUSU5H IC0+IEFUVEFDSElORyAtPiBET05FCisgKgorICogTGF0ZSByZXF1ZXN0OgorICogICBET05F IC0+IFJFUVVFU1RJTkcgLT4gQUZURVJfU1RBUlRVUF9BVFRBQ0hfT1JfSU5JVCAtPiBET05F CisgKi8KK2VudW0gc2htZW1fcmVxdWVzdF9zdGF0ZQoreworCS8qIEluaXRpYWwgc3RhdGUg Ki8KKwlTUlNfSU5JVElBTCwKKworCS8qCisJICogV2hlbiB3ZSBzdGFydCBjYWxsaW5nIHRo ZSBzaG1lbV9yZXF1ZXN0IGNhbGxiYWNrcywgd2UgZW50ZXIgdGhlCisJICogU1JTX1JFUVVF U1RJTkcgcGhhc2UuICBBbGwgU2htZW1SZXF1ZXN0U3RydWN0IGNhbGxzIGhhcHBlbiBpbiB0 aGlzCisJICogc3RhdGUuCisJICovCisJU1JTX1JFUVVFU1RJTkcsCisKKwkvKgorCSAqIFBv c3RtYXN0ZXIgaGFzIGZpbmlzaGVkIGFsbCBzaG1lbSByZXF1ZXN0cywgYW5kIGlzIG5vdyBp bml0aWFsaXppbmcgdGhlCisJICogc2hhcmVkIG1lbW9yeSBzZWdtZW50LiAgaW5pdF9mbiBj YWxsYmFja3MgYXJlIGNhbGxlZCBpbiB0aGlzIHN0YXRlLgorCSAqLworCVNSU19JTklUSUFM SVpJTkcsCisKKwkvKgorCSAqIEEgcG9zdG1hc3RlciBjaGlsZCBwcm9jZXNzIGlzIHN0YXJ0 aW5nIHVwLiAgYXR0YWNoX2ZuIGNhbGxiYWNrcyBhcmUKKwkgKiBjYWxsZWQgaW4gdGhpcyBz dGF0ZS4KKwkgKi8KKwlTUlNfQVRUQUNISU5HLAorCisJLyogQW4gYWZ0ZXItc3RhcnR1cCBh bGxvY2F0aW9uIG9yIGF0dGFjaG1lbnQgaXMgaW4gcHJvZ3Jlc3MuICovCisJU1JTX0FGVEVS X1NUQVJUVVBfQVRUQUNIX09SX0lOSVQsCisKKwkvKiBOb3JtYWwgc3RhdGUgYWZ0ZXIgc2ht ZW0gaW5pdGlhbGl6YXRpb24gLyBhdHRhY2htZW50ICovCisJU1JTX0RPTkUsCit9Oworc3Rh dGljIGVudW0gc2htZW1fcmVxdWVzdF9zdGF0ZSBzaG1lbV9yZXF1ZXN0X3N0YXRlID0gU1JT X0lOSVRJQUw7CisKIC8qCiAgKiBUaGlzIGlzIHRoZSBmaXJzdCBkYXRhIHN0cnVjdHVyZSBz dG9yZWQgaW4gdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVudCwgYXQKICAqIHRoZSBvZmZzZXQg dGhhdCBQR1NobWVtSGVhZGVyLT5jb250ZW50X29mZnNldCBwb2ludHMgdG8uICBBbGxvY2F0 aW9ucyBieQpAQCAtMTA5LDI1ICsyNDYsMzk0IEBAIHN0YXRpYyB2b2lkICpTaG1lbUJhc2U7 CQkJLyogc3RhcnQgYWRkcmVzcyBvZiBzaGFyZWQgbWVtb3J5ICovCiBzdGF0aWMgdm9pZCAq U2htZW1FbmQ7CQkJLyogZW5kKzEgYWRkcmVzcyBvZiBzaGFyZWQgbWVtb3J5ICovCiAKIHN0 YXRpYyBTaG1lbUFsbG9jYXRvckRhdGEgKlNobWVtQWxsb2NhdG9yOwotc3RhdGljIEhUQUIg KlNobWVtSW5kZXggPSBOVUxMOyAvKiBwcmltYXJ5IGluZGV4IGhhc2h0YWJsZSBmb3Igc2ht ZW0gKi8KKworLyoKKyAqIFNobWVtSW5kZXggaXMgYSBnbG9iYWwgZGlyZWN0b3J5IG9mIHNo bWVtIGFyZWFzLCBpdHNlbGYgYWxzbyBzdG9yZWQgaW4gdGhlCisgKiBzaGFyZWQgbWVtb3J5 LgorICovCitzdGF0aWMgSFRBQiAqU2htZW1JbmRleDsKKworIC8qIG1heCBzaXplIG9mIGRh dGEgc3RydWN0dXJlIHN0cmluZyBuYW1lICovCisjZGVmaW5lIFNITUVNX0lOREVYX0tFWVNJ WkUJCSAoNDgpCisKKy8qCisgKiAjIG9mIGFkZGl0aW9uYWwgZW50cmllcyB0byByZXNlcnZl IGluIHRoZSBzaG1lbSBpbmRleCB0YWJsZSwgZm9yCisgKiBhbGxvY2F0aW9ucyBhZnRlciBw b3N0bWFzdGVyIHN0YXJ0dXAuICAoVGhpcyBpcyBub3QgYSBoYXJkIGxpbWl0LCB0aGUgaGFz aAorICogdGFibGUgY2FuIGdyb3cgbGFyZ2VyIHRoYW4gdGhhdCBpZiB0aGVyZSBpcyBzaGFy ZWQgbWVtb3J5IGF2YWlsYWJsZSkKKyAqLworI2RlZmluZSBTSE1FTV9JTkRFWF9BRERJVElP TkFMX1NJWkUJCSAoNjQpCisKKy8qIHRoaXMgaXMgYSBoYXNoIGJ1Y2tldCBpbiB0aGUgc2ht ZW0gaW5kZXggdGFibGUgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJY2hhcgkJa2V5W1NITUVN X0lOREVYX0tFWVNJWkVdOwkvKiBzdHJpbmcgbmFtZSAqLworCXZvaWQJICAgKmxvY2F0aW9u OwkJLyogbG9jYXRpb24gaW4gc2hhcmVkIG1lbSAqLworCVNpemUJCXNpemU7CQkJLyogIyBi eXRlcyByZXF1ZXN0ZWQgZm9yIHRoZSBzdHJ1Y3R1cmUgKi8KKwlTaXplCQlhbGxvY2F0ZWRf c2l6ZTsgLyogIyBieXRlcyBhY3R1YWxseSBhbGxvY2F0ZWQgKi8KK30gU2htZW1JbmRleEVu dDsKIAogLyogVG8gZ2V0IHJlbGlhYmxlIHJlc3VsdHMgZm9yIE5VTUEgaW5xdWlyeSB3ZSBu ZWVkIHRvICJ0b3VjaCBwYWdlcyIgb25jZSAqLwogc3RhdGljIGJvb2wgZmlyc3ROdW1hVG91 Y2ggPSB0cnVlOwogCitzdGF0aWMgYm9vbCBBdHRhY2hPckluaXRTaG1lbUluZGV4RW50cnko U2htZW1SZXF1ZXN0ICpyZXF1ZXN0LAorCQkJCQkJCQkJCWJvb2wgbWF5X2luaXQsIGJvb2wg bWF5X2F0dGFjaCk7CisKIERhdHVtCQlwZ19udW1hX2F2YWlsYWJsZShQR19GVU5DVElPTl9B UkdTKTsKIAorLyoKKyAqCVNobWVtUmVxdWVzdFN0cnVjdCgpIC0tLSByZXF1ZXN0IGEgbmFt ZWQgc2hhcmVkIG1lbW9yeSBhcmVhCisgKgorICogU3Vic3lzdGVtcyBjYWxsIHRoaXMgdG8g cmVnaXN0ZXIgdGhlaXIgc2hhcmVkIG1lbW9yeSBuZWVkcy4gIFRoaXMgaXMKKyAqIHVzdWFs bHkgZG9uZSBlYXJseSBpbiBwb3N0bWFzdGVyIHN0YXJ0dXAsIGJlZm9yZSB0aGUgc2hhcmVk IG1lbW9yeSBzZWdtZW50CisgKiBoYXMgYmVlbiBjcmVhdGVkLCBzbyB0aGF0IHRoZSBzaXpl IGNhbiBiZSBpbmNsdWRlZCBpbiB0aGUgZXN0aW1hdGUgZm9yCisgKiB0b3RhbCBhbW91bnQg b2Ygc2hhcmVkIG1lbW9yeSBuZWVkZWQuICBXZSBzZXQgYXNpZGUgYSBzbWFsbCBhbW91bnQg b2YKKyAqIG1lbW9yeSBmb3IgYWxsb2NhdGlvbnMgdGhhdCBoYXBwZW4gbGF0ZXIsIGZvciB0 aGUgYmVuZWZpdCBvZiBub24tcHJlbG9hZGVkCisgKiBleHRlbnNpb25zLCBidXQgdGhhdCBz aG91bGQgbm90IGJlIHJlbGllZCB1cG9uLgorICoKKyAqIFRoaXMgZG9lcyBub3QgeWV0IGFs bG9jYXRlIHRoZSBtZW1vcnksIGJ1dCBtZXJlbHkgcmVnaXN0ZXIgdGhlIG5lZWQgZm9yIGl0 LgorICogVGhlIGFjdHVhbCBhbGxvY2F0aW9uIGhhcHBlbnMgbGF0ZXIgaW4gdGhlIHBvc3Rt YXN0ZXIgc3RhcnR1cCBzZXF1ZW5jZS4KKyAqCisgKiBUaGlzIG11c3QgYmUgY2FsbGVkIGZy b20gYSBzaG1lbV9yZXF1ZXN0IGNhbGxiYWNrIGZ1bmN0aW9uLCByZWdpc3RlcmVkIHdpdGgK KyAqIFJlZ2lzdGVyU2htZW1DYWxsYmFja3MoKS4gIFRoaXMgZW5mb3JjZXMgYSBjb2Rpbmcg cGF0dGVybiB0aGF0IHdvcmtzIHRoZQorICogc2FtZSBpbiBub3JtYWwgVW5peCBzeXN0ZW1z IGFuZCB3aXRoIEVYRUNfQkFDS0VORC4gIE9uIFVuaXggc3lzdGVtcywgdGhlCisgKiBzaG1l bV9yZXF1ZXN0IGNhbGxiYWNrcyBhcmUgY2FsbGVkIG9uY2UsIGVhcmx5IGluIHBvc3RtYXN0 ZXIgc3RhcnR1cCwgYW5kCisgKiB0aGUgY2hpbGQgcHJvY2Vzc2VzIGluaGVyaXQgdGhlIHN0 cnVjdCBkZXNjcmlwdG9ycyBhbmQgYW55IG90aGVyCisgKiBwZXItcHJvY2VzcyBzdGF0ZSBm cm9tIHRoZSBwb3N0bWFzdGVyLiAgSW4gRVhFQ19CQUNLRU5EIG1vZGUsIHNobWVtX3JlcXVl c3QKKyAqIGNhbGxiYWNrcyBhcmUgKmFsc28qIGNhbGxlZCBpbiBlYWNoIGJhY2tlbmQsIGF0 IGJhY2tlbmQgc3RhcnR1cCwgdG8KKyAqIHJlLWVzdGFibGlzaCB0aGUgc3RydWN0IGRlc2Ny aXB0b3JzLiAgQnkgY2FsbGluZyB0aGUgc2FtZSBmdW5jdGlvbiBpbiBib3RoCisgKiBjYXNl cywgd2UgZW5zdXJlIHRoYXQgYWxsIHRoZSBzaG1lbSBhcmVhcyBhcmUgcmVnaXN0ZXJlZCB0 aGUgc2FtZSB3YXkgaW4KKyAqIGFsbCBwcm9jZXNzZXMuCisgKgorICogJ2Rlc2MnIGlzIGEg YmFja2VuZC1wcml2YXRlIGhhbmRsZSBmb3IgdGhlIHNoYXJlZCBtZW1vcnkgYXJlYS4KKyAq CisgKiAnb3B0aW9ucycgZGVmaW5lcyB0aGUgbmFtZSBhbmQgc2l6ZSBvZiB0aGUgYXJlYSwg YW5kIGFueSBvdGhlciBvcHRpb25hbAorICogZmVhdHVyZXMuICBMZWF2ZSB1bnVzZWQgb3B0 aW9ucyBhcyB6ZXJvcy4gIFRoZSBvcHRpb25zIGFyZSBjb3BpZWQgdG8KKyAqIGxvbmdlci1s aXZlZCBtZW1vcnksIHNvIGl0IGRvZXNuJ3QgbmVlZCB0byBsaXZlIGFmdGVyIHRoZQorICog U2htZW1SZXF1ZXN0U3RydWN0KCkgY2FsbCBhbmQgY2FuIHBvaW50IHRvIGEgbG9jYWwgdmFy aWFibGUgaW4gdGhlIGNhbGxpbmcKKyAqIGZ1bmN0aW9uLiAgVGhlICduYW1lJyBtdXN0IHBv aW50IHRvIGEgbG9uZy1saXZlZCBzdHJpbmcgdGhvdWdoLCBvbmx5IHRoZQorICogcG9pbnRl ciB0byBpdCBpcyBjb3BpZWQuCisgKi8KK3ZvaWQKK1NobWVtUmVxdWVzdFN0cnVjdFdpdGhP cHRzKFNobWVtU3RydWN0RGVzYyAqZGVzYywgY29uc3QgU2htZW1TdHJ1Y3RPcHRzICpvcHRp b25zKQoreworCVNobWVtU3RydWN0T3B0cyAqb3B0aW9uc19jb3B5OworCisJb3B0aW9uc19j b3B5ID0gTWVtb3J5Q29udGV4dEFsbG9jKFRvcE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkg IHNpemVvZihTaG1lbVN0cnVjdE9wdHMpKTsKKwltZW1jcHkob3B0aW9uc19jb3B5LCBvcHRp b25zLCBzaXplb2YoU2htZW1TdHJ1Y3RPcHRzKSk7CisKKwlTaG1lbVJlcXVlc3RJbnRlcm5h bChkZXNjLCBvcHRpb25zX2NvcHksIFNITUVNX0tJTkRfU1RSVUNUKTsKK30KKworLyoKKyAq IEludGVybmFsIHdvcmtob3JzZSBvZiBTaG1lbVJlcXVlc3RTdHJ1Y3QoKSBhbmQgU2htZW1S ZXF1ZXN0SGFzaCgpLgorICoKKyAqIE5vdGU6ICdkZXNjJyBhbmQgJ29wdGlvbnMnIG11c3Qg bGl2ZSB1bnRpbCB0aGUgaW5pdC9hdHRhY2ggY2FsbGJhY2tzIGhhdmUKKyAqIGJlZW4gY2Fs bGVkLiAgVW5saWtlIGluIHRoZSBwdWJsaWMgU2htZW1SZXF1ZXN0U3RydWN0KCkgYW5kCisg KiBTaG1lbVJlcXVlc3RIYXNoKCkgZnVuY3Rpb25zLCAnb3B0aW9ucycgaXMgKm5vdCogY29w aWVkLiAgVGhpcyBhbGxvd3MKKyAqIFNobWVtUmVxdWVzdEhhc2goKSB0byBwYXNzIGEgcG9p bnRlciB0byB0aGUgZXh0ZW5kZWQgU2htZW1SZXF1ZXN0SGFzaE9wdHMKKyAqIHN0cnVjdCBp bnN0ZWFkLgorICovCit2b2lkCitTaG1lbVJlcXVlc3RJbnRlcm5hbChTaG1lbVN0cnVjdERl c2MgKmRlc2MsIFNobWVtU3RydWN0T3B0cyAqb3B0aW9ucywKKwkJCQkJIFNobWVtQXJlYUtp bmQga2luZCkKK3sKKwlTaG1lbVJlcXVlc3QgKnJlcXVlc3Q7CisKKwlpZiAob3B0aW9ucy0+ bmFtZSA9PSBOVUxMKQorCQllbG9nKEVSUk9SLCAic2hhcmVkIG1lbW9yeSByZXF1ZXN0IGlz IG1pc3NpbmcgJ25hbWUnIG9wdGlvbiIpOworCisJaWYgKElzVW5kZXJQb3N0bWFzdGVyKQor CXsKKwkJaWYgKG9wdGlvbnMtPnNpemUgPD0gMCAmJiBvcHRpb25zLT5zaXplICE9IFNITUVN X0FUVEFDSF9VTktOT1dOX1NJWkUpCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBzaXplICV6 ZCBmb3Igc2hhcmVkIG1lbW9yeSByZXF1ZXN0IGZvciBcIiVzXCIiLAorCQkJCSBvcHRpb25z LT5zaXplLCBvcHRpb25zLT5uYW1lKTsKKwl9CisJZWxzZQorCXsKKwkJaWYgKG9wdGlvbnMt PnNpemUgPT0gU0hNRU1fQVRUQUNIX1VOS05PV05fU0laRSkKKwkJCWVsb2coRVJST1IsICJT SE1FTV9BVFRBQ0hfVU5LTk9XTl9TSVpFIGNhbm5vdCBiZSB1c2VkIGR1cmluZyBzdGFydHVw Iik7CisJCWlmIChvcHRpb25zLT5zaXplIDw9IDApCisJCQllbG9nKEVSUk9SLCAiaW52YWxp ZCBzaXplICV6ZCBmb3Igc2hhcmVkIG1lbW9yeSByZXF1ZXN0IGZvciBcIiVzXCIiLAorCQkJ CSBvcHRpb25zLT5zaXplLCBvcHRpb25zLT5uYW1lKTsKKwl9CisKKwlpZiAoc2htZW1fcmVx dWVzdF9zdGF0ZSAhPSBTUlNfUkVRVUVTVElORykKKwkJZWxvZyhFUlJPUiwgIlNobWVtUmVx dWVzdFN0cnVjdCBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBhIHNobWVtX3JlcXVlc3QgY2Fs bGJhY2siKTsKKworCS8qIENoZWNrIHRoYXQgaXQncyBub3QgYWxyZWFkeSByZWdpc3RlcmVk IGluIHRoaXMgcHJvY2VzcyAqLworCWZvcmVhY2hfcHRyKFNobWVtU3RydWN0RGVzYywgZXhp c3RpbmcsIHBlbmRpbmdfc2htZW1fcmVxdWVzdHMpCisJeworCQlpZiAoc3RyY21wKGV4aXN0 aW5nLT5uYW1lLCBvcHRpb25zLT5uYW1lKSA9PSAwKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJKGVycm1zZygic2hhcmVkIG1lbW9yeSBzdHJ1Y3QgXCIlc1wiIGlzIGFscmVhZHkgcmVn aXN0ZXJlZCIsCisJCQkJCQkJb3B0aW9ucy0+bmFtZSkpKTsKKwl9CisKKwlyZXF1ZXN0ID0g cGFsbG9jKHNpemVvZihTaG1lbVJlcXVlc3QpKTsKKwlyZXF1ZXN0LT5vcHRpb25zID0gb3B0 aW9uczsKKwlyZXF1ZXN0LT5kZXNjID0gZGVzYzsKKwlyZXF1ZXN0LT5raW5kID0ga2luZDsK KwlwZW5kaW5nX3NobWVtX3JlcXVlc3RzID0gbGFwcGVuZChwZW5kaW5nX3NobWVtX3JlcXVl c3RzLCByZXF1ZXN0KTsKK30KKworLyoKKyAqCVNobWVtR2V0UmVxdWVzdGVkU2l6ZSgpIC0t LSBlc3RpbWF0ZSB0aGUgdG90YWwgc2l6ZSBvZiBhbGwgcmVnaXN0ZXJlZCBzaGFyZWQKKyAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5IHN0cnVjdHVyZXMuCisgKgor ICogVGhpcyBpcyBjYWxsZWQgb25jZSBhdCBwb3N0bWFzdGVyIHN0YXJ0dXAsIGJlZm9yZSB0 aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50CisgKiBoYXMgYmVlbiBjcmVhdGVkLgorICovCitz aXplX3QKK1NobWVtR2V0UmVxdWVzdGVkU2l6ZSh2b2lkKQoreworCXNpemVfdAkJc2l6ZTsK KworCS8qIG1lbW9yeSBuZWVkZWQgZm9yIHRoZSBTaG1lbUluZGV4ICovCisJc2l6ZSA9IGhh c2hfZXN0aW1hdGVfc2l6ZShsaXN0X2xlbmd0aChwZW5kaW5nX3NobWVtX3JlcXVlc3RzKSAr IFNITUVNX0lOREVYX0FERElUSU9OQUxfU0laRSwKKwkJCQkJCQkgIHNpemVvZihTaG1lbUlu ZGV4RW50KSk7CisKKwkvKiBtZW1vcnkgbmVlZGVkIGZvciBhbGwgdGhlIHJlcXVlc3RlZCBh cmVhcyAqLworCWZvcmVhY2hfcHRyKFNobWVtUmVxdWVzdCwgcmVxdWVzdCwgcGVuZGluZ19z aG1lbV9yZXF1ZXN0cykKKwl7CisJCXNpemUgPSBhZGRfc2l6ZShzaXplLCByZXF1ZXN0LT5v cHRpb25zLT5zaXplKTsKKwkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIHJlcXVlc3QtPm9wdGlv bnMtPmV4dHJhX3NpemUpOworCX0KKworCXJldHVybiBzaXplOworfQorCisvKgorICoJU2ht ZW1Jbml0UmVxdWVzdGVkKCkgLS0tIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHJlcXVlc3Rl ZCBzaGFyZWQgbWVtb3J5CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1 cmVzLgorICoKKyAqIFRoaXMgaXMgY2FsbGVkIG9uY2UgYXQgcG9zdG1hc3RlciBzdGFydHVw LCBhZnRlciB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50CisgKiBoYXMgYmVlbiBjcmVhdGVk LgorICovCit2b2lkCitTaG1lbUluaXRSZXF1ZXN0ZWQodm9pZCkKK3sKKwkvKiBTaG91bGQg YmUgY2FsbGVkIG9ubHkgYnkgdGhlIHBvc3RtYXN0ZXIgb3IgYSBzdGFuZGFsb25lIGJhY2tl bmQuICovCisJQXNzZXJ0KCFJc1VuZGVyUG9zdG1hc3Rlcik7CisJQXNzZXJ0KHNobWVtX3Jl cXVlc3Rfc3RhdGUgPT0gU1JTX0lOSVRJQUxJWklORyk7CisKKwkvKgorCSAqIEluaXRpYWxp emUgdGhlIFNobWVtSW5kZXggZW50cmllcyBhbmQgcGVyZm9ybSBiYXNpYyBpbml0aWFsaXph dGlvbiBvZgorCSAqIGFsbCB0aGUgcmVxdWVzdGVkIG1lbW9yeSBhcmVhcy4gIFRoZXJlIGFy ZSBubyBjb25jdXJyZW50IHByb2Nlc3NlcyB5ZXQsCisJICogc28gbm8gbmVlZCBmb3IgbG9j a2luZy4KKwkgKi8KKwlmb3JlYWNoX3B0cihTaG1lbVJlcXVlc3QsIHJlcXVlc3QsIHBlbmRp bmdfc2htZW1fcmVxdWVzdHMpCisJeworCQlBdHRhY2hPckluaXRTaG1lbUluZGV4RW50cnko cmVxdWVzdCwgdHJ1ZSwgZmFsc2UpOworCX0KKwlsaXN0X2ZyZWVfZGVlcChwZW5kaW5nX3No bWVtX3JlcXVlc3RzKTsKKwlwZW5kaW5nX3NobWVtX3JlcXVlc3RzID0gTklMOworCisJLyoK KwkgKiBDYWxsIHRoZSBzdWJzeXN0ZW0tc3BlY2lmaWMgaW5pdCBjYWxsYmFja3MgdG8gZmlu aXNoIGluaXRpYWxpemF0aW9uIG9mCisJICogYWxsIHRoZSBhcmVhcy4KKwkgKi8KKwlmb3Jl YWNoX3B0cihjb25zdCBTaG1lbUNhbGxiYWNrcywgY2FsbGJhY2tzLCByZWdpc3RlcmVkX3No bWVtX2NhbGxiYWNrcykKKwl7CisJCWlmIChjYWxsYmFja3MtPmluaXRfZm4pCisJCQljYWxs YmFja3MtPmluaXRfZm4oY2FsbGJhY2tzLT5pbml0X2ZuX2FyZyk7CisJfQorCisJc2htZW1f cmVxdWVzdF9zdGF0ZSA9IFNSU19ET05FOworfQorCisvKgorICogUmUtZXN0YWJsaXNoIHBy b2Nlc3MgcHJpdmF0ZSBzdGF0ZSByZWxhdGVkIHRvIHNobWVtIGFyZWFzLgorICoKKyAqIFRo aXMgaXMgY2FsbGVkIGF0IGJhY2tlbmQgc3RhcnR1cCBpbiBFWEVDX0JBQ0tFTkQgbW9kZSwg aW4gZXZlcnkgYmFja2VuZC4KKyAqLworI2lmZGVmIEVYRUNfQkFDS0VORAordm9pZAorU2ht ZW1BdHRhY2hSZXF1ZXN0ZWQodm9pZCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCS8qIE11 c3QgYmUgaW5pdGlhbGl6aW5nIGEgKG5vbi1zdGFuZGFsb25lKSBiYWNrZW5kICovCisJQXNz ZXJ0KElzVW5kZXJQb3N0bWFzdGVyKTsKKwlBc3NlcnQoU2htZW1BbGxvY2F0b3ItPmluZGV4 ICE9IE5VTEwpOworCUFzc2VydChzaG1lbV9yZXF1ZXN0X3N0YXRlID09IFNSU19SRVFVRVNU SU5HKTsKKwlzaG1lbV9yZXF1ZXN0X3N0YXRlID0gU1JTX0FUVEFDSElORzsKKworCUxXTG9j a0FjcXVpcmUoU2htZW1JbmRleExvY2ssIExXX1NIQVJFRCk7CisKKwkvKgorCSAqIEF0dGFj aCB0byBhbGwgdGhlIHJlcXVlc3RlZCBtZW1vcnkgYXJlYXMuCisJICovCisJZm9yZWFjaF9w dHIoU2htZW1SZXF1ZXN0LCByZXF1ZXN0LCBwZW5kaW5nX3NobWVtX3JlcXVlc3RzKQorCXsK KwkJQXR0YWNoT3JJbml0U2htZW1JbmRleEVudHJ5KHJlcXVlc3QsIGZhbHNlLCB0cnVlKTsK Kwl9CisJbGlzdF9mcmVlX2RlZXAocGVuZGluZ19zaG1lbV9yZXF1ZXN0cyk7CisJcGVuZGlu Z19zaG1lbV9yZXF1ZXN0cyA9IE5JTDsKKworCS8qIENhbGwgYXR0YWNoIGNhbGxiYWNrcyAq LworCWZvcmVhY2gobGMsIHJlZ2lzdGVyZWRfc2htZW1fY2FsbGJhY2tzKQorCXsKKwkJY29u c3QgU2htZW1DYWxsYmFja3MgKmNhbGxiYWNrcyA9IChjb25zdCBTaG1lbUNhbGxiYWNrcyAq KSBsZmlyc3QobGMpOworCisJCWlmIChjYWxsYmFja3MtPmF0dGFjaF9mbikKKwkJCWNhbGxi YWNrcy0+YXR0YWNoX2ZuKGNhbGxiYWNrcy0+YXR0YWNoX2ZuX2FyZyk7CisJfQorCisJTFdM b2NrUmVsZWFzZShTaG1lbUluZGV4TG9jayk7CisKKwlzaG1lbV9yZXF1ZXN0X3N0YXRlID0g U1JTX0RPTkU7Cit9CisjZW5kaWYKKworLyoKKyAqIFdvcmtob3JzZSB0byBpbnNlcnQgb3Ig bG9vayB1cCBhIG5hbWVkIHNobWVtIGFyZWEgaW4gdGhlIHNoYXJlZCBtZW1vcnkKKyAqIGlu ZGV4LCBhbmQgaW5pdGlhbGl6ZSBvciBhdHRhY2ggdG8gaXQuCisgKgorICogTm90ZSB0aGF0 IHRoaXMgb25seSBkb2VzIHRoZSBiYXNpYyBpbml0aWFsaXphdGlvbiBkZXBlbmRpbmcgU2ht ZW1BcmVhS2luZCwKKyAqIGxpa2Ugc2V0dGluZyB0aGUgZ2xvYmFsIHBvaW50ZXIgdmFyaWFi bGUgdG8gdGhlIGFyZWEgZm9yIFNITUVNX0tJTkRfU1RSVUNUCisgKiBvciBzZXR0aW5nIHVw IHRoZSBiYWNrZW5kLXByaXZhdGUgSFRBQiBjb250cm9sIHN0cnVjdC4gIFRoaXMgZG9lcyAq bm90KgorICogY2FsbCB0aGUgY2FsbGJhY2tzIHNwZWNpZmljIHRvIHRoZSBzdWJzeXN0ZW0g dGhhdCByZXF1ZXN0ZWQgaXQuICBUaGF0J3MKKyAqIGRvbmUgbGF0ZXIgYWZ0ZXIgYWxsIHRo ZSBzaG1lbSBhcmVhcyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgb3IgYXR0YWNoZWQgdG8uCisg KgorICogbWF5X2luaXQgPT0gdHJ1ZSAmJiBtYXlfYXR0YWNoID09IGZhbHNlIGlzIHVzZWQg YXQgcG9zdG1hc3RlciBzdGFydHVwIHRvCisgKiBhbGxvY2F0ZSBhbGwgdGhlIGFyZWFzLiAg QW4gZXJyb3IgaXMgdGhyb3duIGlmIHRoZSBhcmVhIGFscmVhZHkgZXhpc3RzLgorICoKKyAq IG1heV9pbml0ID09IGZhbHNlICYmIG1heV9hdHRhY2ggPT0gdHJ1ZSBpcyB1c2VkIGF0IGJh Y2tlbmQgc3RhcnR1cCBpbgorICogRVhFQ19CQUNLRU5EIG1vZGUgdG8gYXR0YWNoIHRvIGFs bCB0aGUgYXJlYXMuICBUaGUgYXJlYSBpcyBleHBlY3RlZCB0bworICogYWxyZWFkeSBiZSBp bml0aWFsaXplZCwgYW4gZXJyb3IgaXMgdGhyb3duIGlmIG5vdC4KKyAqCisgKiBtYXlfaW5p dCA9PSB0cnVlICYmIG1heV9hdHRhY2ggPT0gdHJ1ZSBpcyB1c2VkIHdoZW4gYSBzaGFyZWQg bWVtb3J5IGlzCisgKiByZXF1ZXN0ZWQgYWZ0ZXIgc3RhcnR1cCwgd2l0aCBTSE1FTV9DQUxM QkFDS1NfQUxMT1dfQUZURVJfU1RBUlRVUC4KKyAqCisgKiAobWF5X2luaXQgPT0gZmFsc2Ug JiYgbWF5X2F0dGFjaCA9PSBmYWxzZSBpcyBub3QgdXNlZCwgaXQgd291bGQgYWx3YXlzCisg KiByYWlzZSBhbiBlcnJvcikKKyAqLworc3RhdGljIGJvb2wKK0F0dGFjaE9ySW5pdFNobWVt SW5kZXhFbnRyeShTaG1lbVJlcXVlc3QgKnJlcXVlc3QsCisJCQkJCQkJYm9vbCBtYXlfaW5p dCwgYm9vbCBtYXlfYXR0YWNoKQoreworCS8qCisJICogSWYgY2FsbGVkIGFmdGVyIHBvc3Rt YXN0ZXIgc3RhcnR1cCwgd2UgbmVlZCB0byBpbW1lZGlhdGVseSBhbHNvCisJICogaW5pdGlh bGl6ZSBvciBhdHRhY2ggdG8gdGhlIGFyZWEuCisJICovCisJU2htZW1TdHJ1Y3REZXNjICpk ZXNjID0gcmVxdWVzdC0+ZGVzYzsKKwlTaG1lbUluZGV4RW50ICppbmRleF9lbnRyeTsKKwli b29sCQlmb3VuZDsKKworCS8qIElmIGJvdGggYXJlIGZhbHNlLCB3ZSdsbCBmYWlsIG5vIG1h dHRlciB3aGF0ICovCisJQXNzZXJ0KG1heV9pbml0IHx8IG1heV9hdHRhY2gpOworCisJZGVz Yy0+bmFtZSA9IHJlcXVlc3QtPm9wdGlvbnMtPm5hbWU7CisJZGVzYy0+cHRyID0gTlVMTDsK KworCS8qIGxvb2sgaXQgdXAgaW4gdGhlIHNobWVtIGluZGV4ICovCisJaW5kZXhfZW50cnkg PSAoU2htZW1JbmRleEVudCAqKQorCQloYXNoX3NlYXJjaChTaG1lbUluZGV4LCByZXF1ZXN0 LT5vcHRpb25zLT5uYW1lLAorCQkJCQltYXlfaW5pdCA/IEhBU0hfRU5URVJfTlVMTCA6IEhB U0hfRklORCwgJmZvdW5kKTsKKwlpZiAoZm91bmQpCisJeworCQkvKiBBbHJlYWR5IHByZXNl bnQsIGp1c3QgYXR0YWNoIHRvIGl0ICovCisJCWlmICghbWF5X2F0dGFjaCkKKwkJCWVsb2co RVJST1IsICJzaGFyZWQgbWVtb3J5IHN0cnVjdCBcIiVzXCIgaXMgYWxyZWFkeSBpbml0aWFs aXplZCIsIGRlc2MtPm5hbWUpOworCisJCWlmIChpbmRleF9lbnRyeS0+c2l6ZSAhPSByZXF1 ZXN0LT5vcHRpb25zLT5zaXplICYmCisJCQlyZXF1ZXN0LT5vcHRpb25zLT5zaXplICE9IFNI TUVNX0FUVEFDSF9VTktOT1dOX1NJWkUpCisJCXsKKwkJCWVsb2coRVJST1IsICJzaGFyZWQg bWVtb3J5IHN0cnVjdCBcIiVzXCIgaXMgYWxyZWFkeSByZWdpc3RlcmVkIHdpdGggZGlmZmVy ZW50IHNpemUiLAorCQkJCSBkZXNjLT5uYW1lKTsKKwkJfQorCQlkZXNjLT5wdHIgPSBpbmRl eF9lbnRyeS0+bG9jYXRpb247CisJCWRlc2MtPnNpemUgPSBpbmRleF9lbnRyeS0+c2l6ZTsK KworCQkvKiBJbml0aWFsaXplIGRlcGVuZGluZyBvbiB0aGUga2luZCBvZiBzaG1lbSBhcmVh IGl0IGlzICovCisJCXN3aXRjaCAocmVxdWVzdC0+a2luZCkKKwkJeworCQkJY2FzZSBTSE1F TV9LSU5EX1NUUlVDVDoKKwkJCQlpZiAocmVxdWVzdC0+b3B0aW9ucy0+cHRyKQorCQkJCQkq KHJlcXVlc3QtPm9wdGlvbnMtPnB0cikgPSBpbmRleF9lbnRyeS0+bG9jYXRpb247CisJCQkJ YnJlYWs7CisJCQljYXNlIFNITUVNX0tJTkRfSEFTSDoKKwkJCQlzaG1lbV9oYXNoX2F0dGFj aChkZXNjLCByZXF1ZXN0LT5vcHRpb25zKTsKKwkJCQlicmVhazsKKwkJfQorCX0KKwllbHNl IGlmICghbWF5X2luaXQpCisJeworCQkvKiBhdHRhY2ggd2FzIHJlcXVlc3RlZCwgYnV0IGl0 IHdhcyBub3QgZm91bmQgKi8KKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJD T0RFX09VVF9PRl9NRU1PUlkpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCBmaW5kIFNobWVt SW5kZXggZW50cnkgZm9yIGRhdGEgc3RydWN0dXJlIFwiJXNcIiIsCisJCQkJCQlkZXNjLT5u YW1lKSkpOworCX0KKwllbHNlIGlmICghaW5kZXhfZW50cnkpCisJeworCQkvKiB0cmllZCB0 byBhZGQgaXQgdG8gdGhlIGhhc2ggdGFibGUsIGJ1dCB0aGVyZSB3YXMgbm8gc3BhY2UgKi8K KwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09VVF9PRl9NRU1PUlkp LAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCBjcmVhdGUgU2htZW1JbmRleCBlbnRyeSBmb3Ig ZGF0YSBzdHJ1Y3R1cmUgXCIlc1wiIiwKKwkJCQkJCWRlc2MtPm5hbWUpKSk7CisJfQorCWVs c2UKKwl7CisJCS8qCisJCSAqIFdlIGluc2VydGVkIHRoZSBlbnRyeSB0byB0aGUgc2hhcmVk IG1lbW9yeSBpbmRleC4gQWxsb2NhdGUKKwkJICogcmVxdWVzdGVkIGFtb3VudCBvZiBzaGFy ZWQgbWVtb3J5IGZvciBpdCwgYW5kIGRvIGJhc2ljCisJCSAqIGluaXRpYWxpemlvbi4KKwkJ ICovCisJCXNpemVfdAkJYWxsb2NhdGVkX3NpemU7CisJCXZvaWQJICAgKnN0cnVjdFB0cjsK KworCQlzdHJ1Y3RQdHIgPSBTaG1lbUFsbG9jUmF3KHJlcXVlc3QtPm9wdGlvbnMtPnNpemUs ICZhbGxvY2F0ZWRfc2l6ZSk7CisJCWlmIChzdHJ1Y3RQdHIgPT0gTlVMTCkKKwkJeworCQkJ Lyogb3V0IG9mIG1lbW9yeTsgcmVtb3ZlIHRoZSBmYWlsZWQgU2htZW1JbmRleCBlbnRyeSAq LworCQkJaGFzaF9zZWFyY2goU2htZW1JbmRleCwgZGVzYy0+bmFtZSwgSEFTSF9SRU1PVkUs IE5VTEwpOworCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9PVVRf T0ZfTUVNT1JZKSwKKwkJCQkJIGVycm1zZygibm90IGVub3VnaCBzaGFyZWQgbWVtb3J5IGZv ciBkYXRhIHN0cnVjdHVyZSIKKwkJCQkJCQkiIFwiJXNcIiAoJXp1IGJ5dGVzIHJlcXVlc3Rl ZCkiLAorCQkJCQkJCWRlc2MtPm5hbWUsIHJlcXVlc3QtPm9wdGlvbnMtPnNpemUpKSk7CisJ CX0KKwkJaW5kZXhfZW50cnktPnNpemUgPSByZXF1ZXN0LT5vcHRpb25zLT5zaXplOworCQlp bmRleF9lbnRyeS0+YWxsb2NhdGVkX3NpemUgPSBhbGxvY2F0ZWRfc2l6ZTsKKwkJaW5kZXhf ZW50cnktPmxvY2F0aW9uID0gc3RydWN0UHRyOworCisJCWRlc2MtPnB0ciA9IGluZGV4X2Vu dHJ5LT5sb2NhdGlvbjsKKwkJZGVzYy0+c2l6ZSA9IGluZGV4X2VudHJ5LT5zaXplOworCisJ CS8qCisJCSAqIFJlLWVzdGFibGlzaCB0aGUgY2FsbGVyJ3MgcG9pbnRlciB2YXJpYWJsZSwg b3IgZG8gb3RoZXIgYWN0aW9ucyB0bworCQkgKiBhdHRhY2ggZGVwZW5kaW5nIG9uIHRoZSBr aW5kIG9mIHNobWVtIGFyZWEgaXQgaXMuCisJCSAqLworCQlzd2l0Y2ggKHJlcXVlc3QtPmtp bmQpCisJCXsKKwkJCWNhc2UgU0hNRU1fS0lORF9TVFJVQ1Q6CisJCQkJaWYgKHJlcXVlc3Qt Pm9wdGlvbnMtPnB0cikKKwkJCQkJKihyZXF1ZXN0LT5vcHRpb25zLT5wdHIpID0gaW5kZXhf ZW50cnktPmxvY2F0aW9uOworCQkJCWJyZWFrOworCQkJY2FzZSBTSE1FTV9LSU5EX0hBU0g6 CisJCQkJc2htZW1faGFzaF9pbml0KGRlc2MsIHJlcXVlc3QtPm9wdGlvbnMpOworCQkJCWJy ZWFrOworCQl9CisJfQorCisJcmV0dXJuIGZvdW5kOworfQorCiAvKgogICoJSW5pdFNobWVt QWxsb2NhdG9yKCkgLS0tIHNldCB1cCBiYXNpYyBwb2ludGVycyB0byBzaGFyZWQgbWVtb3J5 LgogICoKICAqIENhbGxlZCBhdCBwb3N0bWFzdGVyIG9yIHN0YW5kLWFsb25lIGJhY2tlbmQg c3RhcnR1cCwgdG8gaW5pdGlhbGl6ZSB0aGUKICAqIGFsbG9jYXRvcidzIGRhdGEgc3RydWN0 dXJlIGluIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQuICBJbiBFWEVDX0JBQ0tFTkQsCi0g KiB0aGlzIGlzIGFsc28gY2FsbGVkIGF0IGJhY2tlbmQgc3RhcnR1cCwgdG8gc2V0IHVwIHBv aW50ZXJzIHRvIHRoZSBzaGFyZWQKLSAqIG1lbW9yeSBhcmVhcy4KKyAqIHRoaXMgaXMgYWxz byBjYWxsZWQgYXQgYmFja2VuZCBzdGFydHVwLCB0byBzZXQgdXAgcG9pbnRlcnMgdG8gdGhl CisgKiBhbHJlYWR5LWluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlLgogICovCiB2b2lkCiBJ bml0U2htZW1BbGxvY2F0b3IoUEdTaG1lbUhlYWRlciAqc2VnaGRyKQogewogCVNpemUJCW9m ZnNldDsKKwlpbnQ2NAkJaGFzaF9zaXplOwogCUhBU0hDVEwJCWluZm87CiAJaW50CQkJaGFz aF9mbGFnczsKIAlzaXplX3QJCXNpemU7CkBAIC0xMzcsNiArNjQzLDE2IEBAIEluaXRTaG1l bUFsbG9jYXRvcihQR1NobWVtSGVhZGVyICpzZWdoZHIpCiAjZW5kaWYKIAlBc3NlcnQoc2Vn aGRyICE9IE5VTEwpOwogCisJaWYgKElzVW5kZXJQb3N0bWFzdGVyKQorCXsKKwkJQXNzZXJ0 KHNobWVtX3JlcXVlc3Rfc3RhdGUgPT0gU1JTX0lOSVRJQUwpOworCX0KKwllbHNlCisJewor CQlBc3NlcnQoc2htZW1fcmVxdWVzdF9zdGF0ZSA9PSBTUlNfUkVRVUVTVElORyk7CisJCXNo bWVtX3JlcXVlc3Rfc3RhdGUgPSBTUlNfSU5JVElBTElaSU5HOworCX0KKwogCS8qCiAJICog V2UgYXNzdW1lIHRoZSBwb2ludGVyIGFuZCBvZmZzZXQgYXJlIE1BWEFMSUdOLiAgTm90IGEg aGFyZCByZXF1aXJlbWVudCwKIAkgKiBidXQgaXQncyB0cnVlIHRvZGF5IGFuZCBrZWVwcyB0 aGUgbWF0aCBiZWxvdyBzaW1wbGVyLgpAQCAtMTgxLDkgKzY5NywxMSBAQCBJbml0U2htZW1B bGxvY2F0b3IoUEdTaG1lbUhlYWRlciAqc2VnaGRyKQogCSAqIHVzZSBTaG1lbUluaXRIYXNo KCkgaGVyZSBiZWNhdXNlIGl0IHJlbGllcyBvbiBTaG1lbUluZGV4IGJlaW5nIGFscmVhZHkK IAkgKiBpbml0aWFsaXplZC4KIAkgKi8KKwloYXNoX3NpemUgPSBsaXN0X2xlbmd0aChwZW5k aW5nX3NobWVtX3JlcXVlc3RzKSArIFNITUVNX0lOREVYX0FERElUSU9OQUxfU0laRTsKKwog CWluZm8ua2V5c2l6ZSA9IFNITUVNX0lOREVYX0tFWVNJWkU7CiAJaW5mby5lbnRyeXNpemUg PSBzaXplb2YoU2htZW1JbmRleEVudCk7Ci0JaW5mby5kc2l6ZSA9IGluZm8ubWF4X2RzaXpl ID0gaGFzaF9zZWxlY3RfZGlyc2l6ZShTSE1FTV9JTkRFWF9TSVpFKTsKKwlpbmZvLmRzaXpl ID0gaW5mby5tYXhfZHNpemUgPSBoYXNoX3NlbGVjdF9kaXJzaXplKGhhc2hfc2l6ZSk7CiAJ aW5mby5hbGxvYyA9IFNobWVtSGFzaEFsbG9jOwogCWluZm8uYWxsb2NfYXJnID0gTlVMTDsK IAloYXNoX2ZsYWdzID0gSEFTSF9FTEVNIHwgSEFTSF9TVFJJTkdTIHwgSEFTSF9TSEFSRURf TUVNIHwgSEFTSF9BTExPQyB8IEhBU0hfRElSU0laRTsKQEAgLTE5NSwxMCArNzEzLDI3IEBA IEluaXRTaG1lbUFsbG9jYXRvcihQR1NobWVtSGVhZGVyICpzZWdoZHIpCiAJZWxzZQogCQlo YXNoX2ZsYWdzIHw9IEhBU0hfQVRUQUNIOwogCWluZm8uaGN0bCA9IFNobWVtQWxsb2NhdG9y LT5pbmRleDsKLQlTaG1lbUluZGV4ID0gaGFzaF9jcmVhdGUoIlNobWVtSW5kZXgiLCBTSE1F TV9JTkRFWF9TSVpFLCAmaW5mbywgaGFzaF9mbGFncyk7CisJU2htZW1JbmRleCA9IGhhc2hf Y3JlYXRlKCJTaG1lbUluZGV4IiwgaGFzaF9zaXplLCAmaW5mbywgaGFzaF9mbGFncyk7CiAJ QXNzZXJ0KFNobWVtSW5kZXggIT0gTlVMTCk7CiB9CiAKKy8qCisgKiBSZXNldCBzdGF0ZSBv biBwb3N0bWFzdGVyIGNyYXNoIHJlc3RhcnQuCisgKi8KK3ZvaWQKK1Jlc2V0U2htZW1BbGxv Y2F0b3Iodm9pZCkKK3sKKwlBc3NlcnQoIUlzVW5kZXJQb3N0bWFzdGVyKTsKKwlzaG1lbV9y ZXF1ZXN0X3N0YXRlID0gU1JTX0lOSVRJQUw7CisKKwlwZW5kaW5nX3NobWVtX3JlcXVlc3Rz ID0gTklMOworCisJLyoKKwkgKiBOb3RlIHRoYXQgd2UgZG9uJ3QgY2xlYXIgdGhlIHJlZ2lz dGVyZWQgY2FsbGJhY2tzLiAgV2Ugd2lsbCBuZWVkIHRvCisJICogY2FsbCB0aGVtIGFnYWlu IGFzIHdlIHJlc3RhcnQKKwkgKi8KK30KKwogLyoKICAqIFNobWVtQWxsb2MgLS0gYWxsb2Nh dGUgbWF4LWFsaWduZWQgY2h1bmsgZnJvbSBzaGFyZWQgbWVtb3J5CiAgKgpAQCAtMjk2LDky ICs4MzEsMTQxIEBAIFNobWVtQWRkcklzVmFsaWQoY29uc3Qgdm9pZCAqYWRkcikKIH0KIAog LyoKLSAqIFNobWVtSW5pdFN0cnVjdCAtLSBDcmVhdGUvYXR0YWNoIHRvIGEgc3RydWN0dXJl IGluIHNoYXJlZCBtZW1vcnkuCisgKiBSZWdpc3RlciBjYWxsYmFja3MgdGhhdCBkZWZpbmUg YSBzaGFyZWQgbWVtb3J5IGFyZWEgKG9yIG11bHRpcGxlIGFyZWFzKS4KICAqCi0gKgkJVGhp cyBpcyBjYWxsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIHRvIGZpbmQgb3IgYWxsb2NhdGUK LSAqCQlhIGRhdGEgc3RydWN0dXJlIGluIHNoYXJlZCBtZW1vcnkuICBJZiBubyBvdGhlciBw cm9jZXNzCi0gKgkJaGFzIGNyZWF0ZWQgdGhlIHN0cnVjdHVyZSwgdGhpcyByb3V0aW5lIGFs bG9jYXRlcyBzcGFjZQotICoJCWZvciBpdC4gIElmIGl0IGV4aXN0cyBhbHJlYWR5LCBhIHBv aW50ZXIgdG8gdGhlIGV4aXN0aW5nCi0gKgkJc3RydWN0dXJlIGlzIHJldHVybmVkLgorICog VGhlIHN5c3RlbSB3aWxsIGNhbGwgdGhlIGNhbGxiYWNrcyBhdCBkaWZmZXJlbnQgc3RhZ2Vz IG9mIHBvc3RtYXN0ZXIgb3IKKyAqIGJhY2tlbmQgc3RhcnR1cCwgdG8gYWxsb2NhdGUgYW5k IGluaXRpYWxpemUgdGhlIGFyZWEuCiAgKgotICoJUmV0dXJuczogcG9pbnRlciB0byB0aGUg b2JqZWN0LiAgKmZvdW5kUHRyIGlzIHNldCB0cnVlIGlmIHRoZSBvYmplY3Qgd2FzCi0gKgkJ YWxyZWFkeSBpbiB0aGUgc2htZW0gaW5kZXggKGhlbmNlLCBhbHJlYWR5IGluaXRpYWxpemVk KS4KKyAqIFRoaXMgaXMgbm9ybWFsbHkgY2FsbGVkIGVhcmx5IGR1cmluZyBwb3N0bWFzdGVy IHN0YXJ0dXAsIGJ1dCBpZiB0aGUKKyAqIFNITUVNX0NBTExCQUNLU19BTExPV19BRlRFUl9T VEFSVFVQIGlzIHNldCwgdGhpcyBjYW4gYWxzbyBiZSB1c2VkIGFmdGVyCisgKiBzdGFydHVw LCBhbHRob3VnaCBhZnRlciBzdGFydHVwIHRoZXJlJ3Mgbm8gZ3VhcmFudGVlIHRoYXQgdGhl cmUncyBlbm91Z2gKKyAqIHNoYXJlZCBtZW1vcnkgYXZhaWxhYmxlLiAgV2hlbiBjYWxsZWQg YWZ0ZXIgc3RhcnR1cCwgdGhpcyBpbW1lZGlhdGVseSBjYWxscworICogdGhlIHJpZ2h0IGNh bGxiYWNrcyBkZXBlbmRpbmcgb24gd2hldGhlciBhbm90aGVyIGJhY2tlbmQgaGFkIGFscmVh ZHkKKyAqIGluaXRpYWxpemVkIHRoZSBhcmVhLgogICoKLSAqCU5vdGU6IGJlZm9yZSBQb3N0 Z3JlcyA5LjAsIHRoaXMgZnVuY3Rpb24gcmV0dXJuZWQgTlVMTCBmb3Igc29tZSBmYWlsdXJl Ci0gKgljYXNlcy4gIE5vdywgaXQgYWx3YXlzIHRocm93cyBlcnJvciBpbnN0ZWFkLCBzbyBj YWxsZXJzIG5lZWQgbm90IGNoZWNrCi0gKglmb3IgTlVMTC4KKyAqIE5vdGU6IEluIEVYRUNf QkFDS0VORCBtb2RlLCB0aGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBpbiBldmVyeSBiYWNrZW5k CisgKiBwcm9jZXNzLiAgVGhhdCdzIG5lZWRlZCBiZWNhdXNlIHdlIGNhbm5vdCBwYXNzIGRv d24gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBwb2ludGVycyBmcm9tIHRoZSBwb3N0bWFz dGVyIHByb2Nlc3MsIGJlY2F1c2UgZGlmZmVyZW50IHByb2Nlc3NlcyBtYXkgaGF2ZQorICog bG9hZGVkIGxpYnJhcmllcyB0byBkaWZmZXJlbnQgYWRkcmVzc2VzLgogICovCi12b2lkICoK LVNobWVtSW5pdFN0cnVjdChjb25zdCBjaGFyICpuYW1lLCBTaXplIHNpemUsIGJvb2wgKmZv dW5kUHRyKQordm9pZAorUmVnaXN0ZXJTaG1lbUNhbGxiYWNrcyhjb25zdCBTaG1lbUNhbGxi YWNrcyAqY2FsbGJhY2tzKQogewotCVNobWVtSW5kZXhFbnQgKnJlc3VsdDsKLQl2b2lkCSAg ICpzdHJ1Y3RQdHI7CisJaWYgKHNobWVtX3JlcXVlc3Rfc3RhdGUgPT0gU1JTX0RPTkUgJiYg SXNVbmRlclBvc3RtYXN0ZXIpCisJeworCQkvKiBBZnRlci1zdGFydHVwIGluaXRpYWxpemF0 aW9uICovCisJCWJvb2wJCWZvdW5kID0gZmFsc2U7CiAKLQlBc3NlcnQoU2htZW1JbmRleCAh PSBOVUxMKTsKKwkJaWYgKChjYWxsYmFja3MtPmZsYWdzICYgU0hNRU1fQ0FMTEJBQ0tTX0FM TE9XX0FGVEVSX1NUQVJUVVApID09IDApCisJCQllbG9nKEVSUk9SLCAiY2Fubm90IHJlcXVl c3Qgc2hhcmVkIG1lbW9yeSBhdCB0aGlzIHRpbWUiKTsKIAotCUxXTG9ja0FjcXVpcmUoU2ht ZW1JbmRleExvY2ssIExXX0VYQ0xVU0lWRSk7CisJCUFzc2VydChwZW5kaW5nX3NobWVtX3Jl cXVlc3RzID09IE5JTCk7CisJCUFzc2VydChzaG1lbV9yZXF1ZXN0X3N0YXRlID09IFNSU19E T05FKTsKKwkJc2htZW1fcmVxdWVzdF9zdGF0ZSA9IFNSU19SRVFVRVNUSU5HOwogCi0JLyog bG9vayBpdCB1cCBpbiB0aGUgc2htZW0gaW5kZXggKi8KLQlyZXN1bHQgPSAoU2htZW1JbmRl eEVudCAqKQotCQloYXNoX3NlYXJjaChTaG1lbUluZGV4LCBuYW1lLCBIQVNIX0VOVEVSX05V TEwsIGZvdW5kUHRyKTsKKwkJaWYgKGNhbGxiYWNrcy0+cmVxdWVzdF9mbikKKwkJCWNhbGxi YWNrcy0+cmVxdWVzdF9mbihjYWxsYmFja3MtPnJlcXVlc3RfZm5fYXJnKTsKKwkJc2htZW1f cmVxdWVzdF9zdGF0ZSA9IFNSU19BRlRFUl9TVEFSVFVQX0FUVEFDSF9PUl9JTklUOwogCi0J aWYgKCFyZXN1bHQpCi0JewotCQlMV0xvY2tSZWxlYXNlKFNobWVtSW5kZXhMb2NrKTsKLQkJ ZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX09VVF9PRl9NRU1PUlkpLAot CQkJCSBlcnJtc2coImNvdWxkIG5vdCBjcmVhdGUgU2htZW1JbmRleCBlbnRyeSBmb3IgZGF0 YSBzdHJ1Y3R1cmUgXCIlc1wiIiwKLQkJCQkJCW5hbWUpKSk7Ci0JfQorCQlMV0xvY2tBY3F1 aXJlKFNobWVtSW5kZXhMb2NrLCBMV19FWENMVVNJVkUpOwogCi0JaWYgKCpmb3VuZFB0cikK LQl7CiAJCS8qCi0JCSAqIFN0cnVjdHVyZSBpcyBpbiB0aGUgc2htZW0gaW5kZXggc28gc29t ZW9uZSBlbHNlIGhhcyBhbGxvY2F0ZWQgaXQKLQkJICogYWxyZWFkeS4gIFRoZSBzaXplIGJl dHRlciBiZSB0aGUgc2FtZSBhcyB0aGUgc2l6ZSB3ZSBhcmUgdHJ5aW5nIHRvCi0JCSAqIGlu aXRpYWxpemUgdG8sIG9yIHRoZXJlIGlzIGEgbmFtZSBjb25mbGljdCAob3Igd29yc2UpLgor CQkgKiBBbGxvY2F0ZSBvciBhdHRhY2ggYWxsIHRoZSBzaG1lbSBhcmVhcyByZXF1ZXN0ZWQg YnkgdGhlIHJlcXVlc3RfZm4KKwkJICogY2FsbGJhY2suCiAJCSAqLwotCQlpZiAocmVzdWx0 LT5zaXplICE9IHNpemUpCisJCWZvcmVhY2hfcHRyKFNobWVtUmVxdWVzdCwgcmVxdWVzdCwg cGVuZGluZ19zaG1lbV9yZXF1ZXN0cykKIAkJewotCQkJTFdMb2NrUmVsZWFzZShTaG1lbUlu ZGV4TG9jayk7Ci0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJybXNnKCJTaG1lbUluZGV4 IGVudHJ5IHNpemUgaXMgd3JvbmcgZm9yIGRhdGEgc3RydWN0dXJlIgotCQkJCQkJCSIgXCIl c1wiOiBleHBlY3RlZCAlenUsIGFjdHVhbCAlenUiLAotCQkJCQkJCW5hbWUsIHNpemUsIHJl c3VsdC0+c2l6ZSkpKTsKKwkJCWZvdW5kID0gQXR0YWNoT3JJbml0U2htZW1JbmRleEVudHJ5 KHJlcXVlc3QsIHRydWUsIHRydWUpOwogCQl9Ci0JCXN0cnVjdFB0ciA9IHJlc3VsdC0+bG9j YXRpb247Ci0JfQotCWVsc2UKLQl7Ci0JCVNpemUJCWFsbG9jYXRlZF9zaXplOworCQlsaXN0 X2ZyZWVfZGVlcChwZW5kaW5nX3NobWVtX3JlcXVlc3RzKTsKKwkJcGVuZGluZ19zaG1lbV9y ZXF1ZXN0cyA9IE5JTDsKIAotCQkvKiBJdCBpc24ndCBpbiB0aGUgdGFibGUgeWV0LiBhbGxv Y2F0ZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLwotCQlzdHJ1Y3RQdHIgPSBTaG1lbUFsbG9jUmF3 KHNpemUsICZhbGxvY2F0ZWRfc2l6ZSk7Ci0JCWlmIChzdHJ1Y3RQdHIgPT0gTlVMTCkKKwkJ LyoKKwkJICogRmluaXNoIGluaXRpYWxpemF0aW9uIG9yIGF0dGFjaGluZyB0byB0aGUgc2ht ZW0gYXJlcyBieSBjYWxsaW5nIHRoZQorCQkgKiBhcHByb3ByaWF0ZSBjYWxsYmFjay4KKwkJ ICoKKwkJICogRklYTUU6IFdoYXQgdG8gZG8gaWYgbXVsdGlwbGUgc2htZW0gYXJlYXMgd2Vy ZSByZXF1ZXN0ZWQsIGFuZCBzb21lCisJCSAqIG9mIHRoZW0gYXJlIGFscmVhZHkgaW5pdGlh bGl6ZWQgYnV0IG5vdCBhbGw/ICBXZSBleHBlY3QgYWxsIHNobWVtCisJCSAqIGFyZWFzIHJl cXVlc3RlZCBieSBhIHNpbmdsZSBjYWxsYmFjayB0byBmb3JtIGEgY29oZXJlbnQgdW5pdC4K KwkJICovCisJCWlmIChmb3VuZCkKIAkJewotCQkJLyogb3V0IG9mIG1lbW9yeTsgcmVtb3Zl IHRoZSBmYWlsZWQgU2htZW1JbmRleCBlbnRyeSAqLwotCQkJaGFzaF9zZWFyY2goU2htZW1J bmRleCwgbmFtZSwgSEFTSF9SRU1PVkUsIE5VTEwpOwotCQkJTFdMb2NrUmVsZWFzZShTaG1l bUluZGV4TG9jayk7Ci0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZShFUlJDT0RF X09VVF9PRl9NRU1PUlkpLAotCQkJCQkgZXJybXNnKCJub3QgZW5vdWdoIHNoYXJlZCBtZW1v cnkgZm9yIGRhdGEgc3RydWN0dXJlIgotCQkJCQkJCSIgXCIlc1wiICglenUgYnl0ZXMgcmVx dWVzdGVkKSIsCi0JCQkJCQkJbmFtZSwgc2l6ZSkpKTsKKwkJCWlmIChjYWxsYmFja3MtPmF0 dGFjaF9mbikKKwkJCQljYWxsYmFja3MtPmF0dGFjaF9mbihjYWxsYmFja3MtPmF0dGFjaF9m bl9hcmcpOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKGNhbGxiYWNrcy0+aW5pdF9mbikK KwkJCQljYWxsYmFja3MtPmluaXRfZm4oY2FsbGJhY2tzLT5pbml0X2ZuX2FyZyk7CiAJCX0K LQkJcmVzdWx0LT5zaXplID0gc2l6ZTsKLQkJcmVzdWx0LT5hbGxvY2F0ZWRfc2l6ZSA9IGFs bG9jYXRlZF9zaXplOwotCQlyZXN1bHQtPmxvY2F0aW9uID0gc3RydWN0UHRyOworCisJCUxX TG9ja1JlbGVhc2UoU2htZW1JbmRleExvY2spOworCQlzaG1lbV9yZXF1ZXN0X3N0YXRlID0g U1JTX0RPTkU7CisKKwkJcmV0dXJuOwogCX0KIAotCUxXTG9ja1JlbGVhc2UoU2htZW1JbmRl eExvY2spOworCXJlZ2lzdGVyZWRfc2htZW1fY2FsbGJhY2tzID0gbGFwcGVuZChyZWdpc3Rl cmVkX3NobWVtX2NhbGxiYWNrcywKKwkJCQkJCQkJCQkgKHZvaWQgKikgY2FsbGJhY2tzKTsK K30KKworLyoKKyAqIENhbGwgYWxsIHNobWVtIHJlcXVlc3QgY2FsbGJhY2tzLgorICovCit2 b2lkCitTaG1lbUNhbGxSZXF1ZXN0Q2FsbGJhY2tzKHZvaWQpCit7CisJTGlzdENlbGwgICAq bGM7CiAKLQlBc3NlcnQoU2htZW1BZGRySXNWYWxpZChzdHJ1Y3RQdHIpKTsKKwlBc3NlcnQo c2htZW1fcmVxdWVzdF9zdGF0ZSA9PSBTUlNfSU5JVElBTCk7CisJc2htZW1fcmVxdWVzdF9z dGF0ZSA9IFNSU19SRVFVRVNUSU5HOwogCi0JQXNzZXJ0KHN0cnVjdFB0ciA9PSAodm9pZCAq KSBDQUNIRUxJTkVBTElHTihzdHJ1Y3RQdHIpKTsKKwlmb3JlYWNoKGxjLCByZWdpc3RlcmVk X3NobWVtX2NhbGxiYWNrcykKKwl7CisJCWNvbnN0IFNobWVtQ2FsbGJhY2tzICpjYWxsYmFj a3MgPSAoY29uc3QgU2htZW1DYWxsYmFja3MgKikgbGZpcnN0KGxjKTsKIAotCXJldHVybiBz dHJ1Y3RQdHI7CisJCWlmIChjYWxsYmFja3MtPnJlcXVlc3RfZm4pCisJCQljYWxsYmFja3Mt PnJlcXVlc3RfZm4oY2FsbGJhY2tzLT5yZXF1ZXN0X2ZuX2FyZyk7CisJfQogfQogCisvKgor ICogU2htZW1Jbml0U3RydWN0IC0tIENyZWF0ZS9hdHRhY2ggdG8gYSBzdHJ1Y3R1cmUgaW4g c2hhcmVkIG1lbW9yeS4KKyAqCisgKgkJVGhpcyBpcyBjYWxsZWQgZHVyaW5nIGluaXRpYWxp emF0aW9uIHRvIGZpbmQgb3IgYWxsb2NhdGUKKyAqCQlhIGRhdGEgc3RydWN0dXJlIGluIHNo YXJlZCBtZW1vcnkuICBJZiBubyBvdGhlciBwcm9jZXNzCisgKgkJaGFzIGNyZWF0ZWQgdGhl IHN0cnVjdHVyZSwgdGhpcyByb3V0aW5lIGFsbG9jYXRlcyBzcGFjZQorICoJCWZvciBpdC4g IElmIGl0IGV4aXN0cyBhbHJlYWR5LCBhIHBvaW50ZXIgdG8gdGhlIGV4aXN0aW5nCisgKgkJ c3RydWN0dXJlIGlzIHJldHVybmVkLgorICoKKyAqCVJldHVybnM6IHBvaW50ZXIgdG8gdGhl IG9iamVjdC4gICpmb3VuZFB0ciBpcyBzZXQgdHJ1ZSBpZiB0aGUgb2JqZWN0IHdhcworICoJ CWFscmVhZHkgaW4gdGhlIHNobWVtIGluZGV4IChoZW5jZSwgYWxyZWFkeSBpbml0aWFsaXpl ZCkuCisgKgorICogTm90ZTogVGhpcyBpcyBhIGxlZ2FjeSBpbnRlcmZhY2UsIGtlcHQgZm9y IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGgKKyAqIGV4dGVuc2lvbnMuICBVc2UgU2ht ZW1SZXF1ZXN0U3RydWN0KCkgaW4gbmV3IGNvZGUhCisgKi8KK3ZvaWQgKgorU2htZW1Jbml0 U3RydWN0KGNvbnN0IGNoYXIgKm5hbWUsIFNpemUgc2l6ZSwgYm9vbCAqZm91bmRQdHIpCit7 CisJU2htZW1TdHJ1Y3REZXNjIGRlc2M7CisJU2htZW1TdHJ1Y3RPcHRzIG9wdGlvbnMgPSB7 CisJCS5uYW1lID0gbmFtZSwKKwkJLnNpemUgPSBzaXplLAorCX07CisJU2htZW1SZXF1ZXN0 IHJlcXVlc3QgPSB7JmRlc2MsICZvcHRpb25zLCBTSE1FTV9LSU5EX1NUUlVDVH07CisKKwlB c3NlcnQoc2htZW1fcmVxdWVzdF9zdGF0ZSA9PSBTUlNfRE9ORSB8fAorCQkgICBzaG1lbV9y ZXF1ZXN0X3N0YXRlID09IFNSU19JTklUSUFMSVpJTkcgfHwKKwkJICAgc2htZW1fcmVxdWVz dF9zdGF0ZSA9PSBTUlNfUkVRVUVTVElORyk7CisKKwkvKiBsb29rIGl0IHVwIGltbWVkaWF0 ZWx5ICovCisJTFdMb2NrQWNxdWlyZShTaG1lbUluZGV4TG9jaywgTFdfRVhDTFVTSVZFKTsK KwkqZm91bmRQdHIgPSBBdHRhY2hPckluaXRTaG1lbUluZGV4RW50cnkoJnJlcXVlc3QsIHRy dWUsIHRydWUpOworCUxXTG9ja1JlbGVhc2UoU2htZW1JbmRleExvY2spOworCisJQXNzZXJ0 KGRlc2MucHRyICE9IE5VTEwpOworCXJldHVybiBkZXNjLnB0cjsKK30KIAogLyoKICAqIEFk ZCB0d28gU2l6ZSB2YWx1ZXMsIGNoZWNraW5nIGZvciBvdmVyZmxvdwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW1faGFzaC5jIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvc2htZW1faGFzaC5jCmluZGV4IDQ3MTY2ZmYzMDFkLi5jMDY0NmI3NTk5NCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW1faGFzaC5jCisrKyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtX2hhc2guYwpAQCAtMjEsNiArMjEsODMg QEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5o IgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisKKy8qCisgKiBTaG1lbVJlcXVlc3RI YXNoIC0tIFJlcXVlc3QgYSBzaGFyZWQgbWVtb3J5IGhhc2ggdGFibGUuCisgKgorICogU2lt aWxhciB0byBTaG1lbVJlcXVlc3RTdHJ1Y3QoKSwgYnV0IHJlcXVlc3RzIGEgaGFzaCB0YWJs ZSBpbnN0ZWFkIG9mIGFuCisgKiBvcGFxdWUgYXJlYS4KKyAqLwordm9pZAorU2htZW1SZXF1 ZXN0SGFzaFdpdGhPcHRzKFNobWVtSGFzaERlc2MgKmRlc2MsIGNvbnN0IFNobWVtSGFzaE9w dHMgKm9wdGlvbnMpCit7CisJU2htZW1IYXNoT3B0cyAqb3B0aW9uc19jb3B5OworCWludDY0 CQlkaXJzaXplOworCisJQXNzZXJ0KG9wdGlvbnMtPm5hbWUgIT0gTlVMTCk7CisKKwlvcHRp b25zX2NvcHkgPSBNZW1vcnlDb250ZXh0QWxsb2MoVG9wTWVtb3J5Q29udGV4dCwKKwkJCQkJ CQkJCSAgc2l6ZW9mKFNobWVtSGFzaE9wdHMpKTsKKwltZW1jcHkob3B0aW9uc19jb3B5LCBv cHRpb25zLCBzaXplb2YoU2htZW1IYXNoT3B0cykpOworCisJLyoKKwkgKiBIYXNoIHRhYmxl cyBhbGxvY2F0ZWQgaW4gc2hhcmVkIG1lbW9yeSBoYXZlIGEgZml4ZWQgZGlyZWN0b3J5OyBp dCBjYW4ndAorCSAqIGdyb3cgb3Igb3RoZXIgYmFja2VuZHMgd291bGRuJ3QgYmUgYWJsZSB0 byBmaW5kIGl0LiBTbywgbWFrZSBzdXJlIHdlCisJICogbWFrZSBpdCBiaWcgZW5vdWdoIHRv IHN0YXJ0IHdpdGguCisJICoKKwkgKiBUaGUgc2hhcmVkIG1lbW9yeSBhbGxvY2F0b3IgbXVz dCBiZSBzcGVjaWZpZWQgdG9vLgorCSAqLworCWRpcnNpemUgPSBoYXNoX3NlbGVjdF9kaXJz aXplKG9wdGlvbnMtPm1heF9zaXplKTsKKwlvcHRpb25zX2NvcHktPmhhc2hfaW5mby5kc2l6 ZSA9IGRpcnNpemU7CisJb3B0aW9uc19jb3B5LT5oYXNoX2luZm8ubWF4X2RzaXplID0gZGly c2l6ZTsKKwlvcHRpb25zX2NvcHktPmhhc2hfaW5mby5hbGxvYyA9IFNobWVtSGFzaEFsbG9j OworCW9wdGlvbnNfY29weS0+aGFzaF9pbmZvLmFsbG9jX2FyZyA9IE5VTEw7CisJb3B0aW9u c19jb3B5LT5oYXNoX2ZsYWdzIHw9IEhBU0hfU0hBUkVEX01FTSB8IEhBU0hfQUxMT0MgfCBI QVNIX0RJUlNJWkU7CisKKwkvKiBTZXQgb3B0aW9ucyBmb3IgdGhlIGZpeGVkLXNpemUgYXJl YSBob2xkaW5nIHRoZSBoYXNoIHRhYmxlICovCisJb3B0aW9uc19jb3B5LT5iYXNlLm5hbWUg PSBvcHRpb25zLT5uYW1lOworCW9wdGlvbnNfY29weS0+YmFzZS5zaXplID0gaGFzaF9nZXRf c2hhcmVkX3NpemUoJm9wdGlvbnNfY29weS0+aGFzaF9pbmZvLAorCQkJCQkJCQkJCQkJICAg b3B0aW9uc19jb3B5LT5oYXNoX2ZsYWdzKTsKKworCS8qIFJlc2VydmUgZXh0cmEgc3BhY2Ug Zm9yIHRoZSBidWNrZXRzICovCisJb3B0aW9uc19jb3B5LT5iYXNlLmV4dHJhX3NpemUgPQor CQloYXNoX2VzdGltYXRlX3NpemUob3B0aW9ucy0+bWF4X3NpemUsIG9wdGlvbnNfY29weS0+ aGFzaF9pbmZvLmVudHJ5c2l6ZSkgLSBvcHRpb25zX2NvcHktPmJhc2Uuc2l6ZTsKKworCVNo bWVtUmVxdWVzdEludGVybmFsKCZkZXNjLT5iYXNlLCAmb3B0aW9uc19jb3B5LT5iYXNlLCBT SE1FTV9LSU5EX0hBU0gpOworfQorCit2b2lkCitzaG1lbV9oYXNoX2luaXQoU2htZW1TdHJ1 Y3REZXNjICpiYXNlX2Rlc2MsIFNobWVtU3RydWN0T3B0cyAqYmFzZV9vcHRpb25zKQorewor CVNobWVtSGFzaERlc2MgKmRlc2MgPSAoU2htZW1IYXNoRGVzYyAqKSBiYXNlX2Rlc2M7CisJ U2htZW1IYXNoT3B0cyAqb3B0aW9ucyA9IChTaG1lbUhhc2hPcHRzICopIGJhc2Vfb3B0aW9u czsKKwlpbnQJCQloYXNoX2ZsYWdzID0gb3B0aW9ucy0+aGFzaF9mbGFnczsKKworCW9wdGlv bnMtPmhhc2hfaW5mby5oY3RsID0gZGVzYy0+YmFzZS5wdHI7CisJQXNzZXJ0KG9wdGlvbnMt Pmhhc2hfaW5mby5oY3RsICE9IE5VTEwpOworCWRlc2MtPnB0ciA9IGhhc2hfY3JlYXRlKGRl c2MtPmJhc2UubmFtZSwgb3B0aW9ucy0+aW5pdF9zaXplLCAmb3B0aW9ucy0+aGFzaF9pbmZv LCBoYXNoX2ZsYWdzKTsKKworCWlmIChvcHRpb25zLT5wdHIpCisJCSpvcHRpb25zLT5wdHIg PSBkZXNjLT5wdHI7Cit9CisKK3ZvaWQKK3NobWVtX2hhc2hfYXR0YWNoKFNobWVtU3RydWN0 RGVzYyAqYmFzZV9kZXNjLCBTaG1lbVN0cnVjdE9wdHMgKmJhc2Vfb3B0aW9ucykKK3sKKwlT aG1lbUhhc2hEZXNjICpkZXNjID0gKFNobWVtSGFzaERlc2MgKikgYmFzZV9kZXNjOworCVNo bWVtSGFzaE9wdHMgKm9wdGlvbnMgPSAoU2htZW1IYXNoT3B0cyAqKSBiYXNlX29wdGlvbnM7 CisJaW50CQkJaGFzaF9mbGFncyA9IG9wdGlvbnMtPmhhc2hfZmxhZ3M7CisKKwkvKiBhdHRh Y2ggdG8gaXQgcmF0aGVyIHRoYW4gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgbmV3IHNwYWNl ICovCisJaGFzaF9mbGFncyB8PSBIQVNIX0FUVEFDSDsKKwlvcHRpb25zLT5oYXNoX2luZm8u aGN0bCA9IGRlc2MtPmJhc2UucHRyOworCUFzc2VydChvcHRpb25zLT5oYXNoX2luZm8uaGN0 bCAhPSBOVUxMKTsKKwlkZXNjLT5wdHIgPSBoYXNoX2NyZWF0ZShkZXNjLT5iYXNlLm5hbWUs IG9wdGlvbnMtPmluaXRfc2l6ZSwgJm9wdGlvbnMtPmhhc2hfaW5mbywgaGFzaF9mbGFncyk7 CisKKwlpZiAob3B0aW9ucy0+cHRyKQorCQkqb3B0aW9ucy0+cHRyID0gZGVzYy0+cHRyOwor fQogCiAKIC8qCkBAIC00Niw5ICsxMjMsOCBAQAogICogdG8gc2hhcmVkLW1lbW9yeSBoYXNo IHRhYmxlcyBhcmUgYWRkZWQgaGVyZSwgZXhjZXB0IHRoYXQgY2FsbGVycyBtYXkKICAqIGNo b29zZSB0byBzcGVjaWZ5IEhBU0hfUEFSVElUSU9OIGFuZC9vciBIQVNIX0ZJWEVEX1NJWkUu CiAgKgotICogTm90ZTogYmVmb3JlIFBvc3RncmVzIDkuMCwgdGhpcyBmdW5jdGlvbiByZXR1 cm5lZCBOVUxMIGZvciBzb21lIGZhaWx1cmUKLSAqIGNhc2VzLiAgTm93LCBpdCBhbHdheXMg dGhyb3dzIGVycm9yIGluc3RlYWQsIHNvIGNhbGxlcnMgbmVlZCBub3QgY2hlY2sKLSAqIGZv ciBOVUxMLgorICogTm90ZTogVGhpcyBpcyBhIGxlZ2FjeSBpbnRlcmZhY2UsIGtlcHQgZm9y IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGgKKyAqIGV4dGVuc2lvbnMuICBVc2UgU2ht ZW1SZXF1ZXN0SGFzaCgpIGluIG5ldyBjb2RlIQogICovCiBIVEFCICoKIFNobWVtSW5pdEhh c2goY29uc3QgY2hhciAqbmFtZSwJCS8qIHRhYmxlIHN0cmluZyBuYW1lIGZvciBzaG1lbSBp bmRleCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKaW5kZXggNWM0N2NmMTM0NzMuLjli ODgwYTZhZjY1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5j CisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKQEAgLTEyMSw2ICsxMjEs OSBAQCBGYXN0UGF0aExvY2tTaG1lbVNpemUodm9pZCkKIAogCXNpemUgPSBhZGRfc2l6ZShz aXplLCBtdWxfc2l6ZShUb3RhbFByb2NzLCAoZnBMb2NrQml0c1NpemUgKyBmcFJlbElkU2l6 ZSkpKTsKIAorCUFzc2VydChUb3RhbFByb2NzID4gMCk7CisJQXNzZXJ0KHNpemUgPiAwKTsK KwogCXJldHVybiBzaXplOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3Bv c3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKaW5kZXggMTBiZTYwMDEx YWQuLmFmN2NjODZkODBhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVz LmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC00MTU1LDcgKzQxNTUs MTQgQEAgUG9zdGdyZXNTaW5nbGVVc2VyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdLAog CUluaXRpYWxpemVGYXN0UGF0aExvY2tzKCk7CiAKIAkvKgotCSAqIEdpdmUgcHJlbG9hZGVk IGxpYnJhcmllcyBhIGNoYW5jZSB0byByZXF1ZXN0IGFkZGl0aW9uYWwgc2hhcmVkIG1lbW9y eS4KKwkgKiBCZWZvcmUgY29tcHV0aW5nIHRoZSB0b3RhbCBzaXplIG5lZWRlZCwgZ2l2ZSBh bGwgc3Vic3lzdGVtcywgaW5jbHVkaW5nCisJICogYWRkLWlucywgYSBjaGFuY2UgdG8gY2hh bmNlIHRvIGFkanVzdCB0aGVpciByZXF1ZXN0ZWQgc2htZW0gc2l6ZXMuCisJICovCisJU2ht ZW1DYWxsUmVxdWVzdENhbGxiYWNrcygpOworCisJLyoKKwkgKiBBbHNvIGNhbGwgYW55IGxl Z2FjeSBzaG1lbSByZXF1ZXN0IGhvb2tzIHRoYXQgbWlnaHQnYmUgYmVlbiBpbnN0YWxsZWQK KwkgKiBieSBwcmVsb2FkZWQgbGlicmFyaWVzLgogCSAqLwogCXByb2Nlc3Nfc2htZW1fcmVx dWVzdHMoKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zaG1lbS5oIGIv c3JjL2luY2x1ZGUvc3RvcmFnZS9zaG1lbS5oCmluZGV4IGQyNjIwNjEzMWQ3Li5mMzg1MGJj N2IwOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zaG1lbS5oCisrKyBiL3Ny Yy9pbmNsdWRlL3N0b3JhZ2Uvc2htZW0uaApAQCAtMjQsMTggKzI0LDIyNyBAQAogI2luY2x1 ZGUgInN0b3JhZ2Uvc3Bpbi5oIgogI2luY2x1ZGUgInV0aWxzL2hzZWFyY2guaCIKIAorLyog RGlmZmVyZW50IGtpbmRzIG9mIHNobWVtIGFyZWFzLiAqLwordHlwZWRlZiBlbnVtCit7CisJ U0hNRU1fS0lORF9TVFJVQ1QgPSAwLAkJLyogcGxhaW4sIGNvbnRpZ3VvdXMgYXJlYSBvZiBt ZW1vcnkgKi8KKwlTSE1FTV9LSU5EX0hBU0gsCQkJLyogYSBoYXNoIHRhYmxlICovCit9IFNo bWVtQXJlYUtpbmQ7CisKKy8qCisgKiBTaG1lbVN0cnVjdERlc2MgaXMgYmFja2VuZC1wcml2 YXRlIGhhbmRsZSBmb3IgYSBzaGFyZWQgbWVtb3J5IGFyZWEKKyAqIHJlcXVlc3RlZCB3aXRo IFNobWVtUmVxdWVzdFN0cnVjdCgpLgorICovCit0eXBlZGVmIHN0cnVjdCBTaG1lbVN0cnVj dERlc2MKK3sKKwkvKiBOYW1lIGFuZCBzaXplIG9mIHRoZSBzaGFyZWQgbWVtb3J5IGFyZWEu ICovCisJY29uc3QgY2hhciAqbmFtZTsKKworCXZvaWQJICAgKnB0cjsKKwlzaXplX3QJCXNp emU7Cit9IFNobWVtU3RydWN0RGVzYzsKKworI2RlZmluZSBTSE1FTV9BVFRBQ0hfVU5LTk9X Tl9TSVpFICgtMSkKKworLyoKKyAqIE9wdGlvbnMgZm9yIFNobWVtUmVxdWVzdFN0cnVjdCgp CisgKgorICogJ25hbWUnIGFuZCAnc2l6ZScgYXJlIHJlcXVpcmVkLiAgSW5pdGlhbGl6ZSBh bnkgb3B0aW9uYWwgZmllbGRzIHRoYXQgeW91CisgKiBkb24ndCB1c2UgdG8gemVyb3MuCisg KgorICogQWZ0ZXIgcmVnaXN0cmF0aW9uLCB0aGUgc2htZW0gbWFjaGluZXJ5IHJlc2VydmVz IG1lbW9yeSBmb3IgdGhlIGFyZWEsIHNldHMKKyAqICcqcHRyJyB0byBwb2ludCB0byB0aGUg YWxsb2NhdGlvbiwgYW5kIGNhbGxzIHRoZSBjYWxsYmFja3MgYXQgdGhlIHJpZ2h0CisgKiBt b21lbnRzLgorICovCit0eXBlZGVmIHN0cnVjdCBTaG1lbVN0cnVjdE9wdHMKK3sKKwljb25z dCBjaGFyICpuYW1lOworCisJc3NpemVfdAkJc2l6ZTsKKworCS8qCisJICogRXh0cmEgc3Bh Y2UgdG8gcmVzZXJ2ZSBpbiB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50LCBidXQgaXQncyBu b3QgcGFydAorCSAqIG9mIHRoZSBzdHJ1Y3QgaXRzZWxmLiAgVGhpcyBpcyB1c2VkIGZvciBz aGFyZWQgbWVtb3J5IGhhc2ggdGFibGVzIHRoYXQKKwkgKiBjYW4gZ3JvdyBiZXlvbmQgdGhl IGluaXRpYWwgc2l6ZSB3aGVuIG1vcmUgYnVja2V0cyBhcmUgYWxsb2NhdGVkLgorCSAqLwor CXNpemVfdAkJZXh0cmFfc2l6ZTsKKworCS8qCisJICogV2hlbiB0aGUgc2htZW0gYXJlYSBp cyBpbml0aWFsaXplZCBvciBhdHRhY2hlZCB0bywgcG9pbnRlciB0byBpdCBpcworCSAqIHN0 b3JlZCBpbiAqcHRyLiAgSXQgdXN1YWxseSBwb2ludHMgdG8gYSBnbG9iYWwgdmFyaWFibGUs IHVzZWQgdG8gYWNjZXNzCisJICogdGhlIHNoYXJlZCBtZW1vcnkgYXJlYSBsYXRlci4gICpw dHIgaXMgc2V0IGJlZm9yZSB0aGUgaW5pdF9mbiBvcgorCSAqIGF0dGFjaF9mbiBjYWxsYmFj ayBpcyBjYWxsZWQuCisJICovCisJdm9pZAkgICoqcHRyOworfSBTaG1lbVN0cnVjdE9wdHM7 CisKKy8qCisgKiBCYWNrZW5kLXByaXZhdGUgaGFuZGxlIGZvciBhIG5hbWVkIHNoYXJlZCBt ZW1vcnkgaGFzaCB0YWJsZSwgc2ltaWxhciB0bworICogU2htZW1TdHJ1Y3REZXNjLgorICov Cit0eXBlZGVmIHN0cnVjdCBTaG1lbUhhc2hEZXNjCit7CisJLyoKKwkgKiBEZXNjcmlwdG9y IG9mIHRoZSB1bmRlcmx5aW5nIGZpeGVkLXNpemUgYWxsb2NhdGVkIGFyZWEgd2hlcmUgdGhl IGhhc2gKKwkgKiB0YWJsZSBsaXZlcy4KKwkgKi8KKwlTaG1lbVN0cnVjdERlc2MgYmFzZTsK KworCUhUQUIJICAgKnB0cjsKK30gU2htZW1IYXNoRGVzYzsKKworLyoKKyAqIE9wdGlvbnMg Zm9yIFNobWVtUmVxdWVzdEhhc2goKQorICoKKyAqIEVhY2ggaGFzaCB0YWJsZSBpcyBiYWNr ZWQgYnkgYW4gYWxsb2NhdGVkIGFyZWEsIGJ1dCBpZiAnbWF4X3NpemUnIGlzCisgKiBncmVh dGVyIHRoYW4gJ2luaXRfc2l6ZScsIGl0IGNhbiBhbHNvIGdyb3cgYmV5b25kIHRoZSBpbml0 aWFsIGFsbG9jYXRlZAorICogYXJlYSBieSBhbGxvY2F0aW5nIG1vcmUgaGFzaCBlbnRyaWVz IGZyb20gdGhlIGdsb2JhbCB1bnJlc2VydmVkIHNwYWNlLgorICovCit0eXBlZGVmIHN0cnVj dCBTaG1lbUhhc2hPcHRzCit7CisJU2htZW1TdHJ1Y3RPcHRzIGJhc2U7CisKKwkvKgorCSAq IE5hbWUgb2YgdGhlIHNoYXJlZCBtZW1vcnkgYXJlYS4gIFJlcXVpcmVkLiAgTXVzdCBiZSB1 bmlxdWUgYWNyb3NzIHRoZQorCSAqIHN5c3RlbS4KKwkgKi8KKwljb25zdCBjaGFyICpuYW1l OworCisJLyoKKwkgKiBtYXhfc2l6ZSBpcyB0aGUgZXN0aW1hdGVkIG1heGltdW0gbnVtYmVy IG9mIGhhc2h0YWJsZSBlbnRyaWVzLiAgVGhpcyBpcworCSAqIG5vdCBhIGhhcmQgbGltaXQs IGJ1dCB0aGUgYWNjZXNzIGVmZmljaWVuY3kgd2lsbCBkZWdyYWRlIGlmIGl0IGlzCisJICog ZXhjZWVkZWQgc3Vic3RhbnRpYWxseSAoc2luY2UgaXQncyB1c2VkIHRvIGNvbXB1dGUgZGly ZWN0b3J5IHNpemUgYW5kCisJICogdGhlIGhhc2ggdGFibGUgYnVja2V0cyB3aWxsIGdldCBv dmVyZnVsbCkuCisJICovCisJc2l6ZV90CQltYXhfc2l6ZTsKKworCS8qCisJICogaW5pdF9z aXplIGlzIHRoZSBudW1iZXIgb2YgaGFzaHRhYmxlIGVudHJpZXMgdG8gcHJlYWxsb2NhdGUu ICBGb3IgYQorCSAqIHRhYmxlIHdob3NlIG1heGltdW0gc2l6ZSBpcyBjZXJ0YWluLCB0aGlz IHNob3VsZCBiZSBlcXVhbCB0byBtYXhfc2l6ZTsKKwkgKiB0aGF0IGVuc3VyZXMgdGhhdCBu byBydW4tdGltZSBvdXQtb2Ytc2hhcmVkLW1lbW9yeSBmYWlsdXJlcyBjYW4gb2NjdXIuCisJ ICovCisJc2l6ZV90CQlpbml0X3NpemU7CisKKwkvKgorCSAqIEhhc2ggdGFibGUgb3B0aW9u cyBwYXNzZWQgdG8gaGFzaF9jcmVhdGUoKQorCSAqCisJICogaGFzaF9pbmZvIGFuZCBoYXNo X2ZsYWdzIG11c3Qgc3BlY2lmeSBhdCBsZWFzdCB0aGUgZW50cnkgc2l6ZXMgYW5kIGtleQor CSAqIGNvbXBhcmlzb24gc2VtYW50aWNzIChzZWUgaGFzaF9jcmVhdGUoKSkuICBGbGFnIGJp dHMgYW5kIHZhbHVlcworCSAqIHNwZWNpZmljIHRvIHNoYXJlZC1tZW1vcnkgaGFzaCB0YWJs ZXMgYXJlIGFkZGVkIGltcGxpY2l0bHkgaW4KKwkgKiBTaG1lbVJlcXVlc3RIYXNoKCksIGV4 Y2VwdCB0aGF0IGNhbGxlcnMgbWF5IGNob29zZSB0byBzcGVjaWZ5CisJICogSEFTSF9QQVJU SVRJT04gYW5kL29yIEhBU0hfRklYRURfU0laRS4KKwkgKi8KKwlIQVNIQ1RMCQloYXNoX2lu Zm87CisJaW50CQkJaGFzaF9mbGFnczsKKworCS8qCisJICogV2hlbiB0aGUgaGFzaCB0YWJs ZSBpcyBpbml0aWFsaXplZCBvciBhdHRhY2hlZCB0bywgcG9pbnRlciB0byBpdHMKKwkgKiBi YWNrZW5kLXByaXZhdGUgaGFuZGxlIGlzIHN0b3JlZCBpbiAqcHRyLiAgSXQgdXN1YWxseSBw b2ludHMgdG8gYQorCSAqIGdsb2JhbCB2YXJpYWJsZSwgdXNlZCB0byBhY2Nlc3MgdGhlIGhh c2ggdGFibGUgbGF0ZXIuCisJICovCisJSFRBQgkgICoqcHRyOworfSBTaG1lbUhhc2hPcHRz OworCit0eXBlZGVmIHZvaWQgKCpTaG1lbVJlcXVlc3RDYWxsYmFjaykgKHZvaWQgKmFyZyk7 Cit0eXBlZGVmIHZvaWQgKCpTaG1lbUluaXRDYWxsYmFjaykgKHZvaWQgKmFyZyk7Cit0eXBl ZGVmIHZvaWQgKCpTaG1lbUF0dGFjaENhbGxiYWNrKSAodm9pZCAqYXJnKTsKKworLyoKKyAq IFNoYXJlZCBtZW1vcnkgaXMgcmVzZXJ2ZWQgYW5kIGFsbG9jYXRlZCBpbiBzdGFnZXMgYXQg cG9zdG1hc3RlciBzdGFydHVwLAorICogYW5kIGluIEVYRUNfQkFDS0VORCBtb2RlLCB0aGVy ZSdzIHNvbWUgZXh0cmEgd29yayBkb25lIHRvICJhdHRhY2giIHRvIHRoZW0KKyAqIGF0IGJh Y2tlbmQgc3RhcnR1cC4gIFNobWVtQ2FsbGJhY2tzIGhvbGRzIGNhbGxiYWNrIGZ1bmN0aW9u cyB0aGF0IGFyZQorICogY2FsbGVkIGF0IGRpZmZlcmVudCBzdGFnZXMuCisgKi8KK3R5cGVk ZWYgc3RydWN0IFNobWVtQ2FsbGJhY2tzCit7CisJLyogU0hNRU1fQ0FMTEJBQ0tTXyogZmxh Z3MgKi8KKwlpbnQJCQlmbGFnczsKKworCS8qCisJICogJ3JlcXVlc3RfZm4nIGlzIGNhbGxl ZCBkdXJpbmcgcG9zdG1hc3RlciBzdGFydHVwLCBiZWZvcmUgdGhlIHNoYXJlZAorCSAqIG1l bW9yeSBoYXMgYmVlbiBhbGxvY2F0ZWQuICBUaGUgZnVuY3Rpb24gc2hvdWxkIGNhbGwKKwkg KiBSZXF1ZXN0U2htZW1TdHJ1Y3QoKSBhbmQgUmVxdWVzdFNobWVtSGFzaCgpIHRvIHJlZ2lz dGVyIHRoZSBzdWJzeXN0ZW0ncworCSAqIHNoYXJlZCBtZW1vcnkgbmVlZHMuCisJICovCisJ U2htZW1SZXF1ZXN0Q2FsbGJhY2sgcmVxdWVzdF9mbjsKKwl2b2lkCSAgICpyZXF1ZXN0X2Zu X2FyZzsKKworCS8qCisJICogSW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgZnVuY3Rpb24uICBU aGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBzaGFyZWQKKwkgKiBtZW1vcnkgYXJlYSBpcyBhbGxv Y2F0ZWQsIHVzdWFsbHkgYXQgcG9zdG1hc3RlciBzdGFydHVwLgorCSAqLworCVNobWVtSW5p dENhbGxiYWNrIGluaXRfZm47CisJdm9pZAkgICAqaW5pdF9mbl9hcmc7CisKKwkvKgorCSAq IEF0dGFjaG1lbnQgY2FsbGJhY2sgZnVuY3Rpb24uICBJbiBFWEVDX0JBQ0tFTkQgbW9kZSwg dGhpcyBpcyBjYWxsZWQgYXQKKwkgKiBzdGFydHVwIG9mIGVhY2ggYmFja2VuZC4gIEluICFF WEVDX0JBQ0tFTkQgbW9kZSwgdGhpcyBpcyBvbmx5IGNhbGxlZCBpZgorCSAqIHRoZSBzaGFy ZWQgbWVtb3J5IGFyZWEgaXMgcmVnaXN0ZXJlZCBhZnRlciBwb3N0bWFzdGVyIHN0YXJ0dXAg KHNlZQorCSAqIFNITUVNX0NBTExCQUNLU19BTExPV19BRlRFUl9TVEFSVFVQKS4KKwkgKi8K KwlTaG1lbUF0dGFjaENhbGxiYWNrIGF0dGFjaF9mbjsKKwl2b2lkCSAgICphdHRhY2hfZm5f YXJnOworfSBTaG1lbUNhbGxiYWNrczsKKworLyoKKyAqIEZsYWdzIHRvIGNvbnRyb2wgdGhl IGJlaGF2aW9yIG9mIFJlZ2lzdGVyU2htZW1DYWxsYmFja3MoKS4KKyAqCisgKiBBTExPV19B RlRFUl9TVEFSVFVQOiBBbGxvdyB0aGVzZSBzaGFyZWQgbWVtb3J5IHVzYWdlcyB0byBiZSBy ZWdpc3RlcmVkCisgKiBhZnRlciBwb3N0bWFzdGVyIHN0YXJ0dXAuICBOb3JtYWxseSwgcmVn aXN0ZXJpbmcgYSBzaGFyZWQgbWVtb3J5IHN5c3RlbQorICogYWZ0ZXIgcG9zdG1hc3RlciBz dGFydHVwIGlzIG5vdCBhbGxvd2VkIGUuZy4gaW4gYW4gYWRkLWluIGxpYnJhcnkgbG9hZGVk CisgKiBvbi1kZW1haW5kIGluIGEgYmFja2VuZC4gIElmIGEgc3Vic3lzdGVtIHNldHMgdGhp cyBmbGFnLCB0aGUgY2FsbGJhY2tzIGFyZQorICogY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVy IHJlZ2lzdHJhdGlvbiwgdG8gaW5pdGlhbGl6ZSBvciBhdHRhY2ggdG8gdGhlCisgKiByZXF1 ZXN0ZWQgc2hhcmVkIG1lbW9yeSBhcmVhcy4gIFRoaXMgaXMgbm90IHVzZWQgYnkgYW55IGJ1 aWx0LWluCisgKiBzdWJzeXN0ZW1zLCBidXQgZXh0ZW5zaW9ucyBtYXkgZmluZCBpdCB1c2Vm dWwuCisgKi8KKyNkZWZpbmUgU0hNRU1fQ0FMTEJBQ0tTX0FMTE9XX0FGVEVSX1NUQVJUVVAJ CTB4MDAwMDAwMDEKIAogLyogc2htZW0uYyAqLwogdHlwZWRlZiBzdHJ1Y3QgUEdTaG1lbUhl YWRlciBQR1NobWVtSGVhZGVyOyAvKiBhdm9pZCBpbmNsdWRpbmcKIAkJCQkJCQkJCQkJICog c3RvcmFnZS9wZ19zaG1lbS5oIGhlcmUgKi8KK2V4dGVybiB2b2lkIFJlc2V0U2htZW1BbGxv Y2F0b3Iodm9pZCk7CiBleHRlcm4gdm9pZCBJbml0U2htZW1BbGxvY2F0b3IoUEdTaG1lbUhl YWRlciAqc2VnaGRyKTsKKyNpZmRlZiBFWEVDX0JBQ0tFTkQKK2V4dGVybiB2b2lkIEF0dGFj aFNobWVtQWxsb2NhdG9yKFBHU2htZW1IZWFkZXIgKnNlZ2hkcik7CisjZW5kaWYKIGV4dGVy biB2b2lkICpTaG1lbUFsbG9jKFNpemUgc2l6ZSk7CiBleHRlcm4gdm9pZCAqU2htZW1BbGxv Y05vRXJyb3IoU2l6ZSBzaXplKTsKIGV4dGVybiB2b2lkICpTaG1lbUhhc2hBbGxvYyhTaXpl IHNpemUsIHZvaWQgKmFsbG9jX2FyZyk7CiBleHRlcm4gYm9vbCBTaG1lbUFkZHJJc1ZhbGlk KGNvbnN0IHZvaWQgKmFkZHIpOworCitleHRlcm4gdm9pZCBSZWdpc3RlclNobWVtQ2FsbGJh Y2tzKGNvbnN0IFNobWVtQ2FsbGJhY2tzICpjYWxsYmFja3MpOworCitleHRlcm4gdm9pZCBT aG1lbVJlcXVlc3RJbnRlcm5hbChTaG1lbVN0cnVjdERlc2MgKmRlc2MsIFNobWVtU3RydWN0 T3B0cyAqb3B0aW9ucywKKwkJCQkJCQkJIFNobWVtQXJlYUtpbmQga2luZCk7CisKKy8qCisg KiBUaGVzZSBtYWNyb3MgcHJvdmlkZSBzeW50YWN0aWMgc3VnYXIgZm9yIGNhbGxpbmcgdGhl IHVuZGVybHlpbmcgZnVuY3Rpb25zCisgKiB3aXRoIG5hbWVkIGFyZ3VtZW50cyAtbGlrZSBz eW50YXguCisgKi8KKyNkZWZpbmUgU2htZW1SZXF1ZXN0U3RydWN0KGRlc2MsIC4uLikgIFwK KwlTaG1lbVJlcXVlc3RTdHJ1Y3RXaXRoT3B0cyhkZXNjLCAmKFNobWVtU3RydWN0T3B0cyl7 X19WQV9BUkdTX199KQorCisjZGVmaW5lIFNobWVtUmVxdWVzdEhhc2goZGVzYywgLi4uKSAg XAorCVNobWVtUmVxdWVzdEhhc2hXaXRoT3B0cyhkZXNjLCAmKFNobWVtSGFzaE9wdHMpe19f VkFfQVJHU19ffSkKKworZXh0ZXJuIHZvaWQgU2htZW1SZXF1ZXN0U3RydWN0V2l0aE9wdHMo U2htZW1TdHJ1Y3REZXNjICpkZXNjLCBjb25zdCBTaG1lbVN0cnVjdE9wdHMgKm9wdGlvbnMp OworZXh0ZXJuIHZvaWQgU2htZW1SZXF1ZXN0SGFzaFdpdGhPcHRzKFNobWVtSGFzaERlc2Mg KmRlc2MsIGNvbnN0IFNobWVtSGFzaE9wdHMgKm9wdGlvbnMpOworZXh0ZXJuIHZvaWQgU2ht ZW1DYWxsUmVxdWVzdENhbGxiYWNrcyh2b2lkKTsKKworLyogbGVnYWN5IHNobWVtIGFsbG9j YXRpb24gZnVuY3Rpb25zICovCiBleHRlcm4gSFRBQiAqU2htZW1Jbml0SGFzaChjb25zdCBj aGFyICpuYW1lLCBpbnQ2NCBpbml0X3NpemUsIGludDY0IG1heF9zaXplLAogCQkJCQkJICAg SEFTSENUTCAqaW5mb1AsIGludCBoYXNoX2ZsYWdzKTsKIGV4dGVybiB2b2lkICpTaG1lbUlu aXRTdHJ1Y3QoY29uc3QgY2hhciAqbmFtZSwgU2l6ZSBzaXplLCBib29sICpmb3VuZFB0cik7 CisKK2V4dGVybiBzaXplX3QgU2htZW1HZXRSZXF1ZXN0ZWRTaXplKHZvaWQpOworZXh0ZXJu IHZvaWQgU2htZW1Jbml0UmVxdWVzdGVkKHZvaWQpOworI2lmZGVmIEVYRUNfQkFDS0VORAor ZXh0ZXJuIHZvaWQgU2htZW1BdHRhY2hSZXF1ZXN0ZWQodm9pZCk7CisjZW5kaWYKKworZXh0 ZXJuIHZvaWQgc2htZW1faGFzaF9pbml0KFNobWVtU3RydWN0RGVzYyAqYmFzZV9kZXNjLCBT aG1lbVN0cnVjdE9wdHMgKm9wdGlvbnMpOworZXh0ZXJuIHZvaWQgc2htZW1faGFzaF9hdHRh Y2goU2htZW1TdHJ1Y3REZXNjICpiYXNlX2Rlc2MsIFNobWVtU3RydWN0T3B0cyAqb3B0aW9u cyk7CisKIGV4dGVybiBTaXplIGFkZF9zaXplKFNpemUgczEsIFNpemUgczIpOwogZXh0ZXJu IFNpemUgbXVsX3NpemUoU2l6ZSBzMSwgU2l6ZSBzMik7CiAKQEAgLTQ0LDE5ICsyNTMsNCBA QCBleHRlcm4gUEdETExJTVBPUlQgU2l6ZSBwZ19nZXRfc2htZW1fcGFnZXNpemUodm9pZCk7 CiAvKiBpcGNpLmMgKi8KIGV4dGVybiB2b2lkIFJlcXVlc3RBZGRpblNobWVtU3BhY2UoU2l6 ZSBzaXplKTsKIAotLyogc2l6ZSBjb25zdGFudHMgZm9yIHRoZSBzaG1lbSBpbmRleCB0YWJs ZSAqLwotIC8qIG1heCBzaXplIG9mIGRhdGEgc3RydWN0dXJlIHN0cmluZyBuYW1lICovCi0j ZGVmaW5lIFNITUVNX0lOREVYX0tFWVNJWkUJCSAoNDgpCi0gLyogZXN0aW1hdGVkIHNpemUg b2YgdGhlIHNobWVtIGluZGV4IHRhYmxlIChub3QgYSBoYXJkIGxpbWl0KSAqLwotI2RlZmlu ZSBTSE1FTV9JTkRFWF9TSVpFCQkgKDY0KQotCi0vKiB0aGlzIGlzIGEgaGFzaCBidWNrZXQg aW4gdGhlIHNobWVtIGluZGV4IHRhYmxlICovCi10eXBlZGVmIHN0cnVjdAotewotCWNoYXIJ CWtleVtTSE1FTV9JTkRFWF9LRVlTSVpFXTsJLyogc3RyaW5nIG5hbWUgKi8KLQl2b2lkCSAg ICpsb2NhdGlvbjsJCS8qIGxvY2F0aW9uIGluIHNoYXJlZCBtZW0gKi8KLQlTaXplCQlzaXpl OwkJCS8qICMgYnl0ZXMgcmVxdWVzdGVkIGZvciB0aGUgc3RydWN0dXJlICovCi0JU2l6ZQkJ YWxsb2NhdGVkX3NpemU7IC8qICMgYnl0ZXMgYWN0dWFsbHkgYWxsb2NhdGVkICovCi19IFNo bWVtSW5kZXhFbnQ7Ci0KICNlbmRpZgkJCQkJCQkvKiBTSE1FTV9IICovCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLmMgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLmMKaW5kZXggZDc1MzA2ODExOTIuLjM0NDg3YTA1NDg2 IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLmMKKysr IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jCkBAIC03Nyw3ICs3Nyw2 IEBAIHN0YXRpYyBJbmpJb0Vycm9yU3RhdGUgKmlual9pb19lcnJvcl9zdGF0ZTsKIHN0YXRp YyBzaG1lbV9yZXF1ZXN0X2hvb2tfdHlwZSBwcmV2X3NobWVtX3JlcXVlc3RfaG9vayA9IE5V TEw7CiBzdGF0aWMgc2htZW1fc3RhcnR1cF9ob29rX3R5cGUgcHJldl9zaG1lbV9zdGFydHVw X2hvb2sgPSBOVUxMOwogCi0KIHN0YXRpYyBQZ0Fpb0hhbmRsZSAqbGFzdF9oYW5kbGU7CiAK IApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA1YmM1MTc2MDJiMS4uODgwNDE3 ZGYyMzUgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0Cisr KyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0yODU0LDkgKzI4NTQs MTYgQEAgU2hhcmVkVHlwbW9kVGFibGVFbnRyeQogU2hhcmVkc29ydAogU2hlbGxUeXBlSW5m bwogU2hpcHBhYmxlQ2FjaGVFbnRyeQotU2htZW1BbGxvY2F0b3JEYXRhCiBTaGlwcGFibGVD YWNoZUtleQorU2htZW1BbGxvY2F0b3JEYXRhCitTaG1lbUFyZWFLaW5kCitTaG1lbUNhbGxi YWNrcwogU2htZW1JbmRleEVudAorU2htZW1IYXNoRGVzYworU2htZW1IYXNoT3B0cworU2ht ZW1SZXF1ZXN0CitTaG1lbVN0cnVjdERlc2MKK1NobWVtU3RydWN0T3B0cwogU2h1dGRvd25G b3JlaWduU2Nhbl9mdW5jdGlvbgogU2h1dGRvd25JbmZvcm1hdGlvbgogU2h1dGRvd25Nb2Rl Ci0tIAoyLjQ3LjMKCg== --------------cltwtZYaOf76t571xokamZd0 Content-Type: text/x-patch; charset=UTF-8; name="v9-0006-Add-test-module-to-test-after-startup-shmem-alloc.patch" Content-Disposition: attachment; filename*0="v9-0006-Add-test-module-to-test-after-startup-shmem-alloc.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBjOGRlODg1ZDZjMTA2MTRmZmEyYzIwOTZjYzkxMTkyYTVmNzBkNzYzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMSBBcHIgMjAyNiAxODoxMDozMSArMDMwMApT dWJqZWN0OiBbUEFUQ0ggdjkgMDYvMTZdIEFkZCB0ZXN0IG1vZHVsZSB0byB0ZXN0IGFmdGVy LXN0YXJ0dXAgc2htZW0KIGFsbG9jYXRpb25zCgpOb25lIG9mIHRoZSBleGlzdGluZyBtb2R1 bGVzIGNvdWxkIG1ha2UgdXNlIG9mIHRoZSBsYXp5IHNobWVtCmFsbG9jYXRpb24gYWZ0ZXIg cG9zdG1hc3RlciBzdGFydHVwOgoKLSBwZ19zdGF0X3N0YXRlbWVudHMgbmVlZHMgdG8gbG9h ZCBhbmQgZHVtcCBzdGF0cyBmaWxlIG9uIHN0YXJ0dXAgYW5kCiAgc2h1dGRvd24sIHdoaWNo IGRvZXNuJ3QgcmVhbGx5IHdvcmsgaWYgdGhlIGxpYnJhcnkgaXMgbm90IGxvYWRlZCBpbnRv CiAgcG9zdG1hc3RlcgoKLSB0ZXN0X2FpbyByZWdpc3RlcnMgaW5qZWN0aW9uIHBvaW50cywg d2hpY2ggcmVmZXJlbmNlIHRoZSBsaWJyYXJ5CiAgaXRzZWxmLCB3aGljaCBjcmVhdGVzIGEg d2VpcmQgaW5pdGlhbGl6YXRpb24gbG9vcCBpZiB5b3UgdHJ5IHRvIGRvCiAgdGhhdCBkaXJl Y3RseSBmcm9tIF9QR19pbml0KCkgaW4gYSBiYWNrZW5kLiBUaGUgaW5pdGlhbGl6YXRpb24K ICByZWFsbHkgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIF9QR19pbml0KCkKCi0gaW5qZWN0aW9u X3BvaW50cyB3b3VsZCBiZSBhIGNhbmRpZGF0ZSwgYnV0IGl0IGFscmVhZHkga25vd3MgdG8g dXNlCiAgRFNNIHdoZW4gaXQncyBub3QgbG9hZGVkIGZyb20gc2hhcmVkX3ByZWxvYWRfbGli cmFyaWVzLgotLS0KIHNyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgICAgICAgICAgICAgICAg ICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkICAgICAgICAgICAg ICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NobWVtL01ha2VmaWxlICAg ICAgICAgIHwgIDI0ICsrKysKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1lbS9tZXNvbi5i dWlsZCAgICAgICB8ICAzMyArKysrKysKIC4uLi90ZXN0X3NobWVtL3QvMDAxX2xhdGVfc2ht ZW1fYWxsb2MucGwgICAgICB8ICA0OSArKysrKysrKwogLi4uL21vZHVsZXMvdGVzdF9zaG1l bS90ZXN0X3NobWVtLS0xLjAuc3FsICAgIHwgICA5ICsrCiBzcmMvdGVzdC9tb2R1bGVzL3Rl c3Rfc2htZW0vdGVzdF9zaG1lbS5jICAgICAgfCAxMDUgKysrKysrKysrKysrKysrKysrCiAu Li4vbW9kdWxlcy90ZXN0X3NobWVtL3Rlc3Rfc2htZW0uY29udHJvbCAgICAgfCAgIDMgKwog c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAxICsK IDkgZmlsZXMgY2hhbmdlZCwgMjI2IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htZW0vTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htZW0vbWVzb24uYnVpbGQKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htZW0vdC8wMDFfbGF0ZV9zaG1l bV9hbGxvYy5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9z aG1lbS90ZXN0X3NobWVtLS0xLjAuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X3NobWVtL3Rlc3Rfc2htZW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9zaG1lbS90ZXN0X3NobWVtLmNvbnRyb2wKCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtl ZmlsZQppbmRleCAyOGNlM2IzNWVkYS4uNjJmYWI5ZjNjMmYgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L21vZHVsZXMvTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQpA QCAtNDcsNiArNDcsNyBAQCBTVUJESVJTID0gXAogCQkgIHRlc3RfcmVzb3duZXIgXAogCQkg IHRlc3RfcmxzX2hvb2tzIFwKIAkJICB0ZXN0X3Nhc2xwcmVwIFwKKwkJICB0ZXN0X3NobWVt IFwKIAkJICB0ZXN0X3NobV9tcSBcCiAJCSAgdGVzdF9zbHJ1IFwKIAkJICB0ZXN0X3RpZHN0 b3JlIFwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgYi9zcmMv dGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCmluZGV4IDNhYzI5MTY1NmMxLi42Nzk5YmExMWUx MSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCkBAIC00OCw2ICs0OCw3IEBAIHN1YmRpcigndGVz dF9yZWdleCcpCiBzdWJkaXIoJ3Rlc3RfcmVzb3duZXInKQogc3ViZGlyKCd0ZXN0X3Jsc19o b29rcycpCiBzdWJkaXIoJ3Rlc3Rfc2FzbHByZXAnKQorc3ViZGlyKCd0ZXN0X3NobWVtJykK IHN1YmRpcigndGVzdF9zaG1fbXEnKQogc3ViZGlyKCd0ZXN0X3NscnUnKQogc3ViZGlyKCd0 ZXN0X3RpZHN0b3JlJykKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1l bS9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1lbS9NYWtlZmlsZQpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjQwN2Y3NDYyZmUKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htZW0vTWFrZWZpbGUKQEAg LTAsMCArMSwyNCBAQAorIyBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htZW0vTWFrZWZpbGUK KworUEdGSUxFREVTQyA9ICJ0ZXN0X3NobWVtIC0gdGVzdCBjb2RlIGZvciBzaG1lbSBhbGxv Y2F0aW9ucyIKKworTU9EVUxFX2JpZyA9IHRlc3Rfc2htZW0KK09CSlMgPSBcCisJJChXSU4z MlJFUykgXAorCXRlc3Rfc2htZW0ubworCitFWFRFTlNJT04gPSB0ZXN0X3NobWVtCitEQVRB ID0gdGVzdF9zaG1lbS0tMS4wLnNxbAorCitUQVBfVEVTVFMgPSAxCisKK2lmZGVmIFVTRV9Q R1hTCitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJ RykgLS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBzcmMvdGVzdC9t b2R1bGVzL3Rlc3Rfc2htZW0KK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNsdWRl ICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQodG9wX3Ny Y2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5taworZW5kaWYKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9zaG1lbS9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9zaG1lbS9tZXNvbi5idWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uZmI0YmYzMjhiOGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3Rfc2htZW0vbWVzb24uYnVpbGQKQEAgLTAsMCArMSwzMyBAQAorIyBDb3B5 cmlnaHQgKGMpIDIwMjQtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKwordGVzdF9zaG1lbV9zb3VyY2VzID0gZmlsZXMoCisgICd0ZXN0X3NobWVtLmMnLAor KQorCitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAgdGVzdF9zaG1lbV9zb3VyY2Vz ICs9IHJjX2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWworICAg ICctLU5BTUUnLCAndGVzdF9zaG1lbScsCisgICAgJy0tRklMRURFU0MnLCAndGVzdF9zaG1l bSAtIHRlc3QgY29kZSBmb3Igc2htZW0gYWxsb2NhdGlvbnMnLF0pCitlbmRpZgorCit0ZXN0 X3NobWVtID0gc2hhcmVkX21vZHVsZSgndGVzdF9zaG1lbScsCisgIHRlc3Rfc2htZW1fc291 cmNlcywKKyAga3dhcmdzOiBwZ190ZXN0X21vZF9hcmdzLAorKQordGVzdF9pbnN0YWxsX2xp YnMgKz0gdGVzdF9zaG1lbQorCit0ZXN0X2luc3RhbGxfZGF0YSArPSBmaWxlcygKKyAgJ3Rl c3Rfc2htZW0uY29udHJvbCcsCisgICd0ZXN0X3NobWVtLS0xLjAuc3FsJywKKykKKwordGVz dHMgKz0geworICAnbmFtZSc6ICd0ZXN0X3NobWVtJywKKyAgJ3NkJzogbWVzb24uY3VycmVu dF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCisg ICd0YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAgJ3QvMDAxX2xhdGVfc2htZW1fYWxs b2MucGwnLAorICAgIF0sCisgIH0sCit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3Rfc2htZW0vdC8wMDFfbGF0ZV9zaG1lbV9hbGxvYy5wbCBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9zaG1lbS90LzAwMV9sYXRlX3NobWVtX2FsbG9jLnBsCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMTU0ZjU3NjgyYQotLS0gL2Rldi9udWxsCisr KyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1lbS90LzAwMV9sYXRlX3NobWVtX2FsbG9j LnBsCkBAIC0wLDAgKzEsNDkgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI1LTIwMjYsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2Fy bmluZ3MgRkFUQUwgPT4gJ2FsbCc7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy OwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMj IworIyBUZXN0IGFsbG9jYXRpbmcgbWVtb3J5IGFmdGVyIHN0YXJ0dXAsIGkuZS4gd2hlbiB0 aGUgbGlicmFyeSBpcyBub3QKKyMgaW4gc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzCisjIyMK K215ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdtYWluJyk7Cisk bm9kZS0+aW5pdDsKKyRub2RlLT5zdGFydDsKKworCiskbm9kZS0+c2FmZV9wc3FsKCJwb3N0 Z3JlcyIsICJDUkVBVEUgRVhURU5TSU9OIHRlc3Rfc2htZW07Iik7CisKKyMgQ2hlY2sgdGhh dCB0aGUgYXR0YWNoIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgb24gYSBuZXcgY29ubmVjdGlv bgorbXkgJGF0dGFjaF9jb3VudDEgPSAkbm9kZS0+c2FmZV9wc3FsKCJwb3N0Z3JlcyIsICJT RUxFQ1QgZ2V0X3Rlc3Rfc2htZW1fYXR0YWNoX2NvdW50KCk7Iik7CitteSAkYXR0YWNoX2Nv dW50MiA9ICRub2RlLT5zYWZlX3BzcWwoInBvc3RncmVzIiwgIlNFTEVDVCBnZXRfdGVzdF9z aG1lbV9hdHRhY2hfY291bnQoKTsiKTsKK2NtcF9vaygkYXR0YWNoX2NvdW50MiwgJz4nLCAk YXR0YWNoX2NvdW50MSwgImF0dGFjaCBjYWxsYmFjayBpcyBjYWxsZWQgaW4gZWFjaCBiYWNr ZW5kIik7Ciskbm9kZS0+c3RvcDsKKworIyMjCisjIFRlc3QgdGhhdCBsb2FkaW5nIHZpYSBz aGFyZWRfcHJlbG9hZF9saWJyYXJpZXMgYWxzbyB3b3JrcworIyMjCiskbm9kZS0+YXBwZW5k X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICJzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMgPSAn dGVzdF9zaG1lbSciKTsKKyRub2RlLT5zdGFydDsKKworIyBXaGVuIGxvYWRlZCB2aWEgc2hh cmVkX3ByZWxvYWRfbGlicmFyaWVzLCB0aGUgYXR0YWNoIGNhbGxiYWNrIGlzCisjIGNhbGxl ZCBvciBub3QsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoaXMgaXMgYW4gRVhFQ19CQUNLRU5E IGJ1aWxkLgorbXkgJGV4ZWNfYmFja2VuZCA9ICRub2RlLT5zYWZlX3BzcWwoInBvc3RncmVz IiwgIlNIT1cgZGVidWdfZXhlY19iYWNrZW5kOyIpIGVxICdvbic7CiskYXR0YWNoX2NvdW50 MSA9ICRub2RlLT5zYWZlX3BzcWwoInBvc3RncmVzIiwgIlNFTEVDVCBnZXRfdGVzdF9zaG1l bV9hdHRhY2hfY291bnQoKTsiKTsKKyRhdHRhY2hfY291bnQyID0gJG5vZGUtPnNhZmVfcHNx bCgicG9zdGdyZXMiLCAiU0VMRUNUIGdldF90ZXN0X3NobWVtX2F0dGFjaF9jb3VudCgpOyIp OworCitpZiAoJGV4ZWNfYmFja2VuZCkKK3sKKyAgIGNtcF9vaygkYXR0YWNoX2NvdW50Miwg Jz4nLCAkYXR0YWNoX2NvdW50MSwgImF0dGFjaCBjYWxsYmFjayBpcyBjYWxsZWQgaW4gZWFj aCBiYWNrZW5kIHdoZW4gbG9hZGVkIHZpYSBzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMiKTsK K30KK2Vsc2UKK3sKKyAgIG9rKCRhdHRhY2hfY291bnQxID09IDAgJiYgJGF0dGFjaF9jb3Vu dDIgPT0gMCwgImF0dGFjaCBjYWxsYmFjayBpcyBub3QgY2FsbGVkIHdoZW4gbG9hZGVkIHZp YSBzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMiKTsKK30KKworJG5vZGUtPnN0b3A7Citkb25l X3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1lbS90 ZXN0X3NobWVtLS0xLjAuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NobWVtL3Rlc3Rf c2htZW0tLTEuMC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjJkMDFmZDkyNTZjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X3NobWVtL3Rlc3Rfc2htZW0tLTEuMC5zcWwKQEAgLTAsMCArMSw5IEBACisvKiBzcmMvdGVz dC9tb2R1bGVzL3Rlc3Rfc2htZW0vdGVzdF9zaG1lbS0tMS4wLnNxbCAqLworCistLSBjb21w bGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JF QVRFIEVYVEVOU0lPTgorXGVjaG8gVXNlICJDUkVBVEUgRVhURU5TSU9OIHRlc3Rfc2htZW0i IHRvIGxvYWQgdGhpcyBmaWxlLiBccXVpdAorCisKK0NSRUFURSBGVU5DVElPTiBnZXRfdGVz dF9zaG1lbV9hdHRhY2hfY291bnQoKQorUkVUVVJOUyBwZ19jYXRhbG9nLmludDQgU1RSSUNU CitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X3NobWVtL3Rlc3Rfc2htZW0uYyBiL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9zaG1lbS90ZXN0X3NobWVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjMxYzczNWJlNTcwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X3NobWVtL3Rlc3Rfc2htZW0uYwpAQCAtMCwwICsxLDEwNSBAQAorLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKgorICogdGVzdF9zaG1lbS5jCisgKgkJSGVscGVycyB0byB0 ZXN0IHNobWVtIGFsbG9jYXRpb24gcm91dGluZXMKKyAqCisgKiBUZXN0IGJhc2ljIG1lbW9y eSBhbGxvY2F0aW9uIGluIGFuIGV4dGVuc2lvbiBtb2R1bGUuIE9uZSBub3RhYmxlIGZlYXR1 cmUKKyAqIHRoYXQgaXMgbm90IGV4ZXJjaXNlZCBieSBhbnkgb3RoZXIgbW9kdWxlIGluIHRo ZSByZXBvc2l0b3J5IGlzIHRoZQorICogYWxsb2NhdGluZyAobm9uLURTTSkgc2hhcmVkIG1l bW9yeSBhZnRlciBwb3N0bWFzdGVyIHN0YXJ0dXAuCisgKgorICogQ29weXJpZ2h0IChjKSAy MDIwLTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICog SURFTlRJRklDQVRJT04KKyAqCSAgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NobWVtL3Rlc3Rf c2htZW0uYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJw b3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKKworCitQR19NT0RVTEVfTUFHSUM7CisK K3R5cGVkZWYgc3RydWN0IFRlc3RTaG1lbURhdGEKK3sKKwlpbnQJCQl2YWx1ZTsKKwlib29s CQlpbml0aWFsaXplZDsKKwlpbnQJCQlhdHRhY2hfY291bnQ7Cit9IFRlc3RTaG1lbURhdGE7 CisKK3N0YXRpYyBUZXN0U2htZW1EYXRhICpUZXN0U2htZW07CisKK3N0YXRpYyBib29sIGF0 dGFjaGVkX29yX2luaXRpYWxpemVkID0gZmFsc2U7CisKK3N0YXRpYyB2b2lkIHRlc3Rfc2ht ZW1fcmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgdGVzdF9zaG1lbV9pbml0KHZv aWQgKmFyZyk7CitzdGF0aWMgdm9pZCB0ZXN0X3NobWVtX2F0dGFjaCh2b2lkICphcmcpOwor CitzdGF0aWMgY29uc3QgU2htZW1DYWxsYmFja3MgVGVzdFNobWVtQ2FsbGJhY2tzID0gewor CS5mbGFncyA9IFNITUVNX0NBTExCQUNLU19BTExPV19BRlRFUl9TVEFSVFVQLAorCS5yZXF1 ZXN0X2ZuID0gdGVzdF9zaG1lbV9yZXF1ZXN0LAorCS5pbml0X2ZuID0gdGVzdF9zaG1lbV9p bml0LAorCS5hdHRhY2hfZm4gPSB0ZXN0X3NobWVtX2F0dGFjaCwKK307CisKK3N0YXRpYyB2 b2lkCit0ZXN0X3NobWVtX3JlcXVlc3Qodm9pZCAqYXJnKQoreworCXN0YXRpYyBTaG1lbVN0 cnVjdERlc2MgVGVzdFNobWVtRGVzYzsKKworCWVsb2coTE9HLCAidGVzdF9zaG1lbV9yZXF1 ZXN0IGNhbGxiYWNrIGNhbGxlZCIpOworCisJU2htZW1SZXF1ZXN0U3RydWN0KCZUZXN0U2ht ZW1EZXNjLAorCQkJCQkgICAubmFtZSA9ICJ0ZXN0X3NobWVtIGFyZWEiLAorCQkJCQkgICAu c2l6ZSA9IHNpemVvZihUZXN0U2htZW1EYXRhKSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoq KSAmVGVzdFNobWVtLAorCQkpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9zaG1lbV9pbml0 KHZvaWQgKmFyZykKK3sKKwllbG9nKExPRywgImluaXQgY2FsbGJhY2sgY2FsbGVkIik7CisJ aWYgKFRlc3RTaG1lbS0+aW5pdGlhbGl6ZWQpCisJCWVsb2coRVJST1IsICJzaG1lbSBhcmVh IGFscmVhZHkgaW5pdGlhbGl6ZWQiKTsKKwlUZXN0U2htZW0tPmluaXRpYWxpemVkID0gdHJ1 ZTsKKworCWlmIChhdHRhY2hlZF9vcl9pbml0aWFsaXplZCkKKwkJZWxvZyhFUlJPUiwgImF0 dGFjaCBvciBpbml0aWFsaXplIGFscmVhZHkgY2FsbGVkIGluIHRoaXMgcHJvY2VzcyIpOwor CWF0dGFjaGVkX29yX2luaXRpYWxpemVkID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQKK3Rl c3Rfc2htZW1fYXR0YWNoKHZvaWQgKmFyZykKK3sKKwllbG9nKExPRywgInRlc3Rfc2htZW1f YXR0YWNoIGNhbGxiYWNrIGNhbGxlZCIpOworCWlmICghVGVzdFNobWVtLT5pbml0aWFsaXpl ZCkKKwkJZWxvZyhFUlJPUiwgInNobWVtIGFyZWEgbm90IHlldCBpbml0aWFsaXplZCIpOwor CVRlc3RTaG1lbS0+YXR0YWNoX2NvdW50Kys7CisKKwlpZiAoYXR0YWNoZWRfb3JfaW5pdGlh bGl6ZWQpCisJCWVsb2coRVJST1IsICJhdHRhY2ggb3IgaW5pdGlhbGl6ZSBhbHJlYWR5IGNh bGxlZCBpbiB0aGlzIHByb2Nlc3MiKTsKKwlhdHRhY2hlZF9vcl9pbml0aWFsaXplZCA9IHRy dWU7Cit9CisKK3ZvaWQKK19QR19pbml0KHZvaWQpCit7CisJZWxvZyhMT0csICJ0ZXN0X3No bWVtIG1vZHVsZSdzIF9QR19pbml0IGNhbGxlZCIpOworCVJlZ2lzdGVyU2htZW1DYWxsYmFj a3MoJlRlc3RTaG1lbUNhbGxiYWNrcyk7Cit9CisKK1BHX0ZVTkNUSU9OX0lORk9fVjEoZ2V0 X3Rlc3Rfc2htZW1fYXR0YWNoX2NvdW50KTsKK0RhdHVtCitnZXRfdGVzdF9zaG1lbV9hdHRh Y2hfY291bnQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlpZiAoIWF0dGFjaGVkX29yX2luaXRp YWxpemVkKQorCQllbG9nKEVSUk9SLCAic2htZW0gYXJlYSBub3QgYXR0YWNoZWQgb3IgaW5p dGlhbGl6ZWQgaW4gdGhpcyBwcm9jZXNzIik7CisJaWYgKCFUZXN0U2htZW0tPmluaXRpYWxp emVkKQorCQllbG9nKEVSUk9SLCAic2htZW0gYXJlYSBub3QgeWV0IGluaXRpYWxpemVkIik7 CisJUEdfUkVUVVJOX0lOVDMyKFRlc3RTaG1lbS0+YXR0YWNoX2NvdW50KTsKK30KZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1lbS90ZXN0X3NobWVtLmNvbnRyb2wg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htZW0vdGVzdF9zaG1lbS5jb250cm9sCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mMmYyNmY0NTM3YQotLS0gL2Rl di9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1lbS90ZXN0X3NobWVtLmNv bnRyb2wKQEAgLTAsMCArMSwzIEBACitjb21tZW50ID0gJ1Rlc3QgY29kZSBmb3Igc2htZW0g YWxsb2NhdGlvbnMnCitkZWZhdWx0X3ZlcnNpb24gPSAnMS4wJworbW9kdWxlX3BhdGhuYW1l ID0gJyRsaWJkaXIvdGVzdF9zaG1lbScKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5k ZXggODgwNDE3ZGYyMzUuLmE5OTdkM2E1ZjU0IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdApAQCAtMzEzNyw2ICszMTM3LDcgQEAgVGVzdERTTVJlZ2lzdHJ5SGFzaEVudHJ5CiBU ZXN0RFNNUmVnaXN0cnlTdHJ1Y3QKIFRlc3REZWNvZGluZ0RhdGEKIFRlc3REZWNvZGluZ1R4 bkRhdGEKK1Rlc3RTaG1lbURhdGEKIFRlc3RTcGVjCiBUZXN0VmFsdWVUeXBlCiBUZXh0RnJl cQotLSAKMi40Ny4zCgo= --------------cltwtZYaOf76t571xokamZd0 Content-Type: text/x-patch; charset=UTF-8; name="v9-0007-Convert-pg_stat_statements-to-use-the-new-interfa.patch" Content-Disposition: attachment; filename*0="v9-0007-Convert-pg_stat_statements-to-use-the-new-interfa.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA2Y2ZhNDU3ZTdjMDI4NTdlYmQ3YjEwYjg5MDRhOTNmNWQ2ZmRlMjk5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMSBBcHIgMjAyNiAxODoyMToyNCArMDMwMApT dWJqZWN0OiBbUEFUQ0ggdjkgMDcvMTZdIENvbnZlcnQgcGdfc3RhdF9zdGF0ZW1lbnRzIHRv IHVzZSB0aGUgbmV3IGludGVyZmFjZQoKQXMgcGFydCBvZiB0aGlzLCBlbWJlZCB0aGUgTFdM b2NrIGl0IG5lZWRzIGluIHRoZSBzaGFyZWQgbWVtb3J5IHN0cnVjdAppdHNlbGYsIHNvIHRo YXQgd2UgZG9uJ3QgbmVlZCB0byB1c2UgUmVxdWVzdE5hbWVkTFdMb2NrVHJhbmNoZSgpCmFu eW1vcmUuIExXTG9ja05ld1RyYW5jaGVJZCtMV0xvY2tJbml0aWFsaXplIGlzIG1vcmUgY29u dmVuaWVudCB0byB1c2UKaW4gZXh0ZW5zaW9ucy4KClJldmlld2VkLWJ5OiBBc2h1dG9zaCBC YXBhdCA8YXNodXRvc2guYmFwYXQub3NzQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IFpzb2x0 IFBhcnJhZ2kgPHpzb2x0LnBhcnJhZ2lAcGVyY29uYS5jb20+ClJldmlld2VkLWJ5OiBSb2Jl cnQgSGFhcyA8cm9iZXJ0bWhhYXNAZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3d3 dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL0NBRXhIVzV2TTFibmVMWWZnMHdHZUFhPTUy VWlKM3o0dktkM0FKNzJYOEZ3NmszS0tyZ0BtYWlsLmdtYWlsLmNvbQotLS0KIC4uLi9wZ19z dGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMgICB8IDE3OSArKysrKysrKy0t LS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA4MyBpbnNlcnRpb25zKCspLCA5NiBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0 X3N0YXRlbWVudHMuYyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3Rh dGVtZW50cy5jCmluZGV4IDc5NzU0NzZiODkwLi4xMjQ5NzliNmRjYiAxMDA2NDQKLS0tIGEv Y29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKKysrIGIv Y29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKQEAgLTI0 OSw3ICsyNDksNyBAQCB0eXBlZGVmIHN0cnVjdCBwZ3NzRW50cnkKICAqLwogdHlwZWRlZiBz dHJ1Y3QgcGdzc1NoYXJlZFN0YXRlCiB7Ci0JTFdMb2NrCSAgICpsb2NrOwkJCS8qIHByb3Rl Y3RzIGhhc2h0YWJsZSBzZWFyY2gvbW9kaWZpY2F0aW9uICovCisJTFdMb2NrUGFkZGVkIGxv Y2s7CQkJLyogcHJvdGVjdHMgaGFzaHRhYmxlIHNlYXJjaC9tb2RpZmljYXRpb24gKi8KIAlk b3VibGUJCWN1cl9tZWRpYW5fdXNhZ2U7CS8qIGN1cnJlbnQgbWVkaWFuIHVzYWdlIGluIGhh c2h0YWJsZSAqLwogCVNpemUJCW1lYW5fcXVlcnlfbGVuOyAvKiBjdXJyZW50IG1lYW4gZW50 cnkgdGV4dCBsZW5ndGggKi8KIAlzbG9ja190CQltdXRleDsJCQkvKiBwcm90ZWN0cyBmb2xs b3dpbmcgZmllbGRzIG9ubHk6ICovCkBAIC0yNTksMTQgKzI1OSwyNCBAQCB0eXBlZGVmIHN0 cnVjdCBwZ3NzU2hhcmVkU3RhdGUKIAlwZ3NzR2xvYmFsU3RhdHMgc3RhdHM7CQkvKiBnbG9i YWwgc3RhdGlzdGljcyBmb3IgcGdzcyAqLwogfSBwZ3NzU2hhcmVkU3RhdGU7CiAKKy8qIExp bmtzIHRvIHNoYXJlZCBtZW1vcnkgc3RhdGUgKi8KK3N0YXRpYyBwZ3NzU2hhcmVkU3RhdGUg KnBnc3M7CitzdGF0aWMgSFRBQiAqcGdzc19oYXNoOworCitzdGF0aWMgdm9pZCBwZ3NzX3No bWVtX3JlcXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIHBnc3Nfc2htZW1faW5pdCh2 b2lkICphcmcpOworCitzdGF0aWMgY29uc3QgU2htZW1DYWxsYmFja3MgcGdzc19zaG1lbV9j YWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBwZ3NzX3NobWVtX3JlcXVlc3QsCisJLmlu aXRfZm4gPSBwZ3NzX3NobWVtX2luaXQsCit9OworCiAvKi0tLS0gTG9jYWwgdmFyaWFibGVz IC0tLS0qLwogCiAvKiBDdXJyZW50IG5lc3RpbmcgZGVwdGggb2YgcGxhbm5lci9FeGVjdXRv clJ1bi9Qcm9jZXNzVXRpbGl0eSBjYWxscyAqLwogc3RhdGljIGludAluZXN0aW5nX2xldmVs ID0gMDsKIAogLyogU2F2ZWQgaG9vayB2YWx1ZXMgKi8KLXN0YXRpYyBzaG1lbV9yZXF1ZXN0 X2hvb2tfdHlwZSBwcmV2X3NobWVtX3JlcXVlc3RfaG9vayA9IE5VTEw7Ci1zdGF0aWMgc2ht ZW1fc3RhcnR1cF9ob29rX3R5cGUgcHJldl9zaG1lbV9zdGFydHVwX2hvb2sgPSBOVUxMOwog c3RhdGljIHBvc3RfcGFyc2VfYW5hbHl6ZV9ob29rX3R5cGUgcHJldl9wb3N0X3BhcnNlX2Fu YWx5emVfaG9vayA9IE5VTEw7CiBzdGF0aWMgcGxhbm5lcl9ob29rX3R5cGUgcHJldl9wbGFu bmVyX2hvb2sgPSBOVUxMOwogc3RhdGljIEV4ZWN1dG9yU3RhcnRfaG9va190eXBlIHByZXZf RXhlY3V0b3JTdGFydCA9IE5VTEw7CkBAIC0yNzUsMTAgKzI4NSw2IEBAIHN0YXRpYyBFeGVj dXRvckZpbmlzaF9ob29rX3R5cGUgcHJldl9FeGVjdXRvckZpbmlzaCA9IE5VTEw7CiBzdGF0 aWMgRXhlY3V0b3JFbmRfaG9va190eXBlIHByZXZfRXhlY3V0b3JFbmQgPSBOVUxMOwogc3Rh dGljIFByb2Nlc3NVdGlsaXR5X2hvb2tfdHlwZSBwcmV2X1Byb2Nlc3NVdGlsaXR5ID0gTlVM TDsKIAotLyogTGlua3MgdG8gc2hhcmVkIG1lbW9yeSBzdGF0ZSAqLwotc3RhdGljIHBnc3NT aGFyZWRTdGF0ZSAqcGdzcyA9IE5VTEw7Ci1zdGF0aWMgSFRBQiAqcGdzc19oYXNoID0gTlVM TDsKLQogLyotLS0tIEdVQyB2YXJpYWJsZXMgLS0tLSovCiAKIHR5cGVkZWYgZW51bQpAQCAt MzMxLDggKzMzNyw2IEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEocGdfc3RhdF9zdGF0ZW1lbnRz XzFfMTMpOwogUEdfRlVOQ1RJT05fSU5GT19WMShwZ19zdGF0X3N0YXRlbWVudHMpOwogUEdf RlVOQ1RJT05fSU5GT19WMShwZ19zdGF0X3N0YXRlbWVudHNfaW5mbyk7CiAKLXN0YXRpYyB2 b2lkIHBnc3Nfc2htZW1fcmVxdWVzdCh2b2lkKTsKLXN0YXRpYyB2b2lkIHBnc3Nfc2htZW1f c3RhcnR1cCh2b2lkKTsKIHN0YXRpYyB2b2lkIHBnc3Nfc2htZW1fc2h1dGRvd24oaW50IGNv ZGUsIERhdHVtIGFyZyk7CiBzdGF0aWMgdm9pZCBwZ3NzX3Bvc3RfcGFyc2VfYW5hbHl6ZShQ YXJzZVN0YXRlICpwc3RhdGUsIFF1ZXJ5ICpxdWVyeSwKIAkJCQkJCQkJCUp1bWJsZVN0YXRl ICpqc3RhdGUpOwpAQCAtMzY2LDcgKzM3MCw2IEBAIHN0YXRpYyB2b2lkIHBnc3Nfc3RvcmUo Y29uc3QgY2hhciAqcXVlcnksIGludDY0IHF1ZXJ5SWQsCiBzdGF0aWMgdm9pZCBwZ19zdGF0 X3N0YXRlbWVudHNfaW50ZXJuYWwoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCQkJCQkJ CQkJcGdzc1ZlcnNpb24gYXBpX3ZlcnNpb24sCiAJCQkJCQkJCQkJYm9vbCBzaG93dGV4dCk7 Ci1zdGF0aWMgU2l6ZSBwZ3NzX21lbXNpemUodm9pZCk7CiBzdGF0aWMgcGdzc0VudHJ5ICpl bnRyeV9hbGxvYyhwZ3NzSGFzaEtleSAqa2V5LCBTaXplIHF1ZXJ5X29mZnNldCwgaW50IHF1 ZXJ5X2xlbiwKIAkJCQkJCQkgIGludCBlbmNvZGluZywgYm9vbCBzdGlja3kpOwogc3RhdGlj IHZvaWQgZW50cnlfZGVhbGxvYyh2b2lkKTsKQEAgLTQ3MSwxMyArNDc0LDE0IEBAIF9QR19p bml0KHZvaWQpCiAKIAlNYXJrR1VDUHJlZml4UmVzZXJ2ZWQoInBnX3N0YXRfc3RhdGVtZW50 cyIpOwogCisJLyoKKwkgKiBSZWdpc3RlciBvdXIgc2hhcmVkIG1lbW9yeSBuZWVkcy4KKwkg Ki8KKwlSZWdpc3RlclNobWVtQ2FsbGJhY2tzKCZwZ3NzX3NobWVtX2NhbGxiYWNrcyk7CisK IAkvKgogCSAqIEluc3RhbGwgaG9va3MuCiAJICovCi0JcHJldl9zaG1lbV9yZXF1ZXN0X2hv b2sgPSBzaG1lbV9yZXF1ZXN0X2hvb2s7Ci0Jc2htZW1fcmVxdWVzdF9ob29rID0gcGdzc19z aG1lbV9yZXF1ZXN0OwotCXByZXZfc2htZW1fc3RhcnR1cF9ob29rID0gc2htZW1fc3RhcnR1 cF9ob29rOwotCXNobWVtX3N0YXJ0dXBfaG9vayA9IHBnc3Nfc2htZW1fc3RhcnR1cDsKIAlw cmV2X3Bvc3RfcGFyc2VfYW5hbHl6ZV9ob29rID0gcG9zdF9wYXJzZV9hbmFseXplX2hvb2s7 CiAJcG9zdF9wYXJzZV9hbmFseXplX2hvb2sgPSBwZ3NzX3Bvc3RfcGFyc2VfYW5hbHl6ZTsK IAlwcmV2X3BsYW5uZXJfaG9vayA9IHBsYW5uZXJfaG9vazsKQEAgLTQ5NSwzMCArNDk5LDQ4 IEBAIF9QR19pbml0KHZvaWQpCiB9CiAKIC8qCi0gKiBzaG1lbV9yZXF1ZXN0IGhvb2s6IHJl cXVlc3QgYWRkaXRpb25hbCBzaGFyZWQgcmVzb3VyY2VzLiAgV2UnbGwgYWxsb2NhdGUgb3IK LSAqIGF0dGFjaCB0byB0aGUgc2hhcmVkIHJlc291cmNlcyBpbiBwZ3NzX3NobWVtX3N0YXJ0 dXAoKS4KKyAqIHNobWVtIHJlcXVlc3QgY2FsbGJhY2s6IFJlcXVlc3Qgc2hhcmVkIG1lbW9y eSByZXNvdXJjZXMuCisgKgorICogVGhpcyBpcyBjYWxsZWQgYXQgcG9zdG1hc3RlciBzdGFy dHVwLiAgTm90ZSB0aGF0IHRoZSBzaGFyZWQgbWVtb3J5IGlzbid0CisgKiBhbGxvY2F0ZWQg aGVyZSB5ZXQsIHRoaXMgbWVyZWx5IHJlZ2lzdGVyIG91ciBuZWVkcy4KKyAqCisgKiBJbiBF WEVDX0JBQ0tFTkQgbW9kZSwgdGhpcyBpcyBhbHNvIGNhbGxlZCBpbiBlYWNoIGJhY2tlbmQs IHRvIHJlLWF0dGFjaCB0bworICogdGhlIHNoYXJlZCBtZW1vcnkgYXJlYSB0aGF0IHdhcyBh bHJlYWR5IGluaXRpYWxpemVkLgogICovCiBzdGF0aWMgdm9pZAotcGdzc19zaG1lbV9yZXF1 ZXN0KHZvaWQpCitwZ3NzX3NobWVtX3JlcXVlc3Qodm9pZCAqYXJnKQogewotCWlmIChwcmV2 X3NobWVtX3JlcXVlc3RfaG9vaykKLQkJcHJldl9zaG1lbV9yZXF1ZXN0X2hvb2soKTsKLQot CVJlcXVlc3RBZGRpblNobWVtU3BhY2UocGdzc19tZW1zaXplKCkpOwotCVJlcXVlc3ROYW1l ZExXTG9ja1RyYW5jaGUoInBnX3N0YXRfc3RhdGVtZW50cyIsIDEpOworCXN0YXRpYyBTaG1l bUhhc2hEZXNjIHBnc3NTaGFyZWRIYXNoRGVzYzsKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNj IHBnc3NTaGFyZWRTdGF0ZURlc2M7CisKKwlTaG1lbVJlcXVlc3RIYXNoKCZwZ3NzU2hhcmVk SGFzaERlc2MsCisJCQkJCSAubmFtZSA9ICJwZ19zdGF0X3N0YXRlbWVudHMgaGFzaCIsCisJ CQkJCSAucHRyID0gJnBnc3NfaGFzaCwKKwkJCQkJIC5pbml0X3NpemUgPSBwZ3NzX21heCwK KwkJCQkJIC5tYXhfc2l6ZSA9IHBnc3NfbWF4LAorCQkJCQkgLmhhc2hfaW5mby5rZXlzaXpl ID0gc2l6ZW9mKHBnc3NIYXNoS2V5KSwKKwkJCQkJIC5oYXNoX2luZm8uZW50cnlzaXplID0g c2l6ZW9mKHBnc3NFbnRyeSksCisJCQkJCSAuaGFzaF9mbGFncyA9IEhBU0hfRUxFTSB8IEhB U0hfQkxPQlMsCisJCSk7CisJU2htZW1SZXF1ZXN0U3RydWN0KCZwZ3NzU2hhcmVkU3RhdGVE ZXNjLAorCQkJCQkgICAubmFtZSA9ICJwZ19zdGF0X3N0YXRlbWVudHMiLAorCQkJCQkgICAu c2l6ZSA9IHNpemVvZihwZ3NzU2hhcmVkU3RhdGUpLAorCQkJCQkgICAucHRyID0gKHZvaWQg KiopICZwZ3NzLAorCQkpOwogfQogCiAvKgotICogc2htZW1fc3RhcnR1cCBob29rOiBhbGxv Y2F0ZSBvciBhdHRhY2ggdG8gc2hhcmVkIG1lbW9yeSwKLSAqIHRoZW4gbG9hZCBhbnkgcHJl LWV4aXN0aW5nIHN0YXRpc3RpY3MgZnJvbSBmaWxlLgotICogQWxzbyBjcmVhdGUgYW5kIGxv YWQgdGhlIHF1ZXJ5LXRleHRzIGZpbGUsIHdoaWNoIGlzIGV4cGVjdGVkIHRvIGV4aXN0Ci0g KiAoZXZlbiBpZiBlbXB0eSkgd2hpbGUgdGhlIG1vZHVsZSBpcyBlbmFibGVkLgorICogc2ht ZW0gaW5pdCBjYWxsYmFjazogSW5pdGlhbGl6ZSBvdXIgc2hhcmVkIG1lbW9yeSBkYXRhIHN0 cnVjdHVyZXMgYXQKKyAqIHBvc3RtYXN0ZXIgc3RhcnR1cC4KKyAqCisgKiBMb2FkIGFueSBw cmUtZXhpc3Rpbmcgc3RhdGlzdGljcyBmcm9tIGZpbGUuICBBbHNvIGNyZWF0ZSBhbmQgbG9h ZCB0aGUKKyAqIHF1ZXJ5LXRleHRzIGZpbGUsIHdoaWNoIGlzIGV4cGVjdGVkIHRvIGV4aXN0 IChldmVuIGlmIGVtcHR5KSB3aGlsZSB0aGUKKyAqIG1vZHVsZSBpcyBlbmFibGVkLgogICov CiBzdGF0aWMgdm9pZAotcGdzc19zaG1lbV9zdGFydHVwKHZvaWQpCitwZ3NzX3NobWVtX2lu aXQodm9pZCAqYXJnKQogewotCWJvb2wJCWZvdW5kOwotCUhBU0hDVEwJCWluZm87CisJaW50 CQkJdHJhbmNoZV9pZDsKIAlGSUxFCSAgICpmaWxlID0gTlVMTDsKIAlGSUxFCSAgICpxZmls ZSA9IE5VTEw7CiAJdWludDMyCQloZWFkZXI7CkBAIC01MjgsNTkgKzU1MCwzOCBAQCBwZ3Nz X3NobWVtX3N0YXJ0dXAodm9pZCkKIAlpbnQJCQlidWZmZXJfc2l6ZTsKIAljaGFyCSAgICpi dWZmZXIgPSBOVUxMOwogCi0JaWYgKHByZXZfc2htZW1fc3RhcnR1cF9ob29rKQotCQlwcmV2 X3NobWVtX3N0YXJ0dXBfaG9vaygpOwotCi0JLyogcmVzZXQgaW4gY2FzZSB0aGlzIGlzIGEg cmVzdGFydCB3aXRoaW4gdGhlIHBvc3RtYXN0ZXIgKi8KLQlwZ3NzID0gTlVMTDsKLQlwZ3Nz X2hhc2ggPSBOVUxMOwotCiAJLyoKLQkgKiBDcmVhdGUgb3IgYXR0YWNoIHRvIHRoZSBzaGFy ZWQgbWVtb3J5IHN0YXRlLCBpbmNsdWRpbmcgaGFzaCB0YWJsZQorCSAqIFdlIGFscmVhZHkg Y2hlY2tlZCB0aGF0IHdlJ3JlIGxvYWRlZCBmcm9tIHNoYXJlZF9wcmVsb2FkX2xpYnJhcmll cyBpbgorCSAqIF9QR19pbml0KCksIHNvIHdlIHNob3VsZCBub3QgZ2V0IGhlcmUgYWZ0ZXIg cG9zdG1hc3RlciBzdGFydHVwLgogCSAqLwotCUxXTG9ja0FjcXVpcmUoQWRkaW5TaG1lbUlu aXRMb2NrLCBMV19FWENMVVNJVkUpOwotCi0JcGdzcyA9IFNobWVtSW5pdFN0cnVjdCgicGdf c3RhdF9zdGF0ZW1lbnRzIiwKLQkJCQkJCSAgIHNpemVvZihwZ3NzU2hhcmVkU3RhdGUpLAot CQkJCQkJICAgJmZvdW5kKTsKLQotCWlmICghZm91bmQpCi0JewotCQkvKiBGaXJzdCB0aW1l IHRocm91Z2ggLi4uICovCi0JCXBnc3MtPmxvY2sgPSAmKEdldE5hbWVkTFdMb2NrVHJhbmNo ZSgicGdfc3RhdF9zdGF0ZW1lbnRzIikpLT5sb2NrOwotCQlwZ3NzLT5jdXJfbWVkaWFuX3Vz YWdlID0gQVNTVU1FRF9NRURJQU5fSU5JVDsKLQkJcGdzcy0+bWVhbl9xdWVyeV9sZW4gPSBB U1NVTUVEX0xFTkdUSF9JTklUOwotCQlTcGluTG9ja0luaXQoJnBnc3MtPm11dGV4KTsKLQkJ cGdzcy0+ZXh0ZW50ID0gMDsKLQkJcGdzcy0+bl93cml0ZXJzID0gMDsKLQkJcGdzcy0+Z2Nf Y291bnQgPSAwOwotCQlwZ3NzLT5zdGF0cy5kZWFsbG9jID0gMDsKLQkJcGdzcy0+c3RhdHMu c3RhdHNfcmVzZXQgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7Ci0JfQotCi0JaW5mby5rZXlz aXplID0gc2l6ZW9mKHBnc3NIYXNoS2V5KTsKLQlpbmZvLmVudHJ5c2l6ZSA9IHNpemVvZihw Z3NzRW50cnkpOwotCXBnc3NfaGFzaCA9IFNobWVtSW5pdEhhc2goInBnX3N0YXRfc3RhdGVt ZW50cyBoYXNoIiwKLQkJCQkJCQkgIHBnc3NfbWF4LCBwZ3NzX21heCwKLQkJCQkJCQkgICZp bmZvLAotCQkJCQkJCSAgSEFTSF9FTEVNIHwgSEFTSF9CTE9CUyk7Ci0KLQlMV0xvY2tSZWxl YXNlKEFkZGluU2htZW1Jbml0TG9jayk7CisJQXNzZXJ0KCFJc1VuZGVyUG9zdG1hc3Rlcik7 CiAKIAkvKgotCSAqIElmIHdlJ3JlIGluIHRoZSBwb3N0bWFzdGVyIChvciBhIHN0YW5kYWxv bmUgYmFja2VuZC4uLiksIHNldCB1cCBhIHNobWVtCi0JICogZXhpdCBob29rIHRvIGR1bXAg dGhlIHN0YXRpc3RpY3MgdG8gZGlzay4KKwkgKiBJbml0aWFsaXplIHRoZSBzaG1lbSBhcmVh IHdpdGggbm8gc3RhdGlzdGljcy4KIAkgKi8KLQlpZiAoIUlzVW5kZXJQb3N0bWFzdGVyKQot CQlvbl9zaG1lbV9leGl0KHBnc3Nfc2htZW1fc2h1dGRvd24sIChEYXR1bSkgMCk7CisJdHJh bmNoZV9pZCA9IExXTG9ja05ld1RyYW5jaGVJZCgicGdfc3RhdF9zdGF0ZW1lbnRzIik7CisJ TFdMb2NrSW5pdGlhbGl6ZSgmcGdzcy0+bG9jay5sb2NrLCB0cmFuY2hlX2lkKTsKKwlwZ3Nz LT5jdXJfbWVkaWFuX3VzYWdlID0gQVNTVU1FRF9NRURJQU5fSU5JVDsKKwlwZ3NzLT5tZWFu X3F1ZXJ5X2xlbiA9IEFTU1VNRURfTEVOR1RIX0lOSVQ7CisJU3BpbkxvY2tJbml0KCZwZ3Nz LT5tdXRleCk7CisJcGdzcy0+ZXh0ZW50ID0gMDsKKwlwZ3NzLT5uX3dyaXRlcnMgPSAwOwor CXBnc3MtPmdjX2NvdW50ID0gMDsKKwlwZ3NzLT5zdGF0cy5kZWFsbG9jID0gMDsKKwlwZ3Nz LT5zdGF0cy5zdGF0c19yZXNldCA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKKworCS8qIFRo ZSBoYXNoIHRhYmxlIG11c3QndmUgYWxzbyBiZWVuIGluaXRpYWxpemVkIGJ5IG5vdyAqLwor CUFzc2VydChwZ3NzX2hhc2ggIT0gTlVMTCk7CiAKIAkvKgotCSAqIERvbmUgaWYgc29tZSBv dGhlciBwcm9jZXNzIGFscmVhZHkgY29tcGxldGVkIG91ciBpbml0aWFsaXphdGlvbi4KKwkg KiBTZXQgdXAgYSBzaG1lbSBleGl0IGhvb2sgdG8gZHVtcCB0aGUgc3RhdGlzdGljcyB0byBk aXNrIG9uIHBvc3RtYXN0ZXIKKwkgKiAob3Igc3RhbmRhbG9uZSBiYWNrZW5kKSBleGl0Lgog CSAqLwotCWlmIChmb3VuZCkKLQkJcmV0dXJuOworCW9uX3NobWVtX2V4aXQocGdzc19zaG1l bV9zaHV0ZG93biwgKERhdHVtKSAwKTsKIAogCS8qCisJICogTG9hZCBhbnkgcHJlLWV4aXN0 aW5nIHN0YXRpc3RpY3MgZnJvbSBmaWxlLgorCSAqCiAJICogTm90ZTogd2UgZG9uJ3QgYm90 aGVyIHdpdGggbG9ja3MgaGVyZSwgYmVjYXVzZSB0aGVyZSBzaG91bGQgYmUgbm8gb3RoZXIK IAkgKiBwcm9jZXNzZXMgcnVubmluZyB3aGVuIHRoaXMgY29kZSBpcyByZWFjaGVkLgogCSAq LwpAQCAtMTMzOSw3ICsxMzQwLDcgQEAgcGdzc19zdG9yZShjb25zdCBjaGFyICpxdWVyeSwg aW50NjQgcXVlcnlJZCwKIAlrZXkudG9wbGV2ZWwgPSAobmVzdGluZ19sZXZlbCA9PSAwKTsK IAogCS8qIExvb2t1cCB0aGUgaGFzaCB0YWJsZSBlbnRyeSB3aXRoIHNoYXJlZCBsb2NrLiAq LwotCUxXTG9ja0FjcXVpcmUocGdzcy0+bG9jaywgTFdfU0hBUkVEKTsKKwlMV0xvY2tBY3F1 aXJlKCZwZ3NzLT5sb2NrLmxvY2ssIExXX1NIQVJFRCk7CiAKIAllbnRyeSA9IChwZ3NzRW50 cnkgKikgaGFzaF9zZWFyY2gocGdzc19oYXNoLCAma2V5LCBIQVNIX0ZJTkQsIE5VTEwpOwog CkBAIC0xMzYwLDExICsxMzYxLDExIEBAIHBnc3Nfc3RvcmUoY29uc3QgY2hhciAqcXVlcnks IGludDY0IHF1ZXJ5SWQsCiAJCSAqLwogCQlpZiAoanN0YXRlKQogCQl7Ci0JCQlMV0xvY2tS ZWxlYXNlKHBnc3MtPmxvY2spOworCQkJTFdMb2NrUmVsZWFzZSgmcGdzcy0+bG9jay5sb2Nr KTsKIAkJCW5vcm1fcXVlcnkgPSBnZW5lcmF0ZV9ub3JtYWxpemVkX3F1ZXJ5KGpzdGF0ZSwg cXVlcnksCiAJCQkJCQkJCQkJCQkgICBxdWVyeV9sb2NhdGlvbiwKIAkJCQkJCQkJCQkJCSAg ICZxdWVyeV9sZW4pOwotCQkJTFdMb2NrQWNxdWlyZShwZ3NzLT5sb2NrLCBMV19TSEFSRUQp OworCQkJTFdMb2NrQWNxdWlyZSgmcGdzcy0+bG9jay5sb2NrLCBMV19TSEFSRUQpOwogCQl9 CiAKIAkJLyogQXBwZW5kIG5ldyBxdWVyeSB0ZXh0IHRvIGZpbGUgd2l0aCBvbmx5IHNoYXJl ZCBsb2NrIGhlbGQgKi8KQEAgLTEzNzksOCArMTM4MCw4IEBAIHBnc3Nfc3RvcmUoY29uc3Qg Y2hhciAqcXVlcnksIGludDY0IHF1ZXJ5SWQsCiAJCWRvX2djID0gbmVlZF9nY19xdGV4dHMo KTsKIAogCQkvKiBOZWVkIGV4Y2x1c2l2ZSBsb2NrIHRvIG1ha2UgYSBuZXcgaGFzaHRhYmxl IGVudHJ5IC0gcHJvbW90ZSAqLwotCQlMV0xvY2tSZWxlYXNlKHBnc3MtPmxvY2spOwotCQlM V0xvY2tBY3F1aXJlKHBnc3MtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisJCUxXTG9ja1JlbGVh c2UoJnBnc3MtPmxvY2subG9jayk7CisJCUxXTG9ja0FjcXVpcmUoJnBnc3MtPmxvY2subG9j aywgTFdfRVhDTFVTSVZFKTsKIAogCQkvKgogCQkgKiBBIGdhcmJhZ2UgY29sbGVjdGlvbiBt YXkgaGF2ZSBvY2N1cnJlZCB3aGlsZSB3ZSB3ZXJlbid0IGhvbGRpbmcgdGhlCkBAIC0xNTE5 LDcgKzE1MjAsNyBAQCBwZ3NzX3N0b3JlKGNvbnN0IGNoYXIgKnF1ZXJ5LCBpbnQ2NCBxdWVy eUlkLAogCX0KIAogZG9uZToKLQlMV0xvY2tSZWxlYXNlKHBnc3MtPmxvY2spOworCUxXTG9j a1JlbGVhc2UoJnBnc3MtPmxvY2subG9jayk7CiAKIAkvKiBXZSBwb3N0cG9uZSB0aGlzIGNs ZWFuLXVwIHVudGlsIHdlJ3JlIG91dCBvZiB0aGUgbG9jayAqLwogCWlmIChub3JtX3F1ZXJ5 KQpAQCAtMTgwOCw3ICsxODA5LDcgQEAgcGdfc3RhdF9zdGF0ZW1lbnRzX2ludGVybmFsKEZ1 bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCSAqIHdlIG5lZWQgdG8gcGFydGl0aW9uIHRoZSBo YXNoIHRhYmxlIHRvIGxpbWl0IHRoZSB0aW1lIHNwZW50IGhvbGRpbmcgYW55CiAJICogb25l IGxvY2suCiAJICovCi0JTFdMb2NrQWNxdWlyZShwZ3NzLT5sb2NrLCBMV19TSEFSRUQpOwor CUxXTG9ja0FjcXVpcmUoJnBnc3MtPmxvY2subG9jaywgTFdfU0hBUkVEKTsKIAogCWlmIChz aG93dGV4dCkKIAl7CkBAIC0yMDQ2LDcgKzIwNDcsNyBAQCBwZ19zdGF0X3N0YXRlbWVudHNf aW50ZXJuYWwoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCXR1cGxlc3RvcmVfcHV0dmFs dWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERlc2MsIHZhbHVlcywgbnVsbHMp OwogCX0KIAotCUxXTG9ja1JlbGVhc2UocGdzcy0+bG9jayk7CisJTFdMb2NrUmVsZWFzZSgm cGdzcy0+bG9jay5sb2NrKTsKIAogCWlmIChxYnVmZmVyKQogCQlwZnJlZShxYnVmZmVyKTsK QEAgLTIwODYsMjAgKzIwODcsNiBAQCBwZ19zdGF0X3N0YXRlbWVudHNfaW5mbyhQR19GVU5D VElPTl9BUkdTKQogCVBHX1JFVFVSTl9EQVRVTShIZWFwVHVwbGVHZXREYXR1bShoZWFwX2Zv cm1fdHVwbGUodHVwZGVzYywgdmFsdWVzLCBudWxscykpKTsKIH0KIAotLyoKLSAqIEVzdGlt YXRlIHNoYXJlZCBtZW1vcnkgc3BhY2UgbmVlZGVkLgotICovCi1zdGF0aWMgU2l6ZQotcGdz c19tZW1zaXplKHZvaWQpCi17Ci0JU2l6ZQkJc2l6ZTsKLQotCXNpemUgPSBNQVhBTElHTihz aXplb2YocGdzc1NoYXJlZFN0YXRlKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIGhhc2hf ZXN0aW1hdGVfc2l6ZShwZ3NzX21heCwgc2l6ZW9mKHBnc3NFbnRyeSkpKTsKLQotCXJldHVy biBzaXplOwotfQotCiAvKgogICogQWxsb2NhdGUgYSBuZXcgaGFzaHRhYmxlIGVudHJ5Lgog ICogY2FsbGVyIG11c3QgaG9sZCBhbiBleGNsdXNpdmUgbG9jayBvbiBwZ3NzLT5sb2NrCkBA IC0yNzMwLDcgKzI3MTcsNyBAQCBlbnRyeV9yZXNldChPaWQgdXNlcmlkLCBPaWQgZGJpZCwg aW50NjQgcXVlcnlpZCwgYm9vbCBtaW5tYXhfb25seSkKIAkJCQkoZXJyY29kZShFUlJDT0RF X09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKIAkJCQkgZXJybXNnKCJwZ19z dGF0X3N0YXRlbWVudHMgbXVzdCBiZSBsb2FkZWQgdmlhIFwic2hhcmVkX3ByZWxvYWRfbGli cmFyaWVzXCIiKSkpOwogCi0JTFdMb2NrQWNxdWlyZShwZ3NzLT5sb2NrLCBMV19FWENMVVNJ VkUpOworCUxXTG9ja0FjcXVpcmUoJnBnc3MtPmxvY2subG9jaywgTFdfRVhDTFVTSVZFKTsK IAludW1fZW50cmllcyA9IGhhc2hfZ2V0X251bV9lbnRyaWVzKHBnc3NfaGFzaCk7CiAKIAlz dGF0c19yZXNldCA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKQEAgLTI4MjQsNyArMjgxMSw3 IEBAIGRvbmU6CiAJcmVjb3JkX2djX3F0ZXh0cygpOwogCiByZWxlYXNlX2xvY2s6Ci0JTFdM b2NrUmVsZWFzZShwZ3NzLT5sb2NrKTsKKwlMV0xvY2tSZWxlYXNlKCZwZ3NzLT5sb2NrLmxv Y2spOwogCiAJcmV0dXJuIHN0YXRzX3Jlc2V0OwogfQotLSAKMi40Ny4zCgo= --------------cltwtZYaOf76t571xokamZd0 Content-Type: text/x-patch; charset=UTF-8; name="v9-0008-Introduce-registry-of-built-in-subsystems.patch" Content-Disposition: attachment; filename="v9-0008-Introduce-registry-of-built-in-subsystems.patch" Content-Transfer-Encoding: base64 RnJvbSBjZGE5ZmNjMmIxNThiMzllNzIxYjFjNjU0MjZmZWRjYjJhNWI5YWFjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMSBBcHIgMjAyNiAxODoyMTowMiArMDMwMApT dWJqZWN0OiBbUEFUQ0ggdjkgMDgvMTZdIEludHJvZHVjZSByZWdpc3RyeSBvZiBidWlsdC1p biBzdWJzeXN0ZW1zCgpUbyBhZGQgYSBuZXcgYnVpbHQtaW4gc3Vic3lzdGVtLCBhZGQgaXQg dG8gc3Vic3lzdGVtc2xpc3QuaC4gVGhhdApob29rcyB1cCBpdHMgY2FsbGJhY2tzIHNvIHRo YXQgdGhleSBnZXQgY2FsbGVkIGF0IHRoZSByaWdodCB0aW1lcwpkdXJpbmcgcG9zdG1hc3Rl ciBzdGFydHVwLiBGb3Igbm93IHRoaXMgaXMgdW51c2VkLCBidXQgd2lsbCByZXBsYWNlCnRo ZSBjdXJyZW50IFN1YnN5c3RlbVNobWVtU2l6ZSgpIGFuZCBTdWJzeXN0ZW1TaG1lbUluaXQo KSBjYWxscyBpbgp0aGUgbmV4dCBjb21taXRzLgotLS0KIHNyYy9iYWNrZW5kL2Jvb3RzdHJh cC9ib290c3RyYXAuYyAgICAgICB8ICAyICsrCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2xh dW5jaF9iYWNrZW5kLmMgfCAgMiArKwogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFz dGVyLmMgICAgIHwgIDUgKysrKysKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyAg ICAgICAgICB8IDIxICsrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC90Y29wL3Bvc3Rn cmVzLmMgICAgICAgICAgICAgfCAgMyArKysKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvaXBjLmgg ICAgICAgICAgICAgICB8ICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlz dC5oICAgICB8IDIzICsrKysrKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL3N0b3JhZ2Uv c3Vic3lzdGVtcy5oICAgICAgICB8IDMwICsrKysrKysrKysrKysrKysrKysrKysrKysKIDgg ZmlsZXMgY2hhbmdlZCwgODcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1zLmgKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9ib290c3RyYXAvYm9vdHN0cmFwLmMgYi9zcmMvYmFja2VuZC9ib290c3RyYXAvYm9v dHN0cmFwLmMKaW5kZXggY2E3NWFmZThjYzcuLmUwN2JhNWMwYWUzIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9ib290c3RyYXAvYm9vdHN0cmFwLmMKKysrIGIvc3JjL2JhY2tlbmQvYm9v dHN0cmFwL2Jvb3RzdHJhcC5jCkBAIC0zNjEsNiArMzYxLDggQEAgQm9vdHN0cmFwTW9kZU1h aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgYm9vbCBjaGVja19vbmx5KQogCVNldFByb2Nl c3NpbmdNb2RlKEJvb3RzdHJhcFByb2Nlc3NpbmcpOwogCUlnbm9yZVN5c3RlbUluZGV4ZXMg PSB0cnVlOwogCisJUmVnaXN0ZXJCdWlsdGluU2htZW1DYWxsYmFja3MoKTsKKwogCUluaXRp YWxpemVNYXhCYWNrZW5kcygpOwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1 bmNoX2JhY2tlbmQuYwppbmRleCA3NTQyMzEwNGJlOC4uN2I4MTIwMGQzYzIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYworKysgYi9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL2xhdW5jaF9iYWNrZW5kLmMKQEAgLTY2Myw2ICs2NjMsOCBA QCBTdWJQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCSAqLwogCUxv Y2FsUHJvY2Vzc0NvbnRyb2xGaWxlKGZhbHNlKTsKIAorCVJlZ2lzdGVyQnVpbHRpblNobWVt Q2FsbGJhY2tzKCk7CisKIAkvKgogCSAqIFJlbG9hZCBhbnkgbGlicmFyaWVzIHRoYXQgd2Vy ZSBwcmVsb2FkZWQgYnkgdGhlIHBvc3RtYXN0ZXIuICBTaW5jZSB3ZQogCSAqIGV4ZWMnZCB0 aGlzIHByb2Nlc3MsIHRob3NlIGxpYnJhcmllcyBkaWRuJ3QgY29tZSBhbG9uZyB3aXRoIHVz OyBidXQgd2UKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rl ci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKaW5kZXggOTFlMTY1 N2JjZjQuLjRjZjU3NzRlMzNiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVy L3Bvc3RtYXN0ZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIu YwpAQCAtOTIxLDYgKzkyMSwxMSBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQogCSAqLwogCUFwcGx5TGF1bmNoZXJSZWdpc3RlcigpOwogCisJLyoKKwkgKiBS ZWdpc3RlciB0aGUgc2hhcmVkIG1lbW9yeSBuZWVkcyBvZiBhbGwgY29yZSBzdWJzeXN0ZW1z LgorCSAqLworCVJlZ2lzdGVyQnVpbHRpblNobWVtQ2FsbGJhY2tzKCk7CisKIAkvKgogCSAq IHByb2Nlc3MgYW55IGxpYnJhcmllcyB0aGF0IHNob3VsZCBiZSBwcmVsb2FkZWQgYXQgcG9z dG1hc3RlciBzdGFydAogCSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvaXBjaS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCmluZGV4IDM0YWNh ZWVlZmUwLi4zZDcwY2I3NmFkNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvaXBjaS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwpAQCAtNTAs NiArNTAsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9wcm9jc2lnbmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaW52YWxhZHQuaCIK KyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNsdWRlICJ1dGlscy9ndWMu aCIKICNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKICNpbmNsdWRlICJ1dGls cy93YWl0X2V2ZW50LmgiCkBAIC0yNDksNiArMjUwLDI2IEBAIENyZWF0ZVNoYXJlZE1lbW9y eUFuZFNlbWFwaG9yZXModm9pZCkKIAkJc2htZW1fc3RhcnR1cF9ob29rKCk7CiB9CiAKKy8q CisgKiBFYXJseSBpbml0aWFsaXphdGlvbiBvZiB2YXJpb3VzIHN1YnN5c3RlbXMsIGdpdmlu ZyB0aGVtIGEgY2hhbmNlIHRvCisgKiByZWdpc3RlciB0aGVpciBzaGFyZWQgbWVtb3J5IG5l ZWRzIGJlZm9yZSB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50IGlzCisgKiBhbGxvY2F0ZWQu CisgKi8KK3ZvaWQKK1JlZ2lzdGVyQnVpbHRpblNobWVtQ2FsbGJhY2tzKHZvaWQpCit7CisJ LyoKKwkgKiBDYWxsIFJlZ2lzdGVyU2htZW1DYWxsYmFja3MoLi4uKSBvbiBlYWNoIHN1YnN5 c3RlbSBsaXN0ZWQgaW4KKwkgKiBzdWJzeXN0ZW1zbGlzdC5oCisJICovCisjZGVmaW5lIFBH X1NITUVNX1NVQlNZU1RFTShzdWJzeXN0ZW1fY2FsbGJhY2tzKSBcCisJUmVnaXN0ZXJTaG1l bUNhbGxiYWNrcygmKHN1YnN5c3RlbV9jYWxsYmFja3MpKTsKKworI2luY2x1ZGUgInN0b3Jh Z2Uvc3Vic3lzdGVtbGlzdC5oIgorCisjdW5kZWYgUEdfU0hNRU1fU1VCU1lTVEVNCit9CisK IC8qCiAgKiBJbml0aWFsaXplIHZhcmlvdXMgc3Vic3lzdGVtcywgc2V0dGluZyB1cCB0aGVp ciBkYXRhIHN0cnVjdHVyZXMgaW4KICAqIHNoYXJlZCBtZW1vcnkuCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVz LmMKaW5kZXggYWY3Y2M4NmQ4MGEuLjZjNmMyMjQzZDllIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC90Y29wL3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5j CkBAIC00MTM3LDYgKzQxMzcsOSBAQCBQb3N0Z3Jlc1NpbmdsZVVzZXJNYWluKGludCBhcmdj LCBjaGFyICphcmd2W10sCiAJLyogcmVhZCBjb250cm9sIGZpbGUgKGVycm9yIGNoZWNraW5n IGFuZCBjb250YWlucyBjb25maWcgKSAqLwogCUxvY2FsUHJvY2Vzc0NvbnRyb2xGaWxlKGZh bHNlKTsKIAorCS8qIFJlZ2lzdGVyIHRoZSBzaGFyZWQgbWVtb3J5IG5lZWRzIG9mIGFsbCBj b3JlIHN1YnN5c3RlbXMuICovCisJUmVnaXN0ZXJCdWlsdGluU2htZW1DYWxsYmFja3MoKTsK KwogCS8qCiAJICogcHJvY2VzcyBhbnkgbGlicmFyaWVzIHRoYXQgc2hvdWxkIGJlIHByZWxv YWRlZCBhdCBwb3N0bWFzdGVyIHN0YXJ0CiAJICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL2lwYy5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9pcGMuaAppbmRleCBkYTMy Nzg3YWI1MS4uYjIwNWIwMGU3YTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv aXBjLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9pcGMuaApAQCAtNzcsNiArNzcsNyBA QCBleHRlcm4gdm9pZCBjaGVja19vbl9zaG1lbV9leGl0X2xpc3RzX2FyZV9lbXB0eSh2b2lk KTsKIC8qIGlwY2kuYyAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIHNobWVtX3N0YXJ0dXBfaG9v a190eXBlIHNobWVtX3N0YXJ0dXBfaG9vazsKIAorZXh0ZXJuIHZvaWQgUmVnaXN0ZXJCdWls dGluU2htZW1DYWxsYmFja3Modm9pZCk7CiBleHRlcm4gU2l6ZSBDYWxjdWxhdGVTaG1lbVNp emUodm9pZCk7CiBleHRlcm4gdm9pZCBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVz KHZvaWQpOwogI2lmZGVmIEVYRUNfQkFDS0VORApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv c3RvcmFnZS9zdWJzeXN0ZW1saXN0LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3Rl bWxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWQ0M2M5 MGJjYzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3Rl bWxpc3QuaApAQCAtMCwwICsxLDIzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICog c3Vic3lzdGVtbGlzdC5oCisgKgorICogTGlzdCBvZiBpbml0aWFsaXphdGlvbiBjYWxsYmFj a3Mgb2YgYnVpbHQtaW4gc3Vic3lzdGVtcy4gVGhpcyBpcyBrZXB0IGluCisgKiBpdHMgb3du IHNvdXJjZSBmaWxlIGZvciBwb3NzaWJsZSB1c2UgYnkgYXV0b21hdGljIHRvb2xzLgorICog UEdfU0hNRU1fU1VCU1lTVEVNIGlzIGRlZmluZWQgaW4gdGhlIGNhbGxlcnMgZGVwZW5kaW5n IG9uIGhvdyB0aGUgbGlzdCBpcworICogdXNlZC4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmln aHQgKGMpIDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVy c2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJzeXN0 ZW1saXN0LmgKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyogdGhlcmUgaXMg ZGVsaWJlcmF0ZWx5IG5vdCBhbiAjaWZuZGVmIFNVQlNZU1RFTUxJU1RfSCBoZXJlICovCisK Ky8qCisgKiBOb3RlOiB0aGVyZSBhcmUgc29tZSBpbnRlci1kZXBlbmRlbmNpZXMgYmV0d2Vl biB0aGVzZSwgc28gdGhlIG9yZGVyIG9mIHNvbWUKKyAqIG9mIHRoZXNlIG1hdHRlci4KKyAq LworCisvKiBUT0RPOiBlbXB0eSBmb3Igbm93ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL3N1YnN5c3RlbXMuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVt cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zOGI3MzViZWM2 NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtcy5o CkBAIC0wLDAgKzEsMzAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHN1YnN5 c3RlbXMuaAorICoJICBQcm92aWRlIGV4dGVybiBkZWNsYXJhdGlvbnMgZm9yIGFsbCB0aGUg YnVpbHQtaW4gc3Vic3lzdGVtIGNhbGxiYWNrcworICoKKyAqCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5p dmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJz eXN0ZW1zLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBTVUJT WVNURU1TX0gKKyNkZWZpbmUgU1VCU1lTVEVNU19ICisKKyNpbmNsdWRlICJzdG9yYWdlL3No bWVtLmgiCisKKy8qCisgKiBFeHRlcm4gZGVjbGFyYXRpb25zIG9mIGFsbCB0aGUgYnVpbHQt aW4gc3Vic3lzdGVtIGNhbGxiYWNrcworICoKKyAqIFRoZSBhY3R1YWwgbGlzdCBpcyBpbiBz dWJzeXN0ZW1saXN0LmgsIHNvIHRoYXQgdGhlIHNhbWUgbGlzdCBjYW4gYmUgdXNlZAorICog Zm9yIG90aGVyIHB1cnBvc2VzLgorICovCisjZGVmaW5lIFBHX1NITUVNX1NVQlNZU1RFTShj YWxsYmFja3MpIFwKKwlleHRlcm4gY29uc3QgU2htZW1DYWxsYmFja3MgY2FsbGJhY2tzOwor I2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oIgorI3VuZGVmIFBHX1NITUVNX1NV QlNZU1RFTQorCisjZW5kaWYJCQkJCQkJLyogU1VCU1lTVEVNU19IICovCi0tIAoyLjQ3LjMK Cg== --------------cltwtZYaOf76t571xokamZd0 Content-Type: text/x-patch; charset=UTF-8; name="v9-0009-Convert-injection-points-to-use-the-new-interface.patch" Content-Disposition: attachment; filename*0="v9-0009-Convert-injection-points-to-use-the-new-interface.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAwNjM5Y2U4ZTE0MDc0ZmI4YmMzNGE3MTM1YmM5Y2FkOTA4NjgwMGVjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFNhdCwgMjEgTWFyIDIwMjYgMTk6MDU6MjYgKzAyMDAK U3ViamVjdDogW1BBVENIIHY5IDA5LzE2XSBDb252ZXJ0IGluamVjdGlvbiBwb2ludHMgdG8g dXNlIHRoZSBuZXcgaW50ZXJmYWNlCgotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lw Y2kuYyAgICAgICAgICAgfCAgMyAtLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9pbmplY3Rp b25fcG9pbnQuYyB8IDYwICsrKysrKysrKysrKy0tLS0tLS0tLS0tLQogc3JjL2luY2x1ZGUv c3RvcmFnZS9zdWJzeXN0ZW1saXN0LmggICAgICB8ICAyICstCiBzcmMvaW5jbHVkZS91dGls cy9pbmplY3Rpb25fcG9pbnQuaCAgICAgIHwgIDMgLS0KIDQgZmlsZXMgY2hhbmdlZCwgMzAg aW5zZXJ0aW9ucygrKSwgMzggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvaXBjaS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5j CmluZGV4IDNkNzBjYjc2YWQ2Li4yYWU0YjljMmFjMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvaXBjaS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lw Y2kuYwpAQCAtNTIsNyArNTIsNiBAQAogI2luY2x1ZGUgInN0b3JhZ2Uvc2ludmFsYWR0Lmgi CiAjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3Vj LmgiCi0jaW5jbHVkZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCiAjaW5jbHVkZSAidXRp bHMvd2FpdF9ldmVudC5oIgogCiAvKiBHVUNzICovCkBAIC0xMzksNyArMTM4LDYgQEAgQ2Fs Y3VsYXRlU2htZW1TaXplKHZvaWQpCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIEFzeW5jU2ht ZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTdGF0c1NobWVtU2l6ZSgpKTsK IAlzaXplID0gYWRkX3NpemUoc2l6ZSwgV2FpdEV2ZW50Q3VzdG9tU2htZW1TaXplKCkpOwot CXNpemUgPSBhZGRfc2l6ZShzaXplLCBJbmplY3Rpb25Qb2ludFNobWVtU2l6ZSgpKTsKIAlz aXplID0gYWRkX3NpemUoc2l6ZSwgU2xvdFN5bmNTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFk ZF9zaXplKHNpemUsIEFpb1NobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwg V2FpdExTTlNobWVtU2l6ZSgpKTsKQEAgLTM1Myw3ICszNTEsNiBAQCBDcmVhdGVPckF0dGFj aFNobWVtU3RydWN0cyh2b2lkKQogCUFzeW5jU2htZW1Jbml0KCk7CiAJU3RhdHNTaG1lbUlu aXQoKTsKIAlXYWl0RXZlbnRDdXN0b21TaG1lbUluaXQoKTsKLQlJbmplY3Rpb25Qb2ludFNo bWVtSW5pdCgpOwogCUFpb1NobWVtSW5pdCgpOwogCVdhaXRMU05TaG1lbUluaXQoKTsKIAlM b2dpY2FsRGVjb2RpbmdDdGxTaG1lbUluaXQoKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvaW5qZWN0aW9uX3BvaW50LmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNj L2luamVjdGlvbl9wb2ludC5jCmluZGV4IGMwNmIwZTliODAwLi45OTgxZDZlMjEyZiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9pbmplY3Rpb25fcG9pbnQuYworKysg Yi9zcmMvYmFja2VuZC91dGlscy9taXNjL2luamVjdGlvbl9wb2ludC5jCkBAIC0xNyw2ICsx Nyw3IEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAic3RvcmFn ZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCiAK ICNpZmRlZiBVU0VfSU5KRUNUSU9OX1BPSU5UUwpAQCAtMTA5LDYgKzExMCwxMSBAQCB0eXBl ZGVmIHN0cnVjdCBJbmplY3Rpb25Qb2ludENhY2hlRW50cnkKIAogc3RhdGljIEhUQUIgKklu amVjdGlvblBvaW50Q2FjaGUgPSBOVUxMOwogCisjaWZkZWYgVVNFX0lOSkVDVElPTl9QT0lO VFMKK3N0YXRpYyB2b2lkIEluamVjdGlvblBvaW50U2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7 CitzdGF0aWMgdm9pZCBJbmplY3Rpb25Qb2ludFNobWVtSW5pdCh2b2lkICphcmcpOworI2Vu ZGlmCisKIC8qCiAgKiBpbmplY3Rpb25fcG9pbnRfY2FjaGVfYWRkCiAgKgpAQCAtMjI2LDQ2 ICsyMzIsMzggQEAgaW5qZWN0aW9uX3BvaW50X2NhY2hlX2dldChjb25zdCBjaGFyICpuYW1l KQogfQogI2VuZGlmCQkJCQkJCS8qIFVTRV9JTkpFQ1RJT05fUE9JTlRTICovCiAKLS8qCi0g KiBSZXR1cm4gdGhlIHNwYWNlIGZvciBkeW5hbWljIHNoYXJlZCBoYXNoIHRhYmxlLgotICov Ci1TaXplCi1JbmplY3Rpb25Qb2ludFNobWVtU2l6ZSh2b2lkKQoteworY29uc3QgU2htZW1D YWxsYmFja3MgSW5qZWN0aW9uUG9pbnRTaG1lbUNhbGxiYWNrcyA9IHsKICNpZmRlZiBVU0Vf SU5KRUNUSU9OX1BPSU5UUwotCVNpemUJCXN6ID0gMDsKLQotCXN6ID0gYWRkX3NpemUoc3os IHNpemVvZihJbmplY3Rpb25Qb2ludHNDdGwpKTsKLQlyZXR1cm4gc3o7Ci0jZWxzZQotCXJl dHVybiAwOworCS5yZXF1ZXN0X2ZuID0gSW5qZWN0aW9uUG9pbnRTaG1lbVJlcXVlc3QsCisJ LmluaXRfZm4gPSBJbmplY3Rpb25Qb2ludFNobWVtSW5pdCwKICNlbmRpZgotfQorfTsKIAog LyoKLSAqIEFsbG9jYXRlIHNobWVtIHNwYWNlIGZvciBkeW5hbWljIHNoYXJlZCBoYXNoLgor ICogUmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIGR5bmFtaWMgc2hhcmVkIGhhc2ggdGFibGUKICAq Lwotdm9pZAotSW5qZWN0aW9uUG9pbnRTaG1lbUluaXQodm9pZCkKLXsKICNpZmRlZiBVU0Vf SU5KRUNUSU9OX1BPSU5UUwotCWJvb2wJCWZvdW5kOworc3RhdGljIHZvaWQKK0luamVjdGlv blBvaW50U2htZW1SZXF1ZXN0KHZvaWQgKmFyZykKK3sKKwlzdGF0aWMgU2htZW1TdHJ1Y3RE ZXNjIEluamVjdGlvblBvaW50U2htZW1EZXNjOwogCi0JQWN0aXZlSW5qZWN0aW9uUG9pbnRz ID0gU2htZW1Jbml0U3RydWN0KCJJbmplY3Rpb25Qb2ludCBoYXNoIiwKLQkJCQkJCQkJCQkJ c2l6ZW9mKEluamVjdGlvblBvaW50c0N0bCksCi0JCQkJCQkJCQkJCSZmb3VuZCk7Ci0JaWYg KCFJc1VuZGVyUG9zdG1hc3RlcikKLQl7Ci0JCUFzc2VydCghZm91bmQpOwotCQlwZ19hdG9t aWNfaW5pdF91MzIoJkFjdGl2ZUluamVjdGlvblBvaW50cy0+bWF4X2ludXNlLCAwKTsKLQkJ Zm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfSU5KRUNUSU9OX1BPSU5UUzsgaSsrKQotCQkJcGdf YXRvbWljX2luaXRfdTY0KCZBY3RpdmVJbmplY3Rpb25Qb2ludHMtPmVudHJpZXNbaV0uZ2Vu ZXJhdGlvbiwgMCk7Ci0JfQotCWVsc2UKLQkJQXNzZXJ0KGZvdW5kKTsKLSNlbmRpZgorCVNo bWVtUmVxdWVzdFN0cnVjdCgmSW5qZWN0aW9uUG9pbnRTaG1lbURlc2MsCisJCQkJCSAgIC5u YW1lID0gIkluamVjdGlvblBvaW50IGhhc2giLAorCQkJCQkgICAuc2l6ZSA9IHNpemVvZihJ bmplY3Rpb25Qb2ludHNDdGwpLAorCQkJCQkgICAucHRyID0gKHZvaWQgKiopICZBY3RpdmVJ bmplY3Rpb25Qb2ludHMsCisJCSk7CiB9CiAKK3N0YXRpYyB2b2lkCitJbmplY3Rpb25Qb2lu dFNobWVtSW5pdCh2b2lkICphcmcpCit7CisJcGdfYXRvbWljX2luaXRfdTMyKCZBY3RpdmVJ bmplY3Rpb25Qb2ludHMtPm1heF9pbnVzZSwgMCk7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBN QVhfSU5KRUNUSU9OX1BPSU5UUzsgaSsrKQorCQlwZ19hdG9taWNfaW5pdF91NjQoJkFjdGl2 ZUluamVjdGlvblBvaW50cy0+ZW50cmllc1tpXS5nZW5lcmF0aW9uLCAwKTsKK30KKyNlbmRp ZgorCiAvKgogICogQXR0YWNoIGEgbmV3IGluamVjdGlvbiBwb2ludC4KICAqLwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1saXN0LmggYi9zcmMvaW5jbHVk ZS9zdG9yYWdlL3N1YnN5c3RlbWxpc3QuaAppbmRleCBlZDQzYzkwYmNjMy4uNjVkYTZmMTdj NWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oCisr KyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oCkBAIC0yMCw0ICsyMCw0 IEBACiAgKiBvZiB0aGVzZSBtYXR0ZXIuCiAgKi8KIAotLyogVE9ETzogZW1wdHkgZm9yIG5v dyAqLworUEdfU0hNRU1fU1VCU1lTVEVNKEluamVjdGlvblBvaW50U2htZW1DYWxsYmFja3Mp CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9pbmplY3Rpb25fcG9pbnQuaCBiL3Ny Yy9pbmNsdWRlL3V0aWxzL2luamVjdGlvbl9wb2ludC5oCmluZGV4IDI3YTI1MjY1MjRmLi5m YWJkMTQ1NWMzYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvaW5qZWN0aW9uX3Bv aW50LmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvaW5qZWN0aW9uX3BvaW50LmgKQEAgLTQ2 LDkgKzQ2LDYgQEAgdHlwZWRlZiB2b2lkICgqSW5qZWN0aW9uUG9pbnRDYWxsYmFjaykgKGNv bnN0IGNoYXIgKm5hbWUsCiAJCQkJCQkJCQkJY29uc3Qgdm9pZCAqcHJpdmF0ZV9kYXRhLAog CQkJCQkJCQkJCXZvaWQgKmFyZyk7CiAKLWV4dGVybiBTaXplIEluamVjdGlvblBvaW50U2ht ZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgSW5qZWN0aW9uUG9pbnRTaG1lbUluaXQodm9p ZCk7Ci0KIGV4dGVybiB2b2lkIEluamVjdGlvblBvaW50QXR0YWNoKGNvbnN0IGNoYXIgKm5h bWUsCiAJCQkJCQkJCSBjb25zdCBjaGFyICpsaWJyYXJ5LAogCQkJCQkJCQkgY29uc3QgY2hh ciAqZnVuY3Rpb24sCi0tIAoyLjQ3LjMKCg== --------------cltwtZYaOf76t571xokamZd0 Content-Type: text/x-patch; charset=UTF-8; name="v9-0010-Convert-wait_event.c-to-new-interface.patch" Content-Disposition: attachment; filename="v9-0010-Convert-wait_event.c-to-new-interface.patch" Content-Transfer-Encoding: base64 RnJvbSA0MjJhNjEwNmY2YWVkNWZhMzZhMzlhMDBjN2JlOGZlNDQ3ZjA4MTMzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFNhdCwgMjggTWFyIDIwMjYgMDE6NDY6NDYgKzAyMDAK U3ViamVjdDogW1BBVENIIHY5IDEwLzE2XSBDb252ZXJ0IHdhaXRfZXZlbnQuYyB0byBuZXcg aW50ZXJmYWNlCgotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyAgICAgICAg ICB8ICAyIC0KIHNyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYyB8IDk2 ICsrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lz dGVtbGlzdC5oICAgICB8ICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaCAg ICAgICAgICB8ICAyIC0KIDQgZmlsZXMgY2hhbmdlZCwgNDggaW5zZXJ0aW9ucygrKSwgNTMg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBj aS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCmluZGV4IDJhZTRiOWMyYWMy Li5iOTA3MTdjMWY1OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBj aS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwpAQCAtMTM3LDcgKzEz Nyw2IEBAIENhbGN1bGF0ZVNobWVtU2l6ZSh2b2lkKQogCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBTeW5jU2NhblNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgQXN5bmNT aG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFN0YXRzU2htZW1TaXplKCkp OwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBXYWl0RXZlbnRDdXN0b21TaG1lbVNpemUoKSk7 CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFNsb3RTeW5jU2htZW1TaXplKCkpOwogCXNpemUg PSBhZGRfc2l6ZShzaXplLCBBaW9TaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNp emUsIFdhaXRMU05TaG1lbVNpemUoKSk7CkBAIC0zNTAsNyArMzQ5LDYgQEAgQ3JlYXRlT3JB dHRhY2hTaG1lbVN0cnVjdHModm9pZCkKIAlTeW5jU2NhblNobWVtSW5pdCgpOwogCUFzeW5j U2htZW1Jbml0KCk7CiAJU3RhdHNTaG1lbUluaXQoKTsKLQlXYWl0RXZlbnRDdXN0b21TaG1l bUluaXQoKTsKIAlBaW9TaG1lbUluaXQoKTsKIAlXYWl0TFNOU2htZW1Jbml0KCk7CiAJTG9n aWNhbERlY29kaW5nQ3RsU2htZW1Jbml0KCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0 eS93YWl0X2V2ZW50LmMKaW5kZXggZTVhMjI4OWYwYjAuLjA4YWY2MWZmNDQ4IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jCkBAIC0yNSw2ICsyNSw3IEBA CiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sd2xvY2su aCIKICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdWJz eXN0ZW1zLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zcGluLmgiCiAjaW5jbHVkZSAidXRpbHMv d2FpdF9ldmVudC5oIgogCkBAIC05Nyw2MSArOTgsNTggQEAgc3RhdGljIFdhaXRFdmVudEN1 c3RvbUNvdW50ZXJEYXRhICpXYWl0RXZlbnRDdXN0b21Db3VudGVyOwogc3RhdGljIHVpbnQz MiBXYWl0RXZlbnRDdXN0b21OZXcodWludDMyIGNsYXNzSWQsIGNvbnN0IGNoYXIgKndhaXRf ZXZlbnRfbmFtZSk7CiBzdGF0aWMgY29uc3QgY2hhciAqR2V0V2FpdEV2ZW50Q3VzdG9tSWRl bnRpZmllcih1aW50MzIgd2FpdF9ldmVudF9pbmZvKTsKIAorc3RhdGljIHZvaWQgV2FpdEV2 ZW50Q3VzdG9tU2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBXYWl0RXZl bnRDdXN0b21TaG1lbUluaXQodm9pZCAqYXJnKTsKKworY29uc3QgU2htZW1DYWxsYmFja3Mg V2FpdEV2ZW50Q3VzdG9tU2htZW1DYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBXYWl0 RXZlbnRDdXN0b21TaG1lbVJlcXVlc3QsCisJLmluaXRfZm4gPSBXYWl0RXZlbnRDdXN0b21T aG1lbUluaXQsCit9OworCiAvKgotICogIFJldHVybiB0aGUgc3BhY2UgZm9yIGR5bmFtaWMg c2hhcmVkIGhhc2ggdGFibGVzIGFuZCBkeW5hbWljIGFsbG9jYXRpb24gY291bnRlci4KKyAq IFJlZ2lzdGVyIHNobWVtIHNwYWNlIGZvciBkeW5hbWljIHNoYXJlZCBoYXNoIGFuZCBkeW5h bWljIGFsbG9jYXRpb24gY291bnRlci4KICAqLwotU2l6ZQotV2FpdEV2ZW50Q3VzdG9tU2ht ZW1TaXplKHZvaWQpCitzdGF0aWMgdm9pZAorV2FpdEV2ZW50Q3VzdG9tU2htZW1SZXF1ZXN0 KHZvaWQgKmFyZykKIHsKLQlTaXplCQlzejsKLQotCXN6ID0gTUFYQUxJR04oc2l6ZW9mKFdh aXRFdmVudEN1c3RvbUNvdW50ZXJEYXRhKSk7Ci0Jc3ogPSBhZGRfc2l6ZShzeiwgaGFzaF9l c3RpbWF0ZV9zaXplKFdBSVRfRVZFTlRfQ1VTVE9NX0hBU0hfTUFYX1NJWkUsCi0JCQkJCQkJ CQkJIHNpemVvZihXYWl0RXZlbnRDdXN0b21FbnRyeUJ5SW5mbykpKTsKLQlzeiA9IGFkZF9z aXplKHN6LCBoYXNoX2VzdGltYXRlX3NpemUoV0FJVF9FVkVOVF9DVVNUT01fSEFTSF9NQVhf U0laRSwKLQkJCQkJCQkJCQkgc2l6ZW9mKFdhaXRFdmVudEN1c3RvbUVudHJ5QnlOYW1lKSkp OwotCXJldHVybiBzejsKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIFdhaXRFdmVudEN1c3Rv bUNvdW50ZXJTaG1lbURlc2M7CisJc3RhdGljIFNobWVtSGFzaERlc2MgV2FpdEV2ZW50Q3Vz dG9tSGFzaEJ5SW5mb0Rlc2M7CisJc3RhdGljIFNobWVtSGFzaERlc2MgV2FpdEV2ZW50Q3Vz dG9tSGFzaEJ5TmFtZURlc2M7CisKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJldhaXRFdmVudEN1 c3RvbUNvdW50ZXJTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0gIldhaXRFdmVudEN1c3Rv bUNvdW50ZXJEYXRhIiwKKwkJCQkJICAgLnNpemUgPSBzaXplb2YoV2FpdEV2ZW50Q3VzdG9t Q291bnRlckRhdGEpLAorCQkJCQkgICAucHRyID0gKHZvaWQgKiopICZXYWl0RXZlbnRDdXN0 b21Db3VudGVyLAorCQkpOworCVNobWVtUmVxdWVzdEhhc2goJldhaXRFdmVudEN1c3RvbUhh c2hCeUluZm9EZXNjLAorCQkJCQkgLm5hbWUgPSAiV2FpdEV2ZW50Q3VzdG9tIGhhc2ggYnkg d2FpdCBldmVudCBpbmZvcm1hdGlvbiIsCisJCQkJCSAucHRyID0gJldhaXRFdmVudEN1c3Rv bUhhc2hCeUluZm8sCisKKwkJCQkJIC5pbml0X3NpemUgPSBXQUlUX0VWRU5UX0NVU1RPTV9I QVNIX0lOSVRfU0laRSwKKwkJCQkJIC5tYXhfc2l6ZSA9IFdBSVRfRVZFTlRfQ1VTVE9NX0hB U0hfTUFYX1NJWkUsCisJCQkJCSAuaGFzaF9pbmZvLmtleXNpemUgPSBzaXplb2YodWludDMy KSwKKwkJCQkJIC5oYXNoX2luZm8uZW50cnlzaXplID0gc2l6ZW9mKFdhaXRFdmVudEN1c3Rv bUVudHJ5QnlJbmZvKSwKKwkJCQkJIC5oYXNoX2ZsYWdzID0gSEFTSF9FTEVNIHwgSEFTSF9C TE9CUywKKwkJKTsKKwlTaG1lbVJlcXVlc3RIYXNoKCZXYWl0RXZlbnRDdXN0b21IYXNoQnlO YW1lRGVzYywKKwkJCQkJIC5uYW1lID0gIldhaXRFdmVudEN1c3RvbSBoYXNoIGJ5IG5hbWUi LAorCQkJCQkgLnB0ciA9ICZXYWl0RXZlbnRDdXN0b21IYXNoQnlOYW1lLAorCisJCQkJCSAu aW5pdF9zaXplID0gV0FJVF9FVkVOVF9DVVNUT01fSEFTSF9JTklUX1NJWkUsCisJCQkJCSAu bWF4X3NpemUgPSBXQUlUX0VWRU5UX0NVU1RPTV9IQVNIX01BWF9TSVpFLAorCS8qIGtleSBp cyBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcgKi8KKwkJCQkJIC5oYXNoX2luZm8ua2V5c2l6 ZSA9IHNpemVvZihjaGFyW05BTUVEQVRBTEVOXSksCisJCQkJCSAuaGFzaF9pbmZvLmVudHJ5 c2l6ZSA9IHNpemVvZihXYWl0RXZlbnRDdXN0b21FbnRyeUJ5TmFtZSksCisJCQkJCSAuaGFz aF9mbGFncyA9IEhBU0hfRUxFTSB8IEhBU0hfU1RSSU5HUywKKwkJKTsKIH0KIAotLyoKLSAq IEFsbG9jYXRlIHNobWVtIHNwYWNlIGZvciBkeW5hbWljIHNoYXJlZCBoYXNoIGFuZCBkeW5h bWljIGFsbG9jYXRpb24gY291bnRlci4KLSAqLwotdm9pZAotV2FpdEV2ZW50Q3VzdG9tU2ht ZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAorV2FpdEV2ZW50Q3VzdG9tU2htZW1Jbml0KHZv aWQgKmFyZykKIHsKLQlib29sCQlmb3VuZDsKLQlIQVNIQ1RMCQlpbmZvOwotCi0JV2FpdEV2 ZW50Q3VzdG9tQ291bnRlciA9IChXYWl0RXZlbnRDdXN0b21Db3VudGVyRGF0YSAqKQotCQlT aG1lbUluaXRTdHJ1Y3QoIldhaXRFdmVudEN1c3RvbUNvdW50ZXJEYXRhIiwKLQkJCQkJCXNp emVvZihXYWl0RXZlbnRDdXN0b21Db3VudGVyRGF0YSksICZmb3VuZCk7Ci0KLQlpZiAoIWZv dW5kKQotCXsKLQkJLyogaW5pdGlhbGl6ZSB0aGUgYWxsb2NhdGlvbiBjb3VudGVyIGFuZCBp dHMgc3BpbmxvY2suICovCi0JCVdhaXRFdmVudEN1c3RvbUNvdW50ZXItPm5leHRJZCA9IFdB SVRfRVZFTlRfQ1VTVE9NX0lOSVRJQUxfSUQ7Ci0JCVNwaW5Mb2NrSW5pdCgmV2FpdEV2ZW50 Q3VzdG9tQ291bnRlci0+bXV0ZXgpOwotCX0KLQotCS8qIGluaXRpYWxpemUgb3IgYXR0YWNo IHRoZSBoYXNoIHRhYmxlcyB0byBzdG9yZSBjdXN0b20gd2FpdCBldmVudHMgKi8KLQlpbmZv LmtleXNpemUgPSBzaXplb2YodWludDMyKTsKLQlpbmZvLmVudHJ5c2l6ZSA9IHNpemVvZihX YWl0RXZlbnRDdXN0b21FbnRyeUJ5SW5mbyk7Ci0JV2FpdEV2ZW50Q3VzdG9tSGFzaEJ5SW5m byA9Ci0JCVNobWVtSW5pdEhhc2goIldhaXRFdmVudEN1c3RvbSBoYXNoIGJ5IHdhaXQgZXZl bnQgaW5mb3JtYXRpb24iLAotCQkJCQkgIFdBSVRfRVZFTlRfQ1VTVE9NX0hBU0hfSU5JVF9T SVpFLAotCQkJCQkgIFdBSVRfRVZFTlRfQ1VTVE9NX0hBU0hfTUFYX1NJWkUsCi0JCQkJCSAg JmluZm8sCi0JCQkJCSAgSEFTSF9FTEVNIHwgSEFTSF9CTE9CUyk7Ci0KLQkvKiBrZXkgaXMg YSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nICovCi0JaW5mby5rZXlzaXplID0gc2l6ZW9mKGNo YXJbTkFNRURBVEFMRU5dKTsKLQlpbmZvLmVudHJ5c2l6ZSA9IHNpemVvZihXYWl0RXZlbnRD dXN0b21FbnRyeUJ5TmFtZSk7Ci0JV2FpdEV2ZW50Q3VzdG9tSGFzaEJ5TmFtZSA9Ci0JCVNo bWVtSW5pdEhhc2goIldhaXRFdmVudEN1c3RvbSBoYXNoIGJ5IG5hbWUiLAotCQkJCQkgIFdB SVRfRVZFTlRfQ1VTVE9NX0hBU0hfSU5JVF9TSVpFLAotCQkJCQkgIFdBSVRfRVZFTlRfQ1VT VE9NX0hBU0hfTUFYX1NJWkUsCi0JCQkJCSAgJmluZm8sCi0JCQkJCSAgSEFTSF9FTEVNIHwg SEFTSF9TVFJJTkdTKTsKKwkvKiBpbml0aWFsaXplIHRoZSBhbGxvY2F0aW9uIGNvdW50ZXIg YW5kIGl0cyBzcGlubG9jay4gKi8KKwlXYWl0RXZlbnRDdXN0b21Db3VudGVyLT5uZXh0SWQg PSBXQUlUX0VWRU5UX0NVU1RPTV9JTklUSUFMX0lEOworCVNwaW5Mb2NrSW5pdCgmV2FpdEV2 ZW50Q3VzdG9tQ291bnRlci0+bXV0ZXgpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1saXN0LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3N1 YnN5c3RlbWxpc3QuaAppbmRleCA2NWRhNmYxN2M1ZC4uN2RmYmQwM2Q2ZTUgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oCisrKyBiL3NyYy9pbmNs dWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oCkBAIC0yMCw0ICsyMCw1IEBACiAgKiBvZiB0 aGVzZSBtYXR0ZXIuCiAgKi8KIAorUEdfU0hNRU1fU1VCU1lTVEVNKFdhaXRFdmVudEN1c3Rv bVNobWVtQ2FsbGJhY2tzKQogUEdfU0hNRU1fU1VCU1lTVEVNKEluamVjdGlvblBvaW50U2ht ZW1DYWxsYmFja3MpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50 LmggYi9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmgKaW5kZXggMzRjMjdjYzNkYzMu Ljg2ZWUzNDgyMjBkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50 LmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCkBAIC00Miw4ICs0Miw2 IEBAIGV4dGVybiBQR0RMTElNUE9SVCB1aW50MzIgKm15X3dhaXRfZXZlbnRfaW5mbzsKIGV4 dGVybiB1aW50MzIgV2FpdEV2ZW50RXh0ZW5zaW9uTmV3KGNvbnN0IGNoYXIgKndhaXRfZXZl bnRfbmFtZSk7CiBleHRlcm4gdWludDMyIFdhaXRFdmVudEluamVjdGlvblBvaW50TmV3KGNv bnN0IGNoYXIgKndhaXRfZXZlbnRfbmFtZSk7CiAKLWV4dGVybiB2b2lkIFdhaXRFdmVudEN1 c3RvbVNobWVtSW5pdCh2b2lkKTsKLWV4dGVybiBTaXplIFdhaXRFdmVudEN1c3RvbVNobWVt U2l6ZSh2b2lkKTsKIGV4dGVybiBjaGFyICoqR2V0V2FpdEV2ZW50Q3VzdG9tTmFtZXModWlu dDMyIGNsYXNzSWQsIGludCAqbndhaXRldmVudHMpOwogCiAvKiAtLS0tLS0tLS0tCi0tIAoy LjQ3LjMKCg== --------------cltwtZYaOf76t571xokamZd0 Content-Type: text/x-patch; charset=UTF-8; name="v9-0011-Convert-test_aio-to-use-the-new-mechanism.patch" Content-Disposition: attachment; filename="v9-0011-Convert-test_aio-to-use-the-new-mechanism.patch" Content-Transfer-Encoding: base64 RnJvbSBlMjY2OGNiZTY2MDEwYjJkN2FkMzI2YzQ0OGQwMzAwYTRlZTE1MWQ3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMSBBcHIgMjAyNiAyMDo1MDowNCArMDMwMApT dWJqZWN0OiBbUEFUQ0ggdjkgMTEvMTZdIENvbnZlcnQgdGVzdF9haW8gdG8gdXNlIHRoZSBu ZXcgbWVjaGFuaXNtCgpJIHdhbnRlZCB0byB1c2UgdGhpcyB0byBzaG93Y2FzZSBTSE1FTV9B TExPV19BTExPQ19BRlRFUl9TVEFSVFVQLCBidXQKdW5mb3J0dW5hdGVseSB0aGF0IGRpZG4n dCB3b3JrIGJlY2F1c2UgdGhlbiB3ZSdkIGNhbGwKSW5qZWN0aW9uUG9pbnRMb2FkIGZyb20g X1BHX2luaXQoKS4KLS0tCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLmMg fCAxMDggKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNTAg aW5zZXJ0aW9ucygrKSwgNTggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fp by90ZXN0X2Fpby5jCmluZGV4IDM0NDg3YTA1NDg2Li44ZmE1MWE3ZGQwMiAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jCisrKyBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1 ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9jaGVja3N1bS5oIgog I2luY2x1ZGUgInN0b3JhZ2UvY29uZGl0aW9uX3ZhcmlhYmxlLmgiCi0jaW5jbHVkZSAic3Rv cmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2x3bG9jay5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY251bWJlci5oIgpAQCAtNDQs NiArNDMsNyBAQAogUEdfTU9EVUxFX01BR0lDOwogCiAKKy8qIEluIHNoYXJlZCBtZW1vcnkg Ki8KIHR5cGVkZWYgc3RydWN0IEluaklvRXJyb3JTdGF0ZQogewogCUNvbmRpdGlvblZhcmlh YmxlIGN2OwpAQCAtNzQsNzggKzc0LDczIEBAIHR5cGVkZWYgc3RydWN0IEJsb2Nrc1JlYWRT dHJlYW1EYXRhCiBzdGF0aWMgSW5qSW9FcnJvclN0YXRlICppbmpfaW9fZXJyb3Jfc3RhdGU7 CiAKIC8qIFNoYXJlZCBtZW1vcnkgaW5pdCBjYWxsYmFja3MgKi8KLXN0YXRpYyBzaG1lbV9y ZXF1ZXN0X2hvb2tfdHlwZSBwcmV2X3NobWVtX3JlcXVlc3RfaG9vayA9IE5VTEw7Ci1zdGF0 aWMgc2htZW1fc3RhcnR1cF9ob29rX3R5cGUgcHJldl9zaG1lbV9zdGFydHVwX2hvb2sgPSBO VUxMOworc3RhdGljIHZvaWQgdGVzdF9haW9fc2htZW1fcmVxdWVzdCh2b2lkICphcmcpOwor c3RhdGljIHZvaWQgdGVzdF9haW9fc2htZW1faW5pdCh2b2lkICphcmcpOworc3RhdGljIHZv aWQgdGVzdF9haW9fc2htZW1fYXR0YWNoKHZvaWQgKmFyZyk7CisKK3N0YXRpYyBjb25zdCBT aG1lbUNhbGxiYWNrcyBpbmpfaW9fc2htZW1fY2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2Zu ID0gdGVzdF9haW9fc2htZW1fcmVxdWVzdCwKKwkuaW5pdF9mbiA9IHRlc3RfYWlvX3NobWVt X2luaXQsCisJLmF0dGFjaF9mbiA9IHRlc3RfYWlvX3NobWVtX2F0dGFjaCwKK307CiAKIHN0 YXRpYyBQZ0Fpb0hhbmRsZSAqbGFzdF9oYW5kbGU7CiAKIAogCiBzdGF0aWMgdm9pZAotdGVz dF9haW9fc2htZW1fcmVxdWVzdCh2b2lkKQordGVzdF9haW9fc2htZW1fcmVxdWVzdCh2b2lk ICphcmcpCiB7Ci0JaWYgKHByZXZfc2htZW1fcmVxdWVzdF9ob29rKQotCQlwcmV2X3NobWVt X3JlcXVlc3RfaG9vaygpOworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgaW5qX2lvX3NobWVt X2Rlc2M7CiAKLQlSZXF1ZXN0QWRkaW5TaG1lbVNwYWNlKHNpemVvZihJbmpJb0Vycm9yU3Rh dGUpKTsKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJmlual9pb19zaG1lbV9kZXNjLAorCQkJCQkg ICAubmFtZSA9ICJ0ZXN0X2FpbyBpbmplY3Rpb24gcG9pbnRzIiwKKwkJCQkJICAgLnNpemUg PSBzaXplb2YoSW5qSW9FcnJvclN0YXRlKSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAm aW5qX2lvX2Vycm9yX3N0YXRlLAorCQkpOwogfQogCiBzdGF0aWMgdm9pZAotdGVzdF9haW9f c2htZW1fc3RhcnR1cCh2b2lkKQordGVzdF9haW9fc2htZW1faW5pdCh2b2lkICphcmcpCiB7 Ci0JYm9vbAkJZm91bmQ7Ci0KLQlpZiAocHJldl9zaG1lbV9zdGFydHVwX2hvb2spCi0JCXBy ZXZfc2htZW1fc3RhcnR1cF9ob29rKCk7Ci0KLQkvKiBDcmVhdGUgb3IgYXR0YWNoIHRvIHRo ZSBzaGFyZWQgbWVtb3J5IHN0YXRlICovCi0JTFdMb2NrQWNxdWlyZShBZGRpblNobWVtSW5p dExvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQlpbmpfaW9fZXJyb3Jfc3RhdGUgPSBTaG1lbUlu aXRTdHJ1Y3QoImluamVjdGlvbl9wb2ludHMiLAotCQkJCQkJCQkJCSBzaXplb2YoSW5qSW9F cnJvclN0YXRlKSwKLQkJCQkJCQkJCQkgJmZvdW5kKTsKLQotCWlmICghZm91bmQpCi0Jewot CQkvKiBGaXJzdCB0aW1lIHRocm91Z2gsIGluaXRpYWxpemUgKi8KLQkJaW5qX2lvX2Vycm9y X3N0YXRlLT5lbmFibGVkX3Nob3J0X3JlYWQgPSBmYWxzZTsKLQkJaW5qX2lvX2Vycm9yX3N0 YXRlLT5lbmFibGVkX3Jlb3BlbiA9IGZhbHNlOwotCQlpbmpfaW9fZXJyb3Jfc3RhdGUtPmVu YWJsZWRfY29tcGxldGlvbl93YWl0ID0gZmFsc2U7CisJLyogRmlyc3QgdGltZSB0aHJvdWdo LCBpbml0aWFsaXplICovCisJaW5qX2lvX2Vycm9yX3N0YXRlLT5lbmFibGVkX3Nob3J0X3Jl YWQgPSBmYWxzZTsKKwlpbmpfaW9fZXJyb3Jfc3RhdGUtPmVuYWJsZWRfcmVvcGVuID0gZmFs c2U7CisJaW5qX2lvX2Vycm9yX3N0YXRlLT5lbmFibGVkX2NvbXBsZXRpb25fd2FpdCA9IGZh bHNlOwogCi0JCUNvbmRpdGlvblZhcmlhYmxlSW5pdCgmaW5qX2lvX2Vycm9yX3N0YXRlLT5j dik7Ci0JCWlual9pb19lcnJvcl9zdGF0ZS0+Y29tcGxldGlvbl93YWl0X2V2ZW50ID0gV2Fp dEV2ZW50SW5qZWN0aW9uUG9pbnROZXcoImNvbXBsZXRpb25fd2FpdCIpOworCUNvbmRpdGlv blZhcmlhYmxlSW5pdCgmaW5qX2lvX2Vycm9yX3N0YXRlLT5jdik7CisJaW5qX2lvX2Vycm9y X3N0YXRlLT5jb21wbGV0aW9uX3dhaXRfZXZlbnQgPSBXYWl0RXZlbnRJbmplY3Rpb25Qb2lu dE5ldygiY29tcGxldGlvbl93YWl0Iik7CiAKICNpZmRlZiBVU0VfSU5KRUNUSU9OX1BPSU5U UwotCQlJbmplY3Rpb25Qb2ludEF0dGFjaCgiYWlvLXByb2Nlc3MtY29tcGxldGlvbi1iZWZv cmUtc2hhcmVkIiwKLQkJCQkJCQkgInRlc3RfYWlvIiwKLQkJCQkJCQkgImlual9pb19jb21w bGV0aW9uX2hvb2siLAotCQkJCQkJCSBOVUxMLAotCQkJCQkJCSAwKTsKLQkJSW5qZWN0aW9u UG9pbnRMb2FkKCJhaW8tcHJvY2Vzcy1jb21wbGV0aW9uLWJlZm9yZS1zaGFyZWQiKTsKLQot CQlJbmplY3Rpb25Qb2ludEF0dGFjaCgiYWlvLXdvcmtlci1hZnRlci1yZW9wZW4iLAotCQkJ CQkJCSAidGVzdF9haW8iLAotCQkJCQkJCSAiaW5qX2lvX3Jlb3BlbiIsCi0JCQkJCQkJIE5V TEwsCi0JCQkJCQkJIDApOwotCQlJbmplY3Rpb25Qb2ludExvYWQoImFpby13b3JrZXItYWZ0 ZXItcmVvcGVuIik7CisJSW5qZWN0aW9uUG9pbnRBdHRhY2goImFpby1wcm9jZXNzLWNvbXBs ZXRpb24tYmVmb3JlLXNoYXJlZCIsCisJCQkJCQkgInRlc3RfYWlvIiwKKwkJCQkJCSAiaW5q X2lvX2NvbXBsZXRpb25faG9vayIsCisJCQkJCQkgTlVMTCwKKwkJCQkJCSAwKTsKKwlJbmpl Y3Rpb25Qb2ludExvYWQoImFpby1wcm9jZXNzLWNvbXBsZXRpb24tYmVmb3JlLXNoYXJlZCIp OworCisJSW5qZWN0aW9uUG9pbnRBdHRhY2goImFpby13b3JrZXItYWZ0ZXItcmVvcGVuIiwK KwkJCQkJCSAidGVzdF9haW8iLAorCQkJCQkJICJpbmpfaW9fcmVvcGVuIiwKKwkJCQkJCSBO VUxMLAorCQkJCQkJIDApOworCUluamVjdGlvblBvaW50TG9hZCgiYWlvLXdvcmtlci1hZnRl ci1yZW9wZW4iKTsKIAogI2VuZGlmCi0JfQotCWVsc2UKLQl7Ci0JCS8qCi0JCSAqIFByZS1s b2FkIHRoZSBpbmplY3Rpb24gcG9pbnRzIG5vdywgc28gd2UgY2FuIGNhbGwgdGhlbSBpbiBh Ci0JCSAqIGNyaXRpY2FsIHNlY3Rpb24uCi0JCSAqLworfQorCitzdGF0aWMgdm9pZAordGVz dF9haW9fc2htZW1fYXR0YWNoKHZvaWQgKmFyZykKK3sKKwkvKgorCSAqIFByZS1sb2FkIHRo ZSBpbmplY3Rpb24gcG9pbnRzIG5vdywgc28gd2UgY2FuIGNhbGwgdGhlbSBpbiBhIGNyaXRp Y2FsCisJICogc2VjdGlvbi4KKwkgKi8KICNpZmRlZiBVU0VfSU5KRUNUSU9OX1BPSU5UUwot CQlJbmplY3Rpb25Qb2ludExvYWQoImFpby1wcm9jZXNzLWNvbXBsZXRpb24tYmVmb3JlLXNo YXJlZCIpOwotCQlJbmplY3Rpb25Qb2ludExvYWQoImFpby13b3JrZXItYWZ0ZXItcmVvcGVu Iik7Ci0JCWVsb2coTE9HLCAiaW5qZWN0aW9uIHBvaW50IGxvYWRlZCIpOworCUluamVjdGlv blBvaW50TG9hZCgiYWlvLXByb2Nlc3MtY29tcGxldGlvbi1iZWZvcmUtc2hhcmVkIik7CisJ SW5qZWN0aW9uUG9pbnRMb2FkKCJhaW8td29ya2VyLWFmdGVyLXJlb3BlbiIpOworCWVsb2co TE9HLCAiaW5qZWN0aW9uIHBvaW50IGxvYWRlZCIpOwogI2VuZGlmCi0JfQotCi0JTFdMb2Nr UmVsZWFzZShBZGRpblNobWVtSW5pdExvY2spOwogfQogCiB2b2lkCkBAIC0xNTQsMTAgKzE0 OSw3IEBAIF9QR19pbml0KHZvaWQpCiAJaWYgKCFwcm9jZXNzX3NoYXJlZF9wcmVsb2FkX2xp YnJhcmllc19pbl9wcm9ncmVzcykKIAkJcmV0dXJuOwogCi0JcHJldl9zaG1lbV9yZXF1ZXN0 X2hvb2sgPSBzaG1lbV9yZXF1ZXN0X2hvb2s7Ci0Jc2htZW1fcmVxdWVzdF9ob29rID0gdGVz dF9haW9fc2htZW1fcmVxdWVzdDsKLQlwcmV2X3NobWVtX3N0YXJ0dXBfaG9vayA9IHNobWVt X3N0YXJ0dXBfaG9vazsKLQlzaG1lbV9zdGFydHVwX2hvb2sgPSB0ZXN0X2Fpb19zaG1lbV9z dGFydHVwOworCVJlZ2lzdGVyU2htZW1DYWxsYmFja3MoJmlual9pb19zaG1lbV9jYWxsYmFj a3MpOwogfQogCiAKLS0gCjIuNDcuMwoK --------------cltwtZYaOf76t571xokamZd0 Content-Type: text/x-patch; charset=UTF-8; name="v9-0012-Use-the-new-mechanism-in-a-few-core-subsystems.patch" Content-Disposition: attachment; filename*0="v9-0012-Use-the-new-mechanism-in-a-few-core-subsystems.patch" Content-Transfer-Encoding: base64 RnJvbSBlOGQzNTA5YWQyYzRkZmY1MTU5YmExZGMyYjY0YTIxODIwYWVjN2U3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMSBBcHIgMjAyNiAyMDowNzozMCArMDMwMApT dWJqZWN0OiBbUEFUQ0ggdjkgMTIvMTZdIFVzZSB0aGUgbmV3IG1lY2hhbmlzbSBpbiBhIGZl dyBjb3JlIHN1YnN5c3RlbXMKCkkgY2hvc2UgdGhlc2Ugc3Vic3lzdGVtcyBzcGVjaWZpY2Fs bHkgYmVjYXVzZSB0aGV5IGhhdmUgc29tZQpjb21wbGljYXRpbmcgcHJvcGVydGllcywgbWFr aW5nIHRoZW0gc2xpZ2h0bHkgaGFyZGVyIHRvIGNvbnZlcnQgdGhhbgptb3N0OgoKLSBUaGUg aW5pdGlhbGl6YXRpb24gY2FsbGJhY2tzIG9mIHNvbWUgb2YgdGhlc2Ugc3Vic3lzdGVtcyBo YXZlCiAgZGVwZW5kZW5jaWVzLCBpLmUuIHRoZXkgbmVlZCB0byBiZSBpbml0aWFsaXplZCBp biB0aGUgcmlnaHQgb3JkZXIuCgotIFRoZSBQcm9nR2xvYmFsIHBvaW50ZXIgc3RpbGwgbmVl ZHMgdG8gYmUgaW5oZXJpdGVkIGJ5IHRoZQogIEJhY2tlbmRQYXJhbWV0ZXJzIG1lY2hhbmlz bSBvbiBFWEVDX0JBQ0tFTkQgYnVpbGRzLCBiZWNhdXNlCiAgUHJvY0dsb2JhbCBpcyByZXF1 aXJlZCBieSBJbml0UHJvY2VzcygpIHRvIGdldCBhIFBHUFJPQyBlbnRyeSwgYW5kCiAgdGhl IFBHUFJPQyBlbnRyeSBpcyByZXF1aXJlZCB0byB1c2UgTFdMb2NrcywgYW5kIHVzdWFsbHkg YXR0YWNoaW5nCiAgdG8gc2hhcmVkIG1lbW9yeSBhcmVhcyByZXF1aXJlcyB0aGUgdXNlIG9m IExXTG9ja3MuCgotIFNpbWlsYXJseSwgUHJvY1NpZ25hbCBwb2ludGVyIHN0aWxsIG5lZWRz IHRvIGJlIGhhbmRsZWQgYnkKICBCYWNrZW5kUGFyYW1ldGVycywgYmVjYXVzZSBxdWVyeSBj YW5jZWxsYXRpb24gY29ubmVjdGlvbnMgYWNjZXNzIGl0CiAgd2l0aG91dCBjYWxsaW5nIElu aXRQcm9jZXNzCgpJJ20gYmVsaWV2ZSBjb252ZXJ0aW5nIGFsbCB0aGUgcmVzdCBvZiB0aGUg c3Vic3lzdGVtcyBhZnRlciB0aGlzIHdpbGwKYmUgcHJldHR5IG1lY2hhbmljLgoKUmV2aWV3 ZWQtYnk6IEFzaHV0b3NoIEJhcGF0IDxhc2h1dG9zaC5iYXBhdC5vc3NAZ21haWwuY29tPgpS ZXZpZXdlZC1ieTogWnNvbHQgUGFycmFnaSA8enNvbHQucGFycmFnaUBwZXJjb25hLmNvbT4K RGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9DQUV4 SFc1dk0xYm5lTFlmZzB3R2VBYT01MlVpSjN6NHZLZDNBSjcyWDhGdzZrM0tLcmdAbWFpbC5n bWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jICB8 ICAgMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdmFyc3VwLmMgICAgfCAgMzYg KystLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbS5jICAgICAgICAgIHwgIDY1ICsr KysrLS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtX3JlZ2lzdHJ5LmMgfCAgMzkg KysrLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMgICAgICAgICB8ICAyOCAt LS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wbXNpZ25hbC5jICAgICB8ICA1NyArKysr LS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMgICAgfCAxMTkgKysr KysrKystLS0tLS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jICAg fCAgNjYgKysrKy0tLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaW52YWxhZHQuYyAg ICB8ICA0MCArKystLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMgICAgICAg IHwgMTgzICsrKysrKysrKysrKystLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy90 cmFuc2FtLmggICAgICAgICAgIHwgICAyIC0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvZHNtLmgg ICAgICAgICAgICAgIHwgICAzIC0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvZHNtX3JlZ2lzdHJ5 LmggICAgIHwgICAyIC0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcG1zaWduYWwuaCAgICAgICAg IHwgICAyIC0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oICAgICAgICAgICAgIHwgICAy IC0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmggICAgICAgIHwgICAyIC0KIHNy Yy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oICAgICAgIHwgICAzIC0KIHNyYy9pbmNs dWRlL3N0b3JhZ2Uvc2ludmFsYWR0LmggICAgICAgIHwgICAyIC0KIHNyYy9pbmNsdWRlL3N0 b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oICAgIHwgIDE4ICsrKwogMTkgZmlsZXMgY2hhbmdlZCwg MzMzIGluc2VydGlvbnMoKyksIDMzOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0vdHdvcGhhc2UuYwppbmRleCBkNDY4Yzk3NzRiMy4uYWIxY2JkNjdiYWMgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwpAQCAtMjgyLDcgKzI4Miw3 IEBAIFR3b1BoYXNlU2htZW1Jbml0KHZvaWQpCiAJCQlneGFjdHNbaV0ubmV4dCA9IFR3b1Bo YXNlU3RhdGUtPmZyZWVHWGFjdHM7CiAJCQlUd29QaGFzZVN0YXRlLT5mcmVlR1hhY3RzID0g Jmd4YWN0c1tpXTsKIAotCQkJLyogYXNzb2NpYXRlIGl0IHdpdGggYSBQR1BST0MgYXNzaWdu ZWQgYnkgSW5pdFByb2NHbG9iYWwgKi8KKwkJCS8qIGFzc29jaWF0ZSBpdCB3aXRoIGEgUEdQ Uk9DIGFzc2lnbmVkIGJ5IFByb2NHbG9iYWxTaG1lbUluaXQgKi8KIAkJCWd4YWN0c1tpXS5w Z3Byb2NubyA9IEdldE51bWJlckZyb21QR1Byb2MoJlByZXBhcmVkWGFjdFByb2NzW2ldKTsK IAkJfQogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3ZhcnN1 cC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdmFyc3VwLmMKaW5kZXggMTQ0MWEw NTE3NzMuLjJlYThkMDg4YzBlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS92YXJzdXAuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS92YXJzdXAu YwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5o IgogI2luY2x1ZGUgInN0b3JhZ2UvcG1zaWduYWwuaCIKICNpbmNsdWRlICJzdG9yYWdlL3By b2MuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNsdWRlICJ1dGls cy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogCkBAIC0zMCwz NSArMzEsMjggQEAKIC8qIE51bWJlciBvZiBPSURzIHRvIHByZWZldGNoIChwcmVhbGxvY2F0 ZSkgcGVyIFhMT0cgd3JpdGUgKi8KICNkZWZpbmUgVkFSX09JRF9QUkVGRVRDSAkJODE5Mgog CitzdGF0aWMgdm9pZCBWYXJzdXBTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsKKwogLyogcG9p bnRlciB0byB2YXJpYWJsZXMgc3RydWN0IGluIHNoYXJlZCBtZW1vcnkgKi8KIFRyYW5zYW1W YXJpYWJsZXNEYXRhICpUcmFuc2FtVmFyaWFibGVzID0gTlVMTDsKIAorY29uc3QgU2htZW1D YWxsYmFja3MgVmFyc3VwU2htZW1DYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBWYXJz dXBTaG1lbVJlcXVlc3QsCit9OwogCiAvKgotICogSW5pdGlhbGl6YXRpb24gb2Ygc2hhcmVk IG1lbW9yeSBmb3IgVHJhbnNhbVZhcmlhYmxlcy4KKyAqIFJlcXVlc3Qgc2hhcmVkIG1lbW9y eSBmb3IgVHJhbnNhbVZhcmlhYmxlcy4KICAqLwotU2l6ZQotVmFyc3VwU2htZW1TaXplKHZv aWQpCi17Ci0JcmV0dXJuIHNpemVvZihUcmFuc2FtVmFyaWFibGVzRGF0YSk7Ci19Ci0KLXZv aWQKLVZhcnN1cFNobWVtSW5pdCh2b2lkKQorc3RhdGljIHZvaWQKK1ZhcnN1cFNobWVtUmVx dWVzdCh2b2lkICphcmcpCiB7Ci0JYm9vbAkJZm91bmQ7CisJc3RhdGljIFNobWVtU3RydWN0 RGVzYyBUcmFuc2FtVmFyaWFibGVzU2htZW1EZXNjOwogCi0JLyogSW5pdGlhbGl6ZSBvdXIg c2hhcmVkIHN0YXRlIHN0cnVjdCAqLwotCVRyYW5zYW1WYXJpYWJsZXMgPSBTaG1lbUluaXRT dHJ1Y3QoIlRyYW5zYW1WYXJpYWJsZXMiLAotCQkJCQkJCQkJICAgc2l6ZW9mKFRyYW5zYW1W YXJpYWJsZXNEYXRhKSwKLQkJCQkJCQkJCSAgICZmb3VuZCk7Ci0JaWYgKCFJc1VuZGVyUG9z dG1hc3RlcikKLQl7Ci0JCUFzc2VydCghZm91bmQpOwotCQltZW1zZXQoVHJhbnNhbVZhcmlh YmxlcywgMCwgc2l6ZW9mKFRyYW5zYW1WYXJpYWJsZXNEYXRhKSk7Ci0JfQotCWVsc2UKLQkJ QXNzZXJ0KGZvdW5kKTsKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJlRyYW5zYW1WYXJpYWJsZXNT aG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0gIlRyYW5zYW1WYXJpYWJsZXMiLAorCQkJCQkg ICAuc2l6ZSA9IHNpemVvZihUcmFuc2FtVmFyaWFibGVzRGF0YSksCisJCQkJCSAgIC5wdHIg PSAodm9pZCAqKikgJlRyYW5zYW1WYXJpYWJsZXMsCisJCSk7CiB9CiAKIC8qCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc20uYyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL2RzbS5jCmluZGV4IDZhNWIxNjM5MmY3Li45MjM1OTNkMTQwZCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvZHNtLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL2x3 bG9jay5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcGdfc2htZW0uaCIKICNpbmNsdWRlICJzdG9y YWdlL3NobWVtLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVk ZSAidXRpbHMvZnJlZXBhZ2UuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2lu Y2x1ZGUgInV0aWxzL3Jlc293bmVyLmgiCkBAIC0xMTAsNiArMTExLDE0IEBAIHN0YXRpYyBi b29sIGRzbV9pbml0X2RvbmUgPSBmYWxzZTsKIC8qIFByZWFsbG9jYXRlZCBEU00gc3BhY2Ug aW4gdGhlIG1haW4gc2hhcmVkIG1lbW9yeSByZWdpb24uICovCiBzdGF0aWMgdm9pZCAqZHNt X21haW5fc3BhY2VfYmVnaW4gPSBOVUxMOwogCitzdGF0aWMgdm9pZCBkc21fbWFpbl9zcGFj ZV9yZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBkc21fbWFpbl9zcGFjZV9pbml0 KHZvaWQgKmFyZyk7CisKK2NvbnN0IFNobWVtQ2FsbGJhY2tzIGRzbV9zaG1lbV9jYWxsYmFj a3MgPSB7CisJLnJlcXVlc3RfZm4gPSBkc21fbWFpbl9zcGFjZV9yZXF1ZXN0LAorCS5pbml0 X2ZuID0gZHNtX21haW5fc3BhY2VfaW5pdCwKK307CisKIC8qCiAgKiBMaXN0IG9mIGR5bmFt aWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50cyB1c2VkIGJ5IHRoaXMgYmFja2VuZC4KICAqCkBA IC00NjMsNDMgKzQ3Miw0NSBAQCBkc21fc2V0X2NvbnRyb2xfaGFuZGxlKGRzbV9oYW5kbGUg aCkKIH0KICNlbmRpZgogCitzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIGRzbV9tYWluX3NwYWNl X3NobWVtX2Rlc2M7CisKIC8qCi0gKiBSZXNlcnZlIHNvbWUgc3BhY2UgaW4gdGhlIG1haW4g c2hhcmVkIG1lbW9yeSBzZWdtZW50IGZvciBEU00gc2VnbWVudHMuCisgKiBSZXNlcnZlIHNw YWNlIGluIHRoZSBtYWluIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBmb3IgRFNNIHNlZ21lbnRz LgogICovCi1zaXplX3QKLWRzbV9lc3RpbWF0ZV9zaXplKHZvaWQpCitzdGF0aWMgdm9pZAor ZHNtX21haW5fc3BhY2VfcmVxdWVzdCh2b2lkICphcmcpCiB7Ci0JcmV0dXJuIDEwMjQgKiAx MDI0ICogKHNpemVfdCkgbWluX2R5bmFtaWNfc2hhcmVkX21lbW9yeTsKKwlzaXplX3QJCXNp emUgPSAxMDI0ICogMTAyNCAqIChzaXplX3QpIG1pbl9keW5hbWljX3NoYXJlZF9tZW1vcnk7 CisKKwlpZiAoc2l6ZSA9PSAwKQorCQlyZXR1cm47CisKKwlTaG1lbVJlcXVlc3RTdHJ1Y3Qo JmRzbV9tYWluX3NwYWNlX3NobWVtX2Rlc2MsCisJCQkJCSAgIC5uYW1lID0gIlByZWFsbG9j YXRlZCBEU00iLAorCQkJCQkgICAuc2l6ZSA9IHNpemUsCisJCQkJCSAgIC5wdHIgPSAmZHNt X21haW5fc3BhY2VfYmVnaW4sCisJCSk7CiB9CiAKLS8qCi0gKiBJbml0aWFsaXplIHNwYWNl IGluIHRoZSBtYWluIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBmb3IgRFNNIHNlZ21lbnRzLgot ICovCi12b2lkCi1kc21fc2htZW1faW5pdCh2b2lkKQorc3RhdGljIHZvaWQKK2RzbV9tYWlu X3NwYWNlX2luaXQodm9pZCAqYXJnKQogewotCXNpemVfdAkJc2l6ZSA9IGRzbV9lc3RpbWF0 ZV9zaXplKCk7Ci0JYm9vbAkJZm91bmQ7CisJc2l6ZV90CQlzaXplID0gZHNtX21haW5fc3Bh Y2Vfc2htZW1fZGVzYy5zaXplOworCUZyZWVQYWdlTWFuYWdlciAqZnBtID0gKEZyZWVQYWdl TWFuYWdlciAqKSBkc21fbWFpbl9zcGFjZV9iZWdpbjsKKwlzaXplX3QJCWZpcnN0X3BhZ2Ug PSAwOworCXNpemVfdAkJcGFnZXM7CiAKIAlpZiAoc2l6ZSA9PSAwKQogCQlyZXR1cm47CiAK LQlkc21fbWFpbl9zcGFjZV9iZWdpbiA9IFNobWVtSW5pdFN0cnVjdCgiUHJlYWxsb2NhdGVk IERTTSIsIHNpemUsICZmb3VuZCk7Ci0JaWYgKCFmb3VuZCkKLQl7Ci0JCUZyZWVQYWdlTWFu YWdlciAqZnBtID0gKEZyZWVQYWdlTWFuYWdlciAqKSBkc21fbWFpbl9zcGFjZV9iZWdpbjsK LQkJc2l6ZV90CQlmaXJzdF9wYWdlID0gMDsKLQkJc2l6ZV90CQlwYWdlczsKLQotCQkvKiBS ZXNlcnZlIHNwYWNlIGZvciB0aGUgRnJlZVBhZ2VNYW5hZ2VyLiAqLwotCQl3aGlsZSAoZmly c3RfcGFnZSAqIEZQTV9QQUdFX1NJWkUgPCBzaXplb2YoRnJlZVBhZ2VNYW5hZ2VyKSkKLQkJ CSsrZmlyc3RfcGFnZTsKLQotCQkvKiBJbml0aWFsaXplIGl0IGFuZCBnaXZlIGl0IGFsbCB0 aGUgcmVzdCBvZiB0aGUgc3BhY2UuICovCi0JCUZyZWVQYWdlTWFuYWdlckluaXRpYWxpemUo ZnBtLCBkc21fbWFpbl9zcGFjZV9iZWdpbik7Ci0JCXBhZ2VzID0gKHNpemUgLyBGUE1fUEFH RV9TSVpFKSAtIGZpcnN0X3BhZ2U7Ci0JCUZyZWVQYWdlTWFuYWdlclB1dChmcG0sIGZpcnN0 X3BhZ2UsIHBhZ2VzKTsKLQl9CisJLyogUmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIEZyZWVQYWdl TWFuYWdlci4gKi8KKwl3aGlsZSAoZmlyc3RfcGFnZSAqIEZQTV9QQUdFX1NJWkUgPCBzaXpl b2YoRnJlZVBhZ2VNYW5hZ2VyKSkKKwkJKytmaXJzdF9wYWdlOworCisJLyogSW5pdGlhbGl6 ZSBpdCBhbmQgZ2l2ZSBpdCBhbGwgdGhlIHJlc3Qgb2YgdGhlIHNwYWNlLiAqLworCUZyZWVQ YWdlTWFuYWdlckluaXRpYWxpemUoZnBtLCBkc21fbWFpbl9zcGFjZV9iZWdpbik7CisJcGFn ZXMgPSAoc2l6ZSAvIEZQTV9QQUdFX1NJWkUpIC0gZmlyc3RfcGFnZTsKKwlGcmVlUGFnZU1h bmFnZXJQdXQoZnBtLCBmaXJzdF9wYWdlLCBwYWdlcyk7CiB9CiAKIC8qCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc21fcmVnaXN0cnkuYyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL2RzbV9yZWdpc3RyeS5jCmluZGV4IDliZmNkNjE2ODI3Li4zZTljMGJh Mjk0NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtX3JlZ2lzdHJ5 LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtX3JlZ2lzdHJ5LmMKQEAgLTQ1 LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL2RzbV9yZWdpc3RyeS5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgorI2lu Y2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5z LmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy90dXBs ZXN0b3JlLmgiCkBAIC01Nyw2ICs1OCwxNCBAQCB0eXBlZGVmIHN0cnVjdCBEU01SZWdpc3Ry eUN0eFN0cnVjdAogCiBzdGF0aWMgRFNNUmVnaXN0cnlDdHhTdHJ1Y3QgKkRTTVJlZ2lzdHJ5 Q3R4OwogCitzdGF0aWMgdm9pZCBEU01SZWdpc3RyeVNobWVtUmVxdWVzdCh2b2lkICphcmcp Oworc3RhdGljIHZvaWQgRFNNUmVnaXN0cnlTaG1lbUluaXQodm9pZCAqYXJnKTsKKworY29u c3QgU2htZW1DYWxsYmFja3MgRFNNUmVnaXN0cnlTaG1lbUNhbGxiYWNrcyA9IHsKKwkucmVx dWVzdF9mbiA9IERTTVJlZ2lzdHJ5U2htZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gRFNNUmVn aXN0cnlTaG1lbUluaXQsCit9OworCiB0eXBlZGVmIHN0cnVjdCBOYW1lZERTTVN0YXRlCiB7 CiAJZHNtX2hhbmRsZQloYW5kbGU7CkBAIC0xMTQsMjcgKzEyMywyMyBAQCBzdGF0aWMgY29u c3QgZHNoYXNoX3BhcmFtZXRlcnMgZHNoX3BhcmFtcyA9IHsKIHN0YXRpYyBkc2FfYXJlYSAq ZHNtX3JlZ2lzdHJ5X2RzYTsKIHN0YXRpYyBkc2hhc2hfdGFibGUgKmRzbV9yZWdpc3RyeV90 YWJsZTsKIAotU2l6ZQotRFNNUmVnaXN0cnlTaG1lbVNpemUodm9pZCkKK3N0YXRpYyB2b2lk CitEU01SZWdpc3RyeVNobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7Ci0JcmV0dXJuIE1BWEFM SUdOKHNpemVvZihEU01SZWdpc3RyeUN0eFN0cnVjdCkpOworCXN0YXRpYyBTaG1lbVN0cnVj dERlc2MgRFNNUmVnaXN0cnlDdHhTaG1lbURlc2M7CisKKwlTaG1lbVJlcXVlc3RTdHJ1Y3Qo JkRTTVJlZ2lzdHJ5Q3R4U2htZW1EZXNjLAorCQkJCQkgICAubmFtZSA9ICJEU00gUmVnaXN0 cnkgRGF0YSIsCisJCQkJCSAgIC5zaXplID0gc2l6ZW9mKERTTVJlZ2lzdHJ5Q3R4U3RydWN0 KSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmRFNNUmVnaXN0cnlDdHgsCisJCSk7CiB9 CiAKLXZvaWQKLURTTVJlZ2lzdHJ5U2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAorRFNN UmVnaXN0cnlTaG1lbUluaXQodm9pZCAqYXJnKQogewotCWJvb2wJCWZvdW5kOwotCi0JRFNN UmVnaXN0cnlDdHggPSAoRFNNUmVnaXN0cnlDdHhTdHJ1Y3QgKikKLQkJU2htZW1Jbml0U3Ry dWN0KCJEU00gUmVnaXN0cnkgRGF0YSIsCi0JCQkJCQlEU01SZWdpc3RyeVNobWVtU2l6ZSgp LAotCQkJCQkJJmZvdW5kKTsKLQotCWlmICghZm91bmQpCi0JewotCQlEU01SZWdpc3RyeUN0 eC0+ZHNhaCA9IERTQV9IQU5ETEVfSU5WQUxJRDsKLQkJRFNNUmVnaXN0cnlDdHgtPmRzaGgg PSBEU0hBU0hfSEFORExFX0lOVkFMSUQ7Ci0JfQorCURTTVJlZ2lzdHJ5Q3R4LT5kc2FoID0g RFNBX0hBTkRMRV9JTlZBTElEOworCURTTVJlZ2lzdHJ5Q3R4LT5kc2hoID0gRFNIQVNIX0hB TkRMRV9JTlZBTElEOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvaXBjaS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCmluZGV4IGI5 MDcxN2MxZjU4Li4wZGMzYTIxNDZlYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvaXBjaS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwpAQCAt MjAsNyArMjAsNiBAQAogI2luY2x1ZGUgImFjY2Vzcy9uYnRyZWUuaCIKICNpbmNsdWRlICJh Y2Nlc3Mvc3VidHJhbnMuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc3luY3NjYW4uaCIKLSNpbmNs dWRlICJhY2Nlc3MvdHJhbnNhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy90d29waGFzZS5oIgog I2luY2x1ZGUgImFjY2Vzcy94bG9ncHJlZmV0Y2hlci5oIgogI2luY2x1ZGUgImFjY2Vzcy94 bG9ncmVjb3ZlcnkuaCIKQEAgLTQxLDE4ICs0MCwxMyBAQAogI2luY2x1ZGUgInN0b3JhZ2Uv YWlvX3N1YnN5cy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9kc20uaCIKLSNpbmNsdWRlICJzdG9yYWdlL2RzbV9yZWdpc3RyeS5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wZ19zaG1lbS5oIgog I2luY2x1ZGUgInN0b3JhZ2UvcG1zaWduYWwuaCIKICNpbmNsdWRlICJzdG9yYWdlL3ByZWRp Y2F0ZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgotI2luY2x1ZGUgInN0b3JhZ2Uv cHJvY2FycmF5LmgiCi0jaW5jbHVkZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgiCi0jaW5jbHVk ZSAic3RvcmFnZS9zaW52YWxhZHQuaCIKICNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMu aCIKICNpbmNsdWRlICJ1dGlscy9ndWMuaCIKLSNpbmNsdWRlICJ1dGlscy93YWl0X2V2ZW50 LmgiCiAKIC8qIEdVQ3MgKi8KIGludAkJCXNoYXJlZF9tZW1vcnlfdHlwZSA9IERFRkFVTFRf U0hBUkVEX01FTU9SWV9UWVBFOwpAQCAtMTAyLDE0ICs5NiwxMCBAQCBDYWxjdWxhdGVTaG1l bVNpemUodm9pZCkKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgU2htZW1HZXRSZXF1ZXN0ZWRT aXplKCkpOwogCiAJLyogbGVnYWN5IHN1YnN5c3RlbXMgKi8KLQlzaXplID0gYWRkX3NpemUo c2l6ZSwgZHNtX2VzdGltYXRlX3NpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIERT TVJlZ2lzdHJ5U2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBCdWZmZXJN YW5hZ2VyU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBMb2NrTWFuYWdl clNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgUHJlZGljYXRlTG9ja1No bWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgUHJvY0dsb2JhbFNobWVtU2l6 ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgWExvZ1ByZWZldGNoU2htZW1TaXplKCkp OwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBWYXJzdXBTaG1lbVNpemUoKSk7CiAJc2l6ZSA9 IGFkZF9zaXplKHNpemUsIFhMT0dTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNp emUsIFhMb2dSZWNvdmVyeVNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwg Q0xPR1NobWVtU2l6ZSgpKTsKQEAgLTExOSwxMSArMTA5LDcgQEAgQ2FsY3VsYXRlU2htZW1T aXplKHZvaWQpCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIEJhY2tncm91bmRXb3JrZXJTaG1l bVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIE11bHRpWGFjdFNobWVtU2l6ZSgp KTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgTFdMb2NrU2htZW1TaXplKCkpOwotCXNpemUg PSBhZGRfc2l6ZShzaXplLCBQcm9jQXJyYXlTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9z aXplKHNpemUsIEJhY2tlbmRTdGF0dXNTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXpl KHNpemUsIFNoYXJlZEludmFsU2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBQTVNpZ25hbFNobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgUHJvY1Np Z25hbFNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgQ2hlY2twb2ludGVy U2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBBdXRvVmFjdXVtU2htZW1T aXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBSZXBsaWNhdGlvblNsb3RzU2htZW1T aXplKCkpOwpAQCAtMjg1LDEzICsyNzEsOSBAQCBSZWdpc3RlckJ1aWx0aW5TaG1lbUNhbGxi YWNrcyh2b2lkKQogc3RhdGljIHZvaWQKIENyZWF0ZU9yQXR0YWNoU2htZW1TdHJ1Y3RzKHZv aWQpCiB7Ci0JZHNtX3NobWVtX2luaXQoKTsKLQlEU01SZWdpc3RyeVNobWVtSW5pdCgpOwot CiAJLyoKIAkgKiBTZXQgdXAgeGxvZywgY2xvZywgYW5kIGJ1ZmZlcnMKIAkgKi8KLQlWYXJz dXBTaG1lbUluaXQoKTsKIAlYTE9HU2htZW1Jbml0KCk7CiAJWExvZ1ByZWZldGNoU2htZW1J bml0KCk7CiAJWExvZ1JlY292ZXJ5U2htZW1Jbml0KCk7CkBAIC0zMTQsMjMgKzI5NiwxMyBA QCBDcmVhdGVPckF0dGFjaFNobWVtU3RydWN0cyh2b2lkKQogCS8qCiAJICogU2V0IHVwIHBy b2Nlc3MgdGFibGUKIAkgKi8KLQlpZiAoIUlzVW5kZXJQb3N0bWFzdGVyKQotCQlJbml0UHJv Y0dsb2JhbCgpOwotCVByb2NBcnJheVNobWVtSW5pdCgpOwogCUJhY2tlbmRTdGF0dXNTaG1l bUluaXQoKTsKIAlUd29QaGFzZVNobWVtSW5pdCgpOwogCUJhY2tncm91bmRXb3JrZXJTaG1l bUluaXQoKTsKIAotCS8qCi0JICogU2V0IHVwIHNoYXJlZC1pbnZhbCBtZXNzYWdpbmcKLQkg Ki8KLQlTaGFyZWRJbnZhbFNobWVtSW5pdCgpOwotCiAJLyoKIAkgKiBTZXQgdXAgaW50ZXJw cm9jZXNzIHNpZ25hbGluZyBtZWNoYW5pc21zCiAJICovCi0JUE1TaWduYWxTaG1lbUluaXQo KTsKLQlQcm9jU2lnbmFsU2htZW1Jbml0KCk7CiAJQ2hlY2twb2ludGVyU2htZW1Jbml0KCk7 CiAJQXV0b1ZhY3V1bVNobWVtSW5pdCgpOwogCVJlcGxpY2F0aW9uU2xvdHNTaG1lbUluaXQo KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Btc2lnbmFsLmMgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wbXNpZ25hbC5jCmluZGV4IDQ2MTg4MjBiMzM3Li4w MDU4ODY2NDg4NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcG1zaWdu YWwuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wbXNpZ25hbC5jCkBAIC0yNyw2 ICsyNyw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdl L3Btc2lnbmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgorI2luY2x1ZGUgInN0 b3JhZ2Uvc3Vic3lzdGVtcy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAKIApA QCAtODMsNiArODQsMTQgQEAgc3RydWN0IFBNU2lnbmFsRGF0YQogLyogUE1TaWduYWxTdGF0 ZSBwb2ludGVyIGlzIHZhbGlkIGluIGJvdGggcG9zdG1hc3RlciBhbmQgY2hpbGQgcHJvY2Vz c2VzICovCiBOT05fRVhFQ19TVEFUSUMgdm9sYXRpbGUgUE1TaWduYWxEYXRhICpQTVNpZ25h bFN0YXRlID0gTlVMTDsKIAorc3RhdGljIHZvaWQgUE1TaWduYWxTaG1lbVJlcXVlc3Qodm9p ZCAqKTsKK3N0YXRpYyB2b2lkIFBNU2lnbmFsU2htZW1Jbml0KHZvaWQgKik7CisKK2NvbnN0 IFNobWVtQ2FsbGJhY2tzIFBNU2lnbmFsU2htZW1DYWxsYmFja3MgPSB7CisJLnJlcXVlc3Rf Zm4gPSBQTVNpZ25hbFNobWVtUmVxdWVzdCwKKwkuaW5pdF9mbiA9IFBNU2lnbmFsU2htZW1J bml0LAorfTsKKwogLyoKICAqIExvY2FsIGNvcHkgb2YgUE1TaWduYWxTdGF0ZS0+bnVtX2No aWxkX2ZsYWdzLCBvbmx5IHZhbGlkIGluIHRoZQogICogcG9zdG1hc3Rlci4gIFBvc3RtYXN0 ZXIga2VlcHMgYSBsb2NhbCBjb3B5IHNvIHRoYXQgaXQgZG9lc24ndCBuZWVkIHRvCkBAIC0x MjMsMzkgKzEzMiwzMSBAQCBwb3N0bWFzdGVyX2RlYXRoX2hhbmRsZXIoU0lHTkFMX0FSR1Mp CiBzdGF0aWMgdm9pZCBNYXJrUG9zdG1hc3RlckNoaWxkSW5hY3RpdmUoaW50IGNvZGUsIERh dHVtIGFyZyk7CiAKIC8qCi0gKiBQTVNpZ25hbFNobWVtU2l6ZQotICoJCUNvbXB1dGUgc3Bh Y2UgbmVlZGVkIGZvciBwbXNpZ25hbC5jJ3Mgc2hhcmVkIG1lbW9yeQorICogUE1TaWduYWxT aG1lbVJlcXVlc3QgLSBSZWdpc3RlciBwbXNpZ25hbC5jJ3Mgc2hhcmVkIG1lbW9yeSBuZWVk cwogICovCi1TaXplCi1QTVNpZ25hbFNobWVtU2l6ZSh2b2lkKQorc3RhdGljIHZvaWQKK1BN U2lnbmFsU2htZW1SZXF1ZXN0KHZvaWQgKmFyZykKIHsKLQlTaXplCQlzaXplOwotCi0Jc2l6 ZSA9IG9mZnNldG9mKFBNU2lnbmFsRGF0YSwgUE1DaGlsZEZsYWdzKTsKLQlzaXplID0gYWRk X3NpemUoc2l6ZSwgbXVsX3NpemUoTWF4TGl2ZVBvc3RtYXN0ZXJDaGlsZHJlbigpLAotCQkJ CQkJCQkgICBzaXplb2Yoc2lnX2F0b21pY190KSkpOwotCi0JcmV0dXJuIHNpemU7CisJc3Rh dGljIFNobWVtU3RydWN0RGVzYyBQTVNpZ25hbFNobWVtRGVzYzsKKwlzaXplX3QJCXNpemU7 CisKKwludW1fY2hpbGRfZmxhZ3MgPSBNYXhMaXZlUG9zdG1hc3RlckNoaWxkcmVuKCk7CisK KwlzaXplID0gYWRkX3NpemUob2Zmc2V0b2YoUE1TaWduYWxEYXRhLCBQTUNoaWxkRmxhZ3Mp LAorCQkJCQltdWxfc2l6ZShudW1fY2hpbGRfZmxhZ3MsIHNpemVvZihzaWdfYXRvbWljX3Qp KSk7CisJU2htZW1SZXF1ZXN0U3RydWN0KCZQTVNpZ25hbFNobWVtRGVzYywKKwkJCQkJICAg Lm5hbWUgPSAiUE1TaWduYWxTdGF0ZSIsCisJCQkJCSAgIC5zaXplID0gc2l6ZSwKKwkJCQkJ ICAgLnB0ciA9ICh2b2lkICoqKSAmUE1TaWduYWxTdGF0ZSwKKwkJKTsKIH0KIAotLyoKLSAq IFBNU2lnbmFsU2htZW1Jbml0IC0gaW5pdGlhbGl6ZSBkdXJpbmcgc2hhcmVkLW1lbW9yeSBj cmVhdGlvbgotICovCi12b2lkCi1QTVNpZ25hbFNobWVtSW5pdCh2b2lkKQorc3RhdGljIHZv aWQKK1BNU2lnbmFsU2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQlib29sCQlmb3VuZDsKLQot CVBNU2lnbmFsU3RhdGUgPSAoUE1TaWduYWxEYXRhICopCi0JCVNobWVtSW5pdFN0cnVjdCgi UE1TaWduYWxTdGF0ZSIsIFBNU2lnbmFsU2htZW1TaXplKCksICZmb3VuZCk7Ci0KLQlpZiAo IWZvdW5kKQotCXsKLQkJLyogaW5pdGlhbGl6ZSBhbGwgZmxhZ3MgdG8gemVyb2VzICovCi0J CU1lbVNldCh1bnZvbGF0aXplKFBNU2lnbmFsRGF0YSAqLCBQTVNpZ25hbFN0YXRlKSwgMCwg UE1TaWduYWxTaG1lbVNpemUoKSk7Ci0JCW51bV9jaGlsZF9mbGFncyA9IE1heExpdmVQb3N0 bWFzdGVyQ2hpbGRyZW4oKTsKLQkJUE1TaWduYWxTdGF0ZS0+bnVtX2NoaWxkX2ZsYWdzID0g bnVtX2NoaWxkX2ZsYWdzOwotCX0KKwlBc3NlcnQoUE1TaWduYWxTdGF0ZSk7CisJQXNzZXJ0 KG51bV9jaGlsZF9mbGFncyA+IDApOworCVBNU2lnbmFsU3RhdGUtPm51bV9jaGlsZF9mbGFn cyA9IG51bV9jaGlsZF9mbGFnczsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJv Y2FycmF5LmMKaW5kZXggY2MyMDdjYjU2ZTMuLmM4ZTA5ZjRmMGI2IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYworKysgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2lwYy9wcm9jYXJyYXkuYwpAQCAtNjEsNiArNjEsNyBAQAogI2luY2x1ZGUgInN0 b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1z LmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMu aCIKICNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKQEAgLTEwMyw2ICsxMDQs MjAgQEAgdHlwZWRlZiBzdHJ1Y3QgUHJvY0FycmF5U3RydWN0CiAJaW50CQkJcGdwcm9jbm9z W0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07CiB9IFByb2NBcnJheVN0cnVjdDsKIAorc3RhdGlj IHZvaWQgUHJvY0FycmF5U2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBQ cm9jQXJyYXlTaG1lbUluaXQodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIFByb2NBcnJheVNo bWVtQXR0YWNoKHZvaWQgKmFyZyk7CisKK3N0YXRpYyBQcm9jQXJyYXlTdHJ1Y3QgKnByb2NB cnJheTsKKworY29uc3Qgc3RydWN0IFNobWVtQ2FsbGJhY2tzIFByb2NBcnJheVNobWVtQ2Fs bGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gUHJvY0FycmF5U2htZW1SZXF1ZXN0LAorCS5p bml0X2ZuID0gUHJvY0FycmF5U2htZW1Jbml0LAorCS5hdHRhY2hfZm4gPSBQcm9jQXJyYXlT aG1lbUF0dGFjaCwKK307CisKK3N0YXRpYyBTaG1lbVN0cnVjdERlc2MgUHJvY0FycmF5U2ht ZW1EZXNjOworCiAvKgogICogU3RhdGUgZm9yIHRoZSBHbG9iYWxWaXNUZXN0KiBmYW1pbHkg b2YgZnVuY3Rpb25zLiBUaG9zZSBmdW5jdGlvbnMgY2FuCiAgKiBlLmcuIGJlIHVzZWQgdG8g ZGVjaWRlIGlmIGEgZGVsZXRlZCByb3cgY2FuIGJlIHJlbW92ZWQgd2l0aG91dCB2aW9sYXRp bmcKQEAgLTI2OSw5ICsyODQsNiBAQCB0eXBlZGVmIGVudW0gS0FYQ29tcHJlc3NSZWFzb24K IAlLQVhfU1RBUlRVUF9QUk9DRVNTX0lETEUsCS8qIHN0YXJ0dXAgcHJvY2VzcyBpcyBhYm91 dCB0byBzbGVlcCAqLwogfSBLQVhDb21wcmVzc1JlYXNvbjsKIAotCi1zdGF0aWMgUHJvY0Fy cmF5U3RydWN0ICpwcm9jQXJyYXk7Ci0KIHN0YXRpYyBQR1BST0MgKmFsbFByb2NzOwogCiAv KgpAQCAtMjgyLDggKzI5NCwxNSBAQCBzdGF0aWMgVHJhbnNhY3Rpb25JZCBjYWNoZWRYaWRJ c05vdEluUHJvZ3Jlc3MgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIC8qCiAgKiBCb29ra2Vl cGluZyBmb3IgdHJhY2tpbmcgZW11bGF0ZWQgdHJhbnNhY3Rpb25zIGluIHJlY292ZXJ5CiAg Ki8KKwogc3RhdGljIFRyYW5zYWN0aW9uSWQgKktub3duQXNzaWduZWRYaWRzOworCitzdGF0 aWMgU2htZW1TdHJ1Y3REZXNjIEtub3duQXNzaWduZWRYaWRzU2htZW1EZXNjOworCiBzdGF0 aWMgYm9vbCAqS25vd25Bc3NpZ25lZFhpZHNWYWxpZDsKKworc3RhdGljIFNobWVtU3RydWN0 RGVzYyBLbm93bkFzc2lnbmVkWGlkc1ZhbGlkU2htZW1EZXNjOworCiBzdGF0aWMgVHJhbnNh Y3Rpb25JZCBsYXRlc3RPYnNlcnZlZFhpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOwogCiAv KgpAQCAtMzc0LDE5ICszOTMsMTMgQEAgc3RhdGljIGlubGluZSBGdWxsVHJhbnNhY3Rpb25J ZCBGdWxsWGlkUmVsYXRpdmVUbyhGdWxsVHJhbnNhY3Rpb25JZCByZWwsCiBzdGF0aWMgdm9p ZCBHbG9iYWxWaXNVcGRhdGVBcHBseShDb21wdXRlWGlkSG9yaXpvbnNSZXN1bHQgKmhvcml6 b25zKTsKIAogLyoKLSAqIFJlcG9ydCBzaGFyZWQtbWVtb3J5IHNwYWNlIG5lZWRlZCBieSBQ cm9jQXJyYXlTaG1lbUluaXQKKyAqIFJlZ2lzdGVyIHRoZSBzaGFyZWQgUEdQUk9DIGFycmF5 IGR1cmluZyBwb3N0bWFzdGVyIHN0YXJ0dXAuCiAgKi8KLVNpemUKLVByb2NBcnJheVNobWVt U2l6ZSh2b2lkKQorc3RhdGljIHZvaWQKK1Byb2NBcnJheVNobWVtUmVxdWVzdCh2b2lkICph cmcpCiB7Ci0JU2l6ZQkJc2l6ZTsKLQotCS8qIFNpemUgb2YgdGhlIFByb2NBcnJheSBzdHJ1 Y3R1cmUgaXRzZWxmICovCiAjZGVmaW5lIFBST0NBUlJBWV9NQVhQUk9DUwkoTWF4QmFja2Vu ZHMgKyBtYXhfcHJlcGFyZWRfeGFjdHMpCiAKLQlzaXplID0gb2Zmc2V0b2YoUHJvY0FycmF5 U3RydWN0LCBwZ3Byb2Nub3MpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShz aXplb2YoaW50KSwgUFJPQ0FSUkFZX01BWFBST0NTKSk7Ci0KIAkvKgogCSAqIER1cmluZyBI b3QgU3RhbmRieSBwcm9jZXNzaW5nIHdlIGhhdmUgYSBkYXRhIHN0cnVjdHVyZSBjYWxsZWQK IAkgKiBLbm93bkFzc2lnbmVkWGlkcywgY3JlYXRlZCBpbiBzaGFyZWQgbWVtb3J5LiBMb2Nh bCBkYXRhIHN0cnVjdHVyZXMgYXJlCkBAIC00MDUsNjQgKzQxOCw1MiBAQCBQcm9jQXJyYXlT aG1lbVNpemUodm9pZCkKIAogCWlmIChFbmFibGVIb3RTdGFuZGJ5KQogCXsKLQkJc2l6ZSA9 IGFkZF9zaXplKHNpemUsCi0JCQkJCQltdWxfc2l6ZShzaXplb2YoVHJhbnNhY3Rpb25JZCks Ci0JCQkJCQkJCSBUT1RBTF9NQVhfQ0FDSEVEX1NVQlhJRFMpKTsKLQkJc2l6ZSA9IGFkZF9z aXplKHNpemUsCi0JCQkJCQltdWxfc2l6ZShzaXplb2YoYm9vbCksIFRPVEFMX01BWF9DQUNI RURfU1VCWElEUykpOworCQlTaG1lbVJlcXVlc3RTdHJ1Y3QoJktub3duQXNzaWduZWRYaWRz U2htZW1EZXNjLAorCQkJCQkJICAgLm5hbWUgPSAiS25vd25Bc3NpZ25lZFhpZHMiLAorCQkJ CQkJICAgLnNpemUgPSBtdWxfc2l6ZShzaXplb2YoVHJhbnNhY3Rpb25JZCksIFRPVEFMX01B WF9DQUNIRURfU1VCWElEUyksCisJCQkJCQkgICAucHRyID0gKHZvaWQgKiopICZLbm93bkFz c2lnbmVkWGlkcywKKwkJCSk7CisKKwkJU2htZW1SZXF1ZXN0U3RydWN0KCZLbm93bkFzc2ln bmVkWGlkc1ZhbGlkU2htZW1EZXNjLAorCQkJCQkJICAgLm5hbWUgPSAiS25vd25Bc3NpZ25l ZFhpZHNWYWxpZCIsCisJCQkJCQkgICAuc2l6ZSA9IG11bF9zaXplKHNpemVvZihib29sKSwg VE9UQUxfTUFYX0NBQ0hFRF9TVUJYSURTKSwKKwkJCQkJCSAgIC5wdHIgPSAodm9pZCAqKikg Jktub3duQXNzaWduZWRYaWRzVmFsaWQsCisJCQkpOwogCX0KIAotCXJldHVybiBzaXplOwor CS8qIFJlZ2lzdGVyIHRoZSBQcm9jQXJyYXkgc2hhcmVkIHN0cnVjdHVyZSAqLworCVNobWVt UmVxdWVzdFN0cnVjdCgmUHJvY0FycmF5U2htZW1EZXNjLAorCQkJCQkgICAubmFtZSA9ICJQ cm9jIEFycmF5IiwKKwkJCQkJICAgLnNpemUgPSBhZGRfc2l6ZShvZmZzZXRvZihQcm9jQXJy YXlTdHJ1Y3QsIHBncHJvY25vcyksCisJCQkJCQkJCQkJbXVsX3NpemUoc2l6ZW9mKGludCks IFBST0NBUlJBWV9NQVhQUk9DUykpLAorCQkJCQkgICAucHRyID0gKHZvaWQgKiopICZwcm9j QXJyYXksCisJCSk7CiB9CiAKIC8qCiAgKiBJbml0aWFsaXplIHRoZSBzaGFyZWQgUEdQUk9D IGFycmF5IGR1cmluZyBwb3N0bWFzdGVyIHN0YXJ0dXAuCiAgKi8KLXZvaWQKLVByb2NBcnJh eVNobWVtSW5pdCh2b2lkKQorc3RhdGljIHZvaWQKK1Byb2NBcnJheVNobWVtSW5pdCh2b2lk ICphcmcpCiB7Ci0JYm9vbAkJZm91bmQ7Ci0KLQkvKiBDcmVhdGUgb3IgYXR0YWNoIHRvIHRo ZSBQcm9jQXJyYXkgc2hhcmVkIHN0cnVjdHVyZSAqLwotCXByb2NBcnJheSA9IChQcm9jQXJy YXlTdHJ1Y3QgKikKLQkJU2htZW1Jbml0U3RydWN0KCJQcm9jIEFycmF5IiwKLQkJCQkJCWFk ZF9zaXplKG9mZnNldG9mKFByb2NBcnJheVN0cnVjdCwgcGdwcm9jbm9zKSwKLQkJCQkJCQkJ IG11bF9zaXplKHNpemVvZihpbnQpLAotCQkJCQkJCQkJCSAgUFJPQ0FSUkFZX01BWFBST0NT KSksCi0JCQkJCQkmZm91bmQpOwotCi0JaWYgKCFmb3VuZCkKLQl7Ci0JCS8qCi0JCSAqIFdl J3JlIHRoZSBmaXJzdCAtIGluaXRpYWxpemUuCi0JCSAqLwotCQlwcm9jQXJyYXktPm51bVBy b2NzID0gMDsKLQkJcHJvY0FycmF5LT5tYXhQcm9jcyA9IFBST0NBUlJBWV9NQVhQUk9DUzsK LQkJcHJvY0FycmF5LT5tYXhLbm93bkFzc2lnbmVkWGlkcyA9IFRPVEFMX01BWF9DQUNIRURf U1VCWElEUzsKLQkJcHJvY0FycmF5LT5udW1Lbm93bkFzc2lnbmVkWGlkcyA9IDA7Ci0JCXBy b2NBcnJheS0+dGFpbEtub3duQXNzaWduZWRYaWRzID0gMDsKLQkJcHJvY0FycmF5LT5oZWFk S25vd25Bc3NpZ25lZFhpZHMgPSAwOwotCQlwcm9jQXJyYXktPmxhc3RPdmVyZmxvd2VkWGlk ID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7Ci0JCXByb2NBcnJheS0+cmVwbGljYXRpb25fc2xv dF94bWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7Ci0JCXByb2NBcnJheS0+cmVwbGljYXRp b25fc2xvdF9jYXRhbG9nX3htaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKLQkJVHJhbnNh bVZhcmlhYmxlcy0+eGFjdENvbXBsZXRpb25Db3VudCA9IDE7Ci0JfQorCXByb2NBcnJheS0+ bnVtUHJvY3MgPSAwOworCXByb2NBcnJheS0+bWF4UHJvY3MgPSBQUk9DQVJSQVlfTUFYUFJP Q1M7CisJcHJvY0FycmF5LT5tYXhLbm93bkFzc2lnbmVkWGlkcyA9IFRPVEFMX01BWF9DQUNI RURfU1VCWElEUzsKKwlwcm9jQXJyYXktPm51bUtub3duQXNzaWduZWRYaWRzID0gMDsKKwlw cm9jQXJyYXktPnRhaWxLbm93bkFzc2lnbmVkWGlkcyA9IDA7CisJcHJvY0FycmF5LT5oZWFk S25vd25Bc3NpZ25lZFhpZHMgPSAwOworCXByb2NBcnJheS0+bGFzdE92ZXJmbG93ZWRYaWQg PSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwlwcm9jQXJyYXktPnJlcGxpY2F0aW9uX3Nsb3Rf eG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCXByb2NBcnJheS0+cmVwbGljYXRpb25f c2xvdF9jYXRhbG9nX3htaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwlUcmFuc2FtVmFy aWFibGVzLT54YWN0Q29tcGxldGlvbkNvdW50ID0gMTsKIAogCWFsbFByb2NzID0gUHJvY0ds b2JhbC0+YWxsUHJvY3M7Cit9CiAKLQkvKiBDcmVhdGUgb3IgYXR0YWNoIHRvIHRoZSBLbm93 bkFzc2lnbmVkWGlkcyBhcnJheXMgdG9vLCBpZiBuZWVkZWQgKi8KLQlpZiAoRW5hYmxlSG90 U3RhbmRieSkKLQl7Ci0JCUtub3duQXNzaWduZWRYaWRzID0gKFRyYW5zYWN0aW9uSWQgKikK LQkJCVNobWVtSW5pdFN0cnVjdCgiS25vd25Bc3NpZ25lZFhpZHMiLAotCQkJCQkJCW11bF9z aXplKHNpemVvZihUcmFuc2FjdGlvbklkKSwKLQkJCQkJCQkJCSBUT1RBTF9NQVhfQ0FDSEVE X1NVQlhJRFMpLAotCQkJCQkJCSZmb3VuZCk7Ci0JCUtub3duQXNzaWduZWRYaWRzVmFsaWQg PSAoYm9vbCAqKQotCQkJU2htZW1Jbml0U3RydWN0KCJLbm93bkFzc2lnbmVkWGlkc1ZhbGlk IiwKLQkJCQkJCQltdWxfc2l6ZShzaXplb2YoYm9vbCksIFRPVEFMX01BWF9DQUNIRURfU1VC WElEUyksCi0JCQkJCQkJJmZvdW5kKTsKLQl9CitzdGF0aWMgdm9pZAorUHJvY0FycmF5U2ht ZW1BdHRhY2godm9pZCAqYXJnKQoreworCWFsbFByb2NzID0gUHJvY0dsb2JhbC0+YWxsUHJv Y3M7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9j c2lnbmFsLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKaW5kZXgg N2UwMTdjOGQ1M2IuLjdjNzk3MjdlMzA4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9wcm9jc2lnbmFsLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJv Y3NpZ25hbC5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5o IgogI2luY2x1ZGUgInN0b3JhZ2Uvc2ludmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zbWdy LmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidGNvcC90 Y29wcHJvdC5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRp bHMvd2FpdF9ldmVudC5oIgpAQCAtMTA1LDcgKzEwNiwxNiBAQCBzdHJ1Y3QgUHJvY1NpZ25h bEhlYWRlcgogI2RlZmluZSBCQVJSSUVSX0NMRUFSX0JJVChmbGFncywgdHlwZSkgXAogCSgo ZmxhZ3MpICY9IH4oKCh1aW50MzIpIDEpIDw8ICh1aW50MzIpICh0eXBlKSkpCiAKK3N0YXRp YyB2b2lkIFByb2NTaWduYWxTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lk IFByb2NTaWduYWxTaG1lbUluaXQodm9pZCAqYXJnKTsKKworY29uc3QgU2htZW1DYWxsYmFj a3MgUHJvY1NpZ25hbFNobWVtQ2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gUHJvY1Np Z25hbFNobWVtUmVxdWVzdCwKKwkuaW5pdF9mbiA9IFByb2NTaWduYWxTaG1lbUluaXQsCit9 OworCiBOT05fRVhFQ19TVEFUSUMgUHJvY1NpZ25hbEhlYWRlciAqUHJvY1NpZ25hbCA9IE5V TEw7CisKIHN0YXRpYyBQcm9jU2lnbmFsU2xvdCAqTXlQcm9jU2lnbmFsU2xvdCA9IE5VTEw7 CiAKIHN0YXRpYyBib29sIENoZWNrUHJvY1NpZ25hbChQcm9jU2lnbmFsUmVhc29uIHJlYXNv bik7CkBAIC0xMTMsNTEgKzEyMyw0MSBAQCBzdGF0aWMgdm9pZCBDbGVhbnVwUHJvY1NpZ25h bFN0YXRlKGludCBzdGF0dXMsIERhdHVtIGFyZyk7CiBzdGF0aWMgdm9pZCBSZXNldFByb2NT aWduYWxCYXJyaWVyQml0cyh1aW50MzIgZmxhZ3MpOwogCiAvKgotICogUHJvY1NpZ25hbFNo bWVtU2l6ZQotICoJCUNvbXB1dGUgc3BhY2UgbmVlZGVkIGZvciBQcm9jU2lnbmFsJ3Mgc2hh cmVkIG1lbW9yeQorICogUHJvY1NpZ25hbFNobWVtUmVxdWVzdAorICoJCVJlZ2lzdGVyIFBy b2NTaWduYWwncyBzaGFyZWQgbWVtb3J5IG5lZWRzIGF0IHBvc3RtYXN0ZXIgc3RhcnR1cAog ICovCi1TaXplCi1Qcm9jU2lnbmFsU2htZW1TaXplKHZvaWQpCitzdGF0aWMgdm9pZAorUHJv Y1NpZ25hbFNobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7CisJc3RhdGljIFNobWVtU3RydWN0 RGVzYyBQcm9jU2lnbmFsU2htZW1EZXNjOwogCVNpemUJCXNpemU7CiAKIAlzaXplID0gbXVs X3NpemUoTnVtUHJvY1NpZ25hbFNsb3RzLCBzaXplb2YoUHJvY1NpZ25hbFNsb3QpKTsKIAlz aXplID0gYWRkX3NpemUoc2l6ZSwgb2Zmc2V0b2YoUHJvY1NpZ25hbEhlYWRlciwgcHNoX3Ns b3QpKTsKLQlyZXR1cm4gc2l6ZTsKKworCVNobWVtUmVxdWVzdFN0cnVjdCgmUHJvY1NpZ25h bFNobWVtRGVzYywKKwkJCQkJICAgLm5hbWUgPSAiUHJvY1NpZ25hbCIsCisJCQkJCSAgIC5z aXplID0gc2l6ZSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmUHJvY1NpZ25hbCwKKwkJ KTsKIH0KIAotLyoKLSAqIFByb2NTaWduYWxTaG1lbUluaXQKLSAqCQlBbGxvY2F0ZSBhbmQg aW5pdGlhbGl6ZSBQcm9jU2lnbmFsJ3Mgc2hhcmVkIG1lbW9yeQotICovCi12b2lkCi1Qcm9j U2lnbmFsU2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAorUHJvY1NpZ25hbFNobWVtSW5p dCh2b2lkICphcmcpCiB7Ci0JU2l6ZQkJc2l6ZSA9IFByb2NTaWduYWxTaG1lbVNpemUoKTsK LQlib29sCQlmb3VuZDsKKwlwZ19hdG9taWNfaW5pdF91NjQoJlByb2NTaWduYWwtPnBzaF9i YXJyaWVyR2VuZXJhdGlvbiwgMCk7CiAKLQlQcm9jU2lnbmFsID0gKFByb2NTaWduYWxIZWFk ZXIgKikKLQkJU2htZW1Jbml0U3RydWN0KCJQcm9jU2lnbmFsIiwgc2l6ZSwgJmZvdW5kKTsK LQotCS8qIElmIHdlJ3JlIGZpcnN0LCBpbml0aWFsaXplLiAqLwotCWlmICghZm91bmQpCisJ Zm9yIChpbnQgaSA9IDA7IGkgPCBOdW1Qcm9jU2lnbmFsU2xvdHM7ICsraSkKIAl7Ci0JCWlu dAkJCWk7Ci0KLQkJcGdfYXRvbWljX2luaXRfdTY0KCZQcm9jU2lnbmFsLT5wc2hfYmFycmll ckdlbmVyYXRpb24sIDApOworCQlQcm9jU2lnbmFsU2xvdCAqc2xvdCA9ICZQcm9jU2lnbmFs LT5wc2hfc2xvdFtpXTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgTnVtUHJvY1NpZ25hbFNsb3Rz OyArK2kpCi0JCXsKLQkJCVByb2NTaWduYWxTbG90ICpzbG90ID0gJlByb2NTaWduYWwtPnBz aF9zbG90W2ldOwotCi0JCQlTcGluTG9ja0luaXQoJnNsb3QtPnBzc19tdXRleCk7Ci0JCQlw Z19hdG9taWNfaW5pdF91MzIoJnNsb3QtPnBzc19waWQsIDApOwotCQkJc2xvdC0+cHNzX2Nh bmNlbF9rZXlfbGVuID0gMDsKLQkJCU1lbVNldChzbG90LT5wc3Nfc2lnbmFsRmxhZ3MsIDAs IHNpemVvZihzbG90LT5wc3Nfc2lnbmFsRmxhZ3MpKTsKLQkJCXBnX2F0b21pY19pbml0X3U2 NCgmc2xvdC0+cHNzX2JhcnJpZXJHZW5lcmF0aW9uLCBQR19VSU5UNjRfTUFYKTsKLQkJCXBn X2F0b21pY19pbml0X3UzMigmc2xvdC0+cHNzX2JhcnJpZXJDaGVja01hc2ssIDApOwotCQkJ Q29uZGl0aW9uVmFyaWFibGVJbml0KCZzbG90LT5wc3NfYmFycmllckNWKTsKLQkJfQorCQlT cGluTG9ja0luaXQoJnNsb3QtPnBzc19tdXRleCk7CisJCXBnX2F0b21pY19pbml0X3UzMigm c2xvdC0+cHNzX3BpZCwgMCk7CisJCXNsb3QtPnBzc19jYW5jZWxfa2V5X2xlbiA9IDA7CisJ CU1lbVNldChzbG90LT5wc3Nfc2lnbmFsRmxhZ3MsIDAsIHNpemVvZihzbG90LT5wc3Nfc2ln bmFsRmxhZ3MpKTsKKwkJcGdfYXRvbWljX2luaXRfdTY0KCZzbG90LT5wc3NfYmFycmllckdl bmVyYXRpb24sIFBHX1VJTlQ2NF9NQVgpOworCQlwZ19hdG9taWNfaW5pdF91MzIoJnNsb3Qt PnBzc19iYXJyaWVyQ2hlY2tNYXNrLCAwKTsKKwkJQ29uZGl0aW9uVmFyaWFibGVJbml0KCZz bG90LT5wc3NfYmFycmllckNWKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL3NpbnZhbGFkdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2lu dmFsYWR0LmMKaW5kZXggYTdhN2NjNGYwYTkuLjM0ODYwZDQ3NGJjIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaW52YWxhZHQuYworKysgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2lwYy9zaW52YWxhZHQuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgInN0 b3JhZ2Uvc2htZW0uaCIKICNpbmNsdWRlICJzdG9yYWdlL3NpbnZhbGFkdC5oIgogI2luY2x1 ZGUgInN0b3JhZ2Uvc3Bpbi5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgog CiAvKgogICogQ29uY2VwdHVhbGx5LCB0aGUgc2hhcmVkIGNhY2hlIGludmFsaWRhdGlvbiBt ZXNzYWdlcyBhcmUgc3RvcmVkIGluIGFuCkBAIC0yMDUsNiArMjA2LDE0IEBAIHR5cGVkZWYg c3RydWN0IFNJU2VnCiAKIHN0YXRpYyBTSVNlZyAqc2htSW52YWxCdWZmZXI7CS8qIHBvaW50 ZXIgdG8gdGhlIHNoYXJlZCBpbnZhbCBidWZmZXIgKi8KIAorc3RhdGljIHZvaWQgU2hhcmVk SW52YWxTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIFNoYXJlZEludmFs U2htZW1Jbml0KHZvaWQgKmFyZyk7CisKK2NvbnN0IFNobWVtQ2FsbGJhY2tzIFNoYXJlZElu dmFsU2htZW1DYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBTaGFyZWRJbnZhbFNobWVt UmVxdWVzdCwKKwkuaW5pdF9mbiA9IFNoYXJlZEludmFsU2htZW1Jbml0LAorfTsKKwogCiBz dGF0aWMgTG9jYWxUcmFuc2FjdGlvbklkIG5leHRMb2NhbFRyYW5zYWN0aW9uSWQ7CiAKQEAg LTIxMiwzNyArMjIxLDMyIEBAIHN0YXRpYyB2b2lkIENsZWFudXBJbnZhbGlkYXRpb25TdGF0 ZShpbnQgc3RhdHVzLCBEYXR1bSBhcmcpOwogCiAKIC8qCi0gKiBTaGFyZWRJbnZhbFNobWVt U2l6ZSAtLS0gcmV0dXJuIHNoYXJlZC1tZW1vcnkgc3BhY2UgbmVlZGVkCisgKiBTaGFyZWRJ bnZhbFNobWVtUmVxdWVzdAorICoJCVJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkgbmVlZHMgZm9y IHRoZSBTSSBtZXNzYWdlIGJ1ZmZlcgogICovCi1TaXplCi1TaGFyZWRJbnZhbFNobWVtU2l6 ZSh2b2lkKQorc3RhdGljIHZvaWQKK1NoYXJlZEludmFsU2htZW1SZXF1ZXN0KHZvaWQgKmFy ZykKIHsKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIFNoYXJlZEludmFsU2htZW1EZXNjOwog CVNpemUJCXNpemU7CiAKIAlzaXplID0gb2Zmc2V0b2YoU0lTZWcsIHByb2NTdGF0ZSk7CiAJ c2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKHNpemVvZihQcm9jU3RhdGUpLCBOdW1Q cm9jU3RhdGVTbG90cykpOwkvKiBwcm9jU3RhdGUgKi8KIAlzaXplID0gYWRkX3NpemUoc2l6 ZSwgbXVsX3NpemUoc2l6ZW9mKGludCksIE51bVByb2NTdGF0ZVNsb3RzKSk7CS8qIHBncHJv Y25vcyAqLwogCi0JcmV0dXJuIHNpemU7CisJU2htZW1SZXF1ZXN0U3RydWN0KCZTaGFyZWRJ bnZhbFNobWVtRGVzYywKKwkJCQkJICAgLm5hbWUgPSAic2htSW52YWxCdWZmZXIiLAorCQkJ CQkgICAuc2l6ZSA9IHNpemUsCisJCQkJCSAgIC5wdHIgPSAodm9pZCAqKikgJnNobUludmFs QnVmZmVyLAorCQkpOwogfQogCi0vKgotICogU2hhcmVkSW52YWxTaG1lbUluaXQKLSAqCQlD cmVhdGUgYW5kIGluaXRpYWxpemUgdGhlIFNJIG1lc3NhZ2UgYnVmZmVyCi0gKi8KLXZvaWQK LVNoYXJlZEludmFsU2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAorU2hhcmVkSW52YWxT aG1lbUluaXQodm9pZCAqYXJnKQogewogCWludAkJCWk7Ci0JYm9vbAkJZm91bmQ7Ci0KLQkv KiBBbGxvY2F0ZSBzcGFjZSBpbiBzaGFyZWQgbWVtb3J5ICovCi0Jc2htSW52YWxCdWZmZXIg PSAoU0lTZWcgKikKLQkJU2htZW1Jbml0U3RydWN0KCJzaG1JbnZhbEJ1ZmZlciIsIFNoYXJl ZEludmFsU2htZW1TaXplKCksICZmb3VuZCk7Ci0JaWYgKGZvdW5kKQotCQlyZXR1cm47CiAK LQkvKiBDbGVhciBtZXNzYWdlIGNvdW50ZXJzLCBzYXZlIHNpemUgb2YgcHJvY1N0YXRlIGFy cmF5LCBpbml0IHNwaW5sb2NrICovCisJLyogQ2xlYXIgbWVzc2FnZSBjb3VudGVycywgaW5p dCBzcGlubG9jayAqLwogCXNobUludmFsQnVmZmVyLT5taW5Nc2dOdW0gPSAwOwogCXNobUlu dmFsQnVmZmVyLT5tYXhNc2dOdW0gPSAwOwogCXNobUludmFsQnVmZmVyLT5uZXh0VGhyZXNo b2xkID0gQ0xFQU5VUF9NSU47CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xt Z3IvcHJvYy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwppbmRleCA5Yjg4 MGE2YWY2NS4uYjU1MzIyMDgzNjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv bG1nci9wcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwpAQCAt NTIsNiArNTIsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgogI2luY2x1 ZGUgInN0b3JhZ2Uvc3Bpbi5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3RhbmRieS5oIgorI2lu Y2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgogI2luY2x1ZGUgInV0aWxzL3RpbWVvdXQu aCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKICNpbmNsdWRlICJ1dGlscy93YWl0 X2V2ZW50LmgiCkBAIC03MCw5ICs3MSwyNSBAQCBQR1BST0MJICAgKk15UHJvYyA9IE5VTEw7 CiAKIC8qIFBvaW50ZXJzIHRvIHNoYXJlZC1tZW1vcnkgc3RydWN0dXJlcyAqLwogUFJPQ19I RFIgICAqUHJvY0dsb2JhbCA9IE5VTEw7CitzdGF0aWMgdm9pZCAqdG1wQWxsUHJvY3M7Citz dGF0aWMgdm9pZCAqdG1wRmFzdFBhdGhMb2NrQXJyYXk7CiBOT05fRVhFQ19TVEFUSUMgUEdQ Uk9DICpBdXhpbGlhcnlQcm9jcyA9IE5VTEw7CiBQR1BST0MJICAgKlByZXBhcmVkWGFjdFBy b2NzID0gTlVMTDsKIAorc3RhdGljIHZvaWQgUHJvY0dsb2JhbFNobWVtUmVxdWVzdCh2b2lk ICphcmcpOworc3RhdGljIHZvaWQgUHJvY0dsb2JhbFNobWVtSW5pdCh2b2lkICphcmcpOwor Citjb25zdCBTaG1lbUNhbGxiYWNrcyBQcm9jR2xvYmFsU2htZW1DYWxsYmFja3MgPSB7CisJ LnJlcXVlc3RfZm4gPSBQcm9jR2xvYmFsU2htZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gUHJv Y0dsb2JhbFNobWVtSW5pdCwKK307CisKK3N0YXRpYyBTaG1lbVN0cnVjdERlc2MgUHJvY0ds b2JhbFNobWVtRGVzYzsKK3N0YXRpYyBTaG1lbVN0cnVjdERlc2MgUHJvY0dsb2JhbEFsbFBy b2NzU2htZW1EZXNjOworc3RhdGljIFNobWVtU3RydWN0RGVzYyBGYXN0UGF0aExvY2tBcnJh eVNobWVtRGVzYzsKKworc3RhdGljIHVpbnQzMiBUb3RhbFByb2NzOworCiAvKiBJcyBhIGRl YWRsb2NrIGNoZWNrIHBlbmRpbmc/ICovCiBzdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190 IGdvdF9kZWFkbG9ja190aW1lb3V0OwogCkBAIC04MiwyNCArOTksNiBAQCBzdGF0aWMgdm9p ZCBBdXhpbGlhcnlQcm9jS2lsbChpbnQgY29kZSwgRGF0dW0gYXJnKTsKIHN0YXRpYyBEZWFk TG9ja1N0YXRlIENoZWNrRGVhZExvY2sodm9pZCk7CiAKIAotLyoKLSAqIFJlcG9ydCBzaGFy ZWQtbWVtb3J5IHNwYWNlIG5lZWRlZCBieSBQR1BST0MuCi0gKi8KLXN0YXRpYyBTaXplCi1Q R1Byb2NTaG1lbVNpemUodm9pZCkKLXsKLQlTaXplCQlzaXplID0gMDsKLQlTaXplCQlUb3Rh bFByb2NzID0KLQkJYWRkX3NpemUoTWF4QmFja2VuZHMsIGFkZF9zaXplKE5VTV9BVVhJTElB UllfUFJPQ1MsIG1heF9wcmVwYXJlZF94YWN0cykpOwotCi0Jc2l6ZSA9IGFkZF9zaXplKHNp emUsIG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZihQR1BST0MpKSk7Ci0Jc2l6ZSA9IGFk ZF9zaXplKHNpemUsIG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZigqUHJvY0dsb2JhbC0+ eGlkcykpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoVG90YWxQcm9jcywg c2l6ZW9mKCpQcm9jR2xvYmFsLT5zdWJ4aWRTdGF0ZXMpKSk7Ci0Jc2l6ZSA9IGFkZF9zaXpl KHNpemUsIG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZigqUHJvY0dsb2JhbC0+c3RhdHVz RmxhZ3MpKSk7Ci0KLQlyZXR1cm4gc2l6ZTsKLX0KLQogLyoKICAqIFJlcG9ydCBzaGFyZWQt bWVtb3J5IHNwYWNlIG5lZWRlZCBieSBGYXN0LVBhdGggbG9ja3MuCiAgKi8KQEAgLTEwNyw4 ICsxMDYsNiBAQCBzdGF0aWMgU2l6ZQogRmFzdFBhdGhMb2NrU2htZW1TaXplKHZvaWQpCiB7 CiAJU2l6ZQkJc2l6ZSA9IDA7Ci0JU2l6ZQkJVG90YWxQcm9jcyA9Ci0JCWFkZF9zaXplKE1h eEJhY2tlbmRzLCBhZGRfc2l6ZShOVU1fQVVYSUxJQVJZX1BST0NTLCBtYXhfcHJlcGFyZWRf eGFjdHMpKTsKIAlTaXplCQlmcExvY2tCaXRzU2l6ZSwKIAkJCQlmcFJlbElkU2l6ZTsKIApA QCAtMTI4LDI2ICsxMjUsNyBAQCBGYXN0UGF0aExvY2tTaG1lbVNpemUodm9pZCkKIH0KIAog LyoKLSAqIFJlcG9ydCBzaGFyZWQtbWVtb3J5IHNwYWNlIG5lZWRlZCBieSBJbml0UHJvY0ds b2JhbC4KLSAqLwotU2l6ZQotUHJvY0dsb2JhbFNobWVtU2l6ZSh2b2lkKQotewotCVNpemUJ CXNpemUgPSAwOwotCi0JLyogUHJvY0dsb2JhbCAqLwotCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBzaXplb2YoUFJPQ19IRFIpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgc2l6ZW9mKHNs b2NrX3QpKTsKLQotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBQR1NlbWFwaG9yZVNobWVtU2l6 ZShQcm9jR2xvYmFsU2VtYXMoKSkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBQR1Byb2NT aG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIEZhc3RQYXRoTG9ja1NobWVt U2l6ZSgpKTsKLQotCXJldHVybiBzaXplOwotfQotCi0vKgotICogUmVwb3J0IG51bWJlciBv ZiBzZW1hcGhvcmVzIG5lZWRlZCBieSBJbml0UHJvY0dsb2JhbC4KKyAqIFJlcG9ydCBudW1i ZXIgb2Ygc2VtYXBob3JlcyBuZWVkZWQgYnkgUHJvY0dsb2JhbFNobWVtSW5pdC4KICAqLwog aW50CiBQcm9jR2xvYmFsU2VtYXModm9pZCkKQEAgLTE2MCw3ICsxMzgsNjMgQEAgUHJvY0ds b2JhbFNlbWFzKHZvaWQpCiB9CiAKIC8qCi0gKiBJbml0UHJvY0dsb2JhbCAtCisgKiBQcm9j R2xvYmFsU2htZW1SZXF1ZXN0CisgKgkgIFJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkgbmVlZHMu CisgKgorICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHBvc3RtYXN0ZXIgb3Igc3RhbmRhbG9u ZSBiYWNrZW5kIHN0YXJ0dXAsIGFuZCBhbHNvCisgKiBkdXJpbmcgYmFja2VuZCBzdGFydHVw IGluIEVYRUNfQkFDS0VORCBtb2RlLgorICovCitzdGF0aWMgdm9pZAorUHJvY0dsb2JhbFNo bWVtUmVxdWVzdCh2b2lkICphcmcpCit7CisJU2l6ZQkJc2l6ZTsKKworCS8qCisJICogUmVz ZXJ2ZSBhbGwgdGhlIFBHUFJPQyBzdHJ1Y3R1cmVzIHdlJ2xsIG5lZWQuICBUaGVyZSBhcmUg c2l4IHNlcGFyYXRlCisJICogY29uc3VtZXJzOiAoMSkgbm9ybWFsIGJhY2tlbmRzLCAoMikg YXV0b3ZhY3V1bSB3b3JrZXJzIGFuZCBzcGVjaWFsCisJICogd29ya2VycywgKDMpIGJhY2tn cm91bmQgd29ya2VycywgKDQpIHdhbHNlbmRlcnMsICg1KSBhdXhpbGlhcnkKKwkgKiBwcm9j ZXNzZXMsIGFuZCAoNikgcHJlcGFyZWQgdHJhbnNhY3Rpb25zLiAgKEZvciBsYXJnZWx5LWhp c3RvcmljYWwKKwkgKiByZWFzb25zLCB3ZSBjb21iaW5lIGF1dG92YWN1dW0gYW5kIHNwZWNp YWwgd29ya2VycyBpbnRvIG9uZSBjYXRlZ29yeQorCSAqIHdpdGggYSBzaW5nbGUgZnJlZWxp c3QuKSAgRWFjaCBQR1BST0Mgc3RydWN0dXJlIGlzIGRlZGljYXRlZCB0byBleGFjdGx5CisJ ICogb25lIG9mIHRoZXNlIHB1cnBvc2VzLCBhbmQgdGhleSBkbyBub3QgbW92ZSBiZXR3ZWVu IGdyb3Vwcy4KKwkgKi8KKwlUb3RhbFByb2NzID0KKwkJYWRkX3NpemUoTWF4QmFja2VuZHMs IGFkZF9zaXplKE5VTV9BVVhJTElBUllfUFJPQ1MsIG1heF9wcmVwYXJlZF94YWN0cykpOwor CisJc2l6ZSA9IDA7CisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKFRvdGFsUHJv Y3MsIHNpemVvZihQR1BST0MpKSk7CisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXpl KFRvdGFsUHJvY3MsIHNpemVvZigqUHJvY0dsb2JhbC0+eGlkcykpKTsKKwlzaXplID0gYWRk X3NpemUoc2l6ZSwgbXVsX3NpemUoVG90YWxQcm9jcywgc2l6ZW9mKCpQcm9jR2xvYmFsLT5z dWJ4aWRTdGF0ZXMpKSk7CisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKFRvdGFs UHJvY3MsIHNpemVvZigqUHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3MpKSk7CisJU2htZW1SZXF1 ZXN0U3RydWN0KCZQcm9jR2xvYmFsQWxsUHJvY3NTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1l ID0gIlBHUFJPQyBzdHJ1Y3R1cmVzIiwKKwkJCQkJICAgLnNpemUgPSBzaXplLAorCQkJCQkg ICAucHRyID0gKHZvaWQgKiopICZ0bXBBbGxQcm9jcywKKwkJKTsKKworCVNobWVtUmVxdWVz dFN0cnVjdCgmRmFzdFBhdGhMb2NrQXJyYXlTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0g IkZhc3QtUGF0aCBMb2NrIEFycmF5IiwKKwkJCQkJICAgLnNpemUgPSBJc1VuZGVyUG9zdG1h c3RlciA/IFNITUVNX0FUVEFDSF9VTktOT1dOX1NJWkUgOiBGYXN0UGF0aExvY2tTaG1lbVNp emUoKSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmdG1wRmFzdFBhdGhMb2NrQXJyYXks CisJCSk7CisKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJlByb2NHbG9iYWxTaG1lbURlc2MsCisJ CQkJCSAgIC5uYW1lID0gIlByb2MgSGVhZGVyIiwKKwkJCQkJICAgLnNpemUgPSBzaXplb2Yo UFJPQ19IRFIpLAorCisJLyoKKwkgKiBQcm9jR2xvYmFsIGlzIHJlZ2lzdGVyZWQgaGVyZSBp biAucHRyIGFzIHVzdWFsLCBidXQgaXQgbmVlZHMgdG8gYmUKKwkgKiBwcm9wYWdhdGVkIHNw ZWNpYWxseSBpbiBFWEVDX0JBQ0tFTkQgbW9kZSwgYmVjYXVzZSBQcm9jR2xvYmFsIG5lZWRz IHRvCisJICogYmUgYWNjZXNzZWQgZWFybHkgYXQgYmFja2VuZCBzdGFydHVwLCBiZWZvcmUg U2htZW1BdHRhY2hSZXF1ZXN0ZWQoKSBoYXMKKwkgKiBiZWVuIGNhbGxlZC4KKwkgKi8KKwkJ CQkJICAgLnB0ciA9ICh2b2lkICoqKSAmUHJvY0dsb2JhbCwKKwkJKTsKK30KKworCisvKgor ICogUHJvY0dsb2JhbFNobWVtSW5pdCAtCiAgKgkgIEluaXRpYWxpemUgdGhlIGdsb2JhbCBw cm9jZXNzIHRhYmxlIGR1cmluZyBwb3N0bWFzdGVyIG9yIHN0YW5kYWxvbmUKICAqCSAgYmFj a2VuZCBzdGFydHVwLgogICoKQEAgLTE3OSwzNiArMjEzLDIzIEBAIFByb2NHbG9iYWxTZW1h cyh2b2lkKQogICoJICBBbm90aGVyIHJlYXNvbiBmb3IgY3JlYXRpbmcgc2VtYXBob3JlcyBo ZXJlIGlzIHRoYXQgdGhlIHNlbWFwaG9yZQogICoJICBpbXBsZW1lbnRhdGlvbiB0eXBpY2Fs bHkgcmVxdWlyZXMgdXMgdG8gY3JlYXRlIHNlbWFwaG9yZXMgaW4gdGhlCiAgKgkgIHBvc3Rt YXN0ZXIsIG5vdCBpbiBiYWNrZW5kcy4KLSAqCi0gKiBOb3RlOiB0aGlzIGlzIE5PVCBjYWxs ZWQgYnkgaW5kaXZpZHVhbCBiYWNrZW5kcyB1bmRlciBhIHBvc3RtYXN0ZXIsCi0gKiBub3Qg ZXZlbiBpbiB0aGUgRVhFQ19CQUNLRU5EIGNhc2UuICBUaGUgUHJvY0dsb2JhbCBhbmQgQXV4 aWxpYXJ5UHJvY3MKLSAqIHBvaW50ZXJzIG11c3QgYmUgcHJvcGFnYXRlZCBzcGVjaWFsbHkg Zm9yIEVYRUNfQkFDS0VORCBvcGVyYXRpb24uCiAgKi8KLXZvaWQKLUluaXRQcm9jR2xvYmFs KHZvaWQpCitzdGF0aWMgdm9pZAorUHJvY0dsb2JhbFNobWVtSW5pdCh2b2lkICphcmcpCiB7 CisJY2hhcgkgICAqcHRyOworCXNpemVfdAkJcmVxdWVzdFNpemU7CiAJUEdQUk9DCSAgICpw cm9jczsKIAlpbnQJCQlpLAogCQkJCWo7Ci0JYm9vbAkJZm91bmQ7Ci0JdWludDMyCQlUb3Rh bFByb2NzID0gTWF4QmFja2VuZHMgKyBOVU1fQVVYSUxJQVJZX1BST0NTICsgbWF4X3ByZXBh cmVkX3hhY3RzOwogCiAJLyogVXNlZCBmb3Igc2V0dXAgb2YgcGVyLWJhY2tlbmQgZmFzdC1w YXRoIHNsb3RzLiAqLwogCWNoYXIJICAgKmZwUHRyLAogCQkJICAgKmZwRW5kUHRyIFBHX1VT RURfRk9SX0FTU0VSVFNfT05MWTsKIAlTaXplCQlmcExvY2tCaXRzU2l6ZSwKIAkJCQlmcFJl bElkU2l6ZTsKLQlTaXplCQlyZXF1ZXN0U2l6ZTsKLQljaGFyCSAgICpwdHI7CiAKLQkvKiBD cmVhdGUgdGhlIFByb2NHbG9iYWwgc2hhcmVkIHN0cnVjdHVyZSAqLwotCVByb2NHbG9iYWwg PSAoUFJPQ19IRFIgKikKLQkJU2htZW1Jbml0U3RydWN0KCJQcm9jIEhlYWRlciIsIHNpemVv ZihQUk9DX0hEUiksICZmb3VuZCk7Ci0JQXNzZXJ0KCFmb3VuZCk7Ci0KLQkvKgotCSAqIElu aXRpYWxpemUgdGhlIGRhdGEgc3RydWN0dXJlcy4KLQkgKi8KKwlBc3NlcnQoUHJvY0dsb2Jh bCk7CiAJUHJvY0dsb2JhbC0+c3BpbnNfcGVyX2RlbGF5ID0gREVGQVVMVF9TUElOU19QRVJf REVMQVk7CiAJU3BpbkxvY2tJbml0KCZQcm9jR2xvYmFsLT5mcmVlUHJvY3NMb2NrKTsKIAlk bGlzdF9pbml0KCZQcm9jR2xvYmFsLT5mcmVlUHJvY3MpOwpAQCAtMjIxLDIzICsyNDIsMTIg QEAgSW5pdFByb2NHbG9iYWwodm9pZCkKIAlwZ19hdG9taWNfaW5pdF91MzIoJlByb2NHbG9i YWwtPnByb2NBcnJheUdyb3VwRmlyc3QsIElOVkFMSURfUFJPQ19OVU1CRVIpOwogCXBnX2F0 b21pY19pbml0X3UzMigmUHJvY0dsb2JhbC0+Y2xvZ0dyb3VwRmlyc3QsIElOVkFMSURfUFJP Q19OVU1CRVIpOwogCi0JLyoKLQkgKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgYWxsIHRoZSBQ R1BST0Mgc3RydWN0dXJlcyB3ZSdsbCBuZWVkLiAgVGhlcmUgYXJlCi0JICogc2l4IHNlcGFy YXRlIGNvbnN1bWVyczogKDEpIG5vcm1hbCBiYWNrZW5kcywgKDIpIGF1dG92YWN1dW0gd29y a2VycyBhbmQKLQkgKiBzcGVjaWFsIHdvcmtlcnMsICgzKSBiYWNrZ3JvdW5kIHdvcmtlcnMs ICg0KSB3YWxzZW5kZXJzLCAoNSkgYXV4aWxpYXJ5Ci0JICogcHJvY2Vzc2VzLCBhbmQgKDYp IHByZXBhcmVkIHRyYW5zYWN0aW9ucy4gIChGb3IgbGFyZ2VseS1oaXN0b3JpY2FsCi0JICog cmVhc29ucywgd2UgY29tYmluZSBhdXRvdmFjdXVtIGFuZCBzcGVjaWFsIHdvcmtlcnMgaW50 byBvbmUgY2F0ZWdvcnkKLQkgKiB3aXRoIGEgc2luZ2xlIGZyZWVsaXN0LikgIEVhY2ggUEdQ Uk9DIHN0cnVjdHVyZSBpcyBkZWRpY2F0ZWQgdG8gZXhhY3RseQotCSAqIG9uZSBvZiB0aGVz ZSBwdXJwb3NlcywgYW5kIHRoZXkgZG8gbm90IG1vdmUgYmV0d2VlbiBncm91cHMuCi0JICov Ci0JcmVxdWVzdFNpemUgPSBQR1Byb2NTaG1lbVNpemUoKTsKLQotCXB0ciA9IFNobWVtSW5p dFN0cnVjdCgiUEdQUk9DIHN0cnVjdHVyZXMiLAotCQkJCQkJICByZXF1ZXN0U2l6ZSwKLQkJ CQkJCSAgJmZvdW5kKTsKLQorCUFzc2VydCh0bXBBbGxQcm9jcyk7CisJcHRyID0gdG1wQWxs UHJvY3M7CisJcmVxdWVzdFNpemUgPSBQcm9jR2xvYmFsQWxsUHJvY3NTaG1lbURlc2Muc2l6 ZTsKIAlNZW1TZXQocHRyLCAwLCByZXF1ZXN0U2l6ZSk7CiAKKwkvKiBDYXJ2ZSBvdXQgdGhl IGFsbFByb2NzIGFycmF5IGZyb20gdGhlIHNoYXJlZCBtZW1vcnkgYXJlYSAqLwogCXByb2Nz ID0gKFBHUFJPQyAqKSBwdHI7CiAJcHRyID0gcHRyICsgVG90YWxQcm9jcyAqIHNpemVvZihQ R1BST0MpOwogCkBAIC0yNDYsNyArMjU2LDcgQEAgSW5pdFByb2NHbG9iYWwodm9pZCkKIAlQ cm9jR2xvYmFsLT5hbGxQcm9jQ291bnQgPSBNYXhCYWNrZW5kcyArIE5VTV9BVVhJTElBUllf UFJPQ1M7CiAKIAkvKgotCSAqIEFsbG9jYXRlIGFycmF5cyBtaXJyb3JpbmcgUEdQUk9DIGZp ZWxkcyBpbiBhIGRlbnNlIG1hbm5lci4gU2VlCisJICogQ2FydmUgb3V0IGFycmF5cyBtaXJy b3JpbmcgUEdQUk9DIGZpZWxkcyBpbiBhIGRlbnNlIG1hbm5lci4gU2VlCiAJICogUFJPQ19I RFIuCiAJICoKIAkgKiBYWFg6IEl0IG1pZ2h0IG1ha2Ugc2Vuc2UgdG8gaW5jcmVhc2UgcGFk ZGluZyBmb3IgdGhlc2UgYXJyYXlzLCBnaXZlbgpAQCAtMjYxLDI0ICsyNzEsMjEgQEAgSW5p dFByb2NHbG9iYWwodm9pZCkKIAlQcm9jR2xvYmFsLT5zdGF0dXNGbGFncyA9ICh1aW50OCAq KSBwdHI7CiAJcHRyID0gcHRyICsgKFRvdGFsUHJvY3MgKiBzaXplb2YoKlByb2NHbG9iYWwt PnN0YXR1c0ZsYWdzKSk7CiAKLQkvKiBtYWtlIHN1cmUgd2VyIGRpZG4ndCBvdmVyZmxvdyAq LworCS8qIG1ha2Ugc3VyZSB3ZSBkaWRuJ3Qgb3ZlcmZsb3cgKi8KIAlBc3NlcnQoKHB0ciA+ IChjaGFyICopIHByb2NzKSAmJiAocHRyIDw9IChjaGFyICopIHByb2NzICsgcmVxdWVzdFNp emUpKTsKIAogCS8qCi0JICogQWxsb2NhdGUgYXJyYXlzIGZvciBmYXN0LXBhdGggbG9ja3Mu IFRob3NlIGFyZSB2YXJpYWJsZS1sZW5ndGgsIHNvCisJICogSW5pdGlhbGl6ZSBhcnJheXMg Zm9yIGZhc3QtcGF0aCBsb2Nrcy4gVGhvc2UgYXJlIHZhcmlhYmxlLWxlbmd0aCwgc28KIAkg KiBjYW4ndCBiZSBpbmNsdWRlZCBpbiBQR1BST0MgZGlyZWN0bHkuIFdlIGFsbG9jYXRlIGEg c2VwYXJhdGUgcGllY2Ugb2YKIAkgKiBzaGFyZWQgbWVtb3J5IGFuZCB0aGVuIGRpdmlkZSB0 aGF0IGJldHdlZW4gYmFja2VuZHMuCiAJICovCiAJZnBMb2NrQml0c1NpemUgPSBNQVhBTElH TihGYXN0UGF0aExvY2tHcm91cHNQZXJCYWNrZW5kICogc2l6ZW9mKHVpbnQ2NCkpOwogCWZw UmVsSWRTaXplID0gTUFYQUxJR04oRmFzdFBhdGhMb2NrU2xvdHNQZXJCYWNrZW5kKCkgKiBz aXplb2YoT2lkKSk7CiAKLQlyZXF1ZXN0U2l6ZSA9IEZhc3RQYXRoTG9ja1NobWVtU2l6ZSgp OwotCi0JZnBQdHIgPSBTaG1lbUluaXRTdHJ1Y3QoIkZhc3QtUGF0aCBMb2NrIEFycmF5IiwK LQkJCQkJCQlyZXF1ZXN0U2l6ZSwKLQkJCQkJCQkmZm91bmQpOwotCi0JTWVtU2V0KGZwUHRy LCAwLCByZXF1ZXN0U2l6ZSk7CisJQXNzZXJ0KHRtcEZhc3RQYXRoTG9ja0FycmF5KTsKKwlm cFB0ciA9IHRtcEZhc3RQYXRoTG9ja0FycmF5OworCXJlcXVlc3RTaXplID0gRmFzdFBhdGhM b2NrQXJyYXlTaG1lbURlc2Muc2l6ZTsKKwltZW1zZXQoZnBQdHIsIDAsIHJlcXVlc3RTaXpl KTsKIAogCS8qIEZvciBhc3NlcnRzIGNoZWNraW5nIHdlIGRpZCBub3Qgb3ZlcmZsb3cuICov CiAJZnBFbmRQdHIgPSBmcFB0ciArIHJlcXVlc3RTaXplOwpAQCAtNDA1LDcgKzQxMiw3IEBA IEluaXRQcm9jZXNzKHZvaWQpCiAKIAkvKgogCSAqIERlY2lkZSB3aGljaCBsaXN0IHNob3Vs ZCBzdXBwbHkgb3VyIFBHUFJPQy4gIFRoaXMgbG9naWMgbXVzdCBtYXRjaCB0aGUKLQkgKiB3 YXkgdGhlIGZyZWVsaXN0cyB3ZXJlIGNvbnN0cnVjdGVkIGluIEluaXRQcm9jR2xvYmFsKCku CisJICogd2F5IHRoZSBmcmVlbGlzdHMgd2VyZSBjb25zdHJ1Y3RlZCBpbiBQcm9jR2xvYmFs U2htZW1Jbml0KCkuCiAJICovCiAJaWYgKEFtQXV0b1ZhY3V1bVdvcmtlclByb2Nlc3MoKSB8 fCBBbVNwZWNpYWxXb3JrZXJQcm9jZXNzKCkpCiAJCXByb2NnbG9iYWxsaXN0ID0gJlByb2NH bG9iYWwtPmF1dG92YWNGcmVlUHJvY3M7CkBAIC00NjAsNyArNDY3LDcgQEAgSW5pdFByb2Nl c3Modm9pZCkKIAogCS8qCiAJICogSW5pdGlhbGl6ZSBhbGwgZmllbGRzIG9mIE15UHJvYywg ZXhjZXB0IGZvciB0aG9zZSBwcmV2aW91c2x5Ci0JICogaW5pdGlhbGl6ZWQgYnkgSW5pdFBy b2NHbG9iYWwuCisJICogaW5pdGlhbGl6ZWQgYnkgUHJvY0dsb2JhbFNobWVtSW5pdC4KIAkg Ki8KIAlkbGlzdF9ub2RlX2luaXQoJk15UHJvYy0+ZnJlZVByb2NzTGluayk7CiAJTXlQcm9j LT53YWl0U3RhdHVzID0gUFJPQ19XQUlUX1NUQVRVU19PSzsKQEAgLTU5Myw3ICs2MDAsNyBA QCBJbml0UHJvY2Vzc1BoYXNlMih2b2lkKQogICogVGhpcyBpcyBjYWxsZWQgYnkgYmd3cml0 ZXIgYW5kIHNpbWlsYXIgcHJvY2Vzc2VzIHNvIHRoYXQgdGhleSB3aWxsIGhhdmUgYQogICog TXlQcm9jIHZhbHVlIHRoYXQncyByZWFsIGVub3VnaCB0byBsZXQgdGhlbSB3YWl0IGZvciBM V0xvY2tzLiAgVGhlIFBHUFJPQwogICogYW5kIHNlbWEgdGhhdCBhcmUgYXNzaWduZWQgYXJl IG9uZSBvZiB0aGUgZXh0cmEgb25lcyBjcmVhdGVkIGR1cmluZwotICogSW5pdFByb2NHbG9i YWwuCisgKiBQcm9jR2xvYmFsU2htZW1Jbml0LgogICoKICAqIEF1eGlsaWFyeSBwcm9jZXNz ZXMgYXJlIHByZXNlbnRseSBub3QgZXhwZWN0ZWQgdG8gd2FpdCBmb3IgcmVhbCAobG9ja21n cikKICAqIGxvY2tzLCBzbyB3ZSBuZWVkIG5vdCBzZXQgdXAgdGhlIGRlYWRsb2NrIGNoZWNr ZXIuICBUaGV5IGFyZSBuZXZlciBhZGRlZApAQCAtNjYyLDcgKzY2OSw3IEBAIEluaXRBdXhp bGlhcnlQcm9jZXNzKHZvaWQpCiAKIAkvKgogCSAqIEluaXRpYWxpemUgYWxsIGZpZWxkcyBv ZiBNeVByb2MsIGV4Y2VwdCBmb3IgdGhvc2UgcHJldmlvdXNseQotCSAqIGluaXRpYWxpemVk IGJ5IEluaXRQcm9jR2xvYmFsLgorCSAqIGluaXRpYWxpemVkIGJ5IFByb2NHbG9iYWxTaG1l bUluaXQuCiAJICovCiAJZGxpc3Rfbm9kZV9pbml0KCZNeVByb2MtPmZyZWVQcm9jc0xpbmsp OwogCU15UHJvYy0+d2FpdFN0YXR1cyA9IFBST0NfV0FJVF9TVEFUVVNfT0s7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdHJhbnNhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNz L3RyYW5zYW0uaAppbmRleCA2ZmE5MWJmY2RjMC4uNTVhNGFiMjZiMzQgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2FtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNz L3RyYW5zYW0uaApAQCAtMzQ1LDggKzM0NSw2IEBAIGV4dGVybiBUcmFuc2FjdGlvbklkIFRy YW5zYWN0aW9uSWRMYXRlc3QoVHJhbnNhY3Rpb25JZCBtYWlueGlkLAogZXh0ZXJuIFhMb2dS ZWNQdHIgVHJhbnNhY3Rpb25JZEdldENvbW1pdExTTihUcmFuc2FjdGlvbklkIHhpZCk7CiAK IC8qIGluIHRyYW5zYW0vdmFyc3VwLmMgKi8KLWV4dGVybiBTaXplIFZhcnN1cFNobWVtU2l6 ZSh2b2lkKTsKLWV4dGVybiB2b2lkIFZhcnN1cFNobWVtSW5pdCh2b2lkKTsKIGV4dGVybiBG dWxsVHJhbnNhY3Rpb25JZCBHZXROZXdUcmFuc2FjdGlvbklkKGJvb2wgaXNTdWJYYWN0KTsK IGV4dGVybiB2b2lkIEFkdmFuY2VOZXh0RnVsbFRyYW5zYWN0aW9uSWRQYXN0WGlkKFRyYW5z YWN0aW9uSWQgeGlkKTsKIGV4dGVybiBGdWxsVHJhbnNhY3Rpb25JZCBSZWFkTmV4dEZ1bGxU cmFuc2FjdGlvbklkKHZvaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9k c20uaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvZHNtLmgKaW5kZXggNDA3NjU3ZGYzZmYuLjFi ZGU3MWI0NDA2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2RzbS5oCisrKyBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvZHNtLmgKQEAgLTI2LDkgKzI2LDYgQEAgZXh0ZXJuIHZv aWQgZHNtX3Bvc3RtYXN0ZXJfc3RhcnR1cChQR1NobWVtSGVhZGVyICopOwogZXh0ZXJuIHZv aWQgZHNtX2JhY2tlbmRfc2h1dGRvd24odm9pZCk7CiBleHRlcm4gdm9pZCBkc21fZGV0YWNo X2FsbCh2b2lkKTsKIAotZXh0ZXJuIHNpemVfdCBkc21fZXN0aW1hdGVfc2l6ZSh2b2lkKTsK LWV4dGVybiB2b2lkIGRzbV9zaG1lbV9pbml0KHZvaWQpOwotCiAjaWZkZWYgRVhFQ19CQUNL RU5ECiBleHRlcm4gdm9pZCBkc21fc2V0X2NvbnRyb2xfaGFuZGxlKGRzbV9oYW5kbGUgaCk7 CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvZHNtX3JlZ2lzdHJ5 LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2RzbV9yZWdpc3RyeS5oCmluZGV4IDUwNmZhZTJj OWNhLi5hMjI2OWM4OWYwMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9kc21f cmVnaXN0cnkuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2RzbV9yZWdpc3RyeS5oCkBA IC0yMiw3ICsyMiw1IEBAIGV4dGVybiBkc2FfYXJlYSAqR2V0TmFtZWREU0EoY29uc3QgY2hh ciAqbmFtZSwgYm9vbCAqZm91bmQpOwogZXh0ZXJuIGRzaGFzaF90YWJsZSAqR2V0TmFtZWRE U0hhc2goY29uc3QgY2hhciAqbmFtZSwKIAkJCQkJCQkJCWNvbnN0IGRzaGFzaF9wYXJhbWV0 ZXJzICpwYXJhbXMsCiAJCQkJCQkJCQlib29sICpmb3VuZCk7Ci1leHRlcm4gU2l6ZSBEU01S ZWdpc3RyeVNobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIERTTVJlZ2lzdHJ5U2htZW1J bml0KHZvaWQpOwogCiAjZW5kaWYJCQkJCQkJLyogRFNNX1JFR0lTVFJZX0ggKi8KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcG1zaWduYWwuaCBiL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvcG1zaWduYWwuaAppbmRleCAyMDZmYjc4ZjhhNS4uMDAxZTZlZWE2MWMgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcG1zaWduYWwuaAorKysgYi9zcmMvaW5jbHVk ZS9zdG9yYWdlL3Btc2lnbmFsLmgKQEAgLTY2LDggKzY2LDYgQEAgZXh0ZXJuIFBHRExMSU1Q T1JUIHZvbGF0aWxlIFBNU2lnbmFsRGF0YSAqUE1TaWduYWxTdGF0ZTsKIC8qCiAgKiBwcm90 b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gcG1zaWduYWwuYwogICovCi1leHRlcm4gU2l6ZSBQ TVNpZ25hbFNobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIFBNU2lnbmFsU2htZW1Jbml0 KHZvaWQpOwogZXh0ZXJuIHZvaWQgU2VuZFBvc3RtYXN0ZXJTaWduYWwoUE1TaWduYWxSZWFz b24gcmVhc29uKTsKIGV4dGVybiBib29sIENoZWNrUG9zdG1hc3RlclNpZ25hbChQTVNpZ25h bFJlYXNvbiByZWFzb24pOwogZXh0ZXJuIHZvaWQgU2V0UXVpdFNpZ25hbFJlYXNvbihRdWl0 U2lnbmFsUmVhc29uIHJlYXNvbik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdl L3Byb2MuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCmluZGV4IDFkYWQxMjU3MDZl Li42MDczMmNjYjMzYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgK KysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgKQEAgLTU1MSw4ICs1NTEsNiBAQCBl eHRlcm4gUEdETExJTVBPUlQgUEdQUk9DICpBdXhpbGlhcnlQcm9jczsKICAqIEZ1bmN0aW9u IFByb3RvdHlwZXMKICAqLwogZXh0ZXJuIGludAlQcm9jR2xvYmFsU2VtYXModm9pZCk7Ci1l eHRlcm4gU2l6ZSBQcm9jR2xvYmFsU2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgSW5p dFByb2NHbG9iYWwodm9pZCk7CiBleHRlcm4gdm9pZCBJbml0UHJvY2Vzcyh2b2lkKTsKIGV4 dGVybiB2b2lkIEluaXRQcm9jZXNzUGhhc2UyKHZvaWQpOwogZXh0ZXJuIHZvaWQgSW5pdEF1 eGlsaWFyeVByb2Nlc3Modm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdl L3Byb2NhcnJheS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaAppbmRleCBh YmRmMDIxZTY2ZS4uZDcxOGE1YjU0MmYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvcHJvY2FycmF5LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaApA QCAtMTksOCArMTksNiBAQAogI2luY2x1ZGUgInV0aWxzL3NuYXBzaG90LmgiCiAKIAotZXh0 ZXJuIFNpemUgUHJvY0FycmF5U2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgUHJvY0Fy cmF5U2htZW1Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgUHJvY0FycmF5QWRkKFBHUFJPQyAq cHJvYyk7CiBleHRlcm4gdm9pZCBQcm9jQXJyYXlSZW1vdmUoUEdQUk9DICpwcm9jLCBUcmFu c2FjdGlvbklkIGxhdGVzdFhpZCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvcHJvY3NpZ25hbC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmgKaW5k ZXggMzQ4ZmJhNTNhOTMuLjAzMTg5NzAxNWY0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9z dG9yYWdlL3Byb2NzaWduYWwuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWdu YWwuaApAQCAtNjMsOSArNjMsNiBAQCB0eXBlZGVmIGVudW0KIC8qCiAgKiBwcm90b3R5cGVz IGZvciBmdW5jdGlvbnMgaW4gcHJvY3NpZ25hbC5jCiAgKi8KLWV4dGVybiBTaXplIFByb2NT aWduYWxTaG1lbVNpemUodm9pZCk7Ci1leHRlcm4gdm9pZCBQcm9jU2lnbmFsU2htZW1Jbml0 KHZvaWQpOwotCiBleHRlcm4gdm9pZCBQcm9jU2lnbmFsSW5pdChjb25zdCB1aW50OCAqY2Fu Y2VsX2tleSwgaW50IGNhbmNlbF9rZXlfbGVuKTsKIGV4dGVybiBpbnQJU2VuZFByb2NTaWdu YWwocGlkX3QgcGlkLCBQcm9jU2lnbmFsUmVhc29uIHJlYXNvbiwKIAkJCQkJCSAgIFByb2NO dW1iZXIgcHJvY051bWJlcik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Np bnZhbGFkdC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zaW52YWxhZHQuaAppbmRleCAxMjJk YmNkZjE5Zi4uMjA4ZWE5ZDA1MWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv c2ludmFsYWR0LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zaW52YWxhZHQuaApAQCAt MjcsOCArMjcsNiBAQAogLyoKICAqIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiBzaW52 YWxhZHQuYwogICovCi1leHRlcm4gU2l6ZSBTaGFyZWRJbnZhbFNobWVtU2l6ZSh2b2lkKTsK LWV4dGVybiB2b2lkIFNoYXJlZEludmFsU2htZW1Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQg U2hhcmVkSW52YWxCYWNrZW5kSW5pdChib29sIHNlbmRPbmx5KTsKIAogZXh0ZXJuIHZvaWQg U0lJbnNlcnREYXRhRW50cmllcyhjb25zdCBTaGFyZWRJbnZhbGlkYXRpb25NZXNzYWdlICpk YXRhLCBpbnQgbik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3Rl bWxpc3QuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oCmluZGV4IDdk ZmJkMDNkNmU1Li41YzExYjJiMzQ5OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9zdWJzeXN0ZW1saXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1s aXN0LmgKQEAgLTIwLDUgKzIwLDIzIEBACiAgKiBvZiB0aGVzZSBtYXR0ZXIuCiAgKi8KIAor UEdfU0hNRU1fU1VCU1lTVEVNKGRzbV9zaG1lbV9jYWxsYmFja3MpCitQR19TSE1FTV9TVUJT WVNURU0oRFNNUmVnaXN0cnlTaG1lbUNhbGxiYWNrcykKKworLyogeGxvZywgY2xvZywgYW5k IGJ1ZmZlcnMgKi8KK1BHX1NITUVNX1NVQlNZU1RFTShWYXJzdXBTaG1lbUNhbGxiYWNrcykK KworLyogcHJvY2VzcyB0YWJsZSAqLworUEdfU0hNRU1fU1VCU1lTVEVNKFByb2NHbG9iYWxT aG1lbUNhbGxiYWNrcykKK1BHX1NITUVNX1NVQlNZU1RFTShQcm9jQXJyYXlTaG1lbUNhbGxi YWNrcykKKworLyogc2hhcmVkLWludmFsIG1lc3NhZ2luZyAqLworUEdfU0hNRU1fU1VCU1lT VEVNKFNoYXJlZEludmFsU2htZW1DYWxsYmFja3MpCisKKy8qIGludGVycHJvY2VzcyBzaWdu YWxpbmcgbWVjaGFuaXNtcyAqLworUEdfU0hNRU1fU1VCU1lTVEVNKFBNU2lnbmFsU2htZW1D YWxsYmFja3MpCitQR19TSE1FTV9TVUJTWVNURU0oUHJvY1NpZ25hbFNobWVtQ2FsbGJhY2tz KQorCisvKiBvdGhlciBtb2R1bGVzIHRoYXQgbmVlZCBzb21lIHNoYXJlZCBtZW1vcnkgc3Bh Y2UgKi8KIFBHX1NITUVNX1NVQlNZU1RFTShXYWl0RXZlbnRDdXN0b21TaG1lbUNhbGxiYWNr cykKIFBHX1NITUVNX1NVQlNZU1RFTShJbmplY3Rpb25Qb2ludFNobWVtQ2FsbGJhY2tzKQot LSAKMi40Ny4zCgo= --------------cltwtZYaOf76t571xokamZd0 Content-Type: text/x-patch; charset=UTF-8; name="v9-0013-Convert-SLRUs-to-use-the-new-interface.patch" Content-Disposition: attachment; filename="v9-0013-Convert-SLRUs-to-use-the-new-interface.patch" Content-Transfer-Encoding: base64 RnJvbSBjMmMxMjkzM2VmNDAwZWZkNzI5ZmI0YjlkM2YwYzg2ZDdjNGM3OWQ1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgMjYgTWFyIDIwMjYgMjA6Mzk6NDYgKzAyMDAK U3ViamVjdDogW1BBVENIIHY5IDEzLzE2XSBDb252ZXJ0IFNMUlVzIHRvIHVzZSB0aGUgbmV3 IGludGVyZmFjZQoKSSByZXBsYWNlZCB0aGUgb2xkIFNpbXBsZUxydUluaXQoKSBmdW5jdGlv biB3aXRob3V0IGEgYmFja3dhcmRzCmNvbXBhdGliaWxpdHkgd3JhcHBlciwgYmVjYXVzZSBm ZXcgZXh0ZW5zaW9ucyBkZWZpbmUgdGhlaXIgb3duIFNMUlVzLgotLS0KIHNyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL2Nsb2cuYyAgICAgICAgfCAgNTUgKystLQogc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0vY29tbWl0X3RzLmMgICB8ICA5MiArKystLS0KIHNyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jICAgfCAxNDAgKysrKystLS0tCiBzcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1LmMgICAgICAgIHwgMzY0ICsrKysrKysrKysrKy0t LS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0cmFucy5jICAgIHwg IDU3ICsrLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMgICAgICAgICAgICAgfCAx MTcgKysrKy0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyAgICAgICAgICAg fCAgMTYgLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYyAgICAgICAgICB8ICAg NyArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMgICAgIHwgMjk5ICsr KysrKysrKy0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9z bHJ1LmMgfCAgIDEgKwogc3JjL2luY2x1ZGUvYWNjZXNzL2Nsb2cuaCAgICAgICAgICAgICAg ICB8ICAgMiAtCiBzcmMvaW5jbHVkZS9hY2Nlc3MvY29tbWl0X3RzLmggICAgICAgICAgIHwg ICAyIC0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaCAgICAgICAgICAgfCAgIDIg LQogc3JjL2luY2x1ZGUvYWNjZXNzL3NscnUuaCAgICAgICAgICAgICAgICB8IDEwOCArKysr LS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3Mvc3VidHJhbnMuaCAgICAgICAgICAgIHwgICAyIC0K IHNyYy9pbmNsdWRlL2NvbW1hbmRzL2FzeW5jLmggICAgICAgICAgICAgfCAgIDMgLQogc3Jj L2luY2x1ZGUvc3RvcmFnZS9wcmVkaWNhdGUuaCAgICAgICAgICB8ICAgNSAtCiBzcmMvaW5j bHVkZS9zdG9yYWdlL3NobWVtLmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRl L3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oICAgICAgfCAgIDggKwogc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X3NscnUvdGVzdF9zbHJ1LmMgICB8IDExMCArKystLS0tCiBzcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgIHwgICA0ICstCiAyMSBmaWxlcyBjaGFuZ2Vk LCA3MjAgaW5zZXJ0aW9ucygrKSwgNjc1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL2Nsb2cuYwppbmRleCBjNjU0ZTA5MjliMy4uODdmN2Y1NzA3ZGUgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJw Z190cmFjZS5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJv Yy5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgogI2luY2x1ZGUgInN0b3Jh Z2Uvc3luYy5oIgogI2luY2x1ZGUgInV0aWxzL2d1Y19ob29rcy5oIgogI2luY2x1ZGUgInV0 aWxzL3dhaXRfZXZlbnQuaCIKQEAgLTEwNiwxMyArMTA3LDIxIEBAIFRyYW5zYWN0aW9uSWRU b1BhZ2UoVHJhbnNhY3Rpb25JZCB4aWQpCiAvKgogICogTGluayB0byBzaGFyZWQtbWVtb3J5 IGRhdGEgc3RydWN0dXJlcyBmb3IgQ0xPRyBjb250cm9sCiAgKi8KLXN0YXRpYyBTbHJ1Q3Rs RGF0YSBYYWN0Q3RsRGF0YTsKK3N0YXRpYyB2b2lkIENMT0dTaG1lbVJlcXVlc3Qodm9pZCAq YXJnKTsKK3N0YXRpYyB2b2lkIENMT0dTaG1lbUluaXQodm9pZCAqYXJnKTsKK3N0YXRpYyBi b29sIENMT0dQYWdlUHJlY2VkZXMoaW50NjQgcGFnZTEsIGludDY0IHBhZ2UyKTsKK3N0YXRp YyBpbnQJY2xvZ19lcnJkZXRhaWxfZm9yX2lvX2Vycm9yKGNvbnN0IHZvaWQgKm9wYXF1ZV9k YXRhKTsKIAotI2RlZmluZSBYYWN0Q3RsICgmWGFjdEN0bERhdGEpCitjb25zdCBTaG1lbUNh bGxiYWNrcyBDTE9HU2htZW1DYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBDTE9HU2ht ZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gQ0xPR1NobWVtSW5pdCwKK307CisKK3N0YXRpYyBT bHJ1RGVzYyBYYWN0U2xydURlc2M7CisKKyNkZWZpbmUgWGFjdEN0bCAoJlhhY3RTbHJ1RGVz YykKIAogCi1zdGF0aWMgYm9vbCBDTE9HUGFnZVByZWNlZGVzKGludDY0IHBhZ2UxLCBpbnQ2 NCBwYWdlMik7Ci1zdGF0aWMgaW50CWNsb2dfZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihjb25z dCB2b2lkICpvcGFxdWVfZGF0YSk7CiBzdGF0aWMgdm9pZCBXcml0ZVRydW5jYXRlWGxvZ1Jl YyhpbnQ2NCBwYWdlbm8sIFRyYW5zYWN0aW9uSWQgb2xkZXN0WGFjdCwKIAkJCQkJCQkJIE9p ZCBvbGRlc3RYYWN0RGIpOwogc3RhdGljIHZvaWQgVHJhbnNhY3Rpb25JZFNldFBhZ2VTdGF0 dXMoVHJhbnNhY3Rpb25JZCB4aWQsIGludCBuc3VieGlkcywKQEAgLTc3NSwxNiArNzg0LDEw IEBAIENMT0dTaG1lbUJ1ZmZlcnModm9pZCkKIH0KIAogLyoKLSAqIEluaXRpYWxpemF0aW9u IG9mIHNoYXJlZCBtZW1vcnkgZm9yIENMT0cKKyAqIFJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkg Zm9yIENMT0cKICAqLwotU2l6ZQotQ0xPR1NobWVtU2l6ZSh2b2lkKQotewotCXJldHVybiBT aW1wbGVMcnVTaG1lbVNpemUoQ0xPR1NobWVtQnVmZmVycygpLCBDTE9HX0xTTlNfUEVSX1BB R0UpOwotfQotCi12b2lkCi1DTE9HU2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAorQ0xP R1NobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7CiAJLyogSWYgYXV0by10dW5pbmcgaXMgcmVx dWVzdGVkLCBub3cgaXMgdGhlIHRpbWUgdG8gZG8gaXQgKi8KIAlpZiAodHJhbnNhY3Rpb25f YnVmZmVycyA9PSAwKQpAQCAtODA2LDEyICs4MDksMjYgQEAgQ0xPR1NobWVtSW5pdCh2b2lk KQogCQkJCQkJCVBHQ19TX09WRVJSSURFKTsKIAl9CiAJQXNzZXJ0KHRyYW5zYWN0aW9uX2J1 ZmZlcnMgIT0gMCk7CisJU2ltcGxlTHJ1UmVxdWVzdCgmWGFjdFNscnVEZXNjLAorCQkubmFt ZSA9ICJ0cmFuc2FjdGlvbiIsCisJCS5EaXIgPSAicGdfeGFjdCIsCisJCS5sb25nX3NlZ21l bnRfbmFtZXMgPSBmYWxzZSwKKworCQkubnNsb3RzID0gQ0xPR1NobWVtQnVmZmVycygpLAor CQkubmxzbnMgPSBDTE9HX0xTTlNfUEVSX1BBR0UsCisKKwkJLnN5bmNfaGFuZGxlciA9IFNZ TkNfSEFORExFUl9DTE9HLAorCQkuUGFnZVByZWNlZGVzID0gQ0xPR1BhZ2VQcmVjZWRlcywK KwkJLmVycmRldGFpbF9mb3JfaW9fZXJyb3IgPSBjbG9nX2VycmRldGFpbF9mb3JfaW9fZXJy b3IsCiAKLQlYYWN0Q3RsLT5QYWdlUHJlY2VkZXMgPSBDTE9HUGFnZVByZWNlZGVzOwotCVhh Y3RDdGwtPmVycmRldGFpbF9mb3JfaW9fZXJyb3IgPSBjbG9nX2VycmRldGFpbF9mb3JfaW9f ZXJyb3I7Ci0JU2ltcGxlTHJ1SW5pdChYYWN0Q3RsLCAidHJhbnNhY3Rpb24iLCBDTE9HU2ht ZW1CdWZmZXJzKCksIENMT0dfTFNOU19QRVJfUEFHRSwKLQkJCQkgICJwZ194YWN0IiwgTFdU UkFOQ0hFX1hBQ1RfQlVGRkVSLAotCQkJCSAgTFdUUkFOQ0hFX1hBQ1RfU0xSVSwgU1lOQ19I QU5ETEVSX0NMT0csIGZhbHNlKTsKKwkJLmJ1ZmZlcl90cmFuY2hlX2lkID0gTFdUUkFOQ0hF X1hBQ1RfQlVGRkVSLAorCQkuYmFua190cmFuY2hlX2lkID0gTFdUUkFOQ0hFX1hBQ1RfU0xS VSwKKwkJKTsKK30KKworc3RhdGljIHZvaWQKK0NMT0dTaG1lbUluaXQodm9pZCAqYXJnKQor ewogCVNscnVQYWdlUHJlY2VkZXNVbml0VGVzdHMoWGFjdEN0bCwgQ0xPR19YQUNUU19QRVJf UEFHRSk7CiB9CiAKQEAgLTgyNyw3ICs4NDQsNyBAQCBjaGVja190cmFuc2FjdGlvbl9idWZm ZXJzKGludCAqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCiAvKgog ICogVGhpcyBmdW5jIG11c3QgYmUgY2FsbGVkIE9OQ0Ugb24gc3lzdGVtIGluc3RhbGwuICBJ dCBjcmVhdGVzCiAgKiB0aGUgaW5pdGlhbCBDTE9HIHNlZ21lbnQuICAoVGhlIENMT0cgZGly ZWN0b3J5IGlzIGFzc3VtZWQgdG8KLSAqIGhhdmUgYmVlbiBjcmVhdGVkIGJ5IGluaXRkYiwg YW5kIENMT0dTaG1lbUluaXQgbXVzdCBoYXZlIGJlZW4KKyAqIGhhdmUgYmVlbiBjcmVhdGVk IGJ5IGluaXRkYiwgYW5kIENMT0dTaG1lbUluaXQgbXVzdCBoYXZlIGJlZW4gWFhYCiAgKiBj YWxsZWQgYWxyZWFkeS4pCiAgKi8KIHZvaWQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL2NvbW1pdF90cy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v Y29tbWl0X3RzLmMKaW5kZXggMzYyMTlkZDEzY2MuLjIzNmQ4ZmI0YmFhIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYwpAQCAtMzAsNiArMzAsNyBAQAogI2lu Y2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJz dG9yYWdlL3NobWVtLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5j bHVkZSAidXRpbHMvZm1ncnByb3Rvcy5oIgogI2luY2x1ZGUgInV0aWxzL2d1Y19ob29rcy5o IgogI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgpAQCAtODAsOSArODEsMTkgQEAgVHJh bnNhY3Rpb25JZFRvQ1RzUGFnZShUcmFuc2FjdGlvbklkIHhpZCkKIC8qCiAgKiBMaW5rIHRv IHNoYXJlZC1tZW1vcnkgZGF0YSBzdHJ1Y3R1cmVzIGZvciBDb21taXRUcyBjb250cm9sCiAg Ki8KLXN0YXRpYyBTbHJ1Q3RsRGF0YSBDb21taXRUc0N0bERhdGE7CitzdGF0aWMgdm9pZCBD b21taXRUc1NobWVtUmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgQ29tbWl0VHNT aG1lbUluaXQodm9pZCAqYXJnKTsKK3N0YXRpYyBib29sIENvbW1pdFRzUGFnZVByZWNlZGVz KGludDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMik7CitzdGF0aWMgaW50CWNvbW1pdF90c19lcnJk ZXRhaWxfZm9yX2lvX2Vycm9yKGNvbnN0IHZvaWQgKm9wYXF1ZV9kYXRhKTsKKworY29uc3Qg U2htZW1DYWxsYmFja3MgQ29tbWl0VHNTaG1lbUNhbGxiYWNrcyA9IHsKKwkucmVxdWVzdF9m biA9IENvbW1pdFRzU2htZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gQ29tbWl0VHNTaG1lbUlu aXQsCit9OworCitzdGF0aWMgU2xydURlc2MgQ29tbWl0VHNTbHJ1RGVzYzsKIAotI2RlZmlu ZSBDb21taXRUc0N0bCAoJkNvbW1pdFRzQ3RsRGF0YSkKKyNkZWZpbmUgQ29tbWl0VHNDdGwg KCZDb21taXRUc1NscnVEZXNjKQogCiAvKgogICogV2Uga2VlcCBhIGNhY2hlIG9mIHRoZSBs YXN0IHZhbHVlIHNldCBpbiBzaGFyZWQgbWVtb3J5LgpAQCAtMTA0LDYgKzExNSw5IEBAIHR5 cGVkZWYgc3RydWN0IENvbW1pdFRpbWVzdGFtcFNoYXJlZAogCiBzdGF0aWMgQ29tbWl0VGlt ZXN0YW1wU2hhcmVkICpjb21taXRUc1NoYXJlZDsKIAorc3RhdGljIHZvaWQgQ29tbWl0VHNT aG1lbUluaXQodm9pZCAqYXJnKTsKKworc3RhdGljIFNobWVtU3RydWN0RGVzYyBDb21taXRU c1NobWVtRGVzYzsKIAogLyogR1VDIHZhcmlhYmxlICovCiBib29sCQl0cmFja19jb21taXRf dGltZXN0YW1wOwpAQCAtMTE0LDggKzEyOCw2IEBAIHN0YXRpYyB2b2lkIFNldFhpZENvbW1p dFRzSW5QYWdlKFRyYW5zYWN0aW9uSWQgeGlkLCBpbnQgbnN1YnhpZHMsCiBzdGF0aWMgdm9p ZCBUcmFuc2FjdGlvbklkU2V0Q29tbWl0VHMoVHJhbnNhY3Rpb25JZCB4aWQsIFRpbWVzdGFt cFR6IHRzLAogCQkJCQkJCQkJIFJlcGxPcmlnaW5JZCBub2RlaWQsIGludCBzbG90bm8pOwog c3RhdGljIHZvaWQgZXJyb3JfY29tbWl0X3RzX2Rpc2FibGVkKHZvaWQpOwotc3RhdGljIGJv b2wgQ29tbWl0VHNQYWdlUHJlY2VkZXMoaW50NjQgcGFnZTEsIGludDY0IHBhZ2UyKTsKLXN0 YXRpYyBpbnQJY29tbWl0X3RzX2VycmRldGFpbF9mb3JfaW9fZXJyb3IoY29uc3Qgdm9pZCAq b3BhcXVlX2RhdGEpOwogc3RhdGljIHZvaWQgQWN0aXZhdGVDb21taXRUcyh2b2lkKTsKIHN0 YXRpYyB2b2lkIERlYWN0aXZhdGVDb21taXRUcyh2b2lkKTsKIHN0YXRpYyB2b2lkIFdyaXRl VHJ1bmNhdGVYbG9nUmVjKGludDY0IHBhZ2VubywgVHJhbnNhY3Rpb25JZCBvbGRlc3RYaWQp OwpAQCAtNTEyLDI0ICs1MjQsMTIgQEAgQ29tbWl0VHNTaG1lbUJ1ZmZlcnModm9pZCkKIH0K IAogLyoKLSAqIFNoYXJlZCBtZW1vcnkgc2l6aW5nIGZvciBDb21taXRUcworICogUmVnaXN0 ZXIgQ29tbWl0VHMgc2hhcmVkIG1lbW9yeSBuZWVkcyBhdCBzeXN0ZW0gc3RhcnR1cCAocG9z dG1hc3RlciBzdGFydAorICogb3Igc3RhbmRhbG9uZSBiYWNrZW5kKQogICovCi1TaXplCi1D b21taXRUc1NobWVtU2l6ZSh2b2lkKQotewotCXJldHVybiBTaW1wbGVMcnVTaG1lbVNpemUo Q29tbWl0VHNTaG1lbUJ1ZmZlcnMoKSwgMCkgKwotCQlzaXplb2YoQ29tbWl0VGltZXN0YW1w U2hhcmVkKTsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgQ29tbWl0VHMgYXQgc3lzdGVtIHN0 YXJ0dXAgKHBvc3RtYXN0ZXIgc3RhcnQgb3Igc3RhbmRhbG9uZQotICogYmFja2VuZCkKLSAq Lwotdm9pZAotQ29tbWl0VHNTaG1lbUluaXQodm9pZCkKK3N0YXRpYyB2b2lkCitDb21taXRU c1NobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7Ci0JYm9vbAkJZm91bmQ7Ci0KIAkvKiBJZiBh dXRvLXR1bmluZyBpcyByZXF1ZXN0ZWQsIG5vdyBpcyB0aGUgdGltZSB0byBkbyBpdCAqLwog CWlmIChjb21taXRfdGltZXN0YW1wX2J1ZmZlcnMgPT0gMCkKIAl7CkBAIC01NTAsMzEgKzU1 MCwzNyBAQCBDb21taXRUc1NobWVtSW5pdCh2b2lkKQogCQkJCQkJCVBHQ19TX09WRVJSSURF KTsKIAl9CiAJQXNzZXJ0KGNvbW1pdF90aW1lc3RhbXBfYnVmZmVycyAhPSAwKTsKKwlTaW1w bGVMcnVSZXF1ZXN0KCZDb21taXRUc1NscnVEZXNjLAorCQkubmFtZSA9ICJjb21taXRfdGlt ZXN0YW1wIiwKKwkJLkRpciA9ICJwZ19jb21taXRfdHMiLAorCQkubG9uZ19zZWdtZW50X25h bWVzID0gZmFsc2UsCisKKwkJLm5zbG90cyA9IENvbW1pdFRzU2htZW1CdWZmZXJzKCksCisK KwkJLlBhZ2VQcmVjZWRlcyA9IENvbW1pdFRzUGFnZVByZWNlZGVzLAorCQkuZXJyZGV0YWls X2Zvcl9pb19lcnJvciA9IGNvbW1pdF90c19lcnJkZXRhaWxfZm9yX2lvX2Vycm9yLAorCisJ CS5zeW5jX2hhbmRsZXIgPSBTWU5DX0hBTkRMRVJfQ09NTUlUX1RTLAorCQkuYnVmZmVyX3Ry YW5jaGVfaWQgPSBMV1RSQU5DSEVfQ09NTUlUVFNfQlVGRkVSLAorCQkuYmFua190cmFuY2hl X2lkID0gTFdUUkFOQ0hFX0NPTU1JVFRTX1NMUlUsCisJCSk7CisKKwlTaG1lbVJlcXVlc3RT dHJ1Y3QoJkNvbW1pdFRzU2htZW1EZXNjLAorCQkubmFtZSA9ICJDb21taXRUcyBzaGFyZWQi LAorCQkuc2l6ZSA9IHNpemVvZihDb21taXRUaW1lc3RhbXBTaGFyZWQpLAorCQkucHRyID0g KHZvaWQgKiopICZjb21taXRUc1NoYXJlZCwKKwkJKTsKK30KIAotCUNvbW1pdFRzQ3RsLT5Q YWdlUHJlY2VkZXMgPSBDb21taXRUc1BhZ2VQcmVjZWRlczsKLQlDb21taXRUc0N0bC0+ZXJy ZGV0YWlsX2Zvcl9pb19lcnJvciA9IGNvbW1pdF90c19lcnJkZXRhaWxfZm9yX2lvX2Vycm9y OwotCVNpbXBsZUxydUluaXQoQ29tbWl0VHNDdGwsICJjb21taXRfdGltZXN0YW1wIiwgQ29t bWl0VHNTaG1lbUJ1ZmZlcnMoKSwgMCwKLQkJCQkgICJwZ19jb21taXRfdHMiLCBMV1RSQU5D SEVfQ09NTUlUVFNfQlVGRkVSLAotCQkJCSAgTFdUUkFOQ0hFX0NPTU1JVFRTX1NMUlUsCi0J CQkJICBTWU5DX0hBTkRMRVJfQ09NTUlUX1RTLAotCQkJCSAgZmFsc2UpOwotCVNscnVQYWdl UHJlY2VkZXNVbml0VGVzdHMoQ29tbWl0VHNDdGwsIENPTU1JVF9UU19YQUNUU19QRVJfUEFH RSk7Ci0KLQljb21taXRUc1NoYXJlZCA9IFNobWVtSW5pdFN0cnVjdCgiQ29tbWl0VHMgc2hh cmVkIiwKLQkJCQkJCQkJCSBzaXplb2YoQ29tbWl0VGltZXN0YW1wU2hhcmVkKSwKLQkJCQkJ CQkJCSAmZm91bmQpOwotCi0JaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKLQl7Ci0JCUFzc2Vy dCghZm91bmQpOworc3RhdGljIHZvaWQKK0NvbW1pdFRzU2htZW1Jbml0KHZvaWQgKmFyZykK K3sKKwljb21taXRUc1NoYXJlZC0+eGlkTGFzdENvbW1pdCA9IEludmFsaWRUcmFuc2FjdGlv bklkOworCVRJTUVTVEFNUF9OT0JFR0lOKGNvbW1pdFRzU2hhcmVkLT5kYXRhTGFzdENvbW1p dC50aW1lKTsKKwljb21taXRUc1NoYXJlZC0+ZGF0YUxhc3RDb21taXQubm9kZWlkID0gSW52 YWxpZFJlcGxPcmlnaW5JZDsKKwljb21taXRUc1NoYXJlZC0+Y29tbWl0VHNBY3RpdmUgPSBm YWxzZTsKIAotCQljb21taXRUc1NoYXJlZC0+eGlkTGFzdENvbW1pdCA9IEludmFsaWRUcmFu c2FjdGlvbklkOwotCQlUSU1FU1RBTVBfTk9CRUdJTihjb21taXRUc1NoYXJlZC0+ZGF0YUxh c3RDb21taXQudGltZSk7Ci0JCWNvbW1pdFRzU2hhcmVkLT5kYXRhTGFzdENvbW1pdC5ub2Rl aWQgPSBJbnZhbGlkUmVwbE9yaWdpbklkOwotCQljb21taXRUc1NoYXJlZC0+Y29tbWl0VHNB Y3RpdmUgPSBmYWxzZTsKLQl9Ci0JZWxzZQotCQlBc3NlcnQoZm91bmQpOworCVNscnVQYWdl UHJlY2VkZXNVbml0VGVzdHMoQ29tbWl0VHNDdGwsIENPTU1JVF9UU19YQUNUU19QRVJfUEFH RSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9t dWx0aXhhY3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCmlu ZGV4IDlmOGQ1NDJjMDk4Li45NDBhYzVhNzhkNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vbXVsdGl4YWN0LmMKQEAgLTgzLDYgKzgzLDcgQEAKICNpbmNsdWRlICJzdG9yYWdl L3Btc2lnbmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKICNp bmNsdWRlICJ1dGlscy9ndWNfaG9va3MuaCIKICNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25f cG9pbnQuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKQEAgLTExMywxMSArMTE0 LDE2IEBAIFByZXZpb3VzTXVsdGlYYWN0SWQoTXVsdGlYYWN0SWQgbXVsdGkpCiAvKgogICog TGlua3MgdG8gc2hhcmVkLW1lbW9yeSBkYXRhIHN0cnVjdHVyZXMgZm9yIE11bHRpWGFjdCBj b250cm9sCiAgKi8KLXN0YXRpYyBTbHJ1Q3RsRGF0YSBNdWx0aVhhY3RPZmZzZXRDdGxEYXRh Owotc3RhdGljIFNscnVDdGxEYXRhIE11bHRpWGFjdE1lbWJlckN0bERhdGE7CitzdGF0aWMg Ym9vbCBNdWx0aVhhY3RPZmZzZXRQYWdlUHJlY2VkZXMoaW50NjQgcGFnZTEsIGludDY0IHBh Z2UyKTsKK3N0YXRpYyBpbnQJTXVsdGlYYWN0T2Zmc2V0SW9FcnJvckRldGFpbChjb25zdCB2 b2lkICpvcGFxdWVfZGF0YSk7CitzdGF0aWMgYm9vbCBNdWx0aVhhY3RNZW1iZXJQYWdlUHJl Y2VkZXMoaW50NjQgcGFnZTEsIGludDY0IHBhZ2UyKTsKK3N0YXRpYyBpbnQJTXVsdGlYYWN0 TWVtYmVySW9FcnJvckRldGFpbChjb25zdCB2b2lkICpvcGFxdWVfZGF0YSk7CisKK3N0YXRp YyBTbHJ1RGVzYyBNdWx0aVhhY3RPZmZzZXRTbHJ1RGVzYzsKK3N0YXRpYyBTbHJ1RGVzYyBN dWx0aVhhY3RNZW1iZXJTbHJ1RGVzYzsKIAotI2RlZmluZSBNdWx0aVhhY3RPZmZzZXRDdGwJ KCZNdWx0aVhhY3RPZmZzZXRDdGxEYXRhKQotI2RlZmluZSBNdWx0aVhhY3RNZW1iZXJDdGwJ KCZNdWx0aVhhY3RNZW1iZXJDdGxEYXRhKQorI2RlZmluZSBNdWx0aVhhY3RPZmZzZXRDdGwJ KCZNdWx0aVhhY3RPZmZzZXRTbHJ1RGVzYykKKyNkZWZpbmUgTXVsdGlYYWN0TWVtYmVyQ3Rs CSgmTXVsdGlYYWN0TWVtYmVyU2xydURlc2MpCiAKIC8qCiAgKiBNdWx0aVhhY3Qgc3RhdGUg c2hhcmVkIGFjcm9zcyBhbGwgYmFja2VuZHMuICBBbGwgdGhpcyBzdGF0ZSBpcyBwcm90ZWN0 ZWQKQEAgLTIyMCw2ICsyMjYsMTUgQEAgc3RhdGljIE11bHRpWGFjdFN0YXRlRGF0YSAqTXVs dGlYYWN0U3RhdGU7CiBzdGF0aWMgTXVsdGlYYWN0SWQgKk9sZGVzdE1lbWJlck1YYWN0SWQ7 CiBzdGF0aWMgTXVsdGlYYWN0SWQgKk9sZGVzdFZpc2libGVNWGFjdElkOwogCitzdGF0aWMg dm9pZCBNdWx0aVhhY3RTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIE11 bHRpWGFjdFNobWVtSW5pdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgTXVsdGlYYWN0U2ht ZW1BdHRhY2godm9pZCAqYXJnKTsKKworY29uc3QgU2htZW1DYWxsYmFja3MgTXVsdGlYYWN0 U2htZW1DYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBNdWx0aVhhY3RTaG1lbVJlcXVl c3QsCisJLmluaXRfZm4gPSBNdWx0aVhhY3RTaG1lbUluaXQsCisJLmF0dGFjaF9mbiA9IE11 bHRpWGFjdFNobWVtQXR0YWNoLAorfTsKIAogc3RhdGljIGlubGluZSBNdWx0aVhhY3RJZCAq CiBNeU9sZGVzdE1lbWJlck1YYWN0SWRTbG90KHZvaWQpCkBAIC0zMjEsMTAgKzMzNiw2IEBA IHR5cGVkZWYgc3RydWN0IE11bHRpWGFjdE1lbWJlclNscnVSZWFkQ29udGV4dAogCU11bHRp WGFjdE9mZnNldCBvZmZzZXQ7CiB9IE11bHRpWGFjdE1lbWJlclNscnVSZWFkQ29udGV4dDsK IAotc3RhdGljIGJvb2wgTXVsdGlYYWN0T2Zmc2V0UGFnZVByZWNlZGVzKGludDY0IHBhZ2Ux LCBpbnQ2NCBwYWdlMik7Ci1zdGF0aWMgYm9vbCBNdWx0aVhhY3RNZW1iZXJQYWdlUHJlY2Vk ZXMoaW50NjQgcGFnZTEsIGludDY0IHBhZ2UyKTsKLXN0YXRpYyBpbnQJTXVsdGlYYWN0T2Zm c2V0SW9FcnJvckRldGFpbChjb25zdCB2b2lkICpvcGFxdWVfZGF0YSk7Ci1zdGF0aWMgaW50 CU11bHRpWGFjdE1lbWJlcklvRXJyb3JEZXRhaWwoY29uc3Qgdm9pZCAqb3BhcXVlX2RhdGEp Owogc3RhdGljIHZvaWQgRXh0ZW5kTXVsdGlYYWN0T2Zmc2V0KE11bHRpWGFjdElkIG11bHRp KTsKIHN0YXRpYyB2b2lkIEV4dGVuZE11bHRpWGFjdE1lbWJlcihNdWx0aVhhY3RPZmZzZXQg b2Zmc2V0LCBpbnQgbm1lbWJlcnMpOwogc3RhdGljIHZvaWQgU2V0T2xkZXN0T2Zmc2V0KHZv aWQpOwpAQCAtMTc0Nyw4MCArMTc1OCw4MyBAQCBtdWx0aXhhY3RfdHdvcGhhc2VfcG9zdGFi b3J0KEZ1bGxUcmFuc2FjdGlvbklkIGZ4aWQsIHVpbnQxNiBpbmZvLAogCW11bHRpeGFjdF90 d29waGFzZV9wb3N0Y29tbWl0KGZ4aWQsIGluZm8sIHJlY2RhdGEsIGxlbik7CiB9CiAKKwog LyoKLSAqIEluaXRpYWxpemF0aW9uIG9mIHNoYXJlZCBtZW1vcnkgZm9yIE11bHRpWGFjdC4K LSAqCi0gKiBNdWx0aVhhY3RTaGFyZWRTdGF0ZVNobWVtU2l6ZSgpIGNhbGN1bGF0ZXMgdGhl IHNpemUgb2YgdGhlIE11bHRpWGFjdFN0YXRlCi0gKiBzdHJ1Y3QsIGFuZCB0aGUgdHdvIHBl ci1iYWNrZW5kIE11bHRpWGFjdElkIGFycmF5cy4gIFRoZXkgYXJlIGNhcnZlZCBvdXQgb2YK LSAqIHRoZSBzYW1lIGFsbG9jYXRpb24uICBNdWx0aVhhY3RTaG1lbVNpemUoKSBhZGRpdGlv bmFsbHkgaW5jbHVkZXMgdGhlIG1lbW9yeQotICogbmVlZGVkIGZvciB0aGUgdHdvIFNMUlUg YXJlYXMuCisgKiBSZWdpc3RlciBzaGFyZWQgbWVtb3J5IG5lZWRzIGZvciBNdWx0aVhhY3Qu CiAgKi8KLXN0YXRpYyBTaXplCi1NdWx0aVhhY3RTaGFyZWRTdGF0ZVNobWVtU2l6ZSh2b2lk KQorc3RhdGljIHZvaWQKK011bHRpWGFjdFNobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7CisJ c3RhdGljIFNobWVtU3RydWN0RGVzYyBNdWx0aVhhY3RTaG1lbURlc2M7CiAJU2l6ZQkJc2l6 ZTsKIAorCS8qCisJICogQ2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSBNdWx0aVhhY3RTdGF0 ZSBzdHJ1Y3QsIGFuZCB0aGUgdHdvCisJICogcGVyLWJhY2tlbmQgTXVsdGlYYWN0SWQgYXJy YXlzLiAgVGhleSBhcmUgY2FydmVkIG91dCBvZiB0aGUgc2FtZQorCSAqIGFsbG9jYXRpb24u CisJICovCiAJc2l6ZSA9IG9mZnNldG9mKE11bHRpWGFjdFN0YXRlRGF0YSwgcGVyQmFja2Vu ZFhhY3RJZHMpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLAogCQkJCQltdWxfc2l6ZShzaXpl b2YoTXVsdGlYYWN0SWQpLCBOdW1NZW1iZXJTbG90cykpOwogCXNpemUgPSBhZGRfc2l6ZShz aXplLAogCQkJCQltdWxfc2l6ZShzaXplb2YoTXVsdGlYYWN0SWQpLCBOdW1WaXNpYmxlU2xv dHMpKTsKLQlyZXR1cm4gc2l6ZTsKLX0KKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJk11bHRpWGFj dFNobWVtRGVzYywKKwkJLm5hbWUgPSAiU2hhcmVkIE11bHRpWGFjdCBTdGF0ZSIsCisJCS5z aXplID0gc2l6ZSwKKwkJLnB0ciA9ICh2b2lkICoqKSAmTXVsdGlYYWN0U3RhdGUsCisJCSk7 CiAKLVNpemUKLU11bHRpWGFjdFNobWVtU2l6ZSh2b2lkKQotewotCVNpemUJCXNpemU7CisJ U2ltcGxlTHJ1UmVxdWVzdCgmTXVsdGlYYWN0T2Zmc2V0U2xydURlc2MsCisJCS5uYW1lID0g Im11bHRpeGFjdF9vZmZzZXQiLAorCQkuRGlyID0gInBnX211bHRpeGFjdC9vZmZzZXRzIiwK KwkJLmxvbmdfc2VnbWVudF9uYW1lcyA9IGZhbHNlLAogCi0Jc2l6ZSA9IE11bHRpWGFjdFNo YXJlZFN0YXRlU2htZW1TaXplKCk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFNpbXBsZUxy dVNobWVtU2l6ZShtdWx0aXhhY3Rfb2Zmc2V0X2J1ZmZlcnMsIDApKTsKLQlzaXplID0gYWRk X3NpemUoc2l6ZSwgU2ltcGxlTHJ1U2htZW1TaXplKG11bHRpeGFjdF9tZW1iZXJfYnVmZmVy cywgMCkpOworCQkubnNsb3RzID0gbXVsdGl4YWN0X29mZnNldF9idWZmZXJzLAogCi0JcmV0 dXJuIHNpemU7Ci19CisJCS5zeW5jX2hhbmRsZXIgPSBTWU5DX0hBTkRMRVJfTVVMVElYQUNU X09GRlNFVCwKKwkJLlBhZ2VQcmVjZWRlcyA9IE11bHRpWGFjdE9mZnNldFBhZ2VQcmVjZWRl cywKKwkJLmVycmRldGFpbF9mb3JfaW9fZXJyb3IgPSBNdWx0aVhhY3RPZmZzZXRJb0Vycm9y RGV0YWlsLAogCi12b2lkCi1NdWx0aVhhY3RTaG1lbUluaXQodm9pZCkKLXsKLQlib29sCQlm b3VuZDsKKwkJLmJ1ZmZlcl90cmFuY2hlX2lkID0gTFdUUkFOQ0hFX01VTFRJWEFDVE9GRlNF VF9CVUZGRVIsCisJCS5iYW5rX3RyYW5jaGVfaWQgPSBMV1RSQU5DSEVfTVVMVElYQUNUT0ZG U0VUX1NMUlUsCisJCSk7CiAKLQlkZWJ1Z19lbG9nMihERUJVRzIsICJTaGFyZWQgTWVtb3J5 IEluaXQgZm9yIE11bHRpWGFjdCIpOworCVNpbXBsZUxydVJlcXVlc3QoJk11bHRpWGFjdE1l bWJlclNscnVEZXNjLAorCQkubmFtZSA9ICJtdWx0aXhhY3RfbWVtYmVyIiwKKwkJLkRpciA9 ICJwZ19tdWx0aXhhY3QvbWVtYmVycyIsCisJCS5sb25nX3NlZ21lbnRfbmFtZXMgPSB0cnVl LAogCi0JTXVsdGlYYWN0T2Zmc2V0Q3RsLT5QYWdlUHJlY2VkZXMgPSBNdWx0aVhhY3RPZmZz ZXRQYWdlUHJlY2VkZXM7Ci0JTXVsdGlYYWN0TWVtYmVyQ3RsLT5QYWdlUHJlY2VkZXMgPSBN dWx0aVhhY3RNZW1iZXJQYWdlUHJlY2VkZXM7Ci0JTXVsdGlYYWN0T2Zmc2V0Q3RsLT5lcnJk ZXRhaWxfZm9yX2lvX2Vycm9yID0gTXVsdGlYYWN0T2Zmc2V0SW9FcnJvckRldGFpbDsKLQlN dWx0aVhhY3RNZW1iZXJDdGwtPmVycmRldGFpbF9mb3JfaW9fZXJyb3IgPSBNdWx0aVhhY3RN ZW1iZXJJb0Vycm9yRGV0YWlsOworCQkubnNsb3RzID0gbXVsdGl4YWN0X21lbWJlcl9idWZm ZXJzLAogCi0JU2ltcGxlTHJ1SW5pdChNdWx0aVhhY3RPZmZzZXRDdGwsCi0JCQkJICAibXVs dGl4YWN0X29mZnNldCIsIG11bHRpeGFjdF9vZmZzZXRfYnVmZmVycywgMCwKLQkJCQkgICJw Z19tdWx0aXhhY3Qvb2Zmc2V0cyIsIExXVFJBTkNIRV9NVUxUSVhBQ1RPRkZTRVRfQlVGRkVS LAotCQkJCSAgTFdUUkFOQ0hFX01VTFRJWEFDVE9GRlNFVF9TTFJVLAotCQkJCSAgU1lOQ19I QU5ETEVSX01VTFRJWEFDVF9PRkZTRVQsCi0JCQkJICBmYWxzZSk7Ci0JU2xydVBhZ2VQcmVj ZWRlc1VuaXRUZXN0cyhNdWx0aVhhY3RPZmZzZXRDdGwsIE1VTFRJWEFDVF9PRkZTRVRTX1BF Ul9QQUdFKTsKLQlTaW1wbGVMcnVJbml0KE11bHRpWGFjdE1lbWJlckN0bCwKLQkJCQkgICJt dWx0aXhhY3RfbWVtYmVyIiwgbXVsdGl4YWN0X21lbWJlcl9idWZmZXJzLCAwLAotCQkJCSAg InBnX211bHRpeGFjdC9tZW1iZXJzIiwgTFdUUkFOQ0hFX01VTFRJWEFDVE1FTUJFUl9CVUZG RVIsCi0JCQkJICBMV1RSQU5DSEVfTVVMVElYQUNUTUVNQkVSX1NMUlUsCi0JCQkJICBTWU5D X0hBTkRMRVJfTVVMVElYQUNUX01FTUJFUiwKLQkJCQkgIHRydWUpOwotCS8qIGRvZXNuJ3Qg Y2FsbCBTaW1wbGVMcnVUcnVuY2F0ZSgpIG9yIG1lZXQgY3JpdGVyaWEgZm9yIHVuaXQgdGVz dHMgKi8KLQotCS8qIEluaXRpYWxpemUgb3VyIHNoYXJlZCBzdGF0ZSBzdHJ1Y3QgKi8KLQlN dWx0aVhhY3RTdGF0ZSA9IFNobWVtSW5pdFN0cnVjdCgiU2hhcmVkIE11bHRpWGFjdCBTdGF0 ZSIsCi0JCQkJCQkJCQkgTXVsdGlYYWN0U2hhcmVkU3RhdGVTaG1lbVNpemUoKSwKLQkJCQkJ CQkJCSAmZm91bmQpOwotCWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCi0JewotCQlBc3NlcnQo IWZvdW5kKTsKKwkJLnN5bmNfaGFuZGxlciA9IFNZTkNfSEFORExFUl9NVUxUSVhBQ1RfTUVN QkVSLAorCQkuUGFnZVByZWNlZGVzID0gTXVsdGlYYWN0TWVtYmVyUGFnZVByZWNlZGVzLAor CQkuZXJyZGV0YWlsX2Zvcl9pb19lcnJvciA9IE11bHRpWGFjdE1lbWJlcklvRXJyb3JEZXRh aWwsCiAKLQkJLyogTWFrZSBzdXJlIHdlIHplcm8gb3V0IHRoZSBwZXItYmFja2VuZCBzdGF0 ZSAqLwotCQlNZW1TZXQoTXVsdGlYYWN0U3RhdGUsIDAsIE11bHRpWGFjdFNoYXJlZFN0YXRl U2htZW1TaXplKCkpOwotCX0KLQllbHNlCi0JCUFzc2VydChmb3VuZCk7CisJCS5idWZmZXJf dHJhbmNoZV9pZCA9IExXVFJBTkNIRV9NVUxUSVhBQ1RNRU1CRVJfQlVGRkVSLAorCQkuYmFu a190cmFuY2hlX2lkID0gTFdUUkFOQ0hFX01VTFRJWEFDVE1FTUJFUl9TTFJVLAorCQkpOwog CisJLyoKKwkgKiBtZW1iZXJzIFNMUlUgZG9lc24ndCBjYWxsIFNpbXBsZUxydVRydW5jYXRl KCkgb3IgbWVldCBjcml0ZXJpYSBmb3IgdW5pdAorCSAqIHRlc3RzCisJICovCit9CisKK3N0 YXRpYyB2b2lkCitNdWx0aVhhY3RTaG1lbUluaXQodm9pZCAqYXJnKQoreworCS8qCisJICog U2V0IHVwIGFycmF5IHBvaW50ZXJzLgorCSAqLworCU9sZGVzdE1lbWJlck1YYWN0SWQgPSBN dWx0aVhhY3RTdGF0ZS0+cGVyQmFja2VuZFhhY3RJZHM7CisJT2xkZXN0VmlzaWJsZU1YYWN0 SWQgPSBPbGRlc3RNZW1iZXJNWGFjdElkICsgTnVtTWVtYmVyU2xvdHM7CisKKwlTbHJ1UGFn ZVByZWNlZGVzVW5pdFRlc3RzKE11bHRpWGFjdE9mZnNldEN0bCwgTVVMVElYQUNUX09GRlNF VFNfUEVSX1BBR0UpOworfQorCitzdGF0aWMgdm9pZAorTXVsdGlYYWN0U2htZW1BdHRhY2go dm9pZCAqYXJnKQorewogCS8qCiAJICogU2V0IHVwIGFycmF5IHBvaW50ZXJzLgogCSAqLwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc2xydS5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0vc2xydS5jCmluZGV4IGEyYmI4ZmE4MDMzLi4zZmU2MGM1 ODA0YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc2xydS5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3NscnUuYwpAQCAtNzEsNiArNzEsNyBA QAogI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgi CiAjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIK ICNpbmNsdWRlICJ1dGlscy93YWl0X2V2ZW50LmgiCiAKIC8qCkBAIC04OSw5ICs5MCw5IEBA CiAgKiAgZGlyLzEyMzQ1NiBmb3IgWzJeMjAsIDJeMjQtMV0KICAqLwogc3RhdGljIGlubGlu ZSBpbnQKLVNscnVGaWxlTmFtZShTbHJ1Q3RsIGN0bCwgY2hhciAqcGF0aCwgaW50NjQgc2Vn bm8pCitTbHJ1RmlsZU5hbWUoU2xydURlc2MgKmN0bCwgY2hhciAqcGF0aCwgaW50NjQgc2Vn bm8pCiB7Ci0JaWYgKGN0bC0+bG9uZ19zZWdtZW50X25hbWVzKQorCWlmIChjdGwtPm9wdGlv bnMubG9uZ19zZWdtZW50X25hbWVzKQogCXsKIAkJLyoKIAkJICogV2UgY291bGQgdXNlIDE2 IGNoYXJhY3RlcnMgaGVyZSBidXQgdGhlIGRpc2FkdmFudGFnZSB3b3VsZCBiZSB0aGF0CkBA IC0xMDEsNyArMTAyLDcgQEAgU2xydUZpbGVOYW1lKFNscnVDdGwgY3RsLCBjaGFyICpwYXRo LCBpbnQ2NCBzZWdubykKIAkJICogdGhhdCBpbiB0aGUgZnV0dXJlIHdlIGNhbid0IGRlY3Jl YXNlIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQgZWFzaWx5LgogCQkgKi8KIAkJQXNzZXJ0KHNl Z25vID49IDAgJiYgc2Vnbm8gPD0gSU5UNjRDT05TVCgweEZGRkZGRkZGRkZGRkZGRikpOwot CQlyZXR1cm4gc25wcmludGYocGF0aCwgTUFYUEdQQVRILCAiJXMvJTAxNSIgUFJJWDY0LCBj dGwtPkRpciwgc2Vnbm8pOworCQlyZXR1cm4gc25wcmludGYocGF0aCwgTUFYUEdQQVRILCAi JXMvJTAxNSIgUFJJWDY0LCBjdGwtPm9wdGlvbnMuRGlyLCBzZWdubyk7CiAJfQogCWVsc2UK IAl7CkBAIC0xMTAsNyArMTExLDcgQEAgU2xydUZpbGVOYW1lKFNscnVDdGwgY3RsLCBjaGFy ICpwYXRoLCBpbnQ2NCBzZWdubykKIAkJICogaW50ZWdlcnMgYXJlIGFsbG93ZWQuIFNlZSBT bHJ1Q29ycmVjdFNlZ21lbnRGaWxlbmFtZUxlbmd0aCgpCiAJCSAqLwogCQlBc3NlcnQoc2Vn bm8gPj0gMCAmJiBzZWdubyA8PSBJTlQ2NENPTlNUKDB4RkZGRkZGKSk7Ci0JCXJldHVybiBz bnByaW50ZihwYXRoLCBNQVhQR1BBVEgsICIlcy8lMDRYIiwgKGN0bCktPkRpciwKKwkJcmV0 dXJuIHNucHJpbnRmKHBhdGgsIE1BWFBHUEFUSCwgIiVzLyUwNFgiLCAoY3RsKS0+b3B0aW9u cy5EaXIsCiAJCQkJCQkodW5zaWduZWQgaW50KSBzZWdubyk7CiAJfQogfQpAQCAtMTc2LDE5 ICsxNzcsMTkgQEAgc3RhdGljIFNscnVFcnJvckNhdXNlIHNscnVfZXJyY2F1c2U7CiBzdGF0 aWMgaW50CXNscnVfZXJybm87CiAKIAotc3RhdGljIHZvaWQgU2ltcGxlTHJ1WmVyb0xTTnMo U2xydUN0bCBjdGwsIGludCBzbG90bm8pOwotc3RhdGljIHZvaWQgU2ltcGxlTHJ1V2FpdElP KFNscnVDdGwgY3RsLCBpbnQgc2xvdG5vKTsKLXN0YXRpYyB2b2lkIFNscnVJbnRlcm5hbFdy aXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHNsb3RubywgU2xydVdyaXRlQWxsIGZkYXRhKTsK LXN0YXRpYyBib29sIFNscnVQaHlzaWNhbFJlYWRQYWdlKFNscnVDdGwgY3RsLCBpbnQ2NCBw YWdlbm8sIGludCBzbG90bm8pOwotc3RhdGljIGJvb2wgU2xydVBoeXNpY2FsV3JpdGVQYWdl KFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8sIGludCBzbG90bm8sCitzdGF0aWMgdm9pZCBT aW1wbGVMcnVaZXJvTFNOcyhTbHJ1RGVzYyAqY3RsLCBpbnQgc2xvdG5vKTsKK3N0YXRpYyB2 b2lkIFNpbXBsZUxydVdhaXRJTyhTbHJ1RGVzYyAqY3RsLCBpbnQgc2xvdG5vKTsKK3N0YXRp YyB2b2lkIFNscnVJbnRlcm5hbFdyaXRlUGFnZShTbHJ1RGVzYyAqY3RsLCBpbnQgc2xvdG5v LCBTbHJ1V3JpdGVBbGwgZmRhdGEpOworc3RhdGljIGJvb2wgU2xydVBoeXNpY2FsUmVhZFBh Z2UoU2xydURlc2MgKmN0bCwgaW50NjQgcGFnZW5vLCBpbnQgc2xvdG5vKTsKK3N0YXRpYyBi b29sIFNscnVQaHlzaWNhbFdyaXRlUGFnZShTbHJ1RGVzYyAqY3RsLCBpbnQ2NCBwYWdlbm8s IGludCBzbG90bm8sCiAJCQkJCQkJCSAgU2xydVdyaXRlQWxsIGZkYXRhKTsKLXN0YXRpYyB2 b2lkIFNscnVSZXBvcnRJT0Vycm9yKFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8sCitzdGF0 aWMgdm9pZCBTbHJ1UmVwb3J0SU9FcnJvcihTbHJ1RGVzYyAqY3RsLCBpbnQ2NCBwYWdlbm8s CiAJCQkJCQkJICBjb25zdCB2b2lkICpvcGFxdWVfZGF0YSk7Ci1zdGF0aWMgaW50CVNscnVT ZWxlY3RMUlVQYWdlKFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8pOworc3RhdGljIGludAlT bHJ1U2VsZWN0TFJVUGFnZShTbHJ1RGVzYyAqY3RsLCBpbnQ2NCBwYWdlbm8pOwogCi1zdGF0 aWMgYm9vbCBTbHJ1U2NhbkRpckNiRGVsZXRlQ3V0b2ZmKFNscnVDdGwgY3RsLCBjaGFyICpm aWxlbmFtZSwKK3N0YXRpYyBib29sIFNscnVTY2FuRGlyQ2JEZWxldGVDdXRvZmYoU2xydURl c2MgKmN0bCwgY2hhciAqZmlsZW5hbWUsCiAJCQkJCQkJCQkgIGludDY0IHNlZ3BhZ2UsIHZv aWQgKmRhdGEpOwotc3RhdGljIHZvaWQgU2xydUludGVybmFsRGVsZXRlU2VnbWVudChTbHJ1 Q3RsIGN0bCwgaW50NjQgc2Vnbm8pOworc3RhdGljIHZvaWQgU2xydUludGVybmFsRGVsZXRl U2VnbWVudChTbHJ1RGVzYyAqY3RsLCBpbnQ2NCBzZWdubyk7CiBzdGF0aWMgaW5saW5lIHZv aWQgU2xydVJlY2VudGx5VXNlZChTbHJ1U2hhcmVkIHNoYXJlZCwgaW50IHNsb3Rubyk7CiAK IApAQCAtMTk2LDcgKzE5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBTbHJ1UmVjZW50bHlV c2VkKFNscnVTaGFyZWQgc2hhcmVkLCBpbnQgc2xvdG5vKTsKICAqIEluaXRpYWxpemF0aW9u IG9mIHNoYXJlZCBtZW1vcnkKICAqLwogCi1TaXplCitzdGF0aWMgU2l6ZQogU2ltcGxlTHJ1 U2htZW1TaXplKGludCBuc2xvdHMsIGludCBubHNucykKIHsKIAlpbnQJCQluYmFua3MgPSBu c2xvdHMgLyBTTFJVX0JBTktfU0laRTsKQEAgLTIzOCwxMjAgKzIzOSwxMzQgQEAgU2ltcGxl THJ1QXV0b3R1bmVCdWZmZXJzKGludCBkaXZpc29yLCBpbnQgbWF4KQogfQogCiAvKgotICog SW5pdGlhbGl6ZSwgb3IgYXR0YWNoIHRvLCBhIHNpbXBsZSBMUlUgY2FjaGUgaW4gc2hhcmVk IG1lbW9yeS4KLSAqCi0gKiBjdGw6IGFkZHJlc3Mgb2YgbG9jYWwgKHVuc2hhcmVkKSBjb250 cm9sIHN0cnVjdHVyZS4KLSAqIG5hbWU6IG5hbWUgb2YgU0xSVS4gIChUaGlzIGlzIHVzZXIt dmlzaWJsZSwgcGljayB3aXRoIGNhcmUhKQotICogbnNsb3RzOiBudW1iZXIgb2YgcGFnZSBz bG90cyB0byB1c2UuCi0gKiBubHNuczogbnVtYmVyIG9mIExTTiBncm91cHMgcGVyIHBhZ2Ug KHNldCB0byB6ZXJvIGlmIG5vdCByZWxldmFudCkuCi0gKiBzdWJkaXI6IFBHREFUQS1yZWxh dGl2ZSBzdWJkaXJlY3RvcnkgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGZpbGVzLgotICogYnVm ZmVyX3RyYW5jaGVfaWQ6IHRyYW5jaGUgSUQgdG8gdXNlIGZvciB0aGUgU0xSVSdzIHBlci1i dWZmZXIgTFdMb2Nrcy4KLSAqIGJhbmtfdHJhbmNoZV9pZDogdHJhbmNoZSBJRCB0byB1c2Ug Zm9yIHRoZSBiYW5rIExXTG9ja3MuCi0gKiBzeW5jX2hhbmRsZXI6IHdoaWNoIHNldCBvZiBm dW5jdGlvbnMgdG8gdXNlIHRvIGhhbmRsZSBzeW5jIHJlcXVlc3RzCi0gKiBsb25nX3NlZ21l bnRfbmFtZXM6IHVzZSBzaG9ydCBvciBsb25nIHNlZ21lbnQgbmFtZXMKKyAqIFJlZ2lzdGVy IGEgc2ltcGxlIExSVSBjYWNoZSBpbiBzaGFyZWQgbWVtb3J5LgogICovCiB2b2lkCi1TaW1w bGVMcnVJbml0KFNscnVDdGwgY3RsLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbnNsb3RzLCBp bnQgbmxzbnMsCi0JCQkgIGNvbnN0IGNoYXIgKnN1YmRpciwgaW50IGJ1ZmZlcl90cmFuY2hl X2lkLCBpbnQgYmFua190cmFuY2hlX2lkLAotCQkJICBTeW5jUmVxdWVzdEhhbmRsZXIgc3lu Y19oYW5kbGVyLCBib29sIGxvbmdfc2VnbWVudF9uYW1lcykKK1NpbXBsZUxydVJlcXVlc3RX aXRoT3B0cyhTbHJ1RGVzYyAqZGVzYywgY29uc3QgU2xydU9wdHMgKm9wdGlvbnMpCiB7CisJ U2xydU9wdHMgKm9wdGlvbnNfY29weTsKKworCUFzc2VydChvcHRpb25zLT5uYW1lICE9IE5V TEwpOworCUFzc2VydChvcHRpb25zLT5uc2xvdHMgPiAwKTsKKwlBc3NlcnQob3B0aW9ucy0+ UGFnZVByZWNlZGVzICE9IE5VTEwpOworCUFzc2VydChvcHRpb25zLT5lcnJkZXRhaWxfZm9y X2lvX2Vycm9yICE9IE5VTEwpOworCisJb3B0aW9uc19jb3B5ID0gTWVtb3J5Q29udGV4dEFs bG9jKFRvcE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkgIHNpemVvZihTbHJ1T3B0cykpOwor CW1lbWNweShvcHRpb25zX2NvcHksIG9wdGlvbnMsIHNpemVvZihTbHJ1T3B0cykpOworCisJ b3B0aW9uc19jb3B5LT5iYXNlLm5hbWUgPSBvcHRpb25zLT5uYW1lOworCW9wdGlvbnNfY29w eS0+YmFzZS5zaXplID0gU2ltcGxlTHJ1U2htZW1TaXplKG9wdGlvbnNfY29weS0+bnNsb3Rz LCBvcHRpb25zX2NvcHktPm5sc25zKTsKKworCVNobWVtUmVxdWVzdEludGVybmFsKCZkZXNj LT5iYXNlLCAmb3B0aW9uc19jb3B5LT5iYXNlLCBTSE1FTV9LSU5EX1NMUlUpOworfQorCisv KiBJbml0aWFsaXplIGxvY2tzIGFuZCBzaGFyZWQgbWVtb3J5IGFyZWEgKi8KK3ZvaWQKK3No bWVtX3NscnVfaW5pdChTaG1lbVN0cnVjdERlc2MgKmJhc2VfZGVzYywgU2htZW1TdHJ1Y3RP cHRzICpiYXNlX29wdGlvbnMpCit7CisJU2xydU9wdHMgKm9wdGlvbnMgPSAoU2xydU9wdHMg KikgYmFzZV9vcHRpb25zOworCVNscnVEZXNjICAgKmRlc2MgPSAoU2xydURlc2MgKikgYmFz ZV9kZXNjOworCWNoYXIJCW5hbWVidWZbTkFNRURBVEFMRU5dOwogCVNscnVTaGFyZWQJc2hh cmVkOwotCWJvb2wJCWZvdW5kOworCWludAkJCW5zbG90cyA9IG9wdGlvbnMtPm5zbG90czsK IAlpbnQJCQluYmFua3MgPSBuc2xvdHMgLyBTTFJVX0JBTktfU0laRTsKKwlpbnQJCQlubHNu cyA9IG9wdGlvbnMtPm5sc25zOworCWNoYXIJICAgKnB0cjsKKwlTaXplCQlvZmZzZXQ7CisK KwlzaGFyZWQgPSBkZXNjLT5zaGFyZWQgPSAoU2xydVNoYXJlZCkgZGVzYy0+YmFzZS5wdHI7 CisJZGVzYy0+bmJhbmtzID0gbmJhbmtzOworCW1lbWNweSgmZGVzYy0+b3B0aW9ucywgb3B0 aW9ucywgc2l6ZW9mKFNscnVPcHRzKSk7CisKKwkvKiBhc3NpZ24gbmV3IHRyYW5jaGUgSURz LCBpZiBub3QgZ2l2ZW4gKi8KKwlpZiAoZGVzYy0+b3B0aW9ucy5idWZmZXJfdHJhbmNoZV9p ZCA9PSAwKQorCXsKKwkJc25wcmludGYobmFtZWJ1Ziwgc2l6ZW9mKG5hbWVidWYpLCAiJXMg YnVmZmVyIiwgZGVzYy0+b3B0aW9ucy5uYW1lKTsKKwkJZGVzYy0+b3B0aW9ucy5idWZmZXJf dHJhbmNoZV9pZCA9IExXTG9ja05ld1RyYW5jaGVJZChuYW1lYnVmKTsKKwl9CisJaWYgKGRl c2MtPm9wdGlvbnMuYmFua190cmFuY2hlX2lkID09IDApCisJeworCQlzbnByaW50ZihuYW1l YnVmLCBzaXplb2YobmFtZWJ1ZiksICIlcyBiYW5rIiwgZGVzYy0+b3B0aW9ucy5uYW1lKTsK KwkJZGVzYy0+b3B0aW9ucy5iYW5rX3RyYW5jaGVfaWQgPSBMV0xvY2tOZXdUcmFuY2hlSWQo bmFtZWJ1Zik7CisJfQogCiAJQXNzZXJ0KG5zbG90cyA8PSBTTFJVX01BWF9BTExPV0VEX0JV RkZFUlMpOwogCi0JQXNzZXJ0KGN0bC0+UGFnZVByZWNlZGVzICE9IE5VTEwpOwotCUFzc2Vy dChjdGwtPmVycmRldGFpbF9mb3JfaW9fZXJyb3IgIT0gTlVMTCk7CisJbWVtc2V0KHNoYXJl ZCwgMCwgc2l6ZW9mKFNscnVTaGFyZWREYXRhKSk7CiAKLQlzaGFyZWQgPSAoU2xydVNoYXJl ZCkgU2htZW1Jbml0U3RydWN0KG5hbWUsCi0JCQkJCQkJCQkJICBTaW1wbGVMcnVTaG1lbVNp emUobnNsb3RzLCBubHNucyksCi0JCQkJCQkJCQkJICAmZm91bmQpOworCXNoYXJlZC0+bnVt X3Nsb3RzID0gbnNsb3RzOworCXNoYXJlZC0+bHNuX2dyb3Vwc19wZXJfcGFnZSA9IG5sc25z OwogCi0JaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKLQl7Ci0JCS8qIEluaXRpYWxpemUgbG9j a3MgYW5kIHNoYXJlZCBtZW1vcnkgYXJlYSAqLwotCQljaGFyCSAgICpwdHI7Ci0JCVNpemUJ CW9mZnNldDsKLQotCQlBc3NlcnQoIWZvdW5kKTsKLQotCQltZW1zZXQoc2hhcmVkLCAwLCBz aXplb2YoU2xydVNoYXJlZERhdGEpKTsKLQotCQlzaGFyZWQtPm51bV9zbG90cyA9IG5zbG90 czsKLQkJc2hhcmVkLT5sc25fZ3JvdXBzX3Blcl9wYWdlID0gbmxzbnM7Ci0KLQkJcGdfYXRv bWljX2luaXRfdTY0KCZzaGFyZWQtPmxhdGVzdF9wYWdlX251bWJlciwgMCk7Ci0KLQkJc2hh cmVkLT5zbHJ1X3N0YXRzX2lkeCA9IHBnc3RhdF9nZXRfc2xydV9pbmRleChuYW1lKTsKLQot CQlwdHIgPSAoY2hhciAqKSBzaGFyZWQ7Ci0JCW9mZnNldCA9IE1BWEFMSUdOKHNpemVvZihT bHJ1U2hhcmVkRGF0YSkpOwotCQlzaGFyZWQtPnBhZ2VfYnVmZmVyID0gKGNoYXIgKiopIChw dHIgKyBvZmZzZXQpOwotCQlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKGNo YXIgKikpOwotCQlzaGFyZWQtPnBhZ2Vfc3RhdHVzID0gKFNscnVQYWdlU3RhdHVzICopIChw dHIgKyBvZmZzZXQpOwotCQlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKFNs cnVQYWdlU3RhdHVzKSk7Ci0JCXNoYXJlZC0+cGFnZV9kaXJ0eSA9IChib29sICopIChwdHIg KyBvZmZzZXQpOwotCQlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKGJvb2wp KTsKLQkJc2hhcmVkLT5wYWdlX251bWJlciA9IChpbnQ2NCAqKSAocHRyICsgb2Zmc2V0KTsK LQkJb2Zmc2V0ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihpbnQ2NCkpOwotCQlzaGFy ZWQtPnBhZ2VfbHJ1X2NvdW50ID0gKGludCAqKSAocHRyICsgb2Zmc2V0KTsKLQkJb2Zmc2V0 ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihpbnQpKTsKLQotCQkvKiBJbml0aWFsaXpl IExXTG9ja3MgKi8KLQkJc2hhcmVkLT5idWZmZXJfbG9ja3MgPSAoTFdMb2NrUGFkZGVkICop IChwdHIgKyBvZmZzZXQpOwotCQlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9m KExXTG9ja1BhZGRlZCkpOwotCQlzaGFyZWQtPmJhbmtfbG9ja3MgPSAoTFdMb2NrUGFkZGVk ICopIChwdHIgKyBvZmZzZXQpOwotCQlvZmZzZXQgKz0gTUFYQUxJR04obmJhbmtzICogc2l6 ZW9mKExXTG9ja1BhZGRlZCkpOwotCQlzaGFyZWQtPmJhbmtfY3VyX2xydV9jb3VudCA9IChp bnQgKikgKHB0ciArIG9mZnNldCk7Ci0JCW9mZnNldCArPSBNQVhBTElHTihuYmFua3MgKiBz aXplb2YoaW50KSk7Ci0KLQkJaWYgKG5sc25zID4gMCkKLQkJewotCQkJc2hhcmVkLT5ncm91 cF9sc24gPSAoWExvZ1JlY1B0ciAqKSAocHRyICsgb2Zmc2V0KTsKLQkJCW9mZnNldCArPSBN QVhBTElHTihuc2xvdHMgKiBubHNucyAqIHNpemVvZihYTG9nUmVjUHRyKSk7Ci0JCX0KKwlw Z19hdG9taWNfaW5pdF91NjQoJnNoYXJlZC0+bGF0ZXN0X3BhZ2VfbnVtYmVyLCAwKTsKIAot CQlwdHIgKz0gQlVGRkVSQUxJR04ob2Zmc2V0KTsKLQkJZm9yIChpbnQgc2xvdG5vID0gMDsg c2xvdG5vIDwgbnNsb3RzOyBzbG90bm8rKykKLQkJewotCQkJTFdMb2NrSW5pdGlhbGl6ZSgm c2hhcmVkLT5idWZmZXJfbG9ja3Nbc2xvdG5vXS5sb2NrLAotCQkJCQkJCSBidWZmZXJfdHJh bmNoZV9pZCk7CisJc2hhcmVkLT5zbHJ1X3N0YXRzX2lkeCA9IHBnc3RhdF9nZXRfc2xydV9p bmRleChkZXNjLT5vcHRpb25zLm5hbWUpOwogCi0JCQlzaGFyZWQtPnBhZ2VfYnVmZmVyW3Ns b3Rub10gPSBwdHI7Ci0JCQlzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPSBTTFJVX1BB R0VfRU1QVFk7Ci0JCQlzaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9IGZhbHNlOwotCQkJ c2hhcmVkLT5wYWdlX2xydV9jb3VudFtzbG90bm9dID0gMDsKLQkJCXB0ciArPSBCTENLU1o7 Ci0JCX0KKwlwdHIgPSAoY2hhciAqKSBzaGFyZWQ7CisJb2Zmc2V0ID0gTUFYQUxJR04oc2l6 ZW9mKFNscnVTaGFyZWREYXRhKSk7CisJc2hhcmVkLT5wYWdlX2J1ZmZlciA9IChjaGFyICoq KSAocHRyICsgb2Zmc2V0KTsKKwlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9m KGNoYXIgKikpOworCXNoYXJlZC0+cGFnZV9zdGF0dXMgPSAoU2xydVBhZ2VTdGF0dXMgKikg KHB0ciArIG9mZnNldCk7CisJb2Zmc2V0ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihT bHJ1UGFnZVN0YXR1cykpOworCXNoYXJlZC0+cGFnZV9kaXJ0eSA9IChib29sICopIChwdHIg KyBvZmZzZXQpOworCW9mZnNldCArPSBNQVhBTElHTihuc2xvdHMgKiBzaXplb2YoYm9vbCkp OworCXNoYXJlZC0+cGFnZV9udW1iZXIgPSAoaW50NjQgKikgKHB0ciArIG9mZnNldCk7CisJ b2Zmc2V0ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihpbnQ2NCkpOworCXNoYXJlZC0+ cGFnZV9scnVfY291bnQgPSAoaW50ICopIChwdHIgKyBvZmZzZXQpOworCW9mZnNldCArPSBN QVhBTElHTihuc2xvdHMgKiBzaXplb2YoaW50KSk7CiAKLQkJLyogSW5pdGlhbGl6ZSB0aGUg c2xvdCBiYW5rcy4gKi8KLQkJZm9yIChpbnQgYmFua25vID0gMDsgYmFua25vIDwgbmJhbmtz OyBiYW5rbm8rKykKLQkJewotCQkJTFdMb2NrSW5pdGlhbGl6ZSgmc2hhcmVkLT5iYW5rX2xv Y2tzW2Jhbmtub10ubG9jaywgYmFua190cmFuY2hlX2lkKTsKLQkJCXNoYXJlZC0+YmFua19j dXJfbHJ1X2NvdW50W2Jhbmtub10gPSAwOwotCQl9CisJLyogSW5pdGlhbGl6ZSBMV0xvY2tz ICovCisJc2hhcmVkLT5idWZmZXJfbG9ja3MgPSAoTFdMb2NrUGFkZGVkICopIChwdHIgKyBv ZmZzZXQpOworCW9mZnNldCArPSBNQVhBTElHTihuc2xvdHMgKiBzaXplb2YoTFdMb2NrUGFk ZGVkKSk7CisJc2hhcmVkLT5iYW5rX2xvY2tzID0gKExXTG9ja1BhZGRlZCAqKSAocHRyICsg b2Zmc2V0KTsKKwlvZmZzZXQgKz0gTUFYQUxJR04obmJhbmtzICogc2l6ZW9mKExXTG9ja1Bh ZGRlZCkpOworCXNoYXJlZC0+YmFua19jdXJfbHJ1X2NvdW50ID0gKGludCAqKSAocHRyICsg b2Zmc2V0KTsKKwlvZmZzZXQgKz0gTUFYQUxJR04obmJhbmtzICogc2l6ZW9mKGludCkpOwog Ci0JCS8qIFNob3VsZCBmaXQgdG8gZXN0aW1hdGVkIHNobWVtIHNpemUgKi8KLQkJQXNzZXJ0 KHB0ciAtIChjaGFyICopIHNoYXJlZCA8PSBTaW1wbGVMcnVTaG1lbVNpemUobnNsb3RzLCBu bHNucykpOworCWlmIChubHNucyA+IDApCisJeworCQlzaGFyZWQtPmdyb3VwX2xzbiA9IChY TG9nUmVjUHRyICopIChwdHIgKyBvZmZzZXQpOworCQlvZmZzZXQgKz0gTUFYQUxJR04obnNs b3RzICogbmxzbnMgKiBzaXplb2YoWExvZ1JlY1B0cikpOwogCX0KLQllbHNlCisKKwlwdHIg Kz0gQlVGRkVSQUxJR04ob2Zmc2V0KTsKKwlmb3IgKGludCBzbG90bm8gPSAwOyBzbG90bm8g PCBuc2xvdHM7IHNsb3RubysrKQogCXsKLQkJQXNzZXJ0KGZvdW5kKTsKLQkJQXNzZXJ0KHNo YXJlZC0+bnVtX3Nsb3RzID09IG5zbG90cyk7CisJCUxXTG9ja0luaXRpYWxpemUoJnNoYXJl ZC0+YnVmZmVyX2xvY2tzW3Nsb3Rub10ubG9jaywKKwkJCQkJCSBkZXNjLT5vcHRpb25zLmJ1 ZmZlcl90cmFuY2hlX2lkKTsKKworCQlzaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gPSBw dHI7CisJCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9IFNMUlVfUEFHRV9FTVBUWTsK KwkJc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSBmYWxzZTsKKwkJc2hhcmVkLT5wYWdl X2xydV9jb3VudFtzbG90bm9dID0gMDsKKwkJcHRyICs9IEJMQ0tTWjsKIAl9CiAKLQkvKgot CSAqIEluaXRpYWxpemUgdGhlIHVuc2hhcmVkIGNvbnRyb2wgc3RydWN0LCBpbmNsdWRpbmcg ZGlyZWN0b3J5IHBhdGguIFdlCi0JICogYXNzdW1lIGNhbGxlciBzZXQgUGFnZVByZWNlZGVz LgotCSAqLwotCWN0bC0+c2hhcmVkID0gc2hhcmVkOwotCWN0bC0+c3luY19oYW5kbGVyID0g c3luY19oYW5kbGVyOwotCWN0bC0+bG9uZ19zZWdtZW50X25hbWVzID0gbG9uZ19zZWdtZW50 X25hbWVzOwotCWN0bC0+bmJhbmtzID0gbmJhbmtzOwotCXN0cmxjcHkoY3RsLT5EaXIsIHN1 YmRpciwgc2l6ZW9mKGN0bC0+RGlyKSk7CisJLyogSW5pdGlhbGl6ZSB0aGUgc2xvdCBiYW5r cy4gKi8KKwlmb3IgKGludCBiYW5rbm8gPSAwOyBiYW5rbm8gPCBuYmFua3M7IGJhbmtubysr KQorCXsKKwkJTFdMb2NrSW5pdGlhbGl6ZSgmc2hhcmVkLT5iYW5rX2xvY2tzW2Jhbmtub10u bG9jaywgZGVzYy0+b3B0aW9ucy5iYW5rX3RyYW5jaGVfaWQpOworCQlzaGFyZWQtPmJhbmtf Y3VyX2xydV9jb3VudFtiYW5rbm9dID0gMDsKKwl9CisKKwkvKiBTaG91bGQgZml0IHRvIGVz dGltYXRlZCBzaG1lbSBzaXplICovCisJQXNzZXJ0KHB0ciAtIChjaGFyICopIHNoYXJlZCA8 PSBTaW1wbGVMcnVTaG1lbVNpemUobnNsb3RzLCBubHNucykpOworfQorCit2b2lkCitzaG1l bV9zbHJ1X2F0dGFjaChTaG1lbVN0cnVjdERlc2MgKmJhc2VfZGVzYywgU2htZW1TdHJ1Y3RP cHRzICpiYXNlX29wdGlvbnMpCit7CisJU2xydU9wdHMgKm9wdGlvbnMgPSAoU2xydU9wdHMg KikgYmFzZV9vcHRpb25zOworCVNscnVEZXNjICAgKmRlc2MgPSAoU2xydURlc2MgKikgYmFz ZV9kZXNjOworCWludAkJCW5zbG90cyA9IG9wdGlvbnMtPm5zbG90czsKKwlpbnQJCQluYmFu a3MgPSBuc2xvdHMgLyBTTFJVX0JBTktfU0laRTsKKworCWRlc2MtPnNoYXJlZCA9IChTbHJ1 U2hhcmVkKSBkZXNjLT5iYXNlLnB0cjsKKwlkZXNjLT5uYmFua3MgPSBuYmFua3M7CisJbWVt Y3B5KCZkZXNjLT5vcHRpb25zLCBvcHRpb25zLCBzaXplb2YoU2xydU9wdHMpKTsKIH0KIAor CiAvKgogICogSGVscGVyIGZ1bmN0aW9uIGZvciBHVUMgY2hlY2tfaG9vayB0byBjaGVjayB3 aGV0aGVyIHNscnUgYnVmZmVycyBhcmUgaW4KICAqIG11bHRpcGxlcyBvZiBTTFJVX0JBTktf U0laRS4KQEAgLTM3Nyw3ICszOTIsNyBAQCBjaGVja19zbHJ1X2J1ZmZlcnMoY29uc3QgY2hh ciAqbmFtZSwgaW50ICpuZXd2YWwpCiAgKiBCYW5rIGxvY2sgbXVzdCBiZSBoZWxkIGF0IGVu dHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCiAgKi8KIGludAotU2ltcGxlTHJ1WmVy b1BhZ2UoU2xydUN0bCBjdGwsIGludDY0IHBhZ2VubykKK1NpbXBsZUxydVplcm9QYWdlKFNs cnVEZXNjICpjdGwsIGludDY0IHBhZ2VubykKIHsKIAlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0 bC0+c2hhcmVkOwogCWludAkJCXNsb3RubzsKQEAgLTQzMCw3ICs0NDUsNyBAQCBTaW1wbGVM cnVaZXJvUGFnZShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vKQogICogVGhpcyBhc3N1bWVz IHRoYXQgSW52YWxpZFhMb2dSZWNQdHIgaXMgYml0d2lzZS1hbGwtMC4KICAqLwogc3RhdGlj IHZvaWQKLVNpbXBsZUxydVplcm9MU05zKFNscnVDdGwgY3RsLCBpbnQgc2xvdG5vKQorU2lt cGxlTHJ1WmVyb0xTTnMoU2xydURlc2MgKmN0bCwgaW50IHNsb3RubykKIHsKIAlTbHJ1U2hh cmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwogCkBAIC00NDYsNyArNDYxLDcgQEAgU2ltcGxl THJ1WmVyb0xTTnMoU2xydUN0bCBjdGwsIGludCBzbG90bm8pCiAgKiBTTFJVIGJhbmsgbG9j ayBpcyBhY3F1aXJlZCBhbmQgcmVsZWFzZWQgaGVyZS4KICAqLwogdm9pZAotU2ltcGxlTHJ1 WmVyb0FuZFdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vKQorU2ltcGxlTHJ1 WmVyb0FuZFdyaXRlUGFnZShTbHJ1RGVzYyAqY3RsLCBpbnQ2NCBwYWdlbm8pCiB7CiAJaW50 CQkJc2xvdG5vOwogCUxXTG9jawkgICAqbG9jazsKQEAgLTQ3Miw3ICs0ODcsNyBAQCBTaW1w bGVMcnVaZXJvQW5kV3JpdGVQYWdlKFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8pCiAgKiBC YW5rIGxvY2sgbXVzdCBiZSBoZWxkIGF0IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4 aXQuCiAgKi8KIHN0YXRpYyB2b2lkCi1TaW1wbGVMcnVXYWl0SU8oU2xydUN0bCBjdGwsIGlu dCBzbG90bm8pCitTaW1wbGVMcnVXYWl0SU8oU2xydURlc2MgKmN0bCwgaW50IHNsb3RubykK IHsKIAlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwogCWludAkJCWJhbmtubyA9 IFNsb3RHZXRCYW5rTnVtYmVyKHNsb3Rubyk7CkBAIC01MzAsNyArNTQ1LDcgQEAgU2ltcGxl THJ1V2FpdElPKFNscnVDdGwgY3RsLCBpbnQgc2xvdG5vKQogICogVGhlIGNvcnJlY3QgYmFu ayBsb2NrIG11c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5kIHdpbGwgYmUgaGVsZCBhdCBleGl0 LgogICovCiBpbnQKLVNpbXBsZUxydVJlYWRQYWdlKFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdl bm8sIGJvb2wgd3JpdGVfb2ssCitTaW1wbGVMcnVSZWFkUGFnZShTbHJ1RGVzYyAqY3RsLCBp bnQ2NCBwYWdlbm8sIGJvb2wgd3JpdGVfb2ssCiAJCQkJICBjb25zdCB2b2lkICpvcGFxdWVf ZGF0YSkKIHsKIAlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwpAQCAtNjM0LDcg KzY0OSw3IEBAIFNpbXBsZUxydVJlYWRQYWdlKFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8s IGJvb2wgd3JpdGVfb2ssCiAgKiBJdCBpcyB1bnNwZWNpZmllZCB3aGV0aGVyIHRoZSBsb2Nr IHdpbGwgYmUgc2hhcmVkIG9yIGV4Y2x1c2l2ZS4KICAqLwogaW50Ci1TaW1wbGVMcnVSZWFk UGFnZV9SZWFkT25seShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLCBjb25zdCB2b2lkICpv cGFxdWVfZGF0YSkKK1NpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5KFNscnVEZXNjICpjdGws IGludDY0IHBhZ2VubywgY29uc3Qgdm9pZCAqb3BhcXVlX2RhdGEpCiB7CiAJU2xydVNoYXJl ZAlzaGFyZWQgPSBjdGwtPnNoYXJlZDsKIAlMV0xvY2sJICAgKmJhbmtsb2NrID0gU2ltcGxl THJ1R2V0QmFua0xvY2soY3RsLCBwYWdlbm8pOwpAQCAtNjgxLDcgKzY5Niw3IEBAIFNpbXBs ZUxydVJlYWRQYWdlX1JlYWRPbmx5KFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8sIGNvbnN0 IHZvaWQgKm9wYXF1ZV9kYXRhKQogICogQmFuayBsb2NrIG11c3QgYmUgaGVsZCBhdCBlbnRy eSwgYW5kIHdpbGwgYmUgaGVsZCBhdCBleGl0LgogICovCiBzdGF0aWMgdm9pZAotU2xydUlu dGVybmFsV3JpdGVQYWdlKFNscnVDdGwgY3RsLCBpbnQgc2xvdG5vLCBTbHJ1V3JpdGVBbGwg ZmRhdGEpCitTbHJ1SW50ZXJuYWxXcml0ZVBhZ2UoU2xydURlc2MgKmN0bCwgaW50IHNsb3Ru bywgU2xydVdyaXRlQWxsIGZkYXRhKQogewogCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5z aGFyZWQ7CiAJaW50NjQJCXBhZ2VubyA9IHNoYXJlZC0+cGFnZV9udW1iZXJbc2xvdG5vXTsK QEAgLTc2MSw3ICs3NzYsNyBAQCBTbHJ1SW50ZXJuYWxXcml0ZVBhZ2UoU2xydUN0bCBjdGws IGludCBzbG90bm8sIFNscnVXcml0ZUFsbCBmZGF0YSkKICAqIGZkYXRhIGlzIGFsd2F5cyBw YXNzZWQgYSBOVUxMIGhlcmUuCiAgKi8KIHZvaWQKLVNpbXBsZUxydVdyaXRlUGFnZShTbHJ1 Q3RsIGN0bCwgaW50IHNsb3RubykKK1NpbXBsZUxydVdyaXRlUGFnZShTbHJ1RGVzYyAqY3Rs LCBpbnQgc2xvdG5vKQogewogCUFzc2VydChjdGwtPnNoYXJlZC0+cGFnZV9zdGF0dXNbc2xv dG5vXSAhPSBTTFJVX1BBR0VfRU1QVFkpOwogCkBAIC03NzUsNyArNzkwLDcgQEAgU2ltcGxl THJ1V3JpdGVQYWdlKFNscnVDdGwgY3RsLCBpbnQgc2xvdG5vKQogICogbGFyZ2UgZW5vdWdo IHRvIGNvbnRhaW4gdGhlIGdpdmVuIHBhZ2UuCiAgKi8KIGJvb2wKLVNpbXBsZUxydURvZXNQ aHlzaWNhbFBhZ2VFeGlzdChTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vKQorU2ltcGxlTHJ1 RG9lc1BoeXNpY2FsUGFnZUV4aXN0KFNscnVEZXNjICpjdGwsIGludDY0IHBhZ2VubykKIHsK IAlpbnQ2NAkJc2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwogCWlu dAkJCXJwYWdlbm8gPSBwYWdlbm8gJSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwpAQCAtODMz LDcgKzg0OCw3IEBAIFNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlzdChTbHJ1Q3RsIGN0 bCwgaW50NjQgcGFnZW5vKQogICogcmVhZC93cml0ZSBvcGVyYXRpb25zLiAgV2UgY291bGQg Y2FjaGUgb25lIHZpcnR1YWwgZmlsZSBwb2ludGVyIC4uLgogICovCiBzdGF0aWMgYm9vbAot U2xydVBoeXNpY2FsUmVhZFBhZ2UoU2xydUN0bCBjdGwsIGludDY0IHBhZ2VubywgaW50IHNs b3RubykKK1NscnVQaHlzaWNhbFJlYWRQYWdlKFNscnVEZXNjICpjdGwsIGludDY0IHBhZ2Vu bywgaW50IHNsb3RubykKIHsKIAlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwog CWludDY0CQlzZWdubyA9IHBhZ2VubyAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7CkBAIC05 MDUsNyArOTIwLDcgQEAgU2xydVBoeXNpY2FsUmVhZFBhZ2UoU2xydUN0bCBjdGwsIGludDY0 IHBhZ2VubywgaW50IHNsb3RubykKICAqIFNpbXBsZUxydVdyaXRlQWxsLgogICovCiBzdGF0 aWMgYm9vbAotU2xydVBoeXNpY2FsV3JpdGVQYWdlKFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdl bm8sIGludCBzbG90bm8sIFNscnVXcml0ZUFsbCBmZGF0YSkKK1NscnVQaHlzaWNhbFdyaXRl UGFnZShTbHJ1RGVzYyAqY3RsLCBpbnQ2NCBwYWdlbm8sIGludCBzbG90bm8sIFNscnVXcml0 ZUFsbCBmZGF0YSkKIHsKIAlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwogCWlu dDY0CQlzZWdubyA9IHBhZ2VubyAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7CkBAIC0xMDM3 LDExICsxMDUyLDExIEBAIFNscnVQaHlzaWNhbFdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50 NjQgcGFnZW5vLCBpbnQgc2xvdG5vLCBTbHJ1V3JpdGVBbGwgZmRhdGEpCiAJcGdzdGF0X3Jl cG9ydF93YWl0X2VuZCgpOwogCiAJLyogUXVldWUgdXAgYSBzeW5jIHJlcXVlc3QgZm9yIHRo ZSBjaGVja3BvaW50ZXIuICovCi0JaWYgKGN0bC0+c3luY19oYW5kbGVyICE9IFNZTkNfSEFO RExFUl9OT05FKQorCWlmIChjdGwtPm9wdGlvbnMuc3luY19oYW5kbGVyICE9IFNZTkNfSEFO RExFUl9OT05FKQogCXsKIAkJRmlsZVRhZwkJdGFnOwogCi0JCUlOSVRfU0xSVUZJTEVUQUco dGFnLCBjdGwtPnN5bmNfaGFuZGxlciwgc2Vnbm8pOworCQlJTklUX1NMUlVGSUxFVEFHKHRh ZywgY3RsLT5vcHRpb25zLnN5bmNfaGFuZGxlciwgc2Vnbm8pOwogCQlpZiAoIVJlZ2lzdGVy U3luY1JlcXVlc3QoJnRhZywgU1lOQ19SRVFVRVNULCBmYWxzZSkpCiAJCXsKIAkJCS8qIE5v IHNwYWNlIHRvIGVucXVldWUgc3luYyByZXF1ZXN0LiAgRG8gaXQgc3luY2hyb25vdXNseS4g Ki8KQEAgLTEwNzcsNyArMTA5Miw3IEBAIFNscnVQaHlzaWNhbFdyaXRlUGFnZShTbHJ1Q3Rs IGN0bCwgaW50NjQgcGFnZW5vLCBpbnQgc2xvdG5vLCBTbHJ1V3JpdGVBbGwgZmRhdGEpCiAg KiBTbHJ1UGh5c2ljYWxXcml0ZVBhZ2UuICBDYWxsIHRoaXMgYWZ0ZXIgY2xlYW5pbmcgdXAg c2hhcmVkLW1lbW9yeSBzdGF0ZS4KICAqLwogc3RhdGljIHZvaWQKLVNscnVSZXBvcnRJT0Vy cm9yKFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8sIGNvbnN0IHZvaWQgKm9wYXF1ZV9kYXRh KQorU2xydVJlcG9ydElPRXJyb3IoU2xydURlc2MgKmN0bCwgaW50NjQgcGFnZW5vLCBjb25z dCB2b2lkICpvcGFxdWVfZGF0YSkKIHsKIAlpbnQ2NAkJc2Vnbm8gPSBwYWdlbm8gLyBTTFJV X1BBR0VTX1BFUl9TRUdNRU5UOwogCWludAkJCXJwYWdlbm8gPSBwYWdlbm8gJSBTTFJVX1BB R0VTX1BFUl9TRUdNRU5UOwpAQCAtMTA5MiwxNCArMTEwNywxNCBAQCBTbHJ1UmVwb3J0SU9F cnJvcihTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLCBjb25zdCB2b2lkICpvcGFxdWVfZGF0 YSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2Vzcygp LAogCQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIjogJW0iLCBwYXRo KSwKLQkJCQkJIG9wYXF1ZV9kYXRhID8gY3RsLT5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yKG9w YXF1ZV9kYXRhKSA6IDApKTsKKwkJCQkJIG9wYXF1ZV9kYXRhID8gY3RsLT5vcHRpb25zLmVy cmRldGFpbF9mb3JfaW9fZXJyb3Iob3BhcXVlX2RhdGEpIDogMCkpOwogCQkJYnJlYWs7CiAJ CWNhc2UgU0xSVV9TRUVLX0ZBSUxFRDoKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJj b2RlX2Zvcl9maWxlX2FjY2VzcygpLAogCQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgc2VlayBp biBmaWxlIFwiJXNcIiB0byBvZmZzZXQgJWQ6ICVtIiwKIAkJCQkJCQlwYXRoLCBvZmZzZXQp LAotCQkJCQkgb3BhcXVlX2RhdGEgPyBjdGwtPmVycmRldGFpbF9mb3JfaW9fZXJyb3Iob3Bh cXVlX2RhdGEpIDogMCkpOworCQkJCQkgb3BhcXVlX2RhdGEgPyBjdGwtPm9wdGlvbnMuZXJy ZGV0YWlsX2Zvcl9pb19lcnJvcihvcGFxdWVfZGF0YSkgOiAwKSk7CiAJCQlicmVhazsKIAkJ Y2FzZSBTTFJVX1JFQURfRkFJTEVEOgogCQkJaWYgKGVycm5vKQpAQCAtMTEwNywxMiArMTEy MiwxMiBAQCBTbHJ1UmVwb3J0SU9FcnJvcihTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLCBj b25zdCB2b2lkICpvcGFxdWVfZGF0YSkKIAkJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2Vz cygpLAogCQkJCQkJIGVycm1zZygiY291bGQgbm90IHJlYWQgZnJvbSBmaWxlIFwiJXNcIiBh dCBvZmZzZXQgJWQ6ICVtIiwKIAkJCQkJCQkJcGF0aCwgb2Zmc2V0KSwKLQkJCQkJCSBvcGFx dWVfZGF0YSA/IGN0bC0+ZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihvcGFxdWVfZGF0YSkgOiAw KSk7CisJCQkJCQkgb3BhcXVlX2RhdGEgPyBjdGwtPm9wdGlvbnMuZXJyZGV0YWlsX2Zvcl9p b19lcnJvcihvcGFxdWVfZGF0YSkgOiAwKSk7CiAJCQllbHNlCiAJCQkJZXJlcG9ydChFUlJP UiwKIAkJCQkJCShlcnJtc2coImNvdWxkIG5vdCByZWFkIGZyb20gZmlsZSBcIiVzXCIgYXQg b2Zmc2V0ICVkOiByZWFkIHRvbyBmZXcgYnl0ZXMiLAogCQkJCQkJCQlwYXRoLCBvZmZzZXQp LAotCQkJCQkJIG9wYXF1ZV9kYXRhID8gY3RsLT5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yKG9w YXF1ZV9kYXRhKSA6IDApKTsKKwkJCQkJCSBvcGFxdWVfZGF0YSA/IGN0bC0+b3B0aW9ucy5l cnJkZXRhaWxfZm9yX2lvX2Vycm9yKG9wYXF1ZV9kYXRhKSA6IDApKTsKIAkJCWJyZWFrOwog CQljYXNlIFNMUlVfV1JJVEVfRkFJTEVEOgogCQkJaWYgKGVycm5vKQpAQCAtMTEyMCwyNiAr MTEzNSwyNiBAQCBTbHJ1UmVwb3J0SU9FcnJvcihTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5v LCBjb25zdCB2b2lkICpvcGFxdWVfZGF0YSkKIAkJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2Fj Y2VzcygpLAogCQkJCQkJIGVycm1zZygiQ291bGQgbm90IHdyaXRlIHRvIGZpbGUgXCIlc1wi IGF0IG9mZnNldCAlZDogJW0iLAogCQkJCQkJCQlwYXRoLCBvZmZzZXQpLAotCQkJCQkJIG9w YXF1ZV9kYXRhID8gY3RsLT5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yKG9wYXF1ZV9kYXRhKSA6 IDApKTsKKwkJCQkJCSBvcGFxdWVfZGF0YSA/IGN0bC0+b3B0aW9ucy5lcnJkZXRhaWxfZm9y X2lvX2Vycm9yKG9wYXF1ZV9kYXRhKSA6IDApKTsKIAkJCWVsc2UKIAkJCQllcmVwb3J0KEVS Uk9SLAogCQkJCQkJKGVycm1zZygiQ291bGQgbm90IHdyaXRlIHRvIGZpbGUgXCIlc1wiIGF0 IG9mZnNldCAlZDogd3JvdGUgdG9vIGZldyBieXRlcy4iLAogCQkJCQkJCQlwYXRoLCBvZmZz ZXQpLAotCQkJCQkJIG9wYXF1ZV9kYXRhID8gY3RsLT5lcnJkZXRhaWxfZm9yX2lvX2Vycm9y KG9wYXF1ZV9kYXRhKSA6IDApKTsKKwkJCQkJCSBvcGFxdWVfZGF0YSA/IGN0bC0+b3B0aW9u cy5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yKG9wYXF1ZV9kYXRhKSA6IDApKTsKIAkJCWJyZWFr OwogCQljYXNlIFNMUlVfRlNZTkNfRkFJTEVEOgogCQkJZXJlcG9ydChkYXRhX3N5bmNfZWxl dmVsKEVSUk9SKSwKIAkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCiAJCQkJCSBl cnJtc2coImNvdWxkIG5vdCBmc3luYyBmaWxlIFwiJXNcIjogJW0iLAogCQkJCQkJCXBhdGgp LAotCQkJCQkgb3BhcXVlX2RhdGEgPyBjdGwtPmVycmRldGFpbF9mb3JfaW9fZXJyb3Iob3Bh cXVlX2RhdGEpIDogMCkpOworCQkJCQkgb3BhcXVlX2RhdGEgPyBjdGwtPm9wdGlvbnMuZXJy ZGV0YWlsX2Zvcl9pb19lcnJvcihvcGFxdWVfZGF0YSkgOiAwKSk7CiAJCQlicmVhazsKIAkJ Y2FzZSBTTFJVX0NMT1NFX0ZBSUxFRDoKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJj b2RlX2Zvcl9maWxlX2FjY2VzcygpLAogCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgY2xvc2Ug ZmlsZSBcIiVzXCI6ICVtIiwKIAkJCQkJCQlwYXRoKSwKLQkJCQkJIG9wYXF1ZV9kYXRhID8g Y3RsLT5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yKG9wYXF1ZV9kYXRhKSA6IDApKTsKKwkJCQkJ IG9wYXF1ZV9kYXRhID8gY3RsLT5vcHRpb25zLmVycmRldGFpbF9mb3JfaW9fZXJyb3Iob3Bh cXVlX2RhdGEpIDogMCkpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkvKiBjYW4ndCBn ZXQgaGVyZSwgd2UgdHJ1c3QgKi8KQEAgLTExOTksNyArMTIxNCw3IEBAIFNscnVSZWNlbnRs eVVzZWQoU2xydVNoYXJlZCBzaGFyZWQsIGludCBzbG90bm8pCiAgKiBUaGUgY29ycmVjdCBi YW5rIGxvY2sgbXVzdCBiZSBoZWxkIGF0IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4 aXQuCiAgKi8KIHN0YXRpYyBpbnQKLVNscnVTZWxlY3RMUlVQYWdlKFNscnVDdGwgY3RsLCBp bnQ2NCBwYWdlbm8pCitTbHJ1U2VsZWN0TFJVUGFnZShTbHJ1RGVzYyAqY3RsLCBpbnQ2NCBw YWdlbm8pCiB7CiAJU2xydVNoYXJlZAlzaGFyZWQgPSBjdGwtPnNoYXJlZDsKIApAQCAtMTI5 MSw4ICsxMzA2LDggQEAgU2xydVNlbGVjdExSVVBhZ2UoU2xydUN0bCBjdGwsIGludDY0IHBh Z2VubykKIAkJCXsKIAkJCQlpZiAodGhpc19kZWx0YSA+IGJlc3RfdmFsaWRfZGVsdGEgfHwK IAkJCQkJKHRoaXNfZGVsdGEgPT0gYmVzdF92YWxpZF9kZWx0YSAmJgotCQkJCQkgY3RsLT5Q YWdlUHJlY2VkZXModGhpc19wYWdlX251bWJlciwKLQkJCQkJCQkJCSAgIGJlc3RfdmFsaWRf cGFnZV9udW1iZXIpKSkKKwkJCQkJIGN0bC0+b3B0aW9ucy5QYWdlUHJlY2VkZXModGhpc19w YWdlX251bWJlciwKKwkJCQkJCQkJCQkJICAgYmVzdF92YWxpZF9wYWdlX251bWJlcikpKQog CQkJCXsKIAkJCQkJYmVzdHZhbGlkc2xvdCA9IHNsb3RubzsKIAkJCQkJYmVzdF92YWxpZF9k ZWx0YSA9IHRoaXNfZGVsdGE7CkBAIC0xMzAzLDggKzEzMTgsOCBAQCBTbHJ1U2VsZWN0TFJV UGFnZShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vKQogCQkJewogCQkJCWlmICh0aGlzX2Rl bHRhID4gYmVzdF9pbnZhbGlkX2RlbHRhIHx8CiAJCQkJCSh0aGlzX2RlbHRhID09IGJlc3Rf aW52YWxpZF9kZWx0YSAmJgotCQkJCQkgY3RsLT5QYWdlUHJlY2VkZXModGhpc19wYWdlX251 bWJlciwKLQkJCQkJCQkJCSAgIGJlc3RfaW52YWxpZF9wYWdlX251bWJlcikpKQorCQkJCQkg Y3RsLT5vcHRpb25zLlBhZ2VQcmVjZWRlcyh0aGlzX3BhZ2VfbnVtYmVyLAorCQkJCQkJCQkJ CQkgICBiZXN0X2ludmFsaWRfcGFnZV9udW1iZXIpKSkKIAkJCQl7CiAJCQkJCWJlc3RpbnZh bGlkc2xvdCA9IHNsb3RubzsKIAkJCQkJYmVzdF9pbnZhbGlkX2RlbHRhID0gdGhpc19kZWx0 YTsKQEAgLTEzNTIsNyArMTM2Nyw3IEBAIFNscnVTZWxlY3RMUlVQYWdlKFNscnVDdGwgY3Rs LCBpbnQ2NCBwYWdlbm8pCiAgKiBlbnRyaWVzIGFyZSBvbiBkaXNrLgogICovCiB2b2lkCi1T aW1wbGVMcnVXcml0ZUFsbChTbHJ1Q3RsIGN0bCwgYm9vbCBhbGxvd19yZWRpcnRpZWQpCitT aW1wbGVMcnVXcml0ZUFsbChTbHJ1RGVzYyAqY3RsLCBib29sIGFsbG93X3JlZGlydGllZCkK IHsKIAlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwogCVNscnVXcml0ZUFsbERh dGEgZmRhdGE7CkBAIC0xNDIyLDggKzE0MzcsOCBAQCBTaW1wbGVMcnVXcml0ZUFsbChTbHJ1 Q3RsIGN0bCwgYm9vbCBhbGxvd19yZWRpcnRpZWQpCiAJCVNscnVSZXBvcnRJT0Vycm9yKGN0 bCwgcGFnZW5vLCBOVUxMKTsKIAogCS8qIEVuc3VyZSB0aGF0IGRpcmVjdG9yeSBlbnRyaWVz IGZvciBuZXcgZmlsZXMgYXJlIG9uIGRpc2suICovCi0JaWYgKGN0bC0+c3luY19oYW5kbGVy ICE9IFNZTkNfSEFORExFUl9OT05FKQotCQlmc3luY19mbmFtZShjdGwtPkRpciwgdHJ1ZSk7 CisJaWYgKGN0bC0+b3B0aW9ucy5zeW5jX2hhbmRsZXIgIT0gU1lOQ19IQU5ETEVSX05PTkUp CisJCWZzeW5jX2ZuYW1lKGN0bC0+b3B0aW9ucy5EaXIsIHRydWUpOwogfQogCiAvKgpAQCAt MTQzOCw3ICsxNDUzLDcgQEAgU2ltcGxlTHJ1V3JpdGVBbGwoU2xydUN0bCBjdGwsIGJvb2wg YWxsb3dfcmVkaXJ0aWVkKQogICogYWZ0ZXIgaXQgaGFzIGFjY3J1ZWQgZnJlc2hseS13cml0 dGVuIGRhdGEuCiAgKi8KIHZvaWQKLVNpbXBsZUxydVRydW5jYXRlKFNscnVDdGwgY3RsLCBp bnQ2NCBjdXRvZmZQYWdlKQorU2ltcGxlTHJ1VHJ1bmNhdGUoU2xydURlc2MgKmN0bCwgaW50 NjQgY3V0b2ZmUGFnZSkKIHsKIAlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwog CWludAkJCXByZXZiYW5rOwpAQCAtMTQ2MCwxMiArMTQ3NSwxMiBAQCByZXN0YXJ0OgogCSAq IGJ1Z3MgZWxzZXdoZXJlIGluIFNMUlUgaGFuZGxpbmcsIHNvIHdlIGRvbid0IGNhcmUgaWYg d2UgcmVhZCBhIHNsaWdodGx5CiAJICogb3V0ZGF0ZWQgdmFsdWU7IHRoZXJlZm9yZSB3ZSBk b24ndCBhZGQgYSBtZW1vcnkgYmFycmllci4KIAkgKi8KLQlpZiAoY3RsLT5QYWdlUHJlY2Vk ZXMocGdfYXRvbWljX3JlYWRfdTY0KCZzaGFyZWQtPmxhdGVzdF9wYWdlX251bWJlciksCi0J CQkJCQkgIGN1dG9mZlBhZ2UpKQorCWlmIChjdGwtPm9wdGlvbnMuUGFnZVByZWNlZGVzKHBn X2F0b21pY19yZWFkX3U2NCgmc2hhcmVkLT5sYXRlc3RfcGFnZV9udW1iZXIpLAorCQkJCQkJ CQkgIGN1dG9mZlBhZ2UpKQogCXsKIAkJZXJlcG9ydChMT0csCiAJCQkJKGVycm1zZygiY291 bGQgbm90IHRydW5jYXRlIGRpcmVjdG9yeSBcIiVzXCI6IGFwcGFyZW50IHdyYXBhcm91bmQi LAotCQkJCQkJY3RsLT5EaXIpKSk7CisJCQkJCQljdGwtPm9wdGlvbnMuRGlyKSkpOwogCQly ZXR1cm47CiAJfQogCkBAIC0xNDg4LDcgKzE1MDMsNyBAQCByZXN0YXJ0OgogCiAJCWlmIChz aGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX0VNUFRZKQogCQkJY29u dGludWU7Ci0JCWlmICghY3RsLT5QYWdlUHJlY2VkZXMoc2hhcmVkLT5wYWdlX251bWJlcltz bG90bm9dLCBjdXRvZmZQYWdlKSkKKwkJaWYgKCFjdGwtPm9wdGlvbnMuUGFnZVByZWNlZGVz KHNoYXJlZC0+cGFnZV9udW1iZXJbc2xvdG5vXSwgY3V0b2ZmUGFnZSkpCiAJCQljb250aW51 ZTsKIAogCQkvKgpAQCAtMTUzMywxNiArMTU0OCwxNiBAQCByZXN0YXJ0OgogICogdGhleSBl aXRoZXIgY2FuJ3QgeWV0IGNvbnRhaW4gYW55dGhpbmcsIG9yIGhhdmUgYWxyZWFkeSBiZWVu IGNsZWFuZWQgb3V0LgogICovCiBzdGF0aWMgdm9pZAotU2xydUludGVybmFsRGVsZXRlU2Vn bWVudChTbHJ1Q3RsIGN0bCwgaW50NjQgc2Vnbm8pCitTbHJ1SW50ZXJuYWxEZWxldGVTZWdt ZW50KFNscnVEZXNjICpjdGwsIGludDY0IHNlZ25vKQogewogCWNoYXIJCXBhdGhbTUFYUEdQ QVRIXTsKIAogCS8qIEZvcmdldCBhbnkgZnN5bmMgcmVxdWVzdHMgcXVldWVkIGZvciB0aGlz IHNlZ21lbnQuICovCi0JaWYgKGN0bC0+c3luY19oYW5kbGVyICE9IFNZTkNfSEFORExFUl9O T05FKQorCWlmIChjdGwtPm9wdGlvbnMuc3luY19oYW5kbGVyICE9IFNZTkNfSEFORExFUl9O T05FKQogCXsKIAkJRmlsZVRhZwkJdGFnOwogCi0JCUlOSVRfU0xSVUZJTEVUQUcodGFnLCBj dGwtPnN5bmNfaGFuZGxlciwgc2Vnbm8pOworCQlJTklUX1NMUlVGSUxFVEFHKHRhZywgY3Rs LT5vcHRpb25zLnN5bmNfaGFuZGxlciwgc2Vnbm8pOwogCQlSZWdpc3RlclN5bmNSZXF1ZXN0 KCZ0YWcsIFNZTkNfRk9SR0VUX1JFUVVFU1QsIHRydWUpOwogCX0KIApAQCAtMTU1Niw3ICsx NTcxLDcgQEAgU2xydUludGVybmFsRGVsZXRlU2VnbWVudChTbHJ1Q3RsIGN0bCwgaW50NjQg c2Vnbm8pCiAgKiBEZWxldGUgYW4gaW5kaXZpZHVhbCBTTFJVIHNlZ21lbnQsIGlkZW50aWZp ZWQgYnkgdGhlIHNlZ21lbnQgbnVtYmVyLgogICovCiB2b2lkCi1TbHJ1RGVsZXRlU2VnbWVu dChTbHJ1Q3RsIGN0bCwgaW50NjQgc2Vnbm8pCitTbHJ1RGVsZXRlU2VnbWVudChTbHJ1RGVz YyAqY3RsLCBpbnQ2NCBzZWdubykKIHsKIAlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hh cmVkOwogCWludAkJCXByZXZiYW5rID0gU2xvdEdldEJhbmtOdW1iZXIoMCk7CkBAIC0xNjMz LDE5ICsxNjQ4LDE5IEBAIHJlc3RhcnQ6CiAgKiBmaXJzdD49Y3V0b2ZmICYmIGxhc3Q+PWN1 dG9mZjogbm87IGV2ZXJ5IHBhZ2Ugb2YgdGhpcyBzZWdtZW50IGlzIHRvbyB5b3VuZwogICov CiBzdGF0aWMgYm9vbAotU2xydU1heURlbGV0ZVNlZ21lbnQoU2xydUN0bCBjdGwsIGludDY0 IHNlZ3BhZ2UsIGludDY0IGN1dG9mZlBhZ2UpCitTbHJ1TWF5RGVsZXRlU2VnbWVudChTbHJ1 RGVzYyAqY3RsLCBpbnQ2NCBzZWdwYWdlLCBpbnQ2NCBjdXRvZmZQYWdlKQogewogCWludDY0 CQlzZWdfbGFzdF9wYWdlID0gc2VncGFnZSArIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQgLSAx OwogCiAJQXNzZXJ0KHNlZ3BhZ2UgJSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UID09IDApOwog Ci0JcmV0dXJuIChjdGwtPlBhZ2VQcmVjZWRlcyhzZWdwYWdlLCBjdXRvZmZQYWdlKSAmJgot CQkJY3RsLT5QYWdlUHJlY2VkZXMoc2VnX2xhc3RfcGFnZSwgY3V0b2ZmUGFnZSkpOworCXJl dHVybiAoY3RsLT5vcHRpb25zLlBhZ2VQcmVjZWRlcyhzZWdwYWdlLCBjdXRvZmZQYWdlKSAm JgorCQkJY3RsLT5vcHRpb25zLlBhZ2VQcmVjZWRlcyhzZWdfbGFzdF9wYWdlLCBjdXRvZmZQ YWdlKSk7CiB9CiAKICNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCiBzdGF0aWMgdm9pZAot U2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQoU2xydUN0bCBjdGwsIGludCBwZXJfcGFnZSwg dWludDMyIG9mZnNldCkKK1NscnVQYWdlUHJlY2VkZXNUZXN0T2Zmc2V0KFNscnVEZXNjICpj dGwsIGludCBwZXJfcGFnZSwgdWludDMyIG9mZnNldCkKIHsKIAlUcmFuc2FjdGlvbklkIGxo cywKIAkJCQlyaHM7CkBAIC0xNjU0LDYgKzE2NjksOSBAQCBTbHJ1UGFnZVByZWNlZGVzVGVz dE9mZnNldChTbHJ1Q3RsIGN0bCwgaW50IHBlcl9wYWdlLCB1aW50MzIgb2Zmc2V0KQogCVRy YW5zYWN0aW9uSWQgbmV3ZXN0WGFjdCwKIAkJCQlvbGRlc3RYYWN0OwogCisJLyogVGhpcyBt dXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgU2xydSBoYXMgYmVlbiBpbml0aWFsaXplZCAqLwor CUFzc2VydChjdGwtPm9wdGlvbnMuUGFnZVByZWNlZGVzKTsKKwogCS8qCiAJICogQ29tcGFy ZSBhbiBYSUQgcGFpciBoYXZpbmcgdW5kZWZpbmVkIG9yZGVyIChzZWUgUkZDIDE5ODIpLCBh IHBhaXIgYXQKIAkgKiAib3Bwb3NpdGUgZW5kcyIgb2YgdGhlIFhJRCBzcGFjZS4gIFRyYW5z YWN0aW9uSWRQcmVjZWRlcygpIHRyZWF0cyBlYWNoCkBAIC0xNjcwLDE5ICsxNjg4LDE5IEBA IFNscnVQYWdlUHJlY2VkZXNUZXN0T2Zmc2V0KFNscnVDdGwgY3RsLCBpbnQgcGVyX3BhZ2Us IHVpbnQzMiBvZmZzZXQpCiAJQXNzZXJ0KCFUcmFuc2FjdGlvbklkUHJlY2VkZXMocmhzLCBs aHMgKyAxKSk7CiAJQXNzZXJ0KCFUcmFuc2FjdGlvbklkRm9sbG93c09yRXF1YWxzKGxocywg cmhzKSk7CiAJQXNzZXJ0KCFUcmFuc2FjdGlvbklkRm9sbG93c09yRXF1YWxzKHJocywgbGhz KSk7Ci0JQXNzZXJ0KCFjdGwtPlBhZ2VQcmVjZWRlcyhsaHMgLyBwZXJfcGFnZSwgbGhzIC8g cGVyX3BhZ2UpKTsKLQlBc3NlcnQoIWN0bC0+UGFnZVByZWNlZGVzKGxocyAvIHBlcl9wYWdl LCByaHMgLyBwZXJfcGFnZSkpOwotCUFzc2VydCghY3RsLT5QYWdlUHJlY2VkZXMocmhzIC8g cGVyX3BhZ2UsIGxocyAvIHBlcl9wYWdlKSk7Ci0JQXNzZXJ0KCFjdGwtPlBhZ2VQcmVjZWRl cygobGhzIC0gcGVyX3BhZ2UpIC8gcGVyX3BhZ2UsIHJocyAvIHBlcl9wYWdlKSk7Ci0JQXNz ZXJ0KGN0bC0+UGFnZVByZWNlZGVzKHJocyAvIHBlcl9wYWdlLCAobGhzIC0gMyAqIHBlcl9w YWdlKSAvIHBlcl9wYWdlKSk7Ci0JQXNzZXJ0KGN0bC0+UGFnZVByZWNlZGVzKHJocyAvIHBl cl9wYWdlLCAobGhzIC0gMiAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlKSk7Ci0JQXNzZXJ0KGN0 bC0+UGFnZVByZWNlZGVzKHJocyAvIHBlcl9wYWdlLCAobGhzIC0gMSAqIHBlcl9wYWdlKSAv IHBlcl9wYWdlKQorCUFzc2VydCghY3RsLT5vcHRpb25zLlBhZ2VQcmVjZWRlcyhsaHMgLyBw ZXJfcGFnZSwgbGhzIC8gcGVyX3BhZ2UpKTsKKwlBc3NlcnQoIWN0bC0+b3B0aW9ucy5QYWdl UHJlY2VkZXMobGhzIC8gcGVyX3BhZ2UsIHJocyAvIHBlcl9wYWdlKSk7CisJQXNzZXJ0KCFj dGwtPm9wdGlvbnMuUGFnZVByZWNlZGVzKHJocyAvIHBlcl9wYWdlLCBsaHMgLyBwZXJfcGFn ZSkpOworCUFzc2VydCghY3RsLT5vcHRpb25zLlBhZ2VQcmVjZWRlcygobGhzIC0gcGVyX3Bh Z2UpIC8gcGVyX3BhZ2UsIHJocyAvIHBlcl9wYWdlKSk7CisJQXNzZXJ0KGN0bC0+b3B0aW9u cy5QYWdlUHJlY2VkZXMocmhzIC8gcGVyX3BhZ2UsIChsaHMgLSAzICogcGVyX3BhZ2UpIC8g cGVyX3BhZ2UpKTsKKwlBc3NlcnQoY3RsLT5vcHRpb25zLlBhZ2VQcmVjZWRlcyhyaHMgLyBw ZXJfcGFnZSwgKGxocyAtIDIgKiBwZXJfcGFnZSkgLyBwZXJfcGFnZSkpOworCUFzc2VydChj dGwtPm9wdGlvbnMuUGFnZVByZWNlZGVzKHJocyAvIHBlcl9wYWdlLCAobGhzIC0gMSAqIHBl cl9wYWdlKSAvIHBlcl9wYWdlKQogCQkgICB8fCAoMVUgPDwgMzEpICUgcGVyX3BhZ2UgIT0g MCk7CS8qIFNlZSBDb21taXRUc1BhZ2VQcmVjZWRlcygpICovCi0JQXNzZXJ0KGN0bC0+UGFn ZVByZWNlZGVzKChsaHMgKyAxICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UsIHJocyAvIHBlcl9w YWdlKQorCUFzc2VydChjdGwtPm9wdGlvbnMuUGFnZVByZWNlZGVzKChsaHMgKyAxICogcGVy X3BhZ2UpIC8gcGVyX3BhZ2UsIHJocyAvIHBlcl9wYWdlKQogCQkgICB8fCAoMVUgPDwgMzEp ICUgcGVyX3BhZ2UgIT0gMCk7Ci0JQXNzZXJ0KGN0bC0+UGFnZVByZWNlZGVzKChsaHMgKyAy ICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UsIHJocyAvIHBlcl9wYWdlKSk7Ci0JQXNzZXJ0KGN0 bC0+UGFnZVByZWNlZGVzKChsaHMgKyAzICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UsIHJocyAv IHBlcl9wYWdlKSk7Ci0JQXNzZXJ0KCFjdGwtPlBhZ2VQcmVjZWRlcyhyaHMgLyBwZXJfcGFn ZSwgKGxocyArIHBlcl9wYWdlKSAvIHBlcl9wYWdlKSk7CisJQXNzZXJ0KGN0bC0+b3B0aW9u cy5QYWdlUHJlY2VkZXMoKGxocyArIDIgKiBwZXJfcGFnZSkgLyBwZXJfcGFnZSwgcmhzIC8g cGVyX3BhZ2UpKTsKKwlBc3NlcnQoY3RsLT5vcHRpb25zLlBhZ2VQcmVjZWRlcygobGhzICsg MyAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlLCByaHMgLyBwZXJfcGFnZSkpOworCUFzc2VydCgh Y3RsLT5vcHRpb25zLlBhZ2VQcmVjZWRlcyhyaHMgLyBwZXJfcGFnZSwgKGxocyArIHBlcl9w YWdlKSAvIHBlcl9wYWdlKSk7CiAKIAkvKgogCSAqIEdldE5ld1RyYW5zYWN0aW9uSWQoKSBo YXMgYXNzaWduZWQgdGhlIGxhc3QgWElEIGl0IGNhbiBzYWZlbHkgdXNlLCBhbmQKQEAgLTE3 MjcsNyArMTc0NSw3IEBAIFNscnVQYWdlUHJlY2VkZXNUZXN0T2Zmc2V0KFNscnVDdGwgY3Rs LCBpbnQgcGVyX3BhZ2UsIHVpbnQzMiBvZmZzZXQpCiAgKiBkbyBub3QgYXBwbHkgdG8gdGhl bS4pCiAgKi8KIHZvaWQKLVNscnVQYWdlUHJlY2VkZXNVbml0VGVzdHMoU2xydUN0bCBjdGws IGludCBwZXJfcGFnZSkKK1NscnVQYWdlUHJlY2VkZXNVbml0VGVzdHMoU2xydURlc2MgKmN0 bCwgaW50IHBlcl9wYWdlKQogewogCS8qIFRlc3QgZmlyc3QsIG1pZGRsZSBhbmQgbGFzdCBl bnRyaWVzIG9mIGEgcGFnZS4gKi8KIAlTbHJ1UGFnZVByZWNlZGVzVGVzdE9mZnNldChjdGws IHBlcl9wYWdlLCAwKTsKQEAgLTE3NDIsNyArMTc2MCw3IEBAIFNscnVQYWdlUHJlY2VkZXNV bml0VGVzdHMoU2xydUN0bCBjdGwsIGludCBwZXJfcGFnZSkKICAqCQlvbmUgY29udGFpbmlu ZyB0aGUgcGFnZSBwYXNzZWQgYXMgImRhdGEiLgogICovCiBib29sCi1TbHJ1U2NhbkRpckNi UmVwb3J0UHJlc2VuY2UoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQ2NCBzZWdw YWdlLAorU2xydVNjYW5EaXJDYlJlcG9ydFByZXNlbmNlKFNscnVEZXNjICpjdGwsIGNoYXIg KmZpbGVuYW1lLCBpbnQ2NCBzZWdwYWdlLAogCQkJCQkJCXZvaWQgKmRhdGEpCiB7CiAJaW50 NjQJCWN1dG9mZlBhZ2UgPSAqKGludDY0ICopIGRhdGE7CkBAIC0xNzU4LDcgKzE3NzYsNyBA QCBTbHJ1U2NhbkRpckNiUmVwb3J0UHJlc2VuY2UoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVu YW1lLCBpbnQ2NCBzZWdwYWdlLAogICoJCVRoaXMgY2FsbGJhY2sgZGVsZXRlcyBzZWdtZW50 cyBwcmlvciB0byB0aGUgb25lIHBhc3NlZCBpbiBhcyAiZGF0YSIuCiAgKi8KIHN0YXRpYyBi b29sCi1TbHJ1U2NhbkRpckNiRGVsZXRlQ3V0b2ZmKFNscnVDdGwgY3RsLCBjaGFyICpmaWxl bmFtZSwgaW50NjQgc2VncGFnZSwKK1NscnVTY2FuRGlyQ2JEZWxldGVDdXRvZmYoU2xydURl c2MgKmN0bCwgY2hhciAqZmlsZW5hbWUsIGludDY0IHNlZ3BhZ2UsCiAJCQkJCQkgIHZvaWQg KmRhdGEpCiB7CiAJaW50NjQJCWN1dG9mZlBhZ2UgPSAqKGludDY0ICopIGRhdGE7CkBAIC0x Nzc0LDcgKzE3OTIsNyBAQCBTbHJ1U2NhbkRpckNiRGVsZXRlQ3V0b2ZmKFNscnVDdGwgY3Rs LCBjaGFyICpmaWxlbmFtZSwgaW50NjQgc2VncGFnZSwKICAqCQlUaGlzIGNhbGxiYWNrIGRl bGV0ZXMgYWxsIHNlZ21lbnRzLgogICovCiBib29sCi1TbHJ1U2NhbkRpckNiRGVsZXRlQWxs KFNscnVDdGwgY3RsLCBjaGFyICpmaWxlbmFtZSwgaW50NjQgc2VncGFnZSwgdm9pZCAqZGF0 YSkKK1NscnVTY2FuRGlyQ2JEZWxldGVBbGwoU2xydURlc2MgKmN0bCwgY2hhciAqZmlsZW5h bWUsIGludDY0IHNlZ3BhZ2UsIHZvaWQgKmRhdGEpCiB7CiAJU2xydUludGVybmFsRGVsZXRl U2VnbWVudChjdGwsIHNlZ3BhZ2UgLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKTsKIApAQCAt MTc4OCw5ICsxODA2LDkgQEAgU2xydVNjYW5EaXJDYkRlbGV0ZUFsbChTbHJ1Q3RsIGN0bCwg Y2hhciAqZmlsZW5hbWUsIGludDY0IHNlZ3BhZ2UsIHZvaWQgKmRhdGEpCiAgKiBTTFJVIHNl Z21lbnQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbAotU2xydUNvcnJlY3RTZWdtZW50Rmls ZW5hbWVMZW5ndGgoU2xydUN0bCBjdGwsIHNpemVfdCBsZW4pCitTbHJ1Q29ycmVjdFNlZ21l bnRGaWxlbmFtZUxlbmd0aChTbHJ1RGVzYyAqY3RsLCBzaXplX3QgbGVuKQogewotCWlmIChj dGwtPmxvbmdfc2VnbWVudF9uYW1lcykKKwlpZiAoY3RsLT5vcHRpb25zLmxvbmdfc2VnbWVu dF9uYW1lcykKIAkJcmV0dXJuIChsZW4gPT0gMTUpOwkJLyogc2VlIFNscnVGaWxlTmFtZSgp ICovCiAJZWxzZQogCkBAIC0xODIxLDcgKzE4MzksNyBAQCBTbHJ1Q29ycmVjdFNlZ21lbnRG aWxlbmFtZUxlbmd0aChTbHJ1Q3RsIGN0bCwgc2l6ZV90IGxlbikKICAqIE5vdGUgdGhhdCBu byBsb2NraW5nIGlzIGFwcGxpZWQuCiAgKi8KIGJvb2wKLVNscnVTY2FuRGlyZWN0b3J5KFNs cnVDdGwgY3RsLCBTbHJ1U2NhbkNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICpkYXRhKQorU2xy dVNjYW5EaXJlY3RvcnkoU2xydURlc2MgKmN0bCwgU2xydVNjYW5DYWxsYmFjayBjYWxsYmFj aywgdm9pZCAqZGF0YSkKIHsKIAlib29sCQlyZXR2YWwgPSBmYWxzZTsKIAlESVIJCSAgICpj bGRpcjsKQEAgLTE4MjksOCArMTg0Nyw4IEBAIFNscnVTY2FuRGlyZWN0b3J5KFNscnVDdGwg Y3RsLCBTbHJ1U2NhbkNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICpkYXRhKQogCWludDY0CQlz ZWdubzsKIAlpbnQ2NAkJc2VncGFnZTsKIAotCWNsZGlyID0gQWxsb2NhdGVEaXIoY3RsLT5E aXIpOwotCXdoaWxlICgoY2xkZSA9IFJlYWREaXIoY2xkaXIsIGN0bC0+RGlyKSkgIT0gTlVM TCkKKwljbGRpciA9IEFsbG9jYXRlRGlyKGN0bC0+b3B0aW9ucy5EaXIpOworCXdoaWxlICgo Y2xkZSA9IFJlYWREaXIoY2xkaXIsIGN0bC0+b3B0aW9ucy5EaXIpKSAhPSBOVUxMKQogCXsK IAkJc2l6ZV90CQlsZW47CiAKQEAgLTE4NDMsNyArMTg2MSw3IEBAIFNscnVTY2FuRGlyZWN0 b3J5KFNscnVDdGwgY3RsLCBTbHJ1U2NhbkNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICpkYXRh KQogCQkJc2VncGFnZSA9IHNlZ25vICogU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKIAogCQkJ ZWxvZyhERUJVRzIsICJTbHJ1U2NhbkRpcmVjdG9yeSBpbnZva2luZyBjYWxsYmFjayBvbiAl cy8lcyIsCi0JCQkJIGN0bC0+RGlyLCBjbGRlLT5kX25hbWUpOworCQkJCSBjdGwtPm9wdGlv bnMuRGlyLCBjbGRlLT5kX25hbWUpOwogCQkJcmV0dmFsID0gY2FsbGJhY2soY3RsLCBjbGRl LT5kX25hbWUsIHNlZ3BhZ2UsIGRhdGEpOwogCQkJaWYgKHJldHZhbCkKIAkJCQlicmVhazsK QEAgLTE4NjEsNyArMTg3OSw3IEBAIFNscnVTY2FuRGlyZWN0b3J5KFNscnVDdGwgY3RsLCBT bHJ1U2NhbkNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICpkYXRhKQogICogcGVyZm9ybXMgdGhl IGZzeW5jLgogICovCiBpbnQKLVNscnVTeW5jRmlsZVRhZyhTbHJ1Q3RsIGN0bCwgY29uc3Qg RmlsZVRhZyAqZnRhZywgY2hhciAqcGF0aCkKK1NscnVTeW5jRmlsZVRhZyhTbHJ1RGVzYyAq Y3RsLCBjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKQogewogCWludAkJCWZkOwog CWludAkJCXNhdmVfZXJybm87CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9zdWJ0cmFucy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc3VidHJhbnMu YwppbmRleCBjNmNlNzFmYzcwMy4uY2EyNzNmYjQ2ODAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3N1YnRyYW5zLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0vc3VidHJhbnMuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgImFjY2Vz cy90cmFuc2FtLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdfdHJh Y2UuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNsdWRlICJ1dGls cy9ndWNfaG9va3MuaCIKICNpbmNsdWRlICJ1dGlscy9zbmFwbWdyLmgiCiAKQEAgLTY2LDE2 ICs2NywyMiBAQCBUcmFuc2FjdGlvbklkVG9QYWdlKFRyYW5zYWN0aW9uSWQgeGlkKQogI2Rl ZmluZSBUcmFuc2FjdGlvbklkVG9FbnRyeSh4aWQpICgoeGlkKSAlIChUcmFuc2FjdGlvbklk KSBTVUJUUkFOU19YQUNUU19QRVJfUEFHRSkKIAogCitzdGF0aWMgdm9pZCBTVUJUUkFOU1No bWVtUmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgU1VCVFJBTlNTaG1lbUluaXQo dm9pZCAqYXJnKTsKK3N0YXRpYyBib29sIFN1YlRyYW5zUGFnZVByZWNlZGVzKGludDY0IHBh Z2UxLCBpbnQ2NCBwYWdlMik7CitzdGF0aWMgaW50CXN1YnRyYW5zX2VycmRldGFpbF9mb3Jf aW9fZXJyb3IoY29uc3Qgdm9pZCAqb3BhcXVlX2RhdGEpOworCitjb25zdCBTaG1lbUNhbGxi YWNrcyBTVUJUUkFOU1NobWVtQ2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gU1VCVFJB TlNTaG1lbVJlcXVlc3QsCisJLmluaXRfZm4gPSBTVUJUUkFOU1NobWVtSW5pdCwKK307CisK IC8qCiAgKiBMaW5rIHRvIHNoYXJlZC1tZW1vcnkgZGF0YSBzdHJ1Y3R1cmVzIGZvciBTVUJU UkFOUyBjb250cm9sCiAgKi8KLXN0YXRpYyBTbHJ1Q3RsRGF0YSBTdWJUcmFuc0N0bERhdGE7 Ci0KLSNkZWZpbmUgU3ViVHJhbnNDdGwgICgmU3ViVHJhbnNDdGxEYXRhKQorc3RhdGljIFNs cnVEZXNjIFN1YlRyYW5zU2xydURlc2M7CiAKLQotc3RhdGljIGJvb2wgU3ViVHJhbnNQYWdl UHJlY2VkZXMoaW50NjQgcGFnZTEsIGludDY0IHBhZ2UyKTsKLXN0YXRpYyBpbnQJc3VidHJh bnNfZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihjb25zdCB2b2lkICpvcGFxdWVfZGF0YSk7Cisj ZGVmaW5lIFN1YlRyYW5zQ3RsICAoJlN1YlRyYW5zU2xydURlc2MpCiAKIAogLyoKQEAgLTIw NywxNyArMjE0LDEzIEBAIFNVQlRSQU5TU2htZW1CdWZmZXJzKHZvaWQpCiAJcmV0dXJuIE1p bihNYXgoMTYsIHN1YnRyYW5zYWN0aW9uX2J1ZmZlcnMpLCBTTFJVX01BWF9BTExPV0VEX0JV RkZFUlMpOwogfQogCisKKwogLyoKLSAqIEluaXRpYWxpemF0aW9uIG9mIHNoYXJlZCBtZW1v cnkgZm9yIFNVQlRSQU5TCisgKiBSZWdpc3RlciBzaGFyZWQgbWVtb3J5IGZvciBTVUJUUkFO UwogICovCi1TaXplCi1TVUJUUkFOU1NobWVtU2l6ZSh2b2lkKQotewotCXJldHVybiBTaW1w bGVMcnVTaG1lbVNpemUoU1VCVFJBTlNTaG1lbUJ1ZmZlcnMoKSwgMCk7Ci19Ci0KLXZvaWQK LVNVQlRSQU5TU2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAorU1VCVFJBTlNTaG1lbVJl cXVlc3Qodm9pZCAqYXJnKQogewogCS8qIElmIGF1dG8tdHVuaW5nIGlzIHJlcXVlc3RlZCwg bm93IGlzIHRoZSB0aW1lIHRvIGRvIGl0ICovCiAJaWYgKHN1YnRyYW5zYWN0aW9uX2J1ZmZl cnMgPT0gMCkKQEAgLTI0MCwxMSArMjQzLDI1IEBAIFNVQlRSQU5TU2htZW1Jbml0KHZvaWQp CiAJfQogCUFzc2VydChzdWJ0cmFuc2FjdGlvbl9idWZmZXJzICE9IDApOwogCi0JU3ViVHJh bnNDdGwtPlBhZ2VQcmVjZWRlcyA9IFN1YlRyYW5zUGFnZVByZWNlZGVzOwotCVN1YlRyYW5z Q3RsLT5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yID0gc3VidHJhbnNfZXJyZGV0YWlsX2Zvcl9p b19lcnJvcjsKLQlTaW1wbGVMcnVJbml0KFN1YlRyYW5zQ3RsLCAic3VidHJhbnNhY3Rpb24i LCBTVUJUUkFOU1NobWVtQnVmZmVycygpLCAwLAotCQkJCSAgInBnX3N1YnRyYW5zIiwgTFdU UkFOQ0hFX1NVQlRSQU5TX0JVRkZFUiwKLQkJCQkgIExXVFJBTkNIRV9TVUJUUkFOU19TTFJV LCBTWU5DX0hBTkRMRVJfTk9ORSwgZmFsc2UpOworCVNpbXBsZUxydVJlcXVlc3QoJlN1YlRy YW5zU2xydURlc2MsCisJCS5uYW1lID0gInN1YnRyYW5zYWN0aW9uIiwKKwkJLkRpciA9ICJw Z19zdWJ0cmFucyIsCisJCS5sb25nX3NlZ21lbnRfbmFtZXMgPSBmYWxzZSwKKworCQkubnNs b3RzID0gU1VCVFJBTlNTaG1lbUJ1ZmZlcnMoKSwKKworCQkuc3luY19oYW5kbGVyID0gU1lO Q19IQU5ETEVSX05PTkUsCisJCS5QYWdlUHJlY2VkZXMgPSBTdWJUcmFuc1BhZ2VQcmVjZWRl cywKKwkJLmVycmRldGFpbF9mb3JfaW9fZXJyb3IgPSBzdWJ0cmFuc19lcnJkZXRhaWxfZm9y X2lvX2Vycm9yLAorCisJCS5idWZmZXJfdHJhbmNoZV9pZCA9IExXVFJBTkNIRV9TVUJUUkFO U19CVUZGRVIsCisJCS5iYW5rX3RyYW5jaGVfaWQgPSBMV1RSQU5DSEVfU1VCVFJBTlNfU0xS VSwKKwkpOworfQorCitzdGF0aWMgdm9pZAorU1VCVFJBTlNTaG1lbUluaXQodm9pZCAqYXJn KQorewogCVNscnVQYWdlUHJlY2VkZXNVbml0VGVzdHMoU3ViVHJhbnNDdGwsIFNVQlRSQU5T X1hBQ1RTX1BFUl9QQUdFKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvYXN5bmMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKaW5kZXggNWM5YTU2 YzNkNDAuLjliZTk4YWZjMWQ5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9h c3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKQEAgLTE3OSw2ICsx NzksNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKICNpbmNsdWRlICJzdG9yYWdl L2xtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NzaWduYWwuaCIKKyNpbmNsdWRlICJz dG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCiAjaW5j bHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9kc2EuaCIKQEAgLTM0 NSw2ICszNDYsMTUgQEAgdHlwZWRlZiBzdHJ1Y3QgQXN5bmNRdWV1ZUNvbnRyb2wKIAogc3Rh dGljIEFzeW5jUXVldWVDb250cm9sICphc3luY1F1ZXVlQ29udHJvbDsKIAorc3RhdGljIHZv aWQgQXN5bmNTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIEFzeW5jU2ht ZW1Jbml0KHZvaWQgKmFyZyk7CisKK2NvbnN0IFNobWVtQ2FsbGJhY2tzIEFzeW5jU2htZW1D YWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBBc3luY1NobWVtUmVxdWVzdCwKKwkuaW5p dF9mbiA9IEFzeW5jU2htZW1Jbml0LAorfTsKKworCiAjZGVmaW5lIFFVRVVFX0hFQUQJCQkJ CShhc3luY1F1ZXVlQ29udHJvbC0+aGVhZCkKICNkZWZpbmUgUVVFVUVfVEFJTAkJCQkJKGFz eW5jUXVldWVDb250cm9sLT50YWlsKQogI2RlZmluZSBRVUVVRV9TVE9QX1BBR0UJCQkJKGFz eW5jUXVldWVDb250cm9sLT5zdG9wUGFnZSkKQEAgLTM1OSw5ICszNjksMTMgQEAgc3RhdGlj IEFzeW5jUXVldWVDb250cm9sICphc3luY1F1ZXVlQ29udHJvbDsKIC8qCiAgKiBUaGUgU0xS VSBidWZmZXIgYXJlYSB0aHJvdWdoIHdoaWNoIHdlIGFjY2VzcyB0aGUgbm90aWZpY2F0aW9u IHF1ZXVlCiAgKi8KLXN0YXRpYyBTbHJ1Q3RsRGF0YSBOb3RpZnlDdGxEYXRhOworc3RhdGlj IGlubGluZSBib29sIGFzeW5jUXVldWVQYWdlUHJlY2VkZXMoaW50NjQgcCwgaW50NjQgcSk7 CitzdGF0aWMgaW50CWFzeW5jUXVldWVFcnJkZXRhaWxGb3JJb0Vycm9yKGNvbnN0IHZvaWQg Km9wYXF1ZV9kYXRhKTsKKworc3RhdGljIFNscnVEZXNjIE5vdGlmeVNscnVEZXNjOwogCi0j ZGVmaW5lIE5vdGlmeUN0bAkJCQkJKCZOb3RpZnlDdGxEYXRhKQorCisjZGVmaW5lIE5vdGlm eUN0bAkJCQkJKCZOb3RpZnlTbHJ1RGVzYykKICNkZWZpbmUgUVVFVUVfUEFHRVNJWkUJCQkJ QkxDS1NaCiAKICNkZWZpbmUgUVVFVUVfRlVMTF9XQVJOX0lOVEVSVkFMCTUwMDAJLyogd2Fy biBhdCBtb3N0IG9uY2UgZXZlcnkgNXMgKi8KQEAgLTU3MCw5ICs1ODQsNyBAQCBib29sCQlU cmFjZV9ub3RpZnkgPSBmYWxzZTsKIGludAkJCW1heF9ub3RpZnlfcXVldWVfcGFnZXMgPSAx MDQ4NTc2OwogCiAvKiBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzICovCi1zdGF0aWMgaW50 CWFzeW5jUXVldWVFcnJkZXRhaWxGb3JJb0Vycm9yKGNvbnN0IHZvaWQgKm9wYXF1ZV9kYXRh KTsKIHN0YXRpYyBpbmxpbmUgaW50NjQgYXN5bmNRdWV1ZVBhZ2VEaWZmKGludDY0IHAsIGlu dDY0IHEpOwotc3RhdGljIGlubGluZSBib29sIGFzeW5jUXVldWVQYWdlUHJlY2VkZXMoaW50 NjQgcCwgaW50NjQgcSk7CiBzdGF0aWMgaW5saW5lIHZvaWQgR2xvYmFsQ2hhbm5lbEtleUlu aXQoR2xvYmFsQ2hhbm5lbEtleSAqa2V5LCBPaWQgZGJvaWQsCiAJCQkJCQkJCQkJY29uc3Qg Y2hhciAqY2hhbm5lbCk7CiBzdGF0aWMgZHNoYXNoX2hhc2ggZ2xvYmFsQ2hhbm5lbFRhYmxl SGFzaChjb25zdCB2b2lkICprZXksIHNpemVfdCBzaXplLApAQCAtNzgwLDc4ICs3OTIsNjUg QEAgaW5pdFBlbmRpbmdMaXN0ZW5BY3Rpb25zKHZvaWQpCiB9CiAKIC8qCi0gKiBSZXBvcnQg c3BhY2UgbmVlZGVkIGZvciBvdXIgc2hhcmVkIG1lbW9yeSBhcmVhCisgKiBSZWdpc3RlciBv dXIgc2hhcmVkIG1lbW9yeSBuZWVkcwogICovCi1TaXplCi1Bc3luY1NobWVtU2l6ZSh2b2lk KQorc3RhdGljIHZvaWQKK0FzeW5jU2htZW1SZXF1ZXN0KHZvaWQgKmFyZykKIHsKKwlzdGF0 aWMgU2htZW1TdHJ1Y3REZXNjIEFzeW5jUXVldWVDb250cm9sU2htZW1EZXNjOwogCVNpemUJ CXNpemU7CiAKLQkvKiBUaGlzIGhhZCBiZXR0ZXIgbWF0Y2ggQXN5bmNTaG1lbUluaXQgKi8K IAlzaXplID0gbXVsX3NpemUoTWF4QmFja2VuZHMsIHNpemVvZihRdWV1ZUJhY2tlbmRTdGF0 dXMpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgb2Zmc2V0b2YoQXN5bmNRdWV1ZUNvbnRy b2wsIGJhY2tlbmQpKTsKIAotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaW1wbGVMcnVTaG1l bVNpemUobm90aWZ5X2J1ZmZlcnMsIDApKTsKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJkFzeW5j UXVldWVDb250cm9sU2htZW1EZXNjLAorCQkubmFtZSA9ICJBc3luYyBRdWV1ZSBDb250cm9s IiwKKwkJLnNpemUgPSBzaXplLAorCQkucHRyID0gKHZvaWQgKiopICZhc3luY1F1ZXVlQ29u dHJvbCwKKwkpOwogCi0JcmV0dXJuIHNpemU7Ci19CisJU2ltcGxlTHJ1UmVxdWVzdCgmTm90 aWZ5U2xydURlc2MsCisJCS5uYW1lID0gIm5vdGlmeSIsCisJCS5EaXIgPSAicGdfbm90aWZ5 IiwKIAotLyoKLSAqIEluaXRpYWxpemUgb3VyIHNoYXJlZCBtZW1vcnkgYXJlYQotICovCi12 b2lkCi1Bc3luY1NobWVtSW5pdCh2b2lkKQotewotCWJvb2wJCWZvdW5kOwotCVNpemUJCXNp emU7CisJCS8qIGxvbmcgc2VnbWVudCBuYW1lcyBhcmUgdXNlZCBpbiBvcmRlciB0byBhdm9p ZCB3cmFwYXJvdW5kICovCisJCS5sb25nX3NlZ21lbnRfbmFtZXMgPSB0cnVlLAogCi0JLyoK LQkgKiBDcmVhdGUgb3IgYXR0YWNoIHRvIHRoZSBBc3luY1F1ZXVlQ29udHJvbCBzdHJ1Y3R1 cmUuCi0JICovCi0Jc2l6ZSA9IG11bF9zaXplKE1heEJhY2tlbmRzLCBzaXplb2YoUXVldWVC YWNrZW5kU3RhdHVzKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIG9mZnNldG9mKEFzeW5j UXVldWVDb250cm9sLCBiYWNrZW5kKSk7CisJCS5uc2xvdHMgPSBub3RpZnlfYnVmZmVycywK IAotCWFzeW5jUXVldWVDb250cm9sID0gKEFzeW5jUXVldWVDb250cm9sICopCi0JCVNobWVt SW5pdFN0cnVjdCgiQXN5bmMgUXVldWUgQ29udHJvbCIsIHNpemUsICZmb3VuZCk7CisJCS5z eW5jX2hhbmRsZXIgPSBTWU5DX0hBTkRMRVJfTk9ORSwKKwkJLlBhZ2VQcmVjZWRlcyA9IGFz eW5jUXVldWVQYWdlUHJlY2VkZXMsCisJCS5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yID0gYXN5 bmNRdWV1ZUVycmRldGFpbEZvcklvRXJyb3IsCiAKLQlpZiAoIWZvdW5kKQorCQkuYnVmZmVy X3RyYW5jaGVfaWQgPSBMV1RSQU5DSEVfTk9USUZZX0JVRkZFUiwKKwkJLmJhbmtfdHJhbmNo ZV9pZCA9IExXVFJBTkNIRV9OT1RJRllfU0xSVSwKKwkpOworfQorCitzdGF0aWMgdm9pZAor QXN5bmNTaG1lbUluaXQodm9pZCAqYXJnKQoreworCVNFVF9RVUVVRV9QT1MoUVVFVUVfSEVB RCwgMCwgMCk7CisJU0VUX1FVRVVFX1BPUyhRVUVVRV9UQUlMLCAwLCAwKTsKKwlRVUVVRV9T VE9QX1BBR0UgPSAwOworCVFVRVVFX0ZJUlNUX0xJU1RFTkVSID0gSU5WQUxJRF9QUk9DX05V TUJFUjsKKwlhc3luY1F1ZXVlQ29udHJvbC0+bGFzdFF1ZXVlRmlsbFdhcm4gPSAwOworCWFz eW5jUXVldWVDb250cm9sLT5nbG9iYWxDaGFubmVsVGFibGVEU0EgPSBEU0FfSEFORExFX0lO VkFMSUQ7CisJYXN5bmNRdWV1ZUNvbnRyb2wtPmdsb2JhbENoYW5uZWxUYWJsZURTSCA9IERT SEFTSF9IQU5ETEVfSU5WQUxJRDsKKwlmb3IgKGludCBpID0gMDsgaSA8IE1heEJhY2tlbmRz OyBpKyspCiAJewotCQkvKiBGaXJzdCB0aW1lIHRocm91Z2gsIHNvIGluaXRpYWxpemUgaXQg Ki8KLQkJU0VUX1FVRVVFX1BPUyhRVUVVRV9IRUFELCAwLCAwKTsKLQkJU0VUX1FVRVVFX1BP UyhRVUVVRV9UQUlMLCAwLCAwKTsKLQkJUVVFVUVfU1RPUF9QQUdFID0gMDsKLQkJUVVFVUVf RklSU1RfTElTVEVORVIgPSBJTlZBTElEX1BST0NfTlVNQkVSOwotCQlhc3luY1F1ZXVlQ29u dHJvbC0+bGFzdFF1ZXVlRmlsbFdhcm4gPSAwOwotCQlhc3luY1F1ZXVlQ29udHJvbC0+Z2xv YmFsQ2hhbm5lbFRhYmxlRFNBID0gRFNBX0hBTkRMRV9JTlZBTElEOwotCQlhc3luY1F1ZXVl Q29udHJvbC0+Z2xvYmFsQ2hhbm5lbFRhYmxlRFNIID0gRFNIQVNIX0hBTkRMRV9JTlZBTElE OwotCQlmb3IgKGludCBpID0gMDsgaSA8IE1heEJhY2tlbmRzOyBpKyspCi0JCXsKLQkJCVFV RVVFX0JBQ0tFTkRfUElEKGkpID0gSW52YWxpZFBpZDsKLQkJCVFVRVVFX0JBQ0tFTkRfREJP SUQoaSkgPSBJbnZhbGlkT2lkOwotCQkJUVVFVUVfTkVYVF9MSVNURU5FUihpKSA9IElOVkFM SURfUFJPQ19OVU1CRVI7Ci0JCQlTRVRfUVVFVUVfUE9TKFFVRVVFX0JBQ0tFTkRfUE9TKGkp LCAwLCAwKTsKLQkJCVFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkcoaSkgPSBmYWxzZTsK LQkJCVFVRVVFX0JBQ0tFTkRfSVNfQURWQU5DSU5HKGkpID0gZmFsc2U7Ci0JCX0KKwkJUVVF VUVfQkFDS0VORF9QSUQoaSkgPSBJbnZhbGlkUGlkOworCQlRVUVVRV9CQUNLRU5EX0RCT0lE KGkpID0gSW52YWxpZE9pZDsKKwkJUVVFVUVfTkVYVF9MSVNURU5FUihpKSA9IElOVkFMSURf UFJPQ19OVU1CRVI7CisJCVNFVF9RVUVVRV9QT1MoUVVFVUVfQkFDS0VORF9QT1MoaSksIDAs IDApOworCQlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpID0gZmFsc2U7CisJCVFV RVVFX0JBQ0tFTkRfSVNfQURWQU5DSU5HKGkpID0gZmFsc2U7CiAJfQogCiAJLyoKLQkgKiBT ZXQgdXAgU0xSVSBtYW5hZ2VtZW50IG9mIHRoZSBwZ19ub3RpZnkgZGF0YS4gTm90ZSB0aGF0 IGxvbmcgc2VnbWVudAotCSAqIG5hbWVzIGFyZSB1c2VkIGluIG9yZGVyIHRvIGF2b2lkIHdy YXBhcm91bmQuCisJICogRHVyaW5nIHN0YXJ0IG9yIHJlYm9vdCwgY2xlYW4gb3V0IHRoZSBw Z19ub3RpZnkgZGlyZWN0b3J5LgogCSAqLwotCU5vdGlmeUN0bC0+UGFnZVByZWNlZGVzID0g YXN5bmNRdWV1ZVBhZ2VQcmVjZWRlczsKLQlOb3RpZnlDdGwtPmVycmRldGFpbF9mb3JfaW9f ZXJyb3IgPSBhc3luY1F1ZXVlRXJyZGV0YWlsRm9ySW9FcnJvcjsKLQlTaW1wbGVMcnVJbml0 KE5vdGlmeUN0bCwgIm5vdGlmeSIsIG5vdGlmeV9idWZmZXJzLCAwLAotCQkJCSAgInBnX25v dGlmeSIsIExXVFJBTkNIRV9OT1RJRllfQlVGRkVSLCBMV1RSQU5DSEVfTk9USUZZX1NMUlUs Ci0JCQkJICBTWU5DX0hBTkRMRVJfTk9ORSwgdHJ1ZSk7Ci0KLQlpZiAoIWZvdW5kKQotCXsK LQkJLyoKLQkJICogRHVyaW5nIHN0YXJ0IG9yIHJlYm9vdCwgY2xlYW4gb3V0IHRoZSBwZ19u b3RpZnkgZGlyZWN0b3J5LgotCQkgKi8KLQkJKHZvaWQpIFNscnVTY2FuRGlyZWN0b3J5KE5v dGlmeUN0bCwgU2xydVNjYW5EaXJDYkRlbGV0ZUFsbCwgTlVMTCk7Ci0JfQorCSh2b2lkKSBT bHJ1U2NhbkRpcmVjdG9yeShOb3RpZnlDdGwsIFNscnVTY2FuRGlyQ2JEZWxldGVBbGwsIE5V TEwpOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2ku YyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwppbmRleCAwZGMzYTIxNDZlYy4u MTkyNWQzZGVmZjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2ku YworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKQEAgLTk4LDE2ICs5OCwx MSBAQCBDYWxjdWxhdGVTaG1lbVNpemUodm9pZCkKIAkvKiBsZWdhY3kgc3Vic3lzdGVtcyAq LwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBCdWZmZXJNYW5hZ2VyU2htZW1TaXplKCkpOwog CXNpemUgPSBhZGRfc2l6ZShzaXplLCBMb2NrTWFuYWdlclNobWVtU2l6ZSgpKTsKLQlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgUHJlZGljYXRlTG9ja1NobWVtU2l6ZSgpKTsKIAlzaXplID0g YWRkX3NpemUoc2l6ZSwgWExvZ1ByZWZldGNoU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRf c2l6ZShzaXplLCBYTE9HU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBY TG9nUmVjb3ZlcnlTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIENMT0dT aG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIENvbW1pdFRzU2htZW1TaXpl KCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTVUJUUkFOU1NobWVtU2l6ZSgpKTsKIAlz aXplID0gYWRkX3NpemUoc2l6ZSwgVHdvUGhhc2VTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFk ZF9zaXplKHNpemUsIEJhY2tncm91bmRXb3JrZXJTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFk ZF9zaXplKHNpemUsIE11bHRpWGFjdFNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUo c2l6ZSwgTFdMb2NrU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBCYWNr ZW5kU3RhdHVzU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBDaGVja3Bv aW50ZXJTaG1lbVNpemUoKSk7CkBAIC0xMjEsNyArMTE2LDYgQEAgQ2FsY3VsYXRlU2htZW1T aXplKHZvaWQpCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIEFwcGx5TGF1bmNoZXJTaG1lbVNp emUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIEJUcmVlU2htZW1TaXplKCkpOwogCXNp emUgPSBhZGRfc2l6ZShzaXplLCBTeW5jU2NhblNobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRk X3NpemUoc2l6ZSwgQXN5bmNTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUs IFN0YXRzU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTbG90U3luY1No bWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgQWlvU2htZW1TaXplKCkpOwpA QCAtMjc3LDEwICsyNzEsNiBAQCBDcmVhdGVPckF0dGFjaFNobWVtU3RydWN0cyh2b2lkKQog CVhMT0dTaG1lbUluaXQoKTsKIAlYTG9nUHJlZmV0Y2hTaG1lbUluaXQoKTsKIAlYTG9nUmVj b3ZlcnlTaG1lbUluaXQoKTsKLQlDTE9HU2htZW1Jbml0KCk7Ci0JQ29tbWl0VHNTaG1lbUlu aXQoKTsKLQlTVUJUUkFOU1NobWVtSW5pdCgpOwotCU11bHRpWGFjdFNobWVtSW5pdCgpOwog CUJ1ZmZlck1hbmFnZXJTaG1lbUluaXQoKTsKIAogCS8qCkBAIC0yODgsMTEgKzI3OCw2IEBA IENyZWF0ZU9yQXR0YWNoU2htZW1TdHJ1Y3RzKHZvaWQpCiAJICovCiAJTG9ja01hbmFnZXJT aG1lbUluaXQoKTsKIAotCS8qCi0JICogU2V0IHVwIHByZWRpY2F0ZSBsb2NrIG1hbmFnZXIK LQkgKi8KLQlQcmVkaWNhdGVMb2NrU2htZW1Jbml0KCk7Ci0KIAkvKgogCSAqIFNldCB1cCBw cm9jZXNzIHRhYmxlCiAJICovCkBAIC0zMTksNyArMzA0LDYgQEAgQ3JlYXRlT3JBdHRhY2hT aG1lbVN0cnVjdHModm9pZCkKIAkgKi8KIAlCVHJlZVNobWVtSW5pdCgpOwogCVN5bmNTY2Fu U2htZW1Jbml0KCk7Ci0JQXN5bmNTaG1lbUluaXQoKTsKIAlTdGF0c1NobWVtSW5pdCgpOwog CUFpb1NobWVtSW5pdCgpOwogCVdhaXRMU05TaG1lbUluaXQoKTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9zaG1lbS5jCmluZGV4IDEyZDA2Mjk5ZGM4Li43MzI5N2U4MjI2NSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9zaG1lbS5jCkBAIC0xMzQsNiArMTM0LDcgQEAKIAogI2luY2x1ZGUgPHVuaXN0 ZC5oPgogCisjaW5jbHVkZSAiYWNjZXNzL3NscnUuaCIKICNpbmNsdWRlICJjb21tb24vaW50 LmgiCiAjaW5jbHVkZSAiZm1nci5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKQEAgLTU1Niw2 ICs1NTcsOSBAQCBBdHRhY2hPckluaXRTaG1lbUluZGV4RW50cnkoU2htZW1SZXF1ZXN0ICpy ZXF1ZXN0LAogCQkJY2FzZSBTSE1FTV9LSU5EX0hBU0g6CiAJCQkJc2htZW1faGFzaF9hdHRh Y2goZGVzYywgcmVxdWVzdC0+b3B0aW9ucyk7CiAJCQkJYnJlYWs7CisJCQljYXNlIFNITUVN X0tJTkRfU0xSVToKKwkJCQlzaG1lbV9zbHJ1X2F0dGFjaChkZXNjLCByZXF1ZXN0LT5vcHRp b25zKTsKKwkJCQlicmVhazsKIAkJfQogCX0KIAllbHNlIGlmICghbWF5X2luaXQpCkBAIC02 MTUsNiArNjE5LDkgQEAgQXR0YWNoT3JJbml0U2htZW1JbmRleEVudHJ5KFNobWVtUmVxdWVz dCAqcmVxdWVzdCwKIAkJCWNhc2UgU0hNRU1fS0lORF9IQVNIOgogCQkJCXNobWVtX2hhc2hf aW5pdChkZXNjLCByZXF1ZXN0LT5vcHRpb25zKTsKIAkJCQlicmVhazsKKwkJCWNhc2UgU0hN RU1fS0lORF9TTFJVOgorCQkJCXNobWVtX3NscnVfaW5pdChkZXNjLCByZXF1ZXN0LT5vcHRp b25zKTsKKwkJCQlicmVhazsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3By ZWRpY2F0ZS5jCmluZGV4IDRmODBmYzczNjM5Li43MThlNmIwN2Y1YyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jCisrKyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYwpAQCAtMTUyLDEwICsxNTIsNiBAQAogLyoKICAq IElOVEVSRkFDRSBST1VUSU5FUwogICoKLSAqIGhvdXNla2VlcGluZyBmb3Igc2V0dGluZyB1 cCBzaGFyZWQgbWVtb3J5IHByZWRpY2F0ZSBsb2NrIHN0cnVjdHVyZXMKLSAqCQlQcmVkaWNh dGVMb2NrU2htZW1Jbml0KHZvaWQpCi0gKgkJUHJlZGljYXRlTG9ja1NobWVtU2l6ZSh2b2lk KQotICoKICAqIHByZWRpY2F0ZSBsb2NrIHJlcG9ydGluZwogICoJCUdldFByZWRpY2F0ZUxv Y2tTdGF0dXNEYXRhKHZvaWQpCiAgKgkJUGFnZUlzUHJlZGljYXRlTG9ja2VkKFJlbGF0aW9u IHJlbGF0aW9uLCBCbG9ja051bWJlciBibGtubykKQEAgLTIxMSw2ICsyMDcsOCBAQAogI2lu Y2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlX2ludGVybmFscy5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCisjaW5jbHVkZSAi c3RvcmFnZS9zaG1lbS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgogI2lu Y2x1ZGUgInV0aWxzL2d1Y19ob29rcy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2lu Y2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKQEAgLTMyMiw5ICszMjAsMTIgQEAKIC8qCiAgKiBU aGUgU0xSVSBidWZmZXIgYXJlYSB0aHJvdWdoIHdoaWNoIHdlIGFjY2VzcyB0aGUgb2xkIHhp ZHMuCiAgKi8KLXN0YXRpYyBTbHJ1Q3RsRGF0YSBTZXJpYWxTbHJ1Q3RsRGF0YTsKK3N0YXRp YyBib29sIFNlcmlhbFBhZ2VQcmVjZWRlc0xvZ2ljYWxseShpbnQ2NCBwYWdlMSwgaW50NjQg cGFnZTIpOworc3RhdGljIGludAlzZXJpYWxfZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihjb25z dCB2b2lkICpvcGFxdWVfZGF0YSk7CiAKLSNkZWZpbmUgU2VyaWFsU2xydUN0bAkJCSgmU2Vy aWFsU2xydUN0bERhdGEpCitzdGF0aWMgU2xydURlc2MgU2VyaWFsU2xydURlc2M7CisKKyNk ZWZpbmUgU2VyaWFsU2xydUN0bAkJCSgmU2VyaWFsU2xydURlc2MpCiAKICNkZWZpbmUgU0VS SUFMX1BBR0VTSVpFCQkJQkxDS1NaCiAjZGVmaW5lIFNFUklBTF9FTlRSWVNJWkUJCQlzaXpl b2YoU2VyQ29tbWl0U2VxTm8pCkBAIC0zODQsNiArMzg1LDE3IEBAIGludAkJCW1heF9wcmVk aWNhdGVfbG9ja3NfcGVyX3BhZ2U7CS8qIGluIGd1Y190YWJsZXMuYyAqLwogICovCiBzdGF0 aWMgUHJlZFhhY3RMaXN0IFByZWRYYWN0OwogCitzdGF0aWMgdm9pZCBQcmVkaWNhdGVMb2Nr U2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBQcmVkaWNhdGVMb2NrU2ht ZW1Jbml0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBQcmVkaWNhdGVMb2NrU2htZW1BdHRh Y2godm9pZCAqYXJnKTsKKworY29uc3QgU2htZW1DYWxsYmFja3MgUHJlZGljYXRlTG9ja1No bWVtQ2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gUHJlZGljYXRlTG9ja1NobWVtUmVx dWVzdCwKKwkuaW5pdF9mbiA9IFByZWRpY2F0ZUxvY2tTaG1lbUluaXQsCisJLmF0dGFjaF9m biA9IFByZWRpY2F0ZUxvY2tTaG1lbUF0dGFjaCwKK307CisKKwogLyoKICAqIFRoaXMgcHJv dmlkZXMgYSBwb29sIG9mIFJXQ29uZmxpY3QgZGF0YSBlbGVtZW50cyB0byB1c2UgaW4gY29u ZmxpY3QgbGlzdHMKICAqIGJldHdlZW4gdHJhbnNhY3Rpb25zLgpAQCAtNDMxLDYgKzQ0Mywx NiBAQCBzdGF0aWMgYm9vbCBNeVhhY3REaWRXcml0ZSA9IGZhbHNlOwogICovCiBzdGF0aWMg U0VSSUFMSVpBQkxFWEFDVCAqU2F2ZWRTZXJpYWxpemFibGVYYWN0ID0gSW52YWxpZFNlcmlh bGl6YWJsZVhhY3Q7CiAKK3N0YXRpYyBTaG1lbVN0cnVjdERlc2MgUHJlZFhhY3RMaXN0U2ht ZW1EZXNjOworCitzdGF0aWMgaW50NjQgbWF4X3NlcmlhbGl6YWJsZV94YWN0czsKKworc3Rh dGljIFNobWVtU3RydWN0RGVzYyBSV0NvbmZsaWN0UG9vbFNobWVtRGVzYzsKKworc3RhdGlj IFNobWVtU3RydWN0RGVzYyBGaW5pc2hlZFNlcmlhbGl6YWJsZVNobWVtRGVzYzsKKworc3Rh dGljIFNobWVtU3RydWN0RGVzYyBTZXJpYWxDb250cm9sU2htZW1EZXNjOworCiAvKiBsb2Nh bCBmdW5jdGlvbnMgKi8KIAogc3RhdGljIFNFUklBTElaQUJMRVhBQ1QgKkNyZWF0ZVByZWRY YWN0KHZvaWQpOwpAQCAtNDQyLDEzICs0NjQsMTggQEAgc3RhdGljIHZvaWQgU2V0UG9zc2li bGVVbnNhZmVDb25mbGljdChTRVJJQUxJWkFCTEVYQUNUICpyb1hhY3QsIFNFUklBTElaQUJM RVhBQ1QKIHN0YXRpYyB2b2lkIFJlbGVhc2VSV0NvbmZsaWN0KFJXQ29uZmxpY3QgY29uZmxp Y3QpOwogc3RhdGljIHZvaWQgRmxhZ1N4YWN0VW5zYWZlKFNFUklBTElaQUJMRVhBQ1QgKnN4 YWN0KTsKIAotc3RhdGljIGJvb2wgU2VyaWFsUGFnZVByZWNlZGVzTG9naWNhbGx5KGludDY0 IHBhZ2UxLCBpbnQ2NCBwYWdlMik7Ci1zdGF0aWMgaW50CXNlcmlhbF9lcnJkZXRhaWxfZm9y X2lvX2Vycm9yKGNvbnN0IHZvaWQgKm9wYXF1ZV9kYXRhKTsKIHN0YXRpYyB2b2lkIFNlcmlh bEFkZChUcmFuc2FjdGlvbklkIHhpZCwgU2VyQ29tbWl0U2VxTm8gbWluQ29uZmxpY3RDb21t aXRTZXFObyk7CiBzdGF0aWMgU2VyQ29tbWl0U2VxTm8gU2VyaWFsR2V0TWluQ29uZmxpY3RD b21taXRTZXFObyhUcmFuc2FjdGlvbklkIHhpZCk7CiBzdGF0aWMgdm9pZCBTZXJpYWxTZXRB Y3RpdmVTZXJYbWluKFRyYW5zYWN0aW9uSWQgeGlkKTsKIAogc3RhdGljIHVpbnQzMiBwcmVk aWNhdGVsb2NrX2hhc2goY29uc3Qgdm9pZCAqa2V5LCBTaXplIGtleXNpemUpOworCitzdGF0 aWMgU2htZW1IYXNoRGVzYyBTZXJpYWxpemFibGVYaWRIYXNoRGVzYzsKKworc3RhdGljIFNo bWVtSGFzaERlc2MgUHJlZGljYXRlTG9ja1RhcmdldEhhc2hEZXNjOworCitzdGF0aWMgU2ht ZW1IYXNoRGVzYyBQcmVkaWNhdGVMb2NrSGFzaERlc2M7CisKIHN0YXRpYyB2b2lkIFN1bW1h cml6ZU9sZGVzdENvbW1pdHRlZFN4YWN0KHZvaWQpOwogc3RhdGljIFNuYXBzaG90IEdldFNh ZmVTbmFwc2hvdChTbmFwc2hvdCBvcmlnU25hcHNob3QpOwogc3RhdGljIFNuYXBzaG90IEdl dFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uU25hcHNob3RJbnQoU25hcHNob3Qgc25hcHNob3Qs CkBAIC0xMTAwLDczICsxMTI3LDYxIEBAIENoZWNrUG9pbnRQcmVkaWNhdGUodm9pZCkKIC8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoKLSAqIFByZWRpY2F0ZUxvY2tTaG1lbUluaXQg LS0gSW5pdGlhbGl6ZSB0aGUgcHJlZGljYXRlIGxvY2tpbmcgZGF0YSBzdHJ1Y3R1cmVzLgot ICoKLSAqIFRoaXMgaXMgY2FsbGVkIGZyb20gQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBo b3JlcygpLCB3aGljaCBzZWUgZm9yCi0gKiBtb3JlIGNvbW1lbnRzLiAgSW4gdGhlIG5vcm1h bCBwb3N0bWFzdGVyIGNhc2UsIHRoZSBzaGFyZWQgaGFzaCB0YWJsZXMKLSAqIGFyZSBjcmVh dGVkIGhlcmUuICBCYWNrZW5kcyBpbmhlcml0IHRoZSBwb2ludGVycwotICogdG8gdGhlIHNo YXJlZCB0YWJsZXMgdmlhIGZvcmsoKS4gIEluIHRoZSBFWEVDX0JBQ0tFTkQgY2FzZSwgZWFj aAotICogYmFja2VuZCByZS1leGVjdXRlcyB0aGlzIGNvZGUgdG8gb2J0YWluIHBvaW50ZXJz IHRvIHRoZSBhbHJlYWR5IGV4aXN0aW5nCi0gKiBzaGFyZWQgaGFzaCB0YWJsZXMuCisgKiBQ cmVkaWNhdGVMb2NrU2htZW1SZXF1ZXN0IC0tIFJlZ2lzdGVyIHRoZSBwcmVkaWNhdGUgbG9j a2luZyBkYXRhIHN0cnVjdHVyZXMuCiAgKi8KLXZvaWQKLVByZWRpY2F0ZUxvY2tTaG1lbUlu aXQodm9pZCkKK3N0YXRpYyB2b2lkCitQcmVkaWNhdGVMb2NrU2htZW1SZXF1ZXN0KHZvaWQg KmFyZykKIHsKLQlIQVNIQ1RMCQlpbmZvOwogCWludDY0CQltYXhfcHJlZGljYXRlX2xvY2tf dGFyZ2V0czsKIAlpbnQ2NAkJbWF4X3ByZWRpY2F0ZV9sb2NrczsKLQlpbnQ2NAkJbWF4X3Nl cmlhbGl6YWJsZV94YWN0czsKIAlpbnQ2NAkJbWF4X3J3X2NvbmZsaWN0czsKLQlTaXplCQly ZXF1ZXN0U2l6ZTsKLQlib29sCQlmb3VuZDsKLQotI2lmbmRlZiBFWEVDX0JBQ0tFTkQKLQlB c3NlcnQoIUlzVW5kZXJQb3N0bWFzdGVyKTsKLSNlbmRpZgogCiAJLyoKLQkgKiBDb21wdXRl IHNpemUgb2YgcHJlZGljYXRlIGxvY2sgdGFyZ2V0IGhhc2h0YWJsZS4gTm90ZSB0aGVzZQot CSAqIGNhbGN1bGF0aW9ucyBtdXN0IGFncmVlIHdpdGggUHJlZGljYXRlTG9ja1NobWVtU2l6 ZSEKKwkgKiBIYXNoIHRhYmxlcyBhbmQgb3RoZXIgc3RydWN0cyBhcmUgc2V0IHVwIGJ5IFNo bWVtSW5pdFJlZ2lzdGVyZWQoKSAvCisJICogU2htZW1BdHRhY2hSZWdpc3RlcmVkKCkgdmlh IHJlZ2lzdGVyZWQgZGVzY3JpcHRvcnMgaW4KKwkgKiBQcmVkaWNhdGVMb2NrU2htZW1SZWdp c3RlcigpLiAgSGVyZSB3ZSBkbyB0aGUgcmVtYWluaW5nIGluaXRpYWxpemF0aW9uCisJICog dGhhdCBjYW4ndCBiZSBkb25lIGluIGEgY2FsbGJhY2suCiAJICovCiAJbWF4X3ByZWRpY2F0 ZV9sb2NrX3RhcmdldHMgPSBOUFJFRElDQVRFTE9DS1RBUkdFVEVOVFMoKTsKIAogCS8qCi0J ICogQWxsb2NhdGUgaGFzaCB0YWJsZSBmb3IgUFJFRElDQVRFTE9DS1RBUkdFVCBzdHJ1Y3Rz LiAgVGhpcyBzdG9yZXMKKwkgKiBSZWdpc3RlciBoYXNoIHRhYmxlIGZvciBQUkVESUNBVEVM T0NLVEFSR0VUIHN0cnVjdHMuICBUaGlzIHN0b3JlcwogCSAqIHBlci1wcmVkaWNhdGUtbG9j ay10YXJnZXQgaW5mb3JtYXRpb24uCiAJICovCi0JaW5mby5rZXlzaXplID0gc2l6ZW9mKFBS RURJQ0FURUxPQ0tUQVJHRVRUQUcpOwotCWluZm8uZW50cnlzaXplID0gc2l6ZW9mKFBSRURJ Q0FURUxPQ0tUQVJHRVQpOwotCWluZm8ubnVtX3BhcnRpdGlvbnMgPSBOVU1fUFJFRElDQVRF TE9DS19QQVJUSVRJT05TOworCVNobWVtUmVxdWVzdEhhc2goJlByZWRpY2F0ZUxvY2tUYXJn ZXRIYXNoRGVzYywKKwkJLm5hbWUgPSAiUFJFRElDQVRFTE9DS1RBUkdFVCBoYXNoIiwKIAot CVByZWRpY2F0ZUxvY2tUYXJnZXRIYXNoID0gU2htZW1Jbml0SGFzaCgiUFJFRElDQVRFTE9D S1RBUkdFVCBoYXNoIiwKLQkJCQkJCQkJCQkJbWF4X3ByZWRpY2F0ZV9sb2NrX3RhcmdldHMs Ci0JCQkJCQkJCQkJCW1heF9wcmVkaWNhdGVfbG9ja190YXJnZXRzLAotCQkJCQkJCQkJCQkm aW5mbywKLQkJCQkJCQkJCQkJSEFTSF9FTEVNIHwgSEFTSF9CTE9CUyB8Ci0JCQkJCQkJCQkJ CUhBU0hfUEFSVElUSU9OIHwgSEFTSF9GSVhFRF9TSVpFKTsKKwkJLmluaXRfc2l6ZSA9IG1h eF9wcmVkaWNhdGVfbG9ja190YXJnZXRzLAorCQkubWF4X3NpemUgPSBtYXhfcHJlZGljYXRl X2xvY2tfdGFyZ2V0cywKIAotCS8qIFByZS1jYWxjdWxhdGUgdGhlIGhhc2ggYW5kIHBhcnRp dGlvbiBsb2NrIG9mIHRoZSBzY3JhdGNoIGVudHJ5ICovCi0JU2NyYXRjaFRhcmdldFRhZ0hh c2ggPSBQcmVkaWNhdGVMb2NrVGFyZ2V0VGFnSGFzaENvZGUoJlNjcmF0Y2hUYXJnZXRUYWcp OwotCVNjcmF0Y2hQYXJ0aXRpb25Mb2NrID0gUHJlZGljYXRlTG9ja0hhc2hQYXJ0aXRpb25M b2NrKFNjcmF0Y2hUYXJnZXRUYWdIYXNoKTsKKwkJLnB0ciA9ICZQcmVkaWNhdGVMb2NrVGFy Z2V0SGFzaCwKKwkJLmhhc2hfaW5mby5rZXlzaXplID0gc2l6ZW9mKFBSRURJQ0FURUxPQ0tU QVJHRVRUQUcpLAorCQkuaGFzaF9pbmZvLmVudHJ5c2l6ZSA9IHNpemVvZihQUkVESUNBVEVM T0NLVEFSR0VUKSwKKwkJLmhhc2hfaW5mby5udW1fcGFydGl0aW9ucyA9IE5VTV9QUkVESUNB VEVMT0NLX1BBUlRJVElPTlMsCisJCS5oYXNoX2ZsYWdzID0gSEFTSF9FTEVNIHwgSEFTSF9C TE9CUyB8IEhBU0hfUEFSVElUSU9OIHwgSEFTSF9GSVhFRF9TSVpFLAorCSk7CiAKIAkvKgog CSAqIEFsbG9jYXRlIGhhc2ggdGFibGUgZm9yIFBSRURJQ0FURUxPQ0sgc3RydWN0cy4gIFRo aXMgc3RvcmVzIHBlcgogCSAqIHhhY3QtbG9jay1vZi1hLXRhcmdldCBpbmZvcm1hdGlvbi4K IAkgKi8KLQlpbmZvLmtleXNpemUgPSBzaXplb2YoUFJFRElDQVRFTE9DS1RBRyk7Ci0JaW5m by5lbnRyeXNpemUgPSBzaXplb2YoUFJFRElDQVRFTE9DSyk7Ci0JaW5mby5oYXNoID0gcHJl ZGljYXRlbG9ja19oYXNoOwotCWluZm8ubnVtX3BhcnRpdGlvbnMgPSBOVU1fUFJFRElDQVRF TE9DS19QQVJUSVRJT05TOwogCiAJLyogQXNzdW1lIGFuIGF2ZXJhZ2Ugb2YgMiB4YWN0cyBw ZXIgdGFyZ2V0ICovCiAJbWF4X3ByZWRpY2F0ZV9sb2NrcyA9IG1heF9wcmVkaWNhdGVfbG9j a190YXJnZXRzICogMjsKIAotCVByZWRpY2F0ZUxvY2tIYXNoID0gU2htZW1Jbml0SGFzaCgi UFJFRElDQVRFTE9DSyBoYXNoIiwKLQkJCQkJCQkJCSAgbWF4X3ByZWRpY2F0ZV9sb2NrcywK LQkJCQkJCQkJCSAgbWF4X3ByZWRpY2F0ZV9sb2NrcywKLQkJCQkJCQkJCSAgJmluZm8sCi0J CQkJCQkJCQkgIEhBU0hfRUxFTSB8IEhBU0hfRlVOQ1RJT04gfAotCQkJCQkJCQkJICBIQVNI X1BBUlRJVElPTiB8IEhBU0hfRklYRURfU0laRSk7CisJU2htZW1SZXF1ZXN0SGFzaCgmUHJl ZGljYXRlTG9ja0hhc2hEZXNjLAorCQkubmFtZSA9ICJQUkVESUNBVEVMT0NLIGhhc2giLAor CisJCS5pbml0X3NpemUgPSBtYXhfcHJlZGljYXRlX2xvY2tzLAorCQkubWF4X3NpemUgPSBt YXhfcHJlZGljYXRlX2xvY2tzLAorCisJCS5wdHIgPSAmUHJlZGljYXRlTG9ja0hhc2gsCisJ CS5oYXNoX2luZm8ua2V5c2l6ZSA9IHNpemVvZihQUkVESUNBVEVMT0NLVEFHKSwKKwkJLmhh c2hfaW5mby5lbnRyeXNpemUgPSBzaXplb2YoUFJFRElDQVRFTE9DSyksCisJCS5oYXNoX2lu Zm8uaGFzaCA9IHByZWRpY2F0ZWxvY2tfaGFzaCwKKwkJLmhhc2hfaW5mby5udW1fcGFydGl0 aW9ucyA9IE5VTV9QUkVESUNBVEVMT0NLX1BBUlRJVElPTlMsCisJCS5oYXNoX2ZsYWdzID0g SEFTSF9FTEVNIHwgSEFTSF9GVU5DVElPTiB8IEhBU0hfUEFSVElUSU9OIHwgSEFTSF9GSVhF RF9TSVpFLAorCQkpOwogCiAJLyoKIAkgKiBDb21wdXRlIHNpemUgZm9yIHNlcmlhbGl6YWJs ZSB0cmFuc2FjdGlvbiBoYXNodGFibGUuIE5vdGUgdGhlc2UKQEAgLTExNzksMzAgKzExOTQs MzIgQEAgUHJlZGljYXRlTG9ja1NobWVtSW5pdCh2b2lkKQogCW1heF9zZXJpYWxpemFibGVf eGFjdHMgPSAoTWF4QmFja2VuZHMgKyBtYXhfcHJlcGFyZWRfeGFjdHMpICogMTA7CiAKIAkv KgotCSAqIEFsbG9jYXRlIGEgbGlzdCB0byBob2xkIGluZm9ybWF0aW9uIG9uIHRyYW5zYWN0 aW9ucyBwYXJ0aWNpcGF0aW5nIGluCisJICogUmVnaXN0ZXIgYSBsaXN0IHRvIGhvbGQgaW5m b3JtYXRpb24gb24gdHJhbnNhY3Rpb25zIHBhcnRpY2lwYXRpbmcgaW4KIAkgKiBwcmVkaWNh dGUgbG9ja2luZy4KIAkgKi8KLQlyZXF1ZXN0U2l6ZSA9IGFkZF9zaXplKFByZWRYYWN0TGlz dERhdGFTaXplLAotCQkJCQkJICAgKG11bF9zaXplKChTaXplKSBtYXhfc2VyaWFsaXphYmxl X3hhY3RzLAotCQkJCQkJCQkJIHNpemVvZihTRVJJQUxJWkFCTEVYQUNUKSkpKTsKLQlQcmVk WGFjdCA9IFNobWVtSW5pdFN0cnVjdCgiUHJlZFhhY3RMaXN0IiwKLQkJCQkJCQkgICByZXF1 ZXN0U2l6ZSwKLQkJCQkJCQkgICAmZm91bmQpOwotCUFzc2VydChmb3VuZCA9PSBJc1VuZGVy UG9zdG1hc3Rlcik7CisJU2htZW1SZXF1ZXN0U3RydWN0KCZQcmVkWGFjdExpc3RTaG1lbURl c2MsCisJCQkubmFtZSA9ICJQcmVkWGFjdExpc3QiLAorCQkJLnNpemUgPSBhZGRfc2l6ZShQ cmVkWGFjdExpc3REYXRhU2l6ZSwKKwkJCQkJCQkgKG11bF9zaXplKChTaXplKSBtYXhfc2Vy aWFsaXphYmxlX3hhY3RzLAorCQkJCQkJCQkJICAgc2l6ZW9mKFNFUklBTElaQUJMRVhBQ1Qp KSkpLAorCQkJLnB0ciA9ICh2b2lkICoqKSAmUHJlZFhhY3QsCisJCSk7CiAKIAkvKgotCSAq IEFsbG9jYXRlIGhhc2ggdGFibGUgZm9yIFNFUklBTElaQUJMRVhJRCBzdHJ1Y3RzLiAgVGhp cyBzdG9yZXMgcGVyLXhpZAorCSAqIFJlZ2lzdGVyIGhhc2ggdGFibGUgZm9yIFNFUklBTEla QUJMRVhJRCBzdHJ1Y3RzLiAgVGhpcyBzdG9yZXMgcGVyLXhpZAogCSAqIGluZm9ybWF0aW9u IGZvciBzZXJpYWxpemFibGUgdHJhbnNhY3Rpb25zIHdoaWNoIGhhdmUgYWNjZXNzZWQgZGF0 YS4KIAkgKi8KLQlpbmZvLmtleXNpemUgPSBzaXplb2YoU0VSSUFMSVpBQkxFWElEVEFHKTsK LQlpbmZvLmVudHJ5c2l6ZSA9IHNpemVvZihTRVJJQUxJWkFCTEVYSUQpOworCVNobWVtUmVx dWVzdEhhc2goJlNlcmlhbGl6YWJsZVhpZEhhc2hEZXNjLAorCQkubmFtZSA9ICJTRVJJQUxJ WkFCTEVYSUQgaGFzaCIsCisKKwkJLmluaXRfc2l6ZSA9IG1heF9zZXJpYWxpemFibGVfeGFj dHMsCisJCS5tYXhfc2l6ZSA9IG1heF9zZXJpYWxpemFibGVfeGFjdHMsCiAKLQlTZXJpYWxp emFibGVYaWRIYXNoID0gU2htZW1Jbml0SGFzaCgiU0VSSUFMSVpBQkxFWElEIGhhc2giLAot CQkJCQkJCQkJCW1heF9zZXJpYWxpemFibGVfeGFjdHMsCi0JCQkJCQkJCQkJbWF4X3Nlcmlh bGl6YWJsZV94YWN0cywKLQkJCQkJCQkJCQkmaW5mbywKLQkJCQkJCQkJCQlIQVNIX0VMRU0g fCBIQVNIX0JMT0JTIHwKLQkJCQkJCQkJCQlIQVNIX0ZJWEVEX1NJWkUpOworCQkucHRyID0g JlNlcmlhbGl6YWJsZVhpZEhhc2gsCisJCS5oYXNoX2luZm8ua2V5c2l6ZSA9IHNpemVvZihT RVJJQUxJWkFCTEVYSURUQUcpLAorCQkuaGFzaF9pbmZvLmVudHJ5c2l6ZSA9IHNpemVvZihT RVJJQUxJWkFCTEVYSUQpLAorCQkuaGFzaF9mbGFncyA9IEhBU0hfRUxFTSB8IEhBU0hfQkxP QlMgfCBIQVNIX0ZJWEVEX1NJWkUsCisJCSk7CiAKIAkvKgogCSAqIEFsbG9jYXRlIHNwYWNl IGZvciB0cmFja2luZyBydy1jb25mbGljdHMgaW4gbGlzdHMgYXR0YWNoZWQgdG8gdGhlCkBA IC0xMjE3LDU4ICsxMjM0LDUzIEBAIFByZWRpY2F0ZUxvY2tTaG1lbUluaXQodm9pZCkKIAkg Ki8KIAltYXhfcndfY29uZmxpY3RzID0gbWF4X3NlcmlhbGl6YWJsZV94YWN0cyAqIDU7CiAK LQlyZXF1ZXN0U2l6ZSA9IFJXQ29uZmxpY3RQb29sSGVhZGVyRGF0YVNpemUgKwotCQltdWxf c2l6ZSgoU2l6ZSkgbWF4X3J3X2NvbmZsaWN0cywKLQkJCQkgUldDb25mbGljdERhdGFTaXpl KTsKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJlJXQ29uZmxpY3RQb29sU2htZW1EZXNjLAorCQku bmFtZSA9ICJSV0NvbmZsaWN0UG9vbCIsCisJCS5zaXplID0gUldDb25mbGljdFBvb2xIZWFk ZXJEYXRhU2l6ZSArIG11bF9zaXplKChTaXplKSBtYXhfcndfY29uZmxpY3RzLAorCQkJCQkJ CQkJCQkJCQlSV0NvbmZsaWN0RGF0YVNpemUpLAorCQkucHRyID0gKHZvaWQgKiopICZSV0Nv bmZsaWN0UG9vbCwKKwkpOwogCi0JUldDb25mbGljdFBvb2wgPSBTaG1lbUluaXRTdHJ1Y3Qo IlJXQ29uZmxpY3RQb29sIiwKLQkJCQkJCQkJCSByZXF1ZXN0U2l6ZSwKLQkJCQkJCQkJCSAm Zm91bmQpOwotCUFzc2VydChmb3VuZCA9PSBJc1VuZGVyUG9zdG1hc3Rlcik7Ci0KLQkvKgot CSAqIENyZWF0ZSBvciBhdHRhY2ggdG8gdGhlIGhlYWRlciBmb3IgdGhlIGxpc3Qgb2YgZmlu aXNoZWQgc2VyaWFsaXphYmxlCi0JICogdHJhbnNhY3Rpb25zLgotCSAqLwotCUZpbmlzaGVk U2VyaWFsaXphYmxlVHJhbnNhY3Rpb25zID0gKGRsaXN0X2hlYWQgKikKLQkJU2htZW1Jbml0 U3RydWN0KCJGaW5pc2hlZFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9ucyIsCi0JCQkJCQlzaXpl b2YoZGxpc3RfaGVhZCksCi0JCQkJCQkmZm91bmQpOwotCUFzc2VydChmb3VuZCA9PSBJc1Vu ZGVyUG9zdG1hc3Rlcik7CisJU2htZW1SZXF1ZXN0U3RydWN0KCZGaW5pc2hlZFNlcmlhbGl6 YWJsZVNobWVtRGVzYywKKwkJLm5hbWUgPSAiRmluaXNoZWRTZXJpYWxpemFibGVUcmFuc2Fj dGlvbnMiLAorCQkuc2l6ZSA9IHNpemVvZihkbGlzdF9oZWFkKSwKKwkJLnB0ciA9ICh2b2lk ICoqKSAmRmluaXNoZWRTZXJpYWxpemFibGVUcmFuc2FjdGlvbnMsCisJKTsKIAogCS8qCiAJ ICogSW5pdGlhbGl6ZSB0aGUgU0xSVSBzdG9yYWdlIGZvciBvbGQgY29tbWl0dGVkIHNlcmlh bGl6YWJsZQogCSAqIHRyYW5zYWN0aW9ucy4KIAkgKi8KLQlTZXJpYWxTbHJ1Q3RsLT5QYWdl UHJlY2VkZXMgPSBTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2FsbHk7Ci0JU2VyaWFsU2xydUN0 bC0+ZXJyZGV0YWlsX2Zvcl9pb19lcnJvciA9IHNlcmlhbF9lcnJkZXRhaWxfZm9yX2lvX2Vy cm9yOwotCVNpbXBsZUxydUluaXQoU2VyaWFsU2xydUN0bCwgInNlcmlhbGl6YWJsZSIsCi0J CQkJICBzZXJpYWxpemFibGVfYnVmZmVycywgMCwgInBnX3NlcmlhbCIsCi0JCQkJICBMV1RS QU5DSEVfU0VSSUFMX0JVRkZFUiwgTFdUUkFOQ0hFX1NFUklBTF9TTFJVLAotCQkJCSAgU1lO Q19IQU5ETEVSX05PTkUsIGZhbHNlKTsKKwlTaW1wbGVMcnVSZXF1ZXN0KCZTZXJpYWxTbHJ1 RGVzYywKKwkJLm5hbWUgPSAic2VyaWFsaXphYmxlIiwKKwkJLkRpciA9ICJwZ19zZXJpYWwi LAorCQkubG9uZ19zZWdtZW50X25hbWVzID0gZmFsc2UsCisKKwkJLm5zbG90cyA9IHNlcmlh bGl6YWJsZV9idWZmZXJzLAorCisJCS5zeW5jX2hhbmRsZXIgPSBTWU5DX0hBTkRMRVJfTk9O RSwKKwkJLlBhZ2VQcmVjZWRlcyA9IFNlcmlhbFBhZ2VQcmVjZWRlc0xvZ2ljYWxseSwKKwkJ LmVycmRldGFpbF9mb3JfaW9fZXJyb3IgPSBzZXJpYWxfZXJyZGV0YWlsX2Zvcl9pb19lcnJv ciwKKworCQkuYnVmZmVyX3RyYW5jaGVfaWQgPSBMV1RSQU5DSEVfU0VSSUFMX0JVRkZFUiwK KwkJLmJhbmtfdHJhbmNoZV9pZCA9IExXVFJBTkNIRV9TRVJJQUxfU0xSVSwKKwkJKTsKICNp ZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCiAJU2VyaWFsUGFnZVByZWNlZGVzTG9naWNhbGx5 VW5pdFRlc3RzKCk7CiAjZW5kaWYKLQlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFNlcmlh bFNscnVDdGwsIFNFUklBTF9FTlRSSUVTUEVSUEFHRSk7CiAKLQkvKgotCSAqIENyZWF0ZSBv ciBhdHRhY2ggdG8gdGhlIFNlcmlhbENvbnRyb2wgc3RydWN0dXJlLgotCSAqLwotCXNlcmlh bENvbnRyb2wgPSAoU2VyaWFsQ29udHJvbCkKLQkJU2htZW1Jbml0U3RydWN0KCJTZXJpYWxD b250cm9sRGF0YSIsIHNpemVvZihTZXJpYWxDb250cm9sRGF0YSksICZmb3VuZCk7Ci0JQXNz ZXJ0KGZvdW5kID09IElzVW5kZXJQb3N0bWFzdGVyKTsKKwlTaG1lbVJlcXVlc3RTdHJ1Y3Qo JlNlcmlhbENvbnRyb2xTaG1lbURlc2MsCisJCS5uYW1lID0gIlNlcmlhbENvbnRyb2xEYXRh IiwKKwkJLnNpemUgPSBzaXplb2YoU2VyaWFsQ29udHJvbERhdGEpLAorCQkucHRyID0gKHZv aWQgKiopICZzZXJpYWxDb250cm9sLAorCSk7Cit9CiAKLQkvKgotCSAqIElmIHdlIGp1c3Qg YXR0YWNoZWQgdG8gZXhpc3Rpbmcgc2hhcmVkIG1lbW9yeSAoRVhFQ19CQUNLRU5EKSwgd2Un cmUgYWxsCi0JICogZG9uZS4gIE90aGVyd2lzZSwgZHVyaW5nIHBvc3RtYXN0ZXIgc3RhcnR1 cCBwcm9jZWVkIHRvIGluaXRpYWxpemUgdGhlCi0JICogc2hhcmVkIG1lbW9yeS4KLQkgKi8K LQlpZiAoSXNVbmRlclBvc3RtYXN0ZXIpCi0JewotCQkvKiBUaGlzIG5ldmVyIGNoYW5nZXMs IHNvIGxldCdzIGtlZXAgYSBsb2NhbCBjb3B5LiAqLwotCQlPbGRDb21taXR0ZWRTeGFjdCA9 IFByZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFjdDsKLQkJcmV0dXJuOwotCX0KK3N0YXRpYyB2 b2lkCitQcmVkaWNhdGVMb2NrU2htZW1Jbml0KHZvaWQgKmFyZykKK3sKKwlpbnQJCQltYXhf cndfY29uZmxpY3RzOworCWJvb2wJCWZvdW5kOwogCiAJLyoKIAkgKiBSZXNlcnZlIGEgZHVt bXkgZW50cnkgaW4gdGhlIGhhc2ggdGFibGU7IHdlIHVzZSBpdCB0byBtYWtlIHN1cmUgdGhl cmUncwpAQCAtMTI4MCw3ICsxMjkyLDYgQEAgUHJlZGljYXRlTG9ja1NobWVtSW5pdCh2b2lk KQogCQkJCQkgICBIQVNIX0VOVEVSLCAmZm91bmQpOwogCUFzc2VydCghZm91bmQpOwogCi0J LyogSW5pdGlhbGl6ZSBQcmVkWGFjdCBsaXN0ICovCiAJZGxpc3RfaW5pdCgmUHJlZFhhY3Qt PmF2YWlsYWJsZUxpc3QpOwogCWRsaXN0X2luaXQoJlByZWRYYWN0LT5hY3RpdmVMaXN0KTsK IAlQcmVkWGFjdC0+U3hhY3RHbG9iYWxYbWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CkBA IC0xMzIyLDYgKzEzMzMsOSBAQCBQcmVkaWNhdGVMb2NrU2htZW1Jbml0KHZvaWQpCiAJZGxp c3RfaW5pdCgmUldDb25mbGljdFBvb2wtPmF2YWlsYWJsZUxpc3QpOwogCVJXQ29uZmxpY3RQ b29sLT5lbGVtZW50ID0gKFJXQ29uZmxpY3QpICgoY2hhciAqKSBSV0NvbmZsaWN0UG9vbCAr CiAJCQkJCQkJCQkJCVJXQ29uZmxpY3RQb29sSGVhZGVyRGF0YVNpemUpOworCisJbWF4X3J3 X2NvbmZsaWN0cyA9IG1heF9zZXJpYWxpemFibGVfeGFjdHMgKiA1OworCiAJLyogQWRkIGFs bCBlbGVtZW50cyB0byBhdmFpbGFibGUgbGlzdCwgY2xlYW4uICovCiAJZm9yIChpbnQgaSA9 IDA7IGkgPCBtYXhfcndfY29uZmxpY3RzOyBpKyspCiAJewpAQCAtMTMzOCw2MyArMTM1Miwy OCBAQCBQcmVkaWNhdGVMb2NrU2htZW1Jbml0KHZvaWQpCiAJc2VyaWFsQ29udHJvbC0+aGVh ZFhpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOwogCXNlcmlhbENvbnRyb2wtPnRhaWxYaWQg PSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAlMV0xvY2tSZWxlYXNlKFNlcmlhbENvbnRyb2xM b2NrKTsKLX0KLQotLyoKLSAqIEVzdGltYXRlIHNoYXJlZC1tZW1vcnkgc3BhY2UgdXNlZCBm b3IgcHJlZGljYXRlIGxvY2sgdGFibGUKLSAqLwotU2l6ZQotUHJlZGljYXRlTG9ja1NobWVt U2l6ZSh2b2lkKQotewotCVNpemUJCXNpemUgPSAwOwotCWludDY0CQltYXhfcHJlZGljYXRl X2xvY2tfdGFyZ2V0czsKLQlpbnQ2NAkJbWF4X3ByZWRpY2F0ZV9sb2NrczsKLQlpbnQ2NAkJ bWF4X3NlcmlhbGl6YWJsZV94YWN0czsKLQlpbnQ2NAkJbWF4X3J3X2NvbmZsaWN0czsKLQot CS8qIHByZWRpY2F0ZSBsb2NrIHRhcmdldCBoYXNoIHRhYmxlICovCi0JbWF4X3ByZWRpY2F0 ZV9sb2NrX3RhcmdldHMgPSBOUFJFRElDQVRFTE9DS1RBUkdFVEVOVFMoKTsKLQlzaXplID0g YWRkX3NpemUoc2l6ZSwgaGFzaF9lc3RpbWF0ZV9zaXplKG1heF9wcmVkaWNhdGVfbG9ja190 YXJnZXRzLAotCQkJCQkJCQkJCQkgc2l6ZW9mKFBSRURJQ0FURUxPQ0tUQVJHRVQpKSk7Ci0K LQkvKiBwcmVkaWNhdGUgbG9jayBoYXNoIHRhYmxlICovCi0JbWF4X3ByZWRpY2F0ZV9sb2Nr cyA9IG1heF9wcmVkaWNhdGVfbG9ja190YXJnZXRzICogMjsKLQlzaXplID0gYWRkX3NpemUo c2l6ZSwgaGFzaF9lc3RpbWF0ZV9zaXplKG1heF9wcmVkaWNhdGVfbG9ja3MsCi0JCQkJCQkJ CQkJCSBzaXplb2YoUFJFRElDQVRFTE9DSykpKTsKIAotCS8qCi0JICogU2luY2UgTlBSRURJ Q0FURUxPQ0tUQVJHRVRFTlRTIGlzIG9ubHkgYW4gZXN0aW1hdGUsIGFkZCAxMCUgc2FmZXR5 Ci0JICogbWFyZ2luLgotCSAqLwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBzaXplIC8gMTAp OwotCi0JLyogdHJhbnNhY3Rpb24gbGlzdCAqLwotCW1heF9zZXJpYWxpemFibGVfeGFjdHMg PSAoTWF4QmFja2VuZHMgKyBtYXhfcHJlcGFyZWRfeGFjdHMpICogMTA7Ci0Jc2l6ZSA9IGFk ZF9zaXplKHNpemUsIFByZWRYYWN0TGlzdERhdGFTaXplKTsKLQlzaXplID0gYWRkX3NpemUo c2l6ZSwgbXVsX3NpemUoKFNpemUpIG1heF9zZXJpYWxpemFibGVfeGFjdHMsCi0JCQkJCQkJ CSAgIHNpemVvZihTRVJJQUxJWkFCTEVYQUNUKSkpOwotCi0JLyogdHJhbnNhY3Rpb24geGlk IHRhYmxlICovCi0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIGhhc2hfZXN0aW1hdGVfc2l6ZSht YXhfc2VyaWFsaXphYmxlX3hhY3RzLAotCQkJCQkJCQkJCQkgc2l6ZW9mKFNFUklBTElaQUJM RVhJRCkpKTsKKwkvKiBUaGlzIG5ldmVyIGNoYW5nZXMsIHNvIGxldCdzIGtlZXAgYSBsb2Nh bCBjb3B5LiAqLworCU9sZENvbW1pdHRlZFN4YWN0ID0gUHJlZFhhY3QtPk9sZENvbW1pdHRl ZFN4YWN0OwogCi0JLyogcnctY29uZmxpY3QgcG9vbCAqLwotCW1heF9yd19jb25mbGljdHMg PSBtYXhfc2VyaWFsaXphYmxlX3hhY3RzICogNTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwg UldDb25mbGljdFBvb2xIZWFkZXJEYXRhU2l6ZSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUs IG11bF9zaXplKChTaXplKSBtYXhfcndfY29uZmxpY3RzLAotCQkJCQkJCQkgICBSV0NvbmZs aWN0RGF0YVNpemUpKTsKKwkvKiBQcmUtY2FsY3VsYXRlIHRoZSBoYXNoIGFuZCBwYXJ0aXRp b24gbG9jayBvZiB0aGUgc2NyYXRjaCBlbnRyeSAqLworCVNjcmF0Y2hUYXJnZXRUYWdIYXNo ID0gUHJlZGljYXRlTG9ja1RhcmdldFRhZ0hhc2hDb2RlKCZTY3JhdGNoVGFyZ2V0VGFnKTsK KwlTY3JhdGNoUGFydGl0aW9uTG9jayA9IFByZWRpY2F0ZUxvY2tIYXNoUGFydGl0aW9uTG9j ayhTY3JhdGNoVGFyZ2V0VGFnSGFzaCk7CiAKLQkvKiBIZWFkIGZvciBsaXN0IG9mIGZpbmlz aGVkIHNlcmlhbGl6YWJsZSB0cmFuc2FjdGlvbnMuICovCi0Jc2l6ZSA9IGFkZF9zaXplKHNp emUsIHNpemVvZihkbGlzdF9oZWFkKSk7CisJU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhT ZXJpYWxTbHJ1Q3RsLCBTRVJJQUxfRU5UUklFU1BFUlBBR0UpOworfQogCi0JLyogU2hhcmVk IG1lbW9yeSBzdHJ1Y3R1cmVzIGZvciBTTFJVIHRyYWNraW5nIG9mIG9sZCBjb21taXR0ZWQg eGlkcy4gKi8KLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgc2l6ZW9mKFNlcmlhbENvbnRyb2xE YXRhKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFNpbXBsZUxydVNobWVtU2l6ZShzZXJp YWxpemFibGVfYnVmZmVycywgMCkpOworc3RhdGljIHZvaWQKK1ByZWRpY2F0ZUxvY2tTaG1l bUF0dGFjaCh2b2lkICphcmcpCit7CisJLyogVGhpcyBuZXZlciBjaGFuZ2VzLCBzbyBsZXQn cyBrZWVwIGEgbG9jYWwgY29weS4gKi8KKwlPbGRDb21taXR0ZWRTeGFjdCA9IFByZWRYYWN0 LT5PbGRDb21taXR0ZWRTeGFjdDsKIAotCXJldHVybiBzaXplOworCS8qIFByZS1jYWxjdWxh dGUgdGhlIGhhc2ggYW5kIHBhcnRpdGlvbiBsb2NrIG9mIHRoZSBzY3JhdGNoIGVudHJ5ICov CisJU2NyYXRjaFRhcmdldFRhZ0hhc2ggPSBQcmVkaWNhdGVMb2NrVGFyZ2V0VGFnSGFzaENv ZGUoJlNjcmF0Y2hUYXJnZXRUYWcpOworCVNjcmF0Y2hQYXJ0aXRpb25Mb2NrID0gUHJlZGlj YXRlTG9ja0hhc2hQYXJ0aXRpb25Mb2NrKFNjcmF0Y2hUYXJnZXRUYWdIYXNoKTsKIH0KIAot CiAvKgogICogQ29tcHV0ZSB0aGUgaGFzaCBjb2RlIGFzc29jaWF0ZWQgd2l0aCBhIFBSRURJ Q0FURUxPQ0tUQUcuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZp dHkvcGdzdGF0X3NscnUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9z bHJ1LmMKaW5kZXggMjE5MGYzODhlYWUuLmY0ZGZlODY5N2Q3IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfc2xydS5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9zbHJ1LmMKQEAgLTExOSw2ICsxMTksNyBAQCBwZ3N0 YXRfZ2V0X3NscnVfaW5kZXgoY29uc3QgY2hhciAqbmFtZSkKIHsKIAlpbnQJCQlpOwogCisJ QXNzZXJ0KG5hbWUpOwogCWZvciAoaSA9IDA7IGkgPCBTTFJVX05VTV9FTEVNRU5UUzsgaSsr KQogCXsKIAkJaWYgKHN0cmNtcChzbHJ1X25hbWVzW2ldLCBuYW1lKSA9PSAwKQpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2Nsb2cuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9j bG9nLmgKaW5kZXggYTFjZmVkNWY0M2MuLjc4OTQ5OThjNzYzIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9hY2Nlc3MvY2xvZy5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9jbG9nLmgK QEAgLTQwLDggKzQwLDYgQEAgZXh0ZXJuIHZvaWQgVHJhbnNhY3Rpb25JZFNldFRyZWVTdGF0 dXMoVHJhbnNhY3Rpb25JZCB4aWQsIGludCBuc3VieGlkcywKIAkJCQkJCQkJCSAgIFRyYW5z YWN0aW9uSWQgKnN1YnhpZHMsIFhpZFN0YXR1cyBzdGF0dXMsIFhMb2dSZWNQdHIgbHNuKTsK IGV4dGVybiBYaWRTdGF0dXMgVHJhbnNhY3Rpb25JZEdldFN0YXR1cyhUcmFuc2FjdGlvbklk IHhpZCwgWExvZ1JlY1B0ciAqbHNuKTsKIAotZXh0ZXJuIFNpemUgQ0xPR1NobWVtU2l6ZSh2 b2lkKTsKLWV4dGVybiB2b2lkIENMT0dTaG1lbUluaXQodm9pZCk7CiBleHRlcm4gdm9pZCBC b290U3RyYXBDTE9HKHZvaWQpOwogZXh0ZXJuIHZvaWQgU3RhcnR1cENMT0codm9pZCk7CiBl eHRlcm4gdm9pZCBUcmltQ0xPRyh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9jb21taXRfdHMuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9jb21taXRfdHMuaAppbmRl eCA0OWVlMjFjZDVkMi4uODI1Y2NkYTkwZWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9jb21taXRfdHMuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvY29tbWl0X3RzLmgK QEAgLTI3LDggKzI3LDYgQEAgZXh0ZXJuIGJvb2wgVHJhbnNhY3Rpb25JZEdldENvbW1pdFRz RGF0YShUcmFuc2FjdGlvbklkIHhpZCwKIGV4dGVybiBUcmFuc2FjdGlvbklkIEdldExhdGVz dENvbW1pdFRzRGF0YShUaW1lc3RhbXBUeiAqdHMsCiAJCQkJCQkJCQkJICAgUmVwbE9yaWdp bklkICpub2RlaWQpOwogCi1leHRlcm4gU2l6ZSBDb21taXRUc1NobWVtU2l6ZSh2b2lkKTsK LWV4dGVybiB2b2lkIENvbW1pdFRzU2htZW1Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgQm9v dFN0cmFwQ29tbWl0VHModm9pZCk7CiBleHRlcm4gdm9pZCBTdGFydHVwQ29tbWl0VHModm9p ZCk7CiBleHRlcm4gdm9pZCBDb21taXRUc1BhcmFtZXRlckNoYW5nZShib29sIG5ld3ZhbHVl LCBib29sIG9sZHZhbHVlKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0 aXhhY3QuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaAppbmRleCAyYWU4YjU3 MWRjYy4uNmJlNTI5OWFiNjggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0 aXhhY3QuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmgKQEAgLTEyMSw4 ICsxMjEsNiBAQCBleHRlcm4gdm9pZCBBdEVPWGFjdF9NdWx0aVhhY3Qodm9pZCk7CiBleHRl cm4gdm9pZCBBdFByZXBhcmVfTXVsdGlYYWN0KHZvaWQpOwogZXh0ZXJuIHZvaWQgUG9zdFBy ZXBhcmVfTXVsdGlYYWN0KEZ1bGxUcmFuc2FjdGlvbklkIGZ4aWQpOwogCi1leHRlcm4gU2l6 ZSBNdWx0aVhhY3RTaG1lbVNpemUodm9pZCk7Ci1leHRlcm4gdm9pZCBNdWx0aVhhY3RTaG1l bUluaXQodm9pZCk7CiBleHRlcm4gdm9pZCBCb290U3RyYXBNdWx0aVhhY3Qodm9pZCk7CiBl eHRlcm4gdm9pZCBTdGFydHVwTXVsdGlYYWN0KHZvaWQpOwogZXh0ZXJuIHZvaWQgVHJpbU11 bHRpWGFjdCh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1Lmgg Yi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydS5oCmluZGV4IGY5NjZkMGQ5ZmU3Li44MjBjNzk4 Njg1NCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3NscnUuaAorKysgYi9zcmMv aW5jbHVkZS9hY2Nlc3Mvc2xydS5oCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSAiYWNj ZXNzL3RyYW5zYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ2RlZnMuaCIKICNpbmNsdWRl ICJzdG9yYWdlL2x3bG9jay5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKICNpbmNs dWRlICJzdG9yYWdlL3N5bmMuaCIKIAogLyoKQEAgLTEwNiwyMyArMTA3LDIwIEBAIHR5cGVk ZWYgc3RydWN0IFNscnVTaGFyZWREYXRhCiAKIHR5cGVkZWYgU2xydVNoYXJlZERhdGEgKlNs cnVTaGFyZWQ7CiAKLS8qCi0gKiBTbHJ1Q3RsRGF0YSBpcyBhbiB1bnNoYXJlZCBzdHJ1Y3R1 cmUgdGhhdCBwb2ludHMgdG8gdGhlIGFjdGl2ZSBpbmZvcm1hdGlvbgotICogaW4gc2hhcmVk IG1lbW9yeS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgU2xydUN0bERhdGEKK3R5cGVkZWYgc3Ry dWN0IFNscnVPcHRzCiB7Ci0JU2xydVNoYXJlZAlzaGFyZWQ7Ci0KLQkvKiBOdW1iZXIgb2Yg YmFua3MgaW4gdGhpcyBTTFJVLiAqLwotCXVpbnQxNgkJbmJhbmtzOworCVNobWVtU3RydWN0 T3B0cyBiYXNlOwogCiAJLyoKLQkgKiBJZiB0cnVlLCB1c2UgbG9uZyBzZWdtZW50IGZpbGUg bmFtZXMuICBPdGhlcndpc2UsIHVzZSBzaG9ydCBmaWxlIG5hbWVzLgotCSAqCi0JICogRm9y IGRldGFpbHMgYWJvdXQgdGhlIGZpbGUgbmFtZSBmb3JtYXQsIHNlZSBTbHJ1RmlsZU5hbWUo KS4KKwkgKiBuYW1lIG9mIFNMUlUuICAoVGhpcyBpcyB1c2VyLXZpc2libGUsIHBpY2sgd2l0 aCBjYXJlISkKIAkgKi8KLQlib29sCQlsb25nX3NlZ21lbnRfbmFtZXM7CisJY29uc3QgY2hh ciAqbmFtZTsKKworCS8qIG51bWJlciBvZiBwYWdlIHNsb3RzIHRvIHVzZS4gKi8KKwlpbnQJ CQluc2xvdHM7CisKKwkvKiBudW1iZXIgb2YgTFNOIGdyb3VwcyBwZXIgcGFnZSAoc2V0IHRv IHplcm8gaWYgbm90IHJlbGV2YW50KS4gKi8KKwlpbnQJCQlubHNuczsKIAogCS8qCiAJICog V2hpY2ggc3luYyBoYW5kbGVyIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIGhhbmRpbmcgc3luYyBy ZXF1ZXN0cyBvdmVyIHRvCkBAIC0xMzAsNiArMTI4LDE5IEBAIHR5cGVkZWYgc3RydWN0IFNs cnVDdGxEYXRhCiAJICovCiAJU3luY1JlcXVlc3RIYW5kbGVyIHN5bmNfaGFuZGxlcjsKIAor CS8qCisJICogUEdEQVRBLXJlbGF0aXZlIHN1YmRpcmVjdG9yeSB0aGF0IHdpbGwgY29udGFp biB0aGUgZmlsZXMuCisJICovCisJY29uc3QgY2hhciAqRGlyOworCisJLyoKKwkgKiBJZiB0 cnVlLCB1c2UgbG9uZyBzZWdtZW50IGZpbGUgbmFtZXMuICBPdGhlcndpc2UsIHVzZSBzaG9y dCBmaWxlIG5hbWVzLgorCSAqCisJICogRm9yIGRldGFpbHMgYWJvdXQgdGhlIGZpbGUgbmFt ZSBmb3JtYXQsIHNlZSBTbHJ1RmlsZU5hbWUoKS4KKwkgKi8KKwlib29sCQlsb25nX3NlZ21l bnRfbmFtZXM7CisKKwogCS8qCiAJICogRGVjaWRlIHdoZXRoZXIgYSBwYWdlIGlzICJvbGRl ciIgZm9yIHRydW5jYXRpb24gYW5kIGFzIGEgaGludCBmb3IKIAkgKiBldmljdGluZyBwYWdl cyBpbiBMUlUgb3JkZXIuICBSZXR1cm4gdHJ1ZSBpZiBldmVyeSBlbnRyeSBvZiB0aGUgZmly c3QKQEAgLTE1MywxMyArMTY0LDI4IEBAIHR5cGVkZWYgc3RydWN0IFNscnVDdGxEYXRhCiAJ aW50CQkJKCplcnJkZXRhaWxfZm9yX2lvX2Vycm9yKSAoY29uc3Qgdm9pZCAqb3BhcXVlX2Rh dGEpOwogCiAJLyoKLQkgKiBEaXIgaXMgc2V0IGR1cmluZyBTaW1wbGVMcnVJbml0IGFuZCBk b2VzIG5vdCBjaGFuZ2UgdGhlcmVhZnRlci4gU2luY2UKLQkgKiBpdCdzIGFsd2F5cyB0aGUg c2FtZSwgaXQgZG9lc24ndCBuZWVkIHRvIGJlIGluIHNoYXJlZCBtZW1vcnkuCisJICogVHJh bmNoZSBJRHMgdG8gdXNlIGZvciB0aGUgU0xSVSdzIHBlci1idWZmZXIgYW5kIHBlci1iYW5r IExXTG9ja3MuICBJZgorCSAqIHRoZXNlIGFyZSBsZWZ0IGFzIHplcm9zLCBuZXcgdHJhbmNo ZXMgd2lsbCBiZSBhc3NpZ25lZCBkeW5hbWljYWxseS4KIAkgKi8KLQljaGFyCQlEaXJbNjRd OwotfSBTbHJ1Q3RsRGF0YTsKKwlpbnQJCQlidWZmZXJfdHJhbmNoZV9pZDsKKwlpbnQJCQli YW5rX3RyYW5jaGVfaWQ7Cit9IFNscnVPcHRzOworCisvKgorICogU2xydURlc2MgaXMgYW4g dW5zaGFyZWQgc3RydWN0dXJlIHRoYXQgcG9pbnRzIHRvIHRoZSBhY3RpdmUgaW5mb3JtYXRp b24KKyAqIGluIHNoYXJlZCBtZW1vcnkuCisgKi8KK3R5cGVkZWYgc3RydWN0IFNscnVEZXNj Cit7CisJU2htZW1TdHJ1Y3REZXNjIGJhc2U7CisKKwlTbHJ1T3B0cyBvcHRpb25zOwogCi10 eXBlZGVmIFNscnVDdGxEYXRhICpTbHJ1Q3RsOworCVNscnVTaGFyZWQJc2hhcmVkOworCisJ LyogTnVtYmVyIG9mIGJhbmtzIGluIHRoaXMgU0xSVS4gKi8KKwl1aW50MTYJCW5iYW5rczsK K30gU2xydURlc2M7CiAKIC8qCiAgKiBHZXQgdGhlIFNMUlUgYmFuayBsb2NrIGZvciBnaXZl biBTbHJ1Q3RsIGFuZCB0aGUgcGFnZW5vLgpAQCAtMTY4LDQ4ICsxOTQsNTIgQEAgdHlwZWRl ZiBTbHJ1Q3RsRGF0YSAqU2xydUN0bDsKICAqIHJlc3BlY3RpdmUgYmFuay4KICAqLwogc3Rh dGljIGlubGluZSBMV0xvY2sgKgotU2ltcGxlTHJ1R2V0QmFua0xvY2soU2xydUN0bCBjdGws IGludDY0IHBhZ2VubykKK1NpbXBsZUxydUdldEJhbmtMb2NrKFNscnVEZXNjICpjdGwsIGlu dDY0IHBhZ2VubykKIHsKIAlpbnQJCQliYW5rbm87CiAKKwlBc3NlcnQoY3RsLT5uYmFua3Mg IT0gMCk7CiAJYmFua25vID0gcGFnZW5vICUgY3RsLT5uYmFua3M7CiAJcmV0dXJuICYoY3Rs LT5zaGFyZWQtPmJhbmtfbG9ja3NbYmFua25vXS5sb2NrKTsKIH0KIAotZXh0ZXJuIFNpemUg U2ltcGxlTHJ1U2htZW1TaXplKGludCBuc2xvdHMsIGludCBubHNucyk7CitleHRlcm4gdm9p ZCBTaW1wbGVMcnVSZXF1ZXN0V2l0aE9wdHMoU2xydURlc2MgKmRlc2MsIGNvbnN0IFNscnVP cHRzICpvcHRpb25zKTsKKworI2RlZmluZSBTaW1wbGVMcnVSZXF1ZXN0KGRlc2MsIC4uLikg IFwKKwlTaW1wbGVMcnVSZXF1ZXN0V2l0aE9wdHMoZGVzYywgJihTbHJ1T3B0cyl7X19WQV9B UkdTX199KQorCiBleHRlcm4gaW50CVNpbXBsZUxydUF1dG90dW5lQnVmZmVycyhpbnQgZGl2 aXNvciwgaW50IG1heCk7Ci1leHRlcm4gdm9pZCBTaW1wbGVMcnVJbml0KFNscnVDdGwgY3Rs LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbnNsb3RzLCBpbnQgbmxzbnMsCi0JCQkJCQkgIGNv bnN0IGNoYXIgKnN1YmRpciwgaW50IGJ1ZmZlcl90cmFuY2hlX2lkLAotCQkJCQkJICBpbnQg YmFua190cmFuY2hlX2lkLCBTeW5jUmVxdWVzdEhhbmRsZXIgc3luY19oYW5kbGVyLAotCQkJ CQkJICBib29sIGxvbmdfc2VnbWVudF9uYW1lcyk7Ci1leHRlcm4gaW50CVNpbXBsZUxydVpl cm9QYWdlKFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8pOwotZXh0ZXJuIHZvaWQgU2ltcGxl THJ1WmVyb0FuZFdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vKTsKLWV4dGVy biBpbnQJU2ltcGxlTHJ1UmVhZFBhZ2UoU2xydUN0bCBjdGwsIGludDY0IHBhZ2VubywgYm9v bCB3cml0ZV9vaywKK2V4dGVybiBpbnQJU2ltcGxlTHJ1WmVyb1BhZ2UoU2xydURlc2MgKmN0 bCwgaW50NjQgcGFnZW5vKTsKK2V4dGVybiB2b2lkIFNpbXBsZUxydVplcm9BbmRXcml0ZVBh Z2UoU2xydURlc2MgKmN0bCwgaW50NjQgcGFnZW5vKTsKK2V4dGVybiBpbnQJU2ltcGxlTHJ1 UmVhZFBhZ2UoU2xydURlc2MgKmN0bCwgaW50NjQgcGFnZW5vLCBib29sIHdyaXRlX29rLAog CQkJCQkJCSAgY29uc3Qgdm9pZCAqb3BhcXVlX2RhdGEpOwotZXh0ZXJuIGludAlTaW1wbGVM cnVSZWFkUGFnZV9SZWFkT25seShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLAorZXh0ZXJu IGludAlTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seShTbHJ1RGVzYyAqY3RsLCBpbnQ2NCBw YWdlbm8sCiAJCQkJCQkJCQkgICBjb25zdCB2b2lkICpvcGFxdWVfZGF0YSk7Ci1leHRlcm4g dm9pZCBTaW1wbGVMcnVXcml0ZVBhZ2UoU2xydUN0bCBjdGwsIGludCBzbG90bm8pOwotZXh0 ZXJuIHZvaWQgU2ltcGxlTHJ1V3JpdGVBbGwoU2xydUN0bCBjdGwsIGJvb2wgYWxsb3dfcmVk aXJ0aWVkKTsKK2V4dGVybiB2b2lkIFNpbXBsZUxydVdyaXRlUGFnZShTbHJ1RGVzYyAqY3Rs LCBpbnQgc2xvdG5vKTsKK2V4dGVybiB2b2lkIFNpbXBsZUxydVdyaXRlQWxsKFNscnVEZXNj ICpjdGwsIGJvb2wgYWxsb3dfcmVkaXJ0aWVkKTsKICNpZmRlZiBVU0VfQVNTRVJUX0NIRUNL SU5HCi1leHRlcm4gdm9pZCBTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFNscnVDdGwgY3Rs LCBpbnQgcGVyX3BhZ2UpOworZXh0ZXJuIHZvaWQgU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0 cyhTbHJ1RGVzYyAqY3RsLCBpbnQgcGVyX3BhZ2UpOwogI2Vsc2UKICNkZWZpbmUgU2xydVBh Z2VQcmVjZWRlc1VuaXRUZXN0cyhjdGwsIHBlcl9wYWdlKSBkbyB7fSB3aGlsZSAoMCkKICNl bmRpZgotZXh0ZXJuIHZvaWQgU2ltcGxlTHJ1VHJ1bmNhdGUoU2xydUN0bCBjdGwsIGludDY0 IGN1dG9mZlBhZ2UpOwotZXh0ZXJuIGJvb2wgU2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4 aXN0KFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8pOworZXh0ZXJuIHZvaWQgU2ltcGxlTHJ1 VHJ1bmNhdGUoU2xydURlc2MgKmN0bCwgaW50NjQgY3V0b2ZmUGFnZSk7CitleHRlcm4gYm9v bCBTaW1wbGVMcnVEb2VzUGh5c2ljYWxQYWdlRXhpc3QoU2xydURlc2MgKmN0bCwgaW50NjQg cGFnZW5vKTsKIAotdHlwZWRlZiBib29sICgqU2xydVNjYW5DYWxsYmFjaykgKFNscnVDdGwg Y3RsLCBjaGFyICpmaWxlbmFtZSwgaW50NjQgc2VncGFnZSwKK3R5cGVkZWYgYm9vbCAoKlNs cnVTY2FuQ2FsbGJhY2spIChTbHJ1RGVzYyAqY3RsLCBjaGFyICpmaWxlbmFtZSwgaW50NjQg c2VncGFnZSwKIAkJCQkJCQkJICB2b2lkICpkYXRhKTsKLWV4dGVybiBib29sIFNscnVTY2Fu RGlyZWN0b3J5KFNscnVDdGwgY3RsLCBTbHJ1U2NhbkNhbGxiYWNrIGNhbGxiYWNrLCB2b2lk ICpkYXRhKTsKLWV4dGVybiB2b2lkIFNscnVEZWxldGVTZWdtZW50KFNscnVDdGwgY3RsLCBp bnQ2NCBzZWdubyk7CitleHRlcm4gYm9vbCBTbHJ1U2NhbkRpcmVjdG9yeShTbHJ1RGVzYyAq Y3RsLCBTbHJ1U2NhbkNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICpkYXRhKTsKK2V4dGVybiB2 b2lkIFNscnVEZWxldGVTZWdtZW50KFNscnVEZXNjICpjdGwsIGludDY0IHNlZ25vKTsKIAot ZXh0ZXJuIGludAlTbHJ1U3luY0ZpbGVUYWcoU2xydUN0bCBjdGwsIGNvbnN0IEZpbGVUYWcg KmZ0YWcsIGNoYXIgKnBhdGgpOworZXh0ZXJuIGludAlTbHJ1U3luY0ZpbGVUYWcoU2xydURl c2MgKmN0bCwgY29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAqcGF0aCk7CiAKIC8qIFNscnVT Y2FuRGlyZWN0b3J5IHB1YmxpYyBjYWxsYmFja3MgKi8KLWV4dGVybiBib29sIFNscnVTY2Fu RGlyQ2JSZXBvcnRQcmVzZW5jZShTbHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5hbWUsCitleHRl cm4gYm9vbCBTbHJ1U2NhbkRpckNiUmVwb3J0UHJlc2VuY2UoU2xydURlc2MgKmN0bCwgY2hh ciAqZmlsZW5hbWUsCiAJCQkJCQkJCQkJaW50NjQgc2VncGFnZSwgdm9pZCAqZGF0YSk7Ci1l eHRlcm4gYm9vbCBTbHJ1U2NhbkRpckNiRGVsZXRlQWxsKFNscnVDdGwgY3RsLCBjaGFyICpm aWxlbmFtZSwgaW50NjQgc2VncGFnZSwKK2V4dGVybiBib29sIFNscnVTY2FuRGlyQ2JEZWxl dGVBbGwoU2xydURlc2MgKmN0bCwgY2hhciAqZmlsZW5hbWUsIGludDY0IHNlZ3BhZ2UsCiAJ CQkJCQkJCSAgIHZvaWQgKmRhdGEpOwogZXh0ZXJuIGJvb2wgY2hlY2tfc2xydV9idWZmZXJz KGNvbnN0IGNoYXIgKm5hbWUsIGludCAqbmV3dmFsKTsKIAorZXh0ZXJuIHZvaWQgc2htZW1f c2xydV9pbml0KFNobWVtU3RydWN0RGVzYyAqYmFzZV9kZXNjLCBTaG1lbVN0cnVjdE9wdHMg Km9wdGlvbnMpOworZXh0ZXJuIHZvaWQgc2htZW1fc2xydV9hdHRhY2goU2htZW1TdHJ1Y3RE ZXNjICpiYXNlX2Rlc2MsIFNobWVtU3RydWN0T3B0cyAqb3B0aW9ucyk7CisKICNlbmRpZgkJ CQkJCQkvKiBTTFJVX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9zdWJ0 cmFucy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3N1YnRyYW5zLmgKaW5kZXggMTFiNzM1NWRi ZGYuLmQ5ODZjZDllODAyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3VidHJh bnMuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3VidHJhbnMuaApAQCAtMTUsOCArMTUs NiBAQCBleHRlcm4gdm9pZCBTdWJUcmFuc1NldFBhcmVudChUcmFuc2FjdGlvbklkIHhpZCwg VHJhbnNhY3Rpb25JZCBwYXJlbnQpOwogZXh0ZXJuIFRyYW5zYWN0aW9uSWQgU3ViVHJhbnNH ZXRQYXJlbnQoVHJhbnNhY3Rpb25JZCB4aWQpOwogZXh0ZXJuIFRyYW5zYWN0aW9uSWQgU3Vi VHJhbnNHZXRUb3Btb3N0VHJhbnNhY3Rpb24oVHJhbnNhY3Rpb25JZCB4aWQpOwogCi1leHRl cm4gU2l6ZSBTVUJUUkFOU1NobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIFNVQlRSQU5T U2htZW1Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgQm9vdFN0cmFwU1VCVFJBTlModm9pZCk7 CiBleHRlcm4gdm9pZCBTdGFydHVwU1VCVFJBTlMoVHJhbnNhY3Rpb25JZCBvbGRlc3RBY3Rp dmVYSUQpOwogZXh0ZXJuIHZvaWQgQ2hlY2tQb2ludFNVQlRSQU5TKHZvaWQpOwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvYXN5bmMuaCBiL3NyYy9pbmNsdWRlL2NvbW1h bmRzL2FzeW5jLmgKaW5kZXggM2JhYWU3Y2I4ZGMuLjIwMmU0YWE1ZTc0IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9jb21tYW5kcy9hc3luYy5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1h bmRzL2FzeW5jLmgKQEAgLTE5LDkgKzE5LDYgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wg VHJhY2Vfbm90aWZ5OwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfbm90aWZ5X3F1ZXVl X3BhZ2VzOwogZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBub3Rp ZnlJbnRlcnJ1cHRQZW5kaW5nOwogCi1leHRlcm4gU2l6ZSBBc3luY1NobWVtU2l6ZSh2b2lk KTsKLWV4dGVybiB2b2lkIEFzeW5jU2htZW1Jbml0KHZvaWQpOwotCiBleHRlcm4gdm9pZCBO b3RpZnlNeUZyb250RW5kKGNvbnN0IGNoYXIgKmNoYW5uZWwsCiAJCQkJCQkJIGNvbnN0IGNo YXIgKnBheWxvYWQsCiAJCQkJCQkJIGludDMyIHNyY1BpZCk7CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9zdG9yYWdlL3ByZWRpY2F0ZS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcmVk aWNhdGUuaAppbmRleCBhNWFjNTViOGY3ZS4uNDQzYmZmYjU4ZmQgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvcHJlZGljYXRlLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFn ZS9wcmVkaWNhdGUuaApAQCAtNDEsMTEgKzQxLDYgQEAgdHlwZWRlZiB2b2lkICpTZXJpYWxp emFibGVYYWN0SGFuZGxlOwogLyoKICAqIGZ1bmN0aW9uIHByb3RvdHlwZXMKICAqLwotCi0v KiBob3VzZWtlZXBpbmcgZm9yIHNoYXJlZCBtZW1vcnkgcHJlZGljYXRlIGxvY2sgc3RydWN0 dXJlcyAqLwotZXh0ZXJuIHZvaWQgUHJlZGljYXRlTG9ja1NobWVtSW5pdCh2b2lkKTsKLWV4 dGVybiBTaXplIFByZWRpY2F0ZUxvY2tTaG1lbVNpemUodm9pZCk7Ci0KIGV4dGVybiB2b2lk IENoZWNrUG9pbnRQcmVkaWNhdGUodm9pZCk7CiAKIC8qIHByZWRpY2F0ZSBsb2NrIHJlcG9y dGluZyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zaG1lbS5oIGIvc3Jj L2luY2x1ZGUvc3RvcmFnZS9zaG1lbS5oCmluZGV4IGYzODUwYmM3YjA4Li42NGMxZmIwNDRj NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zaG1lbS5oCisrKyBiL3NyYy9p bmNsdWRlL3N0b3JhZ2Uvc2htZW0uaApAQCAtMjksNiArMjksNyBAQCB0eXBlZGVmIGVudW0K IHsKIAlTSE1FTV9LSU5EX1NUUlVDVCA9IDAsCQkvKiBwbGFpbiwgY29udGlndW91cyBhcmVh IG9mIG1lbW9yeSAqLwogCVNITUVNX0tJTkRfSEFTSCwJCQkvKiBhIGhhc2ggdGFibGUgKi8K KwlTSE1FTV9LSU5EX1NMUlUsCQkJLyogU0xSVSBidWZmZXJzIGFuZCBjb250cm9sIHN0cnVj dHVyZXMgKi8KIH0gU2htZW1BcmVhS2luZDsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJz eXN0ZW1saXN0LmgKaW5kZXggNWMxMWIyYjM0OTkuLjYzZDFkNjBhZTM2IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3RlbWxpc3QuaAorKysgYi9zcmMvaW5jbHVk ZS9zdG9yYWdlL3N1YnN5c3RlbWxpc3QuaApAQCAtMjUsNiArMjUsMTMgQEAgUEdfU0hNRU1f U1VCU1lTVEVNKERTTVJlZ2lzdHJ5U2htZW1DYWxsYmFja3MpCiAKIC8qIHhsb2csIGNsb2cs IGFuZCBidWZmZXJzICovCiBQR19TSE1FTV9TVUJTWVNURU0oVmFyc3VwU2htZW1DYWxsYmFj a3MpCitQR19TSE1FTV9TVUJTWVNURU0oQ0xPR1NobWVtQ2FsbGJhY2tzKQorUEdfU0hNRU1f U1VCU1lTVEVNKENvbW1pdFRzU2htZW1DYWxsYmFja3MpCitQR19TSE1FTV9TVUJTWVNURU0o U1VCVFJBTlNTaG1lbUNhbGxiYWNrcykKK1BHX1NITUVNX1NVQlNZU1RFTShNdWx0aVhhY3RT aG1lbUNhbGxiYWNrcykKKworLyogcHJlZGljYXRlIGxvY2sgbWFuYWdlciAqLworUEdfU0hN RU1fU1VCU1lTVEVNKFByZWRpY2F0ZUxvY2tTaG1lbUNhbGxiYWNrcykKIAogLyogcHJvY2Vz cyB0YWJsZSAqLwogUEdfU0hNRU1fU1VCU1lTVEVNKFByb2NHbG9iYWxTaG1lbUNhbGxiYWNr cykKQEAgLTM4LDUgKzQ1LDYgQEAgUEdfU0hNRU1fU1VCU1lTVEVNKFBNU2lnbmFsU2htZW1D YWxsYmFja3MpCiBQR19TSE1FTV9TVUJTWVNURU0oUHJvY1NpZ25hbFNobWVtQ2FsbGJhY2tz KQogCiAvKiBvdGhlciBtb2R1bGVzIHRoYXQgbmVlZCBzb21lIHNoYXJlZCBtZW1vcnkgc3Bh Y2UgKi8KK1BHX1NITUVNX1NVQlNZU1RFTShBc3luY1NobWVtQ2FsbGJhY2tzKQogUEdfU0hN RU1fU1VCU1lTVEVNKFdhaXRFdmVudEN1c3RvbVNobWVtQ2FsbGJhY2tzKQogUEdfU0hNRU1f U1VCU1lTVEVNKEluamVjdGlvblBvaW50U2htZW1DYWxsYmFja3MpCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2xydS90ZXN0X3NscnUuYyBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9zbHJ1L3Rlc3Rfc2xydS5jCmluZGV4IGU0YmQyYWYwYmY1Li4zYzJhMTQzYjRk NSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NscnUvdGVzdF9zbHJ1LmMK KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NscnUvdGVzdF9zbHJ1LmMKQEAgLTQwLDE0 ICs0MCwyMiBAQCBQR19GVU5DVElPTl9JTkZPX1YxKHRlc3Rfc2xydV9kZWxldGVfYWxsKTsK IC8qIE51bWJlciBvZiBTTFJVIHBhZ2Ugc2xvdHMgKi8KICNkZWZpbmUgTlVNX1RFU1RfQlVG RkVSUwkJMTYKIAotc3RhdGljIFNscnVDdGxEYXRhIFRlc3RTbHJ1Q3RsRGF0YTsKLSNkZWZp bmUgVGVzdFNscnVDdGwJCQkoJlRlc3RTbHJ1Q3RsRGF0YSkKK3N0YXRpYyB2b2lkIHRlc3Rf c2xydV9zaG1lbV9yZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgYm9vbCB0ZXN0X3NscnVf cGFnZV9wcmVjZWRlc19sb2dpY2FsbHkoaW50NjQgcGFnZTEsIGludDY0IHBhZ2UyKTsKK3N0 YXRpYyBpbnQJdGVzdF9zbHJ1X2VycmRldGFpbF9mb3JfaW9fZXJyb3IoY29uc3Qgdm9pZCAq b3BhcXVlX2RhdGEpOwogCi1zdGF0aWMgc2htZW1fcmVxdWVzdF9ob29rX3R5cGUgcHJldl9z aG1lbV9yZXF1ZXN0X2hvb2sgPSBOVUxMOwotc3RhdGljIHNobWVtX3N0YXJ0dXBfaG9va190 eXBlIHByZXZfc2htZW1fc3RhcnR1cF9ob29rID0gTlVMTDsKK3N0YXRpYyBjb25zdCBjaGFy ICpUZXN0U2xydURpciA9ICJwZ190ZXN0X3NscnUiOworCitzdGF0aWMgU2xydURlc2MgVGVz dFNscnVEZXNjOworCitzdGF0aWMgY29uc3QgU2htZW1DYWxsYmFja3MgdGVzdF9zbHJ1X3No bWVtX2NhbGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9IHRlc3Rfc2xydV9zaG1lbV9yZXF1 ZXN0Cit9OworCisjZGVmaW5lIFRlc3RTbHJ1Q3RsCQkJKCZUZXN0U2xydURlc2MpCiAKIHN0 YXRpYyBib29sCi10ZXN0X3NscnVfc2Nhbl9jYihTbHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5h bWUsIGludDY0IHNlZ3BhZ2UsIHZvaWQgKmRhdGEpCit0ZXN0X3NscnVfc2Nhbl9jYihTbHJ1 RGVzYyAqY3RsLCBjaGFyICpmaWxlbmFtZSwgaW50NjQgc2VncGFnZSwgdm9pZCAqZGF0YSkK IHsKIAllbG9nKE5PVElDRSwgIkNhbGxpbmcgdGVzdF9zbHJ1X3NjYW5fY2IoKSIpOwogCXJl dHVybiBTbHJ1U2NhbkRpckNiRGVsZXRlQWxsKGN0bCwgZmlsZW5hbWUsIHNlZ3BhZ2UsIGRh dGEpOwpAQCAtMTkwLDIwICsxOTgsNiBAQCB0ZXN0X3NscnVfZGVsZXRlX2FsbChQR19GVU5D VElPTl9BUkdTKQogCVBHX1JFVFVSTl9WT0lEKCk7CiB9CiAKLS8qCi0gKiBNb2R1bGUgbG9h ZCBjYWxsYmFja3MgYW5kIGluaXRpYWxpemF0aW9uLgotICovCi0KLXN0YXRpYyB2b2lkCi10 ZXN0X3NscnVfc2htZW1fcmVxdWVzdCh2b2lkKQotewotCWlmIChwcmV2X3NobWVtX3JlcXVl c3RfaG9vaykKLQkJcHJldl9zaG1lbV9yZXF1ZXN0X2hvb2soKTsKLQotCS8qIHJlc2VydmUg c2hhcmVkIG1lbW9yeSBmb3IgdGhlIHRlc3QgU0xSVSAqLwotCVJlcXVlc3RBZGRpblNobWVt U3BhY2UoU2ltcGxlTHJ1U2htZW1TaXplKE5VTV9URVNUX0JVRkZFUlMsIDApKTsKLX0KLQog c3RhdGljIGJvb2wKIHRlc3Rfc2xydV9wYWdlX3ByZWNlZGVzX2xvZ2ljYWxseShpbnQ2NCBw YWdlMSwgaW50NjQgcGFnZTIpCiB7CkBAIC0yMTgsNDggKzIxMiw2IEBAIHRlc3Rfc2xydV9l cnJkZXRhaWxfZm9yX2lvX2Vycm9yKGNvbnN0IHZvaWQgKm9wYXF1ZV9kYXRhKQogCXJldHVy biBlcnJkZXRhaWwoIkNvdWxkIG5vdCBhY2Nlc3MgdGVzdF9zbHJ1IGVudHJ5ICV1LiIsIHhp ZCk7CiB9CiAKLXN0YXRpYyB2b2lkCi10ZXN0X3NscnVfc2htZW1fc3RhcnR1cCh2b2lkKQot ewotCS8qCi0JICogU2hvcnQgc2VnbWVudHMgbmFtZXMgYXJlIHdlbGwgdGVzdGVkIGVsc2V3 aGVyZSBzbyBpbiB0aGlzIHRlc3Qgd2UgYXJlCi0JICogZm9jdXNpbmcgb24gbG9uZyBuYW1l cy4KLQkgKi8KLQljb25zdCBib29sCWxvbmdfc2VnbWVudF9uYW1lcyA9IHRydWU7Ci0JY29u c3QgY2hhcglzbHJ1X2Rpcl9uYW1lW10gPSAicGdfdGVzdF9zbHJ1IjsKLQlpbnQJCQl0ZXN0 X3RyYW5jaGVfaWQgPSAtMTsKLQlpbnQJCQl0ZXN0X2J1ZmZlcl90cmFuY2hlX2lkID0gLTE7 Ci0KLQlpZiAocHJldl9zaG1lbV9zdGFydHVwX2hvb2spCi0JCXByZXZfc2htZW1fc3RhcnR1 cF9ob29rKCk7Ci0KLQkvKgotCSAqIENyZWF0ZSB0aGUgU0xSVSBkaXJlY3RvcnkgaWYgaXQg ZG9lcyBub3QgZXhpc3QgeWV0LCBmcm9tIHRoZSByb290IG9mCi0JICogdGhlIGRhdGEgZGly ZWN0b3J5LgotCSAqLwotCSh2b2lkKSBNYWtlUEdEaXJlY3Rvcnkoc2xydV9kaXJfbmFtZSk7 Ci0KLQkvKgotCSAqIEluaXRpYWxpemUgdGhlIFNMUlUgZmFjaWxpdHkuICBJbiBFWEVDX0JB Q0tFTkQgYnVpbGRzLCB0aGUKLQkgKiBzaG1lbV9zdGFydHVwX2hvb2sgaXMgY2FsbGVkIGlu IHRoZSBwb3N0bWFzdGVyIGFuZCBpbiBlYWNoIGJhY2tlbmQsIGJ1dAotCSAqIHdlIG9ubHkg bmVlZCB0byBnZW5lcmF0ZSB0aGUgTFdMb2NrIHRyYW5jaGVzIG9uY2UuICBOb3RlIHRoYXQg dGhlc2UKLQkgKiB0cmFuY2hlIElEIHZhcmlhYmxlcyBhcmUgbm90IHVzZWQgYnkgU2ltcGxl THJ1SW5pdCgpIHdoZW4KLQkgKiBJc1VuZGVyUG9zdG1hc3RlciBpcyB0cnVlLgotCSAqLwot CWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCi0JewotCQl0ZXN0X3RyYW5jaGVfaWQgPSBMV0xv Y2tOZXdUcmFuY2hlSWQoInRlc3Rfc2xydV90cmFuY2hlIik7Ci0JCXRlc3RfYnVmZmVyX3Ry YW5jaGVfaWQgPSBMV0xvY2tOZXdUcmFuY2hlSWQoInRlc3RfYnVmZmVyX3RyYW5jaGUiKTsK LQl9Ci0KLQlUZXN0U2xydUN0bC0+UGFnZVByZWNlZGVzID0gdGVzdF9zbHJ1X3BhZ2VfcHJl Y2VkZXNfbG9naWNhbGx5OwotCVRlc3RTbHJ1Q3RsLT5lcnJkZXRhaWxfZm9yX2lvX2Vycm9y ID0gdGVzdF9zbHJ1X2VycmRldGFpbF9mb3JfaW9fZXJyb3I7Ci0JU2ltcGxlTHJ1SW5pdChU ZXN0U2xydUN0bCwgIlRlc3RTTFJVIiwKLQkJCQkgIE5VTV9URVNUX0JVRkZFUlMsIDAsIHNs cnVfZGlyX25hbWUsCi0JCQkJICB0ZXN0X2J1ZmZlcl90cmFuY2hlX2lkLCB0ZXN0X3RyYW5j aGVfaWQsIFNZTkNfSEFORExFUl9OT05FLAotCQkJCSAgbG9uZ19zZWdtZW50X25hbWVzKTsK LX0KLQogdm9pZAogX1BHX2luaXQodm9pZCkKIHsKQEAgLTI2OSw5ICsyMjEsMzcgQEAgX1BH X2luaXQodm9pZCkKIAkJCQkgZXJyZGV0YWlsKCJcIiVzXCIgbXVzdCBiZSBsb2FkZWQgd2l0 aCBcInNoYXJlZF9wcmVsb2FkX2xpYnJhcmllc1wiLiIsCiAJCQkJCQkgICAidGVzdF9zbHJ1 IikpKTsKIAotCXByZXZfc2htZW1fcmVxdWVzdF9ob29rID0gc2htZW1fcmVxdWVzdF9ob29r OwotCXNobWVtX3JlcXVlc3RfaG9vayA9IHRlc3Rfc2xydV9zaG1lbV9yZXF1ZXN0OworCS8q CisJICogQ3JlYXRlIHRoZSBTTFJVIGRpcmVjdG9yeSBpZiBpdCBkb2VzIG5vdCBleGlzdCB5 ZXQsIGZyb20gdGhlIHJvb3Qgb2YKKwkgKiB0aGUgZGF0YSBkaXJlY3RvcnkuCisJICovCisJ KHZvaWQpIE1ha2VQR0RpcmVjdG9yeShUZXN0U2xydURpcik7CiAKLQlwcmV2X3NobWVtX3N0 YXJ0dXBfaG9vayA9IHNobWVtX3N0YXJ0dXBfaG9vazsKLQlzaG1lbV9zdGFydHVwX2hvb2sg PSB0ZXN0X3NscnVfc2htZW1fc3RhcnR1cDsKKwlSZWdpc3RlclNobWVtQ2FsbGJhY2tzKCZ0 ZXN0X3NscnVfc2htZW1fY2FsbGJhY2tzKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3Rfc2xy dV9zaG1lbV9yZXF1ZXN0KHZvaWQgKmFyZykKK3sKKwlTaW1wbGVMcnVSZXF1ZXN0KCZUZXN0 U2xydURlc2MsCisJCS5uYW1lID0gIlRlc3RTTFJVIiwKKwkJLkRpciA9IFRlc3RTbHJ1RGly LAorCisJCS8qCisJCSAqIFNob3J0IHNlZ21lbnRzIG5hbWVzIGFyZSB3ZWxsIHRlc3RlZCBl bHNld2hlcmUgc28gaW4gdGhpcyB0ZXN0IHdlIGFyZQorCQkgKiBmb2N1c2luZyBvbiBsb25n IG5hbWVzLgorCQkgKi8KKwkJLmxvbmdfc2VnbWVudF9uYW1lcyA9IHRydWUsCisKKwkJLm5z bG90cyA9IE5VTV9URVNUX0JVRkZFUlMsCisJCS5ubHNucyA9IDAsCisKKwkJLnN5bmNfaGFu ZGxlciA9IFNZTkNfSEFORExFUl9OT05FLAorCQkuUGFnZVByZWNlZGVzID0gdGVzdF9zbHJ1 X3BhZ2VfcHJlY2VkZXNfbG9naWNhbGx5LAorCQkuZXJyZGV0YWlsX2Zvcl9pb19lcnJvciA9 IHRlc3Rfc2xydV9lcnJkZXRhaWxfZm9yX2lvX2Vycm9yLAorCisJCS8qIGxldCBzbHJ1LmMg YXNzaWduIHRoZXNlICovCisJCS5idWZmZXJfdHJhbmNoZV9pZCA9IDAsCisJCS5iYW5rX3Ry YW5jaGVfaWQgPSAwLAorCSk7CiB9CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4 IGE5OTdkM2E1ZjU0Li44NTYzZDZkMmM5NyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKQEAgLTI4OTIsMTAgKzI4OTIsMTAgQEAgU2xvdEludmFsaWRhdGlvbkNhdXNlTWFwCiBT bG90TnVtYmVyCiBTbG90U3luY0N0eFN0cnVjdAogU2xvdFN5bmNTa2lwUmVhc29uCi1TbHJ1 Q3RsCi1TbHJ1Q3RsRGF0YQorU2xydURlc2MKIFNscnVFcnJvckNhdXNlCiBTbHJ1UGFnZVN0 YXR1cworU2xydVJlcXVlc3RPcHRzCiBTbHJ1U2NhbkNhbGxiYWNrCiBTbHJ1U2VnU3RhdGUK IFNscnVTaGFyZWQKLS0gCjIuNDcuMwoK --------------cltwtZYaOf76t571xokamZd0 Content-Type: text/x-patch; charset=UTF-8; name="v9-0014-Convert-AIO-to-the-new-interface.patch" Content-Disposition: attachment; filename="v9-0014-Convert-AIO-to-the-new-interface.patch" Content-Transfer-Encoding: base64 RnJvbSA2OTVkYjkxNWQ1YWJkN2IzM2NlZTUyNDQxMmI1MzlmYmY0MThmNmVkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFNhdCwgMjEgTWFyIDIwMjYgMTI6NDM6MTYgKzAyMDAK U3ViamVjdDogW1BBVENIIHY5IDE0LzE2XSBDb252ZXJ0IEFJTyB0byB0aGUgbmV3IGludGVy ZmFjZQoKVGhpcyByZXBsYWNlcyB0aGUgInNobWVtX3NpemUiIGFuZCAic2htZW1faW5pdCIg Y2FsbGJhY2tzIGluIHRoZSBJTwptZXRob2RzIHRhYmxlIHdpdGggdGhlIHNhbWUgU2htZW1D YWxsYmFjayBzdHJ1Y3QgdGhhdCB3ZSBub3cgdXNlIGluCm90aGVyIHN1YnN5c3RlbXMKLS0t CiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMgICAgICAgICB8ICAyMCArKy0t CiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYyAgICB8ICAyNCArKy0t LQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgICAgfCAgNDIgKysr Ky0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3NscnUuYyAgICAgICAgIHwgICA4 ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0cmFucy5jICAgICB8ICAyMCAr Ky0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jICAgICAgICAgICAgICB8ICAzMCAr KystLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpb19pbml0LmMgICAgICAgIHwgMTIx ICsrKysrKysrKysrKysrLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhv ZF9pb191cmluZy5jIHwgIDQyICsrKysrLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9t ZXRob2Rfd29ya2VyLmMgICB8ICA4NCArKysrKysrKy0tLS0tLS0KIHNyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL2lwY2kuYyAgICAgICAgICAgIHwgICAyIC0KIHNyYy9iYWNrZW5kL3N0b3Jh Z2UvbG1nci9wcmVkaWNhdGUuYyAgICAgIHwgMTA0ICsrKysrKysrKy0tLS0tLS0tLS0KIHNy Yy9pbmNsdWRlL2FjY2Vzcy9zbHJ1LmggICAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMv aW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRlcm5hbC5oICAgICAgICB8ICAxNiArLS0KIHNyYy9p bmNsdWRlL3N0b3JhZ2UvYWlvX3N1YnN5cy5oICAgICAgICAgIHwgICA0IC0KIHNyYy9pbmNs dWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oICAgICAgIHwgICAzICsKIHNyYy90ZXN0L21v ZHVsZXMvdGVzdF9zbHJ1L3Rlc3Rfc2xydS5jICAgIHwgIDQwICsrKy0tLS0KIDE2IGZpbGVz IGNoYW5nZWQsIDMwMyBpbnNlcnRpb25zKCspLCAyNjMgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0vY2xvZy5jCmluZGV4IDg3ZjdmNTcwN2RlLi45NWYxNjA4NzllMCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYwpAQCAtODEwLDE5ICs4MTAsMTkgQEAg Q0xPR1NobWVtUmVxdWVzdCh2b2lkICphcmcpCiAJfQogCUFzc2VydCh0cmFuc2FjdGlvbl9i dWZmZXJzICE9IDApOwogCVNpbXBsZUxydVJlcXVlc3QoJlhhY3RTbHJ1RGVzYywKLQkJLm5h bWUgPSAidHJhbnNhY3Rpb24iLAotCQkuRGlyID0gInBnX3hhY3QiLAotCQkubG9uZ19zZWdt ZW50X25hbWVzID0gZmFsc2UsCisJCQkJCSAubmFtZSA9ICJ0cmFuc2FjdGlvbiIsCisJCQkJ CSAuRGlyID0gInBnX3hhY3QiLAorCQkJCQkgLmxvbmdfc2VnbWVudF9uYW1lcyA9IGZhbHNl LAogCi0JCS5uc2xvdHMgPSBDTE9HU2htZW1CdWZmZXJzKCksCi0JCS5ubHNucyA9IENMT0df TFNOU19QRVJfUEFHRSwKKwkJCQkJIC5uc2xvdHMgPSBDTE9HU2htZW1CdWZmZXJzKCksCisJ CQkJCSAubmxzbnMgPSBDTE9HX0xTTlNfUEVSX1BBR0UsCiAKLQkJLnN5bmNfaGFuZGxlciA9 IFNZTkNfSEFORExFUl9DTE9HLAotCQkuUGFnZVByZWNlZGVzID0gQ0xPR1BhZ2VQcmVjZWRl cywKLQkJLmVycmRldGFpbF9mb3JfaW9fZXJyb3IgPSBjbG9nX2VycmRldGFpbF9mb3JfaW9f ZXJyb3IsCisJCQkJCSAuc3luY19oYW5kbGVyID0gU1lOQ19IQU5ETEVSX0NMT0csCisJCQkJ CSAuUGFnZVByZWNlZGVzID0gQ0xPR1BhZ2VQcmVjZWRlcywKKwkJCQkJIC5lcnJkZXRhaWxf Zm9yX2lvX2Vycm9yID0gY2xvZ19lcnJkZXRhaWxfZm9yX2lvX2Vycm9yLAogCi0JCS5idWZm ZXJfdHJhbmNoZV9pZCA9IExXVFJBTkNIRV9YQUNUX0JVRkZFUiwKLQkJLmJhbmtfdHJhbmNo ZV9pZCA9IExXVFJBTkNIRV9YQUNUX1NMUlUsCisJCQkJCSAuYnVmZmVyX3RyYW5jaGVfaWQg PSBMV1RSQU5DSEVfWEFDVF9CVUZGRVIsCisJCQkJCSAuYmFua190cmFuY2hlX2lkID0gTFdU UkFOQ0hFX1hBQ1RfU0xSVSwKIAkJKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0vY29tbWl0X3RzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS9jb21taXRfdHMuYwppbmRleCAyMzZkOGZiNGJhYS4uNjc1ZGFjOWU0MGYgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5jCkBAIC01NTEsMjQgKzU1MSwyNCBA QCBDb21taXRUc1NobWVtUmVxdWVzdCh2b2lkICphcmcpCiAJfQogCUFzc2VydChjb21taXRf dGltZXN0YW1wX2J1ZmZlcnMgIT0gMCk7CiAJU2ltcGxlTHJ1UmVxdWVzdCgmQ29tbWl0VHNT bHJ1RGVzYywKLQkJLm5hbWUgPSAiY29tbWl0X3RpbWVzdGFtcCIsCi0JCS5EaXIgPSAicGdf Y29tbWl0X3RzIiwKLQkJLmxvbmdfc2VnbWVudF9uYW1lcyA9IGZhbHNlLAorCQkJCQkgLm5h bWUgPSAiY29tbWl0X3RpbWVzdGFtcCIsCisJCQkJCSAuRGlyID0gInBnX2NvbW1pdF90cyIs CisJCQkJCSAubG9uZ19zZWdtZW50X25hbWVzID0gZmFsc2UsCiAKLQkJLm5zbG90cyA9IENv bW1pdFRzU2htZW1CdWZmZXJzKCksCisJCQkJCSAubnNsb3RzID0gQ29tbWl0VHNTaG1lbUJ1 ZmZlcnMoKSwKIAotCQkuUGFnZVByZWNlZGVzID0gQ29tbWl0VHNQYWdlUHJlY2VkZXMsCi0J CS5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yID0gY29tbWl0X3RzX2VycmRldGFpbF9mb3JfaW9f ZXJyb3IsCisJCQkJCSAuUGFnZVByZWNlZGVzID0gQ29tbWl0VHNQYWdlUHJlY2VkZXMsCisJ CQkJCSAuZXJyZGV0YWlsX2Zvcl9pb19lcnJvciA9IGNvbW1pdF90c19lcnJkZXRhaWxfZm9y X2lvX2Vycm9yLAogCi0JCS5zeW5jX2hhbmRsZXIgPSBTWU5DX0hBTkRMRVJfQ09NTUlUX1RT LAotCQkuYnVmZmVyX3RyYW5jaGVfaWQgPSBMV1RSQU5DSEVfQ09NTUlUVFNfQlVGRkVSLAot CQkuYmFua190cmFuY2hlX2lkID0gTFdUUkFOQ0hFX0NPTU1JVFRTX1NMUlUsCisJCQkJCSAu c3luY19oYW5kbGVyID0gU1lOQ19IQU5ETEVSX0NPTU1JVF9UUywKKwkJCQkJIC5idWZmZXJf dHJhbmNoZV9pZCA9IExXVFJBTkNIRV9DT01NSVRUU19CVUZGRVIsCisJCQkJCSAuYmFua190 cmFuY2hlX2lkID0gTFdUUkFOQ0hFX0NPTU1JVFRTX1NMUlUsCiAJCSk7CiAKIAlTaG1lbVJl cXVlc3RTdHJ1Y3QoJkNvbW1pdFRzU2htZW1EZXNjLAotCQkubmFtZSA9ICJDb21taXRUcyBz aGFyZWQiLAotCQkuc2l6ZSA9IHNpemVvZihDb21taXRUaW1lc3RhbXBTaGFyZWQpLAotCQku cHRyID0gKHZvaWQgKiopICZjb21taXRUc1NoYXJlZCwKKwkJCQkJICAgLm5hbWUgPSAiQ29t bWl0VHMgc2hhcmVkIiwKKwkJCQkJICAgLnNpemUgPSBzaXplb2YoQ29tbWl0VGltZXN0YW1w U2hhcmVkKSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmY29tbWl0VHNTaGFyZWQsCiAJ CSk7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRp eGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKaW5kZXgg OTQwYWM1YTc4ZDYuLjg4ZTQ2ZDY4NjhkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS9tdWx0aXhhY3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS9tdWx0aXhhY3QuYwpAQCAtMTc3OSwzOSArMTc3OSwzOSBAQCBNdWx0aVhhY3RTaG1lbVJl cXVlc3Qodm9pZCAqYXJnKQogCXNpemUgPSBhZGRfc2l6ZShzaXplLAogCQkJCQltdWxfc2l6 ZShzaXplb2YoTXVsdGlYYWN0SWQpLCBOdW1WaXNpYmxlU2xvdHMpKTsKIAlTaG1lbVJlcXVl c3RTdHJ1Y3QoJk11bHRpWGFjdFNobWVtRGVzYywKLQkJLm5hbWUgPSAiU2hhcmVkIE11bHRp WGFjdCBTdGF0ZSIsCi0JCS5zaXplID0gc2l6ZSwKLQkJLnB0ciA9ICh2b2lkICoqKSAmTXVs dGlYYWN0U3RhdGUsCisJCQkJCSAgIC5uYW1lID0gIlNoYXJlZCBNdWx0aVhhY3QgU3RhdGUi LAorCQkJCQkgICAuc2l6ZSA9IHNpemUsCisJCQkJCSAgIC5wdHIgPSAodm9pZCAqKikgJk11 bHRpWGFjdFN0YXRlLAogCQkpOwogCiAJU2ltcGxlTHJ1UmVxdWVzdCgmTXVsdGlYYWN0T2Zm c2V0U2xydURlc2MsCi0JCS5uYW1lID0gIm11bHRpeGFjdF9vZmZzZXQiLAotCQkuRGlyID0g InBnX211bHRpeGFjdC9vZmZzZXRzIiwKLQkJLmxvbmdfc2VnbWVudF9uYW1lcyA9IGZhbHNl LAorCQkJCQkgLm5hbWUgPSAibXVsdGl4YWN0X29mZnNldCIsCisJCQkJCSAuRGlyID0gInBn X211bHRpeGFjdC9vZmZzZXRzIiwKKwkJCQkJIC5sb25nX3NlZ21lbnRfbmFtZXMgPSBmYWxz ZSwKIAotCQkubnNsb3RzID0gbXVsdGl4YWN0X29mZnNldF9idWZmZXJzLAorCQkJCQkgLm5z bG90cyA9IG11bHRpeGFjdF9vZmZzZXRfYnVmZmVycywKIAotCQkuc3luY19oYW5kbGVyID0g U1lOQ19IQU5ETEVSX01VTFRJWEFDVF9PRkZTRVQsCi0JCS5QYWdlUHJlY2VkZXMgPSBNdWx0 aVhhY3RPZmZzZXRQYWdlUHJlY2VkZXMsCi0JCS5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yID0g TXVsdGlYYWN0T2Zmc2V0SW9FcnJvckRldGFpbCwKKwkJCQkJIC5zeW5jX2hhbmRsZXIgPSBT WU5DX0hBTkRMRVJfTVVMVElYQUNUX09GRlNFVCwKKwkJCQkJIC5QYWdlUHJlY2VkZXMgPSBN dWx0aVhhY3RPZmZzZXRQYWdlUHJlY2VkZXMsCisJCQkJCSAuZXJyZGV0YWlsX2Zvcl9pb19l cnJvciA9IE11bHRpWGFjdE9mZnNldElvRXJyb3JEZXRhaWwsCiAKLQkJLmJ1ZmZlcl90cmFu Y2hlX2lkID0gTFdUUkFOQ0hFX01VTFRJWEFDVE9GRlNFVF9CVUZGRVIsCi0JCS5iYW5rX3Ry YW5jaGVfaWQgPSBMV1RSQU5DSEVfTVVMVElYQUNUT0ZGU0VUX1NMUlUsCisJCQkJCSAuYnVm ZmVyX3RyYW5jaGVfaWQgPSBMV1RSQU5DSEVfTVVMVElYQUNUT0ZGU0VUX0JVRkZFUiwKKwkJ CQkJIC5iYW5rX3RyYW5jaGVfaWQgPSBMV1RSQU5DSEVfTVVMVElYQUNUT0ZGU0VUX1NMUlUs CiAJCSk7CiAKIAlTaW1wbGVMcnVSZXF1ZXN0KCZNdWx0aVhhY3RNZW1iZXJTbHJ1RGVzYywK LQkJLm5hbWUgPSAibXVsdGl4YWN0X21lbWJlciIsCi0JCS5EaXIgPSAicGdfbXVsdGl4YWN0 L21lbWJlcnMiLAotCQkubG9uZ19zZWdtZW50X25hbWVzID0gdHJ1ZSwKKwkJCQkJIC5uYW1l ID0gIm11bHRpeGFjdF9tZW1iZXIiLAorCQkJCQkgLkRpciA9ICJwZ19tdWx0aXhhY3QvbWVt YmVycyIsCisJCQkJCSAubG9uZ19zZWdtZW50X25hbWVzID0gdHJ1ZSwKIAotCQkubnNsb3Rz ID0gbXVsdGl4YWN0X21lbWJlcl9idWZmZXJzLAorCQkJCQkgLm5zbG90cyA9IG11bHRpeGFj dF9tZW1iZXJfYnVmZmVycywKIAotCQkuc3luY19oYW5kbGVyID0gU1lOQ19IQU5ETEVSX01V TFRJWEFDVF9NRU1CRVIsCi0JCS5QYWdlUHJlY2VkZXMgPSBNdWx0aVhhY3RNZW1iZXJQYWdl UHJlY2VkZXMsCi0JCS5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yID0gTXVsdGlYYWN0TWVtYmVy SW9FcnJvckRldGFpbCwKKwkJCQkJIC5zeW5jX2hhbmRsZXIgPSBTWU5DX0hBTkRMRVJfTVVM VElYQUNUX01FTUJFUiwKKwkJCQkJIC5QYWdlUHJlY2VkZXMgPSBNdWx0aVhhY3RNZW1iZXJQ YWdlUHJlY2VkZXMsCisJCQkJCSAuZXJyZGV0YWlsX2Zvcl9pb19lcnJvciA9IE11bHRpWGFj dE1lbWJlcklvRXJyb3JEZXRhaWwsCiAKLQkJLmJ1ZmZlcl90cmFuY2hlX2lkID0gTFdUUkFO Q0hFX01VTFRJWEFDVE1FTUJFUl9CVUZGRVIsCi0JCS5iYW5rX3RyYW5jaGVfaWQgPSBMV1RS QU5DSEVfTVVMVElYQUNUTUVNQkVSX1NMUlUsCisJCQkJCSAuYnVmZmVyX3RyYW5jaGVfaWQg PSBMV1RSQU5DSEVfTVVMVElYQUNUTUVNQkVSX0JVRkZFUiwKKwkJCQkJIC5iYW5rX3RyYW5j aGVfaWQgPSBMV1RSQU5DSEVfTVVMVElYQUNUTUVNQkVSX1NMUlUsCiAJCSk7CiAKIAkvKgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc2xydS5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0vc2xydS5jCmluZGV4IDNmZTYwYzU4MDRiLi42ZDlkZGE2 YjI5YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc2xydS5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3NscnUuYwpAQCAtMjQyLDkgKzI0Miw5 IEBAIFNpbXBsZUxydUF1dG90dW5lQnVmZmVycyhpbnQgZGl2aXNvciwgaW50IG1heCkKICAq IFJlZ2lzdGVyIGEgc2ltcGxlIExSVSBjYWNoZSBpbiBzaGFyZWQgbWVtb3J5LgogICovCiB2 b2lkCi1TaW1wbGVMcnVSZXF1ZXN0V2l0aE9wdHMoU2xydURlc2MgKmRlc2MsIGNvbnN0IFNs cnVPcHRzICpvcHRpb25zKQorU2ltcGxlTHJ1UmVxdWVzdFdpdGhPcHRzKFNscnVEZXNjICpk ZXNjLCBjb25zdCBTbHJ1T3B0cyAqIG9wdGlvbnMpCiB7Ci0JU2xydU9wdHMgKm9wdGlvbnNf Y29weTsKKwlTbHJ1T3B0cyAgICpvcHRpb25zX2NvcHk7CiAKIAlBc3NlcnQob3B0aW9ucy0+ bmFtZSAhPSBOVUxMKTsKIAlBc3NlcnQob3B0aW9ucy0+bnNsb3RzID4gMCk7CkBAIC0yNjUs NyArMjY1LDcgQEAgU2ltcGxlTHJ1UmVxdWVzdFdpdGhPcHRzKFNscnVEZXNjICpkZXNjLCBj b25zdCBTbHJ1T3B0cyAqb3B0aW9ucykKIHZvaWQKIHNobWVtX3NscnVfaW5pdChTaG1lbVN0 cnVjdERlc2MgKmJhc2VfZGVzYywgU2htZW1TdHJ1Y3RPcHRzICpiYXNlX29wdGlvbnMpCiB7 Ci0JU2xydU9wdHMgKm9wdGlvbnMgPSAoU2xydU9wdHMgKikgYmFzZV9vcHRpb25zOworCVNs cnVPcHRzICAgKm9wdGlvbnMgPSAoU2xydU9wdHMgKikgYmFzZV9vcHRpb25zOwogCVNscnVE ZXNjICAgKmRlc2MgPSAoU2xydURlc2MgKikgYmFzZV9kZXNjOwogCWNoYXIJCW5hbWVidWZb TkFNRURBVEFMRU5dOwogCVNscnVTaGFyZWQJc2hhcmVkOwpAQCAtMzU2LDcgKzM1Niw3IEBA IHNobWVtX3NscnVfaW5pdChTaG1lbVN0cnVjdERlc2MgKmJhc2VfZGVzYywgU2htZW1TdHJ1 Y3RPcHRzICpiYXNlX29wdGlvbnMpCiB2b2lkCiBzaG1lbV9zbHJ1X2F0dGFjaChTaG1lbVN0 cnVjdERlc2MgKmJhc2VfZGVzYywgU2htZW1TdHJ1Y3RPcHRzICpiYXNlX29wdGlvbnMpCiB7 Ci0JU2xydU9wdHMgKm9wdGlvbnMgPSAoU2xydU9wdHMgKikgYmFzZV9vcHRpb25zOworCVNs cnVPcHRzICAgKm9wdGlvbnMgPSAoU2xydU9wdHMgKikgYmFzZV9vcHRpb25zOwogCVNscnVE ZXNjICAgKmRlc2MgPSAoU2xydURlc2MgKikgYmFzZV9kZXNjOwogCWludAkJCW5zbG90cyA9 IG9wdGlvbnMtPm5zbG90czsKIAlpbnQJCQluYmFua3MgPSBuc2xvdHMgLyBTTFJVX0JBTktf U0laRTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3N1YnRyYW5z LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0cmFucy5jCmluZGV4IGNhMjcz ZmI0NjgwLi41ZjY4YzNmMGNjYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vc3VidHJhbnMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0 cmFucy5jCkBAIC0yNDQsMTkgKzI0NCwxOSBAQCBTVUJUUkFOU1NobWVtUmVxdWVzdCh2b2lk ICphcmcpCiAJQXNzZXJ0KHN1YnRyYW5zYWN0aW9uX2J1ZmZlcnMgIT0gMCk7CiAKIAlTaW1w bGVMcnVSZXF1ZXN0KCZTdWJUcmFuc1NscnVEZXNjLAotCQkubmFtZSA9ICJzdWJ0cmFuc2Fj dGlvbiIsCi0JCS5EaXIgPSAicGdfc3VidHJhbnMiLAotCQkubG9uZ19zZWdtZW50X25hbWVz ID0gZmFsc2UsCisJCQkJCSAubmFtZSA9ICJzdWJ0cmFuc2FjdGlvbiIsCisJCQkJCSAuRGly ID0gInBnX3N1YnRyYW5zIiwKKwkJCQkJIC5sb25nX3NlZ21lbnRfbmFtZXMgPSBmYWxzZSwK IAotCQkubnNsb3RzID0gU1VCVFJBTlNTaG1lbUJ1ZmZlcnMoKSwKKwkJCQkJIC5uc2xvdHMg PSBTVUJUUkFOU1NobWVtQnVmZmVycygpLAogCi0JCS5zeW5jX2hhbmRsZXIgPSBTWU5DX0hB TkRMRVJfTk9ORSwKLQkJLlBhZ2VQcmVjZWRlcyA9IFN1YlRyYW5zUGFnZVByZWNlZGVzLAot CQkuZXJyZGV0YWlsX2Zvcl9pb19lcnJvciA9IHN1YnRyYW5zX2VycmRldGFpbF9mb3JfaW9f ZXJyb3IsCisJCQkJCSAuc3luY19oYW5kbGVyID0gU1lOQ19IQU5ETEVSX05PTkUsCisJCQkJ CSAuUGFnZVByZWNlZGVzID0gU3ViVHJhbnNQYWdlUHJlY2VkZXMsCisJCQkJCSAuZXJyZGV0 YWlsX2Zvcl9pb19lcnJvciA9IHN1YnRyYW5zX2VycmRldGFpbF9mb3JfaW9fZXJyb3IsCiAK LQkJLmJ1ZmZlcl90cmFuY2hlX2lkID0gTFdUUkFOQ0hFX1NVQlRSQU5TX0JVRkZFUiwKLQkJ LmJhbmtfdHJhbmNoZV9pZCA9IExXVFJBTkNIRV9TVUJUUkFOU19TTFJVLAotCSk7CisJCQkJ CSAuYnVmZmVyX3RyYW5jaGVfaWQgPSBMV1RSQU5DSEVfU1VCVFJBTlNfQlVGRkVSLAorCQkJ CQkgLmJhbmtfdHJhbmNoZV9pZCA9IExXVFJBTkNIRV9TVUJUUkFOU19TTFJVLAorCQkpOwog fQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5 bmMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKaW5kZXggOWJlOThhZmMxZDku LmU0ZTJhZTJmNmZmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKQEAgLTgwNCwyNyArODA0LDI3 IEBAIEFzeW5jU2htZW1SZXF1ZXN0KHZvaWQgKmFyZykKIAlzaXplID0gYWRkX3NpemUoc2l6 ZSwgb2Zmc2V0b2YoQXN5bmNRdWV1ZUNvbnRyb2wsIGJhY2tlbmQpKTsKIAogCVNobWVtUmVx dWVzdFN0cnVjdCgmQXN5bmNRdWV1ZUNvbnRyb2xTaG1lbURlc2MsCi0JCS5uYW1lID0gIkFz eW5jIFF1ZXVlIENvbnRyb2wiLAotCQkuc2l6ZSA9IHNpemUsCi0JCS5wdHIgPSAodm9pZCAq KikgJmFzeW5jUXVldWVDb250cm9sLAotCSk7CisJCQkJCSAgIC5uYW1lID0gIkFzeW5jIFF1 ZXVlIENvbnRyb2wiLAorCQkJCQkgICAuc2l6ZSA9IHNpemUsCisJCQkJCSAgIC5wdHIgPSAo dm9pZCAqKikgJmFzeW5jUXVldWVDb250cm9sLAorCQkpOwogCiAJU2ltcGxlTHJ1UmVxdWVz dCgmTm90aWZ5U2xydURlc2MsCi0JCS5uYW1lID0gIm5vdGlmeSIsCi0JCS5EaXIgPSAicGdf bm90aWZ5IiwKKwkJCQkJIC5uYW1lID0gIm5vdGlmeSIsCisJCQkJCSAuRGlyID0gInBnX25v dGlmeSIsCiAKLQkJLyogbG9uZyBzZWdtZW50IG5hbWVzIGFyZSB1c2VkIGluIG9yZGVyIHRv IGF2b2lkIHdyYXBhcm91bmQgKi8KLQkJLmxvbmdfc2VnbWVudF9uYW1lcyA9IHRydWUsCisJ LyogbG9uZyBzZWdtZW50IG5hbWVzIGFyZSB1c2VkIGluIG9yZGVyIHRvIGF2b2lkIHdyYXBh cm91bmQgKi8KKwkJCQkJIC5sb25nX3NlZ21lbnRfbmFtZXMgPSB0cnVlLAogCi0JCS5uc2xv dHMgPSBub3RpZnlfYnVmZmVycywKKwkJCQkJIC5uc2xvdHMgPSBub3RpZnlfYnVmZmVycywK IAotCQkuc3luY19oYW5kbGVyID0gU1lOQ19IQU5ETEVSX05PTkUsCi0JCS5QYWdlUHJlY2Vk ZXMgPSBhc3luY1F1ZXVlUGFnZVByZWNlZGVzLAotCQkuZXJyZGV0YWlsX2Zvcl9pb19lcnJv ciA9IGFzeW5jUXVldWVFcnJkZXRhaWxGb3JJb0Vycm9yLAorCQkJCQkgLnN5bmNfaGFuZGxl ciA9IFNZTkNfSEFORExFUl9OT05FLAorCQkJCQkgLlBhZ2VQcmVjZWRlcyA9IGFzeW5jUXVl dWVQYWdlUHJlY2VkZXMsCisJCQkJCSAuZXJyZGV0YWlsX2Zvcl9pb19lcnJvciA9IGFzeW5j UXVldWVFcnJkZXRhaWxGb3JJb0Vycm9yLAogCi0JCS5idWZmZXJfdHJhbmNoZV9pZCA9IExX VFJBTkNIRV9OT1RJRllfQlVGRkVSLAotCQkuYmFua190cmFuY2hlX2lkID0gTFdUUkFOQ0hF X05PVElGWV9TTFJVLAotCSk7CisJCQkJCSAuYnVmZmVyX3RyYW5jaGVfaWQgPSBMV1RSQU5D SEVfTk9USUZZX0JVRkZFUiwKKwkJCQkJIC5iYW5rX3RyYW5jaGVfaWQgPSBMV1RSQU5DSEVf Tk9USUZZX1NMUlUsCisJCSk7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9zdG9yYWdlL2Fpby9haW9faW5pdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vYWlvX2luaXQuYwppbmRleCBkM2M2OGQ4YjA0Yy4uMjZjYjgyNDAzNWQgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpb19pbml0LmMKKysrIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9haW8vYWlvX2luaXQuYwpAQCAtMjMsMTYgKzIzLDI0IEBACiAjaW5jbHVk ZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRl ICJzdG9yYWdlL3NobWVtLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAj aW5jbHVkZSAidXRpbHMvZ3VjLmgiCiAKIAorc3RhdGljIHZvaWQgQWlvU2htZW1SZXF1ZXN0 KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBBaW9TaG1lbUluaXQodm9pZCAqYXJnKTsKK3N0 YXRpYyB2b2lkIEFpb1NobWVtQXR0YWNoKHZvaWQgKmFyZyk7CiAKLXN0YXRpYyBTaXplCi1B aW9DdGxTaG1lbVNpemUodm9pZCkKLXsKLQkvKiBwZ2Fpb19jdGwgaXRzZWxmICovCi0JcmV0 dXJuIHNpemVvZihQZ0Fpb0N0bCk7Ci19Citjb25zdCBTaG1lbUNhbGxiYWNrcyBBaW9TaG1l bUNhbGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9IEFpb1NobWVtUmVxdWVzdCwKKwkuaW5p dF9mbiA9IEFpb1NobWVtSW5pdCwKKwkuYXR0YWNoX2ZuID0gQWlvU2htZW1BdHRhY2gsCit9 OworCitzdGF0aWMgUGdBaW9CYWNrZW5kICpBaW9CYWNrZW5kU2htZW1QdHI7CitzdGF0aWMg UGdBaW9IYW5kbGUgKkFpb0hhbmRsZVNobWVtUHRyOworc3RhdGljIHN0cnVjdCBpb3ZlYyAq QWlvSGFuZGxlSU9WU2htZW1QdHI7CitzdGF0aWMgdWludDY0ICpBaW9IYW5kbGVEYXRhU2ht ZW1QdHI7CiAKIHN0YXRpYyB1aW50MzIKIEFpb1Byb2NzKHZvaWQpCkBAIC0xMDksMTAgKzEx NywxOSBAQCBBaW9DaG9vc2VNYXhDb25jdXJyZW5jeSh2b2lkKQogCXJldHVybiBNaW4obWF4 X3Byb3BvcnRpb25hbF9waW5zLCA2NCk7CiB9CiAKLVNpemUKLUFpb1NobWVtU2l6ZSh2b2lk KQorLyoKKyAqIFJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkgYXJlYSBmb3IgQUlPIHN1YnN5c3Rl bS4KKyAqLworc3RhdGljIHZvaWQKK0Fpb1NobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7Ci0J U2l6ZQkJc3ogPSAwOworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgQWlvQ3RsU2htZW1EZXNj OworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgQWlvQmFja2VuZFNobWVtRGVzYzsKKwlzdGF0 aWMgU2htZW1TdHJ1Y3REZXNjIEFpb0hhbmRsZVNobWVtRGVzYzsKKwlzdGF0aWMgU2htZW1T dHJ1Y3REZXNjIEFpb0hhbmRsZUlPVlNobWVtRGVzYzsKKwlzdGF0aWMgU2htZW1TdHJ1Y3RE ZXNjIEFpb0hhbmRsZURhdGFTaG1lbURlc2M7CisJCisJLyogUmVzb2x2ZSBpb19tYXhfY29u Y3VycmVuY3kgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8KIAogCS8qCiAJICogV2UgcHJlZmVy IHRvIHJlcG9ydCB0aGlzIHZhbHVlJ3Mgc291cmNlIGFzIFBHQ19TX0RZTkFNSUNfREVGQVVM VC4KQEAgLTEzMiw0OCArMTQ5LDU3IEBAIEFpb1NobWVtU2l6ZSh2b2lkKQogCQkJCQkJCVBH Q19TX09WRVJSSURFKTsKIAl9CiAKLQlzeiA9IGFkZF9zaXplKHN6LCBBaW9DdGxTaG1lbVNp emUoKSk7Ci0Jc3ogPSBhZGRfc2l6ZShzeiwgQWlvQmFja2VuZFNobWVtU2l6ZSgpKTsKLQlz eiA9IGFkZF9zaXplKHN6LCBBaW9IYW5kbGVTaG1lbVNpemUoKSk7Ci0Jc3ogPSBhZGRfc2l6 ZShzeiwgQWlvSGFuZGxlSU9WU2htZW1TaXplKCkpOwotCXN6ID0gYWRkX3NpemUoc3osIEFp b0hhbmRsZURhdGFTaG1lbVNpemUoKSk7Ci0KLQkvKiBSZXNlcnZlIHNwYWNlIGZvciBtZXRo b2Qgc3BlY2lmaWMgcmVzb3VyY2VzLiAqLwotCWlmIChwZ2Fpb19tZXRob2Rfb3BzLT5zaG1l bV9zaXplKQotCQlzeiA9IGFkZF9zaXplKHN6LCBwZ2Fpb19tZXRob2Rfb3BzLT5zaG1lbV9z aXplKCkpOwotCi0JcmV0dXJuIHN6OworCVNobWVtUmVxdWVzdFN0cnVjdCgmQWlvQ3RsU2ht ZW1EZXNjLAorCQkJCQkgICAubmFtZSA9ICJBaW9DdGwiLAorCQkJCQkgICAuc2l6ZSA9IHNp emVvZihQZ0Fpb0N0bCksCisJCQkJCSAgIC5wdHIgPSAodm9pZCAqKikgJnBnYWlvX2N0bCwK KwkJCQkJICAgKTsKKworCVNobWVtUmVxdWVzdFN0cnVjdCgmQWlvQmFja2VuZFNobWVtRGVz YywKKwkJCQkJICAgLm5hbWUgPSAiQWlvQmFja2VuZCIsCisJCQkJCSAgIC5zaXplID0gQWlv QmFja2VuZFNobWVtU2l6ZSgpLAorCQkJCQkgICAucHRyID0gKHZvaWQgKiopICZBaW9CYWNr ZW5kU2htZW1QdHIsCisJCQkJCSAgICk7CisKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJkFpb0hh bmRsZVNobWVtRGVzYywKKwkJCQkJICAgLm5hbWUgPSAiQWlvSGFuZGxlIiwKKwkJCQkJICAg LnNpemUgPSBBaW9IYW5kbGVTaG1lbVNpemUoKSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoq KSAmQWlvSGFuZGxlU2htZW1QdHIsCisJCQkJCSAgICk7CisKKwlTaG1lbVJlcXVlc3RTdHJ1 Y3QoJkFpb0hhbmRsZUlPVlNobWVtRGVzYywKKwkJCQkJICAgLm5hbWUgPSAiQWlvSGFuZGxl SU9WIiwKKwkJCQkJICAgLnNpemUgPSBBaW9IYW5kbGVJT1ZTaG1lbVNpemUoKSwKKwkJCQkJ ICAgLnB0ciA9ICh2b2lkICoqKSAmQWlvSGFuZGxlSU9WU2htZW1QdHIsCisJCQkJCSAgICk7 CisKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJkFpb0hhbmRsZURhdGFTaG1lbURlc2MsCisJCQkJ CSAgIC5uYW1lID0gIkFpb0hhbmRsZURhdGEiLAorCQkJCQkgICAuc2l6ZSA9IEFpb0hhbmRs ZURhdGFTaG1lbVNpemUoKSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmQWlvSGFuZGxl RGF0YVNobWVtUHRyLAorCQkpOworCisJaWYgKHBnYWlvX21ldGhvZF9vcHMtPnNobWVtX2Nh bGxiYWNrcy5yZXF1ZXN0X2ZuKQorCQlwZ2Fpb19tZXRob2Rfb3BzLT5zaG1lbV9jYWxsYmFj a3MucmVxdWVzdF9mbihwZ2Fpb19tZXRob2Rfb3BzLT5zaG1lbV9jYWxsYmFja3MucmVxdWVz dF9mbl9hcmcpOwogfQogCi12b2lkCi1BaW9TaG1lbUluaXQodm9pZCkKKy8qCisgKiBJbml0 aWFsaXplIEFJTyBzaGFyZWQgbWVtb3J5IGR1cmluZyBwb3N0bWFzdGVyIHN0YXJ0dXAuCisg Ki8KK3N0YXRpYyB2b2lkCitBaW9TaG1lbUluaXQodm9pZCAqYXJnKQogewotCWJvb2wJCWZv dW5kOwogCXVpbnQzMgkJaW9faGFuZGxlX29mZiA9IDA7CiAJdWludDMyCQlpb3ZlY19vZmYg PSAwOwogCXVpbnQzMgkJcGVyX2JhY2tlbmRfaW92ZWNzID0gaW9fbWF4X2NvbmN1cnJlbmN5 ICogaW9fbWF4X2NvbWJpbmVfbGltaXQ7CiAKLQlwZ2Fpb19jdGwgPSAoUGdBaW9DdGwgKikK LQkJU2htZW1Jbml0U3RydWN0KCJBaW9DdGwiLCBBaW9DdGxTaG1lbVNpemUoKSwgJmZvdW5k KTsKLQotCWlmIChmb3VuZCkKLQkJZ290byBvdXQ7Ci0KLQltZW1zZXQocGdhaW9fY3RsLCAw LCBBaW9DdGxTaG1lbVNpemUoKSk7Ci0KIAlwZ2Fpb19jdGwtPmlvX2hhbmRsZV9jb3VudCA9 IEFpb1Byb2NzKCkgKiBpb19tYXhfY29uY3VycmVuY3k7CiAJcGdhaW9fY3RsLT5pb3ZlY19j b3VudCA9IEFpb1Byb2NzKCkgKiBwZXJfYmFja2VuZF9pb3ZlY3M7CiAKLQlwZ2Fpb19jdGwt PmJhY2tlbmRfc3RhdGUgPSAoUGdBaW9CYWNrZW5kICopCi0JCVNobWVtSW5pdFN0cnVjdCgi QWlvQmFja2VuZCIsIEFpb0JhY2tlbmRTaG1lbVNpemUoKSwgJmZvdW5kKTsKLQotCXBnYWlv X2N0bC0+aW9faGFuZGxlcyA9IChQZ0Fpb0hhbmRsZSAqKQotCQlTaG1lbUluaXRTdHJ1Y3Qo IkFpb0hhbmRsZSIsIEFpb0hhbmRsZVNobWVtU2l6ZSgpLCAmZm91bmQpOwotCi0JcGdhaW9f Y3RsLT5pb3ZlY3MgPSAoc3RydWN0IGlvdmVjICopCi0JCVNobWVtSW5pdFN0cnVjdCgiQWlv SGFuZGxlSU9WIiwgQWlvSGFuZGxlSU9WU2htZW1TaXplKCksICZmb3VuZCk7Ci0JcGdhaW9f Y3RsLT5oYW5kbGVfZGF0YSA9ICh1aW50NjQgKikKLQkJU2htZW1Jbml0U3RydWN0KCJBaW9I YW5kbGVEYXRhIiwgQWlvSGFuZGxlRGF0YVNobWVtU2l6ZSgpLCAmZm91bmQpOworCXBnYWlv X2N0bC0+YmFja2VuZF9zdGF0ZSA9IEFpb0JhY2tlbmRTaG1lbVB0cjsKKwlwZ2Fpb19jdGwt PmlvX2hhbmRsZXMgPSBBaW9IYW5kbGVTaG1lbVB0cjsKKwlwZ2Fpb19jdGwtPmlvdmVjcyA9 IEFpb0hhbmRsZUlPVlNobWVtUHRyOworCXBnYWlvX2N0bC0+aGFuZGxlX2RhdGEgPSBBaW9I YW5kbGVEYXRhU2htZW1QdHI7CiAKIAlmb3IgKGludCBwcm9jbm8gPSAwOyBwcm9jbm8gPCBB aW9Qcm9jcygpOyBwcm9jbm8rKykKIAl7CkBAIC0yMDgsMTAgKzIzNCwxNSBAQCBBaW9TaG1l bUluaXQodm9pZCkKIAkJfQogCX0KIAotb3V0OgotCS8qIEluaXRpYWxpemUgSU8gbWV0aG9k IHNwZWNpZmljIHJlc291cmNlcy4gKi8KLQlpZiAocGdhaW9fbWV0aG9kX29wcy0+c2htZW1f aW5pdCkKLQkJcGdhaW9fbWV0aG9kX29wcy0+c2htZW1faW5pdCghZm91bmQpOworCWlmIChw Z2Fpb19tZXRob2Rfb3BzLT5zaG1lbV9jYWxsYmFja3MuaW5pdF9mbikKKwkJcGdhaW9fbWV0 aG9kX29wcy0+c2htZW1fY2FsbGJhY2tzLmluaXRfZm4ocGdhaW9fbWV0aG9kX29wcy0+c2ht ZW1fY2FsbGJhY2tzLmluaXRfZm5fYXJnKTsKK30KKworc3RhdGljIHZvaWQKK0Fpb1NobWVt QXR0YWNoKHZvaWQgKmFyZykKK3sKKwlpZiAocGdhaW9fbWV0aG9kX29wcy0+c2htZW1fY2Fs bGJhY2tzLmF0dGFjaF9mbikKKwkJcGdhaW9fbWV0aG9kX29wcy0+c2htZW1fY2FsbGJhY2tz LmF0dGFjaF9mbihwZ2Fpb19tZXRob2Rfb3BzLT5zaG1lbV9jYWxsYmFja3MuYXR0YWNoX2Zu X2FyZyk7CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlv L21ldGhvZF9pb191cmluZy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX2lv X3VyaW5nLmMKaW5kZXggMzk5ODRkZjMxYjQuLmZiNzVhMjA4YjY1IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2RfaW9fdXJpbmcuYworKysgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2Fpby9tZXRob2RfaW9fdXJpbmcuYwpAQCAtNDksOCArNDksOCBAQAog CiAKIC8qIEVudHJ5IHBvaW50cyBmb3IgSW9NZXRob2RPcHMuICovCi1zdGF0aWMgc2l6ZV90 IHBnYWlvX3VyaW5nX3NobWVtX3NpemUodm9pZCk7Ci1zdGF0aWMgdm9pZCBwZ2Fpb191cmlu Z19zaG1lbV9pbml0KGJvb2wgZmlyc3RfdGltZSk7CitzdGF0aWMgdm9pZCBwZ2Fpb191cmlu Z19zaG1lbV9yZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBwZ2Fpb191cmluZ19z aG1lbV9pbml0KHZvaWQgKmFyZyk7CiBzdGF0aWMgdm9pZCBwZ2Fpb191cmluZ19pbml0X2Jh Y2tlbmQodm9pZCk7CiBzdGF0aWMgaW50CXBnYWlvX3VyaW5nX3N1Ym1pdCh1aW50MTYgbnVt X3N0YWdlZF9pb3MsIFBnQWlvSGFuZGxlICoqc3RhZ2VkX2lvcyk7CiBzdGF0aWMgdm9pZCBw Z2Fpb191cmluZ193YWl0X29uZShQZ0Fpb0hhbmRsZSAqaW9oLCB1aW50NjQgcmVmX2dlbmVy YXRpb24pOwpAQCAtNTksNyArNTksNiBAQCBzdGF0aWMgdm9pZCBwZ2Fpb191cmluZ19jaGVj a19vbmUoUGdBaW9IYW5kbGUgKmlvaCwgdWludDY0IHJlZl9nZW5lcmF0aW9uKTsKIC8qIGhl bHBlciBmdW5jdGlvbnMgKi8KIHN0YXRpYyB2b2lkIHBnYWlvX3VyaW5nX3NxX2Zyb21faW8o UGdBaW9IYW5kbGUgKmlvaCwgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKTsKIAotCiBjb25z dCBJb01ldGhvZE9wcyBwZ2Fpb191cmluZ19vcHMgPSB7CiAJLyoKIAkgKiBXaGlsZSBpb191 cmluZyBtb3N0bHkgaXMgT0sgd2l0aCBGRHMgZ2V0dGluZyBjbG9zZWQgd2hpbGUgdGhlIElP IGlzIGluCkBAIC03MCw4ICs2OSw4IEBAIGNvbnN0IElvTWV0aG9kT3BzIHBnYWlvX3VyaW5n X29wcyA9IHsKIAkgKi8KIAkud2FpdF9vbl9mZF9iZWZvcmVfY2xvc2UgPSB0cnVlLAogCi0J LnNobWVtX3NpemUgPSBwZ2Fpb191cmluZ19zaG1lbV9zaXplLAotCS5zaG1lbV9pbml0ID0g cGdhaW9fdXJpbmdfc2htZW1faW5pdCwKKwkuc2htZW1fY2FsbGJhY2tzLnJlcXVlc3RfZm4g PSBwZ2Fpb191cmluZ19zaG1lbV9yZXF1ZXN0LAorCS5zaG1lbV9jYWxsYmFja3MuaW5pdF9m biA9IHBnYWlvX3VyaW5nX3NobWVtX2luaXQsCiAJLmluaXRfYmFja2VuZCA9IHBnYWlvX3Vy aW5nX2luaXRfYmFja2VuZCwKIAogCS5zdWJtaXQgPSBwZ2Fpb191cmluZ19zdWJtaXQsCkBA IC0yNjcsMjMgKzI2NiwzNCBAQCBwZ2Fpb191cmluZ19zaG1lbV9zaXplKHZvaWQpCiB7CiAJ c2l6ZV90CQlzejsKIAorCXN6ID0gcGdhaW9fdXJpbmdfY29udGV4dF9zaG1lbV9zaXplKCk7 CisJc3ogPSBhZGRfc2l6ZShzeiwgcGdhaW9fdXJpbmdfcmluZ19zaG1lbV9zaXplKCkpOwor CisJcmV0dXJuIHN6OworfQorCitzdGF0aWMgdm9pZAorcGdhaW9fdXJpbmdfc2htZW1fcmVx dWVzdCh2b2lkICphcmcpCit7CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBBaW9VcmluZ1No bWVtRGVzYyA9IHsKKwkJLm5hbWUgPSAiQWlvVXJpbmdDb250ZXh0IiwKKwkJLnB0ciA9ICh2 b2lkICoqKSAmcGdhaW9fdXJpbmdfY29udGV4dHMsCisJfTsKKwogCS8qCiAJICogS2VybmVs IGFuZCBsaWJ1cmluZyBzdXBwb3J0IGZvciB2YXJpb3VzIGZlYXR1cmVzIGluZmx1ZW5jZXMg aG93IG11Y2gKIAkgKiBzaG1lbSB3ZSBuZWVkLCBwZXJmb3JtIHRoZSBuZWNlc3NhcnkgY2hl Y2tzLgogCSAqLwogCXBnYWlvX3VyaW5nX2NoZWNrX2NhcGFiaWxpdGllcygpOwogCi0Jc3og PSBwZ2Fpb191cmluZ19jb250ZXh0X3NobWVtX3NpemUoKTsKLQlzeiA9IGFkZF9zaXplKHN6 LCBwZ2Fpb191cmluZ19yaW5nX3NobWVtX3NpemUoKSk7Ci0KLQlyZXR1cm4gc3o7CisJQWlv VXJpbmdTaG1lbURlc2Muc2l6ZSA9IHBnYWlvX3VyaW5nX3NobWVtX3NpemUoKTsKKwlTaG1l bVJlcXVlc3RTdHJ1Y3QoJkFpb1VyaW5nU2htZW1EZXNjKTsKIH0KIAogc3RhdGljIHZvaWQK LXBnYWlvX3VyaW5nX3NobWVtX2luaXQoYm9vbCBmaXJzdF90aW1lKQorcGdhaW9fdXJpbmdf c2htZW1faW5pdCh2b2lkICphcmcpCiB7CiAJaW50CQkJVG90YWxQcm9jcyA9IHBnYWlvX3Vy aW5nX3Byb2NzKCk7Ci0JYm9vbAkJZm91bmQ7CiAJY2hhcgkgICAqc2htZW07CiAJc2l6ZV90 CQlyaW5nX21lbV9yZW1haW4gPSAwOwogCWNoYXIJICAgKnJpbmdfbWVtX25leHQgPSAwOwpA QCAtMjkxLDEzICszMDEsMTEgQEAgcGdhaW9fdXJpbmdfc2htZW1faW5pdChib29sIGZpcnN0 X3RpbWUpCiAJLyoKIAkgKiBXZSBhbGxvY2F0ZSBtZW1vcnkgZm9yIGFsbCBQZ0Fpb1VyaW5n Q29udGV4dCBpbnN0YW5jZXMgYW5kLCBpZgogCSAqIHN1cHBvcnRlZCwgdGhlIG1lbW9yeSBy ZXF1aXJlZCBmb3IgZWFjaCBvZiB0aGUgaW9fdXJpbmcgaW5zdGFuY2VzLCBpbgotCSAqIG9u ZSBTaG1lbUluaXRTdHJ1Y3QoKS4KKwkgKiBvbmUgY29tYmluZWQgYWxsb2NhdGlvbi4KKwkg KgorCSAqIHBnYWlvX3VyaW5nX2NvbnRleHRzIGlzIGFscmVhZHkgc2V0IHRvIHRoZSBiYXNl IG9mIHRoZSBhbGxvY2F0aW9uLgogCSAqLwotCXNobWVtID0gU2htZW1Jbml0U3RydWN0KCJB aW9VcmluZ0NvbnRleHQiLCBwZ2Fpb191cmluZ19zaG1lbV9zaXplKCksICZmb3VuZCk7Ci0J aWYgKGZvdW5kKQotCQlyZXR1cm47Ci0KLQlwZ2Fpb191cmluZ19jb250ZXh0cyA9IChQZ0Fp b1VyaW5nQ29udGV4dCAqKSBzaG1lbTsKKwlzaG1lbSA9IChjaGFyICopIHBnYWlvX3VyaW5n X2NvbnRleHRzOwogCXNobWVtICs9IHBnYWlvX3VyaW5nX2NvbnRleHRfc2htZW1fc2l6ZSgp OwogCiAJLyogaWYgc3VwcG9ydGVkLCBoYW5kbGUgbWVtb3J5IGFsaWdubWVudCAvIHNpemlu ZyBmb3IgaW9fdXJpbmcgbWVtb3J5ICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9y YWdlL2Fpby9tZXRob2Rfd29ya2VyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRo b2Rfd29ya2VyLmMKaW5kZXggZWZlMzhlOWYxMTMuLjgyYzhiMDk4YTllIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2Rfd29ya2VyLmMKKysrIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX3dvcmtlci5jCkBAIC00MSw2ICs0MSw3IEBACiAj aW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgog I2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25f cG9pbnQuaCIKICNpbmNsdWRlICJ1dGlscy9tZW1kZWJ1Zy5oIgpAQCAtNzMsMTYgKzc0LDIw IEBAIHR5cGVkZWYgc3RydWN0IFBnQWlvV29ya2VyQ29udHJvbAogfSBQZ0Fpb1dvcmtlckNv bnRyb2w7CiAKIAotc3RhdGljIHNpemVfdCBwZ2Fpb193b3JrZXJfc2htZW1fc2l6ZSh2b2lk KTsKLXN0YXRpYyB2b2lkIHBnYWlvX3dvcmtlcl9zaG1lbV9pbml0KGJvb2wgZmlyc3RfdGlt ZSk7CitzdGF0aWMgdm9pZCBwZ2Fpb193b3JrZXJfc2htZW1fcmVxdWVzdCh2b2lkICphcmcp Oworc3RhdGljIHZvaWQgcGdhaW9fd29ya2VyX3NobWVtX2luaXQodm9pZCAqYXJnKTsKK3N0 YXRpYyB2b2lkIHBnYWlvX3dvcmtlcl9zaG1lbV9hdHRhY2godm9pZCAqYXJnKTsKKworc3Rh dGljIFBnQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlICppb193b3JrZXJfc3VibWlzc2lvbl9x dWV1ZTsKIAogc3RhdGljIGJvb2wgcGdhaW9fd29ya2VyX25lZWRzX3N5bmNocm9ub3VzX2V4 ZWN1dGlvbihQZ0Fpb0hhbmRsZSAqaW9oKTsKIHN0YXRpYyBpbnQJcGdhaW9fd29ya2VyX3N1 Ym1pdCh1aW50MTYgbnVtX3N0YWdlZF9pb3MsIFBnQWlvSGFuZGxlICoqc3RhZ2VkX2lvcyk7 CiAKIAogY29uc3QgSW9NZXRob2RPcHMgcGdhaW9fd29ya2VyX29wcyA9IHsKLQkuc2htZW1f c2l6ZSA9IHBnYWlvX3dvcmtlcl9zaG1lbV9zaXplLAotCS5zaG1lbV9pbml0ID0gcGdhaW9f d29ya2VyX3NobWVtX2luaXQsCisJLnNobWVtX2NhbGxiYWNrcy5yZXF1ZXN0X2ZuID0gcGdh aW9fd29ya2VyX3NobWVtX3JlcXVlc3QsCisJLnNobWVtX2NhbGxiYWNrcy5pbml0X2ZuID0g cGdhaW9fd29ya2VyX3NobWVtX2luaXQsCisJLnNobWVtX2NhbGxiYWNrcy5hdHRhY2hfZm4g PSBwZ2Fpb193b3JrZXJfc2htZW1fYXR0YWNoLAogCiAJLm5lZWRzX3N5bmNocm9ub3VzX2V4 ZWN1dGlvbiA9IHBnYWlvX3dvcmtlcl9uZWVkc19zeW5jaHJvbm91c19leGVjdXRpb24sCiAJ LnN1Ym1pdCA9IHBnYWlvX3dvcmtlcl9zdWJtaXQsCkBAIC05NSw3ICsxMDAsNiBAQCBpbnQJ CQlpb193b3JrZXJzID0gMzsKIAogc3RhdGljIGludAlpb193b3JrZXJfcXVldWVfc2l6ZSA9 IDY0Owogc3RhdGljIGludAlNeUlvV29ya2VySWQ7Ci1zdGF0aWMgUGdBaW9Xb3JrZXJTdWJt aXNzaW9uUXVldWUgKmlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlOwogc3RhdGljIFBnQWlv V29ya2VyQ29udHJvbCAqaW9fd29ya2VyX2NvbnRyb2w7CiAKIApAQCAtMTE2LDUwICsxMjAs NjAgQEAgcGdhaW9fd29ya2VyX2NvbnRyb2xfc2htZW1fc2l6ZSh2b2lkKQogCQlzaXplb2Yo UGdBaW9Xb3JrZXJTbG90KSAqIE1BWF9JT19XT1JLRVJTOwogfQogCi1zdGF0aWMgc2l6ZV90 Ci1wZ2Fpb193b3JrZXJfc2htZW1fc2l6ZSh2b2lkKQorLyoKKyAqIFNldCBzZWNvbmRhcnkg QUlPIHdvcmtlciBwb2ludGVyIGZyb20gdGhlIGNvbWJpbmVkIGFsbG9jYXRpb24uCisgKi8K K3N0YXRpYyB2b2lkCitwZ2Fpb193b3JrZXJfc2V0X3NlY29uZGFyeV9wdHIodm9pZCkKIHsK LQlzaXplX3QJCXN6OwogCWludAkJCXF1ZXVlX3NpemU7CisJU2l6ZQkJcXVldWVfc3ogPSBw Z2Fpb193b3JrZXJfcXVldWVfc2htZW1fc2l6ZSgmcXVldWVfc2l6ZSk7CiAKLQlzeiA9IHBn YWlvX3dvcmtlcl9xdWV1ZV9zaG1lbV9zaXplKCZxdWV1ZV9zaXplKTsKLQlzeiA9IGFkZF9z aXplKHN6LCBwZ2Fpb193b3JrZXJfY29udHJvbF9zaG1lbV9zaXplKCkpOwotCi0JcmV0dXJu IHN6OworCWlvX3dvcmtlcl9jb250cm9sID0gKFBnQWlvV29ya2VyQ29udHJvbCAqKQorCQko KGNoYXIgKikgaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWUgKyBNQVhBTElHTihxdWV1ZV9z eikpOwogfQogCiBzdGF0aWMgdm9pZAotcGdhaW9fd29ya2VyX3NobWVtX2luaXQoYm9vbCBm aXJzdF90aW1lKQorcGdhaW9fd29ya2VyX3NobWVtX2luaXQodm9pZCAqYXJnKQogewotCWJv b2wJCWZvdW5kOwogCWludAkJCXF1ZXVlX3NpemU7CiAKLQlpb193b3JrZXJfc3VibWlzc2lv bl9xdWV1ZSA9Ci0JCVNobWVtSW5pdFN0cnVjdCgiQWlvV29ya2VyU3VibWlzc2lvblF1ZXVl IiwKLQkJCQkJCXBnYWlvX3dvcmtlcl9xdWV1ZV9zaG1lbV9zaXplKCZxdWV1ZV9zaXplKSwK LQkJCQkJCSZmb3VuZCk7Ci0JaWYgKCFmb3VuZCkKLQl7Ci0JCWlvX3dvcmtlcl9zdWJtaXNz aW9uX3F1ZXVlLT5zaXplID0gcXVldWVfc2l6ZTsKLQkJaW9fd29ya2VyX3N1Ym1pc3Npb25f cXVldWUtPmhlYWQgPSAwOwotCQlpb193b3JrZXJfc3VibWlzc2lvbl9xdWV1ZS0+dGFpbCA9 IDA7Ci0JfQorCXBnYWlvX3dvcmtlcl9xdWV1ZV9zaG1lbV9zaXplKCZxdWV1ZV9zaXplKTsK Kwlpb193b3JrZXJfc3VibWlzc2lvbl9xdWV1ZS0+c2l6ZSA9IHF1ZXVlX3NpemU7CisJaW9f d29ya2VyX3N1Ym1pc3Npb25fcXVldWUtPmhlYWQgPSAwOworCWlvX3dvcmtlcl9zdWJtaXNz aW9uX3F1ZXVlLT50YWlsID0gMDsKKworCXBnYWlvX3dvcmtlcl9zZXRfc2Vjb25kYXJ5X3B0 cigpOwogCi0JaW9fd29ya2VyX2NvbnRyb2wgPQotCQlTaG1lbUluaXRTdHJ1Y3QoIkFpb1dv cmtlckNvbnRyb2wiLAotCQkJCQkJcGdhaW9fd29ya2VyX2NvbnRyb2xfc2htZW1fc2l6ZSgp LAotCQkJCQkJJmZvdW5kKTsKLQlpZiAoIWZvdW5kKQorCWlvX3dvcmtlcl9jb250cm9sLT5p ZGxlX3dvcmtlcl9tYXNrID0gMDsKKwlmb3IgKGludCBpID0gMDsgaSA8IE1BWF9JT19XT1JL RVJTOyArK2kpCiAJewotCQlpb193b3JrZXJfY29udHJvbC0+aWRsZV93b3JrZXJfbWFzayA9 IDA7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgTUFYX0lPX1dPUktFUlM7ICsraSkKLQkJewot CQkJaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbaV0ubGF0Y2ggPSBOVUxMOwotCQkJaW9f d29ya2VyX2NvbnRyb2wtPndvcmtlcnNbaV0uaW5fdXNlID0gZmFsc2U7Ci0JCX0KKwkJaW9f d29ya2VyX2NvbnRyb2wtPndvcmtlcnNbaV0ubGF0Y2ggPSBOVUxMOworCQlpb193b3JrZXJf Y29udHJvbC0+d29ya2Vyc1tpXS5pbl91c2UgPSBmYWxzZTsKIAl9CiB9CiAKK3N0YXRpYyB2 b2lkCitwZ2Fpb193b3JrZXJfc2htZW1fYXR0YWNoKHZvaWQgKmFyZykKK3sKKwlwZ2Fpb193 b3JrZXJfc2V0X3NlY29uZGFyeV9wdHIoKTsKK30KKworc3RhdGljIHZvaWQKK3BnYWlvX3dv cmtlcl9zaG1lbV9yZXF1ZXN0KHZvaWQgKmFyZykKK3sKKwlzdGF0aWMgU2htZW1TdHJ1Y3RE ZXNjIEFpb1dvcmtlclNobWVtRGVzYyA9IHsKKwkJLm5hbWUgPSAiQWlvV29ya2VyU3VibWlz c2lvblF1ZXVlIiwKKwkJLnB0ciA9ICh2b2lkICoqKSAmaW9fd29ya2VyX3N1Ym1pc3Npb25f cXVldWUsCisJfTsKKwlpbnQJCQlxdWV1ZV9zaXplOworCisJQWlvV29ya2VyU2htZW1EZXNj LnNpemUgPQorCQlNQVhBTElHTihwZ2Fpb193b3JrZXJfcXVldWVfc2htZW1fc2l6ZSgmcXVl dWVfc2l6ZSkpICsKKwkJcGdhaW9fd29ya2VyX2NvbnRyb2xfc2htZW1fc2l6ZSgpOworCVNo bWVtUmVxdWVzdFN0cnVjdCgmQWlvV29ya2VyU2htZW1EZXNjKTsKK30KKwogc3RhdGljIGlu dAogcGdhaW9fd29ya2VyX2Nob29zZV9pZGxlKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9p cGNpLmMKaW5kZXggMTkyNWQzZGVmZjkuLjI5MTZmY2Q5MzBlIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvaXBjaS5jCkBAIC0xMTgsNyArMTE4LDYgQEAgQ2FsY3VsYXRlU2htZW1TaXplKHZvaWQp CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFN5bmNTY2FuU2htZW1TaXplKCkpOwogCXNpemUg PSBhZGRfc2l6ZShzaXplLCBTdGF0c1NobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUo c2l6ZSwgU2xvdFN5bmNTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIEFp b1NobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgV2FpdExTTlNobWVtU2l6 ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgTG9naWNhbERlY29kaW5nQ3RsU2htZW1T aXplKCkpOwogCkBAIC0zMDUsNyArMzA0LDYgQEAgQ3JlYXRlT3JBdHRhY2hTaG1lbVN0cnVj dHModm9pZCkKIAlCVHJlZVNobWVtSW5pdCgpOwogCVN5bmNTY2FuU2htZW1Jbml0KCk7CiAJ U3RhdHNTaG1lbUluaXQoKTsKLQlBaW9TaG1lbUluaXQoKTsKIAlXYWl0TFNOU2htZW1Jbml0 KCk7CiAJTG9naWNhbERlY29kaW5nQ3RsU2htZW1Jbml0KCk7CiB9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2xtZ3IvcHJlZGljYXRlLmMKaW5kZXggNzE4ZTZiMDdmNWMuLmEwMTQzZTBlOWZlIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMKKysrIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jCkBAIC0xMTQ5LDE3ICsxMTQ5 LDE3IEBAIFByZWRpY2F0ZUxvY2tTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQogCSAqIHBlci1w cmVkaWNhdGUtbG9jay10YXJnZXQgaW5mb3JtYXRpb24uCiAJICovCiAJU2htZW1SZXF1ZXN0 SGFzaCgmUHJlZGljYXRlTG9ja1RhcmdldEhhc2hEZXNjLAotCQkubmFtZSA9ICJQUkVESUNB VEVMT0NLVEFSR0VUIGhhc2giLAorCQkJCQkgLm5hbWUgPSAiUFJFRElDQVRFTE9DS1RBUkdF VCBoYXNoIiwKIAotCQkuaW5pdF9zaXplID0gbWF4X3ByZWRpY2F0ZV9sb2NrX3RhcmdldHMs Ci0JCS5tYXhfc2l6ZSA9IG1heF9wcmVkaWNhdGVfbG9ja190YXJnZXRzLAorCQkJCQkgLmlu aXRfc2l6ZSA9IG1heF9wcmVkaWNhdGVfbG9ja190YXJnZXRzLAorCQkJCQkgLm1heF9zaXpl ID0gbWF4X3ByZWRpY2F0ZV9sb2NrX3RhcmdldHMsCiAKLQkJLnB0ciA9ICZQcmVkaWNhdGVM b2NrVGFyZ2V0SGFzaCwKLQkJLmhhc2hfaW5mby5rZXlzaXplID0gc2l6ZW9mKFBSRURJQ0FU RUxPQ0tUQVJHRVRUQUcpLAotCQkuaGFzaF9pbmZvLmVudHJ5c2l6ZSA9IHNpemVvZihQUkVE SUNBVEVMT0NLVEFSR0VUKSwKLQkJLmhhc2hfaW5mby5udW1fcGFydGl0aW9ucyA9IE5VTV9Q UkVESUNBVEVMT0NLX1BBUlRJVElPTlMsCi0JCS5oYXNoX2ZsYWdzID0gSEFTSF9FTEVNIHwg SEFTSF9CTE9CUyB8IEhBU0hfUEFSVElUSU9OIHwgSEFTSF9GSVhFRF9TSVpFLAotCSk7CisJ CQkJCSAucHRyID0gJlByZWRpY2F0ZUxvY2tUYXJnZXRIYXNoLAorCQkJCQkgLmhhc2hfaW5m by5rZXlzaXplID0gc2l6ZW9mKFBSRURJQ0FURUxPQ0tUQVJHRVRUQUcpLAorCQkJCQkgLmhh c2hfaW5mby5lbnRyeXNpemUgPSBzaXplb2YoUFJFRElDQVRFTE9DS1RBUkdFVCksCisJCQkJ CSAuaGFzaF9pbmZvLm51bV9wYXJ0aXRpb25zID0gTlVNX1BSRURJQ0FURUxPQ0tfUEFSVElU SU9OUywKKwkJCQkJIC5oYXNoX2ZsYWdzID0gSEFTSF9FTEVNIHwgSEFTSF9CTE9CUyB8IEhB U0hfUEFSVElUSU9OIHwgSEFTSF9GSVhFRF9TSVpFLAorCQkpOwogCiAJLyoKIAkgKiBBbGxv Y2F0ZSBoYXNoIHRhYmxlIGZvciBQUkVESUNBVEVMT0NLIHN0cnVjdHMuICBUaGlzIHN0b3Jl cyBwZXIKQEAgLTExNzAsMTcgKzExNzAsMTcgQEAgUHJlZGljYXRlTG9ja1NobWVtUmVxdWVz dCh2b2lkICphcmcpCiAJbWF4X3ByZWRpY2F0ZV9sb2NrcyA9IG1heF9wcmVkaWNhdGVfbG9j a190YXJnZXRzICogMjsKIAogCVNobWVtUmVxdWVzdEhhc2goJlByZWRpY2F0ZUxvY2tIYXNo RGVzYywKLQkJLm5hbWUgPSAiUFJFRElDQVRFTE9DSyBoYXNoIiwKKwkJCQkJIC5uYW1lID0g IlBSRURJQ0FURUxPQ0sgaGFzaCIsCiAKLQkJLmluaXRfc2l6ZSA9IG1heF9wcmVkaWNhdGVf bG9ja3MsCi0JCS5tYXhfc2l6ZSA9IG1heF9wcmVkaWNhdGVfbG9ja3MsCisJCQkJCSAuaW5p dF9zaXplID0gbWF4X3ByZWRpY2F0ZV9sb2NrcywKKwkJCQkJIC5tYXhfc2l6ZSA9IG1heF9w cmVkaWNhdGVfbG9ja3MsCiAKLQkJLnB0ciA9ICZQcmVkaWNhdGVMb2NrSGFzaCwKLQkJLmhh c2hfaW5mby5rZXlzaXplID0gc2l6ZW9mKFBSRURJQ0FURUxPQ0tUQUcpLAotCQkuaGFzaF9p bmZvLmVudHJ5c2l6ZSA9IHNpemVvZihQUkVESUNBVEVMT0NLKSwKLQkJLmhhc2hfaW5mby5o YXNoID0gcHJlZGljYXRlbG9ja19oYXNoLAotCQkuaGFzaF9pbmZvLm51bV9wYXJ0aXRpb25z ID0gTlVNX1BSRURJQ0FURUxPQ0tfUEFSVElUSU9OUywKLQkJLmhhc2hfZmxhZ3MgPSBIQVNI X0VMRU0gfCBIQVNIX0ZVTkNUSU9OIHwgSEFTSF9QQVJUSVRJT04gfCBIQVNIX0ZJWEVEX1NJ WkUsCisJCQkJCSAucHRyID0gJlByZWRpY2F0ZUxvY2tIYXNoLAorCQkJCQkgLmhhc2hfaW5m by5rZXlzaXplID0gc2l6ZW9mKFBSRURJQ0FURUxPQ0tUQUcpLAorCQkJCQkgLmhhc2hfaW5m by5lbnRyeXNpemUgPSBzaXplb2YoUFJFRElDQVRFTE9DSyksCisJCQkJCSAuaGFzaF9pbmZv Lmhhc2ggPSBwcmVkaWNhdGVsb2NrX2hhc2gsCisJCQkJCSAuaGFzaF9pbmZvLm51bV9wYXJ0 aXRpb25zID0gTlVNX1BSRURJQ0FURUxPQ0tfUEFSVElUSU9OUywKKwkJCQkJIC5oYXNoX2Zs YWdzID0gSEFTSF9FTEVNIHwgSEFTSF9GVU5DVElPTiB8IEhBU0hfUEFSVElUSU9OIHwgSEFT SF9GSVhFRF9TSVpFLAogCQkpOwogCiAJLyoKQEAgLTExOTgsMTEgKzExOTgsMTEgQEAgUHJl ZGljYXRlTG9ja1NobWVtUmVxdWVzdCh2b2lkICphcmcpCiAJICogcHJlZGljYXRlIGxvY2tp bmcuCiAJICovCiAJU2htZW1SZXF1ZXN0U3RydWN0KCZQcmVkWGFjdExpc3RTaG1lbURlc2Ms Ci0JCQkubmFtZSA9ICJQcmVkWGFjdExpc3QiLAotCQkJLnNpemUgPSBhZGRfc2l6ZShQcmVk WGFjdExpc3REYXRhU2l6ZSwKLQkJCQkJCQkgKG11bF9zaXplKChTaXplKSBtYXhfc2VyaWFs aXphYmxlX3hhY3RzLAotCQkJCQkJCQkJICAgc2l6ZW9mKFNFUklBTElaQUJMRVhBQ1QpKSkp LAotCQkJLnB0ciA9ICh2b2lkICoqKSAmUHJlZFhhY3QsCisJCQkJCSAgIC5uYW1lID0gIlBy ZWRYYWN0TGlzdCIsCisJCQkJCSAgIC5zaXplID0gYWRkX3NpemUoUHJlZFhhY3RMaXN0RGF0 YVNpemUsCisJCQkJCQkJCQkJKG11bF9zaXplKChTaXplKSBtYXhfc2VyaWFsaXphYmxlX3hh Y3RzLAorCQkJCQkJCQkJCQkJICBzaXplb2YoU0VSSUFMSVpBQkxFWEFDVCkpKSksCisJCQkJ CSAgIC5wdHIgPSAodm9pZCAqKikgJlByZWRYYWN0LAogCQkpOwogCiAJLyoKQEAgLTEyMTAs MTUgKzEyMTAsMTUgQEAgUHJlZGljYXRlTG9ja1NobWVtUmVxdWVzdCh2b2lkICphcmcpCiAJ ICogaW5mb3JtYXRpb24gZm9yIHNlcmlhbGl6YWJsZSB0cmFuc2FjdGlvbnMgd2hpY2ggaGF2 ZSBhY2Nlc3NlZCBkYXRhLgogCSAqLwogCVNobWVtUmVxdWVzdEhhc2goJlNlcmlhbGl6YWJs ZVhpZEhhc2hEZXNjLAotCQkubmFtZSA9ICJTRVJJQUxJWkFCTEVYSUQgaGFzaCIsCisJCQkJ CSAubmFtZSA9ICJTRVJJQUxJWkFCTEVYSUQgaGFzaCIsCiAKLQkJLmluaXRfc2l6ZSA9IG1h eF9zZXJpYWxpemFibGVfeGFjdHMsCi0JCS5tYXhfc2l6ZSA9IG1heF9zZXJpYWxpemFibGVf eGFjdHMsCisJCQkJCSAuaW5pdF9zaXplID0gbWF4X3NlcmlhbGl6YWJsZV94YWN0cywKKwkJ CQkJIC5tYXhfc2l6ZSA9IG1heF9zZXJpYWxpemFibGVfeGFjdHMsCiAKLQkJLnB0ciA9ICZT ZXJpYWxpemFibGVYaWRIYXNoLAotCQkuaGFzaF9pbmZvLmtleXNpemUgPSBzaXplb2YoU0VS SUFMSVpBQkxFWElEVEFHKSwKLQkJLmhhc2hfaW5mby5lbnRyeXNpemUgPSBzaXplb2YoU0VS SUFMSVpBQkxFWElEKSwKLQkJLmhhc2hfZmxhZ3MgPSBIQVNIX0VMRU0gfCBIQVNIX0JMT0JT IHwgSEFTSF9GSVhFRF9TSVpFLAorCQkJCQkgLnB0ciA9ICZTZXJpYWxpemFibGVYaWRIYXNo LAorCQkJCQkgLmhhc2hfaW5mby5rZXlzaXplID0gc2l6ZW9mKFNFUklBTElaQUJMRVhJRFRB RyksCisJCQkJCSAuaGFzaF9pbmZvLmVudHJ5c2l6ZSA9IHNpemVvZihTRVJJQUxJWkFCTEVY SUQpLAorCQkJCQkgLmhhc2hfZmxhZ3MgPSBIQVNIX0VMRU0gfCBIQVNIX0JMT0JTIHwgSEFT SF9GSVhFRF9TSVpFLAogCQkpOwogCiAJLyoKQEAgLTEyMzUsNDUgKzEyMzUsNDUgQEAgUHJl ZGljYXRlTG9ja1NobWVtUmVxdWVzdCh2b2lkICphcmcpCiAJbWF4X3J3X2NvbmZsaWN0cyA9 IG1heF9zZXJpYWxpemFibGVfeGFjdHMgKiA1OwogCiAJU2htZW1SZXF1ZXN0U3RydWN0KCZS V0NvbmZsaWN0UG9vbFNobWVtRGVzYywKLQkJLm5hbWUgPSAiUldDb25mbGljdFBvb2wiLAot CQkuc2l6ZSA9IFJXQ29uZmxpY3RQb29sSGVhZGVyRGF0YVNpemUgKyBtdWxfc2l6ZSgoU2l6 ZSkgbWF4X3J3X2NvbmZsaWN0cywKLQkJCQkJCQkJCQkJCQkJUldDb25mbGljdERhdGFTaXpl KSwKLQkJLnB0ciA9ICh2b2lkICoqKSAmUldDb25mbGljdFBvb2wsCi0JKTsKKwkJCQkJICAg Lm5hbWUgPSAiUldDb25mbGljdFBvb2wiLAorCQkJCQkgICAuc2l6ZSA9IFJXQ29uZmxpY3RQ b29sSGVhZGVyRGF0YVNpemUgKyBtdWxfc2l6ZSgoU2l6ZSkgbWF4X3J3X2NvbmZsaWN0cywK KwkJCQkJCQkJCQkJCQkJCQkJICAgUldDb25mbGljdERhdGFTaXplKSwKKwkJCQkJICAgLnB0 ciA9ICh2b2lkICoqKSAmUldDb25mbGljdFBvb2wsCisJCSk7CiAKIAlTaG1lbVJlcXVlc3RT dHJ1Y3QoJkZpbmlzaGVkU2VyaWFsaXphYmxlU2htZW1EZXNjLAotCQkubmFtZSA9ICJGaW5p c2hlZFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9ucyIsCi0JCS5zaXplID0gc2l6ZW9mKGRsaXN0 X2hlYWQpLAotCQkucHRyID0gKHZvaWQgKiopICZGaW5pc2hlZFNlcmlhbGl6YWJsZVRyYW5z YWN0aW9ucywKLQkpOworCQkJCQkgICAubmFtZSA9ICJGaW5pc2hlZFNlcmlhbGl6YWJsZVRy YW5zYWN0aW9ucyIsCisJCQkJCSAgIC5zaXplID0gc2l6ZW9mKGRsaXN0X2hlYWQpLAorCQkJ CQkgICAucHRyID0gKHZvaWQgKiopICZGaW5pc2hlZFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9u cywKKwkJKTsKIAogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgU0xSVSBzdG9yYWdlIGZvciBv bGQgY29tbWl0dGVkIHNlcmlhbGl6YWJsZQogCSAqIHRyYW5zYWN0aW9ucy4KIAkgKi8KIAlT aW1wbGVMcnVSZXF1ZXN0KCZTZXJpYWxTbHJ1RGVzYywKLQkJLm5hbWUgPSAic2VyaWFsaXph YmxlIiwKLQkJLkRpciA9ICJwZ19zZXJpYWwiLAotCQkubG9uZ19zZWdtZW50X25hbWVzID0g ZmFsc2UsCisJCQkJCSAubmFtZSA9ICJzZXJpYWxpemFibGUiLAorCQkJCQkgLkRpciA9ICJw Z19zZXJpYWwiLAorCQkJCQkgLmxvbmdfc2VnbWVudF9uYW1lcyA9IGZhbHNlLAogCi0JCS5u c2xvdHMgPSBzZXJpYWxpemFibGVfYnVmZmVycywKKwkJCQkJIC5uc2xvdHMgPSBzZXJpYWxp emFibGVfYnVmZmVycywKIAotCQkuc3luY19oYW5kbGVyID0gU1lOQ19IQU5ETEVSX05PTkUs Ci0JCS5QYWdlUHJlY2VkZXMgPSBTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2FsbHksCi0JCS5l cnJkZXRhaWxfZm9yX2lvX2Vycm9yID0gc2VyaWFsX2VycmRldGFpbF9mb3JfaW9fZXJyb3Is CisJCQkJCSAuc3luY19oYW5kbGVyID0gU1lOQ19IQU5ETEVSX05PTkUsCisJCQkJCSAuUGFn ZVByZWNlZGVzID0gU2VyaWFsUGFnZVByZWNlZGVzTG9naWNhbGx5LAorCQkJCQkgLmVycmRl dGFpbF9mb3JfaW9fZXJyb3IgPSBzZXJpYWxfZXJyZGV0YWlsX2Zvcl9pb19lcnJvciwKIAot CQkuYnVmZmVyX3RyYW5jaGVfaWQgPSBMV1RSQU5DSEVfU0VSSUFMX0JVRkZFUiwKLQkJLmJh bmtfdHJhbmNoZV9pZCA9IExXVFJBTkNIRV9TRVJJQUxfU0xSVSwKKwkJCQkJIC5idWZmZXJf dHJhbmNoZV9pZCA9IExXVFJBTkNIRV9TRVJJQUxfQlVGRkVSLAorCQkJCQkgLmJhbmtfdHJh bmNoZV9pZCA9IExXVFJBTkNIRV9TRVJJQUxfU0xSVSwKIAkJKTsKICNpZmRlZiBVU0VfQVNT RVJUX0NIRUNLSU5HCiAJU2VyaWFsUGFnZVByZWNlZGVzTG9naWNhbGx5VW5pdFRlc3RzKCk7 CiAjZW5kaWYKIAogCVNobWVtUmVxdWVzdFN0cnVjdCgmU2VyaWFsQ29udHJvbFNobWVtRGVz YywKLQkJLm5hbWUgPSAiU2VyaWFsQ29udHJvbERhdGEiLAotCQkuc2l6ZSA9IHNpemVvZihT ZXJpYWxDb250cm9sRGF0YSksCi0JCS5wdHIgPSAodm9pZCAqKikgJnNlcmlhbENvbnRyb2ws Ci0JKTsKKwkJCQkJICAgLm5hbWUgPSAiU2VyaWFsQ29udHJvbERhdGEiLAorCQkJCQkgICAu c2l6ZSA9IHNpemVvZihTZXJpYWxDb250cm9sRGF0YSksCisJCQkJCSAgIC5wdHIgPSAodm9p ZCAqKikgJnNlcmlhbENvbnRyb2wsCisJCSk7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3Ns cnUuaAppbmRleCA4MjBjNzk4Njg1NC4uMWRiYjBiNjI1MjUgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9zbHJ1LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3NscnUuaApA QCAtMTY5LDcgKzE2OSw3IEBAIHR5cGVkZWYgc3RydWN0IFNscnVPcHRzCiAJICovCiAJaW50 CQkJYnVmZmVyX3RyYW5jaGVfaWQ7CiAJaW50CQkJYmFua190cmFuY2hlX2lkOwotfSBTbHJ1 T3B0czsKK30JCQlTbHJ1T3B0czsKIAogLyoKICAqIFNscnVEZXNjIGlzIGFuIHVuc2hhcmVk IHN0cnVjdHVyZSB0aGF0IHBvaW50cyB0byB0aGUgYWN0aXZlIGluZm9ybWF0aW9uCkBAIC0x NzksNyArMTc5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgU2xydURlc2MKIHsKIAlTaG1lbVN0cnVj dERlc2MgYmFzZTsKIAotCVNscnVPcHRzIG9wdGlvbnM7CisJU2xydU9wdHMJb3B0aW9uczsK IAogCVNscnVTaGFyZWQJc2hhcmVkOwogCkBAIC0yMDMsNyArMjAzLDcgQEAgU2ltcGxlTHJ1 R2V0QmFua0xvY2soU2xydURlc2MgKmN0bCwgaW50NjQgcGFnZW5vKQogCXJldHVybiAmKGN0 bC0+c2hhcmVkLT5iYW5rX2xvY2tzW2Jhbmtub10ubG9jayk7CiB9CiAKLWV4dGVybiB2b2lk IFNpbXBsZUxydVJlcXVlc3RXaXRoT3B0cyhTbHJ1RGVzYyAqZGVzYywgY29uc3QgU2xydU9w dHMgKm9wdGlvbnMpOworZXh0ZXJuIHZvaWQgU2ltcGxlTHJ1UmVxdWVzdFdpdGhPcHRzKFNs cnVEZXNjICpkZXNjLCBjb25zdCBTbHJ1T3B0cyAqIG9wdGlvbnMpOwogCiAjZGVmaW5lIFNp bXBsZUxydVJlcXVlc3QoZGVzYywgLi4uKSAgXAogCVNpbXBsZUxydVJlcXVlc3RXaXRoT3B0 cyhkZXNjLCAmKFNscnVPcHRzKXtfX1ZBX0FSR1NfX30pCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9zdG9yYWdlL2Fpb19pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9f aW50ZXJuYWwuaAppbmRleCAzM2UxZTJkYzA0OC4uOWNhNDA4N2FhN2YgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvX2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUv c3RvcmFnZS9haW9faW50ZXJuYWwuaApAQCAtMjAsNiArMjAsOCBAQAogI2luY2x1ZGUgInBv cnQvcGdfaW92ZWMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2Fpby5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvY29uZGl0aW9uX3ZhcmlhYmxlLmgiCisjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIK KyNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCiAKIAogLyoKQEAgLTI2NywyMCArMjY5LDgg QEAgdHlwZWRlZiBzdHJ1Y3QgSW9NZXRob2RPcHMKIAkgKi8KIAlib29sCQl3YWl0X29uX2Zk X2JlZm9yZV9jbG9zZTsKIAotCiAJLyogZ2xvYmFsIGluaXRpYWxpemF0aW9uICovCi0KLQkv KgotCSAqIEFtb3VudCBvZiBhZGRpdGlvbmFsIHNoYXJlZCBtZW1vcnkgdG8gcmVzZXJ2ZSBm b3IgdGhlIGlvX21ldGhvZC4gQ2FsbGVkCi0JICoganVzdCBsaWtlIGEgbm9ybWFsIGlwY2ku YyBzdHlsZSAqU2l6ZSgpIGZ1bmN0aW9uLiBPcHRpb25hbC4KLQkgKi8KLQlzaXplX3QJCSgq c2htZW1fc2l6ZSkgKHZvaWQpOwotCi0JLyoKLQkgKiBJbml0aWFsaXplIHNoYXJlZCBtZW1v cnkuIEZpcnN0IHRpbWUgaXMgdHJ1ZSBpZiBBSU8ncyBzaGFyZWQgbWVtb3J5IHdhcwotCSAq IGp1c3QgaW5pdGlhbGl6ZWQsIGZhbHNlIG90aGVyd2lzZS4gT3B0aW9uYWwuCi0JICovCi0J dm9pZAkJKCpzaG1lbV9pbml0KSAoYm9vbCBmaXJzdF90aW1lKTsKKwlTaG1lbUNhbGxiYWNr cyBzaG1lbV9jYWxsYmFja3M7CiAKIAkvKgogCSAqIFBlci1iYWNrZW5kIGluaXRpYWxpemF0 aW9uLiBPcHRpb25hbC4KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvX3N1 YnN5cy5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9fc3Vic3lzLmgKaW5kZXggMjc2Y2Iz ZTMxYzQuLmRkNTQ4NjkzNTFmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fp b19zdWJzeXMuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19zdWJzeXMuaApAQCAt MjAsMTIgKzIwLDggQEAKIAogCiAvKiBhaW9faW5pdC5jICovCi1leHRlcm4gU2l6ZSBBaW9T aG1lbVNpemUodm9pZCk7Ci1leHRlcm4gdm9pZCBBaW9TaG1lbUluaXQodm9pZCk7Ci0KIGV4 dGVybiB2b2lkIHBnYWlvX2luaXRfYmFja2VuZCh2b2lkKTsKIAotCiAvKiBhaW8uYyAqLwog ZXh0ZXJuIHZvaWQgcGdhaW9fZXJyb3JfY2xlYW51cCh2b2lkKTsKIGV4dGVybiB2b2lkIEF0 RU9YYWN0X0Fpbyhib29sIGlzX2NvbW1pdCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9z dG9yYWdlL3N1YnN5c3RlbWxpc3QuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVt bGlzdC5oCmluZGV4IDYzZDFkNjBhZTM2Li5lOGUwNmJlMzBjMiAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1saXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvc3Rv cmFnZS9zdWJzeXN0ZW1saXN0LmgKQEAgLTQ4LDMgKzQ4LDYgQEAgUEdfU0hNRU1fU1VCU1lT VEVNKFByb2NTaWduYWxTaG1lbUNhbGxiYWNrcykKIFBHX1NITUVNX1NVQlNZU1RFTShBc3lu Y1NobWVtQ2FsbGJhY2tzKQogUEdfU0hNRU1fU1VCU1lTVEVNKFdhaXRFdmVudEN1c3RvbVNo bWVtQ2FsbGJhY2tzKQogUEdfU0hNRU1fU1VCU1lTVEVNKEluamVjdGlvblBvaW50U2htZW1D YWxsYmFja3MpCisKKy8qIEFJTyBzdWJzeXN0ZW0uIFRoaXMgZGVsZWdhdGVzIHRvIHRoZSBt ZXRob2Qtc3BlY2lmaWMgY2FsbGJhY2tzICovCitQR19TSE1FTV9TVUJTWVNURU0oQWlvU2ht ZW1DYWxsYmFja3MpCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2xydS90 ZXN0X3NscnUuYyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zbHJ1L3Rlc3Rfc2xydS5jCmlu ZGV4IDNjMmExNDNiNGQ1Li42YmQxYmVjNzJjNSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X3NscnUvdGVzdF9zbHJ1LmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X3NscnUvdGVzdF9zbHJ1LmMKQEAgLTIzNCwyNCArMjM0LDI0IEBAIHN0YXRpYyB2b2lkCiB0 ZXN0X3NscnVfc2htZW1fcmVxdWVzdCh2b2lkICphcmcpCiB7CiAJU2ltcGxlTHJ1UmVxdWVz dCgmVGVzdFNscnVEZXNjLAotCQkubmFtZSA9ICJUZXN0U0xSVSIsCi0JCS5EaXIgPSBUZXN0 U2xydURpciwKLQotCQkvKgotCQkgKiBTaG9ydCBzZWdtZW50cyBuYW1lcyBhcmUgd2VsbCB0 ZXN0ZWQgZWxzZXdoZXJlIHNvIGluIHRoaXMgdGVzdCB3ZSBhcmUKLQkJICogZm9jdXNpbmcg b24gbG9uZyBuYW1lcy4KLQkJICovCi0JCS5sb25nX3NlZ21lbnRfbmFtZXMgPSB0cnVlLAot Ci0JCS5uc2xvdHMgPSBOVU1fVEVTVF9CVUZGRVJTLAotCQkubmxzbnMgPSAwLAotCi0JCS5z eW5jX2hhbmRsZXIgPSBTWU5DX0hBTkRMRVJfTk9ORSwKLQkJLlBhZ2VQcmVjZWRlcyA9IHRl c3Rfc2xydV9wYWdlX3ByZWNlZGVzX2xvZ2ljYWxseSwKLQkJLmVycmRldGFpbF9mb3JfaW9f ZXJyb3IgPSB0ZXN0X3NscnVfZXJyZGV0YWlsX2Zvcl9pb19lcnJvciwKLQotCQkvKiBsZXQg c2xydS5jIGFzc2lnbiB0aGVzZSAqLwotCQkuYnVmZmVyX3RyYW5jaGVfaWQgPSAwLAotCQku YmFua190cmFuY2hlX2lkID0gMCwKLQkpOworCQkJCQkgLm5hbWUgPSAiVGVzdFNMUlUiLAor CQkJCQkgLkRpciA9IFRlc3RTbHJ1RGlyLAorCisJLyoKKwkgKiBTaG9ydCBzZWdtZW50cyBu YW1lcyBhcmUgd2VsbCB0ZXN0ZWQgZWxzZXdoZXJlIHNvIGluIHRoaXMgdGVzdCB3ZSBhcmUK KwkgKiBmb2N1c2luZyBvbiBsb25nIG5hbWVzLgorCSAqLworCQkJCQkgLmxvbmdfc2VnbWVu dF9uYW1lcyA9IHRydWUsCisKKwkJCQkJIC5uc2xvdHMgPSBOVU1fVEVTVF9CVUZGRVJTLAor CQkJCQkgLm5sc25zID0gMCwKKworCQkJCQkgLnN5bmNfaGFuZGxlciA9IFNZTkNfSEFORExF Ul9OT05FLAorCQkJCQkgLlBhZ2VQcmVjZWRlcyA9IHRlc3Rfc2xydV9wYWdlX3ByZWNlZGVz X2xvZ2ljYWxseSwKKwkJCQkJIC5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yID0gdGVzdF9zbHJ1 X2VycmRldGFpbF9mb3JfaW9fZXJyb3IsCisKKwkvKiBsZXQgc2xydS5jIGFzc2lnbiB0aGVz ZSAqLworCQkJCQkgLmJ1ZmZlcl90cmFuY2hlX2lkID0gMCwKKwkJCQkJIC5iYW5rX3RyYW5j aGVfaWQgPSAwLAorCQkpOwogfQotLSAKMi40Ny4zCgo= --------------cltwtZYaOf76t571xokamZd0 Content-Type: text/x-patch; charset=UTF-8; name="v9-0015-Add-option-for-aligning-shmem-allocations.patch" Content-Disposition: attachment; filename="v9-0015-Add-option-for-aligning-shmem-allocations.patch" Content-Transfer-Encoding: base64 RnJvbSAyNmU4MDlhZjQ5YTIwMDJmZmY0YTNiYzU2MWRmZDExMmZkMDhiMmM2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFNhdCwgMjEgTWFyIDIwMjYgMjM6NDQ6MTUgKzAyMDAK U3ViamVjdDogW1BBVENIIHY5IDE1LzE2XSBBZGQgb3B0aW9uIGZvciBhbGlnbmluZyBzaG1l bSBhbGxvY2F0aW9ucwoKVGhlIGJ1ZmZlciBibG9ja3MgKGluIHRoZSBuZXh0IGNvbW1pdCkg YXJlIElPLWFsaWduZWQuIFRoaXMgbWlnaHQgY29tZQpoYW5keSBpbiBvdGhlciBwbGFjZXMg dG9vLCBzbyBtYWtlIGl0IGFuIGV4cGxpY2l0IGZlYXR1cmUgb2YKU2htZW1SZXF1ZXN0U3Ry dWN0LgotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMgfCAyMiArKysrKysr KysrKysrLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3NobWVtLmggICAgIHwgIDYg KysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKaW5kZXggNzMyOTdlODIyNjUuLjFjYmFj Nzk0NmUxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKQEAgLTIzOCw3ICsyMzgsNyBA QCB0eXBlZGVmIHN0cnVjdCBTaG1lbUFsbG9jYXRvckRhdGEKIAogI2RlZmluZSBTaG1lbUlu ZGV4TG9jayAoJlNobWVtQWxsb2NhdG9yLT5pbmRleF9sb2NrKQogCi1zdGF0aWMgdm9pZCAq U2htZW1BbGxvY1JhdyhTaXplIHNpemUsIFNpemUgKmFsbG9jYXRlZF9zaXplKTsKK3N0YXRp YyB2b2lkICpTaG1lbUFsbG9jUmF3KFNpemUgc2l6ZSwgU2l6ZSBhbGlnbm1lbnQsIFNpemUg KmFsbG9jYXRlZF9zaXplKTsKIAogLyogc2hhcmVkIG1lbW9yeSBnbG9iYWwgdmFyaWFibGVz ICovCiAKQEAgLTM5OSw2ICszOTksNyBAQCBTaG1lbUdldFJlcXVlc3RlZFNpemUodm9pZCkK IAl7CiAJCXNpemUgPSBhZGRfc2l6ZShzaXplLCByZXF1ZXN0LT5vcHRpb25zLT5zaXplKTsK IAkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIHJlcXVlc3QtPm9wdGlvbnMtPmV4dHJhX3NpemUp OworCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgcmVxdWVzdC0+b3B0aW9ucy0+YWxpZ25tZW50 KTsKIAl9CiAKIAlyZXR1cm4gc2l6ZTsKQEAgLTU4OCw3ICs1ODksNyBAQCBBdHRhY2hPcklu aXRTaG1lbUluZGV4RW50cnkoU2htZW1SZXF1ZXN0ICpyZXF1ZXN0LAogCQlzaXplX3QJCWFs bG9jYXRlZF9zaXplOwogCQl2b2lkCSAgICpzdHJ1Y3RQdHI7CiAKLQkJc3RydWN0UHRyID0g U2htZW1BbGxvY1JhdyhyZXF1ZXN0LT5vcHRpb25zLT5zaXplLCAmYWxsb2NhdGVkX3NpemUp OworCQlzdHJ1Y3RQdHIgPSBTaG1lbUFsbG9jUmF3KHJlcXVlc3QtPm9wdGlvbnMtPnNpemUs IHJlcXVlc3QtPm9wdGlvbnMtPmFsaWdubWVudCwgJmFsbG9jYXRlZF9zaXplKTsKIAkJaWYg KHN0cnVjdFB0ciA9PSBOVUxMKQogCQl7CiAJCQkvKiBvdXQgb2YgbWVtb3J5OyByZW1vdmUg dGhlIGZhaWxlZCBTaG1lbUluZGV4IGVudHJ5ICovCkBAIC03NTQsNyArNzU1LDcgQEAgU2ht ZW1BbGxvYyhTaXplIHNpemUpCiAJdm9pZAkgICAqbmV3U3BhY2U7CiAJU2l6ZQkJYWxsb2Nh dGVkX3NpemU7CiAKLQluZXdTcGFjZSA9IFNobWVtQWxsb2NSYXcoc2l6ZSwgJmFsbG9jYXRl ZF9zaXplKTsKKwluZXdTcGFjZSA9IFNobWVtQWxsb2NSYXcoc2l6ZSwgMCwgJmFsbG9jYXRl ZF9zaXplKTsKIAlpZiAoIW5ld1NwYWNlKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJj b2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSksCkBAIC03NzMsNyArNzc0LDcgQEAgU2htZW1B bGxvY05vRXJyb3IoU2l6ZSBzaXplKQogewogCVNpemUJCWFsbG9jYXRlZF9zaXplOwogCi0J cmV0dXJuIFNobWVtQWxsb2NSYXcoc2l6ZSwgJmFsbG9jYXRlZF9zaXplKTsKKwlyZXR1cm4g U2htZW1BbGxvY1JhdyhzaXplLCAwLCAmYWxsb2NhdGVkX3NpemUpOwogfQogCiAvKgpAQCAt NzgzLDggKzc4NCw5IEBAIFNobWVtQWxsb2NOb0Vycm9yKFNpemUgc2l6ZSkKICAqIGJlIGVx dWFsIHRvIHRoZSBudW1iZXIgcmVxdWVzdGVkIHBsdXMgYW55IHBhZGRpbmcgd2UgY2hvb3Nl IHRvIGFkZC4KICAqLwogc3RhdGljIHZvaWQgKgotU2htZW1BbGxvY1JhdyhTaXplIHNpemUs IFNpemUgKmFsbG9jYXRlZF9zaXplKQorU2htZW1BbGxvY1JhdyhTaXplIHNpemUsIFNpemUg YWxpZ25tZW50LCBTaXplICphbGxvY2F0ZWRfc2l6ZSkKIHsKKwlTaXplCQlyYXdTdGFydDsK IAlTaXplCQluZXdTdGFydDsKIAlTaXplCQluZXdGcmVlOwogCXZvaWQJICAgKm5ld1NwYWNl OwpAQCAtODAwLDE0ICs4MDIsMTUgQEAgU2htZW1BbGxvY1JhdyhTaXplIHNpemUsIFNpemUg KmFsbG9jYXRlZF9zaXplKQogCSAqIHN0cnVjdHVyZXMgb3V0IHRvIGEgcG93ZXItb2YtdHdv IHNpemUgLSBidXQgd2l0aG91dCB0aGlzLCBldmVuIHRoYXQKIAkgKiB3b24ndCBiZSBzdWZm aWNpZW50LgogCSAqLwotCXNpemUgPSBDQUNIRUxJTkVBTElHTihzaXplKTsKLQkqYWxsb2Nh dGVkX3NpemUgPSBzaXplOworCWlmIChhbGlnbm1lbnQgPCBQR19DQUNIRV9MSU5FX1NJWkUp CisJCWFsaWdubWVudCA9IFBHX0NBQ0hFX0xJTkVfU0laRTsKIAogCUFzc2VydChTaG1lbVNl Z0hkciAhPSBOVUxMKTsKIAogCVNwaW5Mb2NrQWNxdWlyZSgmU2htZW1BbGxvY2F0b3ItPnNo bWVtX2xvY2spOwogCi0JbmV3U3RhcnQgPSBTaG1lbUFsbG9jYXRvci0+ZnJlZV9vZmZzZXQ7 CisJcmF3U3RhcnQgPSBTaG1lbUFsbG9jYXRvci0+ZnJlZV9vZmZzZXQ7CisJbmV3U3RhcnQg PSBUWVBFQUxJR04oYWxpZ25tZW50LCByYXdTdGFydCk7CiAKIAluZXdGcmVlID0gbmV3U3Rh cnQgKyBzaXplOwogCWlmIChuZXdGcmVlIDw9IFNobWVtU2VnSGRyLT50b3RhbHNpemUpCkBA IC04MjEsOCArODI0LDkgQEAgU2htZW1BbGxvY1JhdyhTaXplIHNpemUsIFNpemUgKmFsbG9j YXRlZF9zaXplKQogCVNwaW5Mb2NrUmVsZWFzZSgmU2htZW1BbGxvY2F0b3ItPnNobWVtX2xv Y2spOwogCiAJLyogbm90ZSB0aGlzIGFzc2VydCBpcyBva2F5IHdpdGggbmV3U3BhY2UgPT0g TlVMTCAqLwotCUFzc2VydChuZXdTcGFjZSA9PSAodm9pZCAqKSBDQUNIRUxJTkVBTElHTihu ZXdTcGFjZSkpOworCUFzc2VydChuZXdTcGFjZSA9PSAodm9pZCAqKSBUWVBFQUxJR04oYWxp Z25tZW50LCBuZXdTcGFjZSkpOwogCisJKmFsbG9jYXRlZF9zaXplID0gbmV3RnJlZSAtIHJh d1N0YXJ0OwogCXJldHVybiBuZXdTcGFjZTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvc3RvcmFnZS9zaG1lbS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zaG1lbS5oCmluZGV4 IDY0YzFmYjA0NGM2Li40OTM5MTMwYWFiMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3Rv cmFnZS9zaG1lbS5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2htZW0uaApAQCAtNjMs NiArNjMsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgU2htZW1TdHJ1Y3RPcHRzCiAKIAlzc2l6ZV90 CQlzaXplOwogCisJLyoKKwkgKiBBbGlnbm1lbnQgb2YgdGhlIHN0YXJ0aW5nIGFkZHJlc3Mu IElmIG5vdCBzZXQsIGRlZmF1bHRzIHRvIGNhY2hlbGluZQorCSAqIGJvdW5kYXJ5LiBNdXN0 IGJlIGEgcG93ZXIgb2YgdHdvLgorCSAqLworCXNpemVfdAkJYWxpZ25tZW50OworCiAJLyoK IAkgKiBFeHRyYSBzcGFjZSB0byByZXNlcnZlIGluIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21l bnQsIGJ1dCBpdCdzIG5vdCBwYXJ0CiAJICogb2YgdGhlIHN0cnVjdCBpdHNlbGYuICBUaGlz IGlzIHVzZWQgZm9yIHNoYXJlZCBtZW1vcnkgaGFzaCB0YWJsZXMgdGhhdAotLSAKMi40Ny4z Cgo= --------------cltwtZYaOf76t571xokamZd0 Content-Type: text/x-patch; charset=UTF-8; name="v9-0016-Convert-all-remaining-subsystems-to-use-the-new-A.patch" Content-Disposition: attachment; filename*0="v9-0016-Convert-all-remaining-subsystems-to-use-the-new-A.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBlYzUxZDRkMWNjNTMwMjM1MmVjM2QzNjViZGE5OGM3ZWFkMmU4MjUwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMjcgTWFyIDIwMjYgMDI6MzE6MDYgKzAyMDAK U3ViamVjdDogW1BBVENIIHY5IDE2LzE2XSBDb252ZXJ0IGFsbCByZW1haW5pbmcgc3Vic3lz dGVtcyB0byB1c2UgdGhlIG5ldyBBUEkKCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1v bi9zeW5jc2Nhbi5jICAgICAgICAgIHwgIDc5ICsrKystLS0tCiBzcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHV0aWxzLmMgICAgICAgICAgfCAgNTYgKysrLS0tCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jICAgICAgICAgfCAgNzcgKysrLS0tLQogc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jICAgICAgICAgICAgIHwgIDg2ICsrKyst LS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncHJlZmV0Y2hlci5jICAgfCAg NTQgKystLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jICAg ICB8ICAzNiArKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nd2FpdC5jICAg ICAgICAgfCAgNTIgKystLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5j ICAgICAgICAgICB8ICA4MSArKysrLS0tLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dv cmtlci5jICAgICAgICAgICAgIHwgMTA3ICsrKysrLS0tLS0KIHNyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvY2hlY2twb2ludGVyLmMgICAgICAgICB8ICA1OCArKystLS0KIHNyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvcGdhcmNoLmMgICAgICAgICAgICAgICB8ICA0NiArKystLQogc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmMgICAgICAgIHwgIDYzICsrKy0tLQog c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jICAgIHwgIDU4ICsr Ky0tLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsY3RsLmMgIHwg IDMwICstLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYyAgICAg IHwgIDYxICsrKy0tLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbG90c3lu Yy5jICAgIHwgIDQ0ICsrLS0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYyAgICAg ICAgICAgICAgICB8ICA2NiArKystLS0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHJl Y2VpdmVyZnVuY3MuYyAgICB8ICA1MiArKy0tLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v d2Fsc2VuZGVyLmMgICAgICAgICAgIHwgIDYxICsrKy0tLQogc3JjL2JhY2tlbmQvc3RvcmFn ZS9haW8vYWlvX2luaXQuYyAgICAgICAgICAgIHwgIDEyICstCiBzcmMvYmFja2VuZC9zdG9y YWdlL2Fpby9tZXRob2RfaW9fdXJpbmcuYyAgICAgfCAgMTIgKy0KIHNyYy9iYWNrZW5kL3N0 b3JhZ2UvYWlvL21ldGhvZF93b3JrZXIuYyAgICAgICB8ICAxNiArLQogc3JjL2JhY2tlbmQv c3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYyAgICAgICAgIHwgMTU4ICsrKysrKystLS0tLS0t LQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX3RhYmxlLmMgICAgICAgIHwgIDQw ICsrLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMgICAgICAgICB8 ICA5NCArKysrLS0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyAgICAgICAg ICAgICAgICB8IDExOSArLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xv Y2suYyAgICAgICAgICAgICAgIHwgMTI2ICsrKysrKy0tLS0tLQogc3JjL2JhY2tlbmQvdXRp bHMvYWN0aXZpdHkvYmFja2VuZF9zdGF0dXMuYyAgIHwgMTkwICsrKysrKysrLS0tLS0tLS0t LQogc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X3NobWVtLmMgICAgIHwgMTYx ICsrKysrKysrLS0tLS0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oICAgICAgICAg ICAgICAgICAgIHwgICAyIC0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9zeW5jc2Nhbi5oICAgICAg ICAgICAgICAgICB8ICAgMiAtCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdHdvcGhhc2UuaCAgICAg ICAgICAgICAgICAgfCAgIDMgLQogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaCAgICAgICAg ICAgICAgICAgICAgIHwgICAyIC0KIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncHJlZmV0Y2hl ci5oICAgICAgICAgICB8ICAgMyAtCiBzcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3JlY292ZXJ5 LmggICAgICAgICAgICAgfCAgIDMgLQogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2d3YWl0Lmgg ICAgICAgICAgICAgICAgIHwgICAyIC0KIHNyYy9pbmNsdWRlL3Bnc3RhdC5oICAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgNCAtCiBzcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1dG92 YWN1dW0uaCAgICAgICAgICAgfCAgIDQgLQogc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dv cmtlcl9pbnRlcm5hbHMuaCAgIHwgICAyIC0KIHNyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYmd3 cml0ZXIuaCAgICAgICAgICAgICB8ICAgMyAtCiBzcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3Bn YXJjaC5oICAgICAgICAgICAgICAgfCAgIDIgLQogc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci93 YWxzdW1tYXJpemVyLmggICAgICAgIHwgICAyIC0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L2xvZ2ljYWxjdGwuaCAgICAgICAgICB8ICAgMiAtCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9sb2dpY2FsbGF1bmNoZXIuaCAgICAgfCAgIDMgLQogc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vb3JpZ2luLmggICAgICAgICAgICAgIHwgICA0IC0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL3Nsb3QuaCAgICAgICAgICAgICAgICB8ICAgNCAtCiBzcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9zbG90c3luYy5oICAgICAgICAgICAgfCAgIDIgLQogc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vd2FscmVjZWl2ZXIuaCAgICAgICAgIHwgICAyIC0KIHNyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3dhbHNlbmRlci5oICAgICAgICAgICB8ICAgMiAtCiBzcmMvaW5jbHVkZS9zdG9y YWdlL2J1Zl9pbnRlcm5hbHMuaCAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9pbmNsdWRlL3N0 b3JhZ2UvYnVmbWdyLmggICAgICAgICAgICAgICAgICB8ICAgNCAtCiBzcmMvaW5jbHVkZS9z dG9yYWdlL2xvY2suaCAgICAgICAgICAgICAgICAgICAgfCAgIDIgLQogc3JjL2luY2x1ZGUv c3RvcmFnZS9zdWJzeXN0ZW1saXN0LmggICAgICAgICAgIHwgIDI2ICsrKwogc3JjL2luY2x1 ZGUvdXRpbHMvYmFja2VuZF9zdGF0dXMuaCAgICAgICAgICAgIHwgICA4IC0KIC4uLi9pbmpl Y3Rpb25fcG9pbnRzL2luamVjdGlvbl9wb2ludHMuYyAgICAgICB8ICA2MCArKy0tLS0KIDU1 IGZpbGVzIGNoYW5nZWQsIDEwMjcgaW5zZXJ0aW9ucygrKSwgMTIyNyBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3N5bmNzY2FuLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3N5bmNzY2FuLmMKaW5kZXggNmZjZmNiMGU1NjAu LjI1NTIyMjg0ZmFhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3N5 bmNzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9zeW5jc2Nhbi5jCkBA IC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9sd2xvY2suaCIKICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCisjaW5jbHVkZSAi c3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKIApAQCAt MTExLDYgKzExMiwxNCBAQCB0eXBlZGVmIHN0cnVjdCBzc19zY2FuX2xvY2F0aW9uc190CiAj ZGVmaW5lIFNpemVPZlNjYW5Mb2NhdGlvbnMoTikgXAogCShvZmZzZXRvZihzc19zY2FuX2xv Y2F0aW9uc190LCBpdGVtcykgKyAoTikgKiBzaXplb2Yoc3NfbHJ1X2l0ZW1fdCkpCiAKK3N0 YXRpYyB2b2lkIFN5bmNTY2FuU2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9p ZCBTeW5jU2NhblNobWVtSW5pdCh2b2lkICphcmcpOworCitjb25zdCBTaG1lbUNhbGxiYWNr cyBTeW5jU2NhblNobWVtQ2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gU3luY1NjYW5T aG1lbVJlcXVlc3QsCisJLmluaXRfZm4gPSBTeW5jU2NhblNobWVtSW5pdCwKK307CisKIC8q IFBvaW50ZXIgdG8gc3RydWN0IGluIHNoYXJlZCBtZW1vcnkgKi8KIHN0YXRpYyBzc19zY2Fu X2xvY2F0aW9uc190ICpzY2FuX2xvY2F0aW9uczsKIApAQCAtMTIwLDU4ICsxMjksNTAgQEAg c3RhdGljIEJsb2NrTnVtYmVyIHNzX3NlYXJjaChSZWxGaWxlTG9jYXRvciByZWxmaWxlbG9j YXRvciwKIAogCiAvKgotICogU3luY1NjYW5TaG1lbVNpemUgLS0tIHJlcG9ydCBhbW91bnQg b2Ygc2hhcmVkIG1lbW9yeSBzcGFjZSBuZWVkZWQKKyAqIFN5bmNTY2FuU2htZW1SZXF1ZXN0 IC0tLSByZWdpc3RlciB0aGlzIG1vZHVsZSdzIHNoYXJlZCBtZW1vcnkKICAqLwotU2l6ZQot U3luY1NjYW5TaG1lbVNpemUodm9pZCkKK3N0YXRpYyB2b2lkCitTeW5jU2NhblNobWVtUmVx dWVzdCh2b2lkICphcmcpCiB7Ci0JcmV0dXJuIFNpemVPZlNjYW5Mb2NhdGlvbnMoU1lOQ19T Q0FOX05FTEVNKTsKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIFN5bmNTY2FuU2htZW1EZXNj OworCisJU2htZW1SZXF1ZXN0U3RydWN0KCZTeW5jU2NhblNobWVtRGVzYywKKwkJCQkJICAg Lm5hbWUgPSAiU3luYyBTY2FuIExvY2F0aW9ucyBMaXN0IiwKKwkJCQkJICAgLnNpemUgPSBT aXplT2ZTY2FuTG9jYXRpb25zKFNZTkNfU0NBTl9ORUxFTSksCisJCQkJCSAgIC5wdHIgPSAo dm9pZCAqKikgJnNjYW5fbG9jYXRpb25zLAorCQkpOwogfQogCiAvKgogICogU3luY1NjYW5T aG1lbUluaXQgLS0tIGluaXRpYWxpemUgdGhpcyBtb2R1bGUncyBzaGFyZWQgbWVtb3J5CiAg Ki8KLXZvaWQKLVN5bmNTY2FuU2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAorU3luY1Nj YW5TaG1lbUluaXQodm9pZCAqYXJnKQogewogCWludAkJCWk7Ci0JYm9vbAkJZm91bmQ7CiAK LQlzY2FuX2xvY2F0aW9ucyA9IChzc19zY2FuX2xvY2F0aW9uc190ICopCi0JCVNobWVtSW5p dFN0cnVjdCgiU3luYyBTY2FuIExvY2F0aW9ucyBMaXN0IiwKLQkJCQkJCVNpemVPZlNjYW5M b2NhdGlvbnMoU1lOQ19TQ0FOX05FTEVNKSwKLQkJCQkJCSZmb3VuZCk7CisJc2Nhbl9sb2Nh dGlvbnMtPmhlYWQgPSAmc2Nhbl9sb2NhdGlvbnMtPml0ZW1zWzBdOworCXNjYW5fbG9jYXRp b25zLT50YWlsID0gJnNjYW5fbG9jYXRpb25zLT5pdGVtc1tTWU5DX1NDQU5fTkVMRU0gLSAx XTsKIAotCWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCisJZm9yIChpID0gMDsgaSA8IFNZTkNf U0NBTl9ORUxFTTsgaSsrKQogCXsKLQkJLyogSW5pdGlhbGl6ZSBzaGFyZWQgbWVtb3J5IGFy ZWEgKi8KLQkJQXNzZXJ0KCFmb3VuZCk7Ci0KLQkJc2Nhbl9sb2NhdGlvbnMtPmhlYWQgPSAm c2Nhbl9sb2NhdGlvbnMtPml0ZW1zWzBdOwotCQlzY2FuX2xvY2F0aW9ucy0+dGFpbCA9ICZz Y2FuX2xvY2F0aW9ucy0+aXRlbXNbU1lOQ19TQ0FOX05FTEVNIC0gMV07Ci0KLQkJZm9yIChp ID0gMDsgaSA8IFNZTkNfU0NBTl9ORUxFTTsgaSsrKQotCQl7Ci0JCQlzc19scnVfaXRlbV90 ICppdGVtID0gJnNjYW5fbG9jYXRpb25zLT5pdGVtc1tpXTsKLQotCQkJLyoKLQkJCSAqIElu aXRpYWxpemUgYWxsIHNsb3RzIHdpdGggaW52YWxpZCB2YWx1ZXMuIEFzIHNjYW5zIGFyZSBz dGFydGVkLAotCQkJICogdGhlc2UgaW52YWxpZCBlbnRyaWVzIHdpbGwgZmFsbCBvZmYgdGhl IExSVSBsaXN0IGFuZCBnZXQKLQkJCSAqIHJlcGxhY2VkIHdpdGggcmVhbCBlbnRyaWVzLgot CQkJICovCi0JCQlpdGVtLT5sb2NhdGlvbi5yZWxmaWxlbG9jYXRvci5zcGNPaWQgPSBJbnZh bGlkT2lkOwotCQkJaXRlbS0+bG9jYXRpb24ucmVsZmlsZWxvY2F0b3IuZGJPaWQgPSBJbnZh bGlkT2lkOwotCQkJaXRlbS0+bG9jYXRpb24ucmVsZmlsZWxvY2F0b3IucmVsTnVtYmVyID0g SW52YWxpZFJlbEZpbGVOdW1iZXI7Ci0JCQlpdGVtLT5sb2NhdGlvbi5sb2NhdGlvbiA9IElu dmFsaWRCbG9ja051bWJlcjsKLQotCQkJaXRlbS0+cHJldiA9IChpID4gMCkgPwotCQkJCSgm c2Nhbl9sb2NhdGlvbnMtPml0ZW1zW2kgLSAxXSkgOiBOVUxMOwotCQkJaXRlbS0+bmV4dCA9 IChpIDwgU1lOQ19TQ0FOX05FTEVNIC0gMSkgPwotCQkJCSgmc2Nhbl9sb2NhdGlvbnMtPml0 ZW1zW2kgKyAxXSkgOiBOVUxMOwotCQl9CisJCXNzX2xydV9pdGVtX3QgKml0ZW0gPSAmc2Nh bl9sb2NhdGlvbnMtPml0ZW1zW2ldOworCisJCS8qCisJCSAqIEluaXRpYWxpemUgYWxsIHNs b3RzIHdpdGggaW52YWxpZCB2YWx1ZXMuIEFzIHNjYW5zIGFyZSBzdGFydGVkLAorCQkgKiB0 aGVzZSBpbnZhbGlkIGVudHJpZXMgd2lsbCBmYWxsIG9mZiB0aGUgTFJVIGxpc3QgYW5kIGdl dCByZXBsYWNlZAorCQkgKiB3aXRoIHJlYWwgZW50cmllcy4KKwkJICovCisJCWl0ZW0tPmxv Y2F0aW9uLnJlbGZpbGVsb2NhdG9yLnNwY09pZCA9IEludmFsaWRPaWQ7CisJCWl0ZW0tPmxv Y2F0aW9uLnJlbGZpbGVsb2NhdG9yLmRiT2lkID0gSW52YWxpZE9pZDsKKwkJaXRlbS0+bG9j YXRpb24ucmVsZmlsZWxvY2F0b3IucmVsTnVtYmVyID0gSW52YWxpZFJlbEZpbGVOdW1iZXI7 CisJCWl0ZW0tPmxvY2F0aW9uLmxvY2F0aW9uID0gSW52YWxpZEJsb2NrTnVtYmVyOworCisJ CWl0ZW0tPnByZXYgPSAoaSA+IDApID8KKwkJCSgmc2Nhbl9sb2NhdGlvbnMtPml0ZW1zW2kg LSAxXSkgOiBOVUxMOworCQlpdGVtLT5uZXh0ID0gKGkgPCBTWU5DX1NDQU5fTkVMRU0gLSAx KSA/CisJCQkoJnNjYW5fbG9jYXRpb25zLT5pdGVtc1tpICsgMV0pIDogTlVMTDsKIAl9Ci0J ZWxzZQotCQlBc3NlcnQoZm91bmQpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnR1dGlscy5jCmluZGV4IDczMmJjNzUwYzllLi5lY2Q0ZmI0ZGY2ZiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1 ZGUgImxpYi9xdW5pcXVlLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9sd2xvY2suaCIKKyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKICNp bmNsdWRlICJ1dGlscy9kYXR1bS5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgog I2luY2x1ZGUgInV0aWxzL3JlbC5oIgpAQCAtNDE3LDYgKzQxOCwxMyBAQCB0eXBlZGVmIHN0 cnVjdCBCVFZhY0luZm8KIAogc3RhdGljIEJUVmFjSW5mbyAqYnR2YWNpbmZvOwogCitzdGF0 aWMgdm9pZCBCVHJlZVNobWVtUmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgQlRy ZWVTaG1lbUluaXQodm9pZCAqYXJnKTsKKworY29uc3QgU2htZW1DYWxsYmFja3MgQlRyZWVT aG1lbUNhbGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9IEJUcmVlU2htZW1SZXF1ZXN0LAor CS5pbml0X2ZuID0gQlRyZWVTaG1lbUluaXQsCit9OwogCiAvKgogICogX2J0X3ZhY3V1bV9j eWNsZWlkIC0tLSBnZXQgdGhlIGFjdGl2ZSB2YWN1dW0gY3ljbGUgSUQgZm9yIGFuIGluZGV4 LApAQCAtNTUzLDQ3ICs1NjEsMzkgQEAgX2J0X2VuZF92YWN1dW1fY2FsbGJhY2soaW50IGNv ZGUsIERhdHVtIGFyZykKIH0KIAogLyoKLSAqIEJUcmVlU2htZW1TaXplIC0tLSByZXBvcnQg YW1vdW50IG9mIHNoYXJlZCBtZW1vcnkgc3BhY2UgbmVlZGVkCisgKiBCVHJlZVNobWVtUmVx dWVzdCAtLS0gcmVnaXN0ZXIgdGhpcyBtb2R1bGUncyBzaGFyZWQgbWVtb3J5CiAgKi8KLVNp emUKLUJUcmVlU2htZW1TaXplKHZvaWQpCitzdGF0aWMgdm9pZAorQlRyZWVTaG1lbVJlcXVl c3Qodm9pZCAqYXJnKQogeworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgQlRyZWVTaG1lbURl c2M7CiAJU2l6ZQkJc2l6ZTsKIAogCXNpemUgPSBvZmZzZXRvZihCVFZhY0luZm8sIHZhY3V1 bXMpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShNYXhCYWNrZW5kcywgc2l6 ZW9mKEJUT25lVmFjSW5mbykpKTsKLQlyZXR1cm4gc2l6ZTsKKworCVNobWVtUmVxdWVzdFN0 cnVjdCgmQlRyZWVTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0gIkJUcmVlIFZhY3V1bSBT dGF0ZSIsCisJCQkJCSAgIC5zaXplID0gc2l6ZSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoq KSAmYnR2YWNpbmZvLAorCQkpOwogfQogCiAvKgogICogQlRyZWVTaG1lbUluaXQgLS0tIGlu aXRpYWxpemUgdGhpcyBtb2R1bGUncyBzaGFyZWQgbWVtb3J5CiAgKi8KLXZvaWQKLUJUcmVl U2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAorQlRyZWVTaG1lbUluaXQodm9pZCAqYXJn KQogewotCWJvb2wJCWZvdW5kOwotCi0JYnR2YWNpbmZvID0gKEJUVmFjSW5mbyAqKSBTaG1l bUluaXRTdHJ1Y3QoIkJUcmVlIFZhY3V1bSBTdGF0ZSIsCi0JCQkJCQkJCQkJCSAgQlRyZWVT aG1lbVNpemUoKSwKLQkJCQkJCQkJCQkJICAmZm91bmQpOwotCi0JaWYgKCFJc1VuZGVyUG9z dG1hc3RlcikKLQl7Ci0JCS8qIEluaXRpYWxpemUgc2hhcmVkIG1lbW9yeSBhcmVhICovCi0J CUFzc2VydCghZm91bmQpOwotCi0JCS8qCi0JCSAqIEl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRl ciB3aGF0IHRoZSBjeWNsZSBjb3VudGVyIHN0YXJ0cyBhdCwgYnV0Ci0JCSAqIGhhdmluZyBp dCBhbHdheXMgc3RhcnQgdGhlIHNhbWUgZG9lc24ndCBzZWVtIGdvb2QuICBTZWVkIHdpdGgK LQkJICogbG93LW9yZGVyIGJpdHMgb2YgdGltZSgpIGluc3RlYWQuCi0JCSAqLwotCQlidHZh Y2luZm8tPmN5Y2xlX2N0ciA9IChCVEN5Y2xlSWQpIHRpbWUoTlVMTCk7CisJLyoKKwkgKiBJ dCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgd2hhdCB0aGUgY3ljbGUgY291bnRlciBzdGFydHMg YXQsIGJ1dCBoYXZpbmcKKwkgKiBpdCBhbHdheXMgc3RhcnQgdGhlIHNhbWUgZG9lc24ndCBz ZWVtIGdvb2QuICBTZWVkIHdpdGggbG93LW9yZGVyIGJpdHMKKwkgKiBvZiB0aW1lKCkgaW5z dGVhZC4KKwkgKi8KKwlidHZhY2luZm8tPmN5Y2xlX2N0ciA9IChCVEN5Y2xlSWQpIHRpbWUo TlVMTCk7CiAKLQkJYnR2YWNpbmZvLT5udW1fdmFjdXVtcyA9IDA7Ci0JCWJ0dmFjaW5mby0+ bWF4X3ZhY3V1bXMgPSBNYXhCYWNrZW5kczsKLQl9Ci0JZWxzZQotCQlBc3NlcnQoZm91bmQp OworCWJ0dmFjaW5mby0+bnVtX3ZhY3V1bXMgPSAwOworCWJ0dmFjaW5mby0+bWF4X3ZhY3V1 bXMgPSBNYXhCYWNrZW5kczsKIH0KIAogYnl0ZWEgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3R3b3BoYXNlLmMKaW5kZXggYWIxY2JkNjdiYWMuLmYwN2NkYWUwMzI1IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMKQEAgLTEwMiw2ICsxMDIsNyBAQAog I2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9j LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJzdG9yYWdl L3N1YnN5c3RlbXMuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUg InV0aWxzL2luamVjdGlvbl9wb2ludC5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgi CkBAIC0xODcsOCArMTg4LDE2IEBAIHR5cGVkZWYgc3RydWN0IFR3b1BoYXNlU3RhdGVEYXRh CiAJR2xvYmFsVHJhbnNhY3Rpb24gcHJlcFhhY3RzW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07 CiB9IFR3b1BoYXNlU3RhdGVEYXRhOwogCitzdGF0aWMgdm9pZCBUd29QaGFzZVNobWVtUmVx dWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgVHdvUGhhc2VTaG1lbUluaXQodm9pZCAq YXJnKTsKKwogc3RhdGljIFR3b1BoYXNlU3RhdGVEYXRhICpUd29QaGFzZVN0YXRlOwogCitj b25zdCBTaG1lbUNhbGxiYWNrcyBUd29QaGFzZVNobWVtQ2FsbGJhY2tzID0geworCS5yZXF1 ZXN0X2ZuID0gVHdvUGhhc2VTaG1lbVJlcXVlc3QsCisJLmluaXRfZm4gPSBUd29QaGFzZVNo bWVtSW5pdCwKK307CisKIC8qCiAgKiBHbG9iYWwgdHJhbnNhY3Rpb24gZW50cnkgY3VycmVu dGx5IGxvY2tlZCBieSB1cywgaWYgYW55LiAgTm90ZSB0aGF0IGFueQogICogYWNjZXNzIHRv IHRoZSBlbnRyeSBwb2ludGVkIHRvIGJ5IHRoaXMgdmFyaWFibGUgbXVzdCBiZSBwcm90ZWN0 ZWQgYnkKQEAgLTIzNCwxMSArMjQzLDEyIEBAIHN0YXRpYyB2b2lkIFJlbW92ZVR3b1BoYXNl RmlsZShGdWxsVHJhbnNhY3Rpb25JZCBmeGlkLCBib29sIGdpdmVXYXJuaW5nKTsKIHN0YXRp YyB2b2lkIFJlY3JlYXRlVHdvUGhhc2VGaWxlKEZ1bGxUcmFuc2FjdGlvbklkIGZ4aWQsIHZv aWQgKmNvbnRlbnQsIGludCBsZW4pOwogCiAvKgotICogSW5pdGlhbGl6YXRpb24gb2Ygc2hh cmVkIG1lbW9yeQorICogUmVnaXN0ZXIgc2hhcmVkIG1lbW9yeSBmb3IgdHdvLXBoYXNlIHN0 YXRlLgogICovCi1TaXplCi1Ud29QaGFzZVNobWVtU2l6ZSh2b2lkKQorc3RhdGljIHZvaWQK K1R3b1BoYXNlU2htZW1SZXF1ZXN0KHZvaWQgKmFyZykKIHsKKwlzdGF0aWMgU2htZW1TdHJ1 Y3REZXNjIFR3b1BoYXNlU2htZW1EZXNjOwogCVNpemUJCXNpemU7CiAKIAkvKiBOZWVkIHRo ZSBmaXhlZCBzdHJ1Y3QsIHRoZSBhcnJheSBvZiBwb2ludGVycywgYW5kIHRoZSBHVEQgc3Ry dWN0cyAqLwpAQCAtMjQ4LDQ2ICsyNTgsNDEgQEAgVHdvUGhhc2VTaG1lbVNpemUodm9pZCkK IAlzaXplID0gTUFYQUxJR04oc2l6ZSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9z aXplKG1heF9wcmVwYXJlZF94YWN0cywKIAkJCQkJCQkJICAgc2l6ZW9mKEdsb2JhbFRyYW5z YWN0aW9uRGF0YSkpKTsKLQotCXJldHVybiBzaXplOworCVNobWVtUmVxdWVzdFN0cnVjdCgm VHdvUGhhc2VTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0gIlByZXBhcmVkIFRyYW5zYWN0 aW9uIFRhYmxlIiwKKwkJCQkJICAgLnNpemUgPSBzaXplLAorCQkJCQkgICAucHRyID0gKHZv aWQgKiopICZUd29QaGFzZVN0YXRlLAorCQkpOwogfQogCi12b2lkCi1Ud29QaGFzZVNobWVt SW5pdCh2b2lkKQorLyoKKyAqIEluaXRpYWxpemUgc2hhcmVkIG1lbW9yeSBmb3IgdHdvLXBo YXNlIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorVHdvUGhhc2VTaG1lbUluaXQodm9pZCAq YXJnKQogewotCWJvb2wJCWZvdW5kOwotCi0JVHdvUGhhc2VTdGF0ZSA9IFNobWVtSW5pdFN0 cnVjdCgiUHJlcGFyZWQgVHJhbnNhY3Rpb24gVGFibGUiLAotCQkJCQkJCQkJVHdvUGhhc2VT aG1lbVNpemUoKSwKLQkJCQkJCQkJCSZmb3VuZCk7Ci0JaWYgKCFJc1VuZGVyUG9zdG1hc3Rl cikKLQl7Ci0JCUdsb2JhbFRyYW5zYWN0aW9uIGd4YWN0czsKLQkJaW50CQkJaTsKKwlHbG9i YWxUcmFuc2FjdGlvbiBneGFjdHM7CisJaW50CQkJaTsKIAotCQlBc3NlcnQoIWZvdW5kKTsK LQkJVHdvUGhhc2VTdGF0ZS0+ZnJlZUdYYWN0cyA9IE5VTEw7Ci0JCVR3b1BoYXNlU3RhdGUt Pm51bVByZXBYYWN0cyA9IDA7CisJVHdvUGhhc2VTdGF0ZS0+ZnJlZUdYYWN0cyA9IE5VTEw7 CisJVHdvUGhhc2VTdGF0ZS0+bnVtUHJlcFhhY3RzID0gMDsKIAotCQkvKgotCQkgKiBJbml0 aWFsaXplIHRoZSBsaW5rZWQgbGlzdCBvZiBmcmVlIEdsb2JhbFRyYW5zYWN0aW9uRGF0YSBz dHJ1Y3RzCi0JCSAqLwotCQlneGFjdHMgPSAoR2xvYmFsVHJhbnNhY3Rpb24pCi0JCQkoKGNo YXIgKikgVHdvUGhhc2VTdGF0ZSArCi0JCQkgTUFYQUxJR04ob2Zmc2V0b2YoVHdvUGhhc2VT dGF0ZURhdGEsIHByZXBYYWN0cykgKwotCQkJCQkgIHNpemVvZihHbG9iYWxUcmFuc2FjdGlv bikgKiBtYXhfcHJlcGFyZWRfeGFjdHMpKTsKLQkJZm9yIChpID0gMDsgaSA8IG1heF9wcmVw YXJlZF94YWN0czsgaSsrKQotCQl7Ci0JCQkvKiBpbnNlcnQgaW50byBsaW5rZWQgbGlzdCAq LwotCQkJZ3hhY3RzW2ldLm5leHQgPSBUd29QaGFzZVN0YXRlLT5mcmVlR1hhY3RzOwotCQkJ VHdvUGhhc2VTdGF0ZS0+ZnJlZUdYYWN0cyA9ICZneGFjdHNbaV07CisJLyoKKwkgKiBJbml0 aWFsaXplIHRoZSBsaW5rZWQgbGlzdCBvZiBmcmVlIEdsb2JhbFRyYW5zYWN0aW9uRGF0YSBz dHJ1Y3RzCisJICovCisJZ3hhY3RzID0gKEdsb2JhbFRyYW5zYWN0aW9uKQorCQkoKGNoYXIg KikgVHdvUGhhc2VTdGF0ZSArCisJCSBNQVhBTElHTihvZmZzZXRvZihUd29QaGFzZVN0YXRl RGF0YSwgcHJlcFhhY3RzKSArCisJCQkJICBzaXplb2YoR2xvYmFsVHJhbnNhY3Rpb24pICog bWF4X3ByZXBhcmVkX3hhY3RzKSk7CisJZm9yIChpID0gMDsgaSA8IG1heF9wcmVwYXJlZF94 YWN0czsgaSsrKQorCXsKKwkJLyogaW5zZXJ0IGludG8gbGlua2VkIGxpc3QgKi8KKwkJZ3hh Y3RzW2ldLm5leHQgPSBUd29QaGFzZVN0YXRlLT5mcmVlR1hhY3RzOworCQlUd29QaGFzZVN0 YXRlLT5mcmVlR1hhY3RzID0gJmd4YWN0c1tpXTsKIAotCQkJLyogYXNzb2NpYXRlIGl0IHdp dGggYSBQR1BST0MgYXNzaWduZWQgYnkgUHJvY0dsb2JhbFNobWVtSW5pdCAqLwotCQkJZ3hh Y3RzW2ldLnBncHJvY25vID0gR2V0TnVtYmVyRnJvbVBHUHJvYygmUHJlcGFyZWRYYWN0UHJv Y3NbaV0pOwotCQl9CisJCS8qIGFzc29jaWF0ZSBpdCB3aXRoIGEgUEdQUk9DIGFzc2lnbmVk IGJ5IFByb2NHbG9iYWxTaG1lbUluaXQgKi8KKwkJZ3hhY3RzW2ldLnBncHJvY25vID0gR2V0 TnVtYmVyRnJvbVBHUHJvYygmUHJlcGFyZWRYYWN0UHJvY3NbaV0pOwogCX0KLQllbHNlCi0J CUFzc2VydChmb3VuZCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMK aW5kZXggMmMxYzZmODhiNzQuLjE5MDc4NmMwZDMwIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGxvZy5jCkBAIC05NCw2ICs5NCw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJy YXkuaCIKICNpbmNsdWRlICJzdG9yYWdlL3JlaW5pdC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv c3Bpbi5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgogI2luY2x1ZGUgInN0 b3JhZ2Uvc3luYy5oIgogI2luY2x1ZGUgInV0aWxzL2d1Y19ob29rcy5oIgogI2luY2x1ZGUg InV0aWxzL2d1Y190YWJsZXMuaCIKQEAgLTU2Niw2ICs1NjcsMTYgQEAgdHlwZWRlZiBlbnVt CiAJV0FMSU5TRVJUX1NQRUNJQUxfQ0hFQ0tQT0lOVAogfSBXYWxJbnNlcnRDbGFzczsKIAor c3RhdGljIHZvaWQgWExPR1NobWVtUmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQg WExPR1NobWVtSW5pdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgWExPR1NobWVtQXR0YWNo KHZvaWQgKmFyZyk7CisKK2NvbnN0IFNobWVtQ2FsbGJhY2tzIFhMT0dTaG1lbUNhbGxiYWNr cyA9IHsKKwkucmVxdWVzdF9mbiA9IFhMT0dTaG1lbVJlcXVlc3QsCisJLmluaXRfZm4gPSBY TE9HU2htZW1Jbml0LAorCS5hdHRhY2hfZm4gPSBYTE9HU2htZW1BdHRhY2gsCit9OworCiBz dGF0aWMgWExvZ0N0bERhdGEgKlhMb2dDdGwgPSBOVUxMOwogCiAvKiBhIHByaXZhdGUgY29w eSBvZiBYTG9nQ3RsLT5JbnNlcnQuV0FMSW5zZXJ0TG9ja3MsIGZvciBjb252ZW5pZW5jZSAq LwpAQCAtNTc0LDYgKzU4NSw3IEBAIHN0YXRpYyBXQUxJbnNlcnRMb2NrUGFkZGVkICpXQUxJ bnNlcnRMb2NrcyA9IE5VTEw7CiAvKgogICogV2UgbWFpbnRhaW4gYW4gaW1hZ2Ugb2YgcGdf Y29udHJvbCBpbiBzaGFyZWQgbWVtb3J5LgogICovCitzdGF0aWMgQ29udHJvbEZpbGVEYXRh ICpMb2NhbENvbnRyb2xGaWxlID0gTlVMTDsKIHN0YXRpYyBDb250cm9sRmlsZURhdGEgKkNv bnRyb2xGaWxlID0gTlVMTDsKIAogLyoKQEAgLTQ5MjMsNyArNDkzNSw4IEBAIHZvaWQKIExv Y2FsUHJvY2Vzc0NvbnRyb2xGaWxlKGJvb2wgcmVzZXQpCiB7CiAJQXNzZXJ0KHJlc2V0IHx8 IENvbnRyb2xGaWxlID09IE5VTEwpOwotCUNvbnRyb2xGaWxlID0gcGFsbG9jX29iamVjdChD b250cm9sRmlsZURhdGEpOworCUxvY2FsQ29udHJvbEZpbGUgPSBwYWxsb2Nfb2JqZWN0KENv bnRyb2xGaWxlRGF0YSk7CisJQ29udHJvbEZpbGUgPSBMb2NhbENvbnRyb2xGaWxlOwogCVJl YWRDb250cm9sRmlsZSgpOwogfQogCkBAIC00OTM5LDExICs0OTUyLDEzIEBAIEdldEFjdGl2 ZVdhbExldmVsT25TdGFuZGJ5KHZvaWQpCiB9CiAKIC8qCi0gKiBJbml0aWFsaXphdGlvbiBv ZiBzaGFyZWQgbWVtb3J5IGZvciBYTE9HCisgKiBSZWdpc3RlciBzaGFyZWQgbWVtb3J5IGZv ciBYTE9HLgogICovCi1TaXplCi1YTE9HU2htZW1TaXplKHZvaWQpCitzdGF0aWMgdm9pZAor WExPR1NobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7CisJc3RhdGljIFNobWVtU3RydWN0RGVz YyBYTG9nQ3RsU2htZW1EZXNjOworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgQ29udHJvbEZp bGVTaG1lbURlc2M7CiAJU2l6ZQkJc2l6ZTsKIAogCS8qCkBAIC00OTgyLDIzICs0OTk3LDI2 IEBAIFhMT0dTaG1lbVNpemUodm9pZCkKIAkvKiBhbmQgdGhlIGJ1ZmZlcnMgdGhlbXNlbHZl cyAqLwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShYTE9HX0JMQ0tTWiwgWExP R2J1ZmZlcnMpKTsKIAotCS8qCi0JICogTm90ZTogd2UgZG9uJ3QgY291bnQgQ29udHJvbEZp bGVEYXRhLCBpdCBjb21lcyBvdXQgb2YgdGhlICJzbG9wIGZhY3RvciIKLQkgKiBhZGRlZCBi eSBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzLiAgVGhpcyBsZXRzIHVzIHVzZSB0 aGlzCi0JICogcm91dGluZSBhZ2FpbiBiZWxvdyB0byBjb21wdXRlIHRoZSBhY3R1YWwgYWxs b2NhdGlvbiBzaXplLgotCSAqLwotCi0JcmV0dXJuIHNpemU7CisJU2htZW1SZXF1ZXN0U3Ry dWN0KCZYTG9nQ3RsU2htZW1EZXNjLAorCQkJCQkgICAubmFtZSA9ICJYTE9HIEN0bCIsCisJ CQkJCSAgIC5zaXplID0gc2l6ZSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmWExvZ0N0 bCwKKwkJKTsKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJkNvbnRyb2xGaWxlU2htZW1EZXNjLAor CQkJCQkgICAubmFtZSA9ICJDb250cm9sIEZpbGUiLAorCQkJCQkgICAuc2l6ZSA9IHNpemVv ZihDb250cm9sRmlsZURhdGEpLAorCQkJCQkgICAucHRyID0gKHZvaWQgKiopICZDb250cm9s RmlsZSwKKwkJKTsKIH0KIAotdm9pZAotWExPR1NobWVtSW5pdCh2b2lkKQorLyoKKyAqIFhM T0dTaG1lbUluaXQgLSBpbml0aWFsaXplIHRoZSBYTG9nQ3RsIHNoYXJlZCBtZW1vcnkgYXJl YS4KKyAqLworc3RhdGljIHZvaWQKK1hMT0dTaG1lbUluaXQodm9pZCAqYXJnKQogewotCWJv b2wJCWZvdW5kQ0ZpbGUsCi0JCQkJZm91bmRYTG9nOwogCWNoYXIJICAgKmFsbG9jcHRyOwog CWludAkJCWk7Ci0JQ29udHJvbEZpbGVEYXRhICpsb2NhbENvbnRyb2xGaWxlOwogCiAjaWZk ZWYgV0FMX0RFQlVHCiAKQEAgLTUwMTYsMzYgKzUwMzQsMTcgQEAgWExPR1NobWVtSW5pdCh2 b2lkKQogCX0KICNlbmRpZgogCi0KLQlYTG9nQ3RsID0gKFhMb2dDdGxEYXRhICopCi0JCVNo bWVtSW5pdFN0cnVjdCgiWExPRyBDdGwiLCBYTE9HU2htZW1TaXplKCksICZmb3VuZFhMb2cp OwotCi0JbG9jYWxDb250cm9sRmlsZSA9IENvbnRyb2xGaWxlOwotCUNvbnRyb2xGaWxlID0g KENvbnRyb2xGaWxlRGF0YSAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIkNvbnRyb2wgRmlsZSIs IHNpemVvZihDb250cm9sRmlsZURhdGEpLCAmZm91bmRDRmlsZSk7Ci0KLQlpZiAoZm91bmRD RmlsZSB8fCBmb3VuZFhMb2cpCi0JewotCQkvKiBib3RoIHNob3VsZCBiZSBwcmVzZW50IG9y IG5laXRoZXIgKi8KLQkJQXNzZXJ0KGZvdW5kQ0ZpbGUgJiYgZm91bmRYTG9nKTsKLQotCQkv KiBJbml0aWFsaXplIGxvY2FsIGNvcHkgb2YgV0FMSW5zZXJ0TG9ja3MgKi8KLQkJV0FMSW5z ZXJ0TG9ja3MgPSBYTG9nQ3RsLT5JbnNlcnQuV0FMSW5zZXJ0TG9ja3M7Ci0KLQkJaWYgKGxv Y2FsQ29udHJvbEZpbGUpCi0JCQlwZnJlZShsb2NhbENvbnRyb2xGaWxlKTsKLQkJcmV0dXJu OwotCX0KIAltZW1zZXQoWExvZ0N0bCwgMCwgc2l6ZW9mKFhMb2dDdGxEYXRhKSk7CiAKIAkv KgogCSAqIEFscmVhZHkgaGF2ZSByZWFkIGNvbnRyb2wgZmlsZSBsb2NhbGx5LCB1bmxlc3Mg aW4gYm9vdHN0cmFwIG1vZGUuIE1vdmUKIAkgKiBjb250ZW50cyBpbnRvIHNoYXJlZCBtZW1v cnkuCiAJICovCi0JaWYgKGxvY2FsQ29udHJvbEZpbGUpCisJaWYgKExvY2FsQ29udHJvbEZp bGUpCiAJewotCQltZW1jcHkoQ29udHJvbEZpbGUsIGxvY2FsQ29udHJvbEZpbGUsIHNpemVv ZihDb250cm9sRmlsZURhdGEpKTsKLQkJcGZyZWUobG9jYWxDb250cm9sRmlsZSk7CisJCW1l bWNweShDb250cm9sRmlsZSwgTG9jYWxDb250cm9sRmlsZSwgc2l6ZW9mKENvbnRyb2xGaWxl RGF0YSkpOworCQlwZnJlZShMb2NhbENvbnRyb2xGaWxlKTsKKwkJTG9jYWxDb250cm9sRmls ZSA9IE5VTEw7CiAJfQogCiAJLyoKQEAgLTUxMDIsNiArNTEwMSwxNSBAQCBYTE9HU2htZW1J bml0KHZvaWQpCiAJcGdfYXRvbWljX2luaXRfdTY0KCZYTG9nQ3RsLT51bmxvZ2dlZExTTiwg SW52YWxpZFhMb2dSZWNQdHIpOwogfQogCisvKgorICogWExPR1NobWVtQXR0YWNoIC0gc2V0 IHVwIFdBTEluc2VydExvY2tzIHBvaW50ZXIgYWZ0ZXIgYXR0YWNoaW5nLgorICovCitzdGF0 aWMgdm9pZAorWExPR1NobWVtQXR0YWNoKHZvaWQgKmFyZykKK3sKKwlXQUxJbnNlcnRMb2Nr cyA9IFhMb2dDdGwtPkluc2VydC5XQUxJbnNlcnRMb2NrczsKK30KKwogLyoKICAqIFRoaXMg ZnVuYyBtdXN0IGJlIGNhbGxlZCBPTkNFIG9uIHN5c3RlbSBpbnN0YWxsLiAgSXQgY3JlYXRl cyBwZ19jb250cm9sCiAgKiBhbmQgdGhlIGluaXRpYWwgWExPRyBzZWdtZW50LgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3ByZWZldGNoZXIuYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dwcmVmZXRjaGVyLmMKaW5kZXggYzIzNWVj YTdjNTEuLjVjMmQzY2RjZGM5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS94bG9ncHJlZmV0Y2hlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L3hsb2dwcmVmZXRjaGVyLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJzdG9yYWdl L2ZkLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv c21nci5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgogI2luY2x1ZGUgInV0 aWxzL2ZtZ3Jwcm90b3MuaCIKICNpbmNsdWRlICJ1dGlscy9ndWNfaG9va3MuaCIKICNpbmNs dWRlICJ1dGlscy9oc2VhcmNoLmgiCkBAIC0yMDAsNiArMjAxLDE0IEBAIHN0YXRpYyBMc25S ZWFkUXVldWVOZXh0U3RhdHVzIFhMb2dQcmVmZXRjaGVyTmV4dEJsb2NrKHVpbnRwdHJfdCBw Z3NyX3ByaXZhdGUsCiAKIHN0YXRpYyBYTG9nUHJlZmV0Y2hTdGF0cyAqU2hhcmVkU3RhdHM7 CiAKK3N0YXRpYyB2b2lkIFhMb2dQcmVmZXRjaFNobWVtUmVxdWVzdCh2b2lkICphcmcpOwor c3RhdGljIHZvaWQgWExvZ1ByZWZldGNoU2htZW1Jbml0KHZvaWQgKmFyZyk7CisKK2NvbnN0 IFNobWVtQ2FsbGJhY2tzIFhMb2dQcmVmZXRjaFNobWVtQ2FsbGJhY2tzID0geworCS5yZXF1 ZXN0X2ZuID0gWExvZ1ByZWZldGNoU2htZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gWExvZ1By ZWZldGNoU2htZW1Jbml0LAorfTsKKwogc3RhdGljIGlubGluZSBMc25SZWFkUXVldWUgKgog bHJxX2FsbG9jKHVpbnQzMiBtYXhfZGlzdGFuY2UsCiAJCSAgdWludDMyIG1heF9pbmZsaWdo dCwKQEAgLTI5MiwxMCArMzAxLDI4IEBAIGxycV9jb21wbGV0ZV9sc24oTHNuUmVhZFF1ZXVl ICpscnEsIFhMb2dSZWNQdHIgbHNuKQogCQlscnFfcHJlZmV0Y2gobHJxKTsKIH0KIAotc2l6 ZV90Ci1YTG9nUHJlZmV0Y2hTaG1lbVNpemUodm9pZCkKK3N0YXRpYyB2b2lkCitYTG9nUHJl ZmV0Y2hTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQoreworCXN0YXRpYyBTaG1lbVN0cnVjdERl c2MgWExvZ1ByZWZldGNoU2htZW1EZXNjOworCisJU2htZW1SZXF1ZXN0U3RydWN0KCZYTG9n UHJlZmV0Y2hTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0gIlhMb2dQcmVmZXRjaFN0YXRz IiwKKwkJCQkJICAgLnNpemUgPSBzaXplb2YoWExvZ1ByZWZldGNoU3RhdHMpLAorCQkJCQkg ICAucHRyID0gKHZvaWQgKiopICZTaGFyZWRTdGF0cywKKwkJKTsKK30KKworc3RhdGljIHZv aWQKK1hMb2dQcmVmZXRjaFNobWVtSW5pdCh2b2lkICphcmcpCiB7Ci0JcmV0dXJuIHNpemVv ZihYTG9nUHJlZmV0Y2hTdGF0cyk7CisJcGdfYXRvbWljX2luaXRfdTY0KCZTaGFyZWRTdGF0 cy0+cmVzZXRfdGltZSwgR2V0Q3VycmVudFRpbWVzdGFtcCgpKTsKKwlwZ19hdG9taWNfaW5p dF91NjQoJlNoYXJlZFN0YXRzLT5wcmVmZXRjaCwgMCk7CisJcGdfYXRvbWljX2luaXRfdTY0 KCZTaGFyZWRTdGF0cy0+aGl0LCAwKTsKKwlwZ19hdG9taWNfaW5pdF91NjQoJlNoYXJlZFN0 YXRzLT5za2lwX2luaXQsIDApOworCXBnX2F0b21pY19pbml0X3U2NCgmU2hhcmVkU3RhdHMt PnNraXBfbmV3LCAwKTsKKwlwZ19hdG9taWNfaW5pdF91NjQoJlNoYXJlZFN0YXRzLT5za2lw X2ZwdywgMCk7CisJcGdfYXRvbWljX2luaXRfdTY0KCZTaGFyZWRTdGF0cy0+c2tpcF9yZXAs IDApOwogfQogCiAvKgpAQCAtMzEzLDI3ICszNDAsNiBAQCBYTG9nUHJlZmV0Y2hSZXNldFN0 YXRzKHZvaWQpCiAJcGdfYXRvbWljX3dyaXRlX3U2NCgmU2hhcmVkU3RhdHMtPnNraXBfcmVw LCAwKTsKIH0KIAotdm9pZAotWExvZ1ByZWZldGNoU2htZW1Jbml0KHZvaWQpCi17Ci0JYm9v bAkJZm91bmQ7Ci0KLQlTaGFyZWRTdGF0cyA9IChYTG9nUHJlZmV0Y2hTdGF0cyAqKQotCQlT aG1lbUluaXRTdHJ1Y3QoIlhMb2dQcmVmZXRjaFN0YXRzIiwKLQkJCQkJCXNpemVvZihYTG9n UHJlZmV0Y2hTdGF0cyksCi0JCQkJCQkmZm91bmQpOwotCi0JaWYgKCFmb3VuZCkKLQl7Ci0J CXBnX2F0b21pY19pbml0X3U2NCgmU2hhcmVkU3RhdHMtPnJlc2V0X3RpbWUsIEdldEN1cnJl bnRUaW1lc3RhbXAoKSk7Ci0JCXBnX2F0b21pY19pbml0X3U2NCgmU2hhcmVkU3RhdHMtPnBy ZWZldGNoLCAwKTsKLQkJcGdfYXRvbWljX2luaXRfdTY0KCZTaGFyZWRTdGF0cy0+aGl0LCAw KTsKLQkJcGdfYXRvbWljX2luaXRfdTY0KCZTaGFyZWRTdGF0cy0+c2tpcF9pbml0LCAwKTsK LQkJcGdfYXRvbWljX2luaXRfdTY0KCZTaGFyZWRTdGF0cy0+c2tpcF9uZXcsIDApOwotCQlw Z19hdG9taWNfaW5pdF91NjQoJlNoYXJlZFN0YXRzLT5za2lwX2ZwdywgMCk7Ci0JCXBnX2F0 b21pY19pbml0X3U2NCgmU2hhcmVkU3RhdHMtPnNraXBfcmVwLCAwKTsKLQl9Ci19CiAKIC8q CiAgKiBDYWxsZWQgd2hlbiBhbnkgR1VDIGlzIGNoYW5nZWQgdGhhdCBhZmZlY3RzIHByZWZl dGNoaW5nLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3Jl Y292ZXJ5LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwpp bmRleCBmZDFjMzZkMDYxZC4uZTNkMDRlMWYwZGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCkBAIC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSAi c3RvcmFnZS9wbXNpZ25hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCiAj aW5jbHVkZSAic3RvcmFnZS9zcGluLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1z LmgiCiAjaW5jbHVkZSAidXRpbHMvZGF0ZXRpbWUuaCIKICNpbmNsdWRlICJ1dGlscy9mbWdy cHJvdG9zLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjX2hvb2tzLmgiCkBAIC0zMDcsNiArMzA4 LDE0IEBAIHN0YXRpYyBjaGFyICpwcmltYXJ5X2ltYWdlX21hc2tlZCA9IE5VTEw7CiAKIFhM b2dSZWNvdmVyeUN0bERhdGEgKlhMb2dSZWNvdmVyeUN0bCA9IE5VTEw7CiAKK3N0YXRpYyB2 b2lkIFhMb2dSZWNvdmVyeVNobWVtUmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQg WExvZ1JlY292ZXJ5U2htZW1Jbml0KHZvaWQgKmFyZyk7CisKK2NvbnN0IFNobWVtQ2FsbGJh Y2tzIFhMb2dSZWNvdmVyeVNobWVtQ2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gWExv Z1JlY292ZXJ5U2htZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gWExvZ1JlY292ZXJ5U2htZW1J bml0LAorfTsKKwogLyoKICAqIGFib3J0ZWRSZWNQdHIgaXMgdGhlIHN0YXJ0IHBvaW50ZXIg b2YgYSBicm9rZW4gcmVjb3JkIGF0IGVuZCBvZiBXQUwgd2hlbgogICogcmVjb3ZlcnkgY29t cGxldGVzOyBtaXNzaW5nQ29udHJlY1B0ciBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIGZpcnN0 CkBAIC0zODUsMjggKzM5NCwyMyBAQCBzdGF0aWMgdm9pZCBTZXRDdXJyZW50Q2h1bmtTdGFy dFRpbWUoVGltZXN0YW1wVHogeHRpbWUpOwogc3RhdGljIHZvaWQgU2V0TGF0ZXN0WFRpbWUo VGltZXN0YW1wVHogeHRpbWUpOwogCiAvKgotICogSW5pdGlhbGl6YXRpb24gb2Ygc2hhcmVk IG1lbW9yeSBmb3IgV0FMIHJlY292ZXJ5CisgKiBSZWdpc3RlciBzaGFyZWQgbWVtb3J5IGZv ciBXQUwgcmVjb3ZlcnkKICAqLwotU2l6ZQotWExvZ1JlY292ZXJ5U2htZW1TaXplKHZvaWQp CitzdGF0aWMgdm9pZAorWExvZ1JlY292ZXJ5U2htZW1SZXF1ZXN0KHZvaWQgKmFyZykKIHsK LQlTaXplCQlzaXplOwotCi0JLyogWExvZ1JlY292ZXJ5Q3RsICovCi0Jc2l6ZSA9IHNpemVv ZihYTG9nUmVjb3ZlcnlDdGxEYXRhKTsKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIFhMb2dS ZWNvdmVyeVNobWVtRGVzYzsKIAotCXJldHVybiBzaXplOworCVNobWVtUmVxdWVzdFN0cnVj dCgmWExvZ1JlY292ZXJ5U2htZW1EZXNjLAorCQkJCQkgICAubmFtZSA9ICJYTE9HIFJlY292 ZXJ5IEN0bCIsCisJCQkJCSAgIC5zaXplID0gc2l6ZW9mKFhMb2dSZWNvdmVyeUN0bERhdGEp LAorCQkJCQkgICAucHRyID0gKHZvaWQgKiopICZYTG9nUmVjb3ZlcnlDdGwsCisJCSk7CiB9 CiAKLXZvaWQKLVhMb2dSZWNvdmVyeVNobWVtSW5pdCh2b2lkKQorc3RhdGljIHZvaWQKK1hM b2dSZWNvdmVyeVNobWVtSW5pdCh2b2lkICphcmcpCiB7Ci0JYm9vbAkJZm91bmQ7Ci0KLQlY TG9nUmVjb3ZlcnlDdGwgPSAoWExvZ1JlY292ZXJ5Q3RsRGF0YSAqKQotCQlTaG1lbUluaXRT dHJ1Y3QoIlhMT0cgUmVjb3ZlcnkgQ3RsIiwgWExvZ1JlY292ZXJ5U2htZW1TaXplKCksICZm b3VuZCk7Ci0JaWYgKGZvdW5kKQotCQlyZXR1cm47CiAJbWVtc2V0KFhMb2dSZWNvdmVyeUN0 bCwgMCwgc2l6ZW9mKFhMb2dSZWNvdmVyeUN0bERhdGEpKTsKIAogCVNwaW5Mb2NrSW5pdCgm WExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS94bG9nd2FpdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGxvZ3dhaXQuYwppbmRleCBiZjQ2MzA2NzdiNC4uM2FmOWYxMDEzM2MgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2d3YWl0LmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZ3dhaXQuYwpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1 ZGUgInN0b3JhZ2UvbGF0Y2guaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNs dWRlICJzdG9yYWdlL3NobWVtLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgi CiAjaW5jbHVkZSAidXRpbHMvZm1ncnByb3Rvcy5oIgogI2luY2x1ZGUgInV0aWxzL3BnX2xz bi5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKQEAgLTY4LDYgKzY5LDE0IEBAIHN0 YXRpYyBpbnQJd2FpdGxzbl9jbXAoY29uc3QgcGFpcmluZ2hlYXBfbm9kZSAqYSwgY29uc3Qg cGFpcmluZ2hlYXBfbm9kZSAqYiwKIAogc3RydWN0IFdhaXRMU05TdGF0ZSAqd2FpdExTTlN0 YXRlID0gTlVMTDsKIAorc3RhdGljIHZvaWQgV2FpdExTTlNobWVtUmVxdWVzdCh2b2lkICph cmcpOworc3RhdGljIHZvaWQgV2FpdExTTlNobWVtSW5pdCh2b2lkICphcmcpOworCitjb25z dCBTaG1lbUNhbGxiYWNrcyBXYWl0TFNOU2htZW1DYWxsYmFja3MgPSB7CisJLnJlcXVlc3Rf Zm4gPSBXYWl0TFNOU2htZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gV2FpdExTTlNobWVtSW5p dCwKK307CisKIC8qCiAgKiBXYWl0IGV2ZW50IGZvciBlYWNoIFdhaXRMU05UeXBlLCB1c2Vk IHdpdGggV2FpdExhdGNoKCkgdG8gcmVwb3J0CiAgKiB0aGUgd2FpdCBpbiBwZ19zdGF0X2Fj dGl2aXR5LgpAQCAtMTA5LDQxICsxMTgsMzYgQEAgR2V0Q3VycmVudExTTkZvcldhaXRUeXBl KFdhaXRMU05UeXBlIGxzblR5cGUpCiAJcGdfdW5yZWFjaGFibGUoKTsKIH0KIAotLyogUmVw b3J0IHRoZSBhbW91bnQgb2Ygc2hhcmVkIG1lbW9yeSBzcGFjZSBuZWVkZWQgZm9yIFdhaXRM U05TdGF0ZS4gKi8KLVNpemUKLVdhaXRMU05TaG1lbVNpemUodm9pZCkKKy8qIFJlZ2lzdGVy IHRoZSBzaGFyZWQgbWVtb3J5IHNwYWNlIG5lZWRlZCBmb3IgV2FpdExTTlN0YXRlLiAqLwor c3RhdGljIHZvaWQKK1dhaXRMU05TaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQogeworCXN0YXRp YyBTaG1lbVN0cnVjdERlc2MgV2FpdExTTlNobWVtRGVzYzsKIAlTaXplCQlzaXplOwogCiAJ c2l6ZSA9IG9mZnNldG9mKFdhaXRMU05TdGF0ZSwgcHJvY0luZm9zKTsKIAlzaXplID0gYWRk X3NpemUoc2l6ZSwgbXVsX3NpemUoTWF4QmFja2VuZHMgKyBOVU1fQVVYSUxJQVJZX1BST0NT LCBzaXplb2YoV2FpdExTTlByb2NJbmZvKSkpOwotCXJldHVybiBzaXplOworCVNobWVtUmVx dWVzdFN0cnVjdCgmV2FpdExTTlNobWVtRGVzYywKKwkJCQkJICAgLm5hbWUgPSAiV2FpdExT TlN0YXRlIiwKKwkJCQkJICAgLnNpemUgPSBzaXplLAorCQkJCQkgICAucHRyID0gKHZvaWQg KiopICZ3YWl0TFNOU3RhdGUsCisJCSk7CiB9CiAKIC8qIEluaXRpYWxpemUgdGhlIFdhaXRM U05TdGF0ZSBpbiB0aGUgc2hhcmVkIG1lbW9yeS4gKi8KLXZvaWQKLVdhaXRMU05TaG1lbUlu aXQodm9pZCkKK3N0YXRpYyB2b2lkCitXYWl0TFNOU2htZW1Jbml0KHZvaWQgKmFyZykKIHsK LQlib29sCQlmb3VuZDsKLQotCXdhaXRMU05TdGF0ZSA9IChXYWl0TFNOU3RhdGUgKikgU2ht ZW1Jbml0U3RydWN0KCJXYWl0TFNOU3RhdGUiLAotCQkJCQkJCQkJCQkJCVdhaXRMU05TaG1l bVNpemUoKSwKLQkJCQkJCQkJCQkJCQkmZm91bmQpOwotCWlmICghZm91bmQpCisJLyogSW5p dGlhbGl6ZSBoZWFwcyBhbmQgdHJhY2tpbmcgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IFdB SVRfTFNOX1RZUEVfQ09VTlQ7IGkrKykKIAl7Ci0JCWludAkJCWk7Ci0KLQkJLyogSW5pdGlh bGl6ZSBoZWFwcyBhbmQgdHJhY2tpbmcgKi8KLQkJZm9yIChpID0gMDsgaSA8IFdBSVRfTFNO X1RZUEVfQ09VTlQ7IGkrKykKLQkJewotCQkJcGdfYXRvbWljX2luaXRfdTY0KCZ3YWl0TFNO U3RhdGUtPm1pbldhaXRlZExTTltpXSwgUEdfVUlOVDY0X01BWCk7Ci0JCQlwYWlyaW5naGVh cF9pbml0aWFsaXplKCZ3YWl0TFNOU3RhdGUtPndhaXRlcnNIZWFwW2ldLCB3YWl0bHNuX2Nt cCwgTlVMTCk7Ci0JCX0KLQotCQkvKiBJbml0aWFsaXplIHByb2Nlc3MgaW5mbyBhcnJheSAq LwotCQltZW1zZXQoJndhaXRMU05TdGF0ZS0+cHJvY0luZm9zLCAwLAotCQkJICAgKE1heEJh Y2tlbmRzICsgTlVNX0FVWElMSUFSWV9QUk9DUykgKiBzaXplb2YoV2FpdExTTlByb2NJbmZv KSk7CisJCXBnX2F0b21pY19pbml0X3U2NCgmd2FpdExTTlN0YXRlLT5taW5XYWl0ZWRMU05b aV0sIFBHX1VJTlQ2NF9NQVgpOworCQlwYWlyaW5naGVhcF9pbml0aWFsaXplKCZ3YWl0TFNO U3RhdGUtPndhaXRlcnNIZWFwW2ldLCB3YWl0bHNuX2NtcCwgTlVMTCk7CiAJfQorCisJLyog SW5pdGlhbGl6ZSBwcm9jZXNzIGluZm8gYXJyYXkgKi8KKwltZW1zZXQoJndhaXRMU05TdGF0 ZS0+cHJvY0luZm9zLCAwLAorCQkgICAoTWF4QmFja2VuZHMgKyBOVU1fQVVYSUxJQVJZX1BS T0NTKSAqIHNpemVvZihXYWl0TFNOUHJvY0luZm8pKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9hdXRvdmFjdXVtLmMKaW5kZXggNjY5NGY0ODUyMTYuLmY4OGY1YWFmNzY3IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYworKysgYi9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYwpAQCAtOTgsNiArOTgsNyBAQAog I2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3NpZ25h bC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc21nci5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Vi c3lzdGVtcy5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGls cy9mbWdyb2lkcy5oIgogI2luY2x1ZGUgInV0aWxzL2ZtZ3Jwcm90b3MuaCIKQEAgLTMwOSw2 ICszMTAsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QKIAogc3RhdGljIEF1dG9WYWN1dW1TaG1lbVN0 cnVjdCAqQXV0b1ZhY3V1bVNobWVtOwogCitzdGF0aWMgdm9pZCBBdXRvVmFjdXVtU2htZW1S ZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBBdXRvVmFjdXVtU2htZW1Jbml0KHZv aWQgKmFyZyk7CisKK2NvbnN0IFNobWVtQ2FsbGJhY2tzIEF1dG9WYWN1dW1TaG1lbUNhbGxi YWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9IEF1dG9WYWN1dW1TaG1lbVJlcXVlc3QsCisJLmlu aXRfZm4gPSBBdXRvVmFjdXVtU2htZW1Jbml0LAorfTsKKwogLyoKICAqIHRoZSBkYXRhYmFz ZSBsaXN0IChvZiBhdmxfZGJhc2UgZWxlbWVudHMpIGluIHRoZSBsYXVuY2hlciwgYW5kIHRo ZSBjb250ZXh0CiAgKiB0aGF0IGNvbnRhaW5zIGl0CkBAIC0zNTQzLDEyICszNTUyLDEzIEBA IGF1dG92YWNfaW5pdCh2b2lkKQogfQogCiAvKgotICogQXV0b1ZhY3V1bVNobWVtU2l6ZQot ICoJCUNvbXB1dGUgc3BhY2UgbmVlZGVkIGZvciBhdXRvdmFjdXVtLXJlbGF0ZWQgc2hhcmVk IG1lbW9yeQorICogQXV0b1ZhY3V1bVNobWVtUmVxdWVzdAorICoJCVJlZ2lzdGVyIHNoYXJl ZCBtZW1vcnkgc3BhY2UgbmVlZGVkIGZvciBhdXRvdmFjdXVtCiAgKi8KLVNpemUKLUF1dG9W YWN1dW1TaG1lbVNpemUodm9pZCkKK3N0YXRpYyB2b2lkCitBdXRvVmFjdXVtU2htZW1SZXF1 ZXN0KHZvaWQgKmFyZykKIHsKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIEF1dG9WYWN1dW1T aG1lbURlc2M7CiAJU2l6ZQkJc2l6ZTsKIAogCS8qCkBAIC0zNTU4LDUzICszNTY4LDQyIEBA IEF1dG9WYWN1dW1TaG1lbVNpemUodm9pZCkKIAlzaXplID0gTUFYQUxJR04oc2l6ZSk7CiAJ c2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKGF1dG92YWN1dW1fd29ya2VyX3Nsb3Rz LAogCQkJCQkJCQkgICBzaXplb2YoV29ya2VySW5mb0RhdGEpKSk7Ci0JcmV0dXJuIHNpemU7 CisKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJkF1dG9WYWN1dW1TaG1lbURlc2MsCisJCQkJCSAg IC5uYW1lID0gIkF1dG9WYWN1dW0gRGF0YSIsCisJCQkJCSAgIC5zaXplID0gc2l6ZSwKKwkJ CQkJICAgLnB0ciA9ICh2b2lkICoqKSAmQXV0b1ZhY3V1bVNobWVtLAorCQkpOwogfQogCiAv KgogICogQXV0b1ZhY3V1bVNobWVtSW5pdAotICoJCUFsbG9jYXRlIGFuZCBpbml0aWFsaXpl IGF1dG92YWN1dW0tcmVsYXRlZCBzaGFyZWQgbWVtb3J5CisgKgkJSW5pdGlhbGl6ZSBhdXRv dmFjdXVtLXJlbGF0ZWQgc2hhcmVkIG1lbW9yeQogICovCi12b2lkCi1BdXRvVmFjdXVtU2ht ZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAorQXV0b1ZhY3V1bVNobWVtSW5pdCh2b2lkICph cmcpCiB7Ci0JYm9vbAkJZm91bmQ7Ci0KLQlBdXRvVmFjdXVtU2htZW0gPSAoQXV0b1ZhY3V1 bVNobWVtU3RydWN0ICopCi0JCVNobWVtSW5pdFN0cnVjdCgiQXV0b1ZhY3V1bSBEYXRhIiwK LQkJCQkJCUF1dG9WYWN1dW1TaG1lbVNpemUoKSwKLQkJCQkJCSZmb3VuZCk7Ci0KLQlpZiAo IUlzVW5kZXJQb3N0bWFzdGVyKQotCXsKLQkJV29ya2VySW5mbwl3b3JrZXI7Ci0JCWludAkJ CWk7CisJV29ya2VySW5mbwl3b3JrZXI7CiAKLQkJQXNzZXJ0KCFmb3VuZCk7Ci0KLQkJQXV0 b1ZhY3V1bVNobWVtLT5hdl9sYXVuY2hlcnBpZCA9IDA7Ci0JCWRjbGlzdF9pbml0KCZBdXRv VmFjdXVtU2htZW0tPmF2X2ZyZWVXb3JrZXJzKTsKLQkJZGxpc3RfaW5pdCgmQXV0b1ZhY3V1 bVNobWVtLT5hdl9ydW5uaW5nV29ya2Vycyk7Ci0JCUF1dG9WYWN1dW1TaG1lbS0+YXZfc3Rh cnRpbmdXb3JrZXIgPSBOVUxMOwotCQltZW1zZXQoQXV0b1ZhY3V1bVNobWVtLT5hdl93b3Jr SXRlbXMsIDAsCi0JCQkgICBzaXplb2YoQXV0b1ZhY3V1bVdvcmtJdGVtKSAqIE5VTV9XT1JL SVRFTVMpOwotCi0JCXdvcmtlciA9IChXb3JrZXJJbmZvKSAoKGNoYXIgKikgQXV0b1ZhY3V1 bVNobWVtICsKLQkJCQkJCQkgICBNQVhBTElHTihzaXplb2YoQXV0b1ZhY3V1bVNobWVtU3Ry dWN0KSkpOwotCi0JCS8qIGluaXRpYWxpemUgdGhlIFdvcmtlckluZm8gZnJlZSBsaXN0ICov Ci0JCWZvciAoaSA9IDA7IGkgPCBhdXRvdmFjdXVtX3dvcmtlcl9zbG90czsgaSsrKQotCQl7 Ci0JCQlkY2xpc3RfcHVzaF9oZWFkKCZBdXRvVmFjdXVtU2htZW0tPmF2X2ZyZWVXb3JrZXJz LAotCQkJCQkJCSAmd29ya2VyW2ldLndpX2xpbmtzKTsKLQkJCXBnX2F0b21pY19pbml0X2Zs YWcoJndvcmtlcltpXS53aV9kb2JhbGFuY2UpOwotCQl9CisJQXV0b1ZhY3V1bVNobWVtLT5h dl9sYXVuY2hlcnBpZCA9IDA7CisJZGNsaXN0X2luaXQoJkF1dG9WYWN1dW1TaG1lbS0+YXZf ZnJlZVdvcmtlcnMpOworCWRsaXN0X2luaXQoJkF1dG9WYWN1dW1TaG1lbS0+YXZfcnVubmlu Z1dvcmtlcnMpOworCUF1dG9WYWN1dW1TaG1lbS0+YXZfc3RhcnRpbmdXb3JrZXIgPSBOVUxM OworCW1lbXNldChBdXRvVmFjdXVtU2htZW0tPmF2X3dvcmtJdGVtcywgMCwKKwkJICAgc2l6 ZW9mKEF1dG9WYWN1dW1Xb3JrSXRlbSkgKiBOVU1fV09SS0lURU1TKTsKIAotCQlwZ19hdG9t aWNfaW5pdF91MzIoJkF1dG9WYWN1dW1TaG1lbS0+YXZfbndvcmtlcnNGb3JCYWxhbmNlLCAw KTsKKwl3b3JrZXIgPSAoV29ya2VySW5mbykgKChjaGFyICopIEF1dG9WYWN1dW1TaG1lbSAr CisJCQkJCQkgICBNQVhBTElHTihzaXplb2YoQXV0b1ZhY3V1bVNobWVtU3RydWN0KSkpOwog CisJLyogaW5pdGlhbGl6ZSB0aGUgV29ya2VySW5mbyBmcmVlIGxpc3QgKi8KKwlmb3IgKGlu dCBpID0gMDsgaSA8IGF1dG92YWN1dW1fd29ya2VyX3Nsb3RzOyBpKyspCisJeworCQlkY2xp c3RfcHVzaF9oZWFkKCZBdXRvVmFjdXVtU2htZW0tPmF2X2ZyZWVXb3JrZXJzLAorCQkJCQkJ ICZ3b3JrZXJbaV0ud2lfbGlua3MpOworCQlwZ19hdG9taWNfaW5pdF9mbGFnKCZ3b3JrZXJb aV0ud2lfZG9iYWxhbmNlKTsKIAl9Ci0JZWxzZQotCQlBc3NlcnQoZm91bmQpOworCisJcGdf YXRvbWljX2luaXRfdTMyKCZBdXRvVmFjdXVtU2htZW0tPmF2X253b3JrZXJzRm9yQmFsYW5j ZSwgMCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jn d29ya2VyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKaW5kZXggZjJh NjI0ODlkOWMuLmFlNTc3ZWFlMTNiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFz dGVyL2Jnd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5j CkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKICNp bmNsdWRlICJzdG9yYWdlL3Byb2NzaWduYWwuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NobWVt LmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidGNvcC90 Y29wcHJvdC5oIgogI2luY2x1ZGUgInV0aWxzL2FzY2lpLmgiCiAjaW5jbHVkZSAidXRpbHMv bWVtdXRpbHMuaCIKQEAgLTEwOSw2ICsxMTAsMTQgQEAgc3RydWN0IEJhY2tncm91bmRXb3Jr ZXJIYW5kbGUKIAogc3RhdGljIEJhY2tncm91bmRXb3JrZXJBcnJheSAqQmFja2dyb3VuZFdv cmtlckRhdGE7CiAKK3N0YXRpYyB2b2lkIEJhY2tncm91bmRXb3JrZXJTaG1lbVJlcXVlc3Qo dm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIEJhY2tncm91bmRXb3JrZXJTaG1lbUluaXQodm9p ZCAqYXJnKTsKKworY29uc3QgU2htZW1DYWxsYmFja3MgQmFja2dyb3VuZFdvcmtlclNobWVt Q2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gQmFja2dyb3VuZFdvcmtlclNobWVtUmVx dWVzdCwKKwkuaW5pdF9mbiA9IEJhY2tncm91bmRXb3JrZXJTaG1lbUluaXQsCit9OworCiAv KgogICogTGlzdCBvZiBpbnRlcm5hbCBiYWNrZ3JvdW5kIHdvcmtlciBlbnRyeSBwb2ludHMu ICBXZSBuZWVkIHRoaXMgZm9yCiAgKiByZWFzb25zIGV4cGxhaW5lZCBpbiBMb29rdXBCYWNr Z3JvdW5kV29ya2VyRnVuY3Rpb24oKSwgYmVsb3cuCkBAIC0xNTIsNzcgKzE2MSw3MSBAQCBz dGF0aWMgYmd3b3JrZXJfbWFpbl90eXBlIExvb2t1cEJhY2tncm91bmRXb3JrZXJGdW5jdGlv bihjb25zdCBjaGFyICpsaWJyYXJ5bmFtZQogCiAKIC8qCi0gKiBDYWxjdWxhdGUgc2hhcmVk IG1lbW9yeSBuZWVkZWQuCisgKiBSZWdpc3RlciBzaGFyZWQgbWVtb3J5IG5lZWRlZCBmb3Ig YmFja2dyb3VuZCB3b3JrZXJzLgogICovCi1TaXplCi1CYWNrZ3JvdW5kV29ya2VyU2htZW1T aXplKHZvaWQpCitzdGF0aWMgdm9pZAorQmFja2dyb3VuZFdvcmtlclNobWVtUmVxdWVzdCh2 b2lkICphcmcpCiB7CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBCYWNrZ3JvdW5kV29ya2Vy U2htZW1EZXNjOwogCVNpemUJCXNpemU7CiAKIAkvKiBBcnJheSBvZiB3b3JrZXJzIGlzIHZh cmlhYmx5IHNpemVkLiAqLwogCXNpemUgPSBvZmZzZXRvZihCYWNrZ3JvdW5kV29ya2VyQXJy YXksIHNsb3QpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShtYXhfd29ya2Vy X3Byb2Nlc3NlcywKIAkJCQkJCQkJICAgc2l6ZW9mKEJhY2tncm91bmRXb3JrZXJTbG90KSkp OwotCi0JcmV0dXJuIHNpemU7CisJU2htZW1SZXF1ZXN0U3RydWN0KCZCYWNrZ3JvdW5kV29y a2VyU2htZW1EZXNjLAorCQkJCQkgICAubmFtZSA9ICJCYWNrZ3JvdW5kIFdvcmtlciBEYXRh IiwKKwkJCQkJICAgLnNpemUgPSBzaXplLAorCQkJCQkgICAucHRyID0gKHZvaWQgKiopICZC YWNrZ3JvdW5kV29ya2VyRGF0YSwKKwkJKTsKIH0KIAogLyoKLSAqIEluaXRpYWxpemUgc2hh cmVkIG1lbW9yeS4KKyAqIEluaXRpYWxpemUgc2hhcmVkIG1lbW9yeSBmb3IgYmFja2dyb3Vu ZCB3b3JrZXJzLgogICovCi12b2lkCi1CYWNrZ3JvdW5kV29ya2VyU2htZW1Jbml0KHZvaWQp CitzdGF0aWMgdm9pZAorQmFja2dyb3VuZFdvcmtlclNobWVtSW5pdCh2b2lkICphcmcpCiB7 Ci0JYm9vbAkJZm91bmQ7Ci0KLQlCYWNrZ3JvdW5kV29ya2VyRGF0YSA9IFNobWVtSW5pdFN0 cnVjdCgiQmFja2dyb3VuZCBXb3JrZXIgRGF0YSIsCi0JCQkJCQkJCQkJICAgQmFja2dyb3Vu ZFdvcmtlclNobWVtU2l6ZSgpLAotCQkJCQkJCQkJCSAgICZmb3VuZCk7Ci0JaWYgKCFJc1Vu ZGVyUG9zdG1hc3RlcikKLQl7Ci0JCWRsaXN0X2l0ZXIJaXRlcjsKLQkJaW50CQkJc2xvdG5v ID0gMDsKKwlkbGlzdF9pdGVyCWl0ZXI7CisJaW50CQkJc2xvdG5vID0gMDsKIAotCQlCYWNr Z3JvdW5kV29ya2VyRGF0YS0+dG90YWxfc2xvdHMgPSBtYXhfd29ya2VyX3Byb2Nlc3NlczsK LQkJQmFja2dyb3VuZFdvcmtlckRhdGEtPnBhcmFsbGVsX3JlZ2lzdGVyX2NvdW50ID0gMDsK LQkJQmFja2dyb3VuZFdvcmtlckRhdGEtPnBhcmFsbGVsX3Rlcm1pbmF0ZV9jb3VudCA9IDA7 CisJQmFja2dyb3VuZFdvcmtlckRhdGEtPnRvdGFsX3Nsb3RzID0gbWF4X3dvcmtlcl9wcm9j ZXNzZXM7CisJQmFja2dyb3VuZFdvcmtlckRhdGEtPnBhcmFsbGVsX3JlZ2lzdGVyX2NvdW50 ID0gMDsKKwlCYWNrZ3JvdW5kV29ya2VyRGF0YS0+cGFyYWxsZWxfdGVybWluYXRlX2NvdW50 ID0gMDsKIAotCQkvKgotCQkgKiBDb3B5IGNvbnRlbnRzIG9mIHdvcmtlciBsaXN0IGludG8g c2hhcmVkIG1lbW9yeS4gIFJlY29yZCB0aGUgc2hhcmVkCi0JCSAqIG1lbW9yeSBzbG90IGFz c2lnbmVkIHRvIGVhY2ggd29ya2VyLiAgVGhpcyBlbnN1cmVzIGEgMS10by0xCi0JCSAqIGNv cnJlc3BvbmRlbmNlIGJldHdlZW4gdGhlIHBvc3RtYXN0ZXIncyBwcml2YXRlIGxpc3QgYW5k IHRoZSBhcnJheQotCQkgKiBpbiBzaGFyZWQgbWVtb3J5LgotCQkgKi8KLQkJZGxpc3RfZm9y ZWFjaChpdGVyLCAmQmFja2dyb3VuZFdvcmtlckxpc3QpCi0JCXsKLQkJCUJhY2tncm91bmRX b3JrZXJTbG90ICpzbG90ID0gJkJhY2tncm91bmRXb3JrZXJEYXRhLT5zbG90W3Nsb3Rub107 Ci0JCQlSZWdpc3RlcmVkQmdXb3JrZXIgKnJ3OworCS8qCisJICogQ29weSBjb250ZW50cyBv ZiB3b3JrZXIgbGlzdCBpbnRvIHNoYXJlZCBtZW1vcnkuICBSZWNvcmQgdGhlIHNoYXJlZAor CSAqIG1lbW9yeSBzbG90IGFzc2lnbmVkIHRvIGVhY2ggd29ya2VyLiAgVGhpcyBlbnN1cmVz IGEgMS10by0xCisJICogY29ycmVzcG9uZGVuY2UgYmV0d2VlbiB0aGUgcG9zdG1hc3Rlcidz IHByaXZhdGUgbGlzdCBhbmQgdGhlIGFycmF5IGluCisJICogc2hhcmVkIG1lbW9yeS4KKwkg Ki8KKwlkbGlzdF9mb3JlYWNoKGl0ZXIsICZCYWNrZ3JvdW5kV29ya2VyTGlzdCkKKwl7CisJ CUJhY2tncm91bmRXb3JrZXJTbG90ICpzbG90ID0gJkJhY2tncm91bmRXb3JrZXJEYXRhLT5z bG90W3Nsb3Rub107CisJCVJlZ2lzdGVyZWRCZ1dvcmtlciAqcnc7CiAKLQkJCXJ3ID0gZGxp c3RfY29udGFpbmVyKFJlZ2lzdGVyZWRCZ1dvcmtlciwgcndfbG5vZGUsIGl0ZXIuY3VyKTsK LQkJCUFzc2VydChzbG90bm8gPCBtYXhfd29ya2VyX3Byb2Nlc3Nlcyk7Ci0JCQlzbG90LT5p bl91c2UgPSB0cnVlOwotCQkJc2xvdC0+dGVybWluYXRlID0gZmFsc2U7Ci0JCQlzbG90LT5w aWQgPSBJbnZhbGlkUGlkOwotCQkJc2xvdC0+Z2VuZXJhdGlvbiA9IDA7Ci0JCQlydy0+cndf c2htZW1fc2xvdCA9IHNsb3RubzsKLQkJCXJ3LT5yd193b3JrZXIuYmd3X25vdGlmeV9waWQg PSAwOwkvKiBtaWdodCBiZSByZWluaXQgYWZ0ZXIgY3Jhc2ggKi8KLQkJCW1lbWNweSgmc2xv dC0+d29ya2VyLCAmcnctPnJ3X3dvcmtlciwgc2l6ZW9mKEJhY2tncm91bmRXb3JrZXIpKTsK LQkJCSsrc2xvdG5vOwotCQl9CisJCXJ3ID0gZGxpc3RfY29udGFpbmVyKFJlZ2lzdGVyZWRC Z1dvcmtlciwgcndfbG5vZGUsIGl0ZXIuY3VyKTsKKwkJQXNzZXJ0KHNsb3RubyA8IG1heF93 b3JrZXJfcHJvY2Vzc2VzKTsKKwkJc2xvdC0+aW5fdXNlID0gdHJ1ZTsKKwkJc2xvdC0+dGVy bWluYXRlID0gZmFsc2U7CisJCXNsb3QtPnBpZCA9IEludmFsaWRQaWQ7CisJCXNsb3QtPmdl bmVyYXRpb24gPSAwOworCQlydy0+cndfc2htZW1fc2xvdCA9IHNsb3RubzsKKwkJcnctPnJ3 X3dvcmtlci5iZ3dfbm90aWZ5X3BpZCA9IDA7CS8qIG1pZ2h0IGJlIHJlaW5pdCBhZnRlciBj cmFzaCAqLworCQltZW1jcHkoJnNsb3QtPndvcmtlciwgJnJ3LT5yd193b3JrZXIsIHNpemVv ZihCYWNrZ3JvdW5kV29ya2VyKSk7CisJCSsrc2xvdG5vOworCX0KIAotCQkvKgotCQkgKiBN YXJrIGFueSByZW1haW5pbmcgc2xvdHMgYXMgbm90IGluIHVzZS4KLQkJICovCi0JCXdoaWxl IChzbG90bm8gPCBtYXhfd29ya2VyX3Byb2Nlc3NlcykKLQkJewotCQkJQmFja2dyb3VuZFdv cmtlclNsb3QgKnNsb3QgPSAmQmFja2dyb3VuZFdvcmtlckRhdGEtPnNsb3Rbc2xvdG5vXTsK KwkvKgorCSAqIE1hcmsgYW55IHJlbWFpbmluZyBzbG90cyBhcyBub3QgaW4gdXNlLgorCSAq LworCXdoaWxlIChzbG90bm8gPCBtYXhfd29ya2VyX3Byb2Nlc3NlcykKKwl7CisJCUJhY2tn cm91bmRXb3JrZXJTbG90ICpzbG90ID0gJkJhY2tncm91bmRXb3JrZXJEYXRhLT5zbG90W3Ns b3Rub107CiAKLQkJCXNsb3QtPmluX3VzZSA9IGZhbHNlOwotCQkJKytzbG90bm87Ci0JCX0K KwkJc2xvdC0+aW5fdXNlID0gZmFsc2U7CisJCSsrc2xvdG5vOwogCX0KLQllbHNlCi0JCUFz c2VydChmb3VuZCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFz dGVyL2NoZWNrcG9pbnRlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9jaGVja3BvaW50 ZXIuYwppbmRleCAzYzk4MmM2ZmZhYy4uZGE2MmZjZWY0MjEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2ludGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9jaGVja3BvaW50ZXIuYwpAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgInN0 b3JhZ2Uvc2htZW0uaCIKICNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKICNpbmNsdWRlICJz dG9yYWdlL3NwaW4uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNs dWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9ndWMuaCIKICNpbmNsdWRlICJ1 dGlscy9tZW11dGlscy5oIgpAQCAtMTQzLDYgKzE0NCwxNCBAQCB0eXBlZGVmIHN0cnVjdAog CiBzdGF0aWMgQ2hlY2twb2ludGVyU2htZW1TdHJ1Y3QgKkNoZWNrcG9pbnRlclNobWVtOwog CitzdGF0aWMgdm9pZCBDaGVja3BvaW50ZXJTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsKK3N0 YXRpYyB2b2lkIENoZWNrcG9pbnRlclNobWVtSW5pdCh2b2lkICphcmcpOworCitjb25zdCBT aG1lbUNhbGxiYWNrcyBDaGVja3BvaW50ZXJTaG1lbUNhbGxiYWNrcyA9IHsKKwkucmVxdWVz dF9mbiA9IENoZWNrcG9pbnRlclNobWVtUmVxdWVzdCwKKwkuaW5pdF9mbiA9IENoZWNrcG9p bnRlclNobWVtSW5pdCwKK307CisKIC8qIGludGVydmFsIGZvciBjYWxsaW5nIEFic29yYlN5 bmNSZXF1ZXN0cyBpbiBDaGVja3BvaW50V3JpdGVEZWxheSAqLwogI2RlZmluZSBXUklURVNf UEVSX0FCU09SQgkJMTAwMAogCkBAIC05NTAsMTIgKzk1OSwxMyBAQCBSZXFTaHV0ZG93blhM T0coU0lHTkFMX0FSR1MpCiAgKi8KIAogLyoKLSAqIENoZWNrcG9pbnRlclNobWVtU2l6ZQot ICoJCUNvbXB1dGUgc3BhY2UgbmVlZGVkIGZvciBjaGVja3BvaW50ZXItcmVsYXRlZCBzaGFy ZWQgbWVtb3J5CisgKiBDaGVja3BvaW50ZXJTaG1lbVJlcXVlc3QKKyAqCQlSZWdpc3RlciBz aGFyZWQgbWVtb3J5IHNwYWNlIG5lZWRlZCBmb3IgY2hlY2twb2ludGVyCiAgKi8KLVNpemUK LUNoZWNrcG9pbnRlclNobWVtU2l6ZSh2b2lkKQorc3RhdGljIHZvaWQKK0NoZWNrcG9pbnRl clNobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBD aGVja3BvaW50ZXJTaG1lbURlc2M7CiAJU2l6ZQkJc2l6ZTsKIAogCS8qCkBAIC05NjcsMzkg Kzk3NywyNSBAQCBDaGVja3BvaW50ZXJTaG1lbVNpemUodm9pZCkKIAlzaXplID0gYWRkX3Np emUoc2l6ZSwgbXVsX3NpemUoTWluKE5CdWZmZXJzLAogCQkJCQkJCQkJICAgTUFYX0NIRUNL UE9JTlRfUkVRVUVTVFMpLAogCQkJCQkJCQkgICBzaXplb2YoQ2hlY2twb2ludGVyUmVxdWVz dCkpKTsKLQotCXJldHVybiBzaXplOworCVNobWVtUmVxdWVzdFN0cnVjdCgmQ2hlY2twb2lu dGVyU2htZW1EZXNjLAorCQkJCQkgICAubmFtZSA9ICJDaGVja3BvaW50ZXIgRGF0YSIsCisJ CQkJCSAgIC5zaXplID0gc2l6ZSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmQ2hlY2tw b2ludGVyU2htZW0sCisJCSk7CiB9CiAKIC8qCiAgKiBDaGVja3BvaW50ZXJTaG1lbUluaXQK LSAqCQlBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBjaGVja3BvaW50ZXItcmVsYXRlZCBzaGFy ZWQgbWVtb3J5CisgKgkJSW5pdGlhbGl6ZSBjaGVja3BvaW50ZXItcmVsYXRlZCBzaGFyZWQg bWVtb3J5CiAgKi8KLXZvaWQKLUNoZWNrcG9pbnRlclNobWVtSW5pdCh2b2lkKQorc3RhdGlj IHZvaWQKK0NoZWNrcG9pbnRlclNobWVtSW5pdCh2b2lkICphcmcpCiB7Ci0JU2l6ZQkJc2l6 ZSA9IENoZWNrcG9pbnRlclNobWVtU2l6ZSgpOwotCWJvb2wJCWZvdW5kOwotCi0JQ2hlY2tw b2ludGVyU2htZW0gPSAoQ2hlY2twb2ludGVyU2htZW1TdHJ1Y3QgKikKLQkJU2htZW1Jbml0 U3RydWN0KCJDaGVja3BvaW50ZXIgRGF0YSIsCi0JCQkJCQlzaXplLAotCQkJCQkJJmZvdW5k KTsKLQotCWlmICghZm91bmQpCi0JewotCQkvKgotCQkgKiBGaXJzdCB0aW1lIHRocm91Z2gs IHNvIGluaXRpYWxpemUuICBOb3RlIHRoYXQgd2UgemVybyB0aGUgd2hvbGUKLQkJICogcmVx dWVzdHMgYXJyYXk7IHRoaXMgaXMgc28gdGhhdCBDb21wYWN0Q2hlY2twb2ludGVyUmVxdWVz dFF1ZXVlIGNhbgotCQkgKiBhc3N1bWUgdGhhdCBhbnkgcGFkIGJ5dGVzIGluIHRoZSByZXF1 ZXN0IHN0cnVjdHMgYXJlIHplcm9lcy4KLQkJICovCi0JCU1lbVNldChDaGVja3BvaW50ZXJT aG1lbSwgMCwgc2l6ZSk7Ci0JCVNwaW5Mb2NrSW5pdCgmQ2hlY2twb2ludGVyU2htZW0tPmNr cHRfbGNrKTsKLQkJQ2hlY2twb2ludGVyU2htZW0tPm1heF9yZXF1ZXN0cyA9IE1pbihOQnVm ZmVycywgTUFYX0NIRUNLUE9JTlRfUkVRVUVTVFMpOwotCQlDaGVja3BvaW50ZXJTaG1lbS0+ aGVhZCA9IENoZWNrcG9pbnRlclNobWVtLT50YWlsID0gMDsKLQkJQ29uZGl0aW9uVmFyaWFi bGVJbml0KCZDaGVja3BvaW50ZXJTaG1lbS0+c3RhcnRfY3YpOwotCQlDb25kaXRpb25WYXJp YWJsZUluaXQoJkNoZWNrcG9pbnRlclNobWVtLT5kb25lX2N2KTsKLQl9CisJU3BpbkxvY2tJ bml0KCZDaGVja3BvaW50ZXJTaG1lbS0+Y2twdF9sY2spOworCUNoZWNrcG9pbnRlclNobWVt LT5tYXhfcmVxdWVzdHMgPSBNaW4oTkJ1ZmZlcnMsIE1BWF9DSEVDS1BPSU5UX1JFUVVFU1RT KTsKKwlDaGVja3BvaW50ZXJTaG1lbS0+aGVhZCA9IENoZWNrcG9pbnRlclNobWVtLT50YWls ID0gMDsKKwlDb25kaXRpb25WYXJpYWJsZUluaXQoJkNoZWNrcG9pbnRlclNobWVtLT5zdGFy dF9jdik7CisJQ29uZGl0aW9uVmFyaWFibGVJbml0KCZDaGVja3BvaW50ZXJTaG1lbS0+ZG9u ZV9jdik7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bn YXJjaC5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ2FyY2guYwppbmRleCBmYTRiZGZl OWFiOS4uODg4YTUzZTk2ZDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv cGdhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ2FyY2guYwpAQCAtNDgs NiArNDgsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvcHJvY3NpZ25hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKKyNpbmNsdWRl ICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNsdWRlICJ1dGlscy9ndWMuaCIKICNpbmNs dWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3BzX3N0YXR1cy5oIgpA QCAtMTU0LDMzICsxNTUsMzQgQEAgc3RhdGljIGludAlyZWFkeV9maWxlX2NvbXBhcmF0b3Io RGF0dW0gYSwgRGF0dW0gYiwgdm9pZCAqYXJnKTsKIHN0YXRpYyB2b2lkIExvYWRBcmNoaXZl TGlicmFyeSh2b2lkKTsKIHN0YXRpYyB2b2lkIHBnYXJjaF9jYWxsX21vZHVsZV9zaHV0ZG93 bl9jYihpbnQgY29kZSwgRGF0dW0gYXJnKTsKIAotLyogUmVwb3J0IHNoYXJlZCBtZW1vcnkg c3BhY2UgbmVlZGVkIGJ5IFBnQXJjaFNobWVtSW5pdCAqLwotU2l6ZQotUGdBcmNoU2htZW1T aXplKHZvaWQpCi17Ci0JU2l6ZQkJc2l6ZSA9IDA7Ci0KLQlzaXplID0gYWRkX3NpemUoc2l6 ZSwgc2l6ZW9mKFBnQXJjaERhdGEpKTsKK3N0YXRpYyB2b2lkIFBnQXJjaFNobWVtUmVxdWVz dCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgUGdBcmNoU2htZW1Jbml0KHZvaWQgKmFyZyk7 CiAKLQlyZXR1cm4gc2l6ZTsKLX0KK2NvbnN0IFNobWVtQ2FsbGJhY2tzIFBnQXJjaFNobWVt Q2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gUGdBcmNoU2htZW1SZXF1ZXN0LAorCS5p bml0X2ZuID0gUGdBcmNoU2htZW1Jbml0LAorfTsKIAotLyogQWxsb2NhdGUgYW5kIGluaXRp YWxpemUgYXJjaGl2ZXItcmVsYXRlZCBzaGFyZWQgbWVtb3J5ICovCi12b2lkCi1QZ0FyY2hT aG1lbUluaXQodm9pZCkKKy8qIFJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkgc3BhY2UgbmVlZGVk IGJ5IHRoZSBhcmNoaXZlciAqLworc3RhdGljIHZvaWQKK1BnQXJjaFNobWVtUmVxdWVzdCh2 b2lkICphcmcpCiB7Ci0JYm9vbAkJZm91bmQ7CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBQ Z0FyY2hTaG1lbURlc2M7CiAKLQlQZ0FyY2ggPSAoUGdBcmNoRGF0YSAqKQotCQlTaG1lbUlu aXRTdHJ1Y3QoIkFyY2hpdmVyIERhdGEiLCBQZ0FyY2hTaG1lbVNpemUoKSwgJmZvdW5kKTsK KwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJlBnQXJjaFNobWVtRGVzYywKKwkJCQkJICAgLm5hbWUg PSAiQXJjaGl2ZXIgRGF0YSIsCisJCQkJCSAgIC5zaXplID0gc2l6ZW9mKFBnQXJjaERhdGEp LAorCQkJCQkgICAucHRyID0gKHZvaWQgKiopICZQZ0FyY2gsCisJCSk7Cit9CiAKLQlpZiAo IWZvdW5kKQotCXsKLQkJLyogRmlyc3QgdGltZSB0aHJvdWdoLCBzbyBpbml0aWFsaXplICov Ci0JCU1lbVNldChQZ0FyY2gsIDAsIFBnQXJjaFNobWVtU2l6ZSgpKTsKLQkJUGdBcmNoLT5w Z3Byb2NubyA9IElOVkFMSURfUFJPQ19OVU1CRVI7Ci0JCXBnX2F0b21pY19pbml0X3UzMigm UGdBcmNoLT5mb3JjZV9kaXJfc2NhbiwgMCk7Ci0JfQorLyogSW5pdGlhbGl6ZSBhcmNoaXZl ci1yZWxhdGVkIHNoYXJlZCBtZW1vcnkgKi8KK3N0YXRpYyB2b2lkCitQZ0FyY2hTaG1lbUlu aXQodm9pZCAqYXJnKQoreworCU1lbVNldChQZ0FyY2gsIDAsIHNpemVvZihQZ0FyY2hEYXRh KSk7CisJUGdBcmNoLT5wZ3Byb2NubyA9IElOVkFMSURfUFJPQ19OVU1CRVI7CisJcGdfYXRv bWljX2luaXRfdTMyKCZQZ0FyY2gtPmZvcmNlX2Rpcl9zY2FuLCAwKTsKIH0KIAogLyoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jIGIvc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmMKaW5kZXggYTM3YjMwMThhYmYu LjlmODdiZDBmMjQzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1 bW1hcml6ZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIu YwpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIK KyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNsdWRlICJ1dGlscy9ndWMu aCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3dhaXRf ZXZlbnQuaCIKQEAgLTEwOSw2ICsxMTAsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QKIC8qIFBvaW50 ZXIgdG8gc2hhcmVkIG1lbW9yeSBzdGF0ZS4gKi8KIHN0YXRpYyBXYWxTdW1tYXJpemVyRGF0 YSAqV2FsU3VtbWFyaXplckN0bDsKIAorc3RhdGljIHZvaWQgV2FsU3VtbWFyaXplclNobWVt UmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgV2FsU3VtbWFyaXplclNobWVtSW5p dCh2b2lkICphcmcpOworCitjb25zdCBTaG1lbUNhbGxiYWNrcyBXYWxTdW1tYXJpemVyU2ht ZW1DYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBXYWxTdW1tYXJpemVyU2htZW1SZXF1 ZXN0LAorCS5pbml0X2ZuID0gV2FsU3VtbWFyaXplclNobWVtSW5pdCwKK307CisKIC8qCiAg KiBXaGVuIHdlIHJlYWNoIGVuZCBvZiBXQUwgYW5kIG5lZWQgdG8gcmVhZCBtb3JlLCB3ZSBz bGVlcCBmb3IgYSBudW1iZXIgb2YKICAqIG1pbGxpc2Vjb25kcyB0aGF0IGlzIGFuIGludGVn ZXIgbXVsdGlwbGUgb2YgTVNfUEVSX1NMRUVQX1FVQU5UVU0uIFRoaXMgaXMKQEAgLTE2OCw0 MyArMTc3LDM3IEBAIHN0YXRpYyB2b2lkIHN1bW1hcml6ZXJfd2FpdF9mb3Jfd2FsKHZvaWQp Owogc3RhdGljIHZvaWQgTWF5YmVSZW1vdmVPbGRXYWxTdW1tYXJpZXModm9pZCk7CiAKIC8q Ci0gKiBBbW91bnQgb2Ygc2hhcmVkIG1lbW9yeSByZXF1aXJlZCBmb3IgdGhpcyBtb2R1bGUu CisgKiBSZWdpc3RlciBzaGFyZWQgbWVtb3J5IHNwYWNlIG5lZWRlZCBieSB0aGlzIG1vZHVs ZS4KICAqLwotU2l6ZQotV2FsU3VtbWFyaXplclNobWVtU2l6ZSh2b2lkKQorc3RhdGljIHZv aWQKK1dhbFN1bW1hcml6ZXJTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQogewotCXJldHVybiBz aXplb2YoV2FsU3VtbWFyaXplckRhdGEpOworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgV2Fs U3VtbWFyaXplclNobWVtRGVzYzsKKworCVNobWVtUmVxdWVzdFN0cnVjdCgmV2FsU3VtbWFy aXplclNobWVtRGVzYywKKwkJCQkJICAgLm5hbWUgPSAiV2FsIFN1bW1hcml6ZXIgQ3RsIiwK KwkJCQkJICAgLnNpemUgPSBzaXplb2YoV2FsU3VtbWFyaXplckRhdGEpLAorCQkJCQkgICAu cHRyID0gKHZvaWQgKiopICZXYWxTdW1tYXJpemVyQ3RsLAorCQkpOwogfQogCiAvKgotICog Q3JlYXRlIG9yIGF0dGFjaCB0byBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgZm9yIHRoaXMgbW9k dWxlLgorICogSW5pdGlhbGl6ZSBzaGFyZWQgbWVtb3J5IGZvciB0aGlzIG1vZHVsZS4KICAq Lwotdm9pZAotV2FsU3VtbWFyaXplclNobWVtSW5pdCh2b2lkKQorc3RhdGljIHZvaWQKK1dh bFN1bW1hcml6ZXJTaG1lbUluaXQodm9pZCAqYXJnKQogewotCWJvb2wJCWZvdW5kOwotCi0J V2FsU3VtbWFyaXplckN0bCA9IChXYWxTdW1tYXJpemVyRGF0YSAqKQotCQlTaG1lbUluaXRT dHJ1Y3QoIldhbCBTdW1tYXJpemVyIEN0bCIsIFdhbFN1bW1hcml6ZXJTaG1lbVNpemUoKSwK LQkJCQkJCSZmb3VuZCk7Ci0KLQlpZiAoIWZvdW5kKQotCXsKLQkJLyoKLQkJICogRmlyc3Qg dGltZSB0aHJvdWdoLCBzbyBpbml0aWFsaXplLgotCQkgKgotCQkgKiBXZSdyZSBqdXN0IGZp bGxpbmcgaW4gZHVtbXkgdmFsdWVzIGhlcmUgLS0gdGhlIHJlYWwgaW5pdGlhbGl6YXRpb24K LQkJICogd2lsbCBoYXBwZW4gd2hlbiBHZXRPbGRlc3RVbnN1bW1hcml6ZWRMU04oKSBpcyBj YWxsZWQgZm9yIHRoZSBmaXJzdAotCQkgKiB0aW1lLgotCQkgKi8KLQkJV2FsU3VtbWFyaXpl ckN0bC0+aW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQkJV2FsU3VtbWFyaXplckN0bC0+c3VtbWFy aXplZF90bGkgPSAwOwotCQlXYWxTdW1tYXJpemVyQ3RsLT5zdW1tYXJpemVkX2xzbiA9IElu dmFsaWRYTG9nUmVjUHRyOwotCQlXYWxTdW1tYXJpemVyQ3RsLT5sc25faXNfZXhhY3QgPSBm YWxzZTsKLQkJV2FsU3VtbWFyaXplckN0bC0+c3VtbWFyaXplcl9wZ3Byb2NubyA9IElOVkFM SURfUFJPQ19OVU1CRVI7Ci0JCVdhbFN1bW1hcml6ZXJDdGwtPnBlbmRpbmdfbHNuID0gSW52 YWxpZFhMb2dSZWNQdHI7Ci0JCUNvbmRpdGlvblZhcmlhYmxlSW5pdCgmV2FsU3VtbWFyaXpl ckN0bC0+c3VtbWFyeV9maWxlX2N2KTsKLQl9CisJLyoKKwkgKiBXZSdyZSBqdXN0IGZpbGxp bmcgaW4gZHVtbXkgdmFsdWVzIGhlcmUgLS0gdGhlIHJlYWwgaW5pdGlhbGl6YXRpb24gd2ls bAorCSAqIGhhcHBlbiB3aGVuIEdldE9sZGVzdFVuc3VtbWFyaXplZExTTigpIGlzIGNhbGxl ZCBmb3IgdGhlIGZpcnN0IHRpbWUuCisJICovCisJV2FsU3VtbWFyaXplckN0bC0+aW5pdGlh bGl6ZWQgPSBmYWxzZTsKKwlXYWxTdW1tYXJpemVyQ3RsLT5zdW1tYXJpemVkX3RsaSA9IDA7 CisJV2FsU3VtbWFyaXplckN0bC0+c3VtbWFyaXplZF9sc24gPSBJbnZhbGlkWExvZ1JlY1B0 cjsKKwlXYWxTdW1tYXJpemVyQ3RsLT5sc25faXNfZXhhY3QgPSBmYWxzZTsKKwlXYWxTdW1t YXJpemVyQ3RsLT5zdW1tYXJpemVyX3BncHJvY25vID0gSU5WQUxJRF9QUk9DX05VTUJFUjsK KwlXYWxTdW1tYXJpemVyQ3RsLT5wZW5kaW5nX2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwor CUNvbmRpdGlvblZhcmlhYmxlSW5pdCgmV2FsU3VtbWFyaXplckN0bC0+c3VtbWFyeV9maWxl X2N2KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvbGF1bmNoZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1 bmNoZXIuYwppbmRleCAwOTk2NDE5ODU1MC4uZjE3NzMyNzk5OTEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYworKysgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMKQEAgLTM4LDYgKzM4LDcgQEAK ICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgog I2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdWJz eXN0ZW1zLmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgogI2luY2x1ZGUgInV0aWxz L2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKQEAgLTcxLDYgKzcy LDE0IEBAIHR5cGVkZWYgc3RydWN0IExvZ2ljYWxSZXBDdHhTdHJ1Y3QKIAogc3RhdGljIExv Z2ljYWxSZXBDdHhTdHJ1Y3QgKkxvZ2ljYWxSZXBDdHg7CiAKK3N0YXRpYyB2b2lkIEFwcGx5 TGF1bmNoZXJTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIEFwcGx5TGF1 bmNoZXJTaG1lbUluaXQodm9pZCAqYXJnKTsKKworY29uc3QgU2htZW1DYWxsYmFja3MgQXBw bHlMYXVuY2hlclNobWVtQ2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gQXBwbHlMYXVu Y2hlclNobWVtUmVxdWVzdCwKKwkuaW5pdF9mbiA9IEFwcGx5TGF1bmNoZXJTaG1lbUluaXQs Cit9OworCiAvKiBhbiBlbnRyeSBpbiB0aGUgbGFzdC1zdGFydC10aW1lcyBzaGFyZWQgaGFz aCB0YWJsZSAqLwogdHlwZWRlZiBzdHJ1Y3QgTGF1bmNoZXJMYXN0U3RhcnRUaW1lc0VudHJ5 CiB7CkBAIC05NzIsMTIgKzk4MSwxMyBAQCBsb2dpY2FscmVwX3BhX3dvcmtlcl9jb3VudChP aWQgc3ViaWQpCiB9CiAKIC8qCi0gKiBBcHBseUxhdW5jaGVyU2htZW1TaXplCi0gKgkJQ29t cHV0ZSBzcGFjZSBuZWVkZWQgZm9yIHJlcGxpY2F0aW9uIGxhdW5jaGVyIHNoYXJlZCBtZW1v cnkKKyAqIEFwcGx5TGF1bmNoZXJTaG1lbVJlcXVlc3QKKyAqCQlSZWdpc3RlciBzaGFyZWQg bWVtb3J5IHNwYWNlIG5lZWRlZCBmb3IgcmVwbGljYXRpb24gbGF1bmNoZXIKICAqLwotU2l6 ZQotQXBwbHlMYXVuY2hlclNobWVtU2l6ZSh2b2lkKQorc3RhdGljIHZvaWQKK0FwcGx5TGF1 bmNoZXJTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQogeworCXN0YXRpYyBTaG1lbVN0cnVjdERl c2MgQXBwbHlMYXVuY2hlclNobWVtRGVzYzsKIAlTaXplCQlzaXplOwogCiAJLyoKQEAgLTk4 Nyw3ICs5OTcsMTEgQEAgQXBwbHlMYXVuY2hlclNobWVtU2l6ZSh2b2lkKQogCXNpemUgPSBN QVhBTElHTihzaXplKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUobWF4X2xv Z2ljYWxfcmVwbGljYXRpb25fd29ya2VycywKIAkJCQkJCQkJICAgc2l6ZW9mKExvZ2ljYWxS ZXBXb3JrZXIpKSk7Ci0JcmV0dXJuIHNpemU7CisJU2htZW1SZXF1ZXN0U3RydWN0KCZBcHBs eUxhdW5jaGVyU2htZW1EZXNjLAorCQkJCQkgICAubmFtZSA9ICJMb2dpY2FsIFJlcGxpY2F0 aW9uIExhdW5jaGVyIERhdGEiLAorCQkJCQkgICAuc2l6ZSA9IHNpemUsCisJCQkJCSAgIC5w dHIgPSAodm9pZCAqKikgJkxvZ2ljYWxSZXBDdHgsCisJCSk7CiB9CiAKIC8qCkBAIC0xMDI4 LDM1ICsxMDQyLDIzIEBAIEFwcGx5TGF1bmNoZXJSZWdpc3Rlcih2b2lkKQogCiAvKgogICog QXBwbHlMYXVuY2hlclNobWVtSW5pdAotICoJCUFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHJl cGxpY2F0aW9uIGxhdW5jaGVyIHNoYXJlZCBtZW1vcnkKKyAqCQlJbml0aWFsaXplIHJlcGxp Y2F0aW9uIGxhdW5jaGVyIHNoYXJlZCBtZW1vcnkKICAqLwotdm9pZAotQXBwbHlMYXVuY2hl clNobWVtSW5pdCh2b2lkKQorc3RhdGljIHZvaWQKK0FwcGx5TGF1bmNoZXJTaG1lbUluaXQo dm9pZCAqYXJnKQogewotCWJvb2wJCWZvdW5kOworCWludAkJCXNsb3Q7CiAKLQlMb2dpY2Fs UmVwQ3R4ID0gKExvZ2ljYWxSZXBDdHhTdHJ1Y3QgKikKLQkJU2htZW1Jbml0U3RydWN0KCJM b2dpY2FsIFJlcGxpY2F0aW9uIExhdW5jaGVyIERhdGEiLAotCQkJCQkJQXBwbHlMYXVuY2hl clNobWVtU2l6ZSgpLAotCQkJCQkJJmZvdW5kKTsKKwlMb2dpY2FsUmVwQ3R4LT5sYXN0X3N0 YXJ0X2RzYSA9IERTQV9IQU5ETEVfSU5WQUxJRDsKKwlMb2dpY2FsUmVwQ3R4LT5sYXN0X3N0 YXJ0X2RzaCA9IERTSEFTSF9IQU5ETEVfSU5WQUxJRDsKIAotCWlmICghZm91bmQpCisJLyog SW5pdGlhbGl6ZSBtZW1vcnkgYW5kIHNwaW4gbG9ja3MgZm9yIGVhY2ggd29ya2VyIHNsb3Qu ICovCisJZm9yIChzbG90ID0gMDsgc2xvdCA8IG1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dv cmtlcnM7IHNsb3QrKykKIAl7Ci0JCWludAkJCXNsb3Q7Ci0KLQkJbWVtc2V0KExvZ2ljYWxS ZXBDdHgsIDAsIEFwcGx5TGF1bmNoZXJTaG1lbVNpemUoKSk7Ci0KLQkJTG9naWNhbFJlcEN0 eC0+bGFzdF9zdGFydF9kc2EgPSBEU0FfSEFORExFX0lOVkFMSUQ7Ci0JCUxvZ2ljYWxSZXBD dHgtPmxhc3Rfc3RhcnRfZHNoID0gRFNIQVNIX0hBTkRMRV9JTlZBTElEOworCQlMb2dpY2Fs UmVwV29ya2VyICp3b3JrZXIgPSAmTG9naWNhbFJlcEN0eC0+d29ya2Vyc1tzbG90XTsKIAot CQkvKiBJbml0aWFsaXplIG1lbW9yeSBhbmQgc3BpbiBsb2NrcyBmb3IgZWFjaCB3b3JrZXIg c2xvdC4gKi8KLQkJZm9yIChzbG90ID0gMDsgc2xvdCA8IG1heF9sb2dpY2FsX3JlcGxpY2F0 aW9uX3dvcmtlcnM7IHNsb3QrKykKLQkJewotCQkJTG9naWNhbFJlcFdvcmtlciAqd29ya2Vy ID0gJkxvZ2ljYWxSZXBDdHgtPndvcmtlcnNbc2xvdF07Ci0KLQkJCW1lbXNldCh3b3JrZXIs IDAsIHNpemVvZihMb2dpY2FsUmVwV29ya2VyKSk7Ci0JCQlTcGluTG9ja0luaXQoJndvcmtl ci0+cmVsbXV0ZXgpOwotCQl9CisJCW1lbXNldCh3b3JrZXIsIDAsIHNpemVvZihMb2dpY2Fs UmVwV29ya2VyKSk7CisJCVNwaW5Mb2NrSW5pdCgmd29ya2VyLT5yZWxtdXRleCk7CiAJfQog fQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2lj YWxjdGwuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbGN0bC5j CmluZGV4IDRlMjkyOTUxMjAxLi45ODYxN2I1NjFkZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsY3RsLmMKKysrIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsY3RsLmMKQEAgLTcyLDYgKzcyLDcgQEAKICNp bmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5o IgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgorI2luY2x1ZGUgInN0b3JhZ2Uv c3Vic3lzdGVtcy5oIgogI2luY2x1ZGUgInV0aWxzL2luamVjdGlvbl9wb2ludC5oIgogCiAv KgpAQCAtOTgsNiArOTksMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ3Rs RGF0YQogCiBzdGF0aWMgTG9naWNhbERlY29kaW5nQ3RsRGF0YSAqTG9naWNhbERlY29kaW5n Q3RsID0gTlVMTDsKIAorc3RhdGljIHZvaWQgTG9naWNhbERlY29kaW5nQ3RsU2htZW1SZXF1 ZXN0KHZvaWQgKmFyZyk7CisKK2NvbnN0IFNobWVtQ2FsbGJhY2tzIExvZ2ljYWxEZWNvZGlu Z0N0bFNobWVtQ2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gTG9naWNhbERlY29kaW5n Q3RsU2htZW1SZXF1ZXN0LAorfTsKKwogLyoKICAqIEEgcHJvY2Vzcy1sb2NhbCBjYWNoZSBv ZiBMb2dpY2FsRGVjb2RpbmdDdGwtPnhsb2dfbG9naWNhbF9pbmZvLiBUaGlzIGlzCiAgKiBp bml0aWFsaXplZCBhdCBwcm9jZXNzIHN0YXJ0dXAsIGFuZCB1cGRhdGVkIHdoZW4gcHJvY2Vz c2luZyB0aGUgcHJvY2VzcwpAQCAtMTIwLDIzICsxMjcsMTYgQEAgc3RhdGljIHZvaWQgdXBk YXRlX3hsb2dfbG9naWNhbF9pbmZvKHZvaWQpOwogc3RhdGljIHZvaWQgYWJvcnRfbG9naWNh bF9kZWNvZGluZ19hY3RpdmF0aW9uKGludCBjb2RlLCBEYXR1bSBhcmcpOwogc3RhdGljIHZv aWQgd3JpdGVfbG9naWNhbF9kZWNvZGluZ19zdGF0dXNfdXBkYXRlX3JlY29yZChib29sIHN0 YXR1cyk7CiAKLVNpemUKLUxvZ2ljYWxEZWNvZGluZ0N0bFNobWVtU2l6ZSh2b2lkKQotewot CXJldHVybiBzaXplb2YoTG9naWNhbERlY29kaW5nQ3RsRGF0YSk7Ci19Ci0KLXZvaWQKLUxv Z2ljYWxEZWNvZGluZ0N0bFNobWVtSW5pdCh2b2lkKQorc3RhdGljIHZvaWQKK0xvZ2ljYWxE ZWNvZGluZ0N0bFNobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7Ci0JYm9vbAkJZm91bmQ7Ci0K LQlMb2dpY2FsRGVjb2RpbmdDdGwgPSBTaG1lbUluaXRTdHJ1Y3QoIkxvZ2ljYWwgZGVjb2Rp bmcgY29udHJvbCIsCi0JCQkJCQkJCQkJIExvZ2ljYWxEZWNvZGluZ0N0bFNobWVtU2l6ZSgp LAotCQkJCQkJCQkJCSAmZm91bmQpOworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgTG9naWNh bERlY29kaW5nQ3RsU2htZW1EZXNjOwogCi0JaWYgKCFmb3VuZCkKLQkJTWVtU2V0KExvZ2lj YWxEZWNvZGluZ0N0bCwgMCwgTG9naWNhbERlY29kaW5nQ3RsU2htZW1TaXplKCkpOworCVNo bWVtUmVxdWVzdFN0cnVjdCgmTG9naWNhbERlY29kaW5nQ3RsU2htZW1EZXNjLAorCQkJCQkg ICAubmFtZSA9ICJMb2dpY2FsIGRlY29kaW5nIGNvbnRyb2wiLAorCQkJCQkgICAuc2l6ZSA9 IHNpemVvZihMb2dpY2FsRGVjb2RpbmdDdGxEYXRhKSwKKwkJCQkJICAgLnB0ciA9ICh2b2lk ICoqKSAmTG9naWNhbERlY29kaW5nQ3RsLAorCQkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMKaW5kZXggNjYxZDY4YWQ2NTMuLmRhYTk4 NDMzMGYxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL29y aWdpbi5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMK QEAgLTg4LDYgKzg4LDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL2ZkLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKKyNpbmNsdWRlICJz dG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2lu Y2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCkBAIC0x NzYsNiArMTc3LDE2IEBAIFJlcGxPcmlnaW5YYWN0U3RhdGUgcmVwbG9yaWdpbl94YWN0X3N0 YXRlID0gewogICovCiBzdGF0aWMgUmVwbGljYXRpb25TdGF0ZSAqcmVwbGljYXRpb25fc3Rh dGVzOwogCitzdGF0aWMgdm9pZCBSZXBsaWNhdGlvbk9yaWdpblNobWVtUmVxdWVzdCh2b2lk ICphcmcpOworc3RhdGljIHZvaWQgUmVwbGljYXRpb25PcmlnaW5TaG1lbUluaXQodm9pZCAq YXJnKTsKK3N0YXRpYyB2b2lkIFJlcGxpY2F0aW9uT3JpZ2luU2htZW1BdHRhY2godm9pZCAq YXJnKTsKKworY29uc3QgU2htZW1DYWxsYmFja3MgUmVwbGljYXRpb25PcmlnaW5TaG1lbUNh bGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9IFJlcGxpY2F0aW9uT3JpZ2luU2htZW1SZXF1 ZXN0LAorCS5pbml0X2ZuID0gUmVwbGljYXRpb25PcmlnaW5TaG1lbUluaXQsCisJLmF0dGFj aF9mbiA9IFJlcGxpY2F0aW9uT3JpZ2luU2htZW1BdHRhY2gsCit9OworCiAvKgogICogQWN0 dWFsIHNoYXJlZCBtZW1vcnkgYmxvY2sgKHJlcGxpY2F0aW9uX3N0YXRlc1tdIGlzIG5vdyBw YXJ0IG9mIHRoaXMpLgogICovCkBAIC01MzksNTAgKzU1MCw1MCBAQCByZXBsb3JpZ2luX2J5 X29pZChSZXBsT3JpZ2luSWQgcm9pZGVudCwgYm9vbCBtaXNzaW5nX29rLCBjaGFyICoqcm9u YW1lKQogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAotU2l6ZQotUmVwbGljYXRp b25PcmlnaW5TaG1lbVNpemUodm9pZCkKK3N0YXRpYyB2b2lkCitSZXBsaWNhdGlvbk9yaWdp blNobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBS ZXBsaWNhdGlvbk9yaWdpblNobWVtRGVzYzsKIAlTaXplCQlzaXplID0gMDsKIAogCWlmICht YXhfYWN0aXZlX3JlcGxpY2F0aW9uX29yaWdpbnMgPT0gMCkKLQkJcmV0dXJuIHNpemU7CisJ CXJldHVybjsKIAogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBvZmZzZXRvZihSZXBsaWNhdGlv blN0YXRlQ3RsLCBzdGF0ZXMpKTsKLQogCXNpemUgPSBhZGRfc2l6ZShzaXplLAogCQkJCQlt dWxfc2l6ZShtYXhfYWN0aXZlX3JlcGxpY2F0aW9uX29yaWdpbnMsIHNpemVvZihSZXBsaWNh dGlvblN0YXRlKSkpOwotCXJldHVybiBzaXplOworCVNobWVtUmVxdWVzdFN0cnVjdCgmUmVw bGljYXRpb25PcmlnaW5TaG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0gIlJlcGxpY2F0aW9u T3JpZ2luU3RhdGUiLAorCQkJCQkgICAuc2l6ZSA9IHNpemUsCisJCQkJCSAgIC5wdHIgPSAo dm9pZCAqKikgJnJlcGxpY2F0aW9uX3N0YXRlc19jdGwsCisJCSk7CiB9CiAKLXZvaWQKLVJl cGxpY2F0aW9uT3JpZ2luU2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAorUmVwbGljYXRp b25PcmlnaW5TaG1lbUluaXQodm9pZCAqYXJnKQogewotCWJvb2wJCWZvdW5kOwotCiAJaWYg KG1heF9hY3RpdmVfcmVwbGljYXRpb25fb3JpZ2lucyA9PSAwKQogCQlyZXR1cm47CiAKLQly ZXBsaWNhdGlvbl9zdGF0ZXNfY3RsID0gKFJlcGxpY2F0aW9uU3RhdGVDdGwgKikKLQkJU2ht ZW1Jbml0U3RydWN0KCJSZXBsaWNhdGlvbk9yaWdpblN0YXRlIiwKLQkJCQkJCVJlcGxpY2F0 aW9uT3JpZ2luU2htZW1TaXplKCksCi0JCQkJCQkmZm91bmQpOwogCXJlcGxpY2F0aW9uX3N0 YXRlcyA9IHJlcGxpY2F0aW9uX3N0YXRlc19jdGwtPnN0YXRlczsKIAotCWlmICghZm91bmQp Ci0JewotCQlpbnQJCQlpOworCXJlcGxpY2F0aW9uX3N0YXRlc19jdGwtPnRyYW5jaGVfaWQg PSBMV1RSQU5DSEVfUkVQTElDQVRJT05fT1JJR0lOX1NUQVRFOwogCi0JCU1lbVNldChyZXBs aWNhdGlvbl9zdGF0ZXNfY3RsLCAwLCBSZXBsaWNhdGlvbk9yaWdpblNobWVtU2l6ZSgpKTsK Kwlmb3IgKGludCBpID0gMDsgaSA8IG1heF9hY3RpdmVfcmVwbGljYXRpb25fb3JpZ2luczsg aSsrKQorCXsKKwkJTFdMb2NrSW5pdGlhbGl6ZSgmcmVwbGljYXRpb25fc3RhdGVzW2ldLmxv Y2ssCisJCQkJCQkgcmVwbGljYXRpb25fc3RhdGVzX2N0bC0+dHJhbmNoZV9pZCk7CisJCUNv bmRpdGlvblZhcmlhYmxlSW5pdCgmcmVwbGljYXRpb25fc3RhdGVzW2ldLm9yaWdpbl9jdik7 CisJfQorfQogCi0JCXJlcGxpY2F0aW9uX3N0YXRlc19jdGwtPnRyYW5jaGVfaWQgPSBMV1RS QU5DSEVfUkVQTElDQVRJT05fT1JJR0lOX1NUQVRFOworc3RhdGljIHZvaWQKK1JlcGxpY2F0 aW9uT3JpZ2luU2htZW1BdHRhY2godm9pZCAqYXJnKQoreworCWlmIChtYXhfYWN0aXZlX3Jl cGxpY2F0aW9uX29yaWdpbnMgPT0gMCkKKwkJcmV0dXJuOwogCi0JCWZvciAoaSA9IDA7IGkg PCBtYXhfYWN0aXZlX3JlcGxpY2F0aW9uX29yaWdpbnM7IGkrKykKLQkJewotCQkJTFdMb2Nr SW5pdGlhbGl6ZSgmcmVwbGljYXRpb25fc3RhdGVzW2ldLmxvY2ssCi0JCQkJCQkJIHJlcGxp Y2F0aW9uX3N0YXRlc19jdGwtPnRyYW5jaGVfaWQpOwotCQkJQ29uZGl0aW9uVmFyaWFibGVJ bml0KCZyZXBsaWNhdGlvbl9zdGF0ZXNbaV0ub3JpZ2luX2N2KTsKLQkJfQotCX0KKwlyZXBs aWNhdGlvbl9zdGF0ZXMgPSByZXBsaWNhdGlvbl9zdGF0ZXNfY3RsLT5zdGF0ZXM7CiB9CiAK IC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9zbG90c3luYy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9zbG90c3luYy5jCmluZGV4IGU3NWRiNjllM2Y2Li5lYzhhYjFiM2Q2NyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbG90c3luYy5jCisr KyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc2xvdHN5bmMuYwpAQCAtNzMs NiArNzMsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCisjaW5jbHVkZSAi c3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgogI2lu Y2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIK QEAgLTExOCw2ICsxMTksMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgU2xvdFN5bmNDdHhTdHJ1Y3QK IAogc3RhdGljIFNsb3RTeW5jQ3R4U3RydWN0ICpTbG90U3luY0N0eCA9IE5VTEw7CiAKK3N0 YXRpYyB2b2lkIFNsb3RTeW5jU2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9p ZCBTbG90U3luY1NobWVtSW5pdCh2b2lkICphcmcpOworCitjb25zdCBTaG1lbUNhbGxiYWNr cyBTbG90U3luY1NobWVtQ2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gU2xvdFN5bmNT aG1lbVJlcXVlc3QsCisJLmluaXRfZm4gPSBTbG90U3luY1NobWVtSW5pdCwKK307CisKIC8q IEdVQyB2YXJpYWJsZSAqLwogYm9vbAkJc3luY19yZXBsaWNhdGlvbl9zbG90cyA9IGZhbHNl OwogCkBAIC0xODI4LDMyICsxODM3LDI5IEBAIElzU3luY2luZ1JlcGxpY2F0aW9uU2xvdHMo dm9pZCkKIH0KIAogLyoKLSAqIEFtb3VudCBvZiBzaGFyZWQgbWVtb3J5IHJlcXVpcmVkIGZv ciBzbG90IHN5bmNocm9uaXphdGlvbi4KKyAqIFJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkgc3Bh Y2UgbmVlZGVkIGZvciBzbG90IHN5bmNocm9uaXphdGlvbi4KICAqLwotU2l6ZQotU2xvdFN5 bmNTaG1lbVNpemUodm9pZCkKK3N0YXRpYyB2b2lkCitTbG90U3luY1NobWVtUmVxdWVzdCh2 b2lkICphcmcpCiB7Ci0JcmV0dXJuIHNpemVvZihTbG90U3luY0N0eFN0cnVjdCk7CisJc3Rh dGljIFNobWVtU3RydWN0RGVzYyBTbG90U3luY1NobWVtRGVzYzsKKworCVNobWVtUmVxdWVz dFN0cnVjdCgmU2xvdFN5bmNTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0gIlNsb3QgU3lu YyBEYXRhIiwKKwkJCQkJICAgLnNpemUgPSBzaXplb2YoU2xvdFN5bmNDdHhTdHJ1Y3QpLAor CQkJCQkgICAucHRyID0gKHZvaWQgKiopICZTbG90U3luY0N0eCwKKwkJKTsKIH0KIAogLyoK LSAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBzaGFyZWQgbWVtb3J5IG9mIHNsb3Qg c3luY2hyb25pemF0aW9uLgorICogSW5pdGlhbGl6ZSBzaGFyZWQgbWVtb3J5IGZvciBzbG90 IHN5bmNocm9uaXphdGlvbi4KICAqLwotdm9pZAotU2xvdFN5bmNTaG1lbUluaXQodm9pZCkK K3N0YXRpYyB2b2lkCitTbG90U3luY1NobWVtSW5pdCh2b2lkICphcmcpCiB7Ci0JU2l6ZQkJ c2l6ZSA9IFNsb3RTeW5jU2htZW1TaXplKCk7Ci0JYm9vbAkJZm91bmQ7Ci0KLQlTbG90U3lu Y0N0eCA9IChTbG90U3luY0N0eFN0cnVjdCAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIlNsb3Qg U3luYyBEYXRhIiwgc2l6ZSwgJmZvdW5kKTsKLQotCWlmICghZm91bmQpCi0JewotCQltZW1z ZXQoU2xvdFN5bmNDdHgsIDAsIHNpemUpOwotCQlTbG90U3luY0N0eC0+cGlkID0gSW52YWxp ZFBpZDsKLQkJU3BpbkxvY2tJbml0KCZTbG90U3luY0N0eC0+bXV0ZXgpOwotCX0KKwltZW1z ZXQoU2xvdFN5bmNDdHgsIDAsIHNpemVvZihTbG90U3luY0N0eFN0cnVjdCkpOworCVNsb3RT eW5jQ3R4LT5waWQgPSBJbnZhbGlkUGlkOworCVNwaW5Mb2NrSW5pdCgmU2xvdFN5bmNDdHgt Pm11dGV4KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L3Nsb3QuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYwppbmRleCBhOTA5MmZj MjM4Mi4uZWM0NGM5OWUwNGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L3Nsb3QuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMKQEAgLTU1LDYg KzU1LDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv cHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCisjaW5jbHVkZSAic3Rv cmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNs dWRlICJ1dGlscy9ndWNfaG9va3MuaCIKICNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9p bnQuaCIKQEAgLTE0NSw2ICsxNDYsMTQgQEAgU3RhdGljQXNzZXJ0RGVjbChsZW5ndGhvZihT bG90SW52YWxpZGF0aW9uQ2F1c2VzKSA9PSAoUlNfSU5WQUxfTUFYX0NBVVNFUyArIDEpLAog LyogQ29udHJvbCBhcnJheSBmb3IgcmVwbGljYXRpb24gc2xvdCBtYW5hZ2VtZW50ICovCiBS ZXBsaWNhdGlvblNsb3RDdGxEYXRhICpSZXBsaWNhdGlvblNsb3RDdGwgPSBOVUxMOwogCitz dGF0aWMgdm9pZCBSZXBsaWNhdGlvblNsb3RzU2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7Citz dGF0aWMgdm9pZCBSZXBsaWNhdGlvblNsb3RzU2htZW1Jbml0KHZvaWQgKmFyZyk7CisKK2Nv bnN0IFNobWVtQ2FsbGJhY2tzIFJlcGxpY2F0aW9uU2xvdHNTaG1lbUNhbGxiYWNrcyA9IHsK KwkucmVxdWVzdF9mbiA9IFJlcGxpY2F0aW9uU2xvdHNTaG1lbVJlcXVlc3QsCisJLmluaXRf Zm4gPSBSZXBsaWNhdGlvblNsb3RzU2htZW1Jbml0LAorfTsKKwogLyogTXkgYmFja2VuZCdz IHJlcGxpY2F0aW9uIHNsb3QgaW4gdGhlIHNoYXJlZCBtZW1vcnkgYXJyYXkgKi8KIFJlcGxp Y2F0aW9uU2xvdCAqTXlSZXBsaWNhdGlvblNsb3QgPSBOVUxMOwogCkBAIC0xODMsNTYgKzE5 Miw0MyBAQCBzdGF0aWMgdm9pZCBDcmVhdGVTbG90T25EaXNrKFJlcGxpY2F0aW9uU2xvdCAq c2xvdCk7CiBzdGF0aWMgdm9pZCBTYXZlU2xvdFRvUGF0aChSZXBsaWNhdGlvblNsb3QgKnNs b3QsIGNvbnN0IGNoYXIgKmRpciwgaW50IGVsZXZlbCk7CiAKIC8qCi0gKiBSZXBvcnQgc2hh cmVkLW1lbW9yeSBzcGFjZSBuZWVkZWQgYnkgUmVwbGljYXRpb25TbG90c1NobWVtSW5pdC4K KyAqIFJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkgc3BhY2UgbmVlZGVkIGZvciByZXBsaWNhdGlv biBzbG90cy4KICAqLwotU2l6ZQotUmVwbGljYXRpb25TbG90c1NobWVtU2l6ZSh2b2lkKQor c3RhdGljIHZvaWQKK1JlcGxpY2F0aW9uU2xvdHNTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQog ewotCVNpemUJCXNpemUgPSAwOworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgUmVwbGljYXRp b25TbG90c1NobWVtRGVzYzsKKwlTaXplCQlzaXplOwogCiAJaWYgKG1heF9yZXBsaWNhdGlv bl9zbG90cyA9PSAwKQotCQlyZXR1cm4gc2l6ZTsKKwkJcmV0dXJuOwogCiAJc2l6ZSA9IG9m ZnNldG9mKFJlcGxpY2F0aW9uU2xvdEN0bERhdGEsIHJlcGxpY2F0aW9uX3Nsb3RzKTsKIAlz aXplID0gYWRkX3NpemUoc2l6ZSwKIAkJCQkJbXVsX3NpemUobWF4X3JlcGxpY2F0aW9uX3Ns b3RzLCBzaXplb2YoUmVwbGljYXRpb25TbG90KSkpOwotCi0JcmV0dXJuIHNpemU7CisJU2ht ZW1SZXF1ZXN0U3RydWN0KCZSZXBsaWNhdGlvblNsb3RzU2htZW1EZXNjLAorCQkJCQkgICAu bmFtZSA9ICJSZXBsaWNhdGlvblNsb3QgQ3RsIiwKKwkJCQkJICAgLnNpemUgPSBzaXplLAor CQkJCQkgICAucHRyID0gKHZvaWQgKiopICZSZXBsaWNhdGlvblNsb3RDdGwsCisJCSk7CiB9 CiAKIC8qCi0gKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBzaGFyZWQgbWVtb3J5IGZvciBy ZXBsaWNhdGlvbiBzbG90cy4KKyAqIEluaXRpYWxpemUgc2hhcmVkIG1lbW9yeSBmb3IgcmVw bGljYXRpb24gc2xvdHMuCiAgKi8KLXZvaWQKLVJlcGxpY2F0aW9uU2xvdHNTaG1lbUluaXQo dm9pZCkKK3N0YXRpYyB2b2lkCitSZXBsaWNhdGlvblNsb3RzU2htZW1Jbml0KHZvaWQgKmFy ZykKIHsKLQlib29sCQlmb3VuZDsKLQotCWlmIChtYXhfcmVwbGljYXRpb25fc2xvdHMgPT0g MCkKLQkJcmV0dXJuOwotCi0JUmVwbGljYXRpb25TbG90Q3RsID0gKFJlcGxpY2F0aW9uU2xv dEN0bERhdGEgKikKLQkJU2htZW1Jbml0U3RydWN0KCJSZXBsaWNhdGlvblNsb3QgQ3RsIiwg UmVwbGljYXRpb25TbG90c1NobWVtU2l6ZSgpLAotCQkJCQkJJmZvdW5kKTsKLQotCWlmICgh Zm91bmQpCisJZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhfcmVwbGljYXRpb25fc2xvdHM7IGkr KykKIAl7Ci0JCWludAkJCWk7CisJCVJlcGxpY2F0aW9uU2xvdCAqc2xvdCA9ICZSZXBsaWNh dGlvblNsb3RDdGwtPnJlcGxpY2F0aW9uX3Nsb3RzW2ldOwogCi0JCS8qIEZpcnN0IHRpbWUg dGhyb3VnaCwgc28gaW5pdGlhbGl6ZSAqLwotCQlNZW1TZXQoUmVwbGljYXRpb25TbG90Q3Rs LCAwLCBSZXBsaWNhdGlvblNsb3RzU2htZW1TaXplKCkpOwotCi0JCWZvciAoaSA9IDA7IGkg PCBtYXhfcmVwbGljYXRpb25fc2xvdHM7IGkrKykKLQkJewotCQkJUmVwbGljYXRpb25TbG90 ICpzbG90ID0gJlJlcGxpY2F0aW9uU2xvdEN0bC0+cmVwbGljYXRpb25fc2xvdHNbaV07Ci0K LQkJCS8qIGV2ZXJ5dGhpbmcgZWxzZSBpcyB6ZXJvZWQgYnkgdGhlIG1lbXNldCBhYm92ZSAq LwotCQkJc2xvdC0+YWN0aXZlX3Byb2MgPSBJTlZBTElEX1BST0NfTlVNQkVSOwotCQkJU3Bp bkxvY2tJbml0KCZzbG90LT5tdXRleCk7Ci0JCQlMV0xvY2tJbml0aWFsaXplKCZzbG90LT5p b19pbl9wcm9ncmVzc19sb2NrLAotCQkJCQkJCSBMV1RSQU5DSEVfUkVQTElDQVRJT05fU0xP VF9JTyk7Ci0JCQlDb25kaXRpb25WYXJpYWJsZUluaXQoJnNsb3QtPmFjdGl2ZV9jdik7Ci0J CX0KKwkJLyogZXZlcnl0aGluZyBlbHNlIGlzIHplcm9lZCBieSB0aGUgbWVtc2V0IGFib3Zl ICovCisJCXNsb3QtPmFjdGl2ZV9wcm9jID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKKwkJU3Bp bkxvY2tJbml0KCZzbG90LT5tdXRleCk7CisJCUxXTG9ja0luaXRpYWxpemUoJnNsb3QtPmlv X2luX3Byb2dyZXNzX2xvY2ssCisJCQkJCQkgTFdUUkFOQ0hFX1JFUExJQ0FUSU9OX1NMT1Rf SU8pOworCQlDb25kaXRpb25WYXJpYWJsZUluaXQoJnNsb3QtPmFjdGl2ZV9jdik7CiAJfQog fQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxyZWNlaXZlcmZ1 bmNzLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxyZWNlaXZlcmZ1bmNzLmMKaW5k ZXggNDViOWQ0ZjA5ZjIuLjZkNTA2ZmMzZjQzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi93YWxyZWNlaXZlcmZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vd2FscmVjZWl2ZXJmdW5jcy5jCkBAIC0yOSw0NyArMjksNDkgQEAKICNpbmNsdWRl ICJzdG9yYWdlL3Btc2lnbmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9zaG1lbS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5o IgogI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgogI2luY2x1ZGUgInV0aWxzL3dhaXRf ZXZlbnQuaCIKIAogV2FsUmN2RGF0YSAqV2FsUmN2ID0gTlVMTDsKIAorc3RhdGljIHZvaWQg V2FsUmN2U2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBXYWxSY3ZTaG1l bUluaXQodm9pZCAqYXJnKTsKKworY29uc3QgU2htZW1DYWxsYmFja3MgV2FsUmN2U2htZW1D YWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBXYWxSY3ZTaG1lbVJlcXVlc3QsCisJLmlu aXRfZm4gPSBXYWxSY3ZTaG1lbUluaXQsCit9OworCiAvKgogICogSG93IGxvbmcgdG8gd2Fp dCBmb3Igd2FscmVjZWl2ZXIgdG8gc3RhcnQgdXAgYWZ0ZXIgcmVxdWVzdGluZwogICogcG9z dG1hc3RlciB0byBsYXVuY2ggaXQuIEluIHNlY29uZHMuCiAgKi8KICNkZWZpbmUgV0FMUkNW X1NUQVJUVVBfVElNRU9VVCAxMAogCi0vKiBSZXBvcnQgc2hhcmVkIG1lbW9yeSBzcGFjZSBu ZWVkZWQgYnkgV2FsUmN2U2htZW1Jbml0ICovCi1TaXplCi1XYWxSY3ZTaG1lbVNpemUodm9p ZCkKKy8qIFJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkgc3BhY2UgbmVlZGVkIGJ5IHdhbHJlY2Vp dmVyICovCitzdGF0aWMgdm9pZAorV2FsUmN2U2htZW1SZXF1ZXN0KHZvaWQgKmFyZykKIHsK LQlTaXplCQlzaXplID0gMDsKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIFdhbFJjdlNobWVt RGVzYzsKIAotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBzaXplb2YoV2FsUmN2RGF0YSkpOwot Ci0JcmV0dXJuIHNpemU7CisJU2htZW1SZXF1ZXN0U3RydWN0KCZXYWxSY3ZTaG1lbURlc2Ms CisJCQkJCSAgIC5uYW1lID0gIldhbCBSZWNlaXZlciBDdGwiLAorCQkJCQkgICAuc2l6ZSA9 IHNpemVvZihXYWxSY3ZEYXRhKSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmV2FsUmN2 LAorCQkpOwogfQogCi0vKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB3YWxyZWNlaXZlci1y ZWxhdGVkIHNoYXJlZCBtZW1vcnkgKi8KLXZvaWQKLVdhbFJjdlNobWVtSW5pdCh2b2lkKQor LyogSW5pdGlhbGl6ZSB3YWxyZWNlaXZlci1yZWxhdGVkIHNoYXJlZCBtZW1vcnkgKi8KK3N0 YXRpYyB2b2lkCitXYWxSY3ZTaG1lbUluaXQodm9pZCAqYXJnKQogewotCWJvb2wJCWZvdW5k OwotCi0JV2FsUmN2ID0gKFdhbFJjdkRhdGEgKikKLQkJU2htZW1Jbml0U3RydWN0KCJXYWwg UmVjZWl2ZXIgQ3RsIiwgV2FsUmN2U2htZW1TaXplKCksICZmb3VuZCk7Ci0KLQlpZiAoIWZv dW5kKQotCXsKLQkJLyogRmlyc3QgdGltZSB0aHJvdWdoLCBzbyBpbml0aWFsaXplICovCi0J CU1lbVNldChXYWxSY3YsIDAsIFdhbFJjdlNobWVtU2l6ZSgpKTsKLQkJV2FsUmN2LT53YWxS Y3ZTdGF0ZSA9IFdBTFJDVl9TVE9QUEVEOwotCQlDb25kaXRpb25WYXJpYWJsZUluaXQoJldh bFJjdi0+d2FsUmN2U3RvcHBlZENWKTsKLQkJU3BpbkxvY2tJbml0KCZXYWxSY3YtPm11dGV4 KTsKLQkJcGdfYXRvbWljX2luaXRfdTY0KCZXYWxSY3YtPndyaXR0ZW5VcHRvLCAwKTsKLQkJ V2FsUmN2LT5wcm9jbm8gPSBJTlZBTElEX1BST0NfTlVNQkVSOwotCX0KKwlNZW1TZXQoV2Fs UmN2LCAwLCBzaXplb2YoV2FsUmN2RGF0YSkpOworCVdhbFJjdi0+d2FsUmN2U3RhdGUgPSBX QUxSQ1ZfU1RPUFBFRDsKKwlDb25kaXRpb25WYXJpYWJsZUluaXQoJldhbFJjdi0+d2FsUmN2 U3RvcHBlZENWKTsKKwlTcGluTG9ja0luaXQoJldhbFJjdi0+bXV0ZXgpOworCXBnX2F0b21p Y19pbml0X3U2NCgmV2FsUmN2LT53cml0dGVuVXB0bywgMCk7CisJV2FsUmN2LT5wcm9jbm8g PSBJTlZBTElEX1BST0NfTlVNQkVSOwogfQogCiAvKiBJcyB3YWxyZWNlaXZlciBydW5uaW5n IChvciBzdGFydGluZyB1cCk/ICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi93YWxzZW5kZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5j CmluZGV4IDY2NTA3ZTljMmRkLi5mZmNkMmRjMjk5OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vd2Fsc2VuZGVyLmMKQEAgLTg2LDYgKzg2LDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL3Bt c2lnbmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNs dWRlICJ0Y29wL2Rlc3QuaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCiAjaW5jbHVk ZSAidXRpbHMvYWNsLmgiCkBAIC0xMTcsNiArMTE4LDE0IEBACiAvKiBBcnJheSBvZiBXYWxT bmRzIGluIHNoYXJlZCBtZW1vcnkgKi8KIFdhbFNuZEN0bERhdGEgKldhbFNuZEN0bCA9IE5V TEw7CiAKK3N0YXRpYyB2b2lkIFdhbFNuZFNobWVtUmVxdWVzdCh2b2lkICphcmcpOworc3Rh dGljIHZvaWQgV2FsU25kU2htZW1Jbml0KHZvaWQgKmFyZyk7CisKK2NvbnN0IFNobWVtQ2Fs bGJhY2tzIFdhbFNuZFNobWVtQ2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gV2FsU25k U2htZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gV2FsU25kU2htZW1Jbml0LAorfTsKKwogLyog TXkgc2xvdCBpbiB0aGUgc2hhcmVkIG1lbW9yeSBhcnJheSAqLwogV2FsU25kCSAgICpNeVdh bFNuZCA9IE5VTEw7CiAKQEAgLTM3NjMsNDcgKzM3NzIsMzkgQEAgV2FsU25kU2lnbmFscyh2 b2lkKQogCXBxc2lnbmFsKFNJR0NITEQsIFNJR19ERkwpOwogfQogCi0vKiBSZXBvcnQgc2hh cmVkLW1lbW9yeSBzcGFjZSBuZWVkZWQgYnkgV2FsU25kU2htZW1Jbml0ICovCi1TaXplCi1X YWxTbmRTaG1lbVNpemUodm9pZCkKKy8qIFJlZ2lzdGVyIHNoYXJlZC1tZW1vcnkgc3BhY2Ug bmVlZGVkIGJ5IHdhbHNlbmRlciAqLworc3RhdGljIHZvaWQKK1dhbFNuZFNobWVtUmVxdWVz dCh2b2lkICphcmcpCiB7Ci0JU2l6ZQkJc2l6ZSA9IDA7CisJc3RhdGljIFNobWVtU3RydWN0 RGVzYyBXYWxTbmRTaG1lbURlc2M7CisJU2l6ZQkJc2l6ZTsKIAogCXNpemUgPSBvZmZzZXRv ZihXYWxTbmRDdGxEYXRhLCB3YWxzbmRzKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVs X3NpemUobWF4X3dhbF9zZW5kZXJzLCBzaXplb2YoV2FsU25kKSkpOwotCi0JcmV0dXJuIHNp emU7CisJU2htZW1SZXF1ZXN0U3RydWN0KCZXYWxTbmRTaG1lbURlc2MsCisJCQkJCSAgIC5u YW1lID0gIldhbCBTZW5kZXIgQ3RsIiwKKwkJCQkJICAgLnNpemUgPSBzaXplLAorCQkJCQkg ICAucHRyID0gKHZvaWQgKiopICZXYWxTbmRDdGwsCisJCSk7CiB9CiAKLS8qIEFsbG9jYXRl IGFuZCBpbml0aWFsaXplIHdhbHNlbmRlci1yZWxhdGVkIHNoYXJlZCBtZW1vcnkgKi8KLXZv aWQKLVdhbFNuZFNobWVtSW5pdCh2b2lkKQorLyogSW5pdGlhbGl6ZSB3YWxzZW5kZXItcmVs YXRlZCBzaGFyZWQgbWVtb3J5ICovCitzdGF0aWMgdm9pZAorV2FsU25kU2htZW1Jbml0KHZv aWQgKmFyZykKIHsKLQlib29sCQlmb3VuZDsKLQlpbnQJCQlpOworCWZvciAoaW50IGkgPSAw OyBpIDwgTlVNX1NZTkNfUkVQX1dBSVRfTU9ERTsgaSsrKQorCQlkbGlzdF9pbml0KCYoV2Fs U25kQ3RsLT5TeW5jUmVwUXVldWVbaV0pKTsKIAotCVdhbFNuZEN0bCA9IChXYWxTbmRDdGxE YXRhICopCi0JCVNobWVtSW5pdFN0cnVjdCgiV2FsIFNlbmRlciBDdGwiLCBXYWxTbmRTaG1l bVNpemUoKSwgJmZvdW5kKTsKLQotCWlmICghZm91bmQpCisJZm9yIChpbnQgaSA9IDA7IGkg PCBtYXhfd2FsX3NlbmRlcnM7IGkrKykKIAl7Ci0JCS8qIEZpcnN0IHRpbWUgdGhyb3VnaCwg c28gaW5pdGlhbGl6ZSAqLwotCQlNZW1TZXQoV2FsU25kQ3RsLCAwLCBXYWxTbmRTaG1lbVNp emUoKSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IE5VTV9TWU5DX1JFUF9XQUlUX01PREU7IGkr KykKLQkJCWRsaXN0X2luaXQoJihXYWxTbmRDdGwtPlN5bmNSZXBRdWV1ZVtpXSkpOwotCi0J CWZvciAoaSA9IDA7IGkgPCBtYXhfd2FsX3NlbmRlcnM7IGkrKykKLQkJewotCQkJV2FsU25k CSAgICp3YWxzbmQgPSAmV2FsU25kQ3RsLT53YWxzbmRzW2ldOwotCi0JCQlTcGluTG9ja0lu aXQoJndhbHNuZC0+bXV0ZXgpOwotCQl9CisJCVdhbFNuZAkgICAqd2Fsc25kID0gJldhbFNu ZEN0bC0+d2Fsc25kc1tpXTsKIAotCQlDb25kaXRpb25WYXJpYWJsZUluaXQoJldhbFNuZEN0 bC0+d2FsX2ZsdXNoX2N2KTsKLQkJQ29uZGl0aW9uVmFyaWFibGVJbml0KCZXYWxTbmRDdGwt PndhbF9yZXBsYXlfY3YpOwotCQlDb25kaXRpb25WYXJpYWJsZUluaXQoJldhbFNuZEN0bC0+ d2FsX2NvbmZpcm1fcmN2X2N2KTsKKwkJU3BpbkxvY2tJbml0KCZ3YWxzbmQtPm11dGV4KTsK IAl9CisKKwlDb25kaXRpb25WYXJpYWJsZUluaXQoJldhbFNuZEN0bC0+d2FsX2ZsdXNoX2N2 KTsKKwlDb25kaXRpb25WYXJpYWJsZUluaXQoJldhbFNuZEN0bC0+d2FsX3JlcGxheV9jdik7 CisJQ29uZGl0aW9uVmFyaWFibGVJbml0KCZXYWxTbmRDdGwtPndhbF9jb25maXJtX3Jjdl9j dik7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW9f aW5pdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvX2luaXQuYwppbmRleCAyNmNi ODI0MDM1ZC4uOWVmZTUzOTEyZWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YWlvL2Fpb19pbml0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvX2luaXQu YwpAQCAtMTI4LDEwICsxMjgsMTAgQEAgQWlvU2htZW1SZXF1ZXN0KHZvaWQgKmFyZykKIAlz dGF0aWMgU2htZW1TdHJ1Y3REZXNjIEFpb0hhbmRsZVNobWVtRGVzYzsKIAlzdGF0aWMgU2ht ZW1TdHJ1Y3REZXNjIEFpb0hhbmRsZUlPVlNobWVtRGVzYzsKIAlzdGF0aWMgU2htZW1TdHJ1 Y3REZXNjIEFpb0hhbmRsZURhdGFTaG1lbURlc2M7Ci0JCi0JLyogUmVzb2x2ZSBpb19tYXhf Y29uY3VycmVuY3kgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8KIAogCS8qCisJICogUmVzb2x2 ZSBpb19tYXhfY29uY3VycmVuY3kgaWYgbm90IGFscmVhZHkgZG9uZQorCSAqCiAJICogV2Ug cHJlZmVyIHRvIHJlcG9ydCB0aGlzIHZhbHVlJ3Mgc291cmNlIGFzIFBHQ19TX0RZTkFNSUNf REVGQVVMVC4KIAkgKiBIb3dldmVyLCBpZiB0aGUgREJBIGV4cGxpY2l0bHkgc2V0IGlvX21h eF9jb25jdXJyZW5jeSA9IC0xIGluIHRoZQogCSAqIGNvbmZpZyBmaWxlLCB0aGVuIFBHQ19T X0RZTkFNSUNfREVGQVVMVCB3aWxsIGZhaWwgdG8gb3ZlcnJpZGUgdGhhdCBhbmQKQEAgLTE1 MywyNSArMTUzLDI1IEBAIEFpb1NobWVtUmVxdWVzdCh2b2lkICphcmcpCiAJCQkJCSAgIC5u YW1lID0gIkFpb0N0bCIsCiAJCQkJCSAgIC5zaXplID0gc2l6ZW9mKFBnQWlvQ3RsKSwKIAkJ CQkJICAgLnB0ciA9ICh2b2lkICoqKSAmcGdhaW9fY3RsLAotCQkJCQkgICApOworCQkpOwog CiAJU2htZW1SZXF1ZXN0U3RydWN0KCZBaW9CYWNrZW5kU2htZW1EZXNjLAogCQkJCQkgICAu bmFtZSA9ICJBaW9CYWNrZW5kIiwKIAkJCQkJICAgLnNpemUgPSBBaW9CYWNrZW5kU2htZW1T aXplKCksCiAJCQkJCSAgIC5wdHIgPSAodm9pZCAqKikgJkFpb0JhY2tlbmRTaG1lbVB0ciwK LQkJCQkJICAgKTsKKwkJKTsKIAogCVNobWVtUmVxdWVzdFN0cnVjdCgmQWlvSGFuZGxlU2ht ZW1EZXNjLAogCQkJCQkgICAubmFtZSA9ICJBaW9IYW5kbGUiLAogCQkJCQkgICAuc2l6ZSA9 IEFpb0hhbmRsZVNobWVtU2l6ZSgpLAogCQkJCQkgICAucHRyID0gKHZvaWQgKiopICZBaW9I YW5kbGVTaG1lbVB0ciwKLQkJCQkJICAgKTsKKwkJKTsKIAogCVNobWVtUmVxdWVzdFN0cnVj dCgmQWlvSGFuZGxlSU9WU2htZW1EZXNjLAogCQkJCQkgICAubmFtZSA9ICJBaW9IYW5kbGVJ T1YiLAogCQkJCQkgICAuc2l6ZSA9IEFpb0hhbmRsZUlPVlNobWVtU2l6ZSgpLAogCQkJCQkg ICAucHRyID0gKHZvaWQgKiopICZBaW9IYW5kbGVJT1ZTaG1lbVB0ciwKLQkJCQkJICAgKTsK KwkJKTsKIAogCVNobWVtUmVxdWVzdFN0cnVjdCgmQWlvSGFuZGxlRGF0YVNobWVtRGVzYywK IAkJCQkJICAgLm5hbWUgPSAiQWlvSGFuZGxlRGF0YSIsCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9zdG9yYWdlL2Fpby9tZXRob2RfaW9fdXJpbmcuYyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvYWlvL21ldGhvZF9pb191cmluZy5jCmluZGV4IGZiNzVhMjA4YjY1Li44MmZiYmVmYzBi NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5n LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMKQEAg LTI3NSwxMCArMjc1LDcgQEAgcGdhaW9fdXJpbmdfc2htZW1fc2l6ZSh2b2lkKQogc3RhdGlj IHZvaWQKIHBnYWlvX3VyaW5nX3NobWVtX3JlcXVlc3Qodm9pZCAqYXJnKQogewotCXN0YXRp YyBTaG1lbVN0cnVjdERlc2MgQWlvVXJpbmdTaG1lbURlc2MgPSB7Ci0JCS5uYW1lID0gIkFp b1VyaW5nQ29udGV4dCIsCi0JCS5wdHIgPSAodm9pZCAqKikgJnBnYWlvX3VyaW5nX2NvbnRl eHRzLAotCX07CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBBaW9VcmluZ1NobWVtRGVzYzsK IAogCS8qCiAJICogS2VybmVsIGFuZCBsaWJ1cmluZyBzdXBwb3J0IGZvciB2YXJpb3VzIGZl YXR1cmVzIGluZmx1ZW5jZXMgaG93IG11Y2gKQEAgLTI4Niw4ICsyODMsMTEgQEAgcGdhaW9f dXJpbmdfc2htZW1fcmVxdWVzdCh2b2lkICphcmcpCiAJICovCiAJcGdhaW9fdXJpbmdfY2hl Y2tfY2FwYWJpbGl0aWVzKCk7CiAKLQlBaW9VcmluZ1NobWVtRGVzYy5zaXplID0gcGdhaW9f dXJpbmdfc2htZW1fc2l6ZSgpOwotCVNobWVtUmVxdWVzdFN0cnVjdCgmQWlvVXJpbmdTaG1l bURlc2MpOworCVNobWVtUmVxdWVzdFN0cnVjdCgmQWlvVXJpbmdTaG1lbURlc2MsCisJCQkJ CSAgIC5uYW1lID0gIkFpb1VyaW5nQ29udGV4dCIsCisJCQkJCSAgIC5zaXplID0gcGdhaW9f dXJpbmdfc2htZW1fc2l6ZSgpLAorCQkJCQkgICAucHRyID0gKHZvaWQgKiopICZwZ2Fpb191 cmluZ19jb250ZXh0cywKKwkJKTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvYWlvL21ldGhvZF93b3JrZXIuYwppbmRleCA4MmM4YjA5OGE5ZS4uZDk0MDY5NThl NmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF93b3JrZXIu YworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2Rfd29ya2VyLmMKQEAgLTE2 MiwxNiArMTYyLDE4IEBAIHBnYWlvX3dvcmtlcl9zaG1lbV9hdHRhY2godm9pZCAqYXJnKQog c3RhdGljIHZvaWQKIHBnYWlvX3dvcmtlcl9zaG1lbV9yZXF1ZXN0KHZvaWQgKmFyZykKIHsK LQlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIEFpb1dvcmtlclNobWVtRGVzYyA9IHsKLQkJLm5h bWUgPSAiQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlIiwKLQkJLnB0ciA9ICh2b2lkICoqKSAm aW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWUsCi0JfTsKKwlzdGF0aWMgU2htZW1TdHJ1Y3RE ZXNjIEFpb1dvcmtlclNobWVtRGVzYzsKIAlpbnQJCQlxdWV1ZV9zaXplOworCXNpemVfdAkJ c2l6ZTsKIAotCUFpb1dvcmtlclNobWVtRGVzYy5zaXplID0KLQkJTUFYQUxJR04ocGdhaW9f d29ya2VyX3F1ZXVlX3NobWVtX3NpemUoJnF1ZXVlX3NpemUpKSArCisJc2l6ZSA9IE1BWEFM SUdOKHBnYWlvX3dvcmtlcl9xdWV1ZV9zaG1lbV9zaXplKCZxdWV1ZV9zaXplKSkgKwogCQlw Z2Fpb193b3JrZXJfY29udHJvbF9zaG1lbV9zaXplKCk7Ci0JU2htZW1SZXF1ZXN0U3RydWN0 KCZBaW9Xb3JrZXJTaG1lbURlc2MpOworCisJU2htZW1SZXF1ZXN0U3RydWN0KCZBaW9Xb3Jr ZXJTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0gIkFpb1dvcmtlclN1Ym1pc3Npb25RdWV1 ZSIsCisJCQkJCSAgIC5zaXplID0gc2l6ZSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAm aW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWUsCisJCSk7CiB9CiAKIHN0YXRpYyBpbnQKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jCmluZGV4IGMwYzIyM2IyZTMyLi43 MWU3YzI5MTE2YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVm X2luaXQuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jCkBA IC0xOCw2ICsxOCw4IEBACiAjaW5jbHVkZSAic3RvcmFnZS9idWZfaW50ZXJuYWxzLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NsaXN0 LmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Vi c3lzdGVtcy5oIgogCiBCdWZmZXJEZXNjUGFkZGVkICpCdWZmZXJEZXNjcmlwdG9yczsKIGNo YXIJICAgKkJ1ZmZlckJsb2NrczsKQEAgLTI1LDYgKzI3LDE1IEBAIENvbmRpdGlvblZhcmlh YmxlTWluaW1hbGx5UGFkZGVkICpCdWZmZXJJT0NWQXJyYXk7CiBXcml0ZWJhY2tDb250ZXh0 IEJhY2tlbmRXcml0ZWJhY2tDb250ZXh0OwogQ2twdFNvcnRJdGVtICpDa3B0QnVmZmVySWRz OwogCitzdGF0aWMgdm9pZCBCdWZmZXJNYW5hZ2VyU2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7 CitzdGF0aWMgdm9pZCBCdWZmZXJNYW5hZ2VyU2htZW1Jbml0KHZvaWQgKmFyZyk7CitzdGF0 aWMgdm9pZCBCdWZmZXJNYW5hZ2VyU2htZW1BdHRhY2godm9pZCAqYXJnKTsKKworY29uc3Qg U2htZW1DYWxsYmFja3MgQnVmZmVyTWFuYWdlclNobWVtQ2FsbGJhY2tzID0geworCS5yZXF1 ZXN0X2ZuID0gQnVmZmVyTWFuYWdlclNobWVtUmVxdWVzdCwKKwkuaW5pdF9mbiA9IEJ1ZmZl ck1hbmFnZXJTaG1lbUluaXQsCisJLmF0dGFjaF9mbiA9IEJ1ZmZlck1hbmFnZXJTaG1lbUF0 dGFjaCwKK307CiAKIC8qCiAgKiBEYXRhIFN0cnVjdHVyZXM6CkBAIC02MCwzNyArNzEsMzkg QEAgQ2twdFNvcnRJdGVtICpDa3B0QnVmZmVySWRzOwogCiAKIC8qCi0gKiBJbml0aWFsaXpl IHNoYXJlZCBidWZmZXIgcG9vbAotICoKLSAqIFRoaXMgaXMgY2FsbGVkIG9uY2UgZHVyaW5n IHNoYXJlZC1tZW1vcnkgaW5pdGlhbGl6YXRpb24gKGVpdGhlciBpbiB0aGUKLSAqIHBvc3Rt YXN0ZXIsIG9yIGluIGEgc3RhbmRhbG9uZSBiYWNrZW5kKS4KKyAqIFJlZ2lzdGVyIHNoYXJl ZCBtZW1vcnkgYXJlYSBmb3IgdGhlIGJ1ZmZlciBwb29sLgogICovCi12b2lkCi1CdWZmZXJN YW5hZ2VyU2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAorQnVmZmVyTWFuYWdlclNobWVt UmVxdWVzdCh2b2lkICphcmcpCiB7Ci0JYm9vbAkJZm91bmRCdWZzLAotCQkJCWZvdW5kRGVz Y3MsCi0JCQkJZm91bmRJT0NWLAotCQkJCWZvdW5kQnVmQ2twdDsKLQorCXN0YXRpYyBTaG1l bVN0cnVjdERlc2MgQnVmZmVyRGVzY3JpcHRvcnNTaG1lbURlc2M7CisJc3RhdGljIFNobWVt U3RydWN0RGVzYyBCdWZmZXJCbG9ja3NTaG1lbURlc2M7CisJc3RhdGljIFNobWVtU3RydWN0 RGVzYyBCdWZmZXJJT0NWQXJyYXlTaG1lbURlc2M7CisJc3RhdGljIFNobWVtU3RydWN0RGVz YyBDa3B0QnVmZmVySWRzU2htZW1EZXNjOworCisJU2htZW1SZXF1ZXN0U3RydWN0KCZCdWZm ZXJEZXNjcmlwdG9yc1NobWVtRGVzYywKKwkJCQkJICAgLm5hbWUgPSAiQnVmZmVyIERlc2Ny aXB0b3JzIiwKKwkJCQkJICAgLnNpemUgPSBOQnVmZmVycyAqIHNpemVvZihCdWZmZXJEZXNj UGFkZGVkKSwKIAkvKiBBbGlnbiBkZXNjcmlwdG9ycyB0byBhIGNhY2hlbGluZSBib3VuZGFy eS4gKi8KLQlCdWZmZXJEZXNjcmlwdG9ycyA9IChCdWZmZXJEZXNjUGFkZGVkICopCi0JCVNo bWVtSW5pdFN0cnVjdCgiQnVmZmVyIERlc2NyaXB0b3JzIiwKLQkJCQkJCU5CdWZmZXJzICog c2l6ZW9mKEJ1ZmZlckRlc2NQYWRkZWQpLAotCQkJCQkJJmZvdW5kRGVzY3MpOworCQkJCQkg ICAuYWxpZ25tZW50ID0gUEdfQ0FDSEVfTElORV9TSVpFLAorCQkJCQkgICAucHRyID0gKHZv aWQgKiopICZCdWZmZXJEZXNjcmlwdG9ycywKKwkJKTsKIAorCVNobWVtUmVxdWVzdFN0cnVj dCgmQnVmZmVyQmxvY2tzU2htZW1EZXNjLAorCQkJCQkgICAubmFtZSA9ICJCdWZmZXIgQmxv Y2tzIiwKKwkJCQkJICAgLnNpemUgPSBOQnVmZmVycyAqIChTaXplKSBCTENLU1osCiAJLyog QWxpZ24gYnVmZmVyIHBvb2wgb24gSU8gcGFnZSBzaXplIGJvdW5kYXJ5LiAqLwotCUJ1ZmZl ckJsb2NrcyA9IChjaGFyICopCi0JCVRZUEVBTElHTihQR19JT19BTElHTl9TSVpFLAotCQkJ CSAgU2htZW1Jbml0U3RydWN0KCJCdWZmZXIgQmxvY2tzIiwKLQkJCQkJCQkJICBOQnVmZmVy cyAqIChTaXplKSBCTENLU1ogKyBQR19JT19BTElHTl9TSVpFLAotCQkJCQkJCQkgICZmb3Vu ZEJ1ZnMpKTsKLQotCS8qIEFsaWduIGNvbmRpdGlvbiB2YXJpYWJsZXMgdG8gY2FjaGVsaW5l IGJvdW5kYXJ5LiAqLwotCUJ1ZmZlcklPQ1ZBcnJheSA9IChDb25kaXRpb25WYXJpYWJsZU1p bmltYWxseVBhZGRlZCAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIkJ1ZmZlciBJTyBDb25kaXRp b24gVmFyaWFibGVzIiwKLQkJCQkJCU5CdWZmZXJzICogc2l6ZW9mKENvbmRpdGlvblZhcmlh YmxlTWluaW1hbGx5UGFkZGVkKSwKLQkJCQkJCSZmb3VuZElPQ1YpOworCQkJCQkgICAuYWxp Z25tZW50ID0gUEdfSU9fQUxJR05fU0laRSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAm QnVmZmVyQmxvY2tzLAorCQkpOworCisJU2htZW1SZXF1ZXN0U3RydWN0KCZCdWZmZXJJT0NW QXJyYXlTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0gIkJ1ZmZlciBJTyBDb25kaXRpb24g VmFyaWFibGVzIiwKKwkJCQkJICAgLnNpemUgPSBOQnVmZmVycyAqIHNpemVvZihDb25kaXRp b25WYXJpYWJsZU1pbmltYWxseVBhZGRlZCksCisJLyogQWxpZ24gZGVzY3JpcHRvcnMgdG8g YSBjYWNoZWxpbmUgYm91bmRhcnkuICovCisJCQkJCSAgIC5hbGlnbm1lbnQgPSBQR19DQUNI RV9MSU5FX1NJWkUsCisJCQkJCSAgIC5wdHIgPSAodm9pZCAqKikgJkJ1ZmZlcklPQ1ZBcnJh eSwKKwkJKTsKIAogCS8qCiAJICogVGhlIGFycmF5IHVzZWQgdG8gc29ydCB0by1iZS1jaGVj a3BvaW50ZWQgYnVmZmVyIGlkcyBpcyBsb2NhdGVkIGluCkBAIC05OSw4MCArMTEyLDUxIEBA IEJ1ZmZlck1hbmFnZXJTaG1lbUluaXQodm9pZCkKIAkgKiB0aGUgY2hlY2twb2ludGVyIGlz IHJlc3RhcnRlZCwgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgd291bGQgYmUKIAkgKiBw YWluZnVsLgogCSAqLwotCUNrcHRCdWZmZXJJZHMgPSAoQ2twdFNvcnRJdGVtICopCi0JCVNo bWVtSW5pdFN0cnVjdCgiQ2hlY2twb2ludCBCdWZmZXJJZHMiLAotCQkJCQkJTkJ1ZmZlcnMg KiBzaXplb2YoQ2twdFNvcnRJdGVtKSwgJmZvdW5kQnVmQ2twdCk7CisJU2htZW1SZXF1ZXN0 U3RydWN0KCZDa3B0QnVmZmVySWRzU2htZW1EZXNjLAorCQkJCQkgICAubmFtZSA9ICJDaGVj a3BvaW50IEJ1ZmZlcklkcyIsCisJCQkJCSAgIC5zaXplID0gTkJ1ZmZlcnMgKiBzaXplb2Yo Q2twdFNvcnRJdGVtKSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmQ2twdEJ1ZmZlcklk cywKKwkJKTsKK30KIAotCWlmIChmb3VuZERlc2NzIHx8IGZvdW5kQnVmcyB8fCBmb3VuZElP Q1YgfHwgZm91bmRCdWZDa3B0KQotCXsKLQkJLyogc2hvdWxkIGZpbmQgYWxsIG9mIHRoZXNl LCBvciBub25lIG9mIHRoZW0gKi8KLQkJQXNzZXJ0KGZvdW5kRGVzY3MgJiYgZm91bmRCdWZz ICYmIGZvdW5kSU9DViAmJiBmb3VuZEJ1ZkNrcHQpOwotCQkvKiBub3RlOiB0aGlzIHBhdGgg aXMgb25seSB0YWtlbiBpbiBFWEVDX0JBQ0tFTkQgY2FzZSAqLwotCX0KLQllbHNlCisvKgor ICogSW5pdGlhbGl6ZSBzaGFyZWQgYnVmZmVyIHBvb2wKKyAqCisgKiBUaGlzIGlzIGNhbGxl ZCBvbmNlIGR1cmluZyBzaGFyZWQtbWVtb3J5IGluaXRpYWxpemF0aW9uIChlaXRoZXIgaW4g dGhlCisgKiBwb3N0bWFzdGVyLCBvciBpbiBhIHN0YW5kYWxvbmUgYmFja2VuZCkuCisgKi8K K3N0YXRpYyB2b2lkCitCdWZmZXJNYW5hZ2VyU2htZW1Jbml0KHZvaWQgKmFyZykKK3sKKwkv KgorCSAqIEluaXRpYWxpemUgYWxsIHRoZSBidWZmZXIgaGVhZGVycy4KKwkgKi8KKwlmb3Ig KGludCBpID0gMDsgaSA8IE5CdWZmZXJzOyBpKyspCiAJewotCQlpbnQJCQlpOworCQlCdWZm ZXJEZXNjICpidWYgPSBHZXRCdWZmZXJEZXNjcmlwdG9yKGkpOwogCi0JCS8qCi0JCSAqIElu aXRpYWxpemUgYWxsIHRoZSBidWZmZXIgaGVhZGVycy4KLQkJICovCi0JCWZvciAoaSA9IDA7 IGkgPCBOQnVmZmVyczsgaSsrKQotCQl7Ci0JCQlCdWZmZXJEZXNjICpidWYgPSBHZXRCdWZm ZXJEZXNjcmlwdG9yKGkpOworCQlDbGVhckJ1ZmZlclRhZygmYnVmLT50YWcpOwogCi0JCQlD bGVhckJ1ZmZlclRhZygmYnVmLT50YWcpOworCQlwZ19hdG9taWNfaW5pdF91NjQoJmJ1Zi0+ c3RhdGUsIDApOworCQlidWYtPndhaXRfYmFja2VuZF9wZ3Byb2NubyA9IElOVkFMSURfUFJP Q19OVU1CRVI7CiAKLQkJCXBnX2F0b21pY19pbml0X3U2NCgmYnVmLT5zdGF0ZSwgMCk7Ci0J CQlidWYtPndhaXRfYmFja2VuZF9wZ3Byb2NubyA9IElOVkFMSURfUFJPQ19OVU1CRVI7CisJ CWJ1Zi0+YnVmX2lkID0gaTsKIAotCQkJYnVmLT5idWZfaWQgPSBpOworCQlwZ2Fpb193cmVm X2NsZWFyKCZidWYtPmlvX3dyZWYpOwogCi0JCQlwZ2Fpb193cmVmX2NsZWFyKCZidWYtPmlv X3dyZWYpOwotCi0JCQlwcm9jbGlzdF9pbml0KCZidWYtPmxvY2tfd2FpdGVycyk7Ci0JCQlD b25kaXRpb25WYXJpYWJsZUluaXQoQnVmZmVyRGVzY3JpcHRvckdldElPQ1YoYnVmKSk7Ci0J CX0KKwkJcHJvY2xpc3RfaW5pdCgmYnVmLT5sb2NrX3dhaXRlcnMpOworCQlDb25kaXRpb25W YXJpYWJsZUluaXQoQnVmZmVyRGVzY3JpcHRvckdldElPQ1YoYnVmKSk7CiAJfQogCi0JLyog SW5pdCBvdGhlciBzaGFyZWQgYnVmZmVyLW1hbmFnZW1lbnQgc3R1ZmYgKi8KLQlTdHJhdGVn eUluaXRpYWxpemUoIWZvdW5kRGVzY3MpOwotCiAJLyogSW5pdGlhbGl6ZSBwZXItYmFja2Vu ZCBmaWxlIGZsdXNoIGNvbnRleHQgKi8KIAlXcml0ZWJhY2tDb250ZXh0SW5pdCgmQmFja2Vu ZFdyaXRlYmFja0NvbnRleHQsCiAJCQkJCQkgJmJhY2tlbmRfZmx1c2hfYWZ0ZXIpOwogfQog Ci0vKgotICogQnVmZmVyTWFuYWdlclNobWVtU2l6ZQotICoKLSAqIGNvbXB1dGUgdGhlIHNp emUgb2Ygc2hhcmVkIG1lbW9yeSBmb3IgdGhlIGJ1ZmZlciBwb29sIGluY2x1ZGluZwotICog ZGF0YSBwYWdlcywgYnVmZmVyIGRlc2NyaXB0b3JzLCBoYXNoIHRhYmxlcywgZXRjLgotICov Ci1TaXplCi1CdWZmZXJNYW5hZ2VyU2htZW1TaXplKHZvaWQpCitzdGF0aWMgdm9pZAorQnVm ZmVyTWFuYWdlclNobWVtQXR0YWNoKHZvaWQgKmFyZykKIHsKLQlTaXplCQlzaXplID0gMDsK LQotCS8qIHNpemUgb2YgYnVmZmVyIGRlc2NyaXB0b3JzICovCi0Jc2l6ZSA9IGFkZF9zaXpl KHNpemUsIG11bF9zaXplKE5CdWZmZXJzLCBzaXplb2YoQnVmZmVyRGVzY1BhZGRlZCkpKTsK LQkvKiB0byBhbGxvdyBhbGlnbmluZyBidWZmZXIgZGVzY3JpcHRvcnMgKi8KLQlzaXplID0g YWRkX3NpemUoc2l6ZSwgUEdfQ0FDSEVfTElORV9TSVpFKTsKLQotCS8qIHNpemUgb2YgZGF0 YSBwYWdlcywgcGx1cyBhbGlnbm1lbnQgcGFkZGluZyAqLwotCXNpemUgPSBhZGRfc2l6ZShz aXplLCBQR19JT19BTElHTl9TSVpFKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3Np emUoTkJ1ZmZlcnMsIEJMQ0tTWikpOwotCi0JLyogc2l6ZSBvZiBzdHVmZiBjb250cm9sbGVk IGJ5IGZyZWVsaXN0LmMgKi8KLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgU3RyYXRlZ3lTaG1l bVNpemUoKSk7Ci0KLQkvKiBzaXplIG9mIEkvTyBjb25kaXRpb24gdmFyaWFibGVzICovCi0J c2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKE5CdWZmZXJzLAotCQkJCQkJCQkgICBz aXplb2YoQ29uZGl0aW9uVmFyaWFibGVNaW5pbWFsbHlQYWRkZWQpKSk7Ci0JLyogdG8gYWxs b3cgYWxpZ25pbmcgdGhlIGFib3ZlICovCi0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFBHX0NB Q0hFX0xJTkVfU0laRSk7Ci0KLQkvKiBzaXplIG9mIGNoZWNrcG9pbnQgc29ydCBhcnJheSBp biBidWZtZ3IuYyAqLwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShOQnVmZmVy cywgc2l6ZW9mKENrcHRTb3J0SXRlbSkpKTsKLQotCXJldHVybiBzaXplOworCS8qIEluaXRp YWxpemUgcGVyLWJhY2tlbmQgZmlsZSBmbHVzaCBjb250ZXh0ICovCisJV3JpdGViYWNrQ29u dGV4dEluaXQoJkJhY2tlbmRXcml0ZWJhY2tDb250ZXh0LAorCQkJCQkJICZiYWNrZW5kX2Zs dXNoX2FmdGVyKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVy L2J1Zl90YWJsZS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX3RhYmxlLmMK aW5kZXggMjNkODVmZDMyZTIuLmRiNGYzZjVmZjM1IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2J1ZmZlci9idWZfdGFibGUuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2J1ZmZlci9idWZfdGFibGUuYwpAQCAtMzIsMzcgKzMyLDI1IEBAIHR5cGVkZWYgc3RydWN0 CiAKIHN0YXRpYyBIVEFCICpTaGFyZWRCdWZIYXNoOwogCi0KLS8qCi0gKiBFc3RpbWF0ZSBz cGFjZSBuZWVkZWQgZm9yIG1hcHBpbmcgaGFzaHRhYmxlCi0gKgkJc2l6ZSBpcyB0aGUgZGVz aXJlZCBoYXNoIHRhYmxlIHNpemUgKHBvc3NpYmx5IG1vcmUgdGhhbiBOQnVmZmVycykKLSAq LwotU2l6ZQotQnVmVGFibGVTaG1lbVNpemUoaW50IHNpemUpCi17Ci0JcmV0dXJuIGhhc2hf ZXN0aW1hdGVfc2l6ZShzaXplLCBzaXplb2YoQnVmZmVyTG9va3VwRW50KSk7Ci19Ci0KIC8q Ci0gKiBJbml0aWFsaXplIHNobWVtIGhhc2ggdGFibGUgZm9yIG1hcHBpbmcgYnVmZmVycwor ICogUmVnaXN0ZXIgc2htZW0gaGFzaCB0YWJsZSBmb3IgbWFwcGluZyBidWZmZXJzLgogICoJ CXNpemUgaXMgdGhlIGRlc2lyZWQgaGFzaCB0YWJsZSBzaXplIChwb3NzaWJseSBtb3JlIHRo YW4gTkJ1ZmZlcnMpCiAgKi8KIHZvaWQKLUluaXRCdWZUYWJsZShpbnQgc2l6ZSkKK0J1ZlRh YmxlU2htZW1SZXF1ZXN0KGludCBzaXplKQogewotCUhBU0hDVEwJCWluZm87Ci0KLQkvKiBh c3N1bWUgbm8gbG9ja2luZyBpcyBuZWVkZWQgeWV0ICovCi0KLQkvKiBCdWZmZXJUYWcgbWFw cyB0byBCdWZmZXIgKi8KLQlpbmZvLmtleXNpemUgPSBzaXplb2YoQnVmZmVyVGFnKTsKLQlp bmZvLmVudHJ5c2l6ZSA9IHNpemVvZihCdWZmZXJMb29rdXBFbnQpOwotCWluZm8ubnVtX3Bh cnRpdGlvbnMgPSBOVU1fQlVGRkVSX1BBUlRJVElPTlM7Ci0KLQlTaGFyZWRCdWZIYXNoID0g U2htZW1Jbml0SGFzaCgiU2hhcmVkIEJ1ZmZlciBMb29rdXAgVGFibGUiLAotCQkJCQkJCQkg IHNpemUsIHNpemUsCi0JCQkJCQkJCSAgJmluZm8sCi0JCQkJCQkJCSAgSEFTSF9FTEVNIHwg SEFTSF9CTE9CUyB8IEhBU0hfUEFSVElUSU9OIHwgSEFTSF9GSVhFRF9TSVpFKTsKKwlzdGF0 aWMgU2htZW1IYXNoRGVzYyBTaGFyZWRCdWZIYXNoRGVzYzsKKworCVNobWVtUmVxdWVzdEhh c2goJlNoYXJlZEJ1Zkhhc2hEZXNjLAorCQkJCQkgLm5hbWUgPSAiU2hhcmVkIEJ1ZmZlciBM b29rdXAgVGFibGUiLAorCQkJCQkgLm1heF9zaXplID0gc2l6ZSwKKwkJCQkJIC5pbml0X3Np emUgPSBzaXplLAorCQkJCQkgLnB0ciA9ICZTaGFyZWRCdWZIYXNoLAorCQkJCQkgLmhhc2hf aW5mby5rZXlzaXplID0gc2l6ZW9mKEJ1ZmZlclRhZyksCisJCQkJCSAuaGFzaF9pbmZvLmVu dHJ5c2l6ZSA9IHNpemVvZihCdWZmZXJMb29rdXBFbnQpLAorCQkJCQkgLmhhc2hfaW5mby5u dW1fcGFydGl0aW9ucyA9IE5VTV9CVUZGRVJfUEFSVElUSU9OUywKKwkJCQkJIC5oYXNoX2Zs YWdzID0gSEFTSF9FTEVNIHwgSEFTSF9CTE9CUyB8IEhBU0hfUEFSVElUSU9OIHwgSEFTSF9G SVhFRF9TSVpFLAorCQkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvZnJlZWxpc3QuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2Zy ZWVsaXN0LmMKaW5kZXggYjc2ODc4MzYxODguLmNmYzI5ZDczODAzIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jCisrKyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKQEAgLTIwLDYgKzIwLDggQEAKICNpbmNsdWRl ICJzdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5o IgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0u aCIKKyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKIAogI2RlZmluZSBJTlRfQUND RVNTX09OQ0UodmFyKQkoKGludCkoKigodm9sYXRpbGUgaW50ICopJih2YXIpKSkpCiAKQEAg LTU2LDYgKzU4LDE0IEBAIHR5cGVkZWYgc3RydWN0CiAvKiBQb2ludGVycyB0byBzaGFyZWQg c3RhdGUgKi8KIHN0YXRpYyBCdWZmZXJTdHJhdGVneUNvbnRyb2wgKlN0cmF0ZWd5Q29udHJv bCA9IE5VTEw7CiAKK3N0YXRpYyB2b2lkIFN0cmF0ZWd5Q3RsU2htZW1SZXF1ZXN0KHZvaWQg KmFyZyk7CitzdGF0aWMgdm9pZCBTdHJhdGVneUN0bFNobWVtSW5pdCh2b2lkICphcmcpOwor Citjb25zdCBTaG1lbUNhbGxiYWNrcyBTdHJhdGVneUN0bFNobWVtQ2FsbGJhY2tzID0gewor CS5yZXF1ZXN0X2ZuID0gU3RyYXRlZ3lDdGxTaG1lbVJlcXVlc3QsCisJLmluaXRfZm4gPSBT dHJhdGVneUN0bFNobWVtSW5pdCwKK307CisKIC8qCiAgKiBQcml2YXRlIChub24tc2hhcmVk KSBzdGF0ZSBmb3IgbWFuYWdpbmcgYSByaW5nIG9mIHNoYXJlZCBidWZmZXJzIHRvIHJlLXVz ZS4KICAqIFRoaXMgaXMgY3VycmVudGx5IHRoZSBvbmx5IGtpbmQgb2YgQnVmZmVyQWNjZXNz U3RyYXRlZ3kgb2JqZWN0LCBidXQgc29tZWRheQpAQCAtMzY5LDQxICszNzksMjIgQEAgU3Ry YXRlZ3lOb3RpZnlCZ1dyaXRlcihpbnQgYmd3cHJvY25vKQogCiAKIC8qCi0gKiBTdHJhdGVn eVNobWVtU2l6ZQotICoKLSAqIGVzdGltYXRlIHRoZSBzaXplIG9mIHNoYXJlZCBtZW1vcnkg dXNlZCBieSB0aGUgZnJlZWxpc3QtcmVsYXRlZCBzdHJ1Y3R1cmVzLgotICoKLSAqIE5vdGU6 IGZvciBzb21ld2hhdCBoaXN0b3JpY2FsIHJlYXNvbnMsIHRoZSBidWZmZXIgbG9va3VwIGhh c2h0YWJsZSBzaXplCi0gKiBpcyBhbHNvIGRldGVybWluZWQgaGVyZS4KKyAqIFN0cmF0ZWd5 Q3RsU2htZW1SZXF1ZXN0IC0tIHJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkgZm9yIHRoZSBidWZm ZXIKKyAqCQljYWNoZSByZXBsYWNlbWVudCBzdHJhdGVneS4KICAqLwotU2l6ZQotU3RyYXRl Z3lTaG1lbVNpemUodm9pZCkKK3N0YXRpYyB2b2lkCitTdHJhdGVneUN0bFNobWVtUmVxdWVz dCh2b2lkICphcmcpCiB7Ci0JU2l6ZQkJc2l6ZSA9IDA7Ci0KLQkvKiBzaXplIG9mIGxvb2t1 cCBoYXNoIHRhYmxlIC4uLiBzZWUgY29tbWVudCBpbiBTdHJhdGVneUluaXRpYWxpemUgKi8K LQlzaXplID0gYWRkX3NpemUoc2l6ZSwgQnVmVGFibGVTaG1lbVNpemUoTkJ1ZmZlcnMgKyBO VU1fQlVGRkVSX1BBUlRJVElPTlMpKTsKLQotCS8qIHNpemUgb2YgdGhlIHNoYXJlZCByZXBs YWNlbWVudCBzdHJhdGVneSBjb250cm9sIGJsb2NrICovCi0Jc2l6ZSA9IGFkZF9zaXplKHNp emUsIE1BWEFMSUdOKHNpemVvZihCdWZmZXJTdHJhdGVneUNvbnRyb2wpKSk7CisJc3RhdGlj IFNobWVtU3RydWN0RGVzYyBTdHJhdGVneUN0bFNobWVtRGVzYzsKIAotCXJldHVybiBzaXpl OwotfQotCi0vKgotICogU3RyYXRlZ3lJbml0aWFsaXplIC0tIGluaXRpYWxpemUgdGhlIGJ1 ZmZlciBjYWNoZSByZXBsYWNlbWVudAotICoJCXN0cmF0ZWd5LgotICoKLSAqIEFzc3VtZXM6 IEFsbCBvZiB0aGUgYnVmZmVycyBhcmUgYWxyZWFkeSBidWlsdCBpbnRvIGEgbGlua2VkIGxp c3QuCi0gKgkJT25seSBjYWxsZWQgYnkgcG9zdG1hc3RlciBhbmQgb25seSBkdXJpbmcgaW5p dGlhbGl6YXRpb24uCi0gKi8KLXZvaWQKLVN0cmF0ZWd5SW5pdGlhbGl6ZShib29sIGluaXQp Ci17Ci0JYm9vbAkJZm91bmQ7CisJU2htZW1SZXF1ZXN0U3RydWN0KCZTdHJhdGVneUN0bFNo bWVtRGVzYywKKwkJCQkJICAgLm5hbWUgPSAiQnVmZmVyIFN0cmF0ZWd5IFN0YXR1cyIsCisJ CQkJCSAgIC5zaXplID0gc2l6ZW9mKEJ1ZmZlclN0cmF0ZWd5Q29udHJvbCksCisJCQkJCSAg IC5wdHIgPSAodm9pZCAqKikgJlN0cmF0ZWd5Q29udHJvbAorCQkpOwogCiAJLyoKLQkgKiBJ bml0aWFsaXplIHRoZSBzaGFyZWQgYnVmZmVyIGxvb2t1cCBoYXNodGFibGUuCisJICogUmVx dWVzdCB0aGUgc2hhcmVkIGJ1ZmZlciBsb29rdXAgaGFzaHRhYmxlLgogCSAqCiAJICogU2lu Y2Ugd2UgY2FuJ3QgdG9sZXJhdGUgcnVubmluZyBvdXQgb2YgbG9va3VwIHRhYmxlIGVudHJp ZXMsIHdlIG11c3QgYmUKIAkgKiBzdXJlIHRvIHNwZWNpZnkgYW4gYWRlcXVhdGUgdGFibGUg c2l6ZSBoZXJlLiAgVGhlIG1heGltdW0gc3RlYWR5LXN0YXRlCkBAIC00MTIsMzcgKzQwMywy NiBAQCBTdHJhdGVneUluaXRpYWxpemUoYm9vbCBpbml0KQogCSAqIGhhcHBlbmluZyBpbiBl YWNoIHBhcnRpdGlvbiBjb25jdXJyZW50bHksIHNvIHdlIGNvdWxkIG5lZWQgYXMgbWFueSBh cwogCSAqIE5CdWZmZXJzICsgTlVNX0JVRkZFUl9QQVJUSVRJT05TIGVudHJpZXMuCiAJICov Ci0JSW5pdEJ1ZlRhYmxlKE5CdWZmZXJzICsgTlVNX0JVRkZFUl9QQVJUSVRJT05TKTsKLQot CS8qCi0JICogR2V0IG9yIGNyZWF0ZSB0aGUgc2hhcmVkIHN0cmF0ZWd5IGNvbnRyb2wgYmxv Y2sKLQkgKi8KLQlTdHJhdGVneUNvbnRyb2wgPSAoQnVmZmVyU3RyYXRlZ3lDb250cm9sICop Ci0JCVNobWVtSW5pdFN0cnVjdCgiQnVmZmVyIFN0cmF0ZWd5IFN0YXR1cyIsCi0JCQkJCQlz aXplb2YoQnVmZmVyU3RyYXRlZ3lDb250cm9sKSwKLQkJCQkJCSZmb3VuZCk7Ci0KLQlpZiAo IWZvdW5kKQotCXsKLQkJLyoKLQkJICogT25seSBkb25lIG9uY2UsIHVzdWFsbHkgaW4gcG9z dG1hc3RlcgotCQkgKi8KLQkJQXNzZXJ0KGluaXQpOworCUJ1ZlRhYmxlU2htZW1SZXF1ZXN0 KE5CdWZmZXJzICsgTlVNX0JVRkZFUl9QQVJUSVRJT05TKTsKK30KIAotCQlTcGluTG9ja0lu aXQoJlN0cmF0ZWd5Q29udHJvbC0+YnVmZmVyX3N0cmF0ZWd5X2xvY2spOworLyoKKyAqIFN0 cmF0ZWd5Q3RsU2htZW1Jbml0IC0tIGluaXRpYWxpemUgdGhlIGJ1ZmZlciBjYWNoZSByZXBs YWNlbWVudCBzdHJhdGVneS4KKyAqLworc3RhdGljIHZvaWQKK1N0cmF0ZWd5Q3RsU2htZW1J bml0KHZvaWQgKmFyZykKK3sKKwlTcGluTG9ja0luaXQoJlN0cmF0ZWd5Q29udHJvbC0+YnVm ZmVyX3N0cmF0ZWd5X2xvY2spOwogCi0JCS8qIEluaXRpYWxpemUgdGhlIGNsb2NrLXN3ZWVw IHBvaW50ZXIgKi8KLQkJcGdfYXRvbWljX2luaXRfdTMyKCZTdHJhdGVneUNvbnRyb2wtPm5l eHRWaWN0aW1CdWZmZXIsIDApOworCS8qIEluaXRpYWxpemUgdGhlIGNsb2NrLXN3ZWVwIHBv aW50ZXIgKi8KKwlwZ19hdG9taWNfaW5pdF91MzIoJlN0cmF0ZWd5Q29udHJvbC0+bmV4dFZp Y3RpbUJ1ZmZlciwgMCk7CiAKLQkJLyogQ2xlYXIgc3RhdGlzdGljcyAqLwotCQlTdHJhdGVn eUNvbnRyb2wtPmNvbXBsZXRlUGFzc2VzID0gMDsKLQkJcGdfYXRvbWljX2luaXRfdTMyKCZT dHJhdGVneUNvbnRyb2wtPm51bUJ1ZmZlckFsbG9jcywgMCk7CisJLyogQ2xlYXIgc3RhdGlz dGljcyAqLworCVN0cmF0ZWd5Q29udHJvbC0+Y29tcGxldGVQYXNzZXMgPSAwOworCXBnX2F0 b21pY19pbml0X3UzMigmU3RyYXRlZ3lDb250cm9sLT5udW1CdWZmZXJBbGxvY3MsIDApOwog Ci0JCS8qIE5vIHBlbmRpbmcgbm90aWZpY2F0aW9uICovCi0JCVN0cmF0ZWd5Q29udHJvbC0+ Ymd3cHJvY25vID0gLTE7Ci0JfQotCWVsc2UKLQkJQXNzZXJ0KCFpbml0KTsKKwkvKiBObyBw ZW5kaW5nIG5vdGlmaWNhdGlvbiAqLworCVN0cmF0ZWd5Q29udHJvbC0+Ymd3cHJvY25vID0g LTE7CiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5j IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCmluZGV4IDI5MTZmY2Q5MzBlLi41 ZTE4Mjk3NDAwOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5j CisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwpAQCAtMTQsMzYgKzE0LDEz IEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCi0jaW5jbHVkZSAiYWNjZXNzL2Ns b2cuaCIKLSNpbmNsdWRlICJhY2Nlc3MvY29tbWl0X3RzLmgiCi0jaW5jbHVkZSAiYWNjZXNz L211bHRpeGFjdC5oIgotI2luY2x1ZGUgImFjY2Vzcy9uYnRyZWUuaCIKLSNpbmNsdWRlICJh Y2Nlc3Mvc3VidHJhbnMuaCIKLSNpbmNsdWRlICJhY2Nlc3Mvc3luY3NjYW4uaCIKLSNpbmNs dWRlICJhY2Nlc3MvdHdvcGhhc2UuaCIKLSNpbmNsdWRlICJhY2Nlc3MveGxvZ3ByZWZldGNo ZXIuaCIKLSNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlY292ZXJ5LmgiCi0jaW5jbHVkZSAiYWNj ZXNzL3hsb2d3YWl0LmgiCi0jaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKICNpbmNsdWRl ICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKLSNpbmNsdWRlICJwb3N0bWFz dGVyL2F1dG92YWN1dW0uaCIKLSNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd29ya2VyX2ludGVy bmFscy5oIgotI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3cml0ZXIuaCIKLSNpbmNsdWRlICJw b3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuaCIKLSNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dp Y2FsbGF1bmNoZXIuaCIKLSNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKLSNpbmNs dWRlICJyZXBsaWNhdGlvbi9zbG90LmgiCi0jaW5jbHVkZSAicmVwbGljYXRpb24vc2xvdHN5 bmMuaCIKLSNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oIgotI2luY2x1ZGUg InJlcGxpY2F0aW9uL3dhbHNlbmRlci5oIgotI2luY2x1ZGUgInN0b3JhZ2UvYWlvX3N1YnN5 cy5oIgotI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9k c20uaCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbG9j ay5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcGdfc2htZW0uaCIKICNpbmNsdWRlICJzdG9yYWdl L3Btc2lnbmFsLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRl ICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKICNp bmNsdWRlICJ1dGlscy9ndWMuaCIKQEAgLTU1LDggKzMyLDYgQEAgc2htZW1fc3RhcnR1cF9o b29rX3R5cGUgc2htZW1fc3RhcnR1cF9ob29rID0gTlVMTDsKIAogc3RhdGljIFNpemUgdG90 YWxfYWRkaW5fcmVxdWVzdCA9IDA7CiAKLXN0YXRpYyB2b2lkIENyZWF0ZU9yQXR0YWNoU2ht ZW1TdHJ1Y3RzKHZvaWQpOwotCiAvKgogICogUmVxdWVzdEFkZGluU2htZW1TcGFjZQogICoJ CVJlcXVlc3QgdGhhdCBleHRyYSBzaG1lbSBzcGFjZSBiZSBhbGxvY2F0ZWQgZm9yIHVzZSBi eQpAQCAtOTUsMzIgKzcwLDYgQEAgQ2FsY3VsYXRlU2htZW1TaXplKHZvaWQpCiAJc2l6ZSA9 IDEwMDAwMDsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgU2htZW1HZXRSZXF1ZXN0ZWRTaXpl KCkpOwogCi0JLyogbGVnYWN5IHN1YnN5c3RlbXMgKi8KLQlzaXplID0gYWRkX3NpemUoc2l6 ZSwgQnVmZmVyTWFuYWdlclNobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwg TG9ja01hbmFnZXJTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFhMb2dQ cmVmZXRjaFNobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgWExPR1NobWVt U2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgWExvZ1JlY292ZXJ5U2htZW1TaXpl KCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBUd29QaGFzZVNobWVtU2l6ZSgpKTsKLQlz aXplID0gYWRkX3NpemUoc2l6ZSwgQmFja2dyb3VuZFdvcmtlclNobWVtU2l6ZSgpKTsKLQlz aXplID0gYWRkX3NpemUoc2l6ZSwgTFdMb2NrU2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRf c2l6ZShzaXplLCBCYWNrZW5kU3RhdHVzU2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBDaGVja3BvaW50ZXJTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNp emUsIEF1dG9WYWN1dW1TaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFJl cGxpY2F0aW9uU2xvdHNTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFJl cGxpY2F0aW9uT3JpZ2luU2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBX YWxTbmRTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFdhbFJjdlNobWVt U2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgV2FsU3VtbWFyaXplclNobWVtU2l6 ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgUGdBcmNoU2htZW1TaXplKCkpOwotCXNp emUgPSBhZGRfc2l6ZShzaXplLCBBcHBseUxhdW5jaGVyU2htZW1TaXplKCkpOwotCXNpemUg PSBhZGRfc2l6ZShzaXplLCBCVHJlZVNobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUo c2l6ZSwgU3luY1NjYW5TaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFN0 YXRzU2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTbG90U3luY1NobWVt U2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgV2FpdExTTlNobWVtU2l6ZSgpKTsK LQlzaXplID0gYWRkX3NpemUoc2l6ZSwgTG9naWNhbERlY29kaW5nQ3RsU2htZW1TaXplKCkp OwotCiAJLyogaW5jbHVkZSBhZGRpdGlvbmFsIHJlcXVlc3RlZCBzaG1lbSBmcm9tIHByZWxv YWQgbGlicmFyaWVzICovCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIHRvdGFsX2FkZGluX3Jl cXVlc3QpOwogCkBAIC0xNTksNyArMTA4LDYgQEAgQXR0YWNoU2hhcmVkTWVtb3J5U3RydWN0 cyh2b2lkKQogCiAJLyogRXN0YWJsaXNoIHBvaW50ZXJzIHRvIGFsbCBzaGFyZWQgbWVtb3J5 IGFyZWFzIGluIHRoaXMgYmFja2VuZCAqLwogCVNobWVtQXR0YWNoUmVxdWVzdGVkKCk7Ci0J Q3JlYXRlT3JBdHRhY2hTaG1lbVN0cnVjdHMoKTsKIAogCS8qCiAJICogTm93IGdpdmUgbG9h ZGFibGUgbW9kdWxlcyBhIGNoYW5jZSB0byBzZXQgdXAgdGhlaXIgc2htZW0gYWxsb2NhdGlv bnMKQEAgLTIxMyw5ICsxNjEsNiBAQCBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVz KHZvaWQpCiAJLyogSW5pdGlhbGl6ZSBhbGwgc2htZW0gYXJlYXMgKi8KIAlTaG1lbUluaXRS ZXF1ZXN0ZWQoKTsKIAotCS8qIEluaXRpYWxpemUgbGVnYWN5IHN1YnN5c3RlbXMgKi8KLQlD cmVhdGVPckF0dGFjaFNobWVtU3RydWN0cygpOwotCiAJLyogSW5pdGlhbGl6ZSBkeW5hbWlj IHNoYXJlZCBtZW1vcnkgZmFjaWxpdGllcy4gKi8KIAlkc21fcG9zdG1hc3Rlcl9zdGFydHVw KHNoaW0pOwogCkBAIC0yNDYsNjggKzE5MSw2IEBAIFJlZ2lzdGVyQnVpbHRpblNobWVtQ2Fs bGJhY2tzKHZvaWQpCiAjdW5kZWYgUEdfU0hNRU1fU1VCU1lTVEVNCiB9CiAKLS8qCi0gKiBJ bml0aWFsaXplIHZhcmlvdXMgc3Vic3lzdGVtcywgc2V0dGluZyB1cCB0aGVpciBkYXRhIHN0 cnVjdHVyZXMgaW4KLSAqIHNoYXJlZCBtZW1vcnkuCi0gKgotICogVGhpcyBpcyBjYWxsZWQg YnkgdGhlIHBvc3RtYXN0ZXIgb3IgYnkgYSBzdGFuZGFsb25lIGJhY2tlbmQuCi0gKiBJdCBp cyBhbHNvIGNhbGxlZCBieSBhIGJhY2tlbmQgZm9ya2VkIGZyb20gdGhlIHBvc3RtYXN0ZXIg aW4gdGhlCi0gKiBFWEVDX0JBQ0tFTkQgY2FzZS4gIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhl IHNoYXJlZCBtZW1vcnkgc2VnbWVudAotICogYWxyZWFkeSBleGlzdHMgYW5kIGhhcyBiZWVu IHBoeXNpY2FsbHkgYXR0YWNoZWQgdG8sIGJ1dCB3ZSBoYXZlIHRvCi0gKiBpbml0aWFsaXpl IHBvaW50ZXJzIGluIGxvY2FsIG1lbW9yeSB0aGF0IHJlZmVyZW5jZSB0aGUgc2hhcmVkIHN0 cnVjdHVyZXMsCi0gKiBiZWNhdXNlIHdlIGRpZG4ndCBpbmhlcml0IHRoZSBjb3JyZWN0IHBv aW50ZXIgdmFsdWVzIGZyb20gdGhlIHBvc3RtYXN0ZXIKLSAqIGFzIHdlIGRvIGluIHRoZSBm b3JrKCkgc2NlbmFyaW8uICBUaGUgZWFzaWVzdCB3YXkgdG8gZG8gdGhhdCBpcyB0byBydW4K LSAqIHRocm91Z2ggdGhlIHNhbWUgY29kZSBhcyBiZWZvcmUuICAoTm90ZSB0aGF0IHRoZSBj YWxsZWQgcm91dGluZXMgbW9zdGx5Ci0gKiBjaGVjayBJc1VuZGVyUG9zdG1hc3RlciwgcmF0 aGVyIHRoYW4gRVhFQ19CQUNLRU5ELCB0byBkZXRlY3QgdGhpcyBjYXNlLgotICogVGhpcyBp cyBhIGJpdCBjb2RlLXdhc3RlZnVsIGFuZCBjb3VsZCBiZSBjbGVhbmVkIHVwLikKLSAqLwot c3RhdGljIHZvaWQKLUNyZWF0ZU9yQXR0YWNoU2htZW1TdHJ1Y3RzKHZvaWQpCi17Ci0JLyoK LQkgKiBTZXQgdXAgeGxvZywgY2xvZywgYW5kIGJ1ZmZlcnMKLQkgKi8KLQlYTE9HU2htZW1J bml0KCk7Ci0JWExvZ1ByZWZldGNoU2htZW1Jbml0KCk7Ci0JWExvZ1JlY292ZXJ5U2htZW1J bml0KCk7Ci0JQnVmZmVyTWFuYWdlclNobWVtSW5pdCgpOwotCi0JLyoKLQkgKiBTZXQgdXAg bG9jayBtYW5hZ2VyCi0JICovCi0JTG9ja01hbmFnZXJTaG1lbUluaXQoKTsKLQotCS8qCi0J ICogU2V0IHVwIHByb2Nlc3MgdGFibGUKLQkgKi8KLQlCYWNrZW5kU3RhdHVzU2htZW1Jbml0 KCk7Ci0JVHdvUGhhc2VTaG1lbUluaXQoKTsKLQlCYWNrZ3JvdW5kV29ya2VyU2htZW1Jbml0 KCk7Ci0KLQkvKgotCSAqIFNldCB1cCBpbnRlcnByb2Nlc3Mgc2lnbmFsaW5nIG1lY2hhbmlz bXMKLQkgKi8KLQlDaGVja3BvaW50ZXJTaG1lbUluaXQoKTsKLQlBdXRvVmFjdXVtU2htZW1J bml0KCk7Ci0JUmVwbGljYXRpb25TbG90c1NobWVtSW5pdCgpOwotCVJlcGxpY2F0aW9uT3Jp Z2luU2htZW1Jbml0KCk7Ci0JV2FsU25kU2htZW1Jbml0KCk7Ci0JV2FsUmN2U2htZW1Jbml0 KCk7Ci0JV2FsU3VtbWFyaXplclNobWVtSW5pdCgpOwotCVBnQXJjaFNobWVtSW5pdCgpOwot CUFwcGx5TGF1bmNoZXJTaG1lbUluaXQoKTsKLQlTbG90U3luY1NobWVtSW5pdCgpOwotCi0J LyoKLQkgKiBTZXQgdXAgb3RoZXIgbW9kdWxlcyB0aGF0IG5lZWQgc29tZSBzaGFyZWQgbWVt b3J5IHNwYWNlCi0JICovCi0JQlRyZWVTaG1lbUluaXQoKTsKLQlTeW5jU2NhblNobWVtSW5p dCgpOwotCVN0YXRzU2htZW1Jbml0KCk7Ci0JV2FpdExTTlNobWVtSW5pdCgpOwotCUxvZ2lj YWxEZWNvZGluZ0N0bFNobWVtSW5pdCgpOwotfQotCiAvKgogICogSW5pdGlhbGl6ZVNobWVt R1VDcwogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jCmluZGV4IDIzNDY0M2U0ZGQ3Li41 N2RkODBkOTY5MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2su YworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jCkBAIC00Myw4ICs0Mywx MCBAQAogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJv Yy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCisjaW5jbHVkZSAic3RvcmFn ZS9zaG1lbS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgogI2luY2x1ZGUgInN0b3Jh Z2Uvc3RhbmRieS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgogI2luY2x1 ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcHNfc3RhdHVzLmgiCiAj aW5jbHVkZSAidXRpbHMvcmVzb3duZXIuaCIKQEAgLTMxMiw2ICszMTQsMTQgQEAgdHlwZWRl ZiBzdHJ1Y3QKIAogc3RhdGljIHZvbGF0aWxlIEZhc3RQYXRoU3Ryb25nUmVsYXRpb25Mb2Nr RGF0YSAqRmFzdFBhdGhTdHJvbmdSZWxhdGlvbkxvY2tzOwogCitzdGF0aWMgdm9pZCBMb2Nr TWFuYWdlclNobWVtUmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgTG9ja01hbmFn ZXJTaG1lbUluaXQodm9pZCAqYXJnKTsKKworY29uc3QgU2htZW1DYWxsYmFja3MgTG9ja01h bmFnZXJTaG1lbUNhbGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9IExvY2tNYW5hZ2VyU2ht ZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gTG9ja01hbmFnZXJTaG1lbUluaXQsCit9OworCiAK IC8qCiAgKiBQb2ludGVycyB0byBoYXNoIHRhYmxlcyBjb250YWluaW5nIGxvY2sgc3RhdGUK QEAgLTQwOSw2ICs0MTksNyBAQCBQUk9DTE9DS19QUklOVChjb25zdCBjaGFyICp3aGVyZSwg Y29uc3QgUFJPQ0xPQ0sgKnByb2Nsb2NrUCkKIAogCiBzdGF0aWMgdWludDMyIHByb2Nsb2Nr X2hhc2goY29uc3Qgdm9pZCAqa2V5LCBTaXplIGtleXNpemUpOworCiBzdGF0aWMgdm9pZCBS ZW1vdmVMb2NhbExvY2soTE9DQUxMT0NLICpsb2NhbGxvY2spOwogc3RhdGljIFBST0NMT0NL ICpTZXR1cExvY2tJblRhYmxlKExvY2tNZXRob2QgbG9ja01ldGhvZFRhYmxlLCBQR1BST0Mg KnByb2MsCiAJCQkJCQkJCSAgY29uc3QgTE9DS1RBRyAqbG9ja3RhZywgdWludDMyIGhhc2hj b2RlLCBMT0NLTU9ERSBsb2NrbW9kZSk7CkBAIC00MzIsMjIgKzQ0MywxOSBAQCBzdGF0aWMg dm9pZCBHZXRTaW5nbGVQcm9jQmxvY2tlclN0YXR1c0RhdGEoUEdQUk9DICpibG9ja2VkX3By b2MsCiAKIAogLyoKLSAqIEluaXRpYWxpemUgdGhlIGxvY2sgbWFuYWdlcidzIHNobWVtIGRh dGEgc3RydWN0dXJlcy4KKyAqIFJlZ2lzdGVyIHRoZSBsb2NrIG1hbmFnZXIncyBzaG1lbSBk YXRhIHN0cnVjdHVyZXMuCiAgKgotICogVGhpcyBpcyBjYWxsZWQgZnJvbSBDcmVhdGVTaGFy ZWRNZW1vcnlBbmRTZW1hcGhvcmVzKCksIHdoaWNoIHNlZSBmb3IgbW9yZQotICogY29tbWVu dHMuICBJbiB0aGUgbm9ybWFsIHBvc3RtYXN0ZXIgY2FzZSwgdGhlIHNoYXJlZCBoYXNoIHRh YmxlcyBhcmUKLSAqIGNyZWF0ZWQgaGVyZSwgYW5kIGJhY2tlbmRzIGluaGVyaXQgcG9pbnRl cnMgdG8gdGhlbSB2aWEgZm9yaygpLiAgSW4gdGhlCi0gKiBFWEVDX0JBQ0tFTkQgY2FzZSwg ZWFjaCBiYWNrZW5kIHJlLWV4ZWN1dGVzIHRoaXMgY29kZSB0byBvYnRhaW4gcG9pbnRlcnMg dG8KLSAqIHRoZSBhbHJlYWR5IGV4aXN0aW5nIHNoYXJlZCBoYXNoIHRhYmxlcy4gIEluIGVp dGhlciBjYXNlLCBlYWNoIGJhY2tlbmQgbXVzdAotICogYWxzbyBjYWxsIEluaXRMb2NrTWFu YWdlckFjY2VzcygpIHRvIGNyZWF0ZSB0aGUgbG9jYWxsb2NrIGhhc2ggdGFibGUuCisgKiBJ biBhZGRpdGlvbiB0byB0aGlzLCBlYWNoIGJhY2tlbmQgbXVzdCBhbHNvIGNhbGwgSW5pdExv Y2tNYW5hZ2VyQWNjZXNzKCkgdG8KKyAqIGNyZWF0ZSB0aGUgbG9jYWxsb2NrIGhhc2ggdGFi bGUuCiAgKi8KLXZvaWQKLUxvY2tNYW5hZ2VyU2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9p ZAorTG9ja01hbmFnZXJTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQogewotCUhBU0hDVEwJCWlu Zm87Ci0JaW50NjQJCWluaXRfdGFibGVfc2l6ZSwKKwlzdGF0aWMgU2htZW1IYXNoRGVzYyBM b2NrSGFzaERlc2M7CisJc3RhdGljIFNobWVtSGFzaERlc2MgUHJvY0xvY2tIYXNoRGVzYzsK KwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIEZhc3RQYXRoU2htZW1EZXNjOworCWxvbmcJCWlu aXRfdGFibGVfc2l6ZSwKIAkJCQltYXhfdGFibGVfc2l6ZTsKLQlib29sCQlmb3VuZDsKIAog CS8qCiAJICogQ29tcHV0ZSBpbml0L21heCBzaXplIHRvIHJlcXVlc3QgZm9yIGxvY2sgaGFz aHRhYmxlcy4gIE5vdGUgdGhlc2UKQEAgLTQ1Niw0NyArNDY0LDUxIEBAIExvY2tNYW5hZ2Vy U2htZW1Jbml0KHZvaWQpCiAJbWF4X3RhYmxlX3NpemUgPSBOTE9DS0VOVFMoKTsKIAlpbml0 X3RhYmxlX3NpemUgPSBtYXhfdGFibGVfc2l6ZSAvIDI7CiAKLQkvKgotCSAqIEFsbG9jYXRl IGhhc2ggdGFibGUgZm9yIExPQ0sgc3RydWN0cy4gIFRoaXMgc3RvcmVzIHBlci1sb2NrZWQt b2JqZWN0Ci0JICogaW5mb3JtYXRpb24uCi0JICovCi0JaW5mby5rZXlzaXplID0gc2l6ZW9m KExPQ0tUQUcpOwotCWluZm8uZW50cnlzaXplID0gc2l6ZW9mKExPQ0spOwotCWluZm8ubnVt X3BhcnRpdGlvbnMgPSBOVU1fTE9DS19QQVJUSVRJT05TOwotCi0JTG9ja01ldGhvZExvY2tI YXNoID0gU2htZW1Jbml0SGFzaCgiTE9DSyBoYXNoIiwKLQkJCQkJCQkJCSAgIGluaXRfdGFi bGVfc2l6ZSwKLQkJCQkJCQkJCSAgIG1heF90YWJsZV9zaXplLAotCQkJCQkJCQkJICAgJmlu Zm8sCi0JCQkJCQkJCQkgICBIQVNIX0VMRU0gfCBIQVNIX0JMT0JTIHwgSEFTSF9QQVJUSVRJ T04pOworCVNobWVtUmVxdWVzdEhhc2goJkxvY2tIYXNoRGVzYywKKwkJCQkJIC5uYW1lID0g IkxPQ0sgaGFzaCIsCisJCQkJCSAuaW5pdF9zaXplID0gaW5pdF90YWJsZV9zaXplLAorCQkJ CQkgLm1heF9zaXplID0gbWF4X3RhYmxlX3NpemUsCisJCQkJCSAucHRyID0gJkxvY2tNZXRo b2RMb2NrSGFzaCwKKwkJCQkJIC5oYXNoX2luZm8ua2V5c2l6ZSA9IHNpemVvZihMT0NLVEFH KSwKKwkJCQkJIC5oYXNoX2luZm8uZW50cnlzaXplID0gc2l6ZW9mKExPQ0spLAorCQkJCQkg Lmhhc2hfaW5mby5udW1fcGFydGl0aW9ucyA9IE5VTV9MT0NLX1BBUlRJVElPTlMsCisJCQkJ CSAuaGFzaF9mbGFncyA9IEhBU0hfRUxFTSB8IEhBU0hfQkxPQlMgfCBIQVNIX1BBUlRJVElP TiwKKwkJKTsKIAogCS8qIEFzc3VtZSBhbiBhdmVyYWdlIG9mIDIgaG9sZGVycyBwZXIgbG9j ayAqLwogCW1heF90YWJsZV9zaXplICo9IDI7CiAJaW5pdF90YWJsZV9zaXplICo9IDI7CiAK LQkvKgotCSAqIEFsbG9jYXRlIGhhc2ggdGFibGUgZm9yIFBST0NMT0NLIHN0cnVjdHMuICBU aGlzIHN0b3JlcwotCSAqIHBlci1sb2NrLXBlci1ob2xkZXIgaW5mb3JtYXRpb24uCi0JICov Ci0JaW5mby5rZXlzaXplID0gc2l6ZW9mKFBST0NMT0NLVEFHKTsKLQlpbmZvLmVudHJ5c2l6 ZSA9IHNpemVvZihQUk9DTE9DSyk7Ci0JaW5mby5oYXNoID0gcHJvY2xvY2tfaGFzaDsKLQlp bmZvLm51bV9wYXJ0aXRpb25zID0gTlVNX0xPQ0tfUEFSVElUSU9OUzsKLQotCUxvY2tNZXRo b2RQcm9jTG9ja0hhc2ggPSBTaG1lbUluaXRIYXNoKCJQUk9DTE9DSyBoYXNoIiwKLQkJCQkJ CQkJCQkgICBpbml0X3RhYmxlX3NpemUsCi0JCQkJCQkJCQkJICAgbWF4X3RhYmxlX3NpemUs Ci0JCQkJCQkJCQkJICAgJmluZm8sCi0JCQkJCQkJCQkJICAgSEFTSF9FTEVNIHwgSEFTSF9G VU5DVElPTiB8IEhBU0hfUEFSVElUSU9OKTsKKwlTaG1lbVJlcXVlc3RIYXNoKCZQcm9jTG9j a0hhc2hEZXNjLAorCQkJCQkgLm5hbWUgPSAiUFJPQ0xPQ0sgaGFzaCIsCisJCQkJCSAuaW5p dF9zaXplID0gaW5pdF90YWJsZV9zaXplLAorCQkJCQkgLm1heF9zaXplID0gbWF4X3RhYmxl X3NpemUsCisJCQkJCSAucHRyID0gJkxvY2tNZXRob2RQcm9jTG9ja0hhc2gsCisJCQkJCSAu aGFzaF9pbmZvLmtleXNpemUgPSBzaXplb2YoUFJPQ0xPQ0tUQUcpLAorCQkJCQkgLmhhc2hf aW5mby5lbnRyeXNpemUgPSBzaXplb2YoUFJPQ0xPQ0spLAorCQkJCQkgLmhhc2hfaW5mby5o YXNoID0gcHJvY2xvY2tfaGFzaCwKKwkJCQkJIC5oYXNoX2luZm8ubnVtX3BhcnRpdGlvbnMg PSBOVU1fTE9DS19QQVJUSVRJT05TLAorCQkJCQkgLmhhc2hfZmxhZ3MgPSBIQVNIX0VMRU0g fCBIQVNIX0ZVTkNUSU9OIHwgSEFTSF9QQVJUSVRJT04sCisJCSk7CisKKwlTaG1lbVJlcXVl c3RTdHJ1Y3QoJkZhc3RQYXRoU2htZW1EZXNjLAorCQkJCQkgICAubmFtZSA9ICJGYXN0IFBh dGggU3Ryb25nIFJlbGF0aW9uIExvY2sgRGF0YSIsCisJCQkJCSAgIC5zaXplID0gc2l6ZW9m KEZhc3RQYXRoU3Ryb25nUmVsYXRpb25Mb2NrRGF0YSksCisJCQkJCSAgIC5wdHIgPSAodm9p ZCAqKikgKHZvaWQgKikgJkZhc3RQYXRoU3Ryb25nUmVsYXRpb25Mb2NrcywKKwkJKTsKIAog CS8qCi0JICogQWxsb2NhdGUgZmFzdC1wYXRoIHN0cnVjdHVyZXMuCisJICogRklYTUU6IHdl IHVzZWQgdG8gZG8gdGhpcyBpbiB0aGUgc2l6ZSBjYWxjdWxhdGlvbjoKKwkgKgorCSAqIC8v IFNpbmNlIE5MT0NLRU5UUyBpcyBvbmx5IGFuIGVzdGltYXRlLCBhZGQgMTAlIHNhZmV0eSBt YXJnaW4uIHNpemUgPQorCSAqIGFkZF9zaXplKHNpemUsIHNpemUgLyAxMCk7CiAJICovCi0J RmFzdFBhdGhTdHJvbmdSZWxhdGlvbkxvY2tzID0KLQkJU2htZW1Jbml0U3RydWN0KCJGYXN0 IFBhdGggU3Ryb25nIFJlbGF0aW9uIExvY2sgRGF0YSIsCi0JCQkJCQlzaXplb2YoRmFzdFBh dGhTdHJvbmdSZWxhdGlvbkxvY2tEYXRhKSwgJmZvdW5kKTsKLQlpZiAoIWZvdW5kKQotCQlT cGluTG9ja0luaXQoJkZhc3RQYXRoU3Ryb25nUmVsYXRpb25Mb2Nrcy0+bXV0ZXgpOworfQor CitzdGF0aWMgdm9pZAorTG9ja01hbmFnZXJTaG1lbUluaXQodm9pZCAqYXJnKQoreworCVNw aW5Mb2NrSW5pdCgmRmFzdFBhdGhTdHJvbmdSZWxhdGlvbkxvY2tzLT5tdXRleCk7CiB9CiAK IC8qCkBAIC0zNzYxLDMwICszNzczLDYgQEAgUG9zdFByZXBhcmVfTG9ja3MoRnVsbFRyYW5z YWN0aW9uSWQgZnhpZCkKIH0KIAogCi0vKgotICogRXN0aW1hdGUgc2hhcmVkLW1lbW9yeSBz cGFjZSB1c2VkIGZvciBsb2NrIHRhYmxlcwotICovCi1TaXplCi1Mb2NrTWFuYWdlclNobWVt U2l6ZSh2b2lkKQotewotCVNpemUJCXNpemUgPSAwOwotCWxvbmcJCW1heF90YWJsZV9zaXpl OwotCi0JLyogbG9jayBoYXNoIHRhYmxlICovCi0JbWF4X3RhYmxlX3NpemUgPSBOTE9DS0VO VFMoKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgaGFzaF9lc3RpbWF0ZV9zaXplKG1heF90 YWJsZV9zaXplLCBzaXplb2YoTE9DSykpKTsKLQotCS8qIHByb2Nsb2NrIGhhc2ggdGFibGUg Ki8KLQltYXhfdGFibGVfc2l6ZSAqPSAyOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBoYXNo X2VzdGltYXRlX3NpemUobWF4X3RhYmxlX3NpemUsIHNpemVvZihQUk9DTE9DSykpKTsKLQot CS8qCi0JICogU2luY2UgTkxPQ0tFTlRTIGlzIG9ubHkgYW4gZXN0aW1hdGUsIGFkZCAxMCUg c2FmZXR5IG1hcmdpbi4KLQkgKi8KLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgc2l6ZSAvIDEw KTsKLQotCXJldHVybiBzaXplOwotfQogCiAvKgogICogR2V0TG9ja1N0YXR1c0RhdGEgLSBS ZXR1cm4gYSBzdW1tYXJ5IG9mIHRoZSBsb2NrIG1hbmFnZXIncyBpbnRlcm5hbApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvYmFja2VuZF9zdGF0dXMuYyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L2JhY2tlbmRfc3RhdHVzLmMKaW5kZXggY2QwODcx Mjk0NjkuLjk2MzdjNjIyZDZlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rp dml0eS9iYWNrZW5kX3N0YXR1cy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5 L2JhY2tlbmRfc3RhdHVzLmMKQEAgLTE4LDcgKzE4LDkgQEAKICNpbmNsdWRlICJwZ3N0YXQu aCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5o IgkJLyogZm9yIE15UHJvYyAqLworI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKICNpbmNs dWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVt cy5oIgogI2luY2x1ZGUgInV0aWxzL2FzY2lpLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjLmgi CQkJLyogZm9yIGFwcGxpY2F0aW9uX25hbWUgKi8KICNpbmNsdWRlICJ1dGlscy9tZW11dGls cy5oIgpAQCAtNzMsMTMzICs3NSwxMTQgQEAgc3RhdGljIHZvaWQgcGdzdGF0X2Jlc2h1dGRv d25faG9vayhpbnQgY29kZSwgRGF0dW0gYXJnKTsKIHN0YXRpYyB2b2lkIHBnc3RhdF9yZWFk X2N1cnJlbnRfc3RhdHVzKHZvaWQpOwogc3RhdGljIHZvaWQgcGdzdGF0X3NldHVwX2JhY2tl bmRfc3RhdHVzX2NvbnRleHQodm9pZCk7CiAKK3N0YXRpYyB2b2lkIEJhY2tlbmRTdGF0dXNT aG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIEJhY2tlbmRTdGF0dXNTaG1l bUluaXQodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIEJhY2tlbmRTdGF0dXNTaG1lbUF0dGFj aCh2b2lkICphcmcpOworCitjb25zdCBTaG1lbUNhbGxiYWNrcyBCYWNrZW5kU3RhdHVzU2ht ZW1DYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBCYWNrZW5kU3RhdHVzU2htZW1SZXF1 ZXN0LAorCS5pbml0X2ZuID0gQmFja2VuZFN0YXR1c1NobWVtSW5pdCwKKwkuYXR0YWNoX2Zu ID0gQmFja2VuZFN0YXR1c1NobWVtQXR0YWNoLAorfTsKIAogLyoKLSAqIFJlcG9ydCBzaGFy ZWQtbWVtb3J5IHNwYWNlIG5lZWRlZCBieSBCYWNrZW5kU3RhdHVzU2htZW1Jbml0LgorICog UmVnaXN0ZXIgc2hhcmVkIG1lbW9yeSBuZWVkcyBmb3IgYmFja2VuZCBzdGF0dXMgcmVwb3J0 aW5nLgogICovCi1TaXplCi1CYWNrZW5kU3RhdHVzU2htZW1TaXplKHZvaWQpCitzdGF0aWMg dm9pZAorQmFja2VuZFN0YXR1c1NobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7Ci0JU2l6ZQkJ c2l6ZTsKLQotCS8qIEJhY2tlbmRTdGF0dXNBcnJheTogKi8KLQlzaXplID0gbXVsX3NpemUo c2l6ZW9mKFBnQmFja2VuZFN0YXR1cyksIE51bUJhY2tlbmRTdGF0U2xvdHMpOwotCS8qIEJh Y2tlbmRBcHBuYW1lQnVmZmVyOiAqLwotCXNpemUgPSBhZGRfc2l6ZShzaXplLAotCQkJCQlt dWxfc2l6ZShOQU1FREFUQUxFTiwgTnVtQmFja2VuZFN0YXRTbG90cykpOwotCS8qIEJhY2tl bmRDbGllbnRIb3N0bmFtZUJ1ZmZlcjogKi8KLQlzaXplID0gYWRkX3NpemUoc2l6ZSwKLQkJ CQkJbXVsX3NpemUoTkFNRURBVEFMRU4sIE51bUJhY2tlbmRTdGF0U2xvdHMpKTsKLQkvKiBC YWNrZW5kQWN0aXZpdHlCdWZmZXI6ICovCi0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsCi0JCQkJ CW11bF9zaXplKHBnc3RhdF90cmFja19hY3Rpdml0eV9xdWVyeV9zaXplLCBOdW1CYWNrZW5k U3RhdFNsb3RzKSk7CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBCYWNrZW5kU3RhdHVzQXJy YXlTaG1lbURlc2M7CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBCYWNrZW5kQXBwbmFtZUJ1 ZmZlclNobWVtRGVzYzsKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIEJhY2tlbmRDbGllbnRI b3N0bmFtZUJ1ZmZlclNobWVtRGVzYzsKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIEJhY2tl bmRBY3Rpdml0eUJ1ZmZlclNpemVTaG1lbURlc2M7CiAjaWZkZWYgVVNFX1NTTAotCS8qIEJh Y2tlbmRTc2xTdGF0dXNCdWZmZXI6ICovCi0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsCi0JCQkJ CW11bF9zaXplKHNpemVvZihQZ0JhY2tlbmRTU0xTdGF0dXMpLCBOdW1CYWNrZW5kU3RhdFNs b3RzKSk7CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBCYWNrZW5kU3NsU3RhdHVzQnVmZmVy U2htZW1EZXNjOwogI2VuZGlmCiAjaWZkZWYgRU5BQkxFX0dTUwotCS8qIEJhY2tlbmRHc3NT dGF0dXNCdWZmZXI6ICovCi0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsCi0JCQkJCW11bF9zaXpl KHNpemVvZihQZ0JhY2tlbmRHU1NTdGF0dXMpLCBOdW1CYWNrZW5kU3RhdFNsb3RzKSk7CisJ c3RhdGljIFNobWVtU3RydWN0RGVzYyBCYWNrZW5kR3NzU3RhdHVzQnVmZmVyU2htZW1EZXNj OworI2VuZGlmCisKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJkJhY2tlbmRTdGF0dXNBcnJheVNo bWVtRGVzYywKKwkJCQkJICAgLm5hbWUgPSAiQmFja2VuZCBTdGF0dXMgQXJyYXkiLAorCQkJ CQkgICAuc2l6ZSA9IG11bF9zaXplKHNpemVvZihQZ0JhY2tlbmRTdGF0dXMpLCBOdW1CYWNr ZW5kU3RhdFNsb3RzKSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmQmFja2VuZFN0YXR1 c0FycmF5LAorCQkpOworCisJU2htZW1SZXF1ZXN0U3RydWN0KCZCYWNrZW5kQXBwbmFtZUJ1 ZmZlclNobWVtRGVzYywKKwkJCQkJICAgLm5hbWUgPSAiQmFja2VuZCBBcHBsaWNhdGlvbiBO YW1lIEJ1ZmZlciIsCisJCQkJCSAgIC5zaXplID0gbXVsX3NpemUoTkFNRURBVEFMRU4sIE51 bUJhY2tlbmRTdGF0U2xvdHMpLAorCQkJCQkgICAucHRyID0gKHZvaWQgKiopICZCYWNrZW5k QXBwbmFtZUJ1ZmZlciwKKwkJKTsKKworCVNobWVtUmVxdWVzdFN0cnVjdCgmQmFja2VuZENs aWVudEhvc3RuYW1lQnVmZmVyU2htZW1EZXNjLAorCQkJCQkgICAubmFtZSA9ICJCYWNrZW5k IENsaWVudCBIb3N0IE5hbWUgQnVmZmVyIiwKKwkJCQkJICAgLnNpemUgPSBtdWxfc2l6ZShO QU1FREFUQUxFTiwgTnVtQmFja2VuZFN0YXRTbG90cyksCisJCQkJCSAgIC5wdHIgPSAodm9p ZCAqKikgJkJhY2tlbmRDbGllbnRIb3N0bmFtZUJ1ZmZlciwKKwkJKTsKKworCUJhY2tlbmRB Y3Rpdml0eUJ1ZmZlclNpemUgPSBtdWxfc2l6ZShwZ3N0YXRfdHJhY2tfYWN0aXZpdHlfcXVl cnlfc2l6ZSwKKwkJCQkJCQkJCQkgTnVtQmFja2VuZFN0YXRTbG90cyk7CisJU2htZW1SZXF1 ZXN0U3RydWN0KCZCYWNrZW5kQWN0aXZpdHlCdWZmZXJTaXplU2htZW1EZXNjLAorCQkJCQkg ICAubmFtZSA9ICJCYWNrZW5kIEFjdGl2aXR5IEJ1ZmZlciIsCisJCQkJCSAgIC5zaXplID0g QmFja2VuZEFjdGl2aXR5QnVmZmVyU2l6ZSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAm QmFja2VuZEFjdGl2aXR5QnVmZmVyCisJCSk7CisKKyNpZmRlZiBVU0VfU1NMCisJU2htZW1S ZXF1ZXN0U3RydWN0KCZCYWNrZW5kU3NsU3RhdHVzQnVmZmVyU2htZW1EZXNjLAorCQkJCQkg ICAubmFtZSA9ICJCYWNrZW5kIFNTTCBTdGF0dXMgQnVmZmVyIiwKKwkJCQkJICAgLnNpemUg PSBtdWxfc2l6ZShzaXplb2YoUGdCYWNrZW5kU1NMU3RhdHVzKSwgTnVtQmFja2VuZFN0YXRT bG90cyksCisJCQkJCSAgIC5wdHIgPSAodm9pZCAqKikgJkJhY2tlbmRTc2xTdGF0dXNCdWZm ZXIsCisJCSk7CisjZW5kaWYKKworI2lmZGVmIEVOQUJMRV9HU1MKKwlTaG1lbVJlcXVlc3RT dHJ1Y3QoJkJhY2tlbmRHc3NTdGF0dXNCdWZmZXJTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1l ID0gIkJhY2tlbmQgR1NTIFN0YXR1cyBCdWZmZXIiLAorCQkJCQkgICAuc2l6ZSA9IG11bF9z aXplKHNpemVvZihQZ0JhY2tlbmRHU1NTdGF0dXMpLCBOdW1CYWNrZW5kU3RhdFNsb3RzKSwK KwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmQmFja2VuZEdzc1N0YXR1c0J1ZmZlciwKKwkJ KTsKICNlbmRpZgotCXJldHVybiBzaXplOwogfQogCiAvKgogICogSW5pdGlhbGl6ZSB0aGUg c2hhcmVkIHN0YXR1cyBhcnJheSBhbmQgc2V2ZXJhbCBzdHJpbmcgYnVmZmVycwogICogZHVy aW5nIHBvc3RtYXN0ZXIgc3RhcnR1cC4KICAqLwotdm9pZAotQmFja2VuZFN0YXR1c1NobWVt SW5pdCh2b2lkKQorc3RhdGljIHZvaWQKK0JhY2tlbmRTdGF0dXNTaG1lbUluaXQodm9pZCAq YXJnKQogewotCVNpemUJCXNpemU7Ci0JYm9vbAkJZm91bmQ7CiAJaW50CQkJaTsKIAljaGFy CSAgICpidWZmZXI7CiAKLQkvKiBDcmVhdGUgb3IgYXR0YWNoIHRvIHRoZSBzaGFyZWQgYXJy YXkgKi8KLQlzaXplID0gbXVsX3NpemUoc2l6ZW9mKFBnQmFja2VuZFN0YXR1cyksIE51bUJh Y2tlbmRTdGF0U2xvdHMpOwotCUJhY2tlbmRTdGF0dXNBcnJheSA9IChQZ0JhY2tlbmRTdGF0 dXMgKikKLQkJU2htZW1Jbml0U3RydWN0KCJCYWNrZW5kIFN0YXR1cyBBcnJheSIsIHNpemUs ICZmb3VuZCk7Ci0KLQlpZiAoIWZvdW5kKQorCS8qIEluaXRpYWxpemUgc3RfYXBwbmFtZSBw b2ludGVycy4gKi8KKwlidWZmZXIgPSBCYWNrZW5kQXBwbmFtZUJ1ZmZlcjsKKwlmb3IgKGkg PSAwOyBpIDwgTnVtQmFja2VuZFN0YXRTbG90czsgaSsrKQogCXsKLQkJLyoKLQkJICogV2Un cmUgdGhlIGZpcnN0IC0gaW5pdGlhbGl6ZS4KLQkJICovCi0JCU1lbVNldChCYWNrZW5kU3Rh dHVzQXJyYXksIDAsIHNpemUpOworCQlCYWNrZW5kU3RhdHVzQXJyYXlbaV0uc3RfYXBwbmFt ZSA9IGJ1ZmZlcjsKKwkJYnVmZmVyICs9IE5BTUVEQVRBTEVOOwogCX0KIAotCS8qIENyZWF0 ZSBvciBhdHRhY2ggdG8gdGhlIHNoYXJlZCBhcHBuYW1lIGJ1ZmZlciAqLwotCXNpemUgPSBt dWxfc2l6ZShOQU1FREFUQUxFTiwgTnVtQmFja2VuZFN0YXRTbG90cyk7Ci0JQmFja2VuZEFw cG5hbWVCdWZmZXIgPSAoY2hhciAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIkJhY2tlbmQgQXBw bGljYXRpb24gTmFtZSBCdWZmZXIiLCBzaXplLCAmZm91bmQpOwotCi0JaWYgKCFmb3VuZCkK KwkvKiBJbml0aWFsaXplIHN0X2NsaWVudGhvc3RuYW1lIHBvaW50ZXJzLiAqLworCWJ1ZmZl ciA9IEJhY2tlbmRDbGllbnRIb3N0bmFtZUJ1ZmZlcjsKKwlmb3IgKGkgPSAwOyBpIDwgTnVt QmFja2VuZFN0YXRTbG90czsgaSsrKQogCXsKLQkJTWVtU2V0KEJhY2tlbmRBcHBuYW1lQnVm ZmVyLCAwLCBzaXplKTsKLQotCQkvKiBJbml0aWFsaXplIHN0X2FwcG5hbWUgcG9pbnRlcnMu ICovCi0JCWJ1ZmZlciA9IEJhY2tlbmRBcHBuYW1lQnVmZmVyOwotCQlmb3IgKGkgPSAwOyBp IDwgTnVtQmFja2VuZFN0YXRTbG90czsgaSsrKQotCQl7Ci0JCQlCYWNrZW5kU3RhdHVzQXJy YXlbaV0uc3RfYXBwbmFtZSA9IGJ1ZmZlcjsKLQkJCWJ1ZmZlciArPSBOQU1FREFUQUxFTjsK LQkJfQorCQlCYWNrZW5kU3RhdHVzQXJyYXlbaV0uc3RfY2xpZW50aG9zdG5hbWUgPSBidWZm ZXI7CisJCWJ1ZmZlciArPSBOQU1FREFUQUxFTjsKIAl9CiAKLQkvKiBDcmVhdGUgb3IgYXR0 YWNoIHRvIHRoZSBzaGFyZWQgY2xpZW50IGhvc3RuYW1lIGJ1ZmZlciAqLwotCXNpemUgPSBt dWxfc2l6ZShOQU1FREFUQUxFTiwgTnVtQmFja2VuZFN0YXRTbG90cyk7Ci0JQmFja2VuZENs aWVudEhvc3RuYW1lQnVmZmVyID0gKGNoYXIgKikKLQkJU2htZW1Jbml0U3RydWN0KCJCYWNr ZW5kIENsaWVudCBIb3N0IE5hbWUgQnVmZmVyIiwgc2l6ZSwgJmZvdW5kKTsKLQotCWlmICgh Zm91bmQpCisJLyogSW5pdGlhbGl6ZSBzdF9hY3Rpdml0eSBwb2ludGVycy4gKi8KKwlidWZm ZXIgPSBCYWNrZW5kQWN0aXZpdHlCdWZmZXI7CisJZm9yIChpID0gMDsgaSA8IE51bUJhY2tl bmRTdGF0U2xvdHM7IGkrKykKIAl7Ci0JCU1lbVNldChCYWNrZW5kQ2xpZW50SG9zdG5hbWVC dWZmZXIsIDAsIHNpemUpOwotCi0JCS8qIEluaXRpYWxpemUgc3RfY2xpZW50aG9zdG5hbWUg cG9pbnRlcnMuICovCi0JCWJ1ZmZlciA9IEJhY2tlbmRDbGllbnRIb3N0bmFtZUJ1ZmZlcjsK LQkJZm9yIChpID0gMDsgaSA8IE51bUJhY2tlbmRTdGF0U2xvdHM7IGkrKykKLQkJewotCQkJ QmFja2VuZFN0YXR1c0FycmF5W2ldLnN0X2NsaWVudGhvc3RuYW1lID0gYnVmZmVyOwotCQkJ YnVmZmVyICs9IE5BTUVEQVRBTEVOOwotCQl9Ci0JfQotCi0JLyogQ3JlYXRlIG9yIGF0dGFj aCB0byB0aGUgc2hhcmVkIGFjdGl2aXR5IGJ1ZmZlciAqLwotCUJhY2tlbmRBY3Rpdml0eUJ1 ZmZlclNpemUgPSBtdWxfc2l6ZShwZ3N0YXRfdHJhY2tfYWN0aXZpdHlfcXVlcnlfc2l6ZSwK LQkJCQkJCQkJCQkgTnVtQmFja2VuZFN0YXRTbG90cyk7Ci0JQmFja2VuZEFjdGl2aXR5QnVm ZmVyID0gKGNoYXIgKikKLQkJU2htZW1Jbml0U3RydWN0KCJCYWNrZW5kIEFjdGl2aXR5IEJ1 ZmZlciIsCi0JCQkJCQlCYWNrZW5kQWN0aXZpdHlCdWZmZXJTaXplLAotCQkJCQkJJmZvdW5k KTsKLQotCWlmICghZm91bmQpCi0JewotCQlNZW1TZXQoQmFja2VuZEFjdGl2aXR5QnVmZmVy LCAwLCBCYWNrZW5kQWN0aXZpdHlCdWZmZXJTaXplKTsKLQotCQkvKiBJbml0aWFsaXplIHN0 X2FjdGl2aXR5IHBvaW50ZXJzLiAqLwotCQlidWZmZXIgPSBCYWNrZW5kQWN0aXZpdHlCdWZm ZXI7Ci0JCWZvciAoaSA9IDA7IGkgPCBOdW1CYWNrZW5kU3RhdFNsb3RzOyBpKyspCi0JCXsK LQkJCUJhY2tlbmRTdGF0dXNBcnJheVtpXS5zdF9hY3Rpdml0eV9yYXcgPSBidWZmZXI7Ci0J CQlidWZmZXIgKz0gcGdzdGF0X3RyYWNrX2FjdGl2aXR5X3F1ZXJ5X3NpemU7Ci0JCX0KKwkJ QmFja2VuZFN0YXR1c0FycmF5W2ldLnN0X2FjdGl2aXR5X3JhdyA9IGJ1ZmZlcjsKKwkJYnVm ZmVyICs9IHBnc3RhdF90cmFja19hY3Rpdml0eV9xdWVyeV9zaXplOwogCX0KIAogI2lmZGVm IFVTRV9TU0wKLQkvKiBDcmVhdGUgb3IgYXR0YWNoIHRvIHRoZSBzaGFyZWQgU1NMIHN0YXR1 cyBidWZmZXIgKi8KLQlzaXplID0gbXVsX3NpemUoc2l6ZW9mKFBnQmFja2VuZFNTTFN0YXR1 cyksIE51bUJhY2tlbmRTdGF0U2xvdHMpOwotCUJhY2tlbmRTc2xTdGF0dXNCdWZmZXIgPSAo UGdCYWNrZW5kU1NMU3RhdHVzICopCi0JCVNobWVtSW5pdFN0cnVjdCgiQmFja2VuZCBTU0wg U3RhdHVzIEJ1ZmZlciIsIHNpemUsICZmb3VuZCk7Ci0KLQlpZiAoIWZvdW5kKQogCXsKIAkJ UGdCYWNrZW5kU1NMU3RhdHVzICpwdHI7CiAKLQkJTWVtU2V0KEJhY2tlbmRTc2xTdGF0dXNC dWZmZXIsIDAsIHNpemUpOwotCiAJCS8qIEluaXRpYWxpemUgc3Rfc3Nsc3RhdHVzIHBvaW50 ZXJzLiAqLwogCQlwdHIgPSBCYWNrZW5kU3NsU3RhdHVzQnVmZmVyOwogCQlmb3IgKGkgPSAw OyBpIDwgTnVtQmFja2VuZFN0YXRTbG90czsgaSsrKQpAQCAtMjExLDE3ICsxOTQsOSBAQCBC YWNrZW5kU3RhdHVzU2htZW1Jbml0KHZvaWQpCiAjZW5kaWYKIAogI2lmZGVmIEVOQUJMRV9H U1MKLQkvKiBDcmVhdGUgb3IgYXR0YWNoIHRvIHRoZSBzaGFyZWQgR1NTQVBJIHN0YXR1cyBi dWZmZXIgKi8KLQlzaXplID0gbXVsX3NpemUoc2l6ZW9mKFBnQmFja2VuZEdTU1N0YXR1cyks IE51bUJhY2tlbmRTdGF0U2xvdHMpOwotCUJhY2tlbmRHc3NTdGF0dXNCdWZmZXIgPSAoUGdC YWNrZW5kR1NTU3RhdHVzICopCi0JCVNobWVtSW5pdFN0cnVjdCgiQmFja2VuZCBHU1MgU3Rh dHVzIEJ1ZmZlciIsIHNpemUsICZmb3VuZCk7Ci0KLQlpZiAoIWZvdW5kKQogCXsKIAkJUGdC YWNrZW5kR1NTU3RhdHVzICpwdHI7CiAKLQkJTWVtU2V0KEJhY2tlbmRHc3NTdGF0dXNCdWZm ZXIsIDAsIHNpemUpOwotCiAJCS8qIEluaXRpYWxpemUgc3RfZ3Nzc3RhdHVzIHBvaW50ZXJz LiAqLwogCQlwdHIgPSBCYWNrZW5kR3NzU3RhdHVzQnVmZmVyOwogCQlmb3IgKGkgPSAwOyBp IDwgTnVtQmFja2VuZFN0YXRTbG90czsgaSsrKQpAQCAtMjMzLDYgKzIwOCwxMyBAQCBCYWNr ZW5kU3RhdHVzU2htZW1Jbml0KHZvaWQpCiAjZW5kaWYKIH0KIAorc3RhdGljIHZvaWQKK0Jh Y2tlbmRTdGF0dXNTaG1lbUF0dGFjaCh2b2lkICphcmcpCit7CisJQmFja2VuZEFjdGl2aXR5 QnVmZmVyU2l6ZSA9IG11bF9zaXplKHBnc3RhdF90cmFja19hY3Rpdml0eV9xdWVyeV9zaXpl LAorCQkJCQkJCQkJCSBOdW1CYWNrZW5kU3RhdFNsb3RzKTsKK30KKwogLyoKICAqIEluaXRp YWxpemUgcGdzdGF0cyBiYWNrZW5kIGFjdGl2aXR5IHN0YXRlLCBhbmQgc2V0IHVwIG91ciBv bi1wcm9jLWV4aXQKICAqIGhvb2suICBDYWxsZWQgZnJvbSBJbml0UG9zdGdyZXMgYW5kIEF1 eGlsaWFyeVByb2Nlc3NNYWluLiAgTXlQcm9jTnVtYmVyIG11c3QKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9zaG1lbS5jIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWN0aXZpdHkvcGdzdGF0X3NobWVtLmMKaW5kZXggMzNmYmRjYTk2MDkuLjYwMmVj NDk3OGM2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRf c2htZW0uYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfc2htZW0u YwpAQCAtMTQsNiArMTQsNyBAQAogCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9zaG1lbS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgogI2lu Y2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcGdzdGF0X2ludGVy bmFsLmgiCiAKQEAgLTU3LDYgKzU4LDEzIEBAIHN0YXRpYyB2b2lkIHBnc3RhdF9yZWxlYXNl X21hdGNoaW5nX2VudHJ5X3JlZnMoYm9vbCBkaXNjYXJkX3BlbmRpbmcsIFJlbGVhc2VNYXRj CiAKIHN0YXRpYyB2b2lkIHBnc3RhdF9zZXR1cF9tZW1jeHQodm9pZCk7CiAKK3N0YXRpYyB2 b2lkIFN0YXRzU2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBTdGF0c1No bWVtSW5pdCh2b2lkICphcmcpOworCitjb25zdCBTaG1lbUNhbGxiYWNrcyBTdGF0c1NobWVt Q2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gU3RhdHNTaG1lbVJlcXVlc3QsCisJLmlu aXRfZm4gPSBTdGF0c1NobWVtSW5pdCwKK307CiAKIC8qIHBhcmFtZXRlciBmb3IgdGhlIHNo YXJlZCBoYXNoICovCiBzdGF0aWMgY29uc3QgZHNoYXNoX3BhcmFtZXRlcnMgZHNoX3BhcmFt cyA9IHsKQEAgLTEyMyw3ICsxMzEsNyBAQCBwZ3N0YXRfZHNhX2luaXRfc2l6ZSh2b2lkKQog LyoKICAqIENvbXB1dGUgc2hhcmVkIG1lbW9yeSBzcGFjZSBuZWVkZWQgZm9yIGN1bXVsYXRp dmUgc3RhdGlzdGljcwogICovCi1TaXplCitzdGF0aWMgU2l6ZQogU3RhdHNTaG1lbVNpemUo dm9pZCkKIHsKIAlTaXplCQlzejsKQEAgLTE1MCwxMDEgKzE1OCwxMDAgQEAgU3RhdHNTaG1l bVNpemUodm9pZCkKIH0KIAogLyoKLSAqIEluaXRpYWxpemUgY3VtdWxhdGl2ZSBzdGF0aXN0 aWNzIHN5c3RlbSBkdXJpbmcgc3RhcnR1cAorICogUmVnaXN0ZXIgc2hhcmVkIG1lbW9yeSBh cmVhIGZvciBjdW11bGF0aXZlIHN0YXRpc3RpY3MKICAqLwotdm9pZAotU3RhdHNTaG1lbUlu aXQodm9pZCkKK3N0YXRpYyB2b2lkCitTdGF0c1NobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7 Ci0JYm9vbAkJZm91bmQ7Ci0JU2l6ZQkJc3o7Ci0KLQlzeiA9IFN0YXRzU2htZW1TaXplKCk7 Ci0JcGdTdGF0TG9jYWwuc2htZW0gPSAoUGdTdGF0X1NobWVtQ29udHJvbCAqKQotCQlTaG1l bUluaXRTdHJ1Y3QoIlNoYXJlZCBNZW1vcnkgU3RhdHMiLCBzeiwgJmZvdW5kKTsKKwlzdGF0 aWMgU2htZW1TdHJ1Y3REZXNjIFN0YXRzU2htZW1EZXNjOwogCi0JaWYgKCFJc1VuZGVyUG9z dG1hc3RlcikKLQl7Ci0JCWRzYV9hcmVhICAgKmRzYTsKLQkJZHNoYXNoX3RhYmxlICpkc2g7 Ci0JCVBnU3RhdF9TaG1lbUNvbnRyb2wgKmN0bCA9IHBnU3RhdExvY2FsLnNobWVtOwotCQlj aGFyCSAgICpwID0gKGNoYXIgKikgY3RsOworCVNobWVtUmVxdWVzdFN0cnVjdCgmU3RhdHNT aG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0gIlNoYXJlZCBNZW1vcnkgU3RhdHMiLAorCQkJ CQkgICAuc2l6ZSA9IFN0YXRzU2htZW1TaXplKCksCisJCQkJCSAgIC5wdHIgPSAodm9pZCAq KikgJnBnU3RhdExvY2FsLnNobWVtLAorCQkpOworfQogCi0JCUFzc2VydCghZm91bmQpOwor LyoKKyAqIEluaXRpYWxpemUgY3VtdWxhdGl2ZSBzdGF0aXN0aWNzIHN5c3RlbSBkdXJpbmcg c3RhcnR1cAorICovCitzdGF0aWMgdm9pZAorU3RhdHNTaG1lbUluaXQodm9pZCAqYXJnKQor eworCWRzYV9hcmVhICAgKmRzYTsKKwlkc2hhc2hfdGFibGUgKmRzaDsKKwlQZ1N0YXRfU2ht ZW1Db250cm9sICpjdGwgPSBwZ1N0YXRMb2NhbC5zaG1lbTsKKwljaGFyCSAgICpwID0gKGNo YXIgKikgY3RsOwogCi0JCS8qIHRoZSBhbGxvY2F0aW9uIG9mIHBnU3RhdExvY2FsLnNobWVt IGl0c2VsZiAqLwotCQlwICs9IE1BWEFMSUdOKHNpemVvZihQZ1N0YXRfU2htZW1Db250cm9s KSk7CisJLyogdGhlIGFsbG9jYXRpb24gb2YgcGdTdGF0TG9jYWwuc2htZW0gaXRzZWxmICov CisJcCArPSBNQVhBTElHTihzaXplb2YoUGdTdGF0X1NobWVtQ29udHJvbCkpOwogCi0JCS8q Ci0JCSAqIENyZWF0ZSBhIHNtYWxsIGRzYSBhbGxvY2F0aW9uIGluIHBsYWluIHNoYXJlZCBt ZW1vcnkuIFRoaXMgaXMKLQkJICogcmVxdWlyZWQgYmVjYXVzZSBwb3N0bWFzdGVyIGNhbm5v dCB1c2UgZHNtIHNlZ21lbnRzLiBJdCBhbHNvCi0JCSAqIHByb3ZpZGVzIGEgc21hbGwgZWZm aWNpZW5jeSB3aW4uCi0JCSAqLwotCQljdGwtPnJhd19kc2FfYXJlYSA9IHA7Ci0JCWRzYSA9 IGRzYV9jcmVhdGVfaW5fcGxhY2UoY3RsLT5yYXdfZHNhX2FyZWEsCi0JCQkJCQkJCSAgcGdz dGF0X2RzYV9pbml0X3NpemUoKSwKLQkJCQkJCQkJICBMV1RSQU5DSEVfUEdTVEFUU19EU0Es IE5VTEwpOwotCQlkc2FfcGluKGRzYSk7CisJLyoKKwkgKiBDcmVhdGUgYSBzbWFsbCBkc2Eg YWxsb2NhdGlvbiBpbiBwbGFpbiBzaGFyZWQgbWVtb3J5LiBUaGlzIGlzIHJlcXVpcmVkCisJ ICogYmVjYXVzZSBwb3N0bWFzdGVyIGNhbm5vdCB1c2UgZHNtIHNlZ21lbnRzLiBJdCBhbHNv IHByb3ZpZGVzIGEgc21hbGwKKwkgKiBlZmZpY2llbmN5IHdpbi4KKwkgKi8KKwljdGwtPnJh d19kc2FfYXJlYSA9IHA7CisJZHNhID0gZHNhX2NyZWF0ZV9pbl9wbGFjZShjdGwtPnJhd19k c2FfYXJlYSwKKwkJCQkJCQkgIHBnc3RhdF9kc2FfaW5pdF9zaXplKCksCisJCQkJCQkJICBM V1RSQU5DSEVfUEdTVEFUU19EU0EsIE5VTEwpOworCWRzYV9waW4oZHNhKTsKIAotCQkvKgot CQkgKiBUbyBlbnN1cmUgZHNoYXNoIGlzIGNyZWF0ZWQgaW4gInBsYWluIiBzaGFyZWQgbWVt b3J5LCB0ZW1wb3JhcmlseQotCQkgKiBsaW1pdCBzaXplIG9mIGRzYSB0byB0aGUgaW5pdGlh bCBzaXplIG9mIHRoZSBkc2EuCi0JCSAqLwotCQlkc2Ffc2V0X3NpemVfbGltaXQoZHNhLCBw Z3N0YXRfZHNhX2luaXRfc2l6ZSgpKTsKKwkvKgorCSAqIFRvIGVuc3VyZSBkc2hhc2ggaXMg Y3JlYXRlZCBpbiAicGxhaW4iIHNoYXJlZCBtZW1vcnksIHRlbXBvcmFyaWx5IGxpbWl0CisJ ICogc2l6ZSBvZiBkc2EgdG8gdGhlIGluaXRpYWwgc2l6ZSBvZiB0aGUgZHNhLgorCSAqLwor CWRzYV9zZXRfc2l6ZV9saW1pdChkc2EsIHBnc3RhdF9kc2FfaW5pdF9zaXplKCkpOwogCi0J CS8qCi0JCSAqIFdpdGggdGhlIGxpbWl0IGluIHBsYWNlLCBjcmVhdGUgdGhlIGRzaGFzaCB0 YWJsZS4gWFhYOiBJdCdkIGJlIG5pY2UKLQkJICogaWYgdGhlcmUgd2VyZSBkc2hhc2hfY3Jl YXRlX2luX3BsYWNlKCkuCi0JCSAqLwotCQlkc2ggPSBkc2hhc2hfY3JlYXRlKGRzYSwgJmRz aF9wYXJhbXMsIE5VTEwpOwotCQljdGwtPmhhc2hfaGFuZGxlID0gZHNoYXNoX2dldF9oYXNo X3RhYmxlX2hhbmRsZShkc2gpOworCS8qCisJICogV2l0aCB0aGUgbGltaXQgaW4gcGxhY2Us IGNyZWF0ZSB0aGUgZHNoYXNoIHRhYmxlLiBYWFg6IEl0J2QgYmUgbmljZSBpZgorCSAqIHRo ZXJlIHdlcmUgZHNoYXNoX2NyZWF0ZV9pbl9wbGFjZSgpLgorCSAqLworCWRzaCA9IGRzaGFz aF9jcmVhdGUoZHNhLCAmZHNoX3BhcmFtcywgTlVMTCk7CisJY3RsLT5oYXNoX2hhbmRsZSA9 IGRzaGFzaF9nZXRfaGFzaF90YWJsZV9oYW5kbGUoZHNoKTsKIAotCQkvKiBsaWZ0IGxpbWl0 IHNldCBhYm92ZSAqLwotCQlkc2Ffc2V0X3NpemVfbGltaXQoZHNhLCAtMSk7CisJLyogbGlm dCBsaW1pdCBzZXQgYWJvdmUgKi8KKwlkc2Ffc2V0X3NpemVfbGltaXQoZHNhLCAtMSk7CiAK LQkJLyoKLQkJICogUG9zdG1hc3RlciB3aWxsIG5ldmVyIGFjY2VzcyB0aGVzZSBhZ2Fpbiwg dGh1cyBmcmVlIHRoZSBsb2NhbAotCQkgKiBkc2EvZHNoYXNoIHJlZmVyZW5jZXMuCi0JCSAq LwotCQlkc2hhc2hfZGV0YWNoKGRzaCk7Ci0JCWRzYV9kZXRhY2goZHNhKTsKKwkvKgorCSAq IFBvc3RtYXN0ZXIgd2lsbCBuZXZlciBhY2Nlc3MgdGhlc2UgYWdhaW4sIHRodXMgZnJlZSB0 aGUgbG9jYWwKKwkgKiBkc2EvZHNoYXNoIHJlZmVyZW5jZXMuCisJICovCisJZHNoYXNoX2Rl dGFjaChkc2gpOworCWRzYV9kZXRhY2goZHNhKTsKIAotCQlwZ19hdG9taWNfaW5pdF91NjQo JmN0bC0+Z2NfcmVxdWVzdF9jb3VudCwgMSk7CisJcGdfYXRvbWljX2luaXRfdTY0KCZjdGwt PmdjX3JlcXVlc3RfY291bnQsIDEpOwogCi0JCS8qIERvIHRoZSBwZXIta2luZCBpbml0aWFs aXphdGlvbiAqLwotCQlmb3IgKFBnU3RhdF9LaW5kIGtpbmQgPSBQR1NUQVRfS0lORF9NSU47 IGtpbmQgPD0gUEdTVEFUX0tJTkRfTUFYOyBraW5kKyspCi0JCXsKLQkJCWNvbnN0IFBnU3Rh dF9LaW5kSW5mbyAqa2luZF9pbmZvID0gcGdzdGF0X2dldF9raW5kX2luZm8oa2luZCk7Ci0J CQljaGFyCSAgICpwdHI7CisJLyogRG8gdGhlIHBlci1raW5kIGluaXRpYWxpemF0aW9uICov CisJZm9yIChQZ1N0YXRfS2luZCBraW5kID0gUEdTVEFUX0tJTkRfTUlOOyBraW5kIDw9IFBH U1RBVF9LSU5EX01BWDsga2luZCsrKQorCXsKKwkJY29uc3QgUGdTdGF0X0tpbmRJbmZvICpr aW5kX2luZm8gPSBwZ3N0YXRfZ2V0X2tpbmRfaW5mbyhraW5kKTsKKwkJY2hhcgkgICAqcHRy OwogCi0JCQlpZiAoIWtpbmRfaW5mbykKLQkJCQljb250aW51ZTsKKwkJaWYgKCFraW5kX2lu Zm8pCisJCQljb250aW51ZTsKIAotCQkJLyogaW5pdGlhbGl6ZSBlbnRyeSBjb3VudCB0cmFj a2luZyAqLwotCQkJaWYgKGtpbmRfaW5mby0+dHJhY2tfZW50cnlfY291bnQpCi0JCQkJcGdf YXRvbWljX2luaXRfdTY0KCZjdGwtPmVudHJ5X2NvdW50c1traW5kIC0gMV0sIDApOworCQkv KiBpbml0aWFsaXplIGVudHJ5IGNvdW50IHRyYWNraW5nICovCisJCWlmIChraW5kX2luZm8t PnRyYWNrX2VudHJ5X2NvdW50KQorCQkJcGdfYXRvbWljX2luaXRfdTY0KCZjdGwtPmVudHJ5 X2NvdW50c1traW5kIC0gMV0sIDApOwogCi0JCQkvKiBpbml0aWFsaXplIGZpeGVkLW51bWJl cmVkIHN0YXRzICovCi0JCQlpZiAoa2luZF9pbmZvLT5maXhlZF9hbW91bnQpCisJCS8qIGlu aXRpYWxpemUgZml4ZWQtbnVtYmVyZWQgc3RhdHMgKi8KKwkJaWYgKGtpbmRfaW5mby0+Zml4 ZWRfYW1vdW50KQorCQl7CisJCQlpZiAocGdzdGF0X2lzX2tpbmRfYnVpbHRpbihraW5kKSkK KwkJCQlwdHIgPSAoKGNoYXIgKikgY3RsKSArIGtpbmRfaW5mby0+c2hhcmVkX2N0bF9vZmY7 CisJCQllbHNlCiAJCQl7Ci0JCQkJaWYgKHBnc3RhdF9pc19raW5kX2J1aWx0aW4oa2luZCkp Ci0JCQkJCXB0ciA9ICgoY2hhciAqKSBjdGwpICsga2luZF9pbmZvLT5zaGFyZWRfY3RsX29m ZjsKLQkJCQllbHNlCi0JCQkJewotCQkJCQlpbnQJCQlpZHggPSBraW5kIC0gUEdTVEFUX0tJ TkRfQ1VTVE9NX01JTjsKLQotCQkJCQlBc3NlcnQoa2luZF9pbmZvLT5zaGFyZWRfc2l6ZSAh PSAwKTsKLQkJCQkJY3RsLT5jdXN0b21fZGF0YVtpZHhdID0gU2htZW1BbGxvYyhraW5kX2lu Zm8tPnNoYXJlZF9zaXplKTsKLQkJCQkJcHRyID0gY3RsLT5jdXN0b21fZGF0YVtpZHhdOwot CQkJCX0KLQotCQkJCWtpbmRfaW5mby0+aW5pdF9zaG1lbV9jYihwdHIpOworCQkJCWludAkJ CWlkeCA9IGtpbmQgLSBQR1NUQVRfS0lORF9DVVNUT01fTUlOOworCisJCQkJQXNzZXJ0KGtp bmRfaW5mby0+c2hhcmVkX3NpemUgIT0gMCk7CisJCQkJY3RsLT5jdXN0b21fZGF0YVtpZHhd ID0gU2htZW1BbGxvYyhraW5kX2luZm8tPnNoYXJlZF9zaXplKTsKKwkJCQlwdHIgPSBjdGwt PmN1c3RvbV9kYXRhW2lkeF07CiAJCQl9CisKKwkJCWtpbmRfaW5mby0+aW5pdF9zaG1lbV9j YihwdHIpOwogCQl9CiAJfQotCWVsc2UKLQl7Ci0JCUFzc2VydChmb3VuZCk7Ci0JfQogfQog CiB2b2lkCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggYi9zcmMv aW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKaW5kZXggZGE3NTAzYzU3YjYuLjMwOTdlOWJiMWFm IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKKysrIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL25idHJlZS5oCkBAIC0xMzAwLDggKzEzMDAsNiBAQCBleHRlcm4gQlRD eWNsZUlkIF9idF92YWN1dW1fY3ljbGVpZChSZWxhdGlvbiByZWwpOwogZXh0ZXJuIEJUQ3lj bGVJZCBfYnRfc3RhcnRfdmFjdXVtKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gdm9pZCBfYnRf ZW5kX3ZhY3V1bShSZWxhdGlvbiByZWwpOwogZXh0ZXJuIHZvaWQgX2J0X2VuZF92YWN1dW1f Y2FsbGJhY2soaW50IGNvZGUsIERhdHVtIGFyZyk7Ci1leHRlcm4gU2l6ZSBCVHJlZVNobWVt U2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIEJUcmVlU2htZW1Jbml0KHZvaWQpOwogZXh0ZXJu IGJ5dGVhICpidG9wdGlvbnMoRGF0dW0gcmVsb3B0aW9ucywgYm9vbCB2YWxpZGF0ZSk7CiBl eHRlcm4gYm9vbCBidHByb3BlcnR5KE9pZCBpbmRleF9vaWQsIGludCBhdHRubywKIAkJCQkJ ICAgSW5kZXhBTVByb3BlcnR5IHByb3AsIGNvbnN0IGNoYXIgKnByb3BuYW1lLApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3N5bmNzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nl c3Mvc3luY3NjYW4uaAppbmRleCAyNGNmMzMyOTRlNS4uMzJmODMzMmFhZWUgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9zeW5jc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9zeW5jc2Nhbi5oCkBAIC0yNCw3ICsyNCw1IEBAIGV4dGVybiBQR0RMTElNUE9SVCBi b29sIHRyYWNlX3N5bmNzY2FuOwogCiBleHRlcm4gdm9pZCBzc19yZXBvcnRfbG9jYXRpb24o UmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBsb2NhdGlvbik7CiBleHRlcm4gQmxvY2tOdW1i ZXIgc3NfZ2V0X2xvY2F0aW9uKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgcmVsbmJsb2Nr cyk7Ci1leHRlcm4gdm9pZCBTeW5jU2NhblNobWVtSW5pdCh2b2lkKTsKLWV4dGVybiBTaXpl IFN5bmNTY2FuU2htZW1TaXplKHZvaWQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2FjY2Vzcy90d29waGFzZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3R3b3BoYXNl LmgKaW5kZXggNzYxZDU2YTVmM2QuLjFkMmZmNDJjOWI3IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9hY2Nlc3MvdHdvcGhhc2UuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdHdvcGhh c2UuaApAQCAtMzMsOSArMzMsNiBAQCB0eXBlZGVmIHN0cnVjdCBHbG9iYWxUcmFuc2FjdGlv bkRhdGEgKkdsb2JhbFRyYW5zYWN0aW9uOwogLyogR1VDIHZhcmlhYmxlICovCiBleHRlcm4g UEdETExJTVBPUlQgaW50IG1heF9wcmVwYXJlZF94YWN0czsKIAotZXh0ZXJuIFNpemUgVHdv UGhhc2VTaG1lbVNpemUodm9pZCk7Ci1leHRlcm4gdm9pZCBUd29QaGFzZVNobWVtSW5pdCh2 b2lkKTsKLQogZXh0ZXJuIHZvaWQgQXRBYm9ydF9Ud29waGFzZSh2b2lkKTsKIGV4dGVybiB2 b2lkIFBvc3RQcmVwYXJlX1R3b3BoYXNlKHZvaWQpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9hY2Nlc3MveGxvZy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaAppbmRleCBk Y2MxMmViOGNiZS4uMWEwOThhOTE0NDQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vz cy94bG9nLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaApAQCAtMjQ2LDggKzI0 Niw2IEBAIGV4dGVybiBjaGFyICpHZXRNb2NrQXV0aGVudGljYXRpb25Ob25jZSh2b2lkKTsK IGV4dGVybiBib29sIERhdGFDaGVja3N1bXNFbmFibGVkKHZvaWQpOwogZXh0ZXJuIGJvb2wg R2V0RGVmYXVsdENoYXJTaWduZWRuZXNzKHZvaWQpOwogZXh0ZXJuIFhMb2dSZWNQdHIgR2V0 RmFrZUxTTkZvclVubG9nZ2VkUmVsKHZvaWQpOwotZXh0ZXJuIFNpemUgWExPR1NobWVtU2l6 ZSh2b2lkKTsKLWV4dGVybiB2b2lkIFhMT0dTaG1lbUluaXQodm9pZCk7CiBleHRlcm4gdm9p ZCBCb290U3RyYXBYTE9HKHVpbnQzMiBkYXRhX2NoZWNrc3VtX3ZlcnNpb24pOwogZXh0ZXJu IHZvaWQgSW5pdGlhbGl6ZVdhbENvbnNpc3RlbmN5Q2hlY2tpbmcodm9pZCk7CiBleHRlcm4g dm9pZCBMb2NhbFByb2Nlc3NDb250cm9sRmlsZShib29sIHJlc2V0KTsKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncHJlZmV0Y2hlci5oIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3hsb2dwcmVmZXRjaGVyLmgKaW5kZXggN2VjNDBjNGI3OGIuLjU2YTgxNjc2ZDkyIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3ByZWZldGNoZXIuaAorKysgYi9z cmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3ByZWZldGNoZXIuaApAQCAtMzQsOSArMzQsNiBAQCB0 eXBlZGVmIHN0cnVjdCBYTG9nUHJlZmV0Y2hlciBYTG9nUHJlZmV0Y2hlcjsKIAogZXh0ZXJu IHZvaWQgWExvZ1ByZWZldGNoUmVjb25maWd1cmUodm9pZCk7CiAKLWV4dGVybiBzaXplX3Qg WExvZ1ByZWZldGNoU2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgWExvZ1ByZWZldGNo U2htZW1Jbml0KHZvaWQpOwotCiBleHRlcm4gdm9pZCBYTG9nUHJlZmV0Y2hSZXNldFN0YXRz KHZvaWQpOwogCiBleHRlcm4gWExvZ1ByZWZldGNoZXIgKlhMb2dQcmVmZXRjaGVyQWxsb2Nh dGUoWExvZ1JlYWRlclN0YXRlICpyZWFkZXIpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv YWNjZXNzL3hsb2dyZWNvdmVyeS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dyZWNvdmVy eS5oCmluZGV4IDI4NDIxMDZiMjg1Li5iYTc3NTBkY2EwYiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL3hsb2dyZWNvdmVyeS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94 bG9ncmVjb3ZlcnkuaApAQCAtMTUzLDkgKzE1Myw2IEBAIGV4dGVybiBQR0RMTElNUE9SVCBi b29sIHJlYWNoZWRDb25zaXN0ZW5jeTsKIC8qIEFyZSB3ZSBjdXJyZW50bHkgaW4gc3RhbmRi eSBtb2RlPyAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgU3RhbmRieU1vZGU7CiAKLWV4 dGVybiBTaXplIFhMb2dSZWNvdmVyeVNobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIFhM b2dSZWNvdmVyeVNobWVtSW5pdCh2b2lkKTsKLQogZXh0ZXJuIHZvaWQgSW5pdFdhbFJlY292 ZXJ5KENvbnRyb2xGaWxlRGF0YSAqQ29udHJvbEZpbGUsCiAJCQkJCQkJYm9vbCAqd2FzU2h1 dGRvd25fcHRyLCBib29sICpoYXZlQmFja3VwTGFiZWxfcHRyLAogCQkJCQkJCWJvb2wgKmhh dmVUYmxzcGNNYXBfcHRyKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9n d2FpdC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2d3YWl0LmgKaW5kZXggZDEyNTMxZDMy YjguLjA3MTU3ZjIyMGVhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3dh aXQuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3dhaXQuaApAQCAtMTAwLDggKzEw MCw2IEBAIHR5cGVkZWYgc3RydWN0IFdhaXRMU05TdGF0ZQogCiBleHRlcm4gUEdETExJTVBP UlQgV2FpdExTTlN0YXRlICp3YWl0TFNOU3RhdGU7CiAKLWV4dGVybiBTaXplIFdhaXRMU05T aG1lbVNpemUodm9pZCk7Ci1leHRlcm4gdm9pZCBXYWl0TFNOU2htZW1Jbml0KHZvaWQpOwog ZXh0ZXJuIFhMb2dSZWNQdHIgR2V0Q3VycmVudExTTkZvcldhaXRUeXBlKFdhaXRMU05UeXBl IGxzblR5cGUpOwogZXh0ZXJuIHZvaWQgV2FpdExTTldha2V1cChXYWl0TFNOVHlwZSBsc25U eXBlLCBYTG9nUmVjUHRyIGN1cnJlbnRMU04pOwogZXh0ZXJuIHZvaWQgV2FpdExTTkNsZWFu dXAodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wZ3N0YXQuaCBiL3NyYy9pbmNs dWRlL3Bnc3RhdC5oCmluZGV4IDhlMzU0OWMzNzUyLi4yNzg2YTdjNWZmYiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvcGdzdGF0LmgKKysrIGIvc3JjL2luY2x1ZGUvcGdzdGF0LmgKQEAg LTU0MSwxMCArNTQxLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgUGdTdGF0X0JhY2tlbmRQZW5kaW5n CiAgKiBGdW5jdGlvbnMgaW4gcGdzdGF0LmMKICAqLwogCi0vKiBmdW5jdGlvbnMgY2FsbGVk IGZyb20gcG9zdG1hc3RlciAqLwotZXh0ZXJuIFNpemUgU3RhdHNTaG1lbVNpemUodm9pZCk7 Ci1leHRlcm4gdm9pZCBTdGF0c1NobWVtSW5pdCh2b2lkKTsKLQogLyogRnVuY3Rpb25zIGNh bGxlZCBkdXJpbmcgc2VydmVyIHN0YXJ0dXAgLyBzaHV0ZG93biAqLwogZXh0ZXJuIHZvaWQg cGdzdGF0X3Jlc3RvcmVfc3RhdHModm9pZCk7CiBleHRlcm4gdm9pZCBwZ3N0YXRfZGlzY2Fy ZF9zdGF0cyh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYXV0 b3ZhY3V1bS5oIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgKaW5kZXgg YjIxZDExMWQ0ZDUuLjg5NTRmNmIyOGVlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3N0 bWFzdGVyL2F1dG92YWN1dW0uaAorKysgYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1dG92 YWN1dW0uaApAQCAtNjYsOCArNjYsNCBAQCBwZ19ub3JldHVybiBleHRlcm4gdm9pZCBBdXRv VmFjV29ya2VyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydAog ZXh0ZXJuIGJvb2wgQXV0b1ZhY3V1bVJlcXVlc3RXb3JrKEF1dG9WYWN1dW1Xb3JrSXRlbVR5 cGUgdHlwZSwKIAkJCQkJCQkJICBPaWQgcmVsYXRpb25JZCwgQmxvY2tOdW1iZXIgYmxrbm8p OwogCi0vKiBzaGFyZWQgbWVtb3J5IHN0dWZmICovCi1leHRlcm4gU2l6ZSBBdXRvVmFjdXVt U2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgQXV0b1ZhY3V1bVNobWVtSW5pdCh2b2lk KTsKLQogI2VuZGlmCQkJCQkJCS8qIEFVVE9WQUNVVU1fSCAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dvcmtlcl9pbnRlcm5hbHMuaCBiL3NyYy9pbmNsdWRl L3Bvc3RtYXN0ZXIvYmd3b3JrZXJfaW50ZXJuYWxzLmgKaW5kZXggYjc4OWNhZjQwMzQuLmI2 MjYxYmMwMWRmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Jnd29ya2Vy X2ludGVybmFscy5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYmd3b3JrZXJfaW50 ZXJuYWxzLmgKQEAgLTQxLDggKzQxLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVnaXN0ZXJlZEJn V29ya2VyCiAKIGV4dGVybiBQR0RMTElNUE9SVCBkbGlzdF9oZWFkIEJhY2tncm91bmRXb3Jr ZXJMaXN0OwogCi1leHRlcm4gU2l6ZSBCYWNrZ3JvdW5kV29ya2VyU2htZW1TaXplKHZvaWQp OwotZXh0ZXJuIHZvaWQgQmFja2dyb3VuZFdvcmtlclNobWVtSW5pdCh2b2lkKTsKIGV4dGVy biB2b2lkIEJhY2tncm91bmRXb3JrZXJTdGF0ZUNoYW5nZShib29sIGFsbG93X25ld193b3Jr ZXJzKTsKIGV4dGVybiB2b2lkIEZvcmdldEJhY2tncm91bmRXb3JrZXIoUmVnaXN0ZXJlZEJn V29ya2VyICpydyk7CiBleHRlcm4gdm9pZCBSZXBvcnRCYWNrZ3JvdW5kV29ya2VyUElEKFJl Z2lzdGVyZWRCZ1dvcmtlciAqcncpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9zdG1h c3Rlci9iZ3dyaXRlci5oIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dyaXRlci5oCmlu ZGV4IDQ3NDcwY2JhODkzLi4zNmVlYTBiMWFiMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv cG9zdG1hc3Rlci9iZ3dyaXRlci5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYmd3 cml0ZXIuaApAQCAtMzksOSArMzksNiBAQCBleHRlcm4gYm9vbCBGb3J3YXJkU3luY1JlcXVl c3QoY29uc3QgRmlsZVRhZyAqZnRhZywgU3luY1JlcXVlc3RUeXBlIHR5cGUpOwogCiBleHRl cm4gdm9pZCBBYnNvcmJTeW5jUmVxdWVzdHModm9pZCk7CiAKLWV4dGVybiBTaXplIENoZWNr cG9pbnRlclNobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIENoZWNrcG9pbnRlclNobWVt SW5pdCh2b2lkKTsKLQogZXh0ZXJuIGJvb2wgRmlyc3RDYWxsU2luY2VMYXN0Q2hlY2twb2lu dCh2b2lkKTsKIAogI2VuZGlmCQkJCQkJCS8qIF9CR1dSSVRFUl9IICovCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3BnYXJjaC5oIGIvc3JjL2luY2x1ZGUvcG9zdG1h c3Rlci9wZ2FyY2guaAppbmRleCBmYWE3NjA5Y2Q4MS4uOTc3MmJiNTczYTEgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvcGdhcmNoLmgKKysrIGIvc3JjL2luY2x1ZGUv cG9zdG1hc3Rlci9wZ2FyY2guaApAQCAtMjYsOCArMjYsNiBAQAogI2RlZmluZSBNQVhfWEZO X0NIQVJTCTQwCiAjZGVmaW5lIFZBTElEX1hGTl9DSEFSUyAiMDEyMzQ1Njc4OUFCQ0RFRi5o aXN0b3J5LmJhY2t1cC5wYXJ0aWFsIgogCi1leHRlcm4gU2l6ZSBQZ0FyY2hTaG1lbVNpemUo dm9pZCk7Ci1leHRlcm4gdm9pZCBQZ0FyY2hTaG1lbUluaXQodm9pZCk7CiBleHRlcm4gYm9v bCBQZ0FyY2hDYW5SZXN0YXJ0KHZvaWQpOwogcGdfbm9yZXR1cm4gZXh0ZXJuIHZvaWQgUGdB cmNoaXZlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9k YXRhX2xlbik7CiBleHRlcm4gdm9pZCBQZ0FyY2hXYWtldXAodm9pZCk7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuaCBiL3NyYy9pbmNsdWRl L3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5oCmluZGV4IGE0YzA1NTA2NmI0Li5iOWE3NTVm YWRiYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVy LmgKKysrIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmgKQEAgLTE5 LDggKzE5LDYgQEAKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIHN1bW1hcml6ZV93YWw7CiBl eHRlcm4gUEdETExJTVBPUlQgaW50IHdhbF9zdW1tYXJ5X2tlZXBfdGltZTsKIAotZXh0ZXJu IFNpemUgV2FsU3VtbWFyaXplclNobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIFdhbFN1 bW1hcml6ZXJTaG1lbUluaXQodm9pZCk7CiBwZ19ub3JldHVybiBleHRlcm4gdm9pZCBXYWxT dW1tYXJpemVyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVw X2RhdGFfbGVuKTsKIAogZXh0ZXJuIHZvaWQgR2V0V2FsU3VtbWFyaXplclN0YXRlKFRpbWVM aW5lSUQgKnN1bW1hcml6ZWRfdGxpLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vbG9naWNhbGN0bC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbGN0 bC5oCmluZGV4IDQ5NTU1NGM1MzJjLi4wYmMxMzAyZjEzMCAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbGN0bC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL2xvZ2ljYWxjdGwuaApAQCAtMTQsOCArMTQsNiBAQAogI2lmbmRlZiBMT0dJQ0FM Q1RMX0gKICNkZWZpbmUgTE9HSUNBTENUTF9ICiAKLWV4dGVybiBTaXplIExvZ2ljYWxEZWNv ZGluZ0N0bFNobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIExvZ2ljYWxEZWNvZGluZ0N0 bFNobWVtSW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIFN0YXJ0dXBMb2dpY2FsRGVjb2RpbmdT dGF0dXMoYm9vbCBsYXN0X3N0YXR1cyk7CiBleHRlcm4gdm9pZCBJbml0aWFsaXplUHJvY2Vz c1hMb2dMb2dpY2FsSW5mbyh2b2lkKTsKIGV4dGVybiBib29sIFByb2Nlc3NCYXJyaWVyVXBk YXRlWExvZ0xvZ2ljYWxJbmZvKHZvaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vbG9naWNhbGxhdW5jaGVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9s b2dpY2FsbGF1bmNoZXIuaAppbmRleCA1MDRiNzEwNTM2YS4uNWYwYzFiOWM2ODIgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5oCisrKyBi L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5oCkBAIC0xOSw5ICsx OSw2IEBAIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtl cnNfcGVyX3N1YnNjcmlwdGlvbjsKIGV4dGVybiB2b2lkIEFwcGx5TGF1bmNoZXJSZWdpc3Rl cih2b2lkKTsKIGV4dGVybiB2b2lkIEFwcGx5TGF1bmNoZXJNYWluKERhdHVtIG1haW5fYXJn KTsKIAotZXh0ZXJuIFNpemUgQXBwbHlMYXVuY2hlclNobWVtU2l6ZSh2b2lkKTsKLWV4dGVy biB2b2lkIEFwcGx5TGF1bmNoZXJTaG1lbUluaXQodm9pZCk7Ci0KIGV4dGVybiB2b2lkIEFw cGx5TGF1bmNoZXJGb3JnZXRXb3JrZXJTdGFydFRpbWUoT2lkIHN1YmlkKTsKIAogZXh0ZXJu IHZvaWQgQXBwbHlMYXVuY2hlcldha2V1cEF0Q29tbWl0KHZvaWQpOwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3JpZ2luLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9vcmlnaW4uaAppbmRleCBlYjQ2YjQxYjRiNy4uYTY5ZmFmNmVhYWYgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL29yaWdpbi5oCisrKyBiL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL29yaWdpbi5oCkBAIC04NCw4ICs4NCw0IEBAIGV4dGVybiB2b2lkIHJl cGxvcmlnaW5fcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7CiBleHRlcm4gdm9pZCBy ZXBsb3JpZ2luX2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3Jk KTsKIGV4dGVybiBjb25zdCBjaGFyICpyZXBsb3JpZ2luX2lkZW50aWZ5KHVpbnQ4IGluZm8p OwogCi0vKiBzaGFyZWQgbWVtb3J5IGFsbG9jYXRpb24gKi8KLWV4dGVybiBTaXplIFJlcGxp Y2F0aW9uT3JpZ2luU2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgUmVwbGljYXRpb25P cmlnaW5TaG1lbUluaXQodm9pZCk7Ci0KICNlbmRpZgkJCQkJCQkvKiBQR19PUklHSU5fSCAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oIGIvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oCmluZGV4IDRiNDcwOWY2ZTJjLi4xYTM1NTdkZTYw NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oCisrKyBiL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaApAQCAtMzI3LDEwICszMjcsNiBAQCBleHRl cm4gUEdETExJTVBPUlQgaW50IG1heF9yZXBsaWNhdGlvbl9zbG90czsKIGV4dGVybiBQR0RM TElNUE9SVCBjaGFyICpzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90czsKIGV4dGVybiBQR0RM TElNUE9SVCBpbnQgaWRsZV9yZXBsaWNhdGlvbl9zbG90X3RpbWVvdXRfc2VjczsKIAotLyog c2htZW0gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICovCi1leHRlcm4gU2l6ZSBSZXBsaWNh dGlvblNsb3RzU2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgUmVwbGljYXRpb25TbG90 c1NobWVtSW5pdCh2b2lkKTsKLQogLyogbWFuYWdlbWVudCBvZiBpbmRpdmlkdWFsIHNsb3Rz ICovCiBleHRlcm4gdm9pZCBSZXBsaWNhdGlvblNsb3RDcmVhdGUoY29uc3QgY2hhciAqbmFt ZSwgYm9vbCBkYl9zcGVjaWZpYywKIAkJCQkJCQkJICBSZXBsaWNhdGlvblNsb3RQZXJzaXN0 ZW5jeSBwZXJzaXN0ZW5jeSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L3Nsb3RzeW5jLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbG90c3luYy5oCmluZGV4 IGU1NDZkMGQwNTBkLi5kMjEyMWNkM2VkNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vc2xvdHN5bmMuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbG90 c3luYy5oCkBAIC0zMSw4ICszMSw2IEBAIHBnX25vcmV0dXJuIGV4dGVybiB2b2lkIFJlcGxT bG90U3luY1dvcmtlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3QKIGV4 dGVybiB2b2lkIFNodXREb3duU2xvdFN5bmModm9pZCk7CiBleHRlcm4gYm9vbCBTbG90U3lu Y1dvcmtlckNhblJlc3RhcnQodm9pZCk7CiBleHRlcm4gYm9vbCBJc1N5bmNpbmdSZXBsaWNh dGlvblNsb3RzKHZvaWQpOwotZXh0ZXJuIFNpemUgU2xvdFN5bmNTaG1lbVNpemUodm9pZCk7 Ci1leHRlcm4gdm9pZCBTbG90U3luY1NobWVtSW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIFN5 bmNSZXBsaWNhdGlvblNsb3RzKFdhbFJlY2VpdmVyQ29ubiAqd3Jjb25uKTsKIAogI2VuZGlm CQkJCQkJCS8qIFNMT1RTWU5DX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3dhbHJlY2VpdmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxyZWNl aXZlci5oCmluZGV4IDg1ZDI0Yzg3Mjk4Li40N2MwNzU3NGQ0ZCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaAorKysgYi9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oCkBAIC00OTEsOCArNDkxLDYgQEAgcGdfbm9yZXR1 cm4gZXh0ZXJuIHZvaWQgV2FsUmVjZWl2ZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0 YSwgc2l6ZV90IHN0YXJ0dXAKIGV4dGVybiB2b2lkIFdhbFJjdlJlcXVlc3RBcHBseVJlcGx5 KHZvaWQpOwogCiAvKiBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gd2FscmVjZWl2ZXJm dW5jcy5jICovCi1leHRlcm4gU2l6ZSBXYWxSY3ZTaG1lbVNpemUodm9pZCk7Ci1leHRlcm4g dm9pZCBXYWxSY3ZTaG1lbUluaXQodm9pZCk7CiBleHRlcm4gdm9pZCBTaHV0ZG93bldhbFJj dih2b2lkKTsKIGV4dGVybiBib29sIFdhbFJjdlN0cmVhbWluZyh2b2lkKTsKIGV4dGVybiBi b29sIFdhbFJjdlJ1bm5pbmcodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi93YWxzZW5kZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHNlbmRl ci5oCmluZGV4IGE0ZGYzYjhlMGFlLi44OTUyYzg0OGQxOSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vd2Fsc2VuZGVyLmgKQEAgLTQxLDggKzQxLDYgQEAgZXh0ZXJuIHZvaWQgV2FsU25k RXJyb3JDbGVhbnVwKHZvaWQpOwogZXh0ZXJuIHZvaWQgUGh5c2ljYWxXYWtldXBMb2dpY2Fs V2FsU25kKHZvaWQpOwogZXh0ZXJuIFhMb2dSZWNQdHIgR2V0U3RhbmRieUZsdXNoUmVjUHRy KFRpbWVMaW5lSUQgKnRsaSk7CiBleHRlcm4gdm9pZCBXYWxTbmRTaWduYWxzKHZvaWQpOwot ZXh0ZXJuIFNpemUgV2FsU25kU2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgV2FsU25k U2htZW1Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgV2FsU25kV2FrZXVwKGJvb2wgcGh5c2lj YWwsIGJvb2wgbG9naWNhbCk7CiBleHRlcm4gdm9pZCBXYWxTbmRJbml0U3RvcHBpbmcodm9p ZCk7CiBleHRlcm4gdm9pZCBXYWxTbmRXYWl0U3RvcHBpbmcodm9pZCk7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaCBiL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvYnVmX2ludGVybmFscy5oCmluZGV4IGFkMWI3YjIyMTZhLi5kMmY0MDdmZWJkZCAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmgKKysrIGIv c3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmgKQEAgLTU4NywxMiArNTg3LDgg QEAgZXh0ZXJuIGJvb2wgU3RyYXRlZ3lSZWplY3RCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRl Z3kgc3RyYXRlZ3ksCiBleHRlcm4gaW50CVN0cmF0ZWd5U3luY1N0YXJ0KHVpbnQzMiAqY29t cGxldGVfcGFzc2VzLCB1aW50MzIgKm51bV9idWZfYWxsb2MpOwogZXh0ZXJuIHZvaWQgU3Ry YXRlZ3lOb3RpZnlCZ1dyaXRlcihpbnQgYmd3cHJvY25vKTsKIAotZXh0ZXJuIFNpemUgU3Ry YXRlZ3lTaG1lbVNpemUodm9pZCk7Ci1leHRlcm4gdm9pZCBTdHJhdGVneUluaXRpYWxpemUo Ym9vbCBpbml0KTsKLQogLyogYnVmX3RhYmxlLmMgKi8KLWV4dGVybiBTaXplIEJ1ZlRhYmxl U2htZW1TaXplKGludCBzaXplKTsKLWV4dGVybiB2b2lkIEluaXRCdWZUYWJsZShpbnQgc2l6 ZSk7CitleHRlcm4gdm9pZCBCdWZUYWJsZVNobWVtUmVxdWVzdChpbnQgc2l6ZSk7CiBleHRl cm4gdWludDMyIEJ1ZlRhYmxlSGFzaENvZGUoQnVmZmVyVGFnICp0YWdQdHIpOwogZXh0ZXJu IGludAlCdWZUYWJsZUxvb2t1cChCdWZmZXJUYWcgKnRhZ1B0ciwgdWludDMyIGhhc2hjb2Rl KTsKIGV4dGVybiBpbnQJQnVmVGFibGVJbnNlcnQoQnVmZmVyVGFnICp0YWdQdHIsIHVpbnQz MiBoYXNoY29kZSwgaW50IGJ1Zl9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9y YWdlL2J1Zm1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAppbmRleCBhYTYx YTM5ZDllNi4uNjgzN2IzNWZjNmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv YnVmbWdyLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtMzcxLDEw ICszNzEsNiBAQCBleHRlcm4gdm9pZCBNYXJrRGlydHlBbGxVbnBpbm5lZEJ1ZmZlcnMoaW50 MzIgKmJ1ZmZlcnNfZGlydGllZCwKIAkJCQkJCQkJCQlpbnQzMiAqYnVmZmVyc19hbHJlYWR5 X2RpcnR5LAogCQkJCQkJCQkJCWludDMyICpidWZmZXJzX3NraXBwZWQpOwogCi0vKiBpbiBi dWZfaW5pdC5jICovCi1leHRlcm4gdm9pZCBCdWZmZXJNYW5hZ2VyU2htZW1Jbml0KHZvaWQp OwotZXh0ZXJuIFNpemUgQnVmZmVyTWFuYWdlclNobWVtU2l6ZSh2b2lkKTsKLQogLyogaW4g bG9jYWxidWYuYyAqLwogZXh0ZXJuIHZvaWQgQXRQcm9jRXhpdF9Mb2NhbEJ1ZmZlcnModm9p ZCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG9jay5oIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9sb2NrLmgKaW5kZXggZmE2OGU2ZWNlY2UuLmVlM2NiMWRjMjAzIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2suaAorKysgYi9zcmMvaW5jbHVk ZS9zdG9yYWdlL2xvY2suaApAQCAtMzc1LDggKzM3NSw2IEBAIHR5cGVkZWYgZW51bQogLyoK ICAqIGZ1bmN0aW9uIHByb3RvdHlwZXMKICAqLwotZXh0ZXJuIHZvaWQgTG9ja01hbmFnZXJT aG1lbUluaXQodm9pZCk7Ci1leHRlcm4gU2l6ZSBMb2NrTWFuYWdlclNobWVtU2l6ZSh2b2lk KTsKIGV4dGVybiB2b2lkIEluaXRMb2NrTWFuYWdlckFjY2Vzcyh2b2lkKTsKIGV4dGVybiBM b2NrTWV0aG9kIEdldExvY2tzTWV0aG9kVGFibGUoY29uc3QgTE9DSyAqbG9jayk7CiBleHRl cm4gTG9ja01ldGhvZCBHZXRMb2NrVGFnc01ldGhvZFRhYmxlKGNvbnN0IExPQ0tUQUcgKmxv Y2t0YWcpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1saXN0 LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3RlbWxpc3QuaAppbmRleCBlOGUwNmJl MzBjMi4uMjA2ZDZiNTg2YWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vi c3lzdGVtbGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5o CkBAIC0yNSwxMCArMjUsMTggQEAgUEdfU0hNRU1fU1VCU1lTVEVNKERTTVJlZ2lzdHJ5U2ht ZW1DYWxsYmFja3MpCiAKIC8qIHhsb2csIGNsb2csIGFuZCBidWZmZXJzICovCiBQR19TSE1F TV9TVUJTWVNURU0oVmFyc3VwU2htZW1DYWxsYmFja3MpCitQR19TSE1FTV9TVUJTWVNURU0o WExPR1NobWVtQ2FsbGJhY2tzKQorUEdfU0hNRU1fU1VCU1lTVEVNKFhMb2dQcmVmZXRjaFNo bWVtQ2FsbGJhY2tzKQorUEdfU0hNRU1fU1VCU1lTVEVNKFhMb2dSZWNvdmVyeVNobWVtQ2Fs bGJhY2tzKQogUEdfU0hNRU1fU1VCU1lTVEVNKENMT0dTaG1lbUNhbGxiYWNrcykKIFBHX1NI TUVNX1NVQlNZU1RFTShDb21taXRUc1NobWVtQ2FsbGJhY2tzKQogUEdfU0hNRU1fU1VCU1lT VEVNKFNVQlRSQU5TU2htZW1DYWxsYmFja3MpCiBQR19TSE1FTV9TVUJTWVNURU0oTXVsdGlY YWN0U2htZW1DYWxsYmFja3MpCitQR19TSE1FTV9TVUJTWVNURU0oQnVmZmVyTWFuYWdlclNo bWVtQ2FsbGJhY2tzKQorUEdfU0hNRU1fU1VCU1lTVEVNKFN0cmF0ZWd5Q3RsU2htZW1DYWxs YmFja3MpCisKKy8qIGxvY2sgbWFuYWdlciAqLworUEdfU0hNRU1fU1VCU1lTVEVNKExvY2tN YW5hZ2VyU2htZW1DYWxsYmFja3MpCiAKIC8qIHByZWRpY2F0ZSBsb2NrIG1hbmFnZXIgKi8K IFBHX1NITUVNX1NVQlNZU1RFTShQcmVkaWNhdGVMb2NrU2htZW1DYWxsYmFja3MpCkBAIC0z Niw2ICs0NCw5IEBAIFBHX1NITUVNX1NVQlNZU1RFTShQcmVkaWNhdGVMb2NrU2htZW1DYWxs YmFja3MpCiAvKiBwcm9jZXNzIHRhYmxlICovCiBQR19TSE1FTV9TVUJTWVNURU0oUHJvY0ds b2JhbFNobWVtQ2FsbGJhY2tzKQogUEdfU0hNRU1fU1VCU1lTVEVNKFByb2NBcnJheVNobWVt Q2FsbGJhY2tzKQorUEdfU0hNRU1fU1VCU1lTVEVNKEJhY2tlbmRTdGF0dXNTaG1lbUNhbGxi YWNrcykKK1BHX1NITUVNX1NVQlNZU1RFTShUd29QaGFzZVNobWVtQ2FsbGJhY2tzKQorUEdf U0hNRU1fU1VCU1lTVEVNKEJhY2tncm91bmRXb3JrZXJTaG1lbUNhbGxiYWNrcykKIAogLyog c2hhcmVkLWludmFsIG1lc3NhZ2luZyAqLwogUEdfU0hNRU1fU1VCU1lTVEVNKFNoYXJlZElu dmFsU2htZW1DYWxsYmFja3MpCkBAIC00MywxMSArNTQsMjYgQEAgUEdfU0hNRU1fU1VCU1lT VEVNKFNoYXJlZEludmFsU2htZW1DYWxsYmFja3MpCiAvKiBpbnRlcnByb2Nlc3Mgc2lnbmFs aW5nIG1lY2hhbmlzbXMgKi8KIFBHX1NITUVNX1NVQlNZU1RFTShQTVNpZ25hbFNobWVtQ2Fs bGJhY2tzKQogUEdfU0hNRU1fU1VCU1lTVEVNKFByb2NTaWduYWxTaG1lbUNhbGxiYWNrcykK K1BHX1NITUVNX1NVQlNZU1RFTShDaGVja3BvaW50ZXJTaG1lbUNhbGxiYWNrcykKK1BHX1NI TUVNX1NVQlNZU1RFTShBdXRvVmFjdXVtU2htZW1DYWxsYmFja3MpCitQR19TSE1FTV9TVUJT WVNURU0oUmVwbGljYXRpb25TbG90c1NobWVtQ2FsbGJhY2tzKQorUEdfU0hNRU1fU1VCU1lT VEVNKFJlcGxpY2F0aW9uT3JpZ2luU2htZW1DYWxsYmFja3MpCitQR19TSE1FTV9TVUJTWVNU RU0oV2FsU25kU2htZW1DYWxsYmFja3MpCitQR19TSE1FTV9TVUJTWVNURU0oV2FsUmN2U2ht ZW1DYWxsYmFja3MpCitQR19TSE1FTV9TVUJTWVNURU0oV2FsU3VtbWFyaXplclNobWVtQ2Fs bGJhY2tzKQorUEdfU0hNRU1fU1VCU1lTVEVNKFBnQXJjaFNobWVtQ2FsbGJhY2tzKQorUEdf U0hNRU1fU1VCU1lTVEVNKEFwcGx5TGF1bmNoZXJTaG1lbUNhbGxiYWNrcykKK1BHX1NITUVN X1NVQlNZU1RFTShTbG90U3luY1NobWVtQ2FsbGJhY2tzKQogCiAvKiBvdGhlciBtb2R1bGVz IHRoYXQgbmVlZCBzb21lIHNoYXJlZCBtZW1vcnkgc3BhY2UgKi8KK1BHX1NITUVNX1NVQlNZ U1RFTShCVHJlZVNobWVtQ2FsbGJhY2tzKQorUEdfU0hNRU1fU1VCU1lTVEVNKFN5bmNTY2Fu U2htZW1DYWxsYmFja3MpCiBQR19TSE1FTV9TVUJTWVNURU0oQXN5bmNTaG1lbUNhbGxiYWNr cykKK1BHX1NITUVNX1NVQlNZU1RFTShTdGF0c1NobWVtQ2FsbGJhY2tzKQogUEdfU0hNRU1f U1VCU1lTVEVNKFdhaXRFdmVudEN1c3RvbVNobWVtQ2FsbGJhY2tzKQogUEdfU0hNRU1fU1VC U1lTVEVNKEluamVjdGlvblBvaW50U2htZW1DYWxsYmFja3MpCitQR19TSE1FTV9TVUJTWVNU RU0oV2FpdExTTlNobWVtQ2FsbGJhY2tzKQorUEdfU0hNRU1fU1VCU1lTVEVNKExvZ2ljYWxE ZWNvZGluZ0N0bFNobWVtQ2FsbGJhY2tzKQogCiAvKiBBSU8gc3Vic3lzdGVtLiBUaGlzIGRl bGVnYXRlcyB0byB0aGUgbWV0aG9kLXNwZWNpZmljIGNhbGxiYWNrcyAqLwogUEdfU0hNRU1f U1VCU1lTVEVNKEFpb1NobWVtQ2FsbGJhY2tzKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv dXRpbHMvYmFja2VuZF9zdGF0dXMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2JhY2tlbmRfc3Rh dHVzLmgKaW5kZXggZGRkMDYzMDRlOTcuLmEzMzRlMDk2ZTRhIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS91dGlscy9iYWNrZW5kX3N0YXR1cy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxz L2JhY2tlbmRfc3RhdHVzLmgKQEAgLTI5OCwxNCArMjk4LDYgQEAgZXh0ZXJuIFBHRExMSU1Q T1JUIGludCBwZ3N0YXRfdHJhY2tfYWN0aXZpdHlfcXVlcnlfc2l6ZTsKIGV4dGVybiBQR0RM TElNUE9SVCBQZ0JhY2tlbmRTdGF0dXMgKk15QkVFbnRyeTsKIAogCi0vKiAtLS0tLS0tLS0t Ci0gKiBGdW5jdGlvbnMgY2FsbGVkIGZyb20gcG9zdG1hc3RlcgotICogLS0tLS0tLS0tLQot ICovCi1leHRlcm4gU2l6ZSBCYWNrZW5kU3RhdHVzU2htZW1TaXplKHZvaWQpOwotZXh0ZXJu IHZvaWQgQmFja2VuZFN0YXR1c1NobWVtSW5pdCh2b2lkKTsKLQotCiAvKiAtLS0tLS0tLS0t CiAgKiBGdW5jdGlvbnMgY2FsbGVkIGZyb20gYmFja2VuZHMKICAqIC0tLS0tLS0tLS0KZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rpb25f cG9pbnRzLmMgYi9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvaW5qZWN0aW9u X3BvaW50cy5jCmluZGV4IGQ1OWM1YWQwNTgyLi41OTJlY2ZhZDNkYSAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL2luamVjdGlvbl9wb2ludHMuYwor KysgYi9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3BvaW50 cy5jCkBAIC0xMDcsOSArMTA3LDEzIEBAIGV4dGVybiBQR0RMTEVYUE9SVCB2b2lkIGluamVj dGlvbl93YWl0KGNvbnN0IGNoYXIgKm5hbWUsCiAvKiB0cmFjayBpZiBpbmplY3Rpb24gcG9p bnRzIGF0dGFjaGVkIGluIHRoaXMgcHJvY2VzcyBhcmUgbGlua2VkIHRvIGl0ICovCiBzdGF0 aWMgYm9vbCBpbmplY3Rpb25fcG9pbnRfbG9jYWwgPSBmYWxzZTsKIAotLyogU2hhcmVkIG1l bW9yeSBpbml0IGNhbGxiYWNrcyAqLwotc3RhdGljIHNobWVtX3JlcXVlc3RfaG9va190eXBl IHByZXZfc2htZW1fcmVxdWVzdF9ob29rID0gTlVMTDsKLXN0YXRpYyBzaG1lbV9zdGFydHVw X2hvb2tfdHlwZSBwcmV2X3NobWVtX3N0YXJ0dXBfaG9vayA9IE5VTEw7CitzdGF0aWMgdm9p ZCBpbmplY3Rpb25fc2htZW1fcmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgaW5q ZWN0aW9uX3NobWVtX2luaXQodm9pZCAqYXJnKTsKKworc3RhdGljIGNvbnN0IFNobWVtQ2Fs bGJhY2tzIGluamVjdGlvbl9zaG1lbV9jYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBp bmplY3Rpb25fc2htZW1fcmVxdWVzdCwKKwkuaW5pdF9mbiA9IGluamVjdGlvbl9zaG1lbV9p bml0LAorfTsKIAogLyoKICAqIFJvdXRpbmUgZm9yIHNoYXJlZCBtZW1vcnkgYXJlYSBpbml0 aWFsaXphdGlvbiwgdXNlZCBhcyBhIGNhbGxiYWNrCkBAIC0xMjYsNDQgKzEzMCwyNiBAQCBp bmplY3Rpb25fcG9pbnRfaW5pdF9zdGF0ZSh2b2lkICpwdHIsIHZvaWQgKmFyZykKIAlDb25k aXRpb25WYXJpYWJsZUluaXQoJnN0YXRlLT53YWl0X3BvaW50KTsKIH0KIAotLyogU2hhcmVk IG1lbW9yeSBpbml0aWFsaXphdGlvbiB3aGVuIGxvYWRpbmcgbW9kdWxlICovCiBzdGF0aWMg dm9pZAotaW5qZWN0aW9uX3NobWVtX3JlcXVlc3Qodm9pZCkKK2luamVjdGlvbl9zaG1lbV9y ZXF1ZXN0KHZvaWQgKmFyZykKIHsKLQlTaXplCQlzaXplOwotCi0JaWYgKHByZXZfc2htZW1f cmVxdWVzdF9ob29rKQotCQlwcmV2X3NobWVtX3JlcXVlc3RfaG9vaygpOworCXN0YXRpYyBT aG1lbVN0cnVjdERlc2MgSW5qZWN0aW9uUG9pbnRzU2htZW1EZXNjOwogCi0Jc2l6ZSA9IE1B WEFMSUdOKHNpemVvZihJbmplY3Rpb25Qb2ludFNoYXJlZFN0YXRlKSk7Ci0JUmVxdWVzdEFk ZGluU2htZW1TcGFjZShzaXplKTsKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJkluamVjdGlvblBv aW50c1NobWVtRGVzYywKKwkJCQkJICAgLm5hbWUgPSAiaW5qZWN0aW9uX3BvaW50cyIsCisJ CQkJCSAgIC5zaXplID0gc2l6ZW9mKEluamVjdGlvblBvaW50U2hhcmVkU3RhdGUpLAorCQkJ CQkgICAucHRyID0gKHZvaWQgKiopICZpbmpfc3RhdGUsCisJCSk7CiB9CiAKIHN0YXRpYyB2 b2lkCi1pbmplY3Rpb25fc2htZW1fc3RhcnR1cCh2b2lkKQoraW5qZWN0aW9uX3NobWVtX2lu aXQodm9pZCAqYXJnKQogewotCWJvb2wJCWZvdW5kOwotCi0JaWYgKHByZXZfc2htZW1fc3Rh cnR1cF9ob29rKQotCQlwcmV2X3NobWVtX3N0YXJ0dXBfaG9vaygpOwotCi0JLyogQ3JlYXRl IG9yIGF0dGFjaCB0byB0aGUgc2hhcmVkIG1lbW9yeSBzdGF0ZSAqLwotCUxXTG9ja0FjcXVp cmUoQWRkaW5TaG1lbUluaXRMb2NrLCBMV19FWENMVVNJVkUpOwotCi0JaW5qX3N0YXRlID0g U2htZW1Jbml0U3RydWN0KCJpbmplY3Rpb25fcG9pbnRzIiwKLQkJCQkJCQkJc2l6ZW9mKElu amVjdGlvblBvaW50U2hhcmVkU3RhdGUpLAotCQkJCQkJCQkmZm91bmQpOwotCi0JaWYgKCFm b3VuZCkKLQl7Ci0JCS8qCi0JCSAqIEZpcnN0IHRpbWUgdGhyb3VnaCwgc28gaW5pdGlhbGl6 ZS4gIFRoaXMgaXMgc2hhcmVkIHdpdGggdGhlIGR5bmFtaWMKLQkJICogaW5pdGlhbGl6YXRp b24gdXNpbmcgYSBEU00uCi0JCSAqLwotCQlpbmplY3Rpb25fcG9pbnRfaW5pdF9zdGF0ZShp bmpfc3RhdGUsIE5VTEwpOwotCX0KLQotCUxXTG9ja1JlbGVhc2UoQWRkaW5TaG1lbUluaXRM b2NrKTsKKwkvKgorCSAqIEZpcnN0IHRpbWUgdGhyb3VnaCwgc28gaW5pdGlhbGl6ZS4gIFRo aXMgaXMgc2hhcmVkIHdpdGggdGhlIGR5bmFtaWMKKwkgKiBpbml0aWFsaXphdGlvbiB1c2lu ZyBhIERTTS4KKwkgKi8KKwlpbmplY3Rpb25fcG9pbnRfaW5pdF9zdGF0ZShpbmpfc3RhdGUs IE5VTEwpOwogfQogCiAvKgpAQCAtNjAxLDkgKzU4Nyw1IEBAIF9QR19pbml0KHZvaWQpCiAJ aWYgKCFwcm9jZXNzX3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllc19pbl9wcm9ncmVzcykKIAkJ cmV0dXJuOwogCi0JLyogU2hhcmVkIG1lbW9yeSBpbml0aWFsaXphdGlvbiAqLwotCXByZXZf c2htZW1fcmVxdWVzdF9ob29rID0gc2htZW1fcmVxdWVzdF9ob29rOwotCXNobWVtX3JlcXVl c3RfaG9vayA9IGluamVjdGlvbl9zaG1lbV9yZXF1ZXN0OwotCXByZXZfc2htZW1fc3RhcnR1 cF9ob29rID0gc2htZW1fc3RhcnR1cF9ob29rOwotCXNobWVtX3N0YXJ0dXBfaG9vayA9IGlu amVjdGlvbl9zaG1lbV9zdGFydHVwOworCVJlZ2lzdGVyU2htZW1DYWxsYmFja3MoJmluamVj dGlvbl9zaG1lbV9jYWxsYmFja3MpOwogfQotLSAKMi40Ny4zCgo= --------------cltwtZYaOf76t571xokamZd0--