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.98.2) (envelope-from ) id 1xLRFm-00000001Vzl-1xA5 for pgsql-hackers@arkaria.postgresql.org; Mon, 26 Oct 2026 20:25:12 +0000 Received: from localhost ([127.0.0.1]:53882 helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.98.2) (envelope-from ) id 1xLRFl-00000007iCB-13xM for pgsql-hackers@arkaria.postgresql.org; Mon, 26 Oct 2026 20:25:09 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]:58766) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1xLRFk-00000007iC3-2Azc for pgsql-hackers@lists.postgresql.org; Mon, 26 Oct 2026 20:25:08 +0000 Received: from mail-4398.protonmail.ch ([185.70.43.98]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1xLRFh-000000017ks-2ATG for pgsql-hackers@lists.postgresql.org; Mon, 26 Oct 2026 20:25:08 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=burd.me; s=protonmail; t=1793046299; x=1793305499; bh=m4/UnLX09dFkNX7zMjU7FR2Dc+gxYOqJFeY/SHynL3c=; h=Date:To:From:Cc:Subject:Message-ID:Feedback-ID:From:To:Cc:Date: Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector; b=OO8COM79WS5pasxEwc3OvG9dstU09HFkdJ2tz3GeyAzMAEXCTkXcOa1u8Zk5MiRlX CkQbpSdb3jfTkCH/4usJiRMemVgM0pOKIT8vA/VQMbk7RIe+uAbdfvU0+xk51cu9Kc PnbAx2f3i06ehlbj/eryMAjLFD2Jo/ORfUha67oKy7worbyTsR9ZmMDcSARoDctIAx HaQxiAQ+NUdEAYU7P/LPBJtpyGldqeqVQxjKUWuJfrv18vQfcjB1oSO/o9z9u8XTn4 KzAbVzWR+prWi4Mis+HJdxX0qAzZg8gLg1VZxYHlHBUu5ItF/sm5nDN47LZT7SpaKU iQ3DgwwGdHKzw== Date: Mon, 26 Oct 2026 20:24:53 +0000 To: pgsql-hackers@lists.postgresql.org From: Greg Burd Cc: Peter Geoghegan Subject: nbtree: opt-in leaf key prefix compression Message-ID: Feedback-ID: 2668248:user:proton X-Pm-Message-ID: e703bea7037cc61ada033207f42441b9e017292c MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1=_DRlGM10V29RE7uxMMtnNY2MOrcrNeX9pLl6ag51FQw" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --b1=_DRlGM10V29RE7uxMMtnNY2MOrcrNeX9pLl6ag51FQw Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hello Hackers, This is a patch that adds leaf key prefix compression to nbtree, behind a new per-index storage parameter, prefix_compression, off by default. It's something I started a long time ago when primarily working on JSONB-like data storage/indexing/etc. in Postgres when a colleague pointed out that it didn't yet exist and his measurements showed that it should. He wasn't wrong. It's a solid win for performance and overhead IMO, but YMMV. The motivation is simple: indexes on keys that share a long leading prefix (URLs, reverse-DNS names, a leading JSONB path, a tenant-id prefix) spend most of their bytes storing that prefix over and over. Store it once per page and the index gets a few times smaller, which means fewer pages to read and less WAL to write. All good things. A URL index in my tests is about 3x smaller; an index with little shared prefix is unchanged (the page is left alone when a prefix does not pay off). Overview: When a leaf page is written as a whole (during an index build, as a split half, or as the result of a deduplication pass) and its data items share leading bytes in their first key column, the page is rebuilt in a new BTP_PREFIX format: one PREFIX item after the high key holds the shared bytes, and each data item is stored "coded", with its copy of the shared prefix replaced by a one-byte length. Reads of a leaf data item go through a single accessor, _bt_getitem(), that decodes on demand into caller-supplied scratch; high keys and internal-page downlinks are never coded and are read with the existing PageGetItem(). This is a per-page opt-in with no on-disk version change: BTREE_VERSION and the catalog version are not touched. A page is converted only when it is next written as a whole, never by an ordinary insert, VACUUM, or key-range change. So an existing index "faults forward": old-format and new-format pages coexist in the same index indefinitely. That is what makes the feature safe across pg_upgrade, physical replication, and standbys with no REINDEX: a replica that has not yet replayed a page's conversion still reads the old format correctly, and turning the parameter back off stops new conversions while existing coded pages stay readable. Performance: Release builds (cassert=3Doff), origin/master vs the patch, on a c7i.4xlarge, pgbench, fsync and synchronous_commit off so the index effects are not masked by WAL flush latency. "off" is the patch with the parameter off (the default path), to show it is free when unused. index size (pages), CREATE INDEX on ~500k rows: shared prefix / key master patch=3Don --------------------- ------ -------- URL-like, distinct 10531 7848 (-25%) JSONB path, distinct 11636 5782 (-50%) int (no shared prefix) (same) (same, page left uncompressed) insert throughput (one row at a time into an existing index): workload TPS master->on WAL/txn master->on --------------- ------------------ ------------------ insert_random 143.7k -> 142.8k 292 B -> 226 B insert_ascending 144.9k -> 139.4k 277 B -> 228 B WAL per insert is slightly *below* master because the coded tuple logged is full-page-image penalty. CREATE INDEX WAL is roughly half of master's on these keys. The "off" column tracks master within noise on every workload, so the default path is not paying for a feature it is not using. Deduplication composes with it: Prefix compression and deduplication stack. A build deduplicates first and then codes the finished page, so a duplicate-heavy prefix index is no larger than a plain one: the posting lists collapse the duplicates, and the prefix then front-codes the distinct keys that remain. Across a duplication sweep the prefix index is <=3D plain everywhere, and smaller once there is any shared prefix among the distinct keys. Without this the earlier drafts were several times *larger* on duplicate-heavy data, which is the trap to avoid if you try this yourself. Bottom-up index deletion runs on coded pages unchanged, since it only removes items and never rewrites survivors. A runtime deduplication pass on a coded page decodes its items first, and because a coded page can hold more logical data than fits plain, the pass aborts cleanly and the page splits instead when the decoded set would overflow, it never errors out. WAL: The part I most want eyes on. Replaying a coded page byte-for-byte is the hard requirement (wal_consistency_checking has to pass on a standby), and the obvious implementation (a forced full-page image on every change to a coded page) costs a whole page of WAL per insert. Instead redo reconstructs the coded bytes the way the primary did. The catch is that redo has no relcache and cannot run the prefix-choosing heuristic, so the primary logs the prefix it chose, and a single Relation-free layout routine (_bt_split_leaf_layout) is shared by the primary and redo so both emit identical bytes from the same inputs: - an in-place insert logs the coded tuple; the standard insert redo adds it verbatim; - a split logs each half's chosen prefix plus the right half's plain items, and redo lays each half out coded; - a deduplication logs the chosen prefix plus the deduped plain items. Each path keeps a bounded fallback to a forced image for a pathologically compressible page whose plain payload would exceed one block, so the logged payload can never exceed BLCKSZ. What reviewers should know going in: Things I already know are worth a hard look, so you don't have to find them cold: - A posting-list split on a coded page, and a deduplication pass whose re-compression then declines, are the two fiddliest WAL paths. I had bugs in both (a palloc inside a critical section on the first; redo not decoding on the second) and have fixed them, but they are where I would point a reviewer first. I could not turn the second into a failing wal_consistency_checking case and would value a second opinion on whether the path is actually reachable. - Every read of a leaf *data* item must go through _bt_getitem(). I audited the readers; the one I missed on the first pass was the array-scan look-ahead in _bt_readpage(), now fixed. A reviewer's instinct for "is this a data item or a pivot?" is exactly the check I want applied to the rest. - The split point is chosen on coded sizes, which breaks the usual assumption that a leaf holds at most two pages' worth of data; there is a guard against a degenerate split that would leave the left page with no data items. nbtsplitloc.c is worth a read for that reason. - Runtime deduplication on a coded page is the one place that can decline and fall through to a split rather than reclaim space. That is deliberate (the decoded set can exceed a page), but it means a duplicate-heavy index populated by one-row-at-a-time inserts is less compact than the same index built with CREATE INDEX. I think that is an acceptable trade; it may warrant a doc note. - amcheck decodes every leaf data item, including under heapallindexed. Tested with wal_consistency_checking=3Dall on a primary and a streaming standby across insert, split, deduplication, delete and vacuum workloads, through immediate-crash recovery, and across a pg_upgrade that carries both page formats in one index. -Werror, --enable-cassert and --enable-injection-points clean; make check, the isolation, amcheck, pageinspect and pgstattuple suites, and 027_stream_regress all pass. Open questions: (a) Is a per-page opt-in with no version bump the right contract? I chose it so the feature needs no REINDEX and is a no-op risk for anyone who leaves it off, at the cost of old and new page formats living in one index forever. (b) Is the shared primary/redo layout routine the right factoring, or would you rather the build, split and dedup paths share even more (a common "code a leaf from plain items + prefix" helper)? (c) The forced-image fallback threshold is "plain payload > one block". It essentially never fires on real data; is that the right place to draw the line? The patch is one commit against master. I'd appreciate review of the approach and the code, and I'm happy to work through whatever it turns up. best. -greg --b1=_DRlGM10V29RE7uxMMtnNY2MOrcrNeX9pLl6ag51FQw Content-Type: text/plain; charset=us-ascii; name=0001-nbtree-opt-in-leaf-key-prefix-compression.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0001-nbtree-opt-in-leaf-key-prefix-compression.patch RnJvbSBiMTc2NDU5OWU1NGU2YjFhNzAxYjRiZTBjN2VmYjFlMzk1ZGUxN2EwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQ0KRnJvbTogR3JlZyBCdXJkIDxncmVnQGJ1cmQubWU+DQpEYXRlOiBNb24s IDI2IE9jdCAyMDI2IDE1OjI1OjU4IC0wNDAwDQpTdWJqZWN0OiBbUEFUQ0hdIG5idHJlZTogb3B0 LWluIGxlYWYga2V5IHByZWZpeCBjb21wcmVzc2lvbg0KDQpBZGQgbGVhZiBrZXkgcHJlZml4IGNv bXByZXNzaW9uIHRvIG5idHJlZSwgY29udHJvbGxlZCBieSBhIG5ldw0KcGVyLWluZGV4IHN0b3Jh Z2UgcGFyYW1ldGVyLCBwcmVmaXhfY29tcHJlc3Npb24sIHRoYXQgaXMgb2ZmIGJ5IGRlZmF1bHQu DQoNCldoZW4gYSBsZWFmIHBhZ2UgaXMgd3JpdHRlbiBhcyBhIHdob2xlIC0tIGR1cmluZyBhbiBp bmRleCBidWlsZCwgYXMgYQ0Kc3BsaXQgaGFsZiwgb3IgYXMgdGhlIHJlc3VsdCBvZiBhIGRlZHVw bGljYXRpb24gcGFzcyAtLSBhbmQgaXRzIGRhdGENCml0ZW1zIHNoYXJlIGEgbGVhZGluZyBieXRl LXByZWZpeCBvZiB0aGVpciBmaXJzdCBrZXkgY29sdW1uLCB0aGUgcGFnZSBpcw0KcmVidWlsdCBp biB0aGUgQlRQX1BSRUZJWCBmb3JtYXQ6IGEgc2luZ2xlIFBSRUZJWCBpdGVtIGFmdGVyIHRoZSBo aWdoDQprZXkgaG9sZHMgdGhlIHNoYXJlZCBieXRlcywgYW5kIGVhY2ggZGF0YSBpdGVtIGlzIHN0 b3JlZCAiY29kZWQiIChpdHMNCmNvcHkgb2YgdGhlIHNoYXJlZCBwcmVmaXggcmVwbGFjZWQgYnkg YSBvbmUtYnl0ZSBsZW5ndGgpLiAgUmVhZHMgb2YgYQ0KbGVhZiBkYXRhIGl0ZW0gZnVubmVsIHRo cm91Z2ggX2J0X2dldGl0ZW0oKSwgd2hpY2ggZGVjb2RlcyBvbiBkZW1hbmQ7DQpoaWdoIGtleXMg YW5kIGludGVybmFsLXBhZ2UgZG93bmxpbmtzIGFyZSBuZXZlciBjb2RlZCBhbmQgYXJlIHJlYWQg d2l0aA0KdGhlIGV4aXN0aW5nIFBhZ2VHZXRJdGVtKCkuDQoNClRoZSBmZWF0dXJlIGlzIGRlbGli ZXJhdGVseSBhIHBlci1wYWdlIG9wdC1pbiB3aXRoIG5vIG9uLWRpc2sgdmVyc2lvbg0KY2hhbmdl OiBCVFJFRV9WRVJTSU9OIGFuZCB0aGUgY2F0YWxvZyB2ZXJzaW9uIGFyZSB1bnRvdWNoZWQuICBB IHBhZ2UgaXMNCmNvbnZlcnRlZCBvbmx5IHdoZW4gaXQgaXMgbmV4dCB3cml0dGVuIHdob2xlLCBu ZXZlciBieSBhbiBpbnNlcnQsIFZBQ1VVTQ0Kb3Iga2V5LXJhbmdlIGNoYW5nZSwgc28gY29tcHJl c3Npb24gImZhdWx0cyBmb3J3YXJkIiBvbiBhbiBleGlzdGluZw0KaW5kZXguICBPbGQtZm9ybWF0 IGFuZCBuZXctZm9ybWF0IHBhZ2VzIGNvZXhpc3QgaW4gdGhlIHNhbWUgaW5kZXgsIHdoaWNoDQpr ZWVwcyBwZ191cGdyYWRlLCBwaHlzaWNhbCByZXBsaWNhdGlvbiwgYW5kIHN0YW5kYnlzIHdvcmtp bmcgd2l0aCBubw0KUkVJTkRFWDogYSByZXBsaWNhIHRoYXQgaGFzIG5vdCB5ZXQgc2VlbiBhIHBh Z2UncyBjb252ZXJzaW9uIHN0aWxsIHJlYWRzDQppdCBjb3JyZWN0bHksIGFuZCB0dXJuaW5nIHRo ZSBwYXJhbWV0ZXIgb2ZmIChBTFRFUiBJTkRFWCAuLi4gU0VUKSBzdG9wcw0KbmV3IGNvbnZlcnNp b25zIHdoaWxlIGxlYXZpbmcgZXhpc3RpbmcgY29kZWQgcGFnZXMgcmVhZGFibGUuDQoNCkRlZHVw bGljYXRpb24gYW5kIHByZWZpeCBjb21wcmVzc2lvbiBjb21wb3NlIHJhdGhlciB0aGFuIGNvbXBl dGUuICBBDQpidWlsZCBkZWR1cGxpY2F0ZXMgZmlyc3QgYW5kIHRoZW4gY29kZXMgdGhlIGZpbmlz aGVkIHBhZ2UsIHNvIGENCmR1cGxpY2F0ZS1oZWF2eSBwcmVmaXggaW5kZXggaXMgbm8gbGFyZ2Vy IHRoYW4gYSBwbGFpbiBvbmU7IGRpc3RpbmN0DQprZXlzIHdpdGggYSBzaGFyZWQgcHJlZml4IChV Ukwgb3IgSlNPTkIgY29sdW1ucywgdGhlIG1vdGl2YXRpbmcgY2FzZSkNCmFyZSB0eXBpY2FsbHkg YSBmZXcgdGltZXMgc21hbGxlci4gIEJvdHRvbS11cCBpbmRleCBkZWxldGlvbiBydW5zIG9uDQpj b2RlZCBwYWdlcyB1bmNoYW5nZWQsIHNpbmNlIGl0IG9ubHkgcmVtb3ZlcyBpdGVtcy4gIEEgcnVu dGltZQ0KZGVkdXBsaWNhdGlvbiBwYXNzIG9uIGEgY29kZWQgcGFnZSBkZWNvZGVzIGZpcnN0LCBh bmQgYmVjYXVzZSBhIGNvZGVkDQpwYWdlIGNhbiBob2xkIG1vcmUgbG9naWNhbCBkYXRhIHRoYW4g Zml0cyBwbGFpbiwgdGhlIHBhc3MgYWJvcnRzIGNsZWFubHkNCmFuZCB0aGUgcGFnZSBzcGxpdHMg aW5zdGVhZCB3aGVuIHRoZSBkZWNvZGVkIHNldCB3b3VsZCBvdmVyZmxvdy4NCg0KV0FMIHJlcGxh eSByZXByb2R1Y2VzIHRoZSBjb2RlZCBieXRlcyB3aXRob3V0IHJlc29ydGluZyB0byBmdWxsLXBh Z2UNCmltYWdlcyBpbiB0aGUgY29tbW9uIHBhdGhzLiAgQSBSZWxhdGlvbi1mcmVlIGxheW91dCBy b3V0aW5lLA0KX2J0X3NwbGl0X2xlYWZfbGF5b3V0KCksIGlzIHNoYXJlZCBieSB0aGUgcHJpbWFy eSBhbmQgcmVkbyBzbyBib3RoIGVtaXQNCmlkZW50aWNhbCBieXRlcyBmcm9tIHRoZSBzYW1lIGxv Z2dlZCBpbnB1dHM6IHJlZG8gaGFzIG5vIHJlbGNhY2hlIGFuZA0KY2Fubm90IHJ1biB0aGUgcHJl Zml4LWNob29zaW5nIGhldXJpc3RpYywgc28gdGhlIHByaW1hcnkgbG9ncyB0aGUgcHJlZml4DQpp dCBjaG9zZS4gIEFuIGluLXBsYWNlIGluc2VydCBsb2dzIHRoZSBjb2RlZCB0dXBsZTsgYSBzcGxp dCBsb2dzIGVhY2gNCmhhbGYncyBjaG9zZW4gcHJlZml4IHBsdXMgdGhlIHJpZ2h0IGhhbGYncyBw bGFpbiBpdGVtczsgYSBwcmVmaXgNCmRlZHVwbGljYXRpb24gbG9ncyB0aGUgY2hvc2VuIHByZWZp eCBwbHVzIHRoZSBkZWR1cGVkIHBsYWluIGl0ZW1zLiAgRWFjaA0KcGF0aCBrZWVwcyBhIGJvdW5k ZWQgZmFsbGJhY2sgdG8gYSBmb3JjZWQgaW1hZ2UgZm9yIGEgcGF0aG9sb2dpY2FsbHkNCmNvbXBy ZXNzaWJsZSBwYWdlIHdob3NlIHBsYWluIHBheWxvYWQgd291bGQgZXhjZWVkIG9uZSBibG9jay4N Cg0KYW1jaGVjayBkZWNvZGVzIGV2ZXJ5IGxlYWYgZGF0YSBpdGVtLCBpbmNsdWRpbmcgdW5kZXIg aGVhcGFsbGluZGV4ZWQuDQpUaGUgY3JlYXRlX2luZGV4IGRvY3VtZW50YXRpb24gYW5kIHRoZSBu YnRyZWUgUkVBRE1FIGRlc2NyaWJlIHRoZQ0KcGFyYW1ldGVyIGFuZCB0aGUgb24tZGlzayBmb3Jt YXQuICBUZXN0ZWQgd2l0aA0Kd2FsX2NvbnNpc3RlbmN5X2NoZWNraW5nPWFsbCBvbiBhIHByaW1h cnkgYW5kIGEgc3RyZWFtaW5nIHN0YW5kYnkgYWNyb3NzDQppbnNlcnQsIHNwbGl0LCBkZWR1cGxp Y2F0aW9uLCBkZWxldGUgYW5kIHZhY3V1bSB3b3JrbG9hZHMsIHRocm91Z2ggY3Jhc2gNCnJlY292 ZXJ5LCBhbmQgYWNyb3NzIGEgcGdfdXBncmFkZSB0aGF0IGNhcnJpZXMgYm90aCBwYWdlIGZvcm1h dHMuDQotLS0NCiBjb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jICAgICAgICAgICB8ICA3 MiArLQ0KIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwgICAgICAgIHwgIDM1ICsN CiBzcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMuYyAgICB8ICAxMCArDQogc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9NYWtlZmlsZSAgICAgICAgfCAgIDEgKw0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FICAgICAgICAgIHwgIDcxICsrDQogc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9tZXNvbi5idWlsZCAgICAgfCAgIDEgKw0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0ZGVkdXAuYyAgICAgIHwgMjU4ICsrKysrKy0NCiBzcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idGluc2VydC5jICAgICB8IDM4MCArKysrKysrKy0tDQogc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRwYWdlLmMgICAgICAgfCAgMzEgKy0NCiBzcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHByZWZpeC5jICAgICB8IDgxNCArKysrKysrKysrKysrKysrKysrKysrDQog c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jICAgfCAgMjMgKy0NCiBzcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jICAgICAgICB8ICAgNiArLQ0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMgICAgIHwgICAzICstDQogc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRzb3J0LmMgICAgICAgfCAgNTQgKy0NCiBzcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHNwbGl0bG9jLmMgICB8ICA4NCArKy0NCiBzcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idHV0aWxzLmMgICAgICB8ICAgNCArLQ0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0eGxvZy5jICAgICAgIHwgMzA5ICsrKysrKystDQogc3JjL2luY2x1ZGUvYWNjZXNzL25i dHJlZS5oICAgICAgICAgICAgICAgfCAxNDcgKysrLQ0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9uYnR4 bG9nLmggICAgICAgICAgICAgIHwgIDQ0ICstDQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9i dHJlZV9pbmRleC5vdXQgfCAyNTYgKysrKysrKw0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2J0cmVl X2luZGV4LnNxbCAgICAgIHwgMTY3ICsrKysrDQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgICAgICAgICAgfCAgIDIgKw0KIDIyIGZpbGVzIGNoYW5nZWQsIDI2NTUgaW5zZXJ0aW9u cygrKSwgMTE3IGRlbGV0aW9ucygtKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHByZWZpeC5jDQoNCmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2sv dmVyaWZ5X25idHJlZS5jIGIvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYw0KaW5kZXgg OTdjNTE5YjQ3ZjUuLjY5YWFmNmJiYzVkIDEwMDY0NA0KLS0tIGEvY29udHJpYi9hbWNoZWNrL3Zl cmlmeV9uYnRyZWUuYw0KKysrIGIvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYw0KQEAg LTE1OCw3ICsxNTgsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgQnRyZWVMYXN0VmlzaWJsZUVudHJ5DQog CU9mZnNldE51bWJlciBvZmZzZXQ7CQkvKiBPZmZzZXQgb24gaW5kZXggYmxvY2sgKi8NCiAJaW50 CQkJcG9zdGluZ0luZGV4OwkvKiBOdW1iZXIgaW4gdGhlIHBvc3RpbmcgbGlzdCAoLTEgZm9yDQog CQkJCQkJCQkgKiBub24tZGVkdXBsaWNhdGVkIHR1cGxlcykgKi8NCi0JSXRlbVBvaW50ZXIgdGlk OwkJCS8qIEhlYXAgdGlkICovDQorCUl0ZW1Qb2ludGVyIHRpZDsJCQkvKiBIZWFwIHRpZCwgb3Ig TlVMTDsgcG9pbnRzIGF0IHRpZGRhdGEgKi8NCisJSXRlbVBvaW50ZXJEYXRhIHRpZGRhdGE7CS8q IE93biBzdG9yYWdlIGZvciAqdGlkOiBhIHByZWZpeC1jb2RlZCBsZWFmDQorCQkJCQkJCQkgKiB0 dXBsZSBpcyBkZWNvZGVkIGludG8gYSBzY3JhdGNoIGJ1ZmZlciB0aGF0DQorCQkJCQkJCQkgKiBp cyByZXVzZWQgb24gdGhlIG5leHQgbG9vcCBpdGVyYXRpb24sIHNvIHdlDQorCQkJCQkJCQkgKiBt dXN0IGtlZXAgdGhlIGhlYXAgVElEIGJ5IHZhbHVlLCBub3QgcG9pbnQNCisJCQkJCQkJCSAqIGlu dG8gdGhlICh0cmFuc2llbnQpIGRlY29kZWQgdHVwbGUgKi8NCiB9IEJ0cmVlTGFzdFZpc2libGVF bnRyeTsNCiANCiAvKg0KQEAgLTkzNSw3ICs5NDAsOCBAQCBidF9lbnRyeV91bmlxdWVfY2hlY2so QnRyZWVDaGVja1N0YXRlICpzdGF0ZSwgSW5kZXhUdXBsZSBpdHVwLA0KIAkJCQlsVmlzLT5ibGtu byA9IHRhcmdldGJsb2NrOw0KIAkJCQlsVmlzLT5vZmZzZXQgPSBvZmZzZXQ7DQogCQkJCWxWaXMt PnBvc3RpbmdJbmRleCA9IGk7DQotCQkJCWxWaXMtPnRpZCA9IHRpZDsNCisJCQkJSXRlbVBvaW50 ZXJDb3B5KHRpZCwgJmxWaXMtPnRpZGRhdGEpOw0KKwkJCQlsVmlzLT50aWQgPSAmbFZpcy0+dGlk ZGF0YTsNCiAJCQl9DQogCQl9DQogCX0NCkBAIC05NjEsNyArOTY3LDggQEAgYnRfZW50cnlfdW5p cXVlX2NoZWNrKEJ0cmVlQ2hlY2tTdGF0ZSAqc3RhdGUsIEluZGV4VHVwbGUgaXR1cCwNCiANCiAJ CQlsVmlzLT5ibGtubyA9IHRhcmdldGJsb2NrOw0KIAkJCWxWaXMtPm9mZnNldCA9IG9mZnNldDsN Ci0JCQlsVmlzLT50aWQgPSB0aWQ7DQorCQkJSXRlbVBvaW50ZXJDb3B5KHRpZCwgJmxWaXMtPnRp ZGRhdGEpOw0KKwkJCWxWaXMtPnRpZCA9ICZsVmlzLT50aWRkYXRhOw0KIAkJCWxWaXMtPnBvc3Rp bmdJbmRleCA9IC0xOw0KIAkJfQ0KIAl9DQpAQCAtMTIyOSw2ICsxMjM2LDE2IEBAIGJ0X3Rhcmdl dF9wYWdlX2NoZWNrKEJ0cmVlQ2hlY2tTdGF0ZSAqc3RhdGUpDQogCU9mZnNldE51bWJlciBtYXg7 DQogCUJUUGFnZU9wYXF1ZSB0b3BhcXVlOw0KIA0KKwkvKg0KKwkgKiBTY3JhdGNoIHNwYWNlIGZv ciBkZWNvZGluZyBwcmVmaXgtY29kZWQgbGVhZiB0dXBsZXMgKF9idF9nZXRpdGVtKS4NCisJICog aXR1cGJ1ZiBiYWNrcyB0aGUgY3VycmVudCBsb29wIGl0ZW07IGNyb3NzYnVmIGJhY2tzIHRoZSBy aWdodCBzaWJsaW5nJ3MNCisJICogZmlyc3QgaXRlbSBpbiB0aGUgY3Jvc3MtcGFnZSB1bmlxdWUg Y2hlY2ssIHdoaWNoIG11c3QgY29leGlzdCB3aXRoIHRoZQ0KKwkgKiBjdXJyZW50IGl0ZW0ncyBz dGF0ZS4gIEEgcGl2b3QsIGhpZ2gga2V5IG9yIG5vbi1wcmVmaXggbGVhZiBpdGVtIGlzDQorCSAq IHJldHVybmVkIGJ5IF9idF9nZXRpdGVtIHVuY2hhbmdlZCAoYnVmZmVyIHVudXNlZCkuDQorCSAq Lw0KKwlCVEl0ZW1CdWYJaXR1cGJ1ZjsNCisJQlRJdGVtQnVmCWNyb3NzYnVmOw0KKw0KIAkvKiBM YXN0IHZpc2libGUgZW50cnkgaW5mbyBmb3IgY2hlY2tpbmcgaW5kZXhlcyB3aXRoIHVuaXF1ZSBj b25zdHJhaW50ICovDQogCUJ0cmVlTGFzdFZpc2libGVFbnRyeSBsVmlzID0ge0ludmFsaWRCbG9j a051bWJlciwgSW52YWxpZE9mZnNldE51bWJlciwgLTEsIE5VTEx9Ow0KIA0KQEAgLTEyOTMsOCAr MTMxMCwxNSBAQCBidF90YXJnZXRfcGFnZV9jaGVjayhCdHJlZUNoZWNrU3RhdGUgKnN0YXRlKQ0K IA0KIAkJaXRlbWlkID0gUGFnZUdldEl0ZW1JZENhcmVmdWwoc3RhdGUsIHN0YXRlLT50YXJnZXRi bG9jaywNCiAJCQkJCQkJCQkgIHN0YXRlLT50YXJnZXQsIG9mZnNldCk7DQotCQlpdHVwID0gKElu ZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHN0YXRlLT50YXJnZXQsIGl0ZW1pZCk7DQotCQl0dXBzaXpl ID0gSW5kZXhUdXBsZVNpemUoaXR1cCk7DQorDQorCQkvKg0KKwkJICogbHBfbGVuIGFuZCB0aGUg dHVwbGUgc2l6ZSBsaW1pdCBhcmUgcGh5c2ljYWwgcHJvcGVydGllcyBvZiB0aGUgaXRlbQ0KKwkJ ICogYXMgc3RvcmVkLCBzbyB0aGV5IGFyZSBjaGVja2VkIGFnYWluc3QgdGhlIHJhdyBvbi1wYWdl IHR1cGxlIChjb2RlZCwNCisJCSAqIG9uIGEgQlRQX1BSRUZJWCBsZWFmKS4gIEV2ZXJ5IGtleS9j b250ZW50IGNoZWNrIGJlbG93IGluc3RlYWQgdXNlcw0KKwkJICogdGhlIGRlY29kZWQgdHVwbGUg cmV0dXJuZWQgYnkgX2J0X2dldGl0ZW0uDQorCQkgKi8NCisJCXR1cHNpemUgPSBJbmRleFR1cGxl U2l6ZSgoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0oc3RhdGUtPnRhcmdldCwgaXRlbWlkKSk7DQor CQlpdHVwID0gX2J0X2dldGl0ZW0oc3RhdGUtPnRhcmdldCwgb2Zmc2V0LCAmaXR1cGJ1Zik7DQog DQogCQkvKg0KIAkJICogbHBfbGVuIHNob3VsZCBtYXRjaCB0aGUgSW5kZXhUdXBsZSByZXBvcnRl ZCBsZW5ndGggZXhhY3RseSwgc2luY2UNCkBAIC0xNjA2LDcgKzE2MzAsNyBAQCBidF90YXJnZXRf cGFnZV9jaGVjayhCdHJlZUNoZWNrU3RhdGUgKnN0YXRlKQ0KIAkJCWl0ZW1pZCA9IFBhZ2VHZXRJ dGVtSWRDYXJlZnVsKHN0YXRlLCBzdGF0ZS0+dGFyZ2V0YmxvY2ssDQogCQkJCQkJCQkJCSAgc3Rh dGUtPnRhcmdldCwNCiAJCQkJCQkJCQkJICBPZmZzZXROdW1iZXJOZXh0KG9mZnNldCkpOw0KLQkJ CWl0dXAgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0oc3RhdGUtPnRhcmdldCwgaXRlbWlkKTsN CisJCQlpdHVwID0gX2J0X2dldGl0ZW0oc3RhdGUtPnRhcmdldCwgT2Zmc2V0TnVtYmVyTmV4dChv ZmZzZXQpLCAmaXR1cGJ1Zik7DQogCQkJdGlkID0gQlRyZWVUdXBsZUdldFBvaW50c1RvVElEKGl0 dXApOw0KIAkJCW5odGlkID0gcHNwcmludGYoIigldSwldSkiLA0KIAkJCQkJCQkgSXRlbVBvaW50 ZXJHZXRCbG9ja051bWJlck5vQ2hlY2sodGlkKSwNCkBAIC0xNzkzLDcgKzE4MTcsNyBAQCBidF90 YXJnZXRfcGFnZV9jaGVjayhCdHJlZUNoZWNrU3RhdGUgKnN0YXRlKQ0KIAkJCQkJaXRlbWlkID0g UGFnZUdldEl0ZW1JZENhcmVmdWwoc3RhdGUsIHJpZ2h0YmxvY2tfbnVtYmVyLA0KIAkJCQkJCQkJ CQkJCSAgcmlnaHRwYWdlLA0KIAkJCQkJCQkJCQkJCSAgcmlnaHRmaXJzdG9mZnNldCk7DQotCQkJ CQlpdHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHJpZ2h0cGFnZSwgaXRlbWlkKTsNCisJ CQkJCWl0dXAgPSBfYnRfZ2V0aXRlbShyaWdodHBhZ2UsIHJpZ2h0Zmlyc3RvZmZzZXQsICZjcm9z c2J1Zik7DQogDQogCQkJCQlidF9lbnRyeV91bmlxdWVfY2hlY2soc3RhdGUsIGl0dXAsIHJpZ2h0 YmxvY2tfbnVtYmVyLCByaWdodGZpcnN0b2Zmc2V0LCAmbFZpcyk7DQogDQpAQCAtMTg1Nyw2ICsx ODgxLDggQEAgYnRfcmlnaHRfcGFnZV9jaGVja19zY2Fua2V5KEJ0cmVlQ2hlY2tTdGF0ZSAqc3Rh dGUsIE9mZnNldE51bWJlciAqcmlnaHRmaXJzdG9mZnMNCiAJQmxvY2tOdW1iZXIgdGFyZ2V0bmV4 dDsNCiAJUGFnZQkJcmlnaHRwYWdlOw0KIAlPZmZzZXROdW1iZXIgbmxpbmU7DQorCU9mZnNldE51 bWJlciByaWdodG9mZnNldDsNCisJQlRJdGVtQnVmCWZpcnN0YnVmOw0KIA0KIAkvKiBEZXRlcm1p bmUgdGFyZ2V0J3MgbmV4dCBibG9jayBudW1iZXIgKi8NCiAJb3BhcXVlID0gQlRQYWdlR2V0T3Bh cXVlKHN0YXRlLT50YXJnZXQpOw0KQEAgLTIwMTYsNiArMjA0Miw3IEBAIGJ0X3JpZ2h0X3BhZ2Vf Y2hlY2tfc2NhbmtleShCdHJlZUNoZWNrU3RhdGUgKnN0YXRlLCBPZmZzZXROdW1iZXIgKnJpZ2h0 Zmlyc3RvZmZzDQogCQkvKiBSZXR1cm4gZmlyc3QgZGF0YSBpdGVtIChpZiBhbnkpICovDQogCQly aWdodGl0ZW0gPSBQYWdlR2V0SXRlbUlkQ2FyZWZ1bChzdGF0ZSwgdGFyZ2V0bmV4dCwgcmlnaHRw YWdlLA0KIAkJCQkJCQkJCQkgUF9GSVJTVERBVEFLRVkob3BhcXVlKSk7DQorCQlyaWdodG9mZnNl dCA9IFBfRklSU1REQVRBS0VZKG9wYXF1ZSk7DQogCQkqcmlnaHRmaXJzdG9mZnNldCA9IFBfRklS U1REQVRBS0VZKG9wYXF1ZSk7DQogCX0NCiAJZWxzZSBpZiAoIVBfSVNMRUFGKG9wYXF1ZSkgJiYN CkBAIC0yMDI3LDYgKzIwNTQsNyBAQCBidF9yaWdodF9wYWdlX2NoZWNrX3NjYW5rZXkoQnRyZWVD aGVja1N0YXRlICpzdGF0ZSwgT2Zmc2V0TnVtYmVyICpyaWdodGZpcnN0b2Zmcw0KIAkJICovDQog CQlyaWdodGl0ZW0gPSBQYWdlR2V0SXRlbUlkQ2FyZWZ1bChzdGF0ZSwgdGFyZ2V0bmV4dCwgcmln aHRwYWdlLA0KIAkJCQkJCQkJCQkgT2Zmc2V0TnVtYmVyTmV4dChQX0ZJUlNUREFUQUtFWShvcGFx dWUpKSk7DQorCQlyaWdodG9mZnNldCA9IE9mZnNldE51bWJlck5leHQoUF9GSVJTVERBVEFLRVko b3BhcXVlKSk7DQogCX0NCiAJZWxzZQ0KIAl7DQpAQCAtMjA0Niw5ICsyMDc0LDE5IEBAIGJ0X3Jp Z2h0X3BhZ2VfY2hlY2tfc2NhbmtleShCdHJlZUNoZWNrU3RhdGUgKnN0YXRlLCBPZmZzZXROdW1i ZXIgKnJpZ2h0Zmlyc3RvZmZzDQogCS8qDQogCSAqIFJldHVybiBmaXJzdCByZWFsIGl0ZW0gc2Nh bmtleS4gIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiByaWdodCBwYWdlDQogCSAqIG1lbW9yeSBy ZW1haW5pbmcgYWxsb2NhdGVkLg0KKwkgKg0KKwkgKiBPbiBhIEJUUF9QUkVGSVggbGVhZiB0aGUg Zmlyc3QgZGF0YSBpdGVtIGlzIHByZWZpeC1jb2RlZCwgc28gZGVjb2RlIGl0Ow0KKwkgKiBiZWNh dXNlIHRoZSByZXR1cm5lZCBzY2Fua2V5IChidWlsdCBieSBfYnRfbWtzY2Fua2V5KSByZWZlcmVu Y2VzIHRoZQ0KKwkgKiB0dXBsZSdzIG93biBzdG9yYWdlLCBhbmQgX2J0X2dldGl0ZW0gZGVjb2Rl cyBpbnRvIGEgYnVmZmVyIGxvY2FsIHRvDQorCSAqIHRoaXMgZnVuY3Rpb24sIGNvcHkgdGhlIGRl Y29kZWQgdHVwbGUgaW50byB0aGUgY2FsbGVyLXJlc2V0IG1lbW9yeQ0KKwkgKiBjb250ZXh0IHNv IGl0IG91dGxpdmVzIHRoZSBjYWxsLiAgQSBwaXZvdCBvciBub24tcHJlZml4IGl0ZW0gaXMNCisJ ICogcmV0dXJuZWQgYnkgX2J0X2dldGl0ZW0gdW5jaGFuZ2VkIChpdCBsaXZlcyBpbiB0aGUgcmln aHQgcGFnZSwgd2hpY2gNCisJICogcmVtYWlucyBhbGxvY2F0ZWQpLCBzbyBubyBjb3B5IGlzIG5l ZWRlZCB0aGVuLg0KIAkgKi8NCi0JZmlyc3RpdHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVt KHJpZ2h0cGFnZSwgcmlnaHRpdGVtKTsNCi0JcmV0dXJuIGJ0X21rc2NhbmtleV9waXZvdHNlYXJj aChzdGF0ZS0+cmVsLCBmaXJzdGl0dXApOw0KKwlmaXJzdGl0dXAgPSBfYnRfZ2V0aXRlbShyaWdo dHBhZ2UsIHJpZ2h0b2Zmc2V0LCAmZmlyc3RidWYpOw0KKwlpZiAoZmlyc3RpdHVwID09IChJbmRl eFR1cGxlKSBQYWdlR2V0SXRlbShyaWdodHBhZ2UsIHJpZ2h0aXRlbSkpDQorCQlyZXR1cm4gYnRf bWtzY2Fua2V5X3Bpdm90c2VhcmNoKHN0YXRlLT5yZWwsIGZpcnN0aXR1cCk7DQorCXJldHVybiBi dF9ta3NjYW5rZXlfcGl2b3RzZWFyY2goc3RhdGUtPnJlbCwgQ29weUluZGV4VHVwbGUoZmlyc3Rp dHVwKSk7DQogfQ0KIA0KIC8qDQpAQCAtMzA5NSwxNCArMzEzMywxMyBAQCBzdGF0aWMgaW5saW5l IGJvb2wNCiBpbnZhcmlhbnRfbF9vZmZzZXQoQnRyZWVDaGVja1N0YXRlICpzdGF0ZSwgQlRTY2Fu SW5zZXJ0IGtleSwNCiAJCQkJICAgT2Zmc2V0TnVtYmVyIHVwcGVyYm91bmQpDQogew0KLQlJdGVt SWQJCWl0ZW1pZDsNCiAJaW50MzIJCWNtcDsNCiANCiAJQXNzZXJ0KCFrZXktPm5leHRrZXkgJiYg a2V5LT5iYWNrd2FyZCk7DQogDQogCS8qIFZlcmlmeSBsaW5lIHBvaW50ZXIgYmVmb3JlIGNoZWNr aW5nIHR1cGxlICovDQotCWl0ZW1pZCA9IFBhZ2VHZXRJdGVtSWRDYXJlZnVsKHN0YXRlLCBzdGF0 ZS0+dGFyZ2V0YmxvY2ssIHN0YXRlLT50YXJnZXQsDQotCQkJCQkJCQkgIHVwcGVyYm91bmQpOw0K Kwkodm9pZCkgUGFnZUdldEl0ZW1JZENhcmVmdWwoc3RhdGUsIHN0YXRlLT50YXJnZXRibG9jaywg c3RhdGUtPnRhcmdldCwNCisJCQkJCQkJCXVwcGVyYm91bmQpOw0KIAkvKiBwZ191cGdyYWRlJ2Qg aW5kZXhlcyBtYXkgbGVnYWxseSBoYXZlIGVxdWFsIHNpYmxpbmcgdHVwbGVzICovDQogCWlmICgh a2V5LT5oZWFwa2V5c3BhY2UpDQogCQlyZXR1cm4gaW52YXJpYW50X2xlcV9vZmZzZXQoc3RhdGUs IGtleSwgdXBwZXJib3VuZCk7DQpAQCAtMzEyMiwxMSArMzE1OSwxMiBAQCBpbnZhcmlhbnRfbF9v ZmZzZXQoQnRyZWVDaGVja1N0YXRlICpzdGF0ZSwgQlRTY2FuSW5zZXJ0IGtleSwNCiAJew0KIAkJ QlRQYWdlT3BhcXVlIHRvcGFxdWU7DQogCQlJbmRleFR1cGxlCXJpdHVwOw0KKwkJQlRJdGVtQnVm CXJpdHVwYnVmOw0KIAkJaW50CQkJdXBwbmtleWF0dHM7DQogCQlJdGVtUG9pbnRlciByaGVhcHRp ZDsNCiAJCWJvb2wJCW5vbnBpdm90Ow0KIA0KLQkJcml0dXAgPSAoSW5kZXhUdXBsZSkgUGFnZUdl dEl0ZW0oc3RhdGUtPnRhcmdldCwgaXRlbWlkKTsNCisJCXJpdHVwID0gX2J0X2dldGl0ZW0oc3Rh dGUtPnRhcmdldCwgdXBwZXJib3VuZCwgJnJpdHVwYnVmKTsNCiAJCXRvcGFxdWUgPSBCVFBhZ2VH ZXRPcGFxdWUoc3RhdGUtPnRhcmdldCk7DQogCQlub25waXZvdCA9IFBfSVNMRUFGKHRvcGFxdWUp ICYmIHVwcGVyYm91bmQgPj0gUF9GSVJTVERBVEFLRVkodG9wYXF1ZSk7DQogDQpAQCAtMzIxOCwx NCArMzI1NiwxMyBAQCBpbnZhcmlhbnRfbF9ub250YXJnZXRfb2Zmc2V0KEJ0cmVlQ2hlY2tTdGF0 ZSAqc3RhdGUsIEJUU2Nhbkluc2VydCBrZXksDQogCQkJCQkJCSBCbG9ja051bWJlciBub250YXJn ZXRibG9jaywgUGFnZSBub250YXJnZXQsDQogCQkJCQkJCSBPZmZzZXROdW1iZXIgdXBwZXJib3Vu ZCkNCiB7DQotCUl0ZW1JZAkJaXRlbWlkOw0KIAlpbnQzMgkJY21wOw0KIA0KIAlBc3NlcnQoIWtl eS0+bmV4dGtleSAmJiBrZXktPmJhY2t3YXJkKTsNCiANCiAJLyogVmVyaWZ5IGxpbmUgcG9pbnRl ciBiZWZvcmUgY2hlY2tpbmcgdHVwbGUgKi8NCi0JaXRlbWlkID0gUGFnZUdldEl0ZW1JZENhcmVm dWwoc3RhdGUsIG5vbnRhcmdldGJsb2NrLCBub250YXJnZXQsDQotCQkJCQkJCQkgIHVwcGVyYm91 bmQpOw0KKwkodm9pZCkgUGFnZUdldEl0ZW1JZENhcmVmdWwoc3RhdGUsIG5vbnRhcmdldGJsb2Nr LCBub250YXJnZXQsDQorCQkJCQkJCQl1cHBlcmJvdW5kKTsNCiAJY21wID0gX2J0X2NvbXBhcmUo c3RhdGUtPnJlbCwga2V5LCBub250YXJnZXQsIHVwcGVyYm91bmQpOw0KIA0KIAkvKiBwZ191cGdy YWRlJ2QgaW5kZXhlcyBtYXkgbGVnYWxseSBoYXZlIGVxdWFsIHNpYmxpbmcgdHVwbGVzICovDQpA QCAtMzIzNiwxMiArMzI3MywxMyBAQCBpbnZhcmlhbnRfbF9ub250YXJnZXRfb2Zmc2V0KEJ0cmVl Q2hlY2tTdGF0ZSAqc3RhdGUsIEJUU2Nhbkluc2VydCBrZXksDQogCWlmIChjbXAgPT0gMCkNCiAJ ew0KIAkJSW5kZXhUdXBsZQljaGlsZDsNCisJCUJUSXRlbUJ1ZgljaGlsZGJ1ZjsNCiAJCWludAkJ CXVwcG5rZXlhdHRzOw0KIAkJSXRlbVBvaW50ZXIgY2hpbGRoZWFwdGlkOw0KIAkJQlRQYWdlT3Bh cXVlIGNvcGFxdWU7DQogCQlib29sCQlub25waXZvdDsNCiANCi0JCWNoaWxkID0gKEluZGV4VHVw bGUpIFBhZ2VHZXRJdGVtKG5vbnRhcmdldCwgaXRlbWlkKTsNCisJCWNoaWxkID0gX2J0X2dldGl0 ZW0obm9udGFyZ2V0LCB1cHBlcmJvdW5kLCAmY2hpbGRidWYpOw0KIAkJY29wYXF1ZSA9IEJUUGFn ZUdldE9wYXF1ZShub250YXJnZXQpOw0KIAkJbm9ucGl2b3QgPSBQX0lTTEVBRihjb3BhcXVlKSAm JiB1cHBlcmJvdW5kID49IFBfRklSU1REQVRBS0VZKGNvcGFxdWUpOw0KIA0KZGlmZiAtLWdpdCBh L2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2Ny ZWF0ZV9pbmRleC5zZ21sDQppbmRleCBiYjc1MDVkMTcxYi4uN2U2Njc2NWMzZDMgMTAwNjQ0DQot LS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sDQorKysgYi9kb2Mvc3JjL3Nn bWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sDQpAQCAtNDc3LDYgKzQ3Nyw0MSBAQCBDUkVBVEUgWyBV TklRVUUgXSBJTkRFWCBbIENPTkNVUlJFTlRMWSBdIFsgWyBJRiBOT1QgRVhJU1RTIF0gPHJlcGxh Y2VhYmxlIGNsYXNzPQ0KICAgICA8L25vdGU+DQogICAgIDwvbGlzdGl0ZW0+DQogICAgPC92YXJs aXN0ZW50cnk+DQorDQorICAgPHZhcmxpc3RlbnRyeSBpZD0iaW5kZXgtcmVsb3B0aW9uLXByZWZp eC1jb21wcmVzc2lvbiIgeHJlZmxhYmVsPSJwcmVmaXhfY29tcHJlc3Npb24iPg0KKyAgICA8dGVy bT48bGl0ZXJhbD5wcmVmaXhfY29tcHJlc3Npb248L2xpdGVyYWw+ICg8dHlwZT5ib29sZWFuPC90 eXBlPikNCisgICAgIDxpbmRleHRlcm0+DQorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cHJlZml4 X2NvbXByZXNzaW9uPC92YXJuYW1lPiBzdG9yYWdlIHBhcmFtZXRlcjwvcHJpbWFyeT4NCisgICAg IDwvaW5kZXh0ZXJtPg0KKyAgICA8L3Rlcm0+DQorICAgIDxsaXN0aXRlbT4NCisgICAgPHBhcmE+ DQorICAgICAgQ29udHJvbHMgbGVhZiBrZXkgcHJlZml4IGNvbXByZXNzaW9uLiAgV2hlbiBzZXQg dG8NCisgICAgICA8bGl0ZXJhbD5PTjwvbGl0ZXJhbD4sIGFuZCB0aGUgaW5kZXgncyBmaXJzdCBr ZXkgY29sdW1uIGlzIG9mIGENCisgICAgICB2YXJpYWJsZS1sZW5ndGggdHlwZSwgYSBsZWFmIHBh Z2UgbWF5IHN0b3JlIGEgc2hhcmVkIHByZWZpeCBvZiB0aGF0DQorICAgICAgY29sdW1uIG9uY2Ug YW5kIHJlY29yZCBvbmx5IGVhY2ggdHVwbGUncyB1bnNoYXJlZCByZW1haW5kZXIsIHdoaWNoIGNh bg0KKyAgICAgIHN1YnN0YW50aWFsbHkgc2hyaW5rIGluZGV4ZXMgb24ga2V5cyB0aGF0IHNoYXJl IGxvbmcgbGVhZGluZyBieXRlcw0KKyAgICAgIChmb3IgZXhhbXBsZSBVUkxzIG9yIDx0eXBlPmpz b25iPC90eXBlPiBrZXlzIHdpdGggY29tbW9uIHBhdGhzKS4gIFNldA0KKyAgICAgIHRvIDxsaXRl cmFsPk9OPC9saXRlcmFsPiBvciA8bGl0ZXJhbD5PRkY8L2xpdGVyYWw+IHRvIGVuYWJsZSBvciBk aXNhYmxlDQorICAgICAgdGhlIG9wdGltaXphdGlvbi4gIFRoZSBkZWZhdWx0IGlzIDxsaXRlcmFs Pk9GRjwvbGl0ZXJhbD4uDQorICAgIDwvcGFyYT4NCisNCisgICAgPG5vdGU+DQorICAgICA8cGFy YT4NCisgICAgICBQcmVmaXggY29tcHJlc3Npb24gb25seSBjaGFuZ2VzIGhvdyBrZXlzIGFyZSBz dG9yZWQ7IGNvbXBhcmlzb25zIGFsd2F5cw0KKyAgICAgIHNlZSB0aGUgb3JpZ2luYWwga2V5IHZh bHVlcywgc28gZXZlcnkgY29sbGF0aW9uIGFuZCBvcGVyYXRvciBjbGFzcw0KKyAgICAgIGJlaGF2 ZXMgaWRlbnRpY2FsbHkgd2l0aCBpdCBvbiBvciBvZmYuICBBIGxlYWYgYWRvcHRzIGEgcHJlZml4 IG9ubHkgd2hlbg0KKyAgICAgIGl0IGlzIHdyaXR0ZW4gYXMgYSB3aG9sZSAoZHVyaW5nIGFuIGlu ZGV4IGJ1aWxkLCBvciBlaXRoZXIgaGFsZiBvZiBhDQorICAgICAgcGFnZSBzcGxpdCksIHNvIHR1 cm5pbmcgPGxpdGVyYWw+cHJlZml4X2NvbXByZXNzaW9uPC9saXRlcmFsPiBvbiBvciBvZmYNCisg ICAgICB2aWEgPGNvbW1hbmQ+QUxURVIgSU5ERVg8L2NvbW1hbmQ+IGRvZXMgbm90IHJld3JpdGUg dGhlIGluZGV4OiBleGlzdGluZw0KKyAgICAgIHBhZ2VzIGFyZSBsZWZ0IGFzIHRoZXkgYXJlIGFu ZCBhcmUgY29udmVydGVkIHRoZSBuZXh0IHRpbWUgdGhleSBhcmUNCisgICAgICB3cml0dGVuIHdo b2xlLiAgTm8gPGNvbW1hbmQ+UkVJTkRFWDwvY29tbWFuZD4gaXMgcmVxdWlyZWQsIGFuZCBpbmRl eGVzDQorICAgICAgdXBncmFkZWQgd2l0aCA8YXBwbGljYXRpb24+cGdfdXBncmFkZTwvYXBwbGlj YXRpb24+IGtlZXAgd29ya2luZw0KKyAgICAgIHVuY2hhbmdlZC4NCisgICAgIDwvcGFyYT4NCisg ICAgPC9ub3RlPg0KKyAgICA8L2xpc3RpdGVtPg0KKyAgIDwvdmFybGlzdGVudHJ5Pg0KICAgIDwv dmFyaWFibGVsaXN0Pg0KIA0KICAgIDxwYXJhPg0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxv cHRpb25zLmMNCmluZGV4IGVhOWEwNDE3OTA5Li5iZTFmY2Q5YTE1YiAxMDA2NDQNCi0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jDQorKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMuYw0KQEAgLTE1Myw2ICsxNTMsMTYgQEAgc3RhdGljIHJl bG9wdF9ib29sIGJvb2xSZWxPcHRzW10gPQ0KIAkJfSwNCiAJCXRydWUNCiAJfSwNCisJew0KKwkJ ew0KKwkJCSJwcmVmaXhfY29tcHJlc3Npb24iLA0KKwkJCSJFbmFibGVzIGxlYWYga2V5IHByZWZp eCBjb21wcmVzc2lvbiBmb3IgdGhpcyBidHJlZSBpbmRleCIsDQorCQkJUkVMT1BUX0tJTkRfQlRS RUUsDQorCQkJU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrCS8qIHNpbmNlIGl0IGFwcGxpZXMgb25s eSB0byBsYXRlcg0KKwkJCQkJCQkJCQkgKiB3aG9sZS1wYWdlIHdyaXRlcyAqLw0KKwkJfSwNCisJ CWZhbHNlDQorCX0sDQogCS8qIGxpc3QgdGVybWluYXRvciAqLw0KIAl7e05VTEx9fQ0KIH07DQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9NYWtlZmlsZSBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvTWFrZWZpbGUNCmluZGV4IDBkYWY2NDBhZjk2Li4wMDQ0ZDc3ZjU0 OCAxMDA2NDQNCi0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvTWFrZWZpbGUNCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvTWFrZWZpbGUNCkBAIC0xOCw2ICsxOCw3IEBAIE9C SlMgPSBcDQogCW5idGluc2VydC5vIFwNCiAJbmJ0cGFnZS5vIFwNCiAJbmJ0cHJlcHJvY2Vzc2tl eXMubyBcDQorCW5idHByZWZpeC5vIFwNCiAJbmJ0cmVhZHBhZ2UubyBcDQogCW5idHJlZS5vIFwN CiAJbmJ0c2VhcmNoLm8gXA0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv UkVBRE1FIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUNCmluZGV4IGYzODY3NTQ3 NjkxLi44YWE3ZjllNzYyMCAxMDA2NDQNCi0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv UkVBRE1FDQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRQ0KQEAgLTEwODEs MyArMTA4MSw3NCBAQCBpdGVtIGlzIGlycmVsZXZhbnQsIGFuZCBuZWVkIG5vdCBiZSBzdG9yZWQg YXQgYWxsLiAgVGhpcyBhcnJhbmdlbWVudA0KIGNvcnJlc3BvbmRzIHRvIHRoZSBmYWN0IHRoYXQg YW4gTCZZIG5vbi1sZWFmIHBhZ2UgaGFzIG9uZSBtb3JlIHBvaW50ZXINCiB0aGFuIGtleS4gIFN1 ZmZpeCB0cnVuY2F0aW9uJ3MgbmVnYXRpdmUgaW5maW5pdHkgYXR0cmlidXRlcyBiZWhhdmUgaW4N CiB0aGUgc2FtZSB3YXkuDQorDQorTm90ZXMgYWJvdXQgbGVhZiBrZXkgcHJlZml4IGNvbXByZXNz aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KK1dpdGgg dGhlIHByZWZpeF9jb21wcmVzc2lvbiBzdG9yYWdlIHBhcmFtZXRlciAoZGVmYXVsdCBvZmYpIGEg bGVhZiBwYWdlIG1heQ0KK2Zyb250LWNvZGUgdGhlIGZpcnN0IGtleSBjb2x1bW4gb2YgZWFjaCBv ZiBpdHMgZGF0YSB0dXBsZXMgYWdhaW5zdCBhIHBlci1wYWdlDQorcHJlZml4LCB3aGljaCBzaHJp bmtzIGluZGV4ZXMgb24ga2V5cyB0aGF0IHNoYXJlIGxvbmcgbGVhZGluZyBieXRlcyAoVVJMcywN Citqc29uYiBrZXlzIHdpdGggY29tbW9uIHBhdGhzLCB6ZXJvLXBhZGRlZCBjb2RlcykuICBMaWtl IGRlZHVwbGljYXRpb24sIHRoaXMNCithbHRlcnMgdGhlIHBoeXNpY2FsIHJlcHJlc2VudGF0aW9u IG9mIHR1cGxlcyB3aXRob3V0IGNoYW5naW5nIHRoZSBsb2dpY2FsDQorY29udGVudHMgb2YgdGhl IGluZGV4LCBhbmQgY29tcGFyaXNvbnMgYWx3YXlzIG9wZXJhdGUgb24gdGhlIHJlY29uc3RydWN0 ZWQNCitvcmlnaW5hbCB2YWx1ZXMsIHNvIGV2ZXJ5IGNvbGxhdGlvbiBhbmQgb3BlcmF0b3IgY2xh c3MgaXMgdW5hZmZlY3RlZC4NCisNCitBIGxlYWYgdGhhdCB1c2VzIHRoZSB0ZWNobmlxdWUgY2Fy cmllcyB0aGUgQlRQX1BSRUZJWCBwYWdlIGZsYWcgYW5kIG9uZSBleHRyYQ0KK2l0ZW0sIHRoZSBQ UkVGSVggaXRlbSwgYXQgdGhlIG9mZnNldCB3aGVyZSBpdHMgZmlyc3QgZGF0YSBpdGVtIHdvdWxk IG90aGVyd2lzZQ0KK2JlIChQX0hJS0VZIG9uIGEgcmlnaHRtb3N0IHBhZ2UsIFBfRklSU1RLRVkg b3RoZXJ3aXNlKTsgZGF0YSBpdGVtcyBiZWdpbiBvbmUNCitvZmZzZXQgbGF0ZXIsIHdoaWNoIFBf RklSU1REQVRBS0VZKCkgYWNjb3VudHMgZm9yLiAgVGhlIFBSRUZJWCBpdGVtIGlzIGFuDQorSW5k ZXhUdXBsZURhdGEgaGVhZGVyIGZvbGxvd2VkIGJ5IDEuLkJUUkVFX1BSRUZJWF9NQVggcHJlZml4 IGJ5dGVzLCBzaGFwZWQgc28NCit0aGF0IGNvZGUgd2hpY2ggd2Fsa3MgYSBwYWdlJ3MgaXRlbXMg YnkgSW5kZXhUdXBsZVNpemUgKHN1Y2ggYXMNCitfYnRfcmVzdG9yZV9wYWdlKSBzdGVwcyBvdmVy IGl0LiAgT24gc3VjaCBhIHBhZ2UgZXZlcnkgbm9uLXBpdm90IHR1cGxlIChwbGFpbg0KK29yIHBv c3RpbmcpIHdob3NlIGZpcnN0IGtleSBjb2x1bW4gaXMgbm90IE5VTEwgc3RvcmVzIHRoYXQgY29s dW1uIGFzIGEgdmFybGVuYQ0KK3dob3NlIHBheWxvYWQgYmVnaW5zIHdpdGggYSBvbmUtYnl0ZSBj b3VudCBvZiBob3cgbWFueSBsZWFkaW5nIGJ5dGVzIGl0IHNoYXJlcw0KK3dpdGggdGhlIHBhZ2Ug cHJlZml4LCBmb2xsb3dlZCBieSB0aGUgdW5zaGFyZWQgcmVtYWluZGVyIChvciwgZm9yIGEgdmFs dWUgd2hvc2UNCitoZWFkZXIgaXMgbm90IHRoZSBmb3JtIGluZGV4X2Zvcm1fdHVwbGUgd291bGQg cmVwcm9kdWNlLCB0aGUgd2hvbGUgdmFsdWUgYWZ0ZXINCithIHNlbnRpbmVsIGNvdW50KS4gIFRy YWlsaW5nIGtleSBjb2x1bW5zLCBJTkNMVURFIGNvbHVtbnMsIGEgcG9zdGluZyBsaXN0IGFuZA0K K2FsaWdubWVudCBwYWRkaW5nIGZvbGxvdywgbW92ZWQgdG8gcHJlc2VydmUgYWxpZ25tZW50OyBw YWRkaW5nIHRoYXQgaXMgb25seSB0aGUNCitrZXkncyBjbG9zaW5nIHplcm9zIGlzIGRyb3BwZWQg YW5kIHJlc3RvcmVkIG9uIGRlY29kZS4gIFBpdm90cywgTlVMTCBmaXJzdA0KK2NvbHVtbnMgYW5k IHRoZSBoaWdoIGtleSBhcmUgYWx3YXlzIHN0b3JlZCB1bmNvbXByZXNzZWQuICBDb2RpbmcgYW5k IGRlY29kaW5nDQorZGVwZW5kIG9ubHkgb24gdGhlIHBhZ2UgcHJlZml4IGFuZCB0aGUgdHVwbGUs IG5ldmVyIHRoZSBjYXRhbG9nLCBzbyBXQUwgcmVkbw0KK3JlcHJvZHVjZXMgdGhlbSBhbmQgZGVj b2RpbmcgeWllbGRzIHRoZSBvcmlnaW5hbCB0dXBsZSBieXRlIGZvciBieXRlLiAgQWxsIG9mDQor bmJ0cHJlZml4LmMgaW1wbGVtZW50cyB0aGlzOyBfYnRfZ2V0aXRlbSgpIGlzIHRoZSBvbmUgYWNj ZXNzb3IgdGhyb3VnaCB3aGljaA0KK3JlYWRlcnMgb2J0YWluIGEgZGVjb2RlZCBsZWFmIGRhdGEg dHVwbGUuDQorDQorQSBwYWdlIGFkb3B0cyBhIHByZWZpeCBvbmx5IHdoZW4gaXQgaXMgd3JpdHRl biBhcyBhIHdob2xlOiBhIGZpbmlzaGVkIGxlYWYNCitkdXJpbmcgYW4gaW5kZXggYnVpbGQsIG9y IGVpdGhlciBoYWxmIG9mIGEgbGVhZiBwYWdlIHNwbGl0IChidWlsdCBjb2RlZCBmcm9tDQordGhl IHN0YXJ0IGJ5IF9idF9zcGxpdF9sZWFmX2hhbGYsIHNpbmNlIGEgY29tcHJlc3NlZCBsZWFmIGNh biBob2xkIG1vcmUgbG9naWNhbA0KK2RhdGEgdGhhbiBmaXRzIG9uIGEgcGxhaW4gcGFnZSwgY2hv b3NpbmcgZWFjaCBoYWxmJ3Mgb3duIHByZWZpeCBhbmQgZmFsbGluZw0KK2JhY2sgdG8gYSBwbGFp biBsYXlvdXQgb3IgdGhlIG9yaWdpbmFsIHBhZ2UncyBwcmVmaXggaWYgaXRzIG93biBkb2VzIG5v dCBmaXQpLg0KK0NydWNpYWxseSwgbm8gaW5zZXJ0LCBWQUNVVU0sIGRlZHVwbGljYXRpb24gb3Ig Y2hhbmdlIG9mIGEgcGFnZSdzIGtleSByYW5nZQ0KK2V2ZXIgcmV3cml0ZXMgYSBwYWdlIHRvIGtl ZXAgaXRzIHByZWZpeCB2YWxpZDogYSB0dXBsZSB0aGF0IGhhcHBlbnMgdG8gc2hhcmUNCitmZXdl ciBieXRlcyBzaW1wbHkgcmVjb3JkcyBhIHNtYWxsZXIgc2hhcmVkIGNvdW50LiAgQmVjYXVzZSB0 aGUgZm9ybWF0IGlzIGENCitwZXItcGFnZSBvcHQtaW4gZmxhZyB3aXRoIG5vIGJ0cmVlIHZlcnNp b24gY2hhbmdlLCBwYWdlcyB3aXRob3V0IHRoZSBmbGFnIGFyZQ0KK3JlYWQgZXhhY3RseSBhcyBi ZWZvcmUsIHNvIHBnX3VwZ3JhZGUgYW5kIHBoeXNpY2FsL2xvZ2ljYWwgcmVwbGljYXRpb24ga2Vl cA0KK3dvcmtpbmcgYW5kIGV4aXN0aW5nIGluZGV4ZXMgY29udGludWUgdG8gd29yayB3aXRoIG5v IFJFSU5ERVguICBUdXJuaW5nIHRoZQ0KK3BhcmFtZXRlciBvbiB3aXRoIEFMVEVSIElOREVYIGRv ZXMgbm90IHJld3JpdGUgYW55dGhpbmc7IGVhY2ggbGVhZiBpcyBjb252ZXJ0ZWQNCit0aGUgbmV4 dCB0aW1lIGl0IGlzIHdyaXR0ZW4gd2hvbGUsIGFuZCBjb21wcmVzc2VkIGFuZCB1bmNvbXByZXNz ZWQgbGVhdmVzDQorY29leGlzdCBpbiB0aGUgc2FtZSBpbmRleCBpbmRlZmluaXRlbHkuICBUdXJu aW5nIGl0IG9mZiBsaWtld2lzZSByZXdyaXRlcw0KK25vdGhpbmc6IGV4aXN0aW5nIEJUUF9QUkVG SVggbGVhdmVzIGtlZXAgdGhlaXIgY29kZWQgZm9ybSAodGhlIGZsYWcgaXMgY2xlYXJlZA0KK29u bHkgd2hlbiBhIHBhZ2UgaXMgc3BsaXQsIGVtcHRpZWQgb3IgZGVkdXAtcmV3cml0dGVuKSBhbmQg YXJlIHN0aWxsIHJlYWQgYmFjaw0KK2NvcnJlY3RseSB3aXRoIHRoZSBwYXJhbWV0ZXIgb2ZmLCBz aW5jZSBldmVyeSByZWFkZXIgZGVjb2RlcyBiYXNlZCBvbiB0aGUgcGFnZQ0KK2ZsYWcsIG5vdCBv biB0aGUgY3VycmVudCByZWxvcHRpb24uICBTY2FuLXRpbWUgd29ya3NwYWNlIHRoYXQgbXVzdCBo b2xkIGRlY29kZWQNCit0dXBsZXMgKHRoZSBpbmRleC1vbmx5LXNjYW4gY3VyclR1cGxlcy9tYXJr VHVwbGVzIGJ1ZmZlcnMsIHNlZQ0KK0JUVHVwbGVTdG9yYWdlU2l6ZSkgaXMgdGhlcmVmb3JlIHNp emVkIGZvciBhIGRlY29kZWQgcGFnZSBvbiBldmVyeSBidHJlZSBpbmRleCwNCitub3QganVzdCB0 aG9zZSB3aG9zZSBwYXJhbWV0ZXIgaXMgY3VycmVudGx5IG9uLg0KKw0KK1RoZSBsZWZ0IGhhbGYg b2YgYSBwcmVmaXggc3BsaXQgKGJsb2NrIDApIGlzIGxvZ2dlZCBieSBmdWxsLXBhZ2UgaW1hZ2UN Cit3aGVuZXZlciB0aGUgcHJlLXNwbGl0IG9yaWdpbmFsIHBhZ2Ugd2FzIHByZWZpeC1jb21wcmVz c2VkIC0tIGEgaGFsZiBtYXkgZW5kIHVwDQorcGxhaW4geWV0IHN0aWxsIGJlIEZQSS1sb2dnZWQg YmVjYXVzZSBpdHMgaXRlbXMgd2VyZSBjb2RlZCBhZ2FpbnN0IHRoZQ0KK29yaWdpbmFsIHBhZ2Un cyBwcmVmaXggLS0gYW5kIHRoZSByaWdodCBoYWxmIChibG9jayAxKSBpcyBGUEktbG9nZ2VkIHdo ZW5ldmVyDQoraXQgZW5kcyB1cCBwcmVmaXgtY29tcHJlc3NlZC4gIEEgZGVkdXBsaWNhdGlvbiBy ZXdyaXRlIG9mIGEgcHJlZml4IHBhZ2UgaXMNCitGUEktbG9nZ2VkIHRoZSBzYW1lIHdheS4gIEZ1 bGwtcGFnZSBpbWFnZXMgYXJlIHVzZWQgcmF0aGVyIHRoYW4gcmVwbGF5aW5nDQoraW5kaXZpZHVh bCB0dXBsZXMgYmVjYXVzZSB0aGUgY29kZWQgcGh5c2ljYWwgbGF5b3V0IGEgcHJlZml4IHBhZ2Ug ZW5kcyB1cCB3aXRoDQord291bGQgbm90IGJlIHJlY29uc3RydWN0ZWQgYnkgX2J0X3Jlc3RvcmVf cGFnZSdzIGl0ZW0tYnktaXRlbSByZXBsYXk7IHJlZG8NCityZXN0b3JlcyB0aGUgaW1hZ2UuICBX aGVuIFZBQ1VVTSBvciBwYWdlIGRlbGV0aW9uIGVtcHRpZXMgYSBwcmVmaXggbGVhZiwgdGhlDQor UFJFRklYIGl0ZW0gaXMgcmVtb3ZlZCBhbmQgdGhlIGZsYWcgY2xlYXJlZCBzbyB0aGF0IHRoZSBp bnZhcmlhbnQgdGhhdCBhbg0KK2VtcHRpZWQgbGVhZiBob2xkcyBvbmx5IGl0cyBoaWdoIGtleSAo cmVsaWVkIG9uIGJ5IHBhZ2UgZGVsZXRpb24pIHN0aWxsIGhvbGRzLg0KKw0KK0RlZHVwbGljYXRp b24gYW5kIGJvdHRvbS11cCBpbmRleCBkZWxldGlvbiBhcmUgbm90IGN1cnJlbnRseSBhcHBsaWVk IHRvDQorQlRQX1BSRUZJWCBwYWdlcyAoc3VjaCBhIHBhZ2Ugc3BsaXRzIGluc3RlYWQpOiB0aGVp ciBpbi1wbGFjZSByZXdyaXRlIG9mIGEgcGFnZQ0KK2Nhbm5vdCBhbHdheXMgYmUgcmUtY29tcHJl c3NlZCB3aXRoaW4gb25lIHBhZ2UsIGFuZCBwcmVmaXggY29tcHJlc3Npb24gYWxyZWFkeQ0KK3Jl Y2xhaW1zIG11Y2ggb2YgdGhlIHNwYWNlIHRoZXkgdGFyZ2V0LiAgQ29tcG9zaW5nIHRoZW0gd2l0 aCBwcmVmaXgNCitjb21wcmVzc2lvbiBpcyBmdXR1cmUgd29yay4NCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9tZXNvbi5idWlsZA0KaW5kZXggODEyZjA2N2U3MTAuLmNiZDM0MjAxMzI4IDEwMDY0NA0K LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9tZXNvbi5idWlsZA0KKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9tZXNvbi5idWlsZA0KQEAgLTYsNiArNiw3IEBAIGJhY2tlbmRf c291cmNlcyArPSBmaWxlcygNCiAgICduYnRpbnNlcnQuYycsDQogICAnbmJ0cGFnZS5jJywNCiAg ICduYnRwcmVwcm9jZXNza2V5cy5jJywNCisgICduYnRwcmVmaXguYycsDQogICAnbmJ0cmVhZHBh Z2UuYycsDQogICAnbmJ0cmVlLmMnLA0KICAgJ25idHNlYXJjaC5jJywNCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGRlZHVwLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idGRlZHVwLmMNCmluZGV4IGFmN2FmZmRmNDA5Li42ZGM3ZWJlMjViNCAxMDA2NDQN Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0ZGVkdXAuYw0KKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRkZWR1cC5jDQpAQCAtNjksNyArNjksMTkgQEAgX2J0X2Rl ZHVwX3Bhc3MoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLCBJbmRleFR1cGxlIG5ld2l0ZW0sIFNp emUgbmV3aXRlbXN6LA0KIAlTaXplCQlwYWdlc2F2aW5nIFBHX1VTRURfRk9SX0FTU0VSVFNfT05M WSA9IDA7DQogCWJvb2wJCXNpbmdsZXZhbHN0cmF0ID0gZmFsc2U7DQogCWludAkJCW5rZXlhdHRz ID0gSW5kZXhSZWxhdGlvbkdldE51bWJlck9mS2V5QXR0cmlidXRlcyhyZWwpOw0KKwlib29sCQlw YWdlcHJlZml4ID0gUF9IQVNQUkVGSVgob3BhcXVlKTsNCisJQlRJdGVtQnVmCWN1cmJ1ZjsJCQkv KiBkZWNvZGUgc2NyYXRjaCBmb3IgdGhlIGxvb3AncyBjdXJyZW50IGl0ZW0gKi8NCisJQlRJdGVt QnVmCWJhc2VidWY7CQkvKiBkZWNvZGUgc2NyYXRjaCBrZXB0IGZvciB0aGUgcGVuZGluZyBiYXNl ICovDQogCVhMb2dSZWNQdHIJcmVjcHRyOw0KKwlJbmRleFR1cGxlICpkZWR1cF9wbGFpbiA9IE5V TEw7CS8qIGRlZHVwZWQgcGxhaW4gaXRlbXMsIGZvciBwcmVmaXggV0FMICovDQorCWludAkJCWRl ZHVwX25wbGFpbiA9IDA7DQorCUluZGV4VHVwbGUJZGVkdXBfaGlrZXkgPSBOVUxMOw0KKwljaGFy CQlkZWR1cF9wcmVmaXhbQlRSRUVfUFJFRklYX01BWF07DQorCVNpemUJCWRlZHVwX3ByZWZpeGxl biA9IDA7DQorCWJvb2wJCWRlZHVwX2lzbG9ncHJlZml4ID0gZmFsc2U7CS8qIHBhZ2UgZW5kZWQg dXAgcHJlZml4LWNvZGVkICovDQorCWNoYXIJICAgKmRlZHVwX3dhbGJ1ZiA9IE5VTEw7CS8qIHBh Y2tlZCBwcmVmaXgtZGVkdXAgV0FMIHBheWxvYWQgKi8NCisJU2l6ZQkJZGVkdXBfd2FsYnVmbGVu ID0gMDsNCisJYm9vbAkJZGVkdXBfcmZwaSA9IGZhbHNlOwkvKiBmYWxsIGJhY2sgdG8gYSBmb3Jj ZWQgZnVsbC1wYWdlIGltYWdlICovDQogDQogCS8qIFBhc3NlZC1pbiBuZXdpdGVtc3ogaXMgTUFY QUxJR05FRCBidXQgZG9lcyBub3QgaW5jbHVkZSBsaW5lIHBvaW50ZXIgKi8NCiAJbmV3aXRlbXN6 ICs9IHNpemVvZihJdGVtSWREYXRhKTsNCkBAIC0xMjAsNyArMTMyLDE2IEBAIF9idF9kZWR1cF9w YXNzKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgSW5kZXhUdXBsZSBuZXdpdGVtLCBTaXplIG5l d2l0ZW1zeiwNCiAJbmV3cGFnZSA9IFBhZ2VHZXRUZW1wUGFnZUNvcHlTcGVjaWFsKHBhZ2UpOw0K IAlQYWdlU2V0TFNOKG5ld3BhZ2UsIFBhZ2VHZXRMU04ocGFnZSkpOw0KIA0KLQkvKiBDb3B5IGhp Z2gga2V5LCBpZiBhbnkgKi8NCisJLyoNCisJICogVGhlIHJlYnVpbHQgcGFnZSBpcyBsYWlkIG91 dCBwbGFpbiBoZXJlIChjbGVhciBhbnkgaW5oZXJpdGVkIEJUUF9QUkVGSVg7DQorCSAqIFBhZ2VH ZXRUZW1wUGFnZUNvcHlTcGVjaWFsIGNvcGllcyB0aGUgc3BlY2lhbCBhcmVhIGJ1dCBub3QgdGhl IFBSRUZJWA0KKwkgKiBpdGVtKS4gIElmIHRoZSBwYWdlIHdhcyBwcmVmaXgtY29tcHJlc3NlZCBp dCBpcyByZS1jb21wcmVzc2VkIGFzIGEgd2hvbGUNCisJICogYmVsb3csIGFmdGVyIGRlZHVwbGlj YXRpb24sIGhvbm91cmluZyBTdHJhdGVneSAxLg0KKwkgKi8NCisJaWYgKHBhZ2VwcmVmaXgpDQor CQlCVFBhZ2VHZXRPcGFxdWUobmV3cGFnZSktPmJ0cG9fZmxhZ3MgJj0gfkJUUF9QUkVGSVg7DQor DQorCS8qIENvcHkgaGlnaCBrZXksIGlmIGFueSAoYSBwaXZvdCwgc3RvcmVkIHBsYWluIG9uIGFu eSBwYWdlKSAqLw0KIAlpZiAoIVBfUklHSFRNT1NUKG9wYXF1ZSkpDQogCXsNCiAJCUl0ZW1JZAkJ aGl0ZW1pZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgUF9ISUtFWSk7DQpAQCAtMTQwLDEyICsxNjEs MjIgQEAgX2J0X2RlZHVwX3Bhc3MoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLCBJbmRleFR1cGxl IG5ld2l0ZW0sIFNpemUgbmV3aXRlbXN6LA0KIA0KIAkJQXNzZXJ0KCFJdGVtSWRJc0RlYWQoaXRl bWlkKSk7DQogDQorCQkvKiBEZWNvZGUgb24gYSBwcmVmaXggcGFnZSBzbyBrZXlzL3Bvc3Rpbmcg bGlzdHMgYXJlIHRoZSByZWFsIG9uZXMuICovDQorCQlpZiAocGFnZXByZWZpeCkNCisJCQlpdHVw ID0gX2J0X3ByZWZpeF9kZWNvZGUocGFnZSwgaXR1cCwgJmN1cmJ1Zik7DQorDQogCQlpZiAob2Zm bnVtID09IG1pbm9mZikNCiAJCXsNCiAJCQkvKg0KIAkJCSAqIE5vIHByZXZpb3VzL2Jhc2UgdHVw bGUgZm9yIHRoZSBkYXRhIGl0ZW0gLS0gdXNlIHRoZSBkYXRhIGl0ZW0NCi0JCQkgKiBhcyBiYXNl IHR1cGxlIG9mIHBlbmRpbmcgcG9zdGluZyBsaXN0DQorCQkJICogYXMgYmFzZSB0dXBsZSBvZiBw ZW5kaW5nIHBvc3RpbmcgbGlzdC4gIE9uIGEgcHJlZml4IHBhZ2UgdGhlDQorCQkJICogYmFzZSBt dXN0IHN1cnZpdmUgdGhlIHdob2xlIG1lcmdlIHJ1biAoaXQgaXMga2VwdCBhcyBhIHBvaW50ZXIN CisJCQkgKiBpbiBzdGF0ZSBhbmQgcmVhZCBieSBfYnRfZGVkdXBfZmluaXNoX3BlbmRpbmcpLCBz byBrZWVwIGl0IGluIGENCisJCQkgKiBkZWRpY2F0ZWQgYnVmZmVyIHJhdGhlciB0aGFuIHRoZSBw ZXItaXRlcmF0aW9uIGN1cmJ1Zi4NCiAJCQkgKi8NCisJCQlpZiAocGFnZXByZWZpeCkNCisJCQkJ aXR1cCA9IF9idF9wcmVmaXhfZGVjb2RlKHBhZ2UsIChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShw YWdlLCBpdGVtaWQpLA0KKwkJCQkJCQkJCQkgJmJhc2VidWYpOw0KIAkJCV9idF9kZWR1cF9zdGFy dF9wZW5kaW5nKHN0YXRlLCBpdHVwLCBvZmZudW0pOw0KIAkJfQ0KIAkJZWxzZSBpZiAoc3RhdGUt PmRlZHVwbGljYXRlICYmDQpAQCAtMTcwLDcgKzIwMSwyMCBAQCBfYnRfZGVkdXBfcGFzcyhSZWxh dGlvbiByZWwsIEJ1ZmZlciBidWYsIEluZGV4VHVwbGUgbmV3aXRlbSwgU2l6ZSBuZXdpdGVtc3os DQogCQkJICogZm9ybSBuZXcgcG9zdGluZyB0dXBsZSBhbmQgYWRkIGl0IHRvIG91ciB0ZW1wIHBh Z2UgKG5ld3BhZ2UpLg0KIAkJCSAqIEVsc2UgYWRkIHBlbmRpbmcgaW50ZXJ2YWwncyBiYXNlIHR1 cGxlIHRvIHRoZSB0ZW1wIHBhZ2UgYXMtaXMuDQogCQkJICovDQotCQkJcGFnZXNhdmluZyArPSBf YnRfZGVkdXBfZmluaXNoX3BlbmRpbmcobmV3cGFnZSwgc3RhdGUpOw0KKwkJCS8qDQorCQkJICog T24gYSBwcmVmaXggcGFnZSB0aGUgZGVkdXBlZCBpdGVtcyBhcmUgbGFpZCBvdXQgcGxhaW4gaGVy ZTsgdGhlDQorCQkJICogZGVjb2RlZCBzZXQgY2FuIGV4Y2VlZCBvbmUgcGFnZSBldmVuIHdoZW4g dGhlIGNvZGVkIGZvcm0gZml0LCBzbw0KKwkJCSAqIHRvbGVyYXRlIGFuIG92ZXJmbG93IGFuZCBh Ym9ydCB0aGUgd2hvbGUgcGFzcyAodGhlIGNhbGxlciB0aGVuDQorCQkJICogc3BsaXRzIHRoZSBw YWdlIGluc3RlYWQgb2YgZGVkdXBsaWNhdGluZyBpdCkuDQorCQkJICovDQorCQkJew0KKwkJCQlT aXplCQlzYXZlZCA9IF9idF9kZWR1cF9maW5pc2hfcGVuZGluZyhuZXdwYWdlLCBzdGF0ZSwNCisJ CQkJCQkJCQkJCQkJCQkJcGFnZXByZWZpeCk7DQorDQorCQkJCWlmIChwYWdlcHJlZml4ICYmIHNh dmVkID09IChTaXplKSAtMSkNCisJCQkJCWdvdG8gZGVkdXBfb3ZlcmZsb3c7DQorCQkJCXBhZ2Vz YXZpbmcgKz0gc2F2ZWQ7DQorCQkJfQ0KIA0KIAkJCWlmIChzaW5nbGV2YWxzdHJhdCkNCiAJCQl7 DQpAQCAtMTk4LDEyICsyNDIsMjIgQEAgX2J0X2RlZHVwX3Bhc3MoUmVsYXRpb24gcmVsLCBCdWZm ZXIgYnVmLCBJbmRleFR1cGxlIG5ld2l0ZW0sIFNpemUgbmV3aXRlbXN6LA0KIAkJCX0NCiANCiAJ CQkvKiBpdHVwIHN0YXJ0cyBuZXcgcGVuZGluZyBwb3N0aW5nIGxpc3QgKi8NCisJCQlpZiAocGFn ZXByZWZpeCkNCisJCQkJaXR1cCA9IF9idF9wcmVmaXhfZGVjb2RlKHBhZ2UsDQorCQkJCQkJCQkJ CSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZu dW0pKSwNCisJCQkJCQkJCQkJICZiYXNlYnVmKTsNCiAJCQlfYnRfZGVkdXBfc3RhcnRfcGVuZGlu ZyhzdGF0ZSwgaXR1cCwgb2ZmbnVtKTsNCiAJCX0NCiAJfQ0KIA0KIAkvKiBIYW5kbGUgdGhlIGxh c3QgaXRlbSAqLw0KLQlwYWdlc2F2aW5nICs9IF9idF9kZWR1cF9maW5pc2hfcGVuZGluZyhuZXdw YWdlLCBzdGF0ZSk7DQorCXsNCisJCVNpemUJCXNhdmVkID0gX2J0X2RlZHVwX2ZpbmlzaF9wZW5k aW5nKG5ld3BhZ2UsIHN0YXRlLCBwYWdlcHJlZml4KTsNCisNCisJCWlmIChwYWdlcHJlZml4ICYm IHNhdmVkID09IChTaXplKSAtMSkNCisJCQlnb3RvIGRlZHVwX292ZXJmbG93Ow0KKwkJcGFnZXNh dmluZyArPSBzYXZlZDsNCisJfQ0KIA0KIAkvKg0KIAkgKiBJZiBubyBpdGVtcyBzdWl0YWJsZSBm b3IgZGVkdXBsaWNhdGlvbiB3ZXJlIGZvdW5kLCBuZXdwYWdlIG11c3QgYmUNCkBAIC0yMzgsNiAr MjkyLDEwMyBAQCBfYnRfZGVkdXBfcGFzcyhSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsIEluZGV4 VHVwbGUgbmV3aXRlbSwgU2l6ZSBuZXdpdGVtc3osDQogCQlub3BhcXVlLT5idHBvX2ZsYWdzICY9 IH5CVFBfSEFTX0dBUkJBR0U7DQogCX0NCiANCisJLyoNCisJICogUmUtYXBwbHkgcHJlZml4IGNv bXByZXNzaW9uIHRvIHRoZSByZWJ1aWx0IChwbGFpbikgcGFnZSBhcyBhIHdob2xlDQorCSAqIChT dHJhdGVneSAxKSwgYmVmb3JlIHRoZSBjcml0aWNhbCBzZWN0aW9uIHNpbmNlIGl0IGFsbG9jYXRl cyBhIHNjcmF0Y2gNCisJICogcGFnZS4gIEZpcnN0IGNhcHR1cmUgdGhlIGRlZHVwZWQgcGxhaW4g aXRlbXMgYW5kIGhpZ2gga2V5OiBpZiB0aGUgcGFnZQ0KKwkgKiBkb2VzIGJlY29tZSBwcmVmaXgt Y29tcHJlc3NlZCwgcmVkbyByZWJ1aWxkcyBpdHMgY29kZWQgYnl0ZXMgZnJvbSB0aGVzZQ0KKwkg KiBwbHVzIHRoZSBjaG9zZW4gcHJlZml4ICh2aWEgX2J0X3NwbGl0X2xlYWZfbGF5b3V0KSwgdGhl IHNhbWUgd2F5IGEgcHJlZml4DQorCSAqIGxlYWYgc3BsaXQgaXMgcmVwbGF5ZWQgLS0gbm8gZnVs bC1wYWdlIGltYWdlIG5lZWRlZC4NCisJICovDQorCWlmIChwYWdlcHJlZml4KQ0KKwl7DQorCQlC VFBhZ2VPcGFxdWUgbm9wcSA9IEJUUGFnZUdldE9wYXF1ZShuZXdwYWdlKTsNCisJCU9mZnNldE51 bWJlciBubWluID0gUF9GSVJTVERBVEFLRVkobm9wcSk7DQorCQlPZmZzZXROdW1iZXIgbm1heCA9 IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIobmV3cGFnZSk7DQorDQorCQlkZWR1cF9ucGxhaW4gPSAo bm1heCA+PSBubWluKSA/IChpbnQpIG5tYXggLSAoaW50KSBubWluICsgMSA6IDA7DQorCQlpZiAo ZGVkdXBfbnBsYWluID4gMCkNCisJCXsNCisJCQlkZWR1cF9wbGFpbiA9IHBhbGxvYyhkZWR1cF9u cGxhaW4gKiBzaXplb2YoSW5kZXhUdXBsZSkpOw0KKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgZGVk dXBfbnBsYWluOyBpKyspDQorCQkJCWRlZHVwX3BsYWluW2ldID0gQ29weUluZGV4VHVwbGUoKElu ZGV4VHVwbGUpDQorCQkJCQkJCQkJCQkJUGFnZUdldEl0ZW0obmV3cGFnZSwNCisJCQkJCQkJCQkJ CQkJCQlQYWdlR2V0SXRlbUlkKG5ld3BhZ2UsIG5taW4gKyBpKSkpOw0KKwkJfQ0KKwkJaWYgKCFQ X1JJR0hUTU9TVChub3BxKSkNCisJCXsNCisJCQlJdGVtSWQJCWhpaSA9IFBhZ2VHZXRJdGVtSWQo bmV3cGFnZSwgUF9ISUtFWSk7DQorDQorCQkJZGVkdXBfaGlrZXkgPSBDb3B5SW5kZXhUdXBsZSgo SW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0obmV3cGFnZSwgaGlpKSk7DQorCQl9DQorDQorCQlfYnRf cHJlZml4X2NvbXByZXNzX3BhZ2UocmVsLCBuZXdwYWdlKTsNCisNCisJCS8qIERpZCBpdCBhY3R1 YWxseSBjb21wcmVzcz8gIChJdCBnaXZlcyB1cCBpZiBhIGNvZGVkIGl0ZW0gd29uJ3QgZml0Likg Ki8NCisJCWlmIChQX0hBU1BSRUZJWChCVFBhZ2VHZXRPcGFxdWUobmV3cGFnZSkpKQ0KKwkJew0K KwkJCWNvbnN0IGNoYXIgKnBmeCA9IF9idF9wYWdlX2dldF9wcmVmaXgobmV3cGFnZSwgJmRlZHVw X3ByZWZpeGxlbik7DQorDQorCQkJaWYgKGRlZHVwX3ByZWZpeGxlbiA+IDApDQorCQkJCW1lbWNw eShkZWR1cF9wcmVmaXgsIHBmeCwgZGVkdXBfcHJlZml4bGVuKTsNCisJCQlkZWR1cF9pc2xvZ3By ZWZpeCA9IHRydWU7DQorCQl9DQorCX0NCisNCisJLyoNCisJICogUGFjayB0aGUgcHJlZml4LWRl ZHVwIFdBTCBwYXlsb2FkIG5vdywgYmVmb3JlIHRoZSBjcml0aWNhbCBzZWN0aW9uDQorCSAqIChw YWxsb2MgaXMgZGlzYWxsb3dlZCBpbnNpZGUgaXQpOiB0aGUgY2hvc2VuIHByZWZpeCBieXRlcywg dGhlbiB0aGUgaGlnaA0KKwkgKiBrZXkgKHVubGVzcyByaWdodG1vc3QpLCB0aGVuIHRoZSBkZWR1 cGVkIHBsYWluIGl0ZW1zLCBlYWNoIE1BWEFMSUdOJ2QsDQorCSAqIGluIG9uZSBjb250aWd1b3Vz IGJ1ZmZlciBsb2dnZWQgd2l0aCBhIHNpbmdsZSByZGF0YSBzbG90Lg0KKwkgKi8NCisJaWYgKGRl ZHVwX2lzbG9ncHJlZml4KQ0KKwl7DQorCQlTaXplCQlvZmYgPSBkZWR1cF9wcmVmaXhsZW47DQor DQorCQlpZiAoZGVkdXBfaGlrZXkgIT0gTlVMTCkNCisJCQlvZmYgKz0gTUFYQUxJR04oSW5kZXhU dXBsZVNpemUoZGVkdXBfaGlrZXkpKTsNCisJCWZvciAoaW50IGkgPSAwOyBpIDwgZGVkdXBfbnBs YWluOyBpKyspDQorCQkJb2ZmICs9IE1BWEFMSUdOKEluZGV4VHVwbGVTaXplKGRlZHVwX3BsYWlu W2ldKSk7DQorDQorCQkvKg0KKwkJICogQSBwYXRob2xvZ2ljYWxseSBjb21wcmVzc2libGUgcGFn ZSBjYW4gaG9sZCBtb3JlIHBsYWluIGRhdGEgdGhhbg0KKwkJICogZml0cyBpbiBvbmUgcGFnZTsg aWYgdGhlIHBheWxvYWQgd291bGQgYmUgdGhhdCBsYXJnZSwgZmFsbCBiYWNrIHRvDQorCQkgKiBh IGZvcmNlZCBmdWxsLXBhZ2UgaW1hZ2Ugb2YgdGhlIGNvZGVkIHBhZ2UgKGJvdW5kZWQgYXQgQkxD S1NaKS4NCisJCSAqLw0KKwkJaWYgKG9mZiA+IEJMQ0tTWikNCisJCQlkZWR1cF9yZnBpID0gdHJ1 ZTsNCisJCWVsc2UNCisJCXsNCisJCQlkZWR1cF93YWxidWZsZW4gPSBvZmY7DQorCQkJZGVkdXBf d2FsYnVmID0gcGFsbG9jKE1heChvZmYsIDEpKTsNCisNCisJCQlvZmYgPSAwOw0KKwkJCWlmIChk ZWR1cF9wcmVmaXhsZW4gPiAwKQ0KKwkJCXsNCisJCQkJbWVtY3B5KGRlZHVwX3dhbGJ1ZiwgZGVk dXBfcHJlZml4LCBkZWR1cF9wcmVmaXhsZW4pOw0KKwkJCQlvZmYgKz0gZGVkdXBfcHJlZml4bGVu Ow0KKwkJCX0NCisJCQlpZiAoZGVkdXBfaGlrZXkgIT0gTlVMTCkNCisJCQl7DQorCQkJCVNpemUJ CWhzeiA9IEluZGV4VHVwbGVTaXplKGRlZHVwX2hpa2V5KTsNCisNCisJCQkJbWVtY3B5KGRlZHVw X3dhbGJ1ZiArIG9mZiwgZGVkdXBfaGlrZXksIGhzeik7DQorCQkJCWlmIChNQVhBTElHTihoc3op ICE9IGhzeikNCisJCQkJCW1lbXNldChkZWR1cF93YWxidWYgKyBvZmYgKyBoc3osIDAsIE1BWEFM SUdOKGhzeikgLSBoc3opOw0KKwkJCQlvZmYgKz0gTUFYQUxJR04oaHN6KTsNCisJCQl9DQorCQkJ Zm9yIChpbnQgaSA9IDA7IGkgPCBkZWR1cF9ucGxhaW47IGkrKykNCisJCQl7DQorCQkJCVNpemUJ CXN6ID0gSW5kZXhUdXBsZVNpemUoZGVkdXBfcGxhaW5baV0pOw0KKw0KKwkJCQltZW1jcHkoZGVk dXBfd2FsYnVmICsgb2ZmLCBkZWR1cF9wbGFpbltpXSwgc3opOw0KKwkJCQlpZiAoTUFYQUxJR04o c3opICE9IHN6KQ0KKwkJCQkJbWVtc2V0KGRlZHVwX3dhbGJ1ZiArIG9mZiArIHN6LCAwLCBNQVhB TElHTihzeikgLSBzeik7DQorCQkJCW9mZiArPSBNQVhBTElHTihzeik7DQorCQkJfQ0KKwkJfQ0K Kwl9DQorDQogCVNUQVJUX0NSSVRfU0VDVElPTigpOw0KIA0KIAlQYWdlUmVzdG9yZVRlbXBQYWdl KG5ld3BhZ2UsIHBhZ2UpOw0KQEAgLTI0OCwxOSArMzk5LDM4IEBAIF9idF9kZWR1cF9wYXNzKFJl bGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgSW5kZXhUdXBsZSBuZXdpdGVtLCBTaXplIG5ld2l0ZW1z eiwNCiAJew0KIAkJeGxfYnRyZWVfZGVkdXAgeGxyZWNfZGVkdXA7DQogDQotCQl4bHJlY19kZWR1 cC5uaW50ZXJ2YWxzID0gc3RhdGUtPm5pbnRlcnZhbHM7DQorCQl4bHJlY19kZWR1cC5uaW50ZXJ2 YWxzID0gZGVkdXBfaXNsb2dwcmVmaXggPyAwIDogc3RhdGUtPm5pbnRlcnZhbHM7DQorCQl4bHJl Y19kZWR1cC5wcmVmaXhsZW4gPSAodWludDgpIGRlZHVwX3ByZWZpeGxlbjsNCisJCXhscmVjX2Rl ZHVwLmZsYWdzID0gKGRlZHVwX2hpa2V5ICE9IE5VTEwpID8gWExIX0RFRFVQX05PVF9SSUdIVE1P U1QgOiAwOw0KKwkJaWYgKGRlZHVwX3JmcGkpDQorCQkJeGxyZWNfZGVkdXAuZmxhZ3MgfD0gWExI X0RFRFVQX1JGUEk7DQogDQogCQlYTG9nQmVnaW5JbnNlcnQoKTsNCi0JCVhMb2dSZWdpc3RlckJ1 ZmZlcigwLCBidWYsIFJFR0JVRl9TVEFOREFSRCk7DQorCQlYTG9nUmVnaXN0ZXJCdWZmZXIoMCwg YnVmLA0KKwkJCQkJCSAgIFJFR0JVRl9TVEFOREFSRCB8DQorCQkJCQkJICAgKGRlZHVwX3JmcGkg PyBSRUdCVUZfRk9SQ0VfSU1BR0UgOiAwKSk7DQogCQlYTG9nUmVnaXN0ZXJEYXRhKCZ4bHJlY19k ZWR1cCwgU2l6ZU9mQnRyZWVEZWR1cCk7DQogDQotCQkvKg0KLQkJICogVGhlIGludGVydmFscyBh cnJheSBpcyBub3QgaW4gdGhlIGJ1ZmZlciwgYnV0IHByZXRlbmQgdGhhdCBpdCBpcy4NCi0JCSAq IFdoZW4gWExvZ0luc2VydCBzdG9yZXMgdGhlIHdob2xlIGJ1ZmZlciwgdGhlIGFycmF5IG5lZWQg bm90IGJlDQotCQkgKiBzdG9yZWQgdG9vLg0KLQkJICovDQotCQlYTG9nUmVnaXN0ZXJCdWZEYXRh KDAsIHN0YXRlLT5pbnRlcnZhbHMsDQotCQkJCQkJCXN0YXRlLT5uaW50ZXJ2YWxzICogc2l6ZW9m KEJURGVkdXBJbnRlcnZhbCkpOw0KKwkJaWYgKGRlZHVwX2lzbG9ncHJlZml4KQ0KKwkJew0KKwkJ CS8qDQorCQkJICogUHJlZml4LWRlZHVwOiBjYXJyeSB0aGUgY2hvc2VuIHByZWZpeCBhbmQgdGhl IGRlZHVwZWQgcGxhaW4NCisJCQkgKiBpdGVtcyBzbyByZWRvIGNhbiBsYXkgb3V0IHRoZSBjb2Rl ZCBwYWdlOyBubyBmdWxsLXBhZ2UgaW1hZ2UNCisJCQkgKiAodW5sZXNzIHRoZSBwYXlsb2FkIHdh cyB0b28gbGFyZ2UsIGhhbmRsZWQgYnkgdGhlIGZvcmNlZCBpbWFnZSkuDQorCQkJICovDQorCQkJ aWYgKCFkZWR1cF9yZnBpICYmIGRlZHVwX3dhbGJ1ZmxlbiA+IDApDQorCQkJCVhMb2dSZWdpc3Rl ckJ1ZkRhdGEoMCwgZGVkdXBfd2FsYnVmLCBkZWR1cF93YWxidWZsZW4pOw0KKwkJfQ0KKwkJZWxz ZQ0KKwkJew0KKwkJCS8qDQorCQkJICogVGhlIGludGVydmFscyBhcnJheSBpcyBub3QgaW4gdGhl IGJ1ZmZlciwgYnV0IHByZXRlbmQgdGhhdCBpdA0KKwkJCSAqIGlzLiAgV2hlbiBYTG9nSW5zZXJ0 IHN0b3JlcyB0aGUgd2hvbGUgYnVmZmVyLCB0aGUgYXJyYXkgbmVlZCBub3QNCisJCQkgKiBiZSBz dG9yZWQgdG9vLg0KKwkJCSAqLw0KKwkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMCwgc3RhdGUtPmlu dGVydmFscywNCisJCQkJCQkJCXN0YXRlLT5uaW50ZXJ2YWxzICogc2l6ZW9mKEJURGVkdXBJbnRl cnZhbCkpOw0KKwkJfQ0KIA0KIAkJcmVjcHRyID0gWExvZ0luc2VydChSTV9CVFJFRV9JRCwgWExP R19CVFJFRV9ERURVUCk7DQogCX0NCkBAIC0yNzcsNiArNDQ3LDIwIEBAIF9idF9kZWR1cF9wYXNz KFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgSW5kZXhUdXBsZSBuZXdpdGVtLCBTaXplIG5ld2l0 ZW1zeiwNCiAJLyogY2Fubm90IGxlYWsgbWVtb3J5IGhlcmUgKi8NCiAJcGZyZWUoc3RhdGUtPmh0 aWRzKTsNCiAJcGZyZWUoc3RhdGUpOw0KKwlyZXR1cm47DQorDQorZGVkdXBfb3ZlcmZsb3c6DQor DQorCS8qDQorCSAqIEEgcHJlZml4IHBhZ2UncyBkZWR1cGVkIGl0ZW1zIGRpZCBub3QgZml0IHdo ZW4gbGFpZCBvdXQgcGxhaW4uICBMZWF2ZQ0KKwkgKiB0aGUgb3JpZ2luYWwgcGFnZSB1bnRvdWNo ZWQgYW5kIHJldHVybiB3aXRob3V0IHdyaXRpbmcgYW55dGhpbmc7IHRoZQ0KKwkgKiBjYWxsZXIg ZmFsbHMgdGhyb3VnaCB0byBzcGxpdCB0aGUgcGFnZS4gIE5vIGNyaXRpY2FsIHNlY3Rpb24gd2Fz DQorCSAqIGVudGVyZWQgYW5kIHRoZSBidWZmZXIgd2FzIG5vdCBtYXJrZWQgZGlydHksIHNvIHRo ZSBwYWdlIGlzIHVuY2hhbmdlZC4NCisJICovDQorCUFzc2VydChwYWdlcHJlZml4KTsNCisJcGZy ZWUobmV3cGFnZSk7DQorCXBmcmVlKHN0YXRlLT5odGlkcyk7DQorCXBmcmVlKHN0YXRlKTsNCiB9 DQogDQogLyoNCkBAIC0zMTgsNiArNTAyLDkgQEAgX2J0X2JvdHRvbXVwZGVsX3Bhc3MoUmVsYXRp b24gcmVsLCBCdWZmZXIgYnVmLCBSZWxhdGlvbiBoZWFwUmVsLA0KIAlUTV9JbmRleERlbGV0ZU9w IGRlbHN0YXRlOw0KIAlib29sCQluZXZlcmRlZHVwOw0KIAlpbnQJCQlua2V5YXR0cyA9IEluZGV4 UmVsYXRpb25HZXROdW1iZXJPZktleUF0dHJpYnV0ZXMocmVsKTsNCisJYm9vbAkJcGFnZXByZWZp eCA9IFBfSEFTUFJFRklYKG9wYXF1ZSk7DQorCUJUSXRlbUJ1ZgljdXJidWY7CQkJLyogZGVjb2Rl IHNjcmF0Y2ggZm9yIHRoZSBsb29wJ3MgY3VycmVudCBpdGVtICovDQorCUJUSXRlbUJ1ZgliYXNl YnVmOwkJLyogZGVjb2RlIHNjcmF0Y2gga2VwdCBmb3IgdGhlIHBlbmRpbmcgYmFzZSAqLw0KIA0K IAkvKiBQYXNzZWQtaW4gbmV3aXRlbXN6IGlzIE1BWEFMSUdORUQgYnV0IGRvZXMgbm90IGluY2x1 ZGUgbGluZSBwb2ludGVyICovDQogCW5ld2l0ZW1zeiArPSBzaXplb2YoSXRlbUlkRGF0YSk7DQpA QCAtMzcxLDkgKzU1OCwyNCBAQCBfYnRfYm90dG9tdXBkZWxfcGFzcyhSZWxhdGlvbiByZWwsIEJ1 ZmZlciBidWYsIFJlbGF0aW9uIGhlYXBSZWwsDQogDQogCQlBc3NlcnQoIUl0ZW1JZElzRGVhZChp dGVtaWQpKTsNCiANCisJCS8qDQorCQkgKiBPbiBhIHByZWZpeC1jb21wcmVzc2VkIHBhZ2UgZGVj b2RlIHRoZSBpdGVtIHNvIF9idF9rZWVwX25hdHRzX2Zhc3QNCisJCSAqIHNlZXMgdGhlIHJlYWwg a2V5LiAgVGhlIGJhc2Ugb2YgYSBwZW5kaW5nIGludGVydmFsIG11c3Qgc3Vydml2ZSB0aGUNCisJ CSAqIHdob2xlIHJ1biAoaXQgaXMgY29tcGFyZWQgYWdhaW5zdCBlYWNoIGZvbGxvd2luZyBpdGVt KSwgc28ga2VlcCBpdA0KKwkJICogaW4gaXRzIG93biBidWZmZXI7IHRoZSBjdXJyZW50IGl0ZW0g dXNlcyBhIHJldXNlZCBidWZmZXIuICBIZWFwIFRJRHMNCisJCSAqIGFuZCBwb3N0aW5nIGxpc3Rz IGFyZSBwcmVzZXJ2ZWQgYnkgY29kaW5nLCBzbyBfYnRfZGVkdXBfc3RhcnRfcGVuZGluZw0KKwkJ ICogYW5kIF9idF9ib3R0b211cGRlbF9maW5pc2hfcGVuZGluZyAod2hpY2ggcmVhZCBvbmx5IFRJ RHMvc2l6ZXMsIGJ5DQorCQkgKiBwYWdlIG9mZnNldCkgbmVlZCBubyBkZWNvZGUuDQorCQkgKi8N CisJCWlmIChwYWdlcHJlZml4KQ0KKwkJCWl0dXAgPSBfYnRfcHJlZml4X2RlY29kZShwYWdlLCBp dHVwLCAmY3VyYnVmKTsNCisNCiAJCWlmIChvZmZudW0gPT0gbWlub2ZmKQ0KIAkJew0KIAkJCS8q IGl0dXAgc3RhcnRzIGZpcnN0IHBlbmRpbmcgaW50ZXJ2YWwgKi8NCisJCQlpZiAocGFnZXByZWZp eCkNCisJCQkJaXR1cCA9IF9idF9wcmVmaXhfZGVjb2RlKHBhZ2UsIChJbmRleFR1cGxlKSBQYWdl R2V0SXRlbShwYWdlLCBpdGVtaWQpLA0KKwkJCQkJCQkJCQkgJmJhc2VidWYpOw0KIAkJCV9idF9k ZWR1cF9zdGFydF9wZW5kaW5nKHN0YXRlLCBpdHVwLCBvZmZudW0pOw0KIAkJfQ0KIAkJZWxzZSBp ZiAoX2J0X2tlZXBfbmF0dHNfZmFzdChyZWwsIHN0YXRlLT5iYXNlLCBpdHVwKSA+IG5rZXlhdHRz ICYmDQpAQCAtMzg3LDYgKzU4OSw5IEBAIF9idF9ib3R0b211cGRlbF9wYXNzKFJlbGF0aW9uIHJl bCwgQnVmZmVyIGJ1ZiwgUmVsYXRpb24gaGVhcFJlbCwNCiAJCQlfYnRfYm90dG9tdXBkZWxfZmlu aXNoX3BlbmRpbmcocGFnZSwgc3RhdGUsICZkZWxzdGF0ZSk7DQogDQogCQkJLyogaXR1cCBzdGFy dHMgbmV3IHBlbmRpbmcgaW50ZXJ2YWwgKi8NCisJCQlpZiAocGFnZXByZWZpeCkNCisJCQkJaXR1 cCA9IF9idF9wcmVmaXhfZGVjb2RlKHBhZ2UsIChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdl LCBpdGVtaWQpLA0KKwkJCQkJCQkJCQkgJmJhc2VidWYpOw0KIAkJCV9idF9kZWR1cF9zdGFydF9w ZW5kaW5nKHN0YXRlLCBpdHVwLCBvZmZudW0pOw0KIAkJfQ0KIAl9DQpAQCAtNTU0LDcgKzc1OSw3 IEBAIF9idF9kZWR1cF9zYXZlX2h0aWQoQlREZWR1cFN0YXRlIHN0YXRlLCBJbmRleFR1cGxlIGl0 dXApDQogICogd2hlcmUgbm8gZGVkdXBsaWNhdGlvbiB3YXMgcG9zc2libGUuDQogICovDQogU2l6 ZQ0KLV9idF9kZWR1cF9maW5pc2hfcGVuZGluZyhQYWdlIG5ld3BhZ2UsIEJURGVkdXBTdGF0ZSBz dGF0ZSkNCitfYnRfZGVkdXBfZmluaXNoX3BlbmRpbmcoUGFnZSBuZXdwYWdlLCBCVERlZHVwU3Rh dGUgc3RhdGUsIGJvb2wgb3ZlcmZsb3dvaykNCiB7DQogCU9mZnNldE51bWJlciB0dXBvZmY7DQog CVNpemUJCXR1cGxlc3o7DQpAQCAtNTcyLDcgKzc3NywxMSBAQCBfYnRfZGVkdXBfZmluaXNoX3Bl bmRpbmcoUGFnZSBuZXdwYWdlLCBCVERlZHVwU3RhdGUgc3RhdGUpDQogCQlBc3NlcnQodHVwbGVz eiA9PSBNQVhBTElHTihJbmRleFR1cGxlU2l6ZShzdGF0ZS0+YmFzZSkpKTsNCiAJCUFzc2VydCh0 dXBsZXN6IDw9IEJUTWF4SXRlbVNpemUpOw0KIAkJaWYgKFBhZ2VBZGRJdGVtKG5ld3BhZ2UsIHN0 YXRlLT5iYXNlLCB0dXBsZXN6LCB0dXBvZmYsIGZhbHNlLCBmYWxzZSkgPT0gSW52YWxpZE9mZnNl dE51bWJlcikNCisJCXsNCisJCQlpZiAob3ZlcmZsb3dvaykNCisJCQkJcmV0dXJuIChTaXplKSAt MTsNCiAJCQllbG9nKEVSUk9SLCAiZGVkdXBsaWNhdGlvbiBmYWlsZWQgdG8gYWRkIHR1cGxlIHRv IHBhZ2UiKTsNCisJCX0NCiANCiAJCXNwYWNlc2F2aW5nID0gMDsNCiAJfQ0KQEAgLTU5MSwxMyAr ODAwLDI2IEBAIF9idF9kZWR1cF9maW5pc2hfcGVuZGluZyhQYWdlIG5ld3BhZ2UsIEJURGVkdXBT dGF0ZSBzdGF0ZSkNCiAJCUFzc2VydCh0dXBsZXN6ID09IE1BWEFMSUdOKEluZGV4VHVwbGVTaXpl KGZpbmFsKSkpOw0KIAkJQXNzZXJ0KHR1cGxlc3ogPD0gQlRNYXhJdGVtU2l6ZSk7DQogCQlpZiAo UGFnZUFkZEl0ZW0obmV3cGFnZSwgZmluYWwsIHR1cGxlc3osIHR1cG9mZiwgZmFsc2UsIGZhbHNl KSA9PSBJbnZhbGlkT2Zmc2V0TnVtYmVyKQ0KKwkJew0KKwkJCXBmcmVlKGZpbmFsKTsNCisJCQlp ZiAob3ZlcmZsb3dvaykNCisJCQkJcmV0dXJuIChTaXplKSAtMTsNCiAJCQllbG9nKEVSUk9SLCAi ZGVkdXBsaWNhdGlvbiBmYWlsZWQgdG8gYWRkIHR1cGxlIHRvIHBhZ2UiKTsNCisJCX0NCiANCiAJ CXBmcmVlKGZpbmFsKTsNCiAJCXNwYWNlc2F2aW5nID0gc3RhdGUtPnBoeXN0dXBzaXplIC0gKHR1 cGxlc3ogKyBzaXplb2YoSXRlbUlkRGF0YSkpOw0KIAkJLyogSW5jcmVtZW50IG5pbnRlcnZhbHMs IHNpbmNlIHdlIHdyb3RlIGEgbmV3IHBvc3RpbmcgbGlzdCB0dXBsZSAqLw0KIAkJc3RhdGUtPm5p bnRlcnZhbHMrKzsNCi0JCUFzc2VydChzcGFjZXNhdmluZyA+IDAgJiYgc3BhY2VzYXZpbmcgPCBC TENLU1opOw0KKw0KKwkJLyoNCisJCSAqIE9uIGFuIG9yZGluYXJ5IHBhZ2UgdGhlIG1lcmdlZCBp bnRlcnZhbCdzIHR1cGxlcyB3ZXJlIGFsbCBwaHlzaWNhbGx5DQorCQkgKiBwcmVzZW50IG9uIG9u ZSBwYWdlLCBzbyB0aGUgc2F2aW5nIGlzIGJvdW5kZWQgYnkgQkxDS1NaLiAgT24gYSBwcmVmaXgN CisJCSAqIHBhZ2UgKG92ZXJmbG93b2spIHBoeXN0dXBzaXplIGlzIHRoZSBERUNPREVEIHNpemUg b2YgdGhvc2UgdHVwbGVzLA0KKwkJICogd2hpY2ggY2FuIGV4Y2VlZCBhIHBhZ2UgKGEgY29kZWQg cGFnZSBob2xkcyBtb3JlIGxvZ2ljYWwgZGF0YSB0aGFuDQorCQkgKiBmaXRzIHBsYWluKSwgc28g b25seSByZXF1aXJlIHRoZSBzYXZpbmcgdG8gYmUgcG9zaXRpdmUgdGhlcmUuDQorCQkgKi8NCisJ CUFzc2VydChzcGFjZXNhdmluZyA+IDAgJiYgKG92ZXJmbG93b2sgfHwgc3BhY2VzYXZpbmcgPCBC TENLU1opKTsNCiAJfQ0KIA0KIAkvKiBSZXNldCBzdGF0ZSBmb3IgbmV4dCBwZW5kaW5nIHBvc3Rp bmcgbGlzdCAqLw0KQEAgLTc4MywxNiArMTAwNSwyMiBAQCBfYnRfZG9fc2luZ2xldmFsKFJlbGF0 aW9uIHJlbCwgUGFnZSBwYWdlLCBCVERlZHVwU3RhdGUgc3RhdGUsDQogCQkJCSBPZmZzZXROdW1i ZXIgbWlub2ZmLCBJbmRleFR1cGxlIG5ld2l0ZW0pDQogew0KIAlpbnQJCQlua2V5YXR0cyA9IElu ZGV4UmVsYXRpb25HZXROdW1iZXJPZktleUF0dHJpYnV0ZXMocmVsKTsNCisJYm9vbAkJcGFnZXBy ZWZpeCA9IFBfSEFTUFJFRklYKEJUUGFnZUdldE9wYXF1ZShwYWdlKSk7DQogCUl0ZW1JZAkJaXRl bWlkOw0KIAlJbmRleFR1cGxlCWl0dXA7DQorCUJUSXRlbUJ1ZglidWY7DQogDQogCWl0ZW1pZCA9 IFBhZ2VHZXRJdGVtSWQocGFnZSwgbWlub2ZmKTsNCiAJaXR1cCA9IChJbmRleFR1cGxlKSBQYWdl R2V0SXRlbShwYWdlLCBpdGVtaWQpOw0KKwlpZiAocGFnZXByZWZpeCkNCisJCWl0dXAgPSBfYnRf cHJlZml4X2RlY29kZShwYWdlLCBpdHVwLCAmYnVmKTsNCiANCiAJaWYgKF9idF9rZWVwX25hdHRz X2Zhc3QocmVsLCBuZXdpdGVtLCBpdHVwKSA+IG5rZXlhdHRzKQ0KIAl7DQogCQlpdGVtaWQgPSBQ YWdlR2V0SXRlbUlkKHBhZ2UsIFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSkpOw0KIAkJaXR1 cCA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpdGVtaWQpOw0KKwkJaWYgKHBhZ2Vw cmVmaXgpDQorCQkJaXR1cCA9IF9idF9wcmVmaXhfZGVjb2RlKHBhZ2UsIGl0dXAsICZidWYpOw0K IA0KIAkJaWYgKF9idF9rZWVwX25hdHRzX2Zhc3QocmVsLCBuZXdpdGVtLCBpdHVwKSA+IG5rZXlh dHRzKQ0KIAkJCXJldHVybiB0cnVlOw0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0aW5zZXJ0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGluc2VydC5j DQppbmRleCBkNWQ5NjQzMDFjMS4uNDA5NDU1YWM3ZjIgMTAwNjQ0DQotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idGluc2VydC5jDQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idGluc2VydC5jDQpAQCAtMzQ4LDggKzM0OCw4IEBAIF9idF9zZWFyY2hfaW5zZXJ0KFJl bGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0ZSkN CiAJCQkJUF9JU0xFQUYob3BhcXVlKSAmJg0KIAkJCQkhUF9JR05PUkUob3BhcXVlKSAmJg0KIAkJ CQlQYWdlR2V0RnJlZVNwYWNlKHBhZ2UpID4gaW5zZXJ0c3RhdGUtPml0ZW1zeiAmJg0KLQkJCQlQ YWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpID49IFBfSElLRVkgJiYNCi0JCQkJX2J0X2NvbXBh cmUocmVsLCBpbnNlcnRzdGF0ZS0+aXR1cF9rZXksIHBhZ2UsIFBfSElLRVkpID4gMCkNCisJCQkJ UGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKSA+PSBQX0ZJUlNUREFUQUtFWShvcGFxdWUpICYm DQorCQkJCV9idF9jb21wYXJlKHJlbCwgaW5zZXJ0c3RhdGUtPml0dXBfa2V5LCBwYWdlLCBQX0ZJ UlNUREFUQUtFWShvcGFxdWUpKSA+IDApDQogCQkJew0KIAkJCQkvKg0KIAkJCQkgKiBDYWxsZXIg Y2FuIHVzZSB0aGUgZmFzdHBhdGggb3B0aW1pemF0aW9uIGJlY2F1c2UgY2FjaGVkDQpAQCAtMTEz NSw2ICsxMTM1LDExIEBAIF9idF9pbnNlcnRvbnBnKFJlbGF0aW9uIHJlbCwNCiAJSW5kZXhUdXBs ZQlvcG9zdGluZyA9IE5VTEw7DQogCUluZGV4VHVwbGUJb3JpZ2l0dXAgPSBOVUxMOw0KIAlJbmRl eFR1cGxlCW5wb3N0aW5nID0gTlVMTDsNCisJSW5kZXhUdXBsZQljb2RlZGl0dXA7CQkvKiBpdHVw IGNvZGVkIGZvciB0aGUgcGFnZSwgb3IgaXR1cCAqLw0KKwlTaXplCQljb2RlZGl0ZW1zejsJLyog aXRzIE1BWEFMSUdOZWQgc2l6ZSAqLw0KKwlJbmRleFR1cGxlCWNvZGVkbnBvc3RpbmcgPSBOVUxM OwkvKiBucG9zdGluZyBjb2RlZCBmb3IgdGhlIHBhZ2UgKi8NCisJQlRJdGVtQnVmCW9wb3N0YnVm OwkJLyogZGVjb2RlIHdvcmtzcGFjZSBmb3IgYW4gZXhpc3RpbmcgcG9zdGluZyAqLw0KKwlib29s CQlwYWdlcHJlZml4OwkJLyogdGFyZ2V0IHBhZ2UgaXMgQlRQX1BSRUZJWCAqLw0KIAlYTG9nUmVj UHRyCXJlY3B0cjsNCiANCiAJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsNCkBAIC0xMTQzLDYg KzExNDgsNyBAQCBfYnRfaW5zZXJ0b25wZyhSZWxhdGlvbiByZWwsDQogCWlzcm9vdCA9IFBfSVNS T09UKG9wYXF1ZSk7DQogCWlzcmlnaHRtb3N0ID0gUF9SSUdIVE1PU1Qob3BhcXVlKTsNCiAJaXNv bmx5ID0gUF9MRUZUTU9TVChvcGFxdWUpICYmIFBfUklHSFRNT1NUKG9wYXF1ZSk7DQorCXBhZ2Vw cmVmaXggPSBQX0hBU1BSRUZJWChvcGFxdWUpOw0KIA0KIAkvKiBjaGlsZCBidWZmZXIgbXVzdCBi ZSBnaXZlbiBpZmYgaW5zZXJ0aW5nIG9uIGFuIGludGVybmFsIHBhZ2UgKi8NCiAJQXNzZXJ0KGlz bGVhZiA9PSAhQnVmZmVySXNWYWxpZChjYnVmKSk7DQpAQCAtMTE4Miw2ICsxMTg4LDkgQEAgX2J0 X2luc2VydG9ucGcoUmVsYXRpb24gcmVsLA0KIAkJICovDQogCQlBc3NlcnQoaXNsZWFmICYmIGl0 dXBfa2V5LT5oZWFwa2V5c3BhY2UgJiYgaXR1cF9rZXktPmFsbGVxdWFsaW1hZ2UpOw0KIAkJb3Bv c3RpbmcgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaXRlbWlkKTsNCisJCS8qIE9u IGEgcHJlZml4IHBhZ2UgdGhlIGV4aXN0aW5nIHBvc3RpbmcgaXMgY29kZWQ7IGRlY29kZSBmb3Ig dGhlIHN3YXAuICovDQorCQlpZiAocGFnZXByZWZpeCkNCisJCQlvcG9zdGluZyA9IF9idF9wcmVm aXhfZGVjb2RlKHBhZ2UsIG9wb3N0aW5nLCAmb3Bvc3RidWYpOw0KIA0KIAkJLyoNCiAJCSAqIHBv c3RpbmdvZmYgdmFsdWUgY29tZXMgZnJvbSBlYXJsaWVyIGNhbGwgdG8gX2J0X2JpbnNyY2hfcG9z dGluZygpLg0KQEAgLTEyMTMsMTkgKzEyMjIsNTAgQEAgX2J0X2luc2VydG9ucGcoUmVsYXRpb24g cmVsLA0KIAkJbmV3aXRlbW9mZiA9IE9mZnNldE51bWJlck5leHQobmV3aXRlbW9mZik7DQogCX0N CiANCisJLyoNCisJICogT24gYSBwcmVmaXgtY29tcHJlc3NlZCBwYWdlIHRoZSBuZXcgaXRlbSBp cyBzdG9yZWQgY29kZWQsIHdoaWNoIGlzIGF0DQorCSAqIG1vc3QgTUFYQUxJR04gbGFyZ2VyIHRo YW4gcGxhaW4gYW5kIHVzdWFsbHkgbXVjaCBzbWFsbGVyLiAgU2l6ZSB0aGUgZml0DQorCSAqIHRl c3QgYW5kIHRoZSBwbGFjZW1lbnQgYnkgdGhlIGNvZGVkIHNpemUuICAoU3BsaXQgaXMgaGFuZGxl ZCBvbiBwbGFpbg0KKwkgKiB0dXBsZXM7IF9idF9zcGxpdCByZS1jb21wcmVzc2VzIGVhY2ggaGFs ZiBpdHNlbGYuKQ0KKwkgKi8NCisJaWYgKHBhZ2VwcmVmaXgpDQorCXsNCisJCWNvZGVkaXR1cCA9 IF9idF9wcmVmaXhfZW5jb2RlKHBhZ2UsIGl0dXApOw0KKwkJY29kZWRpdGVtc3ogPSBNQVhBTElH TihJbmRleFR1cGxlU2l6ZShjb2RlZGl0dXApKTsNCisJCS8qDQorCQkgKiBBIHBvc3RpbmctbGlz dCBzcGxpdCByZXBsYWNlcyB0aGUgZXhpc3RpbmcgY29kZWQgcG9zdGluZyB3aXRoIGENCisJCSAq IHJlLWNvZGVkIG9uZTsgZW5jb2RlIGl0IGhlcmUsIGJlZm9yZSB0aGUgY3JpdGljYWwgc2VjdGlv biwgc2luY2UNCisJCSAqIF9idF9wcmVmaXhfZW5jb2RlKCkgYWxsb2NhdGVzLg0KKwkJICovDQor CQlpZiAobnBvc3RpbmcgIT0gTlVMTCkNCisJCQljb2RlZG5wb3N0aW5nID0gX2J0X3ByZWZpeF9l bmNvZGUocGFnZSwgbnBvc3RpbmcpOw0KKwl9DQorCWVsc2UNCisJew0KKwkJY29kZWRpdHVwID0g aXR1cDsNCisJCWNvZGVkaXRlbXN6ID0gaXRlbXN6Ow0KKwl9DQorDQogCS8qDQogCSAqIERvIHdl IG5lZWQgdG8gc3BsaXQgdGhlIHBhZ2UgdG8gZml0IHRoZSBpdGVtIG9uIGl0Pw0KIAkgKg0KIAkg KiBOb3RlOiBQYWdlR2V0RnJlZVNwYWNlKCkgc3VidHJhY3RzIHNpemVvZihJdGVtSWREYXRhKSBm cm9tIGl0cyByZXN1bHQsDQogCSAqIHNvIHRoaXMgY29tcGFyaXNvbiBpcyBjb3JyZWN0IGV2ZW4g dGhvdWdoIHdlIGFwcGVhciB0byBiZSBhY2NvdW50aW5nDQotCSAqIG9ubHkgZm9yIHRoZSBpdGVt IGFuZCBub3QgZm9yIGl0cyBsaW5lIHBvaW50ZXIuDQorCSAqIG9ubHkgZm9yIHRoZSBpdGVtIGFu ZCBub3QgZm9yIGl0cyBsaW5lIHBvaW50ZXIuICBUaGUgY29kZWQgaXRlbSBzaXplIGlzDQorCSAq IHVzZWQ7IGEgcG9zdGluZy1saXN0IHNwbGl0IGFkZGl0aW9uYWxseSBjaGFuZ2VzIHRoZSBwb3N0 aW5nIHR1cGxlJ3MNCisJICogc2l6ZSwgYnV0IHRoYXQgY2FuIG9ubHkgc2hyaW5rIG9yIGtlZXAg ZnJlZSBzcGFjZSAodGhlIG5ldyBwb3N0aW5nIGhhcw0KKwkgKiBvbmUgZmV3ZXIgVElEJ3Mgd29y dGggb2Ygcm9vbSByZXVzZWQgYnkgbmV3aXRlbSksIHNvIHRoZSBpdGVtIGZpdCB0ZXN0DQorCSAq IHJlbWFpbnMgYSBzYWZlIHVwcGVyIGJvdW5kLg0KIAkgKi8NCi0JaWYgKFBhZ2VHZXRGcmVlU3Bh Y2UocGFnZSkgPCBpdGVtc3opDQorCWlmIChQYWdlR2V0RnJlZVNwYWNlKHBhZ2UpIDwgY29kZWRp dGVtc3opDQogCXsNCiAJCUJ1ZmZlcgkJcmJ1ZjsNCiANCiAJCUFzc2VydCghc3BsaXRfb25seV9w YWdlKTsNCiANCisJCWlmIChjb2RlZGl0dXAgIT0gaXR1cCkNCisJCQlwZnJlZShjb2RlZGl0dXAp Ow0KKw0KIAkJLyogc3BsaXQgdGhlIGJ1ZmZlciBpbnRvIGxlZnQgYW5kIHJpZ2h0IGhhbHZlcyAq Lw0KIAkJcmJ1ZiA9IF9idF9zcGxpdChyZWwsIGhlYXByZWwsIGl0dXBfa2V5LCBidWYsIGNidWYs IG5ld2l0ZW1vZmYsIGl0ZW1zeiwNCiAJCQkJCQkgaXR1cCwgb3JpZ2l0dXAsIG5wb3N0aW5nLCBw b3N0aW5nb2ZmKTsNCkBAIC0xMjk1LDkgKzEzMzUsMjUgQEAgX2J0X2luc2VydG9ucGcoUmVsYXRp b24gcmVsLA0KIAkJU1RBUlRfQ1JJVF9TRUNUSU9OKCk7DQogDQogCQlpZiAocG9zdGluZ29mZiAh PSAwKQ0KLQkJCW1lbWNweShvcG9zdGluZywgbnBvc3RpbmcsIE1BWEFMSUdOKEluZGV4VHVwbGVT aXplKG5wb3N0aW5nKSkpOw0KKwkJew0KKwkJCWlmIChwYWdlcHJlZml4KQ0KKwkJCXsNCisJCQkJ LyoNCisJCQkJICogVGhlIGV4aXN0aW5nIHBvc3RpbmcgaXMgc3RvcmVkIGNvZGVkOyByZXBsYWNl IGl0cyBzbG90IChhdA0KKwkJCQkgKiB0aGUgb2Zmc2V0IGp1c3QgYmVmb3JlIG5ld2l0ZW1vZmYs IHNpbmNlIG5ld2l0ZW1vZmYgd2FzDQorCQkJCSAqIGFkdmFuY2VkIHBhc3QgaXQgYWJvdmUpIHdp dGggdGhlIGNvZGVkIG5ldyBwb3N0aW5nIChlbmNvZGVkDQorCQkJCSAqIGJlZm9yZSB0aGUgY3Jp dGljYWwgc2VjdGlvbiksIHdob3NlIHNpemUgbWF5IGRpZmZlci4NCisJCQkJICovDQorCQkJCWlm ICghUGFnZUluZGV4VHVwbGVPdmVyd3JpdGUocGFnZSwgT2Zmc2V0TnVtYmVyUHJldihuZXdpdGVt b2ZmKSwNCisJCQkJCQkJCQkJCSBjb2RlZG5wb3N0aW5nLCBJbmRleFR1cGxlU2l6ZShjb2RlZG5w b3N0aW5nKSkpDQorCQkJCQllbG9nKFBBTklDLCAiZmFpbGVkIHRvIG92ZXJ3cml0ZSBwb3N0aW5n IGxpc3QgaW4gYmxvY2sgJXUgaW4gaW5kZXggXCIlc1wiIiwNCisJCQkJCQkgQnVmZmVyR2V0Qmxv Y2tOdW1iZXIoYnVmKSwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7DQorCQkJfQ0KKwkJ CWVsc2UNCisJCQkJbWVtY3B5KG9wb3N0aW5nLCBucG9zdGluZywgTUFYQUxJR04oSW5kZXhUdXBs ZVNpemUobnBvc3RpbmcpKSk7DQorCQl9DQogDQotCQlpZiAoUGFnZUFkZEl0ZW0ocGFnZSwgaXR1 cCwgaXRlbXN6LCBuZXdpdGVtb2ZmLCBmYWxzZSwgZmFsc2UpID09IEludmFsaWRPZmZzZXROdW1i ZXIpDQorCQlpZiAoUGFnZUFkZEl0ZW0ocGFnZSwgY29kZWRpdHVwLCBjb2RlZGl0ZW1zeiwgbmV3 aXRlbW9mZiwgZmFsc2UsIGZhbHNlKSA9PSBJbnZhbGlkT2Zmc2V0TnVtYmVyKQ0KIAkJCWVsb2co UEFOSUMsICJmYWlsZWQgdG8gYWRkIG5ldyBpdGVtIHRvIGJsb2NrICV1IGluIGluZGV4IFwiJXNc IiIsDQogCQkJCSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpLCBSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShyZWwpKTsNCiANCkBAIC0xMzgxLDggKzE0MzcsMzAgQEAgX2J0X2luc2VydG9ucGcoUmVs YXRpb24gcmVsLA0KIAkJCQl9DQogCQkJfQ0KIA0KLQkJCVhMb2dSZWdpc3RlckJ1ZmZlcigwLCBi dWYsIFJFR0JVRl9TVEFOREFSRCk7DQotCQkJaWYgKHBvc3RpbmdvZmYgPT0gMCkNCisJCQlYTG9n UmVnaXN0ZXJCdWZmZXIoMCwgYnVmLA0KKwkJCQkJCQkgICBSRUdCVUZfU1RBTkRBUkQgfA0KKwkJ CQkJCQkgICAoKHBhZ2VwcmVmaXggJiYgcG9zdGluZ29mZiAhPSAwKSA/IFJFR0JVRl9GT1JDRV9J TUFHRSA6IDApKTsNCisJCQlpZiAocGFnZXByZWZpeCAmJiBwb3N0aW5nb2ZmICE9IDApDQorCQkJ ew0KKwkJCQkvKg0KKwkJCQkgKiBBIHBvc3RpbmctbGlzdCBzcGxpdCBvbiBhIHByZWZpeCBwYWdl IHJld3JpdGVzIGFuIGV4aXN0aW5nDQorCQkJCSAqIGNvZGVkIHBvc3RpbmcgYW5kIGFkZHMgYSBj b2RlZCBpdGVtOyByYXRoZXIgdGhhbiB0ZWFjaCByZWRvIHRvDQorCQkJCSAqIHJlLWNvZGUgYm90 aCwgZm9yY2UgYSBmdWxsLXBhZ2UgaW1hZ2UgKHRoaXMgaXMgYSByYXJlIGNhc2UpLg0KKwkJCQkg KiBwb3N0aW5nb2ZmIGlzIHN0aWxsIHJlY29yZGVkIGZvciB0aGUgcmVjb3JkIGZvcm1hdC4NCisJ CQkJICovDQorCQkJCXVwb3N0aW5nb2ZmID0gcG9zdGluZ29mZjsNCisJCQkJWExvZ1JlZ2lzdGVy QnVmRGF0YSgwLCAmdXBvc3RpbmdvZmYsIHNpemVvZih1aW50MTYpKTsNCisJCQl9DQorCQkJZWxz ZSBpZiAocGFnZXByZWZpeCkNCisJCQl7DQorCQkJCS8qDQorCQkJCSAqIFNpbXBsZSBpbnNlcnQg b24gYSBwcmVmaXggcGFnZTogbG9nIHRoZSBDT0RFRCBpdGVtIGJ5dGVzIGFzDQorCQkJCSAqIHRo ZXkgd2VyZSBwbGFjZWQgb24gdGhlIHBhZ2UsIHNvIHJlZG8gYWRkcyB0aGVtIHZlcmJhdGltIGF0 DQorCQkJCSAqIG5ld2l0ZW1vZmYgLS0gbm8gZnVsbC1wYWdlIGltYWdlIG5lZWRlZCwgYW5kIGJ5 dGUtaWRlbnRpY2FsLg0KKwkJCQkgKi8NCisJCQkJWExvZ1JlZ2lzdGVyQnVmRGF0YSgwLCAoY2hh ciAqKSBjb2RlZGl0dXAsIEluZGV4VHVwbGVTaXplKGNvZGVkaXR1cCkpOw0KKwkJCX0NCisJCQll bHNlIGlmIChwb3N0aW5nb2ZmID09IDApDQogCQkJew0KIAkJCQkvKiBKdXN0IGxvZyBpdHVwIGZy b20gY2FsbGVyICovDQogCQkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMCwgaXR1cCwgSW5kZXhUdXBs ZVNpemUoaXR1cCkpOw0KQEAgLTE0MTgsNiArMTQ5NiwxMSBAQCBfYnRfaW5zZXJ0b25wZyhSZWxh dGlvbiByZWwsDQogDQogCQlFTkRfQ1JJVF9TRUNUSU9OKCk7DQogDQorCQlpZiAoY29kZWRpdHVw ICE9IGl0dXApDQorCQkJcGZyZWUoY29kZWRpdHVwKTsNCisJCWlmIChjb2RlZG5wb3N0aW5nICE9 IE5VTEwgJiYgY29kZWRucG9zdGluZyAhPSBucG9zdGluZykNCisJCQlwZnJlZShjb2RlZG5wb3N0 aW5nKTsNCisNCiAJCS8qIFJlbGVhc2Ugc3Vic2lkaWFyeSBidWZmZXJzICovDQogCQlpZiAoQnVm ZmVySXNWYWxpZChtZXRhYnVmKSkNCiAJCQlfYnRfcmVsYnVmKHJlbCwgbWV0YWJ1Zik7DQpAQCAt MTUwNiw2ICsxNTg5LDIxIEBAIF9idF9zcGxpdChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXBy ZWwsIEJUU2Nhbkluc2VydCBpdHVwX2tleSwgQnVmZmVyIGJ1ZiwNCiAJSXRlbUlkCQlpdGVtaWQ7 DQogCUluZGV4VHVwbGUJZmlyc3RyaWdodCwNCiAJCQkJbGVmdGhpZ2hrZXk7DQorCUJUSXRlbUJ1 ZglmcmJ1ZjsJCQkvKiBkZWNvZGUgc2NyYXRjaCBmb3IgZmlyc3RyaWdodCAqLw0KKwlCVEl0ZW1C dWYJbGxidWY7CQkJLyogZGVjb2RlIHNjcmF0Y2ggZm9yIGxhc3RsZWZ0ICovDQorCUluZGV4VHVw bGUgKmxlZnRpdGVtcyA9IE5VTEw7CS8qIGxlYWY6IHBsYWluIGl0ZW1zIGZvciB0aGUgbGVmdCBo YWxmICovDQorCUluZGV4VHVwbGUgKnJpZ2h0aXRlbXMgPSBOVUxMOwkvKiBsZWFmOiBwbGFpbiBp dGVtcyBmb3IgdGhlIHJpZ2h0IGhhbGYgKi8NCisJaW50CQkJbmxlZnQgPSAwOw0KKwlpbnQJCQlu cmlnaHQgPSAwOw0KKwlJbmRleFR1cGxlCXJpZ2h0aGlnaGtleSA9IE5VTEw7CS8qIGxlYWYgcmln aHQgaGFsZidzIGhpZ2gga2V5IChOVUxMPXJpZ2h0bW9zdCkgKi8NCisJY29uc3QgY2hhciAqb3Jp Z3ByZWZpeCA9IE5VTEw7DQorCVNpemUJCW9yaWdwcmVmaXhsZW4gPSAwOw0KKwljaGFyCQlsZWZ0 cHJlZml4W0JUUkVFX1BSRUZJWF9NQVhdOwkvKiBjaG9zZW4gcHJlZml4IG9mIGVhY2ggbGVhZiBo YWxmICovDQorCWNoYXIJCXJpZ2h0cHJlZml4W0JUUkVFX1BSRUZJWF9NQVhdOw0KKwlTaXplCQls ZWZ0cHJlZml4bGVuID0gMDsNCisJU2l6ZQkJcmlnaHRwcmVmaXhsZW4gPSAwOw0KKwljaGFyCSAg ICpyaWdodHdhbGJ1ZiA9IE5VTEw7CS8qIHBhY2tlZCByaWdodC1wYWdlIFdBTCBwYXlsb2FkICov DQorCVNpemUJCXJpZ2h0d2FsYnVmbGVuID0gMDsNCiAJT2Zmc2V0TnVtYmVyIGZpcnN0cmlnaHRv ZmY7DQogCU9mZnNldE51bWJlciBhZnRlcmxlZnRvZmYsDQogCQkJCWFmdGVycmlnaHRvZmYsDQpA QCAtMTU3NSw3ICsxNjczLDcgQEAgX2J0X3NwbGl0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVh cHJlbCwgQlRTY2FuSW5zZXJ0IGl0dXBfa2V5LCBCdWZmZXIgYnVmLA0KIAkgKiBhbmQgSEFTX0dB UkJBR0UgZmxhZ3MuDQogCSAqLw0KIAlsb3BhcXVlLT5idHBvX2ZsYWdzID0gb29wYXF1ZS0+YnRw b19mbGFnczsNCi0JbG9wYXF1ZS0+YnRwb19mbGFncyAmPSB+KEJUUF9ST09UIHwgQlRQX1NQTElU X0VORCB8IEJUUF9IQVNfR0FSQkFHRSk7DQorCWxvcGFxdWUtPmJ0cG9fZmxhZ3MgJj0gfihCVFBf Uk9PVCB8IEJUUF9TUExJVF9FTkQgfCBCVFBfSEFTX0dBUkJBR0UgfCBCVFBfUFJFRklYKTsNCiAJ Lyogc2V0IGZsYWcgaW4gbGVmdHBhZ2UgaW5kaWNhdGluZyB0aGF0IHJpZ2h0cGFnZSBoYXMgbm8g ZG93bmxpbmsgeWV0ICovDQogCWxvcGFxdWUtPmJ0cG9fZmxhZ3MgfD0gQlRQX0lOQ09NUExFVEVf U1BMSVQ7DQogCWxvcGFxdWUtPmJ0cG9fcHJldiA9IG9vcGFxdWUtPmJ0cG9fcHJldjsNCkBAIC0x NjUwLDYgKzE3NDgsOCBAQCBfYnRfc3BsaXQoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVs LCBCVFNjYW5JbnNlcnQgaXR1cF9rZXksIEJ1ZmZlciBidWYsDQogCQlpdGVtaWQgPSBQYWdlR2V0 SXRlbUlkKG9yaWdwYWdlLCBmaXJzdHJpZ2h0b2ZmKTsNCiAJCWl0ZW1zeiA9IEl0ZW1JZEdldExl bmd0aChpdGVtaWQpOw0KIAkJZmlyc3RyaWdodCA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShv cmlncGFnZSwgaXRlbWlkKTsNCisJCWlmIChQX0hBU1BSRUZJWChvb3BhcXVlKSkNCisJCQlmaXJz dHJpZ2h0ID0gX2J0X3ByZWZpeF9kZWNvZGUob3JpZ3BhZ2UsIGZpcnN0cmlnaHQsICZmcmJ1Zik7 DQogCQlpZiAoZmlyc3RyaWdodG9mZiA9PSBvcmlncGFnZXBvc3RpbmdvZmYpDQogCQkJZmlyc3Ry aWdodCA9IG5wb3N0aW5nOw0KIAl9DQpAQCAtMTY3Myw2ICsxNzczLDggQEAgX2J0X3NwbGl0KFJl bGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGl0dXBfa2V5LCBCdWZm ZXIgYnVmLA0KIAkJCUFzc2VydChsYXN0bGVmdG9mZiA+PSBQX0ZJUlNUREFUQUtFWShvb3BhcXVl KSk7DQogCQkJaXRlbWlkID0gUGFnZUdldEl0ZW1JZChvcmlncGFnZSwgbGFzdGxlZnRvZmYpOw0K IAkJCWxhc3RsZWZ0ID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKG9yaWdwYWdlLCBpdGVtaWQp Ow0KKwkJCWlmIChQX0hBU1BSRUZJWChvb3BhcXVlKSkNCisJCQkJbGFzdGxlZnQgPSBfYnRfcHJl Zml4X2RlY29kZShvcmlncGFnZSwgbGFzdGxlZnQsICZsbGJ1Zik7DQogCQkJaWYgKGxhc3RsZWZ0 b2ZmID09IG9yaWdwYWdlcG9zdGluZ29mZikNCiAJCQkJbGFzdGxlZnQgPSBucG9zdGluZzsNCiAJ CX0NCkBAIC0xNzEyLDcgKzE4MTQsMTEgQEAgX2J0X3NwbGl0KFJlbGF0aW9uIHJlbCwgUmVsYXRp b24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGl0dXBfa2V5LCBCdWZmZXIgYnVmLA0KIAl9DQogDQog CS8qDQotCSAqIEFkZCBuZXcgaGlnaCBrZXkgdG8gbGVmdHBhZ2UNCisJICogQWRkIG5ldyBoaWdo IGtleSB0byBsZWZ0cGFnZS4gIEZvciBhIGxlYWYgc3BsaXQgdGhlIGxlZnQgaGFsZiBpcyBidWls dA0KKwkgKiBhcyBhIHdob2xlIGJlbG93IChzbyBpdCBjYW4gYmUgcHJlZml4LWNvbXByZXNzZWQg ZnJvbSB0aGUgc3RhcnQsIHdoaWNoDQorCSAqIGEgcGxhaW4gaW5jcmVtZW50YWwgYnVpbGQgY2Fu bm90IHJlcHJlc2VudCB3aGVuIHRoZSBwYWdlIGhvbGRzIG1vcmUNCisJICogbG9naWNhbCBkYXRh IHRoYW4gZml0cyBwbGFpbik7IHRoZSBoaWdoIGtleSBpcyBwYXNzZWQgdG8gdGhlIGJ1aWxkZXIN CisJICogdGhlbi4gIEludGVybmFsIGhhbHZlcyBhcmUgYnVpbHQgaW5jcmVtZW50YWxseSBoZXJl IGFzIGJlZm9yZS4NCiAJICovDQogCWFmdGVybGVmdG9mZiA9IFBfSElLRVk7DQogDQpAQCAtMTcy MCwxMSArMTgyNiwyMyBAQCBfYnRfc3BsaXQoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVs LCBCVFNjYW5JbnNlcnQgaXR1cF9rZXksIEJ1ZmZlciBidWYsDQogCUFzc2VydChCVHJlZVR1cGxl R2V0TkF0dHMobGVmdGhpZ2hrZXksIHJlbCkgPD0NCiAJCSAgIEluZGV4UmVsYXRpb25HZXROdW1i ZXJPZktleUF0dHJpYnV0ZXMocmVsKSk7DQogCUFzc2VydChpdGVtc3ogPT0gTUFYQUxJR04oSW5k ZXhUdXBsZVNpemUobGVmdGhpZ2hrZXkpKSk7DQotCWlmIChQYWdlQWRkSXRlbShsZWZ0cGFnZSwg bGVmdGhpZ2hrZXksIGl0ZW1zeiwgYWZ0ZXJsZWZ0b2ZmLCBmYWxzZSwgZmFsc2UpID09IEludmFs aWRPZmZzZXROdW1iZXIpDQotCQllbG9nKEVSUk9SLCAiZmFpbGVkIHRvIGFkZCBoaWdoIGtleSB0 byB0aGUgbGVmdCBzaWJsaW5nIg0KLQkJCSAiIHdoaWxlIHNwbGl0dGluZyBibG9jayAldSBvZiBp bmRleCBcIiVzXCIiLA0KLQkJCSBvcmlncGFnZW51bWJlciwgUmVsYXRpb25HZXRSZWxhdGlvbk5h bWUocmVsKSk7DQotCWFmdGVybGVmdG9mZiA9IE9mZnNldE51bWJlck5leHQoYWZ0ZXJsZWZ0b2Zm KTsNCisJaWYgKGlzbGVhZikNCisJew0KKwkJLyogVGhlIGJ1aWxkZXIgbmVlZHMgYSBzdGFibGUg Y29weTsgbGVmdGhpZ2hrZXkgcG9pbnRzIGludG8gd29ya3NwYWNlLiAqLw0KKwkJbGVmdGhpZ2hr ZXkgPSBDb3B5SW5kZXhUdXBsZShsZWZ0aGlnaGtleSk7DQorCQlsZWZ0aXRlbXMgPSBwYWxsb2Nf YXJyYXkoSW5kZXhUdXBsZSwgbWF4b2ZmICsgMik7DQorCQlyaWdodGl0ZW1zID0gcGFsbG9jX2Fy cmF5KEluZGV4VHVwbGUsIG1heG9mZiArIDIpOw0KKwkJaWYgKFBfSEFTUFJFRklYKG9vcGFxdWUp KQ0KKwkJCW9yaWdwcmVmaXggPSBfYnRfcGFnZV9nZXRfcHJlZml4KG9yaWdwYWdlLCAmb3JpZ3By ZWZpeGxlbik7DQorCX0NCisJZWxzZQ0KKwl7DQorCQlpZiAoUGFnZUFkZEl0ZW0obGVmdHBhZ2Us IGxlZnRoaWdoa2V5LCBpdGVtc3osIGFmdGVybGVmdG9mZiwgZmFsc2UsIGZhbHNlKSA9PSBJbnZh bGlkT2Zmc2V0TnVtYmVyKQ0KKwkJCWVsb2coRVJST1IsICJmYWlsZWQgdG8gYWRkIGhpZ2gga2V5 IHRvIHRoZSBsZWZ0IHNpYmxpbmciDQorCQkJCSAiIHdoaWxlIHNwbGl0dGluZyBibG9jayAldSBv ZiBpbmRleCBcIiVzXCIiLA0KKwkJCQkgb3JpZ3BhZ2VudW1iZXIsIFJlbGF0aW9uR2V0UmVsYXRp b25OYW1lKHJlbCkpOw0KKwkJYWZ0ZXJsZWZ0b2ZmID0gT2Zmc2V0TnVtYmVyTmV4dChhZnRlcmxl ZnRvZmYpOw0KKwl9DQogDQogCS8qDQogCSAqIEFjcXVpcmUgYSBuZXcgcmlnaHQgcGFnZSB0byBz cGxpdCBpbnRvLCBub3cgdGhhdCBsZWZ0IHBhZ2UgaGFzIGEgbmV3DQpAQCAtMTc2NSw3ICsxODgz LDcgQEAgX2J0X3NwbGl0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5z ZXJ0IGl0dXBfa2V5LCBCdWZmZXIgYnVmLA0KIAkgKiBhbmQgSEFTX0dBUkJBR0UgZmxhZ3MuDQog CSAqLw0KIAlyb3BhcXVlLT5idHBvX2ZsYWdzID0gb29wYXF1ZS0+YnRwb19mbGFnczsNCi0Jcm9w YXF1ZS0+YnRwb19mbGFncyAmPSB+KEJUUF9ST09UIHwgQlRQX1NQTElUX0VORCB8IEJUUF9IQVNf R0FSQkFHRSk7DQorCXJvcGFxdWUtPmJ0cG9fZmxhZ3MgJj0gfihCVFBfUk9PVCB8IEJUUF9TUExJ VF9FTkQgfCBCVFBfSEFTX0dBUkJBR0UgfCBCVFBfUFJFRklYKTsNCiAJcm9wYXF1ZS0+YnRwb19w cmV2ID0gb3JpZ3BhZ2VudW1iZXI7DQogCXJvcGFxdWUtPmJ0cG9fbmV4dCA9IG9vcGFxdWUtPmJ0 cG9fbmV4dDsNCiAJcm9wYXF1ZS0+YnRwb19sZXZlbCA9IG9vcGFxdWUtPmJ0cG9fbGV2ZWw7DQpA QCAtMTc4MiwyMSArMTkwMCwyNSBAQCBfYnRfc3BsaXQoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBo ZWFwcmVsLCBCVFNjYW5JbnNlcnQgaXR1cF9rZXksIEJ1ZmZlciBidWYsDQogDQogCWlmICghaXNy aWdodG1vc3QpDQogCXsNCi0JCUluZGV4VHVwbGUJcmlnaHRoaWdoa2V5Ow0KKwkJSXRlbUlkCQlo aWl0ZW1pZCA9IFBhZ2VHZXRJdGVtSWQob3JpZ3BhZ2UsIFBfSElLRVkpOw0KKwkJU2l6ZQkJaGlp dGVtc3ogPSBJdGVtSWRHZXRMZW5ndGgoaGlpdGVtaWQpOw0KKwkJSW5kZXhUdXBsZQloaWtleSA9 IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShvcmlncGFnZSwgaGlpdGVtaWQpOw0KIA0KLQkJaXRl bWlkID0gUGFnZUdldEl0ZW1JZChvcmlncGFnZSwgUF9ISUtFWSk7DQotCQlpdGVtc3ogPSBJdGVt SWRHZXRMZW5ndGgoaXRlbWlkKTsNCi0JCXJpZ2h0aGlnaGtleSA9IChJbmRleFR1cGxlKSBQYWdl R2V0SXRlbShvcmlncGFnZSwgaXRlbWlkKTsNCi0JCUFzc2VydChCVHJlZVR1cGxlR2V0TkF0dHMo cmlnaHRoaWdoa2V5LCByZWwpID4gMCk7DQotCQlBc3NlcnQoQlRyZWVUdXBsZUdldE5BdHRzKHJp Z2h0aGlnaGtleSwgcmVsKSA8PQ0KKwkJQXNzZXJ0KEJUcmVlVHVwbGVHZXROQXR0cyhoaWtleSwg cmVsKSA+IDApOw0KKwkJQXNzZXJ0KEJUcmVlVHVwbGVHZXROQXR0cyhoaWtleSwgcmVsKSA8PQ0K IAkJCSAgIEluZGV4UmVsYXRpb25HZXROdW1iZXJPZktleUF0dHJpYnV0ZXMocmVsKSk7DQotCQlp ZiAoUGFnZUFkZEl0ZW0ocmlnaHRwYWdlLCByaWdodGhpZ2hrZXksIGl0ZW1zeiwgYWZ0ZXJyaWdo dG9mZiwgZmFsc2UsIGZhbHNlKSA9PSBJbnZhbGlkT2Zmc2V0TnVtYmVyKQ0KKwkJaWYgKGlzbGVh ZikNCisJCQlyaWdodGhpZ2hrZXkgPSBDb3B5SW5kZXhUdXBsZShoaWtleSk7CS8qIHN0YWJsZTog b3JpZ3BhZ2UgaXMNCisJCQkJCQkJCQkJCQkJCSAqIG92ZXJ3cml0dGVuIGJ5IHRoZSBsZWZ0DQor CQkJCQkJCQkJCQkJCQkgKiBoYWxmIGJlZm9yZSBXQUwgbG9nZ2luZyAqLw0KKwkJZWxzZQ0KIAkJ ew0KLQkJCWVsb2coRVJST1IsICJmYWlsZWQgdG8gYWRkIGhpZ2gga2V5IHRvIHRoZSByaWdodCBz aWJsaW5nIg0KLQkJCQkgIiB3aGlsZSBzcGxpdHRpbmcgYmxvY2sgJXUgb2YgaW5kZXggXCIlc1wi IiwNCi0JCQkJIG9yaWdwYWdlbnVtYmVyLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsN CisJCQlpZiAoUGFnZUFkZEl0ZW0ocmlnaHRwYWdlLCBoaWtleSwgaGlpdGVtc3osIGFmdGVycmln aHRvZmYsIGZhbHNlLCBmYWxzZSkgPT0gSW52YWxpZE9mZnNldE51bWJlcikNCisJCQkJZWxvZyhF UlJPUiwgImZhaWxlZCB0byBhZGQgaGlnaCBrZXkgdG8gdGhlIHJpZ2h0IHNpYmxpbmciDQorCQkJ CQkgIiB3aGlsZSBzcGxpdHRpbmcgYmxvY2sgJXUgb2YgaW5kZXggXCIlc1wiIiwNCisJCQkJCSBv cmlncGFnZW51bWJlciwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7DQorCQkJYWZ0ZXJy aWdodG9mZiA9IE9mZnNldE51bWJlck5leHQoYWZ0ZXJyaWdodG9mZik7DQogCQl9DQotCQlhZnRl cnJpZ2h0b2ZmID0gT2Zmc2V0TnVtYmVyTmV4dChhZnRlcnJpZ2h0b2ZmKTsNCiAJfQ0KIA0KIAkv Kg0KQEAgLTE4MTcsMTEgKzE5MzksMjMgQEAgX2J0X3NwbGl0KFJlbGF0aW9uIHJlbCwgUmVsYXRp b24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGl0dXBfa2V5LCBCdWZmZXIgYnVmLA0KIAlmb3IgKGkg PSBQX0ZJUlNUREFUQUtFWShvb3BhcXVlKTsgaSA8PSBtYXhvZmY7IGkgPSBPZmZzZXROdW1iZXJO ZXh0KGkpKQ0KIAl7DQogCQlJbmRleFR1cGxlCWRhdGFpdGVtOw0KKwkJQlRJdGVtQnVmCWRpYnVm Ow0KIA0KIAkJaXRlbWlkID0gUGFnZUdldEl0ZW1JZChvcmlncGFnZSwgaSk7DQogCQlpdGVtc3og PSBJdGVtSWRHZXRMZW5ndGgoaXRlbWlkKTsNCiAJCWRhdGFpdGVtID0gKEluZGV4VHVwbGUpIFBh Z2VHZXRJdGVtKG9yaWdwYWdlLCBpdGVtaWQpOw0KIA0KKwkJLyoNCisJCSAqIE9uIGEgcHJlZml4 LWNvbXByZXNzZWQgb3JpZ3BhZ2UgZGVjb2RlIGVhY2ggZGF0YSBpdGVtIHRvIGl0cyBwbGFpbg0K KwkJICogZm9ybSBiZWZvcmUgcGxhY2luZyBpdDsgdGhlIGhhbHZlcyBhcmUgYnVpbHQgcGxhaW4g aGVyZSBhbmQgZWFjaCBpcw0KKwkJICogcmUtY29tcHJlc3NlZCBhcyBhIHdob2xlIGJlbG93IChT dHJhdGVneSAxKS4gIGl0ZW1zeiBmb2xsb3dzLg0KKwkJICovDQorCQlpZiAoaXNsZWFmICYmIFBf SEFTUFJFRklYKG9vcGFxdWUpKQ0KKwkJew0KKwkJCWRhdGFpdGVtID0gX2J0X3ByZWZpeF9kZWNv ZGUob3JpZ3BhZ2UsIGRhdGFpdGVtLCAmZGlidWYpOw0KKwkJCWl0ZW1zeiA9IE1BWEFMSUdOKElu ZGV4VHVwbGVTaXplKGRhdGFpdGVtKSk7DQorCQl9DQorDQogCQkvKiByZXBsYWNlIG9yaWdpbmFs IGl0ZW0gd2l0aCBucG9zdGluZyBkdWUgdG8gcG9zdGluZyBzcGxpdD8gKi8NCiAJCWlmIChpID09 IG9yaWdwYWdlcG9zdGluZ29mZikNCiAJCXsNCkBAIC0xODM2LDI1ICsxOTcwLDI1IEBAIF9idF9z cGxpdChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBpdHVwX2tl eSwgQnVmZmVyIGJ1ZiwNCiAJCQlpZiAobmV3aXRlbW9ubGVmdCkNCiAJCQl7DQogCQkJCUFzc2Vy dChuZXdpdGVtb2ZmIDw9IGZpcnN0cmlnaHRvZmYpOw0KLQkJCQlpZiAoIV9idF9wZ2FkZHR1cChs ZWZ0cGFnZSwgbmV3aXRlbXN6LCBuZXdpdGVtLCBhZnRlcmxlZnRvZmYsDQotCQkJCQkJCQkgIGZh bHNlKSkNCi0JCQkJew0KKwkJCQlpZiAoaXNsZWFmKQ0KKwkJCQkJbGVmdGl0ZW1zW25sZWZ0Kytd ID0gbmV3aXRlbTsNCisJCQkJZWxzZSBpZiAoIV9idF9wZ2FkZHR1cChsZWZ0cGFnZSwgbmV3aXRl bXN6LCBuZXdpdGVtLCBhZnRlcmxlZnRvZmYsDQorCQkJCQkJCQkJICAgZmFsc2UpKQ0KIAkJCQkJ ZWxvZyhFUlJPUiwgImZhaWxlZCB0byBhZGQgbmV3IGl0ZW0gdG8gdGhlIGxlZnQgc2libGluZyIN CiAJCQkJCQkgIiB3aGlsZSBzcGxpdHRpbmcgYmxvY2sgJXUgb2YgaW5kZXggXCIlc1wiIiwNCiAJ CQkJCQkgb3JpZ3BhZ2VudW1iZXIsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOw0KLQkJ CQl9DQogCQkJCWFmdGVybGVmdG9mZiA9IE9mZnNldE51bWJlck5leHQoYWZ0ZXJsZWZ0b2ZmKTsN CiAJCQl9DQogCQkJZWxzZQ0KIAkJCXsNCiAJCQkJQXNzZXJ0KG5ld2l0ZW1vZmYgPj0gZmlyc3Ry aWdodG9mZik7DQotCQkJCWlmICghX2J0X3BnYWRkdHVwKHJpZ2h0cGFnZSwgbmV3aXRlbXN6LCBu ZXdpdGVtLCBhZnRlcnJpZ2h0b2ZmLA0KLQkJCQkJCQkJICBhZnRlcnJpZ2h0b2ZmID09IG1pbnVz aW5mb2ZmKSkNCi0JCQkJew0KKwkJCQlpZiAoaXNsZWFmKQ0KKwkJCQkJcmlnaHRpdGVtc1tucmln aHQrK10gPSBuZXdpdGVtOw0KKwkJCQllbHNlIGlmICghX2J0X3BnYWRkdHVwKHJpZ2h0cGFnZSwg bmV3aXRlbXN6LCBuZXdpdGVtLCBhZnRlcnJpZ2h0b2ZmLA0KKwkJCQkJCQkJCSAgIGFmdGVycmln aHRvZmYgPT0gbWludXNpbmZvZmYpKQ0KIAkJCQkJZWxvZyhFUlJPUiwgImZhaWxlZCB0byBhZGQg bmV3IGl0ZW0gdG8gdGhlIHJpZ2h0IHNpYmxpbmciDQogCQkJCQkJICIgd2hpbGUgc3BsaXR0aW5n IGJsb2NrICV1IG9mIGluZGV4IFwiJXNcIiIsDQogCQkJCQkJIG9yaWdwYWdlbnVtYmVyLCBSZWxh dGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsNCi0JCQkJfQ0KIAkJCQlhZnRlcnJpZ2h0b2ZmID0g T2Zmc2V0TnVtYmVyTmV4dChhZnRlcnJpZ2h0b2ZmKTsNCiAJCQl9DQogCQl9DQpAQCAtMTg2Miwy MyArMTk5NiwyMyBAQCBfYnRfc3BsaXQoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBC VFNjYW5JbnNlcnQgaXR1cF9rZXksIEJ1ZmZlciBidWYsDQogCQkvKiBkZWNpZGUgd2hpY2ggcGFn ZSB0byBwdXQgaXQgb24gKi8NCiAJCWlmIChpIDwgZmlyc3RyaWdodG9mZikNCiAJCXsNCi0JCQlp ZiAoIV9idF9wZ2FkZHR1cChsZWZ0cGFnZSwgaXRlbXN6LCBkYXRhaXRlbSwgYWZ0ZXJsZWZ0b2Zm LCBmYWxzZSkpDQotCQkJew0KKwkJCWlmIChpc2xlYWYpDQorCQkJCWxlZnRpdGVtc1tubGVmdCsr XSA9IENvcHlJbmRleFR1cGxlKGRhdGFpdGVtKTsNCisJCQllbHNlIGlmICghX2J0X3BnYWRkdHVw KGxlZnRwYWdlLCBpdGVtc3osIGRhdGFpdGVtLCBhZnRlcmxlZnRvZmYsIGZhbHNlKSkNCiAJCQkJ ZWxvZyhFUlJPUiwgImZhaWxlZCB0byBhZGQgb2xkIGl0ZW0gdG8gdGhlIGxlZnQgc2libGluZyIN CiAJCQkJCSAiIHdoaWxlIHNwbGl0dGluZyBibG9jayAldSBvZiBpbmRleCBcIiVzXCIiLA0KIAkJ CQkJIG9yaWdwYWdlbnVtYmVyLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsNCi0JCQl9 DQogCQkJYWZ0ZXJsZWZ0b2ZmID0gT2Zmc2V0TnVtYmVyTmV4dChhZnRlcmxlZnRvZmYpOw0KIAkJ fQ0KIAkJZWxzZQ0KIAkJew0KLQkJCWlmICghX2J0X3BnYWRkdHVwKHJpZ2h0cGFnZSwgaXRlbXN6 LCBkYXRhaXRlbSwgYWZ0ZXJyaWdodG9mZiwNCi0JCQkJCQkJICBhZnRlcnJpZ2h0b2ZmID09IG1p bnVzaW5mb2ZmKSkNCi0JCQl7DQorCQkJaWYgKGlzbGVhZikNCisJCQkJcmlnaHRpdGVtc1tucmln aHQrK10gPSBDb3B5SW5kZXhUdXBsZShkYXRhaXRlbSk7DQorCQkJZWxzZSBpZiAoIV9idF9wZ2Fk ZHR1cChyaWdodHBhZ2UsIGl0ZW1zeiwgZGF0YWl0ZW0sIGFmdGVycmlnaHRvZmYsDQorCQkJCQkJ CQkgICBhZnRlcnJpZ2h0b2ZmID09IG1pbnVzaW5mb2ZmKSkNCiAJCQkJZWxvZyhFUlJPUiwgImZh aWxlZCB0byBhZGQgb2xkIGl0ZW0gdG8gdGhlIHJpZ2h0IHNpYmxpbmciDQogCQkJCQkgIiB3aGls ZSBzcGxpdHRpbmcgYmxvY2sgJXUgb2YgaW5kZXggXCIlc1wiIiwNCiAJCQkJCSBvcmlncGFnZW51 bWJlciwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7DQotCQkJfQ0KIAkJCWFmdGVycmln aHRvZmYgPSBPZmZzZXROdW1iZXJOZXh0KGFmdGVycmlnaHRvZmYpOw0KIAkJfQ0KIAl9DQpAQCAt MTg5MiwxNiArMjAyNiw4NSBAQCBfYnRfc3BsaXQoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFw cmVsLCBCVFNjYW5JbnNlcnQgaXR1cF9rZXksIEJ1ZmZlciBidWYsDQogCQkgKiBub3QgYmUgc3Bs aXR0aW5nIHRoZSBwYWdlKS4NCiAJCSAqLw0KIAkJQXNzZXJ0KCFuZXdpdGVtb25sZWZ0ICYmIG5l d2l0ZW1vZmYgPT0gbWF4b2ZmICsgMSk7DQotCQlpZiAoIV9idF9wZ2FkZHR1cChyaWdodHBhZ2Us IG5ld2l0ZW1zeiwgbmV3aXRlbSwgYWZ0ZXJyaWdodG9mZiwNCi0JCQkJCQkgIGFmdGVycmlnaHRv ZmYgPT0gbWludXNpbmZvZmYpKQ0KLQkJew0KKwkJaWYgKGlzbGVhZikNCisJCQlyaWdodGl0ZW1z W25yaWdodCsrXSA9IG5ld2l0ZW07DQorCQllbHNlIGlmICghX2J0X3BnYWRkdHVwKHJpZ2h0cGFn ZSwgbmV3aXRlbXN6LCBuZXdpdGVtLCBhZnRlcnJpZ2h0b2ZmLA0KKwkJCQkJCQkgICBhZnRlcnJp Z2h0b2ZmID09IG1pbnVzaW5mb2ZmKSkNCiAJCQllbG9nKEVSUk9SLCAiZmFpbGVkIHRvIGFkZCBu ZXcgaXRlbSB0byB0aGUgcmlnaHQgc2libGluZyINCiAJCQkJICIgd2hpbGUgc3BsaXR0aW5nIGJs b2NrICV1IG9mIGluZGV4IFwiJXNcIiIsDQogCQkJCSBvcmlncGFnZW51bWJlciwgUmVsYXRpb25H ZXRSZWxhdGlvbk5hbWUocmVsKSk7DQotCQl9DQogCQlhZnRlcnJpZ2h0b2ZmID0gT2Zmc2V0TnVt YmVyTmV4dChhZnRlcnJpZ2h0b2ZmKTsNCiAJfQ0KIA0KKwkvKg0KKwkgKiBMZWFmIGhhbHZlcyBh cmUgYnVpbHQgYXMgd2hvbGUgcGFnZXMgbm93LCBzbyB0aGV5IGNhbiBiZSBwcmVmaXgtDQorCSAq IGNvbXByZXNzZWQgZnJvbSB0aGUgc3RhcnQgKFN0cmF0ZWd5IDE6IGEgcGFnZSBpcyBmYXVsdGVk IGludG8gdGhlDQorCSAqIEJUUF9QUkVGSVggZm9ybWF0IG9ubHkgd2hlbiBpdCBpcyB3cml0dGVu IHdob2xlKS4gIEJvdGggaGFsdmVzIG9mIGENCisJICogcHJlZml4IHNwbGl0IGFyZSByZXN0b3Jl ZCBmcm9tIGZ1bGwtcGFnZSBpbWFnZXMgaW4gcmVkbyAodGhlaXIgY29kZWQNCisJICogcGh5c2lj YWwgbGF5b3V0IHdvdWxkIG5vdCBiZSByZXByb2R1Y2VkIGJ5IGl0ZW0gcmVwbGF5KTogdGhlIGxl ZnQgaGFsZg0KKwkgKiAoYmxvY2sgMCkgaXMgRlBJLWxvZ2dlZCB3aGVuZXZlciB0aGUgb3JpZ2lu YWwgcGFnZSB3YXMgcHJlZml4LWNvbXByZXNzZWQNCisJICogYW5kIHJlZG8gZGV0ZWN0cyB0aGUg aW1hZ2UgdmlhIEJMS19SRVNUT1JFRCwgc28gaXQgbmVlZHMgbm8gcmVjb3JkIGZsYWc7DQorCSAq IHRoZSByaWdodCBoYWxmIChibG9jayAxKSByZWNvcmRzIFhMSF9TUExJVF9SUFJFRklYIHNvIHJl ZG8gcmVzdG9yZXMgaXQNCisJICogZnJvbSBpdHMgZm9yY2VkIGltYWdlIHJhdGhlciB0aGFuIHJl YnVpbGRpbmcgaXQgZnJvbSBsb2dnZWQgdHVwbGVzLg0KKwkgKiBkYXRhaXRlbSBjb3BpZXMgYW5k IHRoZSBsZWZ0aGlnaGtleSBjb3B5IGFyZSBmcmVlZCB2aWEgdGhlIHNob3J0LWxpdmVkDQorCSAq IGluc2VydCBjb250ZXh0Lg0KKwkgKi8NCisJaWYgKGlzbGVhZikNCisJew0KKwkJX2J0X3NwbGl0 X2xlYWZfaGFsZihyZWwsIGxlZnRwYWdlLCBsZWZ0aGlnaGtleSwgbGVmdGl0ZW1zLCBubGVmdCwN CisJCQkJCQkJb3JpZ3ByZWZpeCwgb3JpZ3ByZWZpeGxlbiwNCisJCQkJCQkJbGVmdHByZWZpeCwg JmxlZnRwcmVmaXhsZW4pOw0KKwkJX2J0X3NwbGl0X2xlYWZfaGFsZihyZWwsIHJpZ2h0cGFnZSwg cmlnaHRoaWdoa2V5LCByaWdodGl0ZW1zLCBucmlnaHQsDQorCQkJCQkJCW9yaWdwcmVmaXgsIG9y aWdwcmVmaXhsZW4sDQorCQkJCQkJCXJpZ2h0cHJlZml4LCAmcmlnaHRwcmVmaXhsZW4pOw0KKw0K KwkJLyoNCisJCSAqIEJ1aWxkIHRoZSByaWdodCBwYWdlJ3MgV0FMIHBheWxvYWQgbm93LCBiZWZv cmUgdGhlIGNyaXRpY2FsIHNlY3Rpb24NCisJCSAqIChwYWxsb2MgaXMgZGlzYWxsb3dlZCBpbnNp ZGUgaXQpOiB0aGUgcmlnaHQgcHJlZml4IGJ5dGVzLCB0aGVuIHRoZQ0KKwkJICogcmlnaHQgaGln aCBrZXkgKHVubGVzcyByaWdodG1vc3QpLCB0aGVuIHRoZSByaWdodCBoYWxmJ3MgcGxhaW4gaXRl bXMsDQorCQkgKiBlYWNoIE1BWEFMSUdOJ2QsIGluIG9uZSBjb250aWd1b3VzIGJ1ZmZlciBsb2dn ZWQgd2l0aCBhIHNpbmdsZSByZGF0YQ0KKwkJICogc2xvdC4gIEEgdmVyeSBjb21wcmVzc2libGUg cmlnaHQgaGFsZiB3aG9zZSBwbGFpbiBpdGVtcyB3b3VsZCBleGNlZWQNCisJCSAqIGEgcGFnZSBp cyBpbnN0ZWFkIGNhcnJpZWQgYXMgYSBmdWxsLXBhZ2UgaW1hZ2UgKHNldCBiZWxvdyksIHNvIHRo aXMNCisJCSAqIGJ1ZmZlciBpcyBib3VuZGVkLg0KKwkJICovDQorCQlpZiAobGVmdHByZWZpeGxl biA+IDAgfHwgcmlnaHRwcmVmaXhsZW4gPiAwIHx8IG9yaWdwcmVmaXhsZW4gPiAwKQ0KKwkJew0K KwkJCVNpemUJCXJvZmYgPSByaWdodHByZWZpeGxlbjsNCisNCisJCQlpZiAocmlnaHRoaWdoa2V5 ICE9IE5VTEwpDQorCQkJCXJvZmYgKz0gTUFYQUxJR04oSW5kZXhUdXBsZVNpemUocmlnaHRoaWdo a2V5KSk7DQorCQkJZm9yIChpbnQgcmkgPSAwOyByaSA8IG5yaWdodDsgcmkrKykNCisJCQkJcm9m ZiArPSBNQVhBTElHTihJbmRleFR1cGxlU2l6ZShyaWdodGl0ZW1zW3JpXSkpOw0KKwkJCXJpZ2h0 d2FsYnVmID0gcGFsbG9jKE1heChyb2ZmLCAxKSk7DQorCQkJcmlnaHR3YWxidWZsZW4gPSByb2Zm Ow0KKw0KKwkJCXJvZmYgPSAwOw0KKwkJCWlmIChyaWdodHByZWZpeGxlbiA+IDApDQorCQkJew0K KwkJCQltZW1jcHkocmlnaHR3YWxidWYsIHJpZ2h0cHJlZml4LCByaWdodHByZWZpeGxlbik7DQor CQkJCXJvZmYgKz0gcmlnaHRwcmVmaXhsZW47DQorCQkJfQ0KKwkJCWlmIChyaWdodGhpZ2hrZXkg IT0gTlVMTCkNCisJCQl7DQorCQkJCVNpemUJCWhzeiA9IEluZGV4VHVwbGVTaXplKHJpZ2h0aGln aGtleSk7DQorDQorCQkJCW1lbWNweShyaWdodHdhbGJ1ZiArIHJvZmYsIHJpZ2h0aGlnaGtleSwg aHN6KTsNCisJCQkJaWYgKE1BWEFMSUdOKGhzeikgIT0gaHN6KQ0KKwkJCQkJbWVtc2V0KHJpZ2h0 d2FsYnVmICsgcm9mZiArIGhzeiwgMCwgTUFYQUxJR04oaHN6KSAtIGhzeik7DQorCQkJCXJvZmYg Kz0gTUFYQUxJR04oaHN6KTsNCisJCQl9DQorCQkJZm9yIChpbnQgcmkgPSAwOyByaSA8IG5yaWdo dDsgcmkrKykNCisJCQl7DQorCQkJCVNpemUJCXJzeiA9IEluZGV4VHVwbGVTaXplKHJpZ2h0aXRl bXNbcmldKTsNCisNCisJCQkJbWVtY3B5KHJpZ2h0d2FsYnVmICsgcm9mZiwgcmlnaHRpdGVtc1ty aV0sIHJzeik7DQorCQkJCWlmIChNQVhBTElHTihyc3opICE9IHJzeikNCisJCQkJCW1lbXNldChy aWdodHdhbGJ1ZiArIHJvZmYgKyByc3osIDAsIE1BWEFMSUdOKHJzeikgLSByc3opOw0KKwkJCQly b2ZmICs9IE1BWEFMSUdOKHJzeik7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQogCS8qDQogCSAqIFdl IGhhdmUgdG8gZ3JhYiB0aGUgb3JpZ2luYWwgcmlnaHQgc2libGluZyAoaWYgYW55KSBhbmQgdXBk YXRlIGl0cyBwcmV2DQogCSAqIGxpbmsuICBXZSBhcmUgZ3VhcmFudGVlZCB0aGF0IHRoaXMgaXMg ZGVhZGxvY2stZnJlZSwgc2luY2Ugd2UgY291cGxlDQpAQCAtMjAwNSwxNyArMjIwOCw3MSBAQCBf YnRfc3BsaXQoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCVFNjYW5JbnNlcnQgaXR1 cF9rZXksIEJ1ZmZlciBidWYsDQogCQlpZiAocG9zdGluZ29mZiAhPSAwICYmIG9yaWdwYWdlcG9z dGluZ29mZiA8IGZpcnN0cmlnaHRvZmYpDQogCQkJeGxyZWMucG9zdGluZ29mZiA9IHBvc3Rpbmdv ZmY7DQogDQorCQkvKg0KKwkJICogQSBsZWFmIHNwbGl0IHRoYXQgaW52b2x2ZXMgcHJlZml4IGNv bXByZXNzaW9uIChlaXRoZXIgaGFsZiBlbmRzIHVwDQorCQkgKiBjb21wcmVzc2VkLCBvciB0aGUg cHJlLXNwbGl0IHBhZ2Ugd2FzIGNvbXByZXNzZWQgc28gaXRzIGl0ZW1zIGFyZQ0KKwkJICogY29k ZWQpIGlzIHJlcGxheWVkIGJ5IHJlYnVpbGRpbmcgYm90aCBoYWx2ZXMgZnJvbSB0aGUgcHJlLXNw bGl0IHBhZ2UsDQorCQkgKiBleGFjdGx5IGFzIHRoZSBwcmltYXJ5IGRpZCwgcmF0aGVyIHRoYW4g YnkgcmVwbGF5aW5nIGxvZ2dlZCB0dXBsZXMgLS0NCisJCSAqIHRoZSBjb2RlZCBwaHlzaWNhbCBs YXlvdXQgd291bGQgbm90IG1hdGNoIF9idF9yZXN0b3JlX3BhZ2UuICBObw0KKwkJICogZnVsbC1w YWdlIGltYWdlIGlzIG5lZWRlZDsgcmVkbyByZWNvbnN0cnVjdHMgdGhlIHBsYWluIGl0ZW1zIGZy b20gdGhlDQorCQkgKiBvcmlnaW5hbCBwYWdlIChibG9jayAwKSBhbmQgbGF5cyBlYWNoIGhhbGYg b3V0IGNvZGVkIGFnYWluc3QgdGhlDQorCQkgKiBjaG9zZW4gcHJlZml4LCB3aG9zZSBsZW5ndGgg YW5kIGJ5dGVzIGFyZSBjYXJyaWVkIGluIHRoZSByZWNvcmQuDQorCQkgKi8NCisJCXhscmVjLmZs YWdzID0gMDsNCisJCXhscmVjLmxlZnRwcmVmaXhsZW4gPSAwOw0KKwkJeGxyZWMucmlnaHRwcmVm aXhsZW4gPSAwOw0KKwkJaWYgKGlzbGVhZiAmJiAobGVmdHByZWZpeGxlbiA+IDAgfHwgcmlnaHRw cmVmaXhsZW4gPiAwIHx8IG9yaWdwcmVmaXhsZW4gPiAwKSkNCisJCXsNCisJCQl4bHJlYy5mbGFn cyB8PSBYTEhfU1BMSVRfTEVBRlBSRUZJWDsNCisJCQl4bHJlYy5sZWZ0cHJlZml4bGVuID0gKHVp bnQ4KSBsZWZ0cHJlZml4bGVuOw0KKwkJCXhscmVjLnJpZ2h0cHJlZml4bGVuID0gKHVpbnQ4KSBy aWdodHByZWZpeGxlbjsNCisNCisJCQkvKg0KKwkJCSAqIFRoZSByaWdodCBoYWxmIGlzIG5vcm1h bGx5IGNhcnJpZWQgYXMgaXRzIHBhY2tlZCBwbGFpbiBwYXlsb2FkDQorCQkJICogKHJlZG8gbGF5 cyBpdCBvdXQgY29kZWQpLCBmYXIgY2hlYXBlciB0aGFuIGEgZnVsbC1wYWdlIGltYWdlLg0KKwkJ CSAqIEJ1dCBhIHZlcnkgY29tcHJlc3NpYmxlIHBhZ2UgY2FuIGhvbGQgbW9yZSBwbGFpbiBkYXRh IHRoYW4gZml0cw0KKwkJCSAqIGluIG9uZSBwYWdlOyBpZiB0aGUgcGF5bG9hZCB3b3VsZCBiZSB0 aGF0IGxhcmdlLCBmYWxsIGJhY2sgdG8gYQ0KKwkJCSAqIGZvcmNlZCBmdWxsLXBhZ2UgaW1hZ2Ug b2YgdGhlIGNvZGVkIHJpZ2h0IHBhZ2UgKGJvdW5kZWQgYXQgQkxDS1NaKS4NCisJCQkgKi8NCisJ CQlpZiAocmlnaHR3YWxidWZsZW4gPiBCTENLU1opDQorCQkJCXhscmVjLmZsYWdzIHw9IFhMSF9T UExJVF9SRlBJOw0KKwkJfQ0KKw0KIAkJWExvZ0JlZ2luSW5zZXJ0KCk7DQogCQlYTG9nUmVnaXN0 ZXJEYXRhKCZ4bHJlYywgU2l6ZU9mQnRyZWVTcGxpdCk7DQogDQogCQlYTG9nUmVnaXN0ZXJCdWZm ZXIoMCwgYnVmLCBSRUdCVUZfU1RBTkRBUkQpOw0KLQkJWExvZ1JlZ2lzdGVyQnVmZmVyKDEsIHJi dWYsIFJFR0JVRl9XSUxMX0lOSVQpOw0KKwkJLyoNCisJCSAqIFRoZSByaWdodCBwYWdlIGlzIHJl YnVpbHQgZnJvbSBzY3JhdGNoIGluIHJlZG8uICBPcmRpbmFyaWx5IHRoYXQgaXMNCisJCSAqIGZy b20gdGhlIGxvZ2dlZCB0dXBsZSByZWdpb24gKFJFR0JVRl9XSUxMX0lOSVQpLiAgQSBwcmVmaXgt bGVhZiBzcGxpdA0KKwkJICogaW5zdGVhZCByZWJ1aWxkcyBpdCBmcm9tIGl0cyBsb2dnZWQgcGxh aW4gaXRlbXMsIHVubGVzcyB0aG9zZSB3b3VsZA0KKwkJICogb3ZlcmZsb3cgdGhlIHJlY29yZCAo WExIX1NQTElUX1JGUEkpLCBpbiB3aGljaCBjYXNlIHRoZSBjb2RlZCBwYWdlIGlzDQorCQkgKiBj YXJyaWVkIGFzIGEgZm9yY2VkIGZ1bGwtcGFnZSBpbWFnZS4NCisJCSAqLw0KKwkJWExvZ1JlZ2lz dGVyQnVmZmVyKDEsIHJidWYsDQorCQkJCQkJICAgKHhscmVjLmZsYWdzICYgWExIX1NQTElUX1JG UEkpID8NCisJCQkJCQkgICAoUkVHQlVGX1NUQU5EQVJEIHwgUkVHQlVGX0ZPUkNFX0lNQUdFKSA6 IFJFR0JVRl9XSUxMX0lOSVQpOw0KIAkJLyogTG9nIG9yaWdpbmFsIHJpZ2h0IHNpYmxpbmcsIHNp bmNlIHdlJ3ZlIGNoYW5nZWQgaXRzIHByZXYtcG9pbnRlciAqLw0KIAkJaWYgKCFpc3JpZ2h0bW9z dCkNCiAJCQlYTG9nUmVnaXN0ZXJCdWZmZXIoMiwgc2J1ZiwgUkVHQlVGX1NUQU5EQVJEKTsNCiAJ CWlmICghaXNsZWFmKQ0KIAkJCVhMb2dSZWdpc3RlckJ1ZmZlcigzLCBjYnVmLCBSRUdCVUZfU1RB TkRBUkQpOw0KIA0KKwkJLyoNCisJCSAqIEZvciBhIHByZWZpeCBsZWFmIHNwbGl0LCBjYXJyeSBl YWNoIGhhbGYncyBjaG9zZW4gcHJlZml4IGJ5dGVzLCBhbmQNCisJCSAqICh1bmxlc3MgdGhlIHJp Z2h0IHBhZ2UgaXMgY2FycmllZCBhcyBhIGZ1bGwtcGFnZSBpbWFnZSkgdGhlIHJpZ2h0DQorCQkg KiBoaWdoIGtleSBhbmQgdGhlIHJpZ2h0IGhhbGYncyBQTEFJTiBpdGVtcyBvbiBibG9jayAxLCBz byByZWRvIGNhbiBsYXkNCisJCSAqIHRoZSByaWdodCBwYWdlIG91dCBjb2RlZCB3aXRob3V0IGRl cGVuZGluZyBvbiBibG9jayAwJ3Mgc3RhdGUgKGJsb2NrDQorCQkgKiAwIG1heSBiZSByZXN0b3Jl ZCBmcm9tIGFuIGF1dG9tYXRpYyBmdWxsLXBhZ2UgaW1hZ2UpLiAgVGhlIGxlZnQgaGFsZg0KKwkJ ICogaXMgcmVidWlsdCBpbiByZWRvIGZyb20gdGhlIG9yaWdpbmFsIHBhZ2UgKGJsb2NrIDApIHdo ZW4gaXQgbmVlZHMNCisJCSAqIHJlZG8sIG9yIGZyb20gaXRzIG93biBGUEkgb3RoZXJ3aXNlLCBz byB0aGUgbGVmdCBpdGVtcyBhcmUgbm90IGxvZ2dlZC4NCisJCSAqLw0KKwkJaWYgKHhscmVjLmZs YWdzICYgWExIX1NQTElUX0xFQUZQUkVGSVgpDQorCQl7DQorCQkJaWYgKCEoeGxyZWMuZmxhZ3Mg JiBYTEhfU1BMSVRfUkZQSSkgJiYgcmlnaHR3YWxidWZsZW4gPiAwKQ0KKwkJCQlYTG9nUmVnaXN0 ZXJCdWZEYXRhKDEsIHJpZ2h0d2FsYnVmLCByaWdodHdhbGJ1Zmxlbik7DQorCQl9DQorDQogCQkv Kg0KIAkJICogTG9nIHRoZSBuZXcgaXRlbSwgaWYgaXQgd2FzIGluc2VydGVkIG9uIHRoZSBsZWZ0 IHBhZ2UuIChJZiBpdCB3YXMNCiAJCSAqIHB1dCBvbiB0aGUgcmlnaHQgcGFnZSwgd2UgZG9uJ3Qg bmVlZCB0byBleHBsaWNpdGx5IFdBTCBsb2cgaXQNCkBAIC0yMDYzLDYgKzIzMjAsMTQgQEAgX2J0 X3NwbGl0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGl0dXBf a2V5LCBCdWZmZXIgYnVmLA0KIAkJWExvZ1JlZ2lzdGVyQnVmRGF0YSgwLCBsZWZ0aGlnaGtleSwN CiAJCQkJCQkJTUFYQUxJR04oSW5kZXhUdXBsZVNpemUobGVmdGhpZ2hrZXkpKSk7DQogDQorCQkv Kg0KKwkJICogRm9yIGEgcHJlZml4IGxlYWYgc3BsaXQsIHRoZSBsZWZ0IGhhbGYncyBjaG9zZW4g cHJlZml4IGJ5dGVzIGZvbGxvdw0KKwkJICogdGhlIGhpZ2gga2V5IG9uIGJsb2NrIDAgKHJlZG8g cmVhZHMgbmV3aXRlbS9vcmlnbmV3aXRlbSwgdGhlbiB0aGUNCisJCSAqIGhpZ2gga2V5LCB0aGVu IHRoaXMgcHJlZml4KS4NCisJCSAqLw0KKwkJaWYgKCh4bHJlYy5mbGFncyAmIFhMSF9TUExJVF9M RUFGUFJFRklYKSAmJiBsZWZ0cHJlZml4bGVuID4gMCkNCisJCQlYTG9nUmVnaXN0ZXJCdWZEYXRh KDAsIGxlZnRwcmVmaXgsIGxlZnRwcmVmaXhsZW4pOw0KKw0KIAkJLyoNCiAJCSAqIExvZyB0aGUg Y29udGVudHMgb2YgdGhlIHJpZ2h0IHBhZ2UgaW4gdGhlIGZvcm1hdCB1bmRlcnN0b29kIGJ5DQog CQkgKiBfYnRfcmVzdG9yZV9wYWdlKCkuICBUaGUgd2hvbGUgcmlnaHQgcGFnZSB3aWxsIGJlIHJl Y3JlYXRlZC4NCkBAIC0yMDcxLDExICsyMzM2LDE0IEBAIF9idF9zcGxpdChSZWxhdGlvbiByZWws IFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBpdHVwX2tleSwgQnVmZmVyIGJ1ZiwNCiAJ CSAqIHNvbWUgbmV3IGZ1bmMgaW4gcGFnZSBBUEkuICBOb3RlIHdlIG9ubHkgc3RvcmUgdGhlIHR1 cGxlcw0KIAkJICogdGhlbXNlbHZlcywga25vd2luZyB0aGF0IHRoZXkgd2VyZSBpbnNlcnRlZCBp biBpdGVtLW51bWJlciBvcmRlcg0KIAkJICogYW5kIHNvIHRoZSBsaW5lIHBvaW50ZXJzIGNhbiBi ZSByZWNvbnN0cnVjdGVkLiAgU2VlIGNvbW1lbnRzIGZvcg0KLQkJICogX2J0X3Jlc3RvcmVfcGFn ZSgpLg0KKwkJICogX2J0X3Jlc3RvcmVfcGFnZSgpLiAgQSBwcmVmaXgtY29tcHJlc3NlZCBsZWFm IHNwbGl0IGluc3RlYWQgcmVidWlsZHMNCisJCSAqIHRoZSByaWdodCBwYWdlIGZyb20gdGhlIG9y aWdpbmFsIHBhZ2UgaW4gcmVkbyAoc2VlIFhMSF9TUExJVF9MRUFGUFJFRklYKSwNCisJCSAqIHNv IGl0cyB0dXBsZSByZWdpb24gaXMgbm90IGxvZ2dlZC4NCiAJCSAqLw0KLQkJWExvZ1JlZ2lzdGVy QnVmRGF0YSgxLA0KLQkJCQkJCQkoY2hhciAqKSByaWdodHBhZ2UgKyAoKFBhZ2VIZWFkZXIpIHJp Z2h0cGFnZSktPnBkX3VwcGVyLA0KLQkJCQkJCQkoKFBhZ2VIZWFkZXIpIHJpZ2h0cGFnZSktPnBk X3NwZWNpYWwgLSAoKFBhZ2VIZWFkZXIpIHJpZ2h0cGFnZSktPnBkX3VwcGVyKTsNCisJCWlmICgh KHhscmVjLmZsYWdzICYgWExIX1NQTElUX0xFQUZQUkVGSVgpKQ0KKwkJCVhMb2dSZWdpc3RlckJ1 ZkRhdGEoMSwNCisJCQkJCQkJCShjaGFyICopIHJpZ2h0cGFnZSArICgoUGFnZUhlYWRlcikgcmln aHRwYWdlKS0+cGRfdXBwZXIsDQorCQkJCQkJCQkoKFBhZ2VIZWFkZXIpIHJpZ2h0cGFnZSktPnBk X3NwZWNpYWwgLSAoKFBhZ2VIZWFkZXIpIHJpZ2h0cGFnZSktPnBkX3VwcGVyKTsNCiANCiAJCXhs aW5mbyA9IG5ld2l0ZW1vbmxlZnQgPyBYTE9HX0JUUkVFX1NQTElUX0wgOiBYTE9HX0JUUkVFX1NQ TElUX1I7DQogCQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0JUUkVFX0lELCB4bGluZm8pOw0KQEAg LTI4MjAsNyArMzA4OCwxNSBAQCBfYnRfZGVsZXRlX29yX2RlZHVwX29uZV9wYWdlKFJlbGF0aW9u IHJlbCwgUmVsYXRpb24gaGVhcFJlbCwNCiAJCV9idF9ib3R0b211cGRlbF9wYXNzKHJlbCwgYnVm ZmVyLCBoZWFwUmVsLCBpbnNlcnRzdGF0ZS0+aXRlbXN6KSkNCiAJCXJldHVybjsNCiANCi0JLyog UGVyZm9ybSBkZWR1cGxpY2F0aW9uIHBhc3MgKHdoZW4gZW5hYmxlZCBhbmQgaW5kZXgtaXMtYWxs ZXF1YWxpbWFnZSkgKi8NCisJLyoNCisJICogUGVyZm9ybSBkZWR1cGxpY2F0aW9uIHBhc3MgKHdo ZW4gZW5hYmxlZCBhbmQgaW5kZXgtaXMtYWxsZXF1YWxpbWFnZSkuDQorCSAqDQorCSAqIE9uIGEg cHJlZml4LWNvbXByZXNzZWQgcGFnZSB0aGUgcGFzcyBkZWNvZGVzIGl0ZW1zIGFuZCBsYXlzIHRo ZSBkZWR1cGVkDQorCSAqIHJlc3VsdCBvdXQgcGxhaW4gYmVmb3JlIHJlLWNvZGluZyBpdDsgdGhl IGRlY29kZWQgc2V0IGNhbiBleGNlZWQgb25lDQorCSAqIHBhZ2UgZXZlbiB3aGVuIHRoZSBjb2Rl ZCBmb3JtIGZpdCwgaW4gd2hpY2ggY2FzZSB0aGUgcGFzcyBhYm9ydHMgd2l0aG91dA0KKwkgKiB0 b3VjaGluZyB0aGUgcGFnZSBhbmQgd2UgZmFsbCB0aHJvdWdoIHRvIHNwbGl0IGl0LiAgV2hlbiBp dCBkb2VzIGZpdCwgdGhlDQorCSAqIHJlY29tcHJlc3NlZCBwYWdlJ3MgV0FMIHJlcGxheXMgd2l0 aG91dCBhIGZ1bGwtcGFnZSBpbWFnZS4NCisJICovDQogCWlmIChCVEdldERlZHVwbGljYXRlSXRl bXMocmVsKSAmJiBpdHVwX2tleS0+YWxsZXF1YWxpbWFnZSkNCiAJCV9idF9kZWR1cF9wYXNzKHJl bCwgYnVmZmVyLCBpbnNlcnRzdGF0ZS0+aXR1cCwgaW5zZXJ0c3RhdGUtPml0ZW1zeiwNCiAJCQkJ CSAgIChpbmRleFVuY2hhbmdlZCB8fCB1bmlxdWVkdXApKTsNCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cGFnZS5jDQppbmRleCA0MTA1MTRkOGUxMC4uNzA2MTc3Zjc5OTIgMTAwNjQ0DQotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYw0KKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRwYWdlLmMNCkBAIC0xMjEyLDExICsxMjEyLDI2IEBAIF9idF9kZWxpdGVt c192YWN1dW0oUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLA0KIAlpZiAobmRlbGV0YWJsZSA+IDAp DQogCQlQYWdlSW5kZXhNdWx0aURlbGV0ZShwYWdlLCBkZWxldGFibGUsIG5kZWxldGFibGUpOw0K IA0KKwlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7DQorDQorCS8qDQorCSAqIElmIFZB Q1VVTSBlbXB0aWVkIGEgcHJlZml4LWNvbXByZXNzZWQgbGVhZiBvZiBhbGwgaXRzIGRhdGEgaXRl bXMsIGRyb3ANCisJICogdGhlIFBSRUZJWCBpdGVtIHRvbyBhbmQgY2xlYXIgQlRQX1BSRUZJWDog YW4gZW1wdHkgcGFnZSBjYXJyaWVzIG5vDQorCSAqIHByZWZpeCwgYW5kIHBhZ2UgZGVsZXRpb24g cmVsaWVzIG9uIGFuIGVtcHRpZWQgbGVhZiBob2xkaW5nIG9ubHkgaXRzDQorCSAqIGhpZ2gga2V5 IChuYnRwYWdlLmMncyBfYnRfbWFya19wYWdlX2hhbGZkZWFkKS4gIFJlY29yZGVkIGluIHRoZSB2 YWN1dW0NCisJICogcmVjb3JkIHNvIHJlZG8gZG9lcyB0aGUgc2FtZS4NCisJICovDQorCWlmIChQ X0hBU1BSRUZJWChvcGFxdWUpICYmDQorCQlQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpID09 IEJUUGFnZUdldFByZWZpeE9mZihvcGFxdWUpKQ0KKwl7DQorCQlQYWdlSW5kZXhUdXBsZURlbGV0 ZShwYWdlLCBCVFBhZ2VHZXRQcmVmaXhPZmYob3BhcXVlKSk7DQorCQlvcGFxdWUtPmJ0cG9fZmxh Z3MgJj0gfkJUUF9QUkVGSVg7DQorCX0NCisNCiAJLyoNCiAJICogV2UgY2FuIGNsZWFyIHRoZSB2 YWN1dW0gY3ljbGUgSUQgc2luY2UgdGhpcyBwYWdlIGhhcyBjZXJ0YWlubHkgYmVlbg0KIAkgKiBw cm9jZXNzZWQgYnkgdGhlIGN1cnJlbnQgdmFjdXVtIHNjYW4uDQogCSAqLw0KLQlvcGFxdWUgPSBC VFBhZ2VHZXRPcGFxdWUocGFnZSk7DQogCW9wYXF1ZS0+YnRwb19jeWNsZWlkID0gMDsNCiANCiAJ LyoNCkBAIC0yMjQ1LDYgKzIyNjAsMjAgQEAgX2J0X21hcmtfcGFnZV9oYWxmZGVhZChSZWxhdGlv biByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJ1ZmZlciBsZWFmYnVmLA0KIAlvcGFxdWUgPSBCVFBh Z2VHZXRPcGFxdWUocGFnZSk7DQogCW9wYXF1ZS0+YnRwb19mbGFncyB8PSBCVFBfSEFMRl9ERUFE Ow0KIA0KKwkvKg0KKwkgKiBBIHByZWZpeC1jb21wcmVzc2VkIGxlYWYgYmVpbmcgZGVsZXRlZCBt YXkgc3RpbGwgY2FycnkgaXRzIFBSRUZJWCBpdGVtDQorCSAqIChlLmcuIGVtcHRpZWQgYnkgc2lt cGxlIGRlbGV0aW9uLCB3aGljaCBkb2VzIG5vdCBkcm9wIGl0KS4gIFJlbW92ZSBpdA0KKwkgKiBh bmQgY2xlYXIgQlRQX1BSRUZJWCBzbyB0aGUgcGFnZSBob2xkcyBvbmx5IGl0cyBoaWdoIGtleSwg YXMgdGhlDQorCSAqIGhhbGYtZGVhZCB0cmFuc2l0aW9uIGJlbG93IHJlcXVpcmVzLiAgUmVkbyAo YnRyZWVfeGxvZ19tYXJrX3BhZ2VfaGFsZmRlYWQpDQorCSAqIHJlaW5pdGlhbGl6ZXMgdGhlIHBh Z2UsIHNvIGl0IG5lZWRzIG5vIHNlcGFyYXRlIGhhbmRsaW5nLg0KKwkgKi8NCisJaWYgKFBfSEFT UFJFRklYKG9wYXF1ZSkgJiYNCisJCVBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSkgPT0gQlRQ YWdlR2V0UHJlZml4T2ZmKG9wYXF1ZSkpDQorCXsNCisJCVBhZ2VJbmRleFR1cGxlRGVsZXRlKHBh Z2UsIEJUUGFnZUdldFByZWZpeE9mZihvcGFxdWUpKTsNCisJCW9wYXF1ZS0+YnRwb19mbGFncyAm PSB+QlRQX1BSRUZJWDsNCisJfQ0KKw0KIAlBc3NlcnQoUGFnZUdldE1heE9mZnNldE51bWJlcihw YWdlKSA9PSBQX0hJS0VZKTsNCiAJTWVtU2V0KCZ0cnVuY3R1cGxlLCAwLCBzaXplb2YoSW5kZXhU dXBsZURhdGEpKTsNCiAJdHJ1bmN0dXBsZS50X2luZm8gPSBzaXplb2YoSW5kZXhUdXBsZURhdGEp Ow0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cHJlZml4LmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHByZWZpeC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KaW5kZXggMDAwMDAwMDAwMDAuLmM3MjVmNzVjZDkyDQotLS0gL2Rldi9udWxsDQorKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHByZWZpeC5jDQpAQCAtMCwwICsxLDgxNCBAQA0K Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqDQorICogbmJ0cHJlZml4LmMNCisgKgkgIExlYWYga2V5 IHByZWZpeCBjb21wcmVzc2lvbiBmb3IgUG9zdGdyZXMgYnRyZWVzLg0KKyAqDQorICogQSBsZWFm IHBhZ2Ugb2YgYW4gaW5kZXggd2hvc2UgcHJlZml4X2NvbXByZXNzaW9uIHJlbG9wdGlvbiBpcyBv biwgYW5kIHdob3NlDQorICogZmlyc3Qga2V5IGNvbHVtbiBpcyBvZiBhIHZhcmxlbmEgdHlwZSwg bWF5IGJlIGZsYWdnZWQgQlRQX1BSRUZJWC4gIFN1Y2ggYQ0KKyAqIHBhZ2UgZnJvbnQtY29kZXMg dGhlIGZpcnN0IGtleSBjb2x1bW4gb2YgZWFjaCBub24tcGl2b3QgdHVwbGUgYWdhaW5zdCBhDQor ICogcGVyLXBhZ2UgUFJFRklYIGl0ZW0sIHNvIHRoYXQgYSBsb25nIGtleSB0aGF0IHJlcGVhdHMg b24gYSBwYWdlIGNvc3RzDQorICogbGl0dGxlIG1vcmUgdGhhbiBpdHMgdW5zaGFyZWQgdGFpbC4g IFRoZSBvbi1kaXNrIGZvcm1hdCBpcyBkb2N1bWVudGVkIGF0DQorICogQlRQX1BSRUZJWCBpbiBu YnRyZWUuaDsgdGhpcyBmaWxlIGlzIHRoZSBlbmNvZGVyLCBkZWNvZGVyLCBhbmQgdGhlIHBvbGlj eQ0KKyAqIHRoYXQgY2hvb3NlcyBhIHBhZ2UncyBwcmVmaXguDQorICoNCisgKiBDb2RpbmcgYW5k IGRlY29kaW5nIGRlcGVuZCBvbmx5IG9uIHRoZSBwYWdlJ3MgcHJlZml4IGFuZCB0aGUgdHVwbGUs IG5vdCBvbg0KKyAqIHRoZSBjYXRhbG9nLCBzbyBXQUwgcmVkbyByZXBlYXRzIHRoZW0sIGFuZCBk ZWNvZGluZyByZXByb2R1Y2VzIHRoZSBwbGFpbg0KKyAqIHR1cGxlIGJ5dGUgZm9yIGJ5dGUuICBB IHR1cGxlIGluc2VydGVkIGxhdGVyIHRoYXQgc2hhcmVzIGxlc3Mgb2YgdGhlIHByZWZpeA0KKyAq IGp1c3Qgc3RvcmVzIGEgc21hbGxlciBgc2hhcmVkJyBjb3VudCwgc28gbm8gaW5zZXJ0LCBWQUNV VU0sIGRlZHVwbGljYXRpb24NCisgKiBvciBjaGFuZ2Ugb2YgdGhlIHBhZ2UncyBrZXkgcmFuZ2Ug ZXZlciBoYXMgdG8gcmV3cml0ZSB0aGUgcGFnZSB0byBrZWVwIHRoZQ0KKyAqIHByZWZpeCB2YWxp ZC4gIFRoZSBwcmVmaXggaXMgY2hvc2VuIG9ubHkgd2hlbiBhIHBhZ2UgaXMgd3JpdHRlbiBhcyBh IHdob2xlDQorICogKENSRUFURSBJTkRFWCwgb3IgYSBoYWxmIG9mIGEgc3BsaXQpLg0KKyAqDQor ICogVGhpcyBpcyBtb2RlbGVkIG9uIHRoZSBsZWFmIHByZWZpeCBjb21wcmVzc2lvbiBvZiB0aGUg QkFSSyBhY2Nlc3MgbWV0aG9kDQorICogKHNyYy9iYWNrZW5kL2FjY2Vzcy9iYXJrL2Jhcmt1dGls cy5jKS4NCisgKg0KKyAqDQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwDQorICogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWENCisgKg0K KyAqIElERU5USUZJQ0FUSU9ODQorICoJICBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBy ZWZpeC5jDQorICoNCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisjaW5jbHVkZSAicG9zdGdy ZXMuaCINCisNCisjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCINCisjaW5jbHVkZSAiYWNjZXNzL25i dHJlZS5oIg0KKyNpbmNsdWRlICJzdG9yYWdlL2J1ZnBhZ2UuaCINCisjaW5jbHVkZSAidXRpbHMv cmVsLmgiDQorDQorLyoNCisgKiBXaGVyZSBlYWNoIHBhcnQgb2YgYSB0dXBsZSBnb2VzIGluIGl0 cyBjb2RlZCBmb3JtLiAgQ29kaW5nIGFuZCBkZWNvZGluZw0KKyAqIGJvdGggbGF5IHRoZSB0dXBs ZSBvdXQgZnJvbSB0aGlzLCBzbyB0aGUgdHdvIGNhbm5vdCBkaXNhZ3JlZS4NCisgKi8NCit0eXBl ZGVmIHN0cnVjdCBCVFByZWZpeFBsYW4NCit7DQorCVNpemUJCWhvZmY7CQkJLyogZGF0YSBvZmZz ZXQ6IGhlYWRlciBhbmQgbnVsbCBiaXRtYXAgKi8NCisJU2l6ZQkJYzE7CQkJCS8qIHBsYWluIGZp cnN0IGNvbHVtbidzIHNpemUsIHdpdGggaGVhZGVyICovDQorCVNpemUJCWtleWVuZDsJCQkvKiBl bmQgb2YgdGhlIHBsYWluIGtleSAocG9zdGluZyBvZmZzZXQpICovDQorCXVpbnQ4CQljb2RlOwkJ CS8qIGZpcnN0IHBheWxvYWQgYnl0ZSBvZiB0aGUgY29kZWQgY29sdW1uICovDQorCWNvbnN0IGNo YXIgKnN1ZmZpeDsJCQkvKiBieXRlcyBzdG9yZWQgYWZ0ZXIgaXQgKi8NCisJU2l6ZQkJc3VmZml4 bGVuOw0KKwlTaXplCQl2c2l6ZTsJCQkvKiBjb2RlZCBjb2x1bW4ncyBzaXplLCB3aXRoIGhlYWRl ciAqLw0KKwlTaXplCQljb2RlZGtleWVuZDsJLyogZW5kIG9mIHRoZSBjb2RlZCBrZXkgKi8NCisJ U2l6ZQkJdG90YWw7CQkJLyogc2l6ZSBvZiB0aGUgY29kZWQgdHVwbGUgKi8NCit9IEJUUHJlZml4 UGxhbjsNCisNCisvKg0KKyAqIElzIGBpdHVwJyBzdG9yZWQgY29kZWQgb24gYSBCVFBfUFJFRklY IHBhZ2U/ICBPbmx5IGEgbm9uLXBpdm90IHR1cGxlIChwbGFpbg0KKyAqIG9yIHBvc3RpbmcpIHdo b3NlIGZpcnN0IGNvbHVtbiBpcyBub3QgTlVMTDsgYSBwaXZvdCAoaGlnaCBrZXksIGRvd25saW5r KQ0KKyAqIGlzIHN0b3JlZCBhcyBpdCBpcy4NCisgKi8NCitzdGF0aWMgYm9vbA0KK19idF9wcmVm aXhfY29kYWJsZShJbmRleFR1cGxlIGl0dXApDQorew0KKwlpZiAoQlRyZWVUdXBsZUlzUGl2b3Qo aXR1cCkpDQorCQlyZXR1cm4gZmFsc2U7DQorCXJldHVybiAhSW5kZXhUdXBsZUhhc051bGxzKGl0 dXApIHx8DQorCQkhYXR0X2lzbnVsbCgwLCAodWludDggKikgaXR1cCArIHNpemVvZihJbmRleFR1 cGxlRGF0YSkpOw0KK30NCisNCisvKg0KKyAqIERvZXMgdGhlIHZhcmxlbmEgYHZhbCcgaGF2ZSB0 aGUgaGVhZGVyIGRlY29kaW5nIHdvdWxkIGdpdmUgaXQgYmFjazogdGhlDQorICogMS1ieXRlIGhl YWRlciBpZiBpdHMgZGF0YSBmaXQgb25lLCBlbHNlIGFuIHVuY29tcHJlc3NlZCA0LWJ5dGUgaGVh ZGVyPw0KKyAqLw0KK3N0YXRpYyBib29sDQorX2J0X3ByZWZpeF9jYW5vbmljYWwoY29uc3QgY2hh ciAqdmFsKQ0KK3sNCisJaWYgKFZBUkFUVF9JU19TSE9SVCh2YWwpKQ0KKwkJcmV0dXJuICFWQVJB VFRfSVNfRVhURVJOQUwodmFsKTsNCisJcmV0dXJuICFWQVJBVFRfSVNfRVhURU5ERUQodmFsKSAm Jg0KKwkJVkFSU0laRSh2YWwpIC0gVkFSSERSU1ogKyBWQVJIRFJTWl9TSE9SVCA+IFZBUkFUVF9T SE9SVF9NQVg7DQorfQ0KKw0KKy8qDQorICogRW5kIG9mIGEgbGVhZiB0dXBsZSdzIGtleTogdGhl IHBvc3RpbmctbGlzdCBvZmZzZXQgZm9yIGEgcG9zdGluZyB0dXBsZSwgdGhlDQorICogd2hvbGUg dHVwbGUgc2l6ZSBvdGhlcndpc2UuICBUaGUgYnl0ZXMgYWZ0ZXIgdGhlIGtleSAoYSBwb3N0aW5n IGxpc3QpIGFyZQ0KKyAqIG1vdmVkIGFzIHRoZXkgYXJlLg0KKyAqLw0KK3N0YXRpYyBTaXplDQor X2J0X3ByZWZpeF9rZXllbmQoSW5kZXhUdXBsZSBpdHVwKQ0KK3sNCisJaWYgKEJUcmVlVHVwbGVJ c1Bvc3RpbmcoaXR1cCkpDQorCQlyZXR1cm4gQlRyZWVUdXBsZUdldFBvc3RpbmdPZmZzZXQoaXR1 cCk7DQorCXJldHVybiBJbmRleFR1cGxlU2l6ZShpdHVwKTsNCit9DQorDQorLyoNCisgKiBUaGUg c2l6ZSBvZiBhIGNvZGVkIGZpcnN0IGNvbHVtbiB3aG9zZSBwYXlsb2FkIGlzIGBwYXlsb2FkJyBi eXRlczogYQ0KKyAqIHZhcmxlbmEgd2l0aCBhIDEtYnl0ZSBoZWFkZXIgd2hlbiBpdCBmaXRzIG9u ZS4NCisgKi8NCitzdGF0aWMgaW5saW5lIFNpemUNCitfYnRfcHJlZml4X3ZzaXplKFNpemUgcGF5 bG9hZCkNCit7DQorCWlmIChwYXlsb2FkICsgVkFSSERSU1pfU0hPUlQgPD0gVkFSQVRUX1NIT1JU X01BWCkNCisJCXJldHVybiBwYXlsb2FkICsgVkFSSERSU1pfU0hPUlQ7DQorCXJldHVybiBwYXls b2FkICsgVkFSSERSU1o7DQorfQ0KKw0KKy8qDQorICogT2Zmc2V0IGF0IHdoaWNoIHRoZSBieXRl cyBhZnRlciB0aGUgZmlyc3QgY29sdW1uIGdvIGluIGEgY29kZWQgdHVwbGUgd2hvc2UNCisgKiBj b2RlZCBjb2x1bW4gZW5kcyBhdCBgdmVuZCcsIHdoZW4gaW4gdGhlIHBsYWluIHR1cGxlIHRoZXkg c3RhcnQgYXQNCisgKiBgcmVzdG9yaWcnOiB0aGUgZmlyc3Qgb2Zmc2V0IGF0IG9yIGFmdGVyIGB2 ZW5kJyB0aGF0IGlzIHRoZSBzYW1lIGRpc3RhbmNlDQorICogcGFzdCBhIE1BWEFMSUdOIGJvdW5k YXJ5Lg0KKyAqLw0KK3N0YXRpYyBpbmxpbmUgU2l6ZQ0KK19idF9wcmVmaXhfcmVzdG9mZihTaXpl IHZlbmQsIFNpemUgcmVzdG9yaWcpDQorew0KKwlyZXR1cm4gdmVuZCArIChNQVhJTVVNX0FMSUdO T0YgKyByZXN0b3JpZyAlIE1BWElNVU1fQUxJR05PRiAtDQorCQkJCSAgIHZlbmQgJSBNQVhJTVVN X0FMSUdOT0YpICUgTUFYSU1VTV9BTElHTk9GOw0KK30NCisNCisvKiBQbGFuIHRoZSBjb2Rpbmcg b2YgdGhlIGNvZGFibGUgdHVwbGUgYGl0dXAnIGFnYWluc3QgYHByZWZpeCcuICovDQorc3RhdGlj IHZvaWQNCitfYnRfcHJlZml4X3BsYW4oY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHByZWZpeGxl biwgSW5kZXhUdXBsZSBpdHVwLA0KKwkJCQlCVFByZWZpeFBsYW4gKnBsYW4pDQorew0KKwljb25z dCBjaGFyICp2YWw7DQorCVNpemUJCXJlc3RvcmlnOw0KKwlib29sCQlzdG9yZXJlc3Q7DQorDQor CXBsYW4tPmhvZmYgPSBJbmRleEluZm9GaW5kRGF0YU9mZnNldChpdHVwLT50X2luZm8pOw0KKwl2 YWwgPSAoY29uc3QgY2hhciAqKSBpdHVwICsgcGxhbi0+aG9mZjsNCisJcGxhbi0+YzEgPSBWQVJT SVpFX0FOWSh2YWwpOw0KKwlwbGFuLT5rZXllbmQgPSBfYnRfcHJlZml4X2tleWVuZChpdHVwKTsN CisNCisJaWYgKF9idF9wcmVmaXhfY2Fub25pY2FsKHZhbCkpDQorCXsNCisJCWNvbnN0IGNoYXIg KmRhdGEgPSBWQVJEQVRBX0FOWSh2YWwpOw0KKwkJU2l6ZQkJZGF0YWxlbiA9IFZBUlNJWkVfQU5Z X0VYSERSKHZhbCk7DQorCQlTaXplCQlsaW1pdCA9IE1pbihwcmVmaXhsZW4sIGRhdGFsZW4pOw0K KwkJU2l6ZQkJc2hhcmVkID0gMDsNCisNCisJCXdoaWxlIChzaGFyZWQgPCBsaW1pdCAmJiBwcmVm aXhbc2hhcmVkXSA9PSBkYXRhW3NoYXJlZF0pDQorCQkJc2hhcmVkKys7DQorCQlwbGFuLT5jb2Rl ID0gKHVpbnQ4KSBzaGFyZWQ7DQorCQlwbGFuLT5zdWZmaXggPSBkYXRhICsgc2hhcmVkOw0KKwkJ cGxhbi0+c3VmZml4bGVuID0gZGF0YWxlbiAtIHNoYXJlZDsNCisJfQ0KKwllbHNlDQorCXsNCisJ CXBsYW4tPmNvZGUgPSBCVFJFRV9QUkVGSVhfUkFXOw0KKwkJcGxhbi0+c3VmZml4ID0gdmFsOw0K KwkJcGxhbi0+c3VmZml4bGVuID0gcGxhbi0+YzE7DQorCX0NCisJcGxhbi0+dnNpemUgPSBfYnRf cHJlZml4X3ZzaXplKDEgKyBwbGFuLT5zdWZmaXhsZW4pOw0KKw0KKwkvKg0KKwkgKiBUaGUgYnl0 ZXMgYWZ0ZXIgdGhlIGZpcnN0IGNvbHVtbiBjYW4gYmUgbGVmdCBvdXQgd2hlbiB0aGV5IGFyZSBq dXN0IHRoZQ0KKwkgKiB6ZXJvIHBhZGRpbmcgdGhhdCBlbmRzIHRoZSBrZXkuDQorCSAqLw0KKwly ZXN0b3JpZyA9IHBsYW4tPmhvZmYgKyBwbGFuLT5jMTsNCisJc3RvcmVyZXN0ID0gcGxhbi0+a2V5 ZW5kICE9IE1BWEFMSUdOKHJlc3RvcmlnKTsNCisJZm9yIChTaXplIGkgPSByZXN0b3JpZzsgIXN0 b3JlcmVzdCAmJiBpIDwgcGxhbi0+a2V5ZW5kOyBpKyspDQorCQlzdG9yZXJlc3QgPSAoKGNvbnN0 IGNoYXIgKikgaXR1cClbaV0gIT0gMDsNCisNCisJaWYgKHN0b3JlcmVzdCkNCisJew0KKwkJcGxh bi0+Y29kZSB8PSBCVFJFRV9QUkVGSVhfUkVTVDsNCisJCXBsYW4tPmNvZGVka2V5ZW5kID0gX2J0 X3ByZWZpeF9yZXN0b2ZmKHBsYW4tPmhvZmYgKyBwbGFuLT52c2l6ZSwNCisJCQkJCQkJCQkJCSAg IHJlc3RvcmlnKSArDQorCQkJKHBsYW4tPmtleWVuZCAtIHJlc3RvcmlnKTsNCisJfQ0KKwllbHNl DQorCQlwbGFuLT5jb2RlZGtleWVuZCA9IE1BWEFMSUdOKHBsYW4tPmhvZmYgKyBwbGFuLT52c2l6 ZSk7DQorCXBsYW4tPnRvdGFsID0gcGxhbi0+Y29kZWRrZXllbmQgKyAoSW5kZXhUdXBsZVNpemUo aXR1cCkgLSBwbGFuLT5rZXllbmQpOw0KK30NCisNCisvKg0KKyAqIENvcHkgbiBieXRlcywgYXMg bWVtY3B5LiAgRGVjb2RpbmcgbW92ZXMgYSBmZXcgc2hvcnQgcnVucyBvZiBieXRlcyBwZXINCisg KiB0dXBsZTsgZWlnaHQgYnl0ZXMgYXQgYSB0aW1lIGlzIHNldmVyYWwgdGltZXMgZmFzdGVyIHRo YW4gYSBsaWJjIG1lbWNweQ0KKyAqIGZvciBydW5zIHRoaXMgc2hvcnQgKHRoZSBzdHJpbmctbW92 ZSBzdGFydHVwIGNvc3QgZG9taW5hdGVzIG90aGVyd2lzZSkuDQorICovDQorc3RhdGljIGlubGlu ZSB2b2lkDQorX2J0X3ByZWZpeF9jb3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBTaXpl IG4pDQorew0KKwl3aGlsZSAobiA+PSBzaXplb2YodWludDY0KSkNCisJew0KKwkJbWVtY3B5KGRz dCwgc3JjLCBzaXplb2YodWludDY0KSk7DQorCQlkc3QgKz0gc2l6ZW9mKHVpbnQ2NCk7DQorCQlz cmMgKz0gc2l6ZW9mKHVpbnQ2NCk7DQorCQluIC09IHNpemVvZih1aW50NjQpOw0KKwl9DQorCXdo aWxlIChuLS0gPiAwKQ0KKwkJKmRzdCsrID0gKnNyYysrOw0KK30NCisNCisvKiBUaGUgcHJlZml4 IG9mIGEgQlRQX1BSRUZJWCBwYWdlLCBhbmQgaXRzIGxlbmd0aCBpbiAqbGVuLiAqLw0KK2NvbnN0 IGNoYXIgKg0KK19idF9wYWdlX2dldF9wcmVmaXgoUGFnZSBwYWdlLCBTaXplICpsZW4pDQorew0K KwlCVFBhZ2VPcGFxdWUgb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOw0KKwlJbmRleFR1 cGxlCWl0ZW07DQorDQorCUFzc2VydChQX0hBU1BSRUZJWChvcGFxdWUpKTsNCisJaXRlbSA9IChJ bmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLA0KKwkJCQkJCQkJCVBhZ2VHZXRJdGVtSWQocGFn ZSwNCisJCQkJCQkJCQkJCQkgIEJUUGFnZUdldFByZWZpeE9mZihvcGFxdWUpKSk7DQorCSpsZW4g PSBJbmRleFR1cGxlU2l6ZShpdGVtKSAtIHNpemVvZihJbmRleFR1cGxlRGF0YSk7DQorCXJldHVy biAoY29uc3QgY2hhciAqKSBpdGVtICsgc2l6ZW9mKEluZGV4VHVwbGVEYXRhKTsNCit9DQorDQor LyoNCisgKiBHaXZlIGBwYWdlJywgYSBsZWFmIGhvbGRpbmcgbm90aGluZyB5ZXQgYnV0IGl0cyBo aWdoIGtleSAoaWYgaXQgaGFzIG9uZSksDQorICogdGhlIHByZWZpeCBgcHJlZml4JyBvZiBgbGVu JyBieXRlczogYWRkIHRoZSBQUkVGSVggaXRlbSBhbmQgc2V0IEJUUF9QUkVGSVguDQorICogSXRz IHBhZGRpbmcgY29tZXMgZnJvbSB0aGUgcGFnZSdzIGZyZWUgc3BhY2UsIHdoaWNoIF9idF9wYWdl aW5pdCB6ZXJvZWQsIHNvDQorICogYSBwYWdlIHJlYnVpbHQgaW4gcmVkbyBpcyB0aGUgc2FtZS4N CisgKi8NCit2b2lkDQorX2J0X3BhZ2Vfc2V0X3ByZWZpeChQYWdlIHBhZ2UsIGNvbnN0IGNoYXIg KnByZWZpeCwgU2l6ZSBsZW4pDQorew0KKwlCVFBhZ2VPcGFxdWUgb3BhcXVlID0gQlRQYWdlR2V0 T3BhcXVlKHBhZ2UpOw0KKwl1bmlvbg0KKwl7DQorCQlJbmRleFR1cGxlRGF0YSBoZHI7DQorCQlj aGFyCQlkYXRhW3NpemVvZihJbmRleFR1cGxlRGF0YSkgKyBCVFJFRV9QUkVGSVhfTUFYXTsNCisJ fQkJCWl0ZW07DQorDQorCUFzc2VydChQX0lTTEVBRihvcGFxdWUpICYmICFQX0hBU1BSRUZJWChv cGFxdWUpKTsNCisJQXNzZXJ0KGxlbiA+PSAxICYmIGxlbiA8PSBCVFJFRV9QUkVGSVhfTUFYKTsN CisJQXNzZXJ0KFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSkgPT0gQlRQYWdlR2V0UHJlZml4 T2ZmKG9wYXF1ZSkgLSAxKTsNCisNCisJbWVtc2V0KCZpdGVtLmhkciwgMCwgc2l6ZW9mKEluZGV4 VHVwbGVEYXRhKSk7DQorCWl0ZW0uaGRyLnRfaW5mbyA9ICh1bnNpZ25lZCBzaG9ydCkgKHNpemVv ZihJbmRleFR1cGxlRGF0YSkgKyBsZW4pOw0KKwltZW1jcHkoaXRlbS5kYXRhICsgc2l6ZW9mKElu ZGV4VHVwbGVEYXRhKSwgcHJlZml4LCBsZW4pOw0KKwlpZiAoUGFnZUFkZEl0ZW0ocGFnZSwgaXRl bS5kYXRhLCBzaXplb2YoSW5kZXhUdXBsZURhdGEpICsgbGVuLA0KKwkJCQkJQlRQYWdlR2V0UHJl Zml4T2ZmKG9wYXF1ZSksIGZhbHNlLCBmYWxzZSkgPT0NCisJCUludmFsaWRPZmZzZXROdW1iZXIp DQorCQllbG9nKEVSUk9SLCAiZmFpbGVkIHRvIGFkZCBwcmVmaXggaXRlbSB0byBidHJlZSBwYWdl Iik7DQorCW9wYXF1ZS0+YnRwb19mbGFncyB8PSBCVFBfUFJFRklYOw0KK30NCisNCisvKg0KKyAq IFRoZSBjb2RlZCBmb3JtIG9mIHRoZSBsZWFmIHR1cGxlIGBpdHVwJyBmb3IgYHBhZ2UnLCBwYWxs b2MnZDsgYGl0dXAnIGl0c2VsZg0KKyAqIHdoZW4gdGhlIHBhZ2UgaGFzIG5vIHByZWZpeCBvciB0 aGUgdHVwbGUgaXMgc3RvcmVkIHBsYWluLg0KKyAqLw0KK0luZGV4VHVwbGUNCitfYnRfcHJlZml4 X2VuY29kZShQYWdlIHBhZ2UsIEluZGV4VHVwbGUgaXR1cCkNCit7DQorCWNvbnN0IGNoYXIgKnBy ZWZpeDsNCisJU2l6ZQkJcHJlZml4bGVuOw0KKwlCVFByZWZpeFBsYW4gcGxhbjsNCisJY2hhcgkg ICAqY29kZWQ7DQorCWNoYXIJICAgKnY7DQorCWNoYXIJICAgKnBheWxvYWQ7DQorDQorCWlmICgh UF9IQVNQUkVGSVgoQlRQYWdlR2V0T3BhcXVlKHBhZ2UpKSB8fA0KKwkJIV9idF9wcmVmaXhfY29k YWJsZShpdHVwKSkNCisJCXJldHVybiBpdHVwOw0KKw0KKwlwcmVmaXggPSBfYnRfcGFnZV9nZXRf cHJlZml4KHBhZ2UsICZwcmVmaXhsZW4pOw0KKwlfYnRfcHJlZml4X3BsYW4ocHJlZml4LCBwcmVm aXhsZW4sIGl0dXAsICZwbGFuKTsNCisJQXNzZXJ0KHBsYW4udG90YWwgPD0gSU5ERVhfU0laRV9N QVNLKTsNCisNCisJY29kZWQgPSBwYWxsb2MwKHBsYW4udG90YWwpOw0KKwltZW1jcHkoY29kZWQs IGl0dXAsIHBsYW4uaG9mZik7DQorCXYgPSBjb2RlZCArIHBsYW4uaG9mZjsNCisJaWYgKHBsYW4u dnNpemUgPD0gVkFSQVRUX1NIT1JUX01BWCkNCisJew0KKwkJU0VUX1ZBUlNJWkVfU0hPUlQodiwg cGxhbi52c2l6ZSk7DQorCQlwYXlsb2FkID0gdiArIFZBUkhEUlNaX1NIT1JUOw0KKwl9DQorCWVs c2UNCisJew0KKwkJU0VUX1ZBUlNJWkUodiwgcGxhbi52c2l6ZSk7DQorCQlwYXlsb2FkID0gdiAr IFZBUkhEUlNaOw0KKwl9DQorCXBheWxvYWRbMF0gPSAoY2hhcikgcGxhbi5jb2RlOw0KKwltZW1j cHkocGF5bG9hZCArIDEsIHBsYW4uc3VmZml4LCBwbGFuLnN1ZmZpeGxlbik7DQorCWlmIChwbGFu LmNvZGUgJiBCVFJFRV9QUkVGSVhfUkVTVCkNCisJew0KKwkJU2l6ZQkJcmVzdG9yaWcgPSBwbGFu LmhvZmYgKyBwbGFuLmMxOw0KKw0KKwkJbWVtY3B5KGNvZGVkICsgX2J0X3ByZWZpeF9yZXN0b2Zm KHBsYW4uaG9mZiArIHBsYW4udnNpemUsIHJlc3RvcmlnKSwNCisJCQkgICAoY2hhciAqKSBpdHVw ICsgcmVzdG9yaWcsIHBsYW4ua2V5ZW5kIC0gcmVzdG9yaWcpOw0KKwl9DQorCW1lbWNweShjb2Rl ZCArIHBsYW4uY29kZWRrZXllbmQsIChjaGFyICopIGl0dXAgKyBwbGFuLmtleWVuZCwNCisJCSAg IEluZGV4VHVwbGVTaXplKGl0dXApIC0gcGxhbi5rZXllbmQpOw0KKw0KKwkoKEluZGV4VHVwbGUp IGNvZGVkKS0+dF9pbmZvID0NCisJCShpdHVwLT50X2luZm8gJiB+SU5ERVhfU0laRV9NQVNLKSB8 ICh1bnNpZ25lZCBzaG9ydCkgcGxhbi50b3RhbDsNCisJaWYgKEJUcmVlVHVwbGVJc1Bvc3Rpbmco aXR1cCkpDQorCQlCVHJlZVR1cGxlU2V0UG9zdGluZygoSW5kZXhUdXBsZSkgY29kZWQsIEJUcmVl VHVwbGVHZXROUG9zdGluZyhpdHVwKSwNCisJCQkJCQkJIHBsYW4uY29kZWRrZXllbmQpOw0KKw0K KyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HDQorCXsNCisJCUJUSXRlbUJ1ZgljaGVjazsNCisJ CUluZGV4VHVwbGUJZGVjb2RlZCA9IF9idF9wcmVmaXhfZGVjb2RlKHBhZ2UsIChJbmRleFR1cGxl KSBjb2RlZCwNCisJCQkJCQkJCQkJCQkmY2hlY2spOw0KKw0KKwkJQXNzZXJ0KEluZGV4VHVwbGVT aXplKGRlY29kZWQpID09IEluZGV4VHVwbGVTaXplKGl0dXApICYmDQorCQkJICAgbWVtY21wKGRl Y29kZWQsIGl0dXAsIEluZGV4VHVwbGVTaXplKGl0dXApKSA9PSAwKTsNCisJfQ0KKyNlbmRpZg0K Kw0KKwlyZXR1cm4gKEluZGV4VHVwbGUpIGNvZGVkOw0KK30NCisNCisvKiBUaGUgTUFYQUxJR05l ZCBzaXplIGBpdHVwJyB0YWtlcyBvbiBgcGFnZScsIGNvZGVkIGlmIHRoZSBwYWdlIGNvZGVzIGl0 LiAqLw0KK1NpemUNCitfYnRfcHJlZml4X2NvZGVkX3NpemUoUGFnZSBwYWdlLCBJbmRleFR1cGxl IGl0dXApDQorew0KKwljb25zdCBjaGFyICpwcmVmaXg7DQorCVNpemUJCXByZWZpeGxlbjsNCisJ QlRQcmVmaXhQbGFuIHBsYW47DQorDQorCWlmICghUF9IQVNQUkVGSVgoQlRQYWdlR2V0T3BhcXVl KHBhZ2UpKSB8fA0KKwkJIV9idF9wcmVmaXhfY29kYWJsZShpdHVwKSkNCisJCXJldHVybiBNQVhB TElHTihJbmRleFR1cGxlU2l6ZShpdHVwKSk7DQorDQorCXByZWZpeCA9IF9idF9wYWdlX2dldF9w cmVmaXgocGFnZSwgJnByZWZpeGxlbik7DQorCV9idF9wcmVmaXhfcGxhbihwcmVmaXgsIHByZWZp eGxlbiwgaXR1cCwgJnBsYW4pOw0KKwlyZXR1cm4gTUFYQUxJR04ocGxhbi50b3RhbCk7DQorfQ0K Kw0KKy8qDQorICogRGVjb2RlIHRoZSBpdGVtIGBpdHVwJyBvZiB0aGUgQlRQX1BSRUZJWCBwYWdl IGBwYWdlJyBpbnRvIGBidWYnLCBhbmQgcmV0dXJuDQorICogaXQ7IGFuIGl0ZW0gc3RvcmVkIHBs YWluIGlzIHJldHVybmVkIGFzIGl0IGlzLiAgVGhlIGludmVyc2Ugb2YNCisgKiBfYnRfcHJlZml4 X2VuY29kZSwgYnl0ZSBmb3IgYnl0ZS4gIEFuIGl0ZW0gdGhhdCBkb2VzIG5vdCBkZWNvZGUgd2l0 aGluIGl0cw0KKyAqIG93biBib3VuZHMsIG9yIGNsYWltcyBtb3JlIG9mIHRoZSBwcmVmaXggdGhh biB0aGUgcGFnZSBoYXMsIGlzIHJlcG9ydGVkIGFzDQorICogY29ycnVwdGlvbi4NCisgKi8NCitJ bmRleFR1cGxlDQorX2J0X3ByZWZpeF9kZWNvZGUoUGFnZSBwYWdlLCBJbmRleFR1cGxlIGl0dXAs IEJUSXRlbUJ1ZiAqYnVmKQ0KK3sNCisJY29uc3QgY2hhciAqcHJlZml4Ow0KKwlTaXplCQlwcmVm aXhsZW47DQorCVNpemUJCXNpemUgPSBJbmRleFR1cGxlU2l6ZShpdHVwKTsNCisJU2l6ZQkJaG9m ZjsNCisJU2l6ZQkJY29kZWRrZXllbmQ7DQorCWNvbnN0IGNoYXIgKnY7DQorCVNpemUJCXZzaXpl ID0gMDsNCisJY29uc3QgY2hhciAqcGF5bG9hZDsNCisJU2l6ZQkJcGF5bGVuID0gMDsNCisJdWlu dDgJCWNvZGU7DQorCVNpemUJCXNoYXJlZDsNCisJY2hhcgkgICAqb3V0ID0gYnVmLT5kYXRhOw0K KwljaGFyCSAgICp2YWwgPSBOVUxMOw0KKwlTaXplCQljMTsNCisJU2l6ZQkJcmVzdG9yaWc7DQor CVNpemUJCWtleWVuZDsNCisNCisJaWYgKCFfYnRfcHJlZml4X2NvZGFibGUoaXR1cCkpDQorCQly ZXR1cm4gaXR1cDsNCisNCisJcHJlZml4ID0gX2J0X3BhZ2VfZ2V0X3ByZWZpeChwYWdlLCAmcHJl Zml4bGVuKTsNCisJaG9mZiA9IEluZGV4SW5mb0ZpbmREYXRhT2Zmc2V0KGl0dXAtPnRfaW5mbyk7 DQorCWNvZGVka2V5ZW5kID0gX2J0X3ByZWZpeF9rZXllbmQoaXR1cCk7DQorCXYgPSAoY29uc3Qg Y2hhciAqKSBpdHVwICsgaG9mZjsNCisJaWYgKGhvZmYgPj0gY29kZWRrZXllbmQgfHwgY29kZWRr ZXllbmQgPiBzaXplIHx8DQorCQkodnNpemUgPSBWQVJTSVpFX0FOWSh2KSkgPiBjb2RlZGtleWVu ZCAtIGhvZmYgfHwNCisJCShwYXlsZW4gPSBWQVJTSVpFX0FOWV9FWEhEUih2KSkgPCAxKQ0KKwkJ Z290byBjb3JydXB0Ow0KKwlwYXlsb2FkID0gVkFSREFUQV9BTlkodik7DQorCWNvZGUgPSAodWlu dDgpIHBheWxvYWRbMF07DQorCXNoYXJlZCA9IGNvZGUgJiBCVFJFRV9QUkVGSVhfU0hBUkVEX01B U0s7DQorDQorCV9idF9wcmVmaXhfY29weShvdXQsIChjb25zdCBjaGFyICopIGl0dXAsIGhvZmYp Ow0KKwl2YWwgPSBvdXQgKyBob2ZmOw0KKwlpZiAoc2hhcmVkID09IEJUUkVFX1BSRUZJWF9SQVcp DQorCXsNCisJCWMxID0gcGF5bGVuIC0gMTsNCisJCV9idF9wcmVmaXhfY29weSh2YWwsIHBheWxv YWQgKyAxLCBjMSk7DQorCQlpZiAoYzEgPCBWQVJIRFJTWl9TSE9SVCB8fCBWQVJTSVpFX0FOWSh2 YWwpICE9IGMxKQ0KKwkJCWdvdG8gY29ycnVwdDsNCisJfQ0KKwllbHNlDQorCXsNCisJCVNpemUJ CWRhdGFsZW4gPSBzaGFyZWQgKyBwYXlsZW4gLSAxOw0KKwkJY2hhcgkgICAqZGF0YTsNCisNCisJ CWlmIChob2ZmICsgVkFSSERSU1ogKyBkYXRhbGVuID4gc2l6ZW9mKEJUSXRlbUJ1ZikpDQorCQkJ Z290byBjb3JydXB0Ow0KKwkJaWYgKHNoYXJlZCA+IHByZWZpeGxlbikNCisJCQllcmVwb3J0KEVS Uk9SLA0KKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTkRFWF9DT1JSVVBURUQpLA0KKwkJCQkJIGVy cm1zZ19pbnRlcm5hbCgiYnRyZWUgbGVhZiB0dXBsZSBzaGFyZXMgJXp1IGJ5dGVzIG9mIGEgJXp1 LWJ5dGUgcGFnZSBwcmVmaXgiLA0KKwkJCQkJCQkJCSBzaGFyZWQsIHByZWZpeGxlbikpKTsNCisJ CWlmIChkYXRhbGVuICsgVkFSSERSU1pfU0hPUlQgPD0gVkFSQVRUX1NIT1JUX01BWCkNCisJCXsN CisJCQljMSA9IGRhdGFsZW4gKyBWQVJIRFJTWl9TSE9SVDsNCisJCQlTRVRfVkFSU0laRV9TSE9S VCh2YWwsIGMxKTsNCisJCQlkYXRhID0gdmFsICsgVkFSSERSU1pfU0hPUlQ7DQorCQl9DQorCQll bHNlDQorCQl7DQorCQkJYzEgPSBkYXRhbGVuICsgVkFSSERSU1o7DQorCQkJU0VUX1ZBUlNJWkUo dmFsLCBjMSk7DQorCQkJZGF0YSA9IHZhbCArIFZBUkhEUlNaOw0KKwkJfQ0KKwkJX2J0X3ByZWZp eF9jb3B5KGRhdGEsIHByZWZpeCwgc2hhcmVkKTsNCisJCV9idF9wcmVmaXhfY29weShkYXRhICsg c2hhcmVkLCBwYXlsb2FkICsgMSwgcGF5bGVuIC0gMSk7DQorCX0NCisNCisJcmVzdG9yaWcgPSBo b2ZmICsgYzE7DQorCWlmIChjb2RlICYgQlRSRUVfUFJFRklYX1JFU1QpDQorCXsNCisJCVNpemUJ CXJlc3RvZmYgPSBfYnRfcHJlZml4X3Jlc3RvZmYoaG9mZiArIHZzaXplLCByZXN0b3JpZyk7DQor DQorCQlpZiAocmVzdG9mZiA+IGNvZGVka2V5ZW5kKQ0KKwkJCWdvdG8gY29ycnVwdDsNCisJCWtl eWVuZCA9IHJlc3RvcmlnICsgKGNvZGVka2V5ZW5kIC0gcmVzdG9mZik7DQorCQlpZiAoa2V5ZW5k ICsgKHNpemUgLSBjb2RlZGtleWVuZCkgPiBzaXplb2YoQlRJdGVtQnVmKSkNCisJCQlnb3RvIGNv cnJ1cHQ7DQorCQlfYnRfcHJlZml4X2NvcHkob3V0ICsgcmVzdG9yaWcsIChjb25zdCBjaGFyICop IGl0dXAgKyByZXN0b2ZmLA0KKwkJCQkJCWNvZGVka2V5ZW5kIC0gcmVzdG9mZik7DQorCX0NCisJ ZWxzZQ0KKwl7DQorCQlrZXllbmQgPSBNQVhBTElHTihyZXN0b3JpZyk7DQorCQlpZiAoa2V5ZW5k ICsgKHNpemUgLSBjb2RlZGtleWVuZCkgPiBzaXplb2YoQlRJdGVtQnVmKSkNCisJCQlnb3RvIGNv cnJ1cHQ7DQorCQltZW1zZXQob3V0ICsgcmVzdG9yaWcsIDAsIGtleWVuZCAtIHJlc3RvcmlnKTsN CisJfQ0KKwlfYnRfcHJlZml4X2NvcHkob3V0ICsga2V5ZW5kLCAoY29uc3QgY2hhciAqKSBpdHVw ICsgY29kZWRrZXllbmQsDQorCQkJCQlzaXplIC0gY29kZWRrZXllbmQpOw0KKw0KKwkoKEluZGV4 VHVwbGUpIG91dCktPnRfaW5mbyA9IChpdHVwLT50X2luZm8gJiB+SU5ERVhfU0laRV9NQVNLKSB8 DQorCQkodW5zaWduZWQgc2hvcnQpIChrZXllbmQgKyAoc2l6ZSAtIGNvZGVka2V5ZW5kKSk7DQor CWlmIChCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKQ0KKwkJQlRyZWVUdXBsZVNldFBvc3Rpbmco KEluZGV4VHVwbGUpIG91dCwgQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXApLA0KKwkJCQkJCQkg a2V5ZW5kKTsNCisJcmV0dXJuIChJbmRleFR1cGxlKSBvdXQ7DQorDQorY29ycnVwdDoNCisJZXJl cG9ydChFUlJPUiwNCisJCQkoZXJyY29kZShFUlJDT0RFX0lOREVYX0NPUlJVUFRFRCksDQorCQkJ IGVycm1zZ19pbnRlcm5hbCgiYnRyZWUgbGVhZiB0dXBsZSBpcyBub3QgYSB2YWxpZCBwcmVmaXgt Y29kZWQgdHVwbGUiKSkpOw0KKwlyZXR1cm4gTlVMTDsJCQkJLyoga2VlcCBjb21waWxlciBxdWll dCAqLw0KK30NCisNCisvKg0KKyAqIFRoZSBieXRlcyBvZiBgaXR1cCcncyBmaXJzdCBjb2x1bW4g YSBwYWdlIHByZWZpeCBtYXkgYmUgdGFrZW4gZnJvbSwgYW5kIGhvdw0KKyAqIG1hbnkgKGF0IG1v c3QgQlRSRUVfUFJFRklYX01BWCkgaW4gKmxlbjsgTlVMTCB3aGVuIHRoZSB0dXBsZSBoYXMgbm9u ZTogaXQNCisgKiBpcyBub3QgY29kYWJsZSwgaXRzIHZhbHVlIGlzIGVtcHR5LCBvciBpdCB3b3Vs ZCBiZSBzdG9yZWQgcmF3Lg0KKyAqLw0KK2NvbnN0IGNoYXIgKg0KK19idF9wcmVmaXhfY2FuZGlk YXRlKEluZGV4VHVwbGUgaXR1cCwgU2l6ZSAqbGVuKQ0KK3sNCisJY29uc3QgY2hhciAqdmFsOw0K Kw0KKwlpZiAoIV9idF9wcmVmaXhfY29kYWJsZShpdHVwKSkNCisJCXJldHVybiBOVUxMOw0KKwl2 YWwgPSAoY29uc3QgY2hhciAqKSBpdHVwICsgSW5kZXhJbmZvRmluZERhdGFPZmZzZXQoaXR1cC0+ dF9pbmZvKTsNCisJaWYgKCFfYnRfcHJlZml4X2Nhbm9uaWNhbCh2YWwpIHx8IFZBUlNJWkVfQU5Z X0VYSERSKHZhbCkgPT0gMCkNCisJCXJldHVybiBOVUxMOw0KKwkqbGVuID0gTWluKFZBUlNJWkVf QU5ZX0VYSERSKHZhbCksIEJUUkVFX1BSRUZJWF9NQVgpOw0KKwlyZXR1cm4gVkFSREFUQV9BTlko dmFsKTsNCit9DQorDQorLyoNCisgKiBIb3cgbWFueSBieXRlcyBvZiBgcHJlZml4JyB0aGUgZmly c3QgY29sdW1uIG9mIGBpdHVwJyB3b3VsZCBzaGFyZSBvbiBhIHBhZ2UNCisgKiB3aXRoIHRoYXQg cHJlZml4OiAtMSB3aGVuIHRoZSB0dXBsZSB3b3VsZCBub3QgYmUgY29kZWQsIDAgd2hlbiBpdCB3 b3VsZCBiZQ0KKyAqIHN0b3JlZCByYXcuDQorICovDQoraW50DQorX2J0X3ByZWZpeF9zaGFyZWQo Y29uc3QgY2hhciAqcHJlZml4LCBTaXplIHByZWZpeGxlbiwgSW5kZXhUdXBsZSBpdHVwKQ0KK3sN CisJQlRQcmVmaXhQbGFuIHBsYW47DQorDQorCWlmICghX2J0X3ByZWZpeF9jb2RhYmxlKGl0dXAp KQ0KKwkJcmV0dXJuIC0xOw0KKwlfYnRfcHJlZml4X3BsYW4ocHJlZml4LCBwcmVmaXhsZW4sIGl0 dXAsICZwbGFuKTsNCisJaWYgKChwbGFuLmNvZGUgJiBCVFJFRV9QUkVGSVhfU0hBUkVEX01BU0sp ID09IEJUUkVFX1BSRUZJWF9SQVcpDQorCQlyZXR1cm4gMDsNCisJcmV0dXJuIHBsYW4uY29kZSAm IEJUUkVFX1BSRUZJWF9TSEFSRURfTUFTSzsNCit9DQorDQorLyoNCisgKiBNYXkgdGhlIGxlYXZl cyBvZiBgaW5kZXgnIGhhdmUgYSBwcmVmaXg/ICBPbmx5IHdoZW4gdGhlIHByZWZpeF9jb21wcmVz c2lvbg0KKyAqIHJlbG9wdGlvbiBpcyBvbiBhbmQgdGhlIGZpcnN0IGtleSBjb2x1bW4gaXMgb2Yg YSB2YXJsZW5hIHR5cGUuDQorICovDQorYm9vbA0KK19idF9wcmVmaXhfZW5hYmxlZChSZWxhdGlv biBpbmRleCkNCit7DQorCXJldHVybiBCVEdldFByZWZpeENvbXByZXNzaW9uKGluZGV4KSAmJg0K KwkJVHVwbGVEZXNjQXR0cihSZWxhdGlvbkdldERlc2NyKGluZGV4KSwgMCktPmF0dGxlbiA9PSAt MTsNCit9DQorDQorLyoNCisgKiBDaG9vc2UgdGhlIHByZWZpeCBmb3IgYSBsZWFmIGFib3V0IHRv IGJlIGJ1aWx0IGZyb20gdGhlIGBuJyB0dXBsZXMgYGl0ZW1zJywNCisgKiBpbiBrZXkgb3JkZXI6 IHRoZSBmaXJzdCB0dXBsZSdzIGZpcnN0LWNvbHVtbiBieXRlcywgY3V0IHRvIHRoZSBsb25nZXN0 IHJ1bg0KKyAqIGFueSBsYXRlciB0dXBsZSBzaGFyZXMsIHByb3ZpZGVkIHRoZSB0dXBsZXMgc2hh cmUgYXQgbGVhc3QNCisgKiBCVFJFRV9QUkVGSVhfTUlOX1NIQVJFRCBieXRlcyBvZiBpdCBvbiBh dmVyYWdlLiAgUmV0dXJucyB0aGUgcHJlZml4J3MNCisgKiBsZW5ndGgsIHdpdGggKnByZWZpeCBw b2ludGluZyBpbnRvIGl0ZW1zWzBdLCBvciAwIGZvciBubyBwcmVmaXguDQorICovDQorU2l6ZQ0K K19idF9wcmVmaXhfY2hvb3NlKFJlbGF0aW9uIGluZGV4LCBJbmRleFR1cGxlICppdGVtcywgaW50 IG4sDQorCQkJCSAgY29uc3QgY2hhciAqKnByZWZpeCkNCit7DQorCWNvbnN0IGNoYXIgKmNhbmQ7 DQorCVNpemUJCWNhbmRsZW47DQorCVNpemUJCWxvbmdlc3QgPSAwOw0KKwlTaXplCQl0b3RhbCA9 IDA7DQorCWludAkJCW5jb2RlZCA9IDA7DQorDQorCWlmICghX2J0X3ByZWZpeF9lbmFibGVkKGlu ZGV4KSB8fA0KKwkJKGNhbmQgPSBfYnRfcHJlZml4X2NhbmRpZGF0ZShpdGVtc1swXSwgJmNhbmRs ZW4pKSA9PSBOVUxMKQ0KKwkJcmV0dXJuIDA7DQorCWlmIChuID09IDEpDQorCXsNCisJCSpwcmVm aXggPSBjYW5kOw0KKwkJcmV0dXJuIGNhbmRsZW47DQorCX0NCisJZm9yIChpbnQgaSA9IDE7IGkg PCBuOyBpKyspDQorCXsNCisJCWludAkJCXNoYXJlZCA9IF9idF9wcmVmaXhfc2hhcmVkKGNhbmQs IGNhbmRsZW4sIGl0ZW1zW2ldKTsNCisNCisJCWlmIChzaGFyZWQgPCAwKQ0KKwkJCWNvbnRpbnVl Ow0KKwkJdG90YWwgKz0gc2hhcmVkOw0KKwkJbmNvZGVkKys7DQorCQlsb25nZXN0ID0gTWF4KGxv bmdlc3QsIChTaXplKSBzaGFyZWQpOw0KKwl9DQorCWlmIChsb25nZXN0ID09IDAgfHwgdG90YWwg PCAoU2l6ZSkgQlRSRUVfUFJFRklYX01JTl9TSEFSRUQgKiBuY29kZWQpDQorCQlyZXR1cm4gMDsN CisJKnByZWZpeCA9IGNhbmQ7DQorCXJldHVybiBsb25nZXN0Ow0KK30NCisNCisvKg0KKyAqIEZh dWx0IGEgZnJlc2hseSBmaW5pc2hlZCBsZWFmIGBwYWdlJyBmb3J3YXJkIGludG8gdGhlIEJUUF9Q UkVGSVggZm9ybWF0IGlmDQorICogYSBwcmVmaXggcGF5cyBvZmYgKFN0cmF0ZWd5IDE6IGNvbXBy ZXNzIGEgcGFnZSBvbmx5IHdoZW4gaXQgaXMgd3JpdHRlbiBhcyBhDQorICogd2hvbGUgLS0gQ1JF QVRFIElOREVYIHBhZ2UgZmluaXNoLCBhIHNwbGl0IGhhbGYsIGEgZGVkdXAgcmV3cml0ZSAtLSBz byB0aGF0DQorICogbm8gaW5zZXJ0LCBWQUNVVU0gb3Iga2V5LXJhbmdlIGNoYW5nZSBldmVyIGZv cmNlcyBhIHBhZ2UgcmV3cml0ZSwgYW5kIGFuDQorICogb2xkLWZvcm1hdCBwYWdlIGlzIGNvbnZl cnRlZCBvbmx5IHdoZW4gaXQgaXMgbmV4dCB3cml0dGVuIHdob2xlKS4NCisgKg0KKyAqIE9uIGVu dHJ5IGBwYWdlJyBpcyBhIGNvbXBsZXRlIGxlYWY6IGl0cyBoaWdoIGtleSBhdCBQX0hJS0VZIGlm IGl0IGlzIG5vdA0KKyAqIHJpZ2h0bW9zdCwgdGhlbiBpdHMgZGF0YSBpdGVtcywgbm9uZSBvZiB0 aGVtIGNvZGVkICh0aGUgcGFnZSBkb2VzIG5vdCB5ZXQNCisgKiBoYXZlIEJUUF9QUkVGSVgpLiAg SWYgdGhlIGRhdGEgaXRlbXMgc2hhcmUgZW5vdWdoIG9mIGEgY29tbW9uIGZpcnN0LWNvbHVtbg0K KyAqIHByZWZpeCwgdGhlIHBhZ2UgaXMgcmVidWlsdCBpbiBwbGFjZSB3aXRoIHRoZSBQUkVGSVgg aXRlbSBpbnNlcnRlZCBhZnRlcg0KKyAqIHRoZSBoaWdoIGtleSBhbmQgZXZlcnkgZGF0YSBpdGVt IGNvZGVkIGFnYWluc3QgaXQ7IG90aGVyd2lzZSB0aGUgcGFnZSBpcw0KKyAqIGxlZnQgdW5jaGFu Z2VkLiAgSXRlbSBvcmRlciBhbmQgdGhlIGhpZ2gga2V5IGFyZSBwcmVzZXJ2ZWQuDQorICoNCisg KiBDYWxsZXIgbXVzdCBob2xkIHRoZSBwYWdlJ3MgYnVmZmVyIGV4Y2x1c2l2ZWx5IChvciBvd24g dGhlIHBhZ2Ugb3V0cmlnaHQsDQorICogYXMgdGhlIGJ1aWxkIGFuZCBzcGxpdCBwYXRocyBkbyB3 aXRoIGEgdGVtcCBwYWdlKS4gIE5vIFdBTCBpcyB3cml0dGVuIGhlcmU6DQorICogY2FsbGVycyBs b2cgdGhlIHJlc3VsdGluZyBwYWdlIChhIGJ1aWxkIHdyaXRlcyBpdCB3aG9sZTsgYSBzcGxpdCBs b2dzIGVhY2gNCisgKiBoYWxmIHdob2xlIG9yIGJ5IGZ1bGwtcGFnZSBpbWFnZSksIGFuZCByZWRv IHJlYWNoZXMgdGhlIHNhbWUgYnl0ZXMgYnkNCisgKiBydW5uaW5nIF9idF9wcmVmaXhfZW5jb2Rl IGFnYWluc3QgdGhlIHNhbWUgcHJlZml4Lg0KKyAqLw0KK3ZvaWQNCitfYnRfcHJlZml4X2NvbXBy ZXNzX3BhZ2UoUmVsYXRpb24gaW5kZXgsIFBhZ2UgcGFnZSkNCit7DQorCUJUUGFnZU9wYXF1ZSBv cGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7DQorCU9mZnNldE51bWJlciBtaW5vZmY7DQor CU9mZnNldE51bWJlciBtYXhvZmY7DQorCWludAkJCW47DQorCUluZGV4VHVwbGUgKml0ZW1zOw0K KwlTaXplCQlwcmVmaXhsZW47DQorCWNvbnN0IGNoYXIgKnByZWZpeDsNCisJUGFnZQkJdG1wOw0K KwlPZmZzZXROdW1iZXIgbzsNCisJSW5kZXhUdXBsZQloaWtleSA9IE5VTEw7DQorCVNpemUJCWhp a2V5c3ogPSAwOw0KKw0KKwlBc3NlcnQoUF9JU0xFQUYob3BhcXVlKSAmJiAhUF9IQVNQUkVGSVgo b3BhcXVlKSk7DQorDQorCWlmICghX2J0X3ByZWZpeF9lbmFibGVkKGluZGV4KSkNCisJCXJldHVy bjsNCisNCisJbWlub2ZmID0gUF9GSVJTVERBVEFLRVkob3BhcXVlKTsNCisJbWF4b2ZmID0gUGFn ZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsNCisJbiA9IChpbnQpIG1heG9mZiAtIChpbnQpIG1p bm9mZiArIDE7DQorCWlmIChuIDw9IDApDQorCQlyZXR1cm47DQorDQorCWl0ZW1zID0gKEluZGV4 VHVwbGUgKikgcGFsbG9jKG4gKiBzaXplb2YoSW5kZXhUdXBsZSkpOw0KKwlmb3IgKGludCBpID0g MDsgaSA8IG47IGkrKykNCisJCWl0ZW1zW2ldID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBh Z2UsDQorCQkJCQkJCQkJCQlQYWdlR2V0SXRlbUlkKHBhZ2UsIG1pbm9mZiArIGkpKTsNCisNCisJ cHJlZml4bGVuID0gX2J0X3ByZWZpeF9jaG9vc2UoaW5kZXgsIGl0ZW1zLCBuLCAmcHJlZml4KTsN CisJaWYgKHByZWZpeGxlbiA9PSAwKQ0KKwl7DQorCQlwZnJlZShpdGVtcyk7DQorCQlyZXR1cm47 DQorCX0NCisNCisJLyogVGhlIGhpZ2gga2V5IChpZiBhbnkpIHN0YXlzIGF0IFBfSElLRVksIHVu Y29kZWQuICovDQorCWlmICghUF9SSUdIVE1PU1Qob3BhcXVlKSkNCisJew0KKwkJSXRlbUlkCQlo aWkgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIFBfSElLRVkpOw0KKw0KKwkJaGlrZXlzeiA9IEl0ZW1J ZEdldExlbmd0aChoaWkpOw0KKwkJaGlrZXkgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFn ZSwgaGlpKTsNCisJfQ0KKw0KKwkvKg0KKwkgKiBSZWJ1aWxkIGludG8gYSB0ZW1wIHBhZ2U6IGhp Z2gga2V5IChpZiBhbnkpLCBQUkVGSVggaXRlbSwgdGhlbiBlYWNoDQorCSAqIGRhdGEgaXRlbSBj b2RlZC4gIFRoZSBjb2RlZCBmb3JtIGNhbiBiZSB1cCB0byBNQVhBTElHTiBsYXJnZXIgdGhhbiB0 aGUNCisJICogcGxhaW4gb25lLCBidXQgdGhlIFBSRUZJWCBpdGVtIHJlcGxhY2VzIGZhciBtb3Jl IHNoYXJlZCBieXRlcyB0aGFuIGl0DQorCSAqIGFkZHMsIHNvIGEgcGFnZSB0aGF0IHdhcyBub3Qg b3ZlcmZ1bGwgc3RheXMgd2l0aGluIGJvdW5kczsgaWYgYSBjb2RlZA0KKwkgKiBpdGVtIHNvbWVo b3cgZG9lcyBub3QgZml0LCBsZWF2ZSB0aGUgcGFnZSB1bmNvbXByZXNzZWQgKGFsd2F5cyB2YWxp ZCkuDQorCSAqLw0KKwl0bXAgPSBQYWdlR2V0VGVtcFBhZ2VDb3B5U3BlY2lhbChwYWdlKTsNCisJ QlRQYWdlR2V0T3BhcXVlKHRtcCktPmJ0cG9fZmxhZ3MgJj0gfkJUUF9QUkVGSVg7DQorCWlmICho aWtleSAhPSBOVUxMICYmDQorCQlQYWdlQWRkSXRlbSh0bXAsIChjaGFyICopIGhpa2V5LCBoaWtl eXN6LCBQX0hJS0VZLCBmYWxzZSwgZmFsc2UpID09DQorCQlJbnZhbGlkT2Zmc2V0TnVtYmVyKQ0K KwkJZ290byBnaXZldXA7DQorCV9idF9wYWdlX3NldF9wcmVmaXgodG1wLCBwcmVmaXgsIHByZWZp eGxlbik7DQorCW8gPSBPZmZzZXROdW1iZXJOZXh0KFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIodG1w KSk7DQorCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQ0KKwl7DQorCQlJbmRleFR1cGxlCWNv ZGVkID0gX2J0X3ByZWZpeF9lbmNvZGUodG1wLCBpdGVtc1tpXSk7DQorCQlib29sCQlvazsNCisN CisJCW9rID0gUGFnZUFkZEl0ZW0odG1wLCAoY2hhciAqKSBjb2RlZCwgSW5kZXhUdXBsZVNpemUo Y29kZWQpLCBvKyssDQorCQkJCQkJIGZhbHNlLCBmYWxzZSkgIT0gSW52YWxpZE9mZnNldE51bWJl cjsNCisJCWlmIChjb2RlZCAhPSBpdGVtc1tpXSkNCisJCQlwZnJlZShjb2RlZCk7DQorCQlpZiAo IW9rKQ0KKwkJCWdvdG8gZ2l2ZXVwOw0KKwl9DQorDQorCW1lbWNweShwYWdlLCB0bXAsIEJMQ0tT Wik7DQorCXBmcmVlKHRtcCk7DQorCXBmcmVlKGl0ZW1zKTsNCisJcmV0dXJuOw0KKw0KK2dpdmV1 cDoNCisJcGZyZWUodG1wKTsNCisJcGZyZWUoaXRlbXMpOw0KK30NCisNCisvKg0KKyAqIExheSBv dXQgb25lIGhhbGYgb2YgYSBsZWFmIHNwbGl0IG9uIGBwYWdlJywgd2hpY2ggdGhlIGNhbGxlciBo YXMNCisgKiBpbml0aWFsaXplZCAoZmxhZ3MsIGxpbmtzKSBhbmQgbGVmdCBlbXB0eTogdGhlIGhp Z2gga2V5IGBoaWtleScgKE5VTEwgZm9yDQorICogYSByaWdodG1vc3QgaGFsZiksIHRoZW4gdGhl IGBuJyBwbGFpbiB0dXBsZXMgYGl0ZW1zJyBpbiBrZXkgb3JkZXIuDQorICoNCisgKiBUaGUgaGFs ZiBpcyBmb3JtZWQgYXMgYSB3aG9sZSwgc28gaXQgbWF5IHRha2UgYSBwcmVmaXggb2YgaXRzIG93 bjogaXRzDQorICogZmlyc3QgaXRlbSdzIGxlYWRpbmcgYnl0ZXMsIGlmIHRoZSBpdGVtcyBzaGFy ZSBlbm91Z2ggKF9idF9wcmVmaXhfY2hvb3NlKS4NCisgKiBCZWNhdXNlIGEgcHJlZml4LWNvbXBy ZXNzZWQgbGVhZiBjYW4gaG9sZCBtb3JlIGxvZ2ljYWwgZGF0YSB0aGFuIGZpdHMgaW4gYQ0KKyAq IHBsYWluIHBhZ2UsIHRoZSBoYWxmIGlzIGxhaWQgb3V0IGNvZGVkIGZyb20gdGhlIHN0YXJ0IHJh dGhlciB0aGFuIGJ1aWx0DQorICogcGxhaW4gYW5kIGNvbXByZXNzZWQgYWZ0ZXJ3YXJkcy4gIFdo ZW4gdGhlIGhhbGYgZG9lcyBub3QgZml0IHdpdGggaXRzIG93bg0KKyAqIHByZWZpeCAob3Igc2hh cmVzIHRvbyBsaXR0bGUgdG8gdGFrZSBvbmUpIGl0IGlzIGxhaWQgb3V0IHBsYWluLCBhbmQgaWYg dGhhdA0KKyAqIGRvZXMgbm90IGZpdCBlaXRoZXIsIHdpdGggYG9yaWdwcmVmaXgnICh0aGUgc3Bs aXR0aW5nIHBhZ2UncyBwcmVmaXgsIHplcm8NCisgKiBsZW5ndGggd2hlbiBpdCBoYWQgbm9uZSks IGFnYWluc3Qgd2hpY2ggaXQgZml0cyBieSBjb25zdHJ1Y3Rpb246IHRoZSBpdGVtcw0KKyAqIGtl ZXAgdGhlIHNoYXJlcyB0aGV5IGhhZCBvbiB0aGUgb3JpZ2luYWwgcGFnZS4NCisgKg0KKyAqIE1p cnJvcnMgQkFSSydzIGJhcmtfc3BsaXRfbGVhZl9oYWxmLiAgQ2FsbGVyczogX2J0X3NwbGl0IChi b3RoIGhhbHZlcykuDQorICovDQordm9pZA0KK19idF9zcGxpdF9sZWFmX2hhbGYoUmVsYXRpb24g aW5kZXgsIFBhZ2UgcGFnZSwgSW5kZXhUdXBsZSBoaWtleSwNCisJCQkJCUluZGV4VHVwbGUgKml0 ZW1zLCBpbnQgbiwNCisJCQkJCWNvbnN0IGNoYXIgKm9yaWdwcmVmaXgsIFNpemUgb3JpZ3ByZWZp eGxlbiwNCisJCQkJCWNoYXIgKmNob3NlbnByZWZpeCwgU2l6ZSAqY2hvc2VucHJlZml4bGVuKQ0K K3sNCisJQlRQYWdlT3BhcXVlRGF0YSBzYXZlZCA9ICpCVFBhZ2VHZXRPcGFxdWUocGFnZSk7DQor CWNvbnN0IGNoYXIgKnByZWZpeFszXTsNCisJU2l6ZQkJcHJlZml4bGVuWzNdOw0KKwlpbnQJCQlu dHJpZXMgPSAwOw0KKw0KKwlBc3NlcnQoUF9JU0xFQUYoJnNhdmVkKSAmJiAhUF9IQVNQUkVGSVgo JnNhdmVkKSk7DQorDQorCS8qIENhbmRpZGF0ZSBwcmVmaXhlcyB0byB0cnksIGluIG9yZGVyOiBv d24sIG5vbmUsIHRoZSBvcmlnIHBhZ2Uncy4gKi8NCisJaWYgKF9idF9wcmVmaXhfZW5hYmxlZChp bmRleCkpDQorCXsNCisJCXByZWZpeGxlbltudHJpZXNdID0gX2J0X3ByZWZpeF9jaG9vc2UoaW5k ZXgsIGl0ZW1zLCBuLCAmcHJlZml4W250cmllc10pOw0KKwkJaWYgKHByZWZpeGxlbltudHJpZXNd ID4gMCkNCisJCQludHJpZXMrKzsNCisJfQ0KKwlwcmVmaXhbbnRyaWVzXSA9IE5VTEw7DQorCXBy ZWZpeGxlbltudHJpZXMrK10gPSAwOw0KKwlpZiAob3JpZ3ByZWZpeGxlbiA+IDApDQorCXsNCisJ CXByZWZpeFtudHJpZXNdID0gb3JpZ3ByZWZpeDsNCisJCXByZWZpeGxlbltudHJpZXMrK10gPSBv cmlncHJlZml4bGVuOw0KKwl9DQorDQorCWZvciAoaW50IHQgPSAwOyB0IDwgbnRyaWVzOyB0Kysp DQorCXsNCisJCWlmIChfYnRfc3BsaXRfbGVhZl9sYXlvdXQocGFnZSwgaGlrZXksIGl0ZW1zLCBu LCBwcmVmaXhbdF0sIHByZWZpeGxlblt0XSkpDQorCQl7DQorCQkJLyogUmVwb3J0IHRoZSBwcmVm aXggdGhhdCB3b24sIHNvIHRoZSBzcGxpdCBjYW4gbG9nIGl0IGZvciByZWRvLiAqLw0KKwkJCWlm IChjaG9zZW5wcmVmaXhsZW4gIT0gTlVMTCkNCisJCQl7DQorCQkJCSpjaG9zZW5wcmVmaXhsZW4g PSBwcmVmaXhsZW5bdF07DQorCQkJCWlmIChwcmVmaXhsZW5bdF0gPiAwKQ0KKwkJCQkJbWVtY3B5 KGNob3NlbnByZWZpeCwgcHJlZml4W3RdLCBwcmVmaXhsZW5bdF0pOw0KKwkJCX0NCisJCQlyZXR1 cm47DQorCQl9DQorCQkvKiByZXN0b3JlIHRoZSBlbXB0eS1wYWdlIHN0YXRlIGZvciB0aGUgbmV4 dCBhdHRlbXB0ICovDQorCQlfYnRfcGFnZWluaXQocGFnZSwgQkxDS1NaKTsNCisJCSpCVFBhZ2VH ZXRPcGFxdWUocGFnZSkgPSBzYXZlZDsNCisJfQ0KKwllbG9nKEVSUk9SLCAiZmFpbGVkIHRvIGxh eSBvdXQgYSBzcGxpdCBoYWxmIG9mIGluZGV4IFwiJXNcIiIsDQorCQkgUmVsYXRpb25HZXRSZWxh dGlvbk5hbWUoaW5kZXgpKTsNCit9DQorDQorLyoNCisgKiBMYXkgb3V0IG9uZSBsZWFmIHNwbGl0 IGhhbGYgb24gdGhlIGNhbGxlci1pbml0aWFsaXplZCBlbXB0eSBgcGFnZScgdXNpbmcgYQ0KKyAq IEdJVkVOIHByZWZpeCAoYHByZWZpeGxlbicgMCBmb3Igbm9uZSk6IHRoZSBoaWdoIGtleSBgaGlr ZXknIChOVUxMIGZvciBhDQorICogcmlnaHRtb3N0IGhhbGYpLCB0aGUgUFJFRklYIGl0ZW0sIHRo ZW4gdGhlIGBuJyBwbGFpbiB0dXBsZXMgYGl0ZW1zJyBjb2RlZA0KKyAqIGFnYWluc3QgdGhlIHBy ZWZpeC4gIFJldHVybnMgZmFsc2UgaWYgdGhleSBkbyBub3QgZml0IChjYWxsZXIgdHJpZXMgYW5v dGhlcg0KKyAqIHByZWZpeCkuICBUaGlzIGlzIFJlbGF0aW9uLWZyZWUgYW5kIGRldGVybWluaXN0 aWMgaW4gKGhpa2V5LCBpdGVtcywgcHJlZml4KSwNCisgKiBzbyBXQUwgcmVkbyBjYWxscyBpdCB3 aXRoIHRoZSBsb2dnZWQgcHJlZml4IHRvIHJlcHJvZHVjZSB0aGUgcHJpbWFyeSdzIHBhZ2UNCisg KiBieXRlIGZvciBieXRlLg0KKyAqLw0KK2Jvb2wNCitfYnRfc3BsaXRfbGVhZl9sYXlvdXQoUGFn ZSBwYWdlLCBJbmRleFR1cGxlIGhpa2V5LCBJbmRleFR1cGxlICppdGVtcywgaW50IG4sDQorCQkJ CQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBwcmVmaXhsZW4pDQorew0KKwlPZmZzZXROdW1i ZXIgbyA9IFBfSElLRVk7DQorCWJvb2wJCWZpdCA9IHRydWU7DQorDQorCUFzc2VydChQX0lTTEVB RihCVFBhZ2VHZXRPcGFxdWUocGFnZSkpICYmICFQX0hBU1BSRUZJWChCVFBhZ2VHZXRPcGFxdWUo cGFnZSkpKTsNCisJaWYgKGhpa2V5ICE9IE5VTEwgJiYNCisJCVBhZ2VBZGRJdGVtKHBhZ2UsIChj aGFyICopIGhpa2V5LCBNQVhBTElHTihJbmRleFR1cGxlU2l6ZShoaWtleSkpLA0KKwkJCQkJbysr LCBmYWxzZSwgZmFsc2UpID09IEludmFsaWRPZmZzZXROdW1iZXIpDQorCQlyZXR1cm4gZmFsc2U7 DQorCWlmIChwcmVmaXhsZW4gPiAwKQ0KKwl7DQorCQlfYnRfcGFnZV9zZXRfcHJlZml4KHBhZ2Us IHByZWZpeCwgcHJlZml4bGVuKTsNCisJCW8rKzsNCisJfQ0KKwlmb3IgKGludCBpID0gMDsgaSA8 IG47IGkrKykNCisJew0KKwkJSW5kZXhUdXBsZQljb2RlZCA9IF9idF9wcmVmaXhfZW5jb2RlKHBh Z2UsIGl0ZW1zW2ldKTsNCisNCisJCWlmIChQYWdlQWRkSXRlbShwYWdlLCAoY2hhciAqKSBjb2Rl ZCwgSW5kZXhUdXBsZVNpemUoY29kZWQpLA0KKwkJCQkJCW8rKywgZmFsc2UsIGZhbHNlKSA9PSBJ bnZhbGlkT2Zmc2V0TnVtYmVyKQ0KKwkJCWZpdCA9IGZhbHNlOw0KKwkJaWYgKGNvZGVkICE9IGl0 ZW1zW2ldKQ0KKwkJCXBmcmVlKGNvZGVkKTsNCisJCWlmICghZml0KQ0KKwkJCXJldHVybiBmYWxz ZTsNCisJfQ0KKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HDQorCWlmIChQX0hBU1BSRUZJWChC VFBhZ2VHZXRPcGFxdWUocGFnZSkpKQ0KKwl7DQorCQlPZmZzZXROdW1iZXIgbXggPSBQYWdlR2V0 TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOw0KKwkJT2Zmc2V0TnVtYmVyIG9mZjsNCisNCisJCWZvciAo b2ZmID0gUF9GSVJTVERBVEFLRVkoQlRQYWdlR2V0T3BhcXVlKHBhZ2UpKTsgb2ZmIDw9IG14OyBv ZmYrKykNCisJCXsNCisJCQlCVEl0ZW1CdWYJdmI7DQorDQorCQkJKHZvaWQpIF9idF9nZXRpdGVt KHBhZ2UsIG9mZiwgJnZiKTsNCisJCX0NCisJfQ0KKyNlbmRpZg0KKwlyZXR1cm4gdHJ1ZTsNCit9 DQorDQorLyoNCisgKiBDb2xsZWN0IHRoZSBwbGFpbiAoZGVjb2RlZCkgZGF0YSBpdGVtcyBvZiBh IGxlYWYgc3BsaXQgaW50byB0aGUgbGVmdCBhbmQNCisgKiByaWdodCBhcnJheXMsIGluIHRoZSBl eGFjdCBvcmRlciBhbmQgd2l0aCB0aGUgZXhhY3Qgc3Vic3RpdHV0aW9ucyB0aGF0IHRoZQ0KKyAq IHNwbGl0IHBlcmZvcm1zOiB0aGUgb3JpZ2luYWwgcGFnZSdzIGRhdGEgaXRlbXMgc3BsaXQgYXQg YGZpcnN0cmlnaHRvZmYnLA0KKyAqIHdpdGggYG5ld2l0ZW0nIGluc2VydGVkIGF0IGBuZXdpdGVt b2ZmJyBvbiB0aGUgc2lkZSBnaXZlbiBieSBgbmV3aXRlbW9ubGVmdCcNCisgKiBhbmQsIGZvciBh IHBvc3RpbmctbGlzdCBzcGxpdCwgdGhlIHBvc3RpbmcgYXQgYG9yaWdwYWdlcG9zdGluZ29mZicg cmVwbGFjZWQNCisgKiBieSBgbnBvc3RpbmcnLiAgYG9yaWdwYWdlJyBpcyB0aGUgcHJlLXNwbGl0 IHBhZ2UgKGl0cyBpdGVtcyBhcmUgZGVjb2RlZCB3aGVuDQorICogaXQgaXMgYSBCVFBfUFJFRklY IHBhZ2UpLiAgVGhlIGFycmF5cyByZWNlaXZlIHBvaW50ZXJzIHRoYXQgYXJlIHZhbGlkIHVudGls DQorICogdGhlIGNhbGxlciBpcyBkb25lIGxheWluZyBvdXQgdGhlIGhhbHZlczsgaXRlbXMgdGFr ZW4gZnJvbSB0aGUgcGFnZSBhcmUNCisgKiBjb3BpZWQsIHNvIHRoZSBjYWxsZXIgb3ducyBhbmQg c2hvdWxkIHJlc2V0IHRoZSBzdXJyb3VuZGluZyBtZW1vcnkgY29udGV4dC4NCisgKg0KKyAqIEJv dGggdGhlIHByaW1hcnkgKF9idF9zcGxpdCkgYW5kIFdBTCByZWRvIChidHJlZV94bG9nX3NwbGl0 KSBjb2xsZWN0IGl0ZW1zDQorICogdGhpcyB3YXkgYW5kIHRoZW4gbGF5IG91dCBlYWNoIGhhbGYg d2l0aCBfYnRfc3BsaXRfbGVhZl9oYWxmLCBzbyB0aGUgdHdvDQorICogcHJvZHVjZSBieXRlLWlk ZW50aWNhbCBjb2RlZCBwYWdlcyB3aXRob3V0IGxvZ2dpbmcgYSBmdWxsLXBhZ2UgaW1hZ2UuDQor ICovDQordm9pZA0KK19idF9zcGxpdF9sZWFmX2NvbGxlY3QoUGFnZSBvcmlncGFnZSwgT2Zmc2V0 TnVtYmVyIGZpcnN0cmlnaHRvZmYsDQorCQkJCQkgICBPZmZzZXROdW1iZXIgbmV3aXRlbW9mZiwg SW5kZXhUdXBsZSBuZXdpdGVtLA0KKwkJCQkJICAgYm9vbCBuZXdpdGVtb25sZWZ0LCBPZmZzZXRO dW1iZXIgb3JpZ3BhZ2Vwb3N0aW5nb2ZmLA0KKwkJCQkJICAgSW5kZXhUdXBsZSBucG9zdGluZywN CisJCQkJCSAgIEluZGV4VHVwbGUgKmxlZnRpdGVtcywgaW50ICpubGVmdCwNCisJCQkJCSAgIElu ZGV4VHVwbGUgKnJpZ2h0aXRlbXMsIGludCAqbnJpZ2h0KQ0KK3sNCisJQlRQYWdlT3BhcXVlIG9v cGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUob3JpZ3BhZ2UpOw0KKwlPZmZzZXROdW1iZXIgbWF4b2Zm ID0gUGFnZUdldE1heE9mZnNldE51bWJlcihvcmlncGFnZSk7DQorCWJvb2wJCWhhc3ByZWZpeCA9 IFBfSEFTUFJFRklYKG9vcGFxdWUpOw0KKwlPZmZzZXROdW1iZXIgaTsNCisNCisJKm5sZWZ0ID0g MDsNCisJKm5yaWdodCA9IDA7DQorCWZvciAoaSA9IFBfRklSU1REQVRBS0VZKG9vcGFxdWUpOyBp IDw9IG1heG9mZjsgaSA9IE9mZnNldE51bWJlck5leHQoaSkpDQorCXsNCisJCUl0ZW1JZAkJaXRl bWlkID0gUGFnZUdldEl0ZW1JZChvcmlncGFnZSwgaSk7DQorCQlJbmRleFR1cGxlCWRhdGFpdGVt ID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKG9yaWdwYWdlLCBpdGVtaWQpOw0KKwkJQlRJdGVt QnVmCWRpYnVmOw0KKw0KKwkJaWYgKGhhc3ByZWZpeCkNCisJCQlkYXRhaXRlbSA9IF9idF9wcmVm aXhfZGVjb2RlKG9yaWdwYWdlLCBkYXRhaXRlbSwgJmRpYnVmKTsNCisNCisJCWlmIChpID09IG9y aWdwYWdlcG9zdGluZ29mZikNCisJCQlkYXRhaXRlbSA9IG5wb3N0aW5nOw0KKwkJZWxzZSBpZiAo aSA9PSBuZXdpdGVtb2ZmKQ0KKwkJew0KKwkJCWlmIChuZXdpdGVtb25sZWZ0KQ0KKwkJCQlsZWZ0 aXRlbXNbKCpubGVmdCkrK10gPSBuZXdpdGVtOw0KKwkJCWVsc2UNCisJCQkJcmlnaHRpdGVtc1so Km5yaWdodCkrK10gPSBuZXdpdGVtOw0KKwkJfQ0KKw0KKwkJaWYgKGkgPCBmaXJzdHJpZ2h0b2Zm KQ0KKwkJCWxlZnRpdGVtc1soKm5sZWZ0KSsrXSA9IENvcHlJbmRleFR1cGxlKGRhdGFpdGVtKTsN CisJCWVsc2UNCisJCQlyaWdodGl0ZW1zWygqbnJpZ2h0KSsrXSA9IENvcHlJbmRleFR1cGxlKGRh dGFpdGVtKTsNCisJfQ0KKwlpZiAoaSA8PSBuZXdpdGVtb2ZmKQ0KKwkJcmlnaHRpdGVtc1soKm5y aWdodCkrK10gPSBuZXdpdGVtOw0KK30NCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idHJlYWRwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRw YWdlLmMNCmluZGV4IDU1NzIyZmQ4NzkxLi5mZmM1ODQ2ZTRjOSAxMDA2NDQNCi0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYw0KKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jDQpAQCAtMTQ1LDYgKzE0NSw4IEBAIF9idF9yZWFkcGFn ZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2Zm bnVtLA0KIAkJCQlpZ25vcmVfa2lsbGVkX3R1cGxlcyA9IHNjYW4tPmlnbm9yZV9raWxsZWRfdHVw bGVzOw0KIAlpbnQJCQlpdGVtSW5kZXgsDQogCQkJCWluZG5hdHRzOw0KKwlCVEl0ZW1CdWYJaXR1 cGJ1ZjsJCQkvKiBkZWNvZGUgd29ya3NwYWNlIGZvciBhIGxvb3AncyBjdXJyZW50IGl0ZW0gKi8N CisJQlRJdGVtQnVmCWZpbmFsYnVmOwkJLyogZGVjb2RlIHdvcmtzcGFjZSBmb3IgYSBiYWNrd2Fy ZCBmaW5hbHR1cCAqLw0KIA0KIAkvKiBzYXZlIHRoZSBwYWdlL2J1ZmZlciBibG9jayBudW1iZXIs IGFsb25nIHdpdGggaXRzIHNpYmxpbmcgbGlua3MgKi8NCiAJcGFnZSA9IEJ1ZmZlckdldFBhZ2Uo c28tPmN1cnJQb3MuYnVmKTsNCkBAIC0yNTIsNyArMjU0LDcgQEAgX2J0X3JlYWRwYWdlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sDQog CQkJCWNvbnRpbnVlOw0KIAkJCX0NCiANCi0JCQlpdHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJ dGVtKHBhZ2UsIGlpZCk7DQorCQkJaXR1cCA9IF9idF9nZXRpdGVtKHBhZ2UsIG9mZm51bSwgJml0 dXBidWYpOw0KIAkJCUFzc2VydCghQlRyZWVUdXBsZUlzUGl2b3QoaXR1cCkpOw0KIA0KIAkJCXBz dGF0ZS5vZmZudW0gPSBvZmZudW07DQpAQCAtMzUzLDkgKzM1NSw3IEBAIF9idF9yZWFkcGFnZShJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVt LA0KIAkJew0KIAkJCWlmIChtaW5vZmYgPD0gbWF4b2ZmICYmICFQX0xFRlRNT1NUKG9wYXF1ZSkp DQogCQkJew0KLQkJCQlJdGVtSWQJCWlpZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgbWlub2ZmKTsN Ci0NCi0JCQkJcHN0YXRlLmZpbmFsdHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2Us IGlpZCk7DQorCQkJCXBzdGF0ZS5maW5hbHR1cCA9IF9idF9nZXRpdGVtKHBhZ2UsIG1pbm9mZiwg JmZpbmFsYnVmKTsNCiANCiAJCQkJaWYgKHVubGlrZWx5KHNvLT5zY2FuQmVoaW5kKSAmJg0KIAkJ CQkJIV9idF9zY2FuYmVoaW5kX2NoZWNra2V5cyhzY2FuLCBkaXIsIHBzdGF0ZS5maW5hbHR1cCkp DQpAQCAtNDE1LDcgKzQxNSw3IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLA0KIAkJCWVsc2UNCiAJCQkJdHVw bGVfYWxpdmUgPSB0cnVlOw0KIA0KLQkJCWl0dXAgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0o cGFnZSwgaWlkKTsNCisJCQlpdHVwID0gX2J0X2dldGl0ZW0ocGFnZSwgb2ZmbnVtLCAmaXR1cGJ1 Zik7DQogCQkJQXNzZXJ0KCFCVHJlZVR1cGxlSXNQaXZvdChpdHVwKSk7DQogDQogCQkJcHN0YXRl Lm9mZm51bSA9IG9mZm51bTsNCkBAIC01OTYsOSArNTk2LDEwIEBAIF9idF9zZXRfc3RhcnRpa2V5 KEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRSZWFkUGFnZVN0YXRlICpwc3RhdGUpDQogCUJUU2Nhbk9w YXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsNCiAJUmVsYXRpb24JcmVsID0g c2Nhbi0+aW5kZXhSZWxhdGlvbjsNCiAJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERl c2NyKHJlbCk7DQotCUl0ZW1JZAkJaWlkOw0KIAlJbmRleFR1cGxlCWZpcnN0dHVwLA0KIAkJCQls YXN0dHVwOw0KKwlCVEl0ZW1CdWYJZmlyc3RidWYsDQorCQkJCWxhc3RidWY7DQogCWludAkJCXN0 YXJ0aWtleSA9IDAsDQogCQkJCWFycmF5aWR4ID0gMCwNCiAJCQkJZmlyc3RjaGFuZ2luZ2F0dG51 bTsNCkBAIC02MTYsMTIgKzYxNywxMCBAQCBfYnRfc2V0X3N0YXJ0aWtleShJbmRleFNjYW5EZXNj IHNjYW4sIEJUUmVhZFBhZ2VTdGF0ZSAqcHN0YXRlKQ0KIAkJcmV0dXJuOw0KIA0KIAkvKiBtaW5v ZmYgaXMgYW4gb2Zmc2V0IHRvIHRoZSBsb3dlc3Qgbm9uLXBpdm90IHR1cGxlIG9uIHRoZSBwYWdl ICovDQotCWlpZCA9IFBhZ2VHZXRJdGVtSWQocHN0YXRlLT5wYWdlLCBwc3RhdGUtPm1pbm9mZik7 DQotCWZpcnN0dHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBzdGF0ZS0+cGFnZSwgaWlk KTsNCisJZmlyc3R0dXAgPSBfYnRfZ2V0aXRlbShwc3RhdGUtPnBhZ2UsIHBzdGF0ZS0+bWlub2Zm LCAmZmlyc3RidWYpOw0KIA0KIAkvKiBtYXhvZmYgaXMgYW4gb2Zmc2V0IHRvIHRoZSBoaWdoZXN0 IG5vbi1waXZvdCB0dXBsZSBvbiB0aGUgcGFnZSAqLw0KLQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBz dGF0ZS0+cGFnZSwgcHN0YXRlLT5tYXhvZmYpOw0KLQlsYXN0dHVwID0gKEluZGV4VHVwbGUpIFBh Z2VHZXRJdGVtKHBzdGF0ZS0+cGFnZSwgaWlkKTsNCisJbGFzdHR1cCA9IF9idF9nZXRpdGVtKHBz dGF0ZS0+cGFnZSwgcHN0YXRlLT5tYXhvZmYsICZsYXN0YnVmKTsNCiANCiAJLyogRGV0ZXJtaW5l IHRoZSBmaXJzdCBhdHRyaWJ1dGUgd2hvc2UgdmFsdWVzIGNoYW5nZSBvbiBjYWxsZXIncyBwYWdl ICovDQogCWZpcnN0Y2hhbmdpbmdhdHRudW0gPSBfYnRfa2VlcF9uYXR0c19mYXN0KHJlbCwgZmly c3R0dXAsIGxhc3R0dXApOw0KQEAgLTIwNTMsNiArMjA1Miw3IEBAIF9idF9jaGVja2tleXNfbG9v a19haGVhZChJbmRleFNjYW5EZXNjIHNjYW4sIEJUUmVhZFBhZ2VTdGF0ZSAqcHN0YXRlLA0KIAlT Y2FuRGlyZWN0aW9uIGRpciA9IHBzdGF0ZS0+ZGlyOw0KIAlPZmZzZXROdW1iZXIgYWhlYWRvZmZu dW07DQogCUluZGV4VHVwbGUJYWhlYWQ7DQorCUJUSXRlbUJ1ZglhaGVhZGJ1ZjsJCS8qIGRlY29k ZSB3b3Jrc3BhY2UgZm9yIHRoZSBsb29rLWFoZWFkIHR1cGxlICovDQogDQogCUFzc2VydCghcHN0 YXRlLT5mb3JjZW5vbnJlcXVpcmVkKTsNCiANCkBAIC0yMDg4LDggKzIwODgsNyBAQCBfYnRfY2hl Y2trZXlzX2xvb2tfYWhlYWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFJlYWRQYWdlU3RhdGUgKnBz dGF0ZSwNCiAJCWFoZWFkb2ZmbnVtID0gTWF4KChpbnQpIHBzdGF0ZS0+bWlub2ZmLA0KIAkJCQkJ CSAgKGludCkgcHN0YXRlLT5vZmZudW0gLSBwc3RhdGUtPnRhcmdldGRpc3RhbmNlKTsNCiANCi0J YWhlYWQgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocHN0YXRlLT5wYWdlLA0KLQkJCQkJCQkJ CSBQYWdlR2V0SXRlbUlkKHBzdGF0ZS0+cGFnZSwgYWhlYWRvZmZudW0pKTsNCisJYWhlYWQgPSBf YnRfZ2V0aXRlbShwc3RhdGUtPnBhZ2UsIGFoZWFkb2ZmbnVtLCAmYWhlYWRidWYpOw0KIAlpZiAo X2J0X3R1cGxlX2JlZm9yZV9hcnJheV9za2V5cyhzY2FuLCBkaXIsIGFoZWFkLCB0dXBkZXNjLCB0 dXBuYXR0cywNCiAJCQkJCQkJCQkgZmFsc2UsIDAsIE5VTEwpKQ0KIAl7DQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0cmVlLmMNCmluZGV4IDBhYmRkN2I0OWY1Li5iOGI4ZWMwMThmMyAxMDA2NDQNCi0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMNCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMNCkBAIC00MzUsOCArNDM1LDEwIEBAIGJ0cmVzY2FuKElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLA0KIAkgKi8N CiAJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCAmJiBzby0+Y3VyclR1cGxlcyA9PSBOVUxMKQ0KIAl7 DQotCQlzby0+Y3VyclR1cGxlcyA9IChjaGFyICopIHBhbGxvYyhCTENLU1ogKiAyKTsNCi0JCXNv LT5tYXJrVHVwbGVzID0gc28tPmN1cnJUdXBsZXMgKyBCTENLU1o7DQorCQlTaXplCQloYWxmID0g QlRUdXBsZVN0b3JhZ2VTaXplKHNjYW4tPmluZGV4UmVsYXRpb24pOw0KKw0KKwkJc28tPmN1cnJU dXBsZXMgPSAoY2hhciAqKSBwYWxsb2MoaGFsZiAqIDIpOw0KKwkJc28tPm1hcmtUdXBsZXMgPSBz by0+Y3VyclR1cGxlcyArIGhhbGY7DQogCX0NCiANCiAJLyoNCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRzZWFyY2guYw0KaW5kZXggNjFmNjMyNTFjNmYuLmY5MzJjYTMzYzNhIDEwMDY0NA0KLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYw0KKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYw0KQEAgLTY5Niw2ICs2OTYsNyBAQCBfYnRfY29t cGFyZShSZWxhdGlvbiByZWwsDQogCVR1cGxlRGVzYwlpdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVz Y3IocmVsKTsNCiAJQlRQYWdlT3BhcXVlIG9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsN CiAJSW5kZXhUdXBsZQlpdHVwOw0KKwlCVEl0ZW1CdWYJaXR1cGJ1ZjsNCiAJSXRlbVBvaW50ZXIg aGVhcFRpZDsNCiAJU2NhbktleQkJc2NhbmtleTsNCiAJaW50CQkJbmNtcGtleTsNCkBAIC03MTMs NyArNzE0LDcgQEAgX2J0X2NvbXBhcmUoUmVsYXRpb24gcmVsLA0KIAlpZiAoIVBfSVNMRUFGKG9w YXF1ZSkgJiYgb2ZmbnVtID09IFBfRklSU1REQVRBS0VZKG9wYXF1ZSkpDQogCQlyZXR1cm4gMTsN CiANCi0JaXR1cCA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBQYWdlR2V0SXRlbUlk KHBhZ2UsIG9mZm51bSkpOw0KKwlpdHVwID0gX2J0X2dldGl0ZW0ocGFnZSwgb2ZmbnVtLCAmaXR1 cGJ1Zik7DQogCW50dXBhdHRzID0gQlRyZWVUdXBsZUdldE5BdHRzKGl0dXAsIHJlbCk7DQogDQog CS8qDQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0LmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNvcnQuYw0KaW5kZXggNzU2ZGZhM2RjZjQuLjlh OGIzNzIwMzNlIDEwMDY0NA0KLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0 LmMNCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c29ydC5jDQpAQCAtMjQxLDYg KzI0MSwxMCBAQCB0eXBlZGVmIHN0cnVjdCBCVFBhZ2VTdGF0ZQ0KIAlTaXplCQlidHBzX2xhc3Rl eHRyYTsgLyogbGFzdCBpdGVtJ3MgZXh0cmEgcG9zdGluZyBsaXN0IHNwYWNlICovDQogCXVpbnQz MgkJYnRwc19sZXZlbDsJCS8qIHRyZWUgbGV2ZWwgKDAgPSBsZWFmKSAqLw0KIAlTaXplCQlidHBz X2Z1bGw7CQkvKiAiZnVsbCIgaWYgbGVzcyB0aGFuIHRoaXMgbXVjaCBmcmVlIHNwYWNlICovDQor CS8qIExlYWYgcHJlZml4IGNvbXByZXNzaW9uOiB0aGUgY2FuZGlkYXRlIHByZWZpeCBvZiB0aGUg cGFnZSBiZWluZyBmaWxsZWQgKi8NCisJY29uc3QgY2hhciAqYnRwc19wcmVmaXg7CS8qIGludG8g dGhlIHBhZ2UncyBmaXJzdCBkYXRhIGl0ZW0sIG9yIE5VTEwgKi8NCisJU2l6ZQkJYnRwc19wcmVm aXhsZW47IC8qIGl0cyBsZW5ndGggKDAgPSBubyBjYW5kaWRhdGUpICovDQorCVNpemUJCWJ0cHNf Y29kZWRzYXZlZDsJLyogYnl0ZXMgdGhlIHBhZ2UncyBpdGVtcyB3b3VsZCBzYXZlIGNvZGVkICov DQogCXN0cnVjdCBCVFBhZ2VTdGF0ZSAqYnRwc19uZXh0OwkvKiBsaW5rIHRvIHBhcmVudCBsZXZl bCwgaWYgYW55ICovDQogfSBCVFBhZ2VTdGF0ZTsNCiANCkBAIC04NTYsNyArODYwLDggQEAgX2J0 X2J1aWxkYWRkKEJUV3JpdGVTdGF0ZSAqd3N0YXRlLCBCVFBhZ2VTdGF0ZSAqc3RhdGUsIEluZGV4 VHVwbGUgaXR1cCwNCiAJICovDQogCUFzc2VydChsYXN0X3RydW5jZXh0cmEgPT0gMCB8fCBpc2xl YWYpOw0KIAlpZiAocGdzcGMgPCBpdHVwc3ogKyAoaXNsZWFmID8gTUFYQUxJR04oc2l6ZW9mKEl0 ZW1Qb2ludGVyRGF0YSkpIDogMCkgfHwNCi0JCShwZ3NwYyArIGxhc3RfdHJ1bmNleHRyYSA8IHN0 YXRlLT5idHBzX2Z1bGwgJiYgbGFzdF9vZmYgPiBQX0ZJUlNUS0VZKSkNCisJCShwZ3NwYyArIGxh c3RfdHJ1bmNleHRyYSArIHN0YXRlLT5idHBzX2NvZGVkc2F2ZWQgPCBzdGF0ZS0+YnRwc19mdWxs ICYmDQorCQkgbGFzdF9vZmYgPiBQX0ZJUlNUS0VZKSkNCiAJew0KIAkJLyoNCiAJCSAqIEZpbmlz aCBvZmYgdGhlIHBhZ2UgYW5kIHdyaXRlIGl0IG91dC4NCkBAIC05ODAsNiArOTg1LDE1IEBAIF9i dF9idWlsZGFkZChCVFdyaXRlU3RhdGUgKndzdGF0ZSwgQlRQYWdlU3RhdGUgKnN0YXRlLCBJbmRl eFR1cGxlIGl0dXAsDQogCQkJbm9wYXF1ZS0+YnRwb19uZXh0ID0gUF9OT05FOwkvKiByZWR1bmRh bnQgKi8NCiAJCX0NCiANCisJCS8qDQorCQkgKiBUaGUgb2xkIGxlYWYgcGFnZSBpcyBjb21wbGV0 ZTogZmF1bHQgaXQgZm9yd2FyZCBpbnRvIHRoZQ0KKwkJICogQlRQX1BSRUZJWCBmb3JtYXQgaWYg YSBwcmVmaXggcGF5cyBvZmYuICBEb25lIGFmdGVyIGJ0cHNfbG93a2V5DQorCQkgKiAodGhlIGRv d25saW5rLCBhIGNvcHkgb2YgdGhlIHVuY29kZWQgaGlnaCBrZXkpIGlzIHNhdmVkLCBzaW5jZQ0K KwkJICogY29tcHJlc3Npb24gcmV3cml0ZXMgb3BhZ2UgaW4gcGxhY2UuDQorCQkgKi8NCisJCWlm IChpc2xlYWYpDQorCQkJX2J0X3ByZWZpeF9jb21wcmVzc19wYWdlKHdzdGF0ZS0+aW5kZXgsIG9w YWdlKTsNCisNCiAJCS8qDQogCQkgKiBXcml0ZSBvdXQgdGhlIG9sZCBwYWdlLiBfYnRfYmx3cml0 ZXBhZ2UgdGFrZXMgb3duZXJzaGlwIG9mIHRoZQ0KIAkJICogJ29wYWdlJyBidWZmZXIuDQpAQCAt OTkwLDYgKzEwMDQsMTEgQEAgX2J0X2J1aWxkYWRkKEJUV3JpdGVTdGF0ZSAqd3N0YXRlLCBCVFBh Z2VTdGF0ZSAqc3RhdGUsIEluZGV4VHVwbGUgaXR1cCwNCiAJCSAqIFJlc2V0IGxhc3Rfb2ZmIHRv IHBvaW50IHRvIG5ldyBwYWdlDQogCQkgKi8NCiAJCWxhc3Rfb2ZmID0gUF9GSVJTVEtFWTsNCisN CisJCS8qIFRoZSBuZXcgcGFnZSBzdGFydHMgd2l0aCBubyBwcmVmaXggY2FuZGlkYXRlIGFuZCBu byBzYXZpbmdzIHlldC4gKi8NCisJCXN0YXRlLT5idHBzX3ByZWZpeCA9IE5VTEw7DQorCQlzdGF0 ZS0+YnRwc19wcmVmaXhsZW4gPSAwOw0KKwkJc3RhdGUtPmJ0cHNfY29kZWRzYXZlZCA9IDA7DQog CX0NCiANCiAJLyoNCkBAIC0xMDE3LDYgKzEwMzYsMzQgQEAgX2J0X2J1aWxkYWRkKEJUV3JpdGVT dGF0ZSAqd3N0YXRlLCBCVFBhZ2VTdGF0ZSAqc3RhdGUsIEluZGV4VHVwbGUgaXR1cCwNCiAJX2J0 X3NvcnRhZGR0dXAobnBhZ2UsIGl0dXBzeiwgaXR1cCwgbGFzdF9vZmYsDQogCQkJCSAgICFpc2xl YWYgJiYgbGFzdF9vZmYgPT0gUF9GSVJTVEtFWSk7DQogDQorCS8qDQorCSAqIExlYWYgcHJlZml4 IGNvbXByZXNzaW9uIGFjY291bnRpbmcgKFN0cmF0ZWd5IDEpOiB0aGUgcGFnZSdzIGV2ZW50dWFs DQorCSAqIHByZWZpeCBpcyBpdHMgZmlyc3QgZGF0YSBpdGVtJ3MgZmlyc3QtY29sdW1uIGJ5dGVz OyBlc3RpbWF0ZSBob3cgbXVjaA0KKwkgKiByb29tIGNvZGluZyB0aGlzIHBhZ2UncyBpdGVtcyB3 b3VsZCBmcmVlLCBzbyB0aGUgZmlsbGZhY3RvciB0ZXN0IGFib3ZlDQorCSAqIGNhbiBwYWNrIG1v cmUgcGxhaW4gaXRlbXMgb250byBhIHBhZ2UgdGhhdCB3aWxsIHNocmluayB3aGVuIGl0IGlzDQor CSAqIGNvbXByZXNzZWQgYXQgZmluaXNoLiAgSXRlbXMgYXJlIHN0aWxsIHBsYWNlZCBwbGFpbiBo ZXJlOyB0aGUgZXN0aW1hdGUNCisJICogb25seSByZWxheGVzIHRoZSBzb2Z0IGxpbWl0LCBuZXZl ciB0aGUgaGFyZCBmaXQgY2hlY2suDQorCSAqLw0KKwlpZiAoaXNsZWFmICYmIF9idF9wcmVmaXhf ZW5hYmxlZCh3c3RhdGUtPmluZGV4KSkNCisJew0KKwkJaWYgKHN0YXRlLT5idHBzX3ByZWZpeCA9 PSBOVUxMKQ0KKwkJCXN0YXRlLT5idHBzX3ByZWZpeCA9IF9idF9wcmVmaXhfY2FuZGlkYXRlKGl0 dXAsDQorCQkJCQkJCQkJCQkJCSAgJnN0YXRlLT5idHBzX3ByZWZpeGxlbik7DQorCQllbHNlDQor CQl7DQorCQkJaW50CQkJc2hhcmVkID0gX2J0X3ByZWZpeF9zaGFyZWQoc3RhdGUtPmJ0cHNfcHJl Zml4LA0KKwkJCQkJCQkJCQkJICAgc3RhdGUtPmJ0cHNfcHJlZml4bGVuLCBpdHVwKTsNCisNCisJ CQkvKg0KKwkJCSAqIEEgY29kZWQgaXRlbSBkcm9wcyBgc2hhcmVkJyB2YWx1ZSBieXRlcyBidXQg a2VlcHMgYSAxLWJ5dGUNCisJCQkgKiBzaGFyZSBjb3VudDsgY291bnQgdGhlIG5ldCBNQVhBTElH Ti1yb3VuZGVkIHNhdmluZy4NCisJCQkgKi8NCisJCQlpZiAoc2hhcmVkID4gMSkNCisJCQkJc3Rh dGUtPmJ0cHNfY29kZWRzYXZlZCArPQ0KKwkJCQkJTUFYQUxJR04oaXR1cHN6KSAtIE1BWEFMSUdO KGl0dXBzeiAtIChzaGFyZWQgLSAxKSk7DQorCQl9DQorCX0NCisNCiAJc3RhdGUtPmJ0cHNfYnVm ID0gbmJ1ZjsNCiAJc3RhdGUtPmJ0cHNfYmxrbm8gPSBuYmxrbm87DQogCXN0YXRlLT5idHBzX2xh c3RvZmYgPSBsYXN0X29mZjsNCkBAIC0xMTE1LDYgKzExNjIsMTEgQEAgX2J0X3VwcGVyc2h1dGRv d24oQlRXcml0ZVN0YXRlICp3c3RhdGUsIEJUUGFnZVN0YXRlICpzdGF0ZSkNCiAJCSAqIGJhY2sg b25lIHNsb3QuICBUaGVuIHdlIGNhbiBkdW1wIG91dCB0aGUgcGFnZS4NCiAJCSAqLw0KIAkJX2J0 X3NsaWRlbGVmdCgoUGFnZSkgcy0+YnRwc19idWYpOw0KKw0KKwkJLyogRmF1bHQgdGhlIGZpbmlz aGVkIHJpZ2h0bW9zdCBsZWFmIGZvcndhcmQgaW50byBCVFBfUFJFRklYIGlmIGl0IHBheXMuICov DQorCQlpZiAocy0+YnRwc19sZXZlbCA9PSAwKQ0KKwkJCV9idF9wcmVmaXhfY29tcHJlc3NfcGFn ZSh3c3RhdGUtPmluZGV4LCAoUGFnZSkgcy0+YnRwc19idWYpOw0KKw0KIAkJX2J0X2Jsd3JpdGVw YWdlKHdzdGF0ZSwgcy0+YnRwc19idWYsIHMtPmJ0cHNfYmxrbm8pOw0KIAkJcy0+YnRwc19idWYg PSBOVUxMOwkJLyogd3JpdGVwYWdlIHRvb2sgb3duZXJzaGlwIG9mIHRoZSBidWZmZXIgKi8NCiAJ fQ0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c3BsaXRsb2MuYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c3BsaXRsb2MuYw0KaW5kZXggZGU5ZWNhM2M4 YjIuLjE0YmVlNTY4ZTQ1IDEwMDY0NA0KLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnRzcGxpdGxvYy5jDQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNwbGl0bG9j LmMNCkBAIC01Miw2ICs1Miw5IEBAIHR5cGVkZWYgc3RydWN0DQogCWludAkJCXJpZ2h0c3BhY2U7 CQkvKiBzcGFjZSBhdmFpbGFibGUgZm9yIGl0ZW1zIG9uIHJpZ2h0IHBhZ2UgKi8NCiAJaW50CQkJ b2xkZGF0YWl0ZW1zdG90YWw7CS8qIHNwYWNlIHRha2VuIGJ5IG9sZCBpdGVtcyAqLw0KIAlTaXpl CQltaW5maXJzdHJpZ2h0c3o7CS8qIHNtYWxsZXN0IGZpcnN0cmlnaHQgc2l6ZSAqLw0KKwlib29s CQloYXNwcmVmaXg7CQkvKiBvcmlncGFnZSBpcyBwcmVmaXgtY29tcHJlc3NlZCAoQlRQX1BSRUZJ WCkgKi8NCisJQlRJdGVtQnVmCWxidWY7CQkJLyogZGVjb2RlIHNjcmF0Y2ggZm9yIF9idF9zcGxp dF9sYXN0bGVmdCAqLw0KKwlCVEl0ZW1CdWYJcmJ1ZjsJCQkvKiBkZWNvZGUgc2NyYXRjaCBmb3Ig X2J0X3NwbGl0X2ZpcnN0cmlnaHQgKi8NCiANCiAJLyogY2FuZGlkYXRlIHNwbGl0IHBvaW50IGRh dGEgKi8NCiAJaW50CQkJbWF4c3BsaXRzOwkJLyogbWF4aW11bSBudW1iZXIgb2Ygc3BsaXRzICov DQpAQCAtMTcyLDYgKzE3NSwyMyBAQCBfYnRfZmluZHNwbGl0bG9jKFJlbGF0aW9uIHJlbCwNCiAJ b2xkZGF0YWl0ZW1zdG90YWwgPSByaWdodHNwYWNlIC0gKGludCkgUGFnZUdldEV4YWN0RnJlZVNw YWNlKG9yaWdwYWdlKTsNCiAJbGVhZmZpbGxmYWN0b3IgPSBCVEdldEZpbGxGYWN0b3IocmVsKTsN CiANCisJLyoNCisJICogT24gYSBwcmVmaXgtY29tcHJlc3NlZCBsZWFmIHRoZSBwYWdlIGNhcnJp ZXMgYW4gZXh0cmEgUFJFRklYIGl0ZW0gdGhhdA0KKwkgKiBpcyBub3QgYSBkYXRhIGl0ZW0uICBU aGUgc3BsaXQgaXMgcmVhc29uZWQgYWJvdXQgaW4gQ09ERUQgKG9uLXBhZ2UpDQorCSAqIGJ5dGVz IC0tIHRoZSBwaHlzaWNhbCByZWFsaXR5IG9mIHRoZSBwYWdlIGFuZCBvZiBlYWNoIHJlY29tcHJl c3NlZCBoYWxmDQorCSAqIC0tIHNvIHN1YnRyYWN0IG9ubHkgdGhlIFBSRUZJWCBpdGVtJ3Mgc3Bh Y2UgZnJvbSBvbGRkYXRhaXRlbXN0b3RhbCBhbmQNCisJICogdXNlIHRoZSBvbi1wYWdlIChjb2Rl ZCkgaXRlbSBzaXplcyBpbiB0aGUgc2NhbiBiZWxvdy4gIChQbGFpbi1zaXplDQorCSAqIGFjY291 bnRpbmcgaXMgbm90IHVzYWJsZSBoZXJlOiBhIGNvbXByZXNzZWQgbGVhZiBjYW4gaG9sZCBmYXIg bW9yZQ0KKwkgKiBsb2dpY2FsIGRhdGEgdGhhbiB0d28gcGxhaW4gcGFnZXMsIHNvIGEgcGxhaW4g c3BsaXQgY2FuIGJlIGluZmVhc2libGUuKQ0KKwkgKi8NCisJaWYgKFBfSEFTUFJFRklYKG9wYXF1 ZSkpDQorCXsNCisJCUl0ZW1JZAkJcGlpID0gUGFnZUdldEl0ZW1JZChvcmlncGFnZSwgQlRQYWdl R2V0UHJlZml4T2ZmKG9wYXF1ZSkpOw0KKw0KKwkJb2xkZGF0YWl0ZW1zdG90YWwgLT0gKGludCkg KE1BWEFMSUdOKEl0ZW1JZEdldExlbmd0aChwaWkpKSArDQorCQkJCQkJCQkJc2l6ZW9mKEl0ZW1J ZERhdGEpKTsNCisJfQ0KKw0KIAkvKiBQYXNzZWQtaW4gbmV3aXRlbXN6IGlzIE1BWEFMSUdORUQg YnV0IGRvZXMgbm90IGluY2x1ZGUgbGluZSBwb2ludGVyICovDQogCW5ld2l0ZW1zeiArPSBzaXpl b2YoSXRlbUlkRGF0YSk7DQogCXN0YXRlLnJlbCA9IHJlbDsNCkBAIC0xODUsNiArMjA1LDcgQEAg X2J0X2ZpbmRzcGxpdGxvYyhSZWxhdGlvbiByZWwsDQogCXN0YXRlLm9sZGRhdGFpdGVtc3RvdGFs ID0gb2xkZGF0YWl0ZW1zdG90YWw7DQogCXN0YXRlLm1pbmZpcnN0cmlnaHRzeiA9IFNJWkVfTUFY Ow0KIAlzdGF0ZS5uZXdpdGVtb2ZmID0gbmV3aXRlbW9mZjsNCisJc3RhdGUuaGFzcHJlZml4ID0g UF9IQVNQUkVGSVgob3BhcXVlKTsNCiANCiAJLyogbmV3aXRlbSBjYW5ub3QgYmUgYSBwb3N0aW5n IGxpc3QgaXRlbSAqLw0KIAlBc3NlcnQoIUJUcmVlVHVwbGVJc1Bvc3RpbmcobmV3aXRlbSkpOw0K QEAgLTQ2Myw2ICs0ODQsMTkgQEAgX2J0X3JlY3NwbGl0bG9jKEZpbmRTcGxpdERhdGEgKnN0YXRl LA0KIAluZXdpdGVtaXNmaXJzdHJpZ2h0ID0gKGZpcnN0cmlnaHRvZmYgPT0gc3RhdGUtPm5ld2l0 ZW1vZmYgJiYNCiAJCQkJCQkgICAhbmV3aXRlbW9ubGVmdCk7DQogDQorCS8qDQorCSAqIFJlamVj dCBhIHNwbGl0IHRoYXQgd291bGQgbGVhdmUgdGhlIGxlZnQgcGFnZSB3aXRoIG5vIGRhdGEgaXRl bXMgYXQgYWxsDQorCSAqIChmaXJzdHJpZ2h0b2ZmIGF0IHRoZSBmaXJzdCBkYXRhIGtleSwgd2l0 aCBuZXdpdGVtIG5vdCBvbiB0aGUgbGVmdCkuDQorCSAqIFVwc3RyZWFtJ3Mgc3BsaXQtcG9pbnQg aGV1cmlzdGljcyBuZXZlciBjaG9vc2Ugc3VjaCBhIHBvaW50IGZvciBhIHBsYWluDQorCSAqIHBh Z2U7IG9uIGEgcHJlZml4LWNvbXByZXNzZWQgcGFnZSB0aGUgY29kZWQtc2l6ZSBhY2NvdW50aW5n IGNhbiBtYWtlIGl0DQorCSAqIGxvb2sgYXR0cmFjdGl2ZSwgYW5kIF9idF9zcGxpdCBjYW5ub3Qg Zm9ybSBhIGxlZnQgaGlnaCBrZXkgZnJvbSBhDQorCSAqIG5vbmV4aXN0ZW50IGxhc3RsZWZ0Lg0K KwkgKi8NCisJaWYgKHN0YXRlLT5oYXNwcmVmaXggJiYNCisJCWZpcnN0cmlnaHRvZmYgPT0gUF9G SVJTVERBVEFLRVkoQlRQYWdlR2V0T3BhcXVlKHN0YXRlLT5vcmlncGFnZSkpICYmDQorCQkhbmV3 aXRlbW9ubGVmdCkNCisJCXJldHVybjsNCisNCiAJaWYgKG5ld2l0ZW1pc2ZpcnN0cmlnaHQpDQog CQlmaXJzdHJpZ2h0c3ogPSBzdGF0ZS0+bmV3aXRlbXN6Ow0KIAllbHNlDQpAQCAtNjg2LDggKzcy MCwxMiBAQCBfYnRfYWZ0ZXJuZXdpdGVtb2ZmKEZpbmRTcGxpdERhdGEgKnN0YXRlLCBPZmZzZXRO dW1iZXIgbWF4b2ZmLA0KIAkgKi8NCiAJaWYgKHN0YXRlLT5uZXdpdGVtb2ZmID4gbWF4b2ZmKQ0K IAl7DQorCQlCVEl0ZW1CdWYJdGJ1ZjsNCisNCiAJCWl0ZW1pZCA9IFBhZ2VHZXRJdGVtSWQoc3Rh dGUtPm9yaWdwYWdlLCBtYXhvZmYpOw0KIAkJdHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVt KHN0YXRlLT5vcmlncGFnZSwgaXRlbWlkKTsNCisJCWlmIChzdGF0ZS0+aGFzcHJlZml4KQ0KKwkJ CXR1cCA9IF9idF9wcmVmaXhfZGVjb2RlKHN0YXRlLT5vcmlncGFnZSwgdHVwLCAmdGJ1Zik7DQog CQlrZWVwbmF0dHMgPSBfYnRfa2VlcF9uYXR0c19mYXN0KHN0YXRlLT5yZWwsIHR1cCwgc3RhdGUt Pm5ld2l0ZW0pOw0KIA0KIAkJaWYgKGtlZXBuYXR0cyA+IDEgJiYga2VlcG5hdHRzIDw9IG5rZXlh dHRzKQ0KQEAgLTcxNCwxMiArNzUyLDIwIEBAIF9idF9hZnRlcm5ld2l0ZW1vZmYoRmluZFNwbGl0 RGF0YSAqc3RhdGUsIE9mZnNldE51bWJlciBtYXhvZmYsDQogCSAqLw0KIAlpdGVtaWQgPSBQYWdl R2V0SXRlbUlkKHN0YXRlLT5vcmlncGFnZSwgT2Zmc2V0TnVtYmVyUHJldihzdGF0ZS0+bmV3aXRl bW9mZikpOw0KIAl0dXAgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0oc3RhdGUtPm9yaWdwYWdl LCBpdGVtaWQpOw0KLQkvKiBEbyBjaGVhcGVyIHRlc3QgZmlyc3QgKi8NCisJLyogRG8gY2hlYXBl ciB0ZXN0IGZpcnN0ICh0X3RpZCBhbmQgdGhlIHBvc3RpbmcgYml0IHN1cnZpdmUgY29kaW5nKSAq Lw0KIAlpZiAoQlRyZWVUdXBsZUlzUG9zdGluZyh0dXApIHx8DQogCQkhX2J0X2FkamFjZW50aHRp ZCgmdHVwLT50X3RpZCwgJnN0YXRlLT5uZXdpdGVtLT50X3RpZCkpDQogCQlyZXR1cm4gZmFsc2U7 DQogCS8qIENoZWNrIHNhbWUgY29uZGl0aW9ucyBhcyByaWdodG1vc3QgaXRlbSBjYXNlLCB0b28g Ki8NCi0Ja2VlcG5hdHRzID0gX2J0X2tlZXBfbmF0dHNfZmFzdChzdGF0ZS0+cmVsLCB0dXAsIHN0 YXRlLT5uZXdpdGVtKTsNCisJaWYgKHN0YXRlLT5oYXNwcmVmaXgpDQorCXsNCisJCUJUSXRlbUJ1 Zgl0YnVmOw0KKw0KKwkJdHVwID0gX2J0X3ByZWZpeF9kZWNvZGUoc3RhdGUtPm9yaWdwYWdlLCB0 dXAsICZ0YnVmKTsNCisJCWtlZXBuYXR0cyA9IF9idF9rZWVwX25hdHRzX2Zhc3Qoc3RhdGUtPnJl bCwgdHVwLCBzdGF0ZS0+bmV3aXRlbSk7DQorCX0NCisJZWxzZQ0KKwkJa2VlcG5hdHRzID0gX2J0 X2tlZXBfbmF0dHNfZmFzdChzdGF0ZS0+cmVsLCB0dXAsIHN0YXRlLT5uZXdpdGVtKTsNCiANCiAJ aWYgKGtlZXBuYXR0cyA+IDEgJiYga2VlcG5hdHRzIDw9IG5rZXlhdHRzKQ0KIAl7DQpAQCAtMTE2 MCwxMiArMTIwNiwzOCBAQCBzdGF0aWMgaW5saW5lIEluZGV4VHVwbGUNCiBfYnRfc3BsaXRfbGFz dGxlZnQoRmluZFNwbGl0RGF0YSAqc3RhdGUsIFNwbGl0UG9pbnQgKnNwbGl0KQ0KIHsNCiAJSXRl bUlkCQlpdGVtaWQ7DQorCU9mZnNldE51bWJlciBvZmY7DQogDQogCWlmIChzcGxpdC0+bmV3aXRl bW9ubGVmdCAmJiBzcGxpdC0+Zmlyc3RyaWdodG9mZiA9PSBzdGF0ZS0+bmV3aXRlbW9mZikNCiAJ CXJldHVybiBzdGF0ZS0+bmV3aXRlbTsNCiANCi0JaXRlbWlkID0gUGFnZUdldEl0ZW1JZChzdGF0 ZS0+b3JpZ3BhZ2UsDQotCQkJCQkJICAgT2Zmc2V0TnVtYmVyUHJldihzcGxpdC0+Zmlyc3RyaWdo dG9mZikpOw0KKwlvZmYgPSBPZmZzZXROdW1iZXJQcmV2KHNwbGl0LT5maXJzdHJpZ2h0b2ZmKTsN CisNCisJLyoNCisJICogT24gYSBwcmVmaXgtY29tcHJlc3NlZCBsZWFmIHRoZSBQUkVGSVggaXRl bSBzaXRzIGp1c3QgYmVmb3JlIHRoZSBmaXJzdA0KKwkgKiBkYXRhIGl0ZW0uICBXaGVuIHRoZSBz cGxpdCBib3VuZGFyeSBpcyBhdCB0aGUgZmlyc3QgZGF0YSBrZXksIHRoZSBkYXRhDQorCSAqIHBy ZWRlY2Vzc29yIGlzIHRoZSBoaWdoIGtleSBvbiBhIHBsYWluIHBhZ2UgKGEgcGl2b3QsIHJlYWQg cGxhaW4pOyBhDQorCSAqIHJpZ2h0bW9zdCBwYWdlIGhhcyBub25lLCBzbyBmYWxsIGJhY2sgdG8g dGhlIGZpcnN0IGRhdGEgaXRlbSAodGhpcyBvbmx5DQorCSAqIGZlZWRzIHBlbmFsdHkgZXN0aW1h dGlvbiwgbmV2ZXIgcGxhY2VtZW50KS4gIE5ldmVyIHJlYWQgdGhlIFBSRUZJWCBpdGVtDQorCSAq IGFzIGEgZGF0YSB0dXBsZS4NCisJICovDQorCWlmIChzdGF0ZS0+aGFzcHJlZml4KQ0KKwl7DQor CQlCVFBhZ2VPcGFxdWUgb3AgPSBCVFBhZ2VHZXRPcGFxdWUoc3RhdGUtPm9yaWdwYWdlKTsNCisN CisJCWlmIChvZmYgPT0gQlRQYWdlR2V0UHJlZml4T2ZmKG9wKSkNCisJCXsNCisJCQlpZiAoIVBf UklHSFRNT1NUKG9wKSkNCisJCQkJcmV0dXJuIChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShzdGF0 ZS0+b3JpZ3BhZ2UsDQorCQkJCQkJCQkJCQkJUGFnZUdldEl0ZW1JZChzdGF0ZS0+b3JpZ3BhZ2Us IFBfSElLRVkpKTsNCisJCQlvZmYgPSBQX0ZJUlNUREFUQUtFWShvcCk7DQorCQl9DQorCQlpdGVt aWQgPSBQYWdlR2V0SXRlbUlkKHN0YXRlLT5vcmlncGFnZSwgb2ZmKTsNCisJCXJldHVybiBfYnRf cHJlZml4X2RlY29kZShzdGF0ZS0+b3JpZ3BhZ2UsDQorCQkJCQkJCQkgKEluZGV4VHVwbGUpIFBh Z2VHZXRJdGVtKHN0YXRlLT5vcmlncGFnZSwgaXRlbWlkKSwNCisJCQkJCQkJCSAmc3RhdGUtPmxi dWYpOw0KKwl9DQorCWl0ZW1pZCA9IFBhZ2VHZXRJdGVtSWQoc3RhdGUtPm9yaWdwYWdlLCBvZmYp Ow0KIAlyZXR1cm4gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHN0YXRlLT5vcmlncGFnZSwgaXRl bWlkKTsNCiB9DQogDQpAQCAtMTE4MSw1ICsxMjUzLDkgQEAgX2J0X3NwbGl0X2ZpcnN0cmlnaHQo RmluZFNwbGl0RGF0YSAqc3RhdGUsIFNwbGl0UG9pbnQgKnNwbGl0KQ0KIAkJcmV0dXJuIHN0YXRl LT5uZXdpdGVtOw0KIA0KIAlpdGVtaWQgPSBQYWdlR2V0SXRlbUlkKHN0YXRlLT5vcmlncGFnZSwg c3BsaXQtPmZpcnN0cmlnaHRvZmYpOw0KKwlpZiAoc3RhdGUtPmhhc3ByZWZpeCkNCisJCXJldHVy biBfYnRfcHJlZml4X2RlY29kZShzdGF0ZS0+b3JpZ3BhZ2UsDQorCQkJCQkJCQkgKEluZGV4VHVw bGUpIFBhZ2VHZXRJdGVtKHN0YXRlLT5vcmlncGFnZSwgaXRlbWlkKSwNCisJCQkJCQkJCSAmc3Rh dGUtPnJidWYpOw0KIAlyZXR1cm4gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHN0YXRlLT5vcmln cGFnZSwgaXRlbWlkKTsNCiB9DQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnR1dGlscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jDQppbmRl eCA4NWMxYjYzMjUyMi4uNWRjMmIyZjMwNTAgMTAwNjQ0DQotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHV0aWxzLmMNCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 dXRpbHMuYw0KQEAgLTYwMiw3ICs2MDIsOSBAQCBidG9wdGlvbnMoRGF0dW0gcmVsb3B0aW9ucywg Ym9vbCB2YWxpZGF0ZSkNCiAJCXsidmFjdXVtX2NsZWFudXBfaW5kZXhfc2NhbGVfZmFjdG9yIiwg UkVMT1BUX1RZUEVfUkVBTCwNCiAJCW9mZnNldG9mKEJUT3B0aW9ucywgdmFjdXVtX2NsZWFudXBf aW5kZXhfc2NhbGVfZmFjdG9yKX0sDQogCQl7ImRlZHVwbGljYXRlX2l0ZW1zIiwgUkVMT1BUX1RZ UEVfQk9PTCwNCi0JCW9mZnNldG9mKEJUT3B0aW9ucywgZGVkdXBsaWNhdGVfaXRlbXMpfQ0KKwkJ b2Zmc2V0b2YoQlRPcHRpb25zLCBkZWR1cGxpY2F0ZV9pdGVtcyl9LA0KKwkJeyJwcmVmaXhfY29t cHJlc3Npb24iLCBSRUxPUFRfVFlQRV9CT09MLA0KKwkJb2Zmc2V0b2YoQlRPcHRpb25zLCBwcmVm aXhfY29tcHJlc3Npb24pfQ0KIAl9Ow0KIA0KIAlyZXR1cm4gKGJ5dGVhICopIGJ1aWxkX3JlbG9w dGlvbnMocmVsb3B0aW9ucywgdmFsaWRhdGUsDQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnR4bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHhsb2cu Yw0KaW5kZXggZGZmN2QyODZmYzguLjA5OGM3ODVkNGQ4IDEwMDY0NA0KLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnR4bG9nLmMNCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0eGxvZy5jDQpAQCAtMjQzLDYgKzI0MywyMDkgQEAgYnRyZWVfeGxvZ19pbnNlcnQoYm9v bCBpc2xlYWYsIGJvb2wgaXNtZXRhLCBib29sIHBvc3RpbmcsDQogCQlfYnRfcmVzdG9yZV9tZXRh KHJlY29yZCwgMik7DQogfQ0KIA0KKy8qDQorICogUmVwbGF5IGEgcHJlZml4LWNvbXByZXNzZWQg bGVhZiBwYWdlIHNwbGl0Lg0KKyAqDQorICogUmF0aGVyIHRoYW4gcmVwbGF5IGxvZ2dlZCB0dXBs ZXMgKHdob3NlIGNvZGVkIHBoeXNpY2FsIGxheW91dA0KKyAqIF9idF9yZXN0b3JlX3BhZ2UgY291 bGQgbm90IHJlcHJvZHVjZSksIHJlYnVpbGQgYm90aCBoYWx2ZXMgdGhlIHdheSB0aGUNCisgKiBw cmltYXJ5IGRpZDogY29sbGVjdCB0aGUgc3BsaXQncyBwbGFpbiBpdGVtcyBmcm9tIHRoZSBwcmUt c3BsaXQgb3JpZ2luYWwNCisgKiBwYWdlIChibG9jayAwKSB3aXRoIF9idF9zcGxpdF9sZWFmX2Nv bGxlY3QsIHRoZW4gbGF5IGVhY2ggaGFsZiBvdXQgY29kZWQNCisgKiBhZ2FpbnN0IGl0cyBjaG9z ZW4gcHJlZml4IChjYXJyaWVkIGluIHRoZSByZWNvcmQpIHdpdGggX2J0X3NwbGl0X2xlYWZfbGF5 b3V0Lg0KKyAqIFRoZSByZXN1bHQgaXMgYnl0ZS1pZGVudGljYWwgdG8gdGhlIHByaW1hcnksIHNv IG5vIGZ1bGwtcGFnZSBpbWFnZSBpcw0KKyAqIG5lZWRlZC4gIFRoZSByZWNvcmQncyBibG9jay0w IGRhdGEgY2FycmllcywgaW4gb3JkZXI6IG5ld2l0ZW0gKHdoZW4gaXQgd2VudA0KKyAqIG9uIHRo ZSBsZWZ0LCBvciBmb3IgYSBwb3N0aW5nIHNwbGl0KSwgdGhlIGxlZnQgaGlnaCBrZXksIGFuZCB0 aGUgbGVmdCBoYWxmJ3MNCisgKiBwcmVmaXggYnl0ZXM7IGJsb2NrLTEgZGF0YSBjYXJyaWVzIHRo ZSByaWdodCBoYWxmJ3MgcHJlZml4IGJ5dGVzLg0KKyAqLw0KK3N0YXRpYyB2b2lkDQorYnRyZWVf eGxvZ19zcGxpdF9wcmVmaXgoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQsIEJsb2NrTnVtYmVyIG9y aWdwYWdlbnVtYmVyLA0KKwkJCQkJCUJsb2NrTnVtYmVyIHJpZ2h0cGFnZW51bWJlciwgQmxvY2tO dW1iZXIgc3BhZ2VudW1iZXIsDQorCQkJCQkJYm9vbCBuZXdpdGVtb25sZWZ0KQ0KK3sNCisJWExv Z1JlY1B0cglsc24gPSByZWNvcmQtPkVuZFJlY1B0cjsNCisJeGxfYnRyZWVfc3BsaXQgKnhscmVj ID0gKHhsX2J0cmVlX3NwbGl0ICopIFhMb2dSZWNHZXREYXRhKHJlY29yZCk7DQorCUJ1ZmZlcgkJ cmJ1ZjsNCisJQnVmZmVyCQlvcmlnYnVmOw0KKwlQYWdlCQlvcmlncGFnZTsNCisJQlRQYWdlT3Bh cXVlIG9vcGFxdWU7DQorCWNoYXIJICAgKmRhdGFwb3M7DQorCVNpemUJCWRhdGFsZW47DQorCUlu ZGV4VHVwbGUJbmV3aXRlbSA9IE5VTEw7DQorCUluZGV4VHVwbGUJbGVmdF9oaWtleTsNCisJSW5k ZXhUdXBsZQlyaWdodF9oaWtleSA9IE5VTEw7DQorCUluZGV4VHVwbGUJbnBvc3RpbmcgPSBOVUxM Ow0KKwlTaXplCQluZXdpdGVtc3ogPSAwOw0KKwljb25zdCBjaGFyICpsZWZ0cHJlZml4ID0gTlVM TDsNCisJY29uc3QgY2hhciAqcmlnaHRwcmVmaXggPSBOVUxMOw0KKwlJbmRleFR1cGxlCXJpZ2h0 aXRlbXNbTWF4SW5kZXhUdXBsZXNQZXJQYWdlXTsNCisJaW50CQkJbnJpZ2h0ID0gMDsNCisJUGFn ZQkJcmlnaHRwYWdlOw0KKwlCVFBhZ2VPcGFxdWUgcm9wYXF1ZTsNCisJWExvZ1JlZG9BY3Rpb24g b3JpZ2FjdGlvbjsNCisNCisJLyoNCisJICogVGhlIHJpZ2h0IChuZXcpIHBhZ2UgaXMgcmVidWls dCBlbnRpcmVseSBmcm9tIGRhdGEgbG9nZ2VkIHdpdGggdGhlDQorCSAqIHJlY29yZCwgaW5kZXBl bmRlbnQgb2YgYmxvY2sgMCwgYmVjYXVzZSBibG9jayAwIG1heSBiZSByZXN0b3JlZCBmcm9tIGFu DQorCSAqIGF1dG9tYXRpYyBmdWxsLXBhZ2UgaW1hZ2UgKHNvIGl0cyBsaXZlIGNvbnRlbnRzIGFm dGVyIHJlZG8gYXJlIHRoZSBsZWZ0DQorCSAqIGhhbGYsIG5vdCB0aGUgcHJlLXNwbGl0IHBhZ2Up LiAgQmxvY2stMSBkYXRhIGlzLCBpbiBvcmRlcjogdGhlIHJpZ2h0DQorCSAqIGhhbGYncyBjaG9z ZW4gcHJlZml4IGJ5dGVzIChyaWdodHByZWZpeGxlbiksIHRoZSByaWdodCBoaWdoIGtleSB3aGVu IHRoZQ0KKwkgKiBzcGxpdCBpcyBub3QgcmlnaHRtb3N0IChzcGFnZW51bWJlciAhPSBQX05PTkUp LCB0aGVuIHRoZSByaWdodCBoYWxmJ3MNCisJICogcGxhaW4gZGF0YSBpdGVtcyBpbiBvZmZzZXQg b3JkZXIgKHNlbGYtZGVzY3JpYmluZyBieSBJbmRleFR1cGxlU2l6ZSkuDQorCSAqLw0KKwlkYXRh cG9zID0gWExvZ1JlY0dldEJsb2NrRGF0YShyZWNvcmQsIDEsICZkYXRhbGVuKTsNCisJaWYgKHhs cmVjLT5mbGFncyAmIFhMSF9TUExJVF9SRlBJKQ0KKwl7DQorCQkvKg0KKwkJICogVGhlIHJpZ2h0 IGhhbGYncyBwbGFpbiBpdGVtcyB3b3VsZCBoYXZlIG92ZXJmbG93ZWQgdGhlIFdBTCByZWNvcmQs DQorCQkgKiBzbyB0aGUgcHJpbWFyeSBjYXJyaWVkIHRoZSBjb2RlZCByaWdodCBwYWdlIGFzIGEg Zm9yY2VkIGZ1bGwtcGFnZQ0KKwkJICogaW1hZ2UuICBSZXN0b3JlIGl0IGZyb20gdGhhdCBpbWFn ZS4NCisJCSAqLw0KKwkJaWYgKFhMb2dSZWFkQnVmZmVyRm9yUmVkbyhyZWNvcmQsIDEsICZyYnVm KSAhPSBCTEtfUkVTVE9SRUQpDQorCQkJZWxvZyhFUlJPUiwgInByZWZpeCBsZWFmIHNwbGl0IHJp Z2h0IHBhZ2UgbGFja3MgaXRzIGZ1bGwtcGFnZSBpbWFnZSIpOw0KKwl9DQorCWVsc2UNCisJew0K KwkJaWYgKHhscmVjLT5yaWdodHByZWZpeGxlbiA+IDApDQorCQl7DQorCQkJcmlnaHRwcmVmaXgg PSBkYXRhcG9zOw0KKwkJCWRhdGFwb3MgKz0geGxyZWMtPnJpZ2h0cHJlZml4bGVuOw0KKwkJCWRh dGFsZW4gLT0geGxyZWMtPnJpZ2h0cHJlZml4bGVuOw0KKwkJfQ0KKwkJaWYgKHNwYWdlbnVtYmVy ICE9IFBfTk9ORSkNCisJCXsNCisJCQlyaWdodF9oaWtleSA9IChJbmRleFR1cGxlKSBkYXRhcG9z Ow0KKwkJCWRhdGFwb3MgKz0gTUFYQUxJR04oSW5kZXhUdXBsZVNpemUocmlnaHRfaGlrZXkpKTsN CisJCQlkYXRhbGVuIC09IE1BWEFMSUdOKEluZGV4VHVwbGVTaXplKHJpZ2h0X2hpa2V5KSk7DQor CQl9DQorCQl3aGlsZSAoZGF0YWxlbiA+IDApDQorCQl7DQorCQkJSW5kZXhUdXBsZQlpdCA9IChJ bmRleFR1cGxlKSBkYXRhcG9zOw0KKwkJCVNpemUJCXN6ID0gTUFYQUxJR04oSW5kZXhUdXBsZVNp emUoaXQpKTsNCisNCisJCQlyaWdodGl0ZW1zW25yaWdodCsrXSA9IGl0Ow0KKwkJCWRhdGFwb3Mg Kz0gc3o7DQorCQkJZGF0YWxlbiAtPSBzejsNCisJCX0NCisNCisJCXJidWYgPSBYTG9nSW5pdEJ1 ZmZlckZvclJlZG8ocmVjb3JkLCAxKTsNCisJCXJpZ2h0cGFnZSA9IEJ1ZmZlckdldFBhZ2UocmJ1 Zik7DQorCQlfYnRfcGFnZWluaXQocmlnaHRwYWdlLCBCdWZmZXJHZXRQYWdlU2l6ZShyYnVmKSk7 DQorCQlyb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKHJpZ2h0cGFnZSk7DQorCQlyb3BhcXVlLT5i dHBvX3ByZXYgPSBvcmlncGFnZW51bWJlcjsNCisJCXJvcGFxdWUtPmJ0cG9fbmV4dCA9IHNwYWdl bnVtYmVyOw0KKwkJcm9wYXF1ZS0+YnRwb19sZXZlbCA9IHhscmVjLT5sZXZlbDsNCisJCXJvcGFx dWUtPmJ0cG9fZmxhZ3MgPSBCVFBfTEVBRjsNCisJCXJvcGFxdWUtPmJ0cG9fY3ljbGVpZCA9IDA7 DQorCQlpZiAoIV9idF9zcGxpdF9sZWFmX2xheW91dChyaWdodHBhZ2UsIHJpZ2h0X2hpa2V5LCBy aWdodGl0ZW1zLCBucmlnaHQsDQorCQkJCQkJCQkgICByaWdodHByZWZpeCwgeGxyZWMtPnJpZ2h0 cHJlZml4bGVuKSkNCisJCQllbG9nKEVSUk9SLCAiZmFpbGVkIHRvIHJlcGxheSByaWdodCBoYWxm IG9mIGEgcHJlZml4IGxlYWYgc3BsaXQiKTsNCisJCVBhZ2VTZXRMU04ocmlnaHRwYWdlLCBsc24p Ow0KKwl9DQorCU1hcmtCdWZmZXJEaXJ0eShyYnVmKTsNCisNCisJLyoNCisJICogUmVidWlsZCB0 aGUgbGVmdCAob3JpZ2luYWwpIHBhZ2UgZnJvbSB0aGUgcHJlLXNwbGl0IHBhZ2UsIHVubGVzcyBp dCB3YXMNCisJICogcmVzdG9yZWQgZnJvbSBhIGZ1bGwtcGFnZSBpbWFnZSAodGhlbiBpdCBpcyBh bHJlYWR5IHRoZSBmaW5hbCBsZWZ0DQorCSAqIGhhbGYpLiAgQmxvY2stMCBkYXRhIGlzOiBbbmV3 aXRlbSAobGVmdC9wb3N0aW5nKV0gW2xlZnQgaGlnaCBrZXldDQorCSAqIFtsZWZ0IHByZWZpeF0u ICBUaGUgbGVmdCBwbGFpbiBpdGVtcyBjb21lIGZyb20gdGhlIHByZS1zcGxpdCBwYWdlLg0KKwkg Ki8NCisJb3JpZ2FjdGlvbiA9IFhMb2dSZWFkQnVmZmVyRm9yUmVkbyhyZWNvcmQsIDAsICZvcmln YnVmKTsNCisJb3JpZ3BhZ2UgPSBCdWZmZXJHZXRQYWdlKG9yaWdidWYpOw0KKw0KKwlpZiAob3Jp Z2FjdGlvbiA9PSBCTEtfTkVFRFNfUkVETykNCisJew0KKwkJSW5kZXhUdXBsZSAqbGVmdGl0ZW1z Ow0KKwkJaW50CQkJbmxlZnQ7DQorCQlPZmZzZXROdW1iZXIgb3JpZ3BhZ2Vwb3N0aW5nb2ZmID0g SW52YWxpZE9mZnNldE51bWJlcjsNCisJCVBhZ2UJCWxlZnRwYWdlOw0KKwkJQlRQYWdlT3BhcXVl IGxvcGFxdWU7DQorDQorCQlvb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKG9yaWdwYWdlKTsNCisN CisJCWRhdGFwb3MgPSBYTG9nUmVjR2V0QmxvY2tEYXRhKHJlY29yZCwgMCwgJmRhdGFsZW4pOw0K KwkJaWYgKG5ld2l0ZW1vbmxlZnQgfHwgeGxyZWMtPnBvc3RpbmdvZmYgIT0gMCkNCisJCXsNCisJ CQluZXdpdGVtID0gKEluZGV4VHVwbGUpIGRhdGFwb3M7DQorCQkJbmV3aXRlbXN6ID0gTUFYQUxJ R04oSW5kZXhUdXBsZVNpemUobmV3aXRlbSkpOw0KKwkJCWRhdGFwb3MgKz0gbmV3aXRlbXN6Ow0K KwkJCWRhdGFsZW4gLT0gbmV3aXRlbXN6Ow0KKwkJfQ0KKwkJbGVmdF9oaWtleSA9IChJbmRleFR1 cGxlKSBkYXRhcG9zOw0KKwkJZGF0YXBvcyArPSBNQVhBTElHTihJbmRleFR1cGxlU2l6ZShsZWZ0 X2hpa2V5KSk7DQorCQlkYXRhbGVuIC09IE1BWEFMSUdOKEluZGV4VHVwbGVTaXplKGxlZnRfaGlr ZXkpKTsNCisJCWlmICh4bHJlYy0+bGVmdHByZWZpeGxlbiA+IDApDQorCQl7DQorCQkJbGVmdHBy ZWZpeCA9IGRhdGFwb3M7DQorCQkJZGF0YXBvcyArPSB4bHJlYy0+bGVmdHByZWZpeGxlbjsNCisJ CQlkYXRhbGVuIC09IHhscmVjLT5sZWZ0cHJlZml4bGVuOw0KKwkJfQ0KKwkJQXNzZXJ0KGRhdGFs ZW4gPT0gMCk7DQorDQorCQlpZiAoeGxyZWMtPnBvc3RpbmdvZmYgIT0gMCkNCisJCXsNCisJCQlJ dGVtSWQJCWl0ZW1pZDsNCisJCQlJbmRleFR1cGxlCW9wb3N0aW5nOw0KKwkJCUJUSXRlbUJ1Zglv YnVmOw0KKw0KKwkJCW9yaWdwYWdlcG9zdGluZ29mZiA9IE9mZnNldE51bWJlclByZXYoeGxyZWMt Pm5ld2l0ZW1vZmYpOw0KKwkJCW5ld2l0ZW0gPSBDb3B5SW5kZXhUdXBsZShuZXdpdGVtKTsNCisJ CQlpdGVtaWQgPSBQYWdlR2V0SXRlbUlkKG9yaWdwYWdlLCBvcmlncGFnZXBvc3RpbmdvZmYpOw0K KwkJCW9wb3N0aW5nID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKG9yaWdwYWdlLCBpdGVtaWQp Ow0KKwkJCWlmIChQX0hBU1BSRUZJWChvb3BhcXVlKSkNCisJCQkJb3Bvc3RpbmcgPSBfYnRfcHJl Zml4X2RlY29kZShvcmlncGFnZSwgb3Bvc3RpbmcsICZvYnVmKTsNCisJCQlucG9zdGluZyA9IF9i dF9zd2FwX3Bvc3RpbmcobmV3aXRlbSwgb3Bvc3RpbmcsIHhscmVjLT5wb3N0aW5nb2ZmKTsNCisJ CX0NCisNCisJCWxlZnRpdGVtcyA9IHBhbGxvY19hcnJheShJbmRleFR1cGxlLCBQYWdlR2V0TWF4 T2Zmc2V0TnVtYmVyKG9yaWdwYWdlKSArIDIpOw0KKwkJcmlnaHRpdGVtc1swXSA9IE5VTEw7CS8q IG5vdCByZXVzZWQgYmVsb3cgKi8NCisJCXsNCisJCQlJbmRleFR1cGxlCWR1bW15cmlnaHRbTWF4 SW5kZXhUdXBsZXNQZXJQYWdlXTsNCisJCQlpbnQJCQlkdW1teW5yOw0KKw0KKwkJCV9idF9zcGxp dF9sZWFmX2NvbGxlY3Qob3JpZ3BhZ2UsIHhscmVjLT5maXJzdHJpZ2h0b2ZmLA0KKwkJCQkJCQkJ ICAgeGxyZWMtPm5ld2l0ZW1vZmYsIG5ld2l0ZW0sIG5ld2l0ZW1vbmxlZnQsDQorCQkJCQkJCQkg ICBvcmlncGFnZXBvc3RpbmdvZmYsIG5wb3N0aW5nLA0KKwkJCQkJCQkJICAgbGVmdGl0ZW1zLCAm bmxlZnQsIGR1bW15cmlnaHQsICZkdW1teW5yKTsNCisJCX0NCisNCisJCWxlZnRwYWdlID0gUGFn ZUdldFRlbXBQYWdlQ29weVNwZWNpYWwob3JpZ3BhZ2UpOw0KKwkJbG9wYXF1ZSA9IEJUUGFnZUdl dE9wYXF1ZShsZWZ0cGFnZSk7DQorCQlsb3BhcXVlLT5idHBvX2ZsYWdzID0gQlRQX0xFQUYgfCBC VFBfSU5DT01QTEVURV9TUExJVDsNCisJCWxvcGFxdWUtPmJ0cG9fcHJldiA9IG9vcGFxdWUtPmJ0 cG9fcHJldjsNCisJCWxvcGFxdWUtPmJ0cG9fbmV4dCA9IHJpZ2h0cGFnZW51bWJlcjsNCisJCWxv cGFxdWUtPmJ0cG9fbGV2ZWwgPSB4bHJlYy0+bGV2ZWw7DQorCQlsb3BhcXVlLT5idHBvX2N5Y2xl aWQgPSAwOw0KKwkJaWYgKCFfYnRfc3BsaXRfbGVhZl9sYXlvdXQobGVmdHBhZ2UsIGxlZnRfaGlr ZXksIGxlZnRpdGVtcywgbmxlZnQsDQorCQkJCQkJCQkgICBsZWZ0cHJlZml4LCB4bHJlYy0+bGVm dHByZWZpeGxlbikpDQorCQkJZWxvZyhFUlJPUiwgImZhaWxlZCB0byByZXBsYXkgbGVmdCBoYWxm IG9mIGEgcHJlZml4IGxlYWYgc3BsaXQiKTsNCisJCVBhZ2VSZXN0b3JlVGVtcFBhZ2UobGVmdHBh Z2UsIG9yaWdwYWdlKTsNCisJCVBhZ2VTZXRMU04ob3JpZ3BhZ2UsIGxzbik7DQorCQlNYXJrQnVm ZmVyRGlydHkob3JpZ2J1Zik7DQorCQlwZnJlZShsZWZ0aXRlbXMpOw0KKwl9DQorDQorCS8qIEZp eCBsZWZ0LWxpbmsgb2YgdGhlIHBhZ2UgdG8gdGhlIHJpZ2h0IG9mIHRoZSBuZXcgcmlnaHQgc2li bGluZy4gKi8NCisJaWYgKHNwYWdlbnVtYmVyICE9IFBfTk9ORSkNCisJew0KKwkJQnVmZmVyCQlz YnVmOw0KKw0KKwkJaWYgKFhMb2dSZWFkQnVmZmVyRm9yUmVkbyhyZWNvcmQsIDIsICZzYnVmKSA9 PSBCTEtfTkVFRFNfUkVETykNCisJCXsNCisJCQlQYWdlCQlzcGFnZSA9IEJ1ZmZlckdldFBhZ2Uo c2J1Zik7DQorCQkJQlRQYWdlT3BhcXVlIHNwYWdlb3AgPSBCVFBhZ2VHZXRPcGFxdWUoc3BhZ2Up Ow0KKw0KKwkJCXNwYWdlb3AtPmJ0cG9fcHJldiA9IHJpZ2h0cGFnZW51bWJlcjsNCisJCQlQYWdl U2V0TFNOKHNwYWdlLCBsc24pOw0KKwkJCU1hcmtCdWZmZXJEaXJ0eShzYnVmKTsNCisJCX0NCisJ CWlmIChCdWZmZXJJc1ZhbGlkKHNidWYpKQ0KKwkJCVVubG9ja1JlbGVhc2VCdWZmZXIoc2J1Zik7 DQorCX0NCisNCisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihyYnVmKTsNCisJaWYgKEJ1ZmZlcklzVmFs aWQob3JpZ2J1ZikpDQorCQlVbmxvY2tSZWxlYXNlQnVmZmVyKG9yaWdidWYpOw0KK30NCisNCiBz dGF0aWMgdm9pZA0KIGJ0cmVlX3hsb2dfc3BsaXQoYm9vbCBuZXdpdGVtb25sZWZ0LCBYTG9nUmVh ZGVyU3RhdGUgKnJlY29yZCkNCiB7DQpAQCAtMjY0LDYgKzQ2NywxOCBAQCBidHJlZV94bG9nX3Nw bGl0KGJvb2wgbmV3aXRlbW9ubGVmdCwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpDQogCWlmICgh WExvZ1JlY0dldEJsb2NrVGFnRXh0ZW5kZWQocmVjb3JkLCAyLCBOVUxMLCBOVUxMLCAmc3BhZ2Vu dW1iZXIsIE5VTEwpKQ0KIAkJc3BhZ2VudW1iZXIgPSBQX05PTkU7DQogDQorCS8qDQorCSAqIEEg cHJlZml4LWNvbXByZXNzZWQgbGVhZiBzcGxpdCBpcyByZXBsYXllZCBieSByZWJ1aWxkaW5nIGJv dGggaGFsdmVzDQorCSAqIGZyb20gdGhlIHByZS1zcGxpdCBvcmlnaW5hbCBwYWdlLCBleGFjdGx5 IGFzIHRoZSBwcmltYXJ5IGRpZCwgc28gdGhlDQorCSAqIGNvZGVkIHBhZ2VzIGNvbWUgb3V0IGJ5 dGUtaWRlbnRpY2FsIHdpdGhvdXQgYSBmdWxsLXBhZ2UgaW1hZ2UuDQorCSAqLw0KKwlpZiAoeGxy ZWMtPmZsYWdzICYgWExIX1NQTElUX0xFQUZQUkVGSVgpDQorCXsNCisJCWJ0cmVlX3hsb2dfc3Bs aXRfcHJlZml4KHJlY29yZCwgb3JpZ3BhZ2VudW1iZXIsIHJpZ2h0cGFnZW51bWJlciwNCisJCQkJ CQkJCXNwYWdlbnVtYmVyLCBuZXdpdGVtb25sZWZ0KTsNCisJCXJldHVybjsNCisJfQ0KKw0KIAkv Kg0KIAkgKiBDbGVhciB0aGUgaW5jb21wbGV0ZSBzcGxpdCBmbGFnIG9uIHRoZSBhcHByb3ByaWF0 ZSBjaGlsZCBwYWdlIG9uZSBsZXZlbA0KIAkgKiBkb3duIHdoZW4gb3JpZ3BhZ2UvYnVmIGlzIGFu IGludGVybmFsIHBhZ2UgKHRoZXJlIG11c3QgaGF2ZSBiZWVuDQpAQCAtMjgwLDcgKzQ5NSw3IEBA IGJ0cmVlX3hsb2dfc3BsaXQoYm9vbCBuZXdpdGVtb25sZWZ0LCBYTG9nUmVhZGVyU3RhdGUgKnJl Y29yZCkNCiAJaWYgKCFpc2xlYWYpDQogCQlfYnRfY2xlYXJfaW5jb21wbGV0ZV9zcGxpdChyZWNv cmQsIDMpOw0KIA0KLQkvKiBSZWNvbnN0cnVjdCByaWdodCAobmV3KSBzaWJsaW5nIHBhZ2UgZnJv bSBzY3JhdGNoICovDQorCS8qIFJlY29uc3RydWN0IHJpZ2h0IChuZXcpIHNpYmxpbmcgcGFnZSBm cm9tIHRoZSBsb2dnZWQgdHVwbGVzLiAqLw0KIAlyYnVmID0gWExvZ0luaXRCdWZmZXJGb3JSZWRv KHJlY29yZCwgMSk7DQogCWRhdGFwb3MgPSBYTG9nUmVjR2V0QmxvY2tEYXRhKHJlY29yZCwgMSwg JmRhdGFsZW4pOw0KIAlycGFnZSA9IEJ1ZmZlckdldFBhZ2UocmJ1Zik7DQpAQCAtNDY4LDYgKzY4 Myw1NCBAQCBidHJlZV94bG9nX2RlZHVwKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQ0KIAkJQlRE ZWR1cFN0YXRlIHN0YXRlOw0KIAkJQlREZWR1cEludGVydmFsICppbnRlcnZhbHM7DQogCQlQYWdl CQluZXdwYWdlOw0KKwkJYm9vbAkJcGFnZXByZWZpeDsJCS8qIHNvdXJjZSBwYWdlIGlzIEJUUF9Q UkVGSVggKi8NCisJCUJUSXRlbUJ1ZgljdXJidWY7CQkJLyogZGVjb2RlIHNjcmF0Y2ggZm9yIHRo ZSBjdXJyZW50IGl0ZW0gKi8NCisJCUJUSXRlbUJ1ZgliYXNlYnVmOwkJLyogZGVjb2RlIHNjcmF0 Y2gga2VwdCBmb3IgdGhlIHBlbmRpbmcgYmFzZSAqLw0KKw0KKwkJaWYgKHhscmVjLT5wcmVmaXhs ZW4gPiAwKQ0KKwkJew0KKwkJCS8qDQorCQkJICogUHJlZml4LWRlZHVwOiB0aGUgZGVkdXBlZCBy ZXN1bHQgd2FzIGNhcnJpZWQgYXMgdGhlIGNob3NlbiBwcmVmaXgNCisJCQkgKiBieXRlcywgdGhl biAodW5sZXNzIHJpZ2h0bW9zdCkgdGhlIGhpZ2gga2V5LCB0aGVuIHRoZSBkZWR1cGVkDQorCQkJ ICogcGxhaW4gaXRlbXMuICBSZWJ1aWxkIHRoZSBjb2RlZCBwYWdlIGJ5dGUtZm9yLWJ5dGUgdGhl IHdheSB0aGUNCisJCQkgKiBwcmltYXJ5IGRpZCwgdXNpbmcgdGhlIHNhbWUgbGF5b3V0IHJvdXRp bmUgYXMgYSBwcmVmaXggbGVhZiBzcGxpdC4NCisJCQkgKi8NCisJCQlTaXplCQlkYXRhbGVuOw0K KwkJCWNoYXIJICAgKmRhdGFwb3MgPSBYTG9nUmVjR2V0QmxvY2tEYXRhKHJlY29yZCwgMCwgJmRh dGFsZW4pOw0KKwkJCWNvbnN0IGNoYXIgKnByZWZpeCA9IGRhdGFwb3M7DQorCQkJSW5kZXhUdXBs ZQloaWtleSA9IE5VTEw7DQorCQkJSW5kZXhUdXBsZQlpdGVtc1tNYXhJbmRleFR1cGxlc1BlclBh Z2VdOw0KKwkJCWludAkJCW5pdGVtcyA9IDA7DQorDQorCQkJZGF0YXBvcyArPSB4bHJlYy0+cHJl Zml4bGVuOw0KKwkJCWRhdGFsZW4gLT0geGxyZWMtPnByZWZpeGxlbjsNCisJCQlpZiAoeGxyZWMt PmZsYWdzICYgWExIX0RFRFVQX05PVF9SSUdIVE1PU1QpDQorCQkJew0KKwkJCQloaWtleSA9IChJ bmRleFR1cGxlKSBkYXRhcG9zOw0KKwkJCQlkYXRhcG9zICs9IE1BWEFMSUdOKEluZGV4VHVwbGVT aXplKGhpa2V5KSk7DQorCQkJCWRhdGFsZW4gLT0gTUFYQUxJR04oSW5kZXhUdXBsZVNpemUoaGlr ZXkpKTsNCisJCQl9DQorCQkJd2hpbGUgKGRhdGFsZW4gPiAwKQ0KKwkJCXsNCisJCQkJSW5kZXhU dXBsZQlpdCA9IChJbmRleFR1cGxlKSBkYXRhcG9zOw0KKwkJCQlTaXplCQlzeiA9IE1BWEFMSUdO KEluZGV4VHVwbGVTaXplKGl0KSk7DQorDQorCQkJCWl0ZW1zW25pdGVtcysrXSA9IGl0Ow0KKwkJ CQlkYXRhcG9zICs9IHN6Ow0KKwkJCQlkYXRhbGVuIC09IHN6Ow0KKwkJCX0NCisNCisJCQluZXdw YWdlID0gUGFnZUdldFRlbXBQYWdlQ29weVNwZWNpYWwocGFnZSk7DQorCQkJQlRQYWdlR2V0T3Bh cXVlKG5ld3BhZ2UpLT5idHBvX2ZsYWdzICY9IH4oQlRQX1BSRUZJWCB8IEJUUF9IQVNfR0FSQkFH RSk7DQorCQkJaWYgKCFfYnRfc3BsaXRfbGVhZl9sYXlvdXQobmV3cGFnZSwgaGlrZXksIGl0ZW1z LCBuaXRlbXMsDQorCQkJCQkJCQkJICAgcHJlZml4LCB4bHJlYy0+cHJlZml4bGVuKSkNCisJCQkJ ZWxvZyhFUlJPUiwgImZhaWxlZCB0byByZXBsYXkgcHJlZml4IGRlZHVwbGljYXRpb24iKTsNCisJ CQlQYWdlUmVzdG9yZVRlbXBQYWdlKG5ld3BhZ2UsIHBhZ2UpOw0KKwkJCVBhZ2VTZXRMU04ocGFn ZSwgbHNuKTsNCisJCQlNYXJrQnVmZmVyRGlydHkoYnVmKTsNCisJCQlVbmxvY2tSZWxlYXNlQnVm ZmVyKGJ1Zik7DQorCQkJcmV0dXJuOw0KKwkJfQ0KIA0KIAkJc3RhdGUgPSBwYWxsb2Nfb2JqZWN0 KEJURGVkdXBTdGF0ZURhdGEpOw0KIAkJc3RhdGUtPmRlZHVwbGljYXRlID0gdHJ1ZTsJLyogdW51 c2VkICovDQpAQCAtNDg3LDYgKzc1MCwxOSBAQCBidHJlZV94bG9nX2RlZHVwKFhMb2dSZWFkZXJT dGF0ZSAqcmVjb3JkKQ0KIAkJbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsN CiAJCW5ld3BhZ2UgPSBQYWdlR2V0VGVtcFBhZ2VDb3B5U3BlY2lhbChwYWdlKTsNCiANCisJCS8q DQorCQkgKiBUaGUgc291cmNlIHBhZ2UgbWF5IGJlIHByZWZpeC1jb21wcmVzc2VkIGV2ZW4gb24g dGhlIG9yZGluYXJ5DQorCQkgKiAobm9uLXByZWZpeCkgZGVkdXAgcGF0aDogdGhhdCBoYXBwZW5z IHdoZW4gdGhlIHByaW1hcnkgZGVkdXBsaWNhdGVkDQorCQkgKiBhIHByZWZpeCBwYWdlIGJ1dCBy ZS1jb21wcmVzc2lvbiBvZiB0aGUgcmVzdWx0IGRlY2xpbmVkLCBsZWF2aW5nIGENCisJCSAqIHBs YWluIHBhZ2UgKHByZWZpeGxlbiA9PSAwLCBubyBmdWxsLXBhZ2UgaW1hZ2UpLiAgUmVwcm9kdWNl IHRoZQ0KKwkJICogcHJpbWFyeTogbGF5IHRoZSByZXN1bHQgb3V0IHBsYWluIGFuZCBkZWNvZGUg ZWFjaCBjb2RlZCBkYXRhIGl0ZW0NCisJCSAqIGJlZm9yZSBmZWVkaW5nIGl0IHRvIHRoZSBkZWR1 cCBzdGF0ZSBtYWNoaW5lLiAgVGhlIGhpZ2gga2V5IGlzIGENCisJCSAqIHBpdm90IGFuZCBpcyBu ZXZlciBjb2RlZC4NCisJCSAqLw0KKwkJcGFnZXByZWZpeCA9IFBfSEFTUFJFRklYKG9wYXF1ZSk7 DQorCQlpZiAocGFnZXByZWZpeCkNCisJCQlCVFBhZ2VHZXRPcGFxdWUobmV3cGFnZSktPmJ0cG9f ZmxhZ3MgJj0gfkJUUF9QUkVGSVg7DQorDQogCQlpZiAoIVBfUklHSFRNT1NUKG9wYXF1ZSkpDQog CQl7DQogCQkJSXRlbUlkCQlpdGVtaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIFBfSElLRVkpOw0K QEAgLTUwNSw4ICs3ODEsMTggQEAgYnRyZWVfeGxvZ19kZWR1cChYTG9nUmVhZGVyU3RhdGUgKnJl Y29yZCkNCiAJCQlJdGVtSWQJCWl0ZW1pZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgb2ZmbnVtKTsN CiAJCQlJbmRleFR1cGxlCWl0dXAgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaXRl bWlkKTsNCiANCisJCQkvKiBEZWNvZGUgb24gYSBwcmVmaXggc291cmNlIHNvIGtleXMvcG9zdGlu ZyBsaXN0cyBhcmUgcmVhbC4gKi8NCisJCQlpZiAocGFnZXByZWZpeCkNCisJCQkJaXR1cCA9IF9i dF9wcmVmaXhfZGVjb2RlKHBhZ2UsIGl0dXAsICZjdXJidWYpOw0KKw0KIAkJCWlmIChvZmZudW0g PT0gbWlub2ZmKQ0KKwkJCXsNCisJCQkJLyogYmFzZSBtdXN0IHN1cnZpdmUgdGhlIHdob2xlIHJ1 bjsga2VlcCBpdCBpbiBpdHMgb3duIGJ1ZmZlciAqLw0KKwkJCQlpZiAocGFnZXByZWZpeCkNCisJ CQkJCWl0dXAgPSBfYnRfcHJlZml4X2RlY29kZShwYWdlLCAoSW5kZXhUdXBsZSkgUGFnZUdldEl0 ZW0ocGFnZSwgaXRlbWlkKSwNCisJCQkJCQkJCQkJCSAmYmFzZWJ1Zik7DQogCQkJCV9idF9kZWR1 cF9zdGFydF9wZW5kaW5nKHN0YXRlLCBpdHVwLCBvZmZudW0pOw0KKwkJCX0NCiAJCQllbHNlIGlm IChzdGF0ZS0+bmludGVydmFscyA8IHhscmVjLT5uaW50ZXJ2YWxzICYmDQogCQkJCQkgc3RhdGUt PmJhc2VvZmYgPT0gaW50ZXJ2YWxzW3N0YXRlLT5uaW50ZXJ2YWxzXS5iYXNlb2ZmICYmDQogCQkJ CQkgc3RhdGUtPm5pdGVtcyA8IGludGVydmFsc1tzdGF0ZS0+bmludGVydmFsc10ubml0ZW1zKQ0K QEAgLTUxNiwxMiArODAyLDE1IEBAIGJ0cmVlX3hsb2dfZGVkdXAoWExvZ1JlYWRlclN0YXRlICpy ZWNvcmQpDQogCQkJfQ0KIAkJCWVsc2UNCiAJCQl7DQotCQkJCV9idF9kZWR1cF9maW5pc2hfcGVu ZGluZyhuZXdwYWdlLCBzdGF0ZSk7DQorCQkJCV9idF9kZWR1cF9maW5pc2hfcGVuZGluZyhuZXdw YWdlLCBzdGF0ZSwgZmFsc2UpOw0KKwkJCQlpZiAocGFnZXByZWZpeCkNCisJCQkJCWl0dXAgPSBf YnRfcHJlZml4X2RlY29kZShwYWdlLCAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaXRl bWlkKSwNCisJCQkJCQkJCQkJCSAmYmFzZWJ1Zik7DQogCQkJCV9idF9kZWR1cF9zdGFydF9wZW5k aW5nKHN0YXRlLCBpdHVwLCBvZmZudW0pOw0KIAkJCX0NCiAJCX0NCiANCi0JCV9idF9kZWR1cF9m aW5pc2hfcGVuZGluZyhuZXdwYWdlLCBzdGF0ZSk7DQorCQlfYnRfZGVkdXBfZmluaXNoX3BlbmRp bmcobmV3cGFnZSwgc3RhdGUsIGZhbHNlKTsNCiAJCUFzc2VydChzdGF0ZS0+bmludGVydmFscyA9 PSB4bHJlYy0+bmludGVydmFscyk7DQogCQlBc3NlcnQobWVtY21wKHN0YXRlLT5pbnRlcnZhbHMs IGludGVydmFscywNCiAJCQkJCSAgc3RhdGUtPm5pbnRlcnZhbHMgKiBzaXplb2YoQlREZWR1cElu dGVydmFsKSkgPT0gMCk7DQpAQCAtNjIxLDExICs5MTAsMjMgQEAgYnRyZWVfeGxvZ192YWN1dW0o WExvZ1JlYWRlclN0YXRlICpyZWNvcmQpDQogCQlpZiAoeGxyZWMtPm5kZWxldGVkID4gMCkNCiAJ CQlQYWdlSW5kZXhNdWx0aURlbGV0ZShwYWdlLCAoT2Zmc2V0TnVtYmVyICopIHB0ciwgeGxyZWMt Pm5kZWxldGVkKTsNCiANCisJCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsNCisNCisJ CS8qDQorCQkgKiBNaXJyb3IgdGhlIHByaW1hcnk6IGFuIGVtcHRpZWQgcHJlZml4LWNvbXByZXNz ZWQgbGVhZiBkcm9wcyBpdHMNCisJCSAqIFBSRUZJWCBpdGVtIGFuZCB0aGUgQlRQX1BSRUZJWCBm bGFnIChzZWUgX2J0X2RlbGl0ZW1zX3ZhY3V1bSkuDQorCQkgKi8NCisJCWlmIChQX0hBU1BSRUZJ WChvcGFxdWUpICYmDQorCQkJUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKSA9PSBCVFBhZ2VH ZXRQcmVmaXhPZmYob3BhcXVlKSkNCisJCXsNCisJCQlQYWdlSW5kZXhUdXBsZURlbGV0ZShwYWdl LCBCVFBhZ2VHZXRQcmVmaXhPZmYob3BhcXVlKSk7DQorCQkJb3BhcXVlLT5idHBvX2ZsYWdzICY9 IH5CVFBfUFJFRklYOw0KKwkJfQ0KKw0KIAkJLyoNCiAJCSAqIENsZWFyIHRoZSB2YWN1dW0gY3lj bGUgSUQsIGFuZCBtYXJrIHRoZSBwYWdlIGFzIG5vdCBjb250YWluaW5nIGFueQ0KIAkJICogTFBf REVBRCBpdGVtcw0KIAkJICovDQotCQlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7DQog CQlvcGFxdWUtPmJ0cG9fY3ljbGVpZCA9IDA7DQogCQlvcGFxdWUtPmJ0cG9fZmxhZ3MgJj0gfkJU UF9IQVNfR0FSQkFHRTsNCiANCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVl LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgNCmluZGV4IDMwOTdlOWJiMWFmLi5jYTdl Njg1MjU0MiAxMDA2NDQNCi0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaA0KKysrIGIv c3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oDQpAQCAtODMsNiArODMsOCBAQCB0eXBlZGVmIEJU UGFnZU9wYXF1ZURhdGEgKkJUUGFnZU9wYXF1ZTsNCiAjZGVmaW5lIEJUUF9IQVNfR0FSQkFHRSAo MSA8PCA2KQkvKiBwYWdlIGhhcyBMUF9ERUFEIHR1cGxlcyAoZGVwcmVjYXRlZCkgKi8NCiAjZGVm aW5lIEJUUF9JTkNPTVBMRVRFX1NQTElUICgxIDw8IDcpCS8qIHJpZ2h0IHNpYmxpbmcncyBkb3du bGluayBpcyBtaXNzaW5nICovDQogI2RlZmluZSBCVFBfSEFTX0ZVTExYSUQJKDEgPDwgOCkJLyog Y29udGFpbnMgQlREZWxldGVkUGFnZURhdGEgKi8NCisjZGVmaW5lIEJUUF9QUkVGSVgJCSgxIDw8 IDkpCS8qIGxlYWYga2V5cyBjb2RlZCBhZ2FpbnN0IGEgcGFnZSBwcmVmaXgNCisJCQkJCQkJCQkg KiAoc2VlIG5idHByZWZpeC5jKSAqLw0KIA0KIC8qDQogICogVGhlIG1heCBhbGxvd2VkIHZhbHVl IG9mIGEgY3ljbGUgSUQgaXMgYSBiaXQgbGVzcyB0aGFuIDY0Sy4gIFRoaXMgaXMNCkBAIC0zNjcs NyArMzY5LDYxIEBAIHR5cGVkZWYgc3RydWN0IEJUVmFjU3RhdGUNCiANCiAjZGVmaW5lIFBfSElL RVkJCQkJKChPZmZzZXROdW1iZXIpIDEpDQogI2RlZmluZSBQX0ZJUlNUS0VZCQkJKChPZmZzZXRO dW1iZXIpIDIpDQotI2RlZmluZSBQX0ZJUlNUREFUQUtFWShvcGFxdWUpCShQX1JJR0hUTU9TVChv cGFxdWUpID8gUF9ISUtFWSA6IFBfRklSU1RLRVkpDQorDQorLyoNCisgKiBMZWFmIGtleSBwcmVm aXggY29tcHJlc3Npb24gKHNlZSBuYnRwcmVmaXguYyBmb3IgdGhlIGZvcm1hdCBhbmQgY29kZSku DQorICoNCisgKiBBIGxlYWYgb2YgYW4gaW5kZXggd2hvc2UgcHJlZml4X2NvbXByZXNzaW9uIHJl bG9wdGlvbiBpcyBvbiwgYW5kIHdob3NlDQorICogZmlyc3Qga2V5IGNvbHVtbiBpcyBvZiBhIHZh cmxlbmEgdHlwZSwgbWF5IGJlIGZsYWdnZWQgQlRQX1BSRUZJWC4gIFN1Y2ggYQ0KKyAqIHBhZ2Ug aG9sZHMgb25lIGV4dHJhIGl0ZW0sIHRoZSBQUkVGSVggaXRlbSwgYXQgQlRQYWdlR2V0UHJlZml4 T2ZmICh3aGVyZQ0KKyAqIGl0cyBmaXJzdCBkYXRhIGl0ZW0gd291bGQgb3RoZXJ3aXNlIGJlKTsg aXRzIGRhdGEgaXRlbXMgc3RhcnQgb25lIG9mZnNldA0KKyAqIGxhdGVyLCBzbyBQX0ZJUlNUREFU QUtFWSAtLSB3aGljaCBldmVyeSBsb29wIG92ZXIgYSBwYWdlJ3MgZGF0YSBpdGVtcw0KKyAqIHN0 YXJ0cyBmcm9tIC0tIGFjY291bnRzIGZvciB0aGUgZmxhZy4gIFRoZSBQUkVGSVggaXRlbSBpcyBh bg0KKyAqIEluZGV4VHVwbGVEYXRhIGhlYWRlciAodF90aWQgemVybywgdF9pbmZvIGl0cyBzaXpl IGFuZCBub3RoaW5nIGVsc2UsIHNvDQorICogdGhhdCBjb2RlIHdhbGtpbmcgYSBwYWdlJ3MgaXRl bXMgYnkgSW5kZXhUdXBsZVNpemUsIHN1Y2ggYXMgc3BsaXQgcmVkbywNCisgKiBzdGVwcyBvdmVy IGl0KSBmb2xsb3dlZCBieSAxLi5CVFJFRV9QUkVGSVhfTUFYIHByZWZpeCBieXRlcy4gIFRoZSBw cmVmaXggaXMNCisgKiBjaG9zZW4gb25seSB3aGVuIGEgcGFnZSBpcyB3cml0dGVuIHdob2xlIChD UkVBVEUgSU5ERVgsIG9yIGEgaGFsZiBvZiBhDQorICogc3BsaXQpIGFuZCBuZXZlciBjaGFuZ2Vz IGFmdGVyIHRoYXQ7IGEgcGFnZSdzIGhpZ2gga2V5LCB3aGljaCBmaXhlcyB0aGUNCisgKiBwcmVm aXggaXRlbSdzIG9mZnNldCwgYWxzbyBjaGFuZ2VzIG9ubHkgaW4gYSBzcGxpdC4NCisgKg0KKyAq IE9uIGEgQlRQX1BSRUZJWCBwYWdlLCBldmVyeSBub24tcGl2b3QgdHVwbGUgKHBsYWluIG9yIHBv c3RpbmcpIHdob3NlIGZpcnN0DQorICoga2V5IGNvbHVtbiBpcyBub3QgTlVMTCBzdG9yZXMgdGhh dCBjb2x1bW4gY29kZWQsIGFzIGEgdmFybGVuYSAoMS1ieXRlDQorICogaGVhZGVyIHdoZW4gaXQg Zml0cyBvbmUsIGVsc2UgNC1ieXRlKSB3aG9zZSBwYXlsb2FkIHN0YXJ0cyB3aXRoIGEgdWludDgN CisgKiBgc2hhcmVkJzoNCisgKg0KKyAqICAgc2hhcmVkIDw9IEJUUkVFX1BSRUZJWF9NQVg6IHRo ZSB2YWx1ZSdzIGRhdGEgYnl0ZXMgYXJlIHRoZSBwYWdlIHByZWZpeCdzDQorICoJCQkJZmlyc3Qg YHNoYXJlZCcgYnl0ZXMgZm9sbG93ZWQgYnkgdGhlIHJlc3Qgb2YgdGhlIHBheWxvYWQuDQorICoJ CQkJVGhlIHZhbHVlJ3Mgb3duIHZhcmxlbmEgaGVhZGVyIGlzIHJlY29tcHV0ZWQgb24gZGVjb2Rl ICh0aGUNCisgKgkJCQlmb3JtIGluZGV4X2Zvcm1fdHVwbGUgZ2l2ZXMgaXQ6IDEtYnl0ZSB3aGVu IGl0IGZpdHMsIGVsc2UNCisgKgkJCQk0LWJ5dGUgdW5jb21wcmVzc2VkKS4NCisgKiAgIHNoYXJl ZCA9PSBCVFJFRV9QUkVGSVhfUkFXOiB0aGUgcmVzdCBvZiB0aGUgcGF5bG9hZCBpcyB0aGUgdmFs dWUgZXhhY3RseQ0KKyAqCQkJCWFzIHN0b3JlZCwgaGVhZGVyIGluY2x1ZGVkLiAgVXNlZCBmb3Ig YSB2YWx1ZSBjb21wcmVzc2VkDQorICoJCQkJaW5saW5lLCBvciB3aG9zZSBoZWFkZXIgaXMgbm90 IHRoZSBjYW5vbmljYWwgZm9ybSBhYm92ZS4NCisgKg0KKyAqIFRoZSBieXRlcyBhZnRlciB0aGUg Zmlyc3QgY29sdW1uIChsYXRlciBrZXkgY29sdW1ucywgSU5DTFVERSBjb2x1bW5zLCB0aGUNCisg KiBwb3N0aW5nIGxpc3QsIGFuZCBhbGlnbm1lbnQgcGFkZGluZykgYXJlIGtlcHQgYXMgdGhleSBh cmUsIG1vdmVkIHRvIGtlZXANCisgKiB0aGVpciBhbGlnbm1lbnQsIG9yIGxlZnQgb3V0IHdoZW4g dGhleSBhcmUgb25seSB0aGUga2V5J3MgY2xvc2luZyB6ZXJvDQorICogcGFkZGluZyAoZGVjb2Rl IHB1dHMgdGhlbSBiYWNrKS4gIEEgcG9zdGluZyBsaXN0IGZvbGxvd3MgdGhlIGtleSBhdCB0aGUg bmV3DQorICoga2V5IGVuZCwgYW5kIHRoZSBwb3N0aW5nIG9mZnNldCBpbiB0X3RpZCBpcyBjaGFu Z2VkIHRvIG1hdGNoLiAgUGl2b3RzLCBOVUxMDQorICogZmlyc3QgY29sdW1ucywgYW5kIHRoZSBo aWdoIGtleSBhcmUgc3RvcmVkIGFzIG9uIGFueSBvdGhlciBwYWdlLg0KKyAqDQorICogQ29kaW5n IGFuZCBkZWNvZGluZyBkZXBlbmQgb25seSBvbiB0aGUgcGFnZSdzIHByZWZpeCBhbmQgdGhlIHR1 cGxlLCBub3Qgb24NCisgKiB0aGUgY2F0YWxvZywgc28gV0FMIHJlZG8gY2FuIHJlcGVhdCB0aGVt LCBhbmQgZGVjb2RpbmcgZ2l2ZXMgYmFjayB0aGUgcGxhaW4NCisgKiB0dXBsZSBieXRlIGZvciBi eXRlLg0KKyAqLw0KKyNkZWZpbmUgQlRSRUVfUFJFRklYX01BWAkJMTI2DQorI2RlZmluZSBCVFJF RV9QUkVGSVhfUkFXCQkxMjcJLyogc2hhcmVkIGNvdW50IG9mIGEgcmF3IHZhbHVlICovDQorI2Rl ZmluZSBCVFJFRV9QUkVGSVhfU0hBUkVEX01BU0sgMHg3RgkvKiBzaGFyZWQgY291bnQgYml0cyAq Lw0KKyNkZWZpbmUgQlRSRUVfUFJFRklYX1JFU1QJCTB4ODAJLyogYnl0ZXMgYWZ0ZXIgdGhlIGNv bHVtbiBmb2xsb3cgKi8NCisNCisvKiBBIGxlYWYgd2hvc2UgdHVwbGVzIHNoYXJlIGxlc3Mgb2Yg aXRzIHByZWZpeCB0aGFuIHRoaXMsIG9uIGF2ZXJhZ2UsIGhhcyBub25lLiAqLw0KKyNkZWZpbmUg QlRSRUVfUFJFRklYX01JTl9TSEFSRUQJNA0KKw0KKyNkZWZpbmUgUF9IQVNQUkVGSVgob3BhcXVl KQkJKCgob3BhcXVlKS0+YnRwb19mbGFncyAmIEJUUF9QUkVGSVgpICE9IDApDQorI2RlZmluZSBC VFBhZ2VHZXRQcmVmaXhPZmYob3BhcXVlKSBcDQorCShQX1JJR0hUTU9TVChvcGFxdWUpID8gUF9I SUtFWSA6IFBfRklSU1RLRVkpDQorI2RlZmluZSBQX0ZJUlNUREFUQUtFWShvcGFxdWUpIFwNCisJ KEJUUGFnZUdldFByZWZpeE9mZihvcGFxdWUpICsgKFBfSEFTUFJFRklYKG9wYXF1ZSkgPyAxIDog MCkpDQogDQogLyoNCiAgKiBOb3RlcyBvbiBCLVRyZWUgdHVwbGUgZm9ybWF0LCBhbmQga2V5IGFu ZCBub24ta2V5IGF0dHJpYnV0ZXM6DQpAQCAtNjc2LDYgKzczMiwzNiBAQCBCVHJlZVR1cGxlR2V0 TWF4SGVhcFRJRChJbmRleFR1cGxlIGl0dXApDQogCXJldHVybiAmaXR1cC0+dF90aWQ7DQogfQ0K IA0KKy8qDQorICogTGVhZiBrZXkgcHJlZml4IGNvbXByZXNzaW9uIChzZWUgbmJ0cHJlZml4LmMg Zm9yIHRoZSBmb3JtYXQpLg0KKyAqDQorICogV29ya3NwYWNlIGZvciBfYnRfZ2V0aXRlbS4gIEV2 ZXJ5IHJlYWQgb2YgYSBsZWFmIERBVEEgaXRlbSAoYW55IGl0ZW0gYnV0DQorICogdGhlIGhpZ2gg a2V5IG9yIGEgcGl2b3QpIHRoYXQgY291bGQgYmUgb24gYSBCVFBfUFJFRklYIHBhZ2UgZ29lcyB0 aHJvdWdoDQorICogdGhhdCBmdW5jdGlvbiByYXRoZXIgdGhhbiBiYXJlIFBhZ2VHZXRJdGVtLCBz byBkZWNvZGluZyBoYXMgb25lIGhvbWUuICBUaGUNCisgKiB3b3Jrc3BhY2UgaG9sZHMgYSBkZWNv ZGVkIGNvcHk7IHRoZSByZXR1cm5lZCB0dXBsZSBpcyB2YWxpZCB1bnRpbCB0aGUNCisgKiB3b3Jr c3BhY2UgaXMgcmV1c2VkIG9yIHRoZSBwYWdlIGlzIHVubG9ja2VkLiAgSGlnaCBrZXlzIGFuZCBw aXZvdHMsIGFuZA0KKyAqIGl0ZW1zIGEgY2FsbGVyIGNoYW5nZXMgaW4gcGxhY2UsIGFyZSByZWFk IHdpdGggUGFnZUdldEl0ZW0uDQorICovDQordHlwZWRlZiBQR0FsaWduZWRCbG9jayBCVEl0ZW1C dWY7DQorDQorZXh0ZXJuIEluZGV4VHVwbGUgX2J0X3ByZWZpeF9kZWNvZGUoUGFnZSBwYWdlLCBJ bmRleFR1cGxlIGl0dXAsIEJUSXRlbUJ1ZiAqYnVmKTsNCisNCisvKg0KKyAqIFJldHVybiB0aGUg ZGF0YSBpdGVtIGF0IGBvZmZudW0nIG9uIGBwYWdlJyBhcyBhIHBsYWluIEluZGV4VHVwbGU6IG9u IGENCisgKiBCVFBfUFJFRklYIHBhZ2UsIHRoZSB0dXBsZSBkZWNvZGVkIGludG8gYGJ1Zic7IG90 aGVyd2lzZSB0aGUgb24tcGFnZSB0dXBsZSwNCisgKiBhbmQgYGJ1ZicgaXMgbm90IHVzZWQuICBD YWxsZXJzIG11c3Qgbm90IHdyaXRlIHRocm91Z2ggdGhlIHJlc3VsdC4NCisgKi8NCitzdGF0aWMg aW5saW5lIEluZGV4VHVwbGUNCitfYnRfZ2V0aXRlbShQYWdlIHBhZ2UsIE9mZnNldE51bWJlciBv ZmZudW0sIEJUSXRlbUJ1ZiAqYnVmKQ0KK3sNCisJSW5kZXhUdXBsZQlpdHVwID0gKEluZGV4VHVw bGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIFBhZ2VHZXRJdGVtSWQocGFnZSwgb2ZmbnVtKSk7DQorCUJU UGFnZU9wYXF1ZSBvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7DQorDQorCWlmICh1bmxp a2VseShQX0hBU1BSRUZJWChvcGFxdWUpKSAmJiBvZmZudW0gPiBCVFBhZ2VHZXRQcmVmaXhPZmYo b3BhcXVlKSkNCisJCXJldHVybiBfYnRfcHJlZml4X2RlY29kZShwYWdlLCBpdHVwLCBidWYpOw0K KwlyZXR1cm4gaXR1cDsNCit9DQorDQogLyoNCiAgKglPcGVyYXRvciBzdHJhdGVneSBudW1iZXJz IGZvciBCLXRyZWUgaGF2ZSBiZWVuIG1vdmVkIHRvIGFjY2Vzcy9zdHJhdG51bS5oLA0KICAqCWJl Y2F1c2UgbWFueSBwbGFjZXMgbmVlZCB0byB1c2UgdGhlbSBpbiBTY2FuS2V5SW5pdCgpIGNhbGxz Lg0KQEAgLTExMjIsNiArMTIwOCw3IEBAIHR5cGVkZWYgc3RydWN0IEJUT3B0aW9ucw0KIAlpbnQJ CQlmaWxsZmFjdG9yOwkJLyogcGFnZSBmaWxsIGZhY3RvciBpbiBwZXJjZW50ICgwLi4xMDApICov DQogCWZsb2F0OAkJdmFjdXVtX2NsZWFudXBfaW5kZXhfc2NhbGVfZmFjdG9yOwkvKiBkZXByZWNh dGVkICovDQogCWJvb2wJCWRlZHVwbGljYXRlX2l0ZW1zOwkvKiBUcnkgdG8gZGVkdXBsaWNhdGUg aXRlbXM/ICovDQorCWJvb2wJCXByZWZpeF9jb21wcmVzc2lvbjsgLyogQ29kZSBsZWFmIGtleXMg YWdhaW5zdCBhIHBhZ2UgcHJlZml4PyAqLw0KIH0gQlRPcHRpb25zOw0KIA0KICNkZWZpbmUgQlRH ZXRGaWxsRmFjdG9yKHJlbGF0aW9uKSBcDQpAQCAtMTEzNyw2ICsxMjI0LDMzIEBAIHR5cGVkZWYg c3RydWN0IEJUT3B0aW9ucw0KIAkJCQkgcmVsYXRpb24tPnJkX3JlbC0+cmVsYW0gPT0gQlRSRUVf QU1fT0lEKSwgXA0KIAkoKHJlbGF0aW9uKS0+cmRfb3B0aW9ucyA/IFwNCiAJICgoQlRPcHRpb25z ICopIChyZWxhdGlvbiktPnJkX29wdGlvbnMpLT5kZWR1cGxpY2F0ZV9pdGVtcyA6IHRydWUpKQ0K KyNkZWZpbmUgQlRHZXRQcmVmaXhDb21wcmVzc2lvbihyZWxhdGlvbikgXA0KKwkoQXNzZXJ0TWFj cm8ocmVsYXRpb24tPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX0lOREVYICYmIFwNCisJCQkJ IHJlbGF0aW9uLT5yZF9yZWwtPnJlbGFtID09IEJUUkVFX0FNX09JRCksIFwNCisJKChyZWxhdGlv biktPnJkX29wdGlvbnMgPyBcDQorCSAoKEJUT3B0aW9ucyAqKSAocmVsYXRpb24pLT5yZF9vcHRp b25zKS0+cHJlZml4X2NvbXByZXNzaW9uIDogZmFsc2UpKQ0KKw0KKy8qDQorICogU2l6ZSBvZiBv bmUgaGFsZiAoY3VyclR1cGxlcyBvciBtYXJrVHVwbGVzKSBvZiBhbiBpbmRleC1vbmx5IHNjYW4n cyB0dXBsZQ0KKyAqIHN0b3JhZ2UuICBBIHBsYWluIGxlYWYncyBsaXZlIG5vbi1waXZvdCB0dXBs ZXMgZml0IGluIG9uZSBwYWdlLCBzbyBCTENLU1oNCisgKiB3b3VsZCBzdWZmaWNlIGZvciB0aGVt LiAgQSBwcmVmaXgtY29tcHJlc3NlZCAoQlRQX1BSRUZJWCkgbGVhZiBjYW4gaG9sZCBtb3JlDQor ICogbG9naWNhbCBkYXRhIHRoYW4gZml0cyBwbGFpbjogd2hlbiBpdHMgdHVwbGVzIGFyZSBkZWNv ZGVkIGZvciB0aGUgc2NhbiB0aGV5DQorICogY2FuIGV4Y2VlZCBCTENLU1ouICBCZWNhdXNlIF9i dF9nZXRpdGVtKCkgZGVjb2RlcyBiYXNlZCBvbiB0aGUgcGFnZSBmbGFnLA0KKyAqIG5vdCBvbiB0 aGUgY3VycmVudCByZWxvcHRpb24sIGFuZCBhIEJUUF9QUkVGSVggcGFnZSBjYW4gcGVyc2lzdCBh ZnRlcg0KKyAqIHByZWZpeF9jb21wcmVzc2lvbiBpcyB0dXJuZWQgb2ZmICh0aGUgZmxhZyBpcyBj bGVhcmVkIG9ubHkgd2hlbiBhIHBhZ2UgaXMNCisgKiBzcGxpdCwgZW1wdGllZCBvciBkZWR1cC1y ZXdyaXR0ZW4gLS0gbmV2ZXIgYnkgQUxURVIgSU5ERVgpLCBBTlkgYnRyZWUgaW5kZXgNCisgKiBt YXkgY29udGFpbiBzdWNoIGEgcGFnZS4gIFRoZSBidWZmZXIgbXVzdCB0aGVyZWZvcmUgYWx3YXlz IHJlc2VydmUgdGhlIHNsYWNrDQorICogZm9yIGEgZGVjb2RlZCBwYWdlLCBpbmRlcGVuZGVudCBv ZiB0aGUgbGl2ZSByZWxvcHRpb247IHNpemluZyBpdCBvbiB0aGUNCisgKiBvcHRpb24gd291bGQg b3ZlcmZsb3cgY3VyclR1cGxlcy9tYXJrVHVwbGVzIG9uIGEgc3Vydml2aW5nIHByZWZpeCBsZWFm Lg0KKyAqDQorICogVGhlIGJvdW5kIGlzIHRoZSBtb3N0IGRpc3RpbmN0IGluZGV4IHR1cGxlcyBh IGxlYWYgY2FuIGhvbGQgKGVhY2ggYXQgbGVhc3QgYQ0KKyAqIGxpbmUgcG9pbnRlciBwbHVzIGEg bWluaW1hbGx5IGNvZGVkIHR1cGxlKSB0aW1lcyB0aGUgbW9zdCBhIHNpbmdsZSBmaXJzdA0KKyAq IGNvbHVtbiBjYW4gcmVnYWluIG9uIGRlY29kZSAodGhlIHBhZ2UgcHJlZml4LCBhdCBtb3N0IEJU UkVFX1BSRUZJWF9NQVgNCisgKiBieXRlcywgTUFYQUxJR05lZCkuDQorICovDQorI2RlZmluZSBC VFR1cGxlU3RvcmFnZVNpemUocmVsYXRpb24pIFwNCisJKEJMQ0tTWiArIChCTENLU1ogLyAoaW50 KSBNQVhBTElHTihzaXplb2YoSW5kZXhUdXBsZURhdGEpICsgMikpICogXA0KKwkgKGludCkgTUFY QUxJR04oQlRSRUVfUFJFRklYX01BWCkpDQogDQogLyoNCiAgKiBDb25zdGFudCBkZWZpbml0aW9u IGZvciBwcm9ncmVzcyByZXBvcnRpbmcuICBQaGFzZSBudW1iZXJzIG11c3QgbWF0Y2gNCkBAIC0x MjAyLDcgKzEzMTYsOCBAQCBleHRlcm4gYm9vbCBfYnRfYm90dG9tdXBkZWxfcGFzcyhSZWxhdGlv biByZWwsIEJ1ZmZlciBidWYsIFJlbGF0aW9uIGhlYXBSZWwsDQogZXh0ZXJuIHZvaWQgX2J0X2Rl ZHVwX3N0YXJ0X3BlbmRpbmcoQlREZWR1cFN0YXRlIHN0YXRlLCBJbmRleFR1cGxlIGJhc2UsDQog CQkJCQkJCQkJT2Zmc2V0TnVtYmVyIGJhc2VvZmYpOw0KIGV4dGVybiBib29sIF9idF9kZWR1cF9z YXZlX2h0aWQoQlREZWR1cFN0YXRlIHN0YXRlLCBJbmRleFR1cGxlIGl0dXApOw0KLWV4dGVybiBT aXplIF9idF9kZWR1cF9maW5pc2hfcGVuZGluZyhQYWdlIG5ld3BhZ2UsIEJURGVkdXBTdGF0ZSBz dGF0ZSk7DQorZXh0ZXJuIFNpemUgX2J0X2RlZHVwX2ZpbmlzaF9wZW5kaW5nKFBhZ2UgbmV3cGFn ZSwgQlREZWR1cFN0YXRlIHN0YXRlLA0KKwkJCQkJCQkJCWJvb2wgb3ZlcmZsb3dvayk7DQogZXh0 ZXJuIEluZGV4VHVwbGUgX2J0X2Zvcm1fcG9zdGluZyhJbmRleFR1cGxlIGJhc2UsIGNvbnN0IEl0 ZW1Qb2ludGVyRGF0YSAqaHRpZHMsDQogCQkJCQkJCQkgICBpbnQgbmh0aWRzKTsNCiBleHRlcm4g dm9pZCBfYnRfdXBkYXRlX3Bvc3RpbmcoQlRWYWN1dW1Qb3N0aW5nIHZhY3Bvc3RpbmcpOw0KQEAg LTEzMTUsNiArMTQzMCwzNCBAQCBleHRlcm4gdm9pZCBfYnRfY2hlY2tfdGhpcmRfcGFnZShSZWxh dGlvbiByZWwsIFJlbGF0aW9uIGhlYXAsDQogCQkJCQkJCQkgYm9vbCBuZWVkaGVhcHRpZHNwYWNl LCBQYWdlIHBhZ2UsIEluZGV4VHVwbGUgbmV3dHVwKTsNCiBleHRlcm4gYm9vbCBfYnRfYWxsZXF1 YWxpbWFnZShSZWxhdGlvbiByZWwsIGJvb2wgZGVidWdtZXNzYWdlKTsNCiANCisvKg0KKyAqIHBy b3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiBuYnRwcmVmaXguYw0KKyAqLw0KK2V4dGVybiBjb25z dCBjaGFyICpfYnRfcGFnZV9nZXRfcHJlZml4KFBhZ2UgcGFnZSwgU2l6ZSAqbGVuKTsNCitleHRl cm4gdm9pZCBfYnRfcGFnZV9zZXRfcHJlZml4KFBhZ2UgcGFnZSwgY29uc3QgY2hhciAqcHJlZml4 LCBTaXplIGxlbik7DQorZXh0ZXJuIEluZGV4VHVwbGUgX2J0X3ByZWZpeF9lbmNvZGUoUGFnZSBw YWdlLCBJbmRleFR1cGxlIGl0dXApOw0KK2V4dGVybiBTaXplIF9idF9wcmVmaXhfY29kZWRfc2l6 ZShQYWdlIHBhZ2UsIEluZGV4VHVwbGUgaXR1cCk7DQorZXh0ZXJuIGJvb2wgX2J0X3ByZWZpeF9l bmFibGVkKFJlbGF0aW9uIGluZGV4KTsNCitleHRlcm4gY29uc3QgY2hhciAqX2J0X3ByZWZpeF9j YW5kaWRhdGUoSW5kZXhUdXBsZSBpdHVwLCBTaXplICpsZW4pOw0KK2V4dGVybiBpbnQJX2J0X3By ZWZpeF9zaGFyZWQoY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHByZWZpeGxlbiwgSW5kZXhUdXBs ZSBpdHVwKTsNCitleHRlcm4gU2l6ZSBfYnRfcHJlZml4X2Nob29zZShSZWxhdGlvbiBpbmRleCwg SW5kZXhUdXBsZSAqaXRlbXMsIGludCBuLA0KKwkJCQkJCQkgIGNvbnN0IGNoYXIgKipwcmVmaXgp Ow0KK2V4dGVybiB2b2lkIF9idF9wcmVmaXhfY29tcHJlc3NfcGFnZShSZWxhdGlvbiBpbmRleCwg UGFnZSBwYWdlKTsNCitleHRlcm4gdm9pZCBfYnRfc3BsaXRfbGVhZl9oYWxmKFJlbGF0aW9uIGlu ZGV4LCBQYWdlIHBhZ2UsIEluZGV4VHVwbGUgaGlrZXksDQorCQkJCQkJCQlJbmRleFR1cGxlICpp dGVtcywgaW50IG4sDQorCQkJCQkJCQljb25zdCBjaGFyICpvcmlncHJlZml4LCBTaXplIG9yaWdw cmVmaXhsZW4sDQorCQkJCQkJCQljaGFyICpjaG9zZW5wcmVmaXgsIFNpemUgKmNob3NlbnByZWZp eGxlbik7DQorZXh0ZXJuIGJvb2wgX2J0X3NwbGl0X2xlYWZfbGF5b3V0KFBhZ2UgcGFnZSwgSW5k ZXhUdXBsZSBoaWtleSwNCisJCQkJCQkJCSAgSW5kZXhUdXBsZSAqaXRlbXMsIGludCBuLA0KKwkJ CQkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgcHJlZml4bGVuKTsNCitleHRlcm4gdm9p ZCBfYnRfc3BsaXRfbGVhZl9jb2xsZWN0KFBhZ2Ugb3JpZ3BhZ2UsIE9mZnNldE51bWJlciBmaXJz dHJpZ2h0b2ZmLA0KKwkJCQkJCQkJICAgT2Zmc2V0TnVtYmVyIG5ld2l0ZW1vZmYsIEluZGV4VHVw bGUgbmV3aXRlbSwNCisJCQkJCQkJCSAgIGJvb2wgbmV3aXRlbW9ubGVmdCwNCisJCQkJCQkJCSAg IE9mZnNldE51bWJlciBvcmlncGFnZXBvc3RpbmdvZmYsDQorCQkJCQkJCQkgICBJbmRleFR1cGxl IG5wb3N0aW5nLA0KKwkJCQkJCQkJICAgSW5kZXhUdXBsZSAqbGVmdGl0ZW1zLCBpbnQgKm5sZWZ0 LA0KKwkJCQkJCQkJICAgSW5kZXhUdXBsZSAqcmlnaHRpdGVtcywgaW50ICpucmlnaHQpOw0KKw0K IC8qDQogICogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGluIG5idHZhbGlkYXRlLmMNCiAgKi8N CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0eGxvZy5oIGIvc3JjL2luY2x1ZGUv YWNjZXNzL25idHhsb2cuaA0KaW5kZXggM2E3OGVjMjdmZTguLjI4NWVhYzZmMWFhIDEwMDY0NA0K LS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL25idHhsb2cuaA0KKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL25idHhsb2cuaA0KQEAgLTE1NiwyNSArMTU2LDU5IEBAIHR5cGVkZWYgc3RydWN0IHhsX2J0 cmVlX3NwbGl0DQogCU9mZnNldE51bWJlciBmaXJzdHJpZ2h0b2ZmOyAvKiBmaXJzdCBvcmlncGFn ZSBpdGVtIG9uIHJpZ2h0cGFnZSAqLw0KIAlPZmZzZXROdW1iZXIgbmV3aXRlbW9mZjsJLyogbmV3 IGl0ZW0ncyBvZmZzZXQgKi8NCiAJdWludDE2CQlwb3N0aW5nb2ZmOwkJLyogb2Zmc2V0IGluc2lk ZSBvcmlnIHBvc3RpbmcgdHVwbGUgKi8NCisJdWludDE2CQlmbGFnczsJCQkvKiBYTEhfU1BMSVRf KiBiZWxvdyAqLw0KKwl1aW50OAkJbGVmdHByZWZpeGxlbjsJLyogbGVhZjogbGVmdCBoYWxmJ3Mg cHJlZml4IGxlbmd0aCAoMCBub25lKSAqLw0KKwl1aW50OAkJcmlnaHRwcmVmaXhsZW47IC8qIGxl YWY6IHJpZ2h0IGhhbGYncyBwcmVmaXggbGVuZ3RoICgwIG5vbmUpICovDQogfSB4bF9idHJlZV9z cGxpdDsNCiANCi0jZGVmaW5lIFNpemVPZkJ0cmVlU3BsaXQJKG9mZnNldG9mKHhsX2J0cmVlX3Nw bGl0LCBwb3N0aW5nb2ZmKSArIHNpemVvZih1aW50MTYpKQ0KKyNkZWZpbmUgU2l6ZU9mQnRyZWVT cGxpdAkob2Zmc2V0b2YoeGxfYnRyZWVfc3BsaXQsIHJpZ2h0cHJlZml4bGVuKSArIHNpemVvZih1 aW50OCkpDQorDQorLyoNCisgKiB4bF9idHJlZV9zcGxpdCBmbGFnIGJpdHMuDQorICoNCisgKiBB IHByZWZpeC1jb21wcmVzc2VkIGxlYWYgc3BsaXQgbG9ncyBubyBmdWxsLXBhZ2UgaW1hZ2UgaW4g dGhlIGNvbW1vbiBjYXNlOg0KKyAqIHJlZG8gcmVidWlsZHMgZWFjaCBoYWxmIHRoZSB3YXkgdGhl IHByaW1hcnkgZGlkLiAgVGhlIGxlZnQgaGFsZiBpcw0KKyAqIHJlY29uc3RydWN0ZWQgZnJvbSB0 aGUgcHJlLXNwbGl0IG9yaWdpbmFsIHBhZ2UgKGJsb2NrIDApIHRvZ2V0aGVyIHdpdGggdGhlDQor ICogbG9nZ2VkIG5ldyBpdGVtIGFuZCBoaWdoIGtleTsgdGhlIHJpZ2h0IGhhbGYgaXMgcmVjb25z dHJ1Y3RlZCBmcm9tIGl0cyBwbGFpbg0KKyAqIGRhdGEgaXRlbXMsIHdoaWNoIGFyZSBsb2dnZWQg YXMgYmxvY2stMSBkYXRhLiAgRWFjaCBoYWxmJ3MgY2hvc2VuIHByZWZpeA0KKyAqIGJ5dGVzIGFy ZSBsb2dnZWQgdG9vIChibG9jayAwIGZvciB0aGUgbGVmdCBoYWxmLCBibG9jayAxIGZvciB0aGUg cmlnaHQpLCBhbmQNCisgKiBhcHBsaWVkIHdpdGggX2J0X3NwbGl0X2xlYWZfbGF5b3V0KCk7IHJl ZG8gY2Fubm90IHJ1biB0aGUgcHJlZml4LWNob29zaW5nDQorICogaGV1cmlzdGljIGl0c2VsZiwg c28gdGhlIHByaW1hcnkgbG9ncyB0aGUgcHJlZml4IGl0IGNob3NlLg0KKyAqIGxlZnRwcmVmaXhs ZW4vcmlnaHRwcmVmaXhsZW4gZ2l2ZSB0aGUgbGVuZ3RocyAoMCBtZWFucyB0aGUgaGFsZiBpcyBu b3QNCisgKiBwcmVmaXgtY29tcHJlc3NlZCkuICBYTEhfU1BMSVRfTEVBRlBSRUZJWCBtYXJrcyBh IGxlYWYgc3BsaXQgdGhhdCB1c2VzIHRoaXMNCisgKiBwYXRoIGF0IGFsbCAoc28gcmVkbyByZWJ1 aWxkcyBjb2RlZCByYXRoZXIgdGhhbiByZXBsYXlpbmcgaXRlbXMpLg0KKyAqLw0KKyNkZWZpbmUg WExIX1NQTElUX0xFQUZQUkVGSVgJMHgwMQkvKiBsZWFmIHNwbGl0LCByZWJ1aWxkIGhhbHZlcyBj b2RlZCAqLw0KKyNkZWZpbmUgWExIX1NQTElUX1JGUEkJCQkweDA4CS8qIHJpZ2h0IGhhbGYgY2Fy cmllZCBieSBhIGZ1bGwtcGFnZSBpbWFnZQ0KKwkJCQkJCQkJCQkgKiAoaXRzIHBsYWluIGl0ZW1z IHdvdWxkIG92ZXJmbG93IHRoZSBXQUwNCisJCQkJCQkJCQkJICogcmVjb3JkKTsgcmVkbyByZXN0 b3JlcyBpdCBmcm9tIHRoZSBpbWFnZSAqLw0KIA0KIC8qDQogICogV2hlbiBwYWdlIGlzIGRlZHVw bGljYXRlZCwgY29uc2VjdXRpdmUgZ3JvdXBzIG9mIHR1cGxlcyB3aXRoIGVxdWFsIGtleXMgYXJl DQogICogbWVyZ2VkIHRvZ2V0aGVyIGludG8gcG9zdGluZyBsaXN0IHR1cGxlcy4NCiAgKg0KLSAq IFRoZSBXQUwgcmVjb3JkIHJlcHJlc2VudHMgYSBkZWR1cGxpY2F0aW9uIHBhc3MgZm9yIGEgbGVh ZiBwYWdlLiAgQW4gYXJyYXkNCi0gKiBvZiBCVERlZHVwSW50ZXJ2YWwgc3RydWN0cyBmb2xsb3dz Lg0KKyAqIFRoZSBXQUwgcmVjb3JkIHJlcHJlc2VudHMgYSBkZWR1cGxpY2F0aW9uIHBhc3MgZm9y IGEgbGVhZiBwYWdlLiAgTm9ybWFsbHkNCisgKiAocHJlZml4bGVuID09IDApIGFuIGFycmF5IG9m IEJURGVkdXBJbnRlcnZhbCBzdHJ1Y3RzIGZvbGxvd3MgYW5kIHJlZG8NCisgKiByZXBsYXlzIHRo ZW0gYWdhaW5zdCB0aGUgb2xkIHBhZ2UuICBXaGVuIHRoZSBwYWdlIGlzIHByZWZpeC1jb21wcmVz c2VkDQorICogKHByZWZpeGxlbiA+IDApIHRoZSBkZWR1cGVkIHJlc3VsdCBpcyBpbnN0ZWFkIGNh cnJpZWQgYXMgdGhlIGNob3NlbiBwcmVmaXgNCisgKiBieXRlcyAocHJlZml4bGVuKSBmb2xsb3dl ZCBieSwgd2hlbiBub3QgcmlnaHRtb3N0LCB0aGUgaGlnaCBrZXksIHRoZW4gdGhlDQorICogZGVk dXBlZCBwbGFpbiBkYXRhIGl0ZW1zIC0tIGVhY2ggTUFYQUxJR04nZCAtLSBhbmQgcmVkbyBsYXlz IHRoZW0gb3V0IGNvZGVkDQorICogd2l0aCBfYnRfc3BsaXRfbGVhZl9sYXlvdXQoKSwgYXZvaWRp bmcgYSBmdWxsLXBhZ2UgaW1hZ2UuDQogICovDQogdHlwZWRlZiBzdHJ1Y3QgeGxfYnRyZWVfZGVk dXANCiB7DQogCXVpbnQxNgkJbmludGVydmFsczsNCisJdWludDgJCXByZWZpeGxlbjsJCS8qID4w OiBwcmVmaXgtZGVkdXAgcGF5bG9hZCwgc2VlIGFib3ZlICovDQorCXVpbnQ4CQlmbGFnczsJCQkv KiBYTEhfREVEVVBfKiAqLw0KIA0KLQkvKiBERURVUExJQ0FUSU9OIElOVEVSVkFMUyBGT0xMT1cg Ki8NCisJLyogREVEVVBMSUNBVElPTiBJTlRFUlZBTFMgb3IgUFJFRklYIFBBWUxPQUQgRk9MTE9X ICovDQogfSB4bF9idHJlZV9kZWR1cDsNCiANCi0jZGVmaW5lIFNpemVPZkJ0cmVlRGVkdXAgCShv ZmZzZXRvZih4bF9idHJlZV9kZWR1cCwgbmludGVydmFscykgKyBzaXplb2YodWludDE2KSkNCisj ZGVmaW5lIFNpemVPZkJ0cmVlRGVkdXAgCShvZmZzZXRvZih4bF9idHJlZV9kZWR1cCwgZmxhZ3Mp ICsgc2l6ZW9mKHVpbnQ4KSkNCisNCisvKiB4bF9idHJlZV9kZWR1cCBmbGFnIGJpdHMgKi8NCisj ZGVmaW5lIFhMSF9ERURVUF9OT1RfUklHSFRNT1NUCTB4MDEJLyogcHJlZml4IHBheWxvYWQgaW5j bHVkZXMgYSBoaWdoIGtleSAqLw0KKyNkZWZpbmUgWExIX0RFRFVQX1JGUEkJCQkweDAyCS8qIHBy ZWZpeCBwYWdlIGNhcnJpZWQgYXMgYSBmb3JjZWQgaW1hZ2UgKi8NCiANCiAvKg0KICAqIFRoaXMg aXMgd2hhdCB3ZSBuZWVkIHRvIGtub3cgYWJvdXQgcGFnZSByZXVzZSB3aXRoaW4gYnRyZWUuICBU aGlzIHJlY29yZA0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYnRyZWVf aW5kZXgub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9idHJlZV9pbmRleC5vdXQNCmlu ZGV4IDdjNTNkNTk4NjQ5Li5jMWRhZTRiNTVhZCAxMDA2NDQNCi0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvYnRyZWVfaW5kZXgub3V0DQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2J0cmVlX2luZGV4Lm91dA0KQEAgLTg5MSwzICs4OTEsMjU5IEBAIEFMVEVSIElOREVYIGJ0 cmVlX3BhcnRfaWR4IEFMVEVSIENPTFVNTiBpZCBTRVQgKG5fZGlzdGluY3Q9MTAwKTsNCiBFUlJP UjogIEFMVEVSIGFjdGlvbiBBTFRFUiBDT0xVTU4gLi4uIFNFVCBjYW5ub3QgYmUgcGVyZm9ybWVk IG9uIHJlbGF0aW9uICJidHJlZV9wYXJ0X2lkeCINCiBERVRBSUw6ICBUaGlzIG9wZXJhdGlvbiBp cyBub3Qgc3VwcG9ydGVkIGZvciBwYXJ0aXRpb25lZCBpbmRleGVzLg0KIERST1AgVEFCTEUgYnRy ZWVfcGFydDsNCistLQ0KKy0tIExlYWYga2V5IHByZWZpeCBjb21wcmVzc2lvbiAocHJlZml4X2Nv bXByZXNzaW9uIHJlbG9wdGlvbikuDQorLS0NCistLSBDb3JyZWN0bmVzcyBpcyBjaGVja2VkIGFn YWluc3QgYW4gaW5kZXBlbmRlbnQgb3JhY2xlOiBhIGZvcmNlZCBpbmRleCBzY2FuDQorLS0gb3Zl ciBhIHByZWZpeC1jb21wcmVzc2VkIGluZGV4IG11c3QgcmV0dXJuIGV4YWN0bHkgdGhlIHJvd3Mg YSBzZXF1ZW50aWFsDQorLS0gc2NhbiBvZiB0aGUgc2FtZSBkYXRhIHJldHVybnMsIGFjcm9zcyBi dWlsZCwgcmV0YWlsIGluc2VydC9zcGxpdCwgZGVsZXRlDQorLS0gYW5kIFZBQ1VVTSwgZm9yIGVx dWFsaXR5LCByYW5nZSwgYmFja3dhcmQsIGluZGV4LW9ubHkgYW5kIE5VTEwgcXVlcmllcy4NCist LSBUaGUga2V5IGNvbHVtbiB1c2VzIHRoZSBDIGNvbGxhdGlvbiBzbyB0aGUgcmVjb3JkZWQgb3V0 cHV0IGlzIGRldGVybWluaXN0aWMNCistLSBhY3Jvc3MgcGxhdGZvcm1zLiAgVGhlIHBhZ2UgZm9y bWF0IGlzIGV4ZXJjaXNlZCBieSBrZXlzIHRoYXQgc2hhcmUgYSBsb25nDQorLS0gcHJlZml4IChV UkwtbGlrZSksIGJ5IGtleXMgc2hhcmluZyBleGFjdGx5IDEyNS8xMjYvMTI3IGJ5dGVzICh0aGUg Ym91bmRhcnkNCistLSB3aGVyZSB0aGUgb25lLWJ5dGUgc2hhcmVkIGNvdW50IHNhdHVyYXRlczog QlRSRUVfUFJFRklYX01BWCBpcyAxMjYsDQorLS0gQlRSRUVfUFJFRklYX1JBVyBpcyAxMjcpLCBi eSBrZXlzIHRoYXQgc2hhcmUgbm90aGluZywgYW5kIGJ5IGEgTlVMTCBrZXkuDQorLS0NCitDUkVB VEUgVEFCTEUgYnRyZWVfcHJlZml4ICh1IHRleHQgQ09MTEFURSAiQyIpOw0KKy0tIEJ1aWxkLXBh dGggcGFnZXMgKENSRUFURSBJTkRFWCB3cml0ZXMgd2hvbGUgbGVhdmVzKS4gIEEgc2hhcmVkIDQw LWJ5dGUNCistLSBwcmVmaXgsIHBsdXMgZXhwbGljaXQgcm93cyBhdCB0aGUgMTI1LzEyNi8xMjcg c2hhcmVkLWJ5dGUgYm91bmRhcnkuDQorSU5TRVJUIElOVE8gYnRyZWVfcHJlZml4DQorICBTRUxF Q1QgJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8nIHx8IGxwYWQoKGcgJSAy MDAwMCk6OnRleHQsIDgsICcwJykNCisgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMDAwKSBn Ow0KK0lOU0VSVCBJTlRPIGJ0cmVlX3ByZWZpeA0KKyAgU0VMRUNUIHJlcGVhdCgnYScsIDQwKSB8 fCByZXBlYXQoJ2InLCBuKSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg4NSwgOTApIG47DQorSU5TRVJU IElOVE8gYnRyZWVfcHJlZml4IFZBTFVFUw0KKyAgKHJlcGVhdCgnYScsIDEyNSkpLCAocmVwZWF0 KCdhJywgMTI2KSksIChyZXBlYXQoJ2EnLCAxMjcpKSwgKHJlcGVhdCgnYScsIDMwMCkpLA0KKyAg KCd6enotbm8tc2hhcmVkLXByZWZpeCcpLCAoTlVMTCk7DQorQ1JFQVRFIElOREVYIGJ0cmVlX3By ZWZpeF9vbiBPTiBidHJlZV9wcmVmaXggKHUpIFdJVEggKHByZWZpeF9jb21wcmVzc2lvbiA9IG9u KTsNCistLSBDb25maXJtIHRoZSBpbmRleCByZWFsbHkgaXMgdXNlZCAoYW5kIGlzIHByZWZpeC1j b21wcmVzc2VkKSwgc28gdGhlIHF1ZXJpZXMNCistLSBiZWxvdyBleGVyY2lzZSB0aGUgY29kZWQg cGFnZSBmb3JtYXQgcmF0aGVyIHRoYW4gc2lsZW50bHkgZmFsbGluZyBiYWNrLg0KK1NFVCBlbmFi bGVfc2Vxc2NhbiA9IG9mZjsNCitTRVQgZW5hYmxlX2JpdG1hcHNjYW4gPSBvZmY7DQorRVhQTEFJ TiAoY29zdHMgb2ZmKQ0KKyAgU0VMRUNUIHUgRlJPTSBidHJlZV9wcmVmaXggV0hFUkUgdSA9ICdo dHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvMDAwMTIzNDUnOw0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcg YnRyZWVfcHJlZml4X29uIG9uIGJ0cmVlX3ByZWZpeA0KKyAgIEluZGV4IENvbmQ6ICh1ID0gJ2h0 dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8wMDAxMjM0NSc6OnRleHQpDQorKDIg cm93cykNCisNCistLSBFcXVhbGl0eSwgcmFuZ2UgYW5kIGJhY2t3YXJkIHNjYW5zIGZvcmNlZCB0 aHJvdWdoIHRoZSBwcmVmaXggaW5kZXguICBUaGVpcg0KKy0tIHJlc3VsdHMgYXJlIHJlY29yZGVk IGluIHRoZSBleHBlY3RlZCBvdXRwdXQsIHdoaWNoIGlzIGl0c2VsZiB0aGUgb3JhY2xlOiBhDQor LS0gZGVjb2RlIHJlZ3Jlc3Npb24gY2hhbmdlcyB0aGVzZSByb3dzLiAgKFRoZSBpbmRleC1vbmx5 IGRpZ2VzdCBiZWxvdyBhZGRzIGFuDQorLS0gb3JhY2xlIHRoYXQgZG9lcyBub3QgcmVhZCB0aGUg aW5kZXggYXQgYWxsLikNCitTRUxFQ1QgY291bnQoKikgRlJPTSBidHJlZV9wcmVmaXgNCisgIFdI RVJFIHUgPSAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLzAwMDEyMzQ1JzsN CisgY291bnQgDQorLS0tLS0tLQ0KKyAgICAgMQ0KKygxIHJvdykNCisNCitTRUxFQ1QgY291bnQo KikgRlJPTSBidHJlZV9wcmVmaXgNCisgIFdIRVJFIHUgQkVUV0VFTiAnaHR0cHM6Ly9leGFtcGxl LmNvbS9wYXRoL3RvL3Jlc291cmNlLzAwMDAwMTAwJw0KKyAgICAgICAgICAgICBBTkQgJ2h0dHBz Oi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8wMDAwMDkwMCc7DQorIGNvdW50IA0KKy0t LS0tLS0NCisgICA4MDENCisoMSByb3cpDQorDQorU0VMRUNUIHUgRlJPTSBidHJlZV9wcmVmaXgN CisgIFdIRVJFIHUgPiAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLzAwMDE5 OTk2JyBPUkRFUiBCWSB1IERFU0M7DQorICAgICAgICAgICAgICAgICAgICAgICB1ICAgICAgICAg ICAgICAgICAgICAgICANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KKyB6enotbm8tc2hhcmVkLXByZWZpeA0KKyBodHRwczovL2V4YW1wbGUuY29tL3Bh dGgvdG8vcmVzb3VyY2UvMDAwMTk5OTkNCisgaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jl c291cmNlLzAwMDE5OTk4DQorIGh0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8w MDAxOTk5Nw0KKyg0IHJvd3MpDQorDQorLS0gQm91bmRhcnkgYW5kIG92ZXJzaXplZCBrZXlzIHJv dW5kLXRyaXAgdG8gdGhlaXIgZXhhY3Qgc3RvcmVkIHZhbHVlcy4NCitTRUxFQ1QgdSBGUk9NIGJ0 cmVlX3ByZWZpeCBXSEVSRSB1IExJS0UgJ2FhYWElJyBPUkRFUiBCWSB1Ow0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWENCisgYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh DQorIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWENCisgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhDQorIGFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiDQorIGFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYg0KKyBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiDQorIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiDQorIGFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYg0KKyBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiDQorKDEwIHJvd3MpDQorDQorU0VMRUNUIGNvdW50 KCopIEZST00gYnRyZWVfcHJlZml4IFdIRVJFIHUgPSByZXBlYXQoJ2EnLCAzMDApOw0KKyBjb3Vu dCANCistLS0tLS0tDQorICAgICAxDQorKDEgcm93KQ0KKw0KK1NFTEVDVCBjb3VudCgqKSBGUk9N IGJ0cmVlX3ByZWZpeCBXSEVSRSB1IElTIE5VTEw7DQorIGNvdW50IA0KKy0tLS0tLS0NCisgICAg IDENCisoMSByb3cpDQorDQorLS0gSW5kZXgtb25seSBzY2FuIG92ZXIgdGhlIHByZWZpeCBpbmRl eCwgY29tcGFyZWQgdG8gdGhlIGxpdGVyYWwgdmFsdWVzIHRoYXQNCistLSB3ZXJlIGluc2VydGVk IChhbiBvcmFjbGUgdGhhdCBkb2VzIG5vdCBpdHNlbGYgcmVhZCB0aGUgaW5kZXgpLg0KK1NFTEVD VCAoU0VMRUNUIG1kNShzdHJpbmdfYWdnKHUsICd8JyBPUkRFUiBCWSB1KSkNCisgICAgICAgICAg RlJPTSBidHJlZV9wcmVmaXggV0hFUkUgdSBJUyBOT1QgTlVMTCkgPQ0KKyAgICAgICBtZDUoc3Ry aW5nX2FnZyh4LCAnfCcgT1JERVIgQlkgeCkpIEFTIGlvc19vaw0KKyAgRlJPTSAoDQorICAgIFNF TEVDVCAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLycgfHwgbHBhZCgoZyAl IDIwMDAwKTo6dGV4dCwgOCwgJzAnKSBBUyB4DQorICAgICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MSwgMjAwMDApIGcNCisgICAgVU5JT04gQUxMIFNFTEVDVCByZXBlYXQoJ2EnLCA0MCkgfHwgcmVw ZWF0KCdiJywgbikgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoODUsIDkwKSBuDQorICAgIFVOSU9OIEFM TCBTRUxFQ1QgdiBGUk9NIChWQUxVRVMgKHJlcGVhdCgnYScsMTI1KSksKHJlcGVhdCgnYScsMTI2 KSksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlcGVhdCgnYScsMTI3 KSksKHJlcGVhdCgnYScsMzAwKSksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKCd6enotbm8tc2hhcmVkLXByZWZpeCcpKSB0KHYpDQorICApIG9yYWNsZTsNCisgaW9zX29r IA0KKy0tLS0tLS0tDQorIHQNCisoMSByb3cpDQorDQorLS0gUmV0YWlsIGluc2VydHMgY2F1c2Ug c3BsaXRzIHRoYXQgZmF1bHQgcGFnZXMgZm9yd2FyZCBpbnRvIHRoZSBjb2RlZCBmb3JtYXQ7DQor LS0gYW4gaW5kZXgtb25seSBzY2FuIG11c3Qgc3RpbGwgYWdyZWUgd2l0aCB0aGUgaW5kZXBlbmRl bnQgb3JhY2xlIGFmdGVyd2FyZHMuDQorSU5TRVJUIElOVE8gYnRyZWVfcHJlZml4DQorICBTRUxF Q1QgJ2h0dHBzOi8vZXhhbXBsZS5jb20vb3RoZXIvJyB8fCBscGFkKGc6OnRleHQsIDgsICcwJykN CisgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAwKSBnOw0KKy0tIERlbGV0ZSB0aGVuIFZB Q1VVTSwgdGhlbiByZS1pbnNlcnQgaW50byBmcmVlZCBzcGFjZS4gIFRoZSBkZWxldGUgdGFyZ2V0 cw0KKy0tIG9ubHkgcGFydCBvZiB0aGUgVVJMIG5hbWVzcGFjZSBzbyB0aGUgYm91bmRhcnkga2V5 cyAoYWFhYS4uLi96enouLi4pIHN1cnZpdmUNCistLSBmb3IgdGhlIGNoZWNrcyBiZWxvdy4NCitE RUxFVEUgRlJPTSBidHJlZV9wcmVmaXgNCisgIFdIRVJFIHUgPj0gJ2h0dHBzOi8vZXhhbXBsZS5j b20vcGF0aC90by9yZXNvdXJjZS8wMDAwMDAwMCcNCisgICAgQU5EIHUgPCAgJ2h0dHBzOi8vZXhh bXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8wMDAwNTAwMCc7DQorVkFDVVVNIGJ0cmVlX3ByZWZp eDsNCitJTlNFUlQgSU5UTyBidHJlZV9wcmVmaXgNCisgIFNFTEVDVCAnaHR0cHM6Ly9leGFtcGxl LmNvbS9wYXRoL3RvL3Jlc291cmNlLycgfHwgbHBhZCgoZyAlIDUwMDApOjp0ZXh0LCA4LCAnMCcp DQorICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA1MDAwKSBnOw0KKy0tIEFmdGVyIHRoZSBjaHVy biwgYW4gaW5kZXgtb25seSBzY2FuIG9mIHRoZSBsaXZlIGtleXMgbXVzdCBlcXVhbCB0aGUgc2Ft ZQ0KKy0tIGtleXMgZmV0Y2hlZCBmcm9tIHRoZSBoZWFwIGJ5IGEgc2VxdWVudGlhbCBzY2FuIChh biBpbmRlcGVuZGVudCBwYXRoKTogaWYNCistLSBkZWNvZGluZyB0aGUgY29kZWQgbGVhdmVzIHdl cmUgd3JvbmcsIHRoZSB0d28gZGlnZXN0cyB3b3VsZCBkaWZmZXIuDQorU0VUIGVuYWJsZV9pbmRl eG9ubHlzY2FuID0gb247DQorU0VMRUNUIG1kNShzdHJpbmdfYWdnKHUsICd8JyBPUkRFUiBCWSB1 KSkgQVMgaW9zX2RpZ2VzdA0KKyAgRlJPTSBidHJlZV9wcmVmaXggV0hFUkUgdSBJUyBOT1QgTlVM TCBcZ3NldA0KK1NFVCBlbmFibGVfaW5kZXhzY2FuID0gb2ZmOw0KK1NFVCBlbmFibGVfaW5kZXhv bmx5c2NhbiA9IG9mZjsNCitTRVQgZW5hYmxlX3NlcXNjYW4gPSBvbjsNCitTRUxFQ1QgOidpb3Nf ZGlnZXN0JyA9DQorICAgICAgIChTRUxFQ1QgbWQ1KHN0cmluZ19hZ2codSwgJ3wnIE9SREVSIEJZ IHUpKSBGUk9NIGJ0cmVlX3ByZWZpeCBXSEVSRSB1IElTIE5PVCBOVUxMKQ0KKyAgICAgICBBUyBw b3N0X2NodXJuX29rOw0KKyBwb3N0X2NodXJuX29rIA0KKy0tLS0tLS0tLS0tLS0tLQ0KKyB0DQor KDEgcm93KQ0KKw0KK1NFVCBlbmFibGVfaW5kZXhzY2FuID0gb247DQorUkVTRVQgZW5hYmxlX3Nl cXNjYW47DQorUkVTRVQgZW5hYmxlX2JpdG1hcHNjYW47DQorLS0gVGhlIHJlbG9wdGlvbiByb3Vu ZC10cmlwcyBhbmQgY2FuIGJlIHRvZ2dsZWQgd2l0aG91dCBhIHJld3JpdGUuDQorU0VMRUNUIHJl bG9wdGlvbnMgRlJPTSBwZ19jbGFzcyBXSEVSRSByZWxuYW1lID0gJ2J0cmVlX3ByZWZpeF9vbic7 DQorICAgICAgIHJlbG9wdGlvbnMgICAgICAgIA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N Cisge3ByZWZpeF9jb21wcmVzc2lvbj1vbn0NCisoMSByb3cpDQorDQorQUxURVIgSU5ERVggYnRy ZWVfcHJlZml4X29uIFNFVCAocHJlZml4X2NvbXByZXNzaW9uID0gb2ZmKTsNCitTRUxFQ1QgcmVs b3B0aW9ucyBGUk9NIHBnX2NsYXNzIFdIRVJFIHJlbG5hbWUgPSAnYnRyZWVfcHJlZml4X29uJzsN CisgICAgICAgIHJlbG9wdGlvbnMgICAgICAgIA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQorIHtwcmVmaXhfY29tcHJlc3Npb249b2ZmfQ0KKygxIHJvdykNCisNCistLSBSZWFkaW5nIGJh Y2sgd2l0aCB0aGUgb3B0aW9uIG9mZiBzdGlsbCByZXR1cm5zIGNvcnJlY3Qgcm93czogZXhpc3Rp bmcNCistLSBCVFBfUFJFRklYIGxlYXZlcyBrZWVwIHRoZWlyIGNvZGVkIGZvcm0gYW5kIGRlY29k ZSBvbiB0aGUgcGFnZSBmbGFnLg0KK1NFVCBlbmFibGVfc2Vxc2NhbiA9IG9mZjsNCitTRUxFQ1Qg Y291bnQoKikgRlJPTSBidHJlZV9wcmVmaXggV0hFUkUgdSA9IHJlcGVhdCgnYScsIDEyNik7DQor IGNvdW50IA0KKy0tLS0tLS0NCisgICAgIDENCisoMSByb3cpDQorDQorUkVTRVQgZW5hYmxlX3Nl cXNjYW47DQorLS0gQSBub24tdmFybGVuYSBmaXJzdCBjb2x1bW4gaXMgbGVnYWwgYW5kIHNpbGVu dGx5IHN0b3JlcyBubyBwcmVmaXg7IHZlcmlmeSBhDQorLS0gc2NhbiBvdmVyIHN1Y2ggYW4gaW5k ZXggcmV0dXJucyBjb3JyZWN0IHJvd3MuDQorQ1JFQVRFIElOREVYIGJ0cmVlX3ByZWZpeF9pbnQg T04gYnRyZWVfcHJlZml4ICgobGVuZ3RoKHUpKSkgV0lUSCAocHJlZml4X2NvbXByZXNzaW9uID0g b24pOw0KK1NFVCBlbmFibGVfc2Vxc2NhbiA9IG9mZjsNCitTRUxFQ1QgbGVuZ3RoKHUpIEZST00g YnRyZWVfcHJlZml4IFdIRVJFIGxlbmd0aCh1KSA9IDMwMDsNCisgbGVuZ3RoIA0KKy0tLS0tLS0t DQorICAgIDMwMA0KKygxIHJvdykNCisNCitSRVNFVCBlbmFibGVfc2Vxc2NhbjsNCitEUk9QIFRB QkxFIGJ0cmVlX3ByZWZpeDsNCistLQ0KKy0tIEJvdHRvbS11cCBpbmRleCBkZWxldGlvbiBvbiBw cmVmaXgtY29tcHJlc3NlZCBwYWdlcy4NCistLQ0KKy0tIEFuIFVQREFURSB0aGF0IGRvZXMgbm90 IGNoYW5nZSB0aGUgaW5kZXhlZCBjb2x1bW4gbWFya3MgdGhlIHJlc3VsdGluZyBpbmRleA0KKy0t IGluc2VydCAibG9naWNhbGx5IHVuY2hhbmdlZCIsIHdoaWNoIGxldHMgbmJ0cmVlIHJ1biBhIGJv dHRvbS11cCBkZWxldGlvbg0KKy0tIHBhc3MgYmVmb3JlIHNwbGl0dGluZyBhIGxlYWYuICBUaGF0 IHBhc3MgcmVhZHMgYW5kIChvbmx5KSByZW1vdmVzIGl0ZW1zOyBpdA0KKy0tIG11c3Qgd29yayBv biBjb2RlZCBwYWdlcyB0b28uICBIZXJlIHdlIGV4ZXJjaXNlIHRoZSBwYXRoIGFuZCB2ZXJpZnkg dGhlDQorLS0gaW5kZXggc3RheXMgY29ycmVjdDsgY29tbWl0dGVkIHVwZGF0ZSBiYXRjaGVzIGJl dHdlZW4gVkFDVVVNcyBsZWF2ZQ0KKy0tIHJlbW92YWJsZSBkdXBsaWNhdGVzIGZvciB0aGUgcGFz cyB0byBmaW5kLiAgKEJsb2F0IGlzIHF1YW50aWZpZWQgaW4gdGhlDQorLS0gcGVyZm9ybWFuY2Ug YmVuY2htYXJrLCBub3QgaGVyZSwgc2luY2UgcmVtb3ZhYmlsaXR5IGlzIHRpbWluZy1kZXBlbmRl bnQuKQ0KKy0tDQorQ1JFQVRFIFRBQkxFIGJ0cmVlX3ByZWZpeF9idSAoaWQgaW50IFBSSU1BUlkg S0VZLCB1IHRleHQgQ09MTEFURSAiQyIsIGZpbGxlciB0ZXh0KTsNCitJTlNFUlQgSU5UTyBidHJl ZV9wcmVmaXhfYnUNCisgIFNFTEVDVCBnLCAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoLycgfHwg bHBhZCgoZyAlIDUwMCk6OnRleHQsIDgsICcwJyksIHJlcGVhdCgneCcsIDQwKQ0KKyAgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwgNDAwMCkgZzsNCitDUkVBVEUgSU5ERVggYnRyZWVfcHJlZml4X2J1 X3UgT04gYnRyZWVfcHJlZml4X2J1ICh1KSBXSVRIIChwcmVmaXhfY29tcHJlc3Npb24gPSBvbik7 DQorLS0gU2V2ZXJhbCBjb21taXR0ZWQgbm9uLWtleSBVUERBVEUgYmF0Y2hlcyAodmVyc2lvbiBj aHVybiBvbiB0aGUgcHJlZml4IGluZGV4KS4NCitVUERBVEUgYnRyZWVfcHJlZml4X2J1IFNFVCBm aWxsZXIgPSByZXBlYXQoJ3knLCA0MCk7DQorVVBEQVRFIGJ0cmVlX3ByZWZpeF9idSBTRVQgZmls bGVyID0gcmVwZWF0KCd6JywgNDApOw0KK1VQREFURSBidHJlZV9wcmVmaXhfYnUgU0VUIGZpbGxl ciA9IHJlcGVhdCgndycsIDQwKTsNCistLSBDb3JyZWN0bmVzcyBhZnRlciB0aGUgY2h1cm46IGFu IGluZGV4LW9ubHkgc2NhbiBvZiB0aGUga2V5IGNvbHVtbiBtdXN0IGVxdWFsDQorLS0gdGhlIGlu ZGVwZW5kZW50IG9yYWNsZSAodGhlIGxpdGVyYWwga2V5cyksIHByb3Zpbmcgbm8gZGVjb2RlL2Rl bGV0aW9uIGRhbWFnZS4NCitTRVQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7DQorU0VMRUNUIChTRUxF Q1QgbWQ1KHN0cmluZ19hZ2codSwgJ3wnIE9SREVSIEJZIHUpKSBGUk9NIGJ0cmVlX3ByZWZpeF9i dSkgPQ0KKyAgICAgICBtZDUoc3RyaW5nX2FnZyh4LCAnfCcgT1JERVIgQlkgeCkpIEFTIGJvdHRv bXVwX29rDQorICBGUk9NIChTRUxFQ1QgJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC8nIHx8IGxw YWQoKGcgJSA1MDApOjp0ZXh0LCA4LCAnMCcpIEFTIHgNCisgICAgICAgICAgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMSwgNDAwMCkgZykgb3JhY2xlOw0KKyBib3R0b211cF9vayANCistLS0tLS0tLS0t LS0tDQorIHQNCisoMSByb3cpDQorDQorU0VMRUNUIGNvdW50KCopIEZST00gYnRyZWVfcHJlZml4 X2J1DQorICBXSEVSRSB1ID0gJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC8nIHx8IGxwYWQoJzcn LCA4LCAnMCcpOw0KKyBjb3VudCANCistLS0tLS0tDQorICAgICA4DQorKDEgcm93KQ0KKw0KK1JF U0VUIGVuYWJsZV9zZXFzY2FuOw0KK0RST1AgVEFCTEUgYnRyZWVfcHJlZml4X2J1Ow0KKy0tDQor LS0gUnVudGltZSBkZWR1cGxpY2F0aW9uIG9uIGEgcHJlZml4LWNvbXByZXNzZWQgcGFnZS4gIER1 cGxpY2F0ZSBrZXlzIGluc2VydGVkDQorLS0gb25lIGF0IGEgdGltZSBpbnRvIGFuIGV4aXN0aW5n IHByZWZpeCBpbmRleCBmaWxsIGEgbGVhZjsgYmVmb3JlIGl0IHNwbGl0cywNCistLSB0aGUgZGVk dXBsaWNhdGlvbiBwYXNzIGRlY29kZXMgdGhlIGNvZGVkIGl0ZW1zLCBtZXJnZXMgdGhlIGR1cGxp Y2F0ZSBUSURzDQorLS0gaW50byBwb3N0aW5nIGxpc3RzIGFuZCByZS1jb2RlcyB0aGUgcGFnZS4g IFRoZSBkZWNvZGVkIHNldCBjYW4gZXhjZWVkIG9uZQ0KKy0tIHBhZ2UgZXZlbiB3aGVuIHRoZSBj b2RlZCBmb3JtIGZpdCwgaW4gd2hpY2ggY2FzZSB0aGUgcGFzcyBhYm9ydHMgYW5kIHRoZQ0KKy0t IHBhZ2Ugc3BsaXRzIGluc3RlYWQ7IGVpdGhlciB3YXkgdGhlIHJlc3VsdCBtdXN0IGJlIGNvcnJl Y3QuDQorLS0NCitDUkVBVEUgVEFCTEUgYnRyZWVfcHJlZml4X2RkICh1IHRleHQgQ09MTEFURSAi QyIpOw0KK0NSRUFURSBJTkRFWCBidHJlZV9wcmVmaXhfZGRfdSBPTiBidHJlZV9wcmVmaXhfZGQg KHUpIFdJVEggKHByZWZpeF9jb21wcmVzc2lvbiA9IG9uKTsNCitJTlNFUlQgSU5UTyBidHJlZV9w cmVmaXhfZGQNCisgIFNFTEVDVCAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNl LycgfHwgbHBhZCgoZyAlIDIwMCk6OnRleHQsIDgsICcwJykNCisgIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsIDQwMDAwKSBnOw0KK1NFVCBlbmFibGVfc2Vxc2NhbiA9IG9mZjsNCitTRUxFQ1QgKFNF TEVDVCBtZDUoc3RyaW5nX2FnZyh1LCAnfCcgT1JERVIgQlkgdSkpIEZST00gYnRyZWVfcHJlZml4 X2RkKSA9DQorICAgICAgIG1kNShzdHJpbmdfYWdnKHgsICd8JyBPUkRFUiBCWSB4KSkgQVMgcnVu dGltZV9kZWR1cF9vaw0KKyAgRlJPTSAoU0VMRUNUICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgv dG8vcmVzb3VyY2UvJyB8fCBscGFkKChnICUgMjAwKTo6dGV4dCwgOCwgJzAnKSBBUyB4DQorICAg ICAgICAgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDQwMDAwKSBnKSBvcmFjbGU7DQorIHJ1bnRp bWVfZGVkdXBfb2sgDQorLS0tLS0tLS0tLS0tLS0tLS0tDQorIHQNCisoMSByb3cpDQorDQorU0VM RUNUIGNvdW50KCopIEZST00gYnRyZWVfcHJlZml4X2RkDQorICBXSEVSRSB1ID0gJ2h0dHBzOi8v ZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8nIHx8IGxwYWQoJzQyJywgOCwgJzAnKTsNCisg Y291bnQgDQorLS0tLS0tLQ0KKyAgIDIwMA0KKygxIHJvdykNCisNCitSRVNFVCBlbmFibGVfc2Vx c2NhbjsNCitEUk9QIFRBQkxFIGJ0cmVlX3ByZWZpeF9kZDsNCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9idHJlZV9pbmRleC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9idHJl ZV9pbmRleC5zcWwNCmluZGV4IDY5OTBkNzgxOGRhLi42Y2QwNTNhMTU5NiAxMDA2NDQNCi0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2J0cmVlX2luZGV4LnNxbA0KKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvYnRyZWVfaW5kZXguc3FsDQpAQCAtNTIwLDMgKzUyMCwxNzAgQEAgQ1JFQVRFIFRB QkxFIGJ0cmVlX3BhcnQgKGlkIGludDQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOw0KIENSRUFU RSBJTkRFWCBidHJlZV9wYXJ0X2lkeCBPTiBidHJlZV9wYXJ0KGlkKTsNCiBBTFRFUiBJTkRFWCBi dHJlZV9wYXJ0X2lkeCBBTFRFUiBDT0xVTU4gaWQgU0VUIChuX2Rpc3RpbmN0PTEwMCk7DQogRFJP UCBUQUJMRSBidHJlZV9wYXJ0Ow0KKw0KKy0tDQorLS0gTGVhZiBrZXkgcHJlZml4IGNvbXByZXNz aW9uIChwcmVmaXhfY29tcHJlc3Npb24gcmVsb3B0aW9uKS4NCistLQ0KKy0tIENvcnJlY3RuZXNz IGlzIGNoZWNrZWQgYWdhaW5zdCBhbiBpbmRlcGVuZGVudCBvcmFjbGU6IGEgZm9yY2VkIGluZGV4 IHNjYW4NCistLSBvdmVyIGEgcHJlZml4LWNvbXByZXNzZWQgaW5kZXggbXVzdCByZXR1cm4gZXhh Y3RseSB0aGUgcm93cyBhIHNlcXVlbnRpYWwNCistLSBzY2FuIG9mIHRoZSBzYW1lIGRhdGEgcmV0 dXJucywgYWNyb3NzIGJ1aWxkLCByZXRhaWwgaW5zZXJ0L3NwbGl0LCBkZWxldGUNCistLSBhbmQg VkFDVVVNLCBmb3IgZXF1YWxpdHksIHJhbmdlLCBiYWNrd2FyZCwgaW5kZXgtb25seSBhbmQgTlVM TCBxdWVyaWVzLg0KKy0tIFRoZSBrZXkgY29sdW1uIHVzZXMgdGhlIEMgY29sbGF0aW9uIHNvIHRo ZSByZWNvcmRlZCBvdXRwdXQgaXMgZGV0ZXJtaW5pc3RpYw0KKy0tIGFjcm9zcyBwbGF0Zm9ybXMu ICBUaGUgcGFnZSBmb3JtYXQgaXMgZXhlcmNpc2VkIGJ5IGtleXMgdGhhdCBzaGFyZSBhIGxvbmcN CistLSBwcmVmaXggKFVSTC1saWtlKSwgYnkga2V5cyBzaGFyaW5nIGV4YWN0bHkgMTI1LzEyNi8x MjcgYnl0ZXMgKHRoZSBib3VuZGFyeQ0KKy0tIHdoZXJlIHRoZSBvbmUtYnl0ZSBzaGFyZWQgY291 bnQgc2F0dXJhdGVzOiBCVFJFRV9QUkVGSVhfTUFYIGlzIDEyNiwNCistLSBCVFJFRV9QUkVGSVhf UkFXIGlzIDEyNyksIGJ5IGtleXMgdGhhdCBzaGFyZSBub3RoaW5nLCBhbmQgYnkgYSBOVUxMIGtl eS4NCistLQ0KK0NSRUFURSBUQUJMRSBidHJlZV9wcmVmaXggKHUgdGV4dCBDT0xMQVRFICJDIik7 DQorLS0gQnVpbGQtcGF0aCBwYWdlcyAoQ1JFQVRFIElOREVYIHdyaXRlcyB3aG9sZSBsZWF2ZXMp LiAgQSBzaGFyZWQgNDAtYnl0ZQ0KKy0tIHByZWZpeCwgcGx1cyBleHBsaWNpdCByb3dzIGF0IHRo ZSAxMjUvMTI2LzEyNyBzaGFyZWQtYnl0ZSBib3VuZGFyeS4NCitJTlNFUlQgSU5UTyBidHJlZV9w cmVmaXgNCisgIFNFTEVDVCAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLycg fHwgbHBhZCgoZyAlIDIwMDAwKTo6dGV4dCwgOCwgJzAnKQ0KKyAgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwgMjAwMDApIGc7DQorSU5TRVJUIElOVE8gYnRyZWVfcHJlZml4DQorICBTRUxFQ1QgcmVw ZWF0KCdhJywgNDApIHx8IHJlcGVhdCgnYicsIG4pIEZST00gZ2VuZXJhdGVfc2VyaWVzKDg1LCA5 MCkgbjsNCitJTlNFUlQgSU5UTyBidHJlZV9wcmVmaXggVkFMVUVTDQorICAocmVwZWF0KCdhJywg MTI1KSksIChyZXBlYXQoJ2EnLCAxMjYpKSwgKHJlcGVhdCgnYScsIDEyNykpLCAocmVwZWF0KCdh JywgMzAwKSksDQorICAoJ3p6ei1uby1zaGFyZWQtcHJlZml4JyksIChOVUxMKTsNCitDUkVBVEUg SU5ERVggYnRyZWVfcHJlZml4X29uIE9OIGJ0cmVlX3ByZWZpeCAodSkgV0lUSCAocHJlZml4X2Nv bXByZXNzaW9uID0gb24pOw0KKw0KKy0tIENvbmZpcm0gdGhlIGluZGV4IHJlYWxseSBpcyB1c2Vk IChhbmQgaXMgcHJlZml4LWNvbXByZXNzZWQpLCBzbyB0aGUgcXVlcmllcw0KKy0tIGJlbG93IGV4 ZXJjaXNlIHRoZSBjb2RlZCBwYWdlIGZvcm1hdCByYXRoZXIgdGhhbiBzaWxlbnRseSBmYWxsaW5n IGJhY2suDQorU0VUIGVuYWJsZV9zZXFzY2FuID0gb2ZmOw0KK1NFVCBlbmFibGVfYml0bWFwc2Nh biA9IG9mZjsNCitFWFBMQUlOIChjb3N0cyBvZmYpDQorICBTRUxFQ1QgdSBGUk9NIGJ0cmVlX3By ZWZpeCBXSEVSRSB1ID0gJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8wMDAx MjM0NSc7DQorDQorLS0gRXF1YWxpdHksIHJhbmdlIGFuZCBiYWNrd2FyZCBzY2FucyBmb3JjZWQg dGhyb3VnaCB0aGUgcHJlZml4IGluZGV4LiAgVGhlaXINCistLSByZXN1bHRzIGFyZSByZWNvcmRl ZCBpbiB0aGUgZXhwZWN0ZWQgb3V0cHV0LCB3aGljaCBpcyBpdHNlbGYgdGhlIG9yYWNsZTogYQ0K Ky0tIGRlY29kZSByZWdyZXNzaW9uIGNoYW5nZXMgdGhlc2Ugcm93cy4gIChUaGUgaW5kZXgtb25s eSBkaWdlc3QgYmVsb3cgYWRkcyBhbg0KKy0tIG9yYWNsZSB0aGF0IGRvZXMgbm90IHJlYWQgdGhl IGluZGV4IGF0IGFsbC4pDQorU0VMRUNUIGNvdW50KCopIEZST00gYnRyZWVfcHJlZml4DQorICBX SEVSRSB1ID0gJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8wMDAxMjM0NSc7 DQorU0VMRUNUIGNvdW50KCopIEZST00gYnRyZWVfcHJlZml4DQorICBXSEVSRSB1IEJFVFdFRU4g J2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8wMDAwMDEwMCcNCisgICAgICAg ICAgICAgQU5EICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvMDAwMDA5MDAn Ow0KK1NFTEVDVCB1IEZST00gYnRyZWVfcHJlZml4DQorICBXSEVSRSB1ID4gJ2h0dHBzOi8vZXhh bXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8wMDAxOTk5NicgT1JERVIgQlkgdSBERVNDOw0KKy0t IEJvdW5kYXJ5IGFuZCBvdmVyc2l6ZWQga2V5cyByb3VuZC10cmlwIHRvIHRoZWlyIGV4YWN0IHN0 b3JlZCB2YWx1ZXMuDQorU0VMRUNUIHUgRlJPTSBidHJlZV9wcmVmaXggV0hFUkUgdSBMSUtFICdh YWFhJScgT1JERVIgQlkgdTsNCitTRUxFQ1QgY291bnQoKikgRlJPTSBidHJlZV9wcmVmaXggV0hF UkUgdSA9IHJlcGVhdCgnYScsIDMwMCk7DQorU0VMRUNUIGNvdW50KCopIEZST00gYnRyZWVfcHJl Zml4IFdIRVJFIHUgSVMgTlVMTDsNCisNCistLSBJbmRleC1vbmx5IHNjYW4gb3ZlciB0aGUgcHJl Zml4IGluZGV4LCBjb21wYXJlZCB0byB0aGUgbGl0ZXJhbCB2YWx1ZXMgdGhhdA0KKy0tIHdlcmUg aW5zZXJ0ZWQgKGFuIG9yYWNsZSB0aGF0IGRvZXMgbm90IGl0c2VsZiByZWFkIHRoZSBpbmRleCku DQorU0VMRUNUIChTRUxFQ1QgbWQ1KHN0cmluZ19hZ2codSwgJ3wnIE9SREVSIEJZIHUpKQ0KKyAg ICAgICAgICBGUk9NIGJ0cmVlX3ByZWZpeCBXSEVSRSB1IElTIE5PVCBOVUxMKSA9DQorICAgICAg IG1kNShzdHJpbmdfYWdnKHgsICd8JyBPUkRFUiBCWSB4KSkgQVMgaW9zX29rDQorICBGUk9NICgN CisgICAgU0VMRUNUICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvJyB8fCBs cGFkKChnICUgMjAwMDApOjp0ZXh0LCA4LCAnMCcpIEFTIHgNCisgICAgICBGUk9NIGdlbmVyYXRl X3NlcmllcygxLCAyMDAwMCkgZw0KKyAgICBVTklPTiBBTEwgU0VMRUNUIHJlcGVhdCgnYScsIDQw KSB8fCByZXBlYXQoJ2InLCBuKSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg4NSwgOTApIG4NCisgICAg VU5JT04gQUxMIFNFTEVDVCB2IEZST00gKFZBTFVFUyAocmVwZWF0KCdhJywxMjUpKSwocmVwZWF0 KCdhJywxMjYpKSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVwZWF0 KCdhJywxMjcpKSwocmVwZWF0KCdhJywzMDApKSwNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoJ3p6ei1uby1zaGFyZWQtcHJlZml4JykpIHQodikNCisgICkgb3JhY2xlOw0K Kw0KKy0tIFJldGFpbCBpbnNlcnRzIGNhdXNlIHNwbGl0cyB0aGF0IGZhdWx0IHBhZ2VzIGZvcndh cmQgaW50byB0aGUgY29kZWQgZm9ybWF0Ow0KKy0tIGFuIGluZGV4LW9ubHkgc2NhbiBtdXN0IHN0 aWxsIGFncmVlIHdpdGggdGhlIGluZGVwZW5kZW50IG9yYWNsZSBhZnRlcndhcmRzLg0KK0lOU0VS VCBJTlRPIGJ0cmVlX3ByZWZpeA0KKyAgU0VMRUNUICdodHRwczovL2V4YW1wbGUuY29tL290aGVy LycgfHwgbHBhZChnOjp0ZXh0LCA4LCAnMCcpDQorICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAx MDAwMCkgZzsNCistLSBEZWxldGUgdGhlbiBWQUNVVU0sIHRoZW4gcmUtaW5zZXJ0IGludG8gZnJl ZWQgc3BhY2UuICBUaGUgZGVsZXRlIHRhcmdldHMNCistLSBvbmx5IHBhcnQgb2YgdGhlIFVSTCBu YW1lc3BhY2Ugc28gdGhlIGJvdW5kYXJ5IGtleXMgKGFhYWEuLi4venp6Li4uKSBzdXJ2aXZlDQor LS0gZm9yIHRoZSBjaGVja3MgYmVsb3cuDQorREVMRVRFIEZST00gYnRyZWVfcHJlZml4DQorICBX SEVSRSB1ID49ICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvMDAwMDAwMDAn DQorICAgIEFORCB1IDwgICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvMDAw MDUwMDAnOw0KK1ZBQ1VVTSBidHJlZV9wcmVmaXg7DQorSU5TRVJUIElOVE8gYnRyZWVfcHJlZml4 DQorICBTRUxFQ1QgJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8nIHx8IGxw YWQoKGcgJSA1MDAwKTo6dGV4dCwgOCwgJzAnKQ0KKyAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwg NTAwMCkgZzsNCistLSBBZnRlciB0aGUgY2h1cm4sIGFuIGluZGV4LW9ubHkgc2NhbiBvZiB0aGUg bGl2ZSBrZXlzIG11c3QgZXF1YWwgdGhlIHNhbWUNCistLSBrZXlzIGZldGNoZWQgZnJvbSB0aGUg aGVhcCBieSBhIHNlcXVlbnRpYWwgc2NhbiAoYW4gaW5kZXBlbmRlbnQgcGF0aCk6IGlmDQorLS0g ZGVjb2RpbmcgdGhlIGNvZGVkIGxlYXZlcyB3ZXJlIHdyb25nLCB0aGUgdHdvIGRpZ2VzdHMgd291 bGQgZGlmZmVyLg0KK1NFVCBlbmFibGVfaW5kZXhvbmx5c2NhbiA9IG9uOw0KK1NFTEVDVCBtZDUo c3RyaW5nX2FnZyh1LCAnfCcgT1JERVIgQlkgdSkpIEFTIGlvc19kaWdlc3QNCisgIEZST00gYnRy ZWVfcHJlZml4IFdIRVJFIHUgSVMgTk9UIE5VTEwgXGdzZXQNCitTRVQgZW5hYmxlX2luZGV4c2Nh biA9IG9mZjsNCitTRVQgZW5hYmxlX2luZGV4b25seXNjYW4gPSBvZmY7DQorU0VUIGVuYWJsZV9z ZXFzY2FuID0gb247DQorU0VMRUNUIDonaW9zX2RpZ2VzdCcgPQ0KKyAgICAgICAoU0VMRUNUIG1k NShzdHJpbmdfYWdnKHUsICd8JyBPUkRFUiBCWSB1KSkgRlJPTSBidHJlZV9wcmVmaXggV0hFUkUg dSBJUyBOT1QgTlVMTCkNCisgICAgICAgQVMgcG9zdF9jaHVybl9vazsNCitTRVQgZW5hYmxlX2lu ZGV4c2NhbiA9IG9uOw0KK1JFU0VUIGVuYWJsZV9zZXFzY2FuOw0KK1JFU0VUIGVuYWJsZV9iaXRt YXBzY2FuOw0KKw0KKy0tIFRoZSByZWxvcHRpb24gcm91bmQtdHJpcHMgYW5kIGNhbiBiZSB0b2dn bGVkIHdpdGhvdXQgYSByZXdyaXRlLg0KK1NFTEVDVCByZWxvcHRpb25zIEZST00gcGdfY2xhc3Mg V0hFUkUgcmVsbmFtZSA9ICdidHJlZV9wcmVmaXhfb24nOw0KK0FMVEVSIElOREVYIGJ0cmVlX3By ZWZpeF9vbiBTRVQgKHByZWZpeF9jb21wcmVzc2lvbiA9IG9mZik7DQorU0VMRUNUIHJlbG9wdGlv bnMgRlJPTSBwZ19jbGFzcyBXSEVSRSByZWxuYW1lID0gJ2J0cmVlX3ByZWZpeF9vbic7DQorLS0g UmVhZGluZyBiYWNrIHdpdGggdGhlIG9wdGlvbiBvZmYgc3RpbGwgcmV0dXJucyBjb3JyZWN0IHJv d3M6IGV4aXN0aW5nDQorLS0gQlRQX1BSRUZJWCBsZWF2ZXMga2VlcCB0aGVpciBjb2RlZCBmb3Jt IGFuZCBkZWNvZGUgb24gdGhlIHBhZ2UgZmxhZy4NCitTRVQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7 DQorU0VMRUNUIGNvdW50KCopIEZST00gYnRyZWVfcHJlZml4IFdIRVJFIHUgPSByZXBlYXQoJ2En LCAxMjYpOw0KK1JFU0VUIGVuYWJsZV9zZXFzY2FuOw0KKw0KKy0tIEEgbm9uLXZhcmxlbmEgZmly c3QgY29sdW1uIGlzIGxlZ2FsIGFuZCBzaWxlbnRseSBzdG9yZXMgbm8gcHJlZml4OyB2ZXJpZnkg YQ0KKy0tIHNjYW4gb3ZlciBzdWNoIGFuIGluZGV4IHJldHVybnMgY29ycmVjdCByb3dzLg0KK0NS RUFURSBJTkRFWCBidHJlZV9wcmVmaXhfaW50IE9OIGJ0cmVlX3ByZWZpeCAoKGxlbmd0aCh1KSkp IFdJVEggKHByZWZpeF9jb21wcmVzc2lvbiA9IG9uKTsNCitTRVQgZW5hYmxlX3NlcXNjYW4gPSBv ZmY7DQorU0VMRUNUIGxlbmd0aCh1KSBGUk9NIGJ0cmVlX3ByZWZpeCBXSEVSRSBsZW5ndGgodSkg PSAzMDA7DQorUkVTRVQgZW5hYmxlX3NlcXNjYW47DQorRFJPUCBUQUJMRSBidHJlZV9wcmVmaXg7 DQorDQorLS0NCistLSBCb3R0b20tdXAgaW5kZXggZGVsZXRpb24gb24gcHJlZml4LWNvbXByZXNz ZWQgcGFnZXMuDQorLS0NCistLSBBbiBVUERBVEUgdGhhdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGlu ZGV4ZWQgY29sdW1uIG1hcmtzIHRoZSByZXN1bHRpbmcgaW5kZXgNCistLSBpbnNlcnQgImxvZ2lj YWxseSB1bmNoYW5nZWQiLCB3aGljaCBsZXRzIG5idHJlZSBydW4gYSBib3R0b20tdXAgZGVsZXRp b24NCistLSBwYXNzIGJlZm9yZSBzcGxpdHRpbmcgYSBsZWFmLiAgVGhhdCBwYXNzIHJlYWRzIGFu ZCAob25seSkgcmVtb3ZlcyBpdGVtczsgaXQNCistLSBtdXN0IHdvcmsgb24gY29kZWQgcGFnZXMg dG9vLiAgSGVyZSB3ZSBleGVyY2lzZSB0aGUgcGF0aCBhbmQgdmVyaWZ5IHRoZQ0KKy0tIGluZGV4 IHN0YXlzIGNvcnJlY3Q7IGNvbW1pdHRlZCB1cGRhdGUgYmF0Y2hlcyBiZXR3ZWVuIFZBQ1VVTXMg bGVhdmUNCistLSByZW1vdmFibGUgZHVwbGljYXRlcyBmb3IgdGhlIHBhc3MgdG8gZmluZC4gIChC bG9hdCBpcyBxdWFudGlmaWVkIGluIHRoZQ0KKy0tIHBlcmZvcm1hbmNlIGJlbmNobWFyaywgbm90 IGhlcmUsIHNpbmNlIHJlbW92YWJpbGl0eSBpcyB0aW1pbmctZGVwZW5kZW50LikNCistLQ0KK0NS RUFURSBUQUJMRSBidHJlZV9wcmVmaXhfYnUgKGlkIGludCBQUklNQVJZIEtFWSwgdSB0ZXh0IENP TExBVEUgIkMiLCBmaWxsZXIgdGV4dCk7DQorSU5TRVJUIElOVE8gYnRyZWVfcHJlZml4X2J1DQor ICBTRUxFQ1QgZywgJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC8nIHx8IGxwYWQoKGcgJSA1MDAp Ojp0ZXh0LCA4LCAnMCcpLCByZXBlYXQoJ3gnLCA0MCkNCisgIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsIDQwMDApIGc7DQorQ1JFQVRFIElOREVYIGJ0cmVlX3ByZWZpeF9idV91IE9OIGJ0cmVlX3By ZWZpeF9idSAodSkgV0lUSCAocHJlZml4X2NvbXByZXNzaW9uID0gb24pOw0KKy0tIFNldmVyYWwg Y29tbWl0dGVkIG5vbi1rZXkgVVBEQVRFIGJhdGNoZXMgKHZlcnNpb24gY2h1cm4gb24gdGhlIHBy ZWZpeCBpbmRleCkuDQorVVBEQVRFIGJ0cmVlX3ByZWZpeF9idSBTRVQgZmlsbGVyID0gcmVwZWF0 KCd5JywgNDApOw0KK1VQREFURSBidHJlZV9wcmVmaXhfYnUgU0VUIGZpbGxlciA9IHJlcGVhdCgn eicsIDQwKTsNCitVUERBVEUgYnRyZWVfcHJlZml4X2J1IFNFVCBmaWxsZXIgPSByZXBlYXQoJ3cn LCA0MCk7DQorLS0gQ29ycmVjdG5lc3MgYWZ0ZXIgdGhlIGNodXJuOiBhbiBpbmRleC1vbmx5IHNj YW4gb2YgdGhlIGtleSBjb2x1bW4gbXVzdCBlcXVhbA0KKy0tIHRoZSBpbmRlcGVuZGVudCBvcmFj bGUgKHRoZSBsaXRlcmFsIGtleXMpLCBwcm92aW5nIG5vIGRlY29kZS9kZWxldGlvbiBkYW1hZ2Uu DQorU0VUIGVuYWJsZV9zZXFzY2FuID0gb2ZmOw0KK1NFTEVDVCAoU0VMRUNUIG1kNShzdHJpbmdf YWdnKHUsICd8JyBPUkRFUiBCWSB1KSkgRlJPTSBidHJlZV9wcmVmaXhfYnUpID0NCisgICAgICAg bWQ1KHN0cmluZ19hZ2coeCwgJ3wnIE9SREVSIEJZIHgpKSBBUyBib3R0b211cF9vaw0KKyAgRlJP TSAoU0VMRUNUICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvJyB8fCBscGFkKChnICUgNTAwKTo6 dGV4dCwgOCwgJzAnKSBBUyB4DQorICAgICAgICAgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDQw MDApIGcpIG9yYWNsZTsNCitTRUxFQ1QgY291bnQoKikgRlJPTSBidHJlZV9wcmVmaXhfYnUNCisg IFdIRVJFIHUgPSAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoLycgfHwgbHBhZCgnNycsIDgsICcw Jyk7DQorUkVTRVQgZW5hYmxlX3NlcXNjYW47DQorRFJPUCBUQUJMRSBidHJlZV9wcmVmaXhfYnU7 DQorDQorLS0NCistLSBSdW50aW1lIGRlZHVwbGljYXRpb24gb24gYSBwcmVmaXgtY29tcHJlc3Nl ZCBwYWdlLiAgRHVwbGljYXRlIGtleXMgaW5zZXJ0ZWQNCistLSBvbmUgYXQgYSB0aW1lIGludG8g YW4gZXhpc3RpbmcgcHJlZml4IGluZGV4IGZpbGwgYSBsZWFmOyBiZWZvcmUgaXQgc3BsaXRzLA0K Ky0tIHRoZSBkZWR1cGxpY2F0aW9uIHBhc3MgZGVjb2RlcyB0aGUgY29kZWQgaXRlbXMsIG1lcmdl cyB0aGUgZHVwbGljYXRlIFRJRHMNCistLSBpbnRvIHBvc3RpbmcgbGlzdHMgYW5kIHJlLWNvZGVz IHRoZSBwYWdlLiAgVGhlIGRlY29kZWQgc2V0IGNhbiBleGNlZWQgb25lDQorLS0gcGFnZSBldmVu IHdoZW4gdGhlIGNvZGVkIGZvcm0gZml0LCBpbiB3aGljaCBjYXNlIHRoZSBwYXNzIGFib3J0cyBh bmQgdGhlDQorLS0gcGFnZSBzcGxpdHMgaW5zdGVhZDsgZWl0aGVyIHdheSB0aGUgcmVzdWx0IG11 c3QgYmUgY29ycmVjdC4NCistLQ0KK0NSRUFURSBUQUJMRSBidHJlZV9wcmVmaXhfZGQgKHUgdGV4 dCBDT0xMQVRFICJDIik7DQorQ1JFQVRFIElOREVYIGJ0cmVlX3ByZWZpeF9kZF91IE9OIGJ0cmVl X3ByZWZpeF9kZCAodSkgV0lUSCAocHJlZml4X2NvbXByZXNzaW9uID0gb24pOw0KK0lOU0VSVCBJ TlRPIGJ0cmVlX3ByZWZpeF9kZA0KKyAgU0VMRUNUICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgv dG8vcmVzb3VyY2UvJyB8fCBscGFkKChnICUgMjAwKTo6dGV4dCwgOCwgJzAnKQ0KKyAgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwgNDAwMDApIGc7DQorU0VUIGVuYWJsZV9zZXFzY2FuID0gb2ZmOw0K K1NFTEVDVCAoU0VMRUNUIG1kNShzdHJpbmdfYWdnKHUsICd8JyBPUkRFUiBCWSB1KSkgRlJPTSBi dHJlZV9wcmVmaXhfZGQpID0NCisgICAgICAgbWQ1KHN0cmluZ19hZ2coeCwgJ3wnIE9SREVSIEJZ IHgpKSBBUyBydW50aW1lX2RlZHVwX29rDQorICBGUk9NIChTRUxFQ1QgJ2h0dHBzOi8vZXhhbXBs ZS5jb20vcGF0aC90by9yZXNvdXJjZS8nIHx8IGxwYWQoKGcgJSAyMDApOjp0ZXh0LCA4LCAnMCcp IEFTIHgNCisgICAgICAgICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNDAwMDApIGcpIG9yYWNs ZTsNCitTRUxFQ1QgY291bnQoKikgRlJPTSBidHJlZV9wcmVmaXhfZGQNCisgIFdIRVJFIHUgPSAn aHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLycgfHwgbHBhZCgnNDInLCA4LCAn MCcpOw0KK1JFU0VUIGVuYWJsZV9zZXFzY2FuOw0KK0RST1AgVEFCTEUgYnRyZWVfcHJlZml4X2Rk Ow0KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QNCmluZGV4IGE3YThkYmRkMjNmLi42MTFjODIwZDYy NyAxMDA2NDQNCi0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0DQorKysgYi9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdA0KQEAgLTIxNSw2ICsyMTUsNyBAQCBCVERl bGV0ZWRQYWdlRGF0YQ0KIEJUSW5kZXhTdGF0DQogQlRJbnNlcnRTdGF0ZQ0KIEJUSW5zZXJ0U3Rh dGVEYXRhDQorQlRJdGVtQnVmDQogQlRMZWFkZXINCiBCVE1ldGFQYWdlRGF0YQ0KIEJUT25lVmFj SW5mbw0KQEAgLTIyNiw2ICsyMjcsNyBAQCBCVFBhZ2VTdGF0DQogQlRQYWdlU3RhdGUNCiBCVFBh cmFsbGVsU2NhbkRlc2MNCiBCVFBlbmRpbmdGU00NCitCVFByZWZpeFBsYW4NCiBCVFJlYWRQYWdl U3RhdGUNCiBCVFNjYW5JbnNlcnQNCiBCVFNjYW5JbnNlcnREYXRhDQotLSANCjIuNTQuMA0KDQo= --b1=_DRlGM10V29RE7uxMMtnNY2MOrcrNeX9pLl6ag51FQw--