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 1vJBfk-00DoCY-1i for pgsql-hackers@arkaria.postgresql.org; Wed, 12 Nov 2025 14:18:07 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vJBfi-00Bv36-19 for pgsql-hackers@arkaria.postgresql.org; Wed, 12 Nov 2025 14:18:06 +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 1vJBfh-00Bv2n-2q for pgsql-hackers@lists.postgresql.org; Wed, 12 Nov 2025 14:18:06 +0000 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vJBfe-007M9Q-32 for pgsql-hackers@postgresql.org; Wed, 12 Nov 2025 14:18:05 +0000 Received: by mail-pf1-x42c.google.com with SMTP id d2e1a72fcca58-7ae4656d6e4so1091074b3a.1 for ; Wed, 12 Nov 2025 06:18:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762957081; x=1763561881; 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=MpEe01T9V1rOHfsMCq5bAoOST/jncmmiC2FooK1CfCM=; b=dSrgZcEGmO7Fi+jQrz8vm5dH/Q77NILMMdRhDgHzP5JnHfnTou4JXsQKsVHEAulG0M 39Fp1A44hYWlYoabv/VF3kVPPtGxSUwOlaZW3ijrUeu7P3vQW9SW9dmN3ejpZg6yNyg+ W+RQx/55zGZk+K00UXrmulPw0xfNH0sKWqFeoCYwvZ+wg4LtZW/KiocotNCFAqFpVE38 ug8b/v57c+4kyZEW72rBB2nJqGJ7XJPjAaIVlGesie1vIFDlqaoeq50PvGcd8l9tHtwe sC8fsGJ5Sy1kangzLPw5maqvCI/59i46chssxW2oAsYFNYnXr2g3H/xVUrs2iC4eI8IT Xk0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762957081; x=1763561881; 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=MpEe01T9V1rOHfsMCq5bAoOST/jncmmiC2FooK1CfCM=; b=AydFKavisdR3XSbmqkbAVswwBEIceiId6wIOYDfbTV9Zc9EqlV4NFdDIUhjIYGKpSZ KbvVN0l9WbHeR7+TiTjqA5JXYZPvvVoVlZQI4HPui5Wl7OQ7cZb42jwaTFQlybCHwgxk fhqXaErcuU7XJkWj5readPsuM/4IdbnXQ4cCg060OZ2i1PZlUxEoOXPq9mgZo8Sa7rJZ 5yr7eDv3JwQhEnhq7tYmzWkHbfhZgLut1uwpZuoliw4obRgalom0J4ywlHkuWW0he1LZ iQnrDrD07AJhFSGxTb60XS//VweIZFNHrko0h3wgCd9H9NS+4U2xL1jRIrT/4Di/EFvx 5Dmw== X-Forwarded-Encrypted: i=1; AJvYcCWU9+dauXlbvNIjKOKir+kj/eHdg2byJRR+V7LpC4zWqbXUBtzKTdqAHIdXxerqWKIo1tq6SMoAGH2VIDW4@postgresql.org X-Gm-Message-State: AOJu0YzxgTBh8S04sXUwAnfzl8wYTGeNULpDOpjYz7mDGzv/3ckemIQQ UYX0L0i37QVnTrjBYVnsERy3pKtq+SczG+Ki8FOt4SlR027TYuBIl20Ldt+7kWp5eecLz75JzDh /mGJI+9HcsSgtu30rBtGmenneZCPzc/s= X-Gm-Gg: ASbGncurJ0lfIlzIcpWCT9G/KUexBCavCJgHViHmdH3uGfacawNylTtWZlzdDXXvQKw JiUq1Q37iLZ8G9Zd3busFF04/QfN6zfOYFw3It5anTxkalo3HHyNEyPGSYRTg0VVsDYYJ7GHib2 uVO5+ki+XUvwAMo48AIkz7QEunQEXB7iqBZ2zHfE0bSrNT1n1jSnQkOC5PYDqMtpndvE5qS6GxR S6kLN9LeRxS1hZJ4aRypK+eddGVkXuXHGB5Vo/fFMCOa1yHyX2VTyXd+U2zaQ== X-Google-Smtp-Source: AGHT+IH+geH2LqQkqX/rML/ABxWw08ku6WMLcdYLaK5BbVISOpO1RdCVZdnIEcigV3mkg373eVhQOGKnlJCP89NgY0M= X-Received: by 2002:a17:90a:dfce:b0:330:84c8:92d0 with SMTP id 98e67ed59e1d1-343ddeae1demr4146773a91.24.1762957080803; Wed, 12 Nov 2025 06:18:00 -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: Wed, 12 Nov 2025 23:17:43 +0900 X-Gm-Features: AWmQ_blQ4Qv23A06MV2UBpz-fwgfl0X5SFwUSy62b_l4_0A5tAkI74XHfEE09o0 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="0000000000008e54dd0643666e71" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008e54dd0643666e71 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Tue, Jul 22, 2025 at 3:43=E2=80=AFPM Amit Langote wrote: > On Thu, Jul 17, 2025 at 9:11=E2=80=AFPM Amit Langote wrote: > > The refinements I described in my email above might help mitigate some > > of those executor-related issues. However, I'm starting to wonder if > > it's worth reconsidering our decision to handle pruning, locking, and > > validation entirely at executor startup, which was the approach taken > > in the reverted patch. > > > > The alternative approach, doing initial pruning and locking within > > plancache.c itself (which I floated a while ago), might be worth > > revisiting. It avoids the complications we've discussed around the > > executor API and preserves the clear separation of concerns that > > plancache.c provides, though it does introduce some new layering > > concerns, which I describe further below. > > > > To support this, we'd need a mechanism to pass pruning results to the > > executor alongside each PlannedStmt. For each PartitionPruneInfo in > > the plan, that would include the corresponding PartitionPruneState and > > the bitmapset of surviving relids determined by initial pruning. Given > > that a CachedPlan can contain multiple PlannedStmts, this would > > effectively be a list of pruning results, one per statement. One > > reasonable way to handle that might be to define a parallel data > > structure, separate from PlannedStmt, constructed by plancache.c and > > carried via QueryDesc. The memory and lifetime management would mirror > > how ParamListInfo is handled today, leaving the executor API unchanged > > and avoiding intrusive changes to PlannedStmt. > > > > However, one potentially problematic aspect of this design is managing > > the lifecycle of the relations referenced by PartitionPruneState. > > Currently, partitioned table relations are opened by the executor > > after entering ExecutorStart() and closed automatically by > > ExecEndPlan(), allowing cleanup of pruning states implicitly. If we > > perform initial pruning earlier, we'd need to keep these relations > > open longer, necessitating explicit cleanup calls (e.g., a new > > FinishPartitionPruneState()) invoked by the caller of the executor, > > such as from ExecutorEnd() or even higher-level callers. This > > introduces some questionable layering by shifting responsibility for > > relation management tasks, which ideally belong within the executor, > > into its callers. > > > > My sense is that the complexity involved in carrying pruning results > > via this parallel data structure was one of the concerns Tom raised > > previously, alongside the significant pruning code refactoring that > > the earlier patch required. The latter, at least, should no longer be > > necessary given recent code improvements. > > One point I forgot to mention about this approach is that we'd also > need to ensure permissions on parent relations are checked before > performing initial pruning in plancache.c, since pruning may involve > evaluating user-provided expressions. So in effect, we'd need to > invoke not just ExecDoInitialPruning(), but also > ExecCheckPermissions(), or some variant of it, prior to executor > startup. While manageable, it does add slightly to the complexity. Sorry for the absence. I've now implemented the approach mentioned above and split it into a series of reasonably isolated patches. 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. This revives an idea that was last implemented in the patch (v30) posted on Dec 16, 2022. In retrospect, I understand the hesitation Tom might have had about the patch at the time -- its changes to enable early pruning and then feed the results into ExecutorStart() were less than pretty. Thanks to the initial pruning code refactoring that I committed in Postgres 18, those changes now seem much more principled and modular IMO. 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. * Allow parallel workers to reuse leader pruning results (0003): lets workers reuse the leader=E2=80=99s initial pruning results (valid subplan indexes) and unpruned_relids via ExecutorPrep(). This adds a verification step to check that leader and worker decisions match, throwing an error if they don=E2=80=99t -- so "reuse" is a bit of a lie. Should that check be debug-only? (Maybe not.) As mentioned above, this was previously discussed at [1]. * 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. This approach keeps plan caching and validation logic self-contained in plancache.c, avoids invasive executor API changes. 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) Comments welcome. [1] https://www.postgresql.org/message-id/CA%2BHiwqFA%3DswkzgGK8AmXUNFtLeEX= FJwFyY3E7cTxvL46aa1OTw%40mail.gmail.com -- Thanks, Amit Langote --0000000000008e54dd0643666e71 Content-Type: application/octet-stream; name="v1-0003-Reuse-partition-pruning-results-in-parallel-worke.patch" Content-Disposition: attachment; filename="v1-0003-Reuse-partition-pruning-results-in-parallel-worke.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhw02ean1 RnJvbSBkMjNhMDVkNmY0MTJkY2JmZDM4YTkxMDMzMTUyNzc2NTk5OWQ3OGU5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMTEgTm92IDIwMjUgMjI6MTc6NDcgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx IDMvNF0gUmV1c2UgcGFydGl0aW9uIHBydW5pbmcgcmVzdWx0cyBpbiBwYXJhbGxlbCB3b3JrZXJz CgpQYXNzIHRoZSBsZWFkZXIncyBpbml0aWFsIHBhcnRpdGlvbiBwcnVuaW5nIHJlc3VsdHMgYW5k IHVucHJ1bmVkCnJlbGlkcyB0byBwYXJhbGxlbCB3b3JrZXJzIGFuZCByZXVzZSB0aGVtIHZpYSBF eGVjdXRvclByZXAoKS4gVGhpcwphdm9pZHMgcmVwZWF0aW5nIHBydW5pbmcgbG9naWMgaW4gd29y a2Vycywgd2hpY2ggaXMgbm90IG9ubHkKcmVkdW5kYW50IGJ1dCBhbHNvIHJpc2tzIGRpdmVyZ2Vu Y2UgZHVlIHRvIG5vbmRldGVybWluaXNtIGluIHBydW5pbmcKc3RlcHMgb3IgcGFyYW1ldGVyIGV2 YWx1YXRpb24gdGltaW5nLgoKSW50cm9kdWNlIEV4ZWNDaGVja0luaXRpYWxQcnVuaW5nUmVzdWx0 cygpIHRvIHZlcmlmeSB0aGF0IHRoZSByZXN1bHRzCm1hdGNoIHdoYXQgdGhlIHdvcmtlciB3b3Vs ZCBjb21wdXRlLiBUaGlzIGNoZWNrIGhlbHBzIGNhdGNoCmluY29uc2lzdGVuY2llcyBhY3Jvc3Mg bGVhZGVyIGFuZCB3b3JrZXIgcHJ1bmluZyBsb2dpYy4KCldoaWxlIHZhbHVhYmxlIG9uIGl0cyBv d24sIHRoaXMgY2hhbmdlIGFsc28gbGF5cyB0aGUgZm91bmRhdGlvbiBmb3IKZnV0dXJlIG9wdGlt aXphdGlvbnMgd2hlcmUgdGhlIGxlYWRlciBtYXkgdGFrZSBsb2NrcyBvbmx5IG9uCnN1cnZpdmlu ZyBwYXJ0aXRpb25zLiBFbnN1cmluZyB0aGF0IHdvcmtlcnMgZm9sbG93IGlkZW50aWNhbCBwcnVu aW5nCmRlY2lzaW9ucyBtYWtlcyBzdWNoIHNlbGVjdGl2ZSBsb2NraW5nIHNhZmUuCi0tLQogc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMgIHwgNjcgKysrKysrKysrKysrKysrKysr KysrKysrKysrLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jIHwgMzUgKysr KysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmggfCAgMSAr CiAzIGZpbGVzIGNoYW5nZWQsIDEwMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYwppbmRleCBhZWRiZDk1NjZkNi4uZjE2ZWYxODRjNjgg 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 bnRSZXNvdXJjZU93bmVyLCBmYWxzZSk7CisJCUFzc2VydChwcmVwLT5wcmVwX2VzdGF0ZSk7CisK KwkJcHJlcC0+cHJlcF9lc3RhdGUtPmVzX3BhcnRfcHJ1bmVfcmVzdWx0cyA9IHBhcnRfcHJ1bmVf cmVzdWx0czsKKwkJcHJlcC0+cHJlcF9lc3RhdGUtPmVzX3VucHJ1bmVkX3JlbGlkcyA9CisJCQli bXNfYWRkX21lbWJlcnMocHJlcC0+cHJlcF9lc3RhdGUtPmVzX3VucHJ1bmVkX3JlbGlkcywKKwkJ CQkJCQl1bnBydW5lZF9yZWxpZHMpOworCisJCS8qCisJCSAqIFZlcmlmeSB0aGF0IHRoZSBwcnVu aW5nIHJlc3VsdHMgcGFzc2VkIGZyb20gdGhlIGxlYWRlciBtYXRjaAorCQkgKiB3aGF0IHRoZSB3 b3JrZXIgd291bGQgaW5kZXBlbmRlbnRseSBjb21wdXRlLgorCQkgKi8KKwkJRXhlY0NoZWNrSW5p dGlhbFBydW5pbmdSZXN1bHRzKHByZXAtPnByZXBfZXN0YXRlKTsKKwl9CisKIAkvKiBDcmVhdGUg YSBRdWVyeURlc2MgZm9yIHRoZSBxdWVyeS4gKi8KIAlyZXR1cm4gQ3JlYXRlUXVlcnlEZXNjKHBz dG10LAotCQkJCQkJICAgTlVMTCwKKwkJCQkJCSAgIHByZXAsCiAJCQkJCQkgICBxdWVyeVN0cmlu ZywKIAkJCQkJCSAgIEdldEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRTbmFwc2hvdCwKIAkJCQkJ CSAgIHJlY2VpdmVyLCBwYXJhbUxJLCBOVUxMLCBpbnN0cnVtZW50X29wdGlvbnMpOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCmluZGV4IDE4N2E0ODBlNTA4Li4zYjQ1MGUzMzczZiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCisrKyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYwpAQCAtMTg3Miw2ICsxODcyLDQxIEBA IEV4ZWNEb0luaXRpYWxQcnVuaW5nKEVTdGF0ZSAqZXN0YXRlKQogCX0KIH0KIAorLyoKKyAqIEV4 ZWNDaGVja0luaXRpYWxQcnVuaW5nUmVzdWx0cworICogICAgICBWZXJpZnkgcGFydGl0aW9uIHBy dW5pbmcgcmVzdWx0cyBwYXNzZWQgZnJvbSB0aGUgbGVhZGVyIHByb2Nlc3MuCisgKgorICogVGhp cyBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZHVyaW5nIHBhcmFsbGVsIHdvcmtlciBxdWVyeSBz ZXR1cC4KKyAqIEl0IHJlY29tcHV0ZXMgaW5pdGlhbCBwcnVuaW5nIHJlc3VsdHMgbG9jYWxseSBh bmQgY29tcGFyZXMgdGhlbSB3aXRoCisgKiB0aG9zZSByZWNlaXZlZCBmcm9tIHRoZSBsZWFkZXIu IEFueSBtaXNtYXRjaCBtYXkgaW5kaWNhdGUgYSBkaXZlcmdlbmNlCisgKiBiZXR3ZWVuIGxlYWRl ciBhbmQgd29ya2VyIGxvZ2ljIG9yIGVudmlyb25tZW50LgorICovCit2b2lkCitFeGVjQ2hlY2tJ bml0aWFsUHJ1bmluZ1Jlc3VsdHMoRVN0YXRlICplc3RhdGUpCit7CisJTGlzdENlbGwgICAqbGM7 CisJaW50CQkJaTsKKworCUFzc2VydChlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfcmVzdWx0cyAhPSBO VUxMKTsKKwlpID0gMDsKKwlmb3JlYWNoKGxjLCBlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfc3RhdGVz KQorCXsKKwkJUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSA9IChQYXJ0aXRpb25QcnVu ZVN0YXRlICopIGxmaXJzdChsYyk7CisJCUJpdG1hcHNldCAqcmV1c2VfdmFsaWRzdWJwbGFucyA9 CisJCQkJbGlzdF9udGhfbm9kZShCaXRtYXBzZXQsIGVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9yZXN1 bHRzLCBpKTsKKwkJQml0bWFwc2V0ICAqdmFsaWRzdWJwbGFucyA9IE5VTEw7CisJCUJpdG1hcHNl dCAgKnZhbGlkc3VicGxhbl9ydGlzID0gTlVMTDsKKworCQlpZiAocHJ1bmVzdGF0ZS0+ZG9faW5p dGlhbF9wcnVuZSkKKwkJCXZhbGlkc3VicGxhbnMgPSBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMo cHJ1bmVzdGF0ZSwgdHJ1ZSwKKwkJCQkJCQkJCQkJCQkgJnZhbGlkc3VicGxhbl9ydGlzKTsKKwkJ aWYgKGJtc19ub25lbXB0eV9kaWZmZXJlbmNlKHZhbGlkc3VicGxhbnMsIHJldXNlX3ZhbGlkc3Vi cGxhbnMpKQorCQkJZWxvZyhFUlJPUiwgImRpZmZlcmVudCB2YWxpZHN1YnBsbnMgaW4gcGFyYWxs ZWwgd29ya2VyIik7CisJCWlmIChibXNfbm9uZW1wdHlfZGlmZmVyZW5jZSh2YWxpZHN1YnBsYW5f cnRpcywgZXN0YXRlLT5lc191bnBydW5lZF9yZWxpZHMpKQorCQkJZWxvZyhFUlJPUiwgImRpZmZl cmVudCB1bnBydW5hYmxlX3JlbGlkcyBpbiBwYXJhbGxlbCB3b3JrZXIiKTsKKwl9Cit9CisKIC8q CiAgKiBFeGVjSW5pdFBhcnRpdGlvbkV4ZWNQcnVuaW5nCiAgKgkJSW5pdGlhbGl6ZSB0aGUgZGF0 YSBzdHJ1Y3R1cmVzIG5lZWRlZCBmb3IgcnVudGltZSAiZXhlYyIgcGFydGl0aW9uCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmggYi9zcmMvaW5jbHVkZS9l eGVjdXRvci9leGVjUGFydGl0aW9uLmgKaW5kZXggYmE4Y2M1OTRmYzkuLjEyNmVmZDAwOGU1IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmgKKysrIGIvc3Jj L2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oCkBAIC0xMzIsNiArMTMyLDcgQEAgdHlw ZWRlZiBzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVTdGF0ZQogCiBleHRlcm4gdm9pZCBFeGVjQ3JlYXRl UGFydGl0aW9uUHJ1bmVTdGF0ZXMoRVN0YXRlICplc3RhdGUpOwogZXh0ZXJuIHZvaWQgRXhlY0Rv SW5pdGlhbFBydW5pbmcoRVN0YXRlICplc3RhdGUpOworZXh0ZXJuIHZvaWQgRXhlY0NoZWNrSW5p dGlhbFBydW5pbmdSZXN1bHRzKEVTdGF0ZSAqZXN0YXRlKTsKIGV4dGVybiBQYXJ0aXRpb25QcnVu ZVN0YXRlICpFeGVjSW5pdFBhcnRpdGlvbkV4ZWNQcnVuaW5nKFBsYW5TdGF0ZSAqcGxhbnN0YXRl LAogCQkJCQkJCQkJCQkJCQkgaW50IG5fdG90YWxfc3VicGxhbnMsCiAJCQkJCQkJCQkJCQkJCSBp bnQgcGFydF9wcnVuZV9pbmRleCwKLS0gCjIuNDcuMwoK --0000000000008e54dd0643666e71 Content-Type: application/octet-stream; name="v1-0001-Refactor-partition-pruning-initialization-for-cla.patch" Content-Disposition: attachment; filename="v1-0001-Refactor-partition-pruning-initialization-for-cla.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhw02eau3 RnJvbSAyNDNkNDA3ZGU4NmIwYTczYjliZDhjOGRiYzU0MWY2MzBlYjMzNzQ3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMTEgTm92IDIwMjUgMjE6MTg6MjQgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx IDEvNF0gUmVmYWN0b3IgcGFydGl0aW9uIHBydW5pbmcgaW5pdGlhbGl6YXRpb24gZm9yIGNsYXJp 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== --0000000000008e54dd0643666e71 Content-Type: application/octet-stream; name="v1-0004-Use-pruning-aware-locking-in-cached-plans.patch" Content-Disposition: attachment; filename="v1-0004-Use-pruning-aware-locking-in-cached-plans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhw02eag0 RnJvbSBkZGZmY2NkNjg1MTNiYjBlNjhkNmNmNzU4MTBjZjY0Y2Y5YTRkNzU3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMTEgTm92IDIwMjUgMjI6MzA6NTIgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx IDQvNF0gVXNlIHBydW5pbmctYXdhcmUgbG9ja2luZyBpbiBjYWNoZWQgcGxhbnMKCkV4dGVuZCBH ZXRDYWNoZWRQbGFuKCkgdG8gcGVyZm9ybSBFeGVjdXRvclByZXAoKSBvbiBlYWNoIHBsYW5uZWQK c3RhdGVtZW50LCBjYXB0dXJpbmcgdW5wcnVuZWQgcmVsaWRzIGFuZCBpbml0aWFsIHBydW5pbmcg cmVzdWx0cy4KVXNlIHRoaXMgZGF0YSB0byBhY3F1aXJlIGV4ZWN1dGlvbiBsb2NrcyBvbmx5IG9u IHN1cnZpdmluZyBwYXJ0aXRpb25zLAphdm9pZGluZyB1bm5lY2Vzc2FyeSBsb2NraW5nIG9mIHBy dW5lZCB0YWJsZXMgZXZlbiB3aGVuIHVzaW5nIGNhY2hlZApwbGFucy4KCkludHJvZHVjZSBDYWNo ZWRQbGFuUHJlcERhdGEgdG8gY2FycnkgRXhlY3V0b3JQcmVwIHJlc3VsdHMKdGhyb3VnaCB0aGUg cGxhbiBjYWNoaW5nIGxheWVyLiBBZGp1c3QgY2FsbCBzaXRlcyBpbiBTUEksCmZ1bmN0aW9ucywg cG9ydGFscywgYW5kIEVYUExBSU4gdG8gcHJvcGFnYXRlIHRoaXMgZGF0YS4KClRoaXMgZW5zdXJl cyBwcnVuaW5nIGRlY2lzaW9ucyBtYWRlIGR1cmluZyBpbml0aWFsIHBydW5pbmcgYXJlCmNvbnNp c3RlbnRseSByZXVzZWQgd2l0aG91dCByZWRvaW5nIHBydW5pbmcgbG9naWMgaW4gZXhlY3V0b3Ig cGF0aHMKbGlrZSBwYXJhbGxlbCB3b3JrZXJzLiBJdCBhbHNvIGxheXMgdGhlIGdyb3VuZHdvcmsg Zm9yCnBydW5pbmctZGVwZW5kZW50IGxvY2sgYmVoYXZpb3IgZHVyaW5nIHBsYW4gcmV1c2UuCgpU byBtYWludGFpbiBjb3JyZWN0bmVzcyB3aGVuIGFsbCB0YXJnZXQgcGFydGl0aW9ucyBhcmUgcHJ1 bmVkLCBhbHNvCnJlaW5zdGF0ZSB0aGUgZmlyc3RSZXN1bHRSZWwgbG9ja2luZyBiZWhhdmlvciBs b3N0IGluIGNvbW1pdAoyODMxN2RlNzIuIFRoYXQgY29tbWl0IHJlcXVpcmVkIHRoZSBmaXJzdCBN b2RpZnlUYWJsZSB0YXJnZXQgdG8KcmVtYWluIGluaXRpYWxpemVkIGZvciBleGVjdXRvciBhc3N1 bXB0aW9ucyB0byBob2xkLiBXZSBub3cKZXhwbGljaXRseSB0cmFjayB0aGVzZSByZWxpZHMgaW4g UGxhbm5lckdsb2JhbCBhbmQgUGxhbm5lZFN0bXQgc28gdGhleQphcmUgbG9ja2VkIGV2ZW4gaWYg cHJ1bmVkLCBwcmVzZXJ2aW5nIHRoYXQgcnVsZSBhY3Jvc3MgY2FjaGVkIHBsYW4KcmV1c2UuCi0t LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jICAgICAgICAgfCAgMTUgKy0KIHNyYy9i YWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jICAgICAgIHwgIDE0ICstCiBzcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYyB8ICAgNCArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Iv c3BpLmMgICAgICAgICAgICAgfCAgMjIgKystCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9w bGFubmVyLmMgICB8ICAgMSArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMg ICB8ICAgMyArCiBzcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgICAgICAgICAgICB8ICAgNyAr LQogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMgICAgfCAyMjMgKysrKysrKysr KysrKysrKysrKysrKysrLQogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAgICAgICAg fCAgIDMgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggICAgICAgICAgfCAgIDcgKwog c3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmggICAgICAgICAgfCAgMjMgKystCiAxMSBmaWxl cyBjaGFuZ2VkLCAyOTkgaW5zZXJ0aW9ucygrKSwgMjMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv cHJlcGFyZS5jCmluZGV4IGFmZDQ0OWM3M2JhLi4xMGZkZmY0MDNiOSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3By ZXBhcmUuYwpAQCAtMTU0LDYgKzE1NCw3IEBAIEV4ZWN1dGVRdWVyeShQYXJzZVN0YXRlICpwc3Rh dGUsCiB7CiAJUHJlcGFyZWRTdGF0ZW1lbnQgKmVudHJ5OwogCUNhY2hlZFBsYW4gKmNwbGFuOwor CUNhY2hlZFBsYW5QcmVwRGF0YSBjcHJlcCA9IHswfTsKIAlMaXN0CSAgICpwbGFuX2xpc3Q7CiAJ UGFyYW1MaXN0SW5mbyBwYXJhbUxJID0gTlVMTDsKIAlFU3RhdGUJICAgKmVzdGF0ZSA9IE5VTEw7 CkBAIC0xOTMsNyArMTk0LDkgQEAgRXhlY3V0ZVF1ZXJ5KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJ CQkJCQkJCSAgIGVudHJ5LT5wbGFuc291cmNlLT5xdWVyeV9zdHJpbmcpOwogCiAJLyogUmVwbGFu IGlmIG5lZWRlZCwgYW5kIGluY3JlbWVudCBwbGFuIHJlZmNvdW50IGZvciBwb3J0YWwgKi8KLQlj cGxhbiA9IEdldENhY2hlZFBsYW4oZW50cnktPnBsYW5zb3VyY2UsIHBhcmFtTEksIE5VTEwsIE5V TEwpOworCWNwcmVwLmNvbnRleHQgPSBwb3J0YWwtPnBvcnRhbENvbnRleHQ7CisJY3ByZXAub3du ZXIgPSBwb3J0YWwtPnJlc293bmVyOworCWNwbGFuID0gR2V0Q2FjaGVkUGxhbihlbnRyeS0+cGxh bnNvdXJjZSwgcGFyYW1MSSwgTlVMTCwgTlVMTCwgJmNwcmVwKTsKIAlwbGFuX2xpc3QgPSBjcGxh bi0+c3RtdF9saXN0OwogCiAJLyoKQEAgLTIwNSw3ICsyMDgsNyBAQCBFeGVjdXRlUXVlcnkoUGFy c2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkgIHF1ZXJ5X3N0cmluZywKIAkJCQkJICBlbnRyeS0+cGxh bnNvdXJjZS0+Y29tbWFuZFRhZywKIAkJCQkJICBwbGFuX2xpc3QsCi0JCQkJCSAgTklMLAorCQkJ CQkgIGNwcmVwLnByZXBfbGlzdCwKIAkJCQkJICBjcGxhbik7CiAKIAkvKgpAQCAtNTc1LDYgKzU3 OCw3IEBAIEV4cGxhaW5FeGVjdXRlUXVlcnkoRXhlY3V0ZVN0bXQgKmV4ZWNzdG10LCBJbnRvQ2xh dXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAogCVByZXBhcmVkU3RhdGVtZW50ICplbnRyeTsK IAljb25zdCBjaGFyICpxdWVyeV9zdHJpbmc7CiAJQ2FjaGVkUGxhbiAqY3BsYW47CisJQ2FjaGVk UGxhblByZXBEYXRhIGNwcmVwID0gezB9OwogCUxpc3QJICAgKnBsYW5fbGlzdDsKIAlMaXN0CSAg ICpwcmVwX2xpc3Q7CiAJTGlzdENlbGwgICAqcDsKQEAgLTYzMyw4ICs2MzcsMTEgQEAgRXhwbGFp bkV4ZWN1dGVRdWVyeShFeGVjdXRlU3RtdCAqZXhlY3N0bXQsIEludG9DbGF1c2UgKmludG8sIEV4 cGxhaW5TdGF0ZSAqZXMsCiAJfQogCiAJLyogUmVwbGFuIGlmIG5lZWRlZCwgYW5kIGFjcXVpcmUg YSB0cmFuc2llbnQgcmVmY291bnQgKi8KKwljcHJlcC5jb250ZXh0ID0gQ3VycmVudE1lbW9yeUNv bnRleHQ7CisJY3ByZXAub3duZXIgPSBDdXJyZW50UmVzb3VyY2VPd25lcjsKIAljcGxhbiA9IEdl dENhY2hlZFBsYW4oZW50cnktPnBsYW5zb3VyY2UsIHBhcmFtTEksCi0JCQkJCQkgIEN1cnJlbnRS ZXNvdXJjZU93bmVyLCBwc3RhdGUtPnBfcXVlcnlFbnYpOworCQkJCQkJICBDdXJyZW50UmVzb3Vy Y2VPd25lciwgcHN0YXRlLT5wX3F1ZXJ5RW52LAorCQkJCQkJICAmY3ByZXApOwogCiAJSU5TVFJf VElNRV9TRVRfQ1VSUkVOVChwbGFuZHVyYXRpb24pOwogCUlOU1RSX1RJTUVfU1VCVFJBQ1QocGxh bmR1cmF0aW9uLCBwbGFuc3RhcnQpOwpAQCAtNjUzLDcgKzY2MCw3IEBAIEV4cGxhaW5FeGVjdXRl UXVlcnkoRXhlY3V0ZVN0bXQgKmV4ZWNzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3Rh dGUgKmVzLAogCX0KIAogCXBsYW5fbGlzdCA9IGNwbGFuLT5zdG10X2xpc3Q7Ci0JcHJlcF9saXN0 ID0gTklMOworCXByZXBfbGlzdCA9IGNwcmVwLnByZXBfbGlzdDsKIAogCS8qIEV4cGxhaW4gZWFj aCBxdWVyeSAqLwogCWkgPSAwOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVu Y3Rpb25zLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMuYwppbmRleCA2MzMzMTBj NWY1Yi4uOGZjMjJmYmQyODMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0 aW9ucy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCkBAIC03Miw2ICs3 Miw3IEBAIHR5cGVkZWYgc3RydWN0IGV4ZWN1dGlvbl9zdGF0ZQogCWJvb2wJCXNldHNSZXN1bHQ7 CQkvKiB0cnVlIGlmIHRoaXMgcXVlcnkgcHJvZHVjZXMgZnVuYydzIHJlc3VsdCAqLwogCWJvb2wJ CWxhenlFdmFsOwkJLyogdHJ1ZSBpZiBzaG91bGQgZmV0Y2ggb25lIHJvdyBhdCBhIHRpbWUgKi8K IAlQbGFubmVkU3RtdCAqc3RtdDsJCQkvKiBwbGFuIGZvciB0aGlzIHF1ZXJ5ICovCisJRXhlY1By ZXAgICAqcHJlcDsJCQkvKiBFeGVjdXRvclByZXAoKSBvdXRwdXQgZm9yIHRoaXMgcGxhbiAqLwog CVF1ZXJ5RGVzYyAgKnFkOwkJCQkvKiBudWxsIHVubGVzcyBzdGF0dXMgPT0gUlVOICovCiB9IGV4 ZWN1dGlvbl9zdGF0ZTsKIApAQCAtNjU3LDYgKzY1OCw4IEBAIGluaXRfZXhlY3V0aW9uX3N0YXRl KFNRTEZ1bmN0aW9uQ2FjaGVQdHIgZmNhY2hlKQogCWV4ZWN1dGlvbl9zdGF0ZSAqbGFzdHRhZ2Vz ID0gTlVMTDsKIAlpbnQJCQluc3RtdHM7CiAJTGlzdENlbGwgICAqbGM7CisJQ2FjaGVkUGxhblBy ZXBEYXRhIGNwcmVwID0gezB9OworCWludAkJCWk7CiAKIAkvKgogCSAqIENsZWFuIHVwIGFmdGVy IHByZXZpb3VzIHF1ZXJ5LCBpZiB0aGVyZSB3YXMgb25lLgpAQCAtNjk1LDEwICs2OTgsMTMgQEAg aW5pdF9leGVjdXRpb25fc3RhdGUoU1FMRnVuY3Rpb25DYWNoZVB0ciBmY2FjaGUpCiAJICogQ3Vy cmVudFJlc291cmNlT3duZXIgd2lsbCBiZSB0aGUgc2FtZSB3aGVuIFNodXRkb3duU1FMRnVuY3Rp b24gcnVucy4pCiAJICovCiAJZmNhY2hlLT5jb3duZXIgPSBDdXJyZW50UmVzb3VyY2VPd25lcjsK KwljcHJlcC5jb250ZXh0ID0gZmNhY2hlLT5mY29udGV4dDsKKwljcHJlcC5vd25lciA9IGZjYWNo ZS0+Y293bmVyOwogCWZjYWNoZS0+Y3BsYW4gPSBHZXRDYWNoZWRQbGFuKHBsYW5zb3VyY2UsCiAJ CQkJCQkJCSAgZmNhY2hlLT5wYXJhbUxJLAogCQkJCQkJCQkgIGZjYWNoZS0+Y293bmVyLAotCQkJ CQkJCQkgIE5VTEwpOworCQkJCQkJCQkgIE5VTEwsCisJCQkJCQkJCSAgJmNwcmVwKTsKIAogCS8q CiAJICogSWYgbmVjZXNzYXJ5LCBtYWtlIGVzYXJyYXlbXSBiaWdnZXIgdG8gaG9sZCB0aGUgbmVl ZGVkIHN0YXRlLgpAQCAtNzE5LDkgKzcyNSwxMiBAQCBpbml0X2V4ZWN1dGlvbl9zdGF0ZShTUUxG dW5jdGlvbkNhY2hlUHRyIGZjYWNoZSkKIAkvKgogCSAqIEJ1aWxkIGV4ZWN1dGlvbl9zdGF0ZSBs aXN0IHRvIG1hdGNoIHRoZSBudW1iZXIgb2YgY29udGFpbmVkIHBsYW5zLgogCSAqLworCWkgPSAw OwogCWZvcmVhY2gobGMsIGZjYWNoZS0+Y3BsYW4tPnN0bXRfbGlzdCkKIAl7CiAJCVBsYW5uZWRT dG10ICpzdG10ID0gbGZpcnN0X25vZGUoUGxhbm5lZFN0bXQsIGxjKTsKKwkJRXhlY1ByZXAgKnBy ZXAgPSBjcHJlcC5wcmVwX2xpc3QgPyBsaXN0X250aChjcHJlcC5wcmVwX2xpc3QsIGkpIDoKKwkJ CU5VTEw7CiAJCWV4ZWN1dGlvbl9zdGF0ZSAqbmV3ZXM7CiAKIAkJLyoKQEAgLTc2Myw2ICs3NzIs NyBAQCBpbml0X2V4ZWN1dGlvbl9zdGF0ZShTUUxGdW5jdGlvbkNhY2hlUHRyIGZjYWNoZSkKIAkJ bmV3ZXMtPnNldHNSZXN1bHQgPSBmYWxzZTsJLyogbWlnaHQgY2hhbmdlIGJlbG93ICovCiAJCW5l d2VzLT5sYXp5RXZhbCA9IGZhbHNlOwkvKiBtaWdodCBjaGFuZ2UgYmVsb3cgKi8KIAkJbmV3ZXMt PnN0bXQgPSBzdG10OworCQluZXdlcy0+cHJlcCA9IHByZXA7CiAJCW5ld2VzLT5xZCA9IE5VTEw7 CiAKIAkJaWYgKHN0bXQtPmNhblNldFRhZykKQEAgLTEzNjIsNyArMTM3Miw3IEBAIHBvc3RxdWVs X3N0YXJ0KGV4ZWN1dGlvbl9zdGF0ZSAqZXMsIFNRTEZ1bmN0aW9uQ2FjaGVQdHIgZmNhY2hlKQog CQlkZXN0ID0gTm9uZV9SZWNlaXZlcjsKIAogCWVzLT5xZCA9IENyZWF0ZVF1ZXJ5RGVzYyhlcy0+ c3RtdCwKLQkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgZXMtPnByZXAsCiAJCQkJCQkJIGZjYWNoZS0+ ZnVuYy0+c3JjLAogCQkJCQkJCSBHZXRBY3RpdmVTbmFwc2hvdCgpLAogCQkJCQkJCSBJbnZhbGlk U25hcHNob3QsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFi bGUuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCmluZGV4IDRjNTY0 N2FjMzhhLi5jNTgxMjYxMmY4ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZU1vZGlmeVRhYmxlLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxl LmMKQEAgLTQ2NDgsOCArNDY0OCw4IEBAIEV4ZWNJbml0TW9kaWZ5VGFibGUoTW9kaWZ5VGFibGUg Km5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCSAqIGFzIGEgcmVmZXJlbmNlIGZv ciBidWlsZGluZyB0aGUgUmVzdWx0UmVsSW5mbyBvZiB0aGUgdGFyZ2V0IHBhcnRpdGlvbi4KIAkg KiBJbiBlaXRoZXIgY2FzZSwgaXQgZG9lc24ndCBtYXR0ZXIgd2hpY2ggcmVzdWx0IHJlbGF0aW9u IGlzIGtlcHQsIHNvIHdlCiAJICoganVzdCBrZWVwIHRoZSBmaXJzdCBvbmUsIGlmIGFsbCBvdGhl cnMgaGF2ZSBiZWVuIHBydW5lZC4gIFNlZSBhbHNvLAotCSAqIEV4ZWNEb0luaXRpYWxQcnVuaW5n KCksIHdoaWNoIGVuc3VyZXMgdGhhdCB0aGlzIGZpcnN0IHJlc3VsdCByZWxhdGlvbgotCSAqIGhh cyBiZWVuIGxvY2tlZC4KKwkgKiBBY3F1aXJlRXhlY3V0b3JMb2Nrc1VucHJ1bmVkKCksIHdoaWNo IGVuc3VyZXMgdGhhdCB0aGlzIGZpcnN0IHJlc3VsdAorCSAqIHJlbGF0aW9uIGhhcyBiZWVuIGxv Y2tlZC4KIAkgKi8KIAlpID0gMDsKIAlmb3JlYWNoKGwsIG5vZGUtPnJlc3VsdFJlbGF0aW9ucykK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivc3BpLmMKaW5kZXggN2EzY2I5NDRkNmYuLjcyZDUyYmFmZjRiIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9leGVjdXRvci9zcGkuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9zcGku YwpAQCAtMTU3OSw2ICsxNTc5LDcgQEAgU1BJX2N1cnNvcl9vcGVuX2ludGVybmFsKGNvbnN0IGNo YXIgKm5hbWUsIFNQSVBsYW5QdHIgcGxhbiwKIHsKIAlDYWNoZWRQbGFuU291cmNlICpwbGFuc291 cmNlOwogCUNhY2hlZFBsYW4gKmNwbGFuOworCUNhY2hlZFBsYW5QcmVwRGF0YSBjcHJlcCA9IHsw fTsKIAlMaXN0CSAgICpzdG10X2xpc3Q7CiAJY2hhcgkgICAqcXVlcnlfc3RyaW5nOwogCVNuYXBz aG90CXNuYXBzaG90OwpAQCAtMTY1OSw3ICsxNjYwLDEwIEBAIFNQSV9jdXJzb3Jfb3Blbl9pbnRl cm5hbChjb25zdCBjaGFyICpuYW1lLCBTUElQbGFuUHRyIHBsYW4sCiAJICovCiAKIAkvKiBSZXBs YW4gaWYgbmVlZGVkLCBhbmQgaW5jcmVtZW50IHBsYW4gcmVmY291bnQgZm9yIHBvcnRhbCAqLwot CWNwbGFuID0gR2V0Q2FjaGVkUGxhbihwbGFuc291cmNlLCBwYXJhbUxJLCBOVUxMLCBfU1BJX2N1 cnJlbnQtPnF1ZXJ5RW52KTsKKwljcHJlcC5jb250ZXh0ID0gcG9ydGFsLT5wb3J0YWxDb250ZXh0 OworCWNwcmVwLm93bmVyID0gcG9ydGFsLT5yZXNvd25lcjsKKwljcGxhbiA9IEdldENhY2hlZFBs YW4ocGxhbnNvdXJjZSwgcGFyYW1MSSwgTlVMTCwgX1NQSV9jdXJyZW50LT5xdWVyeUVudiwKKwkJ CQkJCSAgJmNwcmVwKTsKIAlzdG10X2xpc3QgPSBjcGxhbi0+c3RtdF9saXN0OwogCiAJaWYgKCFw bGFuLT5zYXZlZCkKQEAgLTE2ODUsNyArMTY4OSw3IEBAIFNQSV9jdXJzb3Jfb3Blbl9pbnRlcm5h bChjb25zdCBjaGFyICpuYW1lLCBTUElQbGFuUHRyIHBsYW4sCiAJCQkJCSAgcXVlcnlfc3RyaW5n LAogCQkJCQkgIHBsYW5zb3VyY2UtPmNvbW1hbmRUYWcsCiAJCQkJCSAgc3RtdF9saXN0LAotCQkJ CQkgIE5JTCwKKwkJCQkJICBjcHJlcC5wcmVwX2xpc3QsCS8qIFhYWCAtIG5lZWQgY29weT8gKi8K IAkJCQkJICBjcGxhbik7CiAKIAkvKgpAQCAtMjA3OCw2ICsyMDgyLDcgQEAgU1BJX3BsYW5fZ2V0 X2NhY2hlZF9wbGFuKFNQSVBsYW5QdHIgcGxhbikKIHsKIAlDYWNoZWRQbGFuU291cmNlICpwbGFu c291cmNlOwogCUNhY2hlZFBsYW4gKmNwbGFuOworCUNhY2hlZFBsYW5QcmVwRGF0YSBjcHJlcCA9 IHswfTsKIAlTUElDYWxsYmFja0FyZyBzcGljYWxsYmFja2FyZzsKIAlFcnJvckNvbnRleHRDYWxs YmFjayBzcGllcnJjb250ZXh0OwogCkBAIC0yMTAxLDkgKzIxMDYsMTIgQEAgU1BJX3BsYW5fZ2V0 X2NhY2hlZF9wbGFuKFNQSVBsYW5QdHIgcGxhbikKIAllcnJvcl9jb250ZXh0X3N0YWNrID0gJnNw aWVycmNvbnRleHQ7CiAKIAkvKiBHZXQgdGhlIGdlbmVyaWMgcGxhbiBmb3IgdGhlIHF1ZXJ5ICov CisJY3ByZXAuY29udGV4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0OworCWNwcmVwLm93bmVyID0g Q3VycmVudFJlc291cmNlT3duZXI7CiAJY3BsYW4gPSBHZXRDYWNoZWRQbGFuKHBsYW5zb3VyY2Us IE5VTEwsCiAJCQkJCQkgIHBsYW4tPnNhdmVkID8gQ3VycmVudFJlc291cmNlT3duZXIgOiBOVUxM LAotCQkJCQkJICBfU1BJX2N1cnJlbnQtPnF1ZXJ5RW52KTsKKwkJCQkJCSAgX1NQSV9jdXJyZW50 LT5xdWVyeUVudiwKKwkJCQkJCSAgJmNwcmVwKTsKIAlBc3NlcnQoY3BsYW4gPT0gcGxhbnNvdXJj ZS0+Z3BsYW4pOwogCiAJLyogUG9wIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCkBAIC0yNTAx LDYgKzI1MDksNyBAQCBfU1BJX2V4ZWN1dGVfcGxhbihTUElQbGFuUHRyIHBsYW4sIGNvbnN0IFNQ SUV4ZWN1dGVPcHRpb25zICpvcHRpb25zLAogCQlDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNl ID0gKENhY2hlZFBsYW5Tb3VyY2UgKikgbGZpcnN0KGxjMSk7CiAJCUxpc3QJICAgKnN0bXRfbGlz dDsKIAkJTGlzdENlbGwgICAqbGMyOworCQlDYWNoZWRQbGFuUHJlcERhdGEgY3ByZXAgPSB7MH07 CiAJCUxpc3QJICAgKnByZXBfbGlzdDsKIAkJaW50CQkJaTsKIApAQCAtMjU3NywxMSArMjU4Niwx NCBAQCBfU1BJX2V4ZWN1dGVfcGxhbihTUElQbGFuUHRyIHBsYW4sIGNvbnN0IFNQSUV4ZWN1dGVP cHRpb25zICpvcHRpb25zLAogCQkgKiBSZXBsYW4gaWYgbmVlZGVkLCBhbmQgaW5jcmVtZW50IHBs YW4gcmVmY291bnQuICBJZiBpdCdzIGEgc2F2ZWQKIAkJICogcGxhbiwgdGhlIHJlZmNvdW50IG11 c3QgYmUgYmFja2VkIGJ5IHRoZSBwbGFuX293bmVyLgogCQkgKi8KKwkJY3ByZXAuY29udGV4dCA9 IEN1cnJlbnRNZW1vcnlDb250ZXh0OworCQljcHJlcC5vd25lciA9IEN1cnJlbnRSZXNvdXJjZU93 bmVyOwogCQljcGxhbiA9IEdldENhY2hlZFBsYW4ocGxhbnNvdXJjZSwgb3B0aW9ucy0+cGFyYW1z LAotCQkJCQkJCSAgcGxhbl9vd25lciwgX1NQSV9jdXJyZW50LT5xdWVyeUVudik7CisJCQkJCQkJ ICBwbGFuX293bmVyLCBfU1BJX2N1cnJlbnQtPnF1ZXJ5RW52LAorCQkJCQkJCSAgJmNwcmVwKTsK IAogCQlzdG10X2xpc3QgPSBjcGxhbi0+c3RtdF9saXN0OwotCQlwcmVwX2xpc3QgPSBOSUw7CisJ CXByZXBfbGlzdCA9IGNwcmVwLnByZXBfbGlzdDsKIAogCQkvKgogCQkgKiBJZiB3ZSB3ZXJlbid0 IGdpdmVuIGEgc3BlY2lmaWMgc25hcHNob3QgdG8gdXNlLCBhbmQgdGhlIHN0YXRlbWVudApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IGM0ZmQ2NDZiOTk5Li40Yzc2ZTc4YzFk YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCisrKyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNjA4LDYgKzYwOCw3IEBA IHN0YW5kYXJkX3BsYW5uZXIoUXVlcnkgKnBhcnNlLCBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcs IGludCBjdXJzb3JPcHRpb25zLAogCQkJCQkJCQkJCQkgIGdsb2ItPnBydW5hYmxlUmVsaWRzKTsK IAlyZXN1bHQtPnBlcm1JbmZvcyA9IGdsb2ItPmZpbmFscnRlcGVybWluZm9zOwogCXJlc3VsdC0+ cmVzdWx0UmVsYXRpb25zID0gZ2xvYi0+cmVzdWx0UmVsYXRpb25zOworCXJlc3VsdC0+Zmlyc3RS ZXN1bHRSZWxzID0gZ2xvYi0+Zmlyc3RSZXN1bHRSZWxzOwogCXJlc3VsdC0+YXBwZW5kUmVsYXRp b25zID0gZ2xvYi0+YXBwZW5kUmVsYXRpb25zOwogCXJlc3VsdC0+c3VicGxhbnMgPSBnbG9iLT5z dWJwbGFuczsKIAlyZXN1bHQtPnJld2luZFBsYW5JRHMgPSBnbG9iLT5yZXdpbmRQbGFuSURzOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCmluZGV4IGNjZGM5YmMyNjRhLi4yMjliMzkw NjBhZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCisr KyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwpAQCAtMTI3NCw2ICsxMjc0 LDkgQEAgc2V0X3BsYW5fcmVmcyhQbGFubmVySW5mbyAqcm9vdCwgUGxhbiAqcGxhbiwgaW50IHJ0 b2Zmc2V0KQogCQkJCQkJbGFwcGVuZF9pbnQocm9vdC0+Z2xvYi0+cmVzdWx0UmVsYXRpb25zLAog CQkJCQkJCQkJc3BsYW4tPnJvb3RSZWxhdGlvbik7CiAJCQkJfQorCQkJCXJvb3QtPmdsb2ItPmZp cnN0UmVzdWx0UmVscyA9CisJCQkJCWxhcHBlbmRfaW50KHJvb3QtPmdsb2ItPmZpcnN0UmVzdWx0 UmVscywKKwkJCQkJCQkJbGluaXRpYWxfaW50KHNwbGFuLT5yZXN1bHRSZWxhdGlvbnMpKTsKIAkJ CX0KIAkJCWJyZWFrOwogCQljYXNlIFRfQXBwZW5kOgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dGNvcC9wb3N0Z3Jlcy5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCmluZGV4IGQzOTY0 YTEyYTE0Li44Mjk3MmJlZWU3MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jl cy5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwpAQCAtMTYzOSw2ICsxNjM5LDcg QEAgZXhlY19iaW5kX21lc3NhZ2UoU3RyaW5nSW5mbyBpbnB1dF9tZXNzYWdlKQogCWludDE2CSAg ICpyZm9ybWF0cyA9IE5VTEw7CiAJQ2FjaGVkUGxhblNvdXJjZSAqcHNyYzsKIAlDYWNoZWRQbGFu ICpjcGxhbjsKKwlDYWNoZWRQbGFuUHJlcERhdGEgY3ByZXAgPSB7MH07CiAJUG9ydGFsCQlwb3J0 YWw7CiAJY2hhcgkgICAqcXVlcnlfc3RyaW5nOwogCWNoYXIJICAgKnNhdmVkX3N0bXRfbmFtZTsK QEAgLTIwMjEsNyArMjAyMiw5IEBAIGV4ZWNfYmluZF9tZXNzYWdlKFN0cmluZ0luZm8gaW5wdXRf bWVzc2FnZSkKIAkgKiB3aWxsIGJlIGdlbmVyYXRlZCBpbiBNZXNzYWdlQ29udGV4dC4gIFRoZSBw bGFuIHJlZmNvdW50IHdpbGwgYmUKIAkgKiBhc3NpZ25lZCB0byB0aGUgUG9ydGFsLCBzbyBpdCB3 aWxsIGJlIHJlbGVhc2VkIGF0IHBvcnRhbCBkZXN0cnVjdGlvbi4KIAkgKi8KLQljcGxhbiA9IEdl dENhY2hlZFBsYW4ocHNyYywgcGFyYW1zLCBOVUxMLCBOVUxMKTsKKwljcHJlcC5jb250ZXh0ID0g cG9ydGFsLT5wb3J0YWxDb250ZXh0OworCWNwcmVwLm93bmVyID0gcG9ydGFsLT5yZXNvd25lcjsK KwljcGxhbiA9IEdldENhY2hlZFBsYW4ocHNyYywgcGFyYW1zLCBOVUxMLCBOVUxMLCAmY3ByZXAp OwogCiAJLyoKIAkgKiBOb3cgd2UgY2FuIGRlZmluZSB0aGUgcG9ydGFsLgpAQCAtMjAzNCw3ICsy MDM3LDcgQEAgZXhlY19iaW5kX21lc3NhZ2UoU3RyaW5nSW5mbyBpbnB1dF9tZXNzYWdlKQogCQkJ CQkgIHF1ZXJ5X3N0cmluZywKIAkJCQkJICBwc3JjLT5jb21tYW5kVGFnLAogCQkJCQkgIGNwbGFu LT5zdG10X2xpc3QsCi0JCQkJCSAgTklMLAorCQkJCQkgIGNwcmVwLnByZXBfbGlzdCwKIAkJCQkJ ICBjcGxhbik7CiAKIAkvKiBQb3J0YWwgaXMgZGVmaW5lZCwgc2V0IHRoZSBwbGFuIElEIGJhc2Vk IG9uIGl0cyBjb250ZW50cy4gKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hl L3BsYW5jYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMKaW5kZXgg NjY2MWQyYzZiNzMuLmViY2Y2MDFmY2U3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9j YWNoZS9wbGFuY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUu YwpAQCAtOTMsNyArOTMsNyBAQCBzdGF0aWMgYm9vbCBTdG10UGxhblJlcXVpcmVzUmV2YWxpZGF0 aW9uKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpOwogc3RhdGljIGJvb2wgQnVpbGRpbmdQ bGFuUmVxdWlyZXNTbmFwc2hvdChDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKTsKIHN0YXRp YyBMaXN0ICpSZXZhbGlkYXRlQ2FjaGVkUXVlcnkoQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJj ZSwKIAkJCQkJCQkJICAgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpOwotc3RhdGljIGJvb2wg Q2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpOworc3RhdGljIGJv b2wgUHJlcEFuZENoZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBD YWNoZWRQbGFuUHJlcERhdGEgKmNwcmVwKTsKIHN0YXRpYyBDYWNoZWRQbGFuICpCdWlsZENhY2hl ZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgTGlzdCAqcWxpc3QsCiAJCQkJCQkJ CSAgIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52 KTsKIHN0YXRpYyBib29sIGNob29zZV9jdXN0b21fcGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFu c291cmNlLApAQCAtMTAxLDYgKzEwMSw4IEBAIHN0YXRpYyBib29sIGNob29zZV9jdXN0b21fcGxh bihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLAogc3RhdGljIGRvdWJsZSBjYWNoZWRfcGxh bl9jb3N0KENhY2hlZFBsYW4gKnBsYW4sIGJvb2wgaW5jbHVkZV9wbGFubmVyKTsKIHN0YXRpYyBR dWVyeSAqUXVlcnlMaXN0R2V0UHJpbWFyeVN0bXQoTGlzdCAqc3RtdHMpOwogc3RhdGljIHZvaWQg QWNxdWlyZUV4ZWN1dG9yTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUpOworc3Rh dGljIHZvaWQgQWNxdWlyZUV4ZWN1dG9yTG9ja3NVbnBydW5lZChMaXN0ICpzdG10X2xpc3QsIGJv b2wgYWNxdWlyZSwKKwkJCQkJCQkJCQkgQ2FjaGVkUGxhblByZXBEYXRhICpjcHJlcCk7CiBzdGF0 aWMgdm9pZCBBY3F1aXJlUGxhbm5lckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJl KTsKIHN0YXRpYyB2b2lkIFNjYW5RdWVyeUZvckxvY2tzKFF1ZXJ5ICpwYXJzZXRyZWUsIGJvb2wg YWNxdWlyZSk7CiBzdGF0aWMgYm9vbCBTY2FuUXVlcnlXYWxrZXIoTm9kZSAqbm9kZSwgYm9vbCAq YWNxdWlyZSk7CkBAIC0xMzcsNiArMTM5LDI2IEBAIFJlc291cmNlT3duZXJGb3JnZXRQbGFuQ2Fj aGVSZWYoUmVzb3VyY2VPd25lciBvd25lciwgQ2FjaGVkUGxhbiAqcGxhbikKIC8qIEdVQyBwYXJh bWV0ZXIgKi8KIGludAkJCXBsYW5fY2FjaGVfbW9kZSA9IFBMQU5fQ0FDSEVfTU9ERV9BVVRPOwog CisvKgorICogTG9jayBhY3F1aXNpdGlvbiBwb2xpY3kgZm9yIGV4ZWN1dGlvbiBsb2Nrcy4KKyAq CisgKiBMT0NLX0FMTCBhY3F1aXJlcyBsb2NrcyBvbiBhbGwgcmVsYXRpb25zIG1lbnRpb25lZCBp biB0aGUgcGxhbiwKKyAqIHJlcHJvZHVjaW5nIHRoZSBiZWhhdmlvciBvZiBBY3F1aXJlRXhlY3V0 b3JMb2NrcygpLgorICoKKyAqIExPQ0tfVU5QUlVORUQgcmVzdHJpY3RzIGxvY2tpbmcgdG8gb25s eSB0aGUgdW5wcnVuZWQgcmVsYXRpb25zLiBUaGF0CisgKiBpbmNsdWRlcyB0aG9zZSBtZW50aW9u ZWQgaW4gUGxhbm5lZFN0bXQudW5wcnVuYWJsZVJlbGlkcyBhbmQgdGhlIGxlYWYKKyAqIHBhcnRp dGlvbnMgcmVtYWluaW5nIGFmdGVyIHBlcmZvcm1pbmcgaW5pdGlhbCBwcnVuaW5nLgorICovCit0 eXBlZGVmIGVudW0gTG9ja1BvbGljeQoreworCUxPQ0tfQUxMLAorCUxPQ0tfVU5QUlVORUQsCit9 IExvY2tQb2xpY3k7CisKK3N0YXRpYyB2b2lkIEFjcXVpcmVFeGVjdXRvckxvY2tzV2l0aFBvbGlj eShMaXN0ICpzdG10X2xpc3QsCisJCQkJCQkJCQkJICAgTG9ja1BvbGljeSBwb2xpY3ksIGJvb2wg YWNxdWlyZSwKKwkJCQkJCQkJCQkgICBDYWNoZWRQbGFuUHJlcERhdGEgKmNwcmVwKTsKKwogLyoK ICAqIEluaXRQbGFuQ2FjaGU6IGluaXRpYWxpemUgbW9kdWxlIGR1cmluZyBJbml0UG9zdGdyZXMu CiAgKgpAQCAtOTM4LDcgKzk2MCwxMiBAQCBSZXZhbGlkYXRlQ2FjaGVkUXVlcnkoQ2FjaGVkUGxh blNvdXJjZSAqcGxhbnNvdXJjZSwKIH0KIAogLyoKLSAqIENoZWNrQ2FjaGVkUGxhbjogc2VlIGlm IHRoZSBDYWNoZWRQbGFuU291cmNlJ3MgZ2VuZXJpYyBwbGFuIGlzIHZhbGlkLgorICogUHJlcEFu ZENoZWNrQ2FjaGVkUGxhbjogc2VlIGlmIHRoZSBDYWNoZWRQbGFuU291cmNlJ3MgZ2VuZXJpYyBw bGFuIGlzIHZhbGlkLgorICoKKyAqIElmICdjcHJlcCcgaXMgbm90IE5VTEwsIEV4ZWN1dG9yUHJl cCgpIGlzIGFwcGxpZWQgdG8gZWFjaCBQbGFubmVkU3RtdCB0bworICogY29tcHV0ZSB0aGUgc2V0 IG9mIHBhcnRpdGlvbnMgdGhhdCBzdXJ2aXZlIGluaXRpYWwgcnVudGltZSBwcnVuaW5nIGluIG9y ZGVyCisgKiB0byBvbmx5IGxvY2sgdGhlbS4gIFRoZSByZXN1bHRpbmcgRXhlY1ByZXAgc3RydWN0 dXJlcyBhcmUgc2F2ZWQgaW4gY3ByZXAgZm9yCisgKiBsYXRlciByZXVzZSBieSBFeGVjdXRvclN0 YXJ0KCkuCiAgKgogICogQ2FsbGVyIG11c3QgaGF2ZSBhbHJlYWR5IGNhbGxlZCBSZXZhbGlkYXRl Q2FjaGVkUXVlcnkgdG8gdmVyaWZ5IHRoYXQgdGhlCiAgKiBxdWVyeXRyZWUgaXMgdXAgdG8gZGF0 ZS4KQEAgLTk0Nyw3ICs5NzQsNyBAQCBSZXZhbGlkYXRlQ2FjaGVkUXVlcnkoQ2FjaGVkUGxhblNv dXJjZSAqcGxhbnNvdXJjZSwKICAqIChXZSBtdXN0IGRvIHRoaXMgZm9yIHRoZSAidHJ1ZSIgcmVz dWx0IHRvIGJlIHJhY2UtY29uZGl0aW9uLWZyZWUuKQogICovCiBzdGF0aWMgYm9vbAotQ2hlY2tD YWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpCitQcmVwQW5kQ2hlY2tDYWNo ZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIENhY2hlZFBsYW5QcmVwRGF0YSAq Y3ByZXApCiB7CiAJQ2FjaGVkUGxhbiAqcGxhbiA9IHBsYW5zb3VyY2UtPmdwbGFuOwogCkBAIC05 NzUsMTMgKzEwMDIsMTUgQEAgQ2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5z b3VyY2UpCiAJICovCiAJaWYgKHBsYW4tPmlzX3ZhbGlkKQogCXsKKwkJTG9ja1BvbGljeSBwb2xp Y3kgPSAhY3ByZXAgPyBMT0NLX0FMTCA6IExPQ0tfVU5QUlVORUQ7CisKIAkJLyoKIAkJICogUGxh biBtdXN0IGhhdmUgcG9zaXRpdmUgcmVmY291bnQgYmVjYXVzZSBpdCBpcyByZWZlcmVuY2VkIGJ5 CiAJCSAqIHBsYW5zb3VyY2U7IHNvIG5vIG5lZWQgdG8gZmVhciBpdCBkaXNhcHBlYXJzIHVuZGVy IHVzIGhlcmUuCiAJCSAqLwogCQlBc3NlcnQocGxhbi0+cmVmY291bnQgPiAwKTsKIAotCQlBY3F1 aXJlRXhlY3V0b3JMb2NrcyhwbGFuLT5zdG10X2xpc3QsIHRydWUpOworCQlBY3F1aXJlRXhlY3V0 b3JMb2Nrc1dpdGhQb2xpY3kocGxhbi0+c3RtdF9saXN0LCBwb2xpY3ksIHRydWUsIGNwcmVwKTsK IAogCQkvKgogCQkgKiBJZiBwbGFuIHdhcyB0cmFuc2llbnQsIGNoZWNrIHRvIHNlZSBpZiBUcmFu c2FjdGlvblhtaW4gaGFzCkBAIC0xMDAzLDcgKzEwMzIsNyBAQCBDaGVja0NhY2hlZFBsYW4oQ2Fj aGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSkKIAkJfQogCiAJCS8qIE9vcHMsIHRoZSByYWNlIGNh c2UgaGFwcGVuZWQuICBSZWxlYXNlIHVzZWxlc3MgbG9ja3MuICovCi0JCUFjcXVpcmVFeGVjdXRv ckxvY2tzKHBsYW4tPnN0bXRfbGlzdCwgZmFsc2UpOworCQlBY3F1aXJlRXhlY3V0b3JMb2Nrc1dp dGhQb2xpY3kocGxhbi0+c3RtdF9saXN0LCBwb2xpY3ksIGZhbHNlLCBjcHJlcCk7CiAJfQogCiAJ LyoKQEAgLTEyODMsNiArMTMxMiwxMCBAQCBjYWNoZWRfcGxhbl9jb3N0KENhY2hlZFBsYW4gKnBs YW4sIGJvb2wgaW5jbHVkZV9wbGFubmVyKQogICogT24gcmV0dXJuLCB0aGUgcGxhbiBpcyB2YWxp ZCBhbmQgd2UgaGF2ZSBzdWZmaWNpZW50IGxvY2tzIHRvIGJlZ2luCiAgKiBleGVjdXRpb24uCiAg KgorICogSWYgJ2NwcmVwJyBpcyBub3QgTlVMTCBhbmQgYSBnZW5lcmljIHBsYW4gaXMgcmV1c2Vk LCB0aGUgZnVuY3Rpb24gcHJlcGFyZXMKKyAqIGVhY2ggUGxhbm5lZFN0bXQgdmlhIEV4ZWN1dG9y UHJlcCgpIGFuZCBzdG9yZXMgdGhlIHJlc3VsdHMgaW4KKyAqIGNwcmVwLT5wcmVwX2xpc3QuICBU aGVzZSBhcmUgaW50ZW5kZWQgdG8gYmUgcGFzc2VkIGxhdGVyIHRvIEV4ZWN1dG9yU3RhcnQoKS4K KyAqCiAgKiBPbiByZXR1cm4sIHRoZSByZWZjb3VudCBvZiB0aGUgcGxhbiBoYXMgYmVlbiBpbmNy ZW1lbnRlZDsgYSBsYXRlcgogICogUmVsZWFzZUNhY2hlZFBsYW4oKSBjYWxsIGlzIGV4cGVjdGVk LiAgSWYgIm93bmVyIiBpcyBub3QgTlVMTCB0aGVuCiAgKiB0aGUgcmVmY291bnQgaGFzIGJlZW4g cmVwb3J0ZWQgdG8gdGhhdCBSZXNvdXJjZU93bmVyIChub3RlIHRoYXQgdGhpcwpAQCAtMTI5Myw3 ICsxMzI2LDggQEAgY2FjaGVkX3BsYW5fY29zdChDYWNoZWRQbGFuICpwbGFuLCBib29sIGluY2x1 ZGVfcGxhbm5lcikKICAqLwogQ2FjaGVkUGxhbiAqCiBHZXRDYWNoZWRQbGFuKENhY2hlZFBsYW5T b3VyY2UgKnBsYW5zb3VyY2UsIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsCi0JCQkgIFJlc291 cmNlT3duZXIgb3duZXIsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KQorCQkJICBSZXNvdXJj ZU93bmVyIG93bmVyLCBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwKKwkJCSAgQ2FjaGVkUGxh blByZXBEYXRhICpjcHJlcCkKIHsKIAlDYWNoZWRQbGFuICpwbGFuID0gTlVMTDsKIAlMaXN0CSAg ICpxbGlzdDsKQEAgLTEzMTUsNyArMTM0OSw5IEBAIEdldENhY2hlZFBsYW4oQ2FjaGVkUGxhblNv dXJjZSAqcGxhbnNvdXJjZSwgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywKIAogCWlmICghY3Vz dG9tcGxhbikKIAl7Ci0JCWlmIChDaGVja0NhY2hlZFBsYW4ocGxhbnNvdXJjZSkpCisJCWlmIChj cHJlcCkKKwkJCWNwcmVwLT5wYXJhbXMgPSBib3VuZFBhcmFtczsKKwkJaWYgKFByZXBBbmRDaGVj a0NhY2hlZFBsYW4ocGxhbnNvdXJjZSwgY3ByZXApKQogCQl7CiAJCQkvKiBXZSB3YW50IGEgZ2Vu ZXJpYyBwbGFuLCBhbmQgd2UgYWxyZWFkeSBoYXZlIGEgdmFsaWQgb25lICovCiAJCQlwbGFuID0g cGxhbnNvdXJjZS0+Z3BsYW47CkBAIC0xOTAyLDYgKzE5MzgsMzIgQEAgUXVlcnlMaXN0R2V0UHJp bWFyeVN0bXQoTGlzdCAqc3RtdHMpCiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qCisgKiBBY3F1aXJl RXhlY3V0b3JMb2Nrc1dpdGhQb2xpY3kKKyAqICAgICAgQWNxdWlyZSBvciByZWxlYXNlIGV4ZWN1 dGlvbiBsb2NrcyBmb3IgYSBwbGFuIGFjY29yZGluZyB0bworICogICAgICB0aGUgc3BlY2lmaWVk IHBvbGljeS4KKyAqCisgKiBUaGUgcG9saWN5IGRldGVybWluZXMgd2hldGhlciBhbGwgcmVsYXRp b25zIG9yIG9ubHkgdW5wcnVuZWQgb25lcyBhcmUgbG9ja2VkLgorICogRm9yIExPQ0tfVU5QUlVO RUQsIEV4ZWN1dG9yUHJlcCBpcyBpbnZva2VkIHRvIGlkZW50aWZ5IHN1cnZpdmluZyBwYXJ0aXRp b25zCisgKiBhbmQgaXRzIHJlc3VsdCBpcyBwb3B1bGF0ZWQgaW4gY3ByZXAuCisgKi8KK3N0YXRp YyB2b2lkCitBY3F1aXJlRXhlY3V0b3JMb2Nrc1dpdGhQb2xpY3koTGlzdCAqc3RtdF9saXN0LCBM b2NrUG9saWN5IHBvbGljeSwgYm9vbCBhY3F1aXJlLAorCQkJCQkJCSAgIENhY2hlZFBsYW5QcmVw RGF0YSAqY3ByZXApCit7CisJc3dpdGNoIChwb2xpY3kpCisJeworCQljYXNlIExPQ0tfQUxMOgor CQkJQWNxdWlyZUV4ZWN1dG9yTG9ja3Moc3RtdF9saXN0LCBhY3F1aXJlKTsKKwkJCWJyZWFrOwor CQljYXNlIExPQ0tfVU5QUlVORUQ6CisJCQlBY3F1aXJlRXhlY3V0b3JMb2Nrc1VucHJ1bmVkKHN0 bXRfbGlzdCwgYWNxdWlyZSwgY3ByZXApOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9n KEVSUk9SLCAiaW52YWxpZCBMb2NrUG9saWN5Iik7CisJfQorfQorCiAvKgogICogQWNxdWlyZUV4 ZWN1dG9yTG9ja3M6IGFjcXVpcmUgbG9ja3MgbmVlZGVkIGZvciBleGVjdXRpb24gb2YgYSBjYWNo ZWQgcGxhbjsKICAqIG9yIHJlbGVhc2UgdGhlbSBpZiBhY3F1aXJlIGlzIGZhbHNlLgpAQCAtMTk1 NCw2ICsyMDE2LDE1MyBAQCBBY3F1aXJlRXhlY3V0b3JMb2NrcyhMaXN0ICpzdG10X2xpc3QsIGJv b2wgYWNxdWlyZSkKIAl9CiB9CiAKKy8qCisgKiBMb2NrUmVsaWRzCisgKiAJCUFjcXVpcmUgb3Ig cmVsZWFzZSBsb2NrcyBvbiB0aGUgc3BlY2lmaWVkIHJlbGlkcywgd2hpY2ggcmVmZXJlbmNlCisg KiAJCWVudHJpZXMgaW4gdGhlIHByb3ZpZGVkIHJhbmdlIHRhYmxlLgorICoKKyAqIEhlbHBlciBm b3IgQWNxdWlyZUV4ZWN1dG9yTG9ja3NVbnBydW5lZCgpLgorICovCitzdGF0aWMgdm9pZAorTG9j a1JlbGlkcyhMaXN0ICpydGFibGUsIEJpdG1hcHNldCAqcmVsaWRzLCBib29sIGFjcXVpcmUpCit7 CisJaW50CXJ0aW5kZXggPSAtMTsKKworCXdoaWxlICgocnRpbmRleCA9IGJtc19uZXh0X21lbWJl cihyZWxpZHMsIHJ0aW5kZXgpKSA+PSAwKQorCXsKKwkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gbGlz dF9udGhfbm9kZShSYW5nZVRibEVudHJ5LCBydGFibGUsIHJ0aW5kZXggLSAxKTsKKworCQlBc3Nl cnQocnRlLT5ydGVraW5kID09IFJURV9SRUxBVElPTiB8fAorCQkJICAgKHJ0ZS0+cnRla2luZCA9 PSBSVEVfU1VCUVVFUlkgJiYgT2lkSXNWYWxpZChydGUtPnJlbGlkKSkpOworCisJCS8qCisJCSAq IEFjcXVpcmUgdGhlIGFwcHJvcHJpYXRlIHR5cGUgb2YgbG9jayBvbiBlYWNoIHJlbGF0aW9uIE9J RC4gTm90ZQorCQkgKiB0aGF0IHdlIGRvbid0IGFjdHVhbGx5IHRyeSB0byBvcGVuIHRoZSByZWws IGFuZCBoZW5jZSB3aWxsIG5vdAorCQkgKiBmYWlsIGlmIGl0J3MgYmVlbiBkcm9wcGVkIGVudGly ZWx5IC0tLSB3ZSdsbCBqdXN0IHRyYW5zaWVudGx5CisJCSAqIGFjcXVpcmUgYSBub24tY29uZmxp Y3RpbmcgbG9jay4KKwkJICovCisJCWlmIChhY3F1aXJlKQorCQkJTG9ja1JlbGF0aW9uT2lkKHJ0 ZS0+cmVsaWQsIHJ0ZS0+cmVsbG9ja21vZGUpOworCQllbHNlCisJCQlVbmxvY2tSZWxhdGlvbk9p ZChydGUtPnJlbGlkLCBydGUtPnJlbGxvY2ttb2RlKTsKKwl9Cit9CisKKy8qCisgKiBBY3F1aXJl RXhlY3V0b3JMb2Nrc1VucHJ1bmVkCisgKgkJQWNxdWlyZSBvciByZWxlYXNlIGV4ZWN1dGlvbiBs b2NrcyBmb3Igb25seSB1bnBydW5lZCByZWxhdGlvbnMKKyAqCQlyZWZlcmVuY2VkIGJ5IHRoZSBn aXZlbiBQbGFubmVkU3RtdHMuCisgKgorICogVGhpcyBmdW5jdGlvbiB1c2VzIEV4ZWN1dG9yUHJl cCB0byBpZGVudGlmeSB3aGljaCBwYXJ0aXRpb25zIHN1cnZpdmUKKyAqIGluaXRpYWwgcnVudGlt ZSBwcnVuaW5nIGFuZCBsb2NrcyBvbmx5IHRob3NlLCBhbG9uZyB3aXRoIGFueSB1bnBydW5hYmxl CisgKiBiYXNlIHJlbGF0aW9ucy4gRHVyaW5nIGFjcXVpcmUsIHRoZSByZXN1bHRpbmcgRXhlY1By ZXAgb2JqZWN0cyBhcmUgc3RvcmVkCisgKiBpbiBjcHJlcC0+cHJlcF9saXN0IGZvciBsYXRlciBy ZXVzZS4gRHVyaW5nIHJlbGVhc2UsIHRob3NlIHNhbWUgRXhlY1ByZXAKKyAqIG9iamVjdHMgYXJl IHVzZWQgdG8gaWRlbnRpZnkgd2hhdCB0byB1bmxvY2suCisgKgorICogVW5saWtlIEFjcXVpcmVF eGVjdXRvckxvY2tzKCksIHdoaWNoIGxvY2tzIGFsbCByZWxhdGlvbnMgbGlzdGVkIGluIHRoZQor ICogUGxhbm5lZFN0bXQncyBydGFibGUgKExPQ0tfQUxMIHBvbGljeSksIHRoaXMgZnVuY3Rpb24g c2VsZWN0aXZlbHkgbG9ja3MKKyAqIG9ubHkgdGhvc2UgcmVscyB0aGF0IG1heSBiZSByZWZlcmVu Y2VkIGR1cmluZyBleGVjdXRpb24uCisgKgorICogcHJlcF9saXN0IGlzIGV4dGVuZGVkIGR1cmlu ZyBhY3F1aXJlIGFuZCBtdXN0IG1hdGNoIHN0bXRfbGlzdCBkdXJpbmcKKyAqIHJlbGVhc2UuIE1l bW9yeSBhbGxvY2F0aW9uIGhhcHBlbnMgaW4gY3ByZXAtPmNvbnRleHQuCisgKi8KK3N0YXRpYyB2 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+b3duZXIsIHRydWUpOwor CQkJQXNzZXJ0KHByZXAgfHwgcGxhbm5lZHN0bXQtPnBhcnRQcnVuZUluZm9zID09IE5VTEwpOwor CQkJY3ByZXAtPnByZXBfbGlzdCA9IGxhcHBlbmQoY3ByZXAtPnByZXBfbGlzdCwgcHJlcCk7CisJ CX0KKwkJZWxzZQorCQkJcHJlcCA9IGxpc3RfbnRoKHByZXBfbGlzdCwgaSsrKTsKKworCQlBc3Nl cnQocHJlcCA9PSBOVUxMIHx8IHByZXAtPnByZXBfZXN0YXRlKTsKKwkJaWYgKHByZXApCisJCXsK KwkJCUVTdGF0ZSAqcHJlcF9lc3RhdGUgPSBwcmVwLT5wcmVwX2VzdGF0ZTsKKworCQkJLyoKKwkJ CSAqIGVzX3VucHJ1bmVkX3JlbGlkcyBpbmNsdWRlcyBwbGFubmVkc3RtdC0+dW5wcnVuYWJsZVJl bGlkcywKKwkJCSAqIHdoaWNoIHdlJ3ZlIGFscmVhZHkgbG9ja2VkLiBGaWx0ZXIgdGhlbSBvdXQg dG8gYXZvaWQgZG91YmxlLWxvY2tpbmcuCisJCQkgKi8KKwkJCUJpdG1hcHNldCAqbG9ja19yZWxp ZHMgPSBibXNfZGlmZmVyZW5jZShwcmVwX2VzdGF0ZS0+ZXNfdW5wcnVuZWRfcmVsaWRzLAorCQkJ CQkJCQkJCQkJCXBsYW5uZWRzdG10LT51bnBydW5hYmxlUmVsaWRzKTsKKworCQkJLyoKKwkJCSAq IGZpcnN0UmVzdWx0UmVscyBtYXkgY29udGFpbiBwcnVuZWQgcGFydGl0aW9ucyB0aGF0IG11c3Qg c3RpbGwgYmUKKwkJCSAqIGxvY2tlZCB0byBzYXRpc2Z5IGV4ZWN1dG9yIGFzc3VtcHRpb25zIChz ZWUgY29tbWVudHMgaW4KKwkJCSAqIEV4ZWNJbml0TW9kaWZ5VGFibGUoKS4gRW5zdXJlIHRoZXni gJlyZSBpbmNsdWRlZCBoZXJlLgorCQkJICovCisJCQlpZiAocGxhbm5lZHN0bXQtPnJlc3VsdFJl bGF0aW9ucykKKwkJCXsKKwkJCQlMaXN0Q2VsbCAqbGMyOworCisJCQkJZm9yZWFjaChsYzIsIHBs YW5uZWRzdG10LT5maXJzdFJlc3VsdFJlbHMpCisJCQkJeworCQkJCQlJbmRleCAgICAgICBmaXJz dFJlc3VsdFJlbCA9IGxmaXJzdF9pbnQobGMyKTsKKworCQkJCQlpZiAoIWJtc19pc19tZW1iZXIo Zmlyc3RSZXN1bHRSZWwsIGxvY2tfcmVsaWRzKSkKKwkJCQkJCWxvY2tfcmVsaWRzID0gYm1zX2Fk ZF9tZW1iZXIobG9ja19yZWxpZHMsIGZpcnN0UmVzdWx0UmVsKTsKKwkJCQl9CisJCQl9CisKKwkJ CUxvY2tSZWxpZHMocGxhbm5lZHN0bXQtPnJ0YWJsZSwgbG9ja19yZWxpZHMsIGFjcXVpcmUpOwor CQkJYm1zX2ZyZWUobG9ja19yZWxpZHMpOworCQl9CisKKwkJLyogQ2xlYW4gdXAgcHJlcCBpZiBy ZWxlYXNpbmcgbG9ja3MuICovCisJCWlmICghYWNxdWlyZSkKKwkJCUV4ZWNQcmVwQ2xlYW51cChw cmVwKTsKKwl9CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Cit9CisKIC8q CiAgKiBBY3F1aXJlUGxhbm5lckxvY2tzOiBhY3F1aXJlIGxvY2tzIG5lZWRlZCBmb3IgcGxhbm5p bmcgb2YgYSBxdWVyeXRyZWUgbGlzdDsKICAqIG9yIHJlbGVhc2UgdGhlbSBpZiBhY3F1aXJlIGlz IGZhbHNlLgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCAzMGQ4ODliNTRjNS4uNmZiODZkYzA1ZjYg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNs dWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0xNDEsNiArMTQxLDkgQEAgdHlwZWRlZiBzdHJ1Y3Qg UGxhbm5lckdsb2JhbAogCS8qICJmbGF0IiBsaXN0IG9mIGludGVnZXIgUlQgaW5kZXhlcyAqLwog CUxpc3QJICAgKnJlc3VsdFJlbGF0aW9uczsKIAorCS8qICJmbGF0IiBsaXN0IG9mIGludGVnZXIg UlQgaW5kZXhlcyAob25lIHBlciBNb2RpZnlUYWJsZSBub2RlKSAqLworCUxpc3QJICAgKmZpcnN0 UmVzdWx0UmVsczsKKwogCS8qICJmbGF0IiBsaXN0IG9mIEFwcGVuZFJlbEluZm9zICovCiAJTGlz dAkgICAqYXBwZW5kUmVsYXRpb25zOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9w bGFubm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCmluZGV4IGM0MzkzYTk0 MzIxLi40MmI1MTI5OWVjZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVz LmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKQEAgLTEyMyw2ICsxMjMsMTMg QEAgdHlwZWRlZiBzdHJ1Y3QgUGxhbm5lZFN0bXQKIAkvKiBpbnRlZ2VyIGxpc3Qgb2YgUlQgaW5k ZXhlcywgb3IgTklMICovCiAJTGlzdAkgICAqcmVzdWx0UmVsYXRpb25zOwogCisJLyoKKwkgKiBy dGFibGUgaW5kZXhlcyBvZiBmaXJzdCB0YXJnZXQgcmVsYXRpb24gaW4gZWFjaCBNb2RpZnlUYWJs ZSBub2RlIGluIHRoZQorCSAqIHBsYW4gZm9yIElOU0VSVC9VUERBVEUvREVMRVRFL01FUkdFCisJ ICovCisJLyogaW50ZWdlciBsaXN0IG9mIFJUIGluZGV4ZXMsIG9yIE5JTCAqLworCUxpc3QJICAg KmZpcnN0UmVzdWx0UmVsczsKKwogCS8qIGxpc3Qgb2YgQXBwZW5kUmVsSW5mbyBub2RlcyAqLwog CUxpc3QJICAgKmFwcGVuZFJlbGF0aW9uczsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRp bHMvcGxhbmNhY2hlLmggYi9zcmMvaW5jbHVkZS91dGlscy9wbGFuY2FjaGUuaAppbmRleCBhODJi NjZkNGJjMi4uNTlmMGIwZmM0YTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3BsYW5j YWNoZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oCkBAIC0xOTcsNiArMTk3 LDI2IEBAIHR5cGVkZWYgc3RydWN0IENhY2hlZEV4cHJlc3Npb24KIH0gQ2FjaGVkRXhwcmVzc2lv bjsKIAogCisvKgorICogQ2FjaGVkUGxhblByZXBEYXRhCisgKglDYXJyaWVzIEV4ZWN1dG9yUHJl cCByZXN1bHRzIGZvciBlYWNoIFBsYW5uZWRTdG10IGluIGEgQ2FjaGVkUGxhbiwKKyAqCWFsb25n IHdpdGggY29udGV4dCBhbmQgb3duZXIgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGFsbG9jYXRlIHRo ZW0uCisgKgorICogUG9wdWxhdGVkIGJ5IEdldENhY2hlZFBsYW4oKSB3aGVuIEV4ZWN1dG9yUHJl cCBpcyBydW4gb24gYSBnZW5lcmljIHBsYW4uCisgKgorICogcHJlcF9saXN0OiByZXN1bHRzIGZy b20gRXhlY3V0b3JQcmVwKCksIG9uZSBwZXIgUGxhbm5lZFN0bXQKKyAqIHBhcmFtczogcGFyYW1l dGVycyB0aGF0IG1heSBiZSB1c2VkIGR1cmluZyBFeGVjdXRvclByZXAgKGUuZy4sIHBydW5pbmcp CisgKiBjb250ZXh0OiBtZW1vcnkgY29udGV4dCB0byBhbGxvY2F0ZSBFeGVjdXRvclByZXAgcmVz dWx0cyBpbgorICogb3duZXI6IHJlc291cmNlIG93bmVyIHRvIGFzc29jaWF0ZSBFeGVjdXRvclBy ZXAgcmVzb3VyY2VzIHdpdGgKKyAqLwordHlwZWRlZiBzdHJ1Y3QgQ2FjaGVkUGxhblByZXBEYXRh Cit7CisJTGlzdCAgICpwcmVwX2xpc3Q7CQkvKiBMaXN0IG9mIEV4ZWNQcmVwICovCisJUGFyYW1M aXN0SW5mbyBwYXJhbXM7CisJTWVtb3J5Q29udGV4dCBjb250ZXh0OworCVJlc291cmNlT3duZXIg b3duZXI7Cit9IENhY2hlZFBsYW5QcmVwRGF0YTsKKwogZXh0ZXJuIHZvaWQgSW5pdFBsYW5DYWNo ZSh2b2lkKTsKIGV4dGVybiB2b2lkIFJlc2V0UGxhbkNhY2hlKHZvaWQpOwogCkBAIC0yNDAsNyAr MjYwLDggQEAgZXh0ZXJuIExpc3QgKkNhY2hlZFBsYW5HZXRUYXJnZXRMaXN0KENhY2hlZFBsYW5T b3VyY2UgKnBsYW5zb3VyY2UsCiBleHRlcm4gQ2FjaGVkUGxhbiAqR2V0Q2FjaGVkUGxhbihDYWNo ZWRQbGFuU291cmNlICpwbGFuc291cmNlLAogCQkJCQkJCQkgUGFyYW1MaXN0SW5mbyBib3VuZFBh cmFtcywKIAkJCQkJCQkJIFJlc291cmNlT3duZXIgb3duZXIsCi0JCQkJCQkJCSBRdWVyeUVudmly b25tZW50ICpxdWVyeUVudik7CisJCQkJCQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwK KwkJCQkJCQkJIENhY2hlZFBsYW5QcmVwRGF0YSAqY3ByZXApOwogZXh0ZXJuIHZvaWQgUmVsZWFz ZUNhY2hlZFBsYW4oQ2FjaGVkUGxhbiAqcGxhbiwgUmVzb3VyY2VPd25lciBvd25lcik7CiAKIGV4 dGVybiBib29sIENhY2hlZFBsYW5BbGxvd3NTaW1wbGVWYWxpZGl0eUNoZWNrKENhY2hlZFBsYW5T b3VyY2UgKnBsYW5zb3VyY2UsCi0tIAoyLjQ3LjMKCg== --0000000000008e54dd0643666e71 Content-Type: application/octet-stream; name="v1-0002-Introduce-ExecutorPrep-infrastructure-for-pre-exe.patch" Content-Disposition: attachment; filename="v1-0002-Introduce-ExecutorPrep-infrastructure-for-pre-exe.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhw02ear2 RnJvbSBlOTY4OTYxOGYyODg5ZjIyNGViNjJlOWZmNGZiNTI1MTI4NWVjZGIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMTEgTm92IDIwMjUgMjE6NDc6NDYgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx IDIvNF0gSW50cm9kdWNlIEV4ZWN1dG9yUHJlcCBpbmZyYXN0cnVjdHVyZSBmb3IKIHByZS1leGVj dXRpb24gc2V0dXAKCkFkZCBFeGVjdXRvclByZXAoKSBhbmQgRXhlY1ByZXAgdG8gc3VwcG9ydCBz ZXR0aW5nIHVwIGV4ZWN1dG9yCm1ldGFkYXRhIGxpa2UgcmFuZ2UgdGFibGUgaW5pdGlhbGl6YXRp b24gYW5kIHBhcnRpdGlvbiBwcnVuaW5nCmFoZWFkIG9mIGFjdHVhbCBleGVjdXRpb24uIFRoaXMg ZW5hYmxlcyBleGVjdXRpb24gcGF0aHMgdG8KcGVyZm9ybSBzZXR1cCBpbmRlcGVuZGVudGx5IG9m IHJ1bm5pbmcgdGhlIHBsYW4uCgpGb3IgZXhhbXBsZSwgcGxhbiB2YWxpZGF0aW9uIGNhbiBjb21w dXRlIGFuZCBjb25zdW1lIHRoaXMKbWV0YWRhdGEgd2l0aG91dCBleGVjdXRpbmcgdGhlIHF1ZXJ5 LiBQYXJhbGxlbCBxdWVyeSB3b3JrZXJzCmNhbiByZWNlaXZlIHByZS1pbml0aWFsaXplZCBzdGF0 ZSBmcm9tIHRoZSBsZWFkZXIgYW5kIHBhc3MgaXQKdG8gRXhlY3V0b3JTdGFydCwgYXZvaWRpbmcg cmVkdW5kYW50IHNldHVwLgoKRXhlY3V0b3JTdGFydCBub3cgYWNjZXB0cyBhIHByZXAtZXN0YXRl IGZyb20gUXVlcnlEZXNjIHRvIHNraXAKcmVwZWF0aW5nIGluaXRpYWxpemF0aW9uLiBUaGUgRXhl Y1ByZXAgd3JhcHBlciBtYW5hZ2VzIGNsZWFudXAKYW5kIHNpZ25hbHMgb3duZXJzaGlwIG9mIHRo ZSBlc3RhdGUuIFByZXBQbGFuKCkgZW5jYXBzdWxhdGVzCnNoYXJlZCBzZXR1cCBsb2dpYy4KCkNh bGwgc2l0ZXMsIGluY2x1ZGluZyBQb3J0YWwsIFNQSSwgYW5kIEVYUExBSU4sIGFyZSB1cGRhdGVk IHRvCnN1cHBvcnQgcGFzc2luZyBkb3duIHRoZSBwcmVwIGRhdGEuIFRoZXNlIGNoYW5nZXMgYXJl IG1vc3RseQptZWNoYW5pY2FsIGFuZCBjbGFyaWZ5IHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gc2V0 dXAgYW5kIGFjdHVhbApleGVjdXRpb24uCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRv LmMgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jICAgICAg fCAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgICB8ICAgNyArLQog c3JjL2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMgICAgIHwgICAxICsKIHNyYy9iYWNrZW5k L2NvbW1hbmRzL21hdHZpZXcuYyAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMv cG9ydGFsY21kcy5jICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYyAg ICAgICB8ICAxMSArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvUkVBRE1FICAgICAgICAgIHwgICA5 ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jICAgICAgfCAxOTIgKysrKysrKysr KysrKysrKysrKysrKystLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYyAg fCAgIDEgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jIHwgICAzICsKIHNy Yy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9l eGVjdXRvci9zcGkuYyAgICAgICAgICAgfCAgMTAgKysKIHNyYy9iYWNrZW5kL3Rjb3AvcG9zdGdy ZXMuYyAgICAgICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC90Y29wL3BxdWVyeS5jICAgICAgICAg ICAgfCAgMjcgKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9wb3J0YWxtZW0uYyAgIHwgICAy ICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaCAgICAgICB8ICAgMyArLQogc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaCAgICAgIHwgICAzICstCiBzcmMvaW5jbHVkZS9leGVj dXRvci9leGVjdXRvci5oICAgICAgfCAgMTAgKysKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rl cy5oICAgICAgICB8ICA1NSArKysrKysrKwogc3JjL2luY2x1ZGUvdXRpbHMvcG9ydGFsLmggICAg ICAgICAgIHwgICAyICsKIDIxIGZpbGVzIGNoYW5nZWQsIDMwOCBpbnNlcnRpb25zKCspLCAzOCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCmluZGV4IGNlZjQ1MjU4NGU1Li41ZWZiYjA5 NDljMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKQEAgLTg3MCw3ICs4NzAsNyBAQCBCZWdpbkNvcHlU byhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCSgoRFJfY29weSAqKSBkZXN0KS0+Y3N0YXRlID0gY3N0 YXRlOwogCiAJCS8qIENyZWF0ZSBhIFF1ZXJ5RGVzYyByZXF1ZXN0aW5nIG5vIG91dHB1dCAqLwot CQljc3RhdGUtPnF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBwc3RhdGUtPnBfc291 cmNldGV4dCwKKwkJY3N0YXRlLT5xdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgTlVM TCwgcHN0YXRlLT5wX3NvdXJjZXRleHQsCiAJCQkJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCks CiAJCQkJCQkJCQkJCUludmFsaWRTbmFwc2hvdCwKIAkJCQkJCQkJCQkJZGVzdCwgTlVMTCwgTlVM TCwgMCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYwppbmRleCAxY2NjMmU1NWM2NC4uOWVhYmU0OTIw Y2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYwpAQCAtMzM0LDcgKzMzNCw3IEBAIEV4ZWNDcmVh dGVUYWJsZUFzKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlVGFibGVBc1N0bXQgKnN0bXQsCiAJ CVVwZGF0ZUFjdGl2ZVNuYXBzaG90Q29tbWFuZElkKCk7CiAKIAkJLyogQ3JlYXRlIGEgUXVlcnlE ZXNjLCByZWRpcmVjdGluZyBvdXRwdXQgdG8gb3VyIHR1cGxlIHJlY2VpdmVyICovCi0JCXF1ZXJ5 RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBwc3RhdGUtPnBfc291cmNldGV4dCwKKwkJcXVl cnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4sIE5VTEwsIHBzdGF0ZS0+cF9zb3VyY2V0ZXh0 LAogCQkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJ CQkJZGVzdCwgcGFyYW1zLCBxdWVyeUVudiwgMCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwppbmRl eCA3ZTY5OWY4NTk1ZS4uZDZhYjM2OTdkZDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTM3 MCw3ICszNzAsNyBAQCBzdGFuZGFyZF9FeHBsYWluT25lUXVlcnkoUXVlcnkgKnF1ZXJ5LCBpbnQg Y3Vyc29yT3B0aW9ucywKIAl9CiAKIAkvKiBydW4gaXQgKGlmIG5lZWRlZCkgYW5kIHByb2R1Y2Ug b3V0cHV0ICovCi0JRXhwbGFpbk9uZVBsYW4ocGxhbiwgaW50bywgZXMsIHF1ZXJ5U3RyaW5nLCBw YXJhbXMsIHF1ZXJ5RW52LAorCUV4cGxhaW5PbmVQbGFuKHBsYW4sIE5VTEwsIGludG8sIGVzLCBx dWVyeVN0cmluZywgcGFyYW1zLCBxdWVyeUVudiwKIAkJCQkgICAmcGxhbmR1cmF0aW9uLCAoZXMt PmJ1ZmZlcnMgPyAmYnVmdXNhZ2UgOiBOVUxMKSwKIAkJCQkgICBlcy0+bWVtb3J5ID8gJm1lbV9j b3VudGVycyA6IE5VTEwpOwogfQpAQCAtNDkyLDcgKzQ5Miw4IEBAIEV4cGxhaW5PbmVVdGlsaXR5 KE5vZGUgKnV0aWxpdHlTdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAog ICogdG8gY2FsbCBpdC4KICAqLwogdm9pZAotRXhwbGFpbk9uZVBsYW4oUGxhbm5lZFN0bXQgKnBs YW5uZWRzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAorRXhwbGFpbk9u ZVBsYW4oUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBFeGVjUHJlcCAqcHJlcCwKKwkJCSAgIElu dG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJCQkgICBjb25zdCBjaGFyICpxdWVy eVN0cmluZywgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCiAJCQkgICBRdWVyeUVudmlyb25tZW50ICpx dWVyeUVudiwgY29uc3QgaW5zdHJfdGltZSAqcGxhbmR1cmF0aW9uLAogCQkJICAgY29uc3QgQnVm ZmVyVXNhZ2UgKmJ1ZnVzYWdlLApAQCAtNTQ4LDcgKzU0OSw3IEBAIEV4cGxhaW5PbmVQbGFuKFBs YW5uZWRTdG10ICpwbGFubmVkc3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRlICpl cywKIAkJZGVzdCA9IE5vbmVfUmVjZWl2ZXI7CiAKIAkvKiBDcmVhdGUgYSBRdWVyeURlc2MgZm9y IHRoZSBxdWVyeSAqLwotCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFubmVkc3RtdCwg cXVlcnlTdHJpbmcsCisJcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW5uZWRzdG10LCBw cmVwLCBxdWVyeVN0cmluZywKIAkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwgSW52YWxpZFNu YXBzaG90LAogCQkJCQkJCQlkZXN0LCBwYXJhbXMsIHF1ZXJ5RW52LCBpbnN0cnVtZW50X29wdGlv bik7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMKaW5kZXggOTNlZjFhZDEwNmYuLjNjY2E2ZDQ1 ZWMxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNpb24uYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNpb24uYwpAQCAtOTkzLDYgKzk5Myw3IEBAIGV4ZWN1 dGVfc3FsX3N0cmluZyhjb25zdCBjaGFyICpzcWwsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogCQkJ CVF1ZXJ5RGVzYyAgKnFkZXNjOwogCiAJCQkJcWRlc2MgPSBDcmVhdGVRdWVyeURlc2Moc3RtdCwK KwkJCQkJCQkJCQlOVUxMLAogCQkJCQkJCQkJCXNxbCwKIAkJCQkJCQkJCQlHZXRBY3RpdmVTbmFw c2hvdCgpLCBOVUxMLAogCQkJCQkJCQkJCWRlc3QsIE5VTEwsIE5VTEwsIDApOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv bWF0dmlldy5jCmluZGV4IGVmN2MwZDYyNGYxLi4zMGNiZjlmMjY0ZiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21h dHZpZXcuYwpAQCAtNDM3LDcgKzQzNyw3IEBAIHJlZnJlc2hfbWF0dmlld19kYXRhZmlsbChEZXN0 UmVjZWl2ZXIgKmRlc3QsIFF1ZXJ5ICpxdWVyeSwKIAlVcGRhdGVBY3RpdmVTbmFwc2hvdENvbW1h bmRJZCgpOwogCiAJLyogQ3JlYXRlIGEgUXVlcnlEZXNjLCByZWRpcmVjdGluZyBvdXRwdXQgdG8g b3VyIHR1cGxlIHJlY2VpdmVyICovCi0JcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4s IHF1ZXJ5U3RyaW5nLAorCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBOVUxMLCBx dWVyeVN0cmluZywKIAkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwgSW52YWxpZFNuYXBzaG90 LAogCQkJCQkJCQlkZXN0LCBOVUxMLCBOVUxMLCAwKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvcG9ydGFsY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcG9ydGFsY21k cy5jCmluZGV4IGVjOTZjMmVmY2QzLi5hYzFkZGQyNWFiYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvcG9ydGFsY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3BvcnRh bGNtZHMuYwpAQCAtMTE4LDYgKzExOCw3IEBAIFBlcmZvcm1DdXJzb3JPcGVuKFBhcnNlU3RhdGUg KnBzdGF0ZSwgRGVjbGFyZUN1cnNvclN0bXQgKmNzdG10LCBQYXJhbUxpc3RJbmZvIHBhCiAJCQkJ CSAgcXVlcnlTdHJpbmcsCiAJCQkJCSAgQ01EVEFHX1NFTEVDVCwJLyogY3Vyc29yJ3MgcXVlcnkg aXMgYWx3YXlzIGEgU0VMRUNUICovCiAJCQkJCSAgbGlzdF9tYWtlMShwbGFuKSwKKwkJCQkJICBs aXN0X21ha2UxKE5VTEwpLAogCQkJCQkgIE5VTEwpOwogCiAJLyotLS0tLS0tLS0tCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wcmVwYXJlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9wcmVwYXJlLmMKaW5kZXggMzRiNjQxMGQ2YTIuLmFmZDQ0OWM3M2JhIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jb21tYW5kcy9wcmVwYXJlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv cHJlcGFyZS5jCkBAIC0yMDUsNiArMjA1LDcgQEAgRXhlY3V0ZVF1ZXJ5KFBhcnNlU3RhdGUgKnBz dGF0ZSwKIAkJCQkJICBxdWVyeV9zdHJpbmcsCiAJCQkJCSAgZW50cnktPnBsYW5zb3VyY2UtPmNv bW1hbmRUYWcsCiAJCQkJCSAgcGxhbl9saXN0LAorCQkJCQkgIE5JTCwKIAkJCQkJICBjcGxhbik7 CiAKIAkvKgpAQCAtNTc1LDYgKzU3Niw3IEBAIEV4cGxhaW5FeGVjdXRlUXVlcnkoRXhlY3V0ZVN0 bXQgKmV4ZWNzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAogCWNvbnN0 IGNoYXIgKnF1ZXJ5X3N0cmluZzsKIAlDYWNoZWRQbGFuICpjcGxhbjsKIAlMaXN0CSAgICpwbGFu X2xpc3Q7CisJTGlzdAkgICAqcHJlcF9saXN0OwogCUxpc3RDZWxsICAgKnA7CiAJUGFyYW1MaXN0 SW5mbyBwYXJhbUxJID0gTlVMTDsKIAlFU3RhdGUJICAgKmVzdGF0ZSA9IE5VTEw7CkBAIC01ODUs NiArNTg3LDcgQEAgRXhwbGFpbkV4ZWN1dGVRdWVyeShFeGVjdXRlU3RtdCAqZXhlY3N0bXQsIElu dG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJTWVtb3J5Q29udGV4dENvdW50ZXJz IG1lbV9jb3VudGVyczsKIAlNZW1vcnlDb250ZXh0IHBsYW5uZXJfY3R4ID0gTlVMTDsKIAlNZW1v cnlDb250ZXh0IHNhdmVkX2N0eCA9IE5VTEw7CisJaW50CQkJaTsKIAogCWlmIChlcy0+bWVtb3J5 KQogCXsKQEAgLTY1MCwxNCArNjUzLDIwIEBAIEV4cGxhaW5FeGVjdXRlUXVlcnkoRXhlY3V0ZVN0 bXQgKmV4ZWNzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAogCX0KIAog CXBsYW5fbGlzdCA9IGNwbGFuLT5zdG10X2xpc3Q7CisJcHJlcF9saXN0ID0gTklMOwogCiAJLyog RXhwbGFpbiBlYWNoIHF1ZXJ5ICovCisJaSA9IDA7CiAJZm9yZWFjaChwLCBwbGFuX2xpc3QpCiAJ ewogCQlQbGFubmVkU3RtdCAqcHN0bXQgPSBsZmlyc3Rfbm9kZShQbGFubmVkU3RtdCwgcCk7CisJ CUV4ZWNQcmVwICpwcmVwID0gcHJlcF9saXN0ID8KKwkJCShFeGVjUHJlcCAqKSBsaXN0X250aChw cmVwX2xpc3QsIGkpIDogTlVMTDsKIAorCQlpKys7CiAJCWlmIChwc3RtdC0+Y29tbWFuZFR5cGUg IT0gQ01EX1VUSUxJVFkpCi0JCQlFeHBsYWluT25lUGxhbihwc3RtdCwgaW50bywgZXMsIHF1ZXJ5 X3N0cmluZywgcGFyYW1MSSwgcHN0YXRlLT5wX3F1ZXJ5RW52LAorCQkJRXhwbGFpbk9uZVBsYW4o cHN0bXQsIHByZXAsCisJCQkJCQkgICBpbnRvLCBlcywgcXVlcnlfc3RyaW5nLCBwYXJhbUxJLCBw c3RhdGUtPnBfcXVlcnlFbnYsCiAJCQkJCQkgICAmcGxhbmR1cmF0aW9uLCAoZXMtPmJ1ZmZlcnMg PyAmYnVmdXNhZ2UgOiBOVUxMKSwKIAkJCQkJCSAgIGVzLT5tZW1vcnkgPyAmbWVtX2NvdW50ZXJz IDogTlVMTCk7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL1JFQURN RSBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL1JFQURNRQppbmRleCA1NGY0NzgyZjMxYi4uNmU0ODEz OThmMTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL1JFQURNRQorKysgYi9zcmMv YmFja2VuZC9leGVjdXRvci9SRUFETUUKQEAgLTI5MSwxMCArMjkxLDE3IEBAIFF1ZXJ5IFByb2Nl c3NpbmcgQ29udHJvbCBGbG93CiAKIFRoaXMgaXMgYSBza2V0Y2ggb2YgY29udHJvbCBmbG93IGZv ciBmdWxsIHF1ZXJ5IHByb2Nlc3Npbmc6CiAKKwlbT3B0aW9uYWxdIEV4ZWN1dG9yUHJlcAorCQkt IE1heSBiZSBydW4gYmVmb3JlIEV4ZWN1dG9yU3RhcnQgKGUuZy4sIGZvciBwbGFuIHZhbGlkYXRp b24pLgorCQktIFBlcmZvcm1zIHJhbmdlIHRhYmxlIGluaXRpYWxpemF0aW9uLCBwZXJtaXNzaW9u IGNoZWNrcywgYW5kCisJCSAgaW5pdGlhbCBwYXJ0aXRpb24gcHJ1bmluZy4KKwkJLSBSZXR1cm5z IGFuIEV4ZWNQcmVwIHdyYXBwZXIgd2l0aCBFU3RhdGUgdGhhdCBFeGVjdXRvclN0YXJ0IG1heQor CQkgIHJldXNlLgorCiAJQ3JlYXRlUXVlcnlEZXNjCiAKIAlFeGVjdXRvclN0YXJ0Ci0JCUNyZWF0 ZUV4ZWN1dG9yU3RhdGUKKwkJQ3JlYXRlRXhlY3V0b3JTdGF0ZSAob3IgcmV1c2Ugb25lIGZyb20g RXhlY1ByZXAgaWYgcHJlc2VudCkKIAkJCWNyZWF0ZXMgcGVyLXF1ZXJ5IGNvbnRleHQKIAkJc3dp dGNoIHRvIHBlci1xdWVyeSBjb250ZXh0IHRvIHJ1biBFeGVjSW5pdE5vZGUKIAkJQWZ0ZXJUcmln Z2VyQmVnaW5RdWVyeQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4u YyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKaW5kZXggMjdjOWVlYzY5N2IuLjFi OTZiMjUxYzM0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCisr KyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKQEAgLTc1LDYgKzc1LDcgQEAgRXhl Y3V0b3JDaGVja1Blcm1zX2hvb2tfdHlwZSBFeGVjdXRvckNoZWNrUGVybXNfaG9vayA9IE5VTEw7 CiAKIC8qIGRlY2xzIGZvciBsb2NhbCByb3V0aW5lcyBvbmx5IHVzZWQgd2l0aGluIHRoaXMgbW9k dWxlICovCiBzdGF0aWMgdm9pZCBJbml0UGxhbihRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVm bGFncyk7CitzdGF0aWMgdm9pZCBQcmVwUGxhbihFU3RhdGUgKmVzdGF0ZSwgYm9vbCBkb19pbml0 aWFsX3BydW5pbmcpOwogc3RhdGljIHZvaWQgQ2hlY2tWYWxpZFJvd01hcmtSZWwoUmVsYXRpb24g cmVsLCBSb3dNYXJrVHlwZSBtYXJrVHlwZSk7CiBzdGF0aWMgdm9pZCBFeGVjUG9zdHByb2Nlc3NQ bGFuKEVTdGF0ZSAqZXN0YXRlKTsKIHN0YXRpYyB2b2lkIEV4ZWNFbmRQbGFuKFBsYW5TdGF0ZSAq cGxhbnN0YXRlLCBFU3RhdGUgKmVzdGF0ZSk7CkBAIC0xNzEsOCArMTcyLDI0IEBAIHN0YW5kYXJk X0V4ZWN1dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpCiAKIAkvKgog CSAqIEJ1aWxkIEVTdGF0ZSwgc3dpdGNoIGludG8gcGVyLXF1ZXJ5IG1lbW9yeSBjb250ZXh0IGZv ciBzdGFydHVwLgorCSAqCisJICogSWYgRXhlY3V0b3JQcmVwKCkgcmFuIGVhcmxpZXIgKGUuZy4s IHRvIGRvIGluaXRpYWwgcHJ1bmluZyBkdXJpbmcgcGxhbgorCSAqIHZhbGlkaXR5IGNoZWNraW5n KSwgcmV1c2UgaXRzIEVTdGF0ZSB0byBhdm9pZCByZWRvaW5nIHJhbmdlIHRhYmxlIHNldHVwCisJ ICogYW5kIHBydW5pbmcuIE90aGVyd2lzZSwgY3JlYXRlIGEgZnJlc2ggRVN0YXRlIGFzIHVzdWFs LgogCSAqLwotCWVzdGF0ZSA9IENyZWF0ZUV4ZWN1dG9yU3RhdGUoKTsKKwlpZiAocXVlcnlEZXNj LT5wcmVwKQorCXsKKwkJZXN0YXRlID0gcXVlcnlEZXNjLT5wcmVwLT5wcmVwX2VzdGF0ZTsKKwor CQkvKgorCQkgKiBFeGVjdXRvciBpcyBhZG9wdGluZyB0aGUgcHJlcCdzIEVTdGF0ZS4gTWFyayBp dCBzbyBFeGVjUHJlcENsZWFudXAoKQorCQkgKiBkb2Vzbid0IHRyeSB0byBmcmVlIGl0IHJlZHVu ZGFudGx5LgorCQkgKi8KKwkJcXVlcnlEZXNjLT5wcmVwLT5vd25zX2VzdGF0ZSA9IGZhbHNlOwor CX0KKwllbHNlCisJCWVzdGF0ZSA9IENyZWF0ZUV4ZWN1dG9yU3RhdGUoKTsKKwogCXF1ZXJ5RGVz Yy0+ZXN0YXRlID0gZXN0YXRlOwogCiAJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhlc3RhdGUtPmVzX3F1ZXJ5X2N4dCk7CkBAIC0yNjMsNiArMjgwLDE0MyBAQCBzdGFuZGFyZF9F eGVjdXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKIH0KIAorLyoKKyAqIEV4ZWN1dG9yUHJlcDogcHJl cGFyZSBleGVjdXRvciBzdGF0ZSBmb3IgYSBQbGFubmVkU3RtdCBvdXRzaWRlIEV4ZWN1dG9yU3Rh cnQuCisgKgorICogUGVyZm9ybXMgcmFuZ2UgdGFibGUgaW5pdGlhbGl6YXRpb24sIHBlcm1pc3Np b24gY2hlY2tzLCBhbmQgaW5pdGlhbAorICogcGFydGl0aW9uIHBydW5pbmcgaWYgcGFydFBydW5l SW5mb3MgYXJlIHByZXNlbnQgYW5kIGRvX2luaXRpYWxfcHJ1bmluZyBpcworICogdHJ1ZS4KKyAq CisgKiBUaGlzIGlzIGludGVuZGVkIGZvciBjYWxsZXJzIHRoYXQgbmVlZCBleGVjdXRvciBtZXRh ZGF0YSBhaGVhZCBvZiBhY3R1YWwKKyAqIGV4ZWN1dGlvbi4gVHlwaWNhbCB1c2UgY2FzZXMgaW5j bHVkZToKKyAqCS0gZGV0ZXJtaW5pbmcgd2hpY2ggcmVsYXRpb25zIG11c3QgYmUgbG9ja2VkIGR1 cmluZyBwbGFuIGNhY2hlIHZhbGlkYXRpb247CisgKgktIGluaXRpYWxpemluZyB1bnBydW5lZCBy ZWxpZHMgYW5kIHZhbGlkIHN1YnBsYW5zIGluIHBhcmFsbGVsIHdvcmtlcnMKKyAqCSAgdXNpbmcg c3RhdGUgY29waWVkIGZyb20gdGhlIGxlYWRlci4KKyAqCisgKiBUaGUgZXhlY3V0b3IgY2FuIHJl dXNlIHRoZSByZXN1bHRpbmcgc3RhdGUgdG8gYXZvaWQgcmVkdW5kYW50IHNldHVwIGR1cmluZwor ICogRXhlY3V0b3JTdGFydCgpOyBzZWUgSW5pdFBsYW4oKS4KKyAqCisgKiBSZXR1cm5zIGFuIEV4 ZWNQcmVwIHdyYXBwZXIgdGhhdCBvd25zIHRoZSBFU3RhdGUgYW5kIGNhbiBiZSByZXVzZWQKKyAq IG9yIGNsZWFuZWQgdXAgbGF0ZXIuIFJldHVybnMgTlVMTCBpZiBubyBwcmVwIGlzIG5lZWRlZCAo ZS5nLiBubyBwcnVuaW5nKS4KKyAqLworRXhlY1ByZXAgKgorRXhlY3V0b3JQcmVwKFBsYW5uZWRT dG10ICpwc3RtdCwgUGFyYW1MaXN0SW5mbyBwYXJhbXMsIFJlc291cmNlT3duZXIgb3duZXIsCisJ CQkgYm9vbCBkb19pbml0aWFsX3BydW5pbmcpCit7CisJUmVzb3VyY2VPd25lciBvbGRvd25lcjsK KwlFU3RhdGUgKmVzdGF0ZTsKKworCUFzc2VydChwc3RtdC0+Y29tbWFuZFR5cGUgIT0gQ01EX1VU SUxJVFkpOworCisJLyogTm8gcHJ1bmluZyBuZWVkZWQgLS0gbGV0IG5vcm1hbCBFeGVjdXRvclN0 YXJ0IGhhbmRsZSBzZXR1cCBsYXRlci4gKi8KKwlpZiAocHN0bXQtPnBhcnRQcnVuZUluZm9zID09 IE5JTCkKKwkJcmV0dXJuIE5VTEw7CisKKwllc3RhdGUgPSBDcmVhdGVFeGVjdXRvclN0YXRlKCk7 CisJZXN0YXRlLT5lc19wbGFubmVkc3RtdCA9IHBzdG10OworCWVzdGF0ZS0+ZXNfcGFydF9wcnVu ZV9pbmZvcyA9IHBzdG10LT5wYXJ0UHJ1bmVJbmZvczsKKwllc3RhdGUtPmVzX3BhcmFtX2xpc3Rf aW5mbyA9IHBhcmFtczsKKworCS8qCisJICogRW5zdXJlIGxvY2tzIHRha2VuIGR1cmluZyBpbml0 aWFsIHBydW5pbmcgYXJlIHRyYWNrZWQgdW5kZXIgdGhlIGdpdmVuCisJICogUmVzb3VyY2VPd25l ciAoZS5nLiwgb25lIGFzc29jaWF0ZWQgd2l0aCBDYWNoZWRQbGFuIHZhbGlkYXRpb24pLgorCSAq LworCW9sZG93bmVyID0gQ3VycmVudFJlc291cmNlT3duZXI7CisJQ3VycmVudFJlc291cmNlT3du ZXIgPSBvd25lcjsKKworCVByZXBQbGFuKGVzdGF0ZSwgZG9faW5pdGlhbF9wcnVuaW5nKTsKKwor CUN1cnJlbnRSZXNvdXJjZU93bmVyID0gb2xkb3duZXI7CisKKwlyZXR1cm4gQ3JlYXRlRXhlY1By ZXAoZXN0YXRlLCBDdXJyZW50TWVtb3J5Q29udGV4dCwgTlVMTCwgTlVMTCk7Cit9CisKKy8qCisg KiBQcmVwUGxhbjogaW5pdGlhbGl6ZSBleGVjdXRvciBtZXRhZGF0YSBuZWVkZWQgYmVmb3JlIHBs YW4gZXhlY3V0aW9uLgorICoKKyAqIFNldHMgdXAgcGVybWlzc2lvbnMsIHJhbmdlIHRhYmxlLCBh bmQgcGFydGl0aW9uIHBydW5pbmcgaW5mcmFzdHJ1Y3R1cmUuCisgKiBJZiBkb19pbml0aWFsX3By dW5pbmcgaXMgdHJ1ZSwgcGVyZm9ybXMgaW5pdGlhbCBwcnVuaW5nIGFuZCBzdG9yZXMgdGhlCisg KiByZXN1bHRpbmcgc3VicGxhbiBpbmRleGVzIGluIGVzX3BhcnRfcHJ1bmVfcmVzdWx0cy4gT3Ro ZXJ3aXNlLCB0aGlzIHN0ZXAKKyAqIGlzIHNraXBwZWQsIHR5cGljYWxseSB3aGVuIHJlc3VsdHMg YXJlIHByb3ZpZGVkIGV4dGVybmFsbHkgKGUuZy4sIGluCisgKiBwYXJhbGxlbCB3b3JrZXJzKS4K KyAqCisgKiBDYWxsZWQgZnJvbSBib3RoIEV4ZWN1dG9yUHJlcCgpIGFuZCBJbml0UGxhbigpLgor ICovCitzdGF0aWMgdm9pZAorUHJlcFBsYW4oRVN0YXRlICplc3RhdGUsIGJvb2wgZG9faW5pdGlh bF9wcnVuaW5nKQoreworCVBsYW5uZWRTdG10ICpwc3RtdCA9IGVzdGF0ZS0+ZXNfcGxhbm5lZHN0 bXQ7CisKKwkvKgorCSAqIERvIHBlcm1pc3Npb25zIGNoZWNrcy4KKwkgKi8KKwlFeGVjQ2hlY2tQ ZXJtaXNzaW9ucyhwc3RtdC0+cnRhYmxlLCBwc3RtdC0+cGVybUluZm9zLCB0cnVlKTsKKworCS8q CisJICogSW5pdGlhbGl6ZSByYW5nZSB0YWJsZS4KKwkgKi8KKwlFeGVjSW5pdFJhbmdlVGFibGUo ZXN0YXRlLCBwc3RtdC0+cnRhYmxlLCBwc3RtdC0+cGVybUluZm9zLAorCQkJCQkgICBibXNfY29w eShwc3RtdC0+dW5wcnVuYWJsZVJlbGlkcykpOworCisJLyoKKwkgKiBTZXQgdXAgUGFydGl0aW9u UHJ1bmVTdGF0ZSBzdHJ1Y3R1cmVzIG5lZWRlZCBmb3IgYm90aCBpbml0aWFsIGFuZAorCSAqIHJ1 bnRpbWUgcGFydGl0aW9uIHBydW5pbmcuIFRoZXNlIHN0cnVjdHVyZXMgYXJlIGJ1aWx0IGZyb20g dGhlCisJICogUGFydGl0aW9uUHJ1bmVJbmZvIGVudHJpZXMgaW4gdGhlIHBsYW4gdHJlZS4KKwkg KgorCSAqIElmIGRvX2luaXRpYWxfcHJ1bmluZyBpcyB0cnVlLCBhbHNvIHBlcmZvcm0gaW5pdGlh bCBwcnVuaW5nIHRvIGNvbXB1dGUKKwkgKiB0aGUgc3Vic2V0IG9mIGNoaWxkIHN1YnBsYW5zIHRo YXQgd2lsbCBiZSBleGVjdXRlZC4gVGhlIHJlc3VsdHMsCisJICogd2hpY2ggYXJlIGJpdG1hcHNl dHMgb2Ygc2VsZWN0ZWQgY2hpbGQgaW5kZXhlcywgYXJlIHNhdmVkIGluCisJICogZXNfcGFydF9w cnVuZV9yZXN1bHRzLiBUaGlzIGxpc3QgaXMgcGFyYWxsZWwgdG8gZXNfcGFydF9wcnVuZV9pbmZv cy4KKwkgKgorCSAqIEluIHBhcmFsbGVsIHdvcmtlcnMsIGRvX2luaXRpYWxfcHJ1bmluZyBzaG91 bGQgYmUgZmFsc2Ug4oCUIHRoZXkgcmVjZWl2ZQorCSAqIGVzX3BhcnRfcHJ1bmVfcmVzdWx0cyBm cm9tIHRoZSBsZWFkZXIgcHJvY2VzcyBhbmQgc2hvdWxkIG9ubHkgaW5pdGlhbGl6ZQorCSAqIHRo ZSBQYXJ0aXRpb25QcnVuZVN0YXRlcy4KKwkgKi8KKwlFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVT dGF0ZXMoZXN0YXRlKTsKKwlpZiAoZG9faW5pdGlhbF9wcnVuaW5nKQorCQlFeGVjRG9Jbml0aWFs UHJ1bmluZyhlc3RhdGUpOworfQorCisvKgorICogQ3JlYXRlRXhlY1ByZXA6IGluaXRpYWxpemUg RXhlY1ByZXAgd3JhcHBlciB3aXRoIG9wdGlvbmFsIGNsZWFudXAgbWV0YWRhdGEuCisgKi8KK0V4 ZWNQcmVwICoKK0NyZWF0ZUV4ZWNQcmVwKEVTdGF0ZSAqZXN0YXRlLCBNZW1vcnlDb250ZXh0IGNv bnRleHQsCisJCQkgICBleGVjcHJlcF9jbGVhbnVwX2ZuIGNsZWFudXAsIHZvaWQgKmNsZWFudXBf YXJnKQoreworCUV4ZWNQcmVwICpwcmVwID0gcGFsbG9jMChzaXplb2YoRXhlY1ByZXApKTsKKwor CXByZXAtPnByZXBfZXN0YXRlID0gZXN0YXRlOworCXByZXAtPmNvbnRleHQgPSBjb250ZXh0Owor CXByZXAtPmNsZWFudXAgPSBjbGVhbnVwOworCXByZXAtPmNsZWFudXBfYXJnID0gY2xlYW51cF9h cmc7CisJcHJlcC0+b3duc19lc3RhdGUgPSB0cnVlOworCisJcmV0dXJuIHByZXA7Cit9CisKKy8q CisgKiBFeGVjUHJlcENsZWFudXA6IGZyZWUgRXhlY1ByZXAgcmVzb3VyY2VzIG5vdCBhZG9wdGVk IGJ5IHRoZSBleGVjdXRvci4KKyAqCisgKiBPbmx5IGZyZWVzIHRoZSBFU3RhdGUgaWYgaXQgd2Fz bid0IHRha2VuIG92ZXIgYnkgRXhlY3V0b3JTdGFydCgpLgorICogQWx3YXlzIHJ1bnMgdGhlIG9w dGlvbmFsIHVzZXItZGVmaW5lZCBjbGVhbnVwIGNhbGxiYWNrLgorICovCit2b2lkCitFeGVjUHJl cENsZWFudXAoRXhlY1ByZXAgKnByZXApCit7CisJaWYgKHByZXAgPT0gTlVMTCkKKwkJcmV0dXJu OworCisJaWYgKHByZXAtPnByZXBfZXN0YXRlICYmIHByZXAtPm93bnNfZXN0YXRlKQorCXsKKwkJ RXhlY0Nsb3NlUmFuZ2VUYWJsZVJlbGF0aW9ucyhwcmVwLT5wcmVwX2VzdGF0ZSk7CisJCUZyZWVF eGVjdXRvclN0YXRlKHByZXAtPnByZXBfZXN0YXRlKTsKKwl9CisKKwlpZiAocHJlcC0+Y2xlYW51 cCkKKwkJcHJlcC0+Y2xlYW51cChwcmVwLT5jbGVhbnVwX2FyZyk7Cit9CisKIC8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K ICAqCQlFeGVjdXRvclJ1bgogICoKQEAgLTgyNCw3ICs5NzgsNiBAQCBFeGVjQ2hlY2tYYWN0UmVh ZE9ubHkoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10KQogCQlQcmV2ZW50Q29tbWFuZElmUGFyYWxs ZWxNb2RlKENyZWF0ZUNvbW1hbmROYW1lKChOb2RlICopIHBsYW5uZWRzdG10KSk7CiB9CiAKLQog LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogICoJCUluaXRQbGFuCiAgKgpAQCAtODM4LDcgKzk5MSw2IEBAIEluaXRQbGFu KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogCUNtZFR5cGUJCW9wZXJhdGlvbiA9 IHF1ZXJ5RGVzYy0+b3BlcmF0aW9uOwogCVBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCA9IHF1ZXJ5 RGVzYy0+cGxhbm5lZHN0bXQ7CiAJUGxhbgkgICAqcGxhbiA9IHBsYW5uZWRzdG10LT5wbGFuVHJl ZTsKLQlMaXN0CSAgICpyYW5nZVRhYmxlID0gcGxhbm5lZHN0bXQtPnJ0YWJsZTsKIAlFU3RhdGUJ ICAgKmVzdGF0ZSA9IHF1ZXJ5RGVzYy0+ZXN0YXRlOwogCVBsYW5TdGF0ZSAgKnBsYW5zdGF0ZTsK IAlUdXBsZURlc2MJdHVwVHlwZTsKQEAgLTg0NiwyOSArOTk4LDE5IEBAIEluaXRQbGFuKFF1ZXJ5 RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogCWludAkJCWk7CiAKIAkvKgotCSAqIERvIHBl cm1pc3Npb25zIGNoZWNrcworCSAqIElmIEV4ZWN1dG9yUHJlcCgpIHdhcyBub3QgcnVuIGVhcmxp ZXIgKGUuZy4sIGR1cmluZyBwbGFuIHZhbGlkYXRpb24pLAorCSAqIHBlcmZvcm0gSW5pdFBsYW4g c2V0dXA6IGluaXQgcmFuZ2UgdGFibGUsIGNoZWNrIHBlcm1pc3Npb25zLCBhbmQgcnVuCisJICog aW5pdGlhbCBwcnVuaW5nLiBPdGhlcndpc2UsIHRoZSBleGVjdXRvciB3aWxsIHJldXNlIHRoZSBz YW1lIGluZm9ybWF0aW9uCisJICogaW4gcXVlcnlEZXNjLT5wcmVwLT5wcmVwX2VzdGF0ZS4KIAkg Ki8KLQlFeGVjQ2hlY2tQZXJtaXNzaW9ucyhyYW5nZVRhYmxlLCBwbGFubmVkc3RtdC0+cGVybUlu Zm9zLCB0cnVlKTsKLQotCS8qCi0JICogaW5pdGlhbGl6ZSB0aGUgbm9kZSdzIGV4ZWN1dGlvbiBz dGF0ZQotCSAqLwotCUV4ZWNJbml0UmFuZ2VUYWJsZShlc3RhdGUsIHJhbmdlVGFibGUsIHBsYW5u ZWRzdG10LT5wZXJtSW5mb3MsCi0JCQkJCSAgIGJtc19jb3B5KHBsYW5uZWRzdG10LT51bnBydW5h YmxlUmVsaWRzKSk7Ci0KLQllc3RhdGUtPmVzX3BsYW5uZWRzdG10ID0gcGxhbm5lZHN0bXQ7Ci0J ZXN0YXRlLT5lc19wYXJ0X3BydW5lX2luZm9zID0gcGxhbm5lZHN0bXQtPnBhcnRQcnVuZUluZm9z OwotCi0JLyoKLQkgKiBQZXJmb3JtIHJ1bnRpbWUgImluaXRpYWwiIHBydW5pbmcgdG8gaWRlbnRp Znkgd2hpY2ggY2hpbGQgc3VicGxhbnMsCi0JICogY29ycmVzcG9uZGluZyB0byB0aGUgY2hpbGRy ZW4gb2YgcGxhbiBub2RlcyB0aGF0IGNvbnRhaW4KLQkgKiBQYXJ0aXRpb25QcnVuZUluZm8gc3Vj aCBhcyBBcHBlbmQsIHdpbGwgbm90IGJlIGV4ZWN1dGVkLiBUaGUgcmVzdWx0cywKLQkgKiB3aGlj aCBhcmUgYml0bWFwc2V0cyBvZiBpbmRleGVzIG9mIHRoZSBjaGlsZCBzdWJwbGFucyB0aGF0IHdp bGwgYmUKLQkgKiBleGVjdXRlZCwgYXJlIHNhdmVkIGluIGVzX3BhcnRfcHJ1bmVfcmVzdWx0cy4g IFRoZXNlIHJlc3VsdHMgY29ycmVzcG9uZAotCSAqIHRvIGVhY2ggUGFydGl0aW9uUHJ1bmVJbmZv IGVudHJ5LCBhbmQgdGhlIGVzX3BhcnRfcHJ1bmVfcmVzdWx0cyBsaXN0IGlzCi0JICogcGFyYWxs ZWwgdG8gZXNfcGFydF9wcnVuZV9pbmZvcy4KLQkgKi8KLQlFeGVjRG9Jbml0aWFsUHJ1bmluZyhl c3RhdGUpOworCWlmIChxdWVyeURlc2MtPnByZXAgPT0gTlVMTCkKKwl7CisJCWVzdGF0ZS0+ZXNf cGxhbm5lZHN0bXQgPSBwbGFubmVkc3RtdDsKKwkJZXN0YXRlLT5lc19wYXJ0X3BydW5lX2luZm9z ID0gcGxhbm5lZHN0bXQtPnBhcnRQcnVuZUluZm9zOworCQlQcmVwUGxhbihlc3RhdGUsIHRydWUp OworCX0KKwllbHNlCisJCUFzc2VydChlc3RhdGUgPT0gcXVlcnlEZXNjLT5wcmVwLT5wcmVwX2Vz dGF0ZSk7CiAKIAkvKgogCSAqIE5leHQsIGJ1aWxkIHRoZSBFeGVjUm93TWFyayBhcnJheSBmcm9t IHRoZSBQbGFuUm93TWFyayhzKSwgaWYgYW55LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY1BhcmFsbGVsLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwu YwppbmRleCBmMDk4YTU1NTdjZi4uYWVkYmQ5NTY2ZDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQ YXJhbGxlbC5jCkBAIC0xMjgxLDYgKzEyODEsNyBAQCBFeGVjUGFyYWxsZWxHZXRRdWVyeURlc2Mo c2htX3RvYyAqdG9jLCBEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyLAogCiAJLyogQ3JlYXRlIGEgUXVl cnlEZXNjIGZvciB0aGUgcXVlcnkuICovCiAJcmV0dXJuIENyZWF0ZVF1ZXJ5RGVzYyhwc3RtdCwK KwkJCQkJCSAgIE5VTEwsCiAJCQkJCQkgICBxdWVyeVN0cmluZywKIAkJCQkJCSAgIEdldEFjdGl2 ZVNuYXBzaG90KCksIEludmFsaWRTbmFwc2hvdCwKIAkJCQkJCSAgIHJlY2VpdmVyLCBwYXJhbUxJ LCBOVUxMLCBpbnN0cnVtZW50X29wdGlvbnMpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY1BhcnRpdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlv bi5jCmluZGV4IDg4YjE1MGM4ZDc3Li4xODdhNDgwZTUwOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNQYXJ0aXRpb24uYwpAQCAtMjM2OCw2ICsyMzY4LDkgQEAgSW5pdEV4ZWNQYXJ0aXRpb25QcnVu ZUNvbnRleHRzKFBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGUsCiAJQXNzZXJ0KHBhcmVu dF9wbGFuICE9IE5VTEwpOwogCWVzdGF0ZSA9IHBhcmVudF9wbGFuLT5zdGF0ZTsKIAorCS8qIFdv dWxkbid0IGJlIGF2YWlsYWJsZSBhdCBFeGVjdXRvclByZXAoKSB0aW1lLiAqLworCXBydW5lc3Rh dGUtPmVjb250ZXh0LT5lY3h0X3BhcmFtX2V4ZWNfdmFscyA9IGVzdGF0ZS0+ZXNfcGFyYW1fZXhl Y192YWxzOworCiAJLyoKIAkgKiBObyBuZWVkIHRvIGZpeCBzdWJwbGFucyBtYXBzIGlmIGluaXRp YWwgcHJ1bmluZyBkaWRuJ3QgZWxpbWluYXRlIGFueQogCSAqIHN1YnBsYW5zLgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9mdW5jdGlvbnMuYwppbmRleCA2MzBkNzA4ZDJhMy4uNjMzMzEwYzVmNWIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2Z1bmN0aW9ucy5jCkBAIC0xMzYyLDYgKzEzNjIsNyBAQCBwb3N0cXVlbF9zdGFydChleGVj dXRpb25fc3RhdGUgKmVzLCBTUUxGdW5jdGlvbkNhY2hlUHRyIGZjYWNoZSkKIAkJZGVzdCA9IE5v bmVfUmVjZWl2ZXI7CiAKIAllcy0+cWQgPSBDcmVhdGVRdWVyeURlc2MoZXMtPnN0bXQsCisJCQkJ CQkJIE5VTEwsCiAJCQkJCQkJIGZjYWNoZS0+ZnVuYy0+c3JjLAogCQkJCQkJCSBHZXRBY3RpdmVT bmFwc2hvdCgpLAogCQkJCQkJCSBJbnZhbGlkU25hcHNob3QsCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9leGVjdXRvci9zcGkuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jCmluZGV4IDY1 MzUwMGIzOGRjLi43YTNjYjk0NGQ2ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv c3BpLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivc3BpLmMKQEAgLTE2ODUsNiArMTY4NSw3 IEBAIFNQSV9jdXJzb3Jfb3Blbl9pbnRlcm5hbChjb25zdCBjaGFyICpuYW1lLCBTUElQbGFuUHRy IHBsYW4sCiAJCQkJCSAgcXVlcnlfc3RyaW5nLAogCQkJCQkgIHBsYW5zb3VyY2UtPmNvbW1hbmRU YWcsCiAJCQkJCSAgc3RtdF9saXN0LAorCQkJCQkgIE5JTCwKIAkJCQkJICBjcGxhbik7CiAKIAkv KgpAQCAtMjUwMCw2ICsyNTAxLDggQEAgX1NQSV9leGVjdXRlX3BsYW4oU1BJUGxhblB0ciBwbGFu LCBjb25zdCBTUElFeGVjdXRlT3B0aW9ucyAqb3B0aW9ucywKIAkJQ2FjaGVkUGxhblNvdXJjZSAq cGxhbnNvdXJjZSA9IChDYWNoZWRQbGFuU291cmNlICopIGxmaXJzdChsYzEpOwogCQlMaXN0CSAg ICpzdG10X2xpc3Q7CiAJCUxpc3RDZWxsICAgKmxjMjsKKwkJTGlzdAkgICAqcHJlcF9saXN0Owor CQlpbnQJCQlpOwogCiAJCXNwaWNhbGxiYWNrYXJnLnF1ZXJ5ID0gcGxhbnNvdXJjZS0+cXVlcnlf c3RyaW5nOwogCkBAIC0yNTc4LDYgKzI1ODEsNyBAQCBfU1BJX2V4ZWN1dGVfcGxhbihTUElQbGFu UHRyIHBsYW4sIGNvbnN0IFNQSUV4ZWN1dGVPcHRpb25zICpvcHRpb25zLAogCQkJCQkJCSAgcGxh bl9vd25lciwgX1NQSV9jdXJyZW50LT5xdWVyeUVudik7CiAKIAkJc3RtdF9saXN0ID0gY3BsYW4t PnN0bXRfbGlzdDsKKwkJcHJlcF9saXN0ID0gTklMOwogCiAJCS8qCiAJCSAqIElmIHdlIHdlcmVu J3QgZ2l2ZW4gYSBzcGVjaWZpYyBzbmFwc2hvdCB0byB1c2UsIGFuZCB0aGUgc3RhdGVtZW50CkBA IC0yNjE1LDEyICsyNjE5LDE3IEBAIF9TUElfZXhlY3V0ZV9wbGFuKFNQSVBsYW5QdHIgcGxhbiwg Y29uc3QgU1BJRXhlY3V0ZU9wdGlvbnMgKm9wdGlvbnMsCiAJCQl9CiAJCX0KIAorCQlpID0gMDsK IAkJZm9yZWFjaChsYzIsIHN0bXRfbGlzdCkKIAkJewogCQkJUGxhbm5lZFN0bXQgKnN0bXQgPSBs Zmlyc3Rfbm9kZShQbGFubmVkU3RtdCwgbGMyKTsKKwkJCUV4ZWNQcmVwICpwcmVwID0gcHJlcF9s aXN0ID8KKwkJCQlsaXN0X250aChwcmVwX2xpc3QsIGkpIDogTlVMTDsKIAkJCWJvb2wJCWNhblNl dFRhZyA9IHN0bXQtPmNhblNldFRhZzsKIAkJCURlc3RSZWNlaXZlciAqZGVzdDsKIAorCQkJaSsr OworCiAJCQkvKgogCQkJICogUmVzZXQgb3V0cHV0IHN0YXRlLiAgKE5vdGUgdGhhdCBpZiBhIG5v bi1TUEkgcmVjZWl2ZXIgaXMgdXNlZCwKIAkJCSAqIF9TUElfY3VycmVudC0+cHJvY2Vzc2VkIHdp bGwgc3RheSB6ZXJvLCBhbmQgdGhhdCdzIHdoYXQgd2UnbGwKQEAgLTI2OTAsNiArMjY5OSw3IEBA IF9TUElfZXhlY3V0ZV9wbGFuKFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlv bnMgKm9wdGlvbnMsCiAJCQkJCXNuYXAgPSBJbnZhbGlkU25hcHNob3Q7CiAKIAkJCQlxZGVzYyA9 IENyZWF0ZVF1ZXJ5RGVzYyhzdG10LAorCQkJCQkJCQkJCXByZXAsCiAJCQkJCQkJCQkJcGxhbnNv dXJjZS0+cXVlcnlfc3RyaW5nLAogCQkJCQkJCQkJCXNuYXAsIGNyb3NzY2hlY2tfc25hcHNob3Qs CiAJCQkJCQkJCQkJZGVzdCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMu YyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwppbmRleCAyYmQ4OTEwMjY4Ni4uZDM5NjRh MTJhMTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYworKysgYi9zcmMv YmFja2VuZC90Y29wL3Bvc3RncmVzLmMKQEAgLTEyMzIsNiArMTIzMiw3IEBAIGV4ZWNfc2ltcGxl X3F1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZykKIAkJCQkJCSAgcXVlcnlfc3RyaW5nLAog CQkJCQkJICBjb21tYW5kVGFnLAogCQkJCQkJICBwbGFudHJlZV9saXN0LAorCQkJCQkJICBOSUws CiAJCQkJCQkgIE5VTEwpOwogCiAJCS8qCkBAIC0yMDMzLDYgKzIwMzQsNyBAQCBleGVjX2JpbmRf bWVzc2FnZShTdHJpbmdJbmZvIGlucHV0X21lc3NhZ2UpCiAJCQkJCSAgcXVlcnlfc3RyaW5nLAog CQkJCQkgIHBzcmMtPmNvbW1hbmRUYWcsCiAJCQkJCSAgY3BsYW4tPnN0bXRfbGlzdCwKKwkJCQkJ ICBOSUwsCiAJCQkJCSAgY3BsYW4pOwogCiAJLyogUG9ydGFsIGlzIGRlZmluZWQsIHNldCB0aGUg cGxhbiBJRCBiYXNlZCBvbiBpdHMgY29udGVudHMuICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC90Y29wL3BxdWVyeS5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYwppbmRleCBmZGU3OGM1 NTE2MC4uODJjMjk1NTAyYjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMK KysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYwpAQCAtMzcsNiArMzcsNyBAQCBQb3J0YWwJ CUFjdGl2ZVBvcnRhbCA9IE5VTEw7CiAKIAogc3RhdGljIHZvaWQgUHJvY2Vzc1F1ZXJ5KFBsYW5u ZWRTdG10ICpwbGFuLAorCQkJCQkJIEV4ZWNQcmVwICpwcmVwLAogCQkJCQkJIGNvbnN0IGNoYXIg KnNvdXJjZVRleHQsCiAJCQkJCQkgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCiAJCQkJCQkgUXVlcnlF bnZpcm9ubWVudCAqcXVlcnlFbnYsCkBAIC02Niw2ICs2Nyw3IEBAIHN0YXRpYyB2b2lkIERvUG9y dGFsUmV3aW5kKFBvcnRhbCBwb3J0YWwpOwogICovCiBRdWVyeURlc2MgKgogQ3JlYXRlUXVlcnlE ZXNjKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwKKwkJCQlFeGVjUHJlcCAqcHJlcCwKIAkJCQlj b25zdCBjaGFyICpzb3VyY2VUZXh0LAogCQkJCVNuYXBzaG90IHNuYXBzaG90LAogCQkJCVNuYXBz aG90IGNyb3NzY2hlY2tfc25hcHNob3QsCkBAIC03OCw2ICs4MCw3IEBAIENyZWF0ZVF1ZXJ5RGVz YyhQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsCiAKIAlxZC0+b3BlcmF0aW9uID0gcGxhbm5lZHN0 bXQtPmNvbW1hbmRUeXBlOwkvKiBvcGVyYXRpb24gKi8KIAlxZC0+cGxhbm5lZHN0bXQgPSBwbGFu bmVkc3RtdDsJLyogcGxhbiAqLworCXFkLT5wcmVwID0gcHJlcDsJCS8qIGV4ZWN1dG9yIHByZXAg b3V0cHV0ICovCiAJcWQtPnNvdXJjZVRleHQgPSBzb3VyY2VUZXh0OwkvKiBxdWVyeSB0ZXh0ICov CiAJcWQtPnNuYXBzaG90ID0gUmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CS8qIHNuYXBzaG90 ICovCiAJLyogUkkgY2hlY2sgc25hcHNob3QgKi8KQEAgLTExMiw2ICsxMTUsMTMgQEAgRnJlZVF1 ZXJ5RGVzYyhRdWVyeURlc2MgKnFkZXNjKQogCVVucmVnaXN0ZXJTbmFwc2hvdChxZGVzYy0+c25h cHNob3QpOwogCVVucmVnaXN0ZXJTbmFwc2hvdChxZGVzYy0+Y3Jvc3NjaGVja19zbmFwc2hvdCk7 CiAKKwkvKiBFeGVjUHJlcCBjbGVhbnVwIGlmIG5lY2Vzc2FyeSAqLworCWlmIChxZGVzYy0+cHJl cCkKKwl7CisJCUV4ZWNQcmVwQ2xlYW51cChxZGVzYy0+cHJlcCk7CisJCXFkZXNjLT5wcmVwID0g TlVMTDsKKwl9CisKIAkvKiBPbmx5IHRoZSBRdWVyeURlc2MgaXRzZWxmIG5lZWQgYmUgZnJlZWQg Ki8KIAlwZnJlZShxZGVzYyk7CiB9CkBAIC0xMjMsNiArMTMzLDcgQEAgRnJlZVF1ZXJ5RGVzYyhR dWVyeURlc2MgKnFkZXNjKQogICoJCVBPUlRBTF9PTkVfUkVUVVJOSU5HLCBvciBQT1JUQUxfT05F X01PRF9XSVRIIHBvcnRhbAogICoKICAqCXBsYW46IHRoZSBwbGFuIHRyZWUgZm9yIHRoZSBxdWVy eQorICoJcHJlcDogRXhlY1ByZXAgZm9yIHRoZSBwbGFuIChvdXRwdXQgb2YgRXhlY3V0b3JQcmVw KCkpCiAgKglzb3VyY2VUZXh0OiB0aGUgc291cmNlIHRleHQgb2YgdGhlIHF1ZXJ5CiAgKglwYXJh bXM6IGFueSBwYXJhbWV0ZXJzIG5lZWRlZAogICoJZGVzdDogd2hlcmUgdG8gc2VuZCByZXN1bHRz CkBAIC0xMzUsNiArMTQ2LDcgQEAgRnJlZVF1ZXJ5RGVzYyhRdWVyeURlc2MgKnFkZXNjKQogICov CiBzdGF0aWMgdm9pZAogUHJvY2Vzc1F1ZXJ5KFBsYW5uZWRTdG10ICpwbGFuLAorCQkJIEV4ZWNQ cmVwICpwcmVwLAogCQkJIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQsCiAJCQkgUGFyYW1MaXN0SW5m byBwYXJhbXMsCiAJCQkgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsCkBAIC0xNDYsNyArMTU4 LDcgQEAgUHJvY2Vzc1F1ZXJ5KFBsYW5uZWRTdG10ICpwbGFuLAogCS8qCiAJICogQ3JlYXRlIHRo ZSBRdWVyeURlc2Mgb2JqZWN0CiAJICovCi0JcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBs YW4sIHNvdXJjZVRleHQsCisJcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4sIHByZXAs IHNvdXJjZVRleHQsCiAJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRTbmFwc2hv dCwKIAkJCQkJCQkJZGVzdCwgcGFyYW1zLCBxdWVyeUVudiwgMCk7CiAKQEAgLTQ4OSw2ICs1MDEs OSBAQCBQb3J0YWxTdGFydChQb3J0YWwgcG9ydGFsLCBQYXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJ CQkgKiB0aGUgZGVzdGluYXRpb24gdG8gRGVzdE5vbmUuCiAJCQkJICovCiAJCQkJcXVlcnlEZXNj ID0gQ3JlYXRlUXVlcnlEZXNjKGxpbml0aWFsX25vZGUoUGxhbm5lZFN0bXQsIHBvcnRhbC0+c3Rt dHMpLAorCQkJCQkJCQkJCQlwb3J0YWwtPnByZXBzID8KKwkJCQkJCQkJCQkJKEV4ZWNQcmVwICop IGxpbml0aWFsKHBvcnRhbC0+cHJlcHMpIDoKKwkJCQkJCQkJCQkJTlVMTCwKIAkJCQkJCQkJCQkJ cG9ydGFsLT5zb3VyY2VUZXh0LAogCQkJCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hvdCgpLAogCQkJ CQkJCQkJCQlJbnZhbGlkU25hcHNob3QsCkBAIC0xMTg1LDYgKzEyMDAsNyBAQCBQb3J0YWxSdW5N dWx0aShQb3J0YWwgcG9ydGFsLAogewogCWJvb2wJCWFjdGl2ZV9zbmFwc2hvdF9zZXQgPSBmYWxz ZTsKIAlMaXN0Q2VsbCAgICpzdG10bGlzdF9pdGVtOworCWludAkJCWk7CiAKIAkvKgogCSAqIElm IHRoZSBkZXN0aW5hdGlvbiBpcyBEZXN0UmVtb3RlRXhlY3V0ZSwgY2hhbmdlIHRvIERlc3ROb25l LiAgVGhlCkBAIC0xMjA1LDkgKzEyMjEsMTQgQEAgUG9ydGFsUnVuTXVsdGkoUG9ydGFsIHBvcnRh bCwKIAkgKiBMb29wIHRvIGhhbmRsZSB0aGUgaW5kaXZpZHVhbCBxdWVyaWVzIGdlbmVyYXRlZCBm cm9tIGEgc2luZ2xlIHBhcnNldHJlZQogCSAqIGJ5IGFuYWx5c2lzIGFuZCByZXdyaXRlLgogCSAq LworCWkgPSAwOwogCWZvcmVhY2goc3RtdGxpc3RfaXRlbSwgcG9ydGFsLT5zdG10cykKIAl7CiAJ CVBsYW5uZWRTdG10ICpwc3RtdCA9IGxmaXJzdF9ub2RlKFBsYW5uZWRTdG10LCBzdG10bGlzdF9p dGVtKTsKKwkJRXhlY1ByZXAgKnByZXAgPSBwb3J0YWwtPnByZXBzID8KKwkJCWxpc3RfbnRoKHBv cnRhbC0+cHJlcHMsIGkpIDogTlVMTDsKKworCQlpKys7CiAKIAkJLyoKIAkJICogSWYgd2UgZ290 IGEgY2FuY2VsIHNpZ25hbCBpbiBwcmlvciBjb21tYW5kLCBxdWl0CkBAIC0xMjY1LDcgKzEyODYs NyBAQCBQb3J0YWxSdW5NdWx0aShQb3J0YWwgcG9ydGFsLAogCQkJaWYgKHBzdG10LT5jYW5TZXRU YWcpCiAJCQl7CiAJCQkJLyogc3RhdGVtZW50IGNhbiBzZXQgdGFnIHN0cmluZyAqLwotCQkJCVBy b2Nlc3NRdWVyeShwc3RtdCwKKwkJCQlQcm9jZXNzUXVlcnkocHN0bXQsIHByZXAsCiAJCQkJCQkJ IHBvcnRhbC0+c291cmNlVGV4dCwKIAkJCQkJCQkgcG9ydGFsLT5wb3J0YWxQYXJhbXMsCiAJCQkJ CQkJIHBvcnRhbC0+cXVlcnlFbnYsCkBAIC0xMjc0LDcgKzEyOTUsNyBAQCBQb3J0YWxSdW5NdWx0 aShQb3J0YWwgcG9ydGFsLAogCQkJZWxzZQogCQkJewogCQkJCS8qIHN0bXQgYWRkZWQgYnkgcmV3 cml0ZSBjYW5ub3Qgc2V0IHRhZyAqLwotCQkJCVByb2Nlc3NRdWVyeShwc3RtdCwKKwkJCQlQcm9j ZXNzUXVlcnkocHN0bXQsIHByZXAsCiAJCQkJCQkJIHBvcnRhbC0+c291cmNlVGV4dCwKIAkJCQkJ CQkgcG9ydGFsLT5wb3J0YWxQYXJhbXMsCiAJCQkJCQkJIHBvcnRhbC0+cXVlcnlFbnYsCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tbWdyL3BvcnRhbG1lbS5jIGIvc3JjL2JhY2tlbmQv dXRpbHMvbW1nci9wb3J0YWxtZW0uYwppbmRleCA5NDNkYTA4N2M5Zi4uMzEzZjhlZjJmZGMgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvcG9ydGFsbWVtLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvbW1nci9wb3J0YWxtZW0uYwpAQCAtMjg0LDYgKzI4NCw3IEBAIFBvcnRhbERl ZmluZVF1ZXJ5KFBvcnRhbCBwb3J0YWwsCiAJCQkJICBjb25zdCBjaGFyICpzb3VyY2VUZXh0LAog CQkJCSAgQ29tbWFuZFRhZyBjb21tYW5kVGFnLAogCQkJCSAgTGlzdCAqc3RtdHMsCisJCQkJICBM aXN0ICpwcmVwcywKIAkJCQkgIENhY2hlZFBsYW4gKmNwbGFuKQogewogCUFzc2VydChQb3J0YWxJ c1ZhbGlkKHBvcnRhbCkpOwpAQCAtMjk4LDYgKzI5OSw3IEBAIFBvcnRhbERlZmluZVF1ZXJ5KFBv cnRhbCBwb3J0YWwsCiAJcG9ydGFsLT5xYy5ucHJvY2Vzc2VkID0gMDsKIAlwb3J0YWwtPmNvbW1h bmRUYWcgPSBjb21tYW5kVGFnOwogCXBvcnRhbC0+c3RtdHMgPSBzdG10czsKKwlwb3J0YWwtPnBy ZXBzID0gcHJlcHM7CiAJcG9ydGFsLT5jcGxhbiA9IGNwbGFuOwogCXBvcnRhbC0+c3RhdHVzID0g UE9SVEFMX0RFRklORUQ7CiB9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBs YWluLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKaW5kZXggNmU1MWQ1MGVmYzcu LjZhYThiMjc1YWEyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgK KysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oCkBAIC02Myw3ICs2Myw4IEBAIGV4 dGVybiB2b2lkIEV4cGxhaW5PbmVVdGlsaXR5KE5vZGUgKnV0aWxpdHlTdG10LCBJbnRvQ2xhdXNl ICppbnRvLAogCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcywgUGFyc2VTdGF0ZSAqcHN0YXRlLAog CQkJCQkJCSAgUGFyYW1MaXN0SW5mbyBwYXJhbXMpOwogCi1leHRlcm4gdm9pZCBFeHBsYWluT25l UGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEludG9DbGF1c2UgKmludG8sCitleHRlcm4g dm9pZCBFeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEV4ZWNQcmVwICpw cmVwLAorCQkJCQkJICAgSW50b0NsYXVzZSAqaW50bywKIAkJCQkJCSAgIEV4cGxhaW5TdGF0ZSAq ZXMsIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAogCQkJCQkJICAgUGFyYW1MaXN0SW5mbyBwYXJh bXMsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LAogCQkJCQkJICAgY29uc3QgaW5zdHJfdGlt ZSAqcGxhbmR1cmF0aW9uLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rl c2MuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNkZXNjLmgKaW5kZXggODZkYjNkYzhkMGQu LmMxODUzMGY1ZDExIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjZGVzYy5o CisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNkZXNjLmgKQEAgLTE4LDcgKzE4LDYgQEAK ICNpbmNsdWRlICJub2Rlcy9leGVjbm9kZXMuaCIKICNpbmNsdWRlICJ0Y29wL2Rlc3QuaCIKIAot CiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJcXVlcnkgZGVzY3JpcHRvcjoKICAqCkBAIC0zNSw2 ICszNCw3IEBAIHR5cGVkZWYgc3RydWN0IFF1ZXJ5RGVzYwogCS8qIFRoZXNlIGZpZWxkcyBhcmUg cHJvdmlkZWQgYnkgQ3JlYXRlUXVlcnlEZXNjICovCiAJQ21kVHlwZQkJb3BlcmF0aW9uOwkJLyog Q01EX1NFTEVDVCwgQ01EX1VQREFURSwgZXRjLiAqLwogCVBsYW5uZWRTdG10ICpwbGFubmVkc3Rt dDsJLyogcGxhbm5lcidzIG91dHB1dCAoY291bGQgYmUgdXRpbGl0eSwgdG9vKSAqLworCUV4ZWNQ cmVwICpwcmVwOwkJCQkvKiBvdXRwdXQgb2YgRXhlY3V0b3JQcmVwKCkgb3IgTlVMTCAqLwogCWNv bnN0IGNoYXIgKnNvdXJjZVRleHQ7CQkvKiBzb3VyY2UgdGV4dCBvZiB0aGUgcXVlcnkgKi8KIAlT bmFwc2hvdAlzbmFwc2hvdDsJCS8qIHNuYXBzaG90IHRvIHVzZSBmb3IgcXVlcnkgKi8KIAlTbmFw c2hvdAljcm9zc2NoZWNrX3NuYXBzaG90OwkvKiBjcm9zc2NoZWNrIGZvciBSSSB1cGRhdGUvZGVs ZXRlICovCkBAIC01Nyw2ICs1Nyw3IEBAIHR5cGVkZWYgc3RydWN0IFF1ZXJ5RGVzYwogCiAvKiBp biBwcXVlcnkuYyAqLwogZXh0ZXJuIFF1ZXJ5RGVzYyAqQ3JlYXRlUXVlcnlEZXNjKFBsYW5uZWRT dG10ICpwbGFubmVkc3RtdCwKKwkJCQkJCQkJICBFeGVjUHJlcCAqcHJlcCwKIAkJCQkJCQkJICBj b25zdCBjaGFyICpzb3VyY2VUZXh0LAogCQkJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LAogCQkJ CQkJCQkgIFNuYXBzaG90IGNyb3NzY2hlY2tfc25hcHNob3QsCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9leGVjdXRvci9leGVjdXRvci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3Iu aAppbmRleCBmYTJiNjU3ZmIyZi4uYmM5MGQwZWE3ZWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL2V4ZWN1dG9yLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3Iu aApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgIm5vZGVzL2xvY2tvcHRpb25zLmgiCiAjaW5j bHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisj aW5jbHVkZSAidXRpbHMvcmVzb3duZXIuaCIKIAogCiAvKgpAQCAtMjM0LDYgKzIzNSwxNSBAQCBF eGVjR2V0SnVua0F0dHJpYnV0ZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgQXR0ck51bWJlciBhdHRu bywgYm9vbCAqaXNOdWxsKQogICovCiBleHRlcm4gdm9pZCBFeGVjdXRvclN0YXJ0KFF1ZXJ5RGVz YyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKTsKIGV4dGVybiB2b2lkIHN0YW5kYXJkX0V4ZWN1dG9y U3RhcnQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpOworCitleHRlcm4gRXhlY1By ZXAgKkV4ZWN1dG9yUHJlcChQbGFubmVkU3RtdCAqcHN0bXQsCisJCQkJCQkJICBQYXJhbUxpc3RJ bmZvIHBhcmFtcywKKwkJCQkJCQkgIFJlc291cmNlT3duZXIgb3duZXIsCisJCQkJCQkJICBib29s IGRvX2luaXRpYWxfcHJ1bmluZyk7CitleHRlcm4gRXhlY1ByZXAgKkNyZWF0ZUV4ZWNQcmVwKEVT dGF0ZSAqZXN0YXRlLCBNZW1vcnlDb250ZXh0IGNvbnRleHQsCisJCQkJCQkJCWV4ZWNwcmVwX2Ns ZWFudXBfZm4gY2xlYW51cCwgdm9pZCAqY2xlYW51cF9hcmcpOworZXh0ZXJuIHZvaWQgRXhlY1By ZXBDbGVhbnVwKEV4ZWNQcmVwICpwcmVwKTsKKwogZXh0ZXJuIHZvaWQgRXhlY3V0b3JSdW4oUXVl cnlEZXNjICpxdWVyeURlc2MsCiAJCQkJCQlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwgdWludDY0 IGNvdW50KTsKIGV4dGVybiB2b2lkIHN0YW5kYXJkX0V4ZWN1dG9yUnVuKFF1ZXJ5RGVzYyAqcXVl cnlEZXNjLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMv aW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCAxOGFlOGYwZDRiYi4uZjU2OWJlMzg1M2Yg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNs dWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC03NzIsNiArNzcyLDYxIEBAIHR5cGVkZWYgc3RydWN0 IEVTdGF0ZQogCUxpc3QJICAgKmVzX2luc2VydF9wZW5kaW5nX21vZGlmeXRhYmxlczsKIH0gRVN0 YXRlOwogCisvKgorICogRXhlY1ByZXA6IGVuY2Fwc3VsYXRlcyBleGVjdXRvciBwcmVwYXJhdGlv biByZXN1bHRzIGZvciBhIFBsYW5uZWRTdG10LgorICoKKyAqIFRoaXMgaXMgdXNlZCB3aGVuIHdl IHdhbnQgdG8gcGVyZm9ybSBleGVjdXRvciBzZXR1cCBzdGVwcyAtLSBzdWNoIGFzCisgKiBpbml0 aWFsaXppbmcgdGhlIHJhbmdlIHRhYmxlLCBjaGVja2luZyBwZXJtaXNzaW9ucywgYW5kIGV4ZWN1 dGluZyBpbml0aWFsCisgKiBwYXJ0aXRpb24gcHJ1bmluZyAtLSBhaGVhZCBvZiBhY3R1YWwgcGxh biBleGVjdXRpb24uIEEgdHlwaWNhbCB1c2UgY2FzZSBpcworICogaW4gcGxhbiB2YWxpZGF0aW9u IGxvZ2ljIChlLmcuLCB3aGVuIGRlY2lkaW5nIHdoZXRoZXIgdG8gcmV1c2UgYSBnZW5lcmljCisg KiBjYWNoZWQgcGxhbiksIHdoZXJlIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGV4YWN0bHkgd2hpY2gg cGFydGl0aW9ucyB3aWxsIGJlCisgKiBzY2FubmVkIGFuZCBsb2NrZWQsIHdpdGhvdXQgZXhlY3V0 aW5nIHRoZSBmdWxsIHBsYW4uCisgKgorICogVGhlIGV4ZWN1dG9yIG1heSBsYXRlciBhZG9wdCB0 aGUgcHJlcGFyZWQgRVN0YXRlICh2aWEgRXhlY3V0b3JTdGFydCksCisgKiBhdm9pZGluZyByZWR1 bmRhbnQgc2V0dXAuIEluIHRoYXQgY2FzZSwgdGhlIGV4ZWN1dG9yIGlzIHJlc3BvbnNpYmxlIGZv cgorICogZnJlZWluZyB0aGUgc3RhdGUgYW5kIEV4ZWNQcmVwQ2xlYW51cCgpIHdpbGwgc2tpcCBp dC4KKyAqLworc3RydWN0IEV4ZWNQcmVwOworCisvKgorICogT3B0aW9uYWwgY2FsbGJhY2sgdG8g Y2xlYW4gdXAgdXNlci1zcGVjaWZpYyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoCisgKiBFeGVj UHJlcC4KKyAqLwordHlwZWRlZiB2b2lkICgqZXhlY3ByZXBfY2xlYW51cF9mbikoc3RydWN0IEV4 ZWNQcmVwICpwcmVwKTsKKworLyogRXhlY3V0b3JQcmVwIG91dHB1dCAqLwordHlwZWRlZiBzdHJ1 Y3QgRXhlY1ByZXAKK3sKKwkvKgorCSAqIENvbnRleHQgaW4gd2hpY2ggdGhpcyBzdHJ1Y3QgYW5k IGFsbCBzdWJzaWRpYXJ5IGFsbG9jYXRpb25zIHdlcmUgbWFkZS4KKwkgKiBUaGlzIGNvbnRleHQg bXVzdCByZW1haW4gYWxpdmUgdW50aWwgRXhlY1ByZXBDbGVhbnVwIGlzIGNhbGxlZC4KKwkgKi8K KwlNZW1vcnlDb250ZXh0IGNvbnRleHQ7CisKKwkvKgorCSAqIFBhcnRpYWxseS1pbml0aWFsaXpl ZCBleGVjdXRvciBzdGF0ZSB1c2VkIGZvciBwZXJtaXNzaW9uIGNoZWNrcyBhbmQKKwkgKiBwcnVu aW5nLiBNYXkgYmUgYWRvcHRlZCBkaXJlY3RseSBieSBFeGVjdXRvclN0YXJ0KCksIGluIHdoaWNo IGNhc2UKKwkgKiBFeGVjUHJlcENsZWFudXAgd2lsbCBza2lwIGZyZWVpbmcgaXQuCisJICovCisJ RVN0YXRlCSAgICpwcmVwX2VzdGF0ZTsKKworCS8qCisJICogVHJ1ZSBpZiBFeGVjUHJlcENsZWFu dXAoKSBtdXN0IGZyZWUgdGhlIEVTdGF0ZS4gIElmIHRoZSBleGVjdXRvciBhZG9wdHMKKwkgKiBw cmVwX2VzdGF0ZSwgdGhpcyBpcyBzZXQgdG8gZmFsc2UgdG8gYXZvaWQgZG91YmxlLWZyZWUuCisJ ICovCisJYm9vbAkJb3duc19lc3RhdGU7CisKKwkvKgorCSAqIE9wdGlvbmFsIGNhbGxlci1zdXBw bGllZCBjbGVhbnVwIGhvb2sgdG8gcnVuIGR1cmluZyBFeGVjUHJlcENsZWFudXAuCisJICogVXNl ZnVsIGZvciByZWxlYXNpbmcgZXh0ZXJuYWwgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUg cHJlcC4KKwkgKi8KKwlleGVjcHJlcF9jbGVhbnVwX2ZuIGNsZWFudXA7CisKKwkvKgorCSAqIE9w YXF1ZSBwb2ludGVyIHRvIHBhc3MgdG8gdGhlIGNsZWFudXAgaG9vay4KKwkgKi8KKwl2b2lkCSAg ICpjbGVhbnVwX2FyZzsKK30gRXhlY1ByZXA7CiAKIC8qCiAgKiBFeGVjUm93TWFyayAtCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9wb3J0YWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3Bv cnRhbC5oCmluZGV4IDVmZmE2ZmQ1Y2M4Li4wMTNiY2MzYmQ4ZSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvdXRpbHMvcG9ydGFsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcG9ydGFsLmgKQEAg LTEzNyw2ICsxMzcsNyBAQCB0eXBlZGVmIHN0cnVjdCBQb3J0YWxEYXRhCiAJQ29tbWFuZFRhZwlj b21tYW5kVGFnOwkJLyogY29tbWFuZCB0YWcgZm9yIG9yaWdpbmFsIHF1ZXJ5ICovCiAJUXVlcnlD b21wbGV0aW9uIHFjOwkJCS8qIGNvbW1hbmQgY29tcGxldGlvbiBkYXRhIGZvciBleGVjdXRlZCBx dWVyeSAqLwogCUxpc3QJICAgKnN0bXRzOwkJCS8qIGxpc3Qgb2YgUGxhbm5lZFN0bXRzICovCisJ TGlzdAkgICAqcHJlcHM7CQkJLyogbGlzdCBvZiBFeGVjUHJlcHMgd2hlcmUgbmVlZGVkICovCiAJ Q2FjaGVkUGxhbiAqY3BsYW47CQkJLyogQ2FjaGVkUGxhbiwgaWYgc3RtdHMgYXJlIGZyb20gb25l ICovCiAKIAlQYXJhbUxpc3RJbmZvIHBvcnRhbFBhcmFtczsgLyogcGFyYW1zIHRvIHBhc3MgdG8g cXVlcnkgKi8KQEAgLTI0MCw2ICsyNDEsNyBAQCBleHRlcm4gdm9pZCBQb3J0YWxEZWZpbmVRdWVy eShQb3J0YWwgcG9ydGFsLAogCQkJCQkJCSAgY29uc3QgY2hhciAqc291cmNlVGV4dCwKIAkJCQkJ CQkgIENvbW1hbmRUYWcgY29tbWFuZFRhZywKIAkJCQkJCQkgIExpc3QgKnN0bXRzLAorCQkJCQkJ CSAgTGlzdCAqcHJlcHMsCiAJCQkJCQkJICBDYWNoZWRQbGFuICpjcGxhbik7CiBleHRlcm4gUGxh bm5lZFN0bXQgKlBvcnRhbEdldFByaW1hcnlTdG10KFBvcnRhbCBwb3J0YWwpOwogZXh0ZXJuIHZv aWQgUG9ydGFsQ3JlYXRlSG9sZFN0b3JlKFBvcnRhbCBwb3J0YWwpOwotLSAKMi40Ny4zCgo= --0000000000008e54dd0643666e71--