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 1vubXV-00FVIb-20 for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Feb 2026 19:24:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vubXU-00Elva-1c for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Feb 2026 19:24:16 +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 1vubXT-00ElvS-1Y for pgsql-hackers@lists.postgresql.org; Mon, 23 Feb 2026 19:24:16 +0000 Received: from fhigh-b2-smtp.messagingengine.com ([202.12.124.153]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vubXP-00000000umt-0cwS for pgsql-hackers@postgresql.org; Mon, 23 Feb 2026 19:24:15 +0000 Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailfhigh.stl.internal (Postfix) with ESMTP id EDEBE7A0170; Mon, 23 Feb 2026 14:24:08 -0500 (EST) Received: from phl-imap-14 ([10.202.2.87]) by phl-compute-02.internal (MEProxy); Mon, 23 Feb 2026 14:24:09 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=burd.me; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm1; t=1771874647; x=1771961047; bh=CoHj7m0iQR fWXxHC4MD4M8rmDRsY6MLYPnJ5K7rXOaI=; b=3j8MU26VSx7W/IhbgMpYSHgirB V7HcPljW5+bl94IrwcG9jgFP/6dJL4mjhzSFEWN8UcZb35PFl91zhzLGIlAoiBPt 4BFCVFW4aKODTQ09I3x0YQXosjKWl0G7TJczu12aWAEr+RhKA+OoRzs5422reL8c M1no46AuDFIEmp1MJgtNXTvNvqSOr/wPkZR6/ehSWurDSCEJhwDQ+P7Q4fYtWHEu 0t9qNf4HhQPl7VqN5ILyZ+3TnuSeirtkHIqWWRKs73AeN1V9qlF5aEM4DFqB2GP6 Aj/f/kKI5asVZTgEmitAFchhfeesB06H9jzHPsNBggyQsgcqJQy8AuEyt1Iw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t= 1771874647; x=1771961047; bh=CoHj7m0iQRfWXxHC4MD4M8rmDRsY6MLYPnJ 5K7rXOaI=; b=mx77XsE7s1v9a5LwrMd7UxJooFClGIeVOC1ZZDWyZZ9rbdDjhTM GE7oD/LmiccrJaD9oWKdgk5snvXHzfzAMpEYHECmjDRlo9zf5c8mvThQmoM1+ZuX pGMk1HSg03gHq/dB5OTqtJkqFdELATVu6nV+XuBkaTad8YFlGL9MbwSau+8aVNI0 oD5L2gx8KKpA1K5l3tj7W2W1/bE3e0N78QjnSDBc/VE/vO3w4KQWpQIdcGGuCjGk 7C8Tb8fuM6UAjzuC62Gl73ZBCe6CoJBmTqmpNmn8sgBusVSQeL7FBuQj1V39pc8M WvA3BX12YLySUqWQITrWpT1wfpfiMv2q5qw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefgedrtddtgddvfeektdeiucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucenucfjughrpefoggffhffvvefkjghfufgtsehmtderre ertddtnecuhfhrohhmpedfifhrvghguceuuhhrugdfuceoghhrvghgsegsuhhrugdrmhgv qeenucggtffrrghtthgvrhhnpefhveelheeffeffudelvddutdfghfeileeikeeufefhhf elvdffuddvvdejleekleenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgr ihhlfhhrohhmpehgrhgvghessghurhgurdhmvgdpnhgspghrtghpthhtohepvddpmhhoug gvpehsmhhtphhouhhtpdhrtghpthhtohepphhgshhqlhesjhdquggrvhhishdrtghomhdp rhgtphhtthhopehpghhsqhhlqdhhrggtkhgvrhhssehpohhsthhgrhgvshhqlhdrohhrgh X-ME-Proxy: Feedback-ID: i675e48f3:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id 67C61C40075; Mon, 23 Feb 2026 14:24:07 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: A1gxZgRQNkgk Date: Mon, 23 Feb 2026 14:23:39 -0500 From: "Greg Burd" To: pgsql-hackers Cc: "Jeff Davis" Message-Id: In-Reply-To: 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> <3e1b9075c92808a7356e79087ba51910e5db5a30.camel@j-davis.com> Subject: Re: Expanding HOT updates for expression and partial indexes Content-Type: multipart/mixed; boundary=1580f5491ceb474092467f7b9d85561b List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --1580f5491ceb474092467f7b9d85561b Content-Type: text/plain Content-Transfer-Encoding: 7bit Hello. Attached is a new patch set that fixes a few issues identified in the last set. 0001 - creates a new way to identify the set of attributes both modified by the update and referenced by one or more indexes on the target relation being updated. This patch keeps the HeapDetermineColumnsInfo() path within heap_update() for calls from simple_heap_update() when modified_attrs_valid is set to false. I'm not a huge fan of this, but it does serve as a way to illustrate a minimal set of changes easing review a bit. 0002 - splits out the top portion of heap_update() into both heapam_tuple_update() and simple_heap_update(), adds a few helper functions and tries to reduce repeated code. The goal here was to remove some of the mess related to the various bitmaps used to make decisions during the update. Performance tests so far haven't shown a regression of note for this set of changes. I'm still working on: a) cleaning this up a bit more b) create ExecCheckUpdateRequiresReplicaId() in executor c) look for a way to cleanly pass/maintain per-table AM state during update d) root cause for difference in tests e) look into UPDATE WHERE > 1 row performance best. -greg --1580f5491ceb474092467f7b9d85561b Content-Disposition: attachment; filename*0="v20260226-0001-Idenfity-modified-indexed-attributes-in-th.pat"; filename*1="ch" Content-Type: text/x-patch; name="=?UTF-8?Q?v20260226-0001-Idenfity-modified-indexed-attributes-in-th.patc?= =?UTF-8?Q?h?=" Content-Transfer-Encoding: base64 RnJvbSA5YWRlMjg3NDNlZjU1N2I0NzI3ZDM5Mzg4MTk0Y2M2YzU2OTUyNTAzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTog U3VuLCAyIE5vdiAyMDI1IDExOjM2OjIwIC0wNTAwClN1YmplY3Q6IFtQQVRDSCB2MjAyNjAy MjYgMS8yXSBJZGVuZml0eSBtb2RpZmllZCBpbmRleGVkIGF0dHJpYnV0ZXMgaW4gdGhlCiBl eGVjdXRvciBvbiBVUERBVEUKClJlZmFjdG9yIGV4ZWN1dG9yIHVwZGF0ZSBsb2dpYyB0byBk ZXRlcm1pbmUgd2hpY2ggaW5kZXhlZCBjb2x1bW5zIGhhdmUKYWN0dWFsbHkgY2hhbmdlZCBk dXJpbmcgYW4gVVBEQVRFIG9wZXJhdGlvbiByYXRoZXIgdGhhbiBsZWF2aW5nIHRoaXMgdXAK dG8gSGVhcERldGVybWluZUNvbHVtbnNJbmZvKCkgaW4gaGVhcF91cGRhdGUoKS4KCkV4ZWND aGVja0luZGV4ZWRBdHRyc0ZvckNoYW5nZXMoKSByZXBsYWNlcyBIZWFwRGV0ZXJtaW5lc0Nv bHVtbnNJbmZvKCkKYW5kIGlzIGNhbGxlZCBiZWZvcmUgdGFibGVfdHVwbGVfdXBkYXRlKCkg Y3J1Y2lhbGx5IHdpdGhvdXQgdGhlIG5lZWQKZm9yIGFuIGV4Y2x1c2l2ZSBidWZmZXIgbG9j ayBvbiB0aGUgcGFnZSB0aGF0IGhvbGRzIHRoZSB0dXBsZSBiZWluZwp1cGRhdGVkLiAgVGhp cyByZWR1Y2VzIHRoZSB0aW1lIHRoZSBsb2NrIGlzIGhlbGQgbGF0ZXIgd2l0aGluCmhlYXBh bV90dXBsZV91cGRhdGUoKSBhbmQgaGVhcF91cGRhdGUoKS4KCkV4ZWNDaGVja0luZGV4ZWRB dHRyc0ZvckNoYW5nZXMoKSBpbiB0dXJuIHVzZXMgRXhlY0NvbXBhcmVTbG90QXR0cnMoKSB0 bwppZGVudGlmeSB3aGljaCBhdHRyaWJ1dGVzIGhhdmUgY2hhbmdlZCBhbmQgdGhlbiBpbnRl cnNlY3RzIHRoYXQgd2l0aCB0aGUKc2V0IG9mIGluZGV4ZWQgYXR0cmlidXRlcyB0byBpZGVu dGlmeSB0aGUgbW9kaWZpZWQgaW5kZXhlZCBzZXQuCgpCZXNpZGVzIGlkZW50aWZ5aW5nIHRo ZSBzZXQgb2YgbW9kaWZpZWQgaW5kZXhlZCBhdHRyaWJ1dGVzCkhlYXBEZXRlcm1pbmVDb2x1 bW5zSW5mbygpIHdhcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBwYXJ0IG9mIHRoZSBsb2dpYwpp bnZvbGVkIGluIHRoZSBkZWNpc2lvbiB0byBpbmNsdWRlIHRoZSByZXBsaWNhIGlkZW50aXR5 IGtleSBvciBub3QuClRoaXMgbm93IGhhcHBlbnMgaW4gaGVhcF91cGRhdGUoKSB3aGVuIG1v ZGlmaWVkX2F0dHJzX3ZhbGlkIGlzIGZhbHNlLgoKQ2F0YWxvZyB0dXBsZSB1cGRhdGVzIHVz ZSBzaW1wbGVfaGVhcF91cGRhdGUoKSBhbmQgZG9uJ3QgcGFzcyBhCm1vZGlmaWVkX2F0dHJz IEJpdG1hcHNldCBpbnRvIGhlYXBfdXBkYXRlKCkgaW5kaWNhdGVkIGJ5IHRoZQptb2RpZmll ZF9hdHRyc192YWxpZCBib29sIHNldCB0byBmYWxzZS4KClVwZGF0ZXMgc3RlbW1pbmcgZnJv bSBsb2dpY2FsIHJlcGxpY2F0aW9uIGFsc28gdXNlIHRoZSBuZXcKRXhlY0NoZWNrSW5kZXhl ZEF0dHJzRm9yQ2hhbmdlcygpIGluIEV4ZWNTaW1wbGVSZWxhdGlvblVwZGF0ZSgpLgoKQmVm b3JlIHJvdyB0cmlnZ2VycyBvbiBVUERBVEUgbWF5IHVzZSBoZWFwX21vZGlmeV90dXBsZSgp IHRvIHVwZGF0ZQphdHRyaWJ1dGVzIG5vdCBpZGVudGlmaWVkIGJ5IEV4ZWNHZXRBbGxVcGRh dGVkQ29scygpIGFzIGlzIHRoZSBjYXNlIGluCnRzdmVjdG9yX3VwZGF0ZV90cmlnZ2VyKCku ICBFeGVjQlJVcGRhdGVUcmlnZ2VycygpIG5vdyBpZGVudGlmaWVzCmNoYW5nZXMgdG8gaW5k ZXhlZCBjb2x1bW5zIG5vdCBmb3VuZCBieSBFeGVjR2V0QWxsVXBkYXRlQ29scygpCmFuZCBh ZGRzIHRoZWlyIGF0dHJpYnV0ZXMgdG8gcmlfZXh0cmFVcGRhdGVkQ29scy4gIFNlZQp0c2Vh cmNoLnNxbCB0ZXN0cyBmb3IgYW4gZXhhbXBsZSBvZiB0aGlzLgotLS0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbS5jICAgICAgICAgfCA4MCArKysrKysrKysrKysrKysrKysr KystLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgfCAgNyAr LS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMgICAgICAgfCAgNSArLQog c3JjL2JhY2tlbmQvY29tbWFuZHMvdHJpZ2dlci5jICAgICAgICAgICB8IDIwICsrKysrLQog c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMgICB8ICA3ICsrLQogc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jICAgICAgICB8IDc4ICsrKysrKysrKysr KysrKysrKysrKysrCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYyAg IHwgNzggKysrKysrKysrKysrKysrKysrKystLS0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvd29ya2VyLmMgfCAxMCArLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3Jl bGNhY2hlLmMgICAgICAgfCAxNSArKysrKwogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5o ICAgICAgICAgICAgICB8ICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAg ICAgICAgICAgfCAgOCArKy0KIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggICAg ICAgICAgfCAgOCArKysKIHNyYy9pbmNsdWRlL3V0aWxzL3JlbC5oICAgICAgICAgICAgICAg ICAgfCAgMSArCiBzcmMvaW5jbHVkZS91dGlscy9yZWxjYWNoZS5oICAgICAgICAgICAgIHwg IDEgKwogMTQgZmlsZXMgY2hhbmdlZCwgMjgzIGluc2VydGlvbnMoKyksIDM2IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKaW5kZXggOThkNTNjYWVlYTguLmFi OGI2ZGRiOGRlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0u YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwpAQCAtMzMxMSw2ICsz MzExLDcgQEAgVE1fUmVzdWx0CiBoZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29u c3QgSXRlbVBvaW50ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgbmV3dHVwLAogCQkJQ29tbWFu ZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAogCQkJVE1fRmFpbHVy ZURhdGEgKnRtZmQsIExvY2tUdXBsZU1vZGUgKmxvY2ttb2RlLAorCQkJY29uc3QgQml0bWFw c2V0ICptb2RpZmllZF9hdHRycywgYm9vbCBtb2RpZmllZF9hdHRyc192YWxpZCwKIAkJCVRV X1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKQogewogCVRNX1Jlc3VsdAlyZXN1bHQ7 CkBAIC0zMzIwLDcgKzMzMjEsNiBAQCBoZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwg Y29uc3QgSXRlbVBvaW50ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgbmV3dHVwLAogCUJpdG1h cHNldCAgKmtleV9hdHRyczsKIAlCaXRtYXBzZXQgICppZF9hdHRyczsKIAlCaXRtYXBzZXQg ICppbnRlcmVzdGluZ19hdHRyczsKLQlCaXRtYXBzZXQgICptb2RpZmllZF9hdHRyczsKIAlJ dGVtSWQJCWxwOwogCUhlYXBUdXBsZURhdGEgb2xkdHVwOwogCUhlYXBUdXBsZQloZWFwdHVw OwpAQCAtMzM0NSw3ICszMzQ1LDcgQEAgaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24s IGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIG5ld3R1cCwKIAlib29s CQlhbGxfdmlzaWJsZV9jbGVhcmVkX25ldyA9IGZhbHNlOwogCWJvb2wJCWNoZWNrZWRfbG9j a2VyczsKIAlib29sCQlsb2NrZXJfcmVtYWluczsKLQlib29sCQlpZF9oYXNfZXh0ZXJuYWwg PSBmYWxzZTsKKwlib29sCQlyZXBfaWRfa2V5X3JlcXVpcmVkID0gZmFsc2U7CiAJVHJhbnNh Y3Rpb25JZCB4bWF4X25ld190dXBsZSwKIAkJCQl4bWF4X29sZF90dXBsZTsKIAl1aW50MTYJ CWluZm9tYXNrX29sZF90dXBsZSwKQEAgLTM0ODcsOSArMzQ4Nyw2OSBAQCBoZWFwX3VwZGF0 ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpvdGlkLCBIZWFw VHVwbGUgbmV3dHVwLAogCSAqIG5ldyB0dXBsZSBzbyB3ZSBtdXN0IGluY2x1ZGUgaXQgYXMg cGFydCBvZiB0aGUgb2xkX2tleV90dXBsZS4gIFNlZQogCSAqIEV4dHJhY3RSZXBsaWNhSWRl bnRpdHkuCiAJICovCi0JbW9kaWZpZWRfYXR0cnMgPSBIZWFwRGV0ZXJtaW5lQ29sdW1uc0lu Zm8ocmVsYXRpb24sIGludGVyZXN0aW5nX2F0dHJzLAotCQkJCQkJCQkJCQkgIGlkX2F0dHJz LCAmb2xkdHVwLAotCQkJCQkJCQkJCQkgIG5ld3R1cCwgJmlkX2hhc19leHRlcm5hbCk7CisJ aWYgKCFtb2RpZmllZF9hdHRyc192YWxpZCkKKwl7CisJCWJvb2wJCWlkX2hhc19leHRlcm5h bCA9IGZhbHNlOworCisJCW1vZGlmaWVkX2F0dHJzID0gSGVhcERldGVybWluZUNvbHVtbnNJ bmZvKHJlbGF0aW9uLCBpbnRlcmVzdGluZ19hdHRycywKKwkJCQkJCQkJCQkJCSAgaWRfYXR0 cnMsICZvbGR0dXAsCisJCQkJCQkJCQkJCQkgIG5ld3R1cCwgJmlkX2hhc19leHRlcm5hbCk7 CisJCXJlcF9pZF9rZXlfcmVxdWlyZWQgPSBpZF9oYXNfZXh0ZXJuYWwgfHwKKwkJCWJtc19v dmVybGFwKG1vZGlmaWVkX2F0dHJzLCBpZF9hdHRycyk7CisJfQorCWVsc2UKKwl7CisJCS8q CisJCSAqIEV4dHJhY3RSZXBsaWNhdElkZW50aXR5KCkgbmVlZHMgdG8ga25vdyBpZiBhIG1v ZGlmaWVkIGF0dHJidXRlIGlzCisJCSAqIHVzZWQgYXMgYSByZXBsaWNhIGluZGVudGl0eSBv ciBpZiBhbnkgb2YgdGhlIHVubW9kaWZpZWQgaW5kZXhlZAorCQkgKiBhdHRyaWJ1dGVzIGlu IHRoZSBvbGQgdHVwbGUgYXJlIHN0b3JlZCBleHRlcm5hbGx5IGFuZCB1c2VkIGFzIGEKKwkJ ICogcmVwbGljYSBpZGVudGl0eS4KKwkJICovCisJCXJlcF9pZF9rZXlfcmVxdWlyZWQgPSBi bXNfb3ZlcmxhcChtb2RpZmllZF9hdHRycywgaWRfYXR0cnMpOworCQlpZiAoIXJlcF9pZF9r ZXlfcmVxdWlyZWQpCisJCXsKKwkJCUJpdG1hcHNldCAgKmF0dHJzOworCQkJVHVwbGVEZXNj CXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbGF0aW9uKTsKKwkJCWludAkJCWF0dGlk eCA9IC0xOworCisJCQkvKiBDaGVjayBhbGwgdW5tb2RpZmllZCBpbmRleGVkIHJlcGxpY2Eg aWRlbnRpdHkga2V5IGF0dHJpYnV0ZXMgKi8KKwkJCWF0dHJzID0gYm1zX2RpZmZlcmVuY2Uo aW50ZXJlc3RpbmdfYXR0cnMsIG1vZGlmaWVkX2F0dHJzKTsKKwkJCWF0dHJzID0gYm1zX2lu dF9tZW1iZXJzKGF0dHJzLCBpZF9hdHRycyk7CisKKwkJCXdoaWxlICgoYXR0aWR4ID0gYm1z X25leHRfbWVtYmVyKGF0dHJzLCBhdHRpZHgpKSA+PSAwKQorCQkJeworCQkJCS8qCisJCQkJ ICogYXR0aWR4IGlzIHplcm8tYmFzZWQsIGF0dHJudW0gaXMgdGhlIG5vcm1hbCBhdHRyaWJ1 dGUKKwkJCQkgKiBudW1iZXIKKwkJCQkgKi8KKwkJCQlBdHRyTnVtYmVyCWF0dHJudW0gPSBh dHRpZHggKyBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyOworCQkJCURhdHVt CQl2YWx1ZTsKKwkJCQlib29sCQlpc251bGw7CisKKwkJCQkvKgorCQkJCSAqIFN5c3RlbSBh dHRyaWJ1dGVzIGFyZSBub3QgYWRkZWQgaW50byBpbnRlcmVzdGluZ19hdHRycyBpbgorCQkJ CSAqIHJlbGNhY2hlLgorCQkJCSAqLworCQkJCUFzc2VydChhdHRybnVtID4gMCk7CisKKwkJ CQl2YWx1ZSA9IGhlYXBfZ2V0YXR0cigmb2xkdHVwLCBhdHRybnVtLCB0dXBkZXNjLCAmaXNu dWxsKTsKKworCQkJCS8qIE5vIG5lZWQgdG8gY2hlY2sgYXR0cmlidXRlcyB0aGF0IGNhbid0 IGJlIHN0b3JlZCBleHRlcm5hbGx5ICovCisJCQkJaWYgKGlzbnVsbCB8fAorCQkJCQlUdXBs ZURlc2NDb21wYWN0QXR0cih0dXBkZXNjLCBhdHRybnVtIC0gMSktPmF0dGxlbiAhPSAtMSkK KwkJCQkJY29udGludWU7CisKKwkJCQkvKiBDaGVjayBpZiB0aGUgb2xkIHR1cGxlJ3MgYXR0 cmlidXRlIGlzIHN0b3JlZCBleHRlcm5hbGx5ICovCisJCQkJaWYgKFZBUkFUVF9JU19FWFRF Uk5BTCgoc3RydWN0IHZhcmxlbmEgKikgRGF0dW1HZXRQb2ludGVyKHZhbHVlKSkpCisJCQkJ eworCQkJCQlyZXBfaWRfa2V5X3JlcXVpcmVkID0gdHJ1ZTsKKwkJCQkJYnJlYWs7CisJCQkJ fQorCQkJfQorCisJCQlibXNfZnJlZShhdHRycyk7CisJCX0KKwl9CiAKIAkvKgogCSAqIElm IHdlJ3JlIG5vdCB1cGRhdGluZyBhbnkgImtleSIgY29sdW1uLCB3ZSBjYW4gZ3JhYiBhIHdl YWtlciBsb2NrIHR5cGUuCkBAIC0zNzYzLDcgKzM4MjMsNyBAQCBsMjoKIAkJYm1zX2ZyZWUo c3VtX2F0dHJzKTsKIAkJYm1zX2ZyZWUoa2V5X2F0dHJzKTsKIAkJYm1zX2ZyZWUoaWRfYXR0 cnMpOwotCQlibXNfZnJlZShtb2RpZmllZF9hdHRycyk7CisJCS8qIG1vZGlmaWVkIGF0dHJz IGlzIHBhc3NlZCBpbiBhbmQgZnJlZSdkIGJ5IHRoZSBjYWxsZXIsIG9yIE5VTEwgKi8KIAkJ Ym1zX2ZyZWUoaW50ZXJlc3RpbmdfYXR0cnMpOwogCQlyZXR1cm4gcmVzdWx0OwogCX0KQEAg LTQxMTEsOCArNDE3MSw3IEBAIGwyOgogCSAqIGNvbHVtbnMgYXJlIG1vZGlmaWVkIG9yIGl0 IGhhcyBleHRlcm5hbCBkYXRhLgogCSAqLwogCW9sZF9rZXlfdHVwbGUgPSBFeHRyYWN0UmVw bGljYUlkZW50aXR5KHJlbGF0aW9uLCAmb2xkdHVwLAotCQkJCQkJCQkJCSAgIGJtc19vdmVy bGFwKG1vZGlmaWVkX2F0dHJzLCBpZF9hdHRycykgfHwKLQkJCQkJCQkJCQkgICBpZF9oYXNf ZXh0ZXJuYWwsCisJCQkJCQkJCQkJICAgcmVwX2lkX2tleV9yZXF1aXJlZCwKIAkJCQkJCQkJ CQkgICAmb2xkX2tleV9jb3BpZWQpOwogCiAJLyogTk8gRVJFUE9SVChFUlJPUikgZnJvbSBo ZXJlIHRpbGwgY2hhbmdlcyBhcmUgbG9nZ2VkICovCkBAIC00Mjc4LDcgKzQzMzcsNyBAQCBs MjoKIAlibXNfZnJlZShzdW1fYXR0cnMpOwogCWJtc19mcmVlKGtleV9hdHRycyk7CiAJYm1z X2ZyZWUoaWRfYXR0cnMpOwotCWJtc19mcmVlKG1vZGlmaWVkX2F0dHJzKTsKKwkvKiBtb2Rp ZmllZCBhdHRycyBpcyBwYXNzZWQgaW4gYW5kIGZyZWUnZCBieSB0aGUgY2FsbGVyLCBvciBO VUxMICovCiAJYm1zX2ZyZWUoaW50ZXJlc3RpbmdfYXR0cnMpOwogCiAJcmV0dXJuIFRNX09r OwpAQCAtNDU2Miw3ICs0NjIxLDggQEAgc2ltcGxlX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJl bGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsIEhlYXBUdXBsZSB0dXAKIAly ZXN1bHQgPSBoZWFwX3VwZGF0ZShyZWxhdGlvbiwgb3RpZCwgdHVwLAogCQkJCQkJIEdldEN1 cnJlbnRDb21tYW5kSWQodHJ1ZSksIEludmFsaWRTbmFwc2hvdCwKIAkJCQkJCSB0cnVlIC8q IHdhaXQgZm9yIGNvbW1pdCAqLyAsCi0JCQkJCQkgJnRtZmQsICZsb2NrbW9kZSwgdXBkYXRl X2luZGV4ZXMpOworCQkJCQkJICZ0bWZkLCAmbG9ja21vZGUsCisJCQkJCQkgTlVMTCwgZmFs c2UsIHVwZGF0ZV9pbmRleGVzKTsKIAlzd2l0Y2ggKHJlc3VsdCkKIAl7CiAJCWNhc2UgVE1f U2VsZk1vZGlmaWVkOgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVh cGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVy LmMKaW5kZXggYjgzZTIwMTNkNTAuLjI2OTA1OTNmZTRjIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTMxMiwxMiArMzEyLDExIEBAIGhlYXBh bV90dXBsZV9kZWxldGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVyIHRpZCwgQ29t bWFuZElkIGNpZCwKIAlyZXR1cm4gaGVhcF9kZWxldGUocmVsYXRpb24sIHRpZCwgY2lkLCBj cm9zc2NoZWNrLCB3YWl0LCB0bWZkLCBjaGFuZ2luZ1BhcnQpOwogfQogCi0KIHN0YXRpYyBU TV9SZXN1bHQKIGhlYXBhbV90dXBsZV91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Q b2ludGVyIG90aWQsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCQlDb21tYW5kSWQgY2lk LCBTbmFwc2hvdCBzbmFwc2hvdCwgU25hcHNob3QgY3Jvc3NjaGVjaywKLQkJCQkJYm9vbCB3 YWl0LCBUTV9GYWlsdXJlRGF0YSAqdG1mZCwKLQkJCQkJTG9ja1R1cGxlTW9kZSAqbG9ja21v ZGUsIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKQorCQkJCQlib29sIHdhaXQs IFRNX0ZhaWx1cmVEYXRhICp0bWZkLCBMb2NrVHVwbGVNb2RlICpsb2NrbW9kZSwKKwkJCQkJ Y29uc3QgQml0bWFwc2V0ICptb2RpZmllZF9hdHRycywgVFVfVXBkYXRlSW5kZXhlcyAqdXBk YXRlX2luZGV4ZXMpCiB7CiAJYm9vbAkJc2hvdWxkRnJlZSA9IHRydWU7CiAJSGVhcFR1cGxl CXR1cGxlID0gRXhlY0ZldGNoU2xvdEhlYXBUdXBsZShzbG90LCB0cnVlLCAmc2hvdWxkRnJl ZSk7CkBAIC0zMjgsNyArMzI3LDcgQEAgaGVhcGFtX3R1cGxlX3VwZGF0ZShSZWxhdGlvbiBy ZWxhdGlvbiwgSXRlbVBvaW50ZXIgb3RpZCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJdHVw bGUtPnRfdGFibGVPaWQgPSBzbG90LT50dHNfdGFibGVPaWQ7CiAKIAlyZXN1bHQgPSBoZWFw X3VwZGF0ZShyZWxhdGlvbiwgb3RpZCwgdHVwbGUsIGNpZCwgY3Jvc3NjaGVjaywgd2FpdCwK LQkJCQkJCSB0bWZkLCBsb2NrbW9kZSwgdXBkYXRlX2luZGV4ZXMpOworCQkJCQkJIHRtZmQs IGxvY2ttb2RlLCBtb2RpZmllZF9hdHRycywgdHJ1ZSwgdXBkYXRlX2luZGV4ZXMpOwogCUl0 ZW1Qb2ludGVyQ29weSgmdHVwbGUtPnRfc2VsZiwgJnNsb3QtPnR0c190aWQpOwogCiAJLyoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCmluZGV4IGRmZGExYWY0MTJlLi40MmFj ZDViMTdhOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0u YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCkBAIC0zNTksNiAr MzU5LDcgQEAgdm9pZAogc2ltcGxlX3RhYmxlX3R1cGxlX3VwZGF0ZShSZWxhdGlvbiByZWws IEl0ZW1Qb2ludGVyIG90aWQsCiAJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJ CQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCSAgY29uc3QgQml0bWFwc2V0ICptaXhf YXR0cnMsCiAJCQkJCQkgIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKQogewog CVRNX1Jlc3VsdAlyZXN1bHQ7CkBAIC0zNjksNyArMzcwLDkgQEAgc2ltcGxlX3RhYmxlX3R1 cGxlX3VwZGF0ZShSZWxhdGlvbiByZWwsIEl0ZW1Qb2ludGVyIG90aWQsCiAJCQkJCQkJCUdl dEN1cnJlbnRDb21tYW5kSWQodHJ1ZSksCiAJCQkJCQkJCXNuYXBzaG90LCBJbnZhbGlkU25h cHNob3QsCiAJCQkJCQkJCXRydWUgLyogd2FpdCBmb3IgY29tbWl0ICovICwKLQkJCQkJCQkJ JnRtZmQsICZsb2NrbW9kZSwgdXBkYXRlX2luZGV4ZXMpOworCQkJCQkJCQkmdG1mZCwgJmxv Y2ttb2RlLAorCQkJCQkJCQltaXhfYXR0cnMsCisJCQkJCQkJCXVwZGF0ZV9pbmRleGVzKTsK IAogCXN3aXRjaCAocmVzdWx0KQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3RyaWdnZXIuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RyaWdnZXIuYwppbmRleCA5 OGQ0MDJjMGEzYi4uNjRlZmE1NWRmZTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3RyaWdnZXIuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90cmlnZ2VyLmMKQEAg LTI5NzgsNiArMjk3OCw3IEBAIEV4ZWNCUlVwZGF0ZVRyaWdnZXJzKEVTdGF0ZSAqZXN0YXRl LCBFUFFTdGF0ZSAqZXBxc3RhdGUsCiAJCQkJCSBib29sIGlzX21lcmdlX3VwZGF0ZSkKIHsK IAlUcmlnZ2VyRGVzYyAqdHJpZ2Rlc2MgPSByZWxpbmZvLT5yaV9UcmlnRGVzYzsKKwlUdXBs ZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsaW5mby0+cmlfUmVsYXRpb25E ZXNjKTsKIAlUdXBsZVRhYmxlU2xvdCAqb2xkc2xvdCA9IEV4ZWNHZXRUcmlnZ2VyT2xkU2xv dChlc3RhdGUsIHJlbGluZm8pOwogCUhlYXBUdXBsZQluZXd0dXBsZSA9IE5VTEw7CiAJSGVh cFR1cGxlCXRyaWd0dXBsZTsKQEAgLTI5ODUsNyArMjk4Niw5IEBAIEV4ZWNCUlVwZGF0ZVRy aWdnZXJzKEVTdGF0ZSAqZXN0YXRlLCBFUFFTdGF0ZSAqZXBxc3RhdGUsCiAJYm9vbAkJc2hv dWxkX2ZyZWVfbmV3ID0gZmFsc2U7CiAJVHJpZ2dlckRhdGEgTG9jVHJpZ2dlckRhdGEgPSB7 MH07CiAJaW50CQkJaTsKLQlCaXRtYXBzZXQgICp1cGRhdGVkQ29sczsKKwlCaXRtYXBzZXQg ICp1cGRhdGVkQ29scyA9IE5VTEw7CisJQml0bWFwc2V0ICAqcmVtYWluaW5nQ29scyA9IE5V TEw7CisJQml0bWFwc2V0ICAqbW9kaWZpZWRDb2xzOwogCUxvY2tUdXBsZU1vZGUgbG9ja21v ZGU7CiAKIAkvKiBEZXRlcm1pbmUgbG9jayBtb2RlIHRvIHVzZSAqLwpAQCAtMzEyNyw2ICsz MTMwLDIxIEBAIEV4ZWNCUlVwZGF0ZVRyaWdnZXJzKEVTdGF0ZSAqZXN0YXRlLCBFUFFTdGF0 ZSAqZXBxc3RhdGUsCiAJaWYgKHNob3VsZF9mcmVlX3RyaWcpCiAJCWhlYXBfZnJlZXR1cGxl KHRyaWd0dXBsZSk7CiAKKwkvKgorCSAqIEJlZm9yZSBVUERBVEUgdHJpZ2dlcnMgbWF5IGhh dmUgdXBkYXRlZCBhdHRyaWJ1dGVzIG5vdCBrbm93biB0bworCSAqIEV4ZWNHZXRBbGxVcGRh dGVkQ29sdW1ucygpIHVzaW5nIGhlYXBfbW9kaWZ5X3R1cGxlKCkgb3IKKwkgKiBoZWFwX21v ZGlmaXlfdHVwbGVfYnlfY29scygpLiAgRmluZCBhbmQgcmVjb3JkIHRob3NlIG5vdy4KKwkg Ki8KKwlyZW1haW5pbmdDb2xzID0gYm1zX2FkZF9yYW5nZShOVUxMLCAxIC0gRmlyc3RMb3dJ bnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlciwKKwkJCQkJCQkgICB0dXBkZXNjLT5uYXR0cyAt IEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIpOworCXJlbWFpbmluZ0NvbHMg PSBibXNfZGVsX21lbWJlcnMocmVtYWluaW5nQ29scywgdXBkYXRlZENvbHMpOworCW1vZGlm aWVkQ29scyA9IEV4ZWNDb21wYXJlU2xvdEF0dHJzKHR1cGRlc2MsIHJlbWFpbmluZ0NvbHMs IG9sZHNsb3QsIG5ld3Nsb3QpOworCXJlbGluZm8tPnJpX2V4dHJhVXBkYXRlZENvbHMgPQor CQlibXNfYWRkX21lbWJlcnMocmVsaW5mby0+cmlfZXh0cmFVcGRhdGVkQ29scywgbW9kaWZp ZWRDb2xzKTsKKworCWJtc19mcmVlKHJlbWFpbmluZ0NvbHMpOworCWJtc19mcmVlKG1vZGlm aWVkQ29scyk7CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjUmVwbGljYXRpb24uYwppbmRleCAyNDk3ZWU3ZWRjNS4uOTEwZjNkYjM3Y2YgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCisrKyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCkBAIC0zMyw2ICszMyw3IEBA CiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2Fj aGUuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWxjYWNo ZS5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNj YWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3R5cGNhY2hlLmgiCkBAIC05MDYsNiArOTA3LDcg QEAgRXhlY1NpbXBsZVJlbGF0aW9uVXBkYXRlKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbElu Zm8sCiAJYm9vbAkJc2tpcF90dXBsZSA9IGZhbHNlOwogCVJlbGF0aW9uCXJlbCA9IHJlc3Vs dFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYzsKIAlJdGVtUG9pbnRlciB0aWQgPSAmKHNlYXJj aHNsb3QtPnR0c190aWQpOworCUJpdG1hcHNldCAgKm1peF9hdHRyczsKIAogCS8qCiAJICog V2Ugc3VwcG9ydCBvbmx5IG5vbi1zeXN0ZW0gdGFibGVzLCB3aXRoCkBAIC05NDQsOCArOTQ2 LDExIEBAIEV4ZWNTaW1wbGVSZWxhdGlvblVwZGF0ZShSZXN1bHRSZWxJbmZvICpyZXN1bHRS ZWxJbmZvLAogCQlpZiAocmVsLT5yZF9yZWwtPnJlbGlzcGFydGl0aW9uKQogCQkJRXhlY1Bh cnRpdGlvbkNoZWNrKHJlc3VsdFJlbEluZm8sIHNsb3QsIGVzdGF0ZSwgdHJ1ZSk7CiAKKwkJ bWl4X2F0dHJzID0gRXhlY0NoZWNrSW5kZXhlZEF0dHJzRm9yQ2hhbmdlcyhyZXN1bHRSZWxJ bmZvLAorCQkJCQkJCQkJCQkJCWVzdGF0ZSwgc2VhcmNoc2xvdCwgc2xvdCk7CisKIAkJc2lt cGxlX3RhYmxlX3R1cGxlX3VwZGF0ZShyZWwsIHRpZCwgc2xvdCwgZXN0YXRlLT5lc19zbmFw c2hvdCwKLQkJCQkJCQkJICAmdXBkYXRlX2luZGV4ZXMpOworCQkJCQkJCQkgIG1peF9hdHRy cywgJnVwZGF0ZV9pbmRleGVzKTsKIAogCQljb25mbGljdGluZGV4ZXMgPSByZXN1bHRSZWxJ bmZvLT5yaV9vbkNvbmZsaWN0QXJiaXRlckluZGV4ZXM7CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNUdXBsZXMuYwppbmRleCBiNzY4ZWFlOWU1My4uMTA2NGViZTg0NWIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYworKysgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjVHVwbGVzLmMKQEAgLTY2LDYgKzY2LDcgQEAKICNpbmNsdWRlICJub2Rl cy9ub2RlRnVuY3MuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUg InV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZGF0dW0uaCIKICNpbmNsdWRl ICJ1dGlscy9leHBhbmRlZGRhdHVtLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgi CiAjaW5jbHVkZSAidXRpbHMvdHlwY2FjaGUuaCIKQEAgLTE5MjksNiArMTkzMCw4MyBAQCBF eGVjRmV0Y2hTbG90SGVhcFR1cGxlRGF0dW0oVHVwbGVUYWJsZVNsb3QgKnNsb3QpCiAJcmV0 dXJuIHJldDsKIH0KIAorLyoKKyAqIEV4ZWNDb21wYXJlU2xvdEF0dHJzCisgKgorICogQ29t cGFyZSB0aGUgc3Vic2V0IG9mIGF0dHJpYnV0ZXMgaW4gYXR0cnMgYmV3dHdlZW4gVHVwbGVU YWJsZVNsb3RzIHRvIGRldGVjdAorICogd2hpY2ggYXR0cmlidXRlcyBoYXZlIGNoYW5nZWQu CisgKgorICogUmV0dXJucyBhIEJpdG1hcHNldCBvZiBhdHRyaWJ1dGUgaW5kaWNlcyAodXNp bmcKKyAqIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIgY29udmVudGlvbikg dGhhdCBkaWZmZXIgYmV0d2VlbiB0aGUgdHdvCisgKiBzbG90cy4KKyAqLworQml0bWFwc2V0 ICoKK0V4ZWNDb21wYXJlU2xvdEF0dHJzKFR1cGxlRGVzYyB0dXBkZXNjLCBjb25zdCBCaXRt YXBzZXQgKmF0dHJzLAorCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnMxLCBUdXBsZVRhYmxlU2xv dCAqczIpCit7CisJaW50CQkJYXR0aWR4ID0gLTE7CisJQml0bWFwc2V0ICAqbW9kaWZpZWQg PSBOVUxMOworCisJLyogWFhYIHdoYXQgaWYgc2xvdHMgZG9uJ3Qgc2hhcmUgdGhlIHNhbWUg dHVwbGVEZXNjcmlwdG9yLi4uICovCisJLyogQXNzZXJ0KHMxLT50dHNfdHVwbGVEZXNjcmlw dG9yID09IHMyLT50dHNfdHVwbGVEZXNjcmlwdG9yKTsgKi8KKworCXdoaWxlICgoYXR0aWR4 ID0gYm1zX25leHRfbWVtYmVyKGF0dHJzLCBhdHRpZHgpKSA+PSAwKQorCXsKKwkJLyogYXR0 aWR4IGlzIHplcm8tYmFzZWQsIGF0dHJudW0gaXMgdGhlIG5vcm1hbCBhdHRyaWJ1dGUgbnVt YmVyICovCisJCUF0dHJOdW1iZXIJYXR0cm51bSA9IGF0dGlkeCArIEZpcnN0TG93SW52YWxp ZEhlYXBBdHRyaWJ1dGVOdW1iZXI7CisJCURhdHVtCQl2YWx1ZTEsCisJCQkJCXZhbHVlMjsK KwkJYm9vbAkJbnVsbDEsCisJCQkJCW51bGwyOworCQlDb21wYWN0QXR0cmlidXRlICphdHQ7 CisKKwkJLyoKKwkJICogSWYgaXQncyBhIHdob2xlLXR1cGxlIHJlZmVyZW5jZSwgc2F5ICJu b3QgZXF1YWwiLiAgSXQncyBub3QgcmVhbGx5CisJCSAqIHdvcnRoIHN1cHBvcnRpbmcgdGhp cyBjYXNlLCBzaW5jZSBpdCBjb3VsZCBvbmx5IHN1Y2NlZWQgYWZ0ZXIgYQorCQkgKiBuby1v cCB1cGRhdGUsIHdoaWNoIGlzIGhhcmRseSBhIGNhc2Ugd29ydGggb3B0aW1pemluZyBmb3Iu CisJCSAqLworCQlpZiAoYXR0cm51bSA9PSAwKQorCQl7CisJCQltb2RpZmllZCA9IGJtc19h ZGRfbWVtYmVyKG1vZGlmaWVkLCBhdHRpZHgpOworCQkJY29udGludWU7CisJCX0KKworCQkv KgorCQkgKiBMaWtld2lzZSwgYXV0b21hdGljYWxseSBzYXkgIm5vdCBlcXVhbCIgZm9yIGFu eSBzeXN0ZW0gYXR0cmlidXRlCisJCSAqIG90aGVyIHRoYW4gdGFibGVPSUQ7IHdlIGNhbm5v dCBleHBlY3QgdGhlc2UgdG8gYmUgY29uc2lzdGVudCBpbiBhCisJCSAqIEhPVCBjaGFpbiwg b3IgZXZlbiB0byBiZSBzZXQgY29ycmVjdGx5IHlldCBpbiB0aGUgbmV3IHR1cGxlLgorCQkg Ki8KKwkJaWYgKGF0dHJudW0gPCAwKQorCQl7CisJCQlpZiAoYXR0cm51bSAhPSBUYWJsZU9p ZEF0dHJpYnV0ZU51bWJlcikKKwkJCXsKKwkJCQltb2RpZmllZCA9IGJtc19hZGRfbWVtYmVy KG1vZGlmaWVkLCBhdHRpZHgpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJYXR0 ID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwZGVzYywgYXR0cm51bSAtIDEpOworCQl2YWx1 ZTEgPSBzbG90X2dldGF0dHIoczEsIGF0dHJudW0sICZudWxsMSk7CisJCXZhbHVlMiA9IHNs b3RfZ2V0YXR0cihzMiwgYXR0cm51bSwgJm51bGwyKTsKKworCQkvKiBBIGNoYW5nZSB0by9m cm9tIE5VTEwsIHNvIG5vdCBlcXVhbCAqLworCQlpZiAobnVsbDEgIT0gbnVsbDIpCisJCXsK KwkJCW1vZGlmaWVkID0gYm1zX2FkZF9tZW1iZXIobW9kaWZpZWQsIGF0dGlkeCk7CisJCQlj b250aW51ZTsKKwkJfQorCisJCS8qIEJvdGggTlVMTCwgbm8gY2hhbmdlL3VubW9kaWZpZWQg Ki8KKwkJaWYgKG51bGwyKQorCQkJY29udGludWU7CisKKwkJaWYgKCFkYXR1bV9pbWFnZV9l cSh2YWx1ZTEsIHZhbHVlMiwgYXR0LT5hdHRieXZhbCwgYXR0LT5hdHRsZW4pKQorCQkJbW9k aWZpZWQgPSBibXNfYWRkX21lbWJlcihtb2RpZmllZCwgYXR0aWR4KTsKKwl9CisKKwlyZXR1 cm4gbW9kaWZpZWQ7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQkJCWNvbnZlbmllbmNlIGlu aXRpYWxpemF0aW9uIHJvdXRpbmVzCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVNb2RpZnlUYWJsZS5jCmluZGV4IDc5M2M3NmQ0ZjgyLi4xODc5NmJhZWQyOCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKQEAgLTE3LDYgKzE3 LDcgQEAKICAqCQlFeGVjTW9kaWZ5VGFibGUJCS0gcmV0cmlldmUgdGhlIG5leHQgdHVwbGUg ZnJvbSB0aGUgbm9kZQogICoJCUV4ZWNFbmRNb2RpZnlUYWJsZQktIHNodXQgZG93biB0aGUg TW9kaWZ5VGFibGUgbm9kZQogICoJCUV4ZWNSZVNjYW5Nb2RpZnlUYWJsZSAtIHJlc2NhbiB0 aGUgTW9kaWZ5VGFibGUgbm9kZQorICoJCUV4ZWNDaGVja0luZGV4ZWRBdHRyc0ZvckNoYW5n ZXMgLSBmaW5kIHNldCBvZiB1cGRhdGVkIGluZGV4ZWQgY29sdW1ucwogICoKICAqCSBOT1RF UwogICoJCVRoZSBNb2RpZnlUYWJsZSBub2RlIHJlY2VpdmVzIGlucHV0IGZyb20gaXRzIG91 dGVyUGxhbiwgd2hpY2ggaXMKQEAgLTU0LDYgKzU1LDcgQEAKIAogI2luY2x1ZGUgImFjY2Vz cy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgorI2luY2x1 ZGUgImFjY2Vzcy90dXBkZXNjLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKICNpbmNs dWRlICJjb21tYW5kcy90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY1BhcnRp dGlvbi5oIgpAQCAtMTg4LDYgKzE5MCw1MCBAQCBzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKkV4 ZWNNZXJnZU5vdE1hdGNoZWQoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LAogCQkJCQkJ CQkJCSAgIFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJCQkJCQkJCQkJICAgYm9v bCBjYW5TZXRUYWcpOwogCisvKgorICogRXhlY0NoZWNrSW5kZXhlZEF0dHJzRm9yQ2hhbmdl cworICoKKyAqIERldGVybWluZSB3aGljaCBpbmRleGVzIG5lZWQgdXBkYXRpbmcgYnkgZmlu ZGluZyB0aGUgc2V0IG9mIG1vZGlmaWVkIGluZGV4ZWQKKyAqIGF0dHJpYnV0ZXMuCisgKgor ICogVGhlIGdvYWwgaXMgZm9yIHRoZSBleGVjdXRvciB0byBrbm93LCBhaGVhZCBvZiBjYWxs aW5nIGludG8gdGhlIHRhYmxlIEFNIHRvCisgKiBwcm9jZXNzIHRoZSB1cGRhdGUgYW5kIGJl Zm9yZSBjYWxsaW5nIGludG8gdGhlIGluZGV4IEFNIGZvciBpbnNlcnRpbmcgbmV3CisgKiBp bmRleCB0dXBsZXMsIHdoaWNoIGF0dHJpYnV0ZXMgaW4gdGhlIG5ldyBUdXBsZVRhYmxlU2xv dCwgaWYgYW55LCB0cnVlbHkKKyAqIG5lY2Vzc2l0YXRlIGEgbmV3IGluZGV4IHR1cGxlLgor ICoKKyAqIFJldHVybnMgYSBCaXRtYXBzZXQgb2YgYXR0cmlidXRlcyB0aGF0IGludGVyc2Vj dHMgd2l0aCBpbmRleGVzIHdoaWNoIHJlcXVpcmUKKyAqIGEgbmV3IGluZGV4IHR1cGxlLgor ICovCitCaXRtYXBzZXQgKgorRXhlY0NoZWNrSW5kZXhlZEF0dHJzRm9yQ2hhbmdlcyhSZXN1 bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAorCQkJCQkJCQlFU3RhdGUgKmVzdGF0ZSwKKwkJ CQkJCQkJVHVwbGVUYWJsZVNsb3QgKm9sZF90dHMsCisJCQkJCQkJCVR1cGxlVGFibGVTbG90 ICpuZXdfdHRzKQoreworCVJlbGF0aW9uCXJlbGF0aW9uID0gcmVzdWx0UmVsSW5mby0+cmlf UmVsYXRpb25EZXNjOworCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihy ZWxhdGlvbik7CisJQml0bWFwc2V0ICAqYXR0cnMsCisJCQkgICAqbWl4X2F0dHJzOworCisJ LyogSWYgbm8gaW5kZXhlcywgd2UncmUgZG9uZSAqLworCWlmIChyZXN1bHRSZWxJbmZvLT5y aV9OdW1JbmRpY2VzID09IDApCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBGZXRjaCB0 aGUgc2V0IG9mIGF0dHJpYnV0ZXMgZXhwbGljaXR5IFNFVCBpbiB0aGUgVVBEQVRFIHN0YXRl bWVudCBvcgorCSAqIHNldCBieSBhIGJlZm9yZSByb3cgdHJpZ2dlciAoZXZlbiBpZiBub3Qg bWVudGlvbmVkIGluIHRoZSBTUUwpIGFuZCBnZXQKKwkgKiB0aGUgc3Vic2V0IHRoYXQgYXJl IGFsc28gaW5kZXhlZC4KKwkgKi8KKwlhdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0 bWFwKHJlbGF0aW9uLCBJTkRFWF9BVFRSX0JJVE1BUF9JTkRFWEVEKTsKKwlhdHRycyA9IGJt c19pbnRfbWVtYmVycyhhdHRycywgRXhlY0dldEFsbFVwZGF0ZWRDb2xzKHJlc3VsdFJlbElu Zm8sIGVzdGF0ZSkpOworCisJLyogRmluZCBvdXQgd2hpY2gsIGlmIGFueSwgbW9kaWZpZWQg aW5kZXhlZCBhdHRyaWJ1dGVzIGNoYW5nZWQgKi8KKwltaXhfYXR0cnMgPSBFeGVjQ29tcGFy ZVNsb3RBdHRycyh0dXBkZXNjLCBhdHRycywgb2xkX3R0cywgbmV3X3R0cyk7CisKKwlibXNf ZnJlZShhdHRycyk7CisKKwlyZXR1cm4gbWl4X2F0dHJzOworfQogCiAvKgogICogVmVyaWZ5 IHRoYXQgdGhlIHR1cGxlcyB0byBiZSBwcm9kdWNlZCBieSBJTlNFUlQgbWF0Y2ggdGhlCkBA IC0yMTk1LDE0ICsyMjQxLDE3IEBAIEV4ZWNVcGRhdGVQcmVwYXJlU2xvdChSZXN1bHRSZWxJ bmZvICpyZXN1bHRSZWxJbmZvLAogICovCiBzdGF0aWMgVE1fUmVzdWx0CiBFeGVjVXBkYXRl QWN0KE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwgUmVzdWx0UmVsSW5mbyAqcmVzdWx0 UmVsSW5mbywKLQkJCSAgSXRlbVBvaW50ZXIgdHVwbGVpZCwgSGVhcFR1cGxlIG9sZHR1cGxl LCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKLQkJCSAgYm9vbCBjYW5TZXRUYWcsIFVwZGF0ZUNv bnRleHQgKnVwZGF0ZUN4dCkKKwkJCSAgSXRlbVBvaW50ZXIgdHVwbGVpZCwgSGVhcFR1cGxl IG9sZHR1cGxlLCBUdXBsZVRhYmxlU2xvdCAqb2xkU2xvdCwKKwkJCSAgVHVwbGVUYWJsZVNs b3QgKnNsb3QsIGJvb2wgY2FuU2V0VGFnLCBVcGRhdGVDb250ZXh0ICp1cGRhdGVDeHQpCiB7 CiAJRVN0YXRlCSAgICplc3RhdGUgPSBjb250ZXh0LT5lc3RhdGU7CiAJUmVsYXRpb24JcmVz dWx0UmVsYXRpb25EZXNjID0gcmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjOwogCWJv b2wJCXBhcnRpdGlvbl9jb25zdHJhaW50X2ZhaWxlZDsKIAlUTV9SZXN1bHQJcmVzdWx0Owog CisJLyogVGhlIHNldCBvZiBtb2RpZmllZCBpbmRleGVkIGF0dHJpYnV0ZXMgdGhhdCB0cmln Z2VyIG5ldyBpbmRleCBlbnRyaWVzICovCisJQml0bWFwc2V0ICAqbWl4X2F0dHJzID0gTlVM TDsKKwogCXVwZGF0ZUN4dC0+Y3Jvc3NQYXJ0VXBkYXRlID0gZmFsc2U7CiAKIAkvKgpAQCAt MjMxOSw3ICsyMzY4LDE2IEBAIGxyZXBsYWNlOgogCQlFeGVjQ29uc3RyYWludHMocmVzdWx0 UmVsSW5mbywgc2xvdCwgZXN0YXRlKTsKIAogCS8qCi0JICogcmVwbGFjZSB0aGUgaGVhcCB0 dXBsZQorCSAqIE5leHQgdXAgd2UgbmVlZCB0byBmaW5kIG91dCB0aGUgc2V0IG9mIGluZGV4 ZWQgYXR0cmlidXRlcyB0aGF0IGhhdmUKKwkgKiBjaGFuZ2VkIGluIHZhbHVlIGFuZCBzaG91 bGQgdHJpZ2dlciBhIG5ldyBpbmRleCB0dXBsZS4gIFdlIGNvdWxkIHN0YXJ0CisJICogd2l0 aCB0aGUgc2V0IG9mIHVwZGF0ZWQgY29sdW1ucyB2aWEgRXhlY0dldFVwZGF0ZWRDb2xzKCks IGJ1dCBpZiB3ZSBkbworCSAqIHdlIHdpbGwgb3Zlcmxvb2sgYXR0cmlidXRlcyBkaXJlY3Rs eSBtb2RpZmllZCBieSBoZWFwX21vZGlmeV90dXBsZSgpCisJICogd2hpY2ggYXJlIG5vdCBr bm93biB0byBFeGVjR2V0VXBkYXRlZENvbHMoKS4KKwkgKi8KKwltaXhfYXR0cnMgPSBFeGVj Q2hlY2tJbmRleGVkQXR0cnNGb3JDaGFuZ2VzKHJlc3VsdFJlbEluZm8sIGVzdGF0ZSwgb2xk U2xvdCwgc2xvdCk7CisKKwkvKgorCSAqIENhbGwgaW50byB0aGUgdGFibGUgQU0gdG8gdXBk YXRlIHRoZSBoZWFwIHR1cGxlLgogCSAqCiAJICogTm90ZTogaWYgZXNfY3Jvc3NjaGVja19z bmFwc2hvdCBpc24ndCBJbnZhbGlkU25hcHNob3QsIHdlIGNoZWNrIHRoYXQKIAkgKiB0aGUg cm93IHRvIGJlIHVwZGF0ZWQgaXMgdmlzaWJsZSB0byB0aGF0IHNuYXBzaG90LCBhbmQgdGhy b3cgYQpAQCAtMjMzMyw2ICsyMzkxLDcgQEAgbHJlcGxhY2U6CiAJCQkJCQkJCWVzdGF0ZS0+ ZXNfY3Jvc3NjaGVja19zbmFwc2hvdCwKIAkJCQkJCQkJdHJ1ZSAvKiB3YWl0IGZvciBjb21t aXQgKi8gLAogCQkJCQkJCQkmY29udGV4dC0+dG1mZCwgJnVwZGF0ZUN4dC0+bG9ja21vZGUs CisJCQkJCQkJCW1peF9hdHRycywKIAkJCQkJCQkJJnVwZGF0ZUN4dC0+dXBkYXRlSW5kZXhl cyk7CiAKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMjU1NSw4ICsyNjE0LDkgQEAgRXhlY1VwZGF0 ZShNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsIFJlc3VsdFJlbEluZm8gKnJlc3VsdFJl bEluZm8sCiAJCSAqLwogcmVkb19hY3Q6CiAJCWxvY2tlZHRpZCA9ICp0dXBsZWlkOwotCQly ZXN1bHQgPSBFeGVjVXBkYXRlQWN0KGNvbnRleHQsIHJlc3VsdFJlbEluZm8sIHR1cGxlaWQs IG9sZHR1cGxlLCBzbG90LAotCQkJCQkJCSAgIGNhblNldFRhZywgJnVwZGF0ZUN4dCk7CisK KwkJcmVzdWx0ID0gRXhlY1VwZGF0ZUFjdChjb250ZXh0LCByZXN1bHRSZWxJbmZvLCB0dXBs ZWlkLCBvbGR0dXBsZSwgb2xkU2xvdCwKKwkJCQkJCQkgICBzbG90LCBjYW5TZXRUYWcsICZ1 cGRhdGVDeHQpOwogCiAJCS8qCiAJCSAqIElmIEV4ZWNVcGRhdGVBY3QgcmVwb3J0cyB0aGF0 IGEgY3Jvc3MtcGFydGl0aW9uIHVwZGF0ZSB3YXMgZG9uZSwKQEAgLTM0MDYsOCArMzQ2Niw4 IEBAIGxtZXJnZV9tYXRjaGVkOgogCQkJCQlBc3NlcnQob2xkdHVwbGUgPT0gTlVMTCk7CiAK IAkJCQkJcmVzdWx0ID0gRXhlY1VwZGF0ZUFjdChjb250ZXh0LCByZXN1bHRSZWxJbmZvLCB0 dXBsZWlkLAotCQkJCQkJCQkJCSAgIE5VTEwsIG5ld3Nsb3QsIGNhblNldFRhZywKLQkJCQkJ CQkJCQkgICAmdXBkYXRlQ3h0KTsKKwkJCQkJCQkJCQkgICBOVUxMLCByZXN1bHRSZWxJbmZv LT5yaV9vbGRUdXBsZVNsb3QsCisJCQkJCQkJCQkJICAgbmV3c2xvdCwgY2FuU2V0VGFnLCAm dXBkYXRlQ3h0KTsKIAogCQkJCQkvKgogCQkJCQkgKiBBcyBpbiBFeGVjVXBkYXRlKCksIGlm IEV4ZWNVcGRhdGVBY3QoKSByZXBvcnRzIHRoYXQgYQpAQCAtMzQzMiw2ICszNDkyLDcgQEAg bG1lcmdlX21hdGNoZWQ6CiAJCQkJCQkJCQkgICB0dXBsZWlkLCBOVUxMLCBuZXdzbG90KTsK IAkJCQkJbXRzdGF0ZS0+bXRfbWVyZ2VfdXBkYXRlZCArPSAxOwogCQkJCX0KKwogCQkJCWJy ZWFrOwogCiAJCQljYXNlIENNRF9ERUxFVEU6CkBAIC00NTM5LDcgKzQ2MDAsNyBAQCBFeGVj TW9kaWZ5VGFibGUoUGxhblN0YXRlICpwc3RhdGUpCiAJCSAqIEZvciBVUERBVEUvREVMRVRF L01FUkdFLCBmZXRjaCB0aGUgcm93IGlkZW50aXR5IGluZm8gZm9yIHRoZSB0dXBsZQogCQkg KiB0byBiZSB1cGRhdGVkL2RlbGV0ZWQvbWVyZ2VkLiAgRm9yIGEgaGVhcCByZWxhdGlvbiwg dGhhdCdzIGEgVElEOwogCQkgKiBvdGhlcndpc2Ugd2UgbWF5IGhhdmUgYSB3aG9sZXJvdyBq dW5rIGF0dHIgdGhhdCBjYXJyaWVzIHRoZSBvbGQKLQkJICogdHVwbGUgaW4gdG90by4gIEtl ZXAgdGhpcyBpbiBzdGVwIHdpdGggdGhlIHBhcnQgb2YKKwkJICogdHVwbGUgaW4gdG90YWwu ICBLZWVwIHRoaXMgaW4gc3RlcCB3aXRoIHRoZSBwYXJ0IG9mCiAJCSAqIEV4ZWNJbml0TW9k aWZ5VGFibGUgdGhhdCBzZXRzIHVwIHJpX1Jvd0lkQXR0Tm8uCiAJCSAqLwogCQlpZiAob3Bl cmF0aW9uID09IENNRF9VUERBVEUgfHwgb3BlcmF0aW9uID09IENNRF9ERUxFVEUgfHwKQEAg LTQ3MTksNiArNDc4MCw3IEBAIEV4ZWNNb2RpZnlUYWJsZShQbGFuU3RhdGUgKnBzdGF0ZSkK IAkJCQkvKiBOb3cgYXBwbHkgdGhlIHVwZGF0ZS4gKi8KIAkJCQlzbG90ID0gRXhlY1VwZGF0 ZSgmY29udGV4dCwgcmVzdWx0UmVsSW5mbywgdHVwbGVpZCwgb2xkdHVwbGUsCiAJCQkJCQkJ CSAgb2xkU2xvdCwgc2xvdCwgbm9kZS0+Y2FuU2V0VGFnKTsKKwogCQkJCWlmICh0dXBsb2Nr KQogCQkJCQlVbmxvY2tUdXBsZShyZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MsIHR1 cGxlaWQsCiAJCQkJCQkJCUlucGxhY2VVcGRhdGVUdXBsZUxvY2spOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKaW5kZXggYmFlOGMwMTEzOTAuLjhhOWI3 OGUyZTI4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dv cmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMK QEAgLTI5MTksNyArMjkxOSw2IEBAIGFwcGx5X2hhbmRsZV91cGRhdGVfaW50ZXJuYWwoQXBw bHlFeGVjdXRpb25EYXRhICplZGF0YSwKIAlUdXBsZVRhYmxlU2xvdCAqbG9jYWxzbG90ID0g TlVMTDsKIAlDb25mbGljdFR1cGxlSW5mbyBjb25mbGljdHR1cGxlID0gezB9OwogCWJvb2wJ CWZvdW5kOwotCU1lbW9yeUNvbnRleHQgb2xkY3R4OwogCiAJRXZhbFBsYW5RdWFsSW5pdCgm ZXBxc3RhdGUsIGVzdGF0ZSwgTlVMTCwgTklMLCAtMSwgTklMKTsKIAlFeGVjT3BlbkluZGlj ZXMocmVsaW5mbywgZmFsc2UpOwpAQCAtMjk1OCwxNSArMjk1NywxMyBAQCBhcHBseV9oYW5k bGVfdXBkYXRlX2ludGVybmFsKEFwcGx5RXhlY3V0aW9uRGF0YSAqZWRhdGEsCiAJCX0KIAog CQkvKiBQcm9jZXNzIGFuZCBzdG9yZSByZW1vdGUgdHVwbGUgaW4gdGhlIHNsb3QgKi8KLQkJ b2xkY3R4ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEdldFBlclR1cGxlTWVtb3J5Q29udGV4 dChlc3RhdGUpKTsKIAkJc2xvdF9tb2RpZnlfZGF0YShyZW1vdGVzbG90LCBsb2NhbHNsb3Qs IHJlbG1hcGVudHJ5LCBuZXd0dXApOwotCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4 KTsKIAogCQlFdmFsUGxhblF1YWxTZXRTbG90KCZlcHFzdGF0ZSwgcmVtb3Rlc2xvdCk7CiAK IAkJSW5pdENvbmZsaWN0SW5kZXhlcyhyZWxpbmZvKTsKIAotCQkvKiBEbyB0aGUgYWN0dWFs IHVwZGF0ZS4gKi8KKwkJLyogRmlyc3QgY2hlY2sgcHJpdmlsZWdlcyAqLwogCQlUYXJnZXRQ cml2aWxlZ2VzQ2hlY2socmVsaW5mby0+cmlfUmVsYXRpb25EZXNjLCBBQ0xfVVBEQVRFKTsK IAkJRXhlY1NpbXBsZVJlbGF0aW9uVXBkYXRlKHJlbGluZm8sIGVzdGF0ZSwgJmVwcXN0YXRl LCBsb2NhbHNsb3QsCiAJCQkJCQkJCSByZW1vdGVzbG90KTsKQEAgLTM1MjQsMTAgKzM1MjEs NyBAQCBhcHBseV9oYW5kbGVfdHVwbGVfcm91dGluZyhBcHBseUV4ZWN1dGlvbkRhdGEgKmVk YXRhLAogCQkJCSAqIEFwcGx5IHRoZSB1cGRhdGUgdG8gdGhlIGxvY2FsIHR1cGxlLCBwdXR0 aW5nIHRoZSByZXN1bHQgaW4KIAkJCQkgKiByZW1vdGVzbG90X3BhcnQuCiAJCQkJICovCi0J CQkJb2xkY3R4ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEdldFBlclR1cGxlTWVtb3J5Q29u dGV4dChlc3RhdGUpKTsKLQkJCQlzbG90X21vZGlmeV9kYXRhKHJlbW90ZXNsb3RfcGFydCwg bG9jYWxzbG90LCBwYXJ0X2VudHJ5LAotCQkJCQkJCQkgbmV3dHVwKTsKLQkJCQlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKKwkJCQlzbG90X21vZGlmeV9kYXRhKHJlbW90ZXNs b3RfcGFydCwgbG9jYWxzbG90LCBwYXJ0X2VudHJ5LCBuZXd0dXApOwogCiAJCQkJRXZhbFBs YW5RdWFsSW5pdCgmZXBxc3RhdGUsIGVzdGF0ZSwgTlVMTCwgTklMLCAtMSwgTklMKTsKIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKaW5kZXggNmI2MzRjOWZmZjEuLjU0N2Nm MWQwNTRkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKQEAgLTI0NzcsNiAr MjQ3Nyw3IEBAIFJlbGF0aW9uRGVzdHJveVJlbGF0aW9uKFJlbGF0aW9uIHJlbGF0aW9uLCBi b29sIHJlbWVtYmVyX3R1cGRlc2MpCiAJYm1zX2ZyZWUocmVsYXRpb24tPnJkX2lkYXR0cik7 CiAJYm1zX2ZyZWUocmVsYXRpb24tPnJkX2hvdGJsb2NraW5nYXR0cik7CiAJYm1zX2ZyZWUo cmVsYXRpb24tPnJkX3N1bW1hcml6ZWRhdHRyKTsKKwlibXNfZnJlZShyZWxhdGlvbi0+cmRf aW5kZXhlZGF0dHIpOwogCWlmIChyZWxhdGlvbi0+cmRfcHViZGVzYykKIAkJcGZyZWUocmVs YXRpb24tPnJkX3B1YmRlc2MpOwogCWlmIChyZWxhdGlvbi0+cmRfb3B0aW9ucykKQEAgLTUy NzgsNiArNTI3OSw3IEBAIFJlbGF0aW9uR2V0SW5kZXhQcmVkaWNhdGUoUmVsYXRpb24gcmVs YXRpb24pCiAgKgkJCQkJCQkJCWluZGV4IChlbXB0eSBpZiBGVUxMKQogICoJSU5ERVhfQVRU Ul9CSVRNQVBfSE9UX0JMT0NLSU5HCUNvbHVtbnMgdGhhdCBibG9jayB1cGRhdGVzIGZyb20g YmVpbmcgSE9UCiAgKglJTkRFWF9BVFRSX0JJVE1BUF9TVU1NQVJJWkVECUNvbHVtbnMgaW5j bHVkZWQgaW4gc3VtbWFyaXppbmcgaW5kZXhlcworICoJSU5ERVhfQVRUUl9CSVRNQVBfSU5E RVhFRAkJQ29sdW1ucyByZWZlcmVuY2VkIGJ5IGluZGV4ZXMKICAqCiAgKiBBdHRyaWJ1dGUg bnVtYmVycyBhcmUgb2Zmc2V0IGJ5IEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1i ZXIgc28gdGhhdAogICogd2UgY2FuIGluY2x1ZGUgc3lzdGVtIGF0dHJpYnV0ZXMgKGUuZy4s IE9JRCkgaW4gdGhlIGJpdG1hcCByZXByZXNlbnRhdGlvbi4KQEAgLTUzMDEsNiArNTMwMyw3 IEBAIFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKFJlbGF0aW9uIHJlbGF0aW9uLCBJbmRl eEF0dHJCaXRtYXBLaW5kIGF0dHJLaW5kKQogCUJpdG1hcHNldCAgKnBraW5kZXhhdHRyczsJ LyogY29sdW1ucyBpbiB0aGUgcHJpbWFyeSBpbmRleCAqLwogCUJpdG1hcHNldCAgKmlkaW5k ZXhhdHRyczsJLyogY29sdW1ucyBpbiB0aGUgcmVwbGljYSBpZGVudGl0eSAqLwogCUJpdG1h cHNldCAgKmhvdGJsb2NraW5nYXR0cnM7CS8qIGNvbHVtbnMgd2l0aCBIT1QgYmxvY2tpbmcg aW5kZXhlcyAqLworCUJpdG1hcHNldCAgKmluZGV4ZWRhdHRyczsJLyogY29sdW1ucyByZWZl cmVuY2VkIGJ5IGluZGV4ZXMgKi8KIAlCaXRtYXBzZXQgICpzdW1tYXJpemVkYXR0cnM7CS8q IGNvbHVtbnMgd2l0aCBzdW1tYXJpemluZyBpbmRleGVzICovCiAJTGlzdAkgICAqaW5kZXhv aWRsaXN0OwogCUxpc3QJICAgKm5ld2luZGV4b2lkbGlzdDsKQEAgLTUzMjQsNiArNTMyNyw4 IEBAIFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKFJlbGF0aW9uIHJlbGF0aW9uLCBJbmRl eEF0dHJCaXRtYXBLaW5kIGF0dHJLaW5kKQogCQkJCXJldHVybiBibXNfY29weShyZWxhdGlv bi0+cmRfaG90YmxvY2tpbmdhdHRyKTsKIAkJCWNhc2UgSU5ERVhfQVRUUl9CSVRNQVBfU1VN TUFSSVpFRDoKIAkJCQlyZXR1cm4gYm1zX2NvcHkocmVsYXRpb24tPnJkX3N1bW1hcml6ZWRh dHRyKTsKKwkJCWNhc2UgSU5ERVhfQVRUUl9CSVRNQVBfSU5ERVhFRDoKKwkJCQlyZXR1cm4g Ym1zX2NvcHkocmVsYXRpb24tPnJkX2luZGV4ZWRhdHRyKTsKIAkJCWRlZmF1bHQ6CiAJCQkJ ZWxvZyhFUlJPUiwgInVua25vd24gYXR0cktpbmQgJXUiLCBhdHRyS2luZCk7CiAJCX0KQEAg LTUzNjgsNiArNTM3Myw3IEBAIHJlc3RhcnQ6CiAJaWRpbmRleGF0dHJzID0gTlVMTDsKIAlo b3RibG9ja2luZ2F0dHJzID0gTlVMTDsKIAlzdW1tYXJpemVkYXR0cnMgPSBOVUxMOworCWlu ZGV4ZWRhdHRycyA9IE5VTEw7CiAJZm9yZWFjaChsLCBpbmRleG9pZGxpc3QpCiAJewogCQlP aWQJCQlpbmRleE9pZCA9IGxmaXJzdF9vaWQobCk7CkBAIC01NTAwLDEwICs1NTA2LDE0IEBA IHJlc3RhcnQ6CiAJCWJtc19mcmVlKGlkaW5kZXhhdHRycyk7CiAJCWJtc19mcmVlKGhvdGJs b2NraW5nYXR0cnMpOwogCQlibXNfZnJlZShzdW1tYXJpemVkYXR0cnMpOworCQkvKiBpbmRl eGVkYXR0cnMgbm90IHlldCBpbml0aWFsaXplZCAqLwogCiAJCWdvdG8gcmVzdGFydDsKIAl9 CiAKKwkvKiBTZXQgaW5kZXhlZCBhdHRyaWJ1dGVzIHRvIHRyYWNrIGFsbCByZWZlcmVuY2Vk IGF0dHJpYnV0ZXMgKi8KKwlpbmRleGVkYXR0cnMgPSBibXNfdW5pb24oaG90YmxvY2tpbmdh dHRycywgc3VtbWFyaXplZGF0dHJzKTsKKwogCS8qIERvbid0IGxlYWsgdGhlIG9sZCB2YWx1 ZXMgb2YgdGhlc2UgYml0bWFwcywgaWYgYW55ICovCiAJcmVsYXRpb24tPnJkX2F0dHJzdmFs aWQgPSBmYWxzZTsKIAlibXNfZnJlZShyZWxhdGlvbi0+cmRfa2V5YXR0cik7CkBAIC01NTE2 LDYgKzU1MjYsOCBAQCByZXN0YXJ0OgogCXJlbGF0aW9uLT5yZF9ob3RibG9ja2luZ2F0dHIg PSBOVUxMOwogCWJtc19mcmVlKHJlbGF0aW9uLT5yZF9zdW1tYXJpemVkYXR0cik7CiAJcmVs YXRpb24tPnJkX3N1bW1hcml6ZWRhdHRyID0gTlVMTDsKKwlibXNfZnJlZShyZWxhdGlvbi0+ cmRfaW5kZXhlZGF0dHIpOworCXJlbGF0aW9uLT5yZF9pbmRleGVkYXR0ciA9IE5VTEw7CiAK IAkvKgogCSAqIE5vdyBzYXZlIGNvcGllcyBvZiB0aGUgYml0bWFwcyBpbiB0aGUgcmVsY2Fj aGUgZW50cnkuICBXZSBpbnRlbnRpb25hbGx5CkBAIC01NTMwLDYgKzU1NDIsNyBAQCByZXN0 YXJ0OgogCXJlbGF0aW9uLT5yZF9pZGF0dHIgPSBibXNfY29weShpZGluZGV4YXR0cnMpOwog CXJlbGF0aW9uLT5yZF9ob3RibG9ja2luZ2F0dHIgPSBibXNfY29weShob3RibG9ja2luZ2F0 dHJzKTsKIAlyZWxhdGlvbi0+cmRfc3VtbWFyaXplZGF0dHIgPSBibXNfY29weShzdW1tYXJp emVkYXR0cnMpOworCXJlbGF0aW9uLT5yZF9pbmRleGVkYXR0ciA9IGJtc19jb3B5KGluZGV4 ZWRhdHRycyk7CiAJcmVsYXRpb24tPnJkX2F0dHJzdmFsaWQgPSB0cnVlOwogCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjeHQpOwogCkBAIC01NTQ2LDYgKzU1NTksOCBAQCByZXN0YXJ0 OgogCQkJcmV0dXJuIGhvdGJsb2NraW5nYXR0cnM7CiAJCWNhc2UgSU5ERVhfQVRUUl9CSVRN QVBfU1VNTUFSSVpFRDoKIAkJCXJldHVybiBzdW1tYXJpemVkYXR0cnM7CisJCWNhc2UgSU5E RVhfQVRUUl9CSVRNQVBfSU5ERVhFRDoKKwkJCXJldHVybiBpbmRleGVkYXR0cnM7CiAJCWRl ZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAidW5rbm93biBhdHRyS2luZCAldSIsIGF0dHJLaW5k KTsKIAkJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hl YXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IDNjMDk2MWFiMzZi Li5hNTZmM2QxZjM3OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5o CisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMzY4LDYgKzM2OCw3IEBA IGV4dGVybiBUTV9SZXN1bHQgaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0 IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwKIAkJCQkJCQkgSGVhcFR1cGxlIG5ld3R1cCwKIAkJ CQkJCQkgQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAog CQkJCQkJCSBUTV9GYWlsdXJlRGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUs CisJCQkJCQkJIGNvbnN0IEJpdG1hcHNldCAqbWl4X2F0dHJzLCBib29sIG1peF9hdHRyc192 YWxpZCwKIAkJCQkJCQkgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpOwogZXh0 ZXJuIFRNX1Jlc3VsdCBoZWFwX2xvY2tfdHVwbGUoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBU dXBsZSB0dXBsZSwKIAkJCQkJCQkJIENvbW1hbmRJZCBjaWQsIExvY2tUdXBsZU1vZGUgbW9k ZSwgTG9ja1dhaXRQb2xpY3kgd2FpdF9wb2xpY3ksCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvdGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRl eCAxMTk1OTNiN2I0Ni4uYmMzNjBhOWI1MjkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAt NTQ5LDYgKzU0OSw3IEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJCQkJCQkJ CSBib29sIHdhaXQsCiAJCQkJCQkJCSBUTV9GYWlsdXJlRGF0YSAqdG1mZCwKIAkJCQkJCQkJ IExvY2tUdXBsZU1vZGUgKmxvY2ttb2RlLAorCQkJCQkJCQkgY29uc3QgQml0bWFwc2V0ICp1 cGRhdGVkX2NvbHMsCiAJCQkJCQkJCSBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhl cyk7CiAKIAkvKiBzZWUgdGFibGVfdHVwbGVfbG9jaygpIGZvciByZWZlcmVuY2UgYWJvdXQg cGFyYW1ldGVycyAqLwpAQCAtMTUyNCwxMiArMTUyNSwxMiBAQCBzdGF0aWMgaW5saW5lIFRN X1Jlc3VsdAogdGFibGVfdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIg b3RpZCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJICAgQ29tbWFuZElkIGNpZCwgU25h cHNob3Qgc25hcHNob3QsIFNuYXBzaG90IGNyb3NzY2hlY2ssCiAJCQkJICAgYm9vbCB3YWl0 LCBUTV9GYWlsdXJlRGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCi0JCQkJ ICAgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpCisJCQkJICAgY29uc3QgQml0 bWFwc2V0ICptaXhfY29scywgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpCiB7 CiAJcmV0dXJuIHJlbC0+cmRfdGFibGVhbS0+dHVwbGVfdXBkYXRlKHJlbCwgb3RpZCwgc2xv dCwKIAkJCQkJCQkJCQkgY2lkLCBzbmFwc2hvdCwgY3Jvc3NjaGVjaywKLQkJCQkJCQkJCQkg d2FpdCwgdG1mZCwKLQkJCQkJCQkJCQkgbG9ja21vZGUsIHVwZGF0ZV9pbmRleGVzKTsKKwkJ CQkJCQkJCQkgd2FpdCwgdG1mZCwgbG9ja21vZGUsCisJCQkJCQkJCQkJIG1peF9jb2xzLCB1 cGRhdGVfaW5kZXhlcyk7CiB9CiAKIC8qCkBAIC0yMDEwLDYgKzIwMTEsNyBAQCBleHRlcm4g dm9pZCBzaW1wbGVfdGFibGVfdHVwbGVfZGVsZXRlKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50 ZXIgdGlkLAogCQkJCQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCk7CiBleHRlcm4gdm9pZCBz aW1wbGVfdGFibGVfdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgb3Rp ZCwKIAkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QsIFNuYXBzaG90IHNuYXBzaG90 LAorCQkJCQkJCQkJICBjb25zdCBCaXRtYXBzZXQgKm1peF9hdHRycywKIAkJCQkJCQkJCSAg VFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpOwogCiAKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9l eGVjdXRvci5oCmluZGV4IGQ0NmJhNTk4OTVkLi43YjAwMTlmZTE1YiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAorKysgYi9zcmMvaW5jbHVkZS9leGVj dXRvci9leGVjdXRvci5oCkBAIC02MDYsNiArNjA2LDEwIEBAIGV4dGVybiBUdXBsZURlc2Mg RXhlY0NsZWFuVHlwZUZyb21UTChMaXN0ICp0YXJnZXRMaXN0KTsKIGV4dGVybiBUdXBsZURl c2MgRXhlY1R5cGVGcm9tRXhwckxpc3QoTGlzdCAqZXhwckxpc3QpOwogZXh0ZXJuIHZvaWQg RXhlY1R5cGVTZXRDb2xOYW1lcyhUdXBsZURlc2MgdHlwZUluZm8sIExpc3QgKm5hbWVzTGlz dCk7CiBleHRlcm4gdm9pZCBVcGRhdGVDaGFuZ2VkUGFyYW1TZXQoUGxhblN0YXRlICpub2Rl LCBCaXRtYXBzZXQgKm5ld2NoZyk7CitleHRlcm4gQml0bWFwc2V0ICpFeGVjQ29tcGFyZVNs b3RBdHRycyhUdXBsZURlc2MgdHVwZGVzYywKKwkJCQkJCQkJCSAgIGNvbnN0IEJpdG1hcHNl dCAqYXR0cnMsCisJCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqb2xkX3R0cywKKwkJCQkJ CQkJCSAgIFR1cGxlVGFibGVTbG90ICpuZXdfdHRzKTsKIAogdHlwZWRlZiBzdHJ1Y3QgVHVw T3V0cHV0U3RhdGUKIHsKQEAgLTgwMyw1ICs4MDcsOSBAQCBleHRlcm4gUmVzdWx0UmVsSW5m byAqRXhlY0xvb2t1cFJlc3VsdFJlbEJ5T2lkKE1vZGlmeVRhYmxlU3RhdGUgKm5vZGUsCiAJ CQkJCQkJCQkJCSAgIE9pZCByZXN1bHRvaWQsCiAJCQkJCQkJCQkJCSAgIGJvb2wgbWlzc2lu Z19vaywKIAkJCQkJCQkJCQkJICAgYm9vbCB1cGRhdGVfY2FjaGUpOworZXh0ZXJuIEJpdG1h cHNldCAqRXhlY0NoZWNrSW5kZXhlZEF0dHJzRm9yQ2hhbmdlcyhSZXN1bHRSZWxJbmZvICpy ZWxpbmZvLAorCQkJCQkJCQkJCQkJICBFU3RhdGUgKmVzdGF0ZSwKKwkJCQkJCQkJCQkJCSAg VHVwbGVUYWJsZVNsb3QgKm9sZF90dHMsCisJCQkJCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90 ICpuZXdfdHRzKTsKIAogI2VuZGlmCQkJCQkJCS8qIEVYRUNVVE9SX0ggICovCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS91dGlscy9yZWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5o CmluZGV4IDIzNjgzMGY2YjkzLi5kZjU0MjZmZDdmYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvdXRpbHMvcmVsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKQEAgLTE2NCw2 ICsxNjQsNyBAQCB0eXBlZGVmIHN0cnVjdCBSZWxhdGlvbkRhdGEKIAlCaXRtYXBzZXQgICpy ZF9pZGF0dHI7CQkvKiBpbmNsdWRlZCBpbiByZXBsaWNhIGlkZW50aXR5IGluZGV4ICovCiAJ Qml0bWFwc2V0ICAqcmRfaG90YmxvY2tpbmdhdHRyOyAvKiBjb2xzIGJsb2NraW5nIEhPVCB1 cGRhdGUgKi8KIAlCaXRtYXBzZXQgICpyZF9zdW1tYXJpemVkYXR0cjsJLyogY29scyBpbmRl eGVkIGJ5IHN1bW1hcml6aW5nIGluZGV4ZXMgKi8KKwlCaXRtYXBzZXQgICpyZF9pbmRleGVk YXR0cjsgLyogYWxsIGNvbHMgcmVmZXJlbmNlZCBieSBpbmRleGVzICovCiAKIAlQdWJsaWNh dGlvbkRlc2MgKnJkX3B1YmRlc2M7CS8qIHB1YmxpY2F0aW9uIGRlc2NyaXB0b3IsIG9yIE5V TEwgKi8KIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsY2FjaGUuaCBiL3Ny Yy9pbmNsdWRlL3V0aWxzL3JlbGNhY2hlLmgKaW5kZXggMjcwMDIyNDkzOWEuLjU4MzRhYjdi OTAzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9yZWxjYWNoZS5oCisrKyBiL3Ny Yy9pbmNsdWRlL3V0aWxzL3JlbGNhY2hlLmgKQEAgLTcxLDYgKzcxLDcgQEAgdHlwZWRlZiBl bnVtIEluZGV4QXR0ckJpdG1hcEtpbmQKIAlJTkRFWF9BVFRSX0JJVE1BUF9JREVOVElUWV9L RVksCiAJSU5ERVhfQVRUUl9CSVRNQVBfSE9UX0JMT0NLSU5HLAogCUlOREVYX0FUVFJfQklU TUFQX1NVTU1BUklaRUQsCisJSU5ERVhfQVRUUl9CSVRNQVBfSU5ERVhFRCwKIH0gSW5kZXhB dHRyQml0bWFwS2luZDsKIAogZXh0ZXJuIEJpdG1hcHNldCAqUmVsYXRpb25HZXRJbmRleEF0 dHJCaXRtYXAoUmVsYXRpb24gcmVsYXRpb24sCi0tIAoyLjUxLjIKCg== --1580f5491ceb474092467f7b9d85561b Content-Disposition: attachment; filename*0="v20260226-0002-Refactor-heap_update-and-move-attribute-de.pat"; filename*1="ch" Content-Type: text/x-patch; name="=?UTF-8?Q?v20260226-0002-Refactor-heap=5Fupdate-and-move-attribute-de.pa?= =?UTF-8?Q?tch?=" Content-Transfer-Encoding: base64 RnJvbSBmMWVlNTgyYjk5OWMwNzY1MTU5MDE3NzE3YWEwNmQ0ODAwOGM3NzEzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTog VGh1LCAxOSBGZWIgMjAyNiAxNDowODoxNyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjIwMjYw MjI2IDIvMl0gUmVmYWN0b3IgaGVhcF91cGRhdGUoKSBhbmQgbW92ZSBhdHRyaWJ1dGUKIGRl dGVybWluYXRpb24gaW50byBjYWxsZXJzCgpUaGlzIHJlZmFjdG9yaW5nIHJlbG9jYXRlcyBj b2x1bW4gbW9kaWZpY2F0aW9uIGRldGVybWluYXRpb24gZnJvbQpoZWFwX3VwZGF0ZSgpIHRv IGl0cyBjYWxsZXJzIChzaW1wbGVfaGVhcF91cGRhdGUgYW5kCmhlYXBhbV90dXBsZV91cGRh dGUpLCBtb3ZpbmcgdGhlIGxvZ2ljIHVwc3RyZWFtIHRvIGV4ZWN1dG9yL2hhbmRsZXIKbGV2 ZWwuCgotIFJlbW92ZSBtb2RpZmllZF9hdHRycyBhbmQgbW9kaWZpZWRfYXR0cnNfdmFsaWQg cGFyYW1ldGVycyBmcm9tCiAgaGVhcF91cGRhdGUoKQotIEV4dHJhY3QgYnVmZmVyIG1hbmFn ZW1lbnQgKHBpbiwgbG9jaywgcGFnZSBmZXRjaCkgaW50bwogIHNpbXBsZV9oZWFwX3VwZGF0 ZSgpIGFuZCBoZWFwYW1fdHVwbGVfdXBkYXRlKCkgYmVmb3JlIGNhbGxpbmcKICBoZWFwX3Vw ZGF0ZSgpCi0gQ3JlYXRlIGhlbHBlciBmdW5jdGlvbnM6IEhlYXBVcGRhdGVIb3RBbGxvd2Fi bGUoKSwKICBIZWFwVXBkYXRlUmVxdWlyZXNSZXBsaWNhSWQoKSwgSGVhcFVwZGF0ZURldGVy bWluZUxvY2ttb2RlKCkKLSBQYXNzIHByZS1jYWxjdWxhdGVkIGF0dHJpYnV0ZXMgKGhvdF9h bGxvd2VkLCByZXBfaWRfa2V5X3JlcXVpcmVkLCBhbmQKICBsb2NrbW9kZSkgdG8gaGVhcF91 cGRhdGUoKSBpbnN0ZWFkIG9mIGRlcml2aW5nIHRoZW0gd2l0aGluIGZ1bmN0aW9uCi0gQWRk IE9SREVSIEJZIGNsYXVzZXMgdG8gZ2VuZXJhdGVkX3ZpcnR1YWwuc3FsIGFuZCB1cGRhdGFi bGVfdmlld3Muc3FsCiAgdG8gZW5zdXJlIGRldGVybWluaXN0aWMgcmVzdWx0IG9yZGVyaW5n CgpUaHJlZSB0ZXN0cyB3ZXJlIGFkanVzdGVkIHRvIGF2b2lkIGluc3RhYmlsaXR5IGR1ZSB0 byB0dXBsZSBvcmRlcmluZwpkdXJpbmcgaGVhcCBwYWdlIHNjYW5zLiAgVGhpcyBhdm9pZHMg bm9uZGV0ZXJtaW5pc3RpYyByZXN1bHRzLgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbS5jICAgICAgICAgICAgICB8IDc2OCArKysrKysrKystLS0tLS0tLS0KIHNyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICAgICB8ICA5NyArKy0KIHNy Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jICAgICAgICB8ICAgNyArLQog c3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyAgICAgICAgICAgIHwgIDM1ICst CiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgICAgICAgfCAgMjUg Ky0KIHNyYy9pbmNsdWRlL3V0aWxzL3JlbC5oICAgICAgICAgICAgICAgICAgICAgICB8ICAg MSAtCiBzcmMvaW5jbHVkZS91dGlscy9yZWxjYWNoZS5oICAgICAgICAgICAgICAgICAgfCAg IDEgLQogLi4uL3JlZ3Jlc3MvZXhwZWN0ZWQvZ2VuZXJhdGVkX3ZpcnR1YWwub3V0ICAgIHwg ICA0ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RyaWdnZXJzLm91dCAgICAgICAg fCAgMTYgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdXBkYXRhYmxlX3ZpZXdzLm91 dCB8ICAgNCArLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2VuZXJhdGVkX3ZpcnR1YWwuc3Fs ICAgIHwgICA0ICstCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC90cmlnZ2Vycy5zcWwgICAgICAg ICAgICAgfCAgIDQgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3VwZGF0YWJsZV92aWV3cy5z cWwgICAgICB8ICAgMiArLQogMTMgZmlsZXMgY2hhbmdlZCwgNTE3IGluc2VydGlvbnMoKyks IDQ1MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9oZWFwYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCmluZGV4IGFi OGI2ZGRiOGRlLi5lNjAyM2ZlZDQ4YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMK QEAgLTM3LDEyICszNywxNSBAQAogI2luY2x1ZGUgImFjY2Vzcy9tdWx0aXhhY3QuaCIKICNp bmNsdWRlICJhY2Nlc3Mvc3VidHJhbnMuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc3luY3NjYW4u aCIKKyNpbmNsdWRlICJhY2Nlc3Mvc3lzYXR0ci5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJs ZWFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3ZhbGlkLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3Zp c2liaWxpdHltYXAuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgogI2luY2x1 ZGUgImNhdGFsb2cvcGdfZGF0YWJhc2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2RhdGFi YXNlX2QuaCIKICNpbmNsdWRlICJjb21tYW5kcy92YWN1dW0uaCIKKyNpbmNsdWRlICJub2Rl cy9sb2Nrb3B0aW9ucy5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvcnQv cGdfYml0dXRpbHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKQEAgLTUxLDYgKzU0 LDcgQEAKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgogI2luY2x1ZGUgInV0aWxzL2luamVj dGlvbl9wb2ludC5oIgogI2luY2x1ZGUgInV0aWxzL2ludmFsLmgiCisjaW5jbHVkZSAidXRp bHMvcmVsY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9zcGNjYWNoZS5oIgogI2luY2x1ZGUg InV0aWxzL3N5c2NhY2hlLmgiCiAKQEAgLTYyLDE2ICs2Niw4IEBAIHN0YXRpYyBYTG9nUmVj UHRyIGxvZ19oZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxuLCBCdWZmZXIgb2xkYnVmLAogCQkJ CQkJCQkgIEhlYXBUdXBsZSBuZXd0dXAsIEhlYXBUdXBsZSBvbGRfa2V5X3R1cGxlLAogCQkJ CQkJCQkgIGJvb2wgYWxsX3Zpc2libGVfY2xlYXJlZCwgYm9vbCBuZXdfYWxsX3Zpc2libGVf Y2xlYXJlZCk7CiAjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORwotc3RhdGljIHZvaWQgY2hl Y2tfbG9ja19pZl9pbnBsYWNlX3VwZGF0ZWFibGVfcmVsKFJlbGF0aW9uIHJlbGF0aW9uLAot CQkJCQkJCQkJCQkJIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwKLQkJCQkJCQkJCQkJ CSBIZWFwVHVwbGUgbmV3dHVwKTsKIHN0YXRpYyB2b2lkIGNoZWNrX2lucGxhY2VfcmVsX2xv Y2soSGVhcFR1cGxlIG9sZHR1cCk7CiAjZW5kaWYKLXN0YXRpYyBCaXRtYXBzZXQgKkhlYXBE ZXRlcm1pbmVDb2x1bW5zSW5mbyhSZWxhdGlvbiByZWxhdGlvbiwKLQkJCQkJCQkJCQkgICBC aXRtYXBzZXQgKmludGVyZXN0aW5nX2NvbHMsCi0JCQkJCQkJCQkJICAgQml0bWFwc2V0ICpl eHRlcm5hbF9jb2xzLAotCQkJCQkJCQkJCSAgIEhlYXBUdXBsZSBvbGR0dXAsIEhlYXBUdXBs ZSBuZXd0dXAsCi0JCQkJCQkJCQkJICAgYm9vbCAqaGFzX2V4dGVybmFsKTsKIHN0YXRpYyBi b29sIGhlYXBfYWNxdWlyZV90dXBsb2NrKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVt UG9pbnRlckRhdGEgKnRpZCwKIAkJCQkJCQkJIExvY2tUdXBsZU1vZGUgbW9kZSwgTG9ja1dh aXRQb2xpY3kgd2FpdF9wb2xpY3ksCiAJCQkJCQkJCSBib29sICpoYXZlX3R1cGxlX2xvY2sp OwpAQCAtMzMwMCw3ICszMjk2LDEwIEBAIHNpbXBsZV9oZWFwX2RlbGV0ZShSZWxhdGlvbiBy ZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICp0aWQpCiAgKgloZWFwX3VwZGF0ZSAt IHJlcGxhY2UgYSB0dXBsZQogICoKICAqIFNlZSB0YWJsZV90dXBsZV91cGRhdGUoKSBmb3Ig YW4gZXhwbGFuYXRpb24gb2YgdGhlIHBhcmFtZXRlcnMsIGV4Y2VwdCB0aGF0Ci0gKiB0aGlz IHJvdXRpbmUgZGlyZWN0bHkgdGFrZXMgYSB0dXBsZSByYXRoZXIgdGhhbiBhIHNsb3QuCisg KiB0aGlzIHJvdXRpbmUgZGlyZWN0bHkgdGFrZXMgYSBoZWFwIHR1cGxlIHJhdGhlciB0aGFu IGEgc2xvdC4KKyAqCisgKiBJdCdzIHJlcXVpcmVkIHRoYXQgdGhlIGNhbGxlciBoYXMgYWNx dWlyZWQgdGhlIHBpbiBhbmQgbG9jayBvbiB0aGUgYnVmZmVyLgorICogVGhhdCBsb2NrIGFu ZCBwaW4gd2lsbCBiZSBtYW5hZ2VkIGhlcmUsIG5vdCBpbiB0aGUgY2FsbGVyLgogICoKICAq IEluIHRoZSBmYWlsdXJlIGNhc2VzLCB0aGUgcm91dGluZSBmaWxscyAqdG1mZCB3aXRoIHRo ZSB0dXBsZSdzIHRfY3RpZCwKICAqIHRfeG1heCAocmVzb2x2aW5nIGEgcG9zc2libGUgTXVs dGlYYWN0LCBpZiBuZWNlc3NhcnkpLCBhbmQgdF9jbWF4ICh0aGUgbGFzdApAQCAtMzMwOCwz MCArMzMwNywxOSBAQCBzaW1wbGVfaGVhcF9kZWxldGUoUmVsYXRpb24gcmVsYXRpb24sIGNv bnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkKQogICogZ2VuZXJhdGVkIGJ5IGFub3RoZXIgdHJh bnNhY3Rpb24pLgogICovCiBUTV9SZXN1bHQKLWhlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0 aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsIEhlYXBUdXBsZSBuZXd0dXAsCito ZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlRGF0YSAqb2xkdHVwLCBI ZWFwVHVwbGUgbmV3dHVwLAogCQkJQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVj aywgYm9vbCB3YWl0LAotCQkJVE1fRmFpbHVyZURhdGEgKnRtZmQsIExvY2tUdXBsZU1vZGUg KmxvY2ttb2RlLAotCQkJY29uc3QgQml0bWFwc2V0ICptb2RpZmllZF9hdHRycywgYm9vbCBt b2RpZmllZF9hdHRyc192YWxpZCwKLQkJCVRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRl eGVzKQorCQkJVE1fRmFpbHVyZURhdGEgKnRtZmQsIGNvbnN0IExvY2tUdXBsZU1vZGUgKmxv Y2ttb2RlLAorCQkJQnVmZmVyIGJ1ZmZlciwgUGFnZSBwYWdlLCBCbG9ja051bWJlciBibG9j aywgSXRlbUlkIGxwLAorCQkJYm9vbCBob3RfYWxsb3dlZCwgQnVmZmVyIHZtYnVmZmVyLCBi b29sIHJlcF9pZF9rZXlfcmVxdWlyZWQpCiB7CiAJVE1fUmVzdWx0CXJlc3VsdDsKIAlUcmFu c2FjdGlvbklkIHhpZCA9IEdldEN1cnJlbnRUcmFuc2FjdGlvbklkKCk7Ci0JQml0bWFwc2V0 ICAqaG90X2F0dHJzOwotCUJpdG1hcHNldCAgKnN1bV9hdHRyczsKLQlCaXRtYXBzZXQgICpr ZXlfYXR0cnM7Ci0JQml0bWFwc2V0ICAqaWRfYXR0cnM7Ci0JQml0bWFwc2V0ICAqaW50ZXJl c3RpbmdfYXR0cnM7Ci0JSXRlbUlkCQlscDsKLQlIZWFwVHVwbGVEYXRhIG9sZHR1cDsKIAlI ZWFwVHVwbGUJaGVhcHR1cDsKIAlIZWFwVHVwbGUJb2xkX2tleV90dXBsZSA9IE5VTEw7CiAJ Ym9vbAkJb2xkX2tleV9jb3BpZWQgPSBmYWxzZTsKLQlQYWdlCQlwYWdlOwotCUJsb2NrTnVt YmVyIGJsb2NrOwogCU11bHRpWGFjdFN0YXR1cyBteGFjdF9zdGF0dXM7Ci0JQnVmZmVyCQli dWZmZXIsCi0JCQkJbmV3YnVmLAotCQkJCXZtYnVmZmVyID0gSW52YWxpZEJ1ZmZlciwKKwlC dWZmZXIJCW5ld2J1ZiwKIAkJCQl2bWJ1ZmZlcl9uZXcgPSBJbnZhbGlkQnVmZmVyOwogCWJv b2wJCW5lZWRfdG9hc3Q7CiAJU2l6ZQkJbmV3dHVwc2l6ZSwKQEAgLTMzMzksMTMgKzMzMjcs MTEgQEAgaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVy RGF0YSAqb3RpZCwgSGVhcFR1cGxlIG5ld3R1cCwKIAlib29sCQloYXZlX3R1cGxlX2xvY2sg PSBmYWxzZTsKIAlib29sCQlpc2NvbWJvOwogCWJvb2wJCXVzZV9ob3RfdXBkYXRlID0gZmFs c2U7Ci0JYm9vbAkJc3VtbWFyaXplZF91cGRhdGUgPSBmYWxzZTsKIAlib29sCQlrZXlfaW50 YWN0OwogCWJvb2wJCWFsbF92aXNpYmxlX2NsZWFyZWQgPSBmYWxzZTsKIAlib29sCQlhbGxf dmlzaWJsZV9jbGVhcmVkX25ldyA9IGZhbHNlOwogCWJvb2wJCWNoZWNrZWRfbG9ja2VyczsK IAlib29sCQlsb2NrZXJfcmVtYWluczsKLQlib29sCQlyZXBfaWRfa2V5X3JlcXVpcmVkID0g ZmFsc2U7CiAJVHJhbnNhY3Rpb25JZCB4bWF4X25ld190dXBsZSwKIAkJCQl4bWF4X29sZF90 dXBsZTsKIAl1aW50MTYJCWluZm9tYXNrX29sZF90dXBsZSwKQEAgLTMzNTMsMjA0ICszMzM5 LDEzIEBAIGhlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRl ckRhdGEgKm90aWQsIEhlYXBUdXBsZSBuZXd0dXAsCiAJCQkJaW5mb21hc2tfbmV3X3R1cGxl LAogCQkJCWluZm9tYXNrMl9uZXdfdHVwbGU7CiAKLQlBc3NlcnQoSXRlbVBvaW50ZXJJc1Zh bGlkKG90aWQpKTsKLQotCS8qIENoZWFwLCBzaW1wbGlzdGljIGNoZWNrIHRoYXQgdGhlIHR1 cGxlIG1hdGNoZXMgdGhlIHJlbCdzIHJvd3R5cGUuICovCi0JQXNzZXJ0KEhlYXBUdXBsZUhl YWRlckdldE5hdHRzKG5ld3R1cC0+dF9kYXRhKSA8PQotCQkgICBSZWxhdGlvbkdldE51bWJl ck9mQXR0cmlidXRlcyhyZWxhdGlvbikpOwotCisJQXNzZXJ0KEJ1ZmZlcklzTG9ja2VkQnlN ZShidWZmZXIpKTsKKwlBc3NlcnQoSXRlbUlkSXNOb3JtYWwobHApKTsKIAlBc3NlcnRIYXNT bmFwc2hvdEZvclRvYXN0KHJlbGF0aW9uKTsKIAotCS8qCi0JICogRm9yYmlkIHRoaXMgZHVy aW5nIGEgcGFyYWxsZWwgb3BlcmF0aW9uLCBsZXN0IGl0IGFsbG9jYXRlIGEgY29tYm8gQ0lE LgotCSAqIE90aGVyIHdvcmtlcnMgbWlnaHQgbmVlZCB0aGF0IGNvbWJvIENJRCBmb3Igdmlz aWJpbGl0eSBjaGVja3MsIGFuZCB3ZQotCSAqIGhhdmUgbm8gcHJvdmlzaW9uIGZvciBicm9h ZGNhc3RpbmcgaXQgdG8gdGhlbS4KLQkgKi8KLQlpZiAoSXNJblBhcmFsbGVsTW9kZSgpKQot CQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9UUkFOU0FD VElPTl9TVEFURSksCi0JCQkJIGVycm1zZygiY2Fubm90IHVwZGF0ZSB0dXBsZXMgZHVyaW5n IGEgcGFyYWxsZWwgb3BlcmF0aW9uIikpKTsKLQotI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJ TkcKLQljaGVja19sb2NrX2lmX2lucGxhY2VfdXBkYXRlYWJsZV9yZWwocmVsYXRpb24sIG90 aWQsIG5ld3R1cCk7Ci0jZW5kaWYKLQotCS8qCi0JICogRmV0Y2ggdGhlIGxpc3Qgb2YgYXR0 cmlidXRlcyB0byBiZSBjaGVja2VkIGZvciB2YXJpb3VzIG9wZXJhdGlvbnMuCi0JICoKLQkg KiBGb3IgSE9UIGNvbnNpZGVyYXRpb25zLCB0aGlzIGlzIHdhc3RlZCBlZmZvcnQgaWYgd2Ug ZmFpbCB0byB1cGRhdGUgb3IKLQkgKiBoYXZlIHRvIHB1dCB0aGUgbmV3IHR1cGxlIG9uIGEg ZGlmZmVyZW50IHBhZ2UuICBCdXQgd2UgbXVzdCBjb21wdXRlIHRoZQotCSAqIGxpc3QgYmVm b3JlIG9idGFpbmluZyBidWZmZXIgbG9jayAtLS0gaW4gdGhlIHdvcnN0IGNhc2UsIGlmIHdl IGFyZQotCSAqIGRvaW5nIGFuIHVwZGF0ZSBvbiBvbmUgb2YgdGhlIHJlbGV2YW50IHN5c3Rl bSBjYXRhbG9ncywgd2UgY291bGQKLQkgKiBkZWFkbG9jayBpZiB3ZSB0cnkgdG8gZmV0Y2gg dGhlIGxpc3QgbGF0ZXIuICBJbiBhbnkgY2FzZSwgdGhlIHJlbGNhY2hlCi0JICogY2FjaGVz IHRoZSBkYXRhIHNvIHRoaXMgaXMgdXN1YWxseSBwcmV0dHkgY2hlYXAuCi0JICoKLQkgKiBX ZSBhbHNvIG5lZWQgY29sdW1ucyB1c2VkIGJ5IHRoZSByZXBsaWNhIGlkZW50aXR5IGFuZCBj b2x1bW5zIHRoYXQgYXJlCi0JICogY29uc2lkZXJlZCB0aGUgImtleSIgb2Ygcm93cyBpbiB0 aGUgdGFibGUuCi0JICoKLQkgKiBOb3RlIHRoYXQgd2UgZ2V0IGNvcGllcyBvZiBlYWNoIGJp dG1hcCwgc28gd2UgbmVlZCBub3Qgd29ycnkgYWJvdXQKLQkgKiByZWxjYWNoZSBmbHVzaCBo YXBwZW5pbmcgbWlkd2F5IHRocm91Z2guCi0JICovCi0JaG90X2F0dHJzID0gUmVsYXRpb25H ZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24sCi0JCQkJCQkJCQkJICAgSU5ERVhfQVRUUl9C SVRNQVBfSE9UX0JMT0NLSU5HKTsKLQlzdW1fYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0 ckJpdG1hcChyZWxhdGlvbiwKLQkJCQkJCQkJCQkgICBJTkRFWF9BVFRSX0JJVE1BUF9TVU1N QVJJWkVEKTsKLQlrZXlfYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChyZWxh dGlvbiwgSU5ERVhfQVRUUl9CSVRNQVBfS0VZKTsKLQlpZF9hdHRycyA9IFJlbGF0aW9uR2V0 SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLAotCQkJCQkJCQkJCSAgSU5ERVhfQVRUUl9CSVRN QVBfSURFTlRJVFlfS0VZKTsKLQlpbnRlcmVzdGluZ19hdHRycyA9IE5VTEw7Ci0JaW50ZXJl c3RpbmdfYXR0cnMgPSBibXNfYWRkX21lbWJlcnMoaW50ZXJlc3RpbmdfYXR0cnMsIGhvdF9h dHRycyk7Ci0JaW50ZXJlc3RpbmdfYXR0cnMgPSBibXNfYWRkX21lbWJlcnMoaW50ZXJlc3Rp bmdfYXR0cnMsIHN1bV9hdHRycyk7Ci0JaW50ZXJlc3RpbmdfYXR0cnMgPSBibXNfYWRkX21l bWJlcnMoaW50ZXJlc3RpbmdfYXR0cnMsIGtleV9hdHRycyk7Ci0JaW50ZXJlc3RpbmdfYXR0 cnMgPSBibXNfYWRkX21lbWJlcnMoaW50ZXJlc3RpbmdfYXR0cnMsIGlkX2F0dHJzKTsKLQot CWJsb2NrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcihvdGlkKTsKLQlJTkpFQ1RJT05f UE9JTlQoImhlYXBfdXBkYXRlLWJlZm9yZS1waW4iLCBOVUxMKTsKLQlidWZmZXIgPSBSZWFk QnVmZmVyKHJlbGF0aW9uLCBibG9jayk7Ci0JcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVy KTsKLQotCS8qCi0JICogQmVmb3JlIGxvY2tpbmcgdGhlIGJ1ZmZlciwgcGluIHRoZSB2aXNp YmlsaXR5IG1hcCBwYWdlIGlmIGl0IGFwcGVhcnMgdG8KLQkgKiBiZSBuZWNlc3NhcnkuICBT aW5jZSB3ZSBoYXZlbid0IGdvdCB0aGUgbG9jayB5ZXQsIHNvbWVvbmUgZWxzZSBtaWdodCBi ZQotCSAqIGluIHRoZSBtaWRkbGUgb2YgY2hhbmdpbmcgdGhpcywgc28gd2UnbGwgbmVlZCB0 byByZWNoZWNrIGFmdGVyIHdlIGhhdmUKLQkgKiB0aGUgbG9jay4KLQkgKi8KLQlpZiAoUGFn ZUlzQWxsVmlzaWJsZShwYWdlKSkKLQkJdmlzaWJpbGl0eW1hcF9waW4ocmVsYXRpb24sIGJs b2NrLCAmdm1idWZmZXIpOwotCi0JTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VY Q0xVU0lWRSk7Ci0KLQlscCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgSXRlbVBvaW50ZXJHZXRP ZmZzZXROdW1iZXIob3RpZCkpOwotCi0JLyoKLQkgKiBVc3VhbGx5LCBhIGJ1ZmZlciBwaW4g YW5kL29yIHNuYXBzaG90IGJsb2NrcyBwcnVuaW5nIG9mIG90aWQsIGVuc3VyaW5nCi0JICog d2Ugc2VlIExQX05PUk1BTCBoZXJlLiAgV2hlbiB0aGUgb3RpZCBvcmlnaW4gaXMgYSBzeXNj YWNoZSwgd2UgbWF5IGhhdmUKLQkgKiBuZWl0aGVyIGEgcGluIG5vciBhIHNuYXBzaG90LiAg SGVuY2UsIHdlIG1heSBzZWUgb3RoZXIgTFBfIHN0YXRlcywgZWFjaAotCSAqIG9mIHdoaWNo IGluZGljYXRlcyBjb25jdXJyZW50IHBydW5pbmcuCi0JICoKLQkgKiBGYWlsaW5nIHdpdGgg VE1fVXBkYXRlZCB3b3VsZCBiZSBtb3N0IGFjY3VyYXRlLiAgSG93ZXZlciwgdW5saWtlIG90 aGVyCi0JICogVE1fVXBkYXRlZCBzY2VuYXJpb3MsIHdlIGRvbid0IGtub3cgdGhlIHN1Y2Nl c3NvciBjdGlkIGluIExQX1VOVVNFRCBhbmQKLQkgKiBMUF9ERUFEIGNhc2VzLiAgV2hpbGUg dGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gVE1fVXBkYXRlZCBhbmQgVE1fRGVsZXRlZAotCSAq IGRvZXMgbWF0dGVyIHRvIFNRTCBzdGF0ZW1lbnRzIFVQREFURSBhbmQgTUVSR0UsIHRob3Nl IFNRTCBzdGF0ZW1lbnRzCi0JICogaG9sZCBhIHNuYXBzaG90IHRoYXQgZW5zdXJlcyBMUF9O T1JNQUwuICBIZW5jZSwgdGhlIGNob2ljZSBiZXR3ZWVuCi0JICogVE1fVXBkYXRlZCBhbmQg VE1fRGVsZXRlZCBhZmZlY3RzIG9ubHkgdGhlIHdvcmRpbmcgb2YgZXJyb3IgbWVzc2FnZXMu Ci0JICogU2V0dGxlIG9uIFRNX0RlbGV0ZWQsIGZvciB0d28gcmVhc29ucy4gIEZpcnN0LCBp dCBhdm9pZHMgY29tcGxpY2F0aW5nCi0JICogdGhlIHNwZWNpZmljYXRpb24gb2Ygd2hlbiB0 bWZkLT5jdGlkIGlzIHZhbGlkLiAgU2Vjb25kLCBpdCBjcmVhdGVzCi0JICogZXJyb3IgbG9n IGV2aWRlbmNlIHRoYXQgd2UgdG9vayB0aGlzIGJyYW5jaC4KLQkgKgotCSAqIFNpbmNlIGl0 J3MgcG9zc2libGUgdG8gc2VlIExQX1VOVVNFRCBhdCBvdGlkLCBpdCdzIGFsc28gcG9zc2li bGUgdG8gc2VlCi0JICogTFBfTk9STUFMIGZvciBhIHR1cGxlIHRoYXQgcmVwbGFjZWQgTFBf VU5VU0VELiAgSWYgaXQncyBhIHR1cGxlIGZvciBhbgotCSAqIHVucmVsYXRlZCByb3csIHdl J2xsIGZhaWwgd2l0aCAiZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUiLgot CSAqIFhYWCBpZiBvdGlkIGlzIHRoZSBsaXZlLCBuZXdlciB2ZXJzaW9uIG9mIHRoZSBuZXd0 dXAgcm93LCB3ZSdsbCBkaXNjYXJkCi0JICogY2hhbmdlcyBvcmlnaW5hdGluZyBpbiB2ZXJz aW9ucyBvZiB0aGlzIGNhdGFsb2cgcm93IGFmdGVyIHRoZSB2ZXJzaW9uCi0JICogdGhlIGNh bGxlciBnb3QgZnJvbSBzeXNjYWNoZS4gIFNlZSBzeXNjYWNoZS11cGRhdGUtcHJ1bmVkLnNw ZWMuCi0JICovCi0JaWYgKCFJdGVtSWRJc05vcm1hbChscCkpCi0JewotCQlBc3NlcnQoUmVs YXRpb25TdXBwb3J0c1N5c0NhY2hlKFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pKSk7Ci0K LQkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwotCQlBc3NlcnQoIWhhdmVfdHVwbGVf bG9jayk7Ci0JCWlmICh2bWJ1ZmZlciAhPSBJbnZhbGlkQnVmZmVyKQotCQkJUmVsZWFzZUJ1 ZmZlcih2bWJ1ZmZlcik7Ci0JCXRtZmQtPmN0aWQgPSAqb3RpZDsKLQkJdG1mZC0+eG1heCA9 IEludmFsaWRUcmFuc2FjdGlvbklkOwotCQl0bWZkLT5jbWF4ID0gSW52YWxpZENvbW1hbmRJ ZDsKLQkJKnVwZGF0ZV9pbmRleGVzID0gVFVfTm9uZTsKLQotCQlibXNfZnJlZShob3RfYXR0 cnMpOwotCQlibXNfZnJlZShzdW1fYXR0cnMpOwotCQlibXNfZnJlZShrZXlfYXR0cnMpOwot CQlibXNfZnJlZShpZF9hdHRycyk7Ci0JCS8qIG1vZGlmaWVkX2F0dHJzIG5vdCB5ZXQgaW5p dGlhbGl6ZWQgKi8KLQkJYm1zX2ZyZWUoaW50ZXJlc3RpbmdfYXR0cnMpOwotCQlyZXR1cm4g VE1fRGVsZXRlZDsKLQl9Ci0KLQkvKgotCSAqIEZpbGwgaW4gZW5vdWdoIGRhdGEgaW4gb2xk dHVwIGZvciBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8gdG8gd29yawotCSAqIHByb3Blcmx5 LgotCSAqLwotCW9sZHR1cC50X3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlv bik7Ci0Jb2xkdHVwLnRfZGF0YSA9IChIZWFwVHVwbGVIZWFkZXIpIFBhZ2VHZXRJdGVtKHBh Z2UsIGxwKTsKLQlvbGR0dXAudF9sZW4gPSBJdGVtSWRHZXRMZW5ndGgobHApOwotCW9sZHR1 cC50X3NlbGYgPSAqb3RpZDsKLQotCS8qIHRoZSBuZXcgdHVwbGUgaXMgcmVhZHksIGV4Y2Vw dCBmb3IgdGhpczogKi8KKwkvKiBUaGUgbmV3IHR1cGxlIGlzIHJlYWR5LCBleGNlcHQgZm9y IHRoaXMgKi8KIAluZXd0dXAtPnRfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0 aW9uKTsKIAotCS8qCi0JICogRGV0ZXJtaW5lIGNvbHVtbnMgbW9kaWZpZWQgYnkgdGhlIHVw ZGF0ZS4gIEFkZGl0aW9uYWxseSwgaWRlbnRpZnkKLQkgKiB3aGV0aGVyIGFueSBvZiB0aGUg dW5tb2RpZmllZCByZXBsaWNhIGlkZW50aXR5IGtleSBhdHRyaWJ1dGVzIGluIHRoZQotCSAq IG9sZCB0dXBsZSBpcyBleHRlcm5hbGx5IHN0b3JlZCBvciBub3QuICBUaGlzIGlzIHJlcXVp cmVkIGJlY2F1c2UgZm9yCi0JICogc3VjaCBhdHRyaWJ1dGVzIHRoZSBmbGF0dGVuZWQgdmFs dWUgd29uJ3QgYmUgV0FMIGxvZ2dlZCBhcyBwYXJ0IG9mIHRoZQotCSAqIG5ldyB0dXBsZSBz byB3ZSBtdXN0IGluY2x1ZGUgaXQgYXMgcGFydCBvZiB0aGUgb2xkX2tleV90dXBsZS4gIFNl ZQotCSAqIEV4dHJhY3RSZXBsaWNhSWRlbnRpdHkuCi0JICovCi0JaWYgKCFtb2RpZmllZF9h dHRyc192YWxpZCkKLQl7Ci0JCWJvb2wJCWlkX2hhc19leHRlcm5hbCA9IGZhbHNlOwotCi0J CW1vZGlmaWVkX2F0dHJzID0gSGVhcERldGVybWluZUNvbHVtbnNJbmZvKHJlbGF0aW9uLCBp bnRlcmVzdGluZ19hdHRycywKLQkJCQkJCQkJCQkJCSAgaWRfYXR0cnMsICZvbGR0dXAsCi0J CQkJCQkJCQkJCQkgIG5ld3R1cCwgJmlkX2hhc19leHRlcm5hbCk7Ci0JCXJlcF9pZF9rZXlf cmVxdWlyZWQgPSBpZF9oYXNfZXh0ZXJuYWwgfHwKLQkJCWJtc19vdmVybGFwKG1vZGlmaWVk X2F0dHJzLCBpZF9hdHRycyk7Ci0JfQotCWVsc2UKLQl7Ci0JCS8qCi0JCSAqIEV4dHJhY3RS ZXBsaWNhdElkZW50aXR5KCkgbmVlZHMgdG8ga25vdyBpZiBhIG1vZGlmaWVkIGF0dHJidXRl IGlzCi0JCSAqIHVzZWQgYXMgYSByZXBsaWNhIGluZGVudGl0eSBvciBpZiBhbnkgb2YgdGhl IHVubW9kaWZpZWQgaW5kZXhlZAotCQkgKiBhdHRyaWJ1dGVzIGluIHRoZSBvbGQgdHVwbGUg YXJlIHN0b3JlZCBleHRlcm5hbGx5IGFuZCB1c2VkIGFzIGEKLQkJICogcmVwbGljYSBpZGVu dGl0eS4KLQkJICovCi0JCXJlcF9pZF9rZXlfcmVxdWlyZWQgPSBibXNfb3ZlcmxhcChtb2Rp ZmllZF9hdHRycywgaWRfYXR0cnMpOwotCQlpZiAoIXJlcF9pZF9rZXlfcmVxdWlyZWQpCi0J CXsKLQkJCUJpdG1hcHNldCAgKmF0dHJzOwotCQkJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxh dGlvbkdldERlc2NyKHJlbGF0aW9uKTsKLQkJCWludAkJCWF0dGlkeCA9IC0xOwotCi0JCQkv KiBDaGVjayBhbGwgdW5tb2RpZmllZCBpbmRleGVkIHJlcGxpY2EgaWRlbnRpdHkga2V5IGF0 dHJpYnV0ZXMgKi8KLQkJCWF0dHJzID0gYm1zX2RpZmZlcmVuY2UoaW50ZXJlc3RpbmdfYXR0 cnMsIG1vZGlmaWVkX2F0dHJzKTsKLQkJCWF0dHJzID0gYm1zX2ludF9tZW1iZXJzKGF0dHJz LCBpZF9hdHRycyk7Ci0KLQkJCXdoaWxlICgoYXR0aWR4ID0gYm1zX25leHRfbWVtYmVyKGF0 dHJzLCBhdHRpZHgpKSA+PSAwKQotCQkJewotCQkJCS8qCi0JCQkJICogYXR0aWR4IGlzIHpl cm8tYmFzZWQsIGF0dHJudW0gaXMgdGhlIG5vcm1hbCBhdHRyaWJ1dGUKLQkJCQkgKiBudW1i ZXIKLQkJCQkgKi8KLQkJCQlBdHRyTnVtYmVyCWF0dHJudW0gPSBhdHRpZHggKyBGaXJzdExv d0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyOwotCQkJCURhdHVtCQl2YWx1ZTsKLQkJCQli b29sCQlpc251bGw7Ci0KLQkJCQkvKgotCQkJCSAqIFN5c3RlbSBhdHRyaWJ1dGVzIGFyZSBu b3QgYWRkZWQgaW50byBpbnRlcmVzdGluZ19hdHRycyBpbgotCQkJCSAqIHJlbGNhY2hlLgot CQkJCSAqLwotCQkJCUFzc2VydChhdHRybnVtID4gMCk7Ci0KLQkJCQl2YWx1ZSA9IGhlYXBf Z2V0YXR0cigmb2xkdHVwLCBhdHRybnVtLCB0dXBkZXNjLCAmaXNudWxsKTsKLQotCQkJCS8q IE5vIG5lZWQgdG8gY2hlY2sgYXR0cmlidXRlcyB0aGF0IGNhbid0IGJlIHN0b3JlZCBleHRl cm5hbGx5ICovCi0JCQkJaWYgKGlzbnVsbCB8fAotCQkJCQlUdXBsZURlc2NDb21wYWN0QXR0 cih0dXBkZXNjLCBhdHRybnVtIC0gMSktPmF0dGxlbiAhPSAtMSkKLQkJCQkJY29udGludWU7 Ci0KLQkJCQkvKiBDaGVjayBpZiB0aGUgb2xkIHR1cGxlJ3MgYXR0cmlidXRlIGlzIHN0b3Jl ZCBleHRlcm5hbGx5ICovCi0JCQkJaWYgKFZBUkFUVF9JU19FWFRFUk5BTCgoc3RydWN0IHZh cmxlbmEgKikgRGF0dW1HZXRQb2ludGVyKHZhbHVlKSkpCi0JCQkJewotCQkJCQlyZXBfaWRf a2V5X3JlcXVpcmVkID0gdHJ1ZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCi0JCQli bXNfZnJlZShhdHRycyk7Ci0JCX0KLQl9Ci0KIAkvKgogCSAqIElmIHdlJ3JlIG5vdCB1cGRh dGluZyBhbnkgImtleSIgY29sdW1uLCB3ZSBjYW4gZ3JhYiBhIHdlYWtlciBsb2NrIHR5cGUu CiAJICogVGhpcyBhbGxvd3MgZm9yIG1vcmUgY29uY3VycmVuY3kgd2hlbiB3ZSBhcmUgcnVu bmluZyBzaW11bHRhbmVvdXNseQpAQCAtMzU2Miw5ICszMzU3LDggQEAgaGVhcF91cGRhdGUo UmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1 cGxlIG5ld3R1cCwKIAkgKiBpcyB1cGRhdGVzIHRoYXQgZG9uJ3QgbWFuaXB1bGF0ZSBrZXkg Y29sdW1ucywgbm90IHRob3NlIHRoYXQKIAkgKiBzZXJlbmRpcGl0b3VzbHkgYXJyaXZlIGF0 IHRoZSBzYW1lIGtleSB2YWx1ZXMuCiAJICovCi0JaWYgKCFibXNfb3ZlcmxhcChtb2RpZmll ZF9hdHRycywga2V5X2F0dHJzKSkKKwlpZiAoKmxvY2ttb2RlID09IExvY2tUdXBsZU5vS2V5 RXhjbHVzaXZlKQogCXsKLQkJKmxvY2ttb2RlID0gTG9ja1R1cGxlTm9LZXlFeGNsdXNpdmU7 CiAJCW14YWN0X3N0YXR1cyA9IE11bHRpWGFjdFN0YXR1c05vS2V5VXBkYXRlOwogCQlrZXlf aW50YWN0ID0gdHJ1ZTsKIApAQCAtMzU4MSwyMiArMzM3NSwxNSBAQCBoZWFwX3VwZGF0ZShS ZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpvdGlkLCBIZWFwVHVw bGUgbmV3dHVwLAogCX0KIAllbHNlCiAJewotCQkqbG9ja21vZGUgPSBMb2NrVHVwbGVFeGNs dXNpdmU7CisJCUFzc2VydCgqbG9ja21vZGUgPT0gTG9ja1R1cGxlRXhjbHVzaXZlKTsKIAkJ bXhhY3Rfc3RhdHVzID0gTXVsdGlYYWN0U3RhdHVzVXBkYXRlOwogCQlrZXlfaW50YWN0ID0g ZmFsc2U7CiAJfQogCi0JLyoKLQkgKiBOb3RlOiBiZXlvbmQgdGhpcyBwb2ludCwgdXNlIG9s ZHR1cCBub3Qgb3RpZCB0byByZWZlciB0byBvbGQgdHVwbGUuCi0JICogb3RpZCBtYXkgdmVy eSB3ZWxsIHBvaW50IGF0IG5ld3R1cC0+dF9zZWxmLCB3aGljaCB3ZSB3aWxsIG92ZXJ3cml0 ZQotCSAqIHdpdGggdGhlIG5ldyB0dXBsZSdzIGxvY2F0aW9uLCBzbyB0aGVyZSdzIGdyZWF0 IHJpc2sgb2YgY29uZnVzaW9uIGlmIHdlCi0JICogdXNlIG90aWQgYW55bW9yZS4KLQkgKi8K LQogbDI6CiAJY2hlY2tlZF9sb2NrZXJzID0gZmFsc2U7CiAJbG9ja2VyX3JlbWFpbnMgPSBm YWxzZTsKLQlyZXN1bHQgPSBIZWFwVHVwbGVTYXRpc2ZpZXNVcGRhdGUoJm9sZHR1cCwgY2lk LCBidWZmZXIpOworCXJlc3VsdCA9IEhlYXBUdXBsZVNhdGlzZmllc1VwZGF0ZShvbGR0dXAs IGNpZCwgYnVmZmVyKTsKIAogCS8qIHNlZSBiZWxvdyBhYm91dCB0aGUgIm5vIHdhaXQiIGNh c2UgKi8KIAlBc3NlcnQocmVzdWx0ICE9IFRNX0JlaW5nTW9kaWZpZWQgfHwgd2FpdCk7CkBA IC0zNjI4LDggKzM0MTUsOCBAQCBsMjoKIAkJICovCiAKIAkJLyogbXVzdCBjb3B5IHN0YXRl IGRhdGEgYmVmb3JlIHVubG9ja2luZyBidWZmZXIgKi8KLQkJeHdhaXQgPSBIZWFwVHVwbGVI ZWFkZXJHZXRSYXdYbWF4KG9sZHR1cC50X2RhdGEpOwotCQlpbmZvbWFzayA9IG9sZHR1cC50 X2RhdGEtPnRfaW5mb21hc2s7CisJCXh3YWl0ID0gSGVhcFR1cGxlSGVhZGVyR2V0UmF3WG1h eChvbGR0dXAtPnRfZGF0YSk7CisJCWluZm9tYXNrID0gb2xkdHVwLT50X2RhdGEtPnRfaW5m b21hc2s7CiAKIAkJLyoKIAkJICogTm93IHdlIGhhdmUgdG8gZG8gc29tZXRoaW5nIGFib3V0 IHRoZSBleGlzdGluZyBsb2NrZXIuICBJZiBpdCdzIGEKQEAgLTM2NjksMTMgKzM0NTYsMTIg QEAgbDI6CiAJCQkJICogcmVxdWVzdGluZyBhIGxvY2sgYW5kIGFscmVhZHkgaGF2ZSBvbmU7 IGF2b2lkcyBkZWFkbG9jaykuCiAJCQkJICovCiAJCQkJaWYgKCFjdXJyZW50X2lzX21lbWJl cikKLQkJCQkJaGVhcF9hY3F1aXJlX3R1cGxvY2socmVsYXRpb24sICYob2xkdHVwLnRfc2Vs ZiksICpsb2NrbW9kZSwKKwkJCQkJaGVhcF9hY3F1aXJlX3R1cGxvY2socmVsYXRpb24sICZv bGR0dXAtPnRfc2VsZiwgKmxvY2ttb2RlLAogCQkJCQkJCQkJCSBMb2NrV2FpdEJsb2NrLCAm aGF2ZV90dXBsZV9sb2NrKTsKIAogCQkJCS8qIHdhaXQgZm9yIG11bHRpeGFjdCAqLwogCQkJ CU11bHRpWGFjdElkV2FpdCgoTXVsdGlYYWN0SWQpIHh3YWl0LCBteGFjdF9zdGF0dXMsIGlu Zm9tYXNrLAotCQkJCQkJCQlyZWxhdGlvbiwgJm9sZHR1cC50X3NlbGYsIFhMVFdfVXBkYXRl LAotCQkJCQkJCQkmcmVtYWluKTsKKwkJCQkJCQkJcmVsYXRpb24sICZvbGR0dXAtPnRfc2Vs ZiwgWExUV19VcGRhdGUsICZyZW1haW4pOwogCQkJCWNoZWNrZWRfbG9ja2VycyA9IHRydWU7 CiAJCQkJbG9ja2VyX3JlbWFpbnMgPSByZW1haW4gIT0gMDsKIAkJCQlMb2NrQnVmZmVyKGJ1 ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKQEAgLTM2ODUsOSArMzQ3MSw5IEBAIGwy OgogCQkJCSAqIGNvdWxkIHVwZGF0ZSB0aGlzIHR1cGxlIGJlZm9yZSB3ZSBnZXQgdG8gdGhp cyBwb2ludC4gIENoZWNrCiAJCQkJICogZm9yIHhtYXggY2hhbmdlLCBhbmQgc3RhcnQgb3Zl ciBpZiBzby4KIAkJCQkgKi8KLQkJCQlpZiAoeG1heF9pbmZvbWFza19jaGFuZ2VkKG9sZHR1 cC50X2RhdGEtPnRfaW5mb21hc2ssCisJCQkJaWYgKHhtYXhfaW5mb21hc2tfY2hhbmdlZChv bGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzaywKIAkJCQkJCQkJCQkgIGluZm9tYXNrKSB8fAot CQkJCQkhVHJhbnNhY3Rpb25JZEVxdWFscyhIZWFwVHVwbGVIZWFkZXJHZXRSYXdYbWF4KG9s ZHR1cC50X2RhdGEpLAorCQkJCQkhVHJhbnNhY3Rpb25JZEVxdWFscyhIZWFwVHVwbGVIZWFk ZXJHZXRSYXdYbWF4KG9sZHR1cC0+dF9kYXRhKSwKIAkJCQkJCQkJCQkgeHdhaXQpKQogCQkJ CQlnb3RvIGwyOwogCQkJfQpAQCAtMzcxMiw4ICszNDk4LDggQEAgbDI6CiAJCQkgKiBiZWZv cmUgdGhpcyBvbmUsIHdoaWNoIGFyZSBpbXBvcnRhbnQgdG8ga2VlcCBpbiBjYXNlIHRoaXMK IAkJCSAqIHN1YnhhY3QgYWJvcnRzLgogCQkJICovCi0JCQlpZiAoIUhFQVBfWE1BWF9JU19M T0NLRURfT05MWShvbGR0dXAudF9kYXRhLT50X2luZm9tYXNrKSkKLQkJCQl1cGRhdGVfeGFj dCA9IEhlYXBUdXBsZUdldFVwZGF0ZVhpZChvbGR0dXAudF9kYXRhKTsKKwkJCWlmICghSEVB UF9YTUFYX0lTX0xPQ0tFRF9PTkxZKG9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrKSkKKwkJ CQl1cGRhdGVfeGFjdCA9IEhlYXBUdXBsZUdldFVwZGF0ZVhpZChvbGR0dXAtPnRfZGF0YSk7 CiAJCQllbHNlCiAJCQkJdXBkYXRlX3hhY3QgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIApA QCAtMzc1NCw5ICszNTQwLDkgQEAgbDI6CiAJCQkgKiBsb2NrLgogCQkJICovCiAJCQlMb2Nr QnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKLQkJCWhlYXBfYWNxdWlyZV90 dXBsb2NrKHJlbGF0aW9uLCAmKG9sZHR1cC50X3NlbGYpLCAqbG9ja21vZGUsCisJCQloZWFw X2FjcXVpcmVfdHVwbG9jayhyZWxhdGlvbiwgJm9sZHR1cC0+dF9zZWxmLCAqbG9ja21vZGUs CiAJCQkJCQkJCSBMb2NrV2FpdEJsb2NrLCAmaGF2ZV90dXBsZV9sb2NrKTsKLQkJCVhhY3RM b2NrVGFibGVXYWl0KHh3YWl0LCByZWxhdGlvbiwgJm9sZHR1cC50X3NlbGYsCisJCQlYYWN0 TG9ja1RhYmxlV2FpdCh4d2FpdCwgcmVsYXRpb24sICZvbGR0dXAtPnRfc2VsZiwKIAkJCQkJ CQkgIFhMVFdfVXBkYXRlKTsKIAkJCWNoZWNrZWRfbG9ja2VycyA9IHRydWU7CiAJCQlMb2Nr QnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKQEAgLTM3NjYsMjAgKzM1 NTIsMjAgQEAgbDI6CiAJCQkgKiBvdGhlciB4YWN0IGNvdWxkIHVwZGF0ZSB0aGlzIHR1cGxl IGJlZm9yZSB3ZSBnZXQgdG8gdGhpcyBwb2ludC4KIAkJCSAqIENoZWNrIGZvciB4bWF4IGNo YW5nZSwgYW5kIHN0YXJ0IG92ZXIgaWYgc28uCiAJCQkgKi8KLQkJCWlmICh4bWF4X2luZm9t YXNrX2NoYW5nZWQob2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzaywgaW5mb21hc2spIHx8CisJ CQlpZiAoeG1heF9pbmZvbWFza19jaGFuZ2VkKG9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNr LCBpbmZvbWFzaykgfHwKIAkJCQkhVHJhbnNhY3Rpb25JZEVxdWFscyh4d2FpdCwKLQkJCQkJ CQkJCSBIZWFwVHVwbGVIZWFkZXJHZXRSYXdYbWF4KG9sZHR1cC50X2RhdGEpKSkKKwkJCQkJ CQkJCSBIZWFwVHVwbGVIZWFkZXJHZXRSYXdYbWF4KG9sZHR1cC0+dF9kYXRhKSkpCiAJCQkJ Z290byBsMjsKIAogCQkJLyogT3RoZXJ3aXNlIGNoZWNrIGlmIGl0IGNvbW1pdHRlZCBvciBh Ym9ydGVkICovCi0JCQlVcGRhdGVYbWF4SGludEJpdHMob2xkdHVwLnRfZGF0YSwgYnVmZmVy LCB4d2FpdCk7Ci0JCQlpZiAob2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzayAmIEhFQVBfWE1B WF9JTlZBTElEKQorCQkJVXBkYXRlWG1heEhpbnRCaXRzKG9sZHR1cC0+dF9kYXRhLCBidWZm ZXIsIHh3YWl0KTsKKwkJCWlmIChvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzayAmIEhFQVBf WE1BWF9JTlZBTElEKQogCQkJCWNhbl9jb250aW51ZSA9IHRydWU7CiAJCX0KIAogCQlpZiAo Y2FuX2NvbnRpbnVlKQogCQkJcmVzdWx0ID0gVE1fT2s7Ci0JCWVsc2UgaWYgKCFJdGVtUG9p bnRlckVxdWFscygmb2xkdHVwLnRfc2VsZiwgJm9sZHR1cC50X2RhdGEtPnRfY3RpZCkpCisJ CWVsc2UgaWYgKCFJdGVtUG9pbnRlckVxdWFscygmb2xkdHVwLT50X3NlbGYsICZvbGR0dXAt PnRfZGF0YS0+dF9jdGlkKSkKIAkJCXJlc3VsdCA9IFRNX1VwZGF0ZWQ7CiAJCWVsc2UKIAkJ CXJlc3VsdCA9IFRNX0RlbGV0ZWQ7CkBAIC0zNzkyLDM5ICszNTc4LDMyIEBAIGwyOgogCQkJ ICAgcmVzdWx0ID09IFRNX1VwZGF0ZWQgfHwKIAkJCSAgIHJlc3VsdCA9PSBUTV9EZWxldGVk IHx8CiAJCQkgICByZXN1bHQgPT0gVE1fQmVpbmdNb2RpZmllZCk7Ci0JCUFzc2VydCghKG9s ZHR1cC50X2RhdGEtPnRfaW5mb21hc2sgJiBIRUFQX1hNQVhfSU5WQUxJRCkpOworCQlBc3Nl cnQoIShvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzayAmIEhFQVBfWE1BWF9JTlZBTElEKSk7 CiAJCUFzc2VydChyZXN1bHQgIT0gVE1fVXBkYXRlZCB8fAotCQkJICAgIUl0ZW1Qb2ludGVy RXF1YWxzKCZvbGR0dXAudF9zZWxmLCAmb2xkdHVwLnRfZGF0YS0+dF9jdGlkKSk7CisJCQkg ICAhSXRlbVBvaW50ZXJFcXVhbHMoJm9sZHR1cC0+dF9zZWxmLCAmb2xkdHVwLT50X2RhdGEt PnRfY3RpZCkpOwogCX0KIAogCWlmIChjcm9zc2NoZWNrICE9IEludmFsaWRTbmFwc2hvdCAm JiByZXN1bHQgPT0gVE1fT2spCiAJewogCQkvKiBQZXJmb3JtIGFkZGl0aW9uYWwgY2hlY2sg Zm9yIHRyYW5zYWN0aW9uLXNuYXBzaG90IG1vZGUgUkkgdXBkYXRlcyAqLwotCQlpZiAoIUhl YXBUdXBsZVNhdGlzZmllc1Zpc2liaWxpdHkoJm9sZHR1cCwgY3Jvc3NjaGVjaywgYnVmZmVy KSkKKwkJaWYgKCFIZWFwVHVwbGVTYXRpc2ZpZXNWaXNpYmlsaXR5KG9sZHR1cCwgY3Jvc3Nj aGVjaywgYnVmZmVyKSkKIAkJCXJlc3VsdCA9IFRNX1VwZGF0ZWQ7CiAJfQogCiAJaWYgKHJl c3VsdCAhPSBUTV9PaykKIAl7Ci0JCXRtZmQtPmN0aWQgPSBvbGR0dXAudF9kYXRhLT50X2N0 aWQ7Ci0JCXRtZmQtPnhtYXggPSBIZWFwVHVwbGVIZWFkZXJHZXRVcGRhdGVYaWQob2xkdHVw LnRfZGF0YSk7CisJCXRtZmQtPmN0aWQgPSBvbGR0dXAtPnRfZGF0YS0+dF9jdGlkOworCQl0 bWZkLT54bWF4ID0gSGVhcFR1cGxlSGVhZGVyR2V0VXBkYXRlWGlkKG9sZHR1cC0+dF9kYXRh KTsKIAkJaWYgKHJlc3VsdCA9PSBUTV9TZWxmTW9kaWZpZWQpCi0JCQl0bWZkLT5jbWF4ID0g SGVhcFR1cGxlSGVhZGVyR2V0Q21heChvbGR0dXAudF9kYXRhKTsKKwkJCXRtZmQtPmNtYXgg PSBIZWFwVHVwbGVIZWFkZXJHZXRDbWF4KG9sZHR1cC0+dF9kYXRhKTsKIAkJZWxzZQogCQkJ dG1mZC0+Y21heCA9IEludmFsaWRDb21tYW5kSWQ7CiAJCVVubG9ja1JlbGVhc2VCdWZmZXIo YnVmZmVyKTsKIAkJaWYgKGhhdmVfdHVwbGVfbG9jaykKLQkJCVVubG9ja1R1cGxlVHVwbG9j ayhyZWxhdGlvbiwgJihvbGR0dXAudF9zZWxmKSwgKmxvY2ttb2RlKTsKKwkJCVVubG9ja1R1 cGxlVHVwbG9jayhyZWxhdGlvbiwgJm9sZHR1cC0+dF9zZWxmLCAqbG9ja21vZGUpOwogCQlp ZiAodm1idWZmZXIgIT0gSW52YWxpZEJ1ZmZlcikKIAkJCVJlbGVhc2VCdWZmZXIodm1idWZm ZXIpOwotCQkqdXBkYXRlX2luZGV4ZXMgPSBUVV9Ob25lOwogCi0JCWJtc19mcmVlKGhvdF9h dHRycyk7Ci0JCWJtc19mcmVlKHN1bV9hdHRycyk7Ci0JCWJtc19mcmVlKGtleV9hdHRycyk7 Ci0JCWJtc19mcmVlKGlkX2F0dHJzKTsKLQkJLyogbW9kaWZpZWQgYXR0cnMgaXMgcGFzc2Vk IGluIGFuZCBmcmVlJ2QgYnkgdGhlIGNhbGxlciwgb3IgTlVMTCAqLwotCQlibXNfZnJlZShp bnRlcmVzdGluZ19hdHRycyk7CiAJCXJldHVybiByZXN1bHQ7CiAJfQogCkBAIC0zODUxLDkg KzM2MzAsOSBAQCBsMjoKIAkgKiBJZiB0aGUgdHVwbGUgd2UncmUgdXBkYXRpbmcgaXMgbG9j a2VkLCB3ZSBuZWVkIHRvIHByZXNlcnZlIHRoZSBsb2NraW5nCiAJICogaW5mbyBpbiB0aGUg b2xkIHR1cGxlJ3MgWG1heC4gIFByZXBhcmUgYSBuZXcgWG1heCB2YWx1ZSBmb3IgdGhpcy4K IAkgKi8KLQljb21wdXRlX25ld194bWF4X2luZm9tYXNrKEhlYXBUdXBsZUhlYWRlckdldFJh d1htYXgob2xkdHVwLnRfZGF0YSksCi0JCQkJCQkJICBvbGR0dXAudF9kYXRhLT50X2luZm9t YXNrLAotCQkJCQkJCSAgb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzazIsCisJY29tcHV0ZV9u ZXdfeG1heF9pbmZvbWFzayhIZWFwVHVwbGVIZWFkZXJHZXRSYXdYbWF4KG9sZHR1cC0+dF9k YXRhKSwKKwkJCQkJCQkgIG9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrLAorCQkJCQkJCSAg b2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2syLAogCQkJCQkJCSAgeGlkLCAqbG9ja21vZGUs IHRydWUsCiAJCQkJCQkJICAmeG1heF9vbGRfdHVwbGUsICZpbmZvbWFza19vbGRfdHVwbGUs CiAJCQkJCQkJICAmaW5mb21hc2syX29sZF90dXBsZSk7CkBAIC0zODY1LDEyICszNjQ0LDEy IEBAIGwyOgogCSAqIHR1cGxlLiAgKEluIHJhcmUgY2FzZXMgdGhhdCBtaWdodCBhbHNvIGJl IEludmFsaWRUcmFuc2FjdGlvbklkIGFuZCB5ZXQKIAkgKiBub3QgaGF2ZSB0aGUgSEVBUF9Y TUFYX0lOVkFMSUQgYml0IHNldDsgdGhhdCdzIGZpbmUuKQogCSAqLwotCWlmICgob2xkdHVw LnRfZGF0YS0+dF9pbmZvbWFzayAmIEhFQVBfWE1BWF9JTlZBTElEKSB8fAotCQlIRUFQX0xP Q0tFRF9VUEdSQURFRChvbGR0dXAudF9kYXRhLT50X2luZm9tYXNrKSB8fAorCWlmICgob2xk dHVwLT50X2RhdGEtPnRfaW5mb21hc2sgJiBIRUFQX1hNQVhfSU5WQUxJRCkgfHwKKwkJSEVB UF9MT0NLRURfVVBHUkFERUQob2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2spIHx8CiAJCShj aGVja2VkX2xvY2tlcnMgJiYgIWxvY2tlcl9yZW1haW5zKSkKIAkJeG1heF9uZXdfdHVwbGUg PSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAllbHNlCi0JCXhtYXhfbmV3X3R1cGxlID0gSGVh cFR1cGxlSGVhZGVyR2V0UmF3WG1heChvbGR0dXAudF9kYXRhKTsKKwkJeG1heF9uZXdfdHVw bGUgPSBIZWFwVHVwbGVIZWFkZXJHZXRSYXdYbWF4KG9sZHR1cC0+dF9kYXRhKTsKIAogCWlm ICghVHJhbnNhY3Rpb25JZElzVmFsaWQoeG1heF9uZXdfdHVwbGUpKQogCXsKQEAgLTM4ODUs NyArMzY2NCw3IEBAIGwyOgogCQkgKiBOb3RlIHRoYXQgc2luY2Ugd2UncmUgZG9pbmcgYW4g dXBkYXRlLCB0aGUgb25seSBwb3NzaWJpbGl0eSBpcyB0aGF0CiAJCSAqIHRoZSBsb2NrZXJz IGhhZCBGT1IgS0VZIFNIQVJFIGxvY2suCiAJCSAqLwotCQlpZiAob2xkdHVwLnRfZGF0YS0+ dF9pbmZvbWFzayAmIEhFQVBfWE1BWF9JU19NVUxUSSkKKwkJaWYgKG9sZHR1cC0+dF9kYXRh LT50X2luZm9tYXNrICYgSEVBUF9YTUFYX0lTX01VTFRJKQogCQl7CiAJCQlHZXRNdWx0aVhh Y3RJZEhpbnRCaXRzKHhtYXhfbmV3X3R1cGxlLCAmaW5mb21hc2tfbmV3X3R1cGxlLAogCQkJ CQkJCQkgICAmaW5mb21hc2syX25ld190dXBsZSk7CkBAIC0zOTEzLDcgKzM2OTIsNyBAQCBs MjoKIAkgKiBSZXBsYWNlIGNpZCB3aXRoIGEgY29tYm8gQ0lEIGlmIG5lY2Vzc2FyeS4gIE5v dGUgdGhhdCB3ZSBhbHJlYWR5IHB1dAogCSAqIHRoZSBwbGFpbiBjaWQgaW50byB0aGUgbmV3 IHR1cGxlLgogCSAqLwotCUhlYXBUdXBsZUhlYWRlckFkanVzdENtYXgob2xkdHVwLnRfZGF0 YSwgJmNpZCwgJmlzY29tYm8pOworCUhlYXBUdXBsZUhlYWRlckFkanVzdENtYXgob2xkdHVw LT50X2RhdGEsICZjaWQsICZpc2NvbWJvKTsKIAogCS8qCiAJICogSWYgdGhlIHRvYXN0ZXIg bmVlZHMgdG8gYmUgYWN0aXZhdGVkLCBPUiBpZiB0aGUgbmV3IHR1cGxlIHdpbGwgbm90IGZp dApAQCAtMzkzMCwxMiArMzcwOSwxMiBAQCBsMjoKIAkJcmVsYXRpb24tPnJkX3JlbC0+cmVs a2luZCAhPSBSRUxLSU5EX01BVFZJRVcpCiAJewogCQkvKiB0b2FzdCB0YWJsZSBlbnRyaWVz IHNob3VsZCBuZXZlciBiZSByZWN1cnNpdmVseSB0b2FzdGVkICovCi0JCUFzc2VydCghSGVh cFR1cGxlSGFzRXh0ZXJuYWwoJm9sZHR1cCkpOworCQlBc3NlcnQoIUhlYXBUdXBsZUhhc0V4 dGVybmFsKG9sZHR1cCkpOwogCQlBc3NlcnQoIUhlYXBUdXBsZUhhc0V4dGVybmFsKG5ld3R1 cCkpOwogCQluZWVkX3RvYXN0ID0gZmFsc2U7CiAJfQogCWVsc2UKLQkJbmVlZF90b2FzdCA9 IChIZWFwVHVwbGVIYXNFeHRlcm5hbCgmb2xkdHVwKSB8fAorCQluZWVkX3RvYXN0ID0gKEhl YXBUdXBsZUhhc0V4dGVybmFsKG9sZHR1cCkgfHwKIAkJCQkJICBIZWFwVHVwbGVIYXNFeHRl cm5hbChuZXd0dXApIHx8CiAJCQkJCSAgbmV3dHVwLT50X2xlbiA+IFRPQVNUX1RVUExFX1RI UkVTSE9MRCk7CiAKQEAgLTM5NjgsOSArMzc0Nyw5IEBAIGwyOgogCQkgKiB1cGRhdGluZywg YmVjYXVzZSB0aGUgcG90ZW50aWFsbHkgY3JlYXRlZCBtdWx0aXhhY3Qgd291bGQgb3RoZXJ3 aXNlCiAJCSAqIGJlIHdyb25nLgogCQkgKi8KLQkJY29tcHV0ZV9uZXdfeG1heF9pbmZvbWFz ayhIZWFwVHVwbGVIZWFkZXJHZXRSYXdYbWF4KG9sZHR1cC50X2RhdGEpLAotCQkJCQkJCQkg IG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2ssCi0JCQkJCQkJCSAgb2xkdHVwLnRfZGF0YS0+ dF9pbmZvbWFzazIsCisJCWNvbXB1dGVfbmV3X3htYXhfaW5mb21hc2soSGVhcFR1cGxlSGVh ZGVyR2V0UmF3WG1heChvbGR0dXAtPnRfZGF0YSksCisJCQkJCQkJCSAgb2xkdHVwLT50X2Rh dGEtPnRfaW5mb21hc2ssCisJCQkJCQkJCSAgb2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2sy LAogCQkJCQkJCQkgIHhpZCwgKmxvY2ttb2RlLCBmYWxzZSwKIAkJCQkJCQkJICAmeG1heF9s b2NrX29sZF90dXBsZSwgJmluZm9tYXNrX2xvY2tfb2xkX3R1cGxlLAogCQkJCQkJCQkgICZp bmZvbWFzazJfbG9ja19vbGRfdHVwbGUpOwpAQCAtMzk4MCwxOCArMzc1OSwxOCBAQCBsMjoK IAkJU1RBUlRfQ1JJVF9TRUNUSU9OKCk7CiAKIAkJLyogQ2xlYXIgb2Jzb2xldGUgdmlzaWJp bGl0eSBmbGFncyAuLi4gKi8KLQkJb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzayAmPSB+KEhF QVBfWE1BWF9CSVRTIHwgSEVBUF9NT1ZFRCk7Ci0JCW9sZHR1cC50X2RhdGEtPnRfaW5mb21h c2syICY9IH5IRUFQX0tFWVNfVVBEQVRFRDsKLQkJSGVhcFR1cGxlQ2xlYXJIb3RVcGRhdGVk KCZvbGR0dXApOworCQlvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzayAmPSB+KEhFQVBfWE1B WF9CSVRTIHwgSEVBUF9NT1ZFRCk7CisJCW9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrMiAm PSB+SEVBUF9LRVlTX1VQREFURUQ7CisJCUhlYXBUdXBsZUNsZWFySG90VXBkYXRlZChvbGR0 dXApOwogCQkvKiAuLi4gYW5kIHN0b3JlIGluZm8gYWJvdXQgdHJhbnNhY3Rpb24gdXBkYXRp bmcgdGhpcyB0dXBsZSAqLwogCQlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoeG1heF9s b2NrX29sZF90dXBsZSkpOwotCQlIZWFwVHVwbGVIZWFkZXJTZXRYbWF4KG9sZHR1cC50X2Rh dGEsIHhtYXhfbG9ja19vbGRfdHVwbGUpOwotCQlvbGR0dXAudF9kYXRhLT50X2luZm9tYXNr IHw9IGluZm9tYXNrX2xvY2tfb2xkX3R1cGxlOwotCQlvbGR0dXAudF9kYXRhLT50X2luZm9t YXNrMiB8PSBpbmZvbWFzazJfbG9ja19vbGRfdHVwbGU7Ci0JCUhlYXBUdXBsZUhlYWRlclNl dENtYXgob2xkdHVwLnRfZGF0YSwgY2lkLCBpc2NvbWJvKTsKKwkJSGVhcFR1cGxlSGVhZGVy U2V0WG1heChvbGR0dXAtPnRfZGF0YSwgeG1heF9sb2NrX29sZF90dXBsZSk7CisJCW9sZHR1 cC0+dF9kYXRhLT50X2luZm9tYXNrIHw9IGluZm9tYXNrX2xvY2tfb2xkX3R1cGxlOworCQlv bGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzazIgfD0gaW5mb21hc2syX2xvY2tfb2xkX3R1cGxl OworCQlIZWFwVHVwbGVIZWFkZXJTZXRDbWF4KG9sZHR1cC0+dF9kYXRhLCBjaWQsIGlzY29t Ym8pOwogCiAJCS8qIHRlbXBvcmFyaWx5IG1ha2UgaXQgbG9vayBub3QtdXBkYXRlZCwgYnV0 IGxvY2tlZCAqLwotCQlvbGR0dXAudF9kYXRhLT50X2N0aWQgPSBvbGR0dXAudF9zZWxmOwor CQlvbGR0dXAtPnRfZGF0YS0+dF9jdGlkID0gb2xkdHVwLT50X3NlbGY7CiAKIAkJLyoKIAkJ ICogQ2xlYXIgYWxsLWZyb3plbiBiaXQgb24gdmlzaWJpbGl0eSBtYXAgaWYgbmVlZGVkLiBX ZSBjb3VsZApAQCAtNDAxNCwxMCArMzc5MywxMCBAQCBsMjoKIAkJCVhMb2dCZWdpbkluc2Vy dCgpOwogCQkJWExvZ1JlZ2lzdGVyQnVmZmVyKDAsIGJ1ZmZlciwgUkVHQlVGX1NUQU5EQVJE KTsKIAotCQkJeGxyZWMub2ZmbnVtID0gSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXIoJm9s ZHR1cC50X3NlbGYpOworCQkJeGxyZWMub2ZmbnVtID0gSXRlbVBvaW50ZXJHZXRPZmZzZXRO dW1iZXIoJm9sZHR1cC0+dF9zZWxmKTsKIAkJCXhscmVjLnhtYXggPSB4bWF4X2xvY2tfb2xk X3R1cGxlOwotCQkJeGxyZWMuaW5mb2JpdHNfc2V0ID0gY29tcHV0ZV9pbmZvYml0cyhvbGR0 dXAudF9kYXRhLT50X2luZm9tYXNrLAotCQkJCQkJCQkJCQkJICBvbGR0dXAudF9kYXRhLT50 X2luZm9tYXNrMik7CisJCQl4bHJlYy5pbmZvYml0c19zZXQgPSBjb21wdXRlX2luZm9iaXRz KG9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrLAorCQkJCQkJCQkJCQkJICBvbGR0dXAtPnRf ZGF0YS0+dF9pbmZvbWFzazIpOwogCQkJeGxyZWMuZmxhZ3MgPQogCQkJCWNsZWFyZWRfYWxs X2Zyb3plbiA/IFhMSF9MT0NLX0FMTF9GUk9aRU5fQ0xFQVJFRCA6IDA7CiAJCQlYTG9nUmVn aXN0ZXJEYXRhKCZ4bHJlYywgU2l6ZU9mSGVhcExvY2spOwpAQCAtNDAzOSw3ICszODE4LDcg QEAgbDI6CiAJCWlmIChuZWVkX3RvYXN0KQogCQl7CiAJCQkvKiBOb3RlIHdlIGFsd2F5cyB1 c2UgV0FMIGFuZCBGU00gZHVyaW5nIHVwZGF0ZXMgKi8KLQkJCWhlYXB0dXAgPSBoZWFwX3Rv YXN0X2luc2VydF9vcl91cGRhdGUocmVsYXRpb24sIG5ld3R1cCwgJm9sZHR1cCwgMCk7CisJ CQloZWFwdHVwID0gaGVhcF90b2FzdF9pbnNlcnRfb3JfdXBkYXRlKHJlbGF0aW9uLCBuZXd0 dXAsIG9sZHR1cCwgMCk7CiAJCQluZXd0dXBzaXplID0gTUFYQUxJR04oaGVhcHR1cC0+dF9s ZW4pOwogCQl9CiAJCWVsc2UKQEAgLTQxMjYsNDIgKzM5MDUsMjEgQEAgbDI6CiAJICogd2ls bCBpbmNsdWRlIGNoZWNraW5nIHRoZSByZWxhdGlvbiBsZXZlbCwgdGhlcmUgaXMgbm8gYmVu ZWZpdCB0byBhCiAJICogc2VwYXJhdGUgY2hlY2sgZm9yIHRoZSBuZXcgdHVwbGUuCiAJICov Ci0JQ2hlY2tGb3JTZXJpYWxpemFibGVDb25mbGljdEluKHJlbGF0aW9uLCAmb2xkdHVwLnRf c2VsZiwKKwlDaGVja0ZvclNlcmlhbGl6YWJsZUNvbmZsaWN0SW4ocmVsYXRpb24sICZvbGR0 dXAtPnRfc2VsZiwKIAkJCQkJCQkJICAgQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmZmVyKSk7 CiAKIAkvKgogCSAqIEF0IHRoaXMgcG9pbnQgbmV3YnVmIGFuZCBidWZmZXIgYXJlIGJvdGgg cGlubmVkIGFuZCBsb2NrZWQsIGFuZCBuZXdidWYKLQkgKiBoYXMgZW5vdWdoIHNwYWNlIGZv ciB0aGUgbmV3IHR1cGxlLiAgSWYgdGhleSBhcmUgdGhlIHNhbWUgYnVmZmVyLCBvbmx5Ci0J ICogb25lIHBpbiBpcyBoZWxkLgorCSAqIGhhcyBlbm91Z2ggc3BhY2UgZm9yIHRoZSBuZXcg dHVwbGUgc28gd2UgY2FuIHVzZSB0aGUgSE9UIHVwZGF0ZSBwYXRoIGlmCisJICogdGhlIGNh bGxlciBkZXRlcm1pbmVkIHRoYXQgaXQgaXMgYWxsb3dhYmxlLgorCSAqCisJICogTk9URTog SWYgbmV3YnVmID09IGJ1ZmZlciB0aGVuIG9ubHkgb25lIHBpbiBpcyBoZWxkLgogCSAqLwot Ci0JaWYgKG5ld2J1ZiA9PSBidWZmZXIpCi0JewotCQkvKgotCQkgKiBTaW5jZSB0aGUgbmV3 IHR1cGxlIGlzIGdvaW5nIGludG8gdGhlIHNhbWUgcGFnZSwgd2UgbWlnaHQgYmUgYWJsZQot CQkgKiB0byBkbyBhIEhPVCB1cGRhdGUuICBDaGVjayBpZiBhbnkgb2YgdGhlIGluZGV4IGNv bHVtbnMgaGF2ZSBiZWVuCi0JCSAqIGNoYW5nZWQuCi0JCSAqLwotCQlpZiAoIWJtc19vdmVy bGFwKG1vZGlmaWVkX2F0dHJzLCBob3RfYXR0cnMpKQotCQl7Ci0JCQl1c2VfaG90X3VwZGF0 ZSA9IHRydWU7Ci0KLQkJCS8qCi0JCQkgKiBJZiBub25lIG9mIHRoZSBjb2x1bW5zIHRoYXQg YXJlIHVzZWQgaW4gaG90LWJsb2NraW5nIGluZGV4ZXMKLQkJCSAqIHdlcmUgdXBkYXRlZCwg d2UgY2FuIGFwcGx5IEhPVCwgYnV0IHdlIGRvIHN0aWxsIG5lZWQgdG8gY2hlY2sKLQkJCSAq IGlmIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBzdW1tYXJpemluZyBpbmRleGVzLCBhbmQgdXBk YXRlIHRob3NlCi0JCQkgKiBpbmRleGVzIGlmIHRoZSBjb2x1bW5zIHdlcmUgdXBkYXRlZCwg b3Igd2UgbWF5IGZhaWwgdG8gZGV0ZWN0Ci0JCQkgKiBlLmcuIHZhbHVlIGJvdW5kIGNoYW5n ZXMgaW4gQlJJTiBtaW5tYXggaW5kZXhlcy4KLQkJCSAqLwotCQkJaWYgKGJtc19vdmVybGFw KG1vZGlmaWVkX2F0dHJzLCBzdW1fYXR0cnMpKQotCQkJCXN1bW1hcml6ZWRfdXBkYXRlID0g dHJ1ZTsKLQkJfQotCX0KKwlpZiAoKG5ld2J1ZiA9PSBidWZmZXIpICYmIGhvdF9hbGxvd2Vk KQorCQl1c2VfaG90X3VwZGF0ZSA9IHRydWU7CiAJZWxzZQotCXsKIAkJLyogU2V0IGEgaGlu dCB0aGF0IHRoZSBvbGQgcGFnZSBjb3VsZCB1c2UgcHJ1bmUvZGVmcmFnICovCiAJCVBhZ2VT ZXRGdWxsKHBhZ2UpOwotCX0KIAogCS8qCiAJICogQ29tcHV0ZSByZXBsaWNhIGlkZW50aXR5 IHR1cGxlIGJlZm9yZSBlbnRlcmluZyB0aGUgY3JpdGljYWwgc2VjdGlvbiBzbwpAQCAtNDE3 MCw4ICszOTI4LDcgQEAgbDI6CiAJICogbG9nZ2VkLiAgUGFzcyBvbGQga2V5IHJlcXVpcmVk IGFzIHRydWUgb25seSBpZiB0aGUgcmVwbGljYSBpZGVudGl0eSBrZXkKIAkgKiBjb2x1bW5z IGFyZSBtb2RpZmllZCBvciBpdCBoYXMgZXh0ZXJuYWwgZGF0YS4KIAkgKi8KLQlvbGRfa2V5 X3R1cGxlID0gRXh0cmFjdFJlcGxpY2FJZGVudGl0eShyZWxhdGlvbiwgJm9sZHR1cCwKLQkJ CQkJCQkJCQkgICByZXBfaWRfa2V5X3JlcXVpcmVkLAorCW9sZF9rZXlfdHVwbGUgPSBFeHRy YWN0UmVwbGljYUlkZW50aXR5KHJlbGF0aW9uLCBvbGR0dXAsIHJlcF9pZF9rZXlfcmVxdWly ZWQsCiAJCQkJCQkJCQkJICAgJm9sZF9rZXlfY29waWVkKTsKIAogCS8qIE5PIEVSRVBPUlQo RVJST1IpIGZyb20gaGVyZSB0aWxsIGNoYW5nZXMgYXJlIGxvZ2dlZCAqLwpAQCAtNDE5NCw3 ICszOTUxLDcgQEAgbDI6CiAJaWYgKHVzZV9ob3RfdXBkYXRlKQogCXsKIAkJLyogTWFyayB0 aGUgb2xkIHR1cGxlIGFzIEhPVC11cGRhdGVkICovCi0JCUhlYXBUdXBsZVNldEhvdFVwZGF0 ZWQoJm9sZHR1cCk7CisJCUhlYXBUdXBsZVNldEhvdFVwZGF0ZWQob2xkdHVwKTsKIAkJLyog QW5kIG1hcmsgdGhlIG5ldyB0dXBsZSBhcyBoZWFwLW9ubHkgKi8KIAkJSGVhcFR1cGxlU2V0 SGVhcE9ubHkoaGVhcHR1cCk7CiAJCS8qIE1hcmsgdGhlIGNhbGxlcidzIGNvcHkgdG9vLCBp biBjYXNlIGRpZmZlcmVudCBmcm9tIGhlYXB0dXAgKi8KQEAgLTQyMDMsNyArMzk2MCw3IEBA IGwyOgogCWVsc2UKIAl7CiAJCS8qIE1ha2Ugc3VyZSB0dXBsZXMgYXJlIGNvcnJlY3RseSBt YXJrZWQgYXMgbm90LUhPVCAqLwotCQlIZWFwVHVwbGVDbGVhckhvdFVwZGF0ZWQoJm9sZHR1 cCk7CisJCUhlYXBUdXBsZUNsZWFySG90VXBkYXRlZChvbGR0dXApOwogCQlIZWFwVHVwbGVD bGVhckhlYXBPbmx5KGhlYXB0dXApOwogCQlIZWFwVHVwbGVDbGVhckhlYXBPbmx5KG5ld3R1 cCk7CiAJfQpAQCAtNDIxMiwxNyArMzk2OSwxNyBAQCBsMjoKIAogCiAJLyogQ2xlYXIgb2Jz b2xldGUgdmlzaWJpbGl0eSBmbGFncywgcG9zc2libHkgc2V0IGJ5IG91cnNlbHZlcyBhYm92 ZS4uLiAqLwotCW9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2sgJj0gfihIRUFQX1hNQVhfQklU UyB8IEhFQVBfTU9WRUQpOwotCW9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2syICY9IH5IRUFQ X0tFWVNfVVBEQVRFRDsKKwlvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzayAmPSB+KEhFQVBf WE1BWF9CSVRTIHwgSEVBUF9NT1ZFRCk7CisJb2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2sy ICY9IH5IRUFQX0tFWVNfVVBEQVRFRDsKIAkvKiAuLi4gYW5kIHN0b3JlIGluZm8gYWJvdXQg dHJhbnNhY3Rpb24gdXBkYXRpbmcgdGhpcyB0dXBsZSAqLwogCUFzc2VydChUcmFuc2FjdGlv bklkSXNWYWxpZCh4bWF4X29sZF90dXBsZSkpOwotCUhlYXBUdXBsZUhlYWRlclNldFhtYXgo b2xkdHVwLnRfZGF0YSwgeG1heF9vbGRfdHVwbGUpOwotCW9sZHR1cC50X2RhdGEtPnRfaW5m b21hc2sgfD0gaW5mb21hc2tfb2xkX3R1cGxlOwotCW9sZHR1cC50X2RhdGEtPnRfaW5mb21h c2syIHw9IGluZm9tYXNrMl9vbGRfdHVwbGU7Ci0JSGVhcFR1cGxlSGVhZGVyU2V0Q21heChv bGR0dXAudF9kYXRhLCBjaWQsIGlzY29tYm8pOworCUhlYXBUdXBsZUhlYWRlclNldFhtYXgo b2xkdHVwLT50X2RhdGEsIHhtYXhfb2xkX3R1cGxlKTsKKwlvbGR0dXAtPnRfZGF0YS0+dF9p bmZvbWFzayB8PSBpbmZvbWFza19vbGRfdHVwbGU7CisJb2xkdHVwLT50X2RhdGEtPnRfaW5m b21hc2syIHw9IGluZm9tYXNrMl9vbGRfdHVwbGU7CisJSGVhcFR1cGxlSGVhZGVyU2V0Q21h eChvbGR0dXAtPnRfZGF0YSwgY2lkLCBpc2NvbWJvKTsKIAogCS8qIHJlY29yZCBhZGRyZXNz IG9mIG5ldyB0dXBsZSBpbiB0X2N0aWQgb2Ygb2xkIG9uZSAqLwotCW9sZHR1cC50X2RhdGEt PnRfY3RpZCA9IGhlYXB0dXAtPnRfc2VsZjsKKwlvbGR0dXAtPnRfZGF0YS0+dF9jdGlkID0g aGVhcHR1cC0+dF9zZWxmOwogCiAJLyogY2xlYXIgUERfQUxMX1ZJU0lCTEUgZmxhZ3MsIHJl c2V0IGFsbCB2aXNpYmlsaXR5bWFwIGJpdHMgKi8KIAlpZiAoUGFnZUlzQWxsVmlzaWJsZShC dWZmZXJHZXRQYWdlKGJ1ZmZlcikpKQpAQCAtNDI1NSwxMiArNDAxMiwxMiBAQCBsMjoKIAkJ ICovCiAJCWlmIChSZWxhdGlvbklzQWNjZXNzaWJsZUluTG9naWNhbERlY29kaW5nKHJlbGF0 aW9uKSkKIAkJewotCQkJbG9nX2hlYXBfbmV3X2NpZChyZWxhdGlvbiwgJm9sZHR1cCk7CisJ CQlsb2dfaGVhcF9uZXdfY2lkKHJlbGF0aW9uLCBvbGR0dXApOwogCQkJbG9nX2hlYXBfbmV3 X2NpZChyZWxhdGlvbiwgaGVhcHR1cCk7CiAJCX0KIAogCQlyZWNwdHIgPSBsb2dfaGVhcF91 cGRhdGUocmVsYXRpb24sIGJ1ZmZlciwKLQkJCQkJCQkJIG5ld2J1ZiwgJm9sZHR1cCwgaGVh cHR1cCwKKwkJCQkJCQkJIG5ld2J1Ziwgb2xkdHVwLCBoZWFwdHVwLAogCQkJCQkJCQkgb2xk X2tleV90dXBsZSwKIAkJCQkJCQkJIGFsbF92aXNpYmxlX2NsZWFyZWQsCiAJCQkJCQkJCSBh bGxfdmlzaWJsZV9jbGVhcmVkX25ldyk7CkBAIC00Mjg1LDcgKzQwNDIsNyBAQCBsMjoKIAkg KiBib3RoIHR1cGxlIHZlcnNpb25zIGluIG9uZSBjYWxsIHRvIGludmFsLmMgc28gd2UgY2Fu IGF2b2lkIHJlZHVuZGFudAogCSAqIHNpbnZhbCBtZXNzYWdlcy4pCiAJICovCi0JQ2FjaGVJ bnZhbGlkYXRlSGVhcFR1cGxlKHJlbGF0aW9uLCAmb2xkdHVwLCBoZWFwdHVwKTsKKwlDYWNo ZUludmFsaWRhdGVIZWFwVHVwbGUocmVsYXRpb24sIG9sZHR1cCwgaGVhcHR1cCk7CiAKIAkv KiBOb3cgd2UgY2FuIHJlbGVhc2UgdGhlIGJ1ZmZlcihzKSAqLwogCWlmIChuZXdidWYgIT0g YnVmZmVyKQpAQCAtNDMwMCw3ICs0MDU3LDcgQEAgbDI6CiAJICogUmVsZWFzZSB0aGUgbG1n ciB0dXBsZSBsb2NrLCBpZiB3ZSBoYWQgaXQuCiAJICovCiAJaWYgKGhhdmVfdHVwbGVfbG9j aykKLQkJVW5sb2NrVHVwbGVUdXBsb2NrKHJlbGF0aW9uLCAmKG9sZHR1cC50X3NlbGYpLCAq bG9ja21vZGUpOworCQlVbmxvY2tUdXBsZVR1cGxvY2socmVsYXRpb24sICZvbGR0dXAtPnRf c2VsZiwgKmxvY2ttb2RlKTsKIAogCXBnc3RhdF9jb3VudF9oZWFwX3VwZGF0ZShyZWxhdGlv biwgdXNlX2hvdF91cGRhdGUsIG5ld2J1ZiAhPSBidWZmZXIpOwogCkBAIC00MzE0LDMyICs0 MDcxLDkgQEAgbDI6CiAJCWhlYXBfZnJlZXR1cGxlKGhlYXB0dXApOwogCX0KIAotCS8qCi0J ICogSWYgaXQgaXMgYSBIT1QgdXBkYXRlLCB0aGUgdXBkYXRlIG1heSBzdGlsbCBuZWVkIHRv IHVwZGF0ZSBzdW1tYXJpemVkCi0JICogaW5kZXhlcywgbGVzdCB3ZSBmYWlsIHRvIHVwZGF0 ZSB0aG9zZSBzdW1tYXJpZXMgYW5kIGdldCBpbmNvcnJlY3QKLQkgKiByZXN1bHRzIChmb3Ig ZXhhbXBsZSwgbWlubWF4IGJvdW5kcyBvZiB0aGUgYmxvY2sgbWF5IGNoYW5nZSB3aXRoIHRo aXMKLQkgKiB1cGRhdGUpLgotCSAqLwotCWlmICh1c2VfaG90X3VwZGF0ZSkKLQl7Ci0JCWlm IChzdW1tYXJpemVkX3VwZGF0ZSkKLQkJCSp1cGRhdGVfaW5kZXhlcyA9IFRVX1N1bW1hcml6 aW5nOwotCQllbHNlCi0JCQkqdXBkYXRlX2luZGV4ZXMgPSBUVV9Ob25lOwotCX0KLQllbHNl Ci0JCSp1cGRhdGVfaW5kZXhlcyA9IFRVX0FsbDsKLQogCWlmIChvbGRfa2V5X3R1cGxlICE9 IE5VTEwgJiYgb2xkX2tleV9jb3BpZWQpCiAJCWhlYXBfZnJlZXR1cGxlKG9sZF9rZXlfdHVw bGUpOwogCi0JYm1zX2ZyZWUoaG90X2F0dHJzKTsKLQlibXNfZnJlZShzdW1fYXR0cnMpOwot CWJtc19mcmVlKGtleV9hdHRycyk7Ci0JYm1zX2ZyZWUoaWRfYXR0cnMpOwotCS8qIG1vZGlm aWVkIGF0dHJzIGlzIHBhc3NlZCBpbiBhbmQgZnJlZSdkIGJ5IHRoZSBjYWxsZXIsIG9yIE5V TEwgKi8KLQlibXNfZnJlZShpbnRlcmVzdGluZ19hdHRycyk7Ci0KIAlyZXR1cm4gVE1fT2s7 CiB9CiAKQEAgLTQzNDgsNyArNDA4Miw3IEBAIGwyOgogICogQ29uZmlybSBhZGVxdWF0ZSBs b2NrIGhlbGQgZHVyaW5nIGhlYXBfdXBkYXRlKCksIHBlciBydWxlcyBmcm9tCiAgKiBSRUFE TUUudHVwbG9jayBzZWN0aW9uICJMb2NraW5nIHRvIHdyaXRlIGlucGxhY2UtdXBkYXRlZCB0 YWJsZXMiLgogICovCi1zdGF0aWMgdm9pZAordm9pZAogY2hlY2tfbG9ja19pZl9pbnBsYWNl X3VwZGF0ZWFibGVfcmVsKFJlbGF0aW9uIHJlbGF0aW9uLAogCQkJCQkJCQkJIGNvbnN0IEl0 ZW1Qb2ludGVyRGF0YSAqb3RpZCwKIAkJCQkJCQkJCSBIZWFwVHVwbGUgbmV3dHVwKQpAQCAt NDUxMCw2ICs0MjQ0LDE1NSBAQCBoZWFwX2F0dHJfZXF1YWxzKFR1cGxlRGVzYyB0dXBkZXNj LCBpbnQgYXR0cm51bSwgRGF0dW0gdmFsdWUxLCBEYXR1bSB2YWx1ZTIsCiAJfQogfQogCisv KgorICogSE9UIHVwZGF0ZXMgYXJlIHBvc3NpYmxlIHdoZW4gZWl0aGVyOiBhKSB0aGVyZSBh cmUgbm8gbW9kaWZpZWQgaW5kZXhlZAorICogYXR0cmlidXRlcywgb3IgYikgdGhlIG1vZGlm aWVkIGF0dHJpYnV0ZXMgYXJlIGFsbCBvbiBzdW1tYXJpemluZyBpbmRleGVzLgorICogTGF0 ZXIsIGluIGhlYXBfdXBkYXRlKCksIHdlIGNhbiBjaG9vc2UgdG8gcGVyZm9ybSBhIEhPVCB1 cGRhdGUgaWYgdGhlcmUgaXMKKyAqIHNwYWNlIG9uIHRoZSBwYWdlIGZvciB0aGUgbmV3IHR1 cGxlIGFuZCB0aGUgZm9sbG93aW5nIGNvZGUgaGFzIGRldGVybWluZWQKKyAqIHRoYXQgSE9U IGlzIGFsbG93ZWQuCisgKi8KK2Jvb2wKK0hlYXBVcGRhdGVIb3RBbGxvd2FibGUoUmVsYXRp b24gcmVsYXRpb24sIGNvbnN0IEJpdG1hcHNldCAqbWl4X2F0dHJzLCBib29sICpzdW1tYXJp emVkX29ubHkpCit7CisJYm9vbAkJaG90X2FsbG93ZWQ7CisKKwkvKgorCSAqIExldCdzIGJl IG9wdGltaXN0aWMgYW5kIHN0YXJ0IG9mZiBieSBhc3N1bWluZyB0aGUgYmVzdCBjYXNlLCBu byBpbmRleGVzCisJICogbmVlZCB1cGRhdGluZyBhbmQgSE9UIGlzIGFsbG93YWJsZS4KKwkg Ki8KKwlob3RfYWxsb3dlZCA9IHRydWU7CisJKnN1bW1hcml6ZWRfb25seSA9IGZhbHNlOwor CisJLyoKKwkgKiBDaGVjayBmb3IgY2FzZSAoYSk7IHdoZW4gdGhlcmUgYXJlIG5vIG1vZGlm aWVkIGluZGV4IGF0dHJpYnV0ZXMgSE9UIGlzCisJICogYWxsb3dlZC4KKwkgKi8KKwlpZiAo Ym1zX2lzX2VtcHR5KG1peF9hdHRycykpCisJCWhvdF9hbGxvd2VkID0gdHJ1ZTsKKwllbHNl CisJeworCQlCaXRtYXBzZXQgICpzdW1fYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJp dG1hcChyZWxhdGlvbiwKKwkJCQkJCQkJCQkJCQkJICAgSU5ERVhfQVRUUl9CSVRNQVBfU1VN TUFSSVpFRCk7CisKKwkJLyoKKwkJICogQXQgbGVhc3Qgb25lIGluZGV4IGF0dHJpYnV0ZSB3 YXMgbW9kaWZpZWQsIGJ1dCBpcyB0aGlzIGNhc2UgKGIpCisJCSAqIHdoZXJlIGFsbCB0aGUg bW9kaWZpZWQgaW5kZXggYXR0cmlidXRlcyBhcmUgb25seSB1c2VkIGJ5CisJCSAqIHN1bW1h cml6aW5nIGluZGV4ZXM/CisJCSAqLworCQlpZiAoYm1zX2lzX3N1YnNldChtaXhfYXR0cnMs IHN1bV9hdHRycykpCisJCXsKKwkJCWhvdF9hbGxvd2VkID0gdHJ1ZTsKKwkJCSpzdW1tYXJp emVkX29ubHkgPSB0cnVlOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIE5vdyB3 ZSBrbm93IHRoYXQgb25lIG9yIG1vcmUgaW5kZXhlZCBhdHRyaWJ1dGUgd2VyZSB1cGRhdGVk IGFuZAorCQkJICogdGhhdCB0aGVyZSB3YXMgYXQgbGVhc3Qgb25lIG9mIHRob3NlIGF0dHJp YnV0ZXMgd2VyZSByZWZlcmVuY2VkCisJCQkgKiBieSBhIG5vbi1zdW1tYXJpemluZyBpbmRl eC4gSE9UIGlzIG5vdCBhbGxvd2VkLgorCQkJICovCisJCQlob3RfYWxsb3dlZCA9IGZhbHNl OworCQl9CisKKwkJYm1zX2ZyZWUoc3VtX2F0dHJzKTsKKwl9CisKKwlyZXR1cm4gaG90X2Fs bG93ZWQ7Cit9CisKK2Jvb2wKK0hlYXBVcGRhdGVSZXF1aXJlc1JlcGxpY2FJZChSZWxhdGlv biByZWxhdGlvbiwgY29uc3QgQml0bWFwc2V0ICptaXhfYXR0cnMsCisJCQkJCQkJSGVhcFR1 cGxlRGF0YSAqdHVwbGUpCit7CisJYm9vbAkJcmVwX2lkX2tleV9yZXF1aXJlZDsKKwlCaXRt YXBzZXQgICpyaWRfYXR0cnMsCisJCQkgICAqaWR4X2F0dHJzOworCisJcmlkX2F0dHJzID0g UmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24sCisJCQkJCQkJCQkJICAgSU5E RVhfQVRUUl9CSVRNQVBfSURFTlRJVFlfS0VZKTsKKworCWlmIChibXNfaXNfZW1wdHkocmlk X2F0dHJzKSkKKwl7CisJCWJtc19mcmVlKHJpZF9hdHRycyk7CisJCXJldHVybiBmYWxzZTsK Kwl9CisKKwlpZHhfYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChyZWxhdGlv biwKKwkJCQkJCQkJCQkgICBJTkRFWF9BVFRSX0JJVE1BUF9JTkRFWEVEKTsKKworCS8qCisJ ICogRXh0cmFjdFJlcGxpY2F0SWRlbnRpdHkoKSBuZWVkcyB0byBrbm93IGlmIGEgbW9kaWZp ZWQgaW5kZXhlZCBhdHRyYnV0ZQorCSAqIGlzIHVzZWQgYXMgYSByZXBsaWNhIGluZGVudGl0 eSBvciBpZiBhbnkgb2YgdGhlIHVubW9kaWZpZWQgaW5kZXhlZAorCSAqIGF0dHJpYnV0ZXMg aW4gdGhlIG9sZCB0dXBsZSBhcmUgc3RvcmVkIGV4dGVybmFsbHkgYW5kIHVzZWQgYXMgYSBy ZXBsaWNhCisJICogaWRlbnRpdHkuCisJICovCisJcmVwX2lkX2tleV9yZXF1aXJlZCA9IGJt c19vdmVybGFwKG1peF9hdHRycywgcmlkX2F0dHJzKTsKKwlpZiAoIXJlcF9pZF9rZXlfcmVx dWlyZWQpCisJeworCQlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVs YXRpb24pOworCQlpbnQJCQlhdHRpZHg7CisKKwkJLyogQ2hlY2sgb25seSB1bm1vZGlmaWVk IGluZGV4ZWQgcmVwbGljYSBpZGVudGl0eSBrZXkgYXR0cmlidXRlcyAqLworCQlpZHhfYXR0 cnMgPSBibXNfZGVsX21lbWJlcnMoaWR4X2F0dHJzLCBtaXhfYXR0cnMpOworCQlpZHhfYXR0 cnMgPSBibXNfaW50X21lbWJlcnMoaWR4X2F0dHJzLCByaWRfYXR0cnMpOworCisJCWF0dGlk eCA9IC0xOworCQl3aGlsZSAoKGF0dGlkeCA9IGJtc19uZXh0X21lbWJlcihpZHhfYXR0cnMs IGF0dGlkeCkpID49IDApCisJCXsKKwkJCS8qIGF0dGlkeCBpcyB6ZXJvLWJhc2VkLCBhdHRy bnVtIGlzIHRoZSBub3JtYWwgYXR0cmlidXRlIG51bWJlciAqLworCQkJQXR0ck51bWJlcglh dHRybnVtID0gYXR0aWR4ICsgRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcjsK KwkJCURhdHVtCQl2YWx1ZTsKKwkJCWJvb2wJCWlzbnVsbDsKKworCQkJLyoKKwkJCSAqIFN5 c3RlbSBhdHRyaWJ1dGVzIGFyZSBub3QgYWRkZWQgaW50byBpbnRlcmVzdGluZ19hdHRycyBp bgorCQkJICogcmVsY2FjaGUuCisJCQkgKi8KKwkJCUFzc2VydChhdHRybnVtID4gMCk7CisK KwkJCXZhbHVlID0gaGVhcF9nZXRhdHRyKHR1cGxlLCBhdHRybnVtLCB0dXBkZXNjLCAmaXNu dWxsKTsKKworCQkJLyogTm8gbmVlZCB0byBjaGVjayBhdHRyaWJ1dGVzIHRoYXQgY2FuJ3Qg YmUgc3RvcmVkIGV4dGVybmFsbHkgKi8KKwkJCWlmIChpc251bGwgfHwKKwkJCQlUdXBsZURl c2NDb21wYWN0QXR0cih0dXBkZXNjLCBhdHRybnVtIC0gMSktPmF0dGxlbiAhPSAtMSkKKwkJ CQljb250aW51ZTsKKworCQkJLyogQ2hlY2sgaWYgdGhlIG9sZCB0dXBsZSdzIGF0dHJpYnV0 ZSBpcyBzdG9yZWQgZXh0ZXJuYWxseSAqLworCQkJaWYgKFZBUkFUVF9JU19FWFRFUk5BTCgo c3RydWN0IHZhcmxlbmEgKikgRGF0dW1HZXRQb2ludGVyKHZhbHVlKSkpCisJCQl7CisJCQkJ cmVwX2lkX2tleV9yZXF1aXJlZCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9 CisKKwlibXNfZnJlZShyaWRfYXR0cnMpOworCWJtc19mcmVlKGlkeF9hdHRycyk7CisKKwly ZXR1cm4gcmVwX2lkX2tleV9yZXF1aXJlZDsKK30KKworLyoKKyAqIElmIHdlJ3JlIG5vdCB1 cGRhdGluZyBhbnkgImtleSIgYXR0cmlidXRlcywgd2UgY2FuIGdyYWIgYSB3ZWFrZXIgbG9j ayB0eXBlLgorICogVGhpcyBhbGxvd3MgZm9yIG1vcmUgY29uY3VycmVuY3kgd2hlbiB3ZSBh cmUgcnVubmluZyBzaW11bHRhbmVvdXNseSB3aXRoCisgKiBmb3JlaWduIGtleSBjaGVja3Mu CisgKi8KK0xvY2tUdXBsZU1vZGUKK0hlYXBVcGRhdGVEZXRlcm1pbmVMb2NrbW9kZShSZWxh dGlvbiByZWxhdGlvbiwgY29uc3QgQml0bWFwc2V0ICptaXhfYXR0cnMpCit7CisJTG9ja1R1 cGxlTW9kZSBsb2NrbW9kZSA9IExvY2tUdXBsZUV4Y2x1c2l2ZTsKKworCUJpdG1hcHNldCAg KmtleV9hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLAorCQkJ CQkJCQkJCQkJCSAgIElOREVYX0FUVFJfQklUTUFQX0tFWSk7CisKKwlpZiAoIWJtc19vdmVy bGFwKG1peF9hdHRycywga2V5X2F0dHJzKSkKKwkJbG9ja21vZGUgPSBMb2NrVHVwbGVOb0tl eUV4Y2x1c2l2ZTsKKworCWJtc19mcmVlKGtleV9hdHRycyk7CisKKwlyZXR1cm4gbG9ja21v ZGU7Cit9CisKIC8qCiAgKiBDaGVjayB3aGljaCBjb2x1bW5zIGFyZSBiZWluZyB1cGRhdGVk LgogICoKQEAgLTQ1MjAsMTIgKzQ0MDMsMTAgQEAgaGVhcF9hdHRyX2VxdWFscyhUdXBsZURl c2MgdHVwZGVzYywgaW50IGF0dHJudW0sIERhdHVtIHZhbHVlMSwgRGF0dW0gdmFsdWUyLAog ICogbGlzdGVkIGFzIGludGVyZXN0aW5nKSBvZiB0aGUgb2xkIHR1cGxlIGlzIGEgbWVtYmVy IG9mIGV4dGVybmFsX2NvbHMgYW5kIGlzCiAgKiBzdG9yZWQgZXh0ZXJuYWxseS4KICAqLwot c3RhdGljIEJpdG1hcHNldCAqCitCaXRtYXBzZXQgKgogSGVhcERldGVybWluZUNvbHVtbnNJ bmZvKFJlbGF0aW9uIHJlbGF0aW9uLAogCQkJCQkJIEJpdG1hcHNldCAqaW50ZXJlc3Rpbmdf Y29scywKLQkJCQkJCSBCaXRtYXBzZXQgKmV4dGVybmFsX2NvbHMsCi0JCQkJCQkgSGVhcFR1 cGxlIG9sZHR1cCwgSGVhcFR1cGxlIG5ld3R1cCwKLQkJCQkJCSBib29sICpoYXNfZXh0ZXJu YWwpCisJCQkJCQkgSGVhcFR1cGxlIG9sZHR1cCwgSGVhcFR1cGxlIG5ld3R1cCkKIHsKIAlp bnQJCQlhdHRpZHg7CiAJQml0bWFwc2V0ICAqbW9kaWZpZWQgPSBOVUxMOwpAQCAtNDU2Nywx MCArNDQ0OCwxMSBAQCBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8oUmVsYXRpb24gcmVsYXRp b24sCiAJCX0KIAogCQkvKgotCQkgKiBFeHRyYWN0IHRoZSBjb3JyZXNwb25kaW5nIHZhbHVl cy4gIFhYWCB0aGlzIGlzIHByZXR0eSBpbmVmZmljaWVudAotCQkgKiBpZiB0aGVyZSBhcmUg bWFueSBpbmRleGVkIGNvbHVtbnMuICBTaG91bGQgd2UgZG8gYSBzaW5nbGUKLQkJICogaGVh cF9kZWZvcm1fdHVwbGUgY2FsbCBvbiBlYWNoIHR1cGxlLCBpbnN0ZWFkPwlCdXQgdGhhdCBk b2Vzbid0Ci0JCSAqIHdvcmsgZm9yIHN5c3RlbSBjb2x1bW5zIC4uLgorCQkgKiBFeHRyYWN0 IHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy4KKwkJICoKKwkJICogWFhYIHRoaXMgaXMgcHJl dHR5IGluZWZmaWNpZW50IGlmIHRoZXJlIGFyZSBtYW55IGluZGV4ZWQgY29sdW1ucy4KKwkJ ICogU2hvdWxkIHdlIGRvIGEgc2luZ2xlIGhlYXBfZGVmb3JtX3R1cGxlIGNhbGwgb24gZWFj aCB0dXBsZSwKKwkJICogaW5zdGVhZD8gQnV0IHRoYXQgZG9lc24ndCB3b3JrIGZvciBzeXN0 ZW0gY29sdW1ucyAuLi4KIAkJICovCiAJCXZhbHVlMSA9IGhlYXBfZ2V0YXR0cihvbGR0dXAs IGF0dHJudW0sIHR1cGRlc2MsICZpc251bGwxKTsKIAkJdmFsdWUyID0gaGVhcF9nZXRhdHRy KG5ld3R1cCwgYXR0cm51bSwgdHVwZGVzYywgJmlzbnVsbDIpOwpAQCAtNDU4MSw0OCArNDQ2 MywxNDYgQEAgSGVhcERldGVybWluZUNvbHVtbnNJbmZvKFJlbGF0aW9uIHJlbGF0aW9uLAog CQkJbW9kaWZpZWQgPSBibXNfYWRkX21lbWJlcihtb2RpZmllZCwgYXR0aWR4KTsKIAkJCWNv bnRpbnVlOwogCQl9Ci0KLQkJLyoKLQkJICogTm8gbmVlZCB0byBjaGVjayBhdHRyaWJ1dGVz IHRoYXQgY2FuJ3QgYmUgc3RvcmVkIGV4dGVybmFsbHkuIE5vdGUKLQkJICogdGhhdCBzeXN0 ZW0gYXR0cmlidXRlcyBjYW4ndCBiZSBzdG9yZWQgZXh0ZXJuYWxseS4KLQkJICovCi0JCWlm IChhdHRybnVtIDwgMCB8fCBpc251bGwxIHx8Ci0JCQlUdXBsZURlc2NDb21wYWN0QXR0cih0 dXBkZXNjLCBhdHRybnVtIC0gMSktPmF0dGxlbiAhPSAtMSkKLQkJCWNvbnRpbnVlOwotCi0J CS8qCi0JCSAqIENoZWNrIGlmIHRoZSBvbGQgdHVwbGUncyBhdHRyaWJ1dGUgaXMgc3RvcmVk IGV4dGVybmFsbHkgYW5kIGlzIGEKLQkJICogbWVtYmVyIG9mIGV4dGVybmFsX2NvbHMuCi0J CSAqLwotCQlpZiAoVkFSQVRUX0lTX0VYVEVSTkFMKCh2YXJsZW5hICopIERhdHVtR2V0UG9p bnRlcih2YWx1ZTEpKSAmJgotCQkJYm1zX2lzX21lbWJlcihhdHRpZHgsIGV4dGVybmFsX2Nv bHMpKQotCQkJKmhhc19leHRlcm5hbCA9IHRydWU7CiAJfQogCiAJcmV0dXJuIG1vZGlmaWVk OwogfQogCiAvKgotICoJc2ltcGxlX2hlYXBfdXBkYXRlIC0gcmVwbGFjZSBhIHR1cGxlCi0g KgotICogVGhpcyByb3V0aW5lIG1heSBiZSB1c2VkIHRvIHVwZGF0ZSBhIHR1cGxlIHdoZW4g Y29uY3VycmVudCB1cGRhdGVzIG9mCi0gKiB0aGUgdGFyZ2V0IHR1cGxlIGFyZSBub3QgZXhw ZWN0ZWQgKGZvciBleGFtcGxlLCBiZWNhdXNlIHdlIGhhdmUgYSBsb2NrCi0gKiBvbiB0aGUg cmVsYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSB0dXBsZSkuICBBbnkgZmFpbHVyZSBpcyBy ZXBvcnRlZAotICogdmlhIGVyZXBvcnQoKS4KKyAqIFRoaXMgcm91dGluZSBtYXkgYmUgdXNl ZCB0byB1cGRhdGUgYSB0dXBsZSB3aGVuIGNvbmN1cnJlbnQgdXBkYXRlcyBvZiB0aGUKKyAq IHRhcmdldCB0dXBsZSBhcmUgbm90IGV4cGVjdGVkIChmb3IgZXhhbXBsZSwgYmVjYXVzZSB3 ZSBoYXZlIGEgbG9jayBvbiB0aGUKKyAqIHJlbGF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUg dHVwbGUpLiAgQW55IGZhaWx1cmUgaXMgcmVwb3J0ZWQgdmlhIGVyZXBvcnQoKS4KICAqLwog dm9pZAotc2ltcGxlX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVt UG9pbnRlckRhdGEgKm90aWQsIEhlYXBUdXBsZSB0dXAsCitzaW1wbGVfaGVhcF91cGRhdGUo UmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1 cGxlIHR1cGxlLAogCQkJCSAgIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKQog ewogCVRNX1Jlc3VsdAlyZXN1bHQ7CiAJVE1fRmFpbHVyZURhdGEgdG1mZDsKIAlMb2NrVHVw bGVNb2RlIGxvY2ttb2RlOworCUJ1ZmZlcgkJYnVmZmVyOworCUJ1ZmZlcgkJdm1idWZmZXIg PSBJbnZhbGlkQnVmZmVyOworCVBhZ2UJCXBhZ2U7CisJQmxvY2tOdW1iZXIgYmxvY2s7CisJ Qml0bWFwc2V0ICAqc3VtX2F0dHJzLAorCQkJICAgKm1peF9hdHRycywKKwkJCSAgICppZHhf YXR0cnM7CisJSXRlbUlkCQlscDsKKwlIZWFwVHVwbGVEYXRhIG9sZHR1cDsKKwlib29sCQlo b3RfYWxsb3dlZDsKKwlib29sCQlzdW1tYXJpemVkX29ubHk7CisJYm9vbAkJcmVwX2lkX2tl eV9yZXF1aXJlZCA9IGZhbHNlOwogCi0JcmVzdWx0ID0gaGVhcF91cGRhdGUocmVsYXRpb24s IG90aWQsIHR1cCwKLQkJCQkJCSBHZXRDdXJyZW50Q29tbWFuZElkKHRydWUpLCBJbnZhbGlk U25hcHNob3QsCi0JCQkJCQkgdHJ1ZSAvKiB3YWl0IGZvciBjb21taXQgKi8gLAotCQkJCQkJ ICZ0bWZkLCAmbG9ja21vZGUsCi0JCQkJCQkgTlVMTCwgZmFsc2UsIHVwZGF0ZV9pbmRleGVz KTsKKwlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKG90aWQpKTsKKworCS8qIENoZWFwLCBz aW1wbGlzdGljIGNoZWNrIHRoYXQgdGhlIHR1cGxlIG1hdGNoZXMgdGhlIHJlbCdzIHJvd3R5 cGUuICovCisJQXNzZXJ0KEhlYXBUdXBsZUhlYWRlckdldE5hdHRzKHR1cGxlLT50X2RhdGEp IDw9CisJCSAgIFJlbGF0aW9uR2V0TnVtYmVyT2ZBdHRyaWJ1dGVzKHJlbGF0aW9uKSk7CisK KwkvKgorCSAqIEZvcmJpZCB0aGlzIGR1cmluZyBhIHBhcmFsbGVsIG9wZXJhdGlvbiwgbGVz dCBpdCBhbGxvY2F0ZSBhIGNvbWJvIENJRC4KKwkgKiBPdGhlciB3b3JrZXJzIG1pZ2h0IG5l ZWQgdGhhdCBjb21ibyBDSUQgZm9yIHZpc2liaWxpdHkgY2hlY2tzLCBhbmQgd2UKKwkgKiBo YXZlIG5vIHByb3Zpc2lvbiBmb3IgYnJvYWRjYXN0aW5nIGl0IHRvIHRoZW0uCisJICovCisJ aWYgKElzSW5QYXJhbGxlbE1vZGUoKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfVFJBTlNBQ1RJT05fU1RBVEUpLAorCQkJCSBlcnJtc2coImNh bm5vdCB1cGRhdGUgdHVwbGVzIGR1cmluZyBhIHBhcmFsbGVsIG9wZXJhdGlvbiIpKSk7CisK KyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJY2hlY2tfbG9ja19pZl9pbnBsYWNlX3Vw ZGF0ZWFibGVfcmVsKHJlbGF0aW9uLCBvdGlkLCB0dXBsZSk7CisjZW5kaWYKKworCS8qCisJ ICogV2UgbXVzdCBmZXRjaCB0aGVzZSBiaXRtYXBzIG9mIGF0dHJpYnV0ZXMgZnJvbSByZWxj YWNoZSB0byBiZSBjaGVja2VkCisJICogZm9yIHZhcmlvdXMgb3BlcmF0aW9ucyBiZWxvdyBi ZWZvcmUgb2J0YWluaW5nIGEgYnVmZmVyIGxvY2sgYmVjYXVzZSBpZgorCSAqIHdlIGFyZSBk b2luZyBhbiB1cGRhdGUgb24gb25lIG9mIHRoZSByZWxldmFudCBzeXN0ZW0gY2F0YWxvZ3Mg d2UgY291bGQKKwkgKiBkZWFkbG9jayBpZiB3ZSB0cnkgdG8gZmV0Y2ggdGhlbSBsYXRlciBv bi4gUmVsY2FjaGUgd2lsbCByZXR1cm4gY29waWVzCisJICogb2YgZWFjaCBiaXRtYXAsIHNv IHdlIG5lZWQgbm90IHdvcnJ5IGFib3V0IHJlbGNhY2hlIGZsdXNoIGhhcHBlbmluZworCSAq IG1pZHdheSB0aHJvdWdoIHRoaXMgb3BlcmF0aW9uLgorCSAqLworCWlkeF9hdHRycyA9IFJl bGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLAorCQkJCQkJCQkJCSAgIElOREVY X0FUVFJfQklUTUFQX0lOREVYRUQpOworCXN1bV9hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhB dHRyQml0bWFwKHJlbGF0aW9uLAorCQkJCQkJCQkJCSAgIElOREVYX0FUVFJfQklUTUFQX1NV TU1BUklaRUQpOworCisJYmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKG90aWQp OworCUlOSkVDVElPTl9QT0lOVCgiaGVhcF91cGRhdGUtYmVmb3JlLXBpbiIsIE5VTEwpOwor CWJ1ZmZlciA9IFJlYWRCdWZmZXIocmVsYXRpb24sIGJsb2NrKTsKKwlwYWdlID0gQnVmZmVy R2V0UGFnZShidWZmZXIpOworCisJLyoKKwkgKiBCZWZvcmUgbG9ja2luZyB0aGUgYnVmZmVy LCBwaW4gdGhlIHZpc2liaWxpdHkgbWFwIHBhZ2UgaWYgaXQgYXBwZWFycyB0bworCSAqIGJl IG5lY2Vzc2FyeS4gIFNpbmNlIHdlIGhhdmVuJ3QgZ290IHRoZSBsb2NrIHlldCwgc29tZW9u ZSBlbHNlIG1pZ2h0IGJlCisJICogaW4gdGhlIG1pZGRsZSBvZiBjaGFuZ2luZyB0aGlzLCBz byB3ZSdsbCBuZWVkIHRvIHJlY2hlY2sgYWZ0ZXIgd2UgaGF2ZQorCSAqIHRoZSBsb2NrLgor CSAqLworCWlmIChQYWdlSXNBbGxWaXNpYmxlKHBhZ2UpKQorCQl2aXNpYmlsaXR5bWFwX3Bp bihyZWxhdGlvbiwgYmxvY2ssICZ2bWJ1ZmZlcik7CisKKwlMb2NrQnVmZmVyKGJ1ZmZlciwg QlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKKworCWxwID0gUGFnZUdldEl0ZW1JZChwYWdlLCBJ dGVtUG9pbnRlckdldE9mZnNldE51bWJlcihvdGlkKSk7CisKKwkvKgorCSAqIFVzdWFsbHks IGEgYnVmZmVyIHBpbiBhbmQvb3Igc25hcHNob3QgYmxvY2tzIHBydW5pbmcgb2Ygb3RpZCwg ZW5zdXJpbmcKKwkgKiB3ZSBzZWUgTFBfTk9STUFMIGhlcmUuICBXaGVuIHRoZSBvdGlkIG9y aWdpbiBpcyBhIHN5c2NhY2hlLCB3ZSBtYXkgaGF2ZQorCSAqIG5laXRoZXIgYSBwaW4gbm9y IGEgc25hcHNob3QuICBIZW5jZSwgd2UgbWF5IHNlZSBvdGhlciBMUF8gc3RhdGVzLCBlYWNo CisJICogb2Ygd2hpY2ggaW5kaWNhdGVzIGNvbmN1cnJlbnQgcHJ1bmluZy4KKwkgKgorCSAq IEZhaWxpbmcgd2l0aCBUTV9VcGRhdGVkIHdvdWxkIGJlIG1vc3QgYWNjdXJhdGUuICBIb3dl dmVyLCB1bmxpa2Ugb3RoZXIKKwkgKiBUTV9VcGRhdGVkIHNjZW5hcmlvcywgd2UgZG9uJ3Qg a25vdyB0aGUgc3VjY2Vzc29yIGN0aWQgaW4gTFBfVU5VU0VEIGFuZAorCSAqIExQX0RFQUQg Y2FzZXMuICBXaGlsZSB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBUTV9VcGRhdGVkIGFuZCBU TV9EZWxldGVkCisJICogZG9lcyBtYXR0ZXIgdG8gU1FMIHN0YXRlbWVudHMgVVBEQVRFIGFu ZCBNRVJHRSwgdGhvc2UgU1FMIHN0YXRlbWVudHMKKwkgKiBob2xkIGEgc25hcHNob3QgdGhh dCBlbnN1cmVzIExQX05PUk1BTC4gIEhlbmNlLCB0aGUgY2hvaWNlIGJldHdlZW4KKwkgKiBU TV9VcGRhdGVkIGFuZCBUTV9EZWxldGVkIGFmZmVjdHMgb25seSB0aGUgd29yZGluZyBvZiBl cnJvciBtZXNzYWdlcy4KKwkgKiBTZXR0bGUgb24gVE1fRGVsZXRlZCwgZm9yIHR3byByZWFz b25zLiAgRmlyc3QsIGl0IGF2b2lkcyBjb21wbGljYXRpbmcKKwkgKiB0aGUgc3BlY2lmaWNh dGlvbiBvZiB3aGVuIHRtZmQtPmN0aWQgaXMgdmFsaWQuICBTZWNvbmQsIGl0IGNyZWF0ZXMK KwkgKiBlcnJvciBsb2cgZXZpZGVuY2UgdGhhdCB3ZSB0b29rIHRoaXMgYnJhbmNoLgorCSAq CisJICogU2luY2UgaXQncyBwb3NzaWJsZSB0byBzZWUgTFBfVU5VU0VEIGF0IG90aWQsIGl0 J3MgYWxzbyBwb3NzaWJsZSB0byBzZWUKKwkgKiBMUF9OT1JNQUwgZm9yIGEgdHVwbGUgdGhh dCByZXBsYWNlZCBMUF9VTlVTRUQuICBJZiBpdCdzIGEgdHVwbGUgZm9yIGFuCisJICogdW5y ZWxhdGVkIHJvdywgd2UnbGwgZmFpbCB3aXRoICJkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xh dGVzIHVuaXF1ZSIuCisJICogWFhYIGlmIG90aWQgaXMgdGhlIGxpdmUsIG5ld2VyIHZlcnNp b24gb2YgdGhlIG5ld3R1cCByb3csIHdlJ2xsIGRpc2NhcmQKKwkgKiBjaGFuZ2VzIG9yaWdp bmF0aW5nIGluIHZlcnNpb25zIG9mIHRoaXMgY2F0YWxvZyByb3cgYWZ0ZXIgdGhlIHZlcnNp b24KKwkgKiB0aGUgY2FsbGVyIGdvdCBmcm9tIHN5c2NhY2hlLiAgU2VlIHN5c2NhY2hlLXVw ZGF0ZS1wcnVuZWQuc3BlYy4KKwkgKi8KKwlpZiAoIUl0ZW1JZElzTm9ybWFsKGxwKSkKKwl7 CisJCUFzc2VydChSZWxhdGlvblN1cHBvcnRzU3lzQ2FjaGUoUmVsYXRpb25HZXRSZWxpZChy ZWxhdGlvbikpKTsKKworCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJCWlmICh2 bWJ1ZmZlciAhPSBJbnZhbGlkQnVmZmVyKQorCQkJUmVsZWFzZUJ1ZmZlcih2bWJ1ZmZlcik7 CisJCSp1cGRhdGVfaW5kZXhlcyA9IFRVX05vbmU7CisKKwkJYm1zX2ZyZWUoaWR4X2F0dHJz KTsKKwkJYm1zX2ZyZWUoc3VtX2F0dHJzKTsKKwkJLyogbWl4X2F0dHJzIG5vdCB5ZXQgaW5p dGlhbGl6ZWQgKi8KKworCQllbG9nKEVSUk9SLCAidHVwbGUgY29uY3VycmVudGx5IGRlbGV0 ZWQiKTsKKwl9CisKKwkvKgorCSAqIFBhcnRpYWxseSBjb25zdHJ1Y3QgdGhlIG9sZHR1cCBm b3IgSGVhcERldGVybWluZUNvbHVtbnNJbmZvIHRvIHdvcmsgYW5kCisJICogdGhlbiBwYXNz IHRoYXQgb24gdG8gaGVhcF91cGRhdGUuCisJICovCisJb2xkdHVwLnRfdGFibGVPaWQgPSBS ZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwlvbGR0dXAudF9kYXRhID0gKEhlYXBUdXBs ZUhlYWRlcikgUGFnZUdldEl0ZW0ocGFnZSwgbHApOworCW9sZHR1cC50X2xlbiA9IEl0ZW1J ZEdldExlbmd0aChscCk7CisJb2xkdHVwLnRfc2VsZiA9ICpvdGlkOworCisJbWl4X2F0dHJz ID0gSGVhcERldGVybWluZUNvbHVtbnNJbmZvKHJlbGF0aW9uLCBpZHhfYXR0cnMsICZvbGR0 dXAsIHR1cGxlKTsKKwlsb2NrbW9kZSA9IEhlYXBVcGRhdGVEZXRlcm1pbmVMb2NrbW9kZShy ZWxhdGlvbiwgbWl4X2F0dHJzKTsKKwlyZXBfaWRfa2V5X3JlcXVpcmVkID0gSGVhcFVwZGF0 ZVJlcXVpcmVzUmVwbGljYUlkKHJlbGF0aW9uLCBtaXhfYXR0cnMsICZvbGR0dXApOworCWhv dF9hbGxvd2VkID0gSGVhcFVwZGF0ZUhvdEFsbG93YWJsZShyZWxhdGlvbiwgbWl4X2F0dHJz LCAmc3VtbWFyaXplZF9vbmx5KTsKKworCXJlc3VsdCA9IGhlYXBfdXBkYXRlKHJlbGF0aW9u LCAmb2xkdHVwLCB0dXBsZSwgR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKSwKKwkJCQkJCSBJ bnZhbGlkU25hcHNob3QsIHRydWUgLyogd2FpdCBmb3IgY29tbWl0ICovICwKKwkJCQkJCSAm dG1mZCwgJmxvY2ttb2RlLCBidWZmZXIsIHBhZ2UsIGJsb2NrLCBscCwgaG90X2FsbG93ZWQs CisJCQkJCQkgdm1idWZmZXIsIHJlcF9pZF9rZXlfcmVxdWlyZWQpOworCisJKnVwZGF0ZV9p bmRleGVzID0gVFVfTm9uZTsKIAlzd2l0Y2ggKHJlc3VsdCkKIAl7CiAJCWNhc2UgVE1fU2Vs Zk1vZGlmaWVkOgpAQCAtNDYzMiw2ICs0NjEyLDEwIEBAIHNpbXBsZV9oZWFwX3VwZGF0ZShS ZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpvdGlkLCBIZWFwVHVw bGUgdHVwCiAKIAkJY2FzZSBUTV9PazoKIAkJCS8qIGRvbmUgc3VjY2Vzc2Z1bGx5ICovCisJ CQlpZiAoIUhlYXBUdXBsZUlzSGVhcE9ubHkodHVwbGUpKQorCQkJCSp1cGRhdGVfaW5kZXhl cyA9IFRVX0FsbDsKKwkJCWVsc2UgaWYgKHN1bW1hcml6ZWRfb25seSkKKwkJCQkqdXBkYXRl X2luZGV4ZXMgPSBUVV9TdW1tYXJpemluZzsKIAkJCWJyZWFrOwogCiAJCWNhc2UgVE1fVXBk YXRlZDoKQEAgLTQ2NDYsOCArNDYzMCwxMCBAQCBzaW1wbGVfaGVhcF91cGRhdGUoUmVsYXRp b24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIHR1 cAogCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBoZWFwX3VwZGF0ZSBzdGF0dXM6ICV1 IiwgcmVzdWx0KTsKIAkJCWJyZWFrOwogCX0KLX0KIAorCWJtc19mcmVlKGlkeF9hdHRycyk7 CisJYm1zX2ZyZWUoc3VtX2F0dHJzKTsKK30KIAogLyoKICAqIFJldHVybiB0aGUgTXVsdGlY YWN0U3RhdHVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIHR1cGxlIGxvY2sgbW9kZS4K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IDI2OTA1 OTNmZTRjLi4yZWIwNmI2ZDU5MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW1faGFuZGxlci5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcm9j YXJyYXkuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9i dWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2luamVjdGlvbl9wb2ludC5oIgogI2luY2x1 ZGUgInV0aWxzL3JlbC5oIgogCiBzdGF0aWMgdm9pZCByZWZvcm1fYW5kX3Jld3JpdGVfdHVw bGUoSGVhcFR1cGxlIHR1cGxlLApAQCAtMzE2LDE4ICszMTcsODEgQEAgc3RhdGljIFRNX1Jl c3VsdAogaGVhcGFtX3R1cGxlX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50 ZXIgb3RpZCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCUNvbW1hbmRJZCBjaWQsIFNu YXBzaG90IHNuYXBzaG90LCBTbmFwc2hvdCBjcm9zc2NoZWNrLAogCQkJCQlib29sIHdhaXQs IFRNX0ZhaWx1cmVEYXRhICp0bWZkLCBMb2NrVHVwbGVNb2RlICpsb2NrbW9kZSwKLQkJCQkJ Y29uc3QgQml0bWFwc2V0ICptb2RpZmllZF9hdHRycywgVFVfVXBkYXRlSW5kZXhlcyAqdXBk YXRlX2luZGV4ZXMpCisJCQkJCWNvbnN0IEJpdG1hcHNldCAqbWl4X2F0dHJzLCBUVV9VcGRh dGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykKIHsKLQlib29sCQlzaG91bGRGcmVlID0gdHJ1 ZTsKLQlIZWFwVHVwbGUJdHVwbGUgPSBFeGVjRmV0Y2hTbG90SGVhcFR1cGxlKHNsb3QsIHRy dWUsICZzaG91bGRGcmVlKTsKKwlib29sCQlzaG91bGRGcmVlID0gZmFsc2U7CisJSGVhcFR1 cGxlCXR1cGxlOworCWJvb2wJCXJlcF9pZF9rZXlfcmVxdWlyZWQgPSBmYWxzZTsKKwlib29s CQlob3RfYWxsb3dlZDsKKwlib29sCQlzdW1tYXJpemVkX29ubHk7CisJSGVhcFR1cGxlRGF0 YSBvbGR0dXA7CisJQnVmZmVyCQlidWZmZXI7CisJQnVmZmVyCQl2bWJ1ZmZlciA9IEludmFs aWRCdWZmZXI7CisJUGFnZQkJcGFnZTsKKwlCbG9ja051bWJlciBibG9jazsKKwlJdGVtSWQJ CWxwOwogCVRNX1Jlc3VsdAlyZXN1bHQ7CiAKKwlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlk KG90aWQpKTsKKworCXR1cGxlID0gRXhlY0ZldGNoU2xvdEhlYXBUdXBsZShzbG90LCB0cnVl LCAmc2hvdWxkRnJlZSk7CisKKwkvKiBDaGVhcCwgc2ltcGxpc3RpYyBjaGVjayB0aGF0IHRo ZSB0dXBsZSBtYXRjaGVzIHRoZSByZWwncyByb3d0eXBlLiAqLworCUFzc2VydChIZWFwVHVw bGVIZWFkZXJHZXROYXR0cyh0dXBsZS0+dF9kYXRhKSA8PQorCQkgICBSZWxhdGlvbkdldE51 bWJlck9mQXR0cmlidXRlcyhyZWxhdGlvbikpOworCisJLyoKKwkgKiBGb3JiaWQgdGhpcyBk dXJpbmcgYSBwYXJhbGxlbCBvcGVyYXRpb24sIGxlc3QgaXQgYWxsb2NhdGUgYSBjb21ibyBD SUQuCisJICogT3RoZXIgd29ya2VycyBtaWdodCBuZWVkIHRoYXQgY29tYm8gQ0lEIGZvciB2 aXNpYmlsaXR5IGNoZWNrcywgYW5kIHdlCisJICogaGF2ZSBubyBwcm92aXNpb24gZm9yIGJy b2FkY2FzdGluZyBpdCB0byB0aGVtLgorCSAqLworCWlmIChJc0luUGFyYWxsZWxNb2RlKCkp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RSQU5T QUNUSU9OX1NUQVRFKSwKKwkJCQkgZXJybXNnKCJjYW5ub3QgdXBkYXRlIHR1cGxlcyBkdXJp bmcgYSBwYXJhbGxlbCBvcGVyYXRpb24iKSkpOworCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVD S0lORworCWNoZWNrX2xvY2tfaWZfaW5wbGFjZV91cGRhdGVhYmxlX3JlbChyZWxhdGlvbiwg b3RpZCwgdHVwbGUpOworI2VuZGlmCisKKwlob3RfYWxsb3dlZCA9IEhlYXBVcGRhdGVIb3RB bGxvd2FibGUocmVsYXRpb24sIG1peF9hdHRycywgJnN1bW1hcml6ZWRfb25seSk7CisJKmxv Y2ttb2RlID0gSGVhcFVwZGF0ZURldGVybWluZUxvY2ttb2RlKHJlbGF0aW9uLCBtaXhfYXR0 cnMpOworCisJYmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKG90aWQpOworCUlO SkVDVElPTl9QT0lOVCgiaGVhcF91cGRhdGUtYmVmb3JlLXBpbiIsIE5VTEwpOworCWJ1ZmZl ciA9IFJlYWRCdWZmZXIocmVsYXRpb24sIGJsb2NrKTsKKwlwYWdlID0gQnVmZmVyR2V0UGFn ZShidWZmZXIpOworCisJLyoKKwkgKiBCZWZvcmUgbG9ja2luZyB0aGUgYnVmZmVyLCBwaW4g dGhlIHZpc2liaWxpdHkgbWFwIHBhZ2UgaWYgaXQgYXBwZWFycyB0bworCSAqIGJlIG5lY2Vz c2FyeS4gIFNpbmNlIHdlIGhhdmVuJ3QgZ290IHRoZSBsb2NrIHlldCwgc29tZW9uZSBlbHNl IG1pZ2h0IGJlCisJICogaW4gdGhlIG1pZGRsZSBvZiBjaGFuZ2luZyB0aGlzLCBzbyB3ZSds bCBuZWVkIHRvIHJlY2hlY2sgYWZ0ZXIgd2UgaGF2ZQorCSAqIHRoZSBsb2NrLgorCSAqLwor CWlmIChQYWdlSXNBbGxWaXNpYmxlKHBhZ2UpKQorCQl2aXNpYmlsaXR5bWFwX3BpbihyZWxh dGlvbiwgYmxvY2ssICZ2bWJ1ZmZlcik7CisKKwlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVS X0xPQ0tfRVhDTFVTSVZFKTsKKworCWxwID0gUGFnZUdldEl0ZW1JZChwYWdlLCBJdGVtUG9p bnRlckdldE9mZnNldE51bWJlcihvdGlkKSk7CisKKwlBc3NlcnQoSXRlbUlkSXNOb3JtYWwo bHApKTsKKworCW9sZHR1cC50X3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlv bik7CisJb2xkdHVwLnRfZGF0YSA9IChIZWFwVHVwbGVIZWFkZXIpIFBhZ2VHZXRJdGVtKHBh Z2UsIGxwKTsKKwlvbGR0dXAudF9sZW4gPSBJdGVtSWRHZXRMZW5ndGgobHApOworCW9sZHR1 cC50X3NlbGYgPSAqb3RpZDsKKworCXJlcF9pZF9rZXlfcmVxdWlyZWQgPSBIZWFwVXBkYXRl UmVxdWlyZXNSZXBsaWNhSWQocmVsYXRpb24sIG1peF9hdHRycywgJm9sZHR1cCk7CisKIAkv KiBVcGRhdGUgdGhlIHR1cGxlIHdpdGggdGFibGUgb2lkICovCiAJc2xvdC0+dHRzX3RhYmxl T2lkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7CiAJdHVwbGUtPnRfdGFibGVPaWQg PSBzbG90LT50dHNfdGFibGVPaWQ7CiAKLQlyZXN1bHQgPSBoZWFwX3VwZGF0ZShyZWxhdGlv biwgb3RpZCwgdHVwbGUsIGNpZCwgY3Jvc3NjaGVjaywgd2FpdCwKLQkJCQkJCSB0bWZkLCBs b2NrbW9kZSwgbW9kaWZpZWRfYXR0cnMsIHRydWUsIHVwZGF0ZV9pbmRleGVzKTsKKwlyZXN1 bHQgPSBoZWFwX3VwZGF0ZShyZWxhdGlvbiwgJm9sZHR1cCwgdHVwbGUsIGNpZCwgY3Jvc3Nj aGVjaywgd2FpdCwgdG1mZCwKKwkJCQkJCSBsb2NrbW9kZSwgYnVmZmVyLCBwYWdlLCBibG9j aywgbHAsIGhvdF9hbGxvd2VkLAorCQkJCQkJIHZtYnVmZmVyLCByZXBfaWRfa2V5X3JlcXVp cmVkKTsKKwogCUl0ZW1Qb2ludGVyQ29weSgmdHVwbGUtPnRfc2VsZiwgJnNsb3QtPnR0c190 aWQpOwogCiAJLyoKQEAgLTMzNSwyMSArMzk5LDIwIEBAIGhlYXBhbV90dXBsZV91cGRhdGUo UmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVyIG90aWQsIFR1cGxlVGFibGVTbG90ICpz bG90LAogCSAqCiAJICogTm90ZTogaGVhcF91cGRhdGUgcmV0dXJucyB0aGUgdGlkIChsb2Nh dGlvbikgb2YgdGhlIG5ldyB0dXBsZSBpbiB0aGUKIAkgKiB0X3NlbGYgZmllbGQuCi0JICoK LQkgKiBJZiB0aGUgdXBkYXRlIGlzIG5vdCBIT1QsIHdlIG11c3QgdXBkYXRlIGFsbCBpbmRl eGVzLiBJZiB0aGUgdXBkYXRlIGlzCi0JICogSE9ULCBpdCBjb3VsZCBiZSB0aGF0IHdlIHVw ZGF0ZWQgc3VtbWFyaXplZCBjb2x1bW5zLCBzbyB3ZSBlaXRoZXIKLQkgKiB1cGRhdGUgb25s eSBzdW1tYXJpemVkIGluZGV4ZXMsIG9yIG5vbmUgYXQgYWxsLgogCSAqLwotCWlmIChyZXN1 bHQgIT0gVE1fT2spCisJKnVwZGF0ZV9pbmRleGVzID0gVFVfTm9uZTsKKwlpZiAocmVzdWx0 ID09IFRNX09rKQogCXsKLQkJQXNzZXJ0KCp1cGRhdGVfaW5kZXhlcyA9PSBUVV9Ob25lKTsK LQkJKnVwZGF0ZV9pbmRleGVzID0gVFVfTm9uZTsKKwkJaWYgKEhlYXBUdXBsZUlzSGVhcE9u bHkodHVwbGUpKQorCQl7CisJCQlpZiAoc3VtbWFyaXplZF9vbmx5KQorCQkJCSp1cGRhdGVf aW5kZXhlcyA9IFRVX1N1bW1hcml6aW5nOworCQl9CisJCWVsc2UKKwkJeworCQkJKnVwZGF0 ZV9pbmRleGVzID0gVFVfQWxsOworCQl9CiAJfQotCWVsc2UgaWYgKCFIZWFwVHVwbGVJc0hl YXBPbmx5KHR1cGxlKSkKLQkJQXNzZXJ0KCp1cGRhdGVfaW5kZXhlcyA9PSBUVV9BbGwpOwot CWVsc2UKLQkJQXNzZXJ0KCgqdXBkYXRlX2luZGV4ZXMgPT0gVFVfU3VtbWFyaXppbmcpIHx8 Ci0JCQkgICAoKnVwZGF0ZV9pbmRleGVzID09IFRVX05vbmUpKTsKIAogCWlmIChzaG91bGRG cmVlKQogCQlwZnJlZSh0dXBsZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlTW9kaWZ5VGFibGUuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlU YWJsZS5jCmluZGV4IDE4Nzk2YmFlZDI4Li4wODJkZWU5NDQyMiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKKysrIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKQEAgLTIxMyw3ICsyMTMsNyBAQCBFeGVjQ2hl Y2tJbmRleGVkQXR0cnNGb3JDaGFuZ2VzKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8s CiAJUmVsYXRpb24JcmVsYXRpb24gPSByZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2M7 CiAJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbGF0aW9uKTsKIAlC aXRtYXBzZXQgICphdHRycywKLQkJCSAgICptaXhfYXR0cnM7CisJCQkgICAqbWl4X2F0dHJz ID0gTlVMTDsKIAogCS8qIElmIG5vIGluZGV4ZXMsIHdlJ3JlIGRvbmUgKi8KIAlpZiAocmVz dWx0UmVsSW5mby0+cmlfTnVtSW5kaWNlcyA9PSAwKQpAQCAtMjI3LDggKzIyNyw5IEBAIEV4 ZWNDaGVja0luZGV4ZWRBdHRyc0ZvckNoYW5nZXMoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVs SW5mbywKIAlhdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLCBJ TkRFWF9BVFRSX0JJVE1BUF9JTkRFWEVEKTsKIAlhdHRycyA9IGJtc19pbnRfbWVtYmVycyhh dHRycywgRXhlY0dldEFsbFVwZGF0ZWRDb2xzKHJlc3VsdFJlbEluZm8sIGVzdGF0ZSkpOwog Ci0JLyogRmluZCBvdXQgd2hpY2gsIGlmIGFueSwgbW9kaWZpZWQgaW5kZXhlZCBhdHRyaWJ1 dGVzIGNoYW5nZWQgKi8KLQltaXhfYXR0cnMgPSBFeGVjQ29tcGFyZVNsb3RBdHRycyh0dXBk ZXNjLCBhdHRycywgb2xkX3R0cywgbmV3X3R0cyk7CisJLyogRmluZCBvdXQgd2hpY2gsIGlm IGFueSwgbW9kaWZpZWQgaW5kZXhlZCBhdHRyaWJ1dGVzIGNoYW5nZWQgdmFsdWUgKi8KKwlp ZiAoIWJtc19pc19lbXB0eShhdHRycykpCisJCW1peF9hdHRycyA9IEV4ZWNDb21wYXJlU2xv dEF0dHJzKHR1cGRlc2MsIGF0dHJzLCBvbGRfdHRzLCBuZXdfdHRzKTsKIAogCWJtc19mcmVl KGF0dHJzKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2Fj aGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKaW5kZXggNTQ3Y2Yx ZDA1NGQuLmYzMDUwNWQ4YWUzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNo ZS9yZWxjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMK QEAgLTI0NzUsNyArMjQ3NSw2IEBAIFJlbGF0aW9uRGVzdHJveVJlbGF0aW9uKFJlbGF0aW9u IHJlbGF0aW9uLCBib29sIHJlbWVtYmVyX3R1cGRlc2MpCiAJYm1zX2ZyZWUocmVsYXRpb24t PnJkX2tleWF0dHIpOwogCWJtc19mcmVlKHJlbGF0aW9uLT5yZF9wa2F0dHIpOwogCWJtc19m cmVlKHJlbGF0aW9uLT5yZF9pZGF0dHIpOwotCWJtc19mcmVlKHJlbGF0aW9uLT5yZF9ob3Ri bG9ja2luZ2F0dHIpOwogCWJtc19mcmVlKHJlbGF0aW9uLT5yZF9zdW1tYXJpemVkYXR0cik7 CiAJYm1zX2ZyZWUocmVsYXRpb24tPnJkX2luZGV4ZWRhdHRyKTsKIAlpZiAocmVsYXRpb24t PnJkX3B1YmRlc2MpCkBAIC01Mjc3LDggKzUyNzYsNyBAQCBSZWxhdGlvbkdldEluZGV4UHJl ZGljYXRlKFJlbGF0aW9uIHJlbGF0aW9uKQogICoJCQkJCQkJCQkoYmV3YXJlOiBldmVuIGlm IFBLIGlzIGRlZmVycmFibGUhKQogICoJSU5ERVhfQVRUUl9CSVRNQVBfSURFTlRJVFlfS0VZ CUNvbHVtbnMgaW4gdGhlIHRhYmxlJ3MgcmVwbGljYSBpZGVudGl0eQogICoJCQkJCQkJCQlp bmRleCAoZW1wdHkgaWYgRlVMTCkKLSAqCUlOREVYX0FUVFJfQklUTUFQX0hPVF9CTE9DS0lO RwlDb2x1bW5zIHRoYXQgYmxvY2sgdXBkYXRlcyBmcm9tIGJlaW5nIEhPVAotICoJSU5ERVhf QVRUUl9CSVRNQVBfU1VNTUFSSVpFRAlDb2x1bW5zIGluY2x1ZGVkIGluIHN1bW1hcml6aW5n IGluZGV4ZXMKKyAqCUlOREVYX0FUVFJfQklUTUFQX1NVTU1BUklaRUQJQ29sdW1ucyBvbmx5 IGluY2x1ZGVkIGluIHN1bW1hcml6aW5nIGluZGV4ZXMKICAqCUlOREVYX0FUVFJfQklUTUFQ X0lOREVYRUQJCUNvbHVtbnMgcmVmZXJlbmNlZCBieSBpbmRleGVzCiAgKgogICogQXR0cmli dXRlIG51bWJlcnMgYXJlIG9mZnNldCBieSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRl TnVtYmVyIHNvIHRoYXQKQEAgLTUzMDIsOSArNTMwMCw4IEBAIFJlbGF0aW9uR2V0SW5kZXhB dHRyQml0bWFwKFJlbGF0aW9uIHJlbGF0aW9uLCBJbmRleEF0dHJCaXRtYXBLaW5kIGF0dHJL aW5kKQogCUJpdG1hcHNldCAgKnVpbmRleGF0dHJzOwkvKiBjb2x1bW5zIGluIHVuaXF1ZSBp bmRleGVzICovCiAJQml0bWFwc2V0ICAqcGtpbmRleGF0dHJzOwkvKiBjb2x1bW5zIGluIHRo ZSBwcmltYXJ5IGluZGV4ICovCiAJQml0bWFwc2V0ICAqaWRpbmRleGF0dHJzOwkvKiBjb2x1 bW5zIGluIHRoZSByZXBsaWNhIGlkZW50aXR5ICovCi0JQml0bWFwc2V0ICAqaG90YmxvY2tp bmdhdHRyczsJLyogY29sdW1ucyB3aXRoIEhPVCBibG9ja2luZyBpbmRleGVzICovCisJQml0 bWFwc2V0ICAqc3VtbWFyaXplZGF0dHJzOwkvKiBjb2x1bW5zIG9ubHkgaW4gc3VtbWFyaXpp bmcgaW5kZXhlcyAqLwogCUJpdG1hcHNldCAgKmluZGV4ZWRhdHRyczsJLyogY29sdW1ucyBy ZWZlcmVuY2VkIGJ5IGluZGV4ZXMgKi8KLQlCaXRtYXBzZXQgICpzdW1tYXJpemVkYXR0cnM7 CS8qIGNvbHVtbnMgd2l0aCBzdW1tYXJpemluZyBpbmRleGVzICovCiAJTGlzdAkgICAqaW5k ZXhvaWRsaXN0OwogCUxpc3QJICAgKm5ld2luZGV4b2lkbGlzdDsKIAlPaWQJCQlyZWxwa2lu ZGV4OwpAQCAtNTMyMyw4ICs1MzIwLDYgQEAgUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAo UmVsYXRpb24gcmVsYXRpb24sIEluZGV4QXR0ckJpdG1hcEtpbmQgYXR0cktpbmQpCiAJCQkJ cmV0dXJuIGJtc19jb3B5KHJlbGF0aW9uLT5yZF9wa2F0dHIpOwogCQkJY2FzZSBJTkRFWF9B VFRSX0JJVE1BUF9JREVOVElUWV9LRVk6CiAJCQkJcmV0dXJuIGJtc19jb3B5KHJlbGF0aW9u LT5yZF9pZGF0dHIpOwotCQkJY2FzZSBJTkRFWF9BVFRSX0JJVE1BUF9IT1RfQkxPQ0tJTkc6 Ci0JCQkJcmV0dXJuIGJtc19jb3B5KHJlbGF0aW9uLT5yZF9ob3RibG9ja2luZ2F0dHIpOwog CQkJY2FzZSBJTkRFWF9BVFRSX0JJVE1BUF9TVU1NQVJJWkVEOgogCQkJCXJldHVybiBibXNf Y29weShyZWxhdGlvbi0+cmRfc3VtbWFyaXplZGF0dHIpOwogCQkJY2FzZSBJTkRFWF9BVFRS X0JJVE1BUF9JTkRFWEVEOgpAQCAtNTM3MSw3ICs1MzY2LDYgQEAgcmVzdGFydDoKIAl1aW5k ZXhhdHRycyA9IE5VTEw7CiAJcGtpbmRleGF0dHJzID0gTlVMTDsKIAlpZGluZGV4YXR0cnMg PSBOVUxMOwotCWhvdGJsb2NraW5nYXR0cnMgPSBOVUxMOwogCXN1bW1hcml6ZWRhdHRycyA9 IE5VTEw7CiAJaW5kZXhlZGF0dHJzID0gTlVMTDsKIAlmb3JlYWNoKGwsIGluZGV4b2lkbGlz dCkKQEAgLTU0MzIsNyArNTQyNiw3IEBAIHJlc3RhcnQ6CiAJCWlmIChpbmRleERlc2MtPnJk X2luZGFtLT5hbXN1bW1hcml6aW5nKQogCQkJYXR0cnMgPSAmc3VtbWFyaXplZGF0dHJzOwog CQllbHNlCi0JCQlhdHRycyA9ICZob3RibG9ja2luZ2F0dHJzOworCQkJYXR0cnMgPSAmaW5k ZXhlZGF0dHJzOwogCiAJCS8qIENvbGxlY3Qgc2ltcGxlIGF0dHJpYnV0ZSByZWZlcmVuY2Vz ICovCiAJCWZvciAoaSA9IDA7IGkgPCBpbmRleERlc2MtPnJkX2luZGV4LT5pbmRuYXR0czsg aSsrKQpAQCAtNTQ0MSw5ICs1NDM1LDkgQEAgcmVzdGFydDoKIAogCQkJLyoKIAkJCSAqIFNp bmNlIHdlIGhhdmUgY292ZXJpbmcgaW5kZXhlcyB3aXRoIG5vbi1rZXkgY29sdW1ucywgd2Ug bXVzdAotCQkJICogaGFuZGxlIHRoZW0gYWNjdXJhdGVseSBoZXJlLiBub24ta2V5IGNvbHVt bnMgbXVzdCBiZSBhZGRlZCBpbnRvCi0JCQkgKiBob3RibG9ja2luZ2F0dHJzIG9yIHN1bW1h cml6ZWRhdHRycywgc2luY2UgdGhleSBhcmUgaW4gaW5kZXgsCi0JCQkgKiBhbmQgdXBkYXRl IHNob3VsZG4ndCBtaXNzIHRoZW0uCisJCQkgKiBoYW5kbGUgdGhlbSBhY2N1cmF0ZWx5IGhl cmUuIE5vbi1rZXkgY29sdW1ucyBtdXN0IGJlIGFkZGVkIGludG8KKwkJCSAqIGluZGV4ZWRh dHRycyBvciBzdW1tYXJpemVkYXR0cnMsIHNpbmNlIHRoZXkgYXJlIGluIGluZGV4LCBhbmQK KwkJCSAqIHVwZGF0ZSBzaG91bGRuJ3QgbWlzcyB0aGVtLgogCQkJICoKIAkJCSAqIFN1bW1h cml6aW5nIGluZGV4ZXMgZG8gbm90IGJsb2NrIEhPVCwgYnV0IGRvIG5lZWQgdG8gYmUgdXBk YXRlZAogCQkJICogd2hlbiB0aGUgY29sdW1uIHZhbHVlIGNoYW5nZXMsIHRodXMgcmVxdWly ZSBhIHNlcGFyYXRlCkBAIC01NTA0LDE1ICs1NDk4LDE5IEBAIHJlc3RhcnQ6CiAJCWJtc19m cmVlKHVpbmRleGF0dHJzKTsKIAkJYm1zX2ZyZWUocGtpbmRleGF0dHJzKTsKIAkJYm1zX2Zy ZWUoaWRpbmRleGF0dHJzKTsKLQkJYm1zX2ZyZWUoaG90YmxvY2tpbmdhdHRycyk7CiAJCWJt c19mcmVlKHN1bW1hcml6ZWRhdHRycyk7Ci0JCS8qIGluZGV4ZWRhdHRycyBub3QgeWV0IGlu aXRpYWxpemVkICovCisJCWJtc19mcmVlKGluZGV4ZWRhdHRycyk7CiAKIAkJZ290byByZXN0 YXJ0OwogCX0KIAotCS8qIFNldCBpbmRleGVkIGF0dHJpYnV0ZXMgdG8gdHJhY2sgYWxsIHJl ZmVyZW5jZWQgYXR0cmlidXRlcyAqLwotCWluZGV4ZWRhdHRycyA9IGJtc191bmlvbihob3Ri bG9ja2luZ2F0dHJzLCBzdW1tYXJpemVkYXR0cnMpOworCS8qCisJICogUmVjb3JkIHdoYXQg YXR0cmlidXRlcyBhcmUgb25seSByZWZlcmVuY2VkIGJ5IHN1bW1hcml6aW5nIGluZGV4ZXMu IFRoZW4KKwkgKiBhZGQgdGhhdCBpbnRvIHRoZSBvdGhlciBpbmRleGVkIGF0dHJpYnV0ZXMg dG8gdHJhY2sgYWxsIHJlZmVyZW5jZWQKKwkgKiBhdHRyaWJ1dGVzLgorCSAqLworCXN1bW1h cml6ZWRhdHRycyA9IGJtc19kZWxfbWVtYmVycyhzdW1tYXJpemVkYXR0cnMsIGluZGV4ZWRh dHRycyk7CisJaW5kZXhlZGF0dHJzID0gYm1zX2FkZF9tZW1iZXJzKGluZGV4ZWRhdHRycywg c3VtbWFyaXplZGF0dHJzKTsKIAogCS8qIERvbid0IGxlYWsgdGhlIG9sZCB2YWx1ZXMgb2Yg dGhlc2UgYml0bWFwcywgaWYgYW55ICovCiAJcmVsYXRpb24tPnJkX2F0dHJzdmFsaWQgPSBm YWxzZTsKQEAgLTU1MjIsOCArNTUyMCw2IEBAIHJlc3RhcnQ6CiAJcmVsYXRpb24tPnJkX3Br YXR0ciA9IE5VTEw7CiAJYm1zX2ZyZWUocmVsYXRpb24tPnJkX2lkYXR0cik7CiAJcmVsYXRp b24tPnJkX2lkYXR0ciA9IE5VTEw7Ci0JYm1zX2ZyZWUocmVsYXRpb24tPnJkX2hvdGJsb2Nr aW5nYXR0cik7Ci0JcmVsYXRpb24tPnJkX2hvdGJsb2NraW5nYXR0ciA9IE5VTEw7CiAJYm1z X2ZyZWUocmVsYXRpb24tPnJkX3N1bW1hcml6ZWRhdHRyKTsKIAlyZWxhdGlvbi0+cmRfc3Vt bWFyaXplZGF0dHIgPSBOVUxMOwogCWJtc19mcmVlKHJlbGF0aW9uLT5yZF9pbmRleGVkYXR0 cik7CkBAIC01NTQwLDcgKzU1MzYsNiBAQCByZXN0YXJ0OgogCXJlbGF0aW9uLT5yZF9rZXlh dHRyID0gYm1zX2NvcHkodWluZGV4YXR0cnMpOwogCXJlbGF0aW9uLT5yZF9wa2F0dHIgPSBi bXNfY29weShwa2luZGV4YXR0cnMpOwogCXJlbGF0aW9uLT5yZF9pZGF0dHIgPSBibXNfY29w eShpZGluZGV4YXR0cnMpOwotCXJlbGF0aW9uLT5yZF9ob3RibG9ja2luZ2F0dHIgPSBibXNf Y29weShob3RibG9ja2luZ2F0dHJzKTsKIAlyZWxhdGlvbi0+cmRfc3VtbWFyaXplZGF0dHIg PSBibXNfY29weShzdW1tYXJpemVkYXR0cnMpOwogCXJlbGF0aW9uLT5yZF9pbmRleGVkYXR0 ciA9IGJtc19jb3B5KGluZGV4ZWRhdHRycyk7CiAJcmVsYXRpb24tPnJkX2F0dHJzdmFsaWQg PSB0cnVlOwpAQCAtNTU1NSw4ICs1NTUwLDYgQEAgcmVzdGFydDoKIAkJCXJldHVybiBwa2lu ZGV4YXR0cnM7CiAJCWNhc2UgSU5ERVhfQVRUUl9CSVRNQVBfSURFTlRJVFlfS0VZOgogCQkJ cmV0dXJuIGlkaW5kZXhhdHRyczsKLQkJY2FzZSBJTkRFWF9BVFRSX0JJVE1BUF9IT1RfQkxP Q0tJTkc6Ci0JCQlyZXR1cm4gaG90YmxvY2tpbmdhdHRyczsKIAkJY2FzZSBJTkRFWF9BVFRS X0JJVE1BUF9TVU1NQVJJWkVEOgogCQkJcmV0dXJuIHN1bW1hcml6ZWRhdHRyczsKIAkJY2Fz ZSBJTkRFWF9BVFRSX0JJVE1BUF9JTkRFWEVEOgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv YWNjZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IGE1 NmYzZDFmMzc4Li5mMTg1OGQxNGI0MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L2hlYXBhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMzY0LDEy ICszNjQsMTEgQEAgZXh0ZXJuIFRNX1Jlc3VsdCBoZWFwX2RlbGV0ZShSZWxhdGlvbiByZWxh dGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICp0aWQsCiAJCQkJCQkJIFRNX0ZhaWx1cmVE YXRhICp0bWZkLCBib29sIGNoYW5naW5nUGFydCk7CiBleHRlcm4gdm9pZCBoZWFwX2Zpbmlz aF9zcGVjdWxhdGl2ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRh ICp0aWQpOwogZXh0ZXJuIHZvaWQgaGVhcF9hYm9ydF9zcGVjdWxhdGl2ZShSZWxhdGlvbiBy ZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICp0aWQpOwotZXh0ZXJuIFRNX1Jlc3Vs dCBoZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRh ICpvdGlkLAotCQkJCQkJCSBIZWFwVHVwbGUgbmV3dHVwLAorZXh0ZXJuIFRNX1Jlc3VsdCBo ZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIG9sZHR1cCwgSGVhcFR1 cGxlIG5ld3R1cCwKIAkJCQkJCQkgQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVj aywgYm9vbCB3YWl0LAotCQkJCQkJCSBUTV9GYWlsdXJlRGF0YSAqdG1mZCwgTG9ja1R1cGxl TW9kZSAqbG9ja21vZGUsCi0JCQkJCQkJIGNvbnN0IEJpdG1hcHNldCAqbWl4X2F0dHJzLCBi b29sIG1peF9hdHRyc192YWxpZCwKLQkJCQkJCQkgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRl X2luZGV4ZXMpOworCQkJCQkJCSBUTV9GYWlsdXJlRGF0YSAqdG1mZCwgY29uc3QgTG9ja1R1 cGxlTW9kZSAqbG9ja21vZGUsCisJCQkJCQkJIEJ1ZmZlciBidWZmZXIsIFBhZ2UgcGFnZSwg QmxvY2tOdW1iZXIgYmxvY2ssIEl0ZW1JZCBscCwKKwkJCQkJCQkgYm9vbCBob3RfYWxsb3dl ZCwgQnVmZmVyIHZtYnVmZmVyLCBib29sIHJlcF9pZF9rZXlfcmVxdWlyZWQpOwogZXh0ZXJu IFRNX1Jlc3VsdCBoZWFwX2xvY2tfdHVwbGUoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBs ZSB0dXBsZSwKIAkJCQkJCQkJIENvbW1hbmRJZCBjaWQsIExvY2tUdXBsZU1vZGUgbW9kZSwg TG9ja1dhaXRQb2xpY3kgd2FpdF9wb2xpY3ksCiAJCQkJCQkJCSBib29sIGZvbGxvd191cGRh dGVzLApAQCAtNDMxLDYgKzQzMCwyMiBAQCBleHRlcm4gdm9pZCBsb2dfaGVhcF9wcnVuZV9h bmRfZnJlZXplKFJlbGF0aW9uIHJlbGF0aW9uLCBCdWZmZXIgYnVmZmVyLAogCQkJCQkJCQkJ ICBPZmZzZXROdW1iZXIgKmRlYWQsIGludCBuZGVhZCwKIAkJCQkJCQkJCSAgT2Zmc2V0TnVt YmVyICp1bnVzZWQsIGludCBudW51c2VkKTsKIAorLyogaW4gaGVhcC9oZWFwYW0uYyAqLwor ZXh0ZXJuIGJvb2wgSGVhcFVwZGF0ZUhvdEFsbG93YWJsZShSZWxhdGlvbiByZWxhdGlvbiwg Y29uc3QgQml0bWFwc2V0ICptaXhfYXR0cnMsCisJCQkJCQkJCSAgIGJvb2wgKnN1bW1hcml6 ZWRfb25seSk7CitleHRlcm4gYm9vbCBIZWFwVXBkYXRlUmVxdWlyZXNSZXBsaWNhSWQoUmVs YXRpb24gcmVsYXRpb24sIGNvbnN0IEJpdG1hcHNldCAqbWl4X2F0dHJzLAorCQkJCQkJCQkJ CUhlYXBUdXBsZURhdGEgKnR1cGxlKTsKK2V4dGVybiBCaXRtYXBzZXQgKkhlYXBEZXRlcm1p bmVDb2x1bW5zSW5mbyhSZWxhdGlvbiByZWxhdGlvbiwKKwkJCQkJCQkJCQkgICBCaXRtYXBz ZXQgKmludGVyZXN0aW5nX2NvbHMsCisJCQkJCQkJCQkJICAgSGVhcFR1cGxlIG9sZHR1cCwg SGVhcFR1cGxlIG5ld3R1cCk7CitleHRlcm4gTG9ja1R1cGxlTW9kZSBIZWFwVXBkYXRlRGV0 ZXJtaW5lTG9ja21vZGUoUmVsYXRpb24gcmVsYXRpb24sCisJCQkJCQkJCQkJCQkgY29uc3Qg Qml0bWFwc2V0ICptaXhfYXR0cnMpOworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKK2V4 dGVybiB2b2lkIGNoZWNrX2xvY2tfaWZfaW5wbGFjZV91cGRhdGVhYmxlX3JlbChSZWxhdGlv biByZWxhdGlvbiwKKwkJCQkJCQkJCQkJCSBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQs CisJCQkJCQkJCQkJCQkgSGVhcFR1cGxlIG5ld3R1cCk7CisjZW5kaWYKKwogLyogaW4gaGVh cC92YWN1dW1sYXp5LmMgKi8KIGV4dGVybiB2b2lkIGhlYXBfdmFjdXVtX3JlbChSZWxhdGlv biByZWwsCiAJCQkJCQkJY29uc3QgVmFjdXVtUGFyYW1zIHBhcmFtcywgQnVmZmVyQWNjZXNz U3RyYXRlZ3kgYnN0cmF0ZWd5KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3Jl bC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKaW5kZXggZGY1NDI2ZmQ3ZmIuLjEwZTVl OTA0NGVlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9yZWwuaAorKysgYi9zcmMv aW5jbHVkZS91dGlscy9yZWwuaApAQCAtMTYyLDcgKzE2Miw2IEBAIHR5cGVkZWYgc3RydWN0 IFJlbGF0aW9uRGF0YQogCUJpdG1hcHNldCAgKnJkX2tleWF0dHI7CQkvKiBjb2xzIHRoYXQg Y2FuIGJlIHJlZidkIGJ5IGZvcmVpZ24ga2V5cyAqLwogCUJpdG1hcHNldCAgKnJkX3BrYXR0 cjsJCS8qIGNvbHMgaW5jbHVkZWQgaW4gcHJpbWFyeSBrZXkgKi8KIAlCaXRtYXBzZXQgICpy ZF9pZGF0dHI7CQkvKiBpbmNsdWRlZCBpbiByZXBsaWNhIGlkZW50aXR5IGluZGV4ICovCi0J Qml0bWFwc2V0ICAqcmRfaG90YmxvY2tpbmdhdHRyOyAvKiBjb2xzIGJsb2NraW5nIEhPVCB1 cGRhdGUgKi8KIAlCaXRtYXBzZXQgICpyZF9zdW1tYXJpemVkYXR0cjsJLyogY29scyBpbmRl eGVkIGJ5IHN1bW1hcml6aW5nIGluZGV4ZXMgKi8KIAlCaXRtYXBzZXQgICpyZF9pbmRleGVk YXR0cjsgLyogYWxsIGNvbHMgcmVmZXJlbmNlZCBieSBpbmRleGVzICovCiAKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3V0aWxzL3JlbGNhY2hlLmggYi9zcmMvaW5jbHVkZS91dGlscy9y ZWxjYWNoZS5oCmluZGV4IDU4MzRhYjdiOTAzLi41N2I0NmVlNTRlNSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvdXRpbHMvcmVsY2FjaGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9y ZWxjYWNoZS5oCkBAIC02OSw3ICs2OSw2IEBAIHR5cGVkZWYgZW51bSBJbmRleEF0dHJCaXRt YXBLaW5kCiAJSU5ERVhfQVRUUl9CSVRNQVBfS0VZLAogCUlOREVYX0FUVFJfQklUTUFQX1BS SU1BUllfS0VZLAogCUlOREVYX0FUVFJfQklUTUFQX0lERU5USVRZX0tFWSwKLQlJTkRFWF9B VFRSX0JJVE1BUF9IT1RfQkxPQ0tJTkcsCiAJSU5ERVhfQVRUUl9CSVRNQVBfU1VNTUFSSVpF RCwKIAlJTkRFWF9BVFRSX0JJVE1BUF9JTkRFWEVELAogfSBJbmRleEF0dHJCaXRtYXBLaW5k OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9nZW5lcmF0ZWRfdmly dHVhbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dlbmVyYXRlZF92aXJ0dWFs Lm91dAppbmRleCAyNDllNjhiZTY1NC4uNmFlYTAzNDZlZTIgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ2VuZXJhdGVkX3ZpcnR1YWwub3V0CisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ2VuZXJhdGVkX3ZpcnR1YWwub3V0CkBAIC0yNjAsNyAr MjYwLDcgQEAgTUVSR0UgSU5UTyBndGVzdG0gdCBVU0lORyBndGVzdG0gQVMgcyBPTiAyICog dC5hID0gcy5iIFdIRU4gTUFUQ0hFRCBUSEVOIERFTEVURQogRFJPUCBUQUJMRSBndGVzdG07 CiAtLSB2aWV3cwogQ1JFQVRFIFZJRVcgZ3Rlc3QxdiBBUyBTRUxFQ1QgKiBGUk9NIGd0ZXN0 MTsKLVNFTEVDVCAqIEZST00gZ3Rlc3QxdjsKK1NFTEVDVCAqIEZST00gZ3Rlc3QxdiBPUkRF UiBCWSBhOwogIGEgfCBiIAogLS0tKy0tLQogIDMgfCA2CkBAIC0yODcsNyArMjg3LDcgQEAg REVUQUlMOiAgQ29sdW1uICJiIiBpcyBhIGdlbmVyYXRlZCBjb2x1bW4uCiBJTlNFUlQgSU5U TyBndGVzdDF2IFZBTFVFUyAoOCwgREVGQVVMVCksICg5LCBERUZBVUxUKTsgIC0tIGVycm9y CiBFUlJPUjogIGNhbm5vdCBpbnNlcnQgYSBub24tREVGQVVMVCB2YWx1ZSBpbnRvIGNvbHVt biAiYiIKIERFVEFJTDogIENvbHVtbiAiYiIgaXMgYSBnZW5lcmF0ZWQgY29sdW1uLgotU0VM RUNUICogRlJPTSBndGVzdDF2OworU0VMRUNUICogRlJPTSBndGVzdDF2IE9SREVSIEJZIGE7 CiAgYSB8IGIgIAogLS0tKy0tLS0KICAzIHwgIDYKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvdHJpZ2dlcnMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC90cmlnZ2Vycy5vdXQKaW5kZXggOThkZWU2M2I1MGEuLmVmOThmZDBjY2NmIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RyaWdnZXJzLm91dAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RyaWdnZXJzLm91dApAQCAtOTU5LDE2ICs5NTksMjQg QEAgTk9USUNFOiAgbWFpbl92aWV3IEJFRk9SRSBVUERBVEUgU1RBVEVNRU5UIChiZWZvcmVf dmlld191cGRfc3RtdCkKIE5PVElDRTogIG1haW5fdmlldyBBRlRFUiBVUERBVEUgU1RBVEVN RU5UIChhZnRlcl92aWV3X3VwZF9zdG10KQogVVBEQVRFIDAKIC0tIERlbGV0ZSBmcm9tIHZp ZXcgdXNpbmcgdHJpZ2dlcgotREVMRVRFIEZST00gbWFpbl92aWV3IFdIRVJFIGEgSU4gKDIw LDIxKTsKK0RFTEVURSBGUk9NIG1haW5fdmlldyBXSEVSRSBhID0gMjAgQU5EIGIgPSAzMTsK IE5PVElDRTogIG1haW5fdmlldyBCRUZPUkUgREVMRVRFIFNUQVRFTUVOVCAoYmVmb3JlX3Zp ZXdfZGVsX3N0bXQpCiBOT1RJQ0U6ICBtYWluX3ZpZXcgSU5TVEVBRCBPRiBERUxFVEUgUk9X IChpbnN0ZWFkX29mX2RlbCkKLU5PVElDRTogIE9MRDogKDIxLDEwKQotTk9USUNFOiAgbWFp bl92aWV3IElOU1RFQUQgT0YgREVMRVRFIFJPVyAoaW5zdGVhZF9vZl9kZWwpCiBOT1RJQ0U6 ICBPTEQ6ICgyMCwzMSkKK05PVElDRTogIG1haW5fdmlldyBBRlRFUiBERUxFVEUgU1RBVEVN RU5UIChhZnRlcl92aWV3X2RlbF9zdG10KQorREVMRVRFIDEKK0RFTEVURSBGUk9NIG1haW5f dmlldyBXSEVSRSBhID0gMjEgQU5EIGIgPSAxMDsKK05PVElDRTogIG1haW5fdmlldyBCRUZP UkUgREVMRVRFIFNUQVRFTUVOVCAoYmVmb3JlX3ZpZXdfZGVsX3N0bXQpCitOT1RJQ0U6ICBt YWluX3ZpZXcgSU5TVEVBRCBPRiBERUxFVEUgUk9XIChpbnN0ZWFkX29mX2RlbCkKK05PVElD RTogIE9MRDogKDIxLDEwKQorTk9USUNFOiAgbWFpbl92aWV3IEFGVEVSIERFTEVURSBTVEFU RU1FTlQgKGFmdGVyX3ZpZXdfZGVsX3N0bXQpCitERUxFVEUgMQorREVMRVRFIEZST00gbWFp bl92aWV3IFdIRVJFIGEgPSAyMSBBTkQgYiA9IDMyOworTk9USUNFOiAgbWFpbl92aWV3IEJF Rk9SRSBERUxFVEUgU1RBVEVNRU5UIChiZWZvcmVfdmlld19kZWxfc3RtdCkKIE5PVElDRTog IG1haW5fdmlldyBJTlNURUFEIE9GIERFTEVURSBST1cgKGluc3RlYWRfb2ZfZGVsKQogTk9U SUNFOiAgT0xEOiAoMjEsMzIpCiBOT1RJQ0U6ICBtYWluX3ZpZXcgQUZURVIgREVMRVRFIFNU QVRFTUVOVCAoYWZ0ZXJfdmlld19kZWxfc3RtdCkKLURFTEVURSAzCitERUxFVEUgMQogREVM RVRFIEZST00gbWFpbl92aWV3IFdIRVJFIGEgPSAzMSBSRVRVUk5JTkcgYSwgYjsKIE5PVElD RTogIG1haW5fdmlldyBCRUZPUkUgREVMRVRFIFNUQVRFTUVOVCAoYmVmb3JlX3ZpZXdfZGVs X3N0bXQpCiBOT1RJQ0U6ICBtYWluX3ZpZXcgSU5TVEVBRCBPRiBERUxFVEUgUk9XIChpbnN0 ZWFkX29mX2RlbCkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdXBk YXRhYmxlX3ZpZXdzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdXBkYXRhYmxl X3ZpZXdzLm91dAppbmRleCA5Y2VhNTM4YjhlOC4uNDg3N2ExZGRjZTkgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdXBkYXRhYmxlX3ZpZXdzLm91dAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3VwZGF0YWJsZV92aWV3cy5vdXQKQEAgLTM3Miwx NSArMzcyLDE1IEBAIElOU0VSVCBJTlRPIHJ3X3ZpZXcxNiAoYSwgYikgVkFMVUVTICgzLCAn Um93IDMnKTsgLS0gc2hvdWxkIGJlIE9LCiBVUERBVEUgcndfdmlldzE2IFNFVCBhPTMsIGFh PS0zIFdIRVJFIGE9MzsgLS0gc2hvdWxkIGZhaWwKIEVSUk9SOiAgbXVsdGlwbGUgYXNzaWdu bWVudHMgdG8gc2FtZSBjb2x1bW4gImEiCiBVUERBVEUgcndfdmlldzE2IFNFVCBhYT0tMyBX SEVSRSBhPTM7IC0tIHNob3VsZCBiZSBPSwotU0VMRUNUICogRlJPTSBiYXNlX3RibDsKK1NF TEVDVCAqIEZST00gYmFzZV90YmwgT1JERVIgQlkgYTsKICBhICB8ICAgYiAgICAKIC0tLS0r LS0tLS0tLS0KKyAtMyB8IFJvdyAzCiAgLTIgfCBSb3cgLTIKICAtMSB8IFJvdyAtMQogICAw IHwgUm93IDAKICAgMSB8IFJvdyAxCiAgIDIgfCBSb3cgMgotIC0zIHwgUm93IDMKICg2IHJv d3MpCiAKIERFTEVURSBGUk9NIHJ3X3ZpZXcxNiBXSEVSRSBhPS0zOyAtLSBzaG91bGQgYmUg T0sKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dlbmVyYXRlZF92aXJ0dWFs LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dlbmVyYXRlZF92aXJ0dWFsLnNxbAppbmRl eCA4MTE1MmIzOWE3OS4uMTE0MmJiOTM1MjUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2dlbmVyYXRlZF92aXJ0dWFsLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9nZW5lcmF0ZWRfdmlydHVhbC5zcWwKQEAgLTExNSw3ICsxMTUsNyBAQCBEUk9QIFRBQkxF IGd0ZXN0bTsKIAogLS0gdmlld3MKIENSRUFURSBWSUVXIGd0ZXN0MXYgQVMgU0VMRUNUICog RlJPTSBndGVzdDE7Ci1TRUxFQ1QgKiBGUk9NIGd0ZXN0MXY7CitTRUxFQ1QgKiBGUk9NIGd0 ZXN0MXYgT1JERVIgQlkgYTsKIElOU0VSVCBJTlRPIGd0ZXN0MXYgVkFMVUVTICg0LCA4KTsg IC0tIGVycm9yCiBJTlNFUlQgSU5UTyBndGVzdDF2IFZBTFVFUyAoNSwgREVGQVVMVCk7ICAt LSBvawogSU5TRVJUIElOVE8gZ3Rlc3QxdiBWQUxVRVMgKDYsIDY2KSwgKDcsIDc3KTsgIC0t IGVycm9yCkBAIC0xMjcsNyArMTI3LDcgQEAgQUxURVIgVklFVyBndGVzdDF2IEFMVEVSIENP TFVNTiBiIFNFVCBERUZBVUxUIDEwMDsKIElOU0VSVCBJTlRPIGd0ZXN0MXYgVkFMVUVTICg4 LCBERUZBVUxUKTsgIC0tIGVycm9yCiBJTlNFUlQgSU5UTyBndGVzdDF2IFZBTFVFUyAoOCwg REVGQVVMVCksICg5LCBERUZBVUxUKTsgIC0tIGVycm9yCiAKLVNFTEVDVCAqIEZST00gZ3Rl c3QxdjsKK1NFTEVDVCAqIEZST00gZ3Rlc3QxdiBPUkRFUiBCWSBhOwogREVMRVRFIEZST00g Z3Rlc3QxdiBXSEVSRSBhID49IDU7CiBEUk9QIFZJRVcgZ3Rlc3QxdjsKIApkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvdHJpZ2dlcnMuc3FsIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvdHJpZ2dlcnMuc3FsCmluZGV4IGVhMzk4MTdlZTNkLi42Y2ViNjE2MDhhZSAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvdHJpZ2dlcnMuc3FsCisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3RyaWdnZXJzLnNxbApAQCAtNjYwLDcgKzY2MCw5IEBAIFVQREFU RSBtYWluX3ZpZXcgU0VUIGIgPSAzMiBXSEVSRSBhID0gMjEgQU5EIGIgPSAzMSBSRVRVUk5J TkcgYSwgYjsKIFVQREFURSBtYWluX3ZpZXcgU0VUIGIgPSAwIFdIRVJFIGZhbHNlOwogCiAt LSBEZWxldGUgZnJvbSB2aWV3IHVzaW5nIHRyaWdnZXIKLURFTEVURSBGUk9NIG1haW5fdmll dyBXSEVSRSBhIElOICgyMCwyMSk7CitERUxFVEUgRlJPTSBtYWluX3ZpZXcgV0hFUkUgYSA9 IDIwIEFORCBiID0gMzE7CitERUxFVEUgRlJPTSBtYWluX3ZpZXcgV0hFUkUgYSA9IDIxIEFO RCBiID0gMTA7CitERUxFVEUgRlJPTSBtYWluX3ZpZXcgV0hFUkUgYSA9IDIxIEFORCBiID0g MzI7CiBERUxFVEUgRlJPTSBtYWluX3ZpZXcgV0hFUkUgYSA9IDMxIFJFVFVSTklORyBhLCBi OwogCiBcc2V0IFFVSUVUIHRydWUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3VwZGF0YWJsZV92aWV3cy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC91cGRhdGFibGVf dmlld3Muc3FsCmluZGV4IDE2MzVhZGRlMmQ0Li4xNjBlNzc5OTcxNSAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9zcWwvdXBkYXRhYmxlX3ZpZXdzLnNxbAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL3NxbC91cGRhdGFibGVfdmlld3Muc3FsCkBAIC0xMjUsNyArMTI1LDcgQEAg SU5TRVJUIElOVE8gcndfdmlldzE2IFZBTFVFUyAoMywgJ1JvdyAzJywgMyk7IC0tIHNob3Vs ZCBmYWlsCiBJTlNFUlQgSU5UTyByd192aWV3MTYgKGEsIGIpIFZBTFVFUyAoMywgJ1JvdyAz Jyk7IC0tIHNob3VsZCBiZSBPSwogVVBEQVRFIHJ3X3ZpZXcxNiBTRVQgYT0zLCBhYT0tMyBX SEVSRSBhPTM7IC0tIHNob3VsZCBmYWlsCiBVUERBVEUgcndfdmlldzE2IFNFVCBhYT0tMyBX SEVSRSBhPTM7IC0tIHNob3VsZCBiZSBPSwotU0VMRUNUICogRlJPTSBiYXNlX3RibDsKK1NF TEVDVCAqIEZST00gYmFzZV90YmwgT1JERVIgQlkgYTsKIERFTEVURSBGUk9NIHJ3X3ZpZXcx NiBXSEVSRSBhPS0zOyAtLSBzaG91bGQgYmUgT0sKIC0tIFJlYWQtb25seSB2aWV3cwogSU5T RVJUIElOVE8gcm9fdmlldzE3IFZBTFVFUyAoMywgJ1JPVyAzJyk7Ci0tIAoyLjUxLjIKCg== --1580f5491ceb474092467f7b9d85561b--