Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vQuzT-0025eB-2z for pgsql-hackers@arkaria.postgresql.org; Wed, 03 Dec 2025 22:06:29 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vQuzR-00GYXY-03 for pgsql-hackers@arkaria.postgresql.org; Wed, 03 Dec 2025 22:06:25 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vQuzP-00GYXP-33 for pgsql-hackers@lists.postgresql.org; Wed, 03 Dec 2025 22:06:24 +0000 Received: from fout-a4-smtp.messagingengine.com ([103.168.172.147]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vQuzM-002zYj-22 for pgsql-hackers@postgresql.org; Wed, 03 Dec 2025 22:06:23 +0000 Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailfout.phl.internal (Postfix) with ESMTP id C3E05EC0557; Wed, 3 Dec 2025 17:06:17 -0500 (EST) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-02.internal (MEProxy); Wed, 03 Dec 2025 17:06:17 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=burd.me; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm1; t=1764799577; x=1764885977; bh=YkIUFsW67j mI6CUEXuNm/unoRDmFKot8UexRua/LNns=; b=fR6y3w2+yE9MP+pueFpsdMutsi qdBBMaRH+8nTZTKfXnjQrZeMQgsGnvRUsIkiIxYJg48Hrc3s5ipjDSzAYkxwOoNU UXP/6SlIvG7Yb1y8AgfbMM1hbwwFHr++KVOWW1mld0kQGWD4hXMtfTmpn8jtSUKD Gzv5DkC8oU8+PwoceeEbIYG7/uf1Q2JBmzyl4kOEwoL1O41Ile5dT6f21vJLsYgk ytFqjn5+I7PODsBl5fHYXm1DCK4C+Va2mTfObU7bl9MrgAs5fRwRKRdQs1fVAz/+ eJRPOax5HV+9u/iSElXwUbyYvnyDUt1EotMYgK9lIIPatFI3sPbLgXHScOXA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t= 1764799577; x=1764885977; bh=YkIUFsW67jmI6CUEXuNm/unoRDmFKot8Uex Rua/LNns=; b=G/+ICDiQ7/cxhYymqTa1Mh8hS+Rs1WODX1zqbf2VXi3HWlj1Y/2 akhDhLNfOd2EKq2kBsZGmGng1w0vEvvGCMca4xUWodNGKNqQPgvjPDxGRN244Khr 8jk6i+hZmF2j8FkxjwItfJtvZL10kHDfqcu6iGKhs+Da+GbP9p4duQ4aImrSXYZT 5ZZNLnHUHxUWkPwtyrJ5bCGzGFCB70f4gfpcYJ9ScGNi/tjuyOnQEL1kWHJqB7pH sp4qix8rGnmlSolrA7QeOiwXgLxZiQDa9JUCFKDgYHACvj9DRcDBdTqpmWCSC2Qq ZrEyKRE/wp32315raOIUpN/7LRux+WT/E1w== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefgedrtddtgdefleehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceurghi lhhouhhtmecufedttdenucenucfjughrpeffhffvvefkjghfuffogggtsehmtdhmreertd ejnecuhfhrohhmpefirhgvghcuuehurhguuceoghhrvghgsegsuhhrugdrmhgvqeenucgg tffrrghtthgvrhhnpeduvdefheejueehvdetheduuefhtdfhjeeujedugeeivefghfelgf elffehhfegveenucffohhmrghinhepphhoshhtghhrvghsqhhlrdhorhhgnecuvehluhhs thgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepghhrvghgsegsuhhrug drmhgvpdhnsggprhgtphhtthhopedvpdhmohguvgepshhmthhpohhuthdprhgtphhtthho pegsohgvkhgvfihurhhmodhpohhsthhgrhgvshesghhmrghilhdrtghomhdprhgtphhtth hopehpghhsqhhlqdhhrggtkhgvrhhssehpohhsthhgrhgvshhqlhdrohhrgh X-ME-Proxy: Feedback-ID: i675e48f3:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Wed, 3 Dec 2025 17:06:17 -0500 (EST) Date: Wed, 3 Dec 2025 17:06:06 -0500 From: Greg Burd To: Matthias van de Meent Cc: "=?utf-8?Q?pgsql-hackers=40postgresql.org?=" Message-ID: <7C11AD9F-6466-4E23-8CCC-058305D76A9A@greg.burd.me> In-Reply-To: References: Subject: Re: Expanding HOT updates for expression and partial indexes X-Mailer: Mailspring MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="6930b44e_6839fabe_1328" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --6930b44e_6839fabe_1328 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline On Nov 24 2025, at 1:59 pm, Matthias van de Meent wrote: > ... ... > > Kind regards, > > Matthias van de Meent Hey Matthias, I've updated the patch set to v25 and taken your suggested approach of minimizing changes in hopes of getting the majority of this patch series committed (I hope) soon. By that I mean that $subject isn't really accurate anymore. This patch uses datumIsEqual(), but still introduces the new index AM API and still moves HeapDetermineColumnsInfo() into a function in nodeModifyTable.c called ExecWhichIndexesRequireUpdates(). The "big idea" is that before calling into the table AM to update a tuple the executor should know what the impact of that update will be for the indexes on the relation. ExecWhichIndexesRequireUpdates() finds the set of attributes that were a) modified and b) are referenced by an index and cause that index to need a new index tuple. This is left up to heap now, but really should be generic across all table AMs (IMO), so that's what I've done. At some point in the future maybe there's a way to switch from the heap-specific model of all/none/summarized-only to something where we only update indexes that really require the updates (HOT, WARM, etc.) and I think this is a step in that direction, but for now the logic remains the same as does the signal (TU_Updated). I'll re-introduce $subject as a layer on v24 next week at which point I'll try to address all the good points you raised in your email. Those additions (HOT expressions, HOT partial indexes, and type-specific equality tests) are the most controversial. I think it may be possible that these first few patches are less controversial and could make the cut sooner while those other ideas remain up for debate. I'm open to that, I think the work in the attached set is good and valuable on it's own. So, the attached patch set Benefits of the patch: * the tests for what changed move outside of the buffer lock * the redundant index_unchanged_by_update() is removed Downsides of the patch: * a bit of new overhead in some cases * a bit more complicated logic than before Recall that this patch set combines with another one of mine on the list [1] which covers the simple_heap_update() path, this one doesn't cover that case and you'll see that simple_heap_update() still depends on HeapDetermineColumnsInfo(). * 0001 - Prepare heapam_tuple_update() and simple_heap_update() for divergence This splits off the top of heap_update() and places that logic in both heapam_tuple_update() and simple_heap_update(). This patch is also present in the other thread [1] and essentially the same. That thread addresses the changes to the catalog tuple updates. No real effort was made to make this patch "pretty" or "stand-alone" as it really is a precursor to the work in 0002 and in [1]. * 0002 - Track changed indexed columns in the executor during UPDATEs This is where the meat is, as described in earlier emails and the commit message. HeapDetermineColumnsInfo() logic moves up into the executor into ExecWhichIndexesRequireUpdates(). Some heap-specific logic related to replica identity remains in heapam_tuple_update(). * 0003 - Replace index_unchanged_by_update() with ri_ChangedIndexedCols This removes the now redundant index_unchanged_by_update() function and instead uses the information gathered in ExecWhichIndexesRequireUpdates() and recorded in ri_ChangedIndexCols for the same outcome. best. -greg [1] https://www.postgresql.org/message-id/flat/2C5C8B8D-8B36-4547-88EB-BDCF9A7C8D94@greg.burd.me --6930b44e_6839fabe_1328 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="=?utf-8?Q?v25-0001-Prepare-heapam=5Ftuple=5Fupdate-and-simple=5Fheap=5Fupda.patch?=" RnJvbSA4OGZiYWIxZjc5ZDgyYjFlYjUxYmUyMDU0Y2FiMzAzYWU4NTZmM2UyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTogU3VuLCAy IE5vdiAyMDI1IDExOjM2OjIwIC0wNTAwClN1YmplY3Q6IFtQQVRDSCB2MjUgMS8zXSBQcmVwYXJl IGhlYXBhbV90dXBsZV91cGRhdGUoKSBhbmQKIHNpbXBsZV9oZWFwX3VwZGF0ZSgpIGZvciBkaXZl cmdlbmNlCgpUaGlzIGNvbW1pdCBsYXlzIHRoZSBmb3VuZGF0aW9uIGZvciBsYXJnZXIgY2hhbmdl cyB0byBjb21lIGJ5IHRha2luZyB0aGUKZmlyc3QgcG9ydGlvbiBvZiBoZWFwX3VwZGF0ZSgpIHRo cm91Z2ggdGhlIEhlYXBEZXRlcm1pbkNvbHVtbnNJbmZvKCkgYW5kCnJlcGxpY2F0aW5nIHRoYXQg bG9naWMgaW4gYm90aCBoZWFwYW1fdHVwbGVfdXBkYXRlKCkgYW5kCnNpbXBsZV9oZWFwX3VwYXRl KCkuICBUaGlzIGlzIGRvbmUgc28gdGhhdCB0aGVzZSB0d28gcGF0aHMgbWlnaHQgZGl2ZXJnZQpp biBpbXBsZW1lbnRhdGlvbiBsYXRlciBvbi4gIFRoZSBzaW1wbGVfaGVhcF91cGRhdGUoKSBwYXRo IGRlYWxzIHNvbGVseQp3aXRoIHVwZGF0ZXMgdG8gY2F0YWxvZyB0dXBsZXMgd2hpY2ggY291bGQg cmVjb3JkIHRoZWlyIG1vZGlmaWVkCmF0dHJpYnV0ZXMgcmF0aGVyIHRoYW4gcmVsZWFybiB0aGVt LiAgVGhlIHJlbWFpbmluZyBjYWxscyBmcm9tIHRoZQpleGVjdXRvciBpbnRvIHRoZSB0YWJsZSBB TSB1cGRhdGUgQVBJIGNvdWxkIGluY2x1ZGUgdGhlIHNldCBvZiB1cGRhdGVkCmF0dHJpYnV0ZXMu ICBUaGlzIGlzIGZvcmVzaGFkb3dpbmcuLi4gb2YgY291cnNlLCBhcyB0aGF0J3Mgd2hhdCB0aGUg bmV4dApjb21taXQgd2lsbCBzdGFydCB0byBkby4KCkFzIHBhcnQgb2YgdGhpcyByZW9yZ2FuaXph dGlvbiwgdGhlIGhhbmRsaW5nIG9mIHJlcGxpY2EgaWRlbnRpdHkga2V5CmF0dHJpYnV0ZXMgaGFz IGJlZW4gYWRqdXN0ZWQuIEluc3RlYWQgb2YgZmV0Y2hpbmcgYSBzZWNvbmQgY29weSBvZgp0aGUg Yml0bWFwIGR1cmluZyBhbiB1cGRhdGUgb3BlcmF0aW9uLCB0aGUgY2FsbGVyIGlzIG5vdyByZXF1 aXJlZCB0bwpwcm92aWRlIGl0LiBUaGlzIGNoYW5nZSBhcHBsaWVzIHRvIGJvdGggaGVhcF91cGRh dGUoKSBhbmQKaGVhcF9kZWxldGUoKS4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW0uYyAgICAgICAgIHwgNTY4ICsrKysrKysrKysrLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIHwgMTE3ICsrKystCiBzcmMvaW5jbHVkZS9hY2Nl c3MvaGVhcGFtLmggICAgICAgICAgICAgIHwgIDI0ICstCiAzIGZpbGVzIGNoYW5nZWQsIDQxMCBp bnNlcnRpb25zKCspLCAyOTkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvaGVhcGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwpp bmRleCA0ZDM4MmEwNDMzOC4uMzA4NDdkYjFmZTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5j CkBAIC0zOSwxOCArMzksMjQgQEAKICNpbmNsdWRlICJhY2Nlc3Mvc3luY3NjYW4uaCIKICNpbmNs dWRlICJhY2Nlc3MvdmFsaWQuaCIKICNpbmNsdWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcC5oIgor I2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dpbnNlcnQuaCIK KyNpbmNsdWRlICJjYXRhbG9nL2NhdGFsb2cuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2RhdGFi YXNlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYXRhYmFzZV9kLmgiCiAjaW5jbHVkZSAiY29t bWFuZHMvdmFjdXVtLmgiCisjaW5jbHVkZSAibm9kZXMvYml0bWFwc2V0LmgiCiAjaW5jbHVkZSAi cGdzdGF0LmgiCiAjaW5jbHVkZSAicG9ydC9wZ19iaXR1dGlscy5oIgorI2luY2x1ZGUgInN0b3Jh Z2UvYnVmbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9pdGVtcHRyLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRlICJz dG9yYWdlL3Byb2NhcnJheS5oIgogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCiAjaW5jbHVkZSAi dXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCiAjaW5jbHVkZSAidXRpbHMvaW52YWwuaCIKKyNpbmNs dWRlICJ1dGlscy9yZWxjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3NwY2NhY2hlLmgiCiAjaW5j bHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIApAQCAtNjIsMTYgKzY4LDggQEAgc3RhdGljIFhMb2dS ZWNQdHIgbG9nX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbG4sIEJ1ZmZlciBvbGRidWYsCiAJCQkJ CQkJCSAgSGVhcFR1cGxlIG5ld3R1cCwgSGVhcFR1cGxlIG9sZF9rZXlfdHVwbGUsCiAJCQkJCQkJ CSAgYm9vbCBhbGxfdmlzaWJsZV9jbGVhcmVkLCBib29sIG5ld19hbGxfdmlzaWJsZV9jbGVhcmVk KTsKICNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCi1zdGF0aWMgdm9pZCBjaGVja19sb2NrX2lm X2lucGxhY2VfdXBkYXRlYWJsZV9yZWwoUmVsYXRpb24gcmVsYXRpb24sCi0JCQkJCQkJCQkJCQkg Y29uc3QgSXRlbVBvaW50ZXJEYXRhICpvdGlkLAotCQkJCQkJCQkJCQkJIEhlYXBUdXBsZSBuZXd0 dXApOwogc3RhdGljIHZvaWQgY2hlY2tfaW5wbGFjZV9yZWxfbG9jayhIZWFwVHVwbGUgb2xkdHVw KTsKICNlbmRpZgotc3RhdGljIEJpdG1hcHNldCAqSGVhcERldGVybWluZUNvbHVtbnNJbmZvKFJl bGF0aW9uIHJlbGF0aW9uLAotCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqaW50ZXJlc3RpbmdfY29s cywKLQkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKmV4dGVybmFsX2NvbHMsCi0JCQkJCQkJCQkJICAg SGVhcFR1cGxlIG9sZHR1cCwgSGVhcFR1cGxlIG5ld3R1cCwKLQkJCQkJCQkJCQkgICBib29sICpo YXNfZXh0ZXJuYWwpOwogc3RhdGljIGJvb2wgaGVhcF9hY3F1aXJlX3R1cGxvY2soUmVsYXRpb24g cmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkLAogCQkJCQkJCQkgTG9ja1R1cGxl TW9kZSBtb2RlLCBMb2NrV2FpdFBvbGljeSB3YWl0X3BvbGljeSwKIAkJCQkJCQkJIGJvb2wgKmhh dmVfdHVwbGVfbG9jayk7CkBAIC0xMDMsMTAgKzEwMSwxMCBAQCBzdGF0aWMgYm9vbCBDb25kaXRp b25hbE11bHRpWGFjdElkV2FpdChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0U3RhdHVzIHN0 YXR1cwogc3RhdGljIHZvaWQgaW5kZXhfZGVsZXRlX3NvcnQoVE1fSW5kZXhEZWxldGVPcCAqZGVs c3RhdGUpOwogc3RhdGljIGludAlib3R0b211cF9zb3J0X2FuZF9zaHJpbmsoVE1fSW5kZXhEZWxl dGVPcCAqZGVsc3RhdGUpOwogc3RhdGljIFhMb2dSZWNQdHIgbG9nX2hlYXBfbmV3X2NpZChSZWxh dGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHR1cCk7Ci1zdGF0aWMgSGVhcFR1cGxlIEV4dHJhY3RS ZXBsaWNhSWRlbnRpdHkoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0cCwgYm9vbCBrZXlf cmVxdWlyZWQsCitzdGF0aWMgSGVhcFR1cGxlIEV4dHJhY3RSZXBsaWNhSWRlbnRpdHkoUmVsYXRp b24gcmVsYXRpb24sIEhlYXBUdXBsZSB0cCwKKwkJCQkJCQkJCQlCaXRtYXBzZXQgKnJpZF9hdHRy cywgYm9vbCBrZXlfcmVxdWlyZWQsCiAJCQkJCQkJCQkJYm9vbCAqY29weSk7CiAKLQogLyoKICAq IEVhY2ggdHVwbGUgbG9jayBtb2RlIGhhcyBhIGNvcnJlc3BvbmRpbmcgaGVhdnl3ZWlnaHQgbG9j aywgYW5kIG9uZSBvciB0d28KICAqIGNvcnJlc3BvbmRpbmcgTXVsdGlYYWN0U3RhdHVzZXMgKG9u ZSB0byBtZXJlbHkgbG9jayB0dXBsZXMsIGFub3RoZXIgb25lIHRvCkBAIC0yODE0LDYgKzI4MTIs NyBAQCBoZWFwX2RlbGV0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRh ICp0aWQsCiAJQnVmZmVyCQlidWZmZXI7CiAJQnVmZmVyCQl2bWJ1ZmZlciA9IEludmFsaWRCdWZm ZXI7CiAJVHJhbnNhY3Rpb25JZCBuZXdfeG1heDsKKwlCaXRtYXBzZXQgICpyaWRfYXR0cnM7CiAJ dWludDE2CQluZXdfaW5mb21hc2ssCiAJCQkJbmV3X2luZm9tYXNrMjsKIAlib29sCQloYXZlX3R1 cGxlX2xvY2sgPSBmYWxzZTsKQEAgLTI4MjYsNiArMjgyNSw4IEBAIGhlYXBfZGVsZXRlKFJlbGF0 aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKnRpZCwKIAogCUFzc2VydEhhc1Nu YXBzaG90Rm9yVG9hc3QocmVsYXRpb24pOwogCisJcmlkX2F0dHJzID0gUmVsYXRpb25HZXRJbmRl eEF0dHJCaXRtYXAocmVsYXRpb24sIElOREVYX0FUVFJfQklUTUFQX0lERU5USVRZX0tFWSk7CisK IAkvKgogCSAqIEZvcmJpZCB0aGlzIGR1cmluZyBhIHBhcmFsbGVsIG9wZXJhdGlvbiwgbGVzdCBp dCBhbGxvY2F0ZSBhIGNvbWJvIENJRC4KIAkgKiBPdGhlciB3b3JrZXJzIG1pZ2h0IG5lZWQgdGhh dCBjb21ibyBDSUQgZm9yIHZpc2liaWxpdHkgY2hlY2tzLCBhbmQgd2UKQEAgLTMwMjksNiArMzAz MCw3IEBAIGwxOgogCQkJVW5sb2NrVHVwbGVUdXBsb2NrKHJlbGF0aW9uLCAmKHRwLnRfc2VsZiks IExvY2tUdXBsZUV4Y2x1c2l2ZSk7CiAJCWlmICh2bWJ1ZmZlciAhPSBJbnZhbGlkQnVmZmVyKQog CQkJUmVsZWFzZUJ1ZmZlcih2bWJ1ZmZlcik7CisJCWJtc19mcmVlKHJpZF9hdHRycyk7CiAJCXJl dHVybiByZXN1bHQ7CiAJfQogCkBAIC0zMDUwLDcgKzMwNTIsMTAgQEAgbDE6CiAJICogQ29tcHV0 ZSByZXBsaWNhIGlkZW50aXR5IHR1cGxlIGJlZm9yZSBlbnRlcmluZyB0aGUgY3JpdGljYWwgc2Vj dGlvbiBzbwogCSAqIHdlIGRvbid0IFBBTklDIHVwb24gYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWls dXJlLgogCSAqLwotCW9sZF9rZXlfdHVwbGUgPSBFeHRyYWN0UmVwbGljYUlkZW50aXR5KHJlbGF0 aW9uLCAmdHAsIHRydWUsICZvbGRfa2V5X2NvcGllZCk7CisJb2xkX2tleV90dXBsZSA9IEV4dHJh Y3RSZXBsaWNhSWRlbnRpdHkocmVsYXRpb24sICZ0cCwgcmlkX2F0dHJzLAorCQkJCQkJCQkJCSAg IHRydWUsICZvbGRfa2V5X2NvcGllZCk7CisJYm1zX2ZyZWUocmlkX2F0dHJzKTsKKwlyaWRfYXR0 cnMgPSBOVUxMOwogCiAJLyoKIAkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBwb3NzaWJseS1tdWx0 aXhhY3QtYWJsZSBvcGVyYXRpb24gaW4gdGhlIGN1cnJlbnQKQEAgLTMyNjIsNyArMzI2NywxMCBA QCBzaW1wbGVfaGVhcF9kZWxldGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVy RGF0YSAqdGlkKQogICoJaGVhcF91cGRhdGUgLSByZXBsYWNlIGEgdHVwbGUKICAqCiAgKiBTZWUg dGFibGVfdHVwbGVfdXBkYXRlKCkgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBwYXJhbWV0ZXJz LCBleGNlcHQgdGhhdAotICogdGhpcyByb3V0aW5lIGRpcmVjdGx5IHRha2VzIGEgdHVwbGUgcmF0 aGVyIHRoYW4gYSBzbG90LgorICogdGhpcyByb3V0aW5lIGRpcmVjdGx5IHRha2VzIGEgaGVhcCB0 dXBsZSByYXRoZXIgdGhhbiBhIHNsb3QuCisgKgorICogSXQncyByZXF1aXJlZCB0aGF0IHRoZSBj YWxsZXIgaGFzIGFjcXVpcmVkIHRoZSBwaW4gYW5kIGxvY2sgb24gdGhlIGJ1ZmZlci4KKyAqIFRo YXQgbG9jayBhbmQgcGluIHdpbGwgYmUgbWFuYWdlZCBoZXJlLCBub3QgaW4gdGhlIGNhbGxlci4K ICAqCiAgKiBJbiB0aGUgZmFpbHVyZSBjYXNlcywgdGhlIHJvdXRpbmUgZmlsbHMgKnRtZmQgd2l0 aCB0aGUgdHVwbGUncyB0X2N0aWQsCiAgKiB0X3htYXggKHJlc29sdmluZyBhIHBvc3NpYmxlIE11 bHRpWGFjdCwgaWYgbmVjZXNzYXJ5KSwgYW5kIHRfY21heCAodGhlIGxhc3QKQEAgLTMyNzAsMzAg KzMyNzgsMjEgQEAgc2ltcGxlX2hlYXBfZGVsZXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJ dGVtUG9pbnRlckRhdGEgKnRpZCkKICAqIGdlbmVyYXRlZCBieSBhbm90aGVyIHRyYW5zYWN0aW9u KS4KICAqLwogVE1fUmVzdWx0Ci1oZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3Qg SXRlbVBvaW50ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgbmV3dHVwLAotCQkJQ29tbWFuZElkIGNp ZCwgU25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAotCQkJVE1fRmFpbHVyZURhdGEgKnRt ZmQsIExvY2tUdXBsZU1vZGUgKmxvY2ttb2RlLAotCQkJVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRl X2luZGV4ZXMpCitoZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlRGF0YSAq b2xkdHVwLAorCQkJSGVhcFR1cGxlIG5ld3R1cCwgQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jv c3NjaGVjaywgYm9vbCB3YWl0LAorCQkJVE1fRmFpbHVyZURhdGEgKnRtZmQsIExvY2tUdXBsZU1v ZGUgKmxvY2ttb2RlLCBCdWZmZXIgYnVmZmVyLAorCQkJUGFnZSBwYWdlLCBCbG9ja051bWJlciBi bG9jaywgSXRlbUlkIGxwLCBCaXRtYXBzZXQgKmhvdF9hdHRycywKKwkJCUJpdG1hcHNldCAqc3Vt X2F0dHJzLCBCaXRtYXBzZXQgKnBrX2F0dHJzLCBCaXRtYXBzZXQgKnJpZF9hdHRycywKKwkJCUJp dG1hcHNldCAqbWl4X2F0dHJzLCBCdWZmZXIgKnZtYnVmZmVyLAorCQkJYm9vbCByZXBfaWRfa2V5 X3JlcXVpcmVkLCBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykKIHsKIAlUTV9SZXN1 bHQJcmVzdWx0OwogCVRyYW5zYWN0aW9uSWQgeGlkID0gR2V0Q3VycmVudFRyYW5zYWN0aW9uSWQo KTsKLQlCaXRtYXBzZXQgICpob3RfYXR0cnM7Ci0JQml0bWFwc2V0ICAqc3VtX2F0dHJzOwotCUJp dG1hcHNldCAgKmtleV9hdHRyczsKLQlCaXRtYXBzZXQgICppZF9hdHRyczsKLQlCaXRtYXBzZXQg ICppbnRlcmVzdGluZ19hdHRyczsKLQlCaXRtYXBzZXQgICptb2RpZmllZF9hdHRyczsKLQlJdGVt SWQJCWxwOwotCUhlYXBUdXBsZURhdGEgb2xkdHVwOwogCUhlYXBUdXBsZQloZWFwdHVwOwogCUhl YXBUdXBsZQlvbGRfa2V5X3R1cGxlID0gTlVMTDsKIAlib29sCQlvbGRfa2V5X2NvcGllZCA9IGZh bHNlOwotCVBhZ2UJCXBhZ2U7Ci0JQmxvY2tOdW1iZXIgYmxvY2s7CiAJTXVsdGlYYWN0U3RhdHVz IG14YWN0X3N0YXR1czsKLQlCdWZmZXIJCWJ1ZmZlciwKLQkJCQluZXdidWYsCi0JCQkJdm1idWZm ZXIgPSBJbnZhbGlkQnVmZmVyLAorCUJ1ZmZlcgkJbmV3YnVmLAogCQkJCXZtYnVmZmVyX25ldyA9 IEludmFsaWRCdWZmZXI7CiAJYm9vbAkJbmVlZF90b2FzdDsKIAlTaXplCQluZXd0dXBzaXplLApA QCAtMzMwNyw3ICszMzA2LDYgQEAgaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0 IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIG5ld3R1cCwKIAlib29sCQlhbGxfdmlz aWJsZV9jbGVhcmVkX25ldyA9IGZhbHNlOwogCWJvb2wJCWNoZWNrZWRfbG9ja2VyczsKIAlib29s CQlsb2NrZXJfcmVtYWluczsKLQlib29sCQlpZF9oYXNfZXh0ZXJuYWwgPSBmYWxzZTsKIAlUcmFu c2FjdGlvbklkIHhtYXhfbmV3X3R1cGxlLAogCQkJCXhtYXhfb2xkX3R1cGxlOwogCXVpbnQxNgkJ aW5mb21hc2tfb2xkX3R1cGxlLApAQCAtMzMxNSwxNDQgKzMzMTMsMTMgQEAgaGVhcF91cGRhdGUo UmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxl IG5ld3R1cCwKIAkJCQlpbmZvbWFza19uZXdfdHVwbGUsCiAJCQkJaW5mb21hc2syX25ld190dXBs ZTsKIAotCUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQob3RpZCkpOwotCi0JLyogQ2hlYXAsIHNp bXBsaXN0aWMgY2hlY2sgdGhhdCB0aGUgdHVwbGUgbWF0Y2hlcyB0aGUgcmVsJ3Mgcm93dHlwZS4g Ki8KLQlBc3NlcnQoSGVhcFR1cGxlSGVhZGVyR2V0TmF0dHMobmV3dHVwLT50X2RhdGEpIDw9Ci0J CSAgIFJlbGF0aW9uR2V0TnVtYmVyT2ZBdHRyaWJ1dGVzKHJlbGF0aW9uKSk7Ci0KKwlBc3NlcnQo QnVmZmVySXNMb2NrZWRCeU1lKGJ1ZmZlcikpOworCUFzc2VydChJdGVtSWRJc05vcm1hbChscCkp OwogCUFzc2VydEhhc1NuYXBzaG90Rm9yVG9hc3QocmVsYXRpb24pOwogCi0JLyoKLQkgKiBGb3Ji aWQgdGhpcyBkdXJpbmcgYSBwYXJhbGxlbCBvcGVyYXRpb24sIGxlc3QgaXQgYWxsb2NhdGUgYSBj b21ibyBDSUQuCi0JICogT3RoZXIgd29ya2VycyBtaWdodCBuZWVkIHRoYXQgY29tYm8gQ0lEIGZv ciB2aXNpYmlsaXR5IGNoZWNrcywgYW5kIHdlCi0JICogaGF2ZSBubyBwcm92aXNpb24gZm9yIGJy b2FkY2FzdGluZyBpdCB0byB0aGVtLgotCSAqLwotCWlmIChJc0luUGFyYWxsZWxNb2RlKCkpCi0J CWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RSQU5TQUNUSU9O X1NUQVRFKSwKLQkJCQkgZXJybXNnKCJjYW5ub3QgdXBkYXRlIHR1cGxlcyBkdXJpbmcgYSBwYXJh bGxlbCBvcGVyYXRpb24iKSkpOwotCi0jaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORwotCWNoZWNr X2xvY2tfaWZfaW5wbGFjZV91cGRhdGVhYmxlX3JlbChyZWxhdGlvbiwgb3RpZCwgbmV3dHVwKTsK LSNlbmRpZgotCi0JLyoKLQkgKiBGZXRjaCB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHRvIGJlIGNo ZWNrZWQgZm9yIHZhcmlvdXMgb3BlcmF0aW9ucy4KLQkgKgotCSAqIEZvciBIT1QgY29uc2lkZXJh dGlvbnMsIHRoaXMgaXMgd2FzdGVkIGVmZm9ydCBpZiB3ZSBmYWlsIHRvIHVwZGF0ZSBvcgotCSAq IGhhdmUgdG8gcHV0IHRoZSBuZXcgdHVwbGUgb24gYSBkaWZmZXJlbnQgcGFnZS4gIEJ1dCB3ZSBt dXN0IGNvbXB1dGUgdGhlCi0JICogbGlzdCBiZWZvcmUgb2J0YWluaW5nIGJ1ZmZlciBsb2NrIC0t LSBpbiB0aGUgd29yc3QgY2FzZSwgaWYgd2UgYXJlCi0JICogZG9pbmcgYW4gdXBkYXRlIG9uIG9u ZSBvZiB0aGUgcmVsZXZhbnQgc3lzdGVtIGNhdGFsb2dzLCB3ZSBjb3VsZAotCSAqIGRlYWRsb2Nr IGlmIHdlIHRyeSB0byBmZXRjaCB0aGUgbGlzdCBsYXRlci4gIEluIGFueSBjYXNlLCB0aGUgcmVs Y2FjaGUKLQkgKiBjYWNoZXMgdGhlIGRhdGEgc28gdGhpcyBpcyB1c3VhbGx5IHByZXR0eSBjaGVh cC4KLQkgKgotCSAqIFdlIGFsc28gbmVlZCBjb2x1bW5zIHVzZWQgYnkgdGhlIHJlcGxpY2EgaWRl bnRpdHkgYW5kIGNvbHVtbnMgdGhhdCBhcmUKLQkgKiBjb25zaWRlcmVkIHRoZSAia2V5IiBvZiBy b3dzIGluIHRoZSB0YWJsZS4KLQkgKgotCSAqIE5vdGUgdGhhdCB3ZSBnZXQgY29waWVzIG9mIGVh Y2ggYml0bWFwLCBzbyB3ZSBuZWVkIG5vdCB3b3JyeSBhYm91dAotCSAqIHJlbGNhY2hlIGZsdXNo IGhhcHBlbmluZyBtaWR3YXkgdGhyb3VnaC4KLQkgKi8KLQlob3RfYXR0cnMgPSBSZWxhdGlvbkdl dEluZGV4QXR0ckJpdG1hcChyZWxhdGlvbiwKLQkJCQkJCQkJCQkgICBJTkRFWF9BVFRSX0JJVE1B UF9IT1RfQkxPQ0tJTkcpOwotCXN1bV9hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFw KHJlbGF0aW9uLAotCQkJCQkJCQkJCSAgIElOREVYX0FUVFJfQklUTUFQX1NVTU1BUklaRUQpOwot CWtleV9hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLCBJTkRFWF9B VFRSX0JJVE1BUF9LRVkpOwotCWlkX2F0dHJzID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAo cmVsYXRpb24sCi0JCQkJCQkJCQkJICBJTkRFWF9BVFRSX0JJVE1BUF9JREVOVElUWV9LRVkpOwot CWludGVyZXN0aW5nX2F0dHJzID0gTlVMTDsKLQlpbnRlcmVzdGluZ19hdHRycyA9IGJtc19hZGRf bWVtYmVycyhpbnRlcmVzdGluZ19hdHRycywgaG90X2F0dHJzKTsKLQlpbnRlcmVzdGluZ19hdHRy cyA9IGJtc19hZGRfbWVtYmVycyhpbnRlcmVzdGluZ19hdHRycywgc3VtX2F0dHJzKTsKLQlpbnRl cmVzdGluZ19hdHRycyA9IGJtc19hZGRfbWVtYmVycyhpbnRlcmVzdGluZ19hdHRycywga2V5X2F0 dHJzKTsKLQlpbnRlcmVzdGluZ19hdHRycyA9IGJtc19hZGRfbWVtYmVycyhpbnRlcmVzdGluZ19h dHRycywgaWRfYXR0cnMpOwotCi0JYmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKG90 aWQpOwotCUlOSkVDVElPTl9QT0lOVCgiaGVhcF91cGRhdGUtYmVmb3JlLXBpbiIsIE5VTEwpOwot CWJ1ZmZlciA9IFJlYWRCdWZmZXIocmVsYXRpb24sIGJsb2NrKTsKLQlwYWdlID0gQnVmZmVyR2V0 UGFnZShidWZmZXIpOwotCi0JLyoKLQkgKiBCZWZvcmUgbG9ja2luZyB0aGUgYnVmZmVyLCBwaW4g dGhlIHZpc2liaWxpdHkgbWFwIHBhZ2UgaWYgaXQgYXBwZWFycyB0bwotCSAqIGJlIG5lY2Vzc2Fy eS4gIFNpbmNlIHdlIGhhdmVuJ3QgZ290IHRoZSBsb2NrIHlldCwgc29tZW9uZSBlbHNlIG1pZ2h0 IGJlCi0JICogaW4gdGhlIG1pZGRsZSBvZiBjaGFuZ2luZyB0aGlzLCBzbyB3ZSdsbCBuZWVkIHRv IHJlY2hlY2sgYWZ0ZXIgd2UgaGF2ZQotCSAqIHRoZSBsb2NrLgotCSAqLwotCWlmIChQYWdlSXNB bGxWaXNpYmxlKHBhZ2UpKQotCQl2aXNpYmlsaXR5bWFwX3BpbihyZWxhdGlvbiwgYmxvY2ssICZ2 bWJ1ZmZlcik7Ci0KLQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsK LQotCWxwID0gUGFnZUdldEl0ZW1JZChwYWdlLCBJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcihv dGlkKSk7Ci0KLQkvKgotCSAqIFVzdWFsbHksIGEgYnVmZmVyIHBpbiBhbmQvb3Igc25hcHNob3Qg YmxvY2tzIHBydW5pbmcgb2Ygb3RpZCwgZW5zdXJpbmcKLQkgKiB3ZSBzZWUgTFBfTk9STUFMIGhl cmUuICBXaGVuIHRoZSBvdGlkIG9yaWdpbiBpcyBhIHN5c2NhY2hlLCB3ZSBtYXkgaGF2ZQotCSAq IG5laXRoZXIgYSBwaW4gbm9yIGEgc25hcHNob3QuICBIZW5jZSwgd2UgbWF5IHNlZSBvdGhlciBM UF8gc3RhdGVzLCBlYWNoCi0JICogb2Ygd2hpY2ggaW5kaWNhdGVzIGNvbmN1cnJlbnQgcHJ1bmlu Zy4KLQkgKgotCSAqIEZhaWxpbmcgd2l0aCBUTV9VcGRhdGVkIHdvdWxkIGJlIG1vc3QgYWNjdXJh dGUuICBIb3dldmVyLCB1bmxpa2Ugb3RoZXIKLQkgKiBUTV9VcGRhdGVkIHNjZW5hcmlvcywgd2Ug ZG9uJ3Qga25vdyB0aGUgc3VjY2Vzc29yIGN0aWQgaW4gTFBfVU5VU0VEIGFuZAotCSAqIExQX0RF QUQgY2FzZXMuICBXaGlsZSB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBUTV9VcGRhdGVkIGFuZCBU TV9EZWxldGVkCi0JICogZG9lcyBtYXR0ZXIgdG8gU1FMIHN0YXRlbWVudHMgVVBEQVRFIGFuZCBN RVJHRSwgdGhvc2UgU1FMIHN0YXRlbWVudHMKLQkgKiBob2xkIGEgc25hcHNob3QgdGhhdCBlbnN1 cmVzIExQX05PUk1BTC4gIEhlbmNlLCB0aGUgY2hvaWNlIGJldHdlZW4KLQkgKiBUTV9VcGRhdGVk IGFuZCBUTV9EZWxldGVkIGFmZmVjdHMgb25seSB0aGUgd29yZGluZyBvZiBlcnJvciBtZXNzYWdl cy4KLQkgKiBTZXR0bGUgb24gVE1fRGVsZXRlZCwgZm9yIHR3byByZWFzb25zLiAgRmlyc3QsIGl0 IGF2b2lkcyBjb21wbGljYXRpbmcKLQkgKiB0aGUgc3BlY2lmaWNhdGlvbiBvZiB3aGVuIHRtZmQt PmN0aWQgaXMgdmFsaWQuICBTZWNvbmQsIGl0IGNyZWF0ZXMKLQkgKiBlcnJvciBsb2cgZXZpZGVu Y2UgdGhhdCB3ZSB0b29rIHRoaXMgYnJhbmNoLgotCSAqCi0JICogU2luY2UgaXQncyBwb3NzaWJs ZSB0byBzZWUgTFBfVU5VU0VEIGF0IG90aWQsIGl0J3MgYWxzbyBwb3NzaWJsZSB0byBzZWUKLQkg KiBMUF9OT1JNQUwgZm9yIGEgdHVwbGUgdGhhdCByZXBsYWNlZCBMUF9VTlVTRUQuICBJZiBpdCdz IGEgdHVwbGUgZm9yIGFuCi0JICogdW5yZWxhdGVkIHJvdywgd2UnbGwgZmFpbCB3aXRoICJkdXBs aWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSIuCi0JICogWFhYIGlmIG90aWQgaXMgdGhl IGxpdmUsIG5ld2VyIHZlcnNpb24gb2YgdGhlIG5ld3R1cCByb3csIHdlJ2xsIGRpc2NhcmQKLQkg KiBjaGFuZ2VzIG9yaWdpbmF0aW5nIGluIHZlcnNpb25zIG9mIHRoaXMgY2F0YWxvZyByb3cgYWZ0 ZXIgdGhlIHZlcnNpb24KLQkgKiB0aGUgY2FsbGVyIGdvdCBmcm9tIHN5c2NhY2hlLiAgU2VlIHN5 c2NhY2hlLXVwZGF0ZS1wcnVuZWQuc3BlYy4KLQkgKi8KLQlpZiAoIUl0ZW1JZElzTm9ybWFsKGxw KSkKLQl7Ci0JCUFzc2VydChSZWxhdGlvblN1cHBvcnRzU3lzQ2FjaGUoUmVsYXRpb25HZXRSZWxp ZChyZWxhdGlvbikpKTsKLQotCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7Ci0JCUFzc2Vy dCghaGF2ZV90dXBsZV9sb2NrKTsKLQkJaWYgKHZtYnVmZmVyICE9IEludmFsaWRCdWZmZXIpCi0J CQlSZWxlYXNlQnVmZmVyKHZtYnVmZmVyKTsKLQkJdG1mZC0+Y3RpZCA9ICpvdGlkOwotCQl0bWZk LT54bWF4ID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7Ci0JCXRtZmQtPmNtYXggPSBJbnZhbGlkQ29t bWFuZElkOwotCQkqdXBkYXRlX2luZGV4ZXMgPSBUVV9Ob25lOwotCi0JCWJtc19mcmVlKGhvdF9h dHRycyk7Ci0JCWJtc19mcmVlKHN1bV9hdHRycyk7Ci0JCWJtc19mcmVlKGtleV9hdHRycyk7Ci0J CWJtc19mcmVlKGlkX2F0dHJzKTsKLQkJLyogbW9kaWZpZWRfYXR0cnMgbm90IHlldCBpbml0aWFs aXplZCAqLwotCQlibXNfZnJlZShpbnRlcmVzdGluZ19hdHRycyk7Ci0JCXJldHVybiBUTV9EZWxl dGVkOwotCX0KLQotCS8qCi0JICogRmlsbCBpbiBlbm91Z2ggZGF0YSBpbiBvbGR0dXAgZm9yIEhl YXBEZXRlcm1pbmVDb2x1bW5zSW5mbyB0byB3b3JrCi0JICogcHJvcGVybHkuCi0JICovCi0Jb2xk dHVwLnRfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKLQlvbGR0dXAudF9k YXRhID0gKEhlYXBUdXBsZUhlYWRlcikgUGFnZUdldEl0ZW0ocGFnZSwgbHApOwotCW9sZHR1cC50 X2xlbiA9IEl0ZW1JZEdldExlbmd0aChscCk7Ci0Jb2xkdHVwLnRfc2VsZiA9ICpvdGlkOwotCi0J LyogdGhlIG5ldyB0dXBsZSBpcyByZWFkeSwgZXhjZXB0IGZvciB0aGlzOiAqLworCS8qIFRoZSBu ZXcgdHVwbGUgaXMgcmVhZHksIGV4Y2VwdCBmb3IgdGhpcyAqLwogCW5ld3R1cC0+dF90YWJsZU9p ZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOwogCi0JLyoKLQkgKiBEZXRlcm1pbmUgY29s dW1ucyBtb2RpZmllZCBieSB0aGUgdXBkYXRlLiAgQWRkaXRpb25hbGx5LCBpZGVudGlmeQotCSAq IHdoZXRoZXIgYW55IG9mIHRoZSB1bm1vZGlmaWVkIHJlcGxpY2EgaWRlbnRpdHkga2V5IGF0dHJp YnV0ZXMgaW4gdGhlCi0JICogb2xkIHR1cGxlIGlzIGV4dGVybmFsbHkgc3RvcmVkIG9yIG5vdC4g IFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBmb3IKLQkgKiBzdWNoIGF0dHJpYnV0ZXMgdGhlIGZs YXR0ZW5lZCB2YWx1ZSB3b24ndCBiZSBXQUwgbG9nZ2VkIGFzIHBhcnQgb2YgdGhlCi0JICogbmV3 IHR1cGxlIHNvIHdlIG11c3QgaW5jbHVkZSBpdCBhcyBwYXJ0IG9mIHRoZSBvbGRfa2V5X3R1cGxl LiAgU2VlCi0JICogRXh0cmFjdFJlcGxpY2FJZGVudGl0eS4KLQkgKi8KLQltb2RpZmllZF9hdHRy cyA9IEhlYXBEZXRlcm1pbmVDb2x1bW5zSW5mbyhyZWxhdGlvbiwgaW50ZXJlc3RpbmdfYXR0cnMs Ci0JCQkJCQkJCQkJCSAgaWRfYXR0cnMsICZvbGR0dXAsCi0JCQkJCQkJCQkJCSAgbmV3dHVwLCAm aWRfaGFzX2V4dGVybmFsKTsKLQogCS8qCiAJICogSWYgd2UncmUgbm90IHVwZGF0aW5nIGFueSAi a2V5IiBjb2x1bW4sIHdlIGNhbiBncmFiIGEgd2Vha2VyIGxvY2sgdHlwZS4KIAkgKiBUaGlzIGFs bG93cyBmb3IgbW9yZSBjb25jdXJyZW5jeSB3aGVuIHdlIGFyZSBydW5uaW5nIHNpbXVsdGFuZW91 c2x5CkBAIC0zNDY0LDcgKzMzMzEsNyBAQCBoZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwg Y29uc3QgSXRlbVBvaW50ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgbmV3dHVwLAogCSAqIGlzIHVw ZGF0ZXMgdGhhdCBkb24ndCBtYW5pcHVsYXRlIGtleSBjb2x1bW5zLCBub3QgdGhvc2UgdGhhdAog CSAqIHNlcmVuZGlwaXRvdXNseSBhcnJpdmUgYXQgdGhlIHNhbWUga2V5IHZhbHVlcy4KIAkgKi8K LQlpZiAoIWJtc19vdmVybGFwKG1vZGlmaWVkX2F0dHJzLCBrZXlfYXR0cnMpKQorCWlmICghYm1z X292ZXJsYXAobWl4X2F0dHJzLCBwa19hdHRycykpCiAJewogCQkqbG9ja21vZGUgPSBMb2NrVHVw bGVOb0tleUV4Y2x1c2l2ZTsKIAkJbXhhY3Rfc3RhdHVzID0gTXVsdGlYYWN0U3RhdHVzTm9LZXlV cGRhdGU7CkBAIC0zNDg4LDE3ICszMzU1LDEwIEBAIGhlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0 aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsIEhlYXBUdXBsZSBuZXd0dXAsCiAJCWtl eV9pbnRhY3QgPSBmYWxzZTsKIAl9CiAKLQkvKgotCSAqIE5vdGU6IGJleW9uZCB0aGlzIHBvaW50 LCB1c2Ugb2xkdHVwIG5vdCBvdGlkIHRvIHJlZmVyIHRvIG9sZCB0dXBsZS4KLQkgKiBvdGlkIG1h eSB2ZXJ5IHdlbGwgcG9pbnQgYXQgbmV3dHVwLT50X3NlbGYsIHdoaWNoIHdlIHdpbGwgb3Zlcndy aXRlCi0JICogd2l0aCB0aGUgbmV3IHR1cGxlJ3MgbG9jYXRpb24sIHNvIHRoZXJlJ3MgZ3JlYXQg cmlzayBvZiBjb25mdXNpb24gaWYgd2UKLQkgKiB1c2Ugb3RpZCBhbnltb3JlLgotCSAqLwotCiBs MjoKIAljaGVja2VkX2xvY2tlcnMgPSBmYWxzZTsKIAlsb2NrZXJfcmVtYWlucyA9IGZhbHNlOwot CXJlc3VsdCA9IEhlYXBUdXBsZVNhdGlzZmllc1VwZGF0ZSgmb2xkdHVwLCBjaWQsIGJ1ZmZlcik7 CisJcmVzdWx0ID0gSGVhcFR1cGxlU2F0aXNmaWVzVXBkYXRlKG9sZHR1cCwgY2lkLCBidWZmZXIp OwogCiAJLyogc2VlIGJlbG93IGFib3V0IHRoZSAibm8gd2FpdCIgY2FzZSAqLwogCUFzc2VydChy ZXN1bHQgIT0gVE1fQmVpbmdNb2RpZmllZCB8fCB3YWl0KTsKQEAgLTM1MzAsOCArMzM5MCw4IEBA IGwyOgogCQkgKi8KIAogCQkvKiBtdXN0IGNvcHkgc3RhdGUgZGF0YSBiZWZvcmUgdW5sb2NraW5n IGJ1ZmZlciAqLwotCQl4d2FpdCA9IEhlYXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLnRf ZGF0YSk7Ci0JCWluZm9tYXNrID0gb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzazsKKwkJeHdhaXQg PSBIZWFwVHVwbGVIZWFkZXJHZXRSYXdYbWF4KG9sZHR1cC0+dF9kYXRhKTsKKwkJaW5mb21hc2sg PSBvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzazsKIAogCQkvKgogCQkgKiBOb3cgd2UgaGF2ZSB0 byBkbyBzb21ldGhpbmcgYWJvdXQgdGhlIGV4aXN0aW5nIGxvY2tlci4gIElmIGl0J3MgYQpAQCAt MzU3MSwxMyArMzQzMSwxMiBAQCBsMjoKIAkJCQkgKiByZXF1ZXN0aW5nIGEgbG9jayBhbmQgYWxy ZWFkeSBoYXZlIG9uZTsgYXZvaWRzIGRlYWRsb2NrKS4KIAkJCQkgKi8KIAkJCQlpZiAoIWN1cnJl bnRfaXNfbWVtYmVyKQotCQkJCQloZWFwX2FjcXVpcmVfdHVwbG9jayhyZWxhdGlvbiwgJihvbGR0 dXAudF9zZWxmKSwgKmxvY2ttb2RlLAorCQkJCQloZWFwX2FjcXVpcmVfdHVwbG9jayhyZWxhdGlv biwgJm9sZHR1cC0+dF9zZWxmLCAqbG9ja21vZGUsCiAJCQkJCQkJCQkJIExvY2tXYWl0QmxvY2ss ICZoYXZlX3R1cGxlX2xvY2spOwogCiAJCQkJLyogd2FpdCBmb3IgbXVsdGl4YWN0ICovCiAJCQkJ TXVsdGlYYWN0SWRXYWl0KChNdWx0aVhhY3RJZCkgeHdhaXQsIG14YWN0X3N0YXR1cywgaW5mb21h c2ssCi0JCQkJCQkJCXJlbGF0aW9uLCAmb2xkdHVwLnRfc2VsZiwgWExUV19VcGRhdGUsCi0JCQkJ CQkJCSZyZW1haW4pOworCQkJCQkJCQlyZWxhdGlvbiwgJm9sZHR1cC0+dF9zZWxmLCBYTFRXX1Vw ZGF0ZSwgJnJlbWFpbik7CiAJCQkJY2hlY2tlZF9sb2NrZXJzID0gdHJ1ZTsKIAkJCQlsb2NrZXJf cmVtYWlucyA9IHJlbWFpbiAhPSAwOwogCQkJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9D S19FWENMVVNJVkUpOwpAQCAtMzU4Nyw5ICszNDQ2LDkgQEAgbDI6CiAJCQkJICogY291bGQgdXBk YXRlIHRoaXMgdHVwbGUgYmVmb3JlIHdlIGdldCB0byB0aGlzIHBvaW50LiAgQ2hlY2sKIAkJCQkg KiBmb3IgeG1heCBjaGFuZ2UsIGFuZCBzdGFydCBvdmVyIGlmIHNvLgogCQkJCSAqLwotCQkJCWlm ICh4bWF4X2luZm9tYXNrX2NoYW5nZWQob2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzaywKKwkJCQlp ZiAoeG1heF9pbmZvbWFza19jaGFuZ2VkKG9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrLAogCQkJ CQkJCQkJCSAgaW5mb21hc2spIHx8Ci0JCQkJCSFUcmFuc2FjdGlvbklkRXF1YWxzKEhlYXBUdXBs ZUhlYWRlckdldFJhd1htYXgob2xkdHVwLnRfZGF0YSksCisJCQkJCSFUcmFuc2FjdGlvbklkRXF1 YWxzKEhlYXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLT50X2RhdGEpLAogCQkJCQkJCQkJ CSB4d2FpdCkpCiAJCQkJCWdvdG8gbDI7CiAJCQl9CkBAIC0zNjE0LDggKzM0NzMsOCBAQCBsMjoK IAkJCSAqIGJlZm9yZSB0aGlzIG9uZSwgd2hpY2ggYXJlIGltcG9ydGFudCB0byBrZWVwIGluIGNh c2UgdGhpcwogCQkJICogc3VieGFjdCBhYm9ydHMuCiAJCQkgKi8KLQkJCWlmICghSEVBUF9YTUFY X0lTX0xPQ0tFRF9PTkxZKG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2spKQotCQkJCXVwZGF0ZV94 YWN0ID0gSGVhcFR1cGxlR2V0VXBkYXRlWGlkKG9sZHR1cC50X2RhdGEpOworCQkJaWYgKCFIRUFQ X1hNQVhfSVNfTE9DS0VEX09OTFkob2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2spKQorCQkJCXVw ZGF0ZV94YWN0ID0gSGVhcFR1cGxlR2V0VXBkYXRlWGlkKG9sZHR1cC0+dF9kYXRhKTsKIAkJCWVs c2UKIAkJCQl1cGRhdGVfeGFjdCA9IEludmFsaWRUcmFuc2FjdGlvbklkOwogCkBAIC0zNjU2LDkg KzM1MTUsOSBAQCBsMjoKIAkJCSAqIGxvY2suCiAJCQkgKi8KIAkJCUxvY2tCdWZmZXIoYnVmZmVy LCBCVUZGRVJfTE9DS19VTkxPQ0spOwotCQkJaGVhcF9hY3F1aXJlX3R1cGxvY2socmVsYXRpb24s ICYob2xkdHVwLnRfc2VsZiksICpsb2NrbW9kZSwKKwkJCWhlYXBfYWNxdWlyZV90dXBsb2NrKHJl bGF0aW9uLCAmb2xkdHVwLT50X3NlbGYsICpsb2NrbW9kZSwKIAkJCQkJCQkJIExvY2tXYWl0Qmxv Y2ssICZoYXZlX3R1cGxlX2xvY2spOwotCQkJWGFjdExvY2tUYWJsZVdhaXQoeHdhaXQsIHJlbGF0 aW9uLCAmb2xkdHVwLnRfc2VsZiwKKwkJCVhhY3RMb2NrVGFibGVXYWl0KHh3YWl0LCByZWxhdGlv biwgJm9sZHR1cC0+dF9zZWxmLAogCQkJCQkJCSAgWExUV19VcGRhdGUpOwogCQkJY2hlY2tlZF9s b2NrZXJzID0gdHJ1ZTsKIAkJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJ VkUpOwpAQCAtMzY2OCwyMCArMzUyNywyMCBAQCBsMjoKIAkJCSAqIG90aGVyIHhhY3QgY291bGQg dXBkYXRlIHRoaXMgdHVwbGUgYmVmb3JlIHdlIGdldCB0byB0aGlzIHBvaW50LgogCQkJICogQ2hl Y2sgZm9yIHhtYXggY2hhbmdlLCBhbmQgc3RhcnQgb3ZlciBpZiBzby4KIAkJCSAqLwotCQkJaWYg KHhtYXhfaW5mb21hc2tfY2hhbmdlZChvbGR0dXAudF9kYXRhLT50X2luZm9tYXNrLCBpbmZvbWFz aykgfHwKKwkJCWlmICh4bWF4X2luZm9tYXNrX2NoYW5nZWQob2xkdHVwLT50X2RhdGEtPnRfaW5m b21hc2ssIGluZm9tYXNrKSB8fAogCQkJCSFUcmFuc2FjdGlvbklkRXF1YWxzKHh3YWl0LAotCQkJ CQkJCQkJIEhlYXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLnRfZGF0YSkpKQorCQkJCQkJ CQkJIEhlYXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLT50X2RhdGEpKSkKIAkJCQlnb3Rv IGwyOwogCiAJCQkvKiBPdGhlcndpc2UgY2hlY2sgaWYgaXQgY29tbWl0dGVkIG9yIGFib3J0ZWQg Ki8KLQkJCVVwZGF0ZVhtYXhIaW50Qml0cyhvbGR0dXAudF9kYXRhLCBidWZmZXIsIHh3YWl0KTsK LQkJCWlmIChvbGR0dXAudF9kYXRhLT50X2luZm9tYXNrICYgSEVBUF9YTUFYX0lOVkFMSUQpCisJ CQlVcGRhdGVYbWF4SGludEJpdHMob2xkdHVwLT50X2RhdGEsIGJ1ZmZlciwgeHdhaXQpOworCQkJ aWYgKG9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrICYgSEVBUF9YTUFYX0lOVkFMSUQpCiAJCQkJ Y2FuX2NvbnRpbnVlID0gdHJ1ZTsKIAkJfQogCiAJCWlmIChjYW5fY29udGludWUpCiAJCQlyZXN1 bHQgPSBUTV9PazsKLQkJZWxzZSBpZiAoIUl0ZW1Qb2ludGVyRXF1YWxzKCZvbGR0dXAudF9zZWxm LCAmb2xkdHVwLnRfZGF0YS0+dF9jdGlkKSkKKwkJZWxzZSBpZiAoIUl0ZW1Qb2ludGVyRXF1YWxz KCZvbGR0dXAtPnRfc2VsZiwgJm9sZHR1cC0+dF9kYXRhLT50X2N0aWQpKQogCQkJcmVzdWx0ID0g VE1fVXBkYXRlZDsKIAkJZWxzZQogCQkJcmVzdWx0ID0gVE1fRGVsZXRlZDsKQEAgLTM2OTQsMzkg KzM1NTMsMzMgQEAgbDI6CiAJCQkgICByZXN1bHQgPT0gVE1fVXBkYXRlZCB8fAogCQkJICAgcmVz dWx0ID09IFRNX0RlbGV0ZWQgfHwKIAkJCSAgIHJlc3VsdCA9PSBUTV9CZWluZ01vZGlmaWVkKTsK LQkJQXNzZXJ0KCEob2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzayAmIEhFQVBfWE1BWF9JTlZBTElE KSk7CisJCUFzc2VydCghKG9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrICYgSEVBUF9YTUFYX0lO VkFMSUQpKTsKIAkJQXNzZXJ0KHJlc3VsdCAhPSBUTV9VcGRhdGVkIHx8Ci0JCQkgICAhSXRlbVBv aW50ZXJFcXVhbHMoJm9sZHR1cC50X3NlbGYsICZvbGR0dXAudF9kYXRhLT50X2N0aWQpKTsKKwkJ CSAgICFJdGVtUG9pbnRlckVxdWFscygmb2xkdHVwLT50X3NlbGYsICZvbGR0dXAtPnRfZGF0YS0+ dF9jdGlkKSk7CiAJfQogCiAJaWYgKGNyb3NzY2hlY2sgIT0gSW52YWxpZFNuYXBzaG90ICYmIHJl c3VsdCA9PSBUTV9PaykKIAl7CiAJCS8qIFBlcmZvcm0gYWRkaXRpb25hbCBjaGVjayBmb3IgdHJh bnNhY3Rpb24tc25hcHNob3QgbW9kZSBSSSB1cGRhdGVzICovCi0JCWlmICghSGVhcFR1cGxlU2F0 aXNmaWVzVmlzaWJpbGl0eSgmb2xkdHVwLCBjcm9zc2NoZWNrLCBidWZmZXIpKQorCQlpZiAoIUhl YXBUdXBsZVNhdGlzZmllc1Zpc2liaWxpdHkob2xkdHVwLCBjcm9zc2NoZWNrLCBidWZmZXIpKQog CQkJcmVzdWx0ID0gVE1fVXBkYXRlZDsKIAl9CiAKIAlpZiAocmVzdWx0ICE9IFRNX09rKQogCXsK LQkJdG1mZC0+Y3RpZCA9IG9sZHR1cC50X2RhdGEtPnRfY3RpZDsKLQkJdG1mZC0+eG1heCA9IEhl YXBUdXBsZUhlYWRlckdldFVwZGF0ZVhpZChvbGR0dXAudF9kYXRhKTsKKwkJdG1mZC0+Y3RpZCA9 IG9sZHR1cC0+dF9kYXRhLT50X2N0aWQ7CisJCXRtZmQtPnhtYXggPSBIZWFwVHVwbGVIZWFkZXJH ZXRVcGRhdGVYaWQob2xkdHVwLT50X2RhdGEpOwogCQlpZiAocmVzdWx0ID09IFRNX1NlbGZNb2Rp ZmllZCkKLQkJCXRtZmQtPmNtYXggPSBIZWFwVHVwbGVIZWFkZXJHZXRDbWF4KG9sZHR1cC50X2Rh dGEpOworCQkJdG1mZC0+Y21heCA9IEhlYXBUdXBsZUhlYWRlckdldENtYXgob2xkdHVwLT50X2Rh dGEpOwogCQllbHNlCiAJCQl0bWZkLT5jbWF4ID0gSW52YWxpZENvbW1hbmRJZDsKIAkJVW5sb2Nr UmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCQlpZiAoaGF2ZV90dXBsZV9sb2NrKQotCQkJVW5sb2Nr VHVwbGVUdXBsb2NrKHJlbGF0aW9uLCAmKG9sZHR1cC50X3NlbGYpLCAqbG9ja21vZGUpOwotCQlp ZiAodm1idWZmZXIgIT0gSW52YWxpZEJ1ZmZlcikKLQkJCVJlbGVhc2VCdWZmZXIodm1idWZmZXIp OworCQkJVW5sb2NrVHVwbGVUdXBsb2NrKHJlbGF0aW9uLCAmb2xkdHVwLT50X3NlbGYsICpsb2Nr bW9kZSk7CisJCWlmICgqdm1idWZmZXIgIT0gSW52YWxpZEJ1ZmZlcikKKwkJCVJlbGVhc2VCdWZm ZXIoKnZtYnVmZmVyKTsKIAkJKnVwZGF0ZV9pbmRleGVzID0gVFVfTm9uZTsKIAotCQlibXNfZnJl ZShob3RfYXR0cnMpOwotCQlibXNfZnJlZShzdW1fYXR0cnMpOwotCQlibXNfZnJlZShrZXlfYXR0 cnMpOwotCQlibXNfZnJlZShpZF9hdHRycyk7Ci0JCWJtc19mcmVlKG1vZGlmaWVkX2F0dHJzKTsK LQkJYm1zX2ZyZWUoaW50ZXJlc3RpbmdfYXR0cnMpOwogCQlyZXR1cm4gcmVzdWx0OwogCX0KIApA QCAtMzczOSwxMCArMzU5MiwxMCBAQCBsMjoKIAkgKiB0dXBsZSBoYXMgYmVlbiBsb2NrZWQgb3Ig dXBkYXRlZCB1bmRlciB1cywgYnV0IGhvcGVmdWxseSBpdCB3b24ndAogCSAqIGhhcHBlbiB2ZXJ5 IG9mdGVuLgogCSAqLwotCWlmICh2bWJ1ZmZlciA9PSBJbnZhbGlkQnVmZmVyICYmIFBhZ2VJc0Fs bFZpc2libGUocGFnZSkpCisJaWYgKCp2bWJ1ZmZlciA9PSBJbnZhbGlkQnVmZmVyICYmIFBhZ2VJ c0FsbFZpc2libGUocGFnZSkpCiAJewogCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tf VU5MT0NLKTsKLQkJdmlzaWJpbGl0eW1hcF9waW4ocmVsYXRpb24sIGJsb2NrLCAmdm1idWZmZXIp OworCQl2aXNpYmlsaXR5bWFwX3BpbihyZWxhdGlvbiwgYmxvY2ssIHZtYnVmZmVyKTsKIAkJTG9j a0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CiAJCWdvdG8gbDI7CiAJfQpA QCAtMzc1Myw5ICszNjA2LDkgQEAgbDI6CiAJICogSWYgdGhlIHR1cGxlIHdlJ3JlIHVwZGF0aW5n IGlzIGxvY2tlZCwgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgbG9ja2luZwogCSAqIGluZm8gaW4g dGhlIG9sZCB0dXBsZSdzIFhtYXguICBQcmVwYXJlIGEgbmV3IFhtYXggdmFsdWUgZm9yIHRoaXMu CiAJICovCi0JY29tcHV0ZV9uZXdfeG1heF9pbmZvbWFzayhIZWFwVHVwbGVIZWFkZXJHZXRSYXdY bWF4KG9sZHR1cC50X2RhdGEpLAotCQkJCQkJCSAgb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzaywK LQkJCQkJCQkgIG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2syLAorCWNvbXB1dGVfbmV3X3htYXhf aW5mb21hc2soSGVhcFR1cGxlSGVhZGVyR2V0UmF3WG1heChvbGR0dXAtPnRfZGF0YSksCisJCQkJ CQkJICBvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzaywKKwkJCQkJCQkgIG9sZHR1cC0+dF9kYXRh LT50X2luZm9tYXNrMiwKIAkJCQkJCQkgIHhpZCwgKmxvY2ttb2RlLCB0cnVlLAogCQkJCQkJCSAg JnhtYXhfb2xkX3R1cGxlLCAmaW5mb21hc2tfb2xkX3R1cGxlLAogCQkJCQkJCSAgJmluZm9tYXNr Ml9vbGRfdHVwbGUpOwpAQCAtMzc2NywxMiArMzYyMCwxMiBAQCBsMjoKIAkgKiB0dXBsZS4gIChJ biByYXJlIGNhc2VzIHRoYXQgbWlnaHQgYWxzbyBiZSBJbnZhbGlkVHJhbnNhY3Rpb25JZCBhbmQg eWV0CiAJICogbm90IGhhdmUgdGhlIEhFQVBfWE1BWF9JTlZBTElEIGJpdCBzZXQ7IHRoYXQncyBm aW5lLikKIAkgKi8KLQlpZiAoKG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2sgJiBIRUFQX1hNQVhf SU5WQUxJRCkgfHwKLQkJSEVBUF9MT0NLRURfVVBHUkFERUQob2xkdHVwLnRfZGF0YS0+dF9pbmZv bWFzaykgfHwKKwlpZiAoKG9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrICYgSEVBUF9YTUFYX0lO VkFMSUQpIHx8CisJCUhFQVBfTE9DS0VEX1VQR1JBREVEKG9sZHR1cC0+dF9kYXRhLT50X2luZm9t YXNrKSB8fAogCQkoY2hlY2tlZF9sb2NrZXJzICYmICFsb2NrZXJfcmVtYWlucykpCiAJCXhtYXhf bmV3X3R1cGxlID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAJZWxzZQotCQl4bWF4X25ld190dXBs ZSA9IEhlYXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLnRfZGF0YSk7CisJCXhtYXhfbmV3 X3R1cGxlID0gSGVhcFR1cGxlSGVhZGVyR2V0UmF3WG1heChvbGR0dXAtPnRfZGF0YSk7CiAKIAlp ZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhtYXhfbmV3X3R1cGxlKSkKIAl7CkBAIC0zNzg3LDcg KzM2NDAsNyBAQCBsMjoKIAkJICogTm90ZSB0aGF0IHNpbmNlIHdlJ3JlIGRvaW5nIGFuIHVwZGF0 ZSwgdGhlIG9ubHkgcG9zc2liaWxpdHkgaXMgdGhhdAogCQkgKiB0aGUgbG9ja2VycyBoYWQgRk9S IEtFWSBTSEFSRSBsb2NrLgogCQkgKi8KLQkJaWYgKG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2sg JiBIRUFQX1hNQVhfSVNfTVVMVEkpCisJCWlmIChvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzayAm IEhFQVBfWE1BWF9JU19NVUxUSSkKIAkJewogCQkJR2V0TXVsdGlYYWN0SWRIaW50Qml0cyh4bWF4 X25ld190dXBsZSwgJmluZm9tYXNrX25ld190dXBsZSwKIAkJCQkJCQkJICAgJmluZm9tYXNrMl9u ZXdfdHVwbGUpOwpAQCAtMzgxNSw3ICszNjY4LDcgQEAgbDI6CiAJICogUmVwbGFjZSBjaWQgd2l0 aCBhIGNvbWJvIENJRCBpZiBuZWNlc3NhcnkuICBOb3RlIHRoYXQgd2UgYWxyZWFkeSBwdXQKIAkg KiB0aGUgcGxhaW4gY2lkIGludG8gdGhlIG5ldyB0dXBsZS4KIAkgKi8KLQlIZWFwVHVwbGVIZWFk ZXJBZGp1c3RDbWF4KG9sZHR1cC50X2RhdGEsICZjaWQsICZpc2NvbWJvKTsKKwlIZWFwVHVwbGVI ZWFkZXJBZGp1c3RDbWF4KG9sZHR1cC0+dF9kYXRhLCAmY2lkLCAmaXNjb21ibyk7CiAKIAkvKgog CSAqIElmIHRoZSB0b2FzdGVyIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCwgT1IgaWYgdGhlIG5ldyB0 dXBsZSB3aWxsIG5vdCBmaXQKQEAgLTM4MzIsMTIgKzM2ODUsMTIgQEAgbDI6CiAJCXJlbGF0aW9u LT5yZF9yZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9NQVRWSUVXKQogCXsKIAkJLyogdG9hc3QgdGFi bGUgZW50cmllcyBzaG91bGQgbmV2ZXIgYmUgcmVjdXJzaXZlbHkgdG9hc3RlZCAqLwotCQlBc3Nl cnQoIUhlYXBUdXBsZUhhc0V4dGVybmFsKCZvbGR0dXApKTsKKwkJQXNzZXJ0KCFIZWFwVHVwbGVI YXNFeHRlcm5hbChvbGR0dXApKTsKIAkJQXNzZXJ0KCFIZWFwVHVwbGVIYXNFeHRlcm5hbChuZXd0 dXApKTsKIAkJbmVlZF90b2FzdCA9IGZhbHNlOwogCX0KIAllbHNlCi0JCW5lZWRfdG9hc3QgPSAo SGVhcFR1cGxlSGFzRXh0ZXJuYWwoJm9sZHR1cCkgfHwKKwkJbmVlZF90b2FzdCA9IChIZWFwVHVw bGVIYXNFeHRlcm5hbChvbGR0dXApIHx8CiAJCQkJCSAgSGVhcFR1cGxlSGFzRXh0ZXJuYWwobmV3 dHVwKSB8fAogCQkJCQkgIG5ld3R1cC0+dF9sZW4gPiBUT0FTVF9UVVBMRV9USFJFU0hPTEQpOwog CkBAIC0zODcwLDkgKzM3MjMsOSBAQCBsMjoKIAkJICogdXBkYXRpbmcsIGJlY2F1c2UgdGhlIHBv dGVudGlhbGx5IGNyZWF0ZWQgbXVsdGl4YWN0IHdvdWxkIG90aGVyd2lzZQogCQkgKiBiZSB3cm9u Zy4KIAkJICovCi0JCWNvbXB1dGVfbmV3X3htYXhfaW5mb21hc2soSGVhcFR1cGxlSGVhZGVyR2V0 UmF3WG1heChvbGR0dXAudF9kYXRhKSwKLQkJCQkJCQkJICBvbGR0dXAudF9kYXRhLT50X2luZm9t YXNrLAotCQkJCQkJCQkgIG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2syLAorCQljb21wdXRlX25l d194bWF4X2luZm9tYXNrKEhlYXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLT50X2RhdGEp LAorCQkJCQkJCQkgIG9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrLAorCQkJCQkJCQkgIG9sZHR1 cC0+dF9kYXRhLT50X2luZm9tYXNrMiwKIAkJCQkJCQkJICB4aWQsICpsb2NrbW9kZSwgZmFsc2Us CiAJCQkJCQkJCSAgJnhtYXhfbG9ja19vbGRfdHVwbGUsICZpbmZvbWFza19sb2NrX29sZF90dXBs ZSwKIAkJCQkJCQkJICAmaW5mb21hc2syX2xvY2tfb2xkX3R1cGxlKTsKQEAgLTM4ODIsMTggKzM3 MzUsMTggQEAgbDI6CiAJCVNUQVJUX0NSSVRfU0VDVElPTigpOwogCiAJCS8qIENsZWFyIG9ic29s ZXRlIHZpc2liaWxpdHkgZmxhZ3MgLi4uICovCi0JCW9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2sg Jj0gfihIRUFQX1hNQVhfQklUUyB8IEhFQVBfTU9WRUQpOwotCQlvbGR0dXAudF9kYXRhLT50X2lu Zm9tYXNrMiAmPSB+SEVBUF9LRVlTX1VQREFURUQ7Ci0JCUhlYXBUdXBsZUNsZWFySG90VXBkYXRl ZCgmb2xkdHVwKTsKKwkJb2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2sgJj0gfihIRUFQX1hNQVhf QklUUyB8IEhFQVBfTU9WRUQpOworCQlvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzazIgJj0gfkhF QVBfS0VZU19VUERBVEVEOworCQlIZWFwVHVwbGVDbGVhckhvdFVwZGF0ZWQob2xkdHVwKTsKIAkJ LyogLi4uIGFuZCBzdG9yZSBpbmZvIGFib3V0IHRyYW5zYWN0aW9uIHVwZGF0aW5nIHRoaXMgdHVw bGUgKi8KIAkJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhtYXhfbG9ja19vbGRfdHVwbGUp KTsKLQkJSGVhcFR1cGxlSGVhZGVyU2V0WG1heChvbGR0dXAudF9kYXRhLCB4bWF4X2xvY2tfb2xk X3R1cGxlKTsKLQkJb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzayB8PSBpbmZvbWFza19sb2NrX29s ZF90dXBsZTsKLQkJb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzazIgfD0gaW5mb21hc2syX2xvY2tf b2xkX3R1cGxlOwotCQlIZWFwVHVwbGVIZWFkZXJTZXRDbWF4KG9sZHR1cC50X2RhdGEsIGNpZCwg aXNjb21ibyk7CisJCUhlYXBUdXBsZUhlYWRlclNldFhtYXgob2xkdHVwLT50X2RhdGEsIHhtYXhf bG9ja19vbGRfdHVwbGUpOworCQlvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzayB8PSBpbmZvbWFz a19sb2NrX29sZF90dXBsZTsKKwkJb2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2syIHw9IGluZm9t YXNrMl9sb2NrX29sZF90dXBsZTsKKwkJSGVhcFR1cGxlSGVhZGVyU2V0Q21heChvbGR0dXAtPnRf ZGF0YSwgY2lkLCBpc2NvbWJvKTsKIAogCQkvKiB0ZW1wb3JhcmlseSBtYWtlIGl0IGxvb2sgbm90 LXVwZGF0ZWQsIGJ1dCBsb2NrZWQgKi8KLQkJb2xkdHVwLnRfZGF0YS0+dF9jdGlkID0gb2xkdHVw LnRfc2VsZjsKKwkJb2xkdHVwLT50X2RhdGEtPnRfY3RpZCA9IG9sZHR1cC0+dF9zZWxmOwogCiAJ CS8qCiAJCSAqIENsZWFyIGFsbC1mcm96ZW4gYml0IG9uIHZpc2liaWxpdHkgbWFwIGlmIG5lZWRl ZC4gV2UgY291bGQKQEAgLTM5MDIsNyArMzc1NSw3IEBAIGwyOgogCQkgKiB3b3J0aHdoaWxlLgog CQkgKi8KIAkJaWYgKFBhZ2VJc0FsbFZpc2libGUocGFnZSkgJiYKLQkJCXZpc2liaWxpdHltYXBf Y2xlYXIocmVsYXRpb24sIGJsb2NrLCB2bWJ1ZmZlciwKKwkJCXZpc2liaWxpdHltYXBfY2xlYXIo cmVsYXRpb24sIGJsb2NrLCAqdm1idWZmZXIsCiAJCQkJCQkJCVZJU0lCSUxJVFlNQVBfQUxMX0ZS T1pFTikpCiAJCQljbGVhcmVkX2FsbF9mcm96ZW4gPSB0cnVlOwogCkBAIC0zOTE2LDEwICszNzY5 LDEwIEBAIGwyOgogCQkJWExvZ0JlZ2luSW5zZXJ0KCk7CiAJCQlYTG9nUmVnaXN0ZXJCdWZmZXIo MCwgYnVmZmVyLCBSRUdCVUZfU1RBTkRBUkQpOwogCi0JCQl4bHJlYy5vZmZudW0gPSBJdGVtUG9p bnRlckdldE9mZnNldE51bWJlcigmb2xkdHVwLnRfc2VsZik7CisJCQl4bHJlYy5vZmZudW0gPSBJ dGVtUG9pbnRlckdldE9mZnNldE51bWJlcigmb2xkdHVwLT50X3NlbGYpOwogCQkJeGxyZWMueG1h eCA9IHhtYXhfbG9ja19vbGRfdHVwbGU7Ci0JCQl4bHJlYy5pbmZvYml0c19zZXQgPSBjb21wdXRl X2luZm9iaXRzKG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2ssCi0JCQkJCQkJCQkJCQkgIG9sZHR1 cC50X2RhdGEtPnRfaW5mb21hc2syKTsKKwkJCXhscmVjLmluZm9iaXRzX3NldCA9IGNvbXB1dGVf aW5mb2JpdHMob2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2ssCisJCQkJCQkJCQkJCQkgIG9sZHR1 cC0+dF9kYXRhLT50X2luZm9tYXNrMik7CiAJCQl4bHJlYy5mbGFncyA9CiAJCQkJY2xlYXJlZF9h bGxfZnJvemVuID8gWExIX0xPQ0tfQUxMX0ZST1pFTl9DTEVBUkVEIDogMDsKIAkJCVhMb2dSZWdp c3RlckRhdGEoJnhscmVjLCBTaXplT2ZIZWFwTG9jayk7CkBAIC0zOTQxLDcgKzM3OTQsNyBAQCBs MjoKIAkJaWYgKG5lZWRfdG9hc3QpCiAJCXsKIAkJCS8qIE5vdGUgd2UgYWx3YXlzIHVzZSBXQUwg YW5kIEZTTSBkdXJpbmcgdXBkYXRlcyAqLwotCQkJaGVhcHR1cCA9IGhlYXBfdG9hc3RfaW5zZXJ0 X29yX3VwZGF0ZShyZWxhdGlvbiwgbmV3dHVwLCAmb2xkdHVwLCAwKTsKKwkJCWhlYXB0dXAgPSBo ZWFwX3RvYXN0X2luc2VydF9vcl91cGRhdGUocmVsYXRpb24sIG5ld3R1cCwgb2xkdHVwLCAwKTsK IAkJCW5ld3R1cHNpemUgPSBNQVhBTElHTihoZWFwdHVwLT50X2xlbik7CiAJCX0KIAkJZWxzZQpA QCAtMzk3NywyMCArMzgzMCwyMCBAQCBsMjoKIAkJCQkvKiBJdCBkb2Vzbid0IGZpdCwgbXVzdCB1 c2UgUmVsYXRpb25HZXRCdWZmZXJGb3JUdXBsZS4gKi8KIAkJCQluZXdidWYgPSBSZWxhdGlvbkdl dEJ1ZmZlckZvclR1cGxlKHJlbGF0aW9uLCBoZWFwdHVwLT50X2xlbiwKIAkJCQkJCQkJCQkJCSAg IGJ1ZmZlciwgMCwgTlVMTCwKLQkJCQkJCQkJCQkJCSAgICZ2bWJ1ZmZlcl9uZXcsICZ2bWJ1ZmZl ciwKKwkJCQkJCQkJCQkJCSAgICZ2bWJ1ZmZlcl9uZXcsIHZtYnVmZmVyLAogCQkJCQkJCQkJCQkJ ICAgMCk7CiAJCQkJLyogV2UncmUgYWxsIGRvbmUuICovCiAJCQkJYnJlYWs7CiAJCQl9CiAJCQkv KiBBY3F1aXJlIFZNIHBhZ2UgcGluIGlmIG5lZWRlZCBhbmQgd2UgZG9uJ3QgaGF2ZSBpdC4gKi8K LQkJCWlmICh2bWJ1ZmZlciA9PSBJbnZhbGlkQnVmZmVyICYmIFBhZ2VJc0FsbFZpc2libGUocGFn ZSkpCi0JCQkJdmlzaWJpbGl0eW1hcF9waW4ocmVsYXRpb24sIGJsb2NrLCAmdm1idWZmZXIpOwor CQkJaWYgKCp2bWJ1ZmZlciA9PSBJbnZhbGlkQnVmZmVyICYmIFBhZ2VJc0FsbFZpc2libGUocGFn ZSkpCisJCQkJdmlzaWJpbGl0eW1hcF9waW4ocmVsYXRpb24sIGJsb2NrLCB2bWJ1ZmZlcik7CiAJ CQkvKiBSZS1hY3F1aXJlIHRoZSBsb2NrIG9uIHRoZSBvbGQgdHVwbGUncyBwYWdlLiAqLwogCQkJ TG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CiAJCQkvKiBSZS1jaGVj ayB1c2luZyB0aGUgdXAtdG8tZGF0ZSBmcmVlIHNwYWNlICovCiAJCQlwYWdlZnJlZSA9IFBhZ2VH ZXRIZWFwRnJlZVNwYWNlKHBhZ2UpOwogCQkJaWYgKG5ld3R1cHNpemUgPiBwYWdlZnJlZSB8fAot CQkJCSh2bWJ1ZmZlciA9PSBJbnZhbGlkQnVmZmVyICYmIFBhZ2VJc0FsbFZpc2libGUocGFnZSkp KQorCQkJCSgqdm1idWZmZXIgPT0gSW52YWxpZEJ1ZmZlciAmJiBQYWdlSXNBbGxWaXNpYmxlKHBh Z2UpKSkKIAkJCXsKIAkJCQkvKgogCQkJCSAqIFJhdHMsIGl0IGRvZXNuJ3QgZml0IGFueW1vcmUs IG9yIHNvbWVib2R5IGp1c3Qgbm93IHNldCB0aGUKQEAgLTQwMjgsNyArMzg4MSw3IEBAIGwyOgog CSAqIHdpbGwgaW5jbHVkZSBjaGVja2luZyB0aGUgcmVsYXRpb24gbGV2ZWwsIHRoZXJlIGlzIG5v IGJlbmVmaXQgdG8gYQogCSAqIHNlcGFyYXRlIGNoZWNrIGZvciB0aGUgbmV3IHR1cGxlLgogCSAq LwotCUNoZWNrRm9yU2VyaWFsaXphYmxlQ29uZmxpY3RJbihyZWxhdGlvbiwgJm9sZHR1cC50X3Nl bGYsCisJQ2hlY2tGb3JTZXJpYWxpemFibGVDb25mbGljdEluKHJlbGF0aW9uLCAmb2xkdHVwLT50 X3NlbGYsCiAJCQkJCQkJCSAgIEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1ZmZlcikpOwogCiAJLyoK QEAgLTQwMzYsNyArMzg4OSw2IEBAIGwyOgogCSAqIGhhcyBlbm91Z2ggc3BhY2UgZm9yIHRoZSBu ZXcgdHVwbGUuICBJZiB0aGV5IGFyZSB0aGUgc2FtZSBidWZmZXIsIG9ubHkKIAkgKiBvbmUgcGlu IGlzIGhlbGQuCiAJICovCi0KIAlpZiAobmV3YnVmID09IGJ1ZmZlcikKIAl7CiAJCS8qCkBAIC00 MDQ0LDcgKzM4OTYsNyBAQCBsMjoKIAkJICogdG8gZG8gYSBIT1QgdXBkYXRlLiAgQ2hlY2sgaWYg YW55IG9mIHRoZSBpbmRleCBjb2x1bW5zIGhhdmUgYmVlbgogCQkgKiBjaGFuZ2VkLgogCQkgKi8K LQkJaWYgKCFibXNfb3ZlcmxhcChtb2RpZmllZF9hdHRycywgaG90X2F0dHJzKSkKKwkJaWYgKCFi bXNfb3ZlcmxhcChtaXhfYXR0cnMsIGhvdF9hdHRycykpCiAJCXsKIAkJCXVzZV9ob3RfdXBkYXRl ID0gdHJ1ZTsKIApAQCAtNDA1NSw3ICszOTA3LDcgQEAgbDI6CiAJCQkgKiBpbmRleGVzIGlmIHRo ZSBjb2x1bW5zIHdlcmUgdXBkYXRlZCwgb3Igd2UgbWF5IGZhaWwgdG8gZGV0ZWN0CiAJCQkgKiBl LmcuIHZhbHVlIGJvdW5kIGNoYW5nZXMgaW4gQlJJTiBtaW5tYXggaW5kZXhlcy4KIAkJCSAqLwot CQkJaWYgKGJtc19vdmVybGFwKG1vZGlmaWVkX2F0dHJzLCBzdW1fYXR0cnMpKQorCQkJaWYgKGJt c19vdmVybGFwKG1peF9hdHRycywgc3VtX2F0dHJzKSkKIAkJCQlzdW1tYXJpemVkX3VwZGF0ZSA9 IHRydWU7CiAJCX0KIAl9CkBAIC00MDcyLDEwICszOTI0LDggQEAgbDI6CiAJICogbG9nZ2VkLiAg UGFzcyBvbGQga2V5IHJlcXVpcmVkIGFzIHRydWUgb25seSBpZiB0aGUgcmVwbGljYSBpZGVudGl0 eSBrZXkKIAkgKiBjb2x1bW5zIGFyZSBtb2RpZmllZCBvciBpdCBoYXMgZXh0ZXJuYWwgZGF0YS4K IAkgKi8KLQlvbGRfa2V5X3R1cGxlID0gRXh0cmFjdFJlcGxpY2FJZGVudGl0eShyZWxhdGlvbiwg Jm9sZHR1cCwKLQkJCQkJCQkJCQkgICBibXNfb3ZlcmxhcChtb2RpZmllZF9hdHRycywgaWRfYXR0 cnMpIHx8Ci0JCQkJCQkJCQkJICAgaWRfaGFzX2V4dGVybmFsLAotCQkJCQkJCQkJCSAgICZvbGRf a2V5X2NvcGllZCk7CisJb2xkX2tleV90dXBsZSA9IEV4dHJhY3RSZXBsaWNhSWRlbnRpdHkocmVs YXRpb24sIG9sZHR1cCwgcmlkX2F0dHJzLAorCQkJCQkJCQkJCSAgIHJlcF9pZF9rZXlfcmVxdWly ZWQsICZvbGRfa2V5X2NvcGllZCk7CiAKIAkvKiBOTyBFUkVQT1JUKEVSUk9SKSBmcm9tIGhlcmUg dGlsbCBjaGFuZ2VzIGFyZSBsb2dnZWQgKi8KIAlTVEFSVF9DUklUX1NFQ1RJT04oKTsKQEAgLTQw OTcsNyArMzk0Nyw3IEBAIGwyOgogCWlmICh1c2VfaG90X3VwZGF0ZSkKIAl7CiAJCS8qIE1hcmsg dGhlIG9sZCB0dXBsZSBhcyBIT1QtdXBkYXRlZCAqLwotCQlIZWFwVHVwbGVTZXRIb3RVcGRhdGVk KCZvbGR0dXApOworCQlIZWFwVHVwbGVTZXRIb3RVcGRhdGVkKG9sZHR1cCk7CiAJCS8qIEFuZCBt YXJrIHRoZSBuZXcgdHVwbGUgYXMgaGVhcC1vbmx5ICovCiAJCUhlYXBUdXBsZVNldEhlYXBPbmx5 KGhlYXB0dXApOwogCQkvKiBNYXJrIHRoZSBjYWxsZXIncyBjb3B5IHRvbywgaW4gY2FzZSBkaWZm ZXJlbnQgZnJvbSBoZWFwdHVwICovCkBAIC00MTA2LDcgKzM5NTYsNyBAQCBsMjoKIAllbHNlCiAJ ewogCQkvKiBNYWtlIHN1cmUgdHVwbGVzIGFyZSBjb3JyZWN0bHkgbWFya2VkIGFzIG5vdC1IT1Qg Ki8KLQkJSGVhcFR1cGxlQ2xlYXJIb3RVcGRhdGVkKCZvbGR0dXApOworCQlIZWFwVHVwbGVDbGVh ckhvdFVwZGF0ZWQob2xkdHVwKTsKIAkJSGVhcFR1cGxlQ2xlYXJIZWFwT25seShoZWFwdHVwKTsK IAkJSGVhcFR1cGxlQ2xlYXJIZWFwT25seShuZXd0dXApOwogCX0KQEAgLTQxMTUsMTcgKzM5NjUs MTcgQEAgbDI6CiAKIAogCS8qIENsZWFyIG9ic29sZXRlIHZpc2liaWxpdHkgZmxhZ3MsIHBvc3Np Ymx5IHNldCBieSBvdXJzZWx2ZXMgYWJvdmUuLi4gKi8KLQlvbGR0dXAudF9kYXRhLT50X2luZm9t YXNrICY9IH4oSEVBUF9YTUFYX0JJVFMgfCBIRUFQX01PVkVEKTsKLQlvbGR0dXAudF9kYXRhLT50 X2luZm9tYXNrMiAmPSB+SEVBUF9LRVlTX1VQREFURUQ7CisJb2xkdHVwLT50X2RhdGEtPnRfaW5m b21hc2sgJj0gfihIRUFQX1hNQVhfQklUUyB8IEhFQVBfTU9WRUQpOworCW9sZHR1cC0+dF9kYXRh LT50X2luZm9tYXNrMiAmPSB+SEVBUF9LRVlTX1VQREFURUQ7CiAJLyogLi4uIGFuZCBzdG9yZSBp bmZvIGFib3V0IHRyYW5zYWN0aW9uIHVwZGF0aW5nIHRoaXMgdHVwbGUgKi8KIAlBc3NlcnQoVHJh bnNhY3Rpb25JZElzVmFsaWQoeG1heF9vbGRfdHVwbGUpKTsKLQlIZWFwVHVwbGVIZWFkZXJTZXRY bWF4KG9sZHR1cC50X2RhdGEsIHhtYXhfb2xkX3R1cGxlKTsKLQlvbGR0dXAudF9kYXRhLT50X2lu Zm9tYXNrIHw9IGluZm9tYXNrX29sZF90dXBsZTsKLQlvbGR0dXAudF9kYXRhLT50X2luZm9tYXNr MiB8PSBpbmZvbWFzazJfb2xkX3R1cGxlOwotCUhlYXBUdXBsZUhlYWRlclNldENtYXgob2xkdHVw LnRfZGF0YSwgY2lkLCBpc2NvbWJvKTsKKwlIZWFwVHVwbGVIZWFkZXJTZXRYbWF4KG9sZHR1cC0+ dF9kYXRhLCB4bWF4X29sZF90dXBsZSk7CisJb2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2sgfD0g aW5mb21hc2tfb2xkX3R1cGxlOworCW9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrMiB8PSBpbmZv bWFzazJfb2xkX3R1cGxlOworCUhlYXBUdXBsZUhlYWRlclNldENtYXgob2xkdHVwLT50X2RhdGEs IGNpZCwgaXNjb21ibyk7CiAKIAkvKiByZWNvcmQgYWRkcmVzcyBvZiBuZXcgdHVwbGUgaW4gdF9j dGlkIG9mIG9sZCBvbmUgKi8KLQlvbGR0dXAudF9kYXRhLT50X2N0aWQgPSBoZWFwdHVwLT50X3Nl bGY7CisJb2xkdHVwLT50X2RhdGEtPnRfY3RpZCA9IGhlYXB0dXAtPnRfc2VsZjsKIAogCS8qIGNs ZWFyIFBEX0FMTF9WSVNJQkxFIGZsYWdzLCByZXNldCBhbGwgdmlzaWJpbGl0eW1hcCBiaXRzICov CiAJaWYgKFBhZ2VJc0FsbFZpc2libGUoQnVmZmVyR2V0UGFnZShidWZmZXIpKSkKQEAgLTQxMzMs NyArMzk4Myw3IEBAIGwyOgogCQlhbGxfdmlzaWJsZV9jbGVhcmVkID0gdHJ1ZTsKIAkJUGFnZUNs ZWFyQWxsVmlzaWJsZShCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpOwogCQl2aXNpYmlsaXR5bWFwX2Ns ZWFyKHJlbGF0aW9uLCBCdWZmZXJHZXRCbG9ja051bWJlcihidWZmZXIpLAotCQkJCQkJCXZtYnVm ZmVyLCBWSVNJQklMSVRZTUFQX1ZBTElEX0JJVFMpOworCQkJCQkJCSp2bWJ1ZmZlciwgVklTSUJJ TElUWU1BUF9WQUxJRF9CSVRTKTsKIAl9CiAJaWYgKG5ld2J1ZiAhPSBidWZmZXIgJiYgUGFnZUlz QWxsVmlzaWJsZShCdWZmZXJHZXRQYWdlKG5ld2J1ZikpKQogCXsKQEAgLTQxNTgsMTIgKzQwMDgs MTIgQEAgbDI6CiAJCSAqLwogCQlpZiAoUmVsYXRpb25Jc0FjY2Vzc2libGVJbkxvZ2ljYWxEZWNv ZGluZyhyZWxhdGlvbikpCiAJCXsKLQkJCWxvZ19oZWFwX25ld19jaWQocmVsYXRpb24sICZvbGR0 dXApOworCQkJbG9nX2hlYXBfbmV3X2NpZChyZWxhdGlvbiwgb2xkdHVwKTsKIAkJCWxvZ19oZWFw X25ld19jaWQocmVsYXRpb24sIGhlYXB0dXApOwogCQl9CiAKIAkJcmVjcHRyID0gbG9nX2hlYXBf dXBkYXRlKHJlbGF0aW9uLCBidWZmZXIsCi0JCQkJCQkJCSBuZXdidWYsICZvbGR0dXAsIGhlYXB0 dXAsCisJCQkJCQkJCSBuZXdidWYsIG9sZHR1cCwgaGVhcHR1cCwKIAkJCQkJCQkJIG9sZF9rZXlf dHVwbGUsCiAJCQkJCQkJCSBhbGxfdmlzaWJsZV9jbGVhcmVkLAogCQkJCQkJCQkgYWxsX3Zpc2li bGVfY2xlYXJlZF9uZXcpOwpAQCAtNDE4OCw3ICs0MDM4LDcgQEAgbDI6CiAJICogYm90aCB0dXBs ZSB2ZXJzaW9ucyBpbiBvbmUgY2FsbCB0byBpbnZhbC5jIHNvIHdlIGNhbiBhdm9pZCByZWR1bmRh bnQKIAkgKiBzaW52YWwgbWVzc2FnZXMuKQogCSAqLwotCUNhY2hlSW52YWxpZGF0ZUhlYXBUdXBs ZShyZWxhdGlvbiwgJm9sZHR1cCwgaGVhcHR1cCk7CisJQ2FjaGVJbnZhbGlkYXRlSGVhcFR1cGxl KHJlbGF0aW9uLCBvbGR0dXAsIGhlYXB0dXApOwogCiAJLyogTm93IHdlIGNhbiByZWxlYXNlIHRo ZSBidWZmZXIocykgKi8KIAlpZiAobmV3YnVmICE9IGJ1ZmZlcikKQEAgLTQxOTYsMTQgKzQwNDYs MTQgQEAgbDI6CiAJUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCWlmIChCdWZmZXJJc1ZhbGlkKHZt YnVmZmVyX25ldykpCiAJCVJlbGVhc2VCdWZmZXIodm1idWZmZXJfbmV3KTsKLQlpZiAoQnVmZmVy SXNWYWxpZCh2bWJ1ZmZlcikpCi0JCVJlbGVhc2VCdWZmZXIodm1idWZmZXIpOworCWlmIChCdWZm ZXJJc1ZhbGlkKCp2bWJ1ZmZlcikpCisJCVJlbGVhc2VCdWZmZXIoKnZtYnVmZmVyKTsKIAogCS8q CiAJICogUmVsZWFzZSB0aGUgbG1nciB0dXBsZSBsb2NrLCBpZiB3ZSBoYWQgaXQuCiAJICovCiAJ aWYgKGhhdmVfdHVwbGVfbG9jaykKLQkJVW5sb2NrVHVwbGVUdXBsb2NrKHJlbGF0aW9uLCAmKG9s ZHR1cC50X3NlbGYpLCAqbG9ja21vZGUpOworCQlVbmxvY2tUdXBsZVR1cGxvY2socmVsYXRpb24s ICZvbGR0dXAtPnRfc2VsZiwgKmxvY2ttb2RlKTsKIAogCXBnc3RhdF9jb3VudF9oZWFwX3VwZGF0 ZShyZWxhdGlvbiwgdXNlX2hvdF91cGRhdGUsIG5ld2J1ZiAhPSBidWZmZXIpOwogCkBAIC00MjM2 LDEzICs0MDg2LDYgQEAgbDI6CiAJaWYgKG9sZF9rZXlfdHVwbGUgIT0gTlVMTCAmJiBvbGRfa2V5 X2NvcGllZCkKIAkJaGVhcF9mcmVldHVwbGUob2xkX2tleV90dXBsZSk7CiAKLQlibXNfZnJlZSho b3RfYXR0cnMpOwotCWJtc19mcmVlKHN1bV9hdHRycyk7Ci0JYm1zX2ZyZWUoa2V5X2F0dHJzKTsK LQlibXNfZnJlZShpZF9hdHRycyk7Ci0JYm1zX2ZyZWUobW9kaWZpZWRfYXR0cnMpOwotCWJtc19m cmVlKGludGVyZXN0aW5nX2F0dHJzKTsKLQogCXJldHVybiBUTV9PazsKIH0KIApAQCAtNDI1MSw3 ICs0MDk0LDcgQEAgbDI6CiAgKiBDb25maXJtIGFkZXF1YXRlIGxvY2sgaGVsZCBkdXJpbmcgaGVh cF91cGRhdGUoKSwgcGVyIHJ1bGVzIGZyb20KICAqIFJFQURNRS50dXBsb2NrIHNlY3Rpb24gIkxv Y2tpbmcgdG8gd3JpdGUgaW5wbGFjZS11cGRhdGVkIHRhYmxlcyIuCiAgKi8KLXN0YXRpYyB2b2lk Cit2b2lkCiBjaGVja19sb2NrX2lmX2lucGxhY2VfdXBkYXRlYWJsZV9yZWwoUmVsYXRpb24gcmVs YXRpb24sCiAJCQkJCQkJCQkgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpvdGlkLAogCQkJCQkJCQkJ IEhlYXBUdXBsZSBuZXd0dXApCkBAIC00NDIzLDcgKzQyNjYsNyBAQCBoZWFwX2F0dHJfZXF1YWxz KFR1cGxlRGVzYyB0dXBkZXNjLCBpbnQgYXR0cm51bSwgRGF0dW0gdmFsdWUxLCBEYXR1bSB2YWx1 ZTIsCiAgKiBsaXN0ZWQgYXMgaW50ZXJlc3RpbmcpIG9mIHRoZSBvbGQgdHVwbGUgaXMgYSBtZW1i ZXIgb2YgZXh0ZXJuYWxfY29scyBhbmQgaXMKICAqIHN0b3JlZCBleHRlcm5hbGx5LgogICovCi1z dGF0aWMgQml0bWFwc2V0ICoKK0JpdG1hcHNldCAqCiBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8o UmVsYXRpb24gcmVsYXRpb24sCiAJCQkJCQkgQml0bWFwc2V0ICppbnRlcmVzdGluZ19jb2xzLAog CQkJCQkJIEJpdG1hcHNldCAqZXh0ZXJuYWxfY29scywKQEAgLTQ1MDYsMjUgKzQzNDksMTc1IEBA IEhlYXBEZXRlcm1pbmVDb2x1bW5zSW5mbyhSZWxhdGlvbiByZWxhdGlvbiwKIH0KIAogLyoKLSAq CXNpbXBsZV9oZWFwX3VwZGF0ZSAtIHJlcGxhY2UgYSB0dXBsZQotICoKLSAqIFRoaXMgcm91dGlu ZSBtYXkgYmUgdXNlZCB0byB1cGRhdGUgYSB0dXBsZSB3aGVuIGNvbmN1cnJlbnQgdXBkYXRlcyBv ZgotICogdGhlIHRhcmdldCB0dXBsZSBhcmUgbm90IGV4cGVjdGVkIChmb3IgZXhhbXBsZSwgYmVj YXVzZSB3ZSBoYXZlIGEgbG9jawotICogb24gdGhlIHJlbGF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0 aGUgdHVwbGUpLiAgQW55IGZhaWx1cmUgaXMgcmVwb3J0ZWQKLSAqIHZpYSBlcmVwb3J0KCkuCisg KiBUaGlzIHJvdXRpbmUgbWF5IGJlIHVzZWQgdG8gdXBkYXRlIGEgdHVwbGUgd2hlbiBjb25jdXJy ZW50IHVwZGF0ZXMgb2YgdGhlCisgKiB0YXJnZXQgdHVwbGUgYXJlIG5vdCBleHBlY3RlZCAoZm9y IGV4YW1wbGUsIGJlY2F1c2Ugd2UgaGF2ZSBhIGxvY2sgb24gdGhlCisgKiByZWxhdGlvbiBhc3Nv Y2lhdGVkIHdpdGggdGhlIHR1cGxlKS4gIEFueSBmYWlsdXJlIGlzIHJlcG9ydGVkIHZpYSBlcmVw b3J0KCkuCiAgKi8KIHZvaWQKLXNpbXBsZV9oZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwg Y29uc3QgSXRlbVBvaW50ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgdHVwLAorc2ltcGxlX2hlYXBf dXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsIEhl YXBUdXBsZSB0dXBsZSwKIAkJCQkgICBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykK IHsKIAlUTV9SZXN1bHQJcmVzdWx0OwogCVRNX0ZhaWx1cmVEYXRhIHRtZmQ7CiAJTG9ja1R1cGxl TW9kZSBsb2NrbW9kZTsKKwlCdWZmZXIJCWJ1ZmZlcjsKKwlCdWZmZXIJCXZtYnVmZmVyID0gSW52 YWxpZEJ1ZmZlcjsKKwlQYWdlCQlwYWdlOworCUJsb2NrTnVtYmVyIGJsb2NrOworCUJpdG1hcHNl dCAgKmhvdF9hdHRycywKKwkJCSAgICpzdW1fYXR0cnMsCisJCQkgICAqcGtfYXR0cnMsCisJCQkg ICAqcmlkX2F0dHJzLAorCQkJICAgKm1peF9hdHRycywKKwkJCSAgICppZHhfYXR0cnM7CisJSXRl bUlkCQlscDsKKwlIZWFwVHVwbGVEYXRhIG9sZHR1cDsKKwlib29sCQlyZXBfaWRfa2V5X3JlcXVp cmVkID0gZmFsc2U7CisKKwlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKG90aWQpKTsKKworCS8q IENoZWFwLCBzaW1wbGlzdGljIGNoZWNrIHRoYXQgdGhlIHR1cGxlIG1hdGNoZXMgdGhlIHJlbCdz IHJvd3R5cGUuICovCisJQXNzZXJ0KEhlYXBUdXBsZUhlYWRlckdldE5hdHRzKHR1cGxlLT50X2Rh dGEpIDw9CisJCSAgIFJlbGF0aW9uR2V0TnVtYmVyT2ZBdHRyaWJ1dGVzKHJlbGF0aW9uKSk7CisK KwkvKgorCSAqIEZvcmJpZCB0aGlzIGR1cmluZyBhIHBhcmFsbGVsIG9wZXJhdGlvbiwgbGVzdCBp dCBhbGxvY2F0ZSBhIGNvbWJvIENJRC4KKwkgKiBPdGhlciB3b3JrZXJzIG1pZ2h0IG5lZWQgdGhh dCBjb21ibyBDSUQgZm9yIHZpc2liaWxpdHkgY2hlY2tzLCBhbmQgd2UKKwkgKiBoYXZlIG5vIHBy b3Zpc2lvbiBmb3IgYnJvYWRjYXN0aW5nIGl0IHRvIHRoZW0uCisJICovCisJaWYgKElzSW5QYXJh bGxlbE1vZGUoKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFM SURfVFJBTlNBQ1RJT05fU1RBVEUpLAorCQkJCSBlcnJtc2coImNhbm5vdCB1cGRhdGUgdHVwbGVz IGR1cmluZyBhIHBhcmFsbGVsIG9wZXJhdGlvbiIpKSk7CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NI RUNLSU5HCisJY2hlY2tfbG9ja19pZl9pbnBsYWNlX3VwZGF0ZWFibGVfcmVsKHJlbGF0aW9uLCBv dGlkLCB0dXBsZSk7CisjZW5kaWYKKworCS8qCisJICogRmV0Y2ggdGhlIGxpc3Qgb2YgYXR0cmli dXRlcyB0byBiZSBjaGVja2VkIGZvciB2YXJpb3VzIG9wZXJhdGlvbnMuCisJICoKKwkgKiBGb3Ig SE9UIGNvbnNpZGVyYXRpb25zLCB0aGlzIGlzIHdhc3RlZCBlZmZvcnQgaWYgd2UgZmFpbCB0byB1 cGRhdGUgb3IKKwkgKiBoYXZlIHRvIHB1dCB0aGUgbmV3IHR1cGxlIG9uIGEgZGlmZmVyZW50IHBh Z2UuICBCdXQgd2UgbXVzdCBjb21wdXRlIHRoZQorCSAqIGxpc3QgYmVmb3JlIG9idGFpbmluZyBi dWZmZXIgbG9jayAtLS0gaW4gdGhlIHdvcnN0IGNhc2UsIGlmIHdlIGFyZQorCSAqIGRvaW5nIGFu IHVwZGF0ZSBvbiBvbmUgb2YgdGhlIHJlbGV2YW50IHN5c3RlbSBjYXRhbG9ncywgd2UgY291bGQK KwkgKiBkZWFkbG9jayBpZiB3ZSB0cnkgdG8gZmV0Y2ggdGhlIGxpc3QgbGF0ZXIuICBJbiBhbnkg Y2FzZSwgdGhlIHJlbGNhY2hlCisJICogY2FjaGVzIHRoZSBkYXRhIHNvIHRoaXMgaXMgdXN1YWxs eSBwcmV0dHkgY2hlYXAuCisJICoKKwkgKiBXZSBhbHNvIG5lZWQgY29sdW1ucyB1c2VkIGJ5IHRo ZSByZXBsaWNhIGlkZW50aXR5IGFuZCBjb2x1bW5zIHRoYXQgYXJlCisJICogY29uc2lkZXJlZCB0 aGUgImtleSIgb2Ygcm93cyBpbiB0aGUgdGFibGUuCisJICoKKwkgKiBOb3RlIHRoYXQgd2UgZ2V0 IGNvcGllcyBvZiBlYWNoIGJpdG1hcCwgc28gd2UgbmVlZCBub3Qgd29ycnkgYWJvdXQKKwkgKiBy ZWxjYWNoZSBmbHVzaCBoYXBwZW5pbmcgbWlkd2F5IHRocm91Z2guCisJICovCisJaG90X2F0dHJz ID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24sCisJCQkJCQkJCQkJICAgSU5E RVhfQVRUUl9CSVRNQVBfSE9UX0JMT0NLSU5HKTsKKwlzdW1fYXR0cnMgPSBSZWxhdGlvbkdldElu ZGV4QXR0ckJpdG1hcChyZWxhdGlvbiwKKwkJCQkJCQkJCQkgICBJTkRFWF9BVFRSX0JJVE1BUF9T VU1NQVJJWkVEKTsKKwlwa19hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0 aW9uLCBJTkRFWF9BVFRSX0JJVE1BUF9LRVkpOworCXJpZF9hdHRycyA9IFJlbGF0aW9uR2V0SW5k ZXhBdHRyQml0bWFwKHJlbGF0aW9uLAorCQkJCQkJCQkJCSAgIElOREVYX0FUVFJfQklUTUFQX0lE RU5USVRZX0tFWSk7CisKKwlpZHhfYXR0cnMgPSBibXNfY29weShob3RfYXR0cnMpOworCWlkeF9h dHRycyA9IGJtc19hZGRfbWVtYmVycyhpZHhfYXR0cnMsIHN1bV9hdHRycyk7CisJaWR4X2F0dHJz ID0gYm1zX2FkZF9tZW1iZXJzKGlkeF9hdHRycywgcGtfYXR0cnMpOworCWlkeF9hdHRycyA9IGJt c19hZGRfbWVtYmVycyhpZHhfYXR0cnMsIHJpZF9hdHRycyk7CisKKwlibG9jayA9IEl0ZW1Qb2lu dGVyR2V0QmxvY2tOdW1iZXIob3RpZCk7CisJSU5KRUNUSU9OX1BPSU5UKCJoZWFwX3VwZGF0ZS1i ZWZvcmUtcGluIiwgTlVMTCk7CisJYnVmZmVyID0gUmVhZEJ1ZmZlcihyZWxhdGlvbiwgYmxvY2sp OworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CisKKwkvKgorCSAqIEJlZm9yZSBsb2Nr aW5nIHRoZSBidWZmZXIsIHBpbiB0aGUgdmlzaWJpbGl0eSBtYXAgcGFnZSBpZiBpdCBhcHBlYXJz IHRvCisJICogYmUgbmVjZXNzYXJ5LiAgU2luY2Ugd2UgaGF2ZW4ndCBnb3QgdGhlIGxvY2sgeWV0 LCBzb21lb25lIGVsc2UgbWlnaHQgYmUKKwkgKiBpbiB0aGUgbWlkZGxlIG9mIGNoYW5naW5nIHRo aXMsIHNvIHdlJ2xsIG5lZWQgdG8gcmVjaGVjayBhZnRlciB3ZSBoYXZlCisJICogdGhlIGxvY2su CisJICovCisJaWYgKFBhZ2VJc0FsbFZpc2libGUocGFnZSkpCisJCXZpc2liaWxpdHltYXBfcGlu KHJlbGF0aW9uLCBibG9jaywgJnZtYnVmZmVyKTsKKworCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZG RVJfTE9DS19FWENMVVNJVkUpOworCisJbHAgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIEl0ZW1Qb2lu dGVyR2V0T2Zmc2V0TnVtYmVyKG90aWQpKTsKKworCS8qCisJICogVXN1YWxseSwgYSBidWZmZXIg cGluIGFuZC9vciBzbmFwc2hvdCBibG9ja3MgcHJ1bmluZyBvZiBvdGlkLCBlbnN1cmluZworCSAq IHdlIHNlZSBMUF9OT1JNQUwgaGVyZS4gIFdoZW4gdGhlIG90aWQgb3JpZ2luIGlzIGEgc3lzY2Fj aGUsIHdlIG1heSBoYXZlCisJICogbmVpdGhlciBhIHBpbiBub3IgYSBzbmFwc2hvdC4gIEhlbmNl LCB3ZSBtYXkgc2VlIG90aGVyIExQXyBzdGF0ZXMsIGVhY2gKKwkgKiBvZiB3aGljaCBpbmRpY2F0 ZXMgY29uY3VycmVudCBwcnVuaW5nLgorCSAqCisJICogRmFpbGluZyB3aXRoIFRNX1VwZGF0ZWQg d291bGQgYmUgbW9zdCBhY2N1cmF0ZS4gIEhvd2V2ZXIsIHVubGlrZSBvdGhlcgorCSAqIFRNX1Vw ZGF0ZWQgc2NlbmFyaW9zLCB3ZSBkb24ndCBrbm93IHRoZSBzdWNjZXNzb3IgY3RpZCBpbiBMUF9V TlVTRUQgYW5kCisJICogTFBfREVBRCBjYXNlcy4gIFdoaWxlIHRoZSBkaXN0aW5jdGlvbiBiZXR3 ZWVuIFRNX1VwZGF0ZWQgYW5kIFRNX0RlbGV0ZWQKKwkgKiBkb2VzIG1hdHRlciB0byBTUUwgc3Rh dGVtZW50cyBVUERBVEUgYW5kIE1FUkdFLCB0aG9zZSBTUUwgc3RhdGVtZW50cworCSAqIGhvbGQg YSBzbmFwc2hvdCB0aGF0IGVuc3VyZXMgTFBfTk9STUFMLiAgSGVuY2UsIHRoZSBjaG9pY2UgYmV0 d2VlbgorCSAqIFRNX1VwZGF0ZWQgYW5kIFRNX0RlbGV0ZWQgYWZmZWN0cyBvbmx5IHRoZSB3b3Jk aW5nIG9mIGVycm9yIG1lc3NhZ2VzLgorCSAqIFNldHRsZSBvbiBUTV9EZWxldGVkLCBmb3IgdHdv IHJlYXNvbnMuICBGaXJzdCwgaXQgYXZvaWRzIGNvbXBsaWNhdGluZworCSAqIHRoZSBzcGVjaWZp Y2F0aW9uIG9mIHdoZW4gdG1mZC0+Y3RpZCBpcyB2YWxpZC4gIFNlY29uZCwgaXQgY3JlYXRlcwor CSAqIGVycm9yIGxvZyBldmlkZW5jZSB0aGF0IHdlIHRvb2sgdGhpcyBicmFuY2guCisJICoKKwkg KiBTaW5jZSBpdCdzIHBvc3NpYmxlIHRvIHNlZSBMUF9VTlVTRUQgYXQgb3RpZCwgaXQncyBhbHNv IHBvc3NpYmxlIHRvIHNlZQorCSAqIExQX05PUk1BTCBmb3IgYSB0dXBsZSB0aGF0IHJlcGxhY2Vk IExQX1VOVVNFRC4gIElmIGl0J3MgYSB0dXBsZSBmb3IgYW4KKwkgKiB1bnJlbGF0ZWQgcm93LCB3 ZSdsbCBmYWlsIHdpdGggImR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMgdW5pcXVlIi4KKwkg KiBYWFggaWYgb3RpZCBpcyB0aGUgbGl2ZSwgbmV3ZXIgdmVyc2lvbiBvZiB0aGUgbmV3dHVwIHJv dywgd2UnbGwgZGlzY2FyZAorCSAqIGNoYW5nZXMgb3JpZ2luYXRpbmcgaW4gdmVyc2lvbnMgb2Yg dGhpcyBjYXRhbG9nIHJvdyBhZnRlciB0aGUgdmVyc2lvbgorCSAqIHRoZSBjYWxsZXIgZ290IGZy b20gc3lzY2FjaGUuICBTZWUgc3lzY2FjaGUtdXBkYXRlLXBydW5lZC5zcGVjLgorCSAqLworCWlm ICghSXRlbUlkSXNOb3JtYWwobHApKQorCXsKKwkJQXNzZXJ0KFJlbGF0aW9uU3VwcG9ydHNTeXND YWNoZShSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKSkpOworCisJCVVubG9ja1JlbGVhc2VCdWZm ZXIoYnVmZmVyKTsKKwkJaWYgKHZtYnVmZmVyICE9IEludmFsaWRCdWZmZXIpCisJCQlSZWxlYXNl QnVmZmVyKHZtYnVmZmVyKTsKKwkJKnVwZGF0ZV9pbmRleGVzID0gVFVfTm9uZTsKKworCQlibXNf ZnJlZShob3RfYXR0cnMpOworCQlibXNfZnJlZShzdW1fYXR0cnMpOworCQlibXNfZnJlZShwa19h dHRycyk7CisJCWJtc19mcmVlKHJpZF9hdHRycyk7CisJCWJtc19mcmVlKGlkeF9hdHRycyk7CisJ CS8qIG1peF9hdHRycyBub3QgeWV0IGluaXRpYWxpemVkICovCisKKwkJZWxvZyhFUlJPUiwgInR1 cGxlIGNvbmN1cnJlbnRseSBkZWxldGVkIik7CisKKwkJcmV0dXJuOworCX0KKworCS8qCisJICog UGFydGlhbGx5IGNvbnN0cnVjdCB0aGUgb2xkdHVwIGZvciBIZWFwRGV0ZXJtaW5lQ29sdW1uc0lu Zm8gdG8gd29yayBhbmQKKwkgKiB0aGVuIHBhc3MgdGhhdCBvbiB0byBoZWFwX3VwZGF0ZS4KKwkg Ki8KKwlvbGR0dXAudF90YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOworCW9s ZHR1cC50X2RhdGEgPSAoSGVhcFR1cGxlSGVhZGVyKSBQYWdlR2V0SXRlbShwYWdlLCBscCk7CisJ b2xkdHVwLnRfbGVuID0gSXRlbUlkR2V0TGVuZ3RoKGxwKTsKKwlvbGR0dXAudF9zZWxmID0gKm90 aWQ7CisKKwltaXhfYXR0cnMgPSBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8ocmVsYXRpb24sIGlk eF9hdHRycywgcmlkX2F0dHJzLAorCQkJCQkJCQkJCSAmb2xkdHVwLCB0dXBsZSwgJnJlcF9pZF9r ZXlfcmVxdWlyZWQpOworCisJLyoKKwkgKiBXZSdsbCBuZWVkIHRvIFdBTCBsb2cgdGhlIHJlcGxp Y2EgaWRlbnRpdHkgYXR0cmlidXRlcyBpZiBlaXRoZXIgdGhleQorCSAqIG92ZXJsYXAgd2l0aCB0 aGUgbW9kaWZpZWQgaW5kZXhlZCBhdHRyaWJ1dGVzIG9yLCBhcyB3ZSd2ZSBjaGVja2VkIGZvcgor CSAqIGp1c3Qgbm93IGluIEhlYXBEZXRlcm1pbmVDb2x1bW5zSW5mbywgdGhleSB3ZXJlIHVubW9k aWZpZWQgZXh0ZXJuYWwKKwkgKiBpbmRleGVkIGF0dHJpYnV0ZXMuCisJICovCisJcmVwX2lkX2tl eV9yZXF1aXJlZCA9IHJlcF9pZF9rZXlfcmVxdWlyZWQgfHwgYm1zX292ZXJsYXAobWl4X2F0dHJz LCByaWRfYXR0cnMpOworCisJcmVzdWx0ID0gaGVhcF91cGRhdGUocmVsYXRpb24sICZvbGR0dXAs IHR1cGxlLCBHZXRDdXJyZW50Q29tbWFuZElkKHRydWUpLAorCQkJCQkJIEludmFsaWRTbmFwc2hv dCwgdHJ1ZSAvKiB3YWl0IGZvciBjb21taXQgKi8gLCAmdG1mZCwgJmxvY2ttb2RlLAorCQkJCQkJ IGJ1ZmZlciwgcGFnZSwgYmxvY2ssIGxwLCBob3RfYXR0cnMsIHN1bV9hdHRycywgcGtfYXR0cnMs CisJCQkJCQkgcmlkX2F0dHJzLCBtaXhfYXR0cnMsICZ2bWJ1ZmZlciwgcmVwX2lkX2tleV9yZXF1 aXJlZCwKKwkJCQkJCSB1cGRhdGVfaW5kZXhlcyk7CisKKwlibXNfZnJlZShob3RfYXR0cnMpOwor CWJtc19mcmVlKHN1bV9hdHRycyk7CisJYm1zX2ZyZWUocGtfYXR0cnMpOworCWJtc19mcmVlKHJp ZF9hdHRycyk7CisJYm1zX2ZyZWUobWl4X2F0dHJzKTsKKwlibXNfZnJlZShpZHhfYXR0cnMpOwog Ci0JcmVzdWx0ID0gaGVhcF91cGRhdGUocmVsYXRpb24sIG90aWQsIHR1cCwKLQkJCQkJCSBHZXRD dXJyZW50Q29tbWFuZElkKHRydWUpLCBJbnZhbGlkU25hcHNob3QsCi0JCQkJCQkgdHJ1ZSAvKiB3 YWl0IGZvciBjb21taXQgKi8gLAotCQkJCQkJICZ0bWZkLCAmbG9ja21vZGUsIHVwZGF0ZV9pbmRl eGVzKTsKIAlzd2l0Y2ggKHJlc3VsdCkKIAl7CiAJCWNhc2UgVE1fU2VsZk1vZGlmaWVkOgpAQCAt OTE2NCwxMiArOTE1NywxMSBAQCBsb2dfaGVhcF9uZXdfY2lkKFJlbGF0aW9uIHJlbGF0aW9uLCBI ZWFwVHVwbGUgdHVwKQogICogdGhlIHNhbWUgdHVwbGUgdGhhdCB3YXMgcGFzc2VkIGluLgogICov CiBzdGF0aWMgSGVhcFR1cGxlCi1FeHRyYWN0UmVwbGljYUlkZW50aXR5KFJlbGF0aW9uIHJlbGF0 aW9uLCBIZWFwVHVwbGUgdHAsIGJvb2wga2V5X3JlcXVpcmVkLAotCQkJCQkgICBib29sICpjb3B5 KQorRXh0cmFjdFJlcGxpY2FJZGVudGl0eShSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHRw LCBCaXRtYXBzZXQgKnJpZF9hdHRycywKKwkJCQkJICAgYm9vbCBrZXlfcmVxdWlyZWQsIGJvb2wg KmNvcHkpCiB7CiAJVHVwbGVEZXNjCWRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbGF0aW9uKTsK IAljaGFyCQlyZXBsaWRlbnQgPSByZWxhdGlvbi0+cmRfcmVsLT5yZWxyZXBsaWRlbnQ7Ci0JQml0 bWFwc2V0ICAqaWRhdHRyczsKIAlIZWFwVHVwbGUJa2V5X3R1cGxlOwogCWJvb2wJCW51bGxzW01h eEhlYXBBdHRyaWJ1dGVOdW1iZXJdOwogCURhdHVtCQl2YWx1ZXNbTWF4SGVhcEF0dHJpYnV0ZU51 bWJlcl07CkBAIC05MjAwLDE3ICs5MTkyLDEzIEBAIEV4dHJhY3RSZXBsaWNhSWRlbnRpdHkoUmVs YXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0cCwgYm9vbCBrZXlfcmVxdWlyZWQsCiAJaWYgKCFr ZXlfcmVxdWlyZWQpCiAJCXJldHVybiBOVUxMOwogCi0JLyogZmluZCBvdXQgdGhlIHJlcGxpY2Eg aWRlbnRpdHkgY29sdW1ucyAqLwotCWlkYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1h cChyZWxhdGlvbiwKLQkJCQkJCQkJCQkgSU5ERVhfQVRUUl9CSVRNQVBfSURFTlRJVFlfS0VZKTsK LQogCS8qCiAJICogSWYgdGhlcmUncyBubyBkZWZpbmVkIHJlcGxpY2EgaWRlbnRpdHkgY29sdW1u cywgdHJlYXQgYXMgIWtleV9yZXF1aXJlZC4KIAkgKiAoVGhpcyBjYXNlIHNob3VsZCBub3QgYmUg cmVhY2hhYmxlIGZyb20gaGVhcF91cGRhdGUsIHNpbmNlIHRoYXQgc2hvdWxkCiAJICogY2FsY3Vs YXRlIGtleV9yZXF1aXJlZCBhY2N1cmF0ZWx5LiAgQnV0IGhlYXBfZGVsZXRlIGp1c3QgcGFzc2Vz CiAJICogY29uc3RhbnQgdHJ1ZSBmb3Iga2V5X3JlcXVpcmVkLCBzbyB3ZSBjYW4gaGl0IHRoaXMg Y2FzZSBpbiBkZWxldGVzLikKIAkgKi8KLQlpZiAoYm1zX2lzX2VtcHR5KGlkYXR0cnMpKQorCWlm IChibXNfaXNfZW1wdHkocmlkX2F0dHJzKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKgpAQCAtOTIy Myw3ICs5MjExLDcgQEAgRXh0cmFjdFJlcGxpY2FJZGVudGl0eShSZWxhdGlvbiByZWxhdGlvbiwg SGVhcFR1cGxlIHRwLCBib29sIGtleV9yZXF1aXJlZCwKIAlmb3IgKGludCBpID0gMDsgaSA8IGRl c2MtPm5hdHRzOyBpKyspCiAJewogCQlpZiAoYm1zX2lzX21lbWJlcihpICsgMSAtIEZpcnN0TG93 SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIsCi0JCQkJCQkgIGlkYXR0cnMpKQorCQkJCQkJICBy aWRfYXR0cnMpKQogCQkJQXNzZXJ0KCFudWxsc1tpXSk7CiAJCWVsc2UKIAkJCW51bGxzW2ldID0g dHJ1ZTsKQEAgLTkyMzIsOCArOTIyMCw2IEBAIEV4dHJhY3RSZXBsaWNhSWRlbnRpdHkoUmVsYXRp b24gcmVsYXRpb24sIEhlYXBUdXBsZSB0cCwgYm9vbCBrZXlfcmVxdWlyZWQsCiAJa2V5X3R1cGxl ID0gaGVhcF9mb3JtX3R1cGxlKGRlc2MsIHZhbHVlcywgbnVsbHMpOwogCSpjb3B5ID0gdHJ1ZTsK IAotCWJtc19mcmVlKGlkYXR0cnMpOwotCiAJLyoKIAkgKiBJZiB0aGUgdHVwbGUsIHdoaWNoIGJ5 IGhlcmUgb25seSBjb250YWlucyBpbmRleGVkIGNvbHVtbnMsIHN0aWxsIGhhcwogCSAqIHRvYXN0 ZWQgY29sdW1ucywgZm9yY2UgdGhlbSB0byBiZSBpbmxpbmVkLiBUaGlzIGlzIHNvbWV3aGF0IHVu bGlrZWx5CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxl ci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCBiY2Jh Yzg0NGJiNi4uMWNmOWExODc3NWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hh bmRsZXIuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5Lmgi CiAjaW5jbHVkZSAic3RvcmFnZS9zbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIK KyNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwu aCIKIAogc3RhdGljIHZvaWQgcmVmb3JtX2FuZF9yZXdyaXRlX3R1cGxlKEhlYXBUdXBsZSB0dXBs ZSwKQEAgLTMxMiwyMyArMzEzLDEzMyBAQCBoZWFwYW1fdHVwbGVfZGVsZXRlKFJlbGF0aW9uIHJl bGF0aW9uLCBJdGVtUG9pbnRlciB0aWQsIENvbW1hbmRJZCBjaWQsCiAJcmV0dXJuIGhlYXBfZGVs ZXRlKHJlbGF0aW9uLCB0aWQsIGNpZCwgY3Jvc3NjaGVjaywgd2FpdCwgdG1mZCwgY2hhbmdpbmdQ YXJ0KTsKIH0KIAotCiBzdGF0aWMgVE1fUmVzdWx0CiBoZWFwYW1fdHVwbGVfdXBkYXRlKFJlbGF0 aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciBvdGlkLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJ CQkJQ29tbWFuZElkIGNpZCwgU25hcHNob3Qgc25hcHNob3QsIFNuYXBzaG90IGNyb3NzY2hlY2ss CiAJCQkJCWJvb2wgd2FpdCwgVE1fRmFpbHVyZURhdGEgKnRtZmQsCiAJCQkJCUxvY2tUdXBsZU1v ZGUgKmxvY2ttb2RlLCBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykKIHsKKwlib29s CQlyZXBfaWRfa2V5X3JlcXVpcmVkID0gZmFsc2U7CiAJYm9vbAkJc2hvdWxkRnJlZSA9IHRydWU7 CiAJSGVhcFR1cGxlCXR1cGxlID0gRXhlY0ZldGNoU2xvdEhlYXBUdXBsZShzbG90LCB0cnVlLCAm c2hvdWxkRnJlZSk7CisJSGVhcFR1cGxlRGF0YSBvbGR0dXA7CisJQnVmZmVyCQlidWZmZXI7CisJ QnVmZmVyCQl2bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CisJUGFnZQkJcGFnZTsKKwlCbG9ja051 bWJlciBibG9jazsKKwlJdGVtSWQJCWxwOworCUJpdG1hcHNldCAgKmhvdF9hdHRycywKKwkJCSAg ICpzdW1fYXR0cnMsCisJCQkgICAqcGtfYXR0cnMsCisJCQkgICAqcmlkX2F0dHJzLAorCQkJICAg Km1peF9hdHRycywKKwkJCSAgICppZHhfYXR0cnM7CiAJVE1fUmVzdWx0CXJlc3VsdDsKIAorCUFz c2VydChJdGVtUG9pbnRlcklzVmFsaWQob3RpZCkpOworCisJLyogQ2hlYXAsIHNpbXBsaXN0aWMg Y2hlY2sgdGhhdCB0aGUgdHVwbGUgbWF0Y2hlcyB0aGUgcmVsJ3Mgcm93dHlwZS4gKi8KKwlBc3Nl cnQoSGVhcFR1cGxlSGVhZGVyR2V0TmF0dHModHVwbGUtPnRfZGF0YSkgPD0KKwkJICAgUmVsYXRp b25HZXROdW1iZXJPZkF0dHJpYnV0ZXMocmVsYXRpb24pKTsKKworCS8qCisJICogRm9yYmlkIHRo aXMgZHVyaW5nIGEgcGFyYWxsZWwgb3BlcmF0aW9uLCBsZXN0IGl0IGFsbG9jYXRlIGEgY29tYm8g Q0lELgorCSAqIE90aGVyIHdvcmtlcnMgbWlnaHQgbmVlZCB0aGF0IGNvbWJvIENJRCBmb3Igdmlz aWJpbGl0eSBjaGVja3MsIGFuZCB3ZQorCSAqIGhhdmUgbm8gcHJvdmlzaW9uIGZvciBicm9hZGNh c3RpbmcgaXQgdG8gdGhlbS4KKwkgKi8KKwlpZiAoSXNJblBhcmFsbGVsTW9kZSgpKQorCQllcmVw b3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9UUkFOU0FDVElPTl9TVEFU RSksCisJCQkJIGVycm1zZygiY2Fubm90IHVwZGF0ZSB0dXBsZXMgZHVyaW5nIGEgcGFyYWxsZWwg b3BlcmF0aW9uIikpKTsKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwljaGVja19sb2Nr X2lmX2lucGxhY2VfdXBkYXRlYWJsZV9yZWwocmVsYXRpb24sIG90aWQsIHR1cGxlKTsKKyNlbmRp ZgorCisJLyoKKwkgKiBGZXRjaCB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHRvIGJlIGNoZWNrZWQg Zm9yIHZhcmlvdXMgb3BlcmF0aW9ucy4KKwkgKgorCSAqIEZvciBIT1QgY29uc2lkZXJhdGlvbnMs IHRoaXMgaXMgd2FzdGVkIGVmZm9ydCBpZiB3ZSBmYWlsIHRvIHVwZGF0ZSBvcgorCSAqIGhhdmUg dG8gcHV0IHRoZSBuZXcgdHVwbGUgb24gYSBkaWZmZXJlbnQgcGFnZS4gIEJ1dCB3ZSBtdXN0IGNv bXB1dGUgdGhlCisJICogbGlzdCBiZWZvcmUgb2J0YWluaW5nIGJ1ZmZlciBsb2NrIC0tLSBpbiB0 aGUgd29yc3QgY2FzZSwgaWYgd2UgYXJlCisJICogZG9pbmcgYW4gdXBkYXRlIG9uIG9uZSBvZiB0 aGUgcmVsZXZhbnQgc3lzdGVtIGNhdGFsb2dzLCB3ZSBjb3VsZAorCSAqIGRlYWRsb2NrIGlmIHdl IHRyeSB0byBmZXRjaCB0aGUgbGlzdCBsYXRlci4gIEluIGFueSBjYXNlLCB0aGUgcmVsY2FjaGUK KwkgKiBjYWNoZXMgdGhlIGRhdGEgc28gdGhpcyBpcyB1c3VhbGx5IHByZXR0eSBjaGVhcC4KKwkg KgorCSAqIFdlIGFsc28gbmVlZCBjb2x1bW5zIHVzZWQgYnkgdGhlIHJlcGxpY2EgaWRlbnRpdHkg YW5kIGNvbHVtbnMgdGhhdCBhcmUKKwkgKiBjb25zaWRlcmVkIHRoZSAia2V5IiBvZiByb3dzIGlu IHRoZSB0YWJsZS4KKwkgKgorCSAqIE5vdGUgdGhhdCB3ZSBnZXQgY29waWVzIG9mIGVhY2ggYml0 bWFwLCBzbyB3ZSBuZWVkIG5vdCB3b3JyeSBhYm91dAorCSAqIHJlbGNhY2hlIGZsdXNoIGhhcHBl bmluZyBtaWR3YXkgdGhyb3VnaC4KKwkgKi8KKwlob3RfYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4 QXR0ckJpdG1hcChyZWxhdGlvbiwKKwkJCQkJCQkJCQkgICBJTkRFWF9BVFRSX0JJVE1BUF9IT1Rf QkxPQ0tJTkcpOworCXN1bV9hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0 aW9uLAorCQkJCQkJCQkJCSAgIElOREVYX0FUVFJfQklUTUFQX1NVTU1BUklaRUQpOworCXBrX2F0 dHJzID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24sIElOREVYX0FUVFJfQklU TUFQX0tFWSk7CisJcmlkX2F0dHJzID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRp b24sCisJCQkJCQkJCQkJICAgSU5ERVhfQVRUUl9CSVRNQVBfSURFTlRJVFlfS0VZKTsKKworCWlk eF9hdHRycyA9IGJtc19jb3B5KGhvdF9hdHRycyk7CisJaWR4X2F0dHJzID0gYm1zX2FkZF9tZW1i ZXJzKGlkeF9hdHRycywgc3VtX2F0dHJzKTsKKwlpZHhfYXR0cnMgPSBibXNfYWRkX21lbWJlcnMo aWR4X2F0dHJzLCBwa19hdHRycyk7CisJaWR4X2F0dHJzID0gYm1zX2FkZF9tZW1iZXJzKGlkeF9h dHRycywgcmlkX2F0dHJzKTsKKworCWJsb2NrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcihv dGlkKTsKKwlJTkpFQ1RJT05fUE9JTlQoImhlYXBfdXBkYXRlLWJlZm9yZS1waW4iLCBOVUxMKTsK KwlidWZmZXIgPSBSZWFkQnVmZmVyKHJlbGF0aW9uLCBibG9jayk7CisJcGFnZSA9IEJ1ZmZlckdl dFBhZ2UoYnVmZmVyKTsKKworCS8qCisJICogQmVmb3JlIGxvY2tpbmcgdGhlIGJ1ZmZlciwgcGlu IHRoZSB2aXNpYmlsaXR5IG1hcCBwYWdlIGlmIGl0IGFwcGVhcnMgdG8KKwkgKiBiZSBuZWNlc3Nh cnkuICBTaW5jZSB3ZSBoYXZlbid0IGdvdCB0aGUgbG9jayB5ZXQsIHNvbWVvbmUgZWxzZSBtaWdo dCBiZQorCSAqIGluIHRoZSBtaWRkbGUgb2YgY2hhbmdpbmcgdGhpcywgc28gd2UnbGwgbmVlZCB0 byByZWNoZWNrIGFmdGVyIHdlIGhhdmUKKwkgKiB0aGUgbG9jay4KKwkgKi8KKwlpZiAoUGFnZUlz QWxsVmlzaWJsZShwYWdlKSkKKwkJdmlzaWJpbGl0eW1hcF9waW4ocmVsYXRpb24sIGJsb2NrLCAm dm1idWZmZXIpOworCisJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7 CisKKwlscCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXIo b3RpZCkpOworCisJQXNzZXJ0KEl0ZW1JZElzTm9ybWFsKGxwKSk7CisKKwkvKgorCSAqIFBhcnRp YWxseSBjb25zdHJ1Y3QgdGhlIG9sZHR1cCBmb3IgSGVhcERldGVybWluZUNvbHVtbnNJbmZvIHRv IHdvcmsgYW5kCisJICogdGhlbiBwYXNzIHRoYXQgb24gdG8gaGVhcF91cGRhdGUuCisJICovCisJ b2xkdHVwLnRfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwlvbGR0dXAu dF9kYXRhID0gKEhlYXBUdXBsZUhlYWRlcikgUGFnZUdldEl0ZW0ocGFnZSwgbHApOworCW9sZHR1 cC50X2xlbiA9IEl0ZW1JZEdldExlbmd0aChscCk7CisJb2xkdHVwLnRfc2VsZiA9ICpvdGlkOwor CisJbWl4X2F0dHJzID0gSGVhcERldGVybWluZUNvbHVtbnNJbmZvKHJlbGF0aW9uLCBpZHhfYXR0 cnMsIHJpZF9hdHRycywKKwkJCQkJCQkJCQkgJm9sZHR1cCwgdHVwbGUsICZyZXBfaWRfa2V5X3Jl cXVpcmVkKTsKKworCS8qCisJICogV2UnbGwgbmVlZCB0byBXQUwgbG9nIHRoZSByZXBsaWNhIGlk ZW50aXR5IGF0dHJpYnV0ZXMgaWYgZWl0aGVyIHRoZXkKKwkgKiBvdmVybGFwIHdpdGggdGhlIG1v ZGlmaWVkIGluZGV4ZWQgYXR0cmlidXRlcyBvciwgYXMgd2UndmUgY2hlY2tlZCBmb3IKKwkgKiBq dXN0IG5vdyBpbiBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8sIHRoZXkgd2VyZSB1bm1vZGlmaWVk IGV4dGVybmFsCisJICogaW5kZXhlZCBhdHRyaWJ1dGVzLgorCSAqLworCXJlcF9pZF9rZXlfcmVx dWlyZWQgPSByZXBfaWRfa2V5X3JlcXVpcmVkIHx8IGJtc19vdmVybGFwKG1peF9hdHRycywgcmlk X2F0dHJzKTsKKwogCS8qIFVwZGF0ZSB0aGUgdHVwbGUgd2l0aCB0YWJsZSBvaWQgKi8KIAlzbG90 LT50dHNfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKIAl0dXBsZS0+dF90 YWJsZU9pZCA9IHNsb3QtPnR0c190YWJsZU9pZDsKIAotCXJlc3VsdCA9IGhlYXBfdXBkYXRlKHJl bGF0aW9uLCBvdGlkLCB0dXBsZSwgY2lkLCBjcm9zc2NoZWNrLCB3YWl0LAotCQkJCQkJIHRtZmQs IGxvY2ttb2RlLCB1cGRhdGVfaW5kZXhlcyk7CisJcmVzdWx0ID0gaGVhcF91cGRhdGUocmVsYXRp b24sICZvbGR0dXAsIHR1cGxlLCBjaWQsIGNyb3NzY2hlY2ssIHdhaXQsIHRtZmQsIGxvY2ttb2Rl LAorCQkJCQkJIGJ1ZmZlciwgcGFnZSwgYmxvY2ssIGxwLCBob3RfYXR0cnMsIHN1bV9hdHRycywg cGtfYXR0cnMsCisJCQkJCQkgcmlkX2F0dHJzLCBtaXhfYXR0cnMsICZ2bWJ1ZmZlciwgcmVwX2lk X2tleV9yZXF1aXJlZCwgdXBkYXRlX2luZGV4ZXMpOworCisJYm1zX2ZyZWUoaG90X2F0dHJzKTsK KwlibXNfZnJlZShzdW1fYXR0cnMpOworCWJtc19mcmVlKHBrX2F0dHJzKTsKKwlibXNfZnJlZShy aWRfYXR0cnMpOworCWJtc19mcmVlKG1peF9hdHRycyk7CisJYm1zX2ZyZWUoaWR4X2F0dHJzKTsK KwogCUl0ZW1Qb2ludGVyQ29weSgmdHVwbGUtPnRfc2VsZiwgJnNsb3QtPnR0c190aWQpOwogCiAJ LyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9oZWFwYW0uaAppbmRleCA2MzJjNDMzMmE4Yy4uMmY5YTJiMDY5Y2QgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv aGVhcGFtLmgKQEAgLTM2NCwxMSArMzY0LDEzIEBAIGV4dGVybiBUTV9SZXN1bHQgaGVhcF9kZWxl dGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkLAogCQkJCQkJ CSBUTV9GYWlsdXJlRGF0YSAqdG1mZCwgYm9vbCBjaGFuZ2luZ1BhcnQpOwogZXh0ZXJuIHZvaWQg aGVhcF9maW5pc2hfc3BlY3VsYXRpdmUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2lu dGVyRGF0YSAqdGlkKTsKIGV4dGVybiB2b2lkIGhlYXBfYWJvcnRfc3BlY3VsYXRpdmUoUmVsYXRp b24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkKTsKLWV4dGVybiBUTV9SZXN1 bHQgaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAq b3RpZCwKLQkJCQkJCQkgSGVhcFR1cGxlIG5ld3R1cCwKLQkJCQkJCQkgQ29tbWFuZElkIGNpZCwg U25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAotCQkJCQkJCSBUTV9GYWlsdXJlRGF0YSAq dG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCi0JCQkJCQkJIFRVX1VwZGF0ZUluZGV4ZXMg KnVwZGF0ZV9pbmRleGVzKTsKK2V4dGVybiBUTV9SZXN1bHQgaGVhcF91cGRhdGUoUmVsYXRpb24g cmVsYXRpb24sIEhlYXBUdXBsZURhdGEgKm9sZHR1cCwKKwkJCQkJCQkgSGVhcFR1cGxlIG5ld3R1 cCwgQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAorCQkJCQkJ CSBUTV9GYWlsdXJlRGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsIEJ1ZmZlciBi dWZmZXIsCisJCQkJCQkJIFBhZ2UgcGFnZSwgQmxvY2tOdW1iZXIgYmxvY2ssIEl0ZW1JZCBscCwg Qml0bWFwc2V0ICpob3RfYXR0cnMsCisJCQkJCQkJIEJpdG1hcHNldCAqc3VtX2F0dHJzLCBCaXRt YXBzZXQgKnBrX2F0dHJzLCBCaXRtYXBzZXQgKnJpZF9hdHRycywKKwkJCQkJCQkgQml0bWFwc2V0 ICptaXhfYXR0cnMsIEJ1ZmZlciAqdm1idWZmZXIsCisJCQkJCQkJIGJvb2wgcmVwX2lkX2tleV9y ZXF1aXJlZCwgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpOwogZXh0ZXJuIFRNX1Jl c3VsdCBoZWFwX2xvY2tfdHVwbGUoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0dXBsZSwK IAkJCQkJCQkJIENvbW1hbmRJZCBjaWQsIExvY2tUdXBsZU1vZGUgbW9kZSwgTG9ja1dhaXRQb2xp Y3kgd2FpdF9wb2xpY3ksCiAJCQkJCQkJCSBib29sIGZvbGxvd191cGRhdGVzLApAQCAtNDMwLDYg KzQzMiwxOCBAQCBleHRlcm4gdm9pZCBsb2dfaGVhcF9wcnVuZV9hbmRfZnJlZXplKFJlbGF0aW9u IHJlbGF0aW9uLCBCdWZmZXIgYnVmZmVyLAogCQkJCQkJCQkJICBPZmZzZXROdW1iZXIgKmRlYWQs IGludCBuZGVhZCwKIAkJCQkJCQkJCSAgT2Zmc2V0TnVtYmVyICp1bnVzZWQsIGludCBudW51c2Vk KTsKIAorLyogaW4gaGVhcC9oZWFwYW0uYyAqLworZXh0ZXJuIEJpdG1hcHNldCAqSGVhcERldGVy bWluZUNvbHVtbnNJbmZvKFJlbGF0aW9uIHJlbGF0aW9uLAorCQkJCQkJCQkJCSAgIEJpdG1hcHNl dCAqaW50ZXJlc3RpbmdfY29scywKKwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKmV4dGVybmFsX2Nv bHMsCisJCQkJCQkJCQkJICAgSGVhcFR1cGxlIG9sZHR1cCwgSGVhcFR1cGxlIG5ld3R1cCwKKwkJ CQkJCQkJCQkgICBib29sICpoYXNfZXh0ZXJuYWwpOworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJ TkcKK2V4dGVybiB2b2lkIGNoZWNrX2xvY2tfaWZfaW5wbGFjZV91cGRhdGVhYmxlX3JlbChSZWxh dGlvbiByZWxhdGlvbiwKKwkJCQkJCQkJCQkJCSBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQs CisJCQkJCQkJCQkJCQkgSGVhcFR1cGxlIG5ld3R1cCk7CisjZW5kaWYKKwogLyogaW4gaGVhcC92 YWN1dW1sYXp5LmMgKi8KIGV4dGVybiB2b2lkIGhlYXBfdmFjdXVtX3JlbChSZWxhdGlvbiByZWws CiAJCQkJCQkJY29uc3QgVmFjdXVtUGFyYW1zIHBhcmFtcywgQnVmZmVyQWNjZXNzU3RyYXRlZ3kg YnN0cmF0ZWd5KTsKLS0gCjIuNTEuMgoK --6930b44e_6839fabe_1328 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="=?utf-8?Q?v25-0003-Replace-index=5Funchanged=5Fby=5Fupdate-with-ri=5FChange.patch?=" RnJvbSA2Yjk1ZTQ0MThiMmJmYzIwMjQ1ZTI0Yjc1ZWE3MTczYjRkODM1NTJlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTogRnJpLCAz MSBPY3QgMjAyNSAxNDo1NToyNSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjI1IDMvM10gUmVwbGFj ZSBpbmRleF91bmNoYW5nZWRfYnlfdXBkYXRlKCkgd2l0aAogcmlfQ2hhbmdlZEluZGV4ZWRDb2xz CgpJbiBleGVjSW5kZXhpbmcgb24gdXBkYXRlcyB3ZSdkIGxpa2UgdG8gcGFzcyBhIGhpbnQgdG8g dGhlIGluZGV4aW5nIGNvZGUKd2hlbiB0aGUgaW5kZXhlZCBhdHRyaWJ1dGVzIGFyZSB1bmNoYW5n ZWQuICBUaGlzIGNvbW1pdCByZXBsYWNlcyB0aGUgbm93CnJlZHVuZGFudCBjb2RlIGluIGluZGV4 X3VuY2hhbmdlZF9ieV91cGRhdGUoKSB3aXRoIHRoZSBzYW1lIGluZm9ybWF0aW9uCmZvdW5kIGVh cmxpZXIgaW4gRXhlY1doaWNoSW5kZXhlc1JlcXVpcmVVcGRhdGVzKCkgYW5kIHN0YXNoZWQgaW4K cmlfQ2hhbmdlZEluZGV4ZWRDb2xzLgotLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3Rpbmcu YyAgICAgIHwgICAyIC0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jIHwgMTU2 ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5j cy5jICAgICAgIHwgICAyIC0KIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgIHwg ICA0IC0KIDQgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDE2MyBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMgYi9zcmMvYmFja2Vu ZC9jYXRhbG9nL3RvYXN0aW5nLmMKaW5kZXggOWQ3Y2I0NDM4ZDUuLmM2NjVhYTc0NGIzIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQv Y2F0YWxvZy90b2FzdGluZy5jCkBAIC0zMDQsOCArMzA0LDYgQEAgY3JlYXRlX3RvYXN0X3RhYmxl KFJlbGF0aW9uIHJlbCwgT2lkIHRvYXN0T2lkLCBPaWQgdG9hc3RJbmRleE9pZCwKIAlpbmRleElu Zm8tPmlpX1VuaXF1ZSA9IHRydWU7CiAJaW5kZXhJbmZvLT5paV9OdWxsc05vdERpc3RpbmN0ID0g ZmFsc2U7CiAJaW5kZXhJbmZvLT5paV9SZWFkeUZvckluc2VydHMgPSB0cnVlOwotCWluZGV4SW5m by0+aWlfQ2hlY2tlZFVuY2hhbmdlZCA9IGZhbHNlOwotCWluZGV4SW5mby0+aWlfSW5kZXhVbmNo YW5nZWQgPSBmYWxzZTsKIAlpbmRleEluZm8tPmlpX0NvbmN1cnJlbnQgPSBmYWxzZTsKIAlpbmRl eEluZm8tPmlpX0Jyb2tlbkhvdENoYWluID0gZmFsc2U7CiAJaW5kZXhJbmZvLT5paV9QYXJhbGxl bFdvcmtlcnMgPSAwOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4 aW5nLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwppbmRleCAwNWFlN2Vi OWY2NS4uZmY5ZDQ5ZDYyMGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJ bmRleGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCkBAIC0x NDMsMTEgKzE0Myw2IEBAIHN0YXRpYyBib29sIGNoZWNrX2V4Y2x1c2lvbl9vcl91bmlxdWVfY29u c3RyYWludChSZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRleCwKIHN0YXRpYyBib29sIGluZGV4 X3JlY2hlY2tfY29uc3RyYWludChSZWxhdGlvbiBpbmRleCwgY29uc3QgT2lkICpjb25zdHJfcHJv Y3MsCiAJCQkJCQkJCQkgY29uc3QgRGF0dW0gKmV4aXN0aW5nX3ZhbHVlcywgY29uc3QgYm9vbCAq ZXhpc3RpbmdfaXNudWxsLAogCQkJCQkJCQkJIGNvbnN0IERhdHVtICpuZXdfdmFsdWVzKTsKLXN0 YXRpYyBib29sIGluZGV4X3VuY2hhbmdlZF9ieV91cGRhdGUoUmVzdWx0UmVsSW5mbyAqcmVzdWx0 UmVsSW5mbywKLQkJCQkJCQkJCSAgRVN0YXRlICplc3RhdGUsIEluZGV4SW5mbyAqaW5kZXhJbmZv LAotCQkJCQkJCQkJICBSZWxhdGlvbiBpbmRleFJlbGF0aW9uKTsKLXN0YXRpYyBib29sIGluZGV4 X2V4cHJlc3Npb25fY2hhbmdlZF93YWxrZXIoTm9kZSAqbm9kZSwKLQkJCQkJCQkJCQkJQml0bWFw c2V0ICphbGxVcGRhdGVkQ29scyk7CiBzdGF0aWMgdm9pZCBFeGVjV2l0aG91dE92ZXJsYXBzTm90 RW1wdHkoUmVsYXRpb24gcmVsLCBOYW1lRGF0YSBhdHRuYW1lLCBEYXR1bSBhdHR2YWwsCiAJCQkJ CQkJCQkJY2hhciB0eXB0eXBlLCBPaWQgYXR0dHlwaWQpOwogCkBAIC00NTEsMTAgKzQ0Niw3IEBA IEV4ZWNJbnNlcnRJbmRleFR1cGxlcyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCQkg KiBpbmRleC4gIElmIHdlJ3JlIGJlaW5nIGNhbGxlZCBhcyBwYXJ0IG9mIGFuIFVQREFURSBzdGF0 ZW1lbnQsCiAJCSAqIGNvbnNpZGVyIGlmIHRoZSAnaW5kZXhVbmNoYW5nZWQnID0gdHJ1ZSBoaW50 IHNob3VsZCBiZSBwYXNzZWQuCiAJCSAqLwotCQlpbmRleFVuY2hhbmdlZCA9IHVwZGF0ZSAmJiBp bmRleF91bmNoYW5nZWRfYnlfdXBkYXRlKHJlc3VsdFJlbEluZm8sCi0JCQkJCQkJCQkJCQkJCQkg ZXN0YXRlLAotCQkJCQkJCQkJCQkJCQkJIGluZGV4SW5mbywKLQkJCQkJCQkJCQkJCQkJCSBpbmRl eFJlbGF0aW9uKTsKKwkJaW5kZXhVbmNoYW5nZWQgPSB1cGRhdGUgJiYgYm1zX2lzX2VtcHR5KHJl c3VsdFJlbEluZm8tPnJpX0NoYW5nZWRJbmRleGVkQ29scyk7CiAKIAkJc2F0aXNmaWVzQ29uc3Ry YWludCA9CiAJCQlpbmRleF9pbnNlcnQoaW5kZXhSZWxhdGlvbiwgLyogaW5kZXggcmVsYXRpb24g Ki8KQEAgLTEwMTQsMTUyICsxMDA2LDYgQEAgaW5kZXhfcmVjaGVja19jb25zdHJhaW50KFJlbGF0 aW9uIGluZGV4LCBjb25zdCBPaWQgKmNvbnN0cl9wcm9jcywKIAlyZXR1cm4gdHJ1ZTsKIH0KIAot LyoKLSAqIENoZWNrIGlmIEV4ZWNJbnNlcnRJbmRleFR1cGxlcygpIHNob3VsZCBwYXNzIGluZGV4 VW5jaGFuZ2VkIGhpbnQuCi0gKgotICogV2hlbiB0aGUgZXhlY3V0b3IgcGVyZm9ybXMgYW4gVVBE QVRFIHRoYXQgcmVxdWlyZXMgYSBuZXcgcm91bmQgb2YgaW5kZXgKLSAqIHR1cGxlcywgZGV0ZXJt aW5lIGlmIHdlIHNob3VsZCBwYXNzICdpbmRleFVuY2hhbmdlZCcgPSB0cnVlIGhpbnQgZm9yIG9u ZQotICogc2luZ2xlIGluZGV4LgotICovCi1zdGF0aWMgYm9vbAotaW5kZXhfdW5jaGFuZ2VkX2J5 X3VwZGF0ZShSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLCBFU3RhdGUgKmVzdGF0ZSwKLQkJ CQkJCSAgSW5kZXhJbmZvICppbmRleEluZm8sIFJlbGF0aW9uIGluZGV4UmVsYXRpb24pCi17Ci0J Qml0bWFwc2V0ICAqdXBkYXRlZENvbHM7Ci0JQml0bWFwc2V0ICAqZXh0cmFVcGRhdGVkQ29sczsK LQlCaXRtYXBzZXQgICphbGxVcGRhdGVkQ29sczsKLQlib29sCQloYXNleHByZXNzaW9uID0gZmFs c2U7Ci0JTGlzdAkgICAqaWR4RXhwcnM7Ci0KLQkvKgotCSAqIENoZWNrIGNhY2hlIGZpcnN0Ci0J ICovCi0JaWYgKGluZGV4SW5mby0+aWlfQ2hlY2tlZFVuY2hhbmdlZCkKLQkJcmV0dXJuIGluZGV4 SW5mby0+aWlfSW5kZXhVbmNoYW5nZWQ7Ci0JaW5kZXhJbmZvLT5paV9DaGVja2VkVW5jaGFuZ2Vk ID0gdHJ1ZTsKLQotCS8qCi0JICogQ2hlY2sgZm9yIGluZGV4ZWQgYXR0cmlidXRlIG92ZXJsYXAg d2l0aCB1cGRhdGVkIGNvbHVtbnMuCi0JICoKLQkgKiBPbmx5IGRvIHRoaXMgZm9yIGtleSBjb2x1 bW5zLiAgQSBjaGFuZ2UgdG8gYSBub24ta2V5IGNvbHVtbiB3aXRoaW4gYW4KLQkgKiBJTkNMVURF IGluZGV4IHNob3VsZCBub3QgYmUgY291bnRlZCBoZXJlLiAgTm9uLWtleSBjb2x1bW4gdmFsdWVz IGFyZQotCSAqIG9wYXF1ZSBwYXlsb2FkIHN0YXRlIHRvIHRoZSBpbmRleCBBTSwgYSBsaXR0bGUg bGlrZSBhbiBleHRyYSB0YWJsZSBUSUQuCi0JICoKLQkgKiBOb3RlIHRoYXQgcm93LWxldmVsIEJF Rk9SRSB0cmlnZ2VycyB3b24ndCBhZmZlY3Qgb3VyIGJlaGF2aW9yLCBzaW5jZQotCSAqIHRoZXkg ZG9uJ3QgYWZmZWN0IHRoZSB1cGRhdGVkQ29scyBiaXRtYXBzIGdlbmVyYWxseS4gIEl0IGRvZXNu J3Qgc2VlbQotCSAqIHdvcnRoIHRoZSB0cm91YmxlIG9mIGNoZWNraW5nIHdoaWNoIGF0dHJpYnV0 ZXMgd2VyZSBjaGFuZ2VkIGRpcmVjdGx5LgotCSAqLwotCXVwZGF0ZWRDb2xzID0gRXhlY0dldFVw ZGF0ZWRDb2xzKHJlc3VsdFJlbEluZm8sIGVzdGF0ZSk7Ci0JZXh0cmFVcGRhdGVkQ29scyA9IEV4 ZWNHZXRFeHRyYVVwZGF0ZWRDb2xzKHJlc3VsdFJlbEluZm8sIGVzdGF0ZSk7Ci0JZm9yIChpbnQg YXR0ciA9IDA7IGF0dHIgPCBpbmRleEluZm8tPmlpX051bUluZGV4S2V5QXR0cnM7IGF0dHIrKykK LQl7Ci0JCWludAkJCWtleWNvbCA9IGluZGV4SW5mby0+aWlfSW5kZXhBdHRyTnVtYmVyc1thdHRy XTsKLQotCQlpZiAoa2V5Y29sIDw9IDApCi0JCXsKLQkJCS8qCi0JCQkgKiBTa2lwIGV4cHJlc3Np b25zIGZvciBub3csIGJ1dCByZW1lbWJlciB0byBkZWFsIHdpdGggdGhlbSBsYXRlcgotCQkJICog b24KLQkJCSAqLwotCQkJaGFzZXhwcmVzc2lvbiA9IHRydWU7Ci0JCQljb250aW51ZTsKLQkJfQot Ci0JCWlmIChibXNfaXNfbWVtYmVyKGtleWNvbCAtIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1 dGVOdW1iZXIsCi0JCQkJCQkgIHVwZGF0ZWRDb2xzKSB8fAotCQkJYm1zX2lzX21lbWJlcihrZXlj b2wgLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyLAotCQkJCQkJICBleHRyYVVw ZGF0ZWRDb2xzKSkKLQkJewotCQkJLyogQ2hhbmdlZCBrZXkgY29sdW1uIC0tIGRvbid0IGhpbnQg Zm9yIHRoaXMgaW5kZXggKi8KLQkJCWluZGV4SW5mby0+aWlfSW5kZXhVbmNoYW5nZWQgPSBmYWxz ZTsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQotCS8qCi0JICogV2hlbiB3ZSBnZXQgdGhp cyBmYXIgYW5kIGluZGV4IGhhcyBubyBleHByZXNzaW9ucywgcmV0dXJuIHRydWUgc28gdGhhdAot CSAqIGluZGV4X2luc2VydCgpIGNhbGwgd2lsbCBnbyBvbiB0byBwYXNzICdpbmRleFVuY2hhbmdl ZCcgPSB0cnVlIGhpbnQuCi0JICoKLQkgKiBUaGUgX2Fic2VuY2VfIG9mIGFuIGluZGV4ZWQga2V5 IGF0dHJpYnV0ZSB0aGF0IG92ZXJsYXBzIHdpdGggdXBkYXRlZAotCSAqIGF0dHJpYnV0ZXMgKGlu IGFkZGl0aW9uIHRvIHRoZSB0b3RhbCBhYnNlbmNlIG9mIGluZGV4ZWQgZXhwcmVzc2lvbnMpCi0J ICogc2hvd3MgdGhhdCB0aGUgaW5kZXggYXMgYSB3aG9sZSBpcyBsb2dpY2FsbHkgdW5jaGFuZ2Vk IGJ5IFVQREFURS4KLQkgKi8KLQlpZiAoIWhhc2V4cHJlc3Npb24pCi0JewotCQlpbmRleEluZm8t PmlpX0luZGV4VW5jaGFuZ2VkID0gdHJ1ZTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoKLQkg KiBOZWVkIHRvIHBhc3Mgb25seSBvbmUgYm1zIHRvIGV4cHJlc3Npb25fdHJlZV93YWxrZXIgaGVs cGVyIGZ1bmN0aW9uLgotCSAqIEF2b2lkIGFsbG9jYXRpbmcgbWVtb3J5IGluIGNvbW1vbiBjYXNl IHdoZXJlIHRoZXJlIGFyZSBubyBleHRyYSBjb2xzLgotCSAqLwotCWlmICghZXh0cmFVcGRhdGVk Q29scykKLQkJYWxsVXBkYXRlZENvbHMgPSB1cGRhdGVkQ29sczsKLQllbHNlCi0JCWFsbFVwZGF0 ZWRDb2xzID0gYm1zX3VuaW9uKHVwZGF0ZWRDb2xzLCBleHRyYVVwZGF0ZWRDb2xzKTsKLQotCS8q Ci0JICogV2UgaGF2ZSB0byB3b3JrIHNsaWdodGx5IGhhcmRlciBpbiB0aGUgZXZlbnQgb2YgaW5k ZXhlZCBleHByZXNzaW9ucywKLQkgKiBidXQgdGhlIHByaW5jaXBsZSBpcyB0aGUgc2FtZSBhcyBi ZWZvcmU6IHRyeSB0byBmaW5kIGNvbHVtbnMgKFZhcnMsCi0JICogYWN0dWFsbHkpIHRoYXQgb3Zl cmxhcCB3aXRoIGtub3duLXVwZGF0ZWQgY29sdW1ucy4KLQkgKgotCSAqIElmIHdlIGZpbmQgYW55 IG1hdGNoaW5nIFZhcnMsIGRvbid0IHBhc3MgaGludCBmb3IgaW5kZXguICBPdGhlcndpc2UKLQkg KiBwYXNzIGhpbnQuCi0JICovCi0JaWR4RXhwcnMgPSBSZWxhdGlvbkdldEluZGV4RXhwcmVzc2lv bnMoaW5kZXhSZWxhdGlvbik7Ci0JaGFzZXhwcmVzc2lvbiA9IGluZGV4X2V4cHJlc3Npb25fY2hh bmdlZF93YWxrZXIoKE5vZGUgKikgaWR4RXhwcnMsCi0JCQkJCQkJCQkJCQkJYWxsVXBkYXRlZENv bHMpOwotCWxpc3RfZnJlZShpZHhFeHBycyk7Ci0JaWYgKGV4dHJhVXBkYXRlZENvbHMpCi0JCWJt c19mcmVlKGFsbFVwZGF0ZWRDb2xzKTsKLQotCWlmIChoYXNleHByZXNzaW9uKQotCXsKLQkJaW5k ZXhJbmZvLT5paV9JbmRleFVuY2hhbmdlZCA9IGZhbHNlOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQot Ci0JLyoKLQkgKiBEZWxpYmVyYXRlbHkgZG9uJ3QgY29uc2lkZXIgaW5kZXggcHJlZGljYXRlcy4g IFdlIHNob3VsZCBldmVuIGdpdmUgdGhlCi0JICogaGludCB3aGVuIHJlc3VsdCByZWwncyAidXBk YXRlZCB0dXBsZSIgaGFzIG5vIGNvcnJlc3BvbmRpbmcgaW5kZXgKLQkgKiB0dXBsZSwgd2hpY2gg aXMgcG9zc2libGUgd2l0aCBhIHBhcnRpYWwgaW5kZXggKHByb3ZpZGVkIHRoZSB1c3VhbAotCSAq IGNvbmRpdGlvbnMgYXJlIG1ldCkuCi0JICovCi0JaW5kZXhJbmZvLT5paV9JbmRleFVuY2hhbmdl ZCA9IHRydWU7Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBJbmRleGVkIGV4cHJlc3Npb24g aGVscGVyIGZvciBpbmRleF91bmNoYW5nZWRfYnlfdXBkYXRlKCkuCi0gKgotICogUmV0dXJucyB0 cnVlIHdoZW4gVmFyIHRoYXQgYXBwZWFycyB3aXRoaW4gYWxsVXBkYXRlZENvbHMgbG9jYXRlZC4K LSAqLwotc3RhdGljIGJvb2wKLWluZGV4X2V4cHJlc3Npb25fY2hhbmdlZF93YWxrZXIoTm9kZSAq bm9kZSwgQml0bWFwc2V0ICphbGxVcGRhdGVkQ29scykKLXsKLQlpZiAobm9kZSA9PSBOVUxMKQot CQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoSXNBKG5vZGUsIFZhcikpCi0JewotCQlWYXIJCSAgICp2 YXIgPSAoVmFyICopIG5vZGU7Ci0KLQkJaWYgKGJtc19pc19tZW1iZXIodmFyLT52YXJhdHRubyAt IEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIsCi0JCQkJCQkgIGFsbFVwZGF0ZWRD b2xzKSkKLQkJewotCQkJLyogVmFyIHdhcyB1cGRhdGVkIC0tIGluZGljYXRlcyB0aGF0IHdlIHNo b3VsZCBub3QgaGludCAqLwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQkvKiBTdGlsbCBoYXZl bid0IGZvdW5kIGEgcmVhc29uIHRvIG5vdCBwYXNzIHRoZSBoaW50ICovCi0JCXJldHVybiBmYWxz ZTsKLQl9Ci0KLQlyZXR1cm4gZXhwcmVzc2lvbl90cmVlX3dhbGtlcihub2RlLCBpbmRleF9leHBy ZXNzaW9uX2NoYW5nZWRfd2Fsa2VyLAotCQkJCQkJCQkgIGFsbFVwZGF0ZWRDb2xzKTsKLX0KLQog LyoKICAqIEV4ZWNXaXRob3V0T3ZlcmxhcHNOb3RFbXB0eSAtIHJhaXNlIGFuIGVycm9yIGlmIHRo ZSB0dXBsZSBoYXMgYW4gZW1wdHkKICAqIHJhbmdlIG9yIG11bHRpcmFuZ2UgaW4gdGhlIGdpdmVu IGF0dHJpYnV0ZS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jIGIv c3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKaW5kZXggMWYxMzY0ZjlkZjkuLmU5YTUzYjk1 Y2FmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYworKysgYi9zcmMv YmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYwpAQCAtODQ1LDggKzg0NSw2IEBAIG1ha2VJbmRleElu Zm8oaW50IG51bWF0dHJzLCBpbnQgbnVta2V5YXR0cnMsIE9pZCBhbW9pZCwgTGlzdCAqZXhwcmVz c2lvbnMsCiAJbi0+aWlfVW5pcXVlID0gdW5pcXVlOwogCW4tPmlpX051bGxzTm90RGlzdGluY3Qg PSBudWxsc19ub3RfZGlzdGluY3Q7CiAJbi0+aWlfUmVhZHlGb3JJbnNlcnRzID0gaXNyZWFkeTsK LQluLT5paV9DaGVja2VkVW5jaGFuZ2VkID0gZmFsc2U7Ci0Jbi0+aWlfSW5kZXhVbmNoYW5nZWQg PSBmYWxzZTsKIAluLT5paV9Db25jdXJyZW50ID0gY29uY3VycmVudDsKIAluLT5paV9TdW1tYXJp emluZyA9IHN1bW1hcml6aW5nOwogCW4tPmlpX1dpdGhvdXRPdmVybGFwcyA9IHdpdGhvdXRvdmVy bGFwczsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggZTEwZjQyMzlkZTkuLjEyNTk4OTcyODJlIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMjE2LDEwICsyMTYsNiBAQCB0eXBlZGVmIHN0cnVjdCBJ bmRleEluZm8KIAlib29sCQlpaV9OdWxsc05vdERpc3RpbmN0OwogCS8qIGlzIGl0IHZhbGlkIGZv ciBpbnNlcnRzPyAqLwogCWJvb2wJCWlpX1JlYWR5Rm9ySW5zZXJ0czsKLQkvKiBJbmRleFVuY2hh bmdlZCBzdGF0dXMgZGV0ZXJtaW5lZCB5ZXQ/ICovCi0JYm9vbAkJaWlfQ2hlY2tlZFVuY2hhbmdl ZDsKLQkvKiBhbWluc2VydCBoaW50LCBjYWNoZWQgZm9yIHJldGFpbCBpbnNlcnRzICovCi0JYm9v bAkJaWlfSW5kZXhVbmNoYW5nZWQ7CiAJLyogYXJlIHdlIGRvaW5nIGEgY29uY3VycmVudCBpbmRl eCBidWlsZD8gKi8KIAlib29sCQlpaV9Db25jdXJyZW50OwogCS8qIGRpZCB3ZSBkZXRlY3QgYW55 IGJyb2tlbiBIT1QgY2hhaW5zPyAqLwotLSAKMi41MS4yCgo= --6930b44e_6839fabe_1328 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v25-0002-Track-changed-indexed-columns-in-the-executor-du.patch" RnJvbSBmZmY3ZjE1MjQ4MjFjMzdkYjNiNTEyYTQxNzAzMWIxNDFjNTZmNjMxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTogU3VuLCAy NiBPY3QgMjAyNSAxMDo0OToyNSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjI1IDIvM10gVHJhY2sg Y2hhbmdlZCBpbmRleGVkIGNvbHVtbnMgaW4gdGhlIGV4ZWN1dG9yIGR1cmluZwogVVBEQVRFcwoK UmVmYWN0b3IgZXhlY3V0b3IgdXBkYXRlIGxvZ2ljIHRvIGRldGVybWluZSB3aGljaCBpbmRleGVk IGNvbHVtbnMgaGF2ZQphY3R1YWxseSBjaGFuZ2VkIGR1cmluZyBhbiBVUERBVEUgb3BlcmF0aW9u IHJhdGhlciB0aGFuIGxlYXZpbmcgdGhpcyB1cAp0byBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8o KSBpbiBoZWFwX3VwZGF0ZSgpLgoKRXhlY1doaWNoSW5kZXhlc1JlcXVpcmVVcGRhdGVzKCkgcmVw bGFjZXMgSGVhcERldGVybWluZXNDb2x1bW5zSW5mbygpCndoZW4gaW52b2tlZCBmcm9tIHRoZSB0 YWJsZSBBTSBBUEkgdmlhIGhlYXBhbV90dXBsZV91cGRhdGUoKS4gVGhlCnRlc3QgZm9yIGVxdWFs aXR5IHJlbWFpbnMgZGF0dW1Jc0VxdWFsKCkgYXMgYmVmb3JlLgoKVGhpcyBjaGFuZ2UgbmVjZXNz aXRhdGVkIHNvbWUgbG9naWMgY2hhbmdlcyBpbiBleGVjUmVwbGljYXRpb24oKSBhcyBpdApwZXJm b3JtcyB1cGRhdGVzIG5vdyBtdXN0IHByb3ZpZGUgdGhlIHNldCBvZiBhdHRyaWJ1dGVzIHRoYXQg YXJlIGJvdGgKY2hhbmdlZCBhbmQgcmVmZXJlbmNlZCBieSBpbmRleGVzLiAgTHVja2lsbHksIHRo aXMgaXMgYXZhaWxhYmxlIHdpdGhpbgpjYWxscyB0byBzbG90X21vZGlmeV9kYXRhKCkgd2hlcmUg TG9naWNhbFJlcFR1cGxlRGF0YSBpcyBwcm9jZXNzZWQgYW5kCmhhcyBhIHJlY29yZCBvZiB1cGRh dGVkIGF0dHJpYnV0ZXMuICBJbiB0aGlzIGNhc2UgcmF0aGVyIHRoYW4gdXNpbmcKRXhlY1doaWNo SW5kZXhlc1JlcXVpcmVVcGRhdGVzKCkgd2UgY2FuIHByZXNldmUgd2hhdCBzbG90X21vZGlmeV9k YXRhKCkKaWRlbnRpZmllcyBhcyB0aGUgbW9kaWZpZWQgc2V0IGFuZCB0aGVuIGludGVyc2VjdCB0 aGF0IHdpdGggdGhlIHNldCBvZgppbmRleGVzIG9uIHRoZSByZWxhdGlvbiBhbmQgZ2V0IHRoZSBj b3JyZWN0IHNldCBvZiBtb2RpZmllZCBpbmRleGVkCmF0dHJpYnV0ZXMgcmVxdWlyZWQgb24gaGVh cF91cGRhdGUoKS4KClRoaXMgY29tbWl0IGFsc28gZXh0ZW5kcyB0aGUgcm9sZSBpbmRleCBBTXMg cGxheSBkZXRlcm1pbmluZyBpZiB0aGV5CnJlcXVpcmUgYW4gdXBkYXRlLiBBIG5ldyBvcHRpb25h bCBpbmRleCBBTSBBUEksIGFtY29tcGFyZWRhdHVtcygpLCBpcwphZGRlZCB0byBhbGxvdyBpbmRl eCBhY2Nlc3MgbWV0aG9kcyB0byBwcm92aWRlIGN1c3RvbSBsb2dpYyBmb3IKY29tcGFyaW5nIGRh dHVtcy4gSGFzaCBhbmQgR2luIGluZGV4ZXMgbm93IGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLiBX aGVuCm5vdCBpbXBsZW1lbnRlZCB0aGUgZXhlY3V0b3Igd2lsbCBjb21wYXJlIFR1cGxlVGFibGVT bG90IGRhdHVtIGZvcgplcXVhbGl0eSB1c2luZyBkYXR1bUlzRXF1YWwoKSBhcyBiZWZvcmUuCgpC ZWNhdXNlIGhlYXBfdXBkYXRlKCkgbm93IHJlcXVpcmVzIHRoZSBjYWxsZXIgdG8gcHJvdmlkZSB0 aGUgbW9kaWZpZWQKaW5kZXhlZCBjb2x1bW5zIHNpbXBsZV9oZWFwX3VwZGF0ZSgpIGhhcyBiZWNv bWUgYSB0YWQgbW9yZSBjb21wbGV4LiAgSXQKaXMgb25seSBjYWxsZWQgZnJvbSBDYXRhbG9nVHVw bGVVcGRhdGUoKSB3aGljaCBlaXRoZXIgdXBkYXRlcyBoZWFwCnR1cGxlcyB2aWEgdGhlaXIgRm9y bV9YWFggb3IgYnkgY2FsbGluZyBoZWFwX21vZGlmeV90dXBsZSgpLiAgSW4gYm90aApjYXNlcyB0 aGUgY2FsbGVyIGRvZXMga25vdyB0aGUgbW9kaWZpZWQgc2V0IG9mIGF0dHJpYnV0ZXMsIGJ1dCBz YWRseQp0aG9zZSBhdHRyaWJ1dGVzIGFyZSBsb3N0IGJlZm9yZSBiZWluZyBwcm92aWRlZCB0byBz aW1wbGVfaGVhcF91cGRhdGUoKS4KRHVlIHRvIHRoYXQgdGhlICJzaW1wbGUiIHBhdGggaGFzIHRv IChmb3Igbm93KSByZXRhaW4gdGhlCkhlYXBEZXRlcm1pbmVDb2x1bW5zSW5mbygpIGxvZ2ljIGlu IG9yZGVyIGZvciBjYXRhbG9nIHVwZGF0ZXMgdG8KcG90ZW50aWFsbHkgdGFrZSB0aGUgSE9UIHBh dGguCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jICAgICAgICAgICAgICAgIHwg ICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jICAgICAgICAgICAgICB8ICA5 MCArKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyAgICAgICAgICAgICAgICB8ICA0 NCArKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgICAgICAgICAgICAgIHwgIDIw ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jICAgICAgfCAgNzYg Ky0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgICAgICAgICAgICB8ICAgMSAr CiBzcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jICAgICAgICAgICAgfCAgIDUgKy0K IHNyYy9iYWNrZW5kL2Jvb3RzdHJhcC9ib290c3RyYXAuYyAgICAgICAgICAgICB8ICAgOCArCiBz cmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMgICAgICAgICAgICAgICAgICAgfCAgNTQgKysKIHNy Yy9iYWNrZW5kL2NhdGFsb2cvaW5kZXhpbmcuYyAgICAgICAgICAgICAgICB8ICAxNiArLQogc3Jj L2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5jICAgICAgICAgICAgICAgIHwgICA0ICsKIHNyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jICAgICAgICAgICB8ICA0MSArLQogc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYyAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jICAgICAgICB8ICAgNyArCiBzcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYyAgICAgICAgfCAyODMgKysrKysrKy0KIHNyYy9i YWNrZW5kL25vZGVzL2JpdG1hcHNldC5jICAgICAgICAgICAgICAgICB8ICAgNCArCiBzcmMvYmFj a2VuZC9ub2Rlcy9tYWtlZnVuY3MuYyAgICAgICAgICAgICAgICAgfCAgIDQgKwogc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyAgICAgIHwgIDcwICstCiBzcmMvYmFja2Vu ZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgICAgfCAgMTUgKwogc3JjL2luY2x1ZGUv YWNjZXNzL2FtYXBpLmggICAgICAgICAgICAgICAgICAgIHwgIDI4ICsKIHNyYy9pbmNsdWRlL2Fj Y2Vzcy9naW4uaCAgICAgICAgICAgICAgICAgICAgICB8ICAgMyArCiBzcmMvaW5jbHVkZS9hY2Nl c3MvaGVhcGFtLmggICAgICAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9pbmNsdWRlL2FjY2Vz cy9uYnRyZWUuaCAgICAgICAgICAgICAgICAgICB8ICAgNCArCiBzcmMvaW5jbHVkZS9hY2Nlc3Mv dGFibGVhbS5oICAgICAgICAgICAgICAgICAgfCAgIDggKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cv aW5kZXguaCAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9leGVjdXRvci9l eGVjdXRvci5oICAgICAgICAgICAgICAgfCAgIDkgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25v ZGVzLmggICAgICAgICAgICAgICAgIHwgIDIwICsKIHNyYy9pbmNsdWRlL3V0aWxzL3JlbC5oICAg ICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS91dGlscy9yZWxjYWNoZS5o ICAgICAgICAgICAgICAgICAgfCAgIDEgKwogLi4uL2V4cGVjdGVkL2luc2VydC1jb25mbGljdC1z cGVjY29uZmxpY3Qub3V0IHwgIDIwICsKIC4uLi9yZWdyZXNzL2V4cGVjdGVkL2hlYXBfaG90X3Vw ZGF0ZXMub3V0ICAgICB8IDY1MCArKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mv cGFyYWxsZWxfc2NoZWR1bGUgICAgICAgICAgICB8ICAgNiArCiBzcmMvdGVzdC9yZWdyZXNzL3Nx bC9oZWFwX2hvdF91cGRhdGVzLnNxbCAgICAgfCA1MTMgKysrKysrKysrKysrKysKIHNyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMSArCiAzNCBmaWxlcyBj aGFuZ2VkLCAxOTQxIGluc2VydGlvbnMoKyksIDc0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaGVhcF9ob3RfdXBkYXRlcy5vdXQKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzL3NxbC9oZWFwX2hvdF91cGRhdGVzLnNx bAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9icmluL2JyaW4uYwppbmRleCBjYjMzMzE5MjFjYi4uMzZlNjM5NTUyZTYgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvYnJpbi9icmluLmMKQEAgLTI5MCw2ICsyOTAsNyBAQCBicmluaGFuZGxlcihQR19G VU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1wcm9wZXJ0eSA9IE5VTEw7CiAJYW1yb3V0aW5l LT5hbWJ1aWxkcGhhc2VuYW1lID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtdmFsaWRhdGUgPSBicmlu dmFsaWRhdGU7CisJYW1yb3V0aW5lLT5hbWNvbXBhcmVkYXR1bXMgPSBOVUxMOwogCWFtcm91dGlu ZS0+YW1hZGp1c3RtZW1iZXJzID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtYmVnaW5zY2FuID0gYnJp bmJlZ2luc2NhbjsKIAlhbXJvdXRpbmUtPmFtcmVzY2FuID0gYnJpbnJlc2NhbjsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2dpbi9naW51dGlsLmMKaW5kZXggNzhmN2I3YTI0OTUuLmNjNTQxMDk2MGE2IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvZ2luL2dpbnV0aWwuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvaW5k ZXhmc20uaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2lu ZGV4X3NlbGZ1bmNzLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1 dGlscy9yZWwuaCIKICNpbmNsdWRlICJ1dGlscy90eXBjYWNoZS5oIgogCkBAIC03OCw2ICs3OSw3 IEBAIGdpbmhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtcHJvcGVydHkg PSBOVUxMOwogCWFtcm91dGluZS0+YW1idWlsZHBoYXNlbmFtZSA9IGdpbmJ1aWxkcGhhc2VuYW1l OwogCWFtcm91dGluZS0+YW12YWxpZGF0ZSA9IGdpbnZhbGlkYXRlOworCWFtcm91dGluZS0+YW1j b21wYXJlZGF0dW1zID0gZ2luY29tcGFyZWRhdHVtczsKIAlhbXJvdXRpbmUtPmFtYWRqdXN0bWVt YmVycyA9IGdpbmFkanVzdG1lbWJlcnM7CiAJYW1yb3V0aW5lLT5hbWJlZ2luc2NhbiA9IGdpbmJl Z2luc2NhbjsKIAlhbXJvdXRpbmUtPmFtcmVzY2FuID0gZ2lucmVzY2FuOwpAQCAtNDc3LDEzICs0 NzksNiBAQCBjbXBFbnRyaWVzKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIHZvaWQgKmFy ZykKIAlyZXR1cm4gcmVzOwogfQogCi0KLS8qCi0gKiBFeHRyYWN0IHRoZSBpbmRleCBrZXkgdmFs dWVzIGZyb20gYW4gaW5kZXhhYmxlIGl0ZW0KLSAqCi0gKiBUaGUgcmVzdWx0aW5nIGtleSB2YWx1 ZXMgYXJlIHNvcnRlZCwgYW5kIGFueSBkdXBsaWNhdGVzIGFyZSByZW1vdmVkLgotICogVGhpcyBh dm9pZHMgZ2VuZXJhdGluZyByZWR1bmRhbnQgaW5kZXggZW50cmllcy4KLSAqLwogRGF0dW0gKgog Z2luRXh0cmFjdEVudHJpZXMoR2luU3RhdGUgKmdpbnN0YXRlLCBPZmZzZXROdW1iZXIgYXR0bnVt LAogCQkJCSAgRGF0dW0gdmFsdWUsIGJvb2wgaXNOdWxsLApAQCAtNzI5LDMgKzcyNCw4NCBAQCBn aW5idWlsZHBoYXNlbmFtZShpbnQ2NCBwaGFzZW51bSkKIAkJCXJldHVybiBOVUxMOwogCX0KIH0K KworLyoKKyAqIGdpbmNvbXBhcmVkYXR1bXMgLSBDb21wYXJlIGRhdHVtcyB0byBkZXRlcm1pbmUg aWYgdGhleSBwcm9kdWNlIGlkZW50aWNhbCBrZXlzCisgKgorICogVGhpcyBmdW5jdGlvbiBleHRy YWN0cyBrZXlzIGZyb20gYm90aCBvbGRfZGF0dW0gYW5kIG5ld19kYXR1bSB1c2luZyB0aGUKKyAq IG9wY2xhc3MncyBleHRyYWN0VmFsdWUgZnVuY3Rpb24sIHRoZW4gY29tcGFyZXMgdGhlIGV4dHJh Y3RlZCBrZXkgYXJyYXlzLgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBrZXkgc2V0cyBhcmUgaWRl bnRpY2FsIChzYW1lIGtleXMsIHNhbWUgY291bnRzKS4KKyAqCisgKiBUaGlzIGVuYWJsZXMgSE9U IHVwZGF0ZXMgZm9yIEdJTiBpbmRleGVzIHdoZW4gdGhlIGluZGV4ZWQgcG9ydGlvbnMgb2YgYQor ICogdmFsdWUgaGF2ZW4ndCBjaGFuZ2VkLCBldmVuIGlmIHRoZSB2YWx1ZSBpdHNlbGYgaGFzIGNo YW5nZWQuCisgKgorICogRXhhbXBsZTogSlNPTkIgY29sdW1uIHdpdGggR0lOIGluZGV4LiBJZiBh biB1cGRhdGUgY2hhbmdlcyBhIG5vbi1pbmRleGVkCisgKiBrZXkgaW4gdGhlIEpTT05CIGRvY3Vt ZW50LCB0aGUgZXh0cmFjdGVkIGtleXMgYXJlIGlkZW50aWNhbCBhbmQgd2UgY2FuCisgKiBkbyBh IEhPVCB1cGRhdGUuCisgKi8KK2Jvb2wKK2dpbmNvbXBhcmVkYXR1bXMoUmVsYXRpb24gaW5kZXgs IGludCBhdHRudW0sCisJCQkJIERhdHVtIG9sZF9kYXR1bSwgYm9vbCBvbGRfaXNudWxsLAorCQkJ CSBEYXR1bSBuZXdfZGF0dW0sIGJvb2wgbmV3X2lzbnVsbCkKK3sKKwlHaW5TdGF0ZQlnaW5zdGF0 ZTsKKwlEYXR1bQkgICAqb2xkX2tleXM7CisJRGF0dW0JICAgKm5ld19rZXlzOworCUdpbk51bGxD YXRlZ29yeSAqb2xkX2NhdGVnb3JpZXM7CisJR2luTnVsbENhdGVnb3J5ICpuZXdfY2F0ZWdvcmll czsKKwlpbnQzMgkJb2xkX25rZXlzOworCWludDMyCQluZXdfbmtleXM7CisJTWVtb3J5Q29udGV4 dCB0bXBjb250ZXh0OworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlib29sCQlyZXN1bHQg PSB0cnVlOworCisJLyogSGFuZGxlIE5VTEwgY2FzZXMgKi8KKwlpZiAob2xkX2lzbnVsbCAhPSBu ZXdfaXNudWxsKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKG9sZF9pc251bGwpCisJCXJldHVybiB0 cnVlOworCisJLyogQ3JlYXRlIHRlbXBvcmFyeSBjb250ZXh0IGZvciBleHRyYWN0aW9uIHdvcmsg Ki8KKwl0bXBjb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250 ZXh0LAorCQkJCQkJCQkJICAgIkdJTiBkYXR1bSBjb21wYXJpc29uIiwKKwkJCQkJCQkJCSAgIEFM TE9DU0VUX0RFRkFVTFRfU0laRVMpOworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNo VG8odG1wY29udGV4dCk7CisKKwlpbml0R2luU3RhdGUoJmdpbnN0YXRlLCBpbmRleCk7CisKKwkv KiBFeHRyYWN0IGtleXMgZnJvbSBib3RoIGRhdHVtcyB1c2luZyBleGlzdGluZyBHSU4gaW5mcmFz dHJ1Y3R1cmUgKi8KKwlvbGRfa2V5cyA9IGdpbkV4dHJhY3RFbnRyaWVzKCZnaW5zdGF0ZSwgYXR0 bnVtLCBvbGRfZGF0dW0sIG9sZF9pc251bGwsCisJCQkJCQkJCSAmb2xkX25rZXlzLCAmb2xkX2Nh dGVnb3JpZXMpOworCW5ld19rZXlzID0gZ2luRXh0cmFjdEVudHJpZXMoJmdpbnN0YXRlLCBhdHRu dW0sIG5ld19kYXR1bSwgbmV3X2lzbnVsbCwKKwkJCQkJCQkJICZuZXdfbmtleXMsICZuZXdfY2F0 ZWdvcmllcyk7CisKKwkvKiBEaWZmZXJlbnQgbnVtYmVyIG9mIGtleXMsIGRlZmluaXRlbHkgZGlm ZmVyZW50ICovCisJaWYgKG9sZF9ua2V5cyAhPSBuZXdfbmtleXMpCisJeworCQlyZXN1bHQgPSBm YWxzZTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCS8qCisJICogQ29tcGFyZSB0aGUgc29ydGVk IGtleSBhcnJheXMgZWxlbWVudC1ieS1lbGVtZW50LiBTaW5jZSBib3RoIGFycmF5cyBhcmUKKwkg KiBhbHJlYWR5IHNvcnRlZCBieSBnaW5FeHRyYWN0RW50cmllcywgd2UgY2FuIGRvIGEgc2ltcGxl IE8obikKKwkgKiBjb21wYXJpc29uLgorCSAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgb2xkX25r ZXlzOyBpKyspCisJeworCQlpZiAoZ2luQ29tcGFyZUVudHJpZXMoJmdpbnN0YXRlLCBhdHRudW0s CisJCQkJCQkJICBvbGRfa2V5c1tpXSwgb2xkX2NhdGVnb3JpZXNbaV0sCisJCQkJCQkJICBuZXdf a2V5c1tpXSwgbmV3X2NhdGVnb3JpZXNbaV0pICE9IDApCisJCXsKKwkJCXJlc3VsdCA9IGZhbHNl OworCQkJYnJlYWs7CisJCX0KKwl9CisKK2NsZWFudXA6CisJLyogQ2xlYW4gdXAgKi8KKwlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJTWVtb3J5Q29udGV4dERlbGV0ZSh0bXBj b250ZXh0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKaW5kZXgg NTMwNjFjODE5ZmIuLjkxMzcxZGZkYWNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aGFzaC9oYXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCkBAIC01MCw2 ICs1MCwxMCBAQCBzdGF0aWMgdm9pZCBoYXNoYnVpbGRDYWxsYmFjayhSZWxhdGlvbiBpbmRleCwK IAkJCQkJCQkgIHZvaWQgKnN0YXRlKTsKIAogCitzdGF0aWMgYm9vbCBoYXNoY29tcGFyZWRhdHVt cyhSZWxhdGlvbiBpbmRleCwgaW50IGF0dG51bSwKKwkJCQkJCQkgIERhdHVtIG9sZF9kYXR1bSwg Ym9vbCBvbGRfaXNudWxsLAorCQkJCQkJCSAgRGF0dW0gbmV3X2RhdHVtLCBib29sIG5ld19pc251 bGwpOworCiAvKgogICogSGFzaCBoYW5kbGVyIGZ1bmN0aW9uOiByZXR1cm4gSW5kZXhBbVJvdXRp bmUgd2l0aCBhY2Nlc3MgbWV0aG9kIHBhcmFtZXRlcnMKICAqIGFuZCBjYWxsYmFja3MuCkBAIC05 OCw2ICsxMDIsNyBAQCBoYXNoaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+ YW1wcm9wZXJ0eSA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWJ1aWxkcGhhc2VuYW1lID0gTlVMTDsK IAlhbXJvdXRpbmUtPmFtdmFsaWRhdGUgPSBoYXNodmFsaWRhdGU7CisJYW1yb3V0aW5lLT5hbWNv bXBhcmVkYXR1bXMgPSBoYXNoY29tcGFyZWRhdHVtczsKIAlhbXJvdXRpbmUtPmFtYWRqdXN0bWVt YmVycyA9IGhhc2hhZGp1c3RtZW1iZXJzOwogCWFtcm91dGluZS0+YW1iZWdpbnNjYW4gPSBoYXNo YmVnaW5zY2FuOwogCWFtcm91dGluZS0+YW1yZXNjYW4gPSBoYXNocmVzY2FuOwpAQCAtOTQ0LDMg Kzk0OSw0MiBAQCBoYXNodHJhbnNsYXRlY21wdHlwZShDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQg b3BmYW1pbHkpCiAJCXJldHVybiBIVEVxdWFsU3RyYXRlZ3lOdW1iZXI7CiAJcmV0dXJuIEludmFs aWRTdHJhdGVneTsKIH0KKworLyoKKyAqIGhhc2hjb21wYXJlZGF0dW1zIC0gQ29tcGFyZSBkYXR1 bXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgcHJvZHVjZSBpZGVudGljYWwga2V5cworICoKKyAqIFJl dHVybnMgdHJ1ZSBpZiB0aGUgaGFzaCB2YWx1ZXMgYXJlIGlkZW50aWNhbCAoaW5kZXggZG9lc24n dCBuZWVkIHVwZGF0ZSkuCisgKi8KK2Jvb2wKK2hhc2hjb21wYXJlZGF0dW1zKFJlbGF0aW9uIGlu ZGV4LCBpbnQgYXR0bnVtLAorCQkJCSAgRGF0dW0gb2xkX2RhdHVtLCBib29sIG9sZF9pc251bGws CisJCQkJICBEYXR1bSBuZXdfZGF0dW0sIGJvb2wgbmV3X2lzbnVsbCkKK3sKKwl1aW50MzIJCW9s ZF9oYXNoa2V5OworCXVpbnQzMgkJbmV3X2hhc2hrZXk7CisKKwkvKiBJZiBib3RoIGFyZSBOVUxM LCB0aGV5J3JlIGVxdWFsICovCisJaWYgKG9sZF9pc251bGwgJiYgbmV3X2lzbnVsbCkKKwkJcmV0 dXJuIHRydWU7CisKKwkvKiBJZiBOVUxMIHN0YXR1cyBkaWZmZXJzLCB0aGV5J3JlIG5vdCBlcXVh bCAqLworCWlmIChvbGRfaXNudWxsICE9IG5ld19pc251bGwpCisJCXJldHVybiBmYWxzZTsKKwor CS8qCisJICogX2hhc2hfZGF0dW0yaGFzaGtleSgpIGlzIHVzZWQgYmVjYXVzZSB3ZSBrbm93IHRo aXMgY2FuJ3QgYmUgYSBjcm9zcworCSAqIHR5cGUgY29tcGFyaXNvbi4KKwkgKi8KKwlvbGRfaGFz aGtleSA9IF9oYXNoX2RhdHVtMmhhc2hrZXkoaW5kZXgsIG9sZF9kYXR1bSk7CisJbmV3X2hhc2hr ZXkgPSBfaGFzaF9kYXR1bTJoYXNoa2V5KGluZGV4LCBuZXdfZGF0dW0pOworCisJLyoKKwkgKiBJ ZiBoYXNoIGtleXMgYXJlIGlkZW50aWNhbCwgdGhlIGluZGV4IGVudHJ5IHdvdWxkIGJlIHRoZSBz YW1lLiBSZXR1cm4KKwkgKiB0cnVlIHRvIGluZGljYXRlIG5vIGluZGV4IHVwZGF0ZSBuZWVkZWQu CisJICoKKwkgKiBOb3RlOiBIYXNoIGNvbGxpc2lvbnMgYXJlIHJhcmUgYnV0IHBvc3NpYmxlLiBJ ZiBoYXNoKHgpID09IGhhc2goeSkgYnV0CisJICogeCAhPSB5LCB0aGUgaGFzaCBpbmRleCBzdGls bCB0cmVhdHMgdGhlbSBpZGVudGljYWxseSwgc28gd2UgY29ycmVjdGx5CisJICogcmV0dXJuIHRy dWUuCisJICovCisJcmV0dXJuIChvbGRfaGFzaGtleSA9PSBuZXdfaGFzaGtleSk7Cit9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbS5jCmluZGV4IDMwODQ3ZGIxZmUzLi4zZTg4YmRiYmRhOCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvaGVhcGFtLmMKQEAgLTMyNzgsMTIgKzMyNzgsMTIgQEAgc2ltcGxlX2hlYXBf ZGVsZXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKnRpZCkKICAq IGdlbmVyYXRlZCBieSBhbm90aGVyIHRyYW5zYWN0aW9uKS4KICAqLwogVE1fUmVzdWx0Ci1oZWFw X3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlRGF0YSAqb2xkdHVwLAotCQkJSGVh cFR1cGxlIG5ld3R1cCwgQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3 YWl0LAotCQkJVE1fRmFpbHVyZURhdGEgKnRtZmQsIExvY2tUdXBsZU1vZGUgKmxvY2ttb2RlLCBC dWZmZXIgYnVmZmVyLAotCQkJUGFnZSBwYWdlLCBCbG9ja051bWJlciBibG9jaywgSXRlbUlkIGxw LCBCaXRtYXBzZXQgKmhvdF9hdHRycywKLQkJCUJpdG1hcHNldCAqc3VtX2F0dHJzLCBCaXRtYXBz ZXQgKnBrX2F0dHJzLCBCaXRtYXBzZXQgKnJpZF9hdHRycywKLQkJCUJpdG1hcHNldCAqbWl4X2F0 dHJzLCBCdWZmZXIgKnZtYnVmZmVyLAoraGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIEhl YXBUdXBsZURhdGEgKm9sZHR1cCwgSGVhcFR1cGxlIG5ld3R1cCwKKwkJCUNvbW1hbmRJZCBjaWQs IFNuYXBzaG90IGNyb3NzY2hlY2ssIGJvb2wgd2FpdCwKKwkJCVRNX0ZhaWx1cmVEYXRhICp0bWZk LCBMb2NrVHVwbGVNb2RlICpsb2NrbW9kZSwKKwkJCUJ1ZmZlciBidWZmZXIsIFBhZ2UgcGFnZSwg QmxvY2tOdW1iZXIgYmxvY2ssIEl0ZW1JZCBscCwKKwkJCUJpdG1hcHNldCAqaG90X2F0dHJzLCBC aXRtYXBzZXQgKnN1bV9hdHRycywgQml0bWFwc2V0ICpwa19hdHRycywKKwkJCUJpdG1hcHNldCAq cmlkX2F0dHJzLCBjb25zdCBCaXRtYXBzZXQgKm1peF9hdHRycywgQnVmZmVyICp2bWJ1ZmZlciwK IAkJCWJvb2wgcmVwX2lkX2tleV9yZXF1aXJlZCwgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2lu ZGV4ZXMpCiB7CiAJVE1fUmVzdWx0CXJlc3VsdDsKQEAgLTQzNTIsOCArNDM1Miw5IEBAIEhlYXBE ZXRlcm1pbmVDb2x1bW5zSW5mbyhSZWxhdGlvbiByZWxhdGlvbiwKICAqIFRoaXMgcm91dGluZSBt YXkgYmUgdXNlZCB0byB1cGRhdGUgYSB0dXBsZSB3aGVuIGNvbmN1cnJlbnQgdXBkYXRlcyBvZiB0 aGUKICAqIHRhcmdldCB0dXBsZSBhcmUgbm90IGV4cGVjdGVkIChmb3IgZXhhbXBsZSwgYmVjYXVz ZSB3ZSBoYXZlIGEgbG9jayBvbiB0aGUKICAqIHJlbGF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUg dHVwbGUpLiAgQW55IGZhaWx1cmUgaXMgcmVwb3J0ZWQgdmlhIGVyZXBvcnQoKS4KKyAqIFJldHVy bnMgdGhlIHNldCBvZiBtb2RpZmllZCBpbmRleGVkIGF0dHJpYnV0ZXMuCiAgKi8KLXZvaWQKK0Jp dG1hcHNldCAqCiBzaW1wbGVfaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0 ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIHR1cGxlLAogCQkJCSAgIFRVX1VwZGF0ZUlu ZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKQogewpAQCAtNDQ4Miw3ICs0NDgzLDcgQEAgc2ltcGxlX2hl YXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQs IEhlYXBUdXBsZSB0dXAKIAogCQllbG9nKEVSUk9SLCAidHVwbGUgY29uY3VycmVudGx5IGRlbGV0 ZWQiKTsKIAotCQlyZXR1cm47CisJCXJldHVybiBOVUxMOwogCX0KIAogCS8qCkBAIC00NTE1LDcg KzQ1MTYsNiBAQCBzaW1wbGVfaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0 ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIHR1cAogCWJtc19mcmVlKHN1bV9hdHRycyk7 CiAJYm1zX2ZyZWUocGtfYXR0cnMpOwogCWJtc19mcmVlKHJpZF9hdHRycyk7Ci0JYm1zX2ZyZWUo bWl4X2F0dHJzKTsKIAlibXNfZnJlZShpZHhfYXR0cnMpOwogCiAJc3dpdGNoIChyZXN1bHQpCkBA IC00NTQxLDYgKzQ1NDEsOCBAQCBzaW1wbGVfaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24s IGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIHR1cAogCQkJZWxvZyhFUlJP UiwgInVucmVjb2duaXplZCBoZWFwX3VwZGF0ZSBzdGF0dXM6ICV1IiwgcmVzdWx0KTsKIAkJCWJy ZWFrOwogCX0KKworCXJldHVybiBtaXhfYXR0cnM7CiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggMWNmOWExODc3NWQuLjc1Mjc4MDllYzA4IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTMxNSw5ICszMTUsMTIg QEAgaGVhcGFtX3R1cGxlX2RlbGV0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50ZXIgdGlk LCBDb21tYW5kSWQgY2lkLAogCiBzdGF0aWMgVE1fUmVzdWx0CiBoZWFwYW1fdHVwbGVfdXBkYXRl KFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciBvdGlkLCBUdXBsZVRhYmxlU2xvdCAqc2xv dCwKLQkJCQkJQ29tbWFuZElkIGNpZCwgU25hcHNob3Qgc25hcHNob3QsIFNuYXBzaG90IGNyb3Nz Y2hlY2ssCi0JCQkJCWJvb2wgd2FpdCwgVE1fRmFpbHVyZURhdGEgKnRtZmQsCi0JCQkJCUxvY2tU dXBsZU1vZGUgKmxvY2ttb2RlLCBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykKKwkJ CQkJQ29tbWFuZElkIGNpZCwgU25hcHNob3Qgc25hcHNob3QsCisJCQkJCVNuYXBzaG90IGNyb3Nz Y2hlY2ssIGJvb2wgd2FpdCwKKwkJCQkJVE1fRmFpbHVyZURhdGEgKnRtZmQsCisJCQkJCUxvY2tU dXBsZU1vZGUgKmxvY2ttb2RlLAorCQkJCQljb25zdCBCaXRtYXBzZXQgKm1peF9hdHRycywKKwkJ CQkJVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpCiB7CiAJYm9vbAkJcmVwX2lkX2tl eV9yZXF1aXJlZCA9IGZhbHNlOwogCWJvb2wJCXNob3VsZEZyZWUgPSB0cnVlOwpAQCAtMzMyLDcg KzMzNSw2IEBAIGhlYXBhbV90dXBsZV91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2lu dGVyIG90aWQsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJICAgKnN1bV9hdHRycywKIAkJCSAg ICpwa19hdHRycywKIAkJCSAgICpyaWRfYXR0cnMsCi0JCQkgICAqbWl4X2F0dHJzLAogCQkJICAg KmlkeF9hdHRyczsKIAlUTV9SZXN1bHQJcmVzdWx0OwogCkBAIC00MDUsMjUgKzQwNyw2NiBAQCBo ZWFwYW1fdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciBvdGlkLCBU dXBsZVRhYmxlU2xvdCAqc2xvdCwKIAogCUFzc2VydChJdGVtSWRJc05vcm1hbChscCkpOwogCi0J LyoKLQkgKiBQYXJ0aWFsbHkgY29uc3RydWN0IHRoZSBvbGR0dXAgZm9yIEhlYXBEZXRlcm1pbmVD b2x1bW5zSW5mbyB0byB3b3JrIGFuZAotCSAqIHRoZW4gcGFzcyB0aGF0IG9uIHRvIGhlYXBfdXBk YXRlLgotCSAqLwogCW9sZHR1cC50X3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlv bik7CiAJb2xkdHVwLnRfZGF0YSA9IChIZWFwVHVwbGVIZWFkZXIpIFBhZ2VHZXRJdGVtKHBhZ2Us IGxwKTsKIAlvbGR0dXAudF9sZW4gPSBJdGVtSWRHZXRMZW5ndGgobHApOwogCW9sZHR1cC50X3Nl bGYgPSAqb3RpZDsKIAotCW1peF9hdHRycyA9IEhlYXBEZXRlcm1pbmVDb2x1bW5zSW5mbyhyZWxh dGlvbiwgaWR4X2F0dHJzLCByaWRfYXR0cnMsCi0JCQkJCQkJCQkJICZvbGR0dXAsIHR1cGxlLCAm cmVwX2lkX2tleV9yZXF1aXJlZCk7Ci0KIAkvKgotCSAqIFdlJ2xsIG5lZWQgdG8gV0FMIGxvZyB0 aGUgcmVwbGljYSBpZGVudGl0eSBhdHRyaWJ1dGVzIGlmIGVpdGhlciB0aGV5Ci0JICogb3Zlcmxh cCB3aXRoIHRoZSBtb2RpZmllZCBpbmRleGVkIGF0dHJpYnV0ZXMgb3IsIGFzIHdlJ3ZlIGNoZWNr ZWQgZm9yCi0JICoganVzdCBub3cgaW4gSGVhcERldGVybWluZUNvbHVtbnNJbmZvLCB0aGV5IHdl cmUgdW5tb2RpZmllZCBleHRlcm5hbAotCSAqIGluZGV4ZWQgYXR0cmlidXRlcy4KKwkgKiBXZSds bCBuZWVkIHRvIGluY2x1ZGUgdGhlIHJlcGxpY2EgaWRlbnRpdHkga2V5IHdoZW4gZWl0aGVyIHRo ZSBpZGVudGl0eQorCSAqIGtleSBhdHRyaWJ1dGVzIG92ZXJsYXAgd2l0aCB0aGUgbW9kaWZpZWQg aW5kZXggYXR0cmlidXRlcyBvciB3aGVuIHRoZQorCSAqIHJlcGxpY2EgaWRlbnRpdHkgYXR0cmli dXRlcyBhcmUgc3RvcmVkIGV4dGVybmFsbHkuICBUaGlzIGlzIHJlcXVpcmVkCisJICogYmVjYXVz ZSBmb3Igc3VjaCBhdHRyaWJ1dGVzIHRoZSBmbGF0dGVuZWQgdmFsdWUgd29uJ3QgYmUgV0FMIGxv Z2dlZCBhcworCSAqIHBhcnQgb2YgdGhlIG5ldyB0dXBsZSBzbyB3ZSBtdXN0IGRldGVybWluZSBp ZiB3ZSBuZWVkIHRvIGV4dHJhY3QgYW5kCisJICogaW5jbHVkZSB0aGVtIGFzIHBhcnQgb2YgdGhl IG9sZF9rZXlfdHVwbGUgKHNlZSBFeHRyYWN0UmVwbGljYUlkZW50aXR5KS4KIAkgKi8KLQlyZXBf aWRfa2V5X3JlcXVpcmVkID0gcmVwX2lkX2tleV9yZXF1aXJlZCB8fCBibXNfb3ZlcmxhcChtaXhf YXR0cnMsIHJpZF9hdHRycyk7CisJcmVwX2lkX2tleV9yZXF1aXJlZCA9IGJtc19vdmVybGFwKG1p eF9hdHRycywgcmlkX2F0dHJzKTsKKwlpZiAoIXJlcF9pZF9rZXlfcmVxdWlyZWQpCisJeworCQlC aXRtYXBzZXQgICphdHRyczsKKwkJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2Ny KHJlbGF0aW9uKTsKKwkJaW50CQkJYXR0aWR4ID0gLTE7CisKKwkJLyoKKwkJICogV2UgZG9uJ3Qg b3duIGlkeF9hdHRycyBzbyB3ZSdsbCBjb3B5IGl0IGFuZCByZW1vdmUgdGhlIG1vZGlmaWVkIHNl dAorCQkgKiB0byByZWR1Y2UgdGhlIGF0dHJpYnV0ZXMgd2UgbmVlZCB0byB0ZXN0IGluIHRoZSB3 aGlsZSBsb29wIGFuZAorCQkgKiBhdm9pZCBhIHR3byBicmFuY2hlcyBpbiB0aGUgbG9vcC4KKwkJ ICovCisJCWF0dHJzID0gYm1zX2RpZmZlcmVuY2UoaWR4X2F0dHJzLCBtaXhfYXR0cnMpOworCQlh dHRycyA9IGJtc19pbnRfbWVtYmVycyhhdHRycywgcmlkX2F0dHJzKTsKKworCQl3aGlsZSAoKGF0 dGlkeCA9IGJtc19uZXh0X21lbWJlcihhdHRycywgYXR0aWR4KSkgPj0gMCkKKwkJeworCQkJLyoK KwkJCSAqIGF0dGlkeCBpcyB6ZXJvLWJhc2VkLCBhdHRybnVtIGlzIHRoZSBub3JtYWwgYXR0cmli dXRlIG51bWJlcgorCQkJICovCisJCQlBdHRyTnVtYmVyCWF0dHJudW0gPSBhdHRpZHggKyBGaXJz dExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyOworCQkJRGF0dW0JCXZhbHVlOworCQkJYm9v bAkJaXNudWxsOworCisJCQkvKgorCQkJICogU3lzdGVtIGF0dHJpYnV0ZXMgYXJlIG5vdCBhZGRl ZCBpbnRvIGludGVyZXN0aW5nX2F0dHJzIGluCisJCQkgKiByZWxjYWNoZQorCQkJICovCisJCQlB c3NlcnQoYXR0cm51bSA+IDApOworCisJCQl2YWx1ZSA9IGhlYXBfZ2V0YXR0cigmb2xkdHVwLCBh dHRybnVtLCB0dXBkZXNjLCAmaXNudWxsKTsKKworCQkJLyogTm8gbmVlZCB0byBjaGVjayBhdHRy aWJ1dGVzIHRoYXQgY2FuJ3QgYmUgc3RvcmVkIGV4dGVybmFsbHkgKi8KKwkJCWlmIChpc251bGwg fHwKKwkJCQlUdXBsZURlc2NDb21wYWN0QXR0cih0dXBkZXNjLCBhdHRybnVtIC0gMSktPmF0dGxl biAhPSAtMSkKKwkJCQljb250aW51ZTsKKworCQkJLyogQ2hlY2sgaWYgdGhlIG9sZCB0dXBsZSdz IGF0dHJpYnV0ZSBpcyBzdG9yZWQgZXh0ZXJuYWxseSAqLworCQkJaWYgKFZBUkFUVF9JU19FWFRF Uk5BTCgoc3RydWN0IHZhcmxlbmEgKikgRGF0dW1HZXRQb2ludGVyKHZhbHVlKSkpCisJCQl7CisJ CQkJcmVwX2lkX2tleV9yZXF1aXJlZCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwor CQlibXNfZnJlZShhdHRycyk7CisJfQogCiAJLyogVXBkYXRlIHRoZSB0dXBsZSB3aXRoIHRhYmxl IG9pZCAqLwogCXNsb3QtPnR0c190YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24p OwpAQCAtNDM3LDcgKzQ4MCw2IEBAIGhlYXBhbV90dXBsZV91cGRhdGUoUmVsYXRpb24gcmVsYXRp b24sIEl0ZW1Qb2ludGVyIG90aWQsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCWJtc19mcmVlKHN1 bV9hdHRycyk7CiAJYm1zX2ZyZWUocGtfYXR0cnMpOwogCWJtc19mcmVlKHJpZF9hdHRycyk7Ci0J Ym1zX2ZyZWUobWl4X2F0dHJzKTsKIAlibXNfZnJlZShpZHhfYXR0cnMpOwogCiAJSXRlbVBvaW50 ZXJDb3B5KCZ0dXBsZS0+dF9zZWxmLCAmc2xvdC0+dHRzX3RpZCk7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRyZWUuYwppbmRleCBmZGZmOTYwYzEzMC4uZTQzNWYwZDVkYjQgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRyZWUuYwpAQCAtMTU1LDYgKzE1NSw3IEBAIGJ0aGFuZGxlcihQR19GVU5DVElP Tl9BUkdTKQogCWFtcm91dGluZS0+YW1wcm9wZXJ0eSA9IGJ0cHJvcGVydHk7CiAJYW1yb3V0aW5l LT5hbWJ1aWxkcGhhc2VuYW1lID0gYnRidWlsZHBoYXNlbmFtZTsKIAlhbXJvdXRpbmUtPmFtdmFs aWRhdGUgPSBidHZhbGlkYXRlOworCWFtcm91dGluZS0+YW1jb21wYXJlZGF0dW1zID0gTlVMTDsK IAlhbXJvdXRpbmUtPmFtYWRqdXN0bWVtYmVycyA9IGJ0YWRqdXN0bWVtYmVyczsKIAlhbXJvdXRp bmUtPmFtYmVnaW5zY2FuID0gYnRiZWdpbnNjYW47CiAJYW1yb3V0aW5lLT5hbXJlc2NhbiA9IGJ0 cmVzY2FuOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKaW5kZXggMWUwOTlmZWJkYzguLjE1 ZjBkZDdhYTI4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKQEAgLTM2Nyw2ICszNjcs NyBAQCB2b2lkCiBzaW1wbGVfdGFibGVfdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbCwgSXRlbVBv aW50ZXIgb3RpZCwKIAkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCQkgIFNuYXBz aG90IHNuYXBzaG90LAorCQkJCQkJICBjb25zdCBCaXRtYXBzZXQgKm1peF9hdHRycywKIAkJCQkJ CSAgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpCiB7CiAJVE1fUmVzdWx0CXJlc3Vs dDsKQEAgLTM3Nyw3ICszNzgsOSBAQCBzaW1wbGVfdGFibGVfdHVwbGVfdXBkYXRlKFJlbGF0aW9u IHJlbCwgSXRlbVBvaW50ZXIgb3RpZCwKIAkJCQkJCQkJR2V0Q3VycmVudENvbW1hbmRJZCh0cnVl KSwKIAkJCQkJCQkJc25hcHNob3QsIEludmFsaWRTbmFwc2hvdCwKIAkJCQkJCQkJdHJ1ZSAvKiB3 YWl0IGZvciBjb21taXQgKi8gLAotCQkJCQkJCQkmdG1mZCwgJmxvY2ttb2RlLCB1cGRhdGVfaW5k ZXhlcyk7CisJCQkJCQkJCSZ0bWZkLCAmbG9ja21vZGUsCisJCQkJCQkJCW1peF9hdHRycywKKwkJ CQkJCQkJdXBkYXRlX2luZGV4ZXMpOwogCiAJc3dpdGNoIChyZXN1bHQpCiAJewpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jIGIvc3JjL2JhY2tlbmQvYm9vdHN0 cmFwL2Jvb3RzdHJhcC5jCmluZGV4IGZjODYzOGMxYjYxLi4zMjljMTEwZDBiZiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jCisrKyBiL3NyYy9iYWNrZW5kL2Jv b3RzdHJhcC9ib290c3RyYXAuYwpAQCAtOTYxLDEwICs5NjEsMTggQEAgaW5kZXhfcmVnaXN0ZXIo T2lkIGhlYXAsCiAJbmV3aW5kLT5pbF9pbmZvLT5paV9FeHByZXNzaW9ucyA9CiAJCWNvcHlPYmpl Y3QoaW5kZXhJbmZvLT5paV9FeHByZXNzaW9ucyk7CiAJbmV3aW5kLT5pbF9pbmZvLT5paV9FeHBy ZXNzaW9uc1N0YXRlID0gTklMOworCS8qIGV4cHJlc3Npb24gYXR0cnMgd2lsbCBsaWtlbHkgYmUg bnVsbCwgYnV0IG1heSBhcyB3ZWxsIGNvcHkgaXQgKi8KKwluZXdpbmQtPmlsX2luZm8tPmlpX0V4 cHJlc3Npb25zQXR0cnMgPQorCQljb3B5T2JqZWN0KGluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnNB dHRycyk7CiAJLyogcHJlZGljYXRlIHdpbGwgbGlrZWx5IGJlIG51bGwsIGJ1dCBtYXkgYXMgd2Vs bCBjb3B5IGl0ICovCiAJbmV3aW5kLT5pbF9pbmZvLT5paV9QcmVkaWNhdGUgPQogCQljb3B5T2Jq ZWN0KGluZGV4SW5mby0+aWlfUHJlZGljYXRlKTsKIAluZXdpbmQtPmlsX2luZm8tPmlpX1ByZWRp Y2F0ZVN0YXRlID0gTlVMTDsKKwkvKiBwcmVkaWNhdGUgYXR0cnMgd2lsbCBsaWtlbHkgYmUgbnVs bCwgYnV0IG1heSBhcyB3ZWxsIGNvcHkgaXQgKi8KKwluZXdpbmQtPmlsX2luZm8tPmlpX1ByZWRp Y2F0ZUF0dHJzID0KKwkJY29weU9iamVjdChpbmRleEluZm8tPmlpX1ByZWRpY2F0ZUF0dHJzKTsK KwluZXdpbmQtPmlsX2luZm8tPmlpX0NoZWNrZWRQcmVkaWNhdGUgPSBmYWxzZTsKKwluZXdpbmQt PmlsX2luZm8tPmlpX1ByZWRpY2F0ZVNhdGlzZmllZCA9IGZhbHNlOwogCS8qIG5vIGV4Y2x1c2lv biBjb25zdHJhaW50cyBhdCBib290c3RyYXAgdGltZSwgc28gbm8gbmVlZCB0byBjb3B5ICovCiAJ QXNzZXJ0KGluZGV4SW5mby0+aWlfRXhjbHVzaW9uT3BzID09IE5VTEwpOwogCUFzc2VydChpbmRl eEluZm8tPmlpX0V4Y2x1c2lvblByb2NzID09IE5VTEwpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY2F0YWxvZy9pbmRleC5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCmluZGV4IDVk OWRiMTY3ZTU5Li5lODhkYjdlOTE5YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9p bmRleC5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwpAQCAtMjcsNiArMjcsNyBA QAogI2luY2x1ZGUgImFjY2Vzcy9oZWFwYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvbXVsdGl4YWN0 LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKKyNpbmNsdWRlICJhY2Nlc3Mvc3lzYXR0 ci5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RvYXN0 X2NvbXByZXNzaW9uLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKQEAgLTU4LDYgKzU5 LDcgQEAKICNpbmNsdWRlICJjb21tYW5kcy90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Iv ZXhlY3V0b3IuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9leGVj bm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJub2Rlcy9u b2RlRnVuY3MuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCkBAIC0yNDE0LDYg KzI0MTYsNTggQEAgaW5kZXhfZHJvcChPaWQgaW5kZXhJZCwgYm9vbCBjb25jdXJyZW50LCBib29s IGNvbmN1cnJlbnRfbG9ja19tb2RlKQogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKKy8qIC0tLS0tLS0tLS0t LS0tLS0KKyAqIEJ1aWxkVXBkYXRlSW5kZXhJbmZvCisgKgorICogRm9yIGV4cHJlc3Npb24gaW5k ZXhlcyB1cGRhdGVzIG1heSBub3QgY2hhbmdlIHRoZSBpbmRleGVkIHZhbHVlIGFsbG93aW5nCisg KiBmb3IgYSBIT1QgdXBkYXRlLiAgQWRkIGluZm9ybWF0aW9uIHRvIHRoZSBJbmRleEluZm8gdG8g YWxsb3cgZm9yIGNoZWNraW5nCisgKiBpZiB0aGUgaW5kZXhlZCB2YWx1ZSBoYXMgY2hhbmdlZC4K KyAqCisgKiBEbyB0aGlzIHByb2Nlc3NpbmcgaGVyZSByYXRoZXIgdGhhbiBpbiBCdWlsZEluZGV4 SW5mbygpIHRvIG5vdCBpbmN1ciB0aGUKKyAqIG92ZXJoZWFkIGluIHRoZSBjb21tb24gbm9uLWV4 cHJlc3Npb24gY2FzZXMuCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQKK0J1aWxkVXBk YXRlSW5kZXhJbmZvKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8pCit7CisJZm9yIChpbnQg aiA9IDA7IGogPCByZXN1bHRSZWxJbmZvLT5yaV9OdW1JbmRpY2VzOyBqKyspCisJeworCQlpbnQJ CQlpOworCQlpbnQJCQlpbmRuYXR0czsKKwkJQml0bWFwc2V0ICAqYXR0cnMgPSBOVUxMOworCQlJ bmRleEluZm8gICppaSA9IHJlc3VsdFJlbEluZm8tPnJpX0luZGV4UmVsYXRpb25JbmZvW2pdOwor CisJCWluZG5hdHRzID0gaWktPmlpX051bUluZGV4QXR0cnM7CisKKwkJLyogQ29sbGVjdCBrZXkg YXR0cmlidXRlcyB1c2VkIGJ5IHRoZSBpbmRleCwga2V5IGFuZCBpbmNsdWRpbmcgKi8KKwkJZm9y IChpID0gMDsgaSA8IGluZG5hdHRzOyBpKyspCisJCXsKKwkJCUF0dHJOdW1iZXIJYXR0bnVtID0g aWktPmlpX0luZGV4QXR0ck51bWJlcnNbaV07CisKKwkJCWlmIChhdHRudW0gIT0gMCkKKwkJCQlh dHRycyA9IGJtc19hZGRfbWVtYmVyKGF0dHJzLCBhdHRudW0gLSBGaXJzdExvd0ludmFsaWRIZWFw QXR0cmlidXRlTnVtYmVyKTsKKwkJfQorCisJCS8qIENvbGxlY3QgYXR0cmlidXRlcyB1c2VkIGlu IHRoZSBleHByZXNzaW9uICovCisJCWlmIChpaS0+aWlfRXhwcmVzc2lvbnMpCisJCQlwdWxsX3Zh cmF0dG5vcygoTm9kZSAqKSBpaS0+aWlfRXhwcmVzc2lvbnMsCisJCQkJCQkgICByZXN1bHRSZWxJ bmZvLT5yaV9SYW5nZVRhYmxlSW5kZXgsCisJCQkJCQkgICAmaWktPmlpX0V4cHJlc3Npb25zQXR0 cnMpOworCisJCS8qIENvbGxlY3QgYXR0cmlidXRlcyB1c2VkIGluIHRoZSBwcmVkaWNhdGUgKi8K KwkJaWYgKGlpLT5paV9QcmVkaWNhdGUpCisJCQlwdWxsX3ZhcmF0dG5vcygoTm9kZSAqKSBpaS0+ aWlfUHJlZGljYXRlLAorCQkJCQkJICAgcmVzdWx0UmVsSW5mby0+cmlfUmFuZ2VUYWJsZUluZGV4 LAorCQkJCQkJICAgJmlpLT5paV9QcmVkaWNhdGVBdHRycyk7CisKKwkJLyogQ29tYmluZSBrZXks IGluY2x1ZGluZywgYW5kIGV4cHJlc3Npb24gYXR0cmlidXRlcywgYnV0IG5vdCBwcmVkaWNhdGUg Ki8KKwkJaWktPmlpX0luZGV4ZWRBdHRycyA9IGJtc191bmlvbihhdHRycywgaWktPmlpX0V4cHJl c3Npb25zQXR0cnMpOworCisJCS8qIEFsbCBpbmRleGVzIHNob3VsZCBpbmRleCAqc29tZXRoaW5n KiEgKi8KKwkJQXNzZXJ0KCFibXNfaXNfZW1wdHkoaWktPmlpX0luZGV4ZWRBdHRycykpOworCX0K K30KKwogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCUJ1aWxkSW5kZXhJbmZvCiAgKgkJCUNvbnN0 cnVjdCBhbiBJbmRleEluZm8gcmVjb3JkIGZvciBhbiBvcGVuIGluZGV4CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jYXRhbG9nL2luZGV4aW5nLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4 aW5nLmMKaW5kZXggMDA0YzUxMjEwMDAuLmEzNjFjMjE1NDkwIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jYXRhbG9nL2luZGV4aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleGlu Zy5jCkBAIC0xMDIsNyArMTAyLDcgQEAgQ2F0YWxvZ0luZGV4SW5zZXJ0KENhdGFsb2dJbmRleFN0 YXRlIGluZHN0YXRlLCBIZWFwVHVwbGUgaGVhcFR1cGxlLAogCSAqIEdldCBpbmZvcm1hdGlvbiBm cm9tIHRoZSBzdGF0ZSBzdHJ1Y3R1cmUuICBGYWxsIG91dCBpZiBub3RoaW5nIHRvIGRvLgogCSAq LwogCW51bUluZGV4ZXMgPSBpbmRzdGF0ZS0+cmlfTnVtSW5kaWNlczsKLQlpZiAobnVtSW5kZXhl cyA9PSAwKQorCWlmIChudW1JbmRleGVzID09IDAgfHwgdXBkYXRlSW5kZXhlcyA9PSBUVV9Ob25l KQogCQlyZXR1cm47CiAJcmVsYXRpb25EZXNjcyA9IGluZHN0YXRlLT5yaV9JbmRleFJlbGF0aW9u RGVzY3M7CiAJaW5kZXhJbmZvQXJyYXkgPSBpbmRzdGF0ZS0+cmlfSW5kZXhSZWxhdGlvbkluZm87 CkBAIC0zMTQsMTUgKzMxNCwxOCBAQCBDYXRhbG9nVHVwbGVVcGRhdGUoUmVsYXRpb24gaGVhcFJl bCwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgdHVwKQogewogCUNhdGFs b2dJbmRleFN0YXRlIGluZHN0YXRlOwogCVRVX1VwZGF0ZUluZGV4ZXMgdXBkYXRlSW5kZXhlcyA9 IFRVX0FsbDsKKwlCaXRtYXBzZXQgICp1cGRhdGVkQXR0cnM7CiAKIAlDYXRhbG9nVHVwbGVDaGVj a0NvbnN0cmFpbnRzKGhlYXBSZWwsIHR1cCk7CiAKIAlpbmRzdGF0ZSA9IENhdGFsb2dPcGVuSW5k ZXhlcyhoZWFwUmVsKTsKIAotCXNpbXBsZV9oZWFwX3VwZGF0ZShoZWFwUmVsLCBvdGlkLCB0dXAs ICZ1cGRhdGVJbmRleGVzKTsKLQorCXVwZGF0ZWRBdHRycyA9IHNpbXBsZV9oZWFwX3VwZGF0ZSho ZWFwUmVsLCBvdGlkLCB0dXAsICZ1cGRhdGVJbmRleGVzKTsKKwkoKFJlc3VsdFJlbEluZm8gKikg aW5kc3RhdGUpLT5yaV9DaGFuZ2VkSW5kZXhlZENvbHMgPSB1cGRhdGVkQXR0cnM7CiAJQ2F0YWxv Z0luZGV4SW5zZXJ0KGluZHN0YXRlLCB0dXAsIHVwZGF0ZUluZGV4ZXMpOworCiAJQ2F0YWxvZ0Ns b3NlSW5kZXhlcyhpbmRzdGF0ZSk7CisJYm1zX2ZyZWUodXBkYXRlZEF0dHJzKTsKIH0KIAogLyoK QEAgLTMzOCwxMiArMzQxLDE1IEBAIENhdGFsb2dUdXBsZVVwZGF0ZVdpdGhJbmZvKFJlbGF0aW9u IGhlYXBSZWwsIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1CiAJCQkJCQkgICBD YXRhbG9nSW5kZXhTdGF0ZSBpbmRzdGF0ZSkKIHsKIAlUVV9VcGRhdGVJbmRleGVzIHVwZGF0ZUlu ZGV4ZXMgPSBUVV9BbGw7CisJQml0bWFwc2V0ICAqdXBkYXRlZEF0dHJzOwogCiAJQ2F0YWxvZ1R1 cGxlQ2hlY2tDb25zdHJhaW50cyhoZWFwUmVsLCB0dXApOwogCi0Jc2ltcGxlX2hlYXBfdXBkYXRl KGhlYXBSZWwsIG90aWQsIHR1cCwgJnVwZGF0ZUluZGV4ZXMpOwotCisJdXBkYXRlZEF0dHJzID0g c2ltcGxlX2hlYXBfdXBkYXRlKGhlYXBSZWwsIG90aWQsIHR1cCwgJnVwZGF0ZUluZGV4ZXMpOwor CSgoUmVzdWx0UmVsSW5mbyAqKSBpbmRzdGF0ZSktPnJpX0NoYW5nZWRJbmRleGVkQ29scyA9IHVw ZGF0ZWRBdHRyczsKIAlDYXRhbG9nSW5kZXhJbnNlcnQoaW5kc3RhdGUsIHR1cCwgdXBkYXRlSW5k ZXhlcyk7CisJKChSZXN1bHRSZWxJbmZvICopIGluZHN0YXRlKS0+cmlfQ2hhbmdlZEluZGV4ZWRD b2xzID0gTlVMTDsKKwlibXNfZnJlZSh1cGRhdGVkQXR0cnMpOwogfQogCiAvKgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy90 b2FzdGluZy5jCmluZGV4IDg3NGE4ZmM4OWFkLi45ZDdjYjQ0MzhkNSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9h c3RpbmcuYwpAQCAtMjkyLDggKzI5MiwxMiBAQCBjcmVhdGVfdG9hc3RfdGFibGUoUmVsYXRpb24g cmVsLCBPaWQgdG9hc3RPaWQsIE9pZCB0b2FzdEluZGV4T2lkLAogCWluZGV4SW5mby0+aWlfSW5k ZXhBdHRyTnVtYmVyc1sxXSA9IDI7CiAJaW5kZXhJbmZvLT5paV9FeHByZXNzaW9ucyA9IE5JTDsK IAlpbmRleEluZm8tPmlpX0V4cHJlc3Npb25zU3RhdGUgPSBOSUw7CisJaW5kZXhJbmZvLT5paV9F eHByZXNzaW9uc0F0dHJzID0gTlVMTDsKIAlpbmRleEluZm8tPmlpX1ByZWRpY2F0ZSA9IE5JTDsK IAlpbmRleEluZm8tPmlpX1ByZWRpY2F0ZVN0YXRlID0gTlVMTDsKKwlpbmRleEluZm8tPmlpX1By ZWRpY2F0ZUF0dHJzID0gTlVMTDsKKwlpbmRleEluZm8tPmlpX0NoZWNrZWRQcmVkaWNhdGUgPSBm YWxzZTsKKwlpbmRleEluZm8tPmlpX1ByZWRpY2F0ZVNhdGlzZmllZCA9IGZhbHNlOwogCWluZGV4 SW5mby0+aWlfRXhjbHVzaW9uT3BzID0gTlVMTDsKIAlpbmRleEluZm8tPmlpX0V4Y2x1c2lvblBy b2NzID0gTlVMTDsKIAlpbmRleEluZm8tPmlpX0V4Y2x1c2lvblN0cmF0cyA9IE5VTEw7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCmluZGV4IGRkMzIzYzliOWZkLi4wNWFlN2ViOWY2NSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKKysrIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKQEAgLTEwOSwxMSArMTA5LDE1IEBACiAj aW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNp bmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgorI2luY2x1ZGUgImFjY2Vzcy9zeXNhdHRyLmgiCiAj aW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKICNpbmNsdWRlICJjYXRhbG9nL2luZGV4LmgiCiAjaW5j bHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKKyNpbmNsdWRlICJub2Rlcy9iaXRtYXBzZXQuaCIK KyNpbmNsdWRlICJub2Rlcy9leGVjbm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3Mu aCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKKyNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgog I2luY2x1ZGUgInV0aWxzL2luamVjdGlvbl9wb2ludC5oIgogI2luY2x1ZGUgInV0aWxzL211bHRp cmFuZ2V0eXBlcy5oIgogI2luY2x1ZGUgInV0aWxzL3JhbmdldHlwZXMuaCIKQEAgLTMyNCw4ICsz MjgsOCBAQCBFeGVjSW5zZXJ0SW5kZXhUdXBsZXMoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5m bywKIAlSZWxhdGlvbgloZWFwUmVsYXRpb247CiAJSW5kZXhJbmZvICoqaW5kZXhJbmZvQXJyYXk7 CiAJRXhwckNvbnRleHQgKmVjb250ZXh0OwotCURhdHVtCQl2YWx1ZXNbSU5ERVhfTUFYX0tFWVNd OwotCWJvb2wJCWlzbnVsbFtJTkRFWF9NQVhfS0VZU107CisJRGF0dW0JCWxvY192YWx1ZXNbSU5E RVhfTUFYX0tFWVNdOworCWJvb2wJCWxvY19pc251bGxbSU5ERVhfTUFYX0tFWVNdOwogCiAJQXNz ZXJ0KEl0ZW1Qb2ludGVySXNWYWxpZCh0dXBsZWlkKSk7CiAKQEAgLTM0OSwxMyArMzUzLDEzIEBA IEV4ZWNJbnNlcnRJbmRleFR1cGxlcyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCS8q IEFycmFuZ2UgZm9yIGVjb250ZXh0J3Mgc2NhbiB0dXBsZSB0byBiZSB0aGUgdHVwbGUgdW5kZXIg dGVzdCAqLwogCWVjb250ZXh0LT5lY3h0X3NjYW50dXBsZSA9IHNsb3Q7CiAKLQkvKgotCSAqIGZv ciBlYWNoIGluZGV4LCBmb3JtIGFuZCBpbnNlcnQgdGhlIGluZGV4IHR1cGxlCi0JICovCisJLyog SW5zZXJ0IGludG8gZWFjaCBpbmRleCB0aGF0IG5lZWRzIHVwZGF0aW5nICovCiAJZm9yIChpID0g MDsgaSA8IG51bUluZGljZXM7IGkrKykKIAl7CiAJCVJlbGF0aW9uCWluZGV4UmVsYXRpb24gPSBy ZWxhdGlvbkRlc2NzW2ldOwogCQlJbmRleEluZm8gICppbmRleEluZm87CisJCURhdHVtCSAgICp2 YWx1ZXM7CisJCWJvb2wJICAgKmlzbnVsbDsKIAkJYm9vbAkJYXBwbHlOb0R1cEVycjsKIAkJSW5k ZXhVbmlxdWVDaGVjayBjaGVja1VuaXF1ZTsKIAkJYm9vbAkJaW5kZXhVbmNoYW5nZWQ7CkBAIC0z NzIsNyArMzc2LDcgQEAgRXhlY0luc2VydEluZGV4VHVwbGVzKFJlc3VsdFJlbEluZm8gKnJlc3Vs dFJlbEluZm8sCiAKIAkJLyoKIAkJICogU2tpcCBwcm9jZXNzaW5nIG9mIG5vbi1zdW1tYXJpemlu ZyBpbmRleGVzIGlmIHdlIG9ubHkgdXBkYXRlCi0JCSAqIHN1bW1hcml6aW5nIGluZGV4ZXMKKwkJ ICogc3VtbWFyaXppbmcgaW5kZXhlcyBvciBpZiB0aGlzIGluZGV4IGlzIHVuY2hhbmdlZC4KIAkJ ICovCiAJCWlmIChvbmx5U3VtbWFyaXppbmcgJiYgIWluZGV4SW5mby0+aWlfU3VtbWFyaXppbmcp CiAJCQljb250aW51ZTsKQEAgLTM5Myw4ICszOTcsMTUgQEAgRXhlY0luc2VydEluZGV4VHVwbGVz KFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJCQkJaW5kZXhJbmZvLT5paV9QcmVkaWNh dGVTdGF0ZSA9IHByZWRpY2F0ZTsKIAkJCX0KIAorCQkJLyogQ2hlY2sgdGhlIGluZGV4IHByZWRp Y2F0ZSBpZiB3ZSBoYXZlbid0IGRvbmUgc28gZWFybGllciBvbiAqLworCQkJaWYgKCFpbmRleElu Zm8tPmlpX0NoZWNrZWRQcmVkaWNhdGUpCisJCQl7CisJCQkJaW5kZXhJbmZvLT5paV9QcmVkaWNh dGVTYXRpc2ZpZWQgPSBFeGVjUXVhbChwcmVkaWNhdGUsIGVjb250ZXh0KTsKKwkJCQlpbmRleElu Zm8tPmlpX0NoZWNrZWRQcmVkaWNhdGUgPSB0cnVlOworCQkJfQorCiAJCQkvKiBTa2lwIHRoaXMg aW5kZXgtdXBkYXRlIGlmIHRoZSBwcmVkaWNhdGUgaXNuJ3Qgc2F0aXNmaWVkICovCi0JCQlpZiAo IUV4ZWNRdWFsKHByZWRpY2F0ZSwgZWNvbnRleHQpKQorCQkJaWYgKCFpbmRleEluZm8tPmlpX1By ZWRpY2F0ZVNhdGlzZmllZCkKIAkJCQljb250aW51ZTsKIAkJfQogCkBAIC00MDIsMTEgKzQxMywx MCBAQCBFeGVjSW5zZXJ0SW5kZXhUdXBsZXMoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywK IAkJICogRm9ybUluZGV4RGF0dW0gZmlsbHMgaW4gaXRzIHZhbHVlcyBhbmQgaXNudWxsIHBhcmFt ZXRlcnMgd2l0aCB0aGUKIAkJICogYXBwcm9wcmlhdGUgdmFsdWVzIGZvciB0aGUgY29sdW1uKHMp IG9mIHRoZSBpbmRleC4KIAkJICovCi0JCUZvcm1JbmRleERhdHVtKGluZGV4SW5mbywKLQkJCQkJ ICAgc2xvdCwKLQkJCQkJICAgZXN0YXRlLAotCQkJCQkgICB2YWx1ZXMsCi0JCQkJCSAgIGlzbnVs bCk7CisJCUZvcm1JbmRleERhdHVtKGluZGV4SW5mbywgc2xvdCwgZXN0YXRlLCBsb2NfdmFsdWVz LCBsb2NfaXNudWxsKTsKKworCQl2YWx1ZXMgPSBsb2NfdmFsdWVzOworCQlpc251bGwgPSBsb2Nf aXNudWxsOwogCiAJCS8qIENoZWNrIHdoZXRoZXIgdG8gYXBwbHkgbm9EdXBFcnIgdG8gdGhpcyBp bmRleCAqLwogCQlhcHBseU5vRHVwRXJyID0gbm9EdXBFcnIgJiYKQEAgLTYxMyw3ICs2MjMsMTIg QEAgRXhlY0NoZWNrSW5kZXhDb25zdHJhaW50cyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZv LCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJY2hlY2tlZEluZGV4ID0gdHJ1ZTsKIAogCQkvKiBD aGVjayBmb3IgcGFydGlhbCBpbmRleCAqLwotCQlpZiAoaW5kZXhJbmZvLT5paV9QcmVkaWNhdGUg IT0gTklMKQorCQlpZiAoaW5kZXhJbmZvLT5paV9DaGVja2VkUHJlZGljYXRlICYmICFpbmRleElu Zm8tPmlpX1ByZWRpY2F0ZVNhdGlzZmllZCkKKwkJeworCQkJLyogV2UndmUgYWxyZWFkeSBjaGVj a2VkIGFuZCB0aGUgcHJlZGljYXRlIHdhc24ndCBzYXRpc2ZpZWQuICovCisJCQljb250aW51ZTsK KwkJfQorCQllbHNlIGlmIChpbmRleEluZm8tPmlpX1ByZWRpY2F0ZSAhPSBOSUwpCiAJCXsKIAkJ CUV4cHJTdGF0ZSAgKnByZWRpY2F0ZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY01haW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKaW5kZXggMjdj OWVlYzY5N2IuLjZiN2I2YmM4MDE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjTWFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKQEAgLTEyODIs NiArMTI4Miw3IEBAIEluaXRSZXN1bHRSZWxJbmZvKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbElu Zm8sCiAJLyogVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIHNldCBsYXRlciBpZiBuZWVkZWQgKi8K IAlyZXN1bHRSZWxJbmZvLT5yaV9Sb3dJZEF0dE5vID0gMDsKIAlyZXN1bHRSZWxJbmZvLT5yaV9l eHRyYVVwZGF0ZWRDb2xzID0gTlVMTDsKKwlyZXN1bHRSZWxJbmZvLT5yaV9DaGFuZ2VkSW5kZXhl ZENvbHMgPSBOVUxMOwogCXJlc3VsdFJlbEluZm8tPnJpX3Byb2plY3ROZXcgPSBOVUxMOwogCXJl c3VsdFJlbEluZm8tPnJpX25ld1R1cGxlU2xvdCA9IE5VTEw7CiAJcmVzdWx0UmVsSW5mby0+cmlf b2xkVHVwbGVTbG90ID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNSZXBsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMK aW5kZXggZGVmMzI3NzRjOTAuLjI3MDllMmRiMGYyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjUmVwbGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj UmVwbGljYXRpb24uYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5z LmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgi CisjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9zbmFwbWdyLmgi CiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy90eXBjYWNoZS5o IgpAQCAtOTM2LDcgKzkzNywxMyBAQCBFeGVjU2ltcGxlUmVsYXRpb25VcGRhdGUoUmVzdWx0UmVs SW5mbyAqcmVzdWx0UmVsSW5mbywKIAkJaWYgKHJlbC0+cmRfcmVsLT5yZWxpc3BhcnRpdGlvbikK IAkJCUV4ZWNQYXJ0aXRpb25DaGVjayhyZXN1bHRSZWxJbmZvLCBzbG90LCBlc3RhdGUsIHRydWUp OwogCisJCS8qCisJCSAqIFdlJ3JlIG5vdCBnb2luZyB0byBjYWxsIEV4ZWNDaGVja0luZGV4ZWRB dHRyc0ZvckNoYW5nZXMgaGVyZQorCQkgKiBiZWNhdXNlIHdlJ3ZlIGFscmVhZHkgaWRlbnRpZmll ZCB0aGUgY2hhbmdlcyBlYXJsaWVyIG9uIHRoYW5rcyB0bworCQkgKiBzbG90X21vZGlmeV9kYXRh LgorCQkgKi8KIAkJc2ltcGxlX3RhYmxlX3R1cGxlX3VwZGF0ZShyZWwsIHRpZCwgc2xvdCwgZXN0 YXRlLT5lc19zbmFwc2hvdCwKKwkJCQkJCQkJICByZXN1bHRSZWxJbmZvLT5yaV9DaGFuZ2VkSW5k ZXhlZENvbHMsCiAJCQkJCQkJCSAgJnVwZGF0ZV9pbmRleGVzKTsKIAogCQljb25mbGljdGluZGV4 ZXMgPSByZXN1bHRSZWxJbmZvLT5yaV9vbkNvbmZsaWN0QXJiaXRlckluZGV4ZXM7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCmluZGV4IGU0NGYxMjIzODg2Li5hMDZjZjM0Y2E3 MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKQEAgLTE3LDYgKzE3LDcg QEAKICAqCQlFeGVjTW9kaWZ5VGFibGUJCS0gcmV0cmlldmUgdGhlIG5leHQgdHVwbGUgZnJvbSB0 aGUgbm9kZQogICoJCUV4ZWNFbmRNb2RpZnlUYWJsZQktIHNodXQgZG93biB0aGUgTW9kaWZ5VGFi bGUgbm9kZQogICoJCUV4ZWNSZVNjYW5Nb2RpZnlUYWJsZSAtIHJlc2NhbiB0aGUgTW9kaWZ5VGFi bGUgbm9kZQorICoJCUV4ZWNDaGVja0luZGV4ZWRBdHRyc0ZvckNoYW5nZXMgLSBmaW5kIHNldCBv ZiB1cGRhdGVkIGluZGV4ZWQgY29sdW1ucwogICoKICAqCSBOT1RFUwogICoJCVRoZSBNb2RpZnlU YWJsZSBub2RlIHJlY2VpdmVzIGlucHV0IGZyb20gaXRzIG91dGVyUGxhbiwgd2hpY2ggaXMKQEAg LTUzLDEyICs1NCwxOCBAQAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKICNpbmNsdWRlICJhY2Nl c3MvaHR1cF9kZXRhaWxzLmgiCisjaW5jbHVkZSAiYWNjZXNzL2F0dG51bS5oIgorI2luY2x1ZGUg ImFjY2Vzcy9zeXNhdHRyLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKKyNpbmNsdWRl ICJhY2Nlc3MvdHVwY29udmVydC5oIgorI2luY2x1ZGUgImFjY2Vzcy90dXBkZXNjLmgiCiAjaW5j bHVkZSAiYWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL2luZGV4LmgiCiAjaW5jbHVk ZSAiY29tbWFuZHMvdHJpZ2dlci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24u aCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25v ZGVNb2RpZnlUYWJsZS5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL3R1cHRhYmxlLmgiCiAjaW5jbHVk ZSAiZm9yZWlnbi9mZHdhcGkuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJu b2Rlcy9ub2RlRnVuY3MuaCIKQEAgLTY4LDggKzc1LDExIEBACiAjaW5jbHVkZSAic3RvcmFnZS9s bWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1 bS5oIgorI2luY2x1ZGUgInV0aWxzL2Zsb2F0LmgiCiAjaW5jbHVkZSAidXRpbHMvaW5qZWN0aW9u X3BvaW50LmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMv cmVsLmgiCisjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9zbmFw bWdyLmgiCiAKIApAQCAtMTc2LDYgKzE4NiwyMjAgQEAgc3RhdGljIFR1cGxlVGFibGVTbG90ICpF eGVjTWVyZ2VOb3RNYXRjaGVkKE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkJ CQkgICBSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCQkJCQkJCQkJCSAgIGJvb2wgY2Fu U2V0VGFnKTsKIAorLyoKKyAqIEV4ZWNDaGVja0luZGV4ZWRBdHRyc0ZvckNoYW5nZXMKKyAqCisg KiBEZXRlcm1pbmUgd2hpY2ggaW5kZXhlcyBuZWVkIHVwZGF0aW5nIGJ5IGZpbmRpbmcgdGhlIHNl dCBvZiBtb2RpZmllZCBpbmRleGVkCisgKiBhdHRyaWJ1dGVzLgorICoKKyAqIEZvciB3aGljaCBp bXBsZW1lbnQgdGhlIGFtY29tcGFyZWRhdHVtcygpIGluZGV4IEFNIEFQSSB3ZSdsbCBuZWVkIHRv IGZvcm0KKyAqIGluZGV4IGRhdHVtIGFuZCBjb21wYXJlIGVhY2ggYXR0cmlidXRlIHRvIHNlZSBp ZiBhbnl0aGluZyBhY3R1YWxseSBjaGFuZ2VkLgorICoKKyAqIFRoZSBnb2FsIGlzIGZvciB0aGUg ZXhlY3V0b3IgdG8ga25vdywgYWhlYWQgb2YgY2FsbGluZyBpbnRvIHRoZSB0YWJsZSBBTSB0bwor ICogcHJvY2VzcyB0aGUgdXBkYXRlIGFuZCBiZWZvcmUgY2FsbGluZyBpbnRvIHRoZSBpbmRleCBB TSBmb3IgaW5zZXJ0aW5nIG5ldworICogaW5kZXggdHVwbGVzLCB3aGljaCBhdHRyaWJ1dGVzIGlu IHRoZSBuZXcgVHVwbGVUYWJsZVNsb3QsIGlmIGFueSwgdHJ1ZWx5CisgKiBuZWNlc3NpdGF0ZSBh IG5ldyBpbmRleCB0dXBsZS4KKyAqCisgKiBSZXR1cm5zIGEgQml0bWFwc2V0IG9mIGF0dHJpYnV0 ZXMgdGhhdCBpbnRlcnNlY3RzIHdpdGggaW5kZXhlcyB3aGljaCByZXF1aXJlCisgKiBhIG5ldyBp bmRleCB0dXBsZS4KKyAqLworQml0bWFwc2V0ICoKK0V4ZWNDaGVja0luZGV4ZWRBdHRyc0ZvckNo YW5nZXMoUmVzdWx0UmVsSW5mbyAqcmVsaW5mbywKKwkJCQkJCQkJRVN0YXRlICplc3RhdGUsCisJ CQkJCQkJCVR1cGxlVGFibGVTbG90ICpvbGRfdHRzLAorCQkJCQkJCQlUdXBsZVRhYmxlU2xvdCAq bmV3X3R0cykKK3sKKwlSZWxhdGlvbglyZWxhdGlvbiA9IHJlbGluZm8tPnJpX1JlbGF0aW9uRGVz YzsKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsYXRpb24pOworCUJp dG1hcHNldCAgKm1peF9hdHRycyA9IE5VTEw7CS8qIG1vZGlmaWVkIGluZGV4ZWQgYXR0cmlidXRl cyAqLworCisJLyogSWYgbm8gaW5kZXhlcywgd2UncmUgZG9uZSAqLworCWlmIChyZWxpbmZvLT5y aV9OdW1JbmRpY2VzID09IDApCisJCXJldHVybiBOVUxMOworCisJLyogRmluZCB0aGUgaW5kZXhl cyB0aGF0IHJlZmVyZW5jZSB0aGlzIGF0dHJpYnV0ZSAqLworCWZvciAoaW50IGkgPSAwOyBpIDwg cmVsaW5mby0+cmlfTnVtSW5kaWNlczsgaSsrKQorCXsKKwkJUmVsYXRpb24JaW5kZXggPSByZWxp bmZvLT5yaV9JbmRleFJlbGF0aW9uRGVzY3NbaV07CisJCUluZGV4QW1Sb3V0aW5lICphbXJvdXRp bmUgPSBpbmRleC0+cmRfaW5kYW07CisJCUluZGV4SW5mbyAgKmluZGV4SW5mbyA9IHJlbGluZm8t PnJpX0luZGV4UmVsYXRpb25JbmZvW2ldOworCQlCaXRtYXBzZXQgICptX2F0dHJzID0gTlVMTDsg LyogKHBvc3NpYmx5KSBtb2RpZmllZCBpbmRleGVkIGF0dHJpYnV0ZXMgKi8KKwkJQml0bWFwc2V0 ICAqdV9hdHRycyA9IE5VTEw7IC8qIHVubW9kaWZpZWQgaW5kZXhlZCBhdHRyaWJ1dGVzICovCisJ CWJvb2wJCWhhc19hbV9jb21wYXJlID0gKGFtcm91dGluZS0+YW1jb21wYXJlZGF0dW1zICE9IE5V TEwpOworCQlib29sCQlzdXBwb3J0c19pb3MgPSAoYW1yb3V0aW5lLT5hbWNhbnJldHVybiAhPSBO VUxMKTsKKwkJYm9vbAkJaXNfcGFydGlhbCA9IChpbmRleEluZm8tPmlpX1ByZWRpY2F0ZSAhPSBO SUwpOworCQlFeHByQ29udGV4dCAqZWNvbnRleHQgPSBHZXRQZXJUdXBsZUV4cHJDb250ZXh0KGVz dGF0ZSk7CisJCWludAkJCW51bV9kYXR1bXMgPSBzdXBwb3J0c19pb3MgPworCQkJaW5kZXhJbmZv LT5paV9OdW1JbmRleEF0dHJzIDogaW5kZXhJbmZvLT5paV9OdW1JbmRleEtleUF0dHJzOworCisJ CS8qIElmIHdlJ3ZlIHJldmlld2VkIGFsbCB0aGUgYXR0cmlidXRlcyBvbiB0aGlzIGluZGV4LCBt b3ZlIG9uICovCisJCWlmIChibXNfaXNfc3Vic2V0KGluZGV4SW5mby0+aWlfSW5kZXhlZEF0dHJz LCBtaXhfYXR0cnMpKQorCQkJY29udGludWU7CisKKwkJLyogQWRkIHBhcnRpYWwgaW5kZXggYXR0 cmlidXRlcyAqLworCQlpZiAoaXNfcGFydGlhbCkKKwkJCW1fYXR0cnMgPSBibXNfYWRkX21lbWJl cnMobV9hdHRycywgaW5kZXhJbmZvLT5paV9QcmVkaWNhdGVBdHRycyk7CisKKwkJLyogQ29tcGFy ZSB0aGUgaW5kZXggZGF0dW1zIGZvciBlcXVhbGl0eSAqLworCQlmb3IgKGludCBqID0gMDsgaiA8 IG51bV9kYXR1bXM7IGorKykKKwkJeworCQkJQXR0ck51bWJlcglyZWxfYXR0cm51bSA9IGluZGV4 SW5mby0+aWlfSW5kZXhBdHRyTnVtYmVyc1tqXTsKKwkJCWludAkJCXJlbF9hdHRyaWR4ID0gcmVs X2F0dHJudW0gLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyOworCQkJaW50CQkJ bnRoX2V4cHIgPSAwOworCQkJaW50MTYJCXR5cGxlbjsKKwkJCWJvb2wJCXR5cGJ5dmFsOworCQkJ RGF0dW0JCW9sZF92YWx1ZTsKKwkJCURhdHVtCQluZXdfdmFsdWU7CisJCQlib29sCQlvbGRfbnVs bDsKKwkJCWJvb2wJCW5ld19udWxsOworCQkJYm9vbAkJdmFsdWVzX2VxdWFsID0gZmFsc2U7CisK KwkJCS8qIFN5c3RlbSBhdHRyaWJ1dGVzICovCisJCQlpZiAocmVsX2F0dHJudW0gPCAwKQorCQkJ eworCQkJCS8qIEV4dHJhY3Qgc3lzdGVtIHZhbHVlcyBmcm9tIGJvdGggc2xvdHMgZm9yIHRoaXMg YXR0cmlidXRlICovCisJCQkJb2xkX3ZhbHVlID0gc2xvdF9nZXRzeXNhdHRyKG9sZF90dHMsIHJl bF9hdHRybnVtLCAmb2xkX251bGwpOworCQkJCW5ld192YWx1ZSA9IHNsb3RfZ2V0c3lzYXR0cihu ZXdfdHRzLCByZWxfYXR0cm51bSwgJm5ld19udWxsKTsKKworCQkJCS8qIFRoZSBvbmx5IGFsbG93 ZWQgc3lzdGVtIGNvbHVtbnMgYXJlIE9JRHMsIHNvIGRvIHRoaXMgKi8KKwkJCQl2YWx1ZXNfZXF1 YWwgPSAoRGF0dW1HZXRPYmplY3RJZChvbGRfdmFsdWUpID09IERhdHVtR2V0T2JqZWN0SWQobmV3 X3ZhbHVlKSk7CisJCQkJZ290byBlcXVhbGl0eV9kZXRlcm1pbmVkOworCQkJfQorCisJCQkvKgor CQkJICogVGhpcyBpcyBhbiBleHByZXNzaW9uIGF0dHJpYnV0ZSwgYnV0IGluIGFuIGVmZm9ydCB0 byBhdm9pZCB0aGUKKwkJCSAqIGV4cGVuc2Ugb2YgSW5kZXhGb3JtRGF0dW0gd2UncmUgbm93IGZh Y2VkIHdpdGggdGVzdGluZyBmb3IKKwkJCSAqIGVxdWFsaXR5IHNvIHdlJ2xsIGhhdmUgdG8gZXhl YyB0aGUgZXhwcmVzc2lvbnMgYW5kIHRlc3QgZm9yCisJCQkgKiBiaW5hcnkgZXF1YWxpdHkgb2Yg dGhlIHJlc3VsdHMuCisJCQkgKi8KKwkJCWVsc2UgaWYgKHJlbF9hdHRybnVtID09IDApCisJCQl7 CisJCQkJVHVwbGVUYWJsZVNsb3QgKnNhdmVfc2NhbnR1cGxlID0gZWNvbnRleHQtPmVjeHRfc2Nh bnR1cGxlOworCQkJCU9pZAkJCWV4cHJfdHlwZV9vaWQ7CisJCQkJRXhwcgkgICAqZXhwciA9IChF eHByICopIGxpc3RfbnRoKGluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnMsIG50aF9leHByKTsKKwkJ CQlFeHByU3RhdGUgICpzdGF0ZTsKKworCQkJCWlmIChpbmRleEluZm8tPmlpX0V4cHJlc3Npb25z U3RhdGUgPT0gTklMKQorCQkJCXsKKwkJCQkJLyogRmlyc3QgdGltZSB0aHJvdWdoLCBzZXQgdXAg ZXhwcmVzc2lvbiBldmFsdWF0aW9uIHN0YXRlICovCisJCQkJCWluZGV4SW5mby0+aWlfRXhwcmVz c2lvbnNTdGF0ZSA9CisJCQkJCQlFeGVjUHJlcGFyZUV4cHJMaXN0KGluZGV4SW5mby0+aWlfRXhw cmVzc2lvbnMsIGVzdGF0ZSk7CisJCQkJfQorCisJCQkJc3RhdGUgPSAoRXhwclN0YXRlICopIGxp c3RfbnRoKGluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnNTdGF0ZSwgbnRoX2V4cHIpOworCisJCQkJ ZWNvbnRleHQtPmVjeHRfc2NhbnR1cGxlID0gb2xkX3R0czsKKwkJCQlvbGRfdmFsdWUgPSBFeGVj RXZhbEV4cHJTd2l0Y2hDb250ZXh0KHN0YXRlLAorCQkJCQkJCQkJCQkJCSAgR2V0UGVyVHVwbGVF eHByQ29udGV4dChlc3RhdGUpLAorCQkJCQkJCQkJCQkJCSAgJm9sZF9udWxsKTsKKworCQkJCWVj b250ZXh0LT5lY3h0X3NjYW50dXBsZSA9IG5ld190dHM7CisJCQkJbmV3X3ZhbHVlID0gRXhlY0V2 YWxFeHByU3dpdGNoQ29udGV4dChzdGF0ZSwKKwkJCQkJCQkJCQkJCQkgIEdldFBlclR1cGxlRXhw ckNvbnRleHQoZXN0YXRlKSwKKwkJCQkJCQkJCQkJCQkgICZuZXdfbnVsbCk7CisKKwkJCQllY29u dGV4dC0+ZWN4dF9zY2FudHVwbGUgPSBzYXZlX3NjYW50dXBsZTsKKworCQkJCS8qCisJCQkJICog Tk9URTogdGVzdCBmb3IgTlVMTCBjYXNlcyBoZXJlIHRvIHBvdGVudGlhbGx5IGF2b2lkIGxvb2tp bmcKKwkJCQkgKiB1cCB0aGUgdHlwZSBpbmZvcm1hdGlvbi4gIEl0J3MgYSB0YWQgcmVkdW5kYW50 LCBidXQgd29ydGgKKwkJCQkgKiBpdC4KKwkJCQkgKi8KKworCQkJCS8qIEEgY2hhbmdlIHRvL2Zy b20gTlVMTCwgc28gbm90IGVxdWFsICovCisJCQkJaWYgKG9sZF9udWxsICE9IG5ld19udWxsKQor CQkJCXsKKwkJCQkJdmFsdWVzX2VxdWFsID0gZmFsc2U7CisJCQkJCWdvdG8gZXF1YWxpdHlfZGV0 ZXJtaW5lZDsKKwkJCQl9CisKKwkJCQkvKiBCb3RoIE5VTEwsIG5vIGNoYW5nZSByZWNvcmQgYXMg dW5tb2RpZmllZCAqLworCQkJCWlmIChvbGRfbnVsbCkKKwkJCQl7CisJCQkJCXZhbHVlc19lcXVh bCA9IHRydWU7CisJCQkJCWdvdG8gZXF1YWxpdHlfZGV0ZXJtaW5lZDsKKwkJCQl9CisKKwkJCQkv KiBHZXQgdHlwZSBPSUQgZnJvbSB0aGUgZXhwcmVzc2lvbiAqLworCQkJCWV4cHJfdHlwZV9vaWQg PSBleHByVHlwZSgoTm9kZSAqKSBleHByKTsKKworCQkJCS8qIEdldCB0eXBlIGluZm9ybWF0aW9u IGZyb20gdGhlIE9JRCAqLworCQkJCWdldF90eXBsZW5ieXZhbChleHByX3R5cGVfb2lkLCAmdHlw bGVuLCAmdHlwYnl2YWwpOworCQkJfQorCQkJLyogTm90IGEgc3lzdGVtIG9yIGV4cHJlc3Npb24g YXR0cmlidXRlICovCisJCQllbHNlCisJCQl7CisJCQkJQ29tcGFjdEF0dHJpYnV0ZSAqYXR0ID0g VHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwZGVzYywgcmVsX2F0dHJudW0gLSAxKTsKKworCQkJCS8q IEV4dHJhY3QgdmFsdWVzIGZyb20gYm90aCBzbG90cyBmb3IgdGhpcyBhdHRyaWJ1dGUgKi8KKwkJ CQlvbGRfdmFsdWUgPSBzbG90X2dldGF0dHIob2xkX3R0cywgcmVsX2F0dHJudW0sICZvbGRfbnVs bCk7CisJCQkJbmV3X3ZhbHVlID0gc2xvdF9nZXRhdHRyKG5ld190dHMsIHJlbF9hdHRybnVtLCAm bmV3X251bGwpOworCisJCQkJdHlwbGVuID0gYXR0LT5hdHRsZW47CisJCQkJdHlwYnl2YWwgPSBh dHQtPmF0dGJ5dmFsOworCQkJfQorCisJCQkvKiBBIGNoYW5nZSB0by9mcm9tIE5VTEwsIHNvIG5v dCBlcXVhbCAqLworCQkJaWYgKG9sZF9udWxsICE9IG5ld19udWxsKQorCQkJeworCQkJCXZhbHVl c19lcXVhbCA9IGZhbHNlOworCQkJCWdvdG8gZXF1YWxpdHlfZGV0ZXJtaW5lZDsKKwkJCX0KKwor CQkJLyogQm90aCBOVUxMLCBubyBjaGFuZ2UgcmVjb3JkIGFzIHVubW9kaWZpZWQgKi8KKwkJCWlm IChvbGRfbnVsbCkKKwkJCXsKKwkJCQl2YWx1ZXNfZXF1YWwgPSB0cnVlOworCQkJCWdvdG8gZXF1 YWxpdHlfZGV0ZXJtaW5lZDsKKwkJCX0KKworCQkJaWYgKGhhc19hbV9jb21wYXJlKQorCQkJewor CQkJCS8qCisJCQkJICogTk9URTogRm9yIEFNIGNvbXBhcmlzb24sIHBhc3MgdGhlIDEtYmFzZWQg aW5kZXggYXR0cmlidXRlCisJCQkJICogbnVtYmVyLiBUaGUgQU0ncyBjb21wYXJlIGZ1bmN0aW9u IGV4cGVjdHMgdGhlIHNhbWUKKwkJCQkgKiBudW1iZXJpbmcgYXMgdXNlZCBpbnRlcm5hbGx5IGJ5 IHRoZSBBTS4KKwkJCQkgKi8KKwkJCQl2YWx1ZXNfZXF1YWwgPSBhbXJvdXRpbmUtPmFtY29tcGFy ZWRhdHVtcyhpbmRleCwgaiArIDEsCisJCQkJCQkJCQkJCQkJCSAgb2xkX3ZhbHVlLCBvbGRfbnVs bCwKKwkJCQkJCQkJCQkJCQkJICBuZXdfdmFsdWUsIG5ld19udWxsKTsKKwkJCX0KKwkJCWVsc2UK KwkJCXsKKwkJCQl2YWx1ZXNfZXF1YWwgPSBkYXR1bUlzRXF1YWwob2xkX3ZhbHVlLCBuZXdfdmFs dWUsIHR5cGJ5dmFsLCB0eXBsZW4pOworCQkJfQorCisJZXF1YWxpdHlfZGV0ZXJtaW5lZDo7CisJ CQlpZiAoIXZhbHVlc19lcXVhbCkKKwkJCQlpZiAocmVsX2F0dHJudW0gPT0gMCkKKwkJCQl7CisJ CQkJCUV4cHIJICAgKmV4cHIgPSAoRXhwciAqKSBsaXN0X250aChpbmRleEluZm8tPmlpX0V4cHJl c3Npb25zLCBudGhfZXhwcik7CisKKwkJCQkJcHVsbF92YXJhdHRub3MoKE5vZGUgKikgZXhwciwg cmVsaW5mby0+cmlfUmFuZ2VUYWJsZUluZGV4LCAmbV9hdHRycyk7CisJCQkJfQorCQkJCWVsc2UK KwkJCQkJbV9hdHRycyA9IGJtc19hZGRfbWVtYmVyKG1fYXR0cnMsIHJlbF9hdHRyaWR4KTsKKwkJ CWVsc2UKKwkJCQl1X2F0dHJzID0gYm1zX2FkZF9tZW1iZXIodV9hdHRycywgcmVsX2F0dHJpZHgp OworCisJCQlpZiAocmVsX2F0dHJudW0gPT0gMCkKKwkJCQludGhfZXhwcisrOworCQl9CisKKwkJ LyoKKwkJICogSGVyZSB3ZSBrbm93IGFsbCB0aGUgYXR0cmlidXRlcyB0aGF0IG1pZ2h0IGJlIG1v ZGlmaWVkIGFuZCBhbGwKKwkJICogdGhvc2Ugd2Uga25vdyBoYXZlbid0IGJlZW4gYWNyb3NzIGFs bCBpbmRleGVzLiAgVGFrZSB0aGUgZGlmZmVyZW5jZQorCQkgKiBhbmQgYWRkIGl0IHRvIHRoZSBt b2RpZmllZCBpbmRleGVkIGF0dHJpYnV0ZXMgc2V0LgorCQkgKi8KKwkJbV9hdHRycyA9IGJtc19k ZWxfbWVtYmVycyhtX2F0dHJzLCB1X2F0dHJzKTsKKwkJbWl4X2F0dHJzID0gYm1zX2FkZF9tZW1i ZXJzKG1peF9hdHRycywgbV9hdHRycyk7CisKKwkJYm1zX2ZyZWUobV9hdHRycyk7CisJCWJtc19m cmVlKHVfYXR0cnMpOworCX0KKworCXJldHVybiBtaXhfYXR0cnM7Cit9CiAKIC8qCiAgKiBWZXJp ZnkgdGhhdCB0aGUgdHVwbGVzIHRvIGJlIHByb2R1Y2VkIGJ5IElOU0VSVCBtYXRjaCB0aGUKQEAg LTIxNzAsMTQgKzIzOTQsMTcgQEAgRXhlY1VwZGF0ZVByZXBhcmVTbG90KFJlc3VsdFJlbEluZm8g KnJlc3VsdFJlbEluZm8sCiAgKi8KIHN0YXRpYyBUTV9SZXN1bHQKIEV4ZWNVcGRhdGVBY3QoTW9k aWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LCBSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAot CQkJICBJdGVtUG9pbnRlciB0dXBsZWlkLCBIZWFwVHVwbGUgb2xkdHVwbGUsIFR1cGxlVGFibGVT bG90ICpzbG90LAotCQkJICBib29sIGNhblNldFRhZywgVXBkYXRlQ29udGV4dCAqdXBkYXRlQ3h0 KQorCQkJICBJdGVtUG9pbnRlciB0dXBsZWlkLCBIZWFwVHVwbGUgb2xkdHVwbGUsIFR1cGxlVGFi bGVTbG90ICpvbGRTbG90LAorCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCBjYW5TZXRU YWcsIFVwZGF0ZUNvbnRleHQgKnVwZGF0ZUN4dCkKIHsKIAlFU3RhdGUJICAgKmVzdGF0ZSA9IGNv bnRleHQtPmVzdGF0ZTsKIAlSZWxhdGlvbglyZXN1bHRSZWxhdGlvbkRlc2MgPSByZXN1bHRSZWxJ bmZvLT5yaV9SZWxhdGlvbkRlc2M7CiAJYm9vbAkJcGFydGl0aW9uX2NvbnN0cmFpbnRfZmFpbGVk OwogCVRNX1Jlc3VsdAlyZXN1bHQ7CiAKKwkvKiBUaGUgc2V0IG9mIG1vZGlmaWVkIGluZGV4ZWQg YXR0cmlidXRlcyB0aGF0IHRyaWdnZXIgbmV3IGluZGV4IGVudHJpZXMgKi8KKwlCaXRtYXBzZXQg ICptaXhfYXR0cnMgPSBOVUxMOworCiAJdXBkYXRlQ3h0LT5jcm9zc1BhcnRVcGRhdGUgPSBmYWxz ZTsKIAogCS8qCkBAIC0yMjk0LDkgKzI1MjEsMzggQEAgbHJlcGxhY2U6CiAJCUV4ZWNDb25zdHJh aW50cyhyZXN1bHRSZWxJbmZvLCBzbG90LCBlc3RhdGUpOwogCiAJLyoKLQkgKiByZXBsYWNlIHRo ZSBoZWFwIHR1cGxlCisJICogSWRlbnRpZnkgd2hpY2gsIGlmIGFueSwgaW5kZXhlZCBhdHRyaWJ1 dGVzIHdlcmUgbW9kaWZpZWQgaGVyZSBzbyB0aGF0CisJICogd2UgbWlnaHQgcmV1c2UgaXQgaW4g YSBmZXcgcGxhY2VzLgorCSAqLworCWJtc19mcmVlKHJlc3VsdFJlbEluZm8tPnJpX0NoYW5nZWRJ bmRleGVkQ29scyk7CisJcmVzdWx0UmVsSW5mby0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xzID0gTlVM TDsKKworCS8qCisJICogRHVyaW5nIHVwZGF0ZXMgd2UnbGwgbmVlZCBhIGJpdCBtb3JlIGluZm9y bWF0aW9uIGluIEluZGV4SW5mbyBidXQgd2UndmUKKwkgKiBkZWxheWVkIGFkZGluZyBpdCB1bnRp bCBoZXJlLiAgV2UgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlCisJICogaW5kZXhlcywg dGhhdCBzb21ldGhpbmcgaGFzIGNoYW5nZWQgdGhhdCBpcyBpbmRleGVkLCBhbmQgdGhhdCB0aGUg Zmlyc3QKKwkgKiBpbmRleCBkb2Vzbid0IHlldCBoYXZlIGlpX0luZGV4ZWRBdHRycyBzZXQgYXMg YSB3YXkgdG8gZW5zdXJlIHdlIG9ubHkKKwkgKiBidWlsZCB0aGlzIHdoZW4gbmVlZGVkIGFuZCBv bmx5IG9uY2UuICBXZSBkb24ndCBidWlsZCB0aGlzIGluCisJICogRXhlY09wZW5JbmRpY2llcygp IGFzIGl0IGlzIHVubmVjZXNzYXJ5IG92ZXJoZWFkIHdoZW4gbm90IHBlcmZvcm1pbmcgYW4KKwkg KiB1cGRhdGUuCisJICovCisJaWYgKHJlc3VsdFJlbEluZm8tPnJpX051bUluZGljZXMgPiAwICYm CisJCWJtc19pc19lbXB0eShyZXN1bHRSZWxJbmZvLT5yaV9JbmRleFJlbGF0aW9uSW5mb1swXS0+ aWlfSW5kZXhlZEF0dHJzKSkKKwkJQnVpbGRVcGRhdGVJbmRleEluZm8ocmVzdWx0UmVsSW5mbyk7 CisKKwkvKgorCSAqIE5leHQgdXAgd2UgbmVlZCB0byBmaW5kIG91dCB0aGUgc2V0IG9mIGluZGV4 ZWQgYXR0cmlidXRlcyB0aGF0IGhhdmUKKwkgKiBjaGFuZ2VkIGluIHZhbHVlIGFuZCBzaG91bGQg dHJpZ2dlciBhIG5ldyBpbmRleCB0dXBsZS4gIFdlIGNvdWxkIHN0YXJ0CisJICogd2l0aCB0aGUg c2V0IG9mIHVwZGF0ZWQgY29sdW1ucyB2aWEgRXhlY0dldFVwZGF0ZWRDb2xzKCksIGJ1dCBpZiB3 ZSBkbworCSAqIHdlIHdpbGwgb3Zlcmxvb2sgYXR0cmlidXRlcyBkaXJlY3RseSBtb2RpZmllZCBi eSBoZWFwX21vZGlmeV90dXBsZSgpCisJICogd2hpY2ggYXJlIG5vdCBrbm93biB0byBFeGVjR2V0 VXBkYXRlZENvbHMoKS4KKwkgKi8KKwltaXhfYXR0cnMgPSBFeGVjQ2hlY2tJbmRleGVkQXR0cnNG b3JDaGFuZ2VzKHJlc3VsdFJlbEluZm8sIGVzdGF0ZSwgb2xkU2xvdCwgc2xvdCk7CisKKwkvKgor CSAqIENhbGwgaW50byB0aGUgdGFibGUgQU0gdG8gdXBkYXRlIHRoZSBoZWFwIHR1cGxlLgogCSAq Ci0JICogTm90ZTogaWYgZXNfY3Jvc3NjaGVja19zbmFwc2hvdCBpc24ndCBJbnZhbGlkU25hcHNo b3QsIHdlIGNoZWNrIHRoYXQKKwkgKiBOT1RFOiBpZiBlc19jcm9zc2NoZWNrX3NuYXBzaG90IGlz bid0IEludmFsaWRTbmFwc2hvdCwgd2UgY2hlY2sgdGhhdAogCSAqIHRoZSByb3cgdG8gYmUgdXBk YXRlZCBpcyB2aXNpYmxlIHRvIHRoYXQgc25hcHNob3QsIGFuZCB0aHJvdyBhCiAJICogY2FuJ3Qt c2VyaWFsaXplIGVycm9yIGlmIG5vdC4gVGhpcyBpcyBhIHNwZWNpYWwtY2FzZSBiZWhhdmlvciBu ZWVkZWQKIAkgKiBmb3IgcmVmZXJlbnRpYWwgaW50ZWdyaXR5IHVwZGF0ZXMgaW4gdHJhbnNhY3Rp b24tc25hcHNob3QgbW9kZQpAQCAtMjMwOCw4ICsyNTY0LDEyIEBAIGxyZXBsYWNlOgogCQkJCQkJ CQllc3RhdGUtPmVzX2Nyb3NzY2hlY2tfc25hcHNob3QsCiAJCQkJCQkJCXRydWUgLyogd2FpdCBm b3IgY29tbWl0ICovICwKIAkJCQkJCQkJJmNvbnRleHQtPnRtZmQsICZ1cGRhdGVDeHQtPmxvY2tt b2RlLAorCQkJCQkJCQltaXhfYXR0cnMsCiAJCQkJCQkJCSZ1cGRhdGVDeHQtPnVwZGF0ZUluZGV4 ZXMpOwogCisJQXNzZXJ0KGJtc19pc19lbXB0eShyZXN1bHRSZWxJbmZvLT5yaV9DaGFuZ2VkSW5k ZXhlZENvbHMpKTsKKwlyZXN1bHRSZWxJbmZvLT5yaV9DaGFuZ2VkSW5kZXhlZENvbHMgPSBtaXhf YXR0cnM7CisKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yMzI3LDcgKzI1ODcsNyBAQCBFeGVj VXBkYXRlRXBpbG9ndWUoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LCBVcGRhdGVDb250ZXh0 ICp1cGRhdGVDeHQsCiAJTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSA9IGNvbnRleHQtPm10c3Rh dGU7CiAJTGlzdAkgICAqcmVjaGVja0luZGV4ZXMgPSBOSUw7CiAKLQkvKiBpbnNlcnQgaW5kZXgg ZW50cmllcyBmb3IgdHVwbGUgaWYgbmVjZXNzYXJ5ICovCisJLyogSW5zZXJ0IGluZGV4IGVudHJp ZXMgZm9yIHR1cGxlIGlmIG5lY2Vzc2FyeSAqLwogCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9OdW1J bmRpY2VzID4gMCAmJiAodXBkYXRlQ3h0LT51cGRhdGVJbmRleGVzICE9IFRVX05vbmUpKQogCQly ZWNoZWNrSW5kZXhlcyA9IEV4ZWNJbnNlcnRJbmRleFR1cGxlcyhyZXN1bHRSZWxJbmZvLAogCQkJ CQkJCQkJCQkgICBzbG90LCBjb250ZXh0LT5lc3RhdGUsCkBAIC0yNTI2LDggKzI3ODYsOSBAQCBF eGVjVXBkYXRlKE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwgUmVzdWx0UmVsSW5mbyAqcmVz dWx0UmVsSW5mbywKIAkJICovCiByZWRvX2FjdDoKIAkJbG9ja2VkdGlkID0gKnR1cGxlaWQ7Ci0J CXJlc3VsdCA9IEV4ZWNVcGRhdGVBY3QoY29udGV4dCwgcmVzdWx0UmVsSW5mbywgdHVwbGVpZCwg b2xkdHVwbGUsIHNsb3QsCi0JCQkJCQkJICAgY2FuU2V0VGFnLCAmdXBkYXRlQ3h0KTsKKworCQly ZXN1bHQgPSBFeGVjVXBkYXRlQWN0KGNvbnRleHQsIHJlc3VsdFJlbEluZm8sIHR1cGxlaWQsIG9s ZHR1cGxlLCBvbGRTbG90LAorCQkJCQkJCSAgIHNsb3QsIGNhblNldFRhZywgJnVwZGF0ZUN4dCk7 CiAKIAkJLyoKIAkJICogSWYgRXhlY1VwZGF0ZUFjdCByZXBvcnRzIHRoYXQgYSBjcm9zcy1wYXJ0 aXRpb24gdXBkYXRlIHdhcyBkb25lLApAQCAtMzIyNCw4ICszNDg1LDggQEAgbG1lcmdlX21hdGNo ZWQ6CiAJCQkJCUFzc2VydChvbGR0dXBsZSA9PSBOVUxMKTsKIAogCQkJCQlyZXN1bHQgPSBFeGVj VXBkYXRlQWN0KGNvbnRleHQsIHJlc3VsdFJlbEluZm8sIHR1cGxlaWQsCi0JCQkJCQkJCQkJICAg TlVMTCwgbmV3c2xvdCwgY2FuU2V0VGFnLAotCQkJCQkJCQkJCSAgICZ1cGRhdGVDeHQpOworCQkJ CQkJCQkJCSAgIE5VTEwsIHJlc3VsdFJlbEluZm8tPnJpX29sZFR1cGxlU2xvdCwKKwkJCQkJCQkJ CQkgICBuZXdzbG90LCBjYW5TZXRUYWcsICZ1cGRhdGVDeHQpOwogCiAJCQkJCS8qCiAJCQkJCSAq IEFzIGluIEV4ZWNVcGRhdGUoKSwgaWYgRXhlY1VwZGF0ZUFjdCgpIHJlcG9ydHMgdGhhdCBhCkBA IC0zMjUwLDYgKzM1MTEsNyBAQCBsbWVyZ2VfbWF0Y2hlZDoKIAkJCQkJCQkJCSAgIHR1cGxlaWQs IE5VTEwsIG5ld3Nsb3QpOwogCQkJCQltdHN0YXRlLT5tdF9tZXJnZV91cGRhdGVkICs9IDE7CiAJ CQkJfQorCiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgQ01EX0RFTEVURToKQEAgLTQzNTYsNyArNDYx OCw3IEBAIEV4ZWNNb2RpZnlUYWJsZShQbGFuU3RhdGUgKnBzdGF0ZSkKIAkJICogRm9yIFVQREFU RS9ERUxFVEUvTUVSR0UsIGZldGNoIHRoZSByb3cgaWRlbnRpdHkgaW5mbyBmb3IgdGhlIHR1cGxl CiAJCSAqIHRvIGJlIHVwZGF0ZWQvZGVsZXRlZC9tZXJnZWQuICBGb3IgYSBoZWFwIHJlbGF0aW9u LCB0aGF0J3MgYSBUSUQ7CiAJCSAqIG90aGVyd2lzZSB3ZSBtYXkgaGF2ZSBhIHdob2xlcm93IGp1 bmsgYXR0ciB0aGF0IGNhcnJpZXMgdGhlIG9sZAotCQkgKiB0dXBsZSBpbiB0b3RvLiAgS2VlcCB0 aGlzIGluIHN0ZXAgd2l0aCB0aGUgcGFydCBvZgorCQkgKiB0dXBsZSBpbiB0b3RhbC4gIEtlZXAg dGhpcyBpbiBzdGVwIHdpdGggdGhlIHBhcnQgb2YKIAkJICogRXhlY0luaXRNb2RpZnlUYWJsZSB0 aGF0IHNldHMgdXAgcmlfUm93SWRBdHROby4KIAkJICovCiAJCWlmIChvcGVyYXRpb24gPT0gQ01E X1VQREFURSB8fCBvcGVyYXRpb24gPT0gQ01EX0RFTEVURSB8fApAQCAtNDUzMiw2ICs0Nzk0LDcg QEAgRXhlY01vZGlmeVRhYmxlKFBsYW5TdGF0ZSAqcHN0YXRlKQogCQkJCS8qIE5vdyBhcHBseSB0 aGUgdXBkYXRlLiAqLwogCQkJCXNsb3QgPSBFeGVjVXBkYXRlKCZjb250ZXh0LCByZXN1bHRSZWxJ bmZvLCB0dXBsZWlkLCBvbGR0dXBsZSwKIAkJCQkJCQkJICBvbGRTbG90LCBzbG90LCBub2RlLT5j YW5TZXRUYWcpOworCiAJCQkJaWYgKHR1cGxvY2spCiAJCQkJCVVubG9ja1R1cGxlKHJlc3VsdFJl bEluZm8tPnJpX1JlbGF0aW9uRGVzYywgdHVwbGVpZCwKIAkJCQkJCQkJSW5wbGFjZVVwZGF0ZVR1 cGxlTG9jayk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9iaXRtYXBzZXQuYyBiL3Ny Yy9iYWNrZW5kL25vZGVzL2JpdG1hcHNldC5jCmluZGV4IDdiMWU5ZDk0MTAzLi5jNTIyOTcxYTM3 YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvYml0bWFwc2V0LmMKKysrIGIvc3JjL2Jh Y2tlbmQvbm9kZXMvYml0bWFwc2V0LmMKQEAgLTIzOCw2ICsyMzgsMTAgQEAgYm1zX21ha2Vfc2lu Z2xldG9uKGludCB4KQogdm9pZAogYm1zX2ZyZWUoQml0bWFwc2V0ICphKQogeworI2lmIFVTRV9B U1NFUlRfQ0hFQ0tJTkcKKwlBc3NlcnQoYm1zX2lzX3ZhbGlkX3NldChhKSk7CisjZW5kaWYKKwog CWlmIChhKQogCQlwZnJlZShhKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL21h a2VmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKaW5kZXggZTJkOWU5YmU0 MWEuLjFmMTM2NGY5ZGY5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3Mu YworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYwpAQCAtODU3LDEwICs4NTcsMTQg QEAgbWFrZUluZGV4SW5mbyhpbnQgbnVtYXR0cnMsIGludCBudW1rZXlhdHRycywgT2lkIGFtb2lk LCBMaXN0ICpleHByZXNzaW9ucywKIAkvKiBleHByZXNzaW9ucyAqLwogCW4tPmlpX0V4cHJlc3Np b25zID0gZXhwcmVzc2lvbnM7CiAJbi0+aWlfRXhwcmVzc2lvbnNTdGF0ZSA9IE5JTDsKKwluLT5p aV9FeHByZXNzaW9uc0F0dHJzID0gTlVMTDsKIAogCS8qIHByZWRpY2F0ZXMgICovCiAJbi0+aWlf UHJlZGljYXRlID0gcHJlZGljYXRlczsKIAluLT5paV9QcmVkaWNhdGVTdGF0ZSA9IE5VTEw7CisJ bi0+aWlfUHJlZGljYXRlQXR0cnMgPSBOVUxMOworCW4tPmlpX0NoZWNrZWRQcmVkaWNhdGUgPSBm YWxzZTsKKwluLT5paV9QcmVkaWNhdGVTYXRpc2ZpZWQgPSBmYWxzZTsKIAogCS8qIGV4Y2x1c2lv biBjb25zdHJhaW50cyAqLwogCW4tPmlpX0V4Y2x1c2lvbk9wcyA9IE5VTEw7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwppbmRleCA5Mzk3MGM2YWYyOS4uYjcyYmYyMDU1 ZjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMK KysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwpAQCAtMjc1LDcg KzI3NSw2IEBACiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHJlbGF0aW9uLmgiCiAjaW5j bHVkZSAicmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9u L29yaWdpbi5oIgotI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Nsb3QuaCIKICNpbmNsdWRlICJyZXBs aWNhdGlvbi93YWxyZWNlaXZlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3dvcmtlcl9pbnRl cm5hbC5oIgogI2luY2x1ZGUgInJld3JpdGUvcmV3cml0ZUhhbmRsZXIuaCIKQEAgLTI4NSwxMiAr Mjg0LDE0IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKICNpbmNsdWRlICJ0Y29w L3Rjb3Bwcm90LmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCisjaW5jbHVkZSAidXRpbHMvZGF0 dW0uaCIKICNpbmNsdWRlICJ1dGlscy9ndWMuaCIKICNpbmNsdWRlICJ1dGlscy9pbnZhbC5oIgog I2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgi CiAjaW5jbHVkZSAidXRpbHMvcGdfbHNuLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCisjaW5j bHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9ybHMuaCIKICNpbmNsdWRl ICJ1dGlscy9zbmFwbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKQEAgLTExMTAs MTUgKzExMTEsMTggQEAgc2xvdF9zdG9yZV9kYXRhKFR1cGxlVGFibGVTbG90ICpzbG90LCBMb2dp Y2FsUmVwUmVsTWFwRW50cnkgKnJlbCwKICAqICJzbG90IiBpcyBmaWxsZWQgd2l0aCBhIGNvcHkg b2YgdGhlIHR1cGxlIGluICJzcmNzbG90IiwgcmVwbGFjaW5nCiAgKiBjb2x1bW5zIHByb3ZpZGVk IGluICJ0dXBsZURhdGEiIGFuZCBsZWF2aW5nIG90aGVycyBhcy1pcy4KICAqCisgKiBSZXR1cm5z IGEgYml0bWFwIG9mIHRoZSBtb2RpZmllZCBjb2x1bW5zLgorICoKICAqIENhdXRpb246IHVucmVw bGFjZWQgcGFzcy1ieS1yZWYgY29sdW1ucyBpbiAic2xvdCIgd2lsbCBwb2ludCBpbnRvIHRoZQog ICogc3RvcmFnZSBmb3IgInNyY3Nsb3QiLiAgVGhpcyBpcyBPSyBmb3IgY3VycmVudCB1c2FnZSwg YnV0IHNvbWVkYXkgd2UgbWF5CiAgKiBuZWVkIHRvIG1hdGVyaWFsaXplICJzbG90IiBhdCB0aGUg ZW5kIHRvIG1ha2UgaXQgaW5kZXBlbmRlbnQgb2YgInNyY3Nsb3QiLgogICovCi1zdGF0aWMgdm9p ZAorc3RhdGljIEJpdG1hcHNldCAqCiBzbG90X21vZGlmeV9kYXRhKFR1cGxlVGFibGVTbG90ICpz bG90LCBUdXBsZVRhYmxlU2xvdCAqc3Jjc2xvdCwKIAkJCQkgTG9naWNhbFJlcFJlbE1hcEVudHJ5 ICpyZWwsCiAJCQkJIExvZ2ljYWxSZXBUdXBsZURhdGEgKnR1cGxlRGF0YSkKIHsKKwlCaXRtYXBz ZXQgICptb2RpZmllZCA9IE5VTEw7CiAJaW50CQkJbmF0dHMgPSBzbG90LT50dHNfdHVwbGVEZXNj cmlwdG9yLT5uYXR0czsKIAlpbnQJCQlpOwogCkBAIC0xMTk1LDYgKzExOTksMjcgQEAgc2xvdF9t b2RpZnlfZGF0YShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgVHVwbGVUYWJsZVNsb3QgKnNyY3Nsb3Qs CiAJCQkJc2xvdC0+dHRzX2lzbnVsbFtpXSA9IHRydWU7CiAJCQl9CiAKKwkJCS8qCisJCQkgKiBE ZXRlcm1pbmUgaWYgdGhlIHJlcGxpY2F0ZWQgdmFsdWUgY2hhbmdlZCB0aGUgbG9jYWwgdmFsdWUg YnkKKwkJCSAqIGNvbXBhcmluZyBzbG90cy4gIFRoaXMgaXMgYSBzdWJzZXQgb2YKKwkJCSAqIEV4 ZWNDaGVja0luZGV4ZWRBdHRyc0ZvckNoYW5nZXMuCisJCQkgKi8KKwkJCWlmIChzcmNzbG90LT50 dHNfaXNudWxsW2ldICE9IHNsb3QtPnR0c19pc251bGxbaV0pCisJCQl7CisJCQkJLyogT25lIGlz IE5VTEwsIHRoZSBvdGhlciBpcyBub3Qgc28gdGhlIHZhbHVlIGNoYW5nZWQgKi8KKwkJCQltb2Rp ZmllZCA9IGJtc19hZGRfbWVtYmVyKG1vZGlmaWVkLCBpICsgMSAtIEZpcnN0TG93SW52YWxpZEhl YXBBdHRyaWJ1dGVOdW1iZXIpOworCQkJfQorCQkJZWxzZSBpZiAoIXNyY3Nsb3QtPnR0c19pc251 bGxbaV0pCisJCQl7CisJCQkJLyogQm90aCBhcmUgbm90IE5VTEwsIGNvbXBhcmUgdGhlaXIgdmFs dWVzICovCisKKwkJCQlpZiAoIWRhdHVtSXNFcXVhbChzcmNzbG90LT50dHNfdmFsdWVzW2ldLAor CQkJCQkJCQkgIHNsb3QtPnR0c192YWx1ZXNbaV0sCisJCQkJCQkJCSAgYXR0LT5hdHRieXZhbCwK KwkJCQkJCQkJICBhdHQtPmF0dGxlbikpCisJCQkJCW1vZGlmaWVkID0gYm1zX2FkZF9tZW1iZXIo bW9kaWZpZWQsIGkgKyAxIC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcik7CisJ CQl9CisKIAkJCS8qIFJlc2V0IGF0dG51bSBmb3IgZXJyb3IgY2FsbGJhY2sgKi8KIAkJCWFwcGx5 X2Vycm9yX2NhbGxiYWNrX2FyZy5yZW1vdGVfYXR0bnVtID0gLTE7CiAJCX0KQEAgLTEyMDIsNiAr MTIyNyw4IEBAIHNsb3RfbW9kaWZ5X2RhdGEoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIFR1cGxlVGFi bGVTbG90ICpzcmNzbG90LAogCiAJLyogQW5kIGZpbmFsbHksIGRlY2xhcmUgdGhhdCAic2xvdCIg Y29udGFpbnMgYSB2YWxpZCB2aXJ0dWFsIHR1cGxlICovCiAJRXhlY1N0b3JlVmlydHVhbFR1cGxl KHNsb3QpOworCisJcmV0dXJuIG1vZGlmaWVkOwogfQogCiAvKgpAQCAtMjkxOCw2ICsyOTQ1LDcg QEAgYXBwbHlfaGFuZGxlX3VwZGF0ZV9pbnRlcm5hbChBcHBseUV4ZWN1dGlvbkRhdGEgKmVkYXRh LAogCUNvbmZsaWN0VHVwbGVJbmZvIGNvbmZsaWN0dHVwbGUgPSB7MH07CiAJYm9vbAkJZm91bmQ7 CiAJTWVtb3J5Q29udGV4dCBvbGRjdHg7CisJQml0bWFwc2V0ICAqaW5kZXhlZCA9IE5VTEw7CiAK IAlFdmFsUGxhblF1YWxJbml0KCZlcHFzdGF0ZSwgZXN0YXRlLCBOVUxMLCBOSUwsIC0xLCBOSUwp OwogCUV4ZWNPcGVuSW5kaWNlcyhyZWxpbmZvLCBmYWxzZSk7CkBAIC0yOTM0LDYgKzI5NjIsOCBA QCBhcHBseV9oYW5kbGVfdXBkYXRlX2ludGVybmFsKEFwcGx5RXhlY3V0aW9uRGF0YSAqZWRhdGEs CiAJICovCiAJaWYgKGZvdW5kKQogCXsKKwkJQml0bWFwc2V0ICAqbW9kaWZpZWQgPSBOVUxMOwor CiAJCS8qCiAJCSAqIFJlcG9ydCB0aGUgY29uZmxpY3QgaWYgdGhlIHR1cGxlIHdhcyBtb2RpZmll ZCBieSBhIGRpZmZlcmVudAogCQkgKiBvcmlnaW4uCkBAIC0yOTU3LDE1ICsyOTg3LDI5IEBAIGFw cGx5X2hhbmRsZV91cGRhdGVfaW50ZXJuYWwoQXBwbHlFeGVjdXRpb25EYXRhICplZGF0YSwKIAog CQkvKiBQcm9jZXNzIGFuZCBzdG9yZSByZW1vdGUgdHVwbGUgaW4gdGhlIHNsb3QgKi8KIAkJb2xk Y3R4ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEdldFBlclR1cGxlTWVtb3J5Q29udGV4dChlc3Rh dGUpKTsKLQkJc2xvdF9tb2RpZnlfZGF0YShyZW1vdGVzbG90LCBsb2NhbHNsb3QsIHJlbG1hcGVu dHJ5LCBuZXd0dXApOworCQltb2RpZmllZCA9IHNsb3RfbW9kaWZ5X2RhdGEocmVtb3Rlc2xvdCwg bG9jYWxzbG90LCByZWxtYXBlbnRyeSwgbmV3dHVwKTsKIAkJTWVtb3J5Q29udGV4dFN3aXRjaFRv KG9sZGN0eCk7CiAKKwkJLyoKKwkJICogTm9ybWFsbHkgd2UnZCBjYWxsIEV4ZWNDaGVja0luZGV4 ZWRBdHRyRm9yQ2hhbmdlcyBidXQgaGVyZSB3ZSBoYXZlCisJCSAqIHRoZSByZWNvcmQgb2YgY2hh bmdlZCBjb2x1bW5zIGluIHRoZSByZXBsaWNhdGlvbiBzdGF0ZSwgc28gbGV0J3MKKwkJICogdXNl IHRoYXQgaW5zdGVhZC4KKwkJICovCisJCWluZGV4ZWQgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJp dG1hcChyZWxpbmZvLT5yaV9SZWxhdGlvbkRlc2MsCisJCQkJCQkJCQkJCSBJTkRFWF9BVFRSX0JJ VE1BUF9JTkRFWEVEKTsKKworCQlibXNfZnJlZShyZWxpbmZvLT5yaV9DaGFuZ2VkSW5kZXhlZENv bHMpOworCQlyZWxpbmZvLT5yaV9DaGFuZ2VkSW5kZXhlZENvbHMgPSBibXNfaW50X21lbWJlcnMo bW9kaWZpZWQsIGluZGV4ZWQpOworCQlibXNfZnJlZShpbmRleGVkKTsKKwogCQlFdmFsUGxhblF1 YWxTZXRTbG90KCZlcHFzdGF0ZSwgcmVtb3Rlc2xvdCk7CiAKIAkJSW5pdENvbmZsaWN0SW5kZXhl cyhyZWxpbmZvKTsKIAotCQkvKiBEbyB0aGUgYWN0dWFsIHVwZGF0ZS4gKi8KKwkJLyogRmlyc3Qg Y2hlY2sgcHJpdmlsZWdlcyAqLwogCQlUYXJnZXRQcml2aWxlZ2VzQ2hlY2socmVsaW5mby0+cmlf UmVsYXRpb25EZXNjLCBBQ0xfVVBEQVRFKTsKKworCQkvKiBUaGVuIGRvIHRoZSBhY3R1YWwgdXBk YXRlLiAqLwogCQlFeGVjU2ltcGxlUmVsYXRpb25VcGRhdGUocmVsaW5mbywgZXN0YXRlLCAmZXBx c3RhdGUsIGxvY2Fsc2xvdCwKIAkJCQkJCQkJIHJlbW90ZXNsb3QpOwogCX0KQEAgLTM0NTUsNiAr MzQ5OSw4IEBAIGFwcGx5X2hhbmRsZV90dXBsZV9yb3V0aW5nKEFwcGx5RXhlY3V0aW9uRGF0YSAq ZWRhdGEsCiAJCQkJYm9vbAkJZm91bmQ7CiAJCQkJRVBRU3RhdGUJZXBxc3RhdGU7CiAJCQkJQ29u ZmxpY3RUdXBsZUluZm8gY29uZmxpY3R0dXBsZSA9IHswfTsKKwkJCQlCaXRtYXBzZXQgICptb2Rp ZmllZCA9IE5VTEw7CisJCQkJQml0bWFwc2V0ICAqaW5kZXhlZDsKIAogCQkJCS8qIEdldCB0aGUg bWF0Y2hpbmcgbG9jYWwgdHVwbGUgZnJvbSB0aGUgcGFydGl0aW9uLiAqLwogCQkJCWZvdW5kID0g RmluZFJlcGxUdXBsZUluTG9jYWxSZWwoZWRhdGEsIHBhcnRyZWwsCkBAIC0zNTIzLDggKzM1Njks OCBAQCBhcHBseV9oYW5kbGVfdHVwbGVfcm91dGluZyhBcHBseUV4ZWN1dGlvbkRhdGEgKmVkYXRh LAogCQkJCSAqIHJlbW90ZXNsb3RfcGFydC4KIAkJCQkgKi8KIAkJCQlvbGRjdHggPSBNZW1vcnlD b250ZXh0U3dpdGNoVG8oR2V0UGVyVHVwbGVNZW1vcnlDb250ZXh0KGVzdGF0ZSkpOwotCQkJCXNs b3RfbW9kaWZ5X2RhdGEocmVtb3Rlc2xvdF9wYXJ0LCBsb2NhbHNsb3QsIHBhcnRfZW50cnksCi0J CQkJCQkJCSBuZXd0dXApOworCQkJCW1vZGlmaWVkID0gc2xvdF9tb2RpZnlfZGF0YShyZW1vdGVz bG90X3BhcnQsIGxvY2Fsc2xvdCwgcGFydF9lbnRyeSwKKwkJCQkJCQkJCQkJbmV3dHVwKTsKIAkJ CQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKIAogCQkJCUV2YWxQbGFuUXVhbEluaXQo JmVwcXN0YXRlLCBlc3RhdGUsIE5VTEwsIE5JTCwgLTEsIE5JTCk7CkBAIC0zNTQ5LDYgKzM1OTUs MTggQEAgYXBwbHlfaGFuZGxlX3R1cGxlX3JvdXRpbmcoQXBwbHlFeGVjdXRpb25EYXRhICplZGF0 YSwKIAkJCQkJRXZhbFBsYW5RdWFsU2V0U2xvdCgmZXBxc3RhdGUsIHJlbW90ZXNsb3RfcGFydCk7 CiAJCQkJCVRhcmdldFByaXZpbGVnZXNDaGVjayhwYXJ0cmVsaW5mby0+cmlfUmVsYXRpb25EZXNj LAogCQkJCQkJCQkJCSAgQUNMX1VQREFURSk7CisKKwkJCQkJLyoKKwkJCQkJICogTm9ybWFsbHkg d2UnZCBjYWxsIEV4ZWNDaGVja0luZGV4ZWRBdHRyRm9yQ2hhbmdlcyBidXQKKwkJCQkJICogaGVy ZSB3ZSBoYXZlIHRoZSByZWNvcmQgb2YgY2hhbmdlZCBjb2x1bW5zIGluIHRoZQorCQkJCQkgKiBy ZXBsaWNhdGlvbiBzdGF0ZSwgc28gbGV0J3MgdXNlIHRoYXQgaW5zdGVhZC4KKwkJCQkJICovCisJ CQkJCWluZGV4ZWQgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChwYXJ0cmVsaW5mby0+cmlf UmVsYXRpb25EZXNjLAorCQkJCQkJCQkJCQkJCQkgSU5ERVhfQVRUUl9CSVRNQVBfSU5ERVhFRCk7 CisJCQkJCWJtc19mcmVlKHBhcnRyZWxpbmZvLT5yaV9DaGFuZ2VkSW5kZXhlZENvbHMpOworCQkJ CQlwYXJ0cmVsaW5mby0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xzID0gYm1zX2ludF9tZW1iZXJzKG1v ZGlmaWVkLCBpbmRleGVkKTsKKwkJCQkJYm1zX2ZyZWUoaW5kZXhlZCk7CisKIAkJCQkJRXhlY1Np bXBsZVJlbGF0aW9uVXBkYXRlKHBhcnRyZWxpbmZvLCBlc3RhdGUsICZlcHFzdGF0ZSwKIAkJCQkJ CQkJCQkJIGxvY2Fsc2xvdCwgcmVtb3Rlc2xvdF9wYXJ0KTsKIAkJCQl9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2Fj aGUvcmVsY2FjaGUuYwppbmRleCA5MTVkMGJjOTA4NC4uMzI4MjU1OTZiZTEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvY2FjaGUvcmVsY2FjaGUuYwpAQCAtMjQ4Miw2ICsyNDgyLDcgQEAgUmVsYXRpb25EZXN0cm95 UmVsYXRpb24oUmVsYXRpb24gcmVsYXRpb24sIGJvb2wgcmVtZW1iZXJfdHVwZGVzYykKIAlibXNf ZnJlZShyZWxhdGlvbi0+cmRfaWRhdHRyKTsKIAlibXNfZnJlZShyZWxhdGlvbi0+cmRfaG90Ymxv Y2tpbmdhdHRyKTsKIAlibXNfZnJlZShyZWxhdGlvbi0+cmRfc3VtbWFyaXplZGF0dHIpOworCWJt c19mcmVlKHJlbGF0aW9uLT5yZF9pbmRleGVkYXR0cik7CiAJaWYgKHJlbGF0aW9uLT5yZF9wdWJk ZXNjKQogCQlwZnJlZShyZWxhdGlvbi0+cmRfcHViZGVzYyk7CiAJaWYgKHJlbGF0aW9uLT5yZF9v cHRpb25zKQpAQCAtNTI4Myw2ICs1Mjg0LDcgQEAgUmVsYXRpb25HZXRJbmRleFByZWRpY2F0ZShS ZWxhdGlvbiByZWxhdGlvbikKICAqCQkJCQkJCQkJaW5kZXggKGVtcHR5IGlmIEZVTEwpCiAgKglJ TkRFWF9BVFRSX0JJVE1BUF9IT1RfQkxPQ0tJTkcJQ29sdW1ucyB0aGF0IGJsb2NrIHVwZGF0ZXMg ZnJvbSBiZWluZyBIT1QKICAqCUlOREVYX0FUVFJfQklUTUFQX1NVTU1BUklaRUQJQ29sdW1ucyBp bmNsdWRlZCBpbiBzdW1tYXJpemluZyBpbmRleGVzCisgKglJTkRFWF9BVFRSX0JJVE1BUF9JTkRF WEVECQlDb2x1bW5zIHJlZmVyZW5jZWQgYnkgaW5kZXhlcwogICoKICAqIEF0dHJpYnV0ZSBudW1i ZXJzIGFyZSBvZmZzZXQgYnkgRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlciBzbyB0 aGF0CiAgKiB3ZSBjYW4gaW5jbHVkZSBzeXN0ZW0gYXR0cmlidXRlcyAoZS5nLiwgT0lEKSBpbiB0 aGUgYml0bWFwIHJlcHJlc2VudGF0aW9uLgpAQCAtNTMwNyw2ICs1MzA5LDcgQEAgUmVsYXRpb25H ZXRJbmRleEF0dHJCaXRtYXAoUmVsYXRpb24gcmVsYXRpb24sIEluZGV4QXR0ckJpdG1hcEtpbmQg YXR0cktpbmQpCiAJQml0bWFwc2V0ICAqaWRpbmRleGF0dHJzOwkvKiBjb2x1bW5zIGluIHRoZSBy ZXBsaWNhIGlkZW50aXR5ICovCiAJQml0bWFwc2V0ICAqaG90YmxvY2tpbmdhdHRyczsJLyogY29s dW1ucyB3aXRoIEhPVCBibG9ja2luZyBpbmRleGVzICovCiAJQml0bWFwc2V0ICAqc3VtbWFyaXpl ZGF0dHJzOwkvKiBjb2x1bW5zIHdpdGggc3VtbWFyaXppbmcgaW5kZXhlcyAqLworCUJpdG1hcHNl dCAgKmluZGV4ZWRhdHRyczsJLyogY29sdW1ucyByZWZlcmVuY2VkIGJ5IGluZGV4ZXMgKi8KIAlM aXN0CSAgICppbmRleG9pZGxpc3Q7CiAJTGlzdAkgICAqbmV3aW5kZXhvaWRsaXN0OwogCU9pZAkJ CXJlbHBraW5kZXg7CkBAIC01MzI5LDYgKzUzMzIsOCBAQCBSZWxhdGlvbkdldEluZGV4QXR0ckJp dG1hcChSZWxhdGlvbiByZWxhdGlvbiwgSW5kZXhBdHRyQml0bWFwS2luZCBhdHRyS2luZCkKIAkJ CQlyZXR1cm4gYm1zX2NvcHkocmVsYXRpb24tPnJkX2hvdGJsb2NraW5nYXR0cik7CiAJCQljYXNl IElOREVYX0FUVFJfQklUTUFQX1NVTU1BUklaRUQ6CiAJCQkJcmV0dXJuIGJtc19jb3B5KHJlbGF0 aW9uLT5yZF9zdW1tYXJpemVkYXR0cik7CisJCQljYXNlIElOREVYX0FUVFJfQklUTUFQX0lOREVY RUQ6CisJCQkJcmV0dXJuIGJtc19jb3B5KHJlbGF0aW9uLT5yZF9pbmRleGVkYXR0cik7CiAJCQlk ZWZhdWx0OgogCQkJCWVsb2coRVJST1IsICJ1bmtub3duIGF0dHJLaW5kICV1IiwgYXR0cktpbmQp OwogCQl9CkBAIC01MzczLDYgKzUzNzgsNyBAQCByZXN0YXJ0OgogCWlkaW5kZXhhdHRycyA9IE5V TEw7CiAJaG90YmxvY2tpbmdhdHRycyA9IE5VTEw7CiAJc3VtbWFyaXplZGF0dHJzID0gTlVMTDsK KwlpbmRleGVkYXR0cnMgPSBOVUxMOwogCWZvcmVhY2gobCwgaW5kZXhvaWRsaXN0KQogCXsKIAkJ T2lkCQkJaW5kZXhPaWQgPSBsZmlyc3Rfb2lkKGwpOwpAQCAtNTUwNSwxMCArNTUxMSwxNCBAQCBy ZXN0YXJ0OgogCQlibXNfZnJlZShpZGluZGV4YXR0cnMpOwogCQlibXNfZnJlZShob3RibG9ja2lu Z2F0dHJzKTsKIAkJYm1zX2ZyZWUoc3VtbWFyaXplZGF0dHJzKTsKKwkJYm1zX2ZyZWUoaW5kZXhl ZGF0dHJzKTsKIAogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCisJLyogQ29tYmluZSBhbGwgaW5kZXgg YXR0cmlidXRlcyAqLworCWluZGV4ZWRhdHRycyA9IGJtc191bmlvbihob3RibG9ja2luZ2F0dHJz LCBzdW1tYXJpemVkYXR0cnMpOworCiAJLyogRG9uJ3QgbGVhayB0aGUgb2xkIHZhbHVlcyBvZiB0 aGVzZSBiaXRtYXBzLCBpZiBhbnkgKi8KIAlyZWxhdGlvbi0+cmRfYXR0cnN2YWxpZCA9IGZhbHNl OwogCWJtc19mcmVlKHJlbGF0aW9uLT5yZF9rZXlhdHRyKTsKQEAgLTU1MjEsNiArNTUzMSw4IEBA IHJlc3RhcnQ6CiAJcmVsYXRpb24tPnJkX2hvdGJsb2NraW5nYXR0ciA9IE5VTEw7CiAJYm1zX2Zy ZWUocmVsYXRpb24tPnJkX3N1bW1hcml6ZWRhdHRyKTsKIAlyZWxhdGlvbi0+cmRfc3VtbWFyaXpl ZGF0dHIgPSBOVUxMOworCWJtc19mcmVlKHJlbGF0aW9uLT5yZF9pbmRleGVkYXR0cik7CisJcmVs YXRpb24tPnJkX2luZGV4ZWRhdHRyID0gTlVMTDsKIAogCS8qCiAJICogTm93IHNhdmUgY29waWVz IG9mIHRoZSBiaXRtYXBzIGluIHRoZSByZWxjYWNoZSBlbnRyeS4gIFdlIGludGVudGlvbmFsbHkK QEAgLTU1MzUsNiArNTU0Nyw3IEBAIHJlc3RhcnQ6CiAJcmVsYXRpb24tPnJkX2lkYXR0ciA9IGJt c19jb3B5KGlkaW5kZXhhdHRycyk7CiAJcmVsYXRpb24tPnJkX2hvdGJsb2NraW5nYXR0ciA9IGJt c19jb3B5KGhvdGJsb2NraW5nYXR0cnMpOwogCXJlbGF0aW9uLT5yZF9zdW1tYXJpemVkYXR0ciA9 IGJtc19jb3B5KHN1bW1hcml6ZWRhdHRycyk7CisJcmVsYXRpb24tPnJkX2luZGV4ZWRhdHRyID0g Ym1zX2NvcHkoaW5kZXhlZGF0dHJzKTsKIAlyZWxhdGlvbi0+cmRfYXR0cnN2YWxpZCA9IHRydWU7 CiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CiAKQEAgLTU1NTEsNiArNTU2NCw4IEBA IHJlc3RhcnQ6CiAJCQlyZXR1cm4gaG90YmxvY2tpbmdhdHRyczsKIAkJY2FzZSBJTkRFWF9BVFRS X0JJVE1BUF9TVU1NQVJJWkVEOgogCQkJcmV0dXJuIHN1bW1hcml6ZWRhdHRyczsKKwkJY2FzZSBJ TkRFWF9BVFRSX0JJVE1BUF9JTkRFWEVEOgorCQkJcmV0dXJuIGluZGV4ZWRhdHRyczsKIAkJZGVm YXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bmtub3duIGF0dHJLaW5kICV1IiwgYXR0cktpbmQpOwog CQkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCmluZGV4IDYzZGQ0MWMxZjIxLi45YmRmNzNlZGE1 OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKKysrIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL2FtYXBpLmgKQEAgLTIxMSw2ICsyMTEsMzMgQEAgdHlwZWRlZiB2b2lkICgqYW1t YXJrcG9zX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIC8qIHJlc3RvcmUgbWFya2Vk IHNjYW4gcG9zaXRpb24gKi8KIHR5cGVkZWYgdm9pZCAoKmFtcmVzdHJwb3NfZnVuY3Rpb24pIChJ bmRleFNjYW5EZXNjIHNjYW4pOwogCisvKgorICogYW1jb21wYXJlZGF0dW1zIC0gQ29tcGFyZSBk YXR1bXMgdG8gZGV0ZXJtaW5lIGlmIGluZGV4IHVwZGF0ZSBpcyBuZWVkZWQKKyAqCisgKiBUaGlz IGZ1bmN0aW9uIGNvbXBhcmVzIG9sZF9kYXR1bSBhbmQgbmV3X2RhdHVtIHRvIGRldGVybWluZSBp ZiB0aGV5IHdvdWxkCisgKiBwcm9kdWNlIGRpZmZlcmVudCBpbmRleCBlbnRyaWVzLiBGb3IgZXh0 cmFjdGlvbi1iYXNlZCBpbmRleGVzIChHSU4sIFJVTSksCisgKiB0aGlzIHNob3VsZDoKKyAqICAx LiBFeHRyYWN0IGtleXMgZnJvbSBvbGRfZGF0dW0gdXNpbmcgdGhlIG9wY2xhc3MncyBleHRyYWN0 VmFsdWUgZnVuY3Rpb24KKyAqICAyLiBFeHRyYWN0IGtleXMgZnJvbSBuZXdfZGF0dW0gdXNpbmcg dGhlIG9wY2xhc3MncyBleHRyYWN0VmFsdWUgZnVuY3Rpb24KKyAqICAzLiBDb21wYXJlIHRoZSB0 d28gc2V0cyBvZiBrZXlzIHVzaW5nIGFwcHJvcHJpYXRlIGVxdWFsaXR5IG9wZXJhdG9ycworICog IDQuIFJldHVybiB0cnVlIGlmIHRoZSBzZXRzIGFyZSBlcXVhbCAobm8gaW5kZXggdXBkYXRlIG5l ZWRlZCkKKyAqCisgKiBUaGUgY29tcGFyaXNvbiBzaG91bGQgYWNjb3VudCBmb3I6CisgKiAgLSBE aWZmZXJlbnQgbnVtYmVycyBvZiBleHRyYWN0ZWQga2V5cworICogIC0gTlVMTCB2YWx1ZXMKKyAq ICAtIFR5cGUtc3BlY2lmaWMgZXF1YWxpdHkgKG5vdCBqdXN0IGJpbmFyeSBlcXVhbGl0eSkKKyAq ICAtIE9wY2xhc3MgcGFyYW1ldGVycyAoZS5nLiwgcGF0aCBpbiBic29uX3J1bV9zaW5nbGVfcGF0 aF9vcHMpCisgKgorICogRm9yIHRoZSBEb2N1bWVudERCIGV4YW1wbGUgd2l0aCBwYXRoPSdhJywg dGhpcyB3b3VsZCBleHRyYWN0IHZhbHVlcyBhdAorICogcGF0aCAnYScgZnJvbSBib3RoIG9sZCBh bmQgbmV3IEJTT04gZG9jdW1lbnRzIGFuZCBjb21wYXJlIHRoZW0gdXNpbmcKKyAqIEJTT04ncyBl cXVhbGl0eSBvcGVyYXRvci4KKyAqLworLyogaWRlbnRpZnkgaWYgdXBkYXRlZCBkYXR1bXMgd291 bGQgcHJvZHVjZSBvbmUgb3IgbW9yZSBpbmRleCBlbnRyaWVzICovCit0eXBlZGVmIGJvb2wgKCph bWNvbXBhcmVkYXR1bXNfZnVuY3Rpb24pIChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAorCQkJCQkJ CQkJCSAgaW50IGF0dG5vLAorCQkJCQkJCQkJCSAgRGF0dW0gb2xkX2RhdHVtLCBib29sIG9sZF9p c251bGwsCisJCQkJCQkJCQkJICBEYXR1bSBuZXdfZGF0dW0sIGJvb2wgbmV3X2lzbnVsbCk7CisK IC8qCiAgKiBDYWxsYmFjayBmdW5jdGlvbiBzaWduYXR1cmVzIC0gZm9yIHBhcmFsbGVsIGluZGV4 IHNjYW5zLgogICovCkBAIC0zMTMsNiArMzQwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhBbVJv dXRpbmUKIAlhbWVuZHNjYW5fZnVuY3Rpb24gYW1lbmRzY2FuOwogCWFtbWFya3Bvc19mdW5jdGlv biBhbW1hcmtwb3M7CS8qIGNhbiBiZSBOVUxMICovCiAJYW1yZXN0cnBvc19mdW5jdGlvbiBhbXJl c3RycG9zOyAvKiBjYW4gYmUgTlVMTCAqLworCWFtY29tcGFyZWRhdHVtc19mdW5jdGlvbiBhbWNv bXBhcmVkYXR1bXM7CS8qIGNhbiBiZSBOVUxMICovCiAKIAkvKiBpbnRlcmZhY2UgZnVuY3Rpb25z IHRvIHN1cHBvcnQgcGFyYWxsZWwgaW5kZXggc2NhbnMgKi8KIAlhbWVzdGltYXRlcGFyYWxsZWxz Y2FuX2Z1bmN0aW9uIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW47IC8qIGNhbiBiZSBOVUxMICovCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2luLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv Z2luLmgKaW5kZXggMTNlYTkxOTIyZWYuLjJmMjY1ZjQ4MTZjIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9hY2Nlc3MvZ2luLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dpbi5oCkBAIC0xMDAs NiArMTAwLDkgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludCBnaW5fcGVuZGluZ19saXN0X2xpbWl0 OwogZXh0ZXJuIHZvaWQgZ2luR2V0U3RhdHMoUmVsYXRpb24gaW5kZXgsIEdpblN0YXRzRGF0YSAq c3RhdHMpOwogZXh0ZXJuIHZvaWQgZ2luVXBkYXRlU3RhdHMoUmVsYXRpb24gaW5kZXgsIGNvbnN0 IEdpblN0YXRzRGF0YSAqc3RhdHMsCiAJCQkJCQkgICBib29sIGlzX2J1aWxkKTsKK2V4dGVybiBi b29sIGdpbmNvbXBhcmVkYXR1bXMoUmVsYXRpb24gaW5kZXgsIGludCBhdHRudW0sCisJCQkJCQkJ IERhdHVtIG9sZF9kYXR1bSwgYm9vbCBvbGRfaXNudWxsLAorCQkJCQkJCSBEYXR1bSBuZXdfZGF0 dW0sIGJvb2wgbmV3X2lzbnVsbCk7CiAKIGV4dGVybiB2b2lkIF9naW5fcGFyYWxsZWxfYnVpbGRf bWFpbihkc21fc2VnbWVudCAqc2VnLCBzaG1fdG9jICp0b2MpOwogCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5k ZXggMmY5YTJiMDY5Y2QuLjU3ODNkYmViZmYwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nl c3MvaGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0zNjksNyAr MzY5LDcgQEAgZXh0ZXJuIFRNX1Jlc3VsdCBoZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwg SGVhcFR1cGxlRGF0YSAqb2xkdHVwLAogCQkJCQkJCSBUTV9GYWlsdXJlRGF0YSAqdG1mZCwgTG9j a1R1cGxlTW9kZSAqbG9ja21vZGUsIEJ1ZmZlciBidWZmZXIsCiAJCQkJCQkJIFBhZ2UgcGFnZSwg QmxvY2tOdW1iZXIgYmxvY2ssIEl0ZW1JZCBscCwgQml0bWFwc2V0ICpob3RfYXR0cnMsCiAJCQkJ CQkJIEJpdG1hcHNldCAqc3VtX2F0dHJzLCBCaXRtYXBzZXQgKnBrX2F0dHJzLCBCaXRtYXBzZXQg KnJpZF9hdHRycywKLQkJCQkJCQkgQml0bWFwc2V0ICptaXhfYXR0cnMsIEJ1ZmZlciAqdm1idWZm ZXIsCisJCQkJCQkJIGNvbnN0IEJpdG1hcHNldCAqbWl4X2F0dHJzLCBCdWZmZXIgKnZtYnVmZmVy LAogCQkJCQkJCSBib29sIHJlcF9pZF9rZXlfcmVxdWlyZWQsIFRVX1VwZGF0ZUluZGV4ZXMgKnVw ZGF0ZV9pbmRleGVzKTsKIGV4dGVybiBUTV9SZXN1bHQgaGVhcF9sb2NrX3R1cGxlKFJlbGF0aW9u IHJlbGF0aW9uLCBIZWFwVHVwbGUgdHVwbGUsCiAJCQkJCQkJCSBDb21tYW5kSWQgY2lkLCBMb2Nr VHVwbGVNb2RlIG1vZGUsIExvY2tXYWl0UG9saWN5IHdhaXRfcG9saWN5LApAQCAtNDA0LDggKzQw NCw4IEBAIGV4dGVybiBib29sIGhlYXBfdHVwbGVfbmVlZHNfZXZlbnR1YWxfZnJlZXplKEhlYXBU dXBsZUhlYWRlciB0dXBsZSk7CiAKIGV4dGVybiB2b2lkIHNpbXBsZV9oZWFwX2luc2VydChSZWxh dGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHR1cCk7CiBleHRlcm4gdm9pZCBzaW1wbGVfaGVhcF9k ZWxldGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkKTsKLWV4 dGVybiB2b2lkIHNpbXBsZV9oZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRl bVBvaW50ZXJEYXRhICpvdGlkLAotCQkJCQkJCSAgIEhlYXBUdXBsZSB0dXAsIFRVX1VwZGF0ZUlu ZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKTsKK2V4dGVybiBCaXRtYXBzZXQgKnNpbXBsZV9oZWFwX3Vw ZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpvdGlkLAorCQkJ CQkJCQkJIEhlYXBUdXBsZSB0dXAsIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKTsK IAogZXh0ZXJuIFRyYW5zYWN0aW9uSWQgaGVhcF9pbmRleF9kZWxldGVfdHVwbGVzKFJlbGF0aW9u IHJlbCwKIAkJCQkJCQkJCQkJICBUTV9JbmRleERlbGV0ZU9wICpkZWxzdGF0ZSk7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0 cmVlLmgKaW5kZXggMTZiZTVjN2E5YzEuLjQyYmQzMjllYWFkIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9hY2Nlc3MvbmJ0cmVlLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCkBA IC0xMjEwLDYgKzEyMTAsMTAgQEAgZXh0ZXJuIGludAlidGdldHRyZWVoZWlnaHQoUmVsYXRpb24g cmVsKTsKIAogZXh0ZXJuIENvbXBhcmVUeXBlIGJ0dHJhbnNsYXRlc3RyYXRlZ3koU3RyYXRlZ3lO dW1iZXIgc3RyYXRlZ3ksIE9pZCBvcGZhbWlseSk7CiBleHRlcm4gU3RyYXRlZ3lOdW1iZXIgYnR0 cmFuc2xhdGVjbXB0eXBlKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSk7CitleHRl cm4gYm9vbCBidGNvbXBhcmVkYXR1bXMoUmVsYXRpb24gaW5kZXgsIGludCBhdHRudW0sCisJCQkJ CQkJRGF0dW0gb2xkX2RhdHVtLCBib29sIG9sZF9pc251bGwsCisJCQkJCQkJRGF0dW0gbmV3X2Rh dHVtLCBib29sIG5ld19pc251bGwpOworCiAKIC8qCiAgKiBwcm90b3R5cGVzIGZvciBpbnRlcm5h bCBmdW5jdGlvbnMgaW4gbmJ0cmVlLmMKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90 YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCmluZGV4IDJmYTc5MGI2YmY1 Li5kOTRkZmM5YjQxZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAor KysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCkBAIC01NDksNiArNTQ5LDcgQEAgdHlw ZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkJCQkJCQkJIGJvb2wgd2FpdCwKIAkJCQkJCQkJ IFRNX0ZhaWx1cmVEYXRhICp0bWZkLAogCQkJCQkJCQkgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUs CisJCQkJCQkJCSBjb25zdCBCaXRtYXBzZXQgKnVwZGF0ZWRfY29scywKIAkJCQkJCQkJIFRVX1Vw ZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKTsKIAogCS8qIHNlZSB0YWJsZV90dXBsZV9sb2Nr KCkgZm9yIHJlZmVyZW5jZSBhYm91dCBwYXJhbWV0ZXJzICovCkBAIC0xNTEyLDEyICsxNTEzLDEy IEBAIHN0YXRpYyBpbmxpbmUgVE1fUmVzdWx0CiB0YWJsZV90dXBsZV91cGRhdGUoUmVsYXRpb24g cmVsLCBJdGVtUG9pbnRlciBvdGlkLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJCQkgICBDb21t YW5kSWQgY2lkLCBTbmFwc2hvdCBzbmFwc2hvdCwgU25hcHNob3QgY3Jvc3NjaGVjaywKIAkJCQkg ICBib29sIHdhaXQsIFRNX0ZhaWx1cmVEYXRhICp0bWZkLCBMb2NrVHVwbGVNb2RlICpsb2NrbW9k ZSwKLQkJCQkgICBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykKKwkJCQkgICBjb25z dCBCaXRtYXBzZXQgKm1peF9jb2xzLCBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykK IHsKIAlyZXR1cm4gcmVsLT5yZF90YWJsZWFtLT50dXBsZV91cGRhdGUocmVsLCBvdGlkLCBzbG90 LAogCQkJCQkJCQkJCSBjaWQsIHNuYXBzaG90LCBjcm9zc2NoZWNrLAotCQkJCQkJCQkJCSB3YWl0 LCB0bWZkLAotCQkJCQkJCQkJCSBsb2NrbW9kZSwgdXBkYXRlX2luZGV4ZXMpOworCQkJCQkJCQkJ CSB3YWl0LCB0bWZkLCBsb2NrbW9kZSwKKwkJCQkJCQkJCQkgbWl4X2NvbHMsIHVwZGF0ZV9pbmRl eGVzKTsKIH0KIAogLyoKQEAgLTIwMjAsNiArMjAyMSw3IEBAIGV4dGVybiB2b2lkIHNpbXBsZV90 YWJsZV90dXBsZV9kZWxldGUoUmVsYXRpb24gcmVsLCBJdGVtUG9pbnRlciB0aWQsCiAJCQkJCQkJ CQkgIFNuYXBzaG90IHNuYXBzaG90KTsKIGV4dGVybiB2b2lkIHNpbXBsZV90YWJsZV90dXBsZV91 cGRhdGUoUmVsYXRpb24gcmVsLCBJdGVtUG9pbnRlciBvdGlkLAogCQkJCQkJCQkJICBUdXBsZVRh YmxlU2xvdCAqc2xvdCwgU25hcHNob3Qgc25hcHNob3QsCisJCQkJCQkJCQkgIGNvbnN0IEJpdG1h cHNldCAqbWl4X2F0dHJzLAogCQkJCQkJCQkJICBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5k ZXhlcyk7CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oIGIvc3Jj L2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oCmluZGV4IGRkYTk1ZTU0OTAzLi44ZDM2NGY4YjMwZiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oCisrKyBiL3NyYy9pbmNsdWRl L2NhdGFsb2cvaW5kZXguaApAQCAtMTMyLDYgKzEzMiw3IEBAIGV4dGVybiBib29sIENvbXBhcmVJ bmRleEluZm8oY29uc3QgSW5kZXhJbmZvICppbmZvMSwgY29uc3QgSW5kZXhJbmZvICppbmZvMiwK IAkJCQkJCQkgY29uc3QgQXR0ck1hcCAqYXR0bWFwKTsKIAogZXh0ZXJuIHZvaWQgQnVpbGRTcGVj dWxhdGl2ZUluZGV4SW5mbyhSZWxhdGlvbiBpbmRleCwgSW5kZXhJbmZvICppaSk7CitleHRlcm4g dm9pZCBCdWlsZFVwZGF0ZUluZGV4SW5mbyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvKTsK IAogZXh0ZXJuIHZvaWQgRm9ybUluZGV4RGF0dW0oSW5kZXhJbmZvICppbmRleEluZm8sCiAJCQkJ CQkgICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1 dG9yL2V4ZWN1dG9yLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCmluZGV4IGZh MmI2NTdmYjJmLi4yYjg1MWQ5OTY0YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY3V0b3IuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCkBAIC03Mzks NiArNzM5LDExIEBAIGV4dGVybiBCaXRtYXBzZXQgKkV4ZWNHZXRBbGxVcGRhdGVkQ29scyhSZXN1 bHRSZWxJbmZvICpyZWxpbmZvLCBFU3RhdGUgKmVzdGF0ZSk7CiAgKi8KIGV4dGVybiB2b2lkIEV4 ZWNPcGVuSW5kaWNlcyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLCBib29sIHNwZWN1bGF0 aXZlKTsKIGV4dGVybiB2b2lkIEV4ZWNDbG9zZUluZGljZXMoUmVzdWx0UmVsSW5mbyAqcmVzdWx0 UmVsSW5mbyk7CitleHRlcm4gQml0bWFwc2V0ICpFeGVjV2hpY2hJbmRleGVzUmVxdWlyZVVwZGF0 ZXMoUmVzdWx0UmVsSW5mbyAqcmVsaW5mbywKKwkJCQkJCQkJCQkJCSBCaXRtYXBzZXQgKm1peF9h dHRycywKKwkJCQkJCQkJCQkJCSBFU3RhdGUgKmVzdGF0ZSwKKwkJCQkJCQkJCQkJCSBUdXBsZVRh YmxlU2xvdCAqb2xkX3R0cywKKwkJCQkJCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqbmV3X3R0cyk7 CiBleHRlcm4gTGlzdCAqRXhlY0luc2VydEluZGV4VHVwbGVzKFJlc3VsdFJlbEluZm8gKnJlc3Vs dFJlbEluZm8sCiAJCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90LCBFU3RhdGUgKmVzdGF0 ZSwKIAkJCQkJCQkJICAgYm9vbCB1cGRhdGUsCkBAIC04MDAsNSArODA1LDkgQEAgZXh0ZXJuIFJl c3VsdFJlbEluZm8gKkV4ZWNMb29rdXBSZXN1bHRSZWxCeU9pZChNb2RpZnlUYWJsZVN0YXRlICpu b2RlLAogCQkJCQkJCQkJCQkgICBPaWQgcmVzdWx0b2lkLAogCQkJCQkJCQkJCQkgICBib29sIG1p c3Npbmdfb2ssCiAJCQkJCQkJCQkJCSAgIGJvb2wgdXBkYXRlX2NhY2hlKTsKK2V4dGVybiBCaXRt YXBzZXQgKkV4ZWNDaGVja0luZGV4ZWRBdHRyc0ZvckNoYW5nZXMoUmVzdWx0UmVsSW5mbyAqcmVs aW5mbywKKwkJCQkJCQkJCQkJCSAgRVN0YXRlICplc3RhdGUsCisJCQkJCQkJCQkJCQkgIFR1cGxl VGFibGVTbG90ICpvbGRfdHRzLAorCQkJCQkJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqbmV3X3R0 cyk7CiAKICNlbmRpZgkJCQkJCQkvKiBFWEVDVVRPUl9IICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApp bmRleCA2NGZmNjk5NjQzMS4uZTEwZjQyMzlkZTkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25v ZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC0x NzQsMTUgKzE3NCwyOSBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEluZm8KIAkgKi8KIAlBdHRyTnVt YmVyCWlpX0luZGV4QXR0ck51bWJlcnNbSU5ERVhfTUFYX0tFWVNdOwogCisJLyoKKwkgKiBBbGwg a2V5LCBleHByZXNzaW9uLCBzdW1hcml6aW5nLCBhbmQgcGFydGl0aW9uIGF0dHJpYnV0ZXMgcmVm ZXJlbmNlZCBieQorCSAqIHRoaXMgaW5kZXgKKwkgKi8KKwlCaXRtYXBzZXQgICppaV9JbmRleGVk QXR0cnM7CisKIAkvKiBleHByIHRyZWVzIGZvciBleHByZXNzaW9uIGVudHJpZXMsIG9yIE5JTCBp ZiBub25lICovCiAJTGlzdAkgICAqaWlfRXhwcmVzc2lvbnM7IC8qIGxpc3Qgb2YgRXhwciAqLwog CS8qIGV4ZWMgc3RhdGUgZm9yIGV4cHJlc3Npb25zLCBvciBOSUwgaWYgbm9uZSAqLwogCUxpc3QJ ICAgKmlpX0V4cHJlc3Npb25zU3RhdGU7CS8qIGxpc3Qgb2YgRXhwclN0YXRlICovCisJLyogYXR0 cmlidXRlcyBleGNsdXNpdmVseSByZWZlcmVuY2VkIGJ5IGV4cHJlc3Npb24gaW5kZXhlcyAqLwor CUJpdG1hcHNldCAgKmlpX0V4cHJlc3Npb25zQXR0cnM7CiAKIAkvKiBwYXJ0aWFsLWluZGV4IHBy ZWRpY2F0ZSwgb3IgTklMIGlmIG5vbmUgKi8KIAlMaXN0CSAgICppaV9QcmVkaWNhdGU7CS8qIGxp c3Qgb2YgRXhwciAqLwogCS8qIGV4ZWMgc3RhdGUgZm9yIGV4cHJlc3Npb25zLCBvciBOSUwgaWYg bm9uZSAqLwogCUV4cHJTdGF0ZSAgKmlpX1ByZWRpY2F0ZVN0YXRlOworCS8qIGF0dHJpYnV0ZXMg cmVmZXJlbmNlZCBieSB0aGUgcHJlZGljYXRlICovCisJQml0bWFwc2V0ICAqaWlfUHJlZGljYXRl QXR0cnM7CisJLyogcGFydGlhbCBpbmRleCBwcmVkaWNhdGUgZGV0ZXJtaW5lZCB5ZXQ/ICovCisJ Ym9vbAkJaWlfQ2hlY2tlZFByZWRpY2F0ZTsKKwkvKiBhbXVwZGF0ZSBoaW50IHVzZWQgdG8gYXZv aWQgcmVjaGVja2luZyBwcmVkaWNhdGUgKi8KKwlib29sCQlpaV9QcmVkaWNhdGVTYXRpc2ZpZWQ7 CiAKIAkvKiBQZXItY29sdW1uIGV4Y2x1c2lvbiBvcGVyYXRvcnMsIG9yIE5VTEwgaWYgbm9uZSAq LwogCU9pZAkJICAgKmlpX0V4Y2x1c2lvbk9wczsJLyogYXJyYXkgd2l0aCBvbmUgZW50cnkgcGVy IGNvbHVtbiAqLwpAQCAtNDk5LDYgKzUxMywxMiBAQCB0eXBlZGVmIHN0cnVjdCBSZXN1bHRSZWxJ bmZvCiAJLyogdHJ1ZSBpZiB0aGUgYWJvdmUgaGFzIGJlZW4gY29tcHV0ZWQgKi8KIAlib29sCQly aV9leHRyYVVwZGF0ZWRDb2xzX3ZhbGlkOwogCisJLyoKKwkgKiBGb3IgVVBEQVRFIGEgQml0bWFw c2V0IG9mIHRoZSBhdHRyaWJ1dGVzIHRoYXQgYXJlIGJvdGggaW5kZXhlZCBhbmQgaGF2ZQorCSAq IGNoYW5nZWQgaW4gdmFsdWUuCisJICovCisJQml0bWFwc2V0ICAqcmlfQ2hhbmdlZEluZGV4ZWRD b2xzOworCiAJLyogUHJvamVjdGlvbiB0byBnZW5lcmF0ZSBuZXcgdHVwbGUgaW4gYW4gSU5TRVJU L1VQREFURSAqLwogCVByb2plY3Rpb25JbmZvICpyaV9wcm9qZWN0TmV3OwogCS8qIFNsb3QgdG8g aG9sZCB0aGF0IHR1cGxlICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9yZWwuaCBi L3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCmluZGV4IDgwMjg2MDc2YTExLi5iMjNhNzMwNmU2OSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRp bHMvcmVsLmgKQEAgLTE2NCw2ICsxNjQsNyBAQCB0eXBlZGVmIHN0cnVjdCBSZWxhdGlvbkRhdGEK IAlCaXRtYXBzZXQgICpyZF9pZGF0dHI7CQkvKiBpbmNsdWRlZCBpbiByZXBsaWNhIGlkZW50aXR5 IGluZGV4ICovCiAJQml0bWFwc2V0ICAqcmRfaG90YmxvY2tpbmdhdHRyOyAvKiBjb2xzIGJsb2Nr aW5nIEhPVCB1cGRhdGUgKi8KIAlCaXRtYXBzZXQgICpyZF9zdW1tYXJpemVkYXR0cjsJLyogY29s cyBpbmRleGVkIGJ5IHN1bW1hcml6aW5nIGluZGV4ZXMgKi8KKwlCaXRtYXBzZXQgICpyZF9pbmRl eGVkYXR0cjsgLyogYWxsIGNvbHMgcmVmZXJlbmNlZCBieSBpbmRleGVzICovCiAKIAlQdWJsaWNh dGlvbkRlc2MgKnJkX3B1YmRlc2M7CS8qIHB1YmxpY2F0aW9uIGRlc2NyaXB0b3IsIG9yIE5VTEwg Ki8KIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsY2FjaGUuaCBiL3NyYy9pbmNs dWRlL3V0aWxzL3JlbGNhY2hlLmgKaW5kZXggMzU2MWM2YmVmMGIuLmQzZmJiOGIwOTNhIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9yZWxjYWNoZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0 aWxzL3JlbGNhY2hlLmgKQEAgLTcxLDYgKzcxLDcgQEAgdHlwZWRlZiBlbnVtIEluZGV4QXR0ckJp dG1hcEtpbmQKIAlJTkRFWF9BVFRSX0JJVE1BUF9JREVOVElUWV9LRVksCiAJSU5ERVhfQVRUUl9C SVRNQVBfSE9UX0JMT0NLSU5HLAogCUlOREVYX0FUVFJfQklUTUFQX1NVTU1BUklaRUQsCisJSU5E RVhfQVRUUl9CSVRNQVBfSU5ERVhFRCwKIH0gSW5kZXhBdHRyQml0bWFwS2luZDsKIAogZXh0ZXJu IEJpdG1hcHNldCAqUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAoUmVsYXRpb24gcmVsYXRpb24s CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvaW5zZXJ0LWNvbmZsaWN0 LXNwZWNjb25mbGljdC5vdXQgYi9zcmMvdGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvaW5zZXJ0LWNv bmZsaWN0LXNwZWNjb25mbGljdC5vdXQKaW5kZXggZTM0YTgyMWM0MDMuLjU0YjM5ODE5MThjIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvaW5zZXJ0LWNvbmZsaWN0LXNw ZWNjb25mbGljdC5vdXQKKysrIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL2luc2VydC1j b25mbGljdC1zcGVjY29uZmxpY3Qub3V0CkBAIC04MCw2ICs4MCwxMCBAQCBwZ19hZHZpc29yeV91 bmxvY2sKIHQgICAgICAgICAgICAgICAgIAogKDEgcm93KQogCitzMTogTk9USUNFOiAgYmx1cnRf YW5kX2xvY2tfMTIzKCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9uIDEKK3MxOiBOT1RJQ0U6ICBh Y3F1aXJpbmcgYWR2aXNvcnkgbG9jayBvbiAyCitzMTogTk9USUNFOiAgYmx1cnRfYW5kX2xvY2tf MTIzKCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9uIDEKK3MxOiBOT1RJQ0U6ICBhY3F1aXJpbmcg YWR2aXNvcnkgbG9jayBvbiAyCiBzMTogTk9USUNFOiAgYmx1cnRfYW5kX2xvY2tfMTIzKCkgY2Fs bGVkIGZvciBrMSBpbiBzZXNzaW9uIDEKIHMxOiBOT1RJQ0U6ICBhY3F1aXJpbmcgYWR2aXNvcnkg bG9jayBvbiAyCiBzMTogTk9USUNFOiAgYmx1cnRfYW5kX2xvY2tfMTIzKCkgY2FsbGVkIGZvciBr MSBpbiBzZXNzaW9uIDEKQEAgLTE3Miw2ICsxNzYsMTAgQEAgcGdfYWR2aXNvcnlfdW5sb2NrCiB0 ICAgICAgICAgICAgICAgICAKICgxIHJvdykKIAorczI6IE5PVElDRTogIGJsdXJ0X2FuZF9sb2Nr XzEyMygpIGNhbGxlZCBmb3IgazEgaW4gc2Vzc2lvbiAyCitzMjogTk9USUNFOiAgYWNxdWlyaW5n IGFkdmlzb3J5IGxvY2sgb24gMgorczI6IE5PVElDRTogIGJsdXJ0X2FuZF9sb2NrXzEyMygpIGNh bGxlZCBmb3IgazEgaW4gc2Vzc2lvbiAyCitzMjogTk9USUNFOiAgYWNxdWlyaW5nIGFkdmlzb3J5 IGxvY2sgb24gMgogczI6IE5PVElDRTogIGJsdXJ0X2FuZF9sb2NrXzEyMygpIGNhbGxlZCBmb3Ig azEgaW4gc2Vzc2lvbiAyCiBzMjogTk9USUNFOiAgYWNxdWlyaW5nIGFkdmlzb3J5IGxvY2sgb24g MgogczI6IE5PVElDRTogIGJsdXJ0X2FuZF9sb2NrXzEyMygpIGNhbGxlZCBmb3IgazEgaW4gc2Vz c2lvbiAyCkBAIC0zNjksNiArMzc3LDEwIEBAIGtleXxkYXRhCiBzdGVwIHMxX2NvbW1pdDogQ09N TUlUOwogczI6IE5PVElDRTogIGJsdXJ0X2FuZF9sb2NrXzEyMygpIGNhbGxlZCBmb3IgazEgaW4g c2Vzc2lvbiAyCiBzMjogTk9USUNFOiAgYWNxdWlyaW5nIGFkdmlzb3J5IGxvY2sgb24gMgorczI6 IE5PVElDRTogIGJsdXJ0X2FuZF9sb2NrXzEyMygpIGNhbGxlZCBmb3IgazEgaW4gc2Vzc2lvbiAy CitzMjogTk9USUNFOiAgYWNxdWlyaW5nIGFkdmlzb3J5IGxvY2sgb24gMgorczI6IE5PVElDRTog IGJsdXJ0X2FuZF9sb2NrXzEyMygpIGNhbGxlZCBmb3IgazEgaW4gc2Vzc2lvbiAyCitzMjogTk9U SUNFOiAgYWNxdWlyaW5nIGFkdmlzb3J5IGxvY2sgb24gMgogc3RlcCBzMl91cHNlcnQ6IDwuLi4g Y29tcGxldGVkPgogc3RlcCBjb250cm9sbGVyX3Nob3c6IFNFTEVDVCAqIEZST00gdXBzZXJ0dGVz dDsKIGtleXxkYXRhICAgICAgIApAQCAtNTMwLDYgKzU0MiwxNCBAQCBpc29sYXRpb24vaW5zZXJ0 LWNvbmZsaWN0LXNwZWNjb25mbGljdC9zMnx0cmFuc2FjdGlvbmlkfEV4Y2x1c2l2ZUxvY2t8dAog c3RlcCBzMl9jb21taXQ6IENPTU1JVDsKIHMxOiBOT1RJQ0U6ICBibHVydF9hbmRfbG9ja18xMjMo KSBjYWxsZWQgZm9yIGsxIGluIHNlc3Npb24gMQogczE6IE5PVElDRTogIGFjcXVpcmluZyBhZHZp c29yeSBsb2NrIG9uIDIKK3MxOiBOT1RJQ0U6ICBibHVydF9hbmRfbG9ja18xMjMoKSBjYWxsZWQg Zm9yIGsxIGluIHNlc3Npb24gMQorczE6IE5PVElDRTogIGFjcXVpcmluZyBhZHZpc29yeSBsb2Nr IG9uIDIKK3MxOiBOT1RJQ0U6ICBibHVydF9hbmRfbG9ja18xMjMoKSBjYWxsZWQgZm9yIGsxIGlu IHNlc3Npb24gMQorczE6IE5PVElDRTogIGFjcXVpcmluZyBhZHZpc29yeSBsb2NrIG9uIDIKK3Mx OiBOT1RJQ0U6ICBibHVydF9hbmRfbG9ja180KCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9uIDEK K3MxOiBOT1RJQ0U6ICBhY3F1aXJpbmcgYWR2aXNvcnkgbG9jayBvbiA0CitzMTogTk9USUNFOiAg Ymx1cnRfYW5kX2xvY2tfNCgpIGNhbGxlZCBmb3IgazEgaW4gc2Vzc2lvbiAxCitzMTogTk9USUNF OiAgYWNxdWlyaW5nIGFkdmlzb3J5IGxvY2sgb24gNAogc3RlcCBzMV91cHNlcnQ6IDwuLi4gY29t cGxldGVkPgogc3RlcCBzMV9ub29wOiAKIHN0ZXAgY29udHJvbGxlcl9zaG93OiBTRUxFQ1QgKiBG Uk9NIHVwc2VydHRlc3Q7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2hl YXBfaG90X3VwZGF0ZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9oZWFwX2hvdF91 cGRhdGVzLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTQyNzZl M2NiY2EKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2hlYXBf aG90X3VwZGF0ZXMub3V0CkBAIC0wLDAgKzEsNjUwIEBACistLSA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBUZXN0IFN1 aXRlIGZvciBIZWFwLW9ubHkgKEhPVCkgVXBkYXRlcworLS0gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gU2V0dXA6IENy ZWF0ZSBmdW5jdGlvbiB0byBtZWFzdXJlIEhPVCB1cGRhdGVzCitDUkVBVEUgT1IgUkVQTEFDRSBG VU5DVElPTiBjaGVja19ob3RfdXBkYXRlcygKKyAgICBleHBlY3RlZCBJTlQsCisgICAgcF90YWJs ZV9uYW1lIFRFWFQgREVGQVVMVCAndCcsCisgICAgcF9zY2hlbWFfbmFtZSBURVhUIERFRkFVTFQg Y3VycmVudF9zY2hlbWEoKQorKQorUkVUVVJOUyBUQUJMRSAoCisgICAgdGFibGVfbmFtZSBURVhU LAorICAgIHRvdGFsX3VwZGF0ZXMgQklHSU5ULAorICAgIGhvdF91cGRhdGVzIEJJR0lOVCwKKyAg ICBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgTlVNRVJJQywKKyAgICBtYXRjaGVzX2V4cGVjdGVkIEJP T0xFQU4KKykKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQkCitERUNMQVJFCisgICAgdl9yZWxpZCBv aWQ7CisgICAgdl9xdWFsaWZpZWRfbmFtZSBURVhUOworICAgIHZfaG90X3VwZGF0ZXMgQklHSU5U OworICAgIHZfdXBkYXRlcyBCSUdJTlQ7CisgICAgdl94YWN0X2hvdF91cGRhdGVzIEJJR0lOVDsK KyAgICB2X3hhY3RfdXBkYXRlcyBCSUdJTlQ7CitCRUdJTgorICAgIC0tIEZvcmNlIHN0YXRpc3Rp Y3MgdXBkYXRlCisgICAgUEVSRk9STSBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2goKTsKKworICAg IC0tIEdldCB0YWJsZSBPSUQKKyAgICB2X3F1YWxpZmllZF9uYW1lIDo9IHF1b3RlX2lkZW50KHBf c2NoZW1hX25hbWUpIHx8ICcuJyB8fCBxdW90ZV9pZGVudChwX3RhYmxlX25hbWUpOworICAgIHZf cmVsaWQgOj0gdl9xdWFsaWZpZWRfbmFtZTo6cmVnY2xhc3M7CisKKyAgICBJRiB2X3JlbGlkIElT IE5VTEwgVEhFTgorCVJBSVNFIEVYQ0VQVElPTiAnVGFibGUgJS4lIG5vdCBmb3VuZCcsIHBfc2No ZW1hX25hbWUsIHBfdGFibGVfbmFtZTsKKyAgICBFTkQgSUY7CisKKyAgICAtLSBHZXQgY3VtdWxh dGl2ZSArIHRyYW5zYWN0aW9uIHN0YXRzCisgICAgdl9ob3RfdXBkYXRlcyA6PSBDT0FMRVNDRShw Z19zdGF0X2dldF90dXBsZXNfaG90X3VwZGF0ZWQodl9yZWxpZCksIDApOworICAgIHZfdXBkYXRl cyA6PSBDT0FMRVNDRShwZ19zdGF0X2dldF90dXBsZXNfdXBkYXRlZCh2X3JlbGlkKSwgMCk7Cisg ICAgdl94YWN0X2hvdF91cGRhdGVzIDo9IENPQUxFU0NFKHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVz X2hvdF91cGRhdGVkKHZfcmVsaWQpLCAwKTsKKyAgICB2X3hhY3RfdXBkYXRlcyA6PSBDT0FMRVND RShwZ19zdGF0X2dldF94YWN0X3R1cGxlc191cGRhdGVkKHZfcmVsaWQpLCAwKTsKKworICAgIHZf aG90X3VwZGF0ZXMgOj0gdl9ob3RfdXBkYXRlcyArIHZfeGFjdF9ob3RfdXBkYXRlczsKKyAgICB2 X3VwZGF0ZXMgOj0gdl91cGRhdGVzICsgdl94YWN0X3VwZGF0ZXM7CisKKyAgICBSRVRVUk4gUVVF UlkKKyAgICBTRUxFQ1QKKwlwX3RhYmxlX25hbWU6OlRFWFQsCisJdl91cGRhdGVzOjpCSUdJTlQs CisJdl9ob3RfdXBkYXRlczo6QklHSU5ULAorCUNBU0UgV0hFTiB2X3VwZGF0ZXMgPiAwCisJICAg ICBUSEVOIFJPVU5EKCh2X2hvdF91cGRhdGVzOjpudW1lcmljIC8gdl91cGRhdGVzOjpudW1lcmlj ICogMTAwKTo6bnVtZXJpYywgMikKKwkgICAgIEVMU0UgMAorCUVORCwKKwkodl9ob3RfdXBkYXRl cyA9IGV4cGVjdGVkKTo6Qk9PTEVBTjsKK0VORDsKKyQkOworQ1JFQVRFIENPTExBVElPTiBjYXNl X2luc2Vuc2l0aXZlICgKKyAgICBwcm92aWRlciA9IGxpYmMsCisgICAgbG9jYWxlID0gJ0MnCisp OworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorLS0gR0lOIEluZGV4IG9uIEpTT05CCistLSA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUg VEFCTEUgdChpZCBJTlQsIGRhdGEgSlNPTkIpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVk ID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfZ2luX2lkeCBPTiB0IFVT SU5HIGdpbihkYXRhKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAneyJ0YWdzIjogWyJwb3N0 Z3JlcyIsICJkYXRhYmFzZSJdfScpOworLS0gQ2hhbmdlIHRhZ3MgLSBHSU4ga2V5cyBjaGFuZ2Vk LCBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJ0YWdzIjogWyJwb3N0 Z3JlcyIsICJzcWwiXX0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3Vw ZGF0ZXMoMCk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhv dF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDEgfCAgICAgICAgICAgMCB8 ICAgICAgICAgICAgICAgICAgMC4wMCB8IHQKKygxIHJvdykKKworLS0gQ2hhbmdlIHRhZ3MgYWdh aW4gLSBHSU4ga2V5cyBjaGFuZ2VkLCBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRh dGEgPSAneyJ0YWdzIjogWyJteXNxbCIsICJzcWwiXX0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAq IEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMg fCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQg CistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAg IDIgfCAgICAgICAgICAgMCB8ICAgICAgICAgICAgICAgICAgMC4wMCB8IHQKKygxIHJvdykKKwor LS0gQWRkIGZpZWxkIHdpdGhvdXQgY2hhbmdpbmcgZXhpc3Rpbmcga2V5cyAtIEdJTiBrZXlzIGNo YW5nZWQgKGFkZGVkICJub3RlIiksIE5PVCBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3sidGFn cyI6IFsibXlzcWwiLCAic3FsIl0sICJub3RlIjogInRlc3QifScgV0hFUkUgaWQgPSAxOworU0VM RUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBk YXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBl Y3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAg ICAgICAgMyB8ICAgICAgICAgICAwIHwgICAgICAgICAgICAgICAgICAwLjAwIHwgdAorKDEgcm93 KQorCitEUk9QIFRBQkxFIHQ7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBHSU4gSW5kZXggd2l0aCBVbmNoYW5n ZWQgS2V5cworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBkYXRhIEpTT05CKQor ICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKKy0t IENyZWF0ZSBHSU4gaW5kZXggb24gc3BlY2lmaWMgcGF0aAorQ1JFQVRFIElOREVYIHRfZ2luX2lk eCBPTiB0IFVTSU5HIGdpbigoZGF0YS0+J3RhZ3MnKSk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAo MSwgJ3sidGFncyI6IFsicG9zdGdyZXMiLCAic3FsIl0sICJzdGF0dXMiOiAiYWN0aXZlIn0nKTsK Ky0tIENoYW5nZSBub24taW5kZXhlZCBmaWVsZCAtIEdJTiBrZXlzIG9uICd0YWdzJyB1bmNoYW5n ZWQsIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3sidGFncyI6IFsicG9zdGdy ZXMiLCAic3FsIl0sICJzdGF0dXMiOiAiaW5hY3RpdmUifScgV0hFUkUgaWQgPSAxOworU0VMRUNU ICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRl cyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3Rl ZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAg ICAgMSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEgcm93KQor CistLSBDaGFuZ2UgaW5kZXhlZCB0YWdzIC0gR0lOIGtleXMgY2hhbmdlZCwgc2hvdWxkIE5PVCBi ZSBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3sidGFncyI6IFsibXlzcWwiLCAic3FsIl0sICJz dGF0dXMiOiAiaW5hY3RpdmUifScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19o b3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVz IHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMiB8ICAgICAgICAg ICAxIHwgICAgICAgICAgICAgICAgIDUwLjAwIHwgdAorKDEgcm93KQorCitEUk9QIFRBQkxFIHQ7 CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CistLSBHSU4gd2l0aCBqc29uYl9wYXRoX29wcworLS0gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JF QVRFIFRBQkxFIHQoaWQgSU5ULCBkYXRhIEpTT05CKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5h YmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2dpbl9pZHggT04g dCBVU0lORyBnaW4oZGF0YSBqc29uYl9wYXRoX29wcyk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAo MSwgJ3sidXNlciI6IHsibmFtZSI6ICJhbGljZSJ9LCAidGFncyI6IFsiYSIsICJiIl19Jyk7Cist LSBDaGFuZ2UgdmFsdWUgYXQgZGlmZmVyZW50IHBhdGggLSBrZXlzIGNoYW5nZWQsIE5PVCBIT1QK K1VQREFURSB0IFNFVCBkYXRhID0gJ3sidXNlciI6IHsibmFtZSI6ICJib2IifSwgInRhZ3MiOiBb ImEiLCAiYiJdfScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRl cygwKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3Vw ZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAwIHwgICAg ICAgICAgICAgICAgICAwLjAwIHwgdAorKDEgcm93KQorCitEUk9QIFRBQkxFIHQ7CistLSA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CistLSBNaXhlZCBJbmRleCBUeXBlcyAoQlJJTiArIEV4cHJlc3Npb24pCistLSA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIHZhbHVlIElOVCwgZGF0YSBKU09OQikKKyAgICBXSVRI IChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5E RVggdF9icmluX2lkeCBPTiB0IFVTSU5HIGJyaW4odmFsdWUpOworQ1JFQVRFIElOREVYIHRfZXhw cl9pZHggT04gdCgoZGF0YS0+J3N0YXR1cycpKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAx MDAsICd7InN0YXR1cyI6ICJhY3RpdmUifScpOworLS0gVXBkYXRlIG9ubHkgQlJJTiBjb2x1bW4g LSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgdmFsdWUgPSAyMDAgV0hFUkUgaWQgPSAxOwor U0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxf dXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19l eHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAg ICAgICAgICAgMSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEg cm93KQorCistLSBVcGRhdGUgb25seSBleHByZXNzaW9uIGNvbHVtbiAtIHNob3VsZCBOT1QgYmUg SE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7InN0YXR1cyI6ICJpbmFjdGl2ZSJ9JyBXSEVSRSBp ZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworIHRhYmxlX25hbWUg fCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBt YXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAg ICAgfCAgICAgICAgICAgICAyIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgNTAuMDAg fCB0CisoMSByb3cpCisKKy0tIFVwZGF0ZSBib3RoIC0gc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFU RSB0IFNFVCB2YWx1ZSA9IDMwMCwgZGF0YSA9ICd7InN0YXR1cyI6ICJwZW5kaW5nIn0nIFdIRVJF IGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisgdGFibGVfbmFt ZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8 IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAg ICAgICB8ICAgICAgICAgICAgIDMgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICAzMy4z MyB8IHQKKygxIHJvdykKKworRFJPUCBUQUJMRSB0OworLS0gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gR0lOIEFycmF5 IEluZGV4IC0gT3JkZXIgSW5zZW5zaXRpdmUgRXh0cmFjdGlvbgorLS0gPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRF IFRBQkxFIHQoCisgICAgaWQgSU5UIFBSSU1BUlkgS0VZLAorICAgIGRhdGEgSlNPTkIKKykgV0lU SCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworLS0gR0lOIGlu ZGV4IG9uIEpTT05CIGFycmF5IChleHRyYWN0cyBhbGwgZWxlbWVudHMpCitDUkVBVEUgSU5ERVgg dF9pdGVtc19naW4gT04gdCBVU0lORyBHSU4gKChkYXRhLT4naXRlbXMnKSk7CitJTlNFUlQgSU5U TyB0IFZBTFVFUyAoMSwgJ3siaXRlbXMiOiBbMSwgMiwgM10sICJzdGF0dXMiOiAiYWN0aXZlIn0n KTsKKy0tIFVwZGF0ZTogUmVvcmRlciBhcnJheSBlbGVtZW50cworLS0gSlNPTkIgZXF1YWxpdHk6 IE5PVCBlcXVhbCAoZGlmZmVyZW50IGFycmF5cykKKy0tIEdJTiBleHRyYWN0aW9uOiBTYW1lIGVs ZW1lbnRzIGV4dHJhY3RlZCAobWlnaHQgYWxsb3cgSE9UIGlmIG5vdCBjYXJlZnVsKQorVVBEQVRF IHQgU0VUIGRhdGEgPSAneyJpdGVtcyI6IFszLCAyLCAxXSwgInN0YXR1cyI6ICJhY3RpdmUifScg V0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJs ZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50 YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0 ICAgICAgICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAg MTAwLjAwIHwgdAorKDEgcm93KQorCistLSBVcGRhdGU6IEFkZC9yZW1vdmUgZWxlbWVudAorVVBE QVRFIHQgU0VUIGRhdGEgPSAneyJpdGVtcyI6IFsxLCAyLCAzLCA0XSwgInN0YXR1cyI6ICJhY3Rp dmUifScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsK KyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9w ZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMiB8ICAgICAgICAgICAxIHwgICAgICAgICAg ICAgICAgIDUwLjAwIHwgdAorKDEgcm93KQorCitEUk9QIFRBQkxFIHQ7CistLSA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cist LSBURVNUOiBHSU4gd2l0aCBUT0FTVGVkIFRFWFQgKHRzdmVjdG9yKQorLS0gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JF QVRFIFRBQkxFIHQoaWQgSU5ULCBjb250ZW50IFRFWFQsIHNlYXJjaF92ZWMgdHN2ZWN0b3IpCisg ICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworLS0g Q3JlYXRlIHRyaWdnZXIgdG8gbWFpbnRhaW4gdHN2ZWN0b3IKK0NSRUFURSBUUklHR0VSIHRzdmVj dG9ydXBkYXRlX3RvYXN0CisgICAgQkVGT1JFIElOU0VSVCBPUiBVUERBVEUgT04gdAorICAgIEZP UiBFQUNIIFJPVyBFWEVDVVRFIEZVTkNUSU9OCisgICAgdHN2ZWN0b3JfdXBkYXRlX3RyaWdnZXIo c2VhcmNoX3ZlYywgJ3BnX2NhdGFsb2cuZW5nbGlzaCcsIGNvbnRlbnQpOworQ1JFQVRFIElOREVY IHRfZ2luIE9OIHQgVVNJTkcgZ2luKHNlYXJjaF92ZWMpOworLS0gSW5zZXJ0IHdpdGggbGFyZ2Ug Y29udGVudCAod2lsbCBiZSBUT0FTVGVkKQorSU5TRVJUIElOVE8gdCAoaWQsIGNvbnRlbnQpIFZB TFVFUworICAgICgxLCByZXBlYXQoJ2ltcG9ydGFudCBrZXl3b3JkICcsIDEwMDApIHx8IHJlcGVh dCgnZmlsbGVyIHRleHQgJywgMTAwMDApKTsKKy0tIFZlcmlmeSBpbml0aWFsIHN0YXRlCitTRUxF Q1QgY291bnQoKikgRlJPTSB0IFdIRVJFIHNlYXJjaF92ZWMgQEAgdG9fdHNxdWVyeSgnaW1wb3J0 YW50Jyk7CisgY291bnQgCistLS0tLS0tCisgICAgIDEKKygxIHJvdykKKworLS0gRXhwZWN0ZWQ6 IDEgcm93CistLSBJTVBPUlRBTlQ6IFRoZSBCRUZPUkUgVVBEQVRFIHRyaWdnZXIgbW9kaWZpZXMg c2VhcmNoX3ZlYywgc28gYnkgdGhlIHRpbWUKKy0tIEV4ZWNXaGljaEluZGV4ZXNSZXF1aXJlVXBk YXRlcygpIHJ1bnMsIHNlYXJjaF92ZWMgaGFzIGFscmVhZHkgY2hhbmdlZC4KKy0tIFRoaXMgbWVh bnMgdGhlIGNvbXBhcmlzb24gc2VlcyBvbGQgdHN2ZWN0b3IgdnMuIHRyaWdnZXItbW9kaWZpZWQg dHN2ZWN0b3IsCistLSBub3QgdGhlIG5hdHVyYWwgcHJvZ3Jlc3Npb24uIEhPVCB3b24ndCBoYXBw ZW4gYmVjYXVzZSB0aGUgdHJpZ2dlciBjaGFuZ2VkCistLSB0aGUgaW5kZXhlZCBjb2x1bW4uCist LSBVcGRhdGU6IEV2ZW4gdGhvdWdoIGNvbnRlbnQga2V5d29yZHMgdW5jaGFuZ2VkLCB0cmlnZ2Vy IHN0aWxsIGZpcmVzCitVUERBVEUgdAorU0VUIGNvbnRlbnQgPSByZXBlYXQoJ2ltcG9ydGFudCBr ZXl3b3JkICcsIDEwMDApIHx8IHJlcGVhdCgnZGlmZmVyZW50IGZpbGxlciAnLCAxMDAwMCkKK1dI RVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCk7CisgdGFibGVf bmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFn ZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAg ICAgICAgICB8ICAgICAgICAgICAgIDEgfCAgICAgICAgICAgMCB8ICAgICAgICAgICAgICAgICAg MC4wMCB8IHQKKygxIHJvdykKKworLS0gRXhwZWN0ZWQ6IDAgSE9UICh0cmlnZ2VyIG1vZGlmaWVz IHNlYXJjaF92ZWMsIGJsb2NraW5nIEhPVCkKKy0tIFRoaXMgaXMgYWN0dWFsbHkgY29ycmVjdCBi ZWhhdmlvciAtIHRoZSB0cmlnZ2VyIHVwZGF0ZWQgYW4gaW5kZXhlZCBjb2x1bW4KKy0tIFVwZGF0 ZTogQ2hhbmdlIGluZGV4ZWQga2V5d29yZHMKK1VQREFURSB0CitTRVQgY29udGVudCA9IHJlcGVh dCgnY3JpdGljYWwga2V5d29yZCAnLCAxMDAwKSB8fCByZXBlYXQoJ2RpZmZlcmVudCBmaWxsZXIg JywgMTAwMDApCitXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVz KDApOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBk YXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAyIHwgICAgICAgICAgIDAgfCAgICAg ICAgICAgICAgICAgIDAuMDAgfCB0CisoMSByb3cpCisKKy0tIEV4cGVjdGVkOiAwIEhPVCAoaW5k ZXgga2V5cyBjaGFuZ2VkKQorLS0gVmVyaWZ5IHF1ZXJ5IGNvcnJlY3RuZXNzCitTRUxFQ1QgY291 bnQoKikgRlJPTSB0IFdIRVJFIHNlYXJjaF92ZWMgQEAgdG9fdHNxdWVyeSgnY3JpdGljYWwnKTsK KyBjb3VudCAKKy0tLS0tLS0KKyAgICAgMQorKDEgcm93KQorCistLSBFeHBlY3RlZDogMSByb3cK K0RST1AgVEFCTEUgdCBDQVNDQURFOworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gVEVTVDogR0lOIHdpdGggQXJy YXkgb2YgTGFyZ2UgU3RyaW5ncworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCB0 YWdzIFRFWFRbXSkKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0 b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9naW4gT04gdCBVU0lORyBnaW4odGFncyk7CistLSBJ bnNlcnQgd2l0aCBsYXJnZSBhcnJheSBlbGVtZW50cyAobWlnaHQgYmUgVE9BU1RlZCkKK0lOU0VS VCBJTlRPIHQgKGlkLCB0YWdzKSBWQUxVRVMKKyAgICAoMSwgQVJSQVlbcmVwZWF0KCd0YWcxJywg MTAwMCksIHJlcGVhdCgndGFnMicsIDEwMDApXSk7CistLSBVcGRhdGU6IENoYW5nZSB0byBkaWZm ZXJlbnQgbGFyZ2UgdmFsdWVzIC0gTk9UIEhPVAorVVBEQVRFIHQKK1NFVCB0YWdzID0gQVJSQVlb cmVwZWF0KCd0YWczJywgMTAwMCksIHJlcGVhdCgndGFnNCcsIDEwMDApXQorV0hFUkUgaWQgPSAx OworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwKTsKKyB0YWJsZV9uYW1lIHwgdG90 YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hl c19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwg ICAgICAgICAgICAgMSB8ICAgICAgICAgICAwIHwgICAgICAgICAgICAgICAgICAwLjAwIHwgdAor KDEgcm93KQorCistLSBFeHBlY3RlZDogMCBIT1QgKGtleXMgYWN0dWFsbHkgY2hhbmdlZCkKKy0t IFVwZGF0ZTogS2VlcCBzYW1lIHRhZyB2YWx1ZXMsIGp1c3QgcmVvcmRlciAtIFNIT1VMRCBCRSBI T1QKKy0tIChHSU4gaXMgb3JkZXItaW5zZW5zaXRpdmU6IGJvdGggW3RhZzMsdGFnNF0gYW5kIFt0 YWc0LHRhZzNdCistLSBleHRyYWN0IHRvIHRoZSBzYW1lIHNvcnRlZCBrZXkgc2V0IFsndGFnMycs J3RhZzQnXSkKK1VQREFURSB0CitTRVQgdGFncyA9IEFSUkFZW3JlcGVhdCgndGFnNCcsIDEwMDAp LCByZXBlYXQoJ3RhZzMnLCAxMDAwKV0KK1dIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hl Y2tfaG90X3VwZGF0ZXMoMSk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBk YXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDIgfCAgICAg ICAgICAgMSB8ICAgICAgICAgICAgICAgICA1MC4wMCB8IHQKKygxIHJvdykKKworLS0gRXhwZWN0 ZWQ6IDEgSE9UIChHSU4ga2V5cyBzZW1hbnRpY2FsbHkgaWRlbnRpY2FsKQorLS0gVXBkYXRlOiBS ZW1vdmUgYW4gZWxlbWVudCAtIE5PVCBIT1QgKGtleXMgY2hhbmdlZCkKK1VQREFURSB0CitTRVQg dGFncyA9IEFSUkFZW3JlcGVhdCgndGFnNCcsIDEwMDApXQorV0hFUkUgaWQgPSAxOworU0VMRUNU ICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRl cyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3Rl ZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAg ICAgMyB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDMzLjMzIHwgdAorKDEgcm93KQor CistLSBFeHBlY3RlZDogU3RpbGwgMSBIT1QgKG5vdCB0aGlzIG9uZSkKK0RST1AgVEFCTEUgdCBD QVNDQURFOworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorLS0gQlJJTiBJbmRleCB3aXRoIFBhcnRpYWwgUHJlZGljYXRl CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdCgKKyAgICBpZCBJTlQgUFJJTUFSWSBLRVksCisg ICAgdmFsdWUgSU5ULAorICAgIGRlc2NyaXB0aW9uIFRFWFQKKykgV0lUSCAoYXV0b3ZhY3V1bV9l bmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfYnJpbl9wYXJ0 aWFsX2lkeCBPTiB0IFVTSU5HIGJyaW4odmFsdWUpIFdIRVJFIHZhbHVlID4gMTAwOworSU5TRVJU IElOVE8gdCBWQUxVRVMgKDEsIDUwLCAnYmVsb3cgcmFuZ2UnKTsKKy0tIFRlc3QgMTogT3V0c2lk ZSBwcmVkaWNhdGUKK1VQREFURSB0IFNFVCBkZXNjcmlwdGlvbiA9ICd1cGRhdGVkJyBXSEVSRSBp ZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworIHRhYmxlX25hbWUg fCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBt YXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAg ICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAxMDAuMDAg fCB0CisoMSByb3cpCisKKy0tIFZhbGlkYXRlOiBQcmVkaWNhdGUgcXVlcnkgcmV0dXJucyAwIHJv d3MKK1NFTEVDVCBDT1VOVCgqKSBhcyBjbnQgRlJPTSB0IFdIRVJFIHZhbHVlID4gMTAwOworIGNu dCAKKy0tLS0tCisgICAwCisoMSByb3cpCisKKy0tIFRlc3QgMjogVHJhbnNpdGlvbiBpbnRvIHBy ZWRpY2F0ZQorVVBEQVRFIHQgU0VUIHZhbHVlID0gMTUwIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAq IEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMik7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMg fCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQg CistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAg IDIgfCAgICAgICAgICAgMiB8ICAgICAgICAgICAgICAgIDEwMC4wMCB8IHQKKygxIHJvdykKKwor LS0gVmFsaWRhdGU6IFByZWRpY2F0ZSBxdWVyeSByZXR1cm5zIDEgcm93IHdpdGggY29ycmVjdCB2 YWx1ZQorU0VMRUNUIENPVU5UKCopIGFzIGNudCwgTUFYKHZhbHVlKSBhcyBtYXhfdmFsIEZST00g dCBXSEVSRSB2YWx1ZSA+IDEwMDsKKyBjbnQgfCBtYXhfdmFsIAorLS0tLS0rLS0tLS0tLS0tCisg ICAxIHwgICAgIDE1MAorKDEgcm93KQorCistLSBUZXN0IDM6IEluc2lkZSBwcmVkaWNhdGUsIHZh bHVlIGNoYW5nZXMKK1VQREFURSB0IFNFVCB2YWx1ZSA9IDE2MCwgZGVzY3JpcHRpb24gPSAndXBk YXRlZCBhZ2FpbicgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRl cygzKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3Vw ZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMyB8ICAgICAgICAgICAzIHwgICAg ICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEgcm93KQorCistLSBWYWxpZGF0ZTogVXBkYXRlZCB2 YWx1ZSAoMTYwKSBpcyByZXR1cm5lZAorU0VMRUNUIENPVU5UKCopIGFzIGNudCwgTUFYKHZhbHVl KSBhcyBtYXhfdmFsIEZST00gdCBXSEVSRSB2YWx1ZSA+IDEwMDsKKyBjbnQgfCBtYXhfdmFsIAor LS0tLS0rLS0tLS0tLS0tCisgICAxIHwgICAgIDE2MAorKDEgcm93KQorCistLSBUZXN0IDQ6IFRy YW5zaXRpb24gb3V0IG9mIHByZWRpY2F0ZQorVVBEQVRFIHQgU0VUIHZhbHVlID0gNTAgV0hFUkUg aWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcyg0KTsKKyB0YWJsZV9uYW1l IHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwg bWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAg ICAgIHwgICAgICAgICAgICAgNCB8ICAgICAgICAgICA0IHwgICAgICAgICAgICAgICAgMTAwLjAw IHwgdAorKDEgcm93KQorCitTRUxFQ1QgQ09VTlQoKikgYXMgY250IEZST00gdCBXSEVSRSB2YWx1 ZSA+IDEwMDsKKyBjbnQgCistLS0tLQorICAgMAorKDEgcm93KQorCitTRUxFQ1QgaWQsIHZhbHVl LCBkZXNjcmlwdGlvbiBGUk9NIHQ7CisgaWQgfCB2YWx1ZSB8ICBkZXNjcmlwdGlvbiAgCistLS0t Ky0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tCisgIDEgfCAgICA1MCB8IHVwZGF0ZWQgYWdhaW4KKygx IHJvdykKKworRFJPUCBUQUJMRSB0IENBU0NBREU7CistLSA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBIQVNIIEluZGV4 IChTaW1wbGUgQ29sdW1uKQorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBjb2Rl IFZBUkNIQVIoMjApLCBkZXNjcmlwdGlvbiBURVhUKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5h YmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2hhc2hfaWR4IE9O IHQgVVNJTkcgaGFzaChjb2RlKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAnQ09ERTAwMScs ICdpbml0aWFsJyk7CistLSBVcGRhdGUgbm9uLWluZGV4ZWQgY29sdW1uIC0gc2hvdWxkIGJlIEhP VAorVVBEQVRFIHQgU0VUIGRlc2NyaXB0aW9uID0gJ3VwZGF0ZWQnIFdIRVJFIGlkID0gMTsKK1NF TEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3Vw ZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhw ZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAg ICAgICAgIDEgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgIDEwMC4wMCB8IHQKKygxIHJv dykKKworLS0gVXBkYXRlIGluZGV4ZWQgY29sdW1uIC0gSEFTSCBpbmRleCByZXF1aXJlcyB1cGRh dGUsIE5PVCBIT1QKK1VQREFURSB0IFNFVCBjb2RlID0gJ0NPREUwMDInIFdIRVJFIGlkID0gMTsK K1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisgdGFibGVfbmFtZSB8IHRvdGFs X3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNf ZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAg ICAgICAgICAgIDIgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICA1MC4wMCB8IHQKKygx IHJvdykKKworLS0gVXBkYXRlIGJvdGggLSBOT1QgSE9UCitVUERBVEUgdCBTRVQgY29kZSA9ICdD T0RFMDAzJywgZGVzY3JpcHRpb24gPSAnY2hhbmdlZCcgV0hFUkUgaWQgPSAxOworU0VMRUNUICog RlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8 IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAK Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAg MyB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDMzLjMzIHwgdAorKDEgcm93KQorCist LSBCYWNrIHRvIG9yaWdpbmFsIGNvZGUgLSBOT1QgSE9UIChkaWZmZXJlbnQgaGFzaCBidWNrZXQg bG9jYXRpb24pCitVUERBVEUgdCBTRVQgY29kZSA9ICdDT0RFMDAxJyBXSEVSRSBpZCA9IDE7CitT RUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworIHRhYmxlX25hbWUgfCB0b3RhbF91 cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4 cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAg ICAgICAgICA0IHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgMjUuMDAgfCB0CisoMSBy b3cpCisKK0RST1AgVEFCTEUgdCBDQVNDQURFOworLS0gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gSEFTSCBJbmRleCBv biBFeHByZXNzaW9uCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIGVtYWlsIFRF WFQsIGRhdGEgSlNPTkIpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxs ZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfaGFzaF9sb3dlcl9lbWFpbF9pZHggT04gdCBV U0lORyBIQVNIKGxvd2VyKGVtYWlsKSk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ0FsaWNl QEV4YW1wbGUuY29tJywgJ3sic3RhdHVzIjogIm5ldyJ9Jyk7CistLSBVcGRhdGUgbm9uLWluZGV4 ZWQgZmllbGQgLSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7InN0YXR1cyI6 ICJhY3RpdmUifScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRl cygxKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3Vw ZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAxIHwgICAg ICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEgcm93KQorCistLSBVcGRhdGUgZW1haWwgd2l0aCBj YXNlIGNoYW5nZSBvbmx5IChzYW1lIGxvd2VyY2FzZSkgLSBzaG91bGQgYmUgSE9UCitVUERBVEUg dCBTRVQgZW1haWwgPSAnYWxpY2VAZXhhbXBsZS5jb20nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAq IEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMik7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMg fCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQg CistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAg IDIgfCAgICAgICAgICAgMiB8ICAgICAgICAgICAgICAgIDEwMC4wMCB8IHQKKygxIHJvdykKKwor LS0gVXBkYXRlIGVtYWlsIHRvIGRpZmZlcmVudCBsb3dlcmNhc2UgLSBOT1QgSE9UCitVUERBVEUg dCBTRVQgZW1haWwgPSAnYm9iQGV4YW1wbGUuY29tJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBG Uk9NIGNoZWNrX2hvdF91cGRhdGVzKDIpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwg aG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAor LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAz IHwgICAgICAgICAgIDIgfCAgICAgICAgICAgICAgICAgNjYuNjcgfCB0CisoMSByb3cpCisKK0RS T1AgVEFCTEUgdCBDQVNDQURFOworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gTXVsdGlwbGUgSEFTSCBJbmRleGVz CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIGNhdGVnb3J5IFZBUkNIQVIsIHN0 YXR1cyBWQVJDSEFSLCB2YWx1ZSBJTlQpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g b2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfaGFzaF9jYXRlZ29yeV9pZHgg T04gdCBVU0lORyBoYXNoKGNhdGVnb3J5KTsKK0NSRUFURSBJTkRFWCB0X2hhc2hfc3RhdHVzX2lk eCBPTiB0IFVTSU5HIGhhc2goc3RhdHVzKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAnZWxl Y3Ryb25pY3MnLCAnYWN0aXZlJywgMTAwKTsKKy0tIFVwZGF0ZSBub24taW5kZXhlZCBjb2x1bW4g LSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgdmFsdWUgPSAxNTAgV0hFUkUgaWQgPSAxOwor U0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxf dXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19l eHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAg ICAgICAgICAgMSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEg cm93KQorCistLSBVcGRhdGUgb25lIGluZGV4ZWQgY29sdW1uIC0gTk9UIEhPVAorVVBEQVRFIHQg U0VUIGNhdGVnb3J5ID0gJ2Jvb2tzJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNr X2hvdF91cGRhdGVzKDEpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0 ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAyIHwgICAgICAg ICAgIDEgfCAgICAgICAgICAgICAgICAgNTAuMDAgfCB0CisoMSByb3cpCisKKy0tIFVwZGF0ZSBv dGhlciBpbmRleGVkIGNvbHVtbiAtIE5PVCBIT1QKK1VQREFURSB0IFNFVCBzdGF0dXMgPSAnaW5h Y3RpdmUnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7 CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVf cGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDMgfCAgICAgICAgICAgMSB8ICAgICAgICAg ICAgICAgICAzMy4zMyB8IHQKKygxIHJvdykKKworLS0gVXBkYXRlIGJvdGggaW5kZXhlZCBjb2x1 bW5zIC0gTk9UIEhPVAorVVBEQVRFIHQgU0VUIGNhdGVnb3J5ID0gJ3ZpZGVvcycsIHN0YXR1cyA9 ICdwZW5kaW5nJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVz KDEpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBk YXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICA0IHwgICAgICAgICAgIDEgfCAgICAg ICAgICAgICAgICAgMjUuMDAgfCB0CisoMSByb3cpCisKK0RST1AgVEFCTEUgdCBDQVNDQURFOwor LS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorLS0gQlJJTiB2cyBIQVNIIENvbXBhcmlzb24KKy0tID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFU RSBUQUJMRSB0X2JyaW4oaWQgSU5ULCB2YWx1ZSBJTlQsIGRhdGEgVEVYVCkKKyAgICBXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgVEFCTEUg dF9oYXNoKGlkIElOVCwgdmFsdWUgSU5ULCBkYXRhIFRFWFQpCisgICAgV0lUSCAoYXV0b3ZhY3V1 bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfYnJpbl92 YWx1ZV9pZHggT04gdF9icmluIFVTSU5HIGJyaW4odmFsdWUpOworQ1JFQVRFIElOREVYIHRfaGFz aF92YWx1ZV9pZHggT04gdF9oYXNoIFVTSU5HIGhhc2godmFsdWUpOworSU5TRVJUIElOVE8gdF9i cmluIFZBTFVFUyAoMSwgMTAwLCAnaW5pdGlhbCcpOworSU5TRVJUIElOVE8gdF9oYXNoIFZBTFVF UyAoMSwgMTAwLCAnaW5pdGlhbCcpOworLS0gU2FtZSB1cGRhdGUgb24gYm90aCAtIGRpZmZlcmVu dCBIT1QgYmVoYXZpb3IgZXhwZWN0ZWQKKy0tIEJSSU46IG1pZ2h0IGFsbG93IEhPVCAocmFuZ2Ug c3VtbWFyeSB1bmNoYW5nZWQpCistLSBIQVNIOiBibG9ja3MgSE9UIChoYXNoIGJ1Y2tldCBjaGFu Z2VkKQorVVBEQVRFIHRfYnJpbiBTRVQgdmFsdWUgPSAxNTAgV0hFUkUgaWQgPSAxOworU0VMRUNU ICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndF9icmluJyk7CisgdGFibGVfbmFtZSB8IHRv dGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNo ZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdF9icmluICAgICB8 ICAgICAgICAgICAgIDEgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgIDEwMC4wMCB8IHQK KygxIHJvdykKKworLS0gRXhwZWN0ZWQ6IDEgSE9UIChCUklOIGFsbG93cyBpdCBmb3Igc2luZ2xl IHJvdykKK1VQREFURSB0X2hhc2ggU0VUIHZhbHVlID0gMTUwIFdIRVJFIGlkID0gMTsKK1NFTEVD VCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCwgJ3RfaGFzaCcpOworIHRhYmxlX25hbWUgfCB0 b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRj aGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHRfaGFzaCAgICAg fCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDAgfCAgICAgICAgICAgICAgICAgIDAuMDAgfCB0 CisoMSByb3cpCisKKy0tIEV4cGVjdGVkOiAwIEhPVCAoSEFTSCBibG9ja3MgaXQpCitEUk9QIFRB QkxFIHRfYnJpbiBDQVNDQURFOworRFJPUCBUQUJMRSB0X2hhc2ggQ0FTQ0FERTsKKy0tID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKy0tIEhBU0ggSW5kZXggd2l0aCBOVUxMIFZhbHVlcworLS0gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRB QkxFIHQoaWQgSU5ULCBjYXRlZ29yeSBWQVJDSEFSLCBkYXRhIFRFWFQpCisgICAgV0lUSCAoYXV0 b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRf aGFzaF9jYXRlZ29yeV9pZHggT04gdCBVU0lORyBoYXNoKGNhdGVnb3J5KTsKK0lOU0VSVCBJTlRP IHQgVkFMVUVTICgxLCAnZWxlY3Ryb25pY3MnLCAnaW5pdGlhbCcpOworLS0gVXBkYXRlIGluZGV4 ZWQgY29sdW1uIHRvIE5VTEwgLSBOT1QgSE9UIChoYXNoIHZhbHVlIGNoYW5nZWQpCitVUERBVEUg dCBTRVQgY2F0ZWdvcnkgPSBOVUxMIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tf aG90X3VwZGF0ZXMoMCk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRl cyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDEgfCAgICAgICAg ICAgMCB8ICAgICAgICAgICAgICAgICAgMC4wMCB8IHQKKygxIHJvdykKKworLS0gRXhwZWN0ZWQ6 IDAgSE9UCistLSBVcGRhdGUgaW5kZXhlZCBjb2x1bW4gZnJvbSBOVUxMIHRvIHZhbHVlIC0gTk9U IEhPVAorVVBEQVRFIHQgU0VUIGNhdGVnb3J5ID0gJ2Jvb2tzJyBXSEVSRSBpZCA9IDE7CitTRUxF Q1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDApOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRh dGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVj dGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAg ICAgICAyIHwgICAgICAgICAgIDAgfCAgICAgICAgICAgICAgICAgIDAuMDAgfCB0CisoMSByb3cp CisKKy0tIEV4cGVjdGVkOiAwIEhPVAorLS0gVXBkYXRlIG5vbi1pbmRleGVkIGNvbHVtbiAtIHNo b3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3VwZGF0ZWQnIFdIRVJFIGlkID0gMTsK K1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisgdGFibGVfbmFtZSB8IHRvdGFs X3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNf ZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAg ICAgICAgICAgIDMgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICAzMy4zMyB8IHQKKygx IHJvdykKKworLS0gRXhwZWN0ZWQ6IDEgSE9UCitEUk9QIFRBQkxFIHQgQ0FTQ0FERTsKKy0tID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKy0tIEJSSU4gb24gSlNPTkIgRmllbGQKKy0tID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0 KGlkIElOVCwgbWV0cmljcyBKU09OQikKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBv ZmYsIGZpbGxmYWN0b3IgPSA3MCk7CistLSBCUklOIGRvZXNuJ3QgZGlyZWN0bHkgc3VwcG9ydCBK U09OQiwgYnV0IHdlIGNhbiB0ZXN0IG9uIGV4cHJlc3Npb24KK0NSRUFURSBJTkRFWCB0X2JyaW5f Y291bnRfaWR4IE9OIHQgVVNJTkcgYnJpbigKKyAgICBDQVNUKG1ldHJpY3MtPj4nY291bnQnIEFT IElOVEVHRVIpCispOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsICd7ImNvdW50IjogIjEwMCIs ICJ0aW1lc3RhbXAiOiAiMjAyNC0wMS0wMSJ9Jyk7CistLSBVcGRhdGUgbm9uLWluZGV4ZWQgSlNP TkIgZmllbGQgLSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgbWV0cmljcyA9ICd7ImNvdW50 IjogIjEwMCIsICJ0aW1lc3RhbXAiOiAiMjAyNC0wMS0wMiJ9JyBXSEVSRSBpZCA9IDE7CitTRUxF Q1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRh dGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVj dGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAg ICAgICAxIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAxMDAuMDAgfCB0CisoMSByb3cp CisKKy0tIEV4cGVjdGVkOiAxIEhPVAorLS0gVXBkYXRlIGluZGV4ZWQgZmllbGQgLSBCUklOIGFs bG93cyBIT1QgZm9yIHNpbmdsZSByb3cKK1VQREFURSB0IFNFVCBtZXRyaWNzID0gJ3siY291bnQi OiAiMTUwIiwgInRpbWVzdGFtcCI6ICIyMDI0LTAxLTAyIn0nIFdIRVJFIGlkID0gMTsKK1NFTEVD VCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMik7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0 ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0 ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAg ICAgIDIgfCAgICAgICAgICAgMiB8ICAgICAgICAgICAgICAgIDEwMC4wMCB8IHQKKygxIHJvdykK KworLS0gRXhwZWN0ZWQ6IDIgSE9UIChCUklOIHBlcm1pdHMgc2luZ2xlLXJvdyB1cGRhdGVzKQor RFJPUCBUQUJMRSB0IENBU0NBREU7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBNaXhlZCBCUklOICsgSEFTSCBv biBTYW1lIFRhYmxlCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIGNhdGVnb3J5 IFZBUkNIQVIsIHRpbWVzdGFtcCBUSU1FU1RBTVAsIHByaWNlIE5VTUVSSUMsIGRhdGEgVEVYVCkK KyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitD UkVBVEUgSU5ERVggdF9icmluX3RpbWVzdGFtcF9pZHggT04gdCBVU0lORyBicmluKHRpbWVzdGFt cCk7CitDUkVBVEUgSU5ERVggdF9oYXNoX2NhdGVnb3J5X2lkeCBPTiB0IFVTSU5HIGhhc2goY2F0 ZWdvcnkpOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsICdib29rcycsICcyMDI0LTAxLTAxIDEw OjAwOjAwJywgMjkuOTksICdpbml0aWFsJyk7CistLSBVcGRhdGUgbm9uLWluZGV4ZWQgY29sdW1u IC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAndXBkYXRlZCcgV0hFUkUgaWQg PSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwg dG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0 Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAg IHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgMTAwLjAwIHwg dAorKDEgcm93KQorCistLSBFeHBlY3RlZDogMSBIT1QKKy0tIFVwZGF0ZSBCUklOIGluZGV4ZWQg Y29sdW1uIC0gYWxsb3dzIEhPVAorVVBEQVRFIHQgU0VUIHRpbWVzdGFtcCA9ICcyMDI0LTAxLTAy IDEwOjAwOjAwJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVz KDIpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBk YXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAyIHwgICAgICAgICAgIDIgfCAgICAg ICAgICAgICAgICAxMDAuMDAgfCB0CisoMSByb3cpCisKKy0tIEV4cGVjdGVkOiAyIEhPVAorLS0g VXBkYXRlIEhBU0ggaW5kZXhlZCBjb2x1bW4gLSBibG9ja3MgSE9UCitVUERBVEUgdCBTRVQgY2F0 ZWdvcnkgPSAndmlkZW9zJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91 cGRhdGVzKDIpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBo b3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAzIHwgICAgICAgICAgIDIg fCAgICAgICAgICAgICAgICAgNjYuNjcgfCB0CisoMSByb3cpCisKKy0tIEV4cGVjdGVkOiAyIEhP VCAoSEFTSCBibG9ja3MgaXQpCistLSBVcGRhdGUgcHJpY2UgKG5vbi1pbmRleGVkKSAtIHNob3Vs ZCBiZSBIT1QKK1VQREFURSB0IFNFVCBwcmljZSA9IDM5Ljk5IFdIRVJFIGlkID0gMTsKK1NFTEVD VCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0 ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0 ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAg ICAgIDQgfCAgICAgICAgICAgMyB8ICAgICAgICAgICAgICAgICA3NS4wMCB8IHQKKygxIHJvdykK KworLS0gRXhwZWN0ZWQ6IDMgSE9UCitEUk9QIFRBQkxFIHQgQ0FTQ0FERTsKKy0tID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K Ky0tIEluZGV4IGJvdGggb24gYSBmaWVsZCBpbiBhIEpTT05CIGRvY3VtZW50LCBhbmQgdGhlIGRv Y3VtZW50CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQgUFJJTUFSWSBLRVksIGRv Y3MgSlNPTkIpIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcw KTsKK0NSRUFURSBJTkRFWCB0X2RvY3NfaWR4IE9OIHQoKGRvY3MtPiduYW1lJykpOworQ1JFQVRF IElOREVYIHRfZG9jc19jb2xfaWR4IE9OIHQoZG9jcyk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAo MSwgJ3sibmFtZSI6ICJqb2huIiwgImRhdGEiOiAic29tZSBkYXRhIn0nKTsKKy0tIFVwZGF0ZSBp bXBhY3RzIGluZGV4IG9uIHdob2xlIGRvY21lbnQgYXR0cmlidXRlLCBjYW4ndCBnbyBIT1QKK1VQ REFURSB0IFNFVCBkb2NzPSd7Im5hbWUiOiAiam9obiIsICJkYXRhIjogInNvbWUgb3RoZXIgZGF0 YSJ9JyBXSEVSRSBpZD0xOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwKTsKKyB0 YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJj ZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0K KyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAwIHwgICAgICAgICAgICAg ICAgICAwLjAwIHwgdAorKDEgcm93KQorCitEUk9QIFRBQkxFIHQgQ0FTQ0FERTsKKy0tIENsZWFu dXAKK0RST1AgRlVOQ1RJT04gY2hlY2tfaG90X3VwZGF0ZXMoaW50LCB0ZXh0LCB0ZXh0KTsKK0RS T1AgQ09MTEFUSU9OIGNhc2VfaW5zZW5zaXRpdmU7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL3BhcmFsbGVsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVs ZQppbmRleCBjYzZkNzk5YmNlYS4uZjNkYjkyNzBmZTYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9z Y2hlZHVsZQpAQCAtMTI1LDYgKzEyNSwxMiBAQCB0ZXN0OiBwbGFuY2FjaGUgbGltaXQgcGxwZ3Nx bCBjb3B5MiB0ZW1wIGRvbWFpbiByYW5nZWZ1bmNzIHByZXBhcmUgY29udmVyc2lvbiB0cgogIyAt LS0tLS0tLS0tCiB0ZXN0OiBwYXJ0aXRpb25fam9pbiBwYXJ0aXRpb25fcHJ1bmUgcmVsb3B0aW9u cyBoYXNoX3BhcnQgaW5kZXhpbmcgcGFydGl0aW9uX2FnZ3JlZ2F0ZSBwYXJ0aXRpb25faW5mbyB0 dXBsZXNvcnQgZXhwbGFpbiBjb21wcmVzc2lvbiBjb21wcmVzc2lvbl9sejQgbWVtb2l6ZSBzdGF0 cyBwcmVkaWNhdGUgbnVtYSBlYWdlcl9hZ2dyZWdhdGUKIAorCisjIC0tLS0tLS0tLS0KKyMgQW5v dGhlciBncm91cCBvZiBwYXJhbGxlbCB0ZXN0cywgdGhlc2UgZm9jdXNlZCBvbiBoZWFwIEhPVCB1 cGRhdGVzCisjIC0tLS0tLS0tLS0KK3Rlc3Q6IGhlYXBfaG90X3VwZGF0ZXMKKwogIyBldmVudF90 cmlnZ2VyIGRlcGVuZHMgb24gY3JlYXRlX2FtIGFuZCBjYW5ub3QgcnVuIGNvbmN1cnJlbnRseSB3 aXRoCiAjIGFueSB0ZXN0IHRoYXQgcnVucyBEREwKICMgb2lkam9pbnMgaXMgcmVhZC1vbmx5LCB0 aG91Z2gsIGFuZCBzaG91bGQgcnVuIGxhdGUgZm9yIGJlc3QgY292ZXJhZ2UKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2hlYXBfaG90X3VwZGF0ZXMuc3FsIGIvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvaGVhcF9ob3RfdXBkYXRlcy5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLmUwNDdiY2RkZjVjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvaGVhcF9ob3RfdXBkYXRlcy5zcWwKQEAgLTAsMCArMSw1MTMgQEAKKy0tID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKy0tIFRlc3QgU3VpdGUgZm9yIEhlYXAtb25seSAoSE9UKSBVcGRhdGVzCistLSA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisKKy0tIFNldHVwOiBDcmVhdGUgZnVuY3Rpb24gdG8gbWVhc3VyZSBIT1QgdXBkYXRlcworQ1JF QVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gY2hlY2tfaG90X3VwZGF0ZXMoCisgICAgZXhwZWN0ZWQg SU5ULAorICAgIHBfdGFibGVfbmFtZSBURVhUIERFRkFVTFQgJ3QnLAorICAgIHBfc2NoZW1hX25h bWUgVEVYVCBERUZBVUxUIGN1cnJlbnRfc2NoZW1hKCkKKykKK1JFVFVSTlMgVEFCTEUgKAorICAg IHRhYmxlX25hbWUgVEVYVCwKKyAgICB0b3RhbF91cGRhdGVzIEJJR0lOVCwKKyAgICBob3RfdXBk YXRlcyBCSUdJTlQsCisgICAgaG90X3VwZGF0ZV9wZXJjZW50YWdlIE5VTUVSSUMsCisgICAgbWF0 Y2hlc19leHBlY3RlZCBCT09MRUFOCispCitMQU5HVUFHRSBwbHBnc3FsCitBUyAkJAorREVDTEFS RQorICAgIHZfcmVsaWQgb2lkOworICAgIHZfcXVhbGlmaWVkX25hbWUgVEVYVDsKKyAgICB2X2hv dF91cGRhdGVzIEJJR0lOVDsKKyAgICB2X3VwZGF0ZXMgQklHSU5UOworICAgIHZfeGFjdF9ob3Rf dXBkYXRlcyBCSUdJTlQ7CisgICAgdl94YWN0X3VwZGF0ZXMgQklHSU5UOworQkVHSU4KKyAgICAt LSBGb3JjZSBzdGF0aXN0aWNzIHVwZGF0ZQorICAgIFBFUkZPUk0gcGdfc3RhdF9mb3JjZV9uZXh0 X2ZsdXNoKCk7CisKKyAgICAtLSBHZXQgdGFibGUgT0lECisgICAgdl9xdWFsaWZpZWRfbmFtZSA6 PSBxdW90ZV9pZGVudChwX3NjaGVtYV9uYW1lKSB8fCAnLicgfHwgcXVvdGVfaWRlbnQocF90YWJs ZV9uYW1lKTsKKyAgICB2X3JlbGlkIDo9IHZfcXVhbGlmaWVkX25hbWU6OnJlZ2NsYXNzOworCisg ICAgSUYgdl9yZWxpZCBJUyBOVUxMIFRIRU4KKwlSQUlTRSBFWENFUFRJT04gJ1RhYmxlICUuJSBu b3QgZm91bmQnLCBwX3NjaGVtYV9uYW1lLCBwX3RhYmxlX25hbWU7CisgICAgRU5EIElGOworCisg ICAgLS0gR2V0IGN1bXVsYXRpdmUgKyB0cmFuc2FjdGlvbiBzdGF0cworICAgIHZfaG90X3VwZGF0 ZXMgOj0gQ09BTEVTQ0UocGdfc3RhdF9nZXRfdHVwbGVzX2hvdF91cGRhdGVkKHZfcmVsaWQpLCAw KTsKKyAgICB2X3VwZGF0ZXMgOj0gQ09BTEVTQ0UocGdfc3RhdF9nZXRfdHVwbGVzX3VwZGF0ZWQo dl9yZWxpZCksIDApOworICAgIHZfeGFjdF9ob3RfdXBkYXRlcyA6PSBDT0FMRVNDRShwZ19zdGF0 X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCh2X3JlbGlkKSwgMCk7CisgICAgdl94YWN0X3Vw ZGF0ZXMgOj0gQ09BTEVTQ0UocGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfdXBkYXRlZCh2X3JlbGlk KSwgMCk7CisKKyAgICB2X2hvdF91cGRhdGVzIDo9IHZfaG90X3VwZGF0ZXMgKyB2X3hhY3RfaG90 X3VwZGF0ZXM7CisgICAgdl91cGRhdGVzIDo9IHZfdXBkYXRlcyArIHZfeGFjdF91cGRhdGVzOwor CisgICAgUkVUVVJOIFFVRVJZCisgICAgU0VMRUNUCisJcF90YWJsZV9uYW1lOjpURVhULAorCXZf dXBkYXRlczo6QklHSU5ULAorCXZfaG90X3VwZGF0ZXM6OkJJR0lOVCwKKwlDQVNFIFdIRU4gdl91 cGRhdGVzID4gMAorCSAgICAgVEhFTiBST1VORCgodl9ob3RfdXBkYXRlczo6bnVtZXJpYyAvIHZf dXBkYXRlczo6bnVtZXJpYyAqIDEwMCk6Om51bWVyaWMsIDIpCisJICAgICBFTFNFIDAKKwlFTkQs CisJKHZfaG90X3VwZGF0ZXMgPSBleHBlY3RlZCk6OkJPT0xFQU47CitFTkQ7CiskJDsKKworQ1JF QVRFIENPTExBVElPTiBjYXNlX2luc2Vuc2l0aXZlICgKKyAgICBwcm92aWRlciA9IGxpYmMsCisg ICAgbG9jYWxlID0gJ0MnCispOworCisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIEdJTiBJbmRleCBvbiBKU09O QgorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBkYXRhIEpTT05CKQorICAgIFdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJ TkRFWCB0X2dpbl9pZHggT04gdCBVU0lORyBnaW4oZGF0YSk7CitJTlNFUlQgSU5UTyB0IFZBTFVF UyAoMSwgJ3sidGFncyI6IFsicG9zdGdyZXMiLCAiZGF0YWJhc2UiXX0nKTsKKworLS0gQ2hhbmdl IHRhZ3MgLSBHSU4ga2V5cyBjaGFuZ2VkLCBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VU IGRhdGEgPSAneyJ0YWdzIjogWyJwb3N0Z3JlcyIsICJzcWwiXX0nIFdIRVJFIGlkID0gMTsKK1NF TEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCk7CisKKy0tIENoYW5nZSB0YWdzIGFnYWlu IC0gR0lOIGtleXMgY2hhbmdlZCwgc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFURSB0IFNFVCBkYXRh ID0gJ3sidGFncyI6IFsibXlzcWwiLCAic3FsIl19JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBG Uk9NIGNoZWNrX2hvdF91cGRhdGVzKDApOworCistLSBBZGQgZmllbGQgd2l0aG91dCBjaGFuZ2lu ZyBleGlzdGluZyBrZXlzIC0gR0lOIGtleXMgY2hhbmdlZCAoYWRkZWQgIm5vdGUiKSwgTk9UIEhP VAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJ0YWdzIjogWyJteXNxbCIsICJzcWwiXSwgIm5vdGUi OiAidGVzdCJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVz KDApOworCitEUk9QIFRBQkxFIHQ7CisKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gR0lOIEluZGV4IHdpdGgg VW5jaGFuZ2VkIEtleXMKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwgZGF0YSBK U09OQikKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3 MCk7CistLSBDcmVhdGUgR0lOIGluZGV4IG9uIHNwZWNpZmljIHBhdGgKK0NSRUFURSBJTkRFWCB0 X2dpbl9pZHggT04gdCBVU0lORyBnaW4oKGRhdGEtPid0YWdzJykpOworSU5TRVJUIElOVE8gdCBW QUxVRVMgKDEsICd7InRhZ3MiOiBbInBvc3RncmVzIiwgInNxbCJdLCAic3RhdHVzIjogImFjdGl2 ZSJ9Jyk7CisKKy0tIENoYW5nZSBub24taW5kZXhlZCBmaWVsZCAtIEdJTiBrZXlzIG9uICd0YWdz JyB1bmNoYW5nZWQsIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3sidGFncyI6 IFsicG9zdGdyZXMiLCAic3FsIl0sICJzdGF0dXMiOiAiaW5hY3RpdmUifScgV0hFUkUgaWQgPSAx OworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKworLS0gQ2hhbmdlIGluZGV4 ZWQgdGFncyAtIEdJTiBrZXlzIGNoYW5nZWQsIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBT RVQgZGF0YSA9ICd7InRhZ3MiOiBbIm15c3FsIiwgInNxbCJdLCAic3RhdHVzIjogImluYWN0aXZl In0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisK K0RST1AgVEFCTEUgdDsKKworCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBHSU4gd2l0aCBqc29uYl9wYXRoX29w cworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBkYXRhIEpTT05CKQorICAgIFdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJ TkRFWCB0X2dpbl9pZHggT04gdCBVU0lORyBnaW4oZGF0YSBqc29uYl9wYXRoX29wcyk7CitJTlNF UlQgSU5UTyB0IFZBTFVFUyAoMSwgJ3sidXNlciI6IHsibmFtZSI6ICJhbGljZSJ9LCAidGFncyI6 IFsiYSIsICJiIl19Jyk7CisKKy0tIENoYW5nZSB2YWx1ZSBhdCBkaWZmZXJlbnQgcGF0aCAtIGtl eXMgY2hhbmdlZCwgTk9UIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJ1c2VyIjogeyJuYW1l IjogImJvYiJ9LCAidGFncyI6IFsiYSIsICJiIl19JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBG Uk9NIGNoZWNrX2hvdF91cGRhdGVzKDApOworCitEUk9QIFRBQkxFIHQ7CisKKworLS0gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorLS0gTWl4ZWQgSW5kZXggVHlwZXMgKEJSSU4gKyBFeHByZXNzaW9uKQorLS0gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor Q1JFQVRFIFRBQkxFIHQoaWQgSU5ULCB2YWx1ZSBJTlQsIGRhdGEgSlNPTkIpCisgICAgV0lUSCAo YXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVY IHRfYnJpbl9pZHggT04gdCBVU0lORyBicmluKHZhbHVlKTsKK0NSRUFURSBJTkRFWCB0X2V4cHJf aWR4IE9OIHQoKGRhdGEtPidzdGF0dXMnKSk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgMTAw LCAneyJzdGF0dXMiOiAiYWN0aXZlIn0nKTsKKworLS0gVXBkYXRlIG9ubHkgQlJJTiBjb2x1bW4g LSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgdmFsdWUgPSAyMDAgV0hFUkUgaWQgPSAxOwor U0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKworLS0gVXBkYXRlIG9ubHkgZXhw cmVzc2lvbiBjb2x1bW4gLSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAn eyJzdGF0dXMiOiAiaW5hY3RpdmUifScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVj a19ob3RfdXBkYXRlcygxKTsKKworLS0gVXBkYXRlIGJvdGggLSBzaG91bGQgTk9UIGJlIEhPVAor VVBEQVRFIHQgU0VUIHZhbHVlID0gMzAwLCBkYXRhID0gJ3sic3RhdHVzIjogInBlbmRpbmcifScg V0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKworRFJP UCBUQUJMRSB0OworCisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIEdJTiBBcnJheSBJbmRleCAtIE9yZGVyIElu c2Vuc2l0aXZlIEV4dHJhY3Rpb24KKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KAorICAgIGlk IElOVCBQUklNQVJZIEtFWSwKKyAgICBkYXRhIEpTT05CCispIFdJVEggKGF1dG92YWN1dW1fZW5h YmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKKworLS0gR0lOIGluZGV4IG9uIEpTT05CIGFy cmF5IChleHRyYWN0cyBhbGwgZWxlbWVudHMpCitDUkVBVEUgSU5ERVggdF9pdGVtc19naW4gT04g dCBVU0lORyBHSU4gKChkYXRhLT4naXRlbXMnKSk7CisKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgx LCAneyJpdGVtcyI6IFsxLCAyLCAzXSwgInN0YXR1cyI6ICJhY3RpdmUifScpOworCistLSBVcGRh dGU6IFJlb3JkZXIgYXJyYXkgZWxlbWVudHMKKy0tIEpTT05CIGVxdWFsaXR5OiBOT1QgZXF1YWwg KGRpZmZlcmVudCBhcnJheXMpCistLSBHSU4gZXh0cmFjdGlvbjogU2FtZSBlbGVtZW50cyBleHRy YWN0ZWQgKG1pZ2h0IGFsbG93IEhPVCBpZiBub3QgY2FyZWZ1bCkKK1VQREFURSB0IFNFVCBkYXRh ID0gJ3siaXRlbXMiOiBbMywgMiwgMV0sICJzdGF0dXMiOiAiYWN0aXZlIn0nIFdIRVJFIGlkID0g MTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisKKy0tIFVwZGF0ZTogQWRk L3JlbW92ZSBlbGVtZW50CitVUERBVEUgdCBTRVQgZGF0YSA9ICd7Iml0ZW1zIjogWzEsIDIsIDMs IDRdLCAic3RhdHVzIjogImFjdGl2ZSJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNo ZWNrX2hvdF91cGRhdGVzKDEpOworCitEUk9QIFRBQkxFIHQ7CisKKworLS0gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0g VEVTVDogR0lOIHdpdGggVE9BU1RlZCBURVhUICh0c3ZlY3RvcikKKy0tID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFU RSBUQUJMRSB0KGlkIElOVCwgY29udGVudCBURVhULCBzZWFyY2hfdmVjIHRzdmVjdG9yKQorICAg IFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKKworLS0g Q3JlYXRlIHRyaWdnZXIgdG8gbWFpbnRhaW4gdHN2ZWN0b3IKK0NSRUFURSBUUklHR0VSIHRzdmVj dG9ydXBkYXRlX3RvYXN0CisgICAgQkVGT1JFIElOU0VSVCBPUiBVUERBVEUgT04gdAorICAgIEZP UiBFQUNIIFJPVyBFWEVDVVRFIEZVTkNUSU9OCisgICAgdHN2ZWN0b3JfdXBkYXRlX3RyaWdnZXIo c2VhcmNoX3ZlYywgJ3BnX2NhdGFsb2cuZW5nbGlzaCcsIGNvbnRlbnQpOworCitDUkVBVEUgSU5E RVggdF9naW4gT04gdCBVU0lORyBnaW4oc2VhcmNoX3ZlYyk7CisKKy0tIEluc2VydCB3aXRoIGxh cmdlIGNvbnRlbnQgKHdpbGwgYmUgVE9BU1RlZCkKK0lOU0VSVCBJTlRPIHQgKGlkLCBjb250ZW50 KSBWQUxVRVMKKyAgICAoMSwgcmVwZWF0KCdpbXBvcnRhbnQga2V5d29yZCAnLCAxMDAwKSB8fCBy ZXBlYXQoJ2ZpbGxlciB0ZXh0ICcsIDEwMDAwKSk7CisKKy0tIFZlcmlmeSBpbml0aWFsIHN0YXRl CitTRUxFQ1QgY291bnQoKikgRlJPTSB0IFdIRVJFIHNlYXJjaF92ZWMgQEAgdG9fdHNxdWVyeSgn aW1wb3J0YW50Jyk7CistLSBFeHBlY3RlZDogMSByb3cKKworLS0gSU1QT1JUQU5UOiBUaGUgQkVG T1JFIFVQREFURSB0cmlnZ2VyIG1vZGlmaWVzIHNlYXJjaF92ZWMsIHNvIGJ5IHRoZSB0aW1lCist LSBFeGVjV2hpY2hJbmRleGVzUmVxdWlyZVVwZGF0ZXMoKSBydW5zLCBzZWFyY2hfdmVjIGhhcyBh bHJlYWR5IGNoYW5nZWQuCistLSBUaGlzIG1lYW5zIHRoZSBjb21wYXJpc29uIHNlZXMgb2xkIHRz dmVjdG9yIHZzLiB0cmlnZ2VyLW1vZGlmaWVkIHRzdmVjdG9yLAorLS0gbm90IHRoZSBuYXR1cmFs IHByb2dyZXNzaW9uLiBIT1Qgd29uJ3QgaGFwcGVuIGJlY2F1c2UgdGhlIHRyaWdnZXIgY2hhbmdl ZAorLS0gdGhlIGluZGV4ZWQgY29sdW1uLgorCistLSBVcGRhdGU6IEV2ZW4gdGhvdWdoIGNvbnRl bnQga2V5d29yZHMgdW5jaGFuZ2VkLCB0cmlnZ2VyIHN0aWxsIGZpcmVzCitVUERBVEUgdAorU0VU IGNvbnRlbnQgPSByZXBlYXQoJ2ltcG9ydGFudCBrZXl3b3JkICcsIDEwMDApIHx8IHJlcGVhdCgn ZGlmZmVyZW50IGZpbGxlciAnLCAxMDAwMCkKK1dIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00g Y2hlY2tfaG90X3VwZGF0ZXMoMCk7CistLSBFeHBlY3RlZDogMCBIT1QgKHRyaWdnZXIgbW9kaWZp ZXMgc2VhcmNoX3ZlYywgYmxvY2tpbmcgSE9UKQorLS0gVGhpcyBpcyBhY3R1YWxseSBjb3JyZWN0 IGJlaGF2aW9yIC0gdGhlIHRyaWdnZXIgdXBkYXRlZCBhbiBpbmRleGVkIGNvbHVtbgorCistLSBV cGRhdGU6IENoYW5nZSBpbmRleGVkIGtleXdvcmRzCitVUERBVEUgdAorU0VUIGNvbnRlbnQgPSBy ZXBlYXQoJ2NyaXRpY2FsIGtleXdvcmQgJywgMTAwMCkgfHwgcmVwZWF0KCdkaWZmZXJlbnQgZmls bGVyICcsIDEwMDAwKQorV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBk YXRlcygwKTsKKy0tIEV4cGVjdGVkOiAwIEhPVCAoaW5kZXgga2V5cyBjaGFuZ2VkKQorCistLSBW ZXJpZnkgcXVlcnkgY29ycmVjdG5lc3MKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHQgV0hFUkUgc2Vh cmNoX3ZlYyBAQCB0b190c3F1ZXJ5KCdjcml0aWNhbCcpOworLS0gRXhwZWN0ZWQ6IDEgcm93CisK K0RST1AgVEFCTEUgdCBDQVNDQURFOworCisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIFRFU1Q6IEdJTiB3aXRo IEFycmF5IG9mIExhcmdlIFN0cmluZ3MKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElO VCwgdGFncyBURVhUW10pCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxs ZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfZ2luIE9OIHQgVVNJTkcgZ2luKHRhZ3MpOwor CistLSBJbnNlcnQgd2l0aCBsYXJnZSBhcnJheSBlbGVtZW50cyAobWlnaHQgYmUgVE9BU1RlZCkK K0lOU0VSVCBJTlRPIHQgKGlkLCB0YWdzKSBWQUxVRVMKKyAgICAoMSwgQVJSQVlbcmVwZWF0KCd0 YWcxJywgMTAwMCksIHJlcGVhdCgndGFnMicsIDEwMDApXSk7CisKKy0tIFVwZGF0ZTogQ2hhbmdl IHRvIGRpZmZlcmVudCBsYXJnZSB2YWx1ZXMgLSBOT1QgSE9UCitVUERBVEUgdAorU0VUIHRhZ3Mg PSBBUlJBWVtyZXBlYXQoJ3RhZzMnLCAxMDAwKSwgcmVwZWF0KCd0YWc0JywgMTAwMCldCitXSEVS RSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDApOworLS0gRXhwZWN0 ZWQ6IDAgSE9UIChrZXlzIGFjdHVhbGx5IGNoYW5nZWQpCisKKy0tIFVwZGF0ZTogS2VlcCBzYW1l IHRhZyB2YWx1ZXMsIGp1c3QgcmVvcmRlciAtIFNIT1VMRCBCRSBIT1QKKy0tIChHSU4gaXMgb3Jk ZXItaW5zZW5zaXRpdmU6IGJvdGggW3RhZzMsdGFnNF0gYW5kIFt0YWc0LHRhZzNdCistLSBleHRy YWN0IHRvIHRoZSBzYW1lIHNvcnRlZCBrZXkgc2V0IFsndGFnMycsJ3RhZzQnXSkKK1VQREFURSB0 CitTRVQgdGFncyA9IEFSUkFZW3JlcGVhdCgndGFnNCcsIDEwMDApLCByZXBlYXQoJ3RhZzMnLCAx MDAwKV0KK1dIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7 CistLSBFeHBlY3RlZDogMSBIT1QgKEdJTiBrZXlzIHNlbWFudGljYWxseSBpZGVudGljYWwpCisK Ky0tIFVwZGF0ZTogUmVtb3ZlIGFuIGVsZW1lbnQgLSBOT1QgSE9UIChrZXlzIGNoYW5nZWQpCitV UERBVEUgdAorU0VUIHRhZ3MgPSBBUlJBWVtyZXBlYXQoJ3RhZzQnLCAxMDAwKV0KK1dIRVJFIGlk ID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CistLSBFeHBlY3RlZDog U3RpbGwgMSBIT1QgKG5vdCB0aGlzIG9uZSkKKworRFJPUCBUQUJMRSB0IENBU0NBREU7CisKKwor LS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorLS0gQlJJTiBJbmRleCB3aXRoIFBhcnRpYWwgUHJlZGljYXRlCistLSA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CitDUkVBVEUgVEFCTEUgdCgKKyAgICBpZCBJTlQgUFJJTUFSWSBLRVksCisgICAgdmFsdWUg SU5ULAorICAgIGRlc2NyaXB0aW9uIFRFWFQKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g b2ZmLCBmaWxsZmFjdG9yID0gNzApOworCitDUkVBVEUgSU5ERVggdF9icmluX3BhcnRpYWxfaWR4 IE9OIHQgVVNJTkcgYnJpbih2YWx1ZSkgV0hFUkUgdmFsdWUgPiAxMDA7CisKK0lOU0VSVCBJTlRP IHQgVkFMVUVTICgxLCA1MCwgJ2JlbG93IHJhbmdlJyk7CisKKy0tIFRlc3QgMTogT3V0c2lkZSBw cmVkaWNhdGUKK1VQREFURSB0IFNFVCBkZXNjcmlwdGlvbiA9ICd1cGRhdGVkJyBXSEVSRSBpZCA9 IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworCistLSBWYWxpZGF0ZTog UHJlZGljYXRlIHF1ZXJ5IHJldHVybnMgMCByb3dzCitTRUxFQ1QgQ09VTlQoKikgYXMgY250IEZS T00gdCBXSEVSRSB2YWx1ZSA+IDEwMDsKKworLS0gVGVzdCAyOiBUcmFuc2l0aW9uIGludG8gcHJl ZGljYXRlCitVUERBVEUgdCBTRVQgdmFsdWUgPSAxNTAgV0hFUkUgaWQgPSAxOworU0VMRUNUICog RlJPTSBjaGVja19ob3RfdXBkYXRlcygyKTsKKworLS0gVmFsaWRhdGU6IFByZWRpY2F0ZSBxdWVy eSByZXR1cm5zIDEgcm93IHdpdGggY29ycmVjdCB2YWx1ZQorU0VMRUNUIENPVU5UKCopIGFzIGNu dCwgTUFYKHZhbHVlKSBhcyBtYXhfdmFsIEZST00gdCBXSEVSRSB2YWx1ZSA+IDEwMDsKKworLS0g VGVzdCAzOiBJbnNpZGUgcHJlZGljYXRlLCB2YWx1ZSBjaGFuZ2VzCitVUERBVEUgdCBTRVQgdmFs dWUgPSAxNjAsIGRlc2NyaXB0aW9uID0gJ3VwZGF0ZWQgYWdhaW4nIFdIRVJFIGlkID0gMTsKK1NF TEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMyk7CisKKy0tIFZhbGlkYXRlOiBVcGRhdGVk IHZhbHVlICgxNjApIGlzIHJldHVybmVkCitTRUxFQ1QgQ09VTlQoKikgYXMgY250LCBNQVgodmFs dWUpIGFzIG1heF92YWwgRlJPTSB0IFdIRVJFIHZhbHVlID4gMTAwOworCistLSBUZXN0IDQ6IFRy YW5zaXRpb24gb3V0IG9mIHByZWRpY2F0ZQorVVBEQVRFIHQgU0VUIHZhbHVlID0gNTAgV0hFUkUg aWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcyg0KTsKKworU0VMRUNUIENP VU5UKCopIGFzIGNudCBGUk9NIHQgV0hFUkUgdmFsdWUgPiAxMDA7CisKK1NFTEVDVCBpZCwgdmFs dWUsIGRlc2NyaXB0aW9uIEZST00gdDsKKworRFJPUCBUQUJMRSB0IENBU0NBREU7CisKKworLS0g PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorLS0gSEFTSCBJbmRleCAoU2ltcGxlIENvbHVtbikKKy0tID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFU RSBUQUJMRSB0KGlkIElOVCwgY29kZSBWQVJDSEFSKDIwKSwgZGVzY3JpcHRpb24gVEVYVCkKKyAg ICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVB VEUgSU5ERVggdF9oYXNoX2lkeCBPTiB0IFVTSU5HIGhhc2goY29kZSk7CitJTlNFUlQgSU5UTyB0 IFZBTFVFUyAoMSwgJ0NPREUwMDEnLCAnaW5pdGlhbCcpOworCistLSBVcGRhdGUgbm9uLWluZGV4 ZWQgY29sdW1uIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRlc2NyaXB0aW9uID0gJ3Vw ZGF0ZWQnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7 CisKKy0tIFVwZGF0ZSBpbmRleGVkIGNvbHVtbiAtIEhBU0ggaW5kZXggcmVxdWlyZXMgdXBkYXRl LCBOT1QgSE9UCitVUERBVEUgdCBTRVQgY29kZSA9ICdDT0RFMDAyJyBXSEVSRSBpZCA9IDE7CitT RUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworCistLSBVcGRhdGUgYm90aCAtIE5P VCBIT1QKK1VQREFURSB0IFNFVCBjb2RlID0gJ0NPREUwMDMnLCBkZXNjcmlwdGlvbiA9ICdjaGFu Z2VkJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOwor CistLSBCYWNrIHRvIG9yaWdpbmFsIGNvZGUgLSBOT1QgSE9UIChkaWZmZXJlbnQgaGFzaCBidWNr ZXQgbG9jYXRpb24pCitVUERBVEUgdCBTRVQgY29kZSA9ICdDT0RFMDAxJyBXSEVSRSBpZCA9IDE7 CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworCitEUk9QIFRBQkxFIHQgQ0FT Q0FERTsKKworCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CistLSBIQVNIIEluZGV4IG9uIEV4cHJlc3Npb24KKy0tID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwgZW1haWwgVEVYVCwgZGF0YSBKU09OQikKKyAg ICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVB VEUgSU5ERVggdF9oYXNoX2xvd2VyX2VtYWlsX2lkeCBPTiB0IFVTSU5HIEhBU0gobG93ZXIoZW1h aWwpKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAnQWxpY2VARXhhbXBsZS5jb20nLCAneyJz dGF0dXMiOiAibmV3In0nKTsKKworLS0gVXBkYXRlIG5vbi1pbmRleGVkIGZpZWxkIC0gc2hvdWxk IGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJzdGF0dXMiOiAiYWN0aXZlIn0nIFdIRVJF IGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisKKy0tIFVwZGF0 ZSBlbWFpbCB3aXRoIGNhc2UgY2hhbmdlIG9ubHkgKHNhbWUgbG93ZXJjYXNlKSAtIHNob3VsZCBi ZSBIT1QKK1VQREFURSB0IFNFVCBlbWFpbCA9ICdhbGljZUBleGFtcGxlLmNvbScgV0hFUkUgaWQg PSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygyKTsKKworLS0gVXBkYXRlIGVt YWlsIHRvIGRpZmZlcmVudCBsb3dlcmNhc2UgLSBOT1QgSE9UCitVUERBVEUgdCBTRVQgZW1haWwg PSAnYm9iQGV4YW1wbGUuY29tJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hv dF91cGRhdGVzKDIpOworCitEUk9QIFRBQkxFIHQgQ0FTQ0FERTsKKworCistLSA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cist LSBNdWx0aXBsZSBIQVNIIEluZGV4ZXMKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElO VCwgY2F0ZWdvcnkgVkFSQ0hBUiwgc3RhdHVzIFZBUkNIQVIsIHZhbHVlIElOVCkKKyAgICBXSVRI IChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5E RVggdF9oYXNoX2NhdGVnb3J5X2lkeCBPTiB0IFVTSU5HIGhhc2goY2F0ZWdvcnkpOworQ1JFQVRF IElOREVYIHRfaGFzaF9zdGF0dXNfaWR4IE9OIHQgVVNJTkcgaGFzaChzdGF0dXMpOworSU5TRVJU IElOVE8gdCBWQUxVRVMgKDEsICdlbGVjdHJvbmljcycsICdhY3RpdmUnLCAxMDApOworCistLSBV cGRhdGUgbm9uLWluZGV4ZWQgY29sdW1uIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIHZh bHVlID0gMTUwIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMo MSk7CisKKy0tIFVwZGF0ZSBvbmUgaW5kZXhlZCBjb2x1bW4gLSBOT1QgSE9UCitVUERBVEUgdCBT RVQgY2F0ZWdvcnkgPSAnYm9va3MnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tf aG90X3VwZGF0ZXMoMSk7CisKKy0tIFVwZGF0ZSBvdGhlciBpbmRleGVkIGNvbHVtbiAtIE5PVCBI T1QKK1VQREFURSB0IFNFVCBzdGF0dXMgPSAnaW5hY3RpdmUnIFdIRVJFIGlkID0gMTsKK1NFTEVD VCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisKKy0tIFVwZGF0ZSBib3RoIGluZGV4ZWQg Y29sdW1ucyAtIE5PVCBIT1QKK1VQREFURSB0IFNFVCBjYXRlZ29yeSA9ICd2aWRlb3MnLCBzdGF0 dXMgPSAncGVuZGluZycgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBk YXRlcygxKTsKKworRFJPUCBUQUJMRSB0IENBU0NBREU7CisKKworLS0gPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gQlJJ TiB2cyBIQVNIIENvbXBhcmlzb24KKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0X2JyaW4oaWQg SU5ULCB2YWx1ZSBJTlQsIGRhdGEgVEVYVCkKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQg PSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgVEFCTEUgdF9oYXNoKGlkIElOVCwgdmFs dWUgSU5ULCBkYXRhIFRFWFQpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBm aWxsZmFjdG9yID0gNzApOworCitDUkVBVEUgSU5ERVggdF9icmluX3ZhbHVlX2lkeCBPTiB0X2Jy aW4gVVNJTkcgYnJpbih2YWx1ZSk7CitDUkVBVEUgSU5ERVggdF9oYXNoX3ZhbHVlX2lkeCBPTiB0 X2hhc2ggVVNJTkcgaGFzaCh2YWx1ZSk7CisKK0lOU0VSVCBJTlRPIHRfYnJpbiBWQUxVRVMgKDEs IDEwMCwgJ2luaXRpYWwnKTsKK0lOU0VSVCBJTlRPIHRfaGFzaCBWQUxVRVMgKDEsIDEwMCwgJ2lu aXRpYWwnKTsKKworLS0gU2FtZSB1cGRhdGUgb24gYm90aCAtIGRpZmZlcmVudCBIT1QgYmVoYXZp b3IgZXhwZWN0ZWQKKy0tIEJSSU46IG1pZ2h0IGFsbG93IEhPVCAocmFuZ2Ugc3VtbWFyeSB1bmNo YW5nZWQpCistLSBIQVNIOiBibG9ja3MgSE9UIChoYXNoIGJ1Y2tldCBjaGFuZ2VkKQorVVBEQVRF IHRfYnJpbiBTRVQgdmFsdWUgPSAxNTAgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVj a19ob3RfdXBkYXRlcygxLCAndF9icmluJyk7CistLSBFeHBlY3RlZDogMSBIT1QgKEJSSU4gYWxs b3dzIGl0IGZvciBzaW5nbGUgcm93KQorCitVUERBVEUgdF9oYXNoIFNFVCB2YWx1ZSA9IDE1MCBX SEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDAsICd0X2hhc2gn KTsKKy0tIEV4cGVjdGVkOiAwIEhPVCAoSEFTSCBibG9ja3MgaXQpCisKK0RST1AgVEFCTEUgdF9i cmluIENBU0NBREU7CitEUk9QIFRBQkxFIHRfaGFzaCBDQVNDQURFOworCisKKy0tID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K Ky0tIEhBU0ggSW5kZXggd2l0aCBOVUxMIFZhbHVlcworLS0gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxF IHQoaWQgSU5ULCBjYXRlZ29yeSBWQVJDSEFSLCBkYXRhIFRFWFQpCisgICAgV0lUSCAoYXV0b3Zh Y3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfaGFz aF9jYXRlZ29yeV9pZHggT04gdCBVU0lORyBoYXNoKGNhdGVnb3J5KTsKK0lOU0VSVCBJTlRPIHQg VkFMVUVTICgxLCAnZWxlY3Ryb25pY3MnLCAnaW5pdGlhbCcpOworCistLSBVcGRhdGUgaW5kZXhl ZCBjb2x1bW4gdG8gTlVMTCAtIE5PVCBIT1QgKGhhc2ggdmFsdWUgY2hhbmdlZCkKK1VQREFURSB0 IFNFVCBjYXRlZ29yeSA9IE5VTEwgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19o b3RfdXBkYXRlcygwKTsKKy0tIEV4cGVjdGVkOiAwIEhPVAorCistLSBVcGRhdGUgaW5kZXhlZCBj b2x1bW4gZnJvbSBOVUxMIHRvIHZhbHVlIC0gTk9UIEhPVAorVVBEQVRFIHQgU0VUIGNhdGVnb3J5 ID0gJ2Jvb2tzJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVz KDApOworLS0gRXhwZWN0ZWQ6IDAgSE9UCisKKy0tIFVwZGF0ZSBub24taW5kZXhlZCBjb2x1bW4g LSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd1cGRhdGVkJyBXSEVSRSBpZCA9 IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworLS0gRXhwZWN0ZWQ6IDEg SE9UCisKK0RST1AgVEFCTEUgdCBDQVNDQURFOworCisKKy0tID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIEJSSU4gb24g SlNPTkIgRmllbGQKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwgbWV0cmljcyBK U09OQikKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3 MCk7CistLSBCUklOIGRvZXNuJ3QgZGlyZWN0bHkgc3VwcG9ydCBKU09OQiwgYnV0IHdlIGNhbiB0 ZXN0IG9uIGV4cHJlc3Npb24KK0NSRUFURSBJTkRFWCB0X2JyaW5fY291bnRfaWR4IE9OIHQgVVNJ TkcgYnJpbigKKyAgICBDQVNUKG1ldHJpY3MtPj4nY291bnQnIEFTIElOVEVHRVIpCispOworSU5T RVJUIElOVE8gdCBWQUxVRVMgKDEsICd7ImNvdW50IjogIjEwMCIsICJ0aW1lc3RhbXAiOiAiMjAy NC0wMS0wMSJ9Jyk7CisKKy0tIFVwZGF0ZSBub24taW5kZXhlZCBKU09OQiBmaWVsZCAtIHNob3Vs ZCBiZSBIT1QKK1VQREFURSB0IFNFVCBtZXRyaWNzID0gJ3siY291bnQiOiAiMTAwIiwgInRpbWVz dGFtcCI6ICIyMDI0LTAxLTAyIn0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tf aG90X3VwZGF0ZXMoMSk7CistLSBFeHBlY3RlZDogMSBIT1QKKworLS0gVXBkYXRlIGluZGV4ZWQg ZmllbGQgLSBCUklOIGFsbG93cyBIT1QgZm9yIHNpbmdsZSByb3cKK1VQREFURSB0IFNFVCBtZXRy aWNzID0gJ3siY291bnQiOiAiMTUwIiwgInRpbWVzdGFtcCI6ICIyMDI0LTAxLTAyIn0nIFdIRVJF IGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMik7CistLSBFeHBlY3Rl ZDogMiBIT1QgKEJSSU4gcGVybWl0cyBzaW5nbGUtcm93IHVwZGF0ZXMpCisKK0RST1AgVEFCTEUg dCBDQVNDQURFOworCisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIE1peGVkIEJSSU4gKyBIQVNIIG9uIFNhbWUg VGFibGUKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwgY2F0ZWdvcnkgVkFSQ0hB UiwgdGltZXN0YW1wIFRJTUVTVEFNUCwgcHJpY2UgTlVNRVJJQywgZGF0YSBURVhUKQorICAgIFdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJ TkRFWCB0X2JyaW5fdGltZXN0YW1wX2lkeCBPTiB0IFVTSU5HIGJyaW4odGltZXN0YW1wKTsKK0NS RUFURSBJTkRFWCB0X2hhc2hfY2F0ZWdvcnlfaWR4IE9OIHQgVVNJTkcgaGFzaChjYXRlZ29yeSk7 CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ2Jvb2tzJywgJzIwMjQtMDEtMDEgMTA6MDA6MDAn LCAyOS45OSwgJ2luaXRpYWwnKTsKKworLS0gVXBkYXRlIG5vbi1pbmRleGVkIGNvbHVtbiAtIHNo b3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3VwZGF0ZWQnIFdIRVJFIGlkID0gMTsK K1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CistLSBFeHBlY3RlZDogMSBIT1QK KworLS0gVXBkYXRlIEJSSU4gaW5kZXhlZCBjb2x1bW4gLSBhbGxvd3MgSE9UCitVUERBVEUgdCBT RVQgdGltZXN0YW1wID0gJzIwMjQtMDEtMDIgMTA6MDA6MDAnIFdIRVJFIGlkID0gMTsKK1NFTEVD VCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMik7CistLSBFeHBlY3RlZDogMiBIT1QKKworLS0g VXBkYXRlIEhBU0ggaW5kZXhlZCBjb2x1bW4gLSBibG9ja3MgSE9UCitVUERBVEUgdCBTRVQgY2F0 ZWdvcnkgPSAndmlkZW9zJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91 cGRhdGVzKDIpOworLS0gRXhwZWN0ZWQ6IDIgSE9UIChIQVNIIGJsb2NrcyBpdCkKKworLS0gVXBk YXRlIHByaWNlIChub24taW5kZXhlZCkgLSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgcHJp Y2UgPSAzOS45OSBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVz KDMpOworLS0gRXhwZWN0ZWQ6IDMgSE9UCisKK0RST1AgVEFCTEUgdCBDQVNDQURFOworCisKKy0t ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKy0tIEluZGV4IGJvdGggb24gYSBmaWVsZCBpbiBhIEpTT05CIGRvY3VtZW50LCBh bmQgdGhlIGRvY3VtZW50CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQgUFJJTUFS WSBLRVksIGRvY3MgSlNPTkIpIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZh Y3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2RvY3NfaWR4IE9OIHQoKGRvY3MtPiduYW1lJykp OworQ1JFQVRFIElOREVYIHRfZG9jc19jb2xfaWR4IE9OIHQoZG9jcyk7CitJTlNFUlQgSU5UTyB0 IFZBTFVFUyAoMSwgJ3sibmFtZSI6ICJqb2huIiwgImRhdGEiOiAic29tZSBkYXRhIn0nKTsKKwor LS0gVXBkYXRlIGltcGFjdHMgaW5kZXggb24gd2hvbGUgZG9jbWVudCBhdHRyaWJ1dGUsIGNhbid0 IGdvIEhPVAorVVBEQVRFIHQgU0VUIGRvY3M9J3sibmFtZSI6ICJqb2huIiwgImRhdGEiOiAic29t ZSBvdGhlciBkYXRhIn0nIFdIRVJFIGlkPTE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRh dGVzKDApOworCitEUk9QIFRBQkxFIHQgQ0FTQ0FERTsKKworCistLSBDbGVhbnVwCitEUk9QIEZV TkNUSU9OIGNoZWNrX2hvdF91cGRhdGVzKGludCwgdGV4dCwgdGV4dCk7CitEUk9QIENPTExBVElP TiBjYXNlX2luc2Vuc2l0aXZlOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBjZjNmNmE3 ZGFmZC4uNGNjN2E5ZDRjN2QgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0zOTAsNiAr MzkwLDcgQEAgQ2FjaGVkRnVuY3Rpb25Db21waWxlQ2FsbGJhY2sKIENhY2hlZEZ1bmN0aW9uRGVs ZXRlQ2FsbGJhY2sKIENhY2hlZEZ1bmN0aW9uSGFzaEVudHJ5CiBDYWNoZWRGdW5jdGlvbkhhc2hL ZXkKK0NhY2hlZEluZGV4RGF0dW0KIENhY2hlZFBsYW4KIENhY2hlZFBsYW5Tb3VyY2UKIENhbGxD b250ZXh0Ci0tIAoyLjUxLjIKCg== --6930b44e_6839fabe_1328--