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 1vWxh7-00EEbx-0U for pgsql-hackers@arkaria.postgresql.org; Sat, 20 Dec 2025 14:12:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vWxh4-00AWlH-3A for pgsql-hackers@arkaria.postgresql.org; Sat, 20 Dec 2025 14:12:27 +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 1vWxh4-00AWl8-1e for pgsql-hackers@lists.postgresql.org; Sat, 20 Dec 2025 14:12:27 +0000 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vWxh1-001lw9-2Z for pgsql-hackers@postgresql.org; Sat, 20 Dec 2025 14:12:26 +0000 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-34c277ea011so2665759a91.1 for ; Sat, 20 Dec 2025 06:12:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766239940; x=1766844740; 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=254YXrlpq3whXlgxmoH4Lfs6tAOG2K7F3wo1Iq4mJnE=; b=OUGYW6UGnjtliJNm1GGSbNk1rH7g4iM8gTf6mZAeoO26pn/xneWm3kTNpCTm8b2y+T VOCIlBCaa6sFR3ipndqVIYeKwfgBjyXt7rZ2YyMw+g3OkB2JmzQrC9T3QRxn7BZMGntc 7vHPDvvX0mqxyQYx9/HqQiaigl2JQuf0OLWdDSEn3L/BQwgwlZbOOGL6lpwJ3X7P1sxY hcfJjTLuuozDxeXcPGCCIGD7MYjGXFnYQjXYeplqdTAhGeUVCQCMDtmXoM4C/wBJNOTE ujcek0KFu3nc852i+Y9qr29TCnKmjOUm+gaKA4FNo3Nyde/UvjNbx4WcbIUQdf3/Hvlg OZXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766239940; x=1766844740; 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=254YXrlpq3whXlgxmoH4Lfs6tAOG2K7F3wo1Iq4mJnE=; b=NhaQyjJ+E49HhgKReJM3ZRKBJC2V7hQdiWAN+pW5jWKZBxSS8YuyzSs89coEPpQtAO kp5T0AIHL3LXhIIP5j+voCkNjNWdYw7bFEemkgKgY7Zm5hY/1LuXfIxtqXI2XPx0IDOF VABoDmEiQB4YM0Wm0frDU68gU1Eb4sv0NuT4Wy4AV80vV+t9RJYvhc5rJ8P+i/uJg6Gd ht5KBLMwylX8tPmyJl4RIiY+w47FMAu5gRiLHcaNdFJIki72kHKXQ9Jw4BOmmdgEw3Hu h+PT02CVfy+K0kTpuYHbJP6KUgrjim2+7MzPhzBaoBtzRUc/Tvw5I8kv5GkRBY7qlDwg I0EQ== X-Gm-Message-State: AOJu0YwQN/DS2UasAXQQUrgl0Iu1x0G994cQV4u/ipBWs5UadtueU0o4 WVaDGg7Uq8o5lKdf03KtawoKriDDlK28QDmLRmvBByRjGu/8Jt6Asz4gkv82X/JNMrftDtdrDK+ ZveMWDFsZef+R/sJDn28L9olpfgaa11Y= X-Gm-Gg: AY/fxX51XxMDJ61PMUXEd+P1ARFYhWWmyN/5KvD2V+jYV2G3aiI2VJjxbLcCUXXGONp 89HJI1Mzqfov6RhK28L/+mUb6icVwehPJgTriL/oR2KGLeKxZD2pj2NHEndsuEMiC9bYyMyNnQe 3hhbMaMqoPXiE57JCF+wXF8ohjU67DU/wAbKr8iiBaAPyJy+gwYMB6LX16tlGkQuRIHntDZ3VSJ wCk0kZCaV4fY3JzEJ6FGz/n1CXyth7DTQ3KyMrxclJfF+nITyCn3Igj6YUVIO9CP0tD/L8A X-Google-Smtp-Source: AGHT+IGCuWjvL/Mh+6OBRcEETkAH9GP9/EFlucQvtdhj4AN2lXBvecCECvnoVPveWJFZFz/+no5cMVG0uezzLzpV6eg= X-Received: by 2002:a05:6a21:6d9e:b0:366:14ac:e1eb with SMTP id adf61e73a8af0-376aa0e07b0mr6138875637.61.1766239940296; Sat, 20 Dec 2025 06:12:20 -0800 (PST) MIME-Version: 1.0 References: <68f3771f-91f5-4cb7-b1de-74d9abbf0b96@vondra.me> In-Reply-To: From: Amit Langote Date: Sat, 20 Dec 2025 23:12:03 +0900 X-Gm-Features: AQt7F2r1qh6E5qcWnFTDobs3VFEEYC7-SeLc9s5QkLxyyLtI4vKkM7P9IzzUBP4 Message-ID: Subject: Re: Batching in executor To: Tomas Vondra Cc: PostgreSQL-development Content-Type: multipart/mixed; boundary="0000000000003b0851064662c896" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003b0851064662c896 Content-Type: multipart/alternative; boundary="0000000000003b0850064662c894" --0000000000003b0850064662c894 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Dec 5, 2025 at 12:54=E2=80=AFAM Amit Langote wrote: > On Wed, Oct 29, 2025 at 3:37=E2=80=AFPM Amit Langote wrote: > > On Tue, Oct 28, 2025 at 10:40=E2=80=AFPM Amit Langote wrote: > > > That would be nice to see if you have the time, but maybe after I pos= t > > > a new version. > > > > I=E2=80=99ve created a CF entry marked WoA for this in the next CF unde= r the > > title =E2=80=9CBatching in executor, part 1: add batch variant of table= AM > > scan API.=E2=80=9D The idea is to track this piece separately so that l= ater > > parts can have their own entries and we don=E2=80=99t end up with a sin= gle > > long-lived entry that never gets marked done. :-) > > I intend to continue working on this, so have just moved it into the > next fest. I will post a new patch version next week that addresses > Daniil's comments and implements a few other things I mentioned I will > in my reply to Tomas on Oct 28; sorry for the delay. Before I go on vacation for a couple of weeks, here's an updated patch set. I am only including the patches that add TAM interface, add TupleBatch executor wrapper for TAM batches, and use it in SeqScan as I had posted before. There is a new patch to add a BATCHES option to EXPLAIN. I renamed the testing GUC to executor_batch_rows (integer) from the boolean executor_batching. EXPLAIN (BATCHES) example: +-- Basic batch stats output +select explain_filter('explain (analyze, batches, buffers off, costs off) select * from batch_test'); + explain_filter +---------------------------------------------------------------- + Seq Scan on batch_test (actual time=3DN.N..N.N rows=3DN.N loops=3DN) + Batches: N Avg Rows: N.N Max: N Min: N + Planning Time: N.N ms + Execution Time: N.N ms +(4 rows) What I have not included in this set are the patches that add ExecProcNodeBatch() so that TupleBatch can be passed from one plan node to another (parent), ExprEvalOps (EEOPs) for batched expression evaluation (qual and aggregate transition). I would like to focus on the patches that allow reading batches from TAM into Scan nodes (only SeqScan for now). After I'm back from vacation, I will post patches for batched qual evaluation in SeqScan filter quals (once bugs are fixed and polished). Batching in Agg node can wait for now. In the meantime, what I would like to have someone's thoughts on: * the shape of the TAM APIs -- should I add a TAMBatch or something that is created, populated, and destroyed by the TAM instead of the current void pointer and TupleBatchOps that are initialized in the executor like this (excerpt from 0002): + /* Lazily create the AM batch payload. */ + if (node->ss.ps.ps_Batch->am_payload =3D=3D NULL) + { + const TableAmRoutine *tam PG_USED_FOR_ASSERTS_ONLY =3D scandesc->rs_rd->rd_tableam; + + Assert(tam && tam->scan_begin_batch); + node->ss.ps.ps_Batch->am_payload =3D + table_scan_begin_batch(scandesc, node->ss.ps.ps_Batch->maxslots); + node->ss.ps.ps_Batch->ops =3D table_batch_callbacks(node->ss.ss_currentRelation); + } * the shape of TupleBatch itself -- its contents and operations defined in execBatch.c/h. * any other thoughts you might have on the project, patches. Benchmark: Scripts attached if you want to try them. (Negative % =3D faster than master) SELECT * FROM table LIMIT 1 OFFSET N: Rows Master batch=3D0 vs master batch=3D64 vs master -------------------------------------------------------------- 1M 11ms 11ms -0% 8ms -23% 2M 23ms 22ms -1% 18ms -23% 3M 36ms 34ms -5% 27ms -25% 4M 51ms 50ms -2% 38ms -26% 5M 64ms 64ms -1% 48ms -26% 10M 147ms 145ms -1% 114ms -22% SELECT * FROM WHERE a > 0 LIMIT 1 OFFSET N: Rows Master batch=3D0 vs master batch=3D64 vs master -------------------------------------------------------------- 1M 31ms 31ms +0% 16ms -48% 2M 64ms 64ms -0% 34ms -47% 3M 67ms 66ms -1% 50ms -25% 4M 91ms 90ms -1% 71ms -22% 5M 119ms 113ms -5% 88ms -26% 10M 262ms 261ms -0% 205ms -21% SELECT * FROM table WHERE o > 0 LIMIT 1 OFFSET N (last column - deform-heavy): Rows Master batch=3D0 vs master batch=3D64 vs master -------------------------------------------------------------- 1M 38ms 37ms -2% 38ms +0% 2M 79ms 75ms -6% 77ms -4% 3M 182ms 186ms +2% 160ms -12% 4M 250ms 252ms +1% 219ms -12% 5M 314ms 316ms +1% 273ms -13% 10M 647ms 651ms +1% 604ms -7% The smaller improvement with WHERE o > 0 is expected since accessing the last column requires deforming most of the tuple, which dominates the execution time. Future work on batched tuple deformation could help here. Note on regressions with executor_batch_rows =3D 0 vs master: I am not seeing the regressions with batch_rows=3D0 vs master as I did before. I think some of it might have to do with my removing some stray fields from HeapScanData that were accidentally left there in the earlier patches. Also, the regressions I was observing earlier seemed more to have to do with using gcc to compile master tree and clang to compile patched tree, which resulted in code layout changes that seemed to cause patched binary to regress. Would be nice if these numbers can be verified by others. --=20 Thanks, Amit Langote --0000000000003b0850064662c894 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Fri, Dec 5, 2025 at 12:54=E2=80=AFAM Amit Langote <<= a href=3D"mailto:amitlangote09@gmail.com">amitlangote09@gmail.com> w= rote:
> On Wed, Oct 29, 2025 at 3:37=E2=80=AFPM Amit Langote <amitlangote09@gmail.com> wrot= e:
> > On Tue, Oct 28, 2025 at 10:40=E2=80=AFPM Amit Langote <<= a href=3D"mailto:amitlangote09@gmail.com">amitlangote09@gmail.com> w= rote:
> > > That would be nice to see if you have the time, but= maybe after I post
> > > a new version.
> >
> &= gt; I=E2=80=99ve created a CF entry marked WoA for this in the next CF unde= r the
> > title =E2=80=9CBatching in executor, part 1: add batch v= ariant of table AM
> > scan API.=E2=80=9D The idea is to track thi= s piece separately so that later
> > parts can have their own entr= ies and we don=E2=80=99t end up with a single
> > long-lived entry= that never gets marked done. :-)
>
> I intend to continue work= ing on this, so have just moved it into the
> next fest.=C2=A0 I will= post a new patch version next week that addresses
> Daniil's com= ments and implements a few other things I mentioned I will
> in my re= ply to Tomas on Oct 28; sorry for the delay.

Before I go on vacation= for a couple of weeks, here's an updated patch set.=C2=A0 I am only in= cluding the patches that add TAM interface, add TupleBatch executor wrapper= for TAM batches, and use it in SeqScan as I had posted before.=C2=A0 There= is a new patch to add a BATCHES option to EXPLAIN.=C2=A0 I renamed the tes= ting GUC to executor_batch_rows (integer) from the boolean executor_batchin= g.=C2=A0 EXPLAIN (BATCHES) example:

+-- Basic batch stats output
= +select explain_filter('explain (analyze, batches, buffers off, costs o= ff) select * from batch_test');
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 explain_filter =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0+----------------------------------------------------------------
+ Se= q Scan on batch_test (actual time=3DN.N..N.N rows=3DN.N loops=3DN)
+ =C2= =A0 Batches: N =C2=A0Avg Rows: N.N =C2=A0Max: N =C2=A0Min: N
+ Planning = Time: N.N ms
+ Execution Time: N.N ms
+(4 rows)

What I have no= t included in this set are the patches that add ExecProcNodeBatch() so that= TupleBatch can be passed from one plan node to another (parent), ExprEvalO= ps (EEOPs) for batched expression evaluation (qual and aggregate transition= ).=C2=A0 I would like to focus on the patches that allow reading batches fr= om TAM into Scan nodes (only SeqScan for now).

After I'm back fr= om vacation, I will post patches for batched qual evaluation in SeqScan fil= ter quals (once bugs are fixed and polished). Batching in Agg node can wait= for now.

In the meantime, what I would like to have someone's t= houghts on:

* the shape of the TAM APIs -- should I add a TAMBatch o= r something that is created, populated, and destroyed by the TAM instead of= the current void pointer and TupleBatchOps that are initialized in the exe= cutor like this (excerpt from 0002):

+ =C2=A0 =C2=A0/* Lazily create= the AM batch payload. */
+ =C2=A0 =C2=A0if (node->ss.ps.ps_Batch->= ;am_payload =3D=3D NULL)
+ =C2=A0 =C2=A0{
+ =C2=A0 =C2=A0 =C2=A0 =C2= =A0const TableAmRoutine *tam PG_USED_FOR_ASSERTS_ONLY =3D scandesc->rs_r= d->rd_tableam;
+
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0Assert(tam &&= ; tam->scan_begin_batch);
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0node->ss.ps= .ps_Batch->am_payload =3D
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= table_scan_begin_batch(scandesc, node->ss.ps.ps_Batch->maxslots);
= + =C2=A0 =C2=A0 =C2=A0 =C2=A0node->ss.ps.ps_Batch->ops =3D table_batc= h_callbacks(node->ss.ss_currentRelation);
+ =C2=A0 =C2=A0}

* t= he shape of TupleBatch itself -- its contents and operations defined in exe= cBatch.c/h.

* any other thoughts you might have on the project, patc= hes.

Benchmark:

Scripts attached if you want to try them.
=
(Negative % =3D faster than master)

SELECT * FROM table LIMIT 1 = OFFSET N:
Rows =C2=A0 =C2=A0 =C2=A0Master =C2=A0 =C2=A0batch=3D0 =C2=A0 = vs master =C2=A0 batch=3D64 =C2=A0 vs master
---------------------------= -----------------------------------
1M =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A011ms =C2=A0 =C2=A0 =C2=A0 11ms =C2=A0 =C2=A0 =C2=A0 =C2=A0-0% =C2=A0 =C2= =A0 =C2=A0 =C2=A08ms =C2=A0 =C2=A0 =C2=A0 -23%
2M =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A023ms =C2=A0 =C2=A0 =C2=A0 22ms =C2=A0 =C2=A0 =C2=A0 =C2=A0-1% = =C2=A0 =C2=A0 =C2=A0 18ms =C2=A0 =C2=A0 =C2=A0 -23%
3M =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A036ms =C2=A0 =C2=A0 =C2=A0 34ms =C2=A0 =C2=A0 =C2=A0 =C2=A0= -5% =C2=A0 =C2=A0 =C2=A0 27ms =C2=A0 =C2=A0 =C2=A0 -25%
4M =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A051ms =C2=A0 =C2=A0 =C2=A0 50ms =C2=A0 =C2=A0 =C2=A0 = =C2=A0-2% =C2=A0 =C2=A0 =C2=A0 38ms =C2=A0 =C2=A0 =C2=A0 -26%
5M =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A064ms =C2=A0 =C2=A0 =C2=A0 64ms =C2=A0 =C2=A0 =C2= =A0 =C2=A0-1% =C2=A0 =C2=A0 =C2=A0 48ms =C2=A0 =C2=A0 =C2=A0 -26%
10M = =C2=A0 =C2=A0 =C2=A0 =C2=A0147ms =C2=A0 =C2=A0 =C2=A0145ms =C2=A0 =C2=A0 = =C2=A0 =C2=A0-1% =C2=A0 =C2=A0 =C2=A0114ms =C2=A0 =C2=A0 =C2=A0 -22%
SELECT * FROM WHERE a > 0 LIMIT 1 OFFSET N:
Rows =C2=A0 =C2=A0 =C2= =A0Master =C2=A0 =C2=A0batch=3D0 =C2=A0 vs master =C2=A0 batch=3D64 =C2=A0 = vs master
--------------------------------------------------------------=
1M =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A031ms =C2=A0 =C2=A0 =C2=A0 31ms =C2= =A0 =C2=A0 =C2=A0 =C2=A0+0% =C2=A0 =C2=A0 =C2=A0 16ms =C2=A0 =C2=A0 =C2=A0 = -48%
2M =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A064ms =C2=A0 =C2=A0 =C2=A0 64ms= =C2=A0 =C2=A0 =C2=A0 =C2=A0-0% =C2=A0 =C2=A0 =C2=A0 34ms =C2=A0 =C2=A0 =C2= =A0 -47%
3M =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A067ms =C2=A0 =C2=A0 =C2=A0 = 66ms =C2=A0 =C2=A0 =C2=A0 =C2=A0-1% =C2=A0 =C2=A0 =C2=A0 50ms =C2=A0 =C2=A0= =C2=A0 -25%
4M =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A091ms =C2=A0 =C2=A0 =C2= =A0 90ms =C2=A0 =C2=A0 =C2=A0 =C2=A0-1% =C2=A0 =C2=A0 =C2=A0 71ms =C2=A0 = =C2=A0 =C2=A0 -22%
5M =C2=A0 =C2=A0 =C2=A0 =C2=A0 119ms =C2=A0 =C2=A0 = =C2=A0113ms =C2=A0 =C2=A0 =C2=A0 =C2=A0-5% =C2=A0 =C2=A0 =C2=A0 88ms =C2=A0= =C2=A0 =C2=A0 -26%
10M =C2=A0 =C2=A0 =C2=A0 =C2=A0262ms =C2=A0 =C2=A0 = =C2=A0261ms =C2=A0 =C2=A0 =C2=A0 =C2=A0-0% =C2=A0 =C2=A0 =C2=A0205ms =C2=A0= =C2=A0 =C2=A0 -21%

SELECT * FROM table WHERE o > 0 LIMIT 1 OFFSE= T N (last column - deform-heavy):
Rows =C2=A0 =C2=A0 =C2=A0Master =C2=A0= =C2=A0batch=3D0 =C2=A0 vs master =C2=A0 batch=3D64 =C2=A0 vs master
---= -----------------------------------------------------------
1M =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A038ms =C2=A0 =C2=A0 =C2=A0 37ms =C2=A0 =C2=A0 =C2= =A0 =C2=A0-2% =C2=A0 =C2=A0 =C2=A0 38ms =C2=A0 =C2=A0 =C2=A0 =C2=A0+0%
2= M =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A079ms =C2=A0 =C2=A0 =C2=A0 75ms =C2=A0 = =C2=A0 =C2=A0 =C2=A0-6% =C2=A0 =C2=A0 =C2=A0 77ms =C2=A0 =C2=A0 =C2=A0 =C2= =A0-4%
3M =C2=A0 =C2=A0 =C2=A0 =C2=A0 182ms =C2=A0 =C2=A0 =C2=A0186ms = =C2=A0 =C2=A0 =C2=A0 =C2=A0+2% =C2=A0 =C2=A0 =C2=A0160ms =C2=A0 =C2=A0 =C2= =A0 -12%
4M =C2=A0 =C2=A0 =C2=A0 =C2=A0 250ms =C2=A0 =C2=A0 =C2=A0252ms = =C2=A0 =C2=A0 =C2=A0 =C2=A0+1% =C2=A0 =C2=A0 =C2=A0219ms =C2=A0 =C2=A0 =C2= =A0 -12%
5M =C2=A0 =C2=A0 =C2=A0 =C2=A0 314ms =C2=A0 =C2=A0 =C2=A0316ms = =C2=A0 =C2=A0 =C2=A0 =C2=A0+1% =C2=A0 =C2=A0 =C2=A0273ms =C2=A0 =C2=A0 =C2= =A0 -13%
10M =C2=A0 =C2=A0 =C2=A0 =C2=A0647ms =C2=A0 =C2=A0 =C2=A0651ms = =C2=A0 =C2=A0 =C2=A0 =C2=A0+1% =C2=A0 =C2=A0 =C2=A0604ms =C2=A0 =C2=A0 =C2= =A0 =C2=A0-7%

The smaller improvement with WHERE o > 0 is expecte= d since accessing the last column requires deforming most of the tuple, whi= ch dominates the execution time. Future work on batched tuple deformation c= ould help here.

Note on regressions with executor_batch_rows =3D 0 v= s master:

I am not seeing the regressions with batch_rows=3D0 vs mas= ter as I did before.=C2=A0 I think some of it might have to do with my remo= ving some stray fields from HeapScanData that were accidentally left there = in the earlier patches.=C2=A0 Also, the regressions I was observing earlier= seemed more to have to do with using gcc to compile master tree and clang = to compile patched tree, which resulted in code layout changes that seemed = to cause patched binary to regress.=C2=A0 Would be nice if these numbers ca= n be verified by others.

