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 1wY4BQ-0002pO-36 for pgsql-hackers@arkaria.postgresql.org; Fri, 12 Jun 2026 15:52:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wY4AQ-0010kT-2C for pgsql-hackers@arkaria.postgresql.org; Fri, 12 Jun 2026 15:51:34 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wY4AQ-0010k8-0R for pgsql-hackers@lists.postgresql.org; Fri, 12 Jun 2026 15:51:34 +0000 Received: from mail-oa1-x2c.google.com ([2001:4860:4864:20::2c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wY4AN-000000002co-0WHQ for pgsql-hackers@postgresql.org; Fri, 12 Jun 2026 15:51:33 +0000 Received: by mail-oa1-x2c.google.com with SMTP id 586e51a60fabf-43d100e8365so62056fac.2 for ; Fri, 12 Jun 2026 08:51:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1781279489; cv=none; d=google.com; s=arc-20240605; b=NHnYzx7cE1JOrNah8WCbG5To2vbsLc05qEfJTwGPrpMdazHhlU39IUlh1kM1G/QyBr L9LrhgNfWKJE4hqwgGrUqZ7HU1bFbI+mqwZCJK8jKgfRgoyJtuXz1H18ndnKym94dqTw LEqEhkn3mLxAo3EcAFySj8s9cInsFznGuMQN+Jv011Xpy8ppf/WyIKpz9jWr8tfpHfd3 hM0Mh4HmFcVzsy0x7tqBf1OQxFS6rvl6H9V+4Br3Ey/f2UwMggrB6MoMbDPvk6/lxFXQ 1KyjZ5EAdocDgSrnkjrjCIQTI+2KmHL8VuOycYa9jV0+6dqiGuqExnVm6uWZEck8sVbN IMtA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=yOUyn5FGioYq0swWzoL0Hv+NfWe7KxsEzD8gSLnq8h8=; fh=QOa59JlUU/Nf35jgc1wt4NOC0C6TNDqQdS3V5PW7qyY=; b=PoZw9OxUr7eNFsUEO7+snyUyreBPqdh1qdqN2HhdiTLN+Zi4p3Bc6n2orA3K9iUa2k YXZGmUVFEncA8l+o8LaIRGN9sGO6kVf7JMI3OQEO+/ojxzGsaCJB25AbLxv0yxemHJYR DWojRRb8CVerflpOA9LXXhzueosYGhjdEVAJbx0iZupTsrGctTdV0AvzSV2zayMOWHzZ UlxkT81emzFJveWF0CbXgcNlO5pswGHsrQ/+NgQ1lJtGoSPI3KmEeucmJfrYxToMEFi2 8w5jTPBuyrvQbAqX+fZe6BdCEmF1Gg8eMlRMsMzber8SNS33cXV/Smg64UNsPg32cuqx UUvQ==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781279489; x=1781884289; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=yOUyn5FGioYq0swWzoL0Hv+NfWe7KxsEzD8gSLnq8h8=; b=Mh7raxuY3SVFmNXNfHR6/NCew1h30+4QjPTi3dOq4DcOPAlNA/NyxKDvpgFkbXVKtJ g4CXxMiDBahuOmxVvC6nXOb27fjMnc8tmLWTYM9Kpv5T8Qz8LhFG5G3NG3j5wemhaJG2 ooI+1EANXVsUWxEcn+7/60+CGgdlNmO3lXF1oFD7Stv6mhxFFEHIrVcdbdKZWH9v+WQh g7jiFcgUh7734kBrOwe3p61HzaTxqLNZXucfWP2BSJUbFxeTg8pMJV5iDOdeQa6OIipi mKzcxfHgFIhdEoetUJ0zP/iHOE+xar1H0Lc8wuUMjPQ5vdFShaI7mWcq3klrHGIKK28L byMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781279489; x=1781884289; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=yOUyn5FGioYq0swWzoL0Hv+NfWe7KxsEzD8gSLnq8h8=; b=Bt/un5ufDzvSJ2yZqQdvxZ+G9F0qtCjKpdrVk7Gc0iPiRLoodmjfd8AdeX6h2HdRM/ yDIHE3d/F7oVhjxvX5IUblZ81wW2O+SNQpf8B+GoIo+iUo+m89mbzOlGxSaKPzRRUCBx hC3yrPtrw6adv9fFLpbpYYWWcPIdgARhtEgQADeKtnvRyUYFMqPu/DVLs8L97EqVNtbe dfxZqm78SKy8BDgsdkRrIIqbx/AvszKjyiYpHNiLHJvupc6oi78DSwRwUxqfEg/GCA/X iHJ4bUW7lM3js0U47mV7s/oCb6yYmYbB1fclGQJ8TP6MqLApr7xaxrNJEz0FAmIrWpzf pIuw== X-Forwarded-Encrypted: i=1; AFNElJ8wWdPfv+RAk/eUAkn6fDIh6McOewV+QB11rjWqc3CTRVQ24kG1D2qYj2nmJ+6jATKAPAitHd2NtnxkRA+2@postgresql.org X-Gm-Message-State: AOJu0Yw9R1aF5JJTvC1r+tYGmGqdtRLgGpDe86AzX7+ynQiDLQKiyH4+ yuFeD+cuiQusNlTPnIVmfiPniMWWat6FJEi4Kc2VpeXp0VqDTjqveryQADMDBl8ihQg0R2MlRhQ 6eZtx5eMFYm7HAkwlWEThCE1AFrCnoD0= X-Gm-Gg: Acq92OE4NI2A81C1TnCYgCmOtcTZFgtEW4++zwwyQuAYUPmYPBEMdwmJv6RDuPKVTrv 0OLw28ifJyCeD+SeiWKOhKZeMQroR8c3j8wbN9e8BtDj+JN3Ysu/2WBmXDkqkx+ZeCYPhlIZRIz p+z+k5YEuNLUJwL64NtIjYYGzhhWm9/iLyaU71UnyO/7kSCHL7/vSKutFH4Jyoh1PJDnfTY/MBT l+lvii7+8fHFbJ3gqWTefF2dQmu6Hz3bUk3h1+E+sbTLplP8tUU/kgv92E6h0KXNmB6R2gIRMGf D66T3LGnYq3h3AfqMmQ= X-Received: by 2002:a05:6808:11cb:b0:485:4c52:7065 with SMTP id 5614622812f47-4872f488d0amr1198320b6e.3.1781279488922; Fri, 12 Jun 2026 08:51:28 -0700 (PDT) MIME-Version: 1.0 References: <113724ab-0028-493f-9605-6e8570f0939f@iki.fi> <791c3f18-f4de-4d84-ac6b-c7ccc074dd38@iki.fi> <9d919bd9-94dd-4bda-8ccf-ebced4178c53@iki.fi> <470e7ebe-0971-49f6-8e46-9b8f6395f88b@iki.fi> <87y0iz2c1v.fsf@wibble.ilmari.org> <4297b4ee-5248-415f-ae12-abf2a23f4ab6@iki.fi> <555608f6-63bb-4dda-b1e4-f378f0febd38@iki.fi> In-Reply-To: <555608f6-63bb-4dda-b1e4-f378f0febd38@iki.fi> From: Haoyu Huang Date: Fri, 12 Jun 2026 08:51:16 -0700 X-Gm-Features: AVVi8CeEgdZA6CjfE7amgQ5BFJeac0Rb1VdZPbFQZ9FDCHJNOuF0tQqA0o90jRk Message-ID: Subject: Re: Better shared data structure management and resizable shared data structures To: Heikki Linnakangas Cc: Ashutosh Bapat , =?UTF-8?Q?Dagfinn_Ilmari_Manns=C3=A5ker?= , Robert Haas , Andres Freund , pgsql-hackers , chaturvedipalak1911@gmail.com Content-Type: multipart/mixed; boundary="0000000000002ef48006541073f3" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002ef48006541073f3 Content-Type: multipart/alternative; boundary="0000000000002ef47506541073f1" --0000000000002ef47506541073f1 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi all, Wanted to introduce myself on this thread and share some related work =E2= =80=94 with no intention of forking or redirecting what Ashutosh is driving here. It was great catching up with Ashutosh, David Wein, and Heikki at PGConf Vancouver. We had a working session on resizable shared buffers. It was productive and a lot of fun. The outcome of the session is to surface our work at Databricks on the same topic here. At Databricks, we have a patch merged in our internal Postgres that enables resizing shared_buffers without restart. It was inspired by Ashutosh's earlier patch on this topic. Heikki and David reviewed it on our side. I'd like to contribute the ideas (and, where useful, the code) back upstream. I want to be explicit that the current series is the path forward. I'd much rather plug into that than propose a competing patchset. Happy to help with review, testing, or specific pieces wherever it's most useful. Please read the patch as input to the existing effort, not a counter-proposal. Thanks for all the work on this so far. Here are the major changes we made on top of Ashutosh's earlier patch 1. Keep one mmap anonymous segment + madvise(MADV_POPULATE_WRITE / MADV_REMOVE) to allocate/free physical pages. 2. SB variable names changed to use lowNBuffers, highNBuffers, and maxNBuffers. See the README for more details. We think that this simplif= ies the code significantly. 3. Only the shrink needs to use proc signal barrier to coordinate with all other backends. The other cases are covered by a new AccessNBuffersLock. The coordinator acquires exclusive lock on AccessNBuffersLock when it publishes new buffers. Other backends acquire the shared lock on AccessNBuffersLock when they loop through the buffer array based on the NBuffers value. 4. The API to resize the shared buffer is `SELECT pg_resize_shared_buffers('new_size')`. Thanks, Haoyu On Fri, Jun 12, 2026 at 8:37=E2=80=AFAM Heikki Linnakangas wrote: > On 21/04/2026 19:05, Ashutosh Bapat wrote: > > On Tue, Apr 21, 2026 at 1:10=E2=80=AFPM Heikki Linnakangas > wrote: > >> > >> On 07/04/2026 17:19, Ashutosh Bapat wrote: > >>> Hi Heikki, > >>> CallShmemCallbacksAfterStartup() holds ShmemIndexLock while invoking > >>> init_fn/attach_fn callbacks. That looks wrong. Before this commit, > >>> init or attach code was not run with the lock held. Any reason the > >>> lock is held while calling init and attach callbacks. Since these > >>> function can come from extensions, we don't have control on what goes > >>> in those functions, and thus looks problematic. Further, it will > >>> serialize all the attach_fn executions across backends, since each > >>> will be run under the lock. > >> > >> This was intentional, I added a note in the docs about it: > >> > >> When RegisterShmemCallbacks() is called > after > >> startup, it will immediately call the appropriate callbacks, > >> depending > >> on whether the requested memory areas were already initialized > by > >> another backend. The callbacks will be called while holding an > >> internal > >> lock, which prevents concurrent two backends from initializing > the > >> memory area concurrently. > >> > >> That "internal lock" is ShmemIndexLock. I piggybacked on that since th= e > >> code needs to acquire it anyway for the hash table lookups. > > > > I had read this part, but didn't realize it's ShmemIndexLock. The > > document and the code are placed far apart and the comments in the > > code do not help connecting these two. The comment before > > LWLockAcquire() call doesn't say anything about init functions. > > /* Hold ShmemIndexLock while we allocate all the shmem entries */ > > > >> With the old ShmemInitStruct() interface, extensions needed to do the > >> locking themselves, usually by holding AddinShmemInitLock. > >> > >> (Now that I read that again, the grammar on the last sentence sounds > >> awkward...) > > > > Given that the init_fn is called in only one backend which requests > > the structures first, do we need a lock? > > If two backends request the same structure concurrently, which one is > "first"? That's what the lock determines. > > It's not safe to release the lock before the init callback has finished. > Otherwise, another backend might attach to the struct before it's fully > initialized and read uninitialized values. > > >>> In my case, the init_fn was performing ShmemIndex lookup which > >>> deadlocked. It's questionable whether init function should lookup > >>> ShmemIndex but, it's not something that needs to be prohibited > >>> either. > >> Yeah I'm curious what the use case is. We could easily introduce anoth= er > >> lock or reuse AddinShmemInitLock for this. > > > > In case of resizable shared memory structures, I was adding mprotect > > to make sure that the part of the shared address space which is > > reserved but not used is protected from inadvertent access. The > > mprotect is wrapped in a shmem API which fetches the ShmemIndex entry > > of the shared structure, figures out the part of the address space to > > protect using maximum_size and current size and calls mprotect > > appropriately. To fetch the ShmemIndex entry it acquires a ShmemIndex > > lock. The shmem API was supposed to be called from init_fn() and > > attach_fn() to protect the address spaces as soon as the structure is > > attached to. See patches attached to [1] for code. > > > > [1] > https://www.postgresql.org/message-id/CAExHW5v5muT_SKV2NCxxVmvC=3D_38Rw0a= iv-wU4CGzHaBCRYzqA@mail.gmail.com > > Ok. So if I understand correctly, holding ShmemIndexLock is not a actual > problem per se, you just didn't expect it. Right? > > I propose the attached to improve the wording a little on the docs, > comments, and error message. > > - Heikki > --0000000000002ef47506541073f1 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi all,

Wanted to introduce myself on this thread and share some= related work =E2=80=94 with no intention of forking or redirecting what As= hutosh is driving here.

It was great catching up with Ashutosh, Davi= d Wein, and Heikki at PGConf Vancouver. We had a working session on resizab= le shared buffers. It was productive and a lot of fun. The outcome of the s= ession is to surface our work at Databricks on the same topic here.

= At Databricks, we have a patch merged in our internal Postgres that enables= resizing shared_buffers without restart. It was inspired by Ashutosh's= earlier patch on this topic. Heikki and David reviewed it on our side. I&#= 39;d like to contribute the ideas=C2=A0 (and, where useful, the code) back = upstream. I want to be explicit that the current series is the path forward= . I'd much rather plug into that than propose a competing patchset. Hap= py to help with review, testing, or specific pieces wherever it's most = useful.

Please read the patch as input to the existing effort, not a= counter-proposal. Thanks for all the work on this so far.

Here are = the major changes we made on top of Ashutosh's earlier patch
  1. Keep one mmap anonymous segment + madvise(MADV_POPULATE_WRITE / MA= DV_REMOVE) to allocate/free physical pages.
  2. SB variable names changed to use lowNBuff= ers, highNBuffers, and maxNBuffers. See the README for more details. We thi= nk that this simplifies the code significantly.
  3. Only the shrink needs to use proc signal barrier to coordinate with all other backends. T= he other cases are covered by a new AccessNBuffersLock.=C2=A0 The coordinat= or acquires exclusive lock on AccessNBuffersLock when it publishes new buff= ers. Other backends acquire the shared lock on AccessNBuffersLock when they= loop through the buffer array based on the NBuffers value.
  4. The API to resize the s= hared buffer is `SELECT pg_resize_shared_buffers('new_size')`.
  5. =


Thanks,
Haoyu


On Fri, Jun 12, 2026 at 8:= 37=E2=80=AFAM Heikki Linnakangas <hli= nnaka@iki.fi> wrote:
On 21/04/2026 19:05, Ashutosh Bapat wrote:
> On Tue, Apr 21, 2026 at 1:10=E2=80=AFPM Heikki Linnakangas <hlinnaka@iki.fi> wrote= :
>>
>> On 07/04/2026 17:19, Ashutosh Bapat wrote:
>>> Hi Heikki,
>>> CallShmemCallbacksAfterStartup() holds ShmemIndexLock while in= voking
>>> init_fn/attach_fn callbacks. That looks wrong. Before this com= mit,
>>> init or attach code was not run with the lock held. Any reason= the
>>> lock is held while calling init and attach callbacks. Since th= ese
>>> function can come from extensions, we don't have control o= n what goes
>>> in those functions, and thus looks problematic. Further, it wi= ll
>>> serialize all the attach_fn executions across backends, since = each
>>> will be run under the lock.
>>
>> This was intentional, I added a note in the docs about it:
>>
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0When <function>RegisterShme= mCallbacks()</function> is called after
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0startup, it will immediately call= the appropriate callbacks,
>> depending
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0on whether the requested memory a= reas were already initialized by
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0another backend. The callbacks wi= ll be called while holding an
>> internal
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0lock, which prevents concurrent t= wo backends from initializing the
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0memory area concurrently.
>>
>> That "internal lock" is ShmemIndexLock. I piggybacked on= that since the
>> code needs to acquire it anyway for the hash table lookups.
>
> I had read this part, but didn't realize it's ShmemIndexLock. = The
> document and the code are placed far apart and the comments in the
> code do not help connecting these two. The comment before
> LWLockAcquire() call doesn't say anything about init functions. > /* Hold ShmemIndexLock while we allocate all the shmem entries */
>
>> With the old ShmemInitStruct() interface, extensions needed to do = the
>> locking themselves, usually by holding AddinShmemInitLock.
>>
>> (Now that I read that again, the grammar on the last sentence soun= ds
>> awkward...)
>
> Given that the init_fn is called in only one backend which requests > the structures first, do we need a lock?

If two backends request the same structure concurrently, which one is
"first"? That's what the lock determines.

It's not safe to release the lock before the init callback has finished= .
Otherwise, another backend might attach to the struct before it's fully=
initialized and read uninitialized values.

>>> In my case, the init_fn was performing ShmemIndex lookup which=
>>> deadlocked. It's questionable whether init function should= lookup
>>> ShmemIndex but, it's not something that needs to be prohib= ited
>>> either.
>> Yeah I'm curious what the use case is. We could easily introdu= ce another
>> lock or reuse AddinShmemInitLock for this.
>
> In case of resizable shared memory structures, I was adding mprotect > to make sure that the part of the shared address space which is
> reserved but not used is protected from inadvertent access. The
> mprotect is wrapped in a shmem API which fetches the ShmemIndex entry<= br> > of the shared structure, figures out the part of the address space to<= br> > protect using maximum_size and current size and calls mprotect
> appropriately. To fetch the ShmemIndex entry it acquires a ShmemIndex<= br> > lock. The shmem API was supposed to be called from init_fn() and
> attach_fn() to protect the address spaces as soon as the structure is<= br> > attached to. See patches attached to [1] for code.
>
> [1] https://www.postgresql.org/message-id/CAExHW5v5muT_SKV2NCxxV= mvC=3D_38Rw0aiv-wU4CGzHaBCRYzqA@mail.gmail.com

Ok. So if I understand correctly, holding ShmemIndexLock is not a actual problem per se, you just didn't expect it. Right?

I propose the attached to improve the wording a little on the docs,
comments, and error message.

- Heikki
--0000000000002ef47506541073f1-- --0000000000002ef48006541073f3 Content-Type: application/octet-stream; name="0001-Online-resize-of-the-shared-buffer-pool.patch" Content-Disposition: attachment; filename="0001-Online-resize-of-the-shared-buffer-pool.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqb3n1sg0 RnJvbSA1ZjQzOWY2MDQ3ZGY4YWU5YTk0YjI3YjVhOTRjNzM2OTllYTE1Y2ZiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIYW95dSBIdWFuZyA8aGFveXUuaHVhbmdAZGF0YWJyaWNrcy5j b20+CkRhdGU6IFdlZCwgMjAgTWF5IDIwMjYgMjE6Mzc6NTUgKzAwMDAKU3ViamVjdDogW1BBVENI XSBPbmxpbmUgcmVzaXplIG9mIHRoZSBzaGFyZWQgYnVmZmVyIHBvb2wKClRoaXMgcGF0Y2ggYWRk cyBwZ19yZXNpemVfc2hhcmVkX2J1ZmZlcnMoKSwgYSBTUUwtY2FsbGFibGUgY29vcmRpbmF0b3IK dGhhdCByZXNpemVzIHRoZSBzaGFyZWQgYnVmZmVyIHBvb2wgd2hpbGUgdGhlIHNlcnZlciBpcyBy dW5uaW5nLiBUaGUKd29yayBpcyBjb21wb3NlZCBvZiB0d28gaGFsdmVzOgoKMS4gQnVmZmVyLW1h bmFnZXIgaW5mcmFzdHJ1Y3R1cmU6IGEgdHdvLXdhdGVyLW1hcmsgc2NoZW1lCiAgIChsb3dOQnVm ZmVycy9oaWdoTkJ1ZmZlcnMpIHByb3RlY3RlZCBieSBBY2Nlc3NOQnVmZmVyc0xvY2ssIGEgbmV3 CiAgIFBST0NTSUdOQUxfQkFSUklFUl9TSEJVRl9SRVNJWkUgYmFycmllciwgdGhlIEJFR0lOL0VO RF9OQlVGRkVSU19BQ0NFU1MKICAgbWFjcm9zIGZvciBzYWZlIGl0ZXJhdGlvbiBvdmVyIHRoZSBi dWZmZXIgYXJyYXksIGFuZCB0aHJlZSBuZXcKICAgcHJpbWl0aXZlcyAtLSBCdWZmZXJNYW5hZ2Vy U2htZW1TaHJpbmsvRXhwYW5kL0luaXRCdWZmZXJzIC0tIHRoYXQKICAgZWl0aGVyIG1hZHZpc2Uo TUFEVl9SRU1PVkUpIG1lbW9yeSBhd2F5IG9yIG1hZHZpc2UoTUFEVl9QT1BVTEFURV9XUklURSkK ICAgaXQgYmFjayBpbi4gVGhlc2UgY2hhbmdlcyBsaXZlIGFjcm9zcyBidWZfaW5pdC5jLCBidWZt Z3IuYywgZnJlZWxpc3QuYwogICBhbmQgdGhlaXIgaGVhZGVycy4KCjIuIFRoZSBjb29yZGluYXRv ciAoYnVmX3Jlc2l6ZS5jKSBpbXBsZW1lbnRzIHRoZSBTUUwtY2FsbGFibGUgZnVuY3Rpb24KICAg cGdfcmVzaXplX3NoYXJlZF9idWZmZXJzKHRleHQpIHJldHVybmluZyBhIChrZXksIHZhbHVlLCB1 bml0KSByZWNvcmQKICAgc2V0IG9mIHRpbWluZy9ieXRlIG1ldHJpY3MuIFNocmluayBsb3dlcnMg bG93TkJ1ZmZlcnMsIHJ1bnMgdGhlCiAgIFBST0NTSUdOQUwgYmFycmllciwgZXZpY3RzIHRoZSBk b29tZWQgcmFuZ2UsIHRoZW4gZnJlZXMgbWVtb3J5IGFuZAogICBhZHZhbmNlcyBoaWdoTkJ1ZmZl cnMuIEV4cGFuZCBhbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIG5ldwogICBkZXNjcmlwdG9ycyBi ZWZvcmUgYXRvbWljYWxseSBhZHZhbmNpbmcgYm90aCB3YXRlciBtYXJrcyB1bmRlcgogICBBY2Nl c3NOQnVmZmVyc0xvY2suCgpUd28gbmV3IEdVQ3MgKGRlZmluZWQgaW4gZ3VjX3BhcmFtZXRlcnMu ZGF0KToKCiogbWF4X3NoYXJlZF9idWZmZXJzIChQR0NfUE9TVE1BU1RFUik6IHVwcGVyIGJvdW5k IG9uIGhpZ2hOQnVmZmVycywKICBzaXplZCBvbmNlIGF0IHN0YXJ0dXAuIE5CdWZmZXJzR1VDIGJh Y2tzIHRoZSBleGlzdGluZwogIHNoYXJlZF9idWZmZXJzIEdVQyBhbmQgY2FwdHVyZXMgdGhlIHN0 YXJ0aW5nIHBvb2wgc2l6ZS4KKiBlbmFibGVfZHluYW1pY19zaGFyZWRfYnVmZmVycyAoUEdDX1BP U1RNQVNURVIpOiBvZmYgYnkgZGVmYXVsdDsgd2hlbgogIG9mZiwgYWxsIG9mIHRoZSBuZXcgY29k ZSBwYXRocyBhcmUgbm8tb3BzIGFuZCB0aGUgc2VydmVyIGJlaGF2ZXMgYXMKICBiZWZvcmUuCgpQ YXRjaCByZWJhc2VkIG9udG8gdXBzdHJlYW0gbWFzdGVyIGZyb20gdGhlIHYxOC1iYXNlZCBkZXZl bG9wbWVudApicmFuY2guCgotLS0KIGNvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2Fj aGVfcGFnZXMuYyB8IDE1OCArKystLQogY29udHJpYi9wZ19wcmV3YXJtL2F1dG9wcmV3YXJtLmMg ICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAg ICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jICAg ICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYyAg ICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1LmMgICAg ICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyAgICAg ICAgICAgICB8ICAxMSArLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9jaGVja3BvaW50ZXIuYyAg ICAgICAgIHwgIDg0ICsrLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvX2luaXQuYyAgICAg ICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9NYWtlZmlsZSAgICAg ICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYyAgICAg ICAgIHwgNDU3ICsrKysrKysrKysrKystLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVm X3Jlc2l6ZS5jICAgICAgIHwgNTQ0ICsrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMgICAgICAgICAgIHwgMjEwICsrKysrKy0KIC4uLi9zdG9yYWdl L2J1ZmZlci9keW5hbWljX3NoYXJlZF9idWZmZXJzLmMgICB8IDEyNSArKysrCiBzcmMvYmFja2Vu ZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jICAgICAgICAgfCAgNzEgKystCiBzcmMvYmFja2Vu ZC9zdG9yYWdlL2J1ZmZlci9tZXNvbi5idWlsZCAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jICAgICAgICAgIHwgIDE3ICsKIC4uLi91dGlscy9hY3Rp dml0eS93YWl0X2V2ZW50X25hbWVzLnR4dCAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC91dGls cy9pbml0L2dsb2JhbHMuYyAgICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL3V0aWxz L21pc2MvZ3VjLmMgICAgICAgICAgICAgICAgICB8ICAgOCArCiBzcmMvYmFja2VuZC91dGlscy9t aXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCAgICAgfCAgMjAgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5kYXQgICAgICAgICAgICAgICB8ICAgOSArCiBzcmMvaW5jbHVkZS9taXNjYWRtaW4u aCAgICAgICAgICAgICAgICAgICAgICAgfCAgMTggKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVm X2ludGVybmFscy5oICAgICAgICAgICB8ICAgNSArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZt Z3IuaCAgICAgICAgICAgICAgICAgIHwgIDEzICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2R5bmFt aWNfc2hhcmVkX2J1ZmZlcnMuaCAgfCAxMDMgKysrKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9pcGMu aCAgICAgICAgICAgICAgICAgICAgIHwgIDQxICsrCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9j a2xpc3QuaCAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2ln bmFsLmggICAgICAgICAgICAgIHwgICAyICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lz dmlld3Mub3V0ICAgICAgICB8ICAgMiArLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3lzdmlld3Mu c3FsICAgICAgICAgICAgIHwgICAyICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dCAgICAgICAgICAgICAgfCAgIDEgKwogMzIgZmlsZXMgY2hhbmdlZCwgMTc2MyBpbnNlcnRpb25z KCspLCAxNjQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmX3Jlc2l6ZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQv c3RvcmFnZS9idWZmZXIvZHluYW1pY19zaGFyZWRfYnVmZmVycy5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL2luY2x1ZGUvc3RvcmFnZS9keW5hbWljX3NoYXJlZF9idWZmZXJzLmgKCmRpZmYgLS1n aXQgYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMgYi9jb250 cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMKaW5kZXggYmYyZTZjOTcy MjAuLjkwNWYxNGUwYTA0IDEwMDY0NAotLS0gYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1 ZmZlcmNhY2hlX3BhZ2VzLmMKKysrIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJj YWNoZV9wYWdlcy5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSAicG9ydC9wZ19udW1hLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9idWZfaW50ZXJuYWxzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9i dWZtZ3IuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5o IgogI2luY2x1ZGUgInV0aWxzL3R1cGxlc3RvcmUuaCIKIApAQCAtODgsMTYgKzg5LDg0IEBAIHBn X2J1ZmZlcmNhY2hlX3BhZ2VzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJVHVwbGVEZXNjCWV4cGVjdGVk X3R1cGxlZGVzYzsKIAlpbnQJCQlpOwogCi0JLyoKLQkgKiBUbyBzbW9vdGhseSBzdXBwb3J0IHVw Z3JhZGVzIGZyb20gdmVyc2lvbiAxLjAgb2YgdGhpcyBleHRlbnNpb24KLQkgKiB0cmFuc3BhcmVu dGx5IGhhbmRsZSB0aGUgKG5vbi0pZXhpc3RlbmNlIG9mIHRoZSBwaW5uaW5nX2JhY2tlbmRzCi0J ICogY29sdW1uLiBXZSB1bmZvcnR1bmF0ZWx5IGhhdmUgdG8gZ2V0IHRoZSByZXN1bHQgdHlwZSBm b3IgdGhhdC4uLiAtIHdlCi0JICogY2FuJ3QgdXNlIHRoZSByZXN1bHQgdHlwZSBkZXRlcm1pbmVk IGJ5IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIHdpdGhvdXQKLQkgKiBwb3RlbnRpYWxseSBjcmFz aGluZyB3aGVuIHNvbWVib2R5IHVzZXMgdGhlIG9sZCAob3IgZXZlbiB3cm9uZykKLQkgKiBmdW5j dGlvbiBkZWZpbml0aW9uIHRob3VnaC4KLQkgKi8KLQlpZiAoZ2V0X2NhbGxfcmVzdWx0X3R5cGUo ZmNpbmZvLCBOVUxMLCAmZXhwZWN0ZWRfdHVwbGVkZXNjKSAhPSBUWVBFRlVOQ19DT01QT1NJVEUp Ci0JCWVsb2coRVJST1IsICJyZXR1cm4gdHlwZSBtdXN0IGJlIGEgcm93IHR5cGUiKTsKKwlpZiAo U1JGX0lTX0ZJUlNUQ0FMTCgpKQorCXsKKwkJaW50CQkJaTsKKwkJQkVHSU5fTkJVRkZFUlNfQUND RVNTKGxvY2FsTkJ1ZmZlcnMpOworCisJCWZ1bmNjdHggPSBTUkZfRklSU1RDQUxMX0lOSVQoKTsK KworCQkvKiBTd2l0Y2ggY29udGV4dCB3aGVuIGFsbG9jYXRpbmcgc3R1ZmYgdG8gYmUgdXNlZCBp biBsYXRlciBjYWxscyAqLworCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGZ1 bmNjdHgtPm11bHRpX2NhbGxfbWVtb3J5X2N0eCk7CisKKwkJLyogQ3JlYXRlIGEgdXNlciBmdW5j dGlvbiBjb250ZXh0IGZvciBjcm9zcy1jYWxsIHBlcnNpc3RlbmNlICovCisJCWZjdHggPSAoQnVm ZmVyQ2FjaGVQYWdlc0NvbnRleHQgKikgcGFsbG9jKHNpemVvZihCdWZmZXJDYWNoZVBhZ2VzQ29u dGV4dCkpOworCisJCS8qCisJCSAqIFRvIHNtb290aGx5IHN1cHBvcnQgdXBncmFkZXMgZnJvbSB2 ZXJzaW9uIDEuMCBvZiB0aGlzIGV4dGVuc2lvbgorCQkgKiB0cmFuc3BhcmVudGx5IGhhbmRsZSB0 aGUgKG5vbi0pZXhpc3RlbmNlIG9mIHRoZSBwaW5uaW5nX2JhY2tlbmRzCisJCSAqIGNvbHVtbi4g V2UgdW5mb3J0dW5hdGVseSBoYXZlIHRvIGdldCB0aGUgcmVzdWx0IHR5cGUgZm9yIHRoYXQuLi4g LQorCQkgKiB3ZSBjYW4ndCB1c2UgdGhlIHJlc3VsdCB0eXBlIGRldGVybWluZWQgYnkgdGhlIGZ1 bmN0aW9uIGRlZmluaXRpb24KKwkJICogd2l0aG91dCBwb3RlbnRpYWxseSBjcmFzaGluZyB3aGVu IHNvbWVib2R5IHVzZXMgdGhlIG9sZCAob3IgZXZlbgorCQkgKiB3cm9uZykgZnVuY3Rpb24gZGVm aW5pdGlvbiB0aG91Z2guCisJCSAqLworCQlpZiAoZ2V0X2NhbGxfcmVzdWx0X3R5cGUoZmNpbmZv LCBOVUxMLCAmZXhwZWN0ZWRfdHVwbGVkZXNjKSAhPSBUWVBFRlVOQ19DT01QT1NJVEUpCisJCQll bG9nKEVSUk9SLCAicmV0dXJuIHR5cGUgbXVzdCBiZSBhIHJvdyB0eXBlIik7CisKKwkJaWYgKGV4 cGVjdGVkX3R1cGxlZGVzYy0+bmF0dHMgPCBOVU1fQlVGRkVSQ0FDSEVfUEFHRVNfTUlOX0VMRU0g fHwKKwkJCWV4cGVjdGVkX3R1cGxlZGVzYy0+bmF0dHMgPiBOVU1fQlVGRkVSQ0FDSEVfUEFHRVNf RUxFTSkKKwkJCWVsb2coRVJST1IsICJpbmNvcnJlY3QgbnVtYmVyIG9mIG91dHB1dCBhcmd1bWVu dHMiKTsKKworCQkvKiBDb25zdHJ1Y3QgYSB0dXBsZSBkZXNjcmlwdG9yIGZvciB0aGUgcmVzdWx0 IHJvd3MuICovCisJCXR1cGxlZGVzYyA9IENyZWF0ZVRlbXBsYXRlVHVwbGVEZXNjKGV4cGVjdGVk X3R1cGxlZGVzYy0+bmF0dHMpOworCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0 ck51bWJlcikgMSwgImJ1ZmZlcmlkIiwKKwkJCQkJCSAgIElOVDRPSUQsIC0xLCAwKTsKKwkJVHVw bGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDIsICJyZWxmaWxlbm9kZSIs CisJCQkJCQkgICBPSURPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVz YywgKEF0dHJOdW1iZXIpIDMsICJyZWx0YWJsZXNwYWNlIiwKKwkJCQkJCSAgIE9JRE9JRCwgLTEs IDApOworCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgNCwgInJl bGRhdGFiYXNlIiwKKwkJCQkJCSAgIE9JRE9JRCwgLTEsIDApOworCQlUdXBsZURlc2NJbml0RW50 cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgNSwgInJlbGZvcmtudW1iZXIiLAorCQkJCQkJICAg SU5UMk9JRCwgLTEsIDApOworCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51 bWJlcikgNiwgInJlbGJsb2NrbnVtYmVyIiwKKwkJCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsKKwkJ VHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDcsICJpc2RpcnR5IiwK KwkJCQkJCSAgIEJPT0xPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVz YywgKEF0dHJOdW1iZXIpIDgsICJ1c2FnZV9jb3VudCIsCisJCQkJCQkgICBJTlQyT0lELCAtMSwg MCk7CisKKwkJaWYgKGV4cGVjdGVkX3R1cGxlZGVzYy0+bmF0dHMgPT0gTlVNX0JVRkZFUkNBQ0hF X1BBR0VTX0VMRU0pCisJCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJl cikgOSwgInBpbm5pbmdfYmFja2VuZHMiLAorCQkJCQkJCSAgIElOVDRPSUQsIC0xLCAwKTsKKwor CQlmY3R4LT50dXBkZXNjID0gQmxlc3NUdXBsZURlc2ModHVwbGVkZXNjKTsKKworCisJCS8qIEFs bG9jYXRlIE5CdWZmZXJzIHdvcnRoIG9mIEJ1ZmZlckNhY2hlUGFnZXNSZWMgcmVjb3Jkcy4gKi8K KwkJZmN0eC0+cmVjb3JkID0gKEJ1ZmZlckNhY2hlUGFnZXNSZWMgKikKKwkJCU1lbW9yeUNvbnRl eHRBbGxvY0h1Z2UoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAgIHNpemVvZihCdWZm ZXJDYWNoZVBhZ2VzUmVjKSAqIGxvY2FsTkJ1ZmZlcnMpOworCisJCS8qIFNldCBtYXggY2FsbHMg YW5kIHJlbWVtYmVyIHRoZSB1c2VyIGZ1bmN0aW9uIGNvbnRleHQuICovCisJCWZ1bmNjdHgtPm1h eF9jYWxscyA9IGxvY2FsTkJ1ZmZlcnM7CisJCWZ1bmNjdHgtPnVzZXJfZmN0eCA9IGZjdHg7CisK KwkJLyogUmV0dXJuIHRvIG9yaWdpbmFsIGNvbnRleHQgd2hlbiBhbGxvY2F0aW5nIHRyYW5zaWVu dCBtZW1vcnkgKi8KKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJCS8q CisJCSAqIFNjYW4gdGhyb3VnaCBhbGwgdGhlIGJ1ZmZlcnMsIHNhdmluZyB0aGUgcmVsZXZhbnQg ZmllbGRzIGluIHRoZQorCQkgKiBmY3R4LT5yZWNvcmQgc3RydWN0dXJlLgorCQkgKgorCQkgKiBX ZSBkb24ndCBob2xkIHRoZSBwYXJ0aXRpb24gbG9ja3MsIHNvIHdlIGRvbid0IGdldCBhIGNvbnNp c3RlbnQKKwkJICogc25hcHNob3QgYWNyb3NzIGFsbCBidWZmZXJzLCBidXQgd2UgZG8gZ3JhYiB0 aGUgYnVmZmVyIGhlYWRlcgorCQkgKiBsb2Nrcywgc28gdGhlIGluZm9ybWF0aW9uIG9mIGVhY2gg YnVmZmVyIGlzIHNlbGYtY29uc2lzdGVudC4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBsb2Nh bE5CdWZmZXJzOyBpKyspCisJCXsKKwkJCUJ1ZmZlckRlc2MgKmJ1ZkhkcjsKKwkJCXVpbnQzMgkJ YnVmX3N0YXRlOwogCiAJaWYgKGV4cGVjdGVkX3R1cGxlZGVzYy0+bmF0dHMgPCBOVU1fQlVGRkVS Q0FDSEVfUEFHRVNfTUlOX0VMRU0gfHwKIAkJZXhwZWN0ZWRfdHVwbGVkZXNjLT5uYXR0cyA+IE5V TV9CVUZGRVJDQUNIRV9QQUdFU19FTEVNKQpAQCAtMTMyLDE4ICsyMDEsMTAgQEAgcGdfYnVmZmVy Y2FjaGVfcGFnZXMoUEdfRlVOQ1RJT05fQVJHUykKIAogCQlDSEVDS19GT1JfSU5URVJSVVBUUygp OwogCi0JCWJ1ZkhkciA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoaSk7Ci0JCS8qIExvY2sgZWFjaCBi dWZmZXIgaGVhZGVyIGJlZm9yZSBpbnNwZWN0aW5nLiAqLwotCQlidWZfc3RhdGUgPSBMb2NrQnVm SGRyKGJ1Zkhkcik7Ci0KLQkJYnVmZmVyaWQgPSBCdWZmZXJEZXNjcmlwdG9yR2V0QnVmZmVyKGJ1 Zkhkcik7Ci0JCXJlbGZpbGVudW1iZXIgPSBCdWZUYWdHZXRSZWxOdW1iZXIoJmJ1Zkhkci0+dGFn KTsKLQkJcmVsdGFibGVzcGFjZSA9IGJ1Zkhkci0+dGFnLnNwY09pZDsKLQkJcmVsZGF0YWJhc2Ug PSBidWZIZHItPnRhZy5kYk9pZDsKLQkJZm9ya251bSA9IEJ1ZlRhZ0dldEZvcmtOdW0oJmJ1Zkhk ci0+dGFnKTsKLQkJYmxvY2tudW0gPSBidWZIZHItPnRhZy5ibG9ja051bTsKLQkJdXNhZ2Vjb3Vu dCA9IEJVRl9TVEFURV9HRVRfVVNBR0VDT1VOVChidWZfc3RhdGUpOwotCQlwaW5uaW5nX2JhY2tl bmRzID0gQlVGX1NUQVRFX0dFVF9SRUZDT1VOVChidWZfc3RhdGUpOworCQkJVW5sb2NrQnVmSGRy KGJ1ZkhkciwgYnVmX3N0YXRlKTsKKwkJfQorCQlFTkRfTkJVRkZFUlNfQUNDRVNTKGxvY2FsTkJ1 ZmZlcnMpOworCX0KIAogCQlpZiAoYnVmX3N0YXRlICYgQk1fRElSVFkpCiAJCQlpc2RpcnR5ID0g dHJ1ZTsKQEAgLTI0OCw2ICszMDksNyBAQCBwZ19idWZmZXJjYWNoZV9vc19wYWdlc19pbnRlcm5h bChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgYm9vbCBpbmNsdWRlX251bWEpCiAJCWludAkJCW1h eF9lbnRyaWVzOwogCQljaGFyCSAgICpzdGFydHB0ciwKIAkJCQkgICAqZW5kcHRyOworCQlCRUdJ Tl9OQlVGRkVSU19BQ0NFU1MobG9jYWxOQnVmZmVycyk7CiAKIAkJLyogSWYgTlVNQSBpbmZvcm1h dGlvbiBpcyByZXF1ZXN0ZWQsIGluaXRpYWxpemUgTlVNQSBzdXBwb3J0LiAqLwogCQlpZiAoaW5j bHVkZV9udW1hICYmIHBnX251bWFfaW5pdCgpID09IC0xKQpAQCAtMjc4LDcgKzM0MCwyNCBAQCBw Z19idWZmZXJjYWNoZV9vc19wYWdlc19pbnRlcm5hbChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywg Ym9vbCBpbmNsdWRlX251bWEpCiAJCSAqLwogCQlBc3NlcnQoKG9zX3BhZ2Vfc2l6ZSAlIEJMQ0tT WiA9PSAwKSB8fCAoQkxDS1NaICUgb3NfcGFnZV9zaXplID09IDApKTsKIAotCQlpZiAoaW5jbHVk ZV9udW1hKQorCQkvKgorCQkgKiBIb3cgbWFueSBhZGRyZXNzZXMgd2UgYXJlIGdvaW5nIHRvIHF1 ZXJ5PyBTaW1wbHkgZ2V0IHRoZSBwYWdlIGZvcgorCQkgKiB0aGUgZmlyc3QgYnVmZmVyLCBhbmQg Zmlyc3QgcGFnZSBhZnRlciB0aGUgbGFzdCBidWZmZXIsIGFuZCBjb3VudAorCQkgKiB0aGUgcGFn ZXMgZnJvbSB0aGF0LgorCQkgKi8KKwkJc3RhcnRwdHIgPSAoY2hhciAqKSBUWVBFQUxJR05fRE9X Tihvc19wYWdlX3NpemUsCisJCQkJCQkJCQkJICAgQnVmZmVyR2V0QmxvY2soMSkpOworCQllbmRw dHIgPSAoY2hhciAqKSBUWVBFQUxJR04ob3NfcGFnZV9zaXplLAorCQkJCQkJCQkJKGNoYXIgKikg QnVmZmVyR2V0QmxvY2sobG9jYWxOQnVmZmVycykgKyBCTENLU1opOworCQlvc19wYWdlX2NvdW50 ID0gKGVuZHB0ciAtIHN0YXJ0cHRyKSAvIG9zX3BhZ2Vfc2l6ZTsKKworCQkvKiBVc2VkIHRvIGRl dGVybWluZSB0aGUgTlVNQSBub2RlIGZvciBhbGwgT1MgcGFnZXMgYXQgb25jZSAqLworCQlvc19w YWdlX3B0cnMgPSBwYWxsb2MwKHNpemVvZih2b2lkICopICogb3NfcGFnZV9jb3VudCk7CisJCW9z X3BhZ2Vfc3RhdHVzID0gcGFsbG9jKHNpemVvZihpbnQpICogb3NfcGFnZV9jb3VudCk7CisKKwkJ LyogRmlsbCBwb2ludGVycyBmb3IgYWxsIHRoZSBtZW1vcnkgcGFnZXMuICovCisJCWlkeCA9IDA7 CisJCWZvciAoY2hhciAqcHRyID0gc3RhcnRwdHI7IHB0ciA8IGVuZHB0cjsgcHRyICs9IG9zX3Bh Z2Vfc2l6ZSkKIAkJewogCQkJdm9pZAkgICoqb3NfcGFnZV9wdHJzID0gTlVMTDsKIApAQCAtMzE1 LDggKzM5NCw4IEBAIHBnX2J1ZmZlcmNhY2hlX29zX3BhZ2VzX2ludGVybmFsKEZ1bmN0aW9uQ2Fs bEluZm8gZmNpbmZvLCBib29sIGluY2x1ZGVfbnVtYSkKIAogCQkJQXNzZXJ0KGlkeCA9PSBvc19w YWdlX2NvdW50KTsKIAotCQkJZWxvZyhERUJVRzEsICJOVU1BOiBOQnVmZmVycz0lZCBvc19wYWdl X2NvdW50PSIgVUlOVDY0X0ZPUk1BVCAiICIKLQkJCQkgIm9zX3BhZ2Vfc2l6ZT0lenUiLCBOQnVm ZmVycywgb3NfcGFnZV9jb3VudCwgb3NfcGFnZV9zaXplKTsKKwkJZWxvZyhERUJVRzEsICJOVU1B OiBOQnVmZmVycz0lZCBvc19wYWdlX2NvdW50PSIgVUlOVDY0X0ZPUk1BVCAiICIKKwkJCSAib3Nf cGFnZV9zaXplPSV6dSIsIGxvY2FsTkJ1ZmZlcnMsIG9zX3BhZ2VfY291bnQsIG9zX3BhZ2Vfc2l6 ZSk7CiAKIAkJCS8qCiAJCQkgKiBJZiB3ZSBldmVyIGdldCAweGZmIGJhY2sgZnJvbSBrZXJuZWwg aW5xdWlyeSwgdGhlbiB3ZSBwcm9iYWJseQpAQCAtMzY2LDcgKzQ0NSw3IEBAIHBnX2J1ZmZlcmNh Y2hlX29zX3BhZ2VzX2ludGVybmFsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBib29sIGluY2x1 ZGVfbnVtYSkKIAkJICogd2l0aG91dCByZWFsbG9jYXRpbmcgbWVtb3J5LgogCQkgKi8KIAkJcGFn ZXNfcGVyX2J1ZmZlciA9IE1heCgxLCBCTENLU1ogLyBvc19wYWdlX3NpemUpICsgMTsKLQkJbWF4 X2VudHJpZXMgPSBOQnVmZmVycyAqIHBhZ2VzX3Blcl9idWZmZXI7CisJCW1heF9lbnRyaWVzID0g bG9jYWxOQnVmZmVycyAqIHBhZ2VzX3Blcl9idWZmZXI7CiAKIAkJLyogQWxsb2NhdGUgZW50cmll cyBmb3IgQnVmZmVyQ2FjaGVPc1BhZ2VzUmVjIHJlY29yZHMuICovCiAJCWZjdHgtPnJlY29yZCA9 IChCdWZmZXJDYWNoZU9zUGFnZXNSZWMgKikKQEAgLTM4NiwxMCArNDY1LDE0IEBAIHBnX2J1ZmZl cmNhY2hlX29zX3BhZ2VzX2ludGVybmFsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBib29sIGlu Y2x1ZGVfbnVtYSkKIAkJICogV2UgZG9uJ3QgaG9sZCB0aGUgcGFydGl0aW9uIGxvY2tzLCBzbyB3 ZSBkb24ndCBnZXQgYSBjb25zaXN0ZW50CiAJCSAqIHNuYXBzaG90IGFjcm9zcyBhbGwgYnVmZmVy cywgYnV0IHdlIGRvIGdyYWIgdGhlIGJ1ZmZlciBoZWFkZXIKIAkJICogbG9ja3MsIHNvIHRoZSBp bmZvcm1hdGlvbiBvZiBlYWNoIGJ1ZmZlciBpcyBzZWxmLWNvbnNpc3RlbnQuCisJCSAqCisJCSAq IFRoaXMgbG9vcCB0b3VjaGVzIGFuZCBzdG9yZXMgYWRkcmVzc2VzIGludG8gb3NfcGFnZV9wdHJz W10gYXMgaW5wdXQKKwkJICogdG8gb25lIGJpZyBtb3ZlX3BhZ2VzKDIpIGlucXVpcnkgc3lzdGVt IGNhbGwuIEJhc2ljYWxseSB3ZSBhc2sgZm9yCisJCSAqIGFsbCBtZW1vcnkgcGFnZXMgZm9yIGxv Y2FsTkJ1ZmZlcnMuCiAJCSAqLwogCQlzdGFydHB0ciA9IChjaGFyICopIFRZUEVBTElHTl9ET1dO KG9zX3BhZ2Vfc2l6ZSwgKGNoYXIgKikgQnVmZmVyR2V0QmxvY2soMSkpOwogCQlpZHggPSAwOwot CQlmb3IgKGkgPSAwOyBpIDwgTkJ1ZmZlcnM7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IGxvY2Fs TkJ1ZmZlcnM7IGkrKykKIAkJewogCQkJY2hhcgkgICAqYnVmZnB0ciA9IChjaGFyICopIEJ1ZmZl ckdldEJsb2NrKGkgKyAxKTsKIAkJCUJ1ZmZlckRlc2MgKmJ1ZkhkcjsKQEAgLTQ0MCw5ICs1MjMs MTAgQEAgcGdfYnVmZmVyY2FjaGVfb3NfcGFnZXNfaW50ZXJuYWwoRnVuY3Rpb25DYWxsSW5mbyBm Y2luZm8sIGJvb2wgaW5jbHVkZV9udW1hKQogCQlmdW5jY3R4LT5tYXhfY2FsbHMgPSBpZHg7CiAJ CWZ1bmNjdHgtPnVzZXJfZmN0eCA9IGZjdHg7CiAKLQkJLyogUmVtZW1iZXIgdGhpcyBiYWNrZW5k IHRvdWNoZWQgdGhlIHBhZ2VzIChvbmx5IHJlbGV2YW50IGZvciBOVU1BKSAqLwotCQlpZiAoaW5j bHVkZV9udW1hKQotCQkJZmlyc3ROdW1hVG91Y2ggPSBmYWxzZTsKKwkJLyogUmVtZW1iZXIgdGhp cyBiYWNrZW5kIHRvdWNoZWQgdGhlIHBhZ2VzICovCisJCWZpcnN0TnVtYVRvdWNoID0gZmFsc2U7 CisKKwkJRU5EX05CVUZGRVJTX0FDQ0VTUyhsb2NhbE5CdWZmZXJzKTsKIAl9CiAKIAlmdW5jY3R4 ID0gU1JGX1BFUkNBTExfU0VUVVAoKTsKQEAgLTUzMSwxMSArNjE1LDEyIEBAIHBnX2J1ZmZlcmNh Y2hlX3N1bW1hcnkoUEdfRlVOQ1RJT05fQVJHUykKIAlpbnQzMgkJYnVmZmVyc19kaXJ0eSA9IDA7 CiAJaW50MzIJCWJ1ZmZlcnNfcGlubmVkID0gMDsKIAlpbnQ2NAkJdXNhZ2Vjb3VudF90b3RhbCA9 IDA7CisJQkVHSU5fTkJVRkZFUlNfQUNDRVNTKGxvY2FsTkJ1ZmZlcnMpOwogCiAJaWYgKGdldF9j YWxsX3Jlc3VsdF90eXBlKGZjaW5mbywgTlVMTCwgJnR1cGxlZGVzYykgIT0gVFlQRUZVTkNfQ09N UE9TSVRFKQogCQllbG9nKEVSUk9SLCAicmV0dXJuIHR5cGUgbXVzdCBiZSBhIHJvdyB0eXBlIik7 CiAKLQlmb3IgKGludCBpID0gMDsgaSA8IE5CdWZmZXJzOyBpKyspCisJZm9yIChpbnQgaSA9IDA7 IGkgPCBsb2NhbE5CdWZmZXJzOyBpKyspCiAJewogCQlCdWZmZXJEZXNjICpidWZIZHI7CiAJCXVp bnQ2NAkJYnVmX3N0YXRlOwpAQCAtNTY1LDYgKzY1MCw3IEBAIHBnX2J1ZmZlcmNhY2hlX3N1bW1h cnkoUEdfRlVOQ1RJT05fQVJHUykKIAkJaWYgKEJVRl9TVEFURV9HRVRfUkVGQ09VTlQoYnVmX3N0 YXRlKSA+IDApCiAJCQlidWZmZXJzX3Bpbm5lZCsrOwogCX0KKwlFTkRfTkJVRkZFUlNfQUNDRVNT KGxvY2FsTkJ1ZmZlcnMpOwogCiAJbWVtc2V0KG51bGxzLCAwLCBzaXplb2YobnVsbHMpKTsKIAl2 YWx1ZXNbMF0gPSBJbnQzMkdldERhdHVtKGJ1ZmZlcnNfdXNlZCk7CkBAIC01OTMsMTAgKzY3OSwx MSBAQCBwZ19idWZmZXJjYWNoZV91c2FnZV9jb3VudHMoUEdfRlVOQ1RJT05fQVJHUykKIAlpbnQJ CQlwaW5uZWRbQk1fTUFYX1VTQUdFX0NPVU5UICsgMV0gPSB7MH07CiAJRGF0dW0JCXZhbHVlc1tO VU1fQlVGRkVSQ0FDSEVfVVNBR0VfQ09VTlRTX0VMRU1dOwogCWJvb2wJCW51bGxzW05VTV9CVUZG RVJDQUNIRV9VU0FHRV9DT1VOVFNfRUxFTV0gPSB7MH07CisJQkVHSU5fTkJVRkZFUlNfQUNDRVNT KGxvY2FsTkJ1ZmZlcnMpOwogCiAJSW5pdE1hdGVyaWFsaXplZFNSRihmY2luZm8sIDApOwogCi0J Zm9yIChpbnQgaSA9IDA7IGkgPCBOQnVmZmVyczsgaSsrKQorCWZvciAoaW50IGkgPSAwOyBpIDwg bG9jYWxOQnVmZmVyczsgaSsrKQogCXsKIAkJQnVmZmVyRGVzYyAqYnVmSGRyID0gR2V0QnVmZmVy RGVzY3JpcHRvcihpKTsKIAkJdWludDY0CQlidWZfc3RhdGUgPSBwZ19hdG9taWNfcmVhZF91NjQo JmJ1Zkhkci0+c3RhdGUpOwpAQCAtNjEzLDYgKzcwMCw3IEBAIHBnX2J1ZmZlcmNhY2hlX3VzYWdl X2NvdW50cyhQR19GVU5DVElPTl9BUkdTKQogCQlpZiAoQlVGX1NUQVRFX0dFVF9SRUZDT1VOVChi dWZfc3RhdGUpID4gMCkKIAkJCXBpbm5lZFt1c2FnZV9jb3VudF0rKzsKIAl9CisJRU5EX05CVUZG RVJTX0FDQ0VTUyhsb2NhbE5CdWZmZXJzKTsKIAogCWZvciAoaW50IGkgPSAwOyBpIDwgQk1fTUFY X1VTQUdFX0NPVU5UICsgMTsgaSsrKQogCXsKQEAgLTY1NCwxMyArNzQyLDE1IEBAIHBnX2J1ZmZl cmNhY2hlX2V2aWN0KFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAlCdWZmZXIJCWJ1ZiA9IFBHX0dFVEFS R19JTlQzMigwKTsKIAlib29sCQlidWZmZXJfZmx1c2hlZDsKKwlCRUdJTl9OQlVGRkVSU19BQ0NF U1MobG9jYWxOQnVmZmVycyk7CisJKHZvaWQpIGxvY2FsTkJ1ZmZlcnM7CiAKIAlpZiAoZ2V0X2Nh bGxfcmVzdWx0X3R5cGUoZmNpbmZvLCBOVUxMLCAmdHVwbGVkZXNjKSAhPSBUWVBFRlVOQ19DT01Q T1NJVEUpCiAJCWVsb2coRVJST1IsICJyZXR1cm4gdHlwZSBtdXN0IGJlIGEgcm93IHR5cGUiKTsK IAogCXBnX2J1ZmZlcmNhY2hlX3N1cGVydXNlcl9jaGVjaygicGdfYnVmZmVyY2FjaGVfZXZpY3Qi KTsKIAotCWlmIChidWYgPCAxIHx8IGJ1ZiA+IE5CdWZmZXJzKQorCWlmIChidWYgPCAxIHx8IGJ1 ZiA+IEdldExvd05CdWZmZXJzKCkpCiAJCWVsb2coRVJST1IsICJiYWQgYnVmZmVyIElEOiAlZCIs IGJ1Zik7CiAKIAl2YWx1ZXNbMF0gPSBCb29sR2V0RGF0dW0oRXZpY3RVbnBpbm5lZEJ1ZmZlcihi dWYsICZidWZmZXJfZmx1c2hlZCkpOwpAQCAtNjY5LDYgKzc1OSw4IEBAIHBnX2J1ZmZlcmNhY2hl X2V2aWN0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJdHVwbGUgPSBoZWFwX2Zvcm1fdHVwbGUodHVwbGVk ZXNjLCB2YWx1ZXMsIG51bGxzKTsKIAlyZXN1bHQgPSBIZWFwVHVwbGVHZXREYXR1bSh0dXBsZSk7 CiAKKwlFTkRfTkJVRkZFUlNfQUNDRVNTKGxvY2FsTkJ1ZmZlcnMpOworCiAJUEdfUkVUVVJOX0RB VFVNKHJlc3VsdCk7CiB9CiAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcHJld2FybS9hdXRvcHJl d2FybS5jIGIvY29udHJpYi9wZ19wcmV3YXJtL2F1dG9wcmV3YXJtLmMKaW5kZXggYmEwYmM4ZTZk NGEuLmI2MjBjMDUzZGM2IDEwMDY0NAotLS0gYS9jb250cmliL3BnX3ByZXdhcm0vYXV0b3ByZXdh cm0uYworKysgYi9jb250cmliL3BnX3ByZXdhcm0vYXV0b3ByZXdhcm0uYwpAQCAtNjcyLDYgKzY3 Miw3IEBAIGFwd19kdW1wX25vdyhib29sIGlzX2Jnd29ya2VyLCBib29sIGR1bXBfdW5sb2dnZWQp CiAJRklMRQkgICAqZmlsZTsKIAljaGFyCQl0cmFuc2llbnRfZHVtcF9maWxlX3BhdGhbTUFYUEdQ QVRIXTsKIAlwaWRfdAkJcGlkOworCUJFR0lOX05CVUZGRVJTX0FDQ0VTUyhsb2NhbE5CdWZmZXJz KTsKIAogCUxXTG9ja0FjcXVpcmUoJmFwd19zdGF0ZS0+bG9jaywgTFdfRVhDTFVTSVZFKTsKIAlw aWQgPSBhcHdfc3RhdGUtPnBpZF91c2luZ19kdW1wZmlsZTsKQEAgLTcwMCw5ICs3MDEsOSBAQCBh cHdfZHVtcF9ub3coYm9vbCBpc19iZ3dvcmtlciwgYm9vbCBkdW1wX3VubG9nZ2VkKQogCSAqIG1l bW9yeS1lZmZpY2llbnQgZGF0YSBzdHJ1Y3R1cmUuKQogCSAqLwogCWJsb2NrX2luZm9fYXJyYXkg PSAoQmxvY2tJbmZvUmVjb3JkICopCi0JCXBhbGxvY19leHRlbmRlZCgoc2l6ZW9mKEJsb2NrSW5m b1JlY29yZCkgKiBOQnVmZmVycyksIE1DWFRfQUxMT0NfSFVHRSk7CisJCXBhbGxvY19leHRlbmRl ZCgoc2l6ZW9mKEJsb2NrSW5mb1JlY29yZCkgKiBsb2NhbE5CdWZmZXJzKSwgTUNYVF9BTExPQ19I VUdFKTsKIAotCWZvciAobnVtX2Jsb2NrcyA9IDAsIGkgPSAwOyBpIDwgTkJ1ZmZlcnM7IGkrKykK Kwlmb3IgKG51bV9ibG9ja3MgPSAwLCBpID0gMDsgaSA8IGxvY2FsTkJ1ZmZlcnM7IGkrKykKIAl7 CiAJCXVpbnQ2NAkJYnVmX3N0YXRlOwogCkBAIC03MzMsNiArNzM0LDcgQEAgYXB3X2R1bXBfbm93 KGJvb2wgaXNfYmd3b3JrZXIsIGJvb2wgZHVtcF91bmxvZ2dlZCkKIAogCQlVbmxvY2tCdWZIZHIo YnVmSGRyKTsKIAl9CisJRU5EX05CVUZGRVJTX0FDQ0VTUyhsb2NhbE5CdWZmZXJzKTsKIAogCXNu cHJpbnRmKHRyYW5zaWVudF9kdW1wX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMudG1wIiwgQVVU T1BSRVdBUk1fRklMRSk7CiAJZmlsZSA9IEFsbG9jYXRlRmlsZSh0cmFuc2llbnRfZHVtcF9maWxl X3BhdGgsICJ3Iik7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKaW5kZXggOGQ4Y2QzMGRjMzguLmU0M2Vj YTJiY2UxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCkBAIC0xNzYsNyArMTc2LDcgQEAgaGFzaGJ1 aWxkKFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4LCBJbmRleEluZm8gKmluZGV4SW5mbykK IAkgKi8KIAlzb3J0X3RocmVzaG9sZCA9IChtYWludGVuYW5jZV93b3JrX21lbSAqIChTaXplKSAx MDI0KSAvIEJMQ0tTWjsKIAlpZiAoaW5kZXgtPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UgIT0gUkVM UEVSU0lTVEVOQ0VfVEVNUCkKLQkJc29ydF90aHJlc2hvbGQgPSBNaW4oc29ydF90aHJlc2hvbGQs IE5CdWZmZXJzKTsKKwkJc29ydF90aHJlc2hvbGQgPSBNaW4oc29ydF90aHJlc2hvbGQsIEdldEhp Z2hOQnVmZmVycygpKTsKIAllbHNlCiAJCXNvcnRfdGhyZXNob2xkID0gTWluKHNvcnRfdGhyZXNo b2xkLCBOTG9jQnVmZmVyKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwppbmRleCBhYmZkOGU4 OTcwYS4uNGQyN2QyYjE4MTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCkBAIC0zOTQsNyAr Mzk0LDcgQEAgaW5pdHNjYW4oSGVhcFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkga2V5LCBib29sIGtl ZXBfc3RhcnRibG9jaykKIAkgKiBpZiB5b3UgY2hhbmdlIHRoaXMsIGNvbnNpZGVyIGNoYW5naW5n IHRoYXQgb25lLCB0b28uCiAJICovCiAJaWYgKCFSZWxhdGlvblVzZXNMb2NhbEJ1ZmZlcnMoc2Nh bi0+cnNfYmFzZS5yc19yZCkgJiYKLQkJc2Nhbi0+cnNfbmJsb2NrcyA+IE5CdWZmZXJzIC8gNCkK KwkJc2Nhbi0+cnNfbmJsb2NrcyA+IEdldEhpZ2hOQnVmZmVycygpIC8gNCkKIAl7CiAJCWFsbG93 X3N0cmF0ID0gKHNjYW4tPnJzX2Jhc2UucnNfZmxhZ3MgJiBTT19BTExPV19TVFJBVCkgIT0gMDsK IAkJYWxsb3dfc3luYyA9IChzY2FuLT5yc19iYXNlLnJzX2ZsYWdzICYgU09fQUxMT1dfU1lOQykg IT0gMDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCmluZGV4IDY4ZmYwOTY2ZjFjLi42YWZh OTE3NjE3NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCkBAIC00MjAsNyArNDIwLDcg QEAgdGFibGVfYmxvY2tfcGFyYWxsZWxzY2FuX2luaXRpYWxpemUoUmVsYXRpb24gcmVsLCBQYXJh bGxlbFRhYmxlU2NhbkRlc2MgcHNjYW4pCiAJLyogY29tcGFyZSBwaHNfc3luY3NjYW4gaW5pdGlh bGl6YXRpb24gdG8gc2ltaWxhciBsb2dpYyBpbiBpbml0c2NhbiAqLwogCWJwc2Nhbi0+YmFzZS5w aHNfc3luY3NjYW4gPSBzeW5jaHJvbml6ZV9zZXFzY2FucyAmJgogCQkhUmVsYXRpb25Vc2VzTG9j YWxCdWZmZXJzKHJlbCkgJiYKLQkJYnBzY2FuLT5waHNfbmJsb2NrcyA+IE5CdWZmZXJzIC8gNDsK KwkJYnBzY2FuLT5waHNfbmJsb2NrcyA+IEdldEhpZ2hOQnVmZmVycygpIC8gNDsKIAlTcGluTG9j a0luaXQoJmJwc2Nhbi0+cGhzX211dGV4KTsKIAlicHNjYW4tPnBoc19zdGFydGJsb2NrID0gSW52 YWxpZEJsb2NrTnVtYmVyOwogCWJwc2Nhbi0+cGhzX251bWJsb2NrID0gSW52YWxpZEJsb2NrTnVt YmVyOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc2xydS5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc2xydS5jCmluZGV4IDQ3ZGQ1MmQ2NzQ5Li5hMWZjNmE0 ZjdhMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc2xydS5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3NscnUuYwpAQCAtMjM2LDcgKzIzNiw3IEBAIFNp bXBsZUxydUF1dG90dW5lQnVmZmVycyhpbnQgZGl2aXNvciwgaW50IG1heCkKIHsKIAlyZXR1cm4g TWluKG1heCAtIChtYXggJSBTTFJVX0JBTktfU0laRSksCiAJCQkgICBNYXgoU0xSVV9CQU5LX1NJ WkUsCi0JCQkJICAgTkJ1ZmZlcnMgLyBkaXZpc29yIC0gKE5CdWZmZXJzIC8gZGl2aXNvcikgJSBT TFJVX0JBTktfU0laRSkpOworCQkJCSAgIEdldE1heE5CdWZmZXJzKCkgLyBkaXZpc29yIC0gKEdl dE1heE5CdWZmZXJzKCkgLyBkaXZpc29yKSAlIFNMUlVfQkFOS19TSVpFKSk7CiB9CiAKIC8qCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKaW5kZXggZDM0ZTM0YTU2YzUuLmNjNjdiMjdhNzgwIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCkBAIC01MDI2LDcgKzUwMjYsMTAgQEAgWExPR0No b29zZU51bUJ1ZmZlcnModm9pZCkKIHsKIAlpbnQJCQl4YnVmZmVyczsKIAotCXhidWZmZXJzID0g TkJ1ZmZlcnMgLyAzMjsKKwkvKgorCSAqIFVzZSB0aGUgbWF4aW11bSBidWZmZXIgcG9vbCBzaXpl LgorCSAqLworCXhidWZmZXJzID0gR2V0TWF4TkJ1ZmZlcnMoKSAvIDMyOwogCWlmICh4YnVmZmVy cyA+ICh3YWxfc2VnbWVudF9zaXplIC8gWExPR19CTENLU1opKQogCQl4YnVmZmVycyA9ICh3YWxf c2VnbWVudF9zaXplIC8gWExPR19CTENLU1opOwogCWlmICh4YnVmZmVycyA8IDgpCkBAIC03MjQy LDcgKzcyNDUsNyBAQCBMb2dDaGVja3BvaW50RW5kKGJvb2wgcmVzdGFydHBvaW50LCBpbnQgZmxh Z3MpCiAJCQkJCQkiZXN0aW1hdGU9JWQga0I7IGxzbj0lWC8lMDhYLCByZWRvIGxzbj0lWC8lMDhY IiwKIAkJCQkJCUNoZWNrcG9pbnRGbGFnc1N0cmluZyhmbGFncyksCiAJCQkJCQlDaGVja3BvaW50 U3RhdHMuY2twdF9idWZzX3dyaXR0ZW4sCi0JCQkJCQkoZG91YmxlKSBDaGVja3BvaW50U3RhdHMu Y2twdF9idWZzX3dyaXR0ZW4gKiAxMDAgLyBOQnVmZmVycywKKwkJCQkJCShkb3VibGUpIENoZWNr cG9pbnRTdGF0cy5ja3B0X2J1ZnNfd3JpdHRlbiAqIDEwMCAvIEdldEhpZ2hOQnVmZmVycygpLAog CQkJCQkJQ2hlY2twb2ludFN0YXRzLmNrcHRfc2xydV93cml0dGVuLAogCQkJCQkJQ2hlY2twb2lu dFN0YXRzLmNrcHRfc2Vnc19hZGRlZCwKIAkJCQkJCUNoZWNrcG9pbnRTdGF0cy5ja3B0X3NlZ3Nf cmVtb3ZlZCwKQEAgLTcyNjcsNyArNzI3MCw3IEBAIExvZ0NoZWNrcG9pbnRFbmQoYm9vbCByZXN0 YXJ0cG9pbnQsIGludCBmbGFncykKIAkJCQkJCSJlc3RpbWF0ZT0lZCBrQjsgbHNuPSVYLyUwOFgs IHJlZG8gbHNuPSVYLyUwOFgiLAogCQkJCQkJQ2hlY2twb2ludEZsYWdzU3RyaW5nKGZsYWdzKSwK IAkJCQkJCUNoZWNrcG9pbnRTdGF0cy5ja3B0X2J1ZnNfd3JpdHRlbiwKLQkJCQkJCShkb3VibGUp IENoZWNrcG9pbnRTdGF0cy5ja3B0X2J1ZnNfd3JpdHRlbiAqIDEwMCAvIE5CdWZmZXJzLAorCQkJ CQkJKGRvdWJsZSkgQ2hlY2twb2ludFN0YXRzLmNrcHRfYnVmc193cml0dGVuICogMTAwIC8gR2V0 SGlnaE5CdWZmZXJzKCksCiAJCQkJCQlDaGVja3BvaW50U3RhdHMuY2twdF9zbHJ1X3dyaXR0ZW4s CiAJCQkJCQlDaGVja3BvaW50U3RhdHMuY2twdF9zZWdzX2FkZGVkLAogCQkJCQkJQ2hlY2twb2lu dFN0YXRzLmNrcHRfc2Vnc19yZW1vdmVkLApAQCAtNzg4NSw3ICs3ODg4LDcgQEAgQ3JlYXRlQ2hl Y2tQb2ludChpbnQgZmxhZ3MpCiAJdXBkYXRlX2NoZWNrcG9pbnRfZGlzcGxheShmbGFncywgZmFs c2UsIHRydWUpOwogCiAJVFJBQ0VfUE9TVEdSRVNRTF9DSEVDS1BPSU5UX0RPTkUoQ2hlY2twb2lu dFN0YXRzLmNrcHRfYnVmc193cml0dGVuLAotCQkJCQkJCQkJIE5CdWZmZXJzLAorCQkJCQkJCQkJ IEdldEhpZ2hOQnVmZmVycygpLAogCQkJCQkJCQkJIENoZWNrcG9pbnRTdGF0cy5ja3B0X3NlZ3Nf YWRkZWQsCiAJCQkJCQkJCQkgQ2hlY2twb2ludFN0YXRzLmNrcHRfc2Vnc19yZW1vdmVkLAogCQkJ CQkJCQkJIENoZWNrcG9pbnRTdGF0cy5ja3B0X3NlZ3NfcmVjeWNsZWQpOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9jaGVja3BvaW50ZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvY2hlY2twb2ludGVyLmMKaW5kZXggMDg3MTIwZGIwOTAuLmJiYmM2YzJmOTVkIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2NoZWNrcG9pbnRlci5jCisrKyBiL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2ludGVyLmMKQEAgLTE2MSw2ICsxNjEsMTUgQEAgY29u c3QgU2htZW1DYWxsYmFja3MgQ2hlY2twb2ludGVyU2htZW1DYWxsYmFja3MgPSB7CiAvKiBNYXgg bnVtYmVyIG9mIHJlcXVlc3RzIHRoZSBjaGVja3BvaW50ZXIgcmVxdWVzdCBxdWV1ZSBjYW4gaG9s ZCAqLwogI2RlZmluZSBNQVhfQ0hFQ0tQT0lOVF9SRVFVRVNUUyAxMDAwMDAwMAogCisvKgorICog UXVldWUgc2l6ZSB1c2VkIHVuZGVyIGR5bmFtaWNfc2hhcmVkX2J1ZmZlcnMuIExvY2FsLWZpbGUg ZnN5bmNzIGFyZQorICogYnlwYXNzZWQgaW4gRm9yd2FyZFN5bmNSZXF1ZXN0IHVuZGVyIERTQiAo TmVvbidzIGR1cmFiaWxpdHkgaXMgdGhlIFdBTAorICogc3RyZWFtKSwgc28gdGhlIHF1ZXVlIGRv ZXMgbm90IG5lZWQgdG8gc2NhbGUgd2l0aCB0aGUgYnVmZmVyIHBvb2wuIEJ1dAorICogd2Ugc3Rp bGwgbmVlZCBhIHJlYWwgcXVldWUgc28gU1lOQ19VTkxJTktfUkVRVUVTVCBpcyBub3Qgc2lsZW50 bHkKKyAqIGRyb3BwZWQuCisgKi8KKyNkZWZpbmUgRFNCX0NIRUNLUE9JTlRfUkVRVUVTVFMgNDA5 NgorCiAvKgogICogR1VDIHBhcmFtZXRlcnMKICAqLwpAQCAtOTY3LDE5ICs5NzYsMjkgQEAgQ2hl Y2twb2ludGVyU2htZW1SZXF1ZXN0KHZvaWQgKmFyZykKIHsKIAlTaXplCQlzaXplOwogCisJc2l6 ZSA9IG9mZnNldG9mKENoZWNrcG9pbnRlclNobWVtU3RydWN0LCByZXF1ZXN0cyk7CisKIAkvKgot CSAqIFRoZSBzaXplIG9mIHRoZSByZXF1ZXN0c1tdIGFycmF5IGlzIGFyYml0cmFyaWx5IHNldCBl cXVhbCB0byBOQnVmZmVycy4KLQkgKiBCdXQgdGhlcmUgaXMgYSBjYXAgb2YgTUFYX0NIRUNLUE9J TlRfUkVRVUVTVFMgdG8gcHJldmVudCBhY2N1bXVsYXRpbmcKLQkgKiB0b28gbWFueSBjaGVja3Bv aW50IHJlcXVlc3RzIGluIHRoZSByaW5nIGJ1ZmZlci4KKwkgKiBUaGUgc2l6ZSBvZiB0aGUgcmVx dWVzdHNbXSBhcnJheSBpcyBhcmJpdHJhcmlseSBzZXQgZXF1YWwgdG8gdGhlCisJICogaW5pdGlh bCBzaXplIG9mIGJ1ZmZlciBwb29sLiAgQnV0IHRoZXJlIGlzIGEgY2FwIG9mCisJICogTUFYX0NI RUNLUE9JTlRfUkVRVUVTVFMgdG8gcHJldmVudCBhY2N1bXVsYXRpbmcgdG9vIG1hbnkgY2hlY2tw b2ludAorCSAqIHJlcXVlc3RzIGluIHRoZSByaW5nIGJ1ZmZlci4KKwkgKgorCSAqIFVuZGVyIGR5 bmFtaWNfc2hhcmVkX2J1ZmZlcnMgd2UgdXNlIGEgc21hbGwgZml4ZWQgY2FwIGluc3RlYWQgLS0K KwkgKiBzaXppbmcgdGhlIHF1ZXVlIG9uIE1heE5CdWZmZXJzIHdvdWxkIHdhc3RlIGEgbG90IG9m IHNobWVtIHVuZGVyCisJICogYXV0by1zY2FsZSwgYnV0IGEgcmVhbCAobm9uLXplcm8pIHF1ZXVl IGlzIHN0aWxsIHJlcXVpcmVkIHNvIHRoYXQKKwkgKiBTWU5DX1VOTElOS19SRVFVRVNUIGNhbiBi ZSBmb3J3YXJkZWQgdG8gdGhlIGNoZWNrcG9pbnRlciBmb3IgZGVsYXllZAorCSAqIHVubGluayBw cm9jZXNzaW5nLgogCSAqLwotCXNpemUgPSBvZmZzZXRvZihDaGVja3BvaW50ZXJTaG1lbVN0cnVj dCwgcmVxdWVzdHMpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShNaW4oTkJ1ZmZl cnMsCi0JCQkJCQkJCQkgICBNQVhfQ0hFQ0tQT0lOVF9SRVFVRVNUUyksCi0JCQkJCQkJCSAgIHNp emVvZihDaGVja3BvaW50ZXJSZXF1ZXN0KSkpOwotCVNobWVtUmVxdWVzdFN0cnVjdCgubmFtZSA9 ICJDaGVja3BvaW50ZXIgRGF0YSIsCi0JCQkJCSAgIC5zaXplID0gc2l6ZSwKLQkJCQkJICAgLnB0 ciA9ICh2b2lkICoqKSAmQ2hlY2twb2ludGVyU2htZW0sCi0JCSk7CisJaWYgKGVuYWJsZV9keW5h bWljX3NoYXJlZF9idWZmZXJzKQorCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoRFNC X0NIRUNLUE9JTlRfUkVRVUVTVFMsCisJCQkJCQkJCQkgICBzaXplb2YoQ2hlY2twb2ludGVyUmVx dWVzdCkpKTsKKwllbHNlCisJCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShNaW4oTkJ1 ZmZlcnNHVUMsCisJCQkJCQkJCQkJICAgTUFYX0NIRUNLUE9JTlRfUkVRVUVTVFMpLAorCQkJCQkJ CQkJICAgc2l6ZW9mKENoZWNrcG9pbnRlclJlcXVlc3QpKSk7CisKKwlyZXR1cm4gc2l6ZTsKIH0K IAogLyoKQEAgLTEwMTAsMjcgKzEwMjksMjEgQEAgRXhlY0NoZWNrcG9pbnQoUGFyc2VTdGF0ZSAq cHN0YXRlLCBDaGVja1BvaW50U3RtdCAqc3RtdCkKIAogCWZvcmVhY2hfcHRyKERlZkVsZW0sIG9w dCwgc3RtdC0+b3B0aW9ucykKIAl7Ci0JCWlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAibW9kZSIp ID09IDApCi0JCXsKLQkJCWNoYXIJICAgKm1vZGUgPSBkZWZHZXRTdHJpbmcob3B0KTsKLQotCQkJ aWYgKHN0cmNtcChtb2RlLCAic3ByZWFkIikgPT0gMCkKLQkJCQlmYXN0ID0gZmFsc2U7Ci0JCQll bHNlIGlmIChzdHJjbXAobW9kZSwgImZhc3QiKSAhPSAwKQotCQkJCWVyZXBvcnQoRVJST1IsCi0J CQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCi0JCQkJCQkgZXJybXNnKCJ1bnJl Y29nbml6ZWQgdmFsdWUgZm9yICVzIG9wdGlvbiBcIiVzXCI6IFwiJXNcIiIsCi0JCQkJCQkJCSJD SEVDS1BPSU5UIiwgIm1vZGUiLCBtb2RlKSwKLQkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0 YXRlLCBvcHQtPmxvY2F0aW9uKSkpOwotCQl9Ci0JCWVsc2UgaWYgKHN0cmNtcChvcHQtPmRlZm5h bWUsICJmbHVzaF91bmxvZ2dlZCIpID09IDApCi0JCQl1bmxvZ2dlZCA9IGRlZkdldEJvb2xlYW4o b3B0KTsKKwkJLyoKKwkJICogRmlyc3QgdGltZSB0aHJvdWdoLCBzbyBpbml0aWFsaXplLiAgTm90 ZSB0aGF0IHdlIHplcm8gdGhlIHdob2xlCisJCSAqIHJlcXVlc3RzIGFycmF5OyB0aGlzIGlzIHNv IHRoYXQgQ29tcGFjdENoZWNrcG9pbnRlclJlcXVlc3RRdWV1ZSBjYW4KKwkJICogYXNzdW1lIHRo YXQgYW55IHBhZCBieXRlcyBpbiB0aGUgcmVxdWVzdCBzdHJ1Y3RzIGFyZSB6ZXJvZXMuCisJCSAq LworCQlNZW1TZXQoQ2hlY2twb2ludGVyU2htZW0sIDAsIHNpemUpOworCQlTcGluTG9ja0luaXQo JkNoZWNrcG9pbnRlclNobWVtLT5ja3B0X2xjayk7CisKKwkJaWYgKGVuYWJsZV9keW5hbWljX3No YXJlZF9idWZmZXJzKQorCQkJQ2hlY2twb2ludGVyU2htZW0tPm1heF9yZXF1ZXN0cyA9IERTQl9D SEVDS1BPSU5UX1JFUVVFU1RTOwogCQllbHNlCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJy Y29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCi0JCQkJCSBlcnJtc2coInVucmVjb2duaXplZCAl cyBvcHRpb24gXCIlc1wiIiwKLQkJCQkJCQkiQ0hFQ0tQT0lOVCIsIG9wdC0+ZGVmbmFtZSksCi0J CQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBvcHQtPmxvY2F0aW9uKSkpOworCQkJQ2hl Y2twb2ludGVyU2htZW0tPm1heF9yZXF1ZXN0cyA9IE1pbihOQnVmZmVyc0dVQywKKwkJCQkJCQkJ CQkJCSAgTUFYX0NIRUNLUE9JTlRfUkVRVUVTVFMpOworCQlDb25kaXRpb25WYXJpYWJsZUluaXQo JkNoZWNrcG9pbnRlclNobWVtLT5zdGFydF9jdik7CisJCUNvbmRpdGlvblZhcmlhYmxlSW5pdCgm Q2hlY2twb2ludGVyU2htZW0tPmRvbmVfY3YpOwogCX0KIAogCWlmICghaGFzX3ByaXZzX29mX3Jv bGUoR2V0VXNlcklkKCksIFJPTEVfUEdfQ0hFQ0tQT0lOVCkpCkBAIC0xMjI4LDYgKzEyNDEsMTUg QEAgRm9yd2FyZFN5bmNSZXF1ZXN0KGNvbnN0IEZpbGVUYWcgKmZ0YWcsIFN5bmNSZXF1ZXN0VHlw ZSB0eXBlKQogCWlmIChBbUNoZWNrcG9pbnRlclByb2Nlc3MoKSkKIAkJZWxvZyhFUlJPUiwgIkZv cndhcmRTeW5jUmVxdWVzdCBtdXN0IG5vdCBiZSBjYWxsZWQgaW4gY2hlY2twb2ludGVyIik7CiAK KwkvKgorCSAqIFF1ZXVlIHVubGlua3MgYW5kIGxldCB0aGUgY2hlY2twb2ludGVyIGRyYWluIHRo ZW0uCisJICoKKwkgKiBOZW9uIGR1cmFiaWxpdHkgaXMgcHJvdmlkZWQgYnkgdGhlIFdBTCBzdHJl YW0uCisJICogU1lOQ19GT1JHRVRfUkVRVUVTVC9TWU5DX0ZJTFRFUl9SRVFVRVNUL1NZTkNfUkVR VUVTVCBjYW4gYmUgZHJvcHBlZC4KKwkgKi8KKwlpZiAoZW5hYmxlX2R5bmFtaWNfc2hhcmVkX2J1 ZmZlcnMgJiYgdHlwZSAhPSBTWU5DX1VOTElOS19SRVFVRVNUKQorCQlyZXR1cm4gdHJ1ZTsKKwog CUxXTG9ja0FjcXVpcmUoQ2hlY2twb2ludGVyQ29tbUxvY2ssIExXX0VYQ0xVU0lWRSk7CiAKIAkv KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvX2luaXQuYyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvYWlvL2Fpb19pbml0LmMKaW5kZXggZGEzMGQ3OTJhODguLmM2YjRiZjk3 NWUzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW9faW5pdC5jCisrKyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpb19pbml0LmMKQEAgLTEwOSw3ICsxMDksNyBAQCBB aW9DaG9vc2VNYXhDb25jdXJyZW5jeSh2b2lkKQogCiAJLyogU2ltaWxhciBsb2dpYyB0byBMaW1p dEFkZGl0aW9uYWxQaW5zKCkgKi8KIAltYXhfYmFja2VuZHMgPSBNYXhCYWNrZW5kcyArIE5VTV9B VVhJTElBUllfUFJPQ1M7Ci0JbWF4X3Byb3BvcnRpb25hbF9waW5zID0gTkJ1ZmZlcnMgLyBtYXhf YmFja2VuZHM7CisJbWF4X3Byb3BvcnRpb25hbF9waW5zID0gR2V0TWF4TkJ1ZmZlcnMoKSAvIG1h eF9iYWNrZW5kczsKIAogCW1heF9wcm9wb3J0aW9uYWxfcGlucyA9IE1heChtYXhfcHJvcG9ydGlv bmFsX3BpbnMsIDEpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9N YWtlZmlsZSBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL01ha2VmaWxlCmluZGV4IGZkN2M0 MGRjYjA4Li4yNTY3ZjMyZTEzMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvTWFrZWZpbGUKQEAg LTE0LDggKzE0LDEwIEBAIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9i YWwKIAogT0JKUyA9IFwKIAlidWZfaW5pdC5vIFwKKwlidWZfcmVzaXplLm8gXAogCWJ1Zl90YWJs ZS5vIFwKIAlidWZtZ3IubyBcCisJZHluYW1pY19zaGFyZWRfYnVmZmVycy5vIFwKIAlmcmVlbGlz dC5vIFwKIAlsb2NhbGJ1Zi5vCiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVm ZmVyL2J1Zl9pbml0LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jCmlu ZGV4IDE0MDdjOTMwYzU2Li43NTdjMDBkMDNkNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmX2luaXQuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9i dWZfaW5pdC5jCkBAIC0xNCwxMiArMTQsMTggQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgi CiAKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpZmRlZiBfX2xpbnV4X18KKyNpbmNsdWRlIDxzeXMv bW1hbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJzdG9y YWdlL2Fpby5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmX2ludGVybmFscy5oIgogI2luY2x1ZGUg InN0b3JhZ2UvYnVmbWdyLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9wcm9jbGlzdC5oIgorI2luY2x1 ZGUgInN0b3JhZ2UvcGdfc2htZW0uaCIKICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCi0jaW5j bHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtZGVidWcuaCIK IAogQnVmZmVyRGVzY1BhZGRlZCAqQnVmZmVyRGVzY3JpcHRvcnM7CiBjaGFyCSAgICpCdWZmZXJC bG9ja3M7CkBAIC02OSw2ICs3NSwyMDggQEAgY29uc3QgU2htZW1DYWxsYmFja3MgQnVmZmVyTWFu YWdlclNobWVtQ2FsbGJhY2tzID0gewogICoJCW11bHRpcGxlIHRpbWVzLiBDaGVjayB0aGUgUHJp dmF0ZVJlZkNvdW50IGluZnJhc3RydWN0dXJlIGluIGJ1Zm1nci5jLgogICovCiAKKy8qCisgKiBJ bml0aWFsaXplIGEgc2luZ2xlIGJ1ZmZlciBkZXNjcmlwdG9yLgorICoKKyAqIEJ1ZmZlcnMgYXJl IGV4Y2x1c2l2ZWx5IGZvdW5kIHZpYSBjbG9jayBzd2VlcCAodGhlIGZyZWVsaXN0IHdhcyByZW1v dmVkCisgKiBpbiBjb21taXQgMmM3ODk0MDUyNzUpLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBi b3RoIGZyb20KKyAqIEJ1ZmZlck1hbmFnZXJTaG1lbUluaXQgYXQgYm9vdCBhbmQgZnJvbSBCdWZm ZXJNYW5hZ2VyU2htZW1Jbml0QnVmZmVycworICogZHVyaW5nIGFuIG9ubGluZSBleHBhbmQuCisg Ki8KK3N0YXRpYyB2b2lkCitJbml0aWFsaXplQnVmZmVyKGludCBidWZfaWQpCit7CisJQnVmZmVy RGVzYyAqYnVmID0gR2V0QnVmZmVyRGVzY3JpcHRvcihidWZfaWQpOworCisJQ2xlYXJCdWZmZXJU YWcoJmJ1Zi0+dGFnKTsKKwlwZ19hdG9taWNfaW5pdF91MzIoJmJ1Zi0+c3RhdGUsIDApOworCWJ1 Zi0+d2FpdF9iYWNrZW5kX3BncHJvY25vID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKKwlidWYtPmJ1 Zl9pZCA9IGJ1Zl9pZDsKKwlwZ2Fpb193cmVmX2NsZWFyKCZidWYtPmlvX3dyZWYpOworCisJTFdM b2NrSW5pdGlhbGl6ZShCdWZmZXJEZXNjcmlwdG9yR2V0Q29udGVudExvY2soYnVmKSwKKwkJCQkJ IExXVFJBTkNIRV9CVUZGRVJfQ09OVEVOVCk7CisKKwlDb25kaXRpb25WYXJpYWJsZUluaXQoQnVm ZmVyRGVzY3JpcHRvckdldElPQ1YoYnVmKSk7Cit9CisKKy8qCisgKiBQYWdlIHNpemUgdXNlZCBi b3RoIHRvIGxheSBvdXQgdGhlIGJ1ZmZlci1wb29sIGFycmF5cyBpbiBzaGFyZWQgbWVtb3J5IGFu ZAorICogdG8gYWxpZ24gdGhlIHBlci1zbGljZSBtYWR2aXNlKCkgcmFuZ2VzIGlzc3VlZCBkdXJp bmcgZXhwYW5kL3Nocmluay4KKyAqLworc3RhdGljIFNpemUKK2J1ZmZlcl9wb29sX21hZHZpc2Vf YWxpZ25tZW50KHZvaWQpCit7CisjaWZkZWYgX19saW51eF9fCisJaWYgKGh1Z2VfcGFnZXMgPT0g SFVHRV9QQUdFU19PTikKKwl7CisJCVNpemUJCWh1Z2VwYWdlc2l6ZSA9IDA7CisKKwkJR2V0SHVn ZVBhZ2VTaXplKCZodWdlcGFnZXNpemUsIE5VTEwpOworCQlpZiAoaHVnZXBhZ2VzaXplID4gMCkK KwkJCXJldHVybiBodWdlcGFnZXNpemU7CisJCS8qIENvbnNlcnZhdGl2ZSBmYWxsYmFjayBpZiAv cHJvYy9tZW1pbmZvIGxvb2t1cCBmYWlsZWQuICovCisJCXJldHVybiAoU2l6ZSkgMiAqIDEwMjQg KiAxMDI0OworCX0KKyNlbmRpZgorCXJldHVybiAoU2l6ZSkgc3lzY29uZihfU0NfUEFHRVNJWkUp OworfQorCisvKgorICogUmV0dXJuIHRoZSBleGFjdCBieXRlIGxlbmd0aCBvZiB0aGUgZXhwYW5k ZWQgcmFuZ2UgW2xvd05CdWZmZXJzLAorICogaGlnaE5CdWZmZXJzKSB0aGF0IHRoaXMgY2FsbCB0 b3VjaGVzIChtZW1zZXQgLyBtYWR2aXNlKSwgb3IgMCB3aGVuIGEgbm8tb3AKKyAqIG9yIG9uIHBs YXRmb3JtcyB3aGVyZSB0aGUgTGludXggcGF0aCBpcyBub3QgdXNlZC4gT24KKyAqIG1hZHZpc2Uo TUFEVl9QT1BVTEFURV9XUklURSkgZmFpbHVyZSwgKnN1Y2Nlc3MgaXMgc2V0IHRvIGZhbHNlIGFu ZCAwIGlzCisgKiByZXR1cm5lZDsgdGhlIG5ldyByYW5nZSBpcyBub3QgZ3VhcmFudGVlZCB0byBi ZSBiYWNrZWQgYnkgcGh5c2ljYWwgbWVtb3J5LAorICogc28gY2FsbGVycyBzaG91bGQgc3RvcCBl eHBhbmRpbmcgcmF0aGVyIHRoYW4gY29udGludWUgYW5kIHJpc2sgYSBTSUdCVVMgb24KKyAqIGZp cnN0IHRvdWNoLgorICovCitzdGF0aWMgU2l6ZQorQnVmZmVyUG9vbEFycmF5UGh5c2ljYWxFeHBh bmQodm9pZCAqYmFzZXB0ciwgU2l6ZSBlbGVtX3NpemUsCisJCQkJCQkJICBpbnQgbG93TkJ1ZmZl cnMsIGludCBoaWdoTkJ1ZmZlcnMsCisJCQkJCQkJICBib29sICpzdWNjZXNzKQoreworI2lmZGVm IF9fbGludXhfXworCWNoYXIJICAgKmJhc2U7CisJU2l6ZQkJb2ZmOworCVNpemUJCWxlbjsKKwl1 aW50cHRyX3QJcmVnaW9uX3N0YXJ0OworCXVpbnRwdHJfdAlyZWdpb25fZW5kOworCXVpbnRwdHJf dAltczsKKwl1aW50cHRyX3QJbWU7CisJU2l6ZQkJb3NfcGFnZV9zaXplID0gYnVmZmVyX3Bvb2xf bWFkdmlzZV9hbGlnbm1lbnQoKTsKKyNlbmRpZgorCisJaWYgKGJhc2VwdHIgPT0gTlVMTCB8fCBl bGVtX3NpemUgPT0gMCB8fCBoaWdoTkJ1ZmZlcnMgPD0gbG93TkJ1ZmZlcnMpCisJCXJldHVybiAw OworCisjaWZkZWYgX19saW51eF9fCisJYmFzZSA9IChjaGFyICopIGJhc2VwdHI7CisJQXNzZXJ0 KG9zX3BhZ2Vfc2l6ZSAhPSAwKTsKKworCW9mZiA9IG11bF9zaXplKChTaXplKSBsb3dOQnVmZmVy cywgZWxlbV9zaXplKTsKKwlsZW4gPSBtdWxfc2l6ZSgoU2l6ZSkgKGhpZ2hOQnVmZmVycyAtIGxv d05CdWZmZXJzKSwgZWxlbV9zaXplKTsKKworCXJlZ2lvbl9zdGFydCA9ICh1aW50cHRyX3QpIChi YXNlICsgb2ZmKTsKKwlyZWdpb25fZW5kID0gcmVnaW9uX3N0YXJ0ICsgbGVuOworCisJbXMgPSBU WVBFQUxJR05fRE9XTigoU2l6ZSkgb3NfcGFnZV9zaXplLCByZWdpb25fc3RhcnQpOworCW1lID0g VFlQRUFMSUdOKChTaXplKSBvc19wYWdlX3NpemUsIHJlZ2lvbl9lbmQpOworCisjaWZkZWYgVVNF X1ZBTEdSSU5ECisJVkFMR1JJTkRfTUFLRV9NRU1fREVGSU5FRCgodm9pZCAqKSByZWdpb25fc3Rh cnQsIGxlbik7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUFEVl9IVUdFUEFHRSkgJiYgZGVmaW5l ZChNQURWX1BPUFVMQVRFX1dSSVRFKQorI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlpZiAo bXByb3RlY3QoKHZvaWQgKikgbXMsIG1lIC0gbXMsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpIDwg MCAmJiBlcnJubyAhPSBFTk9NRU0pCisJCWVsb2coV0FSTklORywgIm1wcm90ZWN0KFBST1RfUkVB RHxQUk9UX1dSSVRFKSBiZWZvcmUgYnVmZmVyIHBvb2wgZXhwYW5kOiAlbSIpOworI2VuZGlmCisJ LyoKKwkgKiBJZiBodWdlIHBhZ2VzIGlzIG9uLCBNQURWX0hVR0VQQUdFIGFkdmljZSB3aWxsIGZh aWwuCisJICovCisJaWYgKGh1Z2VfcGFnZXNfc3RhdHVzICE9IEhVR0VfUEFHRVNfT04gJiYKKwkJ bWFkdmlzZSgodm9pZCAqKSBtcywgbWUgLSBtcywgTUFEVl9IVUdFUEFHRSkgPCAwKQorCQllbG9n KFdBUk5JTkcsICJtYWR2aXNlKE1BRFZfSFVHRVBBR0UpIG9uIGV4cGFuZGVkIGJ1ZmZlciBwb29s IGFycmF5OiAlbSIpOworCisJaWYgKG1hZHZpc2UoKHZvaWQgKikgbXMsIG1lIC0gbXMsIE1BRFZf UE9QVUxBVEVfV1JJVEUpIDwgMCkKKwl7CisJCWVsb2coV0FSTklORywgIm1hZHZpc2UoTUFEVl9Q T1BVTEFURV9XUklURSkgb24gZXhwYW5kZWQgYnVmZmVyIHBvb2wgYXJyYXk6ICVtIik7CisJCSpz dWNjZXNzID0gZmFsc2U7CisJCXJldHVybiAwOworCX0KKyNlbHNlCisJLyoKKwkgKiBObyBNQURW X1BPUFVMQVRFX1dSSVRFIG9uIHRoaXMgcGxhdGZvcm06IG1lbXNldCBpcyB0aGUgb25seSB3YXkg dG8KKwkgKiBmb3JjZSBwb3B1bGF0aW9uLiBtZW1zZXQgY2FuJ3QgcmV0dXJuIGEgZmFpbHVyZSwg c28gdGhpcyBwYXRoIGFsd2F5cworCSAqICJzdWNjZWVkcyI7IGlmIHRoZSB1bmRlcmx5aW5nIG1h cHBpbmcgaXMgYWN0dWFsbHkgdW5iYWNrZWQgdGhlIFNJR0JVUworCSAqIHdpbGwgaGl0IGR1cmlu ZyB0aGUgbWVtc2V0IGl0c2VsZi4KKwkgKi8KKwltZW1zZXQoKHZvaWQgKikgcmVnaW9uX3N0YXJ0 LCAwLCBsZW4pOworI2VuZGlmCisKKwlyZXR1cm4gbGVuOworI2Vsc2UKKwlyZXR1cm4gMDsJCQkJ CS8qIG5vIGxvY2FsIHBoeXNpY2FsIHdvcmsgb2ZmIExpbnV4ICovCisjZW5kaWYKK30KKworLyoK KyAqIFJldHVybiB0aGUgZXhhY3QgYnl0ZSBsZW5ndGggcGFzc2VkIHRvIGEgc3VjY2Vzc2Z1bCBN QURWX1JFTU9WRSwgb3IgMCBpZiBubworICogcGFnZS1hbGlnbmVkIHJ1biB3YXMgZnJlZWQgKG5v LW9wIGNhc2UpLiAgT24gbWFkdmlzZSgpIGZhaWx1cmUsICpzdWNjZXNzIGlzCisgKiBzZXQgdG8g ZmFsc2UgYW5kIDAgaXMgcmV0dXJuZWQuCisgKgorICogVGhlIHJlbGVhc2VkIHNsaWNlIGlzIFts b3dOQnVmZmVycywgaGlnaE5CdWZmZXJzKTsgd2UgdHJpbSBwaHlzaWNhbCBzdG9yYWdlCisgKiBm b3IgdGhlIGVudGlyZSBpbmFjdGl2ZSB0YWlsIFtsb3dOQnVmZmVycywgTWF4TkJ1ZmZlcnMpIHNv IHRoYXQgaW5jcmVtZW50YWwKKyAqIHNocmlua3MgZG9uJ3Qgc3RyYW5kIHBhZ2UtYWxpZ25lZCBz cGFucyBhYm92ZSBoaWdoTkJ1ZmZlcnMgKHNlZSBjb21tZW50CisgKiBpbnNpZGUpLgorICovCitz dGF0aWMgU2l6ZQorQnVmZmVyUG9vbEFycmF5UGh5c2ljYWxTaHJpbmsodm9pZCAqYmFzZXB0ciwg U2l6ZSBlbGVtX3NpemUsCisJCQkJCQkJICBpbnQgbG93TkJ1ZmZlcnMsIGludCBoaWdoTkJ1ZmZl cnMsCisJCQkJCQkJICBib29sICpzdWNjZXNzKQoreworI2lmZGVmIF9fbGludXhfXworCWNoYXIJ ICAgKmJhc2U7CisJU2l6ZQkJb2ZmOworCVNpemUJCXRhaWxfbGVuOworCVNpemUJCWxvZ2ljYWxf bGVuOworCXVpbnRwdHJfdAlyZWdpb25fc3RhcnQ7CisJdWludHB0cl90CXJlZ2lvbl9lbmQ7CisJ dWludHB0cl90CW1zOworCXVpbnRwdHJfdAltZTsKKwlTaXplCQlvc19wYWdlX3NpemUgPSBidWZm ZXJfcG9vbF9tYWR2aXNlX2FsaWdubWVudCgpOworI2VuZGlmCisKKwlpZiAoYmFzZXB0ciA9PSBO VUxMIHx8IGVsZW1fc2l6ZSA9PSAwIHx8IGxvd05CdWZmZXJzID49IGhpZ2hOQnVmZmVycykKKwkJ cmV0dXJuIDA7CisKKyNpZmRlZiBfX2xpbnV4X18KKwliYXNlID0gKGNoYXIgKikgYmFzZXB0cjsK KwlBc3NlcnQob3NfcGFnZV9zaXplICE9IDApOworCisJb2ZmID0gbXVsX3NpemUoKFNpemUpIGxv d05CdWZmZXJzLCBlbGVtX3NpemUpOworCS8qIFNlZSBmdW5jdGlvbiBoZWFkZXI6IHRhaWwgc3Bh bnMgdXAgdG8gTWF4TkJ1ZmZlcnMsIG5vdCBoaWdoTkJ1ZmZlcnMuICovCisJdGFpbF9sZW4gPSBt dWxfc2l6ZSgoU2l6ZSkgKEdldE1heE5CdWZmZXJzKCkgLSBsb3dOQnVmZmVycyksIGVsZW1fc2l6 ZSk7CisJbG9naWNhbF9sZW4gPSBtdWxfc2l6ZSgoU2l6ZSkgKGhpZ2hOQnVmZmVycyAtIGxvd05C dWZmZXJzKSwgZWxlbV9zaXplKTsKKworCXJlZ2lvbl9zdGFydCA9ICh1aW50cHRyX3QpIChiYXNl ICsgb2ZmKTsKKwlyZWdpb25fZW5kID0gcmVnaW9uX3N0YXJ0ICsgdGFpbF9sZW47CisKKwkvKgor CSAqIE1BRFZfUkVNT1ZFIHJlcXVpcmVzIGEgcGFnZS1hbGlnbmVkIGFkZHJlc3MgYW5kIGEgbXVs dGlwbGUgb2YgdGhlIHBhZ2UKKwkgKiBzaXplIGZvciBsZW5ndGguICBPbmx5IGZ1bGwgcGFnZXMg d2hvbGx5IGluc2lkZSB0aGUgcmVsZWFzZWQgbG9naWNhbAorCSAqIHJhbmdlIGNhbiBiZSB0cmlt bWVkLgorCSAqLworCW1zID0gVFlQRUFMSUdOKChTaXplKSBvc19wYWdlX3NpemUsIHJlZ2lvbl9z dGFydCk7CisJbWUgPSBUWVBFQUxJR05fRE9XTigoU2l6ZSkgb3NfcGFnZV9zaXplLCByZWdpb25f ZW5kKTsKKworCWlmIChtcyA+PSBtZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAobWFkdmlzZSgodm9p ZCAqKSBtcywgbWUgLSBtcywgTUFEVl9SRU1PVkUpIDwgMCkKKwl7CisJCWVsb2coV0FSTklORywg Im1hZHZpc2UoTUFEVl9SRU1PVkUpIG9uIGJ1ZmZlciBwb29sIGFycmF5IHRhaWwgZmFpbGVkOiAl bSIpOworCQkqc3VjY2VzcyA9IGZhbHNlOworCQlyZXR1cm4gMDsKKwl9CisKKyNpZmRlZiBVU0Vf VkFMR1JJTkQKKwlWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUygodm9pZCAqKSBtcywgbWUgLSBt cyk7CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJLyoKKwkgKiBDYXRjaCBz dHJheSByZWFkcy93cml0ZXMgYWZ0ZXIgc2hyaW5rLgorCSAqLworCWlmIChtcHJvdGVjdCgodm9p ZCAqKSBtcywgbWUgLSBtcywgUFJPVF9OT05FKSA8IDAgJiYgZXJybm8gIT0gRU5PTUVNKQorCQll bG9nKFdBUk5JTkcsICJtcHJvdGVjdChQUk9UX05PTkUpIG9uIGJ1ZmZlciBwb29sIGFycmF5IHRh aWw6ICVtIik7CisjZW5kaWYKKworCXJldHVybiBsb2dpY2FsX2xlbjsKKyNlbHNlCisJcmV0dXJu IDA7CQkJCQkvKiBubyBsb2NhbCBwaHlzaWNhbCB3b3JrIG9mZiBMaW51eCAqLworI2VuZGlmCit9 CiAKIC8qCiAgKiBSZWdpc3RlciBzaGFyZWQgbWVtb3J5IGFyZWEgZm9yIHRoZSBidWZmZXIgcG9v bC4KQEAgLTc2LDI2ICsyODQsNTIgQEAgY29uc3QgU2htZW1DYWxsYmFja3MgQnVmZmVyTWFuYWdl clNobWVtQ2FsbGJhY2tzID0gewogc3RhdGljIHZvaWQKIEJ1ZmZlck1hbmFnZXJTaG1lbVJlcXVl c3Qodm9pZCAqYXJnKQogewotCVNobWVtUmVxdWVzdFN0cnVjdCgubmFtZSA9ICJCdWZmZXIgRGVz Y3JpcHRvcnMiLAotCQkJCQkgICAuc2l6ZSA9IE5CdWZmZXJzICogc2l6ZW9mKEJ1ZmZlckRlc2NQ YWRkZWQpLAotCS8qIEFsaWduIGRlc2NyaXB0b3JzIHRvIGEgY2FjaGVsaW5lIGJvdW5kYXJ5LiAq LwotCQkJCQkgICAuYWxpZ25tZW50ID0gUEdfQ0FDSEVfTElORV9TSVpFLAotCQkJCQkgICAucHRy ID0gKHZvaWQgKiopICZCdWZmZXJEZXNjcmlwdG9ycywKLQkJKTsKKwlib29sCQlmb3VuZEJ1ZnMs CisJCQkJZm91bmREZXNjcywKKwkJCQlmb3VuZElPQ1YsCisJCQkJZm91bmRCdWZDa3B0OworCWlu dAkJCW1heF9uYnVmZmVyczsKKwlTaXplCQlvc19wYWdlX3NpemUgPSBidWZmZXJfcG9vbF9tYWR2 aXNlX2FsaWdubWVudCgpOworCUFzc2VydChvc19wYWdlX3NpemUgIT0gMCk7CisKKwlpZiAoZW5h YmxlX2R5bmFtaWNfc2hhcmVkX2J1ZmZlcnMpCisJeworCQlpZiAoTWF4TkJ1ZmZlcnMgPT0gMCkK KwkJCWVyZXBvcnQoRkFUQUwsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJtYXhfc2hhcmVkX2J1ZmZlcnMgbXVzdCBiZSBzZXQg d2hlbiBlbmFibGVfZHluYW1pY19zaGFyZWRfYnVmZmVycyBpcyBvbiIpLAorCQkJCQkgZXJyaGlu dCgiU2V0IG1heF9zaGFyZWRfYnVmZmVycyB0byBhIHZhbHVlIGF0IGxlYXN0IGFzIGxhcmdlIGFz IHNoYXJlZF9idWZmZXJzLiIpKSk7CisJCWlmIChNYXhOQnVmZmVycyA8IE5CdWZmZXJzR1VDKQor CQkJZXJlcG9ydChGQVRBTCwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRF Ul9WQUxVRSksCisJCQkJCSBlcnJtc2coIm1heF9zaGFyZWRfYnVmZmVycyAoJWQpIG11c3QgYmUg YXQgbGVhc3Qgc2hhcmVkX2J1ZmZlcnMgKCVkKSB3aGVuIGVuYWJsZV9keW5hbWljX3NoYXJlZF9i dWZmZXJzIGlzIG9uIiwKKwkJCQkJCQlNYXhOQnVmZmVycywgTkJ1ZmZlcnNHVUMpKSk7CisJfQor CisJbWF4X25idWZmZXJzID0gR2V0TWF4TkJ1ZmZlcnMoKTsKKworCS8qIEFsaWduIGRlc2NyaXB0 b3JzIGZvciBtYWR2aXNlIChzYW1lIGdyYW51bGFyaXR5IGFzIGJ1ZmZlciBibG9ja3MpLiAqLwor CUJ1ZmZlckRlc2NyaXB0b3JzID0gKEJ1ZmZlckRlc2NQYWRkZWQgKikKKwkJVFlQRUFMSUdOKG9z X3BhZ2Vfc2l6ZSwKKwkJCQkgIFNobWVtSW5pdFN0cnVjdCgiQnVmZmVyIERlc2NyaXB0b3JzIiwK KwkJCQkJCQkJICBtYXhfbmJ1ZmZlcnMgKiBzaXplb2YoQnVmZmVyRGVzY1BhZGRlZCkgKyAyICog b3NfcGFnZV9zaXplLAorCQkJCQkJCQkgICZmb3VuZERlc2NzKSk7CiAKIAlTaG1lbVJlcXVlc3RT dHJ1Y3QoLm5hbWUgPSAiQnVmZmVyIEJsb2NrcyIsCiAJCQkJCSAgIC5zaXplID0gTkJ1ZmZlcnMg KiAoU2l6ZSkgQkxDS1NaLAogCS8qIEFsaWduIGJ1ZmZlciBwb29sIG9uIElPIHBhZ2Ugc2l6ZSBi b3VuZGFyeS4gKi8KLQkJCQkJICAgLmFsaWdubWVudCA9IFBHX0lPX0FMSUdOX1NJWkUsCi0JCQkJ CSAgIC5wdHIgPSAodm9pZCAqKikgJkJ1ZmZlckJsb2NrcywKLQkJKTsKKwlCdWZmZXJCbG9ja3Mg PSAoY2hhciAqKQorCQlUWVBFQUxJR04ob3NfcGFnZV9zaXplLAorCQkJCVNobWVtSW5pdFN0cnVj dCgiQnVmZmVyIEJsb2NrcyIsCisJCQkJCW1heF9uYnVmZmVycyAqIChTaXplKSBCTENLU1ogKyAy ICogb3NfcGFnZV9zaXplLAorCQkJCQkJCQkmZm91bmRCdWZzKSk7CiAKLQlTaG1lbVJlcXVlc3RT dHJ1Y3QoLm5hbWUgPSAiQnVmZmVyIElPIENvbmRpdGlvbiBWYXJpYWJsZXMiLAotCQkJCQkgICAu c2l6ZSA9IE5CdWZmZXJzICogc2l6ZW9mKENvbmRpdGlvblZhcmlhYmxlTWluaW1hbGx5UGFkZGVk KSwKLQkvKiBBbGlnbiBkZXNjcmlwdG9ycyB0byBhIGNhY2hlbGluZSBib3VuZGFyeS4gKi8KLQkJ CQkJICAgLmFsaWdubWVudCA9IFBHX0NBQ0hFX0xJTkVfU0laRSwKLQkJCQkJICAgLnB0ciA9ICh2 b2lkICoqKSAmQnVmZmVySU9DVkFycmF5LAotCQkpOworCS8qIEFsaWduIEkvTyBjb25kaXRpb24g dmFyaWFibGVzIGZvciBtYWR2aXNlLiAqLworCUJ1ZmZlcklPQ1ZBcnJheSA9IChDb25kaXRpb25W YXJpYWJsZU1pbmltYWxseVBhZGRlZCAqKQorCQlUWVBFQUxJR04ob3NfcGFnZV9zaXplLAorCQkJ CSAgU2htZW1Jbml0U3RydWN0KCJCdWZmZXIgSU8gQ29uZGl0aW9uIFZhcmlhYmxlcyIsCisJCQkJ CQkJCSAgbWF4X25idWZmZXJzICogc2l6ZW9mKENvbmRpdGlvblZhcmlhYmxlTWluaW1hbGx5UGFk ZGVkKSArIDIgKiBvc19wYWdlX3NpemUsCisJCQkJCQkJCSAgJmZvdW5kSU9DVikpOwogCiAJLyoK IAkgKiBUaGUgYXJyYXkgdXNlZCB0byBzb3J0IHRvLWJlLWNoZWNrcG9pbnRlZCBidWZmZXIgaWRz IGlzIGxvY2F0ZWQgaW4KQEAgLTEwNCwxMSArMzM4LDExIEBAIEJ1ZmZlck1hbmFnZXJTaG1lbVJl cXVlc3Qodm9pZCAqYXJnKQogCSAqIHRoZSBjaGVja3BvaW50ZXIgaXMgcmVzdGFydGVkLCBtZW1v cnkgYWxsb2NhdGlvbiBmYWlsdXJlcyB3b3VsZCBiZQogCSAqIHBhaW5mdWwuCiAJICovCi0JU2ht ZW1SZXF1ZXN0U3RydWN0KC5uYW1lID0gIkNoZWNrcG9pbnQgQnVmZmVySWRzIiwKLQkJCQkJICAg LnNpemUgPSBOQnVmZmVycyAqIHNpemVvZihDa3B0U29ydEl0ZW0pLAotCQkJCQkgICAucHRyID0g KHZvaWQgKiopICZDa3B0QnVmZmVySWRzLAotCQkpOwotfQorCUNrcHRCdWZmZXJJZHMgPSAoQ2tw dFNvcnRJdGVtICopCisJCVRZUEVBTElHTihvc19wYWdlX3NpemUsCisJCQkJICBTaG1lbUluaXRT dHJ1Y3QoIkNoZWNrcG9pbnQgQnVmZmVySWRzIiwKKwkJCQkJCQkJICBtYXhfbmJ1ZmZlcnMgKiBz aXplb2YoQ2twdFNvcnRJdGVtKSArIDIgKiBvc19wYWdlX3NpemUsCisJCQkJCQkJCSAgJmZvdW5k QnVmQ2twdCkpOwogCiAvKgogICogSW5pdGlhbGl6ZSBzaGFyZWQgYnVmZmVyIHBvb2wKQEAgLTEy NCwzMCArMzU4LDE3OSBAQCBCdWZmZXJNYW5hZ2VyU2htZW1Jbml0KHZvaWQgKmFyZykKIAkgKi8K IAlmb3IgKGludCBpID0gMDsgaSA8IE5CdWZmZXJzOyBpKyspCiAJewotCQlCdWZmZXJEZXNjICpi dWYgPSBHZXRCdWZmZXJEZXNjcmlwdG9yKGkpOwotCi0JCUNsZWFyQnVmZmVyVGFnKCZidWYtPnRh Zyk7CisJCWludAkJCWk7CiAKLQkJcGdfYXRvbWljX2luaXRfdTY0KCZidWYtPnN0YXRlLCAwKTsK LQkJYnVmLT53YWl0X2JhY2tlbmRfcGdwcm9jbm8gPSBJTlZBTElEX1BST0NfTlVNQkVSOworCQlp ZiAoZW5hYmxlX2R5bmFtaWNfc2hhcmVkX2J1ZmZlcnMpCisJCXsKKwkJCWJvb2wJCXN1Y2Nlc3Mg PSB0cnVlOwogCi0JCWJ1Zi0+YnVmX2lkID0gaTsKKwkJCS8qCisJCQkgKiBSZXF1ZXN0IHBoeXNp Y2FsIG1lbW9yeSBmb3IgTkJ1ZmZlcnNHVUMuIEEgbWFkdmlzZSBmYWlsdXJlCisJCQkgKiBoZXJl IG1lYW5zIHdlIGNhbm5vdCBlYWdlcmx5IHBvcHVsYXRlIHRoZSBpbml0aWFsIGJ1ZmZlcgorCQkJ ICogcG9vbDsgcmF0aGVyIHRoYW4gc3RhcnQgd2l0aCBwb3NzaWJseS11bmJhY2tlZCBtZW1vcnkg YW5kCisJCQkgKiBTSUdCVVMgb24gZmlyc3QgYWNjZXNzLCB3ZSBQQU5JQyBzbyB0aGUgcG9zdG1h c3RlciBmYWlscworCQkJICogdG8gc3RhcnQgY2xlYW5seS4KKwkJCSAqLworCQkJQnVmZmVyTWFu YWdlclNobWVtRXhwYW5kKDAsIE5CdWZmZXJzR1VDLCAmc3VjY2Vzcyk7CisJCQlpZiAoIXN1Y2Nl c3MpCisJCQkJZWxvZyhQQU5JQywgImNvdWxkIG5vdCBwb3B1bGF0ZSBpbml0aWFsIHNoYXJlZCBi dWZmZXIgcG9vbDogbWFkdmlzZShNQURWX1BPUFVMQVRFX1dSSVRFKSBmYWlsZWQiKTsKKwkJfQog Ci0JCXBnYWlvX3dyZWZfY2xlYXIoJmJ1Zi0+aW9fd3JlZik7Ci0KLQkJcHJvY2xpc3RfaW5pdCgm YnVmLT5sb2NrX3dhaXRlcnMpOwotCQlDb25kaXRpb25WYXJpYWJsZUluaXQoQnVmZmVyRGVzY3Jp cHRvckdldElPQ1YoYnVmKSk7CisJCS8qCisJCSAqIEluaXRpYWxpemUgYWxsIHRoZSBidWZmZXIg aGVhZGVycyBmb3IgdGhlIGFjdGl2ZSBwb29sIHNpemUuCisJCSAqIFRoZSBjbG9jayBzd2VlcCBp cyB0aGUgc29sZSByZXBsYWNlbWVudCBtZWNoYW5pc20sIHNvIHRoZXJlIGlzCisJCSAqIG5vIGZy ZWVsaXN0IHRvIGxpbmsgdGhlbSBpbnRvLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IE5CdWZm ZXJzR1VDOyBpKyspCisJCQlJbml0aWFsaXplQnVmZmVyKGkpOwogCX0KIAogCS8qIEluaXRpYWxp emUgcGVyLWJhY2tlbmQgZmlsZSBmbHVzaCBjb250ZXh0ICovCiAJV3JpdGViYWNrQ29udGV4dElu aXQoJkJhY2tlbmRXcml0ZWJhY2tDb250ZXh0LAogCQkJCQkJICZiYWNrZW5kX2ZsdXNoX2FmdGVy KTsKKworCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgRFNCIHdhdGVyIG1hcmtzLiBEU0JDdHJsIGlz IE5VTEwgaW4gc3BlY2lhbCBjb250ZXh0cworCSAqIHN1Y2ggYXMgdGhlIFdBTCByZWRvIHByb2Nl c3MsIHdoZXJlIERTQiBpcyBub3QgdXNlZC4KKwkgKi8KKwlpZiAoRFNCQ3RybCAhPSBOVUxMICYm ICFmb3VuZERlc2NzKQorCXsKKwkJcGdfYXRvbWljX3dyaXRlX3UzMigmRFNCQ3RybC0+bG93TkJ1 ZmZlcnMsIE5CdWZmZXJzR1VDKTsKKwkJcGdfYXRvbWljX3dyaXRlX3UzMigmRFNCQ3RybC0+aGln aE5CdWZmZXJzLCBOQnVmZmVyc0dVQyk7CisJfQogfQogCi1zdGF0aWMgdm9pZAotQnVmZmVyTWFu YWdlclNobWVtQXR0YWNoKHZvaWQgKmFyZykKKy8qCisgKiBCdWZmZXJNYW5hZ2VyU2htZW1TaXpl CisgKgorICogQWxsIGJ1ZmZlciBhcnJheXMgYXJlIGFsbG9jYXRlZCBpbiB0aGUgc2luZ2xlIHNo YXJlZC1tZW1vcnkgaGVhcC4gIFdlIHNpemUKKyAqIHRoZW0gdG8gR2V0TWF4TkJ1ZmZlcnMoKSBz byB0aGUgcG9vbCBmaXRzIGl0cyB1cHBlciBib3VuZC4KKyAqLworU2l6ZQorQnVmZmVyTWFuYWdl clNobWVtU2l6ZSh2b2lkKQogewotCS8qIEluaXRpYWxpemUgcGVyLWJhY2tlbmQgZmlsZSBmbHVz aCBjb250ZXh0ICovCi0JV3JpdGViYWNrQ29udGV4dEluaXQoJkJhY2tlbmRXcml0ZWJhY2tDb250 ZXh0LAotCQkJCQkJICZiYWNrZW5kX2ZsdXNoX2FmdGVyKTsKKwlTaXplCQlzaXplID0gMDsKKwlT aXplCQlvc19wYWdlX3NpemUgPSBidWZmZXJfcG9vbF9tYWR2aXNlX2FsaWdubWVudCgpOworCWlu dAkJCW1heF9uYnVmZmVycyA9IEdldE1heE5CdWZmZXJzKCk7CisJQXNzZXJ0KG9zX3BhZ2Vfc2l6 ZSAhPSAwKTsKKworCS8qIHNpemUgb2YgYnVmZmVyIGRlc2NyaXB0b3JzLCBwbHVzIGFsaWdubWVu dCBwYWRkaW5nIGZvciBtYWR2aXNlICovCisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXpl KG1heF9uYnVmZmVycywgc2l6ZW9mKEJ1ZmZlckRlc2NQYWRkZWQpKSk7CisJc2l6ZSA9IGFkZF9z aXplKHNpemUsIG11bF9zaXplKDIsIG9zX3BhZ2Vfc2l6ZSkpOworCisJLyogc2l6ZSBvZiBkYXRh IHBhZ2VzLCBwbHVzIGFsaWdubWVudCBwYWRkaW5nICovCisJc2l6ZSA9IGFkZF9zaXplKHNpemUs IG11bF9zaXplKDIsIG9zX3BhZ2Vfc2l6ZSkpOworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxf c2l6ZShtYXhfbmJ1ZmZlcnMsIChTaXplKSBCTENLU1opKTsKKworCS8qIHNpemUgb2Ygc3R1ZmYg Y29udHJvbGxlZCBieSBmcmVlbGlzdC5jICovCisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFN0cmF0 ZWd5U2htZW1TaXplKCkpOworCisJLyogc2l6ZSBvZiBJL08gY29uZGl0aW9uIHZhcmlhYmxlcywg cGx1cyBhbGlnbm1lbnQgcGFkZGluZyBmb3IgbWFkdmlzZSAqLworCXNpemUgPSBhZGRfc2l6ZShz aXplLCBtdWxfc2l6ZShtYXhfbmJ1ZmZlcnMsCisJCQkJCQkJCSAgIHNpemVvZihDb25kaXRpb25W YXJpYWJsZU1pbmltYWxseVBhZGRlZCkpKTsKKwlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3Np emUoMiwgb3NfcGFnZV9zaXplKSk7CisKKwkvKiBzaXplIG9mIGNoZWNrcG9pbnQgc29ydCBhcnJh eSBpbiBidWZtZ3IuYywgcGx1cyBhbGlnbm1lbnQgcGFkZGluZyAqLworCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBtdWxfc2l6ZShtYXhfbmJ1ZmZlcnMsIHNpemVvZihDa3B0U29ydEl0ZW0pKSk7CisJ c2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKDIsIG9zX3BhZ2Vfc2l6ZSkpOworCisJcmV0 dXJuIHNpemU7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBiYWNraW5nIG1lbW9yeSBwYWdlcyBmcm9t IHRoZSBPUyBmb3IgdGhlIGJ1ZmZlci1wb29sIHNsaWNlCisgKiBbbG93TkJ1ZmZlcnMsIGhpZ2hO QnVmZmVycykuCisgKgorICogUmV0dXJucyB0aGUgc3VtLCBvdmVyIHRoZSBmb3VyIGJ1ZmZlci1w b29sIGFycmF5cywgb2YgdGhlIGV4YWN0IGJ5dGUgbGVuZ3RoCisgKiBlYWNoIEJ1ZmZlclBvb2xB cnJheVBoeXNpY2FsRXhwYW5kIGNhbGwgdG91Y2hlZC4gKnN1Y2Nlc3MgaXMgc2V0IHRvIHRydWUg b24KKyAqIHN1Y2Nlc3MsIG9yIGZhbHNlIGlmIGFueSBtYWR2aXNlKE1BRFZfUE9QVUxBVEVfV1JJ VEUpIGNhbGwgZmFpbGVkLgorICovCitTaXplCitCdWZmZXJNYW5hZ2VyU2htZW1FeHBhbmQoaW50 IGxvd05CdWZmZXJzLCBpbnQgaGlnaE5CdWZmZXJzLCBib29sICpzdWNjZXNzKQoreworCWludAkJ CW1heF9uYnVmZmVycyA9IEdldE1heE5CdWZmZXJzKCk7CisJU2l6ZQkJdG90YWwgPSAwOworCisJ aWYgKGhpZ2hOQnVmZmVycyA+IG1heF9uYnVmZmVycykKKwkJZWxvZyhQQU5JQywgImJ1ZmZlciBw b29sIGV4cGFuZCBleGNlZWRzIGFsbG9jYXRpb24gKGxvdz0lZCBoaWdoPSVkIGFsbG9jYXRlZD0l ZCkiLAorCQkJIGxvd05CdWZmZXJzLCBoaWdoTkJ1ZmZlcnMsIG1heF9uYnVmZmVycyk7CisKKwlB c3NlcnQobG93TkJ1ZmZlcnMgPCBoaWdoTkJ1ZmZlcnMpOworCisJKnN1Y2Nlc3MgPSB0cnVlOwor CisJdG90YWwgPSBhZGRfc2l6ZSh0b3RhbCwgQnVmZmVyUG9vbEFycmF5UGh5c2ljYWxFeHBhbmQo QnVmZmVyRGVzY3JpcHRvcnMsIHNpemVvZihCdWZmZXJEZXNjUGFkZGVkKSwKKwkJCQkJCQkJCQkJ CQkJICBsb3dOQnVmZmVycywgaGlnaE5CdWZmZXJzLCBzdWNjZXNzKSk7CisJaWYgKCEqc3VjY2Vz cykKKwkJcmV0dXJuIHRvdGFsOworCisJdG90YWwgPSBhZGRfc2l6ZSh0b3RhbCwgQnVmZmVyUG9v bEFycmF5UGh5c2ljYWxFeHBhbmQoQnVmZmVyQmxvY2tzLCAoU2l6ZSkgQkxDS1NaLAorCQkJCQkJ CQkJCQkJCQkgIGxvd05CdWZmZXJzLCBoaWdoTkJ1ZmZlcnMsIHN1Y2Nlc3MpKTsKKwlpZiAoISpz dWNjZXNzKQorCQlyZXR1cm4gdG90YWw7CisKKwl0b3RhbCA9IGFkZF9zaXplKHRvdGFsLCBCdWZm ZXJQb29sQXJyYXlQaHlzaWNhbEV4cGFuZChCdWZmZXJJT0NWQXJyYXksCisJCQkJCQkJCQkJCQkJ CSAgc2l6ZW9mKENvbmRpdGlvblZhcmlhYmxlTWluaW1hbGx5UGFkZGVkKSwKKwkJCQkJCQkJCQkJ CQkJICBsb3dOQnVmZmVycywgaGlnaE5CdWZmZXJzLCBzdWNjZXNzKSk7CisJaWYgKCEqc3VjY2Vz cykKKwkJcmV0dXJuIHRvdGFsOworCisJdG90YWwgPSBhZGRfc2l6ZSh0b3RhbCwgQnVmZmVyUG9v bEFycmF5UGh5c2ljYWxFeHBhbmQoQ2twdEJ1ZmZlcklkcywgc2l6ZW9mKENrcHRTb3J0SXRlbSks CisJCQkJCQkJCQkJCQkJCSAgbG93TkJ1ZmZlcnMsIGhpZ2hOQnVmZmVycywgc3VjY2VzcykpOwor CXJldHVybiB0b3RhbDsKK30KKwordm9pZAorQnVmZmVyTWFuYWdlclNobWVtSW5pdEJ1ZmZlcnMo aW50IGxvd05CdWZmZXJzLCBpbnQgaGlnaE5CdWZmZXJzKQoreworCWludAkJCWk7CisKKwkvKiBD bG9jayBzd2VlcCB3aWxsIHBpY2sgdXAgdGhlIG5ldyBidWZmZXJzOyBub3RoaW5nIGVsc2UgdG8g ZG8uICovCisJZm9yIChpID0gbG93TkJ1ZmZlcnM7IGkgPCBoaWdoTkJ1ZmZlcnM7IGkrKykKKwkJ SW5pdGlhbGl6ZUJ1ZmZlcihpKTsKK30KKworLyoKKyAqIFJlbGVhc2UgdGhlIGJ1ZmZlci1wb29s IHNsaWNlIFtsb3dOQnVmZmVycywgaGlnaE5CdWZmZXJzKSBiYWNrIHRvIHRoZSBPUworICogd2hl biBzaHJpbmtpbmcgdGhlIHBvb2wuCisgKgorICogUmV0dXJucyB0aGUgc3VtLCBvdmVyIHRoZSBm b3VyIGJ1ZmZlci1wb29sIGFycmF5cywgb2YgdGhlIGV4YWN0IGJ5dGUgbGVuZ3RoCisgKiBlYWNo IEJ1ZmZlclBvb2xBcnJheVBoeXNpY2FsU2hyaW5rIGNhbGwgdG91Y2hlZC4gKnN1Y2Nlc3MgaXMg c2V0IHRvIHRydWUgb24KKyAqIHN1Y2Nlc3MsIG9yIGZhbHNlIGlmIGFueSBtYWR2aXNlKCkgY2Fs bCBmYWlsZWQ7IG9uIGZhaWx1cmUgd2Ugc3RvcCBhZnRlciB0aGUKKyAqIGZhaWxpbmcgYXJyYXkg KHNvIHRvdGFsIHJlZmxlY3RzIG9ubHkgdGhlIGFycmF5cyB0aGF0IHdlcmUgZnVsbHkgcmVsZWFz ZWQpLgorICovCitTaXplCitCdWZmZXJNYW5hZ2VyU2htZW1TaHJpbmsoaW50IGxvd05CdWZmZXJz LCBpbnQgaGlnaE5CdWZmZXJzLCBib29sICpzdWNjZXNzKQoreworCWludAkJCW1heF9uYnVmZmVy cyA9IEdldE1heE5CdWZmZXJzKCk7CisJU2l6ZQkJdG90YWwgPSAwOworCisJaWYgKGhpZ2hOQnVm ZmVycyA+IG1heF9uYnVmZmVycykKKwkJZWxvZyhQQU5JQywgImJ1ZmZlciBwb29sIHNocmluayBl eGNlZWRzIGFsbG9jYXRpb24gKGxvdz0lZCBoaWdoPSVkIGFsbG9jYXRlZD0lZCkiLAorCQkJIGxv d05CdWZmZXJzLCBoaWdoTkJ1ZmZlcnMsIG1heF9uYnVmZmVycyk7CisKKwlBc3NlcnQobG93TkJ1 ZmZlcnMgPCBoaWdoTkJ1ZmZlcnMpOworCisJKnN1Y2Nlc3MgPSB0cnVlOworCisJdG90YWwgPSBh ZGRfc2l6ZSh0b3RhbCwgQnVmZmVyUG9vbEFycmF5UGh5c2ljYWxTaHJpbmsoQnVmZmVyRGVzY3Jp cHRvcnMsIHNpemVvZihCdWZmZXJEZXNjUGFkZGVkKSwKKwkJCQkJCQkJCQkJCQkJICBsb3dOQnVm ZmVycywgaGlnaE5CdWZmZXJzLCBzdWNjZXNzKSk7CisJaWYgKCEqc3VjY2VzcykKKwkJcmV0dXJu IHRvdGFsOworCisJdG90YWwgPSBhZGRfc2l6ZSh0b3RhbCwgQnVmZmVyUG9vbEFycmF5UGh5c2lj YWxTaHJpbmsoQnVmZmVyQmxvY2tzLCAoU2l6ZSkgQkxDS1NaLAorCQkJCQkJCQkJCQkJCQkgIGxv d05CdWZmZXJzLCBoaWdoTkJ1ZmZlcnMsIHN1Y2Nlc3MpKTsKKwlpZiAoISpzdWNjZXNzKQorCQly ZXR1cm4gdG90YWw7CisKKwl0b3RhbCA9IGFkZF9zaXplKHRvdGFsLCBCdWZmZXJQb29sQXJyYXlQ aHlzaWNhbFNocmluayhCdWZmZXJJT0NWQXJyYXksCisJCQkJCQkJCQkJCQkJCSAgc2l6ZW9mKENv bmRpdGlvblZhcmlhYmxlTWluaW1hbGx5UGFkZGVkKSwKKwkJCQkJCQkJCQkJCQkJICBsb3dOQnVm ZmVycywgaGlnaE5CdWZmZXJzLCBzdWNjZXNzKSk7CisJaWYgKCEqc3VjY2VzcykKKwkJcmV0dXJu IHRvdGFsOworCisJdG90YWwgPSBhZGRfc2l6ZSh0b3RhbCwgQnVmZmVyUG9vbEFycmF5UGh5c2lj YWxTaHJpbmsoQ2twdEJ1ZmZlcklkcywgc2l6ZW9mKENrcHRTb3J0SXRlbSksCisJCQkJCQkJCQkJ CQkJCSAgbG93TkJ1ZmZlcnMsIGhpZ2hOQnVmZmVycywgc3VjY2VzcykpOworCisJcmV0dXJuIHRv dGFsOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX3Jlc2l6 ZS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX3Jlc2l6ZS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hZmI1MjY4ZjYzNgotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9yZXNpemUuYwpAQCAtMCwwICsxLDU0 NCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogYnVmX3Jlc2l6ZS5jCisgKgkgIE9ubGlu ZSByZXNpemUgY29vcmRpbmF0b3IgZm9yIHRoZSBzaGFyZWQgYnVmZmVyIHBvb2wuCisgKgorICog UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2Yg dGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkg IHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9yZXNpemUuYworICoKKyAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSA8bWF0aC5o PgorI2luY2x1ZGUgPHNpZ25hbC5oPgorCisjaW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUgImZ1 bmNhcGkuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJwb3J0YWJpbGl0eS9p bnN0cl90aW1lLmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dyaXRlci5oIgorI2luY2x1ZGUg InBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWZfaW50ZXJuYWxz LmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2R5bmFt aWNfc2hhcmVkX2J1ZmZlcnMuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgorI2luY2x1ZGUg InN0b3JhZ2UvbGF0Y2guaCIKKyNpbmNsdWRlICJzdG9yYWdlL2x3bG9jay5oIgorI2luY2x1ZGUg InN0b3JhZ2UvcGdfc2htZW0uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Btc2lnbmFsLmgiCisjaW5j bHVkZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgor I2luY2x1ZGUgInV0aWxzL2FjbC5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5j bHVkZSAidXRpbHMvZ3VjLmgiCisjaW5jbHVkZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCisK K1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfcmVzaXplX3NoYXJlZF9idWZmZXJzKTsKKworLyoKKyAq IGBjb29yZGluYXRvcl9hY3RpdmVgIHRlbGxzIHRoZSBjbGVhbnVwIGNhbGxiYWNrIHdoZXRoZXIg KnRoaXMqIGJhY2tlbmQKKyAqIGN1cnJlbnRseSBob2xkcyB0aGUgcmVzaXplX2luX3Byb2dyZXNz IGZsYWcuCisgKgorICogYGNsZWFudXBfcmVnaXN0ZXJlZGAgZW5zdXJlcyB3ZSBvbmx5IGNhbGwg YmVmb3JlX3NobWVtX2V4aXQoKSBvbmNlIHBlcgorICogYmFja2VuZCBsaWZldGltZS4KKyAqCisg KiBgaW5mbGlnaHRfZXhwYW5kX3RhcmdldGAgaXMgbm9uLXplcm8gd2hlbiBEb0V4cGFuZCBzdGFy dHMuIFRoZSBjbGVhbnVwCisgKiBjYWxsYmFjayB1c2VzIGl0IHRvIHN1cmZhY2UgYSBXQVJOSU5H IGlmIGFuIGV4cGFuZCB3YXMgaW50ZXJydXB0ZWQuCisgKi8KK3N0YXRpYyB2b2xhdGlsZSBib29s IGNvb3JkaW5hdG9yX2FjdGl2ZSA9IGZhbHNlOworc3RhdGljIHZvbGF0aWxlIGJvb2wgY2xlYW51 cF9yZWdpc3RlcmVkID0gZmFsc2U7CitzdGF0aWMgdm9sYXRpbGUgaW50IGluZmxpZ2h0X2V4cGFu ZF90YXJnZXQgPSAwOworCisvKgorICogRW1pdCBhIChrZXksIHZhbHVlLCB1bml0KSB0dXBsZSB0 byB0aGUgZnVuY3Rpb24ncyByZXN1bHQgc2V0LiBJZiB2YWx1ZV9udWxsCisgKiBpcyB0cnVlLCB2 YWx1ZSBhbmQgdW5pdCBhcmUgZW1pdHRlZCBhcyBOVUxMLgorICoKKyAqIFVzZWQgdG8gcmV0dXJu IHR1cGxlcyBmcm9tIHRoZSBwZ19yZXNpemVfc2hhcmVkX2J1ZmZlcnMoKSBmdW5jdGlvbi4gVGhl CisgKiB0dXBsZWRlc2Mgb2YgdGhlIHJldHVybmVkIHJvd3MgbXVzdCBtYXRjaCB0aGUgZnVuY3Rp b24ncyBPVVQgYXJndW1lbnRzLgorICovCitzdGF0aWMgdm9pZAorRW1pdFJlc2l6ZU1ldHJpY1Jv dyhSZXR1cm5TZXRJbmZvICpyc2luZm8sIGNvbnN0IGNoYXIgKmtleSwgZG91YmxlIHZhbHVlLAor CQkJCQljb25zdCBjaGFyICp1bml0LCBib29sIHZhbHVlX251bGwpCit7CisJRGF0dW0JCXZhbHVl c1szXTsKKwlib29sCQludWxsc1szXTsKKworCXZhbHVlc1swXSA9IENTdHJpbmdHZXRUZXh0RGF0 dW0oa2V5KTsKKwludWxsc1swXSA9IGZhbHNlOworCWlmICh2YWx1ZV9udWxsKQorCXsKKwkJbnVs bHNbMV0gPSB0cnVlOworCQl2YWx1ZXNbMV0gPSAoRGF0dW0pIDA7CisJCW51bGxzWzJdID0gdHJ1 ZTsKKwkJdmFsdWVzWzJdID0gKERhdHVtKSAwOworCX0KKwllbHNlCisJeworCQludWxsc1sxXSA9 IGZhbHNlOworCQludWxsc1syXSA9IGZhbHNlOworCQl2YWx1ZXNbMV0gPSBGbG9hdDhHZXREYXR1 bSh2YWx1ZSk7CisJCXZhbHVlc1syXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0odW5pdCk7CisJfQor CXR1cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERlc2Ms IHZhbHVlcywgbnVsbHMpOworfQorCisvKiBSb3VuZGVkIHRpbWluZyByb3c7IHZhbHVlIGlzIGlu IHNlY29uZHMsIHVuaXQgaXMgInNlY29uZHMiLiAqLworc3RhdGljIHZvaWQKK0VtaXRSZXNpemVU aW1lUm93KFJldHVyblNldEluZm8gKnJzaW5mbywgY29uc3QgY2hhciAqa2V5LCBkb3VibGUgZWxh cHNlZF9zZWMpCit7CisJZG91YmxlCQl0ID0gcm91bmQoZWxhcHNlZF9zZWMgKiAxMDAuMCkgLyAx MDAuMDsKKworCUVtaXRSZXNpemVNZXRyaWNSb3cocnNpbmZvLCBrZXksIHQsICJzZWNvbmRzIiwg ZmFsc2UpOworfQorCitzdGF0aWMgdm9pZAorRW1pdFJlc2l6ZUJ5dGVzUm93KFJldHVyblNldElu Zm8gKnJzaW5mbywgY29uc3QgY2hhciAqa2V5LCBkb3VibGUgYnl0ZXMpCit7CisJRW1pdFJlc2l6 ZU1ldHJpY1Jvdyhyc2luZm8sIGtleSwgYnl0ZXMsICJieXRlcyIsIGZhbHNlKTsKK30KKworc3Rh dGljIHZvaWQKK1NoYXJlZEJ1ZmZlclJlc2l6ZUJhcnJpZXIoUHJvY1NpZ25hbEJhcnJpZXJUeXBl IGJhcnJpZXIsIGNvbnN0IGNoYXIgKmJhcnJpZXJfbmFtZSkKK3sKKwlXYWl0Rm9yUHJvY1NpZ25h bEJhcnJpZXIoRW1pdFByb2NTaWduYWxCYXJyaWVyKGJhcnJpZXIpKTsKKwllbG9nKExPRywgImFs bCBiYWNrZW5kcyBhY2tub3dsZWRnZWQgJXMgYmFycmllciIsIGJhcnJpZXJfbmFtZSk7Cit9CisK Ky8qCisgKiBQYXJzZSBhIHVzZXItc3VwcGxpZWQgc2l6ZSBzdHJpbmcgKGUuZy4gIjI1Nk1CIiwg IjMyNzY4IikgaW50byBhIG51bWJlciBvZgorICogc2hhcmVkIGJ1ZmZlcnMuICBSYWlzZXMgRVJS T1Igb24gaW52YWxpZCBpbnB1dCBvciBvdXQtb2YtcmFuZ2Ugc2l6ZS4KKyAqLworc3RhdGljIGlu dAorUGFyc2VOZXdTaXplKGNvbnN0IGNoYXIgKm5ld19zaXplX3N0cikKK3sKKwljb25zdCBjaGFy ICpoaW50bXNnID0gTlVMTDsKKwlpbnQJCQluZXdfc2l6ZTsKKworCWlmICghcGFyc2VfaW50KG5l d19zaXplX3N0ciwgJm5ld19zaXplLCBHVUNfVU5JVF9CTE9DS1MsICZoaW50bXNnKSkKKwkJZXJl cG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVF KSwKKwkJCQkgZXJybXNnKCJpbnZhbGlkIHZhbHVlIGZvciBzaGFyZWRfYnVmZmVyczogXCIlc1wi IiwgbmV3X3NpemVfc3RyKSwKKwkJCQkgaGludG1zZyA/IGVycmhpbnQoIiVzIiwgXyhoaW50bXNn KSkgOiAwKSk7CisKKwlpZiAobmV3X3NpemUgPCBNSU5fU0hBUkVEX0JVRkZFUlMpCisJCWVyZXBv cnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSks CisJCQkJIGVycm1zZygic2hhcmVkX2J1ZmZlcnMgbXVzdCBiZSBhdCBsZWFzdCAlZCwgZ290ICVk IiwKKwkJCQkJCU1JTl9TSEFSRURfQlVGRkVSUywgbmV3X3NpemUpKSk7CisKKwlpZiAobmV3X3Np emUgPiBHZXRNYXhOQnVmZmVycygpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coInNoYXJlZF9idWZm ZXJzICglZCkgY2Fubm90IGV4Y2VlZCBtYXhfc2hhcmVkX2J1ZmZlcnMgKCVkKSIsCisJCQkJCQlu ZXdfc2l6ZSwgR2V0TWF4TkJ1ZmZlcnMoKSkpKTsKKworCXJldHVybiBuZXdfc2l6ZTsKK30KKwor LyoKKyAqIFNsZWVwIHVwIHRvIGB0aW1lb3V0X21zYCBtaWxsaXNlY29uZHMuCisgKi8KK3N0YXRp YyB2b2lkCitSZXNpemVXYWl0TXMoaW50IHRpbWVvdXRfbXMpCit7CisJaW50CQkJcmM7CisKKwly YyA9IFdhaXRMYXRjaChNeUxhdGNoLAorCQkJCSAgIFdMX0xBVENIX1NFVCB8IFdMX1RJTUVPVVQg fCBXTF9FWElUX09OX1BNX0RFQVRILAorCQkJCSAgIHRpbWVvdXRfbXMsCisJCQkJICAgV0FJVF9F VkVOVF9QR19TTEVFUCk7CisJaWYgKHJjICYgV0xfTEFUQ0hfU0VUKQorCQlSZXNldExhdGNoKE15 TGF0Y2gpOworCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7Cit9CisKKy8qCisgKiBTaHJpbmsgcHJv dG9jb2w6IGxvd2VyIGxvd05CdWZmZXJzIGZpcnN0IHRvIHJlc3RyaWN0IGFsbG9jYXRpb25zLCBl dmljdAorICogdGhlIFtsb3csIGhpZ2gpIHJhbmdlLCB0aGVuIGRyb3AgaGlnaE5CdWZmZXJzIHRv IGxvd05CdWZmZXJzLCBhbmQgb25seSB0aGVuCisgKiByZWxlYXNlIHRoZSBPUy1sZXZlbCBtZW1v cnkgYmFja2luZyB0aGF0IHJhbmdlLgorICoKKyAqIC0gcHJlOiAgbG93TkJ1ZmZlcnMgPT0gaGln aE5CdWZmZXJzID09IG9sZF9zaXplID4gbmV3X3NpemUKKyAqIC0gcG9zdCAoc3VjY2Vzcyk6Cisg KiAgICAgbG93TkJ1ZmZlcnMgPT0gaGlnaE5CdWZmZXJzID09IG5ld19zaXplCisgKiAtIHBvc3Qg KGludGVycnVwdGVkIGJlZm9yZSBoaWdoTkJ1ZmZlcnMgaXMgbG93ZXJlZCk6CisgKiAgICAgbG93 TkJ1ZmZlcnMgPT0gbmV3X3NpemUsIGhpZ2hOQnVmZmVycyA9PSBvbGRfc2l6ZQorICogICAgIChy ZWNvdmVyYWJsZTogUmVzZXRSZXNpemVJblByb2dyZXNzKCkgcm9sbHMgbG93TkJ1ZmZlcnMgYmFj ayB0byBoaWdoKQorICogLSBwb3N0IChtYWR2aXNlKE1BRFZfUkVNT1ZFKSBmYWlsdXJlIGR1cmlu ZyBCdWZmZXJNYW5hZ2VyU2htZW1TaHJpbmspOgorICogICAgIGxvd05CdWZmZXJzID09IGhpZ2hO QnVmZmVycyA9PSBuZXdfc2l6ZS4gV2UgY2Fubm90IHJvbGwgYmFjayB0aGUgc2hyaW5rLgorICoK KyAqIFJhaXNlcyBFUlJPUiBvbiB1bnJlY292ZXJhYmxlIGZhaWx1cmUuCisgKi8KK3N0YXRpYyB2 b2lkCitEb1NocmluayhSZXR1cm5TZXRJbmZvICpyc2luZm8sIGludCBvbGRfc2l6ZSwgaW50IG5l d19zaXplKQoreworCWluc3RyX3RpbWUJcGhhc2Vfc3RhcnQ7CisJaW5zdHJfdGltZQlwaGFzZV9l bmQ7CisJU2l6ZQkJbWVtX2J5dGVzOworCWJvb2wJCXNocmlua19zdWNjZXNzOworCisJQXNzZXJ0 KG5ld19zaXplIDwgb2xkX3NpemUpOworCUFzc2VydChwZ19hdG9taWNfcmVhZF91MzIoJkRTQkN0 cmwtPmxvd05CdWZmZXJzKSA9PQorCQkgICBwZ19hdG9taWNfcmVhZF91MzIoJkRTQkN0cmwtPmhp Z2hOQnVmZmVycykpOworCisJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCS8qCisJICogUmVz ZXQgdGhlIGNsb2NrLXN3ZWVwIGN1cnNvciBiZWZvcmUgbG93ZXJpbmcgdGhlIGxvdyB3YXRlciBt YXJrLiBUaGUKKwkgKiBleGlzdGluZyBjdXJzb3IgbWF5IHBvaW50IGFib3ZlIG5ld19zaXplLiBP bmNlIHdlIHB1Ymxpc2ggdGhlIG5ldworCSAqIGxvd05CdWZmZXJzLCBDbG9ja1N3ZWVwVGljaygp IG1heSBvdGhlcndpc2UgaW1tZWRpYXRlbHkgd3JhcCBwYXN0CisJICogdGhlIG5ldyBidWZmZXJz IHZpYSBtb2R1bG8gYXJpdGhtZXRpYy4gUmVzZXR0aW5nIHRvIDAgbWVhbnMgdGhlCisJICogbmV4 dCBzd2VlcCBzdGFydHMgZnJvbSB0aGUgYm90dG9tIG9mIHRoZSBzdXJ2aXZpbmcgcmFuZ2UuCisJ ICovCisJU3RyYXRlZ3lSZXNldChvbGRfc2l6ZSwgbmV3X3NpemUpOworCisJZWxvZyhMT0csICJb U2hyaW5rIEJhcnJpZXJdOiByZXN0cmljdGluZyBhbGxvY2F0aW9ucyB0byAlZCBidWZmZXJzIiwg bmV3X3NpemUpOworCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQocGhhc2Vfc3RhcnQpOworCS8qCisJ ICogV2FpdCBmb3IgYWxsIGJhY2tlbmRzIHRvIGFja25vd2xlZGdlIHRoZSBuZXcgbG93TkJ1ZmZl cnMuIEFmdGVyIHRoZQorCSAqIGJhcnJpZXIgcmV0dXJucywgYWxsIG5ldyBidWZmZXIgYWxsb2Nh dGlvbnMgd2lsbCBsYW5kIGluIFswLCBsb3dOQnVmZmVycykKKwkgKiByYW5nZS4gRm9yIGJ1ZmZl cnMgaW4gW2xvd05CdWZmZXJzLCBoaWdoTkJ1ZmZlcnMpLCBiYWNrZW5kcyBjYW4KKwkgKiBob2xk IHBpbnMgYW5kIGNyZWF0ZSBuZXcgcGlucyBvbiBidWZmZXJzIGFscmVhZHkgcGlubmVkLgorCSAq IFRoZSBFdmljdEV4dHJhQnVmZmVycygpIGxvb3AgYmVsb3cgd2lsbCB3YWl0IGZvciBhbGwgYnVm ZmVycyBpbgorCSAqIFtsb3dOQnVmZmVycywgaGlnaE5CdWZmZXJzKSB0byBiZSB1bnBpbm5lZC4K KwkgKi8KKwlTaGFyZWRCdWZmZXJSZXNpemVCYXJyaWVyKFBST0NTSUdOQUxfQkFSUklFUl9TSEJV Rl9SRVNJWkUsIENwcEFzU3RyaW5nKFBST0NTSUdOQUxfQkFSUklFUl9TSEJVRl9SRVNJWkUpKTsK KwlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHBoYXNlX2VuZCk7CisJSU5TVFJfVElNRV9TVUJUUkFD VChwaGFzZV9lbmQsIHBoYXNlX3N0YXJ0KTsKKwlFbWl0UmVzaXplVGltZVJvdyhyc2luZm8sICJC YXJyaWVyIiwgSU5TVFJfVElNRV9HRVRfRE9VQkxFKHBoYXNlX2VuZCkpOworCWVsb2coTE9HLCAi W1NocmluayBCYXJyaWVyXTogUmVzdHJpY3RlZCBhbGxvY2F0aW9ucyB0byAlZCBidWZmZXJzIGlu ICVmIHNlY29uZHMiLCBuZXdfc2l6ZSwgSU5TVFJfVElNRV9HRVRfRE9VQkxFKHBoYXNlX2VuZCkp OworCisJSU5KRUNUSU9OX1BPSU5UKCJidWYtcmVzaXplLXNocmluay1hZnRlci1iYXJyaWVyIiwg TlVMTCk7CisKKwkvKgorCSAqIEV2aWN0IGFsbCBwYWdlcyBpbiBbbG93TkJ1ZmZlcnMsIGhpZ2hO QnVmZmVycykuCisJICovCisJZWxvZyhMT0csICJbU2hyaW5rXTogZXZpY3RpbmcgYnVmZmVycyAl dS4uJXUiLCBuZXdfc2l6ZSwgb2xkX3NpemUpOworCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQocGhh c2Vfc3RhcnQpOworCXsKKwkJaW5zdHJfdGltZQlsYXN0X2xvZzsKKworCQlJTlNUUl9USU1FX1NF VF9DVVJSRU5UKGxhc3RfbG9nKTsKKwkJd2hpbGUgKCFFdmljdEV4dHJhQnVmZmVycyhuZXdfc2l6 ZSwgb2xkX3NpemUpKQorCQl7CisJCQlpbnN0cl90aW1lCW5vdzsKKworCQkJUmVzaXplV2FpdE1z KDEwMCk7CisKKwkJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQobm93KTsKKwkJCUlOU1RSX1RJTUVf U1VCVFJBQ1Qobm93LCBsYXN0X2xvZyk7CisJCQlpZiAoSU5TVFJfVElNRV9HRVRfRE9VQkxFKG5v dykgPj0gNS4wKQorCQkJeworCQkJCWVsb2coTE9HLCAic3RpbGwgd2FpdGluZyBmb3IgYnVmZmVy cyB0byBiZSB1bnBpbm5lZCIpOworCQkJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQobGFzdF9sb2cp OworCQkJfQorCQl9CisJfQorCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQocGhhc2VfZW5kKTsKKwlJ TlNUUl9USU1FX1NVQlRSQUNUKHBoYXNlX2VuZCwgcGhhc2Vfc3RhcnQpOworCUVtaXRSZXNpemVU aW1lUm93KHJzaW5mbywgIkJ1ZmZlciByZWxvY2F0aW9uIiwgSU5TVFJfVElNRV9HRVRfRE9VQkxF KHBoYXNlX2VuZCkpOworCWVsb2coTE9HLCAiW1Nocmlua106IGV2aWN0ZWQgJWQgYnVmZmVycyBp biAlZiBzZWNvbmRzIiwgb2xkX3NpemUgLSBuZXdfc2l6ZSwgSU5TVFJfVElNRV9HRVRfRE9VQkxF KHBoYXNlX2VuZCkpOworCisJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwkvKgorCSAqIEFsbCB0 aGUgdmljdGltIGJ1ZmZlcnMgYXJlIG5vdyBlbXB0eSBhbmQgd29uJ3QgYmUgYWxsb2NhdGVkIGJ5 IGJhY2tlbmRzLgorCSAqIFRha2UgQWNjZXNzTkJ1ZmZlcnNMb2NrIGluIGV4Y2x1c2l2ZSBtb2Rl IHNvIHdlIHdhaXQgZm9yIGFueSBiYWNrZW5kCisJICogc3RpbGwgaXRlcmF0aW5nIHdpdGggdGhl IG9sZCBoaWdoTkJ1ZmZlcnMgYW5kIHByZXZlbnQgbmV3CisJICogb25lcyBmcm9tIHN0YXJ0aW5n IHVudGlsIHdlIHB1Ymxpc2hlZCB0aGUgbmV3IGhpZ2hOQnVmZmVycy4KKwkgKi8KKwlJTlNUUl9U SU1FX1NFVF9DVVJSRU5UKHBoYXNlX3N0YXJ0KTsKKwlMV0xvY2tBY3F1aXJlKCZEU0JDdHJsLT5B Y2Nlc3NOQnVmZmVyc0xvY2ssIExXX0VYQ0xVU0lWRSk7CisJcGdfYXRvbWljX3dyaXRlX3UzMigm RFNCQ3RybC0+aGlnaE5CdWZmZXJzLCBuZXdfc2l6ZSk7CisJTFdMb2NrUmVsZWFzZSgmRFNCQ3Ry bC0+QWNjZXNzTkJ1ZmZlcnNMb2NrKTsKKworCUlOSkVDVElPTl9QT0lOVCgiYnVmLXJlc2l6ZS1z aHJpbmstYmVmb3JlLW1hZHZpc2UiLCBOVUxMKTsKKworCS8qCisJICogUmVsZWFzZSB0aGUgbWVt b3J5LgorCSAqLworCW1lbV9ieXRlcyA9IEJ1ZmZlck1hbmFnZXJTaG1lbVNocmluayhuZXdfc2l6 ZSwgb2xkX3NpemUsICZzaHJpbmtfc3VjY2Vzcyk7CisJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChw aGFzZV9lbmQpOworCUlOU1RSX1RJTUVfU1VCVFJBQ1QocGhhc2VfZW5kLCBwaGFzZV9zdGFydCk7 CisJRW1pdFJlc2l6ZVRpbWVSb3cocnNpbmZvLCAiU2hyaW5rIHNobWVtIiwgSU5TVFJfVElNRV9H RVRfRE9VQkxFKHBoYXNlX2VuZCkpOworCUVtaXRSZXNpemVCeXRlc1Jvdyhyc2luZm8sICJTaHJp bmsgc2htZW0iLCAoZG91YmxlKSBtZW1fYnl0ZXMpOworCWVsb2coTE9HLCAiW1Nocmlua106IHJl bGVhc2VkICV6dSBieXRlcyBvZiBtZW1vcnkgaW4gJWYgc2Vjb25kcyIsIG1lbV9ieXRlcywgSU5T VFJfVElNRV9HRVRfRE9VQkxFKHBoYXNlX2VuZCkpOworCisJaWYgKCFzaHJpbmtfc3VjY2VzcykK KwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVEVSTkFMX0VSUk9SKSwK KwkJCQkgZXJybXNnKCJzaGFyZWRfYnVmZmVycyBzaHJpbmsgZnJvbSAlZCB0byAlZCBmYWlsZWQi LAorCQkJCQkJb2xkX3NpemUsIG5ld19zaXplKSwKKwkJCQkgZXJyZGV0YWlsKCJtYWR2aXNlKE1B RFZfUkVNT1ZFKSBmYWlsZWQgd2hpbGUgcmVsZWFzaW5nIGJ1ZmZlci1wb29sIG1lbW9yeTsgdGhl IGZhaWx1cmUgaXMgbm90IHJlY292ZXJhYmxlLiIpLAorCQkJCSBlcnJoaW50KCJDaGVjayB0aGUg c2VydmVyIGxvZyBmb3IgdGhlIHVuZGVybHlpbmcgbWFkdmlzZSgpIGVycm9yLiIpKSk7Cit9CisK Ky8qCisgKiBFeHBhbmQgcHJvdG9jb2w6IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIFtvbGRfc2l6 ZSwgbmV3X3NpemUpIHJhbmdlLAorICogaW5pdGlhbGl6ZSB0aGUgbmV3IGJ1ZmZlciBkZXNjcmlw dG9ycywgdGhlbiBwdWJsaXNoIGJvdGggbmV3IGxvd05CdWZmZXJzCisgKiBhbmQgaGlnaE5CdWZm ZXJzIGF0b21pY2FsbHkgdW5kZXIgdGhlIGV4Y2x1c2l2ZSBsb2NrLgorICoKKyAqIC0gcHJlOiAg bG93TkJ1ZmZlcnMgPT0gaGlnaE5CdWZmZXJzID09IG9sZF9zaXplIDwgbmV3X3NpemUKKyAqIC0g cG9zdCAoc3VjY2Vzcyk6CisgKiAgICAgbG93TkJ1ZmZlcnMgPT0gaGlnaE5CdWZmZXJzID09IG5l d19zaXplCisgKiAtIHBvc3QgKG1hZHZpc2UoTUFEVl9QT1BVTEFURV9XUklURSkgZmFpbHVyZSBk dXJpbmcgQnVmZmVyTWFuYWdlclNobWVtRXhwYW5kKToKKyAqICAgICBsb3dOQnVmZmVycyA9PSBo aWdoTkJ1ZmZlcnMgPT0gb2xkX3NpemUgKHdhdGVyIG1hcmtzIE5PVCBhZHZhbmNlZCkKKyAqICAg ICBTb21lIGJ5dGVzIGluIFtvbGRfc2l6ZSwgbmV3X3NpemUpIG9mIHRoZSBmb3VyIGJ1ZmZlci1w b29sIGFycmF5cyBtYXkKKyAqICAgICBoYXZlIGJlZW4gYWxsb2NhdGVkIGZyb20gdGhlIE9TIGJ1 dCBuZXZlciBwdWJsaXNoZWQgdG8gYmFja2VuZHMuCisgKgorICogUmFpc2VzIEVSUk9SIG9uIG1h ZHZpc2UgZmFpbHVyZS4KKyAqLworc3RhdGljIHZvaWQKK0RvRXhwYW5kKFJldHVyblNldEluZm8g KnJzaW5mbywgaW50IG9sZF9zaXplLCBpbnQgbmV3X3NpemUpCit7CisJaW5zdHJfdGltZQlwaGFz ZV9zdGFydDsKKwlpbnN0cl90aW1lCXBoYXNlX2VuZDsKKwlTaXplCQltZW1fYnl0ZXM7CisJYm9v bAkJZXhwYW5kX3N1Y2Nlc3M7CisKKwlBc3NlcnQobmV3X3NpemUgPiBvbGRfc2l6ZSk7CisJQXNz ZXJ0KHBnX2F0b21pY19yZWFkX3UzMigmRFNCQ3RybC0+bG93TkJ1ZmZlcnMpID09CisJCSAgIHBn X2F0b21pY19yZWFkX3UzMigmRFNCQ3RybC0+aGlnaE5CdWZmZXJzKSk7CisKKwlJTlNUUl9USU1F X1NFVF9DVVJSRU5UKHBoYXNlX3N0YXJ0KTsKKworCWluZmxpZ2h0X2V4cGFuZF90YXJnZXQgPSBu ZXdfc2l6ZTsKKworCS8qCisJICogQWxsb2NhdGUgcGh5c2ljYWwgbWVtb3J5IGFuZCBpbml0aWFs aXplIHRoZSBuZXcgYnVmZmVyIGRlc2NyaXB0b3JzCisJICogQkVGT1JFIGFjcXVpcmluZyBBY2Nl c3NOQnVmZmVyc0xvY2suIEJhY2tlbmRzIGl0ZXJhdGluZyB0aGUgYnVmZmVyCisJICogcG9vbCBv bmx5IGxvb2sgYXQgWzAsIGhpZ2hOQnVmZmVycyk7IHNpbmNlIGhpZ2hOQnVmZmVycyBpcyBzdGls bCBhdAorCSAqIG9sZF9zaXplLCB0aGUgbmV3IHJhbmdlIGlzIGludmlzaWJsZSB0byB0aGVtLCBz byBpdCBpcyBzYWZlIHRvIHRvdWNoCisJICogd2l0aG91dCB0aGUgbG9jay4KKwkgKi8KKwltZW1f Ynl0ZXMgPSBCdWZmZXJNYW5hZ2VyU2htZW1FeHBhbmQob2xkX3NpemUsIG5ld19zaXplLCAmZXhw YW5kX3N1Y2Nlc3MpOworCWlmICghZXhwYW5kX3N1Y2Nlc3MpCisJeworCQlJTlNUUl9USU1FX1NF VF9DVVJSRU5UKHBoYXNlX2VuZCk7CisJCUlOU1RSX1RJTUVfU1VCVFJBQ1QocGhhc2VfZW5kLCBw aGFzZV9zdGFydCk7CisJCUVtaXRSZXNpemVUaW1lUm93KHJzaW5mbywgIkV4cGFuZCBzaG1lbSIs IElOU1RSX1RJTUVfR0VUX0RPVUJMRShwaGFzZV9lbmQpKTsKKwkJRW1pdFJlc2l6ZUJ5dGVzUm93 KHJzaW5mbywgIkV4cGFuZCBzaG1lbSIsIChkb3VibGUpIG1lbV9ieXRlcyk7CisJCWVyZXBvcnQo RVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlRFUk5BTF9FUlJPUiksCisJCQkJIGVycm1z Zygic2hhcmVkX2J1ZmZlcnMgZXhwYW5kIGZyb20gJWQgdG8gJWQgZmFpbGVkIiwKKwkJCQkJCW9s ZF9zaXplLCBuZXdfc2l6ZSksCisJCQkJIGVycmRldGFpbCgibWFkdmlzZShNQURWX1BPUFVMQVRF X1dSSVRFKSBmYWlsZWQgd2hpbGUgcG9wdWxhdGluZyBidWZmZXItcG9vbCBtZW1vcnk7IHRoZSBu ZXcgcmFuZ2Ugd2FzIG5vdCBtYWRlIHZpc2libGUgdG8gYmFja2VuZHMuIiksCisJCQkJIGVycmhp bnQoIkNoZWNrIHRoZSBzZXJ2ZXIgbG9nIGZvciB0aGUgdW5kZXJseWluZyBtYWR2aXNlKCkgZXJy b3IgYW5kIHJldHJ5LiIpKSk7CisJfQorCisJQnVmZmVyTWFuYWdlclNobWVtSW5pdEJ1ZmZlcnMo b2xkX3NpemUsIG5ld19zaXplKTsKKworCUlOSkVDVElPTl9QT0lOVCgiYnVmLXJlc2l6ZS1leHBh bmQtYmVmb3JlLXB1Ymxpc2giLCBOVUxMKTsKKworCS8qCisJICogSG9sZCBBY2Nlc3NOQnVmZmVy c0xvY2sgaW4gZXhjbHVzaXZlIG1vZGUgd2hpbGUgd2UgcHVibGlzaCB0aGUgbmV3CisJICogd2F0 ZXIgbWFya3MuIEJhY2tlbmRzIHRha2luZyB0aGUgbG9jayBpbiBzaGFyZWQgbW9kZSAoZS5nLiB2 aWEKKwkgKiBCRUdJTl9OQlVGRkVSU19BQ0NFU1MpIGVpdGhlciBydW4gZW50aXJlbHkgYmVmb3Jl IHRoaXMgY3JpdGljYWwKKwkgKiBzZWN0aW9uIGFuZCBzZWUgbG93TkJ1ZmZlcnMgPT0gaGlnaE5C dWZmZXJzID09IG9sZF9zaXplLCBvciBlbnRpcmVseQorCSAqIGFmdGVyIGFuZCBzZWUgbG93TkJ1 ZmZlcnMgPT0gaGlnaE5CdWZmZXJzID09IG5ld19zaXplIHdpdGggdmFsaWQKKwkgKiBtZW1vcnk7 IHRoZXkgbmV2ZXIgb2JzZXJ2ZSB0aGUgcGFydGlhbGx5IGluaXRpYWxpemVkIGludGVybWVkaWF0 ZQorCSAqIHN0YXRlLiAgQ29uY3VycmVudCBhdG9taWNzIHJlYWRlcnMgKGNsb2NrIHN3ZWVwIC8g ZnJlZWxpc3QpIG1heQorCSAqIGJyaWVmbHkgc2VlIGxvd05CdWZmZXJzIDwgaGlnaE5CdWZmZXJz IGJldHdlZW4gdGhlIHR3byB3cml0ZXMgYmVsb3c7CisJICogdGhhdCBpcyBmaW5lIGJlY2F1c2Ug Ym90aCBib3VuZHMgYXJlIG5vdyBiYWNrZWQgYnkgaW5pdGlhbGl6ZWQKKwkgKiBtZW1vcnksIHNv IGEgY2xvY2sgc3dlZXAgd3JhcHBpbmcgaW50byB0aGUgW29sZF9zaXplLCBuZXdfc2l6ZSkgcmFu Z2UKKwkgKiBpcyBzYWZlLgorCSAqLworCUxXTG9ja0FjcXVpcmUoJkRTQkN0cmwtPkFjY2Vzc05C dWZmZXJzTG9jaywgTFdfRVhDTFVTSVZFKTsKKwkvKgorCSAqIFJlc2V0IHRoZSBjbG9jay1zd2Vl cCBjdXJzb3IgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXcgYnVmZmVycyBzbyB0aGUKKwkgKiBuZXh0 IGNsb2NrIHBhc3MgdHJpZXMgdGhlIGZyZXNobHkgYWRkZWQgZW1wdHkgYnVmZmVycyBiZWZvcmUK KwkgKiByZS1zY2FubmluZyBleGlzdGluZyBvbmVzIHdpdGggdXNhZ2VfY291bnQgPT0gMC4KKwkg Ki8KKwlTdHJhdGVneVJlc2V0KG9sZF9zaXplLCBuZXdfc2l6ZSk7CisJTFdMb2NrUmVsZWFzZSgm RFNCQ3RybC0+QWNjZXNzTkJ1ZmZlcnNMb2NrKTsKKworCS8qCisJICogVGhlIGV4cGFuZCBpcyBj b21wbGV0ZS4KKwkgKi8KKwlpbmZsaWdodF9leHBhbmRfdGFyZ2V0ID0gMDsKKworCUlOU1RSX1RJ TUVfU0VUX0NVUlJFTlQocGhhc2VfZW5kKTsKKwlJTlNUUl9USU1FX1NVQlRSQUNUKHBoYXNlX2Vu ZCwgcGhhc2Vfc3RhcnQpOworCUVtaXRSZXNpemVUaW1lUm93KHJzaW5mbywgIkV4cGFuZCBzaG1l bSIsIElOU1RSX1RJTUVfR0VUX0RPVUJMRShwaGFzZV9lbmQpKTsKKwlFbWl0UmVzaXplQnl0ZXNS b3cocnNpbmZvLCAiRXhwYW5kIHNobWVtIiwgKGRvdWJsZSkgbWVtX2J5dGVzKTsKKwllbG9nKExP RywgIltFeHBhbmRdOiBleHBhbmRlZCBidWZmZXIgcG9vbCBtZW1vcnkgd2l0aCAlenUgYnl0ZXMg aW4gJWYgc2Vjb25kcyIsIG1lbV9ieXRlcywgSU5TVFJfVElNRV9HRVRfRE9VQkxFKHBoYXNlX2Vu ZCkpOworfQorCisvKgorICogQ2xlYW51cCBjYWxsYmFjay4gUnVucyBmcm9tIHRoZSB0cmFuc2Fj dGlvbi1hYm9ydCBQR19DQVRDSCBwYXRoICphbmQqIGZyb20KKyAqIGJlZm9yZV9zaG1lbV9leGl0 KCkgaWYgdGhlIGJhY2tlbmQgZGllcyB3aGlsZSBob2xkaW5nIHRoZSByZXNpemUgc2xvdC4KKyAq CisgKiBSb2xsYmFjayBwb2xpY3k6CisgKiAgIC0gUGFydGlhbCBzaHJpbmsgKGxvd05CdWZmZXJz IDwgaGlnaE5CdWZmZXJzKTogcmVzdG9yZSBsb3dOQnVmZmVycyB0bworICogICAgIGhpZ2hOQnVm ZmVycyBzbyB0aGUgYnVmZmVyIHBvb2wgaXMgY29uc2lzdGVudCBhdCB0aGUgbGFyZ2VyIHNpemUu CisgKiAgICAgTWVtb3J5IGZvciBbbG93TkJ1ZmZlcnMsIGhpZ2hOQnVmZmVycykgaXMgc3RpbGwg bWFwcGVkLCBzbyByb2xsaW5nCisgKiAgICAgYmFjayBpcyBzYWZlLgorICogICAtIFBhcnRpYWwg ZXhwYW5kOiBCdWZmZXJNYW5hZ2VyU2htZW1FeHBhbmQoKSBtYXkgaGF2ZSBwb3B1bGF0ZWQgc29t ZSBvZgorICogICAgIFtvbGRfc2l6ZSwgaW5mbGlnaHRfZXhwYW5kX3RhcmdldCkgd2l0aG91dCBw dWJsaXNoaW5nIHRoZSBuZXcgd2F0ZXIKKyAqICAgICBtYXJrcy4gVGhpcyBpcyB3YXN0ZWZ1bCBi dXQgaGFybWxlc3MuIFdlIHN1cmZhY2UgYSBXQVJOSU5HIHNvIG9wZXJhdG9ycworICogICAgIGtu b3cgdG8gcmV0cnkgdGhlIHJlc2l6ZS4KKyAqLworc3RhdGljIHZvaWQKK1Jlc2V0UmVzaXplSW5Q cm9ncmVzcyhpbnQgY29kZSwgRGF0dW0gYXJnKQoreworCXVpbnQzMgkJaGlnaDsKKwl1aW50MzIJ CWxvdzsKKwlpbnQJCQlleHBhbmRfdGFyZ2V0OworCWJvb2wJCXNocmlua19mYWlsZWQgPSBmYWxz ZTsKKwlib29sCQlleHBhbmRfZmFpbGVkID0gZmFsc2U7CisKKwlpZiAoIWNvb3JkaW5hdG9yX2Fj dGl2ZSB8fCBEU0JDdHJsID09IE5VTEwpCisJCXJldHVybjsKKworCUFzc2VydChEU0JDdHJsLT5y ZXNpemVfaW5fcHJvZ3Jlc3MpOworCUFzc2VydChEU0JDdHJsLT5jb29yZGluYXRvcl9waWQgPT0g TXlQcm9jUGlkKTsKKworCWNvb3JkaW5hdG9yX2FjdGl2ZSA9IGZhbHNlOworCisJaGlnaCA9IHBn X2F0b21pY19yZWFkX3UzMigmRFNCQ3RybC0+aGlnaE5CdWZmZXJzKTsKKwlsb3cgPSBwZ19hdG9t aWNfcmVhZF91MzIoJkRTQkN0cmwtPmxvd05CdWZmZXJzKTsKKwlpZiAobG93IDwgaGlnaCkKKwl7 CisJCXNocmlua19mYWlsZWQgPSB0cnVlOworCQlwZ19hdG9taWNfd3JpdGVfdTMyKCZEU0JDdHJs LT5sb3dOQnVmZmVycywgaGlnaCk7CisJfQorCisJZXhwYW5kX3RhcmdldCA9IGluZmxpZ2h0X2V4 cGFuZF90YXJnZXQ7CisJaWYgKGV4cGFuZF90YXJnZXQgIT0gMCkKKwl7CisJCWV4cGFuZF9mYWls ZWQgPSB0cnVlOworCQlpbmZsaWdodF9leHBhbmRfdGFyZ2V0ID0gMDsKKwl9CisKKwlSZWxlYXNl UmVzaXplQ29vcmRpbmF0b3IoKTsKKworCS8qCisJICogRW1pdCB1c2VyLXZpc2libGUgd2Fybmlu Z3MgQUZURVIgYWxsIGNyaXRpY2FsIGNsZWFudXAuCisJICovCisJaWYgKHNocmlua19mYWlsZWQp CisJCWVyZXBvcnQoV0FSTklORywKKwkJCQkoZXJybXNnKCJzaGFyZWRfYnVmZmVycyBzaHJpbmsg d2FzIGludGVycnVwdGVkOyByb2xsaW5nIGJhY2sgbG93TkJ1ZmZlcnMgZnJvbSAldSB0byAldSIs CisJCQkJCQkodW5zaWduZWQpIGxvdywgKHVuc2lnbmVkKSBoaWdoKSkpOworCisJaWYgKGV4cGFu ZF9mYWlsZWQpCisJCWVyZXBvcnQoV0FSTklORywKKwkJCQkoZXJybXNnKCJzaGFyZWRfYnVmZmVy cyBleHBhbmQgdG8gJWQgd2FzIGludGVycnVwdGVkIiwKKwkJCQkJCWV4cGFuZF90YXJnZXQpLAor CQkJCSBlcnJkZXRhaWwoIlNvbWUgbWVtb3J5IGluIFsldSwgJWQpIG1heSBoYXZlIGJlZW4gYWxs b2NhdGVkIGZyb20gdGhlIE9TIGJ1dCBub3QgbWFkZSB2aXNpYmxlIHRvIGJhY2tlbmRzLiBJdCB3 aWxsIHNpdCB1bnVzZWQgaW4gc2htZW0gdW50aWwgYSBmdXR1cmUgc3VjY2Vzc2Z1bCByZXNpemUg cmUtaW5pdGlhbGl6ZXMgdGhhdCByYW5nZS4iLAorCQkJCQkJICAgKHVuc2lnbmVkKSBoaWdoLCBl eHBhbmRfdGFyZ2V0KSkpOworfQorCitEYXR1bQorcGdfcmVzaXplX3NoYXJlZF9idWZmZXJzKFBH X0ZVTkNUSU9OX0FSR1MpCit7CisJaW5zdHJfdGltZQl0b3RhbF9zdGFydDsKKwlpbnN0cl90aW1l CXRvdGFsX2VuZDsKKworCVJldHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5TZXRJbmZvICop IGZjaW5mby0+cmVzdWx0aW5mbzsKKwlpbnQJCQlvbGRfc2l6ZTsKKwlpbnQJCQluZXdfc2l6ZTsK KwljaGFyCSAgICpuZXdfc2l6ZV9zdHI7CisKKwlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHRvdGFs X3N0YXJ0KTsKKworCWlmICghZW5hYmxlX2R5bmFtaWNfc2hhcmVkX2J1ZmZlcnMpCisJCWVyZXBv cnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAor CQkJCSBlcnJtc2coInNoYXJlZCBidWZmZXIgcG9vbCByZXNpemluZyByZXF1aXJlcyBlbmFibGVf ZHluYW1pY19zaGFyZWRfYnVmZmVycyIpKSk7CisKKwlpZiAoIXN1cGVydXNlcigpKQorCQllcmVw b3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSks CisJCQkJIGVycm1zZygibXVzdCBiZSBzdXBlcnVzZXIgdG8gcmVzaXplIHNoYXJlZF9idWZmZXJz IikpKTsKKworCWlmIChQR19OQVJHUygpICE9IDEpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygicGdf cmVzaXplX3NoYXJlZF9idWZmZXJzIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50ICh0aGUg bmV3IHNoYXJlZF9idWZmZXJzIHZhbHVlKSIpKSk7CisJaWYgKFBHX0FSR0lTTlVMTCgwKSkKKwkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX05VTExfVkFMVUVfTk9UX0FMTE9X RUQpLAorCQkJCSBlcnJtc2coIm5ld19zaXplIGFyZ3VtZW50IHRvIHBnX3Jlc2l6ZV9zaGFyZWRf YnVmZmVycyBtdXN0IG5vdCBiZSBOVUxMIikpKTsKKworCS8qCisJICogUmVzdHJpY3QgY2FsbGVy cyB0byByZWd1bGFyIGNsaWVudCBiYWNrZW5kcy4KKwkgKi8KKwlBc3NlcnQoTXlCYWNrZW5kVHlw ZSA9PSBCX0JBQ0tFTkQpOworCisJLyoKKwkgKiBQYXJzZSB0aGUgcmVxdWVzdGVkIHNpemUgZmly c3Qgc28gd2UgZmFpbCBmYXN0IG9uIGJhZCBpbnB1dCBiZWZvcmUKKwkgKiBjbGFpbWluZyB0aGUg cmVzaXplX2luX3Byb2dyZXNzIGZsYWcuCisJICovCisJbmV3X3NpemVfc3RyID0gdGV4dF90b19j c3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKwluZXdfc2l6ZSA9IFBhcnNlTmV3U2l6ZShu ZXdfc2l6ZV9zdHIpOworCisJSW5pdE1hdGVyaWFsaXplZFNSRihmY2luZm8sIDApOworCisJLyoK KwkgKiBSZWdpc3RlciB0aGUgRkFUQUwtZXhpdCBjbGVhbnVwIG9uY2UgcGVyIGJhY2tlbmQgbGlm ZXRpbWUuCisJICovCisJaWYgKCFjbGVhbnVwX3JlZ2lzdGVyZWQpCisJeworCQliZWZvcmVfc2ht ZW1fZXhpdChSZXNldFJlc2l6ZUluUHJvZ3Jlc3MsIChEYXR1bSkgMCk7CisJCWNsZWFudXBfcmVn aXN0ZXJlZCA9IHRydWU7CisJfQorCisJaWYgKCFDbGFpbVJlc2l6ZUNvb3JkaW5hdG9yKCkpCisJ eworCQllbG9nKExPRywgInNoYXJlZCBidWZmZXIgcmVzaXppbmcgaXMgYWxyZWFkeSBpbiBwcm9n cmVzcyIpOworCQlFbWl0UmVzaXplTWV0cmljUm93KHJzaW5mbywgInJlc2l6ZSBhbHJlYWR5IGlu IHByb2dyZXNzIiwgMCwgTlVMTCwgdHJ1ZSk7CisJCXJldHVybiAoRGF0dW0pIDA7CisJfQorCisJ LyoKKwkgKiBNYXJrIHRoaXMgYmFja2VuZCBhcyB0aGUgbG9jYWwgY29vcmRpbmF0b3Igc28gdGhl IGNsZWFudXAgY2FsbGJhY2sKKwkgKiBrbm93cyB0byByZWxlYXNlIHRoZSBzaGFyZWQgc2xvdCBv biBlcnJvciAvIGV4aXQuCisJICovCisJY29vcmRpbmF0b3JfYWN0aXZlID0gdHJ1ZTsKKworCVBH X1RSWSgpOworCXsKKwkJSU5KRUNUSU9OX1BPSU5UKCJidWYtcmVzaXplLWFmdGVyLWNsYWltIiwg TlVMTCk7CisKKwkJb2xkX3NpemUgPSBwZ19hdG9taWNfcmVhZF91MzIoJkRTQkN0cmwtPmxvd05C dWZmZXJzKTsKKwkJLyoKKwkJICogVGhlIGhpZ2hOQnVmZmVycyBzaG91bGQgYmUgZXF1YWwgdG8g bG93TkJ1ZmZlcnMuCisJCSAqLworCQlBc3NlcnQocGdfYXRvbWljX3JlYWRfdTMyKCZEU0JDdHJs LT5oaWdoTkJ1ZmZlcnMpID09IG9sZF9zaXplKTsKKworCQlpZiAob2xkX3NpemUgPT0gbmV3X3Np emUpCisJCXsKKwkJCWVsb2coTE9HLCAic2hhcmVkIGJ1ZmZlcnMgYXJlIGFscmVhZHkgYXQgJWQs IG5vIG5lZWQgdG8gcmVzaXplIiwgb2xkX3NpemUpOworCQkJRW1pdFJlc2l6ZVRpbWVSb3cocnNp bmZvLCAiTm8gcmVzaXplIiwgMC4wKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWVsb2coTE9HLCAi cmVzaXppbmcgc2hhcmVkIGJ1ZmZlcnMgZnJvbSAlZCB0byAlZCIsIG9sZF9zaXplLCBuZXdfc2l6 ZSk7CisKKwkJCWlmIChuZXdfc2l6ZSA8IG9sZF9zaXplKQorCQkJCURvU2hyaW5rKHJzaW5mbywg b2xkX3NpemUsIG5ld19zaXplKTsKKwkJCWVsc2UKKwkJCQlEb0V4cGFuZChyc2luZm8sIG9sZF9z aXplLCBuZXdfc2l6ZSk7CisKKwkJCUFzc2VydChwZ19hdG9taWNfcmVhZF91MzIoJkRTQkN0cmwt Pmxvd05CdWZmZXJzKSA9PSAodWludDMyKSBuZXdfc2l6ZSk7CisJCQlBc3NlcnQocGdfYXRvbWlj X3JlYWRfdTMyKCZEU0JDdHJsLT5oaWdoTkJ1ZmZlcnMpID09ICh1aW50MzIpIG5ld19zaXplKTsK KworCQkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVCh0b3RhbF9lbmQpOworCQkJSU5TVFJfVElNRV9T VUJUUkFDVCh0b3RhbF9lbmQsIHRvdGFsX3N0YXJ0KTsKKwkJCUVtaXRSZXNpemVUaW1lUm93KHJz aW5mbywgIlRvdGFsIFJlc2l6ZSBUaW1lIiwgSU5TVFJfVElNRV9HRVRfRE9VQkxFKHRvdGFsX2Vu ZCkpOworCQkJZWxvZyhMT0csICJzdWNjZXNzZnVsbHkgcmVzaXplZCBzaGFyZWQgYnVmZmVycyB0 byAlZCIsIG5ld19zaXplKTsKKwkJfQorCX0KKwlQR19DQVRDSCgpOworCXsKKwkJUmVzZXRSZXNp emVJblByb2dyZXNzKDAsIChEYXR1bSkgMCk7CisJCVBHX1JFX1RIUk9XKCk7CisJfQorCVBHX0VO RF9UUlkoKTsKKworCVJlc2V0UmVzaXplSW5Qcm9ncmVzcygwLCAoRGF0dW0pIDApOworCXJldHVy biAoRGF0dW0pIDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9i dWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCmluZGV4IGNjMzk4 ZGIxMjRkLi42YTczMDI5MTdhMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAg LTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL2ZkLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Bn X3NobWVtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9w cm9jbGlzdC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgpAQCAtOTIsNyArOTMs NyBAQAogICogYmVpbmcgZHJvcHBlZC4gRm9yIHRoZSByZWxhdGlvbnMgd2l0aCBzaXplIGJlbG93 IHRoaXMgdGhyZXNob2xkLCB3ZSBmaW5kCiAgKiB0aGUgYnVmZmVycyBieSBkb2luZyBsb29rdXBz IGluIEJ1Zk1hcHBpbmcgdGFibGUuCiAgKi8KLSNkZWZpbmUgQlVGX0RST1BfRlVMTF9TQ0FOX1RI UkVTSE9MRAkJKHVpbnQ2NCkgKE5CdWZmZXJzIC8gMzIpCisjZGVmaW5lIEJVRl9EUk9QX0ZVTExf U0NBTl9USFJFU0hPTEQJCSh1aW50NjQpIChHZXRIaWdoTkJ1ZmZlcnMoKSAvIDMyKQogCiAvKgog ICogVGhpcyBpcyBzZXBhcmF0ZWQgb3V0IGZyb20gUHJpdmF0ZVJlZkNvdW50RW50cnkgdG8gYWxs b3cgZm9yIGNvcHlpbmcgYWxsCkBAIC02MzMsNyArNjM0LDkgQEAgc3RhdGljIGJvb2wgUGluQnVm ZmVyKEJ1ZmZlckRlc2MgKmJ1ZiwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCiBzdGF0 aWMgdm9pZCBQaW5CdWZmZXJfTG9ja2VkKEJ1ZmZlckRlc2MgKmJ1Zik7CiBzdGF0aWMgdm9pZCBV bnBpbkJ1ZmZlcihCdWZmZXJEZXNjICpidWYpOwogc3RhdGljIHZvaWQgVW5waW5CdWZmZXJOb093 bmVyKEJ1ZmZlckRlc2MgKmJ1Zik7Ci1zdGF0aWMgdm9pZCBCdWZmZXJTeW5jKGludCBmbGFncyk7 CitzdGF0aWMgYm9vbCBFdmljdFVucGlubmVkQnVmZmVySW50ZXJuYWwoQnVmZmVyRGVzYyAqZGVz YywgYm9vbCAqYnVmZmVyX2ZsdXNoZWQpOworc3RhdGljIHZvaWQgQnVmZmVyU3luYyhpbnQgZmxh Z3MsIGludCBsb2NhbE5CdWZmZXJzKTsKK3N0YXRpYyB1aW50MzIgV2FpdEJ1ZkhkclVubG9ja2Vk KEJ1ZmZlckRlc2MgKmJ1Zik7CiBzdGF0aWMgaW50CVN5bmNPbmVCdWZmZXIoaW50IGJ1Zl9pZCwg Ym9vbCBza2lwX3JlY2VudGx5X3VzZWQsCiAJCQkJCQkgIFdyaXRlYmFja0NvbnRleHQgKndiX2Nv bnRleHQpOwogc3RhdGljIHZvaWQgV2FpdElPKEJ1ZmZlckRlc2MgKmJ1Zik7CkBAIC04NDcsNiAr ODUwLDEyIEBAIFJlYWRSZWNlbnRCdWZmZXIoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEZvcmtO dW1iZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxvY2tOCiAJfQogCWVsc2UKIAl7CisJCS8qCisJ CSAqIFJlamVjdCBhbnkgcmVjZW50X2J1ZmZlciB0aGF0IHBvaW50cyBhYm92ZSB0aGUgbGl2ZSBs b3cgd2F0ZXJtYXJrLgorCQkgKi8KKwkJaWYgKHJlY2VudF9idWZmZXIgPiBHZXRMb3dOQnVmZmVy cygpKQorCQkJcmV0dXJuIGZhbHNlOworCiAJCWJ1ZkhkciA9IEdldEJ1ZmZlckRlc2NyaXB0b3Io cmVjZW50X2J1ZmZlciAtIDEpOwogCiAJCS8qCkBAIC0yNzA3LDYgKzI3MTYsNyBAQCB1aW50MzIK IEdldEFkZGl0aW9uYWxQaW5MaW1pdCh2b2lkKQogewogCXVpbnQzMgkJZXN0aW1hdGVkX3BpbnNf aGVsZDsKKwl1aW50MzIJCWxpbWl0OwogCiAJLyoKIAkgKiBXZSBnZXQgdGhlIG51bWJlciBvZiAi b3ZlcmZsb3dlZCIgcGlucyBmb3IgZnJlZSwgYnV0IGRvbid0IGtub3cgdGhlCkBAIC0yNzE1LDEx ICsyNzI1LDE3IEBAIEdldEFkZGl0aW9uYWxQaW5MaW1pdCh2b2lkKQogCSAqLwogCWVzdGltYXRl ZF9waW5zX2hlbGQgPSBQcml2YXRlUmVmQ291bnRPdmVyZmxvd2VkICsgUkVGQ09VTlRfQVJSQVlf RU5UUklFUzsKIAorCS8qCisJICogQ29uc3VsdCBnZXRfcGluX2xpbWl0X2hvb2sgc28gdGhlIHBl ci1iYWNrZW5kIGxpbWl0IHRyYWNrcyB0aGUgbGl2ZQorCSAqIGJ1ZmZlciBwb29sIHNpemUuCisJ ICovCisJbGltaXQgPSBlbmFibGVfZHluYW1pY19zaGFyZWRfYnVmZmVycyAmJiBnZXRfcGluX2xp bWl0X2hvb2sgPyBnZXRfcGluX2xpbWl0X2hvb2soKSA6IE1heFByb3BvcnRpb25hbFBpbnM7CisK IAkvKiBJcyB0aGlzIGJhY2tlbmQgYWxyZWFkeSBob2xkaW5nIG1vcmUgdGhhbiBpdHMgZmFpciBz aGFyZT8gKi8KLQlpZiAoZXN0aW1hdGVkX3BpbnNfaGVsZCA+IE1heFByb3BvcnRpb25hbFBpbnMp CisJaWYgKGVzdGltYXRlZF9waW5zX2hlbGQgPiBsaW1pdCkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1 cm4gTWF4UHJvcG9ydGlvbmFsUGlucyAtIGVzdGltYXRlZF9waW5zX2hlbGQ7CisJcmV0dXJuIGxp bWl0IC0gZXN0aW1hdGVkX3BpbnNfaGVsZDsKIH0KIAogLyoKQEAgLTM1NTgsNyArMzU3NCw3IEBA IFRyYWNrTmV3QnVmZmVyUGluKEJ1ZmZlciBidWYpCiAgKiBjdXJyZW50bHkgaGF2ZSBubyBlZmZl Y3QgaGVyZS4KICAqLwogc3RhdGljIHZvaWQKLUJ1ZmZlclN5bmMoaW50IGZsYWdzKQorQnVmZmVy U3luYyhpbnQgZmxhZ3MsIGludCBsb2NhbE5CdWZmZXJzKQogewogCXVpbnQ2NAkJYnVmX3N0YXRl OwogCWludAkJCWJ1Zl9pZDsKQEAgLTM1OTksNyArMzYxNSw3IEBAIEJ1ZmZlclN5bmMoaW50IGZs YWdzKQogCSAqIGNlcnRhaW5seSBuZWVkIHRvIGJlIHdyaXR0ZW4gZm9yIHRoZSBuZXh0IGNoZWNr cG9pbnQgYXR0ZW1wdCwgdG9vLgogCSAqLwogCW51bV90b19zY2FuID0gMDsKLQlmb3IgKGJ1Zl9p ZCA9IDA7IGJ1Zl9pZCA8IE5CdWZmZXJzOyBidWZfaWQrKykKKwlmb3IgKGJ1Zl9pZCA9IDA7IGJ1 Zl9pZCA8IGxvY2FsTkJ1ZmZlcnM7IGJ1Zl9pZCsrKQogCXsKIAkJQnVmZmVyRGVzYyAqYnVmSGRy ID0gR2V0QnVmZmVyRGVzY3JpcHRvcihidWZfaWQpOwogCQl1aW50NjQJCXNldF9iaXRzID0gMDsK QEAgLTM2MjgsNyArMzY0NCw3IEBAIEJ1ZmZlclN5bmMoaW50IGZsYWdzKQogCQkJCQkJc2V0X2Jp dHMsIDAsCiAJCQkJCQkwKTsKIAotCQkvKiBDaGVjayBmb3IgYmFycmllciBldmVudHMgaW4gY2Fz ZSBOQnVmZmVycyBpcyBsYXJnZS4gKi8KKwkJLyogQ2hlY2sgZm9yIGJhcnJpZXIgZXZlbnRzIGlu IGNhc2UgdGhlIGJ1ZmZlciBwb29sIGlzIGxhcmdlLiAqLwogCQlpZiAoUHJvY1NpZ25hbEJhcnJp ZXJQZW5kaW5nKQogCQkJUHJvY2Vzc1Byb2NTaWduYWxCYXJyaWVyKCk7CiAJfQpAQCAtMzYzOCw3 ICszNjU0LDcgQEAgQnVmZmVyU3luYyhpbnQgZmxhZ3MpCiAKIAlXcml0ZWJhY2tDb250ZXh0SW5p dCgmd2JfY29udGV4dCwgJmNoZWNrcG9pbnRfZmx1c2hfYWZ0ZXIpOwogCi0JVFJBQ0VfUE9TVEdS RVNRTF9CVUZGRVJfU1lOQ19TVEFSVChOQnVmZmVycywgbnVtX3RvX3NjYW4pOworCVRSQUNFX1BP U1RHUkVTUUxfQlVGRkVSX1NZTkNfU1RBUlQobG9jYWxOQnVmZmVycywgbnVtX3RvX3NjYW4pOwog CiAJLyoKIAkgKiBTb3J0IGJ1ZmZlcnMgdGhhdCBuZWVkIHRvIGJlIHdyaXR0ZW4gdG8gcmVkdWNl IHRoZSBsaWtlbGlob29kIG9mIHJhbmRvbQpAQCAtMzgyMiw3ICszODM4LDcgQEAgQnVmZmVyU3lu YyhpbnQgZmxhZ3MpCiAJICovCiAJQ2hlY2twb2ludFN0YXRzLmNrcHRfYnVmc193cml0dGVuICs9 IG51bV93cml0dGVuOwogCi0JVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfU1lOQ19ET05FKE5CdWZm ZXJzLCBudW1fd3JpdHRlbiwgbnVtX3RvX3NjYW4pOworCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVS X1NZTkNfRE9ORShsb2NhbE5CdWZmZXJzLCBudW1fd3JpdHRlbiwgbnVtX3RvX3NjYW4pOwogfQog CiAvKgpAQCAtMzg4MSwxMCArMzg5NywyOCBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4 dCAqd2JfY29udGV4dCkKIAl1aW50MzIJCW5ld19yZWNlbnRfYWxsb2M7CiAKIAkvKgotCSAqIEZp bmQgb3V0IHdoZXJlIHRoZSBjbG9jay1zd2VlcCBjdXJyZW50bHkgaXMsIGFuZCBob3cgbWFueSBi dWZmZXIKLQkgKiBhbGxvY2F0aW9ucyBoYXZlIGhhcHBlbmVkIHNpbmNlIG91ciBsYXN0IGNhbGwu CisJICogU25hcHNob3Qgb2YgbG93TkJ1ZmZlcnMgZnJvbSB0aGUgcHJldmlvdXMgaW52b2NhdGlv bi4gV2hlbmV2ZXIgdGhlCisJICogdmFsdWUgY2hhbmdlcyBhIGJ1ZmZlci1wb29sIHJlc2l6ZSBo YXMgaGFwcGVuZWQ6IHRoZSBzbW9vdGhlZAorCSAqIGFsbG9jYXRpb24gcmF0ZSAvIGNsZWFuLWJ1 ZmZlciBkZW5zaXR5IHdlIGFjY3VtdWxhdGVkIGZvciB0aGUgb2xkIHNpemUKKwkgKiBhcmUgbm8g bG9uZ2VyIG1lYW5pbmdmdWwsIHNvIHdlIGludmFsaWRhdGUgc2F2ZWRfaW5mb192YWxpZCBhbmQg c3RhcnQKKwkgKiBmcmVzaC4KIAkgKi8KLQlzdHJhdGVneV9idWZfaWQgPSBTdHJhdGVneVN5bmNT dGFydCgmc3RyYXRlZ3lfcGFzc2VzLCAmcmVjZW50X2FsbG9jKTsKKwlzdGF0aWMgaW50CXNhdmVk X2xvd19uYnVmZmVycyA9IDA7CisJaW50CQkJY3VycmVudF9sb3dfbmJ1ZmZlcnM7CisKKwlCRUdJ Tl9OQlVGRkVSU19BQ0NFU1MobG9jYWxOQnVmZmVycyk7CisKKwlzdHJhdGVneV9idWZfaWQgPSBT dHJhdGVneVN5bmNTdGFydCgmc3RyYXRlZ3lfcGFzc2VzLCAmcmVjZW50X2FsbG9jLAorCQkJCQkJ CQkJCSZjdXJyZW50X2xvd19uYnVmZmVycyk7CisJaWYgKGN1cnJlbnRfbG93X25idWZmZXJzICE9 IHNhdmVkX2xvd19uYnVmZmVycykKKwl7CisjaWZkZWYgQkdXX0RFQlVHCisJCWVsb2coREVCVUcy LCAiaW52YWxpZGF0ZWQgYmFja2dyb3VuZCB3cml0ZXIgc3RhdGUgYWZ0ZXIgcG9vbCByZXNpemU6 ICVkIC0+ICVkIGJ1ZmZlcnMiLAorCQkJIHNhdmVkX2xvd19uYnVmZmVycywgY3VycmVudF9sb3df bmJ1ZmZlcnMpOworI2VuZGlmCisJCXNhdmVkX2luZm9fdmFsaWQgPSBmYWxzZTsKKwkJc2F2ZWRf bG93X25idWZmZXJzID0gY3VycmVudF9sb3dfbmJ1ZmZlcnM7CisJfQogCiAJLyogUmVwb3J0IGJ1 ZmZlciBhbGxvYyBjb3VudHMgdG8gcGdzdGF0ICovCiAJUGVuZGluZ0JnV3JpdGVyU3RhdHMuYnVm X2FsbG9jICs9IHJlY2VudF9hbGxvYzsKQEAgLTM4OTcsNiArMzkzMSw3IEBAIEJnQnVmZmVyU3lu YyhXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250ZXh0KQogCWlmIChiZ3dyaXRlcl9scnVfbWF4cGFn ZXMgPD0gMCkKIAl7CiAJCXNhdmVkX2luZm9fdmFsaWQgPSBmYWxzZTsKKwkJRU5EX05CVUZGRVJT X0FDQ0VTUyhsb2NhbE5CdWZmZXJzKTsKIAkJcmV0dXJuIHRydWU7CiAJfQogCkBAIC0zOTEzLDcg KzM5NDgsNyBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkKIAkJ aW50MzIJCXBhc3Nlc19kZWx0YSA9IHN0cmF0ZWd5X3Bhc3NlcyAtIHByZXZfc3RyYXRlZ3lfcGFz c2VzOwogCiAJCXN0cmF0ZWd5X2RlbHRhID0gc3RyYXRlZ3lfYnVmX2lkIC0gcHJldl9zdHJhdGVn eV9idWZfaWQ7Ci0JCXN0cmF0ZWd5X2RlbHRhICs9IChsb25nKSBwYXNzZXNfZGVsdGEgKiBOQnVm ZmVyczsKKwkJc3RyYXRlZ3lfZGVsdGEgKz0gKGxvbmcpIHBhc3Nlc19kZWx0YSAqIGxvY2FsTkJ1 ZmZlcnM7CiAKIAkJQXNzZXJ0KHN0cmF0ZWd5X2RlbHRhID49IDApOwogCkBAIC0zOTMyLDcgKzM5 NjcsNyBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkKIAkJCQkg bmV4dF90b19jbGVhbiA+PSBzdHJhdGVneV9idWZfaWQpCiAJCXsKIAkJCS8qIG9uIHNhbWUgcGFz cywgYnV0IGFoZWFkIG9yIGF0IGxlYXN0IG5vdCBiZWhpbmQgKi8KLQkJCWJ1ZnNfdG9fbGFwID0g TkJ1ZmZlcnMgLSAobmV4dF90b19jbGVhbiAtIHN0cmF0ZWd5X2J1Zl9pZCk7CisJCQlidWZzX3Rv X2xhcCA9IGxvY2FsTkJ1ZmZlcnMgLSAobmV4dF90b19jbGVhbiAtIHN0cmF0ZWd5X2J1Zl9pZCk7 CiAjaWZkZWYgQkdXX0RFQlVHCiAJCQllbG9nKERFQlVHMiwgImJnd3JpdGVyIGFoZWFkOiBiZ3cg JXUtJXUgc3RyYXRlZ3kgJXUtJXUgZGVsdGE9JWxkIGxhcD0lZCIsCiAJCQkJIG5leHRfcGFzc2Vz LCBuZXh0X3RvX2NsZWFuLApAQCAtMzk1NCw3ICszOTg5LDcgQEAgQmdCdWZmZXJTeW5jKFdyaXRl YmFja0NvbnRleHQgKndiX2NvbnRleHQpCiAjZW5kaWYKIAkJCW5leHRfdG9fY2xlYW4gPSBzdHJh dGVneV9idWZfaWQ7CiAJCQluZXh0X3Bhc3NlcyA9IHN0cmF0ZWd5X3Bhc3NlczsKLQkJCWJ1ZnNf dG9fbGFwID0gTkJ1ZmZlcnM7CisJCQlidWZzX3RvX2xhcCA9IGxvY2FsTkJ1ZmZlcnM7CiAJCX0K IAl9CiAJZWxzZQpAQCAtMzk3MCw3ICs0MDA1LDcgQEAgQmdCdWZmZXJTeW5jKFdyaXRlYmFja0Nv bnRleHQgKndiX2NvbnRleHQpCiAJCXN0cmF0ZWd5X2RlbHRhID0gMDsKIAkJbmV4dF90b19jbGVh biA9IHN0cmF0ZWd5X2J1Zl9pZDsKIAkJbmV4dF9wYXNzZXMgPSBzdHJhdGVneV9wYXNzZXM7Ci0J CWJ1ZnNfdG9fbGFwID0gTkJ1ZmZlcnM7CisJCWJ1ZnNfdG9fbGFwID0gbG9jYWxOQnVmZmVyczsK IAl9CiAKIAkvKiBVcGRhdGUgc2F2ZWQgaW5mbyBmb3IgbmV4dCB0aW1lICovCkBAIC0zOTk2LDcg KzQwMzEsNyBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkKIAkg KiBzdHJhdGVneSBwb2ludCBhbmQgd2hlcmUgd2UndmUgc2Nhbm5lZCBhaGVhZCB0bywgYmFzZWQg b24gdGhlIHNtb290aGVkCiAJICogZGVuc2l0eSBlc3RpbWF0ZS4KIAkgKi8KLQlidWZzX2FoZWFk ID0gTkJ1ZmZlcnMgLSBidWZzX3RvX2xhcDsKKwlidWZzX2FoZWFkID0gbG9jYWxOQnVmZmVycyAt IGJ1ZnNfdG9fbGFwOwogCXJldXNhYmxlX2J1ZmZlcnNfZXN0ID0gKGZsb2F0KSBidWZzX2FoZWFk IC8gc21vb3RoZWRfZGVuc2l0eTsKIAogCS8qCkBAIC00MDM0LDcgKzQwNjksNyBAQCBCZ0J1ZmZl clN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkKIAkgKiB0aGUgQkdXIHdpbGwgYmUg Y2FsbGVkIGR1cmluZyB0aGUgc2Nhbl93aG9sZV9wb29sIHRpbWU7IHNsaWNlIHRoZQogCSAqIGJ1 ZmZlciBwb29sIGludG8gdGhhdCBtYW55IHNlY3Rpb25zLgogCSAqLwotCW1pbl9zY2FuX2J1ZmZl cnMgPSAoaW50KSAoTkJ1ZmZlcnMgLyAoc2Nhbl93aG9sZV9wb29sX21pbGxpc2Vjb25kcyAvIEJn V3JpdGVyRGVsYXkpKTsKKwltaW5fc2Nhbl9idWZmZXJzID0gKGludCkgKGxvY2FsTkJ1ZmZlcnMg LyAoc2Nhbl93aG9sZV9wb29sX21pbGxpc2Vjb25kcyAvIEJnV3JpdGVyRGVsYXkpKTsKIAogCWlm ICh1cGNvbWluZ19hbGxvY19lc3QgPCAobWluX3NjYW5fYnVmZmVycyArIHJldXNhYmxlX2J1ZmZl cnNfZXN0KSkKIAl7CkBAIC00MDYyLDcgKzQwOTcsNyBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNr Q29udGV4dCAqd2JfY29udGV4dCkKIAkJaW50CQkJc3luY19zdGF0ZSA9IFN5bmNPbmVCdWZmZXIo bmV4dF90b19jbGVhbiwgdHJ1ZSwKIAkJCQkJCQkJCQkJICAgd2JfY29udGV4dCk7CiAKLQkJaWYg KCsrbmV4dF90b19jbGVhbiA+PSBOQnVmZmVycykKKwkJaWYgKCsrbmV4dF90b19jbGVhbiA+PSBs b2NhbE5CdWZmZXJzKQogCQl7CiAJCQluZXh0X3RvX2NsZWFuID0gMDsKIAkJCW5leHRfcGFzc2Vz Kys7CkBAIC00MTE2LDYgKzQxNTEsOCBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAq d2JfY29udGV4dCkKICNlbmRpZgogCX0KIAorCUVORF9OQlVGRkVSU19BQ0NFU1MobG9jYWxOQnVm ZmVycyk7CisKIAkvKiBSZXR1cm4gdHJ1ZSBpZiBPSyB0byBoaWJlcm5hdGUgKi8KIAlyZXR1cm4g KGJ1ZnNfdG9fbGFwID09IDAgJiYgcmVjZW50X2FsbG9jID09IDApOwogfQpAQCAtNDIzMSw3ICs0 MjY4LDcgQEAgSW5pdEJ1ZmZlck1hbmFnZXJBY2Nlc3Modm9pZCkKIAkgKiBhbGxvdyBwbGVudHkg b2YgcGlucy4gIExpbWl0QWRkaXRpb25hbFBpbnMoKSBhbmQKIAkgKiBHZXRBZGRpdGlvbmFsUGlu TGltaXQoKSBjYW4gYmUgdXNlZCB0byBjaGVjayB0aGUgcmVtYWluaW5nIGJhbGFuY2UuCiAJICov Ci0JTWF4UHJvcG9ydGlvbmFsUGlucyA9IE5CdWZmZXJzIC8gKE1heEJhY2tlbmRzICsgTlVNX0FV WElMSUFSWV9QUk9DUyk7CisJTWF4UHJvcG9ydGlvbmFsUGlucyA9IEdldE1heE5CdWZmZXJzKCkg LyAoTWF4QmFja2VuZHMgKyBOVU1fQVVYSUxJQVJZX1BST0NTKTsKIAogCW1lbXNldCgmUHJpdmF0 ZVJlZkNvdW50QXJyYXksIDAsIHNpemVvZihQcml2YXRlUmVmQ291bnRBcnJheSkpOwogCW1lbXNl dCgmUHJpdmF0ZVJlZkNvdW50QXJyYXlLZXlzLCAwLCBzaXplb2YoUHJpdmF0ZVJlZkNvdW50QXJy YXlLZXlzKSk7CkBAIC00MzcxLDYgKzQ0MDgsMTIgQEAgQXNzZXJ0Tm90Q2F0YWxvZ0J1ZmZlckxv Y2soQnVmZmVyIGJ1ZmZlciwgQnVmZmVyTG9ja01vZGUgbW9kZSkKIAlpZiAobW9kZSAhPSBCVUZG RVJfTE9DS19FWENMVVNJVkUpCiAJCXJldHVybjsKIAorCWlmICghKChCdWZmZXJEZXNjUGFkZGVk ICopIGxvY2sgPiBCdWZmZXJEZXNjcmlwdG9ycyAmJgorCQkgIChCdWZmZXJEZXNjUGFkZGVkICop IGxvY2sgPCBCdWZmZXJEZXNjcmlwdG9ycyArIEdldE1heE5CdWZmZXJzKCkpKQorCQlyZXR1cm47 CQkJCQkvKiBub3QgYSBidWZmZXIgbG9jayAqLworCisJYnVmSGRyID0gKEJ1ZmZlckRlc2MgKikK KwkJKChjaGFyICopIGxvY2sgLSBvZmZzZXRvZihCdWZmZXJEZXNjLCBjb250ZW50X2xvY2spKTsK IAl0YWcgPSBidWZIZHItPnRhZzsKIAogCS8qCkBAIC00NDQwLDcgKzQ0ODMsOSBAQCBEZWJ1Z1By aW50QnVmZmVyUmVmY291bnQoQnVmZmVyIGJ1ZmZlcikKIHZvaWQKIENoZWNrUG9pbnRCdWZmZXJz KGludCBmbGFncykKIHsKLQlCdWZmZXJTeW5jKGZsYWdzKTsKKwlCRUdJTl9OQlVGRkVSU19BQ0NF U1MobG9jYWxOQnVmZmVycyk7CisJQnVmZmVyU3luYyhmbGFncywgbG9jYWxOQnVmZmVycyk7CisJ RU5EX05CVUZGRVJTX0FDQ0VTUyhsb2NhbE5CdWZmZXJzKTsKIH0KIAogLyoKQEAgLTQ3NzksNiAr NDgyNCw3IEBAIERyb3BSZWxhdGlvbkJ1ZmZlcnMoU01nclJlbGF0aW9uIHNtZ3JfcmVsbiwgRm9y a051bWJlciAqZm9ya051bSwKIAlSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3I7CiAJQmxv Y2tOdW1iZXIgbkZvcmtCbG9ja1tNQVhfRk9SS05VTV07CiAJdWludDY0CQluQmxvY2tzVG9JbnZh bGlkYXRlID0gMDsKKwlCRUdJTl9OQlVGRkVSU19BQ0NFU1MobG9jYWxOQnVmZmVycyk7CiAKIAly bG9jYXRvciA9IHNtZ3JfcmVsbi0+c21ncl9ybG9jYXRvcjsKIApAQCAtNDg0Miw3ICs0ODg4LDcg QEAgRHJvcFJlbGF0aW9uQnVmZmVycyhTTWdyUmVsYXRpb24gc21ncl9yZWxuLCBGb3JrTnVtYmVy ICpmb3JrTnVtLAogCQlyZXR1cm47CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IE5CdWZmZXJzOyBp KyspCisJZm9yIChpID0gMDsgaSA8IGxvY2FsTkJ1ZmZlcnM7IGkrKykKIAl7CiAJCUJ1ZmZlckRl c2MgKmJ1ZkhkciA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoaSk7CiAKQEAgLTQ4ODAsNiArNDkyNiw3 IEBAIERyb3BSZWxhdGlvbkJ1ZmZlcnMoU01nclJlbGF0aW9uIHNtZ3JfcmVsbiwgRm9ya051bWJl ciAqZm9ya051bSwKIAkJaWYgKGogPj0gbmZvcmtzKQogCQkJVW5sb2NrQnVmSGRyKGJ1Zkhkcik7 CiAJfQorCUVORF9OQlVGRkVSU19BQ0NFU1MobG9jYWxOQnVmZmVycyk7CiB9CiAKIC8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQpAQCAtNDkwMSw2ICs0OTQ4LDcgQEAgRHJvcFJlbGF0aW9uc0FsbEJ1ZmZlcnMoU01n clJlbGF0aW9uICpzbWdyX3JlbG4sIGludCBubG9jYXRvcnMpCiAJUmVsRmlsZUxvY2F0b3IgKmxv Y2F0b3JzOwogCWJvb2wJCWNhY2hlZCA9IHRydWU7CiAJYm9vbAkJdXNlX2JzZWFyY2g7CisJQkVH SU5fTkJVRkZFUlNfQUNDRVNTKGxvY2FsTkJ1ZmZlcnMpOwogCiAJaWYgKG5sb2NhdG9ycyA9PSAw KQogCQlyZXR1cm47CkBAIC01MDAzLDcgKzUwNTEsNyBAQCBEcm9wUmVsYXRpb25zQWxsQnVmZmVy cyhTTWdyUmVsYXRpb24gKnNtZ3JfcmVsbiwgaW50IG5sb2NhdG9ycykKIAlpZiAodXNlX2JzZWFy Y2gpCiAJCXFzb3J0KGxvY2F0b3JzLCBuLCBzaXplb2YoUmVsRmlsZUxvY2F0b3IpLCBybG9jYXRv cl9jb21wYXJhdG9yKTsKIAotCWZvciAoaSA9IDA7IGkgPCBOQnVmZmVyczsgaSsrKQorCWZvciAo aSA9IDA7IGkgPCBsb2NhbE5CdWZmZXJzOyBpKyspCiAJewogCQlSZWxGaWxlTG9jYXRvciAqcmxv Y2F0b3IgPSBOVUxMOwogCQlCdWZmZXJEZXNjICpidWZIZHIgPSBHZXRCdWZmZXJEZXNjcmlwdG9y KGkpOwpAQCAtNTA0Niw2ICs1MDk0LDcgQEAgRHJvcFJlbGF0aW9uc0FsbEJ1ZmZlcnMoU01nclJl bGF0aW9uICpzbWdyX3JlbG4sIGludCBubG9jYXRvcnMpCiAJCWVsc2UKIAkJCVVubG9ja0J1Zkhk cihidWZIZHIpOwogCX0KKwlFTkRfTkJVRkZFUlNfQUNDRVNTKGxvY2FsTkJ1ZmZlcnMpOwogCiAJ cGZyZWUobG9jYXRvcnMpOwogCXBmcmVlKHJlbHMpOwpAQCAtNTEzMCw3ICs1MTc5LDggQEAgRHJv cERhdGFiYXNlQnVmZmVycyhPaWQgZGJpZCkKIAkgKiBkYXRhYmFzZSBpc24ndCBvdXIgb3duLgog CSAqLwogCi0JZm9yIChpID0gMDsgaSA8IE5CdWZmZXJzOyBpKyspCisJQkVHSU5fTkJVRkZFUlNf QUNDRVNTKGxvY2FsTkJ1ZmZlcnMpOworCWZvciAoaSA9IDA7IGkgPCBsb2NhbE5CdWZmZXJzOyBp KyspCiAJewogCQlCdWZmZXJEZXNjICpidWZIZHIgPSBHZXRCdWZmZXJEZXNjcmlwdG9yKGkpOwog CkBAIC01MTQ3LDYgKzUxOTcsNyBAQCBEcm9wRGF0YWJhc2VCdWZmZXJzKE9pZCBkYmlkKQogCQll bHNlCiAJCQlVbmxvY2tCdWZIZHIoYnVmSGRyKTsKIAl9CisJRU5EX05CVUZGRVJTX0FDQ0VTUyhs b2NhbE5CdWZmZXJzKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01MTc0LDcgKzUyMjUsOSBA QCBGbHVzaFJlbGF0aW9uQnVmZmVycyhSZWxhdGlvbiByZWwpCiAJQnVmZmVyRGVzYyAqYnVmSGRy OwogCVNNZ3JSZWxhdGlvbiBzcmVsID0gUmVsYXRpb25HZXRTbWdyKHJlbCk7CiAKLQlpZiAoUmVs YXRpb25Vc2VzTG9jYWxCdWZmZXJzKHJlbCkpCisJQkVHSU5fTkJVRkZFUlNfQUNDRVNTKGxvY2Fs TkJ1ZmZlcnMpOworCisJaWYgKFJlbGF0aW9uVXNlc0xvY2FsQnVmZmVycyhyZWwpIHx8IGFtX3dh bF9yZWRvX3Bvc3RncmVzKQogCXsKIAkJZm9yIChpID0gMDsgaSA8IE5Mb2NCdWZmZXI7IGkrKykK IAkJewpAQCAtNTIxMywxMCArNTI2NiwxMiBAQCBGbHVzaFJlbGF0aW9uQnVmZmVycyhSZWxhdGlv biByZWwpCiAJCQl9CiAJCX0KIAorCQlFTkRfTkJVRkZFUlNfQUNDRVNTKGxvY2FsTkJ1ZmZlcnMp OworCiAJCXJldHVybjsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgTkJ1ZmZlcnM7IGkrKykKKwlm b3IgKGkgPSAwOyBpIDwgbG9jYWxOQnVmZmVyczsgaSsrKQogCXsKIAkJdWludDY0CQlidWZfc3Rh dGU7CiAKQEAgLTUyNDQsNiArNTI5OSw3IEBAIEZsdXNoUmVsYXRpb25CdWZmZXJzKFJlbGF0aW9u IHJlbCkKIAkJZWxzZQogCQkJVW5sb2NrQnVmSGRyKGJ1Zkhkcik7CiAJfQorCUVORF9OQlVGRkVS U19BQ0NFU1MobG9jYWxOQnVmZmVycyk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNTI2MSw2 ICs1MzE3LDcgQEAgRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAqc21ncnMs IGludCBucmVscykKIAlpbnQJCQlpOwogCVNNZ3JTb3J0QXJyYXkgKnNyZWxzOwogCWJvb2wJCXVz ZV9ic2VhcmNoOworCUJFR0lOX05CVUZGRVJTX0FDQ0VTUyhsb2NhbE5CdWZmZXJzKTsKIAogCWlm IChucmVscyA9PSAwKQogCQlyZXR1cm47CkBAIC01Mjg2LDcgKzUzNDMsNyBAQCBGbHVzaFJlbGF0 aW9uc0FsbEJ1ZmZlcnMoU01nclJlbGF0aW9uICpzbWdycywgaW50IG5yZWxzKQogCWlmICh1c2Vf YnNlYXJjaCkKIAkJcXNvcnQoc3JlbHMsIG5yZWxzLCBzaXplb2YoU01nclNvcnRBcnJheSksIHJs b2NhdG9yX2NvbXBhcmF0b3IpOwogCi0JZm9yIChpID0gMDsgaSA8IE5CdWZmZXJzOyBpKyspCisJ Zm9yIChpID0gMDsgaSA8IGxvY2FsTkJ1ZmZlcnM7IGkrKykKIAl7CiAJCVNNZ3JTb3J0QXJyYXkg KnNyZWxlbnQgPSBOVUxMOwogCQlCdWZmZXJEZXNjICpidWZIZHIgPSBHZXRCdWZmZXJEZXNjcmlw dG9yKGkpOwpAQCAtNTMzOSw2ICs1Mzk2LDcgQEAgRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKFNN Z3JSZWxhdGlvbiAqc21ncnMsIGludCBucmVscykKIAkJZWxzZQogCQkJVW5sb2NrQnVmSGRyKGJ1 Zkhkcik7CiAJfQorCUVORF9OQlVGRkVSU19BQ0NFU1MobG9jYWxOQnVmZmVycyk7CiAKIAlwZnJl ZShzcmVscyk7CiB9CkBAIC01NTM3LDcgKzU1OTUsOCBAQCBGbHVzaERhdGFiYXNlQnVmZmVycyhP aWQgZGJpZCkKIAlpbnQJCQlpOwogCUJ1ZmZlckRlc2MgKmJ1ZkhkcjsKIAotCWZvciAoaSA9IDA7 IGkgPCBOQnVmZmVyczsgaSsrKQorCUJFR0lOX05CVUZGRVJTX0FDQ0VTUyhsb2NhbE5CdWZmZXJz KTsKKwlmb3IgKGkgPSAwOyBpIDwgbG9jYWxOQnVmZmVyczsgaSsrKQogCXsKIAkJdWludDY0CQli dWZfc3RhdGU7CiAKQEAgLTU1NjUsNiArNTYyNCw3IEBAIEZsdXNoRGF0YWJhc2VCdWZmZXJzKE9p ZCBkYmlkKQogCQllbHNlCiAJCQlVbmxvY2tCdWZIZHIoYnVmSGRyKTsKIAl9CisJRU5EX05CVUZG RVJTX0FDQ0VTUyhsb2NhbE5CdWZmZXJzKTsKIH0KIAogLyoKQEAgLTc5OTEsMTEgKzgwNTEsMTMg QEAgdm9pZAogRXZpY3RBbGxVbnBpbm5lZEJ1ZmZlcnMoaW50MzIgKmJ1ZmZlcnNfZXZpY3RlZCwg aW50MzIgKmJ1ZmZlcnNfZmx1c2hlZCwKIAkJCQkJCWludDMyICpidWZmZXJzX3NraXBwZWQpCiB7 CisJQkVHSU5fTkJVRkZFUlNfQUNDRVNTKGxvY2FsTkJ1ZmZlcnMpOworCiAJKmJ1ZmZlcnNfZXZp Y3RlZCA9IDA7CiAJKmJ1ZmZlcnNfc2tpcHBlZCA9IDA7CiAJKmJ1ZmZlcnNfZmx1c2hlZCA9IDA7 CiAKLQlmb3IgKGludCBidWYgPSAxOyBidWYgPD0gTkJ1ZmZlcnM7IGJ1ZisrKQorCWZvciAoaW50 IGJ1ZiA9IDE7IGJ1ZiA8PSBsb2NhbE5CdWZmZXJzOyBidWYrKykKIAl7CiAJCUJ1ZmZlckRlc2Mg KmRlc2MgPSBHZXRCdWZmZXJEZXNjcmlwdG9yKGJ1ZiAtIDEpOwogCQl1aW50NjQJCWJ1Zl9zdGF0 ZTsKQEAgLTgwMjAsNiArODA4Miw3IEBAIEV2aWN0QWxsVW5waW5uZWRCdWZmZXJzKGludDMyICpi dWZmZXJzX2V2aWN0ZWQsIGludDMyICpidWZmZXJzX2ZsdXNoZWQsCiAJCWlmIChidWZmZXJfZmx1 c2hlZCkKIAkJCSgqYnVmZmVyc19mbHVzaGVkKSsrOwogCX0KKwlFTkRfTkJVRkZFUlNfQUNDRVNT KGxvY2FsTkJ1ZmZlcnMpOwogfQogCiAvKgpAQCAtODA0MSwxMyArODEwNCwxNSBAQCB2b2lkCiBF dmljdFJlbFVucGlubmVkQnVmZmVycyhSZWxhdGlvbiByZWwsIGludDMyICpidWZmZXJzX2V2aWN0 ZWQsCiAJCQkJCQlpbnQzMiAqYnVmZmVyc19mbHVzaGVkLCBpbnQzMiAqYnVmZmVyc19za2lwcGVk KQogeworCUJFR0lOX05CVUZGRVJTX0FDQ0VTUyhsb2NhbE5CdWZmZXJzKTsKKwogCUFzc2VydCgh UmVsYXRpb25Vc2VzTG9jYWxCdWZmZXJzKHJlbCkpOwogCiAJKmJ1ZmZlcnNfc2tpcHBlZCA9IDA7 CiAJKmJ1ZmZlcnNfZXZpY3RlZCA9IDA7CiAJKmJ1ZmZlcnNfZmx1c2hlZCA9IDA7CiAKLQlmb3Ig KGludCBidWYgPSAxOyBidWYgPD0gTkJ1ZmZlcnM7IGJ1ZisrKQorCWZvciAoaW50IGJ1ZiA9IDE7 IGJ1ZiA8PSBsb2NhbE5CdWZmZXJzOyBidWYrKykKIAl7CiAJCUJ1ZmZlckRlc2MgKmRlc2MgPSBH ZXRCdWZmZXJEZXNjcmlwdG9yKGJ1ZiAtIDEpOwogCQl1aW50NjQJCWJ1Zl9zdGF0ZSA9IHBnX2F0 b21pY19yZWFkX3U2NCgmKGRlc2MtPnN0YXRlKSk7CkBAIC04MDgyLDYgKzgxNDcsNyBAQCBFdmlj dFJlbFVucGlubmVkQnVmZmVycyhSZWxhdGlvbiByZWwsIGludDMyICpidWZmZXJzX2V2aWN0ZWQs CiAJCWlmIChidWZmZXJfZmx1c2hlZCkKIAkJCSgqYnVmZmVyc19mbHVzaGVkKSsrOwogCX0KKwlF TkRfTkJVRkZFUlNfQUNDRVNTKGxvY2FsTkJ1ZmZlcnMpOwogfQogCiAvKgpAQCAtODk2NSwzICs5 MDMxLDg3IEBAIGNvbnN0IFBnQWlvSGFuZGxlQ2FsbGJhY2tzIGFpb19sb2NhbF9idWZmZXJfcmVh ZHZfY2IgPSB7CiAJLmNvbXBsZXRlX2xvY2FsID0gbG9jYWxfYnVmZmVyX3JlYWR2X2NvbXBsZXRl LAogCS5yZXBvcnQgPSBidWZmZXJfcmVhZHZfcmVwb3J0LAogfTsKKworLyoKKyAqIFdoZW4gc2hy aW5raW5nIHRoZSBzaGFyZWQgYnVmZmVyIHBvb2wsIGV2aWN0IGV2ZXJ5IGJ1ZmZlciBpbiB0aGUK KyAqIHJhbmdlIFtsb3dOQnVmZmVycywgaGlnaE5CdWZmZXJzKS4KKyAqCisgKiBSZXR1cm5zIHRy dWUgb25jZSBldmVyeSBidWZmZXIgaW4gdGhlIHJhbmdlIGlzIGVtcHR5LiAgUmV0dXJucyBmYWxz ZSBpZgorICogYW55IGJ1ZmZlciB3YXMgc3RpbGwgcGlubmVkLgorICovCitib29sCitFdmljdEV4 dHJhQnVmZmVycyhpbnQgbG93TkJ1ZmZlcnMsIGludCBoaWdoTkJ1ZmZlcnMpCit7CisJYm9vbAkJ cmVzdWx0ID0gdHJ1ZTsKKworCUFzc2VydChsb3dOQnVmZmVycyA8IGhpZ2hOQnVmZmVycyk7CisK KwkvKgorCSAqIElmIHRoZSBidWZmZXIgYmVpbmcgZXZpY3RlZCBpcyBsb2NrZWQsIHRoaXMgZnVu Y3Rpb24gd2lsbCBuZWVkIHRvCisJICogd2FpdC4gVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJl IGNhbGxlZCBmcm9tIGEgUG9zdG1hc3RlciBzaW5jZSBpdCBjYW4KKwkgKiBub3Qgd2FpdCBvbiBh IGxvY2suCisJICovCisJQXNzZXJ0KElzVW5kZXJQb3N0bWFzdGVyKTsKKworCWZvciAoaW50IGJ1 Zl9pZCA9IGxvd05CdWZmZXJzOyBidWZfaWQgPCBoaWdoTkJ1ZmZlcnM7IGJ1Zl9pZCsrKQorCXsK KwkJQnVmZmVyRGVzYyAqZGVzYyA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmX2lkKTsKKwkJdWlu dDMyCQlidWZfc3RhdGU7CisJCWJvb2wJCWJ1ZmZlcl9mbHVzaGVkOworCisJCS8qIE1ha2Ugc3Vy ZSB3ZSBjYW4gcGluIHRoZSBidWZmZXIgKFBpbkJ1ZmZlcl9Mb2NrZWQgY29udHJhY3QpLiAqLwor CQlSZXNvdXJjZU93bmVyRW5sYXJnZShDdXJyZW50UmVzb3VyY2VPd25lcik7CisJCVJlc2VydmVQ cml2YXRlUmVmQ291bnRFbnRyeSgpOworCisJCWJ1Zl9zdGF0ZSA9IExvY2tCdWZIZHIoZGVzYyk7 CisKKwkJaWYgKEJVRl9TVEFURV9HRVRfUkVGQ09VTlQoYnVmX3N0YXRlKSA+IDApCisJCXsKKwkJ CVVubG9ja0J1ZkhkcihkZXNjLCBidWZfc3RhdGUpOworCQkJcmVzdWx0ID0gZmFsc2U7CisJCQlj b250aW51ZTsKKwkJfQorCisJCWlmICghKGJ1Zl9zdGF0ZSAmIEJNX1ZBTElEKSkKKwkJeworCQkJ LyoKKwkJCSAqIEJ1ZmZlciBpcyBub3QgdmFsaWQsIGJ1dCBpdCBtaWdodCBzdGlsbCBoYXZlIGEg QnVmVGFibGUKKwkJCSAqIGVudHJ5OiBhIHByZXZpb3VzIHJlYWQgSU8gbWF5IGhhdmUgZmFpbGVk LCBvciB0aGUgYmFja2VuZAorCQkJICogdGhhdCBzdGFydGVkIGFsbG9jYXRpbmcgdGhpcyBzbG90 IHdhcyBjYW5jZWxsZWQgYmVmb3JlIHRoZQorCQkJICogcmVhZCBjb21wbGV0ZWQgKGUuZy4gYXV0 b3ZhY3V1bSBjYW5jZWxsYXRpb24pLiBJbiB0aGF0IGNhc2UKKwkJCSAqIHRoZSBkZXNjcmlwdG9y IGlzIGxlZnQgd2l0aCBCTV9UQUdfVkFMSUQgc2V0LCByZWZjb3VudD0wLAorCQkJICogYW5kIHRo ZSBoYXNoIHRhYmxlIHN0aWxsIG1hcHBpbmcgdGFnIC0+IGJ1Zl9pZC4KKwkJCSAqCisJCQkgKiBJ ZiB3ZSBsZWF2ZSB0aGF0IEJ1ZlRhYmxlIGVudHJ5IGJlaGluZCwgYSBsYXRlciBleHBhbmQgdGhh dAorCQkJICogcmUtaW5pdGlhbGl6ZXMgdGhpcyBzbG90IChjbGVhcmluZyB0YWcgdG8gSW52YWxp ZEJsb2NrTnVtYmVyCisJCQkgKiBhbmQgQk1fVEFHX1ZBTElEKSB3aWxsIGRlc3luY2hyb25pemUg QnVmVGFibGUgZnJvbSB0aGUKKwkJCSAqIGRlc2NyaXB0b3IsIGFuZCB0aGUgbmV4dCByZWFkZXIg b2YgdGhlIG9yaWdpbmFsIGJsb2NrIHdpbGwKKwkJCSAqIGZhaWwgdGhlIEJ1ZmZlckdldEJsb2Nr TnVtYmVyIGFzc2VydGlvbiBpbgorCQkJICogQ2hlY2tSZWFkQnVmZmVyc09wZXJhdGlvbi4gRHJv cCB0aGUgc3RhbGUgZW50cnkgbm93LgorCQkJICovCisJCQlpZiAoYnVmX3N0YXRlICYgQk1fVEFH X1ZBTElEKQorCQkJeworCQkJCVBpbkJ1ZmZlcl9Mb2NrZWQoZGVzYyk7CisJCQkJaWYgKCFJbnZh bGlkYXRlVmljdGltQnVmZmVyKGRlc2MpKQorCQkJCXsKKwkJCQkJLyogTG9zdCBhIHJhY2Ugd2l0 aCBhbm90aGVyIHBpbm5lcjsgcmV0cnkgbGF0ZXIuICovCisJCQkJCXJlc3VsdCA9IGZhbHNlOwor CQkJCX0KKwkJCQlVbnBpbkJ1ZmZlcihkZXNjKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlV bmxvY2tCdWZIZHIoZGVzYywgYnVmX3N0YXRlKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisK KwkJaWYgKCFFdmljdFVucGlubmVkQnVmZmVySW50ZXJuYWwoZGVzYywgJmJ1ZmZlcl9mbHVzaGVk KSkKKwkJeworCQkJZWxvZyhXQVJOSU5HLCAiY291bGQgbm90IGV2aWN0IGJ1ZmZlciAlZCwgaXQg aXMgcGlubmVkIiwgYnVmX2lkKTsKKwkJCXJlc3VsdCA9IGZhbHNlOworCQl9CisJfQorCisJcmV0 dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2R5 bmFtaWNfc2hhcmVkX2J1ZmZlcnMuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2R5bmFt aWNfc2hhcmVkX2J1ZmZlcnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uZWZjNTM1ZDM2NWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9keW5hbWljX3NoYXJlZF9idWZmZXJzLmMKQEAgLTAsMCArMSwxMjUgQEAKKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICoKKyAqIGR5bmFtaWNfc2hhcmVkX2J1ZmZlcnMuYworICoJICBDb29yZGlu YXRpb24gc3RhdGUgYW5kIGhlbHBlcnMgZm9yIHJlc2l6aW5nIHNoYXJlZF9idWZmZXJzIGF0IHJ1 bnRpbWUuCisgKgorICogVGhlIGR5bmFtaWMgc2hhcmVkIGJ1ZmZlciAoRFNCKSBtYWNoaW5lcnkg bGV0cyBzaGFyZWRfYnVmZmVycyBncm93IGFuZAorICogc2hyaW5rIHdoaWxlIHRoZSBjbHVzdGVy IGlzIHJ1bm5pbmcuCisgKgorICogU2VlIHBneG4vbmVvbi9SRUFETUUubWQgKCJEeW5hbWljIHNo YXJlZCBidWZmZXIiKSBmb3IgdGhlIGZ1bGwgZGVzaWduIGFuZAorICogdGhlIHJlc2l6ZSBwcm90 b2NvbC4KKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9keW5hbWljX3NoYXJlZF9idWZmZXJzLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq LworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNs dWRlICJzdG9yYWdlL2R5bmFtaWNfc2hhcmVkX2J1ZmZlcnMuaCIKKyNpbmNsdWRlICJzdG9yYWdl L2lwYy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCisjaW5jbHVkZSAic3RvcmFnZS9w cm9jc2lnbmFsLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgorI2luY2x1ZGUgInN0b3Jh Z2Uvc3Bpbi5oIgorCitEeW5hbWljU2hhcmVkQnVmZmVyc0NvbnRyb2wgKkRTQkN0cmwgPSBOVUxM OworCisvKgorICogQWNxdWlyZU5CdWZmZXJzTG9jaworICoKKyAqIFRha2UgQWNjZXNzTkJ1ZmZl cnNMb2NrIGluIHNoYXJlZCBtb2RlIGFuZCByZXR1cm4gdGhlIGN1cnJlbnQgaGlnaCB3YXRlcgor ICogbWFyay4gQ2FsbGVycyBpdGVyYXRlIHVwIHRvIHRoYXQgYm91bmQuIFRoZSBsb2NrIGtlZXBz IHRoZSByZXNpemUKKyAqIGNvb3JkaW5hdG9yICh3aGljaCBhY3F1aXJlcyB0aGUgbG9jayBleGNs dXNpdmVseSkgd2FpdGluZyB1bnRpbCB3ZSBkcm9wIGl0LgorICovCitpbnQKK0FjcXVpcmVOQnVm ZmVyc0xvY2sodm9pZCkKK3sKKwlpZiAoIWVuYWJsZV9keW5hbWljX3NoYXJlZF9idWZmZXJzKQor CQlyZXR1cm4gR2V0SGlnaE5CdWZmZXJzKCk7CisKKwlpZiAoRFNCQ3RybCAhPSBOVUxMKQorCQlM V0xvY2tBY3F1aXJlKCZEU0JDdHJsLT5BY2Nlc3NOQnVmZmVyc0xvY2ssIExXX1NIQVJFRCk7CisJ cmV0dXJuIEdldEhpZ2hOQnVmZmVycygpOworfQorCit2b2lkCitSZWxlYXNlTkJ1ZmZlcnNMb2Nr KHZvaWQpCit7CisJaWYgKCFlbmFibGVfZHluYW1pY19zaGFyZWRfYnVmZmVycykKKwkJcmV0dXJu OworCWlmIChEU0JDdHJsICE9IE5VTEwpCisJCUxXTG9ja1JlbGVhc2UoJkRTQkN0cmwtPkFjY2Vz c05CdWZmZXJzTG9jayk7Cit9CisKKy8qCisgKiBUcnkgdG8gY2xhaW0gY29vcmRpbmF0b3Igc3Rh dHVzIGZvciBhIGJ1ZmZlci1wb29sIHJlc2l6ZS4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgd2Ug YXJlIG5vdyB0aGUgY29vcmRpbmF0b3IsIG9yIGZhbHNlIGlmIGFub3RoZXIgYmFja2VuZAorICog aXMgcGVyZm9ybWluZyBhIHJlc2l6ZS4KKyAqLworYm9vbAorQ2xhaW1SZXNpemVDb29yZGluYXRv cih2b2lkKQoreworCWJvb2wJCWNsYWltZWQgPSBmYWxzZTsKKworCUFzc2VydChEU0JDdHJsICE9 IE5VTEwpOworCisJU3BpbkxvY2tBY3F1aXJlKCZEU0JDdHJsLT5jb29yZGluYXRvcl9sb2NrKTsK KwlpZiAoIURTQkN0cmwtPnJlc2l6ZV9pbl9wcm9ncmVzcykKKwl7CisJCURTQkN0cmwtPnJlc2l6 ZV9pbl9wcm9ncmVzcyA9IHRydWU7CisJCURTQkN0cmwtPmNvb3JkaW5hdG9yX3BpZCA9IE15UHJv Y1BpZDsKKwkJY2xhaW1lZCA9IHRydWU7CisJfQorCVNwaW5Mb2NrUmVsZWFzZSgmRFNCQ3RybC0+ Y29vcmRpbmF0b3JfbG9jayk7CisKKwlyZXR1cm4gY2xhaW1lZDsKK30KKworLyoKKyAqIFJlbGVh c2UgdGhlIGNvb3JkaW5hdG9yIHNsb3QgYWNxdWlyZWQgYnkgQ2xhaW1SZXNpemVDb29yZGluYXRv cigpLgorICovCit2b2lkCitSZWxlYXNlUmVzaXplQ29vcmRpbmF0b3Iodm9pZCkKK3sKKwlBc3Nl cnQoRFNCQ3RybCAhPSBOVUxMKTsKKworCVNwaW5Mb2NrQWNxdWlyZSgmRFNCQ3RybC0+Y29vcmRp bmF0b3JfbG9jayk7CisJQXNzZXJ0KERTQkN0cmwtPnJlc2l6ZV9pbl9wcm9ncmVzcyk7CisJQXNz ZXJ0KERTQkN0cmwtPmNvb3JkaW5hdG9yX3BpZCA9PSBNeVByb2NQaWQpOworCURTQkN0cmwtPnJl c2l6ZV9pbl9wcm9ncmVzcyA9IGZhbHNlOworCURTQkN0cmwtPmNvb3JkaW5hdG9yX3BpZCA9IElu dmFsaWRQaWQ7CisJU3BpbkxvY2tSZWxlYXNlKCZEU0JDdHJsLT5jb29yZGluYXRvcl9sb2NrKTsK K30KKworLyoKKyAqIERTQkNvbnRyb2xJbml0CisgKgorICogQWxsb2NhdGUgYW5kIGluaXRpYWxp emUgdGhlIER5bmFtaWNTaGFyZWRCdWZmZXJzQ29udHJvbCBzdHJ1Y3R1cmUgaW4gc2hhcmVkCisg KiBtZW1vcnkuIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBCdWZmZXJNYW5hZ2VyU2htZW1Jbml0IHNv IHRoYXQgRFNCQ3RybCBpcworICogYXZhaWxhYmxlIHdoZW4gdGhlIGJ1ZmZlciBwb29sIGlzIHNl dCB1cC4KKyAqLwordm9pZAorRFNCQ29udHJvbEluaXQodm9pZCkKK3sKKwlib29sCQlmb3VuZERT QkN0cmw7CisKKwlEU0JDdHJsID0gKER5bmFtaWNTaGFyZWRCdWZmZXJzQ29udHJvbCAqKQorCQlT aG1lbUluaXRTdHJ1Y3QoIkRTQiBDb250cm9sIiwgc2l6ZW9mKER5bmFtaWNTaGFyZWRCdWZmZXJz Q29udHJvbCksCisJCQkJCQkmZm91bmREU0JDdHJsKTsKKworCWlmICghZm91bmREU0JDdHJsKQor CXsKKwkJcGdfYXRvbWljX2luaXRfdTMyKCZEU0JDdHJsLT5sb3dOQnVmZmVycywgTkJ1ZmZlcnNH VUMpOworCQlwZ19hdG9taWNfaW5pdF91MzIoJkRTQkN0cmwtPmhpZ2hOQnVmZmVycywgTkJ1ZmZl cnNHVUMpOworCisJCVNwaW5Mb2NrSW5pdCgmRFNCQ3RybC0+Y29vcmRpbmF0b3JfbG9jayk7CisJ CURTQkN0cmwtPnJlc2l6ZV9pbl9wcm9ncmVzcyA9IGZhbHNlOworCQlEU0JDdHJsLT5jb29yZGlu YXRvcl9waWQgPSBJbnZhbGlkUGlkOworCisJCUxXTG9ja0luaXRpYWxpemUoJkRTQkN0cmwtPkFj Y2Vzc05CdWZmZXJzTG9jaywKKwkJCQkJCSBMV1RSQU5DSEVfQUNDRVNTX05CVUZGRVJTKTsKKwl9 Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYwppbmRleCBmZGI1YmFkNzkxMC4u ZWUyZWI1MjA1OTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVs aXN0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYwpAQCAtMzcs NyArMzcsNyBAQCB0eXBlZGVmIHN0cnVjdAogCS8qCiAJICogY2xvY2stc3dlZXAgaGFuZDogaW5k ZXggb2YgbmV4dCBidWZmZXIgdG8gY29uc2lkZXIgZ3JhYmJpbmcuIE5vdGUgdGhhdAogCSAqIHRo aXMgaXNuJ3QgYSBjb25jcmV0ZSBidWZmZXIgLSB3ZSBvbmx5IGV2ZXIgaW5jcmVhc2UgdGhlIHZh bHVlLiBTbywgdG8KLQkgKiBnZXQgYW4gYWN0dWFsIGJ1ZmZlciwgaXQgbmVlZHMgdG8gYmUgdXNl ZCBtb2R1bG8gTkJ1ZmZlcnMuCisJICogZ2V0IGFuIGFjdHVhbCBidWZmZXIsIGl0IG5lZWRzIHRv IGJlIHVzZWQgbW9kdWxvIGxvd05CdWZmZXJzLgogCSAqLwogCXBnX2F0b21pY191aW50MzIgbmV4 dFZpY3RpbUJ1ZmZlcjsKIApAQCAtMTEwLDYgKzExMCw3IEBAIHN0YXRpYyBpbmxpbmUgdWludDMy CiBDbG9ja1N3ZWVwVGljayh2b2lkKQogewogCXVpbnQzMgkJdmljdGltOworCWludAkJCWxvd05C dWZmZXJzOwogCiAJLyoKIAkgKiBBdG9taWNhbGx5IG1vdmUgaGFuZCBhaGVhZCBvbmUgYnVmZmVy IC0gaWYgdGhlcmUncyBzZXZlcmFsIHByb2Nlc3NlcwpAQCAtMTE4LDEzICsxMTksMTQgQEAgQ2xv Y2tTd2VlcFRpY2sodm9pZCkKIAkgKi8KIAl2aWN0aW0gPQogCQlwZ19hdG9taWNfZmV0Y2hfYWRk X3UzMigmU3RyYXRlZ3lDb250cm9sLT5uZXh0VmljdGltQnVmZmVyLCAxKTsKKwlsb3dOQnVmZmVy cyA9IEdldExvd05CdWZmZXJzKCk7CiAKLQlpZiAodmljdGltID49IE5CdWZmZXJzKQorCWlmICh2 aWN0aW0gPj0gbG93TkJ1ZmZlcnMpCiAJewogCQl1aW50MzIJCW9yaWdpbmFsVmljdGltID0gdmlj dGltOwogCiAJCS8qIGFsd2F5cyB3cmFwIHdoYXQgd2UgbG9vayB1cCBpbiBCdWZmZXJEZXNjcmlw dG9ycyAqLwotCQl2aWN0aW0gPSB2aWN0aW0gJSBOQnVmZmVyczsKKwkJdmljdGltID0gdmljdGlt ICUgbG93TkJ1ZmZlcnM7CiAKIAkJLyoKIAkJICogSWYgd2UncmUgdGhlIG9uZSB0aGF0IGp1c3Qg Y2F1c2VkIGEgd3JhcGFyb3VuZCwgZm9yY2UKQEAgLTE1Miw3ICsxNTQsNyBAQCBDbG9ja1N3ZWVw VGljayh2b2lkKQogCQkJCSAqLwogCQkJCVNwaW5Mb2NrQWNxdWlyZSgmU3RyYXRlZ3lDb250cm9s LT5idWZmZXJfc3RyYXRlZ3lfbG9jayk7CiAKLQkJCQl3cmFwcGVkID0gZXhwZWN0ZWQgJSBOQnVm ZmVyczsKKwkJCQl3cmFwcGVkID0gZXhwZWN0ZWQgJSBHZXRMb3dOQnVmZmVycygpOwogCiAJCQkJ c3VjY2VzcyA9IHBnX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3UzMigmU3RyYXRlZ3lDb250cm9s LT5uZXh0VmljdGltQnVmZmVyLAogCQkJCQkJCQkJCQkJCQkgJmV4cGVjdGVkLCB3cmFwcGVkKTsK QEAgLTIzNyw3ICsyMzksNyBAQCBTdHJhdGVneUdldEJ1ZmZlcihCdWZmZXJBY2Nlc3NTdHJhdGVn eSBzdHJhdGVneSwgdWludDY0ICpidWZfc3RhdGUsIGJvb2wgKmZyb21fcgogCXBnX2F0b21pY19m ZXRjaF9hZGRfdTMyKCZTdHJhdGVneUNvbnRyb2wtPm51bUJ1ZmZlckFsbG9jcywgMSk7CiAKIAkv KiBVc2UgdGhlICJjbG9jayBzd2VlcCIgYWxnb3JpdGhtIHRvIGZpbmQgYSBmcmVlIGJ1ZmZlciAq LwotCXRyeWNvdW50ZXIgPSBOQnVmZmVyczsKKwl0cnljb3VudGVyID0gR2V0TG93TkJ1ZmZlcnMo KTsKIAlmb3IgKDs7KQogCXsKIAkJdWludDY0CQlvbGRfYnVmX3N0YXRlOwpAQCAtMjkwLDcgKzI5 Miw3IEBAIFN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCB1 aW50NjQgKmJ1Zl9zdGF0ZSwgYm9vbCAqZnJvbV9yCiAJCQkJaWYgKHBnX2F0b21pY19jb21wYXJl X2V4Y2hhbmdlX3U2NCgmYnVmLT5zdGF0ZSwgJm9sZF9idWZfc3RhdGUsCiAJCQkJCQkJCQkJCQkg ICBsb2NhbF9idWZfc3RhdGUpKQogCQkJCXsKLQkJCQkJdHJ5Y291bnRlciA9IE5CdWZmZXJzOwor CQkJCQl0cnljb3VudGVyID0gR2V0TG93TkJ1ZmZlcnMoKTsKIAkJCQkJYnJlYWs7CiAJCQkJfQog CQkJfQpAQCAtMzI4LDE0ICszMzAsMTcgQEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNz U3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQ2NCAqYnVmX3N0YXRlLCBib29sICpmcm9tX3IKICAqIGJl aW5nIHJlYWQuCiAgKi8KIGludAotU3RyYXRlZ3lTeW5jU3RhcnQodWludDMyICpjb21wbGV0ZV9w YXNzZXMsIHVpbnQzMiAqbnVtX2J1Zl9hbGxvYykKK1N0cmF0ZWd5U3luY1N0YXJ0KHVpbnQzMiAq Y29tcGxldGVfcGFzc2VzLCB1aW50MzIgKm51bV9idWZfYWxsb2MsCisJCQkJICBpbnQgKmxvd19u YnVmZmVycykKIHsKIAl1aW50MzIJCW5leHRWaWN0aW1CdWZmZXI7CiAJaW50CQkJcmVzdWx0Owor CWludAkJCWxvd05CdWZmZXJzOwogCiAJU3BpbkxvY2tBY3F1aXJlKCZTdHJhdGVneUNvbnRyb2wt PmJ1ZmZlcl9zdHJhdGVneV9sb2NrKTsKIAluZXh0VmljdGltQnVmZmVyID0gcGdfYXRvbWljX3Jl YWRfdTMyKCZTdHJhdGVneUNvbnRyb2wtPm5leHRWaWN0aW1CdWZmZXIpOwotCXJlc3VsdCA9IG5l eHRWaWN0aW1CdWZmZXIgJSBOQnVmZmVyczsKKwlsb3dOQnVmZmVycyA9IEdldExvd05CdWZmZXJz KCk7CisJcmVzdWx0ID0gbmV4dFZpY3RpbUJ1ZmZlciAlIGxvd05CdWZmZXJzOwogCiAJaWYgKGNv bXBsZXRlX3Bhc3NlcykKIAl7CkBAIC0zNDUsMTMgKzM1MCwxNSBAQCBTdHJhdGVneVN5bmNTdGFy dCh1aW50MzIgKmNvbXBsZXRlX3Bhc3NlcywgdWludDMyICpudW1fYnVmX2FsbG9jKQogCQkgKiBB ZGRpdGlvbmFsbHkgYWRkIHRoZSBudW1iZXIgb2Ygd3JhcGFyb3VuZHMgdGhhdCBoYXBwZW5lZCBi ZWZvcmUKIAkJICogY29tcGxldGVQYXNzZXMgY291bGQgYmUgaW5jcmVtZW50ZWQuIEMuZi4gQ2xv Y2tTd2VlcFRpY2soKS4KIAkJICovCi0JCSpjb21wbGV0ZV9wYXNzZXMgKz0gbmV4dFZpY3RpbUJ1 ZmZlciAvIE5CdWZmZXJzOworCQkqY29tcGxldGVfcGFzc2VzICs9IG5leHRWaWN0aW1CdWZmZXIg LyBsb3dOQnVmZmVyczsKIAl9CiAKIAlpZiAobnVtX2J1Zl9hbGxvYykKIAl7CiAJCSpudW1fYnVm X2FsbG9jID0gcGdfYXRvbWljX2V4Y2hhbmdlX3UzMigmU3RyYXRlZ3lDb250cm9sLT5udW1CdWZm ZXJBbGxvY3MsIDApOwogCX0KKwlpZiAobG93X25idWZmZXJzKQorCQkqbG93X25idWZmZXJzID0g bG93TkJ1ZmZlcnM7CiAJU3BpbkxvY2tSZWxlYXNlKCZTdHJhdGVneUNvbnRyb2wtPmJ1ZmZlcl9z dHJhdGVneV9sb2NrKTsKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtNTIyLDEwICs1MjksMTUgQEAg R2V0QWNjZXNzU3RyYXRlZ3lXaXRoU2l6ZShCdWZmZXJBY2Nlc3NTdHJhdGVneVR5cGUgYnR5cGUs IGludCByaW5nX3NpemVfa2IpCiAJaWYgKHJpbmdfYnVmZmVycyA9PSAwKQogCQlyZXR1cm4gTlVM TDsKIAotCS8qIENhcCB0byAxLzh0aCBvZiBzaGFyZWRfYnVmZmVycyAqLwotCXJpbmdfYnVmZmVy cyA9IE1pbihOQnVmZmVycyAvIDgsIHJpbmdfYnVmZmVycyk7CisJLyoKKwkgKiBDYXAgdG8gMS84 dGggb2Ygc2hhcmVkX2J1ZmZlcnMuIFVzaW5nIEdldExvd05CdWZmZXJzKCkgaGVyZSBpcyBmaW5l IGV2ZW4KKwkgKiB0aG91Z2ggaXQgaXMgYSBub24tY3JpdGljYWwgc2l6aW5nIGRlY2lzaW9uOiB0 aGUgc3RyYXRlZ3kgc3Vydml2ZXMgYQorCSAqIHJlc2l6ZSBiZWNhdXNlIHRoZSByaW5nIHNpemUg aXMgZml4ZWQgb25jZSB0aGUgc3RyYXRlZ3kgaXMgY3JlYXRlZC4KKwkgKi8KKwlyaW5nX2J1ZmZl cnMgPSBNaW4oR2V0TG93TkJ1ZmZlcnMoKSAvIDgsIHJpbmdfYnVmZmVycyk7CiAKLQkvKiBOQnVm ZmVycyBzaG91bGQgbmV2ZXIgYmUgbGVzcyB0aGFuIDE2LCBzbyB0aGlzIHNob3VsZG4ndCBoYXBw ZW4gKi8KKwkvKiBzaGFyZWRfYnVmZmVycyBzaG91bGQgbmV2ZXIgYmUgbGVzcyB0aGFuIE1JTl9T SEFSRURfQlVGRkVSUywKKwkgKiBzbyB0aGlzIHNob3VsZG4ndCBoYXBwZW4gKi8KIAlBc3NlcnQo cmluZ19idWZmZXJzID4gMCk7CiAKIAkvKiBBbGxvY2F0ZSB0aGUgb2JqZWN0IGFuZCBpbml0aWFs aXplIGFsbCBlbGVtZW50cyB0byB6ZXJvZXMgKi8KQEAgLTU3NCw3ICs1ODYsNyBAQCBpbnQKIEdl dEFjY2Vzc1N0cmF0ZWd5UGluTGltaXQoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3kpCiB7 CiAJaWYgKHN0cmF0ZWd5ID09IE5VTEwpCi0JCXJldHVybiBOQnVmZmVyczsKKwkJcmV0dXJuIEdl dExvd05CdWZmZXJzKCk7CiAKIAlzd2l0Y2ggKHN0cmF0ZWd5LT5idHlwZSkKIAl7CkBAIC03Njgs MyArNzgwLDM2IEBAIFN0cmF0ZWd5UmVqZWN0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0 cmF0ZWd5LCBCdWZmZXJEZXNjICpidWYsIGJvb2wgZnJvbV9yCiAKIAlyZXR1cm4gdHJ1ZTsKIH0K KworLyoKKyAqIFN0cmF0ZWd5UmVzZXQgLS0gcmVzZXQgdGhlIGNsb2NrLXN3ZWVwIGN1cnNvciBm b3IgYSBidWZmZXIgcG9vbCByZXNpemUuCisgKgorICogQ2FsbGVkIGJ5IHBnX3Jlc2l6ZV9zaGFy ZWRfYnVmZmVycygpIGF0IHR3byBkaXN0aW5jdCBwb2ludHM6CisgKgorICoJLSBKdXN0IGJlZm9y ZSBwdWJsaXNoaW5nIGEgbG93ZXIgbG93TkJ1ZmZlcnMgKHNocmluaykuIFRoZSBleGlzdGluZwor ICoJICBjdXJzb3IgbWF5IGFscmVhZHkgcG9pbnQgYWJvdmUgbmV3X3NpemU7IHJlc2V0dGluZyB0 byAwIG1ha2VzIHRoZQorICoJICBuZXh0IGNsb2NrIHN3ZWVwIHN0YXJ0IGZyb20gdGhlIGJvdHRv bSBvZiB0aGUgc3Vydml2aW5nIHJhbmdlIGFuZAorICoJICBhdm9pZHMgQ2xvY2tTd2VlcFRpY2so KSB3cmFwcGluZyBwYXN0IHRoZSBuZXcgYnVmZmVycyB2aWEgbW9kdWxvCisgKgkgIGFyaXRobWV0 aWMgcmlnaHQgYXMgdGhlIGJvdW5kIG1vdmVzLgorICoKKyAqCS0gQXQgdGhlIGVuZCBvZiBhbiBl eHBhbmQsIGFmdGVyIHRoZSBuZXcgZGVzY3JpcHRvcnMgYXJlIGluaXRpYWxpemVkLAorICoJICB0 byBwb2ludCB0aGUgY3Vyc29yIGF0IHRoZSBzdGFydCBvZiB0aGUgZnJlc2hseSBhZGRlZCByYW5n ZSBzbyB0aGUKKyAqCSAgbmV4dCBzd2VlcCB0cmllcyB0aGUgZW1wdHkgYnVmZmVycyBiZWZvcmUg cmUtc2Nhbm5pbmcgZXhpc3Rpbmcgb25lcworICoJICB3aXRoIHVzYWdlX2NvdW50ID09IDAuCisg Ki8KK3ZvaWQKK1N0cmF0ZWd5UmVzZXQoaW50IG9sZF9zaXplLCBpbnQgbmV3X3NpemUpCit7CisJ U3BpbkxvY2tBY3F1aXJlKCZTdHJhdGVneUNvbnRyb2wtPmJ1ZmZlcl9zdHJhdGVneV9sb2NrKTsK KwlpZiAobmV3X3NpemUgPiBvbGRfc2l6ZSkKKwl7CisJCS8qIGV4cGFuZDogcG9pbnQgY3Vyc29y IGF0IHN0YXJ0IG9mIG5ldyByYW5nZSAqLworCQlwZ19hdG9taWNfd3JpdGVfdTMyKCZTdHJhdGVn eUNvbnRyb2wtPm5leHRWaWN0aW1CdWZmZXIsIG9sZF9zaXplKTsKKwl9CisJZWxzZQorCXsKKwkJ Lyogc2hyaW5rOiByZXdpbmQgY3Vyc29yIHRvIHRoZSBib3R0b20gb2YgdGhlIHN1cnZpdmluZyBy YW5nZSAqLworCQlwZ19hdG9taWNfd3JpdGVfdTMyKCZTdHJhdGVneUNvbnRyb2wtPm5leHRWaWN0 aW1CdWZmZXIsIDApOworCX0KKwlTcGluTG9ja1JlbGVhc2UoJlN0cmF0ZWd5Q29udHJvbC0+YnVm ZmVyX3N0cmF0ZWd5X2xvY2spOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9i dWZmZXIvbWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9tZXNvbi5idWls ZAppbmRleCBlZDg0YmYwODk3MS4uODQ1YTI2YjhkYjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvYnVmZmVyL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVm ZmVyL21lc29uLmJ1aWxkCkBAIC0yLDggKzIsMTAgQEAKIAogYmFja2VuZF9zb3VyY2VzICs9IGZp bGVzKAogICAnYnVmX2luaXQuYycsCisgICdidWZfcmVzaXplLmMnLAogICAnYnVmX3RhYmxlLmMn LAogICAnYnVmbWdyLmMnLAorICAnZHluYW1pY19zaGFyZWRfYnVmZmVycy5jJywKICAgJ2ZyZWVs aXN0LmMnLAogICAnbG9jYWxidWYuYycsCiApCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9wcm9jc2lnbmFsLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFs LmMKaW5kZXggMjY0ZTRjMjJjYTYuLmI4MDQ1YzAyOTk3IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv cHJvY3NpZ25hbC5jCkBAIC0yMjMsNiArMjIzLDE4IEBAIFByb2NTaWduYWxJbml0KGNvbnN0IHVp bnQ4ICpjYW5jZWxfa2V5LCBpbnQgY2FuY2VsX2tleV9sZW4pCiAJb25fc2htZW1fZXhpdChDbGVh bnVwUHJvY1NpZ25hbFN0YXRlLCAoRGF0dW0pIDApOwogfQogCisvKgorICogSXNQcm9jU2lnbmFs SW5pdGlhbGl6ZWQKKyAqCQlSZXR1cm4gdHJ1ZSBpZiB0aGlzIHByb2Nlc3MgaGFzIHJlZ2lzdGVy ZWQgaXRzZWxmIHdpdGggdGhlCisgKgkJUHJvY1NpZ25hbCBzdWJzeXN0ZW0gKHZpYSBQcm9jU2ln bmFsSW5pdCkgYW5kIG5vdCB5ZXQgcmVsZWFzZWQgaXRzCisgKgkJc2xvdCBpbiBDbGVhbnVwUHJv Y1NpZ25hbFN0YXRlLgorICovCitib29sCitJc1Byb2NTaWduYWxJbml0aWFsaXplZCh2b2lkKQor eworCXJldHVybiBNeVByb2NTaWduYWxTbG90ICE9IE5VTEw7Cit9CisKIC8qCiAgKiBDbGVhbnVw UHJvY1NpZ25hbFN0YXRlCiAgKgkJUmVtb3ZlIGN1cnJlbnQgcHJvY2VzcyBmcm9tIFByb2NTaWdu YWwgbWVjaGFuaXNtCkBAIC01OTAsNiArNjAyLDExIEBAIFByb2Nlc3NQcm9jU2lnbmFsQmFycmll cih2b2lkKQogCQkJCQljYXNlIFBST0NTSUdOQUxfQkFSUklFUl9DSEVDS1NVTV9PRkY6CiAJCQkJ CQlwcm9jZXNzZWQgPSBBYnNvcmJEYXRhQ2hlY2tzdW1zQmFycmllcih0eXBlKTsKIAkJCQkJCWJy ZWFrOworCQkJCQljYXNlIFBST0NTSUdOQUxfQkFSUklFUl9TSEJVRl9SRVNJWkU6CisJCQkJCQkv KiBKdXN0IGFja25vd2xlZGdlOyB0aGUgcmVzaXplIGNvb3JkaW5hdG9yIG9ubHkgbmVlZHMKKwkJ CQkJCSAqIGNvbmZpcm1hdGlvbiB0aGF0IGFsbCBiYWNrZW5kcyBoYXZlIG9ic2VydmVkIHRoZQor CQkJCQkJICogdXBkYXRlZCBsb3dOQnVmZmVycy4gKi8KKwkJCQkJCWJyZWFrOwogCQkJCX0KIAog CQkJCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50 X25hbWVzLnR4dCBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMu dHh0CmluZGV4IDU2MDY1OWY5NTY4Li5hZGExNGZjMmE2NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQKQEAgLTQxNyw2ICs0MTcsNyBAQCBY YWN0U0xSVQkiV2FpdGluZyB0byBhY2Nlc3MgdGhlIHRyYW5zYWN0aW9uIHN0YXR1cyBTTFJVIGNh Y2hlLiIKIFBhcmFsbGVsVmFjdXVtRFNBCSJXYWl0aW5nIGZvciBwYXJhbGxlbCB2YWN1dW0gZHlu YW1pYyBzaGFyZWQgbWVtb3J5IGFsbG9jYXRpb24uIgogQWlvVXJpbmdDb21wbGV0aW9uCSJXYWl0 aW5nIGZvciBhbm90aGVyIHByb2Nlc3MgdG8gY29tcGxldGUgSU8gdmlhIGlvX3VyaW5nLiIKIFNo bWVtSW5kZXgJIldhaXRpbmcgdG8gZmluZCBvciBhbGxvY2F0ZSBzcGFjZSBpbiBzaGFyZWQgbWVt b3J5LiIKK0FjY2Vzc05CdWZmZXJzCSJXYWl0aW5nIHRvIGFjY2VzcyB0aGUgY3VycmVudCBzaGFy ZWQgYnVmZmVyIGNvdW50IGR1cmluZyBkeW5hbWljIHNoYXJlZCBidWZmZXIgcmVzaXplLiIKIAog IyBObyAiQUJJX2NvbXBhdGliaWxpdHkiIHJlZ2lvbiBoZXJlIGFzIFdhaXRFdmVudExXTG9jayBo YXMgaXRzIG93biBDIGNvZGUuCiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQv Z2xvYmFscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKaW5kZXggYmJkMjhk MTRkOTkuLjk3Y2ZkNDFkODY0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9pbml0L2ds b2JhbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYwpAQCAtMTQxLDcg KzE0MSw5IEBAIGludAkJCW1heF9wYXJhbGxlbF9tYWludGVuYW5jZV93b3JrZXJzID0gMjsKICAq IE1heEJhY2tlbmRzIGlzIGNvbXB1dGVkIGJ5IFBvc3RtYXN0ZXJNYWluIGFmdGVyIG1vZHVsZXMg aGF2ZSBoYWQgYSBjaGFuY2UgdG8KICAqIHJlZ2lzdGVyIGJhY2tncm91bmQgd29ya2Vycy4KICAq LwotaW50CQkJTkJ1ZmZlcnMgPSAxNjM4NDsKK2ludAkJCU5CdWZmZXJzR1VDID0gMTYzODQ7Citi b29sCQllbmFibGVfZHluYW1pY19zaGFyZWRfYnVmZmVycyA9IGZhbHNlOworaW50CQkJTWF4TkJ1 ZmZlcnMgPSAwOwogaW50CQkJTWF4Q29ubmVjdGlvbnMgPSAxMDA7CiBpbnQJCQltYXhfd29ya2Vy X3Byb2Nlc3NlcyA9IDg7CiBpbnQJCQltYXhfcGFyYWxsZWxfd29ya2VycyA9IDg7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9ndWMuYwppbmRleCA3NzRiYmM5YmU1Zi4uZTVlZDMzNWNlMmQgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMu YwpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBh cnNlci9zY2Fuc3VwLmgiCiAjaW5jbHVkZSAicG9ydC9wZ19iaXR1dGlscy5oIgorI2luY2x1ZGUg InN0b3JhZ2UvZHluYW1pY19zaGFyZWRfYnVmZmVycy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZmQu aCIKICNpbmNsdWRlICJzdG9yYWdlL2x3bG9jay5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0u aCIKQEAgLTUzOTEsNiArNTM5MiwxMyBAQCBTaG93R1VDT3B0aW9uKGNvbnN0IHN0cnVjdCBjb25m aWdfZ2VuZXJpYyAqcmVjb3JkLCBib29sIHVzZV91bml0cykKIAkJCXsKIAkJCQljb25zdCBzdHJ1 Y3QgY29uZmlnX2ludCAqY29uZiA9ICZyZWNvcmQtPl9pbnQ7CiAKKwkJCQkvKgorCQkJCSAqIFNl dCBOQnVmZmVyc0dVQyBoZXJlIHNvIHRoYXQgYm90aCBTSE9XIHNoYXJlZF9idWZmZXJzICh1c2Vf dW5pdHM9PXRydWUpCisJCQkJICogYW5kIHBnX3NldHRpbmdzICh1c2VfdW5pdHM9PWZhbHNlKSBy ZWZsZWN0IHRoZSBjdXJyZW50IHNoYXJlZCBidWZmZXIgcG9vbCBzaXplLgorCQkJCSAqLworCQkJ CWlmIChjb25mLT52YXJpYWJsZSA9PSAmTkJ1ZmZlcnNHVUMpCisJCQkJCU5CdWZmZXJzR1VDID0g R2V0TG93TkJ1ZmZlcnMoKTsKKwogCQkJCWlmIChjb25mLT5zaG93X2hvb2spCiAJCQkJCXZhbCA9 IGNvbmYtPnNob3dfaG9vaygpOwogCQkJCWVsc2UKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNf cGFyYW1ldGVycy5kYXQKaW5kZXggYWZhYTA1OGIwNDYuLjE1ZDBlZDM1YzViIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMvYmFj a2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAtMjcwNCwxMiArMjcwNCwyOCBA QAogeyBuYW1lID0+ICdzaGFyZWRfYnVmZmVycycsIHR5cGUgPT4gJ2ludCcsIGNvbnRleHQgPT4g J1BHQ19QT1NUTUFTVEVSJywgZ3JvdXAgPT4gJ1JFU09VUkNFU19NRU0nLAogICBzaG9ydF9kZXNj ID0+ICdTZXRzIHRoZSBudW1iZXIgb2Ygc2hhcmVkIG1lbW9yeSBidWZmZXJzIHVzZWQgYnkgdGhl IHNlcnZlci4nLAogICBmbGFncyA9PiAnR1VDX1VOSVRfQkxPQ0tTJywKLSAgdmFyaWFibGUgPT4g J05CdWZmZXJzJywKKyAgdmFyaWFibGUgPT4gJ05CdWZmZXJzR1VDJywKICAgYm9vdF92YWwgPT4g JzE2Mzg0JywKLSAgbWluID0+ICcxNicsCisgIG1pbiA9PiAnTUlOX1NIQVJFRF9CVUZGRVJTJywK KyAgbWF4ID0+ICdJTlRfTUFYIC8gMicsCit9LAorCit7IG5hbWUgPT4gJ21heF9zaGFyZWRfYnVm ZmVycycsIHR5cGUgPT4gJ2ludCcsIGNvbnRleHQgPT4gJ1BHQ19QT1NUTUFTVEVSJywgZ3JvdXAg PT4gJ1JFU09VUkNFU19NRU0nLAorICBzaG9ydF9kZXNjID0+ICdTZXRzIHRoZSB1cHBlciBsaW1p dCBmb3IgdGhlIHNoYXJlZF9idWZmZXJzIHZhbHVlLicsCisgIGxvbmdfZGVzYyA9PiAnSWYgc2V0 IGFib3ZlIHplcm8sIGl0IG11c3QgYmUgYXQgbGVhc3Qgc2hhcmVkX2J1ZmZlcnMuJywKKyAgZmxh Z3MgPT4gJ0dVQ19VTklUX0JMT0NLUycsCisgIHZhcmlhYmxlID0+ICdNYXhOQnVmZmVycycsCisg IGJvb3RfdmFsID0+ICcwJywKKyAgbWluID0+ICcwJywKICAgbWF4ID0+ICdJTlRfTUFYIC8gMics CiB9LAogCit7IG5hbWUgPT4gJ2VuYWJsZV9keW5hbWljX3NoYXJlZF9idWZmZXJzJywgdHlwZSA9 PiAnYm9vbCcsIGNvbnRleHQgPT4gJ1BHQ19QT1NUTUFTVEVSJywgZ3JvdXAgPT4gJ1JFU09VUkNF U19NRU0nLAorICBzaG9ydF9kZXNjID0+ICdFbmFibGVzIGR5bmFtaWMgcmVzaXppbmcgb2YgdGhl IHNoYXJlZCBidWZmZXIgcG9vbC4nLAorICB2YXJpYWJsZSA9PiAnZW5hYmxlX2R5bmFtaWNfc2hh cmVkX2J1ZmZlcnMnLAorICBib290X3ZhbCA9PiAnZmFsc2UnLAorfSwKKwogeyBuYW1lID0+ICdz aGFyZWRfbWVtb3J5X3NpemUnLCB0eXBlID0+ICdpbnQnLCBjb250ZXh0ID0+ICdQR0NfSU5URVJO QUwnLCBncm91cCA9PiAnUFJFU0VUX09QVElPTlMnLAogICBzaG9ydF9kZXNjID0+ICdTaG93cyB0 aGUgc2l6ZSBvZiB0aGUgc2VydmVyXCdzIG1haW4gc2hhcmVkIG1lbW9yeSBhcmVhIChyb3VuZGVk IHVwIHRvIHRoZSBuZWFyZXN0IE1CKS4nLAogICBmbGFncyA9PiAnR1VDX05PVF9JTl9TQU1QTEUg fCBHVUNfRElTQUxMT1dfSU5fRklMRSB8IEdVQ19VTklUX01CIHwgR1VDX1JVTlRJTUVfQ09NUFVU RUQnLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggYmUxNTdhNWZiZTkuLjkwNDQ3MGEzZjM0 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTEyNjkzLDQgKzEyNjkzLDEzIEBACiAgIHBy b25hbWUgPT4gJ2hhc2hvaWQ4ZXh0ZW5kZWQnLCBwcm9yZXR0eXBlID0+ICdpbnQ4JywKICAgcHJv YXJndHlwZXMgPT4gJ29pZDggaW50OCcsIHByb3NyYyA9PiAnaGFzaG9pZDhleHRlbmRlZCcgfSwK IAorIyBPbmxpbmUgc2hhcmVkIGJ1ZmZlciBwb29sIHJlc2l6aW5nIChzZWUgc3JjL2JhY2tlbmQv c3RvcmFnZS9idWZmZXIvYnVmX3Jlc2l6ZS5jKQoreyBvaWQgPT4gJzY1MDAnLCBkZXNjciA9PiAn cmVzaXplIHRoZSBzaGFyZWQgYnVmZmVyIHBvb2wgdG8gYSBuZXcgc2l6ZScsCisgIHByb25hbWUg PT4gJ3BnX3Jlc2l6ZV9zaGFyZWRfYnVmZmVycycsIHByb3ZvbGF0aWxlID0+ICd2JywgcHJvcmV0 c2V0ID0+ICd0JywKKyAgcHJvcmV0dHlwZSA9PiAncmVjb3JkJywgcHJvYXJndHlwZXMgPT4gJ3Rl eHQnLAorICBwcm9hbGxhcmd0eXBlcyA9PiAne3RleHQsdGV4dCxmbG9hdDgsdGV4dH0nLAorICBw cm9hcmdtb2RlcyA9PiAne2ksbyxvLG99JywKKyAgcHJvYXJnbmFtZXMgPT4gJ3tuZXdfc2l6ZSxr ZXksdmFsdWUsdW5pdH0nLAorICBwcm9zcmMgPT4gJ3BnX3Jlc2l6ZV9zaGFyZWRfYnVmZmVycycg fSwKKwogXQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggYi9zcmMvaW5jbHVk ZS9taXNjYWRtaW4uaAppbmRleCA4Y2NkZjYxMjQ2Yi4uZTkzZWFhZjZiMWMgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCisrKyBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCkBA IC0xNzUsMTIgKzE3NSwyOCBAQCBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBFeGl0T25BbnlFcnJv cjsKIGV4dGVybiBQR0RMTElNUE9SVCBjaGFyICpEYXRhRGlyOwogZXh0ZXJuIFBHRExMSU1QT1JU IGludCBkYXRhX2RpcmVjdG9yeV9tb2RlOwogCi1leHRlcm4gUEdETExJTVBPUlQgaW50IE5CdWZm ZXJzOworZXh0ZXJuIFBHRExMSU1QT1JUIGludCBOQnVmZmVyc0dVQzsKK2V4dGVybiBQR0RMTElN UE9SVCBpbnQgTWF4TkJ1ZmZlcnM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IE1heEJhY2tlbmRz OwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBNYXhDb25uZWN0aW9uczsKIGV4dGVybiBQR0RMTElN UE9SVCBpbnQgbWF4X3dvcmtlcl9wcm9jZXNzZXM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1h eF9wYXJhbGxlbF93b3JrZXJzOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBhdXRvdmFjdXVtX21h eF9wYXJhbGxlbF93b3JrZXJzOworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2R5bmFt aWNfc2hhcmVkX2J1ZmZlcnM7CisKKy8qCisgKiBHZXRNYXhOQnVmZmVycworICoKKyAqIEJlZm9y ZSBEU0IgaXMgaW50cm9kdWNlZCwgUEcgZG9lcyBub3QgcmVjb2duaXplIG1heF9zaGFyZWRfYnVm ZmVycyBHVUMuCisgKiBXaGVuIG1heF9zaGFyZWRfYnVmZmVycyBpcyBub3Qgc2V0LCBpdCBpcyBy ZXNvbHZlZCB0byBOQnVmZmVyc0dVQy4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK0dldE1heE5C dWZmZXJzKHZvaWQpCit7CisJaWYgKGVuYWJsZV9keW5hbWljX3NoYXJlZF9idWZmZXJzKQorCQly ZXR1cm4gTWF4TkJ1ZmZlcnM7CisJcmV0dXJuIE5CdWZmZXJzR1VDOworfQogCiBleHRlcm4gUEdE TExJTVBPUlQgaW50IGNvbW1pdF90aW1lc3RhbXBfYnVmZmVyczsKIGV4dGVybiBQR0RMTElNUE9S VCBpbnQgbXVsdGl4YWN0X21lbWJlcl9idWZmZXJzOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv c3RvcmFnZS9idWZfaW50ZXJuYWxzLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5h bHMuaAppbmRleCA4OTYxNWEyNTRhMy4uMWM1OTg5YzI0NzIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVm X2ludGVybmFscy5oCkBAIC01ODQsOSArNTg0LDEyIEBAIGV4dGVybiBCdWZmZXJEZXNjICpTdHJh dGVneUdldEJ1ZmZlcihCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwKIGV4dGVybiBib29s IFN0cmF0ZWd5UmVqZWN0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAogCQkJ CQkJCQkgQnVmZmVyRGVzYyAqYnVmLCBib29sIGZyb21fcmluZyk7CiAKLWV4dGVybiBpbnQJU3Ry YXRlZ3lTeW5jU3RhcnQodWludDMyICpjb21wbGV0ZV9wYXNzZXMsIHVpbnQzMiAqbnVtX2J1Zl9h bGxvYyk7CitleHRlcm4gaW50CVN0cmF0ZWd5U3luY1N0YXJ0KHVpbnQzMiAqY29tcGxldGVfcGFz c2VzLCB1aW50MzIgKm51bV9idWZfYWxsb2MsCisJCQkJCQkJCSAgaW50ICpsb3dfbmJ1ZmZlcnMp OwogZXh0ZXJuIHZvaWQgU3RyYXRlZ3lOb3RpZnlCZ1dyaXRlcihpbnQgYmd3cHJvY25vKTsKIAor ZXh0ZXJuIHZvaWQgU3RyYXRlZ3lSZXNldChpbnQgb2xkX3NpemUsIGludCBuZXdfc2l6ZSk7CisK IC8qIGJ1Zl90YWJsZS5jICovCiBleHRlcm4gdWludDMyIEJ1ZlRhYmxlSGFzaENvZGUoQnVmZmVy VGFnICp0YWdQdHIpOwogZXh0ZXJuIGludAlCdWZUYWJsZUxvb2t1cChCdWZmZXJUYWcgKnRhZ1B0 ciwgdWludDMyIGhhc2hjb2RlKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVm bWdyLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCmluZGV4IDY4MzdiMzVmYzZkLi4z ZGJhZjM2NDEzMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAorKysg Yi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCkBAIC0xNCwxMSArMTQsMTMgQEAKICNpZm5k ZWYgQlVGTUdSX0gKICNkZWZpbmUgQlVGTUdSX0gKIAorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgog I2luY2x1ZGUgInBvcnQvcGdfaW92ZWMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2Fpb190eXBlcy5o IgogI2luY2x1ZGUgInN0b3JhZ2UvYmxvY2suaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zi5oIgog I2luY2x1ZGUgInN0b3JhZ2UvYnVmcGFnZS5oIgorI2luY2x1ZGUgInN0b3JhZ2UvZHluYW1pY19z aGFyZWRfYnVmZmVycy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcmVsZmlsZWxvY2F0b3IuaCIKICNp bmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKQEAg LTE1OSw3ICsxNjEsNyBAQCB0eXBlZGVmIHN0cnVjdCBSZWFkQnVmZmVyc09wZXJhdGlvbiBSZWFk QnVmZmVyc09wZXJhdGlvbjsKIHR5cGVkZWYgc3RydWN0IFdyaXRlYmFja0NvbnRleHQgV3JpdGVi YWNrQ29udGV4dDsKIAogLyogaW4gZ2xvYmFscy5jIC4uLiB0aGlzIGR1cGxpY2F0ZXMgbWlzY2Fk bWluLmggKi8KLWV4dGVybiBQR0RMTElNUE9SVCBpbnQgTkJ1ZmZlcnM7CitleHRlcm4gUEdETExJ TVBPUlQgaW50IE5CdWZmZXJzR1VDOwogCiAvKiBpbiBidWZtZ3IuYyAqLwogZXh0ZXJuIFBHRExM SU1QT1JUIGJvb2wgemVyb19kYW1hZ2VkX3BhZ2VzOwpAQCAtMzcxLDYgKzM3MywxMyBAQCBleHRl cm4gdm9pZCBNYXJrRGlydHlBbGxVbnBpbm5lZEJ1ZmZlcnMoaW50MzIgKmJ1ZmZlcnNfZGlydGll ZCwKIAkJCQkJCQkJCQlpbnQzMiAqYnVmZmVyc19hbHJlYWR5X2RpcnR5LAogCQkJCQkJCQkJCWlu dDMyICpidWZmZXJzX3NraXBwZWQpOwogCitleHRlcm4gU2l6ZSBCdWZmZXJNYW5hZ2VyU2htZW1F eHBhbmQoaW50IGxvd05CdWZmZXJzLCBpbnQgaGlnaE5CdWZmZXJzLCBib29sICpzdWNjZXNzKTsK K2V4dGVybiB2b2lkIEJ1ZmZlck1hbmFnZXJTaG1lbUluaXRCdWZmZXJzKGludCBsb3dOQnVmZmVy cywgaW50IGhpZ2hOQnVmZmVycyk7CitleHRlcm4gU2l6ZSBCdWZmZXJNYW5hZ2VyU2htZW1TaHJp bmsoaW50IGxvd05CdWZmZXJzLCBpbnQgaGlnaE5CdWZmZXJzLCBib29sICpzdWNjZXNzKTsKKwor LyogaW4gYnVmbWdyLmMgKi8KK2V4dGVybiBib29sIEV2aWN0RXh0cmFCdWZmZXJzKGludCBsb3dO QnVmZmVycywgaW50IGhpZ2hOQnVmZmVycyk7CisKIC8qIGluIGxvY2FsYnVmLmMgKi8KIGV4dGVy biB2b2lkIEF0UHJvY0V4aXRfTG9jYWxCdWZmZXJzKHZvaWQpOwogCkBAIC00MTgsNyArNDI3LDcg QEAgZXh0ZXJuIHZvaWQgRnJlZUFjY2Vzc1N0cmF0ZWd5KEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0 cmF0ZWd5KTsKIHN0YXRpYyBpbmxpbmUgYm9vbAogQnVmZmVySXNWYWxpZChCdWZmZXIgYnVmbnVt KQogewotCUFzc2VydChidWZudW0gPD0gTkJ1ZmZlcnMpOworCUFzc2VydChidWZudW0gPD0gKEJ1 ZmZlcikgR2V0TWF4TkJ1ZmZlcnMoKSk7CiAJQXNzZXJ0KGJ1Zm51bSA+PSAtTkxvY0J1ZmZlcik7 CiAKIAlyZXR1cm4gYnVmbnVtICE9IEludmFsaWRCdWZmZXI7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9zdG9yYWdlL2R5bmFtaWNfc2hhcmVkX2J1ZmZlcnMuaCBiL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvZHluYW1pY19zaGFyZWRfYnVmZmVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi45ZDU3YjI1ZTE1ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvZHluYW1pY19zaGFyZWRfYnVmZmVycy5oCkBAIC0wLDAgKzEsMTAzIEBACisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBkeW5hbWljX3NoYXJlZF9idWZmZXJzLmgKKyAqCSAgRHluYW1p YyBzaGFyZWQgYnVmZmVyIChEU0IpIGNvb3JkaW5hdGlvbiBzdGF0ZSBhbmQgaGVscGVycy4KKyAq CisgKiBUaGlzIGhlYWRlciBjb2xsZWN0cyB0aGUgbmVvbi1zcGVjaWZpYyBtYWNoaW5lcnkgdGhh dCBsZXRzIHNoYXJlZF9idWZmZXJzCisgKiBncm93IGFuZCBzaHJpbmsgYXQgcnVudGltZS4KKyAq CisgKiBTZWUgcGd4bi9uZW9uL1JFQURNRS5tZCAoIkR5bmFtaWMgc2hhcmVkIGJ1ZmZlciIpIGZv ciB0aGUgZnVsbCBkZXNpZ24gYW5kCisgKiB0aGUgcmVzaXplIHByb3RvY29sLgorICoKKyAqIHNy Yy9pbmNsdWRlL3N0b3JhZ2UvZHluYW1pY19zaGFyZWRfYnVmZmVycy5oCisgKgorICotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgRFlOQU1JQ19TSEFSRURfQlVGRkVSU19ICisjZGVmaW5l IERZTkFNSUNfU0hBUkVEX0JVRkZFUlNfSAorCisjaW5jbHVkZSAicG9ydC9hdG9taWNzLmgiCisj aW5jbHVkZSAic3RvcmFnZS9sd2xvY2suaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIKKwor LyoKKyAqIE1pbmltdW0gYWxsb3dlZCB2YWx1ZSBvZiB0aGUgc2hhcmVkX2J1ZmZlcnMgR1VDLCBh bmQgdGhlIHNtYWxsZXN0IHNpemUgdGhhdAorICogcGdfcmVzaXplX3NoYXJlZF9idWZmZXJzKCkg Y2FuIHNocmluayB0by4KKyAqLworI2RlZmluZSBNSU5fU0hBUkVEX0JVRkZFUlMJMTYKKworLyoK KyAqIER5bmFtaWNTaGFyZWRCdWZmZXJzQ29udHJvbCBpcyBzaGFyZWQgYmV0d2VlbiBiYWNrZW5k cyBhbmQgaGVscHMgdG8KKyAqIGNvb3JkaW5hdGUgc2hhcmVkIGJ1ZmZlciBwb29sIHJlc2l6ZS4g U2VlIHBneG4vbmVvbi9SRUFETUUubWQKKyAqICgiRHluYW1pYyBzaGFyZWQgYnVmZmVyIikgZm9y IHRoZSBmdWxsIGRlc2lnbiBhbmQgcHJvdG9jb2wuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJ LyoKKwkgKiBXaGVuIGEgcmVzaXplIGlzIGluIHByb2dyZXNzLCBgcmVzaXplX2luX3Byb2dyZXNz YCBpcyBzZXQgYW5kCisJICogYGNvb3JkaW5hdG9yX3BpZGAgaXMgdGhlIFBJRCBvZiB0aGUgYmFj a2VuZCBwZXJmb3JtaW5nIHRoZSByZXNpemUuCisJICovCisJYm9vbAkJcmVzaXplX2luX3Byb2dy ZXNzOworCXBpZF90CQljb29yZGluYXRvcl9waWQ7CisJc2xvY2tfdAkJY29vcmRpbmF0b3JfbG9j azsJLyogcHJvdGVjdHMgdGhlIHR3byBmaWVsZHMgYWJvdmUgKi8KKworCXBnX2F0b21pY191aW50 MzIgbG93TkJ1ZmZlcnM7CS8qIGxvdyB3YXRlciBtYXJrOiBiYWNrZW5kcyBhbGxvY2F0ZQorCQkJ CQkJCQkJICogYnVmZmVycyBmcm9tIFswLCBsb3dOQnVmZmVycykuICovCisJcGdfYXRvbWljX3Vp bnQzMiBoaWdoTkJ1ZmZlcnM7CS8qIGhpZ2ggd2F0ZXIgbWFyazogYnVmZmVyIGRlc2NyaXB0b3IK KwkJCQkJCQkJCSAqIG1lbW9yeSBpbiBbMCwgaGlnaE5CdWZmZXJzKSBpcworCQkJCQkJCQkJICog YWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gKi8KKwlMV0xvY2sJCUFjY2Vzc05CdWZmZXJzTG9j azsgLyogQmFja2VuZHMgaG9sZCB0aGlzIGluIHNoYXJlZCBtb2RlIHdoaWxlCisJCQkJCQkJCQkg KiBpdGVyYXRpbmcgdGhlIGJ1ZmZlciBwb29sIHVwIHRvCisJCQkJCQkJCQkgKiBoaWdoTkJ1ZmZl cnM7IHRoZSByZXNpemUgY29vcmRpbmF0b3IKKwkJCQkJCQkJCSAqIGFjcXVpcmVzIGl0IGV4Y2x1 c2l2ZWx5IHRvIG11dGF0ZSB0aGUKKwkJCQkJCQkJCSAqIGJ1ZmZlciBwb29sIG1lbW9yeSBhbmQg cHVibGlzaCBhIG5ldworCQkJCQkJCQkJICogaGlnaE5CdWZmZXJzLiAqLworfSBEeW5hbWljU2hh cmVkQnVmZmVyc0NvbnRyb2w7CisKK2V4dGVybiBQR0RMTElNUE9SVCBEeW5hbWljU2hhcmVkQnVm ZmVyc0NvbnRyb2wgKkRTQkN0cmw7CisKK2V4dGVybiBQR0RMTElNUE9SVCBpbnQgTkJ1ZmZlcnNH VUM7CisKK2V4dGVybiBib29sIElzUHJvY1NpZ25hbEluaXRpYWxpemVkKHZvaWQpOworCisvKgor ICogR2V0SGlnaE5CdWZmZXJzIHJldHVybnMgdGhlIGhpZ2ggd2F0ZXIgbWFyay4KKyAqLworc3Rh dGljIGlubGluZSBpbnQKK0dldEhpZ2hOQnVmZmVycyh2b2lkKQoreworCWlmIChEU0JDdHJsID09 IE5VTEwpCisJCXJldHVybiBOQnVmZmVyc0dVQzsKKwlyZXR1cm4gcGdfYXRvbWljX3JlYWRfdTMy KCZEU0JDdHJsLT5oaWdoTkJ1ZmZlcnMpOworfQorCisvKgorICogR2V0TG93TkJ1ZmZlcnMgcmV0 dXJucyB0aGUgbG93IHdhdGVyIG1hcmsuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitHZXRMb3dO QnVmZmVycyh2b2lkKQoreworCWlmIChEU0JDdHJsID09IE5VTEwpCisJCXJldHVybiBOQnVmZmVy c0dVQzsKKwkvKgorCSAqIFRoaXMgbXVzdCBvbmx5IGJlIGNhbGxlZCBmcm9tIGEgcHJvY2VzcyB0 aGF0IGlzIHN1YnNjcmliZWQgdG8gdGhlCisJICogU0hCVUZfUkVTSVpFIFByb2NTaWduYWwgYmFy cmllciAoaS5lLiBvbmUgdGhhdCBoYXMgZmluaXNoZWQKKwkgKiBQcm9jU2lnbmFsSW5pdCkgLS0g b3RoZXJ3aXNlIGEgY29uY3VycmVudAorCSAqIHNocmluayBjb3VsZCBmcmVlIHRoZSBidWZmZXIg bWVtb3J5IGluIFtuZXdfbG93LCBvbGRfbG93KSB3aXRob3V0CisJICogd2FpdGluZyBmb3IgdXMu CisJICovCisJQXNzZXJ0KElzUHJvY1NpZ25hbEluaXRpYWxpemVkKCkpOworCXJldHVybiBwZ19h dG9taWNfcmVhZF91MzIoJkRTQkN0cmwtPmxvd05CdWZmZXJzKTsKK30KKworZXh0ZXJuIHZvaWQg RFNCQ29udHJvbEluaXQodm9pZCk7CisKKy8qCisgKiBUcnkgdG8gY2xhaW0gY29vcmRpbmF0b3Ig c3RhdHVzIGZvciBhIGJ1ZmZlci1wb29sIHJlc2l6ZS4gUmV0dXJucyB0cnVlIGlmCisgKiB3ZSBi ZWNhbWUgdGhlIGNvb3JkaW5hdG9yIChjYWxsZXIgbXVzdCBldmVudHVhbGx5IGNhbGwKKyAqIFJl bGVhc2VSZXNpemVDb29yZGluYXRvcigpKSwgZmFsc2UgaWYgYSByZXNpemUgd2FzIGFscmVhZHkg aW4gcHJvZ3Jlc3MuCisgKi8KK2V4dGVybiBib29sIENsYWltUmVzaXplQ29vcmRpbmF0b3Iodm9p ZCk7CitleHRlcm4gdm9pZCBSZWxlYXNlUmVzaXplQ29vcmRpbmF0b3Iodm9pZCk7CisKKyNlbmRp ZgkJCQkJCQkvKiBEWU5BTUlDX1NIQVJFRF9CVUZGRVJTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3N0b3JhZ2UvaXBjLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2lwYy5oCmluZGV4IGIy MDViMDBlN2ExLi43MjhiZWRkMWNkOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9p cGMuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2lwYy5oCkBAIC02NCw2ICs2NCw0NyBAQCB0 eXBlZGVmIHZvaWQgKCpzaG1lbV9zdGFydHVwX2hvb2tfdHlwZSkgKHZvaWQpOwogLyogaXBjLmMg Ki8KIGV4dGVybiBQR0RMTElNUE9SVCBib29sIHByb2NfZXhpdF9pbnByb2dyZXNzOwogZXh0ZXJu IFBHRExMSU1QT1JUIGJvb2wgc2htZW1fZXhpdF9pbnByb2dyZXNzOworZXh0ZXJuIGludCBBY3F1 aXJlTkJ1ZmZlcnNMb2NrKHZvaWQpOworZXh0ZXJuIHZvaWQgUmVsZWFzZU5CdWZmZXJzTG9jayh2 b2lkKTsKKworLyotLS0tLS0tLS0tCisgKiBCRUdJTl9OQlVGRkVSU19BQ0NFU1MgLyBFTkRfTkJV RkZFUlNfQUNDRVNTCisgKgorICogVGhlIGxvY2sgaXMgcmVsZWFzZWQgYXQgc2NvcGUgZXhpdCB2 aWEgX19hdHRyaWJ1dGVfXygoY2xlYW51cCkpLCBzbzoKKyAqCS0gZWFybHkgYHJldHVybmAsIGBi cmVha2AsIG9yIGBnb3RvYCBiZXR3ZWVuIEJFR0lOIGFuZCBFTkQgZG9lcyBOT1QgbGVhay4KKyAq CS0gRU5EX05CVUZGRVJTX0FDQ0VTUyhuYW1lKSBpcyBpZGVtcG90ZW50OiBpdCByZWxlYXNlcyB0 aGUgbG9jayBhbmQgc2V0cworICoJICBhIHNlbnRpbmVsIHNvIHRoZSBjbGVhbnVwIGF0IHNjb3Bl IGV4aXQgc2tpcHMgYSBzZWNvbmQgcmVsZWFzZS4gVXNlIGl0CisgKgkgIHdoZW4geW91IHdhbnQg dG8gZHJvcCB0aGUgbG9jayBiZWZvcmUgdGhlIGVuY2xvc2luZyBibG9jayBlbmRzLgorICoJLSBl cmVwb3J0KEVSUk9SKSBieXBhc3NlcyB0aGUgY2xlYW51cCBhdHRyaWJ1dGUsIGJ1dCBMV0xvY2tS ZWxlYXNlQWxsKCkKKyAqCSAgZHVyaW5nIHRyYW5zYWN0aW9uIGFib3J0IHN0aWxsIHJlbGVhc2Vz IEFjY2Vzc05CdWZmZXJzTG9jaywgc28gbm8gbGVhay4KKyAqCisgKiBVc2FnZToKKyAqCQlCRUdJ Tl9OQlVGRkVSU19BQ0NFU1MobG9jYWxOQnVmZmVycyk7CisgKgkJZm9yIChpbnQgaSA9IDA7IGkg PCBsb2NhbE5CdWZmZXJzOyBpKyspCisgKgkJCS4uLiB1c2UgYnVmZmVyIGkgLi4uCisgKgkJRU5E X05CVUZGRVJTX0FDQ0VTUyhsb2NhbE5CdWZmZXJzKTsKKyAqCisgKi0tLS0tLS0tLS0KKyAqLwor c3RhdGljIGlubGluZSB2b2lkCituYnVmZmVyc19sb2NrX2F1dG9fcmVsZWFzZShjb25zdCBib29s ICpyZWxlYXNlZCkKK3sKKwlpZiAoISpyZWxlYXNlZCkKKwkJUmVsZWFzZU5CdWZmZXJzTG9jaygp OworfQorCisjZGVmaW5lIEJFR0lOX05CVUZGRVJTX0FDQ0VTUyhuYW1lKSBcCisJYm9vbCBuYW1l IyNfcmVsZWFzZWQgX19hdHRyaWJ1dGVfXygoY2xlYW51cChuYnVmZmVyc19sb2NrX2F1dG9fcmVs ZWFzZSkpKSA9IGZhbHNlOyBcCisJaW50IG5hbWUgPSBBY3F1aXJlTkJ1ZmZlcnNMb2NrKCkKKwor I2RlZmluZSBFTkRfTkJVRkZFUlNfQUNDRVNTKG5hbWUpIFwKKwlkbyB7IFwKKwkJaWYgKCFuYW1l IyNfcmVsZWFzZWQpIFwKKwkJeyBcCisJCQlSZWxlYXNlTkJ1ZmZlcnNMb2NrKCk7IFwKKwkJCW5h bWUjI19yZWxlYXNlZCA9IHRydWU7IFwKKwkJfSBcCisJfSB3aGlsZSAoMCkKIAogcGdfbm9yZXR1 cm4gZXh0ZXJuIHZvaWQgcHJvY19leGl0KGludCBjb2RlKTsKIGV4dGVybiB2b2lkIHNobWVtX2V4 aXQoaW50IGNvZGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0 LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaAppbmRleCBkN2ViNjQ4YmQyNy4u NmM5YjQ3YmMzNjggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5o CisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oCkBAIC0xNDAsMyArMTQwLDQg QEAgUEdfTFdMT0NLVFJBTkNIRShYQUNUX1NMUlUsIFhhY3RTTFJVKQogUEdfTFdMT0NLVFJBTkNI RShQQVJBTExFTF9WQUNVVU1fRFNBLCBQYXJhbGxlbFZhY3V1bURTQSkKIFBHX0xXTE9DS1RSQU5D SEUoQUlPX1VSSU5HX0NPTVBMRVRJT04sIEFpb1VyaW5nQ29tcGxldGlvbikKIFBHX0xXTE9DS1RS QU5DSEUoU0hNRU1fSU5ERVgsIFNobWVtSW5kZXgpCitQR19MV0xPQ0tUUkFOQ0hFKEFDQ0VTU19O QlVGRkVSUywgQWNjZXNzTkJ1ZmZlcnMpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdl L3Byb2NzaWduYWwuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCmluZGV4IGFh YTE1OGJmZDY2Li5lNDk2YzBiY2E3YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9w cm9jc2lnbmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmgKQEAgLTU0 LDYgKzU0LDcgQEAgdHlwZWRlZiBlbnVtCiAJUFJPQ1NJR05BTF9CQVJSSUVSX0NIRUNLU1VNX0lO UFJPR1JFU1NfT04sCiAJUFJPQ1NJR05BTF9CQVJSSUVSX0NIRUNLU1VNX0lOUFJPR1JFU1NfT0ZG LAogCVBST0NTSUdOQUxfQkFSUklFUl9DSEVDS1NVTV9PTiwKKwlQUk9DU0lHTkFMX0JBUlJJRVJf U0hCVUZfUkVTSVpFLAkvKiBzaGFyZWQgYnVmZmVyIHJlc2l6ZSBiYXJyaWVyICovCiB9IFByb2NT aWduYWxCYXJyaWVyVHlwZTsKIAogLyoKQEAgLTcwLDYgKzcxLDcgQEAgdHlwZWRlZiBlbnVtCiAg KiBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gcHJvY3NpZ25hbC5jCiAgKi8KIGV4dGVybiB2 b2lkIFByb2NTaWduYWxJbml0KGNvbnN0IHVpbnQ4ICpjYW5jZWxfa2V5LCBpbnQgY2FuY2VsX2tl eV9sZW4pOworZXh0ZXJuIGJvb2wgSXNQcm9jU2lnbmFsSW5pdGlhbGl6ZWQodm9pZCk7CiBleHRl cm4gaW50CVNlbmRQcm9jU2lnbmFsKHBpZF90IHBpZCwgUHJvY1NpZ25hbFJlYXNvbiByZWFzb24s CiAJCQkJCQkgICBQcm9jTnVtYmVyIHByb2NOdW1iZXIpOwogZXh0ZXJuIHZvaWQgU2VuZENhbmNl bFJlcXVlc3QoaW50IGJhY2tlbmRQSUQsIGNvbnN0IHVpbnQ4ICpjYW5jZWxfa2V5LCBpbnQgY2Fu Y2VsX2tleV9sZW4pOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2 aWV3cy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAppbmRleCAx MzJiNTZhNTg2NC4uYTc0OGU3YmI2MjYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvc3lzdmlld3Mub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmll d3Mub3V0CkBAIC0xNTIsNyArMTUyLDcgQEAgc2VsZWN0IGNvdW50KCopID0gMCBhcyBvayBmcm9t IHBnX3N0YXRfcmVjb3Zlcnk7CiAKIC0tIFRoaXMgaXMgdG8gcmVjb3JkIHRoZSBwcmV2YWlsaW5n IHBsYW5uZXIgZW5hYmxlX2ZvbyBzZXR0aW5ncyBkdXJpbmcKIC0tIGEgcmVncmVzc2lvbiB0ZXN0 IHJ1bi4KLXNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBs aWtlICdlbmFibGUlJzsKK3NlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hl cmUgbmFtZSBsaWtlICdlbmFibGUlJyBhbmQgbmFtZSA8PiAnZW5hYmxlX2R5bmFtaWNfc2hhcmVk X2J1ZmZlcnMnOwogICAgICAgICAgICAgICBuYW1lICAgICAgICAgICAgICB8IHNldHRpbmcgCiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0KICBlbmFibGVfYXN5bmNf YXBwZW5kICAgICAgICAgICAgfCBvbgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwv c3lzdmlld3Muc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3lzdmlld3Muc3FsCmluZGV4IDUw N2U0MDBhZDRhLi41MzY2Zjg2NDlhMyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwv c3lzdmlld3Muc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N5c3ZpZXdzLnNxbApAQCAt ODEsNyArODEsNyBAQCBzZWxlY3QgY291bnQoKikgPSAwIGFzIG9rIGZyb20gcGdfc3RhdF9yZWNv dmVyeTsKIAogLS0gVGhpcyBpcyB0byByZWNvcmQgdGhlIHByZXZhaWxpbmcgcGxhbm5lciBlbmFi bGVfZm9vIHNldHRpbmdzIGR1cmluZwogLS0gYSByZWdyZXNzaW9uIHRlc3QgcnVuLgotc2VsZWN0 IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2UgJ2VuYWJsZSUn Oworc2VsZWN0IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2Ug J2VuYWJsZSUnIGFuZCBuYW1lIDw+ICdlbmFibGVfZHluYW1pY19zaGFyZWRfYnVmZmVycyc7CiAK IC0tIFRoZXJlIGFyZSBhbHdheXMgd2FpdCBldmVudCBkZXNjcmlwdGlvbnMgZm9yIHZhcmlvdXMg dHlwZXMuICBJbmplY3Rpb25Qb2ludAogLS0gbWF5IGJlIHByZXNlbnQgb3IgYWJzZW50LCBkZXBl bmRpbmcgb24gaGlzdG9yeSBzaW5jZSBsYXN0IHBvc3RtYXN0ZXIgc3RhcnQuCmRpZmYgLS1naXQg YS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CmluZGV4IDhjZjQwYzg3MDQzLi4xNDBiZWQ1YmNmZCAxMDA2NDQKLS0tIGEv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QKQEAgLTcxNSw2ICs3MTUsNyBAQCBEdW1wYWJsZU9iamVjdAogRHVtcGFi bGVPYmplY3RUeXBlCiBEdW1wYWJsZU9iamVjdFdpdGhBY2wKIER5bmFtaWNGaWxlTGlzdAorRHlu YW1pY1NoYXJlZEJ1ZmZlcnNDb250cm9sCiBEeW5hbWljWm9uZUFiYnJldgogRUNEZXJpdmVzRW50 cnkKIEVDRGVyaXZlc0tleQoKYmFzZS1jb21taXQ6IDAzOTJmYjkwMGViODlmNTI5ODhjY2NkMzMw NDY0NDNjMzljNzBkMWMKLS0gCjIuNTQuMAoK --0000000000002ef48006541073f3 Content-Type: text/markdown; charset="UTF-8"; name="README-dsb.md" Content-Disposition: attachment; filename="README-dsb.md" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqb3n1sk1 IyMjIEJ1ZmZlciBjb3VudCB2YXJpYWJsZXMKClRoZSBwb29sIHNpemUgaXMgdHJhY2tlZCB3aXRo IHR3byBhdG9taWMgd2F0ZXIgbWFya3MgaW4gYER5bmFtaWNTaGFyZWRCdWZmZXJzQ29udHJvbGA6 CgotICoqYGxvd05CdWZmZXJzYCoqIOKAlCB0aGUgbG93ZXIgYm91bmQuIEJhY2tlbmRzIG9ubHkg YWxsb2NhdGUgYnVmZmVycyBmcm9tIGBbMCwgbG93TkJ1ZmZlcnMpYC4KLSAqKmBoaWdoTkJ1ZmZl cnNgKiog4oCUIHRoZSB1cHBlciBib3VuZC4gQnVmZmVyIGRlc2NyaXB0b3IgbWVtb3J5IGluCiAg YFswLCBoaWdoTkJ1ZmZlcnMpYCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLgoKV2UgYWxz byBtYWludGFpbiB0aHJlZSB2YXJpYWJsZXMgdXNlZCBhdCBwb3N0bWFzdGVyIHN0YXJ0dXAgb25s eS4KLSAqKmBOQnVmZmVyc2AqKiDigJQgRGVwcmVjYXRlZCBhbmQgcmVtb3ZlZC4KLSAqKmBOQnVm ZmVyc0dVQ2AqKiDigJQgQmFja3MgdGhlIGBzaGFyZWRfYnVmZmVyc2AgR1VDLiBJdCBjYXB0dXJl cyB0aGUKICBpbml0aWFsIHBvb2wgc2l6ZSBhdCBwb3N0bWFzdGVyIHN0YXJ0dXAuIGBTSE9XIHNo YXJlZF9idWZmZXJzYCBzaG93cyBgbG93TkJ1ZmZlcnNgIHZhbHVlLgotICoqYE1heE5CdWZmZXJz YCoqIOKAlCBCYWNrcyB0aGUgYG1heF9zaGFyZWRfYnVmZmVyc2AgR1VDIGFuZCBpdCdzIHRoZSB1 cHBlciBsaW1pdCBvZiAqKmBoaWdoTkJ1ZmZlcnNgKiouCgpJbnZhcmlhbnRzOgoKLSBgTUlOX1NI QVJFRF9CVUZGRVJTICg9IDE2KSA8PSBsb3dOQnVmZmVycyA8PSBoaWdoTkJ1ZmZlcnMgPD0gTWF4 TkJ1ZmZlcnNgLgotIEluIHN0ZWFkeSBzdGF0ZSAobm8gcmVzaXplIGluIHByb2dyZXNzKSwgYGxv d05CdWZmZXJzID09IGhpZ2hOQnVmZmVyc2AuCi0gYGxvd05CdWZmZXJzIDwgaGlnaE5CdWZmZXJz YCBvbmx5IHdoaWxlIGEgc2hyaW5rIGlzIGluIGZsaWdodC4KCgojIyMjIyBTdGVhZHkgc3RhdGUg YXQgNCBDVQoKfCBWYXJpYWJsZSAgICAgICAgIHwgVmFsdWUgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8CnwgLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0gfAp8IGBNYXhOQnVmZmVyc2AgICAgfCB+NU0gICh+NDEgR0Is IHNpemVkIGZvciA4IENVKSAgICAgICAgICAgIHwKfCBgbG93TkJ1ZmZlcnNgICAgIHwgfjNNICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgYGhpZ2hOQnVmZmVyc2AgICB8 IH4zTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAoKIyMjIFdoZW4gdG8g dXNlIHdoaWNoCi0gQnVmZmVyIGFsbG9jYXRpb24gY29kZSAoY2xvY2stc3dlZXAsIGZyZWVsaXN0 LCByaW5nLWJ1ZmZlciBzaXppbmcsIGV0Yy4pIHNob3VsZCBjYWxsIGBHZXRMb3dOQnVmZmVycygp YCwgd2hpY2ggcmV0dXJucyBgbG93TkJ1ZmZlcnNgLgotIEZ1bmN0aW9ucyB0aGF0IHZpc2l0IHRo ZSBidWZmZXIgYXJyYXkgKGUuZy4gYERyb3BSZWxhdGlvbkJ1ZmZlcnNgKSBtdXN0IGNhbGwgYEJF R0lOX05CVUZGRVJTX0FDQ0VTUyhsb2NhbE5CdWZmZXJzKWAgYW5kIGBFTkRfTkJVRkZFUlNfQUND RVNTKGxvY2FsTkJ1ZmZlcnMpYCB3aGVuIGl0IGNvbXBsZXRlcyB2aXNpdGluZyB0aGUgYnVmZmVy IGFycmF5LiBgQkVHSU5fTkJVRkZFUlNfQUNDRVNTYCByZWNvcmRzIGBsb2NhbE5CdWZmZXJzID0g aGlnaE5CdWZmZXJzYCB3aGlsZSBob2xkaW5nIGBBY2Nlc3NOQnVmZmVyc0xvY2tgIGluIHNoYXJl ZCBtb2RlLCB3aGljaCBpcyB3aGF0IG1ha2VzIHRoZSBzbmFwc2hvdCBzYWZlIHRvIGRlcmVmZXJl bmNlIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFjY2Vzcy4KLSBgR2V0SGlnaE5CdWZmZXJzKClg IGlzIGFwcHJvcHJpYXRlIG9ubHkgZm9yICoqbm9uLWNyaXRpY2FsIHNpemluZyBkZWNpc2lvbnMq KiB0aGF0IGNhbiB0b2xlcmF0ZSBhIHN0YWxlIHZhbHVlIChlLmcuIHBpY2tpbmcgdGhlIHJpbmct YnVmZmVyIHNpemUgZm9yIGEgbmV3IHN0cmF0ZWd5KS4gSXQgbXVzdCAqKm5ldmVyKiogYmUgdXNl ZCB0byBib3VuZCBhIGxvb3AgdGhhdCByZWFkcyBidWZmZXIgZGVzY3JpcHRvcnMgb3IgYnVmZmVy IGJsb2NrczogYnkgdGhlIHRpbWUgeW91IGluZGV4ZWQgaW50byB0aGUgYXJyYXksIHRoZSByZXNp emUgY29vcmRpbmF0b3IgbWF5IGhhdmUgdW5tYXBwZWQgdGhlIHVuZGVybHlpbmcgcGFnZXMuIFVz ZSBgQkVHSU5fTkJVRkZFUlNfQUNDRVNTYC9gRU5EX05CVUZGRVJTX0FDQ0VTU2AgZm9yIHRoYXQu CgoKIyMjIFRyaWdnZXJpbmcgYSByZXNpemUKCkEgcmVzaXplIG9wZXJhdGlvbiBpcyBhIHNpbmds ZSBmdW5jdGlvbiBjYWxsOgoKYGBgc3FsClNFTEVDVCBwZ19yZXNpemVfc2hhcmVkX2J1ZmZlcnMo JzxuZXdfc2l6ZT4nKTsKYGBgCgoKIyMjIFNocmluawoKVGhlIGluaXRpYWwgc3RhdGUgb2YgdGhl IG1lbW9yeSByZWdpb24gaXM6CgpgYGAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbG93TkJ1ZmZlcnMKIDAgICAgICAgICAgICAgICBuZXdfc2l6ZSAgICAgICAgICAgICAg aGlnaE5CdWZmZXJzICAgICAgICAgIE1heE5CdWZmZXJzCnwtLS0tLS0tLS0tLS0tLS0tLS0tLXwt LS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICBB TExPQ0FURUQgICAgICAgICAgICAgIEFMTE9DQVRFRCAgICAgICAgICAgICAgICAgIFJFU0VSVkVE CmBgYAoKU2hyaW5rIHBlcmZvcm1zIHRoZXNlIHN0ZXBzOgoxLiBSZXNldCB0aGUgY2xvY2stc3dl ZXAgY3Vyc29yLCB0aGVuIHB1Ymxpc2ggYGxvd05CdWZmZXJzIDo9IG5ld19zaXplYC4KMi4gQmFy cmllcjogd2FpdCBmb3IgYWxsIGJhY2tlbmRzIHRvIGFja25vd2xlZGdlIHRoZSBuZXcgYGxvd05C dWZmZXJzYC4KMy4gUHVyZ2UgYW55IGZyZWVsaXN0IGVudHJpZXMgYWJvdmUgYGxvd05CdWZmZXJz YC4KNC4gRXZpY3QgYnVmZmVycyBpbiB0aGUgYFtsb3dOQnVmZmVycywgaGlnaE5CdWZmZXJzKWAg cmFuZ2UuCjUuIEFjcXVpcmUgYEFjY2Vzc05CdWZmZXJzTG9ja2AgZXhjbHVzaXZlbHksIHNldCBg aGlnaE5CdWZmZXJzID0gbG93TkJ1ZmZlcnNgLCByZWxlYXNlIHRoZSBsb2NrLgo2LiBGcmVlIHBo eXNpY2FsIG1lbW9yeSBpbiBgW2xvd05CdWZmZXJzLCBvbGRfaGlnaE5CdWZmZXJzKWBbXjFdLgoK QWZ0ZXIgc3RlcC0xLCB0aGUgbWVtb3J5IHJlZ2lvbiBiZWNvbWVzOgpgYGAKIDAgICAgICAgICAg ICAgbG93TkJ1ZmZlcnMgICAgICAgICAgICAgaGlnaE5CdWZmZXJzICAgICAgICAgICAgICAgTWF4 TkJ1ZmZlcnMKfC0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgIEFMTE9DQVRFRCAgICAgICAgICAgICAgVE8g RVZJQ1QgICAgICAgICAgICAgICAgICBSRVNFUlZFRApgYGAKCi0gYFswLCBsb3dOQnVmZmVycylg OiBCYWNrZW5kcyBhbGxvY2F0ZSBidWZmZXJzIGluIHRoaXMgcmFuZ2UuCi0gYFtsb3dOQnVmZmVy cywgaGlnaE5CdWZmZXJzKWA6IFRoZSBjb29yZGluYXRvciB3aWxsIGV2aWN0IGJ1ZmZlcnMgaW4g dGhpcyByYW5nZS4KLSBgW2hpZ2hOQnVmZmVycywgTWF4TkJ1ZmZlcnMpYDogVGhlIHJlc2VydmVk IHJhbmdlIGFuZCBzaG91bGQgbm90IGJlIHVzZWQuCgpXaGVuIHNocmluayBjb21wbGV0ZXMsCmBg YAogICAgICAgICAgICAgICAgICBsb3dOQnVmZmVycwogMCAgICAgICAgICAgICAgICBoaWdoTkJ1 ZmZlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heE5CdWZmZXJzCnwtLS0tLS0t LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS18CiAgICAgICBBTExPQ0FURUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUkVTRVJWRUQKYGBgCgpbXjFdOiBIdWdlIHBhZ2VzIHNpZ25pZmljYW50bHkgc3BlZWRz IHVwIGZyZWVpbmcgbWVtb3J5LiBJdCB0YWtlcyBsZXNzIHRoYW4gYSBzZWNvbmQgdG8gZnJlZSAz MiBHQiBtZW1vcnkuCgojIyMgRXhwYW5kCgpUaGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgbWVtb3J5 IHJlZ2lvbiBpczoKCmBgYAogICAgICAgICAgICAgICAgIGxvd05CdWZmZXJzCiAwICAgICAgICAg ICAgICAgaGlnaE5CdWZmZXJzICAgICAgICAgbmV3X3NpemUgICAgICAgICAgICAgICAgICBNYXhO QnVmZmVycwp8LS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgQUxMT0NBVEVEICAgICAgICAgICAgICBUTyBB TExPQ0FURSAgICAgICAgICAgICAgUkVTRVJWRUQKYGBgCgpFeHBhbmQgcGVyZm9ybXMgdGhlc2Ug c3RlcHM6CjEuIEFsbG9jYXRlIHBoeXNpY2FsIG1lbW9yeSBpbiBgW2xvd05CdWZmZXJzLCBuZXdf c2l6ZSlgIGFuZCBpbml0aWFsaXplIHRoZSBuZXcgYnVmZmVyIGRlc2NyaXB0b3JzLgoyLiBBY3F1 aXJlIGBBY2Nlc3NOQnVmZmVyc0xvY2tgIGV4Y2x1c2l2ZWx5LgozLiBSZXNldCB0aGUgY2xvY2st c3dlZXAgY3Vyc29yIHRvIHBvaW50IGF0IHRoZSBzdGFydCBvZiB0aGUgbmV3IHJhbmdlLCBzbyB0 aGUgbmV4dCBjbG9jayBzd2VlcCB0cmllcyB0aGUgZnJlc2hseSBhZGRlZCBlbXB0eSBidWZmZXJz Lgo0LiBQdWJsaXNoIGBoaWdoTkJ1ZmZlcnMgOj0gbmV3X3NpemVgIHRoZW4gYGxvd05CdWZmZXJz IDo9IG5ld19zaXplYC4KNS4gUmVsZWFzZSB0aGUgbG9jay4gQmFja2VuZHMgdGFraW5nIHRoZSBs b2NrIGluIHNoYXJlZCBtb2RlIG5vdyBzZWUgdGhlIGZ1bGx5LWdyb3duIHBvb2w7IGNvbmN1cnJl bnQgYXRvbWljcyByZWFkZXJzIG1heSBicmllZmx5IHNlZSBgbG93TkJ1ZmZlcnMgPCBoaWdoTkJ1 ZmZlcnNgIGJldHdlZW4gdGhlIHR3byB3cml0ZXMgYWJvdmUsIHdoaWNoIGlzIGhhcm1sZXNzIHNp bmNlIGJvdGggYm91bmRzIGFscmVhZHkgY292ZXIgaW5pdGlhbGl6ZWQgbWVtb3J5LgoKV2hlbiBl eHBhbmQgY29tcGxldGVzLApgYGAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbG93TkJ1ZmZlcnMKIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGln aE5CdWZmZXJzICAgICAgICAgIE1heE5CdWZmZXJzCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICBBTExP Q0FURUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFU0VSVkVECmBg YAoKIyMjIEJhY2tncm91bmQtd3JpdGVyIGludGVyYWN0aW9uCgpgQmdCdWZmZXJTeW5jYCBrZWVw cyBhIGxvY2FsIGBzdGF0aWMgaW50IHNhdmVkX2xvd19uYnVmZmVyc2Agc25hcHNob3QKYW5kIGNv bXBhcmVzIGl0IGFnYWluc3QgYEdldExvd05CdWZmZXJzKClgIG9uIGV2ZXJ5IGludm9jYXRpb24u IFdoZW5ldmVyIHRoZQp2YWx1ZSBkaWZmZXJzLCBhIHJlc2l6ZSBoYXMgaGFwcGVuZWQ6IHRoZSBz bW9vdGhlZCBhbGxvY2F0aW9uIHJhdGUgLwpjbGVhbi1idWZmZXIgZGVuc2l0eSBpdCB3YXMgdHJh Y2tpbmcgYXJlIG5vIGxvbmdlciBtZWFuaW5nZnVsLCBzbyBpdAppbnZhbGlkYXRlcyBgc2F2ZWRf aW5mb192YWxpZGAgYW5kIHN0YXJ0cyBmcmVzaC4KCiMjIyBDb29yZGluYXRpbmcgd2l0aCBiYWNr ZW5kcyB0aGF0IHZpc2l0IHRoZSBidWZmZXIgYXJyYXkKClNwZWNpYWwgY29vcmRpbmF0aW9uIG11 c3QgYmUgZG9uZSB3aXRoIGJhY2tlbmRzIHRoYXQgc2NhbiBidWZmZXJzIGJhc2VkIG9uCnRoZSB1 cHBlciBib3VuZCAoYGhpZ2hOQnVmZmVyc2ApLCBlLmcuLCBgRHJvcFJlbGF0aW9uQnVmZmVyc2Au Ck90aGVyd2lzZSwgYSBiYWNrZW5kIHZpc2l0aW5nIGEgYnVmZmVyIGluIGBbbG93TkJ1ZmZlcnMs IGhpZ2hOQnVmZmVyc11gIHdpbGwgaGl0IFNFR1Ygd2hlbiBhIHNocmluayBvcGVyYXRpb24gZnJl ZXMgdGhlIG1lbW9yeSBpbiAgYFtsb3dOQnVmZmVycywgaGlnaE5CdWZmZXJzXWAgcmFuZ2UuCgpD b29yZGluYXRpb24gaXMgZG9uZSB2aWEgYEJFR0lOX05CVUZGRVJTX0FDQ0VTUyhsb2NhbE5CdWZm ZXJzKTtgIGFuZApgRU5EX05CVUZGRVJTX0FDQ0VTUyhsb2NhbE5CdWZmZXJzKWAuIEEgYmFja2Vu ZCBjYWxscyBgQkVHSU5fTkJVRkZFUlNfQUNDRVNTKClgCmJlZm9yZSB2aXNpdGluZyB0aGUgYnVm ZmVyIGFycmF5IGFuZCBgRU5EX05CVUZGRVJTX0FDQ0VTUygpYCBhZnRlcndhcmRzLgoKYEJFR0lO X05CVUZGRVJTX0FDQ0VTU2AgYWNxdWlyZXMgYEFjY2Vzc05CdWZmZXJzTG9ja2AgaW4gc2hhcmVk IG1vZGUgZm9yCnRoZSBkdXJhdGlvbiBvZiB2aXNpdGluZyB0aGUgYnVmZmVyIGFycmF5LiBUaGUg cmVzaXplIGNvb3JkaW5hdG9yIGFjcXVpcmVzCmBBY2Nlc3NOQnVmZmVyc0xvY2tgIGluIGV4Y2x1 c2l2ZSBtb2RlIGFyb3VuZCB0aGUgb3BlcmF0aW9ucyB0aGF0IG11dGF0ZSB0aGUKYnVmZmVyIHBv b2wgbWVtb3J5IGFuZCBwdWJsaXNoIGEgbmV3IGBoaWdoTkJ1ZmZlcnNgIChmcmVlIGR1cmluZyBz aHJpbmsgLwphbGxvY2F0ZSBkdXJpbmcgZXhwYW5kKS4gVGhpcyBib3RoIHdhaXRzIGZvciBhbnkg aW4tZmxpZ2h0IGJhY2tlbmQgdG8KY29tcGxldGUgYW5kIGJsb2NrcyBuZXcgb25lcyBmcm9tIHN0 YXJ0aW5nIHdpdGggYSBzdGFsZSB2aWV3IG9mCmBoaWdoTkJ1ZmZlcnNgLgoKIyMjIEVycm9yIGhh bmRsaW5nCgpBIGZhaWx1cmUgZHVyaW5nIHJlc2l6ZSB3aWxsIE5PVCBicmluZyBkb3duIHBvc3Rn cmVzLgoKYHBnX3Jlc2l6ZV9zaGFyZWRfYnVmZmVycygpYCBpcyBpbnRlcnJ1cHRpYmxlOiBTSUdJ TlQvQ1RSTC1DIGFuZApgcGdfdGVybWluYXRlX2JhY2tlbmQoKWAgYXJlIGhvbm91cmVkLCBhbmQg YW55IGBlcmVwb3J0KEVSUk9SKWAgcmFpc2VkIGZyb20KaW5zaWRlIGEgcmVzaXplIHN0ZXAgKGUu Zy4gYW4gT09NLCBhIGBtYWR2aXNlKClgIGZhaWx1cmUpIHByb3BhZ2F0ZXMgYmFjayB0bwp0aGUg Y2FsbGVyIGFmdGVyIGNsZWFudXAgcnVucy4KCldlIGNhbiByb2xsYmFjayBzaHJpbmsgd2hlbiBp dCBpcyBpbnRlcnJ1cHRlZCBiZXR3ZWVuIGxvd2VyaW5nIGBsb3dOQnVmZmVyc2AKYW5kIGxvd2Vy aW5nIGBoaWdoTkJ1ZmZlcnNgLiBUaGUgbWVtb3J5IGluIGBbbG93TkJ1ZmZlcnMsIGhpZ2hOQnVm ZmVycylgIGlzCnN0aWxsIG1hcHBlZCAgc28gdGhlIHJvbGxiYWNrIGlzIHNhZmUuIEJ1ZmZlcnMg dGhhdCB3ZXJlIGFscmVhZHkgZXZpY3RlZCBpbiB0aGUKcGFydGlhbCBydW4gY29tZSBiYWNrIGFz IGVtcHR5IGFuZCBhcmUgcGlja2VkIHVwIGJ5IHRoZSBjbG9jayBzd2VlcCBvbiB0aGUKbmV4dCBh bGxvY2F0aW9uIGF0dGVtcHQ7IGJ1ZmZlcnMgdGhhdCB0aGUgcGFydGlhbCBwdXJnZSBtb3ZlZCBv ZmYgdGhlCmZyZWVsaXN0IGNvbWUgYmFjayB2aWEgdGhlIG5vcm1hbCBgU3RyYXRlZ3lGcmVlQnVm ZmVyKClgIGxpZmVjeWNsZS4KCkFuIGVycm9yIGF0IGBtYWR2aXNlKE1BRFZfUkVNT1ZFKWAgc3Rl cCBjYW5ub3QgYmUgcm9sbGVkIGJhY2suCkJ5IHRoZSB0aW1lIHdlIGNhbGwgbWFkdmlzZSBib3Ro IHdhdGVyIG1hcmtzIGFyZSBhbHJlYWR5IGF0IGBuZXdfc2l6ZWAsCnNvIHRoZSBidWZmZXIgcG9v bCBpcyBzZWxmLWNvbnNpc3RlbnQgYXQgdGhlIHNtYWxsZXIgc2l6ZS4KVGhlIGNhbGxlciBtYXkg dHJ5IGV4cGFuZCBsYXRlci4KCmBtYWR2aXNlKE1BRFZfUE9QVUxBVEVfV1JJVEUpYCBhdCBleHBh bmQgbWF5IGZhaWwuCldoZW4gdGhpcyBoYXBwZW5zLCBgbG93TkJ1ZmZlcnNgIGFuZCBgaGlnaE5C dWZmZXJzYCByZW1haW4gYXQKYG9sZF9zaXplYCBhbmQgYmFja2VuZHMga2VlcCB1c2luZyB0aGUg b2xkIChzbWFsbGVyKSBwb29sLiBUaGUKcGFydGlhbGx5LXRvdWNoZWQgYnl0ZXMgaW4gdGhlIFtv bGRfc2l6ZSwgbmV3X3NpemUpIHJhbmdlIHNpdCB1bnVzZWQgaW4Kc2htZW0gdW50aWwgYSBmdXR1 cmUgc3VjY2Vzc2Z1bCBleHBhbmQgcmUtaW5pdGlhbGl6ZXMgdGhlbS4gVGhlCmNvb3JkaW5hdG9y IHN1cmZhY2VzIHRoaXMgdG8gdGhlIGNhbGxlciBhcyBhIGhhcmQgYEVSUk9SYC4= --0000000000002ef48006541073f3--