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 1wbCSF-002Ms1-1n for pgpool-hackers@arkaria.postgresql.org; Sun, 21 Jun 2026 07:18:56 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wbCSD-002erN-1c for pgpool-hackers@arkaria.postgresql.org; Sun, 21 Jun 2026 07:18:53 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wbCSC-002erF-2R for pgpool-hackers@lists.postgresql.org; Sun, 21 Jun 2026 07:18:53 +0000 Received: from mail-yx1-xb131.google.com ([2607:f8b0:4864:20::b131]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wbCSA-00000001PHg-1aEe for pgpool-hackers@lists.postgresql.org; Sun, 21 Jun 2026 07:18:51 +0000 Received: by mail-yx1-xb131.google.com with SMTP id 956f58d0204a3-662df6a4fe4so3976733d50.2 for ; Sun, 21 Jun 2026 00:18:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1782026329; cv=none; d=google.com; s=arc-20240605; b=OHV1RE51d0gzIOgABai6izSEFrr0/K5N/oWNDOi3LX0DXimAO7PCMOjhAknRW459iY dZT/Lso9GLCMRPHkQKY4krmDD7zHeSejHWspOp3qqYvKmjYLlywKidy9wA1BGCSJksD1 W4LcXBXwwVIumSH3gXiX1kijDnlomcFqyVnZKbdRyz51Qvd2BFvU4wKJLg5qEbtkZfBZ LSKk3Vwn52ksTm3xyOLCcqdyFop8WUusyoFe8dqpwZgT+JxxPNVD6PnZCwcWopX+kHai 9Xlo3/1rQcr66bKpLkfK6RwLXE9vLSMIQjTvNcw5Bvkp0eIp6mPMbM2K6fXqJVGarlii Bgyw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=afZHFvaAOsCRZpBoM5hOruNo2UjPqVUeWChG3e97BGI=; fh=m3oiE62fRN5J1XaE+5vpHZRIgCyFefxVI0mFw3d8yxA=; b=UOO7AN6DQelULEqJdxqStrWvXYgzAxRMsdcxk1WBWC4moAh2whtHsaVJQ3xi/pCDDj 0K5MrHzbgNn/vIUu5tEDBIrEfQTdnS29XyGNLL48xa/MF2q8dfApPXDfnWdHtRjj8Usv Dm6FHPTodhnk96IlCmmVwkEwElHWUO/eKbkXC3z7/8Q5S4niEQPSrP7k/RQICuVC28tT ovnyfnQ9o6BAmNErcR99HMlZOuj3vhMLuKJAf/YNNNe4RddXAEGepVEVm0GFnOB6HHbx WYUFsuUNs4+A6+iJHacY5d/URkXaFtzAeVfRltXG1Z3BexEvGPT/fDjRVkTLPtEMrDXY ai9A==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tailorbrands.com; s=google; t=1782026329; x=1782631129; darn=lists.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=afZHFvaAOsCRZpBoM5hOruNo2UjPqVUeWChG3e97BGI=; b=W2BTLVCufGAMg00fFHGvg9LfDGFxHn3wuL1c7Gpu2PTCnCGlRckmrcvfdEP3TABokC TCs17WyQQAm9H5+PF3+Hb1GWu6ofT1HDyYzfV3FeJ0oHrUAVOHid+RowSNn6aATqXE9t GSmohssAW4CEMGbttSRY3n8VfxHtv8ahMw4F1UBb33Nfh4q7zvcKqWe8Cql94Dq4UCoz KSCBSpWQxHeeVA5oNQ2Hf1ziSPkn1BAXafgy/XYFqVDUW+DDKrcwULf5ZSs9QLRlh4Yl UQni465pc9bbALF3JAaWnMiPfmaa3A7gZDQ7XrrNWN1R1mhRIJAU8klLWECybUg/Eam8 kuXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782026329; x=1782631129; 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=afZHFvaAOsCRZpBoM5hOruNo2UjPqVUeWChG3e97BGI=; b=LK9tPXMI69M8cp3ERg1p3gIINoDzQyAOniKKMBcD7IIfVv+qMNt5pF+N6SrD49fnW4 IeSJkBpwE0nvZszXMp87BQlnUOhHNd35NcI3eqmYbWmWXSA6S+dsbx7USf+10bcmUsAR y3v/CmADoYCLw+XtCAY1lfyVw+Garq5dZ7Gr5CjL4pmCF3y/NVrCop7HqSSUfOoMHigZ hJI4NRWCHSRATSkso7VBRWMuCOZzbdgvMwBj0tBFXvbRIr3CxEIbpP/Ak7g+/r7ffSDK jQI53a1QhLCCpWtdY8p6O9+pITem9pxCk3w1D950F3nZvRum3d2d/GQbxvooCOo3DjNB E4hw== X-Gm-Message-State: AOJu0YynxAxHel6okqRrfmmlyDOezTPCxGoWFnSVNmKmVhdticeWUS9p 5z4fSIGjilRGR4cAp2ecED47a8Nf/Pvy+gq0IVy2Rc5LAGLwvgE5FZh+pg5di5vk8x81Yhh9kKp qS2dF7fLtgzYzlKmVDVuz0HD/x7q5ItNsAATTSzceVQ== X-Gm-Gg: AfdE7ckugFtqkbWbjwudBoizZ0SgvzkuvwcyI+1z+cK+F6aeVVVMrMgs4b2IKQQGUKY vxtCCaSSdoIdmKaa2tTPez26Cel4MJCQlcpd1ZF28ESnOeTGDzrbs6IVbaCtDcShOoiE2FQ/yq+ 7u5RpGjH9n/6/s+xkVaJjAc8OQ9GbKXPb1fpVItgnAafOn+CFaAf7kz4r7MSVNSpKW2VvrEneZ2 ACK6qtoym1BMdSc1pg1ByIFj3+/RFnii/BkI1G0l7Sf5SGvLdpKklILijgr/dEp1V/zN4h7Mmcs dgyonwhtEypRQS1V3jZqBu3J3PaNrcPW69FvnlmeKug4c/MZKcQuguB00ljYIZusjNnw8E+gpwW X/RPX3Opbgty8Ou5EMPMZpML1XkvXbxt8Zwbn X-Received: by 2002:a05:690e:1916:b0:662:db62:14da with SMTP id 956f58d0204a3-6630308b6b6mr7432441d50.17.1782026328625; Sun, 21 Jun 2026 00:18:48 -0700 (PDT) MIME-Version: 1.0 References: <20260604.185936.1758441592589268635.ishii@postgresql.org> <20260619.111037.159094338431818955.ishii@postgresql.org> In-Reply-To: <20260619.111037.159094338431818955.ishii@postgresql.org> From: Nadav Shatz Date: Sun, 21 Jun 2026 10:18:35 +0300 X-Gm-Features: AVVi8CeBHv4YF1u6G0YTmjyM25ozplOlx022hQbse1BxXCPr61Sp_SvyH0p6u00 Message-ID: Subject: Re: Proposal: Recent mutated table tracking in memory To: Tatsuo Ishii Cc: pgpool-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000004ca7f80654be5621" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004ca7f80654be5621 Content-Type: multipart/alternative; boundary="0000000000004ca7f60654be561f" --0000000000004ca7f60654be561f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Tatsuo, Good catch -- that was a bug, and chasing it down turned up a second one in the same area. The original problem you described: the flush ran in dml_adaptive() while pgpool was *routing* the COMMIT, before the COMMIT was sent to the backend. So a COMMIT that later failed (your deferred-constraint example) had already marked the tables, even though the writes rolled back. My first instinct was to just move the flush to handle_query_context(), where reaching CommandComplete for the COMMIT means it succeeded. But that path resolves table/database OIDs via pool_table_name_to_oid() / the relcache, which on a cache miss issues a do_query() -- and at that point the COMMIT response is still being read from the backend, so injecting a query desyncs the protocol and hangs the session. Testing caught this immediately. It turned out the existing autocommit marking branch had the very same hazard: pool_extract_table_oids() in handle_query_context() also does a relcache do_query() on a miss, so e.g. "DROP TABLE IF EXISTS " (an uncacheable name -> guaranteed miss) reliably hung the session too. So I fixed both uniformly: resolve the written tables' OIDs (and the database OID) at DML *routing* time, when the connection is idle and do_query is safe -- the same context where the feature already resolves OIDs for the SELECT staleness check. The OIDs are stashed in the session context and only *marked* in shared memory at CommandComplete, which now does no backend I/O at all. Autocommit statements mark on their own CommandComplete; explicit transactions accumulate and mark on COMMIT; ROLLBACK and failed/rolled-back COMMITs never reach the mark step, so their writes are correctly not recorded. A side benefit: using pool_extract_table_oids() for both paths means we now mark only the actual write *targets*, instead of every relation in the statement (the in-transaction path previously walked all RangeVars, so an "INSERT ... SELECT FROM t" would also mark the read source t). Since your really_writing_transaction fix is now in master (1333d2ae8), I dropped the copy I was carrying and rebased the feature directly onto current master. One patch this time: v6-0001-Feature-load-balancing-control-by-table-tracking.patch Verified on a PG16 streaming-replication cluster (dml_adaptive_global, standby weighted for load balancing): - your deferred-constraint COMMIT fails -> table not marked -> reads keep load-balancing to the standby; - a successful COMMIT, and a successful autocommit write -> table marked -> reads forced to the primary; - COMMIT returns promptly (no hang), and "DROP TABLE IF EXISTS " no longer hangs. Thanks! On Fri, Jun 19, 2026 at 5:10=E2=80=AFAM Tatsuo Ishii = wrote: > > understood. we'll wait patiently or try master. > > > > thanks! > > While reviewing > v5-0002-Feature-load-balancing-control-by-table-tracking.patch, I > noticed following code: > > static void > dml_adaptive(Node *node, char *query) > { > : > : > + /* > + * For dml_adaptive_global: on COMMIT, > flush the accumulated > + * table writes to shared memory. On > ROLLBACK, skip -- the > + * writes never committed so no stale-rea= d > risk exists. This > + * prevents polluting the table map with > rolled-back > + * transactions. > + */ > + int dlbow =3D > + pool_config->disable_load_balance_on_writ= e; > + List *wlist =3D > + > session_context->transaction_temp_write_list; > + > + if (dlbow =3D=3D DLBOW_DML_ADAPTIVE_GLOBA= L && > + is_commit_query(node) && > + wlist !=3D NIL) > + { > + ListCell *cell; > + int dboid; > + > + dboid =3D > + > pool_track_table_mutation_get_database_oid(); > + if (dboid > 0) > + { > + foreach(cell, wlist) > + { > + char *tname= ; > + int > toid; > + > + tname =3D (char *= ) > lfirst(cell); > + toid =3D > + > pool_table_name_to_oid(tname); > + > + if (toid > 0) > + > pool_track_table_mutation_mark_table_written( > + > > toid, dboid); > + } > > The code path is executed before the commit command is sent to primary > PostgreSQL. I wonder what will happen if the commit command failed? > Example: > > CREATE TEMP TABLE t1(i int PRIMARY KEY DEFERRABLE INITIALLY DEFERRED); > CREATE TABLE > INSERT INTO t1 VALUES(1); > INSERT 0 1 > BEGIN; > BEGIN > INSERT INTO t1 VALUES(1); > INSERT 0 1 > INSERT INTO t1 VALUES(2); > INSERT 0 1 > COMMIT; > psql:deferable.sql:6: ERROR: duplicate key value violates unique > constraint "t1_pkey" > DETAIL: Key (i)=3D(1) already exists. > > As you can see, the COMMIT command failed and the effect of INSERT > commands vanished too. However the code invalidates the data on the > shared memory by pool_track_table_mutation_mark_table_written() when > it should not be called? > > Regards, > -- > Tatsuo Ishii > SRA OSS K.K. > English: http://www.sraoss.co.jp/index_en/ > Japanese:http://www.sraoss.co.jp > --=20 Nadav Shatz Tailor Brands | CTO --0000000000004ca7f60654be561f Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+SGkgVGF0c3VvLDxicj48YnI+R29vZCBjYXRjaCAtLSB0aGF0IHdhcyBh IGJ1ZywgYW5kIGNoYXNpbmcgaXQgZG93biB0dXJuZWQgdXAgYSBzZWNvbmQ8YnI+b25lIGluIHRo ZSBzYW1lIGFyZWEuPGJyPjxicj5UaGUgb3JpZ2luYWwgcHJvYmxlbSB5b3UgZGVzY3JpYmVkOiB0 aGUgZmx1c2ggcmFuIGluIGRtbF9hZGFwdGl2ZSgpPGJyPndoaWxlIHBncG9vbCB3YXMgKnJvdXRp bmcqIHRoZSBDT01NSVQsIGJlZm9yZSB0aGUgQ09NTUlUIHdhcyBzZW50IHRvPGJyPnRoZSBiYWNr ZW5kLsKgIFNvIGEgQ09NTUlUIHRoYXQgbGF0ZXIgZmFpbGVkICh5b3VyIGRlZmVycmVkLWNvbnN0 cmFpbnQ8YnI+ZXhhbXBsZSkgaGFkIGFscmVhZHkgbWFya2VkIHRoZSB0YWJsZXMsIGV2ZW4gdGhv dWdoIHRoZSB3cml0ZXMgcm9sbGVkPGJyPmJhY2suPGJyPjxicj5NeSBmaXJzdCBpbnN0aW5jdCB3 YXMgdG8ganVzdCBtb3ZlIHRoZSBmbHVzaCB0byBoYW5kbGVfcXVlcnlfY29udGV4dCgpLDxicj53 aGVyZSByZWFjaGluZyBDb21tYW5kQ29tcGxldGUgZm9yIHRoZSBDT01NSVQgbWVhbnMgaXQgc3Vj Y2VlZGVkLsKgIEJ1dDxicj50aGF0IHBhdGggcmVzb2x2ZXMgdGFibGUvZGF0YWJhc2UgT0lEcyB2 aWEgcG9vbF90YWJsZV9uYW1lX3RvX29pZCgpIC88YnI+dGhlIHJlbGNhY2hlLCB3aGljaCBvbiBh IGNhY2hlIG1pc3MgaXNzdWVzIGEgZG9fcXVlcnkoKSAtLSBhbmQgYXQgdGhhdDxicj5wb2ludCB0 aGUgQ09NTUlUIHJlc3BvbnNlIGlzIHN0aWxsIGJlaW5nIHJlYWQgZnJvbSB0aGUgYmFja2VuZCwg c288YnI+aW5qZWN0aW5nIGEgcXVlcnkgZGVzeW5jcyB0aGUgcHJvdG9jb2wgYW5kIGhhbmdzIHRo ZSBzZXNzaW9uLsKgIFRlc3Rpbmc8YnI+Y2F1Z2h0IHRoaXMgaW1tZWRpYXRlbHkuPGJyPjxicj5J dCB0dXJuZWQgb3V0IHRoZSBleGlzdGluZyBhdXRvY29tbWl0IG1hcmtpbmcgYnJhbmNoIGhhZCB0 aGUgdmVyeSBzYW1lPGJyPmhhemFyZDogcG9vbF9leHRyYWN0X3RhYmxlX29pZHMoKSBpbiBoYW5k bGVfcXVlcnlfY29udGV4dCgpIGFsc28gZG9lcyBhPGJyPnJlbGNhY2hlIGRvX3F1ZXJ5KCkgb24g YSBtaXNzLCBzbyBlLmcuICZxdW90O0RST1AgVEFCTEUgSUYgRVhJU1RTICZsdDtub25leGlzdGVu dCZndDsmcXVvdDs8YnI+KGFuIHVuY2FjaGVhYmxlIG5hbWUgLSZndDsgZ3VhcmFudGVlZCBtaXNz KSByZWxpYWJseSBodW5nIHRoZSBzZXNzaW9uIHRvby48YnI+PGJyPlNvIEkgZml4ZWQgYm90aCB1 bmlmb3JtbHk6IHJlc29sdmUgdGhlIHdyaXR0ZW4gdGFibGVzJiMzOTsgT0lEcyAoYW5kIHRoZTxi cj5kYXRhYmFzZSBPSUQpIGF0IERNTCAqcm91dGluZyogdGltZSwgd2hlbiB0aGUgY29ubmVjdGlv biBpcyBpZGxlIGFuZDxicj5kb19xdWVyeSBpcyBzYWZlIC0tIHRoZSBzYW1lIGNvbnRleHQgd2hl cmUgdGhlIGZlYXR1cmUgYWxyZWFkeSByZXNvbHZlczxicj5PSURzIGZvciB0aGUgU0VMRUNUIHN0 YWxlbmVzcyBjaGVjay7CoCBUaGUgT0lEcyBhcmUgc3Rhc2hlZCBpbiB0aGU8YnI+c2Vzc2lvbiBj b250ZXh0IGFuZCBvbmx5ICptYXJrZWQqIGluIHNoYXJlZCBtZW1vcnkgYXQgQ29tbWFuZENvbXBs ZXRlLDxicj53aGljaCBub3cgZG9lcyBubyBiYWNrZW5kIEkvTyBhdCBhbGwuwqAgQXV0b2NvbW1p dCBzdGF0ZW1lbnRzIG1hcmsgb248YnI+dGhlaXIgb3duIENvbW1hbmRDb21wbGV0ZTsgZXhwbGlj aXQgdHJhbnNhY3Rpb25zIGFjY3VtdWxhdGUgYW5kIG1hcmsgb248YnI+Q09NTUlUOyBST0xMQkFD SyBhbmQgZmFpbGVkL3JvbGxlZC1iYWNrIENPTU1JVHMgbmV2ZXIgcmVhY2ggdGhlIG1hcms8YnI+ c3RlcCwgc28gdGhlaXIgd3JpdGVzIGFyZSBjb3JyZWN0bHkgbm90IHJlY29yZGVkLjxicj48YnI+ QSBzaWRlIGJlbmVmaXQ6IHVzaW5nIHBvb2xfZXh0cmFjdF90YWJsZV9vaWRzKCkgZm9yIGJvdGgg cGF0aHMgbWVhbnMgd2U8YnI+bm93IG1hcmsgb25seSB0aGUgYWN0dWFsIHdyaXRlICp0YXJnZXRz KiwgaW5zdGVhZCBvZiBldmVyeSByZWxhdGlvbiBpbjxicj50aGUgc3RhdGVtZW50ICh0aGUgaW4t dHJhbnNhY3Rpb24gcGF0aCBwcmV2aW91c2x5IHdhbGtlZCBhbGwgUmFuZ2VWYXJzLDxicj5zbyBh biAmcXVvdDtJTlNFUlQgLi4uIFNFTEVDVCBGUk9NIHQmcXVvdDsgd291bGQgYWxzbyBtYXJrIHRo ZSByZWFkIHNvdXJjZSB0KS48YnI+PGJyPlNpbmNlIHlvdXIgcmVhbGx5X3dyaXRpbmdfdHJhbnNh Y3Rpb24gZml4IGlzIG5vdyBpbiBtYXN0ZXIgKDEzMzNkMmFlOCksPGJyPkkgZHJvcHBlZCB0aGUg Y29weSBJIHdhcyBjYXJyeWluZyBhbmQgcmViYXNlZCB0aGUgZmVhdHVyZSBkaXJlY3RseSBvbnRv PGJyPmN1cnJlbnQgbWFzdGVyLsKgIE9uZSBwYXRjaCB0aGlzIHRpbWU6PGJyPjxicj7CoCB2Ni0w MDAxLUZlYXR1cmUtbG9hZC1iYWxhbmNpbmctY29udHJvbC1ieS10YWJsZS10cmFja2luZy5wYXRj aDxicj48YnI+VmVyaWZpZWQgb24gYSBQRzE2IHN0cmVhbWluZy1yZXBsaWNhdGlvbiBjbHVzdGVy IChkbWxfYWRhcHRpdmVfZ2xvYmFsLDxicj5zdGFuZGJ5IHdlaWdodGVkIGZvciBsb2FkIGJhbGFu Y2luZyk6PGJyPjxicj7CoCAtIHlvdXIgZGVmZXJyZWQtY29uc3RyYWludCBDT01NSVQgZmFpbHMg LSZndDsgdGFibGUgbm90IG1hcmtlZCAtJmd0OyByZWFkczxicj7CoCDCoCBrZWVwIGxvYWQtYmFs YW5jaW5nIHRvIHRoZSBzdGFuZGJ5Ozxicj7CoCAtIGEgc3VjY2Vzc2Z1bCBDT01NSVQsIGFuZCBh IHN1Y2Nlc3NmdWwgYXV0b2NvbW1pdCB3cml0ZSAtJmd0OyB0YWJsZTxicj7CoCDCoCBtYXJrZWQg LSZndDsgcmVhZHMgZm9yY2VkIHRvIHRoZSBwcmltYXJ5Ozxicj7CoCAtIENPTU1JVCByZXR1cm5z IHByb21wdGx5IChubyBoYW5nKSwgYW5kICZxdW90O0RST1AgVEFCTEUgSUYgRVhJU1RTPGJyPsKg IMKgICZsdDtub25leGlzdGVudCZndDsmcXVvdDsgbm8gbG9uZ2VyIGhhbmdzLjxicj48YnI+VGhh bmtzITwvZGl2Pjxicj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSBnbWFpbF9xdW90ZV9jb250YWlu ZXIiPjxkaXYgZGlyPSJsdHIiIGNsYXNzPSJnbWFpbF9hdHRyIj5PbiBGcmksIEp1biAxOSwgMjAy NiBhdCA1OjEw4oCvQU0gVGF0c3VvIElzaGlpICZsdDs8YSBocmVmPSJtYWlsdG86aXNoaWlAcG9z dGdyZXNxbC5vcmciPmlzaGlpQHBvc3RncmVzcWwub3JnPC9hPiZndDsgd3JvdGU6PGJyPjwvZGl2 PjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowcHggMHB4IDBw eCAwLjhleDtib3JkZXItbGVmdDoxcHggc29saWQgcmdiKDIwNCwyMDQsMjA0KTtwYWRkaW5nLWxl ZnQ6MWV4Ij4mZ3Q7IHVuZGVyc3Rvb2QuIHdlJiMzOTtsbCB3YWl0IHBhdGllbnRseSBvciB0cnkg bWFzdGVyLjxicj4NCiZndDsgPGJyPg0KJmd0OyB0aGFua3MhPGJyPg0KPGJyPg0KV2hpbGUgcmV2 aWV3aW5nPGJyPg0KdjUtMDAwMi1GZWF0dXJlLWxvYWQtYmFsYW5jaW5nLWNvbnRyb2wtYnktdGFi bGUtdHJhY2tpbmcucGF0Y2gsIEk8YnI+DQpub3RpY2VkIGZvbGxvd2luZyBjb2RlOjxicj4NCjxi cj4NCsKgc3RhdGljIHZvaWQ8YnI+DQrCoGRtbF9hZGFwdGl2ZShOb2RlICpub2RlLCBjaGFyICpx dWVyeSk8YnI+DQrCoHs8YnI+DQo6PGJyPg0KOjxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoC8qPGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICogRm9yIGRtbF9hZGFwdGl2ZV9nbG9iYWw6IG9uIENP TU1JVCwgZmx1c2ggdGhlIGFjY3VtdWxhdGVkPGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICogdGFibGUgd3JpdGVzIHRvIHNoYXJlZCBtZW1vcnku wqAgT24gUk9MTEJBQ0ssIHNraXAgLS0gdGhlPGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICogd3JpdGVzIG5ldmVyIGNvbW1pdHRlZCBzbyBubyBz dGFsZS1yZWFkIHJpc2sgZXhpc3RzLsKgIFRoaXM8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKiBwcmV2ZW50cyBwb2xsdXRpbmcgdGhlIHRhYmxl IG1hcCB3aXRoIHJvbGxlZC1iYWNrPGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgICogdHJhbnNhY3Rpb25zLjxicj4NCivCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAqLzxicj4NCivCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGludMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgZGxib3cgPTxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoHBvb2xfY29uZmlnLSZndDtkaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0 ZTs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBM aXN0wqAgwqAgwqAgwqAqd2xpc3QgPTxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoHNlc3Npb25fY29udGV4dC0mZ3Q7dHJhbnNhY3Rpb25fdGVtcF93 cml0ZV9saXN0Ozxicj4NCis8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqBpZiAoZGxib3cgPT0gRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JBTCAmYW1w OyZhbXA7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgaXNfY29tbWl0X3F1ZXJ5KG5vZGUpICZhbXA7JmFtcDs8YnI+DQorwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB3 bGlzdCAhPSBOSUwpPGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgezxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoExpc3RDZWxswqAgwqAqY2VsbDs8YnI+DQorwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpbnTCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGRib2lkOzxicj4NCis8YnI+DQorwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBkYm9pZCA9PGJy Pg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9nZXRfZGF0YWJhc2Vf b2lkKCk7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgaWYgKGRib2lkICZndDsgMCk8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB7PGJyPg0KK8KgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgZm9yZWFjaChjZWxsLCB3bGlzdCk8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB7PGJyPg0KK8Kg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgY2hhcsKgIMKgIMKgIMKgKnRuYW1lOzxicj4NCivCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoGludMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg dG9pZDs8YnI+DQorPGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgdG5hbWUgPSAoY2hh ciAqKSBsZmlyc3QoY2VsbCk7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgdG9pZCA9 PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcG9vbF90YWJsZV9u YW1lX3RvX29pZCh0bmFtZSk7PGJyPg0KKzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oGlmICh0b2lkICZndDsgMCk8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX21hcmtfdGFibGVfd3JpdHRlbig8YnI+DQor wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg dG9pZCwgZGJvaWQpOzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoH08YnI+DQo8YnI+DQpUaGUgY29kZSBw YXRoIGlzIGV4ZWN1dGVkIGJlZm9yZSB0aGUgY29tbWl0IGNvbW1hbmQgaXMgc2VudCB0byBwcmlt YXJ5PGJyPg0KUG9zdGdyZVNRTC4gSSB3b25kZXIgd2hhdCB3aWxsIGhhcHBlbiBpZiB0aGUgY29t bWl0IGNvbW1hbmQgZmFpbGVkPzxicj4NCkV4YW1wbGU6PGJyPg0KPGJyPg0KQ1JFQVRFIFRFTVAg VEFCTEUgdDEoaSBpbnQgUFJJTUFSWSBLRVkgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQp Ozxicj4NCkNSRUFURSBUQUJMRTxicj4NCklOU0VSVCBJTlRPIHQxIFZBTFVFUygxKTs8YnI+DQpJ TlNFUlQgMCAxPGJyPg0KQkVHSU47PGJyPg0KQkVHSU48YnI+DQpJTlNFUlQgSU5UTyB0MSBWQUxV RVMoMSk7PGJyPg0KSU5TRVJUIDAgMTxicj4NCklOU0VSVCBJTlRPIHQxIFZBTFVFUygyKTs8YnI+ DQpJTlNFUlQgMCAxPGJyPg0KQ09NTUlUOzxicj4NCnBzcWw6ZGVmZXJhYmxlLnNxbDo2OiBFUlJP UjrCoCBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICZxdW90 O3QxX3BrZXkmcXVvdDs8YnI+DQpERVRBSUw6wqAgS2V5IChpKT0oMSkgYWxyZWFkeSBleGlzdHMu PGJyPg0KPGJyPg0KQXMgeW91IGNhbiBzZWUsIHRoZSBDT01NSVQgY29tbWFuZCBmYWlsZWQgYW5k IHRoZSBlZmZlY3Qgb2YgSU5TRVJUPGJyPg0KY29tbWFuZHMgdmFuaXNoZWQgdG9vLiBIb3dldmVy IHRoZSBjb2RlIGludmFsaWRhdGVzIHRoZSBkYXRhIG9uIHRoZTxicj4NCnNoYXJlZCBtZW1vcnkg YnkgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9tYXJrX3RhYmxlX3dyaXR0ZW4oKSB3aGVuPGJy Pg0KaXQgc2hvdWxkIG5vdCBiZSBjYWxsZWQ/PGJyPg0KPGJyPg0KUmVnYXJkcyw8YnI+DQotLTxi cj4NClRhdHN1byBJc2hpaTxicj4NClNSQSBPU1MgSy5LLjxicj4NCkVuZ2xpc2g6IDxhIGhyZWY9 Imh0dHA6Ly93d3cuc3Jhb3NzLmNvLmpwL2luZGV4X2VuLyIgcmVsPSJub3JlZmVycmVyIiB0YXJn ZXQ9Il9ibGFuayI+aHR0cDovL3d3dy5zcmFvc3MuY28uanAvaW5kZXhfZW4vPC9hPjxicj4NCkph cGFuZXNlOjxhIGhyZWY9Imh0dHA6Ly93d3cuc3Jhb3NzLmNvLmpwIiByZWw9Im5vcmVmZXJyZXIi IHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LnNyYW9zcy5jby5qcDwvYT48YnI+DQo8L2Jsb2Nr cXVvdGU+PC9kaXY+PGRpdj48YnIgY2xlYXI9ImFsbCI+PC9kaXY+PGRpdj48YnI+PC9kaXY+PHNw YW4gY2xhc3M9ImdtYWlsX3NpZ25hdHVyZV9wcmVmaXgiPi0tIDwvc3Bhbj48YnI+PGRpdiBkaXI9 InJ0bCIgY2xhc3M9ImdtYWlsX3NpZ25hdHVyZSI+PGRpdiBkaXI9Imx0ciI+PGRpdj48ZGl2IGRp cj0ibHRyIj48ZGl2IGRpcj0icnRsIj48ZGl2IGRpcj0ibHRyIj48Zm9udCBjb2xvcj0iIzAwMDAw MCI+TmFkYXYgU2hhdHo8L2ZvbnQ+PC9kaXY+PGRpdiBkaXI9Imx0ciI+PGZvbnQgY29sb3I9IiMw MDAwMDAiPlRhaWxvciBCcmFuZHPCoHwgQ1RPPC9mb250PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2 PjwvZGl2PjwvZGl2Pg0K --0000000000004ca7f60654be561f-- --0000000000004ca7f80654be5621 Content-Type: application/octet-stream; name="v6-0001-Feature-load-balancing-control-by-table-tracking.patch" Content-Disposition: attachment; filename="v6-0001-Feature-load-balancing-control-by-table-tracking.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqnggg8o0 RnJvbSAwZTAwZTFjNWVkOGYyNDYwM2VmNmVhNzc1NmJlZjg1MDRkYTljZWJhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYWRhdiBTaGF0eiA8bmFkYXZAdGFpbG9yYnJhbmRzLmNvbT4K RGF0ZTogU3VuLCAxOSBBcHIgMjAyNiAxNzoxMDoyNCArMDMwMApTdWJqZWN0OiBbUEFUQ0ggdjZd IEZlYXR1cmU6IGxvYWQgYmFsYW5jaW5nIGNvbnRyb2wgYnkgdGFibGUgdHJhY2tpbmcuCgpQcmV2 ZW50IHJvdXRpbmcgb2YgcmVhZCBvbmx5IHF1ZXJpZXMgdG8gc3RhbmRieSBpZiByZXBsaWNhdGlv biBkZWxheQpvZiB0YWJsZXMgdXNlZCBpbiB0aGUgcXVlcnkgZXhjZWVkcyBjZXJ0YWluIGFtb3Vu dCBvZiB2YWx1ZQpjb2xsZWN0ZWQgYnkgc3RyZWFtaW5nIHJlcGxpY2F0aW9uIHByb2Nlc3MuIFRv IGVuYWJsZSB0aGlzIGZlYXR1cmUsCnNldCBkaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSB0 byBkbWxfYWRhcHRpdmVfZ2xvYmFsLgoKSW4gdGhpcyBtb2RlLCB3aGVuIHRhYmxlcyBhcmUgbW9k aWZpZWQgYnkKSU5TRVJUL1VQREFURS9ERUxFVEUvVFJVTkNBVEUvTUVSR0UvZGF0YSBtb2RpZmlj YXRpb24gV0lUSCwgZm9yCmNlcnRhaW4gcGVvcmlvZCBTRUxFQ1RzIHVzaW5nIHRoZSB0YWJsZXMg YXJlIG5vdCBsb2FkIGJhbGFuY2VkOgppLmUuIHJvdXRlZCB0byB0aGUgcHJpbWFyeSBQb3N0Z3Jl U1FMIHNlcnZlciB0byBhdm9pZCB0aGUgZGF0YQpzdGFsZW5lc3MgYnkgcmVwbGljYXRpb24gZGVs YXkuCgpVbmxpa2UgZG1sX2FkYXB0aXZlIG1vZGUsIGFueSB0YWJsZSBtb2RpZmljYXRpb25zIGRl Y3JpYmVkIGFib3ZlIGFyZQpkZXRlY3RlZCBldmVuIHRoZXkgaGFwcG4gaW4gb3RoZXIgc2Vzc2lv bnMgKGluIGRtbF9hZGFwdGl2ZSwgdGFibGUKbW9kaWZpY2F0aW9ucyBhcmUgb25seSBkZXRlY3Rl ZCBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbikuIE5vdGUsCmhvd2V2ZXIsIHlvdSBjYW5ub3QgdXNl IGRtbF9hZGFwdGl2ZV9vYmplY3RfcmVsYXRpb25zaGlwX2xpc3QgdG8gdHJhY2sKZGVwZW5kZW5j eSBhbW9uZyB0YWJsZSBhbmQgb3RoZXIgb2JqZWN0cy4KCkJlc2lkZXMgZG1sX2FkYXB0aXZlX2ds b2JhbCwgdGhlcmUgYXJlIHNvbWUgdHVuaW5nIGtub2JzIGZvciB0aGUKZmVhdHVyZToKCi0gdHJh Y2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvcgogIFBhcmFtZXRlciB0byBjYWxjdWxhdGUgVFRM IG9mIGVhY2ggdHJhY2tpbmcgZGF0YS4KCi0gdHJhY2tfdGFibGVfbXV0YXRpb25fbWF4X3N0YWxl bmVzcwogIE1heGltdW0gZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzIHRoYXQgYSBzaW5nbGUgdGFi bGUgZW50cnkgY2FuCiAgY29udGludW91c2x5IGZvcmNlIHF1ZXJpZXMgdG8gcHJpbWFyeS4KCi0g dHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9kdXJhdGlvbgogIER1cmF0aW9uIGluIG1p bGxpc2Vjb25kcyB0byByb3V0ZSBhbGwgcXVlcmllcyB0byBwcmltYXJ5IGFmdGVyIGEKICBjaGls ZCBwcm9jZXNzIHN0YXJ0cy4KCi0gdHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0cwog IE51bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIHRoZSB0cmFjayB0YWJsZSBtdXRhdGlvbiBoYXNo IHRhYmxlLgoKLSB0cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9zaXplCiAgTWF4aW11bSBudW1i ZXIgb2YgdGFibGVzIHRoYXQgY2FuIGJlIHRyYWNrZWQgc2ltdWx0YW5lb3VzbHkgaW4gdGhlCiAg dHJhY2sgdGFibGUgbXV0YXRpb24uCgpBdXRob3I6IE5hZGF2IFNoYXR6IDxuYWRhdkB0YWlsb3Ji cmFuZHMuY29tPgpSZXZpZXdlZC1ieTogVGF0c3VvIElzaGlpIDxpc2hpaUBwb3N0Z3Jlc3FsLm9y Zz4KRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9mbGF0 LzIwMjYwNDA3LjE4MTAwOS4xNzYyMjA0MDMzMDc0MTY0ODQxLmlzaGlpJTQwcG9zdGdyZXNxbC5v cmcjNThjMTM5YzFhN2Y4ZDU1NjI4NjU5MjFkMDczMzY2N2IKLS0tCiBkb2Mvc3JjL3NnbWwvbG9h ZGJhbGFuY2Uuc2dtbCAgICAgICAgICAgICAgICAgfCAyODggKysrKysrCiBzcmMvTWFrZWZpbGUu YW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2NvbmZpZy9wb29s X2NvbmZpZ192YXJpYWJsZXMuYyAgICAgICAgICAgIHwgIDY1ICsrCiBzcmMvY29udGV4dC9wb29s X3F1ZXJ5X2NvbnRleHQuYyAgICAgICAgICAgICAgfCAyOTUgKysrKystCiBzcmMvY29udGV4dC9w b29sX3Nlc3Npb25fY29udGV4dC5jICAgICAgICAgICAgfCAgMTkgKy0KIHNyYy9pbmNsdWRlL2Nv bnRleHQvcG9vbF9zZXNzaW9uX2NvbnRleHQuaCAgICB8ICAxOCArLQogc3JjL2luY2x1ZGUvcG9v bC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzICstCiBzcmMvaW5jbHVkZS9wb29s X2NvbmZpZy5oICAgICAgICAgICAgICAgICAgICAgfCAgMjQgKy0KIHNyYy9pbmNsdWRlL3V0aWxz L3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uaCB8IDE2NyArKysrCiBzcmMvbWFpbi9wZ3Bvb2xf bWFpbi5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgMjkgKy0KIHNyYy9wcm90b2NvbC9Db21t YW5kQ29tcGxldGUuYyAgICAgICAgICAgICAgICB8ICA1MyArCiBzcmMvcHJvdG9jb2wvY2hpbGQu YyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDggKwogc3JjL3Byb3RvY29sL3Bvb2xfcHJv dG9fbW9kdWxlcy5jICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvc2FtcGxlL3BncG9vbC5jb25m LnNhbXBsZS1zdHJlYW0gICAgICAgICAgfCAgNDUgKwogc3JjL3N0cmVhbWluZ19yZXBsaWNhdGlv bi9wb29sX3dvcmtlcl9jaGlsZC5jIHwgIDI0ICsKIHNyYy90ZXN0L3JlZ3Jlc3Npb24vbGlicy5z aCAgICAgICAgICAgICAgICAgICB8ICAgMiArCiAuLi4vdGVzdHMvMDQzLnRyYWNrX3RhYmxlX211 dGF0aW9uL3Rlc3Quc2ggICAgfCAzNTQgKysrKysrKwogLi4uLzA0NC50cmFja190YWJsZV9tdXRh dGlvbl93YXRjaGRvZy90ZXN0LnNoIHwgMTg0ICsrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgNCArCiBzcmMvdXRpbHMvcG9vbF90cmFja190YWJs ZV9tdXRhdGlvbi5jICAgICAgICAgfCA5MDIgKysrKysrKysrKysrKysrKysrCiAyMCBmaWxlcyBj aGFuZ2VkLCAyNDU2IGluc2VydGlvbnMoKyksIDM1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9pbmNsdWRlL3V0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uaAogY3Jl YXRlIG1vZGUgMTAwNzU1IHNyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNrX3RhYmxl X211dGF0aW9uL3Rlc3Quc2gKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzcmMvdGVzdC9yZWdyZXNzaW9u L3Rlc3RzLzA0NC50cmFja190YWJsZV9tdXRhdGlvbl93YXRjaGRvZy90ZXN0LnNoCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL3V0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uYwoKZGlmZiAt LWdpdCBhL2RvYy9zcmMvc2dtbC9sb2FkYmFsYW5jZS5zZ21sIGIvZG9jL3NyYy9zZ21sL2xvYWRi YWxhbmNlLnNnbWwKaW5kZXggOWUxZTdiMzliLi5kNGZiY2YxYTUgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9sb2FkYmFsYW5jZS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9sb2FkYmFsYW5jZS5z Z21sCkBAIC0xMTEwLDYgKzExMTAsMTggQEAgYXBwX25hbWVfcmVkaXJlY3RfcHJlZmVyZW5jZV9s aXN0ICZndDsgZGF0YWJhc2VfcmVkaXJlY3RfcHJlZmVyZW5jZV9saXN0ICZndDsgdXMKIAkJRGVw ZW5kZW50IGZ1bmN0aW9ucywgdHJpZ2dlcnMsIGFuZCB2aWV3cyBvbiB0aGUgdGFibGVzIGNhbiBi ZSBjb25maWd1cmVkCiAJCXVzaW5nIDx4cmVmIGxpbmtlbmQ9Imd1Yy1kbWwtYWRhcHRpdmUtb2Jq ZWN0LXJlbGF0aW9uc2hpcC1saXN0Ij4KICAgICAgPC9wYXJhPgorCisgICAgIDxwYXJhPgorCQlJ ZiB0aGlzIHBhcmFtZXRlciBpcyBzZXQgdG8gPHZhcm5hbWU+ZG1sX2FkYXB0aXZlX2dsb2JhbDwv dmFybmFtZT4sCisJCTxwcm9kdWN0bmFtZT5QZ3Bvb2wtSUk8Lz4gYmVoYXZlcyBsaWtlIDx2YXJu YW1lPmRtbF9hZGFwdGl2ZTwvdmFybmFtZT4KKwkJKHBlci10cmFuc2FjdGlvbiB3cml0ZSB0cmFj a2luZykgYW5kIGFkZGl0aW9uYWxseSB1c2VzIHNoYXJlZCBtZW1vcnkgdG8gdHJhY2sKKwkJcmVj ZW50bHkgd3JpdHRlbiB0YWJsZXMgYWNyb3NzIGFsbCBzZXNzaW9ucyBjbHVzdGVyLXdpZGUuIFdo ZW4gYSB0YWJsZSBpcworCQl3cml0dGVuIGluIGFueSBzZXNzaW9uLCBzdWJzZXF1ZW50IHJlYWRz IG9mIHRoYXQgdGFibGUgZnJvbSBhbnkgc2Vzc2lvbiBhcmUKKwkJcm91dGVkIHRvIHByaW1hcnkg dW50aWwgYSBUVEwgKGJhc2VkIG9uIG1lYXN1cmVkIHJlcGxpY2F0aW9uIGRlbGF5KSBleHBpcmVz LgorCQlUaGlzIHByZXZlbnRzIHN0YWxlIHJlYWRzIGFmdGVyIHdyaXRlcyBldmVuIGFjcm9zcyBk aWZmZXJlbnQgY29ubmVjdGlvbnMuCisJCVNlZSA8eHJlZiBsaW5rZW5kPSJydW50aW1lLWNvbmZp Zy10YWJsZS1tdXRhdGlvbi1tYXAiPiBmb3IgdGhlIHN1Yi1wYXJhbWV0ZXJzCisJCXRoYXQgY29u dHJvbCB0aGUgc2hhcmVkLW1lbW9yeSB0cmFja2luZyBiZWhhdmlvci4KKyAgICAgPC9wYXJhPgog ICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KIApAQCAtMTE5NSw0ICsxMjA3LDI4 MCBAQCBkbWxfYWRhcHRpdmVfb2JqZWN0X3JlbGF0aW9uc2hpcF9saXN0ID0gJ3RhYmxlXzE6dGFi bGVfMicKIAogICA8L3ZhcmlhYmxlbGlzdD4KICA8L3NlY3QyPgorCisgPHNlY3QyIGlkPSJydW50 aW1lLWNvbmZpZy10YWJsZS1tdXRhdGlvbi1tYXAiPgorICA8dGl0bGU+VGFibGUgTXV0YXRpb24g VHJhY2tpbmcgQ29uZmlndXJhdGlvbjwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBUaGVzZSBwYXJh bWV0ZXJzIGNvbmZpZ3VyZSB0aGUgdHJhY2sgdGFibGUgbXV0YXRpb24gZmVhdHVyZSwgd2hpY2gg aXMgYWN0aXZhdGVkIGJ5IHNldHRpbmcKKyAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1kaXNhYmxlLWxv YWQtYmFsYW5jZS1vbi13cml0ZSI+IHRvIDxsaXRlcmFsPmRtbF9hZGFwdGl2ZV9nbG9iYWw8L2xp dGVyYWw+LgorICAgVGhlIGZlYXR1cmUgdHJhY2tzIHJlY2VudGx5IHdyaXR0ZW4gdGFibGVzIHRv IHByZXZlbnQgc3RhbGUgcmVhZHMgZnJvbSByZXBsaWNhIG5vZGVzIGR1cmluZworICAgcmVwbGlj YXRpb24gbGFnLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBXaGVuIGEgdGFibGUgaXMgbW9k aWZpZWQgKElOU0VSVC9VUERBVEUvREVMRVRFKSwgaXQgaXMgbWFya2VkIGFzICJzdGFsZSIgZm9y IGEgVFRMIHBlcmlvZAorICAgKDxsaXRlcmFsPnJlcGxpY2F0aW9uX2RlbGF5ICogdHJhY2tfdGFi bGVfbXV0YXRpb25fdHRsX2ZhY3RvcjwvbGl0ZXJhbD4pLiBBbnkgU0VMRUNUIHF1ZXJpZXMgb24g c3RhbGUgdGFibGVzIGFyZSByb3V0ZWQKKyAgIHRvIHRoZSBwcmltYXJ5IG5vZGUgaW5zdGVhZCBv ZiByZXBsaWNhcywgZW5zdXJpbmcgcmVhZC1hZnRlci13cml0ZSBjb25zaXN0ZW5jeS4KKyAgPC9w YXJhPgorCisgIDxwYXJhPgorICAgVGhpcyBmZWF0dXJlIHJlcXVpcmVzIHRpbWUtYmFzZWQgcmVw bGljYXRpb24gZGVsYXkgbW9uaXRvcmluZy4gVGhpcyBjYW4gYmUgcHJvdmlkZWQgYnkgZWl0aGVy CisgICA8eHJlZiBsaW5rZW5kPSJndWMtcmVwbGljYXRpb24tZGVsYXktc291cmNlLWNtZCI+IChl eHRlcm5hbCBjb21tYW5kIG1vZGUpIG9yIGJ5IHNldHRpbmcKKyAgIDx4cmVmIGxpbmtlbmQ9Imd1 Yy1kZWxheS10aHJlc2hvbGQtYnktdGltZSI+ICh3aGljaCB1c2VzIDxsaXRlcmFsPnBnX3N0YXRf cmVwbGljYXRpb24ucmVwbGF5X2xhZzwvbGl0ZXJhbD4KKyAgIGZyb20gUG9zdGdyZVNRTCAxMCsp LiBJZiBuZWl0aGVyIGlzIGNvbmZpZ3VyZWQsIHRoZSBUVEwgcmVtYWlucyBhdCBpdHMgZGVmYXVs dCBtaW5pbXVtIHZhbHVlCisgICAoMTAwIG1pbGxpc2Vjb25kcykgYW5kIGlzIG5ldmVyIHVwZGF0 ZWQgYmFzZWQgb24gYWN0dWFsIHJlcGxpY2F0aW9uIGRlbGF5LCB3aGljaCBtYXkgcmVzdWx0Cisg ICBpbiBzdWJvcHRpbWFsIHJvdXRpbmcgZGVjaXNpb25zLgorICA8L3BhcmE+CisKKyAgPHdhcm5p bmc+CisgICA8cGFyYT4KKyAgICBFbmFibGluZyA8bGl0ZXJhbD5kbWxfYWRhcHRpdmVfZ2xvYmFs PC9saXRlcmFsPiBpbmNyZWFzZXMgc2hhcmVkIG1lbW9yeSBjb25zdW1wdGlvbi4gV2l0aCBkZWZh dWx0IHNldHRpbmdzLAorICAgIHRoZSBmZWF0dXJlIHJlcXVpcmVzIGFwcHJveGltYXRlbHkgODAg S0Igb2Ygc2hhcmVkIG1lbW9yeSBmb3IgdGFibGUgdHJhY2tpbmc6CisgICAgPGxpdGVyYWw+dHJh Y2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZSAqIDQwIGJ5dGVzPC9saXRlcmFsPiAoZGVmYXVs dDogMjA0OCAqIDQwID0gfjgwIEtCKS4KKyAgIDwvcGFyYT4KKyAgPC93YXJuaW5nPgorCisgIDx2 YXJpYWJsZWxpc3Q+CisKKyAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy10cmFjay10YWJsZS1tdXRh dGlvbi10dGwtZmFjdG9yIiB4cmVmbGFiZWw9InRyYWNrX3RhYmxlX211dGF0aW9uX3R0bF9mYWN0 b3IiPgorICAgIDx0ZXJtPjx2YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0aW9uX3R0bF9mYWN0b3I8 L3Zhcm5hbWU+ICg8dHlwZT5mbG9hdGluZyBwb2ludDwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+ CisgICAgICA8cHJpbWFyeT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9y PC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRl eHRlcm0+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBN dWx0aXBsaWVyIGZvciBjYWxjdWxhdGluZyB0aGUgVFRMOiA8bGl0ZXJhbD5UVEwgPSByZXBsaWNh dGlvbl9kZWxheSAqIHRyYWNrX3RhYmxlX211dGF0aW9uX3R0bF9mYWN0b3I8L2xpdGVyYWw+Lgor ICAgICAgSGlnaGVyIHZhbHVlcyBwcm92aWRlIG1vcmUgc2FmZXR5IG1hcmdpbiBidXQgbWF5IHJl ZHVjZSByZWFkIHJlcGxpY2EgdXRpbGl6YXRpb24uCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+ CisgICAgICBWYWxpZCByYW5nZTogMS4wLTEwMC4wLiBEZWZhdWx0IGlzIDxsaXRlcmFsPjUuMDwv bGl0ZXJhbD4uCisgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgY2hhbmdlZCBieSByZWxvYWRp bmcgdGhlIDxwcm9kdWN0bmFtZT5QZ3Bvb2wtSUk8Lz4gY29uZmlndXJhdGlvbnMuCisgICAgIDwv cGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0 ZW50cnkgaWQ9Imd1Yy10cmFjay10YWJsZS1tdXRhdGlvbi1tYXgtc3RhbGVuZXNzIiB4cmVmbGFi ZWw9InRyYWNrX3RhYmxlX211dGF0aW9uX21heF9zdGFsZW5lc3MiPgorICAgIDx0ZXJtPjx2YXJu YW1lPnRyYWNrX3RhYmxlX211dGF0aW9uX21heF9zdGFsZW5lc3M8L3Zhcm5hbWU+ICg8dHlwZT5p bnRlZ2VyPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1l PnRyYWNrX3RhYmxlX211dGF0aW9uX21heF9zdGFsZW5lc3M8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRp b24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+Cisg ICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIE1heGltdW0gZHVyYXRpb24gaW4gbWls bGlzZWNvbmRzIHRoYXQgYSBzaW5nbGUgdGFibGUgZW50cnkgY2FuIGNvbnRpbnVvdXNseSBmb3Jj ZSBxdWVyaWVzIHRvIHByaW1hcnksCisgICAgICBtZWFzdXJlZCBmcm9tIHdoZW4gdGhlIHRhYmxl IHdhcyBmaXJzdCBtYXJrZWQgc3RhbGUuIFdoZW4gdGhpcyBjYXAgaXMgcmVhY2hlZCwgdGhlIGVu dHJ5IGlzIGV4cGlyZWQKKyAgICAgIHJlZ2FyZGxlc3Mgb2YgcmVjZW50IHdyaXRlcy4gSWYgdGhl IHRhYmxlIGlzIHdyaXR0ZW4gdG8gYWdhaW4gYWZ0ZXIgZXhwaXJ5LCBhIGZyZXNoIHRyYWNraW5n IGVudHJ5CisgICAgICBpcyBjcmVhdGVkLgorICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorICAg ICAgVGhpcyBwYXJhbWV0ZXIgYm91bmRzIHRoZSBjcm9zcy1zZXNzaW9uIGltcGFjdCBvZiB0YWJs ZSBtdXRhdGlvbiB0cmFja2luZy4gRXZlbiBpZiBhIHRhYmxlIGlzIHdyaXR0ZW4KKyAgICAgIHRv IGluIGEgdGlnaHQgbG9vcCwgaXRzIGVmZmVjdCBvbiBvdGhlciBzZXNzaW9ucycgbG9hZCBiYWxh bmNpbmcgaXMgbGltaXRlZCB0byB0aGlzIGR1cmF0aW9uLiBGb3IKKyAgICAgIGxlZ2l0aW1hdGVs eSBidXN5IHRhYmxlcywgdGhlIGdhcCBiZXR3ZWVuIGZvcmNlZCBleHBpcnkgYW5kIHRoZSBuZXh0 IHdyaXRlIHJlLW1hcmtpbmcgdGhlIHRhYmxlIGlzCisgICAgICBuZWdsaWdpYmxlICh0eXBpY2Fs bHkgbWlsbGlzZWNvbmRzKS4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFNldCB0 byAwIHRvIGRpc2FibGUgdGhlIGNhcCAobm90IHJlY29tbWVuZGVkIGZvciBwcm9kdWN0aW9uKS4K KyAgICAgIFZhbGlkIHJhbmdlOiAwLTM2MDAwMDAgbXMuIERlZmF1bHQgaXMgPGxpdGVyYWw+NjAw MDA8L2xpdGVyYWw+ICg2MCBzZWNvbmRzKS4KKyAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBj aGFuZ2VkIGJ5IHJlbG9hZGluZyB0aGUgPHByb2R1Y3RuYW1lPlBncG9vbC1JSTwvPiBjb25maWd1 cmF0aW9ucy4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRy eT4KKworICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLXRyYWNrLXRhYmxlLW11dGF0aW9uLWNvbGQt c3RhcnQtZHVyYXRpb24iIHhyZWZsYWJlbD0idHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFy dF9kdXJhdGlvbiI+CisgICAgPHRlcm0+PHZhcm5hbWU+dHJhY2tfdGFibGVfbXV0YXRpb25fY29s ZF9zdGFydF9kdXJhdGlvbjwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICA8 aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+dHJhY2tfdGFibGVfbXV0YXRpb25f Y29sZF9zdGFydF9kdXJhdGlvbjwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3By aW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+Cisg ICAgIDxwYXJhPgorICAgICAgRHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzIHRvIHJvdXRlIGFsbCBx dWVyaWVzIHRvIHByaW1hcnkgYWZ0ZXIgYSBjaGlsZCBwcm9jZXNzIHN0YXJ0cy4KKyAgICAgIFRo aXMgcHJldmVudHMgc3RhbGUgcmVhZHMgd2hlbiBhIG5ldyBjb25uZWN0aW9uIGlzIGVzdGFibGlz aGVkIGJlZm9yZSB0aGUgdHJhY2sgdGFibGUgbXV0YXRpb24KKyAgICAgIGlzIHBvcHVsYXRlZCB3 aXRoIHJlY2VudCB3cml0ZSBoaXN0b3J5LgorICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorICAg ICAgV2hlbiB3YXRjaGRvZyBpcyBlbmFibGVkIGFuZCB0aGUgbG9jYWwgbm9kZSBiZWNvbWVzIHRo ZSBsZWFkZXIsIFBncG9vbC1JSSBhbHNvIHRyaWdnZXJzIGEKKyAgICAgIGdsb2JhbCBjb2xkIHN0 YXJ0IGZvciB0aGlzIGR1cmF0aW9uIHRvIGF2b2lkIHN0YWxlIHJlYWRzIGFmdGVyIGxlYWRlcnNo aXAgY2hhbmdlcy4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFZhbGlkIHJhbmdl OiAwLTYwMDAwIG1zLiBEZWZhdWx0IGlzIDxsaXRlcmFsPjIwMDA8L2xpdGVyYWw+ICgyIHNlY29u ZHMpLgorICAgICAgU2V0IHRvIDAgdG8gZGlzYWJsZSBjb2xkIHN0YXJ0IGJlaGF2aW9yLgorICAg ICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGNoYW5nZWQgYnkgcmVsb2FkaW5nIHRoZSA8cHJvZHVj dG5hbWU+UGdwb29sLUlJPC8+IGNvbmZpZ3VyYXRpb25zLgorICAgICA8L3BhcmE+CisgICAgPC9s aXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5IGlkPSJndWMt dHJhY2stdGFibGUtbXV0YXRpb24tdGFibGUtYnVja2V0cyIgeHJlZmxhYmVsPSJ0cmFja190YWJs ZV9tdXRhdGlvbl90YWJsZV9idWNrZXRzIj4KKyAgICA8dGVybT48dmFybmFtZT50cmFja190YWJs ZV9tdXRhdGlvbl90YWJsZV9idWNrZXRzPC92YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4p CisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT50cmFja190YWJsZV9t dXRhdGlvbl90YWJsZV9idWNrZXRzPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwv cHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4K KyAgICAgPHBhcmE+CisgICAgICBOdW1iZXIgb2YgaGFzaCBidWNrZXRzIGZvciB0aGUgdHJhY2sg dGFibGUgbXV0YXRpb24gaGFzaCB0YWJsZS4KKyAgICAgIEhpZ2hlciB2YWx1ZXMgcmVkdWNlIGhh c2ggY29sbGlzaW9ucyBhbmQgaW1wcm92ZSBsb29rdXAgcGVyZm9ybWFuY2UuCisgICAgIDwvcGFy YT4KKyAgICAgPHBhcmE+CisgICAgICBWYWxpZCByYW5nZTogNjQtNjU1MzYuIERlZmF1bHQgaXMg PGxpdGVyYWw+MTAyNDwvbGl0ZXJhbD4uCisgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gb25seSBi ZSBzZXQgYXQgc2VydmVyIHN0YXJ0LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAg IDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtdHJhY2stdGFibGUt bXV0YXRpb24tdGFibGUtc2l6ZSIgeHJlZmxhYmVsPSJ0cmFja190YWJsZV9tdXRhdGlvbl90YWJs ZV9zaXplIj4KKyAgICA8dGVybT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9z aXplPC92YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+Cisg ICAgICA8cHJpbWFyeT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9zaXplPC92 YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRl cm0+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBNYXhp bXVtIG51bWJlciBvZiB0YWJsZXMgdGhhdCBjYW4gYmUgdHJhY2tlZCBzaW11bHRhbmVvdXNseSBp biB0aGUgdHJhY2sgdGFibGUgbXV0YXRpb24uCisgICAgICBXaGVuIGZ1bGwsIG9sZGVzdCBlbnRy aWVzIGFyZSBldmljdGVkIHVzaW5nIGEgc2ltcGxlIGV2aWN0aW9uIHN0cmF0ZWd5LgorICAgICA8 L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAgVmFsaWQgcmFuZ2U6IDEyOC0xMzEwNzIuIERlZmF1 bHQgaXMgPGxpdGVyYWw+MjA0ODwvbGl0ZXJhbD4uCisgICAgICBNZW1vcnkgdXNhZ2U6IGFwcHJv eGltYXRlbHkgNDAgYnl0ZXMgcGVyIGVudHJ5LgorICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIG9u bHkgYmUgc2V0IGF0IHNlcnZlciBzdGFydC4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+ CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICA8L3ZhcmlhYmxlbGlzdD4KKworICA8c2VjdDMgaWQ9 InJ1bnRpbWUtY29uZmlnLXRyYWNrLXRhYmxlLW11dGF0aW9uLWV4YW1wbGUiPgorICAgPHRpdGxl PlRyYWNrIFRhYmxlIE11dGF0aW9uIENvbmZpZ3VyYXRpb24gRXhhbXBsZTwvdGl0bGU+CisgICA8 cGFyYT4KKyAgICBUbyBlbmFibGUgdHJhY2sgdGFibGUgbXV0YXRpb24gd2l0aCByZXBsaWNhdGlv biBkZWxheSBtb25pdG9yaW5nOgorICAgPC9wYXJhPgorICAgPHByb2dyYW1saXN0aW5nPgorIyBF bmFibGUgZG1sX2FkYXB0aXZlX2dsb2JhbCBtb2RlIChpbmNsdWRlcyB0cmFjayB0YWJsZSBtdXRh dGlvbikKK2Rpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID0gJ2RtbF9hZGFwdGl2ZV9nbG9i YWwnCit0cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yID0gNS4wCit0cmFja190YWJsZV9t dXRhdGlvbl9tYXhfc3RhbGVuZXNzID0gNjAwMDAKK3RyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRf c3RhcnRfZHVyYXRpb24gPSAyMDAwCisKKyMgT3B0aW9uIEE6IFVzZSBleHRlcm5hbCBjb21tYW5k IGZvciByZXBsaWNhdGlvbiBkZWxheQorcmVwbGljYXRpb25fZGVsYXlfc291cmNlX2NtZCA9ICcv cGF0aC90by9nZXQtcmVwbGljYXRpb24tZGVsYXkuc2gnCityZXBsaWNhdGlvbl9kZWxheV9zb3Vy Y2VfdGltZW91dCA9IDEwCisKKyMgT3B0aW9uIEI6IFVzZSBwZ19zdGF0X3JlcGxpY2F0aW9uIHJl cGxheV9sYWcgKFBHIDEwKykKKyMgZGVsYXlfdGhyZXNob2xkX2J5X3RpbWUgPSAxMDAwCisKKyMg QWRqdXN0IHRhYmxlIG1hcCBzaXplIGJhc2VkIG9uIHdvcmtsb2FkCit0cmFja190YWJsZV9tdXRh dGlvbl90YWJsZV9zaXplID0gNDA5NgorICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgIDxwYXJhPgor ICAgIFNoYXJlZCBtZW1vcnkgcmVxdWlyZWQgZm9yIGFib3ZlIGNvbmZpZ3VyYXRpb246IGFwcHJv eGltYXRlbHkgMTYwIEtCIGZvciB0aGUgdGFibGUgbWFwLgorICAgIERlZmF1bHQgY29uZmlndXJh dGlvbiAoMjA0OCB0YWJsZXMpIHJlcXVpcmVzIGFwcHJveGltYXRlbHkgODAgS0IuCisgICA8L3Bh cmE+CisgIDwvc2VjdDM+CisKKyAgPHNlY3QzIGlkPSJydW50aW1lLWNvbmZpZy10cmFjay10YWJs ZS1tdXRhdGlvbi1saW1pdGF0aW9ucyI+CisgICA8dGl0bGU+TGltaXRhdGlvbnM8L3RpdGxlPgor ICAgPHBhcmE+CisgICAgVGhlIHRyYWNrIHRhYmxlIG11dGF0aW9uIGZlYXR1cmUgaGFzIHRoZSBm b2xsb3dpbmcgbGltaXRhdGlvbnM6CisgICA8L3BhcmE+CisgICA8aXRlbWl6ZWRsaXN0PgorICAg IDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD5QUkVQQVJFPC9saXRlcmFs PiBzdGF0ZW1lbnRzIGFyZSBub3QgdHJhY2tlZC4gV2hlbiBhIHByZXBhcmVkIHN0YXRlbWVudAor ICAgICAgY29udGFpbmluZyBkYXRhIG1vZGlmaWNhdGlvbiBpcyBleGVjdXRlZCwgdGhlIHRhYmxl IG11dGF0aW9uIGlzIG5vdCByZWNvcmRlZC4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+ CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIEEgbWF4aW11bSBvZiAxMjggdGFi bGVzIGNhbiBiZSB0cmFja2VkIHBlciBTRUxFQ1QgcXVlcnkgZm9yIHN0YWxlbmVzcyBjaGVja2lu Zy4KKyAgICAgIFRoaXMgbGltaXQgaXMgc2hhcmVkIHdpdGggdGhlIHF1ZXJ5IGNhY2hlIHN1YnN5 c3RlbQorICAgICAgKDxsaXRlcmFsPlBPT0xfTUFYX1NFTEVDVF9PSURTPC9saXRlcmFsPikuCisg ICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC9pdGVtaXplZGxpc3Q+CisgICA8cGFy YT4KKyAgICBJZiB5b3VyIGFwcGxpY2F0aW9uIHVzZXMgcHJlcGFyZWQgc3RhdGVtZW50cyBhbmQg cmVxdWlyZXMgcmVhZC1hZnRlci13cml0ZSBjb25zaXN0ZW5jeSwKKyAgICBjb25zaWRlciB1c2lu ZyBleHBsaWNpdCB0cmFuc2FjdGlvbiByb3V0aW5nIG9yIHRoZSA8bGl0ZXJhbD4vKk5PIExPQUQg QkFMQU5DRSovPC9saXRlcmFsPgorICAgIGNvbW1lbnQgZGlyZWN0aXZlIGZvciBhZmZlY3RlZCBx dWVyaWVzLgorICAgPC9wYXJhPgorICAgPHBhcmE+CisgICAgVGhlIGZvbGxvd2luZyBzdGF0ZW1l bnQgdHlwZXMgPGVtcGhhc2lzPmFyZTwvZW1waGFzaXM+IHRyYWNrZWQgYW5kIHdpbGwgbWFyayB0 YWJsZXMgYXMgc3RhbGU6CisgICA8L3BhcmE+CisgICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0 aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD5JTlNFUlQ8L2xpdGVyYWw+LCA8bGl0 ZXJhbD5VUERBVEU8L2xpdGVyYWw+LCA8bGl0ZXJhbD5ERUxFVEU8L2xpdGVyYWw+CisgICAgICBz dGF0ZW1lbnRzIChpbmNsdWRpbmcgdGhvc2Ugd2l0aCA8bGl0ZXJhbD5SRVRVUk5JTkc8L2xpdGVy YWw+IGNsYXVzZXMpLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0 ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGxpdGVyYWw+VFJVTkNBVEU8L2xpdGVyYWw+IHN0YXRl bWVudHMgKGluY2x1ZGluZyBtdWx0aXBsZSB0YWJsZXMpLgorICAgICA8L3BhcmE+CisgICAgPC9s aXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGxpdGVyYWw+TUVS R0U8L2xpdGVyYWw+IHN0YXRlbWVudHMgKFBvc3RncmVTUUwgMTUrKS4KKyAgICAgPC9wYXJhPgor ICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRl cmFsPldJVEg8L2xpdGVyYWw+IGNsYXVzZXMgY29udGFpbmluZyBkYXRhIG1vZGlmaWNhdGlvbnMg KENvbW1vbiBUYWJsZSBFeHByZXNzaW9ucworICAgICAgd2l0aCA8bGl0ZXJhbD5JTlNFUlQ8L2xp dGVyYWw+LCA8bGl0ZXJhbD5VUERBVEU8L2xpdGVyYWw+LCBvciA8bGl0ZXJhbD5ERUxFVEU8L2xp dGVyYWw+KS4KKyAgICAgIEZvciBleGFtcGxlLCA8bGl0ZXJhbD5XSVRIIGRlbGV0ZWQgQVMgKERF TEVURSBGUk9NIHQxIFJFVFVSTklORyAqKSBTRUxFQ1QgKiBGUk9NIGRlbGV0ZWQ8L2xpdGVyYWw+ CisgICAgICB3aWxsIHByb3Blcmx5IG1hcmsgdGFibGUgPGxpdGVyYWw+dDE8L2xpdGVyYWw+IGFz IHN0YWxlLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvaXRlbWl6ZWRsaXN0 PgorICAgPHBhcmE+CisgICAgPGVtcGhhc2lzPlRyYW5zYWN0aW9uIFJvbGxiYWNrIEJlaGF2aW9y OjwvZW1waGFzaXM+IFdpdGhpbiBleHBsaWNpdCB0cmFuc2FjdGlvbnMsIHRhYmxlcworICAgIGFy ZSBvbmx5IG1hcmtlZCBhcyBzdGFsZSBpbiBzaGFyZWQgbWVtb3J5IHdoZW4gdGhlIHRyYW5zYWN0 aW9uIGlzIGNvbW1pdHRlZC4gSWYgdGhlCisgICAgdHJhbnNhY3Rpb24gaXMgcm9sbGVkIGJhY2ss IG5vIHRhYmxlcyBhcmUgbWFya2VkLCBzaW5jZSBubyBhY3R1YWwgZGF0YSBtb2RpZmljYXRpb24K KyAgICBvY2N1cnJlZCBvbiByZXBsaWNhcy4gVGhpcyBwcmV2ZW50cyByb2xsZWQtYmFjayB0cmFu c2FjdGlvbnMgZnJvbSB1bm5lY2Vzc2FyaWx5CisgICAgZGlzYWJsaW5nIGxvYWQgYmFsYW5jaW5n LiBGb3IgYXV0b2NvbW1pdCBzdGF0ZW1lbnRzIChvdXRzaWRlIGV4cGxpY2l0IHRyYW5zYWN0aW9u cyksCisgICAgdGFibGVzIGFyZSBtYXJrZWQgaW1tZWRpYXRlbHkgdXBvbiBjb21tYW5kIGNvbXBs ZXRpb24uCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIDxlbXBoYXNpcz5Dcm9zcy1TZXNz aW9uIEltcGFjdCBhbmQgU2FmZXR5IEJvdW5kczo8L2VtcGhhc2lzPgorICAgIFVubGlrZSA8bGl0 ZXJhbD5kbWxfYWRhcHRpdmU8L2xpdGVyYWw+ICh3aGljaCBvbmx5IGFmZmVjdHMgdGhlIHNlc3Np b24gdGhhdCBpc3N1ZWQgdGhlIHdyaXRlKSwKKyAgICA8bGl0ZXJhbD5kbWxfYWRhcHRpdmVfZ2xv YmFsPC9saXRlcmFsPiBhZmZlY3RzIGFsbCBzZXNzaW9ucyByZWFkaW5nIHRoZSBzYW1lIHRhYmxl IGluIHRoZSBzYW1lIGRhdGFiYXNlLgorICAgIFRoZSBmb2xsb3dpbmcgc2FmZXR5IG1lY2hhbmlz bXMgYm91bmQgdGhpcyBjcm9zcy1zZXNzaW9uIGltcGFjdDoKKyAgIDwvcGFyYT4KKyAgIDxpdGVt aXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxlbXBoYXNpcz5N YXhpbXVtIHN0YWxlbmVzcyBjYXA6PC9lbXBoYXNpcz4gVGhlIDx4cmVmIGxpbmtlbmQ9Imd1Yy10 cmFjay10YWJsZS1tdXRhdGlvbi1tYXgtc3RhbGVuZXNzIj4KKyAgICAgIHBhcmFtZXRlciAoZGVm YXVsdDogNjAgc2Vjb25kcykgbGltaXRzIGhvdyBsb25nIGFueSBzaW5nbGUgdGFibGUgZW50cnkg Y2FuIGNvbnRpbnVvdXNseSBmb3JjZSBwcmltYXJ5CisgICAgICByb3V0aW5nLiBFdmVuIHVuZGVy IHN1c3RhaW5lZCB3cml0ZXMsIHRoZSBlbnRyeSBleHBpcmVzIGFmdGVyIHRoaXMgcGVyaW9kIGFu ZCBpcyBvbmx5IHJlbmV3ZWQgYnkKKyAgICAgIHN1YnNlcXVlbnQgY29tbWl0dGVkIHdyaXRlcy4K KyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFy YT4KKyAgICAgIDxlbXBoYXNpcz5EYXRhYmFzZSBpc29sYXRpb246PC9lbXBoYXNpcz4gVGFibGUg c3RhbGVuZXNzIHRyYWNraW5nIGlzIHNjb3BlZCBieSBkYXRhYmFzZSBPSUQuIFdyaXRlcworICAg ICAgaW4gb25lIGRhdGFiYXNlIG5ldmVyIGFmZmVjdCBsb2FkIGJhbGFuY2luZyBkZWNpc2lvbnMg Zm9yIHNlc3Npb25zIGNvbm5lY3RlZCB0byBhIGRpZmZlcmVudCBkYXRhYmFzZS4KKyAgICAgIElu IG11bHRpLXRlbmFudCBkZXBsb3ltZW50cyB3aGVyZSB0ZW5hbnRzIHVzZSBzZXBhcmF0ZSBkYXRh YmFzZXMsIG9uZSB0ZW5hbnQncyB3cml0ZSBhY3Rpdml0eSBjYW5ub3QKKyAgICAgIGluZmx1ZW5j ZSBhbm90aGVyIHRlbmFudCdzIHF1ZXJ5IHJvdXRpbmcuCisgICAgIDwvcGFyYT4KKyAgICA8L2xp c3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8ZW1waGFzaXM+Q29t bWl0dGVkIHdyaXRlcyBvbmx5OjwvZW1waGFzaXM+IE9ubHkgY29tbWl0dGVkIHRyYW5zYWN0aW9u cyBtYXJrIHRhYmxlcyBhcyBzdGFsZS4KKyAgICAgIFJvbGxlZC1iYWNrIHRyYW5zYWN0aW9ucyBo YXZlIG5vIGVmZmVjdCBvbiB0aGUgc2hhcmVkIHRyYWNraW5nIHN0YXRlLgorICAgICA8L3BhcmE+ CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGVt cGhhc2lzPkJvdW5kZWQgdGFibGUgbWFwIHNpemU6PC9lbXBoYXNpcz4gVGhlIHNoYXJlZCBtZW1v cnkgdGFibGUgbWFwIGhhcyBhIGZpeGVkIG1heGltdW0gc2l6ZQorICAgICAgKDx4cmVmIGxpbmtl bmQ9Imd1Yy10cmFjay10YWJsZS1tdXRhdGlvbi10YWJsZS1zaXplIj4pLiBBdCBtb3N0IHRoaXMg bWFueSB0YWJsZXMgY2FuIGJlIG1hcmtlZCBzdGFsZQorICAgICAgc2ltdWx0YW5lb3VzbHksIHBy b3ZpZGluZyBhIG5hdHVyYWwgY2VpbGluZyBvbiB0aGUgZmVhdHVyZSdzIGltcGFjdC4KKyAgICAg PC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L2l0ZW1pemVkbGlzdD4KKyAgPC9zZWN0Mz4K KworIDwvc2VjdDI+CisKIDwvc2VjdDE+CmRpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9z cmMvTWFrZWZpbGUuYW0KaW5kZXggNDY3OGFiNTMwLi4zOTU4OGFmNTggMTAwNjQ0Ci0tLSBhL3Ny Yy9NYWtlZmlsZS5hbQorKysgYi9zcmMvTWFrZWZpbGUuYW0KQEAgLTM1LDYgKzM1LDcgQEAgcGdw b29sX1NPVVJDRVMgPSBtYWluL21haW4uYyBcCiAJcmV3cml0ZS9wb29sX3RpbWVzdGFtcC5jIFwK IAlyZXdyaXRlL3Bvb2xfbG9iai5jIFwKIAl1dGlscy9wb29sX3NlbGVjdF93YWxrZXIuYyBcCisJ dXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5jIFwKIAl1dGlscy9zdHJsY3B5LmMgXAog CXV0aWxzL3BzcHJpbnRmLmMgXAogCXV0aWxzL3Bvb2xfcGFyYW1zLmMgXApkaWZmIC0tZ2l0IGEv c3JjL2NvbmZpZy9wb29sX2NvbmZpZ192YXJpYWJsZXMuYyBiL3NyYy9jb25maWcvcG9vbF9jb25m aWdfdmFyaWFibGVzLmMKaW5kZXggYjc3NWIyMTA2Li4zMDM5ZTMyZjAgMTAwNjQ0Ci0tLSBhL3Ny Yy9jb25maWcvcG9vbF9jb25maWdfdmFyaWFibGVzLmMKKysrIGIvc3JjL2NvbmZpZy9wb29sX2Nv bmZpZ192YXJpYWJsZXMuYwpAQCAtMjkwLDYgKzI5MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg Y29uZmlnX2VudW1fZW50cnkgZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGVfb3B0aW9uc1td ID0KIAl7InRyYW5zX3RyYW5zYWN0aW9uIiwgRExCT1dfVFJBTlNfVFJBTlNBQ1RJT04sIGZhbHNl fSwKIAl7ImFsd2F5cyIsIERMQk9XX0FMV0FZUywgZmFsc2V9LAogCXsiZG1sX2FkYXB0aXZlIiwg RExCT1dfRE1MX0FEQVBUSVZFLCBmYWxzZX0sCisJeyJkbWxfYWRhcHRpdmVfZ2xvYmFsIiwgRExC T1dfRE1MX0FEQVBUSVZFX0dMT0JBTCwgZmFsc2V9LAogCXtOVUxMLCAwLCBmYWxzZX0KIH07CiAK QEAgLTE3NzcsNiArMTc3OCwxOSBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ19pbnRfYXJyYXkgQ29u ZmlndXJlTmFtZXNJbnRBcnJheVtdID0KIAogc3RhdGljIHN0cnVjdCBjb25maWdfZG91YmxlIENv bmZpZ3VyZU5hbWVzRG91YmxlW10gPQogeworCXsKKwkJeyJ0cmFja190YWJsZV9tdXRhdGlvbl90 dGxfZmFjdG9yIiwKKwkJCUNGR0NYVF9SRUxPQUQsIExPQURfQkFMQU5DRV9DT05GSUcsCisJCQki VFRMIG11bHRpcGxpZXIgZm9yIHRyYWNrIHRhYmxlIG11dGF0aW9uICIKKwkJCSIoVFRMID0gcmVw bGljYXRpb25fZGVsYXkgKiBmYWN0b3IpIiwKKwkJCUNPTkZJR19WQVJfVFlQRV9ET1VCTEUsIGZh bHNlLCAwCisJCX0sCisJCSZnX3Bvb2xfY29uZmlnLnRyYWNrX3RhYmxlX211dGF0aW9uX3R0bF9m YWN0b3IsCisJCTUuMCwJCQkJCS8qIGJvb3QgdmFsdWU6IDV4IHJlcGxpY2F0aW9uIGRlbGF5ICov CisJCTEuMCwgMTAwLjAsCQkJCS8qIG1pbiwgbWF4ICovCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9 LAorCiAJLyogRW5kLW9mLWxpc3QgbWFya2VyICovCiAJRU1QVFlfQ09ORklHX0RPVUJMRQogfTsK QEAgLTIzOTcsNiArMjQxMSw1NyBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ19pbnQgQ29uZmlndXJl TmFtZXNJbnRbXSA9CiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9LAogCisJeworCQl7InRyYWNrX3Rh YmxlX211dGF0aW9uX21heF9zdGFsZW5lc3MiLAorCQkJQ0ZHQ1hUX1JFTE9BRCwgTE9BRF9CQUxB TkNFX0NPTkZJRywKKwkJCSJNYXhpbXVtIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyB0aGF0IGEg IgorCQkJInRhYmxlIGNhbiBiZSBtYXJrZWQgc3RhbGUgZnJvbSBpdHMgZmlyc3QgIgorCQkJIndy aXRlLiAwIGRpc2FibGVzIHRoZSBjYXAuIiwKKwkJCUNPTkZJR19WQVJfVFlQRV9JTlQsIGZhbHNl LCBHVUNfVU5JVF9NUworCQl9LAorCQkmZ19wb29sX2NvbmZpZy50cmFja190YWJsZV9tdXRhdGlv bl9tYXhfc3RhbGVuZXNzLAorCQk2MDAwMCwJCQkJCS8qIDYwIHNlY29uZHMgKi8KKwkJMCwgMzYw MDAwMCwJCQkJLyogMCB0byAxIGhvdXIgKi8KKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKKwl7 CisJCXsidHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9kdXJhdGlvbiIsCisJCQlDRkdD WFRfUkVMT0FELCBMT0FEX0JBTEFOQ0VfQ09ORklHLAorCQkJIkR1cmF0aW9uIGluIG1pbGxpc2Vj b25kcyB0byBmb3JjZSBxdWVyaWVzICIKKwkJCSJ0byBwcmltYXJ5IGFmdGVyIGNoaWxkIHByb2Nl c3Mgc3RhcnRzLiIsCisJCQlDT05GSUdfVkFSX1RZUEVfSU5ULCBmYWxzZSwgR1VDX1VOSVRfTVMK KwkJfSwKKwkJJmdfcG9vbF9jb25maWcudHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9k dXJhdGlvbiwKKwkJMjAwMCwJCQkJCS8qIDIgc2Vjb25kcyAqLworCQkwLCA2MDAwMCwJCQkJLyog MCB0byA2MCBzZWNvbmRzICovCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCisJeworCQl7InRy YWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHMiLAorCQkJQ0ZHQ1hUX0lOSVQsIExPQURf QkFMQU5DRV9DT05GSUcsCisJCQkiTnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgdHJhY2sgdGFi bGUgbXV0YXRpb24uIiwKKwkJCUNPTkZJR19WQVJfVFlQRV9JTlQsIGZhbHNlLCAwCisJCX0sCisJ CSZnX3Bvb2xfY29uZmlnLnRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHMsCisJCTEw MjQsCisJCTY0LCA2NTUzNiwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKKwl7CisJCXsidHJh Y2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZSIsCisJCQlDRkdDWFRfSU5JVCwgTE9BRF9CQUxB TkNFX0NPTkZJRywKKwkJCSJNYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGluIHRyYWNrIHRhYmxl IG11dGF0aW9uLiIsCisJCQlDT05GSUdfVkFSX1RZUEVfSU5ULCBmYWxzZSwgMAorCQl9LAorCQkm Z19wb29sX2NvbmZpZy50cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9zaXplLAorCQkyMDQ4LAor CQkxMjgsIDEzMTA3MiwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKIAkvKiBFbmQtb2YtbGlz dCBtYXJrZXIgKi8KIAlFTVBUWV9DT05GSUdfSU5UCiB9OwpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRl eHQvcG9vbF9xdWVyeV9jb250ZXh0LmMgYi9zcmMvY29udGV4dC9wb29sX3F1ZXJ5X2NvbnRleHQu YwppbmRleCA3M2JjNjQzMzguLmE3NzU2ZWM4YiAxMDA2NDQKLS0tIGEvc3JjL2NvbnRleHQvcG9v bF9xdWVyeV9jb250ZXh0LmMKKysrIGIvc3JjL2NvbnRleHQvcG9vbF9xdWVyeV9jb250ZXh0LmMK QEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJ1dGlscy9zdGF0aXN0aWNzLmgiCiAjaW5jbHVk ZSAidXRpbHMvcG9vbF9zZWxlY3Rfd2Fsa2VyLmgiCiAjaW5jbHVkZSAidXRpbHMvcG9vbF9zdHJl YW0uaCIKKyNpbmNsdWRlICJ1dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmgiCiAjaW5j bHVkZSAiY29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5oIgogI2luY2x1ZGUgImNvbnRleHQv cG9vbF9xdWVyeV9jb250ZXh0LmgiCiAjaW5jbHVkZSAicGFyc2VyL25vZGVzLmgiCkBAIC04OCwx MyArODksMTMgQEAgcG9vbF9pbml0X3F1ZXJ5X2NvbnRleHQodm9pZCkKIAkgKiBQYXJlbnQgdGhl IHF1ZXJ5IGNvbnRleHQgdW5kZXIgdGhlIHNlc3Npb24gbWVtb3J5IGNvbnRleHQgcmF0aGVyIHRo YW4KIAkgKiB0aGUgcGVyLWl0ZXJhdGlvbiBRdWVyeUNvbnRleHQuICBBIHF1ZXJ5IGNvbnRleHQg aXMgcmVmZXJlbmNlZCBmcm9tIHRoZQogCSAqIHNlc3Npb24gc2NvcGVkIHNlbnQgbWVzc2FnZSBs aXN0IGFuZCBwZW5kaW5nIG1lc3NhZ2UgbGlzdC4gIFRoZXNlIGxpc3RzCi0JICogb3V0bGl2ZSB0 aGUgUXVlcnlDb250ZXh0LCB3aGljaCBkb19jaGlsZCgpIHJlc2V0cyBiZXR3ZWVuIHRoZSBpdGVy YXRpb25zCi0JICogb2YgaXRzIHF1ZXJ5IHByb2Nlc3NpbmcgbG9vcCAoZm9yIGluc3RhbmNlIHdo ZW4gcG9vbF9wcm9jZXNzX3F1ZXJ5KCkKLQkgKiByZXR1cm5zIGFmdGVyIGEgYmFja2VuZCBub2Rl IHdhcyBzaHV0IGRvd24pLiAgSWYgdGhlIHF1ZXJ5IGNvbnRleHQgbGl2ZWQKLQkgKiBpbiBRdWVy eUNvbnRleHQsIHN1Y2ggYSByZXNldCB3b3VsZCBmcmVlIGl0IHdoaWxlIHRoZSBtZXNzYWdlIGxp c3RzCi0JICogc3RpbGwgcmVmZXJlbmNlIGl0LCByZXN1bHRpbmcgaW4gYSB1c2UtYWZ0ZXItZnJl ZS4gIFdoZW4gdGhlcmUgaXMgbm8KLQkgKiBzZXNzaW9uIGNvbnRleHQgKGUuZy4gaW50ZXJuYWwg cXVlcmllcyBpc3N1ZWQgYmVmb3JlIGEgc2Vzc2lvbiBleGlzdHMpLAotCSAqIGZhbGwgYmFjayB0 byBRdWVyeUNvbnRleHQuCisJICogb3V0bGl2ZSB0aGUgUXVlcnlDb250ZXh0LCB3aGljaCBkb19j aGlsZCgpIHJlc2V0cyBiZXR3ZWVuIHRoZQorCSAqIGl0ZXJhdGlvbnMgb2YgaXRzIHF1ZXJ5IHBy b2Nlc3NpbmcgbG9vcCAoZm9yIGluc3RhbmNlIHdoZW4KKwkgKiBwb29sX3Byb2Nlc3NfcXVlcnko KSByZXR1cm5zIGFmdGVyIGEgYmFja2VuZCBub2RlIHdhcyBzaHV0IGRvd24pLiAgSWYKKwkgKiB0 aGUgcXVlcnkgY29udGV4dCBsaXZlZCBpbiBRdWVyeUNvbnRleHQsIHN1Y2ggYSByZXNldCB3b3Vs ZCBmcmVlIGl0CisJICogd2hpbGUgdGhlIG1lc3NhZ2UgbGlzdHMgc3RpbGwgcmVmZXJlbmNlIGl0 LCByZXN1bHRpbmcgaW4gYQorCSAqIHVzZS1hZnRlci1mcmVlLiAgV2hlbiB0aGVyZSBpcyBubyBz ZXNzaW9uIGNvbnRleHQgKGUuZy4gaW50ZXJuYWwKKwkgKiBxdWVyaWVzIGlzc3VlZCBiZWZvcmUg YSBzZXNzaW9uIGV4aXN0cyksIGZhbGwgYmFjayB0byBRdWVyeUNvbnRleHQuCiAJICovCiAJc2Vz c2lvbl9jb250ZXh0ID0gcG9vbF9nZXRfc2Vzc2lvbl9jb250ZXh0KHRydWUpOwogCXBhcmVudCA9 IHNlc3Npb25fY29udGV4dCA/IHNlc3Npb25fY29udGV4dC0+bWVtb3J5X2NvbnRleHQgOiBRdWVy eUNvbnRleHQ7CkBAIC0xODQ4LDIwICsxODQ5LDI2IEBAIGlzX2luX2xpc3QoY2hhciAqbmFtZSwg TGlzdCAqbGlzdCkKIHN0YXRpYyBib29sCiBpc19zZWxlY3Rfb2JqZWN0X2luX3RlbXBfd3JpdGVf bGlzdChOb2RlICpub2RlLCB2b2lkICpjb250ZXh0KQogewotCWlmIChub2RlID09IE5VTEwgfHwg cG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlICE9IERMQk9XX0RNTF9B REFQVElWRSkKKwlpZiAobm9kZSA9PSBOVUxMIHx8CisJCSFETEJPV19JU19ETUxfQURBUFRJVkUo cG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlKSkKIAkJcmV0dXJuIGZh bHNlOwogCiAJaWYgKElzQShub2RlLCBSYW5nZVZhcikpCiAJewogCQlSYW5nZVZhciAgICpyZ3Yg PSAoUmFuZ2VWYXIgKikgbm9kZTsKLQkJUE9PTF9TRVNTSU9OX0NPTlRFWFQgKnNlc3Npb25fY29u dGV4dCA9IHBvb2xfZ2V0X3Nlc3Npb25fY29udGV4dChmYWxzZSk7CisJCVBPT0xfU0VTU0lPTl9D T05URVhUICpzZXNzaW9uX2NvbnRleHQ7CiAKLQkJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xv YWRfYmFsYW5jZV9vbl93cml0ZSA9PSBETEJPV19ETUxfQURBUFRJVkUgJiYgc2Vzc2lvbl9jb250 ZXh0LT5pc19pbl90cmFuc2FjdGlvbikKKwkJc2Vzc2lvbl9jb250ZXh0ID0gcG9vbF9nZXRfc2Vz c2lvbl9jb250ZXh0KGZhbHNlKTsKKworCQlpZiAoc2Vzc2lvbl9jb250ZXh0LT5pc19pbl90cmFu c2FjdGlvbikKIAkJewogCQkJZXJlcG9ydChERUJVRzEsCi0JCQkJCShlcnJtc2coImlzX3NlbGVj dF9vYmplY3RfaW5fdGVtcF93cml0ZV9saXN0OiBcIiVzXCIsIGZvdW5kIHJlbGF0aW9uIFwiJXNc IiIsIChjaGFyICopIGNvbnRleHQsIHJndi0+cmVsbmFtZSkpKTsKKwkJCQkJKGVycm1zZygiaXNf c2VsZWN0X29iamVjdF9pbl90ZW1wX3dyaXRlX2xpc3Q6IgorCQkJCQkJCSIgXCIlc1wiLCBmb3Vu ZCByZWxhdGlvbiBcIiVzXCIiLAorCQkJCQkJCShjaGFyICopIGNvbnRleHQsIHJndi0+cmVsbmFt ZSkpKTsKIAotCQkJcmV0dXJuIGlzX2luX2xpc3Qocmd2LT5yZWxuYW1lLCBzZXNzaW9uX2NvbnRl eHQtPnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVfbGlzdCk7CisJCQlyZXR1cm4gaXNfaW5fbGlzdChy Z3YtPnJlbG5hbWUsCisJCQkJCQkJICBzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0aW9uX3RlbXBf d3JpdGVfbGlzdCk7CiAJCX0KIAl9CiAKQEAgLTE5MDAsNyArMTkwNywxNCBAQCBzdGF0aWMgY2hh ciAqZ2V0X2Fzc29jaWF0ZWRfb2JqZWN0X2Zyb21fZG1sX2FkYXB0aXZlX3JlbGF0aW9ucwogdm9p ZAogY2hlY2tfb2JqZWN0X3JlbGF0aW9uc2hpcF9saXN0KGNoYXIgKm5hbWUsIGJvb2wgaXNfZnVu Y19uYW1lKQogewotCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3Jp dGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFICYmIHBvb2xfY29uZmlnLT5wYXJzZWRfZG1sX2FkYXB0 aXZlX29iamVjdF9yZWxhdGlvbnNoaXBfbGlzdCkKKwlib29sCQlpc19hZGFwdGl2ZTsKKworCWlz X2FkYXB0aXZlID0KKwkJKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0 ZSA9PQorCQkgRExCT1dfRE1MX0FEQVBUSVZFKTsKKworCWlmIChpc19hZGFwdGl2ZSAmJgorCQlw b29sX2NvbmZpZy0+cGFyc2VkX2RtbF9hZGFwdGl2ZV9vYmplY3RfcmVsYXRpb25zaGlwX2xpc3Qp CiAJewogCQlQT09MX1NFU1NJT05fQ09OVEVYVCAqc2Vzc2lvbl9jb250ZXh0ID0gcG9vbF9nZXRf c2Vzc2lvbl9jb250ZXh0KGZhbHNlKTsKIApAQCAtMTk2Nyw3ICsxOTgxLDcgQEAgYWRkX29iamVj dF9pbnRvX3RlbXBfd3JpdGVfbGlzdChOb2RlICpub2RlLCB2b2lkICpjb250ZXh0KQogc3RhdGlj IHZvaWQKIGRtbF9hZGFwdGl2ZShOb2RlICpub2RlLCBjaGFyICpxdWVyeSkKIHsKLQlpZiAocG9v bF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RNTF9BREFQ VElWRSkKKwlpZiAoRExCT1dfSVNfRE1MX0FEQVBUSVZFKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xv YWRfYmFsYW5jZV9vbl93cml0ZSkpCiAJewogCQkvKiBTZXQvVW5zZXQgdHJhbnNhY3Rpb24gc3Rh dHVzIGZsYWdzICovCiAJCWlmIChJc0Eobm9kZSwgVHJhbnNhY3Rpb25TdG10KSkKQEAgLTE5ODEs MTcgKzE5OTUsNDUgQEAgZG1sX2FkYXB0aXZlKE5vZGUgKm5vZGUsIGNoYXIgKnF1ZXJ5KQogCiAJ CQkJaWYgKHNlc3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9saXN0ICE9IE5J TCkKIAkJCQkJbGlzdF9mcmVlX2RlZXAoc2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1w X3dyaXRlX2xpc3QpOwotCiAJCQkJc2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dy aXRlX2xpc3QgPSBOSUw7CisKKwkJCQlpZiAoc2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlvbl90 ZW1wX3dyaXRlX29pZF9saXN0ICE9IE5JTCkKKwkJCQkJbGlzdF9mcmVlKHNlc3Npb25fY29udGV4 dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9vaWRfbGlzdCk7CisJCQkJc2Vzc2lvbl9jb250ZXh0 LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX29pZF9saXN0ID0gTklMOworCQkJCXNlc3Npb25fY29u dGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9kYm9pZCA9IDA7CiAJCQl9CiAJCQllbHNlIGlm IChpc19jb21taXRfb3Jfcm9sbGJhY2tfcXVlcnkobm9kZSkpCiAJCQl7CiAJCQkJc2Vzc2lvbl9j b250ZXh0LT5pc19pbl90cmFuc2FjdGlvbiA9IGZhbHNlOwogCisJCQkJLyogVGhlIG5hbWUgbGlz dCBpcyBvbmx5IHVzZWQgZHVyaW5nIHRoZSB0cmFuc2FjdGlvbi4gKi8KIAkJCQlpZiAoc2Vzc2lv bl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX2xpc3QgIT0gTklMKQogCQkJCQlsaXN0 X2ZyZWVfZGVlcChzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVfbGlzdCk7 Ci0KIAkJCQlzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVfbGlzdCA9IE5J TDsKKworCQkJCS8qCisJCQkJICogRm9yIGRtbF9hZGFwdGl2ZV9nbG9iYWwgdGhlIHJlc29sdmVk IHdyaXRlIE9JRHMgbXVzdCBiZQorCQkJCSAqIGZsdXNoZWQgdG8gc2hhcmVkIG1lbW9yeSBvbmx5 IGFmdGVyIHRoZSBiYWNrZW5kIGNvbmZpcm1zCisJCQkJICogdGhlIENPTU1JVCBzdWNjZWVkZWQu ICBUaGlzIGNvZGUgcnVucyB3aGlsZSByb3V0aW5nIHRoZQorCQkJCSAqIENPTU1JVCwgYmVmb3Jl IGl0IGlzIHNlbnQgdG8gdGhlIGJhY2tlbmQsIHNvIHRoZSBDT01NSVQgbWF5CisJCQkJICogc3Rp bGwgZmFpbCAoZS5nLiBhIGRlZmVycmVkIGNvbnN0cmFpbnQgdmlvbGF0aW9uKSwgcm9sbGluZwor CQkJCSAqIGJhY2sgdGhlIHdyaXRlcyAtLSB3aGljaCBtdXN0IHRoZW4gbm90IGJlIHJlY29yZGVk LiAgV2UKKwkJCQkgKiB0aGVyZWZvcmUga2VlcCB0cmFuc2FjdGlvbl90ZW1wX3dyaXRlX29pZF9s aXN0IGludGFjdCBvbgorCQkJCSAqIENPTU1JVCBhbmQgbGV0IGhhbmRsZV9xdWVyeV9jb250ZXh0 KCkgZmx1c2ggaXQgb24gc3VjY2VzcworCQkJCSAqIChhIGZhaWxlZCBDT01NSVQgbGVhdmVzIGl0 IHRvIGJlIGRpc2NhcmRlZCBieSB0aGUgbmV4dAorCQkJCSAqIEJFR0lOKS4KKwkJCQkgKgorCQkJ CSAqIEluIGV2ZXJ5IG90aGVyIGNhc2UgKHBsYWluIGRtbF9hZGFwdGl2ZSwgb3IgUk9MTEJBQ0sp CisJCQkJICogZGlzY2FyZCBpdCBub3cuCisJCQkJICovCisJCQkJaWYgKCEocG9vbF9jb25maWct PmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RNTF9BREFQVElWRV9HTE9C QUwgJiYKKwkJCQkJICBpc19jb21taXRfcXVlcnkobm9kZSkpKQorCQkJCXsKKwkJCQkJaWYgKHNl c3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9vaWRfbGlzdCAhPSBOSUwpCisJ CQkJCQlsaXN0X2ZyZWUoc2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX29p ZF9saXN0KTsKKwkJCQkJc2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX29p ZF9saXN0ID0gTklMOworCQkJCQlzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0aW9uX3RlbXBfd3Jp dGVfZGJvaWQgPSAwOworCQkJCX0KIAkJCX0KIAogCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZF9jb250ZXh0KTsKQEAgLTIwMDMsOCArMjA0NSw1OCBAQCBkbWxfYWRhcHRpdmUoTm9kZSAqbm9k ZSwgY2hhciAqcXVlcnkpCiAJCSAqIHRlbXAgd3JpdGUgbGlzdC4KIAkJICovCiAJCWlmICghaXNf c2VsZWN0X3F1ZXJ5KG5vZGUsIHF1ZXJ5KSkKKwkJewogCQkJYWRkX29iamVjdF9pbnRvX3RlbXBf d3JpdGVfbGlzdChub2RlLCBxdWVyeSk7CiAKKwkJCS8qCisJCQkgKiBGb3IgZG1sX2FkYXB0aXZl X2dsb2JhbCwgcmVzb2x2ZSB0aGUgT0lEcyBvZiB0aGUgdGFibGVzCisJCQkgKiBhY3R1YWxseSB3 cml0dGVuIGJ5IHRoaXMgc3RhdGVtZW50IG5vdywgd2hpbGUgd2UgYXJlIHJvdXRpbmcgaXQKKwkJ CSAqIGFuZCB0aGUgYmFja2VuZCBjb25uZWN0aW9uIGlzIGlkbGUgc28gZG9fcXVlcnkgKHVzZWQg YnkgdGhlCisJCQkgKiByZWxjYWNoZSBsb29rdXBzKSBpcyBzYWZlLiAgVGhlIE9JRHMgYXJlIG1h cmtlZCBpbiBzaGFyZWQKKwkJCSAqIG1lbW9yeSBvbmx5IGFmdGVyIHRoZSBiYWNrZW5kIGNvbmZp cm1zIHN1Y2Nlc3MsIGluCisJCQkgKiBoYW5kbGVfcXVlcnlfY29udGV4dCgpOyByZXNvbHZpbmcg dGhlbSB0aGVyZSB3b3VsZCBpc3N1ZQorCQkJICogZG9fcXVlcnkgaW50byB0aGUgaW4tZmxpZ2h0 IHN0YXRlbWVudC9DT01NSVQgcmVzcG9uc2UgYW5kIGhhbmcKKwkJCSAqIHRoZSBzZXNzaW9uLgor CQkJICovCisJCQlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRl ID09IERMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwpCisJCQl7CisJCQkJUE9PTF9TRVNTSU9OX0NP TlRFWFQgKnNlc3Npb25fY29udGV4dCA9IHBvb2xfZ2V0X3Nlc3Npb25fY29udGV4dChmYWxzZSk7 CisJCQkJTWVtb3J5Q29udGV4dCBvbGRfY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhz ZXNzaW9uX2NvbnRleHQtPm1lbW9yeV9jb250ZXh0KTsKKwkJCQlpbnQJCSAgICpvaWRzOworCQkJ CWludAkJCW51bV9vaWRzOworCQkJCWludAkJCWk7CisKKwkJCQkvKgorCQkJCSAqIE91dHNpZGUg YW4gZXhwbGljaXQgdHJhbnNhY3Rpb24gZWFjaCBzdGF0ZW1lbnQgc3RhbmRzCisJCQkJICogYWxv bmU6IGRpc2NhcmQgYW55IE9JRHMgbGVmdCBvdmVyIGZyb20gYSBwcmV2aW91cyAoZS5nLgorCQkJ CSAqIGZhaWxlZCkgYXV0b2NvbW1pdCBzdGF0ZW1lbnQgc28gdGhleSBhcmUgbm90IG1hcmtlZCBi eSB0aGlzCisJCQkJICogb25lLiBJbnNpZGUgYSB0cmFuc2FjdGlvbiB3ZSBhY2N1bXVsYXRlIHVu dGlsIENPTU1JVC4KKwkJCQkgKi8KKwkJCQlpZiAoIXNlc3Npb25fY29udGV4dC0+aXNfaW5fdHJh bnNhY3Rpb24pCisJCQkJeworCQkJCQlpZiAoc2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlvbl90 ZW1wX3dyaXRlX29pZF9saXN0ICE9IE5JTCkKKwkJCQkJCWxpc3RfZnJlZShzZXNzaW9uX2NvbnRl eHQtPnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVfb2lkX2xpc3QpOworCQkJCQlzZXNzaW9uX2NvbnRl eHQtPnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVfb2lkX2xpc3QgPSBOSUw7CisJCQkJCXNlc3Npb25f Y29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9kYm9pZCA9IDA7CisJCQkJfQorCisJCQkJ bnVtX29pZHMgPSBwb29sX2V4dHJhY3RfdGFibGVfb2lkcyhub2RlLCAmb2lkcyk7CisJCQkJZm9y IChpID0gMDsgaSA8IG51bV9vaWRzOyBpKyspCisJCQkJeworCQkJCQlpZiAob2lkc1tpXSA+IDAp CisJCQkJCQlzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVfb2lkX2xpc3Qg PQorCQkJCQkJCWxpc3RfYXBwZW5kX3VuaXF1ZV9pbnQoc2Vzc2lvbl9jb250ZXh0LT50cmFuc2Fj dGlvbl90ZW1wX3dyaXRlX29pZF9saXN0LCBvaWRzW2ldKTsKKwkJCQl9CisKKwkJCQlpZiAoc2Vz c2lvbl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX29pZF9saXN0ICE9IE5JTCAmJgor CQkJCQlzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVfZGJvaWQgPD0gMCkK KwkJCQkJc2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX2Rib2lkID0KKwkJ CQkJCXBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fZ2V0X2RhdGFiYXNlX29pZCgpOworCisJCQkJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZF9jb250ZXh0KTsKKwkJCX0KKwkJfQorCiAJfQogfQog CkBAIC0yMDI4LDcgKzIxMjAsNyBAQCB3aGVyZV90b19zZW5kX21haW5fcmVwbGljYShQT09MX1FV RVJZX0NPTlRFWFQgKnF1ZXJ5X2NvbnRleHQsIGNoYXIgKnF1ZXJ5LCBOb2RlCiAJc2Vzc2lvbl9j b250ZXh0ID0gcG9vbF9nZXRfc2Vzc2lvbl9jb250ZXh0KGZhbHNlKTsKIAliYWNrZW5kID0gc2Vz c2lvbl9jb250ZXh0LT5iYWNrZW5kOwogCi0JLyogCisJLyoKIAkgKiBDb2xsZWN0L2Rpc2NhcmQg aW5mb3JtYXRpb24gZm9yIGRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID0KIAkgKiBkbWxf YWRhcHRpdmUgY2FzZS4KIAkgKi8KQEAgLTIwNDIsNiArMjEzNCwyMCBAQCB3aGVyZV90b19zZW5k X21haW5fcmVwbGljYShQT09MX1FVRVJZX0NPTlRFWFQgKnF1ZXJ5X2NvbnRleHQsIGNoYXIgKnF1 ZXJ5LCBOb2RlCiAJaWYgKGRlc3QgPT0gUE9PTF9QUklNQVJZKQogCXsKIAkJcG9vbF9zZXRfbm9k ZV90b19iZV9zZW50KHF1ZXJ5X2NvbnRleHQsIFBSSU1BUllfTk9ERV9JRCk7CisKKwkJLyoKKwkJ ICogUmVzb2x2ZSB0YWJsZSBhbmQgZGF0YWJhc2UgT0lEcyBub3cgdG8gcG9wdWxhdGUgcmVsY2Fj aGUuIFRoaXMKKwkJICogYXZvaWRzIHBvdGVudGlhbCBoYW5ncyBpbiBDb21tYW5kQ29tcGxldGUg d2hlcmUgd2Ugc2hvdWxkbid0IGJlCisJCSAqIHJ1bm5pbmcgbmV3IHF1ZXJpZXMgYWdhaW5zdCB0 aGUgYmFja2VuZC4KKwkJICovCisJCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFu Y2Vfb25fd3JpdGUgPT0KKwkJCURMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwpCisJCXsKKwkJCWlu dAkJICAgKm9pZHM7CisKKwkJCXBvb2xfZXh0cmFjdF90YWJsZV9vaWRzKG5vZGUsICZvaWRzKTsK KwkJCXBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fZ2V0X2RhdGFiYXNlX29pZCgpOworCQl9CiAJ fQogCS8qIFNob3VsZCBiZSBzZW50IHRvIGJvdGggcHJpbWFyeSBhbmQgc3RhbmRieT8gKi8KIAll bHNlIGlmIChkZXN0ID09IFBPT0xfQk9USCkKQEAgLTIxNjksNiArMjI3NSwxNTMgQEAgd2hlcmVf dG9fc2VuZF9tYWluX3JlcGxpY2EoUE9PTF9RVUVSWV9DT05URVhUICpxdWVyeV9jb250ZXh0LCBj aGFyICpxdWVyeSwgTm9kZQogCQkJCXsKIAkJCQkJcG9vbF9zZXRfbm9kZV90b19iZV9zZW50KHF1 ZXJ5X2NvbnRleHQsIFBSSU1BUllfTk9ERV9JRCk7CiAJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBD aGVjayB0cmFjayB0YWJsZSBtdXRhdGlvbiBmb3IgcmVjZW50bHkgd3JpdHRlbiB0YWJsZXMuICBJ ZgorCQkJCSAqIGluIGNvbGQgc3RhcnQgb3IgYW55IHRhYmxlIHdhcyByZWNlbnRseSB3cml0dGVu LCByb3V0ZSB0bworCQkJCSAqIHByaW1hcnkgdG8gYXZvaWQgc3RhbGUgcmVhZHMuCisJCQkJICov CisJCQkJZWxzZSBpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRl ID09CisJCQkJCQkgRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JBTCkKKwkJCQl7CisJCQkJCWJvb2wJ CWZvcmNlX3ByaW1hcnkgPSBmYWxzZTsKKwkJCQkJaW50CQkJbGJfbm9kZTsKKwkJCQkJUE9PTF9R VUVSWV9DT05URVhUICpxY3R4ID0KKwkJCQkJCXNlc3Npb25fY29udGV4dC0+cXVlcnlfY29udGV4 dDsKKworCQkJCQlpZiAocG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9pbl9jb2xkX3N0YXJ0KCkp CisJCQkJCXsKKwkJCQkJCWVyZXBvcnQoREVCVUcxLAorCQkJCQkJCQkoZXJybXNnKCJjb3VsZCBu b3QgbG9hZCBiYWxhbmNlIgorCQkJCQkJCQkJCSIgYmVjYXVzZSBvZiB0cmFjayB0YWJsZSIKKwkJ CQkJCQkJCQkiIG11dGF0aW9uIGNvbGQgc3RhcnQiKSwKKwkJCQkJCQkJIGVycmRldGFpbCgiZGVz dGluYXRpb24gPSBQUklNQVJZIgorCQkJCQkJCQkJCSAgICIgZm9yIHF1ZXJ5PSBcIiVzXCIiLAor CQkJCQkJCQkJCSAgIHF1ZXJ5KSkpOworCQkJCQkJZm9yY2VfcHJpbWFyeSA9IHRydWU7CisJCQkJ CX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlTZWxlY3RDb250ZXh0IGN0eDsKKwkJCQkJCWlu dAkJCWRib2lkOworCQkJCQkJaW50CQkJbnVtX29pZHM7CisJCQkJCQlpbnQJCQlpOworCisJCQkJ CQltZW1zZXQoJmN0eCwgMCwgc2l6ZW9mKGN0eCkpOworCQkJCQkJbnVtX29pZHMgPQorCQkJCQkJ CXBvb2xfZXh0cmFjdF90YWJsZV9vaWRzX2Zyb21fc2VsZWN0X3N0bXQoCisJCQkJCQkJCQkJCQkJ CQkJCSBub2RlLCAmY3R4KTsKKwkJCQkJCWlmIChudW1fb2lkcyA+IDApCisJCQkJCQl7CisJCQkJ CQkJZGJvaWQgPQorCQkJCQkJCQlwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2dldF9kYXRhYmFz ZV9vaWQoKTsKKworCQkJCQkJCWlmIChkYm9pZCA8PSAwKQorCQkJCQkJCXsKKwkJCQkJCQkJZXJl cG9ydChERUJVRzEsCisJCQkJCQkJCQkJKGVycm1zZygiY291bGQgbm90IGxvYWQiCisJCQkJCQkJ CQkJCQkiIGJhbGFuY2UgYmVjYXVzZSIKKwkJCQkJCQkJCQkJCSIgZGF0YWJhc2Ugb2lkIHdhcyIK KwkJCQkJCQkJCQkJCSIgdW5hdmFpbGFibGUiKSwKKwkJCQkJCQkJCQkgZXJyZGV0YWlsKCJkZXN0 aW5hdGlvbiIKKwkJCQkJCQkJCQkJCSAgICIgPSBQUklNQVJZIGZvciIKKwkJCQkJCQkJCQkJCSAg ICIgcXVlcnk9IFwiJXNcIiIsCisJCQkJCQkJCQkJCQkgICBxdWVyeSkpKTsKKwkJCQkJCQkJZm9y Y2VfcHJpbWFyeSA9IHRydWU7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UKKwkJCQkJCQl7CisJCQkJ CQkJCWZvciAoaSA9IDA7IGkgPCBudW1fb2lkczsgaSsrKQorCQkJCQkJCQl7CisJCQkJCQkJCQli b29sCQlzdGFsZTsKKworCQkJCQkJCQkJc3RhbGUgPQorCQkJCQkJCQkJCXBvb2xfdHJhY2tfdGFi bGVfbXV0YXRpb25fdGFibGVfaXNfc3RhbGUoCisJCQkJCQkJCQkJCQkJCQkJCQkJCSBjdHgudGFi bGVfb2lkc1tpXSwKKwkJCQkJCQkJCQkJCQkJCQkJCQkJIGRib2lkKTsKKwkJCQkJCQkJCWlmIChz dGFsZSkKKwkJCQkJCQkJCXsKKwkJCQkJCQkJCQllcmVwb3J0KERFQlVHMSwKKwkJCQkJCQkJCQkJ CShlcnJtc2coImNvdWxkIG5vdCBsb2FkIgorCQkJCQkJCQkJCQkJCQkiIGJhbGFuY2UgYmVjYXVz ZSIKKwkJCQkJCQkJCQkJCQkJIiB0YWJsZSBcIiVzXCIgd2FzIgorCQkJCQkJCQkJCQkJCQkiIHJl Y2VudGx5IHdyaXR0ZW4iLAorCQkJCQkJCQkJCQkJCQljdHgudGFibGVfbmFtZXNbaV0pLAorCQkJ CQkJCQkJCQkJIGVycmRldGFpbCgiZGVzdGluYXRpb24iCisJCQkJCQkJCQkJCQkJCSAgICIgPSBQ UklNQVJZIGZvciIKKwkJCQkJCQkJCQkJCQkJICAgIiBxdWVyeT0gXCIlc1wiIiwKKwkJCQkJCQkJ CQkJCQkJICAgcXVlcnkpKSk7CisJCQkJCQkJCQkJZm9yY2VfcHJpbWFyeSA9IHRydWU7CisJCQkJ CQkJCQkJYnJlYWs7CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQl9CisJ CQkJCX0KKworCQkJCQlpZiAoZm9yY2VfcHJpbWFyeSkKKwkJCQkJeworCQkJCQkJcG9vbF9zZXRf bm9kZV90b19iZV9zZW50KAorCQkJCQkJCQkJCQkJIHF1ZXJ5X2NvbnRleHQsCisJCQkJCQkJCQkJ CQkgUFJJTUFSWV9OT0RFX0lEKTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCWlm IChwb29sX2NvbmZpZy0+c3RhdGVtZW50X2xldmVsX2xvYWRfYmFsYW5jZSkKKwkJCQkJCXsKKwkJ CQkJCQlzZXNzaW9uX2NvbnRleHQtPmxvYWRfYmFsYW5jZV9ub2RlX2lkID0KKwkJCQkJCQkJc2Vs ZWN0X2xvYWRfYmFsYW5jaW5nX25vZGUoKTsKKwkJCQkJCX0KKworCQkJCQkJLyoKKwkJCQkJCSAq IElmIHJlcGxpY2F0aW9uIGRlbGF5IGlzIHRvbyBtdWNoLCBhbmQKKwkJCQkJCSAqIHByZWZlcl9s b3dlcl9kZWxheV9zdGFuZGJ5IGlzIHRydWUgdGhlbiBlbGVjdCB0aGUKKwkJCQkJCSAqIGxvd2Vz dC1kZWxheWVkIG5vZGUsIG90aGVyd2lzZSBzZW5kIHRvIHByaW1hcnkuCisJCQkJCQkgKi8KKwkJ CQkJCWxiX25vZGUgPQorCQkJCQkJCXNlc3Npb25fY29udGV4dC0+bG9hZF9iYWxhbmNlX25vZGVf aWQ7CisJCQkJCQlpZiAoU1RSRUFNICYmCisJCQkJCQkJY2hlY2tfcmVwbGljYXRpb25fZGVsYXko bGJfbm9kZSkpCisJCQkJCQl7CisJCQkJCQkJZXJlcG9ydChERUJVRzEsCisJCQkJCQkJCQkoZXJy bXNnKCJjb3VsZCBub3QgbG9hZCIKKwkJCQkJCQkJCQkJIiBiYWxhbmNlIGJlY2F1c2Ugb2YiCisJ CQkJCQkJCQkJCSIgdG9vIG11Y2ggcmVwbGljYXRpb24iCisJCQkJCQkJCQkJCSIgZGVsYXkiKSwK KwkJCQkJCQkJCSBlcnJkZXRhaWwoImRlc3RpbmF0aW9uIgorCQkJCQkJCQkJCQkgICAiID0gJWQg Zm9yIgorCQkJCQkJCQkJCQkgICAiIHF1ZXJ5PSBcIiVzXCIiLAorCQkJCQkJCQkJCQkgICBkZXN0 LCBxdWVyeSkpKTsKKworCQkJCQkJCWlmIChwb29sX2NvbmZpZy0+cHJlZmVyX2xvd2VyX2RlbGF5 X3N0YW5kYnkpCisJCQkJCQkJeworCQkJCQkJCQlsYl9ub2RlID0KKwkJCQkJCQkJCXNlbGVjdF9s b2FkX2JhbGFuY2luZ19ub2RlKCk7CisJCQkJCQkJCXNlc3Npb25fY29udGV4dC0+bG9hZF9iYWxh bmNlX25vZGVfaWQgPQorCQkJCQkJCQkJbGJfbm9kZTsKKwkJCQkJCQkJcWN0eC0+bG9hZF9iYWxh bmNlX25vZGVfaWQgPQorCQkJCQkJCQkJbGJfbm9kZTsKKwkJCQkJCQkJcG9vbF9zZXRfbm9kZV90 b19iZV9zZW50KAorCQkJCQkJCQkJCQkJCQkgcXVlcnlfY29udGV4dCwKKwkJCQkJCQkJCQkJCQkJ IGxiX25vZGUpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlCisJCQkJCQkJeworCQkJCQkJCQlwb29s X3NldF9ub2RlX3RvX2JlX3NlbnQoCisJCQkJCQkJCQkJCQkJCSBxdWVyeV9jb250ZXh0LAorCQkJ CQkJCQkJCQkJCQkgUFJJTUFSWV9OT0RFX0lEKTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQll bHNlCisJCQkJCQl7CisJCQkJCQkJcWN0eC0+bG9hZF9iYWxhbmNlX25vZGVfaWQgPQorCQkJCQkJ CQlzZXNzaW9uX2NvbnRleHQtPmxvYWRfYmFsYW5jZV9ub2RlX2lkOworCQkJCQkJCXBvb2xfc2V0 X25vZGVfdG9fYmVfc2VudCgKKwkJCQkJCQkJCQkJCQkgcXVlcnlfY29udGV4dCwKKwkJCQkJCQkJ CQkJCQkgcWN0eC0+bG9hZF9iYWxhbmNlX25vZGVfaWQpOworCQkJCQkJfQorCQkJCQl9CisJCQkJ fQogCQkJCWVsc2UKIAkJCQl7CiAJCQkJCWlmIChwb29sX2NvbmZpZy0+c3RhdGVtZW50X2xldmVs X2xvYWRfYmFsYW5jZSkKQEAgLTIxODksNyArMjQ0Miw4IEBAIHdoZXJlX3RvX3NlbmRfbWFpbl9y ZXBsaWNhKFBPT0xfUVVFUllfQ09OVEVYVCAqcXVlcnlfY29udGV4dCwgY2hhciAqcXVlcnksIE5v ZGUKIAkJCQkJCQkJIGVycmRldGFpbCgiZGVzdGluYXRpb24gPSAlZCBmb3IgcXVlcnk9IFwiJXNc IiIsIGRlc3QsIHF1ZXJ5KSkpOwogCiAJCQkJCQkvKgotCQkJCQkJICogSWYgcHJlZmVyX2xvd2Vy X2RlbGF5X3N0YW5kYnkgaXMgb24sIGNob29zZSBsb3dlciBkZWxheSBzdGFuZGJ5LgorCQkJCQkJ ICogSWYgcHJlZmVyX2xvd2VyX2RlbGF5X3N0YW5kYnkgaXMgb24sIGNob29zZSBsb3dlcgorCQkJ CQkJICogZGVsYXkgc3RhbmRieS4KIAkJCQkJCSAqLwogCQkJCQkJaWYgKHBvb2xfY29uZmlnLT5w cmVmZXJfbG93ZXJfZGVsYXlfc3RhbmRieSkKIAkJCQkJCXsKQEAgLTIxOTksNyArMjQ1Myw4IEBA IHdoZXJlX3RvX3NlbmRfbWFpbl9yZXBsaWNhKFBPT0xfUVVFUllfQ09OVEVYVCAqcXVlcnlfY29u dGV4dCwgY2hhciAqcXVlcnksIE5vZGUKIAkJCQkJCQlzZXNzaW9uX2NvbnRleHQtPnF1ZXJ5X2Nv bnRleHQtPmxvYWRfYmFsYW5jZV9ub2RlX2lkID0gc2Vzc2lvbl9jb250ZXh0LT5sb2FkX2JhbGFu Y2Vfbm9kZV9pZDsKIAkJCQkJCQlwb29sX3NldF9ub2RlX3RvX2JlX3NlbnQocXVlcnlfY29udGV4 dCwgc2Vzc2lvbl9jb250ZXh0LT5xdWVyeV9jb250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9pZCk7 CiAJCQkJCQl9Ci0JCQkJCQllbHNlCS8qIGRlbGF5IGlzIHRvbyBtdWNoLiBwcmVmZXIgdG8gc2Vu ZCB0byBwcmltYXJ5ICovCisJCQkJCQllbHNlCS8qIGRlbGF5IGlzIHRvbyBtdWNoLiBwcmVmZXIg dG8gc2VuZCB0bworCQkJCQkJCQkgKiBwcmltYXJ5ICovCiAJCQkJCQl7CiAJCQkJCQkJcG9vbF9z ZXRfbm9kZV90b19iZV9zZW50KHF1ZXJ5X2NvbnRleHQsIFBSSU1BUllfTk9ERV9JRCk7CiAJCQkJ CQl9CkBAIC0yMjA5LDcgKzI0NjQsNyBAQCB3aGVyZV90b19zZW5kX21haW5fcmVwbGljYShQT09M X1FVRVJZX0NPTlRFWFQgKnF1ZXJ5X2NvbnRleHQsIGNoYXIgKnF1ZXJ5LCBOb2RlCiAJCQkJCSAq IE5vdCBzdHJlYW1pbmcgcmVwbGljYXRpb24gbW9kZSwgb3IgZGVsYXlfdGhyZXNob2xkIGlzIDAK IAkJCQkJICogb3IgcmVwbGljYXRpb24gZGVsYXkgaXMgc21hbGwgZW5vdWdoLgogCQkJCQkgKi8K LQkJCQkJZWxzZQkKKwkJCQkJZWxzZQogCQkJCQl7CiAJCQkJCQlzZXNzaW9uX2NvbnRleHQtPnF1 ZXJ5X2NvbnRleHQtPmxvYWRfYmFsYW5jZV9ub2RlX2lkID0gc2Vzc2lvbl9jb250ZXh0LT5sb2Fk X2JhbGFuY2Vfbm9kZV9pZDsKIAkJCQkJCXBvb2xfc2V0X25vZGVfdG9fYmVfc2VudChxdWVyeV9j b250ZXh0LApkaWZmIC0tZ2l0IGEvc3JjL2NvbnRleHQvcG9vbF9zZXNzaW9uX2NvbnRleHQuYyBi L3NyYy9jb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmMKaW5kZXggMmE5YjkwZDA1Li4wYmFi NzVlYTYgMTAwNjQ0Ci0tLSBhL3NyYy9jb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmMKKysr IGIvc3JjL2NvbnRleHQvcG9vbF9zZXNzaW9uX2NvbnRleHQuYwpAQCAtNTM2LDIwICs1MzYsMjYg QEAgZHVtcF9zZW50X21lc3NhZ2UoY2hhciAqY2FsbGVyLCBQT09MX1NFTlRfTUVTU0FHRSAqbSkK IHN0YXRpYyB2b2lkCiBkbWxfYWRhcHRpdmVfaW5pdCh2b2lkKQogewotCWlmIChwb29sX2NvbmZp Zy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFKQor CWlmIChETEJPV19JU19ETUxfQURBUFRJVkUocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxh bmNlX29uX3dyaXRlKSkKIAl7CiAJCXNlc3Npb25fY29udGV4dC0+aXNfaW5fdHJhbnNhY3Rpb24g PSBmYWxzZTsKIAkJc2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX2xpc3Qg PSBOSUw7CisJCXNlc3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9vaWRfbGlz dCA9IE5JTDsKKwkJc2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX2Rib2lk ID0gMDsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkCiBkbWxfYWRhcHRpdmVfZGVzdHJveSh2b2lkKQog ewotCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0gRExC T1dfRE1MX0FEQVBUSVZFICYmIHNlc3Npb25fY29udGV4dCkKKwlpZiAoRExCT1dfSVNfRE1MX0FE QVBUSVZFKAorCQkJCQkJCSAgcG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dy aXRlKSAmJgorCQlzZXNzaW9uX2NvbnRleHQpCiAJewogCQlpZiAoc2Vzc2lvbl9jb250ZXh0LT50 cmFuc2FjdGlvbl90ZW1wX3dyaXRlX2xpc3QgIT0gTklMKQogCQkJbGlzdF9mcmVlX2RlZXAoc2Vz c2lvbl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX2xpc3QpOworCQlpZiAoc2Vzc2lv bl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX29pZF9saXN0ICE9IE5JTCkKKwkJCWxp c3RfZnJlZShzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVfb2lkX2xpc3Qp OwogCX0KIH0KIApAQCAtNzQ4LDEwICs3NTQsMTMgQEAgdm9pZAogcG9vbF9zZXRfd3JpdGluZ190 cmFuc2FjdGlvbih2b2lkKQogewogCS8qCi0JICogSWYgZGlzYWJsZV90cmFuc2FjdGlvbl9vbl93 cml0ZSBpcyAnb2ZmJyBvciAnZG1sX2FkYXB0aXZlJywgdGhlbiBuZXZlcgotCSAqIHR1cm4gb24g d3JpdGluZyB0cmFuc2FjdGlvbiBmbGFnLgorCSAqIElmIGRpc2FibGVfbG9hZF9iYWxhbmNlX29u X3dyaXRlIGlzICdvZmYnIG9yICdkbWxfYWRhcHRpdmUnIG9yCisJICogJ2RtbF9hZGFwdGl2ZV9n bG9iYWwnLCB0aGVuIG5ldmVyIHR1cm4gb24gd3JpdGluZyB0cmFuc2FjdGlvbiBmbGFnLgogCSAq LwotCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgIT0gRExC T1dfT0ZGICYmIHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSAhPSBE TEJPV19ETUxfQURBUFRJVkUpCisJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5j ZV9vbl93cml0ZSAhPQorCQlETEJPV19PRkYgJiYKKwkJIURMQk9XX0lTX0RNTF9BREFQVElWRSgK KwkJCQkJCQkgICBwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUpKQog CXsKIAkJcG9vbF9nZXRfc2Vzc2lvbl9jb250ZXh0KGZhbHNlKS0+d3JpdGluZ190cmFuc2FjdGlv biA9IHRydWU7CiAJCWVyZXBvcnQoREVCVUc1LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29u dGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5oIGIvc3JjL2luY2x1ZGUvY29udGV4dC9wb29sX3Nl c3Npb25fY29udGV4dC5oCmluZGV4IDhmM2UzYjg5Ni4uY2Y3YTFmYmU4IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9jb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmgKKysrIGIvc3JjL2luY2x1 ZGUvY29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5oCkBAIC0yMjMsNyArMjIzLDcgQEAgdHlw ZWRlZiBzdHJ1Y3QKIAkgKiBxdWVyeSBpcyBpc3N1ZWQgaW4gYW4gZXhwbGljaXQgdHJhbnNhY3Rp b24sIGFuZCBpcyB0dXJuZWQgb2ZmIHdoZW4gdGhlCiAJICogdHJhbnNhY3Rpb24gaXMgY2xvc2Vk LiBPZiBjb3Vyc2UgdHVybmVkIG9mZiB3aGVuIG5ldyB0cmFuc2FjdGlvbgogCSAqIHN0YXJ0cy4g VGhpcyBmbGFnIGlzIHJlZmVyZW5jZWQgYnkgcXVlcnkgY2FjaGUuCi0JKi8KKwkgKi8KIAlib29s CQlyZWFsbHlfd3JpdGluZ190cmFuc2FjdGlvbjsKIAogCS8qIElmIHRydWUsIGVycm9yIG9jY3Vy cmVkIGluIHRoaXMgdHJhbnNhY3Rpb24gKi8KQEAgLTMyOCw2ICszMjgsMTkgQEAgdHlwZWRlZiBz dHJ1Y3QKIAkgKi8KIAlMaXN0CSAgICp0cmFuc2FjdGlvbl90ZW1wX3dyaXRlX2xpc3Q7CiAKKwkv KgorCSAqIEZvciBkaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9IGRtbF9hZGFwdGl2ZV9n bG9iYWw6IHRoZSB0YWJsZSBPSURzCisJICogd3JpdHRlbiBpbiB0aGUgY3VycmVudCBleHBsaWNp dCB0cmFuc2FjdGlvbiwgcGx1cyB0aGUgZGF0YWJhc2UgT0lEIHRoZXkKKwkgKiBiZWxvbmcgdG8u ICBCb3RoIGFyZSByZXNvbHZlZCBhdCBETUwgcm91dGluZyB0aW1lICh3aGVuIHRoZSBiYWNrZW5k CisJICogY29ubmVjdGlvbiBpcyBpZGxlIGFuZCBkb19xdWVyeSBpcyBzYWZlKSBhbmQgY29uc3Vt ZWQgb24gQ09NTUlUIGJ5CisJICogaGFuZGxlX3F1ZXJ5X2NvbnRleHQoKSB0byBtYXJrIHRoZSB0 YWJsZXMgYXMgd3JpdHRlbiBpbiBzaGFyZWQgbWVtb3J5LgorCSAqIFJlc29sdmluZyBoZXJlIC0t IHJhdGhlciB0aGFuIGF0IENPTU1JVCAtLSBhdm9pZHMgaXNzdWluZyBkb19xdWVyeQorCSAqIHdo aWxlIHRoZSBDT01NSVQgcmVzcG9uc2UgaXMgc3RpbGwgaW4gZmxpZ2h0LCB3aGljaCB3b3VsZCBk ZXN5bmMgdGhlCisJICogcHJvdG9jb2wgYW5kIGhhbmcgdGhlIHNlc3Npb24uCisJICovCisJTGlz dAkgICAqdHJhbnNhY3Rpb25fdGVtcF93cml0ZV9vaWRfbGlzdDsKKwlpbnQJCQl0cmFuc2FjdGlv bl90ZW1wX3dyaXRlX2Rib2lkOworCiAjaWZkZWYgTk9UX1VTRUQKIAkvKiBQcmVmZXJyZWQgIm1h aW4iIG5vZGUgaWQuIE9ubHkgdXNlZCBmb3IgU2ltcGxlRm9yd2FyZFRvRnJvbnRlbmQuICovCiAJ aW50CQkJcHJlZmVycmVkX21haW5fbm9kZV9pZDsKQEAgLTM3MCw4ICszODMsNyBAQCB0eXBlZGVm IHN0cnVjdAogCWJvb2wJCXN5bmNfbWFwW01BWF9OVU1fQkFDS0VORFNdOwogCiAJLyoKLQkgKiBC YWNrZW5kIG5vZGUgaWQgbWFwIGRvX3F1ZXJ5IHNlbnQgdG8sIHdpdGhvdXQgc2VuZGluZyBhIHN5 bmMKLQkgKiBtZXNzYWdlLgorCSAqIEJhY2tlbmQgbm9kZSBpZCBtYXAgZG9fcXVlcnkgc2VudCB0 bywgd2l0aG91dCBzZW5kaW5nIGEgc3luYyBtZXNzYWdlLgogCSAqLwogCWJvb2wJCXBlbmRpbmdf c3luY19tYXBbTUFYX05VTV9CQUNLRU5EU107CiB9IFBPT0xfU0VTU0lPTl9DT05URVhUOwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9vbC5oIGIvc3JjL2luY2x1ZGUvcG9vbC5oCmluZGV4IGZl YTU3NDRmMy4uNTQ5YWVkMzBmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb29sLmgKKysrIGIv c3JjL2luY2x1ZGUvcG9vbC5oCkBAIC00MjQsNyArNDI0LDcgQEAgdHlwZWRlZiBlbnVtCiAjZGVm aW5lIE1pbih4LCB5KQkJKCh4KSA8ICh5KSA/ICh4KSA6ICh5KSkKIAogCi0jZGVmaW5lIE1BWF9O VU1fU0VNQVBIT1JFUwkJOAorI2RlZmluZSBNQVhfTlVNX1NFTUFQSE9SRVMJCTkKICNkZWZpbmUg Q09OTl9DT1VOVEVSX1NFTQkJMAogI2RlZmluZSBSRVFVRVNUX0lORk9fU0VNCQkxCiAjZGVmaW5l IFFVRVJZX0NBQ0hFX1NUQVRTX1NFTQkyCkBAIC00MzQsNiArNDM0LDcgQEAgdHlwZWRlZiBlbnVt CiAjZGVmaW5lIEZPTExPV19QUklNQVJZX1NFTQkJNgogI2RlZmluZSBNQUlOX0VYSVRfSEFORExF Ul9TRU0JNwkvKiB1c2VkIGluIGV4aXRfaGFuZGVyIGluIHBncG9vbCBtYWluCiAJCQkJCQkJCQkg KiBwcm9jZXNzICovCisjZGVmaW5lIFRSQUNLX1RBQkxFX01VVEFUSU9OX1RBQkxFX1NFTQk4CiAj ZGVmaW5lIE1BWF9SRVFVRVNUX1FVRVVFX1NJWkUJMTAKIAogI2RlZmluZSBNQVhfU0VDX1dBSVRf Rk9SX0NMVVNURVJfVFJBTlNBQ1RJT04gMTAgLyogdGltZSBpbiBzZWNvbmRzIHRvIGtlZXAKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvb2xfY29uZmlnLmggYi9zcmMvaW5jbHVkZS9wb29sX2Nv bmZpZy5oCmluZGV4IDlhMzk3ZDE2Ni4uYjhhYmFkZDUwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9wb29sX2NvbmZpZy5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvb2xfY29uZmlnLmgKQEAgLTEwNSw5 ICsxMDUsMTMgQEAgdHlwZWRlZiBlbnVtIERMQk9XX09QVElPTgogCURMQk9XX1RSQU5TQUNUSU9O LAogCURMQk9XX1RSQU5TX1RSQU5TQUNUSU9OLAogCURMQk9XX0FMV0FZUywKLQlETEJPV19ETUxf QURBUFRJVkUKKwlETEJPV19ETUxfQURBUFRJVkUsCisJRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JB TAogfSBETEJPV19PUFRJT047CiAKKyNkZWZpbmUgRExCT1dfSVNfRE1MX0FEQVBUSVZFKG9wdCkg XAorCSgob3B0KSA9PSBETEJPV19ETUxfQURBUFRJVkUgfHwgKG9wdCkgPT0gRExCT1dfRE1MX0FE QVBUSVZFX0dMT0JBTCkKKwogdHlwZWRlZiBlbnVtIFJFTFFUQVJHRVRfT1BUSU9OCiB7CiAJUkVM UVRBUkdFVF9QUklNQVJZID0gMSwKQEAgLTM2Myw4ICszNjcsMjIgQEAgdHlwZWRlZiBzdHJ1Y3QK IAljaGFyCSAgICpzcl9jaGVja19wYXNzd29yZDsJLyogcGFzc3dvcmQgZm9yIHNyX2NoZWNrX3Vz ZXIgKi8KIAljaGFyCSAgICpzcl9jaGVja19kYXRhYmFzZTsJLyogUG9zdGdyZVNRTCBkYXRhYmFz ZSBuYW1lIGZvciBzdHJlYW1pbmcKIAkJCQkJCQkJCSAqIHJlcGxpY2F0aW9uIGNoZWNrICovCi0J Y2hhcgkgICAqcmVwbGljYXRpb25fZGVsYXlfc291cmNlX2NtZDsJLyogZXh0ZXJuYWwgY29tbWFu ZCBmb3IgcmVwbGljYXRpb24gZGVsYXkgKi8KLQlpbnQJCQlyZXBsaWNhdGlvbl9kZWxheV9zb3Vy Y2VfdGltZW91dDsJLyogdGltZW91dCBmb3IgZXh0ZXJuYWwgY29tbWFuZCBpbiBzZWNvbmRzICov CisJY2hhcgkgICAqcmVwbGljYXRpb25fZGVsYXlfc291cmNlX2NtZDsJLyogZXh0ZXJuYWwgY29t bWFuZCBmb3IKKwkJCQkJCQkJCQkJCSAqIHJlcGxpY2F0aW9uIGRlbGF5ICovCisJaW50CQkJcmVw bGljYXRpb25fZGVsYXlfc291cmNlX3RpbWVvdXQ7CS8qIHRpbWVvdXQgZm9yIGV4dGVybmFsCisJ CQkJCQkJCQkJCQkJICogY29tbWFuZCBpbiBzZWNvbmRzICovCisKKwkvKiBUcmFjayB0YWJsZSBt dXRhdGlvbiBjb25maWd1cmF0aW9uICovCisJZG91YmxlCQl0cmFja190YWJsZV9tdXRhdGlvbl90 dGxfZmFjdG9yOwkvKiBUVEwgbXVsdGlwbGllciBmb3IKKwkJCQkJCQkJCQkJCQkgKiByZXBsaWNh dGlvbiBkZWxheSAqLworCWludAkJCXRyYWNrX3RhYmxlX211dGF0aW9uX21heF9zdGFsZW5lc3M7 IC8qIG1heCBzdGFsZW5lc3MgZHVyYXRpb24KKwkJCQkJCQkJCQkJCQkgKiBtcyAqLworCWludAkJ CXRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb247CS8qIGNvbGQgc3RhcnQg ZHVyYXRpb24KKwkJCQkJCQkJCQkJCQkJCSAqIG1zICovCisJaW50CQkJdHJhY2tfdGFibGVfbXV0 YXRpb25fdGFibGVfYnVja2V0czsgLyogaGFzaCBidWNrZXRzIGZvciB0YWJsZQorCQkJCQkJCQkJ CQkJCSAqIG1hcCAqLworCWludAkJCXRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemU7CS8q IG1heCB0YWJsZSBtYXAgZW50cmllcyAqLworCiAJY2hhcgkgICAqZmFpbG92ZXJfY29tbWFuZDsJ LyogZXhlY3V0ZSBjb21tYW5kIHdoZW4gZmFpbG92ZXIgaGFwcGVucyAqLwogCWNoYXIJICAgKmZv bGxvd19wcmltYXJ5X2NvbW1hbmQ7IC8qIGV4ZWN1dGUgY29tbWFuZCB3aGVuIGZhaWxvdmVyIGlz CiAJCQkJCQkJCQkJICogZW5kZWQgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3Bv b2xfdHJhY2tfdGFibGVfbXV0YXRpb24uaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3Bvb2xfdHJhY2tf dGFibGVfbXV0YXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmRm YmFjNjY2ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3Bvb2xfdHJhY2tf dGFibGVfbXV0YXRpb24uaApAQCAtMCwwICsxLDE2NyBAQAorLyogLSotcGdzcWwtYy0qLSAqLwor LyoKKyAqIHBncG9vbDogYSBsYW5ndWFnZSBpbmRlcGVuZGVudCBjb25uZWN0aW9uIHBvb2wgc2Vy dmVyIGZvciBQb3N0Z3JlU1FMCisgKiB3cml0dGVuIGJ5IFRhdHN1byBJc2hpaQorICoKKyAqIENv cHlyaWdodCAoYykgMjAwMy0yMDI2CVBnUG9vbCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAq CisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlz IHNvZnR3YXJlIGFuZAorICogaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3 aXRob3V0IGZlZSBpcyBoZXJlYnkKKyAqIGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3Zl IGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorICogY29waWVzIGFuZCB0aGF0IGJvdGgg dGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24KKyAqIG5vdGljZSBhcHBl YXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiB0aGUK KyAqIGF1dGhvciBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFp bmluZyB0bworICogZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj LCB3cml0dGVuIHByaW9yCisgKiBwZXJtaXNzaW9uLiBUaGUgYXV0aG9yIG1ha2VzIG5vIHJlcHJl c2VudGF0aW9ucyBhYm91dCB0aGUKKyAqIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9y IGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzCisgKiBpcyIgd2l0aG91dCBleHByZXNz IG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICogcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5o OiBJbi1tZW1vcnkgdHJhY2tpbmcgb2YKKyAqICAgcmVjZW50bHkgd3JpdHRlbiB0YWJsZXMgdG8g cHJldmVudCBzdGFsZSByZWFkcy4KKyAqLworCisjaWZuZGVmIFBPT0xfVFJBQ0tfVEFCTEVfTVVU QVRJT05fSAorI2RlZmluZSBQT09MX1RSQUNLX1RBQkxFX01VVEFUSU9OX0gKKworI2luY2x1ZGUg InBvb2wuaCIKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisvKgorICogSW52YWxpZCBpbmRleCBt YXJrZXIgZm9yIGxpbmtlZCBsaXN0cworICovCisjZGVmaW5lIFRSQUNLX1RBQkxFX01VVEFUSU9O X0lOVkFMSURfSU5ERVgJKC0xKQorCisvKgorICogRGVmYXVsdCBUVEwgaW4gbWljcm9zZWNvbmRz ICgxMDBtcykgdXNlZCB3aGVuIHJlcGxpY2F0aW9uIGRlbGF5IGlzIHVua25vd24KKyAqLworI2Rl ZmluZSBUUkFDS19UQUJMRV9NVVRBVElPTl9ERUZBVUxUX1RUTF9VUwkoMTAwICogMTAwMCkKKwor LyoKKyAqIEVudHJ5IGluIHRoZSB0YWJsZSBtdXRhdGlvbiBoYXNoIHRhYmxlIChrZXllZCBieSB0 YWJsZS9kYXRhYmFzZSBvaWRzKQorICovCit0eXBlZGVmIHN0cnVjdCBUcmFja1RhYmxlTXV0YXRp b25FbnRyeQoreworCWludAkJCXRhYmxlX29pZDsJCS8qIFRhYmxlIG9pZCAqLworCWludAkJCWRi b2lkOwkJCS8qIERhdGFiYXNlIG9pZCAqLworCXN0cnVjdCB0aW1ldmFsIGZpcnN0X3dyaXRlX3Rp bWU7CS8qIFdoZW4gdGhlIGVudHJ5IHdhcyBmaXJzdCBjcmVhdGVkICovCisJc3RydWN0IHRpbWV2 YWwgbGFzdF93cml0ZV90aW1lOyAvKiBXaGVuIHRoZSB0YWJsZSB3YXMgbGFzdCB3cml0dGVuICov CisJdWludDMyCQloYXNoOwkJCS8qIFByZS1jb21wdXRlZCBoYXNoIHZhbHVlICovCisJaW50CQkJ bmV4dDsJCQkvKiBOZXh0IGluIGNvbGxpc2lvbiBjaGFpbiAqLworCWJvb2wJCWluX3VzZTsJCQkv KiBJcyB0aGlzIGVudHJ5IGluIHVzZT8gKi8KK30gVHJhY2tUYWJsZU11dGF0aW9uRW50cnk7CisK Ky8qCisgKiBIZWFkZXIgZm9yIHRoZSB0YWJsZSBtdXRhdGlvbiBoYXNoIHRhYmxlIGluIHNoYXJl ZCBtZW1vcnkKKyAqLwordHlwZWRlZiBzdHJ1Y3QgVHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxl Cit7CisJaW50CQkJbnVtX2J1Y2tldHM7CS8qIE51bWJlciBvZiBoYXNoIGJ1Y2tldHMgKi8KKwlp bnQJCQltYXhfZW50cmllczsJLyogTWF4aW11bSBlbnRyaWVzIGFsbG93ZWQgKi8KKwlpbnQJCQlu dW1fZW50cmllczsJLyogQ3VycmVudCBudW1iZXIgb2YgZW50cmllcyAqLworCWludAkJCWZyZWVf bGlzdF9oZWFkOyAvKiBIZWFkIG9mIGZyZWUgZW50cnkgbGlzdCAqLworCisJLyoKKwkgKiBGbGV4 aWJsZSBhcnJheSBtZW1iZXJzIGZvbGxvdyBpbiBzaGFyZWQgbWVtb3J5OiBpbnQKKwkgKiBidWNr ZXRzW251bV9idWNrZXRzXTsgVHJhY2tUYWJsZU11dGF0aW9uRW50cnkgZW50cmllc1ttYXhfZW50 cmllc107CisJICovCit9IFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZTsKKworLyoKKyAqIEds b2JhbCBzdGF0ZSBmb3IgdHJhY2sgdGFibGUgbXV0YXRpb24gZmVhdHVyZQorICovCit0eXBlZGVm IHN0cnVjdCBUcmFja1RhYmxlTXV0YXRpb25TdGF0ZQoreworCWJvb2wJCWluaXRpYWxpemVkOwkv KiBTaG1lbSBpbml0aWFsaXplZD8gKi8KKwl1aW50NjQJCWN1cnJlbnRfdHRsX3VzOyAvKiBDdXJy ZW50IFRUTCBpbiBtaWNyb3NlY29uZHMgKi8KKwlzdHJ1Y3QgdGltZXZhbCB0dGxfbGFzdF91cGRh dGVkOwkvKiBXaGVuIFRUTCB3YXMgbGFzdCB1cGRhdGVkICovCisJc3RydWN0IHRpbWV2YWwgbGFz dF9jbGVhbnVwX3RpbWU7CS8qIFdoZW4gbGFzdCBleHBpcmVkIGNsZWFudXAgcmFuICovCisJc3Ry dWN0IHRpbWV2YWwgZ2xvYmFsX2NvbGRfc3RhcnRfdW50aWw7IC8qIEdsb2JhbCBjb2xkIHN0YXJ0 IGVuZCB0aW1lICovCisJdWludDMyCQlzdGF0c19xdWVyaWVzX2NoZWNrZWQ7CS8qIFF1ZXJpZXMg Y2hlY2tlZCAqLworCXVpbnQzMgkJc3RhdHNfZm9yY2VkX3ByaW1hcnk7CS8qIEZvcmNlZCB0byBw cmltYXJ5ICovCisJdWludDMyCQlzdGF0c19hbGxvd2VkX3JlcGxpY2E7CS8qIEFsbG93ZWQgdG8g cmVwbGljYSAqLworfSBUcmFja1RhYmxlTXV0YXRpb25TdGF0ZTsKKworLyoKKyAqIE1haW4gc2hh cmVkIG1lbW9yeSBzdHJ1Y3R1cmUgY29udGFpbmluZyBhbGwgY29tcG9uZW50cworICovCit0eXBl ZGVmIHN0cnVjdCBUcmFja1RhYmxlTXV0YXRpb25TaG1lbQoreworCVRyYWNrVGFibGVNdXRhdGlv blN0YXRlIHN0YXRlOworCVRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqdGFibGVfbWFwOwor fSBUcmFja1RhYmxlTXV0YXRpb25TaG1lbTsKKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogUHVi bGljIEFQSSBmdW5jdGlvbnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogSW5p dGlhbGl6ZSBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZXMgZm9yIHRyYWNrIHRhYmxlIG11dGF0aW9u LgorICogQ2FsbGVkIGZyb20gcGdwb29sX21haW4uYyBhZnRlciBwb29sX2luaXRfcG9vbF9pbmZv KCkuCisgKi8KK2V4dGVybiB2b2lkIHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25faW5pdCh2b2lk KTsKKworLyoKKyAqIEluaXRpYWxpemUgcGVyLWNoaWxkIHByb2Nlc3Mgc3RhdGUgZm9yIHRyYWNr IHRhYmxlIG11dGF0aW9uLgorICogQ2FsbGVkIGZyb20gY2hpbGQuYyB3aGVuIGEgbmV3IGNoaWxk IHByb2Nlc3Mgc3RhcnRzLgorICogU2V0cyB1cCBjb2xkIHN0YXJ0IHRyYWNraW5nLgorICovCitl eHRlcm4gdm9pZCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2NoaWxkX2luaXQodm9pZCk7CisK Ky8qCisgKiBDaGVjayBpZiB0aGUgY2hpbGQgcHJvY2VzcyBpcyBpbiBjb2xkIHN0YXJ0IHBlcmlv ZC4KKyAqIER1cmluZyBjb2xkIHN0YXJ0LCBhbGwgcXVlcmllcyBhcmUgcm91dGVkIHRvIHByaW1h cnkuCisgKiBSZXR1cm5zIHRydWUgaWYgaW4gY29sZCBzdGFydCwgZmFsc2Ugb3RoZXJ3aXNlLgor ICovCitleHRlcm4gYm9vbCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2luX2NvbGRfc3RhcnQo dm9pZCk7CisKKy8qCisgKiBUcmlnZ2VyIGEgZ2xvYmFsIGNvbGQgc3RhcnQgcGVyaW9kIGZvciBh bGwgcHJvY2Vzc2VzLgorICogVXNlZCBhZnRlciB3YXRjaGRvZyBsZWFkZXIgY2hhbmdlIHRvIGF2 b2lkIHN0YWxlIHJlYWRzLgorICovCitleHRlcm4gdm9pZCBwb29sX3RyYWNrX3RhYmxlX211dGF0 aW9uX3RyaWdnZXJfZ2xvYmFsX2NvbGRfc3RhcnQodm9pZCk7CisKKy8qCisgKiBHZXQgb2lkIG9m IGN1cnJlbnQgZGF0YWJhc2UuCisgKi8KK2V4dGVybiBpbnQJcG9vbF90cmFja190YWJsZV9tdXRh dGlvbl9nZXRfZGF0YWJhc2Vfb2lkKHZvaWQpOworCisvKgorICogQ2hlY2sgaWYgYSB0YWJsZSB3 YXMgcmVjZW50bHkgd3JpdHRlbiB0byAoaXMgInN0YWxlIikuCisgKiBJZiBzdGFsZSwgcmVhZHMg ZnJvbSB0aGlzIHRhYmxlIHNob3VsZCBnbyB0byBwcmltYXJ5LgorICogUmV0dXJucyB0cnVlIGlm IHRhYmxlIGlzIHN0YWxlIChyZWNlbnRseSB3cml0dGVuKSwgZmFsc2Ugb3RoZXJ3aXNlLgorICov CitleHRlcm4gYm9vbCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2lzX3N0YWxlKAor CQkJCQkJCQkJCQkJCSBpbnQgdGFibGVfb2lkLCBpbnQgZGJvaWQpOworCisvKgorICogTWFyayB0 YWJsZXMgYXMgcmVjZW50bHkgd3JpdHRlbi4KKyAqIENhbGxlZCBhZnRlciBJTlNFUlQvVVBEQVRF L0RFTEVURSBxdWVyaWVzIGNvbXBsZXRlLgorICogdGFibGVfb2lkczogYXJyYXkgb2YgdGFibGUg b2lkcworICogbnVtX3RhYmxlczogbnVtYmVyIG9mIHRhYmxlcyBpbiBhcnJheQorICogZGJvaWQ6 IGRhdGFiYXNlIG9pZAorICovCitleHRlcm4gdm9pZCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9u X21hcmtfdGFibGVzX3dyaXR0ZW4oCisJCQkJCQkJCQkJCQkJCSAgY29uc3QgaW50ICp0YWJsZV9v aWRzLCBpbnQgbnVtX3RhYmxlcywgaW50IGRib2lkKTsKKworLyoKKyAqIENvbnZlbmllbmNlIGZ1 bmN0aW9uIHRvIG1hcmsgYSBzaW5nbGUgdGFibGUgYXMgd3JpdHRlbi4KKyAqIHRhYmxlX29pZDog dGFibGUgb2lkCisgKiBkYm9pZDogZGF0YWJhc2Ugb2lkCisgKi8KK2V4dGVybiB2b2lkIHBvb2xf dHJhY2tfdGFibGVfbXV0YXRpb25fbWFya190YWJsZV93cml0dGVuKAorCQkJCQkJCQkJCQkJCQkg aW50IHRhYmxlX29pZCwgaW50IGRib2lkKTsKKworLyoKKyAqIFVwZGF0ZSB0aGUgVFRMIGJhc2Vk IG9uIGN1cnJlbnQgcmVwbGljYXRpb24gZGVsYXkuCisgKiBDYWxsZWQgZnJvbSBwb29sX3dvcmtl cl9jaGlsZC5jIHdoZW4gcmVwbGljYXRpb24gZGVsYXkgaXMgdXBkYXRlZC4KKyAqIGRlbGF5X3Vz OiByZXBsaWNhdGlvbiBkZWxheSBpbiBtaWNyb3NlY29uZHMKKyAqLworZXh0ZXJuIHZvaWQgcG9v bF90cmFja190YWJsZV9tdXRhdGlvbl91cGRhdGVfdHRsKHVpbnQ2NCBkZWxheV91cyk7CisKKy8q CisgKiBDYWxjdWxhdGUgcmVxdWlyZWQgc2hhcmVkIG1lbW9yeSBzaXplIGZvciB0cmFjayB0YWJs ZSBtdXRhdGlvbi4KKyAqLworZXh0ZXJuIFNpemUgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9z aG1lbV9zaXplKHZvaWQpOworCisjZW5kaWYJCQkJCQkJLyogUE9PTF9UUkFDS19UQUJMRV9NVVRB VElPTl9IICovCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9wZ3Bvb2xfbWFpbi5jIGIvc3JjL21haW4v cGdwb29sX21haW4uYwppbmRleCBkYmYxYmZkMTQuLmYxNmUwZjU3NiAxMDA2NDQKLS0tIGEvc3Jj L21haW4vcGdwb29sX21haW4uYworKysgYi9zcmMvbWFpbi9wZ3Bvb2xfbWFpbi5jCkBAIC01Nyw2 ICs1Nyw3IEBACiAjaW5jbHVkZSAiYXV0aC9wb29sX3Bhc3N3ZC5oIgogI2luY2x1ZGUgImF1dGgv cG9vbF9oYmEuaCIKICNpbmNsdWRlICJxdWVyeV9jYWNoZS9wb29sX21lbXFjYWNoZS5oIgorI2lu Y2x1ZGUgInV0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uaCIKICNpbmNsdWRlICJ3YXRj aGRvZy93ZF9pbnRlcm5hbF9jb21tYW5kcy5oIgogI2luY2x1ZGUgIndhdGNoZG9nL3dkX2xpZmVj aGVjay5oIgogI2luY2x1ZGUgIndhdGNoZG9nL3dhdGNoZG9nLmgiCkBAIC0xNTAxLDExICsxNTAy LDE0IEBAIHNpZ3VzcjFfaW50ZXJydXB0X3Byb2Nlc3Nvcih2b2lkKQogCiAJaWYgKHVzZXIxU2ln bmFsU2xvdC0+c2lnbmFsRmxhZ3NbU0lHX1dBVENIRE9HX1NUQVRFX0NIQU5HRURdKQogCXsKKwkJ V0RfU1RBVEVTCXdkX3N0YXRlOworCiAJCWVyZXBvcnQoTE9HLAogCQkJCShlcnJtc2coIlBncG9v bC1JSSBwYXJlbnQgcHJvY2VzcyByZWNlaXZlZCB3YXRjaGRvZyBzdGF0ZSBjaGFuZ2Ugc2lnbmFs IGZyb20gd2F0Y2hkb2ciKSkpOwogCiAJCXVzZXIxU2lnbmFsU2xvdC0+c2lnbmFsRmxhZ3NbU0lH X1dBVENIRE9HX1NUQVRFX0NIQU5HRURdID0gZmFsc2U7Ci0JCWlmICh3ZF9pbnRlcm5hbF9nZXRf d2F0Y2hkb2dfbG9jYWxfbm9kZV9zdGF0ZSgpID09IFdEX1NUQU5EQlkpCisJCXdkX3N0YXRlID0g d2RfaW50ZXJuYWxfZ2V0X3dhdGNoZG9nX2xvY2FsX25vZGVfc3RhdGUoKTsKKwkJaWYgKHdkX3N0 YXRlID09IFdEX1NUQU5EQlkpCiAJCXsKIAkJCWVyZXBvcnQoTE9HLAogCQkJCQkoZXJybXNnKCJ3 ZSBoYXZlIGpvaW5lZCB0aGUgd2F0Y2hkb2cgY2x1c3RlciBhcyBTVEFOREJZIG5vZGUiKSwKQEAg LTE1MTksNiArMTUyMywxMiBAQCBzaWd1c3IxX2ludGVycnVwdF9wcm9jZXNzb3Iodm9pZCkKIAkJ CSAqLwogCQkJcG9vbF9yZWxlYXNlX2ZvbGxvd19wcmltYXJ5X2xvY2sodHJ1ZSk7CiAJCX0KKwkJ ZWxzZSBpZiAod2Rfc3RhdGUgPT0gV0RfQ09PUkRJTkFUT1IgJiYKKwkJCQkgcG9vbF9jb25maWct PmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09CisJCQkJIERMQk9XX0RNTF9BREFQVElW RV9HTE9CQUwpCisJCXsKKwkJCXBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fdHJpZ2dlcl9nbG9i YWxfY29sZF9zdGFydCgpOworCQl9CiAJfQogCWlmICh1c2VyMVNpZ25hbFNsb3QtPnNpZ25hbEZs YWdzW1NJR19GQUlMT1ZFUl9JTlRFUlJVUFRdKQogCXsKQEAgLTMwODQsNiArMzA5NCwxNiBAQCBp bml0aWFsaXplX3NoYXJlZF9tZW1fb2JqZWN0cyhib29sIGNsZWFyX21lbWNhY2hlX29pZG1hcHMp CiAJCWVsb2coREVCVUcxLCAid2F0Y2hkb2c6ICV6dSBieXRlcyByZXF1ZXN0ZWQgZm9yIHNoYXJl ZCBtZW1vcnkiLCBNQVhBTElHTih3ZF9pcGNfZ2V0X3NoYXJlZF9tZW1fc2l6ZSgpKSk7CiAJfQog CisJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9PQorCQlE TEJPV19ETUxfQURBUFRJVkVfR0xPQkFMKQorCXsKKwkJc2l6ZSArPSBNQVhBTElHTihwb29sX3Ry YWNrX3RhYmxlX211dGF0aW9uX3NobWVtX3NpemUoKSk7CisJCWVsb2coREVCVUcxLAorCQkJICJ0 cmFja190YWJsZV9tdXRhdGlvbjogJXp1IGJ5dGVzIHJlcXVlc3RlZCIKKwkJCSAiIGZvciBzaGFy ZWQgbWVtb3J5IiwKKwkJCSBNQVhBTElHTihwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3NobWVt X3NpemUoKSkpOworCX0KKwogCWluaXRpYWxpemVfc2hhcmVkX21lbW9yeV9tYWluX3NlZ21lbnQo c2l6ZSk7CiAKIAkvKiBNb3ZlIHRoZSBiYWNrZW5kIGRlc2NyaXB0b3JzIHRvIHNoYXJlZCBtZW1v cnkgKi8KQEAgLTMyMDIsNiArMzIyMiwxMyBAQCBpbml0aWFsaXplX3NoYXJlZF9tZW1fb2JqZWN0 cyhib29sIGNsZWFyX21lbWNhY2hlX29pZG1hcHMpCiAKIAkvKiBpbml0aWFsaXplIHBjcCB3b3Jr ZXIgY2hpbGQgcGlkcyAqLwogCW1lbXNldChSZXFfaW5mby0+cGNwX3dvcmtlcl9waWRzLCAwLCBz aXplb2YoUmVxX2luZm8tPnBjcF93b3JrZXJfcGlkcykpOworCisJLyogSW5pdGlhbGl6ZSB0cmFj ayB0YWJsZSBtdXRhdGlvbiBmb3IgcmVjZW50bHkgd3JpdHRlbiB0YWJsZXMgKi8KKwlpZiAocG9v bF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09CisJCURMQk9XX0RNTF9B REFQVElWRV9HTE9CQUwpCisJeworCQlwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2luaXQoKTsK Kwl9CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvcHJvdG9jb2wvQ29tbWFuZENvbXBsZXRlLmMg Yi9zcmMvcHJvdG9jb2wvQ29tbWFuZENvbXBsZXRlLmMKaW5kZXggMWY2M2EwZThkLi43NmU3N2Zl YTAgMTAwNjQ0Ci0tLSBhL3NyYy9wcm90b2NvbC9Db21tYW5kQ29tcGxldGUuYworKysgYi9zcmMv cHJvdG9jb2wvQ29tbWFuZENvbXBsZXRlLmMKQEAgLTM4LDYgKzM4LDggQEAKICNpbmNsdWRlICJ1 dGlscy9wYWxsb2MuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0 aWxzL3Bvb2xfc3RyZWFtLmgiCisjaW5jbHVkZSAidXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRh dGlvbi5oIgorI2luY2x1ZGUgInF1ZXJ5X2NhY2hlL3Bvb2xfbWVtcWNhY2hlLmgiCiAKIHN0YXRp YyBpbnQJZXh0cmFjdF9udHVwbGVzKGNoYXIgKm1lc3NhZ2UpOwogc3RhdGljIFBPT0xfU1RBVFVT IGhhbmRsZV9taXNtYXRjaF90dXBsZXMoUE9PTF9DT05ORUNUSU9OICpmcm9udGVuZCwgUE9PTF9D T05ORUNUSU9OX1BPT0wgKmJhY2tlbmQsIGNoYXIgKnBhY2tldCwgaW50IHBhY2tldGxlbiwgYm9v bCBjb21tYW5kX2NvbXBsZXRlKTsKQEAgLTMwNCw2ICszMDYsNTcgQEAgaGFuZGxlX3F1ZXJ5X2Nv bnRleHQoUE9PTF9DT05ORUNUSU9OX1BPT0wgKmJhY2tlbmQpCiAKIAlub2RlID0gc2Vzc2lvbl9j b250ZXh0LT5xdWVyeV9jb250ZXh0LT5wYXJzZV90cmVlOwogCisJLyoKKwkgKiBUcmFjayB0YWJs ZSB3cml0ZXMgZm9yIHRoZSBkbWxfYWRhcHRpdmVfZ2xvYmFsIGZlYXR1cmUuICBPbmx5CisJICog bWVhbmluZ2Z1bCBpbiBzdHJlYW1pbmcgcmVwbGljYXRpb24gbW9kZSAoTUFJTl9SRVBMSUNBKS4K KwkgKgorCSAqIFRoZSBPSURzIG9mIHRoZSB0YWJsZXMgd3JpdHRlbiAoYW5kIHRoZWlyIGRhdGFi YXNlIE9JRCkgd2VyZSByZXNvbHZlZAorCSAqIGJ5IGRtbF9hZGFwdGl2ZSgpIGF0IERNTCByb3V0 aW5nIHRpbWUsIHdoaWxlIHRoZSBiYWNrZW5kIGNvbm5lY3Rpb24gd2FzCisJICogaWRsZSwgYW5k IHN0YXNoZWQgaW4gdHJhbnNhY3Rpb25fdGVtcF93cml0ZV9vaWRfbGlzdC4gIFdlIG1hcmsgdGhl bSBpbgorCSAqIHNoYXJlZCBtZW1vcnkgb25seSBub3csIG9uY2UgdGhlIGJhY2tlbmQgaGFzIGNv bmZpcm1lZCB0aGUgc3RhdGVtZW50IG9yCisJICogdHJhbnNhY3Rpb24gc3VjY2VlZGVkIC0tIGEg ZmFpbGVkIGF1dG9jb21taXQgc3RhdGVtZW50LCBvciBhIGZhaWxlZCAvCisJICogcm9sbGVkLWJh Y2sgQ09NTUlULCBwcm9kdWNlcyBhbiBFcnJvclJlc3BvbnNlIGFuZCBuZXZlciByZWFjaGVzCisJ ICogQ29tbWFuZENvbXBsZXRlLCBhbmQgYSBST0xMQkFDSyBjbGVhcnMgdGhlIGxpc3Qgd2hpbGUg cm91dGluZywgc28gaW4KKwkgKiBhbGwgdGhvc2UgY2FzZXMgdGhlIHdyaXRlcyBhcmUgY29ycmVj dGx5IG5vdCByZWNvcmRlZC4KKwkgKgorCSAqIFdlIHJlYWNoIHRoaXMgcG9pbnQgd2l0aCBpc19p bl90cmFuc2FjdGlvbiA9PSBmYWxzZSBib3RoIGZvciBhbgorCSAqIGF1dG9jb21taXQgc3RhdGVt ZW50IGFuZCBmb3IgYSBDT01NSVQgKGRtbF9hZGFwdGl2ZSgpIGNsZWFycyB0aGUgZmxhZworCSAq IHdoaWxlIHJvdXRpbmcgdGhlIENPTU1JVCwgYW5kIGtlZXBzIHRoZSBPSUQgbGlzdCBpbnRhY3Qg Zm9yIHRoZSBDT01NSVQKKwkgKiBvbmx5KS4gIEFuIGluLXRyYW5zYWN0aW9uIERNTCBzdGlsbCBo YXMgdGhlIGZsYWcgc2V0IGhlcmUgYW5kIGlzCisJICogY29ycmVjdGx5IHNraXBwZWQsIGl0cyB3 cml0ZXMgZGVmZXJyZWQgdG8gdGhlIENPTU1JVC4KKwkgKgorCSAqIENydWNpYWxseSB0aGlzIHBh dGggZG9lcyBOTyBiYWNrZW5kIEkvTzogcmVzb2x2aW5nIE9JRHMgaGVyZSB2aWEKKwkgKiBkb19x dWVyeSB3b3VsZCBpbmplY3QgYSBxdWVyeSB3aGlsZSB0aGUgc3RhdGVtZW50L0NPTU1JVCByZXNw b25zZSBpcworCSAqIHN0aWxsIGJlaW5nIHJlYWQgZnJvbSB0aGUgYmFja2VuZCwgZGVzeW5jaW5n IHRoZSBwcm90b2NvbCBhbmQgaGFuZ2luZworCSAqIHRoZSBzZXNzaW9uLiAgVGhhdCBpcyB3aHkg cmVzb2x1dGlvbiBoYXBwZW5zIGF0IHJvdXRpbmcgdGltZSBpbnN0ZWFkLgorCSAqLworCWlmIChw b29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0KKwkJRExCT1dfRE1M X0FEQVBUSVZFX0dMT0JBTCAmJgorCQlNQUlOX1JFUExJQ0EgJiYKKwkJbm9kZSAhPSBOVUxMICYm CisJCSFzZXNzaW9uX2NvbnRleHQtPmlzX2luX3RyYW5zYWN0aW9uICYmCisJCXNlc3Npb25fY29u dGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9vaWRfbGlzdCAhPSBOSUwpCisJeworCQlpbnQJ CQlkYm9pZCA9IHNlc3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9kYm9pZDsK KworCQlpZiAoZGJvaWQgPiAwKQorCQl7CisJCQlMaXN0Q2VsbCAgICpjZWxsOworCisJCQlmb3Jl YWNoKGNlbGwsIHNlc3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9vaWRfbGlz dCkKKwkJCXsKKwkJCQlpbnQJCQl0b2lkID0gbGZpcnN0X2ludChjZWxsKTsKKworCQkJCWlmICh0 b2lkID4gMCkKKwkJCQkJcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9tYXJrX3RhYmxlX3dyaXR0 ZW4odG9pZCwgZGJvaWQpOworCQkJfQorCQl9CisKKwkJbGlzdF9mcmVlKHNlc3Npb25fY29udGV4 dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9vaWRfbGlzdCk7CisJCXNlc3Npb25fY29udGV4dC0+ dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9vaWRfbGlzdCA9IE5JTDsKKwkJc2Vzc2lvbl9jb250ZXh0 LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX2Rib2lkID0gMDsKKwl9CisKIAlpZiAoSXNBKG5vZGUs IFByZXBhcmVTdG10KSkKIAl7CiAJCWlmIChzZXNzaW9uX2NvbnRleHQtPnVuY29tcGxldGVkX21l c3NhZ2UpCmRpZmYgLS1naXQgYS9zcmMvcHJvdG9jb2wvY2hpbGQuYyBiL3NyYy9wcm90b2NvbC9j aGlsZC5jCmluZGV4IDc2MTg3NmY1My4uNGE1MjdjODRjIDEwMDY0NAotLS0gYS9zcmMvcHJvdG9j b2wvY2hpbGQuYworKysgYi9zcmMvcHJvdG9jb2wvY2hpbGQuYwpAQCAtNTcsNiArNTcsNyBAQAog I2luY2x1ZGUgInV0aWxzL2Vsb2cuaCIKICNpbmNsdWRlICJ1dGlscy9wc19zdGF0dXMuaCIKICNp bmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKKyNpbmNsdWRlICJ1dGlscy9wb29sX3RyYWNrX3Rh YmxlX211dGF0aW9uLmgiCiAKICNpbmNsdWRlICJjb250ZXh0L3Bvb2xfcHJvY2Vzc19jb250ZXh0 LmgiCiAjaW5jbHVkZSAiY29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5oIgpAQCAtMjEzLDYg KzIxNCwxMyBAQCBkb19jaGlsZChpbnQgKmZkcykKIAkvKiBJbml0aWFsaXplIHBlciBwcm9jZXNz IGNvbnRleHQgKi8KIAlwb29sX2luaXRfcHJvY2Vzc19jb250ZXh0KCk7CiAKKwkvKiBJbml0aWFs aXplIHRyYWNrIHRhYmxlIG11dGF0aW9uIGNoaWxkIHN0YXRlIGZvciBjb2xkIHN0YXJ0IHRyYWNr aW5nICovCisJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9 PQorCQlETEJPV19ETUxfQURBUFRJVkVfR0xPQkFMKQorCXsKKwkJcG9vbF90cmFja190YWJsZV9t dXRhdGlvbl9jaGlsZF9pbml0KCk7CisJfQorCiAJLyogaW5pdGlhbGl6ZSBjb25uZWN0aW9uIHBv b2wgKi8KIAlpZiAocG9vbF9pbml0X2NwKCkpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvY29s L3Bvb2xfcHJvdG9fbW9kdWxlcy5jIGIvc3JjL3Byb3RvY29sL3Bvb2xfcHJvdG9fbW9kdWxlcy5j CmluZGV4IDUwYTBlMzgzMC4uOWYzNTUyNTE1IDEwMDY0NAotLS0gYS9zcmMvcHJvdG9jb2wvcG9v bF9wcm90b19tb2R1bGVzLmMKKysrIGIvc3JjL3Byb3RvY29sL3Bvb2xfcHJvdG9fbW9kdWxlcy5j CkBAIC0xNDc4LDcgKzE0NzgsOSBAQCBQYXJzZShQT09MX0NPTk5FQ1RJT04gKmZyb250ZW5kLCBQ T09MX0NPTk5FQ1RJT05fUE9PTCAqYmFja2VuZCwKIAkJcG9vbF93aGVyZV90b19zZW5kKHF1ZXJ5 X2NvbnRleHQsIHF1ZXJ5X2NvbnRleHQtPm9yaWdpbmFsX3F1ZXJ5LAogCQkJCQkJICAgcXVlcnlf Y29udGV4dC0+cGFyc2VfdHJlZSk7CiAKLQkJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRf YmFsYW5jZV9vbl93cml0ZSA9PSBETEJPV19ETUxfQURBUFRJVkUgJiYgc3RybGVuKG5hbWUpICE9 IDApCisJCWlmIChETEJPV19JU19ETUxfQURBUFRJVkUoCisJCQkJCQkJCSAgcG9vbF9jb25maWct PmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlKQorCQkJJiYgc3RybGVuKG5hbWUpICE9IDAp CiAJCQlwb29sX3NldGFsbF9ub2RlX3RvX2JlX3NlbnQocXVlcnlfY29udGV4dCk7CiAKIAkJaWYg KFJFUExJQ0FUSU9OKQpAQCAtMTgyMiw3ICsxODI0LDcgQEAgQmluZChQT09MX0NPTk5FQ1RJT04g KmZyb250ZW5kLCBQT09MX0NPTk5FQ1RJT05fUE9PTCAqYmFja2VuZCwKIAkJCXJldHVybiBQT09M X0VORDsKIAl9CiAKLQlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dy aXRlID09IERMQk9XX0RNTF9BREFQVElWRSAmJgorCWlmIChETEJPV19JU19ETUxfQURBUFRJVkUo cG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlKSAmJgogCQlUU1RBVEUo YmFja2VuZCwgTUFJTl9SRVBMSUNBID8gUFJJTUFSWV9OT0RFX0lEIDogUkVBTF9NQUlOX05PREVf SUQpID09ICdUJykKIAl7CiAJCXBvb2xfd2hlcmVfdG9fc2VuZChxdWVyeV9jb250ZXh0LCBxdWVy eV9jb250ZXh0LT5vcmlnaW5hbF9xdWVyeSwKZGlmZiAtLWdpdCBhL3NyYy9zYW1wbGUvcGdwb29s LmNvbmYuc2FtcGxlLXN0cmVhbSBiL3NyYy9zYW1wbGUvcGdwb29sLmNvbmYuc2FtcGxlLXN0cmVh bQppbmRleCAxYWM5ODI5MDcuLmNlOWI5MmRhMCAxMDA2NDQKLS0tIGEvc3JjL3NhbXBsZS9wZ3Bv b2wuY29uZi5zYW1wbGUtc3RyZWFtCisrKyBiL3NyYy9zYW1wbGUvcGdwb29sLmNvbmYuc2FtcGxl LXN0cmVhbQpAQCAtNDc4LDYgKzQ3OCwxNCBAQCBiYWNrZW5kX2NsdXN0ZXJpbmdfbW9kZSA9IHN0 cmVhbWluZ19yZXBsaWNhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj ICAgICBtb2RpZmllZCB3aXRoaW4gdGhlIGN1cnJlbnQgZXhwbGljaXQgdHJhbnNhY3Rpb24gd2ls bAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3QgYmUgbG9hZCBi YWxhbmNlZCB1bnRpbCB0aGUgZW5kIG9mIHRoZSB0cmFuc2FjdGlvbi4KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjIGRtbF9hZGFwdGl2ZV9nbG9iYWw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgICAgIFN1cGVyc2V0IG9mIGRtbF9hZGFwdGl2ZS4gSW4gYWRkaXRpb24gdG8gcGVyLXRy YW5zYWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIHRyYWNr aW5nLCB1c2VzIHNoYXJlZCBtZW1vcnkgdG8gdHJhY2sgcmVjZW50bHkgd3JpdHRlbgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICB0YWJsZXMgYWNyb3NzIGFsbCBzZXNz aW9ucy4gUmVhZHMgZnJvbSByZWNlbnRseSB3cml0dGVuCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICMgICAgIHRhYmxlcyBhcmUgcm91dGVkIHRvIHByaW1hcnkgdW50aWwgYSBU VEwgKGJhc2VkIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIHJl cGxpY2F0aW9uIGRlbGF5KSBleHBpcmVzLiBSZXF1aXJlcyBhZGRpdGlvbmFsIHNoYXJlZAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBtZW1vcnkuIFNlZSB0cmFja190 YWJsZV9tdXRhdGlvbl8qIHBhcmFtZXRlcnMgYmVsb3cuCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbHdh eXM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIGlmIGEgd3JpdGUg cXVlcnkgaXMgaXNzdWVkLCByZWFkIHF1ZXJpZXMgd2lsbAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjICAgICBub3QgYmUgbG9hZCBiYWxhbmNlZCB1bnRpbCB0aGUgc2Vzc2lv biBlbmRzLgpAQCAtNDk5LDYgKzUwNyw0MyBAQCBiYWNrZW5kX2NsdXN0ZXJpbmdfbW9kZSA9IHN0 cmVhbWluZ19yZXBsaWNhdGlvbgogI3N0YXRlbWVudF9sZXZlbF9sb2FkX2JhbGFuY2UgPSBvZmYK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBFbmFibGVzIHN0YXRlbWVudCBs ZXZlbCBsb2FkIGJhbGFuY2luZwogCisjIC0gVHJhY2sgVGFibGUgTXV0YXRpb24gKHVzZWQgYnkg ZG1sX2FkYXB0aXZlX2dsb2JhbCkgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjIFdBUk5JTkc6IGRtbF9hZGFwdGl2ZV9nbG9iYWwgaW5jcmVhc2VzIHNoYXJlZCBtZW1vcnkg dXNhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBEZWZhdWx0IHNldHRp bmdzIHJlcXVpcmUgfjgwIEtCIHNoYXJlZCBtZW1vcnkgZm9yIHRhYmxlIHRyYWNraW5nCisKKyN0 cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yID0gNS4wCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICMgVFRMIG11bHRpcGxpZXI6IFRUTCA9IHJlcGxpY2F0aW9uX2RlbGF5 ICogZmFjdG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSGlnaGVyIHZh bHVlcyBwcm92aWRlIG1vcmUgc2FmZXR5IG1hcmdpbgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAjIFJhbmdlOiAxLjAtMTAwLjAgKGRlZmF1bHQ6IDUuMCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIyAoY2hhbmdlIHJlcXVpcmVzIHJlbG9hZCkKKworI3Ry YWNrX3RhYmxlX211dGF0aW9uX21heF9zdGFsZW5lc3MgPSA2MDAwMAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjIE1heGltdW0gZHVyYXRpb24gKG1zKSBhIHRhYmxlIGNhbiBi ZSBtYXJrZWQgc3RhbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmcm9t IGl0cyBmaXJzdCB3cml0ZS4gQm91bmRzIGNyb3NzLXNlc3Npb24gaW1wYWN0OgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjIGV2ZW4gdW5kZXIgY29udGludW91cyB3cml0ZXMs IHN0YWxlbmVzcyBleHBpcmVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg YWZ0ZXIgdGhpcyBwZXJpb2QgYW5kIGlzIG9ubHkgcmVuZXdlZCBieSBuZXcgd3JpdGVzLgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDAgZGlzYWJsZXMgdGhlIGNhcC4gUmFu Z2U6IDAtMzYwMDAwMCAoZGVmYXVsdDogNjAwMDAgPSA2MHMpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZWxvYWQpCisKKyN0cmFja190YWJs ZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uID0gMjAwMAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjIER1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyB0byByb3V0ZSBhbGwg cXVlcmllcyB0byBwcmltYXJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg YWZ0ZXIgY2hpbGQgcHJvY2VzcyBzdGFydHMgKGNvbGQgc3RhcnQgcGVyaW9kKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjIFJhbmdlOiAwLTYwMDAwIG1zIChkZWZhdWx0OiAy MDAwIG1zID0gMiBzZWNvbmRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj IFNldCB0byAwIHRvIGRpc2FibGUgY29sZCBzdGFydCBiZWhhdmlvcgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjIChjaGFuZ2UgcmVxdWlyZXMgcmVsb2FkKQorCisjdHJhY2tf dGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0cyA9IDEwMjQKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyBOdW1iZXIgb2YgaGFzaCBidWNrZXRzIGZvciB0cmFjayB0YWJsZSBt dXRhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEhpZ2hlciB2YWx1 ZXMgcmVkdWNlIGhhc2ggY29sbGlzaW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjIFJhbmdlOiA2NC02NTUzNiAoZGVmYXVsdDogMTAyNCkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIyAoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpCisKKyN0cmFja190 YWJsZV9tdXRhdGlvbl90YWJsZV9zaXplID0gMjA0OAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAjIE1heGltdW0gbnVtYmVyIG9mIHRhYmxlcyB0byB0cmFjayBzaW11bHRhbmVv dXNseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFJhbmdlOiAxMjgtMTMx MDcyIChkZWZhdWx0OiAyMDQ4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj IChjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkKKworCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAj IFNUUkVBTUlORyBSRVBMSUNBVElPTiBNT0RFCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYg LS1naXQgYS9zcmMvc3RyZWFtaW5nX3JlcGxpY2F0aW9uL3Bvb2xfd29ya2VyX2NoaWxkLmMgYi9z cmMvc3RyZWFtaW5nX3JlcGxpY2F0aW9uL3Bvb2xfd29ya2VyX2NoaWxkLmMKaW5kZXggMzExYjYz ODY1Li5jZGQ1NzAzOTYgMTAwNjQ0Ci0tLSBhL3NyYy9zdHJlYW1pbmdfcmVwbGljYXRpb24vcG9v bF93b3JrZXJfY2hpbGQuYworKysgYi9zcmMvc3RyZWFtaW5nX3JlcGxpY2F0aW9uL3Bvb2xfd29y a2VyX2NoaWxkLmMKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJ1dGlscy9wb29sX2lwLmgi CiAjaW5jbHVkZSAidXRpbHMvcHNfc3RhdHVzLmgiCiAjaW5jbHVkZSAidXRpbHMvcG9vbF9zdHJl YW0uaCIKKyNpbmNsdWRlICJ1dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmgiCiAKICNp bmNsdWRlICJjb250ZXh0L3Bvb2xfcHJvY2Vzc19jb250ZXh0LmgiCiAjaW5jbHVkZSAiY29udGV4 dC9wb29sX3Nlc3Npb25fY29udGV4dC5oIgpAQCAtNDE5LDYgKzQyMCw3IEBAIGNoZWNrX3JlcGxp Y2F0aW9uX3RpbWVfbGFnKHZvaWQpCiAJQmFja2VuZEluZm8gKmJraW5mbzsKIAl1aW50NjQJCWxh ZzsKIAl1aW50NjQJCWRlbGF5X3RocmVzaG9sZF9ieV90aW1lOworCXVpbnQ2NAkJbWF4X2RlbGF5 X3VzID0gMDsKIAlFcnJvckNvbnRleHRDYWxsYmFjayBjYWxsYmFjazsKIAlpbnQJCQlhY3RpdmVf c3RhbmRieV9ub2RlOwogCWJvb2wJCXJlcGxpY2F0aW9uX2RlbGF5X2J5X3RpbWU7CkBAIC02NDMs NiArNjQ1LDEwIEBAIGNoZWNrX3JlcGxpY2F0aW9uX3RpbWVfbGFnKHZvaWQpCiAJCQkJCQkJCQkJ CQkJICogc2Vjb25kcyB0byBtaWNybwogCQkJCQkJCQkJCQkJCSAqIHNlY29uZHMgKi8KIAorCQkJ CS8qIFRyYWNrIG1heCBkZWxheSBmb3IgbXV0YXRpb24gVFRMICovCisJCQkJaWYgKGxhZyA+IG1h eF9kZWxheV91cykKKwkJCQkJbWF4X2RlbGF5X3VzID0gbGFnOworCiAJCQkJLyogTG9nIGRlbGF5 IGlmIG5lY2Vzc2FyeSAqLwogCQkJCWlmICgocG9vbF9jb25maWctPmxvZ19zdGFuZGJ5X2RlbGF5 ID09IExTRF9BTFdBWVMgJiYgbGFnID4gMCkgfHwKIAkJCQkJKHBvb2xfY29uZmlnLT5sb2dfc3Rh bmRieV9kZWxheSA9PSBMU0RfT1ZFUl9USFJFU0hPTEQgJiYKQEAgLTY2OCw2ICs2NzQsMTMgQEAg Y2hlY2tfcmVwbGljYXRpb25fdGltZV9sYWcodm9pZCkKIAkJfQogCX0KIAorCS8qCisJICogVXBk YXRlIHRyYWNrIHRhYmxlIG11dGF0aW9uIFRUTCBmcm9tIHRoZSBtYXggb2JzZXJ2ZWQgdGltZS1i YXNlZAorCSAqIHJlcGxpY2F0aW9uIGRlbGF5LgorCSAqLworCWlmIChyZXBsaWNhdGlvbl9kZWxh eV9ieV90aW1lICYmIG1heF9kZWxheV91cyA+IDApCisJCXBvb2xfdHJhY2tfdGFibGVfbXV0YXRp b25fdXBkYXRlX3R0bChtYXhfZGVsYXlfdXMpOworCiAJZXJyb3JfY29udGV4dF9zdGFjayA9IGNh bGxiYWNrLnByZXZpb3VzOwogfQogCkBAIC02OTUsNiArNzA4LDcgQEAgY2hlY2tfcmVwbGljYXRp b25fdGltZV9sYWdfd2l0aF9jbWQodm9pZCkKIAlkb3VibGUJCWRlbGF5X21zOwogCXVpbnQ2NAkJ ZGVsYXk7CiAJdWludDY0CQlkZWxheV90aHJlc2hvbGRfYnlfdGltZTsKKwl1aW50NjQJCW1heF9k ZWxheV91cyA9IDA7CS8qIFRyYWNrIG1heCBkZWxheSBmb3IgbXV0YXRpb24gbWFwICovCiAJaW50 CQkJdG9rZW5fY291bnQgPSAwOwogCWludAkJCXByaW1hcnlfbm9kZV9pZDsKIAlpbnQJCQlzYXZl X2Vycm5vOwpAQCAtMTAwMyw2ICsxMDE3LDEwIEBAIGNoZWNrX3JlcGxpY2F0aW9uX3RpbWVfbGFn X3dpdGhfY21kKHZvaWQpCiAJCQlia2luZm8tPnN0YW5kYnlfZGVsYXkgPSBkZWxheTsKIAkJCWJr aW5mby0+c3RhbmRieV9kZWxheV9ieV90aW1lID0gdHJ1ZTsKIAorCQkJLyogVHJhY2sgbWF4aW11 bSBkZWxheSBmb3IgdGFibGUgbXV0YXRpb24gbWFwIFRUTCBjYWxjdWxhdGlvbiAqLworCQkJaWYg KGRlbGF5ID4gbWF4X2RlbGF5X3VzKQorCQkJCW1heF9kZWxheV91cyA9IGRlbGF5OworCiAJCQkv KgogCQkJICogTG9nIGRlbGF5IGlmIG5lY2Vzc2FyeS4gdGhyZXNob2xkIGlzIGluIG1pbGxpc2Vj b25kcywgY29udmVydAogCQkJICogdG8gbWljcm9zZWNvbmRzLgpAQCAtMTAyMSw2ICsxMDM5LDEy IEBAIGNoZWNrX3JlcGxpY2F0aW9uX3RpbWVfbGFnX3dpdGhfY21kKHZvaWQpCiAJCQl0b2tlbiA9 IHN0cnRva19yKE5VTEwsICIgXHRcbiIsICZzYXZlcHRyKTsKIAkJfQogCisJCS8qIFVwZGF0ZSB0 YWJsZSBtdXRhdGlvbiBUVEwgYmFzZWQgb24gbWF4IG9ic2VydmVkIGRlbGF5ICovCisJCWlmIChw b29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0KKwkJCURMQk9XX0RN TF9BREFQVElWRV9HTE9CQUwgJiYKKwkJCW1heF9kZWxheV91cyA+IDApCisJCQlwb29sX3RyYWNr X3RhYmxlX211dGF0aW9uX3VwZGF0ZV90dGwobWF4X2RlbGF5X3VzKTsKKwogCX0KIAlQR19DQVRD SCgpOwogCXsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Npb24vbGlicy5zaCBiL3NyYy90 ZXN0L3JlZ3Jlc3Npb24vbGlicy5zaAppbmRleCA3YzVhMGMxODIuLjFjOGFlMzkyZCAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzc2lvbi9saWJzLnNoCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Np b24vbGlicy5zaApAQCAtNDIsNiArNDIsOCBAQCBmdW5jdGlvbiB3YWl0X2Zvcl9mYWlsb3Zlcl9k b25lIHsKIGZ1bmN0aW9uIGNsZWFuX2FsbCB7CiAJcGdyZXAgcGdwb29sIHwgeGFyZ3Mga2lsbCAt OSA+IC9kZXYvbnVsbCAyPiYxCiAJcGdyZXAgcG9zdGdyZXMgfCB4YXJncyBraWxsIC05ID4gL2Rl di9udWxsIDI+JjEKKwkjIENsZWFuIHVwIGxlYWtlZCBTeXNWIElQQyByZXNvdXJjZXMgbGVmdCBi ZWhpbmQgYnkga2lsbCAtOQorCWlwY3JtIC0tYWxsIDI+L2Rldi9udWxsIHx8IHRydWUKIAlybSAt ZiAkUEdTT0NLRVRfRElSLy5zLlBHU1FMLioKIAluZXRzdGF0IC10IC1wIDI+L2Rldi9udWxsfGdy ZXAgcGdwb29sCiB9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0My50 cmFja190YWJsZV9tdXRhdGlvbi90ZXN0LnNoIGIvc3JjL3Rlc3QvcmVncmVzc2lvbi90ZXN0cy8w NDMudHJhY2tfdGFibGVfbXV0YXRpb24vdGVzdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRl eCAwMDAwMDAwMDAuLjhiNGRkMTdiOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3Npb24vdGVzdHMvMDQzLnRyYWNrX3RhYmxlX211dGF0aW9uL3Rlc3Quc2gKQEAgLTAsMCArMSwz NTQgQEAKKyMhL3Vzci9iaW4vZW52IGJhc2gKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHRlc3Qgc2NyaXB0IGZv ciB0cmFjayB0YWJsZSBtdXRhdGlvbiBmZWF0dXJlIChpbi1tZW1vcnkgdGFibGUgdHJhY2tpbmcp LgorIyBUZXN0cyByb3V0aW5nIG9mIHF1ZXJpZXMgYmFzZWQgb24gcmVjZW50bHkgd3JpdHRlbiB0 YWJsZXMuCisjCitzb3VyY2UgJFRFU1RMSUJTCitURVNURElSPXRlc3RkaXIKK1BTUUw9JFBHQklO L3BzcWwKK1BTUUxPUFRTPSItYSAtcSAtWCIKK1BHUE9PTEJJTj0kUEdQT09MX0lOU1RBTExfRElS L2JpbgorZXhwb3J0IFBHREFUQUJBU0U9dGVzdAorCisjIE9ubHkgcnVuIGluIHN0cmVhbWluZyBy ZXBsaWNhdGlvbiBtb2RlIHNpbmNlIHRoYXQncyB0aGUgdGFyZ2V0IHVzZSBjYXNlCitmb3IgbW9k ZSBpbiBzCitkbworICAgIHJtIC1mciAkVEVTVERJUgorICAgIG1rZGlyICRURVNURElSCisgICAg Y2QgJFRFU1RESVIKKworICAgICMgQ3JlYXRlIHRlc3QgZW52aXJvbm1lbnQgd2l0aCAyIG5vZGVz CisgICAgZWNobyAtbiAiY3JlYXRpbmcgdGVzdCBlbnZpcm9ubWVudC4uLiIKKyAgICAkUEdQT09M X1NFVFVQIC1tICRtb2RlIC1uIDIgfHwgZXhpdCAxCisgICAgZWNobyAiZG9uZS4iCisKKyAgICBz b3VyY2UgLi9iYXNocmMucG9ydHMKKworICAgICMgQ29uZmlndXJlIHRyYWNrIHRhYmxlIG11dGF0 aW9uIGZlYXR1cmUgdmlhIGRtbF9hZGFwdGl2ZV9nbG9iYWwKKyAgICBlY2hvICJkaXNhYmxlX2xv YWRfYmFsYW5jZV9vbl93cml0ZSA9ICdkbWxfYWRhcHRpdmVfZ2xvYmFsJyIgPj4gZXRjL3BncG9v bC5jb25mCisgICAgZWNobyAidHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvciA9IDUuMCIg Pj4gZXRjL3BncG9vbC5jb25mCisgICAgZWNobyAidHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9z dGFydF9kdXJhdGlvbiA9IDEwMDAwIiA+PiBldGMvcGdwb29sLmNvbmYKKworICAgICMgRW5hYmxl IGxvYWQgYmFsYW5jaW5nIGV4cGxpY2l0bHkKKyAgICBlY2hvICJsb2FkX2JhbGFuY2VfbW9kZSA9 IG9uIiA+PiBldGMvcGdwb29sLmNvbmYKKworICAgICMgQ29uZmlndXJlIHdlaWdodHMgc28gd2Ug Y2FuIGRpc3Rpbmd1aXNoIHJvdXRpbmcKKyAgICAjIEJhY2tlbmQgMCAocHJpbWFyeSkgd2VpZ2h0 PTAsIEJhY2tlbmQgMSAoc3RhbmRieSkgd2VpZ2h0PTEKKyAgICAjIFRoaXMgbWVhbnMgbG9hZCBi YWxhbmNlZCBxdWVyaWVzIGdvIHRvIG5vZGUgMSBieSBkZWZhdWx0CisgICAgZWNobyAiYmFja2Vu ZF93ZWlnaHQwID0gMCIgPj4gZXRjL3BncG9vbC5jb25mCisgICAgZWNobyAiYmFja2VuZF93ZWln aHQxID0gMSIgPj4gZXRjL3BncG9vbC5jb25mCisKKyAgICAjIEVuYWJsZSBkZWJ1ZyBsb2dnaW5n IHRvIHNlZSByb3V0aW5nIGRlY2lzaW9ucworICAgIGVjaG8gImxvZ19taW5fbWVzc2FnZXMgPSBk ZWJ1ZzEiID4+IGV0Yy9wZ3Bvb2wuY29uZgorCisgICAgLi9zdGFydGFsbAorCisgICAgZXhwb3J0 IFBHUE9SVD0kUEdQT09MX1BPUlQKKyAgICBleHBvcnQgUEdIT1NUPWxvY2FsaG9zdAorCisgICAg d2FpdF9mb3JfcGdwb29sX3N0YXJ0dXAKKworICAgICMgQ3JlYXRlIHRlc3QgdGFibGVzCisgICAg JFBTUUwgdGVzdCA8PEVPRgorQ1JFQVRFIFRBQkxFIHQxKGkgSU5URUdFUik7CitDUkVBVEUgVEFC TEUgdDIoaSBJTlRFR0VSKTsKK0NSRUFURSBUQUJMRSB0MyhpIElOVEVHRVIpOworRU9GCisKKyAg ICBlY2hvICI9PT0gVGVzdCAxOiBDb2xkIFN0YXJ0IFJvdXRpbmcgPT09IgorICAgICMgRHVyaW5n IGNvbGQgc3RhcnQsIGFsbCBxdWVyaWVzIHNob3VsZCBnbyB0byBwcmltYXJ5CisgICAgIyBSZXN0 YXJ0IHBncG9vbCB0byB0cmlnZ2VyIGNvbGQgc3RhcnQKKyAgICAuL3NodXRkb3duYWxsCisgICAg Li9zdGFydGFsbAorICAgIHdhaXRfZm9yX3BncG9vbF9zdGFydHVwCisKKyAgICAjIEltbWVkaWF0 ZWx5IHF1ZXJ5IC0gc2hvdWxkIGdvIHRvIHByaW1hcnkgZHVlIHRvIGNvbGQgc3RhcnQKKyAgICAk UFNRTCB0ZXN0IC1jICJTRUxFQ1QgJ2NvbGRfc3RhcnRfdGVzdCcgYXMgbWFya2VyLCAqIEZST00g dDE7IiA+IC9kZXYvbnVsbCAyPiYxCisKKyAgICAjIENoZWNrIGxvZyBmb3IgY29sZCBzdGFydCBt ZXNzYWdlICh1c2UgLWEgdG8gaGFuZGxlIGJpbmFyeSBsb2cgZmlsZXMpCisgICAgaWYgZ3JlcCAt YSAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIG9mIHRyYWNrIHRhYmxlIG11dGF0 aW9uIGNvbGQgc3RhcnQiIGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisgICAgICAgIGVjaG8gIlRlc3Qg MSBQQVNTRUQ6IENvbGQgc3RhcnQgcm91dGluZyB3b3JrcyIKKyAgICBlbHNlCisgICAgICAgIGVj aG8gIlRlc3QgMSBGQUlMRUQ6IENvbGQgc3RhcnQgcm91dGluZyBub3QgZGV0ZWN0ZWQiCisgICAg ICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKworICAgIGVjaG8gIj09 PSBUZXN0IDI6IFdhaXQgZm9yIGNvbGQgc3RhcnQgdG8gZW5kID09PSIKKyAgICAjIFdhaXQgZm9y IGNvbGQgc3RhcnQgcGVyaW9kIHRvIGVuZCAoMTAgc2Vjb25kcykuCisgICAgIyBVc2UgZ2VuZXJv dXMgbWFyZ2luIHRvIGF2b2lkIGZsYWtpbmVzcyB1bmRlciBsb2FkIChlLmcuIGZ1bGwgcmVncmVz c2lvbiBzdWl0ZSkuCisgICAgc2xlZXAgMTIKKworICAgICMgQ2xlYXIgdGhlIGxvZworICAgID4g bG9nL3BncG9vbC5sb2cKKworICAgICMgTm93IGEgY2xlYW4gdGFibGUgcXVlcnkgc2hvdWxkIGxv YWQgYmFsYW5jZSAoZ28gdG8gbm9kZSAxKQorICAgICRQU1FMIHRlc3QgLWMgIlNFTEVDVCAnYWZ0 ZXJfY29sZF9zdGFydCcgYXMgbWFya2VyLCAqIEZST00gdDM7IiA+IC9kZXYvbnVsbCAyPiYxCisK KyAgICAjIEFmdGVyIGNvbGQgc3RhcnQsIHF1ZXJpZXMgdG8gY2xlYW4gdGFibGVzIHNob3VsZCBs b2FkIGJhbGFuY2UKKyAgICAjIENoZWNrIHRoYXQgaXQgZGlkIE5PVCBnZXQgZm9yY2VkIHRvIHBy aW1hcnkgZHVlIHRvIHRyYWNrIHRhYmxlIG11dGF0aW9uCisgICAgaWYgZ3JlcCAtYSAtcSAiY291 bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIG9mIHRyYWNrIHRhYmxlIG11dGF0aW9uIGNvbGQg c3RhcnQiIGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisgICAgICAgIGVjaG8gIlRlc3QgMiBGQUlMRUQ6 IFN0aWxsIGluIGNvbGQgc3RhcnQgYWZ0ZXIgd2FpdGluZyIKKyAgICAgICAgLi9zaHV0ZG93bmFs bAorICAgICAgICBleGl0IDEKKyAgICBmaQorICAgIGVjaG8gIlRlc3QgMiBQQVNTRUQ6IENvbGQg c3RhcnQgZW5kZWQgY29ycmVjdGx5IgorCisgICAgZWNobyAiPT09IFRlc3QgMzogV3JpdGUtdGhl bi1SZWFkIFJvdXRpbmcgPT09IgorICAgICMgQ2xlYXIgdGhlIGxvZworICAgID4gbG9nL3BncG9v bC5sb2cKKworICAgICMgV3JpdGUgdG8gdDEgYW5kIHRoZW4gcmVhZCAtIHVzZSBzaW5nbGUgY29u bmVjdGlvbiB0byBlbnN1cmUgc2FtZSBzZXNzaW9uCisgICAgJFBTUUwgdGVzdCA8PEVPRgorSU5T RVJUIElOVE8gdDEgVkFMVUVTICgxKTsKK1NFTEVDVCAnd3JpdGVfcmVhZF90ZXN0JyBhcyBtYXJr ZXIsICogRlJPTSB0MTsKK0VPRgorCisgICAgIyBTbWFsbCBkZWxheSB0byBlbnN1cmUgbG9nIGlz IGZsdXNoZWQKKyAgICBzbGVlcCAwLjUKKworICAgICMgQ2hlY2sgbG9nIGZvciB0YWJsZSBzdGFs ZW5lc3MgbWVzc2FnZQorICAgIGlmIGdyZXAgLWEgLXEgImNvdWxkIG5vdCBsb2FkIGJhbGFuY2Ug YmVjYXVzZSB0YWJsZS4qd2FzIHJlY2VudGx5IHdyaXR0ZW4iIGxvZy9wZ3Bvb2wubG9nOyB0aGVu CisgICAgICAgIGVjaG8gIlRlc3QgMyBQQVNTRUQ6IFdyaXRlLXRoZW4tcmVhZCByb3V0aW5nIHdv cmtzIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiVGVzdCAzIEZBSUxFRDogVGFibGUgc3RhbGVu ZXNzIG5vdCBkZXRlY3RlZCBhZnRlciB3cml0ZSIKKyAgICAgICAgIyBTaG93IHJlbGV2YW50IGxv ZyBlbnRyaWVzIGZvciBkZWJ1Z2dpbmcKKyAgICAgICAgZ3JlcCAtYSAtaSAidHJhY2tfdGFibGVf bXV0YXRpb24iIGxvZy9wZ3Bvb2wubG9nIHwgdGFpbCAtMjAKKyAgICAgICAgLi9zaHV0ZG93bmFs bAorICAgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgZWNobyAiPT09IFRlc3QgNDogQ2xlYW4g VGFibGUgU3RpbGwgTG9hZCBCYWxhbmNlcyA9PT0iCisgICAgIyBDbGVhciB0aGUgbG9nCisgICAg PiBsb2cvcGdwb29sLmxvZworCisgICAgIyBSZWFkIGZyb20gdDIgKG5ldmVyIHdyaXR0ZW4gdG8p IC0gc2hvdWxkIGxvYWQgYmFsYW5jZQorICAgICRQU1FMIHRlc3QgLWMgIlNFTEVDVCAnY2xlYW5f dGFibGVfdGVzdCcgYXMgbWFya2VyLCAqIEZST00gdDI7IiA+IC9kZXYvbnVsbCAyPiYxCisKKyAg ICAjIFNob3VsZCBOT1Qgc2VlIHRyYWNrIHRhYmxlIG11dGF0aW9uIGJsb2NraW5nIG1lc3NhZ2Ug Zm9yIHQyCisgICAgaWYgZ3JlcCAtYSAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNl IHRhYmxlLip0Mi4qd2FzIHJlY2VudGx5IHdyaXR0ZW4iIGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisg ICAgICAgIGVjaG8gIlRlc3QgNCBGQUlMRUQ6IENsZWFuIHRhYmxlIGluY29ycmVjdGx5IG1hcmtl ZCBhcyBzdGFsZSIKKyAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAgICBleGl0IDEKKyAgICBm aQorICAgIGVjaG8gIlRlc3QgNCBQQVNTRUQ6IENsZWFuIHRhYmxlcyBzdGlsbCBsb2FkIGJhbGFu Y2UiCisKKyAgICBlY2hvICI9PT0gVGVzdCA1OiBVUERBVEUgTWFya3MgVGFibGUgYXMgU3RhbGUg PT09IgorICAgICMgQ2xlYXIgdGhlIGxvZworICAgID4gbG9nL3BncG9vbC5sb2cKKworICAgICMg VXBkYXRlIHQyIGFuZCB0aGVuIHJlYWQgLSB1c2Ugc2luZ2xlIGNvbm5lY3Rpb24KKyAgICAkUFNR TCB0ZXN0IDw8RU9GCitVUERBVEUgdDIgU0VUIGkgPSA5OTkgV0hFUkUgaSA9IDA7CitTRUxFQ1Qg J3VwZGF0ZV90ZXN0JyBhcyBtYXJrZXIsICogRlJPTSB0MjsKK0VPRgorCisgICAgIyBTbWFsbCBk ZWxheSB0byBlbnN1cmUgbG9nIGlzIGZsdXNoZWQKKyAgICBzbGVlcCAwLjUKKworICAgIGlmIGdy ZXAgLWEgLXEgImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4qd2FzIHJlY2Vu dGx5IHdyaXR0ZW4iIGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisgICAgICAgIGVjaG8gIlRlc3QgNSBQ QVNTRUQ6IFVQREFURSBtYXJrcyB0YWJsZSBhcyBzdGFsZSIKKyAgICBlbHNlCisgICAgICAgIGVj aG8gIlRlc3QgNSBGQUlMRUQ6IFVQREFURSBkaWQgbm90IG1hcmsgdGFibGUgYXMgc3RhbGUiCisg ICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKworICAgIGVjaG8g Ij09PSBUZXN0IDY6IERFTEVURSBNYXJrcyBUYWJsZSBhcyBTdGFsZSA9PT0iCisgICAgIyBDbGVh ciB0aGUgbG9nCisgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgIyBEZWxldGUgZnJvbSB0MyBh bmQgdGhlbiByZWFkIC0gdXNlIHNpbmdsZSBjb25uZWN0aW9uCisgICAgJFBTUUwgdGVzdCA8PEVP RgorREVMRVRFIEZST00gdDMgV0hFUkUgaSA9IDA7CitTRUxFQ1QgJ2RlbGV0ZV90ZXN0JyBhcyBt YXJrZXIsICogRlJPTSB0MzsKK0VPRgorCisgICAgIyBTbWFsbCBkZWxheSB0byBlbnN1cmUgbG9n IGlzIGZsdXNoZWQKKyAgICBzbGVlcCAwLjUKKworICAgIGlmIGdyZXAgLWEgLXEgImNvdWxkIG5v dCBsb2FkIGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4qd2FzIHJlY2VudGx5IHdyaXR0ZW4iIGxvZy9w Z3Bvb2wubG9nOyB0aGVuCisgICAgICAgIGVjaG8gIlRlc3QgNiBQQVNTRUQ6IERFTEVURSBtYXJr cyB0YWJsZSBhcyBzdGFsZSIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIlRlc3QgNiBGQUlMRUQ6 IERFTEVURSBkaWQgbm90IG1hcmsgdGFibGUgYXMgc3RhbGUiCisgICAgICAgIC4vc2h1dGRvd25h bGwKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKworICAgIGVjaG8gIj09PSBUZXN0IDc6IFRSVU5D QVRFIE1hcmtzIFRhYmxlIGFzIFN0YWxlID09PSIKKyAgICAjIENsZWFyIHRoZSBsb2cKKyAgICA+ IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIENyZWF0ZSBhIGZyZXNoIHRhYmxlIGZvciBUUlVOQ0FU RSB0ZXN0CisgICAgJFBTUUwgdGVzdCAtYyAiQ1JFQVRFIFRBQkxFIHRfdHJ1bmNhdGUoaSBJTlRF R0VSKTsiID4gL2Rldi9udWxsIDI+JjEKKyAgICAkUFNRTCB0ZXN0IC1jICJJTlNFUlQgSU5UTyB0 X3RydW5jYXRlIFZBTFVFUyAoMSksICgyKSwgKDMpOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAg IyBXYWl0IGZvciBhbnkgVFRMIHRvIGV4cGlyZQorICAgIHNsZWVwIDMKKworICAgICMgQ2xlYXIg dGhlIGxvZyBhZ2FpbgorICAgID4gbG9nL3BncG9vbC5sb2cKKworICAgICMgVHJ1bmNhdGUgYW5k IHRoZW4gcmVhZCAtIHVzZSBzaW5nbGUgY29ubmVjdGlvbgorICAgICRQU1FMIHRlc3QgPDxFT0YK K1RSVU5DQVRFIHRfdHJ1bmNhdGU7CitTRUxFQ1QgJ3RydW5jYXRlX3Rlc3QnIGFzIG1hcmtlciwg KiBGUk9NIHRfdHJ1bmNhdGU7CitFT0YKKworICAgICMgU21hbGwgZGVsYXkgdG8gZW5zdXJlIGxv ZyBpcyBmbHVzaGVkCisgICAgc2xlZXAgMC41CisKKyAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBu b3QgbG9hZCBiYWxhbmNlIGJlY2F1c2UgdGFibGUuKndhcyByZWNlbnRseSB3cml0dGVuIiBsb2cv cGdwb29sLmxvZzsgdGhlbgorICAgICAgICBlY2hvICJUZXN0IDcgUEFTU0VEOiBUUlVOQ0FURSBt YXJrcyB0YWJsZSBhcyBzdGFsZSIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIlRlc3QgNyBGQUlM RUQ6IFRSVU5DQVRFIGRpZCBub3QgbWFyayB0YWJsZSBhcyBzdGFsZSIKKyAgICAgICAgZ3JlcCAt YSAtaSAidHJhY2tfdGFibGVfbXV0YXRpb24iIGxvZy9wZ3Bvb2wubG9nIHwgdGFpbCAtMjAKKyAg ICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgZWNobyAi PT09IFRlc3QgODogV0lUSCBDbGF1c2UgKENURSB3aXRoIERFTEVURSkgTWFya3MgVGFibGUgYXMg U3RhbGUgPT09IgorICAgICMgQ2xlYXIgdGhlIGxvZworICAgID4gbG9nL3BncG9vbC5sb2cKKwor ICAgICMgQ3JlYXRlIGEgZnJlc2ggdGFibGUgZm9yIFdJVEggdGVzdAorICAgICRQU1FMIHRlc3Qg LWMgIkNSRUFURSBUQUJMRSB0X2N0ZShpIElOVEVHRVIpOyIgPiAvZGV2L251bGwgMj4mMQorICAg ICRQU1FMIHRlc3QgLWMgIklOU0VSVCBJTlRPIHRfY3RlIFZBTFVFUyAoMSksICgyKSwgKDMpOyIg PiAvZGV2L251bGwgMj4mMQorCisgICAgIyBXYWl0IGZvciBhbnkgVFRMIHRvIGV4cGlyZQorICAg IHNsZWVwIDMKKworICAgICMgQ2xlYXIgdGhlIGxvZyBhZ2FpbgorICAgID4gbG9nL3BncG9vbC5s b2cKKworICAgICMgVXNlIFdJVEggY2xhdXNlIHdpdGggREVMRVRFLCB0aGVuIHJlYWQgZnJvbSB0 aGUgdGFibGUKKyAgICAkUFNRTCB0ZXN0IDw8RU9GCitXSVRIIGRlbGV0ZWQgQVMgKERFTEVURSBG Uk9NIHRfY3RlIFdIRVJFIGkgPSAxIFJFVFVSTklORyAqKQorU0VMRUNUICogRlJPTSBkZWxldGVk OworU0VMRUNUICdjdGVfdGVzdCcgYXMgbWFya2VyLCAqIEZST00gdF9jdGU7CitFT0YKKworICAg ICMgU21hbGwgZGVsYXkgdG8gZW5zdXJlIGxvZyBpcyBmbHVzaGVkCisgICAgc2xlZXAgMC41CisK KyAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2UgdGFibGUu KndhcyByZWNlbnRseSB3cml0dGVuIiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBlY2hv ICJUZXN0IDggUEFTU0VEOiBXSVRIIGNsYXVzZSAoQ1RFKSBtYXJrcyB0YWJsZSBhcyBzdGFsZSIK KyAgICBlbHNlCisgICAgICAgIGVjaG8gIlRlc3QgOCBGQUlMRUQ6IFdJVEggY2xhdXNlIChDVEUp IGRpZCBub3QgbWFyayB0YWJsZSBhcyBzdGFsZSIKKyAgICAgICAgZ3JlcCAtYSAtaSAidHJhY2tf dGFibGVfbXV0YXRpb24iIGxvZy9wZ3Bvb2wubG9nIHwgdGFpbCAtMjAKKyAgICAgICAgLi9zaHV0 ZG93bmFsbAorICAgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgIyBUZXN0IDk6IE1FUkdFIChQ b3N0Z3JlU1FMIDE1KyBvbmx5KQorICAgIFBHX01BSk9SX1ZFUlNJT049JCgkUFNRTCAtdCAtYyAi U0VMRUNUIHN1YnN0cmluZyh2ZXJzaW9uKCkgZnJvbSAnUG9zdGdyZVNRTCAoWzAtOV0rKScpOyIg fCB0ciAtZCAnICcpCisgICAgaWYgWyAiJFBHX01BSk9SX1ZFUlNJT04iIC1nZSAxNSBdIDI+L2Rl di9udWxsOyB0aGVuCisgICAgICAgIGVjaG8gIj09PSBUZXN0IDk6IE1FUkdFIE1hcmtzIFRhYmxl IGFzIFN0YWxlIChQb3N0Z3JlU1FMICRQR19NQUpPUl9WRVJTSU9OKSA9PT0iCisgICAgICAgICMg Q2xlYXIgdGhlIGxvZworICAgICAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAgICAgIyBDcmVh dGUgdGFibGVzIGZvciBNRVJHRSB0ZXN0CisgICAgICAgICRQU1FMIHRlc3QgLWMgIkNSRUFURSBU QUJMRSB0X21lcmdlX3RhcmdldChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCB2YWwgVEVYVCk7IiA+ IC9kZXYvbnVsbCAyPiYxCisgICAgICAgICRQU1FMIHRlc3QgLWMgIkNSRUFURSBUQUJMRSB0X21l cmdlX3NvdXJjZShpZCBJTlRFR0VSLCB2YWwgVEVYVCk7IiA+IC9kZXYvbnVsbCAyPiYxCisgICAg ICAgICRQU1FMIHRlc3QgLWMgIklOU0VSVCBJTlRPIHRfbWVyZ2VfdGFyZ2V0IFZBTFVFUyAoMSwg J29sZCcpOyIgPiAvZGV2L251bGwgMj4mMQorICAgICAgICAkUFNRTCB0ZXN0IC1jICJJTlNFUlQg SU5UTyB0X21lcmdlX3NvdXJjZSBWQUxVRVMgKDEsICduZXcnKSwgKDIsICdpbnNlcnQnKTsiID4g L2Rldi9udWxsIDI+JjEKKworICAgICAgICAjIFdhaXQgZm9yIGFueSBUVEwgdG8gZXhwaXJlCisg ICAgICAgIHNsZWVwIDMKKworICAgICAgICAjIENsZWFyIHRoZSBsb2cgYWdhaW4KKyAgICAgICAg PiBsb2cvcGdwb29sLmxvZworCisgICAgICAgICMgVXNlIE1FUkdFLCB0aGVuIHJlYWQgZnJvbSB0 aGUgdGFyZ2V0IHRhYmxlCisgICAgICAgICRQU1FMIHRlc3QgPDxFT0YKK01FUkdFIElOVE8gdF9t ZXJnZV90YXJnZXQgdAorVVNJTkcgdF9tZXJnZV9zb3VyY2UgcyBPTiB0LmlkID0gcy5pZAorV0hF TiBNQVRDSEVEIFRIRU4gVVBEQVRFIFNFVCB2YWwgPSBzLnZhbAorV0hFTiBOT1QgTUFUQ0hFRCBU SEVOIElOU0VSVCBWQUxVRVMgKHMuaWQsIHMudmFsKTsKK1NFTEVDVCAnbWVyZ2VfdGVzdCcgYXMg bWFya2VyLCAqIEZST00gdF9tZXJnZV90YXJnZXQ7CitFT0YKKworICAgICAgICAjIFNtYWxsIGRl bGF5IHRvIGVuc3VyZSBsb2cgaXMgZmx1c2hlZAorICAgICAgICBzbGVlcCAwLjUKKworICAgICAg ICBpZiBncmVwIC1hIC1xICJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2UgdGFibGUuKndh cyByZWNlbnRseSB3cml0dGVuIiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICAgICAgZWNo byAiVGVzdCA5IFBBU1NFRDogTUVSR0UgbWFya3MgdGFibGUgYXMgc3RhbGUiCisgICAgICAgIGVs c2UKKyAgICAgICAgICAgIGVjaG8gIlRlc3QgOSBGQUlMRUQ6IE1FUkdFIGRpZCBub3QgbWFyayB0 YWJsZSBhcyBzdGFsZSIKKyAgICAgICAgICAgIGdyZXAgLWEgLWkgInRyYWNrX3RhYmxlX211dGF0 aW9uIiBsb2cvcGdwb29sLmxvZyB8IHRhaWwgLTIwCisgICAgICAgICAgICAuL3NodXRkb3duYWxs CisgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgZmkKKyAgICBlbHNlCisgICAgICAgIGVjaG8g Ij09PSBUZXN0IDk6IE1FUkdFIHNraXBwZWQgKHJlcXVpcmVzIFBvc3RncmVTUUwgMTUrLCBoYXZl ICRQR19NQUpPUl9WRVJTSU9OKSA9PT0iCisgICAgZmkKKworICAgIGVjaG8gIj09PSBUZXN0IDEw OiBST0xMQkFDSyBEb2VzIE5PVCBNYXJrIFRhYmxlIGFzIFN0YWxlID09PSIKKyAgICAjIENyZWF0 ZSBhIGZyZXNoIHRhYmxlIGZvciByb2xsYmFjayB0ZXN0CisgICAgJFBTUUwgdGVzdCAtYyAiQ1JF QVRFIFRBQkxFIHRfcm9sbGJhY2soaSBJTlRFR0VSKTsiID4gL2Rldi9udWxsIDI+JjEKKworICAg ICMgV2FpdCBmb3IgYW55IFRUTCB0byBleHBpcmUKKyAgICBzbGVlcCAzCisKKyAgICAjIENsZWFy IHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIFdyaXRlIGluc2lkZSBhIHRy YW5zYWN0aW9uLCB0aGVuIHJvbGxiYWNrCisgICAgJFBTUUwgdGVzdCA8PEVPRgorQkVHSU47CitJ TlNFUlQgSU5UTyB0X3JvbGxiYWNrIFZBTFVFUyAoMSk7CitST0xMQkFDSzsKK1NFTEVDVCAncm9s bGJhY2tfdGVzdCcgYXMgbWFya2VyLCAqIEZST00gdF9yb2xsYmFjazsKK0VPRgorCisgICAgIyBT bWFsbCBkZWxheSB0byBlbnN1cmUgbG9nIGlzIGZsdXNoZWQKKyAgICBzbGVlcCAwLjUKKworICAg ICMgU2hvdWxkIE5PVCBzZWUgdF9yb2xsYmFjayBtYXJrZWQgYXMgc3RhbGUgc2luY2UgdGhlIHdy aXRlIHdhcyByb2xsZWQgYmFjaworICAgIGlmIGdyZXAgLWEgLXEgImNvdWxkIG5vdCBsb2FkIGJh bGFuY2UgYmVjYXVzZSB0YWJsZS4qdF9yb2xsYmFjay4qd2FzIHJlY2VudGx5IHdyaXR0ZW4iIGxv Zy9wZ3Bvb2wubG9nOyB0aGVuCisgICAgICAgIGVjaG8gIlRlc3QgMTAgRkFJTEVEOiBSb2xsZWQt YmFjayB3cml0ZSBpbmNvcnJlY3RseSBtYXJrZWQgdGFibGUgYXMgc3RhbGUiCisgICAgICAgIGdy ZXAgLWEgLWkgInRyYWNrX3RhYmxlX211dGF0aW9uIiBsb2cvcGdwb29sLmxvZyB8IHRhaWwgLTIw CisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKyAgICBlY2hv ICJUZXN0IDEwIFBBU1NFRDogUk9MTEJBQ0sgZG9lcyBub3QgbWFyayB0YWJsZSBhcyBzdGFsZSIK KworICAgIGVjaG8gIj09PSBUZXN0IDExOiBDT01NSVQgTWFya3MgVGFibGUgYXMgU3RhbGUgPT09 IgorICAgICMgQ3JlYXRlIGEgZnJlc2ggdGFibGUgZm9yIGNvbW1pdCB0ZXN0CisgICAgJFBTUUwg dGVzdCAtYyAiQ1JFQVRFIFRBQkxFIHRfY29tbWl0KGkgSU5URUdFUik7IiA+IC9kZXYvbnVsbCAy PiYxCisKKyAgICAjIFdhaXQgZm9yIGFueSBUVEwgdG8gZXhwaXJlCisgICAgc2xlZXAgMworCisg ICAgIyBDbGVhciB0aGUgbG9nCisgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgIyBXcml0ZSBp bnNpZGUgYSB0cmFuc2FjdGlvbiwgdGhlbiBjb21taXQsIHRoZW4gcmVhZAorICAgICRQU1FMIHRl c3QgPDxFT0YKK0JFR0lOOworSU5TRVJUIElOVE8gdF9jb21taXQgVkFMVUVTICgxKTsKK0NPTU1J VDsKK1NFTEVDVCAnY29tbWl0X3Rlc3QnIGFzIG1hcmtlciwgKiBGUk9NIHRfY29tbWl0OworRU9G CisKKyAgICAjIFNtYWxsIGRlbGF5IHRvIGVuc3VyZSBsb2cgaXMgZmx1c2hlZAorICAgIHNsZWVw IDAuNQorCisgICAgaWYgZ3JlcCAtYSAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNl IHRhYmxlLip3YXMgcmVjZW50bHkgd3JpdHRlbiIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAg ICAgZWNobyAiVGVzdCAxMSBQQVNTRUQ6IENPTU1JVCBtYXJrcyB0YWJsZSBhcyBzdGFsZSIKKyAg ICBlbHNlCisgICAgICAgIGVjaG8gIlRlc3QgMTEgRkFJTEVEOiBDb21taXR0ZWQgd3JpdGUgZGlk IG5vdCBtYXJrIHRhYmxlIGFzIHN0YWxlIgorICAgICAgICBncmVwIC1hIC1pICJ0cmFja190YWJs ZV9tdXRhdGlvbiIgbG9nL3BncG9vbC5sb2cgfCB0YWlsIC0yMAorICAgICAgICAuL3NodXRkb3du YWxsCisgICAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBlY2hvICIiCisgICAgZWNobyAiPT09 IEFsbCBUcmFjayBUYWJsZSBNdXRhdGlvbiBUZXN0cyBQQVNTRUQgPT09IgorCisgICAgLi9zaHV0 ZG93bmFsbAorCisgICAgY2QgLi4KK2RvbmUKKworZXhpdCAwCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzaW9uL3Rlc3RzLzA0NC50cmFja190YWJsZV9tdXRhdGlvbl93YXRjaGRvZy90ZXN0 LnNoIGIvc3JjL3Rlc3QvcmVncmVzc2lvbi90ZXN0cy8wNDQudHJhY2tfdGFibGVfbXV0YXRpb25f d2F0Y2hkb2cvdGVzdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAuLmM1 MGMyMTNkNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQ0 LnRyYWNrX3RhYmxlX211dGF0aW9uX3dhdGNoZG9nL3Rlc3Quc2gKQEAgLTAsMCArMSwxODQgQEAK KyMhL3Vzci9iaW4vZW52IGJhc2gKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3Qgc2NyaXB0IGZvciB0cmFj ayB0YWJsZSBtdXRhdGlvbiBnbG9iYWwgY29sZCBzdGFydAorIyBvbiB3YXRjaGRvZyBsZWFkZXIg Y2hhbmdlLgorIworIyBVc2VzICRXQVRDSERPR19TRVRVUCB0byBjcmVhdGUgYSAyLW5vZGUgd2F0 Y2hkb2cgY2x1c3RlciwKKyMgdGhlbiB2ZXJpZmllcyB0aGF0IHdoZW4gdGhlIGxlYWRlciBpcyBz dG9wcGVkIHRoZSBuZXcKKyMgbGVhZGVyIHRyaWdnZXJzIGEgZ2xvYmFsIGNvbGQgc3RhcnQuCisj LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorc291cmNlICRURVNUTElCUworVEVTVERJUj10ZXN0ZGlyCitQU1FMPSRQR0JJ Ti9wc3FsCitzdWNjZXNzX2NvdW50PTAKKworZGlyPWBwd2RgCitybSAtZnIgJFRFU1RESVIKK21r ZGlyICRURVNURElSCitjZCAkVEVTVERJUgorCisjIENyZWF0ZSAyLW5vZGUgd2F0Y2hkb2cgY2x1 c3RlcgorJFdBVENIRE9HX1NFVFVQIC13biAyIHx8IGV4aXQgMQorCisjIEVuc3VyZSBwZXItbm9k ZSBzY3JpcHRzIGFyZSBleGVjdXRhYmxlCisjIChzZWQgLWkgaW4gd2F0Y2hkb2dfc2V0dXAgY2Fu IHN0cmlwIHBlcm1pc3Npb25zKQorY2htb2QgNzU1IHBncG9vbCovc3RhcnRhbGwgcGdwb29sKi9z aHV0ZG93bmFsbAorCisjIEFwcGVuZCB0cmFja190YWJsZV9tdXRhdGlvbiBjb25maWcgdG8gYm90 aCBub2RlcworZm9yIGkgaW4gMCAxCitkbworCWNhdCA+PiBwZ3Bvb2wke2l9L2V0Yy9wZ3Bvb2wu Y29uZiA8PEVPRgorZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPSAnZG1sX2FkYXB0aXZl X2dsb2JhbCcKK3RyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb24gPSAyMDAw CitlbmFibGVfY29uc2Vuc3VzX3dpdGhfaGFsZl92b3RlcyA9IG9uCitsb2dfbWluX21lc3NhZ2Vz ID0gZGVidWcxCitFT0YKK2RvbmUKKworLi9zdGFydGFsbAorZXhwb3J0IFBDUFBBU1NGSUxFPSRk aXIvJFRFU1RESVIvcGdwb29sMC9wY3BwYXNzCisKKyMgV2FpdCBmb3Igd2F0Y2hkb2cgbGlmZWNo ZWNrIG9uIG5vZGUgMAorZWNobyAtbiAid2FpdGluZyBmb3Igd2F0Y2hkb2cgbm9kZSAwIHN0YXJ0 aW5nIHVwLi4uIgorZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAKK2RvCisJZ3JlcCAibGlm ZWNoZWNrIHN0YXJ0ZWQiIFwKKwkJcGdwb29sMC9sb2cvcGdwb29sLmxvZyA+IC9kZXYvbnVsbCAy PiYxCisJaWYgWyAkPyA9IDAgXTsgdGhlbgorCQlicmVhaworCWZpCisJc2xlZXAgMgorZG9uZQor ZWNobyAiZG9uZS4iCisKKyMgVGVzdCAxOiBWZXJpZnkgbGVhZGVyIGNhbWUgdXAKK2VjaG8gIj09 PSBUZXN0IDE6IFdhaXRpbmcgZm9yIHRoZSBwZ3Bvb2wgbGVhZGVyLi4uID09PSIKK2ZvciBpIGlu IDEgMiAzIDQgNSA2IDcgOCA5IDEwCitkbworCWdyZXAgIkkgYW0gdGhlIGNsdXN0ZXIgbGVhZGVy IG5vZGUiIFwKKwkJcGdwb29sMC9sb2cvcGdwb29sLmxvZyA+IC9kZXYvbnVsbCAyPiYxCisJaWYg WyAkPyA9IDAgXTsgdGhlbgorCQlzdWNjZXNzX2NvdW50PSQoKCBzdWNjZXNzX2NvdW50ICsgMSAp KQorCQllY2hvICJUZXN0IDEgUEFTU0VEOiBMZWFkZXIgYnJvdWdodCB1cC4iCisJCWJyZWFrCisJ ZmkKKwllY2hvICJbY2hlY2tdICRpIHRpbWVzIgorCXNsZWVwIDIKK2RvbmUKKworaWYgWyAkc3Vj Y2Vzc19jb3VudCAtbHQgMSBdOyB0aGVuCisJZWNobyAiVGVzdCAxIEZBSUxFRDogTGVhZGVyIGRp ZCBub3Qgc3RhcnQiCisJLi9zaHV0ZG93bmFsbAorCWV4aXQgMQorZmkKKworIyBUZXN0IDI6IFZl cmlmeSBzdGFuZGJ5IGpvaW5lZCBjbHVzdGVyCitlY2hvICI9PT0gVGVzdCAyOiBXYWl0aW5nIGZv ciBzdGFuZGJ5IHRvIGpvaW4uLi4gPT09IgorZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAK K2RvCisJZ3JlcCAic3VjY2Vzc2Z1bGx5IGpvaW5lZCB0aGUgd2F0Y2hkb2cgY2x1c3RlciIgXAor CQlwZ3Bvb2wxL2xvZy9wZ3Bvb2wubG9nID4gL2Rldi9udWxsIDI+JjEKKwlpZiBbICQ/ID0gMCBd OyB0aGVuCisJCXN1Y2Nlc3NfY291bnQ9JCgoIHN1Y2Nlc3NfY291bnQgKyAxICkpCisJCWVjaG8g IlRlc3QgMiBQQVNTRUQ6IFN0YW5kYnkgam9pbmVkLiIKKwkJYnJlYWsKKwlmaQorCWVjaG8gIltj aGVja10gJGkgdGltZXMiCisJc2xlZXAgMgorZG9uZQorCitpZiBbICRzdWNjZXNzX2NvdW50IC1s dCAyIF07IHRoZW4KKwllY2hvICJUZXN0IDIgRkFJTEVEOiBTdGFuZGJ5IGRpZCBub3Qgam9pbiIK KwkuL3NodXRkb3duYWxsCisJZXhpdCAxCitmaQorCisjIFRlc3QgMzogVmVyaWZ5IHRyYWNrX3Rh YmxlX211dGF0aW9uIGluaXRpYWxpemVkCitlY2hvICI9PT0gVGVzdCAzOiBWZXJpZnkgZmVhdHVy ZSBpbml0aWFsaXplZCA9PT0iCitpZiBncmVwIC1hICJ0cmFja190YWJsZV9tdXRhdGlvbjogaW5p dGlhbGl6ZWQiIFwKKwlwZ3Bvb2wwL2xvZy9wZ3Bvb2wubG9nID4gL2Rldi9udWxsIDI+JjE7IHRo ZW4KKwlzdWNjZXNzX2NvdW50PSQoKCBzdWNjZXNzX2NvdW50ICsgMSApKQorCWVjaG8gIlRlc3Qg MyBQQVNTRUQ6IEZlYXR1cmUgaW5pdGlhbGl6ZWQuIgorZWxzZQorCWVjaG8gIlRlc3QgMyBGQUlM RUQ6IEZlYXR1cmUgbm90IGluaXRpYWxpemVkIgorCS4vc2h1dGRvd25hbGwKKwlleGl0IDEKK2Zp CisKKyMgVGVzdCA0OiBTdG9wIGxlYWRlciAocGdwb29sMCkgdG8gdHJpZ2dlciBmYWlsb3Zlcgor ZWNobyAiPT09IFRlc3QgNDogU3RvcHBpbmcgbGVhZGVyLi4uID09PSIKK2NkIHBncG9vbDAKK3Nv dXJjZSAuL2Jhc2hyYy5wb3J0cworJFBHUE9PTF9JTlNUQUxMX0RJUi9iaW4vcGdwb29sIFwKKwkt ZiBldGMvcGdwb29sLmNvbmYgLW0gZiBzdG9wCitjZCAuLgorCitlY2hvICJDaGVja2luZyBzdGFu ZGJ5IGRldGVjdGVkIHNodXRkb3duLi4uIgorZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAK K2RvCisJZ3JlcCAtYSAiaXMgc2h1dHRpbmcgZG93biIgXAorCQlwZ3Bvb2wxL2xvZy9wZ3Bvb2wu bG9nID4gL2Rldi9udWxsIDI+JjEKKwlpZiBbICQ/ID0gMCBdOyB0aGVuCisJCXN1Y2Nlc3NfY291 bnQ9JCgoIHN1Y2Nlc3NfY291bnQgKyAxICkpCisJCWVjaG8gIlRlc3QgNCBQQVNTRUQ6IFNodXRk b3duIGRldGVjdGVkLiIKKwkJYnJlYWsKKwlmaQorCWVjaG8gIltjaGVja10gJGkgdGltZXMiCisJ c2xlZXAgMgorZG9uZQorCitpZiBbICRzdWNjZXNzX2NvdW50IC1sdCA0IF07IHRoZW4KKwllY2hv ICJUZXN0IDQgRkFJTEVEOiBTaHV0ZG93biBub3QgZGV0ZWN0ZWQiCisJLi9zaHV0ZG93bmFsbAor CWV4aXQgMQorZmkKKworIyBUZXN0IDU6IFZlcmlmeSBzdGFuZGJ5IGJlY2FtZSBuZXcgbGVhZGVy CitlY2hvICI9PT0gVGVzdCA1OiBDaGVja2luZyBzdGFuZGJ5IHRha2VzIG92ZXIuLi4gPT09Igor Zm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAKK2RvCisJZ3JlcCAtYSAiSSBhbSB0aGUgY2x1 c3RlciBsZWFkZXIgbm9kZSIgXAorCQlwZ3Bvb2wxL2xvZy9wZ3Bvb2wubG9nID4gL2Rldi9udWxs IDI+JjEKKwlpZiBbICQ/ID0gMCBdOyB0aGVuCisJCXN1Y2Nlc3NfY291bnQ9JCgoIHN1Y2Nlc3Nf Y291bnQgKyAxICkpCisJCWVjaG8gIlRlc3QgNSBQQVNTRUQ6IFN0YW5kYnkgYmVjYW1lIGxlYWRl ci4iCisJCWJyZWFrCisJZmkKKwllY2hvICJbY2hlY2tdICRpIHRpbWVzIgorCXNsZWVwIDIKK2Rv bmUKKworaWYgWyAkc3VjY2Vzc19jb3VudCAtbHQgNSBdOyB0aGVuCisJZWNobyAiVGVzdCA1IEZB SUxFRDogU3RhbmRieSBkaWQgbm90IGJlY29tZSBsZWFkZXIiCisJLi9zaHV0ZG93bmFsbAorCWV4 aXQgMQorZmkKKworIyBUZXN0IDY6IFZlcmlmeSBnbG9iYWwgY29sZCBzdGFydCB3YXMgdHJpZ2dl cmVkCitlY2hvICI9PT0gVGVzdCA2OiBDaGVja2luZyBnbG9iYWwgY29sZCBzdGFydC4uLiA9PT0i Citmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOSAxMAorZG8KKwlncmVwIC1hICJ0cmFja190YWJs ZV9tdXRhdGlvbjogZ2xvYmFsIGNvbGQgc3RhcnQiIFwKKwkJcGdwb29sMS9sb2cvcGdwb29sLmxv ZyA+IC9kZXYvbnVsbCAyPiYxCisJaWYgWyAkPyA9IDAgXTsgdGhlbgorCQlzdWNjZXNzX2NvdW50 PSQoKCBzdWNjZXNzX2NvdW50ICsgMSApKQorCQllY2hvICJUZXN0IDYgUEFTU0VEOiBHbG9iYWwg Y29sZCBzdGFydCB0cmlnZ2VyZWQuIgorCQlicmVhaworCWZpCisJZWNobyAiW2NoZWNrXSAkaSB0 aW1lcyIKKwlzbGVlcCAyCitkb25lCisKKyMgQ2xlYW51cAorLi9zaHV0ZG93bmFsbAorCitlY2hv ICIiCitlY2hvICIkc3VjY2Vzc19jb3VudCBvdXQgb2YgNiBzdWNjZXNzZnVsIgorCitpZiB0ZXN0 ICRzdWNjZXNzX2NvdW50IC1lcSA2Cit0aGVuCisJZWNobyAiPT09IEFsbCBXYXRjaGRvZyBUZXN0 cyBQQVNTRUQgPT09IgorCWV4aXQgMAorZmkKKworZXhpdCAxCmRpZmYgLS1naXQgYS9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CmluZGV4IDkzOTIwMDk2NS4uNDY3ZWMxMTRjIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dApAQCAtNTE5LDYgKzUxOSwxMCBAQCBUYWJsZUxpa2VDbGF1c2UKIFRhYmxlU2FtcGxlQ2xhdXNl CiBUYXJnZXRFbnRyeQogVG9rZW5pemVkTGluZQorVHJhY2tUYWJsZU11dGF0aW9uRW50cnkKK1Ry YWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZQorVHJhY2tUYWJsZU11dGF0aW9uU2htZW0KK1RyYWNr VGFibGVNdXRhdGlvblN0YXRlCiBUcmFuc2FjdGlvbklkCiBUcmFuc2FjdGlvblN0bXQKIFRyYW5z YWN0aW9uU3RtdEtpbmQKZGlmZiAtLWdpdCBhL3NyYy91dGlscy9wb29sX3RyYWNrX3RhYmxlX211 dGF0aW9uLmMgYi9zcmMvdXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uZTc3NzFlN2JmCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL3V0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uYwpAQCAtMCwwICsxLDkwMiBA QAorLyogLSotcGdzcWwtYy0qLSAqLworLyoKKyAqIHBncG9vbDogYSBsYW5ndWFnZSBpbmRlcGVu ZGVudCBjb25uZWN0aW9uIHBvb2wgc2VydmVyIGZvciBQb3N0Z3JlU1FMCisgKiB3cml0dGVuIGJ5 IFRhdHN1byBJc2hpaQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDI2CVBnUG9vbCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAorICogaXRzIGRvY3VtZW50YXRp b24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKKyAqIGdyYW50ZWQs IHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAor ICogY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24KKyAqIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBh bmQgdGhhdCB0aGUgbmFtZSBvZiB0aGUKKyAqIGF1dGhvciBub3QgYmUgdXNlZCBpbiBhZHZlcnRp c2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworICogZGlzdHJpYnV0aW9uIG9mIHRoZSBz b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCisgKiBwZXJtaXNzaW9uLiBU aGUgYXV0aG9yIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUKKyAqIHN1aXRhYmls aXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFz CisgKiBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICogcG9v bF90cmFja190YWJsZV9tdXRhdGlvbi5jOiBJbi1tZW1vcnkgdHJhY2tpbmcgb2YgcmVjZW50bHkK KyAqICAgd3JpdHRlbiB0YWJsZXMgdG8gcHJldmVudCBzdGFsZSByZWFkcyBmcm9tIHJlcGxpY2Fz LgorICoKKyAqIEJhc2VkIG9uIHRoZSAibGFnbGVzcyIgYXJjaGl0ZWN0dXJlIGZyb20gVGFpbG9y IEJyYW5kcy4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+ CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUg InBvb2wuaCIKKyNpbmNsdWRlICJwb29sX2NvbmZpZy5oIgorI2luY2x1ZGUgImNvbnRleHQvcG9v bF9zZXNzaW9uX2NvbnRleHQuaCIKKyNpbmNsdWRlICJ1dGlscy9wb29sX3RyYWNrX3RhYmxlX211 dGF0aW9uLmgiCisjaW5jbHVkZSAidXRpbHMvZWxvZy5oIgorI2luY2x1ZGUgInV0aWxzL3Bvb2xf aXBjLmgiCisjaW5jbHVkZSAidXRpbHMvcGFsbG9jLmgiCisjaW5jbHVkZSAidXRpbHMvcG9vbF9y ZWxjYWNoZS5oIgorCisjZGVmaW5lIERBVEFCQVNFX1RPX09JRF9RVUVSWSBcCisJIlNFTEVDVCBv aWQgRlJPTSBwZ19jYXRhbG9nLnBnX2RhdGFiYXNlIiBcCisJIiBXSEVSRSBkYXRuYW1lID0gJyVz JyIKKworLyoKKyAqIEhlbHBlciBtYWNybzogdHJ1ZSB3aGVuIHRoZSBmZWF0dXJlIGlzIG5vdCBh Y3RpdmUuCisgKi8KKyNkZWZpbmUgVFJBQ0tfVEFCTEVfTVVUQVRJT05fRElTQUJMRUQoKSBcCisJ KHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSAhPSBcCisJIERMQk9X X0RNTF9BREFQVElWRV9HTE9CQUwgfHwgXAorCSB0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbSA9 PSBOVUxMKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBMb2NhbCB2YXJpYWJsZXMKKyAqIC0t LS0tLS0tLS0tLS0tLS0KKyAqLworCisvKiBQb2ludGVyIHRvIHNoYXJlZCBtZW1vcnkgc3RydWN0 dXJlICovCitzdGF0aWMgVHJhY2tUYWJsZU11dGF0aW9uU2htZW0gKnRyYWNrX3RhYmxlX211dGF0 aW9uX3NobWVtID0gTlVMTDsKKworLyogUGVyLXByb2Nlc3MgY29sZCBzdGFydCB0cmFja2luZyAo bm90IGluIHNoYXJlZCBtZW1vcnkpICovCitzdGF0aWMgc3RydWN0IHRpbWV2YWwgcHJvY2Vzc19z dGFydF90aW1lOworc3RhdGljIGJvb2wgY29sZF9zdGFydF9pbml0aWFsaXplZCA9IGZhbHNlOwor CisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBIZWxwZXIgbWFjcm9zIGZvciBmbGV4aWJsZSBhcnJh eXMgaW4gc2hhcmVkIG1lbW9yeQorICogLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qIEdldCBw b2ludGVyIHRvIGJ1Y2tldCBhcnJheSBpbiB0YWJsZSBtYXAgKi8KKyNkZWZpbmUgVEFCTEVfTUFQ X0JVQ0tFVFMobWFwKSBcCisJKChpbnQgKikoKGNoYXIgKikobWFwKSArIFwKKwkJc2l6ZW9mKFRy YWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSkpKQorCisvKiBHZXQgcG9pbnRlciB0byBlbnRyeSBh cnJheSBpbiB0YWJsZSBtYXAgKi8KKyNkZWZpbmUgVEFCTEVfTUFQX0VOVFJJRVMobWFwKSBcCisJ KChUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAqKSgoY2hhciAqKShtYXApICsgXAorCQlzaXplb2Yo VHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxlKSArIFwKKwkJKG1hcCktPm51bV9idWNrZXRzICog c2l6ZW9mKGludCkpKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBTZW1hcGhvcmUgbG9jayBo ZWxwZXJzCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkCit0 YWJsZV9tYXBfbG9jayh2b2lkKQoreworCXBvb2xfc2VtYXBob3JlX2xvY2soVFJBQ0tfVEFCTEVf TVVUQVRJT05fVEFCTEVfU0VNKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0YWJsZV9tYXBf dW5sb2NrKHZvaWQpCit7CisJcG9vbF9zZW1hcGhvcmVfdW5sb2NrKFRSQUNLX1RBQkxFX01VVEFU SU9OX1RBQkxFX1NFTSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqIEhhc2ggZnVuY3Rp b25zCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIEZOVi0xYSBoYXNoIGZvciB0 YWJsZS9kYXRhYmFzZSBvaWQgcGFpcgorICovCitzdGF0aWMgdWludDMyCitmbnYxYV9oYXNoX3Rh YmxlX2tleShpbnQgdGFibGVfb2lkLCBpbnQgZGJvaWQpCit7CisJdWludDMyCQloYXNoID0gMjE2 NjEzNjI2MXU7IC8qIEZOViBvZmZzZXQgYmFzaXMgKi8KKwl1aW50MzIJCWRhdGFbMl07CisJY29u c3QgdW5zaWduZWQgY2hhciAqYnl0ZXM7CisJc2l6ZV90CQlpOworCisJZGF0YVswXSA9ICh1aW50 MzIpIHRhYmxlX29pZDsKKwlkYXRhWzFdID0gKHVpbnQzMikgZGJvaWQ7CisJYnl0ZXMgPSAoY29u c3QgdW5zaWduZWQgY2hhciAqKSBkYXRhOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihkYXRh KTsgaSsrKQorCXsKKwkJaGFzaCBePSBieXRlc1tpXTsKKwkJaGFzaCAqPSAxNjc3NzYxOXU7CQkv KiBGTlYgcHJpbWUgKi8KKwl9CisKKwlyZXR1cm4gaGFzaDsKK30KKworLyogLS0tLS0tLS0tLS0t LS0tLQorICogVGltZSB1dGlsaXRpZXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgor ICogR2V0IGVsYXBzZWQgdGltZSBpbiBtaWNyb3NlY29uZHMgYmV0d2VlbiB0d28gdGltZXZhbHMK KyAqLworc3RhdGljIGludDY0CitlbGFwc2VkX3VzKHN0cnVjdCB0aW1ldmFsICpzdGFydCwgc3Ry dWN0IHRpbWV2YWwgKmVuZCkKK3sKKwlyZXR1cm4gKChpbnQ2NCkgKGVuZC0+dHZfc2VjIC0gc3Rh cnQtPnR2X3NlYykgKiAxMDAwMDAwKQorCQkrIChlbmQtPnR2X3VzZWMgLSBzdGFydC0+dHZfdXNl Yyk7Cit9CisKKy8qCisgKiBHZXQgY3VycmVudCB0aW1lCisgKi8KK3N0YXRpYyB2b2lkCitnZXRf Y3VycmVudF90aW1lKHN0cnVjdCB0aW1ldmFsICp0dikKK3sKKwlnZXR0aW1lb2ZkYXkodHYsIE5V TEwpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBEYXRhYmFzZSBvaWQgbG9va3VwCisg KiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3RhdGljIGludAordHJhY2tfdGFibGVfbXV0YXRp b25fZ2V0X2RhdGFiYXNlX29pZF9pbnRlcm5hbCh2b2lkKQoreworCWludAkJCW9pZCA9IDA7CisJ c3RhdGljIFBPT0xfUkVMQ0FDSEUgKnJlbGNhY2hlOworCVBPT0xfQ09OTkVDVElPTl9QT09MICpi YWNrZW5kOworCVBPT0xfU0VTU0lPTl9DT05URVhUICpzZXNzaW9uX2NvbnRleHQ7CisKKwkvKiBT YWZldHkgY2hlY2s6IG11c3QgaGF2ZSBzaG1lbSBpbml0aWFsaXplZCAqLworCWlmICh0cmFja190 YWJsZV9tdXRhdGlvbl9zaG1lbSA9PSBOVUxMKQorCQlyZXR1cm4gb2lkOworCisJc2Vzc2lvbl9j b250ZXh0ID0gcG9vbF9nZXRfc2Vzc2lvbl9jb250ZXh0KGZhbHNlKTsKKwlpZiAoc2Vzc2lvbl9j b250ZXh0ID09IE5VTEwpCisJCXJldHVybiBvaWQ7CisKKwliYWNrZW5kID0gc2Vzc2lvbl9jb250 ZXh0LT5iYWNrZW5kOworCWlmIChiYWNrZW5kID09IE5VTEwgfHwKKwkJTUFJTl9DT05ORUNUSU9O KGJhY2tlbmQpID09IE5VTEwgfHwKKwkJTUFJTl9DT05ORUNUSU9OKGJhY2tlbmQpLT5zcCA9PSBO VUxMKQorCQlyZXR1cm4gb2lkOworCisJLyogRW5zdXJlIGRhdGFiYXNlIG5hbWUgaXMgdmFsaWQg Ki8KKwlpZiAoTUFJTl9DT05ORUNUSU9OKGJhY2tlbmQpLT5zcC0+ZGF0YWJhc2UgPT0gTlVMTCkK KwkJcmV0dXJuIG9pZDsKKworCWlmICghcmVsY2FjaGUpCisJeworCQlyZWxjYWNoZSA9IHBvb2xf Y3JlYXRlX3JlbGNhY2hlKAorCQkJCQkJCQkJCXBvb2xfY29uZmlnLT5yZWxjYWNoZV9zaXplLAor CQkJCQkJCQkJCURBVEFCQVNFX1RPX09JRF9RVUVSWSwKKwkJCQkJCQkJCQlpbnRfcmVnaXN0ZXJf ZnVuYywKKwkJCQkJCQkJCQlpbnRfdW5yZWdpc3Rlcl9mdW5jLAorCQkJCQkJCQkJCWZhbHNlKTsK KwkJaWYgKHJlbGNhY2hlID09IE5VTEwpCisJCXsKKwkJCWVyZXBvcnQoTE9HLAorCQkJCQkoZXJy bXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogIgorCQkJCQkJCSJlcnJvciBjcmVhdGluZyByZWxj YWNoZSIpKSk7CisJCQlyZXR1cm4gb2lkOworCQl9CisJfQorCisJb2lkID0gKGludCkgKGludHB0 cl90KSBwb29sX3NlYXJjaF9yZWxjYWNoZSgKKwkJCQkJCQkJCQkJCXJlbGNhY2hlLCBiYWNrZW5k LAorCQkJCQkJCQkJCQkJTUFJTl9DT05ORUNUSU9OKGJhY2tlbmQpLT5zcC0+ZGF0YWJhc2UpOwor CXJldHVybiBvaWQ7Cit9CisKK2ludAorcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9nZXRfZGF0 YWJhc2Vfb2lkKHZvaWQpCit7CisJcmV0dXJuIHRyYWNrX3RhYmxlX211dGF0aW9uX2dldF9kYXRh YmFzZV9vaWRfaW50ZXJuYWwoKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogVGFibGUg bXV0YXRpb24gaGFzaCB0YWJsZSBvcGVyYXRpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8K KworLyoKKyAqIEluaXRpYWxpemUgdGFibGUgbXV0YXRpb24gaGFzaCB0YWJsZQorICovCitzdGF0 aWMgdm9pZAordGFibGVfbWFwX2luaXQoVHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxlICptYXAs CisJCQkgICBpbnQgbnVtX2J1Y2tldHMsIGludCBtYXhfZW50cmllcykKK3sKKwlpbnQJCSAgICpi dWNrZXRzOworCVRyYWNrVGFibGVNdXRhdGlvbkVudHJ5ICplbnRyaWVzOworCWludAkJCWk7CisJ aW50CQkJaW52YWxpZCA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7CisKKwlt YXAtPm51bV9idWNrZXRzID0gbnVtX2J1Y2tldHM7CisJbWFwLT5tYXhfZW50cmllcyA9IG1heF9l bnRyaWVzOworCW1hcC0+bnVtX2VudHJpZXMgPSAwOworCW1hcC0+ZnJlZV9saXN0X2hlYWQgPSAw OworCisJYnVja2V0cyA9IFRBQkxFX01BUF9CVUNLRVRTKG1hcCk7CisJZW50cmllcyA9IFRBQkxF X01BUF9FTlRSSUVTKG1hcCk7CisKKwkvKiBJbml0aWFsaXplIGFsbCBidWNrZXRzIHRvIGVtcHR5 ICovCisJZm9yIChpID0gMDsgaSA8IG51bV9idWNrZXRzOyBpKyspCisJCWJ1Y2tldHNbaV0gPSBp bnZhbGlkOworCisJLyogSW5pdGlhbGl6ZSBmcmVlIGxpc3QgLSBjaGFpbiBhbGwgZW50cmllcyAq LworCWZvciAoaSA9IDA7IGkgPCBtYXhfZW50cmllczsgaSsrKQorCXsKKwkJZW50cmllc1tpXS5p bl91c2UgPSBmYWxzZTsKKwkJZW50cmllc1tpXS5uZXh0ID0gKGkgPCBtYXhfZW50cmllcyAtIDEp ID8KKwkJCWkgKyAxIDogaW52YWxpZDsKKwl9CisKKwllcmVwb3J0KERFQlVHMSwKKwkJCShlcnJt c2coInRyYWNrX3RhYmxlX211dGF0aW9uOiAiCisJCQkJCSJ0YWJsZSBtYXAgaW5pdCAlZCBidWNr ZXRzLCAiCisJCQkJCSIlZCBtYXggZW50cmllcyIsCisJCQkJCW51bV9idWNrZXRzLCBtYXhfZW50 cmllcykpKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGFuIGVudHJ5IGZyb20gdGhlIGZyZWUgbGlz dAorICovCitzdGF0aWMgaW50Cit0YWJsZV9tYXBfYWxsb2NfZW50cnkoVHJhY2tUYWJsZU11dGF0 aW9uSGFzaFRhYmxlICptYXApCit7CisJVHJhY2tUYWJsZU11dGF0aW9uRW50cnkgKmVudHJpZXM7 CisJaW50CQkJaWR4OworCWludAkJCWludmFsaWQgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZB TElEX0lOREVYOworCisJZW50cmllcyA9IFRBQkxFX01BUF9FTlRSSUVTKG1hcCk7CisKKwlpZiAo bWFwLT5mcmVlX2xpc3RfaGVhZCA9PSBpbnZhbGlkKQorCQlyZXR1cm4gaW52YWxpZDsKKworCWlk eCA9IG1hcC0+ZnJlZV9saXN0X2hlYWQ7CisJbWFwLT5mcmVlX2xpc3RfaGVhZCA9IGVudHJpZXNb aWR4XS5uZXh0OworCWVudHJpZXNbaWR4XS5pbl91c2UgPSB0cnVlOworCWVudHJpZXNbaWR4XS5u ZXh0ID0gaW52YWxpZDsKKwltYXAtPm51bV9lbnRyaWVzKys7CisKKwlyZXR1cm4gaWR4OworfQor CisvKgorICogRnJlZSBhbiBlbnRyeSBiYWNrIHRvIHRoZSBmcmVlIGxpc3QKKyAqLworc3RhdGlj IHZvaWQKK3RhYmxlX21hcF9mcmVlX2VudHJ5KFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAq bWFwLAorCQkJCQkgaW50IGlkeCkKK3sKKwlUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAqZW50cmll czsKKworCWVudHJpZXMgPSBUQUJMRV9NQVBfRU5UUklFUyhtYXApOworCisJZW50cmllc1tpZHhd LmluX3VzZSA9IGZhbHNlOworCWVudHJpZXNbaWR4XS5uZXh0ID0gbWFwLT5mcmVlX2xpc3RfaGVh ZDsKKwltYXAtPmZyZWVfbGlzdF9oZWFkID0gaWR4OworCW1hcC0+bnVtX2VudHJpZXMtLTsKK30K KworLyoKKyAqIExvb2sgdXAgYSB0YWJsZSBpbiB0aGUgaGFzaCB0YWJsZS4KKyAqIFJldHVybnMg ZW50cnkgaW5kZXggb3IgSU5WQUxJRF9JTkRFWCBpZiBub3QgZm91bmQuCisgKiBNdXN0IGJlIGNh bGxlZCB3aXRoIGxvY2sgaGVsZC4KKyAqLworc3RhdGljIGludAordGFibGVfbWFwX2xvb2t1cChU cmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUgKm1hcCwKKwkJCQkgaW50IHRhYmxlX29pZCwgaW50 IGRib2lkLAorCQkJCSB1aW50MzIgaGFzaCkKK3sKKwlpbnQJCSAgICpidWNrZXRzID0gVEFCTEVf TUFQX0JVQ0tFVFMobWFwKTsKKwlUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAqZW50cmllczsKKwlp bnQJCQlidWNrZXQgPSBoYXNoICUgbWFwLT5udW1fYnVja2V0czsKKwlpbnQJCQlpZHggPSBidWNr ZXRzW2J1Y2tldF07CisJaW50CQkJaW52YWxpZCA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFM SURfSU5ERVg7CisKKwllbnRyaWVzID0gVEFCTEVfTUFQX0VOVFJJRVMobWFwKTsKKworCXdoaWxl IChpZHggIT0gaW52YWxpZCkKKwl7CisJCWlmIChlbnRyaWVzW2lkeF0uaGFzaCA9PSBoYXNoICYm CisJCQllbnRyaWVzW2lkeF0udGFibGVfb2lkID09IHRhYmxlX29pZCAmJgorCQkJZW50cmllc1tp ZHhdLmRib2lkID09IGRib2lkKQorCQl7CisJCQlyZXR1cm4gaWR4OworCQl9CisJCWlkeCA9IGVu dHJpZXNbaWR4XS5uZXh0OworCX0KKworCXJldHVybiBpbnZhbGlkOworfQorCisvKgorICogSW5z ZXJ0IG9yIHVwZGF0ZSBhIHRhYmxlIGVudHJ5LgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBsb2Nr IGhlbGQuCisgKi8KK3N0YXRpYyB2b2lkCit0YWJsZV9tYXBfaW5zZXJ0KFRyYWNrVGFibGVNdXRh dGlvbkhhc2hUYWJsZSAqbWFwLAorCQkJCSBpbnQgdGFibGVfb2lkLCBpbnQgZGJvaWQsCisJCQkJ IHVpbnQzMiBoYXNoLAorCQkJCSBzdHJ1Y3QgdGltZXZhbCAqd3JpdGVfdGltZSkKK3sKKwlpbnQJ CSAgICpidWNrZXRzID0gVEFCTEVfTUFQX0JVQ0tFVFMobWFwKTsKKwlUcmFja1RhYmxlTXV0YXRp b25FbnRyeSAqZW50cmllczsKKwlpbnQJCQlidWNrZXQgPSBoYXNoICUgbWFwLT5udW1fYnVja2V0 czsKKwlpbnQJCQlpZHg7CisJaW50CQkJaW52YWxpZCA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lO VkFMSURfSU5ERVg7CisKKwllbnRyaWVzID0gVEFCTEVfTUFQX0VOVFJJRVMobWFwKTsKKworCS8q IENoZWNrIGlmIGVudHJ5IGFscmVhZHkgZXhpc3RzICovCisJaWR4ID0gdGFibGVfbWFwX2xvb2t1 cChtYXAsIHRhYmxlX29pZCwgZGJvaWQsIGhhc2gpOworCWlmIChpZHggIT0gaW52YWxpZCkKKwl7 CisJCS8qIFVwZGF0ZSBsYXN0IHdyaXRlIHRpbWU7IGtlZXAgZmlyc3Rfd3JpdGVfdGltZSAqLwor CQllbnRyaWVzW2lkeF0ubGFzdF93cml0ZV90aW1lID0gKndyaXRlX3RpbWU7CisJCXJldHVybjsK Kwl9CisKKwkvKiBBbGxvY2F0ZSBuZXcgZW50cnkgKi8KKwlpZHggPSB0YWJsZV9tYXBfYWxsb2Nf ZW50cnkobWFwKTsKKwlpZiAoaWR4ID09IGludmFsaWQpCisJeworCQlpbnQJCQliOworCisJCS8q IFRhYmxlIGlzIGZ1bGwgLSBldmljdCBmaXJzdCBub24tZW1wdHkgYnVja2V0ICovCisJCWZvciAo YiA9IDA7IGIgPCBtYXAtPm51bV9idWNrZXRzOyBiKyspCisJCXsKKwkJCWlmIChidWNrZXRzW2Jd ICE9IGludmFsaWQpCisJCQl7CisJCQkJaW50CQkJdmljdGltID0gYnVja2V0c1tiXTsKKworCQkJ CWJ1Y2tldHNbYl0gPSBlbnRyaWVzW3ZpY3RpbV0ubmV4dDsKKwkJCQl0YWJsZV9tYXBfZnJlZV9l bnRyeShtYXAsIHZpY3RpbSk7CisJCQkJaWR4ID0gdGFibGVfbWFwX2FsbG9jX2VudHJ5KG1hcCk7 CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoaWR4ID09IGludmFsaWQpCisJCXsKKwkJ CWVyZXBvcnQoV0FSTklORywKKwkJCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246ICIK KwkJCQkJCQkiZmFpbGVkIHRvIGFsbG9jYXRlIGVudHJ5ICIKKwkJCQkJCQkiZm9yIG9pZCAlZCAo ZGJvaWQgJWQpIiwKKwkJCQkJCQl0YWJsZV9vaWQsIGRib2lkKSkpOworCQkJcmV0dXJuOworCQl9 CisJfQorCisJLyogSW5pdGlhbGl6ZSBuZXcgZW50cnkgKi8KKwllbnRyaWVzW2lkeF0udGFibGVf b2lkID0gdGFibGVfb2lkOworCWVudHJpZXNbaWR4XS5kYm9pZCA9IGRib2lkOworCWVudHJpZXNb aWR4XS5oYXNoID0gaGFzaDsKKwllbnRyaWVzW2lkeF0uZmlyc3Rfd3JpdGVfdGltZSA9ICp3cml0 ZV90aW1lOworCWVudHJpZXNbaWR4XS5sYXN0X3dyaXRlX3RpbWUgPSAqd3JpdGVfdGltZTsKKwor CS8qIEluc2VydCBhdCBoZWFkIG9mIGJ1Y2tldCBjaGFpbiAqLworCWVudHJpZXNbaWR4XS5uZXh0 ID0gYnVja2V0c1tidWNrZXRdOworCWJ1Y2tldHNbYnVja2V0XSA9IGlkeDsKKworCWVyZXBvcnQo REVCVUcyLAorCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246ICIKKwkJCQkJIm1hcmtl ZCBvaWQgJWQgKGRib2lkICVkKSB3cml0dGVuIiwKKwkJCQkJdGFibGVfb2lkLCBkYm9pZCkpKTsK K30KKworLyoKKyAqIFJlbW92ZSBleHBpcmVkIGVudHJpZXMgZnJvbSB0aGUgdGFibGUgbWFwLgor ICogTXVzdCBiZSBjYWxsZWQgd2l0aCBsb2NrIGhlbGQuCisgKi8KK3N0YXRpYyB2b2lkCit0YWJs ZV9tYXBfY2xlYW51cF9leHBpcmVkKAorCQkJCQkJICBUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFi bGUgKm1hcCwgdWludDY0IHR0bF91cykKK3sKKwlpbnQJCSAgICpidWNrZXRzID0gVEFCTEVfTUFQ X0JVQ0tFVFMobWFwKTsKKwlUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAqZW50cmllczsKKwlzdHJ1 Y3QgdGltZXZhbCBub3c7CisJaW50NjQJCW1heF9zdGFsZV91czsKKwlpbnQJCQlyZW1vdmVkID0g MDsKKwlpbnQJCQliOworCWludAkJCWludmFsaWQgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZB TElEX0lOREVYOworCisJZW50cmllcyA9IFRBQkxFX01BUF9FTlRSSUVTKG1hcCk7CisJZ2V0X2N1 cnJlbnRfdGltZSgmbm93KTsKKworCW1heF9zdGFsZV91cyA9IChpbnQ2NCkgcG9vbF9jb25maWcK KwkJLT50cmFja190YWJsZV9tdXRhdGlvbl9tYXhfc3RhbGVuZXNzICogMTAwMExMOworCisJZm9y IChiID0gMDsgYiA8IG1hcC0+bnVtX2J1Y2tldHM7IGIrKykKKwl7CisJCWludAkJICAgKnByZXZf cHRyID0gJmJ1Y2tldHNbYl07CisJCWludAkJCWlkeCA9IGJ1Y2tldHNbYl07CisKKwkJd2hpbGUg KGlkeCAhPSBpbnZhbGlkKQorCQl7CisJCQlpbnQ2NAkJYWdlOworCQkJaW50NjQJCXRvdGFsX2Fn ZTsKKwkJCWJvb2wJCWV4cGlyZWQ7CisKKwkJCWFnZSA9IGVsYXBzZWRfdXMoCisJCQkJCQkJICZl bnRyaWVzW2lkeF0ubGFzdF93cml0ZV90aW1lLCAmbm93KTsKKwkJCWV4cGlyZWQgPSAoYWdlID4g KGludDY0KSB0dGxfdXMpOworCisJCQkvKgorCQkJICogQWxzbyBldmljdCBlbnRyaWVzIHRoYXQg ZXhjZWVkIG1heF9zdGFsZW5lc3MgZnJvbSBmaXJzdCB3cml0ZS4KKwkJCSAqLworCQkJaWYgKCFl eHBpcmVkICYmIG1heF9zdGFsZV91cyA+IDApCisJCQl7CisJCQkJdG90YWxfYWdlID0gZWxhcHNl ZF91cygKKwkJCQkJCQkJCSAgICZlbnRyaWVzW2lkeF0uZmlyc3Rfd3JpdGVfdGltZSwKKwkJCQkJ CQkJCSAgICZub3cpOworCQkJCWV4cGlyZWQgPSAodG90YWxfYWdlID49IG1heF9zdGFsZV91cyk7 CisJCQl9CisKKwkJCWlmIChleHBpcmVkKQorCQkJeworCQkJCS8qIEVudHJ5IGhhcyBleHBpcmVk IC0gcmVtb3ZlIGl0ICovCisJCQkJaW50CQkJbmV4dCA9IGVudHJpZXNbaWR4XS5uZXh0OworCisJ CQkJKnByZXZfcHRyID0gbmV4dDsKKwkJCQl0YWJsZV9tYXBfZnJlZV9lbnRyeShtYXAsIGlkeCk7 CisJCQkJaWR4ID0gbmV4dDsKKwkJCQlyZW1vdmVkKys7CisJCQl9CisJCQllbHNlCisJCQl7CisJ CQkJcHJldl9wdHIgPSAmZW50cmllc1tpZHhdLm5leHQ7CisJCQkJaWR4ID0gZW50cmllc1tpZHhd Lm5leHQ7CisJCQl9CisJCX0KKwl9CisKKwlpZiAocmVtb3ZlZCA+IDApCisJeworCQllcmVwb3J0 KERFQlVHMSwKKwkJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogIgorCQkJCQkJImNs ZWFuZWQgdXAgJWQgZXhwaXJlZCBlbnRyaWVzIiwKKwkJCQkJCXJlbW92ZWQpKSk7CisJfQorfQor CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqIFB1YmxpYyBBUEkgaW1wbGVtZW50YXRpb24KKyAq IC0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogQ2FsY3VsYXRlIHRoZSB0b3RhbCBzaGFy ZWQgbWVtb3J5IHNpemUgcmVxdWlyZWQKKyAqIGZvciB0aGUgdHJhY2sgdGFibGUgbXV0YXRpb24g ZmVhdHVyZS4KKyAqLworU2l6ZQorcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbV9zaXpl KHZvaWQpCit7CisJU2l6ZQkJc2l6ZSA9IDA7CisJaW50CQkJdGJsX2JrdDsKKwlpbnQJCQl0Ymxf c3o7CisKKwl0YmxfYmt0ID0gcG9vbF9jb25maWctPnRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxl X2J1Y2tldHM7CisJdGJsX3N6ID0gcG9vbF9jb25maWctPnRyYWNrX3RhYmxlX211dGF0aW9uX3Rh YmxlX3NpemU7CisKKwkvKiBNYWluIHN0cnVjdHVyZSAqLworCXNpemUgKz0gc2l6ZW9mKFRyYWNr VGFibGVNdXRhdGlvblNobWVtKTsKKworCS8qIFRhYmxlIG11dGF0aW9uIGhhc2ggdGFibGUgKi8K KwlzaXplICs9IHNpemVvZihUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUpOworCXNpemUgKz0g dGJsX2JrdCAqIHNpemVvZihpbnQpOworCXNpemUgKz0gdGJsX3N6ICogc2l6ZW9mKFRyYWNrVGFi bGVNdXRhdGlvbkVudHJ5KTsKKworCXJldHVybiBzaXplOworfQorCisvKgorICogSW5pdGlhbGl6 ZSBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZXMgZm9yIHRoZQorICogdHJhY2sgdGFibGUgbXV0YXRp b24gZmVhdHVyZS4gIEFsbG9jYXRlcyBhbmQgc2V0cworICogdXAgdGhlIHRhYmxlIG1hcCBhbmQg cGFyc2UgY2FjaGUgaW4gc2hhcmVkIG1lbW9yeS4KKyAqIENhbGxlZCBvbmNlIGZyb20gcGdwb29s IG1haW4gcHJvY2VzcyBhdCBzdGFydHVwLgorICovCit2b2lkCitwb29sX3RyYWNrX3RhYmxlX211 dGF0aW9uX2luaXQodm9pZCkKK3sKKyNpZm5kZWYgUE9PTF9QUklWQVRFCisJU2l6ZQkJc2htZW1f c2l6ZTsKKwljaGFyCSAgICpzaG1lbV9wdHI7CisJVHJhY2tUYWJsZU11dGF0aW9uU3RhdGUgKnN0 OworCWludAkJCXRibF9ia3Q7CisJaW50CQkJdGJsX3N6OworCisJaWYgKHBvb2xfY29uZmlnLT5k aXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSAhPQorCQlETEJPV19ETUxfQURBUFRJVkVfR0xP QkFMKQorCXsKKwkJZXJlcG9ydChERUJVRzEsCisJCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0 YXRpb246ICIKKwkJCQkJCSJmZWF0dXJlIGRpc2FibGVkIikpKTsKKwkJcmV0dXJuOworCX0KKwor CXRibF9ia3QgPSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0 czsKKwl0Ymxfc3ogPSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6 ZTsKKworCXNobWVtX3NpemUgPSBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtX3NpemUo KTsKKworCS8qCisJICogQWxsb2NhdGUgZnJvbSB0aGUgbWFpbiBzaGFyZWQgbWVtb3J5IHNlZ21l bnQuIE1lbW9yeSBpcyB6ZXJvZWQgYnkKKwkgKiBpbml0aWFsaXplX3NoYXJlZF9tZW1vcnlfbWFp bl9zZWdtZW50KCkuCisJICovCisJc2htZW1fcHRyID0gcG9vbF9zaGFyZWRfbWVtb3J5X3NlZ21l bnRfZ2V0X2NodW5rKAorCQkJCQkJCQkJCQkJCSBzaG1lbV9zaXplKTsKKwlpZiAoc2htZW1fcHRy ID09IE5VTEwpCisJeworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJtc2coInRyYWNrX3RhYmxl X211dGF0aW9uOiAiCisJCQkJCQkiZmFpbGVkIHRvIGFsbG9jYXRlICV6dSBieXRlcyIsCisJCQkJ CQlzaG1lbV9zaXplKSkpOworCQlyZXR1cm47CisJfQorCisJLyogU2V0IHVwIHBvaW50ZXJzIHdp dGhpbiBzaGFyZWQgbWVtb3J5ICovCisJdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0gPQorCQko VHJhY2tUYWJsZU11dGF0aW9uU2htZW0gKikgc2htZW1fcHRyOworCXNobWVtX3B0ciArPSBzaXpl b2YoVHJhY2tUYWJsZU11dGF0aW9uU2htZW0pOworCisJdHJhY2tfdGFibGVfbXV0YXRpb25fc2ht ZW0tPnRhYmxlX21hcCA9CisJCShUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUgKikgc2htZW1f cHRyOworCisJLyogSW5pdGlhbGl6ZSB0YWJsZSBtYXAgKi8KKwl0YWJsZV9tYXBfaW5pdCgKKwkJ CQkgICB0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+dGFibGVfbWFwLAorCQkJCSAgIHRibF9i a3QsIHRibF9zeik7CisKKwkvKiBJbml0aWFsaXplIGdsb2JhbCBzdGF0ZSAqLworCXN0ID0gJnRy YWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZTsKKwlzdC0+aW5pdGlhbGl6ZWQgPSB0cnVl OworCXN0LT5jdXJyZW50X3R0bF91cyA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0RFRkFVTFRfVFRM X1VTOworCWdldF9jdXJyZW50X3RpbWUoJnN0LT50dGxfbGFzdF91cGRhdGVkKTsKKwlnZXRfY3Vy cmVudF90aW1lKCZzdC0+bGFzdF9jbGVhbnVwX3RpbWUpOworCXN0LT5nbG9iYWxfY29sZF9zdGFy dF91bnRpbC50dl9zZWMgPSAwOworCXN0LT5nbG9iYWxfY29sZF9zdGFydF91bnRpbC50dl91c2Vj ID0gMDsKKwlzdC0+c3RhdHNfcXVlcmllc19jaGVja2VkID0gMDsKKwlzdC0+c3RhdHNfZm9yY2Vk X3ByaW1hcnkgPSAwOworCXN0LT5zdGF0c19hbGxvd2VkX3JlcGxpY2EgPSAwOworCisJZXJlcG9y dChMT0csCisJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogIgorCQkJCQkiaW5pdGlh bGl6ZWQgd2l0aCAlenUgYnl0ZXMgc2htZW0iLAorCQkJCQlzaG1lbV9zaXplKSkpOworI2VuZGlm Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHBlci1jaGlsZCBwcm9jZXNzIHN0YXRlLgorICogUmVj b3JkcyB0aGUgcHJvY2VzcyBzdGFydCB0aW1lIGZvciBjb2xkIHN0YXJ0CisgKiBwZXJpb2QgdHJh Y2tpbmcuICBDYWxsZWQgd2hlbiBhIGNoaWxkIHByb2Nlc3Mgc3RhcnRzLgorICovCit2b2lkCitw b29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2NoaWxkX2luaXQodm9pZCkKK3sKKwlpbnQJCQlkdXI7 CisKKwlpZiAoVFJBQ0tfVEFCTEVfTVVUQVRJT05fRElTQUJMRUQoKSkKKwkJcmV0dXJuOworCisJ Z2V0X2N1cnJlbnRfdGltZSgmcHJvY2Vzc19zdGFydF90aW1lKTsKKwljb2xkX3N0YXJ0X2luaXRp YWxpemVkID0gdHJ1ZTsKKwlkdXIgPSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25f Y29sZF9zdGFydF9kdXJhdGlvbjsKKworCWVyZXBvcnQoREVCVUcxLAorCQkJKGVycm1zZygidHJh Y2tfdGFibGVfbXV0YXRpb246ICIKKwkJCQkJImNoaWxkIGluaXQsIGNvbGQgc3RhcnQgJWQgbXMi LAorCQkJCQlkdXIpKSk7Cit9CisKKy8qCisgKiBDaGVjayBpZiB0aGUgcHJvY2VzcyBpcyBpbiBj b2xkIHN0YXJ0IHBlcmlvZC4KKyAqIER1cmluZyBjb2xkIHN0YXJ0LCBhbGwgcXVlcmllcyBhcmUg cm91dGVkIHRvCisgKiBwcmltYXJ5IHRvIGF2b2lkIHN0YWxlIHJlYWRzLiAgQ2hlY2tzIGJvdGgK KyAqIHBlci1wcm9jZXNzIGFuZCBnbG9iYWwgKHdhdGNoZG9nKSBjb2xkIHN0YXJ0LgorICovCiti b29sCitwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2luX2NvbGRfc3RhcnQodm9pZCkKK3sKKwlz dHJ1Y3QgdGltZXZhbCBub3c7CisJaW50NjQJCWVsYXBzZWRfbXM7CisJaW50CQkJZHVyOworCVRy YWNrVGFibGVNdXRhdGlvblN0YXRlICpzdDsKKworCWlmIChUUkFDS19UQUJMRV9NVVRBVElPTl9E SVNBQkxFRCgpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlkdXIgPSBwb29sX2NvbmZpZy0+dHJhY2tf dGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9kdXJhdGlvbjsKKwlpZiAoZHVyIDw9IDApCisJCXJl dHVybiBmYWxzZTsKKworCWdldF9jdXJyZW50X3RpbWUoJm5vdyk7CisJc3QgPSAmdHJhY2tfdGFi bGVfbXV0YXRpb25fc2htZW0tPnN0YXRlOworCisJLyogQ2hlY2sgd2F0Y2hkb2ctdHJpZ2dlcmVk IGdsb2JhbCBjb2xkIHN0YXJ0ICovCisJaWYgKHN0LT5nbG9iYWxfY29sZF9zdGFydF91bnRpbC50 dl9zZWMgIT0gMCAmJgorCQllbGFwc2VkX3VzKCZub3csCisJCQkJICAgJnN0LT5nbG9iYWxfY29s ZF9zdGFydF91bnRpbCkgPiAwKQorCXsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyogQ2hlY2sg cGVyLXByb2Nlc3MgY29sZCBzdGFydCAqLworCWlmICghY29sZF9zdGFydF9pbml0aWFsaXplZCkK KwkJcmV0dXJuIGZhbHNlOworCisJZWxhcHNlZF9tcyA9IGVsYXBzZWRfdXMoJnByb2Nlc3Nfc3Rh cnRfdGltZSwgJm5vdykgLyAxMDAwOworCisJaWYgKGVsYXBzZWRfbXMgPCBkdXIpCisJeworCQll cmVwb3J0KERFQlVHMiwKKwkJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogIgorCQkJ CQkJImNvbGQgc3RhcnQgKCVsZC8lZCBtcykiLAorCQkJCQkJKGxvbmcpIGVsYXBzZWRfbXMsIGR1 cikpKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICog VHJpZ2dlciBhIGdsb2JhbCBjb2xkIHN0YXJ0IGZvciBhbGwgcHJvY2Vzc2VzLgorICogU2V0cyB0 aGUgY29sZCBzdGFydCBlbmQgdGltZSBpbiBzaGFyZWQgbWVtb3J5LgorICogQ2FsbGVkIGFmdGVy IHdhdGNoZG9nIGxlYWRlciBjaGFuZ2UgdG8gZm9yY2UgYWxsCisgKiBxdWVyaWVzIHRvIHByaW1h cnkgZHVyaW5nIHRoZSB0cmFuc2l0aW9uLgorICovCit2b2lkCitwb29sX3RyYWNrX3RhYmxlX211 dGF0aW9uX3RyaWdnZXJfZ2xvYmFsX2NvbGRfc3RhcnQodm9pZCkKK3sKKwlzdHJ1Y3QgdGltZXZh bCBub3c7CisJc3RydWN0IHRpbWV2YWwgKnVudGlsOworCWludAkJCWR1cjsKKworCWlmIChUUkFD S19UQUJMRV9NVVRBVElPTl9ESVNBQkxFRCgpKQorCQlyZXR1cm47CisKKwlkdXIgPSBwb29sX2Nv bmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9kdXJhdGlvbjsKKwlpZiAoZHVy IDw9IDApCisJCXJldHVybjsKKworCWdldF9jdXJyZW50X3RpbWUoJm5vdyk7CisJdW50aWwgPSAm dHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRlCisJCS5nbG9iYWxfY29sZF9zdGFydF91 bnRpbDsKKwkqdW50aWwgPSBub3c7CisJdW50aWwtPnR2X3NlYyArPSBkdXIgLyAxMDAwOworCXVu dGlsLT50dl91c2VjICs9IChkdXIgJSAxMDAwKSAqIDEwMDA7CisJaWYgKHVudGlsLT50dl91c2Vj ID49IDEwMDAwMDApCisJeworCQl1bnRpbC0+dHZfc2VjICs9IHVudGlsLT50dl91c2VjIC8gMTAw MDAwMDsKKwkJdW50aWwtPnR2X3VzZWMgJT0gMTAwMDAwMDsKKwl9CisKKwllcmVwb3J0KExPRywK KwkJCShlcnJtc2coInRyYWNrX3RhYmxlX211dGF0aW9uOiAiCisJCQkJCSJnbG9iYWwgY29sZCBz dGFydCBmb3IgJWQgbXMiLAorCQkJCQlkdXIpKSk7Cit9CisKKy8qCisgKiBDaGVjayBpZiBhIHRh YmxlIHdhcyByZWNlbnRseSB3cml0dGVuIChpcyAic3RhbGUiKS4KKyAqIFJldHVybnMgdHJ1ZSBp ZiByZWFkcyBzaG91bGQgZ28gdG8gcHJpbWFyeSBiZWNhdXNlCisgKiB0aGUgdGFibGUgd2FzIHdy aXR0ZW4gd2l0aGluIHRoZSBjdXJyZW50IFRUTCB3aW5kb3cuCisgKi8KK2Jvb2wKK3Bvb2xfdHJh Y2tfdGFibGVfbXV0YXRpb25fdGFibGVfaXNfc3RhbGUoCisJCQkJCQkJCQkJIGludCB0YWJsZV9v aWQsIGludCBkYm9pZCkKK3sKKwlUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUgKm1hcDsKKwlz dHJ1Y3QgdGltZXZhbCBub3c7CisJdWludDY0CQl0dGxfdXM7CisJdWludDMyCQloYXNoOworCWlu dAkJCWlkeDsKKwlib29sCQlpc19zdGFsZSA9IGZhbHNlOworCisJaWYgKFRSQUNLX1RBQkxFX01V VEFUSU9OX0RJU0FCTEVEKCkpCisJCXJldHVybiBmYWxzZTsKKworCWlmICh0YWJsZV9vaWQgPD0g MCB8fCBkYm9pZCA8PSAwKQorCXsKKwkJaXNfc3RhbGUgPSB0cnVlOworCQlnb3RvIHVwZGF0ZV9z dGF0czsKKwl9CisKKwltYXAgPSB0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+dGFibGVfbWFw OworCWhhc2ggPSBmbnYxYV9oYXNoX3RhYmxlX2tleSh0YWJsZV9vaWQsIGRib2lkKTsKKworCXRh YmxlX21hcF9sb2NrKCk7CisKKwlpZHggPSB0YWJsZV9tYXBfbG9va3VwKG1hcCwgdGFibGVfb2lk LCBkYm9pZCwgaGFzaCk7CisJaWYgKGlkeCAhPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElE X0lOREVYKQorCXsKKwkJVHJhY2tUYWJsZU11dGF0aW9uRW50cnkgKmVudHJpZXM7CisJCWludDY0 CQlhZ2U7CisJCWludDY0CQl0b3RhbF9hZ2U7CisJCWludDY0CQltYXhfc3RhbGVfdXM7CisKKwkJ ZW50cmllcyA9IFRBQkxFX01BUF9FTlRSSUVTKG1hcCk7CisJCWdldF9jdXJyZW50X3RpbWUoJm5v dyk7CisJCXR0bF91cyA9IHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZQorCQkJLmN1 cnJlbnRfdHRsX3VzOworCisJCWFnZSA9IGVsYXBzZWRfdXMoCisJCQkJCQkgJmVudHJpZXNbaWR4 XS5sYXN0X3dyaXRlX3RpbWUsICZub3cpOworCQlpc19zdGFsZSA9IChhZ2UgPCAoaW50NjQpIHR0 bF91cyk7CisKKwkJLyoKKwkJICogRW5mb3JjZSBtYXhfc3RhbGVuZXNzIGhhcmQgY2FwOiBubyBl bnRyeSBjYW4gZm9yY2UgcHJpbWFyeSByb3V0aW5nCisJCSAqIGxvbmdlciB0aGFuIG1heF9zdGFs ZW5lc3MgZnJvbSBpdHMgZmlyc3Qgd3JpdGUuCisJCSAqLworCQlpZiAoaXNfc3RhbGUpCisJCXsK KwkJCW1heF9zdGFsZV91cyA9IChpbnQ2NCkgcG9vbF9jb25maWcKKwkJCQktPnRyYWNrX3RhYmxl X211dGF0aW9uX21heF9zdGFsZW5lc3MKKwkJCQkqIDEwMDBMTDsKKwkJCWlmIChtYXhfc3RhbGVf dXMgPiAwKQorCQkJeworCQkJCXRvdGFsX2FnZSA9IGVsYXBzZWRfdXMoCisJCQkJCQkJCQkgICAm ZW50cmllc1tpZHhdLmZpcnN0X3dyaXRlX3RpbWUsCisJCQkJCQkJCQkgICAmbm93KTsKKwkJCQlp ZiAodG90YWxfYWdlID49IG1heF9zdGFsZV91cykKKwkJCQkJaXNfc3RhbGUgPSBmYWxzZTsKKwkJ CX0KKwkJfQorCisJCWVyZXBvcnQoREVCVUcyLAorCQkJCShlcnJtc2coInRyYWNrX3RhYmxlX211 dGF0aW9uOiAiCisJCQkJCQkib2lkICVkIGRib2lkICVkICIKKwkJCQkJCSJlbGFwc2VkPSVsZCB0 dGw9JWx1IHN0YWxlPSVkIiwKKwkJCQkJCXRhYmxlX29pZCwgZGJvaWQsCisJCQkJCQkobG9uZykg YWdlLAorCQkJCQkJKHVuc2lnbmVkIGxvbmcpIHR0bF91cywKKwkJCQkJCWlzX3N0YWxlKSkpOwor CX0KKworCXRhYmxlX21hcF91bmxvY2soKTsKKwordXBkYXRlX3N0YXRzOgorCS8qIFVwZGF0ZSBz dGF0aXN0aWNzIHVzaW5nIHNlbWFwaG9yZSAqLworCWlmICh0cmFja190YWJsZV9tdXRhdGlvbl9z aG1lbSAhPSBOVUxMKQorCXsKKwkJVHJhY2tUYWJsZU11dGF0aW9uU3RhdGUgKnN0OworCisJCXRh YmxlX21hcF9sb2NrKCk7CisJCXN0ID0gJnRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0 ZTsKKwkJc3QtPnN0YXRzX3F1ZXJpZXNfY2hlY2tlZCsrOworCQlpZiAoaXNfc3RhbGUpCisJCQlz dC0+c3RhdHNfZm9yY2VkX3ByaW1hcnkrKzsKKwkJZWxzZQorCQkJc3QtPnN0YXRzX2FsbG93ZWRf cmVwbGljYSsrOworCQl0YWJsZV9tYXBfdW5sb2NrKCk7CisJfQorCisJcmV0dXJuIGlzX3N0YWxl OworfQorCisvKgorICogTWFyayBtdWx0aXBsZSB0YWJsZXMgYXMgcmVjZW50bHkgd3JpdHRlbi4K KyAqIENhbGxlZCBhZnRlciBETUwgcXVlcmllcyBjb21wbGV0ZSB0byByZWNvcmQKKyAqIHdoaWNo IHRhYmxlcyB3ZXJlIG1vZGlmaWVkLgorICovCit2b2lkCitwb29sX3RyYWNrX3RhYmxlX211dGF0 aW9uX21hcmtfdGFibGVzX3dyaXR0ZW4oCisJCQkJCQkJCQkJCSAgY29uc3QgaW50ICp0YWJsZV9v aWRzLCBpbnQgbnVtX3RhYmxlcywgaW50IGRib2lkKQoreworCVRyYWNrVGFibGVNdXRhdGlvbkhh c2hUYWJsZSAqbWFwOworCVRyYWNrVGFibGVNdXRhdGlvblN0YXRlICpzdDsKKwlzdHJ1Y3QgdGlt ZXZhbCBub3c7CisJaW50CQkJaTsKKworCWlmIChUUkFDS19UQUJMRV9NVVRBVElPTl9ESVNBQkxF RCgpKQorCQlyZXR1cm47CisKKwlpZiAobnVtX3RhYmxlcyA8PSAwIHx8IHRhYmxlX29pZHMgPT0g TlVMTCB8fAorCQlkYm9pZCA8PSAwKQorCQlyZXR1cm47CisKKwltYXAgPSB0cmFja190YWJsZV9t dXRhdGlvbl9zaG1lbS0+dGFibGVfbWFwOworCXN0ID0gJnRyYWNrX3RhYmxlX211dGF0aW9uX3No bWVtLT5zdGF0ZTsKKwlnZXRfY3VycmVudF90aW1lKCZub3cpOworCisJdGFibGVfbWFwX2xvY2so KTsKKworCS8qIFBlcmlvZGljYWxseSBjbGVhbiB1cCBleHBpcmVkIGVudHJpZXMgKi8KKwlpZiAo bWFwLT5udW1fZW50cmllcyA+IG1hcC0+bWF4X2VudHJpZXMgKiAzIC8gNCkKKwl7CisJCWludDY0 CQlzaW5jZV9jbGVhbnVwOworCisJCXNpbmNlX2NsZWFudXAgPSBlbGFwc2VkX3VzKAorCQkJCQkJ CQkgICAmc3QtPmxhc3RfY2xlYW51cF90aW1lLCAmbm93KTsKKwkJLyogMTAwbXMgaW50ZXJ2YWwg Ki8KKwkJaWYgKHNpbmNlX2NsZWFudXAgPiAxMDAwMDApCisJCXsKKwkJCXRhYmxlX21hcF9jbGVh bnVwX2V4cGlyZWQoCisJCQkJCQkJCQkgIG1hcCwgc3QtPmN1cnJlbnRfdHRsX3VzKTsKKwkJCXN0 LT5sYXN0X2NsZWFudXBfdGltZSA9IG5vdzsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBu dW1fdGFibGVzOyBpKyspCisJeworCQl1aW50MzIJCWhhc2g7CisJCWludAkJCXRhYmxlX29pZCA9 IHRhYmxlX29pZHNbaV07CisKKwkJaWYgKHRhYmxlX29pZCA+IDApCisJCXsKKwkJCWhhc2ggPSBm bnYxYV9oYXNoX3RhYmxlX2tleSgKKwkJCQkJCQkJCQl0YWJsZV9vaWQsIGRib2lkKTsKKwkJCXRh YmxlX21hcF9pbnNlcnQobWFwLCB0YWJsZV9vaWQsCisJCQkJCQkJIGRib2lkLCBoYXNoLCAmbm93 KTsKKwkJfQorCX0KKworCXRhYmxlX21hcF91bmxvY2soKTsKK30KKworLyoKKyAqIE1hcmsgYSBz aW5nbGUgdGFibGUgYXMgcmVjZW50bHkgd3JpdHRlbi4KKyAqLwordm9pZAorcG9vbF90cmFja190 YWJsZV9tdXRhdGlvbl9tYXJrX3RhYmxlX3dyaXR0ZW4oCisJCQkJCQkJCQkJCSBpbnQgdGFibGVf b2lkLCBpbnQgZGJvaWQpCit7CisJaWYgKHRhYmxlX29pZCA+IDAgJiYgZGJvaWQgPiAwKQorCXsK KwkJY29uc3QgaW50CXRhYmxlc1sxXSA9IHt0YWJsZV9vaWR9OworCisJCXBvb2xfdHJhY2tfdGFi bGVfbXV0YXRpb25fbWFya190YWJsZXNfd3JpdHRlbigKKwkJCQkJCQkJCQkJCQkgIHRhYmxlcywg MSwgZGJvaWQpOworCX0KK30KKworLyoKKyAqIFVwZGF0ZSB0aGUgc3RhbGVuZXNzIFRUTCBiYXNl ZCBvbiBvYnNlcnZlZAorICogcmVwbGljYXRpb24gZGVsYXkuICBOZXcgVFRMID0gZGVsYXkgKiBm YWN0b3IsCisgKiBjbGFtcGVkIHRvIFtkZWZhdWx0X3R0bCwgMSBob3VyXS4KKyAqLwordm9pZAor cG9vbF90cmFja190YWJsZV9tdXRhdGlvbl91cGRhdGVfdHRsKHVpbnQ2NCBkZWxheV91cykKK3sK Kwl1aW50NjQJCW5ld190dGw7CisJZG91YmxlCQlmYWN0b3I7CisJVHJhY2tUYWJsZU11dGF0aW9u U3RhdGUgKnN0OworCisJaWYgKFRSQUNLX1RBQkxFX01VVEFUSU9OX0RJU0FCTEVEKCkpCisJCXJl dHVybjsKKworCWZhY3RvciA9IHBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl90dGxf ZmFjdG9yOworCW5ld190dGwgPSAodWludDY0KSAoZGVsYXlfdXMgKiBmYWN0b3IpOworCWlmIChu ZXdfdHRsIDwgVFJBQ0tfVEFCTEVfTVVUQVRJT05fREVGQVVMVF9UVExfVVMpCisJCW5ld190dGwg PSBUUkFDS19UQUJMRV9NVVRBVElPTl9ERUZBVUxUX1RUTF9VUzsKKworCS8qIE1heGltdW0gVFRM IG9mIDEgaG91ciAqLworCWlmIChuZXdfdHRsID4gMzYwMFVMTCAqIDEwMDAwMDBVTEwpCisJCW5l d190dGwgPSAzNjAwVUxMICogMTAwMDAwMFVMTDsKKworCXN0ID0gJnRyYWNrX3RhYmxlX211dGF0 aW9uX3NobWVtLT5zdGF0ZTsKKwlzdC0+Y3VycmVudF90dGxfdXMgPSBuZXdfdHRsOworCWdldF9j dXJyZW50X3RpbWUoJnN0LT50dGxfbGFzdF91cGRhdGVkKTsKKworCWVyZXBvcnQoREVCVUcxLAor CQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246ICIKKwkJCQkJIlRUTD0lbHUgdXMgKGRl bGF5PSVsdSBmYWN0b3I9JS4xZikiLAorCQkJCQkodW5zaWduZWQgbG9uZykgbmV3X3R0bCwKKwkJ CQkJKHVuc2lnbmVkIGxvbmcpIGRlbGF5X3VzLAorCQkJCQlmYWN0b3IpKSk7Cit9Ci0tIAoyLjU0 LjAKCg== --0000000000004ca7f80654be5621--