--
Thanks, Amit Langote
--0000000000003b0850064662c894-- --0000000000003b0851064662c896 Content-Type: application/octet-stream; name="v4-0001-Add-batch-table-AM-API-and-heapam-implementation.patch" Content-Disposition: attachment; filename="v4-0001-Add-batch-table-AM-API-and-heapam-implementation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mjecz71r0 RnJvbSAyNGEzZDIwOGRiOTMzMTI3ODg3NDU4ODJhMDFiNTI2OTU3OTE5OTY2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFNhdCwgMjAgRGVjIDIwMjUgMTc6MjE6NTYgKzA5MDAKU3ViamVjdDogW1BBVENIIHY0 IDEvM10gQWRkIGJhdGNoIHRhYmxlIEFNIEFQSSBhbmQgaGVhcGFtIGltcGxlbWVudGF0aW9uCgpJ bnRyb2R1Y2UgbmV3IHRhYmxlIEFNIGNhbGxiYWNrcyB0byBmZXRjaCBtdWx0aXBsZSB0dXBsZXMg cGVyIGNhbGwuClRoaXMgcmVkdWNlcyBwZXItdHVwbGUgY2FsbCBvdmVyaGVhZCBieSBsZXR0aW5n IGV4ZWN1dG9yIG5vZGVzIHdvcmsKaW4gYmF0Y2hlcy4KCkRlZmluZSBhIEhlYXBCYXRjaCBzdHJ1 Y3R1cmUgYW5kIHN1cHBvcnRpbmcgY29kZSBpbiB0YWJsZWFtLmguCkJhdGNoZXMgYXJlIGxpbWl0 ZWQgdG8gdHVwbGVzIGZyb20gYSBzaW5nbGUgcGFnZSBhbmQgYXQgbW9zdApFWEVDX0JBVENIX1JP V1MgKGN1cnJlbnRseSA2NCkgZW50cmllcy4KClByb3ZpZGUgaW5pdGlhbCBoZWFwYW0gc3VwcG9y dCB3aXRoIGhlYXBnZXR0dXBfcGFnZW1vZGVfYmF0Y2goKS4KTm8gZXhlY3V0b3Igbm9kZSBpcyBz d2l0Y2hlZCBvdmVyIHlldDsgYSBsYXRlciBjb21taXQgd2lsbCBhZGFwdApTZXFTY2FuIHRvIHVz ZSB0aGlzIEFQSS4gT3RoZXIgbm9kZXMgbWF5IGFkb3B0IGl0IGluIHRoZSBmdXR1cmUuCgpBbHNv IGFkZCBwZ3N0YXRfY291bnRfaGVhcF9nZXRuZXh0X2JhdGNoKCkgdG8gcmVjb3JkIGJhdGNoZWQg ZmV0Y2hlcwppbiBwZ3N0YXQuCgpSZXZpZXdlZC1ieTogRGFuaWlsIERhdnlkb3YgPDNkYW5pc3Np bW9AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBK0hpd3FGZkFZ X1pGcU44d2NBRU13NzFUOWhNX2tBOFV0eUhhWlpFWnR1VDNVeW9nQUBtYWlsLmdtYWlsLmNvbQot LS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jICAgICAgICAgfCAyMTkgKysrKysr KysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVy LmMgfCAgIDQgKwogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICB8ICAx OCArKwogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCAgICAgICAgICAgICB8ICA1OCArKysr KysKIHNyYy9pbmNsdWRlL3Bnc3RhdC5oICAgICAgICAgICAgICAgICAgICAgfCAgIDUgKwogNSBm aWxlcyBjaGFuZ2VkLCAzMDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtLmMKaW5kZXggNmRhZjRhODdkZWMuLmZjYzA4MTNmMTM5IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW0uYwpAQCAtMTAyMyw3ICsxMDIzLDcgQEAgaGVhcGdldHR1cF9wYWdlbW9k ZShIZWFwU2NhbkRlc2Mgc2NhbiwKIAkJCQkJaW50IG5rZXlzLAogCQkJCQlTY2FuS2V5IGtleSkK IHsKLQlIZWFwVHVwbGUJdHVwbGUgPSAmKHNjYW4tPnJzX2N0dXApOworCUhlYXBUdXBsZSB0dXBs ZSA9ICZzY2FuLT5yc19jdHVwOwogCVBhZ2UJCXBhZ2U7CiAJdWludDMyCQlsaW5laW5kZXg7CiAJ dWludDMyCQlsaW5lc2xlZnQ7CkBAIC0xMTA0LDYgKzExMDQsMTMyIEBAIGNvbnRpbnVlX3BhZ2U6 CiAJc2Nhbi0+cnNfaW5pdGVkID0gZmFsc2U7CiB9CiAKKy8qCisgKiBoZWFwZ2V0dHVwX3BhZ2Vt b2RlX2JhdGNoCisgKgkJQ29sbGVjdCB1cCB0byAnbWF4aXRlbXMnIHZpc2libGUgdHVwbGVzIGZy b20gYSBzaW5nbGUgcGFnZSBpbiBwYWdlIG1vZGUuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1 cm5zIGEgKmJhdGNoKiBvZiB0dXBsZXMgZnJvbSBvbmUgaGVhcCBwYWdlLiBJZiB0aGUKKyAqIGN1 cnJlbnQgcGFnZSAoYXMgdHJhY2tlZCBieSB0aGUgc2NhbiBkZXNjKSBoYXMgbm8gbW9yZSB0dXBs ZXMgbGVmdCwKKyAqIGl0IHdpbGwgYWR2YW5jZSB0byB0aGUgbmV4dCBwYWdlIGFuZCBwcmVwYXJl IGl0ICh2aWEgaGVhcF9wcmVwYXJlX3BhZ2VzY2FuKS4KKyAqIEl0IHdpbGwgbm90IGNyb3NzIGEg cGFnZSBib3VuZGFyeSB3aGlsZSBmaWxsaW5nIHRoZSBiYXRjaC4KKyAqCisgKiBSZXR1cm4gdmFs dWU6CisgKgkJbnVtYmVyIG9mIHR1cGxlcyB3cml0dGVuIGludG8gJ3RkYXRhJyAoMCBhdCBlbmQt b2Ytc2NhbikuCisgKgorICogU2lkZSBlZmZlY3RzOgorICoJLSBFbnN1cmVzIHJzX2NidWYgcGlu cyB0aGUgcGFnZSBmcm9tIHdoaWNoIHR1cGxlcyB3ZXJlIHByb2R1Y2VkLgorICoJLSBTZXRzIHJz X2NibG9jaywgcnNfY2luZGV4LCByc19udHVwbGVzIGNvbnNpc3RlbnRseSAoc2FtZSBhcworICoJ ICBoZWFwZ2V0dHVwX3BhZ2Vtb2Rl4oCZcyBpbm5lci1sb29wIGVmZmVjdHMpLgorICoJLSBEb2Vz ICpub3QqIGNoYW5nZSBidWZmZXIgcGluIGNvdW50cyBleGNlcHQgdGhyb3VnaCBub3JtYWwgcGFn ZQorICoJICB0cmFuc2l0aW9ucyBwZXJmb3JtZWQgYnkgaGVhcF9mZXRjaF9uZXh0X2J1ZmZlcigp LgorICovCitzdGF0aWMgaW50CitoZWFwZ2V0dHVwX3BhZ2Vtb2RlX2JhdGNoKEhlYXBTY2FuRGVz YyBzY2FuLAorCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCSAgaW50IG5rZXlzLCBT Y2FuS2V5IGtleSwKKwkJCQkJCSAgSGVhcFR1cGxlRGF0YSAqdGRhdGEsCisJCQkJCQkgIGludCBt YXhpdGVtcykKK3sKKwlQYWdlCQlwYWdlOworCXVpbnQzMgkJbGluZWluZGV4OworCXVpbnQzMgkJ bGluZXNsZWZ0OworCWludAkJCW5vdXQgPSAwOworCVJlbGF0aW9uCXJlbCA9IHNjYW4tPnJzX2Jh c2UucnNfcmQ7CisJT2lkCQkJdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbCk7CisJVHVw bGVEZXNjCXR1cGRlc2MgPSBrZXkgPyBSZWxhdGlvbkdldERlc2NyKHJlbCkgOiBOVUxMOworCisJ LyoKKwkgKiBDdXJyZW50IGJhdGNoaW5nIGxpbWl0YXRpb25zIChtYXkgYmUgcmVsYXhlZCBpbiBm dXR1cmUpOgorCSAqCisJICogLSBGb3J3YXJkIHNjYW5zIG9ubHk6IGJhY2t3YXJkIHNjYW4gc3Vw cG9ydCB3b3VsZCByZXF1aXJlIGNoYW5nZXMgdG8KKwkgKiAgIGJhdGNoIGl0ZXJhdGlvbiBhbmQg cGFnZSBhZHZhbmNlbWVudCBsb2dpYy4KKwkgKgorCSAqIC0gUGFnZW1vZGUgcmVxdWlyZWQ6IGJh dGNoaW5nIHJlbGllcyBvbiB0aGUgcHJlLWJ1aWx0IHJzX3Zpc3R1cGxlc1tdCisJICogICBhcnJh eSBmcm9tIGhlYXBfcHJlcGFyZV9wYWdlc2NhbigpLiBUaGlzIGlzIGd1YXJhbnRlZWQgYnkKKwkg KiAgIFNjYW5DYW5Vc2VCYXRjaGluZygpIHdoaWNoIG9ubHkgZW5hYmxlcyBiYXRjaGluZyB3aGVu IFNPX0FMTE9XX1BBR0VNT0RFCisJICogICBpcyBzZXQuIFVubGlrZSBoZWFwX2dldG5leHRzbG90 LCB3ZSBkb24ndCBzdXBwb3J0IGR5bmFtaWMgZmFsbGJhY2sgdG8KKwkgKiAgIHR1cGxlLWF0LWEt dGltZSBtb2RlIHNpbmNlIHRoZSBiYXRjaCBleGVjdXRpb24gcGF0aCBpcyBzZWxlY3RlZCBhdAor CSAqICAgRXhlY0luaXQgdGltZS4KKwkgKi8KKwlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2Fy ZChkaXIpKTsKKwlBc3NlcnQoc2Nhbi0+cnNfYmFzZS5yc19mbGFncyAmIFNPX0FMTE9XX1BBR0VN T0RFKTsKKwlBc3NlcnQobWF4aXRlbXMgPiAwKTsKKworCS8qCisJICogSWYgd2UgaGF2ZSBubyBj dXJyZW50IHBhZ2UgKG9yIHRoZSBjdXJyZW50IHBhZ2UgaXMgZXhoYXVzdGVkKSwKKwkgKiBhZHZh bmNlIHRvIHRoZSBuZXh0IHBhZ2UgdGhhdCBoYXMgYW55IHZpc2libGUgdHVwbGVzIGFuZCBwcmVw YXJlIGl0LgorCSAqIFRoaXMgbWlycm9ycyB0aGUgb3V0ZXIgbG9vcCBvZiBoZWFwZ2V0dHVwX3Bh Z2Vtb2RlKCksIGJ1dCB3ZSBzdG9wCisJICogYXMgc29vbiBhcyB3ZSBoYXZlIGEgcHJlcGFyZWQg cGFnZTsgd2UgbmV2ZXIgcHJvZHVjZSBmcm9tIHR3byBwYWdlcy4KKwkgKi8KKwlmb3IgKDs7KQor CXsKKwkJaWYgKEJ1ZmZlcklzVmFsaWQoc2Nhbi0+cnNfY2J1ZikpCisJCXsKKwkJCS8qIEFyZSB0 aGVyZSBtb3JlIHZpc2libGUgdHVwbGVzIGxlZnQgb24gdGhpcyBwYWdlPyAqLworCQkJbGluZWlu ZGV4ID0gc2Nhbi0+cnNfY2luZGV4ICsgZGlyOworCQkJbGluZXNsZWZ0ID0gKGxpbmVpbmRleCA8 PSAodWludDMyKSBzY2FuLT5yc19udHVwbGVzKSA/CisJCQkJKHNjYW4tPnJzX250dXBsZXMgLSBs aW5laW5kZXgpIDogMDsKKwkJCWlmIChsaW5lc2xlZnQgPiAwKQorCQkJCWJyZWFrOwkvKiBjb250 aW51ZSBvbiB0aGlzIHBhZ2UgKi8KKwkJfQorCisJCS8qIE1vdmUgdG8gbmV4dCBwYWdlIGFuZCBw cmVwYXJlIGl0cyB2aXNpYmxlIHR1cGxlIGxpc3QuICovCisJCWhlYXBfZmV0Y2hfbmV4dF9idWZm ZXIoc2NhbiwgZGlyKTsKKworCQlpZiAoIUJ1ZmZlcklzVmFsaWQoc2Nhbi0+cnNfY2J1ZikpCisJ CXsKKwkJCS8qIGVuZCBvZiBzY2FuOyBrZWVwIHJzX2NidWYgaW52YWxpZCBsaWtlIGhlYXBnZXR0 dXBfcGFnZW1vZGUgKi8KKwkJCXNjYW4tPnJzX2NibG9jayA9IEludmFsaWRCbG9ja051bWJlcjsK KwkJCXNjYW4tPnJzX3ByZWZldGNoX2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQkJc2Nh bi0+cnNfaW5pdGVkID0gZmFsc2U7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCUFzc2VydChCdWZm ZXJHZXRCbG9ja051bWJlcihzY2FuLT5yc19jYnVmKSA9PSBzY2FuLT5yc19jYmxvY2spOworCQlo ZWFwX3ByZXBhcmVfcGFnZXNjYW4oKFRhYmxlU2NhbkRlc2MpIHNjYW4pOworCisJCS8qIEFmdGVy IHByZXBhcmUsIGVpdGhlciByc19udHVwbGVzID4gMCBvciB3ZSdsbCBsb29wIGFnYWluLiAqLwor CQlpZiAoc2Nhbi0+cnNfbnR1cGxlcyA+IDApCisJCXsKKwkJCWxpbmVpbmRleCA9IDA7CisJCQls aW5lc2xlZnQgPSBzY2FuLT5yc19udHVwbGVzOworCQkJYnJlYWs7CisJCX0KKwkJLyogZWxzZTog cGFnZSBoYWQgbm8gdmlzaWJsZSB0dXBsZXM7IGNvbnRpbnVlIHRvIG5leHQgcGFnZSAqLworCX0K KworCS8qIEZyb20gaGVyZSBvbiwgd2UgbXVzdCBvbmx5IHJlYWQgdHVwbGVzIGZyb20gdGhpcyBz aW5nbGUgcGFnZS4gKi8KKwlwYWdlID0gQnVmZmVyR2V0UGFnZShzY2FuLT5yc19jYnVmKTsKKwor CS8qCisJICogV2FsayByc192aXN0dXBsZXNbXSBmcm9tICdsaW5laW5kZXgnLCBjb3B5aW5nIGhl YWRlcnMgaW50byB0ZGF0YVtdCisJICogdW50aWwgZWl0aGVyIHRoZSBwYWdlIGlzIGV4aGF1c3Rl ZCBvciB0aGUgYmF0Y2ggY2FwYWNpdHkgaXMgcmVhY2hlZC4KKwkgKi8KKwlmb3IgKDsgbGluZXNs ZWZ0ID4gMCAmJiBub3V0IDwgbWF4aXRlbXM7IGxpbmVzbGVmdC0tLCBsaW5laW5kZXggKz0gZGly KQorCXsKKwkJT2Zmc2V0TnVtYmVyCWxpbmVvZmY7CisJCUl0ZW1JZAkJCWxwcDsKKwkJSGVhcFR1 cGxlRGF0YSAqZHN0ID0gJnRkYXRhW25vdXRdOworCisJCUFzc2VydChsaW5laW5kZXggPD0gKHVp bnQzMikgc2Nhbi0+cnNfbnR1cGxlcyk7CisJCWxpbmVvZmYgPSBzY2FuLT5yc192aXN0dXBsZXNb bGluZWluZGV4XTsKKwkJbHBwID0gUGFnZUdldEl0ZW1JZChwYWdlLCBsaW5lb2ZmKTsKKwkJQXNz ZXJ0KEl0ZW1JZElzTm9ybWFsKGxwcCkpOworCisJCWRzdC0+dF9kYXRhID0gKEhlYXBUdXBsZUhl YWRlcikgUGFnZUdldEl0ZW0ocGFnZSwgbHBwKTsKKwkJZHN0LT50X2xlbiA9IEl0ZW1JZEdldExl bmd0aChscHApOworCQlkc3QtPnRfdGFibGVPaWQgPSB0YWJsZU9pZDsKKwkJSXRlbVBvaW50ZXJT ZXQoJihkc3QtPnRfc2VsZiksIHNjYW4tPnJzX2NibG9jaywgbGluZW9mZik7CisKKwkJaWYgKGtl eSAhPSBOVUxMICYmICFIZWFwS2V5VGVzdChkc3QsIHR1cGRlc2MsIG5rZXlzLCBrZXkpKQorCQkJ Y29udGludWU7CisKKwkJc2Nhbi0+cnNfY2luZGV4ID0gbGluZWluZGV4OworCQlub3V0Kys7CisJ fQorCisJcmV0dXJuIG5vdXQ7Cit9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQkJCQkgaGVhcCBhY2Nlc3Mg bWV0aG9kIGludGVyZmFjZQpAQCAtMTQzNiw2ICsxNTYyLDk3IEBAIGhlYXBfZ2V0bmV4dHNsb3Qo VGFibGVTY2FuRGVzYyBzc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFR1cGxlVGFibGVT bG90ICpzCiAJcmV0dXJuIHRydWU7CiB9CiAKKy8qLS0tLS0tLS0tLSBCYXRjaGluZyBzdXBwb3J0 IC0tLS0tLS0tLS0tKi8KKworLyoKKyAqIGhlYXBfc2Nhbl9iZWdpbl9iYXRjaAorICoKKyAqIEFs bG9jYXRlIGEgSGVhcEJhdGNoIHdpdGggc3BhY2UgZm9yICdtYXhpdGVtcycgdHVwbGUgaGVhZGVy cy4gTm8gcGluIGlzCisgKiB0YWtlbiBoZXJlLiBNZW1vcnkgaXMgYWxsb2NhdGVkIHVuZGVyIHRo ZSBzY2FuJ3MgbWVtb3J5IGNvbnRleHQuCisgKi8KK3ZvaWQgKgoraGVhcF9iZWdpbl9iYXRjaChU YWJsZVNjYW5EZXNjIHNzY2FuLCBpbnQgbWF4aXRlbXMpCit7CisJSGVhcEJhdGNoICAqaGI7CisJ T2lkCQkJcmVsaWQ7CisKKwlBc3NlcnQobWF4aXRlbXMgPiAwKTsKKworCWhiID0gcGFsbG9jKHNp emVvZihIZWFwQmF0Y2gpKTsKKwloYi0+dHVwZGF0YSA9IHBhbGxvYyhzaXplb2YoSGVhcFR1cGxl RGF0YSkgKiBtYXhpdGVtcyk7CisJaGItPm1heGl0ZW1zID0gbWF4aXRlbXM7CisJaGItPm5pdGVt cyA9IDA7CisJaGItPmJ1ZiA9IEludmFsaWRCdWZmZXI7CisKKwkvKiBJbml0aWFsaXplIHN0YXRp YyBmaWVsZHMgb2YgSGVhcFR1cGxlRGF0YS4gUm93IGJvZGllcyByZW1haW4gb24gcGFnZS4gKi8K KwlyZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQoc3NjYW4tPnJzX3JkKTsKKwlmb3IgKGludCBpID0g MDsgaSA8IG1heGl0ZW1zOyBpKyspCisJCWhiLT50dXBkYXRhW2ldLnRfdGFibGVPaWQgPSByZWxp ZDsKKworCXJldHVybiBoYjsKK30KKworLyoKKyAqIGhlYXBfc2Nhbl9lbmRfYmF0Y2gKKyAqCisg KiBSZWxlYXNlIGFueSBvdXRzdGFuZGluZyBwaW4gYW5kIGZyZWUgdGhlIGJhdGNoIGFsbG9jYXRp b25zLiBDYWxsZXIgd2lsbAorICogbm90IHVzZSAnYW1fYmF0Y2gnIGFmdGVyIHRoaXMgcG9pbnQu CisgKi8KK3ZvaWQKK2hlYXBfZW5kX2JhdGNoKFRhYmxlU2NhbkRlc2Mgc3NjYW4sIHZvaWQgKmFt X2JhdGNoKQoreworCUhlYXBCYXRjaCAqaGIgPSAoSGVhcEJhdGNoICopIGFtX2JhdGNoOworCisJ aWYgKEJ1ZmZlcklzVmFsaWQoaGItPmJ1ZikpCisJCVJlbGVhc2VCdWZmZXIoaGItPmJ1Zik7CisK KwlwZnJlZShoYi0+dHVwZGF0YSk7CisJcGZyZWUoaGIpOworfQorCitpbnQKK2hlYXBfZ2V0bmV4 dGJhdGNoKFRhYmxlU2NhbkRlc2Mgc3NjYW4sIHZvaWQgKmFtX2JhdGNoLCBTY2FuRGlyZWN0aW9u IGRpcikKK3sKKwlIZWFwU2NhbkRlc2Mgc2NhbiA9IChIZWFwU2NhbkRlc2MpIHNzY2FuOworCUhl YXBCYXRjaCAgKmhiID0gKEhlYXBCYXRjaCAqKSBhbV9iYXRjaDsKKwlCdWZmZXIJCWN1cmJ1ZjsK KwlpbnQJCQluOworCisJQXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSk7CisJQXNz ZXJ0KHNzY2FuLT5yc19mbGFncyAmIFNPX0FMTE9XX1BBR0VNT0RFKTsKKwlBc3NlcnQoaGItPm1h eGl0ZW1zID4gMCk7CisKKwkvKiBEcm9wIHByaW9yIGJhdGNoIHBpbiwgaWYgYW55LiAqLworCWlm IChCdWZmZXJJc1ZhbGlkKGhiLT5idWYpKQorCXsKKwkJUmVsZWFzZUJ1ZmZlcihoYi0+YnVmKTsK KwkJaGItPmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJfQorCisJaGItPm5pdGVtcyA9IDA7CisKKwkv KiBPbmUgY2FsbCBwZXIgYmF0Y2gsIG5ldmVyIGNyb3NzZXMgYSBwYWdlLiAqLworCW4gPSBoZWFw Z2V0dHVwX3BhZ2Vtb2RlX2JhdGNoKHNjYW4sIGRpciwKKwkJCQkJCQkJICBzc2Nhbi0+cnNfbmtl eXMsIHNzY2FuLT5yc19rZXksCisJCQkJCQkJCSAgaGItPnR1cGRhdGEsIGhiLT5tYXhpdGVtcyk7 CisKKwlpZiAobiA9PSAwKQorCQlyZXR1cm4gMDsJLyogZW5kIG9mIHNjYW4gKi8KKworCS8qIEhv bGQgYSBzaGFyZWQgcGluIGZvciB0aGUgYmF0Y2ggbGlmZXRpbWUgc28gdF9kYXRhIHN0YXlzIHZh bGlkLiAqLworCWN1cmJ1ZiA9IHNjYW4tPnJzX2NidWY7CisJSW5jckJ1ZmZlclJlZkNvdW50KGN1 cmJ1Zik7CisJaGItPmJ1ZiA9IGN1cmJ1ZjsKKworCS8qIFBlci10dXBsZSBzdGF0cyAoY2FuIGJl IGNvbGxhcHNlZCBpbnRvIGEgZnV0dXJlIF9tdWx0aSgpIGNhbGwpLiAqLworCXBnc3RhdF9jb3Vu dF9oZWFwX2dldG5leHRfYmF0Y2goc3NjYW4tPnJzX3JkLCBuKTsKKworCWhiLT5uaXRlbXMgPSBu OworCXJldHVybiBuOworfQorCisvKi0tLS0tIEVuZCBvZiBiYXRjaGluZyBzdXBwb3J0IC0tLS0t Ki8KKwogdm9pZAogaGVhcF9zZXRfdGlkcmFuZ2UoVGFibGVTY2FuRGVzYyBzc2NhbiwgSXRlbVBv aW50ZXIgbWludGlkLAogCQkJCSAgSXRlbVBvaW50ZXIgbWF4dGlkKQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggZGQ0ZmU2YmY2MmYuLjU1MGI3ODg1NTNjIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTI2MjMsNiArMjYy MywxMCBAQCBzdGF0aWMgY29uc3QgVGFibGVBbVJvdXRpbmUgaGVhcGFtX21ldGhvZHMgPSB7CiAJ LnNjYW5fcmVzY2FuID0gaGVhcF9yZXNjYW4sCiAJLnNjYW5fZ2V0bmV4dHNsb3QgPSBoZWFwX2dl dG5leHRzbG90LAogCisJLnNjYW5fYmVnaW5fYmF0Y2ggPSBoZWFwX2JlZ2luX2JhdGNoLAorCS5z Y2FuX2dldG5leHRiYXRjaCA9IGhlYXBfZ2V0bmV4dGJhdGNoLAorCS5zY2FuX2VuZF9iYXRjaCA9 IGhlYXBfZW5kX2JhdGNoLAorCiAJLnNjYW5fc2V0X3RpZHJhbmdlID0gaGVhcF9zZXRfdGlkcmFu Z2UsCiAJLnNjYW5fZ2V0bmV4dHNsb3RfdGlkcmFuZ2UgPSBoZWFwX2dldG5leHRzbG90X3RpZHJh bmdlLAogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5j bHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggZjdlNGFlMzg0M2MuLmY2Njc1MDQzZmIzIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL2hlYXBhbS5oCkBAIC0xMDEsNiArMTAxLDE5IEBAIHR5cGVkZWYgc3RydWN0IEhlYXBTY2Fu RGVzY0RhdGEKIH0gSGVhcFNjYW5EZXNjRGF0YTsKIHR5cGVkZWYgc3RydWN0IEhlYXBTY2FuRGVz Y0RhdGEgKkhlYXBTY2FuRGVzYzsKIAorLyoKKyAqIEhlYXBCYXRjaCAtLSBzdGF0ZWxlc3MgcGVy LWJhdGNoIGJ1ZmZlci4gQSBiYXRjaCBwaW5zIG9uZSBwYWdlIGFuZAorICogZXhwb3NlcyB1cCB0 byBtYXhpdGVtcyBIZWFwVHVwbGVEYXRhIGhlYWRlcnMgd2hvc2UgdF9kYXRhIHBvaW50IGludG8g dGhhdAorICogcGFnZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSGVhcEJhdGNoCit7CisJSGVhcFR1 cGxlRGF0YSAgKnR1cGRhdGE7CS8qIGxlbiA9IG1heGl0ZW1zOyBoZWFkZXJzIG9ubHkgKi8KKwlp bnQJCQkJbml0ZW1zOwkJLyogdHVwbGVzIHByb2R1Y2VkIGluIGxhc3QgZ2V0bmV4dGJhdGNoKCkg Ki8KKwlpbnQJCQkJbWF4aXRlbXM7CS8qIGZpeGVkIGNhcGFjaXR5IHNldCBhdCBiZWdpbl9iYXRj aCgpICovCisJQnVmZmVyCQkJYnVmOwkJLyogc2luZ2xlIHBpbm5lZCBidWZmZXIgZm9yIHRoaXMg YmF0Y2ggKi8KK30gSGVhcEJhdGNoOworCiB0eXBlZGVmIHN0cnVjdCBCaXRtYXBIZWFwU2NhbkRl c2NEYXRhCiB7CiAJSGVhcFNjYW5EZXNjRGF0YSByc19oZWFwX2Jhc2U7CkBAIC0zMzcsNiArMzUw LDExIEBAIGV4dGVybiB2b2lkIGhlYXBfZW5kc2NhbihUYWJsZVNjYW5EZXNjIHNzY2FuKTsKIGV4 dGVybiBIZWFwVHVwbGUgaGVhcF9nZXRuZXh0KFRhYmxlU2NhbkRlc2Mgc3NjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uKTsKIGV4dGVybiBib29sIGhlYXBfZ2V0bmV4dHNsb3QoVGFibGVTY2Fu RGVzYyBzc2NhbiwKIAkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFR1cGxlVGFibGVT bG90ICpzbG90KTsKKworZXh0ZXJuIHZvaWQgKmhlYXBfYmVnaW5fYmF0Y2goVGFibGVTY2FuRGVz YyBzc2NhbiwgaW50IG1heGl0ZW1zKTsKK2V4dGVybiB2b2lkIGhlYXBfZW5kX2JhdGNoKFRhYmxl U2NhbkRlc2Mgc3NjYW4sIHZvaWQgKmFtX2JhdGNoKTsKK2V4dGVybiBpbnQgaGVhcF9nZXRuZXh0 YmF0Y2goVGFibGVTY2FuRGVzYyBzc2Nhbiwgdm9pZCAqYW1fYmF0Y2gsIFNjYW5EaXJlY3Rpb24g ZGlyKTsKKwogZXh0ZXJuIHZvaWQgaGVhcF9zZXRfdGlkcmFuZ2UoVGFibGVTY2FuRGVzYyBzc2Nh biwgSXRlbVBvaW50ZXIgbWludGlkLAogCQkJCQkJCSAgSXRlbVBvaW50ZXIgbWF4dGlkKTsKIGV4 dGVybiBib29sIGhlYXBfZ2V0bmV4dHNsb3RfdGlkcmFuZ2UoVGFibGVTY2FuRGVzYyBzc2NhbiwK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvdGFibGVhbS5oCmluZGV4IDJmYTc5MGI2YmY1Li4zZWMzYzNkZDAwOCAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv dGFibGVhbS5oCkBAIC0zNTEsNiArMzUxLDE2IEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0 aW5lCiAJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCQkJCQkJCQkgVHVwbGVU YWJsZVNsb3QgKnNsb3QpOwogCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogQmF0Y2hlZCBzY2Fu IHN1cHBvcnQKKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKi8KKworCXZvaWQJICAgKigqc2Nhbl9i ZWdpbl9iYXRjaCkoVGFibGVTY2FuRGVzYyBzc2NhbiwgaW50IG1heGl0ZW1zKTsKKwlpbnQJCQko KnNjYW5fZ2V0bmV4dGJhdGNoKShUYWJsZVNjYW5EZXNjIHNzY2FuLCB2b2lkICphbV9iYXRjaCwK KwkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcik7CisJdm9pZAkJKCpzY2FuX2VuZF9iYXRjaCko VGFibGVTY2FuRGVzYyBzc2Nhbiwgdm9pZCAqYW1fYmF0Y2gpOworCiAJLyotLS0tLS0tLS0tLQog CSAqIE9wdGlvbmFsIGZ1bmN0aW9ucyB0byBwcm92aWRlIHNjYW5uaW5nIGZvciByYW5nZXMgb2Yg SXRlbVBvaW50ZXJzLgogCSAqIEltcGxlbWVudGF0aW9ucyBtdXN0IGVpdGhlciBwcm92aWRlIGJv dGggb2YgdGhlc2UgZnVuY3Rpb25zLCBvciBuZWl0aGVyCkBAIC0xMDM2LDYgKzEwNDYsNTQgQEAg dGFibGVfc2Nhbl9nZXRuZXh0c2xvdChUYWJsZVNjYW5EZXNjIHNzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbiwgVHVwbGVUYWJsZVMKIAlyZXR1cm4gc3NjYW4tPnJzX3JkLT5yZF90YWJsZWFt LT5zY2FuX2dldG5leHRzbG90KHNzY2FuLCBkaXJlY3Rpb24sIHNsb3QpOwogfQogCisvKgorICog dGFibGVfc2Nhbl9iZWdpbl9iYXRjaAorICoJCUFsbG9jYXRlIEFNLW93bmVkIGJhdGNoIHBheWxv YWQgd2l0aCBjYXBhY2l0eSAnbWF4aXRlbXMnLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgKgor dGFibGVfc2Nhbl9iZWdpbl9iYXRjaChUYWJsZVNjYW5EZXNjIHNzY2FuLCBpbnQgbWF4aXRlbXMp Cit7CisJY29uc3QgVGFibGVBbVJvdXRpbmUgKnRhbSA9IHNzY2FuLT5yc19yZC0+cmRfdGFibGVh bTsKKworCUFzc2VydCh0YW0tPnNjYW5fYmVnaW5fYmF0Y2ggIT0gTlVMTCk7CisKKwlyZXR1cm4g dGFtLT5zY2FuX2JlZ2luX2JhdGNoKHNzY2FuLCBtYXhpdGVtcyk7Cit9CisKKy8qCisgKiB0YWJs ZV9zY2FuX2dldG5leHRiYXRjaAorICoJCUZpbGwgbmV4dCBiYXRjaCBmcm9tIHRoZSBBTS4gUmV0 dXJucyBudW1iZXIgb2YgdHVwbGVzLCAwID0+IEVPUy4KKyAqCQlCYXRjaGVzIGFyZSBzaW5nbGUt cGFnZSBpbiB2MS4gRGlyZWN0aW9uIGlzIGZvcndhcmQgb25seSBpbiB2MS4KKyAqLworc3RhdGlj IGlubGluZSBpbnQKK3RhYmxlX3NjYW5fZ2V0bmV4dGJhdGNoKFRhYmxlU2NhbkRlc2Mgc3NjYW4s IHZvaWQgKmFtX2JhdGNoLCBTY2FuRGlyZWN0aW9uIGRpcikKK3sKKwljb25zdCBUYWJsZUFtUm91 dGluZSAqdGFtID0gc3NjYW4tPnJzX3JkLT5yZF90YWJsZWFtOworCisJLyogT25seSBmb3J3YXJk IHNjYW5zIGFyZSBzdXBwb3J0ZWQgaW4gdGhlIGJhdGNoZWQgbW9kZS4gKi8KKwlBc3NlcnQoZGly ID09IEZvcndhcmRTY2FuRGlyZWN0aW9uKTsKKwlBc3NlcnQodGFtLT5zY2FuX2dldG5leHRiYXRj aCAhPSBOVUxMKTsKKworCXJldHVybiB0YW0tPnNjYW5fZ2V0bmV4dGJhdGNoKHNzY2FuLCBhbV9i YXRjaCwgZGlyKTsKK30KKworLyoKKyAqIHRhYmxlX3NjYW5fZW5kX2JhdGNoCisgKgkJUmVsZWFz ZSBBTS1vd25lZCByZXNvdXJjZXMgZm9yIHRoZSBiYXRjaCBwYXlsb2FkLgorICovCitzdGF0aWMg aW5saW5lIHZvaWQKK3RhYmxlX3NjYW5fZW5kX2JhdGNoKFRhYmxlU2NhbkRlc2Mgc3NjYW4sIHZv aWQgKmFtX2JhdGNoKQoreworCWNvbnN0IFRhYmxlQW1Sb3V0aW5lICp0YW0gPSBzc2Nhbi0+cnNf cmQtPnJkX3RhYmxlYW07CisKKwlpZiAoYW1fYmF0Y2ggPT0gTlVMTCkKKwkJcmV0dXJuOworCisJ QXNzZXJ0KHRhbS0+c2Nhbl9lbmRfYmF0Y2ggIT0gTlVMTCk7CisKKwl0YW0tPnNjYW5fZW5kX2Jh dGNoKHNzY2FuLCBhbV9iYXRjaCk7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFRJ RCBSYW5nZSBzY2FubmluZyByZWxhdGVkIGZ1bmN0aW9ucy4KICAqIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bnc3RhdC5oIGIvc3JjL2luY2x1ZGUvcGdzdGF0 LmgKaW5kZXggNjcxNDM2MzE0NGEuLjg1Zjc2ZGVlNDY4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9wZ3N0YXQuaAorKysgYi9zcmMvaW5jbHVkZS9wZ3N0YXQuaApAQCAtNjk3LDYgKzY5NywxMSBA QCBleHRlcm4gdm9pZCBwZ3N0YXRfcmVwb3J0X2FuYWx5emUoUmVsYXRpb24gcmVsLAogCQlpZiAo cGdzdGF0X3Nob3VsZF9jb3VudF9yZWxhdGlvbihyZWwpKQkJCQkJCVwKIAkJCShyZWwpLT5wZ3N0 YXRfaW5mby0+Y291bnRzLnR1cGxlc19yZXR1cm5lZCsrOwkJCVwKIAl9IHdoaWxlICgwKQorI2Rl ZmluZSBwZ3N0YXRfY291bnRfaGVhcF9nZXRuZXh0X2JhdGNoKHJlbCwgbikJCQkJCQlcCisJZG8g ewkJCQkJCQkJCQkJCQkJCVwKKwkJaWYgKHBnc3RhdF9zaG91bGRfY291bnRfcmVsYXRpb24ocmVs KSkJCQkJCQlcCisJCQkocmVsKS0+cGdzdGF0X2luZm8tPmNvdW50cy50dXBsZXNfcmV0dXJuZWQg Kz0gbjsJCVwKKwl9IHdoaWxlICgwKQogI2RlZmluZSBwZ3N0YXRfY291bnRfaGVhcF9mZXRjaChy ZWwpCQkJCQkJCQlcCiAJZG8gewkJCQkJCQkJCQkJCQkJCVwKIAkJaWYgKHBnc3RhdF9zaG91bGRf Y291bnRfcmVsYXRpb24ocmVsKSkJCQkJCQlcCi0tIAoyLjQ3LjMKCg== --0000000000003b0851064662c896 Content-Type: application/octet-stream; name="v4-0002-SeqScan-add-batch-driven-variants-returning-slots.patch" Content-Disposition: attachment; filename="v4-0002-SeqScan-add-batch-driven-variants-returning-slots.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mjecz7231 RnJvbSA1NjMwODM2YWVmYjg3OTQ4YmI3NDVkN2ZhYWQwMWU5ZTM1MzRhNjRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFNhdCwgMjAgRGVjIDIwMjUgMTc6MjM6MTIgKzA5MDAKU3ViamVjdDogW1BBVENIIHY0 IDIvM10gU2VxU2NhbjogYWRkIGJhdGNoLWRyaXZlbiB2YXJpYW50cyByZXR1cm5pbmcgc2xvdHMK ClRlYWNoIFNlcVNjYW4gdG8gZHJpdmUgdGhlIHRhYmxlIEFNIHZpYSBuZXcgdGhlIGJhdGNoIEFQ SSBhZGRlZCBpbgp0aGUgcHJldmlvdXMgY29tbWl0LCB3aGlsZSBzdGlsbCByZXR1cm5pbmcgb25l IFR1cGxlVGFibGVTbG90IGF0IGEKdGltZSB0byBjYWxsZXJzLiBUaGlzIHJlZHVjZXMgcGVyIHR1 cGxlIEFNIGNyb3NzaW5ncyB3aXRob3V0CmNoYW5naW5nIHRoZSBub2RlIGludGVyZmFjZSBzZWVu IGJ5IHBhcmVudHMuCgpBZGQgVHVwbGVCYXRjaCBhbmQgc3VwcG9ydGluZyBjb2RlIGluIGV4ZWNC YXRjaC5jL2ggdG8gaG9sZCBleGVjdXRvcgpzaWRlIGJhdGNoaW5nIHN0YXRlLiBQbGFuU3RhdGUg Z2FpbnMgcHNfQmF0Y2ggdG8gY2FycnkgdGhlIGFjdGl2ZQpUdXBsZUJhdGNoIHdoZW4gYSBub2Rl IHN1cHBvcnRzIGJhdGNoaW5nLgoKV2lyZSB1cCBydW50aW1lIHNlbGVjdGlvbiBpbiBFeGVjSW5p dFNlcVNjYW4gdXNpbmcKU2NhbkNhblVzZUJhdGNoaW5nKCkuIFdoZW4gZXhlY3V0b3JfYmF0Y2hp bmcgaXMgZW5hYmxlZCwgRVBRIGlzCmluYWN0aXZlLCB0aGUgc2NhbiBpcyBub3QgYmFja3dhcmQs IGFuZCB0aGUgcmVsYXRpb24gc3VwcG9ydHMKYmF0Y2hpbmcsIHBzLkV4ZWNQcm9jTm9kZSBpcyBz ZXQgdG8gYSBiYXRjaC1kcml2ZW4gdmFyaWFudC4gT3RoZXJ3aXNlCnRoZSBub24tYmF0Y2ggcGF0 aCBpcyB1c2VkLgoKUGxhbiBzaGFwZSBhbmQgRVhQTEFJTiBvdXRwdXQgcmVtYWluIHVuY2hhbmdl ZDsgb25seSB0aGUgaW50ZXJuYWwKdHVwbGUgZmxvdyBkaWZmZXJzIHdoZW4gYmF0Y2hpbmcgaXMg ZW5hYmxlZCBhbmQgYWxsb3dlZC4KCkFkZCBleGVjdXRvcl9iYXRjaF9yb3dzIEdVQyB0byBzcGVj aWZ5IHRoZSBtYXhpbXVtIG51bWJlciBvZiByb3dzCnRoYXQgY2FuIGJlIGFkZGVkIGludG8gYSBi YXRjaC4KCk5vdGVzIC8gY3VycmVudCBsaW1pdHM6CgotIFdpdGggdGhlIGN1cnJlbnQgaGVhcGFt LCBiYXRjaGVzIGFyZSBjb21wb3NlZCBmcm9tIGEgc2luZ2xlIHBhZ2UsIHNvCiAgdGhlIGJhdGNo IG1heSBub3QgYWx3YXlzIGJlIGZ1bGwuIEZ1dHVyZSB3b3JrIG1heSBsZXQgU2VxU2NhbiBhbmQv b3IKICBBTXMgdG9wIHVwIGJhdGNoZXMgYWNyb3NzIHBhZ2VzIHdoZW4gc2FmZSB0byBkbyBzby4K ClJldmlld2VkLWJ5OiBEYW5paWwgRGF2eWRvdiA8M2Rhbmlzc2ltb0BnbWFpbC5jb20+CkRpc2N1 c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0ErSGl3cUZmQVlfWkZxTjh3Y0FFTXc3MVQ5aE1f a0E4VXR5SGFaWkVadHVUM1V5b2dBQG1haWwuZ21haWwuY29tCi0tLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtLmMgICAgICAgICAgfCAgMjkgKysrKwogc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2hhbmRsZXIuYyAgfCAgMTYgKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy90YWJs ZS90YWJsZWFtLmMgICAgICAgIHwgIDExICsrCiBzcmMvYmFja2VuZC9leGVjdXRvci9NYWtlZmls ZSAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQmF0Y2guYyAg ICAgICAgICB8IDExNyArKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Nj YW4uYyAgICAgICAgICAgfCAgMzEgKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvbWVzb24uYnVp bGQgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYyAg ICAgICAgfCAxNzYgKysrKysrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvaW5p dC9nbG9iYWxzLmMgICAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNf cGFyYW1ldGVycy5kYXQgfCAgIDkgKysKIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCAgICAg ICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAg ICAgIHwgIDI3ICsrKysKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNCYXRjaC5oICAgICAgICAg IHwgIDk5ICsrKysrKysrKysrKwogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1NjYW4uaCAgICAg ICAgICAgfCAgNjkgKysrKysrKysrCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oICAg ICAgICAgICB8ICAgNCArCiBzcmMvaW5jbHVkZS9taXNjYWRtaW4uaCAgICAgICAgICAgICAgICAg ICB8ICAgMSArCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAgICAgICB8ICAg NCArCiAxNyBmaWxlcyBjaGFuZ2VkLCA1OTggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNCYXRjaC5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0JhdGNoLmgKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbS5jCmluZGV4IGZjYzA4MTNmMTM5Li4wYzBiMjM4NGYwZSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtLmMKQEAgLTE1OTIsNiArMTU5MiwzNSBAQCBoZWFwX2JlZ2luX2JhdGNo KFRhYmxlU2NhbkRlc2Mgc3NjYW4sIGludCBtYXhpdGVtcykKIAlyZXR1cm4gaGI7CiB9CiAKKy8q CisgKiBoZWFwX3NjYW5fbWF0ZXJpYWxpemVfYWxsCisgKgorICogQmluZCBhbGwgdHVwbGVzIG9m IHRoZSBjdXJyZW50IGJhdGNoIGludG8gJ3Nsb3RzJy4gV2UgYmluZCB0aGUKKyAqIEhlYXBUdXBs ZURhdGEgaGVhZGVyIHRoYXQgcG9pbnRzIGludG8gdGhlIHBpbm5lZCBwYWdlLiBObyBwZXItcm93 IGNvcHkuCisgKi8KK3ZvaWQKK2hlYXBfbWF0ZXJpYWxpemVfYmF0Y2hfYWxsKHZvaWQgKmFtX2Jh dGNoLCBUdXBsZVRhYmxlU2xvdCAqKnNsb3RzLCBpbnQgbikKK3sKKwlIZWFwQmF0Y2ggKmhiID0g KEhlYXBCYXRjaCAqKSBhbV9iYXRjaDsKKworCUFzc2VydChuIDw9IGhiLT5uaXRlbXMpOworCisJ Zm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisJeworCQlIZWFwVHVwbGVEYXRhICp0dXBsZSA9 ICZoYi0+dHVwZGF0YVtpXTsKKwkJSGVhcFR1cGxlVGFibGVTbG90ICpzbG90ID0gKEhlYXBUdXBs ZVRhYmxlU2xvdCAqKSBzbG90c1tpXTsKKworCQkvKiBJbmxpbmUgb2YgRXhlY1N0b3JlSGVhcFR1 cGxlKHR1cGxlLCBzbG90LCBmYWxzZSkgKi8KKwkJc2xvdC0+dHVwbGUgPSB0dXBsZTsKKwkJc2xv dC0+b2ZmID0gMDsKKwkJc2xvdC0+YmFzZS50dHNfbnZhbGlkID0gMDsKKwkJc2xvdC0+YmFzZS50 dHNfZmxhZ3MgJj0gfihUVFNfRkxBR19FTVBUWSB8IFRUU19GTEFHX1NIT1VMREZSRUUpOworCQlz bG90LT5iYXNlLnR0c190aWQgPSB0dXBsZS0+dF9zZWxmOworCQlzbG90LT5iYXNlLnR0c190YWJs ZU9pZCA9IHR1cGxlLT50X3RhYmxlT2lkOworCQlzbG90LT5iYXNlLnR0c19mbGFncyAmPSB+KFRU U19GTEFHX1NIT1VMREZSRUUgfCBUVFNfRkxBR19FTVBUWSk7CisJfQorfQorCiAvKgogICogaGVh cF9zY2FuX2VuZF9iYXRjaAogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxl ci5jCmluZGV4IDU1MGI3ODg1NTNjLi5hNGRlN2U1YjRmNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC03Miw2ICs3MiwyMSBAQCBoZWFwYW1fc2xvdF9jYWxs YmFja3MoUmVsYXRpb24gcmVsYXRpb24pCiAJcmV0dXJuICZUVFNPcHNCdWZmZXJIZWFwVHVwbGU7 CiB9CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVHVwbGVCYXRjaCByZWxhdGVkIGNhbGxiYWNr cyBmb3IgaGVhcCBBTQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3RhdGljIGNvbnN0IFR1 cGxlQmF0Y2hPcHMgVHVwbGVCYXRjaEhlYXBPcHMgPQoreworCS5tYXRlcmlhbGl6ZV9hbGwgPSBo ZWFwX21hdGVyaWFsaXplX2JhdGNoX2FsbAorfTsKKworc3RhdGljIGNvbnN0IFR1cGxlQmF0Y2hP cHMgKgoraGVhcGFtX2JhdGNoX2NhbGxiYWNrcyhSZWxhdGlvbiByZWxhdGlvbikKK3sKKwlyZXR1 cm4gJlR1cGxlQmF0Y2hIZWFwT3BzOworfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEluZGV4 IFNjYW4gQ2FsbGJhY2tzIGZvciBoZWFwIEFNCkBAIC0yNjE3LDYgKzI2MzIsNyBAQCBzdGF0aWMg Y29uc3QgVGFibGVBbVJvdXRpbmUgaGVhcGFtX21ldGhvZHMgPSB7CiAJLnR5cGUgPSBUX1RhYmxl QW1Sb3V0aW5lLAogCiAJLnNsb3RfY2FsbGJhY2tzID0gaGVhcGFtX3Nsb3RfY2FsbGJhY2tzLAor CS5iYXRjaF9jYWxsYmFja3MgPSBoZWFwYW1fYmF0Y2hfY2FsbGJhY2tzLAogCiAJLnNjYW5fYmVn aW4gPSBoZWFwX2JlZ2luc2NhbiwKIAkuc2Nhbl9lbmQgPSBoZWFwX2VuZHNjYW4sCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3RhYmxlL3RhYmxlYW0uYwppbmRleCA3M2ViYzAxYTA4Zi4uZDI4MWFhY2FmOTQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYwpAQCAtMTAzLDYgKzEwMywxNyBAQCB0YWJsZV9zbG90 X2NyZWF0ZShSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqKnJlZ2xpc3QpCiAJcmV0dXJuIHNsb3Q7 CiB9CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFR1cGxlQmF0Y2ggc3VwcG9ydCByb3V0 aW5lcworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitjb25zdCBUdXBsZUJhdGNoT3BzICoK K3RhYmxlX2JhdGNoX2NhbGxiYWNrcyhSZWxhdGlvbiByZWxhdGlvbikKK3sKKwlpZiAocmVsYXRp b24tPnJkX3RhYmxlYW0pCisJCXJldHVybiByZWxhdGlvbi0+cmRfdGFibGVhbS0+YmF0Y2hfY2Fs bGJhY2tzKHJlbGF0aW9uKTsKKwllbG9nKEVSUk9SLCAicmVsYXRpb24gZG9lcyBub3Qgc3VwcG9y dCBUdXBsZUJhdGNoIG9wZXJhdGlvbnMiKTsKK30KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog ICogVGFibGUgc2NhbiBmdW5jdGlvbnMuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRv ci9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL01ha2VmaWxlCmluZGV4IDExMTE4ZDBj ZTAyLi4zZTcyZjNmZTAzYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvTWFrZWZp bGUKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvTWFrZWZpbGUKQEAgLTE1LDYgKzE1LDcgQEAg aW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogT0JKUyA9IFwKIAll eGVjQW1pLm8gXAogCWV4ZWNBc3luYy5vIFwKKwlleGVjQmF0Y2gubyBcCiAJZXhlY0N1cnJlbnQu byBcCiAJZXhlY0V4cHIubyBcCiAJZXhlY0V4cHJJbnRlcnAubyBcCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjQmF0Y2guYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNC YXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wMDdhZTUzNTY4 NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNCYXRjaC5jCkBA IC0wLDAgKzEsMTE3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBleGVjQmF0Y2guYwor ICoJCUhlbHBlcnMgZm9yIFR1cGxlQmF0Y2gKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp IDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxp Zm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY0JhdGNoLmMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jl cy5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNCYXRjaC5oIgorCisvKgorICogVHVwbGVCYXRj aENyZWF0ZQorICoJCUFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IFR1cGxlQmF0Y2ggZW52 ZWxvcGUuCisgKi8KK1R1cGxlQmF0Y2ggKgorVHVwbGVCYXRjaENyZWF0ZShUdXBsZURlc2Mgc2Nh bmRlc2MsIGludCBjYXBhY2l0eSkKK3sKKwlUdXBsZUJhdGNoICAqYjsKKwlUdXBsZVRhYmxlU2xv dCAqKmluc2xvdHMsCisJCQkJICAgKipvdXRzbG90czsKKworCWluc2xvdHMgPSBwYWxsb2Moc2l6 ZW9mKFR1cGxlVGFibGVTbG90ICopICogY2FwYWNpdHkpOworCW91dHNsb3RzID0gcGFsbG9jKHNp emVvZihUdXBsZVRhYmxlU2xvdCAqKSAqIGNhcGFjaXR5KTsKKwlmb3IgKGludCBpID0gMDsgaSA8 IGNhcGFjaXR5OyBpKyspCisJCWluc2xvdHNbaV0gPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3Qo c2NhbmRlc2MsICZUVFNPcHNIZWFwVHVwbGUpOworCisJYiA9IChUdXBsZUJhdGNoICopIHBhbGxv YyhzaXplb2YoVHVwbGVCYXRjaCkpOworCisJLyogSW5pdGlhbCBzdGF0ZTogZW1wdHkgZW52ZWxv cGUgKi8KKwliLT5hbV9wYXlsb2FkID0gTlVMTDsKKwliLT5udHVwbGVzID0gMDsKKwliLT5pbnNs b3RzID0gaW5zbG90czsKKwliLT5vdXRzbG90cyA9IG91dHNsb3RzOworCWItPmFjdGl2ZXNsb3Rz ID0gTlVMTDsKKwliLT5vdXRzbG90cyA9IG91dHNsb3RzOworCWItPm1heHNsb3RzID0gY2FwYWNp dHk7CisKKwliLT5udmFsaWQgPSAwOworCWItPm5leHQgPSAwOworCisJcmV0dXJuIGI7Cit9CisK Ky8qCisgKiBUdXBsZUJhdGNoUmVzZXQKKyAqCQlSZXNldCBhbiBleGlzdGluZyBUdXBsZUJhdGNo IGVudmVsb3BlIHRvIGVtcHR5LgorICovCit2b2lkCitUdXBsZUJhdGNoUmVzZXQoVHVwbGVCYXRj aCAqYiwgYm9vbCBkcm9wX3Nsb3RzKQoreworCWlmIChiID09IE5VTEwpCisJCXJldHVybjsKKwor CWZvciAoaW50IGkgPSAwOyBpIDwgYi0+bWF4c2xvdHM7IGkrKykKKwl7CisJCUV4ZWNDbGVhclR1 cGxlKGItPmluc2xvdHNbaV0pOworCQlpZiAoZHJvcF9zbG90cykKKwkJCUV4ZWNEcm9wU2luZ2xl VHVwbGVUYWJsZVNsb3QoYi0+aW5zbG90c1tpXSk7CisJfQorCisJaWYgKGRyb3Bfc2xvdHMpCisJ eworCQlwZnJlZShiLT5pbnNsb3RzKTsKKwkJcGZyZWUoYi0+b3V0c2xvdHMpOworCQliLT5pbnNs b3RzID0gYi0+b3V0c2xvdHMgPSBOVUxMOworCX0KKworCWItPm50dXBsZXMgPSAwOworCWItPm52 YWxpZCA9IDA7CisJYi0+bmV4dCA9IDA7CisJYi0+YWN0aXZlc2xvdHMgPSBOVUxMOworfQorCit2 b2lkCitUdXBsZUJhdGNoVXNlSW5wdXQoVHVwbGVCYXRjaCAqYiwgaW50IG52YWxpZCkKK3sKKwli LT5tYXRlcmlhbGl6ZWQgPSB0cnVlOworCWItPmFjdGl2ZXNsb3RzID0gYi0+aW5zbG90czsKKwli LT5udmFsaWQgPSBudmFsaWQ7CisJYi0+bmV4dCA9IDA7Cit9CisKK3ZvaWQKK1R1cGxlQmF0Y2hV c2VPdXRwdXQoVHVwbGVCYXRjaCAqYiwgaW50IG52YWxpZCkKK3sKKwliLT5tYXRlcmlhbGl6ZWQg PSB0cnVlOworCWItPmFjdGl2ZXNsb3RzID0gYi0+b3V0c2xvdHM7CisJYi0+bnZhbGlkID0gbnZh bGlkOworCWItPm5leHQgPSAwOworfQorCitib29sCitUdXBsZUJhdGNoSXNWYWxpZChUdXBsZUJh dGNoICpiKQoreworCXJldHVybgliICE9IE5VTEwgJiYKKwkJCWItPm1heHNsb3RzID4gMCAmJgor CQkJYi0+aW5zbG90cyAhPSBOVUxMICYmCisJCQliLT5vdXRzbG90cyAhPSBOVUxMOworfQorCit2 b2lkCitUdXBsZUJhdGNoUmV3aW5kKFR1cGxlQmF0Y2ggKmIpCit7CisJYi0+bmV4dCA9IDA7Cit9 CisKK2ludAorVHVwbGVCYXRjaEdldE51bVZhbGlkKFR1cGxlQmF0Y2ggKmIpCit7CisJcmV0dXJu IGItPm52YWxpZDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNTY2Fu LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjU2Nhbi5jCmluZGV4IDMxZWQ0NzgzYzFkLi5i YTI1ZGFhNWU0NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1NjYW4uYwor KysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjU2Nhbi5jCkBAIC0xOCw2ICsxOCw3IEBACiAg Ki8KICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIK ICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNT Y2FuLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCkBAIC0xNTQsMyArMTU1LDMzIEBAIEV4ZWNT Y2FuUmVTY2FuKFNjYW5TdGF0ZSAqbm9kZSkKIAkJfQogCX0KIH0KKworYm9vbAorU2NhbkNhblVz ZUJhdGNoaW5nKFNjYW5TdGF0ZSAqc2NhbnN0YXRlLCBpbnQgZWZsYWdzKQoreworCVJlbGF0aW9u CXJlbGF0aW9uID0gc2NhbnN0YXRlLT5zc19jdXJyZW50UmVsYXRpb247CisKKwlyZXR1cm4JZXhl Y3V0b3JfYmF0Y2hfcm93cyA+IDAgJiYKKwkJCShzY2Fuc3RhdGUtPnBzLnN0YXRlLT5lc19lcHFf YWN0aXZlID09IE5VTEwpICYmCisJCQkhKGVmbGFncyAmIEVYRUNfRkxBR19CQUNLV0FSRCkgJiYK KwkJCXJlbGF0aW9uICYmIHRhYmxlX3N1cHBvcnRzX2JhdGNoaW5nKHJlbGF0aW9uKTsKK30KKwor dm9pZAorU2NhblJlc2V0QmF0Y2hpbmcoU2NhblN0YXRlICpzY2Fuc3RhdGUsIGJvb2wgZHJvcCkK K3sKKwlUdXBsZUJhdGNoICpiID0gc2NhbnN0YXRlLT5wcy5wc19CYXRjaDsKKworCWlmIChiKQor CXsKKwkJVHVwbGVCYXRjaFJlc2V0KGIsIGRyb3ApOworCQlpZiAoYi0+YW1fcGF5bG9hZCkKKwkJ eworCQkJdGFibGVfc2Nhbl9lbmRfYmF0Y2goc2NhbnN0YXRlLT5zc19jdXJyZW50U2NhbkRlc2Ms CisJCQkJCQkJCSBiLT5hbV9wYXlsb2FkKTsKKwkJCWItPmFtX3BheWxvYWQgPSBOVUxMOworCQl9 CisJCWlmIChkcm9wKQorCQkJcGZyZWUoYik7CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvbWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC9leGVjdXRvci9tZXNvbi5idWls ZAppbmRleCAyY2VhNDFmODc3MS4uNDBmZmMyOGYzY2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL21lc29uLmJ1 aWxkCkBAIC0zLDYgKzMsNyBAQAogYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAnZXhlY0Ft aS5jJywKICAgJ2V4ZWNBc3luYy5jJywKKyAgJ2V4ZWNCYXRjaC5jJywKICAgJ2V4ZWNDdXJyZW50 LmMnLAogICAnZXhlY0V4cHIuYycsCiAgICdleGVjRXhwckludGVycC5jJywKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTZXFzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlU2Vxc2Nhbi5jCmluZGV4IDk0MDQ3ZDI5NDMwLi5hOTA3MWUzMjU2MCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYworKysgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlU2Vxc2Nhbi5jCkBAIC0yMDMsNiArMjAzLDE3MSBAQCBFeGVjU2VxU2NhbkVQ UShQbGFuU3RhdGUgKnBzdGF0ZSkKIAkJCQkJKEV4ZWNTY2FuUmVjaGVja010ZCkgU2VxUmVjaGVj ayk7CiB9CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCQkJCQkJQmF0Y2ggU3VwcG9ydAorICogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCitzdGF0aWMgaW5saW5lIGJvb2wKK1NlcU5leHRCYXRjaChTZXFTY2FuU3RhdGUgKm5vZGUp Cit7CisJVGFibGVTY2FuRGVzYyBzY2FuZGVzYzsKKwlFU3RhdGUJICAgKmVzdGF0ZTsKKwlTY2Fu RGlyZWN0aW9uIGRpcmVjdGlvbjsKKworCUFzc2VydChub2RlLT5zcy5wcy5wc19CYXRjaCAhPSBO VUxMKTsKKworCS8qCisJICogZ2V0IGluZm9ybWF0aW9uIGZyb20gdGhlIGVzdGF0ZSBhbmQgc2Nh biBzdGF0ZQorCSAqLworCXNjYW5kZXNjID0gbm9kZS0+c3Muc3NfY3VycmVudFNjYW5EZXNjOwor CWVzdGF0ZSA9IG5vZGUtPnNzLnBzLnN0YXRlOworCWRpcmVjdGlvbiA9IGVzdGF0ZS0+ZXNfZGly ZWN0aW9uOworCUFzc2VydChkaXJlY3Rpb24gPT0gRm9yd2FyZFNjYW5EaXJlY3Rpb24pOworCisJ aWYgKHNjYW5kZXNjID09IE5VTEwpCisJeworCQkvKgorCQkgKiBXZSByZWFjaCBoZXJlIGlmIHRo ZSBzY2FuIGlzIG5vdCBwYXJhbGxlbCwgb3IgaWYgd2UncmUgc2VyaWFsbHkKKwkJICogZXhlY3V0 aW5nIGEgc2NhbiB0aGF0IHdhcyBwbGFubmVkIHRvIGJlIHBhcmFsbGVsLgorCQkgKi8KKwkJc2Nh bmRlc2MgPSB0YWJsZV9iZWdpbnNjYW4obm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAorCQkJ CQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAorCQkJCQkJCQkgICAwLCBOVUxMKTsKKwkJbm9k ZS0+c3Muc3NfY3VycmVudFNjYW5EZXNjID0gc2NhbmRlc2M7CisJfQorCisJLyogTGF6aWx5IGNy ZWF0ZSB0aGUgQU0gYmF0Y2ggcGF5bG9hZC4gKi8KKwlpZiAobm9kZS0+c3MucHMucHNfQmF0Y2gt PmFtX3BheWxvYWQgPT0gTlVMTCkKKwl7CisJCWNvbnN0IFRhYmxlQW1Sb3V0aW5lICp0YW0gUEdf VVNFRF9GT1JfQVNTRVJUU19PTkxZID0gc2NhbmRlc2MtPnJzX3JkLT5yZF90YWJsZWFtOworCisJ CUFzc2VydCh0YW0gJiYgdGFtLT5zY2FuX2JlZ2luX2JhdGNoKTsKKwkJbm9kZS0+c3MucHMucHNf QmF0Y2gtPmFtX3BheWxvYWQgPQorCQkJdGFibGVfc2Nhbl9iZWdpbl9iYXRjaChzY2FuZGVzYywg bm9kZS0+c3MucHMucHNfQmF0Y2gtPm1heHNsb3RzKTsKKwkJbm9kZS0+c3MucHMucHNfQmF0Y2gt Pm9wcyA9IHRhYmxlX2JhdGNoX2NhbGxiYWNrcyhub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24p OworCX0KKworCW5vZGUtPnNzLnBzLnBzX0JhdGNoLT5udHVwbGVzID0KKwkJdGFibGVfc2Nhbl9n ZXRuZXh0YmF0Y2goc2NhbmRlc2MsIG5vZGUtPnNzLnBzLnBzX0JhdGNoLT5hbV9wYXlsb2FkLCBk aXJlY3Rpb24pOworCW5vZGUtPnNzLnBzLnBzX0JhdGNoLT5udmFsaWQgPSBub2RlLT5zcy5wcy5w c19CYXRjaC0+bnR1cGxlczsKKwlub2RlLT5zcy5wcy5wc19CYXRjaC0+bWF0ZXJpYWxpemVkID0g ZmFsc2U7CisKKwlyZXR1cm4gbm9kZS0+c3MucHMucHNfQmF0Y2gtPm50dXBsZXMgPiAwOworfQor CitzdGF0aWMgaW5saW5lIGJvb2wKK1NlcU5leHRCYXRjaE1hdGVyaWFsaXplKFNlcVNjYW5TdGF0 ZSAqbm9kZSkKK3sKKwlpZiAoU2VxTmV4dEJhdGNoKG5vZGUpKQorCXsKKwkJVHVwbGVCYXRjaE1h dGVyaWFsaXplQWxsKG5vZGUtPnNzLnBzLnBzX0JhdGNoKTsKKwkJcmV0dXJuIHRydWU7CisJfQor CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKgorRXhlY1NlcVNj YW5CYXRjaFNsb3QoUGxhblN0YXRlICpwc3RhdGUpCit7CisJU2VxU2NhblN0YXRlICpub2RlID0g Y2FzdE5vZGUoU2VxU2NhblN0YXRlLCBwc3RhdGUpOworCisJQXNzZXJ0KHBzdGF0ZS0+c3RhdGUt PmVzX2VwcV9hY3RpdmUgPT0gTlVMTCk7CisJQXNzZXJ0KHBzdGF0ZS0+cXVhbCA9PSBOVUxMKTsK KwlBc3NlcnQocHN0YXRlLT5wc19Qcm9qSW5mbyA9PSBOVUxMKTsKKworCXJldHVybiBFeGVjU2Nh bkV4dGVuZGVkQmF0Y2hTbG90KCZub2RlLT5zcywKKwkJCQkJCQkJCSAoRXhlY1NjYW5BY2Nlc3NC YXRjaE10ZCkgU2VxTmV4dEJhdGNoTWF0ZXJpYWxpemUsCisJCQkJCQkJCQkgTlVMTCwgTlVMTCk7 Cit9CisKK3N0YXRpYyBUdXBsZVRhYmxlU2xvdCAqCitFeGVjU2VxU2NhbkJhdGNoU2xvdFdpdGhR dWFsKFBsYW5TdGF0ZSAqcHN0YXRlKQoreworCVNlcVNjYW5TdGF0ZSAqbm9kZSA9IGNhc3ROb2Rl KFNlcVNjYW5TdGF0ZSwgcHN0YXRlKTsKKworCS8qCisJICogVXNlIHBnX2Fzc3VtZSgpIGZvciAh PSBOVUxMIHRlc3RzIHRvIG1ha2UgdGhlIGNvbXBpbGVyIHJlYWxpemUgbm8KKwkgKiBydW50aW1l IGNoZWNrIGZvciB0aGUgZmllbGQgaXMgbmVlZGVkIGluIEV4ZWNTY2FuRXh0ZW5kZWQoKS4KKwkg Ki8KKwlBc3NlcnQocHN0YXRlLT5zdGF0ZS0+ZXNfZXBxX2FjdGl2ZSA9PSBOVUxMKTsKKwlwZ19h c3N1bWUocHN0YXRlLT5xdWFsICE9IE5VTEwpOworCUFzc2VydChwc3RhdGUtPnBzX1Byb2pJbmZv ID09IE5VTEwpOworCisJcmV0dXJuIEV4ZWNTY2FuRXh0ZW5kZWRCYXRjaFNsb3QoJm5vZGUtPnNz LAorCQkJCQkJCQkJIChFeGVjU2NhbkFjY2Vzc0JhdGNoTXRkKSBTZXFOZXh0QmF0Y2hNYXRlcmlh bGl6ZSwKKwkJCQkJCQkJCSBwc3RhdGUtPnF1YWwsIE5VTEwpOworfQorCisvKgorICogVmFyaWFu dCBvZiBFeGVjU2VxU2NhbigpIGJ1dCB3aGVuIHByb2plY3Rpb24gaXMgcmVxdWlyZWQuCisgKi8K K3N0YXRpYyBUdXBsZVRhYmxlU2xvdCAqCitFeGVjU2VxU2NhbkJhdGNoU2xvdFdpdGhQcm9qZWN0 KFBsYW5TdGF0ZSAqcHN0YXRlKQoreworCVNlcVNjYW5TdGF0ZSAqbm9kZSA9IGNhc3ROb2RlKFNl cVNjYW5TdGF0ZSwgcHN0YXRlKTsKKworCUFzc2VydChwc3RhdGUtPnN0YXRlLT5lc19lcHFfYWN0 aXZlID09IE5VTEwpOworCUFzc2VydChwc3RhdGUtPnF1YWwgPT0gTlVMTCk7CisJcGdfYXNzdW1l KHBzdGF0ZS0+cHNfUHJvakluZm8gIT0gTlVMTCk7CisKKwlyZXR1cm4gRXhlY1NjYW5FeHRlbmRl ZEJhdGNoU2xvdCgmbm9kZS0+c3MsCisJCQkJCQkJCQkgKEV4ZWNTY2FuQWNjZXNzQmF0Y2hNdGQp IFNlcU5leHRCYXRjaE1hdGVyaWFsaXplLAorCQkJCQkJCQkJIE5VTEwsIHBzdGF0ZS0+cHNfUHJv akluZm8pOworfQorCisvKgorICogVmFyaWFudCBvZiBFeGVjU2VxU2NhbigpIGJ1dCB3aGVuIHF1 YWwgZXZhbHVhdGlvbiBhbmQgcHJvamVjdGlvbiBhcmUKKyAqIHJlcXVpcmVkLgorICovCitzdGF0 aWMgVHVwbGVUYWJsZVNsb3QgKgorRXhlY1NlcVNjYW5CYXRjaFNsb3RXaXRoUXVhbFByb2plY3Qo UGxhblN0YXRlICpwc3RhdGUpCit7CisJU2VxU2NhblN0YXRlICpub2RlID0gY2FzdE5vZGUoU2Vx U2NhblN0YXRlLCBwc3RhdGUpOworCisJQXNzZXJ0KHBzdGF0ZS0+c3RhdGUtPmVzX2VwcV9hY3Rp dmUgPT0gTlVMTCk7CisJcGdfYXNzdW1lKHBzdGF0ZS0+cXVhbCAhPSBOVUxMKTsKKwlwZ19hc3N1 bWUocHN0YXRlLT5wc19Qcm9qSW5mbyAhPSBOVUxMKTsKKworCXJldHVybiBFeGVjU2NhbkV4dGVu ZGVkQmF0Y2hTbG90KCZub2RlLT5zcywKKwkJCQkJCQkJCSAoRXhlY1NjYW5BY2Nlc3NCYXRjaE10 ZCkgU2VxTmV4dEJhdGNoTWF0ZXJpYWxpemUsCisJCQkJCQkJCQkgcHN0YXRlLT5xdWFsLCBwc3Rh dGUtPnBzX1Byb2pJbmZvKTsKK30KKworLyogQmF0Y2ggU2VxU2NhbiBlbmFibGVtZW50IGFuZCBk aXNwYXRjaCAqLworc3RhdGljIHZvaWQKK1NlcVNjYW5Jbml0QmF0Y2hpbmcoU2VxU2NhblN0YXRl ICpzY2Fuc3RhdGUsIGludCBlZmxhZ3MpCit7CisJY29uc3QgaW50IGNhcCA9IGV4ZWN1dG9yX2Jh dGNoX3Jvd3M7CisJVHVwbGVEZXNjCXNjYW5kZXNjID0gUmVsYXRpb25HZXREZXNjcihzY2Fuc3Rh dGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbik7CisKKwlzY2Fuc3RhdGUtPnNzLnBzLnBzX0JhdGNo ID0gVHVwbGVCYXRjaENyZWF0ZShzY2FuZGVzYywgY2FwKTsKKworCS8qIENob29zZSBiYXRjaCB2 YXJpYW50IHRvIHByZXNlcnZlIHlvdXIgc3BlY2lhbGl6YXRpb24gbWF0cml4ICovCisJaWYgKHNj YW5zdGF0ZS0+c3MucHMucXVhbCA9PSBOVUxMKQorCXsKKwkJaWYgKHNjYW5zdGF0ZS0+c3MucHMu cHNfUHJvakluZm8gPT0gTlVMTCkKKwkJeworCQkJc2NhbnN0YXRlLT5zcy5wcy5FeGVjUHJvY05v ZGUgPSBFeGVjU2VxU2NhbkJhdGNoU2xvdDsKKwkJfQorCQllbHNlCisJCXsKKwkJCXNjYW5zdGF0 ZS0+c3MucHMuRXhlY1Byb2NOb2RlID0gRXhlY1NlcVNjYW5CYXRjaFNsb3RXaXRoUHJvamVjdDsK KwkJfQorCX0KKwllbHNlCisJeworCQlpZiAoc2NhbnN0YXRlLT5zcy5wcy5wc19Qcm9qSW5mbyA9 PSBOVUxMKQorCQl7CisJCQlzY2Fuc3RhdGUtPnNzLnBzLkV4ZWNQcm9jTm9kZSA9IEV4ZWNTZXFT Y2FuQmF0Y2hTbG90V2l0aFF1YWw7CisJCX0KKwkJZWxzZQorCQl7CisJCQlzY2Fuc3RhdGUtPnNz LnBzLkV4ZWNQcm9jTm9kZSA9IEV4ZWNTZXFTY2FuQmF0Y2hTbG90V2l0aFF1YWxQcm9qZWN0Owor CQl9CisJfQorfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJRXhlY0luaXRTZXFTY2FuCiAgKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CkBAIC0yMTEsNiArMzc2LDcgQEAgU2VxU2NhblN0YXRlICoKIEV4ZWNJbml0U2VxU2NhbihTZXFT Y2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIHsKIAlTZXFTY2FuU3RhdGUg KnNjYW5zdGF0ZTsKKwlib29sCXVzZV9iYXRjaGluZzsKIAogCS8qCiAJICogT25jZSB1cG9uIGEg dGltZSBpdCB3YXMgcG9zc2libGUgdG8gaGF2ZSBhbiBvdXRlclBsYW4gb2YgYSBTZXFTY2FuLCBi dXQKQEAgLTI0MSw5ICs0MDcsMTIgQEAgRXhlY0luaXRTZXFTY2FuKFNlcVNjYW4gKm5vZGUsIEVT dGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkJCQkJCSBub2RlLT5zY2FuLnNjYW5yZWxpZCwK IAkJCQkJCQkgZWZsYWdzKTsKIAorCXVzZV9iYXRjaGluZyA9IFNjYW5DYW5Vc2VCYXRjaGluZygm c2NhbnN0YXRlLT5zcywgZWZsYWdzKTsKKwogCS8qIGFuZCBjcmVhdGUgc2xvdCB3aXRoIHRoZSBh cHByb3ByaWF0ZSByb3d0eXBlICovCiAJRXhlY0luaXRTY2FuVHVwbGVTbG90KGVzdGF0ZSwgJnNj YW5zdGF0ZS0+c3MsCiAJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3Ioc2NhbnN0YXRlLT5zcy5zc19j dXJyZW50UmVsYXRpb24pLAorCQkJCQkJICB1c2VfYmF0Y2hpbmcgPyAmVFRTT3BzSGVhcFR1cGxl IDoKIAkJCQkJCSAgdGFibGVfc2xvdF9jYWxsYmFja3Moc2NhbnN0YXRlLT5zcy5zc19jdXJyZW50 UmVsYXRpb24pKTsKIAogCS8qCkBAIC0yODAsNiArNDQ5LDkgQEAgRXhlY0luaXRTZXFTY2FuKFNl cVNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkJc2NhbnN0YXRlLT5z cy5wcy5FeGVjUHJvY05vZGUgPSBFeGVjU2VxU2NhbldpdGhRdWFsUHJvamVjdDsKIAl9CiAKKwlp ZiAodXNlX2JhdGNoaW5nKQorCQlTZXFTY2FuSW5pdEJhdGNoaW5nKHNjYW5zdGF0ZSwgZWZsYWdz KTsKKwogCXJldHVybiBzY2Fuc3RhdGU7CiB9CiAKQEAgLTI5OSw2ICs0NzEsOCBAQCBFeGVjRW5k U2VxU2NhbihTZXFTY2FuU3RhdGUgKm5vZGUpCiAJICovCiAJc2NhbkRlc2MgPSBub2RlLT5zcy5z c19jdXJyZW50U2NhbkRlc2M7CiAKKwlTY2FuUmVzZXRCYXRjaGluZygmbm9kZS0+c3MsIHRydWUp OworCiAJLyoKIAkgKiBjbG9zZSBoZWFwIHNjYW4KIAkgKi8KQEAgLTMyNyw3ICs1MDEsNyBAQCBF eGVjUmVTY2FuU2VxU2NhbihTZXFTY2FuU3RhdGUgKm5vZGUpCiAJaWYgKHNjYW4gIT0gTlVMTCkK IAkJdGFibGVfcmVzY2FuKHNjYW4sCQkvKiBzY2FuIGRlc2MgKi8KIAkJCQkJIE5VTEwpOwkJLyog bmV3IHNjYW4ga2V5cyAqLwotCisJU2NhblJlc2V0QmF0Y2hpbmcoJm5vZGUtPnNzLCBmYWxzZSk7 CiAJRXhlY1NjYW5SZVNjYW4oKFNjYW5TdGF0ZSAqKSBub2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0 L2dsb2JhbHMuYwppbmRleCBkMzFjYjQ1YTA1OC4uMjY2NTAyZTk3NzggMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2lu aXQvZ2xvYmFscy5jCkBAIC0xNjUsMyArMTY1LDYgQEAgaW50CQkJbm90aWZ5X2J1ZmZlcnMgPSAx NjsKIGludAkJCXNlcmlhbGl6YWJsZV9idWZmZXJzID0gMzI7CiBpbnQJCQlzdWJ0cmFuc2FjdGlv bl9idWZmZXJzID0gMDsKIGludAkJCXRyYW5zYWN0aW9uX2J1ZmZlcnMgPSAwOworCisvKiBleGVj dXRvciBiYXRjaGluZyAqLworaW50CQkJZXhlY3V0b3JfYmF0Y2hfcm93cyA9IDY0OwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgYi9zcmMvYmFj a2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAppbmRleCAzYjlkODM0OTA3OC4uZmQ5 N2QyNmMwNzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRl cnMuZGF0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CkBA IC0xMDAxLDYgKzEwMDEsMTUgQEAKICAgYm9vdF92YWwgPT4gJ3RydWUnLAogfSwKIAoreyBuYW1l ID0+ICdleGVjdXRvcl9iYXRjaF9yb3dzJywgdHlwZSA9PiAnaW50JywgY29udGV4dCA9PiAnUEdD X1VTRVJTRVQnLCBncm91cCA9PiAnREVWRUxPUEVSX09QVElPTlMnLAorICBzaG9ydF9kZXNjID0+ ICdOdW1iZXIgb2Ygcm93cyB0byBpbmNsdWRlIGluIGJhdGNoZXMgZHVyaW5nIGV4ZWN1dGlvbi4n LAorICBmbGFncyA9PiAnR1VDX05PVF9JTl9TQU1QTEUnLAorICB2YXJpYWJsZSA9PiAnZXhlY3V0 b3JfYmF0Y2hfcm93cycsCisgIGJvb3RfdmFsID0+ICc2NCcsCisgIG1pbiA9PiAnMCcsCisgIG1h eCA9PiAnMTAyNCcsCit9LAorCiB7IG5hbWUgPT4gJ2V4aXRfb25fZXJyb3InLCB0eXBlID0+ICdi b29sJywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnRVJST1JfSEFORExJTkdf T1BUSU9OUycsCiAgIHNob3J0X2Rlc2MgPT4gJ1Rlcm1pbmF0ZSBzZXNzaW9uIG9uIGFueSBlcnJv ci4nLAogICB2YXJpYWJsZSA9PiAnRXhpdE9uQW55RXJyb3InLApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4 IGY2Njc1MDQzZmIzLi5mZTA3YjIxZWFhMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L2hlYXBhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMzU0LDYgKzM1 NCw3IEBAIGV4dGVybiBib29sIGhlYXBfZ2V0bmV4dHNsb3QoVGFibGVTY2FuRGVzYyBzc2NhbiwK IGV4dGVybiB2b2lkICpoZWFwX2JlZ2luX2JhdGNoKFRhYmxlU2NhbkRlc2Mgc3NjYW4sIGludCBt YXhpdGVtcyk7CiBleHRlcm4gdm9pZCBoZWFwX2VuZF9iYXRjaChUYWJsZVNjYW5EZXNjIHNzY2Fu LCB2b2lkICphbV9iYXRjaCk7CiBleHRlcm4gaW50IGhlYXBfZ2V0bmV4dGJhdGNoKFRhYmxlU2Nh bkRlc2Mgc3NjYW4sIHZvaWQgKmFtX2JhdGNoLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4g dm9pZCBoZWFwX21hdGVyaWFsaXplX2JhdGNoX2FsbCh2b2lkICphbV9iYXRjaCwgVHVwbGVUYWJs ZVNsb3QgKipzbG90cywgaW50IG4pOwogCiBleHRlcm4gdm9pZCBoZWFwX3NldF90aWRyYW5nZShU YWJsZVNjYW5EZXNjIHNzY2FuLCBJdGVtUG9pbnRlciBtaW50aWQsCiAJCQkJCQkJICBJdGVtUG9p bnRlciBtYXh0aWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCBi L3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKaW5kZXggM2VjM2MzZGQwMDguLjEzYTk1Zjdh NTg5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3NyYy9p bmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJhY2Nl c3Mvc2Rpci5oIgogI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMv dmFjdXVtLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY0JhdGNoLmgiCiAjaW5jbHVkZSAiZXhl Y3V0b3IvdHVwdGFibGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL3JlYWRfc3RyZWFtLmgiCiAjaW5j bHVkZSAidXRpbHMvcmVsLmgiCkBAIC0zOSw2ICs0MCw3IEBAIHR5cGVkZWYgc3RydWN0IEJ1bGtJ bnNlcnRTdGF0ZURhdGEgQnVsa0luc2VydFN0YXRlRGF0YTsKIHR5cGVkZWYgc3RydWN0IEluZGV4 SW5mbyBJbmRleEluZm87CiB0eXBlZGVmIHN0cnVjdCBTYW1wbGVTY2FuU3RhdGUgU2FtcGxlU2Nh blN0YXRlOwogdHlwZWRlZiBzdHJ1Y3QgVmFsaWRhdGVJbmRleFN0YXRlIFZhbGlkYXRlSW5kZXhT dGF0ZTsKK3R5cGVkZWYgc3RydWN0IFR1cGxlQmF0Y2hPcHMgVHVwbGVCYXRjaE9wczsKIAogLyoK ICAqIEJpdG1hc2sgdmFsdWVzIGZvciB0aGUgZmxhZ3MgYXJndW1lbnQgdG8gdGhlIHNjYW5fYmVn aW4gY2FsbGJhY2suCkBAIC0zMDEsNiArMzAzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJv dXRpbmUKIAkgKiBSZXR1cm4gc2xvdCBpbXBsZW1lbnRhdGlvbiBzdWl0YWJsZSBmb3Igc3Rvcmlu ZyBhIHR1cGxlIG9mIHRoaXMgQU0uCiAJICovCiAJY29uc3QgVHVwbGVUYWJsZVNsb3RPcHMgKigq c2xvdF9jYWxsYmFja3MpIChSZWxhdGlvbiByZWwpOworCWNvbnN0IFR1cGxlQmF0Y2hPcHMgKigq YmF0Y2hfY2FsbGJhY2tzKShSZWxhdGlvbiByZWwpOwogCiAKIAkvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K QEAgLTM2MSw2ICszNjQsNyBAQCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogCQkJCQkJ CQkJIFNjYW5EaXJlY3Rpb24gZGlyKTsKIAl2b2lkCQkoKnNjYW5fZW5kX2JhdGNoKShUYWJsZVNj YW5EZXNjIHNzY2FuLCB2b2lkICphbV9iYXRjaCk7CiAKKwogCS8qLS0tLS0tLS0tLS0KIAkgKiBP cHRpb25hbCBmdW5jdGlvbnMgdG8gcHJvdmlkZSBzY2FubmluZyBmb3IgcmFuZ2VzIG9mIEl0ZW1Q b2ludGVycy4KIAkgKiBJbXBsZW1lbnRhdGlvbnMgbXVzdCBlaXRoZXIgcHJvdmlkZSBib3RoIG9m IHRoZXNlIGZ1bmN0aW9ucywgb3IgbmVpdGhlcgpAQCAtODcyLDYgKzg3NiwxNiBAQCBleHRlcm4g Y29uc3QgVHVwbGVUYWJsZVNsb3RPcHMgKnRhYmxlX3Nsb3RfY2FsbGJhY2tzKFJlbGF0aW9uIHJl bGF0aW9uKTsKICAqLwogZXh0ZXJuIFR1cGxlVGFibGVTbG90ICp0YWJsZV9zbG90X2NyZWF0ZShS ZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqKnJlZ2xpc3QpOwogCisvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKiBUdXBsZUJhdGNoIGZ1bmN0aW9ucy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq LworCisvKgorICogUmV0dXJucyBjYWxsYmFja3MgZm9yIG1hbmlwdWxhdGluZyBUdXBsZUJhdGNo IGZvciB0dXBsZXMgb2YgdGhlIGdpdmVuCisgKiByZWxhdGlvbi4KKyAqLworZXh0ZXJuIGNvbnN0 IFR1cGxlQmF0Y2hPcHMgKnRhYmxlX2JhdGNoX2NhbGxiYWNrcyhSZWxhdGlvbiByZWxhdGlvbik7 CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFRhYmxlIHNjYW4gZnVuY3Rpb25zLgpAQCAt MTA0Niw2ICsxMDYwLDE4IEBAIHRhYmxlX3NjYW5fZ2V0bmV4dHNsb3QoVGFibGVTY2FuRGVzYyBz c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFR1cGxlVGFibGVTCiAJcmV0dXJuIHNzY2Fu LT5yc19yZC0+cmRfdGFibGVhbS0+c2Nhbl9nZXRuZXh0c2xvdChzc2NhbiwgZGlyZWN0aW9uLCBz bG90KTsKIH0KIAorLyoKKyAqIHRhYmxlX3N1cHBvcnRzX2JhdGNoaW5nCisgKgkJRG9lcyB0aGUg cmVsYXRpb24ncyBBTSBzdXBwb3J0IGJhdGNoaW5nPworICovCitzdGF0aWMgaW5saW5lIGJvb2wK K3RhYmxlX3N1cHBvcnRzX2JhdGNoaW5nKFJlbGF0aW9uIHJlbGF0aW9uKQoreworCWNvbnN0IFRh YmxlQW1Sb3V0aW5lICp0YW0gPSByZWxhdGlvbi0+cmRfdGFibGVhbTsKKworCXJldHVybiB0YW0t PnNjYW5fZ2V0bmV4dGJhdGNoICE9IE5VTEw7Cit9CisKIC8qCiAgKiB0YWJsZV9zY2FuX2JlZ2lu X2JhdGNoCiAgKgkJQWxsb2NhdGUgQU0tb3duZWQgYmF0Y2ggcGF5bG9hZCB3aXRoIGNhcGFjaXR5 ICdtYXhpdGVtcycuCkBAIC0yMTI4LDUgKzIxNTQsNiBAQCBleHRlcm4gY29uc3QgVGFibGVBbVJv dXRpbmUgKkdldFRhYmxlQW1Sb3V0aW5lKE9pZCBhbWhhbmRsZXIpOwogICovCiAKIGV4dGVybiBj b25zdCBUYWJsZUFtUm91dGluZSAqR2V0SGVhcGFtVGFibGVBbVJvdXRpbmUodm9pZCk7CitleHRl cm4gc3RydWN0IFR1cGxlQmF0Y2hPcHMgKkdldEhlYXBhbVR1cGxlQmF0Y2hPcHModm9pZCk7CiAK ICNlbmRpZgkJCQkJCQkvKiBUQUJMRUFNX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4 ZWN1dG9yL2V4ZWNCYXRjaC5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0JhdGNoLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjJkMDA2NjEwM2NlCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0JhdGNoLmgKQEAgLTAsMCArMSw5 OSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXhlY0JhdGNoLmgKKyAqCQlFeGVjdXRv ciBiYXRjaCBlbnZlbG9wZSBmb3IgcGFzc2luZyB0dXBsZSBiYXRjaCBzdGF0ZSB1cHdhcmQKKyAq CisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50 cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04K KyAqCSAgc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0JhdGNoLmgKKyAqLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisjaWZuZGVmIEVYRUNCQVRDSF9ICisjZGVmaW5lIEVYRUNCQVRDSF9ICisKKyNpbmNs dWRlICJleGVjdXRvci90dXB0YWJsZS5oIgorCisvKgorICogVHVwbGVCYXRjaE9wcyAtLSBBTS1z cGVjaWZpYyBoZWxwZXJzIGZvciBsYXp5IG1hdGVyaWFsaXphdGlvbi4KKyAqLwordHlwZWRlZiBz dHJ1Y3QgVHVwbGVCYXRjaE9wcworeworCXZvaWQgKCptYXRlcmlhbGl6ZV9hbGwpKHZvaWQgKmFt X3BheWxvYWQsCisJCQkJCQkJVHVwbGVUYWJsZVNsb3QgKipkc3QsCisJCQkJCQkJaW50IG1heHNs b3RzKTsKK30gVHVwbGVCYXRjaE9wczsKKworLyoKKyAqIFR1cGxlQmF0Y2gKKyAqCisgKiBFbnZl bG9wZSBmb3IgYSBiYXRjaCBvZiB0dXBsZXMgcHJvZHVjZWQgYnkgYSBwbGFuIG5vZGUgKGUuZy4s IFNlcVNjYW4pIHBlcgorICogY2FsbCB0byBhIGJhdGNoIHZhcmlhbnQgb2YgRXhlY1NlcVNjYW4o KS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgVHVwbGVCYXRjaAoreworCXZvaWQJICAgKmFtX3BheWxv YWQ7CisJY29uc3QgVHVwbGVCYXRjaE9wcyAqb3BzOworCWludAkJCW50dXBsZXM7CQkJCS8qIG51 bWJlciBvZiB0dXBsZXMgaW4gYW1fcGF5bG9hZCAqLworCWJvb2wJCW1hdGVyaWFsaXplZDsJCSAv KiB0dXBsZXMgaW4gc2xvdHMgdmFsaWQ/ICovCisJc3RydWN0IFR1cGxlVGFibGVTbG90ICoqaW5z bG90czsgLyogc2xvdHMgZm9yIHR1cGxlcyByZWFkICJpbnRvIiBiYXRjaCAqLworCXN0cnVjdCBU dXBsZVRhYmxlU2xvdCAqKm91dHNsb3RzOyAvKiBzbG90cyBmb3IgdHVwbGVzIGdvaW5nICJvdXQg b2YiCisJCQkJCQkJCQkgICAqIGJhdGNoICovCisJc3RydWN0IFR1cGxlVGFibGVTbG90ICoqYWN0 aXZlc2xvdHM7CisJaW50CQkJbWF4c2xvdHM7CisKKwlpbnQJCW52YWxpZDsJCS8qIG51bWJlciBv ZiByZXR1cm5hYmxlIHR1cGxlcyBpbiBvdXRzbG90cyAqLworCWludAkJbmV4dDsJCS8qIDAtYmFz ZWQgaW5kZXggb2YgbmV4dCB0dXBsZSB0byBiZSByZXR1cm5lZCAqLworfSBUdXBsZUJhdGNoOwor CisKKy8qIEhlbHBlcnMgKi8KK2V4dGVybiBUdXBsZUJhdGNoICpUdXBsZUJhdGNoQ3JlYXRlKFR1 cGxlRGVzYyBzY2FuZGVzYywgaW50IGNhcGFjaXR5KTsKK2V4dGVybiB2b2lkIFR1cGxlQmF0Y2hS ZXNldChUdXBsZUJhdGNoICpiLCBib29sIGRyb3Bfc2xvdHMpOworZXh0ZXJuIHZvaWQgVHVwbGVC YXRjaFVzZUlucHV0KFR1cGxlQmF0Y2ggKmIsIGludCBudmFsaWQpOworZXh0ZXJuIHZvaWQgVHVw bGVCYXRjaFVzZU91dHB1dChUdXBsZUJhdGNoICpiLCBpbnQgbnZhbGlkKTsKK2V4dGVybiBib29s IFR1cGxlQmF0Y2hJc1ZhbGlkKFR1cGxlQmF0Y2ggKmIpOworZXh0ZXJuIHZvaWQgVHVwbGVCYXRj aFJld2luZChUdXBsZUJhdGNoICpiKTsKK2V4dGVybiBpbnQgVHVwbGVCYXRjaEdldE51bVZhbGlk KFR1cGxlQmF0Y2ggKmIpOworCitzdGF0aWMgaW5saW5lIFR1cGxlVGFibGVTbG90ICoKK1R1cGxl QmF0Y2hHZXROZXh0U2xvdChUdXBsZUJhdGNoICpiKQoreworCXJldHVybiBiLT5uZXh0IDwgYi0+ bnZhbGlkID8gYi0+YWN0aXZlc2xvdHNbYi0+bmV4dCsrXSA6IE5VTEw7Cit9CisKK3N0YXRpYyBp bmxpbmUgVHVwbGVUYWJsZVNsb3QgKgorVHVwbGVCYXRjaEdldFNsb3QoVHVwbGVCYXRjaCAqYiwg aW50IGluZGV4KQoreworCUFzc2VydChpbmRleCA8IGItPm52YWxpZCk7CisJcmV0dXJuIGItPmFj dGl2ZXNsb3RzW2luZGV4XTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitUdXBsZUJhdGNoU3Rv cmVJbk91dChUdXBsZUJhdGNoICpiLCBpbnQgaW5kZXgsIFR1cGxlVGFibGVTbG90ICpvdXQpCit7 CisJQXNzZXJ0KFR1cGxlQmF0Y2hJc1ZhbGlkKGIpKTsKKwliLT5vdXRzbG90c1tpbmRleF0gPSBv dXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorVHVwbGVCYXRjaEhhc01vcmUoVHVwbGVCYXRj aCAqYikKK3sKKwlyZXR1cm4gYi0+YWN0aXZlc2xvdHMgJiYgYi0+bmV4dCA8IGItPm52YWxpZDsK K30KKworc3RhdGljIGlubGluZSB2b2lkCitUdXBsZUJhdGNoTWF0ZXJpYWxpemVBbGwoVHVwbGVC YXRjaCAqYikKK3sKKwlpZiAoYi0+bWF0ZXJpYWxpemVkKQorCQlyZXR1cm47CisKKwlpZiAoYi0+ b3BzID09IE5VTEwgfHwgYi0+b3BzLT5tYXRlcmlhbGl6ZV9hbGwgPT0gTlVMTCkKKwkJZWxvZyhF UlJPUiwgIlR1cGxlQmF0Y2ggaGFzIG5vIHNsb3RzIGFuZCBubyBtYXRlcmlhbGl6ZV9hbGwgb3Ai KTsKKworCWItPm9wcy0+bWF0ZXJpYWxpemVfYWxsKGItPmFtX3BheWxvYWQsIGItPmluc2xvdHMs IGItPm50dXBsZXMpOworCVR1cGxlQmF0Y2hVc2VJbnB1dChiLCBiLT5udHVwbGVzKTsKK30KKwor I2VuZGlmCS8qIEVYRUNCQVRDSF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRv ci9leGVjU2Nhbi5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1NjYW4uaAppbmRleCAyMDAz Y2JjN2VkNS4uYzFhZGQ4Y2EzMzEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4 ZWNTY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1NjYW4uaApAQCAtMjUxLDQg KzI1MSw3MyBAQCBFeGVjU2NhbkV4dGVuZGVkKFNjYW5TdGF0ZSAqbm9kZSwKIAl9CiB9CiAKKy8q CisgKiBFeGVjU2NhbkV4dGVuZGVkQmF0Y2hTbG90CisgKgkJQmF0Y2gtZHJpdmVuIHZhcmlhbnQg b2YgRXhlY1NjYW5FeHRlbmRlZC4KKyAqCisgKiBSZXR1cm5zIG9uZSB0dXBsZSBhdCBhIHRpbWUg dG8gY2FsbGVycywgYnV0IGludGVybmFsbHkgZmV0Y2hlcyB0dXBsZXMKKyAqIGluIGJhdGNoZXMg ZnJvbSB0aGUgQU0gdmlhIGFjY2Vzc0JhdGNoTXRkLiBUaGlzIHJlZHVjZXMgcGVyLXR1cGxlIEFN CisgKiBjYWxsIG92ZXJoZWFkIHdoaWxlIHByZXNlcnZpbmcgdGhlIHNpbmdsZS1zbG90IGludGVy ZmFjZSBleHBlY3RlZCBieQorICogcGFyZW50IG5vZGVzLgorICoKKyAqIFRoZSBiYXRjaCBpcyBy ZWZpbGxlZCB3aGVuIGV4aGF1c3RlZCBieSBjYWxsaW5nIGFjY2Vzc0JhdGNoTXRkLCB3aGljaAor ICogcmV0dXJucyBmYWxzZSBhdCBlbmQtb2Ytc2Nhbi4KKyAqCisgKiBOb3RlOiBFUFEgaXMgbm90 IHN1cHBvcnRlZCBpbiB0aGUgYmF0Y2ggcGF0aDsgY2FsbGVycyBtdXN0IGVuc3VyZQorICogZXNf ZXBxX2FjdGl2ZSBpcyBOVUxMIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICovCitzdGF0 aWMgaW5saW5lIFR1cGxlVGFibGVTbG90ICoKK0V4ZWNTY2FuRXh0ZW5kZWRCYXRjaFNsb3QoU2Nh blN0YXRlICpub2RlLAorCQkJCQkJICBFeGVjU2NhbkFjY2Vzc0JhdGNoTXRkIGFjY2Vzc0JhdGNo TXRkLAorCQkJCQkJICBFeHByU3RhdGUgKnF1YWwsIFByb2plY3Rpb25JbmZvICpwcm9qSW5mbykK K3sKKwlFeHByQ29udGV4dCAqZWNvbnRleHQgPSBub2RlLT5wcy5wc19FeHByQ29udGV4dDsKKwlU dXBsZUJhdGNoICpiID0gbm9kZS0+cHMucHNfQmF0Y2g7CisKKwkvKiBCYXRjaCBwYXRoIGRvZXMg bm90IHN1cHBvcnQgRVBRICovCisJQXNzZXJ0KG5vZGUtPnBzLnN0YXRlLT5lc19lcHFfYWN0aXZl ID09IE5VTEwpOworCUFzc2VydChUdXBsZUJhdGNoSXNWYWxpZChiKSk7CisKKwlmb3IgKDs7KQor CXsKKwkJVHVwbGVUYWJsZVNsb3QgKmluOworCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisK KwkJLyogR2V0IG5leHQgaW5wdXQgc2xvdCBmcm9tIGN1cnJlbnQgYmF0Y2gsIG9yIHJlZmlsbCAq LworCQlpZiAoIVR1cGxlQmF0Y2hIYXNNb3JlKGIpKQorCQl7CisJCQlpZiAoIWFjY2Vzc0JhdGNo TXRkKG5vZGUpKQorCQkJCXJldHVybiBOVUxMOworCQl9CisKKwkJaW4gPSBUdXBsZUJhdGNoR2V0 TmV4dFNsb3QoYik7CisJCUFzc2VydChpbik7CisKKwkJLyogTm8gcXVhbCwgbm8gcHJvamVjdGlv bjogZGlyZWN0IHJldHVybiAqLworCQlpZiAocXVhbCA9PSBOVUxMICYmIHByb2pJbmZvID09IE5V TEwpCisJCQlyZXR1cm4gaW47CisKKwkJUmVzZXRFeHByQ29udGV4dChlY29udGV4dCk7CisJCWVj b250ZXh0LT5lY3h0X3NjYW50dXBsZSA9IGluOworCisJCS8qIFF1YWwgb25seSAqLworCQlpZiAo cHJvakluZm8gPT0gTlVMTCkKKwkJeworCQkJaWYgKHF1YWwgPT0gTlVMTCB8fCBFeGVjUXVhbChx dWFsLCBlY29udGV4dCkpCisJCQkJcmV0dXJuIGluOworCQkJZWxzZQorCQkJCUluc3RyQ291bnRG aWx0ZXJlZDEobm9kZSwgMSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFByb2plY3Rpb24g KHdpdGggb3Igd2l0aG91dCBxdWFsKSAqLworCQlpZiAocXVhbCA9PSBOVUxMIHx8IEV4ZWNRdWFs KHF1YWwsIGVjb250ZXh0KSkKKwkJCXJldHVybiBFeGVjUHJvamVjdChwcm9qSW5mbyk7CisJCWVs c2UKKwkJCUluc3RyQ291bnRGaWx0ZXJlZDEobm9kZSwgMSk7CisJCS8qIGVsc2UgdHJ5IG5leHQg dHVwbGUgKi8KKwl9Cit9CisKICNlbmRpZgkJCQkJCQkvKiBFWEVDU0NBTl9IICovCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0 b3IvZXhlY3V0b3IuaAppbmRleCA3Y2Q2YTQ5MzA5Zi4uYzFmMDVjZTYyNzMgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0 b3IvZXhlY3V0b3IuaApAQCAtNTc4LDEyICs1NzgsMTYgQEAgZXh0ZXJuIERhdHVtIEV4ZWNNYWtl RnVuY3Rpb25SZXN1bHRTZXQoU2V0RXhwclN0YXRlICpmY2FjaGUsCiAgKi8KIHR5cGVkZWYgVHVw bGVUYWJsZVNsb3QgKigqRXhlY1NjYW5BY2Nlc3NNdGQpIChTY2FuU3RhdGUgKm5vZGUpOwogdHlw ZWRlZiBib29sICgqRXhlY1NjYW5SZWNoZWNrTXRkKSAoU2NhblN0YXRlICpub2RlLCBUdXBsZVRh YmxlU2xvdCAqc2xvdCk7Cit0eXBlZGVmIGJvb2wgKCpFeGVjU2NhbkFjY2Vzc0JhdGNoTXRkKShT Y2FuU3RhdGUgKm5vZGUpOwogCiBleHRlcm4gVHVwbGVUYWJsZVNsb3QgKkV4ZWNTY2FuKFNjYW5T dGF0ZSAqbm9kZSwgRXhlY1NjYW5BY2Nlc3NNdGQgYWNjZXNzTXRkLAogCQkJCQkJCQlFeGVjU2Nh blJlY2hlY2tNdGQgcmVjaGVja010ZCk7CisKIGV4dGVybiB2b2lkIEV4ZWNBc3NpZ25TY2FuUHJv amVjdGlvbkluZm8oU2NhblN0YXRlICpub2RlKTsKIGV4dGVybiB2b2lkIEV4ZWNBc3NpZ25TY2Fu UHJvamVjdGlvbkluZm9XaXRoVmFybm8oU2NhblN0YXRlICpub2RlLCBpbnQgdmFybm8pOwogZXh0 ZXJuIHZvaWQgRXhlY1NjYW5SZVNjYW4oU2NhblN0YXRlICpub2RlKTsKK2V4dGVybiBib29sIFNj YW5DYW5Vc2VCYXRjaGluZyhTY2FuU3RhdGUgKnNjYW5zdGF0ZSwgaW50IGVmbGFncyk7CitleHRl cm4gdm9pZCBTY2FuUmVzZXRCYXRjaGluZyhTY2FuU3RhdGUgKnNjYW5zdGF0ZSwgYm9vbCBkcm9w KTsKIAogLyoKICAqIHByb3RvdHlwZXMgZnJvbSBmdW5jdGlvbnMgaW4gZXhlY1R1cGxlcy5jCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaCBiL3NyYy9pbmNsdWRlL21pc2NhZG1p bi5oCmluZGV4IDlhN2Q3MzNkZGVmLi4xMzI4NTIxMDk5OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvbWlzY2FkbWluLmgKKysrIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKQEAgLTI4OCw2ICsy ODgsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgZG91YmxlIFZhY3V1bUNvc3REZWxheTsKIGV4dGVy biBQR0RMTElNUE9SVCBpbnQgVmFjdXVtQ29zdEJhbGFuY2U7CiBleHRlcm4gUEdETExJTVBPUlQg Ym9vbCBWYWN1dW1Db3N0QWN0aXZlOwogCitleHRlcm4gUEdETExJTVBPUlQgaW50IGV4ZWN1dG9y X2JhdGNoX3Jvd3M7CiAKIC8qIGluIHV0aWxzL21pc2Mvc3RhY2tfZGVwdGguYyAqLwogCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVz L2V4ZWNub2Rlcy5oCmluZGV4IDM5Njg0MjlmOTkxLi4yMTlhNzIyYzQ5YSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhl Y25vZGVzLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgRVhFQ05PREVTX0gKIAogI2luY2x1 ZGUgImFjY2Vzcy90dXBjb252ZXJ0LmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY0JhdGNoLmgi CiAjaW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVudC5oIgogI2luY2x1ZGUgImZtZ3IuaCIKICNp bmNsdWRlICJsaWIvaWxpc3QuaCIKQEAgLTEyMDQsNiArMTIwNSw5IEBAIHR5cGVkZWYgc3RydWN0 IFBsYW5TdGF0ZQogCUV4cHJDb250ZXh0ICpwc19FeHByQ29udGV4dDsJLyogbm9kZSdzIGV4cHJl c3Npb24tZXZhbHVhdGlvbiBjb250ZXh0ICovCiAJUHJvamVjdGlvbkluZm8gKnBzX1Byb2pJbmZv OwkvKiBpbmZvIGZvciBkb2luZyB0dXBsZSBwcm9qZWN0aW9uICovCiAKKwkvKiBCYXRjaGluZyBz dGF0ZSBpZiBub2RlIHN1cHBvcnRzIGl0LiAqLworCVR1cGxlQmF0Y2ggKnBzX0JhdGNoOworCiAJ Ym9vbAkJYXN5bmNfY2FwYWJsZTsJLyogdHJ1ZSBpZiBub2RlIGlzIGFzeW5jLWNhcGFibGUgKi8K IAogCS8qCi0tIAoyLjQ3LjMKCg== --0000000000003b0851064662c896 Content-Type: application/octet-stream; name="v4-0003-Add-EXPLAIN-BATCHES-option-for-tuple-batching-sta.patch" Content-Disposition: attachment; filename="v4-0003-Add-EXPLAIN-BATCHES-option-for-tuple-batching-sta.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mjedmgg25 RnJvbSAxODllZGFiNTA3ZDQwN2NjZTY0NDZhOTQ0YjNhNDhjMzI3MTY3ZWMzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFNhdCwgMjAgRGVjIDIwMjUgMjM6MDk6MzcgKzA5MDAKU3ViamVjdDogW1BBVENIIHY0 IDMvM10gQWRkIEVYUExBSU4gKEJBVENIRVMpIG9wdGlvbiBmb3IgdHVwbGUgYmF0Y2hpbmcKIHN0 YXRpc3RpY3MKCkFkZCBhIEJBVENIRVMgb3B0aW9uIHRvIEVYUExBSU4gdGhhdCByZXBvcnRzIHBl ci1ub2RlIGJhdGNoIHN0YXRpc3RpY3MKd2hlbiBhIG5vZGUgdXNlcyBiYXRjaCBtb2RlIGV4ZWN1 dGlvbi4KCkZvciBub2RlcyB0aGF0IHN1cHBvcnQgYmF0Y2hpbmcgKGN1cnJlbnRseSBTZXFTY2Fu KSwgdGhpcyBzaG93cyB0aGUKbnVtYmVyIG9mIGJhdGNoZXMgZmV0Y2hlZCBhbG9uZyB3aXRoIGF2 ZXJhZ2UsIG1pbmltdW0sIGFuZCBtYXhpbXVtCnJvd3MgcGVyIGJhdGNoLiBPdXRwdXQgaXMgc3Vw cG9ydGVkIGluIGJvdGggdGV4dCBhbmQgbm9uLXRleHQgZm9ybWF0cy4KCkFkZCByZWdyZXNzaW9u IHRlc3RzIGNvdmVyaW5nIHRleHQgb3V0cHV0LCBKU09OIGZvcm1hdCwgZmlsdGVyZWQgc2NhbnMs CkxJTUlULCBhbmQgZGlzYWJsZWQgYmF0Y2hpbmcuCgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rn ci5lcy9tL0NBK0hpd3FGZkFZX1pGcU44d2NBRU13NzFUOWhNX2tBOFV0eUhhWlpFWnR1VDNVeW9n QUBtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAg ICAgfCAzMCArKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbl9zdGF0 ZS5jICB8ICAyICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNCYXRjaC5jICAgICAgfCAgOCAr KystCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2Vxc2Nhbi5jICAgIHwgMjQgKysrKystLS0t LS0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW5fc3RhdGUuaCAgfCAgMSArCiBzcmMvaW5j bHVkZS9leGVjdXRvci9leGVjQmF0Y2guaCAgICAgIHwgMzUgKysrKysrKysrKysrKysrLQogc3Jj L2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudC5oICAgICB8ICAxICsKIHNyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvZXhwbGFpbi5vdXQgfCA1NyArKysrKysrKysrKysrKysrKysrKysrKysrKysK IHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2V4cGxhaW4uc3FsICAgICAgfCAyNiArKysrKysrKysrKysK IDkgZmlsZXMgY2hhbmdlZCwgMTcxIGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4cGxhaW4uYwppbmRleCA1YTYzOTA2MzFlYi4uM2E2MzlhMTM4MDcgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9leHBsYWluLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJjb21tYW5kcy9leHBs YWluX2Zvcm1hdC5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2V4cGxhaW5fc3RhdGUuaCIKICNpbmNs dWRlICJjb21tYW5kcy9wcmVwYXJlLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY0JhdGNoLmgi CiAjaW5jbHVkZSAiZm9yZWlnbi9mZHdhcGkuaCIKICNpbmNsdWRlICJqaXQvaml0LmgiCiAjaW5j bHVkZSAibGlicHEvcHFmb3JtYXQuaCIKQEAgLTUxNyw2ICs1MTgsOCBAQCBFeHBsYWluT25lUGxh bihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0 ZSAqZXMsCiAJCWluc3RydW1lbnRfb3B0aW9uIHw9IElOU1RSVU1FTlRfQlVGRkVSUzsKIAlpZiAo ZXMtPndhbCkKIAkJaW5zdHJ1bWVudF9vcHRpb24gfD0gSU5TVFJVTUVOVF9XQUw7CisJaWYgKGVz LT5iYXRjaGVzKQorCQlpbnN0cnVtZW50X29wdGlvbiB8PSBJTlNUUlVNRU5UX0JBVENIRVM7CiAK IAkvKgogCSAqIFdlIGFsd2F5cyBjb2xsZWN0IHRpbWluZyBmb3IgdGhlIGVudGlyZSBzdGF0ZW1l bnQsIGV2ZW4gd2hlbiBub2RlLWxldmVsCkBAIC0yMjkyLDYgKzIyOTUsMzMgQEAgRXhwbGFpbk5v ZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJc2hvd19idWZmZXJf dXNhZ2UoZXMsICZwbGFuc3RhdGUtPmluc3RydW1lbnQtPmJ1ZnVzYWdlKTsKIAlpZiAoZXMtPndh bCAmJiBwbGFuc3RhdGUtPmluc3RydW1lbnQpCiAJCXNob3dfd2FsX3VzYWdlKGVzLCAmcGxhbnN0 YXRlLT5pbnN0cnVtZW50LT53YWx1c2FnZSk7CisJaWYgKGVzLT5iYXRjaGVzICYmIHBsYW5zdGF0 ZS0+cHNfQmF0Y2gpCisJeworCQlUdXBsZUJhdGNoICpiID0gcGxhbnN0YXRlLT5wc19CYXRjaDsK KworCQlpZiAoYi0+c3RhdF9iYXRjaGVzID4gMCkKKwkJeworCQkJaWYgKGVzLT5mb3JtYXQgPT0g RVhQTEFJTl9GT1JNQVRfVEVYVCkKKwkJCXsKKwkJCQlFeHBsYWluSW5kZW50VGV4dChlcyk7CisJ CQkJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3RyLAorCQkJCQkJCQkgIkJhdGNoZXM6ICVsbGQgIEF2 ZyBSb3dzOiAlLjFmICBNYXg6ICVkICBNaW46ICVkXG4iLAorCQkJCQkJCQkgKGxvbmcgbG9uZykg Yi0+c3RhdF9iYXRjaGVzLAorCQkJCQkJCQkgVHVwbGVCYXRjaEF2Z1Jvd3MoYiksCisJCQkJCQkJ CSBiLT5zdGF0X21heF9yb3dzLAorCQkJCQkJCQkgYi0+c3RhdF9taW5fcm93cyA9PSBJTlRfTUFY ID8gMCA6IGItPnN0YXRfbWluX3Jvd3MpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCUV4cGxh aW5Qcm9wZXJ0eUludGVnZXIoIkJhdGNoZXMiLCBOVUxMLCBiLT5zdGF0X2JhdGNoZXMsIGVzKTsK KwkJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgiQXZlcmFnZSBCYXRjaCBSb3dzIiwgTlVMTCwKKwkJ CQkJCQkJCSBUdXBsZUJhdGNoQXZnUm93cyhiKSwgMSwgZXMpOworCQkJCUV4cGxhaW5Qcm9wZXJ0 eUludGVnZXIoIk1heCBCYXRjaCBSb3dzIiwgTlVMTCwgYi0+c3RhdF9tYXhfcm93cywgZXMpOwor CQkJCUV4cGxhaW5Qcm9wZXJ0eUludGVnZXIoIk1pbiBCYXRjaCBSb3dzIiwgTlVMTCwKKwkJCQkJ CQkJCSAgIGItPnN0YXRfbWluX3Jvd3MgPT0gSU5UX01BWCA/IDAgOiBiLT5zdGF0X21pbl9yb3dz LCBlcyk7CisJCQl9CisJCX0KKwl9CiAKIAkvKiBQcmVwYXJlIHBlci13b3JrZXIgYnVmZmVyL1dB TCB1c2FnZSAqLwogCWlmIChlcy0+d29ya2Vyc19zdGF0ZSAmJiAoZXMtPmJ1ZmZlcnMgfHwgZXMt PndhbCkgJiYgZXMtPnZlcmJvc2UpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9l eHBsYWluX3N0YXRlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluX3N0YXRlLmMKaW5k ZXggYTY2MjNmOGZhNTIuLjZlZjYwNTVjNDc5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy9leHBsYWluX3N0YXRlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbl9z dGF0ZS5jCkBAIC0xNTksNiArMTU5LDggQEAgUGFyc2VFeHBsYWluT3B0aW9uTGlzdChFeHBsYWlu U3RhdGUgKmVzLCBMaXN0ICpvcHRpb25zLCBQYXJzZVN0YXRlICpwc3RhdGUpCiAJCQkJCQkJCSJF WFBMQUlOIiwgb3B0LT5kZWZuYW1lLCBwKSwKIAkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0 YXRlLCBvcHQtPmxvY2F0aW9uKSkpOwogCQl9CisJCWVsc2UgaWYgKHN0cmNtcChvcHQtPmRlZm5h bWUsICJiYXRjaGVzIikgPT0gMCkKKwkJCWVzLT5iYXRjaGVzID0gZGVmR2V0Qm9vbGVhbihvcHQp OwogCQllbHNlIGlmICghQXBwbHlFeHRlbnNpb25FeHBsYWluT3B0aW9uKGVzLCBvcHQsIHBzdGF0 ZSkpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJP UiksCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQmF0Y2guYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNCYXRjaC5jCmluZGV4IDAwN2FlNTM1Njg3Li45M2M5MDY4MGQz ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0JhdGNoLmMKKysrIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY0JhdGNoLmMKQEAgLTE5LDcgKzE5LDcgQEAKICAqCQlBbGxv Y2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIG5ldyBUdXBsZUJhdGNoIGVudmVsb3BlLgogICovCiBUdXBs ZUJhdGNoICoKLVR1cGxlQmF0Y2hDcmVhdGUoVHVwbGVEZXNjIHNjYW5kZXNjLCBpbnQgY2FwYWNp dHkpCitUdXBsZUJhdGNoQ3JlYXRlKFR1cGxlRGVzYyBzY2FuZGVzYywgaW50IGNhcGFjaXR5LCBi b29sIHRyYWNrX3N0YXRzKQogewogCVR1cGxlQmF0Y2ggICpiOwogCVR1cGxlVGFibGVTbG90ICoq aW5zbG90cywKQEAgLTQ0LDYgKzQ0LDEyIEBAIFR1cGxlQmF0Y2hDcmVhdGUoVHVwbGVEZXNjIHNj YW5kZXNjLCBpbnQgY2FwYWNpdHkpCiAJYi0+bnZhbGlkID0gMDsKIAliLT5uZXh0ID0gMDsKIAor CWItPnRyYWNrX3N0YXRzID0gdHJhY2tfc3RhdHM7CisJYi0+c3RhdF9iYXRjaGVzID0gMDsKKwli LT5zdGF0X3Jvd3MgPSAwOworCWItPnN0YXRfbWF4X3Jvd3MgPSAwOworCWItPnN0YXRfbWluX3Jv d3MgPSBJTlRfTUFYOworCiAJcmV0dXJuIGI7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVTZXFzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2Vxc2Nh bi5jCmluZGV4IGE5MDcxZTMyNTYwLi43M2ViOWI2YTUxZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl U2Vxc2Nhbi5jCkBAIC0yMTMsOCArMjEzLDkgQEAgU2VxTmV4dEJhdGNoKFNlcVNjYW5TdGF0ZSAq bm9kZSkKIAlUYWJsZVNjYW5EZXNjIHNjYW5kZXNjOwogCUVTdGF0ZQkgICAqZXN0YXRlOwogCVNj YW5EaXJlY3Rpb24gZGlyZWN0aW9uOworCVR1cGxlQmF0Y2ggKmIgPSBub2RlLT5zcy5wcy5wc19C YXRjaDsKIAotCUFzc2VydChub2RlLT5zcy5wcy5wc19CYXRjaCAhPSBOVUxMKTsKKwlBc3NlcnQo YiAhPSBOVUxMKTsKIAogCS8qCiAJICogZ2V0IGluZm9ybWF0aW9uIGZyb20gdGhlIGVzdGF0ZSBh bmQgc2NhbiBzdGF0ZQpAQCAtMjM3LDIyICsyMzgsMjEgQEAgU2VxTmV4dEJhdGNoKFNlcVNjYW5T dGF0ZSAqbm9kZSkKIAl9CiAKIAkvKiBMYXppbHkgY3JlYXRlIHRoZSBBTSBiYXRjaCBwYXlsb2Fk LiAqLwotCWlmIChub2RlLT5zcy5wcy5wc19CYXRjaC0+YW1fcGF5bG9hZCA9PSBOVUxMKQorCWlm IChiLT5hbV9wYXlsb2FkID09IE5VTEwpCiAJewogCQljb25zdCBUYWJsZUFtUm91dGluZSAqdGFt IFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWSA9IHNjYW5kZXNjLT5yc19yZC0+cmRfdGFibGVhbTsK IAogCQlBc3NlcnQodGFtICYmIHRhbS0+c2Nhbl9iZWdpbl9iYXRjaCk7Ci0JCW5vZGUtPnNzLnBz LnBzX0JhdGNoLT5hbV9wYXlsb2FkID0KLQkJCXRhYmxlX3NjYW5fYmVnaW5fYmF0Y2goc2NhbmRl c2MsIG5vZGUtPnNzLnBzLnBzX0JhdGNoLT5tYXhzbG90cyk7Ci0JCW5vZGUtPnNzLnBzLnBzX0Jh dGNoLT5vcHMgPSB0YWJsZV9iYXRjaF9jYWxsYmFja3Mobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0 aW9uKTsKKwkJYi0+YW1fcGF5bG9hZCA9IHRhYmxlX3NjYW5fYmVnaW5fYmF0Y2goc2NhbmRlc2Ms IGItPm1heHNsb3RzKTsKKwkJYi0+b3BzID0gdGFibGVfYmF0Y2hfY2FsbGJhY2tzKG5vZGUtPnNz LnNzX2N1cnJlbnRSZWxhdGlvbik7CiAJfQogCi0Jbm9kZS0+c3MucHMucHNfQmF0Y2gtPm50dXBs ZXMgPQotCQl0YWJsZV9zY2FuX2dldG5leHRiYXRjaChzY2FuZGVzYywgbm9kZS0+c3MucHMucHNf QmF0Y2gtPmFtX3BheWxvYWQsIGRpcmVjdGlvbik7Ci0Jbm9kZS0+c3MucHMucHNfQmF0Y2gtPm52 YWxpZCA9IG5vZGUtPnNzLnBzLnBzX0JhdGNoLT5udHVwbGVzOwotCW5vZGUtPnNzLnBzLnBzX0Jh dGNoLT5tYXRlcmlhbGl6ZWQgPSBmYWxzZTsKKwliLT5udHVwbGVzID0gdGFibGVfc2Nhbl9nZXRu ZXh0YmF0Y2goc2NhbmRlc2MsIGItPmFtX3BheWxvYWQsIGRpcmVjdGlvbik7CisJYi0+bnZhbGlk ID0gYi0+bnR1cGxlczsKKwliLT5tYXRlcmlhbGl6ZWQgPSBmYWxzZTsKKwlUdXBsZUJhdGNoUmVj b3JkU3RhdHMoYiwgYi0+bnR1cGxlcyk7CiAKLQlyZXR1cm4gbm9kZS0+c3MucHMucHNfQmF0Y2gt Pm50dXBsZXMgPiAwOworCXJldHVybiBiLT5udHVwbGVzID4gMDsKIH0KIAogc3RhdGljIGlubGlu ZSBib29sCkBAIC0zNDAsOCArMzQwLDEwIEBAIFNlcVNjYW5Jbml0QmF0Y2hpbmcoU2VxU2NhblN0 YXRlICpzY2Fuc3RhdGUsIGludCBlZmxhZ3MpCiB7CiAJY29uc3QgaW50IGNhcCA9IGV4ZWN1dG9y X2JhdGNoX3Jvd3M7CiAJVHVwbGVEZXNjCXNjYW5kZXNjID0gUmVsYXRpb25HZXREZXNjcihzY2Fu c3RhdGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbik7CisJRVN0YXRlICplc3RhdGUgPSBzY2Fuc3Rh dGUtPnNzLnBzLnN0YXRlOworCWJvb2wgdHJhY2tfc3RhdHMgPSBlc3RhdGUtPmVzX2luc3RydW1l bnQgJiYgKGVzdGF0ZS0+ZXNfaW5zdHJ1bWVudCAmIElOU1RSVU1FTlRfQkFUQ0hFUyk7CiAKLQlz Y2Fuc3RhdGUtPnNzLnBzLnBzX0JhdGNoID0gVHVwbGVCYXRjaENyZWF0ZShzY2FuZGVzYywgY2Fw KTsKKwlzY2Fuc3RhdGUtPnNzLnBzLnBzX0JhdGNoID0gVHVwbGVCYXRjaENyZWF0ZShzY2FuZGVz YywgY2FwLCB0cmFja19zdGF0cyk7CiAKIAkvKiBDaG9vc2UgYmF0Y2ggdmFyaWFudCB0byBwcmVz ZXJ2ZSB5b3VyIHNwZWNpYWxpemF0aW9uIG1hdHJpeCAqLwogCWlmIChzY2Fuc3RhdGUtPnNzLnBz LnF1YWwgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW5f c3RhdGUuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW5fc3RhdGUuaAppbmRleCBiYTA3 M2I4NjkxOC4uYjgyZjdhYzA4MjkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4 cGxhaW5fc3RhdGUuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluX3N0YXRlLmgK QEAgLTU1LDYgKzU1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgRXhwbGFpblN0YXRlCiAJYm9vbAkJbWVt b3J5OwkJCS8qIHByaW50IHBsYW5uZXIncyBtZW1vcnkgdXNhZ2UgaW5mb3JtYXRpb24gKi8KIAli b29sCQlzZXR0aW5nczsJCS8qIHByaW50IG1vZGlmaWVkIHNldHRpbmdzICovCiAJYm9vbAkJZ2Vu ZXJpYzsJCS8qIGdlbmVyYXRlIGEgZ2VuZXJpYyBwbGFuICovCisJYm9vbAkJYmF0Y2hlczsJCS8q IHByaW50IGJhdGNoIHN0YXRpc3RpY3MgKi8KIAlFeHBsYWluU2VyaWFsaXplT3B0aW9uIHNlcmlh bGl6ZTsJLyogc2VyaWFsaXplIHRoZSBxdWVyeSdzIG91dHB1dD8gKi8KIAlFeHBsYWluRm9ybWF0 IGZvcm1hdDsJCS8qIG91dHB1dCBmb3JtYXQgKi8KIAkvKiBzdGF0ZSBmb3Igb3V0cHV0IGZvcm1h dHRpbmcgLS0tIG5vdCByZXNldCBmb3IgZWFjaCBuZXcgcGxhbiB0cmVlICovCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjQmF0Y2guaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9y L2V4ZWNCYXRjaC5oCmluZGV4IDJkMDA2NjEwM2NlLi5lM2E0Zjc2MjI4NCAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0JhdGNoLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0 b3IvZXhlY0JhdGNoLmgKQEAgLTEzLDYgKzEzLDcgQEAKICNpZm5kZWYgRVhFQ0JBVENIX0gKICNk ZWZpbmUgRVhFQ0JBVENIX0gKIAorI2luY2x1ZGUgImxpbWl0cy5oIgogI2luY2x1ZGUgImV4ZWN1 dG9yL3R1cHRhYmxlLmgiCiAKIC8qCkBAIC00NSwxMSArNDYsMTggQEAgdHlwZWRlZiBzdHJ1Y3Qg VHVwbGVCYXRjaAogCiAJaW50CQludmFsaWQ7CQkvKiBudW1iZXIgb2YgcmV0dXJuYWJsZSB0dXBs ZXMgaW4gb3V0c2xvdHMgKi8KIAlpbnQJCW5leHQ7CQkvKiAwLWJhc2VkIGluZGV4IG9mIG5leHQg dHVwbGUgdG8gYmUgcmV0dXJuZWQgKi8KKworCS8qIFN0YXRpc3RpY3MgKHBvcHVsYXRlZCB3aGVu IEVYUExBSU4gQU5BTFlaRSBCQVRDSEVTKSAqLworCWJvb2wJdHJhY2tfc3RhdHM7CS8qIHdoZXRo ZXIgdG8gY29sbGVjdCBzdGF0cyAqLworCWludDY0CXN0YXRfYmF0Y2hlczsJLyogdG90YWwgbnVt YmVyIG9mIGJhdGNoZXMgZmV0Y2hlZCAqLworCWludDY0CXN0YXRfcm93czsJCS8qIHRvdGFsIHR1 cGxlcyBhY3Jvc3MgYWxsIGJhdGNoZXMgKi8KKwlpbnQJCXN0YXRfbWF4X3Jvd3M7CS8qIG1heCBy b3dzIGluIGFueSBzaW5nbGUgYmF0Y2ggKi8KKwlpbnQJCXN0YXRfbWluX3Jvd3M7CS8qIG1pbiBy b3dzIGluIGFueSBzaW5nbGUgYmF0Y2ggKG5vbi16ZXJvKSAqLwogfSBUdXBsZUJhdGNoOwogCiAK IC8qIEhlbHBlcnMgKi8KLWV4dGVybiBUdXBsZUJhdGNoICpUdXBsZUJhdGNoQ3JlYXRlKFR1cGxl RGVzYyBzY2FuZGVzYywgaW50IGNhcGFjaXR5KTsKK2V4dGVybiBUdXBsZUJhdGNoICpUdXBsZUJh dGNoQ3JlYXRlKFR1cGxlRGVzYyBzY2FuZGVzYywgaW50IGNhcGFjaXR5LCBib29sIHRyYWNrX3N0 YXRzKTsKIGV4dGVybiB2b2lkIFR1cGxlQmF0Y2hSZXNldChUdXBsZUJhdGNoICpiLCBib29sIGRy b3Bfc2xvdHMpOwogZXh0ZXJuIHZvaWQgVHVwbGVCYXRjaFVzZUlucHV0KFR1cGxlQmF0Y2ggKmIs IGludCBudmFsaWQpOwogZXh0ZXJuIHZvaWQgVHVwbGVCYXRjaFVzZU91dHB1dChUdXBsZUJhdGNo ICpiLCBpbnQgbnZhbGlkKTsKQEAgLTk2LDQgKzEwNCwyOSBAQCBUdXBsZUJhdGNoTWF0ZXJpYWxp emVBbGwoVHVwbGVCYXRjaCAqYikKIAlUdXBsZUJhdGNoVXNlSW5wdXQoYiwgYi0+bnR1cGxlcyk7 CiB9CiAKKy8qID09PSBCYXRjaGluZyBzdGF0cy4gPT09Ki8KKworc3RhdGljIGlubGluZSB2b2lk CitUdXBsZUJhdGNoUmVjb3JkU3RhdHMoVHVwbGVCYXRjaCAqYiwgaW50IHJvd3MpCit7CisJaWYg KCFiLT50cmFja19zdGF0cykKKwkJcmV0dXJuOworCisJYi0+c3RhdF9iYXRjaGVzKys7CisJYi0+ c3RhdF9yb3dzICs9IHJvd3M7CisJaWYgKHJvd3MgPiBiLT5zdGF0X21heF9yb3dzKQorCQliLT5z dGF0X21heF9yb3dzID0gcm93czsKKwlpZiAocm93cyA8IGItPnN0YXRfbWluX3Jvd3MgJiYgcm93 cyA+IDApCisJCWItPnN0YXRfbWluX3Jvd3MgPSByb3dzOworfQorCitzdGF0aWMgaW5saW5lIGRv dWJsZQorVHVwbGVCYXRjaEF2Z1Jvd3MoVHVwbGVCYXRjaCAqYikKK3sKKwlpZiAoYi0+c3RhdF9i YXRjaGVzID09IDApCisJCXJldHVybiAwLjA7CisKKwlyZXR1cm4gKGRvdWJsZSkgYi0+c3RhdF9y b3dzIC8gYi0+c3RhdF9iYXRjaGVzOworfQorCiAjZW5kaWYJLyogRVhFQ0JBVENIX0ggKi8KZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnQuaCBiL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL2luc3RydW1lbnQuaAppbmRleCBmZmU0NzBmMmI4NC4uMGFmMDJkYjM3NjAgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnQuaAorKysgYi9zcmMvaW5j bHVkZS9leGVjdXRvci9pbnN0cnVtZW50LmgKQEAgLTY0LDYgKzY0LDcgQEAgdHlwZWRlZiBlbnVt IEluc3RydW1lbnRPcHRpb24KIAlJTlNUUlVNRU5UX0JVRkZFUlMgPSAxIDw8IDEsCS8qIG5lZWRz IGJ1ZmZlciB1c2FnZSAqLwogCUlOU1RSVU1FTlRfUk9XUyA9IDEgPDwgMiwJLyogbmVlZHMgcm93 IGNvdW50ICovCiAJSU5TVFJVTUVOVF9XQUwgPSAxIDw8IDMsCS8qIG5lZWRzIFdBTCB1c2FnZSAq LworCUlOU1RSVU1FTlRfQkFUQ0hFUyA9IDEgPDwgNCwgLyogbmVlZHMgYmF0Y2hlcyAqLwogCUlO U1RSVU1FTlRfQUxMID0gUEdfSU5UMzJfTUFYCiB9IEluc3RydW1lbnRPcHRpb247CiAKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZXhwbGFpbi5vdXQgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2V4cGxhaW4ub3V0CmluZGV4IDdjMWYyNmIxODJjLi5mZWYzYjRhNTQ5 NyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9leHBsYWluLm91dAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2V4cGxhaW4ub3V0CkBAIC04MjIsMyArODIyLDYw IEBAIHNlbGVjdCBleHBsYWluX2ZpbHRlcignZXhwbGFpbiAoYW5hbHl6ZSxidWZmZXJzIG9mZixj b3N0cyBvZmYpIHNlbGVjdCBzdW0obikgb3ZlCiAoOSByb3dzKQogCiByZXNldCB3b3JrX21lbTsK Ky0tIFRlc3QgQkFUQ0hFUyBvcHRpb24KK3NldCBleGVjdXRvcl9iYXRjaF9yb3dzID0gNjQ7Citj cmVhdGUgdGFibGUgYmF0Y2hfdGVzdCAoYSBpbnQsIGIgdGV4dCk7CitpbnNlcnQgaW50byBiYXRj aF90ZXN0IHNlbGVjdCBpLCByZXBlYXQoJ3gnLCAxMDApIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEs IDEwMDAwKSBpOworYW5hbHl6ZSBiYXRjaF90ZXN0OworLS0gQmFzaWMgYmF0Y2ggc3RhdHMgb3V0 cHV0CitzZWxlY3QgZXhwbGFpbl9maWx0ZXIoJ2V4cGxhaW4gKGFuYWx5emUsIGJhdGNoZXMsIGJ1 ZmZlcnMgb2ZmLCBjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gYmF0Y2hfdGVzdCcpOworICAgICAg ICAgICAgICAgICAgICAgICAgIGV4cGxhaW5fZmlsdGVyICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIGJhdGNoX3Rlc3QgKGFjdHVhbCB0aW1lPU4uTi4uTi5O IHJvd3M9Ti5OIGxvb3BzPU4pCisgICBCYXRjaGVzOiBOICBBdmcgUm93czogTi5OICBNYXg6IE4g IE1pbjogTgorIFBsYW5uaW5nIFRpbWU6IE4uTiBtcworIEV4ZWN1dGlvbiBUaW1lOiBOLk4gbXMK Kyg0IHJvd3MpCisKKy0tIFdpdGggZmlsdGVyCitzZWxlY3QgZXhwbGFpbl9maWx0ZXIoJ2V4cGxh aW4gKGFuYWx5emUsIGJhdGNoZXMsIGJ1ZmZlcnMgb2ZmLCBjb3N0cyBvZmYpIHNlbGVjdCAqIGZy b20gYmF0Y2hfdGVzdCB3aGVyZSBhID4gNTAwMCcpOworICAgICAgICAgICAgICAgICAgICAgICAg IGV4cGxhaW5fZmlsdGVyICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBT Y2FuIG9uIGJhdGNoX3Rlc3QgKGFjdHVhbCB0aW1lPU4uTi4uTi5OIHJvd3M9Ti5OIGxvb3BzPU4p CisgICBGaWx0ZXI6IChhID4gTikKKyAgIFJvd3MgUmVtb3ZlZCBieSBGaWx0ZXI6IE4KKyAgIEJh dGNoZXM6IE4gIEF2ZyBSb3dzOiBOLk4gIE1heDogTiAgTWluOiBOCisgUGxhbm5pbmcgVGltZTog Ti5OIG1zCisgRXhlY3V0aW9uIFRpbWU6IE4uTiBtcworKDYgcm93cykKKworLS0gV2l0aCBMSU1J VCAtIHBhcnRpYWwgc2NhbiBzaG93cyBmZXdlciBiYXRjaGVzCitzZWxlY3QgZXhwbGFpbl9maWx0 ZXIoJ2V4cGxhaW4gKGFuYWx5emUsIGJhdGNoZXMsIGJ1ZmZlcnMgb2ZmLCBjb3N0cyBvZmYpIHNl bGVjdCAqIGZyb20gYmF0Y2hfdGVzdCBsaW1pdCAxMDAnKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBleHBsYWluX2ZpbHRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBMaW1pdCAoYWN0dWFsIHRpbWU9Ti5OLi5OLk4gcm93cz1OLk4gbG9vcHM9TikK KyAgIC0+ICBTZXEgU2NhbiBvbiBiYXRjaF90ZXN0IChhY3R1YWwgdGltZT1OLk4uLk4uTiByb3dz PU4uTiBsb29wcz1OKQorICAgICAgICAgQmF0Y2hlczogTiAgQXZnIFJvd3M6IE4uTiAgTWF4OiBO ICBNaW46IE4KKyBQbGFubmluZyBUaW1lOiBOLk4gbXMKKyBFeGVjdXRpb24gVGltZTogTi5OIG1z CisoNSByb3dzKQorCistLSBCYXRjaGluZyBkaXNhYmxlZCAtIG5vIGJhdGNoIGxpbmUKK3NldCBl eGVjdXRvcl9iYXRjaF9yb3dzID0gMDsKK3NlbGVjdCBleHBsYWluX2ZpbHRlcignZXhwbGFpbiAo YW5hbHl6ZSwgYmF0Y2hlcywgYnVmZmVycyBvZmYsIGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBi YXRjaF90ZXN0Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwbGFpbl9maWx0ZXIgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gYmF0Y2hfdGVzdCAo YWN0dWFsIHRpbWU9Ti5OLi5OLk4gcm93cz1OLk4gbG9vcHM9TikKKyBQbGFubmluZyBUaW1lOiBO Lk4gbXMKKyBFeGVjdXRpb24gVGltZTogTi5OIG1zCisoMyByb3dzKQorCityZXNldCBleGVjdXRv cl9iYXRjaF9yb3dzOworLS0gSlNPTiBmb3JtYXQKK3NlbGVjdCBleHBsYWluX2ZpbHRlcl90b19q c29uKCdleHBsYWluIChhbmFseXplLCBiYXRjaGVzLCBidWZmZXJzIG9mZiwgZm9ybWF0IGpzb24p IHNlbGVjdCAqIGZyb20gYmF0Y2hfdGVzdCB3aGVyZSBhIDwgMTAwMCcpICM+ICd7MCxQbGFuLEJh dGNoZXN9JzsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAwCisoMSByb3cpCisKK2Ryb3AgdGFi bGUgYmF0Y2hfdGVzdDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2V4cGxhaW4u c3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZXhwbGFpbi5zcWwKaW5kZXggZWJkYWI0MjYwNGIu Ljg3YmIxNzljZWQ5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9leHBsYWluLnNx bAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9leHBsYWluLnNxbApAQCAtMTg4LDMgKzE4OCwy OSBAQCBzZWxlY3QgZXhwbGFpbl9maWx0ZXIoJ2V4cGxhaW4gKGFuYWx5emUsYnVmZmVycyBvZmYs Y29zdHMgb2ZmKSBzZWxlY3Qgc3VtKG4pIG92ZQogLS0gVGVzdCB0dXBsZXN0b3JlIHN0b3JhZ2Ug dXNhZ2UgaW4gV2luZG93IGFnZ3JlZ2F0ZSAobWVtb3J5IGFuZCBkaXNrIGNhc2UsIGZpbmFsIHJl c3VsdCBpcyBkaXNrKQogc2VsZWN0IGV4cGxhaW5fZmlsdGVyKCdleHBsYWluIChhbmFseXplLGJ1 ZmZlcnMgb2ZmLGNvc3RzIG9mZikgc2VsZWN0IHN1bShuKSBvdmVyKHBhcnRpdGlvbiBieSBtKSBm cm9tIChTRUxFQ1QgbiA8IDMgYXMgbSwgbiBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDI1MDApIGEo bikpJyk7CiByZXNldCB3b3JrX21lbTsKKworLS0gVGVzdCBCQVRDSEVTIG9wdGlvbgorc2V0IGV4 ZWN1dG9yX2JhdGNoX3Jvd3MgPSA2NDsKKworY3JlYXRlIHRhYmxlIGJhdGNoX3Rlc3QgKGEgaW50 LCBiIHRleHQpOworaW5zZXJ0IGludG8gYmF0Y2hfdGVzdCBzZWxlY3QgaSwgcmVwZWF0KCd4Jywg MTAwKSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMCkgaTsKK2FuYWx5emUgYmF0Y2hfdGVz dDsKKworLS0gQmFzaWMgYmF0Y2ggc3RhdHMgb3V0cHV0CitzZWxlY3QgZXhwbGFpbl9maWx0ZXIo J2V4cGxhaW4gKGFuYWx5emUsIGJhdGNoZXMsIGJ1ZmZlcnMgb2ZmLCBjb3N0cyBvZmYpIHNlbGVj dCAqIGZyb20gYmF0Y2hfdGVzdCcpOworCistLSBXaXRoIGZpbHRlcgorc2VsZWN0IGV4cGxhaW5f ZmlsdGVyKCdleHBsYWluIChhbmFseXplLCBiYXRjaGVzLCBidWZmZXJzIG9mZiwgY29zdHMgb2Zm KSBzZWxlY3QgKiBmcm9tIGJhdGNoX3Rlc3Qgd2hlcmUgYSA+IDUwMDAnKTsKKworLS0gV2l0aCBM SU1JVCAtIHBhcnRpYWwgc2NhbiBzaG93cyBmZXdlciBiYXRjaGVzCitzZWxlY3QgZXhwbGFpbl9m aWx0ZXIoJ2V4cGxhaW4gKGFuYWx5emUsIGJhdGNoZXMsIGJ1ZmZlcnMgb2ZmLCBjb3N0cyBvZmYp IHNlbGVjdCAqIGZyb20gYmF0Y2hfdGVzdCBsaW1pdCAxMDAnKTsKKworLS0gQmF0Y2hpbmcgZGlz YWJsZWQgLSBubyBiYXRjaCBsaW5lCitzZXQgZXhlY3V0b3JfYmF0Y2hfcm93cyA9IDA7CitzZWxl Y3QgZXhwbGFpbl9maWx0ZXIoJ2V4cGxhaW4gKGFuYWx5emUsIGJhdGNoZXMsIGJ1ZmZlcnMgb2Zm LCBjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gYmF0Y2hfdGVzdCcpOworcmVzZXQgZXhlY3V0b3Jf YmF0Y2hfcm93czsKKworLS0gSlNPTiBmb3JtYXQKK3NlbGVjdCBleHBsYWluX2ZpbHRlcl90b19q c29uKCdleHBsYWluIChhbmFseXplLCBiYXRjaGVzLCBidWZmZXJzIG9mZiwgZm9ybWF0IGpzb24p IHNlbGVjdCAqIGZyb20gYmF0Y2hfdGVzdCB3aGVyZSBhIDwgMTAwMCcpICM+ICd7MCxQbGFuLEJh dGNoZXN9JzsKKworZHJvcCB0YWJsZSBiYXRjaF90ZXN0OwotLSAKMi40Ny4zCgo= --0000000000003b0851064662c896 Content-Type: text/x-sh; charset="US-ASCII"; name="bar_limit.sh" Content-Disposition: attachment; filename="bar_limit.sh" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mjedmux93 aG9tZT0kSE9NRQptYXN0ZXI9JGhvbWUvcGcvaW5zdGFsbC9tYXN0ZXItb3B0L2JpbgpwYXRjaGVk PSRob21lL3BnL2luc3RhbGwvcGF0Y2hlZC1vcHQvYmluCm1hc3Rlcl9kYXRhPSRob21lL3BnL2Rh dGEvbWFzdGVyCnBhdGNoZWRfZGF0YT0kaG9tZS9wZy9kYXRhL3BhdGNoZWQKbG9nZGlyPSRob21l L3BnL2xvZwoKIyBtYXN0ZXIKZXhwb3J0IFBBVEg9JG1hc3RlcjokUEFUSAp3aGljaCBwb3N0Z3Jl cwpwZ19jdGwgLUQgICRtYXN0ZXJfZGF0YSAtbCAkbG9nZGlyL3BnX21hc3Rlcl9sb2cgc3RhcnQK CmZvciBpIGluIDEwMDAwMDAgMjAwMDAwMCAzMDAwMDAwIDQwMDAwMDAgNTAwMDAwMCAxMDAwMDAw MDsgZG8KCXBzcWwgLWMgInNlbGVjdCBwZ19wcmV3YXJtKCdiYXJfJGknKSIgPiAvZGV2L251bGwg Mj4mMQoJcHNxbCAtYyAidmFjdXVtIGJhcl8kaSIgPiAvZGV2L251bGwgMj4mMQoJcHJpbnRmICIl c1x0IiAiJGkiCgllY2hvICJzZWxlY3QgKiBmcm9tIGJhcl8kaSBsaW1pdCAxIG9mZnNldCAkaSIg PiAvdG1wL2Jhcl9saW1pdC5zcWwKCXBnYmVuY2ggLW4gLVQ1IC1mIC90bXAvYmFyX2xpbWl0LnNx bCB8IGdyZXAgbGF0ZW5jeQpkb25lCgpwZ19jdGwgLUQgICRtYXN0ZXJfZGF0YSAtbCAkbG9nZGly L3BnX21hc3Rlcl9sb2cgc3RvcAoKZXhwb3J0IFBBVEg9JHBhdGNoZWQ6JFBBVEg7CndoaWNoIHBv c3RncmVzCmVjaG8gImV4ZWN1dG9yX2JhdGNoX3Jvd3M9MCIgPj4gJHBhdGNoZWRfZGF0YS9wb3N0 Z3Jlc3FsLmNvbmYKZWNobyAiZXhlY3V0b3JfYmF0Y2hfcm93cz0wIgpwZ19jdGwgLUQgICRwYXRj aGVkX2RhdGEgLWwgJGxvZ2Rpci9wZ19tYXN0ZXJfbG9nIHN0YXJ0Cgpmb3IgaSBpbiAxMDAwMDAw IDIwMDAwMDAgMzAwMDAwMCA0MDAwMDAwIDUwMDAwMDAgMTAwMDAwMDA7IGRvCglwc3FsIC1jICJz ZWxlY3QgcGdfcHJld2FybSgnYmFyXyRpJykiID4gL2Rldi9udWxsIDI+JjEKCXBzcWwgLWMgInZh Y3V1bSBiYXJfJGkiID4gL2Rldi9udWxsIDI+JjEKCXByaW50ZiAiJXNcdCIgIiRpIgoJZWNobyAi c2VsZWN0ICogZnJvbSBiYXJfJGkgbGltaXQgMSBvZmZzZXQgJGkiID4gL3RtcC9iYXJfbGltaXQu c3FsCglwZ2JlbmNoIC1uIC1UNSAtZiAvdG1wL2Jhcl9saW1pdC5zcWwgfCBncmVwIGxhdGVuY3kK ZG9uZQoKcGdfY3RsIC1EICAkcGF0Y2hlZF9kYXRhIC1sICRsb2dkaXIvcGdfbWFzdGVyX2xvZyBz dG9wCgp3aGljaCBwb3N0Z3JlcwplY2hvICJleGVjdXRvcl9iYXRjaF9yb3dzPTY0IiA+PiAkcGF0 Y2hlZF9kYXRhL3Bvc3RncmVzcWwuY29uZgplY2hvICJleGVjdXRvcl9iYXRjaF9yb3dzPTY0Igpw Z19jdGwgLUQgICRwYXRjaGVkX2RhdGEgLWwgJGxvZ2Rpci9wZ19tYXN0ZXJfbG9nIHN0YXJ0Cgpm b3IgaSBpbiAxMDAwMDAwIDIwMDAwMDAgMzAwMDAwMCA0MDAwMDAwIDUwMDAwMDAgMTAwMDAwMDA7 IGRvCglwc3FsIC1jICJzZWxlY3QgcGdfcHJld2FybSgnYmFyXyRpJykiID4gL2Rldi9udWxsIDI+ JjEKCXBzcWwgLWMgInZhY3V1bSBiYXJfJGkiID4gL2Rldi9udWxsIDI+JjEKCXByaW50ZiAiJXNc dCIgIiRpIgoJZWNobyAic2VsZWN0ICogZnJvbSBiYXJfJGkgbGltaXQgMSBvZmZzZXQgJGkiID4g L3RtcC9iYXJfbGltaXQuc3FsCglwZ2JlbmNoIC1uIC1UNSAtZiAvdG1wL2Jhcl9saW1pdC5zcWwg fCBncmVwIGxhdGVuY3kKZG9uZQoKcGdfY3RsIC1EICAkcGF0Y2hlZF9kYXRhIC1sICRsb2dkaXIv cGdfbWFzdGVyX2xvZyBzdG9wCg== --0000000000003b0851064662c896 Content-Type: text/x-sh; charset="US-ASCII"; name="bar_limit_where_o.sh" Content-Disposition: attachment; filename="bar_limit_where_o.sh" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mjedmuxo5 aG9tZT0kSE9NRQptYXN0ZXI9JGhvbWUvcGcvaW5zdGFsbC9tYXN0ZXItb3B0L2JpbgpwYXRjaGVk PSRob21lL3BnL2luc3RhbGwvcGF0Y2hlZC1vcHQvYmluCm1hc3Rlcl9kYXRhPSRob21lL3BnL2Rh dGEvbWFzdGVyCnBhdGNoZWRfZGF0YT0kaG9tZS9wZy9kYXRhL3BhdGNoZWQKbG9nZGlyPSRob21l L3BnL2xvZwoKIyBtYXN0ZXIKZXhwb3J0IFBBVEg9JG1hc3RlcjokUEFUSAp3aGljaCBwb3N0Z3Jl cwpwZ19jdGwgLUQgICRtYXN0ZXJfZGF0YSAtbCAkbG9nZGlyL3BnX21hc3Rlcl9sb2cgc3RhcnQK CmZvciBpIGluIDEwMDAwMDAgMjAwMDAwMCAzMDAwMDAwIDQwMDAwMDAgNTAwMDAwMCAxMDAwMDAw MDsgZG8KCXBzcWwgLWMgInNlbGVjdCBwZ19wcmV3YXJtKCdiYXJfJGknKSIgPiAvZGV2L251bGwg Mj4mMQoJcHNxbCAtYyAidmFjdXVtIGJhcl8kaSIgPiAvZGV2L251bGwgMj4mMQoJcHJpbnRmICIl c1x0IiAiJGkiCgllY2hvICJzZWxlY3QgKiBmcm9tIGJhcl8kaSB3aGVyZSBvID4gMCBsaW1pdCAx IG9mZnNldCAkaSIgPiAvdG1wL2Jhcl9saW1pdC5zcWwKCXBnYmVuY2ggLW4gLVQ1IC1mIC90bXAv YmFyX2xpbWl0LnNxbCB8IGdyZXAgbGF0ZW5jeQpkb25lCgpwZ19jdGwgLUQgICRtYXN0ZXJfZGF0 YSAtbCAkbG9nZGlyL3BnX21hc3Rlcl9sb2cgc3RvcAoKZXhwb3J0IFBBVEg9JHBhdGNoZWQ6JFBB VEg7CndoaWNoIHBvc3RncmVzCmVjaG8gImV4ZWN1dG9yX2JhdGNoX3Jvd3M9MCIgPj4gJHBhdGNo ZWRfZGF0YS9wb3N0Z3Jlc3FsLmNvbmYKZWNobyAiZXhlY3V0b3JfYmF0Y2hfcm93cz0wIgpwZ19j dGwgLUQgICRwYXRjaGVkX2RhdGEgLWwgJGxvZ2Rpci9wZ19tYXN0ZXJfbG9nIHN0YXJ0Cgpmb3Ig aSBpbiAxMDAwMDAwIDIwMDAwMDAgMzAwMDAwMCA0MDAwMDAwIDUwMDAwMDAgMTAwMDAwMDA7IGRv Cglwc3FsIC1jICJzZWxlY3QgcGdfcHJld2FybSgnYmFyXyRpJykiID4gL2Rldi9udWxsIDI+JjEK CXBzcWwgLWMgInZhY3V1bSBiYXJfJGkiID4gL2Rldi9udWxsIDI+JjEKCXByaW50ZiAiJXNcdCIg IiRpIgoJZWNobyAic2VsZWN0ICogZnJvbSBiYXJfJGkgd2hlcmUgbyA+IDAgbGltaXQgMSBvZmZz ZXQgJGkiID4gL3RtcC9iYXJfbGltaXQuc3FsCglwZ2JlbmNoIC1uIC1UNSAtZiAvdG1wL2Jhcl9s aW1pdC5zcWwgfCBncmVwIGxhdGVuY3kKZG9uZQoKcGdfY3RsIC1EICAkcGF0Y2hlZF9kYXRhIC1s ICRsb2dkaXIvcGdfbWFzdGVyX2xvZyBzdG9wCgp3aGljaCBwb3N0Z3JlcwplY2hvICJleGVjdXRv cl9iYXRjaF9yb3dzPTY0IiA+PiAkcGF0Y2hlZF9kYXRhL3Bvc3RncmVzcWwuY29uZgplY2hvICJl eGVjdXRvcl9iYXRjaF9yb3dzPTY0IgpwZ19jdGwgLUQgICRwYXRjaGVkX2RhdGEgLWwgJGxvZ2Rp ci9wZ19tYXN0ZXJfbG9nIHN0YXJ0Cgpmb3IgaSBpbiAxMDAwMDAwIDIwMDAwMDAgMzAwMDAwMCA0 MDAwMDAwIDUwMDAwMDAgMTAwMDAwMDA7IGRvCglwc3FsIC1jICJzZWxlY3QgcGdfcHJld2FybSgn YmFyXyRpJykiID4gL2Rldi9udWxsIDI+JjEKCXBzcWwgLWMgInZhY3V1bSBiYXJfJGkiID4gL2Rl di9udWxsIDI+JjEKCXByaW50ZiAiJXNcdCIgIiRpIgoJZWNobyAic2VsZWN0ICogZnJvbSBiYXJf JGkgd2hlcmUgbyA+IDAgbGltaXQgMSBvZmZzZXQgJGkiID4gL3RtcC9iYXJfbGltaXQuc3FsCglw Z2JlbmNoIC1uIC1UNSAtZiAvdG1wL2Jhcl9saW1pdC5zcWwgfCBncmVwIGxhdGVuY3kKZG9uZQoK cGdfY3RsIC1EICAkcGF0Y2hlZF9kYXRhIC1sICRsb2dkaXIvcGdfbWFzdGVyX2xvZyBzdG9wCg== --0000000000003b0851064662c896 Content-Type: text/x-sh; charset="US-ASCII"; name="bar_limit_where_a.sh" Content-Disposition: attachment; filename="bar_limit_where_a.sh" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mjedmuxi4 aG9tZT0kSE9NRQptYXN0ZXI9JGhvbWUvcGcvaW5zdGFsbC9tYXN0ZXItb3B0L2JpbgpwYXRjaGVk PSRob21lL3BnL2luc3RhbGwvcGF0Y2hlZC1vcHQvYmluCm1hc3Rlcl9kYXRhPSRob21lL3BnL2Rh dGEvbWFzdGVyCnBhdGNoZWRfZGF0YT0kaG9tZS9wZy9kYXRhL3BhdGNoZWQKbG9nZGlyPSRob21l L3BnL2xvZwoKIyBtYXN0ZXIKZXhwb3J0IFBBVEg9JG1hc3RlcjokUEFUSAp3aGljaCBwb3N0Z3Jl cwpwZ19jdGwgLUQgICRtYXN0ZXJfZGF0YSAtbCAkbG9nZGlyL3BnX21hc3Rlcl9sb2cgc3RhcnQK CmZvciBpIGluIDEwMDAwMDAgMjAwMDAwMCAzMDAwMDAwIDQwMDAwMDAgNTAwMDAwMCAxMDAwMDAw MDsgZG8KCXBzcWwgLWMgInNlbGVjdCBwZ19wcmV3YXJtKCdiYXJfJGknKSIgPiAvZGV2L251bGwg Mj4mMQoJcHNxbCAtYyAidmFjdXVtIGJhcl8kaSIgPiAvZGV2L251bGwgMj4mMQoJcHJpbnRmICIl c1x0IiAiJGkiCgllY2hvICJzZWxlY3QgKiBmcm9tIGJhcl8kaSB3aGVyZSBhID4gMCBsaW1pdCAx IG9mZnNldCAkaSIgPiAvdG1wL2Jhcl9saW1pdC5zcWwKCXBnYmVuY2ggLW4gLVQ1IC1mIC90bXAv YmFyX2xpbWl0LnNxbCB8IGdyZXAgbGF0ZW5jeQpkb25lCgpwZ19jdGwgLUQgICRtYXN0ZXJfZGF0 YSAtbCAkbG9nZGlyL3BnX21hc3Rlcl9sb2cgc3RvcAoKZXhwb3J0IFBBVEg9JHBhdGNoZWQ6JFBB VEg7CndoaWNoIHBvc3RncmVzCmVjaG8gImV4ZWN1dG9yX2JhdGNoX3Jvd3M9MCIgPj4gJHBhdGNo ZWRfZGF0YS9wb3N0Z3Jlc3FsLmNvbmYKZWNobyAiZXhlY3V0b3JfYmF0Y2hfcm93cz0wIjsKcGdf Y3RsIC1EICAkcGF0Y2hlZF9kYXRhIC1sICRsb2dkaXIvcGdfbWFzdGVyX2xvZyBzdGFydAoKZm9y IGkgaW4gMTAwMDAwMCAyMDAwMDAwIDMwMDAwMDAgNDAwMDAwMCA1MDAwMDAwIDEwMDAwMDAwOyBk bwoJcHNxbCAtYyAic2VsZWN0IHBnX3ByZXdhcm0oJ2Jhcl8kaScpIiA+IC9kZXYvbnVsbCAyPiYx Cglwc3FsIC1jICJ2YWN1dW0gYmFyXyRpIiA+IC9kZXYvbnVsbCAyPiYxCglwcmludGYgIiVzXHQi ICIkaSIKCWVjaG8gInNlbGVjdCAqIGZyb20gYmFyXyRpIHdoZXJlIGEgPiAwIGxpbWl0IDEgb2Zm c2V0ICRpIiA+IC90bXAvYmFyX2xpbWl0LnNxbAoJcGdiZW5jaCAtbiAtVDUgLWYgL3RtcC9iYXJf bGltaXQuc3FsIHwgZ3JlcCBsYXRlbmN5CmRvbmUKCnBnX2N0bCAtRCAgJHBhdGNoZWRfZGF0YSAt bCAkbG9nZGlyL3BnX21hc3Rlcl9sb2cgc3RvcAoKd2hpY2ggcG9zdGdyZXMKZWNobyAiZXhlY3V0 b3JfYmF0Y2hfcm93cz02NCIgPj4gJHBhdGNoZWRfZGF0YS9wb3N0Z3Jlc3FsLmNvbmYKZWNobyAi ZXhlY3V0b3JfYmF0Y2hfcm93cz02NCIKcGdfY3RsIC1EICAkcGF0Y2hlZF9kYXRhIC1sICRsb2dk aXIvcGdfbWFzdGVyX2xvZyBzdGFydAoKZm9yIGkgaW4gMTAwMDAwMCAyMDAwMDAwIDMwMDAwMDAg NDAwMDAwMCA1MDAwMDAwIDEwMDAwMDAwOyBkbwoJcHNxbCAtYyAic2VsZWN0IHBnX3ByZXdhcm0o J2Jhcl8kaScpIiA+IC9kZXYvbnVsbCAyPiYxCglwc3FsIC1jICJ2YWN1dW0gYmFyXyRpIiA+IC9k ZXYvbnVsbCAyPiYxCglwcmludGYgIiVzXHQiICIkaSIKCWVjaG8gInNlbGVjdCAqIGZyb20gYmFy XyRpIHdoZXJlIGEgPiAwIGxpbWl0IDEgb2Zmc2V0ICRpIiA+IC90bXAvYmFyX2xpbWl0LnNxbAoJ cGdiZW5jaCAtbiAtVDUgLWYgL3RtcC9iYXJfbGltaXQuc3FsIHwgZ3JlcCBsYXRlbmN5CmRvbmUK CnBnX2N0bCAtRCAgJHBhdGNoZWRfZGF0YSAtbCAkbG9nZGlyL3BnX21hc3Rlcl9sb2cgc3RvcAo= --0000000000003b0851064662c896--