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 1vKygc-00FR68-2K for pgsql-hackers@arkaria.postgresql.org; Mon, 17 Nov 2025 12:50:26 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vKyga-00EDRK-1a for pgsql-hackers@arkaria.postgresql.org; Mon, 17 Nov 2025 12:50:24 +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 1vKyga-00EDRC-02 for pgsql-hackers@lists.postgresql.org; Mon, 17 Nov 2025 12:50:24 +0000 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vKygX-008GV4-0u for pgsql-hackers@postgresql.org; Mon, 17 Nov 2025 12:50:23 +0000 Received: by mail-pj1-x1029.google.com with SMTP id 98e67ed59e1d1-34374febdefso4506981a91.0 for ; Mon, 17 Nov 2025 04:50:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1763383819; x=1763988619; 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=gVs/MIXu31uP1ptkCCrCDmbsSuFghT+MnGYgRpFeCjk=; b=Yh7AEwXdTnc2kPk+vMlELChSTRKPaeqoIEJiG7LXf+cpRtdP6BJ/vYxjTWBESXuWqA bIhjA+oHEfhtKDoKCAD3LzcUkjIQk10dWlRsKzsTv8ti9zy/izKTmuRpYQRyUc/m/XzW K2gmkclPU0ky19VPGLfJR3XxxJxCcpkuRNdUWELcDtEqhoS6TZ37rOSu1bTEGM+HsNVT qScToC3ZLTb/ZxSahAPpUjbuBgTxMEoK/j0TyS0KCDUuxrJDQeI+90DKsU9B+2zwMjvQ lCCVqu+/Z10Wb53jgmfoKeTLx2XAAr8URHTBBSWju0+JXbMh6SKNhpwSrUJwuoddM/zf ATYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763383819; x=1763988619; 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=gVs/MIXu31uP1ptkCCrCDmbsSuFghT+MnGYgRpFeCjk=; b=SbQOlV+1/udRvb5McaW4/LcgdFXi+EksweJZf5adZrxD4loQiP5YkirG6Qfkd92Stf fVyws+Vz5JmAv0Zhdxmdy1je7w9NVk3u19LJ4hcfMZ6WONwnhEbmIsxRPkUA30hlZgGh AMzKqkohx9qZDa3EbbtFMP09lodLbWHY9Fn6apPswxbfEo33gXrhq/ers6c192EtDvNQ FStWjSEV0tOklrT7kSKLT1kyZ813MeQhldtqg/6ykbFKztulDnwPkmkgm6wbIaO0UG1F 0F37kn9PCJxUa+ITh2Shax3HY5kNwaOi5NUTJX7iz/m3oV+k3qswIHATMSc54JnLcN0D KnGA== X-Forwarded-Encrypted: i=1; AJvYcCXRebinJiQ8ruXzyBhRJISMTSRq9Sxc/AqLRMNCLMMLDxfjO+kBI2FB16mDKze11e2hVTbS/B2Q3U7XoBoR@postgresql.org X-Gm-Message-State: AOJu0YxrYAz9OKxmLDs6UlK3Cg6sEKktr1Npe7d5zMinyf1TFblxVmlM DjHLu5iaNfO/KvPAV3UB9MBQ3n4Z8P4+kD+W+Lfk9ZplJnnYaqReZZIAwp+V94r9TtxOHlXBFga T9ycZjVAErXYevaX1EzTpDGDZMTp4lzY= X-Gm-Gg: ASbGncsp4ihjygjO4XTMxk5ywgGL9XnFZ5FEZz22yQ/PqEEjodbfDxWGa9dcold68D5 QsO4F+gybBYF2zCK474skQhzZTbIq0kJYt0ZDLAlbRd1wUR+23lN97s9NCZH3mpCpdZxMU5e4yI eA3YoK3/vk9dy1Y5mYuIO6od9tMBlOzmJADnwRqR+8M1W46YpT3Hnjb4taIY+2ieoAvTzqm8XME LcP6uqTZpDJEneWdG/sHC+++7N2mJj/BWWt9eRAsq0j6JbcY0yHuOlG/gcv7AFXB/G0jGtR X-Google-Smtp-Source: AGHT+IH7NIPdzddrD/qGzW4Jh4Pk1wOW8jLYMbWu3GoK6ATMjIwWrr5OoXVJvXmVYSnsT5P5wbGiuzraqHctXw1zgWc= X-Received: by 2002:a17:90b:254c:b0:340:b06f:712e with SMTP id 98e67ed59e1d1-343fa62ffb2mr13004115a91.19.1763383819123; Mon, 17 Nov 2025 04:50:19 -0800 (PST) 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: Mon, 17 Nov 2025 21:50:01 +0900 X-Gm-Features: AWmQ_bmCmBH0pRshd8TamhzRh04NfwnJrvZaBiuBk8tGvKWtmk9HOj9eFLnHW8I Message-ID: Subject: Re: generic plans and "initial" pruning To: Tom Lane Cc: 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="000000000000245a530643c9ca87" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000245a530643c9ca87 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Nov 12, 2025 at 11:17=E2=80=AFPM Amit Langote wrote: > The key idea is to avoid taking unnecessary locks when reusing a > cached plan. To achieve that, we need to perform initial partition > pruning during cached plan reuse in plancache.c so that only surviving > partitions are locked. This requires some plumbing to reuse the result > of this "early" pruning during executor startup, because repeating the > pruning logic would be both inefficient and potentially inconsistent > -- what if you get different results the second time? (I don't have > proof that this can happen, but some earlier emails mention the > theoretical risk, so better to be safe.) > > So this patch introduces ExecutorPrep(), which allows executor > metadata such as initial pruning results (valid subplan indexes) and > full unpruned_relids to be computed ahead of execution and reused > later by ExecutorStart() and during QueryDesc setup in parallel > workers using the results shared by the leader. The parallel query bit > was discussed previously at [1], though I didn=E2=80=99t have a solution = I > liked then. > ... > The patch set is structured as follows: > > * Refactor partition pruning initialization (0001): separates the > setup of the pruning state from its execution by introducing > ExecCreatePartitionPruneStates(). This makes the pruning logic easier > to reuse and adds flexibility to do only the setup but skip pruning in > some cases. > > * Introduce ExecutorPrep infrastructure (0002): adds ExecutorPrep() > and ExecPrep as a formal way to perform executor setup ahead of > execution. This enables caching or transferring pruning results and > other metadata without triggering execution. ExecutorStart() can now > consume precomputed prep state from the EState created during > ExecutorPrep(). ExecPrepCleanup() handles cleanup when the plan is > invalidated during prep and so not executed; the state is cleaned up > in the regular ExecutorEnd() path otherwise. In v1 patch, I had not made ExecutorStart() call ExecutorPrep() to do the prep work (creating EState, setting up es_relations, checking permissions) when QueryDesc did not carry the results of ExecutorPrep() from some earlier stage. Instead, InitPlan() would detect that prep was absent and perform the missing setup itself. On second thought it is cleaner for ExecutorStart() to detect the absence of prep and call ExecutorPrep() directly, matching how prep would be created when coming from plancache et al. v2 changes the patch to do that. > * Enable pruning-aware locking in cached / generic plan reuse (0004): > extends GetCachedPlan() and CheckCachedPlan() to call ExecutorPrep() > on each PlannedStmt in the CachedPlan, locking only surviving > partitions. Adds CachedPlanPrepData to pass this through plan cache > APIs and down to execution via QueryDesc. Also reinstates the > firstResultRel locking rule added in 28317de72 but later lost due to > revert of the earlier pruning patch, to ensure correctness when all > target partitions are pruned. Looking at the changes to executor/function.c, I also noticed that I had mistakenly allocated the ExecutorPrep state in SQLFunctionCache.fcontext whereas the correct context for execution related state is SQLFunctionCache.subcontext. In the updated patch, I've made postquel_start() reparent the prep EState's es_query_cxt to subcontext from fcontext. I also did not have a test case that exercised cached plan reuse for SQL functions, so I added one. I split the function.c's GetCachedPlan() + CachedPlanPrepData plumbing into a new patch 0005 so it can be reviewed separately, since it is the only non-mechanical call-site change. > Benchmark results: > > echo "plan_cache_mode =3D force_generic_plan" >> $PGDATA/postgresql.conf > for p in 32 64 128 256 512 1024; do pgbench -i --partitions=3D$p > > /dev/null 2>&1; echo -ne "$p\t"; pgbench -n -S -T10 -Mprepared | grep > tps; done > > Master > > 32 tps =3D 23841.822407 (without initial connection time) > 64 tps =3D 21578.619816 (without initial connection time) > 128 tps =3D 18090.500707 (without initial connection time) > 256 tps =3D 14152.248201 (without initial connection time) > 512 tps =3D 9432.708423 (without initial connection time) > 1024 tps =3D 5873.696475 (without initial connection time) > > Patched > > 32 tps =3D 24724.245798 (without initial connection time) > 64 tps =3D 24858.206407 (without initial connection time) > 128 tps =3D 24652.655269 (without initial connection time) > 256 tps =3D 23656.756615 (without initial connection time) > 512 tps =3D 22299.865769 (without initial connection time) > 1024 tps =3D 21911.704317 (without initial connection time) Re-ran to include 0 partition case and more partitions than 1024: echo "plan_cache_mode =3D force_generic_plan" >> $PGDATA/postgresql.conf for p in 0 8 16 32 64 128 256 512 1024 2048 4096; do pgbench -i --partitions=3D$p > /dev/null 2>&1; echo -ne "$p\t"; pgbench -n -S -T10 -Mprepared | grep tps; done Master 0 tps =3D 23600.068719 (without initial connection time) 8 tps =3D 22548.439906 (without initial connection time) 16 tps =3D 22807.337363 (without initial connection time) 32 tps =3D 22837.789996 (without initial connection time) 64 tps =3D 22915.846820 (without initial connection time) 128 tps =3D 22958.472655 (without initial connection time) 256 tps =3D 22432.432730 (without initial connection time) 512 tps =3D 20327.618690 (without initial connection time) 1024 tps =3D 20554.932475 (without initial connection time) 2048 tps =3D 19947.061061 (without initial connection time) 4096 tps =3D 17294.369829 (without initial connection time) Patched 0 tps =3D 23869.906654 (without initial connection time) 8 tps =3D 22682.498914 (without initial connection time) 16 tps =3D 22714.445711 (without initial connection time) 32 tps =3D 21653.589371 (without initial connection time) 64 tps =3D 20571.267545 (without initial connection time) 128 tps =3D 17138.088269 (without initial connection time) 256 tps =3D 13027.168426 (without initial connection time) 512 tps =3D 8689.486966 (without initial connection time) 1024 tps =3D 5450.525617 (without initial connection time) 2048 tps =3D 3034.383108 (without initial connection time) 4096 tps =3D 1560.110609 (without initial connection time) Tabular format (+ve pct_change means patched better) partitions master patched pct_change ---------------------------------------------------- 0 23869.91 23600.07 -1.1% 8 22682.50 22548.44 -0.6% 16 22714.45 22807.34 +0.4% 32 21653.59 22837.79 +5.5% 64 20571.27 22915.85 +11.4% 128 17138.09 22958.47 +34.0% 256 13027.17 22432.43 +72.2% 512 8689.49 20327.62 +133.9% 1024 5450.53 20554.93 +277.1% 2048 3034.38 19947.06 +557.4% 4096 1560.11 17294.37 +1008.5% I also did some runs for custom plans. The custom plan path should behave about the same on master and patched since the early ExecutorPrep() business only applies to generic plan reuse cases. echo "plan_cache_mode =3D force_custom_plan" >> $PGDATA/postgresql.conf for p in 0 8 16 32 64 128 256 512 1024 2048 4096; do pgbench -i --partitions=3D$p > /dev/null 2>&1; echo -ne "$p\t"; pgbench -n -S -T10 -Mprepared | grep tps; done Master pgbench -n -S -T10 -Mprepared | grep tps; done 0 tps =3D 22346.419557 (without initial connection time) 8 tps =3D 20959.115560 (without initial connection time) 16 tps =3D 21390.573290 (without initial connection time) 32 tps =3D 21358.292393 (without initial connection time) 64 tps =3D 21288.742635 (without initial connection time) 128 tps =3D 21167.721447 (without initial connection time) 256 tps =3D 21256.618661 (without initial connection time) 512 tps =3D 19401.261197 (without initial connection time) 1024 tps =3D 19169.135145 (without initial connection time) 2048 tps =3D 19504.102179 (without initial connection time) 4096 tps =3D 18880.855783 (without initial connection time) Patched 0 tps =3D 22852.634752 (without initial connection time) 8 tps =3D 21596.432690 (without initial connection time) 16 tps =3D 21428.779996 (without initial connection time) 32 tps =3D 20629.225272 (without initial connection time) 64 tps =3D 21301.644733 (without initial connection time) 128 tps =3D 21098.543942 (without initial connection time) 256 tps =3D 21394.364662 (without initial connection time) 512 tps =3D 19475.152170 (without initial connection time) 1024 tps =3D 19585.768438 (without initial connection time) 2048 tps =3D 19810.211969 (without initial connection time) 4096 tps =3D 19160.981608 (without initial connection time) In tabular format: partitions master patched pct_change ---------------------------------------------------- 0 22346.42 22852.63 +2.3% 8 20959.12 21596.43 +3.0% 16 21390.57 21428.78 +0.2% 32 21358.29 20629.23 -3.4% 64 21288.74 21301.64 +0.1% 128 21167.72 21098.54 -0.3% 256 21256.62 21394.36 +0.6% 512 19401.26 19475.15 +0.4% 1024 19169.14 19585.77 +2.2% 2048 19504.10 19810.21 +1.6% 4096 18880.86 19160.98 +1.5% Numbers look within noise range as expected. --=20 Thanks, Amit Langote --000000000000245a530643c9ca87 Content-Type: application/octet-stream; name="v2-0005-Make-SQL-function-executor-track-ExecutorPrep-sta.patch" Content-Disposition: attachment; filename="v2-0005-Make-SQL-function-executor-track-ExecutorPrep-sta.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mi35318g0 RnJvbSBlZWY4ZDFhZjQ2Y2E4ZGVlZmJmOGViOTU0MjhkMzdmYzkwMGEwOTQ0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IE1vbiwgMTcgTm92IDIwMjUgMTc6NDA6MjYgKzA5MDAKU3ViamVjdDogW1BBVENIIHYy IDUvNV0gTWFrZSBTUUwgZnVuY3Rpb24gZXhlY3V0b3IgdHJhY2sgRXhlY3V0b3JQcmVwIHN0YXRl CgpFeHRlbmQgdGhlIFNRTCBmdW5jdGlvbiBleGVjdXRvciB0byB1c2UgdGhlIEV4ZWN1dG9yUHJl cCByZXN1bHRzCnJldHVybmVkIGJ5IEdldENhY2hlZFBsYW4oKS4gIGluaXRfZXhlY3V0aW9uX3N0 YXRlKCkgbm93IHBhc3NlcyBhCkNhY2hlZFBsYW5QcmVwRGF0YSB0byBHZXRDYWNoZWRQbGFuKCkg YW5kIHN0b3JlcyB0aGUgcGVyIHN0YXRlbWVudApFeGVjUHJlcCBwb2ludGVycyBpbiB0aGUgZXhl Y3V0aW9uX3N0YXRlIG5vZGVzLgoKQXQgZXhlY3V0aW9uIHRpbWUsIHBvc3RxdWVsX3N0YXJ0KCkg cmVwYXJlbnRzIHRoZSBwcmVwIGVzdGF0ZSdzCmVzX3F1ZXJ5X2N4dCB1bmRlciB0aGUgZnVuY3Rp b24ncyBzdWJjb250ZXh0IHNvIHRoYXQgcHJlcCBzdGF0ZQpmb2xsb3dzIHRoZSB1c3VhbCBwZXIg Y2FsbCBjb250ZXh0IGhpZXJhcmNoeS4KClRoaXMgYWxsb3dzIFNRTCBsYW5ndWFnZSBmdW5jdGlv bnMgdG8gcGFydGljaXBhdGUgaW4gdGhlIHNhbWUKRXhlY3V0b3JQcmVwIG1hY2hpbmVyeSBhcyBv dGhlciBwbGFuIGNhY2hlIHVzZXJzLCB3aGljaCBhIGxhdGVyCnBhdGNoIHdpbGwgdXNlIHRvIHN1 cHBvcnQgcHJ1bmluZyBhd2FyZSBsb2NraW5nLgoKQWRkIGEgcmVncmVzc2lvbiB0ZXN0IHdoZXJl IHJ1bGUgcmV3cml0ZSBleHBhbmRzIGEgc2luZ2xlIFVQREFURQppbnRvIG11bHRpcGxlIFBsYW5u ZWRTdG10cywgZXhlcmNpc2luZyB0aGUgU1FMIGZ1bmN0aW9uIHBsYW4gY2FjaGUKYW5kIHRoZSBn ZW5lcmljIHBsYW4gcmV1c2UgcGF0aCB0aGF0IG5vdyBpbnZva2VzIEV4ZWN1dG9yUHJlcC4KLS0t CiBzcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMuYyAgICAgICAgfCAzMyArKysrKysrKysr KysrKysrKysrKysrKy0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BsYW5jYWNoZS5vdXQg fCAzMSArKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGxhbmNh Y2hlLnNxbCAgICAgIHwgMjkgKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2Vk LCA5MSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25z LmMKaW5kZXggNjMzMzEwYzVmNWIuLmVkNzM1MmZjZTYxIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9mdW5jdGlvbnMuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlv bnMuYwpAQCAtNzIsNiArNzIsNyBAQCB0eXBlZGVmIHN0cnVjdCBleGVjdXRpb25fc3RhdGUKIAli b29sCQlzZXRzUmVzdWx0OwkJLyogdHJ1ZSBpZiB0aGlzIHF1ZXJ5IHByb2R1Y2VzIGZ1bmMncyBy ZXN1bHQgKi8KIAlib29sCQlsYXp5RXZhbDsJCS8qIHRydWUgaWYgc2hvdWxkIGZldGNoIG9uZSBy b3cgYXQgYSB0aW1lICovCiAJUGxhbm5lZFN0bXQgKnN0bXQ7CQkJLyogcGxhbiBmb3IgdGhpcyBx dWVyeSAqLworCUV4ZWNQcmVwICAgKnByZXA7CQkJLyogRXhlY3V0b3JQcmVwKCkgb3V0cHV0IGZv ciB0aGlzIHBsYW4gKi8KIAlRdWVyeURlc2MgICpxZDsJCQkJLyogbnVsbCB1bmxlc3Mgc3RhdHVz ID09IFJVTiAqLwogfSBleGVjdXRpb25fc3RhdGU7CiAKQEAgLTY1Nyw2ICs2NTgsOCBAQCBpbml0 X2V4ZWN1dGlvbl9zdGF0ZShTUUxGdW5jdGlvbkNhY2hlUHRyIGZjYWNoZSkKIAlleGVjdXRpb25f c3RhdGUgKmxhc3R0YWdlcyA9IE5VTEw7CiAJaW50CQkJbnN0bXRzOwogCUxpc3RDZWxsICAgKmxj OworCUNhY2hlZFBsYW5QcmVwRGF0YSBjcHJlcCA9IHswfTsKKwlpbnQJCQlpOwogCiAJLyoKIAkg KiBDbGVhbiB1cCBhZnRlciBwcmV2aW91cyBxdWVyeSwgaWYgdGhlcmUgd2FzIG9uZS4KQEAgLTY5 NSwxMCArNjk4LDIwIEBAIGluaXRfZXhlY3V0aW9uX3N0YXRlKFNRTEZ1bmN0aW9uQ2FjaGVQdHIg ZmNhY2hlKQogCSAqIEN1cnJlbnRSZXNvdXJjZU93bmVyIHdpbGwgYmUgdGhlIHNhbWUgd2hlbiBT aHV0ZG93blNRTEZ1bmN0aW9uIHJ1bnMuKQogCSAqLwogCWZjYWNoZS0+Y293bmVyID0gQ3VycmVu dFJlc291cmNlT3duZXI7CisKKwkvKgorCSAqIEhhdmUgRXhlY3V0b3JQcmVwKCkgYWxsb2NhdGUg dW5kZXIgZmNhY2hlLT5mY29udGV4dC4gIFRoZSBwcmVwCisJICogRVN0YXRlcyBpdCBjcmVhdGVz IHdpbGwgaW5pdGlhbGx5IGxpdmUgdGhlcmU7IHBvc3RxdWVsX3N0YXJ0KCkKKwkgKiB3aWxsIGxh dGVyIHJlcGFyZW50IHRoZWlyIGVzX3F1ZXJ5X2N4dCBpbnRvIGZjYWNoZS0+c3ViY29udGV4dAor CSAqIHdoZW4gdXNpbmcgdGhlbSBmb3IgZXhlY3V0aW9uLgorCSAqLworCWNwcmVwLmNvbnRleHQg PSBmY2FjaGUtPmZjb250ZXh0OworCWNwcmVwLm93bmVyID0gZmNhY2hlLT5jb3duZXI7CiAJZmNh Y2hlLT5jcGxhbiA9IEdldENhY2hlZFBsYW4ocGxhbnNvdXJjZSwKIAkJCQkJCQkJICBmY2FjaGUt PnBhcmFtTEksCiAJCQkJCQkJCSAgZmNhY2hlLT5jb3duZXIsCi0JCQkJCQkJCSAgTlVMTCk7CisJ CQkJCQkJCSAgTlVMTCwKKwkJCQkJCQkJICAmY3ByZXApOwogCiAJLyoKIAkgKiBJZiBuZWNlc3Nh cnksIG1ha2UgZXNhcnJheVtdIGJpZ2dlciB0byBob2xkIHRoZSBuZWVkZWQgc3RhdGUuCkBAIC03 MTksOSArNzMyLDEyIEBAIGluaXRfZXhlY3V0aW9uX3N0YXRlKFNRTEZ1bmN0aW9uQ2FjaGVQdHIg ZmNhY2hlKQogCS8qCiAJICogQnVpbGQgZXhlY3V0aW9uX3N0YXRlIGxpc3QgdG8gbWF0Y2ggdGhl IG51bWJlciBvZiBjb250YWluZWQgcGxhbnMuCiAJICovCisJaSA9IDA7CiAJZm9yZWFjaChsYywg ZmNhY2hlLT5jcGxhbi0+c3RtdF9saXN0KQogCXsKIAkJUGxhbm5lZFN0bXQgKnN0bXQgPSBsZmly c3Rfbm9kZShQbGFubmVkU3RtdCwgbGMpOworCQlFeGVjUHJlcCAqcHJlcCA9IGNwcmVwLnByZXBf bGlzdCA/IGxpc3RfbnRoKGNwcmVwLnByZXBfbGlzdCwgaSsrKSA6CisJCQlOVUxMOwogCQlleGVj dXRpb25fc3RhdGUgKm5ld2VzOwogCiAJCS8qCkBAIC03NjMsNiArNzc5LDcgQEAgaW5pdF9leGVj dXRpb25fc3RhdGUoU1FMRnVuY3Rpb25DYWNoZVB0ciBmY2FjaGUpCiAJCW5ld2VzLT5zZXRzUmVz dWx0ID0gZmFsc2U7CS8qIG1pZ2h0IGNoYW5nZSBiZWxvdyAqLwogCQluZXdlcy0+bGF6eUV2YWwg PSBmYWxzZTsJLyogbWlnaHQgY2hhbmdlIGJlbG93ICovCiAJCW5ld2VzLT5zdG10ID0gc3RtdDsK KwkJbmV3ZXMtPnByZXAgPSBwcmVwOwogCQluZXdlcy0+cWQgPSBOVUxMOwogCiAJCWlmIChzdG10 LT5jYW5TZXRUYWcpCkBAIC0xMzYxLDggKzEzNzgsMjAgQEAgcG9zdHF1ZWxfc3RhcnQoZXhlY3V0 aW9uX3N0YXRlICplcywgU1FMRnVuY3Rpb25DYWNoZVB0ciBmY2FjaGUpCiAJZWxzZQogCQlkZXN0 ID0gTm9uZV9SZWNlaXZlcjsKIAorCWlmIChlcy0+cHJlcCkKKwl7CisJCS8qCisJCSAqIFByZXAg RVN0YXRlcyB3ZXJlIGJ1aWx0IHVuZGVyIGZjYWNoZS0+ZmNvbnRleHQuICBGb3IgZXhlY3V0aW9u LAorCQkgKiBtYWtlIHRoZWlyIGVzX3F1ZXJ5X2N4dCBhIGNoaWxkIG9mIGZjYWNoZS0+c3ViY29u dGV4dCBzbyB0aGV5CisJCSAqIGZvbGxvdyB0aGUgdXN1YWwgcGVyIGNhbGwgbGlmZXRpbWUuCisJ CSAqLworCQlFU3RhdGUgKnByZXBfZXN0YXRlID0gZXMtPnByZXAtPnByZXBfZXN0YXRlOworCisJ CU1lbW9yeUNvbnRleHRTZXRQYXJlbnQocHJlcF9lc3RhdGUtPmVzX3F1ZXJ5X2N4dCwgZmNhY2hl LT5zdWJjb250ZXh0KTsKKwl9CisKIAllcy0+cWQgPSBDcmVhdGVRdWVyeURlc2MoZXMtPnN0bXQs Ci0JCQkJCQkJIE5VTEwsCisJCQkJCQkJIGVzLT5wcmVwLAogCQkJCQkJCSBmY2FjaGUtPmZ1bmMt PnNyYywKIAkJCQkJCQkgR2V0QWN0aXZlU25hcHNob3QoKSwKIAkJCQkJCQkgSW52YWxpZFNuYXBz aG90LApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wbGFuY2FjaGUub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wbGFuY2FjaGUub3V0CmluZGV4IDRlNTkxODgx OTZjLi44YzY4NjkxZGY5MSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9w bGFuY2FjaGUub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGxhbmNhY2hlLm91 dApAQCAtMzk4LDMgKzM5OCwzNCBAQCBzZWxlY3QgbmFtZSwgZ2VuZXJpY19wbGFucywgY3VzdG9t X3BsYW5zIGZyb20gcGdfcHJlcGFyZWRfc3RhdGVtZW50cwogKDEgcm93KQogCiBkcm9wIHRhYmxl IHRlc3RfbW9kZTsKKy0tIGV4ZXJjaXNlIHNxbC1mdW5jdGlvbiBwbGFuIGNhY2hlIHdoZW4gcmV3 cml0ZSBleHBhbmRzIGEgc2luZ2xlIHN0YXRlbWVudAorLS0gaW50byBtdWx0aXBsZSBwbGFubmVk IHN0YXRlbWVudHMuIHRoaXMgZm9yY2VzIGNhY2hlZHBsYW4tPnN0bXRfbGlzdCB0bworLS0gY29u dGFpbiBtb3JlIHRoYW4gb25lIGVudHJ5IGFuZCBjaGVja3MgdGhhdCBleGVjdXRvciBzdGF0ZSBm b3IgdGhlIGZpcnN0CistLSByZXdyaXR0ZW4gc3RhdGVtZW50IGRvZXMgbm90IGRlc3Ryb3kgc3Rh dGUgbmVlZGVkIGJ5IHRoZSBzZWNvbmQgb25lLgorc2V0IHBsYW5fY2FjaGVfbW9kZSA9IGZvcmNl X2dlbmVyaWNfcGxhbjsKK2NyZWF0ZSB0YWJsZSBzcWxmX2Jhc2UoaWQgaW50LCB2YWwgaW50KTsK K2NyZWF0ZSB0YWJsZSBzcWxmX2xvZyhpZCBpbnQsIG5vdGUgdGV4dCk7CitpbnNlcnQgaW50byBz cWxmX2Jhc2UgdmFsdWVzICgxLCAxMCk7CitjcmVhdGUgcnVsZSBzcWxmX2Jhc2VfdXBkX2xvZyBh cworb24gdXBkYXRlIHRvIHNxbGZfYmFzZSBkbyBhbHNvCisgICAgaW5zZXJ0IGludG8gc3FsZl9s b2coaWQsIG5vdGUpCisgICAgdmFsdWVzIChuZXcuaWQsICdsb2dnZWQgYnkgcnVsZScpOworY3Jl YXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24gc3FsZl9leGVjcHJlcF90ZXN0KGEgaW50LCB2IGludCkK K3JldHVybnMgdm9pZAorbGFuZ3VhZ2Ugc3FsCithcyAkJAorICAgIHVwZGF0ZSBzcWxmX2Jhc2Ug c2V0IHZhbCA9IHYgd2hlcmUgaWQgPSBhOworJCQ7CitzZWxlY3Qgc3FsZl9leGVjcHJlcF90ZXN0 KDEsIDIwKTsKKyBzcWxmX2V4ZWNwcmVwX3Rlc3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLQorIAor KDEgcm93KQorCitzZWxlY3Qgc3FsZl9leGVjcHJlcF90ZXN0KDEsIDMwKTsKKyBzcWxmX2V4ZWNw cmVwX3Rlc3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCityZXNldCBwbGFu X2NhY2hlX21vZGU7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wbGFuY2FjaGUu c3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGxhbmNhY2hlLnNxbAppbmRleCA0YjJmMTFkY2M2 NC4uNTZlYmJiZGVjZDIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BsYW5jYWNo ZS5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGxhbmNhY2hlLnNxbApAQCAtMjIzLDMg KzIyMywzMiBAQCBzZWxlY3QgbmFtZSwgZ2VuZXJpY19wbGFucywgY3VzdG9tX3BsYW5zIGZyb20g cGdfcHJlcGFyZWRfc3RhdGVtZW50cwogICB3aGVyZSAgbmFtZSA9ICd0ZXN0X21vZGVfcHAnOwog CiBkcm9wIHRhYmxlIHRlc3RfbW9kZTsKKworLS0gZXhlcmNpc2Ugc3FsLWZ1bmN0aW9uIHBsYW4g Y2FjaGUgd2hlbiByZXdyaXRlIGV4cGFuZHMgYSBzaW5nbGUgc3RhdGVtZW50CistLSBpbnRvIG11 bHRpcGxlIHBsYW5uZWQgc3RhdGVtZW50cy4gdGhpcyBmb3JjZXMgY2FjaGVkcGxhbi0+c3RtdF9s aXN0IHRvCistLSBjb250YWluIG1vcmUgdGhhbiBvbmUgZW50cnkgYW5kIGNoZWNrcyB0aGF0IGV4 ZWN1dG9yIHN0YXRlIGZvciB0aGUgZmlyc3QKKy0tIHJld3JpdHRlbiBzdGF0ZW1lbnQgZG9lcyBu b3QgZGVzdHJveSBzdGF0ZSBuZWVkZWQgYnkgdGhlIHNlY29uZCBvbmUuCisKK3NldCBwbGFuX2Nh Y2hlX21vZGUgPSBmb3JjZV9nZW5lcmljX3BsYW47CisKK2NyZWF0ZSB0YWJsZSBzcWxmX2Jhc2Uo aWQgaW50LCB2YWwgaW50KTsKK2NyZWF0ZSB0YWJsZSBzcWxmX2xvZyhpZCBpbnQsIG5vdGUgdGV4 dCk7CisKK2luc2VydCBpbnRvIHNxbGZfYmFzZSB2YWx1ZXMgKDEsIDEwKTsKKworY3JlYXRlIHJ1 bGUgc3FsZl9iYXNlX3VwZF9sb2cgYXMKK29uIHVwZGF0ZSB0byBzcWxmX2Jhc2UgZG8gYWxzbwor ICAgIGluc2VydCBpbnRvIHNxbGZfbG9nKGlkLCBub3RlKQorICAgIHZhbHVlcyAobmV3LmlkLCAn bG9nZ2VkIGJ5IHJ1bGUnKTsKKworY3JlYXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24gc3FsZl9leGVj cHJlcF90ZXN0KGEgaW50LCB2IGludCkKK3JldHVybnMgdm9pZAorbGFuZ3VhZ2Ugc3FsCithcyAk JAorICAgIHVwZGF0ZSBzcWxmX2Jhc2Ugc2V0IHZhbCA9IHYgd2hlcmUgaWQgPSBhOworJCQ7CisK K3NlbGVjdCBzcWxmX2V4ZWNwcmVwX3Rlc3QoMSwgMjApOworc2VsZWN0IHNxbGZfZXhlY3ByZXBf dGVzdCgxLCAzMCk7CisKK3Jlc2V0IHBsYW5fY2FjaGVfbW9kZTsKLS0gCjIuNDcuMwoK --000000000000245a530643c9ca87 Content-Type: application/octet-stream; name="v2-0001-Refactor-partition-pruning-initialization-for-cla.patch" Content-Disposition: attachment; filename="v2-0001-Refactor-partition-pruning-initialization-for-cla.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mi35318q4 RnJvbSAyNDNkNDA3ZGU4NmIwYTczYjliZDhjOGRiYzU0MWY2MzBlYjMzNzQ3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMTEgTm92IDIwMjUgMjE6MTg6MjQgKzA5MDAKU3ViamVjdDogW1BBVENIIHYy IDEvNV0gUmVmYWN0b3IgcGFydGl0aW9uIHBydW5pbmcgaW5pdGlhbGl6YXRpb24gZm9yIGNsYXJp dHkKIGFuZCBtb2R1bGFyaXR5CgpNb3ZlIHRoZSBjcmVhdGlvbiBvZiBQYXJ0aXRpb25QcnVuZVN0 YXRlIHN0cnVjdHVyZXMgb3V0IG9mCkV4ZWNEb0luaXRpYWxQcnVuaW5nKCkgaW50byBhIG5ldyBF eGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZXMoKQpmdW5jdGlvbi4gVGhpcyBzZXBhcmF0ZXMg dGhlIHNldHVwIG9mIHBydW5pbmcgc3RhdGUgZnJvbSB0aGUgZXhlY3V0aW9uCm9mIGluaXRpYWwg cHJ1bmluZyBsb2dpYywgbWFraW5nIHRoZSBjb2RlIGNsZWFyZXIgYW5kIGVhc2llciB0bwptYWlu dGFpbi4KCkFsc28gc2ltcGxpZnkgaGFuZGxpbmcgb2YgdW5wcnVuZWQgcmVsaWRzIGJ5IG1vdmlu ZyByZXNwb25zaWJpbGl0eQpmb3IgcmVjb3JkaW5nIHRoZW0gaW4gRVN0YXRlIGludG8gQ3JlYXRl UGFydGl0aW9uUHJ1bmVTdGF0ZSgpLAphdm9pZGluZyB0aGUgbmVlZCB0byBwYXNzIGFsbF9sZWFm cGFydF9ydGlzIGFzIGFuIG91dCBwYXJhbWV0ZXIuCgpUaGlzIHJlZmFjdG9yaW5nIGFsbG93cyBj YWxsZXJzIHRvIHJldXNlIHRoZSBwcnVuaW5nIHNldHVwIGxvZ2ljCndpdGhvdXQgYWx3YXlzIHRy aWdnZXJpbmcgcHJ1bmluZywgYSBjYXBhYmlsaXR5IHVzZWZ1bCBmb3IgZnV0dXJlIHVzZQpjYXNl cyB0aGF0IG1heSBvbmx5IG5lZWQgbWV0YWRhdGEgaW5pdGlhbGl6YXRpb24uCi0tLQogc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jIHwgNzAgKysrKysrKysrKysrKysrKystLS0t LS0tLS0tLQogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIHwgIDEgKwogMiBm aWxlcyBjaGFuZ2VkLCA0MyBpbnNlcnRpb25zKCspLCAyOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjUGFydGl0aW9uLmMKaW5kZXggYWExMmU5YWQyZWEuLjg4YjE1MGM4ZDc3IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKKysrIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCkBAIC0xODIsOCArMTgyLDcgQEAgc3Rh dGljIGNoYXIgKkV4ZWNCdWlsZFNsb3RQYXJ0aXRpb25LZXlEZXNjcmlwdGlvbihSZWxhdGlvbiBy ZWwsCiBzdGF0aWMgTGlzdCAqYWRqdXN0X3BhcnRpdGlvbl9jb2xub3MoTGlzdCAqY29sbm9zLCBS ZXN1bHRSZWxJbmZvICpsZWFmX3BhcnRfcnJpKTsKIHN0YXRpYyBMaXN0ICphZGp1c3RfcGFydGl0 aW9uX2NvbG5vc191c2luZ19tYXAoTGlzdCAqY29sbm9zLCBBdHRyTWFwICphdHRyTWFwKTsKIHN0 YXRpYyBQYXJ0aXRpb25QcnVuZVN0YXRlICpDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKEVTdGF0 ZSAqZXN0YXRlLAotCQkJCQkJCQkJCQkJCSAgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8s Ci0JCQkJCQkJCQkJCQkJICBCaXRtYXBzZXQgKiphbGxfbGVhZnBhcnRfcnRpcyk7CisJCQkJCQkJ CQkJCQkJICBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbyk7CiBzdGF0aWMgdm9pZCBJbml0 UGFydGl0aW9uUHJ1bmVDb250ZXh0KFBhcnRpdGlvblBydW5lQ29udGV4dCAqY29udGV4dCwKIAkJ CQkJCQkJCSAgTGlzdCAqcHJ1bmluZ19zdGVwcywKIAkJCQkJCQkJCSAgUGFydGl0aW9uRGVzYyBw YXJ0ZGVzYywKQEAgLTE3NzIsNiArMTc3MSw5IEBAIGFkanVzdF9wYXJ0aXRpb25fY29sbm9zX3Vz aW5nX21hcChMaXN0ICpjb2xub3MsIEF0dHJNYXAgKmF0dHJNYXApCiAgKgogICogRnVuY3Rpb25z OgogICoKKyAqIEV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlcworICoJCUNyZWF0ZSBQYXJ0 aXRpb25QcnVuZVN0YXRlIGZvciBhbGwgUGFydGl0aW9uUHJ1bmVJbmZvcyBpbiB0aGUgRVN0YXRl CisgKgogICogRXhlY0RvSW5pdGlhbFBydW5pbmc6CiAgKgkJUGVyZm9ybSBydW50aW1lICJpbml0 aWFsIiBwcnVuaW5nLCBpZiBuZWNlc3NhcnksIHRvIGRldGVybWluZSB0aGUgc2V0CiAgKgkJb2Yg Y2hpbGQgc3Vibm9kZXMgdGhhdCBuZWVkIHRvIGJlIGluaXRpYWxpemVkIGR1cmluZyBFeGVjSW5p dE5vZGUoKSBmb3IKQEAgLTE3OTYsNiArMTc5OCwyOSBAQCBhZGp1c3RfcGFydGl0aW9uX2NvbG5v c191c2luZ19tYXAoTGlzdCAqY29sbm9zLCBBdHRyTWFwICphdHRyTWFwKQogICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiAgKi8KIAorLyoKKyAqIEV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlcworICoK KyAqIENyZWF0ZSBhIFBhcnRpdGlvblBydW5lU3RhdGUgZm9yIGVhY2ggUGFydGl0aW9uUHJ1bmVJ bmZvIGluIHRoZSBlc3RhdGUsCisgKiBhbmQgc2F2ZSB0aGVtIGluIGVzdGF0ZS0+ZXNfcGFydF9w cnVuZV9zdGF0ZXMuIFRoaXMgc2V0dXAgaXMgcmVxdWlyZWQKKyAqIGJlZm9yZSBhbnkgaW5pdGlh bCBvciBydW50aW1lIHBydW5pbmcgY2FuIG9jY3VyLgorICovCit2b2lkCitFeGVjQ3JlYXRlUGFy dGl0aW9uUHJ1bmVTdGF0ZXMoRVN0YXRlICplc3RhdGUpCit7CisJTGlzdENlbGwgICAqbGM7CisK Kwlmb3JlYWNoKGxjLCBlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfaW5mb3MpCisJeworCQlQYXJ0aXRp b25QcnVuZUluZm8gKnBydW5laW5mbyA9IGxmaXJzdF9ub2RlKFBhcnRpdGlvblBydW5lSW5mbywg bGMpOworCQlQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlOworCisJCS8qIENyZWF0ZSBh bmQgc2F2ZSB0aGUgUGFydGl0aW9uUHJ1bmVTdGF0ZS4gKi8KKwkJcHJ1bmVzdGF0ZSA9IENyZWF0 ZVBhcnRpdGlvblBydW5lU3RhdGUoZXN0YXRlLCBwcnVuZWluZm8pOworCQllc3RhdGUtPmVzX3Bh cnRfcHJ1bmVfc3RhdGVzID0gbGFwcGVuZChlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfc3RhdGVzLAor CQkJCQkJCQkJCQkgICBwcnVuZXN0YXRlKTsKKwl9Cit9CiAKIC8qCiAgKiBFeGVjRG9Jbml0aWFs UHJ1bmluZwpAQCAtMTgwMywxMSArMTgyOCwxMSBAQCBhZGp1c3RfcGFydGl0aW9uX2NvbG5vc191 c2luZ19tYXAoTGlzdCAqY29sbm9zLCBBdHRyTWFwICphdHRyTWFwKQogICoJCW9mIGNoaWxkIHN1 Ym5vZGVzIHRoYXQgbmVlZCB0byBiZSBpbml0aWFsaXplZCBkdXJpbmcgRXhlY0luaXROb2RlKCkg Zm9yCiAgKgkJcGxhbiBub2RlcyB0aGF0IHN1cHBvcnQgcGFydGl0aW9uIHBydW5pbmcuCiAgKgot ICogVGhpcyBmdW5jdGlvbiBpdGVyYXRlcyBvdmVyIGVhY2ggUGFydGl0aW9uUHJ1bmVJbmZvIGVu dHJ5IGluCi0gKiBlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfaW5mb3MuIEZvciBlYWNoIGVudHJ5LCBp dCBjcmVhdGVzIGEgUGFydGl0aW9uUHJ1bmVTdGF0ZQotICogYW5kIGFkZHMgaXQgdG8gZXNfcGFy dF9wcnVuZV9zdGF0ZXMuICBFeGVjSW5pdFBhcnRpdGlvbkV4ZWNQcnVuaW5nKCkgYWNjZXNzZXMK KyAqIFRoaXMgZnVuY3Rpb24gaXRlcmF0ZXMgb3ZlciBlYWNoIFBhcnRpdGlvblBydW5lU3RhdGUg aW4KKyAqIGVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9zdGF0ZXMsIHdoaWNoIG11c3QgaGF2ZSBiZWVu IHBvcHVsYXRlZCBlYXJsaWVyIGJ5CisgKiBFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZXMo KS4gRXhlY0luaXRQYXJ0aXRpb25FeGVjUHJ1bmluZygpIGFjY2Vzc2VzCiAgKiB0aGVzZSBzdGF0 ZXMgdGhyb3VnaCB0aGVpciBjb3JyZXNwb25kaW5nIGluZGV4ZXMgaW4gZXNfcGFydF9wcnVuZV9z dGF0ZXMgYW5kCi0gKiBhc3NpZ24gZWFjaCBzdGF0ZSB0byB0aGUgcGFyZW50IG5vZGUncyBQbGFu U3RhdGUsIGZyb20gd2hlcmUgaXQgd2lsbCBiZSB1c2VkCisgKiBhc3NpZ25zIGVhY2ggc3RhdGUg dG8gdGhlIHBhcmVudCBub2RlJ3MgUGxhblN0YXRlLCBmcm9tIHdoZXJlIGl0IHdpbGwgYmUgdXNl ZAogICogZm9yICJleGVjIiBwcnVuaW5nLgogICoKICAqIElmIGluaXRpYWwgcHJ1bmluZyBzdGVw cyBleGlzdCBmb3IgYSBQYXJ0aXRpb25QcnVuZUluZm8gZW50cnksIHRoaXMgZnVuY3Rpb24KQEAg LTE4MjUsMjAgKzE4NTAsMTMgQEAgRXhlY0RvSW5pdGlhbFBydW5pbmcoRVN0YXRlICplc3RhdGUp CiB7CiAJTGlzdENlbGwgICAqbGM7CiAKLQlmb3JlYWNoKGxjLCBlc3RhdGUtPmVzX3BhcnRfcHJ1 bmVfaW5mb3MpCisJQXNzZXJ0KGVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9yZXN1bHRzID09IE5VTEwp OworCWZvcmVhY2gobGMsIGVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9zdGF0ZXMpCiAJewotCQlQYXJ0 aXRpb25QcnVuZUluZm8gKnBydW5laW5mbyA9IGxmaXJzdF9ub2RlKFBhcnRpdGlvblBydW5lSW5m bywgbGMpOwotCQlQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlOworCQlQYXJ0aXRpb25Q cnVuZVN0YXRlICpwcnVuZXN0YXRlID0gKFBhcnRpdGlvblBydW5lU3RhdGUgKikgbGZpcnN0KGxj KTsKIAkJQml0bWFwc2V0ICAqdmFsaWRzdWJwbGFucyA9IE5VTEw7Ci0JCUJpdG1hcHNldCAgKmFs bF9sZWFmcGFydF9ydGlzID0gTlVMTDsKIAkJQml0bWFwc2V0ICAqdmFsaWRzdWJwbGFuX3J0aXMg PSBOVUxMOwogCi0JCS8qIENyZWF0ZSBhbmQgc2F2ZSB0aGUgUGFydGl0aW9uUHJ1bmVTdGF0ZS4g Ki8KLQkJcHJ1bmVzdGF0ZSA9IENyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoZXN0YXRlLCBwcnVu ZWluZm8sCi0JCQkJCQkJCQkJCSAgICZhbGxfbGVhZnBhcnRfcnRpcyk7Ci0JCWVzdGF0ZS0+ZXNf cGFydF9wcnVuZV9zdGF0ZXMgPSBsYXBwZW5kKGVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9zdGF0ZXMs Ci0JCQkJCQkJCQkJCSAgIHBydW5lc3RhdGUpOwotCiAJCS8qCiAJCSAqIFBlcmZvcm0gaW5pdGlh bCBwcnVuaW5nIHN0ZXBzLCBpZiBhbnksIGFuZCBzYXZlIHRoZSByZXN1bHQKIAkJICogYml0bWFw c2V0IG9yIE5VTEwgYXMgZGVzY3JpYmVkIGluIHRoZSBoZWFkZXIgY29tbWVudC4KQEAgLTE4NDYs OCArMTg2NCw2IEBAIEV4ZWNEb0luaXRpYWxQcnVuaW5nKEVTdGF0ZSAqZXN0YXRlKQogCQlpZiAo cHJ1bmVzdGF0ZS0+ZG9faW5pdGlhbF9wcnVuZSkKIAkJCXZhbGlkc3VicGxhbnMgPSBFeGVjRmlu ZE1hdGNoaW5nU3ViUGxhbnMocHJ1bmVzdGF0ZSwgdHJ1ZSwKIAkJCQkJCQkJCQkJCQkgJnZhbGlk c3VicGxhbl9ydGlzKTsKLQkJZWxzZQotCQkJdmFsaWRzdWJwbGFuX3J0aXMgPSBhbGxfbGVhZnBh cnRfcnRpczsKIAogCQllc3RhdGUtPmVzX3VucHJ1bmVkX3JlbGlkcyA9IGJtc19hZGRfbWVtYmVy cyhlc3RhdGUtPmVzX3VucHJ1bmVkX3JlbGlkcywKIAkJCQkJCQkJCQkJCQkgdmFsaWRzdWJwbGFu X3J0aXMpOwpAQCAtMTk2NSwxNCArMTk4MSwxMiBAQCBFeGVjSW5pdFBhcnRpdGlvbkV4ZWNQcnVu aW5nKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAogICogcGFyZW50IHBsYW4gbm9kZSdzIFBsYW5TdGF0 ZS4KICAqCiAgKiBJZiBpbml0aWFsIHBydW5pbmcgc3RlcHMgYXJlIHRvIGJlIHNraXBwZWQgKGUu Zy4sIGR1cmluZyBFWFBMQUlOCi0gKiAoR0VORVJJQ19QTEFOKSksICphbGxfbGVhZnBhcnRfcnRp cyB3aWxsIGJlIHBvcHVsYXRlZCB3aXRoIHRoZSBSVCBpbmRleGVzIG9mCi0gKiBhbGwgbGVhZiBw YXJ0aXRpb25zIHdob3NlIHNjYW5uaW5nIHN1Ym5vZGUgaXMgaW5jbHVkZWQgaW4gdGhlIHBhcmVu dCBwbGFuCi0gKiBub2RlJ3MgbGlzdCBvZiBjaGlsZCBwbGFucy4gVGhlIGNhbGxlciBtdXN0IGFk ZCB0aGVzZSBSVCBpbmRleGVzIHRvCi0gKiBlc3RhdGUtPmVzX3VucHJ1bmVkX3JlbGlkcy4KKyAq IChHRU5FUklDX1BMQU4pKSwgdGhlIFJUIGluZGV4ZXMgb2YgYWxsIGxlYWYgcGFydGl0aW9ucyB3 aG9zZSBzY2FubmluZworICogc3Vibm9kZSBpcyBpbmNsdWRlZCBpbiB0aGUgcGFyZW50IHBsYW4g bm9kZSdzIGxpc3Qgb2YgY2hpbGQgcGxhbnMgYXJlCisgKiBhZGRlZCB0byBlc3RhdGUtPmVzX3Vu cHJ1bmVkX3JlbGlkcy4KICAqLwogc3RhdGljIFBhcnRpdGlvblBydW5lU3RhdGUgKgotQ3JlYXRl UGFydGl0aW9uUHJ1bmVTdGF0ZShFU3RhdGUgKmVzdGF0ZSwgUGFydGl0aW9uUHJ1bmVJbmZvICpw cnVuZWluZm8sCi0JCQkJCQkgIEJpdG1hcHNldCAqKmFsbF9sZWFmcGFydF9ydGlzKQorQ3JlYXRl UGFydGl0aW9uUHJ1bmVTdGF0ZShFU3RhdGUgKmVzdGF0ZSwgUGFydGl0aW9uUHJ1bmVJbmZvICpw cnVuZWluZm8pCiB7CiAJUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZTsKIAlpbnQJCQlu X3BhcnRfaGllcmFyY2hpZXM7CkBAIC0yMjA2LDggKzIyMjAsOCBAQCBDcmVhdGVQYXJ0aXRpb25Q cnVuZVN0YXRlKEVTdGF0ZSAqZXN0YXRlLCBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbywK IAkJCQkJCQkJCQkJCQkgICBwaW5mby0+ZXhlY3BhcmFtaWRzKTsKIAogCQkJLyoKLQkJCSAqIFJl dHVybiBhbGwgbGVhZiBwYXJ0aXRpb24gaW5kZXhlcyBpZiB3ZSdyZSBza2lwcGluZyBwcnVuaW5n IGluCi0JCQkgKiB0aGUgRVhQTEFJTiAoR0VORVJJQ19QTEFOKSBjYXNlLgorCQkJICogQWRkIGFs bCBsZWFmIHBhcnRpdGlvbiBpbmRleGVzIHRvIGVzX3VucHJ1bmVkX3JlbGlkcyBpZiB3ZSdyZQor CQkJICogc2tpcHBpbmcgcHJ1bmluZyBpbiB0aGUgRVhQTEFJTiAoR0VORVJJQ19QTEFOKSBjYXNl LgogCQkJICovCiAJCQlpZiAocGluZm8tPmluaXRpYWxfcHJ1bmluZ19zdGVwcyAmJiAhcHJ1bmVz dGF0ZS0+ZG9faW5pdGlhbF9wcnVuZSkKIAkJCXsKQEAgLTIyMTksOCArMjIzMyw4IEBAIENyZWF0 ZVBhcnRpdGlvblBydW5lU3RhdGUoRVN0YXRlICplc3RhdGUsIFBhcnRpdGlvblBydW5lSW5mbyAq cHJ1bmVpbmZvLAogCQkJCQlJbmRleAkJcnRpbmRleCA9IHBwcnVuZS0+bGVhZnBhcnRfcnRpX21h cFtwYXJ0X2luZGV4XTsKIAogCQkJCQlpZiAocnRpbmRleCkKLQkJCQkJCSphbGxfbGVhZnBhcnRf cnRpcyA9IGJtc19hZGRfbWVtYmVyKCphbGxfbGVhZnBhcnRfcnRpcywKLQkJCQkJCQkJCQkJCQkJ CXJ0aW5kZXgpOworCQkJCQkJZXN0YXRlLT5lc191bnBydW5lZF9yZWxpZHMgPQorCQkJCQkJCWJt c19hZGRfbWVtYmVyKGVzdGF0ZS0+ZXNfdW5wcnVuZWRfcmVsaWRzLCBydGluZGV4KTsKIAkJCQl9 CiAJCQl9CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24u aCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaAppbmRleCAzYjNmNDZhY2Vk MC4uYmE4Y2M1OTRmYzkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0 aXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmgKQEAgLTEz MCw2ICsxMzAsNyBAQCB0eXBlZGVmIHN0cnVjdCBQYXJ0aXRpb25QcnVuZVN0YXRlCiAJUGFydGl0 aW9uUHJ1bmluZ0RhdGEgKnBhcnRwcnVuZWRhdGFbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKIH0g UGFydGl0aW9uUHJ1bmVTdGF0ZTsKIAorZXh0ZXJuIHZvaWQgRXhlY0NyZWF0ZVBhcnRpdGlvblBy dW5lU3RhdGVzKEVTdGF0ZSAqZXN0YXRlKTsKIGV4dGVybiB2b2lkIEV4ZWNEb0luaXRpYWxQcnVu aW5nKEVTdGF0ZSAqZXN0YXRlKTsKIGV4dGVybiBQYXJ0aXRpb25QcnVuZVN0YXRlICpFeGVjSW5p dFBhcnRpdGlvbkV4ZWNQcnVuaW5nKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAogCQkJCQkJCQkJCQkJ CQkgaW50IG5fdG90YWxfc3VicGxhbnMsCi0tIAoyLjQ3LjMKCg== --000000000000245a530643c9ca87 Content-Type: application/octet-stream; name="v2-0004-Use-pruning-aware-locking-in-cached-plans.patch" Content-Disposition: attachment; filename="v2-0004-Use-pruning-aware-locking-in-cached-plans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mi35318l1 RnJvbSA3NGRjMDc1ZGM4Zjg0NGUwMzZmYzM4ZTAwNWZjNTEyYjZkZDU0YmM5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMTEgTm92IDIwMjUgMjI6MzA6NTIgKzA5MDAKU3ViamVjdDogW1BBVENIIHYy IDQvNV0gVXNlIHBydW5pbmctYXdhcmUgbG9ja2luZyBpbiBjYWNoZWQgcGxhbnMKCkV4dGVuZCBH ZXRDYWNoZWRQbGFuKCkgdG8gcGVyZm9ybSBFeGVjdXRvclByZXAoKSBvbiBlYWNoIHBsYW5uZWQK c3RhdGVtZW50LCBjYXB0dXJpbmcgdW5wcnVuZWQgcmVsaWRzIGFuZCBpbml0aWFsIHBydW5pbmcg cmVzdWx0cy4KVXNlIHRoaXMgZGF0YSB0byBhY3F1aXJlIGV4ZWN1dGlvbiBsb2NrcyBvbmx5IG9u IHN1cnZpdmluZyBwYXJ0aXRpb25zLAphdm9pZGluZyB1bm5lY2Vzc2FyeSBsb2NraW5nIG9mIHBy dW5lZCB0YWJsZXMgZXZlbiB3aGVuIHVzaW5nIGNhY2hlZApwbGFucy4KCkludHJvZHVjZSBDYWNo ZWRQbGFuUHJlcERhdGEgdG8gY2FycnkgRXhlY3V0b3JQcmVwIHJlc3VsdHMKdGhyb3VnaCB0aGUg cGxhbiBjYWNoaW5nIGxheWVyLiBBZGp1c3QgY2FsbCBzaXRlcyBpbiBTUEksCmZ1bmN0aW9ucywg cG9ydGFscywgYW5kIEVYUExBSU4gdG8gcHJvcGFnYXRlIHRoaXMgZGF0YS4KClRoaXMgZW5zdXJl cyBwcnVuaW5nIGRlY2lzaW9ucyBtYWRlIGR1cmluZyBpbml0aWFsIHBydW5pbmcgYXJlCmNvbnNp c3RlbnRseSByZXVzZWQgd2l0aG91dCByZWRvaW5nIHBydW5pbmcgbG9naWMgaW4gZXhlY3V0b3Ig cGF0aHMKbGlrZSBwYXJhbGxlbCB3b3JrZXJzLiBJdCBhbHNvIGxheXMgdGhlIGdyb3VuZHdvcmsg Zm9yCnBydW5pbmctZGVwZW5kZW50IGxvY2sgYmVoYXZpb3IgZHVyaW5nIHBsYW4gcmV1c2UuCgpU byBtYWludGFpbiBjb3JyZWN0bmVzcyB3aGVuIGFsbCB0YXJnZXQgcGFydGl0aW9ucyBhcmUgcHJ1 bmVkLCBhbHNvCnJlaW5zdGF0ZSB0aGUgZmlyc3RSZXN1bHRSZWwgbG9ja2luZyBiZWhhdmlvciBs b3N0IGluIGNvbW1pdAoyODMxN2RlNzIuIFRoYXQgY29tbWl0IHJlcXVpcmVkIHRoZSBmaXJzdCBN b2RpZnlUYWJsZSB0YXJnZXQgdG8KcmVtYWluIGluaXRpYWxpemVkIGZvciBleGVjdXRvciBhc3N1 bXB0aW9ucyB0byBob2xkLiBXZSBub3cKZXhwbGljaXRseSB0cmFjayB0aGVzZSByZWxpZHMgaW4g UGxhbm5lckdsb2JhbCBhbmQgUGxhbm5lZFN0bXQgc28gdGhleQphcmUgbG9ja2VkIGV2ZW4gaWYg cHJ1bmVkLCBwcmVzZXJ2aW5nIHRoYXQgcnVsZSBhY3Jvc3MgY2FjaGVkIHBsYW4KcmV1c2UuCi0t LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jICAgICAgICAgfCAgMTkgKy0KIHNyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jIHwgICA0ICstCiBzcmMvYmFja2VuZC9l eGVjdXRvci9zcGkuYyAgICAgICAgICAgICB8ICAyNiArKy0KIHNyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL3BsYW5uZXIuYyAgIHwgICAxICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3Nl dHJlZnMuYyAgIHwgICAzICsKIHNyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyAgICAgICAgICAg IHwgICA5ICstCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYyAgICB8IDIzNCAr KysrKysrKysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAg ICAgICAgICB8ICAgMyArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCAgICAgICAgICB8 ICAxMCArKwogc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmggICAgICAgICAgfCAgMjQgKyst CiAxMCBmaWxlcyBjaGFuZ2VkLCAzMTIgaW5zZXJ0aW9ucygrKSwgMjEgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvcHJlcGFyZS5jCmluZGV4IGFmZDQ0OWM3M2JhLi4yMzMzMmQxOWIzNyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3ByZXBhcmUuYwpAQCAtMTU0LDYgKzE1NCw3IEBAIEV4ZWN1dGVRdWVyeShQYXJzZVN0 YXRlICpwc3RhdGUsCiB7CiAJUHJlcGFyZWRTdGF0ZW1lbnQgKmVudHJ5OwogCUNhY2hlZFBsYW4g KmNwbGFuOworCUNhY2hlZFBsYW5QcmVwRGF0YSBjcHJlcCA9IHswfTsKIAlMaXN0CSAgICpwbGFu X2xpc3Q7CiAJUGFyYW1MaXN0SW5mbyBwYXJhbUxJID0gTlVMTDsKIAlFU3RhdGUJICAgKmVzdGF0 ZSA9IE5VTEw7CkBAIC0xOTMsNyArMTk0LDEwIEBAIEV4ZWN1dGVRdWVyeShQYXJzZVN0YXRlICpw c3RhdGUsCiAJCQkJCQkJCQkgICBlbnRyeS0+cGxhbnNvdXJjZS0+cXVlcnlfc3RyaW5nKTsKIAog CS8qIFJlcGxhbiBpZiBuZWVkZWQsIGFuZCBpbmNyZW1lbnQgcGxhbiByZWZjb3VudCBmb3IgcG9y dGFsICovCi0JY3BsYW4gPSBHZXRDYWNoZWRQbGFuKGVudHJ5LT5wbGFuc291cmNlLCBwYXJhbUxJ LCBOVUxMLCBOVUxMKTsKKwkvKiBLZWVwIEV4ZWN1dG9yUHJlcCBzdGF0ZSB3aXRoIHRoZSBwb3J0 YWwgYW5kIGl0cyByZXNvd25lci4gKi8KKwljcHJlcC5jb250ZXh0ID0gcG9ydGFsLT5wb3J0YWxD b250ZXh0OworCWNwcmVwLm93bmVyID0gcG9ydGFsLT5yZXNvd25lcjsKKwljcGxhbiA9IEdldENh Y2hlZFBsYW4oZW50cnktPnBsYW5zb3VyY2UsIHBhcmFtTEksIE5VTEwsIE5VTEwsICZjcHJlcCk7 CiAJcGxhbl9saXN0ID0gY3BsYW4tPnN0bXRfbGlzdDsKIAogCS8qCkBAIC0yMDUsNyArMjA5LDcg QEAgRXhlY3V0ZVF1ZXJ5KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJICBxdWVyeV9zdHJpbmcs CiAJCQkJCSAgZW50cnktPnBsYW5zb3VyY2UtPmNvbW1hbmRUYWcsCiAJCQkJCSAgcGxhbl9saXN0 LAotCQkJCQkgIE5JTCwKKwkJCQkJICBjcHJlcC5wcmVwX2xpc3QsCiAJCQkJCSAgY3BsYW4pOwog CiAJLyoKQEAgLTU3NSw2ICs1NzksNyBAQCBFeHBsYWluRXhlY3V0ZVF1ZXJ5KEV4ZWN1dGVTdG10 ICpleGVjc3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRlICplcywKIAlQcmVwYXJl ZFN0YXRlbWVudCAqZW50cnk7CiAJY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nOwogCUNhY2hlZFBs YW4gKmNwbGFuOworCUNhY2hlZFBsYW5QcmVwRGF0YSBjcHJlcCA9IHswfTsKIAlMaXN0CSAgICpw bGFuX2xpc3Q7CiAJTGlzdAkgICAqcHJlcF9saXN0OwogCUxpc3RDZWxsICAgKnA7CkBAIC02MzMs OCArNjM4LDE0IEBAIEV4cGxhaW5FeGVjdXRlUXVlcnkoRXhlY3V0ZVN0bXQgKmV4ZWNzdG10LCBJ bnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAogCX0KIAogCS8qIFJlcGxhbiBpZiBu ZWVkZWQsIGFuZCBhY3F1aXJlIGEgdHJhbnNpZW50IHJlZmNvdW50ICovCisJLyogRXhlY3V0b3JQ cmVwIHN0YXRlIGlzIGxvY2FsIHRvIHRoaXMgRVhQTEFJTiBFWEVDVVRFIGNhbGwuICovCisJY3By ZXAuY29udGV4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0OworCWNwcmVwLm93bmVyID0gQ3VycmVu dFJlc291cmNlT3duZXI7CisJaWYgKGVzLT5nZW5lcmljKQorCQljcHJlcC5lZmxhZ3MgPSBFWEVD X0ZMQUdfRVhQTEFJTl9HRU5FUklDOwogCWNwbGFuID0gR2V0Q2FjaGVkUGxhbihlbnRyeS0+cGxh bnNvdXJjZSwgcGFyYW1MSSwKLQkJCQkJCSAgQ3VycmVudFJlc291cmNlT3duZXIsIHBzdGF0ZS0+ cF9xdWVyeUVudik7CisJCQkJCQkgIEN1cnJlbnRSZXNvdXJjZU93bmVyLCBwc3RhdGUtPnBfcXVl cnlFbnYsCisJCQkJCQkgICZjcHJlcCk7CiAKIAlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHBsYW5k dXJhdGlvbik7CiAJSU5TVFJfVElNRV9TVUJUUkFDVChwbGFuZHVyYXRpb24sIHBsYW5zdGFydCk7 CkBAIC02NTMsNyArNjY0LDcgQEAgRXhwbGFpbkV4ZWN1dGVRdWVyeShFeGVjdXRlU3RtdCAqZXhl Y3N0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJfQogCiAJcGxhbl9s aXN0ID0gY3BsYW4tPnN0bXRfbGlzdDsKLQlwcmVwX2xpc3QgPSBOSUw7CisJcHJlcF9saXN0ID0g Y3ByZXAucHJlcF9saXN0OwogCiAJLyogRXhwbGFpbiBlYWNoIHF1ZXJ5ICovCiAJaSA9IDA7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCmluZGV4IDRjNTY0N2FjMzhhLi5jNTgx MjYxMmY4ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxl LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKQEAgLTQ2NDgs OCArNDY0OCw4IEBAIEV4ZWNJbml0TW9kaWZ5VGFibGUoTW9kaWZ5VGFibGUgKm5vZGUsIEVTdGF0 ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCSAqIGFzIGEgcmVmZXJlbmNlIGZvciBidWlsZGluZyB0 aGUgUmVzdWx0UmVsSW5mbyBvZiB0aGUgdGFyZ2V0IHBhcnRpdGlvbi4KIAkgKiBJbiBlaXRoZXIg Y2FzZSwgaXQgZG9lc24ndCBtYXR0ZXIgd2hpY2ggcmVzdWx0IHJlbGF0aW9uIGlzIGtlcHQsIHNv IHdlCiAJICoganVzdCBrZWVwIHRoZSBmaXJzdCBvbmUsIGlmIGFsbCBvdGhlcnMgaGF2ZSBiZWVu IHBydW5lZC4gIFNlZSBhbHNvLAotCSAqIEV4ZWNEb0luaXRpYWxQcnVuaW5nKCksIHdoaWNoIGVu c3VyZXMgdGhhdCB0aGlzIGZpcnN0IHJlc3VsdCByZWxhdGlvbgotCSAqIGhhcyBiZWVuIGxvY2tl ZC4KKwkgKiBBY3F1aXJlRXhlY3V0b3JMb2Nrc1VucHJ1bmVkKCksIHdoaWNoIGVuc3VyZXMgdGhh dCB0aGlzIGZpcnN0IHJlc3VsdAorCSAqIHJlbGF0aW9uIGhhcyBiZWVuIGxvY2tlZC4KIAkgKi8K IAlpID0gMDsKIAlmb3JlYWNoKGwsIG5vZGUtPnJlc3VsdFJlbGF0aW9ucykKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivc3BpLmMK aW5kZXggN2EzY2I5NDRkNmYuLmQ1ODBmMWUwNDI1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9l eGVjdXRvci9zcGkuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9zcGkuYwpAQCAtMTU3OSw2 ICsxNTc5LDcgQEAgU1BJX2N1cnNvcl9vcGVuX2ludGVybmFsKGNvbnN0IGNoYXIgKm5hbWUsIFNQ SVBsYW5QdHIgcGxhbiwKIHsKIAlDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlOwogCUNhY2hl ZFBsYW4gKmNwbGFuOworCUNhY2hlZFBsYW5QcmVwRGF0YSBjcHJlcCA9IHswfTsKIAlMaXN0CSAg ICpzdG10X2xpc3Q7CiAJY2hhcgkgICAqcXVlcnlfc3RyaW5nOwogCVNuYXBzaG90CXNuYXBzaG90 OwpAQCAtMTY1OSw3ICsxNjYwLDExIEBAIFNQSV9jdXJzb3Jfb3Blbl9pbnRlcm5hbChjb25zdCBj aGFyICpuYW1lLCBTUElQbGFuUHRyIHBsYW4sCiAJICovCiAKIAkvKiBSZXBsYW4gaWYgbmVlZGVk LCBhbmQgaW5jcmVtZW50IHBsYW4gcmVmY291bnQgZm9yIHBvcnRhbCAqLwotCWNwbGFuID0gR2V0 Q2FjaGVkUGxhbihwbGFuc291cmNlLCBwYXJhbUxJLCBOVUxMLCBfU1BJX2N1cnJlbnQtPnF1ZXJ5 RW52KTsKKwkvKiBFeGVjdXRvclByZXAgc3RhdGUgbGl2ZXMgaW4gdGhpcyBwb3J0YWwncyBjb250 ZXh0LiAqLworCWNwcmVwLmNvbnRleHQgPSBwb3J0YWwtPnBvcnRhbENvbnRleHQ7CisJY3ByZXAu b3duZXIgPSBwb3J0YWwtPnJlc293bmVyOworCWNwbGFuID0gR2V0Q2FjaGVkUGxhbihwbGFuc291 cmNlLCBwYXJhbUxJLCBOVUxMLCBfU1BJX2N1cnJlbnQtPnF1ZXJ5RW52LAorCQkJCQkJICAmY3By ZXApOwogCXN0bXRfbGlzdCA9IGNwbGFuLT5zdG10X2xpc3Q7CiAKIAlpZiAoIXBsYW4tPnNhdmVk KQpAQCAtMTY4NSw3ICsxNjkwLDcgQEAgU1BJX2N1cnNvcl9vcGVuX2ludGVybmFsKGNvbnN0IGNo YXIgKm5hbWUsIFNQSVBsYW5QdHIgcGxhbiwKIAkJCQkJICBxdWVyeV9zdHJpbmcsCiAJCQkJCSAg cGxhbnNvdXJjZS0+Y29tbWFuZFRhZywKIAkJCQkJICBzdG10X2xpc3QsCi0JCQkJCSAgTklMLAor CQkJCQkgIGNwcmVwLnByZXBfbGlzdCwJLyogbGl2ZXMgaW4gcG9ydGFsQ29udGV4dCAqLwogCQkJ CQkgIGNwbGFuKTsKIAogCS8qCkBAIC0yMDc4LDYgKzIwODMsNyBAQCBTUElfcGxhbl9nZXRfY2Fj aGVkX3BsYW4oU1BJUGxhblB0ciBwbGFuKQogewogCUNhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3Vy Y2U7CiAJQ2FjaGVkUGxhbiAqY3BsYW47CisJQ2FjaGVkUGxhblByZXBEYXRhIGNwcmVwID0gezB9 OwogCVNQSUNhbGxiYWNrQXJnIHNwaWNhbGxiYWNrYXJnOwogCUVycm9yQ29udGV4dENhbGxiYWNr IHNwaWVycmNvbnRleHQ7CiAKQEAgLTIxMDEsOSArMjEwNywxMyBAQCBTUElfcGxhbl9nZXRfY2Fj aGVkX3BsYW4oU1BJUGxhblB0ciBwbGFuKQogCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmc3BpZXJy Y29udGV4dDsKIAogCS8qIEdldCB0aGUgZ2VuZXJpYyBwbGFuIGZvciB0aGUgcXVlcnkgKi8KKwkv KiBFeGVjdXRvclByZXAoKSBzdGF0ZSBsaXZlcyBpbiBjYWxsZXIncyBhY3RpdmUgY29udGV4dC4g Ki8KKwljcHJlcC5jb250ZXh0ID0gQ3VycmVudE1lbW9yeUNvbnRleHQ7CisJY3ByZXAub3duZXIg PSBDdXJyZW50UmVzb3VyY2VPd25lcjsKIAljcGxhbiA9IEdldENhY2hlZFBsYW4ocGxhbnNvdXJj ZSwgTlVMTCwKIAkJCQkJCSAgcGxhbi0+c2F2ZWQgPyBDdXJyZW50UmVzb3VyY2VPd25lciA6IE5V TEwsCi0JCQkJCQkgIF9TUElfY3VycmVudC0+cXVlcnlFbnYpOworCQkJCQkJICBfU1BJX2N1cnJl bnQtPnF1ZXJ5RW52LAorCQkJCQkJICAmY3ByZXApOwogCUFzc2VydChjcGxhbiA9PSBwbGFuc291 cmNlLT5ncGxhbik7CiAKIAkvKiBQb3AgdGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8KQEAgLTI1 MDEsNiArMjUxMSw3IEBAIF9TUElfZXhlY3V0ZV9wbGFuKFNQSVBsYW5QdHIgcGxhbiwgY29uc3Qg U1BJRXhlY3V0ZU9wdGlvbnMgKm9wdGlvbnMsCiAJCUNhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3Vy Y2UgPSAoQ2FjaGVkUGxhblNvdXJjZSAqKSBsZmlyc3QobGMxKTsKIAkJTGlzdAkgICAqc3RtdF9s aXN0OwogCQlMaXN0Q2VsbCAgICpsYzI7CisJCUNhY2hlZFBsYW5QcmVwRGF0YSBjcHJlcCA9IHsw fTsKIAkJTGlzdAkgICAqcHJlcF9saXN0OwogCQlpbnQJCQlpOwogCkBAIC0yNTc3LDExICsyNTg4 LDE2IEBAIF9TUElfZXhlY3V0ZV9wbGFuKFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0 ZU9wdGlvbnMgKm9wdGlvbnMsCiAJCSAqIFJlcGxhbiBpZiBuZWVkZWQsIGFuZCBpbmNyZW1lbnQg cGxhbiByZWZjb3VudC4gIElmIGl0J3MgYSBzYXZlZAogCQkgKiBwbGFuLCB0aGUgcmVmY291bnQg bXVzdCBiZSBiYWNrZWQgYnkgdGhlIHBsYW5fb3duZXIuCiAJCSAqLworCisJCS8qIEV4ZWN1dG9y UHJlcCBzdGF0ZSBpcyBwZXIgX1NQSV9leGVjdXRlX3BsYW4gY2FsbC4gKi8KKwkJY3ByZXAuY29u dGV4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0OworCQljcHJlcC5vd25lciA9IEN1cnJlbnRSZXNv dXJjZU93bmVyOwogCQljcGxhbiA9IEdldENhY2hlZFBsYW4ocGxhbnNvdXJjZSwgb3B0aW9ucy0+ cGFyYW1zLAotCQkJCQkJCSAgcGxhbl9vd25lciwgX1NQSV9jdXJyZW50LT5xdWVyeUVudik7CisJ CQkJCQkJICBwbGFuX293bmVyLCBfU1BJX2N1cnJlbnQtPnF1ZXJ5RW52LAorCQkJCQkJCSAgJmNw cmVwKTsKIAogCQlzdG10X2xpc3QgPSBjcGxhbi0+c3RtdF9saXN0OwotCQlwcmVwX2xpc3QgPSBO SUw7CisJCXByZXBfbGlzdCA9IGNwcmVwLnByZXBfbGlzdDsKIAogCQkvKgogCQkgKiBJZiB3ZSB3 ZXJlbid0IGdpdmVuIGEgc3BlY2lmaWMgc25hcHNob3QgdG8gdXNlLCBhbmQgdGhlIHN0YXRlbWVu dApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IGM0ZmQ2NDZiOTk5Li40Yzc2 ZTc4YzFkYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5j CisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNjA4LDYgKzYw OCw3IEBAIHN0YW5kYXJkX3BsYW5uZXIoUXVlcnkgKnBhcnNlLCBjb25zdCBjaGFyICpxdWVyeV9z dHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAogCQkJCQkJCQkJCQkgIGdsb2ItPnBydW5hYmxlUmVs aWRzKTsKIAlyZXN1bHQtPnBlcm1JbmZvcyA9IGdsb2ItPmZpbmFscnRlcGVybWluZm9zOwogCXJl c3VsdC0+cmVzdWx0UmVsYXRpb25zID0gZ2xvYi0+cmVzdWx0UmVsYXRpb25zOworCXJlc3VsdC0+ Zmlyc3RSZXN1bHRSZWxzID0gZ2xvYi0+Zmlyc3RSZXN1bHRSZWxzOwogCXJlc3VsdC0+YXBwZW5k UmVsYXRpb25zID0gZ2xvYi0+YXBwZW5kUmVsYXRpb25zOwogCXJlc3VsdC0+c3VicGxhbnMgPSBn bG9iLT5zdWJwbGFuczsKIAlyZXN1bHQtPnJld2luZFBsYW5JRHMgPSBnbG9iLT5yZXdpbmRQbGFu SURzOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCmluZGV4IGNjZGM5YmMyNjRhLi4y MjliMzkwNjBhZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVm cy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwpAQCAtMTI3NCw2 ICsxMjc0LDkgQEAgc2V0X3BsYW5fcmVmcyhQbGFubmVySW5mbyAqcm9vdCwgUGxhbiAqcGxhbiwg aW50IHJ0b2Zmc2V0KQogCQkJCQkJbGFwcGVuZF9pbnQocm9vdC0+Z2xvYi0+cmVzdWx0UmVsYXRp b25zLAogCQkJCQkJCQkJc3BsYW4tPnJvb3RSZWxhdGlvbik7CiAJCQkJfQorCQkJCXJvb3QtPmds b2ItPmZpcnN0UmVzdWx0UmVscyA9CisJCQkJCWxhcHBlbmRfaW50KHJvb3QtPmdsb2ItPmZpcnN0 UmVzdWx0UmVscywKKwkJCQkJCQkJbGluaXRpYWxfaW50KHNwbGFuLT5yZXN1bHRSZWxhdGlvbnMp KTsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFRfQXBwZW5kOgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdGNvcC9wb3N0Z3Jlcy5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCmluZGV4 IGQzOTY0YTEyYTE0Li4yNDk4MjlmNTlhMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9w b3N0Z3Jlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwpAQCAtMTYzOSw2ICsx NjM5LDcgQEAgZXhlY19iaW5kX21lc3NhZ2UoU3RyaW5nSW5mbyBpbnB1dF9tZXNzYWdlKQogCWlu dDE2CSAgICpyZm9ybWF0cyA9IE5VTEw7CiAJQ2FjaGVkUGxhblNvdXJjZSAqcHNyYzsKIAlDYWNo ZWRQbGFuICpjcGxhbjsKKwlDYWNoZWRQbGFuUHJlcERhdGEgY3ByZXAgPSB7MH07CiAJUG9ydGFs CQlwb3J0YWw7CiAJY2hhcgkgICAqcXVlcnlfc3RyaW5nOwogCWNoYXIJICAgKnNhdmVkX3N0bXRf bmFtZTsKQEAgLTIwMjEsNyArMjAyMiwxMSBAQCBleGVjX2JpbmRfbWVzc2FnZShTdHJpbmdJbmZv IGlucHV0X21lc3NhZ2UpCiAJICogd2lsbCBiZSBnZW5lcmF0ZWQgaW4gTWVzc2FnZUNvbnRleHQu ICBUaGUgcGxhbiByZWZjb3VudCB3aWxsIGJlCiAJICogYXNzaWduZWQgdG8gdGhlIFBvcnRhbCwg c28gaXQgd2lsbCBiZSByZWxlYXNlZCBhdCBwb3J0YWwgZGVzdHJ1Y3Rpb24uCiAJICovCi0JY3Bs YW4gPSBHZXRDYWNoZWRQbGFuKHBzcmMsIHBhcmFtcywgTlVMTCwgTlVMTCk7CisKKwkvKiBFeGVj dXRvclByZXAoKSBzdGF0ZSBsaXZlcyBpbiBwb3J0YWwgY29udGV4dC4gKi8KKwljcHJlcC5jb250 ZXh0ID0gcG9ydGFsLT5wb3J0YWxDb250ZXh0OworCWNwcmVwLm93bmVyID0gcG9ydGFsLT5yZXNv d25lcjsKKwljcGxhbiA9IEdldENhY2hlZFBsYW4ocHNyYywgcGFyYW1zLCBOVUxMLCBOVUxMLCAm Y3ByZXApOwogCiAJLyoKIAkgKiBOb3cgd2UgY2FuIGRlZmluZSB0aGUgcG9ydGFsLgpAQCAtMjAz NCw3ICsyMDM5LDcgQEAgZXhlY19iaW5kX21lc3NhZ2UoU3RyaW5nSW5mbyBpbnB1dF9tZXNzYWdl KQogCQkJCQkgIHF1ZXJ5X3N0cmluZywKIAkJCQkJICBwc3JjLT5jb21tYW5kVGFnLAogCQkJCQkg IGNwbGFuLT5zdG10X2xpc3QsCi0JCQkJCSAgTklMLAorCQkJCQkgIGNwcmVwLnByZXBfbGlzdCwK IAkJCQkJICBjcGxhbik7CiAKIAkvKiBQb3J0YWwgaXMgZGVmaW5lZCwgc2V0IHRoZSBwbGFuIElE IGJhc2VkIG9uIGl0cyBjb250ZW50cy4gKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L2NhY2hlL3BsYW5jYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMK aW5kZXggNjY2MWQyYzZiNzMuLmMxY2ZkNDc0MjJjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9jYWNoZS9wbGFuY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFu Y2FjaGUuYwpAQCAtOTMsNyArOTMsNyBAQCBzdGF0aWMgYm9vbCBTdG10UGxhblJlcXVpcmVzUmV2 YWxpZGF0aW9uKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpOwogc3RhdGljIGJvb2wgQnVp bGRpbmdQbGFuUmVxdWlyZXNTbmFwc2hvdChDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKTsK IHN0YXRpYyBMaXN0ICpSZXZhbGlkYXRlQ2FjaGVkUXVlcnkoQ2FjaGVkUGxhblNvdXJjZSAqcGxh bnNvdXJjZSwKIAkJCQkJCQkJICAgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpOwotc3RhdGlj IGJvb2wgQ2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpOworc3Rh dGljIGJvb2wgUHJlcEFuZENoZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291 cmNlLCBDYWNoZWRQbGFuUHJlcERhdGEgKmNwcmVwKTsKIHN0YXRpYyBDYWNoZWRQbGFuICpCdWls ZENhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgTGlzdCAqcWxpc3QsCiAJ CQkJCQkJCSAgIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1 ZXJ5RW52KTsKIHN0YXRpYyBib29sIGNob29zZV9jdXN0b21fcGxhbihDYWNoZWRQbGFuU291cmNl ICpwbGFuc291cmNlLApAQCAtMTAxLDYgKzEwMSw4IEBAIHN0YXRpYyBib29sIGNob29zZV9jdXN0 b21fcGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLAogc3RhdGljIGRvdWJsZSBjYWNo ZWRfcGxhbl9jb3N0KENhY2hlZFBsYW4gKnBsYW4sIGJvb2wgaW5jbHVkZV9wbGFubmVyKTsKIHN0 YXRpYyBRdWVyeSAqUXVlcnlMaXN0R2V0UHJpbWFyeVN0bXQoTGlzdCAqc3RtdHMpOwogc3RhdGlj IHZvaWQgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUp Oworc3RhdGljIHZvaWQgQWNxdWlyZUV4ZWN1dG9yTG9ja3NVbnBydW5lZChMaXN0ICpzdG10X2xp c3QsIGJvb2wgYWNxdWlyZSwKKwkJCQkJCQkJCQkgQ2FjaGVkUGxhblByZXBEYXRhICpjcHJlcCk7 CiBzdGF0aWMgdm9pZCBBY3F1aXJlUGxhbm5lckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBh Y3F1aXJlKTsKIHN0YXRpYyB2b2lkIFNjYW5RdWVyeUZvckxvY2tzKFF1ZXJ5ICpwYXJzZXRyZWUs IGJvb2wgYWNxdWlyZSk7CiBzdGF0aWMgYm9vbCBTY2FuUXVlcnlXYWxrZXIoTm9kZSAqbm9kZSwg Ym9vbCAqYWNxdWlyZSk7CkBAIC0xMzcsNiArMTM5LDI2IEBAIFJlc291cmNlT3duZXJGb3JnZXRQ bGFuQ2FjaGVSZWYoUmVzb3VyY2VPd25lciBvd25lciwgQ2FjaGVkUGxhbiAqcGxhbikKIC8qIEdV QyBwYXJhbWV0ZXIgKi8KIGludAkJCXBsYW5fY2FjaGVfbW9kZSA9IFBMQU5fQ0FDSEVfTU9ERV9B VVRPOwogCisvKgorICogTG9jayBhY3F1aXNpdGlvbiBwb2xpY3kgZm9yIGV4ZWN1dGlvbiBsb2Nr cy4KKyAqCisgKiBMT0NLX0FMTCBhY3F1aXJlcyBsb2NrcyBvbiBhbGwgcmVsYXRpb25zIG1lbnRp b25lZCBpbiB0aGUgcGxhbiwKKyAqIHJlcHJvZHVjaW5nIHRoZSBiZWhhdmlvciBvZiBBY3F1aXJl RXhlY3V0b3JMb2NrcygpLgorICoKKyAqIExPQ0tfVU5QUlVORUQgcmVzdHJpY3RzIGxvY2tpbmcg dG8gb25seSB0aGUgdW5wcnVuZWQgcmVsYXRpb25zLiBUaGF0CisgKiBpbmNsdWRlcyB0aG9zZSBt ZW50aW9uZWQgaW4gUGxhbm5lZFN0bXQudW5wcnVuYWJsZVJlbGlkcyBhbmQgdGhlIGxlYWYKKyAq IHBhcnRpdGlvbnMgcmVtYWluaW5nIGFmdGVyIHBlcmZvcm1pbmcgaW5pdGlhbCBwcnVuaW5nLgor ICovCit0eXBlZGVmIGVudW0gTG9ja1BvbGljeQoreworCUxPQ0tfQUxMLAorCUxPQ0tfVU5QUlVO RUQsCit9IExvY2tQb2xpY3k7CisKK3N0YXRpYyB2b2lkIEFjcXVpcmVFeGVjdXRvckxvY2tzV2l0 aFBvbGljeShMaXN0ICpzdG10X2xpc3QsCisJCQkJCQkJCQkJICAgTG9ja1BvbGljeSBwb2xpY3ks IGJvb2wgYWNxdWlyZSwKKwkJCQkJCQkJCQkgICBDYWNoZWRQbGFuUHJlcERhdGEgKmNwcmVwKTsK KwogLyoKICAqIEluaXRQbGFuQ2FjaGU6IGluaXRpYWxpemUgbW9kdWxlIGR1cmluZyBJbml0UG9z dGdyZXMuCiAgKgpAQCAtOTM4LDcgKzk2MCwxMiBAQCBSZXZhbGlkYXRlQ2FjaGVkUXVlcnkoQ2Fj aGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKIH0KIAogLyoKLSAqIENoZWNrQ2FjaGVkUGxhbjog c2VlIGlmIHRoZSBDYWNoZWRQbGFuU291cmNlJ3MgZ2VuZXJpYyBwbGFuIGlzIHZhbGlkLgorICog UHJlcEFuZENoZWNrQ2FjaGVkUGxhbjogc2VlIGlmIHRoZSBDYWNoZWRQbGFuU291cmNlJ3MgZ2Vu ZXJpYyBwbGFuIGlzIHZhbGlkLgorICoKKyAqIElmICdjcHJlcCcgaXMgbm90IE5VTEwsIEV4ZWN1 dG9yUHJlcCgpIGlzIGFwcGxpZWQgdG8gZWFjaCBQbGFubmVkU3RtdCB0bworICogY29tcHV0ZSB0 aGUgc2V0IG9mIHBhcnRpdGlvbnMgdGhhdCBzdXJ2aXZlIGluaXRpYWwgcnVudGltZSBwcnVuaW5n IGluIG9yZGVyCisgKiB0byBvbmx5IGxvY2sgdGhlbS4gIFRoZSByZXN1bHRpbmcgRXhlY1ByZXAg c3RydWN0dXJlcyBhcmUgc2F2ZWQgaW4gY3ByZXAgZm9yCisgKiBsYXRlciByZXVzZSBieSBFeGVj dXRvclN0YXJ0KCkuCiAgKgogICogQ2FsbGVyIG11c3QgaGF2ZSBhbHJlYWR5IGNhbGxlZCBSZXZh bGlkYXRlQ2FjaGVkUXVlcnkgdG8gdmVyaWZ5IHRoYXQgdGhlCiAgKiBxdWVyeXRyZWUgaXMgdXAg dG8gZGF0ZS4KQEAgLTk0Nyw3ICs5NzQsNyBAQCBSZXZhbGlkYXRlQ2FjaGVkUXVlcnkoQ2FjaGVk UGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKICAqIChXZSBtdXN0IGRvIHRoaXMgZm9yIHRoZSAidHJ1 ZSIgcmVzdWx0IHRvIGJlIHJhY2UtY29uZGl0aW9uLWZyZWUuKQogICovCiBzdGF0aWMgYm9vbAot Q2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpCitQcmVwQW5kQ2hl Y2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIENhY2hlZFBsYW5QcmVw RGF0YSAqY3ByZXApCiB7CiAJQ2FjaGVkUGxhbiAqcGxhbiA9IHBsYW5zb3VyY2UtPmdwbGFuOwog CkBAIC05NzUsMTMgKzEwMDIsMTUgQEAgQ2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2Ug KnBsYW5zb3VyY2UpCiAJICovCiAJaWYgKHBsYW4tPmlzX3ZhbGlkKQogCXsKKwkJTG9ja1BvbGlj eSBwb2xpY3kgPSAhY3ByZXAgPyBMT0NLX0FMTCA6IExPQ0tfVU5QUlVORUQ7CisKIAkJLyoKIAkJ ICogUGxhbiBtdXN0IGhhdmUgcG9zaXRpdmUgcmVmY291bnQgYmVjYXVzZSBpdCBpcyByZWZlcmVu Y2VkIGJ5CiAJCSAqIHBsYW5zb3VyY2U7IHNvIG5vIG5lZWQgdG8gZmVhciBpdCBkaXNhcHBlYXJz IHVuZGVyIHVzIGhlcmUuCiAJCSAqLwogCQlBc3NlcnQocGxhbi0+cmVmY291bnQgPiAwKTsKIAot CQlBY3F1aXJlRXhlY3V0b3JMb2NrcyhwbGFuLT5zdG10X2xpc3QsIHRydWUpOworCQlBY3F1aXJl RXhlY3V0b3JMb2Nrc1dpdGhQb2xpY3kocGxhbi0+c3RtdF9saXN0LCBwb2xpY3ksIHRydWUsIGNw cmVwKTsKIAogCQkvKgogCQkgKiBJZiBwbGFuIHdhcyB0cmFuc2llbnQsIGNoZWNrIHRvIHNlZSBp ZiBUcmFuc2FjdGlvblhtaW4gaGFzCkBAIC0xMDAzLDcgKzEwMzIsNyBAQCBDaGVja0NhY2hlZFBs YW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSkKIAkJfQogCiAJCS8qIE9vcHMsIHRoZSBy YWNlIGNhc2UgaGFwcGVuZWQuICBSZWxlYXNlIHVzZWxlc3MgbG9ja3MuICovCi0JCUFjcXVpcmVF eGVjdXRvckxvY2tzKHBsYW4tPnN0bXRfbGlzdCwgZmFsc2UpOworCQlBY3F1aXJlRXhlY3V0b3JM b2Nrc1dpdGhQb2xpY3kocGxhbi0+c3RtdF9saXN0LCBwb2xpY3ksIGZhbHNlLCBjcHJlcCk7CiAJ fQogCiAJLyoKQEAgLTEyODMsNiArMTMxMiwxMCBAQCBjYWNoZWRfcGxhbl9jb3N0KENhY2hlZFBs YW4gKnBsYW4sIGJvb2wgaW5jbHVkZV9wbGFubmVyKQogICogT24gcmV0dXJuLCB0aGUgcGxhbiBp cyB2YWxpZCBhbmQgd2UgaGF2ZSBzdWZmaWNpZW50IGxvY2tzIHRvIGJlZ2luCiAgKiBleGVjdXRp b24uCiAgKgorICogSWYgJ2NwcmVwJyBpcyBub3QgTlVMTCBhbmQgYSBnZW5lcmljIHBsYW4gaXMg cmV1c2VkLCB0aGUgZnVuY3Rpb24gcHJlcGFyZXMKKyAqIGVhY2ggUGxhbm5lZFN0bXQgdmlhIEV4 ZWN1dG9yUHJlcCgpIGFuZCBzdG9yZXMgdGhlIHJlc3VsdHMgaW4KKyAqIGNwcmVwLT5wcmVwX2xp c3QuICBUaGVzZSBhcmUgaW50ZW5kZWQgdG8gYmUgcGFzc2VkIGxhdGVyIHRvIEV4ZWN1dG9yU3Rh cnQoKS4KKyAqCiAgKiBPbiByZXR1cm4sIHRoZSByZWZjb3VudCBvZiB0aGUgcGxhbiBoYXMgYmVl biBpbmNyZW1lbnRlZDsgYSBsYXRlcgogICogUmVsZWFzZUNhY2hlZFBsYW4oKSBjYWxsIGlzIGV4 cGVjdGVkLiAgSWYgIm93bmVyIiBpcyBub3QgTlVMTCB0aGVuCiAgKiB0aGUgcmVmY291bnQgaGFz IGJlZW4gcmVwb3J0ZWQgdG8gdGhhdCBSZXNvdXJjZU93bmVyIChub3RlIHRoYXQgdGhpcwpAQCAt MTI5Myw3ICsxMzI2LDggQEAgY2FjaGVkX3BsYW5fY29zdChDYWNoZWRQbGFuICpwbGFuLCBib29s IGluY2x1ZGVfcGxhbm5lcikKICAqLwogQ2FjaGVkUGxhbiAqCiBHZXRDYWNoZWRQbGFuKENhY2hl ZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsCi0JCQkg IFJlc291cmNlT3duZXIgb3duZXIsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KQorCQkJICBS ZXNvdXJjZU93bmVyIG93bmVyLCBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwKKwkJCSAgQ2Fj aGVkUGxhblByZXBEYXRhICpjcHJlcCkKIHsKIAlDYWNoZWRQbGFuICpwbGFuID0gTlVMTDsKIAlM aXN0CSAgICpxbGlzdDsKQEAgLTEzMTUsNyArMTM0OSw5IEBAIEdldENhY2hlZFBsYW4oQ2FjaGVk UGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywKIAogCWlm ICghY3VzdG9tcGxhbikKIAl7Ci0JCWlmIChDaGVja0NhY2hlZFBsYW4ocGxhbnNvdXJjZSkpCisJ CWlmIChjcHJlcCkKKwkJCWNwcmVwLT5wYXJhbXMgPSBib3VuZFBhcmFtczsKKwkJaWYgKFByZXBB bmRDaGVja0NhY2hlZFBsYW4ocGxhbnNvdXJjZSwgY3ByZXApKQogCQl7CiAJCQkvKiBXZSB3YW50 IGEgZ2VuZXJpYyBwbGFuLCBhbmQgd2UgYWxyZWFkeSBoYXZlIGEgdmFsaWQgb25lICovCiAJCQlw bGFuID0gcGxhbnNvdXJjZS0+Z3BsYW47CkBAIC0xOTAyLDYgKzE5MzgsMzggQEAgUXVlcnlMaXN0 R2V0UHJpbWFyeVN0bXQoTGlzdCAqc3RtdHMpCiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qCisgKiBB Y3F1aXJlRXhlY3V0b3JMb2Nrc1dpdGhQb2xpY3kKKyAqCQlBY3F1aXJlIG9yIHJlbGVhc2UgZXhl Y3V0aW9uIGxvY2tzIGZvciBhIGNhY2hlZCBwbGFuIGFjY29yZGluZyB0bworICoJCXRoZSBzcGVj aWZpZWQgcG9saWN5LgorICoKKyAqIExPQ0tfQUxMIHJlcHJvZHVjZXMgQWNxdWlyZUV4ZWN1dG9y TG9ja3MoKSwgbG9ja2luZyBldmVyeSByZWxhdGlvbiBpbgorICogZWFjaCBQbGFubmVkU3RtdCdz IHJ0YWJsZS4gIExPQ0tfVU5QUlVORUQgcmVzdHJpY3RzIGxvY2tpbmcgdG8gdGhlCisgKiB1bnBy dW5hYmxlIHJlbHMgYW5kIHBhcnRpdGlvbnMgdGhhdCBzdXJ2aXZlIGluaXRpYWwgcnVudGltZSBw cnVuaW5nLgorICoKKyAqIFdoZW4gTE9DS19VTlBSVU5FRCBpcyB1c2VkIG9uIGFjcXVpcmUsIEV4 ZWN1dG9yUHJlcCgpIGlzIGludm9rZWQgZm9yCisgKiBlYWNoIFBsYW5uZWRTdG10IGFuZCB0aGUg cmVzdWx0aW5nIEV4ZWNQcmVwIHBvaW50ZXJzIGFyZSBhcHBlbmRlZCB0bworICogY3ByZXAtPnBy ZXBfbGlzdCBpbiBjcHJlcC0+Y29udGV4dC4gIE9uIHJlbGVhc2UsIHRoZSBzYW1lIEV4ZWNQcmVw CisgKiBsaXN0IGlzIGNvbnN1bHRlZCB0byBkZXRlcm1pbmUgd2hpY2ggcmVsYXRpb25zIHRvIHVu bG9jayBhbmQgaXMgdGhlbgorICogY2xlYW5lZCB1cCB3aXRoIEV4ZWNQcmVwQ2xlYW51cCgpLgor ICovCitzdGF0aWMgdm9pZAorQWNxdWlyZUV4ZWN1dG9yTG9ja3NXaXRoUG9saWN5KExpc3QgKnN0 bXRfbGlzdCwgTG9ja1BvbGljeSBwb2xpY3ksIGJvb2wgYWNxdWlyZSwKKwkJCQkJCQkgICBDYWNo ZWRQbGFuUHJlcERhdGEgKmNwcmVwKQoreworCXN3aXRjaCAocG9saWN5KQorCXsKKwkJY2FzZSBM T0NLX0FMTDoKKwkJCUFjcXVpcmVFeGVjdXRvckxvY2tzKHN0bXRfbGlzdCwgYWNxdWlyZSk7CisJ CQlicmVhazsKKwkJY2FzZSBMT0NLX1VOUFJVTkVEOgorCQkJQWNxdWlyZUV4ZWN1dG9yTG9ja3NV bnBydW5lZChzdG10X2xpc3QsIGFjcXVpcmUsIGNwcmVwKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0 OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgTG9ja1BvbGljeSIpOworCX0KK30KKwogLyoKICAq IEFjcXVpcmVFeGVjdXRvckxvY2tzOiBhY3F1aXJlIGxvY2tzIG5lZWRlZCBmb3IgZXhlY3V0aW9u IG9mIGEgY2FjaGVkIHBsYW47CiAgKiBvciByZWxlYXNlIHRoZW0gaWYgYWNxdWlyZSBpcyBmYWxz ZS4KQEAgLTE5NTQsNiArMjAyMiwxNTggQEAgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoTGlzdCAqc3Rt dF9saXN0LCBib29sIGFjcXVpcmUpCiAJfQogfQogCisvKgorICogTG9ja1JlbGlkcworICogCQlB Y3F1aXJlIG9yIHJlbGVhc2UgbG9ja3Mgb24gdGhlIHNwZWNpZmllZCByZWxpZHMsIHdoaWNoIHJl ZmVyZW5jZQorICogCQllbnRyaWVzIGluIHRoZSBwcm92aWRlZCByYW5nZSB0YWJsZS4KKyAqCisg KiBIZWxwZXIgZm9yIEFjcXVpcmVFeGVjdXRvckxvY2tzVW5wcnVuZWQoKS4KKyAqLworc3RhdGlj IHZvaWQKK0xvY2tSZWxpZHMoTGlzdCAqcnRhYmxlLCBCaXRtYXBzZXQgKnJlbGlkcywgYm9vbCBh Y3F1aXJlKQoreworCWludAlydGluZGV4ID0gLTE7CisKKwl3aGlsZSAoKHJ0aW5kZXggPSBibXNf bmV4dF9tZW1iZXIocmVsaWRzLCBydGluZGV4KSkgPj0gMCkKKwl7CisJCVJhbmdlVGJsRW50cnkg KnJ0ZSA9IGxpc3RfbnRoX25vZGUoUmFuZ2VUYmxFbnRyeSwgcnRhYmxlLCBydGluZGV4IC0gMSk7 CisKKwkJQXNzZXJ0KHJ0ZS0+cnRla2luZCA9PSBSVEVfUkVMQVRJT04gfHwKKwkJCSAgIChydGUt PnJ0ZWtpbmQgPT0gUlRFX1NVQlFVRVJZICYmIE9pZElzVmFsaWQocnRlLT5yZWxpZCkpKTsKKwor CQkvKgorCQkgKiBBY3F1aXJlIHRoZSBhcHByb3ByaWF0ZSB0eXBlIG9mIGxvY2sgb24gZWFjaCBy ZWxhdGlvbiBPSUQuIE5vdGUKKwkJICogdGhhdCB3ZSBkb24ndCBhY3R1YWxseSB0cnkgdG8gb3Bl biB0aGUgcmVsLCBhbmQgaGVuY2Ugd2lsbCBub3QKKwkJICogZmFpbCBpZiBpdCdzIGJlZW4gZHJv cHBlZCBlbnRpcmVseSAtLS0gd2UnbGwganVzdCB0cmFuc2llbnRseQorCQkgKiBhY3F1aXJlIGEg bm9uLWNvbmZsaWN0aW5nIGxvY2suCisJCSAqLworCQlpZiAoYWNxdWlyZSkKKwkJCUxvY2tSZWxh dGlvbk9pZChydGUtPnJlbGlkLCBydGUtPnJlbGxvY2ttb2RlKTsKKwkJZWxzZQorCQkJVW5sb2Nr UmVsYXRpb25PaWQocnRlLT5yZWxpZCwgcnRlLT5yZWxsb2NrbW9kZSk7CisJfQorfQorCisvKgor ICogQWNxdWlyZUV4ZWN1dG9yTG9ja3NVbnBydW5lZAorICoJCUFjcXVpcmUgb3IgcmVsZWFzZSBl eGVjdXRpb24gbG9ja3MgZm9yIG9ubHkgdW5wcnVuZWQgcmVsYXRpb25zCisgKgkJcmVmZXJlbmNl ZCBieSB0aGUgZ2l2ZW4gUGxhbm5lZFN0bXRzLgorICoKKyAqIE9uIGFjcXVpcmUsIHRoaXM6Cisg KgktIGxvY2tzIHVucHJ1bmFibGUgcmVscyBsaXN0ZWQgaW4gUGxhbm5lZFN0bXQudW5wcnVuYWJs ZVJlbGlkcworICoJLSBydW5zIEV4ZWN1dG9yUHJlcCgpIHRvIHBlcmZvcm0gaW5pdGlhbCBydW50 aW1lIHBydW5pbmcKKyAqCS0gbG9ja3MgdGhlIHN1cnZpdmluZyBwYXJ0aXRpb25zIHJlcG9ydGVk IGluIHRoZSBwcmVwIGVzdGF0ZQorICoJLSBhcHBlbmRzIHRoZSBFeGVjUHJlcCBwb2ludGVyIGZv ciBlYWNoIFBsYW5uZWRTdG10IHRvIGNwcmVwLT5wcmVwX2xpc3QKKyAqCisgKiBPbiByZWxlYXNl LCBpdDoKKyAqCS0gbG9va3MgdXAgdGhlIEV4ZWNQcmVwIG9iamVjdCBmb3IgZWFjaCBQbGFubmVk U3RtdCBmcm9tIGNwcmVwLT5wcmVwX2xpc3QKKyAqCSAgKHdoaWNoIG11c3QgYWxyZWFkeSBiZSBw b3B1bGF0ZWQpCisgKgktIHVubG9ja3MgdGhlIHNhbWUgcmVsYXRpb25zIGlkZW50aWZpZWQgZHVy aW5nIGFjcXVpcmUKKyAqCS0gY2FsbHMgRXhlY1ByZXBDbGVhbnVwKCkgb24gZWFjaCBFeGVjUHJl cAorICoKKyAqIHByZXBfbGlzdCBpcyBleHRlbmRlZCBkdXJpbmcgYWNxdWlyZSBhbmQgbXVzdCBt YXRjaCBzdG10X2xpc3Qgb25lLXRvLW9uZQorICogd2hlbiByZWxlYXNpbmcgbG9ja3MuICBNZW1v cnkgYWxsb2NhdGlvbiBmb3IgRXhlY1ByZXAgaGFwcGVucyBpbgorICogY3ByZXAtPmNvbnRleHQu ICBMb2NrcyBhcmUgYWNxdWlyZWQgdXNpbmcgY3ByZXAtPm93bmVyLgorICovCisKK3N0YXRpYyB2 b2lkCitBY3F1aXJlRXhlY3V0b3JMb2Nrc1VucHJ1bmVkKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBh Y3F1aXJlLAorCQkJCQkJCSBDYWNoZWRQbGFuUHJlcERhdGEgKmNwcmVwKQoreworCU1lbW9yeUNv bnRleHQgb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjcHJlcC0+Y29udGV4dCk7 CisJTGlzdENlbGwgICAqbGMxOworCUxpc3QJICAgKnByZXBfbGlzdDsKKwlpbnQJCQlpOworCisJ QXNzZXJ0KGNwcmVwKTsKKworCS8qCisJICogV2hlbiByZWxlYXNpbmcgbG9ja3MsIHVzZSB0aGUg RXhlY1ByZXAgbGlzdCAoaWYgYW55KSBjcmVhdGVkIGR1cmluZworCSAqIGFjcXVpc2l0aW9uIHRv IGRldGVybWluZSB3aGljaCByZWxpZHMgdG8gdW5sb2NrLiBUaGUgbGlzdCBtdXN0IG1hdGNoCisJ ICogdGhlIFBsYW5uZWRTdG10IGxpc3Qgb25lLXRvLW9uZS4KKwkgKi8KKwlwcmVwX2xpc3QgPSBj cHJlcC0+cHJlcF9saXN0OworCUFzc2VydChhY3F1aXJlIHx8IGxpc3RfbGVuZ3RoKHByZXBfbGlz dCkgPT0gbGlzdF9sZW5ndGgoc3RtdF9saXN0KSk7CisKKwlpID0gMDsKKwlmb3JlYWNoKGxjMSwg c3RtdF9saXN0KQorCXsKKwkJUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10ID0gbGZpcnN0X25vZGUo UGxhbm5lZFN0bXQsIGxjMSk7CisJCUV4ZWNQcmVwICpwcmVwOworCisJCWlmIChwbGFubmVkc3Rt dC0+Y29tbWFuZFR5cGUgPT0gQ01EX1VUSUxJVFkpCisJCXsKKwkJCS8qIFNhbWUgYXMgQWNxdWly ZUV4ZWN1dG9yTG9ja3MoKS4gKi8KKwkJCVF1ZXJ5CSAgICpxdWVyeSA9IFV0aWxpdHlDb250YWlu c1F1ZXJ5KHBsYW5uZWRzdG10LT51dGlsaXR5U3RtdCk7CisKKwkJCWlmIChxdWVyeSkKKwkJCQlT Y2FuUXVlcnlGb3JMb2NrcyhxdWVyeSwgYWNxdWlyZSk7CisKKwkJCS8qIEtlZXAgdGhlIGxpc3Qg b25lLXRvLW9uZSB3aXRoIHN0bXRfbGlzdC4gKi8KKwkJCWlmIChhY3F1aXJlKQorCQkJCWNwcmVw LT5wcmVwX2xpc3QgPSBsYXBwZW5kKGNwcmVwLT5wcmVwX2xpc3QsIE5VTEwpOworCQkJY29udGlu dWU7CisJCX0KKworCQkvKgorCQkgKiBMb2NrIHRhYmxlcyBtZW50aW9uZWQgaW4gdGhlIG9yaWdp bmFsIHF1ZXJ5IGFuZCBvdGhlciB1bnBydW5hYmxlCisJCSAqIHJlbGF0aW9ucyB0aGF0IHdlcmUg YWRkZWQgdG8gdGhlIHBsYW4gdmlhIGluaGVyaXRhbmNlIGV4cGFuc2lvbi4KKwkJICovCisJCUxv Y2tSZWxpZHMocGxhbm5lZHN0bXQtPnJ0YWJsZSwgcGxhbm5lZHN0bXQtPnVucHJ1bmFibGVSZWxp ZHMsIGFjcXVpcmUpOworCisJCS8qIExvY2sgcGFydGl0aW9ucyBzdXJ2aXZpbmcgcnVudGltZSBp bml0aWFsIHBydW5pbmcuICovCisJCWlmIChhY3F1aXJlKQorCQl7CisJCQlwcmVwID0gRXhlY3V0 b3JQcmVwKHBsYW5uZWRzdG10LCBjcHJlcC0+cGFyYW1zLCBjcHJlcC0+b3duZXIsIHRydWUsCisJ CQkJCQkJCWNwcmVwLT5lZmxhZ3MpOworCQkJQXNzZXJ0KHByZXAgfHwgcGxhbm5lZHN0bXQtPnBh cnRQcnVuZUluZm9zID09IE5VTEwpOworCQkJY3ByZXAtPnByZXBfbGlzdCA9IGxhcHBlbmQoY3By ZXAtPnByZXBfbGlzdCwgcHJlcCk7CisJCX0KKwkJZWxzZQorCQkJcHJlcCA9IGxpc3RfbnRoKHBy ZXBfbGlzdCwgaSsrKTsKKworCQlBc3NlcnQocHJlcCA9PSBOVUxMIHx8IHByZXAtPnByZXBfZXN0 YXRlKTsKKwkJaWYgKHByZXApCisJCXsKKwkJCUVTdGF0ZSAqcHJlcF9lc3RhdGUgPSBwcmVwLT5w cmVwX2VzdGF0ZTsKKworCQkJLyoKKwkJCSAqIGVzX3VucHJ1bmVkX3JlbGlkcyBpbmNsdWRlcyBw bGFubmVkc3RtdC0+dW5wcnVuYWJsZVJlbGlkcywKKwkJCSAqIHdoaWNoIHdlJ3ZlIGFscmVhZHkg bG9ja2VkLiBGaWx0ZXIgdGhlbSBvdXQgdG8gYXZvaWQgZG91YmxlLWxvY2tpbmcuCisJCQkgKi8K KwkJCUJpdG1hcHNldCAqbG9ja19yZWxpZHMgPSBibXNfZGlmZmVyZW5jZShwcmVwX2VzdGF0ZS0+ ZXNfdW5wcnVuZWRfcmVsaWRzLAorCQkJCQkJCQkJCQkJCXBsYW5uZWRzdG10LT51bnBydW5hYmxl UmVsaWRzKTsKKworCQkJLyoKKwkJCSAqIGZpcnN0UmVzdWx0UmVscyBtYXkgY29udGFpbiBwcnVu ZWQgcGFydGl0aW9ucyB0aGF0IG11c3Qgc3RpbGwgYmUKKwkJCSAqIGxvY2tlZCB0byBzYXRpc2Z5 IGV4ZWN1dG9yIGFzc3VtcHRpb25zIChzZWUgY29tbWVudHMgaW4KKwkJCSAqIEV4ZWNJbml0TW9k aWZ5VGFibGUoKS4gRW5zdXJlIHRoZXnigJlyZSBpbmNsdWRlZCBoZXJlLgorCQkJICovCisJCQlp ZiAocGxhbm5lZHN0bXQtPnJlc3VsdFJlbGF0aW9ucykKKwkJCXsKKwkJCQlMaXN0Q2VsbCAqbGMy OworCisJCQkJZm9yZWFjaChsYzIsIHBsYW5uZWRzdG10LT5maXJzdFJlc3VsdFJlbHMpCisJCQkJ eworCQkJCQlJbmRleCAgICAgICBmaXJzdFJlc3VsdFJlbCA9IGxmaXJzdF9pbnQobGMyKTsKKwor CQkJCQlpZiAoIWJtc19pc19tZW1iZXIoZmlyc3RSZXN1bHRSZWwsIGxvY2tfcmVsaWRzKSkKKwkJ CQkJCWxvY2tfcmVsaWRzID0gYm1zX2FkZF9tZW1iZXIobG9ja19yZWxpZHMsIGZpcnN0UmVzdWx0 UmVsKTsKKwkJCQl9CisJCQl9CisKKwkJCUxvY2tSZWxpZHMocGxhbm5lZHN0bXQtPnJ0YWJsZSwg bG9ja19yZWxpZHMsIGFjcXVpcmUpOworCQkJYm1zX2ZyZWUobG9ja19yZWxpZHMpOworCQl9CisK KwkJLyogQ2xlYW4gdXAgcHJlcCBpZiByZWxlYXNpbmcgbG9ja3MuICovCisJCWlmICghYWNxdWly ZSkKKwkJCUV4ZWNQcmVwQ2xlYW51cChwcmVwKTsKKwl9CisKKwlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY29udGV4dCk7Cit9CisKIC8qCiAgKiBBY3F1aXJlUGxhbm5lckxvY2tzOiBhY3F1aXJl IGxvY2tzIG5lZWRlZCBmb3IgcGxhbm5pbmcgb2YgYSBxdWVyeXRyZWUgbGlzdDsKICAqIG9yIHJl bGVhc2UgdGhlbSBpZiBhY3F1aXJlIGlzIGZhbHNlLgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv bm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCAz MGQ4ODliNTRjNS4uNmZiODZkYzA1ZjYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3Bh dGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0xNDEsNiAr MTQxLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUGxhbm5lckdsb2JhbAogCS8qICJmbGF0IiBsaXN0IG9m IGludGVnZXIgUlQgaW5kZXhlcyAqLwogCUxpc3QJICAgKnJlc3VsdFJlbGF0aW9uczsKIAorCS8q ICJmbGF0IiBsaXN0IG9mIGludGVnZXIgUlQgaW5kZXhlcyAob25lIHBlciBNb2RpZnlUYWJsZSBu b2RlKSAqLworCUxpc3QJICAgKmZpcnN0UmVzdWx0UmVsczsKKwogCS8qICJmbGF0IiBsaXN0IG9m IEFwcGVuZFJlbEluZm9zICovCiAJTGlzdAkgICAqYXBwZW5kUmVsYXRpb25zOwogCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3Bs YW5ub2Rlcy5oCmluZGV4IGM0MzkzYTk0MzIxLi5lYjIxMWYxYmE1NiAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5v ZGVzLmgKQEAgLTEyMyw2ICsxMjMsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgUGxhbm5lZFN0bXQKIAkv KiBpbnRlZ2VyIGxpc3Qgb2YgUlQgaW5kZXhlcywgb3IgTklMICovCiAJTGlzdAkgICAqcmVzdWx0 UmVsYXRpb25zOwogCisJLyoKKwkgKiBydGFibGUgaW5kZXhlcyBvZiBmaXJzdCB0YXJnZXQgcmVs YXRpb24gaW4gZWFjaCBNb2RpZnlUYWJsZSBub2RlIGluIHRoZQorCSAqIHBsYW4gZm9yIElOU0VS VC9VUERBVEUvREVMRVRFL01FUkdFLiAgTklMIGlmIHJlc3VsdFJlbGF0aW9ucyBpcyBOSUwuCisJ ICoKKwkgKiBUaGVzZSBhcmUgdXNlZCBieSBBY3F1aXJlRXhlY3V0b3JMb2Nrc1VucHJ1bmVkKCkg dG8gZW5zdXJlIHRoYXQgdGhlCisJICogZmlyc3QgcmVzdWx0IHJlbCBmb3IgZWFjaCBNb2RpZnlU YWJsZSByZW1haW5zIGxvY2tlZCBldmVuIGlmIHBydW5lZDsKKwkgKiBzZWUgRXhlY0luaXRNb2Rp ZnlUYWJsZSgpIGZvciB0aGUgZXhlY3V0b3Igc2lkZSBhc3N1bXB0aW9ucy4KKwkgKi8KKwlMaXN0 CSAgICpmaXJzdFJlc3VsdFJlbHM7CisKIAkvKiBsaXN0IG9mIEFwcGVuZFJlbEluZm8gbm9kZXMg Ki8KIAlMaXN0CSAgICphcHBlbmRSZWxhdGlvbnM7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3V0aWxzL3BsYW5jYWNoZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmgKaW5kZXgg YTgyYjY2ZDRiYzIuLmM3YjhlYzRiZTM5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9w bGFuY2FjaGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wbGFuY2FjaGUuaApAQCAtMTk3LDYg KzE5NywyNyBAQCB0eXBlZGVmIHN0cnVjdCBDYWNoZWRFeHByZXNzaW9uCiB9IENhY2hlZEV4cHJl c3Npb247CiAKIAorLyoKKyAqIENhY2hlZFBsYW5QcmVwRGF0YQorICogICAgICBDYXJyaWVzIEV4 ZWN1dG9yUHJlcCByZXN1bHRzIGZvciBlYWNoIFBsYW5uZWRTdG10IGluIGEgQ2FjaGVkUGxhbiwK KyAqICAgICAgYWxvbmcgd2l0aCBjb250ZXh0IGFuZCBvd25lciBpbmZvcm1hdGlvbiBuZWVkZWQg dG8gYWxsb2NhdGUgdGhlbS4KKyAqCisgKiBwcmVwX2xpc3QgaXMgaW5kZXhlZCBvbmUtdG8tb25l IHdpdGggQ2FjaGVkUGxhbi0+c3RtdF9saXN0LCBhbmQgaXMKKyAqIHBvcHVsYXRlZCB3aGVuIEdl dENhY2hlZFBsYW4oKSBwcmVwYXJlcyBhIHJldXNlZCBnZW5lcmljIHBsYW4uICBUaGUKKyAqIHNh bWUgbGlzdCBpcyBsYXRlciB1c2VkIHRvIGRldGVybWluZSB3aGljaCByZWxhdGlvbnMgdG8gdW5s b2NrIHdoZW4KKyAqIHJlbGVhc2luZyBleGVjdXRpb24gbG9ja3MuCisgKgorICogRXhlY3V0b3JQ cmVwIHN0YXRlIGlzIGFsbG9jYXRlZCBpbiAnY29udGV4dCcgYW5kIG93bmVkIGJ5ICdvd25lcicu CisgKi8KK3R5cGVkZWYgc3RydWN0IENhY2hlZFBsYW5QcmVwRGF0YQoreworCUxpc3QgICAqcHJl cF9saXN0OwkJLyogb25lIEV4ZWNQcmVwIHBlciBQbGFubmVkU3RtdCwgb3IgTlVMTCAqLworCVBh cmFtTGlzdEluZm8gcGFyYW1zOwkvKiBwYXJhbXMgdmlzaWJsZSB0byBFeGVjdXRvclByZXAgKi8K KwlNZW1vcnlDb250ZXh0IGNvbnRleHQ7CS8qIHdoZXJlIHRvIGFsbG9jYXRlIEV4ZWNQcmVwIG9i amVjdHMgKi8KKwlSZXNvdXJjZU93bmVyIG93bmVyOwkvKiBSZXNvdXJjZU93bmVyIGZvciBFeGVj dXRvclByZXAgc3RhdGUgKi8KKwlpbnQJCWVmbGFnczsJCQkvKiBleGVjdXRvciBmbGFncyB0byBw YXNzIHRvIEV4ZWN1dG9yUHJlcCAqLworfSBDYWNoZWRQbGFuUHJlcERhdGE7CisKIGV4dGVybiB2 b2lkIEluaXRQbGFuQ2FjaGUodm9pZCk7CiBleHRlcm4gdm9pZCBSZXNldFBsYW5DYWNoZSh2b2lk KTsKIApAQCAtMjQwLDcgKzI2MSw4IEBAIGV4dGVybiBMaXN0ICpDYWNoZWRQbGFuR2V0VGFyZ2V0 TGlzdChDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLAogZXh0ZXJuIENhY2hlZFBsYW4gKkdl dENhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKIAkJCQkJCQkJIFBhcmFt TGlzdEluZm8gYm91bmRQYXJhbXMsCiAJCQkJCQkJCSBSZXNvdXJjZU93bmVyIG93bmVyLAotCQkJ CQkJCQkgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpOworCQkJCQkJCQkgUXVlcnlFbnZpcm9u bWVudCAqcXVlcnlFbnYsCisJCQkJCQkJCSBDYWNoZWRQbGFuUHJlcERhdGEgKmNwcmVwKTsKIGV4 dGVybiB2b2lkIFJlbGVhc2VDYWNoZWRQbGFuKENhY2hlZFBsYW4gKnBsYW4sIFJlc291cmNlT3du ZXIgb3duZXIpOwogCiBleHRlcm4gYm9vbCBDYWNoZWRQbGFuQWxsb3dzU2ltcGxlVmFsaWRpdHlD aGVjayhDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLAotLSAKMi40Ny4zCgo= --000000000000245a530643c9ca87 Content-Type: application/octet-stream; name="v2-0003-Reuse-partition-pruning-results-in-parallel-worke.patch" Content-Disposition: attachment; filename="v2-0003-Reuse-partition-pruning-results-in-parallel-worke.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mi35318n2 RnJvbSBkOWQ5NWUwOTk2MWRjYjgyMzZlNWZlN2IyZGE0YTM3ZmRhOGU1OTQ0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMTEgTm92IDIwMjUgMjI6MTc6NDcgKzA5MDAKU3ViamVjdDogW1BBVENIIHYy IDMvNV0gUmV1c2UgcGFydGl0aW9uIHBydW5pbmcgcmVzdWx0cyBpbiBwYXJhbGxlbCB3b3JrZXJz CgpQYXNzIHRoZSBsZWFkZXIncyBpbml0aWFsIHBhcnRpdGlvbiBwcnVuaW5nIHJlc3VsdHMgYW5k IHVucHJ1bmVkCnJlbGlkcyB0byBwYXJhbGxlbCB3b3JrZXJzIGFuZCByZXVzZSB0aGVtIHZpYSBF eGVjdXRvclByZXAoKS4gVGhpcwphdm9pZHMgcmVwZWF0aW5nIHBydW5pbmcgbG9naWMgaW4gd29y a2Vycywgd2hpY2ggaXMgbm90IG9ubHkKcmVkdW5kYW50IGJ1dCBhbHNvIHJpc2tzIGRpdmVyZ2Vu Y2UgZHVlIHRvIG5vbmRldGVybWluaXNtIGluIHBydW5pbmcKc3RlcHMgb3IgcGFyYW1ldGVyIGV2 YWx1YXRpb24gdGltaW5nLgoKSW50cm9kdWNlIEV4ZWNDaGVja0luaXRpYWxQcnVuaW5nUmVzdWx0 cygpIHRvIHZlcmlmeSB0aGF0IHRoZSByZXN1bHRzCm1hdGNoIHdoYXQgdGhlIHdvcmtlciB3b3Vs ZCBjb21wdXRlLiBUaGlzIGNoZWNrIGhlbHBzIGNhdGNoCmluY29uc2lzdGVuY2llcyBhY3Jvc3Mg bGVhZGVyIGFuZCB3b3JrZXIgcHJ1bmluZyBsb2dpYy4KCldoaWxlIHZhbHVhYmxlIG9uIGl0cyBv d24sIHRoaXMgY2hhbmdlIGFsc28gbGF5cyB0aGUgZm91bmRhdGlvbiBmb3IKZnV0dXJlIG9wdGlt aXphdGlvbnMgd2hlcmUgdGhlIGxlYWRlciBtYXkgdGFrZSBsb2NrcyBvbmx5IG9uCnN1cnZpdmlu ZyBwYXJ0aXRpb25zLiBFbnN1cmluZyB0aGF0IHdvcmtlcnMgZm9sbG93IGlkZW50aWNhbCBwcnVu aW5nCmRlY2lzaW9ucyBtYWtlcyBzdWNoIHNlbGVjdGl2ZSBsb2NraW5nIHNhZmUuCi0tLQogc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMgIHwgNjcgKysrKysrKysrKysrKysrKysr KysrKysrKysrLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jIHwgMzUgKysr KysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmggfCAgMSAr CiAzIGZpbGVzIGNoYW5nZWQsIDEwMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYwppbmRleCBhZWRiZDk1NjZkNi4uNzUxNTkwYWRjYzkg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCisrKyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5j bHVkZSAicG9zdGdyZXMuaCIKIAogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5oIgor I2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCIKICNpbmNsdWRlICJleGVjdXRvci9l eGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVBZ2cuaCIKICNpbmNsdWRlICJleGVj dXRvci9ub2RlQXBwZW5kLmgiCkBAIC02NSw2ICs2Niw4IEBACiAjZGVmaW5lIFBBUkFMTEVMX0tF WV9RVUVSWV9URVhUCQlVSU5UNjRDT05TVCgweEUwMDAwMDAwMDAwMDAwMDgpCiAjZGVmaW5lIFBB UkFMTEVMX0tFWV9KSVRfSU5TVFJVTUVOVEFUSU9OIFVJTlQ2NENPTlNUKDB4RTAwMDAwMDAwMDAw MDAwOSkKICNkZWZpbmUgUEFSQUxMRUxfS0VZX1dBTF9VU0FHRQkJCVVJTlQ2NENPTlNUKDB4RTAw MDAwMDAwMDAwMDAwQSkKKyNkZWZpbmUgUEFSQUxMRUxfS0VZX1BBUlRJVElPTl9QUlVORV9SRVNV TFRTCVVJTlQ2NENPTlNUKDB4RTAwMDAwMDAwMDAwMDAwQikKKyNkZWZpbmUgUEFSQUxMRUxfS0VZ X1VOUFJVTkVEX1JFTElEUwlVSU5UNjRDT05TVCgweEUwMDAwMDAwMDAwMDAwMEMpCiAKICNkZWZp bmUgUEFSQUxMRUxfVFVQTEVfUVVFVUVfU0laRQkJNjU1MzYKIApAQCAtNjA4LDEyICs2MTEsMTgg QEAgRXhlY0luaXRQYXJhbGxlbFBsYW4oUGxhblN0YXRlICpwbGFuc3RhdGUsIEVTdGF0ZSAqZXN0 YXRlLAogCUZpeGVkUGFyYWxsZWxFeGVjdXRvclN0YXRlICpmcGVzOwogCWNoYXIJICAgKnBzdG10 X2RhdGE7CiAJY2hhcgkgICAqcHN0bXRfc3BhY2U7CisJY2hhcgkgICAqcGFydF9wcnVuZV9yZXN1 bHRzX2RhdGE7CisJY2hhcgkgICAqcGFydF9wcnVuZV9yZXN1bHRzX3NwYWNlOworCWNoYXIJICAg KnVucHJ1bmVkX3JlbGlkc19kYXRhOworCWNoYXIJICAgKnVucHJ1bmVkX3JlbGlkc19zcGFjZTsK IAljaGFyCSAgICpwYXJhbWxpc3RpbmZvX3NwYWNlOwogCUJ1ZmZlclVzYWdlICpidWZ1c2FnZV9z cGFjZTsKIAlXYWxVc2FnZSAgICp3YWx1c2FnZV9zcGFjZTsKIAlTaGFyZWRFeGVjdXRvckluc3Ry dW1lbnRhdGlvbiAqaW5zdHJ1bWVudGF0aW9uID0gTlVMTDsKIAlTaGFyZWRKaXRJbnN0cnVtZW50 YXRpb24gKmppdF9pbnN0cnVtZW50YXRpb24gPSBOVUxMOwogCWludAkJCXBzdG10X2xlbjsKKwlp bnQJCQlwYXJ0X3BydW5lX3Jlc3VsdHNfbGVuOworCWludAkJCXVucHJ1bmVkX3JlbGlkc19sZW47 CiAJaW50CQkJcGFyYW1saXN0aW5mb19sZW47CiAJaW50CQkJaW5zdHJ1bWVudGF0aW9uX2xlbiA9 IDA7CiAJaW50CQkJaml0X2luc3RydW1lbnRhdGlvbl9sZW4gPSAwOwpAQCAtNjQyLDYgKzY1MSw4 IEBAIEV4ZWNJbml0UGFyYWxsZWxQbGFuKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFU3RhdGUgKmVz dGF0ZSwKIAogCS8qIEZpeCB1cCBhbmQgc2VyaWFsaXplIHBsYW4gdG8gYmUgc2VudCB0byB3b3Jr ZXJzLiAqLwogCXBzdG10X2RhdGEgPSBFeGVjU2VyaWFsaXplUGxhbihwbGFuc3RhdGUtPnBsYW4s IGVzdGF0ZSk7CisJcGFydF9wcnVuZV9yZXN1bHRzX2RhdGEgPSBub2RlVG9TdHJpbmcoZXN0YXRl LT5lc19wYXJ0X3BydW5lX3Jlc3VsdHMpOworCXVucHJ1bmVkX3JlbGlkc19kYXRhID0gbm9kZVRv U3RyaW5nKGVzdGF0ZS0+ZXNfdW5wcnVuZWRfcmVsaWRzKTsKIAogCS8qIENyZWF0ZSBhIHBhcmFs bGVsIGNvbnRleHQuICovCiAJcGN4dCA9IENyZWF0ZVBhcmFsbGVsQ29udGV4dCgicG9zdGdyZXMi LCAiUGFyYWxsZWxRdWVyeU1haW4iLCBud29ya2Vycyk7CkBAIC02NjgsNiArNjc5LDE2IEBAIEV4 ZWNJbml0UGFyYWxsZWxQbGFuKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFU3RhdGUgKmVzdGF0ZSwK IAlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsIHBzdG10X2xlbik7CiAJ c2htX3RvY19lc3RpbWF0ZV9rZXlzKCZwY3h0LT5lc3RpbWF0b3IsIDEpOwogCisJLyogRXN0aW1h dGUgc3BhY2UgZm9yIHNlcmlhbGl6ZWQgcGFydF9wcnVuZV9yZXN1bHRzLiAqLworCXBhcnRfcHJ1 bmVfcmVzdWx0c19sZW4gPSBzdHJsZW4ocGFydF9wcnVuZV9yZXN1bHRzX2RhdGEpICsgMTsKKwlz aG1fdG9jX2VzdGltYXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsIHBhcnRfcHJ1bmVfcmVzdWx0 c19sZW4pOworCXNobV90b2NfZXN0aW1hdGVfa2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAxKTsKKwor CS8qIEVzdGltYXRlIHNwYWNlIGZvciBzZXJpYWxpemVkIHVucHJ1bmVkX3JlbGlkcy4gKi8KKwl1 bnBydW5lZF9yZWxpZHNfbGVuID0gc3RybGVuKHVucHJ1bmVkX3JlbGlkc19kYXRhKSArIDE7CisJ c2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCB1bnBydW5lZF9yZWxpZHNf bGVuKTsKKwlzaG1fdG9jX2VzdGltYXRlX2tleXMoJnBjeHQtPmVzdGltYXRvciwgMSk7CisKIAkv KiBFc3RpbWF0ZSBzcGFjZSBmb3Igc2VyaWFsaXplZCBQYXJhbUxpc3RJbmZvLiAqLwogCXBhcmFt bGlzdGluZm9fbGVuID0gRXN0aW1hdGVQYXJhbUxpc3RTcGFjZShlc3RhdGUtPmVzX3BhcmFtX2xp c3RfaW5mbyk7CiAJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBwYXJh bWxpc3RpbmZvX2xlbik7CkBAIC03NjksNiArNzkwLDE2IEBAIEV4ZWNJbml0UGFyYWxsZWxQbGFu KFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFU3RhdGUgKmVzdGF0ZSwKIAltZW1jcHkocHN0bXRfc3Bh Y2UsIHBzdG10X2RhdGEsIHBzdG10X2xlbik7CiAJc2htX3RvY19pbnNlcnQocGN4dC0+dG9jLCBQ QVJBTExFTF9LRVlfUExBTk5FRFNUTVQsIHBzdG10X3NwYWNlKTsKIAorCS8qIFN0b3JlIHNlcmlh bGl6ZWQgcGFydF9wcnVuZV9yZXN1bHRzICovCisJcGFydF9wcnVuZV9yZXN1bHRzX3NwYWNlID0g c2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2MsIHBhcnRfcHJ1bmVfcmVzdWx0c19sZW4pOworCW1l bWNweShwYXJ0X3BydW5lX3Jlc3VsdHNfc3BhY2UsIHBhcnRfcHJ1bmVfcmVzdWx0c19kYXRhLCBw YXJ0X3BydW5lX3Jlc3VsdHNfbGVuKTsKKwlzaG1fdG9jX2luc2VydChwY3h0LT50b2MsIFBBUkFM TEVMX0tFWV9QQVJUSVRJT05fUFJVTkVfUkVTVUxUUywgcGFydF9wcnVuZV9yZXN1bHRzX3NwYWNl KTsKKworCS8qIFN0b3JlIHNlcmlhbGl6ZWQgdW5wcnVuZWRfcmVsaWRzICovCisJdW5wcnVuZWRf cmVsaWRzX3NwYWNlID0gc2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2MsIHVucHJ1bmVkX3JlbGlk c19sZW4pOworCW1lbWNweSh1bnBydW5lZF9yZWxpZHNfc3BhY2UsIHVucHJ1bmVkX3JlbGlkc19k YXRhLCB1bnBydW5lZF9yZWxpZHNfbGVuKTsKKwlzaG1fdG9jX2luc2VydChwY3h0LT50b2MsIFBB UkFMTEVMX0tFWV9VTlBSVU5FRF9SRUxJRFMsIHVucHJ1bmVkX3JlbGlkc19zcGFjZSk7CisKIAkv KiBTdG9yZSBzZXJpYWxpemVkIFBhcmFtTGlzdEluZm8uICovCiAJcGFyYW1saXN0aW5mb19zcGFj ZSA9IHNobV90b2NfYWxsb2NhdGUocGN4dC0+dG9jLCBwYXJhbWxpc3RpbmZvX2xlbik7CiAJc2ht X3RvY19pbnNlcnQocGN4dC0+dG9jLCBQQVJBTExFTF9LRVlfUEFSQU1MSVNUSU5GTywgcGFyYW1s aXN0aW5mb19zcGFjZSk7CkBAIC0xMjYzLDEwICsxMjk0LDE1IEBAIEV4ZWNQYXJhbGxlbEdldFF1 ZXJ5RGVzYyhzaG1fdG9jICp0b2MsIERlc3RSZWNlaXZlciAqcmVjZWl2ZXIsCiAJCQkJCQkgaW50 IGluc3RydW1lbnRfb3B0aW9ucykKIHsKIAljaGFyCSAgICpwc3RtdHNwYWNlOworCWNoYXIJICAg KnBhcnRfcHJ1bmVfcmVzdWx0c19zcGFjZTsKKwljaGFyCSAgICp1bnBydW5lZF9yZWxpZHNfc3Bh Y2U7CiAJY2hhcgkgICAqcGFyYW1zcGFjZTsKIAlQbGFubmVkU3RtdCAqcHN0bXQ7CisJTGlzdAkg ICAqcGFydF9wcnVuZV9yZXN1bHRzOworCUJpdG1hcHNldCAgKnVucHJ1bmVkX3JlbGlkczsKIAlQ YXJhbUxpc3RJbmZvIHBhcmFtTEk7CiAJY2hhcgkgICAqcXVlcnlTdHJpbmc7CisJRXhlY1ByZXAg ICAqcHJlcCA9IE5VTEw7CiAKIAkvKiBHZXQgdGhlIHF1ZXJ5IHN0cmluZyBmcm9tIHNoYXJlZCBt ZW1vcnkgKi8KIAlxdWVyeVN0cmluZyA9IHNobV90b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfS0VZ X1FVRVJZX1RFWFQsIGZhbHNlKTsKQEAgLTEyNzksOSArMTMxNSwzOCBAQCBFeGVjUGFyYWxsZWxH ZXRRdWVyeURlc2Moc2htX3RvYyAqdG9jLCBEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyLAogCXBhcmFt c3BhY2UgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVMX0tFWV9QQVJBTUxJU1RJTkZPLCBm YWxzZSk7CiAJcGFyYW1MSSA9IFJlc3RvcmVQYXJhbUxpc3QoJnBhcmFtc3BhY2UpOwogCisJLyog UmVjb25zdHJ1Y3QgbGVhZGVyLXN1cHBsaWVkIHBhcnRfcHJ1bmVfcmVzdWx0cyBhbmQgdW5wcnVu ZWRfcmVsaWRzLiAqLworCXBhcnRfcHJ1bmVfcmVzdWx0c19zcGFjZSA9CisJCXNobV90b2NfbG9v a3VwKHRvYywgUEFSQUxMRUxfS0VZX1BBUlRJVElPTl9QUlVORV9SRVNVTFRTLCBmYWxzZSk7CisJ cGFydF9wcnVuZV9yZXN1bHRzID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKHBhcnRfcHJ1bmVfcmVz dWx0c19zcGFjZSk7CisJdW5wcnVuZWRfcmVsaWRzX3NwYWNlID0KKwkJc2htX3RvY19sb29rdXAo dG9jLCBQQVJBTExFTF9LRVlfVU5QUlVORURfUkVMSURTLCBmYWxzZSk7CisJdW5wcnVuZWRfcmVs aWRzID0gKEJpdG1hcHNldCAqKSBzdHJpbmdUb05vZGUodW5wcnVuZWRfcmVsaWRzX3NwYWNlKTsK KworCS8qCisJICogSWYgcHJ1bmluZyB3YXMgZG9uZSBpbiB0aGUgbGVhZGVyLCBidWlsZCBhIHBy ZXAgZXN0YXRlIGluIHRoZSB3b3JrZXIKKwkgKiBhbmQgaW5qZWN0IHRoZSBsZWFkZXIncyBwcnVu aW5nIHJlc3VsdHMgaW50byBpdCBmb3IgcmV1c2UuCisJICovCisJaWYgKHBzdG10LT5wYXJ0UHJ1 bmVJbmZvcykKKwl7CisJCXByZXAgPSBFeGVjdXRvclByZXAocHN0bXQsIHBhcmFtTEksIEN1cnJl bnRSZXNvdXJjZU93bmVyLCBmYWxzZSwgMCk7CisJCUFzc2VydChwcmVwLT5wcmVwX2VzdGF0ZSk7 CisKKwkJcHJlcC0+cHJlcF9lc3RhdGUtPmVzX3BhcnRfcHJ1bmVfcmVzdWx0cyA9IHBhcnRfcHJ1 bmVfcmVzdWx0czsKKwkJcHJlcC0+cHJlcF9lc3RhdGUtPmVzX3VucHJ1bmVkX3JlbGlkcyA9CisJ CQlibXNfYWRkX21lbWJlcnMocHJlcC0+cHJlcF9lc3RhdGUtPmVzX3VucHJ1bmVkX3JlbGlkcywK KwkJCQkJCQl1bnBydW5lZF9yZWxpZHMpOworCisJCS8qCisJCSAqIFZlcmlmeSB0aGF0IHRoZSBw cnVuaW5nIHJlc3VsdHMgcGFzc2VkIGZyb20gdGhlIGxlYWRlciBtYXRjaAorCQkgKiB3aGF0IHRo ZSB3b3JrZXIgd291bGQgaW5kZXBlbmRlbnRseSBjb21wdXRlLgorCQkgKi8KKwkJRXhlY0NoZWNr SW5pdGlhbFBydW5pbmdSZXN1bHRzKHByZXAtPnByZXBfZXN0YXRlKTsKKwl9CisKIAkvKiBDcmVh dGUgYSBRdWVyeURlc2MgZm9yIHRoZSBxdWVyeS4gKi8KIAlyZXR1cm4gQ3JlYXRlUXVlcnlEZXNj KHBzdG10LAotCQkJCQkJICAgTlVMTCwKKwkJCQkJCSAgIHByZXAsCiAJCQkJCQkgICBxdWVyeVN0 cmluZywKIAkJCQkJCSAgIEdldEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRTbmFwc2hvdCwKIAkJ CQkJCSAgIHJlY2VpdmVyLCBwYXJhbUxJLCBOVUxMLCBpbnN0cnVtZW50X29wdGlvbnMpOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCmluZGV4IDE4N2E0ODBlNTA4Li4zYjQ1MGUzMzcz ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYwpAQCAtMTg3Miw2ICsxODcyLDQx IEBAIEV4ZWNEb0luaXRpYWxQcnVuaW5nKEVTdGF0ZSAqZXN0YXRlKQogCX0KIH0KIAorLyoKKyAq IEV4ZWNDaGVja0luaXRpYWxQcnVuaW5nUmVzdWx0cworICogICAgICBWZXJpZnkgcGFydGl0aW9u IHBydW5pbmcgcmVzdWx0cyBwYXNzZWQgZnJvbSB0aGUgbGVhZGVyIHByb2Nlc3MuCisgKgorICog VGhpcyBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZHVyaW5nIHBhcmFsbGVsIHdvcmtlciBxdWVy eSBzZXR1cC4KKyAqIEl0IHJlY29tcHV0ZXMgaW5pdGlhbCBwcnVuaW5nIHJlc3VsdHMgbG9jYWxs eSBhbmQgY29tcGFyZXMgdGhlbSB3aXRoCisgKiB0aG9zZSByZWNlaXZlZCBmcm9tIHRoZSBsZWFk ZXIuIEFueSBtaXNtYXRjaCBtYXkgaW5kaWNhdGUgYSBkaXZlcmdlbmNlCisgKiBiZXR3ZWVuIGxl YWRlciBhbmQgd29ya2VyIGxvZ2ljIG9yIGVudmlyb25tZW50LgorICovCit2b2lkCitFeGVjQ2hl Y2tJbml0aWFsUHJ1bmluZ1Jlc3VsdHMoRVN0YXRlICplc3RhdGUpCit7CisJTGlzdENlbGwgICAq bGM7CisJaW50CQkJaTsKKworCUFzc2VydChlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfcmVzdWx0cyAh PSBOVUxMKTsKKwlpID0gMDsKKwlmb3JlYWNoKGxjLCBlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfc3Rh dGVzKQorCXsKKwkJUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSA9IChQYXJ0aXRpb25Q cnVuZVN0YXRlICopIGxmaXJzdChsYyk7CisJCUJpdG1hcHNldCAqcmV1c2VfdmFsaWRzdWJwbGFu cyA9CisJCQkJbGlzdF9udGhfbm9kZShCaXRtYXBzZXQsIGVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9y ZXN1bHRzLCBpKTsKKwkJQml0bWFwc2V0ICAqdmFsaWRzdWJwbGFucyA9IE5VTEw7CisJCUJpdG1h cHNldCAgKnZhbGlkc3VicGxhbl9ydGlzID0gTlVMTDsKKworCQlpZiAocHJ1bmVzdGF0ZS0+ZG9f aW5pdGlhbF9wcnVuZSkKKwkJCXZhbGlkc3VicGxhbnMgPSBFeGVjRmluZE1hdGNoaW5nU3ViUGxh bnMocHJ1bmVzdGF0ZSwgdHJ1ZSwKKwkJCQkJCQkJCQkJCQkgJnZhbGlkc3VicGxhbl9ydGlzKTsK KwkJaWYgKGJtc19ub25lbXB0eV9kaWZmZXJlbmNlKHZhbGlkc3VicGxhbnMsIHJldXNlX3ZhbGlk c3VicGxhbnMpKQorCQkJZWxvZyhFUlJPUiwgImRpZmZlcmVudCB2YWxpZHN1YnBsbnMgaW4gcGFy YWxsZWwgd29ya2VyIik7CisJCWlmIChibXNfbm9uZW1wdHlfZGlmZmVyZW5jZSh2YWxpZHN1YnBs YW5fcnRpcywgZXN0YXRlLT5lc191bnBydW5lZF9yZWxpZHMpKQorCQkJZWxvZyhFUlJPUiwgImRp ZmZlcmVudCB1bnBydW5hYmxlX3JlbGlkcyBpbiBwYXJhbGxlbCB3b3JrZXIiKTsKKwl9Cit9CisK IC8qCiAgKiBFeGVjSW5pdFBhcnRpdGlvbkV4ZWNQcnVuaW5nCiAgKgkJSW5pdGlhbGl6ZSB0aGUg ZGF0YSBzdHJ1Y3R1cmVzIG5lZWRlZCBmb3IgcnVudGltZSAiZXhlYyIgcGFydGl0aW9uCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmggYi9zcmMvaW5jbHVk ZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmgKaW5kZXggYmE4Y2M1OTRmYzkuLjEyNmVmZDAwOGU1 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmgKKysrIGIv c3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oCkBAIC0xMzIsNiArMTMyLDcgQEAg dHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVTdGF0ZQogCiBleHRlcm4gdm9pZCBFeGVjQ3Jl YXRlUGFydGl0aW9uUHJ1bmVTdGF0ZXMoRVN0YXRlICplc3RhdGUpOwogZXh0ZXJuIHZvaWQgRXhl Y0RvSW5pdGlhbFBydW5pbmcoRVN0YXRlICplc3RhdGUpOworZXh0ZXJuIHZvaWQgRXhlY0NoZWNr SW5pdGlhbFBydW5pbmdSZXN1bHRzKEVTdGF0ZSAqZXN0YXRlKTsKIGV4dGVybiBQYXJ0aXRpb25Q cnVuZVN0YXRlICpFeGVjSW5pdFBhcnRpdGlvbkV4ZWNQcnVuaW5nKFBsYW5TdGF0ZSAqcGxhbnN0 YXRlLAogCQkJCQkJCQkJCQkJCQkgaW50IG5fdG90YWxfc3VicGxhbnMsCiAJCQkJCQkJCQkJCQkJ CSBpbnQgcGFydF9wcnVuZV9pbmRleCwKLS0gCjIuNDcuMwoK --000000000000245a530643c9ca87 Content-Type: application/octet-stream; name="v2-0002-Introduce-ExecutorPrep-and-refactor-executor-star.patch" Content-Disposition: attachment; filename="v2-0002-Introduce-ExecutorPrep-and-refactor-executor-star.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mi35318o3 RnJvbSAxMWUwMjYyZTMxZTM1NTM5ZjUwZTk2NTMxNTU5ZGI2Y2Q3ZTMyMTYwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMTEgTm92IDIwMjUgMjE6NDc6NDYgKzA5MDAKU3ViamVjdDogW1BBVENIIHYy IDIvNV0gSW50cm9kdWNlIEV4ZWN1dG9yUHJlcCBhbmQgcmVmYWN0b3IgZXhlY3V0b3Igc3RhcnR1 cAoKRmFjdG9yIHBlcm1pc3Npb24gY2hlY2tzLCByYW5nZSB0YWJsZSBpbml0aWFsaXphdGlvbiwg YW5kIGluaXRpYWwKcGFydGl0aW9uIHBydW5pbmcgb3V0IG9mIEluaXRQbGFuKCkgaW50byBhIG5l dyBFeGVjdXRvclByZXAoKQpoZWxwZXIuICBFeGVjdXRvclByZXAgYnVpbGRzIGFuIEVTdGF0ZSBj b250YWluaW5nIHRoZSBleGVjdXRvcgptZXRhZGF0YSBuZWVkZWQgYmVmb3JlIHBsYW4gZXhlY3V0 aW9uLCBpbmNsdWRpbmcgcGFydGl0aW9uCnBydW5pbmcgc3RhdGUgd2hlcmUgcGFydFBydW5lSW5m b3MgYXJlIHByZXNlbnQuCgpFeGVjdXRvclN0YXJ0KCkgbm93IGV4cGVjdHMgUXVlcnlEZXNjLT5w cmVwIHRvIHBvaW50IGF0IHN1Y2ggYW4KRXhlY1ByZXAgb2JqZWN0LiAgSWYgbm8gcHJlcCB3YXMg c3VwcGxpZWQgYnkgdGhlIGNhbGxlciwgaXQKaW52b2tlcyBFeGVjdXRvclByZXAoKSBpdHNlbGYg YW5kIGFkb3B0cyB0aGUgcmVzdWx0aW5nIEVTdGF0ZQpmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBx dWVyeS4gIFRoaXMga2VlcHMgdGhlIGV4ZWN1dG9yIHN0YXJ0dXAKYmVoYXZpb3VyIHVuY2hhbmdl ZCB3aGlsZSBtYWtpbmcgdGhlIHNldHVwIHdvcmsgY2FsbGFibGUKc2VwYXJhdGVseSB3aGVuIG5l ZWRlZC4KCkNyZWF0ZVF1ZXJ5RGVzYygpIGdyb3dzIGEgcHJlcCBhcmd1bWVudCBhbmQgc3RvcmVz IGl0IGluIHRoZQpRdWVyeURlc2MuICBQb3J0YWxzLCBTUEksIFNRTCBmdW5jdGlvbnMsIGFuZCBF WFBMQUlOIGFyZSB3aXJlZAp0byBjYXJyeSBhbiBvcHRpb25hbCBFeGVjUHJlcCBwb2ludGVyIGFs b25nc2lkZSB0aGUgUGxhbm5lZFN0bXQKbGlzdCwgYnV0IG1vc3QgY2FsbGVycyBzdGlsbCBwYXNz IE5VTEwgYW5kIGxldCBFeGVjdXRvclN0YXJ0KCkKcGVyZm9ybSB0aGUgc2V0dXAgbGF6aWx5LgoK QWRkIHRoZSBFeGVjUHJlcCBzdHJ1Y3QgYW5kIEV4ZWNQcmVwQ2xlYW51cCgpIHRvIGVuY2Fwc3Vs YXRlCm93bmVyc2hpcCBvZiB0aGUgcHJlcGFyZWQgRVN0YXRlIGFuZCBhbnkgY2FsbGVyIHNwZWNp ZmljCmNsZWFudXAgaG9vay4gIFVwZGF0ZSBleGVjdXRvci9SRUFETUUgYW5kIHJlbGF0ZWQgY29t bWVudHMgdG8KZG9jdW1lbnQgdGhlIG5ldyBjb250cm9sIGZsb3cgYW5kIHRoZSBzZXBhcmF0aW9u IGJldHdlZW4KcHJlcGFyYXRpb24gYW5kIGV4ZWN1dGlvbi4KLS0tCiBzcmMvYmFja2VuZC9jb21t YW5kcy9jb3B5dG8uYyAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0 ZWFzLmMgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jICAgICAg IHwgICA3ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNpb24uYyAgICAgfCAgIDEgKwog c3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jICAgICAgIHwgICAyICstCiBzcmMvYmFja2Vu ZC9jb21tYW5kcy9wb3J0YWxjbWRzLmMgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv cHJlcGFyZS5jICAgICAgIHwgIDExICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9SRUFETUUgICAg ICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMgICAgICB8IDE3 OSArKysrKysrKysrKysrKysrKysrKysrKy0tLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQ YXJhbGxlbC5jICB8ICAgMSArCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMg fCAgIDMgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMgICAgIHwgICAxICsKIHNy Yy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jICAgICAgICAgICB8ICAxMCArKwogc3JjL2JhY2tlbmQv dGNvcC9wb3N0Z3Jlcy5jICAgICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5 LmMgICAgICAgICAgICB8ICAyNyArKystCiBzcmMvYmFja2VuZC91dGlscy9tbWdyL3BvcnRhbG1l bS5jICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oICAgICAgIHwgICAz ICstCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjZGVzYy5oICAgICAgfCAgIDMgKy0KIHNyYy9p bmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggICAgICB8ICAxMSArKwogc3JjL2luY2x1ZGUvbm9k ZXMvZXhlY25vZGVzLmggICAgICAgIHwgIDQ4ICsrKysrKysKIHNyYy9pbmNsdWRlL3V0aWxzL3Bv cnRhbC5oICAgICAgICAgICB8ICAgMiArCiAyMSBmaWxlcyBjaGFuZ2VkLCAyODYgaW5zZXJ0aW9u cygrKSwgNDAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv Y29weXRvLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYwppbmRleCBjZWY0NTI1ODRl NS4uNWVmYmIwOTQ5YzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCkBAIC04NzAsNyArODcwLDcgQEAg QmVnaW5Db3B5VG8oUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkoKERSX2NvcHkgKikgZGVzdCktPmNz dGF0ZSA9IGNzdGF0ZTsKIAogCQkvKiBDcmVhdGUgYSBRdWVyeURlc2MgcmVxdWVzdGluZyBubyBv dXRwdXQgKi8KLQkJY3N0YXRlLT5xdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgcHN0 YXRlLT5wX3NvdXJjZXRleHQsCisJCWNzdGF0ZS0+cXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNj KHBsYW4sIE5VTEwsIHBzdGF0ZS0+cF9zb3VyY2V0ZXh0LAogCQkJCQkJCQkJCQlHZXRBY3RpdmVT bmFwc2hvdCgpLAogCQkJCQkJCQkJCQlJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkJCQkJCWRlc3Qs IE5VTEwsIE5VTEwsIDApOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRl YXMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKaW5kZXggMWNjYzJlNTVjNjQu LjllYWJlNDkyMGNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKQEAgLTMzNCw3ICszMzQsNyBA QCBFeGVjQ3JlYXRlVGFibGVBcyhQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVRhYmxlQXNTdG10 ICpzdG10LAogCQlVcGRhdGVBY3RpdmVTbmFwc2hvdENvbW1hbmRJZCgpOwogCiAJCS8qIENyZWF0 ZSBhIFF1ZXJ5RGVzYywgcmVkaXJlY3Rpbmcgb3V0cHV0IHRvIG91ciB0dXBsZSByZWNlaXZlciAq LwotCQlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgcHN0YXRlLT5wX3NvdXJjZXRl eHQsCisJCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBOVUxMLCBwc3RhdGUtPnBf c291cmNldGV4dCwKIAkJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRTbmFwc2hv dCwKIAkJCQkJCQkJCWRlc3QsIHBhcmFtcywgcXVlcnlFbnYsIDApOwogCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBs YWluLmMKaW5kZXggN2U2OTlmODU5NWUuLmQ2YWIzNjk3ZGQ5IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFp bi5jCkBAIC0zNzAsNyArMzcwLDcgQEAgc3RhbmRhcmRfRXhwbGFpbk9uZVF1ZXJ5KFF1ZXJ5ICpx dWVyeSwgaW50IGN1cnNvck9wdGlvbnMsCiAJfQogCiAJLyogcnVuIGl0IChpZiBuZWVkZWQpIGFu ZCBwcm9kdWNlIG91dHB1dCAqLwotCUV4cGxhaW5PbmVQbGFuKHBsYW4sIGludG8sIGVzLCBxdWVy eVN0cmluZywgcGFyYW1zLCBxdWVyeUVudiwKKwlFeHBsYWluT25lUGxhbihwbGFuLCBOVUxMLCBp bnRvLCBlcywgcXVlcnlTdHJpbmcsIHBhcmFtcywgcXVlcnlFbnYsCiAJCQkJICAgJnBsYW5kdXJh dGlvbiwgKGVzLT5idWZmZXJzID8gJmJ1ZnVzYWdlIDogTlVMTCksCiAJCQkJICAgZXMtPm1lbW9y eSA/ICZtZW1fY291bnRlcnMgOiBOVUxMKTsKIH0KQEAgLTQ5Miw3ICs0OTIsOCBAQCBFeHBsYWlu T25lVXRpbGl0eShOb2RlICp1dGlsaXR5U3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0 YXRlICplcywKICAqIHRvIGNhbGwgaXQuCiAgKi8KIHZvaWQKLUV4cGxhaW5PbmVQbGFuKFBsYW5u ZWRTdG10ICpwbGFubmVkc3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRlICplcywK K0V4cGxhaW5PbmVQbGFuKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgRXhlY1ByZXAgKnByZXAs CisJCQkgICBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAogCQkJICAgY29uc3Qg Y2hhciAqcXVlcnlTdHJpbmcsIFBhcmFtTGlzdEluZm8gcGFyYW1zLAogCQkJICAgUXVlcnlFbnZp cm9ubWVudCAqcXVlcnlFbnYsIGNvbnN0IGluc3RyX3RpbWUgKnBsYW5kdXJhdGlvbiwKIAkJCSAg IGNvbnN0IEJ1ZmZlclVzYWdlICpidWZ1c2FnZSwKQEAgLTU0OCw3ICs1NDksNyBAQCBFeHBsYWlu T25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxh aW5TdGF0ZSAqZXMsCiAJCWRlc3QgPSBOb25lX1JlY2VpdmVyOwogCiAJLyogQ3JlYXRlIGEgUXVl cnlEZXNjIGZvciB0aGUgcXVlcnkgKi8KLQlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxh bm5lZHN0bXQsIHF1ZXJ5U3RyaW5nLAorCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFu bmVkc3RtdCwgcHJlcCwgcXVlcnlTdHJpbmcsCiAJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCks IEludmFsaWRTbmFwc2hvdCwKIAkJCQkJCQkJZGVzdCwgcGFyYW1zLCBxdWVyeUVudiwgaW5zdHJ1 bWVudF9vcHRpb24pOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNp b24uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jCmluZGV4IDkzZWYxYWQxMDZm Li4zY2NhNmQ0NWVjMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9u LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMKQEAgLTk5Myw2ICs5OTMs NyBAQCBleGVjdXRlX3NxbF9zdHJpbmcoY29uc3QgY2hhciAqc3FsLCBjb25zdCBjaGFyICpmaWxl bmFtZSkKIAkJCQlRdWVyeURlc2MgICpxZGVzYzsKIAogCQkJCXFkZXNjID0gQ3JlYXRlUXVlcnlE ZXNjKHN0bXQsCisJCQkJCQkJCQkJTlVMTCwKIAkJCQkJCQkJCQlzcWwsCiAJCQkJCQkJCQkJR2V0 QWN0aXZlU25hcHNob3QoKSwgTlVMTCwKIAkJCQkJCQkJCQlkZXN0LCBOVUxMLCBOVUxMLCAwKTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL21hdHZpZXcuYwppbmRleCBlZjdjMGQ2MjRmMS4uMzBjYmY5ZjI2NGYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYworKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9tYXR2aWV3LmMKQEAgLTQzNyw3ICs0MzcsNyBAQCByZWZyZXNoX21hdHZpZXdfZGF0 YWZpbGwoRGVzdFJlY2VpdmVyICpkZXN0LCBRdWVyeSAqcXVlcnksCiAJVXBkYXRlQWN0aXZlU25h cHNob3RDb21tYW5kSWQoKTsKIAogCS8qIENyZWF0ZSBhIFF1ZXJ5RGVzYywgcmVkaXJlY3Rpbmcg b3V0cHV0IHRvIG91ciB0dXBsZSByZWNlaXZlciAqLwotCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5 RGVzYyhwbGFuLCBxdWVyeVN0cmluZywKKwlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxh biwgTlVMTCwgcXVlcnlTdHJpbmcsCiAJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCksIEludmFs aWRTbmFwc2hvdCwKIAkJCQkJCQkJZGVzdCwgTlVMTCwgTlVMTCwgMCk7CiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3BvcnRhbGNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3BvcnRhbGNtZHMuYwppbmRleCBlYzk2YzJlZmNkMy4uYWMxZGRkMjVhYmEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3BvcnRhbGNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9wb3J0YWxjbWRzLmMKQEAgLTExOCw2ICsxMTgsNyBAQCBQZXJmb3JtQ3Vyc29yT3BlbihQ YXJzZVN0YXRlICpwc3RhdGUsIERlY2xhcmVDdXJzb3JTdG10ICpjc3RtdCwgUGFyYW1MaXN0SW5m byBwYQogCQkJCQkgIHF1ZXJ5U3RyaW5nLAogCQkJCQkgIENNRFRBR19TRUxFQ1QsCS8qIGN1cnNv cidzIHF1ZXJ5IGlzIGFsd2F5cyBhIFNFTEVDVCAqLwogCQkJCQkgIGxpc3RfbWFrZTEocGxhbiks CisJCQkJCSAgbGlzdF9tYWtlMShOVUxMKSwKIAkJCQkJICBOVUxMKTsKIAogCS8qLS0tLS0tLS0t LQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvcHJlcGFyZS5jCmluZGV4IDM0YjY0MTBkNmEyLi5hZmQ0NDljNzNiYSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3ByZXBhcmUuYwpAQCAtMjA1LDYgKzIwNSw3IEBAIEV4ZWN1dGVRdWVyeShQYXJz ZVN0YXRlICpwc3RhdGUsCiAJCQkJCSAgcXVlcnlfc3RyaW5nLAogCQkJCQkgIGVudHJ5LT5wbGFu c291cmNlLT5jb21tYW5kVGFnLAogCQkJCQkgIHBsYW5fbGlzdCwKKwkJCQkJICBOSUwsCiAJCQkJ CSAgY3BsYW4pOwogCiAJLyoKQEAgLTU3NSw2ICs1NzYsNyBAQCBFeHBsYWluRXhlY3V0ZVF1ZXJ5 KEV4ZWN1dGVTdG10ICpleGVjc3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRlICpl cywKIAljb25zdCBjaGFyICpxdWVyeV9zdHJpbmc7CiAJQ2FjaGVkUGxhbiAqY3BsYW47CiAJTGlz dAkgICAqcGxhbl9saXN0OworCUxpc3QJICAgKnByZXBfbGlzdDsKIAlMaXN0Q2VsbCAgICpwOwog CVBhcmFtTGlzdEluZm8gcGFyYW1MSSA9IE5VTEw7CiAJRVN0YXRlCSAgICplc3RhdGUgPSBOVUxM OwpAQCAtNTg1LDYgKzU4Nyw3IEBAIEV4cGxhaW5FeGVjdXRlUXVlcnkoRXhlY3V0ZVN0bXQgKmV4 ZWNzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAogCU1lbW9yeUNvbnRl eHRDb3VudGVycyBtZW1fY291bnRlcnM7CiAJTWVtb3J5Q29udGV4dCBwbGFubmVyX2N0eCA9IE5V TEw7CiAJTWVtb3J5Q29udGV4dCBzYXZlZF9jdHggPSBOVUxMOworCWludAkJCWk7CiAKIAlpZiAo ZXMtPm1lbW9yeSkKIAl7CkBAIC02NTAsMTQgKzY1MywyMCBAQCBFeHBsYWluRXhlY3V0ZVF1ZXJ5 KEV4ZWN1dGVTdG10ICpleGVjc3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRlICpl cywKIAl9CiAKIAlwbGFuX2xpc3QgPSBjcGxhbi0+c3RtdF9saXN0OworCXByZXBfbGlzdCA9IE5J TDsKIAogCS8qIEV4cGxhaW4gZWFjaCBxdWVyeSAqLworCWkgPSAwOwogCWZvcmVhY2gocCwgcGxh bl9saXN0KQogCXsKIAkJUGxhbm5lZFN0bXQgKnBzdG10ID0gbGZpcnN0X25vZGUoUGxhbm5lZFN0 bXQsIHApOworCQlFeGVjUHJlcCAqcHJlcCA9IHByZXBfbGlzdCA/CisJCQkoRXhlY1ByZXAgKikg bGlzdF9udGgocHJlcF9saXN0LCBpKSA6IE5VTEw7CiAKKwkJaSsrOwogCQlpZiAocHN0bXQtPmNv bW1hbmRUeXBlICE9IENNRF9VVElMSVRZKQotCQkJRXhwbGFpbk9uZVBsYW4ocHN0bXQsIGludG8s IGVzLCBxdWVyeV9zdHJpbmcsIHBhcmFtTEksIHBzdGF0ZS0+cF9xdWVyeUVudiwKKwkJCUV4cGxh aW5PbmVQbGFuKHBzdG10LCBwcmVwLAorCQkJCQkJICAgaW50bywgZXMsIHF1ZXJ5X3N0cmluZywg cGFyYW1MSSwgcHN0YXRlLT5wX3F1ZXJ5RW52LAogCQkJCQkJICAgJnBsYW5kdXJhdGlvbiwgKGVz LT5idWZmZXJzID8gJmJ1ZnVzYWdlIDogTlVMTCksCiAJCQkJCQkgICBlcy0+bWVtb3J5ID8gJm1l bV9jb3VudGVycyA6IE5VTEwpOwogCQllbHNlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVj dXRvci9SRUFETUUgYi9zcmMvYmFja2VuZC9leGVjdXRvci9SRUFETUUKaW5kZXggNTRmNDc4MmYz MWIuLjk1YjVlYzU4YzU1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9SRUFETUUK KysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvUkVBRE1FCkBAIC0yOTEsMTAgKzI5MSwxNiBAQCBR dWVyeSBQcm9jZXNzaW5nIENvbnRyb2wgRmxvdwogCiBUaGlzIGlzIGEgc2tldGNoIG9mIGNvbnRy b2wgZmxvdyBmb3IgZnVsbCBxdWVyeSBwcm9jZXNzaW5nOgogCisgICAgRXhlY3V0b3JQcmVwCisJ CU1heSBiZSBydW4gYmVmb3JlIEV4ZWN1dG9yU3RhcnQgKGUuZy4sIGZvciBwbGFuIHZhbGlkYXRp b24pLCBvcgorCQlpbXBsaWNpdGx5IGZyb20gRXhlY3V0b3JTdGFydCBpZiBub3QgZG9uZSBlYXJs aWVyLiAgUGVyZm9ybXMgcmFuZ2UKKwkJdGFibGUgaW5pdGlhbGl6YXRpb24sIHBlcm1pc3Npb24g Y2hlY2tzLCBhbmQgaW5pdGlhbCBwYXJ0aXRpb24gcHJ1bmluZy4KKwkJUmV0dXJucyBhbiBFeGVj UHJlcCB3cmFwcGVyIHdpdGggRVN0YXRlIHRoYXQgRXhlY3V0b3JTdGFydCBtYXkgcmV1c2UuCisK IAlDcmVhdGVRdWVyeURlc2MKIAogCUV4ZWN1dG9yU3RhcnQKLQkJQ3JlYXRlRXhlY3V0b3JTdGF0 ZQorCQlDcmVhdGVFeGVjdXRvclN0YXRlIChvciByZXVzZSBvbmUgZnJvbSBFeGVjUHJlcCBpZiBw cmVzZW50KQogCQkJY3JlYXRlcyBwZXItcXVlcnkgY29udGV4dAogCQlzd2l0Y2ggdG8gcGVyLXF1 ZXJ5IGNvbnRleHQgdG8gcnVuIEV4ZWNJbml0Tm9kZQogCQlBZnRlclRyaWdnZXJCZWdpblF1ZXJ5 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY01haW4uYwppbmRleCAyN2M5ZWVjNjk3Yi4uMzlkZTBiOTNhMWMgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKKysrIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY01haW4uYwpAQCAtMTcxLDggKzE3MSwyNiBAQCBzdGFuZGFyZF9FeGVj dXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogCiAJLyoKIAkgKiBC dWlsZCBFU3RhdGUsIHN3aXRjaCBpbnRvIHBlci1xdWVyeSBtZW1vcnkgY29udGV4dCBmb3Igc3Rh cnR1cC4KKwkgKgorCSAqIElmIEV4ZWN1dG9yUHJlcCgpIHJhbiBlYXJsaWVyIChlLmcuLCB0byBk byBpbml0aWFsIHBydW5pbmcgZHVyaW5nIHBsYW4KKwkgKiB2YWxpZGl0eSBjaGVja2luZyksIHJl dXNlIGl0cyBFU3RhdGUgdG8gYXZvaWQgcmVkb2luZyByYW5nZSB0YWJsZSBzZXR1cAorCSAqIGFu ZCBwcnVuaW5nLiBPdGhlcndpc2UsIGNyZWF0ZSBhIGZyZXNoIEVTdGF0ZSBhcyB1c3VhbC4KIAkg Ki8KLQllc3RhdGUgPSBDcmVhdGVFeGVjdXRvclN0YXRlKCk7CisJaWYgKHF1ZXJ5RGVzYy0+cHJl cCA9PSBOVUxMKQorCQlxdWVyeURlc2MtPnByZXAgPSBFeGVjdXRvclByZXAocXVlcnlEZXNjLT5w bGFubmVkc3RtdCwKKwkJCQkJCQkJCSAgIHF1ZXJ5RGVzYy0+cGFyYW1zLAorCQkJCQkJCQkJICAg Q3VycmVudFJlc291cmNlT3duZXIsCisJCQkJCQkJCQkgICB0cnVlLAorCQkJCQkJCQkJICAgZWZs YWdzKTsKKwlBc3NlcnQocXVlcnlEZXNjLT5wcmVwKTsKKwllc3RhdGUgPSBxdWVyeURlc2MtPnBy ZXAtPnByZXBfZXN0YXRlOworCisJLyoKKwkgKiBFeGVjdXRvciBpcyBhZG9wdGluZyB0aGUgcHJl cCdzIEVTdGF0ZS4gTWFyayBpdCBzbyBFeGVjUHJlcENsZWFudXAoKQorCSAqIGRvZXNuJ3QgdHJ5 IHRvIGZyZWUgaXQgcmVkdW5kYW50bHkuCisJICovCisJcXVlcnlEZXNjLT5wcmVwLT5vd25zX2Vz dGF0ZSA9IGZhbHNlOworCiAJcXVlcnlEZXNjLT5lc3RhdGUgPSBlc3RhdGU7CiAKIAlvbGRjb250 ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGVzdGF0ZS0+ZXNfcXVlcnlfY3h0KTsKQEAgLTI2 Myw2ICsyODEsMTM2IEBAIHN0YW5kYXJkX0V4ZWN1dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVyeURl c2MsIGludCBlZmxhZ3MpCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwogfQog CisvKgorICogRXhlY3V0b3JQcmVwOiBwcmVwYXJlIGV4ZWN1dG9yIHN0YXRlIGZvciBhIFBsYW5u ZWRTdG10IG91dHNpZGUgRXhlY3V0b3JTdGFydC4KKyAqCisgKiBQZXJmb3JtcyByYW5nZSB0YWJs ZSBpbml0aWFsaXphdGlvbiwgcGVybWlzc2lvbiBjaGVja3MsIGFuZCBpbml0aWFsCisgKiBwYXJ0 aXRpb24gcHJ1bmluZyBpZiBwYXJ0UHJ1bmVJbmZvcyBhcmUgcHJlc2VudCBhbmQgZG9faW5pdGlh bF9wcnVuaW5nIGlzCisgKiB0cnVlLgorICoKKyAqIFRoaXMgaXMgaW50ZW5kZWQgZm9yIGNhbGxl cnMgdGhhdCBuZWVkIGV4ZWN1dG9yIG1ldGFkYXRhIGFoZWFkIG9mIGFjdHVhbAorICogZXhlY3V0 aW9uLiBUeXBpY2FsIHVzZSBjYXNlcyBpbmNsdWRlOgorICoJLSBkZXRlcm1pbmluZyB3aGljaCBy ZWxhdGlvbnMgbXVzdCBiZSBsb2NrZWQgZHVyaW5nIHBsYW4gY2FjaGUgdmFsaWRhdGlvbjsKKyAq CS0gaW5pdGlhbGl6aW5nIHVucHJ1bmVkIHJlbGlkcyBhbmQgdmFsaWQgc3VicGxhbnMgaW4gcGFy YWxsZWwgd29ya2VycworICoJICB1c2luZyBzdGF0ZSBjb3BpZWQgZnJvbSB0aGUgbGVhZGVyLgor ICoKKyAqIFRoZSBleGVjdXRvciBjYW4gcmV1c2UgdGhlIHJlc3VsdGluZyBzdGF0ZSB0byBhdm9p ZCByZWR1bmRhbnQgc2V0dXAgZHVyaW5nCisgKiBFeGVjdXRvclN0YXJ0KCkuCisgKgorICogUmV0 dXJucyBhbiBFeGVjUHJlcCB3cmFwcGVyIHRoYXQgb3ducyB0aGUgRVN0YXRlIGFuZCBjYW4gYmUg cmV1c2VkCisgKiBvciBjbGVhbmVkIHVwIGxhdGVyLgorICovCitFeGVjUHJlcCAqCitFeGVjdXRv clByZXAoUGxhbm5lZFN0bXQgKnBzdG10LCBQYXJhbUxpc3RJbmZvIHBhcmFtcywgUmVzb3VyY2VP d25lciBvd25lciwKKwkJCSBib29sIGRvX2luaXRpYWxfcHJ1bmluZywgaW50IGVmbGFncykKK3sK KwlSZXNvdXJjZU93bmVyIG9sZG93bmVyOworCUVTdGF0ZSAqZXN0YXRlOworCWJvb2wJc25hcHNo b3Rfc2V0OworCisJaWYgKHBzdG10LT5jb21tYW5kVHlwZSA9PSBDTURfVVRJTElUWSkKKwkJcmV0 dXJuIE5VTEw7CisKKwkvKiBQcnVuaW5nIG1heSB1c2UgZXhwcmVzc2lvbnMgdGhhdCByZXF1aXJl IGFuIGFjdGl2ZSBzbmFwc2hvdC4gKi8KKwlzbmFwc2hvdF9zZXQgPSBmYWxzZTsKKwlpZiAoIUFj dGl2ZVNuYXBzaG90U2V0KCkpCisJeworCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rp b25TbmFwc2hvdCgpKTsKKwkJc25hcHNob3Rfc2V0ID0gdHJ1ZTsKKwl9CisJQXNzZXJ0KEFjdGl2 ZVNuYXBzaG90U2V0KCkpOworCisJZXN0YXRlID0gQ3JlYXRlRXhlY3V0b3JTdGF0ZSgpOworCWVz dGF0ZS0+ZXNfcGxhbm5lZHN0bXQgPSBwc3RtdDsKKwllc3RhdGUtPmVzX3BhcnRfcHJ1bmVfaW5m b3MgPSBwc3RtdC0+cGFydFBydW5lSW5mb3M7CisJZXN0YXRlLT5lc19wYXJhbV9saXN0X2luZm8g PSBwYXJhbXM7CisJZXN0YXRlLT5lc190b3BfZWZsYWdzID0gZWZsYWdzOworCisJLyoKKwkgKiBE byBwZXJtaXNzaW9ucyBjaGVja3MuCisJICovCisJRXhlY0NoZWNrUGVybWlzc2lvbnMocHN0bXQt PnJ0YWJsZSwgcHN0bXQtPnBlcm1JbmZvcywgdHJ1ZSk7CisKKwkvKgorCSAqIEluaXRpYWxpemUg cmFuZ2UgdGFibGUuCisJICovCisJRXhlY0luaXRSYW5nZVRhYmxlKGVzdGF0ZSwgcHN0bXQtPnJ0 YWJsZSwgcHN0bXQtPnBlcm1JbmZvcywKKwkJCQkJICAgYm1zX2NvcHkocHN0bXQtPnVucHJ1bmFi bGVSZWxpZHMpKTsKKworCS8qCisJICogRW5zdXJlIGxvY2tzIHRha2VuIGR1cmluZyBpbml0aWFs IHBydW5pbmcgYXJlIHRyYWNrZWQgdW5kZXIgdGhlIGdpdmVuCisJICogUmVzb3VyY2VPd25lciAo ZS5nLiwgb25lIGFzc29jaWF0ZWQgd2l0aCBDYWNoZWRQbGFuIHZhbGlkYXRpb24pLgorCSAqLwor CW9sZG93bmVyID0gQ3VycmVudFJlc291cmNlT3duZXI7CisJQ3VycmVudFJlc291cmNlT3duZXIg PSBvd25lcjsKKworCS8qCisJICogU2V0IHVwIFBhcnRpdGlvblBydW5lU3RhdGUgc3RydWN0dXJl cyBuZWVkZWQgZm9yIGJvdGggaW5pdGlhbCBhbmQKKwkgKiBydW50aW1lIHBhcnRpdGlvbiBwcnVu aW5nLiBUaGVzZSBzdHJ1Y3R1cmVzIGFyZSBidWlsdCBmcm9tIHRoZQorCSAqIFBhcnRpdGlvblBy dW5lSW5mbyBlbnRyaWVzIGluIHRoZSBwbGFuIHRyZWUuCisJICoKKwkgKiBJZiBkb19pbml0aWFs X3BydW5pbmcgaXMgdHJ1ZSwgYWxzbyBwZXJmb3JtIGluaXRpYWwgcHJ1bmluZyB0byBjb21wdXRl CisJICogdGhlIHN1YnNldCBvZiBjaGlsZCBzdWJwbGFucyB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQu IFRoZSByZXN1bHRzLAorCSAqIHdoaWNoIGFyZSBiaXRtYXBzZXRzIG9mIHNlbGVjdGVkIGNoaWxk IGluZGV4ZXMsIGFyZSBzYXZlZCBpbgorCSAqIGVzX3BhcnRfcHJ1bmVfcmVzdWx0cy4gVGhpcyBs aXN0IGlzIHBhcmFsbGVsIHRvIGVzX3BhcnRfcHJ1bmVfaW5mb3MuCisJICoKKwkgKiBJbiBwYXJh bGxlbCB3b3JrZXJzLCBkb19pbml0aWFsX3BydW5pbmcgc2hvdWxkIGJlIGZhbHNlIC0tIHRoZXkg cmVjZWl2ZQorCSAqIGVzX3BhcnRfcHJ1bmVfcmVzdWx0cyBmcm9tIHRoZSBsZWFkZXIgcHJvY2Vz cyBhbmQgc2hvdWxkIG9ubHkgaW5pdGlhbGl6ZQorCSAqIHRoZSBQYXJ0aXRpb25QcnVuZVN0YXRl cy4KKwkgKi8KKwlFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZXMoZXN0YXRlKTsKKwlpZiAo ZG9faW5pdGlhbF9wcnVuaW5nKQorCQlFeGVjRG9Jbml0aWFsUHJ1bmluZyhlc3RhdGUpOworCisJ Q3VycmVudFJlc291cmNlT3duZXIgPSBvbGRvd25lcjsKKworCS8qIFJlbGVhc2Ugc25hcHNob3Qg aWYgd2UgZ290IG9uZSAqLworCWlmIChzbmFwc2hvdF9zZXQpCisJCVBvcEFjdGl2ZVNuYXBzaG90 KCk7CisKKwlyZXR1cm4gQ3JlYXRlRXhlY1ByZXAoZXN0YXRlLCBDdXJyZW50TWVtb3J5Q29udGV4 dCwgTlVMTCwgTlVMTCk7Cit9CisKKy8qCisgKiBDcmVhdGVFeGVjUHJlcDogaW5pdGlhbGl6ZSBF eGVjUHJlcCB3cmFwcGVyIHdpdGggb3B0aW9uYWwgY2xlYW51cCBtZXRhZGF0YS4KKyAqLworRXhl Y1ByZXAgKgorQ3JlYXRlRXhlY1ByZXAoRVN0YXRlICplc3RhdGUsIE1lbW9yeUNvbnRleHQgY29u dGV4dCwKKwkJCSAgIGV4ZWNwcmVwX2NsZWFudXBfZm4gY2xlYW51cCwgdm9pZCAqY2xlYW51cF9h cmcpCit7CisJRXhlY1ByZXAgKnByZXAgPSBwYWxsb2MwKHNpemVvZihFeGVjUHJlcCkpOworCisJ cHJlcC0+cHJlcF9lc3RhdGUgPSBlc3RhdGU7CisJcHJlcC0+Y29udGV4dCA9IGNvbnRleHQ7CisJ cHJlcC0+Y2xlYW51cCA9IGNsZWFudXA7CisJcHJlcC0+Y2xlYW51cF9hcmcgPSBjbGVhbnVwX2Fy ZzsKKwlwcmVwLT5vd25zX2VzdGF0ZSA9IHRydWU7CisKKwlyZXR1cm4gcHJlcDsKK30KKworLyoK KyAqIEV4ZWNQcmVwQ2xlYW51cDogZnJlZSBFeGVjUHJlcCByZXNvdXJjZXMgbm90IGFkb3B0ZWQg YnkgdGhlIGV4ZWN1dG9yLgorICoKKyAqIE9ubHkgZnJlZXMgdGhlIEVTdGF0ZSBpZiBpdCB3YXNu J3QgdGFrZW4gb3ZlciBieSBFeGVjdXRvclN0YXJ0KCkuCisgKiBBbHdheXMgcnVucyB0aGUgb3B0 aW9uYWwgdXNlci1kZWZpbmVkIGNsZWFudXAgY2FsbGJhY2suCisgKi8KK3ZvaWQKK0V4ZWNQcmVw Q2xlYW51cChFeGVjUHJlcCAqcHJlcCkKK3sKKwlpZiAocHJlcCA9PSBOVUxMKQorCQlyZXR1cm47 CisKKwlpZiAocHJlcC0+cHJlcF9lc3RhdGUgJiYgcHJlcC0+b3duc19lc3RhdGUpCisJeworCQlF eGVjQ2xvc2VSYW5nZVRhYmxlUmVsYXRpb25zKHByZXAtPnByZXBfZXN0YXRlKTsKKwkJRnJlZUV4 ZWN1dG9yU3RhdGUocHJlcC0+cHJlcF9lc3RhdGUpOworCX0KKworCWlmIChwcmVwLT5jbGVhbnVw KQorCQlwcmVwLT5jbGVhbnVwKHByZXAtPmNsZWFudXBfYXJnKTsKK30KKwogLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog ICoJCUV4ZWN1dG9yUnVuCiAgKgpAQCAtODI0LDcgKzk3Miw2IEBAIEV4ZWNDaGVja1hhY3RSZWFk T25seShQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQpCiAJCVByZXZlbnRDb21tYW5kSWZQYXJhbGxl bE1vZGUoQ3JlYXRlQ29tbWFuZE5hbWUoKE5vZGUgKikgcGxhbm5lZHN0bXQpKTsKIH0KIAotCiAv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiAgKgkJSW5pdFBsYW4KICAqCkBAIC04MzgsMzcgKzk4NSwxNSBAQCBJbml0UGxh bihRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncykKIAlDbWRUeXBlCQlvcGVyYXRpb24g PSBxdWVyeURlc2MtPm9wZXJhdGlvbjsKIAlQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQgPSBxdWVy eURlc2MtPnBsYW5uZWRzdG10OwogCVBsYW4JICAgKnBsYW4gPSBwbGFubmVkc3RtdC0+cGxhblRy ZWU7Ci0JTGlzdAkgICAqcmFuZ2VUYWJsZSA9IHBsYW5uZWRzdG10LT5ydGFibGU7CiAJRVN0YXRl CSAgICplc3RhdGUgPSBxdWVyeURlc2MtPmVzdGF0ZTsKIAlQbGFuU3RhdGUgICpwbGFuc3RhdGU7 CiAJVHVwbGVEZXNjCXR1cFR5cGU7CiAJTGlzdENlbGwgICAqbDsKIAlpbnQJCQlpOwogCi0JLyoK LQkgKiBEbyBwZXJtaXNzaW9ucyBjaGVja3MKLQkgKi8KLQlFeGVjQ2hlY2tQZXJtaXNzaW9ucyhy YW5nZVRhYmxlLCBwbGFubmVkc3RtdC0+cGVybUluZm9zLCB0cnVlKTsKLQotCS8qCi0JICogaW5p dGlhbGl6ZSB0aGUgbm9kZSdzIGV4ZWN1dGlvbiBzdGF0ZQotCSAqLwotCUV4ZWNJbml0UmFuZ2VU YWJsZShlc3RhdGUsIHJhbmdlVGFibGUsIHBsYW5uZWRzdG10LT5wZXJtSW5mb3MsCi0JCQkJCSAg IGJtc19jb3B5KHBsYW5uZWRzdG10LT51bnBydW5hYmxlUmVsaWRzKSk7Ci0KLQllc3RhdGUtPmVz X3BsYW5uZWRzdG10ID0gcGxhbm5lZHN0bXQ7Ci0JZXN0YXRlLT5lc19wYXJ0X3BydW5lX2luZm9z ID0gcGxhbm5lZHN0bXQtPnBhcnRQcnVuZUluZm9zOwotCi0JLyoKLQkgKiBQZXJmb3JtIHJ1bnRp bWUgImluaXRpYWwiIHBydW5pbmcgdG8gaWRlbnRpZnkgd2hpY2ggY2hpbGQgc3VicGxhbnMsCi0J ICogY29ycmVzcG9uZGluZyB0byB0aGUgY2hpbGRyZW4gb2YgcGxhbiBub2RlcyB0aGF0IGNvbnRh aW4KLQkgKiBQYXJ0aXRpb25QcnVuZUluZm8gc3VjaCBhcyBBcHBlbmQsIHdpbGwgbm90IGJlIGV4 ZWN1dGVkLiBUaGUgcmVzdWx0cywKLQkgKiB3aGljaCBhcmUgYml0bWFwc2V0cyBvZiBpbmRleGVz IG9mIHRoZSBjaGlsZCBzdWJwbGFucyB0aGF0IHdpbGwgYmUKLQkgKiBleGVjdXRlZCwgYXJlIHNh dmVkIGluIGVzX3BhcnRfcHJ1bmVfcmVzdWx0cy4gIFRoZXNlIHJlc3VsdHMgY29ycmVzcG9uZAot CSAqIHRvIGVhY2ggUGFydGl0aW9uUHJ1bmVJbmZvIGVudHJ5LCBhbmQgdGhlIGVzX3BhcnRfcHJ1 bmVfcmVzdWx0cyBsaXN0IGlzCi0JICogcGFyYWxsZWwgdG8gZXNfcGFydF9wcnVuZV9pbmZvcy4K LQkgKi8KLQlFeGVjRG9Jbml0aWFsUHJ1bmluZyhlc3RhdGUpOworCS8qIEV4ZWN1dG9yUHJlcCgp IG11c3QgaGF2ZSBiZWVuIGRvbmUuICovCisJQXNzZXJ0KHF1ZXJ5RGVzYy0+cHJlcCk7CisJQXNz ZXJ0KGVzdGF0ZSA9PSBxdWVyeURlc2MtPnByZXAtPnByZXBfZXN0YXRlKTsKIAogCS8qCiAJICog TmV4dCwgYnVpbGQgdGhlIEV4ZWNSb3dNYXJrIGFycmF5IGZyb20gdGhlIFBsYW5Sb3dNYXJrKHMp LCBpZiBhbnkuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwu YyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCmluZGV4IGYwOThhNTU1N2Nm Li5hZWRiZDk1NjZkNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFs bGVsLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMKQEAgLTEyODEs NiArMTI4MSw3IEBAIEV4ZWNQYXJhbGxlbEdldFF1ZXJ5RGVzYyhzaG1fdG9jICp0b2MsIERlc3RS ZWNlaXZlciAqcmVjZWl2ZXIsCiAKIAkvKiBDcmVhdGUgYSBRdWVyeURlc2MgZm9yIHRoZSBxdWVy eS4gKi8KIAlyZXR1cm4gQ3JlYXRlUXVlcnlEZXNjKHBzdG10LAorCQkJCQkJICAgTlVMTCwKIAkJ CQkJCSAgIHF1ZXJ5U3RyaW5nLAogCQkJCQkJICAgR2V0QWN0aXZlU25hcHNob3QoKSwgSW52YWxp ZFNuYXBzaG90LAogCQkJCQkJICAgcmVjZWl2ZXIsIHBhcmFtTEksIE5VTEwsIGluc3RydW1lbnRf b3B0aW9ucyk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9u LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKaW5kZXggODhiMTUwYzhk NzcuLjE4N2E0ODBlNTA4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFy dGl0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCkBAIC0y MzY4LDYgKzIzNjgsOSBAQCBJbml0RXhlY1BhcnRpdGlvblBydW5lQ29udGV4dHMoUGFydGl0aW9u UHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSwKIAlBc3NlcnQocGFyZW50X3BsYW4gIT0gTlVMTCk7CiAJ ZXN0YXRlID0gcGFyZW50X3BsYW4tPnN0YXRlOwogCisJLyogV291bGRuJ3QgYmUgYXZhaWxhYmxl IGF0IEV4ZWN1dG9yUHJlcCgpIHRpbWUuICovCisJcHJ1bmVzdGF0ZS0+ZWNvbnRleHQtPmVjeHRf cGFyYW1fZXhlY192YWxzID0gZXN0YXRlLT5lc19wYXJhbV9leGVjX3ZhbHM7CisKIAkvKgogCSAq IE5vIG5lZWQgdG8gZml4IHN1YnBsYW5zIG1hcHMgaWYgaW5pdGlhbCBwcnVuaW5nIGRpZG4ndCBl bGltaW5hdGUgYW55CiAJICogc3VicGxhbnMuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVj dXRvci9mdW5jdGlvbnMuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCmluZGV4 IDYzMGQ3MDhkMmEzLi42MzMzMTBjNWY1YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZnVuY3Rpb25zLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMKQEAg LTEzNjIsNiArMTM2Miw3IEBAIHBvc3RxdWVsX3N0YXJ0KGV4ZWN1dGlvbl9zdGF0ZSAqZXMsIFNR TEZ1bmN0aW9uQ2FjaGVQdHIgZmNhY2hlKQogCQlkZXN0ID0gTm9uZV9SZWNlaXZlcjsKIAogCWVz LT5xZCA9IENyZWF0ZVF1ZXJ5RGVzYyhlcy0+c3RtdCwKKwkJCQkJCQkgTlVMTCwKIAkJCQkJCQkg ZmNhY2hlLT5mdW5jLT5zcmMsCiAJCQkJCQkJIEdldEFjdGl2ZVNuYXBzaG90KCksCiAJCQkJCQkJ IEludmFsaWRTbmFwc2hvdCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivc3BpLmMKaW5kZXggNjUzNTAwYjM4ZGMuLjdhM2NiOTQ0 ZDZmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9zcGkuYworKysgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9zcGkuYwpAQCAtMTY4NSw2ICsxNjg1LDcgQEAgU1BJX2N1cnNvcl9vcGVu X2ludGVybmFsKGNvbnN0IGNoYXIgKm5hbWUsIFNQSVBsYW5QdHIgcGxhbiwKIAkJCQkJICBxdWVy eV9zdHJpbmcsCiAJCQkJCSAgcGxhbnNvdXJjZS0+Y29tbWFuZFRhZywKIAkJCQkJICBzdG10X2xp c3QsCisJCQkJCSAgTklMLAogCQkJCQkgIGNwbGFuKTsKIAogCS8qCkBAIC0yNTAwLDYgKzI1MDEs OCBAQCBfU1BJX2V4ZWN1dGVfcGxhbihTUElQbGFuUHRyIHBsYW4sIGNvbnN0IFNQSUV4ZWN1dGVP cHRpb25zICpvcHRpb25zLAogCQlDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlID0gKENhY2hl ZFBsYW5Tb3VyY2UgKikgbGZpcnN0KGxjMSk7CiAJCUxpc3QJICAgKnN0bXRfbGlzdDsKIAkJTGlz dENlbGwgICAqbGMyOworCQlMaXN0CSAgICpwcmVwX2xpc3Q7CisJCWludAkJCWk7CiAKIAkJc3Bp Y2FsbGJhY2thcmcucXVlcnkgPSBwbGFuc291cmNlLT5xdWVyeV9zdHJpbmc7CiAKQEAgLTI1Nzgs NiArMjU4MSw3IEBAIF9TUElfZXhlY3V0ZV9wbGFuKFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJ RXhlY3V0ZU9wdGlvbnMgKm9wdGlvbnMsCiAJCQkJCQkJICBwbGFuX293bmVyLCBfU1BJX2N1cnJl bnQtPnF1ZXJ5RW52KTsKIAogCQlzdG10X2xpc3QgPSBjcGxhbi0+c3RtdF9saXN0OworCQlwcmVw X2xpc3QgPSBOSUw7CiAKIAkJLyoKIAkJICogSWYgd2Ugd2VyZW4ndCBnaXZlbiBhIHNwZWNpZmlj IHNuYXBzaG90IHRvIHVzZSwgYW5kIHRoZSBzdGF0ZW1lbnQKQEAgLTI2MTUsMTIgKzI2MTksMTcg QEAgX1NQSV9leGVjdXRlX3BsYW4oU1BJUGxhblB0ciBwbGFuLCBjb25zdCBTUElFeGVjdXRlT3B0 aW9ucyAqb3B0aW9ucywKIAkJCX0KIAkJfQogCisJCWkgPSAwOwogCQlmb3JlYWNoKGxjMiwgc3Rt dF9saXN0KQogCQl7CiAJCQlQbGFubmVkU3RtdCAqc3RtdCA9IGxmaXJzdF9ub2RlKFBsYW5uZWRT dG10LCBsYzIpOworCQkJRXhlY1ByZXAgKnByZXAgPSBwcmVwX2xpc3QgPworCQkJCWxpc3RfbnRo KHByZXBfbGlzdCwgaSkgOiBOVUxMOwogCQkJYm9vbAkJY2FuU2V0VGFnID0gc3RtdC0+Y2FuU2V0 VGFnOwogCQkJRGVzdFJlY2VpdmVyICpkZXN0OwogCisJCQlpKys7CisKIAkJCS8qCiAJCQkgKiBS ZXNldCBvdXRwdXQgc3RhdGUuICAoTm90ZSB0aGF0IGlmIGEgbm9uLVNQSSByZWNlaXZlciBpcyB1 c2VkLAogCQkJICogX1NQSV9jdXJyZW50LT5wcm9jZXNzZWQgd2lsbCBzdGF5IHplcm8sIGFuZCB0 aGF0J3Mgd2hhdCB3ZSdsbApAQCAtMjY5MCw2ICsyNjk5LDcgQEAgX1NQSV9leGVjdXRlX3BsYW4o U1BJUGxhblB0ciBwbGFuLCBjb25zdCBTUElFeGVjdXRlT3B0aW9ucyAqb3B0aW9ucywKIAkJCQkJ c25hcCA9IEludmFsaWRTbmFwc2hvdDsKIAogCQkJCXFkZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHN0 bXQsCisJCQkJCQkJCQkJcHJlcCwKIAkJCQkJCQkJCQlwbGFuc291cmNlLT5xdWVyeV9zdHJpbmcs CiAJCQkJCQkJCQkJc25hcCwgY3Jvc3NjaGVja19zbmFwc2hvdCwKIAkJCQkJCQkJCQlkZXN0LApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jIGIvc3JjL2JhY2tlbmQvdGNv cC9wb3N0Z3Jlcy5jCmluZGV4IDJiZDg5MTAyNjg2Li5kMzk2NGExMmExNCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdy ZXMuYwpAQCAtMTIzMiw2ICsxMjMyLDcgQEAgZXhlY19zaW1wbGVfcXVlcnkoY29uc3QgY2hhciAq cXVlcnlfc3RyaW5nKQogCQkJCQkJICBxdWVyeV9zdHJpbmcsCiAJCQkJCQkgIGNvbW1hbmRUYWcs CiAJCQkJCQkgIHBsYW50cmVlX2xpc3QsCisJCQkJCQkgIE5JTCwKIAkJCQkJCSAgTlVMTCk7CiAK IAkJLyoKQEAgLTIwMzMsNiArMjAzNCw3IEBAIGV4ZWNfYmluZF9tZXNzYWdlKFN0cmluZ0luZm8g aW5wdXRfbWVzc2FnZSkKIAkJCQkJICBxdWVyeV9zdHJpbmcsCiAJCQkJCSAgcHNyYy0+Y29tbWFu ZFRhZywKIAkJCQkJICBjcGxhbi0+c3RtdF9saXN0LAorCQkJCQkgIE5JTCwKIAkJCQkJICBjcGxh bik7CiAKIAkvKiBQb3J0YWwgaXMgZGVmaW5lZCwgc2V0IHRoZSBwbGFuIElEIGJhc2VkIG9uIGl0 cyBjb250ZW50cy4gKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMgYi9z cmMvYmFja2VuZC90Y29wL3BxdWVyeS5jCmluZGV4IGZkZTc4YzU1MTYwLi44MmMyOTU1MDJiMCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYworKysgYi9zcmMvYmFja2VuZC90 Y29wL3BxdWVyeS5jCkBAIC0zNyw2ICszNyw3IEBAIFBvcnRhbAkJQWN0aXZlUG9ydGFsID0gTlVM TDsKIAogCiBzdGF0aWMgdm9pZCBQcm9jZXNzUXVlcnkoUGxhbm5lZFN0bXQgKnBsYW4sCisJCQkJ CQkgRXhlY1ByZXAgKnByZXAsCiAJCQkJCQkgY29uc3QgY2hhciAqc291cmNlVGV4dCwKIAkJCQkJ CSBQYXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJCQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVu diwKQEAgLTY2LDYgKzY3LDcgQEAgc3RhdGljIHZvaWQgRG9Qb3J0YWxSZXdpbmQoUG9ydGFsIHBv cnRhbCk7CiAgKi8KIFF1ZXJ5RGVzYyAqCiBDcmVhdGVRdWVyeURlc2MoUGxhbm5lZFN0bXQgKnBs YW5uZWRzdG10LAorCQkJCUV4ZWNQcmVwICpwcmVwLAogCQkJCWNvbnN0IGNoYXIgKnNvdXJjZVRl eHQsCiAJCQkJU25hcHNob3Qgc25hcHNob3QsCiAJCQkJU25hcHNob3QgY3Jvc3NjaGVja19zbmFw c2hvdCwKQEAgLTc4LDYgKzgwLDcgQEAgQ3JlYXRlUXVlcnlEZXNjKFBsYW5uZWRTdG10ICpwbGFu bmVkc3RtdCwKIAogCXFkLT5vcGVyYXRpb24gPSBwbGFubmVkc3RtdC0+Y29tbWFuZFR5cGU7CS8q IG9wZXJhdGlvbiAqLwogCXFkLT5wbGFubmVkc3RtdCA9IHBsYW5uZWRzdG10OwkvKiBwbGFuICov CisJcWQtPnByZXAgPSBwcmVwOwkJLyogZXhlY3V0b3IgcHJlcCBvdXRwdXQgKi8KIAlxZC0+c291 cmNlVGV4dCA9IHNvdXJjZVRleHQ7CS8qIHF1ZXJ5IHRleHQgKi8KIAlxZC0+c25hcHNob3QgPSBS ZWdpc3RlclNuYXBzaG90KHNuYXBzaG90KTsJLyogc25hcHNob3QgKi8KIAkvKiBSSSBjaGVjayBz bmFwc2hvdCAqLwpAQCAtMTEyLDYgKzExNSwxMyBAQCBGcmVlUXVlcnlEZXNjKFF1ZXJ5RGVzYyAq cWRlc2MpCiAJVW5yZWdpc3RlclNuYXBzaG90KHFkZXNjLT5zbmFwc2hvdCk7CiAJVW5yZWdpc3Rl clNuYXBzaG90KHFkZXNjLT5jcm9zc2NoZWNrX3NuYXBzaG90KTsKIAorCS8qIEV4ZWNQcmVwIGNs ZWFudXAgaWYgbmVjZXNzYXJ5ICovCisJaWYgKHFkZXNjLT5wcmVwKQorCXsKKwkJRXhlY1ByZXBD bGVhbnVwKHFkZXNjLT5wcmVwKTsKKwkJcWRlc2MtPnByZXAgPSBOVUxMOworCX0KKwogCS8qIE9u bHkgdGhlIFF1ZXJ5RGVzYyBpdHNlbGYgbmVlZCBiZSBmcmVlZCAqLwogCXBmcmVlKHFkZXNjKTsK IH0KQEAgLTEyMyw2ICsxMzMsNyBAQCBGcmVlUXVlcnlEZXNjKFF1ZXJ5RGVzYyAqcWRlc2MpCiAg KgkJUE9SVEFMX09ORV9SRVRVUk5JTkcsIG9yIFBPUlRBTF9PTkVfTU9EX1dJVEggcG9ydGFsCiAg KgogICoJcGxhbjogdGhlIHBsYW4gdHJlZSBmb3IgdGhlIHF1ZXJ5CisgKglwcmVwOiBFeGVjUHJl cCBmb3IgdGhlIHBsYW4gKG91dHB1dCBvZiBFeGVjdXRvclByZXAoKSkKICAqCXNvdXJjZVRleHQ6 IHRoZSBzb3VyY2UgdGV4dCBvZiB0aGUgcXVlcnkKICAqCXBhcmFtczogYW55IHBhcmFtZXRlcnMg bmVlZGVkCiAgKglkZXN0OiB3aGVyZSB0byBzZW5kIHJlc3VsdHMKQEAgLTEzNSw2ICsxNDYsNyBA QCBGcmVlUXVlcnlEZXNjKFF1ZXJ5RGVzYyAqcWRlc2MpCiAgKi8KIHN0YXRpYyB2b2lkCiBQcm9j ZXNzUXVlcnkoUGxhbm5lZFN0bXQgKnBsYW4sCisJCQkgRXhlY1ByZXAgKnByZXAsCiAJCQkgY29u c3QgY2hhciAqc291cmNlVGV4dCwKIAkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJCSBRdWVy eUVudmlyb25tZW50ICpxdWVyeUVudiwKQEAgLTE0Niw3ICsxNTgsNyBAQCBQcm9jZXNzUXVlcnko UGxhbm5lZFN0bXQgKnBsYW4sCiAJLyoKIAkgKiBDcmVhdGUgdGhlIFF1ZXJ5RGVzYyBvYmplY3QK IAkgKi8KLQlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgc291cmNlVGV4dCwKKwlx dWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgcHJlcCwgc291cmNlVGV4dCwKIAkJCQkJ CQkJR2V0QWN0aXZlU25hcHNob3QoKSwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJCQlkZXN0LCBw YXJhbXMsIHF1ZXJ5RW52LCAwKTsKIApAQCAtNDg5LDYgKzUwMSw5IEBAIFBvcnRhbFN0YXJ0KFBv cnRhbCBwb3J0YWwsIFBhcmFtTGlzdEluZm8gcGFyYW1zLAogCQkJCSAqIHRoZSBkZXN0aW5hdGlv biB0byBEZXN0Tm9uZS4KIAkJCQkgKi8KIAkJCQlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2Mo bGluaXRpYWxfbm9kZShQbGFubmVkU3RtdCwgcG9ydGFsLT5zdG10cyksCisJCQkJCQkJCQkJCXBv cnRhbC0+cHJlcHMgPworCQkJCQkJCQkJCQkoRXhlY1ByZXAgKikgbGluaXRpYWwocG9ydGFsLT5w cmVwcykgOgorCQkJCQkJCQkJCQlOVUxMLAogCQkJCQkJCQkJCQlwb3J0YWwtPnNvdXJjZVRleHQs CiAJCQkJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCksCiAJCQkJCQkJCQkJCUludmFsaWRTbmFw c2hvdCwKQEAgLTExODUsNiArMTIwMCw3IEBAIFBvcnRhbFJ1bk11bHRpKFBvcnRhbCBwb3J0YWws CiB7CiAJYm9vbAkJYWN0aXZlX3NuYXBzaG90X3NldCA9IGZhbHNlOwogCUxpc3RDZWxsICAgKnN0 bXRsaXN0X2l0ZW07CisJaW50CQkJaTsKIAogCS8qCiAJICogSWYgdGhlIGRlc3RpbmF0aW9uIGlz IERlc3RSZW1vdGVFeGVjdXRlLCBjaGFuZ2UgdG8gRGVzdE5vbmUuICBUaGUKQEAgLTEyMDUsOSAr MTIyMSwxNCBAQCBQb3J0YWxSdW5NdWx0aShQb3J0YWwgcG9ydGFsLAogCSAqIExvb3AgdG8gaGFu ZGxlIHRoZSBpbmRpdmlkdWFsIHF1ZXJpZXMgZ2VuZXJhdGVkIGZyb20gYSBzaW5nbGUgcGFyc2V0 cmVlCiAJICogYnkgYW5hbHlzaXMgYW5kIHJld3JpdGUuCiAJICovCisJaSA9IDA7CiAJZm9yZWFj aChzdG10bGlzdF9pdGVtLCBwb3J0YWwtPnN0bXRzKQogCXsKIAkJUGxhbm5lZFN0bXQgKnBzdG10 ID0gbGZpcnN0X25vZGUoUGxhbm5lZFN0bXQsIHN0bXRsaXN0X2l0ZW0pOworCQlFeGVjUHJlcCAq cHJlcCA9IHBvcnRhbC0+cHJlcHMgPworCQkJbGlzdF9udGgocG9ydGFsLT5wcmVwcywgaSkgOiBO VUxMOworCisJCWkrKzsKIAogCQkvKgogCQkgKiBJZiB3ZSBnb3QgYSBjYW5jZWwgc2lnbmFsIGlu IHByaW9yIGNvbW1hbmQsIHF1aXQKQEAgLTEyNjUsNyArMTI4Niw3IEBAIFBvcnRhbFJ1bk11bHRp KFBvcnRhbCBwb3J0YWwsCiAJCQlpZiAocHN0bXQtPmNhblNldFRhZykKIAkJCXsKIAkJCQkvKiBz dGF0ZW1lbnQgY2FuIHNldCB0YWcgc3RyaW5nICovCi0JCQkJUHJvY2Vzc1F1ZXJ5KHBzdG10LAor CQkJCVByb2Nlc3NRdWVyeShwc3RtdCwgcHJlcCwKIAkJCQkJCQkgcG9ydGFsLT5zb3VyY2VUZXh0 LAogCQkJCQkJCSBwb3J0YWwtPnBvcnRhbFBhcmFtcywKIAkJCQkJCQkgcG9ydGFsLT5xdWVyeUVu diwKQEAgLTEyNzQsNyArMTI5NSw3IEBAIFBvcnRhbFJ1bk11bHRpKFBvcnRhbCBwb3J0YWwsCiAJ CQllbHNlCiAJCQl7CiAJCQkJLyogc3RtdCBhZGRlZCBieSByZXdyaXRlIGNhbm5vdCBzZXQgdGFn ICovCi0JCQkJUHJvY2Vzc1F1ZXJ5KHBzdG10LAorCQkJCVByb2Nlc3NRdWVyeShwc3RtdCwgcHJl cCwKIAkJCQkJCQkgcG9ydGFsLT5zb3VyY2VUZXh0LAogCQkJCQkJCSBwb3J0YWwtPnBvcnRhbFBh cmFtcywKIAkJCQkJCQkgcG9ydGFsLT5xdWVyeUVudiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL21tZ3IvcG9ydGFsbWVtLmMgYi9zcmMvYmFja2VuZC91dGlscy9tbWdyL3BvcnRhbG1l bS5jCmluZGV4IDk0M2RhMDg3YzlmLi4zMTNmOGVmMmZkYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvbW1nci9wb3J0YWxtZW0uYworKysgYi9zcmMvYmFja2VuZC91dGlscy9tbWdyL3Bv cnRhbG1lbS5jCkBAIC0yODQsNiArMjg0LDcgQEAgUG9ydGFsRGVmaW5lUXVlcnkoUG9ydGFsIHBv cnRhbCwKIAkJCQkgIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQsCiAJCQkJICBDb21tYW5kVGFnIGNv bW1hbmRUYWcsCiAJCQkJICBMaXN0ICpzdG10cywKKwkJCQkgIExpc3QgKnByZXBzLAogCQkJCSAg Q2FjaGVkUGxhbiAqY3BsYW4pCiB7CiAJQXNzZXJ0KFBvcnRhbElzVmFsaWQocG9ydGFsKSk7CkBA IC0yOTgsNiArMjk5LDcgQEAgUG9ydGFsRGVmaW5lUXVlcnkoUG9ydGFsIHBvcnRhbCwKIAlwb3J0 YWwtPnFjLm5wcm9jZXNzZWQgPSAwOwogCXBvcnRhbC0+Y29tbWFuZFRhZyA9IGNvbW1hbmRUYWc7 CiAJcG9ydGFsLT5zdG10cyA9IHN0bXRzOworCXBvcnRhbC0+cHJlcHMgPSBwcmVwczsKIAlwb3J0 YWwtPmNwbGFuID0gY3BsYW47CiAJcG9ydGFsLT5zdGF0dXMgPSBQT1JUQUxfREVGSU5FRDsKIH0K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaCBiL3NyYy9pbmNsdWRl L2NvbW1hbmRzL2V4cGxhaW4uaAppbmRleCA2ZTUxZDUwZWZjNy4uNmFhOGIyNzVhYTIgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaAorKysgYi9zcmMvaW5jbHVkZS9j b21tYW5kcy9leHBsYWluLmgKQEAgLTYzLDcgKzYzLDggQEAgZXh0ZXJuIHZvaWQgRXhwbGFpbk9u ZVV0aWxpdHkoTm9kZSAqdXRpbGl0eVN0bXQsIEludG9DbGF1c2UgKmludG8sCiAJCQkJCQkJICBF eHBsYWluU3RhdGUgKmVzLCBQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJICBQYXJhbUxpc3RJ bmZvIHBhcmFtcyk7CiAKLWV4dGVybiB2b2lkIEV4cGxhaW5PbmVQbGFuKFBsYW5uZWRTdG10ICpw bGFubmVkc3RtdCwgSW50b0NsYXVzZSAqaW50bywKK2V4dGVybiB2b2lkIEV4cGxhaW5PbmVQbGFu KFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgRXhlY1ByZXAgKnByZXAsCisJCQkJCQkgICBJbnRv Q2xhdXNlICppbnRvLAogCQkJCQkJICAgRXhwbGFpblN0YXRlICplcywgY29uc3QgY2hhciAqcXVl cnlTdHJpbmcsCiAJCQkJCQkgICBQYXJhbUxpc3RJbmZvIHBhcmFtcywgUXVlcnlFbnZpcm9ubWVu dCAqcXVlcnlFbnYsCiAJCQkJCQkgICBjb25zdCBpbnN0cl90aW1lICpwbGFuZHVyYXRpb24sCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjZGVzYy5oIGIvc3JjL2luY2x1ZGUv ZXhlY3V0b3IvZXhlY2Rlc2MuaAppbmRleCA4NmRiM2RjOGQwZC4uYzE4NTMwZjVkMTEgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNkZXNjLmgKKysrIGIvc3JjL2luY2x1ZGUv ZXhlY3V0b3IvZXhlY2Rlc2MuaApAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgIm5vZGVzL2V4 ZWNub2Rlcy5oIgogI2luY2x1ZGUgInRjb3AvZGVzdC5oIgogCi0KIC8qIC0tLS0tLS0tLS0tLS0t LS0KICAqCQlxdWVyeSBkZXNjcmlwdG9yOgogICoKQEAgLTM1LDYgKzM0LDcgQEAgdHlwZWRlZiBz dHJ1Y3QgUXVlcnlEZXNjCiAJLyogVGhlc2UgZmllbGRzIGFyZSBwcm92aWRlZCBieSBDcmVhdGVR dWVyeURlc2MgKi8KIAlDbWRUeXBlCQlvcGVyYXRpb247CQkvKiBDTURfU0VMRUNULCBDTURfVVBE QVRFLCBldGMuICovCiAJUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10OwkvKiBwbGFubmVyJ3Mgb3V0 cHV0IChjb3VsZCBiZSB1dGlsaXR5LCB0b28pICovCisJRXhlY1ByZXAgKnByZXA7CQkJCS8qIG91 dHB1dCBvZiBFeGVjdXRvclByZXAoKSBvciBOVUxMICovCiAJY29uc3QgY2hhciAqc291cmNlVGV4 dDsJCS8qIHNvdXJjZSB0ZXh0IG9mIHRoZSBxdWVyeSAqLwogCVNuYXBzaG90CXNuYXBzaG90OwkJ Lyogc25hcHNob3QgdG8gdXNlIGZvciBxdWVyeSAqLwogCVNuYXBzaG90CWNyb3NzY2hlY2tfc25h cHNob3Q7CS8qIGNyb3NzY2hlY2sgZm9yIFJJIHVwZGF0ZS9kZWxldGUgKi8KQEAgLTU3LDYgKzU3 LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUXVlcnlEZXNjCiAKIC8qIGluIHBxdWVyeS5jICovCiBleHRl cm4gUXVlcnlEZXNjICpDcmVhdGVRdWVyeURlc2MoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LAor CQkJCQkJCQkgIEV4ZWNQcmVwICpwcmVwLAogCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnNvdXJjZVRl eHQsCiAJCQkJCQkJCSAgU25hcHNob3Qgc25hcHNob3QsCiAJCQkJCQkJCSAgU25hcHNob3QgY3Jv c3NjaGVja19zbmFwc2hvdCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1 dG9yLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCmluZGV4IGZhMmI2NTdmYjJm Li4zNTc5OTI2ZDRlOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3Iu aAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCkBAIC0yMCw2ICsyMCw3IEBA CiAjaW5jbHVkZSAibm9kZXMvbG9ja29wdGlvbnMuaCIKICNpbmNsdWRlICJub2Rlcy9wYXJzZW5v ZGVzLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9yZXNv d25lci5oIgogCiAKIC8qCkBAIC0yMzQsNiArMjM1LDE2IEBAIEV4ZWNHZXRKdW5rQXR0cmlidXRl KFR1cGxlVGFibGVTbG90ICpzbG90LCBBdHRyTnVtYmVyIGF0dG5vLCBib29sICppc051bGwpCiAg Ki8KIGV4dGVybiB2b2lkIEV4ZWN1dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBl ZmxhZ3MpOwogZXh0ZXJuIHZvaWQgc3RhbmRhcmRfRXhlY3V0b3JTdGFydChRdWVyeURlc2MgKnF1 ZXJ5RGVzYywgaW50IGVmbGFncyk7CisKK2V4dGVybiBFeGVjUHJlcCAqRXhlY3V0b3JQcmVwKFBs YW5uZWRTdG10ICpwc3RtdCwKKwkJCQkJCQkgIFBhcmFtTGlzdEluZm8gcGFyYW1zLAorCQkJCQkJ CSAgUmVzb3VyY2VPd25lciBvd25lciwKKwkJCQkJCQkgIGJvb2wgZG9faW5pdGlhbF9wcnVuaW5n LAorCQkJCQkJCSAgaW50IGVmbGFncyk7CitleHRlcm4gRXhlY1ByZXAgKkNyZWF0ZUV4ZWNQcmVw KEVTdGF0ZSAqZXN0YXRlLCBNZW1vcnlDb250ZXh0IGNvbnRleHQsCisJCQkJCQkJCWV4ZWNwcmVw X2NsZWFudXBfZm4gY2xlYW51cCwgdm9pZCAqY2xlYW51cF9hcmcpOworZXh0ZXJuIHZvaWQgRXhl Y1ByZXBDbGVhbnVwKEV4ZWNQcmVwICpwcmVwKTsKKwogZXh0ZXJuIHZvaWQgRXhlY3V0b3JSdW4o UXVlcnlEZXNjICpxdWVyeURlc2MsCiAJCQkJCQlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwgdWlu dDY0IGNvdW50KTsKIGV4dGVybiB2b2lkIHN0YW5kYXJkX0V4ZWN1dG9yUnVuKFF1ZXJ5RGVzYyAq cXVlcnlEZXNjLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9z cmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCAxOGFlOGYwZDRiYi4uOGJkZWNkNjMx YmYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9p bmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC03NzIsNiArNzcyLDU0IEBAIHR5cGVkZWYgc3Ry dWN0IEVTdGF0ZQogCUxpc3QJICAgKmVzX2luc2VydF9wZW5kaW5nX21vZGlmeXRhYmxlczsKIH0g RVN0YXRlOwogCisvKgorICogRXhlY1ByZXA6IGVuY2Fwc3VsYXRlcyBleGVjdXRvciBwcmVwYXJh dGlvbiByZXN1bHRzIGZvciBhIFBsYW5uZWRTdG10LgorICoKKyAqIEV4ZWN1dG9yUHJlcCgpIGZh Y3RvcnMgb3V0IGV4ZWN1dG9yIHNldHVwIHN0ZXBzIHN1Y2ggYXMgaW5pdGlhbGl6aW5nIHRoZQor ICogcmFuZ2UgdGFibGUsIGNoZWNraW5nIHBlcm1pc3Npb25zLCBhbmQgZXhlY3V0aW5nIGluaXRp YWwgcGFydGl0aW9uIHBydW5pbmcuCisgKiBFeGVjdXRvclN0YXJ0KCkgY2FuIHJldXNlIHRoZSBw cmVwYXJlZCBFU3RhdGUgaW5zdGVhZCBvZiByZXBlYXRpbmcgdGhhdAorICogd29yaywgYW5kIG90 aGVyIGNhbGxlcnMgKHN1Y2ggYXMgcGxhbiBjYWNoZSB2YWxpZGF0aW9uKSBjYW4gdXNlIGl0IHdp dGhvdXQKKyAqIHJ1bm5pbmcgdGhlIGZ1bGwgcGxhbi4KKyAqLworCisvKgorICogT3B0aW9uYWwg Y2FsbGJhY2sgdG8gY2xlYW4gdXAgdXNlci1zcGVjaWZpYyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3 aXRoCisgKiBFeGVjUHJlcC4KKyAqLwordHlwZWRlZiB2b2lkICgqZXhlY3ByZXBfY2xlYW51cF9m bikodm9pZCAqcHJlcCk7CisKK3R5cGVkZWYgc3RydWN0IEV4ZWNQcmVwCit7CisJLyoKKwkgKiBD b250ZXh0IGluIHdoaWNoIHRoaXMgc3RydWN0IGFuZCBhbGwgc3Vic2lkaWFyeSBhbGxvY2F0aW9u cyB3ZXJlIG1hZGUuCisJICogVGhpcyBjb250ZXh0IG11c3QgcmVtYWluIGFsaXZlIHVudGlsIEV4 ZWNQcmVwQ2xlYW51cCBpcyBjYWxsZWQuCisJICovCisJTWVtb3J5Q29udGV4dCBjb250ZXh0Owor CisJLyoKKwkgKiBQYXJ0aWFsbHktaW5pdGlhbGl6ZWQgZXhlY3V0b3Igc3RhdGUgdXNlZCBmb3Ig cGVybWlzc2lvbiBjaGVja3MgYW5kCisJICogcHJ1bmluZy4gTWF5IGJlIGFkb3B0ZWQgZGlyZWN0 bHkgYnkgRXhlY3V0b3JTdGFydCgpLCBpbiB3aGljaCBjYXNlCisJICogRXhlY1ByZXBDbGVhbnVw IHdpbGwgc2tpcCBmcmVlaW5nIGl0LgorCSAqLworCUVTdGF0ZQkgICAqcHJlcF9lc3RhdGU7CisK KwkvKgorCSAqIFRydWUgaWYgRXhlY1ByZXBDbGVhbnVwKCkgbXVzdCBmcmVlIHRoZSBFU3RhdGUu ICBJZiB0aGUgZXhlY3V0b3IgYWRvcHRzCisJICogcHJlcF9lc3RhdGUsIHRoaXMgaXMgc2V0IHRv IGZhbHNlIHRvIGF2b2lkIGRvdWJsZS1mcmVlLgorCSAqLworCWJvb2wJCW93bnNfZXN0YXRlOwor CisJLyoKKwkgKiBPcHRpb25hbCBjYWxsZXItc3VwcGxpZWQgY2xlYW51cCBob29rIHRvIHJ1biBk dXJpbmcgRXhlY1ByZXBDbGVhbnVwLgorCSAqIFVzZWZ1bCBmb3IgcmVsZWFzaW5nIGV4dGVybmFs IHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHByZXAuCisJICovCisJZXhlY3ByZXBfY2xl YW51cF9mbiBjbGVhbnVwOworCisJLyoKKwkgKiBPcGFxdWUgcG9pbnRlciB0byBwYXNzIHRvIHRo ZSBjbGVhbnVwIGhvb2suCisJICovCisJdm9pZAkgICAqY2xlYW51cF9hcmc7Cit9IEV4ZWNQcmVw OwogCiAvKgogICogRXhlY1Jvd01hcmsgLQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMv cG9ydGFsLmggYi9zcmMvaW5jbHVkZS91dGlscy9wb3J0YWwuaAppbmRleCA1ZmZhNmZkNWNjOC4u MDEzYmNjM2JkOGUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3BvcnRhbC5oCisrKyBi L3NyYy9pbmNsdWRlL3V0aWxzL3BvcnRhbC5oCkBAIC0xMzcsNiArMTM3LDcgQEAgdHlwZWRlZiBz dHJ1Y3QgUG9ydGFsRGF0YQogCUNvbW1hbmRUYWcJY29tbWFuZFRhZzsJCS8qIGNvbW1hbmQgdGFn IGZvciBvcmlnaW5hbCBxdWVyeSAqLwogCVF1ZXJ5Q29tcGxldGlvbiBxYzsJCQkvKiBjb21tYW5k IGNvbXBsZXRpb24gZGF0YSBmb3IgZXhlY3V0ZWQgcXVlcnkgKi8KIAlMaXN0CSAgICpzdG10czsJ CQkvKiBsaXN0IG9mIFBsYW5uZWRTdG10cyAqLworCUxpc3QJICAgKnByZXBzOwkJCS8qIGxpc3Qg b2YgRXhlY1ByZXBzIHdoZXJlIG5lZWRlZCAqLwogCUNhY2hlZFBsYW4gKmNwbGFuOwkJCS8qIENh Y2hlZFBsYW4sIGlmIHN0bXRzIGFyZSBmcm9tIG9uZSAqLwogCiAJUGFyYW1MaXN0SW5mbyBwb3J0 YWxQYXJhbXM7IC8qIHBhcmFtcyB0byBwYXNzIHRvIHF1ZXJ5ICovCkBAIC0yNDAsNiArMjQxLDcg QEAgZXh0ZXJuIHZvaWQgUG9ydGFsRGVmaW5lUXVlcnkoUG9ydGFsIHBvcnRhbCwKIAkJCQkJCQkg IGNvbnN0IGNoYXIgKnNvdXJjZVRleHQsCiAJCQkJCQkJICBDb21tYW5kVGFnIGNvbW1hbmRUYWcs CiAJCQkJCQkJICBMaXN0ICpzdG10cywKKwkJCQkJCQkgIExpc3QgKnByZXBzLAogCQkJCQkJCSAg Q2FjaGVkUGxhbiAqY3BsYW4pOwogZXh0ZXJuIFBsYW5uZWRTdG10ICpQb3J0YWxHZXRQcmltYXJ5 U3RtdChQb3J0YWwgcG9ydGFsKTsKIGV4dGVybiB2b2lkIFBvcnRhbENyZWF0ZUhvbGRTdG9yZShQ b3J0YWwgcG9ydGFsKTsKLS0gCjIuNDcuMwoK --000000000000245a530643c9ca87--