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 1w4q7g-002bgq-0Y for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Mar 2026 00:59:56 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w4q7e-003IrT-25 for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Mar 2026 00:59:55 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w4q7d-003IrH-2f for pgsql-hackers@lists.postgresql.org; Tue, 24 Mar 2026 00:59:54 +0000 Received: from mail-pg1-x52a.google.com ([2607:f8b0:4864:20::52a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w4q7b-00000000i4l-2xTD for pgsql-hackers@postgresql.org; Tue, 24 Mar 2026 00:59:53 +0000 Received: by mail-pg1-x52a.google.com with SMTP id 41be03b00d2f7-c73a12af63cso2186435a12.0 for ; Mon, 23 Mar 2026 17:59:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774313991; cv=none; d=google.com; s=arc-20240605; b=QFPVfuGB4zDUnnDvRQUQhv38cCaGSUFE3lxhSFu3F7zTSK7Cc5VR1AwHRoe0x+wd9p dLibikZRe/XUiIXHe+XrmAefzD/+ZjLVW0rPhAaNwUdwTk53EDM2/x1M6vgbuKxLSMTn OUXCVbyX19q8R3+66eJXk2FWwCnVRLw3y+ZfCajNZYBpZhqj5UvgVICYc31UcChxM8NQ H3mSxFFdIEekiHnijY0WjpQu4Vn80/WBqBVx8oHIGeoVx0Y94tnv6ZfHOFBNgC1BQW3s SeLpWW3/R+tegMtq614pSBgNuEhDE0I+Xt3q9+IyNcKcL0xncbBOeYymtY5n11pb13qq LWvQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=SALWbo+USU3KCcZ3dW56Q/2JF2c8AiqbIJgjJyEpXx8=; fh=2jcEKV/2gcwAqiJWy4flgwsuO72JEVfhis6LUGO7hfI=; b=ewO1JFwQG3EXvKVggCmZmKgt0yX6CAkcBPoG8Eii6+r+Crj4LlbYos3UWu71zn3jtC T0r7Bmyx9+Mswsc92jiHjl2zvYHo/AkeJjf4pfhGxgY0PZepVy8QfUog3/PnBFHKpY7q 4K8XZ3S320pxJgiM24P9VGlSp+3grYjBddeOLdrtsZ8FpvEkPp9/SqxY9bsnl0jdlGtF U4oAmHPiiop7N2Eq3XBOpDpfByj6JGlt4d8MoyNvrzhiAXVWndzivRz2XZESy1+dV1Pm DCsoUn9H4ZfVj0RR/O4RhWfhP4Pcezp/B3Uwf6PIe/r1rbge2VmJm/4BlV8vALWGeJN2 jFWg==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774313991; x=1774918791; 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=SALWbo+USU3KCcZ3dW56Q/2JF2c8AiqbIJgjJyEpXx8=; b=Nu/yGHXZKdY06B97jUNUMJiPsLoWZOGuN7JOJBp37R/w5CfZEPYIvAAh316bSPtZV7 YkboGKgg5rCHokmrLvm+gnOk9+l7LYbgC4xmfaelwHkd1MqhIr851myl5cUM71q3Vtpm j/bICVFC6BMISwERa6RofMGNivcgopFNkac+tipjM9Fz1FN8VzsUb/F34fchj8dCtSfv 7+pAQFSGDGXByF0U4eX7mAbSqXsQ97AQYDGLDyP6AJDKWygu2sPy3eRop4/2DqNQyAbY tAr6HkczHRPHyI1m7i+GNTrI/nioKX1T50ALTSEPI7kck/opI8NqdPy0VJjEMfkAv+yX Myug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774313991; x=1774918791; 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=SALWbo+USU3KCcZ3dW56Q/2JF2c8AiqbIJgjJyEpXx8=; b=bKDhaN5nG299XeRgghSeKpEuXWL7MstyhZU7EtITMkuV81pdRIYi/HFIfoodAUGNZP Wn2/W2P4JZayHN5IV+Gza0Vgq1ksI0LLhuqLJ9U2RqXHzkettotneUYOmV41dXqCd4Vt tHYq8Oc6dh4Yq1pV9Gy09oLi9aYQb8oCqkqIkmseIi9BpIRmOGjJNZ7stPK03IM40Wsv dCN/NVjA0xB3nI6nupnxDN+Ji36knhGDf1fKVWX5rLEuCUAQEK1VsclTLWVtZHcIgrTM nsLbrgeo1XVg43TWvTPZ6fMOR/7LtI/PvPask5kgI/nxSKT9lUzAvX4n8vEF99PV8vmF eQ0w== X-Forwarded-Encrypted: i=1; AJvYcCWWps0TN8QRO1cSh76zhbJJci0DSoJa0/pyQaSIDnJLcoL4S4blBF46mWfWELZyD+F+oGZC29POU/O59jBH@postgresql.org X-Gm-Message-State: AOJu0YyEgSoGfZIMfIq7pOa/fjUhoidbw+UuvsyCWZEBL/+KUjXNXxY+ rxak5r+7BMWbjw9dL0DuaygKIsjZ0Z3KEUByRzJN7AV9N8yUqLoK8nQEYsKR5XmpPeceDqFX2M1 Dul5k/+ADp9mRVA/gtJvnDLgr+Z4Gg14= X-Gm-Gg: ATEYQzytF1R3wwZhdmz8PXO5nBNCCqU96g0qYxG28EM32CYGOZp5B3gjMhFQHs+5kGK 1ONBwOwNDXTf6jyD9WtUUYQBCTOTtvejrSSfsGzhCypNPM45RVgKqF6Db+xJhLEaBBAoLc5EUzP EPK/4xpU6eV8sr+W55VwA248t4U1uYwMOfPHPfYycbeSrHNUkKeEbhLOafMN3yqGbDRCvDUFMEL d6cjevr2CbH6OKtSwWSNlKCQtZm0bQvx7XQmR1/cqC56iz3KcGlqWxWCrzc6qPv/Ba1Leogab3G TgZwJ413 X-Received: by 2002:a05:6a20:a10c:b0:39b:835f:174b with SMTP id adf61e73a8af0-39bce9dca7amr13734349637.14.1774313990525; Mon, 23 Mar 2026 17:59:50 -0700 (PDT) MIME-Version: 1.0 References: <68f3771f-91f5-4cb7-b1de-74d9abbf0b96@vondra.me> In-Reply-To: From: Amit Langote Date: Tue, 24 Mar 2026 09:59:33 +0900 X-Gm-Features: AaiRm53T2zm90Idkjx5sQiRJAmgmq3O77sPMQqYO1ONyzhFkTIbmOf13eXnf7wM Message-ID: Subject: Re: Batching in executor To: Junwang Zhao Cc: cca5507 , Daniil Davydov <3danissimo@gmail.com>, PostgreSQL-development , Tomas Vondra Content-Type: multipart/mixed; boundary="0000000000002031a1064dbaabf5" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002031a1064dbaabf5 Content-Type: text/plain; charset="UTF-8" Hi, Here is a significantly revised version of the patch series. A lot has changed since the January submission, so I want to summarize the design changes before getting into the patches. I think it does address the points in the two reviews that landed since v5 but maybe a bunch of points became moot after my rewrite of the relevant portions (thanks Junwang and ChangAo for the review in any case). At this point it might be better to think of this as targeting v20, except that if there is review bandwidth in the remaining two weeks before the v19 feature freeze, the rs_vistuples[] change described below as a standalone improvement to the existing pagemode scan path could be considered for v19, though that too is an optimistic scenario. It is also worth noting that Andres identified a number of inefficiencies in the existing scan path in: Re: unnecessary executor overheads around seqscans https://postgr.es/m/xzflwwjtwxin3dxziyblrnygy3gfygo5dsuw6ltcoha73ecmnf%40nh6nonzta7kw that are worth fixing independently of batching. Some of those fixes may be better pursued first, both because they benefit all scan paths and because they would make batching's gains more honest. Separately, after looking at the previous version, Andres pointed out offlist two fundamental issues with the patch's design: * The heapam implementation (in a version of the patch I didn't post to the thread) duplicated heap_prepare_pagescan() logic in a separate batch-specific code path, which is not acceptable as changes should benefit the existing slot interface too. Code duplication is not good either from a future maintainability aspect. The v5 version of that code is not great in that respect either; it instead duplicated heapggettup_pagemode() to slap batching on it. * Allocating executor_batch_rows slots on the executor side to receive rows from the AM adds significant overhead for slot initialization and management, and for non-row-organized AMs that do not produce individual rows at all, those slots would never be meaningfully populated. In any case, he just wasn't a fan of the slot-array approach the moment I mentioned it. The previous version had two slot arrays, inslots and outslots, of TTSOpsHeapTuple type (not TTSOpsBufferHeapTuple because buffer pins were managed by the batch code, which has its own modularity/correctness issues), populated via a materialize_all callback. A batch qual evaluator would copy qualifying tuples into outslots, with an activeslots pointer switching between the two depending on whether batch qual evaluation was used. The new design addresses both issues and differs from the previous version in several other ways: * Single slot instead of slot arrays: there is a single TupleTableSlot, reusing the scan node's ss_ScanTupleSlot whose type was already determined by the AM via table_slot_callbacks(). The slot is re-pointed to each HeapTuple in the current buffer page via a new repoint_slot AM callback, with no materialization or copying. Tuples are returned one by one from the executor's perspective, but the AM serves them in page-sized batches from pre-built HeapTupleData descriptors in rs_vistuples[], avoiding repeated descent into heapam per tuple. This is heapam's implementation of the batch interface; there is no intention to force other AMs into the same row-oriented model. * Batch qual evaluator not included: with the single-slot model, quals are evaluated per tuple via the existing ExecQual path after each repoint_slot call. A natural next step would be a new opcode (EEOP) that calls repoint_slot() internally within expression evaluation, allowing ExecQual to advance through multiple tuples from the same batch without returning to the scan node each time, with qual results accumulated in a bitmask in ExprState. The details of that will be worked out in a follow-on series. * heapgettup_pagemode_batch() gone: patch 0001 (described below) makes HeapScanDesc store full HeapTupleData entries in rs_vistuples[], which allows heap_getnextbatch() to simply advance a slice pointer into that array without any additional copying or re-entering heap code, making a separate batch-specific scan function unnecessary. * TupleBatch renamed to RowBatch: "row batch" is more natural terminology for this concept and also consistent with how similar abstractions are named in columnar and OLAP systems. * AM callbacks now take RowBatch directly: previously heap_getnextbatch() returned a void pointer that the executor would store into RowBatch.am_payload, because only the executor knew the internals of RowBatch. Now the AM receives RowBatch directly as a parameter and can populate it without the executor acting as an intermediary. This is also why RowBatch is introduced in its own patch ahead of the AM API addition, so the struct definition is available to both sides. Patch 0001 changes rs_vistuples[] to store full HeapTupleData entries instead of OffsetNumbers, as a standalone improvement to the existing pagemode scan path. Measured on a pg_prewarm'd (also vaccum freeze'd in the all-visible case) table with 1M/5M/10M rows: query all-visible not-all-visible count(*) -0.2% to +0.9% -0.4% to +0.5% count(*) WHERE id % 10 = 0 -1.1% to +3.4% +0.2% to +1.5% SELECT * LIMIT 1 OFFSET N -2.2% to -0.6% -0.9% to +6.6% SELECT * WHERE id%10=0 LIMIT -0.8% to +3.9% +0.9% to +9.6% No significant regression on either page type. The structural improvement is most visible on not-all-visible pages where HeapTupleSatisfiesMVCCBatch() already reads every tuple header during visibility checks, so persisting the result into rs_vistuples[] eliminates the downstream re-read (in heapgettupe_pagemode()) with no measurable overhead. That said, these numbers are somewhat noisy on my machine. Results on other machines would be welcome. Patches 0002-0005 add the RowBatch infrastructure, the batch AM API and heapam implementation including seqscan variants that use the new scan_getnextbatch() API, and EXPLAIN (ANALYZE, BATCHES) support, respectively. With batching enabled (executor_batch_rows=300, ~MaxHeapTuplesPerPage): query all-visible not-all-visible count(*) +11 to +15% +9 to +13% count(*) WHERE id % 10 = 0 +6 to +11% +10 to +14% SELECT * LIMIT 1 OFFSET N +16 to +19% +16 to +22% SELECT * WHERE id%10=0 LIMIT +8 to +10% +8 to +13% With executor_batch_rows=0, results are within noise of master across all query types and sizes, confirming no regression from the infrastructure changes themselves. The not-all-visible results tend to show slightly higher gains than the all-visible case. This is likely because the existing heapam code is more optimized for the all-visible path, so the not-all-visible path, which goes through HeapTupleSatisfiesMVCCBatch() for per-tuple visibility checks, has more headroom that batching can exploit. Setting aside the current series for a moment, there are some broader design questions worth raising while we have attention on this area. Some of these echo points Tomas raised in his first reply on this thread, and I am reiterating them deliberately since I have not managed to fully address them on my own or I simply didn't need to for the TAM-to-scan-node batching and think they would benefit from wider input rather than just my own iteration. We should also start thinking about other ways the executor can consume batch rows, not always assuming they are presented as HeapTupleData. For instance, an AM could expose decoded column arrays directly to operators that can consume them, bypassing slot-based deform entirely, or a columnar AM could implement scan_getnextbatch by decoding column strips directly into the batch without going through per-tuple HeapTupleData at all. Feedback on whether the current RowBatch design and the choices made in the scan_getnextbatch and RowBatchOps API make that sort of thing harder than it needs to be would be appreciated. For example, heapam's implementation of scan_getnextbatch uses a single TTSOpsBufferHeapTuple slot re-pointed to HeapTupleData entries one at a time via repoint_slot in RowBatchHeapOps. That works for heapam but a columnar AM could implement scan_getnextbatch to decode column strips directly into arrays in the batch, with no per-row repoint step needed at all. Any adjustments that would make RowBatch more AM-agnostic are worth discussing now before the design hardens. There are also broader open questions about how far the batch model can extend beyond the scan node. Qual pushdown into the AM has been discussed in nearby threads and would be one way to allow expression evaluation to happen before data reaches the executor proper, though that is a separate effort. For the purposes of this series, expression evaluation still happens in the executor after scan_getnextbatch returns. If the scan node does not project, the buffer heap slot is passed directly to the parent node, which calls slot callbacks to deform as needed. But once a node above projects, aggregates, or joins, the notion of a page-sized batch from a single AM loses its meaning and virtual slots take over. Whether RowBatch is usable or meaningful beyond the scan/TAM boundary in any form, and whether the core executor will ever have non-HeapTupleData batch consumption paths or leave that entirely to extensions, are open questions worth discussing. For RowBatch to eventually play the role that TupleTableSlot plays for row-at-a-time execution, something inside it would need to serve as the common currency for batch data, analogous to TupleTableSlot's datum/isnull arrays. Column arrays are the obvious direction, but even that leaves open the question of representation. PostgreSQL's Datum is a pointer-sized abstraction that boxes everything, whereas vectorized systems use typed packed arrays of native types with validity bitmasks, which is a significant part of why tight vectorized loops are fast there. Whether column arrays of Datum would be good enough, or whether going further toward typed packed arrays would be necessary to get meaningful vectorization, is a deeper design question that this series deliberately does not try to answer. Even though the focus is on getting batching working at the scan/TAM boundary first, thoughts on any of these points would be welcome. -- Thanks, Amit Langote --0000000000002031a1064dbaabf5 Content-Type: application/x-patch; name="v6-0003-Add-batch-table-AM-API-and-heapam-implementation.patch" Content-Disposition: attachment; filename="v6-0003-Add-batch-table-AM-API-and-heapam-implementation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn2ziglc2 RnJvbSBhMDk1ZDI2ZTFiNWEzNjFhN2Q0MjMwMGU1MzY0ZGE5NDg0OTZmMmJhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IE1vbiwgMjMgTWFyIDIwMjYgMTg6MjE6NDcgKzA5MDAKU3ViamVjdDogW1BBVENIIHY2 IDMvNV0gQWRkIGJhdGNoIHRhYmxlIEFNIEFQSSBhbmQgaGVhcGFtIGltcGxlbWVudGF0aW9uCgpJ bnRyb2R1Y2UgdGFibGUgQU0gY2FsbGJhY2tzIGZvciBiYXRjaGVkIHR1cGxlIGZldGNoaW5nOgpz Y2FuX2JlZ2luX2JhdGNoLCBzY2FuX2dldG5leHRiYXRjaCwgc2Nhbl9yZXNldF9iYXRjaCwgYW5k CnNjYW5fZW5kX2JhdGNoLiAgQU1zIGltcGxlbWVudCBhbGwgZm91ciBvciBub25lOyBjaGVja2Vk IGJ5CnRhYmxlX3N1cHBvcnRzX2JhdGNoaW5nKCkuCgpzY2FuX3Jlc2V0X2JhdGNoIHJlbGVhc2Vz IGhlbGQgcmVzb3VyY2VzIChlLmcuIGJ1ZmZlciBwaW5zKQp3aXRob3V0IGZyZWVpbmcsIGFsbG93 aW5nIHJldXNlIGFjcm9zcyByZXNjYW5zLgoKUHJvdmlkZSB0aGUgaGVhcGFtIGltcGxlbWVudGF0 aW9uLiAgSGVhcFBhZ2VCYXRjaCAoc3RvcmVkIGluClJvd0JhdGNoLmFtX3BheWxvYWQpIGlzIGEg dGhpbiBzbGljZSBkZXNjcmlwdG9yIG92ZXIgdGhlIHNjYW4ncwpyc192aXN0dXBsZXNbXSBhcnJh eSwgd2hpY2ggd2FzIGludHJvZHVjZWQgaW4gdGhlIHByZXZpb3VzIGNvbW1pdC4KUmF0aGVyIHRo YW4gb3duaW5nIGEgY29weSBvZiB0dXBsZSBoZWFkZXJzLCBIZWFwUGFnZUJhdGNoIGhvbGRzIGEK cG9pbnRlciBpbnRvIHNjYW4tPnJzX3Zpc3R1cGxlc1tdIGZvciB0aGUgY3VycmVudCBzbGljZSBh bmQgYSBidWZmZXIKcGluIGZvciB0aGUgY3VycmVudCBwYWdlLgoKaGVhcF9nZXRuZXh0YmF0Y2go KSBjYWxscyBoZWFwX3ByZXBhcmVfcGFnZXNjYW4oKSB0byBwb3B1bGF0ZQpyc192aXN0dXBsZXNb XSBmb3IgZWFjaCBuZXcgcGFnZSwgdGhlbiByZS1wb2ludHMgaGItPnR1cGxlcyB0byB0aGUKbmV4 dCBzbGljZSBvZiByc192aXN0dXBsZXNbXSBvbiBlYWNoIGNhbGwuICBJZiB0aGUgcGFnZSBoYXMg bW9yZQp0dXBsZXMgdGhhbiB0aGUgZXhlY3V0b3IncyBtYXhfcm93cywgc3Vic2VxdWVudCBjYWxs cyByZXR1cm4gdGhlCm5leHQgc2xpY2Ugd2l0aG91dCByZS1lbnRlcmluZyBwYWdlIHByZXBhcmF0 aW9uLiAgVGhlIGJ1ZmZlciBwaW4gaXMKaGVsZCB1bnRpbCB0aGUgcGFnZSBpcyBmdWxseSBjb25z dW1lZC4KCnNjYW5fYmVnaW5fYmF0Y2ggY3JlYXRlcyBhIHNpbmdsZSBUdXBsZVRhYmxlU2xvdCB3 aXRoClRUU09wc0J1ZmZlckhlYXBUdXBsZSBvcHMuICBoZWFwX3JlcG9pbnRfc2xvdCgpIHJlLXBv aW50cyB0aGlzIHNsb3QKdG8gZWFjaCB0dXBsZSBpbiB0dXJuIHZpYSBFeGVjU3RvcmVCdWZmZXJI ZWFwVHVwbGUoKS4gIENvbnN1bWVycwp0aGF0IG5lZWQgdG8gcmV0YWluIHRoZSBzbG90IGFjcm9z cyBjYWxscyByZWx5IG9uIHRoZSBub3JtYWwgc2xvdAptYXRlcmlhbGl6YXRpb24gY29udHJhY3Qu CgpSZXZpZXdlZC1ieTogRGFuaWlsIERhdnlkb3YgPDNkYW5pc3NpbW9AZ21haWwuY29tPgpSZXZp ZXdlZC1ieTogQ2hhbmdBbyBDaGVuIDwyNjI0MzQ1NTA3QHFxLmNvbT4KRGlzY3Vzc2lvbjogaHR0 cHM6Ly9wb3N0Z3IuZXMvbS9DQStIaXdxRmZBWV9aRnFOOHdjQUVNdzcxVDloTV9rQThVdHlIYVpa RVp0dVQzVXlvZ0FAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW0uYyAgICAgICAgIHwgMjI5ICsrKysrKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIHwgICA4ICstCiBzcmMvaW5jbHVkZS9hY2Nl c3MvaGVhcGFtLmggICAgICAgICAgICAgIHwgIDMzICsrKysKIHNyYy9pbmNsdWRlL2FjY2Vzcy90 YWJsZWFtLmggICAgICAgICAgICAgfCAxMzYgKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL3Bn c3RhdC5oICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIDUgZmlsZXMgY2hhbmdlZCwgNDAz IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvaGVhcGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwpp bmRleCBjNmQwYWFjYzVjOS4uZTcwYzBjY2JlODIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5j CkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYXRhYmFzZS5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfZGF0YWJhc2VfZC5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1 bS5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNSb3dCYXRjaC5oIgogI2luY2x1ZGUgInBnc3Rh dC5oIgogI2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xt Z3IuaCIKQEAgLTEwOSw2ICsxMTAsNyBAQCBzdGF0aWMgaW50CWJvdHRvbXVwX3NvcnRfYW5kX3No cmluayhUTV9JbmRleERlbGV0ZU9wICpkZWxzdGF0ZSk7CiBzdGF0aWMgWExvZ1JlY1B0ciBsb2df aGVhcF9uZXdfY2lkKFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGUgdHVwKTsKIHN0YXRpYyBI ZWFwVHVwbGUgRXh0cmFjdFJlcGxpY2FJZGVudGl0eShSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1 cGxlIHRwLCBib29sIGtleV9yZXF1aXJlZCwKIAkJCQkJCQkJCQlib29sICpjb3B5KTsKK3N0YXRp YyB2b2lkIGhlYXBfcmVwb2ludF9zbG90KFJvd0JhdGNoICpiLCBpbnQgaWR4KTsKIAogCiAvKgpA QCAtMTIxMyw3ICsxMjE1LDcgQEAgaGVhcF9iZWdpbnNjYW4oUmVsYXRpb24gcmVsYXRpb24sIFNu YXBzaG90IHNuYXBzaG90LAogCXNjYW4tPnJzX2NidWYgPSBJbnZhbGlkQnVmZmVyOwogCiAJLyoK LQkgKiBEaXNhYmxlIHBhZ2UtYXQtYS10aW1lIG1vZGUgaWYgaXQncyBub3QgYSBNVkNDLXNhZmUg c25hcHNob3QuCisJICogRGlzYWJsZSBwYWdlLWF0LWEtdGltZSBtb2RlIGlmIHRoZSBzbmFwc2hv dCBkb2VzIG5vdCBhbGxvdyBpdC4KIAkgKi8KIAlpZiAoIShzbmFwc2hvdCAmJiBJc01WQ0NTbmFw c2hvdChzbmFwc2hvdCkpKQogCQlzY2FuLT5yc19iYXNlLnJzX2ZsYWdzICY9IH5TT19BTExPV19Q QUdFTU9ERTsKQEAgLTE0NjMsNyArMTQ2NSw3IEBAIGhlYXBfZ2V0bmV4dChUYWJsZVNjYW5EZXNj IHNzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAkgKiB0aGUgcHJvcGVyIHJldHVybiBi dWZmZXIgYW5kIHJldHVybiB0aGUgdHVwbGUuCiAJICovCiAKLQlwZ3N0YXRfY291bnRfaGVhcF9n ZXRuZXh0KHNjYW4tPnJzX2Jhc2UucnNfcmQpOworCXBnc3RhdF9jb3VudF9oZWFwX2dldG5leHQo c2Nhbi0+cnNfYmFzZS5yc19yZCwgMSk7CiAKIAlyZXR1cm4gJnNjYW4tPnJzX2N0dXA7CiB9CkBA IC0xNDkxLDEzICsxNDkzLDIzMiBAQCBoZWFwX2dldG5leHRzbG90KFRhYmxlU2NhbkRlc2Mgc3Nj YW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLCBUdXBsZVRhYmxlU2xvdCAqcwogCSAqIHRoZSBw cm9wZXIgcmV0dXJuIGJ1ZmZlciBhbmQgcmV0dXJuIHRoZSB0dXBsZS4KIAkgKi8KIAotCXBnc3Rh dF9jb3VudF9oZWFwX2dldG5leHQoc2Nhbi0+cnNfYmFzZS5yc19yZCk7CisJcGdzdGF0X2NvdW50 X2hlYXBfZ2V0bmV4dChzY2FuLT5yc19iYXNlLnJzX3JkLCAxKTsKIAogCUV4ZWNTdG9yZUJ1ZmZl ckhlYXBUdXBsZSgmc2Nhbi0+cnNfY3R1cCwgc2xvdCwKIAkJCQkJCQkgc2Nhbi0+cnNfY2J1Zik7 CiAJcmV0dXJuIHRydWU7CiB9CiAKKy8qLS0tLS0tLS0tLSBCYXRjaGluZyBzdXBwb3J0IC0tLS0t LS0tLS0tKi8KKworc3RhdGljIGNvbnN0IFJvd0JhdGNoT3BzIFJvd0JhdGNoSGVhcE9wcyA9Cit7 CisJLnJlcG9pbnRfc2xvdCA9IGhlYXBfcmVwb2ludF9zbG90Cit9OworCisvKgorICogaGVhcF9i YXRjaF9mZWFzaWJsZQorICoJCUJhdGNoaW5nIHJlcXVpcmVzIGEgTVZDQyBzbmFwc2hvdCBzaW5j ZSBpdCByZWxpZXMgb24KKyAqCQlwYWdlLWF0LWEtdGltZSBtb2RlLCB3aGljaCBoZWFwX2JlZ2lu c2NhbigpIGRpc2FibGVzIGZvcgorICoJCW5vbi1NVkNDIHNuYXBzaG90cy4KKyAqLworYm9vbAor aGVhcF9iYXRjaF9mZWFzaWJsZShSZWxhdGlvbiByZWxhdGlvbiwgU25hcHNob3Qgc25hcHNob3Qp Cit7CisJcmV0dXJuIHNuYXBzaG90ICYmIElzTVZDQ1NuYXBzaG90KHNuYXBzaG90KTsKK30KKwor LyoKKyAqIGhlYXBfYmVnaW5fYmF0Y2gKKyAqCQlJbml0aWFsaXplIEFNLXNpZGUgYmF0Y2ggc3Rh dGUgZm9yIGEgaGVhcCBzY2FuLgorICoKKyAqIEFsbG9jYXRlcyBhIEhlYXBQYWdlQmF0Y2gsIHdo aWNoIGFjdHMgYXMgYSB0aGluIHNsaWNlIGRlc2NyaXB0b3Igb3ZlcgorICogdGhlIHNjYW4ncyBy c192aXN0dXBsZXNbXSBhcnJheS4gIFVubGlrZSB0aGUgcHJldmlvdXMgdmVyc2lvbiB0aGVyZSBp cworICogbm8gc2VwYXJhdGUgdHVwbGUgaGVhZGVyIHN0b3JhZ2UgaW4gSGVhcFBhZ2VCYXRjaCBp dHNlbGY7IHJzX3Zpc3R1cGxlc1tdCisgKiBpbiBIZWFwU2NhbkRlc2NEYXRhIChwb3B1bGF0ZWQg YnkgcGFnZV9jb2xsZWN0X3R1cGxlcygpIHZpYQorICogaGVhcF9wcmVwYXJlX3BhZ2VzY2FuKCkp IHNlcnZlcyBhcyB0aGUgcGFnZS1sZXZlbCBidWZmZXIuICBIZWFwUGFnZUJhdGNoCisgKiBob2xk cyBhIHBvaW50ZXIgaW50byB0aGF0IGFycmF5IGZvciB0aGUgY3VycmVudCBzbGljZSBhbmQgdGhl IGJ1ZmZlciBwaW4KKyAqIGZvciB0aGUgY3VycmVudCBwYWdlLgorICoKKyAqIGItPnNsb3QgbXVz dCBiZSBhIFRUU09wc0J1ZmZlckhlYXBUdXBsZSBzbG90LgorICovCit2b2lkCitoZWFwX2JlZ2lu X2JhdGNoKFRhYmxlU2NhbkRlc2Mgc3NjYW4sIFJvd0JhdGNoICpiKQoreworCUhlYXBQYWdlQmF0 Y2ggICpoYjsKKworCS8qIEJhdGNoIHBhdGggcmVsaWVzIG9uIGV4ZWN1dG9yLWxldmVsIHF1YWwg ZXZhbCwgbm90IEFNIHNjYW4ga2V5cyAqLworCUFzc2VydChzc2Nhbi0+cnNfbmtleXMgPT0gMCk7 CisJQXNzZXJ0KFRUU19JU19CVUZGRVJUVVBMRShiLT5zbG90KSk7CisKKwloYiA9IHBhbGxvYyhz aXplb2YoSGVhcFBhZ2VCYXRjaCkpOworCWhiLT50dXBsZXMgPSBOVUxMOworCWhiLT5udHVwbGVz ID0gMDsKKwloYi0+bmV4dGl0ZW0gPSAwOworCWhiLT5idWYgPSBJbnZhbGlkQnVmZmVyOworCisJ Yi0+YW1fcGF5bG9hZCA9IGhiOworCWItPm9wcyA9ICZSb3dCYXRjaEhlYXBPcHM7Cit9CisKKy8q CisgKiBoZWFwX3Jlc2V0X2JhdGNoCisgKgkJUmVsZWFzZSBwaW4gYW5kIHJlc2V0IGZvciByZXNj YW4sIGtlZXBpbmcgYWxsb2NhdGlvbnMuCisgKi8KK3ZvaWQKK2hlYXBfcmVzZXRfYmF0Y2goVGFi bGVTY2FuRGVzYyBzc2NhbiwgUm93QmF0Y2ggKmIpCit7CisJSGVhcFBhZ2VCYXRjaCAgKmhiID0g KEhlYXBQYWdlQmF0Y2ggKikgYi0+YW1fcGF5bG9hZDsKKworCUFzc2VydChoYiAhPSBOVUxMKTsK KwlpZiAoQnVmZmVySXNWYWxpZChoYi0+YnVmKSkKKwl7CisJCVJlbGVhc2VCdWZmZXIoaGItPmJ1 Zik7CisJCWhiLT5idWYgPSBJbnZhbGlkQnVmZmVyOworCX0KKwloYi0+bnR1cGxlcyA9IDA7CisJ aGItPm5leHRpdGVtID0gMDsKK30KKworLyoKKyAqIGhlYXBfZW5kX2JhdGNoCisgKgkJUmVsZWFz ZSBhbGwgYmF0Y2ggcmVzb3VyY2VzLgorICovCit2b2lkCitoZWFwX2VuZF9iYXRjaChUYWJsZVNj YW5EZXNjIHNzY2FuLCBSb3dCYXRjaCAqYikKK3sKKwlIZWFwUGFnZUJhdGNoICAqaGIgPSAoSGVh cFBhZ2VCYXRjaCAqKSBiLT5hbV9wYXlsb2FkOworCisJaWYgKEJ1ZmZlcklzVmFsaWQoaGItPmJ1 ZikpCisJCVJlbGVhc2VCdWZmZXIoaGItPmJ1Zik7CisKKwlwZnJlZShoYik7CisJYi0+YW1fcGF5 bG9hZCA9IE5VTEw7Cit9CisKKy8qCisgKiBoZWFwX2dldG5leHRiYXRjaAorICoJCUZldGNoIHRo ZSBuZXh0IHNsaWNlIG9mIHZpc2libGUgdHVwbGVzIGZyb20gYSBoZWFwIHNjYW4uCisgKgorICog U2VydmVzIHNsaWNlcyBmcm9tIHRoZSBjdXJyZW50IHBhZ2UncyByc192aXN0dXBsZXNbXSBhcnJh eS4gIElmIHRoZQorICogY3VycmVudCBwYWdlIGhhcyByZW1haW5pbmcgdHVwbGVzLCBzZXRzIGhi LT50dXBsZXMgdG8gcG9pbnQgYXQgdGhlIG5leHQKKyAqIHNsaWNlIHdpdGhvdXQgcmUtZW50ZXJp bmcgdGhlIHBhZ2Ugc2Nhbi4gIElmIHRoZSBwYWdlIGlzIGV4aGF1c3RlZCwKKyAqIGFkdmFuY2Vz IHRvIHRoZSBuZXh0IHBhZ2UgdmlhIGhlYXBfZmV0Y2hfbmV4dF9idWZmZXIoKSwgcHJlcGFyZXMg aXQKKyAqIHdpdGggaGVhcF9wcmVwYXJlX3BhZ2VzY2FuKCksIGFuZCBzZXJ2ZXMgdGhlIGZpcnN0 IHNsaWNlIGZyb20gaXQuCisgKgorICogaGItPnR1cGxlcyBwb2ludHMgZGlyZWN0bHkgaW50byBz Y2FuLT5yc192aXN0dXBsZXNbXTsgdGhlIGVudHJpZXMgcmVtYWluCisgKiB2YWxpZCBhcyBsb25n IGFzIGhiLT5idWYgKHRoZSBwYWdlJ3MgYnVmZmVyIHBpbikgaXMgaGVsZC4gIFRoZSBwaW4gaXMK KyAqIHJlbGVhc2VkIGF0IHRoZSB0b3Agb2YgdGhlIG5leHQgY2FsbCBvbmNlIHRoZSBwYWdlIGlz IGZ1bGx5IGNvbnN1bWVkLgorICoKKyAqIEVhY2ggY2FsbCByZXR1cm5zIGF0IG1vc3QgYi0+bWF4 X3Jvd3MgdHVwbGVzLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0dXBsZXMgd2VyZSBmZXRjaGVk LCBmYWxzZSBhdCBlbmQgb2Ygc2Nhbi4KKyAqLworYm9vbAoraGVhcF9nZXRuZXh0YmF0Y2goVGFi bGVTY2FuRGVzYyBzc2NhbiwgUm93QmF0Y2ggKmIsIFNjYW5EaXJlY3Rpb24gZGlyKQoreworCUhl YXBTY2FuRGVzYwlzY2FuID0gKEhlYXBTY2FuRGVzYykgc3NjYW47CisJSGVhcFBhZ2VCYXRjaCAg KmhiID0gKEhlYXBQYWdlQmF0Y2ggKikgYi0+YW1fcGF5bG9hZDsKKwlpbnQJCQkJcmVtYWluaW5n OworCWludAkJCQluc2VydmU7CisKKwlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIp KTsKKwlBc3NlcnQoc3NjYW4tPnJzX2ZsYWdzICYgU09fQUxMT1dfUEFHRU1PREUpOworCisJLyoK KwkgKiBUcnkgdG8gc2VydmUgZnJvbSB0aGUgY3VycmVudCBwYWdlIGZpcnN0LiAgTm8gcGFnZSBh ZHZhbmNlLCBubyBidWZmZXIKKwkgKiBtYW5hZ2VtZW50LCBubyByZS1lbnRyeSBpbnRvIGhlYXAg Y29kZS4KKwkgKi8KKwlyZW1haW5pbmcgPSBzY2FuLT5yc19udHVwbGVzIC0gaGItPm5leHRpdGVt OworCWlmIChyZW1haW5pbmcgPiAwKQorCXsKKwkJbnNlcnZlID0gTWluKHJlbWFpbmluZywgYi0+ bWF4X3Jvd3MpOworCisJCWhiLT50dXBsZXMgPSAmc2Nhbi0+cnNfdmlzdHVwbGVzW2hiLT5uZXh0 aXRlbV07CisJCWhiLT5udHVwbGVzID0gbnNlcnZlOworCQloYi0+bmV4dGl0ZW0gKz0gbnNlcnZl OworCisJCWItPm5yb3dzID0gbnNlcnZlOworCQliLT5wb3MgPSAwOworCisJCXBnc3RhdF9jb3Vu dF9oZWFwX2dldG5leHQoc3NjYW4tPnJzX3JkLCBuc2VydmUpOworCQlyZXR1cm4gdHJ1ZTsKKwl9 CisKKwkvKgorCSAqIEN1cnJlbnQgcGFnZSBleGhhdXN0ZWQuICBBZHZhbmNlIHRvIHRoZSBuZXh0 IHBhZ2Ugd2l0aCB2aXNpYmxlIHR1cGxlcy4KKwkgKi8KKwlmb3IgKDs7KQorCXsKKwkJLyoKKwkJ ICogUmVsZWFzZSB0aGUgcHJldmlvdXMgcGFnZSdzIHBpbi4gIFRoZSBwYWdlIGlzIGZ1bGx5IGNv bnN1bWVkIGF0CisJCSAqIHRoaXMgcG9pbnQgLS0gYWxsIHNsaWNlcyBoYXZlIGJlZW4gc2VydmVk LgorCQkgKi8KKwkJaWYgKEJ1ZmZlcklzVmFsaWQoaGItPmJ1ZikpCisJCXsKKwkJCVJlbGVhc2VC dWZmZXIoaGItPmJ1Zik7CisJCQloYi0+YnVmID0gSW52YWxpZEJ1ZmZlcjsKKwkJfQorCisJCWhl YXBfZmV0Y2hfbmV4dF9idWZmZXIoc2NhbiwgZGlyKTsKKworCQlpZiAoIUJ1ZmZlcklzVmFsaWQo c2Nhbi0+cnNfY2J1ZikpCisJCXsKKwkJCS8qIEVuZCBvZiBzY2FuICovCisJCQlzY2FuLT5yc19j YmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCQlzY2FuLT5yc19wcmVmZXRjaF9ibG9jayA9 IEludmFsaWRCbG9ja051bWJlcjsKKwkJCXNjYW4tPnJzX2luaXRlZCA9IGZhbHNlOworCQkJYi0+ bnJvd3MgPSAwOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJQXNzZXJ0KEJ1ZmZlckdldEJs b2NrTnVtYmVyKHNjYW4tPnJzX2NidWYpID09IHNjYW4tPnJzX2NibG9jayk7CisKKwkJLyoKKwkJ ICogUHJlcGFyZSB0aGUgcGFnZTogcHJ1bmUsIHJ1biB2aXNpYmlsaXR5IGNoZWNrcywgYW5kIHBv cHVsYXRlCisJCSAqIHNjYW4tPnJzX3Zpc3R1cGxlc1swLi5yc19udHVwbGVzLTFdIHZpYSBwYWdl X2NvbGxlY3RfdHVwbGVzKCkuCisJCSAqLworCQloZWFwX3ByZXBhcmVfcGFnZXNjYW4oc3NjYW4p OworCisJCWlmIChzY2FuLT5yc19udHVwbGVzID4gMCkKKwkJeworCQkJLyoKKwkJCSAqIFBpbiB0 aGUgcGFnZSBzbyB0dXBsZSBkYXRhIHN0YXlzIHZhbGlkIHdoaWxlIHRoZSBleGVjdXRvcgorCQkJ ICogcHJvY2Vzc2VzIHNsaWNlcy4gIFJlbGVhc2VkIGF0IHRoZSB0b3Agb2YgdGhlIG5leHQgY2Fs bAorCQkJICogb25jZSB0aGUgcGFnZSBpcyBmdWxseSBjb25zdW1lZC4KKwkJCSAqLworCQkJSW5j ckJ1ZmZlclJlZkNvdW50KHNjYW4tPnJzX2NidWYpOworCQkJaGItPmJ1ZiA9IHNjYW4tPnJzX2Ni dWY7CisKKwkJCW5zZXJ2ZSA9IE1pbihzY2FuLT5yc19udHVwbGVzLCBiLT5tYXhfcm93cyk7CisK KwkJCWhiLT50dXBsZXMgPSAmc2Nhbi0+cnNfdmlzdHVwbGVzWzBdOworCQkJaGItPm50dXBsZXMg PSBuc2VydmU7CisJCQloYi0+bmV4dGl0ZW0gPSBuc2VydmU7CisKKwkJCWItPm5yb3dzID0gbnNl cnZlOworCQkJYi0+cG9zID0gMDsKKworCQkJcGdzdGF0X2NvdW50X2hlYXBfZ2V0bmV4dChzc2Nh bi0+cnNfcmQsIG5zZXJ2ZSk7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCS8qIEVtcHR5IHBh Z2UgKGFsbCBkZWFkL2ludmlzaWJsZSB0dXBsZXMpLCB0cnkgbmV4dCAqLworCX0KK30KKworLyoK KyAqIGhlYXBfcmVwb2ludF9zbG90CisgKgkJUmUtcG9pbnQgdGhlIGJhdGNoJ3Mgc2luZ2xlIHNs b3QgdG8gdGhlIHR1cGxlIGF0IGluZGV4IGlkeC4KKyAqCisgKiBDYWxsZWQgYnkgUm93QmF0Y2hH ZXROZXh0U2xvdCgpIGZvciBlYWNoIHR1cGxlIHNlcnZlZCB0byB0aGUgcGFyZW50CisgKiBub2Rl LiAgaGItPnR1cGxlc1tpZHhdIHdhcyBwb3B1bGF0ZWQgYnkgcGFnZV9jb2xsZWN0X3R1cGxlcygp IHZpYQorICogaGVhcF9wcmVwYXJlX3BhZ2VzY2FuKCkgYW5kIHJlbWFpbnMgdmFsaWQgYXMgbG9u ZyBhcyBoYi0+YnVmIGlzIHBpbm5lZC4KKyAqLworc3RhdGljIHZvaWQKK2hlYXBfcmVwb2ludF9z bG90KFJvd0JhdGNoICpiLCBpbnQgaWR4KQoreworCUhlYXBQYWdlQmF0Y2gJCSpoYiA9IChIZWFw UGFnZUJhdGNoICopIGItPmFtX3BheWxvYWQ7CisKKwlBc3NlcnQoaWR4ID49IDAgJiYgaWR4IDwg aGItPm50dXBsZXMpOworCUFzc2VydChUVFNfSVNfQlVGRkVSVFVQTEUoYi0+c2xvdCkpOworCisJ RXhlY1N0b3JlQnVmZmVySGVhcFR1cGxlKCZoYi0+dHVwbGVzW2lkeF0sIGItPnNsb3QsIGhiLT5i dWYpOworfQorCisvKi0tLS0tIEVuZCBvZiBiYXRjaGluZyBzdXBwb3J0IC0tLS0tKi8KKwogdm9p ZAogaGVhcF9zZXRfdGlkcmFuZ2UoVGFibGVTY2FuRGVzYyBzc2NhbiwgSXRlbVBvaW50ZXIgbWlu dGlkLAogCQkJCSAgSXRlbVBvaW50ZXIgbWF4dGlkKQpAQCAtMTYzOSw3ICsxODYwLDcgQEAgaGVh cF9nZXRuZXh0c2xvdF90aWRyYW5nZShUYWJsZVNjYW5EZXNjIHNzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbiwKIAkgKiBpZiB3ZSBnZXQgaGVyZSBpdCBtZWFucyB3ZSBoYXZlIGEgbmV3IGN1 cnJlbnQgc2NhbiB0dXBsZSwgc28gcG9pbnQgdG8KIAkgKiB0aGUgcHJvcGVyIHJldHVybiBidWZm ZXIgYW5kIHJldHVybiB0aGUgdHVwbGUuCiAJICovCi0JcGdzdGF0X2NvdW50X2hlYXBfZ2V0bmV4 dChzY2FuLT5yc19iYXNlLnJzX3JkKTsKKwlwZ3N0YXRfY291bnRfaGVhcF9nZXRuZXh0KHNjYW4t PnJzX2Jhc2UucnNfcmQsIDEpOwogCiAJRXhlY1N0b3JlQnVmZmVySGVhcFR1cGxlKCZzY2FuLT5y c19jdHVwLCBzbG90LCBzY2FuLT5yc19jYnVmKTsKIAlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IDJmZDEyMDAyOGJiLi44MTI0ZDU3M2Fj MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC0yMzQ4LDcg KzIzNDgsNyBAQCBoZWFwYW1fc2Nhbl9zYW1wbGVfbmV4dF90dXBsZShUYWJsZVNjYW5EZXNjIHNj YW4sIFNhbXBsZVNjYW5TdGF0ZSAqc2NhbnN0YXRlLAogCQkJRXhlY1N0b3JlQnVmZmVySGVhcFR1 cGxlKHR1cGxlLCBzbG90LCBoc2Nhbi0+cnNfY2J1Zik7CiAKIAkJCS8qIENvdW50IHN1Y2Nlc3Nm dWxseS1mZXRjaGVkIHR1cGxlcyBhcyBoZWFwIGZldGNoZXMgKi8KLQkJCXBnc3RhdF9jb3VudF9o ZWFwX2dldG5leHQoc2Nhbi0+cnNfcmQpOworCQkJcGdzdGF0X2NvdW50X2hlYXBfZ2V0bmV4dChz Y2FuLT5yc19yZCwgMSk7CiAKIAkJCXJldHVybiB0cnVlOwogCQl9CkBAIC0yNjM3LDYgKzI2Mzcs MTIgQEAgc3RhdGljIGNvbnN0IFRhYmxlQW1Sb3V0aW5lIGhlYXBhbV9tZXRob2RzID0gewogCS5z Y2FuX3Jlc2NhbiA9IGhlYXBfcmVzY2FuLAogCS5zY2FuX2dldG5leHRzbG90ID0gaGVhcF9nZXRu ZXh0c2xvdCwKIAorCS5zY2FuX2JhdGNoX2ZlYXNpYmxlID0gaGVhcF9iYXRjaF9mZWFzaWJsZSwK Kwkuc2Nhbl9iZWdpbl9iYXRjaCA9IGhlYXBfYmVnaW5fYmF0Y2gsCisJLnNjYW5fZ2V0bmV4dGJh dGNoID0gaGVhcF9nZXRuZXh0YmF0Y2gsCisJLnNjYW5fZW5kX2JhdGNoID0gaGVhcF9lbmRfYmF0 Y2gsCisJLnNjYW5fcmVzZXRfYmF0Y2ggPSBoZWFwX3Jlc2V0X2JhdGNoLAorCiAJLnNjYW5fc2V0 X3RpZHJhbmdlID0gaGVhcF9zZXRfdGlkcmFuZ2UsCiAJLnNjYW5fZ2V0bmV4dHNsb3RfdGlkcmFu Z2UgPSBoZWFwX2dldG5leHRzbG90X3RpZHJhbmdlLAogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggMDli OTU2NmQwYWMuLjA3ODNmYTEzYzRjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVh cGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0xMDcsNiArMTA3LDMy IEBAIHR5cGVkZWYgc3RydWN0IEhlYXBTY2FuRGVzY0RhdGEKIH0gSGVhcFNjYW5EZXNjRGF0YTsK IHR5cGVkZWYgc3RydWN0IEhlYXBTY2FuRGVzY0RhdGEgKkhlYXBTY2FuRGVzYzsKIAorLyoKKyAq IEhlYXBQYWdlQmF0Y2ggLS0gaGVhcGFtLXByaXZhdGUgcGFnZS1sZXZlbCBiYXRjaCBzdGF0ZS4K KyAqCisgKiBUaGluIHNsaWNlIGRlc2NyaXB0b3Igb3ZlciB0aGUgc2NhbidzIHJzX3Zpc3R1cGxl c1tdIGFycmF5LiAgUmF0aGVyCisgKiB0aGFuIG93bmluZyBhIGNvcHkgb2YgdHVwbGUgaGVhZGVy cywgSGVhcFBhZ2VCYXRjaCBob2xkcyBhIHBvaW50ZXIKKyAqIGludG8gc2Nhbi0+cnNfdmlzdHVw bGVzW10gZm9yIHRoZSBjdXJyZW50IHNsaWNlLCB3aGljaCB3YXMgcG9wdWxhdGVkCisgKiBieSBw YWdlX2NvbGxlY3RfdHVwbGVzKCkgZHVyaW5nIGhlYXBfcHJlcGFyZV9wYWdlc2NhbigpLgorICoK KyAqIFRoZSBleGVjdXRvciBjb25zdW1lcyB0dXBsZXMgaW4gc2xpY2VzLiAgRWFjaCBoZWFwX2dl dG5leHRiYXRjaCBjYWxsCisgKiByZS1wb2ludHMgdHVwbGVzIHRvIHRoZSBuZXh0IHNsaWNlIGFu ZCBhZHZhbmNlcyBuZXh0aXRlbSwgc2VydmluZyB1cAorICogdG8gUm93QmF0Y2gubWF4X3Jvd3Mg dHVwbGVzIGZyb20gdGhlIGN1cnJlbnQgcGFnZSBiZWZvcmUgYWR2YW5jaW5nCisgKiB0byB0aGUg bmV4dC4KKyAqCisgKiBidWYgaG9sZHMgdGhlIHBpbiBmb3IgdGhlIGN1cnJlbnQgcGFnZS4gIHR1 cGxlIGRhdGEgcmVmZXJlbmNlZCB2aWEKKyAqIHR1cGxlcyByZW1haW5zIHZhbGlkIGFzIGxvbmcg YXMgYnVmIGlzIHBpbm5lZC4KKyAqCisgKiBTdG9yZWQgaW4gUm93QmF0Y2guYW1fcGF5bG9hZC4K KyAqLwordHlwZWRlZiBzdHJ1Y3QgSGVhcFBhZ2VCYXRjaAoreworCUhlYXBUdXBsZURhdGEgICp0 dXBsZXM7CQkvKiBwb2ludHMgaW50byBzY2FuLT5yc192aXN0dXBsZXNbbmV4dGl0ZW1dICovCisJ aW50CQkJCW50dXBsZXM7CS8qIHR1cGxlcyBpbiBjdXJyZW50IHNsaWNlICovCisJaW50CQkJCW5l eHRpdGVtOwkvKiBuZXh0IHVuc2VydmVkIHR1cGxlIGluZGV4IGluIHJzX3Zpc3R1cGxlc1tdICov CisJQnVmZmVyCQkJYnVmOwkJLyogcGlubmVkIGJ1ZmZlciBmb3IgY3VycmVudCBwYWdlICovCit9 IEhlYXBQYWdlQmF0Y2g7CisKIHR5cGVkZWYgc3RydWN0IEJpdG1hcEhlYXBTY2FuRGVzY0RhdGEK IHsKIAlIZWFwU2NhbkRlc2NEYXRhIHJzX2hlYXBfYmFzZTsKQEAgLTM2Miw2ICszODgsMTMgQEAg ZXh0ZXJuIHZvaWQgaGVhcF9lbmRzY2FuKFRhYmxlU2NhbkRlc2Mgc3NjYW4pOwogZXh0ZXJuIEhl YXBUdXBsZSBoZWFwX2dldG5leHQoVGFibGVTY2FuRGVzYyBzc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXJlY3Rpb24pOwogZXh0ZXJuIGJvb2wgaGVhcF9nZXRuZXh0c2xvdChUYWJsZVNjYW5EZXNjIHNz Y2FuLAogCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwgVHVwbGVUYWJsZVNsb3QgKnNs b3QpOworCitleHRlcm4gYm9vbCBoZWFwX2JhdGNoX2ZlYXNpYmxlKFJlbGF0aW9uIHJlbGF0aW9u LCBTbmFwc2hvdCBzbmFwc2hvdCk7CitleHRlcm4gdm9pZCBoZWFwX2JlZ2luX2JhdGNoKFRhYmxl U2NhbkRlc2Mgc3NjYW4sIFJvd0JhdGNoICpiYXRjaCk7CitleHRlcm4gYm9vbCBoZWFwX2dldG5l eHRiYXRjaChUYWJsZVNjYW5EZXNjIHNzY2FuLCBSb3dCYXRjaCAqYmF0Y2gsIFNjYW5EaXJlY3Rp b24gZGlyKTsKK2V4dGVybiB2b2lkIGhlYXBfZW5kX2JhdGNoKFRhYmxlU2NhbkRlc2Mgc3NjYW4s IFJvd0JhdGNoICpiYXRjaCk7CitleHRlcm4gdm9pZCBoZWFwX3Jlc2V0X2JhdGNoKFRhYmxlU2Nh bkRlc2Mgc3NjYW4sIFJvd0JhdGNoICpiYXRjaCk7CisKIGV4dGVybiB2b2lkIGhlYXBfc2V0X3Rp ZHJhbmdlKFRhYmxlU2NhbkRlc2Mgc3NjYW4sIEl0ZW1Qb2ludGVyIG1pbnRpZCwKIAkJCQkJCQkg IEl0ZW1Qb2ludGVyIG1heHRpZCk7CiBleHRlcm4gYm9vbCBoZWFwX2dldG5leHRzbG90X3RpZHJh bmdlKFRhYmxlU2NhbkRlc2Mgc3NjYW4sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv dGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCAwNjA4NDc1MjI0 NS4uYTcyYmUxMTFjMjYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgK KysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAtMjc1LDYgKzI3NSw4IEBAIHR5 cGVkZWYgdm9pZCAoKkluZGV4QnVpbGRDYWxsYmFjaykgKFJlbGF0aW9uIGluZGV4LAogCQkJCQkJ CQkJYm9vbCB0dXBsZUlzQWxpdmUsCiAJCQkJCQkJCQl2b2lkICpzdGF0ZSk7CiAKK3R5cGVkZWYg c3RydWN0IFJvd0JhdGNoIFJvd0JhdGNoOworCiAvKgogICogQVBJIHN0cnVjdCBmb3IgYSB0YWJs ZSBBTS4gIE5vdGUgdGhpcyBtdXN0IGJlIGFsbG9jYXRlZCBpbiBhCiAgKiBzZXJ2ZXItbGlmZXRp bWUgbWFubmVyLCB0eXBpY2FsbHkgYXMgYSBzdGF0aWMgY29uc3Qgc3RydWN0LCB3aGljaCB0aGVu IGdldHMKQEAgLTM1MSw2ICszNTMsNTYgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUK IAkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkJCQkJCSBUdXBsZVRhYmxl U2xvdCAqc2xvdCk7CiAKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiBCYXRjaGVkIHNjYW4gc3Vw cG9ydAorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqLworCisJLyoKKwkgKiBSZXR1cm5zIHRydWUg aWYgdGhlIEFNIGNhbiBzdXBwb3J0IGJhdGNoaW5nIGZvciBhIHNjYW4gd2l0aCB0aGUKKwkgKiBn aXZlbiBzbmFwc2hvdC4gIENhbGxlZCBhdCBwbGFuIGluaXQgdGltZSBiZWZvcmUgdGhlIHNjYW4g ZGVzY3JpcHRvcgorCSAqIGV4aXN0cy4gIEFNcyB0aGF0IGhhdmUgbm8gc25hcHNob3QtYmFzZWQg cmVzdHJpY3Rpb25zIGNhbiBvbWl0IHRoaXMKKwkgKiBjYWxsYmFjaywgaW4gd2hpY2ggY2FzZSBi YXRjaGluZyBpcyBjb25zaWRlcmVkIGZlYXNpYmxlLgorCSAqLworCWJvb2wJCSgqc2Nhbl9iYXRj aF9mZWFzaWJsZSkoUmVsYXRpb24gcmVsYXRpb24sIFNuYXBzaG90IHNuYXBzaG90KTsKKworCS8q CisJICogSW5pdGlhbGl6ZSBBTS1vd25lZCBiYXRjaCBzdGF0ZSBmb3IgYSBzY2FuLiAgQ2FsbGVk IG9uY2UgYmVmb3JlCisJICogdGhlIGZpcnN0IHNjYW5fZ2V0bmV4dGJhdGNoIGNhbGwuICBUaGUg QU0gYWxsb2NhdGVzIHdoYXRldmVyCisJICogcHJpdmF0ZSBzdGF0ZSBpdCBuZWVkcyBhbmQgc3Rv cmVzIGl0IGluIGItPmFtX3BheWxvYWQuICBiLT5zbG90CisJICogaXMgdGhlIHNjYW4gbm9kZSdz IHNzX1NjYW5UdXBsZVNsb3QsIHdob3NlIHR5cGUgd2FzIGFscmVhZHkKKwkgKiBkZXRlcm1pbmVk IGJ5IHRoZSBBTSB2aWEgdGFibGVfc2xvdF9jYWxsYmFja3MoKS4gIFRoZSBBTSdzCisJICogcmVw b2ludF9zbG90IGNhbGxiYWNrIHJlLXBvaW50cyBpdCB0byBlYWNoIHR1cGxlIGluIHRoZSBiYXRj aAorCSAqIGluIHR1cm4uICBGdXR1cmUgaW50ZXJmYWNlcyBtYXkgYWxsb3cgdGhlIEFNIHRvIGV4 cG9zZSBiYXRjaAorCSAqIGRhdGEgaW4gb3RoZXIgZm9ybXMgd2l0aG91dCBnb2luZyB0aHJvdWdo IGEgc2xvdC4KKwkgKi8KKwl2b2lkCQkoKnNjYW5fYmVnaW5fYmF0Y2gpKFRhYmxlU2NhbkRlc2Mg c3NjYW4sIFJvd0JhdGNoICpiKTsKKworCS8qCisJICogRmV0Y2ggdGhlIG5leHQgYmF0Y2ggb2Yg dHVwbGVzIGZyb20gdGhlIHNjYW4gaW50byBiLiAgU2V0cyBiLT5ucm93cworCSAqIHRvIHRoZSBu dW1iZXIgb2YgdHVwbGVzIGF2YWlsYWJsZSBhbmQgcmVzZXRzIGItPnBvcyB0byAwLiAgUmV0dXJu cworCSAqIHRydWUgaWYgYW55IHR1cGxlcyB3ZXJlIGZldGNoZWQsIGZhbHNlIGF0IGVuZCBvZiBz Y2FuLiAgVGhlIGNhbGxlcgorCSAqIGFkdmFuY2VzIHRocm91Z2ggdGhlIGJhdGNoIHZpYSBSb3dC YXRjaEdldE5leHRTbG90KCksIHdoaWNoIGNhbGxzCisJICogb3BzLT5yZXBvaW50X3Nsb3QgZm9y IGVhY2ggcG9zaXRpb24gdXAgdG8gYi0+bnJvd3MuCisJICovCisJYm9vbAkJKCpzY2FuX2dldG5l eHRiYXRjaCkoVGFibGVTY2FuRGVzYyBzc2NhbiwgUm93QmF0Y2ggKmIsCisJCQkJCQkJCQkgU2Nh bkRpcmVjdGlvbiBkaXIpOworCisJLyoKKwkgKiBSZWxlYXNlIGFsbCBBTS1vd25lZCBiYXRjaCBy ZXNvdXJjZXMsIGluY2x1ZGluZyBhbnkgYnVmZmVyIHBpbnMKKwkgKiBoZWxkIGluIGFtX3BheWxv YWQuICBDYWxsZWQgd2hlbiB0aGUgc2NhbiBub2RlIGlzIHNodXQgZG93bi4KKwkgKiBBZnRlciB0 aGlzIGNhbGwgYi0+YW1fcGF5bG9hZCBtdXN0IG5vdCBiZSB1c2VkLgorCSAqLworCXZvaWQJCSgq c2Nhbl9lbmRfYmF0Y2gpKFRhYmxlU2NhbkRlc2Mgc3NjYW4sIFJvd0JhdGNoICpiKTsKKworCS8q CisJICogUmVzZXQgYmF0Y2ggc3RhdGUgZm9yIHJlc2Nhbi4gIFJlbGVhc2UgYW55IGhlbGQgcmVz b3VyY2VzIChlLmcuCisJICogYnVmZmVyIHBpbnMpIGFuZCByZXNldCBjb3VudHMsIGJ1dCBrZWVw IHRoZSBhbGxvY2F0aW9uIHNvIHRoZQorCSAqIG5leHQgZ2V0bmV4dGJhdGNoIGNhbGwgY2FuIHJl dXNlIGl0IHdpdGhvdXQgcmUtZW50ZXJpbmcKKwkgKiBiZWdpbl9iYXRjaC4KKwkgKi8KKwl2b2lk CQkoKnNjYW5fcmVzZXRfYmF0Y2gpKFRhYmxlU2NhbkRlc2Mgc3NjYW4sIFJvd0JhdGNoICpiKTsK KwogCS8qLS0tLS0tLS0tLS0KIAkgKiBPcHRpb25hbCBmdW5jdGlvbnMgdG8gcHJvdmlkZSBzY2Fu bmluZyBmb3IgcmFuZ2VzIG9mIEl0ZW1Qb2ludGVycy4KIAkgKiBJbXBsZW1lbnRhdGlvbnMgbXVz dCBlaXRoZXIgcHJvdmlkZSBib3RoIG9mIHRoZXNlIGZ1bmN0aW9ucywgb3IgbmVpdGhlcgpAQCAt MTA0Nyw2ICsxMDk5LDkwIEBAIHRhYmxlX3NjYW5fZ2V0bmV4dHNsb3QoVGFibGVTY2FuRGVzYyBz c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFR1cGxlVGFibGVTCiAJcmV0dXJuIHNzY2Fu LT5yc19yZC0+cmRfdGFibGVhbS0+c2Nhbl9nZXRuZXh0c2xvdChzc2NhbiwgZGlyZWN0aW9uLCBz bG90KTsKIH0KIAorLyoKKyAqIHRhYmxlX3N1cHBvcnRzX2JhdGNoaW5nCisgKgkJRG9lcyB0aGUg cmVsYXRpb24ncyBBTSBzdXBwb3J0IGJhdGNoaW5nPworICovCitzdGF0aWMgaW5saW5lIGJvb2wK K3RhYmxlX3N1cHBvcnRzX2JhdGNoaW5nKFJlbGF0aW9uIHJlbGF0aW9uLCBTbmFwc2hvdCBzbmFw c2hvdCkKK3sKKwljb25zdCBUYWJsZUFtUm91dGluZSAqdGFtID0gcmVsYXRpb24tPnJkX3RhYmxl YW07CisKKwlpZiAodGFtLT5zY2FuX2dldG5leHRiYXRjaCA9PSBOVUxMKQorCQlyZXR1cm4gZmFs c2U7CisKKwlBc3NlcnQodGFtLT5zY2FuX2JlZ2luX2JhdGNoICE9IE5VTEwpOworCUFzc2VydCh0 YW0tPnNjYW5fcmVzZXRfYmF0Y2ggIT0gTlVMTCk7CisJQXNzZXJ0KHRhbS0+c2Nhbl9lbmRfYmF0 Y2ggIT0gTlVMTCk7CisKKwkvKgorCSAqIE9wdGlvbmFsOiBBTSBtYXkgcmVzdHJpY3QgYmF0Y2hp bmcgYmFzZWQgb24gc25hcHNob3Qgb3Igb3RoZXIgY29uZGl0aW9ucy4KKwkgKi8KKwlpZiAodGFt LT5zY2FuX2JhdGNoX2ZlYXNpYmxlICE9IE5VTEwgJiYKKwkJIXRhbS0+c2Nhbl9iYXRjaF9mZWFz aWJsZShyZWxhdGlvbiwgc25hcHNob3QpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1 ZTsKK30KKworLyoKKyAqIHRhYmxlX3NjYW5fYmVnaW5fYmF0Y2gKKyAqCQlBbGxvY2F0ZSBBTS1v d25lZCBiYXRjaCBwYXlsb2FkIGluIHRoZSBSb3dCYXRjaAorICovCitzdGF0aWMgaW5saW5lIHZv aWQKK3RhYmxlX3NjYW5fYmVnaW5fYmF0Y2goVGFibGVTY2FuRGVzYyBzc2NhbiwgUm93QmF0Y2gg KmIpCit7CisJY29uc3QgVGFibGVBbVJvdXRpbmUgKnRhbSA9IHNzY2FuLT5yc19yZC0+cmRfdGFi bGVhbTsKKworCUFzc2VydCh0YW0tPnNjYW5fYmVnaW5fYmF0Y2ggIT0gTlVMTCk7CisKKwlyZXR1 cm4gdGFtLT5zY2FuX2JlZ2luX2JhdGNoKHNzY2FuLCBiKTsKK30KKworLyoKKyAqIHRhYmxlX3Nj YW5fZ2V0bmV4dGJhdGNoCisgKgkJRmV0Y2ggdGhlIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGZyb20g dGhlIEFNLiAgUmV0dXJucyB0cnVlIGlmIHR1cGxlcworICoJCXdlcmUgZmV0Y2hlZCwgZmFsc2Ug YXQgZW5kIG9mIHNjYW4uICBPbmx5IGZvcndhcmQgc2NhbnMgYXJlIHN1cHBvcnRlZC4KKyAqLwor c3RhdGljIGlubGluZSBib29sCit0YWJsZV9zY2FuX2dldG5leHRiYXRjaChUYWJsZVNjYW5EZXNj IHNzY2FuLCBSb3dCYXRjaCAqYiwgU2NhbkRpcmVjdGlvbiBkaXIpCit7CisJY29uc3QgVGFibGVB bVJvdXRpbmUgKnRhbSA9IHNzY2FuLT5yc19yZC0+cmRfdGFibGVhbTsKKworCUFzc2VydChTY2Fu RGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpOworCUFzc2VydCh0YW0tPnNjYW5fZ2V0bmV4dGJhdGNo ICE9IE5VTEwpOworCisJcmV0dXJuIHRhbS0+c2Nhbl9nZXRuZXh0YmF0Y2goc3NjYW4sIGIsIGRp cik7Cit9CisKKy8qCisgKiB0YWJsZV9zY2FuX2VuZF9iYXRjaAorICoJCVJlbGVhc2UgQU0tb3du ZWQgcmVzb3VyY2VzIGZvciB0aGUgYmF0Y2ggcGF5bG9hZC4KKyAqLworc3RhdGljIGlubGluZSB2 b2lkCit0YWJsZV9zY2FuX2VuZF9iYXRjaChUYWJsZVNjYW5EZXNjIHNzY2FuLCBSb3dCYXRjaCAq YikKK3sKKwljb25zdCBUYWJsZUFtUm91dGluZSAqdGFtID0gc3NjYW4tPnJzX3JkLT5yZF90YWJs ZWFtOworCisJQXNzZXJ0KHRhbS0+c2Nhbl9lbmRfYmF0Y2ggIT0gTlVMTCk7CisKKwl0YW0tPnNj YW5fZW5kX2JhdGNoKHNzY2FuLCBiKTsKK30KKworLyoKKyAqIHRhYmxlX3NjYW5fcmVzZXRfYmF0 Y2gKKyAqCQlSZXNldCBBTS1vd25lZCBiYXRjaCBzdGF0ZSBmb3IgcmVzY2FuIHdpdGhvdXQgZnJl ZWluZy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCit0YWJsZV9zY2FuX3Jlc2V0X2JhdGNoKFRh YmxlU2NhbkRlc2Mgc3NjYW4sIFJvd0JhdGNoICpiKQoreworCWNvbnN0IFRhYmxlQW1Sb3V0aW5l ICp0YW0gPSBzc2Nhbi0+cnNfcmQtPnJkX3RhYmxlYW07CisKKwlBc3NlcnQodGFtLT5zY2FuX3Jl c2V0X2JhdGNoICE9IE5VTEwpOworCisJdGFtLT5zY2FuX3Jlc2V0X2JhdGNoKHNzY2FuLCBiKTsK K30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogVElEIFJhbmdlIHNjYW5uaW5nIHJlbGF0 ZWQgZnVuY3Rpb25zLgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvcGdzdGF0LmggYi9zcmMvaW5jbHVkZS9wZ3N0YXQuaAppbmRleCAyMTZiOTM0OTJiYS4u MDM0NGM0ZTg4YzMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bnc3RhdC5oCisrKyBiL3NyYy9p bmNsdWRlL3Bnc3RhdC5oCkBAIC02OTUsMTAgKzY5NSwxMCBAQCBleHRlcm4gdm9pZCBwZ3N0YXRf cmVwb3J0X2FuYWx5emUoUmVsYXRpb24gcmVsLAogCQlpZiAocGdzdGF0X3Nob3VsZF9jb3VudF9y ZWxhdGlvbihyZWwpKQkJCQkJCVwKIAkJCShyZWwpLT5wZ3N0YXRfaW5mby0+Y291bnRzLm51bXNj YW5zKys7CQkJCQlcCiAJfSB3aGlsZSAoMCkKLSNkZWZpbmUgcGdzdGF0X2NvdW50X2hlYXBfZ2V0 bmV4dChyZWwpCQkJCQkJCQlcCisjZGVmaW5lIHBnc3RhdF9jb3VudF9oZWFwX2dldG5leHQocmVs LCBuKQkJCQkJCQlcCiAJZG8gewkJCQkJCQkJCQkJCQkJCVwKIAkJaWYgKHBnc3RhdF9zaG91bGRf Y291bnRfcmVsYXRpb24ocmVsKSkJCQkJCQlcCi0JCQkocmVsKS0+cGdzdGF0X2luZm8tPmNvdW50 cy50dXBsZXNfcmV0dXJuZWQrKzsJCQlcCisJCQkocmVsKS0+cGdzdGF0X2luZm8tPmNvdW50cy50 dXBsZXNfcmV0dXJuZWQgKz0gKG4pOwkJXAogCX0gd2hpbGUgKDApCiAjZGVmaW5lIHBnc3RhdF9j b3VudF9oZWFwX2ZldGNoKHJlbCkJCQkJCQkJCVwKIAlkbyB7CQkJCQkJCQkJCQkJCQkJXAotLSAK Mi40Ny4zCgo= --0000000000002031a1064dbaabf5 Content-Type: application/x-patch; name="v6-0001-heapam-store-full-HeapTupleData-in-rs_vistuples-f.patch" Content-Disposition: attachment; filename="v6-0001-heapam-store-full-HeapTupleData-in-rs_vistuples-f.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn2ziglm4 RnJvbSBkN2U4Zjc2MTQ0Y2IyN2U3NjFlMmQ0YmM5YzY4N2RkMGEyZGUyMDNlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMTIgTWFyIDIwMjYgMDk6MTg6MDQgKzA5MDAKU3ViamVjdDogW1BBVENIIHY2 IDEvNV0gaGVhcGFtOiBzdG9yZSBmdWxsIEhlYXBUdXBsZURhdGEgaW4gcnNfdmlzdHVwbGVzW10g Zm9yCiBwYWdlbW9kZSBzY2FucwoKcGFnZV9jb2xsZWN0X3R1cGxlcygpIGJ1aWxkcyBmdWxsIEhl YXBUdXBsZURhdGEgaGVhZGVycyBmb3IgZXZlcnkKdmlzaWJsZSB0dXBsZSBvbiBhIHBhZ2UgLS0g dF9kYXRhLCB0X2xlbiwgdF9zZWxmLCB0X3RhYmxlT2lkIC0tIGJ1dApwcmV2aW91c2x5IGRpc2Nh cmRlZCB0aGVtIGltbWVkaWF0ZWx5IGFmdGVyIHdyaXRpbmcganVzdCB0aGUgT2Zmc2V0TnVtYmVy Cm9mIGVhY2ggc3Vydml2b3IgaW50byByc192aXN0dXBsZXNbXS4gIGhlYXBnZXR0dXBfcGFnZW1v ZGUoKSB0aGVuCnJlLWRlcml2ZWQgdGhvc2Ugc2FtZSB2YWx1ZXMgb24gZXZlcnkgY2FsbCBmcm9t IHRoZSBzYXZlZCBPZmZzZXROdW1iZXIKdmlhIFBhZ2VHZXRJdGVtSWQoKSBhbmQgUGFnZUdldEl0 ZW0oKS4KCkNoYW5nZSByc192aXN0dXBsZXNbXSBlbGVtZW50IHR5cGUgZnJvbSBPZmZzZXROdW1i ZXIgdG8gSGVhcFR1cGxlRGF0YQphbmQgcG9wdWxhdGUgaXQgaW5zaWRlIHBhZ2VfY29sbGVjdF90 dXBsZXMoKSB3aGlsZSBscHAsIGxpbmVvZmYsIHBhZ2UsCmJsb2NrLCBhbmQgcmVsaWQgYXJlIGFs cmVhZHkgaW4gc2NvcGUsIHNvIG5vIGFkZGl0aW9uYWwgcGFnZSByZWFkcyBhcmUKbmVlZGVkLiAg Rm9yIHRoZSBhbGxfdmlzaWJsZSBwYXRoICh0aGUgY29tbW9uIGNhc2Ugb24gYSBwcmltYXJ5IG5v dAp1bmRlciBhY3RpdmUgbW9kaWZpY2F0aW9uKSB0aGUgd3JpdGUgcGlnZ3ktYmFja3Mgb24gdGhl IGV4aXN0aW5nCnBlci1saW5lb2ZmIGxvb3AuICBGb3IgdGhlICFhbGxfdmlzaWJsZSBwYXRoLCBI ZWFwVHVwbGVEYXRhIGVudHJpZXMgYXJlCndyaXR0ZW4gZHVyaW5nIHRoZSB2aXNpYmlsaXR5IGxv b3AgYW5kIGNvbXBhY3RlZCB0byB2aXNpYmxlIHN1cnZpdm9ycwphZnRlcndhcmRzIHVzaW5nIGJh dGNobXZjYy52aXNpYmxlW10sIGF2b2lkaW5nIGEgcmV0dXJuIHRvIHBkX2xpbnBbXSB2aWEKUGFn ZUdldEl0ZW1JZCgpLgoKV2l0aCByc192aXN0dXBsZXNbXSBwb3B1bGF0ZWQsIGhlYXBnZXR0dXBf cGFnZW1vZGUoKSByZXBsYWNlcyB0aGUKcGVyLXR1cGxlIFBhZ2VHZXRJdGVtSWQvUGFnZUdldEl0 ZW0gY2FsbHMgd2l0aCBhIHNpbmdsZSBzdHJ1Y3QgY29weToKCiAgICAqdHVwbGUgPSBzY2FuLT5y c192aXN0dXBsZXNbbGluZWluZGV4XTsKClRoZSBzdGFjay1sb2NhbCBIZWFwVHVwbGVEYXRhIGFy cmF5IGluIEJhdGNoTVZDQ1N0YXRlIGlzIGVsaW1pbmF0ZWQgYnkKcGFzc2luZyByc192aXN0dXBs ZXNbXSBkaXJlY3RseSB0byBIZWFwVHVwbGVTYXRpc2ZpZXNNVkNDQmF0Y2goKSwKc2F2aW5nIE1h eEhlYXBUdXBsZXNQZXJQYWdlICogMjQgYnl0ZXMgb2Ygc3RhY2sgcGVyIHBhZ2VfY29sbGVjdF90 dXBsZXMoKQpjYWxsLiAgSGVhcFR1cGxlU2F0aXNmaWVzTVZDQ0JhdGNoKCkgbG9zZXMgaXRzIHZp c3R1cGxlc19kZW5zZSBwYXJhbWV0ZXIKc2luY2UgY29tcGFjdGlvbiBpcyBub3cgaGFuZGxlZCBi eSB0aGUgY2FsbGVyLgoKdF90YWJsZU9pZCBpcyBwcmUtaW5pdGlhbGl6ZWQgZm9yIGFsbCByc192 aXN0dXBsZXNbXSBlbnRyaWVzIGF0IHNjYW4Kc3RhcnQgaW4gaGVhcF9iZWdpbnNjYW4oKSwgZWxp bWluYXRpbmcgYSBzdG9yZSBwZXIgdmlzaWJsZSB0dXBsZSBmcm9tIHRoZQpmaWxsIGxvb3AuICBU aGUgcmF3IEl0ZW1JZCB3b3JkIGlzIHJlYWQgb25jZSBwZXIgdHVwbGUgd2l0aCBscF9vZmYgYW5k CmxwX2xlbiBleHRyYWN0ZWQgdmlhIG1hc2sgYW5kIHNoaWZ0IHJhdGhlciB0aGFuIGNhbGxpbmcg SXRlbUlkR2V0T2Zmc2V0KCkKYW5kIEl0ZW1JZEdldExlbmd0aCgpIHNlcGFyYXRlbHksIGF2b2lk aW5nIGEgcG90ZW50aWFsIHNlY29uZCBsb2FkIGZyb20KdGhlIHNhbWUgYWRkcmVzcyBpbiB0aGUg aW5uZXIgbG9vcC4KCkhhdmluZyBwcmUtYnVpbHQgSGVhcFR1cGxlRGF0YSBoZWFkZXJzIGF2YWls YWJsZSBhdCB0aGUgc2NhbiBkZXNjcmlwdG9yCmxldmVsIGFsc28gbGF5cyBncm91bmR3b3JrIGZv ciBhIGJhdGNoZWQgdHVwbGUgaW50ZXJmYWNlLCB3aGVyZSBhbiBBTQpjYW4gc2VydmUgbXVsdGlw bGUgdHVwbGVzIHBlciBjYWxsIHdpdGhvdXQgcmVwZWF0aW5nIHRoZSBsaW5lIHBvaW50ZXIKdHJh dmVyc2FsLgoKU3VnZ2VzdGVkLWJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ Ci0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgICAgICAgICAgICB8IDczICsr KysrKysrKysrKy0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYyAgICB8IDE5ICsrLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX3Zpc2li aWxpdHkuYyB8IDIxICsrKy0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAg ICAgICAgICB8ICA1ICstCiA0IGZpbGVzIGNoYW5nZWQsIDU4IGluc2VydGlvbnMoKyksIDYwIGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKaW5kZXggZTViZDA2MmRlNzcuLmM2 ZDBhYWNjNWM5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwpAQCAtNTI0LDcgKzUyNCw2IEBA IHBhZ2VfY29sbGVjdF90dXBsZXMoSGVhcFNjYW5EZXNjIHNjYW4sIFNuYXBzaG90IHNuYXBzaG90 LAogCQkJCQlCbG9ja051bWJlciBibG9jaywgaW50IGxpbmVzLAogCQkJCQlib29sIGFsbF92aXNp YmxlLCBib29sIGNoZWNrX3NlcmlhbGl6YWJsZSkKIHsKLQlPaWQJCQlyZWxpZCA9IFJlbGF0aW9u R2V0UmVsaWQoc2Nhbi0+cnNfYmFzZS5yc19yZCk7CiAJaW50CQkJbnR1cCA9IDA7CiAJaW50CQkJ bnZpcyA9IDA7CiAJQmF0Y2hNVkNDU3RhdGUgYmF0Y2htdmNjOwpAQCAtNTM2LDcgKzUzNSw3IEBA IHBhZ2VfY29sbGVjdF90dXBsZXMoSGVhcFNjYW5EZXNjIHNjYW4sIFNuYXBzaG90IHNuYXBzaG90 LAogCWZvciAoT2Zmc2V0TnVtYmVyIGxpbmVvZmYgPSBGaXJzdE9mZnNldE51bWJlcjsgbGluZW9m ZiA8PSBsaW5lczsgbGluZW9mZisrKQogCXsKIAkJSXRlbUlkCQlscHAgPSBQYWdlR2V0SXRlbUlk KHBhZ2UsIGxpbmVvZmYpOwotCQlIZWFwVHVwbGUJdHVwOworCQlIZWFwVHVwbGUgICB0dXAgPSAm c2Nhbi0+cnNfdmlzdHVwbGVzW250dXBdOwogCiAJCWlmICh1bmxpa2VseSghSXRlbUlkSXNOb3Jt YWwobHBwKSkpCiAJCQljb250aW51ZTsKQEAgLTU0OSwyNSArNTQ4LDMzIEBAIHBhZ2VfY29sbGVj dF90dXBsZXMoSGVhcFNjYW5EZXNjIHNjYW4sIFNuYXBzaG90IHNuYXBzaG90LAogCQkgKi8KIAkJ aWYgKCFhbGxfdmlzaWJsZSB8fCBjaGVja19zZXJpYWxpemFibGUpCiAJCXsKLQkJCXR1cCA9ICZi YXRjaG12Y2MudHVwbGVzW250dXBdOworCQkJdWludDMyICBscF92YWwgPSAqKHVpbnQzMiAqKSBs cHA7CiAKLQkJCXR1cC0+dF9kYXRhID0gKEhlYXBUdXBsZUhlYWRlcikgUGFnZUdldEl0ZW0ocGFn ZSwgbHBwKTsKLQkJCXR1cC0+dF9sZW4gPSBJdGVtSWRHZXRMZW5ndGgobHBwKTsKLQkJCXR1cC0+ dF90YWJsZU9pZCA9IHJlbGlkOworCQkJdHVwLT50X2RhdGEgPSAoSGVhcFR1cGxlSGVhZGVyKSAo KGNoYXIgKikgcGFnZSArIChscF92YWwgJiAweDdmZmYpKTsKKwkJCXR1cC0+dF9sZW4gID0gbHBf dmFsID4+IDE3OworCQkJQXNzZXJ0KHR1cC0+dF90YWJsZU9pZCA9PSBSZWxhdGlvbkdldFJlbGlk KHNjYW4tPnJzX2Jhc2UucnNfcmQpKTsKIAkJCUl0ZW1Qb2ludGVyU2V0KCYodHVwLT50X3NlbGYp LCBibG9jaywgbGluZW9mZik7CiAJCX0KIAotCQkvKgotCQkgKiBJZiB0aGUgcGFnZSBpcyBhbGwg dmlzaWJsZSwgdGhlc2UgZmllbGRzIG90aGVyd2lzZSB3b24ndCBiZQotCQkgKiBwb3B1bGF0ZWQg aW4gbG9vcCBiZWxvdy4KLQkJICovCiAJCWlmIChhbGxfdmlzaWJsZSkKIAkJewogCQkJaWYgKGNo ZWNrX3NlcmlhbGl6YWJsZSkKLQkJCXsKIAkJCQliYXRjaG12Y2MudmlzaWJsZVtudHVwXSA9IHRy dWU7CisKKwkJCS8qCisJCQkgKiBJbiB0aGUgYWxsX3Zpc2libGUgJiYgIWNoZWNrX3NlcmlhbGl6 YWJsZSBwYXRoLCB0aGUgYmxvY2sKKwkJCSAqIGFib3ZlIHdhcyBza2lwcGVkLCBzbyB0dXAncyBm aWVsZHMgaGF2ZSBub3QgYmVlbiBzZXQgeWV0LgorCQkJICogRmlsbCB0aGVtIGhlcmUgd2hpbGUg bHBwIGlzIHN0aWxsIGluIGhhbmQuCisJCQkgKi8KKwkJCWlmICghY2hlY2tfc2VyaWFsaXphYmxl KQorCQkJeworCQkJCXVpbnQzMiAgbHBfdmFsID0gKih1aW50MzIgKikgbHBwOworCisJCQkJdHVw LT50X2RhdGEgPSAoSGVhcFR1cGxlSGVhZGVyKSAoKGNoYXIgKikgcGFnZSArIChscF92YWwgJiAw eDdmZmYpKTsKKwkJCQl0dXAtPnRfbGVuICA9IGxwX3ZhbCA+PiAxNzsKKwkJCQlBc3NlcnQodHVw LT50X3RhYmxlT2lkID09IFJlbGF0aW9uR2V0UmVsaWQoc2Nhbi0+cnNfYmFzZS5yc19yZCkpOwor CQkJCUl0ZW1Qb2ludGVyU2V0KCZ0dXAtPnRfc2VsZiwgYmxvY2ssIGxpbmVvZmYpOwogCQkJfQot CQkJc2Nhbi0+cnNfdmlzdHVwbGVzW250dXBdID0gbGluZW9mZjsKIAkJfQogCiAJCW50dXArKzsK QEAgLTU5OCwxMSArNjA1LDI0IEBAIHBhZ2VfY29sbGVjdF90dXBsZXMoSGVhcFNjYW5EZXNjIHNj YW4sIFNuYXBzaG90IHNuYXBzaG90LAogCQl7CiAJCQlIZWFwQ2hlY2tGb3JTZXJpYWxpemFibGVD b25mbGljdE91dChiYXRjaG12Y2MudmlzaWJsZVtpXSwKIAkJCQkJCQkJCQkJCXNjYW4tPnJzX2Jh c2UucnNfcmQsCi0JCQkJCQkJCQkJCQkmYmF0Y2htdmNjLnR1cGxlc1tpXSwKKwkJCQkJCQkJCQkJ CSZzY2FuLT5yc192aXN0dXBsZXNbaV0sCiAJCQkJCQkJCQkJCQlidWZmZXIsIHNuYXBzaG90KTsK IAkJfQogCX0KIAorCisJLyogTm93IGNvbXBhY3QgcnNfdmlzdHVwbGVzW10gdG8gdmlzaWJsZSBz dXJ2aXZvcnMgb25seSAqLworCWlmICghYWxsX3Zpc2libGUpCisJeworCQlpbnQgZHN0ID0gMDsK KwkJZm9yIChpbnQgaSA9IDA7IGkgPCBudHVwOyBpKyspCisJCXsKKwkJCWlmIChiYXRjaG12Y2Mu dmlzaWJsZVtpXSkKKwkJCQlzY2FuLT5yc192aXN0dXBsZXNbZHN0KytdID0gc2Nhbi0+cnNfdmlz dHVwbGVzW2ldOworCQl9CisJCUFzc2VydChkc3QgPT0gbnZpcyk7CisJfQorCiAJcmV0dXJuIG52 aXM7CiB9CiAKQEAgLTEwNzMsMTQgKzEwOTMsMTMgQEAgaGVhcGdldHR1cF9wYWdlbW9kZShIZWFw U2NhbkRlc2Mgc2NhbiwKIAkJCQkJU2NhbktleSBrZXkpCiB7CiAJSGVhcFR1cGxlCXR1cGxlID0g JihzY2FuLT5yc19jdHVwKTsKLQlQYWdlCQlwYWdlOwogCXVpbnQzMgkJbGluZWluZGV4OwogCXVp bnQzMgkJbGluZXNsZWZ0OwogCiAJaWYgKGxpa2VseShzY2FuLT5yc19pbml0ZWQpKQogCXsKIAkJ LyogY29udGludWUgZnJvbSBwcmV2aW91c2x5IHJldHVybmVkIHBhZ2UvdHVwbGUgKi8KLQkJcGFn ZSA9IEJ1ZmZlckdldFBhZ2Uoc2Nhbi0+cnNfY2J1Zik7CisJCUFzc2VydChCdWZmZXJJc1ZhbGlk KHNjYW4tPnJzX2NidWYpKTsKIAogCQlsaW5laW5kZXggPSBzY2FuLT5yc19jaW5kZXggKyBkaXI7 CiAJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCkBAIC0xMTA4LDI5ICsxMTI3LDIx IEBAIGhlYXBnZXR0dXBfcGFnZW1vZGUoSGVhcFNjYW5EZXNjIHNjYW4sCiAKIAkJLyogcHJ1bmUg dGhlIHBhZ2UgYW5kIGRldGVybWluZSB2aXNpYmxlIHR1cGxlIG9mZnNldHMgKi8KIAkJaGVhcF9w cmVwYXJlX3BhZ2VzY2FuKChUYWJsZVNjYW5EZXNjKSBzY2FuKTsKLQkJcGFnZSA9IEJ1ZmZlckdl dFBhZ2Uoc2Nhbi0+cnNfY2J1Zik7CiAJCWxpbmVzbGVmdCA9IHNjYW4tPnJzX250dXBsZXM7CiAJ CWxpbmVpbmRleCA9IFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/IDAgOiBsaW5lc2xlZnQg LSAxOwogCi0JCS8qIGJsb2NrIGlzIHRoZSBzYW1lIGZvciBhbGwgdHVwbGVzLCBzZXQgaXQgb25j ZSBvdXRzaWRlIHRoZSBsb29wICovCi0JCUl0ZW1Qb2ludGVyU2V0QmxvY2tOdW1iZXIoJnR1cGxl LT50X3NlbGYsIHNjYW4tPnJzX2NibG9jayk7Ci0KIAkJLyogbGluZWluZGV4IG5vdyByZWZlcmVu Y2VzIHRoZSBuZXh0IG9yIHByZXZpb3VzIHZpc2libGUgdGlkICovCiBjb250aW51ZV9wYWdlOgog CiAJCWZvciAoOyBsaW5lc2xlZnQgPiAwOyBsaW5lc2xlZnQtLSwgbGluZWluZGV4ICs9IGRpcikK IAkJewotCQkJSXRlbUlkCQlscHA7Ci0JCQlPZmZzZXROdW1iZXIgbGluZW9mZjsKLQotCQkJQXNz ZXJ0KGxpbmVpbmRleCA8IHNjYW4tPnJzX250dXBsZXMpOwotCQkJbGluZW9mZiA9IHNjYW4tPnJz X3Zpc3R1cGxlc1tsaW5laW5kZXhdOwotCQkJbHBwID0gUGFnZUdldEl0ZW1JZChwYWdlLCBsaW5l b2ZmKTsKLQkJCUFzc2VydChJdGVtSWRJc05vcm1hbChscHApKTsKLQotCQkJdHVwbGUtPnRfZGF0 YSA9IChIZWFwVHVwbGVIZWFkZXIpIFBhZ2VHZXRJdGVtKHBhZ2UsIGxwcCk7Ci0JCQl0dXBsZS0+ dF9sZW4gPSBJdGVtSWRHZXRMZW5ndGgobHBwKTsKLQkJCUl0ZW1Qb2ludGVyU2V0T2Zmc2V0TnVt YmVyKCZ0dXBsZS0+dF9zZWxmLCBsaW5lb2ZmKTsKKwkJCS8qCisJCQkgKiBIZWFkZXJzIHdlcmUg cHJlLWJ1aWx0IGJ5IHBhZ2VfY29sbGVjdF90dXBsZXMoKSBpbnRvCisJCQkgKiByc192aXN0dXBs ZXNbXS4gIENvcHkgdGhlIGVudHJ5OyB0X2RhdGEgc3RpbGwgcG9pbnRzIGludG8gdGhlCisJCQkg KiBwaW5uZWQgcGFnZSwgd2hpY2ggaXMgc2FmZSBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjdXJy ZW50IHBhZ2UKKwkJCSAqIHNjYW4uCisJCQkgKi8KKwkJCSp0dXBsZSA9IHNjYW4tPnJzX3Zpc3R1 cGxlc1tsaW5laW5kZXhdOwogCiAJCQkvKiBza2lwIGFueSB0dXBsZXMgdGhhdCBkb24ndCBtYXRj aCB0aGUgc2NhbiBrZXkgKi8KIAkJCWlmIChrZXkgIT0gTlVMTCAmJgpAQCAtMTI0NCw2ICsxMjU1 LDggQEAgaGVhcF9iZWdpbnNjYW4oUmVsYXRpb24gcmVsYXRpb24sIFNuYXBzaG90IHNuYXBzaG90 LAogCiAJLyogd2Ugb25seSBuZWVkIHRvIHNldCB0aGlzIHVwIG9uY2UgKi8KIAlzY2FuLT5yc19j dHVwLnRfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwlmb3IgKGludCBp ID0gMDsgaSA8IE1heEhlYXBUdXBsZXNQZXJQYWdlOyBpKyspCisJCXNjYW4tPnJzX3Zpc3R1cGxl c1tpXS50X3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7CiAKIAkvKgogCSAq IEFsbG9jYXRlIG1lbW9yeSB0byBrZWVwIHRyYWNrIG9mIHBhZ2UgYWxsb2NhdGlvbiBmb3IgcGFy YWxsZWwgd29ya2VycwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5k ZXggMjUzYTczNWI2YzEuLjJmZDEyMDAyOGJiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9oYW5kbGVyLmMKQEAgLTIxNTMsOSArMjE1Myw2IEBAIGhlYXBhbV9zY2FuX2JpdG1hcF9u ZXh0X3R1cGxlKFRhYmxlU2NhbkRlc2Mgc2NhbiwKIHsKIAlCaXRtYXBIZWFwU2NhbkRlc2MgYnNj YW4gPSAoQml0bWFwSGVhcFNjYW5EZXNjKSBzY2FuOwogCUhlYXBTY2FuRGVzYyBoc2NhbiA9IChI ZWFwU2NhbkRlc2MpIGJzY2FuOwotCU9mZnNldE51bWJlciB0YXJnb2Zmc2V0OwotCVBhZ2UJCXBh Z2U7Ci0JSXRlbUlkCQlscDsKIAogCS8qCiAJICogT3V0IG9mIHJhbmdlPyAgSWYgc28sIG5vdGhp bmcgbW9yZSB0byBsb29rIGF0IG9uIHRoaXMgcGFnZQpAQCAtMjE3MCwxNSArMjE2Nyw3IEBAIGhl YXBhbV9zY2FuX2JpdG1hcF9uZXh0X3R1cGxlKFRhYmxlU2NhbkRlc2Mgc2NhbiwKIAkJCXJldHVy biBmYWxzZTsKIAl9CiAKLQl0YXJnb2Zmc2V0ID0gaHNjYW4tPnJzX3Zpc3R1cGxlc1toc2Nhbi0+ cnNfY2luZGV4XTsKLQlwYWdlID0gQnVmZmVyR2V0UGFnZShoc2Nhbi0+cnNfY2J1Zik7Ci0JbHAg PSBQYWdlR2V0SXRlbUlkKHBhZ2UsIHRhcmdvZmZzZXQpOwotCUFzc2VydChJdGVtSWRJc05vcm1h bChscCkpOwotCi0JaHNjYW4tPnJzX2N0dXAudF9kYXRhID0gKEhlYXBUdXBsZUhlYWRlcikgUGFn ZUdldEl0ZW0ocGFnZSwgbHApOwotCWhzY2FuLT5yc19jdHVwLnRfbGVuID0gSXRlbUlkR2V0TGVu Z3RoKGxwKTsKLQloc2Nhbi0+cnNfY3R1cC50X3RhYmxlT2lkID0gc2Nhbi0+cnNfcmQtPnJkX2lk OwotCUl0ZW1Qb2ludGVyU2V0KCZoc2Nhbi0+cnNfY3R1cC50X3NlbGYsIGhzY2FuLT5yc19jYmxv Y2ssIHRhcmdvZmZzZXQpOworCWhzY2FuLT5yc19jdHVwID0gaHNjYW4tPnJzX3Zpc3R1cGxlc1to c2Nhbi0+cnNfY2luZGV4XTsKIAogCXBnc3RhdF9jb3VudF9oZWFwX2ZldGNoKHNjYW4tPnJzX3Jk KTsKIApAQCAtMjQ1Niw3ICsyNDQ1LDcgQEAgU2FtcGxlSGVhcFR1cGxlVmlzaWJsZShUYWJsZVNj YW5EZXNjIHNjYW4sIEJ1ZmZlciBidWZmZXIsCiAJCXdoaWxlIChzdGFydCA8IGVuZCkKIAkJewog CQkJdWludDMyCQltaWQgPSBzdGFydCArIChlbmQgLSBzdGFydCkgLyAyOwotCQkJT2Zmc2V0TnVt YmVyIGN1cm9mZnNldCA9IGhzY2FuLT5yc192aXN0dXBsZXNbbWlkXTsKKwkJCU9mZnNldE51bWJl ciBjdXJvZmZzZXQgPSBoc2Nhbi0+cnNfdmlzdHVwbGVzW21pZF0udF9zZWxmLmlwX3Bvc2lkOwog CiAJCQlpZiAodHVwb2Zmc2V0ID09IGN1cm9mZnNldCkKIAkJCQlyZXR1cm4gdHJ1ZTsKQEAgLTI1 NzUsNyArMjU2NCw3IEBAIEJpdG1hcEhlYXBTY2FuTmV4dEJsb2NrKFRhYmxlU2NhbkRlc2Mgc2Nh biwKIAkJCUl0ZW1Qb2ludGVyU2V0KCZ0aWQsIGJsb2NrLCBvZmZudW0pOwogCQkJaWYgKGhlYXBf aG90X3NlYXJjaF9idWZmZXIoJnRpZCwgc2Nhbi0+cnNfcmQsIGJ1ZmZlciwgc25hcHNob3QsCiAJ CQkJCQkJCQkgICAmaGVhcFR1cGxlLCBOVUxMLCB0cnVlKSkKLQkJCQloc2Nhbi0+cnNfdmlzdHVw bGVzW250dXArK10gPSBJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcigmdGlkKTsKKwkJCQloc2Nh bi0+cnNfdmlzdHVwbGVzW250dXArK10gPSBoZWFwVHVwbGU7CiAJCX0KIAl9CiAJZWxzZQpAQCAt MjYwNCw3ICsyNTkzLDcgQEAgQml0bWFwSGVhcFNjYW5OZXh0QmxvY2soVGFibGVTY2FuRGVzYyBz Y2FuLAogCQkJdmFsaWQgPSBIZWFwVHVwbGVTYXRpc2ZpZXNWaXNpYmlsaXR5KCZsb2N0dXAsIHNu YXBzaG90LCBidWZmZXIpOwogCQkJaWYgKHZhbGlkKQogCQkJewotCQkJCWhzY2FuLT5yc192aXN0 dXBsZXNbbnR1cCsrXSA9IG9mZm51bTsKKwkJCQloc2Nhbi0+cnNfdmlzdHVwbGVzW250dXArK10g PSBsb2N0dXA7CiAJCQkJUHJlZGljYXRlTG9ja1RJRChzY2FuLT5yc19yZCwgJmxvY3R1cC50X3Nl bGYsIHNuYXBzaG90LAogCQkJCQkJCQkgSGVhcFR1cGxlSGVhZGVyR2V0WG1pbihsb2N0dXAudF9k YXRhKSk7CiAJCQl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1f dmlzaWJpbGl0eS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX3Zpc2liaWxpdHku YwppbmRleCBmYzY0ZjQzNDNjZS4uY2Q2Y2Q0ZDhkNjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbV92aXNpYmlsaXR5LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX3Zpc2liaWxpdHkuYwpAQCAtMTY3MCwxNiArMTY3MCwxNiBAQCBIZWFwVHVw bGVTYXRpc2ZpZXNIaXN0b3JpY01WQ0MoSGVhcFR1cGxlIGh0dXAsIFNuYXBzaG90IHNuYXBzaG90 LAogfQogCiAvKgotICogUGVyZm9ybSBIZWFwdHVwbGVTYXRpc2ZpZXNNVkNDKCkgb24gZWFjaCBw YXNzZWQgaW4gdHVwbGUuIFRoaXMgaXMgbW9yZQorICogUGVyZm9ybSBIZWFwVHVwbGVTYXRpc2Zp ZXNNVkNDKCkgb24gZWFjaCBwYXNzZWQgaW4gdHVwbGUuIFRoaXMgaXMgbW9yZQogICogZWZmaWNp ZW50IHRoYW4gZG9pbmcgSGVhcFR1cGxlU2F0aXNmaWVzTVZDQygpIG9uZS1ieS1vbmUuCiAgKgot ICogVG8gYmUgY2hlY2tlZCB0dXBsZXMgYXJlIHBhc3NlZCB2aWEgQmF0Y2hNVkNDU3RhdGUtPnR1 cGxlcy4gRWFjaCB0dXBsZSdzCi0gKiB2aXNpYmlsaXR5IGlzIHN0b3JlZCBpbiBiYXRjaG12Y2Mt PnZpc2libGVbXS4gSW4gYWRkaXRpb24sCi0gKiAtPnZpc3R1cGxlc19kZW5zZSBpcyBzZXQgdG8g Y29udGFpbiB0aGUgb2Zmc2V0cyBvZiB2aXNpYmxlIHR1cGxlcy4KKyAqIEVhY2ggdHVwbGUncyB2 aXNpYmlsaXR5IGlzIHN0b3JlZCBpbiBiYXRjaG12Y2MtPnZpc2libGVbXS4gIFRoZSBjYWxsZXIK KyAqIGlzIHJlc3BvbnNpYmxlIGZvciBjb21wYWN0aW5nIHRoZSB0dXBsZXMgYXJyYXkgdG8gY29u dGFpbiBvbmx5IHZpc2libGUKKyAqIHN1cnZpdm9ycyBhZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVy bnMuCiAgKgotICogVGhlIHJlYXNvbiB0aGlzIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gSGVhcFR1 cGxlU2F0aXNmaWVzTVZDQygpIGlzIHRoYXQgaXQKLSAqIGF2b2lkcyBhIGNyb3NzLXRyYW5zbGF0 aW9uLXVuaXQgZnVuY3Rpb24gY2FsbCBmb3IgZWFjaCB0dXBsZSwgYWxsb3dzIHRoZQotICogY29t cGlsZXIgdG8gb3B0aW1pemUgYWNyb3NzIGNhbGxzIHRvIEhlYXBUdXBsZVNhdGlzZmllc01WQ0Mg YW5kIGFsbG93cworICogVGhlIHJlYXNvbiB0aGlzIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gSGVh cFR1cGxlU2F0aXNmaWVzTVZDQygpIGlzIHRoYXQKKyAqIGl0IGF2b2lkcyBhIGNyb3NzLXRyYW5z bGF0aW9uLXVuaXQgZnVuY3Rpb24gY2FsbCBmb3IgZWFjaCB0dXBsZSwgYWxsb3dzCisgKiB0aGUg Y29tcGlsZXIgdG8gb3B0aW1pemUgYWNyb3NzIGNhbGxzIHRvIEhlYXBUdXBsZVNhdGlzZmllc01W Q0MgYW5kIGFsbG93cwogICogc2V0dGluZyBoaW50IGJpdHMgbW9yZSBlZmZpY2llbnRseSAoc2Vl IHRoZSBvbmUgQnVmZmVyRmluaXNoU2V0SGludEJpdHMoKQogICogY2FsbCBiZWxvdykuCiAgKgpA QCAtMTY4OSw3ICsxNjg5LDcgQEAgaW50CiBIZWFwVHVwbGVTYXRpc2ZpZXNNVkNDQmF0Y2goU25h cHNob3Qgc25hcHNob3QsIEJ1ZmZlciBidWZmZXIsCiAJCQkJCQkJaW50IG50dXBzLAogCQkJCQkJ CUJhdGNoTVZDQ1N0YXRlICpiYXRjaG12Y2MsCi0JCQkJCQkJT2Zmc2V0TnVtYmVyICp2aXN0dXBs ZXNfZGVuc2UpCisJCQkJCQkJSGVhcFR1cGxlRGF0YSAqdHVwbGVzKQogewogCWludAkJCW52aXMg PSAwOwogCVNldEhpbnRCaXRzU3RhdGUgc3RhdGUgPSBTSEJfSU5JVElBTDsKQEAgLTE2OTksMTYg KzE2OTksMTMgQEAgSGVhcFR1cGxlU2F0aXNmaWVzTVZDQ0JhdGNoKFNuYXBzaG90IHNuYXBzaG90 LCBCdWZmZXIgYnVmZmVyLAogCWZvciAoaW50IGkgPSAwOyBpIDwgbnR1cHM7IGkrKykKIAl7CiAJ CWJvb2wJCXZhbGlkOwotCQlIZWFwVHVwbGUJdHVwID0gJmJhdGNobXZjYy0+dHVwbGVzW2ldOwor CQlIZWFwVHVwbGUJdHVwID0gJnR1cGxlc1tpXTsKIAogCQl2YWxpZCA9IEhlYXBUdXBsZVNhdGlz Zmllc01WQ0ModHVwLCBzbmFwc2hvdCwgYnVmZmVyLCAmc3RhdGUpOwogCQliYXRjaG12Y2MtPnZp c2libGVbaV0gPSB2YWxpZDsKIAogCQlpZiAobGlrZWx5KHZhbGlkKSkKLQkJewotCQkJdmlzdHVw bGVzX2RlbnNlW252aXNdID0gdHVwLT50X3NlbGYuaXBfcG9zaWQ7CiAJCQludmlzKys7Ci0JCX0K IAl9CiAKIAlpZiAoc3RhdGUgPT0gU0hCX0VOQUJMRUQpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggMmZk YzUwYjg2NWIuLjA5Yjk1NjZkMGFjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVh cGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0xMDMsNyArMTAzLDcg QEAgdHlwZWRlZiBzdHJ1Y3QgSGVhcFNjYW5EZXNjRGF0YQogCS8qIHRoZXNlIGZpZWxkcyBvbmx5 IHVzZWQgaW4gcGFnZS1hdC1hLXRpbWUgbW9kZSBhbmQgZm9yIGJpdG1hcCBzY2FucyAqLwogCXVp bnQzMgkJcnNfY2luZGV4OwkJLyogY3VycmVudCB0dXBsZSdzIGluZGV4IGluIHZpc3R1cGxlcyAq LwogCXVpbnQzMgkJcnNfbnR1cGxlczsJCS8qIG51bWJlciBvZiB2aXNpYmxlIHR1cGxlcyBvbiBw YWdlICovCi0JT2Zmc2V0TnVtYmVyIHJzX3Zpc3R1cGxlc1tNYXhIZWFwVHVwbGVzUGVyUGFnZV07 CS8qIHRoZWlyIG9mZnNldHMgKi8KKwlIZWFwVHVwbGVEYXRhIHJzX3Zpc3R1cGxlc1tNYXhIZWFw VHVwbGVzUGVyUGFnZV07CS8qIHR1cGxlcyAqLwogfSBIZWFwU2NhbkRlc2NEYXRhOwogdHlwZWRl ZiBzdHJ1Y3QgSGVhcFNjYW5EZXNjRGF0YSAqSGVhcFNjYW5EZXNjOwogCkBAIC00ODMsMTQgKzQ4 MywxMyBAQCBleHRlcm4gYm9vbCBIZWFwVHVwbGVJc1N1cmVseURlYWQoSGVhcFR1cGxlIGh0dXAs CiAgKi8KIHR5cGVkZWYgc3RydWN0IEJhdGNoTVZDQ1N0YXRlCiB7Ci0JSGVhcFR1cGxlRGF0YSB0 dXBsZXNbTWF4SGVhcFR1cGxlc1BlclBhZ2VdOwogCWJvb2wJCXZpc2libGVbTWF4SGVhcFR1cGxl c1BlclBhZ2VdOwogfSBCYXRjaE1WQ0NTdGF0ZTsKIAogZXh0ZXJuIGludAlIZWFwVHVwbGVTYXRp c2ZpZXNNVkNDQmF0Y2goU25hcHNob3Qgc25hcHNob3QsIEJ1ZmZlciBidWZmZXIsCiAJCQkJCQkJ CQkJaW50IG50dXBzLAogCQkJCQkJCQkJCUJhdGNoTVZDQ1N0YXRlICpiYXRjaG12Y2MsCi0JCQkJ CQkJCQkJT2Zmc2V0TnVtYmVyICp2aXN0dXBsZXNfZGVuc2UpOworCQkJCQkJCQkJCUhlYXBUdXBs ZURhdGEgKnR1cGxlcyk7CiAKIC8qCiAgKiBUbyBhdm9pZCBsZWFraW5nIHRvbyBtdWNoIGtub3ds ZWRnZSBhYm91dCByZW9yZGVyYnVmZmVyIGltcGxlbWVudGF0aW9uCi0tIAoyLjQ3LjMKCg== --0000000000002031a1064dbaabf5 Content-Type: application/x-patch; name="v6-0002-Add-RowBatch-infrastructure-for-batched-tuple-pro.patch" Content-Disposition: attachment; filename="v6-0002-Add-RowBatch-infrastructure-for-batched-tuple-pro.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn2ziglh3 RnJvbSAwZDgxMGNlZWQ3N2UzOTQ4ODNhYjBlOTVlYWZlMzYwNTFiNTQ2MDQwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgNSBNYXIgMjAyNiAxNzo0MjoxOSArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjYg Mi81XSBBZGQgUm93QmF0Y2ggaW5mcmFzdHJ1Y3R1cmUgZm9yIGJhdGNoZWQgdHVwbGUKIHByb2Nl c3NpbmcKCkludHJvZHVjZSBSb3dCYXRjaCwgYSBkYXRhIGNhcnJpZXIgdGhhdCBhbGxvd3MgdGFi bGUgQU1zIHRvIGRlbGl2ZXIKbXVsdGlwbGUgcm93cyBwZXIgY2FsbCBhbmQgdGhlIGV4ZWN1dG9y IHRvIHByb2Nlc3MgdGhlbSBhcyBhIGdyb3VwLgoKUm93QmF0Y2ggc2VwYXJhdGVzIHRocmVlIGNv bmNlcm5zOgoKICAtIGFtX3BheWxvYWQ6IG9wYXF1ZSwgQU0tb3duZWQgc3RvcmFnZSAoZS5nLiBI ZWFwQmF0Y2ggd2l0aCBwaW5uZWQKICAgIHBhZ2UgYW5kIHR1cGxlIGhlYWRlcnMpLiAgVGhlIEFN IGFsbG9jYXRlcyB0aGlzIGluIGl0cwogICAgc2Nhbl9iZWdpbl9iYXRjaCBjYWxsYmFjay4KCiAg LSBzbG90c1tdOiBUdXBsZVRhYmxlU2xvdCBhcnJheSwgY3JlYXRlZCBieSBSb3dCYXRjaENyZWF0 ZVNsb3RzKCkKICAgIHdpdGggQU0tYXBwcm9wcmlhdGUgc2xvdCBvcHMuICBQb3B1bGF0ZWQgZnJv bSBhbV9wYXlsb2FkIGJ5CiAgICBvcHMtPm1hdGVyaWFsaXplX2ludG9fc2xvdHMgd2hlbiB0aGUg ZXhlY3V0b3IgbmVlZHMgdHVwbGUgZGF0YS4KCiAgLSBtYXhfcm93czogZXhlY3V0b3Itc2V0IHVw cGVyIGJvdW5kIHRoYXQgdGhlIEFNIHJlc3BlY3RzIHdoZW4KICAgIGZpbGxpbmcgYSBiYXRjaC4K ClJvd0JhdGNoIGRvZXMgbm90IG93biBzZWxlY3Rpb24vZmlsdGVyaW5nIHN0YXRlLiAgV2hpY2gg cm93cyBzdXJ2aXZlCnF1YWwgZXZhbHVhdGlvbiBpcyB0aGUgZXhlY3V0b3IncyBjb25jZXJuLCB0 cmFja2VkIHNlcGFyYXRlbHkgaW4Kc2NhbiBub2RlIHN0YXRlLiAgVGhpcyBrZWVwcyBSb3dCYXRj aCBmb2N1c2VkIG9uIHRoZSBBTS10by1leGVjdXRvcgpkYXRhIHRyYW5zZmVyIGJvdW5kYXJ5LgoK Um93QmF0Y2hPcHMgcHJvdmlkZXMgYSB2dGFibGUgZm9yIEFNLXNwZWNpZmljIG9wZXJhdGlvbnM7 IGN1cnJlbnRseQpvbmx5IG1hdGVyaWFsaXplX2ludG9fc2xvdHMgaXMgZGVmaW5lZC4KLS0tCiBz cmMvYmFja2VuZC9leGVjdXRvci9NYWtlZmlsZSAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNSb3dCYXRjaC5jIHwgNTQgKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2Vu ZC9leGVjdXRvci9tZXNvbi5idWlsZCAgICB8ICAxICsKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4 ZWNSb3dCYXRjaC5oIHwgODggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgIHwgIDIgKwogNSBmaWxlcyBjaGFuZ2VkLCAxNDYg aW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNSb3dCYXRjaC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhl Y1Jvd0JhdGNoLmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9NYWtlZmlsZSBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL01ha2VmaWxlCmluZGV4IDExMTE4ZDBjZTAyLi45OWEwMGU3 NjJmNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvTWFrZWZpbGUKKysrIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvTWFrZWZpbGUKQEAgLTE1LDYgKzE1LDcgQEAgaW5jbHVkZSAkKHRv cF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogT0JKUyA9IFwKIAlleGVjQW1pLm8gXAog CWV4ZWNBc3luYy5vIFwKKwlleGVjUm93QmF0Y2gubyBcCiAJZXhlY0N1cnJlbnQubyBcCiAJZXhl Y0V4cHIubyBcCiAJZXhlY0V4cHJJbnRlcnAubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjUm93QmF0Y2guYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSb3dCYXRj aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42YTI5ODgxM2JkOAot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSb3dCYXRjaC5jCkBA IC0wLDAgKzEsNTQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV4ZWNSb3dCYXRjaC5j CisgKgkJSGVscGVycyBmb3IgUm93QmF0Y2gKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp IDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxp Zm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY1Jvd0JhdGNoLmMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0 Z3Jlcy5oIgorCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY1Jvd0JhdGNoLmgiCisKKy8qCisgKiBS b3dCYXRjaENyZWF0ZQorICoJCUFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IFJvd0JhdGNo IGVudmVsb3BlLgorICovCitSb3dCYXRjaCAqCitSb3dCYXRjaENyZWF0ZShpbnQgbWF4X3Jvd3Mp Cit7CisJUm93QmF0Y2ggICAqYjsKKworCUFzc2VydChtYXhfcm93cyA+IDApOworCisJYiA9IHBh bGxvYyhzaXplb2YoUm93QmF0Y2gpKTsKKwliLT5hbV9wYXlsb2FkID0gTlVMTDsKKwliLT5vcHMg PSBOVUxMOworCWItPm1heF9yb3dzID0gbWF4X3Jvd3M7CisJYi0+bnJvd3MgPSAwOworCWItPnBv cyA9IDA7CisJYi0+bWF0ZXJpYWxpemVkID0gZmFsc2U7CisJYi0+c2xvdCA9IE5VTEw7CisKKwly ZXR1cm4gYjsKK30KKworLyoKKyAqIFJvd0JhdGNoUmVzZXQKKyAqCQlSZXNldCBhbiBleGlzdGlu ZyBSb3dCYXRjaCBlbnZlbG9wZSB0byBlbXB0eS4KKyAqLwordm9pZAorUm93QmF0Y2hSZXNldChS b3dCYXRjaCAqYiwgYm9vbCBkcm9wX3Nsb3RzKQoreworCUFzc2VydChiICE9IE5VTEwpOworCisJ Yi0+bnJvd3MgPSAwOworCWItPnBvcyA9IDA7CisJYi0+bWF0ZXJpYWxpemVkID0gZmFsc2U7CisJ LyogYi0+c2xvdCBiZWxvbmdzIHRvIHRoZSBvd25pbmcgUGxhblN0YXRlIG5vZGUgKi8KK30KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvbWVzb24uYnVpbGQKaW5kZXggZGM0NWJlMGIyY2UuLmZkMGJmODBiYWNkIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9tZXNvbi5idWlsZApAQCAtMyw2ICszLDcgQEAKIGJhY2tlbmRfc291cmNlcyAr PSBmaWxlcygKICAgJ2V4ZWNBbWkuYycsCiAgICdleGVjQXN5bmMuYycsCisgICdleGVjUm93QmF0 Y2guYycsCiAgICdleGVjQ3VycmVudC5jJywKICAgJ2V4ZWNFeHByLmMnLAogICAnZXhlY0V4cHJJ bnRlcnAuYycsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUm93QmF0Y2gu aCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNSb3dCYXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wMjFmZGVlY2M3MwotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNSb3dCYXRjaC5oCkBAIC0wLDAgKzEsODggQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIGV4ZWNSb3dCYXRjaC5oCisgKgkJRXhlY3V0b3IgYmF0Y2gg ZW52ZWxvcGUgZm9yIHBhc3Npbmcgcm93IGJhdGNoIHN0YXRlIHVwd2FyZAorICoKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBV bml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMv aW5jbHVkZS9leGVjdXRvci9leGVjUm93QmF0Y2guaAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K KyNpZm5kZWYgRVhFQ1JPV0JBVENIX0gKKyNkZWZpbmUgRVhFQ1JPV0JBVENIX0gKKworI2luY2x1 ZGUgImV4ZWN1dG9yL3R1cHRhYmxlLmgiCisKK3R5cGVkZWYgc3RydWN0IFJvd0JhdGNoT3BzIFJv d0JhdGNoT3BzOworCisvKgorICogUm93QmF0Y2gKKyAqCisgKiBEYXRhIGNhcnJpZXIgZnJvbSB0 YWJsZSBBTSB0byBleGVjdXRvci4gVGhlIEFNIHBvcHVsYXRlcyBhbV9wYXlsb2FkCisgKiBhbmQg bnJvd3MgdmlhIHNjYW5fZ2V0bmV4dGJhdGNoKCkuIFRoZSBleGVjdXRvciBjYWxscyBvcHMtPm1h dGVyaWFsaXplX2FsbAorICogdG8gcG9wdWxhdGUgc2xvdHNbXSB3aGVuIGl0IG5lZWRzIHR1cGxl IGRhdGEuCisgKgorICogU2VsZWN0aW9uIHN0YXRlICh3aGljaCByb3dzIHN1cnZpdmVkIHF1YWwg ZXZhbCkgaXMgb3duZWQgYnkgdGhlIGV4ZWN1dG9yLAorICogbm90IHRoZSBiYXRjaC4KKyAqLwor dHlwZWRlZiBzdHJ1Y3QgUm93QmF0Y2gKK3sKKwl2b2lkCSAgICphbV9wYXlsb2FkOworCWNvbnN0 IFJvd0JhdGNoT3BzICpvcHM7CisKKwlpbnQJCQltYXhfcm93czsJCQkvKiBleGVjdXRvci1zZXQg dXBwZXIgYm91bmQgKi8KKwlpbnQJCQlucm93czsJCQkJLyogcm93cyBUQU0gcHV0IGluICovCisJ aW50CQkJcG9zOwkJCQkvKiBpdGVyYXRpb24gcG9zaXRpb24gKi8KKwlib29sCQltYXRlcmlhbGl6 ZWQ7CQkvKiB0dXBsZXMgaW4gc2xvdHMgdmFsaWQ/ICovCisKKwlUdXBsZVRhYmxlU2xvdCAqc2xv dDsJCQkvKiByb3cgdmlldyAqLworfSBSb3dCYXRjaDsKKworLyoKKyAqIFJvd0JhdGNoT3BzIC0t IEFNLXNwZWNpZmljIG9wZXJhdGlvbnMgb24gYSBSb3dCYXRjaC4KKyAqCisgKiBUYWJsZSBBTXMg c2V0IGItPm9wcyBkdXJpbmcgc2Nhbl9iZWdpbl9iYXRjaCB0byBwcm92aWRlCisgKiBjYWxsYmFj a3MgdGhhdCB0aGUgZXhlY3V0b3IgdXNlcyB0byBhY2Nlc3MgYmF0Y2ggY29udGVudHMuCisgKgor ICogcmVwb2ludF9zbG90IHJlLXBvaW50cyB0aGUgYmF0Y2gncyBzaW5nbGUgc2xvdCB0byB0aGUg dHVwbGUgYXQKKyAqIGluZGV4IGlkeCB3aXRoaW4gdGhlIGN1cnJlbnQgYmF0Y2guICBUaGUgc2xv dCByZW1haW5zIHZhbGlkIHVudGlsCisgKiB0aGUgbmV4dCBjYWxsIG9yIHVudGlsIHRoZSBiYXRj aCBpcyBleGhhdXN0ZWQuCisgKgorICogQWRkaXRpb25hbCBjYWxsYmFja3MgY2FuIGJlIGFkZGVk IGhlcmUgYXMgbmV3IEFNcyBvciBleGVjdXRvcgorICogZmVhdHVyZXMgcmVxdWlyZSB0aGVtLgor ICovCit0eXBlZGVmIHN0cnVjdCBSb3dCYXRjaE9wcworeworCXZvaWQJCSgqcmVwb2ludF9zbG90 KSAoUm93QmF0Y2ggKmIsIGludCBpZHgpOworfSBSb3dCYXRjaE9wczsKKworLyogQ3JlYXRlL3Rl YXJkb3duICovCitleHRlcm4gUm93QmF0Y2ggKlJvd0JhdGNoQ3JlYXRlKGludCBtYXhfcm93cyk7 CitleHRlcm4gdm9pZCBSb3dCYXRjaFJlc2V0KFJvd0JhdGNoICpiLCBib29sIGRyb3Bfc2xvdHMp OworCisvKiBWYWxpZGF0aW9uICovCitzdGF0aWMgaW5saW5lIGJvb2wKK1Jvd0JhdGNoSXNWYWxp ZChSb3dCYXRjaCAqYikKK3sKKwlyZXR1cm4gYiAhPSBOVUxMICYmIGItPm1heF9yb3dzID4gMDsK K30KKworLyogSXRlcmF0aW9uIG92ZXIgbWF0ZXJpYWxpemVkIHNsb3RzICovCitzdGF0aWMgaW5s aW5lIGJvb2wKK1Jvd0JhdGNoSGFzTW9yZShSb3dCYXRjaCAqYikKK3sKKwlyZXR1cm4gYi0+cG9z IDwgYi0+bnJvd3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgVHVwbGVUYWJsZVNsb3QgKgorUm93QmF0 Y2hHZXROZXh0U2xvdChSb3dCYXRjaCAqYikKK3sKKwlpZiAoYi0+cG9zID49IGItPm5yb3dzKQor CQlyZXR1cm4gTlVMTDsKKwliLT5vcHMtPnJlcG9pbnRfc2xvdChiLCBiLT5wb3MrKyk7CisJcmV0 dXJuIGItPnNsb3Q7Cit9CisKKyNlbmRpZgkvKiBFWEVDUk9XQkFUQ0hfSCAqLwpkaWZmIC0tZ2l0 IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAppbmRleCA1MmY4NjAzYTdiZS4uYTJiMGIxZDk5ZDQgMTAwNjQ0Ci0tLSBh L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CkBAIC0yNjYzLDYgKzI2NjMsOCBAQCBSb2xlU3BlYwogUm9sZVNwZWNU eXBlCiBSb2xlU3RtdFR5cGUKIFJvbGx1cERhdGEKK1Jvd0JhdGNoCitSb3dCYXRjaE9wcwogUm93 Q29tcGFyZUV4cHIKIFJvd0V4cHIKIFJvd0lkZW50aXR5VmFySW5mbwotLSAKMi40Ny4zCgo= --0000000000002031a1064dbaabf5 Content-Type: application/x-patch; name="v6-0005-Add-EXPLAIN-BATCHES-option-for-tuple-batching-sta.patch" Content-Disposition: attachment; filename="v6-0005-Add-EXPLAIN-BATCHES-option-for-tuple-batching-sta.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn2zigkz0 RnJvbSBjNWY1OGY1N2NkYTE5MTQwODg1NWFiMjQzYzA1ZjE1NTgwY2E1ZWVmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFNhdCwgMjAgRGVjIDIwMjUgMjM6MDk6MzcgKzA5MDAKU3ViamVjdDogW1BBVENIIHY2 IDUvNV0gQWRkIEVYUExBSU4gKEJBVENIRVMpIG9wdGlvbiBmb3IgdHVwbGUgYmF0Y2hpbmcKIHN0 YXRpc3RpY3MKCkFkZCBhIEJBVENIRVMgb3B0aW9uIHRvIEVYUExBSU4gdGhhdCByZXBvcnRzIHBl ci1ub2RlIGJhdGNoIHN0YXRpc3RpY3MKd2hlbiBhIG5vZGUgdXNlcyBiYXRjaCBtb2RlIGV4ZWN1 dGlvbi4KCkZvciBub2RlcyB0aGF0IHN1cHBvcnQgYmF0Y2hpbmcgKGN1cnJlbnRseSBTZXFTY2Fu KSwgdGhpcyBzaG93cyB0aGUKbnVtYmVyIG9mIGJhdGNoZXMgZmV0Y2hlZCBhbG9uZyB3aXRoIGF2 ZXJhZ2UsIG1pbmltdW0sIGFuZCBtYXhpbXVtCnJvd3MgcGVyIGJhdGNoLiBPdXRwdXQgaXMgc3Vw cG9ydGVkIGluIGJvdGggdGV4dCBhbmQgbm9uLXRleHQgZm9ybWF0cy4KCkFkZCByZWdyZXNzaW9u IHRlc3RzIGNvdmVyaW5nIHRleHQgb3V0cHV0LCBKU09OIGZvcm1hdCwgZmlsdGVyZWQgc2NhbnMs CkxJTUlULCBhbmQgZGlzYWJsZWQgYmF0Y2hpbmcuCgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rn ci5lcy9tL0NBK0hpd3FGZkFZX1pGcU44d2NBRU13NzFUOWhNX2tBOFV0eUhhWlpFWnR1VDNVeW9n QUBtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAg ICAgfCAgNDQgKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW5fc3RhdGUu YyAgfCAgIDggKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSb3dCYXRjaC5jICAgfCAgNDQg KysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTZXFzY2FuLmMgICAgfCAgIDgg Ky0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW5fc3RhdGUuaCAgfCAgIDEgKwogc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvZXhlY1Jvd0JhdGNoLmggICB8ICAyMiArKysrKy0KIHNyYy9pbmNsdWRl L2V4ZWN1dG9yL2luc3RydW1lbnQuaCAgICAgfCAgIDEgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9leHBsYWluLm91dCB8IDEwNyArKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rl c3QvcmVncmVzcy9zcWwvZXhwbGFpbi5zcWwgICAgICB8ICA1OSArKysrKysrKysrKysrKwogOSBm aWxlcyBjaGFuZ2VkLCAyOTEgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9leHBsYWluLmMKaW5kZXggMjk2ZWE4YTFlZDIuLmI1MDdmZWMwZGFiIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXhwbGFpbi5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbl9m b3JtYXQuaCIKICNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluX3N0YXRlLmgiCiAjaW5jbHVkZSAi Y29tbWFuZHMvcHJlcGFyZS5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNSb3dCYXRjaC5oIgog I2luY2x1ZGUgImZvcmVpZ24vZmR3YXBpLmgiCiAjaW5jbHVkZSAiaml0L2ppdC5oIgogI2luY2x1 ZGUgImxpYnBxL3BxZm9ybWF0LmgiCkBAIC01MTksNiArNTIwLDggQEAgRXhwbGFpbk9uZVBsYW4o UGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUg KmVzLAogCQlpbnN0cnVtZW50X29wdGlvbiB8PSBJTlNUUlVNRU5UX0JVRkZFUlM7CiAJaWYgKGVz LT53YWwpCiAJCWluc3RydW1lbnRfb3B0aW9uIHw9IElOU1RSVU1FTlRfV0FMOworCWlmIChlcy0+ YmF0Y2hlcykKKwkJaW5zdHJ1bWVudF9vcHRpb24gfD0gSU5TVFJVTUVOVF9CQVRDSEVTOwogCiAJ LyoKIAkgKiBXZSBhbHdheXMgY29sbGVjdCB0aW1pbmcgZm9yIHRoZSBlbnRpcmUgc3RhdGVtZW50 LCBldmVuIHdoZW4gbm9kZS1sZXZlbApAQCAtMTM3Miw2ICsxMzc1LDcgQEAgRXhwbGFpbk5vZGUo UGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAlpbnQJCQlzYXZlX2luZGVu dCA9IGVzLT5pbmRlbnQ7CiAJYm9vbAkJaGFzY2hpbGRyZW47CiAJYm9vbAkJaXNkaXNhYmxlZDsK KwlSb3dCYXRjaCAgICpiYXRjaCA9IE5VTEw7CiAKIAkvKgogCSAqIFByZXBhcmUgcGVyLXdvcmtl ciBvdXRwdXQgYnVmZmVycywgaWYgbmVlZGVkLiAgV2UnbGwgYXBwZW5kIHRoZSBkYXRhIGluCkBA IC0yMjk3LDYgKzIzMDEsNDYgQEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExp c3QgKmFuY2VzdG9ycywKIAlpZiAoZXMtPndhbCAmJiBwbGFuc3RhdGUtPmluc3RydW1lbnQpCiAJ CXNob3dfd2FsX3VzYWdlKGVzLCAmcGxhbnN0YXRlLT5pbnN0cnVtZW50LT53YWx1c2FnZSk7CiAK KwkvKiBCQVRDSEVTICovCisJc3dpdGNoIChub2RlVGFnKHBsYW4pKQorCXsKKwkJY2FzZSBUX1Nl cVNjYW46CisJCQliYXRjaCA9IGNhc3ROb2RlKFNlcVNjYW5TdGF0ZSwgcGxhbnN0YXRlKS0+YmF0 Y2g7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKworCWlmIChlcy0+YmF0 Y2hlcyAmJiBiYXRjaCkKKwl7CisJCVJvd0JhdGNoU3RhdHMgKnN0YXRzID0gYmF0Y2gtPnN0YXRz OworCisJCUFzc2VydChzdGF0cyk7CisJCWlmIChzdGF0cy0+YmF0Y2hlcyA+IDApCisJCXsKKwkJ CWlmIChlcy0+Zm9ybWF0ID09IEVYUExBSU5fRk9STUFUX1RFWFQpCisJCQl7CisJCQkJRXhwbGFp bkluZGVudFRleHQoZXMpOworCQkJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwKKwkJCQkJCQkJ ICJCYXRjaGVzOiAlbGxkICBBdmcgUm93czogJS4xZiAgTWF4OiAlZCAgTWluOiAlZFxuIiwKKwkJ CQkJCQkJIChsb25nIGxvbmcpIHN0YXRzLT5iYXRjaGVzLAorCQkJCQkJCQkgUm93QmF0Y2hBdmdS b3dzKGJhdGNoKSwgc3RhdHMtPm1heF9yb3dzLAorCQkJCQkJCQkgc3RhdHMtPm1pbl9yb3dzID09 IElOVF9NQVggPyAwIDoKKwkJCQkJCQkJIHN0YXRzLT5taW5fcm93cyk7CisJCQl9CisJCQllbHNl CisJCQl7CisJCQkJRXhwbGFpblByb3BlcnR5SW50ZWdlcigiQmF0Y2hlcyIsIE5VTEwsIHN0YXRz LT5iYXRjaGVzLCBlcyk7CisJCQkJRXhwbGFpblByb3BlcnR5RmxvYXQoIkF2ZXJhZ2UgQmF0Y2gg Um93cyIsIE5VTEwsCisJCQkJCQkJCQkgUm93QmF0Y2hBdmdSb3dzKGJhdGNoKSwgMSwgZXMpOwor CQkJCUV4cGxhaW5Qcm9wZXJ0eUludGVnZXIoIk1heCBCYXRjaCBSb3dzIiwgTlVMTCwgc3RhdHMt Pm1heF9yb3dzLCBlcyk7CisJCQkJRXhwbGFpblByb3BlcnR5SW50ZWdlcigiTWluIEJhdGNoIFJv d3MiLCBOVUxMLAorCQkJCQkJCQkJICAgc3RhdHMtPm1pbl9yb3dzID09IElOVF9NQVggPyAwIDoK KwkJCQkJCQkJCSAgIHN0YXRzLT5taW5fcm93cywgZXMpOworCQkJfQorCQl9CisJfQorCiAJLyog UHJlcGFyZSBwZXItd29ya2VyIGJ1ZmZlci9XQUwgdXNhZ2UgKi8KIAlpZiAoZXMtPndvcmtlcnNf c3RhdGUgJiYgKGVzLT5idWZmZXJzIHx8IGVzLT53YWwpICYmIGVzLT52ZXJib3NlKQogCXsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW5fc3RhdGUuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4cGxhaW5fc3RhdGUuYwppbmRleCA3N2Y1OWI4ZTUwMC4uMjgwMjJhMTcx Y2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW5fc3RhdGUuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluX3N0YXRlLmMKQEAgLTE1OSw2ICsxNTksOCBA QCBQYXJzZUV4cGxhaW5PcHRpb25MaXN0KEV4cGxhaW5TdGF0ZSAqZXMsIExpc3QgKm9wdGlvbnMs IFBhcnNlU3RhdGUgKnBzdGF0ZSkKIAkJCQkJCQkJIkVYUExBSU4iLCBvcHQtPmRlZm5hbWUsIHAp LAogCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIG9wdC0+bG9jYXRpb24pKSk7CiAJ CX0KKwkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgImJhdGNoZXMiKSA9PSAwKQorCQkJ ZXMtPmJhdGNoZXMgPSBkZWZHZXRCb29sZWFuKG9wdCk7CiAJCWVsc2UgaWYgKCFBcHBseUV4dGVu c2lvbkV4cGxhaW5PcHRpb24oZXMsIG9wdCwgcHN0YXRlKSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJ CQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKQEAgLTE5OCw2ICsyMDAsMTIgQEAg UGFyc2VFeHBsYWluT3B0aW9uTGlzdChFeHBsYWluU3RhdGUgKmVzLCBMaXN0ICpvcHRpb25zLCBQ YXJzZVN0YXRlICpwc3RhdGUpCiAJCQkJIGVycm1zZygiJXMgb3B0aW9ucyAlcyBhbmQgJXMgY2Fu bm90IGJlIHVzZWQgdG9nZXRoZXIiLAogCQkJCQkJIkVYUExBSU4iLCAiQU5BTFlaRSIsICJHRU5F UklDX1BMQU4iKSkpOwogCisJLyogY2hlY2sgdGhhdCBCQVRDSEVTIGlzIHVzZWQgd2l0aCBFWFBM QUlOIEFOQUxZWkUgKi8KKwlpZiAoZXMtPmJhdGNoZXMgJiYgIWVzLT5hbmFseXplKQorCQllcmVw b3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUp LAorCQkJCSBlcnJtc2coIkVYUExBSU4gb3B0aW9uICVzIHJlcXVpcmVzIEFOQUxZWkUiLCAiQkFU Q0hFUyIpKSk7CisKIAkvKiBpZiB0aGUgc3VtbWFyeSB3YXMgbm90IHNldCBleHBsaWNpdGx5LCBz ZXQgZGVmYXVsdCB2YWx1ZSAqLwogCWVzLT5zdW1tYXJ5ID0gKHN1bW1hcnlfc2V0KSA/IGVzLT5z dW1tYXJ5IDogZXMtPmFuYWx5emU7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNSb3dCYXRjaC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Jvd0JhdGNoLmMKaW5k ZXggNmEyOTg4MTNiZDguLjZlZjU0ZGVjYTA0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjUm93QmF0Y2guYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUm93QmF0 Y2guYwpAQCAtMjAsNyArMjAsNyBAQAogICoJCUFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3 IFJvd0JhdGNoIGVudmVsb3BlLgogICovCiBSb3dCYXRjaCAqCi1Sb3dCYXRjaENyZWF0ZShpbnQg bWF4X3Jvd3MpCitSb3dCYXRjaENyZWF0ZShpbnQgbWF4X3Jvd3MsIGJvb2wgdHJhY2tfc3RhdHMp CiB7CiAJUm93QmF0Y2ggICAqYjsKIApAQCAtMzUsNiArMzUsMjAgQEAgUm93QmF0Y2hDcmVhdGUo aW50IG1heF9yb3dzKQogCWItPm1hdGVyaWFsaXplZCA9IGZhbHNlOwogCWItPnNsb3QgPSBOVUxM OwogCisJaWYgKHRyYWNrX3N0YXRzKQorCXsKKwkJUm93QmF0Y2hTdGF0cyAqc3RhdHMgPSBwYWxs b2Nfb2JqZWN0KFJvd0JhdGNoU3RhdHMpOworCisJCXN0YXRzLT5iYXRjaGVzID0gMDsKKwkJc3Rh dHMtPnJvd3MgPSAwOworCQlzdGF0cy0+bWF4X3Jvd3MgPSAwOworCQlzdGF0cy0+bWluX3Jvd3Mg PSBJTlRfTUFYOworCisJCWItPnN0YXRzID0gc3RhdHM7CisJfQorCWVsc2UKKwkJYi0+c3RhdHMg PSBOVUxMOworCiAJcmV0dXJuIGI7CiB9CiAKQEAgLTUyLDMgKzY2LDMxIEBAIFJvd0JhdGNoUmVz ZXQoUm93QmF0Y2ggKmIsIGJvb2wgZHJvcF9zbG90cykKIAliLT5tYXRlcmlhbGl6ZWQgPSBmYWxz ZTsKIAkvKiBiLT5zbG90IGJlbG9uZ3MgdG8gdGhlIG93bmluZyBQbGFuU3RhdGUgbm9kZSAqLwog fQorCit2b2lkCitSb3dCYXRjaFJlY29yZFN0YXRzKFJvd0JhdGNoICpiLCBpbnQgcm93cykKK3sK KwlSb3dCYXRjaFN0YXRzICpzdGF0cyA9IGItPnN0YXRzOworCisJaWYgKHN0YXRzID09IE5VTEwp CisJCXJldHVybjsKKworCXN0YXRzLT5iYXRjaGVzKys7CisJc3RhdHMtPnJvd3MgKz0gcm93czsK KwlpZiAocm93cyA+IHN0YXRzLT5tYXhfcm93cykKKwkJc3RhdHMtPm1heF9yb3dzID0gcm93czsK KwlpZiAocm93cyA8IHN0YXRzLT5taW5fcm93cyAmJiByb3dzID4gMCkKKwkJc3RhdHMtPm1pbl9y b3dzID0gcm93czsKK30KKworZG91YmxlCitSb3dCYXRjaEF2Z1Jvd3MoUm93QmF0Y2ggKmIpCit7 CisJUm93QmF0Y2hTdGF0cyAqc3RhdHMgPSBiLT5zdGF0czsKKworCUFzc2VydChzdGF0cyAhPSBO VUxMKTsKKwlpZiAoc3RhdHMtPmJhdGNoZXMgPT0gMCkKKwkJcmV0dXJuIDAuMDsKKworCXJldHVy biAoZG91YmxlKSBzdGF0cy0+cm93cyAvIHN0YXRzLT5iYXRjaGVzOworfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVTZXFzY2FuLmMKaW5kZXggYjQxZDE4YjY3ZTMuLmMxNTI3YmU5NDZhIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2Vxc2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVTZXFzY2FuLmMKQEAgLTI0NSw4ICsyNDUsMTIgQEAgU2VxU2NhbkNhblVzZUJh dGNoaW5nKFNlcVNjYW5TdGF0ZSAqc2NhbnN0YXRlLCBpbnQgZWZsYWdzKQogc3RhdGljIHZvaWQK IFNlcVNjYW5Jbml0QmF0Y2hpbmcoU2VxU2NhblN0YXRlICpzY2Fuc3RhdGUpCiB7Ci0JUm93QmF0 Y2ggICAqYmF0Y2ggPSBSb3dCYXRjaENyZWF0ZShNYXhIZWFwVHVwbGVzUGVyUGFnZSk7CisJUm93 QmF0Y2ggICAqYmF0Y2g7CisJRVN0YXRlCSAgICplc3RhdGUgPSBzY2Fuc3RhdGUtPnNzLnBzLnN0 YXRlOworCWJvb2wJCXRyYWNrX3N0YXRzID0gZXN0YXRlLT5lc19pbnN0cnVtZW50ICYmCisJCShl c3RhdGUtPmVzX2luc3RydW1lbnQgJiBJTlNUUlVNRU5UX0JBVENIRVMpOwogCisJYmF0Y2ggPSBS b3dCYXRjaENyZWF0ZShNYXhIZWFwVHVwbGVzUGVyUGFnZSwgdHJhY2tfc3RhdHMpOwogCWJhdGNo LT5zbG90ID0gc2NhbnN0YXRlLT5zcy5zc19TY2FuVHVwbGVTbG90OwogCXNjYW5zdGF0ZS0+YmF0 Y2ggPSBiYXRjaDsKIApAQCAtMzQ3LDYgKzM1MSw4IEBAIFNlcU5leHRCYXRjaChTZXFTY2FuU3Rh dGUgKm5vZGUpCiAJaWYgKCF0YWJsZV9zY2FuX2dldG5leHRiYXRjaChzY2FuZGVzYywgYiwgZGly ZWN0aW9uKSkKIAkJcmV0dXJuIGZhbHNlOwogCisJUm93QmF0Y2hSZWNvcmRTdGF0cyhiLCBiLT5u cm93cyk7CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29t bWFuZHMvZXhwbGFpbl9zdGF0ZS5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbl9zdGF0 ZS5oCmluZGV4IDVhNDhiYzZmYmIxLi41NzljYTRjZmEyMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvY29tbWFuZHMvZXhwbGFpbl9zdGF0ZS5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4 cGxhaW5fc3RhdGUuaApAQCAtNTYsNiArNTYsNyBAQCB0eXBlZGVmIHN0cnVjdCBFeHBsYWluU3Rh dGUKIAlib29sCQltZW1vcnk7CQkJLyogcHJpbnQgcGxhbm5lcidzIG1lbW9yeSB1c2FnZSBpbmZv cm1hdGlvbiAqLwogCWJvb2wJCXNldHRpbmdzOwkJLyogcHJpbnQgbW9kaWZpZWQgc2V0dGluZ3Mg Ki8KIAlib29sCQlnZW5lcmljOwkJLyogZ2VuZXJhdGUgYSBnZW5lcmljIHBsYW4gKi8KKwlib29s CQliYXRjaGVzOwkJLyogcHJpbnQgYmF0Y2ggc3RhdGlzdGljcyAqLwogCUV4cGxhaW5TZXJpYWxp emVPcHRpb24gc2VyaWFsaXplOwkvKiBzZXJpYWxpemUgdGhlIHF1ZXJ5J3Mgb3V0cHV0PyAqLwog CUV4cGxhaW5Gb3JtYXQgZm9ybWF0OwkJLyogb3V0cHV0IGZvcm1hdCAqLwogCS8qIHN0YXRlIGZv ciBvdXRwdXQgZm9ybWF0dGluZyAtLS0gbm90IHJlc2V0IGZvciBlYWNoIG5ldyBwbGFuIHRyZWUg Ki8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNSb3dCYXRjaC5oIGIvc3Jj L2luY2x1ZGUvZXhlY3V0b3IvZXhlY1Jvd0JhdGNoLmgKaW5kZXggMDIxZmRlZWNjNzMuLmFkMGI0 NzYzYjcwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUm93QmF0Y2guaAor KysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUm93QmF0Y2guaApAQCAtMTMsOSArMTMsMTIg QEAKICNpZm5kZWYgRVhFQ1JPV0JBVENIX0gKICNkZWZpbmUgRVhFQ1JPV0JBVENIX0gKIAorI2lu Y2x1ZGUgPGxpbWl0cy5oPgorCiAjaW5jbHVkZSAiZXhlY3V0b3IvdHVwdGFibGUuaCIKIAogdHlw ZWRlZiBzdHJ1Y3QgUm93QmF0Y2hPcHMgUm93QmF0Y2hPcHM7Cit0eXBlZGVmIHN0cnVjdCBSb3dC YXRjaFN0YXRzIFJvd0JhdGNoU3RhdHM7CiAKIC8qCiAgKiBSb3dCYXRjaApAQCAtMzgsNiArNDEs OSBAQCB0eXBlZGVmIHN0cnVjdCBSb3dCYXRjaAogCWJvb2wJCW1hdGVyaWFsaXplZDsJCS8qIHR1 cGxlcyBpbiBzbG90cyB2YWxpZD8gKi8KIAogCVR1cGxlVGFibGVTbG90ICpzbG90OwkJCS8qIHJv dyB2aWV3ICovCisKKwlSb3dCYXRjaFN0YXRzICpzdGF0czsJCQkvKiBOVUxMIGlmIGluc3RydW1l bnRhdGlvbiBzdGF0cworCQkJCQkJCQkJICogYXJlIG5vdCByZXF1ZXN0ZWQgKi8KIH0gUm93QmF0 Y2g7CiAKIC8qCkBAIC01OCw4ICs2NCwxNyBAQCB0eXBlZGVmIHN0cnVjdCBSb3dCYXRjaE9wcwog CXZvaWQJCSgqcmVwb2ludF9zbG90KSAoUm93QmF0Y2ggKmIsIGludCBpZHgpOwogfSBSb3dCYXRj aE9wczsKIAorLyogSW5zdHJ1bWVudGF0aW9uIHN0YXRzIHBvcHVsYXRlZCBmb3IgRVhQTEFJTiBB TkFMWVpFIEJBVENIRVMgKi8KK3R5cGVkZWYgc3RydWN0IFJvd0JhdGNoU3RhdHMKK3sKKwlpbnQ2 NAliYXRjaGVzOwkvKiB0b3RhbCBudW1iZXIgb2YgYmF0Y2hlcyBmZXRjaGVkICovCisJaW50NjQJ cm93czsJCS8qIHRvdGFsIHR1cGxlcyBhY3Jvc3MgYWxsIGJhdGNoZXMgKi8KKwlpbnQJCW1heF9y b3dzOwkvKiBtYXggcm93cyBpbiBhbnkgc2luZ2xlIGJhdGNoICovCisJaW50CQltaW5fcm93czsJ LyogbWluIHJvd3MgaW4gYW55IHNpbmdsZSBiYXRjaCAobm9uLXplcm8pICovCit9IFJvd0JhdGNo U3RhdHM7CisKIC8qIENyZWF0ZS90ZWFyZG93biAqLwotZXh0ZXJuIFJvd0JhdGNoICpSb3dCYXRj aENyZWF0ZShpbnQgbWF4X3Jvd3MpOworZXh0ZXJuIFJvd0JhdGNoICpSb3dCYXRjaENyZWF0ZShp bnQgbWF4X3Jvd3MsIGJvb2wgdHJhY2tfc3RhdHMpOwogZXh0ZXJuIHZvaWQgUm93QmF0Y2hSZXNl dChSb3dCYXRjaCAqYiwgYm9vbCBkcm9wX3Nsb3RzKTsKIAogLyogVmFsaWRhdGlvbiAqLwpAQCAt ODUsNCArMTAwLDkgQEAgUm93QmF0Y2hHZXROZXh0U2xvdChSb3dCYXRjaCAqYikKIAlyZXR1cm4g Yi0+c2xvdDsKIH0KIAorLyogPT09IEJhdGNoaW5nIHN0YXRzLiA9PT0qLworCitleHRlcm4gdm9p ZCBSb3dCYXRjaFJlY29yZFN0YXRzKFJvd0JhdGNoICpiLCBpbnQgcm93cyk7CitleHRlcm4gZG91 YmxlIFJvd0JhdGNoQXZnUm93cyhSb3dCYXRjaCAqYik7CisKICNlbmRpZgkvKiBFWEVDUk9XQkFU Q0hfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudC5oIGIv c3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudC5oCmluZGV4IDk3NTlmM2VhNWQ4Li5iZWU2 OWI0YWM4ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudC5oCisr KyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnQuaApAQCAtNjQsNiArNjQsNyBAQCB0 eXBlZGVmIGVudW0gSW5zdHJ1bWVudE9wdGlvbgogCUlOU1RSVU1FTlRfQlVGRkVSUyA9IDEgPDwg MSwJLyogbmVlZHMgYnVmZmVyIHVzYWdlICovCiAJSU5TVFJVTUVOVF9ST1dTID0gMSA8PCAyLAkv KiBuZWVkcyByb3cgY291bnQgKi8KIAlJTlNUUlVNRU5UX1dBTCA9IDEgPDwgMywJLyogbmVlZHMg V0FMIHVzYWdlICovCisJSU5TVFJVTUVOVF9CQVRDSEVTID0gMSA8PCA0LCAvKiBuZWVkcyBiYXRj aGVzICovCiAJSU5TVFJVTUVOVF9BTEwgPSBQR19JTlQzMl9NQVgKIH0gSW5zdHJ1bWVudE9wdGlv bjsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9leHBsYWluLm91dCBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZXhwbGFpbi5vdXQKaW5kZXggN2MxZjI2YjE4MmMu Ljk1MGRlNWE5ZDc4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2V4cGxh aW4ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZXhwbGFpbi5vdXQKQEAgLTgy MiwzICs4MjIsMTEwIEBAIHNlbGVjdCBleHBsYWluX2ZpbHRlcignZXhwbGFpbiAoYW5hbHl6ZSxi dWZmZXJzIG9mZixjb3N0cyBvZmYpIHNlbGVjdCBzdW0obikgb3ZlCiAoOSByb3dzKQogCiByZXNl dCB3b3JrX21lbTsKKy0tIFRlc3QgQkFUQ0hFUyBvcHRpb24KK3NldCBleGVjdXRvcl9iYXRjaF9y b3dzID0gNjQ7CitjcmVhdGUgdGVtcCB0YWJsZSBiYXRjaF90ZXN0IChhIGludCwgYiB0ZXh0KTsK K2luc2VydCBpbnRvIGJhdGNoX3Rlc3Qgc2VsZWN0IGksIHJlcGVhdCgneCcsIDEwMCkgZnJvbSBn ZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDApIGk7CithbmFseXplIGJhdGNoX3Rlc3Q7CistLSBCQVRD SEVTIHdpdGhvdXQgQU5BTFlaRSBzaG91bGQgZXJyb3IKK2V4cGxhaW4gKGJhdGNoZXMsIGNvc3Rz IG9mZikgc2VsZWN0ICogZnJvbSBiYXRjaF90ZXN0OworRVJST1I6ICBFWFBMQUlOIG9wdGlvbiBC QVRDSEVTIHJlcXVpcmVzIEFOQUxZWkUKKy0tIEJBVENIRVMgd2l0aG91dCBBTkFMWVpFIGJ1dCB3 aXRoIG90aGVyIG9wdGlvbnMKK2V4cGxhaW4gKGJhdGNoZXMsIGJ1ZmZlcnMgb2ZmLCBjb3N0cyBv ZmYpIHNlbGVjdCAqIGZyb20gYmF0Y2hfdGVzdDsKK0VSUk9SOiAgRVhQTEFJTiBvcHRpb24gQkFU Q0hFUyByZXF1aXJlcyBBTkFMWVpFCistLSBCYXNpYzogdmVyaWZ5IGJhdGNoIHN0YXRzIGxpbmUg YXBwZWFycyBpbiB0ZXh0IGZvcm1hdAorc2VsZWN0IGV4cGxhaW5fZmlsdGVyKCdleHBsYWluIChh bmFseXplLCBiYXRjaGVzLCBidWZmZXJzIG9mZiwgY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGJh dGNoX3Rlc3QnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHBsYWluX2ZpbHRlciAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBiYXRjaF90ZXN0IChh Y3R1YWwgdGltZT1OLk4uLk4uTiByb3dzPU4uTiBsb29wcz1OKQorICAgQmF0Y2hlczogTiAgQXZn IFJvd3M6IE4uTiAgTWF4OiBOICBNaW46IE4KKyBQbGFubmluZyBUaW1lOiBOLk4gbXMKKyBFeGVj dXRpb24gVGltZTogTi5OIG1zCisoNCByb3dzKQorCistLSBXaXRoIGZpbHRlcjogYmF0Y2ggbGlu ZSBzdGlsbCBhcHBlYXJzCitzZWxlY3QgZXhwbGFpbl9maWx0ZXIoJ2V4cGxhaW4gKGFuYWx5emUs IGJhdGNoZXMsIGJ1ZmZlcnMgb2ZmLCBjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gYmF0Y2hfdGVz dCB3aGVyZSBhID4gNTAwMCcpOworICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxhaW5fZmls dGVyICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIGJhdGNo X3Rlc3QgKGFjdHVhbCB0aW1lPU4uTi4uTi5OIHJvd3M9Ti5OIGxvb3BzPU4pCisgICBGaWx0ZXI6 IChhID4gTikKKyAgIFJvd3MgUmVtb3ZlZCBieSBGaWx0ZXI6IE4KKyAgIEJhdGNoZXM6IE4gIEF2 ZyBSb3dzOiBOLk4gIE1heDogTiAgTWluOiBOCisgUGxhbm5pbmcgVGltZTogTi5OIG1zCisgRXhl Y3V0aW9uIFRpbWU6IE4uTiBtcworKDYgcm93cykKKworLS0gV2l0aCBub24tYmF0Y2hhYmxlIHF1 YWwgKE9SKTogYmF0Y2hpbmcgc3RpbGwgYWN0aXZlIGJ1dAorLS0gYmF0Y2ggcXVhbCBmYWxscyBi YWNrIHRvIHBlci10dXBsZSBFeGVjUXVhbAorc2VsZWN0IGV4cGxhaW5fZmlsdGVyKCdleHBsYWlu IChhbmFseXplLCBiYXRjaGVzLCBidWZmZXJzIG9mZiwgY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9t IGJhdGNoX3Rlc3Qgd2hlcmUgYSA+IDUwMDAgb3IgYiBpcyBudWxsJyk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgZXhwbGFpbl9maWx0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgU2VxIFNjYW4gb24gYmF0Y2hfdGVzdCAoYWN0dWFsIHRpbWU9Ti5OLi5OLk4gcm93cz1O Lk4gbG9vcHM9TikKKyAgIEZpbHRlcjogKChhID4gTikgT1IgKGIgSVMgTlVMTCkpCisgICBSb3dz IFJlbW92ZWQgYnkgRmlsdGVyOiBOCisgICBCYXRjaGVzOiBOICBBdmcgUm93czogTi5OICBNYXg6 IE4gIE1pbjogTgorIFBsYW5uaW5nIFRpbWU6IE4uTiBtcworIEV4ZWN1dGlvbiBUaW1lOiBOLk4g bXMKKyg2IHJvd3MpCisKKy0tIFdpdGggTElNSVQ6IGJhdGNoIHN0YXRzIGFwcGVhciBvbiBjaGls ZCBTZXEgU2NhbiBub2RlCitzZWxlY3QgZXhwbGFpbl9maWx0ZXIoJ2V4cGxhaW4gKGFuYWx5emUs IGJhdGNoZXMsIGJ1ZmZlcnMgb2ZmLCBjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gYmF0Y2hfdGVz dCBsaW1pdCAxMDAnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBsYWluX2ZpbHRl ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBMaW1pdCAoYWN0 dWFsIHRpbWU9Ti5OLi5OLk4gcm93cz1OLk4gbG9vcHM9TikKKyAgIC0+ICBTZXEgU2NhbiBvbiBi YXRjaF90ZXN0IChhY3R1YWwgdGltZT1OLk4uLk4uTiByb3dzPU4uTiBsb29wcz1OKQorICAgICAg ICAgQmF0Y2hlczogTiAgQXZnIFJvd3M6IE4uTiAgTWF4OiBOICBNaW46IE4KKyBQbGFubmluZyBU aW1lOiBOLk4gbXMKKyBFeGVjdXRpb24gVGltZTogTi5OIG1zCisoNSByb3dzKQorCistLSBWZXJp ZnkgYmF0Y2ggc3RhdHMga2V5cyBwcmVzZW50IGluIEpTT04gb3V0cHV0CitzZWxlY3QKKyAgaiAj PiAnezAsUGxhbn0nID8gJ0JhdGNoZXMnIGFzIGhhc19iYXRjaGVzLAorICBqICM+ICd7MCxQbGFu fScgPyAnQXZlcmFnZSBCYXRjaCBSb3dzJyBhcyBoYXNfYXZnLAorICBqICM+ICd7MCxQbGFufScg PyAnTWF4IEJhdGNoIFJvd3MnIGFzIGhhc19tYXgsCisgIGogIz4gJ3swLFBsYW59JyA/ICdNaW4g QmF0Y2ggUm93cycgYXMgaGFzX21pbgorZnJvbSBleHBsYWluX2ZpbHRlcl90b19qc29uKAorICAn ZXhwbGFpbiAoYW5hbHl6ZSwgYmF0Y2hlcywgYnVmZmVycyBvZmYsIGZvcm1hdCBqc29uKSBzZWxl Y3QgKiBmcm9tIGJhdGNoX3Rlc3QnCispIGFzIGo7CisgaGFzX2JhdGNoZXMgfCBoYXNfYXZnIHwg aGFzX21heCB8IGhhc19taW4gCistLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tCisgdCAgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQKKygxIHJvdykKKwor LS0gV2l0aCBMSU1JVDogYmF0Y2ggc3RhdHMga2V5cyBvbiBjaGlsZCBub2RlIGluIEpTT04KK3Nl bGVjdAorICBqICM+ICd7MCxQbGFuLFBsYW5zLDB9JyA/ICdCYXRjaGVzJyBhcyBjaGlsZF9oYXNf YmF0Y2hlcywKKyAgaiAjPiAnezAsUGxhbixQbGFucywwfScgPyAnQXZlcmFnZSBCYXRjaCBSb3dz JyBhcyBjaGlsZF9oYXNfYXZnLAorICBqICM+ICd7MCxQbGFuLFBsYW5zLDB9JyA/ICdNYXggQmF0 Y2ggUm93cycgYXMgY2hpbGRfaGFzX21heCwKKyAgaiAjPiAnezAsUGxhbixQbGFucywwfScgPyAn TWluIEJhdGNoIFJvd3MnIGFzIGNoaWxkX2hhc19taW4KK2Zyb20gZXhwbGFpbl9maWx0ZXJfdG9f anNvbigKKyAgJ2V4cGxhaW4gKGFuYWx5emUsIGJhdGNoZXMsIGJ1ZmZlcnMgb2ZmLCBmb3JtYXQg anNvbikgc2VsZWN0ICogZnJvbSBiYXRjaF90ZXN0IGxpbWl0IDEwMCcKKykgYXMgajsKKyBjaGls ZF9oYXNfYmF0Y2hlcyB8IGNoaWxkX2hhc19hdmcgfCBjaGlsZF9oYXNfbWF4IHwgY2hpbGRfaGFz X21pbiAKKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICAgICAgICB8IHQgICAgICAgICAgICAgfCB0 ICAgICAgICAgICAgIHwgdAorKDEgcm93KQorCistLSBCYXRjaGluZyBkaXNhYmxlZDogbm8gYmF0 Y2ggc3RhdHMgaW4gdGV4dCBvdXRwdXQKK3NldCBleGVjdXRvcl9iYXRjaF9yb3dzID0gMDsKK3Nl bGVjdCBleHBsYWluX2ZpbHRlcignZXhwbGFpbiAoYW5hbHl6ZSwgYmF0Y2hlcywgYnVmZmVycyBv ZmYsIGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBiYXRjaF90ZXN0Jyk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgZXhwbGFpbl9maWx0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgU2VxIFNjYW4gb24gYmF0Y2hfdGVzdCAoYWN0dWFsIHRpbWU9Ti5OLi5OLk4gcm93cz1O Lk4gbG9vcHM9TikKKyBQbGFubmluZyBUaW1lOiBOLk4gbXMKKyBFeGVjdXRpb24gVGltZTogTi5O IG1zCisoMyByb3dzKQorCistLSBCYXRjaGluZyBkaXNhYmxlZDogbm8gYmF0Y2gga2V5cyBpbiBK U09OCitzZWxlY3QKKyAgaiAjPiAnezAsUGxhbn0nID8gJ0JhdGNoZXMnIGFzIGhhc19iYXRjaGVz Citmcm9tIGV4cGxhaW5fZmlsdGVyX3RvX2pzb24oCisgICdleHBsYWluIChhbmFseXplLCBiYXRj aGVzLCBidWZmZXJzIG9mZiwgZm9ybWF0IGpzb24pIHNlbGVjdCAqIGZyb20gYmF0Y2hfdGVzdCcK KykgYXMgajsKKyBoYXNfYmF0Y2hlcyAKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKK3Jl c2V0IGV4ZWN1dG9yX2JhdGNoX3Jvd3M7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9leHBsYWluLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2V4cGxhaW4uc3FsCmluZGV4IGVi ZGFiNDI2MDRiLi41NWFjYjkwNThjZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwv ZXhwbGFpbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZXhwbGFpbi5zcWwKQEAgLTE4 OCwzICsxODgsNjIgQEAgc2VsZWN0IGV4cGxhaW5fZmlsdGVyKCdleHBsYWluIChhbmFseXplLGJ1 ZmZlcnMgb2ZmLGNvc3RzIG9mZikgc2VsZWN0IHN1bShuKSBvdmUKIC0tIFRlc3QgdHVwbGVzdG9y ZSBzdG9yYWdlIHVzYWdlIGluIFdpbmRvdyBhZ2dyZWdhdGUgKG1lbW9yeSBhbmQgZGlzayBjYXNl LCBmaW5hbCByZXN1bHQgaXMgZGlzaykKIHNlbGVjdCBleHBsYWluX2ZpbHRlcignZXhwbGFpbiAo YW5hbHl6ZSxidWZmZXJzIG9mZixjb3N0cyBvZmYpIHNlbGVjdCBzdW0obikgb3ZlcihwYXJ0aXRp b24gYnkgbSkgZnJvbSAoU0VMRUNUIG4gPCAzIGFzIG0sIG4gZnJvbSBnZW5lcmF0ZV9zZXJpZXMo MSwyNTAwKSBhKG4pKScpOwogcmVzZXQgd29ya19tZW07CisKKy0tIFRlc3QgQkFUQ0hFUyBvcHRp b24KK3NldCBleGVjdXRvcl9iYXRjaF9yb3dzID0gNjQ7CisKK2NyZWF0ZSB0ZW1wIHRhYmxlIGJh dGNoX3Rlc3QgKGEgaW50LCBiIHRleHQpOworaW5zZXJ0IGludG8gYmF0Y2hfdGVzdCBzZWxlY3Qg aSwgcmVwZWF0KCd4JywgMTAwKSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMCkgaTsKK2Fu YWx5emUgYmF0Y2hfdGVzdDsKKworLS0gQkFUQ0hFUyB3aXRob3V0IEFOQUxZWkUgc2hvdWxkIGVy cm9yCitleHBsYWluIChiYXRjaGVzLCBjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gYmF0Y2hfdGVz dDsKKworLS0gQkFUQ0hFUyB3aXRob3V0IEFOQUxZWkUgYnV0IHdpdGggb3RoZXIgb3B0aW9ucwor ZXhwbGFpbiAoYmF0Y2hlcywgYnVmZmVycyBvZmYsIGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBi YXRjaF90ZXN0OworCistLSBCYXNpYzogdmVyaWZ5IGJhdGNoIHN0YXRzIGxpbmUgYXBwZWFycyBp biB0ZXh0IGZvcm1hdAorc2VsZWN0IGV4cGxhaW5fZmlsdGVyKCdleHBsYWluIChhbmFseXplLCBi YXRjaGVzLCBidWZmZXJzIG9mZiwgY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGJhdGNoX3Rlc3Qn KTsKKworLS0gV2l0aCBmaWx0ZXI6IGJhdGNoIGxpbmUgc3RpbGwgYXBwZWFycworc2VsZWN0IGV4 cGxhaW5fZmlsdGVyKCdleHBsYWluIChhbmFseXplLCBiYXRjaGVzLCBidWZmZXJzIG9mZiwgY29z dHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGJhdGNoX3Rlc3Qgd2hlcmUgYSA+IDUwMDAnKTsKKworLS0g V2l0aCBub24tYmF0Y2hhYmxlIHF1YWwgKE9SKTogYmF0Y2hpbmcgc3RpbGwgYWN0aXZlIGJ1dAor LS0gYmF0Y2ggcXVhbCBmYWxscyBiYWNrIHRvIHBlci10dXBsZSBFeGVjUXVhbAorc2VsZWN0IGV4 cGxhaW5fZmlsdGVyKCdleHBsYWluIChhbmFseXplLCBiYXRjaGVzLCBidWZmZXJzIG9mZiwgY29z dHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGJhdGNoX3Rlc3Qgd2hlcmUgYSA+IDUwMDAgb3IgYiBpcyBu dWxsJyk7CisKKy0tIFdpdGggTElNSVQ6IGJhdGNoIHN0YXRzIGFwcGVhciBvbiBjaGlsZCBTZXEg U2NhbiBub2RlCitzZWxlY3QgZXhwbGFpbl9maWx0ZXIoJ2V4cGxhaW4gKGFuYWx5emUsIGJhdGNo ZXMsIGJ1ZmZlcnMgb2ZmLCBjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gYmF0Y2hfdGVzdCBsaW1p dCAxMDAnKTsKKworLS0gVmVyaWZ5IGJhdGNoIHN0YXRzIGtleXMgcHJlc2VudCBpbiBKU09OIG91 dHB1dAorc2VsZWN0CisgIGogIz4gJ3swLFBsYW59JyA/ICdCYXRjaGVzJyBhcyBoYXNfYmF0Y2hl cywKKyAgaiAjPiAnezAsUGxhbn0nID8gJ0F2ZXJhZ2UgQmF0Y2ggUm93cycgYXMgaGFzX2F2ZywK KyAgaiAjPiAnezAsUGxhbn0nID8gJ01heCBCYXRjaCBSb3dzJyBhcyBoYXNfbWF4LAorICBqICM+ ICd7MCxQbGFufScgPyAnTWluIEJhdGNoIFJvd3MnIGFzIGhhc19taW4KK2Zyb20gZXhwbGFpbl9m aWx0ZXJfdG9fanNvbigKKyAgJ2V4cGxhaW4gKGFuYWx5emUsIGJhdGNoZXMsIGJ1ZmZlcnMgb2Zm LCBmb3JtYXQganNvbikgc2VsZWN0ICogZnJvbSBiYXRjaF90ZXN0JworKSBhcyBqOworCistLSBX aXRoIExJTUlUOiBiYXRjaCBzdGF0cyBrZXlzIG9uIGNoaWxkIG5vZGUgaW4gSlNPTgorc2VsZWN0 CisgIGogIz4gJ3swLFBsYW4sUGxhbnMsMH0nID8gJ0JhdGNoZXMnIGFzIGNoaWxkX2hhc19iYXRj aGVzLAorICBqICM+ICd7MCxQbGFuLFBsYW5zLDB9JyA/ICdBdmVyYWdlIEJhdGNoIFJvd3MnIGFz IGNoaWxkX2hhc19hdmcsCisgIGogIz4gJ3swLFBsYW4sUGxhbnMsMH0nID8gJ01heCBCYXRjaCBS b3dzJyBhcyBjaGlsZF9oYXNfbWF4LAorICBqICM+ICd7MCxQbGFuLFBsYW5zLDB9JyA/ICdNaW4g QmF0Y2ggUm93cycgYXMgY2hpbGRfaGFzX21pbgorZnJvbSBleHBsYWluX2ZpbHRlcl90b19qc29u KAorICAnZXhwbGFpbiAoYW5hbHl6ZSwgYmF0Y2hlcywgYnVmZmVycyBvZmYsIGZvcm1hdCBqc29u KSBzZWxlY3QgKiBmcm9tIGJhdGNoX3Rlc3QgbGltaXQgMTAwJworKSBhcyBqOworCistLSBCYXRj aGluZyBkaXNhYmxlZDogbm8gYmF0Y2ggc3RhdHMgaW4gdGV4dCBvdXRwdXQKK3NldCBleGVjdXRv cl9iYXRjaF9yb3dzID0gMDsKK3NlbGVjdCBleHBsYWluX2ZpbHRlcignZXhwbGFpbiAoYW5hbHl6 ZSwgYmF0Y2hlcywgYnVmZmVycyBvZmYsIGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBiYXRjaF90 ZXN0Jyk7CisKKy0tIEJhdGNoaW5nIGRpc2FibGVkOiBubyBiYXRjaCBrZXlzIGluIEpTT04KK3Nl bGVjdAorICBqICM+ICd7MCxQbGFufScgPyAnQmF0Y2hlcycgYXMgaGFzX2JhdGNoZXMKK2Zyb20g ZXhwbGFpbl9maWx0ZXJfdG9fanNvbigKKyAgJ2V4cGxhaW4gKGFuYWx5emUsIGJhdGNoZXMsIGJ1 ZmZlcnMgb2ZmLCBmb3JtYXQganNvbikgc2VsZWN0ICogZnJvbSBiYXRjaF90ZXN0JworKSBhcyBq OworCityZXNldCBleGVjdXRvcl9iYXRjaF9yb3dzOwotLSAKMi40Ny4zCgo= --0000000000002031a1064dbaabf5 Content-Type: application/x-patch; name="v6-0004-SeqScan-add-batch-driven-variants-returning-slots.patch" Content-Disposition: attachment; filename="v6-0004-SeqScan-add-batch-driven-variants-returning-slots.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn2zigl71 RnJvbSAwNzRmYWNjODVhYWU2NmViYWI0OWIwOGVhZGY5OTU3YTZkY2E3NzhkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgNSBNYXIgMjAyNiAxMToyODoxNiArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjYg NC81XSBTZXFTY2FuOiBhZGQgYmF0Y2gtZHJpdmVuIHZhcmlhbnRzIHJldHVybmluZyBzbG90cwoK VGVhY2ggU2VxU2NhbiB0byBkcml2ZSB0aGUgdGFibGUgQU0gdmlhIHRoZSBuZXcgYmF0Y2ggQVBJ IGFkZGVkIGluCnRoZSBwcmV2aW91cyBjb21taXQsIHdoaWxlIHN0aWxsIHJldHVybmluZyBvbmUg VHVwbGVUYWJsZVNsb3QgYXQgYQp0aW1lIHRvIGNhbGxlcnMuICBUaGlzIHJlZHVjZXMgcGVyLXR1 cGxlIEFNIGNyb3NzaW5ncyB3aXRob3V0CmNoYW5naW5nIHRoZSBub2RlIGludGVyZmFjZSBzZWVu IGJ5IHBhcmVudHMuCgpTZXFTY2FuU3RhdGUgZ2FpbnMgYSBSb3dCYXRjaCBwb2ludGVyIHRoYXQg aG9sZHMgdGhlIGN1cnJlbnQgYmF0Y2gKd2hlbiBiYXRjaGluZyBpcyBhY3RpdmUuICBCYXRjaCBz dGF0ZSBpcyBsb2NhbGl6ZWQgdG8gU2VxU2NhblN0YXRlCi0tIG5vIGNoYW5nZXMgdG8gUGxhblN0 YXRlIG9yIFNjYW5TdGF0ZS4KCkFkZCBleGVjdXRvcl9iYXRjaF9yb3dzIEdVQyAoREVWRUxPUEVS X09QVElPTlMsIGRlZmF1bHQgNjQpIHRvCmNvbnRyb2wgdGhlIG1heGltdW0gYmF0Y2ggc2l6ZS4g IFNldHRpbmcgaXQgdG8gMCBkaXNhYmxlcyBiYXRjaGluZy4KWFhYIGN1cnJlbnRseSBpZ25vcmVk IHdoZW4gcmVhZGluZyBmcm9tIGhlYXBhbSB0YWJsZXMuCgpXaXJlIHVwIHJ1bnRpbWUgc2VsZWN0 aW9uIGluIEV4ZWNJbml0U2VxU2NhbiB2aWEKU2VxU2NhbkNhblVzZUJhdGNoaW5nKCkuICBXaGVu IGV4ZWN1dG9yX2JhdGNoX3Jvd3MgPiAxLCBFUFEgaXMKaW5hY3RpdmUsIHRoZSBzY2FuIGlzIGZv cndhcmQtb25seSwgYW5kIHRoZSByZWxhdGlvbidzIEFNIHN1cHBvcnRzCmJhdGNoaW5nLCBFeGVj UHJvY05vZGUgaXMgc2V0IHRvIGEgYmF0Y2gtZHJpdmVuIHZhcmlhbnQuICBPdGhlcndpc2UKdGhl IG5vbi1iYXRjaCBwYXRoIGlzIHVzZWQgd2l0aCB6ZXJvIG92ZXJoZWFkLgoKUGxhbiBzaGFwZSBh bmQgRVhQTEFJTiBvdXRwdXQgcmVtYWluIHVuY2hhbmdlZDsgb25seSB0aGUgaW50ZXJuYWwKdHVw bGUgZmxvdyBkaWZmZXJzIHdoZW4gYmF0Y2hpbmcgaXMgZW5hYmxlZC4KClJldmlld2VkLWJ5OiBE YW5paWwgRGF2eWRvdiA8M2Rhbmlzc2ltb0BnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBDaGFuZ0Fv IENoZW4gPDI2MjQzNDU1MDdAcXEuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9t L0NBK0hpd3FGZkFZX1pGcU44d2NBRU13NzFUOWhNX2tBOFV0eUhhWlpFWnR1VDNVeW9nQUBtYWls LmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTZXFzY2FuLmMgICAgICAg IHwgMjc2ICsrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xv YmFscy5jICAgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFt ZXRlcnMuZGF0IHwgICA5ICsKIHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgICAg ICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgICAgIHwg ICAyICsKIDUgZmlsZXMgY2hhbmdlZCwgMjkxIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2Vxc2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZVNlcXNjYW4uYwppbmRleCA4ZjIxOWY2MGE5My4uYjQxZDE4YjY3ZTMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTZXFzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZVNlcXNjYW4uYwpAQCAtMjksMTIgKzI5LDE3IEBACiAKICNpbmNsdWRlICJhY2Nl c3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCisjaW5jbHVkZSAiZXhl Y3V0b3IvZXhlY1Jvd0JhdGNoLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY1NjYW4uaCIKICNp bmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVTZXFz Y2FuLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKIHN0YXRpYyBUdXBsZVRhYmxlU2xvdCAq U2VxTmV4dChTZXFTY2FuU3RhdGUgKm5vZGUpOworc3RhdGljIFR1cGxlVGFibGVTbG90ICpFeGVj U2VxU2NhbkJhdGNoU2xvdChQbGFuU3RhdGUgKnBzdGF0ZSk7CitzdGF0aWMgVHVwbGVUYWJsZVNs b3QgKkV4ZWNTZXFTY2FuQmF0Y2hTbG90V2l0aFF1YWwoUGxhblN0YXRlICpwc3RhdGUpOworc3Rh dGljIFR1cGxlVGFibGVTbG90ICpFeGVjU2VxU2NhbkJhdGNoU2xvdFdpdGhQcm9qZWN0KFBsYW5T dGF0ZSAqcHN0YXRlKTsKK3N0YXRpYyBUdXBsZVRhYmxlU2xvdCAqRXhlY1NlcVNjYW5CYXRjaFNs b3RXaXRoUXVhbFByb2plY3QoUGxhblN0YXRlICpwc3RhdGUpOwogCiAvKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJ CQkJCVNjYW4gU3VwcG9ydApAQCAtMjAzLDYgKzIwOCwyNzEgQEAgRXhlY1NlcVNjYW5FUFEoUGxh blN0YXRlICpwc3RhdGUpCiAJCQkJCShFeGVjU2NhblJlY2hlY2tNdGQpIFNlcVJlY2hlY2spOwog fQogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKgkJCQkJCUJhdGNoIFN1cHBvcnQKKyAqIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor CisvKgorICogU2VxU2NhbkNhblVzZUJhdGNoaW5nCisgKgkJQ2hlY2sgd2hldGhlciB0aGlzIFNl cVNjYW4gY2FuIHVzZSBiYXRjaCBtb2RlIGV4ZWN1dGlvbi4KKyAqCisgKiBCYXRjaGluZyByZXF1 aXJlczogdGhlIEdVQyBpcyBlbmFibGVkLCBubyBFUFEgcmVjaGVjayBpcyBhY3RpdmUsIHRoZSBz Y2FuCisgKiBpcyBmb3J3YXJkLW9ubHksIGFuZCB0aGUgdGFibGUgQU0gc3VwcG9ydHMgYmF0Y2hp bmcgd2l0aCB0aGUgY3VycmVudAorICogc25hcHNob3QgKHNlZSB0YWJsZV9zdXBwb3J0c19iYXRj aGluZygpKS4KKyAqLworc3RhdGljIGJvb2wKK1NlcVNjYW5DYW5Vc2VCYXRjaGluZyhTZXFTY2Fu U3RhdGUgKnNjYW5zdGF0ZSwgaW50IGVmbGFncykKK3sKKwlSZWxhdGlvbglyZWxhdGlvbiA9IHNj YW5zdGF0ZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uOworCisJcmV0dXJuCWV4ZWN1dG9yX2JhdGNo X3Jvd3MgPiAxICYmCisJCQlyZWxhdGlvbiAmJgorCQkJdGFibGVfc3VwcG9ydHNfYmF0Y2hpbmco cmVsYXRpb24sCisJCQkJCQkJCQlzY2Fuc3RhdGUtPnNzLnBzLnN0YXRlLT5lc19zbmFwc2hvdCkg JiYKKwkJCSEoZWZsYWdzICYgRVhFQ19GTEFHX0JBQ0tXQVJEKSAmJgorCQkJc2NhbnN0YXRlLT5z cy5wcy5zdGF0ZS0+ZXNfZXBxX2FjdGl2ZSA9PSBOVUxMOworfQorCisvKgorICogU2VxU2Nhbklu aXRCYXRjaGluZworICoJCVNldCB1cCBiYXRjaCBleGVjdXRpb24gc3RhdGUgYW5kIHNlbGVjdCB0 aGUgYXBwcm9wcmlhdGUKKyAqCQlFeGVjUHJvY05vZGUgdmFyaWFudCBmb3IgYmF0Y2ggbW9kZS4K KyAqCisgKiBDYWxsZWQgZnJvbSBFeGVjSW5pdFNlcVNjYW4gd2hlbiBTZXFTY2FuQ2FuVXNlQmF0 Y2hpbmcgcmV0dXJucyB0cnVlLgorICogT3ZlcndyaXRlcyB0aGUgRXhlY1Byb2NOb2RlIHBvaW50 ZXIgc2V0IGJ5IHRoZSBub24tYmF0Y2ggcGF0aC4KKyAqLworc3RhdGljIHZvaWQKK1NlcVNjYW5J bml0QmF0Y2hpbmcoU2VxU2NhblN0YXRlICpzY2Fuc3RhdGUpCit7CisJUm93QmF0Y2ggICAqYmF0 Y2ggPSBSb3dCYXRjaENyZWF0ZShNYXhIZWFwVHVwbGVzUGVyUGFnZSk7CisKKwliYXRjaC0+c2xv dCA9IHNjYW5zdGF0ZS0+c3Muc3NfU2NhblR1cGxlU2xvdDsKKwlzY2Fuc3RhdGUtPmJhdGNoID0g YmF0Y2g7CisKKwkvKiBDaG9vc2UgYmF0Y2ggdmFyaWFudCAqLworCWlmIChzY2Fuc3RhdGUtPnNz LnBzLnF1YWwgPT0gTlVMTCkKKwl7CisJCWlmIChzY2Fuc3RhdGUtPnNzLnBzLnBzX1Byb2pJbmZv ID09IE5VTEwpCisJCQlzY2Fuc3RhdGUtPnNzLnBzLkV4ZWNQcm9jTm9kZSA9IEV4ZWNTZXFTY2Fu QmF0Y2hTbG90OworCQllbHNlCisJCQlzY2Fuc3RhdGUtPnNzLnBzLkV4ZWNQcm9jTm9kZSA9IEV4 ZWNTZXFTY2FuQmF0Y2hTbG90V2l0aFByb2plY3Q7CisJfQorCWVsc2UKKwl7CisJCWlmIChzY2Fu c3RhdGUtPnNzLnBzLnBzX1Byb2pJbmZvID09IE5VTEwpCisJCQlzY2Fuc3RhdGUtPnNzLnBzLkV4 ZWNQcm9jTm9kZSA9IEV4ZWNTZXFTY2FuQmF0Y2hTbG90V2l0aFF1YWw7CisJCWVsc2UKKwkJCXNj YW5zdGF0ZS0+c3MucHMuRXhlY1Byb2NOb2RlID0gRXhlY1NlcVNjYW5CYXRjaFNsb3RXaXRoUXVh bFByb2plY3Q7CisJfQorfQorCisvKgorICogU2VxU2NhblJlc2V0QmF0Y2hpbmcKKyAqCQlSZXNl dCBvciB0ZWFyIGRvd24gYmF0Y2ggZXhlY3V0aW9uIHN0YXRlLgorICoKKyAqIFdoZW4gZHJvcCBp cyBmYWxzZSAocmVzY2FuKSwgcmVzZXRzIHRoZSBSb3dCYXRjaCBhbmQgcmVsZWFzZXMgYW55Cisg KiBBTS1oZWxkIHJlc291cmNlcyBsaWtlIGJ1ZmZlciBwaW5zLCBidXQga2VlcHMgYWxsb2NhdGlv bnMgZm9yIHJldXNlLgorICogV2hlbiBkcm9wIGlzIHRydWUgKGVuZCBvZiBub2RlKSwgZnJlZXMg ZXZlcnl0aGluZy4KKyAqLworc3RhdGljIHZvaWQKK1NlcVNjYW5SZXNldEJhdGNoaW5nKFNlcVNj YW5TdGF0ZSAqc2NhbnN0YXRlLCBib29sIGRyb3ApCit7CisJUm93QmF0Y2ggKmIgPSBzY2Fuc3Rh dGUtPmJhdGNoOworCisJaWYgKGIpCisJeworCQlSb3dCYXRjaFJlc2V0KGIsIGRyb3ApOworCQlp ZiAoYi0+YW1fcGF5bG9hZCkKKwkJeworCQkJaWYgKGRyb3ApCisJCQl7CisJCQkJdGFibGVfc2Nh bl9lbmRfYmF0Y2goc2NhbnN0YXRlLT5zcy5zc19jdXJyZW50U2NhbkRlc2MsIGIpOworCQkJCWIt PmFtX3BheWxvYWQgPSBOVUxMOworCQkJfQorCQkJZWxzZQorCQkJCXRhYmxlX3NjYW5fcmVzZXRf YmF0Y2goc2NhbnN0YXRlLT5zcy5zc19jdXJyZW50U2NhbkRlc2MsIGIpOworCQl9CisJCWlmIChk cm9wKQorCQkJcGZyZWUoYik7CisJfQorfQorCisvKgorICogU2VxTmV4dEJhdGNoCisgKgkJRmV0 Y2ggdGhlIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGZyb20gdGhlIHRhYmxlIEFNLgorICoKKyAqIExh emlseSBpbml0aWFsaXplcyB0aGUgc2NhbiBkZXNjcmlwdG9yIGFuZCBBTSBiYXRjaCBzdGF0ZSBv biBmaXJzdAorICogY2FsbC4gIFJldHVybnMgZmFsc2UgYXQgZW5kIG9mIHNjYW4uCisgKi8KK3N0 YXRpYyBib29sCitTZXFOZXh0QmF0Y2goU2VxU2NhblN0YXRlICpub2RlKQoreworCVRhYmxlU2Nh bkRlc2Mgc2NhbmRlc2M7CisJRVN0YXRlCSAgICplc3RhdGU7CisJU2NhbkRpcmVjdGlvbiBkaXJl Y3Rpb247CisJUm93QmF0Y2ggKmIgPSBub2RlLT5iYXRjaDsKKworCUFzc2VydChiICE9IE5VTEwp OworCisJLyoKKwkgKiBnZXQgaW5mb3JtYXRpb24gZnJvbSB0aGUgZXN0YXRlIGFuZCBzY2FuIHN0 YXRlCisJICovCisJc2NhbmRlc2MgPSBub2RlLT5zcy5zc19jdXJyZW50U2NhbkRlc2M7CisJZXN0 YXRlID0gbm9kZS0+c3MucHMuc3RhdGU7CisJZGlyZWN0aW9uID0gZXN0YXRlLT5lc19kaXJlY3Rp b247CisJQXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSk7CisKKwlpZiAo c2NhbmRlc2MgPT0gTlVMTCkKKwl7CisJCS8qCisJCSAqIFdlIHJlYWNoIGhlcmUgaWYgdGhlIHNj YW4gaXMgbm90IHBhcmFsbGVsLCBvciBpZiB3ZSdyZSBzZXJpYWxseQorCQkgKiBleGVjdXRpbmcg YSBzY2FuIHRoYXQgd2FzIHBsYW5uZWQgdG8gYmUgcGFyYWxsZWwuCisJCSAqLworCQlzY2FuZGVz YyA9IHRhYmxlX2JlZ2luc2Nhbihub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCisJCQkJCQkJ CSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCisJCQkJCQkJCSAgIDAsIE5VTEwpOworCQlub2RlLT5z cy5zc19jdXJyZW50U2NhbkRlc2MgPSBzY2FuZGVzYzsKKwl9CisKKwkvKiBMYXppbHkgY3JlYXRl IHRoZSBBTSBiYXRjaCBwYXlsb2FkLiAqLworCWlmIChiLT5hbV9wYXlsb2FkID09IE5VTEwpCisJ eworCQljb25zdCBUYWJsZUFtUm91dGluZSAqdGFtIFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWSA9 IHNjYW5kZXNjLT5yc19yZC0+cmRfdGFibGVhbTsKKworCQlBc3NlcnQodGFtICYmIHRhbS0+c2Nh bl9iZWdpbl9iYXRjaCk7CisJCXRhYmxlX3NjYW5fYmVnaW5fYmF0Y2goc2NhbmRlc2MsIGIpOwor CX0KKworCWlmICghdGFibGVfc2Nhbl9nZXRuZXh0YmF0Y2goc2NhbmRlc2MsIGIsIGRpcmVjdGlv bikpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogU2VxU2Nh bkJhdGNoU2xvdAorICoJCUNvcmUgbG9vcCBmb3IgYmF0Y2gtZHJpdmVuIFNlcVNjYW4gdmFyaWFu dHMuCisgKgorICogSW50ZXJuYWxseSBmZXRjaGVzIHR1cGxlcyBpbiBiYXRjaGVzIGZyb20gdGhl IHRhYmxlIEFNLCBidXQgcmV0dXJucworICogb25lIHNsb3QgYXQgYSB0aW1lIHRvIHByZXNlcnZl IHRoZSBzaW5nbGUtc2xvdCBpbnRlcmZhY2UgZXhwZWN0ZWQgYnkKKyAqIHBhcmVudCBub2Rlcy4g IFdoZW4gdGhlIGN1cnJlbnQgYmF0Y2ggaXMgZXhoYXVzdGVkLCBmZXRjaGVzIGFuZAorICogbWF0 ZXJpYWxpemVzIHRoZSBuZXh0IG9uZS4KKyAqCisgKiBxdWFsIGFuZCBwcm9qSW5mbyBhcmUgcGFz c2VkIGV4cGxpY2l0bHkgc28gdGhlIGNvbXBpbGVyIGNhbiBlbGltaW5hdGUKKyAqIGRlYWQgYnJh bmNoZXMgd2hlbiBpbmxpbmVkIGludG8gdGhlIHR5cGVkIHdyYXBwZXIgZnVuY3Rpb25zIChlLmcu CisgKiBFeGVjU2VxU2NhbkJhdGNoU2xvdCBwYXNzZXMgTlVMTCBmb3IgYm90aCkuCisgKgorICog RVBRIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIGJhdGNoIHBhdGg7IGFzc2VydGVkIGF0IGVudHJ5 LgorICovCitzdGF0aWMgaW5saW5lIFR1cGxlVGFibGVTbG90ICoKK1NlcVNjYW5CYXRjaFNsb3Qo U2VxU2NhblN0YXRlICpub2RlLAorCQkJCSBFeHByU3RhdGUgKnF1YWwsIFByb2plY3Rpb25JbmZv ICpwcm9qSW5mbykKK3sKKwlFeHByQ29udGV4dCAqZWNvbnRleHQgPSBub2RlLT5zcy5wcy5wc19F eHByQ29udGV4dDsKKwlSb3dCYXRjaCAqYiA9IG5vZGUtPmJhdGNoOworCisJLyogQmF0Y2ggcGF0 aCBkb2VzIG5vdCBzdXBwb3J0IEVQUSAqLworCUFzc2VydChub2RlLT5zcy5wcy5zdGF0ZS0+ZXNf ZXBxX2FjdGl2ZSA9PSBOVUxMKTsKKwlBc3NlcnQoUm93QmF0Y2hJc1ZhbGlkKGIpKTsKKworCWZv ciAoOzspCisJeworCQlUdXBsZVRhYmxlU2xvdCAqaW47CisKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQ VFMoKTsKKworCQkvKiBHZXQgbmV4dCBpbnB1dCBzbG90IGZyb20gY3VycmVudCBiYXRjaCwgb3Ig cmVmaWxsICovCisJCWlmICghUm93QmF0Y2hIYXNNb3JlKGIpKQorCQl7CisJCQlpZiAoIVNlcU5l eHRCYXRjaChub2RlKSkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCWluID0gUm93QmF0Y2hH ZXROZXh0U2xvdChiKTsKKwkJQXNzZXJ0KGluKTsKKworCQkvKiBObyBxdWFsLCBubyBwcm9qZWN0 aW9uOiBkaXJlY3QgcmV0dXJuICovCisJCWlmIChxdWFsID09IE5VTEwgJiYgcHJvakluZm8gPT0g TlVMTCkKKwkJCXJldHVybiBpbjsKKworCQlSZXNldEV4cHJDb250ZXh0KGVjb250ZXh0KTsKKwkJ ZWNvbnRleHQtPmVjeHRfc2NhbnR1cGxlID0gaW47CisKKwkJLyogQ2hlY2sgcXVhbCBpZiBwcmVz ZW50ICovCisJCWlmIChxdWFsICE9IE5VTEwgJiYgIUV4ZWNRdWFsKHF1YWwsIGVjb250ZXh0KSkK KwkJeworCQkJSW5zdHJDb3VudEZpbHRlcmVkMShub2RlLCAxKTsKKwkJCWNvbnRpbnVlOworCQl9 CisKKwkJLyogUHJvamVjdCBpZiBuZWVkZWQsIG90aGVyd2lzZSByZXR1cm4gc2NhbiB0dXBsZSBk aXJlY3RseSAqLworCQlpZiAocHJvakluZm8gIT0gTlVMTCkKKwkJCXJldHVybiBFeGVjUHJvamVj dChwcm9qSW5mbyk7CisKKwkJcmV0dXJuIGluOworCX0KK30KKworc3RhdGljIFR1cGxlVGFibGVT bG90ICoKK0V4ZWNTZXFTY2FuQmF0Y2hTbG90KFBsYW5TdGF0ZSAqcHN0YXRlKQoreworCVNlcVNj YW5TdGF0ZSAqbm9kZSA9IGNhc3ROb2RlKFNlcVNjYW5TdGF0ZSwgcHN0YXRlKTsKKworCUFzc2Vy dChwc3RhdGUtPnN0YXRlLT5lc19lcHFfYWN0aXZlID09IE5VTEwpOworCUFzc2VydChwc3RhdGUt PnF1YWwgPT0gTlVMTCk7CisJQXNzZXJ0KHBzdGF0ZS0+cHNfUHJvakluZm8gPT0gTlVMTCk7CisK KwlyZXR1cm4gU2VxU2NhbkJhdGNoU2xvdChub2RlLCBOVUxMLCBOVUxMKTsKK30KKworc3RhdGlj IFR1cGxlVGFibGVTbG90ICoKK0V4ZWNTZXFTY2FuQmF0Y2hTbG90V2l0aFF1YWwoUGxhblN0YXRl ICpwc3RhdGUpCit7CisJU2VxU2NhblN0YXRlICpub2RlID0gY2FzdE5vZGUoU2VxU2NhblN0YXRl LCBwc3RhdGUpOworCisJLyoKKwkgKiBVc2UgcGdfYXNzdW1lKCkgZm9yICE9IE5VTEwgdGVzdHMg dG8gbWFrZSB0aGUgY29tcGlsZXIgcmVhbGl6ZSBubworCSAqIHJ1bnRpbWUgY2hlY2sgZm9yIHRo ZSBmaWVsZCBpcyBuZWVkZWQgaW4gRXhlY1NjYW5FeHRlbmRlZCgpLgorCSAqLworCUFzc2VydChw c3RhdGUtPnN0YXRlLT5lc19lcHFfYWN0aXZlID09IE5VTEwpOworCXBnX2Fzc3VtZShwc3RhdGUt PnF1YWwgIT0gTlVMTCk7CisJQXNzZXJ0KHBzdGF0ZS0+cHNfUHJvakluZm8gPT0gTlVMTCk7CisK KwlyZXR1cm4gU2VxU2NhbkJhdGNoU2xvdChub2RlLCBwc3RhdGUtPnF1YWwsIE5VTEwpOworfQor CisvKgorICogVmFyaWFudCBvZiBFeGVjU2VxU2NhbigpIGJ1dCB3aGVuIHByb2plY3Rpb24gaXMg cmVxdWlyZWQuCisgKi8KK3N0YXRpYyBUdXBsZVRhYmxlU2xvdCAqCitFeGVjU2VxU2NhbkJhdGNo U2xvdFdpdGhQcm9qZWN0KFBsYW5TdGF0ZSAqcHN0YXRlKQoreworCVNlcVNjYW5TdGF0ZSAqbm9k ZSA9IGNhc3ROb2RlKFNlcVNjYW5TdGF0ZSwgcHN0YXRlKTsKKworCUFzc2VydChwc3RhdGUtPnN0 YXRlLT5lc19lcHFfYWN0aXZlID09IE5VTEwpOworCUFzc2VydChwc3RhdGUtPnF1YWwgPT0gTlVM TCk7CisJcGdfYXNzdW1lKHBzdGF0ZS0+cHNfUHJvakluZm8gIT0gTlVMTCk7CisKKwlyZXR1cm4g U2VxU2NhbkJhdGNoU2xvdChub2RlLCBOVUxMLCBwc3RhdGUtPnBzX1Byb2pJbmZvKTsKK30KKwor LyoKKyAqIFZhcmlhbnQgb2YgRXhlY1NlcVNjYW4oKSBidXQgd2hlbiBxdWFsIGV2YWx1YXRpb24g YW5kIHByb2plY3Rpb24gYXJlCisgKiByZXF1aXJlZC4KKyAqLworc3RhdGljIFR1cGxlVGFibGVT bG90ICoKK0V4ZWNTZXFTY2FuQmF0Y2hTbG90V2l0aFF1YWxQcm9qZWN0KFBsYW5TdGF0ZSAqcHN0 YXRlKQoreworCVNlcVNjYW5TdGF0ZSAqbm9kZSA9IGNhc3ROb2RlKFNlcVNjYW5TdGF0ZSwgcHN0 YXRlKTsKKworCUFzc2VydChwc3RhdGUtPnN0YXRlLT5lc19lcHFfYWN0aXZlID09IE5VTEwpOwor CXBnX2Fzc3VtZShwc3RhdGUtPnF1YWwgIT0gTlVMTCk7CisJcGdfYXNzdW1lKHBzdGF0ZS0+cHNf UHJvakluZm8gIT0gTlVMTCk7CisKKwlyZXR1cm4gU2VxU2NhbkJhdGNoU2xvdChub2RlLCBwc3Rh dGUtPnF1YWwsIHBzdGF0ZS0+cHNfUHJvakluZm8pOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJRXhl Y0luaXRTZXFTY2FuCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yODEsNiArNTUxLDkgQEAgRXhlY0luaXRTZXFT Y2FuKFNlcVNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkJc2NhbnN0 YXRlLT5zcy5wcy5FeGVjUHJvY05vZGUgPSBFeGVjU2VxU2NhbldpdGhRdWFsUHJvamVjdDsKIAl9 CiAKKwlpZiAoU2VxU2NhbkNhblVzZUJhdGNoaW5nKHNjYW5zdGF0ZSwgZWZsYWdzKSkKKwkJU2Vx U2NhbkluaXRCYXRjaGluZyhzY2Fuc3RhdGUpOworCiAJcmV0dXJuIHNjYW5zdGF0ZTsKIH0KIApA QCAtMzAwLDYgKzU3Myw4IEBAIEV4ZWNFbmRTZXFTY2FuKFNlcVNjYW5TdGF0ZSAqbm9kZSkKIAkg Ki8KIAlzY2FuRGVzYyA9IG5vZGUtPnNzLnNzX2N1cnJlbnRTY2FuRGVzYzsKIAorCVNlcVNjYW5S ZXNldEJhdGNoaW5nKG5vZGUsIHRydWUpOworCiAJLyoKIAkgKiBjbG9zZSBoZWFwIHNjYW4KIAkg Ki8KQEAgLTMyOSw2ICs2MDQsNyBAQCBFeGVjUmVTY2FuU2VxU2NhbihTZXFTY2FuU3RhdGUgKm5v ZGUpCiAJCXRhYmxlX3Jlc2NhbihzY2FuLAkJLyogc2NhbiBkZXNjICovCiAJCQkJCSBOVUxMKTsJ CS8qIG5ldyBzY2FuIGtleXMgKi8KIAorCVNlcVNjYW5SZXNldEJhdGNoaW5nKG5vZGUsIGZhbHNl KTsKIAlFeGVjU2NhblJlU2NhbigoU2NhblN0YXRlICopIG5vZGUpOwogfQogCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2lu aXQvZ2xvYmFscy5jCmluZGV4IDM2YWQ3MDhiMzYwLi41MzVlMjlkNzgyMyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv aW5pdC9nbG9iYWxzLmMKQEAgLTE2NSwzICsxNjUsNiBAQCBpbnQJCQlub3RpZnlfYnVmZmVycyA9 IDE2OwogaW50CQkJc2VyaWFsaXphYmxlX2J1ZmZlcnMgPSAzMjsKIGludAkJCXN1YnRyYW5zYWN0 aW9uX2J1ZmZlcnMgPSAwOwogaW50CQkJdHJhbnNhY3Rpb25fYnVmZmVycyA9IDA7CisKKy8qIGV4 ZWN1dG9yIGJhdGNoaW5nICovCitpbnQJCQlleGVjdXRvcl9iYXRjaF9yb3dzID0gNjQ7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCBiL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CmluZGV4IGE1YTBlZGYyNTM0Li5l MWVhZGNmNjQzZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1l dGVycy5kYXQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQK QEAgLTEwMDQsNiArMTAwNCwxNSBAQAogICBib290X3ZhbCA9PiAndHJ1ZScsCiB9LAogCit7IG5h bWUgPT4gJ2V4ZWN1dG9yX2JhdGNoX3Jvd3MnLCB0eXBlID0+ICdpbnQnLCBjb250ZXh0ID0+ICdQ R0NfVVNFUlNFVCcsIGdyb3VwID0+ICdERVZFTE9QRVJfT1BUSU9OUycsCisgIHNob3J0X2Rlc2Mg PT4gJ051bWJlciBvZiByb3dzIHRvIGluY2x1ZGUgaW4gYmF0Y2hlcyBkdXJpbmcgZXhlY3V0aW9u LicsCisgIGZsYWdzID0+ICdHVUNfTk9UX0lOX1NBTVBMRScsCisgIHZhcmlhYmxlID0+ICdleGVj dXRvcl9iYXRjaF9yb3dzJywKKyAgYm9vdF92YWwgPT4gJzY0JywKKyAgbWluID0+ICcwJywKKyAg bWF4ID0+ICcxMDI0JywKK30sCisKIHsgbmFtZSA9PiAnZXhpdF9vbl9lcnJvcicsIHR5cGUgPT4g J2Jvb2wnLCBjb250ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdyb3VwID0+ICdFUlJPUl9IQU5ETElO R19PUFRJT05TJywKICAgc2hvcnRfZGVzYyA9PiAnVGVybWluYXRlIHNlc3Npb24gb24gYW55IGVy cm9yLicsCiAgIHZhcmlhYmxlID0+ICdFeGl0T25BbnlFcnJvcicsCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9taXNjYWRtaW4uaCBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCmluZGV4IGYxNmYz NTY1OWI5Li5hZDQwNmJmNTNmMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgK KysrIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKQEAgLTI4OCw2ICsyODgsNyBAQCBleHRlcm4g UEdETExJTVBPUlQgZG91YmxlIFZhY3V1bUNvc3REZWxheTsKIGV4dGVybiBQR0RMTElNUE9SVCBp bnQgVmFjdXVtQ29zdEJhbGFuY2U7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBWYWN1dW1Db3N0 QWN0aXZlOwogCitleHRlcm4gUEdETExJTVBPUlQgaW50IGV4ZWN1dG9yX2JhdGNoX3Jvd3M7CiAK IC8qIGluIHV0aWxzL21pc2Mvc3RhY2tfZGVwdGguYyAqLwogCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmlu ZGV4IDA3MTZjNWE5YWVkLi42ZjAzOGNmY2M2MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9k ZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTY3 LDYgKzY3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgVHVwbGVUYWJsZVNsb3QgVHVwbGVUYWJsZVNsb3Q7 CiB0eXBlZGVmIHN0cnVjdCBUdXBsZVRhYmxlU2xvdE9wcyBUdXBsZVRhYmxlU2xvdE9wczsKIHR5 cGVkZWYgc3RydWN0IFdhbFVzYWdlIFdhbFVzYWdlOwogdHlwZWRlZiBzdHJ1Y3QgV29ya2VySW5z dHJ1bWVudGF0aW9uIFdvcmtlckluc3RydW1lbnRhdGlvbjsKK3R5cGVkZWYgc3RydWN0IFJvd0Jh dGNoIFJvd0JhdGNoOwogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTE2NDQsNiArMTY0NSw3 IEBAIHR5cGVkZWYgc3RydWN0IFNlcVNjYW5TdGF0ZQogewogCVNjYW5TdGF0ZQlzczsJCQkJLyog aXRzIGZpcnN0IGZpZWxkIGlzIE5vZGVUYWcgKi8KIAlTaXplCQlwc2Nhbl9sZW47CQkvKiBzaXpl IG9mIHBhcmFsbGVsIGhlYXAgc2NhbiBkZXNjcmlwdG9yICovCisJUm93QmF0Y2ggICAqYmF0Y2g7 CQkJLyogTlVMTCBpZiBiYXRjaGluZyBkaXNhYmxlZCAqLwogfSBTZXFTY2FuU3RhdGU7CiAKIC8q IC0tLS0tLS0tLS0tLS0tLS0KLS0gCjIuNDcuMwoK --0000000000002031a1064dbaabf5--