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 1vr0N4-004pvM-07 for pgsql-hackers@arkaria.postgresql.org; Fri, 13 Feb 2026 21:06:38 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vr0N2-00GCxs-2n for pgsql-hackers@arkaria.postgresql.org; Fri, 13 Feb 2026 21:06:36 +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 1vr0N1-00GCxk-2e for pgsql-hackers@lists.postgresql.org; Fri, 13 Feb 2026 21:06:36 +0000 Received: from fout-a2-smtp.messagingengine.com ([103.168.172.145]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vr0Mx-00000000Y67-1yJa for pgsql-hackers@postgresql.org; Fri, 13 Feb 2026 21:06:34 +0000 Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailfout.phl.internal (Postfix) with ESMTP id 26A39EC0053 for ; Fri, 13 Feb 2026 16:06:29 -0500 (EST) Received: from phl-imap-14 ([10.202.2.87]) by phl-compute-02.internal (MEProxy); Fri, 13 Feb 2026 16:06:29 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=burd.me; h=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=fm3; t=1771016789; x=1771103189; bh=IzDJlUJK74 otOKNaPmrcNtRkDisejrV/m9dObILasLk=; b=jdLMnGoD9QIhVnZv0/u5uQ1h+3 1CfiMHn02H+GCOkN1CRnBjLkEJ8R6/Hs205Kb1UUKt7foBpYiIX9sxIFkEGQSeUF 62rWd3WHajkzjL5m9unJDNJYbY9tes0J3K4SwlQwbgRC9pz9sT2mdNg8zbqGj/2T 0mzPsTuTUj7lUnTTfkUP0l/dfRqIbKht7oSG2ls48daLR1CJbz52nBc/AMjOd6go bwgIPwIJf9Xudngn1JjiymSMkArtwAlI8A/IT/iZqgKPe4L/1euFaahK1IfTgYKg eSzriS8wFfMLXR0pac4wQG2dmtI5BFci5jkivtLruteRwwJ3S6W60FhuXiPA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=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=fm3; t= 1771016789; x=1771103189; bh=IzDJlUJK74otOKNaPmrcNtRkDisejrV/m9d ObILasLk=; b=NsSO8FR2aiKZJZPtYXIhXnoeBKYlmOrm7JK0sc3boqpHyMIx/0z DuCj/bGDgu0NGWsTKePd1IjbmXdZvZklL6Gkxh9yq38epJYvt3TyoQegSfYbcbrw 1JSGHc3E96CE6RXdqKWVyklsN0yEu1ph8j/V7VGskfm+p1siyzPZWPzpLuv2hkjY i1H2WK39Z4/QwPdfwA1xmL68W+fDqHLDwva7P7lPuJTitEDNSSASOB/nB6YHpj65 pTkZ8ayby+nPWHtaUD175xAw0XQQWFxa1OfyTZhn8r6Zh/WVmJPfsNeTF7W3q3ww N3PIBkezlAxBr+JV4DOzeJl6p1Kc4o3hx8g== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefgedrtddtgddvtdelvdekucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucenucfjughrpefoggffhffvkfgjfhfutgesmhdtreerre dttdenucfhrhhomhepfdfirhgvghcuuehurhgufdcuoehgrhgvghessghurhgurdhmvgeq necuggftrfgrthhtvghrnhepkeegleegteduleegvefgkeegvdeghfettdehiedtieekgf egteehfedvheduhefhnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghi lhhfrhhomhepghhrvghgsegsuhhrugdrmhgvpdhnsggprhgtphhtthhopedupdhmohguvg epshhmthhpohhuthdprhgtphhtthhopehpghhsqhhlqdhhrggtkhgvrhhssehpohhsthhg rhgvshhqlhdrohhrgh X-ME-Proxy: Feedback-ID: i675e48f3:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id EC5C2C4006E; Fri, 13 Feb 2026 16:06:28 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: A1gxZgRQNkgk Date: Fri, 13 Feb 2026 16:06:08 -0500 From: "Greg Burd" To: pgsql-hackers Message-Id: In-Reply-To: <97769442-2ed7-4fe0-a393-7e2b5ff7ff58@app.fastmail.com> References: <5165C147-B476-4E3D-AAA9-11C0B966FC4D@greg.burd.me> <9394564A-5764-4DCA-8845-8AE102DE61DC@greg.burd.me> <97769442-2ed7-4fe0-a393-7e2b5ff7ff58@app.fastmail.com> Subject: Re: Expanding HOT updates for expression and partial indexes Content-Type: multipart/mixed; boundary=2e386174da524699aee922c1c73d201d List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --2e386174da524699aee922c1c73d201d Content-Type: text/plain Content-Transfer-Encoding: 7bit On Tue, Feb 10, 2026, at 10:09 AM, Greg Burd wrote: > Hello, > > TL;DR, I'm going to put a pin in this idea for now. Okay, I couldn't put the pen down after all. :) Here's my thinking, this patch set can be thought of as: a) moving HeapDetermineColumnsInfo() into the executor b) all that HOT nonsense I feel that (a) has value even without (b), that removing a chunk of work from within an exclusive buffer lock to outside that lock is a Good Thing(TM) and could in this case result in more concurrency. To that end, present to you a single patch that *only* does (a), it moves the logic of HeapDeterminColumnsInfo() into the executor and doesn't change anything else. Meaning that what goes HOT today (without this patch), should continue to be HOT tomorrow (with this patch) and nothing else. Catalog tuples use simple_heap_update() which calls HeapDeterminColumnsInfo() just as it does now, so these results are also identical. Logically replicated tuples avoid HeapDeterminColumnsInfo() because the carry with them the set of changed attributes, so I surface that from within slot_modify_data() and intersect it with the set of indexed attributes resulting in an identical update while avoiding that overhead. This has to run faster, I'll measure it ASAP and post, but I thought I'd share this now to potentially keep the ball rolling. best. -greg PS: I'll layer in the additional changes in a future post that expand HOT, but those can be viewed in the context of "maybe in v20" while I hope that this patch could be potentially acceptable in v19. --2e386174da524699aee922c1c73d201d Content-Disposition: attachment; filename*0="v20260211-0001-Idenfity-modified-indexed-attributes-in-th.pat"; filename*1="ch" Content-Type: text/x-patch; name="=?UTF-8?Q?v20260211-0001-Idenfity-modified-indexed-attributes-in-th.patc?= =?UTF-8?Q?h?=" Content-Transfer-Encoding: base64 RnJvbSBiNGQwYjQyOTQzYjY4YTUyMmIxMzkwOTNhMjdmYzc4NjkyMWNkMjJmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTog U3VuLCAyIE5vdiAyMDI1IDExOjM2OjIwIC0wNTAwClN1YmplY3Q6IFtQQVRDSCB2MjAyNjAy MTFdIElkZW5maXR5IG1vZGlmaWVkIGluZGV4ZWQgYXR0cmlidXRlcyBpbiB0aGUKIGV4ZWN1 dG9yIG9uIFVQREFURQoKUmVmYWN0b3IgZXhlY3V0b3IgdXBkYXRlIGxvZ2ljIHRvIGRldGVy bWluZSB3aGljaCBpbmRleGVkIGNvbHVtbnMgaGF2ZQphY3R1YWxseSBjaGFuZ2VkIGR1cmlu ZyBhbiBVUERBVEUgb3BlcmF0aW9uIHJhdGhlciB0aGFuIGxlYXZpbmcgdGhpcyB1cAp0byBI ZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8oKSBpbiBoZWFwX3VwZGF0ZSgpLgoKRXhlY1doaWNo SW5kZXhlc1JlcXVpcmVVcGRhdGVzKCkgcmVwbGFjZXMgSGVhcERldGVybWluZXNDb2x1bW5z SW5mbygpCmFuZCBpcyBjYWxsZWQgYmVmb3JlIHRhYmxlX3R1cGxlX3VwZGF0ZSgpIGNydWNp YWxseSB3aXRob3V0IHRoZSBuZWVkCmZvciBhbiBleGNsdXNpdmUgYnVmZmVyIGxvY2sgb24g dGhlIHBhZ2UgdGhhdCBob2xkcyB0aGUgdHVwbGUgYmVpbmcKdXBkYXRlZC4gIFRoaXMgcmVk dWNlcyB0aGUgdGltZSB0aGUgbG9jayBpcyBoZWxkIGxhdGVyIHdpdGhpbgpoZWFwYW1fdHVw bGVfdXBkYXRlKCkgYW5kIGhlYXBfdXBkYXRlKCkuCgpDYXRhbG9nIHR1cGxlIHVwZGF0ZXMg dXNlIHNpbXBsZV9oZWFwX3VwZGF0ZSgpIHdoaWNoIHN0aWxsIGNhbGxzIGludG8KSGVhcERl dGVybWluZXNDb2x1bW5JbmZvKCkgdG8gaWRlbnRpZnkgbW9kaWZpZWQgaW5kZXhlZCBhdHRy aWJ1dGVzIGFzCmJlZm9yZSBob3dldmVyIHNvbWUgb2YgdGhlIHNhbWUgbG9naWMgbm93IGlu IGhlYXBhbV90dXBsZV91cGRhdGUoKSBpcwpyZXBsaWNhdGVkIGluIHNpbXBsZV9oZWFwX3Vw ZGF0ZSgpLiAgVGhlIHNwZWNpYWwgY2FzZSBmb3IKSXRlbUlkSXNOb3JtYWwoKSBvbmx5IGFw cGxpZXMgdG8gY2F0YWxvZyB0dXBsZSB1cGRhdGVzIGFuZCBzbyB0aGF0IGNvZGUKcmVtYWlu cyBpbiBzaW1wbGVfaGVhcF91cGRhdGUoKSwgYnV0IG5vdCBpbiBvdGhlciBwYXRocy4KClVw ZGF0ZXMgc3RlbW1pbmcgZnJvbSBsb2dpY2FsIHJlcGxpY2F0aW9uIG5vdyBhdm9pZCBjYWxs aW5nCkhlYXBEZXRlcm1pbmVDb2x1bW5zSW5mbygpIGFzIHdlbGwuIFRoZSBtb2RpZmllZCBp bmRleGVkIGF0dHJpYnV0ZXMgZm9yCnRoZXNlIHVwZGF0ZXMgYXJlIG5vdyBzaW1wbHkgdGhl IGludGVyc2VjdGlvbiBvZiB0aGUgYXR0cmJ1dGVzIHJldHVybmVkCmZyb20gc2xvdF9tb2Rp ZnlfZGF0YSgpIHdpdGggdGhlIHNldCBvZiBpbmRleGVkIGF0dHJpYnV0ZXMgb24gYQpyZWxh dGlvbi4KCkJlc2lkZXMgaWRlbnRpZnlpbmcgdGhlIHNldCBvZiBtb2RpZmllZCBpbmRleGVk IGF0dHJpYnV0ZXMKSGVhcERldGVybWluZUNvbHVtbnNJbmZvKCkgd2FzIGFsc28gcmVzcG9u c2libGUgZm9yIHBhcnQgb2YgdGhlIGxvZ2ljCmludm9sZWQgaW4gdGhlIGRlY2lzaW9uIHRv IGluY2x1ZGUgdGhlIHJlcGxpY2EgaWRlbnRpdHkga2V5IG9yIG5vdC4KVGhpcyBub3cgaGFw cGVucyB3aXRoaW4gaGVhcGFtX3R1cGxlX3VwZGF0ZSgpLgotLS0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbS5jICAgICAgICAgICAgICB8IDYwNCArKysrKysrKy0tLS0tLS0t LS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICAgICB8IDE4 MiArKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMgICAgICAgICAg ICB8ICAgNSArLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleGluZy5jICAgICAgICAgICAg ICAgIHwgIDE2ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jICAgICAgICAg ICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMg ICAgICAgIHwgICA3ICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5j ICAgICAgICB8IDE2OSArKysrLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93 b3JrZXIuYyAgICAgIHwgIDY5ICstCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNo ZS5jICAgICAgICAgICAgfCAgNDQgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCAg ICAgICAgICAgICAgICAgICB8ICAyNiArLQogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0u aCAgICAgICAgICAgICAgICAgIHwgICA4ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4 LmggICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhl Y3V0b3IuaCAgICAgICAgICAgICAgIHwgICAzICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNu b2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgNiArCiBzcmMvaW5jbHVkZS91dGlscy9yZWwu aCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL3Jl bGNhY2hlLmggICAgICAgICAgICAgICAgICB8ICAgMiArLQogLi4uL3JlZ3Jlc3MvZXhwZWN0 ZWQvZ2VuZXJhdGVkX3ZpcnR1YWwub3V0ICAgIHwgICAyICstCiBzcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3VwZGF0YWJsZV92aWV3cy5vdXQgfCAgIDQgKy0KIHNyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2dlbmVyYXRlZF92aXJ0dWFsLnNxbCAgICB8ICAgMiArLQogc3JjL3Rlc3QvcmVn cmVzcy9zcWwvdXBkYXRhYmxlX3ZpZXdzLnNxbCAgICAgIHwgICAyICstCiAyMCBmaWxlcyBj aGFuZ2VkLCA3NjIgaW5zZXJ0aW9ucygrKSwgMzkzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtLmMKaW5kZXggOThkNTNjYWVlYTguLjJkYTFmNzAyNDg2IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUg ImFjY2Vzcy9tdWx0aXhhY3QuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc3VidHJhbnMuaCIKICNp bmNsdWRlICJhY2Nlc3Mvc3luY3NjYW4uaCIKKyNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5o IgogI2luY2x1ZGUgImFjY2Vzcy92YWxpZC5oIgogI2luY2x1ZGUgImFjY2Vzcy92aXNpYmls aXR5bWFwLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dpbnNlcnQuaCIKQEAgLTUxLDYgKzUy LDcgQEAKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgogI2luY2x1ZGUgInV0aWxzL2luamVj dGlvbl9wb2ludC5oIgogI2luY2x1ZGUgInV0aWxzL2ludmFsLmgiCisjaW5jbHVkZSAidXRp bHMvcmVsY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9zcGNjYWNoZS5oIgogI2luY2x1ZGUg InV0aWxzL3N5c2NhY2hlLmgiCiAKQEAgLTYyLDE2ICs2NCw4IEBAIHN0YXRpYyBYTG9nUmVj UHRyIGxvZ19oZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxuLCBCdWZmZXIgb2xkYnVmLAogCQkJ CQkJCQkgIEhlYXBUdXBsZSBuZXd0dXAsIEhlYXBUdXBsZSBvbGRfa2V5X3R1cGxlLAogCQkJ CQkJCQkgIGJvb2wgYWxsX3Zpc2libGVfY2xlYXJlZCwgYm9vbCBuZXdfYWxsX3Zpc2libGVf Y2xlYXJlZCk7CiAjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORwotc3RhdGljIHZvaWQgY2hl Y2tfbG9ja19pZl9pbnBsYWNlX3VwZGF0ZWFibGVfcmVsKFJlbGF0aW9uIHJlbGF0aW9uLAot CQkJCQkJCQkJCQkJIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwKLQkJCQkJCQkJCQkJ CSBIZWFwVHVwbGUgbmV3dHVwKTsKIHN0YXRpYyB2b2lkIGNoZWNrX2lucGxhY2VfcmVsX2xv Y2soSGVhcFR1cGxlIG9sZHR1cCk7CiAjZW5kaWYKLXN0YXRpYyBCaXRtYXBzZXQgKkhlYXBE ZXRlcm1pbmVDb2x1bW5zSW5mbyhSZWxhdGlvbiByZWxhdGlvbiwKLQkJCQkJCQkJCQkgICBC aXRtYXBzZXQgKmludGVyZXN0aW5nX2NvbHMsCi0JCQkJCQkJCQkJICAgQml0bWFwc2V0ICpl eHRlcm5hbF9jb2xzLAotCQkJCQkJCQkJCSAgIEhlYXBUdXBsZSBvbGR0dXAsIEhlYXBUdXBs ZSBuZXd0dXAsCi0JCQkJCQkJCQkJICAgYm9vbCAqaGFzX2V4dGVybmFsKTsKIHN0YXRpYyBi b29sIGhlYXBfYWNxdWlyZV90dXBsb2NrKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVt UG9pbnRlckRhdGEgKnRpZCwKIAkJCQkJCQkJIExvY2tUdXBsZU1vZGUgbW9kZSwgTG9ja1dh aXRQb2xpY3kgd2FpdF9wb2xpY3ksCiAJCQkJCQkJCSBib29sICpoYXZlX3R1cGxlX2xvY2sp OwpAQCAtMzMwMCw3ICszMjk0LDEwIEBAIHNpbXBsZV9oZWFwX2RlbGV0ZShSZWxhdGlvbiBy ZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICp0aWQpCiAgKgloZWFwX3VwZGF0ZSAt IHJlcGxhY2UgYSB0dXBsZQogICoKICAqIFNlZSB0YWJsZV90dXBsZV91cGRhdGUoKSBmb3Ig YW4gZXhwbGFuYXRpb24gb2YgdGhlIHBhcmFtZXRlcnMsIGV4Y2VwdCB0aGF0Ci0gKiB0aGlz IHJvdXRpbmUgZGlyZWN0bHkgdGFrZXMgYSB0dXBsZSByYXRoZXIgdGhhbiBhIHNsb3QuCisg KiB0aGlzIHJvdXRpbmUgZGlyZWN0bHkgdGFrZXMgYSBoZWFwIHR1cGxlIHJhdGhlciB0aGFu IGEgc2xvdC4KKyAqCisgKiBJdCdzIHJlcXVpcmVkIHRoYXQgdGhlIGNhbGxlciBoYXMgYWNx dWlyZWQgdGhlIHBpbiBhbmQgbG9jayBvbiB0aGUgYnVmZmVyLgorICogVGhhdCBsb2NrIGFu ZCBwaW4gd2lsbCBiZSBtYW5hZ2VkIGhlcmUsIG5vdCBpbiB0aGUgY2FsbGVyLgogICoKICAq IEluIHRoZSBmYWlsdXJlIGNhc2VzLCB0aGUgcm91dGluZSBmaWxscyAqdG1mZCB3aXRoIHRo ZSB0dXBsZSdzIHRfY3RpZCwKICAqIHRfeG1heCAocmVzb2x2aW5nIGEgcG9zc2libGUgTXVs dGlYYWN0LCBpZiBuZWNlc3NhcnkpLCBhbmQgdF9jbWF4ICh0aGUgbGFzdApAQCAtMzMwOCwz MCArMzMwNSwxOSBAQCBzaW1wbGVfaGVhcF9kZWxldGUoUmVsYXRpb24gcmVsYXRpb24sIGNv bnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkKQogICogZ2VuZXJhdGVkIGJ5IGFub3RoZXIgdHJh bnNhY3Rpb24pLgogICovCiBUTV9SZXN1bHQKLWhlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0 aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsIEhlYXBUdXBsZSBuZXd0dXAsCito ZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlRGF0YSAqb2xkdHVwLCBI ZWFwVHVwbGUgbmV3dHVwLAogCQkJQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVj aywgYm9vbCB3YWl0LAogCQkJVE1fRmFpbHVyZURhdGEgKnRtZmQsIExvY2tUdXBsZU1vZGUg KmxvY2ttb2RlLAotCQkJVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpCisJCQlC dWZmZXIgYnVmZmVyLCBQYWdlIHBhZ2UsIEJsb2NrTnVtYmVyIGJsb2NrLCBJdGVtSWQgbHAs CisJCQlib29sIGhvdF9hbGxvd2VkLCBCdWZmZXIgKnZtYnVmZmVyLCBib29sIHJlcF9pZF9r ZXlfcmVxdWlyZWQpCiB7CiAJVE1fUmVzdWx0CXJlc3VsdDsKIAlUcmFuc2FjdGlvbklkIHhp ZCA9IEdldEN1cnJlbnRUcmFuc2FjdGlvbklkKCk7Ci0JQml0bWFwc2V0ICAqaG90X2F0dHJz OwotCUJpdG1hcHNldCAgKnN1bV9hdHRyczsKLQlCaXRtYXBzZXQgICprZXlfYXR0cnM7Ci0J Qml0bWFwc2V0ICAqaWRfYXR0cnM7Ci0JQml0bWFwc2V0ICAqaW50ZXJlc3RpbmdfYXR0cnM7 Ci0JQml0bWFwc2V0ICAqbW9kaWZpZWRfYXR0cnM7Ci0JSXRlbUlkCQlscDsKLQlIZWFwVHVw bGVEYXRhIG9sZHR1cDsKIAlIZWFwVHVwbGUJaGVhcHR1cDsKIAlIZWFwVHVwbGUJb2xkX2tl eV90dXBsZSA9IE5VTEw7CiAJYm9vbAkJb2xkX2tleV9jb3BpZWQgPSBmYWxzZTsKLQlQYWdl CQlwYWdlOwotCUJsb2NrTnVtYmVyIGJsb2NrOwogCU11bHRpWGFjdFN0YXR1cyBteGFjdF9z dGF0dXM7Ci0JQnVmZmVyCQlidWZmZXIsCi0JCQkJbmV3YnVmLAotCQkJCXZtYnVmZmVyID0g SW52YWxpZEJ1ZmZlciwKKwlCdWZmZXIJCW5ld2J1ZiwKIAkJCQl2bWJ1ZmZlcl9uZXcgPSBJ bnZhbGlkQnVmZmVyOwogCWJvb2wJCW5lZWRfdG9hc3Q7CiAJU2l6ZQkJbmV3dHVwc2l6ZSwK QEAgLTMzMzksMTMgKzMzMjUsMTEgQEAgaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24s IGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIG5ld3R1cCwKIAlib29s CQloYXZlX3R1cGxlX2xvY2sgPSBmYWxzZTsKIAlib29sCQlpc2NvbWJvOwogCWJvb2wJCXVz ZV9ob3RfdXBkYXRlID0gZmFsc2U7Ci0JYm9vbAkJc3VtbWFyaXplZF91cGRhdGUgPSBmYWxz ZTsKIAlib29sCQlrZXlfaW50YWN0OwogCWJvb2wJCWFsbF92aXNpYmxlX2NsZWFyZWQgPSBm YWxzZTsKIAlib29sCQlhbGxfdmlzaWJsZV9jbGVhcmVkX25ldyA9IGZhbHNlOwogCWJvb2wJ CWNoZWNrZWRfbG9ja2VyczsKIAlib29sCQlsb2NrZXJfcmVtYWluczsKLQlib29sCQlpZF9o YXNfZXh0ZXJuYWwgPSBmYWxzZTsKIAlUcmFuc2FjdGlvbklkIHhtYXhfbmV3X3R1cGxlLAog CQkJCXhtYXhfb2xkX3R1cGxlOwogCXVpbnQxNgkJaW5mb21hc2tfb2xkX3R1cGxlLApAQCAt MzM1MywxNDQgKzMzMzcsMTMgQEAgaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNv bnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIG5ld3R1cCwKIAkJCQlpbmZv bWFza19uZXdfdHVwbGUsCiAJCQkJaW5mb21hc2syX25ld190dXBsZTsKIAotCUFzc2VydChJ dGVtUG9pbnRlcklzVmFsaWQob3RpZCkpOwotCi0JLyogQ2hlYXAsIHNpbXBsaXN0aWMgY2hl Y2sgdGhhdCB0aGUgdHVwbGUgbWF0Y2hlcyB0aGUgcmVsJ3Mgcm93dHlwZS4gKi8KLQlBc3Nl cnQoSGVhcFR1cGxlSGVhZGVyR2V0TmF0dHMobmV3dHVwLT50X2RhdGEpIDw9Ci0JCSAgIFJl bGF0aW9uR2V0TnVtYmVyT2ZBdHRyaWJ1dGVzKHJlbGF0aW9uKSk7Ci0KKwlBc3NlcnQoQnVm ZmVySXNMb2NrZWRCeU1lKGJ1ZmZlcikpOworCUFzc2VydChJdGVtSWRJc05vcm1hbChscCkp OwogCUFzc2VydEhhc1NuYXBzaG90Rm9yVG9hc3QocmVsYXRpb24pOwogCi0JLyoKLQkgKiBG b3JiaWQgdGhpcyBkdXJpbmcgYSBwYXJhbGxlbCBvcGVyYXRpb24sIGxlc3QgaXQgYWxsb2Nh dGUgYSBjb21ibyBDSUQuCi0JICogT3RoZXIgd29ya2VycyBtaWdodCBuZWVkIHRoYXQgY29t Ym8gQ0lEIGZvciB2aXNpYmlsaXR5IGNoZWNrcywgYW5kIHdlCi0JICogaGF2ZSBubyBwcm92 aXNpb24gZm9yIGJyb2FkY2FzdGluZyBpdCB0byB0aGVtLgotCSAqLwotCWlmIChJc0luUGFy YWxsZWxNb2RlKCkpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9J TlZBTElEX1RSQU5TQUNUSU9OX1NUQVRFKSwKLQkJCQkgZXJybXNnKCJjYW5ub3QgdXBkYXRl IHR1cGxlcyBkdXJpbmcgYSBwYXJhbGxlbCBvcGVyYXRpb24iKSkpOwotCi0jaWZkZWYgVVNF X0FTU0VSVF9DSEVDS0lORwotCWNoZWNrX2xvY2tfaWZfaW5wbGFjZV91cGRhdGVhYmxlX3Jl bChyZWxhdGlvbiwgb3RpZCwgbmV3dHVwKTsKLSNlbmRpZgotCi0JLyoKLQkgKiBGZXRjaCB0 aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHRvIGJlIGNoZWNrZWQgZm9yIHZhcmlvdXMgb3BlcmF0 aW9ucy4KLQkgKgotCSAqIEZvciBIT1QgY29uc2lkZXJhdGlvbnMsIHRoaXMgaXMgd2FzdGVk IGVmZm9ydCBpZiB3ZSBmYWlsIHRvIHVwZGF0ZSBvcgotCSAqIGhhdmUgdG8gcHV0IHRoZSBu ZXcgdHVwbGUgb24gYSBkaWZmZXJlbnQgcGFnZS4gIEJ1dCB3ZSBtdXN0IGNvbXB1dGUgdGhl Ci0JICogbGlzdCBiZWZvcmUgb2J0YWluaW5nIGJ1ZmZlciBsb2NrIC0tLSBpbiB0aGUgd29y c3QgY2FzZSwgaWYgd2UgYXJlCi0JICogZG9pbmcgYW4gdXBkYXRlIG9uIG9uZSBvZiB0aGUg cmVsZXZhbnQgc3lzdGVtIGNhdGFsb2dzLCB3ZSBjb3VsZAotCSAqIGRlYWRsb2NrIGlmIHdl IHRyeSB0byBmZXRjaCB0aGUgbGlzdCBsYXRlci4gIEluIGFueSBjYXNlLCB0aGUgcmVsY2Fj aGUKLQkgKiBjYWNoZXMgdGhlIGRhdGEgc28gdGhpcyBpcyB1c3VhbGx5IHByZXR0eSBjaGVh cC4KLQkgKgotCSAqIFdlIGFsc28gbmVlZCBjb2x1bW5zIHVzZWQgYnkgdGhlIHJlcGxpY2Eg aWRlbnRpdHkgYW5kIGNvbHVtbnMgdGhhdCBhcmUKLQkgKiBjb25zaWRlcmVkIHRoZSAia2V5 IiBvZiByb3dzIGluIHRoZSB0YWJsZS4KLQkgKgotCSAqIE5vdGUgdGhhdCB3ZSBnZXQgY29w aWVzIG9mIGVhY2ggYml0bWFwLCBzbyB3ZSBuZWVkIG5vdCB3b3JyeSBhYm91dAotCSAqIHJl bGNhY2hlIGZsdXNoIGhhcHBlbmluZyBtaWR3YXkgdGhyb3VnaC4KLQkgKi8KLQlob3RfYXR0 cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChyZWxhdGlvbiwKLQkJCQkJCQkJCQkg ICBJTkRFWF9BVFRSX0JJVE1BUF9IT1RfQkxPQ0tJTkcpOwotCXN1bV9hdHRycyA9IFJlbGF0 aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLAotCQkJCQkJCQkJCSAgIElOREVYX0FU VFJfQklUTUFQX1NVTU1BUklaRUQpOwotCWtleV9hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhB dHRyQml0bWFwKHJlbGF0aW9uLCBJTkRFWF9BVFRSX0JJVE1BUF9LRVkpOwotCWlkX2F0dHJz ID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24sCi0JCQkJCQkJCQkJICBJ TkRFWF9BVFRSX0JJVE1BUF9JREVOVElUWV9LRVkpOwotCWludGVyZXN0aW5nX2F0dHJzID0g TlVMTDsKLQlpbnRlcmVzdGluZ19hdHRycyA9IGJtc19hZGRfbWVtYmVycyhpbnRlcmVzdGlu Z19hdHRycywgaG90X2F0dHJzKTsKLQlpbnRlcmVzdGluZ19hdHRycyA9IGJtc19hZGRfbWVt YmVycyhpbnRlcmVzdGluZ19hdHRycywgc3VtX2F0dHJzKTsKLQlpbnRlcmVzdGluZ19hdHRy cyA9IGJtc19hZGRfbWVtYmVycyhpbnRlcmVzdGluZ19hdHRycywga2V5X2F0dHJzKTsKLQlp bnRlcmVzdGluZ19hdHRycyA9IGJtc19hZGRfbWVtYmVycyhpbnRlcmVzdGluZ19hdHRycywg aWRfYXR0cnMpOwotCi0JYmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKG90aWQp OwotCUlOSkVDVElPTl9QT0lOVCgiaGVhcF91cGRhdGUtYmVmb3JlLXBpbiIsIE5VTEwpOwot CWJ1ZmZlciA9IFJlYWRCdWZmZXIocmVsYXRpb24sIGJsb2NrKTsKLQlwYWdlID0gQnVmZmVy R2V0UGFnZShidWZmZXIpOwotCi0JLyoKLQkgKiBCZWZvcmUgbG9ja2luZyB0aGUgYnVmZmVy LCBwaW4gdGhlIHZpc2liaWxpdHkgbWFwIHBhZ2UgaWYgaXQgYXBwZWFycyB0bwotCSAqIGJl IG5lY2Vzc2FyeS4gIFNpbmNlIHdlIGhhdmVuJ3QgZ290IHRoZSBsb2NrIHlldCwgc29tZW9u ZSBlbHNlIG1pZ2h0IGJlCi0JICogaW4gdGhlIG1pZGRsZSBvZiBjaGFuZ2luZyB0aGlzLCBz byB3ZSdsbCBuZWVkIHRvIHJlY2hlY2sgYWZ0ZXIgd2UgaGF2ZQotCSAqIHRoZSBsb2NrLgot CSAqLwotCWlmIChQYWdlSXNBbGxWaXNpYmxlKHBhZ2UpKQotCQl2aXNpYmlsaXR5bWFwX3Bp bihyZWxhdGlvbiwgYmxvY2ssICZ2bWJ1ZmZlcik7Ci0KLQlMb2NrQnVmZmVyKGJ1ZmZlciwg QlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKLQotCWxwID0gUGFnZUdldEl0ZW1JZChwYWdlLCBJ dGVtUG9pbnRlckdldE9mZnNldE51bWJlcihvdGlkKSk7Ci0KLQkvKgotCSAqIFVzdWFsbHks IGEgYnVmZmVyIHBpbiBhbmQvb3Igc25hcHNob3QgYmxvY2tzIHBydW5pbmcgb2Ygb3RpZCwg ZW5zdXJpbmcKLQkgKiB3ZSBzZWUgTFBfTk9STUFMIGhlcmUuICBXaGVuIHRoZSBvdGlkIG9y aWdpbiBpcyBhIHN5c2NhY2hlLCB3ZSBtYXkgaGF2ZQotCSAqIG5laXRoZXIgYSBwaW4gbm9y IGEgc25hcHNob3QuICBIZW5jZSwgd2UgbWF5IHNlZSBvdGhlciBMUF8gc3RhdGVzLCBlYWNo Ci0JICogb2Ygd2hpY2ggaW5kaWNhdGVzIGNvbmN1cnJlbnQgcHJ1bmluZy4KLQkgKgotCSAq IEZhaWxpbmcgd2l0aCBUTV9VcGRhdGVkIHdvdWxkIGJlIG1vc3QgYWNjdXJhdGUuICBIb3dl dmVyLCB1bmxpa2Ugb3RoZXIKLQkgKiBUTV9VcGRhdGVkIHNjZW5hcmlvcywgd2UgZG9uJ3Qg a25vdyB0aGUgc3VjY2Vzc29yIGN0aWQgaW4gTFBfVU5VU0VEIGFuZAotCSAqIExQX0RFQUQg Y2FzZXMuICBXaGlsZSB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBUTV9VcGRhdGVkIGFuZCBU TV9EZWxldGVkCi0JICogZG9lcyBtYXR0ZXIgdG8gU1FMIHN0YXRlbWVudHMgVVBEQVRFIGFu ZCBNRVJHRSwgdGhvc2UgU1FMIHN0YXRlbWVudHMKLQkgKiBob2xkIGEgc25hcHNob3QgdGhh dCBlbnN1cmVzIExQX05PUk1BTC4gIEhlbmNlLCB0aGUgY2hvaWNlIGJldHdlZW4KLQkgKiBU TV9VcGRhdGVkIGFuZCBUTV9EZWxldGVkIGFmZmVjdHMgb25seSB0aGUgd29yZGluZyBvZiBl cnJvciBtZXNzYWdlcy4KLQkgKiBTZXR0bGUgb24gVE1fRGVsZXRlZCwgZm9yIHR3byByZWFz b25zLiAgRmlyc3QsIGl0IGF2b2lkcyBjb21wbGljYXRpbmcKLQkgKiB0aGUgc3BlY2lmaWNh dGlvbiBvZiB3aGVuIHRtZmQtPmN0aWQgaXMgdmFsaWQuICBTZWNvbmQsIGl0IGNyZWF0ZXMK LQkgKiBlcnJvciBsb2cgZXZpZGVuY2UgdGhhdCB3ZSB0b29rIHRoaXMgYnJhbmNoLgotCSAq Ci0JICogU2luY2UgaXQncyBwb3NzaWJsZSB0byBzZWUgTFBfVU5VU0VEIGF0IG90aWQsIGl0 J3MgYWxzbyBwb3NzaWJsZSB0byBzZWUKLQkgKiBMUF9OT1JNQUwgZm9yIGEgdHVwbGUgdGhh dCByZXBsYWNlZCBMUF9VTlVTRUQuICBJZiBpdCdzIGEgdHVwbGUgZm9yIGFuCi0JICogdW5y ZWxhdGVkIHJvdywgd2UnbGwgZmFpbCB3aXRoICJkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xh dGVzIHVuaXF1ZSIuCi0JICogWFhYIGlmIG90aWQgaXMgdGhlIGxpdmUsIG5ld2VyIHZlcnNp b24gb2YgdGhlIG5ld3R1cCByb3csIHdlJ2xsIGRpc2NhcmQKLQkgKiBjaGFuZ2VzIG9yaWdp bmF0aW5nIGluIHZlcnNpb25zIG9mIHRoaXMgY2F0YWxvZyByb3cgYWZ0ZXIgdGhlIHZlcnNp b24KLQkgKiB0aGUgY2FsbGVyIGdvdCBmcm9tIHN5c2NhY2hlLiAgU2VlIHN5c2NhY2hlLXVw ZGF0ZS1wcnVuZWQuc3BlYy4KLQkgKi8KLQlpZiAoIUl0ZW1JZElzTm9ybWFsKGxwKSkKLQl7 Ci0JCUFzc2VydChSZWxhdGlvblN1cHBvcnRzU3lzQ2FjaGUoUmVsYXRpb25HZXRSZWxpZChy ZWxhdGlvbikpKTsKLQotCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7Ci0JCUFzc2Vy dCghaGF2ZV90dXBsZV9sb2NrKTsKLQkJaWYgKHZtYnVmZmVyICE9IEludmFsaWRCdWZmZXIp Ci0JCQlSZWxlYXNlQnVmZmVyKHZtYnVmZmVyKTsKLQkJdG1mZC0+Y3RpZCA9ICpvdGlkOwot CQl0bWZkLT54bWF4ID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7Ci0JCXRtZmQtPmNtYXggPSBJ bnZhbGlkQ29tbWFuZElkOwotCQkqdXBkYXRlX2luZGV4ZXMgPSBUVV9Ob25lOwotCi0JCWJt c19mcmVlKGhvdF9hdHRycyk7Ci0JCWJtc19mcmVlKHN1bV9hdHRycyk7Ci0JCWJtc19mcmVl KGtleV9hdHRycyk7Ci0JCWJtc19mcmVlKGlkX2F0dHJzKTsKLQkJLyogbW9kaWZpZWRfYXR0 cnMgbm90IHlldCBpbml0aWFsaXplZCAqLwotCQlibXNfZnJlZShpbnRlcmVzdGluZ19hdHRy cyk7Ci0JCXJldHVybiBUTV9EZWxldGVkOwotCX0KLQotCS8qCi0JICogRmlsbCBpbiBlbm91 Z2ggZGF0YSBpbiBvbGR0dXAgZm9yIEhlYXBEZXRlcm1pbmVDb2x1bW5zSW5mbyB0byB3b3Jr Ci0JICogcHJvcGVybHkuCi0JICovCi0Jb2xkdHVwLnRfdGFibGVPaWQgPSBSZWxhdGlvbkdl dFJlbGlkKHJlbGF0aW9uKTsKLQlvbGR0dXAudF9kYXRhID0gKEhlYXBUdXBsZUhlYWRlcikg UGFnZUdldEl0ZW0ocGFnZSwgbHApOwotCW9sZHR1cC50X2xlbiA9IEl0ZW1JZEdldExlbmd0 aChscCk7Ci0Jb2xkdHVwLnRfc2VsZiA9ICpvdGlkOwotCi0JLyogdGhlIG5ldyB0dXBsZSBp cyByZWFkeSwgZXhjZXB0IGZvciB0aGlzOiAqLworCS8qIFRoZSBuZXcgdHVwbGUgaXMgcmVh ZHksIGV4Y2VwdCBmb3IgdGhpcyAqLwogCW5ld3R1cC0+dF90YWJsZU9pZCA9IFJlbGF0aW9u R2V0UmVsaWQocmVsYXRpb24pOwogCi0JLyoKLQkgKiBEZXRlcm1pbmUgY29sdW1ucyBtb2Rp ZmllZCBieSB0aGUgdXBkYXRlLiAgQWRkaXRpb25hbGx5LCBpZGVudGlmeQotCSAqIHdoZXRo ZXIgYW55IG9mIHRoZSB1bm1vZGlmaWVkIHJlcGxpY2EgaWRlbnRpdHkga2V5IGF0dHJpYnV0 ZXMgaW4gdGhlCi0JICogb2xkIHR1cGxlIGlzIGV4dGVybmFsbHkgc3RvcmVkIG9yIG5vdC4g IFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBmb3IKLQkgKiBzdWNoIGF0dHJpYnV0ZXMgdGhl IGZsYXR0ZW5lZCB2YWx1ZSB3b24ndCBiZSBXQUwgbG9nZ2VkIGFzIHBhcnQgb2YgdGhlCi0J ICogbmV3IHR1cGxlIHNvIHdlIG11c3QgaW5jbHVkZSBpdCBhcyBwYXJ0IG9mIHRoZSBvbGRf a2V5X3R1cGxlLiAgU2VlCi0JICogRXh0cmFjdFJlcGxpY2FJZGVudGl0eS4KLQkgKi8KLQlt b2RpZmllZF9hdHRycyA9IEhlYXBEZXRlcm1pbmVDb2x1bW5zSW5mbyhyZWxhdGlvbiwgaW50 ZXJlc3RpbmdfYXR0cnMsCi0JCQkJCQkJCQkJCSAgaWRfYXR0cnMsICZvbGR0dXAsCi0JCQkJ CQkJCQkJCSAgbmV3dHVwLCAmaWRfaGFzX2V4dGVybmFsKTsKLQogCS8qCiAJICogSWYgd2Un cmUgbm90IHVwZGF0aW5nIGFueSAia2V5IiBjb2x1bW4sIHdlIGNhbiBncmFiIGEgd2Vha2Vy IGxvY2sgdHlwZS4KIAkgKiBUaGlzIGFsbG93cyBmb3IgbW9yZSBjb25jdXJyZW5jeSB3aGVu IHdlIGFyZSBydW5uaW5nIHNpbXVsdGFuZW91c2x5CkBAIC0zNTAyLDkgKzMzNTUsOCBAQCBo ZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpv dGlkLCBIZWFwVHVwbGUgbmV3dHVwLAogCSAqIGlzIHVwZGF0ZXMgdGhhdCBkb24ndCBtYW5p cHVsYXRlIGtleSBjb2x1bW5zLCBub3QgdGhvc2UgdGhhdAogCSAqIHNlcmVuZGlwaXRvdXNs eSBhcnJpdmUgYXQgdGhlIHNhbWUga2V5IHZhbHVlcy4KIAkgKi8KLQlpZiAoIWJtc19vdmVy bGFwKG1vZGlmaWVkX2F0dHJzLCBrZXlfYXR0cnMpKQorCWlmICgqbG9ja21vZGUgPT0gTG9j a1R1cGxlTm9LZXlFeGNsdXNpdmUpCiAJewotCQkqbG9ja21vZGUgPSBMb2NrVHVwbGVOb0tl eUV4Y2x1c2l2ZTsKIAkJbXhhY3Rfc3RhdHVzID0gTXVsdGlYYWN0U3RhdHVzTm9LZXlVcGRh dGU7CiAJCWtleV9pbnRhY3QgPSB0cnVlOwogCkBAIC0zNTIxLDIyICszMzczLDE0IEBAIGhl YXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90 aWQsIEhlYXBUdXBsZSBuZXd0dXAsCiAJfQogCWVsc2UKIAl7Ci0JCSpsb2NrbW9kZSA9IExv Y2tUdXBsZUV4Y2x1c2l2ZTsKIAkJbXhhY3Rfc3RhdHVzID0gTXVsdGlYYWN0U3RhdHVzVXBk YXRlOwogCQlrZXlfaW50YWN0ID0gZmFsc2U7CiAJfQogCi0JLyoKLQkgKiBOb3RlOiBiZXlv bmQgdGhpcyBwb2ludCwgdXNlIG9sZHR1cCBub3Qgb3RpZCB0byByZWZlciB0byBvbGQgdHVw bGUuCi0JICogb3RpZCBtYXkgdmVyeSB3ZWxsIHBvaW50IGF0IG5ld3R1cC0+dF9zZWxmLCB3 aGljaCB3ZSB3aWxsIG92ZXJ3cml0ZQotCSAqIHdpdGggdGhlIG5ldyB0dXBsZSdzIGxvY2F0 aW9uLCBzbyB0aGVyZSdzIGdyZWF0IHJpc2sgb2YgY29uZnVzaW9uIGlmIHdlCi0JICogdXNl IG90aWQgYW55bW9yZS4KLQkgKi8KLQogbDI6CiAJY2hlY2tlZF9sb2NrZXJzID0gZmFsc2U7 CiAJbG9ja2VyX3JlbWFpbnMgPSBmYWxzZTsKLQlyZXN1bHQgPSBIZWFwVHVwbGVTYXRpc2Zp ZXNVcGRhdGUoJm9sZHR1cCwgY2lkLCBidWZmZXIpOworCXJlc3VsdCA9IEhlYXBUdXBsZVNh dGlzZmllc1VwZGF0ZShvbGR0dXAsIGNpZCwgYnVmZmVyKTsKIAogCS8qIHNlZSBiZWxvdyBh Ym91dCB0aGUgIm5vIHdhaXQiIGNhc2UgKi8KIAlBc3NlcnQocmVzdWx0ICE9IFRNX0JlaW5n TW9kaWZpZWQgfHwgd2FpdCk7CkBAIC0zNTY4LDggKzM0MTIsOCBAQCBsMjoKIAkJICovCiAK IAkJLyogbXVzdCBjb3B5IHN0YXRlIGRhdGEgYmVmb3JlIHVubG9ja2luZyBidWZmZXIgKi8K LQkJeHdhaXQgPSBIZWFwVHVwbGVIZWFkZXJHZXRSYXdYbWF4KG9sZHR1cC50X2RhdGEpOwot CQlpbmZvbWFzayA9IG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2s7CisJCXh3YWl0ID0gSGVh cFR1cGxlSGVhZGVyR2V0UmF3WG1heChvbGR0dXAtPnRfZGF0YSk7CisJCWluZm9tYXNrID0g b2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2s7CiAKIAkJLyoKIAkJICogTm93IHdlIGhhdmUg dG8gZG8gc29tZXRoaW5nIGFib3V0IHRoZSBleGlzdGluZyBsb2NrZXIuICBJZiBpdCdzIGEK QEAgLTM2MDksMTMgKzM0NTMsMTIgQEAgbDI6CiAJCQkJICogcmVxdWVzdGluZyBhIGxvY2sg YW5kIGFscmVhZHkgaGF2ZSBvbmU7IGF2b2lkcyBkZWFkbG9jaykuCiAJCQkJICovCiAJCQkJ aWYgKCFjdXJyZW50X2lzX21lbWJlcikKLQkJCQkJaGVhcF9hY3F1aXJlX3R1cGxvY2socmVs YXRpb24sICYob2xkdHVwLnRfc2VsZiksICpsb2NrbW9kZSwKKwkJCQkJaGVhcF9hY3F1aXJl X3R1cGxvY2socmVsYXRpb24sICZvbGR0dXAtPnRfc2VsZiwgKmxvY2ttb2RlLAogCQkJCQkJ CQkJCSBMb2NrV2FpdEJsb2NrLCAmaGF2ZV90dXBsZV9sb2NrKTsKIAogCQkJCS8qIHdhaXQg Zm9yIG11bHRpeGFjdCAqLwogCQkJCU11bHRpWGFjdElkV2FpdCgoTXVsdGlYYWN0SWQpIHh3 YWl0LCBteGFjdF9zdGF0dXMsIGluZm9tYXNrLAotCQkJCQkJCQlyZWxhdGlvbiwgJm9sZHR1 cC50X3NlbGYsIFhMVFdfVXBkYXRlLAotCQkJCQkJCQkmcmVtYWluKTsKKwkJCQkJCQkJcmVs YXRpb24sICZvbGR0dXAtPnRfc2VsZiwgWExUV19VcGRhdGUsICZyZW1haW4pOwogCQkJCWNo ZWNrZWRfbG9ja2VycyA9IHRydWU7CiAJCQkJbG9ja2VyX3JlbWFpbnMgPSByZW1haW4gIT0g MDsKIAkJCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKQEAg LTM2MjUsOSArMzQ2OCw5IEBAIGwyOgogCQkJCSAqIGNvdWxkIHVwZGF0ZSB0aGlzIHR1cGxl IGJlZm9yZSB3ZSBnZXQgdG8gdGhpcyBwb2ludC4gIENoZWNrCiAJCQkJICogZm9yIHhtYXgg Y2hhbmdlLCBhbmQgc3RhcnQgb3ZlciBpZiBzby4KIAkJCQkgKi8KLQkJCQlpZiAoeG1heF9p bmZvbWFza19jaGFuZ2VkKG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2ssCisJCQkJaWYgKHht YXhfaW5mb21hc2tfY2hhbmdlZChvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzaywKIAkJCQkJ CQkJCQkgIGluZm9tYXNrKSB8fAotCQkJCQkhVHJhbnNhY3Rpb25JZEVxdWFscyhIZWFwVHVw bGVIZWFkZXJHZXRSYXdYbWF4KG9sZHR1cC50X2RhdGEpLAorCQkJCQkhVHJhbnNhY3Rpb25J ZEVxdWFscyhIZWFwVHVwbGVIZWFkZXJHZXRSYXdYbWF4KG9sZHR1cC0+dF9kYXRhKSwKIAkJ CQkJCQkJCQkgeHdhaXQpKQogCQkJCQlnb3RvIGwyOwogCQkJfQpAQCAtMzY1Miw4ICszNDk1 LDggQEAgbDI6CiAJCQkgKiBiZWZvcmUgdGhpcyBvbmUsIHdoaWNoIGFyZSBpbXBvcnRhbnQg dG8ga2VlcCBpbiBjYXNlIHRoaXMKIAkJCSAqIHN1YnhhY3QgYWJvcnRzLgogCQkJICovCi0J CQlpZiAoIUhFQVBfWE1BWF9JU19MT0NLRURfT05MWShvbGR0dXAudF9kYXRhLT50X2luZm9t YXNrKSkKLQkJCQl1cGRhdGVfeGFjdCA9IEhlYXBUdXBsZUdldFVwZGF0ZVhpZChvbGR0dXAu dF9kYXRhKTsKKwkJCWlmICghSEVBUF9YTUFYX0lTX0xPQ0tFRF9PTkxZKG9sZHR1cC0+dF9k YXRhLT50X2luZm9tYXNrKSkKKwkJCQl1cGRhdGVfeGFjdCA9IEhlYXBUdXBsZUdldFVwZGF0 ZVhpZChvbGR0dXAtPnRfZGF0YSk7CiAJCQllbHNlCiAJCQkJdXBkYXRlX3hhY3QgPSBJbnZh bGlkVHJhbnNhY3Rpb25JZDsKIApAQCAtMzY5NCw5ICszNTM3LDkgQEAgbDI6CiAJCQkgKiBs b2NrLgogCQkJICovCiAJCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfVU5MT0NL KTsKLQkJCWhlYXBfYWNxdWlyZV90dXBsb2NrKHJlbGF0aW9uLCAmKG9sZHR1cC50X3NlbGYp LCAqbG9ja21vZGUsCisJCQloZWFwX2FjcXVpcmVfdHVwbG9jayhyZWxhdGlvbiwgJm9sZHR1 cC0+dF9zZWxmLCAqbG9ja21vZGUsCiAJCQkJCQkJCSBMb2NrV2FpdEJsb2NrLCAmaGF2ZV90 dXBsZV9sb2NrKTsKLQkJCVhhY3RMb2NrVGFibGVXYWl0KHh3YWl0LCByZWxhdGlvbiwgJm9s ZHR1cC50X3NlbGYsCisJCQlYYWN0TG9ja1RhYmxlV2FpdCh4d2FpdCwgcmVsYXRpb24sICZv bGR0dXAtPnRfc2VsZiwKIAkJCQkJCQkgIFhMVFdfVXBkYXRlKTsKIAkJCWNoZWNrZWRfbG9j a2VycyA9IHRydWU7CiAJCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVT SVZFKTsKQEAgLTM3MDYsMjAgKzM1NDksMjAgQEAgbDI6CiAJCQkgKiBvdGhlciB4YWN0IGNv dWxkIHVwZGF0ZSB0aGlzIHR1cGxlIGJlZm9yZSB3ZSBnZXQgdG8gdGhpcyBwb2ludC4KIAkJ CSAqIENoZWNrIGZvciB4bWF4IGNoYW5nZSwgYW5kIHN0YXJ0IG92ZXIgaWYgc28uCiAJCQkg Ki8KLQkJCWlmICh4bWF4X2luZm9tYXNrX2NoYW5nZWQob2xkdHVwLnRfZGF0YS0+dF9pbmZv bWFzaywgaW5mb21hc2spIHx8CisJCQlpZiAoeG1heF9pbmZvbWFza19jaGFuZ2VkKG9sZHR1 cC0+dF9kYXRhLT50X2luZm9tYXNrLCBpbmZvbWFzaykgfHwKIAkJCQkhVHJhbnNhY3Rpb25J ZEVxdWFscyh4d2FpdCwKLQkJCQkJCQkJCSBIZWFwVHVwbGVIZWFkZXJHZXRSYXdYbWF4KG9s ZHR1cC50X2RhdGEpKSkKKwkJCQkJCQkJCSBIZWFwVHVwbGVIZWFkZXJHZXRSYXdYbWF4KG9s ZHR1cC0+dF9kYXRhKSkpCiAJCQkJZ290byBsMjsKIAogCQkJLyogT3RoZXJ3aXNlIGNoZWNr IGlmIGl0IGNvbW1pdHRlZCBvciBhYm9ydGVkICovCi0JCQlVcGRhdGVYbWF4SGludEJpdHMo b2xkdHVwLnRfZGF0YSwgYnVmZmVyLCB4d2FpdCk7Ci0JCQlpZiAob2xkdHVwLnRfZGF0YS0+ dF9pbmZvbWFzayAmIEhFQVBfWE1BWF9JTlZBTElEKQorCQkJVXBkYXRlWG1heEhpbnRCaXRz KG9sZHR1cC0+dF9kYXRhLCBidWZmZXIsIHh3YWl0KTsKKwkJCWlmIChvbGR0dXAtPnRfZGF0 YS0+dF9pbmZvbWFzayAmIEhFQVBfWE1BWF9JTlZBTElEKQogCQkJCWNhbl9jb250aW51ZSA9 IHRydWU7CiAJCX0KIAogCQlpZiAoY2FuX2NvbnRpbnVlKQogCQkJcmVzdWx0ID0gVE1fT2s7 Ci0JCWVsc2UgaWYgKCFJdGVtUG9pbnRlckVxdWFscygmb2xkdHVwLnRfc2VsZiwgJm9sZHR1 cC50X2RhdGEtPnRfY3RpZCkpCisJCWVsc2UgaWYgKCFJdGVtUG9pbnRlckVxdWFscygmb2xk dHVwLT50X3NlbGYsICZvbGR0dXAtPnRfZGF0YS0+dF9jdGlkKSkKIAkJCXJlc3VsdCA9IFRN X1VwZGF0ZWQ7CiAJCWVsc2UKIAkJCXJlc3VsdCA9IFRNX0RlbGV0ZWQ7CkBAIC0zNzMyLDM5 ICszNTc1LDMyIEBAIGwyOgogCQkJICAgcmVzdWx0ID09IFRNX1VwZGF0ZWQgfHwKIAkJCSAg IHJlc3VsdCA9PSBUTV9EZWxldGVkIHx8CiAJCQkgICByZXN1bHQgPT0gVE1fQmVpbmdNb2Rp ZmllZCk7Ci0JCUFzc2VydCghKG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2sgJiBIRUFQX1hN QVhfSU5WQUxJRCkpOworCQlBc3NlcnQoIShvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzayAm IEhFQVBfWE1BWF9JTlZBTElEKSk7CiAJCUFzc2VydChyZXN1bHQgIT0gVE1fVXBkYXRlZCB8 fAotCQkJICAgIUl0ZW1Qb2ludGVyRXF1YWxzKCZvbGR0dXAudF9zZWxmLCAmb2xkdHVwLnRf ZGF0YS0+dF9jdGlkKSk7CisJCQkgICAhSXRlbVBvaW50ZXJFcXVhbHMoJm9sZHR1cC0+dF9z ZWxmLCAmb2xkdHVwLT50X2RhdGEtPnRfY3RpZCkpOwogCX0KIAogCWlmIChjcm9zc2NoZWNr ICE9IEludmFsaWRTbmFwc2hvdCAmJiByZXN1bHQgPT0gVE1fT2spCiAJewogCQkvKiBQZXJm b3JtIGFkZGl0aW9uYWwgY2hlY2sgZm9yIHRyYW5zYWN0aW9uLXNuYXBzaG90IG1vZGUgUkkg dXBkYXRlcyAqLwotCQlpZiAoIUhlYXBUdXBsZVNhdGlzZmllc1Zpc2liaWxpdHkoJm9sZHR1 cCwgY3Jvc3NjaGVjaywgYnVmZmVyKSkKKwkJaWYgKCFIZWFwVHVwbGVTYXRpc2ZpZXNWaXNp YmlsaXR5KG9sZHR1cCwgY3Jvc3NjaGVjaywgYnVmZmVyKSkKIAkJCXJlc3VsdCA9IFRNX1Vw ZGF0ZWQ7CiAJfQogCiAJaWYgKHJlc3VsdCAhPSBUTV9PaykKIAl7Ci0JCXRtZmQtPmN0aWQg PSBvbGR0dXAudF9kYXRhLT50X2N0aWQ7Ci0JCXRtZmQtPnhtYXggPSBIZWFwVHVwbGVIZWFk ZXJHZXRVcGRhdGVYaWQob2xkdHVwLnRfZGF0YSk7CisJCXRtZmQtPmN0aWQgPSBvbGR0dXAt PnRfZGF0YS0+dF9jdGlkOworCQl0bWZkLT54bWF4ID0gSGVhcFR1cGxlSGVhZGVyR2V0VXBk YXRlWGlkKG9sZHR1cC0+dF9kYXRhKTsKIAkJaWYgKHJlc3VsdCA9PSBUTV9TZWxmTW9kaWZp ZWQpCi0JCQl0bWZkLT5jbWF4ID0gSGVhcFR1cGxlSGVhZGVyR2V0Q21heChvbGR0dXAudF9k YXRhKTsKKwkJCXRtZmQtPmNtYXggPSBIZWFwVHVwbGVIZWFkZXJHZXRDbWF4KG9sZHR1cC0+ dF9kYXRhKTsKIAkJZWxzZQogCQkJdG1mZC0+Y21heCA9IEludmFsaWRDb21tYW5kSWQ7CiAJ CVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAkJaWYgKGhhdmVfdHVwbGVfbG9jaykK LQkJCVVubG9ja1R1cGxlVHVwbG9jayhyZWxhdGlvbiwgJihvbGR0dXAudF9zZWxmKSwgKmxv Y2ttb2RlKTsKLQkJaWYgKHZtYnVmZmVyICE9IEludmFsaWRCdWZmZXIpCi0JCQlSZWxlYXNl QnVmZmVyKHZtYnVmZmVyKTsKLQkJKnVwZGF0ZV9pbmRleGVzID0gVFVfTm9uZTsKKwkJCVVu bG9ja1R1cGxlVHVwbG9jayhyZWxhdGlvbiwgJm9sZHR1cC0+dF9zZWxmLCAqbG9ja21vZGUp OworCQlpZiAoKnZtYnVmZmVyICE9IEludmFsaWRCdWZmZXIpCisJCQlSZWxlYXNlQnVmZmVy KCp2bWJ1ZmZlcik7CiAKLQkJYm1zX2ZyZWUoaG90X2F0dHJzKTsKLQkJYm1zX2ZyZWUoc3Vt X2F0dHJzKTsKLQkJYm1zX2ZyZWUoa2V5X2F0dHJzKTsKLQkJYm1zX2ZyZWUoaWRfYXR0cnMp OwotCQlibXNfZnJlZShtb2RpZmllZF9hdHRycyk7Ci0JCWJtc19mcmVlKGludGVyZXN0aW5n X2F0dHJzKTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAKQEAgLTM3NzcsMTAgKzM2MTMsMTAg QEAgbDI6CiAJICogdHVwbGUgaGFzIGJlZW4gbG9ja2VkIG9yIHVwZGF0ZWQgdW5kZXIgdXMs IGJ1dCBob3BlZnVsbHkgaXQgd29uJ3QKIAkgKiBoYXBwZW4gdmVyeSBvZnRlbi4KIAkgKi8K LQlpZiAodm1idWZmZXIgPT0gSW52YWxpZEJ1ZmZlciAmJiBQYWdlSXNBbGxWaXNpYmxlKHBh Z2UpKQorCWlmICgqdm1idWZmZXIgPT0gSW52YWxpZEJ1ZmZlciAmJiBQYWdlSXNBbGxWaXNp YmxlKHBhZ2UpKQogCXsKIAkJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX1VOTE9D Syk7Ci0JCXZpc2liaWxpdHltYXBfcGluKHJlbGF0aW9uLCBibG9jaywgJnZtYnVmZmVyKTsK KwkJdmlzaWJpbGl0eW1hcF9waW4ocmVsYXRpb24sIGJsb2NrLCB2bWJ1ZmZlcik7CiAJCUxv Y2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOwogCQlnb3RvIGwyOwog CX0KQEAgLTM3OTEsOSArMzYyNyw5IEBAIGwyOgogCSAqIElmIHRoZSB0dXBsZSB3ZSdyZSB1 cGRhdGluZyBpcyBsb2NrZWQsIHdlIG5lZWQgdG8gcHJlc2VydmUgdGhlIGxvY2tpbmcKIAkg KiBpbmZvIGluIHRoZSBvbGQgdHVwbGUncyBYbWF4LiAgUHJlcGFyZSBhIG5ldyBYbWF4IHZh bHVlIGZvciB0aGlzLgogCSAqLwotCWNvbXB1dGVfbmV3X3htYXhfaW5mb21hc2soSGVhcFR1 cGxlSGVhZGVyR2V0UmF3WG1heChvbGR0dXAudF9kYXRhKSwKLQkJCQkJCQkgIG9sZHR1cC50 X2RhdGEtPnRfaW5mb21hc2ssCi0JCQkJCQkJICBvbGR0dXAudF9kYXRhLT50X2luZm9tYXNr MiwKKwljb21wdXRlX25ld194bWF4X2luZm9tYXNrKEhlYXBUdXBsZUhlYWRlckdldFJhd1ht YXgob2xkdHVwLT50X2RhdGEpLAorCQkJCQkJCSAgb2xkdHVwLT50X2RhdGEtPnRfaW5mb21h c2ssCisJCQkJCQkJICBvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzazIsCiAJCQkJCQkJICB4 aWQsICpsb2NrbW9kZSwgdHJ1ZSwKIAkJCQkJCQkgICZ4bWF4X29sZF90dXBsZSwgJmluZm9t YXNrX29sZF90dXBsZSwKIAkJCQkJCQkgICZpbmZvbWFzazJfb2xkX3R1cGxlKTsKQEAgLTM4 MDUsMTIgKzM2NDEsMTIgQEAgbDI6CiAJICogdHVwbGUuICAoSW4gcmFyZSBjYXNlcyB0aGF0 IG1pZ2h0IGFsc28gYmUgSW52YWxpZFRyYW5zYWN0aW9uSWQgYW5kIHlldAogCSAqIG5vdCBo YXZlIHRoZSBIRUFQX1hNQVhfSU5WQUxJRCBiaXQgc2V0OyB0aGF0J3MgZmluZS4pCiAJICov Ci0JaWYgKChvbGR0dXAudF9kYXRhLT50X2luZm9tYXNrICYgSEVBUF9YTUFYX0lOVkFMSUQp IHx8Ci0JCUhFQVBfTE9DS0VEX1VQR1JBREVEKG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2sp IHx8CisJaWYgKChvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzayAmIEhFQVBfWE1BWF9JTlZB TElEKSB8fAorCQlIRUFQX0xPQ0tFRF9VUEdSQURFRChvbGR0dXAtPnRfZGF0YS0+dF9pbmZv bWFzaykgfHwKIAkJKGNoZWNrZWRfbG9ja2VycyAmJiAhbG9ja2VyX3JlbWFpbnMpKQogCQl4 bWF4X25ld190dXBsZSA9IEludmFsaWRUcmFuc2FjdGlvbklkOwogCWVsc2UKLQkJeG1heF9u ZXdfdHVwbGUgPSBIZWFwVHVwbGVIZWFkZXJHZXRSYXdYbWF4KG9sZHR1cC50X2RhdGEpOwor CQl4bWF4X25ld190dXBsZSA9IEhlYXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLT50 X2RhdGEpOwogCiAJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZCh4bWF4X25ld190dXBsZSkp CiAJewpAQCAtMzgyNSw3ICszNjYxLDcgQEAgbDI6CiAJCSAqIE5vdGUgdGhhdCBzaW5jZSB3 ZSdyZSBkb2luZyBhbiB1cGRhdGUsIHRoZSBvbmx5IHBvc3NpYmlsaXR5IGlzIHRoYXQKIAkJ ICogdGhlIGxvY2tlcnMgaGFkIEZPUiBLRVkgU0hBUkUgbG9jay4KIAkJICovCi0JCWlmIChv bGR0dXAudF9kYXRhLT50X2luZm9tYXNrICYgSEVBUF9YTUFYX0lTX01VTFRJKQorCQlpZiAo b2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2sgJiBIRUFQX1hNQVhfSVNfTVVMVEkpCiAJCXsK IAkJCUdldE11bHRpWGFjdElkSGludEJpdHMoeG1heF9uZXdfdHVwbGUsICZpbmZvbWFza19u ZXdfdHVwbGUsCiAJCQkJCQkJCSAgICZpbmZvbWFzazJfbmV3X3R1cGxlKTsKQEAgLTM4NTMs NyArMzY4OSw3IEBAIGwyOgogCSAqIFJlcGxhY2UgY2lkIHdpdGggYSBjb21ibyBDSUQgaWYg bmVjZXNzYXJ5LiAgTm90ZSB0aGF0IHdlIGFscmVhZHkgcHV0CiAJICogdGhlIHBsYWluIGNp ZCBpbnRvIHRoZSBuZXcgdHVwbGUuCiAJICovCi0JSGVhcFR1cGxlSGVhZGVyQWRqdXN0Q21h eChvbGR0dXAudF9kYXRhLCAmY2lkLCAmaXNjb21ibyk7CisJSGVhcFR1cGxlSGVhZGVyQWRq dXN0Q21heChvbGR0dXAtPnRfZGF0YSwgJmNpZCwgJmlzY29tYm8pOwogCiAJLyoKIAkgKiBJ ZiB0aGUgdG9hc3RlciBuZWVkcyB0byBiZSBhY3RpdmF0ZWQsIE9SIGlmIHRoZSBuZXcgdHVw bGUgd2lsbCBub3QgZml0CkBAIC0zODcwLDEyICszNzA2LDEyIEBAIGwyOgogCQlyZWxhdGlv bi0+cmRfcmVsLT5yZWxraW5kICE9IFJFTEtJTkRfTUFUVklFVykKIAl7CiAJCS8qIHRvYXN0 IHRhYmxlIGVudHJpZXMgc2hvdWxkIG5ldmVyIGJlIHJlY3Vyc2l2ZWx5IHRvYXN0ZWQgKi8K LQkJQXNzZXJ0KCFIZWFwVHVwbGVIYXNFeHRlcm5hbCgmb2xkdHVwKSk7CisJCUFzc2VydCgh SGVhcFR1cGxlSGFzRXh0ZXJuYWwob2xkdHVwKSk7CiAJCUFzc2VydCghSGVhcFR1cGxlSGFz RXh0ZXJuYWwobmV3dHVwKSk7CiAJCW5lZWRfdG9hc3QgPSBmYWxzZTsKIAl9CiAJZWxzZQot CQluZWVkX3RvYXN0ID0gKEhlYXBUdXBsZUhhc0V4dGVybmFsKCZvbGR0dXApIHx8CisJCW5l ZWRfdG9hc3QgPSAoSGVhcFR1cGxlSGFzRXh0ZXJuYWwob2xkdHVwKSB8fAogCQkJCQkgIEhl YXBUdXBsZUhhc0V4dGVybmFsKG5ld3R1cCkgfHwKIAkJCQkJICBuZXd0dXAtPnRfbGVuID4g VE9BU1RfVFVQTEVfVEhSRVNIT0xEKTsKIApAQCAtMzkwOCw5ICszNzQ0LDkgQEAgbDI6CiAJ CSAqIHVwZGF0aW5nLCBiZWNhdXNlIHRoZSBwb3RlbnRpYWxseSBjcmVhdGVkIG11bHRpeGFj dCB3b3VsZCBvdGhlcndpc2UKIAkJICogYmUgd3JvbmcuCiAJCSAqLwotCQljb21wdXRlX25l d194bWF4X2luZm9tYXNrKEhlYXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLnRfZGF0 YSksCi0JCQkJCQkJCSAgb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzaywKLQkJCQkJCQkJICBv bGR0dXAudF9kYXRhLT50X2luZm9tYXNrMiwKKwkJY29tcHV0ZV9uZXdfeG1heF9pbmZvbWFz ayhIZWFwVHVwbGVIZWFkZXJHZXRSYXdYbWF4KG9sZHR1cC0+dF9kYXRhKSwKKwkJCQkJCQkJ ICBvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzaywKKwkJCQkJCQkJICBvbGR0dXAtPnRfZGF0 YS0+dF9pbmZvbWFzazIsCiAJCQkJCQkJCSAgeGlkLCAqbG9ja21vZGUsIGZhbHNlLAogCQkJ CQkJCQkgICZ4bWF4X2xvY2tfb2xkX3R1cGxlLCAmaW5mb21hc2tfbG9ja19vbGRfdHVwbGUs CiAJCQkJCQkJCSAgJmluZm9tYXNrMl9sb2NrX29sZF90dXBsZSk7CkBAIC0zOTIwLDE4ICsz NzU2LDE4IEBAIGwyOgogCQlTVEFSVF9DUklUX1NFQ1RJT04oKTsKIAogCQkvKiBDbGVhciBv YnNvbGV0ZSB2aXNpYmlsaXR5IGZsYWdzIC4uLiAqLwotCQlvbGR0dXAudF9kYXRhLT50X2lu Zm9tYXNrICY9IH4oSEVBUF9YTUFYX0JJVFMgfCBIRUFQX01PVkVEKTsKLQkJb2xkdHVwLnRf ZGF0YS0+dF9pbmZvbWFzazIgJj0gfkhFQVBfS0VZU19VUERBVEVEOwotCQlIZWFwVHVwbGVD bGVhckhvdFVwZGF0ZWQoJm9sZHR1cCk7CisJCW9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNr ICY9IH4oSEVBUF9YTUFYX0JJVFMgfCBIRUFQX01PVkVEKTsKKwkJb2xkdHVwLT50X2RhdGEt PnRfaW5mb21hc2syICY9IH5IRUFQX0tFWVNfVVBEQVRFRDsKKwkJSGVhcFR1cGxlQ2xlYXJI b3RVcGRhdGVkKG9sZHR1cCk7CiAJCS8qIC4uLiBhbmQgc3RvcmUgaW5mbyBhYm91dCB0cmFu c2FjdGlvbiB1cGRhdGluZyB0aGlzIHR1cGxlICovCiAJCUFzc2VydChUcmFuc2FjdGlvbklk SXNWYWxpZCh4bWF4X2xvY2tfb2xkX3R1cGxlKSk7Ci0JCUhlYXBUdXBsZUhlYWRlclNldFht YXgob2xkdHVwLnRfZGF0YSwgeG1heF9sb2NrX29sZF90dXBsZSk7Ci0JCW9sZHR1cC50X2Rh dGEtPnRfaW5mb21hc2sgfD0gaW5mb21hc2tfbG9ja19vbGRfdHVwbGU7Ci0JCW9sZHR1cC50 X2RhdGEtPnRfaW5mb21hc2syIHw9IGluZm9tYXNrMl9sb2NrX29sZF90dXBsZTsKLQkJSGVh cFR1cGxlSGVhZGVyU2V0Q21heChvbGR0dXAudF9kYXRhLCBjaWQsIGlzY29tYm8pOworCQlI ZWFwVHVwbGVIZWFkZXJTZXRYbWF4KG9sZHR1cC0+dF9kYXRhLCB4bWF4X2xvY2tfb2xkX3R1 cGxlKTsKKwkJb2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2sgfD0gaW5mb21hc2tfbG9ja19v bGRfdHVwbGU7CisJCW9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrMiB8PSBpbmZvbWFzazJf bG9ja19vbGRfdHVwbGU7CisJCUhlYXBUdXBsZUhlYWRlclNldENtYXgob2xkdHVwLT50X2Rh dGEsIGNpZCwgaXNjb21ibyk7CiAKIAkJLyogdGVtcG9yYXJpbHkgbWFrZSBpdCBsb29rIG5v dC11cGRhdGVkLCBidXQgbG9ja2VkICovCi0JCW9sZHR1cC50X2RhdGEtPnRfY3RpZCA9IG9s ZHR1cC50X3NlbGY7CisJCW9sZHR1cC0+dF9kYXRhLT50X2N0aWQgPSBvbGR0dXAtPnRfc2Vs ZjsKIAogCQkvKgogCQkgKiBDbGVhciBhbGwtZnJvemVuIGJpdCBvbiB2aXNpYmlsaXR5IG1h cCBpZiBuZWVkZWQuIFdlIGNvdWxkCkBAIC0zOTQwLDcgKzM3NzYsNyBAQCBsMjoKIAkJICog d29ydGh3aGlsZS4KIAkJICovCiAJCWlmIChQYWdlSXNBbGxWaXNpYmxlKHBhZ2UpICYmCi0J CQl2aXNpYmlsaXR5bWFwX2NsZWFyKHJlbGF0aW9uLCBibG9jaywgdm1idWZmZXIsCisJCQl2 aXNpYmlsaXR5bWFwX2NsZWFyKHJlbGF0aW9uLCBibG9jaywgKnZtYnVmZmVyLAogCQkJCQkJ CQlWSVNJQklMSVRZTUFQX0FMTF9GUk9aRU4pKQogCQkJY2xlYXJlZF9hbGxfZnJvemVuID0g dHJ1ZTsKIApAQCAtMzk1NCwxMCArMzc5MCwxMCBAQCBsMjoKIAkJCVhMb2dCZWdpbkluc2Vy dCgpOwogCQkJWExvZ1JlZ2lzdGVyQnVmZmVyKDAsIGJ1ZmZlciwgUkVHQlVGX1NUQU5EQVJE KTsKIAotCQkJeGxyZWMub2ZmbnVtID0gSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXIoJm9s ZHR1cC50X3NlbGYpOworCQkJeGxyZWMub2ZmbnVtID0gSXRlbVBvaW50ZXJHZXRPZmZzZXRO dW1iZXIoJm9sZHR1cC0+dF9zZWxmKTsKIAkJCXhscmVjLnhtYXggPSB4bWF4X2xvY2tfb2xk X3R1cGxlOwotCQkJeGxyZWMuaW5mb2JpdHNfc2V0ID0gY29tcHV0ZV9pbmZvYml0cyhvbGR0 dXAudF9kYXRhLT50X2luZm9tYXNrLAotCQkJCQkJCQkJCQkJICBvbGR0dXAudF9kYXRhLT50 X2luZm9tYXNrMik7CisJCQl4bHJlYy5pbmZvYml0c19zZXQgPSBjb21wdXRlX2luZm9iaXRz KG9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrLAorCQkJCQkJCQkJCQkJICBvbGR0dXAtPnRf ZGF0YS0+dF9pbmZvbWFzazIpOwogCQkJeGxyZWMuZmxhZ3MgPQogCQkJCWNsZWFyZWRfYWxs X2Zyb3plbiA/IFhMSF9MT0NLX0FMTF9GUk9aRU5fQ0xFQVJFRCA6IDA7CiAJCQlYTG9nUmVn aXN0ZXJEYXRhKCZ4bHJlYywgU2l6ZU9mSGVhcExvY2spOwpAQCAtMzk3OSw3ICszODE1LDcg QEAgbDI6CiAJCWlmIChuZWVkX3RvYXN0KQogCQl7CiAJCQkvKiBOb3RlIHdlIGFsd2F5cyB1 c2UgV0FMIGFuZCBGU00gZHVyaW5nIHVwZGF0ZXMgKi8KLQkJCWhlYXB0dXAgPSBoZWFwX3Rv YXN0X2luc2VydF9vcl91cGRhdGUocmVsYXRpb24sIG5ld3R1cCwgJm9sZHR1cCwgMCk7CisJ CQloZWFwdHVwID0gaGVhcF90b2FzdF9pbnNlcnRfb3JfdXBkYXRlKHJlbGF0aW9uLCBuZXd0 dXAsIG9sZHR1cCwgMCk7CiAJCQluZXd0dXBzaXplID0gTUFYQUxJR04oaGVhcHR1cC0+dF9s ZW4pOwogCQl9CiAJCWVsc2UKQEAgLTQwMTUsMjAgKzM4NTEsMjAgQEAgbDI6CiAJCQkJLyog SXQgZG9lc24ndCBmaXQsIG11c3QgdXNlIFJlbGF0aW9uR2V0QnVmZmVyRm9yVHVwbGUuICov CiAJCQkJbmV3YnVmID0gUmVsYXRpb25HZXRCdWZmZXJGb3JUdXBsZShyZWxhdGlvbiwgaGVh cHR1cC0+dF9sZW4sCiAJCQkJCQkJCQkJCQkgICBidWZmZXIsIDAsIE5VTEwsCi0JCQkJCQkJ CQkJCQkgICAmdm1idWZmZXJfbmV3LCAmdm1idWZmZXIsCisJCQkJCQkJCQkJCQkgICAmdm1i dWZmZXJfbmV3LCB2bWJ1ZmZlciwKIAkJCQkJCQkJCQkJCSAgIDApOwogCQkJCS8qIFdlJ3Jl IGFsbCBkb25lLiAqLwogCQkJCWJyZWFrOwogCQkJfQogCQkJLyogQWNxdWlyZSBWTSBwYWdl IHBpbiBpZiBuZWVkZWQgYW5kIHdlIGRvbid0IGhhdmUgaXQuICovCi0JCQlpZiAodm1idWZm ZXIgPT0gSW52YWxpZEJ1ZmZlciAmJiBQYWdlSXNBbGxWaXNpYmxlKHBhZ2UpKQotCQkJCXZp c2liaWxpdHltYXBfcGluKHJlbGF0aW9uLCBibG9jaywgJnZtYnVmZmVyKTsKKwkJCWlmICgq dm1idWZmZXIgPT0gSW52YWxpZEJ1ZmZlciAmJiBQYWdlSXNBbGxWaXNpYmxlKHBhZ2UpKQor CQkJCXZpc2liaWxpdHltYXBfcGluKHJlbGF0aW9uLCBibG9jaywgdm1idWZmZXIpOwogCQkJ LyogUmUtYWNxdWlyZSB0aGUgbG9jayBvbiB0aGUgb2xkIHR1cGxlJ3MgcGFnZS4gKi8KIAkJ CUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOwogCQkJLyogUmUt Y2hlY2sgdXNpbmcgdGhlIHVwLXRvLWRhdGUgZnJlZSBzcGFjZSAqLwogCQkJcGFnZWZyZWUg PSBQYWdlR2V0SGVhcEZyZWVTcGFjZShwYWdlKTsKIAkJCWlmIChuZXd0dXBzaXplID4gcGFn ZWZyZWUgfHwKLQkJCQkodm1idWZmZXIgPT0gSW52YWxpZEJ1ZmZlciAmJiBQYWdlSXNBbGxW aXNpYmxlKHBhZ2UpKSkKKwkJCQkoKnZtYnVmZmVyID09IEludmFsaWRCdWZmZXIgJiYgUGFn ZUlzQWxsVmlzaWJsZShwYWdlKSkpCiAJCQl7CiAJCQkJLyoKIAkJCQkgKiBSYXRzLCBpdCBk b2Vzbid0IGZpdCBhbnltb3JlLCBvciBzb21lYm9keSBqdXN0IG5vdyBzZXQgdGhlCkBAIC00 MDY2LDQyICszOTAyLDIxIEBAIGwyOgogCSAqIHdpbGwgaW5jbHVkZSBjaGVja2luZyB0aGUg cmVsYXRpb24gbGV2ZWwsIHRoZXJlIGlzIG5vIGJlbmVmaXQgdG8gYQogCSAqIHNlcGFyYXRl IGNoZWNrIGZvciB0aGUgbmV3IHR1cGxlLgogCSAqLwotCUNoZWNrRm9yU2VyaWFsaXphYmxl Q29uZmxpY3RJbihyZWxhdGlvbiwgJm9sZHR1cC50X3NlbGYsCisJQ2hlY2tGb3JTZXJpYWxp emFibGVDb25mbGljdEluKHJlbGF0aW9uLCAmb2xkdHVwLT50X3NlbGYsCiAJCQkJCQkJCSAg IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1ZmZlcikpOwogCiAJLyoKIAkgKiBBdCB0aGlzIHBv aW50IG5ld2J1ZiBhbmQgYnVmZmVyIGFyZSBib3RoIHBpbm5lZCBhbmQgbG9ja2VkLCBhbmQg bmV3YnVmCi0JICogaGFzIGVub3VnaCBzcGFjZSBmb3IgdGhlIG5ldyB0dXBsZS4gIElmIHRo ZXkgYXJlIHRoZSBzYW1lIGJ1ZmZlciwgb25seQotCSAqIG9uZSBwaW4gaXMgaGVsZC4KKwkg KiBoYXMgZW5vdWdoIHNwYWNlIGZvciB0aGUgbmV3IHR1cGxlIHNvIHdlIGNhbiB1c2UgdGhl IEhPVCB1cGRhdGUgcGF0aCBpZgorCSAqIHRoZSBjYWxsZXIgZGV0ZXJtaW5lZCB0aGF0IGl0 IGlzIGFsbG93YWJsZS4KKwkgKgorCSAqIE5PVEU6IElmIG5ld2J1ZiA9PSBidWZmZXIgdGhl biBvbmx5IG9uZSBwaW4gaXMgaGVsZC4KIAkgKi8KKwl1c2VfaG90X3VwZGF0ZSA9IChuZXdi dWYgPT0gYnVmZmVyKSAmJiBob3RfYWxsb3dlZDsKIAotCWlmIChuZXdidWYgPT0gYnVmZmVy KQotCXsKLQkJLyoKLQkJICogU2luY2UgdGhlIG5ldyB0dXBsZSBpcyBnb2luZyBpbnRvIHRo ZSBzYW1lIHBhZ2UsIHdlIG1pZ2h0IGJlIGFibGUKLQkJICogdG8gZG8gYSBIT1QgdXBkYXRl LiAgQ2hlY2sgaWYgYW55IG9mIHRoZSBpbmRleCBjb2x1bW5zIGhhdmUgYmVlbgotCQkgKiBj aGFuZ2VkLgotCQkgKi8KLQkJaWYgKCFibXNfb3ZlcmxhcChtb2RpZmllZF9hdHRycywgaG90 X2F0dHJzKSkKLQkJewotCQkJdXNlX2hvdF91cGRhdGUgPSB0cnVlOwotCi0JCQkvKgotCQkJ ICogSWYgbm9uZSBvZiB0aGUgY29sdW1ucyB0aGF0IGFyZSB1c2VkIGluIGhvdC1ibG9ja2lu ZyBpbmRleGVzCi0JCQkgKiB3ZXJlIHVwZGF0ZWQsIHdlIGNhbiBhcHBseSBIT1QsIGJ1dCB3 ZSBkbyBzdGlsbCBuZWVkIHRvIGNoZWNrCi0JCQkgKiBpZiB3ZSBuZWVkIHRvIHVwZGF0ZSB0 aGUgc3VtbWFyaXppbmcgaW5kZXhlcywgYW5kIHVwZGF0ZSB0aG9zZQotCQkJICogaW5kZXhl cyBpZiB0aGUgY29sdW1ucyB3ZXJlIHVwZGF0ZWQsIG9yIHdlIG1heSBmYWlsIHRvIGRldGVj dAotCQkJICogZS5nLiB2YWx1ZSBib3VuZCBjaGFuZ2VzIGluIEJSSU4gbWlubWF4IGluZGV4 ZXMuCi0JCQkgKi8KLQkJCWlmIChibXNfb3ZlcmxhcChtb2RpZmllZF9hdHRycywgc3VtX2F0 dHJzKSkKLQkJCQlzdW1tYXJpemVkX3VwZGF0ZSA9IHRydWU7Ci0JCX0KLQl9Ci0JZWxzZQot CXsKLQkJLyogU2V0IGEgaGludCB0aGF0IHRoZSBvbGQgcGFnZSBjb3VsZCB1c2UgcHJ1bmUv ZGVmcmFnICovCisJLyogU2V0IGEgaGludCB0aGF0IHRoZSBvbGQgcGFnZSBjb3VsZCB1c2Ug cHJ1bmUvZGVmcmFnICovCisJaWYgKCF1c2VfaG90X3VwZGF0ZSkKIAkJUGFnZVNldEZ1bGwo cGFnZSk7Ci0JfQogCiAJLyoKIAkgKiBDb21wdXRlIHJlcGxpY2EgaWRlbnRpdHkgdHVwbGUg YmVmb3JlIGVudGVyaW5nIHRoZSBjcml0aWNhbCBzZWN0aW9uIHNvCkBAIC00MTEwLDkgKzM5 MjUsNyBAQCBsMjoKIAkgKiBsb2dnZWQuICBQYXNzIG9sZCBrZXkgcmVxdWlyZWQgYXMgdHJ1 ZSBvbmx5IGlmIHRoZSByZXBsaWNhIGlkZW50aXR5IGtleQogCSAqIGNvbHVtbnMgYXJlIG1v ZGlmaWVkIG9yIGl0IGhhcyBleHRlcm5hbCBkYXRhLgogCSAqLwotCW9sZF9rZXlfdHVwbGUg PSBFeHRyYWN0UmVwbGljYUlkZW50aXR5KHJlbGF0aW9uLCAmb2xkdHVwLAotCQkJCQkJCQkJ CSAgIGJtc19vdmVybGFwKG1vZGlmaWVkX2F0dHJzLCBpZF9hdHRycykgfHwKLQkJCQkJCQkJ CQkgICBpZF9oYXNfZXh0ZXJuYWwsCisJb2xkX2tleV90dXBsZSA9IEV4dHJhY3RSZXBsaWNh SWRlbnRpdHkocmVsYXRpb24sIG9sZHR1cCwgcmVwX2lkX2tleV9yZXF1aXJlZCwKIAkJCQkJ CQkJCQkgICAmb2xkX2tleV9jb3BpZWQpOwogCiAJLyogTk8gRVJFUE9SVChFUlJPUikgZnJv bSBoZXJlIHRpbGwgY2hhbmdlcyBhcmUgbG9nZ2VkICovCkBAIC00MTM1LDcgKzM5NDgsNyBA QCBsMjoKIAlpZiAodXNlX2hvdF91cGRhdGUpCiAJewogCQkvKiBNYXJrIHRoZSBvbGQgdHVw bGUgYXMgSE9ULXVwZGF0ZWQgKi8KLQkJSGVhcFR1cGxlU2V0SG90VXBkYXRlZCgmb2xkdHVw KTsKKwkJSGVhcFR1cGxlU2V0SG90VXBkYXRlZChvbGR0dXApOwogCQkvKiBBbmQgbWFyayB0 aGUgbmV3IHR1cGxlIGFzIGhlYXAtb25seSAqLwogCQlIZWFwVHVwbGVTZXRIZWFwT25seSho ZWFwdHVwKTsKIAkJLyogTWFyayB0aGUgY2FsbGVyJ3MgY29weSB0b28sIGluIGNhc2UgZGlm ZmVyZW50IGZyb20gaGVhcHR1cCAqLwpAQCAtNDE0NCw3ICszOTU3LDcgQEAgbDI6CiAJZWxz ZQogCXsKIAkJLyogTWFrZSBzdXJlIHR1cGxlcyBhcmUgY29ycmVjdGx5IG1hcmtlZCBhcyBu b3QtSE9UICovCi0JCUhlYXBUdXBsZUNsZWFySG90VXBkYXRlZCgmb2xkdHVwKTsKKwkJSGVh cFR1cGxlQ2xlYXJIb3RVcGRhdGVkKG9sZHR1cCk7CiAJCUhlYXBUdXBsZUNsZWFySGVhcE9u bHkoaGVhcHR1cCk7CiAJCUhlYXBUdXBsZUNsZWFySGVhcE9ubHkobmV3dHVwKTsKIAl9CkBA IC00MTUzLDE3ICszOTY2LDE3IEBAIGwyOgogCiAKIAkvKiBDbGVhciBvYnNvbGV0ZSB2aXNp YmlsaXR5IGZsYWdzLCBwb3NzaWJseSBzZXQgYnkgb3Vyc2VsdmVzIGFib3ZlLi4uICovCi0J b2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzayAmPSB+KEhFQVBfWE1BWF9CSVRTIHwgSEVBUF9N T1ZFRCk7Ci0Jb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzazIgJj0gfkhFQVBfS0VZU19VUERB VEVEOworCW9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrICY9IH4oSEVBUF9YTUFYX0JJVFMg fCBIRUFQX01PVkVEKTsKKwlvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzazIgJj0gfkhFQVBf S0VZU19VUERBVEVEOwogCS8qIC4uLiBhbmQgc3RvcmUgaW5mbyBhYm91dCB0cmFuc2FjdGlv biB1cGRhdGluZyB0aGlzIHR1cGxlICovCiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlk KHhtYXhfb2xkX3R1cGxlKSk7Ci0JSGVhcFR1cGxlSGVhZGVyU2V0WG1heChvbGR0dXAudF9k YXRhLCB4bWF4X29sZF90dXBsZSk7Ci0Jb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzayB8PSBp bmZvbWFza19vbGRfdHVwbGU7Ci0Jb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzazIgfD0gaW5m b21hc2syX29sZF90dXBsZTsKLQlIZWFwVHVwbGVIZWFkZXJTZXRDbWF4KG9sZHR1cC50X2Rh dGEsIGNpZCwgaXNjb21ibyk7CisJSGVhcFR1cGxlSGVhZGVyU2V0WG1heChvbGR0dXAtPnRf ZGF0YSwgeG1heF9vbGRfdHVwbGUpOworCW9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrIHw9 IGluZm9tYXNrX29sZF90dXBsZTsKKwlvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzazIgfD0g aW5mb21hc2syX29sZF90dXBsZTsKKwlIZWFwVHVwbGVIZWFkZXJTZXRDbWF4KG9sZHR1cC0+ dF9kYXRhLCBjaWQsIGlzY29tYm8pOwogCiAJLyogcmVjb3JkIGFkZHJlc3Mgb2YgbmV3IHR1 cGxlIGluIHRfY3RpZCBvZiBvbGQgb25lICovCi0Jb2xkdHVwLnRfZGF0YS0+dF9jdGlkID0g aGVhcHR1cC0+dF9zZWxmOworCW9sZHR1cC0+dF9kYXRhLT50X2N0aWQgPSBoZWFwdHVwLT50 X3NlbGY7CiAKIAkvKiBjbGVhciBQRF9BTExfVklTSUJMRSBmbGFncywgcmVzZXQgYWxsIHZp c2liaWxpdHltYXAgYml0cyAqLwogCWlmIChQYWdlSXNBbGxWaXNpYmxlKEJ1ZmZlckdldFBh Z2UoYnVmZmVyKSkpCkBAIC00MTcxLDcgKzM5ODQsNyBAQCBsMjoKIAkJYWxsX3Zpc2libGVf Y2xlYXJlZCA9IHRydWU7CiAJCVBhZ2VDbGVhckFsbFZpc2libGUoQnVmZmVyR2V0UGFnZShi dWZmZXIpKTsKIAkJdmlzaWJpbGl0eW1hcF9jbGVhcihyZWxhdGlvbiwgQnVmZmVyR2V0Qmxv Y2tOdW1iZXIoYnVmZmVyKSwKLQkJCQkJCQl2bWJ1ZmZlciwgVklTSUJJTElUWU1BUF9WQUxJ RF9CSVRTKTsKKwkJCQkJCQkqdm1idWZmZXIsIFZJU0lCSUxJVFlNQVBfVkFMSURfQklUUyk7 CiAJfQogCWlmIChuZXdidWYgIT0gYnVmZmVyICYmIFBhZ2VJc0FsbFZpc2libGUoQnVmZmVy R2V0UGFnZShuZXdidWYpKSkKIAl7CkBAIC00MTk2LDEyICs0MDA5LDEyIEBAIGwyOgogCQkg Ki8KIAkJaWYgKFJlbGF0aW9uSXNBY2Nlc3NpYmxlSW5Mb2dpY2FsRGVjb2RpbmcocmVsYXRp b24pKQogCQl7Ci0JCQlsb2dfaGVhcF9uZXdfY2lkKHJlbGF0aW9uLCAmb2xkdHVwKTsKKwkJ CWxvZ19oZWFwX25ld19jaWQocmVsYXRpb24sIG9sZHR1cCk7CiAJCQlsb2dfaGVhcF9uZXdf Y2lkKHJlbGF0aW9uLCBoZWFwdHVwKTsKIAkJfQogCiAJCXJlY3B0ciA9IGxvZ19oZWFwX3Vw ZGF0ZShyZWxhdGlvbiwgYnVmZmVyLAotCQkJCQkJCQkgbmV3YnVmLCAmb2xkdHVwLCBoZWFw dHVwLAorCQkJCQkJCQkgbmV3YnVmLCBvbGR0dXAsIGhlYXB0dXAsCiAJCQkJCQkJCSBvbGRf a2V5X3R1cGxlLAogCQkJCQkJCQkgYWxsX3Zpc2libGVfY2xlYXJlZCwKIAkJCQkJCQkJIGFs bF92aXNpYmxlX2NsZWFyZWRfbmV3KTsKQEAgLTQyMjYsNyArNDAzOSw3IEBAIGwyOgogCSAq IGJvdGggdHVwbGUgdmVyc2lvbnMgaW4gb25lIGNhbGwgdG8gaW52YWwuYyBzbyB3ZSBjYW4g YXZvaWQgcmVkdW5kYW50CiAJICogc2ludmFsIG1lc3NhZ2VzLikKIAkgKi8KLQlDYWNoZUlu dmFsaWRhdGVIZWFwVHVwbGUocmVsYXRpb24sICZvbGR0dXAsIGhlYXB0dXApOworCUNhY2hl SW52YWxpZGF0ZUhlYXBUdXBsZShyZWxhdGlvbiwgb2xkdHVwLCBoZWFwdHVwKTsKIAogCS8q IE5vdyB3ZSBjYW4gcmVsZWFzZSB0aGUgYnVmZmVyKHMpICovCiAJaWYgKG5ld2J1ZiAhPSBi dWZmZXIpCkBAIC00MjM0LDE0ICs0MDQ3LDE0IEBAIGwyOgogCVJlbGVhc2VCdWZmZXIoYnVm ZmVyKTsKIAlpZiAoQnVmZmVySXNWYWxpZCh2bWJ1ZmZlcl9uZXcpKQogCQlSZWxlYXNlQnVm ZmVyKHZtYnVmZmVyX25ldyk7Ci0JaWYgKEJ1ZmZlcklzVmFsaWQodm1idWZmZXIpKQotCQlS ZWxlYXNlQnVmZmVyKHZtYnVmZmVyKTsKKwlpZiAoQnVmZmVySXNWYWxpZCgqdm1idWZmZXIp KQorCQlSZWxlYXNlQnVmZmVyKCp2bWJ1ZmZlcik7CiAKIAkvKgogCSAqIFJlbGVhc2UgdGhl IGxtZ3IgdHVwbGUgbG9jaywgaWYgd2UgaGFkIGl0LgogCSAqLwogCWlmIChoYXZlX3R1cGxl X2xvY2spCi0JCVVubG9ja1R1cGxlVHVwbG9jayhyZWxhdGlvbiwgJihvbGR0dXAudF9zZWxm KSwgKmxvY2ttb2RlKTsKKwkJVW5sb2NrVHVwbGVUdXBsb2NrKHJlbGF0aW9uLCAmb2xkdHVw LT50X3NlbGYsICpsb2NrbW9kZSk7CiAKIAlwZ3N0YXRfY291bnRfaGVhcF91cGRhdGUocmVs YXRpb24sIHVzZV9ob3RfdXBkYXRlLCBuZXdidWYgIT0gYnVmZmVyKTsKIApAQCAtNDI1NSwz MiArNDA2OCw5IEBAIGwyOgogCQloZWFwX2ZyZWV0dXBsZShoZWFwdHVwKTsKIAl9CiAKLQkv KgotCSAqIElmIGl0IGlzIGEgSE9UIHVwZGF0ZSwgdGhlIHVwZGF0ZSBtYXkgc3RpbGwgbmVl ZCB0byB1cGRhdGUgc3VtbWFyaXplZAotCSAqIGluZGV4ZXMsIGxlc3Qgd2UgZmFpbCB0byB1 cGRhdGUgdGhvc2Ugc3VtbWFyaWVzIGFuZCBnZXQgaW5jb3JyZWN0Ci0JICogcmVzdWx0cyAo Zm9yIGV4YW1wbGUsIG1pbm1heCBib3VuZHMgb2YgdGhlIGJsb2NrIG1heSBjaGFuZ2Ugd2l0 aCB0aGlzCi0JICogdXBkYXRlKS4KLQkgKi8KLQlpZiAodXNlX2hvdF91cGRhdGUpCi0Jewot CQlpZiAoc3VtbWFyaXplZF91cGRhdGUpCi0JCQkqdXBkYXRlX2luZGV4ZXMgPSBUVV9TdW1t YXJpemluZzsKLQkJZWxzZQotCQkJKnVwZGF0ZV9pbmRleGVzID0gVFVfTm9uZTsKLQl9Ci0J ZWxzZQotCQkqdXBkYXRlX2luZGV4ZXMgPSBUVV9BbGw7Ci0KIAlpZiAob2xkX2tleV90dXBs ZSAhPSBOVUxMICYmIG9sZF9rZXlfY29waWVkKQogCQloZWFwX2ZyZWV0dXBsZShvbGRfa2V5 X3R1cGxlKTsKIAotCWJtc19mcmVlKGhvdF9hdHRycyk7Ci0JYm1zX2ZyZWUoc3VtX2F0dHJz KTsKLQlibXNfZnJlZShrZXlfYXR0cnMpOwotCWJtc19mcmVlKGlkX2F0dHJzKTsKLQlibXNf ZnJlZShtb2RpZmllZF9hdHRycyk7Ci0JYm1zX2ZyZWUoaW50ZXJlc3RpbmdfYXR0cnMpOwot CiAJcmV0dXJuIFRNX09rOwogfQogCkBAIC00Mjg5LDcgKzQwNzksNyBAQCBsMjoKICAqIENv bmZpcm0gYWRlcXVhdGUgbG9jayBoZWxkIGR1cmluZyBoZWFwX3VwZGF0ZSgpLCBwZXIgcnVs ZXMgZnJvbQogICogUkVBRE1FLnR1cGxvY2sgc2VjdGlvbiAiTG9ja2luZyB0byB3cml0ZSBp bnBsYWNlLXVwZGF0ZWQgdGFibGVzIi4KICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIGNoZWNr X2xvY2tfaWZfaW5wbGFjZV91cGRhdGVhYmxlX3JlbChSZWxhdGlvbiByZWxhdGlvbiwKIAkJ CQkJCQkJCSBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsCiAJCQkJCQkJCQkgSGVhcFR1 cGxlIG5ld3R1cCkKQEAgLTQ0NjEsNyArNDI1MSw3IEBAIGhlYXBfYXR0cl9lcXVhbHMoVHVw bGVEZXNjIHR1cGRlc2MsIGludCBhdHRybnVtLCBEYXR1bSB2YWx1ZTEsIERhdHVtIHZhbHVl MiwKICAqIGxpc3RlZCBhcyBpbnRlcmVzdGluZykgb2YgdGhlIG9sZCB0dXBsZSBpcyBhIG1l bWJlciBvZiBleHRlcm5hbF9jb2xzIGFuZCBpcwogICogc3RvcmVkIGV4dGVybmFsbHkuCiAg Ki8KLXN0YXRpYyBCaXRtYXBzZXQgKgorQml0bWFwc2V0ICoKIEhlYXBEZXRlcm1pbmVDb2x1 bW5zSW5mbyhSZWxhdGlvbiByZWxhdGlvbiwKIAkJCQkJCSBCaXRtYXBzZXQgKmludGVyZXN0 aW5nX2NvbHMsCiAJCQkJCQkgQml0bWFwc2V0ICpleHRlcm5hbF9jb2xzLApAQCAtNDUwOCwx MCArNDI5OCwxMSBAQCBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8oUmVsYXRpb24gcmVsYXRp b24sCiAJCX0KIAogCQkvKgotCQkgKiBFeHRyYWN0IHRoZSBjb3JyZXNwb25kaW5nIHZhbHVl cy4gIFhYWCB0aGlzIGlzIHByZXR0eSBpbmVmZmljaWVudAotCQkgKiBpZiB0aGVyZSBhcmUg bWFueSBpbmRleGVkIGNvbHVtbnMuICBTaG91bGQgd2UgZG8gYSBzaW5nbGUKLQkJICogaGVh cF9kZWZvcm1fdHVwbGUgY2FsbCBvbiBlYWNoIHR1cGxlLCBpbnN0ZWFkPwlCdXQgdGhhdCBk b2Vzbid0Ci0JCSAqIHdvcmsgZm9yIHN5c3RlbSBjb2x1bW5zIC4uLgorCQkgKiBFeHRyYWN0 IHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy4KKwkJICoKKwkJICogWFhYIHRoaXMgaXMgcHJl dHR5IGluZWZmaWNpZW50IGlmIHRoZXJlIGFyZSBtYW55IGluZGV4ZWQgY29sdW1ucy4KKwkJ ICogU2hvdWxkIHdlIGRvIGEgc2luZ2xlIGhlYXBfZGVmb3JtX3R1cGxlIGNhbGwgb24gZWFj aCB0dXBsZSwKKwkJICogaW5zdGVhZD8gQnV0IHRoYXQgZG9lc24ndCB3b3JrIGZvciBzeXN0 ZW0gY29sdW1ucyAuLi4KIAkJICovCiAJCXZhbHVlMSA9IGhlYXBfZ2V0YXR0cihvbGR0dXAs IGF0dHJudW0sIHR1cGRlc2MsICZpc251bGwxKTsKIAkJdmFsdWUyID0gaGVhcF9nZXRhdHRy KG5ld3R1cCwgYXR0cm51bSwgdHVwZGVzYywgJmlzbnVsbDIpOwpAQCAtNDU0NCwyNSArNDMz NSwxODMgQEAgSGVhcERldGVybWluZUNvbHVtbnNJbmZvKFJlbGF0aW9uIHJlbGF0aW9uLAog fQogCiAvKgotICoJc2ltcGxlX2hlYXBfdXBkYXRlIC0gcmVwbGFjZSBhIHR1cGxlCi0gKgot ICogVGhpcyByb3V0aW5lIG1heSBiZSB1c2VkIHRvIHVwZGF0ZSBhIHR1cGxlIHdoZW4gY29u Y3VycmVudCB1cGRhdGVzIG9mCi0gKiB0aGUgdGFyZ2V0IHR1cGxlIGFyZSBub3QgZXhwZWN0 ZWQgKGZvciBleGFtcGxlLCBiZWNhdXNlIHdlIGhhdmUgYSBsb2NrCi0gKiBvbiB0aGUgcmVs YXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSB0dXBsZSkuICBBbnkgZmFpbHVyZSBpcyByZXBv cnRlZAotICogdmlhIGVyZXBvcnQoKS4KKyAqIFRoaXMgcm91dGluZSBtYXkgYmUgdXNlZCB0 byB1cGRhdGUgYSB0dXBsZSB3aGVuIGNvbmN1cnJlbnQgdXBkYXRlcyBvZiB0aGUKKyAqIHRh cmdldCB0dXBsZSBhcmUgbm90IGV4cGVjdGVkIChmb3IgZXhhbXBsZSwgYmVjYXVzZSB3ZSBo YXZlIGEgbG9jayBvbiB0aGUKKyAqIHJlbGF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgdHVw bGUpLiAgQW55IGZhaWx1cmUgaXMgcmVwb3J0ZWQgdmlhIGVyZXBvcnQoKS4KKyAqIFJldHVy bnMgdGhlIHNldCBvZiBtb2RpZmllZCBpbmRleGVkIGF0dHJpYnV0ZXMuCiAgKi8KLXZvaWQK LXNpbXBsZV9oZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50 ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgdHVwLAorQml0bWFwc2V0ICoKK3NpbXBsZV9oZWFw X3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpvdGlk LCBIZWFwVHVwbGUgdHVwbGUsCiAJCQkJICAgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2lu ZGV4ZXMpCiB7CiAJVE1fUmVzdWx0CXJlc3VsdDsKIAlUTV9GYWlsdXJlRGF0YSB0bWZkOwog CUxvY2tUdXBsZU1vZGUgbG9ja21vZGU7CisJQnVmZmVyCQlidWZmZXI7CisJQnVmZmVyCQl2 bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CisJUGFnZQkJcGFnZTsKKwlCbG9ja051bWJlciBi bG9jazsKKwlCaXRtYXBzZXQgICpob3RfYXR0cnMsCisJCQkgICAqc3VtX2F0dHJzLAorCQkJ ICAgKmtleV9hdHRycywKKwkJCSAgICpyaWRfYXR0cnMsCisJCQkgICAqbWl4X2F0dHJzLAor CQkJICAgKmlkeF9hdHRyczsKKwlJdGVtSWQJCWxwOworCUhlYXBUdXBsZURhdGEgb2xkdHVw OworCWJvb2wJCWhvdF9hbGxvd2VkOworCWJvb2wJCXN1bW1hcml6ZWRfb25seTsKKwlib29s CQlyZXBfaWRfa2V5X3JlcXVpcmVkID0gZmFsc2U7CisKKwlBc3NlcnQoSXRlbVBvaW50ZXJJ c1ZhbGlkKG90aWQpKTsKKworCS8qIENoZWFwLCBzaW1wbGlzdGljIGNoZWNrIHRoYXQgdGhl IHR1cGxlIG1hdGNoZXMgdGhlIHJlbCdzIHJvd3R5cGUuICovCisJQXNzZXJ0KEhlYXBUdXBs ZUhlYWRlckdldE5hdHRzKHR1cGxlLT50X2RhdGEpIDw9CisJCSAgIFJlbGF0aW9uR2V0TnVt YmVyT2ZBdHRyaWJ1dGVzKHJlbGF0aW9uKSk7CisKKwkvKgorCSAqIEZvcmJpZCB0aGlzIGR1 cmluZyBhIHBhcmFsbGVsIG9wZXJhdGlvbiwgbGVzdCBpdCBhbGxvY2F0ZSBhIGNvbWJvIENJ RC4KKwkgKiBPdGhlciB3b3JrZXJzIG1pZ2h0IG5lZWQgdGhhdCBjb21ibyBDSUQgZm9yIHZp c2liaWxpdHkgY2hlY2tzLCBhbmQgd2UKKwkgKiBoYXZlIG5vIHByb3Zpc2lvbiBmb3IgYnJv YWRjYXN0aW5nIGl0IHRvIHRoZW0uCisJICovCisJaWYgKElzSW5QYXJhbGxlbE1vZGUoKSkK KwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfVFJBTlNB Q1RJT05fU1RBVEUpLAorCQkJCSBlcnJtc2coImNhbm5vdCB1cGRhdGUgdHVwbGVzIGR1cmlu ZyBhIHBhcmFsbGVsIG9wZXJhdGlvbiIpKSk7CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNL SU5HCisJY2hlY2tfbG9ja19pZl9pbnBsYWNlX3VwZGF0ZWFibGVfcmVsKHJlbGF0aW9uLCBv dGlkLCB0dXBsZSk7CisjZW5kaWYKKworCS8qCisJICogV2UgbXVzdCBmZXRjaCB0aGVzZSBi aXRtYXBzIG9mIGF0dHJpYnV0ZXMgZnJvbSByZWxjYWNoZSB0byBiZSBjaGVja2VkCisJICog Zm9yIHZhcmlvdXMgb3BlcmF0aW9ucyBiZWxvdyBiZWZvcmUgb2J0YWluaW5nIGEgYnVmZmVy IGxvY2sgYmVjYXVzZSBpZgorCSAqIHdlIGFyZSBkb2luZyBhbiB1cGRhdGUgb24gb25lIG9m IHRoZSByZWxldmFudCBzeXN0ZW0gY2F0YWxvZ3Mgd2UgY291bGQKKwkgKiBkZWFkbG9jayBp ZiB3ZSB0cnkgdG8gZmV0Y2ggdGhlbSBsYXRlciBvbi4gUmVsY2FjaGUgd2lsbCByZXR1cm4g Y29waWVzCisJICogb2YgZWFjaCBiaXRtYXAsIHNvIHdlIG5lZWQgbm90IHdvcnJ5IGFib3V0 IHJlbGNhY2hlIGZsdXNoIGhhcHBlbmluZworCSAqIG1pZHdheSB0aHJvdWdoIHRoaXMgb3Bl cmF0aW9uLgorCSAqLworCWlkeF9hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFw KHJlbGF0aW9uLAorCQkJCQkJCQkJCSAgIElOREVYX0FUVFJfQklUTUFQX0lOREVYRUQpOwor CXN1bV9hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLAorCQkJ CQkJCQkJCSAgIElOREVYX0FUVFJfQklUTUFQX1NVTU1BUklaRUQpOworCXJpZF9hdHRycyA9 IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLAorCQkJCQkJCQkJCSAgIElO REVYX0FUVFJfQklUTUFQX0lERU5USVRZX0tFWSk7CisJa2V5X2F0dHJzID0gUmVsYXRpb25H ZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24sCisJCQkJCQkJCQkJICAgSU5ERVhfQVRUUl9C SVRNQVBfS0VZKTsKKworCWJsb2NrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcihvdGlk KTsKKwlJTkpFQ1RJT05fUE9JTlQoImhlYXBfdXBkYXRlLWJlZm9yZS1waW4iLCBOVUxMKTsK KwlidWZmZXIgPSBSZWFkQnVmZmVyKHJlbGF0aW9uLCBibG9jayk7CisJcGFnZSA9IEJ1ZmZl ckdldFBhZ2UoYnVmZmVyKTsKKworCS8qCisJICogQmVmb3JlIGxvY2tpbmcgdGhlIGJ1ZmZl ciwgcGluIHRoZSB2aXNpYmlsaXR5IG1hcCBwYWdlIGlmIGl0IGFwcGVhcnMgdG8KKwkgKiBi ZSBuZWNlc3NhcnkuICBTaW5jZSB3ZSBoYXZlbid0IGdvdCB0aGUgbG9jayB5ZXQsIHNvbWVv bmUgZWxzZSBtaWdodCBiZQorCSAqIGluIHRoZSBtaWRkbGUgb2YgY2hhbmdpbmcgdGhpcywg c28gd2UnbGwgbmVlZCB0byByZWNoZWNrIGFmdGVyIHdlIGhhdmUKKwkgKiB0aGUgbG9jay4K KwkgKi8KKwlpZiAoUGFnZUlzQWxsVmlzaWJsZShwYWdlKSkKKwkJdmlzaWJpbGl0eW1hcF9w aW4ocmVsYXRpb24sIGJsb2NrLCAmdm1idWZmZXIpOworCisJTG9ja0J1ZmZlcihidWZmZXIs IEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CisKKwlscCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwg SXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXIob3RpZCkpOworCisJLyoKKwkgKiBVc3VhbGx5 LCBhIGJ1ZmZlciBwaW4gYW5kL29yIHNuYXBzaG90IGJsb2NrcyBwcnVuaW5nIG9mIG90aWQs IGVuc3VyaW5nCisJICogd2Ugc2VlIExQX05PUk1BTCBoZXJlLiAgV2hlbiB0aGUgb3RpZCBv cmlnaW4gaXMgYSBzeXNjYWNoZSwgd2UgbWF5IGhhdmUKKwkgKiBuZWl0aGVyIGEgcGluIG5v ciBhIHNuYXBzaG90LiAgSGVuY2UsIHdlIG1heSBzZWUgb3RoZXIgTFBfIHN0YXRlcywgZWFj aAorCSAqIG9mIHdoaWNoIGluZGljYXRlcyBjb25jdXJyZW50IHBydW5pbmcuCisJICoKKwkg KiBGYWlsaW5nIHdpdGggVE1fVXBkYXRlZCB3b3VsZCBiZSBtb3N0IGFjY3VyYXRlLiAgSG93 ZXZlciwgdW5saWtlIG90aGVyCisJICogVE1fVXBkYXRlZCBzY2VuYXJpb3MsIHdlIGRvbid0 IGtub3cgdGhlIHN1Y2Nlc3NvciBjdGlkIGluIExQX1VOVVNFRCBhbmQKKwkgKiBMUF9ERUFE IGNhc2VzLiAgV2hpbGUgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gVE1fVXBkYXRlZCBhbmQg VE1fRGVsZXRlZAorCSAqIGRvZXMgbWF0dGVyIHRvIFNRTCBzdGF0ZW1lbnRzIFVQREFURSBh bmQgTUVSR0UsIHRob3NlIFNRTCBzdGF0ZW1lbnRzCisJICogaG9sZCBhIHNuYXBzaG90IHRo YXQgZW5zdXJlcyBMUF9OT1JNQUwuICBIZW5jZSwgdGhlIGNob2ljZSBiZXR3ZWVuCisJICog VE1fVXBkYXRlZCBhbmQgVE1fRGVsZXRlZCBhZmZlY3RzIG9ubHkgdGhlIHdvcmRpbmcgb2Yg ZXJyb3IgbWVzc2FnZXMuCisJICogU2V0dGxlIG9uIFRNX0RlbGV0ZWQsIGZvciB0d28gcmVh c29ucy4gIEZpcnN0LCBpdCBhdm9pZHMgY29tcGxpY2F0aW5nCisJICogdGhlIHNwZWNpZmlj YXRpb24gb2Ygd2hlbiB0bWZkLT5jdGlkIGlzIHZhbGlkLiAgU2Vjb25kLCBpdCBjcmVhdGVz CisJICogZXJyb3IgbG9nIGV2aWRlbmNlIHRoYXQgd2UgdG9vayB0aGlzIGJyYW5jaC4KKwkg KgorCSAqIFNpbmNlIGl0J3MgcG9zc2libGUgdG8gc2VlIExQX1VOVVNFRCBhdCBvdGlkLCBp dCdzIGFsc28gcG9zc2libGUgdG8gc2VlCisJICogTFBfTk9STUFMIGZvciBhIHR1cGxlIHRo YXQgcmVwbGFjZWQgTFBfVU5VU0VELiAgSWYgaXQncyBhIHR1cGxlIGZvciBhbgorCSAqIHVu cmVsYXRlZCByb3csIHdlJ2xsIGZhaWwgd2l0aCAiZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9s YXRlcyB1bmlxdWUiLgorCSAqIFhYWCBpZiBvdGlkIGlzIHRoZSBsaXZlLCBuZXdlciB2ZXJz aW9uIG9mIHRoZSBuZXd0dXAgcm93LCB3ZSdsbCBkaXNjYXJkCisJICogY2hhbmdlcyBvcmln aW5hdGluZyBpbiB2ZXJzaW9ucyBvZiB0aGlzIGNhdGFsb2cgcm93IGFmdGVyIHRoZSB2ZXJz aW9uCisJICogdGhlIGNhbGxlciBnb3QgZnJvbSBzeXNjYWNoZS4gIFNlZSBzeXNjYWNoZS11 cGRhdGUtcHJ1bmVkLnNwZWMuCisJICovCisJaWYgKCFJdGVtSWRJc05vcm1hbChscCkpCisJ eworCQlBc3NlcnQoUmVsYXRpb25TdXBwb3J0c1N5c0NhY2hlKFJlbGF0aW9uR2V0UmVsaWQo cmVsYXRpb24pKSk7CisKKwkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOworCQlpZiAo dm1idWZmZXIgIT0gSW52YWxpZEJ1ZmZlcikKKwkJCVJlbGVhc2VCdWZmZXIodm1idWZmZXIp OworCQkqdXBkYXRlX2luZGV4ZXMgPSBUVV9Ob25lOworCisJCWJtc19mcmVlKHN1bV9hdHRy cyk7CisJCWJtc19mcmVlKHJpZF9hdHRycyk7CisJCWJtc19mcmVlKGtleV9hdHRycyk7CisJ CWJtc19mcmVlKGlkeF9hdHRycyk7CisJCS8qIG1peF9hdHRycyBub3QgeWV0IGluaXRpYWxp emVkICovCisKKwkJZWxvZyhFUlJPUiwgInR1cGxlIGNvbmN1cnJlbnRseSBkZWxldGVkIik7 CisKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBQYXJ0aWFsbHkgY29uc3RydWN0 IHRoZSBvbGR0dXAgZm9yIEhlYXBEZXRlcm1pbmVDb2x1bW5zSW5mbyB0byB3b3JrIGFuZAor CSAqIHRoZW4gcGFzcyB0aGF0IG9uIHRvIGhlYXBfdXBkYXRlLgorCSAqLworCW9sZHR1cC50 X3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7CisJb2xkdHVwLnRfZGF0 YSA9IChIZWFwVHVwbGVIZWFkZXIpIFBhZ2VHZXRJdGVtKHBhZ2UsIGxwKTsKKwlvbGR0dXAu dF9sZW4gPSBJdGVtSWRHZXRMZW5ndGgobHApOworCW9sZHR1cC50X3NlbGYgPSAqb3RpZDsK KworCS8qIFVzZSBhIGJpdG1hcCBvZiBhbGwgaW5kZXhlZCBhdHRyaWJ1dGVzIGhlcmUgKi8K KwltaXhfYXR0cnMgPSBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8ocmVsYXRpb24sIGlkeF9h dHRycywgcmlkX2F0dHJzLAorCQkJCQkJCQkJCSAmb2xkdHVwLCB0dXBsZSwgJnJlcF9pZF9r ZXlfcmVxdWlyZWQpOworCisJLyoKKwkgKiBXZSdsbCBuZWVkIHRvIFdBTCBsb2cgdGhlIHJl cGxpY2EgaWRlbnRpdHkgYXR0cmlidXRlcyBpZiBlaXRoZXIgdGhleQorCSAqIG92ZXJsYXAg d2l0aCB0aGUgbW9kaWZpZWQgaW5kZXhlZCBhdHRyaWJ1dGVzIG9yLCBhcyB3ZSd2ZSBjaGVj a2VkIGZvcgorCSAqIGp1c3Qgbm93IGluIEhlYXBEZXRlcm1pbmVDb2x1bW5zSW5mbywgdGhl eSB3ZXJlIHVubW9kaWZpZWQgZXh0ZXJuYWwKKwkgKiBpbmRleGVkIGF0dHJpYnV0ZXMuCisJ ICovCisJcmVwX2lkX2tleV9yZXF1aXJlZCA9IHJlcF9pZF9rZXlfcmVxdWlyZWQgfHwgYm1z X292ZXJsYXAobWl4X2F0dHJzLCByaWRfYXR0cnMpOworCWJtc19mcmVlKHJpZF9hdHRycyk7 CisKKwkvKgorCSAqIEhPVCB1cGRhdGVzIGFyZSBwb3NzaWJsZSB3aGVuIGVpdGhlcjogYSkg dGhlcmUgYXJlIG5vIG1vZGlmaWVkIGluZGV4ZWQKKwkgKiBhdHRyaWJ1dGVzLCBvciBiKSB0 aGUgbW9kaWZpZWQgYXR0cmlidXRlcyBhcmUgYWxsIG9uIHN1bW1hcml6aW5nCisJICogaW5k ZXhlcy4KKwkgKi8KKwlob3RfYXR0cnMgPSBibXNfZGVsX21lbWJlcnMoaWR4X2F0dHJzLCBz dW1fYXR0cnMpOworCXN1bW1hcml6ZWRfb25seSA9ICFibXNfaXNfZW1wdHkobWl4X2F0dHJz KSAmJiBibXNfaXNfc3Vic2V0KG1peF9hdHRycywgc3VtX2F0dHJzKTsKKwlob3RfYWxsb3dl ZCA9ICFibXNfb3ZlcmxhcChtaXhfYXR0cnMsIGhvdF9hdHRycykgfHwgc3VtbWFyaXplZF9v bmx5OworCWJtc19mcmVlKGhvdF9hdHRycyk7CQkvKiBubyBuZWVkIHRvIGZyZWUgaWR4X2F0 dHJzICovCisJYm1zX2ZyZWUoc3VtX2F0dHJzKTsKKworCS8qCisJICogSWYgd2UncmUgbm90 IHVwZGF0aW5nIGFueSAia2V5IiBhdHRyaWJ1dGVzLCB3ZSBjYW4gZ3JhYiBhIHdlYWtlciBs b2NrCisJICogdHlwZS4gVGhpcyBhbGxvd3MgZm9yIG1vcmUgY29uY3VycmVuY3kgd2hlbiB3 ZSBhcmUgcnVubmluZworCSAqIHNpbXVsdGFuZW91c2x5IHdpdGggZm9yZWlnbiBrZXkgY2hl Y2tzLgorCSAqLworCWlmIChibXNfb3ZlcmxhcChtaXhfYXR0cnMsIGtleV9hdHRycykpCisJ CWxvY2ttb2RlID0gTG9ja1R1cGxlRXhjbHVzaXZlOworCWVsc2UKKwkJbG9ja21vZGUgPSBM b2NrVHVwbGVOb0tleUV4Y2x1c2l2ZTsKKwlibXNfZnJlZShrZXlfYXR0cnMpOworCisJcmVz dWx0ID0gaGVhcF91cGRhdGUocmVsYXRpb24sICZvbGR0dXAsIHR1cGxlLCBHZXRDdXJyZW50 Q29tbWFuZElkKHRydWUpLAorCQkJCQkJIEludmFsaWRTbmFwc2hvdCwgdHJ1ZSAvKiB3YWl0 IGZvciBjb21taXQgKi8gLAorCQkJCQkJICZ0bWZkLCAmbG9ja21vZGUsIGJ1ZmZlciwgcGFn ZSwgYmxvY2ssIGxwLCBob3RfYWxsb3dlZCwKKwkJCQkJCSAmdm1idWZmZXIsIHJlcF9pZF9r ZXlfcmVxdWlyZWQpOworCisJKnVwZGF0ZV9pbmRleGVzID0gVFVfTm9uZTsKIAotCXJlc3Vs dCA9IGhlYXBfdXBkYXRlKHJlbGF0aW9uLCBvdGlkLCB0dXAsCi0JCQkJCQkgR2V0Q3VycmVu dENvbW1hbmRJZCh0cnVlKSwgSW52YWxpZFNuYXBzaG90LAotCQkJCQkJIHRydWUgLyogd2Fp dCBmb3IgY29tbWl0ICovICwKLQkJCQkJCSAmdG1mZCwgJmxvY2ttb2RlLCB1cGRhdGVfaW5k ZXhlcyk7CiAJc3dpdGNoIChyZXN1bHQpCiAJewogCQljYXNlIFRNX1NlbGZNb2RpZmllZDoK QEAgLTQ1NzIsNiArNDUyMSwxMCBAQCBzaW1wbGVfaGVhcF91cGRhdGUoUmVsYXRpb24gcmVs YXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIHR1cAogCiAJ CWNhc2UgVE1fT2s6CiAJCQkvKiBkb25lIHN1Y2Nlc3NmdWxseSAqLworCQkJaWYgKCFIZWFw VHVwbGVJc0hlYXBPbmx5KHR1cGxlKSkKKwkJCQkqdXBkYXRlX2luZGV4ZXMgPSBUVV9BbGw7 CisJCQllbHNlIGlmIChzdW1tYXJpemVkX29ubHkpCisJCQkJKnVwZGF0ZV9pbmRleGVzID0g VFVfU3VtbWFyaXppbmc7CiAJCQlicmVhazsKIAogCQljYXNlIFRNX1VwZGF0ZWQ6CkBAIC00 NTg2LDggKzQ1MzksOSBAQCBzaW1wbGVfaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24s IGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIHR1cAogCQkJZWxvZyhF UlJPUiwgInVucmVjb2duaXplZCBoZWFwX3VwZGF0ZSBzdGF0dXM6ICV1IiwgcmVzdWx0KTsK IAkJCWJyZWFrOwogCX0KLX0KIAorCXJldHVybiBtaXhfYXR0cnM7Cit9CiAKIC8qCiAgKiBS ZXR1cm4gdGhlIE11bHRpWGFjdFN0YXR1cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiB0 dXBsZSBsb2NrIG1vZGUuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYwppbmRleCBjYmVmNzNlNWQ0Yi4uYTIzY2I5M2NhYzkgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtNDQsNyArNDQsOSBAQAogI2luY2x1 ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zbWdyLmgiCiAj aW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25f cG9pbnQuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWxj YWNoZS5oIgogCiBzdGF0aWMgdm9pZCByZWZvcm1fYW5kX3Jld3JpdGVfdHVwbGUoSGVhcFR1 cGxlIHR1cGxlLAogCQkJCQkJCQkJIFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hl YXAsCkBAIC0zMTIsMjMgKzMxNCwxNzcgQEAgaGVhcGFtX3R1cGxlX2RlbGV0ZShSZWxhdGlv biByZWxhdGlvbiwgSXRlbVBvaW50ZXIgdGlkLCBDb21tYW5kSWQgY2lkLAogCXJldHVybiBo ZWFwX2RlbGV0ZShyZWxhdGlvbiwgdGlkLCBjaWQsIGNyb3NzY2hlY2ssIHdhaXQsIHRtZmQs IGNoYW5naW5nUGFydCk7CiB9CiAKLQogc3RhdGljIFRNX1Jlc3VsdAogaGVhcGFtX3R1cGxl X3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50ZXIgb3RpZCwgVHVwbGVUYWJs ZVNsb3QgKnNsb3QsCi0JCQkJCUNvbW1hbmRJZCBjaWQsIFNuYXBzaG90IHNuYXBzaG90LCBT bmFwc2hvdCBjcm9zc2NoZWNrLAotCQkJCQlib29sIHdhaXQsIFRNX0ZhaWx1cmVEYXRhICp0 bWZkLAotCQkJCQlMb2NrVHVwbGVNb2RlICpsb2NrbW9kZSwgVFVfVXBkYXRlSW5kZXhlcyAq dXBkYXRlX2luZGV4ZXMpCisJCQkJCUNvbW1hbmRJZCBjaWQsIFNuYXBzaG90IHNuYXBzaG90 LAorCQkJCQlTbmFwc2hvdCBjcm9zc2NoZWNrLCBib29sIHdhaXQsCisJCQkJCVRNX0ZhaWx1 cmVEYXRhICp0bWZkLAorCQkJCQlMb2NrVHVwbGVNb2RlICpsb2NrbW9kZSwKKwkJCQkJY29u c3QgQml0bWFwc2V0ICptaXhfYXR0cnMsCisJCQkJCVRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0 ZV9pbmRleGVzKQogewotCWJvb2wJCXNob3VsZEZyZWUgPSB0cnVlOwotCUhlYXBUdXBsZQl0 dXBsZSA9IEV4ZWNGZXRjaFNsb3RIZWFwVHVwbGUoc2xvdCwgdHJ1ZSwgJnNob3VsZEZyZWUp OworCWJvb2wJCXJlcF9pZF9rZXlfcmVxdWlyZWQ7CisJYm9vbAkJaG90X2FsbG93ZWQ7CisJ Ym9vbAkJc3VtbWFyaXplZF9vbmx5OworCWJvb2wJCXNob3VsZEZyZWUgPSBmYWxzZTsKKwlI ZWFwVHVwbGUJdHVwbGU7CisJSGVhcFR1cGxlRGF0YSBvbGR0dXA7CisJQnVmZmVyCQlidWZm ZXI7CisJQnVmZmVyCQl2bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CisJUGFnZQkJcGFnZTsK KwlCbG9ja051bWJlciBibG9jazsKKwlJdGVtSWQJCWxwOworCUJpdG1hcHNldCAgKmhvdF9h dHRycywKKwkJCSAgICpzdW1fYXR0cnMsCisJCQkgICAqa2V5X2F0dHJzLAorCQkJICAgKnJp ZF9hdHRycywKKwkJCSAgICppZHhfYXR0cnM7CiAJVE1fUmVzdWx0CXJlc3VsdDsKIAorCUFz c2VydChJdGVtUG9pbnRlcklzVmFsaWQob3RpZCkpOworCisJdHVwbGUgPSBFeGVjRmV0Y2hT bG90SGVhcFR1cGxlKHNsb3QsIHRydWUsICZzaG91bGRGcmVlKTsKKworCS8qIENoZWFwLCBz aW1wbGlzdGljIGNoZWNrIHRoYXQgdGhlIHR1cGxlIG1hdGNoZXMgdGhlIHJlbCdzIHJvd3R5 cGUuICovCisJQXNzZXJ0KEhlYXBUdXBsZUhlYWRlckdldE5hdHRzKHR1cGxlLT50X2RhdGEp IDw9CisJCSAgIFJlbGF0aW9uR2V0TnVtYmVyT2ZBdHRyaWJ1dGVzKHJlbGF0aW9uKSk7CisK KwkvKgorCSAqIEZvcmJpZCB0aGlzIGR1cmluZyBhIHBhcmFsbGVsIG9wZXJhdGlvbiwgbGVz dCBpdCBhbGxvY2F0ZSBhIGNvbWJvIENJRC4KKwkgKiBPdGhlciB3b3JrZXJzIG1pZ2h0IG5l ZWQgdGhhdCBjb21ibyBDSUQgZm9yIHZpc2liaWxpdHkgY2hlY2tzLCBhbmQgd2UKKwkgKiBo YXZlIG5vIHByb3Zpc2lvbiBmb3IgYnJvYWRjYXN0aW5nIGl0IHRvIHRoZW0uCisJICovCisJ aWYgKElzSW5QYXJhbGxlbE1vZGUoKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfVFJBTlNBQ1RJT05fU1RBVEUpLAorCQkJCSBlcnJtc2coImNh bm5vdCB1cGRhdGUgdHVwbGVzIGR1cmluZyBhIHBhcmFsbGVsIG9wZXJhdGlvbiIpKSk7CisK KyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJY2hlY2tfbG9ja19pZl9pbnBsYWNlX3Vw ZGF0ZWFibGVfcmVsKHJlbGF0aW9uLCBvdGlkLCB0dXBsZSk7CisjZW5kaWYKKworCWJsb2Nr ID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcihvdGlkKTsKKwlJTkpFQ1RJT05fUE9JTlQo ImhlYXBfdXBkYXRlLWJlZm9yZS1waW4iLCBOVUxMKTsKKwlidWZmZXIgPSBSZWFkQnVmZmVy KHJlbGF0aW9uLCBibG9jayk7CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKKwor CS8qCisJICogQmVmb3JlIGxvY2tpbmcgdGhlIGJ1ZmZlciwgcGluIHRoZSB2aXNpYmlsaXR5 IG1hcCBwYWdlIGlmIGl0IGFwcGVhcnMgdG8KKwkgKiBiZSBuZWNlc3NhcnkuICBTaW5jZSB3 ZSBoYXZlbid0IGdvdCB0aGUgbG9jayB5ZXQsIHNvbWVvbmUgZWxzZSBtaWdodCBiZQorCSAq IGluIHRoZSBtaWRkbGUgb2YgY2hhbmdpbmcgdGhpcywgc28gd2UnbGwgbmVlZCB0byByZWNo ZWNrIGFmdGVyIHdlIGhhdmUKKwkgKiB0aGUgbG9jay4KKwkgKi8KKwlpZiAoUGFnZUlzQWxs VmlzaWJsZShwYWdlKSkKKwkJdmlzaWJpbGl0eW1hcF9waW4ocmVsYXRpb24sIGJsb2NrLCAm dm1idWZmZXIpOworCisJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lW RSk7CisKKwlscCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgSXRlbVBvaW50ZXJHZXRPZmZzZXRO dW1iZXIob3RpZCkpOworCisJQXNzZXJ0KEl0ZW1JZElzTm9ybWFsKGxwKSk7CisKKwlvbGR0 dXAudF90YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOworCW9sZHR1cC50 X2RhdGEgPSAoSGVhcFR1cGxlSGVhZGVyKSBQYWdlR2V0SXRlbShwYWdlLCBscCk7CisJb2xk dHVwLnRfbGVuID0gSXRlbUlkR2V0TGVuZ3RoKGxwKTsKKwlvbGR0dXAudF9zZWxmID0gKm90 aWQ7CisKKwkvKgorCSAqIFdlJ2xsIG5lZWQgdG8gaW5jbHVkZSB0aGUgcmVwbGljYSBpZGVu dGl0eSBrZXkgd2hlbiBlaXRoZXIgdGhlIGlkZW50aXR5CisJICoga2V5IGF0dHJpYnV0ZXMg b3ZlcmxhcCB3aXRoIHRoZSBtb2RpZmllZCBpbmRleCBhdHRyaWJ1dGVzIG9yIHdoZW4gdGhl CisJICogcmVwbGljYSBpZGVudGl0eSBhdHRyaWJ1dGVzIGFyZSBzdG9yZWQgZXh0ZXJuYWxs eS4gIFRoaXMgaXMgcmVxdWlyZWQKKwkgKiBiZWNhdXNlIGZvciBzdWNoIGF0dHJpYnV0ZXMg dGhlIGZsYXR0ZW5lZCB2YWx1ZSB3b24ndCBiZSBXQUwgbG9nZ2VkIGFzCisJICogcGFydCBv ZiB0aGUgbmV3IHR1cGxlIHNvIHdlIG11c3QgZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gZXh0 cmFjdCBhbmQKKwkgKiBpbmNsdWRlIHRoZW0gYXMgcGFydCBvZiB0aGUgb2xkX2tleV90dXBs ZSAoc2VlIEV4dHJhY3RSZXBsaWNhSWRlbnRpdHkpLgorCSAqLworCWlkeF9hdHRycyA9IFJl bGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLAorCQkJCQkJCQkJCSAgIElOREVY X0FUVFJfQklUTUFQX0lOREVYRUQpOworCXJpZF9hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhB dHRyQml0bWFwKHJlbGF0aW9uLAorCQkJCQkJCQkJCSAgIElOREVYX0FUVFJfQklUTUFQX0lE RU5USVRZX0tFWSk7CisKKwlyZXBfaWRfa2V5X3JlcXVpcmVkID0gYm1zX292ZXJsYXAobWl4 X2F0dHJzLCByaWRfYXR0cnMpOworCWlmICghcmVwX2lkX2tleV9yZXF1aXJlZCkKKwl7CisJ CUJpdG1hcHNldCAgKmF0dHJzOworCQlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0 RGVzY3IocmVsYXRpb24pOworCQlpbnQJCQlhdHRpZHggPSAtMTsKKworCQkvKgorCQkgKiBX ZSBkb24ndCBvd24gaWR4X2F0dHJzIHNvIHdlJ2xsIGNvcHkgaXQgYW5kIHJlbW92ZSB0aGUg bW9kaWZpZWQgc2V0CisJCSAqIHRvIHJlZHVjZSB0aGUgYXR0cmlidXRlcyB3ZSBuZWVkIHRv IHRlc3QgaW4gdGhlIHdoaWxlIGxvb3AgYW5kCisJCSAqIGF2b2lkIGEgdHdvIGJyYW5jaGVz IGluIHRoZSBsb29wLgorCQkgKi8KKwkJYXR0cnMgPSBibXNfZGlmZmVyZW5jZShpZHhfYXR0 cnMsIG1peF9hdHRycyk7CisJCWF0dHJzID0gYm1zX2ludF9tZW1iZXJzKGF0dHJzLCByaWRf YXR0cnMpOworCisJCXdoaWxlICgoYXR0aWR4ID0gYm1zX25leHRfbWVtYmVyKGF0dHJzLCBh dHRpZHgpKSA+PSAwKQorCQl7CisJCQkvKgorCQkJICogYXR0aWR4IGlzIHplcm8tYmFzZWQs IGF0dHJudW0gaXMgdGhlIG5vcm1hbCBhdHRyaWJ1dGUgbnVtYmVyCisJCQkgKi8KKwkJCUF0 dHJOdW1iZXIJYXR0cm51bSA9IGF0dGlkeCArIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1 dGVOdW1iZXI7CisJCQlEYXR1bQkJdmFsdWU7CisJCQlib29sCQlpc251bGw7CisKKwkJCS8q CisJCQkgKiBTeXN0ZW0gYXR0cmlidXRlcyBhcmUgbm90IGFkZGVkIGludG8gaW50ZXJlc3Rp bmdfYXR0cnMgaW4KKwkJCSAqIHJlbGNhY2hlCisJCQkgKi8KKwkJCUFzc2VydChhdHRybnVt ID4gMCk7CisKKwkJCXZhbHVlID0gaGVhcF9nZXRhdHRyKCZvbGR0dXAsIGF0dHJudW0sIHR1 cGRlc2MsICZpc251bGwpOworCisJCQkvKiBObyBuZWVkIHRvIGNoZWNrIGF0dHJpYnV0ZXMg dGhhdCBjYW4ndCBiZSBzdG9yZWQgZXh0ZXJuYWxseSAqLworCQkJaWYgKGlzbnVsbCB8fAor CQkJCVR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGRlc2MsIGF0dHJudW0gLSAxKS0+YXR0bGVu ICE9IC0xKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBDaGVjayBpZiB0aGUgb2xkIHR1cGxl J3MgYXR0cmlidXRlIGlzIHN0b3JlZCBleHRlcm5hbGx5ICovCisJCQlpZiAoVkFSQVRUX0lT X0VYVEVSTkFMKChzdHJ1Y3QgdmFybGVuYSAqKSBEYXR1bUdldFBvaW50ZXIodmFsdWUpKSkK KwkJCXsKKwkJCQlyZXBfaWRfa2V5X3JlcXVpcmVkID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJ CX0KKwkJfQorCisJCWJtc19mcmVlKGF0dHJzKTsKKwl9CisJYm1zX2ZyZWUocmlkX2F0dHJz KTsKKwogCS8qIFVwZGF0ZSB0aGUgdHVwbGUgd2l0aCB0YWJsZSBvaWQgKi8KIAlzbG90LT50 dHNfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKIAl0dXBsZS0+dF90 YWJsZU9pZCA9IHNsb3QtPnR0c190YWJsZU9pZDsKIAotCXJlc3VsdCA9IGhlYXBfdXBkYXRl KHJlbGF0aW9uLCBvdGlkLCB0dXBsZSwgY2lkLCBjcm9zc2NoZWNrLCB3YWl0LAotCQkJCQkJ IHRtZmQsIGxvY2ttb2RlLCB1cGRhdGVfaW5kZXhlcyk7CisJLyoKKwkgKiBIT1QgdXBkYXRl cyBhcmUgcG9zc2libGUgd2hlbiBlaXRoZXI6IGEpIHRoZXJlIGFyZSBubyBtb2RpZmllZCBp bmRleGVkCisJICogYXR0cmlidXRlcywgb3IgYikgdGhlIG1vZGlmaWVkIGF0dHJpYnV0ZXMg YXJlIGFsbCBvbiBzdW1tYXJpemluZworCSAqIGluZGV4ZXMuCisJICovCisJc3VtX2F0dHJz ID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24sCisJCQkJCQkJCQkJICAg SU5ERVhfQVRUUl9CSVRNQVBfU1VNTUFSSVpFRCk7CisJaG90X2F0dHJzID0gYm1zX2RlbF9t ZW1iZXJzKGlkeF9hdHRycywgc3VtX2F0dHJzKTsKKwlzdW1tYXJpemVkX29ubHkgPSAhYm1z X2lzX2VtcHR5KG1peF9hdHRycykgJiYgYm1zX2lzX3N1YnNldChtaXhfYXR0cnMsIHN1bV9h dHRycyk7CisJaG90X2FsbG93ZWQgPSAhYm1zX292ZXJsYXAobWl4X2F0dHJzLCBob3RfYXR0 cnMpIHx8IHN1bW1hcml6ZWRfb25seTsKKwlibXNfZnJlZShob3RfYXR0cnMpOwkJLyogbm8g bmVlZCB0byBmcmVlIGlkeF9hdHRycyAqLworCWJtc19mcmVlKHN1bV9hdHRycyk7CisKKwkv KgorCSAqIElmIHdlJ3JlIG5vdCB1cGRhdGluZyBhbnkgImtleSIgYXR0cmlidXRlcywgd2Ug Y2FuIGdyYWIgYSB3ZWFrZXIgbG9jaworCSAqIHR5cGUuIFRoaXMgYWxsb3dzIGZvciBtb3Jl IGNvbmN1cnJlbmN5IHdoZW4gd2UgYXJlIHJ1bm5pbmcKKwkgKiBzaW11bHRhbmVvdXNseSB3 aXRoIGZvcmVpZ24ga2V5IGNoZWNrcy4KKwkgKi8KKwlrZXlfYXR0cnMgPSBSZWxhdGlvbkdl dEluZGV4QXR0ckJpdG1hcChyZWxhdGlvbiwKKwkJCQkJCQkJCQkgICBJTkRFWF9BVFRSX0JJ VE1BUF9LRVkpOworCWlmIChibXNfb3ZlcmxhcChtaXhfYXR0cnMsIGtleV9hdHRycykpCisJ CSpsb2NrbW9kZSA9IExvY2tUdXBsZUV4Y2x1c2l2ZTsKKwllbHNlCisJCSpsb2NrbW9kZSA9 IExvY2tUdXBsZU5vS2V5RXhjbHVzaXZlOworCWJtc19mcmVlKGtleV9hdHRycyk7CisKKwly ZXN1bHQgPSBoZWFwX3VwZGF0ZShyZWxhdGlvbiwgJm9sZHR1cCwgdHVwbGUsIGNpZCwgY3Jv c3NjaGVjaywgd2FpdCwgdG1mZCwKKwkJCQkJCSBsb2NrbW9kZSwgYnVmZmVyLCBwYWdlLCBi bG9jaywgbHAsIGhvdF9hbGxvd2VkLAorCQkJCQkJICZ2bWJ1ZmZlciwgcmVwX2lkX2tleV9y ZXF1aXJlZCk7CisKKwogCUl0ZW1Qb2ludGVyQ29weSgmdHVwbGUtPnRfc2VsZiwgJnNsb3Qt PnR0c190aWQpOwogCiAJLyoKQEAgLTM0MiwxNSArNDk4LDEzIEBAIGhlYXBhbV90dXBsZV91 cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVyIG90aWQsIFR1cGxlVGFibGVT bG90ICpzbG90LAogCSAqIHVwZGF0ZSBvbmx5IHN1bW1hcml6ZWQgaW5kZXhlcywgb3Igbm9u ZSBhdCBhbGwuCiAJICovCiAJaWYgKHJlc3VsdCAhPSBUTV9PaykKLQl7Ci0JCUFzc2VydCgq dXBkYXRlX2luZGV4ZXMgPT0gVFVfTm9uZSk7CiAJCSp1cGRhdGVfaW5kZXhlcyA9IFRVX05v bmU7Ci0JfQogCWVsc2UgaWYgKCFIZWFwVHVwbGVJc0hlYXBPbmx5KHR1cGxlKSkKLQkJQXNz ZXJ0KCp1cGRhdGVfaW5kZXhlcyA9PSBUVV9BbGwpOworCQkqdXBkYXRlX2luZGV4ZXMgPSBU VV9BbGw7CisJZWxzZSBpZiAoc3VtbWFyaXplZF9vbmx5KQorCQkqdXBkYXRlX2luZGV4ZXMg PSBUVV9TdW1tYXJpemluZzsKIAllbHNlCi0JCUFzc2VydCgoKnVwZGF0ZV9pbmRleGVzID09 IFRVX1N1bW1hcml6aW5nKSB8fAotCQkJICAgKCp1cGRhdGVfaW5kZXhlcyA9PSBUVV9Ob25l KSk7CisJCSp1cGRhdGVfaW5kZXhlcyA9IFRVX05vbmU7CiAKIAlpZiAoc2hvdWxkRnJlZSkK IAkJcGZyZWUodHVwbGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxl L3RhYmxlYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKaW5kZXgg ZGZkYTFhZjQxMmUuLjQyYWNkNWIxN2E5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvdGFibGUvdGFibGVhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJs ZWFtLmMKQEAgLTM1OSw2ICszNTksNyBAQCB2b2lkCiBzaW1wbGVfdGFibGVfdHVwbGVfdXBk YXRlKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgb3RpZCwKIAkJCQkJCSAgVHVwbGVUYWJs ZVNsb3QgKnNsb3QsCiAJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LAorCQkJCQkJICBjb25z dCBCaXRtYXBzZXQgKm1peF9hdHRycywKIAkJCQkJCSAgVFVfVXBkYXRlSW5kZXhlcyAqdXBk YXRlX2luZGV4ZXMpCiB7CiAJVE1fUmVzdWx0CXJlc3VsdDsKQEAgLTM2OSw3ICszNzAsOSBA QCBzaW1wbGVfdGFibGVfdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIg b3RpZCwKIAkJCQkJCQkJR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKSwKIAkJCQkJCQkJc25h cHNob3QsIEludmFsaWRTbmFwc2hvdCwKIAkJCQkJCQkJdHJ1ZSAvKiB3YWl0IGZvciBjb21t aXQgKi8gLAotCQkJCQkJCQkmdG1mZCwgJmxvY2ttb2RlLCB1cGRhdGVfaW5kZXhlcyk7CisJ CQkJCQkJCSZ0bWZkLCAmbG9ja21vZGUsCisJCQkJCQkJCW1peF9hdHRycywKKwkJCQkJCQkJ dXBkYXRlX2luZGV4ZXMpOwogCiAJc3dpdGNoIChyZXN1bHQpCiAJewpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleGluZy5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9p bmRleGluZy5jCmluZGV4IDBhMWE2OGUwNjQ0Li42OTBhMjUxMTAyMyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFs b2cvaW5kZXhpbmcuYwpAQCAtMTAyLDcgKzEwMiw3IEBAIENhdGFsb2dJbmRleEluc2VydChD YXRhbG9nSW5kZXhTdGF0ZSBpbmRzdGF0ZSwgSGVhcFR1cGxlIGhlYXBUdXBsZSwKIAkgKiBH ZXQgaW5mb3JtYXRpb24gZnJvbSB0aGUgc3RhdGUgc3RydWN0dXJlLiAgRmFsbCBvdXQgaWYg bm90aGluZyB0byBkby4KIAkgKi8KIAludW1JbmRleGVzID0gaW5kc3RhdGUtPnJpX051bUlu ZGljZXM7Ci0JaWYgKG51bUluZGV4ZXMgPT0gMCkKKwlpZiAobnVtSW5kZXhlcyA9PSAwIHx8 IHVwZGF0ZUluZGV4ZXMgPT0gVFVfTm9uZSkKIAkJcmV0dXJuOwogCXJlbGF0aW9uRGVzY3Mg PSBpbmRzdGF0ZS0+cmlfSW5kZXhSZWxhdGlvbkRlc2NzOwogCWluZGV4SW5mb0FycmF5ID0g aW5kc3RhdGUtPnJpX0luZGV4UmVsYXRpb25JbmZvOwpAQCAtMzE0LDE1ICszMTQsMTggQEAg Q2F0YWxvZ1R1cGxlVXBkYXRlKFJlbGF0aW9uIGhlYXBSZWwsIGNvbnN0IEl0ZW1Qb2ludGVy RGF0YSAqb3RpZCwgSGVhcFR1cGxlIHR1cCkKIHsKIAlDYXRhbG9nSW5kZXhTdGF0ZSBpbmRz dGF0ZTsKIAlUVV9VcGRhdGVJbmRleGVzIHVwZGF0ZUluZGV4ZXMgPSBUVV9BbGw7CisJQml0 bWFwc2V0ICAqdXBkYXRlZEF0dHJzOwogCiAJQ2F0YWxvZ1R1cGxlQ2hlY2tDb25zdHJhaW50 cyhoZWFwUmVsLCB0dXApOwogCiAJaW5kc3RhdGUgPSBDYXRhbG9nT3BlbkluZGV4ZXMoaGVh cFJlbCk7CiAKLQlzaW1wbGVfaGVhcF91cGRhdGUoaGVhcFJlbCwgb3RpZCwgdHVwLCAmdXBk YXRlSW5kZXhlcyk7Ci0KKwl1cGRhdGVkQXR0cnMgPSBzaW1wbGVfaGVhcF91cGRhdGUoaGVh cFJlbCwgb3RpZCwgdHVwLCAmdXBkYXRlSW5kZXhlcyk7CisJKChSZXN1bHRSZWxJbmZvICop IGluZHN0YXRlKS0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xzID0gdXBkYXRlZEF0dHJzOwogCUNh dGFsb2dJbmRleEluc2VydChpbmRzdGF0ZSwgdHVwLCB1cGRhdGVJbmRleGVzKTsKKwogCUNh dGFsb2dDbG9zZUluZGV4ZXMoaW5kc3RhdGUpOworCWJtc19mcmVlKHVwZGF0ZWRBdHRycyk7 CiB9CiAKIC8qCkBAIC0zMzgsMTIgKzM0MSwxNSBAQCBDYXRhbG9nVHVwbGVVcGRhdGVXaXRo SW5mbyhSZWxhdGlvbiBoZWFwUmVsLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsIEhl YXBUdQogCQkJCQkJICAgQ2F0YWxvZ0luZGV4U3RhdGUgaW5kc3RhdGUpCiB7CiAJVFVfVXBk YXRlSW5kZXhlcyB1cGRhdGVJbmRleGVzID0gVFVfQWxsOworCUJpdG1hcHNldCAgKnVwZGF0 ZWRBdHRyczsKIAogCUNhdGFsb2dUdXBsZUNoZWNrQ29uc3RyYWludHMoaGVhcFJlbCwgdHVw KTsKIAotCXNpbXBsZV9oZWFwX3VwZGF0ZShoZWFwUmVsLCBvdGlkLCB0dXAsICZ1cGRhdGVJ bmRleGVzKTsKLQorCXVwZGF0ZWRBdHRycyA9IHNpbXBsZV9oZWFwX3VwZGF0ZShoZWFwUmVs LCBvdGlkLCB0dXAsICZ1cGRhdGVJbmRleGVzKTsKKwkoKFJlc3VsdFJlbEluZm8gKikgaW5k c3RhdGUpLT5yaV9DaGFuZ2VkSW5kZXhlZENvbHMgPSB1cGRhdGVkQXR0cnM7CiAJQ2F0YWxv Z0luZGV4SW5zZXJ0KGluZHN0YXRlLCB0dXAsIHVwZGF0ZUluZGV4ZXMpOworCSgoUmVzdWx0 UmVsSW5mbyAqKSBpbmRzdGF0ZSktPnJpX0NoYW5nZWRJbmRleGVkQ29scyA9IE5VTEw7CisJ Ym1zX2ZyZWUodXBkYXRlZEF0dHJzKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFp bi5jCmluZGV4IGJmZDNlYmM2MDFlLi5jZDdhZTRhZWVjMiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjTWFpbi5jCkBAIC0xMjg2LDYgKzEyODYsNyBAQCBJbml0UmVzdWx0UmVsSW5mbyhSZXN1 bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCS8qIFRoZSBmb2xsb3dpbmcgZmllbGRzIGFy ZSBzZXQgbGF0ZXIgaWYgbmVlZGVkICovCiAJcmVzdWx0UmVsSW5mby0+cmlfUm93SWRBdHRO byA9IDA7CiAJcmVzdWx0UmVsSW5mby0+cmlfZXh0cmFVcGRhdGVkQ29scyA9IE5VTEw7CisJ cmVzdWx0UmVsSW5mby0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xzID0gTlVMTDsKIAlyZXN1bHRS ZWxJbmZvLT5yaV9wcm9qZWN0TmV3ID0gTlVMTDsKIAlyZXN1bHRSZWxJbmZvLT5yaV9uZXdU dXBsZVNsb3QgPSBOVUxMOwogCXJlc3VsdFJlbEluZm8tPnJpX29sZFR1cGxlU2xvdCA9IE5V TEw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24u YyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCmluZGV4IDc0M2Ix ZWUyYjI4Li43MDQwYTY5YzI3NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY1JlcGxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxp Y2F0aW9uLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5o IgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5o IgorI2luY2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcG1n ci5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvdHlw Y2FjaGUuaCIKQEAgLTkzNyw3ICs5MzgsMTMgQEAgRXhlY1NpbXBsZVJlbGF0aW9uVXBkYXRl KFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJCWlmIChyZWwtPnJkX3JlbC0+cmVs aXNwYXJ0aXRpb24pCiAJCQlFeGVjUGFydGl0aW9uQ2hlY2socmVzdWx0UmVsSW5mbywgc2xv dCwgZXN0YXRlLCB0cnVlKTsKIAorCQkvKgorCQkgKiBXZSdyZSBub3QgZ29pbmcgdG8gY2Fs bCBFeGVjQ2hlY2tJbmRleGVkQXR0cnNGb3JDaGFuZ2VzIGhlcmUKKwkJICogYmVjYXVzZSB3 ZSd2ZSBhbHJlYWR5IGlkZW50aWZpZWQgdGhlIGNoYW5nZXMgZWFybGllciBvbiB0aGFua3Mg dG8KKwkJICogc2xvdF9tb2RpZnlfZGF0YS4KKwkJICovCiAJCXNpbXBsZV90YWJsZV90dXBs ZV91cGRhdGUocmVsLCB0aWQsIHNsb3QsIGVzdGF0ZS0+ZXNfc25hcHNob3QsCisJCQkJCQkJ CSAgcmVzdWx0UmVsSW5mby0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xzLAogCQkJCQkJCQkgICZ1 cGRhdGVfaW5kZXhlcyk7CiAKIAkJY29uZmxpY3RpbmRleGVzID0gcmVzdWx0UmVsSW5mby0+ cmlfb25Db25mbGljdEFyYml0ZXJJbmRleGVzOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl TW9kaWZ5VGFibGUuYwppbmRleCA2ODAyZmMxM2U5NS4uZDA5OWVjNzkzNzUgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCisrKyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCkBAIC0xNyw2ICsxNyw3IEBACiAg KgkJRXhlY01vZGlmeVRhYmxlCQktIHJldHJpZXZlIHRoZSBuZXh0IHR1cGxlIGZyb20gdGhl IG5vZGUKICAqCQlFeGVjRW5kTW9kaWZ5VGFibGUJLSBzaHV0IGRvd24gdGhlIE1vZGlmeVRh YmxlIG5vZGUKICAqCQlFeGVjUmVTY2FuTW9kaWZ5VGFibGUgLSByZXNjYW4gdGhlIE1vZGlm eVRhYmxlIG5vZGUKKyAqCQlFeGVjQ2hlY2tJbmRleGVkQXR0cnNGb3JDaGFuZ2VzIC0gZmlu ZCBzZXQgb2YgdXBkYXRlZCBpbmRleGVkIGNvbHVtbnMKICAqCiAgKgkgTk9URVMKICAqCQlU aGUgTW9kaWZ5VGFibGUgbm9kZSByZWNlaXZlcyBpbnB1dCBmcm9tIGl0cyBvdXRlclBsYW4s IHdoaWNoIGlzCkBAIC01NCw2ICs1NSw3IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9k ZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKKyNpbmNsdWRlICJhY2Nl c3MvdHVwZGVzYy5oIgogI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCiAjaW5jbHVkZSAiY29t bWFuZHMvdHJpZ2dlci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCIK QEAgLTE4OCw2ICsxOTAsMTMxIEBAIHN0YXRpYyBUdXBsZVRhYmxlU2xvdCAqRXhlY01lcmdl Tm90TWF0Y2hlZChNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsCiAJCQkJCQkJCQkJICAg UmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKIAkJCQkJCQkJCQkgICBib29sIGNhblNl dFRhZyk7CiAKKy8qCisgKiBFeGVjQ2hlY2tJbmRleGVkQXR0cnNGb3JDaGFuZ2VzCisgKgor ICogRGV0ZXJtaW5lIHdoaWNoIGluZGV4ZXMgbmVlZCB1cGRhdGluZyBieSBmaW5kaW5nIHRo ZSBzZXQgb2YgbW9kaWZpZWQgaW5kZXhlZAorICogYXR0cmlidXRlcy4KKyAqCisgKiBUaGUg Z29hbCBpcyBmb3IgdGhlIGV4ZWN1dG9yIHRvIGtub3csIGFoZWFkIG9mIGNhbGxpbmcgaW50 byB0aGUgdGFibGUgQU0gdG8KKyAqIHByb2Nlc3MgdGhlIHVwZGF0ZSBhbmQgYmVmb3JlIGNh bGxpbmcgaW50byB0aGUgaW5kZXggQU0gZm9yIGluc2VydGluZyBuZXcKKyAqIGluZGV4IHR1 cGxlcywgd2hpY2ggYXR0cmlidXRlcyBpbiB0aGUgbmV3IFR1cGxlVGFibGVTbG90LCBpZiBh bnksIHRydWVseQorICogbmVjZXNzaXRhdGUgYSBuZXcgaW5kZXggdHVwbGUuCisgKgorICog UmV0dXJucyBhIEJpdG1hcHNldCBvZiBhdHRyaWJ1dGVzIHRoYXQgaW50ZXJzZWN0cyB3aXRo IGluZGV4ZXMgd2hpY2ggcmVxdWlyZQorICogYSBuZXcgaW5kZXggdHVwbGUuCisgKi8KK0Jp dG1hcHNldCAqCitFeGVjQ2hlY2tJbmRleGVkQXR0cnNGb3JDaGFuZ2VzKFJlc3VsdFJlbElu Zm8gKnJlc3VsdFJlbEluZm8sCisJCQkJCQkJCVR1cGxlVGFibGVTbG90ICpvbGRfdHRzLAor CQkJCQkJCQlUdXBsZVRhYmxlU2xvdCAqbmV3X3R0cykKK3sKKwlpbnQJCQlhdHRpZHggPSAt MTsKKwlSZWxhdGlvbglyZWxhdGlvbiA9IHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVz YzsKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsYXRpb24pOwor CUJpdG1hcHNldCAgKmlkeF9hdHRyczsJCS8qIGludGVyZXN0aW5nIGF0dHJzICovCisJQml0 bWFwc2V0ICAqbWl4X2F0dHJzID0gTlVMTDsJLyogbW9kaWZpZWQsIGluZGV4ZWQgYXR0cmli dXRlcyAqLworCisJLyogSWYgbm8gaW5kZXhlcywgd2UncmUgZG9uZSAqLworCWlmIChyZXN1 bHRSZWxJbmZvLT5yaV9OdW1JbmRpY2VzID09IDApCisJCXJldHVybiBOVUxMOworCisJLyoK KwkgKiBGZXRjaCB0aGUgc2V0IG9mIGFsbCBhdHRyaWJ1dGVzIHJlZmVyZW5jZWQgYWNyb3Nz IGFsbCBpbmRleGVzIG9uIHRoZQorCSAqIHJlbGF0aW9uIGFzIHdlbGwgYXMgdGhlIHNldCBv ZiBhdHRyaWJ1dGVzIHJlZmVyZW5jZWQgaW4gZXhwcmVzc2lvbnMKKwkgKiB0aGF0IGdlbmVy YXRlIGF0dHJpYnV0ZXMuCisJICovCisJaWR4X2F0dHJzID0gUmVsYXRpb25HZXRJbmRleEF0 dHJCaXRtYXAocmVsYXRpb24sIElOREVYX0FUVFJfQklUTUFQX0lOREVYRUQpOworCisJLyog UmV2aWV3IGFsbCBhdHRyaWJ1dGVzIHJlZmVyZW5jZWQgaW4gaW5kZXhlcyBvbiB0aGlzIHJl bGF0aW9uICovCisJd2hpbGUgKChhdHRpZHggPSBibXNfbmV4dF9tZW1iZXIoaWR4X2F0dHJz LCBhdHRpZHgpKSA+PSAwKQorCXsKKwkJLyogYXR0aWR4IGlzIHplcm8tYmFzZWQsIGF0dG51 bSBpcyB0aGUgbm9ybWFsIGF0dHJpYnV0ZSBudW1iZXIgKi8KKwkJQXR0ck51bWJlcglhdHRu dW0gPSBhdHRpZHggKyBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyOworCQlE YXR1bQkJb2xkX3ZhbHVlLAorCQkJCQluZXdfdmFsdWU7CisJCWJvb2wJCW9sZF9udWxsLAor CQkJCQluZXdfbnVsbDsKKwkJQ29tcGFjdEF0dHJpYnV0ZSAqYXR0OworCisJCS8qCisJCSAq IElmIGl0J3MgYSB3aG9sZS10dXBsZSByZWZlcmVuY2UsIHNheSAibm90IGVxdWFsIi4gIEl0 J3Mgbm90IHJlYWxseQorCQkgKiB3b3J0aCBzdXBwb3J0aW5nIHRoaXMgY2FzZSwgc2luY2Ug aXQgY291bGQgb25seSBzdWNjZWVkIGFmdGVyIGEKKwkJICogbm8tb3AgdXBkYXRlLCB3aGlj aCBpcyBoYXJkbHkgYSBjYXNlIHdvcnRoIG9wdGltaXppbmcgZm9yLgorCQkgKi8KKwkJaWYg KGF0dG51bSA9PSAwKQorCQl7CisJCQltaXhfYXR0cnMgPSBibXNfYWRkX21lbWJlcihtaXhf YXR0cnMsIGF0dGlkeCk7CisKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogTGlr ZXdpc2UsIGF1dG9tYXRpY2FsbHkgc2F5ICJub3QgZXF1YWwiIGZvciBhbnkgc3lzdGVtIGF0 dHJpYnV0ZQorCQkgKiBvdGhlciB0aGFuIHRhYmxlT0lEOyB3ZSBjYW5ub3QgZXhwZWN0IHRo ZXNlIHRvIGJlIGNvbnNpc3RlbnQgaW4gYQorCQkgKiBIT1QgY2hhaW4sIG9yIGV2ZW4gdG8g YmUgc2V0IGNvcnJlY3RseSB5ZXQgaW4gdGhlIG5ldyB0dXBsZS4KKwkJICovCisJCWlmIChh dHRudW0gPCAwKQorCQl7CisJCQlpZiAoYXR0bnVtICE9IFRhYmxlT2lkQXR0cmlidXRlTnVt YmVyKQorCQkJCW1peF9hdHRycyA9IGJtc19hZGRfbWVtYmVyKG1peF9hdHRycywgYXR0aWR4 KTsKKworCQkJY29udGludWU7CisJCX0KKworCQkvKiBFeHRyYWN0IHRoZSBjb3JyZXNwb25k aW5nIHZhbHVlcyAqLworCQlhdHQgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBkZXNjLCBh dHRudW0gLSAxKTsKKworCisJCS8qCisJCSAqIFNraXAgY2hlY2tpbmcgZ2VuZXJhdGVkIGNv bHVtbnMgYmVjYXVzZSBpZiBhbnkgb2YgdGhlIGJhc2UgY29sdW1ucworCQkgKiByZWZlcmVu Y2VkIGluIHRoZSBnZW5lcmF0aW9uIGV4cHJlc3Npb24gaGF2ZSBjaGFuZ2VkLiBJZiBub25l IGhhdmUKKwkJICogY2hhbmdlZCwgdGhlIGdlbmVyYXRlZCBjb2x1bW4gdmFsdWUgaXMgdW5j aGFuZ2VkLgorCQkgKi8KKwkJaWYgKGF0dC0+YXR0Z2VuZXJhdGVkKQorCQkJY29udGludWU7 CisKKwkJLyogRXh0cmFjdCB2YWx1ZXMgZnJvbSBib3RoIHNsb3RzIGZvciB0aGlzIGF0dHJp YnV0ZSAqLworCQlvbGRfdmFsdWUgPSBzbG90X2dldGF0dHIob2xkX3R0cywgYXR0bnVtLCAm b2xkX251bGwpOworCQluZXdfdmFsdWUgPSBzbG90X2dldGF0dHIobmV3X3R0cywgYXR0bnVt LCAmbmV3X251bGwpOworCisJCS8qIEEgY2hhbmdlIHRvL2Zyb20gTlVMTCwgc28gbm90IGVx dWFsICovCisJCWlmIChvbGRfbnVsbCAhPSBuZXdfbnVsbCkKKwkJeworCQkJbWl4X2F0dHJz ID0gYm1zX2FkZF9tZW1iZXIobWl4X2F0dHJzLCBhdHRpZHgpOworCQkJY29udGludWU7CisJ CX0KKworCQkvKiBCb3RoIE5VTEwsIG5vIGNoYW5nZS91bm1vZGlmaWVkICovCisJCWlmIChv bGRfbnVsbCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFdlIGRvIHNpbXBsZSBiaW5h cnkgY29tcGFyaXNvbiBvZiB0aGUgdHdvIGRhdHVtcy4gIFRoaXMgbWF5IGJlCisJCSAqIG92 ZXJseSBzdHJpY3QgYmVjYXVzZSB0aGVyZSBjYW4gYmUgbXVsdGlwbGUgYmluYXJ5IHJlcHJl c2VudGF0aW9ucworCQkgKiBmb3IgdGhlIHNhbWUgbG9naWNhbCB2YWx1ZS4gIEJ1dCB3ZSBz aG91bGQgYmUgT0sgYXMgbG9uZyBhcyB0aGVyZQorCQkgKiBhcmUgbm8gZmFsc2UgcG9zaXRp dmVzLiAgVXNpbmcgYSB0eXBlLXNwZWNpZmljIGVxdWFsaXR5IG9wZXJhdG9yIGlzCisJCSAq IG1lc3N5IGJlY2F1c2UgdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgbm90aW9ucyBvZiBlcXVh bGl0eSBpbgorCQkgKiBkaWZmZXJlbnQgb3BlcmF0b3IgY2xhc3NlczsgZnVydGhlcm1vcmUs IHdlIGNhbm5vdCBzYWZlbHkgaW52b2tlCisJCSAqIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMg d2hpbGUgaG9sZGluZyBleGNsdXNpdmUgYnVmZmVyIGxvY2suCisJCSAqLworCQlpZiAoYXR0 bnVtIDw9IDApCisJCXsKKwkJCS8qIFRoZSBvbmx5IGFsbG93ZWQgc3lzdGVtIGNvbHVtbnMg YXJlIE9JRHMsIHNvIGRvIHRoaXMgKi8KKwkJCWlmIChEYXR1bUdldE9iamVjdElkKG9sZF92 YWx1ZSkgIT0gRGF0dW1HZXRPYmplY3RJZChuZXdfdmFsdWUpKQorCQkJCW1peF9hdHRycyA9 IGJtc19hZGRfbWVtYmVyKG1peF9hdHRycywgYXR0aWR4KTsKKwkJfQorCQllbHNlCisJCXsK KwkJCWlmICghZGF0dW1faW1hZ2VfZXEob2xkX3ZhbHVlLCBuZXdfdmFsdWUsIGF0dC0+YXR0 Ynl2YWwsIGF0dC0+YXR0bGVuKSkKKwkJCQltaXhfYXR0cnMgPSBibXNfYWRkX21lbWJlciht aXhfYXR0cnMsIGF0dGlkeCk7CisJCX0KKwl9CisKKwlibXNfZnJlZShpZHhfYXR0cnMpOwor CisJcmV0dXJuIG1peF9hdHRyczsKK30KIAogLyoKICAqIFZlcmlmeSB0aGF0IHRoZSB0dXBs ZXMgdG8gYmUgcHJvZHVjZWQgYnkgSU5TRVJUIG1hdGNoIHRoZQpAQCAtMjE5NywxNCArMjMy NCwxNyBAQCBFeGVjVXBkYXRlUHJlcGFyZVNsb3QoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVs SW5mbywKICAqLwogc3RhdGljIFRNX1Jlc3VsdAogRXhlY1VwZGF0ZUFjdChNb2RpZnlUYWJs ZUNvbnRleHQgKmNvbnRleHQsIFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCi0JCQkg IEl0ZW1Qb2ludGVyIHR1cGxlaWQsIEhlYXBUdXBsZSBvbGR0dXBsZSwgVHVwbGVUYWJsZVNs b3QgKnNsb3QsCi0JCQkgIGJvb2wgY2FuU2V0VGFnLCBVcGRhdGVDb250ZXh0ICp1cGRhdGVD eHQpCisJCQkgIEl0ZW1Qb2ludGVyIHR1cGxlaWQsIEhlYXBUdXBsZSBvbGR0dXBsZSwgVHVw bGVUYWJsZVNsb3QgKm9sZFNsb3QsCisJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90LCBib29s IGNhblNldFRhZywgVXBkYXRlQ29udGV4dCAqdXBkYXRlQ3h0KQogewogCUVTdGF0ZQkgICAq ZXN0YXRlID0gY29udGV4dC0+ZXN0YXRlOwogCVJlbGF0aW9uCXJlc3VsdFJlbGF0aW9uRGVz YyA9IHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYzsKIAlib29sCQlwYXJ0aXRpb25f Y29uc3RyYWludF9mYWlsZWQ7CiAJVE1fUmVzdWx0CXJlc3VsdDsKIAorCS8qIFRoZSBzZXQg b2YgbW9kaWZpZWQgaW5kZXhlZCBhdHRyaWJ1dGVzIHRoYXQgdHJpZ2dlciBuZXcgaW5kZXgg ZW50cmllcyAqLworCUJpdG1hcHNldCAgKm1peF9hdHRycyA9IE5VTEw7CisKIAl1cGRhdGVD eHQtPmNyb3NzUGFydFVwZGF0ZSA9IGZhbHNlOwogCiAJLyoKQEAgLTIzMjEsNyArMjQ1MSwy MyBAQCBscmVwbGFjZToKIAkJRXhlY0NvbnN0cmFpbnRzKHJlc3VsdFJlbEluZm8sIHNsb3Qs IGVzdGF0ZSk7CiAKIAkvKgotCSAqIHJlcGxhY2UgdGhlIGhlYXAgdHVwbGUKKwkgKiBJZGVu dGlmeSB3aGljaCwgaWYgYW55LCBpbmRleGVkIGF0dHJpYnV0ZXMgd2VyZSBtb2RpZmllZCBo ZXJlIHNvIHRoYXQKKwkgKiB3ZSBtaWdodCByZXVzZSBpdCBpbiBhIGZldyBwbGFjZXMuCisJ ICovCisJYm1zX2ZyZWUocmVzdWx0UmVsSW5mby0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xzKTsK KwlyZXN1bHRSZWxJbmZvLT5yaV9DaGFuZ2VkSW5kZXhlZENvbHMgPSBOVUxMOworCisJLyoK KwkgKiBOZXh0IHVwIHdlIG5lZWQgdG8gZmluZCBvdXQgdGhlIHNldCBvZiBpbmRleGVkIGF0 dHJpYnV0ZXMgdGhhdCBoYXZlCisJICogY2hhbmdlZCBpbiB2YWx1ZSBhbmQgc2hvdWxkIHRy aWdnZXIgYSBuZXcgaW5kZXggdHVwbGUuICBXZSBjb3VsZCBzdGFydAorCSAqIHdpdGggdGhl IHNldCBvZiB1cGRhdGVkIGNvbHVtbnMgdmlhIEV4ZWNHZXRVcGRhdGVkQ29scygpLCBidXQg aWYgd2UgZG8KKwkgKiB3ZSB3aWxsIG92ZXJsb29rIGF0dHJpYnV0ZXMgZGlyZWN0bHkgbW9k aWZpZWQgYnkgaGVhcF9tb2RpZnlfdHVwbGUoKQorCSAqIHdoaWNoIGFyZSBub3Qga25vd24g dG8gRXhlY0dldFVwZGF0ZWRDb2xzKCkuCisJICovCisJbWl4X2F0dHJzID0gRXhlY0NoZWNr SW5kZXhlZEF0dHJzRm9yQ2hhbmdlcyhyZXN1bHRSZWxJbmZvLCBvbGRTbG90LCBzbG90KTsK KworCS8qCisJICogQ2FsbCBpbnRvIHRoZSB0YWJsZSBBTSB0byB1cGRhdGUgdGhlIGhlYXAg dHVwbGUuCiAJICoKIAkgKiBOb3RlOiBpZiBlc19jcm9zc2NoZWNrX3NuYXBzaG90IGlzbid0 IEludmFsaWRTbmFwc2hvdCwgd2UgY2hlY2sgdGhhdAogCSAqIHRoZSByb3cgdG8gYmUgdXBk YXRlZCBpcyB2aXNpYmxlIHRvIHRoYXQgc25hcHNob3QsIGFuZCB0aHJvdyBhCkBAIC0yMzM1 LDggKzI0ODEsMTIgQEAgbHJlcGxhY2U6CiAJCQkJCQkJCWVzdGF0ZS0+ZXNfY3Jvc3NjaGVj a19zbmFwc2hvdCwKIAkJCQkJCQkJdHJ1ZSAvKiB3YWl0IGZvciBjb21taXQgKi8gLAogCQkJ CQkJCQkmY29udGV4dC0+dG1mZCwgJnVwZGF0ZUN4dC0+bG9ja21vZGUsCisJCQkJCQkJCW1p eF9hdHRycywKIAkJCQkJCQkJJnVwZGF0ZUN4dC0+dXBkYXRlSW5kZXhlcyk7CiAKKwlBc3Nl cnQoYm1zX2lzX2VtcHR5KHJlc3VsdFJlbEluZm8tPnJpX0NoYW5nZWRJbmRleGVkQ29scykp OworCXJlc3VsdFJlbEluZm8tPnJpX0NoYW5nZWRJbmRleGVkQ29scyA9IG1peF9hdHRyczsK KwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTI1NTMsOCArMjcwMyw5IEBAIEV4ZWNVcGRh dGUoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LCBSZXN1bHRSZWxJbmZvICpyZXN1bHRS ZWxJbmZvLAogCQkgKi8KIHJlZG9fYWN0OgogCQlsb2NrZWR0aWQgPSAqdHVwbGVpZDsKLQkJ cmVzdWx0ID0gRXhlY1VwZGF0ZUFjdChjb250ZXh0LCByZXN1bHRSZWxJbmZvLCB0dXBsZWlk LCBvbGR0dXBsZSwgc2xvdCwKLQkJCQkJCQkgICBjYW5TZXRUYWcsICZ1cGRhdGVDeHQpOwor CisJCXJlc3VsdCA9IEV4ZWNVcGRhdGVBY3QoY29udGV4dCwgcmVzdWx0UmVsSW5mbywgdHVw bGVpZCwgb2xkdHVwbGUsIG9sZFNsb3QsCisJCQkJCQkJICAgc2xvdCwgY2FuU2V0VGFnLCAm dXBkYXRlQ3h0KTsKIAogCQkvKgogCQkgKiBJZiBFeGVjVXBkYXRlQWN0IHJlcG9ydHMgdGhh dCBhIGNyb3NzLXBhcnRpdGlvbiB1cGRhdGUgd2FzIGRvbmUsCkBAIC0zNDA0LDggKzM1NTUs OCBAQCBsbWVyZ2VfbWF0Y2hlZDoKIAkJCQkJQXNzZXJ0KG9sZHR1cGxlID09IE5VTEwpOwog CiAJCQkJCXJlc3VsdCA9IEV4ZWNVcGRhdGVBY3QoY29udGV4dCwgcmVzdWx0UmVsSW5mbywg dHVwbGVpZCwKLQkJCQkJCQkJCQkgICBOVUxMLCBuZXdzbG90LCBjYW5TZXRUYWcsCi0JCQkJ CQkJCQkJICAgJnVwZGF0ZUN4dCk7CisJCQkJCQkJCQkJICAgTlVMTCwgcmVzdWx0UmVsSW5m by0+cmlfb2xkVHVwbGVTbG90LAorCQkJCQkJCQkJCSAgIG5ld3Nsb3QsIGNhblNldFRhZywg JnVwZGF0ZUN4dCk7CiAKIAkJCQkJLyoKIAkJCQkJICogQXMgaW4gRXhlY1VwZGF0ZSgpLCBp ZiBFeGVjVXBkYXRlQWN0KCkgcmVwb3J0cyB0aGF0IGEKQEAgLTM0MzAsNiArMzU4MSw3IEBA IGxtZXJnZV9tYXRjaGVkOgogCQkJCQkJCQkJICAgdHVwbGVpZCwgTlVMTCwgbmV3c2xvdCk7 CiAJCQkJCW10c3RhdGUtPm10X21lcmdlX3VwZGF0ZWQgKz0gMTsKIAkJCQl9CisKIAkJCQli cmVhazsKIAogCQkJY2FzZSBDTURfREVMRVRFOgpAQCAtNDUzNyw3ICs0Njg5LDcgQEAgRXhl Y01vZGlmeVRhYmxlKFBsYW5TdGF0ZSAqcHN0YXRlKQogCQkgKiBGb3IgVVBEQVRFL0RFTEVU RS9NRVJHRSwgZmV0Y2ggdGhlIHJvdyBpZGVudGl0eSBpbmZvIGZvciB0aGUgdHVwbGUKIAkJ ICogdG8gYmUgdXBkYXRlZC9kZWxldGVkL21lcmdlZC4gIEZvciBhIGhlYXAgcmVsYXRpb24s IHRoYXQncyBhIFRJRDsKIAkJICogb3RoZXJ3aXNlIHdlIG1heSBoYXZlIGEgd2hvbGVyb3cg anVuayBhdHRyIHRoYXQgY2FycmllcyB0aGUgb2xkCi0JCSAqIHR1cGxlIGluIHRvdG8uICBL ZWVwIHRoaXMgaW4gc3RlcCB3aXRoIHRoZSBwYXJ0IG9mCisJCSAqIHR1cGxlIGluIHRvdGFs LiAgS2VlcCB0aGlzIGluIHN0ZXAgd2l0aCB0aGUgcGFydCBvZgogCQkgKiBFeGVjSW5pdE1v ZGlmeVRhYmxlIHRoYXQgc2V0cyB1cCByaV9Sb3dJZEF0dE5vLgogCQkgKi8KIAkJaWYgKG9w ZXJhdGlvbiA9PSBDTURfVVBEQVRFIHx8IG9wZXJhdGlvbiA9PSBDTURfREVMRVRFIHx8CkBA IC00NzE3LDYgKzQ4NjksNyBAQCBFeGVjTW9kaWZ5VGFibGUoUGxhblN0YXRlICpwc3RhdGUp CiAJCQkJLyogTm93IGFwcGx5IHRoZSB1cGRhdGUuICovCiAJCQkJc2xvdCA9IEV4ZWNVcGRh dGUoJmNvbnRleHQsIHJlc3VsdFJlbEluZm8sIHR1cGxlaWQsIG9sZHR1cGxlLAogCQkJCQkJ CQkgIG9sZFNsb3QsIHNsb3QsIG5vZGUtPmNhblNldFRhZyk7CisKIAkJCQlpZiAodHVwbG9j aykKIAkJCQkJVW5sb2NrVHVwbGUocmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjLCB0 dXBsZWlkLAogCQkJCQkJCQlJbnBsYWNlVXBkYXRlVHVwbGVMb2NrKTsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmluZGV4IDMyNzI1YzQ4NjIzLi45Njhm ZjYyNmYwNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93 b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5j CkBAIC0yODUsMTIgKzI4NSwxNCBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5Lmgi CiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgor I2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCiAjaW5j bHVkZSAidXRpbHMvaW52YWwuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNp bmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3BnX2xzbi5oIgog I2luY2x1ZGUgInV0aWxzL3JlbC5oIgorI2luY2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCiAj aW5jbHVkZSAidXRpbHMvcmxzLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgogI2lu Y2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCkBAIC0xMTEwLDE1ICsxMTEyLDE4IEBAIHNsb3Rf c3RvcmVfZGF0YShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgTG9naWNhbFJlcFJlbE1hcEVudHJ5 ICpyZWwsCiAgKiAic2xvdCIgaXMgZmlsbGVkIHdpdGggYSBjb3B5IG9mIHRoZSB0dXBsZSBp biAic3Jjc2xvdCIsIHJlcGxhY2luZwogICogY29sdW1ucyBwcm92aWRlZCBpbiAidHVwbGVE YXRhIiBhbmQgbGVhdmluZyBvdGhlcnMgYXMtaXMuCiAgKgorICogUmV0dXJucyBhIGJpdG1h cCBvZiB0aGUgbW9kaWZpZWQgY29sdW1ucy4KKyAqCiAgKiBDYXV0aW9uOiB1bnJlcGxhY2Vk IHBhc3MtYnktcmVmIGNvbHVtbnMgaW4gInNsb3QiIHdpbGwgcG9pbnQgaW50byB0aGUKICAq IHN0b3JhZ2UgZm9yICJzcmNzbG90Ii4gIFRoaXMgaXMgT0sgZm9yIGN1cnJlbnQgdXNhZ2Us IGJ1dCBzb21lZGF5IHdlIG1heQogICogbmVlZCB0byBtYXRlcmlhbGl6ZSAic2xvdCIgYXQg dGhlIGVuZCB0byBtYWtlIGl0IGluZGVwZW5kZW50IG9mICJzcmNzbG90Ii4KICAqLwotc3Rh dGljIHZvaWQKK3N0YXRpYyBCaXRtYXBzZXQgKgogc2xvdF9tb2RpZnlfZGF0YShUdXBsZVRh YmxlU2xvdCAqc2xvdCwgVHVwbGVUYWJsZVNsb3QgKnNyY3Nsb3QsCiAJCQkJIExvZ2ljYWxS ZXBSZWxNYXBFbnRyeSAqcmVsLAogCQkJCSBMb2dpY2FsUmVwVHVwbGVEYXRhICp0dXBsZURh dGEpCiB7CisJQml0bWFwc2V0ICAqbW9kaWZpZWQgPSBOVUxMOwogCWludAkJCW5hdHRzID0g c2xvdC0+dHRzX3R1cGxlRGVzY3JpcHRvci0+bmF0dHM7CiAJaW50CQkJaTsKIApAQCAtMTE5 NSw2ICsxMjAwLDI3IEBAIHNsb3RfbW9kaWZ5X2RhdGEoVHVwbGVUYWJsZVNsb3QgKnNsb3Qs IFR1cGxlVGFibGVTbG90ICpzcmNzbG90LAogCQkJCXNsb3QtPnR0c19pc251bGxbaV0gPSB0 cnVlOwogCQkJfQogCisJCQkvKgorCQkJICogRGV0ZXJtaW5lIGlmIHRoZSByZXBsaWNhdGVk IHZhbHVlIGNoYW5nZWQgdGhlIGxvY2FsIHZhbHVlIGJ5CisJCQkgKiBjb21wYXJpbmcgc2xv dHMuICBUaGlzIGlzIGEgc3Vic2V0IG9mCisJCQkgKiBFeGVjQ2hlY2tJbmRleGVkQXR0cnNG b3JDaGFuZ2VzLgorCQkJICovCisJCQlpZiAoc3Jjc2xvdC0+dHRzX2lzbnVsbFtpXSAhPSBz bG90LT50dHNfaXNudWxsW2ldKQorCQkJeworCQkJCS8qIE9uZSBpcyBOVUxMLCB0aGUgb3Ro ZXIgaXMgbm90IHNvIHRoZSB2YWx1ZSBjaGFuZ2VkICovCisJCQkJbW9kaWZpZWQgPSBibXNf YWRkX21lbWJlcihtb2RpZmllZCwgaSArIDEgLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmli dXRlTnVtYmVyKTsKKwkJCX0KKwkJCWVsc2UgaWYgKCFzcmNzbG90LT50dHNfaXNudWxsW2ld KQorCQkJeworCQkJCS8qIEJvdGggYXJlIG5vdCBOVUxMLCBjb21wYXJlIHRoZWlyIHZhbHVl cyAqLworCisJCQkJaWYgKCFkYXR1bUlzRXF1YWwoc3Jjc2xvdC0+dHRzX3ZhbHVlc1tpXSwK KwkJCQkJCQkJICBzbG90LT50dHNfdmFsdWVzW2ldLAorCQkJCQkJCQkgIGF0dC0+YXR0Ynl2 YWwsCisJCQkJCQkJCSAgYXR0LT5hdHRsZW4pKQorCQkJCQltb2RpZmllZCA9IGJtc19hZGRf bWVtYmVyKG1vZGlmaWVkLCBpICsgMSAtIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVO dW1iZXIpOworCQkJfQorCiAJCQkvKiBSZXNldCBhdHRudW0gZm9yIGVycm9yIGNhbGxiYWNr ICovCiAJCQlhcHBseV9lcnJvcl9jYWxsYmFja19hcmcucmVtb3RlX2F0dG51bSA9IC0xOwog CQl9CkBAIC0xMjAyLDYgKzEyMjgsOCBAQCBzbG90X21vZGlmeV9kYXRhKFR1cGxlVGFibGVT bG90ICpzbG90LCBUdXBsZVRhYmxlU2xvdCAqc3Jjc2xvdCwKIAogCS8qIEFuZCBmaW5hbGx5 LCBkZWNsYXJlIHRoYXQgInNsb3QiIGNvbnRhaW5zIGEgdmFsaWQgdmlydHVhbCB0dXBsZSAq LwogCUV4ZWNTdG9yZVZpcnR1YWxUdXBsZShzbG90KTsKKworCXJldHVybiBtb2RpZmllZDsK IH0KIAogLyoKQEAgLTI5MTgsNiArMjk0Niw3IEBAIGFwcGx5X2hhbmRsZV91cGRhdGVfaW50 ZXJuYWwoQXBwbHlFeGVjdXRpb25EYXRhICplZGF0YSwKIAlDb25mbGljdFR1cGxlSW5mbyBj b25mbGljdHR1cGxlID0gezB9OwogCWJvb2wJCWZvdW5kOwogCU1lbW9yeUNvbnRleHQgb2xk Y3R4OworCUJpdG1hcHNldCAgKmluZGV4ZWQgPSBOVUxMOwogCiAJRXZhbFBsYW5RdWFsSW5p dCgmZXBxc3RhdGUsIGVzdGF0ZSwgTlVMTCwgTklMLCAtMSwgTklMKTsKIAlFeGVjT3Blbklu ZGljZXMocmVsaW5mbywgZmFsc2UpOwpAQCAtMjkzNCw2ICsyOTYzLDggQEAgYXBwbHlfaGFu ZGxlX3VwZGF0ZV9pbnRlcm5hbChBcHBseUV4ZWN1dGlvbkRhdGEgKmVkYXRhLAogCSAqLwog CWlmIChmb3VuZCkKIAl7CisJCUJpdG1hcHNldCAgKm1vZGlmaWVkID0gTlVMTDsKKwogCQkv KgogCQkgKiBSZXBvcnQgdGhlIGNvbmZsaWN0IGlmIHRoZSB0dXBsZSB3YXMgbW9kaWZpZWQg YnkgYSBkaWZmZXJlbnQKIAkJICogb3JpZ2luLgpAQCAtMjk1NywxNSArMjk4OCwyOSBAQCBh cHBseV9oYW5kbGVfdXBkYXRlX2ludGVybmFsKEFwcGx5RXhlY3V0aW9uRGF0YSAqZWRhdGEs CiAKIAkJLyogUHJvY2VzcyBhbmQgc3RvcmUgcmVtb3RlIHR1cGxlIGluIHRoZSBzbG90ICov CiAJCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhHZXRQZXJUdXBsZU1lbW9yeUNv bnRleHQoZXN0YXRlKSk7Ci0JCXNsb3RfbW9kaWZ5X2RhdGEocmVtb3Rlc2xvdCwgbG9jYWxz bG90LCByZWxtYXBlbnRyeSwgbmV3dHVwKTsKKwkJbW9kaWZpZWQgPSBzbG90X21vZGlmeV9k YXRhKHJlbW90ZXNsb3QsIGxvY2Fsc2xvdCwgcmVsbWFwZW50cnksIG5ld3R1cCk7CiAJCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOwogCisJCS8qCisJCSAqIE5vcm1hbGx5IHdl J2QgY2FsbCBFeGVjQ2hlY2tJbmRleGVkQXR0ckZvckNoYW5nZXMgYnV0IGhlcmUgd2UgaGF2 ZQorCQkgKiB0aGUgcmVjb3JkIG9mIGNoYW5nZWQgY29sdW1ucyBpbiB0aGUgcmVwbGljYXRp b24gc3RhdGUsIHNvIGxldCdzCisJCSAqIHVzZSB0aGF0IGluc3RlYWQuCisJCSAqLworCQlp bmRleGVkID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsaW5mby0+cmlfUmVsYXRp b25EZXNjLAorCQkJCQkJCQkJCQkgSU5ERVhfQVRUUl9CSVRNQVBfSU5ERVhFRCk7CisKKwkJ Ym1zX2ZyZWUocmVsaW5mby0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xzKTsKKwkJcmVsaW5mby0+ cmlfQ2hhbmdlZEluZGV4ZWRDb2xzID0gYm1zX2ludF9tZW1iZXJzKG1vZGlmaWVkLCBpbmRl eGVkKTsKKwkJYm1zX2ZyZWUoaW5kZXhlZCk7CisKIAkJRXZhbFBsYW5RdWFsU2V0U2xvdCgm ZXBxc3RhdGUsIHJlbW90ZXNsb3QpOwogCiAJCUluaXRDb25mbGljdEluZGV4ZXMocmVsaW5m byk7CiAKLQkJLyogRG8gdGhlIGFjdHVhbCB1cGRhdGUuICovCisJCS8qIEZpcnN0IGNoZWNr IHByaXZpbGVnZXMgKi8KIAkJVGFyZ2V0UHJpdmlsZWdlc0NoZWNrKHJlbGluZm8tPnJpX1Jl bGF0aW9uRGVzYywgQUNMX1VQREFURSk7CisKKwkJLyogVGhlbiBkbyB0aGUgYWN0dWFsIHVw ZGF0ZS4gKi8KIAkJRXhlY1NpbXBsZVJlbGF0aW9uVXBkYXRlKHJlbGluZm8sIGVzdGF0ZSwg JmVwcXN0YXRlLCBsb2NhbHNsb3QsCiAJCQkJCQkJCSByZW1vdGVzbG90KTsKIAl9CkBAIC0z NDU1LDYgKzM1MDAsOCBAQCBhcHBseV9oYW5kbGVfdHVwbGVfcm91dGluZyhBcHBseUV4ZWN1 dGlvbkRhdGEgKmVkYXRhLAogCQkJCWJvb2wJCWZvdW5kOwogCQkJCUVQUVN0YXRlCWVwcXN0 YXRlOwogCQkJCUNvbmZsaWN0VHVwbGVJbmZvIGNvbmZsaWN0dHVwbGUgPSB7MH07CisJCQkJ Qml0bWFwc2V0ICAqbW9kaWZpZWQgPSBOVUxMOworCQkJCUJpdG1hcHNldCAgKmluZGV4ZWQ7 CiAKIAkJCQkvKiBHZXQgdGhlIG1hdGNoaW5nIGxvY2FsIHR1cGxlIGZyb20gdGhlIHBhcnRp dGlvbi4gKi8KIAkJCQlmb3VuZCA9IEZpbmRSZXBsVHVwbGVJbkxvY2FsUmVsKGVkYXRhLCBw YXJ0cmVsLApAQCAtMzUyMyw4ICszNTcwLDggQEAgYXBwbHlfaGFuZGxlX3R1cGxlX3JvdXRp bmcoQXBwbHlFeGVjdXRpb25EYXRhICplZGF0YSwKIAkJCQkgKiByZW1vdGVzbG90X3BhcnQu CiAJCQkJICovCiAJCQkJb2xkY3R4ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEdldFBlclR1 cGxlTWVtb3J5Q29udGV4dChlc3RhdGUpKTsKLQkJCQlzbG90X21vZGlmeV9kYXRhKHJlbW90 ZXNsb3RfcGFydCwgbG9jYWxzbG90LCBwYXJ0X2VudHJ5LAotCQkJCQkJCQkgbmV3dHVwKTsK KwkJCQltb2RpZmllZCA9IHNsb3RfbW9kaWZ5X2RhdGEocmVtb3Rlc2xvdF9wYXJ0LCBsb2Nh bHNsb3QsIHBhcnRfZW50cnksCisJCQkJCQkJCQkJCW5ld3R1cCk7CiAJCQkJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG9sZGN0eCk7CiAKIAkJCQlFdmFsUGxhblF1YWxJbml0KCZlcHFzdGF0 ZSwgZXN0YXRlLCBOVUxMLCBOSUwsIC0xLCBOSUwpOwpAQCAtMzU0OSw2ICszNTk2LDE4IEBA IGFwcGx5X2hhbmRsZV90dXBsZV9yb3V0aW5nKEFwcGx5RXhlY3V0aW9uRGF0YSAqZWRhdGEs CiAJCQkJCUV2YWxQbGFuUXVhbFNldFNsb3QoJmVwcXN0YXRlLCByZW1vdGVzbG90X3BhcnQp OwogCQkJCQlUYXJnZXRQcml2aWxlZ2VzQ2hlY2socGFydHJlbGluZm8tPnJpX1JlbGF0aW9u RGVzYywKIAkJCQkJCQkJCQkgIEFDTF9VUERBVEUpOworCisJCQkJCS8qCisJCQkJCSAqIE5v cm1hbGx5IHdlJ2QgY2FsbCBFeGVjQ2hlY2tJbmRleGVkQXR0ckZvckNoYW5nZXMgYnV0CisJ CQkJCSAqIGhlcmUgd2UgaGF2ZSB0aGUgcmVjb3JkIG9mIGNoYW5nZWQgY29sdW1ucyBpbiB0 aGUKKwkJCQkJICogcmVwbGljYXRpb24gc3RhdGUsIHNvIGxldCdzIHVzZSB0aGF0IGluc3Rl YWQuCisJCQkJCSAqLworCQkJCQlpbmRleGVkID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRt YXAocGFydHJlbGluZm8tPnJpX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJCQkJCQkJIElOREVY X0FUVFJfQklUTUFQX0lOREVYRUQpOworCQkJCQlibXNfZnJlZShwYXJ0cmVsaW5mby0+cmlf Q2hhbmdlZEluZGV4ZWRDb2xzKTsKKwkJCQkJcGFydHJlbGluZm8tPnJpX0NoYW5nZWRJbmRl eGVkQ29scyA9IGJtc19pbnRfbWVtYmVycyhtb2RpZmllZCwgaW5kZXhlZCk7CisJCQkJCWJt c19mcmVlKGluZGV4ZWQpOworCiAJCQkJCUV4ZWNTaW1wbGVSZWxhdGlvblVwZGF0ZShwYXJ0 cmVsaW5mbywgZXN0YXRlLCAmZXBxc3RhdGUsCiAJCQkJCQkJCQkJCSBsb2NhbHNsb3QsIHJl bW90ZXNsb3RfcGFydCk7CiAJCQkJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMK aW5kZXggNmI2MzRjOWZmZjEuLmYzMDUwNWQ4YWUzIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hl L3JlbGNhY2hlLmMKQEAgLTI0NzUsOCArMjQ3NSw4IEBAIFJlbGF0aW9uRGVzdHJveVJlbGF0 aW9uKFJlbGF0aW9uIHJlbGF0aW9uLCBib29sIHJlbWVtYmVyX3R1cGRlc2MpCiAJYm1zX2Zy ZWUocmVsYXRpb24tPnJkX2tleWF0dHIpOwogCWJtc19mcmVlKHJlbGF0aW9uLT5yZF9wa2F0 dHIpOwogCWJtc19mcmVlKHJlbGF0aW9uLT5yZF9pZGF0dHIpOwotCWJtc19mcmVlKHJlbGF0 aW9uLT5yZF9ob3RibG9ja2luZ2F0dHIpOwogCWJtc19mcmVlKHJlbGF0aW9uLT5yZF9zdW1t YXJpemVkYXR0cik7CisJYm1zX2ZyZWUocmVsYXRpb24tPnJkX2luZGV4ZWRhdHRyKTsKIAlp ZiAocmVsYXRpb24tPnJkX3B1YmRlc2MpCiAJCXBmcmVlKHJlbGF0aW9uLT5yZF9wdWJkZXNj KTsKIAlpZiAocmVsYXRpb24tPnJkX29wdGlvbnMpCkBAIC01Mjc2LDggKzUyNzYsOCBAQCBS ZWxhdGlvbkdldEluZGV4UHJlZGljYXRlKFJlbGF0aW9uIHJlbGF0aW9uKQogICoJCQkJCQkJ CQkoYmV3YXJlOiBldmVuIGlmIFBLIGlzIGRlZmVycmFibGUhKQogICoJSU5ERVhfQVRUUl9C SVRNQVBfSURFTlRJVFlfS0VZCUNvbHVtbnMgaW4gdGhlIHRhYmxlJ3MgcmVwbGljYSBpZGVu dGl0eQogICoJCQkJCQkJCQlpbmRleCAoZW1wdHkgaWYgRlVMTCkKLSAqCUlOREVYX0FUVFJf QklUTUFQX0hPVF9CTE9DS0lORwlDb2x1bW5zIHRoYXQgYmxvY2sgdXBkYXRlcyBmcm9tIGJl aW5nIEhPVAotICoJSU5ERVhfQVRUUl9CSVRNQVBfU1VNTUFSSVpFRAlDb2x1bW5zIGluY2x1 ZGVkIGluIHN1bW1hcml6aW5nIGluZGV4ZXMKKyAqCUlOREVYX0FUVFJfQklUTUFQX1NVTU1B UklaRUQJQ29sdW1ucyBvbmx5IGluY2x1ZGVkIGluIHN1bW1hcml6aW5nIGluZGV4ZXMKKyAq CUlOREVYX0FUVFJfQklUTUFQX0lOREVYRUQJCUNvbHVtbnMgcmVmZXJlbmNlZCBieSBpbmRl eGVzCiAgKgogICogQXR0cmlidXRlIG51bWJlcnMgYXJlIG9mZnNldCBieSBGaXJzdExvd0lu dmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyIHNvIHRoYXQKICAqIHdlIGNhbiBpbmNsdWRlIHN5 c3RlbSBhdHRyaWJ1dGVzIChlLmcuLCBPSUQpIGluIHRoZSBiaXRtYXAgcmVwcmVzZW50YXRp b24uCkBAIC01MzAwLDggKzUzMDAsOCBAQCBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChS ZWxhdGlvbiByZWxhdGlvbiwgSW5kZXhBdHRyQml0bWFwS2luZCBhdHRyS2luZCkKIAlCaXRt YXBzZXQgICp1aW5kZXhhdHRyczsJLyogY29sdW1ucyBpbiB1bmlxdWUgaW5kZXhlcyAqLwog CUJpdG1hcHNldCAgKnBraW5kZXhhdHRyczsJLyogY29sdW1ucyBpbiB0aGUgcHJpbWFyeSBp bmRleCAqLwogCUJpdG1hcHNldCAgKmlkaW5kZXhhdHRyczsJLyogY29sdW1ucyBpbiB0aGUg cmVwbGljYSBpZGVudGl0eSAqLwotCUJpdG1hcHNldCAgKmhvdGJsb2NraW5nYXR0cnM7CS8q IGNvbHVtbnMgd2l0aCBIT1QgYmxvY2tpbmcgaW5kZXhlcyAqLwotCUJpdG1hcHNldCAgKnN1 bW1hcml6ZWRhdHRyczsJLyogY29sdW1ucyB3aXRoIHN1bW1hcml6aW5nIGluZGV4ZXMgKi8K KwlCaXRtYXBzZXQgICpzdW1tYXJpemVkYXR0cnM7CS8qIGNvbHVtbnMgb25seSBpbiBzdW1t YXJpemluZyBpbmRleGVzICovCisJQml0bWFwc2V0ICAqaW5kZXhlZGF0dHJzOwkvKiBjb2x1 bW5zIHJlZmVyZW5jZWQgYnkgaW5kZXhlcyAqLwogCUxpc3QJICAgKmluZGV4b2lkbGlzdDsK IAlMaXN0CSAgICpuZXdpbmRleG9pZGxpc3Q7CiAJT2lkCQkJcmVscGtpbmRleDsKQEAgLTUz MjAsMTAgKzUzMjAsMTAgQEAgUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAoUmVsYXRpb24g cmVsYXRpb24sIEluZGV4QXR0ckJpdG1hcEtpbmQgYXR0cktpbmQpCiAJCQkJcmV0dXJuIGJt c19jb3B5KHJlbGF0aW9uLT5yZF9wa2F0dHIpOwogCQkJY2FzZSBJTkRFWF9BVFRSX0JJVE1B UF9JREVOVElUWV9LRVk6CiAJCQkJcmV0dXJuIGJtc19jb3B5KHJlbGF0aW9uLT5yZF9pZGF0 dHIpOwotCQkJY2FzZSBJTkRFWF9BVFRSX0JJVE1BUF9IT1RfQkxPQ0tJTkc6Ci0JCQkJcmV0 dXJuIGJtc19jb3B5KHJlbGF0aW9uLT5yZF9ob3RibG9ja2luZ2F0dHIpOwogCQkJY2FzZSBJ TkRFWF9BVFRSX0JJVE1BUF9TVU1NQVJJWkVEOgogCQkJCXJldHVybiBibXNfY29weShyZWxh dGlvbi0+cmRfc3VtbWFyaXplZGF0dHIpOworCQkJY2FzZSBJTkRFWF9BVFRSX0JJVE1BUF9J TkRFWEVEOgorCQkJCXJldHVybiBibXNfY29weShyZWxhdGlvbi0+cmRfaW5kZXhlZGF0dHIp OwogCQkJZGVmYXVsdDoKIAkJCQllbG9nKEVSUk9SLCAidW5rbm93biBhdHRyS2luZCAldSIs IGF0dHJLaW5kKTsKIAkJfQpAQCAtNTM2Niw4ICs1MzY2LDggQEAgcmVzdGFydDoKIAl1aW5k ZXhhdHRycyA9IE5VTEw7CiAJcGtpbmRleGF0dHJzID0gTlVMTDsKIAlpZGluZGV4YXR0cnMg PSBOVUxMOwotCWhvdGJsb2NraW5nYXR0cnMgPSBOVUxMOwogCXN1bW1hcml6ZWRhdHRycyA9 IE5VTEw7CisJaW5kZXhlZGF0dHJzID0gTlVMTDsKIAlmb3JlYWNoKGwsIGluZGV4b2lkbGlz dCkKIAl7CiAJCU9pZAkJCWluZGV4T2lkID0gbGZpcnN0X29pZChsKTsKQEAgLTU0MjYsNyAr NTQyNiw3IEBAIHJlc3RhcnQ6CiAJCWlmIChpbmRleERlc2MtPnJkX2luZGFtLT5hbXN1bW1h cml6aW5nKQogCQkJYXR0cnMgPSAmc3VtbWFyaXplZGF0dHJzOwogCQllbHNlCi0JCQlhdHRy cyA9ICZob3RibG9ja2luZ2F0dHJzOworCQkJYXR0cnMgPSAmaW5kZXhlZGF0dHJzOwogCiAJ CS8qIENvbGxlY3Qgc2ltcGxlIGF0dHJpYnV0ZSByZWZlcmVuY2VzICovCiAJCWZvciAoaSA9 IDA7IGkgPCBpbmRleERlc2MtPnJkX2luZGV4LT5pbmRuYXR0czsgaSsrKQpAQCAtNTQzNSw5 ICs1NDM1LDkgQEAgcmVzdGFydDoKIAogCQkJLyoKIAkJCSAqIFNpbmNlIHdlIGhhdmUgY292 ZXJpbmcgaW5kZXhlcyB3aXRoIG5vbi1rZXkgY29sdW1ucywgd2UgbXVzdAotCQkJICogaGFu ZGxlIHRoZW0gYWNjdXJhdGVseSBoZXJlLiBub24ta2V5IGNvbHVtbnMgbXVzdCBiZSBhZGRl ZCBpbnRvCi0JCQkgKiBob3RibG9ja2luZ2F0dHJzIG9yIHN1bW1hcml6ZWRhdHRycywgc2lu Y2UgdGhleSBhcmUgaW4gaW5kZXgsCi0JCQkgKiBhbmQgdXBkYXRlIHNob3VsZG4ndCBtaXNz IHRoZW0uCisJCQkgKiBoYW5kbGUgdGhlbSBhY2N1cmF0ZWx5IGhlcmUuIE5vbi1rZXkgY29s dW1ucyBtdXN0IGJlIGFkZGVkIGludG8KKwkJCSAqIGluZGV4ZWRhdHRycyBvciBzdW1tYXJp emVkYXR0cnMsIHNpbmNlIHRoZXkgYXJlIGluIGluZGV4LCBhbmQKKwkJCSAqIHVwZGF0ZSBz aG91bGRuJ3QgbWlzcyB0aGVtLgogCQkJICoKIAkJCSAqIFN1bW1hcml6aW5nIGluZGV4ZXMg ZG8gbm90IGJsb2NrIEhPVCwgYnV0IGRvIG5lZWQgdG8gYmUgdXBkYXRlZAogCQkJICogd2hl biB0aGUgY29sdW1uIHZhbHVlIGNoYW5nZXMsIHRodXMgcmVxdWlyZSBhIHNlcGFyYXRlCkBA IC01NDk4LDEyICs1NDk4LDIwIEBAIHJlc3RhcnQ6CiAJCWJtc19mcmVlKHVpbmRleGF0dHJz KTsKIAkJYm1zX2ZyZWUocGtpbmRleGF0dHJzKTsKIAkJYm1zX2ZyZWUoaWRpbmRleGF0dHJz KTsKLQkJYm1zX2ZyZWUoaG90YmxvY2tpbmdhdHRycyk7CiAJCWJtc19mcmVlKHN1bW1hcml6 ZWRhdHRycyk7CisJCWJtc19mcmVlKGluZGV4ZWRhdHRycyk7CiAKIAkJZ290byByZXN0YXJ0 OwogCX0KIAorCS8qCisJICogUmVjb3JkIHdoYXQgYXR0cmlidXRlcyBhcmUgb25seSByZWZl cmVuY2VkIGJ5IHN1bW1hcml6aW5nIGluZGV4ZXMuIFRoZW4KKwkgKiBhZGQgdGhhdCBpbnRv IHRoZSBvdGhlciBpbmRleGVkIGF0dHJpYnV0ZXMgdG8gdHJhY2sgYWxsIHJlZmVyZW5jZWQK KwkgKiBhdHRyaWJ1dGVzLgorCSAqLworCXN1bW1hcml6ZWRhdHRycyA9IGJtc19kZWxfbWVt YmVycyhzdW1tYXJpemVkYXR0cnMsIGluZGV4ZWRhdHRycyk7CisJaW5kZXhlZGF0dHJzID0g Ym1zX2FkZF9tZW1iZXJzKGluZGV4ZWRhdHRycywgc3VtbWFyaXplZGF0dHJzKTsKKwogCS8q IERvbid0IGxlYWsgdGhlIG9sZCB2YWx1ZXMgb2YgdGhlc2UgYml0bWFwcywgaWYgYW55ICov CiAJcmVsYXRpb24tPnJkX2F0dHJzdmFsaWQgPSBmYWxzZTsKIAlibXNfZnJlZShyZWxhdGlv bi0+cmRfa2V5YXR0cik7CkBAIC01NTEyLDEwICs1NTIwLDEwIEBAIHJlc3RhcnQ6CiAJcmVs YXRpb24tPnJkX3BrYXR0ciA9IE5VTEw7CiAJYm1zX2ZyZWUocmVsYXRpb24tPnJkX2lkYXR0 cik7CiAJcmVsYXRpb24tPnJkX2lkYXR0ciA9IE5VTEw7Ci0JYm1zX2ZyZWUocmVsYXRpb24t PnJkX2hvdGJsb2NraW5nYXR0cik7Ci0JcmVsYXRpb24tPnJkX2hvdGJsb2NraW5nYXR0ciA9 IE5VTEw7CiAJYm1zX2ZyZWUocmVsYXRpb24tPnJkX3N1bW1hcml6ZWRhdHRyKTsKIAlyZWxh dGlvbi0+cmRfc3VtbWFyaXplZGF0dHIgPSBOVUxMOworCWJtc19mcmVlKHJlbGF0aW9uLT5y ZF9pbmRleGVkYXR0cik7CisJcmVsYXRpb24tPnJkX2luZGV4ZWRhdHRyID0gTlVMTDsKIAog CS8qCiAJICogTm93IHNhdmUgY29waWVzIG9mIHRoZSBiaXRtYXBzIGluIHRoZSByZWxjYWNo ZSBlbnRyeS4gIFdlIGludGVudGlvbmFsbHkKQEAgLTU1MjgsOCArNTUzNiw4IEBAIHJlc3Rh cnQ6CiAJcmVsYXRpb24tPnJkX2tleWF0dHIgPSBibXNfY29weSh1aW5kZXhhdHRycyk7CiAJ cmVsYXRpb24tPnJkX3BrYXR0ciA9IGJtc19jb3B5KHBraW5kZXhhdHRycyk7CiAJcmVsYXRp b24tPnJkX2lkYXR0ciA9IGJtc19jb3B5KGlkaW5kZXhhdHRycyk7Ci0JcmVsYXRpb24tPnJk X2hvdGJsb2NraW5nYXR0ciA9IGJtc19jb3B5KGhvdGJsb2NraW5nYXR0cnMpOwogCXJlbGF0 aW9uLT5yZF9zdW1tYXJpemVkYXR0ciA9IGJtc19jb3B5KHN1bW1hcml6ZWRhdHRycyk7CisJ cmVsYXRpb24tPnJkX2luZGV4ZWRhdHRyID0gYm1zX2NvcHkoaW5kZXhlZGF0dHJzKTsKIAly ZWxhdGlvbi0+cmRfYXR0cnN2YWxpZCA9IHRydWU7CiAJTWVtb3J5Q29udGV4dFN3aXRjaFRv KG9sZGN4dCk7CiAKQEAgLTU1NDIsMTAgKzU1NTAsMTAgQEAgcmVzdGFydDoKIAkJCXJldHVy biBwa2luZGV4YXR0cnM7CiAJCWNhc2UgSU5ERVhfQVRUUl9CSVRNQVBfSURFTlRJVFlfS0VZ OgogCQkJcmV0dXJuIGlkaW5kZXhhdHRyczsKLQkJY2FzZSBJTkRFWF9BVFRSX0JJVE1BUF9I T1RfQkxPQ0tJTkc6Ci0JCQlyZXR1cm4gaG90YmxvY2tpbmdhdHRyczsKIAkJY2FzZSBJTkRF WF9BVFRSX0JJVE1BUF9TVU1NQVJJWkVEOgogCQkJcmV0dXJuIHN1bW1hcml6ZWRhdHRyczsK KwkJY2FzZSBJTkRFWF9BVFRSX0JJVE1BUF9JTkRFWEVEOgorCQkJcmV0dXJuIGluZGV4ZWRh dHRyczsKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bmtub3duIGF0dHJLaW5kICV1 IiwgYXR0cktpbmQpOwogCQkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXgg M2MwOTYxYWIzNmIuLmNhNmFjMWY4YTRkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nl c3MvaGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0zNjQs MTEgKzM2NCwxMSBAQCBleHRlcm4gVE1fUmVzdWx0IGhlYXBfZGVsZXRlKFJlbGF0aW9uIHJl bGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKnRpZCwKIAkJCQkJCQkgVE1fRmFpbHVy ZURhdGEgKnRtZmQsIGJvb2wgY2hhbmdpbmdQYXJ0KTsKIGV4dGVybiB2b2lkIGhlYXBfZmlu aXNoX3NwZWN1bGF0aXZlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRh dGEgKnRpZCk7CiBleHRlcm4gdm9pZCBoZWFwX2Fib3J0X3NwZWN1bGF0aXZlKFJlbGF0aW9u IHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKnRpZCk7Ci1leHRlcm4gVE1fUmVz dWx0IGhlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRh dGEgKm90aWQsCi0JCQkJCQkJIEhlYXBUdXBsZSBuZXd0dXAsCi0JCQkJCQkJIENvbW1hbmRJ ZCBjaWQsIFNuYXBzaG90IGNyb3NzY2hlY2ssIGJvb2wgd2FpdCwKLQkJCQkJCQkgVE1fRmFp bHVyZURhdGEgKnRtZmQsIExvY2tUdXBsZU1vZGUgKmxvY2ttb2RlLAotCQkJCQkJCSBUVV9V cGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcyk7CitleHRlcm4gVE1fUmVzdWx0IGhlYXBf dXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGVEYXRhICpvbGR0dXAsCisJCQkJ CQkJIEhlYXBUdXBsZSBuZXd0dXAsIENvbW1hbmRJZCBjaWQsIFNuYXBzaG90IGNyb3NzY2hl Y2ssIGJvb2wgd2FpdCwKKwkJCQkJCQkgVE1fRmFpbHVyZURhdGEgKnRtZmQsIExvY2tUdXBs ZU1vZGUgKmxvY2ttb2RlLCBCdWZmZXIgYnVmZmVyLAorCQkJCQkJCSBQYWdlIHBhZ2UsIEJs b2NrTnVtYmVyIGJsb2NrLCBJdGVtSWQgbHAsIGJvb2wgaG90X2FsbG93ZWQsCisJCQkJCQkJ IEJ1ZmZlciAqdm1idWZmZXIsIGJvb2wgcmVwX2lkX2tleV9yZXF1aXJlZCk7CiBleHRlcm4g VE1fUmVzdWx0IGhlYXBfbG9ja190dXBsZShSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxl IHR1cGxlLAogCQkJCQkJCQkgQ29tbWFuZElkIGNpZCwgTG9ja1R1cGxlTW9kZSBtb2RlLCBM b2NrV2FpdFBvbGljeSB3YWl0X3BvbGljeSwKIAkJCQkJCQkJIGJvb2wgZm9sbG93X3VwZGF0 ZXMsCkBAIC00MDIsOCArNDAyLDggQEAgZXh0ZXJuIGJvb2wgaGVhcF90dXBsZV9uZWVkc19l dmVudHVhbF9mcmVlemUoSGVhcFR1cGxlSGVhZGVyIHR1cGxlKTsKIAogZXh0ZXJuIHZvaWQg c2ltcGxlX2hlYXBfaW5zZXJ0KFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGUgdHVwKTsK IGV4dGVybiB2b2lkIHNpbXBsZV9oZWFwX2RlbGV0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29u c3QgSXRlbVBvaW50ZXJEYXRhICp0aWQpOwotZXh0ZXJuIHZvaWQgc2ltcGxlX2hlYXBfdXBk YXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsCi0J CQkJCQkJICAgSGVhcFR1cGxlIHR1cCwgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4 ZXMpOworZXh0ZXJuIEJpdG1hcHNldCAqc2ltcGxlX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJl bGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsCisJCQkJCQkJCQkgSGVhcFR1 cGxlIHR1cCwgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpOwogCiBleHRlcm4g VHJhbnNhY3Rpb25JZCBoZWFwX2luZGV4X2RlbGV0ZV90dXBsZXMoUmVsYXRpb24gcmVsLAog CQkJCQkJCQkJCQkgIFRNX0luZGV4RGVsZXRlT3AgKmRlbHN0YXRlKTsKQEAgLTQzMCw2ICs0 MzAsMTggQEAgZXh0ZXJuIHZvaWQgbG9nX2hlYXBfcHJ1bmVfYW5kX2ZyZWV6ZShSZWxhdGlv biByZWxhdGlvbiwgQnVmZmVyIGJ1ZmZlciwKIAkJCQkJCQkJCSAgT2Zmc2V0TnVtYmVyICpk ZWFkLCBpbnQgbmRlYWQsCiAJCQkJCQkJCQkgIE9mZnNldE51bWJlciAqdW51c2VkLCBpbnQg bnVudXNlZCk7CiAKKy8qIGluIGhlYXAvaGVhcGFtLmMgKi8KK2V4dGVybiBCaXRtYXBzZXQg KkhlYXBEZXRlcm1pbmVDb2x1bW5zSW5mbyhSZWxhdGlvbiByZWxhdGlvbiwKKwkJCQkJCQkJ CQkgICBCaXRtYXBzZXQgKmludGVyZXN0aW5nX2NvbHMsCisJCQkJCQkJCQkJICAgQml0bWFw c2V0ICpleHRlcm5hbF9jb2xzLAorCQkJCQkJCQkJCSAgIEhlYXBUdXBsZSBvbGR0dXAsIEhl YXBUdXBsZSBuZXd0dXAsCisJCQkJCQkJCQkJICAgYm9vbCAqaGFzX2V4dGVybmFsKTsKKyNp ZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCitleHRlcm4gdm9pZCBjaGVja19sb2NrX2lmX2lu cGxhY2VfdXBkYXRlYWJsZV9yZWwoUmVsYXRpb24gcmVsYXRpb24sCisJCQkJCQkJCQkJCQkg Y29uc3QgSXRlbVBvaW50ZXJEYXRhICpvdGlkLAorCQkJCQkJCQkJCQkJIEhlYXBUdXBsZSBu ZXd0dXApOworI2VuZGlmCisKIC8qIGluIGhlYXAvdmFjdXVtbGF6eS5jICovCiBleHRlcm4g dm9pZCBoZWFwX3ZhY3V1bV9yZWwoUmVsYXRpb24gcmVsLAogCQkJCQkJCWNvbnN0IFZhY3V1 bVBhcmFtcyBwYXJhbXMsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSk7CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3RhYmxlYW0uaAppbmRleCAyNTEzNzkwMTZiMC4uM2IwODBhYTM3MTEgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3RhYmxlYW0uaApAQCAtNTQ5LDYgKzU0OSw3IEBAIHR5cGVkZWYgc3RydWN0IFRhYmxl QW1Sb3V0aW5lCiAJCQkJCQkJCSBib29sIHdhaXQsCiAJCQkJCQkJCSBUTV9GYWlsdXJlRGF0 YSAqdG1mZCwKIAkJCQkJCQkJIExvY2tUdXBsZU1vZGUgKmxvY2ttb2RlLAorCQkJCQkJCQkg Y29uc3QgQml0bWFwc2V0ICp1cGRhdGVkX2NvbHMsCiAJCQkJCQkJCSBUVV9VcGRhdGVJbmRl eGVzICp1cGRhdGVfaW5kZXhlcyk7CiAKIAkvKiBzZWUgdGFibGVfdHVwbGVfbG9jaygpIGZv ciByZWZlcmVuY2UgYWJvdXQgcGFyYW1ldGVycyAqLwpAQCAtMTUyNCwxMiArMTUyNSwxMiBA QCBzdGF0aWMgaW5saW5lIFRNX1Jlc3VsdAogdGFibGVfdHVwbGVfdXBkYXRlKFJlbGF0aW9u IHJlbCwgSXRlbVBvaW50ZXIgb3RpZCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJICAg Q29tbWFuZElkIGNpZCwgU25hcHNob3Qgc25hcHNob3QsIFNuYXBzaG90IGNyb3NzY2hlY2ss CiAJCQkJICAgYm9vbCB3YWl0LCBUTV9GYWlsdXJlRGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9k ZSAqbG9ja21vZGUsCi0JCQkJICAgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMp CisJCQkJICAgY29uc3QgQml0bWFwc2V0ICptaXhfY29scywgVFVfVXBkYXRlSW5kZXhlcyAq dXBkYXRlX2luZGV4ZXMpCiB7CiAJcmV0dXJuIHJlbC0+cmRfdGFibGVhbS0+dHVwbGVfdXBk YXRlKHJlbCwgb3RpZCwgc2xvdCwKIAkJCQkJCQkJCQkgY2lkLCBzbmFwc2hvdCwgY3Jvc3Nj aGVjaywKLQkJCQkJCQkJCQkgd2FpdCwgdG1mZCwKLQkJCQkJCQkJCQkgbG9ja21vZGUsIHVw ZGF0ZV9pbmRleGVzKTsKKwkJCQkJCQkJCQkgd2FpdCwgdG1mZCwgbG9ja21vZGUsCisJCQkJ CQkJCQkJIG1peF9jb2xzLCB1cGRhdGVfaW5kZXhlcyk7CiB9CiAKIC8qCkBAIC0yMDEwLDYg KzIwMTEsNyBAQCBleHRlcm4gdm9pZCBzaW1wbGVfdGFibGVfdHVwbGVfZGVsZXRlKFJlbGF0 aW9uIHJlbCwgSXRlbVBvaW50ZXIgdGlkLAogCQkJCQkJCQkJICBTbmFwc2hvdCBzbmFwc2hv dCk7CiBleHRlcm4gdm9pZCBzaW1wbGVfdGFibGVfdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJl bCwgSXRlbVBvaW50ZXIgb3RpZCwKIAkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3Qs IFNuYXBzaG90IHNuYXBzaG90LAorCQkJCQkJCQkJICBjb25zdCBCaXRtYXBzZXQgKm1peF9h dHRycywKIAkJCQkJCQkJCSAgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpOwog CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaCBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvaW5kZXguaAppbmRleCBiMjU5YzQxNDFlZC4uMTRhMzliZWFiNmUgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaAorKysgYi9zcmMvaW5jbHVk ZS9jYXRhbG9nL2luZGV4LmgKQEAgLTEzMiw2ICsxMzIsNyBAQCBleHRlcm4gYm9vbCBDb21w YXJlSW5kZXhJbmZvKGNvbnN0IEluZGV4SW5mbyAqaW5mbzEsIGNvbnN0IEluZGV4SW5mbyAq aW5mbzIsCiAJCQkJCQkJIGNvbnN0IEF0dHJNYXAgKmF0dG1hcCk7CiAKIGV4dGVybiB2b2lk IEJ1aWxkU3BlY3VsYXRpdmVJbmRleEluZm8oUmVsYXRpb24gaW5kZXgsIEluZGV4SW5mbyAq aWkpOworZXh0ZXJuIHZvaWQgQnVpbGRVcGRhdGVJbmRleEluZm8oUmVzdWx0UmVsSW5mbyAq cmVzdWx0UmVsSW5mbyk7CiAKIGV4dGVybiB2b2lkIEZvcm1JbmRleERhdHVtKEluZGV4SW5m byAqaW5kZXhJbmZvLAogCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oIGIvc3JjL2luY2x1ZGUvZXhl Y3V0b3IvZXhlY3V0b3IuaAppbmRleCA1NWE3ZDkzMGQyNi4uNjdlY2IxNzcxYzMgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKKysrIGIvc3JjL2luY2x1 ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaApAQCAtODAwLDUgKzgwMCw4IEBAIGV4dGVybiBSZXN1 bHRSZWxJbmZvICpFeGVjTG9va3VwUmVzdWx0UmVsQnlPaWQoTW9kaWZ5VGFibGVTdGF0ZSAq bm9kZSwKIAkJCQkJCQkJCQkJICAgT2lkIHJlc3VsdG9pZCwKIAkJCQkJCQkJCQkJICAgYm9v bCBtaXNzaW5nX29rLAogCQkJCQkJCQkJCQkgICBib29sIHVwZGF0ZV9jYWNoZSk7CitleHRl cm4gQml0bWFwc2V0ICpFeGVjQ2hlY2tJbmRleGVkQXR0cnNGb3JDaGFuZ2VzKFJlc3VsdFJl bEluZm8gKnJlbGluZm8sCisJCQkJCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpvbGRfdHRz LAorCQkJCQkJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqbmV3X3R0cyk7CiAKICNlbmRpZgkJ CQkJCQkvKiBFWEVDVVRPUl9IICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMv ZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCA2M2Mw NjdkNWFhZS4uMTMyODRkYmQ3MGIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4 ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC01MDIs NiArNTAyLDEyIEBAIHR5cGVkZWYgc3RydWN0IFJlc3VsdFJlbEluZm8KIAkvKiB0cnVlIGlm IHRoZSBhYm92ZSBoYXMgYmVlbiBjb21wdXRlZCAqLwogCWJvb2wJCXJpX2V4dHJhVXBkYXRl ZENvbHNfdmFsaWQ7CiAKKwkvKgorCSAqIEZvciBVUERBVEUgYSBCaXRtYXBzZXQgb2YgdGhl IGF0dHJpYnV0ZXMgdGhhdCBhcmUgYm90aCBpbmRleGVkIGFuZCBoYXZlCisJICogY2hhbmdl ZCBpbiB2YWx1ZS4KKwkgKi8KKwlCaXRtYXBzZXQgICpyaV9DaGFuZ2VkSW5kZXhlZENvbHM7 CisKIAkvKiBQcm9qZWN0aW9uIHRvIGdlbmVyYXRlIG5ldyB0dXBsZSBpbiBhbiBJTlNFUlQv VVBEQVRFICovCiAJUHJvamVjdGlvbkluZm8gKnJpX3Byb2plY3ROZXc7CiAJLyogU2xvdCB0 byBob2xkIHRoYXQgdHVwbGUgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3Jl bC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKaW5kZXggMjM2ODMwZjZiOTMuLjEwZTVl OTA0NGVlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9yZWwuaAorKysgYi9zcmMv aW5jbHVkZS91dGlscy9yZWwuaApAQCAtMTYyLDggKzE2Miw4IEBAIHR5cGVkZWYgc3RydWN0 IFJlbGF0aW9uRGF0YQogCUJpdG1hcHNldCAgKnJkX2tleWF0dHI7CQkvKiBjb2xzIHRoYXQg Y2FuIGJlIHJlZidkIGJ5IGZvcmVpZ24ga2V5cyAqLwogCUJpdG1hcHNldCAgKnJkX3BrYXR0 cjsJCS8qIGNvbHMgaW5jbHVkZWQgaW4gcHJpbWFyeSBrZXkgKi8KIAlCaXRtYXBzZXQgICpy ZF9pZGF0dHI7CQkvKiBpbmNsdWRlZCBpbiByZXBsaWNhIGlkZW50aXR5IGluZGV4ICovCi0J Qml0bWFwc2V0ICAqcmRfaG90YmxvY2tpbmdhdHRyOyAvKiBjb2xzIGJsb2NraW5nIEhPVCB1 cGRhdGUgKi8KIAlCaXRtYXBzZXQgICpyZF9zdW1tYXJpemVkYXR0cjsJLyogY29scyBpbmRl eGVkIGJ5IHN1bW1hcml6aW5nIGluZGV4ZXMgKi8KKwlCaXRtYXBzZXQgICpyZF9pbmRleGVk YXR0cjsgLyogYWxsIGNvbHMgcmVmZXJlbmNlZCBieSBpbmRleGVzICovCiAKIAlQdWJsaWNh dGlvbkRlc2MgKnJkX3B1YmRlc2M7CS8qIHB1YmxpY2F0aW9uIGRlc2NyaXB0b3IsIG9yIE5V TEwgKi8KIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsY2FjaGUuaCBiL3Ny Yy9pbmNsdWRlL3V0aWxzL3JlbGNhY2hlLmgKaW5kZXggMjcwMDIyNDkzOWEuLjU3YjQ2ZWU1 NGU1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9yZWxjYWNoZS5oCisrKyBiL3Ny Yy9pbmNsdWRlL3V0aWxzL3JlbGNhY2hlLmgKQEAgLTY5LDggKzY5LDggQEAgdHlwZWRlZiBl bnVtIEluZGV4QXR0ckJpdG1hcEtpbmQKIAlJTkRFWF9BVFRSX0JJVE1BUF9LRVksCiAJSU5E RVhfQVRUUl9CSVRNQVBfUFJJTUFSWV9LRVksCiAJSU5ERVhfQVRUUl9CSVRNQVBfSURFTlRJ VFlfS0VZLAotCUlOREVYX0FUVFJfQklUTUFQX0hPVF9CTE9DS0lORywKIAlJTkRFWF9BVFRS X0JJVE1BUF9TVU1NQVJJWkVELAorCUlOREVYX0FUVFJfQklUTUFQX0lOREVYRUQsCiB9IElu ZGV4QXR0ckJpdG1hcEtpbmQ7CiAKIGV4dGVybiBCaXRtYXBzZXQgKlJlbGF0aW9uR2V0SW5k ZXhBdHRyQml0bWFwKFJlbGF0aW9uIHJlbGF0aW9uLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9nZW5lcmF0ZWRfdmlydHVhbC5vdXQgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2dlbmVyYXRlZF92aXJ0dWFsLm91dAppbmRleCAyNDllNjhiZTY1NC4u YzJiM2NhYjJmYTMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ2Vu ZXJhdGVkX3ZpcnR1YWwub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ2Vu ZXJhdGVkX3ZpcnR1YWwub3V0CkBAIC0yODcsNyArMjg3LDcgQEAgREVUQUlMOiAgQ29sdW1u ICJiIiBpcyBhIGdlbmVyYXRlZCBjb2x1bW4uCiBJTlNFUlQgSU5UTyBndGVzdDF2IFZBTFVF UyAoOCwgREVGQVVMVCksICg5LCBERUZBVUxUKTsgIC0tIGVycm9yCiBFUlJPUjogIGNhbm5v dCBpbnNlcnQgYSBub24tREVGQVVMVCB2YWx1ZSBpbnRvIGNvbHVtbiAiYiIKIERFVEFJTDog IENvbHVtbiAiYiIgaXMgYSBnZW5lcmF0ZWQgY29sdW1uLgotU0VMRUNUICogRlJPTSBndGVz dDF2OworU0VMRUNUICogRlJPTSBndGVzdDF2IE9SREVSIEJZIGE7CiAgYSB8IGIgIAogLS0t Ky0tLS0KICAzIHwgIDYKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv dXBkYXRhYmxlX3ZpZXdzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdXBkYXRh YmxlX3ZpZXdzLm91dAppbmRleCA5Y2VhNTM4YjhlOC4uNDg3N2ExZGRjZTkgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdXBkYXRhYmxlX3ZpZXdzLm91dAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3VwZGF0YWJsZV92aWV3cy5vdXQKQEAgLTM3 MiwxNSArMzcyLDE1IEBAIElOU0VSVCBJTlRPIHJ3X3ZpZXcxNiAoYSwgYikgVkFMVUVTICgz LCAnUm93IDMnKTsgLS0gc2hvdWxkIGJlIE9LCiBVUERBVEUgcndfdmlldzE2IFNFVCBhPTMs IGFhPS0zIFdIRVJFIGE9MzsgLS0gc2hvdWxkIGZhaWwKIEVSUk9SOiAgbXVsdGlwbGUgYXNz aWdubWVudHMgdG8gc2FtZSBjb2x1bW4gImEiCiBVUERBVEUgcndfdmlldzE2IFNFVCBhYT0t MyBXSEVSRSBhPTM7IC0tIHNob3VsZCBiZSBPSwotU0VMRUNUICogRlJPTSBiYXNlX3RibDsK K1NFTEVDVCAqIEZST00gYmFzZV90YmwgT1JERVIgQlkgYTsKICBhICB8ICAgYiAgICAKIC0t LS0rLS0tLS0tLS0KKyAtMyB8IFJvdyAzCiAgLTIgfCBSb3cgLTIKICAtMSB8IFJvdyAtMQog ICAwIHwgUm93IDAKICAgMSB8IFJvdyAxCiAgIDIgfCBSb3cgMgotIC0zIHwgUm93IDMKICg2 IHJvd3MpCiAKIERFTEVURSBGUk9NIHJ3X3ZpZXcxNiBXSEVSRSBhPS0zOyAtLSBzaG91bGQg YmUgT0sKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dlbmVyYXRlZF92aXJ0 dWFsLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dlbmVyYXRlZF92aXJ0dWFsLnNxbApp bmRleCA4MTE1MmIzOWE3OS4uNzRhYjgzZGNmZjAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2dlbmVyYXRlZF92aXJ0dWFsLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9nZW5lcmF0ZWRfdmlydHVhbC5zcWwKQEAgLTEyNyw3ICsxMjcsNyBAQCBBTFRFUiBW SUVXIGd0ZXN0MXYgQUxURVIgQ09MVU1OIGIgU0VUIERFRkFVTFQgMTAwOwogSU5TRVJUIElO VE8gZ3Rlc3QxdiBWQUxVRVMgKDgsIERFRkFVTFQpOyAgLS0gZXJyb3IKIElOU0VSVCBJTlRP IGd0ZXN0MXYgVkFMVUVTICg4LCBERUZBVUxUKSwgKDksIERFRkFVTFQpOyAgLS0gZXJyb3IK IAotU0VMRUNUICogRlJPTSBndGVzdDF2OworU0VMRUNUICogRlJPTSBndGVzdDF2IE9SREVS IEJZIGE7CiBERUxFVEUgRlJPTSBndGVzdDF2IFdIRVJFIGEgPj0gNTsKIERST1AgVklFVyBn dGVzdDF2OwogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC91cGRhdGFibGVf dmlld3Muc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvdXBkYXRhYmxlX3ZpZXdzLnNxbApp bmRleCAxNjM1YWRkZTJkNC4uMTYwZTc3OTk3MTUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL3VwZGF0YWJsZV92aWV3cy5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9z cWwvdXBkYXRhYmxlX3ZpZXdzLnNxbApAQCAtMTI1LDcgKzEyNSw3IEBAIElOU0VSVCBJTlRP IHJ3X3ZpZXcxNiBWQUxVRVMgKDMsICdSb3cgMycsIDMpOyAtLSBzaG91bGQgZmFpbAogSU5T RVJUIElOVE8gcndfdmlldzE2IChhLCBiKSBWQUxVRVMgKDMsICdSb3cgMycpOyAtLSBzaG91 bGQgYmUgT0sKIFVQREFURSByd192aWV3MTYgU0VUIGE9MywgYWE9LTMgV0hFUkUgYT0zOyAt LSBzaG91bGQgZmFpbAogVVBEQVRFIHJ3X3ZpZXcxNiBTRVQgYWE9LTMgV0hFUkUgYT0zOyAt LSBzaG91bGQgYmUgT0sKLVNFTEVDVCAqIEZST00gYmFzZV90Ymw7CitTRUxFQ1QgKiBGUk9N IGJhc2VfdGJsIE9SREVSIEJZIGE7CiBERUxFVEUgRlJPTSByd192aWV3MTYgV0hFUkUgYT0t MzsgLS0gc2hvdWxkIGJlIE9LCiAtLSBSZWFkLW9ubHkgdmlld3MKIElOU0VSVCBJTlRPIHJv X3ZpZXcxNyBWQUxVRVMgKDMsICdST1cgMycpOwotLSAKMi41MS4yCgo= --2e386174da524699aee922c1c73d201d--