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 1w5gxP-003Wh8-2a for pgsql-hackers@arkaria.postgresql.org; Thu, 26 Mar 2026 09:24:52 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w5gxO-001qwf-0s for pgsql-hackers@arkaria.postgresql.org; Thu, 26 Mar 2026 09:24:50 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w5gxN-001qwX-2i for pgsql-hackers@lists.postgresql.org; Thu, 26 Mar 2026 09:24:50 +0000 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w5gxK-00000001GFP-496F for pgsql-hackers@postgresql.org; Thu, 26 Mar 2026 09:24:49 +0000 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-35c16db1b53so442322a91.1 for ; Thu, 26 Mar 2026 02:24:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774517085; cv=none; d=google.com; s=arc-20240605; b=IEt2bcxIpB6dWL+ug/nGNlmFpnxGLbEdoj/9ycXc8FmYmabX3UvRJM4MZIS6M3r/Ro 57xQBVBrr9gC2A4TTZdmqthUYW9LEvDp3UuUVJ5hhK9z1rDIV3HV/UXOa+jFTbf4pNSt WoMCBbDemJ0O4p8cYXh8Q7oaslzp2g77R1XbKgjgmtTJ8fwvoysRFJuNImHx389u+TAE AEoQhA6ZUrz9PQ01uotoW+vbuAcOTeRDg3jMw6ilihZ7XrTQ9z8muS6NzBqFk+h6S/wM PmMBgzkV105kY3AK9iuoYdyCr6A9lEWiEiI1LdFptuJOcS5pf5O0qWQcBUO5tj4VHBzd 8rSA== 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=s+q/igdntxwxAKm0CDkr1zKlzzkjNgEwfklKpqnujw8=; fh=nd8g4Ax9sWEsvzs1zKcdspDwNWyr+6pjCrNl8RysS6Y=; b=G4PvZYiB/V9atBSsuC4sfuP2oyb7G9Gzz78EiT0QI7RPAKccKIyPUWEqcqQ67kiSx6 S1MD+csW9K1xs2nBzalsruW5juNeuWbnPHWJhqA2+BhVHoyTXwlht/NW3jWalIsMLMsL kWUhayvzcQcjx3xUAJyNS5I1oEfqKUaS2M6Np2KvoOMuu7HvxEigURvLbiQFKN398dhK xeNZWkVbxTDqMkwkVKs/6q2jbpTJwAAGd+qe7NaIYS0mQdmbJhEpZ/lb7nDKiOdQYMzg PlzKf2X1wlbOus/yqfRu84bIqovHz8OqvbYaGnFNVoXi6W52XCeb/mX7FJEyFRb2o+eF kUGQ==; 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=1774517085; x=1775121885; 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=s+q/igdntxwxAKm0CDkr1zKlzzkjNgEwfklKpqnujw8=; b=rXdaITFvlkeeIaLmx6rpTtpWeXrNSQemckf4+Zy8yYcDAb82JHJdRATVr7sEhGmM9+ FWPOit24OJ7CsKv3V45IFZtXfqtzla2KewAL3B5SyE6cWi6+5PUjKE9BtO5/nWvOMVnc vv9dp0Elh2ZvUZYxL5E2aFHBN136xBTozMblo7AZINJ5Dku2E/Ep1n/N4vIrbGWAxk6y sOPwRLTC2mc9QSq4CP5Beon4Arv+EcviQEMGRTDf3yzmGnWf93I2+JYGRkjNYqN3AyJ1 G4OswojcO/Hw/UAEHGqTQJN74rYB1oRfuBlTRS1FLlZVfe1mGNSttOxOCq3w8nIPT8QH ZPwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774517085; x=1775121885; 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=s+q/igdntxwxAKm0CDkr1zKlzzkjNgEwfklKpqnujw8=; b=dzA0AOTbtDBm7wz/eOzpkn0MTksQU7Il984BTfK50OPaSLyUTktUiMGvy/VVNtDWkh RjszBZB2OGctoYoKV+k4gj6Chznkfp+RXWuRPjCFKboPHV+XTnhHsx035wD7FUe+ENWE 0JaHMXw55AfsujHB5BAvDmqz9JwOHyrQslkmUp7yqMTk8wZMx/txTJs9/zHUTzNwFIaE Qb0u+/osp9zrcPxppvLqJyW66qXdAit6O5t7Zg3ai20eIHgPpZi83ldFST4TVTOowORd eQLCEzSwRScI+C2uwpq+77Gnat/RWXBT9HP7IuK4AHdI8iTIAYGun2BbHgXzw+eOvYX9 8J5g== X-Forwarded-Encrypted: i=1; AJvYcCUokvHlOi94z+AhmZMXlQ4euykSA6fxJRmlkBPf8fUdzv6u0HIbc3eWbyIkD7QlczhoaA6cL3Ab3XkUjEQ1@postgresql.org X-Gm-Message-State: AOJu0Yyf9ac/SyT7eBb7YtNNta6LB1UQX390kfTFk/z2Z1GaKgD8Cg+0 bmA4rNN1GNO0Q5VIRf0pR6dSJvsvdjK6g+/2miFz7FGBYd1qDdlxXBOYvXXdJKbTkDOR9P9c6l2 IGl2if1MeQKboQOqnw4HK5/lV9/y3UZo= X-Gm-Gg: ATEYQzyfUXCWCTAKWM48HvABzdJvFMZgBzhm7z4OPKiT2rvTK++wVdZslF/wBIkwM9Y Jh9uNEUWcCEKHq8kN9SJiitUj03P26xhSnWTM1eLUI3cUo/lWZroP6QXSctJDC3v+F3iS+peqyZ mHHa9LZkYNkYXNlYA6hknAxf5NoVAwfca/K8Kb7FfOJoXpFASxp4BNU9lo/gH0zhSARtK1ItnOY IC1oAqzMfNTcijZ3Md4ME2g52uymppGiohWNHPH5d+JIrJ1Hra4Qs52atrU4HiTQONwMdkX/fdY IEPL3xQC X-Received: by 2002:a17:902:d549:b0:2b0:c3c9:cf15 with SMTP id d9443c01a7336-2b0c3c9d4c2mr12922445ad.15.1774517085410; Thu, 26 Mar 2026 02:24:45 -0700 (PDT) MIME-Version: 1.0 References: <54c35fb9-da3a-4754-ab8c-46ed0b612465@vondra.me> <684c70d7-180e-461d-9377-600c2db581ba@vondra.me> <605328.1747710381@sss.pgh.pa.us> <691261.1747755511@sss.pgh.pa.us> In-Reply-To: From: Amit Langote Date: Thu, 26 Mar 2026 18:24:28 +0900 X-Gm-Features: AQROBzBO4dtnfHsY7k41OQ1Etu2IDcDE73oouBy58PnWkvAkubn4MhtVhQX78nc Message-ID: Subject: Re: generic plans and "initial" pruning To: Chao Li Cc: Tom Lane , Tender Wang , Alexander Lakhin , Tomas Vondra , Robert Haas , Alvaro Herrera , Andres Freund , Daniel Gustafsson , David Rowley , PostgreSQL Hackers , Thom Brown Content-Type: multipart/mixed; boundary="000000000000863682064de9f4e6" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000863682064de9f4e6 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Mar 25, 2026 at 4:39=E2=80=AFPM Amit Langote wrote: > On Fri, Mar 20, 2026 at 2:20=E2=80=AFAM Amit Langote wrote: > > On Mon, Mar 9, 2026 at 1:41=E2=80=AFPM Amit Langote wrote: > > Stepping back -- the core question is whether running executor logic > > (pruning) inside GetCachedPlan() is acceptable at all. The plan cache > > and executor have always had a clean boundary: plan cache locks > > everything, executor runs. This optimization necessarily crosses that > > line, because the information needed to decide which locks to skip > > (pruning results) can only come from executor machinery. > > > > The proposed approach has GetCachedPlan() call ExecutorPrep() to do a > > limited subset of executor work (range table init, permissions, > > pruning), carry the results out through CachedPlanPrepData, and leave > > the CachedPlan itself untouched. The executor already has a multi-step > > protocol: start/run/end. prep/start/run/end is just a finer > > decomposition of what InitPlan() was already doing inside > > ExecutorStart(). > > > > Of the attached patches, I'm targeting 0001-0003 for commit. 0004 (SQL > > function support) and 0005 (parallel worker reuse) are useful > > follow-ons but not essential. The optimization works without them for > > most cases, and they can be reviewed and committed separately. > > > > If there's a cleaner way to avoid locking pruned partitions without > > the plumbing this patch adds, I haven't found it in the year since the > > revert. I'd welcome a pointer if you see one. Failing that, I think > > this is the right trade-off, but it's a judgment call about where to > > hold your nose. > > > > Tom, I'd value your opinion on whether this approach is something > > you'd be comfortable seeing in the tree. > > Attached is an updated set with some cleanup after another pass. > > - Removed ExecCreatePartitionPruneStates() from 0001. In 0001-0003, > ExecDoInitialPruning() handles both setup and pruning internally; the > split isn't needed yet. > > - Tightened commit messages to describe what each commit does now, not > what later commits will use it for. In particular, 0002 is upfront > that the portal/SPI/EXPLAIN plumbing is scaffolding that 0003 lights > up. > > - Updated setrefs.c comment for firstResultRels to drop a blanket > claim about one ModifyTable per query level. > > As before, 0001-0003 is the focus, maybe 0004 which teaches the new > GetCachedPlan() pruning-aware contract to its relatively new user in > function.c. While reviewing the patch more carefully, I realized there's a correctness issue when rule rewriting causes a single statement to expand into multiple PlannedStmts in one CachedPlan. PortalRunMulti() executes those statements sequentially, with CommandCounterIncrement() between them, so Q2's ExecutorStart() normally sees the effects of Q1. With the patch, though, AcquireExecutorLocksUnpruned() runs ExecutorPrep() on all PlannedStmts in one pass during GetCachedPlan(), before any statement executes. If a later statement has initial-pruning expressions that read data modified by an earlier one, pruning can see stale results. There's also a memory lifetime issue: PortalRunMulti() calls MemoryContextDeleteChildren(portalContext) between statements, which destroys EStates prepared for later statements. Here's a concrete case demonstrating the semantic issue: create table multistmt_pt (a int, b int) partition by list (a); create table multistmt_pt_1 partition of multistmt_pt for values in (1); create table multistmt_pt_2 partition of multistmt_pt for values in (2); insert into multistmt_pt values (1, 0), (2, 0); create table prune_config (val int); insert into prune_config values (1); create function get_prune_val() returns int as $$ select val from prune_config; $$ language sql stable; -- rule action runs first, updating prune_config before the -- original statement's pruning would normally be evaluated create rule config_upd_rule as on update to multistmt_pt do also update prune_config set val =3D 2; set plan_cache_mode to force_generic_plan; prepare multi_q as update multistmt_pt set b =3D b + 1 where a =3D get_prune_val(); execute multi_q; -- creates the generic plan -- reset for the real test update prune_config set val =3D 1; update multistmt_pt set b =3D 0; -- second execute reuses the plan execute multi_q; select * from multistmt_pt order by a; Without the patch: the rule action updates prune_config to val=3D2 first, then after CCI the original statement's initial pruning calls get_prune_val(), gets 2, prunes to multistmt_pt_2, and updates it correctly: (1, 0), (2, 1). With the patch as it stood: both statements' pruning runs during GetCachedPlan() before either executes. The original statement's pruning sees val=3D1, prunes to multistmt_pt_1, and multistmt_pt_2 is never touched. The fix is to skip pruning-aware locking for CachedPlans containing multiple PlannedStmts, falling back to locking all partitions. Single-statement plans are unchanged. Since multi-statement plans are now excluded, CachedPlanPrepData no longer needs a list of EStates -- it carries a single EState pointer. This simplifies the plumbing throughout: PortalData, PortalDefineQuery, SPI, and EXPLAIN all pass a single optional EState instead of walking parallel lists. The next_prep_estate() helper is gone. Attached is the updated set. -- Thanks, Amit Langote --000000000000863682064de9f4e6 Content-Type: application/octet-stream; name="v10-0005-Reuse-partition-pruning-results-in-parallel-work.patch" Content-Disposition: attachment; filename="v10-0005-Reuse-partition-pruning-results-in-parallel-work.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn79k0040 RnJvbSAzM2ZmZjZlMDkwZDljNzEzNDEzYTY4ZWYyYmRmOTcyMWY3ZTdmOTViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFdlZCwgMjUgTWFyIDIwMjYgMTY6MDY6NTcgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx MCA1LzVdIFJldXNlIHBhcnRpdGlvbiBwcnVuaW5nIHJlc3VsdHMgaW4gcGFyYWxsZWwgd29ya2Vy cwoKUGFzcyB0aGUgbGVhZGVyJ3MgaW5pdGlhbCBwYXJ0aXRpb24gcHJ1bmluZyByZXN1bHRzIGFu ZCB1bnBydW5lZApyZWxpZHMgdG8gcGFyYWxsZWwgd29ya2VycyBhbmQgcmV1c2UgdGhlbSB2aWEg RXhlY3V0b3JQcmVwKCkuICBUaGlzCmF2b2lkcyByZXBlYXRpbmcgcHJ1bmluZyBsb2dpYyBpbiB3 b3JrZXJzLCB3aGljaCBpcyBub3Qgb25seQpyZWR1bmRhbnQgYnV0IGFsc28gcmlza3MgZGl2ZXJn ZW5jZSBkdWUgdG8gbm9uZGV0ZXJtaW5pc20gaW4gcHJ1bmluZwpzdGVwcyBvciBwYXJhbWV0ZXIg ZXZhbHVhdGlvbiB0aW1pbmcuCgpGYWN0b3IgdGhlIGNyZWF0aW9uIG9mIFBhcnRpdGlvblBydW5l U3RhdGUgc3RydWN0dXJlcyBvdXQgb2YKRXhlY0RvSW5pdGlhbFBydW5pbmcoKSBpbnRvIGEgbmV3 IEV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlcygpCmZ1bmN0aW9uLiAgUGFyYWxsZWwgd29y a2VycyBuZWVkIHRvIHNldCB1cCBwcnVuaW5nIHN0YXRlIHdpdGhvdXQKcGVyZm9ybWluZyBpbml0 aWFsIHBydW5pbmcsIHNpbmNlIHRoZXkgcmVjZWl2ZSB0aGUgbGVhZGVyJ3MgcmVzdWx0cwppbnN0 ZWFkLgoKSW50cm9kdWNlIENoZWNrSW5pdGlhbFBydW5pbmdSZXN1bHRzSW5Xb3JrZXIoKSAoZGVi dWctYnVpbGRzIG9ubHkpCnRvIHZlcmlmeSB0aGF0IHRoZSByZXN1bHRzIG1hdGNoIHdoYXQgdGhl IHdvcmtlciB3b3VsZCBjb21wdXRlLgpUaGlzIGNoZWNrIGhlbHBzIGNhdGNoIGluY29uc2lzdGVu Y2llcyBhY3Jvc3MgbGVhZGVyIGFuZCB3b3JrZXIKcHJ1bmluZyBsb2dpYy4KLS0tCiBzcmMvYmFj a2VuZC9leGVjdXRvci9leGVjTWFpbi5jICAgICAgfCAgMjUgKysrKystLQogc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMgIHwgMTA4ICsrKysrKysrKysrKysrKysrKysrKysrKysr LQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jIHwgIDQ0ICsrKysrKysrLS0t CiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYyAgfCAgIDIgKy0KIHNyYy9pbmNs dWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCB8ICAgMSArCiBzcmMvaW5jbHVkZS9leGVjdXRv ci9leGVjdXRvci5oICAgICAgfCAgIDMgKy0KIDYgZmlsZXMgY2hhbmdlZCwgMTYxIGluc2VydGlv bnMoKyksIDIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNNYWluLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCmluZGV4IDA1MWI1 ZDdiZmNmLi42NTk1NTcxODljZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y01haW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCkBAIC0yMDcsNyAr MjA3LDcgQEAgc3RhbmRhcmRfRXhlY3V0b3JTdGFydChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50 IGVmbGFncykKIAkJcXVlcnlEZXNjLT5lc3RhdGUgPSBFeGVjdXRvclByZXAocXVlcnlEZXNjLT5w bGFubmVkc3RtdCwKIAkJCQkJCQkJCQkgcXVlcnlEZXNjLT5wYXJhbXMsCiAJCQkJCQkJCQkJIEN1 cnJlbnRSZXNvdXJjZU93bmVyLAotCQkJCQkJCQkJCSBlZmxhZ3MpOworCQkJCQkJCQkJCSBlZmxh Z3MsIHRydWUpOwogCX0KICNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCiAJZWxzZQpAQCAtMzMw LDcgKzMzMCw4IEBAIHN0YW5kYXJkX0V4ZWN1dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVyeURlc2Ms IGludCBlZmxhZ3MpCiAgKiBFeGVjdXRvclByZXA6IGJ1aWxkIGluaXRpYWwgZXhlY3V0b3Igc3Rh dGUgZm9yIGEgUGxhbm5lZFN0bXQuCiAgKgogICogUGVyZm9ybXMgcmFuZ2UgdGFibGUgaW5pdGlh bGl6YXRpb24sIHBlcm1pc3Npb24gY2hlY2tzLCBhbmQgaW5pdGlhbAotICogcGFydGl0aW9uIHBy dW5pbmcgaWYgcGFydFBydW5lSW5mb3MgYXJlIHByZXNlbnQuCisgKiBwYXJ0aXRpb24gcHJ1bmlu ZyBpZiBwYXJ0UHJ1bmVJbmZvcyBhcmUgcHJlc2VudCBhbmQgZG9faW5pdGlhbF9wcnVuaW5nIGlz CisgKiB0cnVlOyBmYWxzZSBpbiBhIHBhcmFsbGVsIHdvcmtlci4KICAqCiAgKiBSZXR1cm5zIGFu IEVTdGF0ZSB0aGF0IHRoZSBjYWxsZXIgbXVzdCBlaXRoZXIgcGFzcyB0byBFeGVjdXRvclN0YXJ0 KCkKICAqIGZvciByZXVzZSBvciBmcmVlIHZpYSBGcmVlRXhlY3V0b3JTdGF0ZSgpIGlmIGV4ZWN1 dGlvbiB3aWxsIG5vdCBwcm9jZWVkLgpAQCAtMzQxLDcgKzM0Miw3IEBAIHN0YW5kYXJkX0V4ZWN1 dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpCiAgKi8KIEVTdGF0ZSAq CiBFeGVjdXRvclByZXAoUGxhbm5lZFN0bXQgKnBzdG10LCBQYXJhbUxpc3RJbmZvIHBhcmFtcywg UmVzb3VyY2VPd25lciBvd25lciwKLQkJCSBpbnQgZWZsYWdzKQorCQkJIGludCBlZmxhZ3MsIGJv b2wgZG9faW5pdGlhbF9wcnVuaW5nKQogewogCVJlc291cmNlT3duZXIgb2xkb3duZXI7CiAJRVN0 YXRlICplc3RhdGU7CkBAIC0zNzgsMTQgKzM3OSwyMiBAQCBFeGVjdXRvclByZXAoUGxhbm5lZFN0 bXQgKnBzdG10LCBQYXJhbUxpc3RJbmZvIHBhcmFtcywgUmVzb3VyY2VPd25lciBvd25lciwKIAlD dXJyZW50UmVzb3VyY2VPd25lciA9IG93bmVyOwogCiAJLyoKLQkgKiBTZXQgdXAgUGFydGl0aW9u UHJ1bmVTdGF0ZSBzdHJ1Y3R1cmVzIGFuZCBwZXJmb3JtIGluaXRpYWwgcGFydGl0aW9uCi0JICog cHJ1bmluZyB0byBjb21wdXRlIHRoZSBzdWJzZXQgb2YgY2hpbGQgc3VicGxhbnMgdGhhdCB3aWxs IGJlCi0JICogZXhlY3V0ZWQuICBUaGUgcmVzdWx0cywgd2hpY2ggYXJlIGJpdG1hcHNldHMgb2Yg c2VsZWN0ZWQgY2hpbGQKLQkgKiBpbmRleGVzLCBhcmUgc2F2ZWQgaW4gZXNfcGFydF9wcnVuZV9y ZXN1bHRzLCBwYXJhbGxlbCB0bworCSAqIFNldCB1cCBQYXJ0aXRpb25QcnVuZVN0YXRlIHN0cnVj dHVyZXMgbmVlZGVkIGZvciBpbml0aWFsCisJICogcGFydGl0aW9uIHBydW5pbmcuCisJICoKKwkg KiBJZiBkb19pbml0aWFsX3BydW5pbmcgaXMgdHJ1ZSwgYWxzbyBwZXJmb3JtIGluaXRpYWwgcHJ1 bmluZyB0bworCSAqIGNvbXB1dGUgdGhlIHN1YnNldCBvZiBjaGlsZCBzdWJwbGFucyB0aGF0IHdp bGwgYmUgZXhlY3V0ZWQuCisJICogVGhlIHJlc3VsdHMsIHdoaWNoIGFyZSBiaXRtYXBzZXRzIG9m IHNlbGVjdGVkIGNoaWxkIGluZGV4ZXMsCisJICogYXJlIHNhdmVkIGluIGVzX3BhcnRfcHJ1bmVf cmVzdWx0cywgcGFyYWxsZWwgdG8KIAkgKiBlc19wYXJ0X3BydW5lX2luZm9zLiAgUlQgaW5kZXhl cyBvZiBzdXJ2aXZpbmcgcGFydGl0aW9ucyBhcmUKIAkgKiBhZGRlZCB0byBlc191bnBydW5lZF9y ZWxpZHMuCisJICoKKwkgKiBQYXJhbGxlbCB3b3JrZXJzIHBhc3MgZmFsc2UgaGVyZSBhbmQgaW5z dGVhZCByZWNlaXZlIHRoZQorCSAqIGxlYWRlcidzIHBydW5pbmcgcmVzdWx0cyB2aWEgc2hhcmVk IG1lbW9yeS4KIAkgKi8KLQlFeGVjRG9Jbml0aWFsUHJ1bmluZyhlc3RhdGUpOworCUV4ZWNDcmVh dGVQYXJ0aXRpb25QcnVuZVN0YXRlcyhlc3RhdGUpOworCWlmIChkb19pbml0aWFsX3BydW5pbmcp CisJCUV4ZWNEb0luaXRpYWxQcnVuaW5nKGVzdGF0ZSk7CiAKIAlDdXJyZW50UmVzb3VyY2VPd25l ciA9IG9sZG93bmVyOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFy YWxsZWwuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCmluZGV4IDAyNDc4 MGQzNTE2Li4yZGU0YjM1YTE2ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1BhcmFsbGVsLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMKQEAg LTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAiZXhlY3V0 b3IvZXhlY1BhcmFsbGVsLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIgog I2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUFn Zy5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVBcHBlbmQuaCIKQEAgLTY3LDYgKzY4LDggQEAK ICNkZWZpbmUgUEFSQUxMRUxfS0VZX1FVRVJZX1RFWFQJCVVJTlQ2NENPTlNUKDB4RTAwMDAwMDAw MDAwMDAwOCkKICNkZWZpbmUgUEFSQUxMRUxfS0VZX0pJVF9JTlNUUlVNRU5UQVRJT04gVUlOVDY0 Q09OU1QoMHhFMDAwMDAwMDAwMDAwMDA5KQogI2RlZmluZSBQQVJBTExFTF9LRVlfV0FMX1VTQUdF CQkJVUlOVDY0Q09OU1QoMHhFMDAwMDAwMDAwMDAwMDBBKQorI2RlZmluZSBQQVJBTExFTF9LRVlf UEFSVElUSU9OX1BSVU5FX1JFU1VMVFMJVUlOVDY0Q09OU1QoMHhFMDAwMDAwMDAwMDAwMDBCKQor I2RlZmluZSBQQVJBTExFTF9LRVlfVU5QUlVORURfUkVMSURTCVVJTlQ2NENPTlNUKDB4RTAwMDAw MDAwMDAwMDAwQykKIAogI2RlZmluZSBQQVJBTExFTF9UVVBMRV9RVUVVRV9TSVpFCQk2NTUzNgog CkBAIC0xNDEsNiArMTQ0LDggQEAgc3RhdGljIGJvb2wgRXhlY1BhcmFsbGVsUmV0cmlldmVJbnN0 cnVtZW50YXRpb24oUGxhblN0YXRlICpwbGFuc3RhdGUsCiAvKiBIZWxwZXIgZnVuY3Rpb24gdGhh dCBydW5zIGluIHRoZSBwYXJhbGxlbCB3b3JrZXIuICovCiBzdGF0aWMgRGVzdFJlY2VpdmVyICpF eGVjUGFyYWxsZWxHZXRSZWNlaXZlcihkc21fc2VnbWVudCAqc2VnLCBzaG1fdG9jICp0b2MpOwog CitzdGF0aWMgdm9pZCBDaGVja0luaXRpYWxQcnVuaW5nUmVzdWx0c0luV29ya2VyKEVTdGF0ZSAq ZXN0YXRlKTsKKwogLyoKICAqIENyZWF0ZSBhIHNlcmlhbGl6ZWQgcmVwcmVzZW50YXRpb24gb2Yg dGhlIHBsYW4gdG8gYmUgc2VudCB0byBlYWNoIHdvcmtlci4KICAqLwpAQCAtNjIwLDEyICs2MjUs MTggQEAgRXhlY0luaXRQYXJhbGxlbFBsYW4oUGxhblN0YXRlICpwbGFuc3RhdGUsIEVTdGF0ZSAq ZXN0YXRlLAogCUZpeGVkUGFyYWxsZWxFeGVjdXRvclN0YXRlICpmcGVzOwogCWNoYXIJICAgKnBz dG10X2RhdGE7CiAJY2hhcgkgICAqcHN0bXRfc3BhY2U7CisJY2hhcgkgICAqcGFydF9wcnVuZV9y ZXN1bHRzX2RhdGE7CisJY2hhcgkgICAqcGFydF9wcnVuZV9yZXN1bHRzX3NwYWNlOworCWNoYXIJ ICAgKnVucHJ1bmVkX3JlbGlkc19kYXRhOworCWNoYXIJICAgKnVucHJ1bmVkX3JlbGlkc19zcGFj ZTsKIAljaGFyCSAgICpwYXJhbWxpc3RpbmZvX3NwYWNlOwogCUJ1ZmZlclVzYWdlICpidWZ1c2Fn ZV9zcGFjZTsKIAlXYWxVc2FnZSAgICp3YWx1c2FnZV9zcGFjZTsKIAlTaGFyZWRFeGVjdXRvcklu c3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudGF0aW9uID0gTlVMTDsKIAlTaGFyZWRKaXRJbnN0cnVt ZW50YXRpb24gKmppdF9pbnN0cnVtZW50YXRpb24gPSBOVUxMOwogCWludAkJCXBzdG10X2xlbjsK KwlpbnQJCQlwYXJ0X3BydW5lX3Jlc3VsdHNfbGVuOworCWludAkJCXVucHJ1bmVkX3JlbGlkc19s ZW47CiAJaW50CQkJcGFyYW1saXN0aW5mb19sZW47CiAJaW50CQkJaW5zdHJ1bWVudGF0aW9uX2xl biA9IDA7CiAJaW50CQkJaml0X2luc3RydW1lbnRhdGlvbl9sZW4gPSAwOwpAQCAtNjU0LDYgKzY2 NSw4IEBAIEV4ZWNJbml0UGFyYWxsZWxQbGFuKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFU3RhdGUg KmVzdGF0ZSwKIAogCS8qIEZpeCB1cCBhbmQgc2VyaWFsaXplIHBsYW4gdG8gYmUgc2VudCB0byB3 b3JrZXJzLiAqLwogCXBzdG10X2RhdGEgPSBFeGVjU2VyaWFsaXplUGxhbihwbGFuc3RhdGUtPnBs YW4sIGVzdGF0ZSk7CisJcGFydF9wcnVuZV9yZXN1bHRzX2RhdGEgPSBub2RlVG9TdHJpbmcoZXN0 YXRlLT5lc19wYXJ0X3BydW5lX3Jlc3VsdHMpOworCXVucHJ1bmVkX3JlbGlkc19kYXRhID0gbm9k ZVRvU3RyaW5nKGVzdGF0ZS0+ZXNfdW5wcnVuZWRfcmVsaWRzKTsKIAogCS8qIENyZWF0ZSBhIHBh cmFsbGVsIGNvbnRleHQuICovCiAJcGN4dCA9IENyZWF0ZVBhcmFsbGVsQ29udGV4dCgicG9zdGdy ZXMiLCAiUGFyYWxsZWxRdWVyeU1haW4iLCBud29ya2Vycyk7CkBAIC02ODAsNiArNjkzLDE2IEBA IEV4ZWNJbml0UGFyYWxsZWxQbGFuKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFU3RhdGUgKmVzdGF0 ZSwKIAlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsIHBzdG10X2xlbik7 CiAJc2htX3RvY19lc3RpbWF0ZV9rZXlzKCZwY3h0LT5lc3RpbWF0b3IsIDEpOwogCisJLyogRXN0 aW1hdGUgc3BhY2UgZm9yIHNlcmlhbGl6ZWQgcGFydF9wcnVuZV9yZXN1bHRzLiAqLworCXBhcnRf cHJ1bmVfcmVzdWx0c19sZW4gPSBzdHJsZW4ocGFydF9wcnVuZV9yZXN1bHRzX2RhdGEpICsgMTsK KwlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsIHBhcnRfcHJ1bmVfcmVz dWx0c19sZW4pOworCXNobV90b2NfZXN0aW1hdGVfa2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAxKTsK KworCS8qIEVzdGltYXRlIHNwYWNlIGZvciBzZXJpYWxpemVkIHVucHJ1bmVkX3JlbGlkcy4gKi8K Kwl1bnBydW5lZF9yZWxpZHNfbGVuID0gc3RybGVuKHVucHJ1bmVkX3JlbGlkc19kYXRhKSArIDE7 CisJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCB1bnBydW5lZF9yZWxp ZHNfbGVuKTsKKwlzaG1fdG9jX2VzdGltYXRlX2tleXMoJnBjeHQtPmVzdGltYXRvciwgMSk7CisK IAkvKiBFc3RpbWF0ZSBzcGFjZSBmb3Igc2VyaWFsaXplZCBQYXJhbUxpc3RJbmZvLiAqLwogCXBh cmFtbGlzdGluZm9fbGVuID0gRXN0aW1hdGVQYXJhbUxpc3RTcGFjZShlc3RhdGUtPmVzX3BhcmFt X2xpc3RfaW5mbyk7CiAJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBw YXJhbWxpc3RpbmZvX2xlbik7CkBAIC03ODEsNiArODA0LDE2IEBAIEV4ZWNJbml0UGFyYWxsZWxQ bGFuKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFU3RhdGUgKmVzdGF0ZSwKIAltZW1jcHkocHN0bXRf c3BhY2UsIHBzdG10X2RhdGEsIHBzdG10X2xlbik7CiAJc2htX3RvY19pbnNlcnQocGN4dC0+dG9j LCBQQVJBTExFTF9LRVlfUExBTk5FRFNUTVQsIHBzdG10X3NwYWNlKTsKIAorCS8qIFN0b3JlIHNl cmlhbGl6ZWQgcGFydF9wcnVuZV9yZXN1bHRzICovCisJcGFydF9wcnVuZV9yZXN1bHRzX3NwYWNl ID0gc2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2MsIHBhcnRfcHJ1bmVfcmVzdWx0c19sZW4pOwor CW1lbWNweShwYXJ0X3BydW5lX3Jlc3VsdHNfc3BhY2UsIHBhcnRfcHJ1bmVfcmVzdWx0c19kYXRh LCBwYXJ0X3BydW5lX3Jlc3VsdHNfbGVuKTsKKwlzaG1fdG9jX2luc2VydChwY3h0LT50b2MsIFBB UkFMTEVMX0tFWV9QQVJUSVRJT05fUFJVTkVfUkVTVUxUUywgcGFydF9wcnVuZV9yZXN1bHRzX3Nw YWNlKTsKKworCS8qIFN0b3JlIHNlcmlhbGl6ZWQgdW5wcnVuZWRfcmVsaWRzICovCisJdW5wcnVu ZWRfcmVsaWRzX3NwYWNlID0gc2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2MsIHVucHJ1bmVkX3Jl bGlkc19sZW4pOworCW1lbWNweSh1bnBydW5lZF9yZWxpZHNfc3BhY2UsIHVucHJ1bmVkX3JlbGlk c19kYXRhLCB1bnBydW5lZF9yZWxpZHNfbGVuKTsKKwlzaG1fdG9jX2luc2VydChwY3h0LT50b2Ms IFBBUkFMTEVMX0tFWV9VTlBSVU5FRF9SRUxJRFMsIHVucHJ1bmVkX3JlbGlkc19zcGFjZSk7CisK IAkvKiBTdG9yZSBzZXJpYWxpemVkIFBhcmFtTGlzdEluZm8uICovCiAJcGFyYW1saXN0aW5mb19z cGFjZSA9IHNobV90b2NfYWxsb2NhdGUocGN4dC0+dG9jLCBwYXJhbWxpc3RpbmZvX2xlbik7CiAJ c2htX3RvY19pbnNlcnQocGN4dC0+dG9jLCBQQVJBTExFTF9LRVlfUEFSQU1MSVNUSU5GTywgcGFy YW1saXN0aW5mb19zcGFjZSk7CkBAIC0xMjgwLDEwICsxMzEzLDE1IEBAIEV4ZWNQYXJhbGxlbEdl dFF1ZXJ5RGVzYyhzaG1fdG9jICp0b2MsIERlc3RSZWNlaXZlciAqcmVjZWl2ZXIsCiAJCQkJCQkg aW50IGluc3RydW1lbnRfb3B0aW9ucykKIHsKIAljaGFyCSAgICpwc3RtdHNwYWNlOworCWNoYXIJ ICAgKnBhcnRfcHJ1bmVfcmVzdWx0c19zcGFjZTsKKwljaGFyCSAgICp1bnBydW5lZF9yZWxpZHNf c3BhY2U7CiAJY2hhcgkgICAqcGFyYW1zcGFjZTsKIAlQbGFubmVkU3RtdCAqcHN0bXQ7CisJTGlz dAkgICAqcGFydF9wcnVuZV9yZXN1bHRzOworCUJpdG1hcHNldCAgKnVucHJ1bmVkX3JlbGlkczsK IAlQYXJhbUxpc3RJbmZvIHBhcmFtTEk7CiAJY2hhcgkgICAqcXVlcnlTdHJpbmc7CisJRVN0YXRl CSAgICpwcmVwX2VzdGF0ZSA9IE5VTEw7CiAKIAkvKiBHZXQgdGhlIHF1ZXJ5IHN0cmluZyBmcm9t IHNoYXJlZCBtZW1vcnkgKi8KIAlxdWVyeVN0cmluZyA9IHNobV90b2NfbG9va3VwKHRvYywgUEFS QUxMRUxfS0VZX1FVRVJZX1RFWFQsIGZhbHNlKTsKQEAgLTEyOTYsMTIgKzEzMzQsODAgQEAgRXhl Y1BhcmFsbGVsR2V0UXVlcnlEZXNjKHNobV90b2MgKnRvYywgRGVzdFJlY2VpdmVyICpyZWNlaXZl ciwKIAlwYXJhbXNwYWNlID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9LRVlfUEFSQU1M SVNUSU5GTywgZmFsc2UpOwogCXBhcmFtTEkgPSBSZXN0b3JlUGFyYW1MaXN0KCZwYXJhbXNwYWNl KTsKIAorCS8qIFJlY29uc3RydWN0IGxlYWRlci1zdXBwbGllZCBwYXJ0X3BydW5lX3Jlc3VsdHMg YW5kIHVucHJ1bmVkX3JlbGlkcy4gKi8KKwlwYXJ0X3BydW5lX3Jlc3VsdHNfc3BhY2UgPQorCQlz aG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVMX0tFWV9QQVJUSVRJT05fUFJVTkVfUkVTVUxUUywg ZmFsc2UpOworCXBhcnRfcHJ1bmVfcmVzdWx0cyA9IChMaXN0ICopIHN0cmluZ1RvTm9kZShwYXJ0 X3BydW5lX3Jlc3VsdHNfc3BhY2UpOworCXVucHJ1bmVkX3JlbGlkc19zcGFjZSA9CisJCXNobV90 b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfS0VZX1VOUFJVTkVEX1JFTElEUywgZmFsc2UpOworCXVu cHJ1bmVkX3JlbGlkcyA9IChCaXRtYXBzZXQgKikgc3RyaW5nVG9Ob2RlKHVucHJ1bmVkX3JlbGlk c19zcGFjZSk7CisKKwkvKgorCSAqIElmIHBydW5pbmcgd2FzIGRvbmUgaW4gdGhlIGxlYWRlciwg YnVpbGQgYSBwcmVwIGVzdGF0ZSBpbiB0aGUgd29ya2VyCisJICogYW5kIGluamVjdCB0aGUgbGVh ZGVyJ3MgcHJ1bmluZyByZXN1bHRzIGludG8gaXQgZm9yIHJldXNlLgorCSAqLworCWlmIChwc3Rt dC0+cGFydFBydW5lSW5mb3MpCisJeworCQlwcmVwX2VzdGF0ZSA9IEV4ZWN1dG9yUHJlcChwc3Rt dCwgcGFyYW1MSSwgQ3VycmVudFJlc291cmNlT3duZXIsIDAsIGZhbHNlKTsKKwkJQXNzZXJ0KHBy ZXBfZXN0YXRlKTsKKworCQlwcmVwX2VzdGF0ZS0+ZXNfcGFydF9wcnVuZV9yZXN1bHRzID0gcGFy dF9wcnVuZV9yZXN1bHRzOworCQlwcmVwX2VzdGF0ZS0+ZXNfdW5wcnVuZWRfcmVsaWRzID0KKwkJ CWJtc19hZGRfbWVtYmVycyhwcmVwX2VzdGF0ZS0+ZXNfdW5wcnVuZWRfcmVsaWRzLAorCQkJCQkJ CXVucHJ1bmVkX3JlbGlkcyk7CisKKwkJLyoKKwkJICogQSBkZWJ1Zy1idWlsZC1vbmx5IGNoZWNr IHRoYXQgdGhlIHBydW5pbmcgcmVzdWx0cyBwYXNzZWQgZnJvbSB0aGUKKwkJICogbGVhZGVyIG1h dGNoIHdoYXQgdGhlIHdvcmtlciB3b3VsZCBpbmRlcGVuZGVudGx5IGNvbXB1dGUuCisJCSAqLwor CQlDaGVja0luaXRpYWxQcnVuaW5nUmVzdWx0c0luV29ya2VyKHByZXBfZXN0YXRlKTsKKwl9CisK IAkvKiBDcmVhdGUgYSBRdWVyeURlc2MgZm9yIHRoZSBxdWVyeS4gKi8KIAlyZXR1cm4gQ3JlYXRl UXVlcnlEZXNjKHBzdG10LAogCQkJCQkJICAgcXVlcnlTdHJpbmcsCiAJCQkJCQkgICBHZXRBY3Rp dmVTbmFwc2hvdCgpLCBJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkgICByZWNlaXZlciwgcGFyYW1M SSwgTlVMTCwgaW5zdHJ1bWVudF9vcHRpb25zLAotCQkJCQkJICAgTlVMTCk7CisJCQkJCQkgICBw cmVwX2VzdGF0ZSk7Cit9CisKKy8qCisgKiBDaGVja0luaXRpYWxQcnVuaW5nUmVzdWx0c0luV29y a2VyCisgKgkJVmVyaWZ5IHBhcnRpdGlvbiBwcnVuaW5nIHJlc3VsdHMgcGFzc2VkIGZyb20gdGhl IGxlYWRlciBwcm9jZXNzLgorICoKKyAqIFRoaXMgaXMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGR1 cmluZyBwYXJhbGxlbCB3b3JrZXIgcXVlcnkgc2V0dXAuCisgKiBJdCByZWNvbXB1dGVzIGluaXRp YWwgcHJ1bmluZyByZXN1bHRzIGxvY2FsbHkgYW5kIGNvbXBhcmVzIHRoZW0gd2l0aAorICogdGhv c2UgcmVjZWl2ZWQgZnJvbSB0aGUgbGVhZGVyLiBBbnkgbWlzbWF0Y2ggbWF5IGluZGljYXRlIGEg ZGl2ZXJnZW5jZQorICogYmV0d2VlbiBsZWFkZXIgYW5kIHdvcmtlciBsb2dpYyBvciBlbnZpcm9u bWVudC4KKyAqCisgKiBPbmx5IHBlcmZvcm1lZCBpbiBkZWJ1ZyBidWlsZHMuCisgKi8KK3N0YXRp YyB2b2lkCitDaGVja0luaXRpYWxQcnVuaW5nUmVzdWx0c0luV29ya2VyKEVTdGF0ZSAqZXN0YXRl KQoreworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlMaXN0Q2VsbCAgICpsYzsKKwlpbnQJ CQlpOworCisJQXNzZXJ0KGVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9yZXN1bHRzICE9IE5VTEwpOwor CWkgPSAwOworCWZvcmVhY2gobGMsIGVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9zdGF0ZXMpCisJewor CQlQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlID0gKFBhcnRpdGlvblBydW5lU3RhdGUg KikgbGZpcnN0KGxjKTsKKwkJQml0bWFwc2V0ICpyZXVzZV92YWxpZHN1YnBsYW5zID0KKwkJCQls aXN0X250aF9ub2RlKEJpdG1hcHNldCwgZXN0YXRlLT5lc19wYXJ0X3BydW5lX3Jlc3VsdHMsIGkr Kyk7CisJCUJpdG1hcHNldCAgKnZhbGlkc3VicGxhbnMgPSBOVUxMOworCQlCaXRtYXBzZXQgICp2 YWxpZHN1YnBsYW5fcnRpcyA9IE5VTEw7CisKKwkJaWYgKHBydW5lc3RhdGUtPmRvX2luaXRpYWxf cHJ1bmUpCisJCQl2YWxpZHN1YnBsYW5zID0gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKHBydW5l c3RhdGUsIHRydWUsCisJCQkJCQkJCQkJCQkJICZ2YWxpZHN1YnBsYW5fcnRpcyk7CisJCWlmICgh Ym1zX2VxdWFsKHZhbGlkc3VicGxhbnMsIHJldXNlX3ZhbGlkc3VicGxhbnMpKQorCQkJZWxvZyhF UlJPUiwgImRpZmZlcmVudCB2YWxpZHN1YnBsYW5zIGluIHBhcmFsbGVsIHdvcmtlciIpOworCQlp ZiAoYm1zX25vbmVtcHR5X2RpZmZlcmVuY2UodmFsaWRzdWJwbGFuX3J0aXMsIGVzdGF0ZS0+ZXNf dW5wcnVuZWRfcmVsaWRzKSkKKwkJCWVsb2coRVJST1IsICJkaWZmZXJlbnQgdW5wcnVuYWJsZV9y ZWxpZHMgaW4gcGFyYWxsZWwgd29ya2VyIik7CisJfQorI2VuZGlmCiB9CiAKIC8qCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjUGFydGl0aW9uLmMKaW5kZXggMmEzYWYwMDZmNzcuLjQ3MzIyNjE0YWFkIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKKysrIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCkBAIC0xOTQyLDYgKzE5NDIsOSBAQCBh ZGp1c3RfcGFydGl0aW9uX2NvbG5vc191c2luZ19tYXAoTGlzdCAqY29sbm9zLCBBdHRyTWFwICph dHRyTWFwKQogICoKICAqIEZ1bmN0aW9uczoKICAqCisgKiBFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1 bmVTdGF0ZXMKKyAqICAgICBDcmVhdGUgUGFydGl0aW9uUHJ1bmVTdGF0ZSBmb3IgYWxsIFBhcnRp dGlvblBydW5lSW5mb3MgaW4gdGhlIEVTdGF0ZQorICoKICAqIEV4ZWNEb0luaXRpYWxQcnVuaW5n OgogICoJCVBlcmZvcm0gcnVudGltZSAiaW5pdGlhbCIgcHJ1bmluZywgaWYgbmVjZXNzYXJ5LCB0 byBkZXRlcm1pbmUgdGhlIHNldAogICoJCW9mIGNoaWxkIHN1Ym5vZGVzIHRoYXQgbmVlZCB0byBi ZSBpbml0aWFsaXplZCBkdXJpbmcgRXhlY0luaXROb2RlKCkgZm9yCkBAIC0xOTY3LDE1ICsxOTcw LDQwIEBAIGFkanVzdF9wYXJ0aXRpb25fY29sbm9zX3VzaW5nX21hcChMaXN0ICpjb2xub3MsIEF0 dHJNYXAgKmF0dHJNYXApCiAgKi8KIAogCisvKgorICogRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5l U3RhdGVzCisgKgorICogQ3JlYXRlIGEgUGFydGl0aW9uUHJ1bmVTdGF0ZSBmb3IgZWFjaCBQYXJ0 aXRpb25QcnVuZUluZm8gaW4gdGhlIGVzdGF0ZSwKKyAqIGFuZCBzYXZlIHRoZW0gaW4gZXN0YXRl LT5lc19wYXJ0X3BydW5lX3N0YXRlcy4gVGhpcyBzZXR1cCBpcyByZXF1aXJlZAorICogYmVmb3Jl IGFueSBpbml0aWFsIG9yIHJ1bnRpbWUgcHJ1bmluZyBjYW4gb2NjdXIuCisgKi8KK3ZvaWQKK0V4 ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlcyhFU3RhdGUgKmVzdGF0ZSkKK3sKKwlMaXN0Q2Vs bCAgICpsYzsKKworCWZvcmVhY2gobGMsIGVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9pbmZvcykKKwl7 CisJCVBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvID0gbGZpcnN0X25vZGUoUGFydGl0aW9u UHJ1bmVJbmZvLCBsYyk7CisJCVBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGU7CisKKwkJ LyogQ3JlYXRlIGFuZCBzYXZlIHRoZSBQYXJ0aXRpb25QcnVuZVN0YXRlLiAqLworCQlwcnVuZXN0 YXRlID0gQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShlc3RhdGUsIHBydW5laW5mbyk7CisJCWVz dGF0ZS0+ZXNfcGFydF9wcnVuZV9zdGF0ZXMgPSBsYXBwZW5kKGVzdGF0ZS0+ZXNfcGFydF9wcnVu ZV9zdGF0ZXMsCisJCQkJCQkJCQkJCSAgIHBydW5lc3RhdGUpOworCX0KK30KKwogLyoKICAqIEV4 ZWNEb0luaXRpYWxQcnVuaW5nCiAgKgkJUGVyZm9ybSBydW50aW1lICJpbml0aWFsIiBwcnVuaW5n LCBpZiBuZWNlc3NhcnksIHRvIGRldGVybWluZSB0aGUgc2V0CiAgKgkJb2YgY2hpbGQgc3Vibm9k ZXMgdGhhdCBuZWVkIHRvIGJlIGluaXRpYWxpemVkIGR1cmluZyBFeGVjSW5pdE5vZGUoKSBmb3IK ICAqCQlwbGFuIG5vZGVzIHRoYXQgc3VwcG9ydCBwYXJ0aXRpb24gcHJ1bmluZy4KICAqCi0gKiBU aGlzIGZ1bmN0aW9uIGl0ZXJhdGVzIG92ZXIgZWFjaCBQYXJ0aXRpb25QcnVuZUluZm8gZW50cnkg aW4KLSAqIGVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9pbmZvcy4gRm9yIGVhY2ggZW50cnksIGl0IGNy ZWF0ZXMgYSBQYXJ0aXRpb25QcnVuZVN0YXRlCi0gKiBhbmQgYWRkcyBpdCB0byBlc19wYXJ0X3By dW5lX3N0YXRlcy4gIEV4ZWNJbml0UGFydGl0aW9uRXhlY1BydW5pbmcoKSBhY2Nlc3NlcworICoK KyAqIFRoaXMgZnVuY3Rpb24gaXRlcmF0ZXMgb3ZlciBlYWNoIFBhcnRpdGlvblBydW5lU3RhdGUg aW4KKyAqIGVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9zdGF0ZXMsIHdoaWNoIG11c3QgaGF2ZSBiZWVu IHBvcHVsYXRlZCBlYXJsaWVyIGJ5CisgKiBFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZXMo KS4gRXhlY0luaXRQYXJ0aXRpb25FeGVjUHJ1bmluZygpIGFjY2Vzc2VzCiAgKiB0aGVzZSBzdGF0 ZXMgdGhyb3VnaCB0aGVpciBjb3JyZXNwb25kaW5nIGluZGV4ZXMgaW4gZXNfcGFydF9wcnVuZV9z dGF0ZXMgYW5kCiAgKiBhc3NpZ25zIGVhY2ggc3RhdGUgdG8gdGhlIHBhcmVudCBub2RlJ3MgUGxh blN0YXRlLCBmcm9tIHdoZXJlIGl0IHdpbGwgYmUgdXNlZAogICogZm9yICJleGVjIiBwcnVuaW5n LgpAQCAtMTk5NiwxOCArMjAyNCwxMiBAQCBFeGVjRG9Jbml0aWFsUHJ1bmluZyhFU3RhdGUgKmVz dGF0ZSkKIAlMaXN0Q2VsbCAgICpsYzsKIAogCUFzc2VydChlc3RhdGUtPmVzX3BhcnRfcHJ1bmVf cmVzdWx0cyA9PSBOVUxMKTsKLQlmb3JlYWNoKGxjLCBlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfaW5m b3MpCisJZm9yZWFjaChsYywgZXN0YXRlLT5lc19wYXJ0X3BydW5lX3N0YXRlcykKIAl7Ci0JCVBh cnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvID0gbGZpcnN0X25vZGUoUGFydGl0aW9uUHJ1bmVJ bmZvLCBsYyk7Ci0JCVBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGU7CisJCVBhcnRpdGlv blBydW5lU3RhdGUgKnBydW5lc3RhdGUgPSAoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqKSBsZmlyc3Qo bGMpOwogCQlCaXRtYXBzZXQgICp2YWxpZHN1YnBsYW5zID0gTlVMTDsKIAkJQml0bWFwc2V0ICAq dmFsaWRzdWJwbGFuX3J0aXMgPSBOVUxMOwogCi0JCS8qIENyZWF0ZSBhbmQgc2F2ZSB0aGUgUGFy dGl0aW9uUHJ1bmVTdGF0ZS4gKi8KLQkJcHJ1bmVzdGF0ZSA9IENyZWF0ZVBhcnRpdGlvblBydW5l U3RhdGUoZXN0YXRlLCBwcnVuZWluZm8pOwotCQllc3RhdGUtPmVzX3BhcnRfcHJ1bmVfc3RhdGVz ID0gbGFwcGVuZChlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfc3RhdGVzLAotCQkJCQkJCQkJCQkgICBw cnVuZXN0YXRlKTsKLQogCQkvKgogCQkgKiBQZXJmb3JtIGluaXRpYWwgcHJ1bmluZyBzdGVwcywg aWYgYW55LCBhbmQgc2F2ZSB0aGUgcmVzdWx0CiAJCSAqIGJpdG1hcHNldCBvciBOVUxMIGFzIGRl c2NyaWJlZCBpbiB0aGUgaGVhZGVyIGNvbW1lbnQuICBSVCBpbmRleGVzCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Nh Y2hlL3BsYW5jYWNoZS5jCmluZGV4IGIwYzRkNjI1NjRkLi42YzE3OGM0NjFhNyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMKQEAgLTIxMDAsNyArMjEwMCw3IEBAIEFjcXVpcmVFeGVj dXRvckxvY2tzVW5wcnVuZWQoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUsCiAJCQl9CiAK IAkJCXByZXBfZXN0YXRlID0gRXhlY3V0b3JQcmVwKHBsYW5uZWRzdG10LCBjcHJlcC0+cGFyYW1z LAotCQkJCQkJCQkJICAgY3ByZXAtPm93bmVyLCBjcHJlcC0+ZWZsYWdzKTsKKwkJCQkJCQkJCSAg IGNwcmVwLT5vd25lciwgY3ByZXAtPmVmbGFncywgdHJ1ZSk7CiAJCQlBc3NlcnQocHJlcF9lc3Rh dGUpOwogCQkJY3ByZXAtPnByZXBfZXN0YXRlID0gcHJlcF9lc3RhdGU7CiAKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCBiL3NyYy9pbmNsdWRlL2V4ZWN1 dG9yL2V4ZWNQYXJ0aXRpb24uaAppbmRleCA4MjA2M2VjMmExNi4uNGM5NjgwOGMzNzYgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaAorKysgYi9zcmMvaW5j bHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmgKQEAgLTEzMCw2ICsxMzAsNyBAQCB0eXBlZGVm IHN0cnVjdCBQYXJ0aXRpb25QcnVuZVN0YXRlCiAJUGFydGl0aW9uUHJ1bmluZ0RhdGEgKnBhcnRw cnVuZWRhdGFbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKIH0gUGFydGl0aW9uUHJ1bmVTdGF0ZTsK IAorZXh0ZXJuIHZvaWQgRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGVzKEVTdGF0ZSAqZXN0 YXRlKTsKIGV4dGVybiB2b2lkIEV4ZWNEb0luaXRpYWxQcnVuaW5nKEVTdGF0ZSAqZXN0YXRlKTsK IGV4dGVybiBQYXJ0aXRpb25QcnVuZVN0YXRlICpFeGVjSW5pdFBhcnRpdGlvbkV4ZWNQcnVuaW5n KFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAogCQkJCQkJCQkJCQkJCQkgaW50IG5fdG90YWxfc3VicGxh bnMsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oIGIvc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAppbmRleCBmYWM1YmVmMTM4NC4uMzcxOTUzMTJiY2Ug MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKKysrIGIvc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaApAQCAtMjQwLDcgKzI0MCw4IEBAIGV4dGVybiB2b2lk IHN0YW5kYXJkX0V4ZWN1dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3Mp OwogZXh0ZXJuIEVTdGF0ZSAqRXhlY3V0b3JQcmVwKFBsYW5uZWRTdG10ICpwc3RtdCwKIAkJCQkJ CQlQYXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJCQkJCQlSZXNvdXJjZU93bmVyIG93bmVyLAotCQkJ CQkJCWludCBlZmxhZ3MpOworCQkJCQkJCWludCBlZmxhZ3MsCisJCQkJCQkJYm9vbCBkb19pbml0 aWFsX3BydW5pbmcpOwogCiBleHRlcm4gdm9pZCBFeGVjdXRvclJ1bihRdWVyeURlc2MgKnF1ZXJ5 RGVzYywKIAkJCQkJCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLCB1aW50NjQgY291bnQpOwotLSAK Mi40Ny4zCgo= --000000000000863682064de9f4e6 Content-Type: application/octet-stream; name="v10-0001-Refactor-executor-s-initial-partition-pruning-se.patch" Content-Disposition: attachment; filename="v10-0001-Refactor-executor-s-initial-partition-pruning-se.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn79k00t4 RnJvbSA2YjJhOTc0MGI0OWE1MjM4NTY5Y2ZlZWIxMWZhNjMyMjI1ZWMyY2ZiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFdlZCwgMjUgTWFyIDIwMjYgMTY6MDY6MzggKzA5MDAKU3ViamVjdDogW1BBVENIIHYx MCAxLzVdIFJlZmFjdG9yIGV4ZWN1dG9yJ3MgaW5pdGlhbCBwYXJ0aXRpb24gcHJ1bmluZyBzZXR1 cAoKU2ltcGxpZnkgaGFuZGxpbmcgb2YgdW5wcnVuZWQgcmVsaWRzIGJ5IG1vdmluZyByZXNwb25z aWJpbGl0eQpmb3IgcmVjb3JkaW5nIHRoZW0gaW4gRVN0YXRlIGludG8gQ3JlYXRlUGFydGl0aW9u UHJ1bmVTdGF0ZSgpLAphdm9pZGluZyB0aGUgbmVlZCB0byBwYXNzIGFsbF9sZWFmcGFydF9ydGlz IGFzIGFuIG91dCBwYXJhbWV0ZXIuCgpBbHNvIG1vdmUgdGhlIHNldHRpbmcgb2YgZWN4dF9wYXJh bV9leGVjX3ZhbHMgZnJvbQpFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZSgpIHRvIEluaXRF eGVjUGFydGl0aW9uUHJ1bmVDb250ZXh0cygpLAp0byBhbGxvdyB0aGUgZm9ybWVyIHRvIGJlIGNh bGxlZCBiZWZvcmUgUEFSQU1fRVhFQyBwYXJhbWV0ZXJzIGFyZQpzZXQgdXAuICBBIGxhdGVyIGNv bW1pdCBuZWVkcyB0aGlzIHdoZW4gcnVubmluZyBwcnVuaW5nIHN0YXRlIHNldHVwCm91dHNpZGUg b2YgSW5pdFBsYW4oKS4KCk5vIGJlaGF2aW9yYWwgY2hhbmdlLgotLS0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYyB8IDcwICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0K IDEgZmlsZSBjaGFuZ2VkLCA0OCBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKaW5kZXggZDk2ZDRmOTk0N2IuLjJhM2FmMDA2Zjc3 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCkBAIC0xODUsOCArMTg1LDcgQEAg c3RhdGljIGNoYXIgKkV4ZWNCdWlsZFNsb3RQYXJ0aXRpb25LZXlEZXNjcmlwdGlvbihSZWxhdGlv biByZWwsCiBzdGF0aWMgTGlzdCAqYWRqdXN0X3BhcnRpdGlvbl9jb2xub3MoTGlzdCAqY29sbm9z LCBSZXN1bHRSZWxJbmZvICpsZWFmX3BhcnRfcnJpKTsKIHN0YXRpYyBMaXN0ICphZGp1c3RfcGFy dGl0aW9uX2NvbG5vc191c2luZ19tYXAoTGlzdCAqY29sbm9zLCBBdHRyTWFwICphdHRyTWFwKTsK IHN0YXRpYyBQYXJ0aXRpb25QcnVuZVN0YXRlICpDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKEVT dGF0ZSAqZXN0YXRlLAotCQkJCQkJCQkJCQkJCSAgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWlu Zm8sCi0JCQkJCQkJCQkJCQkJICBCaXRtYXBzZXQgKiphbGxfbGVhZnBhcnRfcnRpcyk7CisJCQkJ CQkJCQkJCQkJICBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbyk7CiBzdGF0aWMgdm9pZCBJ bml0UGFydGl0aW9uUHJ1bmVDb250ZXh0KFBhcnRpdGlvblBydW5lQ29udGV4dCAqY29udGV4dCwK IAkJCQkJCQkJCSAgTGlzdCAqcHJ1bmluZ19zdGVwcywKIAkJCQkJCQkJCSAgUGFydGl0aW9uRGVz YyBwYXJ0ZGVzYywKQEAgLTE5NzgsNyArMTk3Nyw3IEBAIGFkanVzdF9wYXJ0aXRpb25fY29sbm9z X3VzaW5nX21hcChMaXN0ICpjb2xub3MsIEF0dHJNYXAgKmF0dHJNYXApCiAgKiBlc3RhdGUtPmVz X3BhcnRfcHJ1bmVfaW5mb3MuIEZvciBlYWNoIGVudHJ5LCBpdCBjcmVhdGVzIGEgUGFydGl0aW9u UHJ1bmVTdGF0ZQogICogYW5kIGFkZHMgaXQgdG8gZXNfcGFydF9wcnVuZV9zdGF0ZXMuICBFeGVj SW5pdFBhcnRpdGlvbkV4ZWNQcnVuaW5nKCkgYWNjZXNzZXMKICAqIHRoZXNlIHN0YXRlcyB0aHJv dWdoIHRoZWlyIGNvcnJlc3BvbmRpbmcgaW5kZXhlcyBpbiBlc19wYXJ0X3BydW5lX3N0YXRlcyBh bmQKLSAqIGFzc2lnbiBlYWNoIHN0YXRlIHRvIHRoZSBwYXJlbnQgbm9kZSdzIFBsYW5TdGF0ZSwg ZnJvbSB3aGVyZSBpdCB3aWxsIGJlIHVzZWQKKyAqIGFzc2lnbnMgZWFjaCBzdGF0ZSB0byB0aGUg cGFyZW50IG5vZGUncyBQbGFuU3RhdGUsIGZyb20gd2hlcmUgaXQgd2lsbCBiZSB1c2VkCiAgKiBm b3IgImV4ZWMiIHBydW5pbmcuCiAgKgogICogSWYgaW5pdGlhbCBwcnVuaW5nIHN0ZXBzIGV4aXN0 IGZvciBhIFBhcnRpdGlvblBydW5lSW5mbyBlbnRyeSwgdGhpcyBmdW5jdGlvbgpAQCAtMTk5Niwy OSArMTk5NSwzMSBAQCBFeGVjRG9Jbml0aWFsUHJ1bmluZyhFU3RhdGUgKmVzdGF0ZSkKIHsKIAlM aXN0Q2VsbCAgICpsYzsKIAorCUFzc2VydChlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfcmVzdWx0cyA9 PSBOVUxMKTsKIAlmb3JlYWNoKGxjLCBlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfaW5mb3MpCiAJewog CQlQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbyA9IGxmaXJzdF9ub2RlKFBhcnRpdGlvblBy dW5lSW5mbywgbGMpOwogCQlQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlOwogCQlCaXRt YXBzZXQgICp2YWxpZHN1YnBsYW5zID0gTlVMTDsKLQkJQml0bWFwc2V0ICAqYWxsX2xlYWZwYXJ0 X3J0aXMgPSBOVUxMOwogCQlCaXRtYXBzZXQgICp2YWxpZHN1YnBsYW5fcnRpcyA9IE5VTEw7CiAK IAkJLyogQ3JlYXRlIGFuZCBzYXZlIHRoZSBQYXJ0aXRpb25QcnVuZVN0YXRlLiAqLwotCQlwcnVu ZXN0YXRlID0gQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShlc3RhdGUsIHBydW5laW5mbywKLQkJ CQkJCQkJCQkJICAgJmFsbF9sZWFmcGFydF9ydGlzKTsKKwkJcHJ1bmVzdGF0ZSA9IENyZWF0ZVBh cnRpdGlvblBydW5lU3RhdGUoZXN0YXRlLCBwcnVuZWluZm8pOwogCQllc3RhdGUtPmVzX3BhcnRf cHJ1bmVfc3RhdGVzID0gbGFwcGVuZChlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfc3RhdGVzLAogCQkJ CQkJCQkJCQkgICBwcnVuZXN0YXRlKTsKIAogCQkvKgogCQkgKiBQZXJmb3JtIGluaXRpYWwgcHJ1 bmluZyBzdGVwcywgaWYgYW55LCBhbmQgc2F2ZSB0aGUgcmVzdWx0Ci0JCSAqIGJpdG1hcHNldCBv ciBOVUxMIGFzIGRlc2NyaWJlZCBpbiB0aGUgaGVhZGVyIGNvbW1lbnQuCisJCSAqIGJpdG1hcHNl dCBvciBOVUxMIGFzIGRlc2NyaWJlZCBpbiB0aGUgaGVhZGVyIGNvbW1lbnQuICBSVCBpbmRleGVz CisJCSAqIG9mIHN1cnZpdmluZyBwYXJ0aXRpb25zIHdvdWxkIGJlIGFkZGVkIHRvIHZhbGlkc3Vi cGxhbl9ydGlzLgorCQkgKgorCQkgKiBOb3RlIHRoYXQgd2hlbiBkb19pbml0aWFsX3BydW5lIGlz IGZhbHNlLAorCQkgKiBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKCkgd291bGQgaGF2ZSBhbHJl YWR5IGFkZGVkIHRoZSBSVCBpbmRleGVzCisJCSAqIG9mIGFsbCBsZWFmIHBhcnRpdGlvbnMgdG8g ZXNfdW5wcnVuZWRfcmVsaWRzIGRpcmVjdGx5LgogCQkgKi8KIAkJaWYgKHBydW5lc3RhdGUtPmRv X2luaXRpYWxfcHJ1bmUpCiAJCQl2YWxpZHN1YnBsYW5zID0gRXhlY0ZpbmRNYXRjaGluZ1N1YlBs YW5zKHBydW5lc3RhdGUsIHRydWUsCiAJCQkJCQkJCQkJCQkJICZ2YWxpZHN1YnBsYW5fcnRpcyk7 Ci0JCWVsc2UKLQkJCXZhbGlkc3VicGxhbl9ydGlzID0gYWxsX2xlYWZwYXJ0X3J0aXM7CiAKIAkJ ZXN0YXRlLT5lc191bnBydW5lZF9yZWxpZHMgPSBibXNfYWRkX21lbWJlcnMoZXN0YXRlLT5lc191 bnBydW5lZF9yZWxpZHMsCiAJCQkJCQkJCQkJCQkJIHZhbGlkc3VicGxhbl9ydGlzKTsKQEAgLTIx MzYsMTQgKzIxMzcsMTIgQEAgRXhlY0luaXRQYXJ0aXRpb25FeGVjUHJ1bmluZyhQbGFuU3RhdGUg KnBsYW5zdGF0ZSwKICAqIHBhcmVudCBwbGFuIG5vZGUncyBQbGFuU3RhdGUuCiAgKgogICogSWYg aW5pdGlhbCBwcnVuaW5nIHN0ZXBzIGFyZSB0byBiZSBza2lwcGVkIChlLmcuLCBkdXJpbmcgRVhQ TEFJTgotICogKEdFTkVSSUNfUExBTikpLCAqYWxsX2xlYWZwYXJ0X3J0aXMgd2lsbCBiZSBwb3B1 bGF0ZWQgd2l0aCB0aGUgUlQgaW5kZXhlcyBvZgotICogYWxsIGxlYWYgcGFydGl0aW9ucyB3aG9z ZSBzY2FubmluZyBzdWJub2RlIGlzIGluY2x1ZGVkIGluIHRoZSBwYXJlbnQgcGxhbgotICogbm9k ZSdzIGxpc3Qgb2YgY2hpbGQgcGxhbnMuIFRoZSBjYWxsZXIgbXVzdCBhZGQgdGhlc2UgUlQgaW5k ZXhlcyB0bwotICogZXN0YXRlLT5lc191bnBydW5lZF9yZWxpZHMuCisgKiAoR0VORVJJQ19QTEFO KSksIHRoZSBSVCBpbmRleGVzIG9mIGFsbCBsZWFmIHBhcnRpdGlvbnMgd2hvc2Ugc2Nhbm5pbmcK KyAqIHN1Ym5vZGUgaXMgaW5jbHVkZWQgaW4gdGhlIHBhcmVudCBwbGFuIG5vZGUncyBsaXN0IG9m IGNoaWxkIHBsYW5zIGFyZQorICogYWRkZWQgdG8gZXN0YXRlLT5lc191bnBydW5lZF9yZWxpZHMu CiAgKi8KIHN0YXRpYyBQYXJ0aXRpb25QcnVuZVN0YXRlICoKLUNyZWF0ZVBhcnRpdGlvblBydW5l U3RhdGUoRVN0YXRlICplc3RhdGUsIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvLAotCQkJ CQkJICBCaXRtYXBzZXQgKiphbGxfbGVhZnBhcnRfcnRpcykKK0NyZWF0ZVBhcnRpdGlvblBydW5l U3RhdGUoRVN0YXRlICplc3RhdGUsIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvKQogewog CVBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGU7CiAJaW50CQkJbl9wYXJ0X2hpZXJhcmNo aWVzOwpAQCAtMjM3Nyw4ICsyMzc2LDggQEAgQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShFU3Rh dGUgKmVzdGF0ZSwgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8sCiAJCQkJCQkJCQkJCQkJ ICAgcGluZm8tPmV4ZWNwYXJhbWlkcyk7CiAKIAkJCS8qCi0JCQkgKiBSZXR1cm4gYWxsIGxlYWYg cGFydGl0aW9uIGluZGV4ZXMgaWYgd2UncmUgc2tpcHBpbmcgcHJ1bmluZyBpbgotCQkJICogdGhl IEVYUExBSU4gKEdFTkVSSUNfUExBTikgY2FzZS4KKwkJCSAqIEFkZCBhbGwgbGVhZiBwYXJ0aXRp b24gaW5kZXhlcyB0byBlc191bnBydW5lZF9yZWxpZHMgaWYgd2UncmUKKwkJCSAqIHNraXBwaW5n IHBydW5pbmcgaW4gdGhlIEVYUExBSU4gKEdFTkVSSUNfUExBTikgY2FzZS4KIAkJCSAqLwogCQkJ aWYgKHBpbmZvLT5pbml0aWFsX3BydW5pbmdfc3RlcHMgJiYgIXBydW5lc3RhdGUtPmRvX2luaXRp YWxfcHJ1bmUpCiAJCQl7CkBAIC0yMzkwLDkgKzIzODksMjggQEAgQ3JlYXRlUGFydGl0aW9uUHJ1 bmVTdGF0ZShFU3RhdGUgKmVzdGF0ZSwgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8sCiAJ CQkJCUluZGV4CQlydGluZGV4ID0gcHBydW5lLT5sZWFmcGFydF9ydGlfbWFwW3BhcnRfaW5kZXhd OwogCiAJCQkJCWlmIChydGluZGV4KQotCQkJCQkJKmFsbF9sZWFmcGFydF9ydGlzID0gYm1zX2Fk ZF9tZW1iZXIoKmFsbF9sZWFmcGFydF9ydGlzLAotCQkJCQkJCQkJCQkJCQkJcnRpbmRleCk7CisJ CQkJCQllc3RhdGUtPmVzX3VucHJ1bmVkX3JlbGlkcyA9CisJCQkJCQkJYm1zX2FkZF9tZW1iZXIo ZXN0YXRlLT5lc191bnBydW5lZF9yZWxpZHMsIHJ0aW5kZXgpOworCQkJCX0KKwkJCX0KKwkJCWVs c2UgaWYgKHBpbmZvLT5pbml0aWFsX3BydW5pbmdfc3RlcHMgPT0gTklMKQorCQkJeworCQkJCS8q CisJCQkJICogQWxsIHBhcnRpdGlvbnMgYmV0dGVyIGJlIHByZXNlbnQgaW4gZXNfdW5wcnVuZWRf cmVsaWRzIHdoZW4KKwkJCQkgKiBub25lIGFyZSBpbml0aWFsbHkgcHJ1bmFibGUuCisJCQkJICov CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCQkJCWludAkJCXBhcnRfaW5kZXggPSAtMTsK KworCQkJCXdoaWxlICgocGFydF9pbmRleCA9IGJtc19uZXh0X21lbWJlcihwcHJ1bmUtPnByZXNl bnRfcGFydHMsCisJCQkJCQkJCQkJCQkJIHBhcnRfaW5kZXgpKSA+PSAwKQorCQkJCXsKKwkJCQkJ SW5kZXgJCXJ0aW5kZXggPSBwcHJ1bmUtPmxlYWZwYXJ0X3J0aV9tYXBbcGFydF9pbmRleF07CisK KwkJCQkJaWYgKHJ0aW5kZXgpCisJCQkJCQlBc3NlcnQoYm1zX2lzX21lbWJlcihydGluZGV4LCBl c3RhdGUtPmVzX3VucHJ1bmVkX3JlbGlkcykpOwogCQkJCX0KKyNlbmRpZgogCQkJfQogCiAJCQlq Kys7CkBAIC0yNDkwLDkgKzI1MDgsMTAgQEAgSW5pdFBhcnRpdGlvblBydW5lQ29udGV4dChQYXJ0 aXRpb25QcnVuZUNvbnRleHQgKmNvbnRleHQsCiAgKgkJSW5pdGlhbGl6ZSBleGVjIHBydW5pbmcg Y29udGV4dHMgZGVmZXJyZWQgYnkgQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZSgpCiAgKgogICog VGhpcyBmdW5jdGlvbiBmaW5hbGl6ZXMgZXhlYyBwcnVuaW5nIHNldHVwIGZvciBhIFBhcnRpdGlv blBydW5lU3RhdGUgYnkKLSAqIGluaXRpYWxpemluZyBjb250ZXh0cyBmb3IgcHJ1bmluZyBzdGVw cyB0aGF0IHJlcXVpcmUgdGhlIHBhcmVudCBwbGFuJ3MKLSAqIFBsYW5TdGF0ZS4gSXQgaXRlcmF0 ZXMgb3ZlciBQYXJ0aXRpb25QcnVuaW5nRGF0YSBlbnRyaWVzIGFuZCBzZXRzIHVwIHRoZQotICog bmVjZXNzYXJ5IGV4ZWN1dGlvbiBjb250ZXh0cyBmb3IgcHJ1bmluZyBkdXJpbmcgcXVlcnkgZXhl Y3V0aW9uLgorICogaW5pdGlhbGl6aW5nIGNvbnRleHRzIGZvciBwcnVuaW5nIHN0ZXBzIHRoYXQg cmVxdWlyZSBQQVJBTV9FWEVDIHBhcmFtZXRlcnMKKyAqIGFuZCB0aGUgcGFyZW50IHBsYW4ncyBQ bGFuU3RhdGUuIEl0IGl0ZXJhdGVzIG92ZXIgUGFydGl0aW9uUHJ1bmluZ0RhdGEKKyAqIGVudHJp ZXMgYW5kIHNldHMgdXAgdGhlIG5lY2Vzc2FyeSBleGVjdXRpb24gY29udGV4dHMgZm9yIHBydW5p bmcgZHVyaW5nCisgKiBxdWVyeSBleGVjdXRpb24uCiAgKgogICogQWxzbyBmaXggdGhlIG1hcHBp bmcgb2YgcGFydGl0aW9uIGluZGV4ZXMgdG8gc3VicGxhbiBpbmRleGVzIGNvbnRhaW5lZCBpbgog ICogcHJ1bmVzdGF0ZSBieSBjb25zaWRlcmluZyB0aGUgbmV3IGxpc3Qgb2Ygc3VicGxhbnMgdGhh dCBzdXJ2aXZlZCBpbml0aWFsCkBAIC0yNTIwLDkgKzI1MzksMTYgQEAgSW5pdEV4ZWNQYXJ0aXRp b25QcnVuZUNvbnRleHRzKFBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGUsCiAJYm9vbAkJ Zml4X3N1YnBsYW5fbWFwID0gZmFsc2U7CiAKIAlBc3NlcnQocHJ1bmVzdGF0ZS0+ZG9fZXhlY19w cnVuZSk7CisJQXNzZXJ0KHBydW5lc3RhdGUtPmVjb250ZXh0KTsKIAlBc3NlcnQocGFyZW50X3Bs YW4gIT0gTlVMTCk7CiAJZXN0YXRlID0gcGFyZW50X3BsYW4tPnN0YXRlOwogCisJLyoKKwkgKiBU aGVzZSBtaWdodCBub3QgYmUgYXZhaWxhYmxlIHdoZW4gRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5l U3RhdGUoKSBpcworCSAqIGNhbGxlZC4KKwkgKi8KKwlwcnVuZXN0YXRlLT5lY29udGV4dC0+ZWN4 dF9wYXJhbV9leGVjX3ZhbHMgPSBlc3RhdGUtPmVzX3BhcmFtX2V4ZWNfdmFsczsKKwogCS8qCiAJ ICogTm8gbmVlZCB0byBmaXggc3VicGxhbnMgbWFwcyBpZiBpbml0aWFsIHBydW5pbmcgZGlkbid0 IGVsaW1pbmF0ZSBhbnkKIAkgKiBzdWJwbGFucy4KLS0gCjIuNDcuMwoK --000000000000863682064de9f4e6 Content-Type: application/octet-stream; name="v10-0002-Introduce-ExecutorPrep-and-refactor-executor-sta.patch" Content-Disposition: attachment; filename="v10-0002-Introduce-ExecutorPrep-and-refactor-executor-sta.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn79k00p3 RnJvbSA0ZTg0OWNlMGFmMTI5NjNlZTIwNDBmMTg3ZjRjYjBiYWQxYzI4NTFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMjYgTWFyIDIwMjYgMTY6MDg6NDYgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx MCAyLzVdIEludHJvZHVjZSBFeGVjdXRvclByZXAgYW5kIHJlZmFjdG9yIGV4ZWN1dG9yIHN0YXJ0 dXAKCkZhY3RvciBwZXJtaXNzaW9uIGNoZWNrcywgcmFuZ2UgdGFibGUgaW5pdGlhbGl6YXRpb24s IGFuZCBpbml0aWFsCnBhcnRpdGlvbiBwcnVuaW5nIG91dCBvZiBJbml0UGxhbigpIGludG8gYSBu ZXcgRXhlY3V0b3JQcmVwKCkKaGVscGVyLiAgRXhlY3V0b3JTdGFydCgpIGNhbGxzIGl0IHRvIGJ1 aWxkIHRoZSBFU3RhdGUsIGtlZXBpbmcKYmVoYXZpb3IgdW5jaGFuZ2VkLgoKSWYgUXVlcnlEZXNj LT5lc3RhdGUgaXMgYWxyZWFkeSBzZXQgd2hlbiBFeGVjdXRvclN0YXJ0KCkgaXMgY2FsbGVkLAp0 aGUgZXhpc3RpbmcgRVN0YXRlIGlzIHJldXNlZCBhbmQgRXhlY3V0b3JQcmVwKCkgaXMgc2tpcHBl ZC4gIFRoaXMKYWxsb3dzIGEgbGF0ZXIgY29tbWl0IHRvIHN1cHBseSBhIHByZS1idWlsdCBFU3Rh dGUgZnJvbSBvdXRzaWRlCnRoZSBleGVjdXRvci4KCkFkZCBzY2FmZm9sZGluZyBmb3IgY2Fycnlp bmcgYW4gb3B0aW9uYWwgcHJlcCBFU3RhdGUgdGhyb3VnaApDcmVhdGVRdWVyeURlc2MsIFBvcnRh bERlZmluZVF1ZXJ5LCBhbmQgU1BJLiAgQWxsIGNhbGxlcnMgY3VycmVudGx5CnBhc3MgTlVMTDsg dGhlIG5leHQgY29tbWl0IHBvcHVsYXRlcyB0aGVzZSB0byBlbmFibGUgcHJ1bmluZy1hd2FyZQps b2NraW5nIGluIGNhY2hlZCBwbGFucy4KCkluIGFzc2VydCBidWlsZHMsIHZlcmlmeSB0aGF0IHRo ZSBleHBlY3RlZCByZWxhdGlvbiBsb2NrcyBhcmUgaGVsZAp3aGVuIGVudGVyaW5nIEV4ZWN1dG9y U3RhcnQoKS4KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYyAgICAgICB8ICAgMiAr LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyAgICAgfCAgIDIgKy0KIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgIHwgICA4ICstCiBzcmMvYmFja2VuZC9jb21tYW5k cy9leHRlbnNpb24uYyAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5j ICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3BvcnRhbGNtZHMuYyAgIHwgICAx ICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYyAgICAgIHwgICA0ICstCiBzcmMvYmFj a2VuZC9leGVjdXRvci9SRUFETUUgICAgICAgICB8ICAxMSArLQogc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY01haW4uYyAgICAgfCAxNTggKysrKysrKysrKysrKysrKysrKysrKystLS0tLQogc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL2Z1bmN0aW9ucy5jICAgIHwgICAzICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9zcGku YyAgICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jICAgICAgICAg fCAgIDIgKwogc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYyAgICAgICAgICAgfCAgMTkgKysrLQog c3JjL2JhY2tlbmQvdXRpbHMvbW1nci9wb3J0YWxtZW0uYyAgfCAgIDcgKysKIHNyYy9pbmNsdWRl L2NvbW1hbmRzL2V4cGxhaW4uaCAgICAgIHwgICAzICstCiBzcmMvaW5jbHVkZS9leGVjdXRvci9l eGVjZGVzYy5oICAgICB8ICAgNSArLQogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCAg ICAgfCAgIDcgKysKIHNyYy9pbmNsdWRlL3V0aWxzL3BvcnRhbC5oICAgICAgICAgIHwgICAyICsK IDE5IGZpbGVzIGNoYW5nZWQsIDE5NSBpbnNlcnRpb25zKCspLCA1MCBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2NvcHl0by5jCmluZGV4IGZhZjYyZDk1OWI0Li5iOWJkNWJhNzA3OCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvY29weXRvLmMKQEAgLTEwMTEsNyArMTAxMSw3IEBAIEJlZ2luQ29weVRvKFBhcnNlU3RhdGUg KnBzdGF0ZSwKIAkJY3N0YXRlLT5xdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgcHN0 YXRlLT5wX3NvdXJjZXRleHQsCiAJCQkJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCksCiAJCQkJ CQkJCQkJCUludmFsaWRTbmFwc2hvdCwKLQkJCQkJCQkJCQkJZGVzdCwgTlVMTCwgTlVMTCwgMCk7 CisJCQkJCQkJCQkJCWRlc3QsIE5VTEwsIE5VTEwsIDAsIE5VTEwpOwogCiAJCS8qCiAJCSAqIENh bGwgRXhlY3V0b3JTdGFydCB0byBwcmVwYXJlIHRoZSBwbGFuIGZvciBleGVjdXRpb24uCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvY3JlYXRlYXMuYwppbmRleCAyNzBlOWJmMzExMC4uYjRhOTgwODk1NWEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvY3JlYXRlYXMuYwpAQCAtMzM2LDcgKzMzNiw3IEBAIEV4ZWNDcmVhdGVUYWJsZUFzKFBh cnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlVGFibGVBc1N0bXQgKnN0bXQsCiAJCS8qIENyZWF0ZSBh IFF1ZXJ5RGVzYywgcmVkaXJlY3Rpbmcgb3V0cHV0IHRvIG91ciB0dXBsZSByZWNlaXZlciAqLwog CQlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgcHN0YXRlLT5wX3NvdXJjZXRleHQs CiAJCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hvdCgpLCBJbnZhbGlkU25hcHNob3QsCi0JCQkJCQkJ CQlkZXN0LCBwYXJhbXMsIHF1ZXJ5RW52LCAwKTsKKwkJCQkJCQkJCWRlc3QsIHBhcmFtcywgcXVl cnlFbnYsIDAsIE5VTEwpOwogCiAJCS8qIGNhbGwgRXhlY3V0b3JTdGFydCB0byBwcmVwYXJlIHRo ZSBwbGFuIGZvciBleGVjdXRpb24gKi8KIAkJRXhlY3V0b3JTdGFydChxdWVyeURlc2MsIEdldElu dG9SZWxFRmxhZ3MoaW50bykpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhw bGFpbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IGU0YjcwMTY2YjBl Li4yNGMwYzIzNWZkMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAtMzcyLDcgKzM3Miw3IEBA IHN0YW5kYXJkX0V4cGxhaW5PbmVRdWVyeShRdWVyeSAqcXVlcnksIGludCBjdXJzb3JPcHRpb25z LAogCX0KIAogCS8qIHJ1biBpdCAoaWYgbmVlZGVkKSBhbmQgcHJvZHVjZSBvdXRwdXQgKi8KLQlF eHBsYWluT25lUGxhbihwbGFuLCBpbnRvLCBlcywgcXVlcnlTdHJpbmcsIHBhcmFtcywgcXVlcnlF bnYsCisJRXhwbGFpbk9uZVBsYW4ocGxhbiwgTlVMTCwgaW50bywgZXMsIHF1ZXJ5U3RyaW5nLCBw YXJhbXMsIHF1ZXJ5RW52LAogCQkJCSAgICZwbGFuZHVyYXRpb24sIChlcy0+YnVmZmVycyA/ICZi dWZ1c2FnZSA6IE5VTEwpLAogCQkJCSAgIGVzLT5tZW1vcnkgPyAmbWVtX2NvdW50ZXJzIDogTlVM TCk7CiB9CkBAIC00OTQsNyArNDk0LDggQEAgRXhwbGFpbk9uZVV0aWxpdHkoTm9kZSAqdXRpbGl0 eVN0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAgKiB0byBjYWxsIGl0 LgogICovCiB2b2lkCi1FeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIElu dG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCitFeHBsYWluT25lUGxhbihQbGFubmVk U3RtdCAqcGxhbm5lZHN0bXQsIEVTdGF0ZSAqcHJlcF9lc3RhdGUsCisJCQkgICBJbnRvQ2xhdXNl ICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAogCQkJICAgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcs IFBhcmFtTGlzdEluZm8gcGFyYW1zLAogCQkJICAgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYs IGNvbnN0IGluc3RyX3RpbWUgKnBsYW5kdXJhdGlvbiwKIAkJCSAgIGNvbnN0IEJ1ZmZlclVzYWdl ICpidWZ1c2FnZSwKQEAgLTU1Miw3ICs1NTMsOCBAQCBFeHBsYWluT25lUGxhbihQbGFubmVkU3Rt dCAqcGxhbm5lZHN0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJLyog Q3JlYXRlIGEgUXVlcnlEZXNjIGZvciB0aGUgcXVlcnkgKi8KIAlxdWVyeURlc2MgPSBDcmVhdGVR dWVyeURlc2MocGxhbm5lZHN0bXQsIHF1ZXJ5U3RyaW5nLAogCQkJCQkJCQlHZXRBY3RpdmVTbmFw c2hvdCgpLCBJbnZhbGlkU25hcHNob3QsCi0JCQkJCQkJCWRlc3QsIHBhcmFtcywgcXVlcnlFbnYs IGluc3RydW1lbnRfb3B0aW9uKTsKKwkJCQkJCQkJZGVzdCwgcGFyYW1zLCBxdWVyeUVudiwgaW5z dHJ1bWVudF9vcHRpb24sCisJCQkJCQkJCXByZXBfZXN0YXRlKTsKIAogCS8qIFNlbGVjdCBleGVj dXRpb24gb3B0aW9ucyAqLwogCWlmIChlcy0+YW5hbHl6ZSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9u LmMKaW5kZXggYjk4ODAxZDA4ZjIuLjkzOWU3YTYzMmYwIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9leHRlbnNpb24uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNp b24uYwpAQCAtMTE3NCw3ICsxMTc0LDcgQEAgZXhlY3V0ZV9zcWxfc3RyaW5nKGNvbnN0IGNoYXIg KnNxbCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCiAJCQkJcWRlc2MgPSBDcmVhdGVRdWVyeURlc2Mo c3RtdCwKIAkJCQkJCQkJCQlzcWwsCiAJCQkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwgTlVM TCwKLQkJCQkJCQkJCQlkZXN0LCBOVUxMLCBOVUxMLCAwKTsKKwkJCQkJCQkJCQlkZXN0LCBOVUxM LCBOVUxMLCAwLCBOVUxMKTsKIAogCQkJCUV4ZWN1dG9yU3RhcnQocWRlc2MsIDApOwogCQkJCUV4 ZWN1dG9yUnVuKHFkZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgMCk7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2 aWV3LmMKaW5kZXggODFhNTVhMzNlZjIuLjJjZGZkY2Y5ODRiIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9tYXR2aWV3LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmll dy5jCkBAIC00MzksNyArNDM5LDcgQEAgcmVmcmVzaF9tYXR2aWV3X2RhdGFmaWxsKERlc3RSZWNl aXZlciAqZGVzdCwgUXVlcnkgKnF1ZXJ5LAogCS8qIENyZWF0ZSBhIFF1ZXJ5RGVzYywgcmVkaXJl Y3Rpbmcgb3V0cHV0IHRvIG91ciB0dXBsZSByZWNlaXZlciAqLwogCXF1ZXJ5RGVzYyA9IENyZWF0 ZVF1ZXJ5RGVzYyhwbGFuLCBxdWVyeVN0cmluZywKIAkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3Qo KSwgSW52YWxpZFNuYXBzaG90LAotCQkJCQkJCQlkZXN0LCBOVUxMLCBOVUxMLCAwKTsKKwkJCQkJ CQkJZGVzdCwgTlVMTCwgTlVMTCwgMCwgTlVMTCk7CiAKIAkvKiBjYWxsIEV4ZWN1dG9yU3RhcnQg dG8gcHJlcGFyZSB0aGUgcGxhbiBmb3IgZXhlY3V0aW9uICovCiAJRXhlY3V0b3JTdGFydChxdWVy eURlc2MsIDApOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcG9ydGFsY21kcy5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcG9ydGFsY21kcy5jCmluZGV4IDAxZWZhYzMzMTllLi5j ZjVkZWVjNDk0MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcG9ydGFsY21kcy5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3BvcnRhbGNtZHMuYwpAQCAtMTE4LDYgKzExOCw3 IEBAIFBlcmZvcm1DdXJzb3JPcGVuKFBhcnNlU3RhdGUgKnBzdGF0ZSwgRGVjbGFyZUN1cnNvclN0 bXQgKmNzdG10LCBQYXJhbUxpc3RJbmZvIHBhCiAJCQkJCSAgcXVlcnlTdHJpbmcsCiAJCQkJCSAg Q01EVEFHX1NFTEVDVCwJLyogY3Vyc29yJ3MgcXVlcnkgaXMgYWx3YXlzIGEgU0VMRUNUICovCiAJ CQkJCSAgbGlzdF9tYWtlMShwbGFuKSwKKwkJCQkJICBOVUxMLAogCQkJCQkgIE5VTEwpOwogCiAJ LyotLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wcmVwYXJlLmMg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9wcmVwYXJlLmMKaW5kZXggODc2YWFkMjEwMGEuLmMyNGQ5 N2Y3ZTVhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wcmVwYXJlLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jCkBAIC0yMDcsNiArMjA3LDcgQEAgRXhlY3V0 ZVF1ZXJ5KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJICBxdWVyeV9zdHJpbmcsCiAJCQkJCSAg ZW50cnktPnBsYW5zb3VyY2UtPmNvbW1hbmRUYWcsCiAJCQkJCSAgcGxhbl9saXN0LAorCQkJCQkg IE5VTEwsCiAJCQkJCSAgY3BsYW4pOwogCiAJLyoKQEAgLTY1OSw3ICs2NjAsOCBAQCBFeHBsYWlu RXhlY3V0ZVF1ZXJ5KEV4ZWN1dGVTdG10ICpleGVjc3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhw bGFpblN0YXRlICplcywKIAkJUGxhbm5lZFN0bXQgKnBzdG10ID0gbGZpcnN0X25vZGUoUGxhbm5l ZFN0bXQsIHApOwogCiAJCWlmIChwc3RtdC0+Y29tbWFuZFR5cGUgIT0gQ01EX1VUSUxJVFkpCi0J CQlFeHBsYWluT25lUGxhbihwc3RtdCwgaW50bywgZXMsIHF1ZXJ5X3N0cmluZywgcGFyYW1MSSwg cHN0YXRlLT5wX3F1ZXJ5RW52LAorCQkJRXhwbGFpbk9uZVBsYW4ocHN0bXQsIE5VTEwsCisJCQkJ CQkgICBpbnRvLCBlcywgcXVlcnlfc3RyaW5nLCBwYXJhbUxJLCBwc3RhdGUtPnBfcXVlcnlFbnYs CiAJCQkJCQkgICAmcGxhbmR1cmF0aW9uLCAoZXMtPmJ1ZmZlcnMgPyAmYnVmdXNhZ2UgOiBOVUxM KSwKIAkJCQkJCSAgIGVzLT5tZW1vcnkgPyAmbWVtX2NvdW50ZXJzIDogTlVMTCk7CiAJCWVsc2UK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL1JFQURNRSBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL1JFQURNRQppbmRleCA1NGY0NzgyZjMxYi4uZDc0OWNlYjY2ODcgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL1JFQURNRQorKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9S RUFETUUKQEAgLTI5MSwxMSArMjkxLDE4IEBAIFF1ZXJ5IFByb2Nlc3NpbmcgQ29udHJvbCBGbG93 CiAKIFRoaXMgaXMgYSBza2V0Y2ggb2YgY29udHJvbCBmbG93IGZvciBmdWxsIHF1ZXJ5IHByb2Nl c3Npbmc6CiAKKyAgICBFeGVjdXRvclByZXAKKwkJTWF5IGJlIHJ1biBiZWZvcmUgRXhlY3V0b3JT dGFydCAoZS5nLiwgZm9yIHBsYW4gdmFsaWRhdGlvbiksIG9yCisJCWltcGxpY2l0bHkgZnJvbSBF eGVjdXRvclN0YXJ0IGlmIG5vdCBkb25lIGVhcmxpZXIuICBDcmVhdGVzIEVTdGF0ZSwKKwkJcGVy Zm9ybXMgcmFuZ2UgdGFibGUgaW5pdGlhbGl6YXRpb24sIHBlcm1pc3Npb24gY2hlY2tzLCBhbmQg aW5pdGlhbAorCQlwYXJ0aXRpb24gcHJ1bmluZy4gIFJldHVybnMgdGhlIEVTdGF0ZSB0aGF0IEV4 ZWN1dG9yU3RhcnQoKSBzaG91bGQKKwkJcmV1c2UuCisKIAlDcmVhdGVRdWVyeURlc2MKIAogCUV4 ZWN1dG9yU3RhcnQKLQkJQ3JlYXRlRXhlY3V0b3JTdGF0ZQotCQkJY3JlYXRlcyBwZXItcXVlcnkg Y29udGV4dAorCQlFeGVjdXRvclByZXAgKGlmIG5vdCBhbHJlYWR5IGRvbmUsIGluZGljYXRlZCBi eSBOVUxMIFF1ZXJ5RGVzYy5lc3RhdGUpCisJCQljcmVhdGVzIEVTdGF0ZSBhbmQgcGVyLXF1ZXJ5 IGNvbnRleHQKIAkJc3dpdGNoIHRvIHBlci1xdWVyeSBjb250ZXh0IHRvIHJ1biBFeGVjSW5pdE5v ZGUKIAkJQWZ0ZXJUcmlnZ2VyQmVnaW5RdWVyeQogCQlFeGVjSW5pdE5vZGUgLS0tIHJlY3Vyc2l2 ZWx5IHNjYW5zIHBsYW4gdHJlZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y01haW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKaW5kZXggNThiODQ5NTVj MmIuLmNjNzc5NGY1OGRiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFp bi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKQEAgLTU3LDYgKzU3LDcg QEAKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIKICNpbmNsdWRlICJwZ3N0YXQu aCIKICNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmgiCisjaW5jbHVkZSAic3RvcmFn ZS9sbWdyLmgiCiAjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCiAjaW5jbHVkZSAidXRpbHMvYWNs LmgiCiAjaW5jbHVkZSAidXRpbHMvYmFja2VuZF9zdGF0dXMuaCIKQEAgLTE0Nyw3ICsxNDgsNiBA QCBzdGFuZGFyZF9FeGVjdXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdz KQogCiAJLyogc2FuaXR5IGNoZWNrczogcXVlcnlEZXNjIG11c3Qgbm90IGJlIHN0YXJ0ZWQgYWxy ZWFkeSAqLwogCUFzc2VydChxdWVyeURlc2MgIT0gTlVMTCk7Ci0JQXNzZXJ0KHF1ZXJ5RGVzYy0+ ZXN0YXRlID09IE5VTEwpOwogCiAJLyogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBxdWVyeSdzIHNu YXBzaG90IGlzIGFjdGl2ZSAqLwogCUFzc2VydChHZXRBY3RpdmVTbmFwc2hvdCgpID09IHF1ZXJ5 RGVzYy0+c25hcHNob3QpOwpAQCAtMTczLDkgKzE3Myw3MCBAQCBzdGFuZGFyZF9FeGVjdXRvclN0 YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogCiAJLyoKIAkgKiBCdWlsZCBF U3RhdGUsIHN3aXRjaCBpbnRvIHBlci1xdWVyeSBtZW1vcnkgY29udGV4dCBmb3Igc3RhcnR1cC4K LQkgKi8KLQllc3RhdGUgPSBDcmVhdGVFeGVjdXRvclN0YXRlKCk7Ci0JcXVlcnlEZXNjLT5lc3Rh dGUgPSBlc3RhdGU7CisJICoKKwkgKiBJZiBFeGVjdXRvclByZXAoKSByYW4gZWFybGllciAoZS5n LiwgdG8gZG8gaW5pdGlhbCBwcnVuaW5nIGR1cmluZyBwbGFuCisJICogdmFsaWRpdHkgY2hlY2tp bmcpLCByZXVzZSBpdHMgRVN0YXRlIHRvIGF2b2lkIHJlZG9pbmcgcmFuZ2UgdGFibGUgc2V0dXAK KwkgKiBhbmQgcHJ1bmluZy4gT3RoZXJ3aXNlLCBjcmVhdGUgYSBmcmVzaCBFU3RhdGUgYXMgdXN1 YWwuCisJICoKKwkgKiBJbiBhc3NlcnQgYnVpbGRzLCB2ZXJpZnkgdGhhdCB0aGUgZXhwZWN0ZWQg bG9ja3MgYXJlIGhlbGQuICBXaGVuCisJICogbm8gcHJlcCBFU3RhdGUgd2FzIHByb3ZpZGVkLCBB Y3F1aXJlRXhlY3V0b3JMb2NrcygpIHNob3VsZCBoYXZlCisJICogbG9ja2VkIGV2ZXJ5IHJlbGF0 aW9uIGluIHRoZSBwbGFuLiAgV2hlbiBvbmUgd2FzIHByb3ZpZGVkLAorCSAqIHBydW5pbmctYXdh cmUgbG9ja2luZyBzaG91bGQgaGF2ZSBsb2NrZWQgYXQgbGVhc3QgdGhlIHVucHJ1bmVkCisJICog cmVsYXRpb25zLiAgQm90aCBjaGVja3MgYXJlIHNraXBwZWQgaW4gcGFyYWxsZWwgd29ya2Vycywg d2hpY2gKKwkgKiBhY3F1aXJlIHJlbGF0aW9uIGxvY2tzIGxhemlseSBpbiBFeGVjR2V0UmFuZ2VU YWJsZVJlbGF0aW9uKCkuCisJICovCisJaWYgKHF1ZXJ5RGVzYy0+ZXN0YXRlID09IE5VTEwpCisJ eworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwkJaWYgKCFJc1BhcmFsbGVsV29ya2VyKCkp CisJCXsKKwkJCUxpc3RDZWxsICAgKmxjOworCisJCQlmb3JlYWNoKGxjLCBxdWVyeURlc2MtPnBs YW5uZWRzdG10LT5ydGFibGUpCisJCQl7CisJCQkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gbGZpcnN0 X25vZGUoUmFuZ2VUYmxFbnRyeSwgbGMpOworCisJCQkJaWYgKHJ0ZS0+cnRla2luZCA9PSBSVEVf UkVMQVRJT04gfHwKKwkJCQkJKHJ0ZS0+cnRla2luZCA9PSBSVEVfU1VCUVVFUlkgJiYgcnRlLT5y ZWxpZCAhPSBJbnZhbGlkT2lkKSkKKwkJCQkJQXNzZXJ0KENoZWNrUmVsYXRpb25PaWRMb2NrZWRC eU1lKHJ0ZS0+cmVsaWQsCisJCQkJCQkJCQkJCQkJICBydGUtPnJlbGxvY2ttb2RlLAorCQkJCQkJ CQkJCQkJCSAgdHJ1ZSkpOworCQkJfQorCQl9CisjZW5kaWYKKwkJcXVlcnlEZXNjLT5lc3RhdGUg PSBFeGVjdXRvclByZXAocXVlcnlEZXNjLT5wbGFubmVkc3RtdCwKKwkJCQkJCQkJCQkgcXVlcnlE ZXNjLT5wYXJhbXMsCisJCQkJCQkJCQkJIEN1cnJlbnRSZXNvdXJjZU93bmVyLAorCQkJCQkJCQkJ CSBlZmxhZ3MpOworCX0KKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJZWxzZQorCXsKKwkJ LyoKKwkJICogQSBwcmVwIEVTdGF0ZSB3YXMgcHJvdmlkZWQsIG1lYW5pbmcgcHJ1bmluZy1hd2Fy ZSBsb2NraW5nCisJCSAqIHNob3VsZCBoYXZlIGxvY2tlZCBhdCBsZWFzdCB0aGUgdW5wcnVuZWQg cmVsYXRpb25zLgorCQkgKi8KKwkJaWYgKCFJc1BhcmFsbGVsV29ya2VyKCkpCisJCXsKKwkJCWlu dAkJcnRpbmRleCA9IC0xOworCisJCQl3aGlsZSAoKHJ0aW5kZXggPSBibXNfbmV4dF9tZW1iZXIo cXVlcnlEZXNjLT5lc3RhdGUtPmVzX3VucHJ1bmVkX3JlbGlkcywKKwkJCQkJCQkJCQkJICBydGlu ZGV4KSkgPj0gMCkKKwkJCXsKKwkJCQlSYW5nZVRibEVudHJ5ICpydGUgPSBleGVjX3J0X2ZldGNo KHJ0aW5kZXgsIHF1ZXJ5RGVzYy0+ZXN0YXRlKTsKKworCQkJCUFzc2VydChydGUtPnJ0ZWtpbmQg PT0gUlRFX1JFTEFUSU9OIHx8CisJCQkJCSAgIChydGUtPnJ0ZWtpbmQgPT0gUlRFX1NVQlFVRVJZ ICYmCisJCQkJCQlydGUtPnJlbGlkICE9IEludmFsaWRPaWQpKTsKKwkJCQlBc3NlcnQoQ2hlY2tS ZWxhdGlvbk9pZExvY2tlZEJ5TWUocnRlLT5yZWxpZCwKKwkJCQkJCQkJCQkJCSAgcnRlLT5yZWxs b2NrbW9kZSwgdHJ1ZSkpOworCQkJfQorCQl9CisJfQorI2VuZGlmCisKKwllc3RhdGUgPSBxdWVy eURlc2MtPmVzdGF0ZTsKKwlBc3NlcnQoZXN0YXRlKTsKIAogCW9sZGNvbnRleHQgPSBNZW1vcnlD b250ZXh0U3dpdGNoVG8oZXN0YXRlLT5lc19xdWVyeV9jeHQpOwogCkBAIC0yNjUsNiArMzI2LDY4 IEBAIHN0YW5kYXJkX0V4ZWN1dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxh Z3MpCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwogfQogCisvKgorICogRXhl Y3V0b3JQcmVwOiBidWlsZCBpbml0aWFsIGV4ZWN1dG9yIHN0YXRlIGZvciBhIFBsYW5uZWRTdG10 LgorICoKKyAqIFBlcmZvcm1zIHJhbmdlIHRhYmxlIGluaXRpYWxpemF0aW9uLCBwZXJtaXNzaW9u IGNoZWNrcywgYW5kIGluaXRpYWwKKyAqIHBhcnRpdGlvbiBwcnVuaW5nIGlmIHBhcnRQcnVuZUlu Zm9zIGFyZSBwcmVzZW50LgorICoKKyAqIFJldHVybnMgYW4gRVN0YXRlIHRoYXQgdGhlIGNhbGxl ciBtdXN0IGVpdGhlciBwYXNzIHRvIEV4ZWN1dG9yU3RhcnQoKQorICogZm9yIHJldXNlIG9yIGZy ZWUgdmlhIEZyZWVFeGVjdXRvclN0YXRlKCkgaWYgZXhlY3V0aW9uIHdpbGwgbm90IHByb2NlZWQu CisgKi8KK0VTdGF0ZSAqCitFeGVjdXRvclByZXAoUGxhbm5lZFN0bXQgKnBzdG10LCBQYXJhbUxp c3RJbmZvIHBhcmFtcywgUmVzb3VyY2VPd25lciBvd25lciwKKwkJCSBpbnQgZWZsYWdzKQorewor CVJlc291cmNlT3duZXIgb2xkb3duZXI7CisJRVN0YXRlICplc3RhdGU7CisKKwlpZiAocHN0bXQt PmNvbW1hbmRUeXBlID09IENNRF9VVElMSVRZKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIENhbGxl ciBtdXN0IGhhdmUgZXN0YWJsaXNoZWQgYW4gYWN0aXZlIHNuYXBzaG90LiAqLworCUFzc2VydChB Y3RpdmVTbmFwc2hvdFNldCgpKTsKKworCWVzdGF0ZSA9IENyZWF0ZUV4ZWN1dG9yU3RhdGUoKTsK Kwllc3RhdGUtPmVzX3BsYW5uZWRzdG10ID0gcHN0bXQ7CisJZXN0YXRlLT5lc19wYXJ0X3BydW5l X2luZm9zID0gcHN0bXQtPnBhcnRQcnVuZUluZm9zOworCWVzdGF0ZS0+ZXNfcGFyYW1fbGlzdF9p bmZvID0gcGFyYW1zOworCWVzdGF0ZS0+ZXNfdG9wX2VmbGFncyA9IGVmbGFnczsKKworCS8qCisJ ICogRG8gcGVybWlzc2lvbnMgY2hlY2tzLgorCSAqLworCUV4ZWNDaGVja1Blcm1pc3Npb25zKHBz dG10LT5ydGFibGUsIHBzdG10LT5wZXJtSW5mb3MsIHRydWUpOworCisJLyoKKwkgKiBJbml0aWFs aXplIHJhbmdlIHRhYmxlLgorCSAqLworCUV4ZWNJbml0UmFuZ2VUYWJsZShlc3RhdGUsIHBzdG10 LT5ydGFibGUsIHBzdG10LT5wZXJtSW5mb3MsCisJCQkJCSAgIGJtc19jb3B5KHBzdG10LT51bnBy dW5hYmxlUmVsaWRzKSk7CisKKwkvKgorCSAqIFRyYWNrIHJlc291cmNlcyBhY3F1aXJlZCBkdXJp bmcgcHJ1bmluZyB1bmRlciB0aGUgZ2l2ZW4KKwkgKiBSZXNvdXJjZU93bmVyLCB3aGljaCBtYXkg ZGlmZmVyIGZyb20gQ3VycmVudFJlc291cmNlT3duZXIKKwkgKiB3aGVuIEV4ZWN1dG9yUHJlcCgp IGlzIGNhbGxlZCBvdXRzaWRlIEV4ZWN1dG9yU3RhcnQoKS4KKwkgKi8KKwlvbGRvd25lciA9IEN1 cnJlbnRSZXNvdXJjZU93bmVyOworCUN1cnJlbnRSZXNvdXJjZU93bmVyID0gb3duZXI7CisKKwkv KgorCSAqIFNldCB1cCBQYXJ0aXRpb25QcnVuZVN0YXRlIHN0cnVjdHVyZXMgYW5kIHBlcmZvcm0g aW5pdGlhbCBwYXJ0aXRpb24KKwkgKiBwcnVuaW5nIHRvIGNvbXB1dGUgdGhlIHN1YnNldCBvZiBj aGlsZCBzdWJwbGFucyB0aGF0IHdpbGwgYmUKKwkgKiBleGVjdXRlZC4gIFRoZSByZXN1bHRzLCB3 aGljaCBhcmUgYml0bWFwc2V0cyBvZiBzZWxlY3RlZCBjaGlsZAorCSAqIGluZGV4ZXMsIGFyZSBz YXZlZCBpbiBlc19wYXJ0X3BydW5lX3Jlc3VsdHMsIHBhcmFsbGVsIHRvCisJICogZXNfcGFydF9w cnVuZV9pbmZvcy4gIFJUIGluZGV4ZXMgb2Ygc3Vydml2aW5nIHBhcnRpdGlvbnMgYXJlCisJICog YWRkZWQgdG8gZXNfdW5wcnVuZWRfcmVsaWRzLgorCSAqLworCUV4ZWNEb0luaXRpYWxQcnVuaW5n KGVzdGF0ZSk7CisKKwlDdXJyZW50UmVzb3VyY2VPd25lciA9IG9sZG93bmVyOworCisJcmV0dXJu IGVzdGF0ZTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCUV4ZWN1dG9yUnVuCiAgKgpAQCAtODQwLDM3 ICs5NjMsMTQgQEAgSW5pdFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpCiAJ Q21kVHlwZQkJb3BlcmF0aW9uID0gcXVlcnlEZXNjLT5vcGVyYXRpb247CiAJUGxhbm5lZFN0bXQg KnBsYW5uZWRzdG10ID0gcXVlcnlEZXNjLT5wbGFubmVkc3RtdDsKIAlQbGFuCSAgICpwbGFuID0g cGxhbm5lZHN0bXQtPnBsYW5UcmVlOwotCUxpc3QJICAgKnJhbmdlVGFibGUgPSBwbGFubmVkc3Rt dC0+cnRhYmxlOwogCUVTdGF0ZQkgICAqZXN0YXRlID0gcXVlcnlEZXNjLT5lc3RhdGU7CiAJUGxh blN0YXRlICAqcGxhbnN0YXRlOwogCVR1cGxlRGVzYwl0dXBUeXBlOwogCUxpc3RDZWxsICAgKmw7 CiAJaW50CQkJaTsKIAotCS8qCi0JICogRG8gcGVybWlzc2lvbnMgY2hlY2tzCi0JICovCi0JRXhl Y0NoZWNrUGVybWlzc2lvbnMocmFuZ2VUYWJsZSwgcGxhbm5lZHN0bXQtPnBlcm1JbmZvcywgdHJ1 ZSk7Ci0KLQkvKgotCSAqIGluaXRpYWxpemUgdGhlIG5vZGUncyBleGVjdXRpb24gc3RhdGUKLQkg Ki8KLQlFeGVjSW5pdFJhbmdlVGFibGUoZXN0YXRlLCByYW5nZVRhYmxlLCBwbGFubmVkc3RtdC0+ cGVybUluZm9zLAotCQkJCQkgICBibXNfY29weShwbGFubmVkc3RtdC0+dW5wcnVuYWJsZVJlbGlk cykpOwotCi0JZXN0YXRlLT5lc19wbGFubmVkc3RtdCA9IHBsYW5uZWRzdG10OwotCWVzdGF0ZS0+ ZXNfcGFydF9wcnVuZV9pbmZvcyA9IHBsYW5uZWRzdG10LT5wYXJ0UHJ1bmVJbmZvczsKLQotCS8q Ci0JICogUGVyZm9ybSBydW50aW1lICJpbml0aWFsIiBwcnVuaW5nIHRvIGlkZW50aWZ5IHdoaWNo IGNoaWxkIHN1YnBsYW5zLAotCSAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNoaWxkcmVuIG9mIHBs YW4gbm9kZXMgdGhhdCBjb250YWluCi0JICogUGFydGl0aW9uUHJ1bmVJbmZvIHN1Y2ggYXMgQXBw ZW5kLCB3aWxsIG5vdCBiZSBleGVjdXRlZC4gVGhlIHJlc3VsdHMsCi0JICogd2hpY2ggYXJlIGJp dG1hcHNldHMgb2YgaW5kZXhlcyBvZiB0aGUgY2hpbGQgc3VicGxhbnMgdGhhdCB3aWxsIGJlCi0J ICogZXhlY3V0ZWQsIGFyZSBzYXZlZCBpbiBlc19wYXJ0X3BydW5lX3Jlc3VsdHMuICBUaGVzZSBy ZXN1bHRzIGNvcnJlc3BvbmQKLQkgKiB0byBlYWNoIFBhcnRpdGlvblBydW5lSW5mbyBlbnRyeSwg YW5kIHRoZSBlc19wYXJ0X3BydW5lX3Jlc3VsdHMgbGlzdCBpcwotCSAqIHBhcmFsbGVsIHRvIGVz X3BhcnRfcHJ1bmVfaW5mb3MuCi0JICovCi0JRXhlY0RvSW5pdGlhbFBydW5pbmcoZXN0YXRlKTsK KwkvKiBFeGVjdXRvclByZXAoKSBtdXN0IGhhdmUgYmVlbiBkb25lLiAqLworCUFzc2VydChxdWVy eURlc2MtPmVzdGF0ZSk7CiAKIAkvKgogCSAqIE5leHQsIGJ1aWxkIHRoZSBFeGVjUm93TWFyayBh cnJheSBmcm9tIHRoZSBQbGFuUm93TWFyayhzKSwgaWYgYW55LgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj UGFyYWxsZWwuYwppbmRleCBhYzg0YWYyOTRjOS4uMDI0NzgwZDM1MTYgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNQYXJhbGxlbC5jCkBAIC0xMzAwLDcgKzEzMDAsOCBAQCBFeGVjUGFyYWxsZWxHZXRR dWVyeURlc2Moc2htX3RvYyAqdG9jLCBEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyLAogCXJldHVybiBD cmVhdGVRdWVyeURlc2MocHN0bXQsCiAJCQkJCQkgICBxdWVyeVN0cmluZywKIAkJCQkJCSAgIEdl dEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRTbmFwc2hvdCwKLQkJCQkJCSAgIHJlY2VpdmVyLCBw YXJhbUxJLCBOVUxMLCBpbnN0cnVtZW50X29wdGlvbnMpOworCQkJCQkJICAgcmVjZWl2ZXIsIHBh cmFtTEksIE5VTEwsIGluc3RydW1lbnRfb3B0aW9ucywKKwkJCQkJCSAgIE5VTEwpOwogfQogCiAv KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9mdW5jdGlvbnMuYwppbmRleCA4ODEwOTM0ODgxNy4uOTUyYTc4NGM5MjQg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCisrKyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCkBAIC0xMzY5LDcgKzEzNjksOCBAQCBwb3N0cXVl bF9zdGFydChleGVjdXRpb25fc3RhdGUgKmVzLCBTUUxGdW5jdGlvbkNhY2hlUHRyIGZjYWNoZSkK IAkJCQkJCQkgZGVzdCwKIAkJCQkJCQkgZmNhY2hlLT5wYXJhbUxJLAogCQkJCQkJCSBlcy0+cWQg PyBlcy0+cWQtPnF1ZXJ5RW52IDogTlVMTCwKLQkJCQkJCQkgMCk7CisJCQkJCQkJIDAsCisJCQkJ CQkJIE5VTEwpOwogCiAJLyogVXRpbGl0eSBjb21tYW5kcyBkb24ndCBuZWVkIEV4ZWN1dG9yLiAq LwogCWlmIChlcy0+cWQtPm9wZXJhdGlvbiAhPSBDTURfVVRJTElUWSkKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivc3BpLmMKaW5k ZXggNTJmM2IxMTMwMWMuLjMyYzlkOTg3YzU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVj dXRvci9zcGkuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9zcGkuYwpAQCAtMTY4Niw2ICsx Njg2LDcgQEAgU1BJX2N1cnNvcl9vcGVuX2ludGVybmFsKGNvbnN0IGNoYXIgKm5hbWUsIFNQSVBs YW5QdHIgcGxhbiwKIAkJCQkJICBxdWVyeV9zdHJpbmcsCiAJCQkJCSAgcGxhbnNvdXJjZS0+Y29t bWFuZFRhZywKIAkJCQkJICBzdG10X2xpc3QsCisJCQkJCSAgTlVMTCwKIAkJCQkJICBjcGxhbik7 CiAKIAkvKgpAQCAtMjY5NSw3ICsyNjk2LDggQEAgX1NQSV9leGVjdXRlX3BsYW4oU1BJUGxhblB0 ciBwbGFuLCBjb25zdCBTUElFeGVjdXRlT3B0aW9ucyAqb3B0aW9ucywKIAkJCQkJCQkJCQlkZXN0 LAogCQkJCQkJCQkJCW9wdGlvbnMtPnBhcmFtcywKIAkJCQkJCQkJCQlfU1BJX2N1cnJlbnQtPnF1 ZXJ5RW52LAotCQkJCQkJCQkJCTApOworCQkJCQkJCQkJCTAsCisJCQkJCQkJCQkJTlVMTCk7CiAJ CQkJcmVzID0gX1NQSV9wcXVlcnkocWRlc2MsIGZpcmVfdHJpZ2dlcnMsCiAJCQkJCQkJCSAgY2Fu U2V0VGFnID8gb3B0aW9ucy0+dGNvdW50IDogMCk7CiAJCQkJRnJlZVF1ZXJ5RGVzYyhxZGVzYyk7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90 Y29wL3Bvc3RncmVzLmMKaW5kZXggYjM1NjMxMTMyMTkuLmNjZGI2YzAxMDcxIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0 Z3Jlcy5jCkBAIC0xMjMxLDYgKzEyMzEsNyBAQCBleGVjX3NpbXBsZV9xdWVyeShjb25zdCBjaGFy ICpxdWVyeV9zdHJpbmcpCiAJCQkJCQkgIHF1ZXJ5X3N0cmluZywKIAkJCQkJCSAgY29tbWFuZFRh ZywKIAkJCQkJCSAgcGxhbnRyZWVfbGlzdCwKKwkJCQkJCSAgTlVMTCwKIAkJCQkJCSAgTlVMTCk7 CiAKIAkJLyoKQEAgLTIwMzAsNiArMjAzMSw3IEBAIGV4ZWNfYmluZF9tZXNzYWdlKFN0cmluZ0lu Zm8gaW5wdXRfbWVzc2FnZSkKIAkJCQkJICBxdWVyeV9zdHJpbmcsCiAJCQkJCSAgcHNyYy0+Y29t bWFuZFRhZywKIAkJCQkJICBjcGxhbi0+c3RtdF9saXN0LAorCQkJCQkgIE5VTEwsCiAJCQkJCSAg Y3BsYW4pOwogCiAJLyogUG9ydGFsIGlzIGRlZmluZWQsIHNldCB0aGUgcGxhbiBJRCBiYXNlZCBv biBpdHMgY29udGVudHMuICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3BxdWVyeS5j IGIvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYwppbmRleCBkOGZjNzVkMGJiOS4uNDJlZjNlODJm ODIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMKKysrIGIvc3JjL2JhY2tl bmQvdGNvcC9wcXVlcnkuYwpAQCAtMzcsNiArMzcsNyBAQCBQb3J0YWwJCUFjdGl2ZVBvcnRhbCA9 IE5VTEw7CiAKIAogc3RhdGljIHZvaWQgUHJvY2Vzc1F1ZXJ5KFBsYW5uZWRTdG10ICpwbGFuLAor CQkJCQkJIEVTdGF0ZSAqcHJlcF9lc3RhdGUsCiAJCQkJCQkgY29uc3QgY2hhciAqc291cmNlVGV4 dCwKIAkJCQkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJCQkJCSBRdWVyeUVudmlyb25tZW50 ICpxdWVyeUVudiwKQEAgLTcyLDcgKzczLDggQEAgQ3JlYXRlUXVlcnlEZXNjKFBsYW5uZWRTdG10 ICpwbGFubmVkc3RtdCwKIAkJCQlEZXN0UmVjZWl2ZXIgKmRlc3QsCiAJCQkJUGFyYW1MaXN0SW5m byBwYXJhbXMsCiAJCQkJUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsCi0JCQkJaW50IGluc3Ry dW1lbnRfb3B0aW9ucykKKwkJCQlpbnQgaW5zdHJ1bWVudF9vcHRpb25zLAorCQkJCUVTdGF0ZSAq cHJlcF9lc3RhdGUpCiB7CiAJUXVlcnlEZXNjICAqcWQgPSBwYWxsb2Nfb2JqZWN0KFF1ZXJ5RGVz Yyk7CiAKQEAgLTkzLDYgKzk1LDkgQEAgQ3JlYXRlUXVlcnlEZXNjKFBsYW5uZWRTdG10ICpwbGFu bmVkc3RtdCwKIAlxZC0+cGxhbnN0YXRlID0gTlVMTDsKIAlxZC0+dG90YWx0aW1lID0gTlVMTDsK IAorCS8qIFVzZSB0aGUgRVN0YXRlIGNyZWF0ZWQgYnkgRXhlY3V0b3JQcmVwKCkgaWYgYWxyZWFk eSBkb25lLiAqLworCXFkLT5lc3RhdGUgPSBwcmVwX2VzdGF0ZTsKKwogCS8qIG5vdCB5ZXQgZXhl Y3V0ZWQgKi8KIAlxZC0+YWxyZWFkeV9leGVjdXRlZCA9IGZhbHNlOwogCkBAIC0xMjMsNiArMTI4 LDcgQEAgRnJlZVF1ZXJ5RGVzYyhRdWVyeURlc2MgKnFkZXNjKQogICoJCVBPUlRBTF9PTkVfUkVU VVJOSU5HLCBvciBQT1JUQUxfT05FX01PRF9XSVRIIHBvcnRhbAogICoKICAqCXBsYW46IHRoZSBw bGFuIHRyZWUgZm9yIHRoZSBxdWVyeQorICoJcHJlcF9lc3RhdGU6IEVTdGF0ZSBjcmVhdGVkIGlu IEV4ZWN1dG9yUHJlcCgpIGZvciB0aGUgcXVlcnksIGlmIGFueQogICoJc291cmNlVGV4dDogdGhl IHNvdXJjZSB0ZXh0IG9mIHRoZSBxdWVyeQogICoJcGFyYW1zOiBhbnkgcGFyYW1ldGVycyBuZWVk ZWQKICAqCWRlc3Q6IHdoZXJlIHRvIHNlbmQgcmVzdWx0cwpAQCAtMTM1LDYgKzE0MSw3IEBAIEZy ZWVRdWVyeURlc2MoUXVlcnlEZXNjICpxZGVzYykKICAqLwogc3RhdGljIHZvaWQKIFByb2Nlc3NR dWVyeShQbGFubmVkU3RtdCAqcGxhbiwKKwkJCSBFU3RhdGUgKnByZXBfZXN0YXRlLAogCQkJIGNv bnN0IGNoYXIgKnNvdXJjZVRleHQsCiAJCQkgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCiAJCQkgUXVl cnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsCkBAIC0xNDgsNyArMTU1LDggQEAgUHJvY2Vzc1F1ZXJ5 KFBsYW5uZWRTdG10ICpwbGFuLAogCSAqLwogCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhw bGFuLCBzb3VyY2VUZXh0LAogCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hvdCgpLCBJbnZhbGlkU25h cHNob3QsCi0JCQkJCQkJCWRlc3QsIHBhcmFtcywgcXVlcnlFbnYsIDApOworCQkJCQkJCQlkZXN0 LCBwYXJhbXMsIHF1ZXJ5RW52LCAwLAorCQkJCQkJCQlwcmVwX2VzdGF0ZSk7CiAKIAkvKgogCSAq IENhbGwgRXhlY3V0b3JTdGFydCB0byBwcmVwYXJlIHRoZSBwbGFuIGZvciBleGVjdXRpb24KQEAg LTQ5NSw3ICs1MDMsOCBAQCBQb3J0YWxTdGFydChQb3J0YWwgcG9ydGFsLCBQYXJhbUxpc3RJbmZv IHBhcmFtcywKIAkJCQkJCQkJCQkJTm9uZV9SZWNlaXZlciwKIAkJCQkJCQkJCQkJcGFyYW1zLAog CQkJCQkJCQkJCQlwb3J0YWwtPnF1ZXJ5RW52LAotCQkJCQkJCQkJCQkwKTsKKwkJCQkJCQkJCQkJ MCwKKwkJCQkJCQkJCQkJcG9ydGFsLT5wcmVwX2VzdGF0ZSk7CiAKIAkJCQkvKgogCQkJCSAqIElm IGl0J3MgYSBzY3JvbGxhYmxlIGN1cnNvciwgZXhlY3V0b3IgbmVlZHMgdG8gc3VwcG9ydApAQCAt MTI2NSw3ICsxMjc0LDcgQEAgUG9ydGFsUnVuTXVsdGkoUG9ydGFsIHBvcnRhbCwKIAkJCWlmIChw c3RtdC0+Y2FuU2V0VGFnKQogCQkJewogCQkJCS8qIHN0YXRlbWVudCBjYW4gc2V0IHRhZyBzdHJp bmcgKi8KLQkJCQlQcm9jZXNzUXVlcnkocHN0bXQsCisJCQkJUHJvY2Vzc1F1ZXJ5KHBzdG10LCBw b3J0YWwtPnByZXBfZXN0YXRlLAogCQkJCQkJCSBwb3J0YWwtPnNvdXJjZVRleHQsCiAJCQkJCQkJ IHBvcnRhbC0+cG9ydGFsUGFyYW1zLAogCQkJCQkJCSBwb3J0YWwtPnF1ZXJ5RW52LApAQCAtMTI3 NCw3ICsxMjgzLDcgQEAgUG9ydGFsUnVuTXVsdGkoUG9ydGFsIHBvcnRhbCwKIAkJCWVsc2UKIAkJ CXsKIAkJCQkvKiBzdG10IGFkZGVkIGJ5IHJld3JpdGUgY2Fubm90IHNldCB0YWcgKi8KLQkJCQlQ cm9jZXNzUXVlcnkocHN0bXQsCisJCQkJUHJvY2Vzc1F1ZXJ5KHBzdG10LCBwb3J0YWwtPnByZXBf ZXN0YXRlLAogCQkJCQkJCSBwb3J0YWwtPnNvdXJjZVRleHQsCiAJCQkJCQkJIHBvcnRhbC0+cG9y dGFsUGFyYW1zLAogCQkJCQkJCSBwb3J0YWwtPnF1ZXJ5RW52LApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvbW1nci9wb3J0YWxtZW0uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvcG9y dGFsbWVtLmMKaW5kZXggNDkzZjliMGVlMTkuLjBlY2RhNzYzZDIxIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9tbWdyL3BvcnRhbG1lbS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21t Z3IvcG9ydGFsbWVtLmMKQEAgLTI3Miw2ICsyNzIsMTEgQEAgQ3JlYXRlTmV3UG9ydGFsKHZvaWQp CiAgKiB0aGUgcGFzc2VkIHBsYW4gdHJlZXMgaGF2ZSBhZGVxdWF0ZSBsaWZldGltZS4gIFR5cGlj YWxseSB0aGlzIGlzIGRvbmUgYnkKICAqIGNvcHlpbmcgdGhlbSBpbnRvIHRoZSBwb3J0YWwncyBj b250ZXh0LgogICoKKyAqIElmIHByZXBfZXN0YXRlIGlzIG5vdCBOVUxMLCBpdCBpcyBhbiBFU3Rh dGUgY3JlYXRlZCBieSBFeGVjdXRvclByZXAoKQorICogZHVyaW5nIEdldENhY2hlZFBsYW4oKS4g IEl0IHdpbGwgYmUgcGFzc2VkIHRvIEV4ZWN1dG9yU3RhcnQoKSB0byBhdm9pZAorICogcmVkb2lu ZyByYW5nZSB0YWJsZSBzZXR1cCBhbmQgcHJ1bmluZy4gIFRoZSBwb3J0YWwgdGFrZXMgb3duZXJz aGlwOworICogdGhlIEVTdGF0ZSBtdXN0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgaW4gdGhlIHBvcnRh bCdzIG1lbW9yeSBjb250ZXh0LgorICoKICAqIFRoZSBjYWxsZXIgaXMgYWxzbyByZXNwb25zaWJs ZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgcGFzc2VkIHByZXBTdG10TmFtZQogICogKGlmIG5vdCBO VUxMKSBhbmQgc291cmNlVGV4dCBoYXZlIGFkZXF1YXRlIGxpZmV0aW1lLgogICoKQEAgLTI4Niw2 ICsyOTEsNyBAQCBQb3J0YWxEZWZpbmVRdWVyeShQb3J0YWwgcG9ydGFsLAogCQkJCSAgY29uc3Qg Y2hhciAqc291cmNlVGV4dCwKIAkJCQkgIENvbW1hbmRUYWcgY29tbWFuZFRhZywKIAkJCQkgIExp c3QgKnN0bXRzLAorCQkJCSAgRVN0YXRlICpwcmVwX2VzdGF0ZSwKIAkJCQkgIENhY2hlZFBsYW4g KmNwbGFuKQogewogCUFzc2VydChQb3J0YWxJc1ZhbGlkKHBvcnRhbCkpOwpAQCAtMjk5LDYgKzMw NSw3IEBAIFBvcnRhbERlZmluZVF1ZXJ5KFBvcnRhbCBwb3J0YWwsCiAJcG9ydGFsLT5jb21tYW5k VGFnID0gY29tbWFuZFRhZzsKIAlTZXRRdWVyeUNvbXBsZXRpb24oJnBvcnRhbC0+cWMsIGNvbW1h bmRUYWcsIDApOwogCXBvcnRhbC0+c3RtdHMgPSBzdG10czsKKwlwb3J0YWwtPnByZXBfZXN0YXRl ID0gcHJlcF9lc3RhdGU7CiAJcG9ydGFsLT5jcGxhbiA9IGNwbGFuOwogCXBvcnRhbC0+c3RhdHVz ID0gUE9SVEFMX0RFRklORUQ7CiB9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9l eHBsYWluLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKaW5kZXggNDcyZTE0MWJi YTMuLjcxZWJlMzhiYzg2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWlu LmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oCkBAIC02NCw3ICs2NCw4IEBA IGV4dGVybiB2b2lkIEV4cGxhaW5PbmVVdGlsaXR5KE5vZGUgKnV0aWxpdHlTdG10LCBJbnRvQ2xh dXNlICppbnRvLAogCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcywgUGFyc2VTdGF0ZSAqcHN0YXRl LAogCQkJCQkJCSAgUGFyYW1MaXN0SW5mbyBwYXJhbXMpOwogCi1leHRlcm4gdm9pZCBFeHBsYWlu T25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEludG9DbGF1c2UgKmludG8sCitleHRl cm4gdm9pZCBFeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEVTdGF0ZSAq cHJlcF9lc3RhdGUsCisJCQkJCQkgICBJbnRvQ2xhdXNlICppbnRvLAogCQkJCQkJICAgRXhwbGFp blN0YXRlICplcywgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsCiAJCQkJCQkgICBQYXJhbUxpc3RJ bmZvIHBhcmFtcywgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsCiAJCQkJCQkgICBjb25zdCBp bnN0cl90aW1lICpwbGFuZHVyYXRpb24sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRv ci9leGVjZGVzYy5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaAppbmRleCBkM2E1 NzI0Mjg0NC4uM2EyMTY5Yzk2MTMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4 ZWNkZXNjLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaApAQCAtNDMsNyAr NDMsNyBAQCB0eXBlZGVmIHN0cnVjdCBRdWVyeURlc2MKIAlRdWVyeUVudmlyb25tZW50ICpxdWVy eUVudjsgLyogcXVlcnkgZW52aXJvbm1lbnQgcGFzc2VkIGluICovCiAJaW50CQkJaW5zdHJ1bWVu dF9vcHRpb25zOyAvKiBPUiBvZiBJbnN0cnVtZW50T3B0aW9uIGZsYWdzICovCiAKLQkvKiBUaGVz ZSBmaWVsZHMgYXJlIHNldCBieSBFeGVjdXRvclN0YXJ0ICovCisJLyogVGhlc2UgZmllbGRzIGFy ZSBzZXQgYnkgRXhlY3V0b3JTdGFydCBvciBFeGVjdXRvclByZXAgKi8KIAlUdXBsZURlc2MJdHVw RGVzYzsJCS8qIGRlc2NyaXB0b3IgZm9yIHJlc3VsdCB0dXBsZXMgKi8KIAlFU3RhdGUJICAgKmVz dGF0ZTsJCQkvKiBleGVjdXRvcidzIHF1ZXJ5LXdpZGUgc3RhdGUgKi8KIAlQbGFuU3RhdGUgICpw bGFuc3RhdGU7CQkvKiB0cmVlIG9mIHBlci1wbGFuLW5vZGUgc3RhdGUgKi8KQEAgLTYzLDcgKzYz LDggQEAgZXh0ZXJuIFF1ZXJ5RGVzYyAqQ3JlYXRlUXVlcnlEZXNjKFBsYW5uZWRTdG10ICpwbGFu bmVkc3RtdCwKIAkJCQkJCQkJICBEZXN0UmVjZWl2ZXIgKmRlc3QsCiAJCQkJCQkJCSAgUGFyYW1M aXN0SW5mbyBwYXJhbXMsCiAJCQkJCQkJCSAgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsCi0J CQkJCQkJCSAgaW50IGluc3RydW1lbnRfb3B0aW9ucyk7CisJCQkJCQkJCSAgaW50IGluc3RydW1l bnRfb3B0aW9ucywKKwkJCQkJCQkJICBFU3RhdGUgKnByZXBfZXN0YXRlKTsKIAogZXh0ZXJuIHZv aWQgRnJlZVF1ZXJ5RGVzYyhRdWVyeURlc2MgKnFkZXNjKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9y LmgKaW5kZXggMDdmNGIxZjc0OTAuLmZhYzViZWYxMzg0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9leGVjdXRvci9leGVjdXRvci5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9y LmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJub2Rlcy9sb2Nrb3B0aW9ucy5oIgogI2lu Y2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgor I2luY2x1ZGUgInV0aWxzL3Jlc293bmVyLmgiCiAKIAogLyoKQEAgLTIzNSw2ICsyMzYsMTIgQEAg RXhlY0dldEp1bmtBdHRyaWJ1dGUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIEF0dHJOdW1iZXIgYXR0 bm8sIGJvb2wgKmlzTnVsbCkKICAqLwogZXh0ZXJuIHZvaWQgRXhlY3V0b3JTdGFydChRdWVyeURl c2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncyk7CiBleHRlcm4gdm9pZCBzdGFuZGFyZF9FeGVjdXRv clN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKTsKKworZXh0ZXJuIEVTdGF0 ZSAqRXhlY3V0b3JQcmVwKFBsYW5uZWRTdG10ICpwc3RtdCwKKwkJCQkJCQlQYXJhbUxpc3RJbmZv IHBhcmFtcywKKwkJCQkJCQlSZXNvdXJjZU93bmVyIG93bmVyLAorCQkJCQkJCWludCBlZmxhZ3Mp OworCiBleHRlcm4gdm9pZCBFeGVjdXRvclJ1bihRdWVyeURlc2MgKnF1ZXJ5RGVzYywKIAkJCQkJ CVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLCB1aW50NjQgY291bnQpOwogZXh0ZXJuIHZvaWQgc3Rh bmRhcmRfRXhlY3V0b3JSdW4oUXVlcnlEZXNjICpxdWVyeURlc2MsCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS91dGlscy9wb3J0YWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3BvcnRhbC5oCmluZGV4 IGE3YmVkYjEyYzE4Li5hNTllOTZmYTExZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMv cG9ydGFsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcG9ydGFsLmgKQEAgLTEzNyw2ICsxMzcs NyBAQCB0eXBlZGVmIHN0cnVjdCBQb3J0YWxEYXRhCiAJQ29tbWFuZFRhZwljb21tYW5kVGFnOwkJ LyogY29tbWFuZCB0YWcgZm9yIG9yaWdpbmFsIHF1ZXJ5ICovCiAJUXVlcnlDb21wbGV0aW9uIHFj OwkJCS8qIGNvbW1hbmQgY29tcGxldGlvbiBkYXRhIGZvciBleGVjdXRlZCBxdWVyeSAqLwogCUxp c3QJICAgKnN0bXRzOwkJCS8qIGxpc3Qgb2YgUGxhbm5lZFN0bXRzICovCisJRVN0YXRlCSAgICpw cmVwX2VzdGF0ZTsJLyogRVN0YXRlIGZyb20gRXhlY3V0b3JQcmVwKCkgaWYgYW55ICovCiAJQ2Fj aGVkUGxhbiAqY3BsYW47CQkJLyogQ2FjaGVkUGxhbiwgaWYgc3RtdHMgYXJlIGZyb20gb25lICov CiAKIAlQYXJhbUxpc3RJbmZvIHBvcnRhbFBhcmFtczsgLyogcGFyYW1zIHRvIHBhc3MgdG8gcXVl cnkgKi8KQEAgLTI0MCw2ICsyNDEsNyBAQCBleHRlcm4gdm9pZCBQb3J0YWxEZWZpbmVRdWVyeShQ b3J0YWwgcG9ydGFsLAogCQkJCQkJCSAgY29uc3QgY2hhciAqc291cmNlVGV4dCwKIAkJCQkJCQkg IENvbW1hbmRUYWcgY29tbWFuZFRhZywKIAkJCQkJCQkgIExpc3QgKnN0bXRzLAorCQkJCQkJCSAg RVN0YXRlICpwcmVwX2VzdGF0ZSwKIAkJCQkJCQkgIENhY2hlZFBsYW4gKmNwbGFuKTsKIGV4dGVy biBQbGFubmVkU3RtdCAqUG9ydGFsR2V0UHJpbWFyeVN0bXQoUG9ydGFsIHBvcnRhbCk7CiBleHRl cm4gdm9pZCBQb3J0YWxDcmVhdGVIb2xkU3RvcmUoUG9ydGFsIHBvcnRhbCk7Ci0tIAoyLjQ3LjMK Cg== --000000000000863682064de9f4e6 Content-Type: application/octet-stream; name="v10-0003-Use-pruning-aware-locking-in-cached-plans.patch" Content-Disposition: attachment; filename="v10-0003-Use-pruning-aware-locking-in-cached-plans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn79k00k2 RnJvbSA2NDhiOWY1Yzg5MDY5NjkyYmJiNDZjZjU3OTU3NmJlNTBhOTE0N2YyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMjYgTWFyIDIwMjYgMTg6MTU6MzkgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx MCAzLzVdIFVzZSBwcnVuaW5nLWF3YXJlIGxvY2tpbmcgaW4gY2FjaGVkIHBsYW5zCgpFeHRlbmQg R2V0Q2FjaGVkUGxhbigpJ3MgbG9jayBhY3F1aXNpdGlvbiB0byBwZXJmb3JtIGluaXRpYWwKcGFy dGl0aW9uIHBydW5pbmcgdmlhIEV4ZWN1dG9yUHJlcCgpLCB0aGVuIGxvY2sgb25seSB0aGUgc3Vy dml2aW5nCnBhcnRpdGlvbnMuICBUaGlzIGF2b2lkcyB1bm5lY2Vzc2FyeSBsb2NraW5nIG9mIHBy dW5lZCBwYXJ0aXRpb25zCndoZW4gcmV1c2luZyBhIGdlbmVyaWMgY2FjaGVkIHBsYW4uCgpJbnRy b2R1Y2UgQ2FjaGVkUGxhblByZXBEYXRhIHRvIGNhcnJ5IHRoZSBFU3RhdGUgY3JlYXRlZCBieQpF eGVjdXRvclByZXAoKSB0aHJvdWdoIHRoZSBwbGFuIGNhY2hpbmcgbGF5ZXIuICBUaGUgcHJlcF9l c3RhdGUKZmllbGQgaXMgcG9wdWxhdGVkIHdoZW4gR2V0Q2FjaGVkUGxhbigpIHByZXBhcmVzIGEg cmV1c2VkCnNpbmdsZS1zdGF0ZW1lbnQgZ2VuZXJpYyBwbGFuLiAgQWRqdXN0IGNhbGwgc2l0ZXMg aW4gU1BJLApwb3J0YWxzLCBhbmQgRVhQTEFJTiB0byBwcm9wYWdhdGUgdGhpcyB0byBFeGVjdXRv clN0YXJ0KCkuCgpEaXNhYmxlIHBydW5pbmctYXdhcmUgbG9ja2luZyBmb3IgbXVsdGktc3RhdGVt ZW50IENhY2hlZFBsYW5zLCB3aGljaAphcmlzZSBmcm9tIHJ1bGUgcmV3cml0aW5nLiAgUG9ydGFs UnVuTXVsdGkoKSBleGVjdXRlcyBzdWNoIHN0YXRlbWVudHMKc2VxdWVudGlhbGx5IHdpdGggQ29t bWFuZENvdW50ZXJJbmNyZW1lbnQoKSBiZXR3ZWVuIHRoZW0sIHNvIGxhdGVyCnN0YXRlbWVudHMn IHBydW5pbmcgZXhwcmVzc2lvbnMgbWF5IHNlZSBkaWZmZXJlbnQgcmVzdWx0cyBkZXBlbmRpbmcK b24gd2hlbiB0aGV5IGFyZSBldmFsdWF0ZWQuICBFdmFsdWF0aW5nIGFsbCBzdGF0ZW1lbnRzJyBw cnVuaW5nCnVwZnJvbnQgZHVyaW5nIEdldENhY2hlZFBsYW4oKSB3b3VsZCBwcm9kdWNlIHN0YWxl IHJlc3VsdHMgZm9yIGxhdGVyCnN0YXRlbWVudHMuICBBZGRpdGlvbmFsbHksIFBvcnRhbFJ1bk11 bHRpKCkgY2FsbHMKTWVtb3J5Q29udGV4dERlbGV0ZUNoaWxkcmVuKHBvcnRhbENvbnRleHQpIGJl dHdlZW4gc3RhdGVtZW50cywgd2hpY2gKd291bGQgZGVzdHJveSBFU3RhdGVzIHByZXBhcmVkIGZv ciBsYXRlciBzdGF0ZW1lbnRzLiAgVGhlIGZhbGxiYWNrCnRvIGxvY2tpbmcgYWxsIHBhcnRpdGlv bnMgaXMgc2FmZSBhbmQgc3VmZmljaWVudCBoZXJlOyBtdWx0aS1zdGF0ZW1lbnQKcGxhbnMgZnJv bSBydWxlIHJld3JpdGluZyBhcmUgdW5jb21tb24uCgpQYXJ0aXRpb24gcHJ1bmluZyBleHByZXNz aW9ucyBtYXkgY2FsbCBQTCBmdW5jdGlvbnMgdGhhdCByZXF1aXJlCmFuIGFjdGl2ZSBzbmFwc2hv dCAoZS5nLiwgdmlhIEVuc3VyZVBvcnRhbFNuYXBzaG90RXhpc3RzKCkpLgpBY3F1aXJlRXhlY3V0 b3JMb2Nrc1VucHJ1bmVkKCkgZXN0YWJsaXNoZXMgb25lIGJlZm9yZSBjYWxsaW5nCkV4ZWN1dG9y UHJlcCgpIGlmIG5lZWRlZCwgZW5zdXJpbmcgdGhlc2UgZXhwcmVzc2lvbnMgY2FuIGV4ZWN1dGUK Y29ycmVjdGx5IGR1cmluZyBwbGFuIGNhY2hlIHZhbGlkYXRpb24uCgpUbyBtYWludGFpbiBjb3Jy ZWN0bmVzcyB3aGVuIGFsbCB0YXJnZXQgcGFydGl0aW9ucyBhcmUgcHJ1bmVkLCBhbHNvCnJlaW5z dGF0ZSB0aGUgZmlyc3RSZXN1bHRSZWwgbG9ja2luZyBiZWhhdmlvciBsb3N0IGluIGNvbW1pdAoy ODMxN2RlNzIuIFRoYXQgY29tbWl0IHJlcXVpcmVkIHRoZSBmaXJzdCBNb2RpZnlUYWJsZSB0YXJn ZXQgdG8KcmVtYWluIGluaXRpYWxpemVkIGZvciBleGVjdXRvciBhc3N1bXB0aW9ucyB0byBob2xk LiBXZSBub3cKZXhwbGljaXRseSB0cmFjayB0aGVzZSByZWxpZHMgaW4gUGxhbm5lckdsb2JhbCBh bmQgUGxhbm5lZFN0bXQgc28gdGhleQphcmUgbG9ja2VkIGV2ZW4gaWYgcHJ1bmVkLCBwcmVzZXJ2 aW5nIHRoYXQgcnVsZSBhY3Jvc3MgY2FjaGVkIHBsYW4KcmV1c2UuCgpSZWdyZXNzaW9uIHRlc3Rz IGFyZSBpbmNsdWRlZCB0byB2ZXJpZnk6CgotIE9ubHkgc3Vydml2aW5nIHBhcnRpdGlvbnMgYXJl IGxvY2tlZCB3aGVuIHBydW5pbmcgaXMgZW5hYmxlZCwgYW5kCiAgYWxsIHBhcnRpdGlvbnMgYXJl IGxvY2tlZCB3aGVuIGl0IGlzIGRpc2FibGVkIChwZ19sb2NrcyBpbnNwZWN0aW9uKS4KLSBNdWx0 aXBsZSBNb2RpZnlUYWJsZSBub2RlcyAodmlhIHdyaXRhYmxlIENURXMpIGhhbmRsZSB0aGUgY2Fz ZSB3aGVyZQogIGFsbCB0YXJnZXQgcGFydGl0aW9ucyBhcmUgcHJ1bmVkLCBleGVyY2lzaW5nIGZp cnN0UmVzdWx0UmVscy4KLSBQbGFuIGludmFsaWRhdGlvbiBkdXJpbmcgcHJ1bmluZy1hd2FyZSBs b2NrIHNldHVwIChEREwgdHJpZ2dlcmVkIGJ5CiAgYSBwcnVuaW5nIGV4cHJlc3Npb24pIGRpc2Nh cmRzIHRoZSBwcmVwIHN0YXRlIGFuZCByZXBsYW5zIGNsZWFubHkuCi0gTXVsdGktc3RhdGVtZW50 IENhY2hlZFBsYW5zIChmcm9tIHJ1bGUgcmV3cml0aW5nKSBmYWxsIGJhY2sgdG8KICBsb2NraW5n IGFsbCBwYXJ0aXRpb25zLCBhdm9pZGluZyBzdGFsZSBwcnVuaW5nIGFuZCB1c2UtYWZ0ZXItZnJl ZS4KCk5vdGUgZm9yIGV4dGVuc2lvbiBhdXRob3JzOiBjb2RlIHRoYXQgYWNjZXNzZXMgcGFydGl0 aW9uIHJlbGF0aW9ucwp0aHJvdWdoIEVTdGF0ZSBtdXN0IGNoZWNrIHRoYXQgdGhlIFJUIGluZGV4 IGlzIGEgbWVtYmVyIG9mCmVzX3VucHJ1bmVkX3JlbGlkcyBiZWZvcmUgb3BlbmluZyB0aGUgcmVs YXRpb24uICBQcmV2aW91c2x5IHRoaXMgd2FzCmFuIG9wdGltaXphdGlvbiAoYXZvaWQgcHJvY2Vz c2luZyBwcnVuZWQgcGFydGl0aW9ucyk7IGl0IGlzIG5vdyBhCmNvcnJlY3RuZXNzIHJlcXVpcmVt ZW50LCBiZWNhdXNlIHBydW5lZCBwYXJ0aXRpb25zIG1heSBub3QgYmUgbG9ja2VkLgpFeGVjR2V0 UmFuZ2VUYWJsZVJlbGF0aW9uKCkgYWxyZWFkeSBlbmZvcmNlcyB0aGlzIHdpdGggYW4gZXJyb3Ig d2hlbgpjYWxsZWQgb24gYSBwcnVuZWQgcmVsYXRpb24uCi0tLQogc3JjL2JhY2tlbmQvY29tbWFu ZHMvcHJlcGFyZS5jICAgICAgICAgICAgICAgIHwgIDE5ICstCiBzcmMvYmFja2VuZC9leGVjdXRv ci9leGVjTWFpbi5jICAgICAgICAgICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZnVuY3Rpb25zLmMgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVNb2RpZnlUYWJsZS5jICAgICAgICB8ICAgNSArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivc3Bp LmMgICAgICAgICAgICAgICAgICAgIHwgIDI0ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9wbGFubmVyLmMgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v c2V0cmVmcy5jICAgICAgICAgIHwgIDE4ICsrCiBzcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMg ICAgICAgICAgICAgICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMgICAg ICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2Fj aGUuYyAgICAgICAgICAgfCAyNDYgKysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9ub2Rl cy9wYXRobm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvbm9kZXMv cGxhbm5vZGVzLmggICAgICAgICAgICAgICAgIHwgIDEwICsKIHNyYy9pbmNsdWRlL3V0aWxzL3Bs YW5jYWNoZS5oICAgICAgICAgICAgICAgICB8ICAzOCArKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcGFydGl0aW9uX3BydW5lLm91dCB8IDE4NCArKysrKysrKysrKysrCiBzcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3BsYW5jYWNoZS5vdXQgICAgICAgfCAgNjMgKysrKysKIHNyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9wcnVuZS5zcWwgICAgICB8IDExNiArKysrKysrKysKIHNy Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3BsYW5jYWNoZS5zcWwgICAgICAgICAgICB8ICA1MiArKysrCiAx NyBmaWxlcyBjaGFuZ2VkLCA3NjkgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvcHJlcGFyZS5jCmluZGV4IGMyNGQ5N2Y3ZTVhLi42MjFmZDMwZmQ1ZSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3ByZXBhcmUuYwpAQCAtMTU2LDYgKzE1Niw3IEBAIEV4ZWN1dGVRdWVyeShQYXJzZVN0YXRl ICpwc3RhdGUsCiB7CiAJUHJlcGFyZWRTdGF0ZW1lbnQgKmVudHJ5OwogCUNhY2hlZFBsYW4gKmNw bGFuOworCUNhY2hlZFBsYW5QcmVwRGF0YSBjcHJlcCA9IHswfTsKIAlMaXN0CSAgICpwbGFuX2xp c3Q7CiAJUGFyYW1MaXN0SW5mbyBwYXJhbUxJID0gTlVMTDsKIAlFU3RhdGUJICAgKmVzdGF0ZSA9 IE5VTEw7CkBAIC0xOTUsOCArMTk2LDExIEBAIEV4ZWN1dGVRdWVyeShQYXJzZVN0YXRlICpwc3Rh dGUsCiAJCQkJCQkJCQkgICBlbnRyeS0+cGxhbnNvdXJjZS0+cXVlcnlfc3RyaW5nKTsKIAogCS8q IFJlcGxhbiBpZiBuZWVkZWQsIGFuZCBpbmNyZW1lbnQgcGxhbiByZWZjb3VudCBmb3IgcG9ydGFs ICovCi0JY3BsYW4gPSBHZXRDYWNoZWRQbGFuKGVudHJ5LT5wbGFuc291cmNlLCBwYXJhbUxJLCBO VUxMLCBOVUxMKTsKKwljcHJlcC5jb250ZXh0ID0gcG9ydGFsLT5wb3J0YWxDb250ZXh0OworCWNw cmVwLm93bmVyID0gcG9ydGFsLT5yZXNvd25lcjsKKwljcGxhbiA9IEdldENhY2hlZFBsYW4oZW50 cnktPnBsYW5zb3VyY2UsIHBhcmFtTEksIE5VTEwsIE5VTEwsICZjcHJlcCk7CiAJcGxhbl9saXN0 ID0gY3BsYW4tPnN0bXRfbGlzdDsKKwlBc3NlcnQoY3ByZXAucHJlcF9lc3RhdGUgPT0gTlVMTCB8 fCBsaXN0X2xlbmd0aChwbGFuX2xpc3QpID09IDEpOwogCiAJLyoKIAkgKiBETyBOT1QgYWRkIGFu eSBsb2dpYyB0aGF0IGNvdWxkIHBvc3NpYmx5IHRocm93IGFuIGVycm9yIGJldHdlZW4KQEAgLTIw Nyw3ICsyMTEsNyBAQCBFeGVjdXRlUXVlcnkoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkgIHF1 ZXJ5X3N0cmluZywKIAkJCQkJICBlbnRyeS0+cGxhbnNvdXJjZS0+Y29tbWFuZFRhZywKIAkJCQkJ ICBwbGFuX2xpc3QsCi0JCQkJCSAgTlVMTCwKKwkJCQkJICBjcHJlcC5wcmVwX2VzdGF0ZSwKIAkJ CQkJICBjcGxhbik7CiAKIAkvKgpAQCAtNTc3LDYgKzU4MSw3IEBAIEV4cGxhaW5FeGVjdXRlUXVl cnkoRXhlY3V0ZVN0bXQgKmV4ZWNzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUg KmVzLAogCVByZXBhcmVkU3RhdGVtZW50ICplbnRyeTsKIAljb25zdCBjaGFyICpxdWVyeV9zdHJp bmc7CiAJQ2FjaGVkUGxhbiAqY3BsYW47CisJQ2FjaGVkUGxhblByZXBEYXRhIGNwcmVwID0gezB9 OwogCUxpc3QJICAgKnBsYW5fbGlzdDsKIAlMaXN0Q2VsbCAgICpwOwogCVBhcmFtTGlzdEluZm8g cGFyYW1MSSA9IE5VTEw7CkBAIC02MzMsOCArNjM4LDEzIEBAIEV4cGxhaW5FeGVjdXRlUXVlcnko RXhlY3V0ZVN0bXQgKmV4ZWNzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVz LAogCX0KIAogCS8qIFJlcGxhbiBpZiBuZWVkZWQsIGFuZCBhY3F1aXJlIGEgdHJhbnNpZW50IHJl ZmNvdW50ICovCisJY3ByZXAuY29udGV4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0OworCWNwcmVw Lm93bmVyID0gQ3VycmVudFJlc291cmNlT3duZXI7CisJaWYgKGVzLT5nZW5lcmljKQorCQljcHJl cC5lZmxhZ3MgPSBFWEVDX0ZMQUdfRVhQTEFJTl9HRU5FUklDOwogCWNwbGFuID0gR2V0Q2FjaGVk UGxhbihlbnRyeS0+cGxhbnNvdXJjZSwgcGFyYW1MSSwKLQkJCQkJCSAgQ3VycmVudFJlc291cmNl T3duZXIsIHBzdGF0ZS0+cF9xdWVyeUVudik7CisJCQkJCQkgIEN1cnJlbnRSZXNvdXJjZU93bmVy LCBwc3RhdGUtPnBfcXVlcnlFbnYsCisJCQkJCQkgICZjcHJlcCk7CiAKIAlJTlNUUl9USU1FX1NF VF9DVVJSRU5UKHBsYW5kdXJhdGlvbik7CiAJSU5TVFJfVElNRV9TVUJUUkFDVChwbGFuZHVyYXRp b24sIHBsYW5zdGFydCk7CkBAIC02NTUsMTIgKzY2NSwxMyBAQCBFeHBsYWluRXhlY3V0ZVF1ZXJ5 KEV4ZWN1dGVTdG10ICpleGVjc3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRlICpl cywKIAlwbGFuX2xpc3QgPSBjcGxhbi0+c3RtdF9saXN0OwogCiAJLyogRXhwbGFpbiBlYWNoIHF1 ZXJ5ICovCisJQXNzZXJ0KGNwcmVwLnByZXBfZXN0YXRlID09IE5VTEwgfHwgbGlzdF9sZW5ndGgo cGxhbl9saXN0KSA9PSAxKTsKIAlmb3JlYWNoKHAsIHBsYW5fbGlzdCkKIAl7CiAJCVBsYW5uZWRT dG10ICpwc3RtdCA9IGxmaXJzdF9ub2RlKFBsYW5uZWRTdG10LCBwKTsKIAogCQlpZiAocHN0bXQt PmNvbW1hbmRUeXBlICE9IENNRF9VVElMSVRZKQotCQkJRXhwbGFpbk9uZVBsYW4ocHN0bXQsIE5V TEwsCisJCQlFeHBsYWluT25lUGxhbihwc3RtdCwgY3ByZXAucHJlcF9lc3RhdGUsCiAJCQkJCQkg ICBpbnRvLCBlcywgcXVlcnlfc3RyaW5nLCBwYXJhbUxJLCBwc3RhdGUtPnBfcXVlcnlFbnYsCiAJ CQkJCQkgICAmcGxhbmR1cmF0aW9uLCAoZXMtPmJ1ZmZlcnMgPyAmYnVmdXNhZ2UgOiBOVUxMKSwK IAkJCQkJCSAgIGVzLT5tZW1vcnkgPyAmbWVtX2NvdW50ZXJzIDogTlVMTCk7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY01haW4uYwppbmRleCBjYzc3OTRmNThkYi4uMDUxYjVkN2JmY2YgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY01haW4uYwpAQCAtMzM0LDYgKzMzNCwxMCBAQCBzdGFuZGFyZF9FeGVjdXRvclN0YXJ0KFF1 ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogICoKICAqIFJldHVybnMgYW4gRVN0YXRl IHRoYXQgdGhlIGNhbGxlciBtdXN0IGVpdGhlciBwYXNzIHRvIEV4ZWN1dG9yU3RhcnQoKQogICog Zm9yIHJldXNlIG9yIGZyZWUgdmlhIEZyZWVFeGVjdXRvclN0YXRlKCkgaWYgZXhlY3V0aW9uIHdp bGwgbm90IHByb2NlZWQuCisgKiBHZXRDYWNoZWRQbGFuKCkgdXNlcyB0aGlzIHRvIGRldGVybWlu ZSwgYmFzZWQgb24gaW5pdGlhbCBwcnVuaW5nCisgKiByZXN1bHRzLCB3aGljaCBwYXJ0aXRpb25z IHRvIGxvY2s7IGlmIHRoZSByZXN1bHRpbmcgRVN0YXRlIGlzIG5vdAorICogZGVsaXZlcmVkIHRv IEV4ZWN1dG9yU3RhcnQoKSwgdGhlIGV4ZWN1dG9yIHdvdWxkIG9wZXJhdGUgb24gdW5sb2NrZWQK KyAqIHJlbGF0aW9ucy4gIFNlZSB0aGUgYXNzZXJ0IGNoZWNrcyBpbiBzdGFuZGFyZF9FeGVjdXRv clN0YXJ0KCkuCiAgKi8KIEVTdGF0ZSAqCiBFeGVjdXRvclByZXAoUGxhbm5lZFN0bXQgKnBzdG10 LCBQYXJhbUxpc3RJbmZvIHBhcmFtcywgUmVzb3VyY2VPd25lciBvd25lciwKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZnVuY3Rpb25zLmMKaW5kZXggOTUyYTc4NGM5MjQuLmMwY2E3MmIzOGRkIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9mdW5jdGlvbnMuYwpAQCAtNjk5LDYgKzY5OSw3IEBAIGluaXRfZXhlY3V0aW9uX3N0YXRlKFNR TEZ1bmN0aW9uQ2FjaGVQdHIgZmNhY2hlKQogCWZjYWNoZS0+Y3BsYW4gPSBHZXRDYWNoZWRQbGFu KHBsYW5zb3VyY2UsCiAJCQkJCQkJCSAgZmNhY2hlLT5wYXJhbUxJLAogCQkJCQkJCQkgIGZjYWNo ZS0+Y293bmVyLAorCQkJCQkJCQkgIE5VTEwsCiAJCQkJCQkJCSAgTlVMTCk7CiAKIAkvKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwppbmRleCA0Y2Q1ZTI2MmUwZi4uOTIzMGYy YjU1NGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCkBAIC00ODY1LDgg KzQ4NjUsOCBAQCBFeGVjSW5pdE1vZGlmeVRhYmxlKE1vZGlmeVRhYmxlICpub2RlLCBFU3RhdGUg KmVzdGF0ZSwgaW50IGVmbGFncykKIAkgKiBhcyBhIHJlZmVyZW5jZSBmb3IgYnVpbGRpbmcgdGhl IFJlc3VsdFJlbEluZm8gb2YgdGhlIHRhcmdldCBwYXJ0aXRpb24uCiAJICogSW4gZWl0aGVyIGNh c2UsIGl0IGRvZXNuJ3QgbWF0dGVyIHdoaWNoIHJlc3VsdCByZWxhdGlvbiBpcyBrZXB0LCBzbyB3 ZQogCSAqIGp1c3Qga2VlcCB0aGUgZmlyc3Qgb25lLCBpZiBhbGwgb3RoZXJzIGhhdmUgYmVlbiBw cnVuZWQuICBTZWUgYWxzbywKLQkgKiBFeGVjRG9Jbml0aWFsUHJ1bmluZygpLCB3aGljaCBlbnN1 cmVzIHRoYXQgdGhpcyBmaXJzdCByZXN1bHQgcmVsYXRpb24KLQkgKiBoYXMgYmVlbiBsb2NrZWQu CisJICogQWNxdWlyZUV4ZWN1dG9yTG9ja3NVbnBydW5lZCgpLCB3aGljaCBlbnN1cmVzIHRoYXQg dGhpcyBmaXJzdCByZXN1bHQKKwkgKiByZWxhdGlvbiBoYXMgYmVlbiBsb2NrZWQuCiAJICovCiAJ aSA9IDA7CiAJZm9yZWFjaChsLCBub2RlLT5yZXN1bHRSZWxhdGlvbnMpCkBAIC00ODgwLDYgKzQ4 ODAsNyBAQCBFeGVjSW5pdE1vZGlmeVRhYmxlKE1vZGlmeVRhYmxlICpub2RlLCBFU3RhdGUgKmVz dGF0ZSwgaW50IGVmbGFncykKIAkJCS8qIGFsbCByZXN1bHQgcmVsYXRpb25zIHBydW5lZDsga2Vl cCB0aGUgZmlyc3Qgb25lICovCiAJCQlrZWVwX3JlbCA9IHRydWU7CiAJCQlydGkgPSBsaW5pdGlh bF9pbnQobm9kZS0+cmVzdWx0UmVsYXRpb25zKTsKKwkJCUFzc2VydChsaXN0X21lbWJlcl9pbnQo ZXN0YXRlLT5lc19wbGFubmVkc3RtdC0+Zmlyc3RSZXN1bHRSZWxzLCBydGkpKTsKIAkJCWkgPSAw OwogCQl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivc3BpLmMKaW5kZXggMzJjOWQ5ODdjNTkuLmViOTU1MmY4NWRiIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9zcGkuYworKysgYi9zcmMvYmFja2VuZC9leGVj dXRvci9zcGkuYwpAQCAtMTU4MCw2ICsxNTgwLDcgQEAgU1BJX2N1cnNvcl9vcGVuX2ludGVybmFs KGNvbnN0IGNoYXIgKm5hbWUsIFNQSVBsYW5QdHIgcGxhbiwKIHsKIAlDYWNoZWRQbGFuU291cmNl ICpwbGFuc291cmNlOwogCUNhY2hlZFBsYW4gKmNwbGFuOworCUNhY2hlZFBsYW5QcmVwRGF0YSBj cHJlcCA9IHswfTsKIAlMaXN0CSAgICpzdG10X2xpc3Q7CiAJY2hhcgkgICAqcXVlcnlfc3RyaW5n OwogCVNuYXBzaG90CXNuYXBzaG90OwpAQCAtMTY2MCw4ICsxNjYxLDEyIEBAIFNQSV9jdXJzb3Jf b3Blbl9pbnRlcm5hbChjb25zdCBjaGFyICpuYW1lLCBTUElQbGFuUHRyIHBsYW4sCiAJICovCiAK IAkvKiBSZXBsYW4gaWYgbmVlZGVkLCBhbmQgaW5jcmVtZW50IHBsYW4gcmVmY291bnQgZm9yIHBv cnRhbCAqLwotCWNwbGFuID0gR2V0Q2FjaGVkUGxhbihwbGFuc291cmNlLCBwYXJhbUxJLCBOVUxM LCBfU1BJX2N1cnJlbnQtPnF1ZXJ5RW52KTsKKwljcHJlcC5jb250ZXh0ID0gcG9ydGFsLT5wb3J0 YWxDb250ZXh0OworCWNwcmVwLm93bmVyID0gcG9ydGFsLT5yZXNvd25lcjsKKwljcGxhbiA9IEdl dENhY2hlZFBsYW4ocGxhbnNvdXJjZSwgcGFyYW1MSSwgTlVMTCwgX1NQSV9jdXJyZW50LT5xdWVy eUVudiwKKwkJCQkJCSAgJmNwcmVwKTsKIAlzdG10X2xpc3QgPSBjcGxhbi0+c3RtdF9saXN0Owor CUFzc2VydChjcHJlcC5wcmVwX2VzdGF0ZSA9PSBOVUxMIHx8IGxpc3RfbGVuZ3RoKHN0bXRfbGlz dCkgPT0gMSk7CiAKIAlpZiAoIXBsYW4tPnNhdmVkKQogCXsKQEAgLTE2NzAsNyArMTY3NSwxMCBA QCBTUElfY3Vyc29yX29wZW5faW50ZXJuYWwoY29uc3QgY2hhciAqbmFtZSwgU1BJUGxhblB0ciBw bGFuLAogCQkgKiBzbyBtdXN0IGNvcHkgdGhlIHBsYW4gaW50byB0aGUgcG9ydGFsJ3MgY29udGV4 dC4gIEFuIGVycm9yIGhlcmUKIAkJICogd2lsbCByZXN1bHQgaW4gbGVha2luZyBvdXIgcmVmY291 bnQgb24gdGhlIHBsYW4sIGJ1dCBpdCBkb2Vzbid0CiAJCSAqIG1hdHRlciBiZWNhdXNlIHRoZSBw bGFuIGlzIHVuc2F2ZWQgYW5kIGhlbmNlIHRyYW5zaWVudCBhbnl3YXkuCisJCSAqCisJCSAqIFVu c2F2ZWQgcGxhbnMgdXNlIGN1c3RvbSBwbGFucywgc28gcHJlcCBzaG91bGQgYmUgYSBuby1vcC4K IAkJICovCisJCUFzc2VydChjcHJlcC5wcmVwX2VzdGF0ZSA9PSBOVUxMKTsKIAkJb2xkY29udGV4 dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwb3J0YWwtPnBvcnRhbENvbnRleHQpOwogCQlzdG10 X2xpc3QgPSBjb3B5T2JqZWN0KHN0bXRfbGlzdCk7CiAJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhv bGRjb250ZXh0KTsKQEAgLTE2ODYsNyArMTY5NCw3IEBAIFNQSV9jdXJzb3Jfb3Blbl9pbnRlcm5h bChjb25zdCBjaGFyICpuYW1lLCBTUElQbGFuUHRyIHBsYW4sCiAJCQkJCSAgcXVlcnlfc3RyaW5n LAogCQkJCQkgIHBsYW5zb3VyY2UtPmNvbW1hbmRUYWcsCiAJCQkJCSAgc3RtdF9saXN0LAotCQkJ CQkgIE5VTEwsCisJCQkJCSAgY3ByZXAucHJlcF9lc3RhdGUsCiAJCQkJCSAgY3BsYW4pOwogCiAJ LyoKQEAgLTIxMDQsNyArMjExMiw4IEBAIFNQSV9wbGFuX2dldF9jYWNoZWRfcGxhbihTUElQbGFu UHRyIHBsYW4pCiAJLyogR2V0IHRoZSBnZW5lcmljIHBsYW4gZm9yIHRoZSBxdWVyeSAqLwogCWNw bGFuID0gR2V0Q2FjaGVkUGxhbihwbGFuc291cmNlLCBOVUxMLAogCQkJCQkJICBwbGFuLT5zYXZl ZCA/IEN1cnJlbnRSZXNvdXJjZU93bmVyIDogTlVMTCwKLQkJCQkJCSAgX1NQSV9jdXJyZW50LT5x dWVyeUVudik7CisJCQkJCQkgIF9TUElfY3VycmVudC0+cXVlcnlFbnYsCisJCQkJCQkgIE5VTEwp OwogCUFzc2VydChjcGxhbiA9PSBwbGFuc291cmNlLT5ncGxhbik7CiAKIAkvKiBQb3AgdGhlIGVy cm9yIGNvbnRleHQgc3RhY2sgKi8KQEAgLTI1MDEsNiArMjUxMCw3IEBAIF9TUElfZXhlY3V0ZV9w bGFuKFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlvbnMgKm9wdGlvbnMsCiAJ CUNhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UgPSAoQ2FjaGVkUGxhblNvdXJjZSAqKSBsZmly c3QobGMxKTsKIAkJTGlzdAkgICAqc3RtdF9saXN0OwogCQlMaXN0Q2VsbCAgICpsYzI7CisJCUNh Y2hlZFBsYW5QcmVwRGF0YSBjcHJlcCA9IHswfTsKIAogCQlzcGljYWxsYmFja2FyZy5xdWVyeSA9 IHBsYW5zb3VyY2UtPnF1ZXJ5X3N0cmluZzsKIApAQCAtMjU3NSw4ICsyNTg1LDExIEBAIF9TUElf ZXhlY3V0ZV9wbGFuKFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlvbnMgKm9w dGlvbnMsCiAJCSAqIFJlcGxhbiBpZiBuZWVkZWQsIGFuZCBpbmNyZW1lbnQgcGxhbiByZWZjb3Vu dC4gIElmIGl0J3MgYSBzYXZlZAogCQkgKiBwbGFuLCB0aGUgcmVmY291bnQgbXVzdCBiZSBiYWNr ZWQgYnkgdGhlIHBsYW5fb3duZXIuCiAJCSAqLworCQljcHJlcC5jb250ZXh0ID0gQ3VycmVudE1l bW9yeUNvbnRleHQ7CisJCWNwcmVwLm93bmVyID0gQ3VycmVudFJlc291cmNlT3duZXI7CiAJCWNw bGFuID0gR2V0Q2FjaGVkUGxhbihwbGFuc291cmNlLCBvcHRpb25zLT5wYXJhbXMsCi0JCQkJCQkJ ICBwbGFuX293bmVyLCBfU1BJX2N1cnJlbnQtPnF1ZXJ5RW52KTsKKwkJCQkJCQkgIHBsYW5fb3du ZXIsIF9TUElfY3VycmVudC0+cXVlcnlFbnYsCisJCQkJCQkJICAmY3ByZXApOwogCiAJCXN0bXRf bGlzdCA9IGNwbGFuLT5zdG10X2xpc3Q7CiAKQEAgLTI2MTYsNiArMjYyOSw3IEBAIF9TUElfZXhl Y3V0ZV9wbGFuKFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlvbnMgKm9wdGlv bnMsCiAJCQl9CiAJCX0KIAorCQlBc3NlcnQoY3ByZXAucHJlcF9lc3RhdGUgPT0gTlVMTCB8fCBs aXN0X2xlbmd0aChzdG10X2xpc3QpID09IDEpOwogCQlmb3JlYWNoKGxjMiwgc3RtdF9saXN0KQog CQl7CiAJCQlQbGFubmVkU3RtdCAqc3RtdCA9IGxmaXJzdF9ub2RlKFBsYW5uZWRTdG10LCBsYzIp OwpAQCAtMjY5Nyw3ICsyNzExLDcgQEAgX1NQSV9leGVjdXRlX3BsYW4oU1BJUGxhblB0ciBwbGFu LCBjb25zdCBTUElFeGVjdXRlT3B0aW9ucyAqb3B0aW9ucywKIAkJCQkJCQkJCQlvcHRpb25zLT5w YXJhbXMsCiAJCQkJCQkJCQkJX1NQSV9jdXJyZW50LT5xdWVyeUVudiwKIAkJCQkJCQkJCQkwLAot CQkJCQkJCQkJCU5VTEwpOworCQkJCQkJCQkJCWNwcmVwLnByZXBfZXN0YXRlKTsKIAkJCQlyZXMg PSBfU1BJX3BxdWVyeShxZGVzYywgZmlyZV90cmlnZ2VycywKIAkJCQkJCQkJICBjYW5TZXRUYWcg PyBvcHRpb25zLT50Y291bnQgOiAwKTsKIAkJCQlGcmVlUXVlcnlEZXNjKHFkZXNjKTsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCA0MjYwNGEwZjc1Yy4uYWZhNjFkMzU3YzUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYworKysgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAgLTY1Nyw2ICs2NTcsNyBAQCBz dGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLCBp bnQgY3Vyc29yT3B0aW9ucywKIAlyZXN1bHQtPnBlcm1JbmZvcyA9IGdsb2ItPmZpbmFscnRlcGVy bWluZm9zOwogCXJlc3VsdC0+c3VicnRpbmZvcyA9IGdsb2ItPnN1YnJ0aW5mb3M7CiAJcmVzdWx0 LT5yZXN1bHRSZWxhdGlvbnMgPSBnbG9iLT5yZXN1bHRSZWxhdGlvbnM7CisJcmVzdWx0LT5maXJz dFJlc3VsdFJlbHMgPSBnbG9iLT5maXJzdFJlc3VsdFJlbHM7CiAJcmVzdWx0LT5hcHBlbmRSZWxh dGlvbnMgPSBnbG9iLT5hcHBlbmRSZWxhdGlvbnM7CiAJcmVzdWx0LT5zdWJwbGFucyA9IGdsb2It PnN1YnBsYW5zOwogCXJlc3VsdC0+cmV3aW5kUGxhbklEcyA9IGdsb2ItPnJld2luZFBsYW5JRHM7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKaW5kZXggMWI1YjliNWVkOWMuLjhjOTk1 NmU2ODdlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMK KysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCkBAIC0zODQsNiArMzg0 LDI0IEBAIHNldF9wbGFuX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnBsYW4p CiAJCX0KIAl9CiAKKwkvKgorCSAqIFJlY29yZCB0aGUgZmlyc3QgcmVzdWx0IHJlbGF0aW9uIGlm IGl0IGJlbG9uZ3MgdG8gdGhlIHNldCBvZgorCSAqIGluaXRpYWxseSBwcnVuYWJsZSByZWxhdGlv bnMuICBXZSB1c2UgYm1zX25leHRfbWVtYmVyKCkgdG8gZ2V0CisJICogdGhlIGxvd2VzdC1udW1i ZXJlZCBsZWFmIHJlc3VsdCByZWwsIHdoaWNoIG1hdGNoZXMKKwkgKiBsaW5pdGlhbF9pbnQoTW9k aWZ5VGFibGUucmVzdWx0UmVsYXRpb25zKSBiZWNhdXNlIHBhcnRpdGlvbgorCSAqIGV4cGFuc2lv biBwcmVzZXJ2ZXMgUlQgaW5kZXggb3JkZXIuICBFeGVjSW5pdE1vZGlmeVRhYmxlKCkgYXNzZXJ0 cworCSAqIHRoYXQgdGhlIHJlY29yZGVkIGluZGV4IG1hdGNoZXMgd2hhdCBpdCBhY3R1YWxseSBu ZWVkcy4KKwkgKi8KKwlpZiAocm9vdC0+bGVhZl9yZXN1bHRfcmVsaWRzKQorCXsKKwkJSW5kZXgJ Zmlyc3RSZXN1bHRSZWwgPSBibXNfbmV4dF9tZW1iZXIocm9vdC0+bGVhZl9yZXN1bHRfcmVsaWRz LCAtMSk7CisKKwkJZmlyc3RSZXN1bHRSZWwgKz0gcnRvZmZzZXQ7CisJCWlmIChibXNfaXNfbWVt YmVyKGZpcnN0UmVzdWx0UmVsLCByb290LT5nbG9iLT5wcnVuYWJsZVJlbGlkcykpCisJCQlyb290 LT5nbG9iLT5maXJzdFJlc3VsdFJlbHMgPQorCQkJCWxhcHBlbmRfaW50KHJvb3QtPmdsb2ItPmZp cnN0UmVzdWx0UmVscywgZmlyc3RSZXN1bHRSZWwpOworCX0KKwogCXJldHVybiByZXN1bHQ7CiB9 CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5k L3Rjb3AvcG9zdGdyZXMuYwppbmRleCBjY2RiNmMwMTA3MS4uNDg3MjU4NjQxYTUgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3Bv c3RncmVzLmMKQEAgLTE2MzcsNiArMTYzNyw3IEBAIGV4ZWNfYmluZF9tZXNzYWdlKFN0cmluZ0lu Zm8gaW5wdXRfbWVzc2FnZSkKIAlpbnQxNgkgICAqcmZvcm1hdHMgPSBOVUxMOwogCUNhY2hlZFBs YW5Tb3VyY2UgKnBzcmM7CiAJQ2FjaGVkUGxhbiAqY3BsYW47CisJQ2FjaGVkUGxhblByZXBEYXRh IGNwcmVwID0gezB9OwogCVBvcnRhbAkJcG9ydGFsOwogCWNoYXIJICAgKnF1ZXJ5X3N0cmluZzsK IAljaGFyCSAgICpzYXZlZF9zdG10X25hbWU7CkBAIC0yMDE4LDcgKzIwMTksMTAgQEAgZXhlY19i aW5kX21lc3NhZ2UoU3RyaW5nSW5mbyBpbnB1dF9tZXNzYWdlKQogCSAqIHdpbGwgYmUgZ2VuZXJh dGVkIGluIE1lc3NhZ2VDb250ZXh0LiAgVGhlIHBsYW4gcmVmY291bnQgd2lsbCBiZQogCSAqIGFz c2lnbmVkIHRvIHRoZSBQb3J0YWwsIHNvIGl0IHdpbGwgYmUgcmVsZWFzZWQgYXQgcG9ydGFsIGRl c3RydWN0aW9uLgogCSAqLwotCWNwbGFuID0gR2V0Q2FjaGVkUGxhbihwc3JjLCBwYXJhbXMsIE5V TEwsIE5VTEwpOworCWNwcmVwLmNvbnRleHQgPSBwb3J0YWwtPnBvcnRhbENvbnRleHQ7CisJY3By ZXAub3duZXIgPSBwb3J0YWwtPnJlc293bmVyOworCWNwbGFuID0gR2V0Q2FjaGVkUGxhbihwc3Jj LCBwYXJhbXMsIE5VTEwsIE5VTEwsICZjcHJlcCk7CisJQXNzZXJ0KGNwcmVwLnByZXBfZXN0YXRl ID09IE5VTEwgfHwgbGlzdF9sZW5ndGgoY3BsYW4tPnN0bXRfbGlzdCkgPT0gMSk7CiAKIAkvKgog CSAqIE5vdyB3ZSBjYW4gZGVmaW5lIHRoZSBwb3J0YWwuCkBAIC0yMDMxLDcgKzIwMzUsNyBAQCBl eGVjX2JpbmRfbWVzc2FnZShTdHJpbmdJbmZvIGlucHV0X21lc3NhZ2UpCiAJCQkJCSAgcXVlcnlf c3RyaW5nLAogCQkJCQkgIHBzcmMtPmNvbW1hbmRUYWcsCiAJCQkJCSAgY3BsYW4tPnN0bXRfbGlz dCwKLQkJCQkJICBOVUxMLAorCQkJCQkgIGNwcmVwLnByZXBfZXN0YXRlLAogCQkJCQkgIGNwbGFu KTsKIAogCS8qIFBvcnRhbCBpcyBkZWZpbmVkLCBzZXQgdGhlIHBsYW4gSUQgYmFzZWQgb24gaXRz IGNvbnRlbnRzLiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYyBiL3Ny Yy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMKaW5kZXggNDJlZjNlODJmODIuLmI1MmM0YzYxOWVlIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3BxdWVyeS5jCisrKyBiL3NyYy9iYWNrZW5kL3Rj b3AvcHF1ZXJ5LmMKQEAgLTEyMTQsNiArMTIxNCw3IEBAIFBvcnRhbFJ1bk11bHRpKFBvcnRhbCBw b3J0YWwsCiAJICogTG9vcCB0byBoYW5kbGUgdGhlIGluZGl2aWR1YWwgcXVlcmllcyBnZW5lcmF0 ZWQgZnJvbSBhIHNpbmdsZSBwYXJzZXRyZWUKIAkgKiBieSBhbmFseXNpcyBhbmQgcmV3cml0ZS4K IAkgKi8KKwlBc3NlcnQocG9ydGFsLT5wcmVwX2VzdGF0ZSA9PSBOVUxMIHx8IGxpc3RfbGVuZ3Ro KHBvcnRhbC0+c3RtdHMpID09IDEpOwogCWZvcmVhY2goc3RtdGxpc3RfaXRlbSwgcG9ydGFsLT5z dG10cykKIAl7CiAJCVBsYW5uZWRTdG10ICpwc3RtdCA9IGxmaXJzdF9ub2RlKFBsYW5uZWRTdG10 LCBzdG10bGlzdF9pdGVtKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3Bs YW5jYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMKaW5kZXggNjk4 ZTdjMWFhMjIuLmIwYzRkNjI1NjRkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNo ZS9wbGFuY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYwpA QCAtOTMsMTQgKzkzLDE3IEBAIHN0YXRpYyBib29sIFN0bXRQbGFuUmVxdWlyZXNSZXZhbGlkYXRp b24oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSk7CiBzdGF0aWMgYm9vbCBCdWlsZGluZ1Bs YW5SZXF1aXJlc1NuYXBzaG90KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpOwogc3RhdGlj IExpc3QgKlJldmFsaWRhdGVDYWNoZWRRdWVyeShDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNl LAogCQkJCQkJCQkgICBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudik7Ci1zdGF0aWMgYm9vbCBD aGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSk7CitzdGF0aWMgYm9v bCBDaGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgQ2FjaGVkUGxh blByZXBEYXRhICpjcHJlcCk7CiBzdGF0aWMgQ2FjaGVkUGxhbiAqQnVpbGRDYWNoZWRQbGFuKENh Y2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIExpc3QgKnFsaXN0LAogCQkJCQkJCQkgICBQYXJh bUxpc3RJbmZvIGJvdW5kUGFyYW1zLCBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudik7CiBzdGF0 aWMgYm9vbCBjaG9vc2VfY3VzdG9tX3BsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwK IAkJCQkJCQkgICBQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zKTsKIHN0YXRpYyBkb3VibGUgY2Fj aGVkX3BsYW5fY29zdChDYWNoZWRQbGFuICpwbGFuLCBib29sIGluY2x1ZGVfcGxhbm5lcik7CiBz dGF0aWMgUXVlcnkgKlF1ZXJ5TGlzdEdldFByaW1hcnlTdG10KExpc3QgKnN0bXRzKTsKLXN0YXRp YyB2b2lkIEFjcXVpcmVFeGVjdXRvckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJl KTsKK3N0YXRpYyB2b2lkIEFjcXVpcmVFeGVjdXRvckxvY2tzQWxsKExpc3QgKnN0bXRfbGlzdCwg Ym9vbCBhY3F1aXJlKTsKK3N0YXRpYyB2b2lkIEFjcXVpcmVFeGVjdXRvckxvY2tzVW5wcnVuZWQo TGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUsCisJCQkJCQkJCQkJIENhY2hlZFBsYW5QcmVw RGF0YSAqY3ByZXApOworc3RhdGljIHZvaWQgQ2FjaGVkUGxhblByZXBDbGVhbnVwKENhY2hlZFBs YW5QcmVwRGF0YSAqY3ByZXApOwogc3RhdGljIHZvaWQgQWNxdWlyZVBsYW5uZXJMb2NrcyhMaXN0 ICpzdG10X2xpc3QsIGJvb2wgYWNxdWlyZSk7CiBzdGF0aWMgdm9pZCBTY2FuUXVlcnlGb3JMb2Nr cyhRdWVyeSAqcGFyc2V0cmVlLCBib29sIGFjcXVpcmUpOwogc3RhdGljIGJvb2wgU2NhblF1ZXJ5 V2Fsa2VyKE5vZGUgKm5vZGUsIGJvb2wgKmFjcXVpcmUpOwpAQCAtOTQyLDYgKzk0NSwxMiBAQCBS ZXZhbGlkYXRlQ2FjaGVkUXVlcnkoQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKIC8qCiAg KiBDaGVja0NhY2hlZFBsYW46IHNlZSBpZiB0aGUgQ2FjaGVkUGxhblNvdXJjZSdzIGdlbmVyaWMg cGxhbiBpcyB2YWxpZC4KICAqCisgKiBJZiAnY3ByZXAnIGlzIG5vdCBOVUxMIGFuZCB0aGUgZ2Vu ZXJpYyBwbGFuIGNvbnRhaW5zIG9ubHkgYSBzaW5nbGUKKyAqIHN0YXRlbWVudCwgRXhlY3V0b3JQ cmVwKCkgaXMgYXBwbGllZCB0byB0aGF0IFBsYW5uZWRTdG10IHRvIGNvbXB1dGUgdGhlIHNldAor ICogb2YgcGFydGl0aW9ucyB0aGF0IHN1cnZpdmUgaW5pdGlhbCBydW50aW1lIHBydW5pbmcgaW4g b3JkZXIgdG8gb25seSBsb2NrCisgKiB0aGVtLiAgVGhlIEVTdGF0ZSBpcyBzYXZlZCBpbiBjcHJl cC5wcmVwX2VzdGF0ZSwgd2hpY2ggbXVzdCBiZSBwYXNzZWQgdG8KKyAqIEV4ZWN1dG9yU3RhcnQo KSBmb3IgcmV1c2UuCisgKgogICogQ2FsbGVyIG11c3QgaGF2ZSBhbHJlYWR5IGNhbGxlZCBSZXZh bGlkYXRlQ2FjaGVkUXVlcnkgdG8gdmVyaWZ5IHRoYXQgdGhlCiAgKiBxdWVyeXRyZWUgaXMgdXAg dG8gZGF0ZS4KICAqCkBAIC05NDksNyArOTU4LDcgQEAgUmV2YWxpZGF0ZUNhY2hlZFF1ZXJ5KENh Y2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsCiAgKiAoV2UgbXVzdCBkbyB0aGlzIGZvciB0aGUg InRydWUiIHJlc3VsdCB0byBiZSByYWNlLWNvbmRpdGlvbi1mcmVlLikKICAqLwogc3RhdGljIGJv b2wKLUNoZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKQorQ2hlY2tD YWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIENhY2hlZFBsYW5QcmVwRGF0 YSAqY3ByZXApCiB7CiAJQ2FjaGVkUGxhbiAqcGxhbiA9IHBsYW5zb3VyY2UtPmdwbGFuOwogCkBA IC05ODMsNyArOTkyLDE5IEBAIENoZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFu c291cmNlKQogCQkgKi8KIAkJQXNzZXJ0KHBsYW4tPnJlZmNvdW50ID4gMCk7CiAKLQkJQWNxdWly ZUV4ZWN1dG9yTG9ja3MocGxhbi0+c3RtdF9saXN0LCB0cnVlKTsKKwkJLyoKKwkJICogTXVsdGkt c3RhdGVtZW50IENhY2hlZFBsYW5zIChmcm9tIHJ1bGUgcmV3cml0aW5nKSBtdXN0IG5vdAorCQkg KiB1c2UgcHJ1bmluZy1hd2FyZSBsb2NraW5nLCBiZWNhdXNlIGxhdGVyIHN0YXRlbWVudHMnIHBy dW5pbmcKKwkJICogZXhwcmVzc2lvbnMgY291bGQgc2VlIHN0YWxlIHJlc3VsdHMgaWYgZXZhbHVh dGVkIGJlZm9yZQorCQkgKiBlYXJsaWVyIHN0YXRlbWVudHMgaGF2ZSBleGVjdXRlZC4KKwkJICov CisJCWlmIChjcHJlcCAmJiBsaXN0X2xlbmd0aChwbGFuLT5zdG10X2xpc3QpID4gMSkKKwkJCWNw cmVwID0gTlVMTDsKKworCQlpZiAoY3ByZXApCisJCQlBY3F1aXJlRXhlY3V0b3JMb2Nrc1VucHJ1 bmVkKHBsYW4tPnN0bXRfbGlzdCwgdHJ1ZSwgY3ByZXApOworCQllbHNlCisJCQlBY3F1aXJlRXhl Y3V0b3JMb2Nrc0FsbChwbGFuLT5zdG10X2xpc3QsIHRydWUpOwogCiAJCS8qCiAJCSAqIElmIHBs YW4gd2FzIHRyYW5zaWVudCwgY2hlY2sgdG8gc2VlIGlmIFRyYW5zYWN0aW9uWG1pbiBoYXMKQEAg LTEwMDUsNyArMTAyNiwxMyBAQCBDaGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxh bnNvdXJjZSkKIAkJfQogCiAJCS8qIE9vcHMsIHRoZSByYWNlIGNhc2UgaGFwcGVuZWQuICBSZWxl YXNlIHVzZWxlc3MgbG9ja3MuICovCi0JCUFjcXVpcmVFeGVjdXRvckxvY2tzKHBsYW4tPnN0bXRf bGlzdCwgZmFsc2UpOworCQlpZiAoY3ByZXApCisJCQlBY3F1aXJlRXhlY3V0b3JMb2Nrc1VucHJ1 bmVkKHBsYW4tPnN0bXRfbGlzdCwgZmFsc2UsIGNwcmVwKTsKKwkJZWxzZQorCQkJQWNxdWlyZUV4 ZWN1dG9yTG9ja3NBbGwocGxhbi0+c3RtdF9saXN0LCBmYWxzZSk7CisKKwkJLyogQWxzbyBjbGVh biB1cCBFeGVjdXRvclByZXAoKSBzdGF0ZSwgaWYgbmVjZXNzYXJ5LiAqLworCQlDYWNoZWRQbGFu UHJlcENsZWFudXAoY3ByZXApOwogCX0KIAogCS8qCkBAIC0xMjg1LDYgKzEzMTIsMTYgQEAgY2Fj aGVkX3BsYW5fY29zdChDYWNoZWRQbGFuICpwbGFuLCBib29sIGluY2x1ZGVfcGxhbm5lcikKICAq IE9uIHJldHVybiwgdGhlIHBsYW4gaXMgdmFsaWQgYW5kIHdlIGhhdmUgc3VmZmljaWVudCBsb2Nr cyB0byBiZWdpbgogICogZXhlY3V0aW9uLgogICoKKyAqIElmICdjcHJlcCcgaXMgbm90IE5VTEwg YW5kIGEgc2luZ2xlLXN0YXRlbWVudCBnZW5lcmljIHBsYW4gaXMgcmV1c2VkLAorICogdGhlIGZ1 bmN0aW9uIHBlcmZvcm1zIGluaXRpYWwgcHJ1bmluZyB2aWEgRXhlY3V0b3JQcmVwKCkgYW5kIGxv Y2tzIG9ubHkKKyAqIHRoZSBzdXJ2aXZpbmcgcGFydGl0aW9ucy4gIFRoZSByZXN1bHRpbmcgRVN0 YXRlIGlzIHN0b3JlZCBpbgorICogY3ByZXAtPnByZXBfZXN0YXRlIGFuZCBtdXN0IGJlIGRlbGl2 ZXJlZCB0byBFeGVjdXRvclN0YXJ0KCkgdmlhCisgKiBRdWVyeURlc2MtPmVzdGF0ZSAob3IgdGhl IGVxdWl2YWxlbnQgcG9ydGFsL1NQSSBwYXRoKS4gIEZhaWx1cmUKKyAqIHRvIGRvIHNvIG1lYW5z IHRoZSBleGVjdXRvciB3aWxsIG9wZXJhdGUgb24gcmVsYXRpb25zIGZvciB3aGljaAorICogbG9j a3Mgd2VyZSBuZXZlciBhY3F1aXJlZC4gIFBhc3NpbmcgTlVMTCBmb3IgY3ByZXAgaXMgYWx3YXlz IHNhZmU7CisgKiBhbGwgcGFydGl0aW9ucyBhcmUgbG9ja2VkIGFzIGJlZm9yZS4gIE11bHRpLXN0 YXRlbWVudCBwbGFucyBhbHNvCisgKiBmYWxsIGJhY2sgdG8gbG9ja2luZyBhbGwgcGFydGl0aW9u cy4KKyAqCiAgKiBPbiByZXR1cm4sIHRoZSByZWZjb3VudCBvZiB0aGUgcGxhbiBoYXMgYmVlbiBp bmNyZW1lbnRlZDsgYSBsYXRlcgogICogUmVsZWFzZUNhY2hlZFBsYW4oKSBjYWxsIGlzIGV4cGVj dGVkLiAgSWYgIm93bmVyIiBpcyBub3QgTlVMTCB0aGVuCiAgKiB0aGUgcmVmY291bnQgaGFzIGJl ZW4gcmVwb3J0ZWQgdG8gdGhhdCBSZXNvdXJjZU93bmVyIChub3RlIHRoYXQgdGhpcwpAQCAtMTI5 NSw3ICsxMzMyLDggQEAgY2FjaGVkX3BsYW5fY29zdChDYWNoZWRQbGFuICpwbGFuLCBib29sIGlu Y2x1ZGVfcGxhbm5lcikKICAqLwogQ2FjaGVkUGxhbiAqCiBHZXRDYWNoZWRQbGFuKENhY2hlZFBs YW5Tb3VyY2UgKnBsYW5zb3VyY2UsIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsCi0JCQkgIFJl c291cmNlT3duZXIgb3duZXIsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KQorCQkJICBSZXNv dXJjZU93bmVyIG93bmVyLCBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwKKwkJCSAgQ2FjaGVk UGxhblByZXBEYXRhICpjcHJlcCkKIHsKIAlDYWNoZWRQbGFuICpwbGFuID0gTlVMTDsKIAlMaXN0 CSAgICpxbGlzdDsKQEAgLTEzMTcsNyArMTM1NSw5IEBAIEdldENhY2hlZFBsYW4oQ2FjaGVkUGxh blNvdXJjZSAqcGxhbnNvdXJjZSwgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywKIAogCWlmICgh Y3VzdG9tcGxhbikKIAl7Ci0JCWlmIChDaGVja0NhY2hlZFBsYW4ocGxhbnNvdXJjZSkpCisJCWlm IChjcHJlcCkKKwkJCWNwcmVwLT5wYXJhbXMgPSBib3VuZFBhcmFtczsKKwkJaWYgKENoZWNrQ2Fj aGVkUGxhbihwbGFuc291cmNlLCBjcHJlcCkpCiAJCXsKIAkJCS8qIFdlIHdhbnQgYSBnZW5lcmlj IHBsYW4sIGFuZCB3ZSBhbHJlYWR5IGhhdmUgYSB2YWxpZCBvbmUgKi8KIAkJCXBsYW4gPSBwbGFu c291cmNlLT5ncGxhbjsKQEAgLTE5MDQsMTEgKzE5NDQsMTMgQEAgUXVlcnlMaXN0R2V0UHJpbWFy eVN0bXQoTGlzdCAqc3RtdHMpCiB9CiAKIC8qCi0gKiBBY3F1aXJlRXhlY3V0b3JMb2NrczogYWNx dWlyZSBsb2NrcyBuZWVkZWQgZm9yIGV4ZWN1dGlvbiBvZiBhIGNhY2hlZCBwbGFuOwotICogb3Ig cmVsZWFzZSB0aGVtIGlmIGFjcXVpcmUgaXMgZmFsc2UuCisgKiBBY3F1aXJlRXhlY3V0b3JMb2Nr c0FsbDogYWNxdWlyZSBsb2NrcyBuZWVkZWQgZm9yIGV4ZWN1dGlvbiBvZiBhIGNhY2hlZAorICog cGxhbjsgb3IgcmVsZWFzZSB0aGVtIGlmIGFjcXVpcmUgaXMgZmFsc2UuCisgKgorICogVGhpcyBs b2NrcyBhbGwgcmVsYXRpb25zIGluIGEgZ2l2ZW4gUGxhbm5lZFN0bXQncyByYW5nZSB0YWJsZS4K ICAqLwogc3RhdGljIHZvaWQKLUFjcXVpcmVFeGVjdXRvckxvY2tzKExpc3QgKnN0bXRfbGlzdCwg Ym9vbCBhY3F1aXJlKQorQWNxdWlyZUV4ZWN1dG9yTG9ja3NBbGwoTGlzdCAqc3RtdF9saXN0LCBi b29sIGFjcXVpcmUpCiB7CiAJTGlzdENlbGwgICAqbGMxOwogCkBAIC0xOTU1LDYgKzE5OTcsMTkw IEBAIEFjcXVpcmVFeGVjdXRvckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJlKQog CX0KIH0KIAorLyoKKyAqIExvY2tSZWxpZHMKKyAqIAkJQWNxdWlyZSBvciByZWxlYXNlIGxvY2tz IG9uIHRoZSBzcGVjaWZpZWQgcmVsaWRzLCB3aGljaCByZWZlcmVuY2UKKyAqIAkJZW50cmllcyBp biB0aGUgcHJvdmlkZWQgcmFuZ2UgdGFibGUuCisgKgorICogSGVscGVyIGZvciBBY3F1aXJlRXhl Y3V0b3JMb2Nrc1VucHJ1bmVkKCkuCisgKi8KK3N0YXRpYyB2b2lkCitMb2NrUmVsaWRzKExpc3Qg KnJ0YWJsZSwgQml0bWFwc2V0ICpyZWxpZHMsIGJvb2wgYWNxdWlyZSkKK3sKKwlpbnQJcnRpbmRl eCA9IC0xOworCisJd2hpbGUgKChydGluZGV4ID0gYm1zX25leHRfbWVtYmVyKHJlbGlkcywgcnRp bmRleCkpID49IDApCisJeworCQlSYW5nZVRibEVudHJ5ICpydGUgPSBsaXN0X250aF9ub2RlKFJh bmdlVGJsRW50cnksIHJ0YWJsZSwgcnRpbmRleCAtIDEpOworCisJCUFzc2VydChydGUtPnJ0ZWtp bmQgPT0gUlRFX1JFTEFUSU9OIHx8CisJCQkgICAocnRlLT5ydGVraW5kID09IFJURV9TVUJRVUVS WSAmJiBPaWRJc1ZhbGlkKHJ0ZS0+cmVsaWQpKSk7CisKKwkJLyoKKwkJICogQWNxdWlyZSB0aGUg YXBwcm9wcmlhdGUgdHlwZSBvZiBsb2NrIG9uIGVhY2ggcmVsYXRpb24gT0lELiBOb3RlCisJCSAq IHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkgdHJ5IHRvIG9wZW4gdGhlIHJlbCwgYW5kIGhlbmNlIHdp bGwgbm90CisJCSAqIGZhaWwgaWYgaXQncyBiZWVuIGRyb3BwZWQgZW50aXJlbHkgLS0tIHdlJ2xs IGp1c3QgdHJhbnNpZW50bHkKKwkJICogYWNxdWlyZSBhIG5vbi1jb25mbGljdGluZyBsb2NrLgor CQkgKi8KKwkJaWYgKGFjcXVpcmUpCisJCQlMb2NrUmVsYXRpb25PaWQocnRlLT5yZWxpZCwgcnRl LT5yZWxsb2NrbW9kZSk7CisJCWVsc2UKKwkJCVVubG9ja1JlbGF0aW9uT2lkKHJ0ZS0+cmVsaWQs IHJ0ZS0+cmVsbG9ja21vZGUpOworCX0KK30KKworLyoKKyAqIEFjcXVpcmVFeGVjdXRvckxvY2tz VW5wcnVuZWQKKyAqCQlBY3F1aXJlIG9yIHJlbGVhc2UgZXhlY3V0aW9uIGxvY2tzIGZvciBvbmx5 IHVucHJ1bmVkIHJlbGF0aW9ucworICoJCXJlZmVyZW5jZWQgYnkgdGhlIGdpdmVuIHNpbmdsZS1z dGF0ZW1lbnQgUGxhbm5lZFN0bXQgbGlzdC4KKyAqCisgKiBPbiBhY3F1aXJlLCB0aGlzOgorICoJ LSBsb2NrcyB1bnBydW5hYmxlIHJlbHMgbGlzdGVkIGluIFBsYW5uZWRTdG10LnVucHJ1bmFibGVS ZWxpZHMKKyAqCS0gcnVucyBFeGVjdXRvclByZXAoKSB0byBwZXJmb3JtIGluaXRpYWwgcnVudGlt ZSBwcnVuaW5nCisgKgktIGxvY2tzIHRoZSBzdXJ2aXZpbmcgcGFydGl0aW9ucyByZXBvcnRlZCBp biB0aGUgcHJlcCBlc3RhdGUKKyAqCS0gc3RvcmVzIHRoZSBFU3RhdGUgaW4gY3ByZXAtPnByZXBf ZXN0YXRlCisgKgorICogT24gcmVsZWFzZSwgaXQ6CisgKgktIHVzZXMgdGhlIEVTdGF0ZSBpbiBj cHJlcC0+cHJlcF9lc3RhdGUgdG8gZGV0ZXJtaW5lIHdoaWNoCisgKgkgIHJlbGlkcyB0byB1bmxv Y2sKKyAqCisgKiBNZW1vcnkgYWxsb2NhdGlvbiBmb3IgdGhlIEVTdGF0ZSBoYXBwZW5zIGluIGNw cmVwLT5jb250ZXh0LgorICogTG9ja3MgYXJlIGFjcXVpcmVkIHVzaW5nIGNwcmVwLT5vd25lci4K KyAqLworc3RhdGljIHZvaWQKK0FjcXVpcmVFeGVjdXRvckxvY2tzVW5wcnVuZWQoTGlzdCAqc3Rt dF9saXN0LCBib29sIGFjcXVpcmUsCisJCQkJCQkJIENhY2hlZFBsYW5QcmVwRGF0YSAqY3ByZXAp Cit7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGNw cmVwLT5jb250ZXh0KTsKKwlMaXN0Q2VsbCAgICpsYzE7CisJRVN0YXRlCSAgICpwcmVwX2VzdGF0 ZTsKKworCUFzc2VydChjcHJlcCk7CisKKwkvKgorCSAqIFdoZW4gcmVsZWFzaW5nIGxvY2tzLCB1 c2UgdGhlIEVTdGF0ZSBjcmVhdGVkIGR1cmluZyBhY3F1aXNpdGlvbiB0bworCSAqIGRldGVybWlu ZSB3aGljaCByZWxpZHMgdG8gdW5sb2NrLgorCSAqLworCXByZXBfZXN0YXRlID0gY3ByZXAtPnBy ZXBfZXN0YXRlOworCUFzc2VydCghYWNxdWlyZSB8fCBwcmVwX2VzdGF0ZSA9PSBOVUxMKTsKKwlm b3JlYWNoKGxjMSwgc3RtdF9saXN0KQorCXsKKwkJUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10ID0g bGZpcnN0X25vZGUoUGxhbm5lZFN0bXQsIGxjMSk7CisKKwkJaWYgKHBsYW5uZWRzdG10LT5jb21t YW5kVHlwZSA9PSBDTURfVVRJTElUWSkKKwkJeworCQkJLyogU2FtZSBhcyBBY3F1aXJlRXhlY3V0 b3JMb2NrcygpLiAqLworCQkJUXVlcnkJICAgKnF1ZXJ5ID0gVXRpbGl0eUNvbnRhaW5zUXVlcnko cGxhbm5lZHN0bXQtPnV0aWxpdHlTdG10KTsKKworCQkJaWYgKHF1ZXJ5KQorCQkJCVNjYW5RdWVy eUZvckxvY2tzKHF1ZXJ5LCBhY3F1aXJlKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJ ICogTG9jayB0YWJsZXMgbWVudGlvbmVkIGluIHRoZSBvcmlnaW5hbCBxdWVyeSBhbmQgb3RoZXIg dW5wcnVuYWJsZQorCQkgKiByZWxhdGlvbnMgdGhhdCB3ZXJlIGFkZGVkIHRvIHRoZSBwbGFuIHZp YSBpbmhlcml0YW5jZSBleHBhbnNpb24uCisJCSAqLworCQlMb2NrUmVsaWRzKHBsYW5uZWRzdG10 LT5ydGFibGUsIHBsYW5uZWRzdG10LT51bnBydW5hYmxlUmVsaWRzLCBhY3F1aXJlKTsKKworCQkv KiBMb2NrIHBhcnRpdGlvbnMgc3Vydml2aW5nIHJ1bnRpbWUgaW5pdGlhbCBwcnVuaW5nLiAqLwor CQlpZiAoYWNxdWlyZSkKKwkJeworCQkJLyoKKwkJCSAqIFBydW5pbmcgZXhwcmVzc2lvbnMgbWF5 IGNhbGwgUEwgZnVuY3Rpb25zIHRoYXQgcmVxdWlyZSBhbiBhY3RpdmUKKwkJCSAqIHNuYXBzaG90 IChlLmcuLCB2aWEgRW5zdXJlUG9ydGFsU25hcHNob3RFeGlzdHMoKSkuIEVzdGFibGlzaCBvbmUK KwkJCSAqIGlmIG5lZWRlZC4KKwkJCSAqLworCQkJYm9vbAkJc25hcF9wdXNoZWQgPSBmYWxzZTsK KworCQkJaWYgKCFBY3RpdmVTbmFwc2hvdFNldCgpKQorCQkJeworCQkJCVB1c2hBY3RpdmVTbmFw c2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOworCQkJCXNuYXBfcHVzaGVkID0gdHJ1ZTsK KwkJCX0KKworCQkJcHJlcF9lc3RhdGUgPSBFeGVjdXRvclByZXAocGxhbm5lZHN0bXQsIGNwcmVw LT5wYXJhbXMsCisJCQkJCQkJCQkgICBjcHJlcC0+b3duZXIsIGNwcmVwLT5lZmxhZ3MpOworCQkJ QXNzZXJ0KHByZXBfZXN0YXRlKTsKKwkJCWNwcmVwLT5wcmVwX2VzdGF0ZSA9IHByZXBfZXN0YXRl OworCisJCQlpZiAoc25hcF9wdXNoZWQpCisJCQkJUG9wQWN0aXZlU25hcHNob3QoKTsKKwkJfQor CisJCWlmIChwcmVwX2VzdGF0ZSkKKwkJeworCQkJLyoKKwkJCSAqIGVzX3VucHJ1bmVkX3JlbGlk cyBpbmNsdWRlcyBwbGFubmVkc3RtdC0+dW5wcnVuYWJsZVJlbGlkcywKKwkJCSAqIHdoaWNoIHdl J3ZlIGFscmVhZHkgbG9ja2VkLiBGaWx0ZXIgdGhlbSBvdXQgdG8gYXZvaWQgZG91YmxlLWxvY2tp bmcuCisJCQkgKi8KKwkJCUJpdG1hcHNldCAqbG9ja19yZWxpZHMgPSBibXNfZGlmZmVyZW5jZShw cmVwX2VzdGF0ZS0+ZXNfdW5wcnVuZWRfcmVsaWRzLAorCQkJCQkJCQkJCQkJCXBsYW5uZWRzdG10 LT51bnBydW5hYmxlUmVsaWRzKTsKKworCQkJLyoKKwkJCSAqIFdlIG11c3QgYWx3YXlzIGluY2x1 ZGUgdGhlIGZpcnN0IHJlc3VsdCByZWxhdGlvbiBvZiBlYWNoCisJCQkgKiBNb2RpZnlUYWJsZSBu b2RlIGluIHRoZSBwbGFuLCB0aGF0IGlzLCB0aGUgb25lIG1lbnRpb25lZCBpbgorCQkJICogcGxh bm5lZHN0bXQtPmZpcnN0UmVzdWx0UmVscyBpbiB0aGUgc2V0IG9mIHJlbGF0aW9ucyB0byBiZQor CQkJICogbG9ja2VkIHRvIHNhdGlzZnkgZXhlY3V0b3IgYXNzdW1wdGlvbnMgZGVzY3JpYmVkCisJ CQkgKiBpbiBFeGVjSW5pdE1vZGlmeVRhYmxlKCkuICBUaGlzIGNhbiBiZSB3YXN0ZWZ1bCwgYmVj YXVzZSB3ZQorCQkJICogbWF5IG5vdCBuZWVkIHRvIHVzZSB0aGUgZmlyc3QgcmVzdWx0IHJlbGF0 aW9uIGF0IGFsbCBpZiBvdGhlcgorCQkJICogcmVzdWx0IHJlbGF0aW9ucyBhcmUgdW5wcnVuZWQg YW5kIHRodXMgc3VmZmljaWVudCBmb3IgdGhlCisJCQkgKiBNb2RpZnlUYWJsZSBub2RlJ3MgbmVl ZHMuICBVbmZvcnR1bmF0ZWx5LCB3ZSBkb24ndCBoYXZlIHBlci1ub2RlCisJCQkgKiB1bnBydW5l ZF9yZWxpZHMgc2V0IHRvIGRldGVybWluZSB0aGF0IG90aGVyIHJlc3VsdCByZWxhdGlvbnMKKwkJ CSAqIGFyZSBpbmNsdWRlZC4KKwkJCSAqLworCQkJaWYgKHBsYW5uZWRzdG10LT5yZXN1bHRSZWxh dGlvbnMpCisJCQl7CisJCQkJTGlzdENlbGwgKmxjMjsKKworCQkJCWZvcmVhY2gobGMyLCBwbGFu bmVkc3RtdC0+Zmlyc3RSZXN1bHRSZWxzKQorCQkJCXsKKwkJCQkJSW5kZXggICAgICAgZmlyc3RS ZXN1bHRSZWwgPSBsZmlyc3RfaW50KGxjMik7CisKKwkJCQkJaWYgKCFibXNfaXNfbWVtYmVyKGZp cnN0UmVzdWx0UmVsLCBsb2NrX3JlbGlkcykpCisJCQkJCQlsb2NrX3JlbGlkcyA9IGJtc19hZGRf bWVtYmVyKGxvY2tfcmVsaWRzLCBmaXJzdFJlc3VsdFJlbCk7CisJCQkJfQorCQkJfQorCisJCQlM b2NrUmVsaWRzKHBsYW5uZWRzdG10LT5ydGFibGUsIGxvY2tfcmVsaWRzLCBhY3F1aXJlKTsKKwkJ CWJtc19mcmVlKGxvY2tfcmVsaWRzKTsKKwkJfQorCX0KKworCU1lbW9yeUNvbnRleHRTd2l0Y2hU byhvbGRjb250ZXh0KTsKK30KKworLyoKKyAqIENhY2hlZFBsYW5QcmVwQ2xlYW51cAorICoJCURp c3Bvc2Ugb2YgRVN0YXRlIGJ1aWx0IGR1cmluZyBwcnVuaW5nLWF3YXJlIGxvY2sgYWNxdWlzaXRp b24uCisgKgorICogVGhpcyBpcyB1c2VkIHdoZW4gQ2hlY2tDYWNoZWRQbGFuKCkgZGlzY292ZXJz IHRoYXQgYSBDYWNoZWRQbGFuIGhhcworICogYmVjb21lIGludmFsaWQgYWZ0ZXIgQWNxdWlyZUV4 ZWN1dG9yTG9ja3NVbnBydW5lZCgpIGhhcyBhbHJlYWR5IHJ1bi4KKyAqIFRoZSBleGVjdXRpb24g bG9ja3MgaGF2ZSBhbHJlYWR5IGJlZW4gcmVsZWFzZWQgYnkgdGhhdCBwb2ludDsgdGhpcworICog ZnVuY3Rpb24gZnJlZXMgdGhlIEVTdGF0ZSB0aGF0IHRoZSBleGVjdXRvciB3aWxsIG5ldmVyIHNl ZS4KKyAqLworc3RhdGljIHZvaWQKK0NhY2hlZFBsYW5QcmVwQ2xlYW51cChDYWNoZWRQbGFuUHJl cERhdGEgKmNwcmVwKQoreworCUVTdGF0ZSAgICpwcmVwX2VzdGF0ZTsKKwlSZXNvdXJjZU93bmVy IG9sZG93bmVyOworCisJaWYgKGNwcmVwID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFN3aXRj aCB0byBvd25lciB0aGF0IEV4ZWN1dG9yUHJlcCgpIHdvdWxkIGhhdmUgdXNlZC4gKi8KKwlvbGRv d25lciA9IEN1cnJlbnRSZXNvdXJjZU93bmVyOworCUN1cnJlbnRSZXNvdXJjZU93bmVyID0gY3By ZXAtPm93bmVyOworCisJcHJlcF9lc3RhdGUgPSBjcHJlcC0+cHJlcF9lc3RhdGU7CisJQXNzZXJ0 KHByZXBfZXN0YXRlKTsKKwlFeGVjQ2xvc2VSYW5nZVRhYmxlUmVsYXRpb25zKHByZXBfZXN0YXRl KTsKKwlGcmVlRXhlY3V0b3JTdGF0ZShwcmVwX2VzdGF0ZSk7CisJQ3VycmVudFJlc291cmNlT3du ZXIgPSBvbGRvd25lcjsKKworCWNwcmVwLT5wcmVwX2VzdGF0ZSA9IE5VTEw7Cit9CisKIC8qCiAg KiBBY3F1aXJlUGxhbm5lckxvY2tzOiBhY3F1aXJlIGxvY2tzIG5lZWRlZCBmb3IgcGxhbm5pbmcg b2YgYSBxdWVyeXRyZWUgbGlzdDsKICAqIG9yIHJlbGVhc2UgdGhlbSBpZiBhY3F1aXJlIGlzIGZh bHNlLgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5j bHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCAyNzc1OGVjMTZmZS4uNGZkOWQ5YmNjNTYgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRl L25vZGVzL3BhdGhub2Rlcy5oCkBAIC0yMTcsNiArMjE3LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUGxh bm5lckdsb2JhbAogCS8qICJmbGF0IiBsaXN0IG9mIGludGVnZXIgUlQgaW5kZXhlcyAqLwogCUxp c3QJICAgKnJlc3VsdFJlbGF0aW9uczsKIAorCS8qICJmbGF0IiBsaXN0IG9mIGludGVnZXIgUlQg aW5kZXhlcyAob25lIHBlciBNb2RpZnlUYWJsZSBub2RlKSAqLworCUxpc3QJICAgKmZpcnN0UmVz dWx0UmVsczsKKwogCS8qICJmbGF0IiBsaXN0IG9mIEFwcGVuZFJlbEluZm9zICovCiAJTGlzdAkg ICAqYXBwZW5kUmVsYXRpb25zOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFu bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCmluZGV4IGI2MTg1ODI1ZmNi Li41NTI3OWNiYmRhOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKQEAgLTEyMSw2ICsxMjEsMTYgQEAg dHlwZWRlZiBzdHJ1Y3QgUGxhbm5lZFN0bXQKIAkvKiBpbnRlZ2VyIGxpc3Qgb2YgUlQgaW5kZXhl cywgb3IgTklMICovCiAJTGlzdAkgICAqcmVzdWx0UmVsYXRpb25zOwogCisJLyoKKwkgKiBydGFi bGUgaW5kZXhlcyBvZiBmaXJzdCB0YXJnZXQgcmVsYXRpb24gaW4gZWFjaCBNb2RpZnlUYWJsZSBu b2RlIGluIHRoZQorCSAqIHBsYW4gZm9yIElOU0VSVC9VUERBVEUvREVMRVRFL01FUkdFLiAgTklM IGlmIHJlc3VsdFJlbGF0aW9ucyBpcyBOSUwuCisJICoKKwkgKiBUaGVzZSBhcmUgdXNlZCBieSBB Y3F1aXJlRXhlY3V0b3JMb2Nrc1VucHJ1bmVkKCkgdG8gZW5zdXJlIHRoYXQgdGhlCisJICogZmly c3QgcmVzdWx0IHJlbCBmb3IgZWFjaCBNb2RpZnlUYWJsZSByZW1haW5zIGxvY2tlZCBldmVuIGlm IHBydW5lZDsKKwkgKiBzZWUgRXhlY0luaXRNb2RpZnlUYWJsZSgpIGZvciB0aGUgZXhlY3V0b3Ig c2lkZSBhc3N1bXB0aW9ucy4KKwkgKi8KKwlMaXN0CSAgICpmaXJzdFJlc3VsdFJlbHM7CisKIAkv KiBsaXN0IG9mIEFwcGVuZFJlbEluZm8gbm9kZXMgKi8KIAlMaXN0CSAgICphcHBlbmRSZWxhdGlv bnM7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oIGIvc3JjL2lu Y2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmgKaW5kZXggN2E0YTg1YzgwMzguLjFhMTUzYjgxNmViIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9wbGFuY2FjaGUuaAorKysgYi9zcmMvaW5jbHVk ZS91dGlscy9wbGFuY2FjaGUuaApAQCAtMjcsNiArMjcsOSBAQAogdHlwZWRlZiBzdHJ1Y3QgUXVl cnkgUXVlcnk7CiB0eXBlZGVmIHN0cnVjdCBSYXdTdG10IFJhd1N0bXQ7CiAKKy8qIHRvIGF2b2lk IGluY2x1ZGluZyBleGVjbm9kZXMuaCAqLwordHlwZWRlZiBzdHJ1Y3QgRVN0YXRlIEVTdGF0ZTsK KwogLyogcG9zc2libGUgdmFsdWVzIGZvciBwbGFuX2NhY2hlX21vZGUgKi8KIHR5cGVkZWYgZW51 bQogewpAQCAtMTk2LDYgKzE5OSwzOCBAQCB0eXBlZGVmIHN0cnVjdCBDYWNoZWRFeHByZXNzaW9u CiAJZGxpc3Rfbm9kZQlub2RlOwkJCS8qIGxpbmsgaW4gZ2xvYmFsIGxpc3Qgb2YgQ2FjaGVkRXhw cmVzc2lvbnMgKi8KIH0gQ2FjaGVkRXhwcmVzc2lvbjsKIAorLyoKKyAqIENhY2hlZFBsYW5QcmVw RGF0YQorICoJCUNhcnJpZXMgRXhlY3V0b3JQcmVwIHJlc3VsdHMgZm9yIGEgQ2FjaGVkUGxhbidz IFBsYW5uZWRTdG10LAorICoJCWFsb25nIHdpdGggY29udGV4dCBhbmQgb3duZXIgaW5mb3JtYXRp b24gbmVlZGVkIHRvIGFsbG9jYXRlIHRoZW0uCisgKgorICogcHJlcF9lc3RhdGUgaXMgcG9wdWxh dGVkIHdoZW4gR2V0Q2FjaGVkUGxhbigpIHByZXBhcmVzIGEgcmV1c2VkCisgKiBzaW5nbGUtc3Rh dGVtZW50IGdlbmVyaWMgcGxhbi4gIE11bHRpLXN0YXRlbWVudCBwbGFucyAoZnJvbSBydWxlCisg KiByZXdyaXRpbmcpIGZhbGwgYmFjayB0byBsb2NraW5nIGFsbCBwYXJ0aXRpb25zIGFuZCBsZWF2 ZSB0aGlzIE5VTEwuCisgKiBJZiB0aGUgcGxhbiBpcyBmb3VuZCBpbnZhbGlkIGFmdGVyIGxvY2tp bmcsIHRoZSBFU3RhdGUgaXMgZnJlZWQKKyAqIGJ5IENhY2hlZFBsYW5QcmVwQ2xlYW51cCgpIGJl Zm9yZSByZXRyeWluZy4KKyAqCisgKiBFeGVjdXRvclByZXAgc3RhdGUgaXMgYWxsb2NhdGVkIGlu ICdjb250ZXh0JyBhbmQgb3duZWQgYnkgJ293bmVyJy4KKyAqCisgKiBlZmxhZ3MgY29udHJvbHMg RXhlY3V0b3JQcmVwKCkgYmVoYXZpb3IgZHVyaW5nIGluaXRpYWwgcHJ1bmluZy4KKyAqIE5vcm1h bGx5IHplcm87IHNldCBFWEVDX0ZMQUdfRVhQTEFJTl9HRU5FUklDIHRvIHN1cHByZXNzIHBydW5p bmcKKyAqIGluIEVYUExBSU4gKEdFTkVSSUNfUExBTikuICBOZWVkIG5vdCBtYXRjaCB0aGUgZWZs YWdzIGxhdGVyIHBhc3NlZAorICogdG8gRXhlY3V0b3JTdGFydCgpLgorICoKKyAqIHByZXBfZXN0 YXRlIG11c3QgcmVhY2ggRXhlY3V0b3JTdGFydCgpIHRvIGJlIGFkb3B0ZWQgZm9yIGV4ZWN1dGlv bi4KKyAqIElmIHRoZSBwbGFuIGlzIGludmFsaWRhdGVkIGJlZm9yZSB0aGF0IGhhcHBlbnMsIENh Y2hlZFBsYW5QcmVwQ2xlYW51cCgpCisgKiBmcmVlcyBpdCBpbnN0ZWFkLiAgVGhlIEVTdGF0ZSBp cyBhbGxvY2F0ZWQgaW4gJ2NvbnRleHQnIGFuZCBpdHMKKyAqIHJlc291cmNlcyB0cmFja2VkIHVu ZGVyICdvd25lcicsIHdoaWNoIHRoZSBjYWxsZXIgc2V0cyB0byBtYXRjaCB0aGUKKyAqIGV4ZWN1 dGlvbiBlbnZpcm9ubWVudCAoZS5nLiwgcG9ydGFsIGNvbnRleHQgYW5kIHJlc293bmVyKS4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgQ2FjaGVkUGxhblByZXBEYXRhCit7CisJRVN0YXRlICAqcHJlcF9l c3RhdGU7CS8qIEVTdGF0ZSBmb3IgdGhlIFBsYW5uZWRTdG10ICAqLworCVBhcmFtTGlzdEluZm8g cGFyYW1zOwkvKiBwYXJhbXMgdmlzaWJsZSB0byBFeGVjdXRvclByZXAgKi8KKwlNZW1vcnlDb250 ZXh0IGNvbnRleHQ7CS8qIHdoZXJlIHRvIGFsbG9jYXRlIEVTdGF0ZSBhbmQgaXRzIGZpZWxkcyAq LworCVJlc291cmNlT3duZXIgb3duZXI7CS8qIFJlc291cmNlT3duZXIgZm9yIEV4ZWN1dG9yUHJl cCBzdGF0ZSAqLworCWludAkJZWZsYWdzOwkJCS8qIGV4ZWN1dG9yIGZsYWdzIHRvIGNvbnRyb2wg RXhlY3V0b3JQcmVwICovCit9IENhY2hlZFBsYW5QcmVwRGF0YTsKIAogZXh0ZXJuIHZvaWQgSW5p dFBsYW5DYWNoZSh2b2lkKTsKIGV4dGVybiB2b2lkIFJlc2V0UGxhbkNhY2hlKHZvaWQpOwpAQCAt MjQwLDcgKzI3NSw4IEBAIGV4dGVybiBMaXN0ICpDYWNoZWRQbGFuR2V0VGFyZ2V0TGlzdChDYWNo ZWRQbGFuU291cmNlICpwbGFuc291cmNlLAogZXh0ZXJuIENhY2hlZFBsYW4gKkdldENhY2hlZFBs YW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKIAkJCQkJCQkJIFBhcmFtTGlzdEluZm8g Ym91bmRQYXJhbXMsCiAJCQkJCQkJCSBSZXNvdXJjZU93bmVyIG93bmVyLAotCQkJCQkJCQkgUXVl cnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpOworCQkJCQkJCQkgUXVlcnlFbnZpcm9ubWVudCAqcXVl cnlFbnYsCisJCQkJCQkJCSBDYWNoZWRQbGFuUHJlcERhdGEgKmNwcmVwKTsKIGV4dGVybiB2b2lk IFJlbGVhc2VDYWNoZWRQbGFuKENhY2hlZFBsYW4gKnBsYW4sIFJlc291cmNlT3duZXIgb3duZXIp OwogCiBleHRlcm4gYm9vbCBDYWNoZWRQbGFuQWxsb3dzU2ltcGxlVmFsaWRpdHlDaGVjayhDYWNo ZWRQbGFuU291cmNlICpwbGFuc291cmNlLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9wYXJ0aXRpb25fcHJ1bmUub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9w YXJ0aXRpb25fcHJ1bmUub3V0CmluZGV4IGRlYWNkZDc1ODA3Li42MTc4MTM4OWQyZiAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fcHJ1bmUub3V0CisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX3BydW5lLm91dApAQCAtNDgyNCwz ICs0ODI0LDE4NyBAQCBzZWxlY3QgbWluKGEpIG92ZXIgKHBhcnRpdGlvbiBieSBhIG9yZGVyIGJ5 IGEpIGZyb20gcGFydF9hYmMgd2hlcmUgYSA+PSBzdGFibGVfbwogCiBkcm9wIHZpZXcgcGFydF9h YmNfdmlldzsKIGRyb3AgdGFibGUgcGFydF9hYmM7CistLQorLS0gVmVyaWZ5IHRoYXQgcHJ1bmlu Zy1hd2FyZSBsb2NraW5nIHNraXBzIHBydW5lZCBwYXJ0aXRpb25zCistLSB3aGVuIHJldXNpbmcg YSBnZW5lcmljIGNhY2hlZCBwbGFuLgorLS0KK3NldCBwbGFuX2NhY2hlX21vZGUgdG8gZm9yY2Vf Z2VuZXJpY19wbGFuOworY3JlYXRlIHRhYmxlIHBydW5lbG9ja19wIChhIGludCkgcGFydGl0aW9u IGJ5IGxpc3QgKGEpOworY3JlYXRlIHRhYmxlIHBydW5lbG9ja19wMSBwYXJ0aXRpb24gb2YgcHJ1 bmVsb2NrX3AgZm9yIHZhbHVlcyBpbiAoMSk7CitjcmVhdGUgdGFibGUgcHJ1bmVsb2NrX3AyIHBh cnRpdGlvbiBvZiBwcnVuZWxvY2tfcCBmb3IgdmFsdWVzIGluICgyKTsKK2NyZWF0ZSB0YWJsZSBw cnVuZWxvY2tfcDMgcGFydGl0aW9uIG9mIHBydW5lbG9ja19wIGZvciB2YWx1ZXMgaW4gKDMpOwor cHJlcGFyZSBwcnVuZWxvY2tfcSAoaW50KSBhcyBzZWxlY3QgKiBmcm9tIHBydW5lbG9ja19wIHdo ZXJlIGEgPSAkMTsKKy0tIEZvcmNlIGdlbmVyaWMgcGxhbiBjcmVhdGlvbgorZXhwbGFpbiAoY29z dHMgb2ZmKSBleGVjdXRlIHBydW5lbG9ja19xKDEpOworICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAgU3VicGxhbnMgUmVtb3ZlZDogMgorICAgLT4gIFNl cSBTY2FuIG9uIHBydW5lbG9ja19wMSBwcnVuZWxvY2tfcF8xCisgICAgICAgICBGaWx0ZXI6IChh ID0gJDEpCisoNCByb3dzKQorCistLSBFeGVjdXRlIGFuZCBjaGVjayB3aGljaCBjaGlsZCBwYXJ0 aXRpb25zIGFyZSBsb2NrZWQKK2JlZ2luOworZXhlY3V0ZSBwcnVuZWxvY2tfcSgxKTsKKyBhIAor LS0tCisoMCByb3dzKQorCitzZWxlY3QgYy5yZWxuYW1lCisgIGZyb20gcGdfbG9ja3MgbAorICBq b2luIHBnX2NsYXNzIGMgb24gYy5vaWQgPSBsLnJlbGF0aW9uCisgd2hlcmUgbC5waWQgPSBwZ19i YWNrZW5kX3BpZCgpCisgICBhbmQgYy5yZWxuYW1lIGxpa2UgJ3BydW5lbG9ja19wXycKKyBvcmRl ciBieSBjLnJlbG5hbWU7CisgICByZWxuYW1lICAgIAorLS0tLS0tLS0tLS0tLS0KKyBwcnVuZWxv Y2tfcDEKKygxIHJvdykKKworY29tbWl0OworZGVhbGxvY2F0ZSBwcnVuZWxvY2tfcTsKKy0tIFR1 cm4gcHJ1bmluZyBvZmYKK3NldCBlbmFibGVfcGFydGl0aW9uX3BydW5pbmcgdG8gb2ZmOworcHJl cGFyZSBwcnVuZWxvY2tfcSAoaW50KSBhcyBzZWxlY3QgKiBmcm9tIHBydW5lbG9ja19wIHdoZXJl IGEgPSAkMTsKKy0tIEZvcmNlIGdlbmVyaWMgcGxhbiBjcmVhdGlvbgorZXhwbGFpbiAoY29zdHMg b2ZmKSBleGVjdXRlIHBydW5lbG9ja19xKDEpOworICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEFwcGVuZAorICAgLT4gIFNlcSBTY2FuIG9uIHBydW5lbG9ja19wMSBwcnVu ZWxvY2tfcF8xCisgICAgICAgICBGaWx0ZXI6IChhID0gJDEpCisgICAtPiAgU2VxIFNjYW4gb24g cHJ1bmVsb2NrX3AyIHBydW5lbG9ja19wXzIKKyAgICAgICAgIEZpbHRlcjogKGEgPSAkMSkKKyAg IC0+ICBTZXEgU2NhbiBvbiBwcnVuZWxvY2tfcDMgcHJ1bmVsb2NrX3BfMworICAgICAgICAgRmls dGVyOiAoYSA9ICQxKQorKDcgcm93cykKKworLS0gRXhlY3V0ZSBhbmQgY2hlY2sgd2hpY2ggY2hp bGQgcGFydGl0aW9ucyBhcmUgbG9ja2VkCitiZWdpbjsKK2V4ZWN1dGUgcHJ1bmVsb2NrX3EoMSk7 CisgYSAKKy0tLQorKDAgcm93cykKKworc2VsZWN0IGMucmVsbmFtZQorICBmcm9tIHBnX2xvY2tz IGwKKyAgam9pbiBwZ19jbGFzcyBjIG9uIGMub2lkID0gbC5yZWxhdGlvbgorIHdoZXJlIGwucGlk ID0gcGdfYmFja2VuZF9waWQoKQorICAgYW5kIGMucmVsbmFtZSBsaWtlICdwcnVuZWxvY2tfcF8n Cisgb3JkZXIgYnkgYy5yZWxuYW1lOworICAgcmVsbmFtZSAgICAKKy0tLS0tLS0tLS0tLS0tCisg cHJ1bmVsb2NrX3AxCisgcHJ1bmVsb2NrX3AyCisgcHJ1bmVsb2NrX3AzCisoMyByb3dzKQorCitj b21taXQ7CitkZWFsbG9jYXRlIHBydW5lbG9ja19xOworcmVzZXQgZW5hYmxlX3BhcnRpdGlvbl9w cnVuaW5nOworLS0KKy0tIFZlcmlmeSBmaXJzdFJlc3VsdFJlbHMgaGFuZGxpbmcgd2l0aCBtdWx0 aXBsZSBNb2RpZnlUYWJsZSBub2RlcworLS0gKHdyaXRhYmxlIENURXMpIHRhcmdldGluZyBhIHBh cnRpdGlvbmVkIHRhYmxlLiAgV2hlbiBhIHBydW5pbmcKKy0tIHBhcmFtZXRlciBtYXRjaGVzIG5v IHBhcnRpdGlvbiwgYWxsIHJlc3VsdCByZWxhdGlvbnMgYXJlIHBydW5lZAorLS0gYW5kIHRoZSBl eGVjdXRvciBtdXN0IHN0aWxsIGZpbmQgYSB1c2FibGUgZmlyc3QgcmVzdWx0IHJlbGF0aW9uCist LSBmb3IgZWFjaCBNb2RpZnlUYWJsZSBub2RlLgorLS0KK3ByZXBhcmUgcHJ1bmVsb2NrX210X3Eg KGludCwgaW50KSBhcworICB3aXRoIHVwZDEgYXMgKHVwZGF0ZSBwcnVuZWxvY2tfcCBzZXQgYSA9 IGEpLAorICAgICAgIHVwZDIgYXMgKHVwZGF0ZSBwcnVuZWxvY2tfcCBzZXQgYSA9IGEgd2hlcmUg YSA9ICQyKQorICB1cGRhdGUgcHJ1bmVsb2NrX3Agc2V0IGEgPSBhIHdoZXJlIGEgPSAkMTsKKy0t IEZvcmNlIGdlbmVyaWMgcGxhbiBjcmVhdGlvbgorZXhwbGFpbiAoY29zdHMgb2ZmKSBleGVjdXRl IHBydW5lbG9ja19tdF9xKDEsIDIpOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBVcGRhdGUgb24gcHJ1bmVsb2NrX3AK KyAgIFVwZGF0ZSBvbiBwcnVuZWxvY2tfcDEgcHJ1bmVsb2NrX3BfMQorICAgQ1RFIHVwZDEKKyAg ICAgLT4gIFVwZGF0ZSBvbiBwcnVuZWxvY2tfcCBwcnVuZWxvY2tfcF8zCisgICAgICAgICAgIFVw ZGF0ZSBvbiBwcnVuZWxvY2tfcDEgcHJ1bmVsb2NrX3BfNAorICAgICAgICAgICBVcGRhdGUgb24g cHJ1bmVsb2NrX3AyIHBydW5lbG9ja19wXzUKKyAgICAgICAgICAgVXBkYXRlIG9uIHBydW5lbG9j a19wMyBwcnVuZWxvY2tfcF82CisgICAgICAgICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHBydW5lbG9ja19wMSBwcnVuZWxvY2tfcF80CisgICAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnVuZWxvY2tfcDIgcHJ1bmVsb2NrX3BfNQorICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ1bmVsb2NrX3AzIHBydW5lbG9ja19wXzYKKyAg IENURSB1cGQyCisgICAgIC0+ICBVcGRhdGUgb24gcHJ1bmVsb2NrX3AgcHJ1bmVsb2NrX3BfNwor ICAgICAgICAgICBVcGRhdGUgb24gcHJ1bmVsb2NrX3AyIHBydW5lbG9ja19wXzgKKyAgICAgICAg ICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgICBTdWJwbGFucyBSZW1vdmVkOiAyCisgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnVuZWxvY2tfcDIgcHJ1bmVsb2NrX3BfOAor ICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChhID0gJDIpCisgICAtPiAgQXBwZW5kCisg ICAgICAgICBTdWJwbGFucyBSZW1vdmVkOiAyCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ1 bmVsb2NrX3AxIHBydW5lbG9ja19wXzEKKyAgICAgICAgICAgICAgIEZpbHRlcjogKGEgPSAkMSkK KygyMiByb3dzKQorCistLSBBbGwgcGFydGl0aW9ucyBwcnVuZWQ6IHZhbHVlIDQgbWF0Y2hlcyBu byBwYXJ0aXRpb24sIHNvIGVhY2gKKy0tIE1vZGlmeVRhYmxlIG11c3Qgc3RpbGwgaW5pdGlhbGl6 ZSBjb3JyZWN0bHkgd2l0aCBubyBtYXRjaGluZworLS0gcmVzdWx0IHJlbGF0aW9ucy4KK2V4cGxh aW4gKGNvc3RzIG9mZikgZXhlY3V0ZSBwcnVuZWxvY2tfbXRfcSg0LCA1KTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg VXBkYXRlIG9uIHBydW5lbG9ja19wCisgICBDVEUgdXBkMQorICAgICAtPiAgVXBkYXRlIG9uIHBy dW5lbG9ja19wIHBydW5lbG9ja19wXzIKKyAgICAgICAgICAgVXBkYXRlIG9uIHBydW5lbG9ja19w MSBwcnVuZWxvY2tfcF8zCisgICAgICAgICAgIFVwZGF0ZSBvbiBwcnVuZWxvY2tfcDIgcHJ1bmVs b2NrX3BfNAorICAgICAgICAgICBVcGRhdGUgb24gcHJ1bmVsb2NrX3AzIHBydW5lbG9ja19wXzUK KyAgICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHJ1bmVsb2NrX3AxIHBydW5lbG9ja19wXzMKKyAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHBydW5lbG9ja19wMiBwcnVuZWxvY2tfcF80CisgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwcnVuZWxvY2tfcDMgcHJ1bmVsb2NrX3BfNQorICAgQ1RFIHVwZDIKKyAgICAgLT4g IFVwZGF0ZSBvbiBwcnVuZWxvY2tfcCBwcnVuZWxvY2tfcF82CisgICAgICAgICAgIC0+ICBBcHBl bmQKKyAgICAgICAgICAgICAgICAgU3VicGxhbnMgUmVtb3ZlZDogMworICAgLT4gIEFwcGVuZAor ICAgICAgICAgU3VicGxhbnMgUmVtb3ZlZDogMworKDE2IHJvd3MpCisKK2RlYWxsb2NhdGUgcHJ1 bmVsb2NrX210X3E7Citkcm9wIHRhYmxlIHBydW5lbG9ja19wOworLS0KKy0tIFZlcmlmeSB0aGF0 IHBydW5pbmctYXdhcmUgbG9ja2luZyBmYWxscyBiYWNrIHRvIGxvY2tpbmcgYWxsCistLSBwYXJ0 aXRpb25zIGZvciBtdWx0aS1zdGF0ZW1lbnQgQ2FjaGVkUGxhbnMuICBSdWxlIHJld3JpdGluZyBj YW4KKy0tIGV4cGFuZCBhIHNpbmdsZSBzdGF0ZW1lbnQgaW50byBtdWx0aXBsZSBQbGFubmVkU3Rt dHMsIGFuZCBsYXRlcgorLS0gc3RhdGVtZW50cyBtdXN0IG5vdCBoYXZlIHRoZWlyIHBydW5pbmcg ZXZhbHVhdGVkIGJlZm9yZSBlYXJsaWVyCistLSBvbmVzIGhhdmUgZXhlY3V0ZWQsIHNpbmNlIEND SSBiZXR3ZWVuIHN0YXRlbWVudHMgY2FuIGNoYW5nZSB3aGF0CistLSBwcnVuaW5nIGV4cHJlc3Np b25zIHNlZS4KKy0tCitjcmVhdGUgdGFibGUgcHJ1bmVfY29uZmlnICh2YWwgaW50KTsKK2luc2Vy dCBpbnRvIHBydW5lX2NvbmZpZyB2YWx1ZXMgKDEpOworY3JlYXRlIHRhYmxlIG11bHRpc3RtdF9w dCAoYSBpbnQsIGIgaW50KSBwYXJ0aXRpb24gYnkgbGlzdCAoYSk7CitjcmVhdGUgdGFibGUgbXVs dGlzdG10X3B0XzEgcGFydGl0aW9uIG9mIG11bHRpc3RtdF9wdCBmb3IgdmFsdWVzIGluICgxKTsK K2NyZWF0ZSB0YWJsZSBtdWx0aXN0bXRfcHRfMiBwYXJ0aXRpb24gb2YgbXVsdGlzdG10X3B0IGZv ciB2YWx1ZXMgaW4gKDIpOworaW5zZXJ0IGludG8gbXVsdGlzdG10X3B0IHZhbHVlcyAoMSwgMCks ICgyLCAwKTsKK2NyZWF0ZSBmdW5jdGlvbiBnZXRfcHJ1bmVfdmFsKCkgcmV0dXJucyBpbnQgYXMg JCQKKyAgc2VsZWN0IHZhbCBmcm9tIHBydW5lX2NvbmZpZzsKKyQkIGxhbmd1YWdlIHNxbCBzdGFi bGU7CitjcmVhdGUgcnVsZSBjb25maWdfdXBkX3J1bGUgYXMgb24gdXBkYXRlIHRvIG11bHRpc3Rt dF9wdAorICBkbyBhbHNvIHVwZGF0ZSBwcnVuZV9jb25maWcgc2V0IHZhbCA9IDI7CitzZXQgcGxh bl9jYWNoZV9tb2RlIHRvIGZvcmNlX2dlbmVyaWNfcGxhbjsKK3ByZXBhcmUgbXVsdGlfcSBhcyB1 cGRhdGUgbXVsdGlzdG10X3B0IHNldCBiID0gYiArIDEgd2hlcmUgYSA9IGdldF9wcnVuZV92YWwo KTsKKy0tIGZpcnN0IGV4ZWN1dGUgY3JlYXRlcyB0aGUgZ2VuZXJpYyBwbGFuCitleGVjdXRlIG11 bHRpX3E7CistLSByZXNldCBmb3IgdGhlIHJlYWwgdGVzdAordXBkYXRlIHBydW5lX2NvbmZpZyBz ZXQgdmFsID0gMTsKK3VwZGF0ZSBtdWx0aXN0bXRfcHQgc2V0IGIgPSAwOworLS0gc2Vjb25kIGV4 ZWN1dGUgcmV1c2VzIHRoZSBwbGFuOyBwcnVuaW5nLWF3YXJlIGxvY2tpbmcga2lja3MgaW4KK2V4 ZWN1dGUgbXVsdGlfcTsKK3NlbGVjdCAqIGZyb20gbXVsdGlzdG10X3B0IG9yZGVyIGJ5IGE7Cisg YSB8IGIgCistLS0rLS0tCisgMSB8IDAKKyAyIHwgMQorKDIgcm93cykKKworZGVhbGxvY2F0ZSBt dWx0aV9xOworZHJvcCBydWxlIGNvbmZpZ191cGRfcnVsZSBvbiBtdWx0aXN0bXRfcHQ7Citkcm9w IGZ1bmN0aW9uIGdldF9wcnVuZV92YWw7Citkcm9wIHRhYmxlIG11bHRpc3RtdF9wdCwgcHJ1bmVf Y29uZmlnOworcmVzZXQgcGxhbl9jYWNoZV9tb2RlOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9wbGFuY2FjaGUub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9w bGFuY2FjaGUub3V0CmluZGV4IDRlNTkxODgxOTZjLi4zMDQzZGJmYWMyZCAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wbGFuY2FjaGUub3V0CisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcGxhbmNhY2hlLm91dApAQCAtMzk4LDMgKzM5OCw2NiBAQCBzZWxlY3Qg bmFtZSwgZ2VuZXJpY19wbGFucywgY3VzdG9tX3BsYW5zIGZyb20gcGdfcHJlcGFyZWRfc3RhdGVt ZW50cwogKDEgcm93KQogCiBkcm9wIHRhYmxlIHRlc3RfbW9kZTsKKy0tIFRoaXMgZXhlcmNpc2Vz IHRoZSBDYWNoZWRQbGFuUHJlcENsZWFudXAoKSBwYXRoLCB3aGljaCBtdXN0IGZyZWUKKy0tIHRo ZSBFU3RhdGUgY3JlYXRlZCBieSBFeGVjdXRvclByZXAoKSB3aGVuIHRoZSBwbGFuIGlzIGludmFs aWRhdGVkCistLSBiZWZvcmUgZXhlY3V0aW9uIGJlZ2lucy4gIFRoZSBwcnVuaW5nIGV4cHJlc3Np b24gdXNlcyBhIHN0YWJsZSBTUUwKKy0tIGZ1bmN0aW9uIHRoYXQgY2FsbHMgYSB2b2xhdGlsZSBw bHBnc3FsIGZ1bmN0aW9uLiAgVGhhdCBmdW5jdGlvbgorLS0gcGVyZm9ybXMgRERMIG9uIGEgcGFy dGl0aW9uIHdoZW4gYSBzZXBhcmF0ZSAic2lnbmFsIiB0YWJsZSBzYXlzIHRvCistLSBkbyBzby4g IFRoZSBzZWNvbmQgRVhFQ1VURSBzaG91bGQgcmVwbGFuIGNsZWFubHkgYWZ0ZXIgdGhlIERETC4K K3NldCBwbGFuX2NhY2hlX21vZGUgdG8gZm9yY2VfZ2VuZXJpY19wbGFuOworY3JlYXRlIHRhYmxl IGludmFsX2R1cmluZ19wcnVuaW5nX3AgKGEgaW50KSBwYXJ0aXRpb24gYnkgbGlzdCAoYSk7Citj cmVhdGUgdGFibGUgaW52YWxfZHVyaW5nX3BydW5pbmdfcDEgcGFydGl0aW9uIG9mIGludmFsX2R1 cmluZ19wcnVuaW5nX3AgZm9yIHZhbHVlcyBpbiAoMSk7CitjcmVhdGUgdGFibGUgaW52YWxfZHVy aW5nX3BydW5pbmdfcDIgcGFydGl0aW9uIG9mIGludmFsX2R1cmluZ19wcnVuaW5nX3AgZm9yIHZh bHVlcyBpbiAoMik7CitpbnNlcnQgaW50byBpbnZhbF9kdXJpbmdfcHJ1bmluZ19wIHZhbHVlcyAo MSksICgyKTsKK2NyZWF0ZSB0YWJsZSBpbnZhbF9kdXJpbmdfcHJ1bmluZ19zaWduYWwgKGNyZWF0 ZV9pZHggYm9vbCBub3QgbnVsbCk7CitpbnNlcnQgaW50byBpbnZhbF9kdXJpbmdfcHJ1bmluZ19z aWduYWwgdmFsdWVzIChmYWxzZSk7CitjcmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBpbnZhbGlk YXRlX3BsYW5jYWNoZV9mdW5jKCkgcmV0dXJucyBpbnQKK2FzICQkCitkZWNsYXJlCisJY3JlYXRl X2luZGV4IGJvb2w7CitiZWdpbgorCS0tIFBlcmZvcm0gRERMIG9uIGEgcGFydGl0aW9uIGlmIGFz a2VkIHRvCisJc2VsZWN0IGNyZWF0ZV9pZHggaW50byBjcmVhdGVfaW5kZXggZnJvbSBpbnZhbF9k dXJpbmdfcHJ1bmluZ19zaWduYWwgZm9yIHVwZGF0ZTsKKwlpZiBjcmVhdGVfaW5kZXggPSB0cnVl IHRoZW4KKwkJcmFpc2Ugbm90aWNlICdjcmVhdGluZyBpbmRleCBvbiBwYXJ0aXRpb24gaW52YWxf ZHVyaW5nX3BydW5pbmdfcDEnOworCQljcmVhdGUgaW5kZXggb24gaW52YWxfZHVyaW5nX3BydW5p bmdfcDEgKGEpOworCQl1cGRhdGUgaW52YWxfZHVyaW5nX3BydW5pbmdfc2lnbmFsIHNldCBjcmVh dGVfaWR4ID0gZmFsc2U7CisJZW5kIGlmOworCS0tIHZhbHVlIHRoYXQgcHJ1bmluZyB3aWxsIG1h dGNoIGFnYWluc3QgcGFydGl0aW9uIGJvdW5kcworCXJldHVybiAxOworZW5kOworJCQgbGFuZ3Vh Z2UgcGxwZ3NxbCB2b2xhdGlsZTsKK2NyZWF0ZSBvciByZXBsYWNlIGZ1bmN0aW9uIHN0YWJsZV9w cnVuaW5nX3ZhbCgpIHJldHVybnMgaW50IGFzICQkCisJc2VsZWN0IGludmFsaWRhdGVfcGxhbmNh Y2hlX2Z1bmMoKTsKKyQkIGxhbmd1YWdlIHNxbCBzdGFibGU7CitwcmVwYXJlIGludmFsX2R1cmlu Z19wcnVuaW5nX3EgYXMgc2VsZWN0ICogZnJvbSBpbnZhbF9kdXJpbmdfcHJ1bmluZ19wIHdoZXJl IGEgPSBzdGFibGVfcHJ1bmluZ192YWwoKTsKKy0tIEJ1aWxkIGEgZ2VuZXJpYyBwbGFuIGFuZCBy dW4gcHJ1bmluZyBvbmNlLCBidXQgZG9uJ3Qgc2V0IHRoZSBzaWduYWwKKy0tIGZvciBpbnZhbGlk YXRlX3BsYW5jYWNoZV9mdW5jKCkgdG8gcGVyZm9ybSB0aGUgRERMLgorZXhwbGFpbiAodmVyYm9z ZSwgY29zdHMgb2ZmKSBleGVjdXRlIGludmFsX2R1cmluZ19wcnVuaW5nX3E7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAgU3VicGxhbnMgUmVtb3Zl ZDogMQorICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5pbnZhbF9kdXJpbmdfcHJ1bmluZ19wMSBp bnZhbF9kdXJpbmdfcHJ1bmluZ19wXzEKKyAgICAgICAgIE91dHB1dDogaW52YWxfZHVyaW5nX3By dW5pbmdfcF8xLmEKKyAgICAgICAgIEZpbHRlcjogKGludmFsX2R1cmluZ19wcnVuaW5nX3BfMS5h ID0gc3RhYmxlX3BydW5pbmdfdmFsKCkpCisoNSByb3dzKQorCistLSBSZXVzZSB0aGUgZ2VuZXJp YyBwbGFuLiAgTWFrZSBpbnZhbGlkYXRlX3BsYW5jYWNoZV9mdW5jKCkgcGVyZm9ybSBEREwKKy0t IGR1cmluZyB0aGlzIGV4ZWN1dGlvbiwgd2hpY2ggc2hvdWxkIGZvcmNlIHJlcGxhbm5pbmcgd2l0 aG91dCBlcnJvcnMuCit1cGRhdGUgaW52YWxfZHVyaW5nX3BydW5pbmdfc2lnbmFsIHNldCBjcmVh dGVfaWR4ID0gdHJ1ZTsKK2V4cGxhaW4gKHZlcmJvc2UsIGNvc3RzIG9mZikgZXhlY3V0ZSBpbnZh bF9kdXJpbmdfcHJ1bmluZ19xOworTk9USUNFOiAgY3JlYXRpbmcgaW5kZXggb24gcGFydGl0aW9u IGludmFsX2R1cmluZ19wcnVuaW5nX3AxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEFwcGVuZAorICAgU3VicGxhbnMgUmVtb3ZlZDogMQorICAgLT4gIFNlcSBTY2Fu IG9uIHB1YmxpYy5pbnZhbF9kdXJpbmdfcHJ1bmluZ19wMSBpbnZhbF9kdXJpbmdfcHJ1bmluZ19w XzEKKyAgICAgICAgIE91dHB1dDogaW52YWxfZHVyaW5nX3BydW5pbmdfcF8xLmEKKyAgICAgICAg IEZpbHRlcjogKGludmFsX2R1cmluZ19wcnVuaW5nX3BfMS5hID0gc3RhYmxlX3BydW5pbmdfdmFs KCkpCisoNSByb3dzKQorCitkZWFsbG9jYXRlIGludmFsX2R1cmluZ19wcnVuaW5nX3E7Citkcm9w IHRhYmxlIGludmFsX2R1cmluZ19wcnVuaW5nX3AsIGludmFsX2R1cmluZ19wcnVuaW5nX3NpZ25h bDsKK2Ryb3AgZnVuY3Rpb24gaW52YWxpZGF0ZV9wbGFuY2FjaGVfZnVuYywgc3RhYmxlX3BydW5p bmdfdmFsOworcmVzZXQgcGxhbl9jYWNoZV9tb2RlOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvcGFydGl0aW9uX3BydW5lLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRp dGlvbl9wcnVuZS5zcWwKaW5kZXggZDkzYzBjMDNiYWIuLjY5MjQxNWE4ZDlmIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fcHJ1bmUuc3FsCisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9wcnVuZS5zcWwKQEAgLTE0NDcsMyArMTQ0NywxMTkgQEAg c2VsZWN0IG1pbihhKSBvdmVyIChwYXJ0aXRpb24gYnkgYSBvcmRlciBieSBhKSBmcm9tIHBhcnRf YWJjIHdoZXJlIGEgPj0gc3RhYmxlX28KIAogZHJvcCB2aWV3IHBhcnRfYWJjX3ZpZXc7CiBkcm9w IHRhYmxlIHBhcnRfYWJjOworCistLQorLS0gVmVyaWZ5IHRoYXQgcHJ1bmluZy1hd2FyZSBsb2Nr aW5nIHNraXBzIHBydW5lZCBwYXJ0aXRpb25zCistLSB3aGVuIHJldXNpbmcgYSBnZW5lcmljIGNh Y2hlZCBwbGFuLgorLS0KK3NldCBwbGFuX2NhY2hlX21vZGUgdG8gZm9yY2VfZ2VuZXJpY19wbGFu OworCitjcmVhdGUgdGFibGUgcHJ1bmVsb2NrX3AgKGEgaW50KSBwYXJ0aXRpb24gYnkgbGlzdCAo YSk7CitjcmVhdGUgdGFibGUgcHJ1bmVsb2NrX3AxIHBhcnRpdGlvbiBvZiBwcnVuZWxvY2tfcCBm b3IgdmFsdWVzIGluICgxKTsKK2NyZWF0ZSB0YWJsZSBwcnVuZWxvY2tfcDIgcGFydGl0aW9uIG9m IHBydW5lbG9ja19wIGZvciB2YWx1ZXMgaW4gKDIpOworY3JlYXRlIHRhYmxlIHBydW5lbG9ja19w MyBwYXJ0aXRpb24gb2YgcHJ1bmVsb2NrX3AgZm9yIHZhbHVlcyBpbiAoMyk7CisKK3ByZXBhcmUg cHJ1bmVsb2NrX3EgKGludCkgYXMgc2VsZWN0ICogZnJvbSBwcnVuZWxvY2tfcCB3aGVyZSBhID0g JDE7CisKKy0tIEZvcmNlIGdlbmVyaWMgcGxhbiBjcmVhdGlvbgorZXhwbGFpbiAoY29zdHMgb2Zm KSBleGVjdXRlIHBydW5lbG9ja19xKDEpOworCistLSBFeGVjdXRlIGFuZCBjaGVjayB3aGljaCBj aGlsZCBwYXJ0aXRpb25zIGFyZSBsb2NrZWQKK2JlZ2luOworZXhlY3V0ZSBwcnVuZWxvY2tfcSgx KTsKKworc2VsZWN0IGMucmVsbmFtZQorICBmcm9tIHBnX2xvY2tzIGwKKyAgam9pbiBwZ19jbGFz cyBjIG9uIGMub2lkID0gbC5yZWxhdGlvbgorIHdoZXJlIGwucGlkID0gcGdfYmFja2VuZF9waWQo KQorICAgYW5kIGMucmVsbmFtZSBsaWtlICdwcnVuZWxvY2tfcF8nCisgb3JkZXIgYnkgYy5yZWxu YW1lOworY29tbWl0OworCitkZWFsbG9jYXRlIHBydW5lbG9ja19xOworCistLSBUdXJuIHBydW5p bmcgb2ZmCitzZXQgZW5hYmxlX3BhcnRpdGlvbl9wcnVuaW5nIHRvIG9mZjsKKworcHJlcGFyZSBw cnVuZWxvY2tfcSAoaW50KSBhcyBzZWxlY3QgKiBmcm9tIHBydW5lbG9ja19wIHdoZXJlIGEgPSAk MTsKKworLS0gRm9yY2UgZ2VuZXJpYyBwbGFuIGNyZWF0aW9uCitleHBsYWluIChjb3N0cyBvZmYp IGV4ZWN1dGUgcHJ1bmVsb2NrX3EoMSk7CisKKy0tIEV4ZWN1dGUgYW5kIGNoZWNrIHdoaWNoIGNo aWxkIHBhcnRpdGlvbnMgYXJlIGxvY2tlZAorYmVnaW47CitleGVjdXRlIHBydW5lbG9ja19xKDEp OworCitzZWxlY3QgYy5yZWxuYW1lCisgIGZyb20gcGdfbG9ja3MgbAorICBqb2luIHBnX2NsYXNz IGMgb24gYy5vaWQgPSBsLnJlbGF0aW9uCisgd2hlcmUgbC5waWQgPSBwZ19iYWNrZW5kX3BpZCgp CisgICBhbmQgYy5yZWxuYW1lIGxpa2UgJ3BydW5lbG9ja19wXycKKyBvcmRlciBieSBjLnJlbG5h bWU7Citjb21taXQ7CisKK2RlYWxsb2NhdGUgcHJ1bmVsb2NrX3E7CityZXNldCBlbmFibGVfcGFy dGl0aW9uX3BydW5pbmc7CisKKy0tCistLSBWZXJpZnkgZmlyc3RSZXN1bHRSZWxzIGhhbmRsaW5n IHdpdGggbXVsdGlwbGUgTW9kaWZ5VGFibGUgbm9kZXMKKy0tICh3cml0YWJsZSBDVEVzKSB0YXJn ZXRpbmcgYSBwYXJ0aXRpb25lZCB0YWJsZS4gIFdoZW4gYSBwcnVuaW5nCistLSBwYXJhbWV0ZXIg bWF0Y2hlcyBubyBwYXJ0aXRpb24sIGFsbCByZXN1bHQgcmVsYXRpb25zIGFyZSBwcnVuZWQKKy0t IGFuZCB0aGUgZXhlY3V0b3IgbXVzdCBzdGlsbCBmaW5kIGEgdXNhYmxlIGZpcnN0IHJlc3VsdCBy ZWxhdGlvbgorLS0gZm9yIGVhY2ggTW9kaWZ5VGFibGUgbm9kZS4KKy0tCitwcmVwYXJlIHBydW5l bG9ja19tdF9xIChpbnQsIGludCkgYXMKKyAgd2l0aCB1cGQxIGFzICh1cGRhdGUgcHJ1bmVsb2Nr X3Agc2V0IGEgPSBhKSwKKyAgICAgICB1cGQyIGFzICh1cGRhdGUgcHJ1bmVsb2NrX3Agc2V0IGEg PSBhIHdoZXJlIGEgPSAkMikKKyAgdXBkYXRlIHBydW5lbG9ja19wIHNldCBhID0gYSB3aGVyZSBh ID0gJDE7CisKKy0tIEZvcmNlIGdlbmVyaWMgcGxhbiBjcmVhdGlvbgorZXhwbGFpbiAoY29zdHMg b2ZmKSBleGVjdXRlIHBydW5lbG9ja19tdF9xKDEsIDIpOworCistLSBBbGwgcGFydGl0aW9ucyBw cnVuZWQ6IHZhbHVlIDQgbWF0Y2hlcyBubyBwYXJ0aXRpb24sIHNvIGVhY2gKKy0tIE1vZGlmeVRh YmxlIG11c3Qgc3RpbGwgaW5pdGlhbGl6ZSBjb3JyZWN0bHkgd2l0aCBubyBtYXRjaGluZworLS0g cmVzdWx0IHJlbGF0aW9ucy4KK2V4cGxhaW4gKGNvc3RzIG9mZikgZXhlY3V0ZSBwcnVuZWxvY2tf bXRfcSg0LCA1KTsKKworZGVhbGxvY2F0ZSBwcnVuZWxvY2tfbXRfcTsKK2Ryb3AgdGFibGUgcHJ1 bmVsb2NrX3A7CisKKy0tCistLSBWZXJpZnkgdGhhdCBwcnVuaW5nLWF3YXJlIGxvY2tpbmcgZmFs bHMgYmFjayB0byBsb2NraW5nIGFsbAorLS0gcGFydGl0aW9ucyBmb3IgbXVsdGktc3RhdGVtZW50 IENhY2hlZFBsYW5zLiAgUnVsZSByZXdyaXRpbmcgY2FuCistLSBleHBhbmQgYSBzaW5nbGUgc3Rh dGVtZW50IGludG8gbXVsdGlwbGUgUGxhbm5lZFN0bXRzLCBhbmQgbGF0ZXIKKy0tIHN0YXRlbWVu dHMgbXVzdCBub3QgaGF2ZSB0aGVpciBwcnVuaW5nIGV2YWx1YXRlZCBiZWZvcmUgZWFybGllcgor LS0gb25lcyBoYXZlIGV4ZWN1dGVkLCBzaW5jZSBDQ0kgYmV0d2VlbiBzdGF0ZW1lbnRzIGNhbiBj aGFuZ2Ugd2hhdAorLS0gcHJ1bmluZyBleHByZXNzaW9ucyBzZWUuCistLQorY3JlYXRlIHRhYmxl IHBydW5lX2NvbmZpZyAodmFsIGludCk7CitpbnNlcnQgaW50byBwcnVuZV9jb25maWcgdmFsdWVz ICgxKTsKKworY3JlYXRlIHRhYmxlIG11bHRpc3RtdF9wdCAoYSBpbnQsIGIgaW50KSBwYXJ0aXRp b24gYnkgbGlzdCAoYSk7CitjcmVhdGUgdGFibGUgbXVsdGlzdG10X3B0XzEgcGFydGl0aW9uIG9m IG11bHRpc3RtdF9wdCBmb3IgdmFsdWVzIGluICgxKTsKK2NyZWF0ZSB0YWJsZSBtdWx0aXN0bXRf cHRfMiBwYXJ0aXRpb24gb2YgbXVsdGlzdG10X3B0IGZvciB2YWx1ZXMgaW4gKDIpOworaW5zZXJ0 IGludG8gbXVsdGlzdG10X3B0IHZhbHVlcyAoMSwgMCksICgyLCAwKTsKKworY3JlYXRlIGZ1bmN0 aW9uIGdldF9wcnVuZV92YWwoKSByZXR1cm5zIGludCBhcyAkJAorICBzZWxlY3QgdmFsIGZyb20g cHJ1bmVfY29uZmlnOworJCQgbGFuZ3VhZ2Ugc3FsIHN0YWJsZTsKKworY3JlYXRlIHJ1bGUgY29u ZmlnX3VwZF9ydWxlIGFzIG9uIHVwZGF0ZSB0byBtdWx0aXN0bXRfcHQKKyAgZG8gYWxzbyB1cGRh dGUgcHJ1bmVfY29uZmlnIHNldCB2YWwgPSAyOworCitzZXQgcGxhbl9jYWNoZV9tb2RlIHRvIGZv cmNlX2dlbmVyaWNfcGxhbjsKK3ByZXBhcmUgbXVsdGlfcSBhcyB1cGRhdGUgbXVsdGlzdG10X3B0 IHNldCBiID0gYiArIDEgd2hlcmUgYSA9IGdldF9wcnVuZV92YWwoKTsKKy0tIGZpcnN0IGV4ZWN1 dGUgY3JlYXRlcyB0aGUgZ2VuZXJpYyBwbGFuCitleGVjdXRlIG11bHRpX3E7CistLSByZXNldCBm b3IgdGhlIHJlYWwgdGVzdAordXBkYXRlIHBydW5lX2NvbmZpZyBzZXQgdmFsID0gMTsKK3VwZGF0 ZSBtdWx0aXN0bXRfcHQgc2V0IGIgPSAwOworLS0gc2Vjb25kIGV4ZWN1dGUgcmV1c2VzIHRoZSBw bGFuOyBwcnVuaW5nLWF3YXJlIGxvY2tpbmcga2lja3MgaW4KK2V4ZWN1dGUgbXVsdGlfcTsKK3Nl bGVjdCAqIGZyb20gbXVsdGlzdG10X3B0IG9yZGVyIGJ5IGE7CisKK2RlYWxsb2NhdGUgbXVsdGlf cTsKK2Ryb3AgcnVsZSBjb25maWdfdXBkX3J1bGUgb24gbXVsdGlzdG10X3B0OworZHJvcCBmdW5j dGlvbiBnZXRfcHJ1bmVfdmFsOworZHJvcCB0YWJsZSBtdWx0aXN0bXRfcHQsIHBydW5lX2NvbmZp ZzsKK3Jlc2V0IHBsYW5fY2FjaGVfbW9kZTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3BsYW5jYWNoZS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wbGFuY2FjaGUuc3FsCmlu ZGV4IDRiMmYxMWRjYzY0Li42YThiODc4N2RlNiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvcGxhbmNhY2hlLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wbGFuY2FjaGUu c3FsCkBAIC0yMjMsMyArMjIzLDU1IEBAIHNlbGVjdCBuYW1lLCBnZW5lcmljX3BsYW5zLCBjdXN0 b21fcGxhbnMgZnJvbSBwZ19wcmVwYXJlZF9zdGF0ZW1lbnRzCiAgIHdoZXJlICBuYW1lID0gJ3Rl c3RfbW9kZV9wcCc7CiAKIGRyb3AgdGFibGUgdGVzdF9tb2RlOworCistLSBUaGlzIGV4ZXJjaXNl cyB0aGUgQ2FjaGVkUGxhblByZXBDbGVhbnVwKCkgcGF0aCwgd2hpY2ggbXVzdCBmcmVlCistLSB0 aGUgRVN0YXRlIGNyZWF0ZWQgYnkgRXhlY3V0b3JQcmVwKCkgd2hlbiB0aGUgcGxhbiBpcyBpbnZh bGlkYXRlZAorLS0gYmVmb3JlIGV4ZWN1dGlvbiBiZWdpbnMuICBUaGUgcHJ1bmluZyBleHByZXNz aW9uIHVzZXMgYSBzdGFibGUgU1FMCistLSBmdW5jdGlvbiB0aGF0IGNhbGxzIGEgdm9sYXRpbGUg cGxwZ3NxbCBmdW5jdGlvbi4gIFRoYXQgZnVuY3Rpb24KKy0tIHBlcmZvcm1zIERETCBvbiBhIHBh cnRpdGlvbiB3aGVuIGEgc2VwYXJhdGUgInNpZ25hbCIgdGFibGUgc2F5cyB0bworLS0gZG8gc28u ICBUaGUgc2Vjb25kIEVYRUNVVEUgc2hvdWxkIHJlcGxhbiBjbGVhbmx5IGFmdGVyIHRoZSBEREwu CitzZXQgcGxhbl9jYWNoZV9tb2RlIHRvIGZvcmNlX2dlbmVyaWNfcGxhbjsKK2NyZWF0ZSB0YWJs ZSBpbnZhbF9kdXJpbmdfcHJ1bmluZ19wIChhIGludCkgcGFydGl0aW9uIGJ5IGxpc3QgKGEpOwor Y3JlYXRlIHRhYmxlIGludmFsX2R1cmluZ19wcnVuaW5nX3AxIHBhcnRpdGlvbiBvZiBpbnZhbF9k dXJpbmdfcHJ1bmluZ19wIGZvciB2YWx1ZXMgaW4gKDEpOworY3JlYXRlIHRhYmxlIGludmFsX2R1 cmluZ19wcnVuaW5nX3AyIHBhcnRpdGlvbiBvZiBpbnZhbF9kdXJpbmdfcHJ1bmluZ19wIGZvciB2 YWx1ZXMgaW4gKDIpOworaW5zZXJ0IGludG8gaW52YWxfZHVyaW5nX3BydW5pbmdfcCB2YWx1ZXMg KDEpLCAoMik7CisKK2NyZWF0ZSB0YWJsZSBpbnZhbF9kdXJpbmdfcHJ1bmluZ19zaWduYWwgKGNy ZWF0ZV9pZHggYm9vbCBub3QgbnVsbCk7CitpbnNlcnQgaW50byBpbnZhbF9kdXJpbmdfcHJ1bmlu Z19zaWduYWwgdmFsdWVzIChmYWxzZSk7CitjcmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBpbnZh bGlkYXRlX3BsYW5jYWNoZV9mdW5jKCkgcmV0dXJucyBpbnQKK2FzICQkCitkZWNsYXJlCisJY3Jl YXRlX2luZGV4IGJvb2w7CitiZWdpbgorCS0tIFBlcmZvcm0gRERMIG9uIGEgcGFydGl0aW9uIGlm IGFza2VkIHRvCisJc2VsZWN0IGNyZWF0ZV9pZHggaW50byBjcmVhdGVfaW5kZXggZnJvbSBpbnZh bF9kdXJpbmdfcHJ1bmluZ19zaWduYWwgZm9yIHVwZGF0ZTsKKwlpZiBjcmVhdGVfaW5kZXggPSB0 cnVlIHRoZW4KKwkJcmFpc2Ugbm90aWNlICdjcmVhdGluZyBpbmRleCBvbiBwYXJ0aXRpb24gaW52 YWxfZHVyaW5nX3BydW5pbmdfcDEnOworCQljcmVhdGUgaW5kZXggb24gaW52YWxfZHVyaW5nX3By dW5pbmdfcDEgKGEpOworCQl1cGRhdGUgaW52YWxfZHVyaW5nX3BydW5pbmdfc2lnbmFsIHNldCBj cmVhdGVfaWR4ID0gZmFsc2U7CisJZW5kIGlmOworCS0tIHZhbHVlIHRoYXQgcHJ1bmluZyB3aWxs IG1hdGNoIGFnYWluc3QgcGFydGl0aW9uIGJvdW5kcworCXJldHVybiAxOworZW5kOworJCQgbGFu Z3VhZ2UgcGxwZ3NxbCB2b2xhdGlsZTsKKworY3JlYXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24gc3Rh YmxlX3BydW5pbmdfdmFsKCkgcmV0dXJucyBpbnQgYXMgJCQKKwlzZWxlY3QgaW52YWxpZGF0ZV9w bGFuY2FjaGVfZnVuYygpOworJCQgbGFuZ3VhZ2Ugc3FsIHN0YWJsZTsKKworcHJlcGFyZSBpbnZh bF9kdXJpbmdfcHJ1bmluZ19xIGFzIHNlbGVjdCAqIGZyb20gaW52YWxfZHVyaW5nX3BydW5pbmdf cCB3aGVyZSBhID0gc3RhYmxlX3BydW5pbmdfdmFsKCk7CisKKy0tIEJ1aWxkIGEgZ2VuZXJpYyBw bGFuIGFuZCBydW4gcHJ1bmluZyBvbmNlLCBidXQgZG9uJ3Qgc2V0IHRoZSBzaWduYWwKKy0tIGZv ciBpbnZhbGlkYXRlX3BsYW5jYWNoZV9mdW5jKCkgdG8gcGVyZm9ybSB0aGUgRERMLgorZXhwbGFp biAodmVyYm9zZSwgY29zdHMgb2ZmKSBleGVjdXRlIGludmFsX2R1cmluZ19wcnVuaW5nX3E7CisK Ky0tIFJldXNlIHRoZSBnZW5lcmljIHBsYW4uICBNYWtlIGludmFsaWRhdGVfcGxhbmNhY2hlX2Z1 bmMoKSBwZXJmb3JtIERETAorLS0gZHVyaW5nIHRoaXMgZXhlY3V0aW9uLCB3aGljaCBzaG91bGQg Zm9yY2UgcmVwbGFubmluZyB3aXRob3V0IGVycm9ycy4KK3VwZGF0ZSBpbnZhbF9kdXJpbmdfcHJ1 bmluZ19zaWduYWwgc2V0IGNyZWF0ZV9pZHggPSB0cnVlOworZXhwbGFpbiAodmVyYm9zZSwgY29z dHMgb2ZmKSBleGVjdXRlIGludmFsX2R1cmluZ19wcnVuaW5nX3E7CisKK2RlYWxsb2NhdGUgaW52 YWxfZHVyaW5nX3BydW5pbmdfcTsKK2Ryb3AgdGFibGUgaW52YWxfZHVyaW5nX3BydW5pbmdfcCwg aW52YWxfZHVyaW5nX3BydW5pbmdfc2lnbmFsOworZHJvcCBmdW5jdGlvbiBpbnZhbGlkYXRlX3Bs YW5jYWNoZV9mdW5jLCBzdGFibGVfcHJ1bmluZ192YWw7CisKK3Jlc2V0IHBsYW5fY2FjaGVfbW9k ZTsKLS0gCjIuNDcuMwoK --000000000000863682064de9f4e6 Content-Type: application/octet-stream; name="v10-0004-Make-SQL-function-executor-track-ExecutorPrep-st.patch" Content-Disposition: attachment; filename="v10-0004-Make-SQL-function-executor-track-ExecutorPrep-st.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn79k00e1 RnJvbSA1NzY5ZjZjYTdjOWZmY2VlMWI1MWQyNzEwNWM3ODBjNWQ2MTAyZjU1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMTAgRmViIDIwMjYgMjI6MDk6MjMgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx MCA0LzVdIE1ha2UgU1FMIGZ1bmN0aW9uIGV4ZWN1dG9yIHRyYWNrIEV4ZWN1dG9yUHJlcCBzdGF0 ZQoKRXh0ZW5kIHRoZSBTUUwgZnVuY3Rpb24gZXhlY3V0b3IgdG8gdXNlIHRoZSBFeGVjdXRvclBy ZXAgcmVzdWx0cwpyZXR1cm5lZCBieSBHZXRDYWNoZWRQbGFuKCkuICBpbml0X2V4ZWN1dGlvbl9z dGF0ZSgpIG5vdyBwYXNzZXMgYQpDYWNoZWRQbGFuUHJlcERhdGEgdG8gR2V0Q2FjaGVkUGxhbigp IGFuZCBzdG9yZXMgdGhlIHBlciBzdGF0ZW1lbnQKRXhlY1ByZXAgcG9pbnRlcnMgaW4gdGhlIGV4 ZWN1dGlvbl9zdGF0ZSBub2Rlcy4KCkF0IGV4ZWN1dGlvbiB0aW1lLCBwb3N0cXVlbF9zdGFydCgp IHJlcGFyZW50cyB0aGUgcHJlcCBlc3RhdGUncwplc19xdWVyeV9jeHQgdW5kZXIgdGhlIGZ1bmN0 aW9uJ3Mgc3ViY29udGV4dCBzbyB0aGF0IHByZXAgc3RhdGUKZm9sbG93cyB0aGUgdXN1YWwgcGVy IGNhbGwgY29udGV4dCBoaWVyYXJjaHkuCgpUaGlzIGFsbG93cyBTUUwgbGFuZ3VhZ2UgZnVuY3Rp b25zIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBzYW1lCkV4ZWN1dG9yUHJlcCBtYWNoaW5lcnkgYXMg b3RoZXIgcGxhbiBjYWNoZSB1c2Vycy4KCkFkZCBhIHJlZ3Jlc3Npb24gdGVzdCB3aGVyZSBydWxl IHJld3JpdGUgZXhwYW5kcyBhIHNpbmdsZSBVUERBVEUKaW50byBtdWx0aXBsZSBQbGFubmVkU3Rt dHMsIGV4ZXJjaXNpbmcgdGhlIFNRTCBmdW5jdGlvbiBwbGFuIGNhY2hlCmFuZCB0aGUgZ2VuZXJp YyBwbGFuIHJldXNlIHBhdGggdGhhdCBub3cgaW52b2tlcyBFeGVjdXRvclByZXAuCi0tLQogc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMgICAgICAgIHwgMjcgKysrKysrKysrKysrLS0K IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGxhbmNhY2hlLm91dCB8IDQ4ICsrKysrKysrKysr KysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BsYW5jYWNoZS5zcWwgICAgICB8 IDM0ICsrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAxMDcgaW5zZXJ0aW9ucygr KSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5j dGlvbnMuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCmluZGV4IGMwY2E3MmIz OGRkLi4yYmU4MTZiNmE3NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rp b25zLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMKQEAgLTczLDYgKzcz LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgZXhlY3V0aW9uX3N0YXRlCiAJYm9vbAkJc2V0c1Jlc3VsdDsJ CS8qIHRydWUgaWYgdGhpcyBxdWVyeSBwcm9kdWNlcyBmdW5jJ3MgcmVzdWx0ICovCiAJYm9vbAkJ bGF6eUV2YWw7CQkvKiB0cnVlIGlmIHNob3VsZCBmZXRjaCBvbmUgcm93IGF0IGEgdGltZSAqLwog CVBsYW5uZWRTdG10ICpzdG10OwkJCS8qIHBsYW4gZm9yIHRoaXMgcXVlcnkgKi8KKwlFU3RhdGUJ ICAgKnByZXBfZXN0YXRlOwkvKiBFU3RhdGUgY3JlYXRlZCBpbiBFeGVjdXRvclByZXAoKSBmb3Ig dGhpcyBwbGFuICovCiAJUXVlcnlEZXNjICAqcWQ7CQkJCS8qIG51bGwgdW5sZXNzIHN0YXR1cyA9 PSBSVU4gKi8KIH0gZXhlY3V0aW9uX3N0YXRlOwogCkBAIC02NTgsNiArNjU5LDcgQEAgaW5pdF9l eGVjdXRpb25fc3RhdGUoU1FMRnVuY3Rpb25DYWNoZVB0ciBmY2FjaGUpCiAJZXhlY3V0aW9uX3N0 YXRlICpsYXN0dGFnZXMgPSBOVUxMOwogCWludAkJCW5zdG10czsKIAlMaXN0Q2VsbCAgICpsYzsK KwlDYWNoZWRQbGFuUHJlcERhdGEgY3ByZXAgPSB7MH07CiAKIAkvKgogCSAqIENsZWFuIHVwIGFm dGVyIHByZXZpb3VzIHF1ZXJ5LCBpZiB0aGVyZSB3YXMgb25lLgpAQCAtNjk2LDExICs2OTgsMjAg QEAgaW5pdF9leGVjdXRpb25fc3RhdGUoU1FMRnVuY3Rpb25DYWNoZVB0ciBmY2FjaGUpCiAJICog Q3VycmVudFJlc291cmNlT3duZXIgd2lsbCBiZSB0aGUgc2FtZSB3aGVuIFNodXRkb3duU1FMRnVu Y3Rpb24gcnVucy4pCiAJICovCiAJZmNhY2hlLT5jb3duZXIgPSBDdXJyZW50UmVzb3VyY2VPd25l cjsKKworCS8qCisJICogSGF2ZSBFeGVjdXRvclByZXAoKSBhbGxvY2F0ZSB1bmRlciBmY2FjaGUt PmZjb250ZXh0LiAgVGhlIHByZXAKKwkgKiBFU3RhdGVzIGl0IGNyZWF0ZXMgd2lsbCBpbml0aWFs bHkgbGl2ZSB0aGVyZTsgcG9zdHF1ZWxfc3RhcnQoKQorCSAqIHdpbGwgbGF0ZXIgcmVwYXJlbnQg dGhlaXIgZXNfcXVlcnlfY3h0IGludG8gZmNhY2hlLT5zdWJjb250ZXh0CisJICogd2hlbiB1c2lu ZyB0aGVtIGZvciBleGVjdXRpb24uCisJICovCisJY3ByZXAuY29udGV4dCA9IGZjYWNoZS0+ZmNv bnRleHQ7CisJY3ByZXAub3duZXIgPSBmY2FjaGUtPmNvd25lcjsKIAlmY2FjaGUtPmNwbGFuID0g R2V0Q2FjaGVkUGxhbihwbGFuc291cmNlLAogCQkJCQkJCQkgIGZjYWNoZS0+cGFyYW1MSSwKIAkJ CQkJCQkJICBmY2FjaGUtPmNvd25lciwKIAkJCQkJCQkJICBOVUxMLAotCQkJCQkJCQkgIE5VTEwp OworCQkJCQkJCQkgICZjcHJlcCk7CiAKIAkvKgogCSAqIElmIG5lY2Vzc2FyeSwgbWFrZSBlc2Fy cmF5W10gYmlnZ2VyIHRvIGhvbGQgdGhlIG5lZWRlZCBzdGF0ZS4KQEAgLTcyMSw2ICs3MzIsNyBA QCBpbml0X2V4ZWN1dGlvbl9zdGF0ZShTUUxGdW5jdGlvbkNhY2hlUHRyIGZjYWNoZSkKIAkvKgog CSAqIEJ1aWxkIGV4ZWN1dGlvbl9zdGF0ZSBsaXN0IHRvIG1hdGNoIHRoZSBudW1iZXIgb2YgY29u dGFpbmVkIHBsYW5zLgogCSAqLworCUFzc2VydChjcHJlcC5wcmVwX2VzdGF0ZSA9PSBOVUxMIHx8 IGxpc3RfbGVuZ3RoKGZjYWNoZS0+Y3BsYW4tPnN0bXRfbGlzdCkgPT0gMSk7CiAJZm9yZWFjaChs YywgZmNhY2hlLT5jcGxhbi0+c3RtdF9saXN0KQogCXsKIAkJUGxhbm5lZFN0bXQgKnN0bXQgPSBs Zmlyc3Rfbm9kZShQbGFubmVkU3RtdCwgbGMpOwpAQCAtNzY1LDYgKzc3Nyw3IEBAIGluaXRfZXhl Y3V0aW9uX3N0YXRlKFNRTEZ1bmN0aW9uQ2FjaGVQdHIgZmNhY2hlKQogCQluZXdlcy0+c2V0c1Jl c3VsdCA9IGZhbHNlOwkvKiBtaWdodCBjaGFuZ2UgYmVsb3cgKi8KIAkJbmV3ZXMtPmxhenlFdmFs ID0gZmFsc2U7CS8qIG1pZ2h0IGNoYW5nZSBiZWxvdyAqLwogCQluZXdlcy0+c3RtdCA9IHN0bXQ7 CisJCW5ld2VzLT5wcmVwX2VzdGF0ZSA9IGNwcmVwLnByZXBfZXN0YXRlOwogCQluZXdlcy0+cWQg PSBOVUxMOwogCiAJCWlmIChzdG10LT5jYW5TZXRUYWcpCkBAIC0xMzYzLDYgKzEzNzYsMTUgQEAg cG9zdHF1ZWxfc3RhcnQoZXhlY3V0aW9uX3N0YXRlICplcywgU1FMRnVuY3Rpb25DYWNoZVB0ciBm Y2FjaGUpCiAJZWxzZQogCQlkZXN0ID0gTm9uZV9SZWNlaXZlcjsKIAorCS8qCisJICogUHJlcCBF U3RhdGVzIHdlcmUgYnVpbHQgdW5kZXIgZmNhY2hlLT5mY29udGV4dC4gIEZvciBleGVjdXRpb24s CisJICogbWFrZSB0aGVpciBlc19xdWVyeV9jeHQgYSBjaGlsZCBvZiBmY2FjaGUtPnN1YmNvbnRl eHQgc28gdGhleQorCSAqIGZvbGxvdyB0aGUgdXN1YWwgcGVyIGNhbGwgbGlmZXRpbWUuCisJICov CisJaWYgKGVzLT5wcmVwX2VzdGF0ZSkKKwkJTWVtb3J5Q29udGV4dFNldFBhcmVudChlcy0+cHJl cF9lc3RhdGUtPmVzX3F1ZXJ5X2N4dCwKKwkJCQkJCQkgICBmY2FjaGUtPnN1YmNvbnRleHQpOwor CiAJZXMtPnFkID0gQ3JlYXRlUXVlcnlEZXNjKGVzLT5zdG10LAogCQkJCQkJCSBmY2FjaGUtPmZ1 bmMtPnNyYywKIAkJCQkJCQkgR2V0QWN0aXZlU25hcHNob3QoKSwKQEAgLTEzNzEsNyArMTM5Myw3 IEBAIHBvc3RxdWVsX3N0YXJ0KGV4ZWN1dGlvbl9zdGF0ZSAqZXMsIFNRTEZ1bmN0aW9uQ2FjaGVQ dHIgZmNhY2hlKQogCQkJCQkJCSBmY2FjaGUtPnBhcmFtTEksCiAJCQkJCQkJIGVzLT5xZCA/IGVz LT5xZC0+cXVlcnlFbnYgOiBOVUxMLAogCQkJCQkJCSAwLAotCQkJCQkJCSBOVUxMKTsKKwkJCQkJ CQkgZXMtPnByZXBfZXN0YXRlKTsKIAogCS8qIFV0aWxpdHkgY29tbWFuZHMgZG9uJ3QgbmVlZCBF eGVjdXRvci4gKi8KIAlpZiAoZXMtPnFkLT5vcGVyYXRpb24gIT0gQ01EX1VUSUxJVFkpCkBAIC0x NDYyLDYgKzE0ODQsNyBAQCBwb3N0cXVlbF9lbmQoZXhlY3V0aW9uX3N0YXRlICplcywgU1FMRnVu Y3Rpb25DYWNoZVB0ciBmY2FjaGUpCiAKIAlGcmVlUXVlcnlEZXNjKGVzLT5xZCk7CiAJZXMtPnFk ID0gTlVMTDsKKwllcy0+cHJlcF9lc3RhdGUgPSBOVUxMOwogCiAJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZGNvbnRleHQpOwogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3BsYW5jYWNoZS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BsYW5jYWNoZS5vdXQK aW5kZXggMzA0M2RiZmFjMmQuLjU0Nzg0NmIyOTQ1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3BsYW5jYWNoZS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9wbGFuY2FjaGUub3V0CkBAIC00NjAsNCArNDYwLDUyIEBAIE5PVElDRTogIGNyZWF0aW5nIGlu ZGV4IG9uIHBhcnRpdGlvbiBpbnZhbF9kdXJpbmdfcHJ1bmluZ19wMQogZGVhbGxvY2F0ZSBpbnZh bF9kdXJpbmdfcHJ1bmluZ19xOwogZHJvcCB0YWJsZSBpbnZhbF9kdXJpbmdfcHJ1bmluZ19wLCBp bnZhbF9kdXJpbmdfcHJ1bmluZ19zaWduYWw7CiBkcm9wIGZ1bmN0aW9uIGludmFsaWRhdGVfcGxh bmNhY2hlX2Z1bmMsIHN0YWJsZV9wcnVuaW5nX3ZhbDsKKy0tIGV4ZXJjaXNlIHNxbC1mdW5jdGlv biBwbGFuIGNhY2hlIHdoZW4gcmV3cml0ZSBleHBhbmRzIGEgc2luZ2xlIHN0YXRlbWVudAorLS0g aW50byBtdWx0aXBsZSBwbGFubmVkIHN0YXRlbWVudHMuIHRoaXMgZm9yY2VzIGNhY2hlZHBsYW4t PnN0bXRfbGlzdCB0bworLS0gY29udGFpbiBtb3JlIHRoYW4gb25lIGVudHJ5IGFuZCBjaGVja3Mg dGhhdCBleGVjdXRvciBzdGF0ZSBmb3IgdGhlIGZpcnN0CistLSByZXdyaXR0ZW4gc3RhdGVtZW50 IGRvZXMgbm90IGRlc3Ryb3kgc3RhdGUgbmVlZGVkIGJ5IHRoZSBzZWNvbmQgb25lLgorc2V0IHBs YW5fY2FjaGVfbW9kZSA9IGZvcmNlX2dlbmVyaWNfcGxhbjsKK2NyZWF0ZSB0YWJsZSBzcWxmX2Jh c2UoaWQgaW50LCB2YWwgaW50KSBwYXJ0aXRpb24gYnkgbGlzdCAoaWQpOworY3JlYXRlIHRhYmxl IHNxbGZfYmFzZV8xIHBhcnRpdGlvbiBvZiBzcWxmX2Jhc2UgZm9yIHZhbHVlcyBpbiAoMSk7Citj cmVhdGUgdGFibGUgc3FsZl9iYXNlXzIgcGFydGl0aW9uIG9mIHNxbGZfYmFzZSBmb3IgdmFsdWVz IGluICgyKTsKK2NyZWF0ZSB0YWJsZSBzcWxmX2xvZyhpZCBpbnQsIG5vdGUgdGV4dCk7CitpbnNl cnQgaW50byBzcWxmX2Jhc2UgdmFsdWVzICgxLCAxMCk7CitjcmVhdGUgcnVsZSBzcWxmX2Jhc2Vf dXBkX2xvZyBhcworb24gdXBkYXRlIHRvIHNxbGZfYmFzZSBkbyBhbHNvCisJaW5zZXJ0IGludG8g c3FsZl9sb2coaWQsIG5vdGUpCisJdmFsdWVzIChuZXcuaWQsICdsb2dnZWQgYnkgcnVsZScpOwor Y3JlYXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24gc3FsZl9leGVjcHJlcF90ZXN0KGEgaW50LCB2IGlu dCkKK3JldHVybnMgdm9pZAorbGFuZ3VhZ2Ugc3FsCithcyAkJAorCXVwZGF0ZSBzcWxmX2Jhc2Ug c2V0IHZhbCA9IHYgd2hlcmUgaWQgPSBhOworJCQ7CitzZWxlY3Qgc3FsZl9leGVjcHJlcF90ZXN0 KDEsIDIwKTsKKyBzcWxmX2V4ZWNwcmVwX3Rlc3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLQorIAor KDEgcm93KQorCitzZWxlY3Qgc3FsZl9leGVjcHJlcF90ZXN0KDEsIDMwKTsKKyBzcWxmX2V4ZWNw cmVwX3Rlc3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitzZWxlY3QgKiBm cm9tIHNxbGZfYmFzZSBvcmRlciBieSAxOworIGlkIHwgdmFsIAorLS0tLSstLS0tLQorICAxIHwg IDMwCisoMSByb3cpCisKK3NlbGVjdCAqIGZyb20gc3FsZl9sb2cgb3JkZXIgYnkgMTsKKyBpZCB8 ICAgICAgbm90ZSAgICAgIAorLS0tLSstLS0tLS0tLS0tLS0tLS0tCisgIDEgfCBsb2dnZWQgYnkg cnVsZQorICAxIHwgbG9nZ2VkIGJ5IHJ1bGUKKygyIHJvd3MpCisKK2Ryb3AgcnVsZSBzcWxmX2Jh c2VfdXBkX2xvZyBvbiBzcWxmX2Jhc2U7Citkcm9wIHRhYmxlIHNxbGZfYmFzZSwgc3FsZl9sb2c7 Citkcm9wIGZ1bmN0aW9uIHNxbGZfZXhlY3ByZXBfdGVzdDsKIHJlc2V0IHBsYW5fY2FjaGVfbW9k ZTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BsYW5jYWNoZS5zcWwgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9wbGFuY2FjaGUuc3FsCmluZGV4IDZhOGI4Nzg3ZGU2Li41MzJmYTU4 NTE4YiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGxhbmNhY2hlLnNxbAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wbGFuY2FjaGUuc3FsCkBAIC0yNzQsNCArMjc0LDM4IEBA IGRlYWxsb2NhdGUgaW52YWxfZHVyaW5nX3BydW5pbmdfcTsKIGRyb3AgdGFibGUgaW52YWxfZHVy aW5nX3BydW5pbmdfcCwgaW52YWxfZHVyaW5nX3BydW5pbmdfc2lnbmFsOwogZHJvcCBmdW5jdGlv biBpbnZhbGlkYXRlX3BsYW5jYWNoZV9mdW5jLCBzdGFibGVfcHJ1bmluZ192YWw7CiAKKy0tIGV4 ZXJjaXNlIHNxbC1mdW5jdGlvbiBwbGFuIGNhY2hlIHdoZW4gcmV3cml0ZSBleHBhbmRzIGEgc2lu Z2xlIHN0YXRlbWVudAorLS0gaW50byBtdWx0aXBsZSBwbGFubmVkIHN0YXRlbWVudHMuIHRoaXMg Zm9yY2VzIGNhY2hlZHBsYW4tPnN0bXRfbGlzdCB0bworLS0gY29udGFpbiBtb3JlIHRoYW4gb25l IGVudHJ5IGFuZCBjaGVja3MgdGhhdCBleGVjdXRvciBzdGF0ZSBmb3IgdGhlIGZpcnN0CistLSBy ZXdyaXR0ZW4gc3RhdGVtZW50IGRvZXMgbm90IGRlc3Ryb3kgc3RhdGUgbmVlZGVkIGJ5IHRoZSBz ZWNvbmQgb25lLgorCitzZXQgcGxhbl9jYWNoZV9tb2RlID0gZm9yY2VfZ2VuZXJpY19wbGFuOwor CitjcmVhdGUgdGFibGUgc3FsZl9iYXNlKGlkIGludCwgdmFsIGludCkgcGFydGl0aW9uIGJ5IGxp c3QgKGlkKTsKK2NyZWF0ZSB0YWJsZSBzcWxmX2Jhc2VfMSBwYXJ0aXRpb24gb2Ygc3FsZl9iYXNl IGZvciB2YWx1ZXMgaW4gKDEpOworY3JlYXRlIHRhYmxlIHNxbGZfYmFzZV8yIHBhcnRpdGlvbiBv ZiBzcWxmX2Jhc2UgZm9yIHZhbHVlcyBpbiAoMik7CitjcmVhdGUgdGFibGUgc3FsZl9sb2coaWQg aW50LCBub3RlIHRleHQpOworCitpbnNlcnQgaW50byBzcWxmX2Jhc2UgdmFsdWVzICgxLCAxMCk7 CisKK2NyZWF0ZSBydWxlIHNxbGZfYmFzZV91cGRfbG9nIGFzCitvbiB1cGRhdGUgdG8gc3FsZl9i YXNlIGRvIGFsc28KKwlpbnNlcnQgaW50byBzcWxmX2xvZyhpZCwgbm90ZSkKKwl2YWx1ZXMgKG5l dy5pZCwgJ2xvZ2dlZCBieSBydWxlJyk7CisKK2NyZWF0ZSBvciByZXBsYWNlIGZ1bmN0aW9uIHNx bGZfZXhlY3ByZXBfdGVzdChhIGludCwgdiBpbnQpCityZXR1cm5zIHZvaWQKK2xhbmd1YWdlIHNx bAorYXMgJCQKKwl1cGRhdGUgc3FsZl9iYXNlIHNldCB2YWwgPSB2IHdoZXJlIGlkID0gYTsKKyQk OworCitzZWxlY3Qgc3FsZl9leGVjcHJlcF90ZXN0KDEsIDIwKTsKK3NlbGVjdCBzcWxmX2V4ZWNw cmVwX3Rlc3QoMSwgMzApOworc2VsZWN0ICogZnJvbSBzcWxmX2Jhc2Ugb3JkZXIgYnkgMTsKK3Nl bGVjdCAqIGZyb20gc3FsZl9sb2cgb3JkZXIgYnkgMTsKKworZHJvcCBydWxlIHNxbGZfYmFzZV91 cGRfbG9nIG9uIHNxbGZfYmFzZTsKK2Ryb3AgdGFibGUgc3FsZl9iYXNlLCBzcWxmX2xvZzsKK2Ry b3AgZnVuY3Rpb24gc3FsZl9leGVjcHJlcF90ZXN0OwogcmVzZXQgcGxhbl9jYWNoZV9tb2RlOwot LSAKMi40Ny4zCgo= --000000000000863682064de9f4e6--