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 1wBbem-001DSK-31 for pgsql-hackers@arkaria.postgresql.org; Sat, 11 Apr 2026 16:58:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wBbej-00H8eC-2z for pgsql-hackers@arkaria.postgresql.org; Sat, 11 Apr 2026 16:58:02 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wBbei-00H8e4-2r for pgsql-hackers@lists.postgresql.org; Sat, 11 Apr 2026 16:58:02 +0000 Received: from mail-lj1-x22e.google.com ([2a00:1450:4864:20::22e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wBbeg-00000000W52-3E1B for pgsql-hackers@postgresql.org; Sat, 11 Apr 2026 16:58:00 +0000 Received: by mail-lj1-x22e.google.com with SMTP id 38308e7fff4ca-38e68e4389cso1260121fa.3 for ; Sat, 11 Apr 2026 09:57:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775926676; cv=none; d=google.com; s=arc-20240605; b=QmUnLwO4oWuSS3t/sMVmcenLDn93weE64+X41uTW/6wJImKU0iNCUr7Mq3/63yGGZM pQQCgiQZZa0+wtY0kP0NypdtpUBKMCFsJokh32ZNHLTOSivzbBYdyW6c8QI6Z4QzHLR3 aPXjZQiD3vKnDVEWP01CI3TIJW6vVKI+T4j7Rfpng12WraHooRv+u/NdYrlnj00mYq7d h+Mhupw09AlQKftPM9NQVxaxvxsQR7QqDucj/RtBoCj62YEAiJOTEX6Twjy5mV69DuIV 6uj+oSXMzEHBwJ1Lqice9W4xKNUWuNV40nNvI0VZej4OuyzL5/8RvkLcD63ZJLQyKqae 1u+A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=0PCU09ranvKlVisdF+g7UYERBbX+27/MotTt6U5qqfQ=; fh=BfQZID73+fk54L6Ie/3g2FgfTBix/w8V8bpOPpg62DY=; b=WGna/04JGMkDYlJ0CaTIEfzF6IbVqdsu0RtpOZWlFQt+rlgGlw+sIdZrMIt3BNClUW ADtutl8MNLztBO0PKkF/W7vra0OqqHya6gMc3qKO5Ht3BodPBtNSAcffyloAro9AoL5X m9WJuw/c5cTnGadldIKMzgpmBSU8YL6TKHx7I6j9FLAIuEVUxxkvuZk0iTgXYWSimxUv aPWQ45aCMS2aq8zq1syOGOs9fdNNSbthTxcUUCmvsifk2v7sISkOfiX26/1lDsh9Ve3J vIvfh9S435Exvm5kXpW4xjQ9A3+3atNFsqJsOAwvx1VE3u6QCzHBu3ixVOX2EmClPPZ4 jlQQ==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775926676; x=1776531476; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=0PCU09ranvKlVisdF+g7UYERBbX+27/MotTt6U5qqfQ=; b=rYl37gostPmZXDx48+p7osN1YNymujlyo3g8DZtoPH2o0Jwj89A0bAVjugKOiPGDxM KOOPduPlURm8SLaSEu6Dz01Y2nLFk+l0simgSyHs7A55N6AQyXbho4gbwy1SazzDSPfu KObv30xAFzGNQxsk9iM152GlnB3L2S7bdIuXwy+dVnFZOaj8jWsCK/pQUeJgqlDGjY19 N1X2BOaCDSCiUU4hp9lwiq3vYPKowJC2HDfdlYDFG9PegABOWaneuf6y6/Php07Niu+L 1oJrcC5WtUzs6QzSJCxVAno5g8XKczqi/2NuGrZZgEmUI2OW1oLB/gdeAVHDhZz/Ple7 ce6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775926676; x=1776531476; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=0PCU09ranvKlVisdF+g7UYERBbX+27/MotTt6U5qqfQ=; b=c+/LLJ4iKBx8gU5t4qZcXrnJ29qr/9tyXMfa50G6/U08CUuJxo2JJx8r5qu7Cjg/+q xCigfkIfJSm733IatlxlkM3M5a57wL8J2CB/KUrm6Vmdu7rA1+iifLiBF17/0T6pEbks +bmHlsq+dcyEQVjn6cTFmOVWagEc0QLUJLOi7ns3YMsYQzTUfyHw7pLx2xjA+Tadr7mb Own0+fdvg8KJmvbyBiU7dJxbgtZiP72aQAQYye/dMtSb62UffRhKy4Z7z0FmaepISh+G idBzpCOecIxW6Bauazu8Qp4PH1mywSQhLo7kKKdFCv0KWVAh9pN9qGP0+r1mZQxnvqb9 JmQA== X-Forwarded-Encrypted: i=1; AJvYcCWSW1oTAh9ZZHe4U5bK5GZRIzs0/p7yJM+24GZT55nptVNV0pvdj57U0HaMHabdtYf6O7r7jibxRKilN9pw@postgresql.org X-Gm-Message-State: AOJu0YxRj/Ey3LIYK81UFMlMclVNI2rq17HxKFAMlPhEbmWD9XQVGood rWUadndpjx8GgCnz/IvGHOtQfeTNCrTM+QhEYXInXWxlpiQAJTp4Uu9KLRJd7kP4Nmx1A1HZFvm N80GwEz/SfVOqjy+u7VDE145M6dWfyzU= X-Gm-Gg: AeBDievDA4jn94AsibMprC3DCe30bljbx3u61e2H95b8kgTYJkNmYjuKHQsFvF9wIF9 YUHziuI1g3UeUtpQvoQUu/YNXbFB6gQetWnn+0gNiBY6ld0K7tRhNBjMYpLnoSJsZiVmOIwMzex fu1W8/zbpBvi48DTMsfOLio2GiSIveT3usXKvMPf1tRiSCTR7WxwMDe34qxdBlnzN6F+p21OxlD loIsAdiB74Yl0pcuwOirM4ZuXVSDjpaoG9cFWKe/tAwDPh22gk00h/8OmEBiMByz777f57XSB9y /BD1VENZSnYNMXfPxqS75/fN/DTXUl+A6w2SlMtBEFH2wHolRxlo5xpVWq6LrV+bVypo X-Received: by 2002:a05:6512:68e:b0:5a2:ae27:c879 with SMTP id 2adb3069b0e04-5a3efd7f0d8mr2226934e87.29.1775926675475; Sat, 11 Apr 2026 09:57:55 -0700 (PDT) MIME-Version: 1.0 References: <202505181556.3n6oiowvntyr@alvherre.pgsql> <8010.1764584989@localhost> <5778.1764660480@localhost> In-Reply-To: From: Mihail Nikalayeu Date: Sat, 11 Apr 2026 18:56:00 +0200 X-Gm-Features: AQROBzAcEomQjYnWB334n8KSO9iPDQsI_aUWO5WSx2eZH5lBckSxvWhsy99En3k Message-ID: Subject: Re: Revisiting {CREATE INDEX, REINDEX} CONCURRENTLY improvements To: Josh Kupershmidt Cc: Matthias van de Meent , Antonin Houska , Hannu Krosing , Sergey Sargsyan , =?UTF-8?Q?=C3=81lvaro_Herrera?= , Andres Freund , Michael Paquier , PostgreSQL Hackers , Andrey Borodin , Melanie Plageman Content-Type: multipart/mixed; boundary="000000000000a3b825064f322697" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a3b825064f322697 Content-Type: text/plain; charset="UTF-8" Hi! Rebased, including fixes related to Josh's review. Thanks! --000000000000a3b825064f322697 Content-Type: application/octet-stream; name="v35-0004-Use-auxiliary-indexes-for-concurrent-index-opera.patch" Content-Disposition: attachment; filename="v35-0004-Use-auxiliary-indexes-for-concurrent-index-opera.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnuipbjh3 RnJvbSA3MDdkMDlkMWQ3M2UwZTFlNzcwZjQ3OTNkYjI3ZDZhNDM3MGIzMDQxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAzMSBEZWMgMjAyNCAxNTowMzoxMCArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjM1IDQvN10gVXNlIGF1eGlsaWFyeSBpbmRleGVzIGZvciBjb25jdXJyZW50IGluZGV4 IG9wZXJhdGlvbnMKClJlcGxhY2UgdGhlIHNlY29uZCB0YWJsZSBmdWxsIHNjYW4gaW4gY29uY3Vy cmVudCBpbmRleCBidWlsZHMgd2l0aCBhbiBhdXhpbGlhcnkgaW5kZXggYXBwcm9hY2g6Ci0gY3Jl YXRlIGEgU1RJUiBhdXhpbGlhcnkgaW5kZXggd2l0aCB0aGUgc2FtZSBwcmVkaWNhdGUgKGlmIGV4 aXN0cykgYXMgaW4gbWFpbiBpbmRleAotIHVzZSBpdCB0byB0cmFjayB0dXBsZXMgaW5zZXJ0ZWQg ZHVyaW5nIHRoZSBmaXJzdCBwaGFzZQotIG1lcmdlIGF1eGlsaWFyeSBpbmRleCB3aXRoIG1haW4g aW5kZXggZHVyaW5nIHZhbGlkYXRpb24gdG8gY2F0Y2ggdXAgbmV3IGluZGV4IHdpdGggYW55IHR1 cGxlcyBtaXNzZWQgZHVyaW5nIHRoZSBmaXJzdCBwaGFzZQotIGF1dG9tYXRpY2FsbHkgZHJvcCBh dXhpbGlhcnkgd2hlbiBtYWluIGluZGV4IGlzIHJlYWR5CgpUbyBtZXJnZSBtYWluIGFuZCBhdXhp bGlhcnkgaW5kZXhlczoKLSBpbmRleF9idWxrX2RlbGV0ZSBjYWxsZWQgZm9yIGJvdGgsIFRJRHMg cHV0IGludG8gdHVwbGVzb3J0Ci0gYm90aCB0dXBsZXNvcnQgYXJlIGJlaW5nIHNvcnRlZAotIGJv dGggdHVwbGVzb3J0IHNjYW5uZWQgd2l0aCB0d28gcG9pbnRlcnMgbG9va2luZyBmb3IgdGhlIFRJ RHMgcHJlc2VudCBpbiBhdXhpbGlhcnkgaW5kZXgsIGJ1dCBhYnNlbnQgaW4gbWFpbiBvbmUKLSBh bGwgc3VjaCBUSURzIGFyZSBwdXQgaW50byB0dXBsZXN0b3JlCi0gYWxsIFRJRHMgaW4gdHVwbGVz dG9yZSBhcmUgZmV0Y2hlZCB1c2luZyB0aGUgc3RyZWFtLCB0dXBsZXN0b3JlIHVzZWQgaW4gaGVh cGFtX2luZGV4X3ZhbGlkYXRlX3NjYW5fcmVhZF9zdHJlYW1fbmV4dCB0byBwcm92aWRlIHRoZSBu ZXh0IHBhZ2UgdG8gcHJlZmV0Y2gKLSBpZiBmZXRjaGVkIHR1cGxlIGlzIGFsaXZlIC0gaXQgaXMg aW5zZXJ0ZWQgaW50byB0aGUgbWFpbiBpbmRleAoKVGhpcyBlbGltaW5hdGVzIHRoZSBuZWVkIGZv ciBhIHNlY29uZCBmdWxsIHRhYmxlIHNjYW4gZHVyaW5nIHZhbGlkYXRpb24sIGltcHJvdmluZyBw ZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBmb3IgbGFyZ2UgdGFibGVzLiBBZmZlY3RzIGJvdGggQ1JF QVRFIElOREVYIENPTkNVUlJFTlRMWSBhbmQgUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgb3Bl cmF0aW9ucy4KLS0tCiBkb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sICAgICAgICAgICAgICAg fCAgMjYgKy0KIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwgICAgICAgICB8ICAz NCArLQogZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwgICAgICAgICAgICAgIHwgIDQwICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9SRUFETUUuSE9UICAgICAgICAgfCAgMTMgKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICB8IDU1NyArKysrKysrKysr KysrKy0tLS0tLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyAgICAgICAgICAgICAgICB8 IDMyMiArKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCAg ICAgICB8ICAxNyArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgICAgICAgICAg IHwgMzQ1ICsrKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jICAgICAg ICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5k YXQgIHwgICA5ICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgICB8 ICAxMiArLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oICAgICAgICAgICAgICAgIHwgICA5 ICstCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9wcm9ncmVzcy5oICAgICAgICAgICAgfCAgMTMgKy0K IHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMv aW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaCAgICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dCB8ICAzNSArKwogc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9pbmRleGluZy5vdXQgICAgIHwgICAzICstCiBzcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3J1bGVzLm91dCAgICAgICAgfCAgMTcgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2NyZWF0ZV9pbmRleC5zcWwgICAgICB8ICAyMSArCiAxOSBmaWxlcyBjaGFuZ2VkLCAxMTQ3IGlu c2VydGlvbnMoKyksIDMzNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwv bW9uaXRvcmluZy5zZ21sIGIvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbAppbmRleCAwOGQ1 YjgyNDU1Mi4uMWYyY2QwZDZmN2UgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5n LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbApAQCAtNjk3MSw2ICs2OTcx LDE4IEBAIEZST00gcGdfc3RhdF9nZXRfYmFja2VuZF9pZHNldCgpIEFTIGJhY2tlbmRpZDsKICAg ICAgICBpbmZvcm1hdGlvbiBmb3IgdGhpcyBwaGFzZS4KICAgICAgIDwvZW50cnk+CiAgICAgIDwv cm93PgorICAgICA8cm93PgorICAgICAgPGVudHJ5PjxsaXRlcmFsPndhaXRpbmcgZm9yIHdyaXRl cnMgdG8gdXNlIGF1eGlsaWFyeSBpbmRleDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgPGVudHJ5 PgorICAgICAgIDxjb21tYW5kPkNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+IG9y IDxjb21tYW5kPlJFSU5ERVggQ09OQ1VSUkVOVExZPC9jb21tYW5kPiBpcyB3YWl0aW5nIGZvciB0 cmFuc2FjdGlvbnMKKyAgICAgICB3aXRoIHdyaXRlIGxvY2tzIHRoYXQgY2FuIHBvdGVudGlhbGx5 IHNlZSB0aGUgdGFibGUgdG8gZmluaXNoLCB0byBlbnN1cmUgdXNlIG9mIGF1eGlsaWFyeSBpbmRl eCBmb3IgbmV3IHR1cGxlcyBpbgorICAgICAgIGZ1dHVyZSB0cmFuc2FjdGlvbnMuCisgICAgICAg VGhpcyBwaGFzZSBpcyBza2lwcGVkIHdoZW4gbm90IGluIGNvbmN1cnJlbnQgbW9kZS4KKyAgICAg ICBDb2x1bW5zIDxzdHJ1Y3RuYW1lPmxvY2tlcnNfdG90YWw8L3N0cnVjdG5hbWU+LCA8c3RydWN0 bmFtZT5sb2NrZXJzX2RvbmU8L3N0cnVjdG5hbWU+CisgICAgICAgYW5kIDxzdHJ1Y3RuYW1lPmN1 cnJlbnRfbG9ja2VyX3BpZDwvc3RydWN0bmFtZT4gY29udGFpbiB0aGUgcHJvZ3Jlc3MKKyAgICAg ICBpbmZvcm1hdGlvbiBmb3IgdGhpcyBwaGFzZS4KKyAgICAgIDwvZW50cnk+CisgICAgIDwvcm93 PgogICAgICA8cm93PgogICAgICAgPGVudHJ5PjxsaXRlcmFsPmJ1aWxkaW5nIGluZGV4PC9saXRl cmFsPjwvZW50cnk+CiAgICAgICA8ZW50cnk+CkBAIC03MDExLDEzICs3MDIzLDEyIEBAIEZST00g cGdfc3RhdF9nZXRfYmFja2VuZF9pZHNldCgpIEFTIGJhY2tlbmRpZDsKICAgICAgIDwvZW50cnk+ CiAgICAgIDwvcm93PgogICAgICA8cm93PgotICAgICAgPGVudHJ5PjxsaXRlcmFsPmluZGV4IHZh bGlkYXRpb246IHNjYW5uaW5nIHRhYmxlPC9saXRlcmFsPjwvZW50cnk+CisgICAgICA8ZW50cnk+ PGxpdGVyYWw+aW5kZXggdmFsaWRhdGlvbjogbWVyZ2luZyBpbmRleGVzPC9saXRlcmFsPjwvZW50 cnk+CiAgICAgICA8ZW50cnk+Ci0gICAgICAgPGNvbW1hbmQ+Q1JFQVRFIElOREVYIENPTkNVUlJF TlRMWTwvY29tbWFuZD4gaXMgc2Nhbm5pbmcgdGhlIHRhYmxlCi0gICAgICAgdG8gdmFsaWRhdGUg dGhlIGluZGV4IHR1cGxlcyBjb2xsZWN0ZWQgaW4gdGhlIHByZXZpb3VzIHR3byBwaGFzZXMuCisg ICAgICAgPGNvbW1hbmQ+Q1JFQVRFIElOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4gaXMgbWVy Z2luZyBjb250ZW50IG9mIGF1eGlsaWFyeSBpbmRleCB3aXRoIHRoZSB0YXJnZXQgaW5kZXguCiAg ICAgICAgVGhpcyBwaGFzZSBpcyBza2lwcGVkIHdoZW4gbm90IGluIGNvbmN1cnJlbnQgbW9kZS4K LSAgICAgICBDb2x1bW5zIDxzdHJ1Y3RuYW1lPmJsb2Nrc190b3RhbDwvc3RydWN0bmFtZT4gKHNl dCB0byB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgdGFibGUpCi0gICAgICAgYW5kIDxzdHJ1Y3RuYW1l PmJsb2Nrc19kb25lPC9zdHJ1Y3RuYW1lPiBjb250YWluIHRoZSBwcm9ncmVzcyBpbmZvcm1hdGlv biBmb3IgdGhpcyBwaGFzZS4KKyAgICAgICBDb2x1bW5zIDxzdHJ1Y3RuYW1lPnR1cGxlc190b3Rh bDwvc3RydWN0bmFtZT4gKHNldCB0byB0aGUgbnVtYmVyIG9mIHR1cGxlcyB0byBiZSBtZXJnZWQp CisgICAgICAgYW5kIDxzdHJ1Y3RuYW1lPnR1cGxlc19kb25lPC9zdHJ1Y3RuYW1lPiBjb250YWlu IHRoZSBwcm9ncmVzcyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBwaGFzZS4KICAgICAgIDwvZW50cnk+ CiAgICAgIDwvcm93PgogICAgICA8cm93PgpAQCAtNzAzNCw4ICs3MDQ1LDkgQEAgRlJPTSBwZ19z dGF0X2dldF9iYWNrZW5kX2lkc2V0KCkgQVMgYmFja2VuZGlkOwogICAgICA8cm93PgogICAgICAg PGVudHJ5PjxsaXRlcmFsPndhaXRpbmcgZm9yIHJlYWRlcnMgYmVmb3JlIG1hcmtpbmcgZGVhZDwv bGl0ZXJhbD48L2VudHJ5PgogICAgICAgPGVudHJ5PgotICAgICAgIDxjb21tYW5kPlJFSU5ERVgg Q09OQ1VSUkVOVExZPC9jb21tYW5kPiBpcyB3YWl0aW5nIGZvciB0cmFuc2FjdGlvbnMKLSAgICAg ICB3aXRoIHJlYWQgbG9ja3Mgb24gdGhlIHRhYmxlIHRvIGZpbmlzaCwgYmVmb3JlIG1hcmtpbmcg dGhlIG9sZCBpbmRleCBkZWFkLgorICAgICAgIDxjb21tYW5kPkNSRUFURSBJTkRFWCBDT05DVVJS RU5UTFk8L2NvbW1hbmQ+IGlzIHdhaXRpbmcgZm9yIHRyYW5zYWN0aW9ucworICAgICAgIHdpdGgg cmVhZCBsb2NrcyBvbiB0aGUgdGFibGUgdG8gZmluaXNoLCBiZWZvcmUgbWFya2luZyB0aGUgYXV4 aWxpYXJ5IGluZGV4IGFzIGRlYWQuCisgICAgICAgPGNvbW1hbmQ+UkVJTkRFWCBDT05DVVJSRU5U TFk8L2NvbW1hbmQ+IGlzIGFsc28gd2FpdGluZyBiZWZvcmUgbWFya2luZyB0aGUgb2xkIGluZGV4 IGFzIGRlYWQuCiAgICAgICAgVGhpcyBwaGFzZSBpcyBza2lwcGVkIHdoZW4gbm90IGluIGNvbmN1 cnJlbnQgbW9kZS4KICAgICAgICBDb2x1bW5zIDxzdHJ1Y3RuYW1lPmxvY2tlcnNfdG90YWw8L3N0 cnVjdG5hbWU+LCA8c3RydWN0bmFtZT5sb2NrZXJzX2RvbmU8L3N0cnVjdG5hbWU+CiAgICAgICAg YW5kIDxzdHJ1Y3RuYW1lPmN1cnJlbnRfbG9ja2VyX3BpZDwvc3RydWN0bmFtZT4gY29udGFpbiB0 aGUgcHJvZ3Jlc3MKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNn bWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sCmluZGV4IGJiNzUwNWQxNzFi Li45MDFjNmNmMjJiYyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfaW5kZXgu c2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sCkBAIC02MjAsMTAg KzYyMCwxMCBAQCBDUkVBVEUgWyBVTklRVUUgXSBJTkRFWCBbIENPTkNVUlJFTlRMWSBdIFsgWyBJ RiBOT1QgRVhJU1RTIF0gPHJlcGxhY2VhYmxlIGNsYXNzPQogICAgIG91dCB3cml0ZXMuICBUaGlz IG1ldGhvZCBpcyBpbnZva2VkIGJ5IHNwZWNpZnlpbmcgdGhlCiAgICAgPGxpdGVyYWw+Q09OQ1VS UkVOVExZPC9saXRlcmFsPiBvcHRpb24gb2YgPGNvbW1hbmQ+Q1JFQVRFIElOREVYPC9jb21tYW5k Pi4KICAgICBXaGVuIHRoaXMgb3B0aW9uIGlzIHVzZWQsCi0gICAgPHByb2R1Y3RuYW1lPlBvc3Rn cmVTUUw8L3Byb2R1Y3RuYW1lPiBtdXN0IHBlcmZvcm0gdHdvIHNjYW5zIG9mIHRoZSB0YWJsZSwg YW5kIGluCi0gICAgYWRkaXRpb24gaXQgbXVzdCB3YWl0IGZvciBhbGwgZXhpc3RpbmcgdHJhbnNh Y3Rpb25zIHRoYXQgY291bGQgcG90ZW50aWFsbHkKLSAgICBtb2RpZnkgb3IgdXNlIHRoZSBpbmRl eCB0byB0ZXJtaW5hdGUuICBUaHVzCi0gICAgdGhpcyBtZXRob2QgcmVxdWlyZXMgbW9yZSB0b3Rh bCB3b3JrIHRoYW4gYSBzdGFuZGFyZCBpbmRleCBidWlsZCBhbmQgdGFrZXMKKyAgICA8cHJvZHVj dG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IG11c3QgcGVyZm9ybSBhIHRhYmxlIHNjYW4g Zm9sbG93ZWQgYnkKKyAgICBhIHZhbGlkYXRpb24gcGhhc2UsIGFuZCBpbiBhZGRpdGlvbiBpdCBt dXN0IHdhaXQgZm9yIGFsbCBleGlzdGluZyB0cmFuc2FjdGlvbnMKKyAgICB0aGF0IGNvdWxkIHBv dGVudGlhbGx5IG1vZGlmeSBvciB1c2UgdGhlIGluZGV4IHRvIHRlcm1pbmF0ZS4gIFRodXMKKyAg ICB0aGlzIG1ldGhvZCByZXF1aXJlcyBtb3JlIHRvdGFsIHdvcmsgdGhhbiBhIHN0YW5kYXJkIGlu ZGV4IGJ1aWxkIGFuZCBtYXkgdGFrZQogICAgIHNpZ25pZmljYW50bHkgbG9uZ2VyIHRvIGNvbXBs ZXRlLiAgSG93ZXZlciwgc2luY2UgaXQgYWxsb3dzIG5vcm1hbAogICAgIG9wZXJhdGlvbnMgdG8g Y29udGludWUgd2hpbGUgdGhlIGluZGV4IGlzIGJ1aWx0LCB0aGlzIG1ldGhvZCBpcyB1c2VmdWwg Zm9yCiAgICAgYWRkaW5nIG5ldyBpbmRleGVzIGluIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudC4g IE9mIGNvdXJzZSwgdGhlIGV4dHJhIENQVQpAQCAtNjMxLDE0ICs2MzEsMTQgQEAgQ1JFQVRFIFsg VU5JUVVFIF0gSU5ERVggWyBDT05DVVJSRU5UTFkgXSBbIFsgSUYgTk9UIEVYSVNUUyBdIDxyZXBs YWNlYWJsZSBjbGFzcz0KICAgIDwvcGFyYT4KIAogICAgPHBhcmE+Ci0gICAgSW4gYSBjb25jdXJy ZW50IGluZGV4IGJ1aWxkLCB0aGUgaW5kZXggaXMgYWN0dWFsbHkgZW50ZXJlZCBhcyBhbgotICAg IDxxdW90ZT5pbnZhbGlkPC9xdW90ZT4gaW5kZXggaW50bwotICAgIHRoZSBzeXN0ZW0gY2F0YWxv Z3MgaW4gb25lIHRyYW5zYWN0aW9uLCB0aGVuIHR3byB0YWJsZSBzY2FucyBvY2N1ciBpbgotICAg IHR3byBtb3JlIHRyYW5zYWN0aW9ucy4gIEJlZm9yZSBlYWNoIHRhYmxlIHNjYW4sIHRoZSBpbmRl eCBidWlsZCBtdXN0CisgICAgSW4gYSBjb25jdXJyZW50IGluZGV4IGJ1aWxkLCB0aGUgbWFpbiBh bmQgYXV4aWxpYXJ5IGluZGV4ZXMgYXJlIGFjdHVhbGx5CisgICAgZW50ZXJlZCBhcyA8cXVvdGU+ aW52YWxpZDwvcXVvdGU+IGluZGV4ZXMgaW50bworICAgIHRoZSBzeXN0ZW0gY2F0YWxvZ3MgaW4g b25lIHRyYW5zYWN0aW9uLCB0aGVuIHR3byBwaGFzZXMgb2NjdXIgaW4KKyAgICBtdWx0aXBsZSB0 cmFuc2FjdGlvbnMuICBCZWZvcmUgZWFjaCBwaGFzZSwgdGhlIGluZGV4IGJ1aWxkIG11c3QKICAg ICB3YWl0IGZvciBleGlzdGluZyB0cmFuc2FjdGlvbnMgdGhhdCBoYXZlIG1vZGlmaWVkIHRoZSB0 YWJsZSB0byB0ZXJtaW5hdGUuCi0gICAgQWZ0ZXIgdGhlIHNlY29uZCBzY2FuLCB0aGUgaW5kZXgg YnVpbGQgbXVzdCB3YWl0IGZvciBhbnkgdHJhbnNhY3Rpb25zCisgICAgQWZ0ZXIgdGhlIHNlY29u ZCBwaGFzZSwgdGhlIGluZGV4IGJ1aWxkIG11c3Qgd2FpdCBmb3IgYW55IHRyYW5zYWN0aW9ucwog ICAgIHRoYXQgaGF2ZSBhIHNuYXBzaG90IChzZWUgPHhyZWYgbGlua2VuZD0ibXZjYyIvPikgcHJl ZGF0aW5nIHRoZSBzZWNvbmQKLSAgICBzY2FuIHRvIHRlcm1pbmF0ZSwgaW5jbHVkaW5nIHRyYW5z YWN0aW9ucyB1c2VkIGJ5IGFueSBwaGFzZSBvZiBjb25jdXJyZW50CisgICAgcGhhc2UgdG8gdGVy bWluYXRlLCBpbmNsdWRpbmcgdHJhbnNhY3Rpb25zIHVzZWQgYnkgYW55IHBoYXNlIG9mIGNvbmN1 cnJlbnQKICAgICBpbmRleCBidWlsZHMgb24gb3RoZXIgdGFibGVzLCBpZiB0aGUgaW5kZXhlcyBp bnZvbHZlZCBhcmUgcGFydGlhbCBvciBoYXZlCiAgICAgY29sdW1ucyB0aGF0IGFyZSBub3Qgc2lt cGxlIGNvbHVtbiByZWZlcmVuY2VzLgogICAgIFRoZW4gZmluYWxseSB0aGUgaW5kZXggY2FuIGJl IG1hcmtlZCA8cXVvdGU+dmFsaWQ8L3F1b3RlPiBhbmQgcmVhZHkgZm9yIHVzZSwKQEAgLTY1MSwx MCArNjUxLDExIEBAIENSRUFURSBbIFVOSVFVRSBdIElOREVYIFsgQ09OQ1VSUkVOVExZIF0gWyBb IElGIE5PVCBFWElTVFMgXSA8cmVwbGFjZWFibGUgY2xhc3M9CiAgICA8cGFyYT4KICAgICBJZiBh IHByb2JsZW0gYXJpc2VzIHdoaWxlIHNjYW5uaW5nIHRoZSB0YWJsZSwgc3VjaCBhcyBhIGRlYWRs b2NrIG9yIGEKICAgICB1bmlxdWVuZXNzIHZpb2xhdGlvbiBpbiBhIHVuaXF1ZSBpbmRleCwgdGhl IDxjb21tYW5kPkNSRUFURSBJTkRFWDwvY29tbWFuZD4KLSAgICBjb21tYW5kIHdpbGwgZmFpbCBi dXQgbGVhdmUgYmVoaW5kIGFuIDxxdW90ZT5pbnZhbGlkPC9xdW90ZT4gaW5kZXguIFRoaXMgaW5k ZXgKLSAgICB3aWxsIGJlIGlnbm9yZWQgZm9yIHF1ZXJ5aW5nIHB1cnBvc2VzIGJlY2F1c2UgaXQg bWlnaHQgYmUgaW5jb21wbGV0ZTsKLSAgICBob3dldmVyIGl0IHdpbGwgc3RpbGwgY29uc3VtZSB1 cGRhdGUgb3ZlcmhlYWQuIFRoZSA8YXBwbGljYXRpb24+cHNxbDwvYXBwbGljYXRpb24+Ci0gICAg PGNvbW1hbmQ+XGQ8L2NvbW1hbmQ+IGNvbW1hbmQgd2lsbCByZXBvcnQgc3VjaCBhbiBpbmRleCBh cyA8bGl0ZXJhbD5JTlZBTElEPC9saXRlcmFsPjoKKyAgICBjb21tYW5kIHdpbGwgZmFpbCBidXQg bGVhdmUgYmVoaW5kIHR3byA8cXVvdGU+aW52YWxpZDwvcXVvdGU+IGluZGV4ZXM6CisgICAgdGhl IG1haW4gaW5kZXggYW5kIGl0cyBhc3NvY2lhdGVkIGF1eGlsaWFyeSBpbmRleC4gVGhlc2UgaW5k ZXhlcworICAgIHdpbGwgYmUgaWdub3JlZCBmb3IgcXVlcnlpbmcgcHVycG9zZXMgYmVjYXVzZSB0 aGV5IG1pZ2h0IGJlIGluY29tcGxldGU7CisgICAgaG93ZXZlciB0aGV5IHdpbGwgc3RpbGwgY29u c3VtZSB1cGRhdGUgb3ZlcmhlYWQuIFRoZSA8YXBwbGljYXRpb24+cHNxbDwvYXBwbGljYXRpb24+ CisgICAgPGNvbW1hbmQ+XGQ8L2NvbW1hbmQ+IGNvbW1hbmQgd2lsbCByZXBvcnQgc3VjaCBpbmRl eGVzIGFzIDxsaXRlcmFsPklOVkFMSUQ8L2xpdGVyYWw+OgogCiA8cHJvZ3JhbWxpc3Rpbmc+CiBw b3N0Z3Jlcz0jIFxkIHRhYgpAQCAtNjY0LDExICs2NjUsMTIgQEAgcG9zdGdyZXM9IyBcZCB0YWIK ICBjb2wgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfAogSW5kZXhlczoKICAg ICAiaWR4IiBidHJlZSAoY29sKSBJTlZBTElECisgICAgImlkeF9jY2F1eCIgc3RpciAoY29sKSBJ TlZBTElECiA8L3Byb2dyYW1saXN0aW5nPgogCiAgICAgVGhlIHJlY29tbWVuZGVkIHJlY292ZXJ5 Ci0gICAgbWV0aG9kIGluIHN1Y2ggY2FzZXMgaXMgdG8gZHJvcCB0aGUgaW5kZXggYW5kIHRyeSBh Z2FpbiB0byBwZXJmb3JtCi0gICAgPGNvbW1hbmQ+Q1JFQVRFIElOREVYIENPTkNVUlJFTlRMWTwv Y29tbWFuZD4uICAoQW5vdGhlciBwb3NzaWJpbGl0eSBpcworICAgIG1ldGhvZCBpbiBzdWNoIGNh c2VzIGlzIHRvIGRyb3AgdGhlc2UgaW5kZXhlcyBhbmQgdHJ5IGFnYWluIHRvIHBlcmZvcm0KKyAg ICA8Y29tbWFuZD5DUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZPC9jb21tYW5kPi4gKEFub3RoZXIg cG9zc2liaWxpdHkgaXMKICAgICB0byByZWJ1aWxkIHRoZSBpbmRleCB3aXRoIDxjb21tYW5kPlJF SU5ERVggSU5ERVggQ09OQ1VSUkVOVExZPC9jb21tYW5kPikuCiAgICA8L3BhcmE+CiAKZGlmZiAt LWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcmVpbmRleC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9y ZWluZGV4LnNnbWwKaW5kZXggMTg1Y2Q3NWNhMzAuLjU2YzlhMGZlMWYzIDEwMDY0NAotLS0gYS9k b2Mvc3JjL3NnbWwvcmVmL3JlaW5kZXguc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3JlaW5k ZXguc2dtbApAQCAtMzY4LDkgKzM2OCw4IEBAIFJFSU5ERVggWyAoIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5vcHRpb248L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkgXSB7IERBCiAgICAg PHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBzdXBwb3J0cyByZWJ1aWxkaW5n IGluZGV4ZXMgd2l0aCBtaW5pbXVtIGxvY2tpbmcKICAgICBvZiB3cml0ZXMuICBUaGlzIG1ldGhv ZCBpcyBpbnZva2VkIGJ5IHNwZWNpZnlpbmcgdGhlCiAgICAgPGxpdGVyYWw+Q09OQ1VSUkVOVExZ PC9saXRlcmFsPiBvcHRpb24gb2YgPGNvbW1hbmQ+UkVJTkRFWDwvY29tbWFuZD4uIFdoZW4gdGhp cyBvcHRpb24KLSAgICBpcyB1c2VkLCA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5h bWU+IG11c3QgcGVyZm9ybSB0d28gc2NhbnMgb2YgdGhlIHRhYmxlCi0gICAgZm9yIGVhY2ggaW5k ZXggdGhhdCBuZWVkcyB0byBiZSByZWJ1aWx0IGFuZCB3YWl0IGZvciB0ZXJtaW5hdGlvbiBvZgot ICAgIGFsbCBleGlzdGluZyB0cmFuc2FjdGlvbnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSB1c2Ug dGhlIGluZGV4LgorICAgIGlzIHVzZWQsIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0 bmFtZT4gbXVzdCBwZXJmb3JtIHNldmVyYWwgc3RlcHMgdG8gZW5zdXJlIGRhdGEKKyAgICBjb25z aXN0ZW5jeSB3aGlsZSBhbGxvd2luZyBub3JtYWwgb3BlcmF0aW9ucyB0byBjb250aW51ZS4KICAg ICBUaGlzIG1ldGhvZCByZXF1aXJlcyBtb3JlIHRvdGFsIHdvcmsgdGhhbiBhIHN0YW5kYXJkIGlu ZGV4CiAgICAgcmVidWlsZCBhbmQgdGFrZXMgc2lnbmlmaWNhbnRseSBsb25nZXIgdG8gY29tcGxl dGUgYXMgaXQgbmVlZHMgdG8gd2FpdAogICAgIGZvciB1bmZpbmlzaGVkIHRyYW5zYWN0aW9ucyB0 aGF0IG1pZ2h0IG1vZGlmeSB0aGUgaW5kZXguIEhvd2V2ZXIsIHNpbmNlCkBAIC0zODgsNyArMzg3 LDcgQEAgUkVJTkRFWCBbICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9wdGlvbjwv cmVwbGFjZWFibGU+IFssIC4uLl0gKSBdIHsgREEKICAgICA8b3JkZXJlZGxpc3Q+CiAgICAgIDxs aXN0aXRlbT4KICAgICAgIDxwYXJhPgotICAgICAgIEEgbmV3IHRyYW5zaWVudCBpbmRleCBkZWZp bml0aW9uIGlzIGFkZGVkIHRvIHRoZSBjYXRhbG9nCisgICAgICAgQSBuZXcgdHJhbnNpZW50IGlu ZGV4IGRlZmluaXRpb24gYW5kIGFuIGF1eGlsaWFyeSBpbmRleCBhcmUgYWRkZWQgdG8gdGhlIGNh dGFsb2cKICAgICAgICA8bGl0ZXJhbD5wZ19pbmRleDwvbGl0ZXJhbD4uICBUaGlzIGRlZmluaXRp b24gd2lsbCBiZSB1c2VkIHRvIHJlcGxhY2UKICAgICAgICB0aGUgb2xkIGluZGV4LiAgQSA8bGl0 ZXJhbD5TSEFSRSBVUERBVEUgRVhDTFVTSVZFPC9saXRlcmFsPiBsb2NrIGF0CiAgICAgICAgc2Vz c2lvbiBsZXZlbCBpcyB0YWtlbiBvbiB0aGUgaW5kZXhlcyBiZWluZyByZWluZGV4ZWQgYXMgd2Vs bCBhcyB0aGVpcgpAQCAtMzk4LDcgKzM5NywxNSBAQCBSRUlOREVYIFsgKCA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+b3B0aW9uPC9yZXBsYWNlYWJsZT4gWywgLi4uXSApIF0geyBEQQog CiAgICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJhPgotICAgICAgIEEgZmlyc3QgcGFzcyB0byBi dWlsZCB0aGUgaW5kZXggaXMgZG9uZSBmb3IgZWFjaCBuZXcgaW5kZXguICBPbmNlIHRoZQorICAg ICAgIFRoZSBhdXhpbGlhcnkgaW5kZXggaXMgbWFya2VkIGFzICJyZWFkeSBmb3IgaW5zZXJ0cyIs IG1ha2luZworICAgICAgIGl0IHZpc2libGUgdG8gb3RoZXIgc2Vzc2lvbnMuIFRoaXMgaW5kZXgg ZWZmaWNpZW50bHkgdHJhY2tzIGFsbCBuZXcKKyAgICAgICB0dXBsZXMgZHVyaW5nIHRoZSByZWlu ZGV4IHByb2Nlc3MuCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgPGxp c3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgVGhlIG5ldyBtYWluIGluZGV4IGlzIGJ1aWx0 IGJ5IHNjYW5uaW5nIHRoZSB0YWJsZS4gIE9uY2UgdGhlCiAgICAgICAgaW5kZXggaXMgYnVpbHQs IGl0cyBmbGFnIDxsaXRlcmFsPnBnX2luZGV4LmluZGlzcmVhZHk8L2xpdGVyYWw+IGlzCiAgICAg ICAgc3dpdGNoZWQgdG8gPHF1b3RlPnRydWU8L3F1b3RlPiB0byBtYWtlIGl0IHJlYWR5IGZvciBp bnNlcnRzLCBtYWtpbmcgaXQKICAgICAgICB2aXNpYmxlIHRvIG90aGVyIHNlc3Npb25zIG9uY2Ug dGhlIHRyYW5zYWN0aW9uIHRoYXQgcGVyZm9ybWVkIHRoZSBidWlsZApAQCAtNDA5LDkgKzQxNiw5 IEBAIFJFSU5ERVggWyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcHRpb248L3Jl cGxhY2VhYmxlPiBbLCAuLi5dICkgXSB7IERBCiAKICAgICAgPGxpc3RpdGVtPgogICAgICAgPHBh cmE+Ci0gICAgICAgVGhlbiBhIHNlY29uZCBwYXNzIGlzIHBlcmZvcm1lZCB0byBhZGQgdHVwbGVz IHRoYXQgd2VyZSBhZGRlZCB3aGlsZSB0aGUKLSAgICAgICBmaXJzdCBwYXNzIHdhcyBydW5uaW5n LiAgVGhpcyBzdGVwIGlzIGFsc28gZG9uZSBpbiBhIHNlcGFyYXRlCi0gICAgICAgdHJhbnNhY3Rp b24gZm9yIGVhY2ggaW5kZXguCisgICAgICAgQSB2YWxpZGF0aW9uIHBoYXNlIG1lcmdlcyBhbnkg bWlzc2luZyBlbnRyaWVzIGZyb20gdGhlIGF1eGlsaWFyeSBpbmRleAorICAgICAgIGludG8gdGhl IG1haW4gaW5kZXgsIGVuc3VyaW5nIGFsbCBjb25jdXJyZW50IGNoYW5nZXMgYXJlIGNhcHR1cmVk LgorICAgICAgIFRoaXMgc3RlcCBpcyBhbHNvIGRvbmUgaW4gYSBzZXBhcmF0ZSB0cmFuc2FjdGlv biBmb3IgZWFjaCBpbmRleC4KICAgICAgIDwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KIApAQCAt NDI4LDcgKzQzNSw3IEBAIFJFSU5ERVggWyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVy Ij5vcHRpb248L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkgXSB7IERBCiAKICAgICAgPGxpc3RpdGVt PgogICAgICAgPHBhcmE+Ci0gICAgICAgVGhlIG9sZCBpbmRleGVzIGhhdmUgPGxpdGVyYWw+cGdf aW5kZXguaW5kaXNyZWFkeTwvbGl0ZXJhbD4gc3dpdGNoZWQgdG8KKyAgICAgICBUaGUgb2xkIGFu ZCBhdXhpbGlhcnkgaW5kZXhlcyBoYXZlIDxsaXRlcmFsPnBnX2luZGV4LmluZGlzcmVhZHk8L2xp dGVyYWw+IHN3aXRjaGVkIHRvCiAgICAgICAgPHF1b3RlPmZhbHNlPC9xdW90ZT4gdG8gcHJldmVu dCBhbnkgbmV3IHR1cGxlIGluc2VydGlvbnMsIGFmdGVyIHdhaXRpbmcKICAgICAgICBmb3IgcnVu bmluZyBxdWVyaWVzIHRoYXQgbWlnaHQgcmVmZXJlbmNlIHRoZSBvbGQgaW5kZXggdG8gY29tcGxl dGUuCiAgICAgICA8L3BhcmE+CkBAIC00MzYsNyArNDQzLDcgQEAgUkVJTkRFWCBbICggPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9wdGlvbjwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSBd IHsgREEKIAogICAgICA8bGlzdGl0ZW0+CiAgICAgICA8cGFyYT4KLSAgICAgICBUaGUgb2xkIGlu ZGV4ZXMgYXJlIGRyb3BwZWQuICBUaGUgPGxpdGVyYWw+U0hBUkUgVVBEQVRFCisgICAgICAgVGhl IG9sZCBhbmQgYXV4aWxpYXJ5IGluZGV4ZXMgYXJlIGRyb3BwZWQuICBUaGUgPGxpdGVyYWw+U0hB UkUgVVBEQVRFCiAgICAgICAgRVhDTFVTSVZFPC9saXRlcmFsPiBzZXNzaW9uIGxvY2tzIGZvciB0 aGUgaW5kZXhlcyBhbmQgdGhlIHRhYmxlIGFyZQogICAgICAgIHJlbGVhc2VkLgogICAgICAgPC9w YXJhPgpAQCAtNDQ3LDExICs0NTQsMTEgQEAgUkVJTkRFWCBbICggPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPm9wdGlvbjwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSBdIHsgREEKICAgIDxw YXJhPgogICAgIElmIGEgcHJvYmxlbSBhcmlzZXMgd2hpbGUgcmVidWlsZGluZyB0aGUgaW5kZXhl cywgc3VjaCBhcyBhCiAgICAgdW5pcXVlbmVzcyB2aW9sYXRpb24gaW4gYSB1bmlxdWUgaW5kZXgs IHRoZSA8Y29tbWFuZD5SRUlOREVYPC9jb21tYW5kPgotICAgIGNvbW1hbmQgd2lsbCBmYWlsIGJ1 dCBsZWF2ZSBiZWhpbmQgYW4gPHF1b3RlPmludmFsaWQ8L3F1b3RlPiBuZXcgaW5kZXggaW4gYWRk aXRpb24gdG8KLSAgICB0aGUgcHJlLWV4aXN0aW5nIG9uZS4gVGhpcyBpbmRleCB3aWxsIGJlIGln bm9yZWQgZm9yIHF1ZXJ5aW5nIHB1cnBvc2VzCi0gICAgYmVjYXVzZSBpdCBtaWdodCBiZSBpbmNv bXBsZXRlOyBob3dldmVyIGl0IHdpbGwgc3RpbGwgY29uc3VtZSB1cGRhdGUKKyAgICBjb21tYW5k IHdpbGwgZmFpbCBidXQgbGVhdmUgYmVoaW5kIGFuIDxxdW90ZT5pbnZhbGlkPC9xdW90ZT4gbmV3 IGluZGV4IGFuZCBhbiA8cXVvdGU+aW52YWxpZDwvcXVvdGU+IGF1eGlsaWFyeSBpbmRleCBpbiBh ZGRpdGlvbiB0bworICAgIHRoZSBwcmUtZXhpc3Rpbmcgb25lLiBUaGVzZSBpbmRleGVzIHdpbGwg YmUgaWdub3JlZCBmb3IgcXVlcnlpbmcgcHVycG9zZXMKKyAgICBiZWNhdXNlIHRoZXkgbWlnaHQg YmUgaW5jb21wbGV0ZTsgaG93ZXZlciB0aGV5IHdpbGwgc3RpbGwgY29uc3VtZSB1cGRhdGUKICAg ICBvdmVyaGVhZC4gVGhlIDxhcHBsaWNhdGlvbj5wc3FsPC9hcHBsaWNhdGlvbj4gPGNvbW1hbmQ+ XGQ8L2NvbW1hbmQ+IGNvbW1hbmQgd2lsbCByZXBvcnQKLSAgICBzdWNoIGFuIGluZGV4IGFzIDxs aXRlcmFsPklOVkFMSUQ8L2xpdGVyYWw+OgorICAgIHN1Y2ggaW5kZXhlcyBhcyA8bGl0ZXJhbD5J TlZBTElEPC9saXRlcmFsPjoKIAogPHByb2dyYW1saXN0aW5nPgogcG9zdGdyZXM9IyBcZCB0YWIK QEAgLTQ2MiwxMiArNDY5LDEzIEBAIHBvc3RncmVzPSMgXGQgdGFiCiBJbmRleGVzOgogICAgICJp ZHgiIGJ0cmVlIChjb2wpCiAgICAgImlkeF9jY25ldyIgYnRyZWUgKGNvbCkgSU5WQUxJRAorICAg ICJpZHhfY2NhdXgiIHN0aXIgKGNvbCkgSU5WQUxJRAogPC9wcm9ncmFtbGlzdGluZz4KIAogICAg IElmIHRoZSBpbmRleCBtYXJrZWQgPGxpdGVyYWw+SU5WQUxJRDwvbGl0ZXJhbD4gaXMgc3VmZml4 ZWQKLSAgICA8bGl0ZXJhbD5fY2NuZXc8L2xpdGVyYWw+LCB0aGVuIGl0IGNvcnJlc3BvbmRzIHRv IHRoZSB0cmFuc2llbnQKKyAgICA8bGl0ZXJhbD5fY2NuZXc8L2xpdGVyYWw+IG9yIDxsaXRlcmFs Pl9jY2F1eDwvbGl0ZXJhbD4sIHRoZW4gaXQgY29ycmVzcG9uZHMgdG8gdGhlIHRyYW5zaWVudCBv ciBhdXhpbGlhcnkKICAgICBpbmRleCBjcmVhdGVkIGR1cmluZyB0aGUgY29uY3VycmVudCBvcGVy YXRpb24sIGFuZCB0aGUgcmVjb21tZW5kZWQKLSAgICByZWNvdmVyeSBtZXRob2QgaXMgdG8gZHJv cCBpdCB1c2luZyA8bGl0ZXJhbD5EUk9QIElOREVYPC9saXRlcmFsPiwKKyAgICByZWNvdmVyeSBt ZXRob2QgaXMgdG8gZHJvcCB0aGVzZSBpbmRleGVzIHVzaW5nIDxsaXRlcmFsPkRST1AgSU5ERVg8 L2xpdGVyYWw+LAogICAgIHRoZW4gYXR0ZW1wdCA8Y29tbWFuZD5SRUlOREVYIENPTkNVUlJFTlRM WTwvY29tbWFuZD4gYWdhaW4uCiAgICAgSWYgdGhlIGludmFsaWQgaW5kZXggaXMgaW5zdGVhZCBz dWZmaXhlZCA8bGl0ZXJhbD5fY2NvbGQ8L2xpdGVyYWw+LAogICAgIGl0IGNvcnJlc3BvbmRzIHRv IHRoZSBvcmlnaW5hbCBpbmRleCB3aGljaCBjb3VsZCBub3QgYmUgZHJvcHBlZDsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL1JFQURNRS5IT1QgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9SRUFETUUuSE9UCmluZGV4IDc0ZTQwN2YzNzVhLi5iMWM3OTc1MTdlZSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvUkVBRE1FLkhPVAorKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9SRUFETUUuSE9UCkBAIC0zNzUsNiArMzc1LDExIEBAIGNvbnN0cmFpbnQg b24gd2hpY2ggdXBkYXRlcyBjYW4gYmUgSE9ULiAgT3RoZXIgdHJhbnNhY3Rpb25zIG11c3QgaW5j bHVkZQogc3VjaCBhbiBpbmRleCB3aGVuIGRldGVybWluaW5nIEhPVC1zYWZldHkgb2YgdXBkYXRl cywgZXZlbiB0aG91Z2ggdGhleQogbXVzdCBpZ25vcmUgaXQgZm9yIGJvdGggaW5zZXJ0aW9uIGFu ZCBzZWFyY2hpbmcgcHVycG9zZXMuCiAKK0Fsc28sIHNwZWNpYWwgYXV4aWxpYXJ5IGluZGV4IGlz IGNyZWF0ZWQgdGhlIHNhbWUgd2F5LiBJdCBpcyBtYXJrZWQgYXMKKyJyZWFkeSBmb3IgaW5zZXJ0 cyIgd2l0aG91dCBhbnkgYWN0dWFsIHRhYmxlIHNjYW4uIEl0cyBwdXJwb3NlIGlzIHRvIGNvbGxl Y3QKK25ldyB0dXBsZXMgaW5zZXJ0ZWQgaW50byB0YWJsZSB3aGlsZSBvdXIgdGFyZ2V0IGluZGV4 IGlzIHN0aWxsICJub3QgcmVhZHkKK2ZvciBpbnNlcnRzIi4KKwogV2UgbXVzdCBkbyB0aGlzIHRv IGF2b2lkIG1ha2luZyBpbmNvcnJlY3QgaW5kZXggZW50cmllcy4gIEZvciBleGFtcGxlLAogc3Vw cG9zZSB3ZSBhcmUgYnVpbGRpbmcgYW4gaW5kZXggb24gY29sdW1uIFggYW5kIHdlIG1ha2UgYW4g aW5kZXggZW50cnkgZm9yCiBhIG5vbi1IT1QgdHVwbGUgd2l0aCBYPTEuICBUaGVuIHNvbWUgb3Ro ZXIgYmFja2VuZCwgdW5hd2FyZSB0aGF0IFggaXMgYW4KQEAgLTM5NCwxMCArMzk5LDEwIEBAIGVu dHJ5IGF0IHRoZSByb290IG9mIHRoZSBIT1QtdXBkYXRlIGNoYWluIGJ1dCB3ZSB1c2UgdGhlIGtl eSB2YWx1ZSBmcm9tIHRoZQogbGl2ZSB0dXBsZS4KIAogV2UgbWFyayB0aGUgaW5kZXggb3BlbiBm b3IgaW5zZXJ0cyAoYnV0IHN0aWxsIG5vdCByZWFkeSBmb3IgcmVhZHMpIHRoZW4KLXdlIGFnYWlu IHdhaXQgZm9yIHRyYW5zYWN0aW9ucyB3aGljaCBoYXZlIHRoZSB0YWJsZSBvcGVuLiAgVGhlbiB3 ZSB0YWtlCi1hIHNlY29uZCByZWZlcmVuY2Ugc25hcHNob3QgYW5kIHZhbGlkYXRlIHRoZSBpbmRl eC4gIFRoaXMgc2VhcmNoZXMgZm9yCi10dXBsZXMgbWlzc2luZyBmcm9tIHRoZSBpbmRleCwgYW5k IGluc2VydHMgYW55IG1pc3Npbmcgb25lcy4gIEFnYWluLAotdGhlIGluZGV4IGVudHJpZXMgaGF2 ZSB0byBoYXZlIFRJRHMgZXF1YWwgdG8gSE9ULWNoYWluIHJvb3QgVElEcywgYnV0Cit3ZSBhZ2Fp biB3YWl0IGZvciB0cmFuc2FjdGlvbnMgd2hpY2ggaGF2ZSB0aGUgdGFibGUgb3Blbi4gIFRoZW4g dmFsaWRhdGUKK3RoZSBpbmRleC4gIFRoaXMgc2VhcmNoZXMgZm9yIHR1cGxlcyBtaXNzaW5nIGZy b20gdGhlIGluZGV4IGluIGF1eGlsaWFyeQoraW5kZXgsIGFuZCBpbnNlcnRzIGFueSBtaXNzaW5n IG9uZXMgaWYgdGhleSBhcmUgdmlzaWJsZSB0byByZWZlcmVuY2Ugc25hcHNob3QuCitBZ2Fpbiwg dGhlIGluZGV4IGVudHJpZXMgaGF2ZSB0byBoYXZlIFRJRHMgZXF1YWwgdG8gSE9ULWNoYWluIHJv b3QgVElEcywgYnV0CiB0aGUgdmFsdWUgdG8gYmUgaW5zZXJ0ZWQgaXMgdGhlIG9uZSBmcm9tIHRo ZSBsaXZlIHR1cGxlLgogCiBUaGVuIHdlIHdhaXQgdW50aWwgZXZlcnkgdHJhbnNhY3Rpb24gdGhh dCBjb3VsZCBoYXZlIGEgc25hcHNob3Qgb2xkZXIgdGhhbgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggMjBkM2I0NmUwNjIuLjhjYmM0ODU1MDc4IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTQyLDExICs0MiwxNiBAQAog I2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG9jay5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIK ICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2lu Y2x1ZGUgInV0aWxzL3R1cGxlc29ydC5oIgorI2luY2x1ZGUgInV0aWxzL3R1cGxlc3RvcmUuaCIK KworLyogR1VDOiBwZXJjZW50YWdlIG9mIG1haW50ZW5hbmNlX3dvcmtfbWVtIGZvciBDSUMgdmFs aWRhdGlvbiB0dXBsZXN0b3JlICovCitpbnQJCQlkZWJ1Z19jaWNfdmFsaWRhdGVfc3RvcmVfbWVt X3BjdCA9IDEwOwogCiBzdGF0aWMgdm9pZCByZWZvcm1fYW5kX3Jld3JpdGVfdHVwbGUoSGVhcFR1 cGxlIHR1cGxlLAogCQkJCQkJCQkJIFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hlYXAs CkBAIC0xNzE0LDI0MiArMTcxOSw0MjIgQEAgaGVhcGFtX2luZGV4X2J1aWxkX3JhbmdlX3NjYW4o UmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCXJldHVybiByZWx0dXBsZXM7CiB9CiAKKy8qCisgKiBD YWxjdWxhdGUgc2V0IGRpZmZlcmVuY2UgKHJlbGF0aXZlIGNvbXBsZW1lbnQpIG9mIG1haW4gYW5k IGF1eAorICogc2V0cy4KKyAqCisgKiBBbGwgcmVjb3JkcyB3aGljaCBhcmUgcHJlc2VudCBpbiBh dXhpbGlhcnkgdHVwbGVzb3J0IGJ1dCBub3QgaW4KKyAqIG1haW4gYXJlIGFkZGVkIHRvIHRoZSBz dG9yZS4KKyAqCisgKiBJbiBzZXQgdGhlb3J5IG5vdGF0aW9uIHN0b3JlID0gYXV4IC0gbWFpbiBv ciBzdG9yZSA9IGF1eCAvIG1haW4uCisgKgorICogcmV0dXJucyBudW1iZXIgb2YgaXRlbXMgYWRk ZWQgdG8gc3RvcmUKKyAqLworc3RhdGljIGludDY0CitoZWFwYW1faW5kZXhfdmFsaWRhdGVfdHVw bGVzb3J0X2RpZmZlcmVuY2UoVHVwbGVzb3J0c3RhdGUgKm1haW4sCisJCQkJCQkJCQkJICAgVHVw bGVzb3J0c3RhdGUgKmF1eCwKKwkJCQkJCQkJCQkgICBUdXBsZXN0b3Jlc3RhdGUgKnN0b3JlKQor eworCWludDY0CQludW0gPSAwOworCS8qIHN0YXRlIHZhcmlhYmxlcyBmb3IgdGhlIG1lcmdlICov CisJSXRlbVBvaW50ZXIJaW5kZXhjdXJzb3IgPSBOVUxMLAorCQkJCQlhdXhpbmRleGN1cnNvciA9 IE5VTEw7CisJSXRlbVBvaW50ZXJEYXRhIGRlY29kZWQsCisJCQkJCWF1eGRlY29kZWQ7CisJYm9v bAkJCXR1cGxlc29ydF9lbXB0eSA9IGZhbHNlLAorCQkJCQlhdXh0dXBsZXNvcnRfZW1wdHkgPSBm YWxzZTsKKworCS8qIEluaXRpYWxpemUgcG9pbnRlcnMuICovCisJSXRlbVBvaW50ZXJTZXRJbnZh bGlkKCZkZWNvZGVkKTsKKwlJdGVtUG9pbnRlclNldEludmFsaWQoJmF1eGRlY29kZWQpOworCisJ LyoKKwkgKiBNYWluIGxvb3A6IHdlIHN0ZXAgdGhyb3VnaCB0aGUgYXV4aWxpYXJ5IHNvcnQgKGF1 eFN0YXRlLT50dXBsZXNvcnQpLAorCSAqIHdoaWNoIGhvbGRzIFRJRHMgdGhhdCBtdXN0IGNvbXBh cmVkIHRvIHRob3NlIGZyb20gdGhlICJtYWluIiBzb3J0CisJICogKHN0YXRlLT50dXBsZXNvcnQp LgorCSAqLworCXdoaWxlICghYXV4dHVwbGVzb3J0X2VtcHR5KQorCXsKKwkJRGF0dW0JCXRzX3Zh bDsKKwkJYm9vbAkJdHNfaXNudWxsOworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCS8q CisJCSAqIEF0dGVtcHQgdG8gZmV0Y2ggdGhlIG5leHQgVElEIGZyb20gdGhlIGF1eGlsaWFyeSBz b3J0LiBJZiBpdCdzCisJCSAqIGVtcHR5LCB3ZSBzZXQgYXV4aW5kZXhjdXJzb3IgdG8gTlVMTC4K KwkJICovCisJCWF1eHR1cGxlc29ydF9lbXB0eSA9ICF0dXBsZXNvcnRfZ2V0ZGF0dW0oYXV4LCB0 cnVlLAorCQkJCQkJCQkJCQkJIGZhbHNlLCAmdHNfdmFsLCAmdHNfaXNudWxsLAorCQkJCQkJCQkJ CQkJIE5VTEwpOworCQlBc3NlcnQoYXV4dHVwbGVzb3J0X2VtcHR5IHx8ICF0c19pc251bGwpOwor CQlpZiAoIWF1eHR1cGxlc29ydF9lbXB0eSkKKwkJeworCQkJaXRlbXB0cl9kZWNvZGUoJmF1eGRl Y29kZWQsIERhdHVtR2V0SW50NjQodHNfdmFsKSk7CisJCQlhdXhpbmRleGN1cnNvciA9ICZhdXhk ZWNvZGVkOworCQl9CisJCWVsc2UKKwkJeworCQkJYXV4aW5kZXhjdXJzb3IgPSBOVUxMOworCQl9 CisKKwkJLyoKKwkJICogSWYgdGhlIGF1eGlsaWFyeSBzb3J0IGlzIG5vdCB5ZXQgZW1wdHksIHdl IG5vdyB0cnkgdG8gc3luY2hyb25pemUKKwkJICogdGhlICJtYWluIiBzb3J0IGN1cnNvciAoaW5k ZXhjdXJzb3IpIHdpdGggYXV4aW5kZXhjdXJzb3IuIFdlIGFkdmFuY2UKKwkJICogdGhlIG1haW4g c29ydCBjdXJzb3IgdW50aWwgd2UndmUgcmVhY2hlZCBvciBwYXNzZWQgdGhlIGF1eGlsaWFyeSBU SUQuCisJCSAqLworCQlpZiAoIWF1eHR1cGxlc29ydF9lbXB0eSkKKwkJeworCQkJLyoKKwkJCSAq IE1vdmUgdGhlIG1haW4gc29ydCBmb3J3YXJkIHdoaWxlOgorCQkJICogICAoMSkgSXQncyBub3Qg ZXhoYXVzdGVkICh0dXBsZXNvcnRfZW1wdHkgPT0gZmFsc2UpLCBhbmQKKwkJCSAqICAgKDIpIEVp dGhlciBpbmRleGN1cnNvciBpcyBOVUxMIChmaXJzdCBpdGVyYXRpb24pIG9yCisJCQkgKiAgICAg ICBpbmRleGN1cnNvciA8IGF1eGluZGV4Y3Vyc29yIGluIFRJRCBvcmRlci4KKwkJCSAqLworCQkJ d2hpbGUgKCF0dXBsZXNvcnRfZW1wdHkgJiYgKGluZGV4Y3Vyc29yID09IE5VTEwgfHwgLyogbnVs bCBvbiBmaXJzdCB0aW1lIGhlcmUgKi8KKwkJCQkJCUl0ZW1Qb2ludGVyQ29tcGFyZShpbmRleGN1 cnNvciwgYXV4aW5kZXhjdXJzb3IpIDwgMCkpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBHZXQgdGhl IG5leHQgVElEIGZyb20gdGhlIG1haW4gc29ydC4gSWYgaXQncyBlbXB0eSwKKwkJCQkgKiB3ZSBz ZXQgaW5kZXhjdXJzb3IgdG8gTlVMTC4KKwkJCQkgKi8KKwkJCQl0dXBsZXNvcnRfZW1wdHkgPSAh dHVwbGVzb3J0X2dldGRhdHVtKG1haW4sIHRydWUsCisJCQkJCQkJCQkJCQkJICBmYWxzZSwgJnRz X3ZhbCwgJnRzX2lzbnVsbCwKKwkJCQkJCQkJCQkJCQkgIE5VTEwpOworCQkJCUFzc2VydCh0dXBs ZXNvcnRfZW1wdHkgfHwgIXRzX2lzbnVsbCk7CisKKwkJCQlpZiAoIXR1cGxlc29ydF9lbXB0eSkK KwkJCQl7CisJCQkJCWl0ZW1wdHJfZGVjb2RlKCZkZWNvZGVkLCBEYXR1bUdldEludDY0KHRzX3Zh bCkpOworCQkJCQlpbmRleGN1cnNvciA9ICZkZWNvZGVkOworCQkJCX0KKwkJCQllbHNlCisJCQkJ eworCQkJCQlpbmRleGN1cnNvciA9IE5VTEw7CisJCQkJfQorCisJCQkJQ0hFQ0tfRk9SX0lOVEVS UlVQVFMoKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIE5vdywgaWYgZWl0aGVyOgorCQkJICogIC0g dGhlIG1haW4gc29ydCBpcyBlbXB0eSwgb3IKKwkJCSAqICAtIGluZGV4Y3Vyc29yID4gYXV4aW5k ZXhjdXJzb3IsCisJCQkgKgorCQkJICogdGhlbiBhdXhpbmRleGN1cnNvciBpZGVudGlmaWVzIGEg VElEIHRoYXQgZG9lc24ndCBhcHBlYXIgaW4KKwkJCSAqIHRoZSBtYWluIHNvcnQuIFdlIGxpa2Vs eSBuZWVkIHRvIGluc2VydCBpdAorCQkJICogaW50byB0aGUgdGFyZ2V0IGluZGV4IGlmIGl04oCZ cyB2aXNpYmxlIGluIHRoZSBoZWFwLgorCQkJICovCisJCQlpZiAodHVwbGVzb3J0X2VtcHR5IHx8 IEl0ZW1Qb2ludGVyQ29tcGFyZShpbmRleGN1cnNvciwgYXV4aW5kZXhjdXJzb3IpID4gMCkKKwkJ CXsKKwkJCQl0dXBsZXN0b3JlX3B1dGRhdHVtKHN0b3JlLCBJbnQ2NEdldERhdHVtKGl0ZW1wdHJf ZW5jb2RlKGF1eGluZGV4Y3Vyc29yKSkpOworCQkJCW51bSsrOworCQkJfQorCQl9CisJfQorCisJ cmV0dXJuIG51bTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgVmFsaWRhdGVJbmRleFNjYW5TdGF0ZQor eworCVR1cGxlc3RvcmVzdGF0ZQkJKnN0b3JlOworCUJsb2NrTnVtYmVyCQkJcHJldl9ibG9ja19u dW1iZXI7CisJT2Zmc2V0TnVtYmVyCQlwcmV2X29mZnNldF9udW1iZXI7Cit9IFZhbGlkYXRlSW5k ZXhTY2FuU3RhdGU7CisKKy8qCisgKiBUaGlzIGlzIFJlYWRTdHJlYW1CbG9ja051bWJlckNCIGlt cGxlbWVudGF0aW9uIHdoaWNoIHdvcmtzIGFzIGZvbGxvd3M6CisgKgorICogMSkgSXQgaXRlcmF0 ZXMgb3ZlciBhIHNvcnRlZCB0dXBsZXN0b3JlLCB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgYW4gZW5j b2RlZAorICogICAgSXRlbVBvaW50ZXIKKyAqCisgKiAyKSBJdCByZXR1cm5zIHRoZSBjdXJyZW50 IEJsb2NrTnVtYmVyIGFuZCBjb2xsZWN0cyBhbGwgT2Zmc2V0TnVtYmVycworICogICAgZm9yIHRo YXQgYmxvY2sgaW4gcGVyX2J1ZmZlcl9kYXRhLgorICoKKyAqIDMpIE9uY2UgdGhlIGNvZGUgZW5j b3VudGVycyBhIG5ldyBCbG9ja051bWJlciwgaXQgc3RvcHMgcmVhZGluZyBtb3JlCisgKiAgICBv ZmZzZXRzIGFuZCBzYXZlcyB0aGUgT2Zmc2V0TnVtYmVyIG9mIHRoZSBuZXcgYmxvY2sgZm9yIHRo ZSBuZXh0IGNhbGwuCisgKgorICogNCkgVGhlIGxpc3Qgb2Ygb2Zmc2V0cyBmb3IgYSBibG9jayBp cyBhbHdheXMgdGVybWluYXRlZCB3aXRoIEludmFsaWRPZmZzZXROdW1iZXIuCisgKgorICogVGhp cyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSByZXBlYXRlZGx5IGNhbGxlZCwgZWFjaCB0aW1l IHJldHVybmluZworICogdGhlIG5leHQgYmxvY2sgYW5kIGl0cyBjb3JyZXNwb25kaW5nIHNldCBv ZiBvZmZzZXRzLgorICovCitzdGF0aWMgQmxvY2tOdW1iZXIKK2hlYXBhbV9pbmRleF92YWxpZGF0 ZV9zY2FuX3JlYWRfc3RyZWFtX25leHQoCisJCQkJCQkJCSAgUmVhZFN0cmVhbSAqc3RyZWFtLAor CQkJCQkJCQkgIHZvaWQgKnZvaWRfY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLAorCQkJCQkJCQkgIHZv aWQgKnZvaWRfcGVyX2J1ZmZlcl9kYXRhCisJCQkJCQkJCSAgKQoreworCWJvb2wgc2hvdWxkX2Zy ZWU7CisJRGF0dW0gZGF0dW07CisJQmxvY2tOdW1iZXIgcmVzdWx0ID0gSW52YWxpZEJsb2NrTnVt YmVyOworCWludCBpID0gMDsKKworCS8qCisJICogUmV0cmlldmUgdGhlIHNwZWNpYWxpemVkIGNh bGxiYWNrIHN0YXRlIGFuZCB0aGUgb3V0cHV0IGJ1ZmZlci4KKwkgKiBjYWxsYmFja19wcml2YXRl X2RhdGEga2VlcHMgdHJhY2sgb2YgdGhlIHByZXZpb3VzIGJsb2NrIGFuZCBvZmZzZXQKKwkgKiBm cm9tIGEgcHJpb3IgaW52b2NhdGlvbiwgaWYgYW55LgorCSAqLworCVZhbGlkYXRlSW5kZXhTY2Fu U3RhdGUgKmNhbGxiYWNrX3ByaXZhdGVfZGF0YSA9IHZvaWRfY2FsbGJhY2tfcHJpdmF0ZV9kYXRh OworCU9mZnNldE51bWJlciAqcGVyX2J1ZmZlcl9kYXRhID0gdm9pZF9wZXJfYnVmZmVyX2RhdGE7 CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIGEgImxlZnRvdmVyIiBvZmZzZXQgbnVtYmVyIGZyb20g dGhlIHByZXZpb3VzIGludm9jYXRpb24sCisJICogaXQgbWVhbnMgd2UgaGFkIHN3aXRjaGVkIHRv IGEgbmV3IGJsb2NrIGluIHRoZSBtaWRkbGUgb2YgdGhlIGxhc3QgY2FsbC4KKwkgKiBXZSBwbGFj ZSB0aGF0IGxlZnRvdmVyIG9mZnNldCBudW1iZXIgaW50byB0aGUgYnVmZmVyIGZpcnN0LgorCSAq LworCWlmIChjYWxsYmFja19wcml2YXRlX2RhdGEtPnByZXZfb2Zmc2V0X251bWJlciAhPSBJbnZh bGlkT2Zmc2V0TnVtYmVyKQorCXsKKwkJQXNzZXJ0KGNhbGxiYWNrX3ByaXZhdGVfZGF0YS0+cHJl dl9ibG9ja19udW1iZXIgIT0gSW52YWxpZEJsb2NrTnVtYmVyKTsKKwkJLyoKKwkJICogJ3Jlc3Vs dCcgaXMgdGhlIGJsb2NrIG51bWJlciB0byByZXR1cm4uIFdlIHNldCBpdCB0byB0aGUgYmxvY2sK KwkJICogZnJvbSB0aGUgcHJldmlvdXMgbGVmdG92ZXIgb2Zmc2V0LgorCQkgKi8KKwkJcmVzdWx0 ID0gY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5wcmV2X2Jsb2NrX251bWJlcjsKKwkJLyogUGxhY2Ug bGVmdG92ZXIgb2Zmc2V0IG51bWJlciBpbiB0aGUgb3V0cHV0IGJ1ZmZlci4gKi8KKwkJcGVyX2J1 ZmZlcl9kYXRhW2krK10gPSBjYWxsYmFja19wcml2YXRlX2RhdGEtPnByZXZfb2Zmc2V0X251bWJl cjsKKwkJLyoKKwkJICogQ2xlYXIgdGhlIGxlZnRvdmVyIG9mZnNldCBudW1iZXIgc28gaXQgd29u J3QgYmUgcmV1c2VkIHVubGVzcworCQkgKiB3ZSBlbmNvdW50ZXIgYW5vdGhlciBibG9jayBjaGFu Z2UuCisJCSAqLworCQljYWxsYmFja19wcml2YXRlX2RhdGEtPnByZXZfb2Zmc2V0X251bWJlciA9 IEludmFsaWRPZmZzZXROdW1iZXI7CisJfQorCisJLyoKKwkgKiBSZWFkIGZyb20gdGhlIHR1cGxl c3RvcmUgdW50aWwgd2UgZWl0aGVyIHJ1biBvdXQgb2YgdHVwbGVzIG9yIHdlCisJICogZW5jb3Vu dGVyIGEgYmxvY2sgY2hhbmdlLiBGb3IgZWFjaCB0dXBsZToKKwkgKgorCSAqICAgMSkgRGVjb2Rl IGl0cyBibG9jay9vZmZzZXQgZnJvbSB0aGUgRGF0dW0uCisJICogICAyKSBJZiBpdCdzIHRoZSBm aXJzdCB0aW1lIGluIHRoaXMgY2FsbCAocHJldl9ibG9ja19udW1iZXIgPT0gSW52YWxpZEJsb2Nr TnVtYmVyKSwKKwkgKiAgICAgIGluaXRpYWxpemUgcHJldl9ibG9ja19udW1iZXIuCisJICogICAz KSBJZiB0aGUgYmxvY2sgbnVtYmVyIG1hdGNoZXMgdGhlIGN1cnJlbnQgYmxvY2ssIGNvbGxlY3Qg dGhlIG9mZnNldC4KKwkgKiAgIDQpIElmIHRoZSBibG9jayBudW1iZXIgZGlmZmVycywgc2F2ZSB0 aGF0IG9mZnNldCBhcyBsZWZ0b3ZlciBhbmQgYnJlYWsKKwkgKiAgICAgIHNvIHRoYXQgdGhlIG5l eHQgY2FsbCBjYW4gaGFuZGxlIHRoZSBuZXcgYmxvY2suCisJICovCisJd2hpbGUgKHR1cGxlc3Rv cmVfZ2V0ZGF0dW0oY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5zdG9yZSwgdHJ1ZSwgJnNob3VsZF9m cmVlLCAmZGF0dW0pKQorCXsKKwkJQmxvY2tOdW1iZXIgbmV4dF9ibG9ja19udW1iZXI7CisJCUl0 ZW1Qb2ludGVyRGF0YSBuZXh0X2RhdGE7CisKKwkJLyogRGVjb2RlIHRoZSBkYXR1bSBpbnRvIGFu IEl0ZW1Qb2ludGVyIChibG9jayArIG9mZnNldCkuICovCisJCWl0ZW1wdHJfZGVjb2RlKCZuZXh0 X2RhdGEsIERhdHVtR2V0SW50NjQoZGF0dW0pKTsKKwkJbmV4dF9ibG9ja19udW1iZXIgPSBJdGVt UG9pbnRlckdldEJsb2NrTnVtYmVyKCZuZXh0X2RhdGEpOworCisJCS8qCisJCSAqIElmIHdlIGhh dmVuJ3Qgc2V0IGEgYmxvY2sgbnVtYmVyIHlldCB0aGlzIHJvdW5kLCBpbml0aWFsaXplIGl0CisJ CSAqIHVzaW5nIHRoZSBmaXJzdCB0dXBsZSB3ZSByZWFkLgorCQkgKi8KKwkJaWYgKGNhbGxiYWNr X3ByaXZhdGVfZGF0YS0+cHJldl9ibG9ja19udW1iZXIgPT0gSW52YWxpZEJsb2NrTnVtYmVyKQor CQkJY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5wcmV2X2Jsb2NrX251bWJlciA9IG5leHRfYmxvY2tf bnVtYmVyOworCisJCS8qCisJCSAqIEFsd2F5cyBzZXQgdGhlIHJlc3VsdCB0byBiZSB0aGUgImN1 cnJlbnQiIGJsb2NrIG51bWJlcgorCQkgKiB3ZSBhcmUgZmlsbGluZyBvZmZzZXRzIGZvci4KKwkJ ICovCisJCXJlc3VsdCA9IGNhbGxiYWNrX3ByaXZhdGVfZGF0YS0+cHJldl9ibG9ja19udW1iZXI7 CisKKwkJLyoKKwkJICogSWYgdGhpcyB0dXBsZSBpcyBmcm9tIHRoZSBzYW1lIGJsb2NrLCBqdXN0 IHN0b3JlIGl0cyBvZmZzZXQKKwkJICogaW4gb3VyIHBlcl9idWZmZXJfZGF0YSBhcnJheS4KKwkJ ICovCisJCWlmIChuZXh0X2Jsb2NrX251bWJlciA9PSBjYWxsYmFja19wcml2YXRlX2RhdGEtPnBy ZXZfYmxvY2tfbnVtYmVyKQorCQl7CisJCQlwZXJfYnVmZmVyX2RhdGFbaSsrXSA9IEl0ZW1Qb2lu dGVyR2V0T2Zmc2V0TnVtYmVyKCZuZXh0X2RhdGEpOworCisJCQkvKiBGcmVlIHRoZSBkYXR1bSBp ZiBuZWVkZWQuICovCisJCQlpZiAoc2hvdWxkX2ZyZWUpCisJCQkJcGZyZWUoRGF0dW1HZXRQb2lu dGVyKGRhdHVtKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogSWYgdGhlIGJsb2Nr IGp1c3QgY2hhbmdlZCwgc3RvcmUgdGhlIG9mZnNldCBvZiB0aGUgbmV3IGJsb2NrCisJCQkgKiBh cyBsZWZ0b3ZlciBmb3IgdGhlIG5leHQgaW52b2NhdGlvbiBhbmQgYnJlYWsgb3V0LgorCQkJICov CisJCQljYWxsYmFja19wcml2YXRlX2RhdGEtPnByZXZfYmxvY2tfbnVtYmVyID0gbmV4dF9ibG9j a19udW1iZXI7CisJCQljYWxsYmFja19wcml2YXRlX2RhdGEtPnByZXZfb2Zmc2V0X251bWJlciA9 IEl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVyKCZuZXh0X2RhdGEpOworCisJCQkvKiBGcmVlIHRo ZSBkYXR1bSBpZiBuZWVkZWQuICovCisJCQlpZiAoc2hvdWxkX2ZyZWUpCisJCQkJcGZyZWUoRGF0 dW1HZXRQb2ludGVyKGRhdHVtKSk7CisKKwkJCS8qIEJyZWFrIHRvIGxldCB0aGUgbmV4dCBjYWxs IGhhbmRsZSB0aGUgbmV3IGJsb2NrLiAqLworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKgorCSAq IFRlcm1pbmF0ZSB0aGUgbGlzdCBvZiBvZmZzZXRzIGZvciB0aGlzIGJsb2NrIHdpdGggYW4gSW52 YWxpZE9mZnNldE51bWJlci4KKwkgKi8KKwlwZXJfYnVmZmVyX2RhdGFbaV0gPSBJbnZhbGlkT2Zm c2V0TnVtYmVyOworCXJldHVybiByZXN1bHQ7Cit9CisKIHN0YXRpYyB2b2lkCiBoZWFwYW1faW5k ZXhfdmFsaWRhdGVfc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJCQkgICBSZWxhdGlv biBpbmRleFJlbGF0aW9uLAogCQkJCQkJICAgSW5kZXhJbmZvICppbmRleEluZm8sCiAJCQkJCQkg ICBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCSAgIFZhbGlkYXRlSW5kZXhTdGF0ZSAqc3RhdGUp CisJCQkJCQkgICBWYWxpZGF0ZUluZGV4U3RhdGUgKnN0YXRlLAorCQkJCQkJICAgVmFsaWRhdGVJ bmRleFN0YXRlICphdXhTdGF0ZSkKIHsKLQlUYWJsZVNjYW5EZXNjIHNjYW47Ci0JSGVhcFNjYW5E ZXNjIGhzY2FuOwotCUhlYXBUdXBsZQloZWFwVHVwbGU7CiAJRGF0dW0JCXZhbHVlc1tJTkRFWF9N QVhfS0VZU107CiAJYm9vbAkJaXNudWxsW0lOREVYX01BWF9LRVlTXTsKLQlFeHByU3RhdGUgICpw cmVkaWNhdGU7Ci0JVHVwbGVUYWJsZVNsb3QgKnNsb3Q7Ci0JRVN0YXRlCSAgICplc3RhdGU7Ci0J RXhwckNvbnRleHQgKmVjb250ZXh0OwotCUJsb2NrTnVtYmVyIHJvb3RfYmxrbm8gPSBJbnZhbGlk QmxvY2tOdW1iZXI7Ci0JT2Zmc2V0TnVtYmVyIHJvb3Rfb2Zmc2V0c1tNYXhIZWFwVHVwbGVzUGVy UGFnZV07Ci0JYm9vbAkJaW5faW5kZXhbTWF4SGVhcFR1cGxlc1BlclBhZ2VdOwotCUJsb2NrTnVt YmVyIHByZXZpb3VzX2Jsa25vID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCi0JLyogc3RhdGUgdmFy aWFibGVzIGZvciB0aGUgbWVyZ2UgKi8KLQlJdGVtUG9pbnRlciBpbmRleGN1cnNvciA9IE5VTEw7 Ci0JSXRlbVBvaW50ZXJEYXRhIGRlY29kZWQ7Ci0JYm9vbAkJdHVwbGVzb3J0X2VtcHR5ID0gZmFs c2U7CisKKwlUdXBsZVRhYmxlU2xvdCAgKnNsb3Q7CisJRVN0YXRlCQkJKmVzdGF0ZTsKKwlFeHBy Q29udGV4dAkJKmVjb250ZXh0OworCUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSA9IEdl dEFjY2Vzc1N0cmF0ZWd5KEJBU19CVUxLUkVBRCk7CisKKwlpbnQ2NAkJCW51bV90b19jaGVjazsK KwlUdXBsZXN0b3Jlc3RhdGUgKnR1cGxlc19mb3JfY2hlY2s7CisJVmFsaWRhdGVJbmRleFNjYW5T dGF0ZSBjYWxsYmFja19wcml2YXRlX2RhdGE7CisKKwlCdWZmZXIgYnVmOworCU9mZnNldE51bWJl ciAqdHVwbGVzOworCVJlYWRTdHJlYW0gKnJlYWRfc3RyZWFtOworCisJLyogVXNlIGEgcGVyY2Vu dGFnZSBvZiBtYWludGVuYW5jZV93b3JrX21lbSBmb3IgdHVwbGUgc3RvcmUuICovCisJaW50CQlz dG9yZV93b3JrX21lbV9wYXJ0ID0gbWFpbnRlbmFuY2Vfd29ya19tZW0gKiBkZWJ1Z19jaWNfdmFs aWRhdGVfc3RvcmVfbWVtX3BjdCAvIDEwMDsKKworCS8qCisJICogRW5jb2RlIFRJRHMgYXMgaW50 OCB2YWx1ZXMgZm9yIHRoZSBzb3J0LCByYXRoZXIgdGhhbiBkaXJlY3RseSBzb3J0aW5nCisJICog aXRlbSBwb2ludGVycy4gIFRoaXMgY2FuIGJlIHNpZ25pZmljYW50bHkgZmFzdGVyLCBwcmltYXJp bHkgYmVjYXVzZSBUSUQKKwkgKiBpcyBhIHBhc3MtYnktcmVmZXJlbmNlIHR5cGUgb24gYWxsIHBs YXRmb3Jtcywgd2hlcmVhcyBpbnQ4IGlzCisJICogcGFzcy1ieS12YWx1ZSBvbiBtb3N0IHBsYXRm b3Jtcy4KKwkgKi8KKwl0dXBsZXNfZm9yX2NoZWNrID0gdHVwbGVzdG9yZV9iZWdpbl9kYXR1bShJ TlQ4T0lELCBmYWxzZSwgZmFsc2UsIHN0b3JlX3dvcmtfbWVtX3BhcnQpOwogCiAJLyoKIAkgKiBz YW5pdHkgY2hlY2tzCiAJICovCiAJQXNzZXJ0KE9pZElzVmFsaWQoaW5kZXhSZWxhdGlvbi0+cmRf cmVsLT5yZWxhbSkpOwogCi0JLyoKLQkgKiBOZWVkIGFuIEVTdGF0ZSBmb3IgZXZhbHVhdGlvbiBv ZiBpbmRleCBleHByZXNzaW9ucyBhbmQgcGFydGlhbC1pbmRleAotCSAqIHByZWRpY2F0ZXMuICBB bHNvIGEgc2xvdCB0byBob2xkIHRoZSBjdXJyZW50IHR1cGxlLgotCSAqLworCW51bV90b19jaGVj ayA9IGhlYXBhbV9pbmRleF92YWxpZGF0ZV90dXBsZXNvcnRfZGlmZmVyZW5jZShzdGF0ZS0+dHVw bGVzb3J0LAorCQkJCQkJCQkJCQkJCQkgYXV4U3RhdGUtPnR1cGxlc29ydCwKKwkJCQkJCQkJCQkJ CQkJIHR1cGxlc19mb3JfY2hlY2spOworCisJLyogSXQgaXMgb3VyIHJlc3BvbnNpYmlsaXR5IHRv IGNsb3NlIHR1cGxlIHNvcnQgYXMgZmFzdCBhcyB3ZSBjYW4gKi8KKwl0dXBsZXNvcnRfZW5kKHN0 YXRlLT50dXBsZXNvcnQpOworCXR1cGxlc29ydF9lbmQoYXV4U3RhdGUtPnR1cGxlc29ydCk7CisK KwlzdGF0ZS0+dHVwbGVzb3J0ID0gYXV4U3RhdGUtPnR1cGxlc29ydCA9IE5VTEw7CisKIAllc3Rh dGUgPSBDcmVhdGVFeGVjdXRvclN0YXRlKCk7CiAJZWNvbnRleHQgPSBHZXRQZXJUdXBsZUV4cHJD b250ZXh0KGVzdGF0ZSk7CiAJc2xvdCA9IE1ha2VTaW5nbGVUdXBsZVRhYmxlU2xvdChSZWxhdGlv bkdldERlc2NyKGhlYXBSZWxhdGlvbiksCi0JCQkJCQkJCQkmVFRTT3BzSGVhcFR1cGxlKTsKKwkJ CQkJCQkJCSZUVFNPcHNCdWZmZXJIZWFwVHVwbGUpOwogCiAJLyogQXJyYW5nZSBmb3IgZWNvbnRl eHQncyBzY2FuIHR1cGxlIHRvIGJlIHRoZSB0dXBsZSB1bmRlciB0ZXN0ICovCiAJZWNvbnRleHQt PmVjeHRfc2NhbnR1cGxlID0gc2xvdDsKIAotCS8qIFNldCB1cCBleGVjdXRpb24gc3RhdGUgZm9y IHByZWRpY2F0ZSwgaWYgYW55LiAqLwotCXByZWRpY2F0ZSA9IEV4ZWNQcmVwYXJlUXVhbChpbmRl eEluZm8tPmlpX1ByZWRpY2F0ZSwgZXN0YXRlKTsKKwljYWxsYmFja19wcml2YXRlX2RhdGEucHJl dl9ibG9ja19udW1iZXIgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJY2FsbGJhY2tfcHJpdmF0ZV9k YXRhLnN0b3JlID0gdHVwbGVzX2Zvcl9jaGVjazsKKwljYWxsYmFja19wcml2YXRlX2RhdGEucHJl dl9vZmZzZXRfbnVtYmVyID0gSW52YWxpZE9mZnNldE51bWJlcjsKIAotCS8qCi0JICogUHJlcGFy ZSBmb3Igc2NhbiBvZiB0aGUgYmFzZSByZWxhdGlvbi4gIFdlIG5lZWQganVzdCB0aG9zZSB0dXBs ZXMKLQkgKiBzYXRpc2Z5aW5nIHRoZSBwYXNzZWQtaW4gcmVmZXJlbmNlIHNuYXBzaG90LiAgV2Ug bXVzdCBkaXNhYmxlIHN5bmNzY2FuCi0JICogaGVyZSwgYmVjYXVzZSBpdCdzIGNyaXRpY2FsIHRo YXQgd2UgcmVhZCBmcm9tIGJsb2NrIHplcm8gZm9yd2FyZCB0bwotCSAqIG1hdGNoIHRoZSBzb3J0 ZWQgVElEcy4KLQkgKi8KLQlzY2FuID0gdGFibGVfYmVnaW5zY2FuX3N0cmF0KGhlYXBSZWxhdGlv biwJLyogcmVsYXRpb24gKi8KLQkJCQkJCQkJIHNuYXBzaG90LAkvKiBzbmFwc2hvdCAqLwotCQkJ CQkJCQkgMCwgLyogbnVtYmVyIG9mIGtleXMgKi8KLQkJCQkJCQkJIE5VTEwsCS8qIHNjYW4ga2V5 ICovCi0JCQkJCQkJCSB0cnVlLAkvKiBidWZmZXIgYWNjZXNzIHN0cmF0ZWd5IE9LICovCi0JCQkJ CQkJCSBmYWxzZSk7CS8qIHN5bmNzY2FuIG5vdCBPSyAqLwotCWhzY2FuID0gKEhlYXBTY2FuRGVz Yykgc2NhbjsKKwlyZWFkX3N0cmVhbSA9IHJlYWRfc3RyZWFtX2JlZ2luX3JlbGF0aW9uKFJFQURf U1RSRUFNX01BSU5URU5BTkNFIHwgUkVBRF9TVFJFQU1fVVNFX0JBVENISU5HLAorCQkJCQkJCQkJ CQkJCQkgYnN0cmF0ZWd5LAorCQkJCQkJCQkJCQkJCQkgaGVhcFJlbGF0aW9uLCBNQUlOX0ZPUktO VU0sCisJCQkJCQkJCQkJCQkJCSBoZWFwYW1faW5kZXhfdmFsaWRhdGVfc2Nhbl9yZWFkX3N0cmVh bV9uZXh0LAorCQkJCQkJCQkJCQkJCQkgJmNhbGxiYWNrX3ByaXZhdGVfZGF0YSwKKwkJCQkJCQkJ CQkJCQkJIChNYXhIZWFwVHVwbGVzUGVyUGFnZSArIDEpICogc2l6ZW9mKE9mZnNldE51bWJlcikp OwogCi0JcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19TQ0FOX0JMT0NLU19U T1RBTCwKLQkJCQkJCQkJIGhzY2FuLT5yc19uYmxvY2tzKTsKKwlwZ3N0YXRfcHJvZ3Jlc3NfdXBk YXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9UVVBMRVNfVE9UQUwsIG51bV90b19jaGVjayk7 CisJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhfVFVQTEVT X0RPTkUsIDApOwogCi0JLyoKLQkgKiBTY2FuIGFsbCB0dXBsZXMgbWF0Y2hpbmcgdGhlIHNuYXBz aG90LgotCSAqLwotCXdoaWxlICgoaGVhcFR1cGxlID0gaGVhcF9nZXRuZXh0KHNjYW4sIEZvcndh cmRTY2FuRGlyZWN0aW9uKSkgIT0gTlVMTCkKKwl3aGlsZSAoKGJ1ZiA9IHJlYWRfc3RyZWFtX25l eHRfYnVmZmVyKHJlYWRfc3RyZWFtLCAodm9pZCAqKikgJnR1cGxlcykpICE9IEludmFsaWRCdWZm ZXIpCiAJewotCQlJdGVtUG9pbnRlciBoZWFwY3Vyc29yID0gJmhlYXBUdXBsZS0+dF9zZWxmOwot CQlJdGVtUG9pbnRlckRhdGEgcm9vdFR1cGxlOwotCQlPZmZzZXROdW1iZXIgcm9vdF9vZmZudW07 CisJCUhlYXBUdXBsZURhdGEJaGVhcF90dXBsZV9kYXRhW01heEhlYXBUdXBsZXNQZXJQYWdlXTsK KwkJaW50IGk7CisJCU9mZnNldE51bWJlciBvZmY7CisJCUJsb2NrTnVtYmVyIGJsb2NrX251bWJl cjsKIAogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCi0JCXN0YXRlLT5odHVwcyArPSAxOwor CQlMb2NrQnVmZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOworCQlibG9ja19udW1iZXIgPSBC dWZmZXJHZXRCbG9ja051bWJlcihidWYpOwogCi0JCWlmICgocHJldmlvdXNfYmxrbm8gPT0gSW52 YWxpZEJsb2NrTnVtYmVyKSB8fAotCQkJKGhzY2FuLT5yc19jYmxvY2sgIT0gcHJldmlvdXNfYmxr bm8pKQorCQlpID0gMDsKKwkJd2hpbGUgKChvZmYgPSB0dXBsZXNbaV0pICE9IEludmFsaWRPZmZz ZXROdW1iZXIpCiAJCXsKLQkJCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1Nf U0NBTl9CTE9DS1NfRE9ORSwKLQkJCQkJCQkJCQkgaHNjYW4tPnJzX2NibG9jayk7Ci0JCQlwcmV2 aW91c19ibGtubyA9IGhzY2FuLT5yc19jYmxvY2s7CisJCQlJdGVtUG9pbnRlckRhdGEgdGlkOwor CQkJYm9vbAkJYWxsX2RlYWQsIGZvdW5kOworCQkJSXRlbVBvaW50ZXJTZXQoJnRpZCwgYmxvY2tf bnVtYmVyLCBvZmYpOworCisJCQlmb3VuZCA9IGhlYXBfaG90X3NlYXJjaF9idWZmZXIoJnRpZCwg aGVhcFJlbGF0aW9uLCBidWYsIHNuYXBzaG90LAorCQkJCQkJCQkJCSAgICZoZWFwX3R1cGxlX2Rh dGFbaV0sICZhbGxfZGVhZCwgdHJ1ZSk7CisJCQlpZiAoIWZvdW5kKQorCQkJCUl0ZW1Qb2ludGVy U2V0SW52YWxpZCgmaGVhcF90dXBsZV9kYXRhW2ldLnRfc2VsZik7CisJCQlpKys7CisJCQlzdGF0 ZS0+aHR1cHMgKz0gMTsKIAkJfQorCQlMb2NrQnVmZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NL KTsKIAogCQkvKgotCQkgKiBBcyBjb21tZW50ZWQgaW4gdGFibGVfaW5kZXhfYnVpbGRfc2Nhbiwg d2Ugc2hvdWxkIGluZGV4IGhlYXAtb25seQotCQkgKiB0dXBsZXMgdW5kZXIgdGhlIFRJRHMgb2Yg dGhlaXIgcm9vdCB0dXBsZXM7IHNvIHdoZW4gd2UgYWR2YW5jZSBvbnRvCi0JCSAqIGEgbmV3IGhl YXAgcGFnZSwgYnVpbGQgYSBtYXAgb2Ygcm9vdCBpdGVtIG9mZnNldHMgb24gdGhlIHBhZ2UuCi0J CSAqCi0JCSAqIFRoaXMgY29tcGxpY2F0ZXMgbWVyZ2luZyBhZ2FpbnN0IHRoZSB0dXBsZXNvcnQg b3V0cHV0OiB3ZSB3aWxsCi0JCSAqIHZpc2l0IHRoZSBsaXZlIHR1cGxlcyBpbiBvcmRlciBieSB0 aGVpciBvZmZzZXRzLCBidXQgdGhlIHJvb3QKLQkJICogb2Zmc2V0cyB0aGF0IHdlIG5lZWQgdG8g Y29tcGFyZSBhZ2FpbnN0IHRoZSBpbmRleCBjb250ZW50cyBtaWdodCBiZQotCQkgKiBvcmRlcmVk IGRpZmZlcmVudGx5LiAgU28gd2UgbWlnaHQgaGF2ZSB0byAibG9vayBiYWNrIiB3aXRoaW4gdGhl Ci0JCSAqIHR1cGxlc29ydCBvdXRwdXQsIGJ1dCBvbmx5IHdpdGhpbiB0aGUgY3VycmVudCBwYWdl LiAgV2UgaGFuZGxlIHRoYXQKLQkJICogYnkga2VlcGluZyBhIGJvb2wgYXJyYXkgaW5faW5kZXhb XSBzaG93aW5nIGFsbCB0aGUKLQkJICogYWxyZWFkeS1wYXNzZWQtb3ZlciB0dXBsZXNvcnQgb3V0 cHV0IFRJRHMgb2YgdGhlIGN1cnJlbnQgcGFnZS4gV2UKLQkJICogY2xlYXIgdGhhdCBhcnJheSBo ZXJlLCB3aGVuIGFkdmFuY2luZyBvbnRvIGEgbmV3IGhlYXAgcGFnZS4KKwkJICogSXQgaXMgc2Fm ZSB0byBhY2Nlc3MgdHVwbGUgZGF0YSBhZnRlciByZWxlYXNpbmcgdGhlIGJ1ZmZlciBsb2NrCisJ CSAqIGJlY2F1c2UgdGhlIGJ1ZmZlciBwaW4gaXMgc3RpbGwgaGVsZCwgYW5kIHRoZSBvbmx5IG9w ZXJhdGlvbiB0aGF0CisJCSAqIGNvdWxkIHBoeXNpY2FsbHkgbW92ZSB0dXBsZSBkYXRhIG9uIHRo ZSBwYWdlIGlzCisJCSAqIFBhZ2VSZXBhaXJGcmFnbWVudGF0aW9uIHZpYSBoZWFwX3BhZ2VfcHJ1 bmUuICBWQUNVVU0gY29uZmxpY3RzIHdpdGgKKwkJICogQ0lDIChib3RoIHRha2UgU2hhcmVVcGRh dGVFeGNsdXNpdmVMb2NrKSwgYW5kIG9wcG9ydHVuaXN0aWMgcHJ1bmluZworCQkgKiBmcm9tIGNv bmN1cnJlbnQgRE1MIGNhbm5vdCBhZmZlY3Qgcm9vdCB0dXBsZXMgd2UgYXJlIHJlZmVyZW5jaW5n LgogCQkgKi8KLQkJaWYgKGhzY2FuLT5yc19jYmxvY2sgIT0gcm9vdF9ibGtubykKLQkJewotCQkJ UGFnZQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoaHNjYW4tPnJzX2NidWYpOwotCi0JCQlMb2NrQnVm ZmVyKGhzY2FuLT5yc19jYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7Ci0JCQloZWFwX2dldF9yb290 X3R1cGxlcyhwYWdlLCByb290X29mZnNldHMpOwotCQkJTG9ja0J1ZmZlcihoc2Nhbi0+cnNfY2J1 ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKLQotCQkJbWVtc2V0KGluX2luZGV4LCAwLCBzaXplb2Yo aW5faW5kZXgpKTsKLQotCQkJcm9vdF9ibGtubyA9IGhzY2FuLT5yc19jYmxvY2s7Ci0JCX0KLQot CQkvKiBDb252ZXJ0IGFjdHVhbCB0dXBsZSBUSUQgdG8gcm9vdCBUSUQgKi8KLQkJcm9vdFR1cGxl ID0gKmhlYXBjdXJzb3I7Ci0JCXJvb3Rfb2ZmbnVtID0gSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1i ZXIoaGVhcGN1cnNvcik7Ci0KLQkJaWYgKEhlYXBUdXBsZUlzSGVhcE9ubHkoaGVhcFR1cGxlKSkK LQkJewotCQkJcm9vdF9vZmZudW0gPSByb290X29mZnNldHNbcm9vdF9vZmZudW0gLSAxXTsKLQkJ CWlmICghT2Zmc2V0TnVtYmVySXNWYWxpZChyb290X29mZm51bSkpCi0JCQkJZXJlcG9ydChFUlJP UiwKLQkJCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQpLAotCQkJCQkJIGVycm1z Z19pbnRlcm5hbCgiZmFpbGVkIHRvIGZpbmQgcGFyZW50IHR1cGxlIGZvciBoZWFwLW9ubHkgdHVw bGUgYXQgKCV1LCV1KSBpbiB0YWJsZSBcIiVzXCIiLAotCQkJCQkJCQkJCSBJdGVtUG9pbnRlckdl dEJsb2NrTnVtYmVyKGhlYXBjdXJzb3IpLAotCQkJCQkJCQkJCSBJdGVtUG9pbnRlckdldE9mZnNl dE51bWJlcihoZWFwY3Vyc29yKSwKLQkJCQkJCQkJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo aGVhcFJlbGF0aW9uKSkpKTsKLQkJCUl0ZW1Qb2ludGVyU2V0T2Zmc2V0TnVtYmVyKCZyb290VHVw bGUsIHJvb3Rfb2ZmbnVtKTsKLQkJfQotCiAJCS8qCi0JCSAqICJtZXJnZSIgYnkgc2tpcHBpbmcg dGhyb3VnaCB0aGUgaW5kZXggdHVwbGVzIHVudGlsIHdlIGZpbmQgb3IgcGFzcwotCQkgKiB0aGUg Y3VycmVudCByb290IHR1cGxlLgorCQkgKiBObyBwcmVkaWNhdGUgZXZhbHVhdGlvbiBpcyBuZWVk ZWQgaGVyZTogdGhlIGF1eGlsaWFyeSBTVElSIGluZGV4CisJCSAqIG9ubHkgY29udGFpbnMgVElE cyBmb3IgdHVwbGVzIHRoYXQgYWxyZWFkeSBzYXRpc2ZpZWQgdGhlIHBhcnRpYWwKKwkJICogaW5k ZXggcHJlZGljYXRlIGF0IERNTCB0aW1lIChjaGVja2VkIGluIEV4ZWNJbnNlcnRJbmRleFR1cGxl cykuCiAJCSAqLwotCQl3aGlsZSAoIXR1cGxlc29ydF9lbXB0eSAmJgotCQkJICAgKCFpbmRleGN1 cnNvciB8fAotCQkJCUl0ZW1Qb2ludGVyQ29tcGFyZShpbmRleGN1cnNvciwgJnJvb3RUdXBsZSkg PCAwKSkKKwkJaSA9IDA7CisJCXdoaWxlICgob2ZmID0gdHVwbGVzW2ldKSAhPSBJbnZhbGlkT2Zm c2V0TnVtYmVyKQogCQl7Ci0JCQlEYXR1bQkJdHNfdmFsOwotCQkJYm9vbAkJdHNfaXNudWxsOwot Ci0JCQlpZiAoaW5kZXhjdXJzb3IpCisJCQlpZiAoSXRlbVBvaW50ZXJJc1ZhbGlkKCZoZWFwX3R1 cGxlX2RhdGFbaV0udF9zZWxmKSkKIAkJCXsKKwkJCQlJdGVtUG9pbnRlckRhdGEgcm9vdF90aWQ7 CisJCQkJSXRlbVBvaW50ZXJTZXQoJnJvb3RfdGlkLCBibG9ja19udW1iZXIsIG9mZik7CisKKwkJ CQkvKiBSZXNldCB0aGUgcGVyLXR1cGxlIG1lbW9yeSBjb250ZXh0IGZvciB0aGUgbmV4dCBmZXRj aC4gKi8KKwkJCQlNZW1vcnlDb250ZXh0UmVzZXQoZWNvbnRleHQtPmVjeHRfcGVyX3R1cGxlX21l bW9yeSk7CisJCQkJRXhlY1N0b3JlQnVmZmVySGVhcFR1cGxlKCZoZWFwX3R1cGxlX2RhdGFbaV0s IHNsb3QsIGJ1Zik7CisKKwkJCQkvKiBDb21wdXRlIHRoZSBrZXkgdmFsdWVzIGFuZCBudWxsIGZs YWdzIGZvciB0aGlzIHR1cGxlLiAqLworCQkJCUZvcm1JbmRleERhdHVtKGluZGV4SW5mbywKKwkJ CQkJCQkgICBzbG90LAorCQkJCQkJCSAgIGVzdGF0ZSwKKwkJCQkJCQkgICB2YWx1ZXMsCisJCQkJ CQkJICAgaXNudWxsKTsKKwogCQkJCS8qCi0JCQkJICogUmVtZW1iZXIgaW5kZXggaXRlbXMgc2Vl biBlYXJsaWVyIG9uIHRoZSBjdXJyZW50IGhlYXAgcGFnZQorCQkJCSAqIEluc2VydCB0aGUgdHVw bGUgaW50byB0aGUgdGFyZ2V0IGluZGV4LgogCQkJCSAqLwotCQkJCWlmIChJdGVtUG9pbnRlckdl dEJsb2NrTnVtYmVyKGluZGV4Y3Vyc29yKSA9PSByb290X2Jsa25vKQotCQkJCQlpbl9pbmRleFtJ dGVtUG9pbnRlckdldE9mZnNldE51bWJlcihpbmRleGN1cnNvcikgLSAxXSA9IHRydWU7CisJCQkJ aW5kZXhfaW5zZXJ0KGluZGV4UmVsYXRpb24sCisJCQkJCQkJIHZhbHVlcywKKwkJCQkJCQkgaXNu dWxsLAorCQkJCQkJCSAmcm9vdF90aWQsIC8qIGluc2VydCByb290IHR1cGxlICovCisJCQkJCQkJ IGhlYXBSZWxhdGlvbiwKKwkJCQkJCQkgaW5kZXhJbmZvLT5paV9VbmlxdWUgPworCQkJCQkJCSBV TklRVUVfQ0hFQ0tfWUVTIDogVU5JUVVFX0NIRUNLX05PLAorCQkJCQkJCSBmYWxzZSwKKwkJCQkJ CQkgaW5kZXhJbmZvKTsKKworCQkJCXN0YXRlLT50dXBzX2luc2VydGVkICs9IDE7CiAJCQl9CiAK LQkJCXR1cGxlc29ydF9lbXB0eSA9ICF0dXBsZXNvcnRfZ2V0ZGF0dW0oc3RhdGUtPnR1cGxlc29y dCwgdHJ1ZSwKLQkJCQkJCQkJCQkJCSAgZmFsc2UsICZ0c192YWwsICZ0c19pc251bGwsCi0JCQkJ CQkJCQkJCQkgIE5VTEwpOwotCQkJQXNzZXJ0KHR1cGxlc29ydF9lbXB0eSB8fCAhdHNfaXNudWxs KTsKLQkJCWlmICghdHVwbGVzb3J0X2VtcHR5KQotCQkJewotCQkJCWl0ZW1wdHJfZGVjb2RlKCZk ZWNvZGVkLCBEYXR1bUdldEludDY0KHRzX3ZhbCkpOwotCQkJCWluZGV4Y3Vyc29yID0gJmRlY29k ZWQ7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyogQmUgdGlkeSAqLwotCQkJCWluZGV4Y3Vy c29yID0gTlVMTDsKLQkJCX0KKwkJCXBnc3RhdF9wcm9ncmVzc19pbmNyX3BhcmFtKFBST0dSRVNT X0NSRUFURUlEWF9UVVBMRVNfRE9ORSwgMSk7CisJCQlpKys7CiAJCX0KIAotCQkvKgotCQkgKiBJ ZiB0aGUgdHVwbGVzb3J0IGhhcyBvdmVyc2hvdCAqYW5kKiB3ZSBkaWRuJ3Qgc2VlIGEgbWF0Y2gg ZWFybGllciwKLQkJICogdGhlbiB0aGlzIHR1cGxlIGlzIG1pc3NpbmcgZnJvbSB0aGUgaW5kZXgs IHNvIGluc2VydCBpdC4KLQkJICovCi0JCWlmICgodHVwbGVzb3J0X2VtcHR5IHx8Ci0JCQkgSXRl bVBvaW50ZXJDb21wYXJlKGluZGV4Y3Vyc29yLCAmcm9vdFR1cGxlKSA+IDApICYmCi0JCQkhaW5f aW5kZXhbcm9vdF9vZmZudW0gLSAxXSkKLQkJewotCQkJTWVtb3J5Q29udGV4dFJlc2V0KGVjb250 ZXh0LT5lY3h0X3Blcl90dXBsZV9tZW1vcnkpOwotCi0JCQkvKiBTZXQgdXAgZm9yIHByZWRpY2F0 ZSBvciBleHByZXNzaW9uIGV2YWx1YXRpb24gKi8KLQkJCUV4ZWNTdG9yZUhlYXBUdXBsZShoZWFw VHVwbGUsIHNsb3QsIGZhbHNlKTsKLQotCQkJLyoKLQkJCSAqIEluIGEgcGFydGlhbCBpbmRleCwg ZGlzY2FyZCB0dXBsZXMgdGhhdCBkb24ndCBzYXRpc2Z5IHRoZQotCQkJICogcHJlZGljYXRlLgot CQkJICovCi0JCQlpZiAocHJlZGljYXRlICE9IE5VTEwpCi0JCQl7Ci0JCQkJaWYgKCFFeGVjUXVh bChwcmVkaWNhdGUsIGVjb250ZXh0KSkKLQkJCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qCi0J CQkgKiBGb3IgdGhlIGN1cnJlbnQgaGVhcCB0dXBsZSwgZXh0cmFjdCBhbGwgdGhlIGF0dHJpYnV0 ZXMgd2UgdXNlCi0JCQkgKiBpbiB0aGlzIGluZGV4LCBhbmQgbm90ZSB3aGljaCBhcmUgbnVsbC4g IFRoaXMgYWxzbyBwZXJmb3JtcwotCQkJICogZXZhbHVhdGlvbiBvZiBhbnkgZXhwcmVzc2lvbnMg bmVlZGVkLgotCQkJICovCi0JCQlGb3JtSW5kZXhEYXR1bShpbmRleEluZm8sCi0JCQkJCQkgICBz bG90LAotCQkJCQkJICAgZXN0YXRlLAotCQkJCQkJICAgdmFsdWVzLAotCQkJCQkJICAgaXNudWxs KTsKLQotCQkJLyoKLQkJCSAqIFlvdSdkIHRoaW5rIHdlIHNob3VsZCBnbyBhaGVhZCBhbmQgYnVp bGQgdGhlIGluZGV4IHR1cGxlIGhlcmUsCi0JCQkgKiBidXQgc29tZSBpbmRleCBBTXMgd2FudCB0 byBkbyBmdXJ0aGVyIHByb2Nlc3Npbmcgb24gdGhlIGRhdGEKLQkJCSAqIGZpcnN0LiBTbyBwYXNz IHRoZSB2YWx1ZXNbXSBhbmQgaXNudWxsW10gYXJyYXlzLCBpbnN0ZWFkLgotCQkJICovCi0KLQkJ CS8qCi0JCQkgKiBJZiB0aGUgdHVwbGUgaXMgYWxyZWFkeSBjb21taXR0ZWQgZGVhZCwgeW91IG1p Z2h0IHRoaW5rIHdlCi0JCQkgKiBjb3VsZCBzdXBwcmVzcyB1bmlxdWVuZXNzIGNoZWNraW5nLCBi dXQgdGhpcyBpcyBubyBsb25nZXIgdHJ1ZQotCQkJICogaW4gdGhlIHByZXNlbmNlIG9mIEhPVCwg YmVjYXVzZSB0aGUgaW5zZXJ0IGlzIGFjdHVhbGx5IGEgcHJveHkKLQkJCSAqIGZvciBhIHVuaXF1 ZW5lc3MgY2hlY2sgb24gdGhlIHdob2xlIEhPVC1jaGFpbi4gIFRoYXQgaXMsIHRoZQotCQkJICog dHVwbGUgd2UgaGF2ZSBoZXJlIGNvdWxkIGJlIGRlYWQgYmVjYXVzZSBpdCB3YXMgYWxyZWFkeQot CQkJICogSE9ULXVwZGF0ZWQsIGFuZCBpZiBzbyB0aGUgdXBkYXRpbmcgdHJhbnNhY3Rpb24gd2ls bCBub3QgaGF2ZQotCQkJICogdGhvdWdodCBpdCBzaG91bGQgaW5zZXJ0IGluZGV4IGVudHJpZXMu ICBUaGUgaW5kZXggQU0gd2lsbAotCQkJICogY2hlY2sgdGhlIHdob2xlIEhPVC1jaGFpbiBhbmQg Y29ycmVjdGx5IGRldGVjdCBhIGNvbmZsaWN0IGlmCi0JCQkgKiB0aGVyZSBpcyBvbmUuCi0JCQkg Ki8KLQotCQkJaW5kZXhfaW5zZXJ0KGluZGV4UmVsYXRpb24sCi0JCQkJCQkgdmFsdWVzLAotCQkJ CQkJIGlzbnVsbCwKLQkJCQkJCSAmcm9vdFR1cGxlLAotCQkJCQkJIGhlYXBSZWxhdGlvbiwKLQkJ CQkJCSBpbmRleEluZm8tPmlpX1VuaXF1ZSA/Ci0JCQkJCQkgVU5JUVVFX0NIRUNLX1lFUyA6IFVO SVFVRV9DSEVDS19OTywKLQkJCQkJCSBmYWxzZSwKLQkJCQkJCSBpbmRleEluZm8pOwotCi0JCQlz dGF0ZS0+dHVwc19pbnNlcnRlZCArPSAxOwotCQl9CisJCVJlbGVhc2VCdWZmZXIoYnVmKTsKIAl9 CiAKLQl0YWJsZV9lbmRzY2FuKHNjYW4pOwotCiAJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xv dChzbG90KTsKIAogCUZyZWVFeGVjdXRvclN0YXRlKGVzdGF0ZSk7CiAKKwlyZWFkX3N0cmVhbV9l bmQocmVhZF9zdHJlYW0pOworCXR1cGxlc3RvcmVfZW5kKHR1cGxlc19mb3JfY2hlY2spOworCisJ RnJlZUFjY2Vzc1N0cmF0ZWd5KGJzdHJhdGVneSk7CisKIAkvKiBUaGVzZSBtYXkgaGF2ZSBiZWVu IHBvaW50aW5nIHRvIHRoZSBub3ctZ29uZSBlc3RhdGUgKi8KIAlpbmRleEluZm8tPmlpX0V4cHJl c3Npb25zU3RhdGUgPSBOSUw7CiAJaW5kZXhJbmZvLT5paV9QcmVkaWNhdGVTdGF0ZSA9IE5VTEw7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMgYi9zcmMvYmFja2VuZC9j YXRhbG9nL2luZGV4LmMKaW5kZXggY2MwNjdlNThkMzYuLmIxNDE3ZWMwNWM2IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9p bmRleC5jCkBAIC03MTUsNiArNzE1LDggQEAgVXBkYXRlSW5kZXhSZWxhdGlvbihPaWQgaW5kZXhv aWQsCiAgKgkJCWFscmVhZHkgZXhpc3RzLgogICoJCUlOREVYX0NSRUFURV9QQVJUSVRJT05FRDoK ICAqCQkJY3JlYXRlIGEgcGFydGl0aW9uZWQgaW5kZXggKHRhYmxlIG11c3QgYmUgcGFydGl0aW9u ZWQpCisgKgkJSU5ERVhfQ1JFQVRFX0FVWElMSUFSWToKKyAqCQkJbWFyayBpbmRleCBhcyBhdXhp bGlhcnkgaW5kZXgKICAqCQlJTkRFWF9DUkVBVEVfU1VQUFJFU1NfUFJPR1JFU1M6CiAgKgkJCWRv bid0IHJlcG9ydCBwcm9ncmVzcyBkdXJpbmcgdGhlIGluZGV4IGJ1aWxkLgogICoKQEAgLTcyMyw2 ICs3MjUsOSBAQCBVcGRhdGVJbmRleFJlbGF0aW9uKE9pZCBpbmRleG9pZCwKICAqIGFsbG93X3N5 c3RlbV90YWJsZV9tb2RzOiBhbGxvdyB0YWJsZSB0byBiZSBhIHN5c3RlbSBjYXRhbG9nCiAgKiBp c19pbnRlcm5hbDogaWYgdHJ1ZSwgcG9zdCBjcmVhdGlvbiBob29rIGZvciBuZXcgaW5kZXgKICAq IGNvbnN0cmFpbnRJZDogaWYgbm90IE5VTEwsIHJlY2VpdmVzIE9JRCBvZiBjcmVhdGVkIGNvbnN0 cmFpbnQKKyAqIHJlbHBlcnNpc3RlbmNlOiBwZXJzaXN0ZW5jZSBsZXZlbCB0byB1c2UgZm9yIGlu ZGV4LiBJbiBtb3N0IG9mIHRoZQorICoJCWNhc2VzIGl0IHNob3VsZCBiZSBlcXVhbCB0byB0aGUg cGVyc2lzdGVuY2UgbGV2ZWwgb2YgdGhlIHRhYmxlLAorICoJCWF1eGlsaWFyeSBpbmRleGVzIGFy ZSBvbmx5IGV4Y2VwdGlvbiBoZXJlLgogICoKICAqIFJldHVybnMgdGhlIE9JRCBvZiB0aGUgY3Jl YXRlZCBpbmRleC4KICAqLwpAQCAtNzYzLDYgKzc2OCw3IEBAIGluZGV4X2NyZWF0ZShSZWxhdGlv biBoZWFwUmVsYXRpb24sCiAJYm9vbAkJaW52YWxpZCA9IChmbGFncyAmIElOREVYX0NSRUFURV9J TlZBTElEKSAhPSAwOwogCWJvb2wJCWNvbmN1cnJlbnQgPSAoZmxhZ3MgJiBJTkRFWF9DUkVBVEVf Q09OQ1VSUkVOVCkgIT0gMDsKIAlib29sCQlwYXJ0aXRpb25lZCA9IChmbGFncyAmIElOREVYX0NS RUFURV9QQVJUSVRJT05FRCkgIT0gMDsKKwlib29sCQlhdXhpbGlhcnkgPSAoZmxhZ3MgJiBJTkRF WF9DUkVBVEVfQVVYSUxJQVJZKSAhPSAwOwogCWJvb2wJCXByb2dyZXNzID0gKGZsYWdzICYgSU5E RVhfQ1JFQVRFX1NVUFBSRVNTX1BST0dSRVNTKSA9PSAwOwogCWNoYXIJCXJlbGtpbmQ7CiAJVHJh bnNhY3Rpb25JZCByZWxmcm96ZW54aWQ7CkBAIC03ODksNyArNzk1LDEwIEBAIGluZGV4X2NyZWF0 ZShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJbmFtZXNwYWNlSWQgPSBSZWxhdGlvbkdldE5hbWVz cGFjZShoZWFwUmVsYXRpb24pOwogCXNoYXJlZF9yZWxhdGlvbiA9IGhlYXBSZWxhdGlvbi0+cmRf cmVsLT5yZWxpc3NoYXJlZDsKIAltYXBwZWRfcmVsYXRpb24gPSBSZWxhdGlvbklzTWFwcGVkKGhl YXBSZWxhdGlvbik7Ci0JcmVscGVyc2lzdGVuY2UgPSBoZWFwUmVsYXRpb24tPnJkX3JlbC0+cmVs cGVyc2lzdGVuY2U7CisJaWYgKGF1eGlsaWFyeSkKKwkJcmVscGVyc2lzdGVuY2UgPSBSRUxQRVJT SVNURU5DRV9VTkxPR0dFRDsgLyogYXV4IGluZGV4ZXMgYXJlIGFsd2F5cyB1bmxvZ2dlZCAqLwor CWVsc2UKKwkJcmVscGVyc2lzdGVuY2UgPSBoZWFwUmVsYXRpb24tPnJkX3JlbC0+cmVscGVyc2lz dGVuY2U7CiAKIAkvKgogCSAqIGNoZWNrIHBhcmFtZXRlcnMKQEAgLTc5Nyw2ICs4MDYsMTEgQEAg aW5kZXhfY3JlYXRlKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAlpZiAoaW5kZXhJbmZvLT5paV9O dW1JbmRleEF0dHJzIDwgMSkKIAkJZWxvZyhFUlJPUiwgIm11c3QgaW5kZXggYXQgbGVhc3Qgb25l IGNvbHVtbiIpOwogCisJaWYgKGluZGV4SW5mby0+aWlfQW0gPT0gU1RJUl9BTV9PSUQgJiYgIWF1 eGlsaWFyeSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVf Tk9UX1NVUFBPUlRFRCksCisJCQkJIGVycm1zZygidXNlci1kZWZpbmVkIGluZGV4ZXMgd2l0aCBT VElSIGFjY2VzcyBtZXRob2QgYXJlIG5vdCBzdXBwb3J0ZWQiKSkpOworCiAJaWYgKCFhbGxvd19z eXN0ZW1fdGFibGVfbW9kcyAmJgogCQlJc1N5c3RlbVJlbGF0aW9uKGhlYXBSZWxhdGlvbikgJiYK IAkJSXNOb3JtYWxQcm9jZXNzaW5nTW9kZSgpKQpAQCAtMTQwMiw3ICsxNDE2LDggQEAgaW5kZXhf Y3JlYXRlX2NvcHkoUmVsYXRpb24gaGVhcFJlbGF0aW9uLCB1aW50MTYgZmxhZ3MsCiAJCQkJCQkJ IWNvbmN1cnJlbnRseSwJLyogaXNyZWFkeSAqLwogCQkJCQkJCWNvbmN1cnJlbnRseSwJLyogY29u Y3VycmVudCAqLwogCQkJCQkJCWluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXN1bW1hcml6aW5n LAotCQkJCQkJCW9sZEluZm8tPmlpX1dpdGhvdXRPdmVybGFwcyk7CisJCQkJCQkJb2xkSW5mby0+ aWlfV2l0aG91dE92ZXJsYXBzLAorCQkJCQkJCWZhbHNlKTsKIAogCS8qIGZldGNoIGV4Y2x1c2lv biBjb25zdHJhaW50IGluZm8gaWYgYW55ICovCiAJaWYgKGluZGV4UmVsYXRpb24tPnJkX2luZGV4 LT5pbmRpc2V4Y2x1c2lvbikKQEAgLTE0MjIsMTMgKzE0MzcsMTYgQEAgaW5kZXhfY3JlYXRlX2Nv cHkoUmVsYXRpb24gaGVhcFJlbGF0aW9uLCB1aW50MTYgZmxhZ3MsCiAJICogaW5kZXggaW5mb3Jt YXRpb24uICBBbGwgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIHVzZWQgZm9yIHRoZSBpbmRleAog CSAqIGNyZWF0aW9uLgogCSAqLwotCWZvciAoaW50IGkgPSAwOyBpIDwgb2xkSW5mby0+aWlfTnVt SW5kZXhBdHRyczsgaSsrKQogCXsKIAkJVHVwbGVEZXNjCWluZGV4VHVwRGVzYyA9IFJlbGF0aW9u R2V0RGVzY3IoaW5kZXhSZWxhdGlvbik7Ci0JCUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxl RGVzY0F0dHIoaW5kZXhUdXBEZXNjLCBpKTsKIAotCQlpbmRleENvbE5hbWVzID0gbGFwcGVuZChp bmRleENvbE5hbWVzLCBOYW1lU3RyKGF0dC0+YXR0bmFtZSkpOwotCQluZXdJbmZvLT5paV9JbmRl eEF0dHJOdW1iZXJzW2ldID0gb2xkSW5mby0+aWlfSW5kZXhBdHRyTnVtYmVyc1tpXTsKKwkJZm9y IChpbnQgaSA9IDA7IGkgPCBvbGRJbmZvLT5paV9OdW1JbmRleEF0dHJzOyBpKyspCisJCXsKKwkJ CUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIoaW5kZXhUdXBEZXNjLCBpKTsK KworCQkJaW5kZXhDb2xOYW1lcyA9IGxhcHBlbmQoaW5kZXhDb2xOYW1lcywgTmFtZVN0cihhdHQt PmF0dG5hbWUpKTsKKwkJCW5ld0luZm8tPmlpX0luZGV4QXR0ck51bWJlcnNbaV0gPSBvbGRJbmZv LT5paV9JbmRleEF0dHJOdW1iZXJzW2ldOworCQl9CiAJfQogCiAJLyogRXh0cmFjdCBvcGNsYXNz IG9wdGlvbnMgZm9yIGVhY2ggYXR0cmlidXRlICovCkBAIC0xNDkwLDYgKzE1MDgsMTU3IEBAIGlu ZGV4X2NyZWF0ZV9jb3B5KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwgdWludDE2IGZsYWdzLAogCXJl dHVybiBuZXdJbmRleElkOwogfQogCisvKgorICogaW5kZXhfY29uY3VycmVudGx5X2NyZWF0ZV9h dXgKKyAqCisgKiBDcmVhdGUgY29uY3VycmVudGx5IGFuIGF1eGlsaWFyeSBpbmRleCBiYXNlZCBv biB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgb25lCisgKiBwcm92aWRlZCBieSBjYWxsZXIuICBUaGUg aW5kZXggaXMgaW5zZXJ0ZWQgaW50byBjYXRhbG9ncyBhbmQgbmVlZHMgdG8gYmUKKyAqIGJ1aWx0 IGxhdGVyIG9uLiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgY29uY3VycmVudCByZWluZGV4IHByb2Nl c3NpbmcuCisgKgorICogInRhYmxlc3BhY2VPaWQiIGlzIHRoZSB0YWJsZXNwYWNlIHRvIHVzZSBm b3IgdGhpcyBpbmRleC4KKyAqLworT2lkCitpbmRleF9jb25jdXJyZW50bHlfY3JlYXRlX2F1eChS ZWxhdGlvbiBoZWFwUmVsYXRpb24sIE9pZCBtYWluSW5kZXhJZCwKKwkJCQkJCQkgICBPaWQgdGFi bGVzcGFjZU9pZCwgY29uc3QgY2hhciAqbmV3TmFtZSkKK3sKKwlSZWxhdGlvbglpbmRleFJlbGF0 aW9uOworCUluZGV4SW5mbyAgKm9sZEluZm8sCisJCQkqbmV3SW5mbzsKKwlPaWQJCQluZXdJbmRl eElkID0gSW52YWxpZE9pZDsKKwlIZWFwVHVwbGUJaW5kZXhUdXBsZTsKKworCUxpc3QJICAgKmlu ZGV4Q29sTmFtZXMgPSBOSUw7CisJTGlzdAkgICAqaW5kZXhFeHBycyA9IE5JTDsKKwlMaXN0CSAg ICppbmRleFByZWRzID0gTklMOworCisJT2lkICphdXhPcGNsYXNzSWRzOworCWludDE2ICphdXhD b2xvcHRpb25zOworCisJaW5kZXhSZWxhdGlvbiA9IGluZGV4X29wZW4obWFpbkluZGV4SWQsIFJv d0V4Y2x1c2l2ZUxvY2spOworCisJLyogVGhlIG5ldyBpbmRleCBuZWVkcyBzb21lIGluZm9ybWF0 aW9uIGZyb20gdGhlIG9sZCBpbmRleCAqLworCW9sZEluZm8gPSBCdWlsZEluZGV4SW5mbyhpbmRl eFJlbGF0aW9uKTsKKworCS8qCisJICogQnVpbGQgb2YgYW4gYXV4aWxpYXJ5IGluZGV4IHdpdGgg ZXhjbHVzaW9uIGNvbnN0cmFpbnRzIGlzIG5vdAorCSAqIHN1cHBvcnRlZC4KKwkgKi8KKwlpZiAo b2xkSW5mby0+aWlfRXhjbHVzaW9uT3BzICE9IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJ KGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkJZXJybXNnKCJh dXhpbGlhcnkgaW5kZXggY3JlYXRpb24gZm9yIGV4Y2x1c2lvbiBjb25zdHJhaW50cyBpcyBub3Qg c3VwcG9ydGVkIikpKTsKKworCS8qIEdldCB0aGUgYXJyYXkgb2YgY2xhc3MgYW5kIGNvbHVtbiBv cHRpb25zIElEcyBmcm9tIGluZGV4IGluZm8gKi8KKwlpbmRleFR1cGxlID0gU2VhcmNoU3lzQ2Fj aGUxKElOREVYUkVMSUQsIE9iamVjdElkR2V0RGF0dW0obWFpbkluZGV4SWQpKTsKKwlpZiAoIUhl YXBUdXBsZUlzVmFsaWQoaW5kZXhUdXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAg ZmFpbGVkIGZvciBpbmRleCAldSIsIG1haW5JbmRleElkKTsKKworCisJLyoKKwkgKiBGZXRjaCB0 aGUgbGlzdCBvZiBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlcyBkaXJlY3RseSBmcm9tIHRoZQor CSAqIGNhdGFsb2dzLiAgVGhpcyBjYW5ub3QgcmVseSBvbiB0aGUgaW5mb3JtYXRpb24gZnJvbSBJ bmRleEluZm8gb2YgdGhlCisJICogb2xkIGluZGV4IGFzIHRoZXNlIGhhdmUgYmVlbiBmbGF0dGVu ZWQgZm9yIHRoZSBwbGFubmVyLgorCSAqLworCWlmIChvbGRJbmZvLT5paV9FeHByZXNzaW9ucyAh PSBOSUwpCisJeworCQlEYXR1bQkJZXhwckRhdHVtOworCQljaGFyCSAgICpleHByU3RyaW5nOwor CisJCWV4cHJEYXR1bSA9IFN5c0NhY2hlR2V0QXR0ck5vdE51bGwoSU5ERVhSRUxJRCwgaW5kZXhU dXBsZSwKKwkJCQkJCQkJCQkgICBBbnVtX3BnX2luZGV4X2luZGV4cHJzKTsKKwkJZXhwclN0cmlu ZyA9IFRleHREYXR1bUdldENTdHJpbmcoZXhwckRhdHVtKTsKKwkJaW5kZXhFeHBycyA9IChMaXN0 ICopIHN0cmluZ1RvTm9kZShleHByU3RyaW5nKTsKKwkJcGZyZWUoZXhwclN0cmluZyk7CisJfQor CWlmIChvbGRJbmZvLT5paV9QcmVkaWNhdGUgIT0gTklMKQorCXsKKwkJRGF0dW0JCXByZWREYXR1 bTsKKwkJY2hhcgkgICAqcHJlZFN0cmluZzsKKworCQlwcmVkRGF0dW0gPSBTeXNDYWNoZUdldEF0 dHJOb3ROdWxsKElOREVYUkVMSUQsIGluZGV4VHVwbGUsCisJCQkJCQkJCQkJICAgQW51bV9wZ19p bmRleF9pbmRwcmVkKTsKKwkJcHJlZFN0cmluZyA9IFRleHREYXR1bUdldENTdHJpbmcocHJlZERh dHVtKTsKKwkJaW5kZXhQcmVkcyA9IChMaXN0ICopIHN0cmluZ1RvTm9kZShwcmVkU3RyaW5nKTsK KworCQkvKiBBbHNvIGNvbnZlcnQgdG8gaW1wbGljaXQtQU5EIGZvcm1hdCAqLworCQlpbmRleFBy ZWRzID0gbWFrZV9hbmRzX2ltcGxpY2l0KChFeHByICopIGluZGV4UHJlZHMpOworCQlwZnJlZShw cmVkU3RyaW5nKTsKKwl9CisKKwkvKgorCSAqIEJ1aWxkIHRoZSBpbmRleCBpbmZvcm1hdGlvbiBm b3IgdGhlIG5ldyBpbmRleC4gIE5vdGUgdGhhdCByZWJ1aWxkIG9mCisJICogaW5kZXhlcyB3aXRo IGV4Y2x1c2lvbiBjb25zdHJhaW50cyBpcyBub3Qgc3VwcG9ydGVkLCBoZW5jZSB0aGVyZSBpcyBu bworCSAqIG5lZWQgdG8gZmlsbCBhbGwgdGhlIGlpX0V4Y2x1c2lvbiogZmllbGRzLgorCSAqLwor CW5ld0luZm8gPSBtYWtlSW5kZXhJbmZvKG9sZEluZm8tPmlpX051bUluZGV4QXR0cnMsCisJCQkJ CQkJb2xkSW5mby0+aWlfTnVtSW5kZXhLZXlBdHRycywKKwkJCQkJCQlTVElSX0FNX09JRCwgLyog c3BlY2lhbCBBTSBmb3IgYXV4IGluZGV4ZXMgKi8KKwkJCQkJCQlpbmRleEV4cHJzLAorCQkJCQkJ CWluZGV4UHJlZHMsCisJCQkJCQkJZmFsc2UsCS8qIGF1eCBpbmRleCBhcmUgbm90IHVuaXF1ZSAq LworCQkJCQkJCW9sZEluZm8tPmlpX051bGxzTm90RGlzdGluY3QsCisJCQkJCQkJZmFsc2UsCS8q IG5vdCByZWFkeSBmb3IgaW5zZXJ0cyAqLworCQkJCQkJCXRydWUsCisJCQkJCQkJZmFsc2UsCS8q IGF1eCBhcmUgbm90IHN1bW1hcml6aW5nICovCisJCQkJCQkJZmFsc2UsCS8qIGF1eCBhcmUgbm90 IHdpdGhvdXQgb3ZlcmxhcHMgKi8KKwkJCQkJCQl0cnVlCS8qIGF1eGlsaWFyeSAqLyk7CisKKwkv KgorCSAqIEV4dHJhY3QgdGhlIGxpc3Qgb2YgY29sdW1uIG5hbWVzIGFuZCB0aGUgY29sdW1uIG51 bWJlcnMgZm9yIHRoZSBuZXcKKwkgKiBpbmRleCBpbmZvcm1hdGlvbi4gIEFsbCB0aGlzIGluZm9y bWF0aW9uIHdpbGwgYmUgdXNlZCBmb3IgdGhlIGluZGV4CisJICogY3JlYXRpb24uCisJICovCisJ eworCQlUdXBsZURlc2MJaW5kZXhUdXBEZXNjID0gUmVsYXRpb25HZXREZXNjcihpbmRleFJlbGF0 aW9uKTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IG9sZEluZm8tPmlpX051bUluZGV4QXR0cnM7 IGkrKykKKwkJeworCQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ID0gVHVwbGVEZXNjQXR0cihpbmRl eFR1cERlc2MsIGkpOworCisJCQlpbmRleENvbE5hbWVzID0gbGFwcGVuZChpbmRleENvbE5hbWVz LCBOYW1lU3RyKGF0dC0+YXR0bmFtZSkpOworCQkJbmV3SW5mby0+aWlfSW5kZXhBdHRyTnVtYmVy c1tpXSA9IG9sZEluZm8tPmlpX0luZGV4QXR0ck51bWJlcnNbaV07CisJCX0KKwl9CisKKwlhdXhP cGNsYXNzSWRzID0gcGFsbG9jMChzaXplb2YoT2lkKSAqIG5ld0luZm8tPmlpX051bUluZGV4QXR0 cnMpOworCWF1eENvbG9wdGlvbnMgPSBwYWxsb2MwKHNpemVvZihpbnQxNikgKiBuZXdJbmZvLT5p aV9OdW1JbmRleEF0dHJzKTsKKworCS8qIEZpbGwgd2l0aCAiYW55IG9wcyIgKi8KKwlmb3IgKGlu dCBpID0gMDsgaSA8IG5ld0luZm8tPmlpX051bUluZGV4QXR0cnM7IGkrKykKKwl7CisJCWF1eE9w Y2xhc3NJZHNbaV0gPSBBTllfU1RJUl9PUFNfT0lEOworCQlhdXhDb2xvcHRpb25zW2ldID0gMDsK Kwl9CisKKwluZXdJbmRleElkID0gaW5kZXhfY3JlYXRlKGhlYXBSZWxhdGlvbiwKKwkJCQkJCQkg IG5ld05hbWUsCisJCQkJCQkJICBJbnZhbGlkT2lkLCAgICAvKiBpbmRleFJlbGF0aW9uSWQgKi8K KwkJCQkJCQkgIEludmFsaWRPaWQsICAgIC8qIHBhcmVudEluZGV4UmVsaWQgKi8KKwkJCQkJCQkg IEludmFsaWRPaWQsICAgIC8qIHBhcmVudENvbnN0cmFpbnRJZCAqLworCQkJCQkJCSAgSW52YWxp ZFJlbEZpbGVOdW1iZXIsIC8qIHJlbEZpbGVOdW1iZXIgKi8KKwkJCQkJCQkgIG5ld0luZm8sCisJ CQkJCQkJICBpbmRleENvbE5hbWVzLAorCQkJCQkJCSAgU1RJUl9BTV9PSUQsCisJCQkJCQkJICB0 YWJsZXNwYWNlT2lkLAorCQkJCQkJCSAgaW5kZXhSZWxhdGlvbi0+cmRfaW5kY29sbGF0aW9uLAor CQkJCQkJCSAgYXV4T3BjbGFzc0lkcywKKwkJCQkJCQkgIE5VTEwsCisJCQkJCQkJICBhdXhDb2xv cHRpb25zLAorCQkJCQkJCSAgTlVMTCwKKwkJCQkJCQkgIChEYXR1bSkgMCwKKwkJCQkJCQkgIElO REVYX0NSRUFURV9TS0lQX0JVSUxEIHwgSU5ERVhfQ1JFQVRFX0NPTkNVUlJFTlQgfCBJTkRFWF9D UkVBVEVfQVVYSUxJQVJZLAorCQkJCQkJCSAgMCwKKwkJCQkJCQkgIHRydWUsIC8qIGFsbG93IHRh YmxlIHRvIGJlIGEgc3lzdGVtIGNhdGFsb2c/ICovCisJCQkJCQkJICBmYWxzZSwgICAgLyogaXNf aW50ZXJuYWw/ICovCisJCQkJCQkJICBOVUxMKTsKKworCS8qIENsb3NlIHRoZSByZWxhdGlvbnMg dXNlZCBhbmQgY2xlYW4gdXAgKi8KKwlpbmRleF9jbG9zZShpbmRleFJlbGF0aW9uLCBOb0xvY2sp OworCVJlbGVhc2VTeXNDYWNoZShpbmRleFR1cGxlKTsKKworCXJldHVybiBuZXdJbmRleElkOwor fQorCiAvKgogICogaW5kZXhfY29uY3VycmVudGx5X2J1aWxkCiAgKgpAQCAtMjQ3MCw3ICsyNjM5 LDggQEAgQnVpbGRJbmRleEluZm8oUmVsYXRpb24gaW5kZXgpCiAJCQkJCSAgIGluZGV4U3RydWN0 LT5pbmRpc3JlYWR5LAogCQkJCQkgICBmYWxzZSwKIAkJCQkJICAgaW5kZXgtPnJkX2luZGFtLT5h bXN1bW1hcml6aW5nLAotCQkJCQkgICBpbmRleFN0cnVjdC0+aW5kaXNleGNsdXNpb24gJiYgaW5k ZXhTdHJ1Y3QtPmluZGlzdW5pcXVlKTsKKwkJCQkJICAgaW5kZXhTdHJ1Y3QtPmluZGlzZXhjbHVz aW9uICYmIGluZGV4U3RydWN0LT5pbmRpc3VuaXF1ZSwKKwkJCQkJICAgaW5kZXgtPnJkX3JlbC0+ cmVsYW0gPT0gU1RJUl9BTV9PSUQgLyogYXV4aWxpYXJ5IGlmZiBTVElSICovKTsKIAogCS8qIGZp bGwgaW4gYXR0cmlidXRlIG51bWJlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtQXR0czsgaSsr KQpAQCAtMjUzMCw3ICsyNzAwLDggQEAgQnVpbGREdW1teUluZGV4SW5mbyhSZWxhdGlvbiBpbmRl eCkKIAkJCQkJICAgaW5kZXhTdHJ1Y3QtPmluZGlzcmVhZHksCiAJCQkJCSAgIGZhbHNlLAogCQkJ CQkgICBpbmRleC0+cmRfaW5kYW0tPmFtc3VtbWFyaXppbmcsCi0JCQkJCSAgIGluZGV4U3RydWN0 LT5pbmRpc2V4Y2x1c2lvbiAmJiBpbmRleFN0cnVjdC0+aW5kaXN1bmlxdWUpOworCQkJCQkgICBp bmRleFN0cnVjdC0+aW5kaXNleGNsdXNpb24gJiYgaW5kZXhTdHJ1Y3QtPmluZGlzdW5pcXVlLAor CQkJCQkgICBpbmRleC0+cmRfcmVsLT5yZWxhbSA9PSBTVElSX0FNX09JRCAvKiBhdXhpbGlhcnkg aWZmIFNUSVIgKi8pOwogCiAJLyogZmlsbCBpbiBhdHRyaWJ1dGUgbnVtYmVycyAqLwogCWZvciAo aSA9IDA7IGkgPCBudW1BdHRzOyBpKyspCkBAIC0zMzA5LDEyICszNDgwLDIxIEBAIEluZGV4Q2hl Y2tFeGNsdXNpb24oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogICoKICAqIFdlIGRvIGEgY29uY3Vy cmVudCBpbmRleCBidWlsZCBieSBmaXJzdCBpbnNlcnRpbmcgdGhlIGNhdGFsb2cgZW50cnkgZm9y IHRoZQogICogaW5kZXggdmlhIGluZGV4X2NyZWF0ZSgpLCBtYXJraW5nIGl0IG5vdCBpbmRpc3Jl YWR5IGFuZCBub3QgaW5kaXN2YWxpZC4KKyAqIFRoZW4gd2UgY3JlYXRlIHNwZWNpYWwgYXV4aWxp YXJ5IGluZGV4IHRoZSBzYW1lIHdheS4gSXQgYmFzZWQgb24gU1RJUiBBTS4KICAqIFRoZW4gd2Ug Y29tbWl0IG91ciB0cmFuc2FjdGlvbiBhbmQgc3RhcnQgYSBuZXcgb25lLCB0aGVuIHdlIHdhaXQg Zm9yIGFsbAogICogdHJhbnNhY3Rpb25zIHRoYXQgY291bGQgaGF2ZSBiZWVuIG1vZGlmeWluZyB0 aGUgdGFibGUgdG8gdGVybWluYXRlLiAgTm93Ci0gKiB3ZSBrbm93IHRoYXQgYW55IHN1YnNlcXVl bnRseS1zdGFydGVkIHRyYW5zYWN0aW9ucyB3aWxsIHNlZSB0aGUgaW5kZXggYW5kCisgKiB3ZSBr bm93IHRoYXQgYW55IHN1YnNlcXVlbnRseS1zdGFydGVkIHRyYW5zYWN0aW9ucyB3aWxsIHNlZSBp bmRleGVzIGFuZAogICogaG9ub3IgaXRzIGNvbnN0cmFpbnRzIG9uIEhPVCB1cGRhdGVzOyBzbyB3 aGlsZSBleGlzdGluZyBIT1QtY2hhaW5zIG1pZ2h0CiAgKiBiZSBicm9rZW4gd2l0aCByZXNwZWN0 IHRvIHRoZSBpbmRleCwgbm8gY3VycmVudGx5IGxpdmUgdHVwbGUgd2lsbCBoYXZlIGFuCi0gKiBp bmNvbXBhdGlibGUgSE9UIHVwZGF0ZSBkb25lIHRvIGl0LiAgV2Ugbm93IGJ1aWxkIHRoZSBpbmRl eCBub3JtYWxseSB2aWEKKyAqIGluY29tcGF0aWJsZSBIT1QgdXBkYXRlIGRvbmUgdG8gaXQuCisg KgorICogQWZ0ZXIgdGhhdCwgd2UgYnVpbGQgdGhlIGF1eGlsaWFyeSBpbmRleC4gSXQgaXMgZmFz dCBvcGVyYXRpb24gd2l0aG91dCBhbnkgYWN0dWFsCisgKiB0YWJsZSBzY2FuLiBBcyByZXN1bHQs IHdlIGhhdmUgZW1wdHkgU1RJUiBpbmRleC4gV2UgY29tbWl0IHRyYW5zYWN0aW9uIGFuZAorICog YWdhaW4gd2FpdCBmb3IgYWxsIHRyYW5zYWN0aW9ucyB0aGF0IGNvdWxkIGhhdmUgYmVlbiBtb2Rp ZnlpbmcgdGhlIHRhYmxlCisgKiB0byB0ZXJtaW5hdGUuIEF0IHRoYXQgbW9tZW50IGFsbCBuZXcg dHVwbGVzIGFyZSBnb2luZyB0byBiZSBpbnNlcnRlZCBpbnRvCisgKiBhdXhpbGlhcnkgaW5kZXgu CisgKgorICogV2Ugbm93IGJ1aWxkIHRoZSBpbmRleCBub3JtYWxseSB2aWEKICAqIGluZGV4X2J1 aWxkKCksIHdoaWxlIGhvbGRpbmcgYSB3ZWFrIGxvY2sgdGhhdCBhbGxvd3MgY29uY3VycmVudAog ICogaW5zZXJ0L3VwZGF0ZS9kZWxldGUuICBBbHNvLCB3ZSBpbmRleCBvbmx5IHR1cGxlcyB0aGF0 IGFyZSB2YWxpZAogICogYXMgb2YgdGhlIHN0YXJ0IG9mIHRoZSBzY2FuIChzZWUgdGFibGVfaW5k ZXhfYnVpbGRfc2NhbiksIHdoZXJlYXMgYSBub3JtYWwKQEAgLTMzMjQsMTQgKzM1MDQsMTcgQEAg SW5kZXhDaGVja0V4Y2x1c2lvbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAgKiBib2d1cyB1bmlx dWUtaW5kZXggZmFpbHVyZXMgZHVlIHRvIGNvbmN1cnJlbnQgVVBEQVRFcyAod2UgbWlnaHQgc2Vl CiAgKiBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIHNhbWUgcm93IGFzIGJlaW5nIHZhbGlkIHdo ZW4gd2UgcGFzcyBvdmVyIHRoZW0sCiAgKiBpZiB3ZSB1c2VkIEhlYXBUdXBsZVNhdGlzZmllc1Zh Y3V1bSkuICBUaGlzIGxlYXZlcyB1cyB3aXRoIGFuIGluZGV4IHRoYXQKLSAqIGRvZXMgbm90IGNv bnRhaW4gYW55IHR1cGxlcyBhZGRlZCB0byB0aGUgdGFibGUgd2hpbGUgd2UgYnVpbHQgdGhlIGlu ZGV4LgorICogZG9lcyBub3QgY29udGFpbiBhbnkgdHVwbGVzIGFkZGVkIHRvIHRoZSB0YWJsZSB3 aGlsZSB3ZSBidWlsdCB0aGUgaW5kZXgKKyAqIChidXQgdGhlc2UgdHVwbGVzIGNvbnRhaW5lZCBp biBhdXhpbGlhcnkgaW5kZXgpLgogICoKICAqIE5leHQsIHdlIG1hcmsgdGhlIGluZGV4ICJpbmRp c3JlYWR5IiAoYnV0IHN0aWxsIG5vdCAiaW5kaXN2YWxpZCIpIGFuZAotICogY29tbWl0IHRoZSBz ZWNvbmQgdHJhbnNhY3Rpb24gYW5kIHN0YXJ0IGEgdGhpcmQuICBBZ2FpbiB3ZSB3YWl0IGZvciBh bGwKKyAqIGNvbW1pdCB0aGUgdGhpcmQgdHJhbnNhY3Rpb24gYW5kIHN0YXJ0IGEgZm91cnRoLiAg QWdhaW4gd2Ugd2FpdCBmb3IgYWxsCiAgKiB0cmFuc2FjdGlvbnMgdGhhdCBjb3VsZCBoYXZlIGJl ZW4gbW9kaWZ5aW5nIHRoZSB0YWJsZSB0byB0ZXJtaW5hdGUuICBOb3cKICAqIHdlIGtub3cgdGhh dCBhbnkgc3Vic2VxdWVudGx5LXN0YXJ0ZWQgdHJhbnNhY3Rpb25zIHdpbGwgc2VlIHRoZSBpbmRl eCBhbmQKLSAqIGluc2VydCB0aGVpciBuZXcgdHVwbGVzIGludG8gaXQuICBXZSB0aGVuIHRha2Ug YSBuZXcgcmVmZXJlbmNlIHNuYXBzaG90Ci0gKiB3aGljaCBpcyBwYXNzZWQgdG8gdmFsaWRhdGVf aW5kZXgoKS4gIEFueSB0dXBsZXMgdGhhdCBhcmUgdmFsaWQgYWNjb3JkaW5nCisgKiBpbnNlcnQg dGhlaXIgbmV3IHR1cGxlcyBpbnRvIGl0LiBBdCB0aGUgc2FtZSBtb21lbnQgd2UgY2xlYXIgImlu ZGlzcmVhZHkiIGZvcgorICogYXV4aWxpYXJ5IGluZGV4LCBzaW5jZSBpdCBpcyBubyBtb3JlIHJl cXVpcmVkIHRvIGJlIHVwZGF0ZWQuCisgKgorICogV2UgdGhlbiB0YWtlIGEgbmV3IHJlZmVyZW5j ZSBzbmFwc2hvdCwgYW55IHR1cGxlcyB0aGF0IGFyZSB2YWxpZCBhY2NvcmRpbmcKICAqIHRvIHRo aXMgc25hcCwgYnV0IGFyZSBub3QgaW4gdGhlIGluZGV4LCBtdXN0IGJlIGFkZGVkIHRvIHRoZSBp bmRleC4KICAqIChBbnkgdHVwbGVzIGNvbW1pdHRlZCBsaXZlIGFmdGVyIHRoZSBzbmFwIHdpbGwg YmUgaW5zZXJ0ZWQgaW50byB0aGUKICAqIGluZGV4IGJ5IHRoZWlyIG9yaWdpbmF0aW5nIHRyYW5z YWN0aW9uLiAgQW55IHR1cGxlcyBjb21taXR0ZWQgZGVhZCBiZWZvcmUKQEAgLTMzMzksMTIgKzM1 MjIsMTQgQEAgSW5kZXhDaGVja0V4Y2x1c2lvbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAgKiB0 aGF0IG1pZ2h0IGNhcmUgYWJvdXQgdGhlbSBiZWZvcmUgd2UgbWFyayB0aGUgaW5kZXggdmFsaWQu KQogICoKICAqIHZhbGlkYXRlX2luZGV4KCkgd29ya3MgYnkgZmlyc3QgZ2F0aGVyaW5nIGFsbCB0 aGUgVElEcyBjdXJyZW50bHkgaW4gdGhlCi0gKiBpbmRleCwgdXNpbmcgYSBidWxrZGVsZXRlIGNh bGxiYWNrIHRoYXQganVzdCBzdG9yZXMgdGhlIFRJRHMgYW5kIGRvZXNuJ3QKKyAqIGluZGV4ZXMs IHVzaW5nIGEgYnVsa2RlbGV0ZSBjYWxsYmFjayB0aGF0IGp1c3Qgc3RvcmVzIHRoZSBUSURzIGFu ZCBkb2Vzbid0CiAgKiBldmVyIHNheSAiZGVsZXRlIGl0Ii4gIChUaGlzIHNob3VsZCBiZSBmYXN0 ZXIgdGhhbiBhIHBsYWluIGluZGV4c2NhbjsKICAqIGFsc28sIG5vdCBhbGwgaW5kZXggQU1zIHN1 cHBvcnQgZnVsbC1pbmRleCBpbmRleHNjYW4uKSAgVGhlbiB3ZSBzb3J0IHRoZQotICogVElEcywg YW5kIGZpbmFsbHkgc2NhbiB0aGUgdGFibGUgZG9pbmcgYSAibWVyZ2Ugam9pbiIgYWdhaW5zdCB0 aGUgVElEIGxpc3QKLSAqIHRvIHNlZSB3aGljaCB0dXBsZXMgYXJlIG1pc3NpbmcgZnJvbSB0aGUg aW5kZXguICBUaHVzIHdlIHdpbGwgZW5zdXJlIHRoYXQKLSAqIGFsbCB0dXBsZXMgdmFsaWQgYWNj b3JkaW5nIHRvIHRoZSByZWZlcmVuY2Ugc25hcHNob3QgYXJlIGluIHRoZSBpbmRleC4KKyAqIFRJ RHMgb2YgYm90aCBhdXhpbGlhcnkgYW5kIHRhcmdldCBpbmRleGVzLCBhbmQgZG9pbmcgYSAibWVy Z2Ugam9pbiIgYWdhaW5zdAorICogdGhlIFRJRCBsaXN0cyB0byBzZWUgd2hpY2ggdHVwbGVzIGZy b20gYXV4aWxpYXJ5IGluZGV4IGFyZSBtaXNzaW5nIGZyb20gdGhlCisgKiB0YXJnZXQgaW5kZXgu ICBUaHVzIHdlIHdpbGwgZW5zdXJlIHRoYXQgYWxsIHR1cGxlcyB2YWxpZCBhY2NvcmRpbmcgdG8g dGhlCisgKiByZWZlcmVuY2Ugc25hcHNob3QgYXJlIGluIHRoZSBpbmRleC4gTm90aWNlIHdlIG5l ZWQgdG8gZG8gYnVsa2RlbGV0ZSBpbiB0aGUKKyAqIHBhcnRpY3VsYXIgb3JkZXI6IGF1eGlsaWFy eSBmaXJzdCwgdGFyZ2V0IGxhc3QuCiAgKgogICogQnVpbGRpbmcgYSB1bmlxdWUgaW5kZXggdGhp cyB3YXkgaXMgdHJpY2t5OiB3ZSBtaWdodCB0cnkgdG8gaW5zZXJ0IGEKICAqIHR1cGxlIHRoYXQg aXMgYWxyZWFkeSBkZWFkIG9yIGlzIGluIHByb2Nlc3Mgb2YgYmVpbmcgZGVsZXRlZCwgYW5kIHdl CkBAIC0zMzYyLDIyICszNTQ3LDI2IEBAIEluZGV4Q2hlY2tFeGNsdXNpb24oUmVsYXRpb24gaGVh cFJlbGF0aW9uLAogICogbm90IGluZGV4KS4gIFRoZW4gd2UgbWFyayB0aGUgaW5kZXggImluZGlz dmFsaWQiIGFuZCBjb21taXQuICBTdWJzZXF1ZW50CiAgKiB0cmFuc2FjdGlvbnMgd2lsbCBiZSBh YmxlIHRvIHVzZSBpdCBmb3IgcXVlcmllcy4KICAqCi0gKiBEb2luZyB0d28gZnVsbCB0YWJsZSBz Y2FucyBpcyBhIGJydXRlLWZvcmNlIHN0cmF0ZWd5LiAgV2UgY291bGQgdHJ5IHRvIGJlCi0gKiBj bGV2ZXJlciwgZWcgc3RvcmluZyBuZXcgdHVwbGVzIGluIGEgc3BlY2lhbCBhcmVhIG9mIHRoZSB0 YWJsZSAocGVyaGFwcwotICogbWFraW5nIHRoZSB0YWJsZSBhcHBlbmQtb25seSBieSBzZXR0aW5n IHVzZV9mc20pLiAgSG93ZXZlciB0aGF0IHdvdWxkCi0gKiBhZGQgeWV0IG1vcmUgbG9ja2luZyBp c3N1ZXMuCisgKiBBbHNvLCBzb21lIGFjdGlvbnMgdG8gY29uY3VycmVudCBkcm9wIHRoZSBhdXhp bGlhcnkgaW5kZXggYXJlIHBlcmZvcm1lZC4KICAqLwogdm9pZAotdmFsaWRhdGVfaW5kZXgoT2lk IGhlYXBJZCwgT2lkIGluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90KQordmFsaWRhdGVfaW5kZXgo T2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIE9pZCBhdXhJbmRleElkLCBTbmFwc2hvdCBzbmFwc2hv dCkKIHsKIAlSZWxhdGlvbgloZWFwUmVsYXRpb24sCi0JCQkJaW5kZXhSZWxhdGlvbjsKKwkJCQlp bmRleFJlbGF0aW9uLAorCQkJCWF1eEluZGV4UmVsYXRpb247CiAJSW5kZXhJbmZvICAqaW5kZXhJ bmZvOwotCUluZGV4VmFjdXVtSW5mbyBpdmluZm87Ci0JVmFsaWRhdGVJbmRleFN0YXRlIHN0YXRl OworCUluZGV4VmFjdXVtSW5mbyBpdmluZm8sIGF1eGl2aW5mbzsKKwlWYWxpZGF0ZUluZGV4U3Rh dGUgc3RhdGUsIGF1eFN0YXRlOwogCU9pZAkJCXNhdmVfdXNlcmlkOwogCWludAkJCXNhdmVfc2Vj X2NvbnRleHQ7CiAJaW50CQkJc2F2ZV9uZXN0bGV2ZWw7CisJLyogVXNlIDgwJSBvZiBtYWludGVu YW5jZV93b3JrX21lbSB0byB0YXJnZXQgaW5kZXggc29ydGluZyBhbmQKKwkgKiAxMCUgcmVzdCBm b3IgYXV4aWxpYXJ5LgorCSAqCisJICogUmVzdCAxMCUgd2lsbCBiZSB1c2VkIGZvciB0dXBsZXN0 b3JlIGxhdGVyLiAqLworCWludAkJCW1haW5fd29ya19tZW1fcGFydCA9IChpbnQpKChpbnQ2NCkg bWFpbnRlbmFuY2Vfd29ya19tZW0gKiA4IC8gMTApOworCWludAkJCWF1eF93b3JrX21lbV9wYXJ0 ID0gbWFpbnRlbmFuY2Vfd29ya19tZW0gLyAxMDsKIAogCXsKIAkJY29uc3QgaW50CXByb2dyZXNz X2luZGV4W10gPSB7CkBAIC0zNDEwLDYgKzM1OTksNyBAQCB2YWxpZGF0ZV9pbmRleChPaWQgaGVh cElkLCBPaWQgaW5kZXhJZCwgU25hcHNob3Qgc25hcHNob3QpCiAJUmVzdHJpY3RTZWFyY2hQYXRo KCk7CiAKIAlpbmRleFJlbGF0aW9uID0gaW5kZXhfb3BlbihpbmRleElkLCBSb3dFeGNsdXNpdmVM b2NrKTsKKwlhdXhJbmRleFJlbGF0aW9uID0gaW5kZXhfb3BlbihhdXhJbmRleElkLCBSb3dFeGNs dXNpdmVMb2NrKTsKIAogCS8qCiAJICogRmV0Y2ggaW5mbyBuZWVkZWQgZm9yIGluZGV4X2luc2Vy dC4gIChZb3UgbWlnaHQgdGhpbmsgdGhpcyBzaG91bGQgYmUKQEAgLTM0MzQsMTUgKzM2MjQsNDkg QEAgdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIFNuYXBzaG90IHNuYXBz aG90KQogCWl2aW5mby5zdHJhdGVneSA9IE5VTEw7CiAJaXZpbmZvLnZhbGlkYXRlX2luZGV4ID0g dHJ1ZTsKIAorCS8qCisJICogQ29weSBhbGwgaW5mbyB0byBhdXhpbGlhcnkgaW5mbywgY2hhbmdp bmcgb25seSByZWxhdGlvbi4KKwkgKi8KKwlhdXhpdmluZm8gPSBpdmluZm87CisJYXV4aXZpbmZv LmluZGV4ID0gYXV4SW5kZXhSZWxhdGlvbjsKKwogCS8qCiAJICogRW5jb2RlIFRJRHMgYXMgaW50 OCB2YWx1ZXMgZm9yIHRoZSBzb3J0LCByYXRoZXIgdGhhbiBkaXJlY3RseSBzb3J0aW5nCiAJICog aXRlbSBwb2ludGVycy4gIFRoaXMgY2FuIGJlIHNpZ25pZmljYW50bHkgZmFzdGVyLCBwcmltYXJp bHkgYmVjYXVzZSBUSUQKIAkgKiBpcyBhIHBhc3MtYnktcmVmZXJlbmNlIHR5cGUgb24gYWxsIHBs YXRmb3Jtcywgd2hlcmVhcyBpbnQ4IGlzCiAJICogcGFzcy1ieS12YWx1ZSBvbiBtb3N0IHBsYXRm b3Jtcy4KIAkgKi8KKwlhdXhTdGF0ZS50dXBsZXNvcnQgPSB0dXBsZXNvcnRfYmVnaW5fZGF0dW0o SU5UOE9JRCwgSW50OExlc3NPcGVyYXRvciwKKwkJCQkJCQkJCQkgICBJbnZhbGlkT2lkLCBmYWxz ZSwKKwkJCQkJCQkJCQkgICBhdXhfd29ya19tZW1fcGFydCwKKwkJCQkJCQkJCQkgICBOVUxMLCBU VVBMRVNPUlRfTk9ORSk7CisJYXV4U3RhdGUuaHR1cHMgPSBhdXhTdGF0ZS5pdHVwcyA9IGF1eFN0 YXRlLnR1cHNfaW5zZXJ0ZWQgPSAwOworCisJKHZvaWQpIGluZGV4X2J1bGtfZGVsZXRlKCZhdXhp dmluZm8sIE5VTEwsCisJCQkJCQkJIHZhbGlkYXRlX2luZGV4X2NhbGxiYWNrLCAmYXV4U3RhdGUp OworCS8qIElmIGF1eCBpbmRleCBpcyBlbXB0eSwgbWVyZ2UgbWF5IGJlIHNraXBwZWQgKi8KKwlp ZiAoYXV4U3RhdGUuaXR1cHMgPT0gMCkKKwl7CisJCXR1cGxlc29ydF9lbmQoYXV4U3RhdGUudHVw bGVzb3J0KTsKKwkJYXV4U3RhdGUudHVwbGVzb3J0ID0gTlVMTDsKKworCQkvKiBSb2xsIGJhY2sg YW55IEdVQyBjaGFuZ2VzIGV4ZWN1dGVkIGJ5IGluZGV4IGZ1bmN0aW9ucyAqLworCQlBdEVPWGFj dF9HVUMoZmFsc2UsIHNhdmVfbmVzdGxldmVsKTsKKworCQkvKiBSZXN0b3JlIHVzZXJpZCBhbmQg c2VjdXJpdHkgY29udGV4dCAqLworCQlTZXRVc2VySWRBbmRTZWNDb250ZXh0KHNhdmVfdXNlcmlk LCBzYXZlX3NlY19jb250ZXh0KTsKKworCQkvKiBDbG9zZSByZWxzLCBidXQga2VlcCBsb2NrcyAq LworCQlpbmRleF9jbG9zZShhdXhJbmRleFJlbGF0aW9uLCBOb0xvY2spOworCQlpbmRleF9jbG9z ZShpbmRleFJlbGF0aW9uLCBOb0xvY2spOworCQl0YWJsZV9jbG9zZShoZWFwUmVsYXRpb24sIE5v TG9jayk7CisKKwkJcmV0dXJuOworCX0KKwogCXN0YXRlLnR1cGxlc29ydCA9IHR1cGxlc29ydF9i ZWdpbl9kYXR1bShJTlQ4T0lELCBJbnQ4TGVzc09wZXJhdG9yLAogCQkJCQkJCQkJCQlJbnZhbGlk T2lkLCBmYWxzZSwKLQkJCQkJCQkJCQkJbWFpbnRlbmFuY2Vfd29ya19tZW0sCisJCQkJCQkJCQkJ CShpbnQpIG1haW5fd29ya19tZW1fcGFydCwKIAkJCQkJCQkJCQkJTlVMTCwgVFVQTEVTT1JUX05P TkUpOwogCXN0YXRlLmh0dXBzID0gc3RhdGUuaXR1cHMgPSBzdGF0ZS50dXBzX2luc2VydGVkID0g MDsKIApAQCAtMzQ2NSwyNyArMzY4OSwzMCBAQCB2YWxpZGF0ZV9pbmRleChPaWQgaGVhcElkLCBP aWQgaW5kZXhJZCwgU25hcHNob3Qgc25hcHNob3QpCiAJCXBnc3RhdF9wcm9ncmVzc191cGRhdGVf bXVsdGlfcGFyYW0oMywgcHJvZ3Jlc3NfaW5kZXgsIHByb2dyZXNzX3ZhbHMpOwogCX0KIAl0dXBs ZXNvcnRfcGVyZm9ybXNvcnQoc3RhdGUudHVwbGVzb3J0KTsKKwl0dXBsZXNvcnRfcGVyZm9ybXNv cnQoYXV4U3RhdGUudHVwbGVzb3J0KTsKIAogCS8qCi0JICogTm93IHNjYW4gdGhlIGhlYXAgYW5k ICJtZXJnZSIgaXQgd2l0aCB0aGUgaW5kZXgKKwkgKiBOb3cgbWVyZ2UgYm90aCBpbmRleGVzCiAJ ICovCiAJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhfUEhB U0UsCi0JCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfVkFMSURBVEVfVEFCTEVTQ0FO KTsKKwkJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9WQUxJREFURV9JRFhNRVJHRSk7 CiAJdGFibGVfaW5kZXhfdmFsaWRhdGVfc2NhbihoZWFwUmVsYXRpb24sCiAJCQkJCQkJICBpbmRl eFJlbGF0aW9uLAogCQkJCQkJCSAgaW5kZXhJbmZvLAogCQkJCQkJCSAgc25hcHNob3QsCi0JCQkJ CQkJICAmc3RhdGUpOworCQkJCQkJCSAgJnN0YXRlLAorCQkJCQkJCSAgJmF1eFN0YXRlKTsKIAot CS8qIERvbmUgd2l0aCB0dXBsZXNvcnQgb2JqZWN0ICovCi0JdHVwbGVzb3J0X2VuZChzdGF0ZS50 dXBsZXNvcnQpOworCS8qIFR1cGxlIHNvcnQgY2xvc2VkIGJ5IHRhYmxlX2luZGV4X3ZhbGlkYXRl X3NjYW4gKi8KKwlBc3NlcnQoc3RhdGUudHVwbGVzb3J0ID09IE5VTEwgJiYgYXV4U3RhdGUudHVw bGVzb3J0ID09IE5VTEwpOwogCiAJLyogTWFrZSBzdXJlIHRvIHJlbGVhc2UgcmVzb3VyY2VzIGNh Y2hlZCBpbiBpbmRleEluZm8gKGlmIG5lZWRlZCkuICovCiAJaW5kZXhfaW5zZXJ0X2NsZWFudXAo aW5kZXhSZWxhdGlvbiwgaW5kZXhJbmZvKTsKIAogCWVsb2coREVCVUcyLAotCQkgInZhbGlkYXRl X2luZGV4IGZvdW5kICUuMGYgaGVhcCB0dXBsZXMsICUuMGYgaW5kZXggdHVwbGVzOyBpbnNlcnRl ZCAlLjBmIG1pc3NpbmcgdHVwbGVzIiwKLQkJIHN0YXRlLmh0dXBzLCBzdGF0ZS5pdHVwcywgc3Rh dGUudHVwc19pbnNlcnRlZCk7CisJCSAidmFsaWRhdGVfaW5kZXggZmV0Y2hlZCAlLjBmIGhlYXAg dHVwbGVzLCAlLjBmIGluZGV4IHR1cGxlczsiCisJCQkJCQkiICUuMGYgYXV4IGluZGV4IHR1cGxl czsgaW5zZXJ0ZWQgJS4wZiBtaXNzaW5nIHR1cGxlcyIsCisJCSBzdGF0ZS5odHVwcywgc3RhdGUu aXR1cHMsIGF1eFN0YXRlLml0dXBzLCBzdGF0ZS50dXBzX2luc2VydGVkKTsKIAogCS8qIFJvbGwg YmFjayBhbnkgR1VDIGNoYW5nZXMgZXhlY3V0ZWQgYnkgaW5kZXggZnVuY3Rpb25zICovCiAJQXRF T1hhY3RfR1VDKGZhbHNlLCBzYXZlX25lc3RsZXZlbCk7CkBAIC0zNDk0LDYgKzM3MjEsNyBAQCB2 YWxpZGF0ZV9pbmRleChPaWQgaGVhcElkLCBPaWQgaW5kZXhJZCwgU25hcHNob3Qgc25hcHNob3Qp CiAJU2V0VXNlcklkQW5kU2VjQ29udGV4dChzYXZlX3VzZXJpZCwgc2F2ZV9zZWNfY29udGV4dCk7 CiAKIAkvKiBDbG9zZSByZWxzLCBidXQga2VlcCBsb2NrcyAqLworCWluZGV4X2Nsb3NlKGF1eElu ZGV4UmVsYXRpb24sIE5vTG9jayk7CiAJaW5kZXhfY2xvc2UoaW5kZXhSZWxhdGlvbiwgTm9Mb2Nr KTsKIAl0YWJsZV9jbG9zZShoZWFwUmVsYXRpb24sIE5vTG9jayk7CiB9CkBAIC0zNTU0LDYgKzM3 ODIsMTIgQEAgaW5kZXhfc2V0X3N0YXRlX2ZsYWdzKE9pZCBpbmRleElkLCBJbmRleFN0YXRlRmxh Z3NBY3Rpb24gYWN0aW9uKQogCQkJQXNzZXJ0KCFpbmRleEZvcm0tPmluZGlzdmFsaWQpOwogCQkJ aW5kZXhGb3JtLT5pbmRpc3ZhbGlkID0gdHJ1ZTsKIAkJCWJyZWFrOworCQljYXNlIElOREVYX0RS T1BfQ0xFQVJfUkVBRFk6CisJCQkvKiBDbGVhciBpbmRpc3JlYWR5IGR1cmluZyBhIENSRUFURSBJ TkRFWCBDT05DVVJSRU5UTFkgc2VxdWVuY2UgKi8KKwkJCUFzc2VydChpbmRleEZvcm0tPmluZGlz cmVhZHkpOworCQkJQXNzZXJ0KCFpbmRleEZvcm0tPmluZGlzdmFsaWQpOworCQkJaW5kZXhGb3Jt LT5pbmRpc3JlYWR5ID0gZmFsc2U7CisJCQlicmVhazsKIAkJY2FzZSBJTkRFWF9EUk9QX0NMRUFS X1ZBTElEOgogCiAJCQkvKgpAQCAtMzgyNSw2ICs0MDU5LDEzIEBAIHJlaW5kZXhfaW5kZXgoY29u c3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCBpbmRleElkLAogCQlpbmRleEluZm8tPmlpX0V4Y2x1 c2lvblN0cmF0cyA9IE5VTEw7CiAJfQogCisJLyogQXV4aWxpYXJ5IGluZGV4ZXMgYXJlIG5vdCBh bGxvd2VkIHRvIGJlIHJlYnVpbHQgKi8KKwlpZiAoaW5kZXhJbmZvLT5paV9BdXhpbGlhcnkpCisJ CWVyZXBvcnQoRVJST1IsCisJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRF RCksCisJCQkgZXJybXNnKCJyZWluZGV4IG9mIGF1eGlsaWFyeSBpbmRleCBcIiVzXCIgbm90IHN1 cHBvcnRlZCIsCisJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGlSZWwpKSkpOworCiAJLyog U3VwcHJlc3MgdXNlIG9mIHRoZSB0YXJnZXQgaW5kZXggd2hpbGUgcmVidWlsZGluZyBpdCAqLwog CVNldFJlaW5kZXhQcm9jZXNzaW5nKGhlYXBJZCwgaW5kZXhJZCk7CiAKQEAgLTQwNjcsNiArNDMw OCw3IEBAIHJlaW5kZXhfcmVsYXRpb24oY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxp ZCwgaW50IGZsYWdzLAogCXsKIAkJT2lkCQkJaW5kZXhPaWQgPSBsZmlyc3Rfb2lkKGluZGV4SWQp OwogCQlPaWQJCQlpbmRleE5hbWVzcGFjZUlkID0gZ2V0X3JlbF9uYW1lc3BhY2UoaW5kZXhPaWQp OworCQlPaWQJCQlpbmRleEFtID0gZ2V0X3JlbF9yZWxhbShpbmRleE9pZCk7CiAKIAkJLyoKIAkJ ICogU2tpcCBhbnkgaW52YWxpZCBpbmRleGVzIG9uIGEgVE9BU1QgdGFibGUuICBUaGVzZSBjYW4g b25seSBiZQpAQCAtNDA5Miw2ICs0MzM0LDE4IEBAIHJlaW5kZXhfcmVsYXRpb24oY29uc3QgUmVp bmRleFN0bXQgKnN0bXQsIE9pZCByZWxpZCwgaW50IGZsYWdzLAogCQkJY29udGludWU7CiAJCX0K IAorCQlpZiAoaW5kZXhBbSA9PSBTVElSX0FNX09JRCkKKwkJeworCQkJZXJlcG9ydChXQVJOSU5H LAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJCSBl cnJtc2coInNraXBwaW5nIHJlaW5kZXggb2YgYXV4aWxpYXJ5IGluZGV4IFwiJXMuJXNcIiIsCisJ CQkJCQkJZ2V0X25hbWVzcGFjZV9uYW1lKGluZGV4TmFtZXNwYWNlSWQpLAorCQkJCQkJCWdldF9y ZWxfbmFtZShpbmRleE9pZCkpKSk7CisJCQlpZiAoZmxhZ3MgJiBSRUlOREVYX1JFTF9TVVBQUkVT U19JTkRFWF9VU0UpCisJCQkJUmVtb3ZlUmVpbmRleFBlbmRpbmcoaW5kZXhPaWQpOworCQkJY29u dGludWU7CisJCX0KKwogCQlyZWluZGV4X2luZGV4KHN0bXQsIGluZGV4T2lkLCAhKGZsYWdzICYg UkVJTkRFWF9SRUxfQ0hFQ0tfQ09OU1RSQUlOVFMpLAogCQkJCQkgIHBlcnNpc3RlbmNlLCBwYXJh bXMpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwg Yi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwKaW5kZXggNzNhMWMxYzQ2NzAu LjIzZDI5MmFhY2VkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3 cy5zcWwKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCkBAIC0xNDA5 LDE2ICsxNDA5LDE3IEBAIENSRUFURSBWSUVXIHBnX3N0YXRfcHJvZ3Jlc3NfY3JlYXRlX2luZGV4 IEFTCiAgICAgICAgICAgICAgICAgICAgICAgRU5EIEFTIGNvbW1hbmQsCiAgICAgICAgIENBU0Ug Uy5wYXJhbTEwIFdIRU4gMCBUSEVOICdpbml0aWFsaXppbmcnCiAgICAgICAgICAgICAgICAgICAg ICAgIFdIRU4gMSBUSEVOICd3YWl0aW5nIGZvciB3cml0ZXJzIGJlZm9yZSBidWlsZCcKLSAgICAg ICAgICAgICAgICAgICAgICAgV0hFTiAyIFRIRU4gJ2J1aWxkaW5nIGluZGV4JyB8fAorICAgICAg ICAgICAgICAgICAgICAgICBXSEVOIDIgVEhFTiAnd2FpdGluZyBmb3Igd3JpdGVycyB0byB1c2Ug YXV4aWxpYXJ5IGluZGV4JworICAgICAgICAgICAgICAgICAgICAgICBXSEVOIDMgVEhFTiAnYnVp bGRpbmcgaW5kZXgnIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT0FMRVNDRSgoJzog JyB8fCBwZ19pbmRleGFtX3Byb2dyZXNzX3BoYXNlbmFtZShTLnBhcmFtOTo6b2lkLCBTLnBhcmFt MTEpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnKQotICAgICAgICAg ICAgICAgICAgICAgICBXSEVOIDMgVEhFTiAnd2FpdGluZyBmb3Igd3JpdGVycyBiZWZvcmUgdmFs aWRhdGlvbicKLSAgICAgICAgICAgICAgICAgICAgICAgV0hFTiA0IFRIRU4gJ2luZGV4IHZhbGlk YXRpb246IHNjYW5uaW5nIGluZGV4JwotICAgICAgICAgICAgICAgICAgICAgICBXSEVOIDUgVEhF TiAnaW5kZXggdmFsaWRhdGlvbjogc29ydGluZyB0dXBsZXMnCi0gICAgICAgICAgICAgICAgICAg ICAgIFdIRU4gNiBUSEVOICdpbmRleCB2YWxpZGF0aW9uOiBzY2FubmluZyB0YWJsZScKLSAgICAg ICAgICAgICAgICAgICAgICAgV0hFTiA3IFRIRU4gJ3dhaXRpbmcgZm9yIG9sZCBzbmFwc2hvdHMn Ci0gICAgICAgICAgICAgICAgICAgICAgIFdIRU4gOCBUSEVOICd3YWl0aW5nIGZvciByZWFkZXJz IGJlZm9yZSBtYXJraW5nIGRlYWQnCi0gICAgICAgICAgICAgICAgICAgICAgIFdIRU4gOSBUSEVO ICd3YWl0aW5nIGZvciByZWFkZXJzIGJlZm9yZSBkcm9wcGluZycKKyAgICAgICAgICAgICAgICAg ICAgICAgV0hFTiA0IFRIRU4gJ3dhaXRpbmcgZm9yIHdyaXRlcnMgYmVmb3JlIHZhbGlkYXRpb24n CisgICAgICAgICAgICAgICAgICAgICAgIFdIRU4gNSBUSEVOICdpbmRleCB2YWxpZGF0aW9uOiBz Y2FubmluZyBpbmRleCcKKyAgICAgICAgICAgICAgICAgICAgICAgV0hFTiA2IFRIRU4gJ2luZGV4 IHZhbGlkYXRpb246IHNvcnRpbmcgdHVwbGVzJworICAgICAgICAgICAgICAgICAgICAgICBXSEVO IDcgVEhFTiAnaW5kZXggdmFsaWRhdGlvbjogbWVyZ2luZyBpbmRleGVzJworICAgICAgICAgICAg ICAgICAgICAgICBXSEVOIDggVEhFTiAnd2FpdGluZyBmb3Igb2xkIHNuYXBzaG90cycKKyAgICAg ICAgICAgICAgICAgICAgICAgV0hFTiA5IFRIRU4gJ3dhaXRpbmcgZm9yIHJlYWRlcnMgYmVmb3Jl IG1hcmtpbmcgZGVhZCcKKyAgICAgICAgICAgICAgICAgICAgICAgV0hFTiAxMCBUSEVOICd3YWl0 aW5nIGZvciByZWFkZXJzIGJlZm9yZSBkcm9wcGluZycKICAgICAgICAgICAgICAgICAgICAgICAg RU5EIGFzIHBoYXNlLAogICAgICAgICBTLnBhcmFtNCBBUyBsb2NrZXJzX3RvdGFsLAogICAgICAg ICBTLnBhcmFtNSBBUyBsb2NrZXJzX2RvbmUsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9pbmRleGNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCmluZGV4 IDlhYjc0YzhkZjBhLi4yZDdiNmI3ZWI4YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvaW5kZXhjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKQEAg LTE4Myw2ICsxODMsNyBAQCBDaGVja0luZGV4Q29tcGF0aWJsZShPaWQgb2xkSWQsCiAJCQkJCSBi b29sIGlzV2l0aG91dE92ZXJsYXBzKQogewogCWJvb2wJCWlzY29uc3RyYWludDsKKwlib29sCQlp c2F1eGlsaWFyeTsKIAlPaWQJCSAgICp0eXBlSWRzOwogCU9pZAkJICAgKmNvbGxhdGlvbklkczsK IAlPaWQJCSAgICpvcGNsYXNzSWRzOwpAQCAtMjMzLDYgKzIzNCw3IEBAIENoZWNrSW5kZXhDb21w YXRpYmxlKE9pZCBvbGRJZCwKIAogCWFtY2Fub3JkZXIgPSBhbVJvdXRpbmUtPmFtY2Fub3JkZXI7 CiAJYW1zdW1tYXJpemluZyA9IGFtUm91dGluZS0+YW1zdW1tYXJpemluZzsKKwlpc2F1eGlsaWFy eSA9IGFjY2Vzc01ldGhvZElkID09IFNUSVJfQU1fT0lEOwogCiAJLyoKIAkgKiBDb21wdXRlIHRo ZSBvcGVyYXRvciBjbGFzc2VzLCBjb2xsYXRpb25zLCBhbmQgZXhjbHVzaW9uIG9wZXJhdG9ycyBm b3IKQEAgLTI0NCw3ICsyNDYsOCBAQCBDaGVja0luZGV4Q29tcGF0aWJsZShPaWQgb2xkSWQsCiAJ ICovCiAJaW5kZXhJbmZvID0gbWFrZUluZGV4SW5mbyhudW1iZXJPZkF0dHJpYnV0ZXMsIG51bWJl ck9mQXR0cmlidXRlcywKIAkJCQkJCQkgIGFjY2Vzc01ldGhvZElkLCBOSUwsIE5JTCwgZmFsc2Us IGZhbHNlLAotCQkJCQkJCSAgZmFsc2UsIGZhbHNlLCBhbXN1bW1hcml6aW5nLCBpc1dpdGhvdXRP dmVybGFwcyk7CisJCQkJCQkJICBmYWxzZSwgZmFsc2UsIGFtc3VtbWFyaXppbmcsCisJCQkJCQkJ ICBpc1dpdGhvdXRPdmVybGFwcywgaXNhdXhpbGlhcnkpOwogCXR5cGVJZHMgPSBwYWxsb2NfYXJy YXkoT2lkLCBudW1iZXJPZkF0dHJpYnV0ZXMpOwogCWNvbGxhdGlvbklkcyA9IHBhbGxvY19hcnJh eShPaWQsIG51bWJlck9mQXR0cmlidXRlcyk7CiAJb3BjbGFzc0lkcyA9IHBhbGxvY19hcnJheShP aWQsIG51bWJlck9mQXR0cmlidXRlcyk7CkBAIC01NTcsNiArNTYwLDcgQEAgRGVmaW5lSW5kZXgo UGFyc2VTdGF0ZSAqcHN0YXRlLAogewogCWJvb2wJCWNvbmN1cnJlbnQ7CiAJY2hhcgkgICAqaW5k ZXhSZWxhdGlvbk5hbWU7CisJY2hhcgkgICAqYXV4SW5kZXhSZWxhdGlvbk5hbWUgPSBOVUxMOwog CWNoYXIJICAgKmFjY2Vzc01ldGhvZE5hbWU7CiAJT2lkCQkgICAqdHlwZUlkczsKIAlPaWQJCSAg ICpjb2xsYXRpb25JZHM7CkBAIC01NjYsNiArNTcwLDcgQEAgRGVmaW5lSW5kZXgoUGFyc2VTdGF0 ZSAqcHN0YXRlLAogCU9pZAkJCW5hbWVzcGFjZUlkOwogCU9pZAkJCXRhYmxlc3BhY2VJZDsKIAlP aWQJCQljcmVhdGVkQ29uc3RyYWludElkID0gSW52YWxpZE9pZDsKKwlPaWQJCQlhdXhJbmRleFJl bGF0aW9uSWQgPSBJbnZhbGlkT2lkOwogCUxpc3QJICAgKmluZGV4Q29sTmFtZXM7CiAJTGlzdAkg ICAqYWxsSW5kZXhQYXJhbXM7CiAJUmVsYXRpb24JcmVsOwpAQCAtNTg3LDYgKzU5Miw3IEBAIERl ZmluZUluZGV4KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAlpbnQJCQludW1iZXJPZktleUF0dHJpYnV0 ZXM7CiAJVHJhbnNhY3Rpb25JZCBsaW1pdFhtaW47CiAJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOwor CU9iamVjdEFkZHJlc3MgYXV4QWRkcmVzczsKIAlMb2NrUmVsSWQJaGVhcHJlbGlkOwogCUxPQ0tU QUcJCWhlYXBsb2NrdGFnOwogCUxPQ0tNT0RFCWxvY2ttb2RlOwpAQCAtODM3LDYgKzg0MywxNSBA QCBEZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJCQkJCXN0bXQtPmV4Y2x1 ZGVPcE5hbWVzLAogCQkJCQkJCQkJCQlzdG10LT5wcmltYXJ5LAogCQkJCQkJCQkJCQlzdG10LT5p c2NvbnN0cmFpbnQpOworCS8qCisJICogU2VsZWN0IG5hbWUgZm9yIGF1eGlsaWFyeSBpbmRleAor CSAqLworCWlmIChjb25jdXJyZW50KQorCQlhdXhJbmRleFJlbGF0aW9uTmFtZSA9IENob29zZVJl bGF0aW9uTmFtZShpbmRleFJlbGF0aW9uTmFtZSwKKwkJCQkJCQkJCQkJCSAgTlVMTCwKKwkJCQkJ CQkJCQkJCSAgImNjYXV4IiwKKwkJCQkJCQkJCQkJCSAgbmFtZXNwYWNlSWQsCisJCQkJCQkJCQkJ CQkgIGZhbHNlKTsKIAogCS8qCiAJICogbG9vayB1cCB0aGUgYWNjZXNzIG1ldGhvZCwgdmVyaWZ5 IGl0IGNhbiBoYW5kbGUgdGhlIHJlcXVlc3RlZCBmZWF0dXJlcwpAQCAtOTMxLDcgKzk0Niw4IEBA IERlZmluZUluZGV4KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQkgICFjb25jdXJyZW50LAog CQkJCQkJCSAgY29uY3VycmVudCwKIAkJCQkJCQkgIGFtaXNzdW1tYXJpemluZywKLQkJCQkJCQkg IHN0bXQtPmlzd2l0aG91dG92ZXJsYXBzKTsKKwkJCQkJCQkgIHN0bXQtPmlzd2l0aG91dG92ZXJs YXBzLAorCQkJCQkJCSAgZmFsc2UpOwogCiAJdHlwZUlkcyA9IHBhbGxvY19hcnJheShPaWQsIG51 bWJlck9mQXR0cmlidXRlcyk7CiAJY29sbGF0aW9uSWRzID0gcGFsbG9jX2FycmF5KE9pZCwgbnVt YmVyT2ZBdHRyaWJ1dGVzKTsKQEAgLTE2MDMsNiArMTYxOSwxNiBAQCBEZWZpbmVJbmRleChQYXJz ZVN0YXRlICpwc3RhdGUsCiAJCXJldHVybiBhZGRyZXNzOwogCX0KIAorCS8qCisJICogSW4gY2Fz ZSBvZiBjb25jdXJyZW50IGJ1aWxkIC0gY3JlYXRlIGF1eGlsaWFyeSBpbmRleCByZWNvcmQuCisJ ICovCisJaWYgKGNvbmN1cnJlbnQpCisJeworCQlhdXhJbmRleFJlbGF0aW9uSWQgPSBpbmRleF9j b25jdXJyZW50bHlfY3JlYXRlX2F1eChyZWwsIGluZGV4UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJ dGFibGVzcGFjZUlkLCBhdXhJbmRleFJlbGF0aW9uTmFtZSk7CisJCU9iamVjdEFkZHJlc3NTZXQo YXV4QWRkcmVzcywgUmVsYXRpb25SZWxhdGlvbklkLCBhdXhJbmRleFJlbGF0aW9uSWQpOworCX0K KwogCUF0RU9YYWN0X0dVQyhmYWxzZSwgcm9vdF9zYXZlX25lc3RsZXZlbCk7CiAJU2V0VXNlcklk QW5kU2VjQ29udGV4dChyb290X3NhdmVfdXNlcmlkLCByb290X3NhdmVfc2VjX2NvbnRleHQpOwog CkBAIC0xNjMxLDExICsxNjU3LDExIEBAIERlZmluZUluZGV4KFBhcnNlU3RhdGUgKnBzdGF0ZSwK IAkvKgogCSAqIEZvciBhIGNvbmN1cnJlbnQgYnVpbGQsIGl0J3MgaW1wb3J0YW50IHRvIG1ha2Ug dGhlIGNhdGFsb2cgZW50cmllcwogCSAqIHZpc2libGUgdG8gb3RoZXIgdHJhbnNhY3Rpb25zIGJl Zm9yZSB3ZSBzdGFydCB0byBidWlsZCB0aGUgaW5kZXguIFRoYXQKLQkgKiB3aWxsIHByZXZlbnQg dGhlbSBmcm9tIG1ha2luZyBpbmNvbXBhdGlibGUgSE9UIHVwZGF0ZXMuICBUaGUgbmV3IGluZGV4 Ci0JICogd2lsbCBiZSBtYXJrZWQgbm90IGluZGlzcmVhZHkgYW5kIG5vdCBpbmRpc3ZhbGlkLCBz byB0aGF0IG5vIG9uZSBlbHNlCi0JICogdHJpZXMgdG8gZWl0aGVyIGluc2VydCBpbnRvIGl0IG9y IHVzZSBpdCBmb3IgcXVlcmllcy4KKwkgKiB3aWxsIHByZXZlbnQgdGhlbSBmcm9tIG1ha2luZyBp bmNvbXBhdGlibGUgSE9UIHVwZGF0ZXMuIE5ldyBpbmRleGVzCisJICogKG1haW4gYW5kIGF1eGls aWFyeSkgd2lsbCBiZSBtYXJrZWQgbm90IGluZGlzcmVhZHkgYW5kIG5vdCBpbmRpc3ZhbGlkLAor CSAqIHNvIHRoYXQgbm8gb25lIGVsc2UgdHJpZXMgdG8gZWl0aGVyIGluc2VydCBpbnRvIGl0IG9y IHVzZSBpdCBmb3IgcXVlcmllcy4KIAkgKgotCSAqIFdlIG11c3QgY29tbWl0IG91ciBjdXJyZW50 IHRyYW5zYWN0aW9uIHNvIHRoYXQgdGhlIGluZGV4IGJlY29tZXMKKwkgKiBXZSBtdXN0IGNvbW1p dCBvdXIgY3VycmVudCB0cmFuc2FjdGlvbiBzbyB0aGF0IHRoZSBpbmRleGVzIGJlY29tZXMKIAkg KiB2aXNpYmxlOyB0aGVuIHN0YXJ0IGFub3RoZXIuICBOb3RlIHRoYXQgYWxsIHRoZSBkYXRhIHN0 cnVjdHVyZXMgd2UganVzdAogCSAqIGJ1aWx0IGFyZSBsb3N0IGluIHRoZSBjb21taXQuICBUaGUg b25seSBkYXRhIHdlIGtlZXAgcGFzdCBoZXJlIGFyZSB0aGUKIAkgKiByZWxhdGlvbiBJRHMuCkBA IC0xNjQ1LDcgKzE2NzEsNyBAQCBEZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3RhdGUsCiAJICog Y2Fubm90IGJsb2NrLCBldmVuIGlmIHNvbWVvbmUgZWxzZSBpcyB3YWl0aW5nIGZvciBhY2Nlc3Ms IGJlY2F1c2Ugd2UKIAkgKiBhbHJlYWR5IGhhdmUgdGhlIHNhbWUgbG9jayB3aXRoaW4gb3VyIHRy YW5zYWN0aW9uLgogCSAqCi0JICogTm90ZTogd2UgZG9uJ3QgY3VycmVudGx5IGJvdGhlciB3aXRo IGEgc2Vzc2lvbiBsb2NrIG9uIHRoZSBpbmRleCwKKwkgKiBOb3RlOiB3ZSBkb24ndCBjdXJyZW50 bHkgYm90aGVyIHdpdGggYSBzZXNzaW9uIGxvY2sgb24gdGhlIGluZGV4ZXMsCiAJICogYmVjYXVz ZSB0aGVyZSBhcmUgbm8gb3BlcmF0aW9ucyB0aGF0IGNvdWxkIGNoYW5nZSBpdHMgc3RhdGUgd2hp bGUgd2UKIAkgKiBob2xkIGxvY2sgb24gdGhlIHBhcmVudCB0YWJsZS4gIFRoaXMgbWlnaHQgbmVl ZCB0byBjaGFuZ2UgbGF0ZXIuCiAJICovCkBAIC0xNjg0LDcgKzE3MTAsNyBAQCBEZWZpbmVJbmRl eChQYXJzZVN0YXRlICpwc3RhdGUsCiAJICogd2l0aCB0aGUgb2xkIGxpc3Qgb2YgaW5kZXhlcy4g IFVzZSBTaGFyZUxvY2sgdG8gY29uc2lkZXIgcnVubmluZwogCSAqIHRyYW5zYWN0aW9ucyB0aGF0 IGhvbGQgbG9ja3MgdGhhdCBwZXJtaXQgd3JpdGluZyB0byB0aGUgdGFibGUuICBOb3RlIHdlCiAJ ICogZG8gbm90IG5lZWQgdG8gd29ycnkgYWJvdXQgeGFjdHMgdGhhdCBvcGVuIHRoZSB0YWJsZSBm b3Igd3JpdGluZyBhZnRlcgotCSAqIHRoaXMgcG9pbnQ7IHRoZXkgd2lsbCBzZWUgdGhlIG5ldyBp bmRleCB3aGVuIHRoZXkgb3BlbiBpdC4KKwkgKiB0aGlzIHBvaW50OyB0aGV5IHdpbGwgc2VlIHRo ZSBuZXcgaW5kZXhlcyB3aGVuIHRoZXkgb3BlbiBpdC4KIAkgKgogCSAqIE5vdGU6IHRoZSByZWFz b24gd2UgdXNlIGFjdHVhbCBsb2NrIGFjcXVpc2l0aW9uIGhlcmUsIHJhdGhlciB0aGFuIGp1c3QK IAkgKiBjaGVja2luZyB0aGUgUHJvY0FycmF5IGFuZCBzbGVlcGluZywgaXMgdGhhdCBkZWFkbG9j ayBpcyBwb3NzaWJsZSBpZgpAQCAtMTY5NiwxNCArMTcyMiw0NCBAQCBEZWZpbmVJbmRleChQYXJz ZVN0YXRlICpwc3RhdGUsCiAKIAkvKgogCSAqIEF0IHRoaXMgbW9tZW50IHdlIGFyZSBzdXJlIHRo YXQgdGhlcmUgYXJlIG5vIHRyYW5zYWN0aW9ucyB3aXRoIHRoZQotCSAqIHRhYmxlIG9wZW4gZm9y IHdyaXRlIHRoYXQgZG9uJ3QgaGF2ZSB0aGlzIG5ldyBpbmRleCBpbiB0aGVpciBsaXN0IG9mCisJ ICogdGFibGUgb3BlbiBmb3Igd3JpdGUgdGhhdCBkb24ndCBoYXZlIHRoaXMgbmV3IGluZGV4ZXMg aW4gdGhlaXIgbGlzdCBvZgogCSAqIGluZGV4ZXMuICBXZSBoYXZlIHdhaXRlZCBvdXQgYWxsIHRo ZSBleGlzdGluZyB0cmFuc2FjdGlvbnMgYW5kIGFueSBuZXcKLQkgKiB0cmFuc2FjdGlvbiB3aWxs IGhhdmUgdGhlIG5ldyBpbmRleCBpbiBpdHMgbGlzdCwgYnV0IHRoZSBpbmRleCBpcyBzdGlsbAot CSAqIG1hcmtlZCBhcyAibm90LXJlYWR5LWZvci1pbnNlcnRzIi4gIFRoZSBpbmRleCBpcyBjb25z dWx0ZWQgd2hpbGUKKwkgKiB0cmFuc2FjdGlvbiB3aWxsIGhhdmUgYm90aCBuZXcgaW5kZXhlcyBp biBpdHMgbGlzdCwgYnV0IGluZGV4ZXMgYXJlIHN0aWxsCisJICogbWFya2VkIGFzICJub3QtcmVh ZHktZm9yLWluc2VydHMiLiBUaGUgaW5kZXhlcyBhcmUgY29uc3VsdGVkIHdoaWxlCiAJICogZGVj aWRpbmcgSE9ULXNhZmV0eSB0aG91Z2guICBUaGlzIGFycmFuZ2VtZW50IGVuc3VyZXMgdGhhdCBu byBuZXcgSE9UCiAJICogY2hhaW5zIGNhbiBiZSBjcmVhdGVkIHdoZXJlIHRoZSBuZXcgdHVwbGUg YW5kIHRoZSBvbGQgdHVwbGUgaW4gdGhlCiAJICogY2hhaW4gaGF2ZSBkaWZmZXJlbnQgaW5kZXgg a2V5cy4KIAkgKgorCSAqIE5vdyBjYWxsIGJ1aWxkIG9uIGF1eGlsaWFyeSBpbmRleC4gSW5kZXgg d2lsbCBiZSBjcmVhdGVkIGVtcHR5IHdpdGhvdXQKKwkgKiBhbnkgYWN0dWFsIGhlYXAgc2Nhbiwg YnV0IG1hcmtlZCBhcyAicmVhZHktZm9yLWluc2VydHMiLiBUaGUgZ29hbCBvZgorCSAqIHRoYXQg aW5kZXggaXMgYWNjdW11bGF0ZSBuZXcgdHVwbGVzIHdoaWxlIG1haW4gaW5kZXggaXMgYWN0dWFs bHkgYnVpbHQuCisJICovCisKKwkvKiBTZXQgQWN0aXZlU25hcHNob3Qgc2luY2UgZnVuY3Rpb25z IGluIHRoZSBpbmRleGVzIG1heSBuZWVkIGl0ICovCisJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRy YW5zYWN0aW9uU25hcHNob3QoKSk7CisKKwlpbmRleF9jb25jdXJyZW50bHlfYnVpbGQodGFibGVJ ZCwgYXV4SW5kZXhSZWxhdGlvbklkKTsKKwkvKiB3ZSBjYW4gZG8gYXdheSB3aXRoIG91ciBzbmFw c2hvdCAqLworCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisKKwlDb21taXRUcmFuc2FjdGlvbkNvbW1h bmQoKTsKKwlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJLyogVGVsbCBjb25jdXJyZW50 IGluZGV4IGJ1aWxkcyB0byBpZ25vcmUgdXMsIGlmIGluZGV4IHF1YWxpZmllcyAqLworCWlmIChz YWZlX2luZGV4KQorCQlzZXRfaW5kZXhzYWZlX3Byb2NmbGFncygpOworCXBnc3RhdF9wcm9ncmVz c191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAorCQkJCQkJCSBQUk9HUkVT U19DUkVBVEVJRFhfUEhBU0VfV0FJVF8yKTsKKwkvKgorCSAqIE5vdyB3ZSBuZWVkIHRvIGVuc3Vy ZSB0aGVyZSBhcmUgbm8gdHJhbnNhY3Rpb25zIHdpdGggdGhlIGF1eGlsaWFyeSBpbmRleAorCSAq IG1hcmtlZCBhcyAibm90LXJlYWR5LWZvci1pbnNlcnRzIi4KKwkgKi8KKwlXYWl0Rm9yTG9ja2Vy cyhoZWFwbG9ja3RhZywgU2hhcmVMb2NrLCB0cnVlKTsKKworCS8qCisJICogQXQgdGhpcyBtb21l bnQgd2UgYXJlIHN1cmUgdGhhdCBhbGwgbmV3IHR1cGxlcyBpbiB0YWJsZSBhcmUgaW5zZXJ0ZWQg aW50bworCSAqIHRoZSBhdXhpbGlhcnkgaW5kZXguIE5vdyBpdCBpcyB0aW1lIHRvIGJ1aWxkIHRo ZSB0YXJnZXQgaW5kZXggaXRzZWxmLgorCSAqCiAJICogV2Ugbm93IHRha2UgYSBuZXcgc25hcHNo b3QsIGFuZCBidWlsZCB0aGUgaW5kZXggdXNpbmcgYWxsIHR1cGxlcyB0aGF0CiAJICogYXJlIHZp c2libGUgaW4gdGhpcyBzbmFwc2hvdC4gIFdlIGNhbiBiZSBzdXJlIHRoYXQgYW55IEhPVCB1cGRh dGVzIHRvCiAJICogdGhlc2UgdHVwbGVzIHdpbGwgYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBpbmRl eCwgc2luY2UgYW55IHVwZGF0ZXMgbWFkZQpAQCAtMTczOCw5ICsxNzk0LDI4IEBAIERlZmluZUlu ZGV4KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkgKiB0aGUgaW5kZXggbWFya2VkIGFzIHJlYWQtb25s eSBmb3IgdXBkYXRlcy4KIAkgKi8KIAlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dS RVNTX0NSRUFURUlEWF9QSEFTRSwKLQkJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9X QUlUXzIpOworCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfMyk7CiAJV2Fp dEZvckxvY2tlcnMoaGVhcGxvY2t0YWcsIFNoYXJlTG9jaywgdHJ1ZSk7CiAKKwkvKgorCSAqIFVw ZGF0aW5nIHBnX2luZGV4IG1pZ2h0IGludm9sdmUgVE9BU1QgdGFibGUgYWNjZXNzLCBzbyBlbnN1 cmUgd2UKKwkgKiBoYXZlIGEgdmFsaWQgc25hcHNob3QuCisJICovCisJUHVzaEFjdGl2ZVNuYXBz aG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisJLyoKKwkgKiBOb3cgdGFyZ2V0IGluZGV4 IGlzIG1hcmtlZCBhcyAicmVhZHkiIGZvciBhbGwgdHJhbnNhY3Rpb25zLiBTbywgYXV4aWxpYXJ5 CisJICogaW5kZXggaXMgbm8gbG9uZ2VyIG5lZWRlZC4gU28sIHN0YXJ0IHJlbW92aW5nIHByb2Nl c3MgYnkgcmV2ZXJ0aW5nICJyZWFkeSIKKwkgKiBmbGFnLgorCSAqLworCWluZGV4X3NldF9zdGF0 ZV9mbGFncyhhdXhJbmRleFJlbGF0aW9uSWQsIElOREVYX0RST1BfQ0xFQVJfUkVBRFkpOworCVBv cEFjdGl2ZVNuYXBzaG90KCk7CisKKwlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwlTdGFy dFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCS8qIFRlbGwgY29uY3VycmVudCBpbmRleCBidWlsZHMg dG8gaWdub3JlIHVzLCBpZiBpbmRleCBxdWFsaWZpZXMgKi8KKwlpZiAoc2FmZV9pbmRleCkKKwkJ c2V0X2luZGV4c2FmZV9wcm9jZmxhZ3MoKTsKKwogCS8qCiAJICogTm93IHRha2UgdGhlICJyZWZl cmVuY2Ugc25hcHNob3QiIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHZhbGlkYXRlX2luZGV4KCkKIAkg KiB0byBmaWx0ZXIgY2FuZGlkYXRlIHR1cGxlcy4gIEJld2FyZSEgIFRoZXJlIG1pZ2h0IHN0aWxs IGJlIHNuYXBzaG90cyBpbgpAQCAtMTc1OCwyNCArMTgzMywxNCBAQCBEZWZpbmVJbmRleChQYXJz ZVN0YXRlICpwc3RhdGUsCiAJICovCiAJc25hcHNob3QgPSBSZWdpc3RlclNuYXBzaG90KEdldFRy YW5zYWN0aW9uU25hcHNob3QoKSk7CiAJUHVzaEFjdGl2ZVNuYXBzaG90KHNuYXBzaG90KTsKLQog CS8qCi0JICogU2NhbiB0aGUgaW5kZXggYW5kIHRoZSBoZWFwLCBpbnNlcnQgYW55IG1pc3Npbmcg aW5kZXggZW50cmllcy4KLQkgKi8KLQl2YWxpZGF0ZV9pbmRleCh0YWJsZUlkLCBpbmRleFJlbGF0 aW9uSWQsIHNuYXBzaG90KTsKLQotCS8qCi0JICogRHJvcCB0aGUgcmVmZXJlbmNlIHNuYXBzaG90 LiAgV2UgbXVzdCBkbyB0aGlzIGJlZm9yZSB3YWl0aW5nIG91dCBvdGhlcgotCSAqIHNuYXBzaG90 IGhvbGRlcnMsIGVsc2Ugd2Ugd2lsbCBkZWFkbG9jayBhZ2FpbnN0IG90aGVyIHByb2Nlc3NlcyBh bHNvCi0JICogZG9pbmcgQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSwgd2hpY2ggd291bGQgc2Vl IG91ciBzbmFwc2hvdCBhcyBvbmUKLQkgKiB0aGV5IG11c3Qgd2FpdCBmb3IuICBCdXQgZmlyc3Qs IHNhdmUgdGhlIHNuYXBzaG90J3MgeG1pbiB0byB1c2UgYXMKLQkgKiBsaW1pdFhtaW4gZm9yIEdl dEN1cnJlbnRWaXJ0dWFsWElEcygpLgorCSAqIE1lcmdlIGNvbnRlbnQgb2YgYXV4aWxpYXJ5IGFu ZCB0YXJnZXQgaW5kZXhlcyAtIGluc2VydCBhbnkgbWlzc2luZyBpbmRleCBlbnRyaWVzLgogCSAq LworCXZhbGlkYXRlX2luZGV4KHRhYmxlSWQsIGluZGV4UmVsYXRpb25JZCwgYXV4SW5kZXhSZWxh dGlvbklkLCBzbmFwc2hvdCk7CiAJbGltaXRYbWluID0gc25hcHNob3QtPnhtaW47CiAKIAlQb3BB Y3RpdmVTbmFwc2hvdCgpOwogCVVucmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7Ci0KIAkvKgog CSAqIFRoZSBzbmFwc2hvdCBzdWJzeXN0ZW0gY291bGQgc3RpbGwgY29udGFpbiByZWdpc3RlcmVk IHNuYXBzaG90cyB0aGF0CiAJICogYXJlIGhvbGRpbmcgYmFjayBvdXIgcHJvY2VzcydzIGFkdmVy dGlzZWQgeG1pbjsgaW4gcGFydGljdWxhciwgaWYKQEAgLTE4MDIsNyArMTg2Nyw3IEBAIERlZmlu ZUluZGV4KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkgKi8KIAlJTkpFQ1RJT05fUE9JTlQoImRlZmlu ZS1pbmRleC1iZWZvcmUtc2V0LXZhbGlkIiwgTlVMTCk7CiAJcGdzdGF0X3Byb2dyZXNzX3VwZGF0 ZV9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0UsCi0JCQkJCQkJCSBQUk9HUkVTU19DUkVB VEVJRFhfUEhBU0VfV0FJVF8zKTsKKwkJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9X QUlUXzQpOwogCVdhaXRGb3JPbGRlclNuYXBzaG90cyhsaW1pdFhtaW4sIHRydWUpOwogCiAJLyoK QEAgLTE4MjcsNiArMTg5Miw1MyBAQCBEZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3RhdGUsCiAJ ICogdG8gcmVwbGFuOyBzbyByZWxjYWNoZSBmbHVzaCBvbiB0aGUgaW5kZXggaXRzZWxmIHdhcyBz dWZmaWNpZW50LikKIAkgKi8KIAlDYWNoZUludmFsaWRhdGVSZWxjYWNoZUJ5UmVsaWQoaGVhcHJl bGlkLnJlbElkKTsKKwlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwlTdGFydFRyYW5zYWN0 aW9uQ29tbWFuZCgpOworCisJLyogVGVsbCBjb25jdXJyZW50IGluZGV4IGJ1aWxkcyB0byBpZ25v cmUgdXMsIGlmIGluZGV4IHF1YWxpZmllcyAqLworCWlmIChzYWZlX2luZGV4KQorCQlzZXRfaW5k ZXhzYWZlX3Byb2NmbGFncygpOworCisJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9H UkVTU19DUkVBVEVJRFhfUEhBU0UsCisJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9X QUlUXzUpOworCS8qIE5vdyB3YWl0IGZvciBhbGwgdHJhbnNhY3Rpb24gdG8gc2VlIGF1eGlsaWFy eSBhcyAibm9uLXJlYWR5IGZvciBpbnNlcnRzIiAqLworCVdhaXRGb3JMb2NrZXJzKGhlYXBsb2Nr dGFnLCBBY2Nlc3NFeGNsdXNpdmVMb2NrLCB0cnVlKTsKKworCUNvbW1pdFRyYW5zYWN0aW9uQ29t bWFuZCgpOworCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkvKgorCSAqIFVwZGF0aW5n IHBnX2luZGV4IG1pZ2h0IGludm9sdmUgVE9BU1QgdGFibGUgYWNjZXNzLCBzbyBlbnN1cmUgd2UK KwkgKiBoYXZlIGEgdmFsaWQgc25hcHNob3QuCisJICovCisJUHVzaEFjdGl2ZVNuYXBzaG90KEdl dFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisJLyogTm93IGl0IGlzIHRpbWUgdG8gbWFyayBhdXhp bGlhcnkgaW5kZXggYXMgZGVhZCAqLworCWluZGV4X2NvbmN1cnJlbnRseV9zZXRfZGVhZCh0YWJs ZUlkLCBhdXhJbmRleFJlbGF0aW9uSWQpOworCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisKKwlDb21t aXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJ LyogVGVsbCBjb25jdXJyZW50IGluZGV4IGJ1aWxkcyB0byBpZ25vcmUgdXMsIGlmIGluZGV4IHF1 YWxpZmllcyAqLworCWlmIChzYWZlX2luZGV4KQorCQlzZXRfaW5kZXhzYWZlX3Byb2NmbGFncygp OworCisJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhfUEhB U0UsCisJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzYpOworCS8qIE5vdyB3 YWl0IGZvciBhbGwgdHJhbnNhY3Rpb24gdG8gaWdub3JlIGF1eGlsaWFyeSBiZWNhdXNlIGl0IGlz IGRlYWQgKi8KKwlXYWl0Rm9yTG9ja2VycyhoZWFwbG9ja3RhZywgQWNjZXNzRXhjbHVzaXZlTG9j aywgdHJ1ZSk7CisKKwlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwlTdGFydFRyYW5zYWN0 aW9uQ29tbWFuZCgpOworCisJLyoKKwkgKiBEcm9wIGF1eGlsaWFyeSBpbmRleC4KKwkgKgorCSAq IFVzZSBQRVJGT1JNX0RFTEVUSU9OX0NPTkNVUlJFTlRfTE9DSyBzbyB0aGF0IGluZGV4X2Ryb3Ao KSB1c2VzIHRoZQorCSAqIHJpZ2h0IGxvY2sgbGV2ZWwuCisJICovCisJcGVyZm9ybURlbGV0aW9u KCZhdXhBZGRyZXNzLCBEUk9QX1JFU1RSSUNULAorCQkJCQkJCSBQRVJGT1JNX0RFTEVUSU9OX0NP TkNVUlJFTlRfTE9DSyB8IFBFUkZPUk1fREVMRVRJT05fSU5URVJOQUwpOwogCiAJLyoKIAkgKiBM YXN0IHRoaW5nIHRvIGRvIGlzIHJlbGVhc2UgdGhlIHNlc3Npb24tbGV2ZWwgbG9jayBvbiB0aGUg cGFyZW50IHRhYmxlLgpAQCAtMzU5OCw2ICszNzEwLDcgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3Vy cmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJl aW4KIAl0eXBlZGVmIHN0cnVjdCBSZWluZGV4SW5kZXhJbmZvCiAJewogCQlPaWQJCQlpbmRleElk OworCQlPaWQJCQlhdXhJbmRleElkOwogCQlPaWQJCQl0YWJsZUlkOwogCQlPaWQJCQlhbUlkOwog CQlib29sCQlzYWZlOwkJLyogZm9yIHNldF9pbmRleHNhZmVfcHJvY2ZsYWdzICovCkBAIC0zNzAz LDggKzM4MTYsMTUgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhT dG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJCQkJT2lkCQkJY2VsbE9p ZCA9IGxmaXJzdF9vaWQobGMpOwogCQkJCQlSZWxhdGlvbglpbmRleFJlbGF0aW9uID0gaW5kZXhf b3BlbihjZWxsT2lkLAogCQkJCQkJCQkJCQkJCQkgICBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sp OworCQkJCQlJbmRleEluZm8qCWluZGV4SW5mbyA9IEJ1aWxkRHVtbXlJbmRleEluZm8oaW5kZXhS ZWxhdGlvbik7CiAKLQkJCQkJaWYgKCFpbmRleFJlbGF0aW9uLT5yZF9pbmRleC0+aW5kaXN2YWxp ZCkKKworCQkJCQlpZiAoaW5kZXhJbmZvLT5paV9BdXhpbGlhcnkpCisJCQkJCQllcmVwb3J0KFdB Uk5JTkcsKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkJCSBl cnJtc2coInNraXBwaW5nIHJlaW5kZXggb2YgYXV4aWxpYXJ5IGluZGV4IFwiJXMuJXNcIiIsCisJ CQkJCQkJCQlnZXRfbmFtZXNwYWNlX25hbWUoZ2V0X3JlbF9uYW1lc3BhY2UoY2VsbE9pZCkpLAor CQkJCQkJCQkJZ2V0X3JlbF9uYW1lKGNlbGxPaWQpKSkpOworCQkJCQllbHNlIGlmICghaW5kZXhS ZWxhdGlvbi0+cmRfaW5kZXgtPmluZGlzdmFsaWQpCiAJCQkJCQllcmVwb3J0KFdBUk5JTkcsCiAJ CQkJCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUp LAogCQkJCQkJCQkgZXJybXNnKCJza2lwcGluZyByZWluZGV4IG9mIGludmFsaWQgaW5kZXggXCIl cy4lc1wiIiwKQEAgLTM3NTYsOCArMzg3NiwxNSBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50 bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgog CQkJCQkJT2lkCQkJY2VsbE9pZCA9IGxmaXJzdF9vaWQobGMyKTsKIAkJCQkJCVJlbGF0aW9uCWlu ZGV4UmVsYXRpb24gPSBpbmRleF9vcGVuKGNlbGxPaWQsCiAJCQkJCQkJCQkJCQkJCQkgICBTaGFy ZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOworCQkJCQkJSW5kZXhJbmZvKglpbmRleEluZm8gPSBCdWls ZER1bW15SW5kZXhJbmZvKGluZGV4UmVsYXRpb24pOwogCi0JCQkJCQlpZiAoIWluZGV4UmVsYXRp b24tPnJkX2luZGV4LT5pbmRpc3ZhbGlkKQorCQkJCQkJaWYgKGluZGV4SW5mby0+aWlfQXV4aWxp YXJ5KQorCQkJCQkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVf RkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJCQkJCSBlcnJtc2coInNraXBwaW5nIHJlaW5k ZXggb2YgYXV4aWxpYXJ5IGluZGV4IFwiJXMuJXNcIiIsCisJCQkJCQkJCQkJCWdldF9uYW1lc3Bh Y2VfbmFtZShnZXRfcmVsX25hbWVzcGFjZShjZWxsT2lkKSksCisJCQkJCQkJCQkJCWdldF9yZWxf bmFtZShjZWxsT2lkKSkpKTsKKwkJCQkJCWVsc2UgaWYgKCFpbmRleFJlbGF0aW9uLT5yZF9pbmRl eC0+aW5kaXN2YWxpZCkKIAkJCQkJCQllcmVwb3J0KFdBUk5JTkcsCiAJCQkJCQkJCQkoZXJyY29k ZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKIAkJCQkJCQkJCSBl cnJtc2coInNraXBwaW5nIHJlaW5kZXggb2YgaW52YWxpZCBpbmRleCBcIiVzLiVzXCIiLApAQCAt MzgxOCw2ICszOTQ1LDEzIEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWlu ZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCQkJCQkJKGVycmNv ZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCQkJCSBlcnJtc2coImNhbm5v dCByZWluZGV4IGludmFsaWQgaW5kZXggb24gVE9BU1QgdGFibGUiKSkpOwogCisJCQkJLyogQXV4 aWxpYXJ5IGluZGV4ZXMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIHJlYnVpbHQgKi8KKwkJCQlpZiAo Z2V0X3JlbF9yZWxhbShyZWxhdGlvbk9pZCkgPT0gU1RJUl9BTV9PSUQpCisJCQkJCWVyZXBvcnQo RVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJ CQkJCQkgZXJybXNnKCJyZWluZGV4IG9mIGF1eGlsaWFyeSBpbmRleCBcIiVzXCIgbm90IHN1cHBv cnRlZCIsCisJCQkJCQkJCWdldF9yZWxfbmFtZShyZWxhdGlvbk9pZCkpKSk7CisKIAkJCQkvKgog CQkJCSAqIENoZWNrIGlmIHBhcmVudCByZWxhdGlvbiBjYW4gYmUgbG9ja2VkIGFuZCBpZiBpdCBl eGlzdHMsCiAJCQkJICogdGhpcyBuZWVkcyB0byBiZSBkb25lIGF0IHRoaXMgc3RhZ2UgYXMgdGhl IGxpc3Qgb2YgaW5kZXhlcwpAQCAtMzkyMSwxNSArNDA1NSwxOCBAQCBSZWluZGV4UmVsYXRpb25D b25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29u c3QgUmVpbgogCWZvcmVhY2gobGMsIGluZGV4SWRzKQogCXsKIAkJY2hhcgkgICAqY29uY3VycmVu dE5hbWU7CisJCWNoYXIJICAgKmF1eENvbmN1cnJlbnROYW1lOwogCQlSZWluZGV4SW5kZXhJbmZv ICppZHggPSBsZmlyc3QobGMpOwogCQlSZWluZGV4SW5kZXhJbmZvICpuZXdpZHg7CiAJCU9pZAkJ CW5ld0luZGV4SWQ7CisJCU9pZAkJCWF1eEluZGV4SWQ7CiAJCVJlbGF0aW9uCWluZGV4UmVsOwog CQlSZWxhdGlvbgloZWFwUmVsOwogCQlPaWQJCQlzYXZlX3VzZXJpZDsKIAkJaW50CQkJc2F2ZV9z ZWNfY29udGV4dDsKIAkJaW50CQkJc2F2ZV9uZXN0bGV2ZWw7CiAJCVJlbGF0aW9uCW5ld0luZGV4 UmVsOworCQlSZWxhdGlvbglhdXhJbmRleFJlbDsKIAkJTG9ja1JlbElkICAqbG9ja3JlbGlkOwog CQlPaWQJCQl0YWJsZXNwYWNlaWQ7CiAKQEAgLTM5ODAsNiArNDExNywxMSBAQCBSZWluZGV4UmVs YXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9p ZCwgY29uc3QgUmVpbgogCQkJCQkJCQkJCQkiY2NuZXciLAogCQkJCQkJCQkJCQlnZXRfcmVsX25h bWVzcGFjZShpbmRleFJlbC0+cmRfaW5kZXgtPmluZHJlbGlkKSwKIAkJCQkJCQkJCQkJZmFsc2Up OworCQlhdXhDb25jdXJyZW50TmFtZSA9IENob29zZVJlbGF0aW9uTmFtZShnZXRfcmVsX25hbWUo aWR4LT5pbmRleElkKSwKKwkJCQkJCQkJCQkJTlVMTCwKKwkJCQkJCQkJCQkJImNjYXV4IiwKKwkJ CQkJCQkJCQkJZ2V0X3JlbF9uYW1lc3BhY2UoaW5kZXhSZWwtPnJkX2luZGV4LT5pbmRyZWxpZCks CisJCQkJCQkJCQkJCWZhbHNlKTsKIAogCQkvKiBDaG9vc2UgdGhlIG5ldyB0YWJsZXNwYWNlLCBp bmRleGVzIG9mIHRvYXN0IHRhYmxlcyBhcmUgbm90IG1vdmVkICovCiAJCWlmIChPaWRJc1ZhbGlk KHBhcmFtcy0+dGFibGVzcGFjZU9pZCkgJiYKQEAgLTM5OTcsMTEgKzQxMzksMTcgQEAgUmVpbmRl eFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRp b25PaWQsIGNvbnN0IFJlaW4KIAkJCQkJCQkJCSAgIHRhYmxlc3BhY2VpZCwKIAkJCQkJCQkJCSAg IGNvbmN1cnJlbnROYW1lKTsKIAorCQlhdXhJbmRleElkID0gaW5kZXhfY29uY3VycmVudGx5X2Ny ZWF0ZV9hdXgoaGVhcFJlbCwKKwkJCQkJCQkJCQkJCSAgIG5ld0luZGV4SWQsCisJCQkJCQkJCQkJ CQkgICB0YWJsZXNwYWNlaWQsCisJCQkJCQkJCQkJCQkgICBhdXhDb25jdXJyZW50TmFtZSk7CisK IAkJLyoKIAkJICogTm93IG9wZW4gdGhlIHJlbGF0aW9uIG9mIHRoZSBuZXcgaW5kZXgsIGEgc2Vz c2lvbi1sZXZlbCBsb2NrIGlzCiAJCSAqIGFsc28gbmVlZGVkIG9uIGl0LgogCQkgKi8KIAkJbmV3 SW5kZXhSZWwgPSBpbmRleF9vcGVuKG5ld0luZGV4SWQsIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9j ayk7CisJCWF1eEluZGV4UmVsID0gaW5kZXhfb3BlbihhdXhJbmRleElkLCBTaGFyZVVwZGF0ZUV4 Y2x1c2l2ZUxvY2spOwogCiAJCS8qCiAJCSAqIFNhdmUgdGhlIGxpc3Qgb2YgT0lEcyBhbmQgbG9j a3MgaW4gcHJpdmF0ZSBjb250ZXh0CkBAIC00MDEwLDYgKzQxNTgsNyBAQCBSZWluZGV4UmVsYXRp b25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwg Y29uc3QgUmVpbgogCiAJCW5ld2lkeCA9IHBhbGxvY19vYmplY3QoUmVpbmRleEluZGV4SW5mbyk7 CiAJCW5ld2lkeC0+aW5kZXhJZCA9IG5ld0luZGV4SWQ7CisJCW5ld2lkeC0+YXV4SW5kZXhJZCA9 IGF1eEluZGV4SWQ7CiAJCW5ld2lkeC0+c2FmZSA9IGlkeC0+c2FmZTsKIAkJbmV3aWR4LT50YWJs ZUlkID0gaWR4LT50YWJsZUlkOwogCQluZXdpZHgtPmFtSWQgPSBpZHgtPmFtSWQ7CkBAIC00MDI4 LDEwICs0MTc3LDE0IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4 U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCWxvY2tyZWxpZCA9IHBh bGxvY19vYmplY3QoTG9ja1JlbElkKTsKIAkJKmxvY2tyZWxpZCA9IG5ld0luZGV4UmVsLT5yZF9s b2NrSW5mby5sb2NrUmVsSWQ7CiAJCXJlbGF0aW9uTG9ja3MgPSBsYXBwZW5kKHJlbGF0aW9uTG9j a3MsIGxvY2tyZWxpZCk7CisJCWxvY2tyZWxpZCA9IHBhbGxvY19vYmplY3QoTG9ja1JlbElkKTsK KwkJKmxvY2tyZWxpZCA9IGF1eEluZGV4UmVsLT5yZF9sb2NrSW5mby5sb2NrUmVsSWQ7CisJCXJl bGF0aW9uTG9ja3MgPSBsYXBwZW5kKHJlbGF0aW9uTG9ja3MsIGxvY2tyZWxpZCk7CiAKIAkJTWVt b3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwogCiAJCWluZGV4X2Nsb3NlKGluZGV4UmVs LCBOb0xvY2spOworCQlpbmRleF9jbG9zZShhdXhJbmRleFJlbCwgTm9Mb2NrKTsKIAkJaW5kZXhf Y2xvc2UobmV3SW5kZXhSZWwsIE5vTG9jayk7CiAKIAkJLyogUm9sbCBiYWNrIGFueSBHVUMgY2hh bmdlcyBleGVjdXRlZCBieSBpbmRleCBmdW5jdGlvbnMgKi8KQEAgLTQxMTIsMTMgKzQyNjUsNjAg QEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBP aWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkgKiBkb2luZyB0aGF0LCB3YWl0IHVudGlsIG5v IHJ1bm5pbmcgdHJhbnNhY3Rpb25zIGNvdWxkIGhhdmUgdGhlIHRhYmxlIG9mCiAJICogdGhlIGlu ZGV4IG9wZW4gd2l0aCB0aGUgb2xkIGxpc3Qgb2YgaW5kZXhlcy4gIFNlZSAicGhhc2UgMiIgaW4K IAkgKiBEZWZpbmVJbmRleCgpIGZvciBtb3JlIGRldGFpbHMuCisJKi8KKworCXBnc3RhdF9wcm9n cmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAorCQkJCQkJCSBQUk9H UkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8xKTsKKwlXYWl0Rm9yTG9ja2Vyc011bHRpcGxlKGxv Y2tUYWdzLCBTaGFyZUxvY2ssIHRydWUpOworCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwor CisJLyoKKwkgKiBOb3cgYnVpbGQgYWxsIGF1eGlsaWFyeSBpbmRleGVzIGFuZCBtYXJrIHRoZW0g YXMgInJlYWR5LWZvci1pbnNlcnRzIi4KKwkgKi8KKwlmb3JlYWNoKGxjLCBuZXdJbmRleElkcykK Kwl7CisJCVJlaW5kZXhJbmRleEluZm8gKm5ld2lkeCA9IGxmaXJzdChsYyk7CisKKwkJU3RhcnRU cmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCQkvKgorCQkgKiBDaGVjayBmb3IgdXNlci1yZXF1ZXN0 ZWQgYWJvcnQuICBUaGlzIGlzIGluc2lkZSBhIHRyYW5zYWN0aW9uIHNvIGFzCisJCSAqIHhhY3Qu YyBkb2VzIG5vdCBpc3N1ZSBhIHVzZWxlc3MgV0FSTklORywgYW5kIGVuc3VyZXMgdGhhdAorCQkg KiBzZXNzaW9uLWxldmVsIGxvY2tzIGFyZSBjbGVhbmVkIHVwIG9uIGFib3J0LgorCQkgKi8KKwkJ Q0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKiBUZWxsIGNvbmN1cnJlbnQgaW5kZXhpbmcg dG8gaWdub3JlIHVzLCBpZiBpbmRleCBxdWFsaWZpZXMgKi8KKwkJaWYgKG5ld2lkeC0+c2FmZSkK KwkJCXNldF9pbmRleHNhZmVfcHJvY2ZsYWdzKCk7CisKKwkJLyogU2V0IEFjdGl2ZVNuYXBzaG90 IHNpbmNlIGZ1bmN0aW9ucyBpbiB0aGUgaW5kZXhlcyBtYXkgbmVlZCBpdCAqLworCQlQdXNoQWN0 aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKworCQkvKiBCdWlsZCBhdXhp bGlhcnkgaW5kZXgsIGl0IGlzIGZhc3QgLSB3aXRob3V0IGFueSBhY3R1YWwgaGVhcCBzY2FuLCBq dXN0IGFuIGVtcHR5IGluZGV4LiAqLworCQlpbmRleF9jb25jdXJyZW50bHlfYnVpbGQobmV3aWR4 LT50YWJsZUlkLCBuZXdpZHgtPmF1eEluZGV4SWQpOworCisJCVBvcEFjdGl2ZVNuYXBzaG90KCk7 CisJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCX0KKworCVN0YXJ0VHJhbnNhY3Rpb25D b21tYW5kKCk7CisKKwkvKgorCSAqIEJlY2F1c2Ugd2UgZG9uJ3QgdGFrZSBhIHNuYXBzaG90IGlu IHRoaXMgdHJhbnNhY3Rpb24sIHRoZXJlJ3Mgbm8gbmVlZAorCSAqIHRvIHNldCB0aGUgUFJPQ19J Tl9TQUZFX0lDIGZsYWcgaGVyZS4KIAkgKi8KIAogCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFy YW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAotCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURY X1BIQVNFX1dBSVRfMSk7CisJCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8y KTsKKwkvKgorCSAqIFdhaXQgdW50aWwgYWxsIGF1eGlsaWFyeSBpbmRleGVzIGFyZSB0YWtlbiBp bnRvIGFjY291bnQgYnkgYWxsCisJICogdHJhbnNhY3Rpb25zLgorCSAqLwogCVdhaXRGb3JMb2Nr ZXJzTXVsdGlwbGUobG9ja1RhZ3MsIFNoYXJlTG9jaywgdHJ1ZSk7CiAJQ29tbWl0VHJhbnNhY3Rp b25Db21tYW5kKCk7CiAKKwkvKiBOb3cgaXQgaXMgdGltZSB0byBwZXJmb3JtIHRhcmdldCBpbmRl eCBidWlsZC4gKi8KIAlmb3JlYWNoKGxjLCBuZXdJbmRleElkcykKIAl7CiAJCVJlaW5kZXhJbmRl eEluZm8gKm5ld2lkeCA9IGxmaXJzdChsYyk7CkBAIC00MTY1LDYgKzQzNjUsNDEgQEAgUmVpbmRl eFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRp b25PaWQsIGNvbnN0IFJlaW4KIAkgKiBuZWVkIHRvIHNldCB0aGUgUFJPQ19JTl9TQUZFX0lDIGZs YWcgaGVyZS4KIAkgKi8KIAorCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1Nf Q1JFQVRFSURYX1BIQVNFLAorCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRf Myk7CisJV2FpdEZvckxvY2tlcnNNdWx0aXBsZShsb2NrVGFncywgU2hhcmVMb2NrLCB0cnVlKTsK KwlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCS8qCisJICogQXQgdGhpcyBtb21lbnQg YWxsIHRhcmdldCBpbmRleGVzIGFyZSBtYXJrZWQgYXMgInJlYWR5LXRvLWluc2VydCIuIFNvLAor CSAqIHdlIGFyZSBmcmVlIHRvIHN0YXJ0IHByb2Nlc3Mgb2YgZHJvcHBpbmcgYXV4aWxpYXJ5IGlu ZGV4ZXMuCisJICovCisJZm9yZWFjaChsYywgbmV3SW5kZXhJZHMpCisJeworCQlSZWluZGV4SW5k ZXhJbmZvICpuZXdpZHggPSBsZmlyc3QobGMpOworCQlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgp OworCQkvKgorCQkgKiBDaGVjayBmb3IgdXNlci1yZXF1ZXN0ZWQgYWJvcnQuICBUaGlzIGlzIGlu c2lkZSBhIHRyYW5zYWN0aW9uIHNvIGFzCisJCSAqIHhhY3QuYyBkb2VzIG5vdCBpc3N1ZSBhIHVz ZWxlc3MgV0FSTklORywgYW5kIGVuc3VyZXMgdGhhdAorCQkgKiBzZXNzaW9uLWxldmVsIGxvY2tz IGFyZSBjbGVhbmVkIHVwIG9uIGFib3J0LgorCQkgKi8KKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMo KTsKKworCQkvKiBUZWxsIGNvbmN1cnJlbnQgaW5kZXhpbmcgdG8gaWdub3JlIHVzLCBpZiBpbmRl eCBxdWFsaWZpZXMgKi8KKwkJaWYgKG5ld2lkeC0+c2FmZSkKKwkJCXNldF9pbmRleHNhZmVfcHJv Y2ZsYWdzKCk7CisKKwkJLyoKKwkJICogVXBkYXRpbmcgcGdfaW5kZXggbWlnaHQgaW52b2x2ZSBU T0FTVCB0YWJsZSBhY2Nlc3MsIHNvIGVuc3VyZSB3ZQorCQkgKiBoYXZlIGEgdmFsaWQgc25hcHNo b3QuCisJCSAqLworCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgp KTsKKwkJaW5kZXhfc2V0X3N0YXRlX2ZsYWdzKG5ld2lkeC0+YXV4SW5kZXhJZCwgSU5ERVhfRFJP UF9DTEVBUl9SRUFEWSk7CisJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisKKwkJQ29tbWl0VHJhbnNh Y3Rpb25Db21tYW5kKCk7CisJfQorCiAJLyoKIAkgKiBQaGFzZSAzIG9mIFJFSU5ERVggQ09OQ1VS UkVOVExZCiAJICoKQEAgLTQxNzIsMTIgKzQ0MDcsNiBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJy ZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVp bgogCSAqIHdlcmUgY3JlYXRlZCBkdXJpbmcgdGhlIHByZXZpb3VzIHBoYXNlLiAgU2VlICJwaGFz ZSAzIiBpbiBEZWZpbmVJbmRleCgpCiAJICogZm9yIG1vcmUgZGV0YWlscy4KIAkgKi8KLQotCXBn c3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAotCQkJ CQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfMik7Ci0JV2FpdEZvckxvY2tlcnNN dWx0aXBsZShsb2NrVGFncywgU2hhcmVMb2NrLCB0cnVlKTsKLQlDb21taXRUcmFuc2FjdGlvbkNv bW1hbmQoKTsKLQogCWZvcmVhY2gobGMsIG5ld0luZGV4SWRzKQogCXsKIAkJUmVpbmRleEluZGV4 SW5mbyAqbmV3aWR4ID0gbGZpcnN0KGxjKTsKQEAgLTQyMTUsNyArNDQ0NCw3IEBAIFJlaW5kZXhS ZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9u T2lkLCBjb25zdCBSZWluCiAJCXByb2dyZXNzX3ZhbHNbM10gPSBuZXdpZHgtPmFtSWQ7CiAJCXBn c3RhdF9wcm9ncmVzc191cGRhdGVfbXVsdGlfcGFyYW0oNCwgcHJvZ3Jlc3NfaW5kZXgsIHByb2dy ZXNzX3ZhbHMpOwogCi0JCXZhbGlkYXRlX2luZGV4KG5ld2lkeC0+dGFibGVJZCwgbmV3aWR4LT5p bmRleElkLCBzbmFwc2hvdCk7CisJCXZhbGlkYXRlX2luZGV4KG5ld2lkeC0+dGFibGVJZCwgbmV3 aWR4LT5pbmRleElkLCBuZXdpZHgtPmF1eEluZGV4SWQsIHNuYXBzaG90KTsKIAogCQkvKgogCQkg KiBXZSBjYW4gbm93IGRvIGF3YXkgd2l0aCBvdXIgYWN0aXZlIHNuYXBzaG90LCB3ZSBzdGlsbCBu ZWVkIHRvIHNhdmUKQEAgLTQyNDQsNyArNDQ3Myw3IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJl bnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWlu CiAJCSAqIHRoZXJlJ3Mgbm8gbmVlZCB0byBzZXQgdGhlIFBST0NfSU5fU0FGRV9JQyBmbGFnIGhl cmUuCiAJCSAqLwogCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFU RUlEWF9QSEFTRSwKLQkJCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8zKTsK KwkJCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF80KTsKIAkJV2FpdEZvck9s ZGVyU25hcHNob3RzKGxpbWl0WG1pbiwgdHJ1ZSk7CiAKIAkJQ29tbWl0VHJhbnNhY3Rpb25Db21t YW5kKCk7CkBAIC00MzM1LDE0ICs0NTY0LDE0IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRs eShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJ LyoKIAkgKiBQaGFzZSA1IG9mIFJFSU5ERVggQ09OQ1VSUkVOVExZCiAJICoKLQkgKiBNYXJrIHRo ZSBvbGQgaW5kZXhlcyBhcyBkZWFkLiAgRmlyc3Qgd2UgbXVzdCB3YWl0IHVudGlsIG5vIHJ1bm5p bmcKLQkgKiB0cmFuc2FjdGlvbiBjb3VsZCBiZSB1c2luZyB0aGUgaW5kZXggZm9yIGEgcXVlcnku ICBTZWUgYWxzbworCSAqIE1hcmsgdGhlIG9sZCBhbmQgYXV4aWxpYXJ5IGluZGV4ZXMgYXMgZGVh ZC4gRmlyc3Qgd2UgbXVzdCB3YWl0IHVudGlsIG5vCisJICogcnVubmluZyB0cmFuc2FjdGlvbiBj b3VsZCBiZSB1c2luZyB0aGUgaW5kZXggZm9yIGEgcXVlcnkuICBTZWUgYWxzbwogCSAqIGluZGV4 X2Ryb3AoKSBmb3IgbW9yZSBkZXRhaWxzLgogCSAqLwogCiAJSU5KRUNUSU9OX1BPSU5UKCJyZWlu ZGV4LXJlbGF0aW9uLWNvbmN1cnJlbnRseS1iZWZvcmUtc2V0LWRlYWQiLCBOVUxMKTsKIAlwZ3N0 YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKLQkJCQkJ CQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzQpOworCQkJCQkJCQkgUFJPR1JFU1Nf Q1JFQVRFSURYX1BIQVNFX1dBSVRfNSk7CiAJV2FpdEZvckxvY2tlcnNNdWx0aXBsZShsb2NrVGFn cywgQWNjZXNzRXhjbHVzaXZlTG9jaywgdHJ1ZSk7CiAKIAlmb3JlYWNoKGxjLCBpbmRleElkcykK QEAgLTQzNjcsNiArNDU5NiwyOCBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3Qg UmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQlQb3BBY3Rp dmVTbmFwc2hvdCgpOwogCX0KIAorCWZvcmVhY2gobGMsIG5ld0luZGV4SWRzKQorCXsKKwkJUmVp bmRleEluZGV4SW5mbyAqbmV3aWR4ID0gbGZpcnN0KGxjKTsKKworCQkvKgorCQkgKiBDaGVjayBm b3IgdXNlci1yZXF1ZXN0ZWQgYWJvcnQuICBUaGlzIGlzIGluc2lkZSBhIHRyYW5zYWN0aW9uIHNv IGFzCisJCSAqIHhhY3QuYyBkb2VzIG5vdCBpc3N1ZSBhIHVzZWxlc3MgV0FSTklORywgYW5kIGVu c3VyZXMgdGhhdAorCQkgKiBzZXNzaW9uLWxldmVsIGxvY2tzIGFyZSBjbGVhbmVkIHVwIG9uIGFi b3J0LgorCQkgKi8KKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKgorCQkgKiBVcGRh dGluZyBwZ19pbmRleCBtaWdodCBpbnZvbHZlIFRPQVNUIHRhYmxlIGFjY2Vzcywgc28gZW5zdXJl IHdlCisJCSAqIGhhdmUgYSB2YWxpZCBzbmFwc2hvdC4KKwkJICovCisJCVB1c2hBY3RpdmVTbmFw c2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOworCisJCWluZGV4X2NvbmN1cnJlbnRseV9z ZXRfZGVhZChuZXdpZHgtPnRhYmxlSWQsIG5ld2lkeC0+YXV4SW5kZXhJZCk7CisKKwkJUG9wQWN0 aXZlU25hcHNob3QoKTsKKwl9CisKIAkvKiBDb21taXQgdGhpcyB0cmFuc2FjdGlvbiB0byBtYWtl IHRoZSB1cGRhdGVzIHZpc2libGUuICovCiAJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAJ U3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKQEAgLTQzODAsMTEgKzQ2MzEsMTEgQEAgUmVpbmRl eFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRp b25PaWQsIGNvbnN0IFJlaW4KIAkvKgogCSAqIFBoYXNlIDYgb2YgUkVJTkRFWCBDT05DVVJSRU5U TFkKIAkgKgotCSAqIERyb3AgdGhlIG9sZCBpbmRleGVzLgorCSAqIERyb3AgdGhlIG9sZCBhbmQg YXV4aWxpYXJ5IGluZGV4ZXMuCiAJICovCiAKIAlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFt KFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKLQkJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9Q SEFTRV9XQUlUXzUpOworCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfNik7 CiAJV2FpdEZvckxvY2tlcnNNdWx0aXBsZShsb2NrVGFncywgQWNjZXNzRXhjbHVzaXZlTG9jaywg dHJ1ZSk7CiAKIAlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsK QEAgLTQ0MDQsNiArNDY1NSwxOCBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3Qg UmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQkJYWRkX2V4 YWN0X29iamVjdF9hZGRyZXNzKCZvYmplY3QsIG9iamVjdHMpOwogCQl9CiAKKwkJZm9yZWFjaChs YywgbmV3SW5kZXhJZHMpCisJCXsKKwkJCVJlaW5kZXhJbmRleEluZm8gKmlkeCA9IGxmaXJzdChs Yyk7CisJCQlPYmplY3RBZGRyZXNzIG9iamVjdDsKKworCQkJb2JqZWN0LmNsYXNzSWQgPSBSZWxh dGlvblJlbGF0aW9uSWQ7CisJCQlvYmplY3Qub2JqZWN0SWQgPSBpZHgtPmF1eEluZGV4SWQ7CisJ CQlvYmplY3Qub2JqZWN0U3ViSWQgPSAwOworCisJCQlhZGRfZXhhY3Rfb2JqZWN0X2FkZHJlc3Mo Jm9iamVjdCwgb2JqZWN0cyk7CisJCX0KKwogCQkvKgogCQkgKiBVc2UgUEVSRk9STV9ERUxFVElP Tl9DT05DVVJSRU5UX0xPQ0sgc28gdGhhdCBpbmRleF9kcm9wKCkgdXNlcyB0aGUKIAkJICogcmln aHQgbG9jayBsZXZlbC4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5j IGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKaW5kZXggNTM1OWRhYjExNzYuLjg0Zjdj Zjk4MjRlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYworKysgYi9z cmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYwpAQCAtODM0LDcgKzgzNCw3IEBAIEluZGV4SW5m byAqCiBtYWtlSW5kZXhJbmZvKGludCBudW1hdHRycywgaW50IG51bWtleWF0dHJzLCBPaWQgYW1v aWQsIExpc3QgKmV4cHJlc3Npb25zLAogCQkJICBMaXN0ICpwcmVkaWNhdGVzLCBib29sIHVuaXF1 ZSwgYm9vbCBudWxsc19ub3RfZGlzdGluY3QsCiAJCQkgIGJvb2wgaXNyZWFkeSwgYm9vbCBjb25j dXJyZW50LCBib29sIHN1bW1hcml6aW5nLAotCQkJICBib29sIHdpdGhvdXRvdmVybGFwcykKKwkJ CSAgYm9vbCB3aXRob3V0b3ZlcmxhcHMsIGJvb2wgYXV4aWxpYXJ5KQogewogCUluZGV4SW5mbyAg Km4gPSBtYWtlTm9kZShJbmRleEluZm8pOwogCkBAIC04NTAsNiArODUwLDcgQEAgbWFrZUluZGV4 SW5mbyhpbnQgbnVtYXR0cnMsIGludCBudW1rZXlhdHRycywgT2lkIGFtb2lkLCBMaXN0ICpleHBy ZXNzaW9ucywKIAluLT5paV9Db25jdXJyZW50ID0gY29uY3VycmVudDsKIAluLT5paV9TdW1tYXJp emluZyA9IHN1bW1hcml6aW5nOwogCW4tPmlpX1dpdGhvdXRPdmVybGFwcyA9IHdpdGhvdXRvdmVy bGFwczsKKwluLT5paV9BdXhpbGlhcnkgPSBhdXhpbGlhcnk7CiAKIAkvKiBzdW1tYXJpemluZyBp bmRleGVzIGNhbm5vdCBjb250YWluIG5vbi1rZXkgYXR0cmlidXRlcyAqLwogCUFzc2VydCghc3Vt bWFyaXppbmcgfHwgKG51bWtleWF0dHJzID09IG51bWF0dHJzKSk7CkBAIC04NzUsNyArODc2LDYg QEAgbWFrZUluZGV4SW5mbyhpbnQgbnVtYXR0cnMsIGludCBudW1rZXlhdHRycywgT2lkIGFtb2lk LCBMaXN0ICpleHByZXNzaW9ucywKIAkvKiBpbml0aWFsaXplIGluZGV4LWJ1aWxkIHN0YXRlIHRv IGRlZmF1bHQgKi8KIAluLT5paV9Ccm9rZW5Ib3RDaGFpbiA9IGZhbHNlOwogCW4tPmlpX1BhcmFs bGVsV29ya2VycyA9IDA7Ci0Jbi0+aWlfQXV4aWxpYXJ5ID0gZmFsc2U7CiAKIAkvKiBzZXQgdXAg Zm9yIHBvc3NpYmxlIHVzZSBieSBpbmRleCBBTSAqLwogCW4tPmlpX0FtID0gYW1vaWQ7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCBiL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CmluZGV4IDgzYWY1OTRkNGFmLi4z NDc3ODY2ZDcyOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1l dGVycy5kYXQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQK QEAgLTY0MCw2ICs2NDAsMTUgQEAKICAgYm9vdF92YWwgPT4gJ0RFRkFVTFRfQVNTRVJUX0VOQUJM RUQnLAogfSwKIAoreyBuYW1lID0+ICdkZWJ1Z19jaWNfdmFsaWRhdGVfc3RvcmVfbWVtX3BjdCcs IHR5cGUgPT4gJ2ludCcsIGNvbnRleHQgPT4gJ1BHQ19VU0VSU0VUJywgZ3JvdXAgPT4gJ0RFVkVM T1BFUl9PUFRJT05TJywKKyAgc2hvcnRfZGVzYyA9PiAnUGVyY2VudGFnZSBvZiBtYWludGVuYW5j ZV93b3JrX21lbSB1c2VkIGZvciBDSUMgdmFsaWRhdGlvbiB0dXBsZXN0b3JlLicsCisgIGZsYWdz ID0+ICdHVUNfTk9UX0lOX1NBTVBMRScsCisgIHZhcmlhYmxlID0+ICdkZWJ1Z19jaWNfdmFsaWRh dGVfc3RvcmVfbWVtX3BjdCcsCisgIGJvb3RfdmFsID0+ICcxMCcsCisgIG1pbiA9PiAnMScsCisg IG1heCA9PiAnOTAnLAorfSwKKwogeyBuYW1lID0+ICdkZWJ1Z19jb3B5X3BhcnNlX3BsYW5fdHJl ZXMnLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1NVU0VUJywgZ3JvdXAgPT4gJ0RF VkVMT1BFUl9PUFRJT05TJywKICAgc2hvcnRfZGVzYyA9PiAnU2V0IHRoaXMgdG8gZm9yY2UgYWxs IHBhcnNlIGFuZCBwbGFuIHRyZWVzIHRvIGJlIHBhc3NlZCB0aHJvdWdoIGNvcHlPYmplY3QoKSwg dG8gZmFjaWxpdGF0ZSBjYXRjaGluZyBlcnJvcnMgYW5kIG9taXNzaW9ucyBpbiBjb3B5T2JqZWN0 KCkuJywKICAgZmxhZ3MgPT4gJ0dVQ19OT1RfSU5fU0FNUExFJywKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCmlu ZGV4IGMxM2YwNWQzOWRiLi5kYTM1OTg2NjNiYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNj ZXNzL3RhYmxlYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCkBAIC03NDMs NyArNzQzLDggQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkJCQkJCQkJCQlSZWxh dGlvbiBpbmRleF9yZWwsCiAJCQkJCQkJCQkJSW5kZXhJbmZvICppbmRleF9pbmZvLAogCQkJCQkJ CQkJCVNuYXBzaG90IHNuYXBzaG90LAotCQkJCQkJCQkJCVZhbGlkYXRlSW5kZXhTdGF0ZSAqc3Rh dGUpOworCQkJCQkJCQkJCVZhbGlkYXRlSW5kZXhTdGF0ZSAqc3RhdGUsCisJCQkJCQkJCQkJVmFs aWRhdGVJbmRleFN0YXRlICphdXhfc3RhdGUpOwogCiAKIAkvKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAg LTE5MDYsMTkgKzE5MDcsMjQgQEAgdGFibGVfaW5kZXhfYnVpbGRfcmFuZ2Vfc2NhbihSZWxhdGlv biB0YWJsZV9yZWwsCiAgKiB0YWJsZV9pbmRleF92YWxpZGF0ZV9zY2FuIC0gc2Vjb25kIHRhYmxl IHNjYW4gZm9yIGNvbmN1cnJlbnQgaW5kZXggYnVpbGQKICAqCiAgKiBTZWUgdmFsaWRhdGVfaW5k ZXgoKSBmb3IgYW4gZXhwbGFuYXRpb24uCisgKgorICogTm90ZTogaXQgaXMgcmVzcG9uc2liaWxp dHkgb2YgdGhhdCBmdW5jdGlvbiB0byBjbG9zZSBzb3J0c3RhdGVzIGluCisgKiBib3RoIGBzdGF0 ZWAgYW5kIGBhdXhzdGF0ZWAuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAogdGFibGVfaW5kZXhf dmFsaWRhdGVfc2NhbihSZWxhdGlvbiB0YWJsZV9yZWwsCiAJCQkJCQkgIFJlbGF0aW9uIGluZGV4 X3JlbCwKIAkJCQkJCSAgSW5kZXhJbmZvICppbmRleF9pbmZvLAogCQkJCQkJICBTbmFwc2hvdCBz bmFwc2hvdCwKLQkJCQkJCSAgVmFsaWRhdGVJbmRleFN0YXRlICpzdGF0ZSkKKwkJCQkJCSAgVmFs aWRhdGVJbmRleFN0YXRlICpzdGF0ZSwKKwkJCQkJCSAgVmFsaWRhdGVJbmRleFN0YXRlICphdXhz dGF0ZSkKIHsKIAl0YWJsZV9yZWwtPnJkX3RhYmxlYW0tPmluZGV4X3ZhbGlkYXRlX3NjYW4odGFi bGVfcmVsLAogCQkJCQkJCQkJCQkgICBpbmRleF9yZWwsCiAJCQkJCQkJCQkJCSAgIGluZGV4X2lu Zm8sCiAJCQkJCQkJCQkJCSAgIHNuYXBzaG90LAotCQkJCQkJCQkJCQkgICBzdGF0ZSk7CisJCQkJ CQkJCQkJCSAgIHN0YXRlLAorCQkJCQkJCQkJCQkgICBhdXhzdGF0ZSk7CiB9CiAKIApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9p bmRleC5oCmluZGV4IDlhZWU4MjI2MzQ3Li4zMjM5ZTVjNzE2ZiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9pbmRleC5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaApA QCAtMzEsNiArMzEsNyBAQCB0eXBlZGVmIGVudW0KIHsKIAlJTkRFWF9DUkVBVEVfU0VUX1JFQURZ LAogCUlOREVYX0NSRUFURV9TRVRfVkFMSUQsCisJSU5ERVhfRFJPUF9DTEVBUl9SRUFEWSwKIAlJ TkRFWF9EUk9QX0NMRUFSX1ZBTElELAogCUlOREVYX0RST1BfU0VUX0RFQUQsCiB9IEluZGV4U3Rh dGVGbGFnc0FjdGlvbjsKQEAgLTcyLDYgKzczLDcgQEAgZXh0ZXJuIHZvaWQgaW5kZXhfY2hlY2tf cHJpbWFyeV9rZXkoUmVsYXRpb24gaGVhcFJlbCwKICNkZWZpbmUJSU5ERVhfQ1JFQVRFX1BBUlRJ VElPTkVECQkJKDEgPDwgNSkKICNkZWZpbmUgSU5ERVhfQ1JFQVRFX0lOVkFMSUQJCQkJKDEgPDwg NikKICNkZWZpbmUgSU5ERVhfQ1JFQVRFX1NVUFBSRVNTX1BST0dSRVNTCQkoMSA8PCA3KQorI2Rl ZmluZSBJTkRFWF9DUkVBVEVfQVVYSUxJQVJZCQkJCSgxIDw8IDgpCiAKIGV4dGVybiBPaWQJaW5k ZXhfY3JlYXRlKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQkJCSBjb25zdCBjaGFyICppbmRl eFJlbGF0aW9uTmFtZSwKQEAgLTEwNiw2ICsxMDgsMTEgQEAgZXh0ZXJuIE9pZAlpbmRleF9jcmVh dGVfY29weShSZWxhdGlvbiBoZWFwUmVsYXRpb24sIHVpbnQxNiBmbGFncywKIAkJCQkJCQkgIE9p ZCBvbGRJbmRleElkLCBPaWQgdGFibGVzcGFjZU9pZCwKIAkJCQkJCQkgIGNvbnN0IGNoYXIgKm5l d05hbWUpOwogCitleHRlcm4gT2lkCWluZGV4X2NvbmN1cnJlbnRseV9jcmVhdGVfYXV4KFJlbGF0 aW9uIGhlYXBSZWxhdGlvbiwKKwkJCQkJCQkJCQkgIE9pZCBtYWluSW5kZXhJZCwKKwkJCQkJCQkJ CQkgIE9pZCB0YWJsZXNwYWNlT2lkLAorCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqbmV3TmFtZSk7 CisKIGV4dGVybiB2b2lkIGluZGV4X2NvbmN1cnJlbnRseV9idWlsZChPaWQgaGVhcFJlbGF0aW9u SWQsCiAJCQkJCQkJCQkgT2lkIGluZGV4UmVsYXRpb25JZCk7CiAKQEAgLTE1Miw3ICsxNTksNyBA QCBleHRlcm4gdm9pZCBpbmRleF9idWlsZChSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJCQli b29sIHBhcmFsbGVsLAogCQkJCQkJYm9vbCBwcm9ncmVzcyk7CiAKLWV4dGVybiB2b2lkIHZhbGlk YXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBTbmFwc2hvdCBzbmFwc2hvdCk7Citl eHRlcm4gdm9pZCB2YWxpZGF0ZV9pbmRleChPaWQgaGVhcElkLCBPaWQgaW5kZXhJZCwgT2lkIGF1 eEluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90KTsKIAogZXh0ZXJuIHZvaWQgaW5kZXhfc2V0X3N0 YXRlX2ZsYWdzKE9pZCBpbmRleElkLCBJbmRleFN0YXRlRmxhZ3NBY3Rpb24gYWN0aW9uKTsKIApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvcHJvZ3Jlc3MuaCBiL3NyYy9pbmNsdWRl L2NvbW1hbmRzL3Byb2dyZXNzLmgKaW5kZXggMmExMjkyMGM3NWYuLmRhYWM5ZjRmMzRlIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9wcm9ncmVzcy5oCisrKyBiL3NyYy9pbmNsdWRl L2NvbW1hbmRzL3Byb2dyZXNzLmgKQEAgLTEyMCwxNCArMTIwLDE1IEBACiAKIC8qIFBoYXNlcyBv ZiBDUkVBVEUgSU5ERVggKGFzIGFkdmVydGlzZWQgdmlhIFBST0dSRVNTX0NSRUFURUlEWF9QSEFT RSkgKi8KICNkZWZpbmUgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfMQkJCTEKLSNkZWZp bmUgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX0JVSUxECQkJMgotI2RlZmluZSBQUk9HUkVTU19D UkVBVEVJRFhfUEhBU0VfV0FJVF8yCQkJMwotI2RlZmluZSBQUk9HUkVTU19DUkVBVEVJRFhfUEhB U0VfVkFMSURBVEVfSURYU0NBTgk0Ci0jZGVmaW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9W QUxJREFURV9TT1JUCQk1Ci0jZGVmaW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9WQUxJREFU RV9UQUJMRVNDQU4JNgotI2RlZmluZSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8zCQkJ NworI2RlZmluZSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8yCQkJMgorI2RlZmluZSBQ Uk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfQlVJTEQJCQkzCisjZGVmaW5lIFBST0dSRVNTX0NSRUFU RUlEWF9QSEFTRV9XQUlUXzMJCQk0CisjZGVmaW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9W QUxJREFURV9JRFhTQ0FOCTUKKyNkZWZpbmUgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1ZBTElE QVRFX1NPUlQJCTYKKyNkZWZpbmUgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1ZBTElEQVRFX0lE WE1FUkdFCTcKICNkZWZpbmUgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfNAkJCTgKICNk ZWZpbmUgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfNQkJCTkKKyNkZWZpbmUgUFJPR1JF U1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfNgkJCTEwCiAKIC8qCiAgKiBTdWJwaGFzZXMgb2YgQ1JF QVRFIElOREVYLCBmb3IgaW5kZXhfYnVpbGQuCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9taXNj YWRtaW4uaCBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCmluZGV4IDhjY2RmNjEyNDZiLi44YzJi M2E5YzVlNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKKysrIGIvc3JjL2lu Y2x1ZGUvbWlzY2FkbWluLmgKQEAgLTI3MSw2ICsyNzEsNyBAQCBleHRlcm4gUEdETExJTVBPUlQg Ym9vbCBhbGxvd1N5c3RlbVRhYmxlTW9kczsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgd29ya19t ZW07CiBleHRlcm4gUEdETExJTVBPUlQgZG91YmxlIGhhc2hfbWVtX211bHRpcGxpZXI7CiBleHRl cm4gUEdETExJTVBPUlQgaW50IG1haW50ZW5hbmNlX3dvcmtfbWVtOworZXh0ZXJuIFBHRExMSU1Q T1JUIGludCBkZWJ1Z19jaWNfdmFsaWRhdGVfc3RvcmVfbWVtX3BjdDsKIGV4dGVybiBQR0RMTElN UE9SVCBpbnQgbWF4X3BhcmFsbGVsX21haW50ZW5hbmNlX3dvcmtlcnM7CiAKIC8qCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaCBiL3NyYy9pbmNsdWRlL25vZGVzL21h a2VmdW5jcy5oCmluZGV4IGJmNTRkMzlmZWIwLi5jZDdmMWViMDU5MiAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1 bmNzLmgKQEAgLTk5LDcgKzk5LDggQEAgZXh0ZXJuIEluZGV4SW5mbyAqbWFrZUluZGV4SW5mbyhp bnQgbnVtYXR0cnMsIGludCBudW1rZXlhdHRycywgT2lkIGFtb2lkLAogCQkJCQkJCQlMaXN0ICpl eHByZXNzaW9ucywgTGlzdCAqcHJlZGljYXRlcywKIAkJCQkJCQkJYm9vbCB1bmlxdWUsIGJvb2wg bnVsbHNfbm90X2Rpc3RpbmN0LAogCQkJCQkJCQlib29sIGlzcmVhZHksIGJvb2wgY29uY3VycmVu dCwKLQkJCQkJCQkJYm9vbCBzdW1tYXJpemluZywgYm9vbCB3aXRob3V0b3ZlcmxhcHMpOworCQkJ CQkJCQlib29sIHN1bW1hcml6aW5nLCBib29sIHdpdGhvdXRvdmVybGFwcywKKwkJCQkJCQkJYm9v bCBhdXhpbGlhcnkpOwogCiBleHRlcm4gTm9kZSAqbWFrZVN0cmluZ0NvbnN0KGNoYXIgKnN0ciwg aW50IGxvY2F0aW9uKTsKIGV4dGVybiBEZWZFbGVtICptYWtlRGVmRWxlbShjaGFyICpuYW1lLCBO b2RlICphcmcsIGludCBsb2NhdGlvbik7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0 ZV9pbmRleC5vdXQKaW5kZXggNTU1MzhjNGM0MWUuLjkzN2MzYjQ4YTBmIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0CkBAIC0xNDM3LDYgKzE0MzcsNyBAQCBE RVRBSUw6ICBLZXkgKGYxKT0oYikgYWxyZWFkeSBleGlzdHMuCiBDUkVBVEUgVU5JUVVFIElOREVY IENPTkNVUlJFTlRMWSBjb25jdXJfaW5kZXgzIE9OIGNvbmN1cl9oZWFwKGYyKTsKIEVSUk9SOiAg Y291bGQgbm90IGNyZWF0ZSB1bmlxdWUgaW5kZXggImNvbmN1cl9pbmRleDMiCiBERVRBSUw6ICBL ZXkgKGYyKT0oYikgaXMgZHVwbGljYXRlZC4KK0RST1AgSU5ERVggY29uY3VyX2luZGV4M19jY2F1 eDsKIC0tIHRlc3QgdGhhdCBleHByZXNzaW9uIGluZGV4ZXMgYW5kIHBhcnRpYWwgaW5kZXhlcyB3 b3JrIGNvbmN1cnJlbnRseQogQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBjb25jdXJfaW5kZXg0 IG9uIGNvbmN1cl9oZWFwKGYyKSBXSEVSRSBmMT0nYSc7CiBDUkVBVEUgSU5ERVggQ09OQ1VSUkVO VExZIGNvbmN1cl9pbmRleDUgb24gY29uY3VyX2hlYXAoZjIpIFdIRVJFIGYxPSd4JzsKQEAgLTMy MTEsNiArMzIxMiw3IEBAIElOU0VSVCBJTlRPIGNvbmN1cl9yZWluZGV4X3RhYjQgVkFMVUVTICgx KSwgKDEpLCAoMik7CiBDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBjb25jdXJfcmVp bmRleF9pbmQ1IE9OIGNvbmN1cl9yZWluZGV4X3RhYjQgKGMxKTsKIEVSUk9SOiAgY291bGQgbm90 IGNyZWF0ZSB1bmlxdWUgaW5kZXggImNvbmN1cl9yZWluZGV4X2luZDUiCiBERVRBSUw6ICBLZXkg KGMxKT0oMSkgaXMgZHVwbGljYXRlZC4KK0RST1AgSU5ERVggY29uY3VyX3JlaW5kZXhfaW5kNV9j Y2F1eDsKIC0tIFJlaW5kZXhpbmcgY29uY3VycmVudGx5IHRoaXMgaW5kZXggZmFpbHMgd2l0aCB0 aGUgc2FtZSBmYWlsdXJlLgogLS0gVGhlIGV4dHJhIGluZGV4IGNyZWF0ZWQgaXMgaXRzZWxmIGlu dmFsaWQsIGFuZCBjYW4gYmUgZHJvcHBlZC4KIFJFSU5ERVggSU5ERVggQ09OQ1VSUkVOVExZIGNv bmN1cl9yZWluZGV4X2luZDU7CkBAIC0zMjIzLDggKzMyMjUsMTAgQEAgREVUQUlMOiAgS2V5IChj MSk9KDEpIGlzIGR1cGxpY2F0ZWQuCiAgYzEgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAg ICAgICAgIHwgCiBJbmRleGVzOgogICAgICJjb25jdXJfcmVpbmRleF9pbmQ1IiBVTklRVUUsIGJ0 cmVlIChjMSkgSU5WQUxJRAorICAgICJjb25jdXJfcmVpbmRleF9pbmQ1X2NjYXV4IiBzdGlyIChj MSkgSU5WQUxJRAogICAgICJjb25jdXJfcmVpbmRleF9pbmQ1X2NjbmV3IiBVTklRVUUsIGJ0cmVl IChjMSkgSU5WQUxJRAogCitEUk9QIElOREVYIGNvbmN1cl9yZWluZGV4X2luZDVfY2NhdXg7CiBE Uk9QIElOREVYIGNvbmN1cl9yZWluZGV4X2luZDVfY2NuZXc7CiAtLSBUaGlzIG1ha2VzIHRoZSBw cmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRleCBjYW4gYmVjb21lIHZhbGlkLgog REVMRVRFIEZST00gY29uY3VyX3JlaW5kZXhfdGFiNCBXSEVSRSBjMSA9IDE7CkBAIC0zMjUyLDYg KzMyNTYsMzcgQEAgSW5kZXhlczoKICAgICAiY29uY3VyX3JlaW5kZXhfaW5kNSIgVU5JUVVFLCBi dHJlZSAoYzEpCiAKIERST1AgVEFCTEUgY29uY3VyX3JlaW5kZXhfdGFiNDsKKy0tIENoZWNrIGhh bmRsaW5nIG9mIGF1eGlsaWFyeSBpbmRleGVzCitDUkVBVEUgVEFCTEUgYXV4X2luZGV4X3RhYjUg KGMxIGludCk7CitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFiNSBWQUxVRVMgKDEpLCAoMSksICgy KTsKKy0tIFRoaXMgdHJpY2sgY3JlYXRlcyBhbiBpbnZhbGlkIGluZGV4IGFuZCBhdXhpbGlhcnkg aW5kZXggZm9yIGl0CitDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBhdXhfaW5kZXhf aW5kNiBPTiBhdXhfaW5kZXhfdGFiNSAoYzEpOworRVJST1I6ICBjb3VsZCBub3QgY3JlYXRlIHVu aXF1ZSBpbmRleCAiYXV4X2luZGV4X2luZDYiCitERVRBSUw6ICBLZXkgKGMxKT0oMSkgaXMgZHVw bGljYXRlZC4KK1xkIGF1eF9pbmRleF90YWI1CisgICAgICAgICAgIFRhYmxlICJwdWJsaWMuYXV4 X2luZGV4X3RhYjUiCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwg RGVmYXVsdCAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LS0tLQorIGMxICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorSW5kZXhl czoKKyAgICAiYXV4X2luZGV4X2luZDYiIFVOSVFVRSwgYnRyZWUgKGMxKSBJTlZBTElECisgICAg ImF1eF9pbmRleF9pbmQ2X2NjYXV4IiBzdGlyIChjMSkgSU5WQUxJRAorCistLSBOb3QgYWxsb3dl ZCB0byByZWluZGV4IGF1eGlsaWFyeSBpbmRleAorUkVJTkRFWCBJTkRFWCBhdXhfaW5kZXhfaW5k Nl9jY2F1eDsKK0VSUk9SOiAgcmVpbmRleCBvZiBhdXhpbGlhcnkgaW5kZXggImF1eF9pbmRleF9p bmQ2X2NjYXV4IiBub3Qgc3VwcG9ydGVkCistLSBDb25jdXJyZW50bHkgYWxzbworUkVJTkRFWCBJ TkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDZfY2NhdXg7CitFUlJPUjogIHJlaW5kZXgg b2YgYXV4aWxpYXJ5IGluZGV4ICJhdXhfaW5kZXhfaW5kNl9jY2F1eCIgbm90IHN1cHBvcnRlZAor LS0gVGhpcyBtYWtlcyB0aGUgcHJldmlvdXMgZmFpbHVyZSBnbyBhd2F5LCBzbyB0aGUgaW5kZXgg Y2FuIGJlY29tZSB2YWxpZC4KK0RFTEVURSBGUk9NIGF1eF9pbmRleF90YWI1IFdIRVJFIGMxID0g MTsKKy0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmluZyByZWluZGV4CitSRUlOREVYIFRBQkxFIGF1 eF9pbmRleF90YWI1OworV0FSTklORzogIHNraXBwaW5nIHJlaW5kZXggb2YgYXV4aWxpYXJ5IGlu ZGV4ICJwdWJsaWMuYXV4X2luZGV4X2luZDZfY2NhdXgiCistLSBTaG91bGQgYmUgc2tpcHBlZCBk dXJpbmcgY29uY3VycmVudCByZWluZGV4CitSRUlOREVYIFRBQkxFIENPTkNVUlJFTlRMWSBhdXhf aW5kZXhfdGFiNTsKK1dBUk5JTkc6ICBza2lwcGluZyByZWluZGV4IG9mIGF1eGlsaWFyeSBpbmRl eCAicHVibGljLmF1eF9pbmRleF9pbmQ2X2NjYXV4IgorRFJPUCBUQUJMRSBhdXhfaW5kZXhfdGFi NTsKIC0tIENoZWNrIGhhbmRsaW5nIG9mIGluZGV4ZXMgd2l0aCBleHByZXNzaW9ucyBhbmQgcHJl ZGljYXRlcy4gIFRoZQogLS0gZGVmaW5pdGlvbnMgb2YgdGhlIHJlYnVpbHQgaW5kZXhlcyBzaG91 bGQgbWF0Y2ggdGhlIG9yaWdpbmFsCiAtLSBkZWZpbml0aW9ucy4KZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5kZXhpbmcub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9pbmRleGluZy5vdXQKaW5kZXggZjUwODY4Y2E2YTYuLmIzNDAwOWY4NjhjIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luZGV4aW5nLm91dAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2luZGV4aW5nLm91dApAQCAtMTU4NSwxMCArMTU4NSwxMSBAQCBz ZWxlY3QgaW5kZXhyZWxpZDo6cmVnY2xhc3MsIGluZGlzdmFsaWQsCiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIHBhcnRlZF9pc3ZhbGlkX2lkeCAgICAgICAg ICAgICB8IGYgICAgICAgICAgfCBwYXJ0ZWRfaXN2YWxpZF90YWIgICAgfCAKICBwYXJ0ZWRfaXN2 YWxpZF9pZHhfMTEgICAgICAgICAgfCBmICAgICAgICAgIHwgcGFydGVkX2lzdmFsaWRfdGFiXzEx IHwgcGFydGVkX2lzdmFsaWRfdGFiXzFfZXhwcl9pZHgKKyBwYXJ0ZWRfaXN2YWxpZF9pZHhfMTFf Y2NhdXggICAgfCBmICAgICAgICAgIHwgcGFydGVkX2lzdmFsaWRfdGFiXzExIHwgCiAgcGFydGVk X2lzdmFsaWRfdGFiXzEyX2V4cHJfaWR4IHwgdCAgICAgICAgICB8IHBhcnRlZF9pc3ZhbGlkX3Rh Yl8xMiB8IHBhcnRlZF9pc3ZhbGlkX3RhYl8xX2V4cHJfaWR4CiAgcGFydGVkX2lzdmFsaWRfdGFi XzFfZXhwcl9pZHggIHwgZiAgICAgICAgICB8IHBhcnRlZF9pc3ZhbGlkX3RhYl8xICB8IHBhcnRl ZF9pc3ZhbGlkX2lkeAogIHBhcnRlZF9pc3ZhbGlkX3RhYl8yX2V4cHJfaWR4ICB8IHQgICAgICAg ICAgfCBwYXJ0ZWRfaXN2YWxpZF90YWJfMiAgfCBwYXJ0ZWRfaXN2YWxpZF9pZHgKLSg1IHJvd3Mp CisoNiByb3dzKQogCiBkcm9wIHRhYmxlIHBhcnRlZF9pc3ZhbGlkX3RhYjsKIC0tIENoZWNrIHN0 YXRlIG9mIHJlcGxpY2EgaW5kZXhlcyB3aGVuIGF0dGFjaGluZyBhIHBhcnRpdGlvbi4KZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0IGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKaW5kZXggYTY1YTViZjBjNGYuLjk4MDBiOWYxNDQwIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dApAQCAtMjA3OSwxNCArMjA3OSwxNSBAQCBw Z19zdGF0X3Byb2dyZXNzX2NyZWF0ZV9pbmRleHwgU0VMRUNUIHMucGlkLAogICAgICAgICBDQVNF IHMucGFyYW0xMAogICAgICAgICAgICAgV0hFTiAwIFRIRU4gJ2luaXRpYWxpemluZyc6OnRleHQK ICAgICAgICAgICAgIFdIRU4gMSBUSEVOICd3YWl0aW5nIGZvciB3cml0ZXJzIGJlZm9yZSBidWls ZCc6OnRleHQKLSAgICAgICAgICAgIFdIRU4gMiBUSEVOICgnYnVpbGRpbmcgaW5kZXgnOjp0ZXh0 IHx8IENPQUxFU0NFKCgnOiAnOjp0ZXh0IHx8IHBnX2luZGV4YW1fcHJvZ3Jlc3NfcGhhc2VuYW1l KChzLnBhcmFtOSk6Om9pZCwgcy5wYXJhbTExKSksICcnOjp0ZXh0KSkKLSAgICAgICAgICAgIFdI RU4gMyBUSEVOICd3YWl0aW5nIGZvciB3cml0ZXJzIGJlZm9yZSB2YWxpZGF0aW9uJzo6dGV4dAot ICAgICAgICAgICAgV0hFTiA0IFRIRU4gJ2luZGV4IHZhbGlkYXRpb246IHNjYW5uaW5nIGluZGV4 Jzo6dGV4dAotICAgICAgICAgICAgV0hFTiA1IFRIRU4gJ2luZGV4IHZhbGlkYXRpb246IHNvcnRp bmcgdHVwbGVzJzo6dGV4dAotICAgICAgICAgICAgV0hFTiA2IFRIRU4gJ2luZGV4IHZhbGlkYXRp b246IHNjYW5uaW5nIHRhYmxlJzo6dGV4dAotICAgICAgICAgICAgV0hFTiA3IFRIRU4gJ3dhaXRp bmcgZm9yIG9sZCBzbmFwc2hvdHMnOjp0ZXh0Ci0gICAgICAgICAgICBXSEVOIDggVEhFTiAnd2Fp dGluZyBmb3IgcmVhZGVycyBiZWZvcmUgbWFya2luZyBkZWFkJzo6dGV4dAotICAgICAgICAgICAg V0hFTiA5IFRIRU4gJ3dhaXRpbmcgZm9yIHJlYWRlcnMgYmVmb3JlIGRyb3BwaW5nJzo6dGV4dAor ICAgICAgICAgICAgV0hFTiAyIFRIRU4gJ3dhaXRpbmcgZm9yIHdyaXRlcnMgdG8gdXNlIGF1eGls aWFyeSBpbmRleCc6OnRleHQKKyAgICAgICAgICAgIFdIRU4gMyBUSEVOICgnYnVpbGRpbmcgaW5k ZXgnOjp0ZXh0IHx8IENPQUxFU0NFKCgnOiAnOjp0ZXh0IHx8IHBnX2luZGV4YW1fcHJvZ3Jlc3Nf cGhhc2VuYW1lKChzLnBhcmFtOSk6Om9pZCwgcy5wYXJhbTExKSksICcnOjp0ZXh0KSkKKyAgICAg ICAgICAgIFdIRU4gNCBUSEVOICd3YWl0aW5nIGZvciB3cml0ZXJzIGJlZm9yZSB2YWxpZGF0aW9u Jzo6dGV4dAorICAgICAgICAgICAgV0hFTiA1IFRIRU4gJ2luZGV4IHZhbGlkYXRpb246IHNjYW5u aW5nIGluZGV4Jzo6dGV4dAorICAgICAgICAgICAgV0hFTiA2IFRIRU4gJ2luZGV4IHZhbGlkYXRp b246IHNvcnRpbmcgdHVwbGVzJzo6dGV4dAorICAgICAgICAgICAgV0hFTiA3IFRIRU4gJ2luZGV4 IHZhbGlkYXRpb246IG1lcmdpbmcgaW5kZXhlcyc6OnRleHQKKyAgICAgICAgICAgIFdIRU4gOCBU SEVOICd3YWl0aW5nIGZvciBvbGQgc25hcHNob3RzJzo6dGV4dAorICAgICAgICAgICAgV0hFTiA5 IFRIRU4gJ3dhaXRpbmcgZm9yIHJlYWRlcnMgYmVmb3JlIG1hcmtpbmcgZGVhZCc6OnRleHQKKyAg ICAgICAgICAgIFdIRU4gMTAgVEhFTiAnd2FpdGluZyBmb3IgcmVhZGVycyBiZWZvcmUgZHJvcHBp bmcnOjp0ZXh0CiAgICAgICAgICAgICBFTFNFIE5VTEw6OnRleHQKICAgICAgICAgRU5EIEFTIHBo YXNlLAogICAgIHMucGFyYW00IEFTIGxvY2tlcnNfdG90YWwsCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3Jl YXRlX2luZGV4LnNxbAppbmRleCA4MmU0MDYyYTIxNS4uODA1ZDJlYjg0ODUgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbApAQCAtNTAzLDYgKzUwMyw3IEBAIENSRUFURSBVTklR VUUgSU5ERVggQ09OQ1VSUkVOVExZIElGIE5PVCBFWElTVFMgY29uY3VyX2luZGV4MiBPTiBjb25j dXJfaGVhcChmMSk7CiBJTlNFUlQgSU5UTyBjb25jdXJfaGVhcCBWQUxVRVMgKCdiJywneCcpOwog LS0gY2hlY2sgaWYgY29uc3RyYWludCBpcyBlbmZvcmNlZCBwcm9wZXJseSBhdCBidWlsZCB0aW1l CiBDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBjb25jdXJfaW5kZXgzIE9OIGNvbmN1 cl9oZWFwKGYyKTsKK0RST1AgSU5ERVggY29uY3VyX2luZGV4M19jY2F1eDsKIC0tIHRlc3QgdGhh dCBleHByZXNzaW9uIGluZGV4ZXMgYW5kIHBhcnRpYWwgaW5kZXhlcyB3b3JrIGNvbmN1cnJlbnRs eQogQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBjb25jdXJfaW5kZXg0IG9uIGNvbmN1cl9oZWFw KGYyKSBXSEVSRSBmMT0nYSc7CiBDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIGNvbmN1cl9pbmRl eDUgb24gY29uY3VyX2hlYXAoZjIpIFdIRVJFIGYxPSd4JzsKQEAgLTEzMTUsMTAgKzEzMTYsMTIg QEAgQ1JFQVRFIFRBQkxFIGNvbmN1cl9yZWluZGV4X3RhYjQgKGMxIGludCk7CiBJTlNFUlQgSU5U TyBjb25jdXJfcmVpbmRleF90YWI0IFZBTFVFUyAoMSksICgxKSwgKDIpOwogLS0gVGhpcyB0cmlj ayBjcmVhdGVzIGFuIGludmFsaWQgaW5kZXguCiBDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJF TlRMWSBjb25jdXJfcmVpbmRleF9pbmQ1IE9OIGNvbmN1cl9yZWluZGV4X3RhYjQgKGMxKTsKK0RS T1AgSU5ERVggY29uY3VyX3JlaW5kZXhfaW5kNV9jY2F1eDsKIC0tIFJlaW5kZXhpbmcgY29uY3Vy cmVudGx5IHRoaXMgaW5kZXggZmFpbHMgd2l0aCB0aGUgc2FtZSBmYWlsdXJlLgogLS0gVGhlIGV4 dHJhIGluZGV4IGNyZWF0ZWQgaXMgaXRzZWxmIGludmFsaWQsIGFuZCBjYW4gYmUgZHJvcHBlZC4K IFJFSU5ERVggSU5ERVggQ09OQ1VSUkVOVExZIGNvbmN1cl9yZWluZGV4X2luZDU7CiBcZCBjb25j dXJfcmVpbmRleF90YWI0CitEUk9QIElOREVYIGNvbmN1cl9yZWluZGV4X2luZDVfY2NhdXg7CiBE Uk9QIElOREVYIGNvbmN1cl9yZWluZGV4X2luZDVfY2NuZXc7CiAtLSBUaGlzIG1ha2VzIHRoZSBw cmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRleCBjYW4gYmVjb21lIHZhbGlkLgog REVMRVRFIEZST00gY29uY3VyX3JlaW5kZXhfdGFiNCBXSEVSRSBjMSA9IDE7CkBAIC0xMzMwLDYg KzEzMzMsMjQgQEAgUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgY29uY3VyX3JlaW5kZXhfaW5k NTsKIFxkIGNvbmN1cl9yZWluZGV4X3RhYjQKIERST1AgVEFCTEUgY29uY3VyX3JlaW5kZXhfdGFi NDsKIAorLS0gQ2hlY2sgaGFuZGxpbmcgb2YgYXV4aWxpYXJ5IGluZGV4ZXMKK0NSRUFURSBUQUJM RSBhdXhfaW5kZXhfdGFiNSAoYzEgaW50KTsKK0lOU0VSVCBJTlRPIGF1eF9pbmRleF90YWI1IFZB TFVFUyAoMSksICgxKSwgKDIpOworLS0gVGhpcyB0cmljayBjcmVhdGVzIGFuIGludmFsaWQgaW5k ZXggYW5kIGF1eGlsaWFyeSBpbmRleCBmb3IgaXQKK0NSRUFURSBVTklRVUUgSU5ERVggQ09OQ1VS UkVOVExZIGF1eF9pbmRleF9pbmQ2IE9OIGF1eF9pbmRleF90YWI1IChjMSk7CitcZCBhdXhfaW5k ZXhfdGFiNQorLS0gTm90IGFsbG93ZWQgdG8gcmVpbmRleCBhdXhpbGlhcnkgaW5kZXgKK1JFSU5E RVggSU5ERVggYXV4X2luZGV4X2luZDZfY2NhdXg7CistLSBDb25jdXJyZW50bHkgYWxzbworUkVJ TkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDZfY2NhdXg7CistLSBUaGlzIG1h a2VzIHRoZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRleCBjYW4gYmVjb21l IHZhbGlkLgorREVMRVRFIEZST00gYXV4X2luZGV4X3RhYjUgV0hFUkUgYzEgPSAxOworLS0gU2hv dWxkIGJlIHNraXBwZWQgZHVyaW5nIHJlaW5kZXgKK1JFSU5ERVggVEFCTEUgYXV4X2luZGV4X3Rh YjU7CistLSBTaG91bGQgYmUgc2tpcHBlZCBkdXJpbmcgY29uY3VycmVudCByZWluZGV4CitSRUlO REVYIFRBQkxFIENPTkNVUlJFTlRMWSBhdXhfaW5kZXhfdGFiNTsKK0RST1AgVEFCTEUgYXV4X2lu ZGV4X3RhYjU7CisKIC0tIENoZWNrIGhhbmRsaW5nIG9mIGluZGV4ZXMgd2l0aCBleHByZXNzaW9u cyBhbmQgcHJlZGljYXRlcy4gIFRoZQogLS0gZGVmaW5pdGlvbnMgb2YgdGhlIHJlYnVpbHQgaW5k ZXhlcyBzaG91bGQgbWF0Y2ggdGhlIG9yaWdpbmFsCiAtLSBkZWZpbml0aW9ucy4KLS0gCjIuNDMu MAoK --000000000000a3b825064f322697 Content-Type: application/octet-stream; name="v35-0005-Track-and-drop-auxiliary-indexes-in-DROP-REINDEX.patch" Content-Disposition: attachment; filename="v35-0005-Track-and-drop-auxiliary-indexes-in-DROP-REINDEX.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnuipbjj4 RnJvbSBhM2NiOGUzZTMzYzAzOTA0ZDQ1NWFjOTg2Y2MwZWUwYmU0MWFkMGU0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAzMSBEZWMgMjAyNCAxNDozNjozMSArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjM1IDUvN10gVHJhY2sgYW5kIGRyb3AgYXV4aWxpYXJ5IGluZGV4ZXMgaW4gRFJPUC9S RUlOREVYCgpEdXJpbmcgY29uY3VycmVudCBpbmRleCBvcGVyYXRpb25zLCBhdXhpbGlhcnkgaW5k ZXhlcyBtYXkgYmUgbGVmdCBhcyBvcnBoYW5lZCBvYmplY3RzIHdoZW4gZXJyb3JzIG9jY3VyIChq dW5rIGF1eGlsaWFyeSBpbmRleGVzKS4KClRoaXMgcGF0Y2ggaW1wcm92ZXMgdGhlIGhhbmRsaW5n IG9mIHN1Y2ggYXV4aWxpYXJ5IGluZGV4ZXM6Ci0gYWRkIGF1eGlsaWFyeUZvckluZGV4SWQgcGFy YW1ldGVyIHRvIGluZGV4X2NyZWF0ZSgpIHRvIHRyYWNrIGRlcGVuZGVuY2llcyBiZXR3ZWVuIG1h aW4gYW5kIGF1eGlsaWFyeSBpbmRleGVzCi0gYXV0b21hdGljYWxseSBkcm9wIGF1eGlsaWFyeSBp bmRleGVzIHdoZW4gdGhlIG1haW4gaW5kZXggaXMgZHJvcHBlZAotIGRlbGV0ZSBqdW5rIGF1eGls aWFyeSBpbmRleGVzIHByb3Blcmx5IGR1cmluZyBSRUlOREVYIG9wZXJhdGlvbnMKLS0tCiBkb2Mv c3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sICAgICAgICAgfCAgMTQgKystCiBkb2Mvc3Jj L3NnbWwvcmVmL3JlaW5kZXguc2dtbCAgICAgICAgICAgICAgfCAgMTAgKy0KIHNyYy9iYWNrZW5k L2NhdGFsb2cvZGVwZW5kZW5jeS5jICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY2F0 YWxvZy9pbmRleC5jICAgICAgICAgICAgICAgIHwgIDc4ICsrKysrKysrKysrKy0tLS0KIHNyYy9i YWNrZW5kL2NhdGFsb2cvcGdfZGVwZW5kLmMgICAgICAgICAgICB8ICA2MiArKysrKysrKysrKysr CiBzcmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMgICAgICAgICAgICAgfCAgIDEgKwogc3Jj L2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgICAgICAgICAgIHwgIDM3ICsrKysrKystCiBz cmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyAgICAgICAgICAgfCAgNTIgKysrKysrKysr Ky0KIHNyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jICAgICAgICAgICAgICB8ICAgMyArLQog c3JjL2luY2x1ZGUvY2F0YWxvZy9kZXBlbmRlbmN5LmggICAgICAgICAgIHwgICAxICsKIHNyYy9p bmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW5jbHVk ZS9ub2Rlcy9tYWtlZnVuY3MuaCAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dCB8IDEwMiArKysrKysrKysrKysrKysrKysrKy0K IHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwgICAgICB8ICA1NSArKysrKysr KysrLQogMTQgZmlsZXMgY2hhbmdlZCwgMzgyIGluc2VydGlvbnMoKyksIDM5IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwgYi9kb2Mv c3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sCmluZGV4IDkwMWM2Y2YyMmJjLi5iMDQwN2M4 NDBiMyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfaW5kZXguc2dtbAorKysg Yi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sCkBAIC02NjgsMTAgKzY2OCwxNiBA QCBJbmRleGVzOgogICAgICJpZHhfY2NhdXgiIHN0aXIgKGNvbCkgSU5WQUxJRAogPC9wcm9ncmFt bGlzdGluZz4KIAotICAgIFRoZSByZWNvbW1lbmRlZCByZWNvdmVyeQotICAgIG1ldGhvZCBpbiBz dWNoIGNhc2VzIGlzIHRvIGRyb3AgdGhlc2UgaW5kZXhlcyBhbmQgdHJ5IGFnYWluIHRvIHBlcmZv cm0KLSAgICA8Y29tbWFuZD5DUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZPC9jb21tYW5kPi4gKEFu b3RoZXIgcG9zc2liaWxpdHkgaXMKLSAgICB0byByZWJ1aWxkIHRoZSBpbmRleCB3aXRoIDxjb21t YW5kPlJFSU5ERVggSU5ERVggQ09OQ1VSUkVOVExZPC9jb21tYW5kPikuCisgICAgVGhlIHJlY29t bWVuZGVkIHJlY292ZXJ5IG1ldGhvZCBpbiBzdWNoIGNhc2VzIGlzIHRvIGRyb3AgdGhlIG1haW4g aW5kZXggd2l0aAorICAgIDxjb21tYW5kPkRST1AgSU5ERVg8L2NvbW1hbmQ+LiBUaGUgYXV4aWxp YXJ5IGluZGV4IChzdWZmaXhlZCB3aXRoCisgICAgPGxpdGVyYWw+X2NjYXV4PC9saXRlcmFsPikg d2lsbCBiZSBhdXRvbWF0aWNhbGx5IGRyb3BwZWQgd2hlbiB0aGUgbWFpbgorICAgIGluZGV4IGlz IGRyb3BwZWQuIEFmdGVyIGRyb3BwaW5nIHRoZSBpbmRleGVzLCB5b3UgY2FuIHRyeSBhZ2FpbiB0 byBwZXJmb3JtCisgICAgPGNvbW1hbmQ+Q1JFQVRFIElOREVYIENPTkNVUlJFTlRMWTwvY29tbWFu ZD4uIChBbm90aGVyIHBvc3NpYmlsaXR5IGlzIHRvCisgICAgcmVidWlsZCB0aGUgaW5kZXggd2l0 aCA8Y29tbWFuZD5SRUlOREVYIElOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4sCisgICAgd2hp Y2ggd2lsbCBhbHNvIGhhbmRsZSBjbGVhbnVwIG9mIGFueSBpbnZhbGlkIGF1eGlsaWFyeSBpbmRl eGVzLikKKyAgICBJZiB0aGUgb25seSBpbnZhbGlkIGluZGV4IGlzIG9uZSBzdWZmaXhlZCA8bGl0 ZXJhbD5fY2NhdXg8L2xpdGVyYWw+LAorICAgIHRoZSByZWNvbW1lbmRlZCByZWNvdmVyeSBtZXRo b2QgaXMganVzdCA8bGl0ZXJhbD5EUk9QIElOREVYPC9saXRlcmFsPgorICAgIGZvciB0aGF0IGlu ZGV4LgogICAgPC9wYXJhPgogCiAgICA8cGFyYT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9y ZWYvcmVpbmRleC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwKaW5kZXggNTZj OWEwZmUxZjMuLjI5N2I4YjVmZGUyIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3JlaW5k ZXguc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3JlaW5kZXguc2dtbApAQCAtNDc1LDEyICs0 NzUsMTYgQEAgSW5kZXhlczoKICAgICBJZiB0aGUgaW5kZXggbWFya2VkIDxsaXRlcmFsPklOVkFM SUQ8L2xpdGVyYWw+IGlzIHN1ZmZpeGVkCiAgICAgPGxpdGVyYWw+X2NjbmV3PC9saXRlcmFsPiBv ciA8bGl0ZXJhbD5fY2NhdXg8L2xpdGVyYWw+LCB0aGVuIGl0IGNvcnJlc3BvbmRzIHRvIHRoZSB0 cmFuc2llbnQgb3IgYXV4aWxpYXJ5CiAgICAgaW5kZXggY3JlYXRlZCBkdXJpbmcgdGhlIGNvbmN1 cnJlbnQgb3BlcmF0aW9uLCBhbmQgdGhlIHJlY29tbWVuZGVkCi0gICAgcmVjb3ZlcnkgbWV0aG9k IGlzIHRvIGRyb3AgdGhlc2UgaW5kZXhlcyB1c2luZyA8bGl0ZXJhbD5EUk9QIElOREVYPC9saXRl cmFsPiwKLSAgICB0aGVuIGF0dGVtcHQgPGNvbW1hbmQ+UkVJTkRFWCBDT05DVVJSRU5UTFk8L2Nv bW1hbmQ+IGFnYWluLgorICAgIHJlY292ZXJ5IG1ldGhvZCBpcyB0byBkcm9wIHRoZSB0cmFuc2ll bnQgaW5kZXggdXNpbmcgPGxpdGVyYWw+RFJPUCBJTkRFWDwvbGl0ZXJhbD4sCisgICAgdGhlbiBh dHRlbXB0IDxjb21tYW5kPlJFSU5ERVggQ09OQ1VSUkVOVExZPC9jb21tYW5kPiBhZ2Fpbi4gVGhl IGF1eGlsaWFyeSBpbmRleAorICAgIChzdWZmaXhlZCB3aXRoIDxsaXRlcmFsPl9jY2F1eDwvbGl0 ZXJhbD4pIHdpbGwgYmUgYXV0b21hdGljYWxseSBkcm9wcGVkCisgICAgYWxvbmcgd2l0aCBpdHMg bWFpbiBpbmRleC4KICAgICBJZiB0aGUgaW52YWxpZCBpbmRleCBpcyBpbnN0ZWFkIHN1ZmZpeGVk IDxsaXRlcmFsPl9jY29sZDwvbGl0ZXJhbD4sCiAgICAgaXQgY29ycmVzcG9uZHMgdG8gdGhlIG9y aWdpbmFsIGluZGV4IHdoaWNoIGNvdWxkIG5vdCBiZSBkcm9wcGVkOwogICAgIHRoZSByZWNvbW1l bmRlZCByZWNvdmVyeSBtZXRob2QgaXMgdG8ganVzdCBkcm9wIHNhaWQgaW5kZXgsIHNpbmNlIHRo ZQotICAgIHJlYnVpbGQgcHJvcGVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWwuCisgICAgcmVidWlsZCBw cm9wZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bC4gSWYgdGhlIG9ubHkKKyAgICBpbnZhbGlkIGluZGV4 IGlzIG9uZSBzdWZmaXhlZCA8bGl0ZXJhbD5fY2NhdXg8L2xpdGVyYWw+LCB0aGUgcmVjb21tZW5k ZWQKKyAgICByZWNvdmVyeSBtZXRob2QgaXMganVzdCA8bGl0ZXJhbD5EUk9QIElOREVYPC9saXRl cmFsPiBmb3IgdGhhdCBpbmRleC4KICAgICBBIG5vbnplcm8gbnVtYmVyIG1heSBiZSBhcHBlbmRl ZCB0byB0aGUgc3VmZml4IG9mIHRoZSBpbnZhbGlkIGluZGV4CiAgICAgbmFtZXMgdG8ga2VlcCB0 aGVtIHVuaXF1ZSwgbGlrZSA8bGl0ZXJhbD5fY2NuZXcxPC9saXRlcmFsPiwKICAgICA8bGl0ZXJh bD5fY2NvbGQyPC9saXRlcmFsPiwgZXRjLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxv Zy9kZXBlbmRlbmN5LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2RlcGVuZGVuY3kuYwppbmRleCBm ZGI4ZTY3ZTFmNS4uYzY5NDFmYjE5ZDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cv ZGVwZW5kZW5jeS5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvZGVwZW5kZW5jeS5jCkBAIC0y OTIsNyArMjkyLDcgQEAgcGVyZm9ybURlbGV0aW9uKGNvbnN0IE9iamVjdEFkZHJlc3MgKm9iamVj dCwKIAkgKiBBY3F1aXJlIGRlbGV0aW9uIGxvY2sgb24gdGhlIHRhcmdldCBvYmplY3QuICAoSWRl YWxseSB0aGUgY2FsbGVyIGhhcwogCSAqIGRvbmUgdGhpcyBhbHJlYWR5LCBidXQgbWFueSBwbGFj ZXMgYXJlIHNsb3BweSBhYm91dCBpdC4pCiAJICovCi0JQWNxdWlyZURlbGV0aW9uTG9jayhvYmpl Y3QsIDApOworCUFjcXVpcmVEZWxldGlvbkxvY2sob2JqZWN0LCBmbGFncyk7CiAKIAkvKgogCSAq IENvbnN0cnVjdCBhIGxpc3Qgb2Ygb2JqZWN0cyB0byBkZWxldGUgKGllLCB0aGUgZ2l2ZW4gb2Jq ZWN0IHBsdXMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyBiL3NyYy9i YWNrZW5kL2NhdGFsb2cvaW5kZXguYwppbmRleCBiMTQxN2VjMDVjNi4uOTEzNmRmYzdjNzMgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYworKysgYi9zcmMvYmFja2VuZC9j YXRhbG9nL2luZGV4LmMKQEAgLTc4MCw2ICs3ODAsOCBAQCBpbmRleF9jcmVhdGUoUmVsYXRpb24g aGVhcFJlbGF0aW9uLAogCQkgICAoKGZsYWdzICYgSU5ERVhfQ1JFQVRFX0FERF9DT05TVFJBSU5U KSAhPSAwKSk7CiAJLyogcGFydGl0aW9uZWQgaW5kZXhlcyBtdXN0IG5ldmVyIGJlICJidWlsdCIg YnkgdGhlbXNlbHZlcyAqLwogCUFzc2VydCghcGFydGl0aW9uZWQgfHwgKGZsYWdzICYgSU5ERVhf Q1JFQVRFX1NLSVBfQlVJTEQpKTsKKwkvKiBpaV9BdXhpbGlhcnlGb3JJbmRleElkIGFuZCBJTkRF WF9DUkVBVEVfQVVYSUxJQVJZIGFyZSByZXF1aXJlZCBib3RoIG9yIG5laXRoZXIgKi8KKwlBc3Nl cnQoT2lkSXNWYWxpZChpbmRleEluZm8tPmlpX0F1eGlsaWFyeUZvckluZGV4SWQpID09IGF1eGls aWFyeSk7CiAKIAlyZWxraW5kID0gcGFydGl0aW9uZWQgPyBSRUxLSU5EX1BBUlRJVElPTkVEX0lO REVYIDogUkVMS0lORF9JTkRFWDsKIAlpc19leGNsdXNpb24gPSAoaW5kZXhJbmZvLT5paV9FeGNs dXNpb25PcHMgIT0gTlVMTCk7CkBAIC0xMTg1LDYgKzExODcsMTUgQEAgaW5kZXhfY3JlYXRlKFJl bGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCXJlY29yZERlcGVuZGVuY3lPbigmbXlzZWxmLCAmcmVm ZXJlbmNlZCwgREVQRU5ERU5DWV9QQVJUSVRJT05fU0VDKTsKIAkJfQogCisJCS8qCisJCSAqIFJl Y29yZCBkZXBlbmRlbmN5IG9uIHRoZSBtYWluIGluZGV4IGluIGNhc2Ugb2YgYXV4aWxpYXJ5IGlu ZGV4LgorCQkgKi8KKwkJaWYgKE9pZElzVmFsaWQoaW5kZXhJbmZvLT5paV9BdXhpbGlhcnlGb3JJ bmRleElkKSkKKwkJeworCQkJT2JqZWN0QWRkcmVzc1NldChyZWZlcmVuY2VkLCBSZWxhdGlvblJl bGF0aW9uSWQsIGluZGV4SW5mby0+aWlfQXV4aWxpYXJ5Rm9ySW5kZXhJZCk7CisJCQlyZWNvcmRE ZXBlbmRlbmN5T24oJm15c2VsZiwgJnJlZmVyZW5jZWQsIERFUEVOREVOQ1lfQVVUTyk7CisJCX0K KwogCQkvKiBwbGFjZWhvbGRlciBmb3Igbm9ybWFsIGRlcGVuZGVuY2llcyAqLwogCQlhZGRycyA9 IG5ld19vYmplY3RfYWRkcmVzc2VzKCk7CiAKQEAgLTE0MTcsNyArMTQyOCw4IEBAIGluZGV4X2Ny ZWF0ZV9jb3B5KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwgdWludDE2IGZsYWdzLAogCQkJCQkJCWNv bmN1cnJlbnRseSwJLyogY29uY3VycmVudCAqLwogCQkJCQkJCWluZGV4UmVsYXRpb24tPnJkX2lu ZGFtLT5hbXN1bW1hcml6aW5nLAogCQkJCQkJCW9sZEluZm8tPmlpX1dpdGhvdXRPdmVybGFwcywK LQkJCQkJCQlmYWxzZSk7CisJCQkJCQkJZmFsc2UsCisJCQkJCQkJSW52YWxpZE9pZCk7CiAKIAkv KiBmZXRjaCBleGNsdXNpb24gY29uc3RyYWludCBpbmZvIGlmIGFueSAqLwogCWlmIChpbmRleFJl bGF0aW9uLT5yZF9pbmRleC0+aW5kaXNleGNsdXNpb24pCkBAIC0xNjAxLDcgKzE2MTMsOCBAQCBp bmRleF9jb25jdXJyZW50bHlfY3JlYXRlX2F1eChSZWxhdGlvbiBoZWFwUmVsYXRpb24sIE9pZCBt YWluSW5kZXhJZCwKIAkJCQkJCQl0cnVlLAogCQkJCQkJCWZhbHNlLAkvKiBhdXggYXJlIG5vdCBz dW1tYXJpemluZyAqLwogCQkJCQkJCWZhbHNlLAkvKiBhdXggYXJlIG5vdCB3aXRob3V0IG92ZXJs YXBzICovCi0JCQkJCQkJdHJ1ZQkvKiBhdXhpbGlhcnkgKi8pOworCQkJCQkJCXRydWUJLyogYXV4 aWxpYXJ5ICovLAorCQkJCQkJCW1haW5JbmRleElkIC8qIGF1eGlsaWFyeUZvckluZGV4SWQgKi8p OwogCiAJLyoKIAkgKiBFeHRyYWN0IHRoZSBsaXN0IG9mIGNvbHVtbiBuYW1lcyBhbmQgdGhlIGNv bHVtbiBudW1iZXJzIGZvciB0aGUgbmV3CkBAIC0yNjQwLDcgKzI2NTMsOCBAQCBCdWlsZEluZGV4 SW5mbyhSZWxhdGlvbiBpbmRleCkKIAkJCQkJICAgZmFsc2UsCiAJCQkJCSAgIGluZGV4LT5yZF9p bmRhbS0+YW1zdW1tYXJpemluZywKIAkJCQkJICAgaW5kZXhTdHJ1Y3QtPmluZGlzZXhjbHVzaW9u ICYmIGluZGV4U3RydWN0LT5pbmRpc3VuaXF1ZSwKLQkJCQkJICAgaW5kZXgtPnJkX3JlbC0+cmVs YW0gPT0gU1RJUl9BTV9PSUQgLyogYXV4aWxpYXJ5IGlmZiBTVElSICovKTsKKwkJCQkJICAgaW5k ZXgtPnJkX3JlbC0+cmVsYW0gPT0gU1RJUl9BTV9PSUQgLyogYXV4aWxpYXJ5IGlmZiBTVElSICov LAorCQkJCQkgICBJbnZhbGlkT2lkIC8qIGF1eGlsaWFyeV9mb3JfaW5kZXhfaWQgaXMgc2V0IG9u bHkgZHVyaW5nIGJ1aWxkICovKTsKIAogCS8qIGZpbGwgaW4gYXR0cmlidXRlIG51bWJlcnMgKi8K IAlmb3IgKGkgPSAwOyBpIDwgbnVtQXR0czsgaSsrKQpAQCAtMjcwMSw3ICsyNzE1LDggQEAgQnVp bGREdW1teUluZGV4SW5mbyhSZWxhdGlvbiBpbmRleCkKIAkJCQkJICAgZmFsc2UsCiAJCQkJCSAg IGluZGV4LT5yZF9pbmRhbS0+YW1zdW1tYXJpemluZywKIAkJCQkJICAgaW5kZXhTdHJ1Y3QtPmlu ZGlzZXhjbHVzaW9uICYmIGluZGV4U3RydWN0LT5pbmRpc3VuaXF1ZSwKLQkJCQkJICAgaW5kZXgt PnJkX3JlbC0+cmVsYW0gPT0gU1RJUl9BTV9PSUQgLyogYXV4aWxpYXJ5IGlmZiBTVElSICovKTsK KwkJCQkJICAgaW5kZXgtPnJkX3JlbC0+cmVsYW0gPT0gU1RJUl9BTV9PSUQgLyogYXV4aWxpYXJ5 IGlmZiBTVElSICovLAorCQkJCQkgICBJbnZhbGlkT2lkKTsKIAogCS8qIGZpbGwgaW4gYXR0cmli dXRlIG51bWJlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtQXR0czsgaSsrKQpAQCAtMzc4Myw4 ICszNzk4LDExIEBAIGluZGV4X3NldF9zdGF0ZV9mbGFncyhPaWQgaW5kZXhJZCwgSW5kZXhTdGF0 ZUZsYWdzQWN0aW9uIGFjdGlvbikKIAkJCWluZGV4Rm9ybS0+aW5kaXN2YWxpZCA9IHRydWU7CiAJ CQlicmVhazsKIAkJY2FzZSBJTkRFWF9EUk9QX0NMRUFSX1JFQURZOgotCQkJLyogQ2xlYXIgaW5k aXNyZWFkeSBkdXJpbmcgYSBDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIHNlcXVlbmNlICovCi0J CQlBc3NlcnQoaW5kZXhGb3JtLT5pbmRpc3JlYWR5KTsKKwkJCS8qCisJCQkgKiBDbGVhciBpbmRp c3JlYWR5IGR1cmluZyBhIENSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgc2VxdWVuY2UuCisJCQkg KiBpbmRpc3JlYWR5IG1heSBhbHJlYWR5IGJlIGZhbHNlIGlmIHRoZSBDSUMgZmFpbGVkIGJlZm9y ZQorCQkJICogaW5kZXhfY29uY3VycmVudGx5X2J1aWxkIGhhZCBhIGNoYW5jZSB0byBzZXQgaXQu CisJCQkgKi8KIAkJCUFzc2VydCghaW5kZXhGb3JtLT5pbmRpc3ZhbGlkKTsKIAkJCWluZGV4Rm9y bS0+aW5kaXNyZWFkeSA9IGZhbHNlOwogCQkJYnJlYWs7CkBAIC0zODY5LDYgKzM4ODcsNyBAQCBy ZWluZGV4X2luZGV4KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgaW5kZXhJZCwKIAkJCQlo ZWFwUmVsYXRpb247CiAJT2lkCQkJaGVhcElkOwogCU9pZAkJCXNhdmVfdXNlcmlkOworCU9pZAkJ CWp1bmtBdXhJbmRleElkOwogCWludAkJCXNhdmVfc2VjX2NvbnRleHQ7CiAJaW50CQkJc2F2ZV9u ZXN0bGV2ZWw7CiAJSW5kZXhJbmZvICAqaW5kZXhJbmZvOwpAQCAtMzkyNSw2ICszOTQ0LDE5IEBA IHJlaW5kZXhfaW5kZXgoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCBpbmRleElkLAogCQlw Z3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX211bHRpX3BhcmFtKDIsIHByb2dyZXNzX2NvbHMsIHByb2dy ZXNzX3ZhbHMpOwogCX0KIAorCS8qIENoZWNrIGZvciB0aGUgYXV4aWxpYXJ5IGluZGV4IGZvciB0 aGF0IGluZGV4LCBpdCBuZWVkcyB0byBiZSBkcm9wcGVkICovCisJanVua0F1eEluZGV4SWQgPSBn ZXRfYXV4aWxpYXJ5X2luZGV4KGluZGV4SWQpOworCWlmIChPaWRJc1ZhbGlkKGp1bmtBdXhJbmRl eElkKSkKKwl7CisJCU9iamVjdEFkZHJlc3Mgb2JqZWN0OworCQlvYmplY3QuY2xhc3NJZCA9IFJl bGF0aW9uUmVsYXRpb25JZDsKKwkJb2JqZWN0Lm9iamVjdElkID0ganVua0F1eEluZGV4SWQ7CisJ CW9iamVjdC5vYmplY3RTdWJJZCA9IDA7CisJCXBlcmZvcm1EZWxldGlvbigmb2JqZWN0LCBEUk9Q X1JFU1RSSUNULAorCQkJCQkJCQkgUEVSRk9STV9ERUxFVElPTl9JTlRFUk5BTCB8CisJCQkJCQkJ CSBQRVJGT1JNX0RFTEVUSU9OX1FVSUVUTFkpOworCX0KKwogCS8qCiAJICogT3BlbiB0aGUgdGFy Z2V0IGluZGV4IHJlbGF0aW9uIGFuZCBnZXQgYW4gZXhjbHVzaXZlIGxvY2sgb24gaXQsIHRvCiAJ ICogZW5zdXJlIHRoYXQgbm8gb25lIGVsc2UgaXMgdG91Y2hpbmcgdGhpcyBwYXJ0aWN1bGFyIGlu ZGV4LgpAQCAtNDIxMyw3ICs0MjQ1LDggQEAgcmVpbmRleF9yZWxhdGlvbihjb25zdCBSZWluZGV4 U3RtdCAqc3RtdCwgT2lkIHJlbGlkLCBpbnQgZmxhZ3MsCiB7CiAJUmVsYXRpb24JcmVsOwogCU9p ZAkJCXRvYXN0X3JlbGlkOwotCUxpc3QJICAgKmluZGV4SWRzOworCUxpc3QJICAgKmluZGV4SWRz LAorCQkJICAgKmF1eEluZGV4SWRzID0gTklMOwogCWNoYXIJCXBlcnNpc3RlbmNlOwogCWJvb2wJ CXJlc3VsdCA9IGZhbHNlOwogCUxpc3RDZWxsICAgKmluZGV4SWQ7CkBAIC00MzAyLDEzICs0MzM1 LDMwIEBAIHJlaW5kZXhfcmVsYXRpb24oY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxp ZCwgaW50IGZsYWdzLAogCWVsc2UKIAkJcGVyc2lzdGVuY2UgPSByZWwtPnJkX3JlbC0+cmVscGVy c2lzdGVuY2U7CiAKKwlmb3JlYWNoKGluZGV4SWQsIGluZGV4SWRzKQorCXsKKwkJT2lkCQkJaW5k ZXhPaWQgPSBsZmlyc3Rfb2lkKGluZGV4SWQpOworCQlPaWQJCQlpbmRleEFtID0gZ2V0X3JlbF9y ZWxhbShpbmRleE9pZCk7CisKKwkJLyogQWxsIFNUSVIgaW5kZXhlcyBhcmUgYXV4aWxpYXJ5IGlu ZGV4ZXMgKi8KKwkJaWYgKGluZGV4QW0gPT0gU1RJUl9BTV9PSUQpCisJCXsKKwkJCWlmIChmbGFn cyAmIFJFSU5ERVhfUkVMX1NVUFBSRVNTX0lOREVYX1VTRSkKKwkJCQlSZW1vdmVSZWluZGV4UGVu ZGluZyhpbmRleE9pZCk7CisJCQlhdXhJbmRleElkcyA9IGxhcHBlbmRfb2lkKGF1eEluZGV4SWRz LCBpbmRleE9pZCk7CisJCX0KKwl9CisKIAkvKiBSZWluZGV4IGFsbCB0aGUgaW5kZXhlcy4gKi8K IAlpID0gMTsKIAlmb3JlYWNoKGluZGV4SWQsIGluZGV4SWRzKQogCXsKIAkJT2lkCQkJaW5kZXhP aWQgPSBsZmlyc3Rfb2lkKGluZGV4SWQpOwogCQlPaWQJCQlpbmRleE5hbWVzcGFjZUlkID0gZ2V0 X3JlbF9uYW1lc3BhY2UoaW5kZXhPaWQpOwotCQlPaWQJCQlpbmRleEFtID0gZ2V0X3JlbF9yZWxh bShpbmRleE9pZCk7CisKKwkJLyogQXV4aWxpYXJ5IGluZGV4ZXMgYXJlIGdvaW5nIHRvIGJlIGRy b3BwZWQgZHVyaW5nIG1haW4gaW5kZXggcmVidWlsZCAqLworCQlpZiAobGlzdF9tZW1iZXJfb2lk KGF1eEluZGV4SWRzLCBpbmRleE9pZCkpCisJCQljb250aW51ZTsKIAogCQkvKgogCQkgKiBTa2lw IGFueSBpbnZhbGlkIGluZGV4ZXMgb24gYSBUT0FTVCB0YWJsZS4gIFRoZXNlIGNhbiBvbmx5IGJl CkBAIC00MzM0LDE4ICs0Mzg0LDYgQEAgcmVpbmRleF9yZWxhdGlvbihjb25zdCBSZWluZGV4U3Rt dCAqc3RtdCwgT2lkIHJlbGlkLCBpbnQgZmxhZ3MsCiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlm IChpbmRleEFtID09IFNUSVJfQU1fT0lEKQotCQl7Ci0JCQllcmVwb3J0KFdBUk5JTkcsCi0JCQkJ CShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCQkJIGVycm1zZygi c2tpcHBpbmcgcmVpbmRleCBvZiBhdXhpbGlhcnkgaW5kZXggXCIlcy4lc1wiIiwKLQkJCQkJCQln ZXRfbmFtZXNwYWNlX25hbWUoaW5kZXhOYW1lc3BhY2VJZCksCi0JCQkJCQkJZ2V0X3JlbF9uYW1l KGluZGV4T2lkKSkpKTsKLQkJCWlmIChmbGFncyAmIFJFSU5ERVhfUkVMX1NVUFBSRVNTX0lOREVY X1VTRSkKLQkJCQlSZW1vdmVSZWluZGV4UGVuZGluZyhpbmRleE9pZCk7Ci0JCQljb250aW51ZTsK LQkJfQotCiAJCXJlaW5kZXhfaW5kZXgoc3RtdCwgaW5kZXhPaWQsICEoZmxhZ3MgJiBSRUlOREVY X1JFTF9DSEVDS19DT05TVFJBSU5UUyksCiAJCQkJCSAgcGVyc2lzdGVuY2UsIHBhcmFtcyk7CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfZGVwZW5kLmMgYi9zcmMvYmFja2Vu ZC9jYXRhbG9nL3BnX2RlcGVuZC5jCmluZGV4IDA3YzJkNDFjMTg5Li5kZWFjZDJmN2M5NSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19kZXBlbmQuYworKysgYi9zcmMvYmFja2Vu ZC9jYXRhbG9nL3BnX2RlcGVuZC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiY2F0YWxv Zy9jYXRhbG9nLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9kZXBlbmRlbmN5LmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9pbmRleGluZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYW1fZC5oIgogI2luY2x1 ZGUgImNhdGFsb2cvcGdfY29uc3RyYWludC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGVwZW5k LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19leHRlbnNpb24uaCIKQEAgLTExMDgsNiArMTEwOSw2 NyBAQCBnZXRfaW5kZXhfY29uc3RyYWludChPaWQgaW5kZXhJZCkKIAlyZXR1cm4gY29uc3RyYWlu dElkOwogfQogCisvKgorICogZ2V0X2F1eGlsaWFyeV9pbmRleAorICoJCUdpdmVuIHRoZSBPSUQg b2YgYW4gaW5kZXgsIHJldHVybiB0aGUgT0lEIG9mIGl0cyBhdXhpbGlhcnkKKyAqCQlpbmRleCwg b3IgSW52YWxpZE9pZCBpZiB0aGVyZSBpcyBubyBhdXhpbGlhcnkgaW5kZXguCisgKi8KK09pZAor Z2V0X2F1eGlsaWFyeV9pbmRleChPaWQgaW5kZXhJZCkKK3sKKwlPaWQJCQlhdXhpbGlhcnlJbmRl eE9pZCA9IEludmFsaWRPaWQ7CisJUmVsYXRpb24JZGVwUmVsOworCVNjYW5LZXlEYXRhIGtleVsz XTsKKwlTeXNTY2FuRGVzYyBzY2FuOworCUhlYXBUdXBsZQl0dXA7CisKKwkvKiBTZWFyY2ggdGhl IGRlcGVuZGVuY3kgdGFibGUgZm9yIHRoZSBpbmRleCAqLworCWRlcFJlbCA9IHRhYmxlX29wZW4o RGVwZW5kUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCVNjYW5LZXlJbml0KCZrZXlb MF0sCisJCQkJQW51bV9wZ19kZXBlbmRfcmVmY2xhc3NpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lO dW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShSZWxhdGlvblJlbGF0aW9uSWQp KTsKKwlTY2FuS2V5SW5pdCgma2V5WzFdLAorCQkJCUFudW1fcGdfZGVwZW5kX3JlZm9iamlkLAor CQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVt KGluZGV4SWQpKTsKKwlTY2FuS2V5SW5pdCgma2V5WzJdLAorCQkJCUFudW1fcGdfZGVwZW5kX3Jl Zm9ianN1YmlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9JTlQ0RVEsCisJCQkJSW50 MzJHZXREYXR1bSgwKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGRlcFJlbCwgRGVw ZW5kUmVmZXJlbmNlSW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDMsIGtleSk7CisKKwl3 aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKKwl7 CisJCUZvcm1fcGdfZGVwZW5kIGRlcHJlYyA9IChGb3JtX3BnX2RlcGVuZCkgR0VUU1RSVUNUKHR1 cCk7CisKKwkJLyoKKwkJICogTG9vayBmb3IgYW4gQVVUTyBkZXBlbmRlbmN5IG9uIGEgU1RJUiBp bmRleC4gIFRoZXJlIGNhbiBiZSBhdCBtb3N0CisJCSAqIG9uZSBTVElSIGF1eGlsaWFyeSBwZXIg aW5kZXgsIHNvIHdlIHN0b3AgYXQgdGhlIGZpcnN0IG1hdGNoLgorCQkgKiBUcmFuc2l0aXZlIGF1 eGlsaWFyaWVzIChlLmcuIGNjbmV3X2NjYXV4IGZyb20gYSBmYWlsZWQgUkVJTkRFWAorCQkgKiBD T05DVVJSRU5UTFkpIGFyZSBmb3VuZCBieSBjYWxsaW5nIHRoaXMgd2l0aCB0aGUgY2NuZXcgT0lE LCBhbmQKKwkJICogYXJlIGFsc28gY2xlYW5lZCB1cCBhdXRvbWF0aWNhbGx5IHZpYSBjYXNjYWRp bmcgQVVUTyBkZXBlbmRlbmN5CisJCSAqIHdoZW4gdGhlIGludGVybWVkaWF0ZSBpbmRleCBpcyBk cm9wcGVkLgorCQkgKi8KKwkJaWYgKGRlcHJlYy0+Y2xhc3NpZCA9PSBSZWxhdGlvblJlbGF0aW9u SWQgJiYKKwkJCShkZXByZWMtPmRlcHR5cGUgPT0gREVQRU5ERU5DWV9BVVRPKSAmJgorCQkJZ2V0 X3JlbF9yZWxraW5kKGRlcHJlYy0+b2JqaWQpID09IFJFTEtJTkRfSU5ERVggJiYKKwkJCWdldF9y ZWxfcmVsYW0oZGVwcmVjLT5vYmppZCkgPT0gU1RJUl9BTV9PSUQpCisJCXsKKwkJCWF1eGlsaWFy eUluZGV4T2lkID0gZGVwcmVjLT5vYmppZDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3lzdGFi bGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShkZXBSZWwsIEFjY2Vzc1NoYXJlTG9jayk7 CisKKwlyZXR1cm4gYXV4aWxpYXJ5SW5kZXhPaWQ7Cit9CisKIC8qCiAgKiBnZXRfaW5kZXhfcmVm X2NvbnN0cmFpbnRzCiAgKgkJR2l2ZW4gdGhlIE9JRCBvZiBhbiBpbmRleCwgcmV0dXJuIHRoZSBP SUQgb2YgYWxsIGZvcmVpZ24ga2V5CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3Rv YXN0aW5nLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMKaW5kZXggZDdlYTg2YjI4 MDUuLmY0MjhkY2RmMTBmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5n LmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5jCkBAIC0zMTUsNiArMzE1LDcg QEAgY3JlYXRlX3RvYXN0X3RhYmxlKFJlbGF0aW9uIHJlbCwgT2lkIHRvYXN0T2lkLCBPaWQgdG9h c3RJbmRleE9pZCwKIAlpbmRleEluZm8tPmlpX0FtID0gQlRSRUVfQU1fT0lEOwogCWluZGV4SW5m by0+aWlfQW1DYWNoZSA9IE5VTEw7CiAJaW5kZXhJbmZvLT5paV9BdXhpbGlhcnkgPSBmYWxzZTsK KwlpbmRleEluZm8tPmlpX0F1eGlsaWFyeUZvckluZGV4SWQgPSBJbnZhbGlkT2lkOwogCWluZGV4 SW5mby0+aWlfQ29udGV4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0OwogCiAJY29sbGF0aW9uSWRz WzBdID0gSW52YWxpZE9pZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4 Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKaW5kZXggMmQ3YjZiN2Vi OGIuLjQ2YzRjY2M2Nzg5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNt ZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwpAQCAtMjQ3LDcgKzI0 Nyw3IEBAIENoZWNrSW5kZXhDb21wYXRpYmxlKE9pZCBvbGRJZCwKIAlpbmRleEluZm8gPSBtYWtl SW5kZXhJbmZvKG51bWJlck9mQXR0cmlidXRlcywgbnVtYmVyT2ZBdHRyaWJ1dGVzLAogCQkJCQkJ CSAgYWNjZXNzTWV0aG9kSWQsIE5JTCwgTklMLCBmYWxzZSwgZmFsc2UsCiAJCQkJCQkJICBmYWxz ZSwgZmFsc2UsIGFtc3VtbWFyaXppbmcsCi0JCQkJCQkJICBpc1dpdGhvdXRPdmVybGFwcywgaXNh dXhpbGlhcnkpOworCQkJCQkJCSAgaXNXaXRob3V0T3ZlcmxhcHMsIGlzYXV4aWxpYXJ5LCBJbnZh bGlkT2lkKTsKIAl0eXBlSWRzID0gcGFsbG9jX2FycmF5KE9pZCwgbnVtYmVyT2ZBdHRyaWJ1dGVz KTsKIAljb2xsYXRpb25JZHMgPSBwYWxsb2NfYXJyYXkoT2lkLCBudW1iZXJPZkF0dHJpYnV0ZXMp OwogCW9wY2xhc3NJZHMgPSBwYWxsb2NfYXJyYXkoT2lkLCBudW1iZXJPZkF0dHJpYnV0ZXMpOwpA QCAtOTQ3LDcgKzk0Nyw4IEBAIERlZmluZUluZGV4KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJ CQkgIGNvbmN1cnJlbnQsCiAJCQkJCQkJICBhbWlzc3VtbWFyaXppbmcsCiAJCQkJCQkJICBzdG10 LT5pc3dpdGhvdXRvdmVybGFwcywKLQkJCQkJCQkgIGZhbHNlKTsKKwkJCQkJCQkgIGZhbHNlLAor CQkJCQkJCSAgSW52YWxpZE9pZCk7CiAKIAl0eXBlSWRzID0gcGFsbG9jX2FycmF5KE9pZCwgbnVt YmVyT2ZBdHRyaWJ1dGVzKTsKIAljb2xsYXRpb25JZHMgPSBwYWxsb2NfYXJyYXkoT2lkLCBudW1i ZXJPZkF0dHJpYnV0ZXMpOwpAQCAtMzcxMSw2ICszNzEyLDcgQEAgUmVpbmRleFJlbGF0aW9uQ29u Y3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0 IFJlaW4KIAl7CiAJCU9pZAkJCWluZGV4SWQ7CiAJCU9pZAkJCWF1eEluZGV4SWQ7CisJCU9pZAkJ CWp1bmtBdXhJbmRleElkOwogCQlPaWQJCQl0YWJsZUlkOwogCQlPaWQJCQlhbUlkOwogCQlib29s CQlzYWZlOwkJLyogZm9yIHNldF9pbmRleHNhZmVfcHJvY2ZsYWdzICovCkBAIC00MDYwLDYgKzQw NjIsNyBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0 bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQlSZWluZGV4SW5kZXhJbmZvICpuZXdp ZHg7CiAJCU9pZAkJCW5ld0luZGV4SWQ7CiAJCU9pZAkJCWF1eEluZGV4SWQ7CisJCU9pZAkJCWp1 bmtBdXhJbmRleElkOwogCQlSZWxhdGlvbglpbmRleFJlbDsKIAkJUmVsYXRpb24JaGVhcFJlbDsK IAkJT2lkCQkJc2F2ZV91c2VyaWQ7CkBAIC00MDY3LDYgKzQwNzAsNyBAQCBSZWluZGV4UmVsYXRp b25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwg Y29uc3QgUmVpbgogCQlpbnQJCQlzYXZlX25lc3RsZXZlbDsKIAkJUmVsYXRpb24JbmV3SW5kZXhS ZWw7CiAJCVJlbGF0aW9uCWF1eEluZGV4UmVsOworCQlSZWxhdGlvbglqdW5rQXV4SW5kZXhSZWw7 CiAJCUxvY2tSZWxJZCAgKmxvY2tyZWxpZDsKIAkJT2lkCQkJdGFibGVzcGFjZWlkOwogCkBAIC00 MTQ0LDEyICs0MTQ4LDE3IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWlu ZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCQkJCQkJCQkJCQkg ICB0YWJsZXNwYWNlaWQsCiAJCQkJCQkJCQkJCQkgICBhdXhDb25jdXJyZW50TmFtZSk7CiAKKwkJ LyogU2VhcmNoIGZvciBhdXhpbGlhcnkgaW5kZXggZm9yIHJlaW5kZXhlZCBpbmRleCwgdG8gZHJv cCBpdCAqLworCQlqdW5rQXV4SW5kZXhJZCA9IGdldF9hdXhpbGlhcnlfaW5kZXgoaWR4LT5pbmRl eElkKTsKKwogCQkvKgogCQkgKiBOb3cgb3BlbiB0aGUgcmVsYXRpb24gb2YgdGhlIG5ldyBpbmRl eCwgYSBzZXNzaW9uLWxldmVsIGxvY2sgaXMKIAkJICogYWxzbyBuZWVkZWQgb24gaXQuCiAJCSAq LwogCQluZXdJbmRleFJlbCA9IGluZGV4X29wZW4obmV3SW5kZXhJZCwgU2hhcmVVcGRhdGVFeGNs dXNpdmVMb2NrKTsKIAkJYXV4SW5kZXhSZWwgPSBpbmRleF9vcGVuKGF1eEluZGV4SWQsIFNoYXJl VXBkYXRlRXhjbHVzaXZlTG9jayk7CisJCWlmIChPaWRJc1ZhbGlkKGp1bmtBdXhJbmRleElkKSkK KwkJCWp1bmtBdXhJbmRleFJlbCA9IGluZGV4X29wZW4oanVua0F1eEluZGV4SWQsIFNoYXJlVXBk YXRlRXhjbHVzaXZlTG9jayk7CiAKIAkJLyoKIAkJICogU2F2ZSB0aGUgbGlzdCBvZiBPSURzIGFu ZCBsb2NrcyBpbiBwcml2YXRlIGNvbnRleHQKQEAgLTQxNTksNiArNDE2OCw3IEBAIFJlaW5kZXhS ZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9u T2lkLCBjb25zdCBSZWluCiAJCW5ld2lkeCA9IHBhbGxvY19vYmplY3QoUmVpbmRleEluZGV4SW5m byk7CiAJCW5ld2lkeC0+aW5kZXhJZCA9IG5ld0luZGV4SWQ7CiAJCW5ld2lkeC0+YXV4SW5kZXhJ ZCA9IGF1eEluZGV4SWQ7CisJCW5ld2lkeC0+anVua0F1eEluZGV4SWQgPSBqdW5rQXV4SW5kZXhJ ZDsKIAkJbmV3aWR4LT5zYWZlID0gaWR4LT5zYWZlOwogCQluZXdpZHgtPnRhYmxlSWQgPSBpZHgt PnRhYmxlSWQ7CiAJCW5ld2lkeC0+YW1JZCA9IGlkeC0+YW1JZDsKQEAgLTQxODAsMTAgKzQxOTAs MTggQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10 LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJbG9ja3JlbGlkID0gcGFsbG9jX29iamVj dChMb2NrUmVsSWQpOwogCQkqbG9ja3JlbGlkID0gYXV4SW5kZXhSZWwtPnJkX2xvY2tJbmZvLmxv Y2tSZWxJZDsKIAkJcmVsYXRpb25Mb2NrcyA9IGxhcHBlbmQocmVsYXRpb25Mb2NrcywgbG9ja3Jl bGlkKTsKKwkJaWYgKE9pZElzVmFsaWQoanVua0F1eEluZGV4SWQpKQorCQl7CisJCQlsb2NrcmVs aWQgPSBwYWxsb2Nfb2JqZWN0KExvY2tSZWxJZCk7CisJCQkqbG9ja3JlbGlkID0ganVua0F1eElu ZGV4UmVsLT5yZF9sb2NrSW5mby5sb2NrUmVsSWQ7CisJCQlyZWxhdGlvbkxvY2tzID0gbGFwcGVu ZChyZWxhdGlvbkxvY2tzLCBsb2NrcmVsaWQpOworCQl9CiAKIAkJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZGNvbnRleHQpOwogCiAJCWluZGV4X2Nsb3NlKGluZGV4UmVsLCBOb0xvY2spOworCQlp ZiAoT2lkSXNWYWxpZChqdW5rQXV4SW5kZXhJZCkpCisJCQlpbmRleF9jbG9zZShqdW5rQXV4SW5k ZXhSZWwsIE5vTG9jayk7CiAJCWluZGV4X2Nsb3NlKGF1eEluZGV4UmVsLCBOb0xvY2spOwogCQlp bmRleF9jbG9zZShuZXdJbmRleFJlbCwgTm9Mb2NrKTsKIApAQCAtNDM3Miw3ICs0MzkwLDggQEAg UmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQg cmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAogCS8qCiAJICogQXQgdGhpcyBtb21lbnQgYWxsIHRh cmdldCBpbmRleGVzIGFyZSBtYXJrZWQgYXMgInJlYWR5LXRvLWluc2VydCIuIFNvLAotCSAqIHdl IGFyZSBmcmVlIHRvIHN0YXJ0IHByb2Nlc3Mgb2YgZHJvcHBpbmcgYXV4aWxpYXJ5IGluZGV4ZXMu CisJICogd2UgYXJlIGZyZWUgdG8gc3RhcnQgcHJvY2VzcyBvZiBkcm9wcGluZyBhdXhpbGlhcnkg aW5kZXhlcyAtIGluY2x1ZGluZworCSAqIGp1bmsgaW5kZXhlcyBkZXRlY3RlZCBlYXJsaWVyLgog CSAqLwogCWZvcmVhY2gobGMsIG5ld0luZGV4SWRzKQogCXsKQEAgLTQzOTUsNiArNDQxNCw5IEBA IFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lk IHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCSAqLwogCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0 VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKIAkJaW5kZXhfc2V0X3N0YXRlX2ZsYWdzKG5ld2lkeC0+ YXV4SW5kZXhJZCwgSU5ERVhfRFJPUF9DTEVBUl9SRUFEWSk7CisJCS8qIEVuc3VyZSB0aGUganVu ayBpbmRleCBpcyBtYXJrZWQgYXMgbm9uLXJlYWR5ICovCisJCWlmIChPaWRJc1ZhbGlkKG5ld2lk eC0+anVua0F1eEluZGV4SWQpKQorCQkJaW5kZXhfc2V0X3N0YXRlX2ZsYWdzKG5ld2lkeC0+anVu a0F1eEluZGV4SWQsIElOREVYX0RST1BfQ0xFQVJfUkVBRFkpOwogCQlQb3BBY3RpdmVTbmFwc2hv dCgpOwogCiAJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwpAQCAtNDYxNCw2ICs0NjM2LDgg QEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBP aWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5z YWN0aW9uU25hcHNob3QoKSk7CiAKIAkJaW5kZXhfY29uY3VycmVudGx5X3NldF9kZWFkKG5ld2lk eC0+dGFibGVJZCwgbmV3aWR4LT5hdXhJbmRleElkKTsKKwkJaWYgKE9pZElzVmFsaWQobmV3aWR4 LT5qdW5rQXV4SW5kZXhJZCkpCisJCQlpbmRleF9jb25jdXJyZW50bHlfc2V0X2RlYWQobmV3aWR4 LT50YWJsZUlkLCBuZXdpZHgtPmp1bmtBdXhJbmRleElkKTsKIAogCQlQb3BBY3RpdmVTbmFwc2hv dCgpOwogCX0KQEAgLTQ2NjUsNiArNDY4OSwxMyBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50 bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgog CQkJb2JqZWN0Lm9iamVjdFN1YklkID0gMDsKIAogCQkJYWRkX2V4YWN0X29iamVjdF9hZGRyZXNz KCZvYmplY3QsIG9iamVjdHMpOworCisJCQlpZiAoT2lkSXNWYWxpZChpZHgtPmp1bmtBdXhJbmRl eElkKSkKKwkJCXsKKwkJCQlvYmplY3Qub2JqZWN0SWQgPSBpZHgtPmp1bmtBdXhJbmRleElkOwor CQkJCW9iamVjdC5vYmplY3RTdWJJZCA9IDA7CisJCQkJYWRkX2V4YWN0X29iamVjdF9hZGRyZXNz KCZvYmplY3QsIG9iamVjdHMpOworCQkJfQogCQl9CiAKIAkJLyoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVj bWRzLmMKaW5kZXggZWVjMDliYTFkZWQuLmVhYWU4ZjdjYTVmIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJs ZWNtZHMuYwpAQCAtMTU2Nyw2ICsxNTY3LDggQEAgUmVtb3ZlUmVsYXRpb25zKERyb3BTdG10ICpk cm9wKQogCUxpc3RDZWxsICAgKmNlbGw7CiAJaW50CQkJZmxhZ3MgPSAwOwogCUxPQ0tNT0RFCWxv Y2ttb2RlID0gQWNjZXNzRXhjbHVzaXZlTG9jazsKKwlNZW1vcnlDb250ZXh0IHByaXZhdGVfY29u dGV4dCwKKwkJCQkgIG9sZGNvbnRleHQ7CiAKIAkvKiBEUk9QIENPTkNVUlJFTlRMWSB1c2VzIGEg d2Vha2VyIGxvY2ssIGFuZCBoYXMgc29tZSByZXN0cmljdGlvbnMgKi8KIAlpZiAoZHJvcC0+Y29u Y3VycmVudCkKQEAgLTE2MzEsOSArMTYzMywyMCBAQCBSZW1vdmVSZWxhdGlvbnMoRHJvcFN0bXQg KmRyb3ApCiAJCQlyZWxraW5kID0gMDsJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KIAkJCWJy ZWFrOwogCX0KKwkvKgorCSAqIENyZWF0ZSBhIG1lbW9yeSBjb250ZXh0IHRoYXQgd2lsbCBzdXJ2 aXZlIGZvcmNlZCB0cmFuc2FjdGlvbiBjb21taXRzIHdlCisJICogbWF5IG5lZWQgdG8gZG8gYmVs b3cgKGluIGNhc2Ugb2YgY29uY3VycmVudCBpbmRleCBkcm9wKS4KKwkgKiBTaW5jZSBpdCBpcyBh IGNoaWxkIG9mIFBvcnRhbENvbnRleHQsIGl0IHdpbGwgZ28gYXdheSBldmVudHVhbGx5IGV2ZW4g aWYKKwkgKiB3ZSBzdWZmZXIgYW4gZXJyb3I7IHRoZXJlJ3Mgbm8gbmVlZCBmb3Igc3BlY2lhbCBh Ym9ydCBjbGVhbnVwIGxvZ2ljLgorCSAqLworCXByaXZhdGVfY29udGV4dCA9IEFsbG9jU2V0Q29u dGV4dENyZWF0ZShQb3J0YWxDb250ZXh0LAorCQkJCQkJCQkJCQkiUmVtb3ZlUmVsYXRpb25zIiwK KwkJCQkJCQkJCQkJQUxMT0NTRVRfU01BTExfU0laRVMpOwogCisJb2xkY29udGV4dCA9IE1lbW9y eUNvbnRleHRTd2l0Y2hUbyhwcml2YXRlX2NvbnRleHQpOwogCS8qIExvY2sgYW5kIHZhbGlkYXRl IGVhY2ggcmVsYXRpb247IGJ1aWxkIGEgbGlzdCBvZiBvYmplY3QgYWRkcmVzc2VzICovCiAJb2Jq ZWN0cyA9IG5ld19vYmplY3RfYWRkcmVzc2VzKCk7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGNvbnRleHQpOwogCiAJZm9yZWFjaChjZWxsLCBkcm9wLT5vYmplY3RzKQogCXsKQEAgLTE2ODUs NiArMTY5OCwzOCBAQCBSZW1vdmVSZWxhdGlvbnMoRHJvcFN0bXQgKmRyb3ApCiAJCQlmbGFncyB8 PSBQRVJGT1JNX0RFTEVUSU9OX0NPTkNVUlJFTlRMWTsKIAkJfQogCisJCS8qCisJCSAqIENvbmN1 cnJlbnQgaW5kZXggZHJvcCByZXF1aXJlcyBpdCB0byBiZSB0aGUgZmlyc3QgdHJhbnNhY3Rpb24u IEJ1dCBpbgorCQkgKiBjYXNlIHdlIGhhdmUganVuayBhdXhpbGlhcnkgaW5kZXggLSB3ZSB3YW50 IHRvIGRyb3AgaXQgdG9vIChhbmQgYWxzbworCQkgKiBpbiBhIGNvbmN1cnJlbnQgd2F5KS4gSW4g dGhpcyBjYXNlIHBlcmZvcm0gc2lsZW50IGludGVybmFsIGRlbGV0aW9uCisJCSAqIG9mIGF1eGls aWFyeSBpbmRleCwgYW5kIHJlc3RvcmUgdHJhbnNhY3Rpb24gc3RhdGUuIEl0IGlzIGZpbmUgdG8g ZG8gaXQKKwkJICogaW4gdGhlIGxvb3AgYmVjYXVzZSB0aGVyZSBpcyBvbmx5IHNpbmdsZSBlbGVt ZW50IGluIGRyb3AtPm9iamVjdHMuCisJCSAqLworCQlpZiAoKGZsYWdzICYgUEVSRk9STV9ERUxF VElPTl9DT05DVVJSRU5UTFkpICE9IDAgJiYKKwkJCXN0YXRlLmFjdHVhbF9yZWxraW5kID09IFJF TEtJTkRfSU5ERVgpCisJCXsKKwkJCU9pZCBqdW5rQXV4SW5kZXhPaWQgPSBnZXRfYXV4aWxpYXJ5 X2luZGV4KHJlbE9pZCk7CisJCQlpZiAoT2lkSXNWYWxpZChqdW5rQXV4SW5kZXhPaWQpKQorCQkJ eworCQkJCU9iamVjdEFkZHJlc3Mgb2JqZWN0OworCQkJCW9iamVjdC5jbGFzc0lkID0gUmVsYXRp b25SZWxhdGlvbklkOworCQkJCW9iamVjdC5vYmplY3RJZCA9IGp1bmtBdXhJbmRleE9pZDsKKwkJ CQlvYmplY3Qub2JqZWN0U3ViSWQgPSAwOworCQkJCXBlcmZvcm1EZWxldGlvbigmb2JqZWN0LCBE Uk9QX1JFU1RSSUNULAorCQkJCQkJCQkJCSBQRVJGT1JNX0RFTEVUSU9OX0NPTkNVUlJFTlRMWSB8 CisJCQkJCQkJCQkJIFBFUkZPUk1fREVMRVRJT05fSU5URVJOQUwgfAorCQkJCQkJCQkJCSBQRVJG T1JNX0RFTEVUSU9OX1FVSUVUTFkpOworCQkJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwor CQkJCU1lbW9yeUNvbnRleHREZWxldGUocHJpdmF0ZV9jb250ZXh0KTsKKworCQkJCS8qIEFuZCBz dGFydCBhZ2FpbiAtIG5vdyB3aXRob3V0IGF1eGlsaWFyeSBpbmRleC4gKi8KKwkJCQlTdGFydFRy YW5zYWN0aW9uQ29tbWFuZCgpOworCQkJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlv blNuYXBzaG90KCkpOworCQkJCVJlbW92ZVJlbGF0aW9ucyhkcm9wKTsKKwkJCQlyZXR1cm47CisJ CQl9CisJCX0KKwogCQkvKgogCQkgKiBDb25jdXJyZW50IGluZGV4IGRyb3AgY2Fubm90IGJlIHVz ZWQgd2l0aCBwYXJ0aXRpb25lZCBpbmRleGVzLAogCQkgKiBlaXRoZXIuCkBAIC0xNzEzLDEyICsx NzU4LDE3IEBAIFJlbW92ZVJlbGF0aW9ucyhEcm9wU3RtdCAqZHJvcCkKIAkJb2JqLm9iamVjdElk ID0gcmVsT2lkOwogCQlvYmoub2JqZWN0U3ViSWQgPSAwOwogCisJCW9sZGNvbnRleHQgPSBNZW1v cnlDb250ZXh0U3dpdGNoVG8ocHJpdmF0ZV9jb250ZXh0KTsKIAkJYWRkX2V4YWN0X29iamVjdF9h ZGRyZXNzKCZvYmosIG9iamVjdHMpOworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4 dCk7CiAJfQogCisJLyogRGVsZXRpb24gbWF5IGludm9sdmUgbXVsdGlwbGUgY29tbWl0cywgc28s IHN3aXRjaCB0byBtZW1vcnkgY29udGV4dCAqLworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0 U3dpdGNoVG8ocHJpdmF0ZV9jb250ZXh0KTsKIAlwZXJmb3JtTXVsdGlwbGVEZWxldGlvbnMob2Jq ZWN0cywgZHJvcC0+YmVoYXZpb3IsIGZsYWdzKTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xk Y29udGV4dCk7CiAKLQlmcmVlX29iamVjdF9hZGRyZXNzZXMob2JqZWN0cyk7CisJTWVtb3J5Q29u dGV4dERlbGV0ZShwcml2YXRlX2NvbnRleHQpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYwpp bmRleCA4NGY3Y2Y5ODI0ZS4uYzU0NzQ4ZmY2NDQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25v ZGVzL21ha2VmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCkBAIC04 MzQsNyArODM0LDcgQEAgSW5kZXhJbmZvICoKIG1ha2VJbmRleEluZm8oaW50IG51bWF0dHJzLCBp bnQgbnVta2V5YXR0cnMsIE9pZCBhbW9pZCwgTGlzdCAqZXhwcmVzc2lvbnMsCiAJCQkgIExpc3Qg KnByZWRpY2F0ZXMsIGJvb2wgdW5pcXVlLCBib29sIG51bGxzX25vdF9kaXN0aW5jdCwKIAkJCSAg Ym9vbCBpc3JlYWR5LCBib29sIGNvbmN1cnJlbnQsIGJvb2wgc3VtbWFyaXppbmcsCi0JCQkgIGJv b2wgd2l0aG91dG92ZXJsYXBzLCBib29sIGF1eGlsaWFyeSkKKwkJCSAgYm9vbCB3aXRob3V0b3Zl cmxhcHMsIGJvb2wgYXV4aWxpYXJ5LCBPaWQgYXV4aWxpYXJ5X2Zvcl9pbmRleF9pZCkKIHsKIAlJ bmRleEluZm8gICpuID0gbWFrZU5vZGUoSW5kZXhJbmZvKTsKIApAQCAtODUxLDYgKzg1MSw3IEBA IG1ha2VJbmRleEluZm8oaW50IG51bWF0dHJzLCBpbnQgbnVta2V5YXR0cnMsIE9pZCBhbW9pZCwg TGlzdCAqZXhwcmVzc2lvbnMsCiAJbi0+aWlfU3VtbWFyaXppbmcgPSBzdW1tYXJpemluZzsKIAlu LT5paV9XaXRob3V0T3ZlcmxhcHMgPSB3aXRob3V0b3ZlcmxhcHM7CiAJbi0+aWlfQXV4aWxpYXJ5 ID0gYXV4aWxpYXJ5OworCW4tPmlpX0F1eGlsaWFyeUZvckluZGV4SWQgPSBhdXhpbGlhcnlfZm9y X2luZGV4X2lkOwogCiAJLyogc3VtbWFyaXppbmcgaW5kZXhlcyBjYW5ub3QgY29udGFpbiBub24t a2V5IGF0dHJpYnV0ZXMgKi8KIAlBc3NlcnQoIXN1bW1hcml6aW5nIHx8IChudW1rZXlhdHRycyA9 PSBudW1hdHRycykpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9kZXBlbmRlbmN5 LmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2RlcGVuZGVuY3kuaAppbmRleCAyZjNjMWVhZTNjNy4u NmFlMjEwYzU4NGUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvZGVwZW5kZW5jeS5o CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvZGVwZW5kZW5jeS5oCkBAIC0xOTMsNiArMTkzLDcg QEAgZXh0ZXJuIExpc3QgKmdldE93bmVkU2VxdWVuY2VzKE9pZCByZWxpZCk7CiBleHRlcm4gT2lk CWdldElkZW50aXR5U2VxdWVuY2UoUmVsYXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG51bSwgYm9v bCBtaXNzaW5nX29rKTsKIAogZXh0ZXJuIE9pZAlnZXRfaW5kZXhfY29uc3RyYWludChPaWQgaW5k ZXhJZCk7CitleHRlcm4gT2lkCWdldF9hdXhpbGlhcnlfaW5kZXgoT2lkIGluZGV4SWQpOwogCiBl eHRlcm4gTGlzdCAqZ2V0X2luZGV4X3JlZl9jb25zdHJhaW50cyhPaWQgaW5kZXhJZCk7CiAKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9k ZXMvZXhlY25vZGVzLmgKaW5kZXggM2VhZWVkM2MxNDEuLmFmNThkNGNmNGI1IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaApAQCAtMjMyLDYgKzIzMiw4IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4SW5mbwog CWludAkJCWlpX1BhcmFsbGVsV29ya2VyczsKIAkvKiBpcyBhdXhpbGlhcnkgZm9yIGNvbmN1cnJl bnQgaW5kZXggYnVpbGQ/ICovCiAJYm9vbAkJaWlfQXV4aWxpYXJ5OworCS8qIGlmIGNyZWF0aW5n IGFuIGF1eGlsaWFyeSBpbmRleCwgdGhlIE9JRCBvZiB0aGUgbWFpbiBpbmRleDsgb3RoZXJ3aXNl IEludmFsaWRPaWQuICovCisJT2lkCQkJaWlfQXV4aWxpYXJ5Rm9ySW5kZXhJZDsKIAkvKiBPaWQg b2YgaW5kZXggQU0gKi8KIAlPaWQJCQlpaV9BbTsKIAkvKiBwcml2YXRlIGNhY2hlIGFyZWEgZm9y IGluZGV4IEFNICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaCBi L3NyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oCmluZGV4IGNkN2YxZWIwNTkyLi4zYTcwNDc4 MWM4YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKKysrIGIvc3Jj L2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKQEAgLTEwMCw3ICsxMDAsNyBAQCBleHRlcm4gSW5k ZXhJbmZvICptYWtlSW5kZXhJbmZvKGludCBudW1hdHRycywgaW50IG51bWtleWF0dHJzLCBPaWQg YW1vaWQsCiAJCQkJCQkJCWJvb2wgdW5pcXVlLCBib29sIG51bGxzX25vdF9kaXN0aW5jdCwKIAkJ CQkJCQkJYm9vbCBpc3JlYWR5LCBib29sIGNvbmN1cnJlbnQsCiAJCQkJCQkJCWJvb2wgc3VtbWFy aXppbmcsIGJvb2wgd2l0aG91dG92ZXJsYXBzLAotCQkJCQkJCQlib29sIGF1eGlsaWFyeSk7CisJ CQkJCQkJCWJvb2wgYXV4aWxpYXJ5LCBPaWQgYXV4aWxpYXJ5X2Zvcl9pbmRleF9pZCk7CiAKIGV4 dGVybiBOb2RlICptYWtlU3RyaW5nQ29uc3QoY2hhciAqc3RyLCBpbnQgbG9jYXRpb24pOwogZXh0 ZXJuIERlZkVsZW0gKm1ha2VEZWZFbGVtKGNoYXIgKm5hbWUsIE5vZGUgKmFyZywgaW50IGxvY2F0 aW9uKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4 Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dAppbmRleCA5 MzdjM2I0OGEwZi4uMmQ2YWJiMTVhODkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvY3JlYXRlX2luZGV4Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Ny ZWF0ZV9pbmRleC5vdXQKQEAgLTMyODAsMTIgKzMyODAsMTA4IEBAIFJFSU5ERVggSU5ERVggQ09O Q1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2X2NjYXV4OwogRVJST1I6ICByZWluZGV4IG9mIGF1eGls aWFyeSBpbmRleCAiYXV4X2luZGV4X2luZDZfY2NhdXgiIG5vdCBzdXBwb3J0ZWQKIC0tIFRoaXMg bWFrZXMgdGhlIHByZXZpb3VzIGZhaWx1cmUgZ28gYXdheSwgc28gdGhlIGluZGV4IGNhbiBiZWNv bWUgdmFsaWQuCiBERUxFVEUgRlJPTSBhdXhfaW5kZXhfdGFiNSBXSEVSRSBjMSA9IDE7CistLSBT aG91bGQgYmUgc2tpcHBlZCBkdXJpbmcgcmVpbmRleCBhbmQgZHJvcHBlZAorUkVJTkRFWCBJTkRF WCBhdXhfaW5kZXhfaW5kNjsKKy0tIE1ha2Ugc3VyZSBhdXggaW5kZXggaXMgZHJvcHBlZAorXGQg YXV4X2luZGV4X3RhYjUKKyAgICAgICAgICAgVGFibGUgInB1YmxpYy5hdXhfaW5kZXhfdGFiNSIK KyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0IAorLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tCisgYzEgICAg IHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCitJbmRleGVzOgorICAgICJhdXhf aW5kZXhfaW5kNiIgVU5JUVVFLCBidHJlZSAoYzEpCisKK0RST1AgSU5ERVggYXV4X2luZGV4X2lu ZDY7CistLSBJbnNlcnQgZHVwbGljYXRlcyBhZ2FpbgorSU5TRVJUIElOVE8gYXV4X2luZGV4X3Rh YjUgVkFMVUVTICgxKSwgKDEpOworLS0gQ3JlYXRlIGludmFsaWQgaW5kZXggYWdhaW4KK0NSRUFU RSBVTklRVUUgSU5ERVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2IE9OIGF1eF9pbmRleF90 YWI1IChjMSk7CitFUlJPUjogIGNvdWxkIG5vdCBjcmVhdGUgdW5pcXVlIGluZGV4ICJhdXhfaW5k ZXhfaW5kNiIKK0RFVEFJTDogIEtleSAoYzEpPSgxKSBpcyBkdXBsaWNhdGVkLgorLS0gVGhpcyBt YWtlcyB0aGUgcHJldmlvdXMgZmFpbHVyZSBnbyBhd2F5LCBzbyB0aGUgaW5kZXggY2FuIGJlY29t ZSB2YWxpZC4KK0RFTEVURSBGUk9NIGF1eF9pbmRleF90YWI1IFdIRVJFIGMxID0gMTsKIC0tIFNo b3VsZCBiZSBza2lwcGVkIGR1cmluZyByZWluZGV4Ci1SRUlOREVYIFRBQkxFIGF1eF9pbmRleF90 YWI1OwotV0FSTklORzogIHNraXBwaW5nIHJlaW5kZXggb2YgYXV4aWxpYXJ5IGluZGV4ICJwdWJs aWMuYXV4X2luZGV4X2luZDZfY2NhdXgiCi0tLSBTaG91bGQgYmUgc2tpcHBlZCBkdXJpbmcgY29u Y3VycmVudCByZWluZGV4CiBSRUlOREVYIFRBQkxFIENPTkNVUlJFTlRMWSBhdXhfaW5kZXhfdGFi NTsKK1dBUk5JTkc6ICBza2lwcGluZyByZWluZGV4IG9mIGludmFsaWQgaW5kZXggInB1YmxpYy5h dXhfaW5kZXhfaW5kNiIKK0hJTlQ6ICBVc2UgRFJPUCBJTkRFWCBvciBSRUlOREVYIElOREVYLgog V0FSTklORzogIHNraXBwaW5nIHJlaW5kZXggb2YgYXV4aWxpYXJ5IGluZGV4ICJwdWJsaWMuYXV4 X2luZGV4X2luZDZfY2NhdXgiCitOT1RJQ0U6ICB0YWJsZSAiYXV4X2luZGV4X3RhYjUiIGhhcyBu byBpbmRleGVzIHRoYXQgY2FuIGJlIHJlaW5kZXhlZCBjb25jdXJyZW50bHkKKy0tIE1ha2Ugc3Vy ZSBpdCBpcyBzdGlsbCBleGlzdHMKK1xkIGF1eF9pbmRleF90YWI1CisgICAgICAgICAgIFRhYmxl ICJwdWJsaWMuYXV4X2luZGV4X3RhYjUiCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8 IE51bGxhYmxlIHwgRGVmYXVsdCAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLS0tLQorIGMxICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAgICAg ICB8IAorSW5kZXhlczoKKyAgICAiYXV4X2luZGV4X2luZDYiIFVOSVFVRSwgYnRyZWUgKGMxKSBJ TlZBTElECisgICAgImF1eF9pbmRleF9pbmQ2X2NjYXV4IiBzdGlyIChjMSkgSU5WQUxJRAorCist LSBTaG91bGQgYmUgc2tpcHBlZCBkdXJpbmcgcmVpbmRleCBhbmQgZHJvcHBlZAorUkVJTkRFWCBU QUJMRSBhdXhfaW5kZXhfdGFiNTsKKy0tIE1ha2Ugc3VyZSBhdXggaW5kZXggaXMgZHJvcHBlZAor XGQgYXV4X2luZGV4X3RhYjUKKyAgICAgICAgICAgVGFibGUgInB1YmxpYy5hdXhfaW5kZXhfdGFi NSIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0IAor LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tCisgYzEg ICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCitJbmRleGVzOgorICAgICJh dXhfaW5kZXhfaW5kNiIgVU5JUVVFLCBidHJlZSAoYzEpCisKK0RST1AgSU5ERVggYXV4X2luZGV4 X2luZDY7CistLSBJbnNlcnQgZHVwbGljYXRlcyBhZ2FpbgorSU5TRVJUIElOVE8gYXV4X2luZGV4 X3RhYjUgVkFMVUVTICgxKSwgKDEpOworLS0gQ3JlYXRlIGludmFsaWQgaW5kZXggYWdhaW4KK0NS RUFURSBVTklRVUUgSU5ERVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2IE9OIGF1eF9pbmRl eF90YWI1IChjMSk7CitFUlJPUjogIGNvdWxkIG5vdCBjcmVhdGUgdW5pcXVlIGluZGV4ICJhdXhf aW5kZXhfaW5kNiIKK0RFVEFJTDogIEtleSAoYzEpPSgxKSBpcyBkdXBsaWNhdGVkLgorLS0gVGhp cyBtYWtlcyB0aGUgcHJldmlvdXMgZmFpbHVyZSBnbyBhd2F5LCBzbyB0aGUgaW5kZXggY2FuIGJl Y29tZSB2YWxpZC4KK0RFTEVURSBGUk9NIGF1eF9pbmRleF90YWI1IFdIRVJFIGMxID0gMTsKKy0t IFNob3VsZCBiZSBza2lwcGVkIGR1cmluZyByZWluZGV4IGFuZCBkcm9wcGVkCitSRUlOREVYIElO REVYIENPTkNVUlJFTlRMWSBhdXhfaW5kZXhfaW5kNjsKKy0tIE1ha2Ugc3VyZSBhdXggaW5kZXgg aXMgZHJvcHBlZAorXGQgYXV4X2luZGV4X3RhYjUKKyAgICAgICAgICAgVGFibGUgInB1YmxpYy5h dXhfaW5kZXhfdGFiNSIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUg fCBEZWZhdWx0IAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tLS0tCisgYzEgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCitJbmRl eGVzOgorICAgICJhdXhfaW5kZXhfaW5kNiIgVU5JUVVFLCBidHJlZSAoYzEpCisKK0RST1AgSU5E RVggYXV4X2luZGV4X2luZDY7CistLSBJbnNlcnQgZHVwbGljYXRlcyBhZ2FpbgorSU5TRVJUIElO VE8gYXV4X2luZGV4X3RhYjUgVkFMVUVTICgxKSwgKDEpOworLS0gQ3JlYXRlIGludmFsaWQgaW5k ZXggYWdhaW4KK0NSRUFURSBVTklRVUUgSU5ERVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2 IE9OIGF1eF9pbmRleF90YWI1IChjMSk7CitFUlJPUjogIGNvdWxkIG5vdCBjcmVhdGUgdW5pcXVl IGluZGV4ICJhdXhfaW5kZXhfaW5kNiIKK0RFVEFJTDogIEtleSAoYzEpPSgxKSBpcyBkdXBsaWNh dGVkLgorLS0gVGhpcyBtYWtlcyB0aGUgcHJldmlvdXMgZmFpbHVyZSBnbyBhd2F5LCBzbyB0aGUg aW5kZXggY2FuIGJlY29tZSB2YWxpZC4KK0RFTEVURSBGUk9NIGF1eF9pbmRleF90YWI1IFdIRVJF IGMxID0gMTsKKy0tIERyb3AgbWFpbiBpbmRleCBDT05DVVJSRU5UTFkKK0RST1AgSU5ERVggQ09O Q1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2OworLS0gTWFrZSBzdXJlIGF1eGlsaWFyeSBpbmRleCBk cm9wcGVkIHRvbworXGQgYXV4X2luZGV4X3RhYjUKKyAgICAgICAgICAgVGFibGUgInB1YmxpYy5h dXhfaW5kZXhfdGFiNSIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUg fCBEZWZhdWx0IAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tLS0tCisgYzEgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisKK0RS T1AgSU5ERVggYXV4X2luZGV4X2luZDY7CitFUlJPUjogIGluZGV4ICJhdXhfaW5kZXhfaW5kNiIg ZG9lcyBub3QgZXhpc3QKKy0tIEluc2VydCBkdXBsaWNhdGVzIGFnYWluCitJTlNFUlQgSU5UTyBh dXhfaW5kZXhfdGFiNSBWQUxVRVMgKDEpLCAoMSk7CistLSBDcmVhdGUgaW52YWxpZCBpbmRleCBh Z2FpbgorQ1JFQVRFIFVOSVFVRSBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDYgT04g YXV4X2luZGV4X3RhYjUgKGMxKTsKK0VSUk9SOiAgY291bGQgbm90IGNyZWF0ZSB1bmlxdWUgaW5k ZXggImF1eF9pbmRleF9pbmQ2IgorREVUQUlMOiAgS2V5IChjMSk9KDEpIGlzIGR1cGxpY2F0ZWQu CistLSBEcm9wIG1haW4gaW5kZXgKK0RST1AgSU5ERVggYXV4X2luZGV4X2luZDY7CistLSBNYWtl IHN1cmUgYXV4aWxpYXJ5IGluZGV4IGRyb3BwZWQgdG9vCitcZCBhdXhfaW5kZXhfdGFiNQorICAg ICAgICAgICBUYWJsZSAicHVibGljLmF1eF9pbmRleF90YWI1IgorIENvbHVtbiB8ICBUeXBlICAg fCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8IERlZmF1bHQgCistLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0KKyBjMSAgICAgfCBpbnRlZ2VyIHwgICAgICAg ICAgIHwgICAgICAgICAgfCAKKwogRFJPUCBUQUJMRSBhdXhfaW5kZXhfdGFiNTsKIC0tIENoZWNr IGhhbmRsaW5nIG9mIGluZGV4ZXMgd2l0aCBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlcy4gIFRo ZQogLS0gZGVmaW5pdGlvbnMgb2YgdGhlIHJlYnVpbHQgaW5kZXhlcyBzaG91bGQgbWF0Y2ggdGhl IG9yaWdpbmFsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXgu c3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbAppbmRleCA4MDVkMmVi ODQ4NS4uZmQ5NmQ4MGFiYmMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0 ZV9pbmRleC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbApA QCAtMTM0NSwxMCArMTM0NSw2MSBAQCBSRUlOREVYIElOREVYIGF1eF9pbmRleF9pbmQ2X2NjYXV4 OwogUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDZfY2NhdXg7CiAtLSBU aGlzIG1ha2VzIHRoZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRleCBjYW4g YmVjb21lIHZhbGlkLgogREVMRVRFIEZST00gYXV4X2luZGV4X3RhYjUgV0hFUkUgYzEgPSAxOwor LS0gU2hvdWxkIGJlIHNraXBwZWQgZHVyaW5nIHJlaW5kZXggYW5kIGRyb3BwZWQKK1JFSU5ERVgg SU5ERVggYXV4X2luZGV4X2luZDY7CistLSBNYWtlIHN1cmUgYXV4IGluZGV4IGlzIGRyb3BwZWQK K1xkIGF1eF9pbmRleF90YWI1CitEUk9QIElOREVYIGF1eF9pbmRleF9pbmQ2OworCistLSBJbnNl cnQgZHVwbGljYXRlcyBhZ2FpbgorSU5TRVJUIElOVE8gYXV4X2luZGV4X3RhYjUgVkFMVUVTICgx KSwgKDEpOworLS0gQ3JlYXRlIGludmFsaWQgaW5kZXggYWdhaW4KK0NSRUFURSBVTklRVUUgSU5E RVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2IE9OIGF1eF9pbmRleF90YWI1IChjMSk7Cist LSBUaGlzIG1ha2VzIHRoZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRleCBj YW4gYmVjb21lIHZhbGlkLgorREVMRVRFIEZST00gYXV4X2luZGV4X3RhYjUgV0hFUkUgYzEgPSAx OwogLS0gU2hvdWxkIGJlIHNraXBwZWQgZHVyaW5nIHJlaW5kZXgKLVJFSU5ERVggVEFCTEUgYXV4 X2luZGV4X3RhYjU7Ci0tLSBTaG91bGQgYmUgc2tpcHBlZCBkdXJpbmcgY29uY3VycmVudCByZWlu ZGV4CiBSRUlOREVYIFRBQkxFIENPTkNVUlJFTlRMWSBhdXhfaW5kZXhfdGFiNTsKKy0tIE1ha2Ug c3VyZSBpdCBpcyBzdGlsbCBleGlzdHMKK1xkIGF1eF9pbmRleF90YWI1CistLSBTaG91bGQgYmUg c2tpcHBlZCBkdXJpbmcgcmVpbmRleCBhbmQgZHJvcHBlZAorUkVJTkRFWCBUQUJMRSBhdXhfaW5k ZXhfdGFiNTsKKy0tIE1ha2Ugc3VyZSBhdXggaW5kZXggaXMgZHJvcHBlZAorXGQgYXV4X2luZGV4 X3RhYjUKK0RST1AgSU5ERVggYXV4X2luZGV4X2luZDY7CisKKy0tIEluc2VydCBkdXBsaWNhdGVz IGFnYWluCitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFiNSBWQUxVRVMgKDEpLCAoMSk7CistLSBD cmVhdGUgaW52YWxpZCBpbmRleCBhZ2FpbgorQ1JFQVRFIFVOSVFVRSBJTkRFWCBDT05DVVJSRU5U TFkgYXV4X2luZGV4X2luZDYgT04gYXV4X2luZGV4X3RhYjUgKGMxKTsKKy0tIFRoaXMgbWFrZXMg dGhlIHByZXZpb3VzIGZhaWx1cmUgZ28gYXdheSwgc28gdGhlIGluZGV4IGNhbiBiZWNvbWUgdmFs aWQuCitERUxFVEUgRlJPTSBhdXhfaW5kZXhfdGFiNSBXSEVSRSBjMSA9IDE7CistLSBTaG91bGQg YmUgc2tpcHBlZCBkdXJpbmcgcmVpbmRleCBhbmQgZHJvcHBlZAorUkVJTkRFWCBJTkRFWCBDT05D VVJSRU5UTFkgYXV4X2luZGV4X2luZDY7CistLSBNYWtlIHN1cmUgYXV4IGluZGV4IGlzIGRyb3Bw ZWQKK1xkIGF1eF9pbmRleF90YWI1CitEUk9QIElOREVYIGF1eF9pbmRleF9pbmQ2OworCistLSBJ bnNlcnQgZHVwbGljYXRlcyBhZ2FpbgorSU5TRVJUIElOVE8gYXV4X2luZGV4X3RhYjUgVkFMVUVT ICgxKSwgKDEpOworLS0gQ3JlYXRlIGludmFsaWQgaW5kZXggYWdhaW4KK0NSRUFURSBVTklRVUUg SU5ERVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2IE9OIGF1eF9pbmRleF90YWI1IChjMSk7 CistLSBUaGlzIG1ha2VzIHRoZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRl eCBjYW4gYmVjb21lIHZhbGlkLgorREVMRVRFIEZST00gYXV4X2luZGV4X3RhYjUgV0hFUkUgYzEg PSAxOworLS0gRHJvcCBtYWluIGluZGV4IENPTkNVUlJFTlRMWQorRFJPUCBJTkRFWCBDT05DVVJS RU5UTFkgYXV4X2luZGV4X2luZDY7CistLSBNYWtlIHN1cmUgYXV4aWxpYXJ5IGluZGV4IGRyb3Bw ZWQgdG9vCitcZCBhdXhfaW5kZXhfdGFiNQorRFJPUCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsKKwor LS0gSW5zZXJ0IGR1cGxpY2F0ZXMgYWdhaW4KK0lOU0VSVCBJTlRPIGF1eF9pbmRleF90YWI1IFZB TFVFUyAoMSksICgxKTsKKy0tIENyZWF0ZSBpbnZhbGlkIGluZGV4IGFnYWluCitDUkVBVEUgVU5J UVVFIElOREVYIENPTkNVUlJFTlRMWSBhdXhfaW5kZXhfaW5kNiBPTiBhdXhfaW5kZXhfdGFiNSAo YzEpOworLS0gRHJvcCBtYWluIGluZGV4CitEUk9QIElOREVYIGF1eF9pbmRleF9pbmQ2OworLS0g TWFrZSBzdXJlIGF1eGlsaWFyeSBpbmRleCBkcm9wcGVkIHRvbworXGQgYXV4X2luZGV4X3RhYjUK KwogRFJPUCBUQUJMRSBhdXhfaW5kZXhfdGFiNTsKIAogLS0gQ2hlY2sgaGFuZGxpbmcgb2YgaW5k ZXhlcyB3aXRoIGV4cHJlc3Npb25zIGFuZCBwcmVkaWNhdGVzLiAgVGhlCi0tIAoyLjQzLjAKCg== --000000000000a3b825064f322697 Content-Type: application/octet-stream; name="v35-0003-Add-Datum-storage-support-to-tuplestore-Extend-t.patch" Content-Disposition: attachment; filename="v35-0003-Add-Datum-storage-support-to-tuplestore-Extend-t.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnuipbjf2 RnJvbSBjNzA1Y2NjODE5ZjNkNGVmMjY0MDdmMGViN2ZlOWUzZGE1NmYyMzA0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAxMiBKYW4gMjAyNiAwMDo1Nzo1NiArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjM1IDMvN10gQWRkIERhdHVtIHN0b3JhZ2Ugc3VwcG9ydCB0byB0dXBsZXN0b3JlIEV4 dGVuZAogdHVwbGVzdG9yZSB0byBzdG9yZSBpbmRpdmlkdWFsIERhdHVtIHZhbHVlcwoKVGhpcyBz dXBwb3J0IGVuYWJsZXMgdXNhZ2VzIG9mIHR1cGxlc3RvcmUgZm9yIG5vbi10dXBsZSBkYXRhIChU SURzKSBpbiB0aGUgbmV4dCBjb21taXQuCi0tLQogc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBs ZXN0b3JlLmMgfCAzNjcgKysrKysrKysrKysrKysrKysrKysrKystLS0tLQogc3JjL2luY2x1ZGUv dXRpbHMvdHVwbGVzdG9yZS5oICAgICAgfCAgMzMgKy0tCiAyIGZpbGVzIGNoYW5nZWQsIDMyNyBp bnNlcnRpb25zKCspLCA3MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9zb3J0L3R1cGxlc3RvcmUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVzdG9y ZS5jCmluZGV4IGY5ZTJkOTUxODZhLi4yYTliMjViZDIzOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvc29ydC90dXBsZXN0b3JlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90 dXBsZXN0b3JlLmMKQEAgLTEsMTYgKzEsMTkgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAq IHR1cGxlc3RvcmUuYwotICoJICBHZW5lcmFsaXplZCByb3V0aW5lcyBmb3IgdGVtcG9yYXJ5IHR1 cGxlIHN0b3JhZ2UuCisgKgkgIEdlbmVyYWxpemVkIHJvdXRpbmVzIGZvciB0ZW1wb3Jhcnkgc3Rv cmFnZSBvZiB0dXBsZXMgYW5kIERhdHVtcy4KKyAqCisgKiBUaGlzIG1vZHVsZSBoYW5kbGVzIHRl bXBvcmFyeSBzdG9yYWdlIG9mIGVpdGhlciB0dXBsZXMgb3Igc2luZ2xlCisgKiBEYXR1bSB2YWx1 ZXMgZm9yIHB1cnBvc2VzIHN1Y2ggYXMgTWF0ZXJpYWxpemUgbm9kZXMsIGhhc2hqb2luIGJhdGNo CisgKiBmaWxlcywgZXRjLiBJdCBpcyBlc3NlbnRpYWxseSBhIGR1bWJlZC1kb3duIHZlcnNpb24g b2YgdHVwbGVzb3J0LmM7CisgKiBpdCBkb2VzIG5vIHNvcnRpbmcgb2YgdHVwbGVzIGJ1dCBjYW4g b25seSBzdG9yZSBhbmQgcmVndXJnaXRhdGUgYSBzZXF1ZW5jZQorICogb2YgdHVwbGVzLiAgSG93 ZXZlciwgYmVjYXVzZSBubyBzb3J0IGlzIHJlcXVpcmVkLCBpdCBpcyBhbGxvd2VkIHRvIHN0YXJ0 CisgKiByZWFkaW5nIHRoZSBzZXF1ZW5jZSBiZWZvcmUgaXQgaGFzIGFsbCBiZWVuIHdyaXR0ZW4u CisgKgorICogVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBjdXJzb3JzLCBiZWNhdXNl IGl0IGFsbG93cyByYW5kb20gYWNjZXNzCisgKiB3aXRoaW4gdGhlIGFscmVhZHktc2Nhbm5lZCBw b3J0aW9uIG9mIGEgcXVlcnkgd2l0aG91dCBoYXZpbmcgdG8gcHJvY2VzcworICogdGhlIHVuZGVy bHlpbmcgc2NhbiB0byBjb21wbGV0aW9uLgogICoKLSAqIFRoaXMgbW9kdWxlIGhhbmRsZXMgdGVt cG9yYXJ5IHN0b3JhZ2Ugb2YgdHVwbGVzIGZvciBwdXJwb3NlcyBzdWNoCi0gKiBhcyBNYXRlcmlh bGl6ZSBub2RlcywgaGFzaGpvaW4gYmF0Y2ggZmlsZXMsIGV0Yy4gIEl0IGlzIGVzc2VudGlhbGx5 Ci0gKiBhIGR1bWJlZC1kb3duIHZlcnNpb24gb2YgdHVwbGVzb3J0LmM7IGl0IGRvZXMgbm8gc29y dGluZyBvZiB0dXBsZXMKLSAqIGJ1dCBjYW4gb25seSBzdG9yZSBhbmQgcmVndXJnaXRhdGUgYSBz ZXF1ZW5jZSBvZiB0dXBsZXMuICBIb3dldmVyLAotICogYmVjYXVzZSBubyBzb3J0IGlzIHJlcXVp cmVkLCBpdCBpcyBhbGxvd2VkIHRvIHN0YXJ0IHJlYWRpbmcgdGhlIHNlcXVlbmNlCi0gKiBiZWZv cmUgaXQgaGFzIGFsbCBiZWVuIHdyaXR0ZW4uICBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwg Zm9yIGN1cnNvcnMsCi0gKiBiZWNhdXNlIGl0IGFsbG93cyByYW5kb20gYWNjZXNzIHdpdGhpbiB0 aGUgYWxyZWFkeS1zY2FubmVkIHBvcnRpb24gb2YKLSAqIGEgcXVlcnkgd2l0aG91dCBoYXZpbmcg dG8gcHJvY2VzcyB0aGUgdW5kZXJseWluZyBzY2FuIHRvIGNvbXBsZXRpb24uCiAgKiBBbHNvLCBp dCBpcyBwb3NzaWJsZSB0byBzdXBwb3J0IG11bHRpcGxlIGluZGVwZW5kZW50IHJlYWQgcG9pbnRl cnMuCiAgKgogICogQSB0ZW1wb3JhcnkgZmlsZSBpcyB1c2VkIHRvIGhhbmRsZSB0aGUgZGF0YSBp ZiBpdCBleGNlZWRzIHRoZQpAQCAtNjEsNiArNjQsOCBAQAogI2luY2x1ZGUgImV4ZWN1dG9yL2V4 ZWN1dG9yLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZm aWxlLmgiCisjaW5jbHVkZSAidXRpbHMvZGF0dW0uaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2Fj aGUuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3Jlc293 bmVyLmgiCiAjaW5jbHVkZSAidXRpbHMvdHVwbGVzdG9yZS5oIgpAQCAtMTE2LDE2ICsxMjEsMTUg QEAgc3RydWN0IFR1cGxlc3RvcmVzdGF0ZQogCUJ1ZkZpbGUgICAgKm15ZmlsZTsJCQkvKiB1bmRl cmx5aW5nIGZpbGUsIG9yIE5VTEwgaWYgbm9uZSAqLwogCU1lbW9yeUNvbnRleHQgY29udGV4dDsJ CS8qIG1lbW9yeSBjb250ZXh0IGZvciBob2xkaW5nIHR1cGxlcyAqLwogCVJlc291cmNlT3duZXIg cmVzb3duZXI7CQkvKiByZXNvd25lciBmb3IgaG9sZGluZyB0ZW1wIGZpbGVzICovCisJT2lkCQkJ ZGF0dW1UeXBlOwkJLyogSW52YWxpZE9pZCBvciBvaWQgb2YgRGF0dW0ncyB0byBiZSBzdG9yZWQg Ki8KKwlpbnQxNgkJZGF0dW1UeXBlTGVuOwkvKiB0eXBlbGVuIG9mIHRoYXQgRGF0dW0gKi8KKwli b29sCQlkYXR1bVR5cGVCeVZhbDsgLyogYnktdmFsdWUgb2YgdGhhdCBEYXR1bSAqLwogCiAJLyoK IAkgKiBUaGVzZSBmdW5jdGlvbiBwb2ludGVycyBkZWNvdXBsZSB0aGUgcm91dGluZXMgdGhhdCBt dXN0IGtub3cgd2hhdCBraW5kCiAJICogb2YgdHVwbGUgd2UgYXJlIGhhbmRsaW5nIGZyb20gdGhl IHJvdXRpbmVzIHRoYXQgZG9uJ3QgbmVlZCB0byBrbm93IGl0LgogCSAqIFRoZXkgYXJlIHNldCB1 cCBieSB0aGUgdHVwbGVzdG9yZV9iZWdpbl94eHggcm91dGluZXMuCiAJICoKLQkgKiAoQWx0aG91 Z2ggdHVwbGVzdG9yZS5jIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIGhlYXAgdHVwbGVzLCBJJ3Zl IGNvcGllZAotCSAqIHRoaXMgcGFydCBvZiB0dXBsZXNvcnQuYyBzbyB0aGF0IGV4dGVuc2lvbiB0 byBvdGhlciBraW5kcyBvZiBvYmplY3RzCi0JICogd2lsbCBiZSBlYXN5IGlmIGl0J3MgZXZlciBu ZWVkZWQuKQotCSAqCiAJICogRnVuY3Rpb24gdG8gY29weSBhIHN1cHBsaWVkIGlucHV0IHR1cGxl IGludG8gcGFsbG9jJ2Qgc3BhY2UuIChOQjogd2UKIAkgKiBhc3N1bWUgdGhhdCBhIHNpbmdsZSBw ZnJlZSgpIGlzIGVub3VnaCB0byByZWxlYXNlIHRoZSB0dXBsZSBsYXRlciwgc28KIAkgKiB0aGUg cmVwcmVzZW50YXRpb24gbXVzdCBiZSAiZmxhdCIgaW4gb25lIHBhbGxvYyBjaHVuay4pIHN0YXRl LT5hdmFpbE1lbQpAQCAtMTUwLDYgKzE1NCwxMiBAQCBzdHJ1Y3QgVHVwbGVzdG9yZXN0YXRlCiAJ ICovCiAJdm9pZAkgICAqKCpyZWFkdHVwKSAoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgdW5zaWdu ZWQgaW50IGxlbik7CiAKKwkvKgorCSAqIEZ1bmN0aW9uIHRvIGdldCBsZW5ndGggb2YgdHVwbGUg ZnJvbSB0YXBlLiBVc2VkIHRvIHByb3ZpZGUgJ2xlbicgYXJndW1lbnQKKwkgKiBmb3IgcmVhZHR1 cCAoc2VlIGFib3ZlKS4KKwkgKi8KKwl1bnNpZ25lZCBpbnQoKmxlbnR1cCkgKFR1cGxlc3RvcmVz dGF0ZSAqc3RhdGUsIGJvb2wgZW9mT0spOworCiAJLyoKIAkgKiBUaGlzIGFycmF5IGhvbGRzIHBv aW50ZXJzIHRvIHR1cGxlcyBpbiBtZW1vcnkgaWYgd2UgYXJlIGluIHN0YXRlIElOTUVNLgogCSAq IEluIHN0YXRlcyBXUklURUZJTEUgYW5kIFJFQURGSUxFIGl0J3Mgbm90IHVzZWQuCkBAIC0xODYs NiArMTk2LDcgQEAgc3RydWN0IFR1cGxlc3RvcmVzdGF0ZQogI2RlZmluZSBDT1BZVFVQKHN0YXRl LHR1cCkJKCgqKHN0YXRlKS0+Y29weXR1cCkgKHN0YXRlLCB0dXApKQogI2RlZmluZSBXUklURVRV UChzdGF0ZSx0dXApICgoKihzdGF0ZSktPndyaXRldHVwKSAoc3RhdGUsIHR1cCkpCiAjZGVmaW5l IFJFQURUVVAoc3RhdGUsbGVuKQkoKCooc3RhdGUpLT5yZWFkdHVwKSAoc3RhdGUsIGxlbikpCisj ZGVmaW5lIExFTlRVUChzdGF0ZSxlb2ZPSykJKCgqKHN0YXRlKS0+bGVudHVwKSAoc3RhdGUsIGVv Zk9LKSkKICNkZWZpbmUgTEFDS01FTShzdGF0ZSkJCSgoc3RhdGUpLT5hdmFpbE1lbSA8IDApCiAj ZGVmaW5lIFVTRU1FTShzdGF0ZSxhbXQpCSgoc3RhdGUpLT5hdmFpbE1lbSAtPSAoYW10KSkKICNk ZWZpbmUgRlJFRU1FTShzdGF0ZSxhbXQpCSgoc3RhdGUpLT5hdmFpbE1lbSArPSAoYW10KSkKQEAg LTE5NCw5ICsyMDUsOSBAQCBzdHJ1Y3QgVHVwbGVzdG9yZXN0YXRlCiAgKgogICogTk9URVMgYWJv dXQgb24tdGFwZSByZXByZXNlbnRhdGlvbiBvZiB0dXBsZXM6CiAgKgotICogV2UgcmVxdWlyZSB0 aGUgZmlyc3QgInVuc2lnbmVkIGludCIgb2YgYSBzdG9yZWQgdHVwbGUgdG8gYmUgdGhlIHRvdGFs IHNpemUKLSAqIG9uLXRhcGUgb2YgdGhlIHR1cGxlLCBpbmNsdWRpbmcgaXRzZWxmIChzbyBpdCBp cyBuZXZlciB6ZXJvKS4KLSAqIFRoZSByZW1haW5kZXIgb2YgdGhlIHN0b3JlZCB0dXBsZQorICog SW4gY2FzZSBvZiB0dXBsZXMgd2UgdXNlIGZpcnN0ICJ1bnNpZ25lZCBpbnQiIG9mIGEgc3RvcmVk IHR1cGxlCisgKiB0byBiZSB0aGUgdG90YWwgc2l6ZSBvbi10YXBlIG9mIHRoZSB0dXBsZSwgaW5j bHVkaW5nIGl0c2VsZgorICogKHNvIGl0IGlzIG5ldmVyIHplcm8pLiBUaGUgcmVtYWluZGVyIG9m IHRoZSBzdG9yZWQgdHVwbGUKICAqIG1heSBvciBtYXkgbm90IG1hdGNoIHRoZSBpbi1tZW1vcnkg cmVwcmVzZW50YXRpb24gb2YgdGhlIHR1cGxlIC0tLQogICogYW55IGNvbnZlcnNpb24gbmVlZGVk IGlzIHRoZSBqb2Igb2YgdGhlIHdyaXRldHVwIGFuZCByZWFkdHVwIHJvdXRpbmVzLgogICoKQEAg LTIwNywxMCArMjE4LDEzIEBAIHN0cnVjdCBUdXBsZXN0b3Jlc3RhdGUKICAqIHN0YXRlLT5iYWNr d2FyZCBpcyBub3Qgc2V0LCB0aGUgd3JpdGUvcmVhZCByb3V0aW5lcyBtYXkgb21pdCB0aGUgZXh0 cmEKICAqIGxlbmd0aCB3b3JkLgogICoKLSAqIHdyaXRldHVwIGlzIGV4cGVjdGVkIHRvIHdyaXRl IGJvdGggbGVuZ3RoIHdvcmRzIGFzIHdlbGwgYXMgdGhlIHR1cGxlCisgKiBJbiB0aGUgY2FzZSBv ZiBEYXR1bSB3aXRoIGNvbnN0YW50IGxlbmd0aCwgYm90aCAidW5zaWduZWQgaW50IiBhcmUgb21p dHRlZC4KKyAqCisgKiB3cml0ZXR1cCBpcyBleHBlY3RlZCB0byB3cml0ZSBib3RoIGxlbmd0aCB3 b3JkcyBhbmQgdGhlIHR1cGxlCiAgKiBkYXRhLiAgV2hlbiByZWFkdHVwIGlzIGNhbGxlZCwgdGhl IHRhcGUgaXMgcG9zaXRpb25lZCBqdXN0IGFmdGVyIHRoZQotICogZnJvbnQgbGVuZ3RoIHdvcmQ7 IHJlYWR0dXAgbXVzdCByZWFkIHRoZSB0dXBsZSBkYXRhIGFuZCBhZHZhbmNlIHBhc3QKLSAqIHRo ZSBiYWNrIGxlbmd0aCB3b3JkIChpZiBwcmVzZW50KS4KKyAqIGZyb250IGxlbmd0aCB3b3JkIChp ZiBpdCBpcyBub3Qgb21pdHRlZCBsaWtlIGluIGNhc2Ugb2YgY29udGVudC1zaXplIERhdHVtKTsK KyAqIHJlYWR0dXAgbXVzdCByZWFkIHRoZSB0dXBsZSBkYXRhIGFuZCBhZHZhbmNlIHBhc3QgdGhl IGJhY2sgbGVuZ3RoIHdvcmQKKyAqIChpZiBwcmVzZW50KS4KICAqCiAgKiBUaGUgd3JpdGUvcmVh ZCByb3V0aW5lcyBjYW4gbWFrZSB1c2Ugb2YgdGhlIHR1cGxlIGRlc2NyaXB0aW9uIGRhdGEKICAq IHN0b3JlZCBpbiB0aGUgVHVwbGVzdG9yZXN0YXRlIHJlY29yZCwgaWYgbmVlZGVkLiBUaGV5IGFy ZSBhbHNvIGV4cGVjdGVkCkBAIC0yNDIsMTEgKzI1NiwxNiBAQCBzdGF0aWMgVHVwbGVzdG9yZXN0 YXRlICp0dXBsZXN0b3JlX2JlZ2luX2NvbW1vbihpbnQgZWZsYWdzLAogc3RhdGljIHZvaWQgdHVw bGVzdG9yZV9wdXR0dXBsZV9jb21tb24oVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgdm9pZCAqdHVw bGUpOwogc3RhdGljIHZvaWQgZHVtcHR1cGxlcyhUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlKTsKIHN0 YXRpYyB2b2lkIHR1cGxlc3RvcmVfdXBkYXRlbWF4KFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUpOwot c3RhdGljIHVuc2lnbmVkIGludCBnZXRsZW4oVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgYm9vbCBl b2ZPSyk7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGVudHVwX2hlYXAoVHVwbGVzdG9yZXN0YXRl ICpzdGF0ZSwgYm9vbCBlb2ZPSyk7CiBzdGF0aWMgdm9pZCAqY29weXR1cF9oZWFwKFR1cGxlc3Rv cmVzdGF0ZSAqc3RhdGUsIHZvaWQgKnR1cCk7CiBzdGF0aWMgdm9pZCB3cml0ZXR1cF9oZWFwKFR1 cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHZvaWQgKnR1cCk7CiBzdGF0aWMgdm9pZCAqcmVhZHR1cF9o ZWFwKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGludCBsZW4pOwogCitzdGF0aWMg dW5zaWduZWQgaW50IGxlbnR1cF9kYXR1bShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29sIGVv Zk9LKTsKK3N0YXRpYyB2b2lkICpjb3B5dHVwX2RhdHVtKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUs IHZvaWQgKmRhdHVtKTsKK3N0YXRpYyB2b2lkIHdyaXRldHVwX2RhdHVtKFR1cGxlc3RvcmVzdGF0 ZSAqc3RhdGUsIHZvaWQgKmRhdHVtKTsKK3N0YXRpYyB2b2lkICpyZWFkdHVwX2RhdHVtKFR1cGxl c3RvcmVzdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGludCBsZW4pOwogCiAvKgogICoJCXR1cGxlc3Rv cmVfYmVnaW5feHh4CkBAIC0yNjksNiArMjg4LDEyIEBAIHR1cGxlc3RvcmVfYmVnaW5fY29tbW9u KGludCBlZmxhZ3MsIGJvb2wgaW50ZXJYYWN0LCBpbnQgbWF4S0J5dGVzKQogCXN0YXRlLT5hbGxv d2VkTWVtID0gbWF4S0J5dGVzICogKGludDY0KSAxMDI0OwogCXN0YXRlLT5hdmFpbE1lbSA9IHN0 YXRlLT5hbGxvd2VkTWVtOwogCXN0YXRlLT5teWZpbGUgPSBOVUxMOworCS8qCisJICogU2V0IERh dHVtIHJlbGF0ZWQgZGF0YSB0byBpbnZhbGlkIGJ5IGRlZmF1bHQuCisJICovCisJc3RhdGUtPmRh dHVtVHlwZSA9IEludmFsaWRPaWQ7CisJc3RhdGUtPmRhdHVtVHlwZUxlbiA9IDA7CisJc3RhdGUt PmRhdHVtVHlwZUJ5VmFsID0gZmFsc2U7CiAKIAkvKgogCSAqIFRoZSBwYWxsb2MvcGZyZWUgcGF0 dGVybiBmb3IgdHVwbGUgbWVtb3J5IGlzIGluIGEgRklGTyBwYXR0ZXJuLiAgQQpAQCAtMzQ2LDYg KzM3MSwzNyBAQCB0dXBsZXN0b3JlX2JlZ2luX2hlYXAoYm9vbCByYW5kb21BY2Nlc3MsIGJvb2wg aW50ZXJYYWN0LCBpbnQgbWF4S0J5dGVzKQogCXN0YXRlLT5jb3B5dHVwID0gY29weXR1cF9oZWFw OwogCXN0YXRlLT53cml0ZXR1cCA9IHdyaXRldHVwX2hlYXA7CiAJc3RhdGUtPnJlYWR0dXAgPSBy ZWFkdHVwX2hlYXA7CisJc3RhdGUtPmxlbnR1cCA9IGxlbnR1cF9oZWFwOworCisJcmV0dXJuIHN0 YXRlOworfQorCisvKgorICogVGhlIHNhbWUgYXMgdHVwbGVzdG9yZV9iZWdpbl9oZWFwIGJ1dCBj cmVhdGUgc3RvcmUgZm9yIERhdHVtIHZhbHVlcy4KKyAqLworVHVwbGVzdG9yZXN0YXRlICoKK3R1 cGxlc3RvcmVfYmVnaW5fZGF0dW0oT2lkIGRhdHVtVHlwZSwgYm9vbCByYW5kb21BY2Nlc3MsIGJv b2wgaW50ZXJYYWN0LCBpbnQgbWF4S0J5dGVzKQoreworCVR1cGxlc3RvcmVzdGF0ZSAqc3RhdGU7 CisJaW50CQkJZWZsYWdzOworCisJLyoKKwkgKiBUaGlzIGludGVycHJldGF0aW9uIG9mIHRoZSBt ZWFuaW5nIG9mIHJhbmRvbUFjY2VzcyBpcyBjb21wYXRpYmxlIHdpdGgKKwkgKiB0aGUgcHJlLTgu MyBiZWhhdmlvciBvZiB0dXBsZXN0b3Jlcy4KKwkgKi8KKwllZmxhZ3MgPSByYW5kb21BY2Nlc3Mg PworCQkoRVhFQ19GTEFHX0JBQ0tXQVJEIHwgRVhFQ19GTEFHX1JFV0lORCkgOgorCQkoRVhFQ19G TEFHX1JFV0lORCk7CisKKwlzdGF0ZSA9IHR1cGxlc3RvcmVfYmVnaW5fY29tbW9uKGVmbGFncywg aW50ZXJYYWN0LCBtYXhLQnl0ZXMpOworCXN0YXRlLT5kYXR1bVR5cGUgPSBkYXR1bVR5cGU7CisJ Z2V0X3R5cGxlbmJ5dmFsKHN0YXRlLT5kYXR1bVR5cGUsICZzdGF0ZS0+ZGF0dW1UeXBlTGVuLCAm c3RhdGUtPmRhdHVtVHlwZUJ5VmFsKTsKKwlBc3NlcnQoIShzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwg JiYgcmFuZG9tQWNjZXNzKSk7CisKKwlzdGF0ZS0+Y29weXR1cCA9IGNvcHl0dXBfZGF0dW07CisJ c3RhdGUtPndyaXRldHVwID0gd3JpdGV0dXBfZGF0dW07CisJc3RhdGUtPnJlYWR0dXAgPSByZWFk dHVwX2RhdHVtOworCXN0YXRlLT5sZW50dXAgPSBsZW50dXBfZGF0dW07CiAKIAlyZXR1cm4gc3Rh dGU7CiB9CkBAIC00NDQsMTYgKzUwMCwxOSBAQCB0dXBsZXN0b3JlX2NsZWFyKFR1cGxlc3RvcmVz dGF0ZSAqc3RhdGUpCiAJewogCQlpbnQ2NAkJYXZhaWxNZW0gPSBzdGF0ZS0+YXZhaWxNZW07CiAK LQkJLyoKLQkJICogQmVsb3csIHdlIHJlc2V0IHRoZSBtZW1vcnkgY29udGV4dCBmb3Igc3Rvcmlu ZyB0dXBsZXMuICBUbyBzYXZlCi0JCSAqIGZyb20gaGF2aW5nIHRvIGFsd2F5cyBjYWxsIEdldE1l bW9yeUNodW5rU3BhY2UoKSBvbiBhbGwgc3RvcmVkCi0JCSAqIHR1cGxlcywgd2UgYWRqdXN0IHRo ZSBhdmFpbE1lbSB0byBmb3JnZXQgYWxsIHRoZSB0dXBsZXMgYW5kIGp1c3QKLQkJICogcmVjYWxs IFVTRU1FTSBmb3IgdGhlIHNwYWNlIHVzZWQgYnkgdGhlIG1lbXR1cGxlcyBhcnJheS4gIEhlcmUg d2UKLQkJICoganVzdCBBc3NlcnQgdGhhdCdzIGNvcnJlY3QgYW5kIHRoZSBtZW1vcnkgdHJhY2tp bmcgaGFzbid0IGdvbmUKLQkJICogd3JvbmcgYW55d2hlcmUuCi0JCSAqLwotCQlmb3IgKGkgPSBz dGF0ZS0+bWVtdHVwZGVsZXRlZDsgaSA8IHN0YXRlLT5tZW10dXBjb3VudDsgaSsrKQotCQkJYXZh aWxNZW0gKz0gR2V0TWVtb3J5Q2h1bmtTcGFjZShzdGF0ZS0+bWVtdHVwbGVzW2ldKTsKKwkJaWYg KCFzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwpCisJCXsKKwkJCS8qCisJCQkgKiBCZWxvdywgd2UgcmVz ZXQgdGhlIG1lbW9yeSBjb250ZXh0IGZvciBzdG9yaW5nIHR1cGxlcy4gIFRvIHNhdmUKKwkJCSAq IGZyb20gaGF2aW5nIHRvIGFsd2F5cyBjYWxsIEdldE1lbW9yeUNodW5rU3BhY2UoKSBvbiBhbGwg c3RvcmVkCisJCQkgKiB0dXBsZXMsIHdlIGFkanVzdCB0aGUgYXZhaWxNZW0gdG8gZm9yZ2V0IGFs bCB0aGUgdHVwbGVzIGFuZCBqdXN0CisJCQkgKiByZWNhbGwgVVNFTUVNIGZvciB0aGUgc3BhY2Ug dXNlZCBieSB0aGUgbWVtdHVwbGVzIGFycmF5LiAgSGVyZSB3ZQorCQkJICoganVzdCBBc3NlcnQg dGhhdCdzIGNvcnJlY3QgYW5kIHRoZSBtZW1vcnkgdHJhY2tpbmcgaGFzbid0IGdvbmUKKwkJCSAq IHdyb25nIGFueXdoZXJlLgorCQkJICovCisJCQlmb3IgKGkgPSBzdGF0ZS0+bWVtdHVwZGVsZXRl ZDsgaSA8IHN0YXRlLT5tZW10dXBjb3VudDsgaSsrKQorCQkJCWF2YWlsTWVtICs9IEdldE1lbW9y eUNodW5rU3BhY2Uoc3RhdGUtPm1lbXR1cGxlc1tpXSk7CisJCX0KIAogCQlhdmFpbE1lbSArPSBH ZXRNZW1vcnlDaHVua1NwYWNlKHN0YXRlLT5tZW10dXBsZXMpOwogCkBAIC03NzcsNiArODM2LDI1 IEBAIHR1cGxlc3RvcmVfcHV0dHVwbGUoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgSGVhcFR1cGxl IHR1cGxlKQogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOwogfQogCisvKgorICogTGlr ZSB0dXBsZXN0b3JlX3B1dHR1cGxlc2xvdCBidXQgZm9yIHNpbmdsZSBEYXR1bS4KKyAqLwordm9p ZAordHVwbGVzdG9yZV9wdXRkYXR1bShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBEYXR1bSBkYXR1 bSkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhzdGF0 ZS0+Y29udGV4dCk7CisKKwkvKgorCSAqIENvcHkgdGhlIERhdHVtLiAgKE11c3QgZG8gdGhpcyBl dmVuIGluIFdSSVRFRklMRSBjYXNlLiAgTm90ZSB0aGF0CisJICogQ09QWVRVUCBpbmNsdWRlcyBV U0VNRU0sIHNvIHdlIG5lZWRuJ3QgZG8gdGhhdCBoZXJlLikKKwkgKi8KKwlkYXR1bSA9IFBvaW50 ZXJHZXREYXR1bShDT1BZVFVQKHN0YXRlLCBEYXR1bUdldFBvaW50ZXIoZGF0dW0pKSk7CisKKwl0 dXBsZXN0b3JlX3B1dHR1cGxlX2NvbW1vbihzdGF0ZSwgRGF0dW1HZXRQb2ludGVyKGRhdHVtKSk7 CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKK30KKwogLyoKICAqIFNpbWlsYXIg dG8gdHVwbGVzdG9yZV9wdXR0dXBsZSgpLCBidXQgd29yayBmcm9tIHZhbHVlcyArIG51bGxzIGFy cmF5cy4KICAqIFRoaXMgYXZvaWRzIGFuIGV4dHJhIHR1cGxlLWNvbnN0cnVjdGlvbiBvcGVyYXRp b24uCkBAIC0xMDI4LDEwICsxMTA2LDEwIEBAIHR1cGxlc3RvcmVfZ2V0dHVwbGUoVHVwbGVzdG9y ZXN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3YXJkLAogCQkJcGdfZmFsbHRocm91Z2g7CiAKIAkJY2Fz ZSBUU1NfUkVBREZJTEU6Ci0JCQkqc2hvdWxkX2ZyZWUgPSB0cnVlOworCQkJKnNob3VsZF9mcmVl ID0gIXN0YXRlLT5kYXR1bVR5cGVCeVZhbDsKIAkJCWlmIChmb3J3YXJkKQogCQkJewotCQkJCWlm ICgodHVwbGVuID0gZ2V0bGVuKHN0YXRlLCB0cnVlKSkgIT0gMCkKKwkJCQlpZiAoKHR1cGxlbiA9 IExFTlRVUChzdGF0ZSwgdHJ1ZSkpICE9IDApCiAJCQkJewogCQkJCQl0dXAgPSBSRUFEVFVQKHN0 YXRlLCB0dXBsZW4pOwogCQkJCQlyZXR1cm4gdHVwOwpAQCAtMTA0Myw2ICsxMTIxLDcgQEAgdHVw bGVzdG9yZV9nZXR0dXBsZShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29sIGZvcndhcmQsCiAJ CQkJfQogCQkJfQogCisJCQlBc3NlcnQoIXN0YXRlLT5kYXR1bVR5cGVCeVZhbCk7CiAJCQkvKgog CQkJICogQmFja3dhcmQuCiAJCQkgKgpAQCAtMTA2MCw3ICsxMTM5LDcgQEAgdHVwbGVzdG9yZV9n ZXR0dXBsZShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29sIGZvcndhcmQsCiAJCQkJQXNzZXJ0 KCFzdGF0ZS0+dHJ1bmNhdGVkKTsKIAkJCQlyZXR1cm4gTlVMTDsKIAkJCX0KLQkJCXR1cGxlbiA9 IGdldGxlbihzdGF0ZSwgZmFsc2UpOworCQkJdHVwbGVuID0gTEVOVFVQKHN0YXRlLCBmYWxzZSk7 CiAKIAkJCWlmIChyZWFkcHRyLT5lb2ZfcmVhY2hlZCkKIAkJCXsKQEAgLTEwOTEsNyArMTE3MCw3 IEBAIHR1cGxlc3RvcmVfZ2V0dHVwbGUoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3 YXJkLAogCQkJCQlBc3NlcnQoIXN0YXRlLT50cnVuY2F0ZWQpOwogCQkJCQlyZXR1cm4gTlVMTDsK IAkJCQl9Ci0JCQkJdHVwbGVuID0gZ2V0bGVuKHN0YXRlLCBmYWxzZSk7CisJCQkJdHVwbGVuID0g TEVOVFVQKHN0YXRlLCBmYWxzZSk7CiAJCQl9CiAKIAkJCS8qCkBAIC0xMTUzLDYgKzEyMzIsNDEg QEAgdHVwbGVzdG9yZV9nZXR0dXBsZXNsb3QoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgYm9vbCBm b3J3YXJkLAogCX0KIH0KIAorYm9vbAordHVwbGVzdG9yZV9nZXRkYXR1bShUdXBsZXN0b3Jlc3Rh dGUgKnN0YXRlLCBib29sIGZvcndhcmQsCisJCQkJCWJvb2wgKnNob3VsZF9mcmVlLCBEYXR1bSAq cmVzdWx0KQoreworCURhdHVtIGRhdHVtOworCSpzaG91bGRfZnJlZSA9IGZhbHNlOworCisJZGF0 dW0gPSAoRGF0dW0pIHR1cGxlc3RvcmVfZ2V0dHVwbGUoc3RhdGUsIGZvcndhcmQsIHNob3VsZF9m cmVlKTsKKworCS8qIEZvciBieS12YWx1ZSBkYXR1bSB3ZSBtYXkgcmVjZWl2ZSB6ZXJvIGFzIHZh bGlkIHZhbHVlLiAqLworCWlmIChzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwpCisJeworCQkvKiBSZXR1 cm4gZmFsc2Ugb25seSBvbiBFT0YgKi8KKwkJaWYgKHN0YXRlLT5yZWFkcHRyc1tzdGF0ZS0+YWN0 aXZlcHRyXS5lb2ZfcmVhY2hlZCkKKwkJeworCQkJKnJlc3VsdCA9IFBvaW50ZXJHZXREYXR1bShO VUxMKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCSpyZXN1bHQgPSBkYXR1bTsKKwkJcmV0 dXJuIHRydWU7CisJfQorCisJaWYgKGRhdHVtKQorCXsKKwkJKnJlc3VsdCA9IGRhdHVtOworCQly ZXR1cm4gdHJ1ZTsKKwl9CisJZWxzZQorCXsKKwkJKnJlc3VsdCA9IFBvaW50ZXJHZXREYXR1bShO VUxMKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKwogLyoKICAqIHR1cGxlc3RvcmVfZ2V0dHVw bGVzbG90X2ZvcmNlIC0gZXhwb3J0ZWQgZnVuY3Rpb24gdG8gZmV0Y2ggYSB0dXBsZQogICoKQEAg LTEyMDUsMTAgKzEzMTksMjAgQEAgdHVwbGVzdG9yZV9hZHZhbmNlKFR1cGxlc3RvcmVzdGF0ZSAq c3RhdGUsIGJvb2wgZm9yd2FyZCkKIAkJCXBmcmVlKHR1cGxlKTsKIAkJcmV0dXJuIHRydWU7CiAJ fQotCWVsc2UKKworCS8qCisJICogQSBOVUxMIHJldHVybiBub3JtYWxseSBtZWFucyBlbmQtb2Yt ZGF0YSwgYnV0IGZvciBieS12YWx1ZSBkYXR1bQorCSAqIHN0b3JlcyBhIHZhbGlkIHplcm8tdmFs dWVkIGRhdHVtIChlLmcuLCBmYWxzZSwgMCkgaXMgaW5kaXN0aW5ndWlzaGFibGUKKwkgKiBmcm9t IE5VTEwgdmlhIHBvaW50ZXIgY2hlY2suICBVc2UgZW9mX3JlYWNoZWQgdG8gZGlzdGluZ3Vpc2gu CisJICovCisJaWYgKHN0YXRlLT5kYXR1bVR5cGVCeVZhbCkKIAl7Ci0JCXJldHVybiBmYWxzZTsK KwkJVFNSZWFkUG9pbnRlciAqcmVhZHB0ciA9ICZzdGF0ZS0+cmVhZHB0cnNbc3RhdGUtPmFjdGl2 ZXB0cl07CisKKwkJcmV0dXJuICFyZWFkcHRyLT5lb2ZfcmVhY2hlZDsKIAl9CisKKwlyZXR1cm4g ZmFsc2U7CiB9CiAKIC8qCkBAIC0xMjcxLDcgKzEzOTUsMTMgQEAgdHVwbGVzdG9yZV9za2lwdHVw bGVzKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGludDY0IG50dXBsZXMsIGJvb2wgZm9yd2FyZCkK IAkJCQl0dXBsZSA9IHR1cGxlc3RvcmVfZ2V0dHVwbGUoc3RhdGUsIGZvcndhcmQsICZzaG91bGRf ZnJlZSk7CiAKIAkJCQlpZiAodHVwbGUgPT0gTlVMTCkKLQkJCQkJcmV0dXJuIGZhbHNlOworCQkJ CXsKKwkJCQkJLyogU2VlIHR1cGxlc3RvcmVfYWR2YW5jZSBmb3Igd2h5IHBvaW50ZXIgY2hlY2sg aXMgaW5zdWZmaWNpZW50ICovCisJCQkJCWlmICghc3RhdGUtPmRhdHVtVHlwZUJ5VmFsIHx8CisJ CQkJCQlzdGF0ZS0+cmVhZHB0cnNbc3RhdGUtPmFjdGl2ZXB0cl0uZW9mX3JlYWNoZWQpCisJCQkJ CQlyZXR1cm4gZmFsc2U7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KIAkJCQlpZiAoc2hvdWxkX2Zy ZWUpCiAJCQkJCXBmcmVlKHR1cGxlKTsKIAkJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwpAQCAt MTUwNSw4ICsxNjM1LDExIEBAIHR1cGxlc3RvcmVfdHJpbShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRl KQogCS8qIFJlbGVhc2Ugbm8tbG9uZ2VyLW5lZWRlZCB0dXBsZXMgKi8KIAlmb3IgKGkgPSBzdGF0 ZS0+bWVtdHVwZGVsZXRlZDsgaSA8IG5yZW1vdmU7IGkrKykKIAl7Ci0JCUZSRUVNRU0oc3RhdGUs IEdldE1lbW9yeUNodW5rU3BhY2Uoc3RhdGUtPm1lbXR1cGxlc1tpXSkpOwotCQlwZnJlZShzdGF0 ZS0+bWVtdHVwbGVzW2ldKTsKKwkJaWYgKCFzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwpCisJCXsKKwkJ CUZSRUVNRU0oc3RhdGUsIEdldE1lbW9yeUNodW5rU3BhY2Uoc3RhdGUtPm1lbXR1cGxlc1tpXSkp OworCQkJcGZyZWUoc3RhdGUtPm1lbXR1cGxlc1tpXSk7CisJCX0KIAkJc3RhdGUtPm1lbXR1cGxl c1tpXSA9IE5VTEw7CiAJCS8qIEFzIGluIGR1bXB0dXBsZXMoKSwgaW5jcmVtZW50IG1lbXR1cGRl bGV0ZWQgc3luY2hyb25vdXNseSAqLwogCQlzdGF0ZS0+bWVtdHVwZGVsZXRlZCsrOwpAQCAtMTYw MywyNSArMTczNiw2IEBAIHR1cGxlc3RvcmVfaW5fbWVtb3J5KFR1cGxlc3RvcmVzdGF0ZSAqc3Rh dGUpCiAJcmV0dXJuIChzdGF0ZS0+c3RhdHVzID09IFRTU19JTk1FTSk7CiB9CiAKLQotLyoKLSAq IFRhcGUgaW50ZXJmYWNlIHJvdXRpbmVzCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGludAotZ2V0 bGVuKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGJvb2wgZW9mT0spCi17Ci0JdW5zaWduZWQgaW50 IGxlbjsKLQlzaXplX3QJCW5ieXRlczsKLQotCW5ieXRlcyA9IEJ1ZkZpbGVSZWFkTWF5YmVFT0Yo c3RhdGUtPm15ZmlsZSwgJmxlbiwgc2l6ZW9mKGxlbiksIGVvZk9LKTsKLQlpZiAobmJ5dGVzID09 IDApCi0JCXJldHVybiAwOwotCWVsc2UKLQkJcmV0dXJuIGxlbjsKLX0KLQotCiAvKgogICogUm91 dGluZXMgc3BlY2lhbGl6ZWQgZm9yIEhlYXBUdXBsZSBjYXNlCiAgKgpAQCAtMTYzMiw2ICsxNzQ2 LDE5IEBAIGdldGxlbihUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29sIGVvZk9LKQogICogdG8g d3JpdGUgdGhhdCBzZXBhcmF0ZWx5LgogICovCiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2xlbnR1 cF9oZWFwKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGJvb2wgZW9mT0spCit7CisJdW5zaWduZWQg aW50IGxlbjsKKwlzaXplX3QJCW5ieXRlczsKKworCW5ieXRlcyA9IEJ1ZkZpbGVSZWFkTWF5YmVF T0Yoc3RhdGUtPm15ZmlsZSwgJmxlbiwgc2l6ZW9mKGxlbiksIGVvZk9LKTsKKwlpZiAobmJ5dGVz ID09IDApCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIGxlbjsKK30KKwogc3RhdGljIHZv aWQgKgogY29weXR1cF9oZWFwKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHZvaWQgKnR1cCkKIHsK QEAgLTE2NzgsMyArMTgwNSwxMjcgQEAgcmVhZHR1cF9oZWFwKFR1cGxlc3RvcmVzdGF0ZSAqc3Rh dGUsIHVuc2lnbmVkIGludCBsZW4pCiAJCUJ1ZkZpbGVSZWFkRXhhY3Qoc3RhdGUtPm15ZmlsZSwg JnR1cGxlbiwgc2l6ZW9mKHR1cGxlbikpOwogCXJldHVybiB0dXBsZTsKIH0KKworLyoKKyAqIFJv dXRpbmVzIHNwZWNpYWxpemVkIGZvciBEYXR1bSBjYXNlLgorICoKKyAqIEhhbmRsZXMgYm90aCBm aXhlZCBhbmQgdmFyaWFibGUtbGVuZ3RoIERhdHVtcyBlZmZpY2llbnRseToKKyAqIC0gRml4ZWQt bGVuZ3RoIGFuZCBWYXJpYWJsZS1sZW5ndGggaW5jbHVkZXMgbGVuZ3RoIHByZWZpeCAoYW5kIHN1 ZmZpeCBpZiBiYWNrd2FyZCBzY2FuKQorICogLSBCeS12YWx1ZSB0eXBlcyBoYW5kbGVkIGlubGlu ZSB3aXRob3V0IGV4dHJhIGNvcHlpbmcsIHN0b3Jpbmcgc2luZ2xlIGV4dHJhIGJ5dGUKKyAqICAg WFhYOiBjb25zaWRlciByZWZhY3RvcmluZyB0byBhdm9pZCBpdCwgY3VycmVudGx5IG5lZWQgaXQg Zm9yIGNvcnJlY3QgcmV3aW5kIGxvZ2ljCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGludAorbGVu dHVwX2RhdHVtKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGJvb2wgZW9mT0spCit7CisJdW5zaWdu ZWQgaW50IGxlbjsKKwlzaXplX3QJCW5ieXRlczsKKworCUFzc2VydChzdGF0ZS0+ZGF0dW1UeXBl ICE9IEludmFsaWRPaWQpOworCisJaWYgKHN0YXRlLT5kYXR1bVR5cGVCeVZhbCkKKwl7CisJCXVp bnQ4CWp1bms7CisJCW5ieXRlcyA9IEJ1ZkZpbGVSZWFkTWF5YmVFT0Yoc3RhdGUtPm15ZmlsZSwg Jmp1bmssIHNpemVvZih1aW50OCksIGVvZk9LKTsKKwkJaWYgKG5ieXRlcyA9PSAwKQorCQkJcmV0 dXJuIDA7CisJCUFzc2VydChqdW5rID09ICh1aW50OCkgc3RhdGUtPmRhdHVtVHlwZUxlbik7CisJ CXJldHVybiBzdGF0ZS0+ZGF0dW1UeXBlTGVuOworCX0KKworCW5ieXRlcyA9IEJ1ZkZpbGVSZWFk TWF5YmVFT0Yoc3RhdGUtPm15ZmlsZSwgJmxlbiwgc2l6ZW9mKGxlbiksIGVvZk9LKTsKKwlpZiAo bmJ5dGVzID09IDApCisJCXJldHVybiAwOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyB2b2lk ICoKK2NvcHl0dXBfZGF0dW0oVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgdm9pZCAqZGF0dW0pCit7 CisJRGF0dW0gZDsKKwlBc3NlcnQoc3RhdGUtPmRhdHVtVHlwZSAhPSBJbnZhbGlkT2lkKTsKKwlp ZiAoc3RhdGUtPmRhdHVtVHlwZUJ5VmFsKQorCQlyZXR1cm4gRGF0dW1HZXRQb2ludGVyKFBvaW50 ZXJHZXREYXR1bShkYXR1bSkpOworCisJaWYgKGRhdHVtID09IE5VTEwpCisJCXJldHVybiBOVUxM OworCisJZCA9IGRhdHVtQ29weShQb2ludGVyR2V0RGF0dW0oZGF0dW0pLCBzdGF0ZS0+ZGF0dW1U eXBlQnlWYWwsIHN0YXRlLT5kYXR1bVR5cGVMZW4pOworCVVTRU1FTShzdGF0ZSwgR2V0TWVtb3J5 Q2h1bmtTcGFjZShEYXR1bUdldFBvaW50ZXIoZCkpKTsKKwlyZXR1cm4gRGF0dW1HZXRQb2ludGVy KGQpOworfQorCitzdGF0aWMgdm9pZAord3JpdGV0dXBfZGF0dW0oVHVwbGVzdG9yZXN0YXRlICpz dGF0ZSwgdm9pZCAqZGF0dW0pCit7CisJQXNzZXJ0KHN0YXRlLT5kYXR1bVR5cGUgIT0gSW52YWxp ZE9pZCk7CisJaWYgKHN0YXRlLT5kYXR1bVR5cGVCeVZhbCkKKwl7CisJCXVpbnQ4IGp1bmsgPSBz dGF0ZS0+ZGF0dW1UeXBlTGVuOyAvKiBvdmVyZmxvdyBpcyBvayAqLworCQlEYXR1bSB2OworCQlB c3NlcnQoc3RhdGUtPmRhdHVtVHlwZUxlbiA+IDApOworCisJCS8qIGp1c3QgbWFya2VyIGJ5dGUg dXNlZCB0byB0cmFjayB0aGUgZW5kIG9mIGRhdGEgZm9yIHJld2luZCBsb2dpYyAqLworCQlCdWZG aWxlV3JpdGUoc3RhdGUtPm15ZmlsZSwgJmp1bmssIHNpemVvZihqdW5rKSk7CisJCXN0b3JlX2F0 dF9ieXZhbCgmdiwgUG9pbnRlckdldERhdHVtKGRhdHVtKSwgc3RhdGUtPmRhdHVtVHlwZUxlbik7 CisJCUJ1ZkZpbGVXcml0ZShzdGF0ZS0+bXlmaWxlLCAmdiwgc3RhdGUtPmRhdHVtVHlwZUxlbik7 CisJCUFzc2VydCghc3RhdGUtPmJhY2t3YXJkKTsKKwl9CisJZWxzZQorCXsKKwkJdW5zaWduZWQg aW50IHNpemU7CisJCXVuc2lnbmVkIGludCB0dXBsZW47CisKKwkJaWYgKHN0YXRlLT5kYXR1bVR5 cGVMZW4gPCAwKQorCQkJc2l6ZSA9IGRhdHVtR2V0U2l6ZShQb2ludGVyR2V0RGF0dW0oZGF0dW0p LCBzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwsIHN0YXRlLT5kYXR1bVR5cGVMZW4pOworCQllbHNlCisJ CQlzaXplID0gc3RhdGUtPmRhdHVtVHlwZUxlbjsKKworCQkvKgorCQkgKiBJbmNsdWRlIHNpemVv Zih1bnNpZ25lZCBpbnQpIGluIHRoZSBzdG9yZWQgbGVuZ3RoLCBtYXRjaGluZyB0aGUKKwkJICog Y29udmVudGlvbiB1c2VkIGJ5IHdyaXRldHVwX2hlYXAuICBUaGUgYmFja3dhcmQtc2NhbiBzZWVr CisJCSAqIGFyaXRobWV0aWMgaW4gdHVwbGVzdG9yZV9nZXR0dXBsZSBhc3N1bWVzIHRoaXMuCisJ CSAqLworCQl0dXBsZW4gPSBzaXplICsgc2l6ZW9mKHVuc2lnbmVkIGludCk7CisJCUJ1ZkZpbGVX cml0ZShzdGF0ZS0+bXlmaWxlLCAmdHVwbGVuLCBzaXplb2YodHVwbGVuKSk7CisKKwkJQnVmRmls ZVdyaXRlKHN0YXRlLT5teWZpbGUsIGRhdHVtLCBzaXplKTsKKworCQkvKiBuZWVkIHRyYWlsaW5n IGxlbmd0aCB3b3JkPyAqLworCQlpZiAoc3RhdGUtPmJhY2t3YXJkKQorCQkJQnVmRmlsZVdyaXRl KHN0YXRlLT5teWZpbGUsICZ0dXBsZW4sIHNpemVvZih0dXBsZW4pKTsKKworCQlGUkVFTUVNKHN0 YXRlLCBHZXRNZW1vcnlDaHVua1NwYWNlKGRhdHVtKSk7CisJCXBmcmVlKGRhdHVtKTsKKwl9Cit9 CisKK3N0YXRpYyB2b2lkICoKK3JlYWR0dXBfZGF0dW0oVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwg dW5zaWduZWQgaW50IGxlbikKK3sKKwlBc3NlcnQoc3RhdGUtPmRhdHVtVHlwZSAhPSBJbnZhbGlk T2lkKTsKKwlpZiAoc3RhdGUtPmRhdHVtVHlwZUJ5VmFsKQorCXsKKwkJRGF0dW0gZGF0dW0gPSAw OworCisJCUFzc2VydChzdGF0ZS0+ZGF0dW1UeXBlTGVuID4gMCk7CisJCUFzc2VydChsZW4gPT0g c3RhdGUtPmRhdHVtVHlwZUxlbik7CisJCUJ1ZkZpbGVSZWFkRXhhY3Qoc3RhdGUtPm15ZmlsZSwg JmRhdHVtLCBzdGF0ZS0+ZGF0dW1UeXBlTGVuKTsKKworCQlBc3NlcnQoIXN0YXRlLT5iYWNrd2Fy ZCk7CisJCXJldHVybiBEYXR1bUdldFBvaW50ZXIoZmV0Y2hfYXR0KCZkYXR1bSwgdHJ1ZSwgc3Rh dGUtPmRhdHVtVHlwZUxlbikpOworCX0KKwllbHNlCisJeworCQl1bnNpZ25lZCBpbnQgZGF0YWxl biA9IGxlbiAtIHNpemVvZih1bnNpZ25lZCBpbnQpOworCQl2b2lkICpkYXRhID0gcGFsbG9jKGRh dGFsZW4pOworCisJCUJ1ZkZpbGVSZWFkRXhhY3Qoc3RhdGUtPm15ZmlsZSwgZGF0YSwgZGF0YWxl bik7CisKKwkJLyogbmVlZCB0cmFpbGluZyBsZW5ndGggd29yZD8gKi8KKwkJaWYgKHN0YXRlLT5i YWNrd2FyZCkKKwkJCUJ1ZkZpbGVSZWFkRXhhY3Qoc3RhdGUtPm15ZmlsZSwgJmxlbiwgc2l6ZW9m KGxlbikpOworCisJCXJldHVybiBkYXRhOworCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3V0aWxzL3R1cGxlc3RvcmUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3R1cGxlc3RvcmUuaAppbmRl eCBmNjM4Yjk2ZTE1Ni4uZTE2ZDlhM2QzNTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxz L3R1cGxlc3RvcmUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy90dXBsZXN0b3JlLmgKQEAgLTEs MTcgKzEsMTggQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIHR1cGxlc3RvcmUuaAotICoJ ICBHZW5lcmFsaXplZCByb3V0aW5lcyBmb3IgdGVtcG9yYXJ5IHR1cGxlIHN0b3JhZ2UuCisgKgkg IEdlbmVyYWxpemVkIHJvdXRpbmVzIGZvciB0ZW1wb3Jhcnkgc3RvcmFnZSBvZiB0dXBsZXMgYW5k IERhdHVtcy4KICAqCi0gKiBUaGlzIG1vZHVsZSBoYW5kbGVzIHRlbXBvcmFyeSBzdG9yYWdlIG9m IHR1cGxlcyBmb3IgcHVycG9zZXMgc3VjaAotICogYXMgTWF0ZXJpYWxpemUgbm9kZXMsIGhhc2hq b2luIGJhdGNoIGZpbGVzLCBldGMuICBJdCBpcyBlc3NlbnRpYWxseQotICogYSBkdW1iZWQtZG93 biB2ZXJzaW9uIG9mIHR1cGxlc29ydC5jOyBpdCBkb2VzIG5vIHNvcnRpbmcgb2YgdHVwbGVzCi0g KiBidXQgY2FuIG9ubHkgc3RvcmUgYW5kIHJlZ3VyZ2l0YXRlIGEgc2VxdWVuY2Ugb2YgdHVwbGVz LiAgSG93ZXZlciwKLSAqIGJlY2F1c2Ugbm8gc29ydCBpcyByZXF1aXJlZCwgaXQgaXMgYWxsb3dl ZCB0byBzdGFydCByZWFkaW5nIHRoZSBzZXF1ZW5jZQotICogYmVmb3JlIGl0IGhhcyBhbGwgYmVl biB3cml0dGVuLiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBjdXJzb3JzLAotICog YmVjYXVzZSBpdCBhbGxvd3MgcmFuZG9tIGFjY2VzcyB3aXRoaW4gdGhlIGFscmVhZHktc2Nhbm5l ZCBwb3J0aW9uIG9mCi0gKiBhIHF1ZXJ5IHdpdGhvdXQgaGF2aW5nIHRvIHByb2Nlc3MgdGhlIHVu ZGVybHlpbmcgc2NhbiB0byBjb21wbGV0aW9uLgotICogQWxzbywgaXQgaXMgcG9zc2libGUgdG8g c3VwcG9ydCBtdWx0aXBsZSBpbmRlcGVuZGVudCByZWFkIHBvaW50ZXJzLgorICogVGhpcyBtb2R1 bGUgaGFuZGxlcyB0ZW1wb3Jhcnkgc3RvcmFnZSBvZiBlaXRoZXIgdHVwbGVzIG9yIHNpbmdsZQor ICogRGF0dW0gdmFsdWVzIGZvciBwdXJwb3NlcyBzdWNoIGFzIE1hdGVyaWFsaXplIG5vZGVzLCBo YXNoam9pbiBiYXRjaAorICogZmlsZXMsIGV0Yy4gSXQgaXMgZXNzZW50aWFsbHkgYSBkdW1iZWQt ZG93biB2ZXJzaW9uIG9mIHR1cGxlc29ydC5jOworICogaXQgZG9lcyBubyBzb3J0aW5nIG9mIHR1 cGxlcyBidXQgY2FuIG9ubHkgc3RvcmUgYW5kIHJlZ3VyZ2l0YXRlIGEgc2VxdWVuY2UKKyAqIG9m IHR1cGxlcy4gIEhvd2V2ZXIsIGJlY2F1c2Ugbm8gc29ydCBpcyByZXF1aXJlZCwgaXQgaXMgYWxs b3dlZCB0byBzdGFydAorICogcmVhZGluZyB0aGUgc2VxdWVuY2UgYmVmb3JlIGl0IGhhcyBhbGwg YmVlbiB3cml0dGVuLgorICoKKyAqIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgY3Vy c29ycywgYmVjYXVzZSBpdCBhbGxvd3MgcmFuZG9tIGFjY2VzcworICogd2l0aGluIHRoZSBhbHJl YWR5LXNjYW5uZWQgcG9ydGlvbiBvZiBhIHF1ZXJ5IHdpdGhvdXQgaGF2aW5nIHRvIHByb2Nlc3MK KyAqIHRoZSB1bmRlcmx5aW5nIHNjYW4gdG8gY29tcGxldGlvbi4KICAqCiAgKiBBIHRlbXBvcmFy eSBmaWxlIGlzIHVzZWQgdG8gaGFuZGxlIHRoZSBkYXRhIGlmIGl0IGV4Y2VlZHMgdGhlCiAgKiBz cGFjZSBsaW1pdCBzcGVjaWZpZWQgYnkgdGhlIGNhbGxlci4KQEAgLTM5LDE0ICs0MCwxMyBAQAog ICovCiB0eXBlZGVmIHN0cnVjdCBUdXBsZXN0b3Jlc3RhdGUgVHVwbGVzdG9yZXN0YXRlOwogCi0v KgotICogQ3VycmVudGx5IHdlIG9ubHkgbmVlZCB0byBzdG9yZSBNaW5pbWFsVHVwbGVzLCBidXQg aXQgd291bGQgYmUgZWFzeQotICogdG8gc3VwcG9ydCB0aGUgc2FtZSBiZWhhdmlvciBmb3IgSW5k ZXhUdXBsZXMgYW5kL29yIGJhcmUgRGF0dW1zLgotICovCi0KIGV4dGVybiBUdXBsZXN0b3Jlc3Rh dGUgKnR1cGxlc3RvcmVfYmVnaW5faGVhcChib29sIHJhbmRvbUFjY2VzcywKIAkJCQkJCQkJCQkJ ICBib29sIGludGVyWGFjdCwKIAkJCQkJCQkJCQkJICBpbnQgbWF4S0J5dGVzKTsKK2V4dGVybiBU dXBsZXN0b3Jlc3RhdGUgKnR1cGxlc3RvcmVfYmVnaW5fZGF0dW0oT2lkIGRhdHVtVHlwZSwKKwkJ CQkJCQkJCQkJICAgYm9vbCByYW5kb21BY2Nlc3MsCisJCQkJCQkJCQkJCSAgIGJvb2wgaW50ZXJY YWN0LAorCQkJCQkJCQkJCQkgICBpbnQgbWF4S0J5dGVzKTsKIAogZXh0ZXJuIHZvaWQgdHVwbGVz dG9yZV9zZXRfZWZsYWdzKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGludCBlZmxhZ3MpOwogCkBA IC01NSw2ICs1NSw3IEBAIGV4dGVybiB2b2lkIHR1cGxlc3RvcmVfcHV0dHVwbGVzbG90KFR1cGxl c3RvcmVzdGF0ZSAqc3RhdGUsCiBleHRlcm4gdm9pZCB0dXBsZXN0b3JlX3B1dHR1cGxlKFR1cGxl c3RvcmVzdGF0ZSAqc3RhdGUsIEhlYXBUdXBsZSB0dXBsZSk7CiBleHRlcm4gdm9pZCB0dXBsZXN0 b3JlX3B1dHZhbHVlcyhUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBUdXBsZURlc2MgdGRlc2MsCiAJ CQkJCQkJCSBjb25zdCBEYXR1bSAqdmFsdWVzLCBjb25zdCBib29sICppc251bGwpOworZXh0ZXJu IHZvaWQgdHVwbGVzdG9yZV9wdXRkYXR1bShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBEYXR1bSBk YXR1bSk7CiAKIGV4dGVybiBpbnQJdHVwbGVzdG9yZV9hbGxvY19yZWFkX3BvaW50ZXIoVHVwbGVz dG9yZXN0YXRlICpzdGF0ZSwgaW50IGVmbGFncyk7CiAKQEAgLTcyLDYgKzczLDggQEAgZXh0ZXJu IGJvb2wgdHVwbGVzdG9yZV9pbl9tZW1vcnkoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSk7CiAKIGV4 dGVybiBib29sIHR1cGxlc3RvcmVfZ2V0dHVwbGVzbG90KFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUs IGJvb2wgZm9yd2FyZCwKIAkJCQkJCQkJCWJvb2wgY29weSwgVHVwbGVUYWJsZVNsb3QgKnNsb3Qp OworZXh0ZXJuIGJvb2wgdHVwbGVzdG9yZV9nZXRkYXR1bShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRl LCBib29sIGZvcndhcmQsCisJCQkJCQkJCWJvb2wgKnNob3VsZF9mcmVlLCBEYXR1bSAqcmVzdWx0 KTsKIAogZXh0ZXJuIGJvb2wgdHVwbGVzdG9yZV9nZXR0dXBsZXNsb3RfZm9yY2UoVHVwbGVzdG9y ZXN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3YXJkLAogCQkJCQkJCQkJCSAgYm9vbCBjb3B5LCBUdXBs ZVRhYmxlU2xvdCAqc2xvdCk7Ci0tIAoyLjQzLjAKCg== --000000000000a3b825064f322697 Content-Type: application/octet-stream; name="v35-0002-Add-STIR-access-method-and-flags-related-to-auxi.patch" Content-Disposition: attachment; filename="v35-0002-Add-STIR-access-method-and-flags-related-to-auxi.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnuipbjd1 RnJvbSBlNzUyYzlmZjI2ZTcxOGUyMDlkZmI5MjhiZmQzNzljNTMwMmExZjc3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogU3VuLCAxMSBKYW4gMjAyNiAxOToyNzo1MiArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjM1IDIvN10gQWRkIFNUSVIgYWNjZXNzIG1ldGhvZCBhbmQgZmxhZ3MgcmVsYXRlZCB0 byBhdXhpbGlhcnkKIGluZGV4ZXMKClRoaXMgcGF0Y2ggcHJvdmlkZXMgaW5mcmFzdHJ1Y3R1cmUg Zm9yIGZvbGxvd2luZyBlbmhhbmNlbWVudHMgdG8gY29uY3VycmVudCBpbmRleCBidWlsZHMgYnk6 Ci0gaWlfQXV4aWxpYXJ5IGluIEluZGV4SW5mbzogaW5kaWNhdGVzIHRoYXQgYW4gaW5kZXggaXMg YW4gYXV4aWxpYXJ5IGluZGV4IHVzZWQgZHVyaW5nIGNvbmN1cnJlbnQgaW5kZXggYnVpbGQKLSB2 YWxpZGF0ZV9pbmRleCBpbiBJbmRleFZhY3V1bUluZm86IHNldCBpZiBpbmRleF9idWxrX2RlbGV0 ZSBjYWxsZWQgZHVyaW5nIHRoZSB2YWxpZGF0aW9uIHBoYXNlIG9mIGNvbmN1cnJlbnQgaW5kZXgg YnVpbGQKLSBTVElSIChTaG9ydC1UZXJtIEluZGV4IFJlcGxhY2VtZW50KSBhY2Nlc3MgbWV0aG9k IGlzIGludHJvZHVjZWQsIGludGVuZGVkIHNvbGVseSBmb3Igc2hvcnQtbGl2ZWQsIGF1eGlsaWFy eSB1c2FnZQoKU1RJUiBmdW5jdGlvbnMgYXJlIGRlc2lnbmVkIGFzIGFuIGVwaGVtZXJhbCBoZWxw ZXIgZHVyaW5nIGNvbmN1cnJlbnQgaW5kZXggYnVpbGRzLCB0ZW1wb3JhcmlseSBzdG9yaW5nIFRJ RHMgd2l0aG91dCBwcm92aWRpbmcgdGhlIGZ1bGwgZmVhdHVyZXMgb2YgYSB0eXBpY2FsIGFjY2Vz cyBtZXRob2QuIEFzIHN1Y2gsIGl0IHJhaXNlcyB3YXJuaW5ncyBvciBlcnJvcnMgd2hlbiBhY2Nl c3NlZCBvdXRzaWRlIGl0cyBzcGVjaWFsaXplZCB1c2FnZSBwYXRoLgoKUGxhbm5lZCB0byBiZSB1 c2VkIGluIGZvbGxvd2luZyBjb21taXRzLgotLS0KIGNvbnRyaWIvcGdzdGF0dHVwbGUvcGdzdGF0 dHVwbGUuYyAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvYWNjZXNzL01ha2VmaWxlICAgICAg ICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMgICAg IHwgICAyICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9tZXNvbi5idWlsZCAgICAgICAgICAgfCAgIDEg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvTWFrZWZpbGUgICAgICAgICB8ICAxOCArCiBzcmMv YmFja2VuZC9hY2Nlc3Mvc3Rpci9tZXNvbi5idWlsZCAgICAgIHwgICA1ICsKIHNyYy9iYWNrZW5k L2FjY2Vzcy9zdGlyL3N0aXIuYyAgICAgICAgICAgfCA1NjcgKysrKysrKysrKysrKysrKysrKysr KysKIHNyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyAgICAgICAgICAgICAgfCAgIDEgKwogc3Jj L2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5jICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2Vu ZC9jb21tYW5kcy9hbmFseXplLmMgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2NvbW1h bmRzL3ZhY3V1bXBhcmFsbGVsLmMgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1 bmNzLmMgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaCAgICAg ICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxvcHRpb25zLmggICAgICAg ICAgfCAgIDMgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9zdGlyLmggICAgICAgICAgICAgICAgfCAx MTAgKysrKysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYW0uZGF0ICAgICAgICAgICAgfCAgIDMg Kwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGNsYXNzLmRhdCAgICAgICB8ICAgNCArCiBzcmMv aW5jbHVkZS9jYXRhbG9nL3BnX29wZmFtaWx5LmRhdCAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvbm9kZXMv ZXhlY25vZGVzLmggICAgICAgICAgICB8ICAgNyArLQogc3JjL2luY2x1ZGUvdXRpbHMvaW5kZXhf c2VsZnVuY3MuaCAgICAgICB8ICAgOCArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FtdXRp bHMub3V0ICAgIHwgICA4ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29wcl9zYW5pdHku b3V0IHwgICA3ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0ICAgICAgIHwg IDI0ICstCiAyNCBmaWxlcyBjaGFuZ2VkLCA3NjUgaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvTWFrZWZpbGUK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9tZXNvbi5idWlsZAog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2FjY2Vzcy9zdGlyL3N0aXIuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2FjY2Vzcy9zdGlyLmgKCmRpZmYgLS1naXQgYS9jb250 cmliL3Bnc3RhdHR1cGxlL3Bnc3RhdHR1cGxlLmMgYi9jb250cmliL3Bnc3RhdHR1cGxlL3Bnc3Rh dHR1cGxlLmMKaW5kZXggNmE3ZjhjYjRhN2MuLjViNTk4NGUzYWEyIDEwMDY0NAotLS0gYS9jb250 cmliL3Bnc3RhdHR1cGxlL3Bnc3RhdHR1cGxlLmMKKysrIGIvY29udHJpYi9wZ3N0YXR0dXBsZS9w Z3N0YXR0dXBsZS5jCkBAIC0yODUsNiArMjg1LDkgQEAgcGdzdGF0X3JlbGF0aW9uKFJlbGF0aW9u IHJlbCwgRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCiAJCQljYXNlIFNQR0lTVF9BTV9PSUQ6CiAJ CQkJZXJyID0gInNwZ2lzdCBpbmRleCI7CiAJCQkJYnJlYWs7CisJCQljYXNlIFNUSVJfQU1fT0lE OgorCQkJCWVyciA9ICJzdGlyIGluZGV4IjsKKwkJCQlicmVhazsKIAkJCWNhc2UgQlJJTl9BTV9P SUQ6CiAJCQkJZXJyID0gImJyaW4gaW5kZXgiOwogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYWNjZXNzL01ha2VmaWxlCmlu ZGV4IGU4OGQ3MmVhMDM5Li5lYmJjZmE5MDcxNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9NYWtlZmlsZQpAQCAtMTksNiAr MTksNyBAQCBTVUJESVJTCSAgICA9IFwKIAluYnRyZWUgXAogCXJtZ3JkZXNjIFwKIAlzcGdpc3Qg XAorCXN0aXIgXAogCXNlcXVlbmNlIFwKIAl0YWJsZSBcCiAJdGFibGVzYW1wbGUgXApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCmluZGV4IDM5Mzk1YWVkMGQ1Li5hNmFjODkzNjBmYyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYwpAQCAtMzAyNCw2ICszMDI0LDcgQEAg bGF6eV92YWN1dW1fb25lX2luZGV4KFJlbGF0aW9uIGluZHJlbCwgSW5kZXhCdWxrRGVsZXRlUmVz dWx0ICppc3RhdCwKIAlpdmluZm8ubWVzc2FnZV9sZXZlbCA9IERFQlVHMjsKIAlpdmluZm8ubnVt X2hlYXBfdHVwbGVzID0gcmVsdHVwbGVzOwogCWl2aW5mby5zdHJhdGVneSA9IHZhY3JlbC0+YnN0 cmF0ZWd5OworCWl2aW5mby52YWxpZGF0ZV9pbmRleCA9IGZhbHNlOwogCiAJLyoKIAkgKiBVcGRh dGUgZXJyb3IgdHJhY2ViYWNrIGluZm9ybWF0aW9uLgpAQCAtMzA3NSw2ICszMDc2LDcgQEAgbGF6 eV9jbGVhbnVwX29uZV9pbmRleChSZWxhdGlvbiBpbmRyZWwsIEluZGV4QnVsa0RlbGV0ZVJlc3Vs dCAqaXN0YXQsCiAKIAlpdmluZm8ubnVtX2hlYXBfdHVwbGVzID0gcmVsdHVwbGVzOwogCWl2aW5m by5zdHJhdGVneSA9IHZhY3JlbC0+YnN0cmF0ZWd5OworCWl2aW5mby52YWxpZGF0ZV9pbmRleCA9 IGZhbHNlOwogCiAJLyoKIAkgKiBVcGRhdGUgZXJyb3IgdHJhY2ViYWNrIGluZm9ybWF0aW9uLgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQv YWNjZXNzL21lc29uLmJ1aWxkCmluZGV4IDVmZDE4ZGU3NGY5Li43MjE5YzY1ZjM2NSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9tZXNvbi5idWlsZApAQCAtMTEsNiArMTEsNyBAQCBzdWJkaXIoJ25idHJlZScpCiBzdWJk aXIoJ3JtZ3JkZXNjJykKIHN1YmRpcignc2VxdWVuY2UnKQogc3ViZGlyKCdzcGdpc3QnKQorc3Vi ZGlyKCdzdGlyJykKIHN1YmRpcigndGFibGUnKQogc3ViZGlyKCd0YWJsZXNhbXBsZScpCiBzdWJk aXIoJ3RyYW5zYW0nKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvTWFrZWZp bGUgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uODc4NWRhYjM3YmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvc3Rpci9NYWtlZmlsZQpAQCAtMCwwICsxLDE4IEBACisjLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIworIyBNYWtlZmlsZS0tCisjICAgIE1ha2VmaWxlIGZvciBhY2Nlc3Mvc3Rpcgor IworIyBJREVOVElGSUNBVElPTgorIyAgICBzcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9NYWtlZmls ZQorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3ViZGlyID0gc3JjL2JhY2tlbmQvYWNjZXNzL3N0 aXIKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9z cmMvTWFrZWZpbGUuZ2xvYmFsCisKK09CSlMgPSBcCisJc3Rpci5vCisKK2luY2x1ZGUgJCh0b3Bf c3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24ubWsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9zdGlyL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvbWVzb24uYnVp bGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRiN2FkMTUzNDZjCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvbWVzb24uYnVpbGQKQEAg LTAsMCArMSw1IEBACisjIENvcHlyaWdodCAoYykgMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKworYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAorCSdzdGlyLmMnLAor KQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvc3Rpci5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3N0aXIvc3Rpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi45MzI1OTBkOWNjYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9z dGlyL3N0aXIuYwpAQCAtMCwwICsxLDU2NyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICog c3Rpci5jCisgKgkgIEltcGxlbWVudGF0aW9uIG9mIFNob3J0LVRlcm0gSW5kZXggUmVwbGFjZW1l bnQuCisgKgorICogU1RJUiBpcyBhIHNwZWNpYWxpemVkIGFjY2VzcyBtZXRob2QgdHlwZSBkZXNp Z25lZCBmb3IgdGVtcG9yYXJ5IHN0b3JhZ2UKKyAqIG9mIFRJRCB2YWx1ZXMgZHVyaW5nIGNvbmN1 cnJlbnQgaW5kZXggYnVpbGQgb3BlcmF0aW9ucy4KKyAqCisgKiBUaGUgdHlwaWNhbCBsaWZlY3lj bGUgb2YgYSBTVElSIGluZGV4IGlzOgorICogMS4gY3JlYXRlZCBhcyBhbiBhdXhpbGlhcnkgaW5k ZXggZm9yIENJQy9SSUMKKyAqIDIuIGFjY2VwdHMgaW5zZXJ0cyBmb3IgYSBwZXJpb2QKKyAqIDMu IHN0aXJidWxrZGVsZXRlIGNhbGxlZCBkdXJpbmcgaW5kZXggdmFsaWRhdGlvbiBwaGFzZQorICog NC4gZ2V0cyBkcm9wcGVkCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDI2LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisg KgkgIHNyYy9iYWNrZW5kL2FjY2Vzcy9zdGlyL3N0aXIuYworICoKKyAqLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9hbXZhbGlk YXRlLmgiCisjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgorI2luY2x1ZGUgImFjY2Vz cy9zdGlyLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKKyNpbmNsdWRlICJjYXRhbG9n L2luZGV4LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbW9wLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19vcGNsYXNzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGZhbWlseS5oIgorI2luY2x1 ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUg InN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAidXRpbHMvY2F0Y2FjaGUuaCIKKyNpbmNsdWRl ICJ1dGlscy9mbWdycHJvdG9zLmgiCisjaW5jbHVkZSAidXRpbHMvaW5kZXhfc2VsZnVuY3MuaCIK KyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3JlZ3Byb2MuaCIK KyNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgorCisvKgorICogU3RpciBoYW5kbGVyIGZ1bmN0 aW9uOiByZXR1cm4gSW5kZXhBbVJvdXRpbmUgd2l0aCBhY2Nlc3MgbWV0aG9kIHBhcmFtZXRlcnMK KyAqIGFuZCBjYWxsYmFja3MuCisgKi8KK0RhdHVtCitzdGlyaGFuZGxlcihQR19GVU5DVElPTl9B UkdTKQoreworCUluZGV4QW1Sb3V0aW5lICphbXJvdXRpbmUgPSBtYWtlTm9kZShJbmRleEFtUm91 dGluZSk7CisKKwkvKiBTZXQgU1RJUi1zcGVjaWZpYyBzdHJhdGVneSBhbmQgcHJvY2VkdXJlIG51 bWJlcnMgKi8KKwlhbXJvdXRpbmUtPmFtc3RyYXRlZ2llcyA9IFNUSVJfTlNUUkFURUdJRVM7CisJ YW1yb3V0aW5lLT5hbXN1cHBvcnQgPSBTVElSX05QUk9DOworCWFtcm91dGluZS0+YW1vcHRzcHJv Y251bSA9IFNUSVJfT1BUSU9OU19QUk9DOworCisJLyogU1RJUiBkb2Vzbid0IHN1cHBvcnQgbW9z dCBpbmRleCBvcGVyYXRpb25zICovCisJYW1yb3V0aW5lLT5hbWNhbm9yZGVyID0gZmFsc2U7CisJ YW1yb3V0aW5lLT5hbWNhbm9yZGVyYnlvcCA9IGZhbHNlOworCWFtcm91dGluZS0+YW1jYW5iYWNr d2FyZCA9IGZhbHNlOworCWFtcm91dGluZS0+YW1jYW51bmlxdWUgPSBmYWxzZTsKKwlhbXJvdXRp bmUtPmFtY2FubXVsdGljb2wgPSB0cnVlOworCWFtcm91dGluZS0+YW1vcHRpb25hbGtleSA9IHRy dWU7CisJYW1yb3V0aW5lLT5hbXNlYXJjaGFycmF5ID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbXNl YXJjaG51bGxzID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbXN0b3JhZ2UgPSBmYWxzZTsKKwlhbXJv dXRpbmUtPmFtY2x1c3RlcmFibGUgPSBmYWxzZTsKKwlhbXJvdXRpbmUtPmFtcHJlZGxvY2tzID0g ZmFsc2U7CisJYW1yb3V0aW5lLT5hbWNhbnBhcmFsbGVsID0gZmFsc2U7CisJYW1yb3V0aW5lLT5h bWNhbmJ1aWxkcGFyYWxsZWwgPSBmYWxzZTsKKwlhbXJvdXRpbmUtPmFtY2FuaW5jbHVkZSA9IHRy dWU7CisJYW1yb3V0aW5lLT5hbXVzZW1haW50ZW5hbmNld29ya21lbSA9IGZhbHNlOworCWFtcm91 dGluZS0+YW1wYXJhbGxlbHZhY3V1bW9wdGlvbnMgPSBWQUNVVU1fT1BUSU9OX05PX1BBUkFMTEVM OworCWFtcm91dGluZS0+YW1rZXl0eXBlID0gSW52YWxpZE9pZDsKKworCS8qIFNldCB1cCBmdW5j dGlvbiBjYWxsYmFja3MgKi8KKwlhbXJvdXRpbmUtPmFtYnVpbGQgPSBzdGlyYnVpbGQ7CisJYW1y b3V0aW5lLT5hbWJ1aWxkZW1wdHkgPSBzdGlyYnVpbGRlbXB0eTsKKwlhbXJvdXRpbmUtPmFtaW5z ZXJ0ID0gc3Rpcmluc2VydDsKKwlhbXJvdXRpbmUtPmFtaW5zZXJ0Y2xlYW51cCA9IE5VTEw7CisJ YW1yb3V0aW5lLT5hbWJ1bGtkZWxldGUgPSBzdGlyYnVsa2RlbGV0ZTsKKwlhbXJvdXRpbmUtPmFt dmFjdXVtY2xlYW51cCA9IHN0aXJ2YWN1dW1jbGVhbnVwOworCWFtcm91dGluZS0+YW1jYW5yZXR1 cm4gPSBOVUxMOworCWFtcm91dGluZS0+YW1jb3N0ZXN0aW1hdGUgPSBzdGlyY29zdGVzdGltYXRl OworCWFtcm91dGluZS0+YW1vcHRpb25zID0gc3Rpcm9wdGlvbnM7CisJYW1yb3V0aW5lLT5hbXBy b3BlcnR5ID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtYnVpbGRwaGFzZW5hbWUgPSBOVUxMOworCWFt cm91dGluZS0+YW12YWxpZGF0ZSA9IHN0aXJ2YWxpZGF0ZTsKKwlhbXJvdXRpbmUtPmFtYWRqdXN0 bWVtYmVycyA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbWJlZ2luc2NhbiA9IHN0aXJiZWdpbnNjYW47 CisJYW1yb3V0aW5lLT5hbXJlc2NhbiA9IHN0aXJyZXNjYW47CisJYW1yb3V0aW5lLT5hbWdldHR1 cGxlID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gTlVMTDsKKwlhbXJvdXRpbmUt PmFtZW5kc2NhbiA9IHN0aXJlbmRzY2FuOworCWFtcm91dGluZS0+YW1tYXJrcG9zID0gTlVMTDsK KwlhbXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFtcm91dGluZS0+YW1lc3RpbWF0ZXBh cmFsbGVsc2NhbiA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxM OworCWFtcm91dGluZS0+YW1wYXJhbGxlbHJlc2NhbiA9IE5VTEw7CisKKwlQR19SRVRVUk5fUE9J TlRFUihhbXJvdXRpbmUpOworfQorCisvKgorICogVmFsaWRhdGVzIG9wZXJhdG9yIGNsYXNzIGZv ciBTVElSIGluZGV4LgorICoKKyAqIFNUSVIgaXMgbm90IGEgcmVhbCBpbmRleCwgc28gdmFsaWRh dGUgbWF5IGJlIHNraXBwZWQuCisgKiBCdXQgd2UgZG8gaXQganVzdCBmb3IgY29uc2lzdGVuY3ku CisgKi8KK2Jvb2wKK3N0aXJ2YWxpZGF0ZShPaWQgb3BjbGFzc29pZCkKK3sKKwlib29sIHJlc3Vs dCA9IHRydWU7CisJSGVhcFR1cGxlIGNsYXNzdHVwOworCUZvcm1fcGdfb3BjbGFzcyBjbGFzc2Zv cm07CisJT2lkIG9wZmFtaWx5b2lkOworCUhlYXBUdXBsZSBmYW1pbHl0dXA7CisJRm9ybV9wZ19v cGZhbWlseSBmYW1pbHlmb3JtOworCWNoYXIgKm9wZmFtaWx5bmFtZTsKKwlDYXRDTGlzdCAqb3By bGlzdDsKKwlpbnQgaTsKKworCS8qIEZldGNoIG9wY2xhc3MgaW5mb3JtYXRpb24gKi8KKwljbGFz c3R1cCA9IFNlYXJjaFN5c0NhY2hlMShDTEFPSUQsIE9iamVjdElkR2V0RGF0dW0ob3BjbGFzc29p ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjbGFzc3R1cCkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBjbGFzcyAldSIsIG9wY2xhc3NvaWQpOwor CWNsYXNzZm9ybSA9IChGb3JtX3BnX29wY2xhc3MpIEdFVFNUUlVDVChjbGFzc3R1cCk7CisKKwlv cGZhbWlseW9pZCA9IGNsYXNzZm9ybS0+b3BjZmFtaWx5OworCisJLyogRmV0Y2ggb3BmYW1pbHkg aW5mb3JtYXRpb24gKi8KKwlmYW1pbHl0dXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQs IE9iamVjdElkR2V0RGF0dW0ob3BmYW1pbHlvaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo ZmFtaWx5dHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJh dG9yIGZhbWlseSAldSIsIG9wZmFtaWx5b2lkKTsKKwlmYW1pbHlmb3JtID0gKEZvcm1fcGdfb3Bm YW1pbHkpIEdFVFNUUlVDVChmYW1pbHl0dXApOworCisJb3BmYW1pbHluYW1lID0gTmFtZVN0cihm YW1pbHlmb3JtLT5vcGZuYW1lKTsKKworCS8qIEZldGNoIGFsbCBvcGVyYXRvcnMgYW5kIHN1cHBv cnQgZnVuY3Rpb25zIG9mIHRoZSBvcGZhbWlseSAqLworCW9wcmxpc3QgPSBTZWFyY2hTeXNDYWNo ZUxpc3QxKEFNT1BTVFJBVEVHWSwgT2JqZWN0SWRHZXREYXR1bShvcGZhbWlseW9pZCkpOworCisJ LyogQ2hlY2sgaW5kaXZpZHVhbCBvcGVyYXRvcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgb3BybGlz dC0+bl9tZW1iZXJzOyBpKyspCisJeworCQlIZWFwVHVwbGUgb3BydHVwID0gJm9wcmxpc3QtPm1l bWJlcnNbaV0tPnR1cGxlOworCQlGb3JtX3BnX2Ftb3Agb3ByZm9ybSA9IChGb3JtX3BnX2Ftb3Ap IEdFVFNUUlVDVChvcHJ0dXApOworCisJCS8qIENoZWNrIGl0J3MgYWxsb3dlZCBzdHJhdGVneSBm b3Igc3RpciAqLworCQlpZiAob3ByZm9ybS0+YW1vcHN0cmF0ZWd5IDwgMSB8fAorCQkJb3ByZm9y bS0+YW1vcHN0cmF0ZWd5ID4gU1RJUl9OU1RSQVRFR0lFUykKKwkJeworCQkJZXJlcG9ydChJTkZP LAorCQkJICAgICAgICAoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfT0JKRUNUX0RFRklOSVRJT04p LAorCQkJCSAgICAgICAgZXJybXNnKCJzdGlyIG9wZmFtaWx5ICVzIGNvbnRhaW5zIG9wZXJhdG9y ICVzIHdpdGggaW52YWxpZCBzdHJhdGVneSBudW1iZXIgJWQiLAorCQkJCQkgICAgICAgIG9wZmFt aWx5bmFtZSwKKwkJCQkJICAgICAgICBmb3JtYXRfb3BlcmF0b3Iob3ByZm9ybS0+YW1vcG9wciks CisJCQkJCSAgICAgICAgb3ByZm9ybS0+YW1vcHN0cmF0ZWd5KSkpOworCQkJcmVzdWx0ID0gZmFs c2U7CisJCX0KKworCQkvKiBzdGlyIGRvZXNuJ3Qgc3VwcG9ydCBPUkRFUiBCWSBvcGVyYXRvcnMg Ki8KKwkJaWYgKG9wcmZvcm0tPmFtb3BwdXJwb3NlICE9IEFNT1BfU0VBUkNIIHx8CisJCQlPaWRJ c1ZhbGlkKG9wcmZvcm0tPmFtb3Bzb3J0ZmFtaWx5KSkKKwkJeworCQkJZXJlcG9ydChJTkZPLAor CQkJICAgICAgICAoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfT0JKRUNUX0RFRklOSVRJT04pLAor CQkJCSAgICAgICAgZXJybXNnKCJzdGlyIG9wZmFtaWx5ICVzIGNvbnRhaW5zIGludmFsaWQgT1JE RVIgQlkgc3BlY2lmaWNhdGlvbiBmb3Igb3BlcmF0b3IgJXMiLAorCQkJCQkgICAgICAgIG9wZmFt aWx5bmFtZSwKKwkJCQkJICAgICAgICBmb3JtYXRfb3BlcmF0b3Iob3ByZm9ybS0+YW1vcG9wcikp KSk7CisJCQlyZXN1bHQgPSBmYWxzZTsKKwkJfQorCisJCS8qIENoZWNrIG9wZXJhdG9yIHNpZ25h dHVyZSAtLS0gc2FtZSBmb3IgYWxsIHN0aXIgc3RyYXRlZ2llcyAqLworCQlpZiAoIWNoZWNrX2Ft b3Bfc2lnbmF0dXJlKG9wcmZvcm0tPmFtb3BvcHIsIEJPT0xPSUQsCisJCSAgICAgICAgICAgICAg ICAgICAgICAgICAgb3ByZm9ybS0+YW1vcGxlZnR0eXBlLAorCQkgICAgICAgICAgICAgICAgICAg ICAgICAgIG9wcmZvcm0tPmFtb3ByaWdodHR5cGUpKQorCQl7CisJCQllcmVwb3J0KElORk8sCisJ CQkgICAgICAgIChlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9PQkpFQ1RfREVGSU5JVElPTiksCisJ CQkJICAgICAgICBlcnJtc2coInN0aXIgb3BmYW1pbHkgJXMgY29udGFpbnMgb3BlcmF0b3IgJXMg d2l0aCB3cm9uZyBzaWduYXR1cmUiLAorCQkJCQkgICAgICAgIG9wZmFtaWx5bmFtZSwKKwkJCQkJ ICAgICAgICBmb3JtYXRfb3BlcmF0b3Iob3ByZm9ybS0+YW1vcG9wcikpKSk7CisJCQlyZXN1bHQg PSBmYWxzZTsKKwkJfQorCX0KKworCVJlbGVhc2VDYXRDYWNoZUxpc3Qob3BybGlzdCk7CisJUmVs ZWFzZVN5c0NhY2hlKGZhbWlseXR1cCk7CisJUmVsZWFzZVN5c0NhY2hlKGNsYXNzdHVwKTsKKwor CXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIG1ldGEtcGFnZSBvZiBhIFNU SVIgaW5kZXguCisgKiBUaGUgc2tpcEluc2VydHMgZmxhZyBkZXRlcm1pbmVzIGlmIG5ldyBpbnNl cnRzIHdpbGwgYmUgYWNjZXB0ZWQgb3Igc2tpcHBlZC4KKyAqLwordm9pZAorU3RpckZpbGxNZXRh cGFnZShSZWxhdGlvbiBpbmRleCwgUGFnZSBtZXRhUGFnZSwgYm9vbCBza2lwSW5zZXJ0cykKK3sK KwlTdGlyTWV0YVBhZ2VEYXRhICptZXRhZGF0YTsKKworCVN0aXJJbml0UGFnZShtZXRhUGFnZSwg U1RJUl9NRVRBKTsKKwltZXRhZGF0YSA9IFN0aXJQYWdlR2V0TWV0YShtZXRhUGFnZSk7CisJbWVt c2V0KG1ldGFkYXRhLCAwLCBzaXplb2YoU3Rpck1ldGFQYWdlRGF0YSkpOworCW1ldGFkYXRhLT5t YWdpY051bWJlciA9IFNUSVJfTUFHSUNfTlVNQkVSOworCW1ldGFkYXRhLT5za2lwSW5zZXJ0cyA9 IHNraXBJbnNlcnRzOworCSgoUGFnZUhlYWRlcikgbWV0YVBhZ2UpLT5wZF9sb3dlciA9ICgoY2hh ciAqKSBtZXRhZGF0YSArIHNpemVvZihTdGlyTWV0YVBhZ2VEYXRhKSkgLSAoY2hhciAqKSBtZXRh UGFnZTsKK30KKworLyoKKyAqIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgbWV0YXBhZ2UgZm9y IGEgU1RJUiBpbmRleC4KKyAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBpbmRleCBjcmVhdGlvbi4K KyAqLwordm9pZAorU3RpckluaXRNZXRhcGFnZShSZWxhdGlvbiBpbmRleCwgRm9ya051bWJlciBm b3JrbnVtKQoreworCUJ1ZmZlciBtZXRhQnVmZmVyOworCVBhZ2UgbWV0YVBhZ2U7CisKKwlBc3Nl cnQoIVJlbGF0aW9uTmVlZHNXQUwoaW5kZXgpKTsKKwkvKgorCSAqIE1ha2UgYSBuZXcgcGFnZTsg c2luY2UgaXQgaXMgdGhlIGZpcnN0IHBhZ2UgaXQgc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aAor CSAqIGJsb2NrIG51bWJlciAwIChTVElSX01FVEFQQUdFX0JMS05PKS4gIE5vIG5lZWQgdG8gaG9s ZCB0aGUgZXh0ZW5zaW9uCisJICogbG9jayBiZWNhdXNlIHRoZXJlIGNhbm5vdCBiZSBjb25jdXJy ZW50IGluc2VydGVycyB5ZXQuCisJICovCisJbWV0YUJ1ZmZlciA9IFJlYWRCdWZmZXJFeHRlbmRl ZChpbmRleCwgZm9ya251bSwgUF9ORVcsIFJCTV9OT1JNQUwsIE5VTEwpOworCUxvY2tCdWZmZXIo bWV0YUJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKKwlBc3NlcnQoQnVmZmVyR2V0Qmxv Y2tOdW1iZXIobWV0YUJ1ZmZlcikgPT0gU1RJUl9NRVRBUEFHRV9CTEtOTyk7CisKKwltZXRhUGFn ZSA9IEJ1ZmZlckdldFBhZ2UobWV0YUJ1ZmZlcik7CisJU3RpckZpbGxNZXRhcGFnZShpbmRleCwg bWV0YVBhZ2UsIGZvcmtudW0gPT0gSU5JVF9GT1JLTlVNKTsKKworCU1hcmtCdWZmZXJEaXJ0eSht ZXRhQnVmZmVyKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKG1ldGFCdWZmZXIpOworfQorCisvKgor ICogSW5pdGlhbGl6ZSBhbnkgcGFnZSBvZiBhIHN0aXIgaW5kZXguCisgKi8KK3ZvaWQKK1N0aXJJ bml0UGFnZShQYWdlIHBhZ2UsIHVpbnQxNiBmbGFncykKK3sKKwlTdGlyUGFnZU9wYXF1ZSBvcGFx dWU7CisKKwlQYWdlSW5pdChwYWdlLCBCTENLU1osIHNpemVvZihTdGlyUGFnZU9wYXF1ZURhdGEp KTsKKworCW9wYXF1ZSA9IFN0aXJQYWdlR2V0T3BhcXVlKHBhZ2UpOworCW9wYXF1ZS0+ZmxhZ3Mg PSBmbGFnczsKKwlvcGFxdWUtPnN0aXJfcGFnZV9pZCA9IFNUSVJfUEFHRV9JRDsKK30KKworLyoK KyAqIEFkZCBhIHR1cGxlIHRvIGEgU1RJUiBwYWdlLiBSZXR1cm5zIGZhbHNlIGlmIHRoZSB0dXBs ZSBkb2Vzbid0IGZpdC4KKyAqIFRoZSB0dXBsZSBpcyBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBw YWdlLgorICovCitzdGF0aWMgYm9vbAorU3RpclBhZ2VBZGRJdGVtKFBhZ2UgcGFnZSwgU3RpclR1 cGxlICp0dXBsZSkKK3sKKwlTdGlyVHVwbGUgKml0dXA7CisJU3RpclBhZ2VPcGFxdWUgb3BhcXVl OworCWNoYXIgKnB0cjsKKworCS8qIFdlIHNob3VsZG4ndCBiZSBwb2ludGVkIHRvIGFuIGludmFs aWQgcGFnZSAqLworCUFzc2VydCghUGFnZUlzTmV3KHBhZ2UpKTsKKworCS8qIERvZXMgdGhlIG5l dyB0dXBsZSBmaXQgb24gdGhlIHBhZ2U/ICovCisJaWYgKFN0aXJQYWdlR2V0RnJlZVNwYWNlKHBh Z2UpIDwgc2l6ZW9mKFN0aXJUdXBsZSkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIENvcHkgYSBu ZXcgdHVwbGUgdG8gdGhlIGVuZCBvZiB0aGUgcGFnZSAqLworCW9wYXF1ZSA9IFN0aXJQYWdlR2V0 T3BhcXVlKHBhZ2UpOworCWl0dXAgPSBTdGlyUGFnZUdldFR1cGxlKHBhZ2UsIG9wYXF1ZS0+bWF4 b2ZmICsgMSk7CisJbWVtY3B5KGl0dXAsIHR1cGxlLCBzaXplb2YoU3RpclR1cGxlKSk7CisKKwkv KiBBZGp1c3QgbWF4b2ZmIGFuZCBwZF9sb3dlciAqLworCW9wYXF1ZS0+bWF4b2ZmKys7CisJcHRy ID0gKGNoYXIgKikgU3RpclBhZ2VHZXRUdXBsZShwYWdlLCBvcGFxdWUtPm1heG9mZiArIDEpOwor CSgoUGFnZUhlYWRlcikgcGFnZSktPnBkX2xvd2VyID0gcHRyIC0gcGFnZTsKKworCS8qIEFzc2Vy dCB3ZSBkaWRuJ3Qgb3ZlcnJ1biBhdmFpbGFibGUgc3BhY2UgKi8KKwlBc3NlcnQoKChQYWdlSGVh ZGVyKSBwYWdlKS0+cGRfbG93ZXIgPD0gKChQYWdlSGVhZGVyKSBwYWdlKS0+cGRfdXBwZXIpOwor CXJldHVybiB0cnVlOworfQorCisvKgorICogSW5zZXJ0IGEgbmV3IHR1cGxlIGludG8gYSBTVElS IGluZGV4LgorICovCitib29sCitzdGlyaW5zZXJ0KFJlbGF0aW9uIGluZGV4LCBEYXR1bSAqdmFs dWVzLCBib29sICppc251bGwsCisJCSAgSXRlbVBvaW50ZXIgaHRfY3RpZCwgUmVsYXRpb24gaGVh cFJlbCwKKwkJICBJbmRleFVuaXF1ZUNoZWNrIGNoZWNrVW5pcXVlLAorCQkgIGJvb2wgaW5kZXhV bmNoYW5nZWQsCisJCSAgc3RydWN0IEluZGV4SW5mbyAqaW5kZXhJbmZvKQoreworCVN0aXJUdXBs ZSBpdHVwOworCVN0aXJNZXRhUGFnZURhdGEgKm1ldGFEYXRhOworCUJ1ZmZlciBidWZmZXIsCisJ CQltZXRhQnVmZmVyOworCVBhZ2UgcGFnZTsKKwlCbG9ja051bWJlciBibGtObzsKKworCWl0dXAu aGVhcFB0ciA9ICpodF9jdGlkOworCisJQXNzZXJ0KCFSZWxhdGlvbk5lZWRzV0FMKGluZGV4KSk7 CisJbWV0YUJ1ZmZlciA9IFJlYWRCdWZmZXIoaW5kZXgsIFNUSVJfTUVUQVBBR0VfQkxLTk8pOwor CisJZm9yICg7OykKKwl7CisJCUxvY2tCdWZmZXIobWV0YUJ1ZmZlciwgQlVGRkVSX0xPQ0tfU0hB UkUpOworCQltZXRhRGF0YSA9IFN0aXJQYWdlR2V0TWV0YShCdWZmZXJHZXRQYWdlKG1ldGFCdWZm ZXIpKTsKKwkJLyogQ2hlY2sgaWYgaW5zZXJ0cyBhcmUgYWxsb3dlZCAqLworCQlpZiAobWV0YURh dGEtPnNraXBJbnNlcnRzKQorCQl7CisJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKG1ldGFCdWZmZXIp OworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCWJsa05vID0gbWV0YURhdGEtPmxhc3RCbGtObzsK KwkJLyogRG9uJ3QgaG9sZCBtZXRhYnVmZmVyIGxvY2sgd2hpbGUgZG9pbmcgaW5zZXJ0ICovCisJ CUxvY2tCdWZmZXIobWV0YUJ1ZmZlciwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKworCQlpZiAoYmxr Tm8gPiAwKQorCQl7CisJCQlidWZmZXIgPSBSZWFkQnVmZmVyKGluZGV4LCBibGtObyk7CisJCQlM b2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKKworCQkJcGFnZSA9IEJ1 ZmZlckdldFBhZ2UoYnVmZmVyKTsKKworCQkJQXNzZXJ0KCFQYWdlSXNOZXcocGFnZSkpOworCisJ CQkvKiBUcnkgdG8gYWRkIHR1cGxlIHRvIHRoZSBleGlzdGluZyBwYWdlICovCisJCQlpZiAoU3Rp clBhZ2VBZGRJdGVtKHBhZ2UsICZpdHVwKSkKKwkJCXsKKwkJCQkvKiBTdWNjZXNzISAgQXBwbHkg dGhlIGNoYW5nZSwgY2xlYW4gdXAsIGFuZCBleGl0ICovCisJCQkJTWFya0J1ZmZlckRpcnR5KGJ1 ZmZlcik7CisKKwkJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJCQkJUmVsZWFzZUJ1 ZmZlcihtZXRhQnVmZmVyKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJCVVubG9ja1Jl bGVhc2VCdWZmZXIoYnVmZmVyKTsKKwkJfQorCisJCS8qIE5lZWQgdG8gYWRkIGEgbmV3IHBhZ2Ug LSBnZXQgZXhjbHVzaXZlIGxvY2sgb24gbWV0YS1wYWdlICovCisJCUxvY2tCdWZmZXIobWV0YUJ1 ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKKworCQltZXRhRGF0YSA9IFN0aXJQYWdlR2V0 TWV0YShCdWZmZXJHZXRQYWdlKG1ldGFCdWZmZXIpKTsKKworCQkvKiBSZS1jaGVjayBhZnRlciBh Y3F1aXJpbmcgZXhjbHVzaXZlIGxvY2sgKi8KKwkJaWYgKG1ldGFEYXRhLT5za2lwSW5zZXJ0cykK KwkJeworCQkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihtZXRhQnVmZmVyKTsKKwkJCXJldHVybiBmYWxz ZTsKKwkJfQorCisJCS8qIENoZWNrIGlmIGFub3RoZXIgYmFja2VuZCBhbHJlYWR5IGV4dGVuZGVk IHRoZSBpbmRleCAqLworCQlpZiAoYmxrTm8gIT0gbWV0YURhdGEtPmxhc3RCbGtObykKKwkJewor CQkJQXNzZXJ0KGJsa05vIDwgbWV0YURhdGEtPmxhc3RCbGtObyk7CisJCQkvKiBTb21lb25lIGVs c2UgaW5zZXJ0ZWQgdGhlIG5ldyBwYWdlIGludG8gdGhlIGluZGV4LCBsZXQncyB0cnkgYWdhaW4g Ki8KKwkJCUxvY2tCdWZmZXIobWV0YUJ1ZmZlciwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwkJCWNv bnRpbnVlOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogTXVzdCBleHRlbmQgdGhlIGZpbGUgKi8K KwkJCWJ1ZmZlciA9IEV4dGVuZEJ1ZmZlcmVkUmVsKEJNUl9SRUwoaW5kZXgpLCBNQUlOX0ZPUktO VU0sIE5VTEwsCisJCQkJCQkJCQkgICBFQl9MT0NLX0ZJUlNUKTsKKwkJCXBhZ2UgPSBCdWZmZXJH ZXRQYWdlKGJ1ZmZlcik7CisKKwkJCVN0aXJJbml0UGFnZShwYWdlLCAwKTsKKworCQkJaWYgKCFT dGlyUGFnZUFkZEl0ZW0ocGFnZSwgJml0dXApKQorCQkJeworCQkJCS8qIFdlIHNob3VsZG4ndCBi ZSBoZXJlIHNpbmNlIHdlJ3JlIGluc2VydGluZyB0byBhbiBlbXB0eSBwYWdlICovCisJCQkJZWxv ZyhFUlJPUiwgImNvdWxkIG5vdCBhZGQgbmV3IHN0aXIgdHVwbGUgdG8gZW1wdHkgcGFnZSIpOwor CQkJfQorCisJCQkvKiBVcGRhdGUgbWV0YS1wYWdlIHdpdGggbmV3IGxhc3QgYmxvY2sgbnVtYmVy ICovCisJCQltZXRhRGF0YS0+bGFzdEJsa05vID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmZmVy KTsKKworCQkJTWFya0J1ZmZlckRpcnR5KG1ldGFCdWZmZXIpOworCQkJTWFya0J1ZmZlckRpcnR5 KGJ1ZmZlcik7CisKKwkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKKwkJCVVubG9ja1Jl bGVhc2VCdWZmZXIobWV0YUJ1ZmZlcik7CisKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KK30K KworLyoKKyAqIFNUSVIgZG9lc24ndCBzdXBwb3J0IHNjYW5zIC0gdGhlc2UgZnVuY3Rpb25zIGFs bCBlcnJvciBvdXQKKyAqLworSW5kZXhTY2FuRGVzYworc3RpcmJlZ2luc2NhbihSZWxhdGlvbiBy LCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCit7CisJZXJlcG9ydChFUlJPUiwgKGVycmNvZGUo RVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLCBlcnJtc2coIlwiJXNcIiBpcyBub3QgaW1w bGVtZW50ZWQiLCBfX2Z1bmNfXykpKTsKK30KKwordm9pZAorc3RpcnJlc2NhbihJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKKwkJICBTY2FuS2V5IG9y ZGVyYnlzLCBpbnQgbm9yZGVyYnlzKQoreworCWVyZXBvcnQoRVJST1IsIChlcnJjb2RlKEVSUkNP REVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwgZXJybXNnKCJcIiVzXCIgaXMgbm90IGltcGxlbWVu dGVkIiwgX19mdW5jX18pKSk7Cit9CisKK3ZvaWQgc3RpcmVuZHNjYW4oSW5kZXhTY2FuRGVzYyBz Y2FuKQoreworCWVyZXBvcnQoRVJST1IsIChlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQ UE9SVEVEKSwgZXJybXNnKCJcIiVzXCIgaXMgbm90IGltcGxlbWVudGVkIiwgX19mdW5jX18pKSk7 Cit9CisKKy8qCisgKiBCdWlsZCBhIFNUSVIgaW5kZXggLSBvbmx5IGFsbG93ZWQgZm9yIGF1eGls aWFyeSBpbmRleGVzLgorICogSnVzdCBpbml0aWFsaXplcyB0aGUgbWV0YS1wYWdlIHdpdGhvdXQg YW55IGhlYXAgc2NhbnMuCisgKi8KK0luZGV4QnVpbGRSZXN1bHQgKgorc3RpcmJ1aWxkKFJlbGF0 aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4LAorCQkJCQkJICAgc3RydWN0IEluZGV4SW5mbyAqaW5k ZXhJbmZvKQoreworCUluZGV4QnVpbGRSZXN1bHQgKnJlc3VsdDsKKworCWlmICghaW5kZXhJbmZv LT5paV9BdXhpbGlhcnkpCisJCWVyZXBvcnQoRVJST1IsIChlcnJjb2RlKEVSUkNPREVfRkVBVFVS RV9OT1RfU1VQUE9SVEVEKSwgZXJybXNnKCJCdWlsZGluZyBTVElSIGluZGV4ZXMgaXMgbm90IHN1 cHBvcnRlZCIpKSk7CisKKwlTdGlySW5pdE1ldGFwYWdlKGluZGV4LCBNQUlOX0ZPUktOVU0pOwor CisJcmVzdWx0ID0gKEluZGV4QnVpbGRSZXN1bHQgKikgcGFsbG9jKHNpemVvZihJbmRleEJ1aWxk UmVzdWx0KSk7CisJcmVzdWx0LT5oZWFwX3R1cGxlcyA9IDA7CisJcmVzdWx0LT5pbmRleF90dXBs ZXMgPSAwOworCXJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgc3RpcmJ1aWxkZW1wdHkoUmVsYXRp b24gaW5kZXgpCit7CisJU3RpckluaXRNZXRhcGFnZShpbmRleCwgSU5JVF9GT1JLTlVNKTsKK30K KworSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoKK3N0aXJidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5m byAqaW5mbywKKwkJCQkJCQkJCSBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKnN0YXRzLAorCQkJCQkJ CQkJIEluZGV4QnVsa0RlbGV0ZUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkJCQkJIHZvaWQgKmNh bGxiYWNrX3N0YXRlKQoreworCVJlbGF0aW9uIGluZGV4ID0gaW5mby0+aW5kZXg7CisJQmxvY2tO dW1iZXIgYmxrbm8sIG5wYWdlczsKKwlCdWZmZXIgYnVmZmVyOworCVBhZ2UgcGFnZTsKKworCS8q CisJICogRm9yIG5vcm1hbCBWQUNVVU0sIG1hcmsgdG8gc2tpcCBpbnNlcnRzIGFuZCB3YXJuIGFi b3V0IGFuIGluZGV4IGRyb3AKKwkgKiBuZWVkZWQuICBJbiBwcmFjdGljZSB0aGlzIHBhdGggaXMg bm90IHJlYWNoYWJsZSBkdXJpbmcgQ1JFQVRFIElOREVYCisJICogQ09OQ1VSUkVOVExZIGJlY2F1 c2UgdGhlIHRhYmxlLWxldmVsIGxvY2tzIGhlbGQgYnkgQ0lDIHByZXZlbnQgY29uY3VycmVudAor CSAqIFZBQ1VVTSBmcm9tIG9wZW5pbmcgdGhlIGF1eGlsaWFyeSBpbmRleC4gIEl0IGNhbiBvbmx5 IGJlIHJlYWNoZWQgaWYgYQorCSAqIGxlZnRvdmVyIFNUSVIgaW5kZXggc29tZWhvdyBzdXJ2aXZl cyBhZnRlciBhIGZhaWxlZCBDSUMgYW5kIGEgbGF0ZXIKKwkgKiBWQUNVVU0gZW5jb3VudGVycyBp dC4KKwkgKi8KKwlpZiAoIWluZm8tPnZhbGlkYXRlX2luZGV4KQorCXsKKwkJU3Rpck1hcmtBc1Nr aXBJbnNlcnRzKGluZGV4KTsKKworCQllcmVwb3J0KFdBUk5JTkcsIChlcnJjb2RlKEVSUkNPREVf RkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQllcnJtc2coIlwiJXNcIiBpcyBub3QgaW1wbGVt ZW50ZWQsIHNlZW1zIGxpa2UgdGhpcyBpbmRleCBuZWVkcyB0byBiZSBkcm9wcGVkIiwgX19mdW5j X18pKSk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmIChzdGF0cyA9PSBOVUxMKQorCQlzdGF0 cyA9IChJbmRleEJ1bGtEZWxldGVSZXN1bHQgKikgcGFsbG9jMChzaXplb2YoSW5kZXhCdWxrRGVs ZXRlUmVzdWx0KSk7CisKKwkvKgorCSAqIEl0ZXJhdGUgb3ZlciB0aGUgcGFnZXMuIFdlIGRvbid0 IGNhcmUgYWJvdXQgY29uY3VycmVudGx5IGFkZGVkIHBhZ2VzLAorCSAqIGJlY2F1c2UgdGhlIGlu ZGV4IGlzIG1hcmtlZCBhcyBub3QtcmVhZHkgZm9yIHRoYXQgbW9tZW50IGFuZCB0aGUgaW5kZXgg aXMgbm90CisJICogdXNlZCBmb3IgaW5zZXJ0LgorCSAqLworCW5wYWdlcyA9IFJlbGF0aW9uR2V0 TnVtYmVyT2ZCbG9ja3MoaW5kZXgpOworCWZvciAoYmxrbm8gPSBTVElSX0hFQURfQkxLTk87IGJs a25vIDwgbnBhZ2VzOyBibGtubysrKQorCXsKKwkJU3RpclR1cGxlICppdHVwLCAqaXR1cEVuZDsK KworCQl2YWN1dW1fZGVsYXlfcG9pbnQoZmFsc2UpOworCisJCWJ1ZmZlciA9IFJlYWRCdWZmZXJF eHRlbmRlZChpbmRleCwgTUFJTl9GT1JLTlVNLCBibGtubywKKwkJCQkJCQkJCVJCTV9OT1JNQUws IGluZm8tPnN0cmF0ZWd5KTsKKworCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfU0hB UkUpOworCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWZmZXIpOworCisJCWlmIChQYWdlSXNOZXco cGFnZSkpCisJCXsKKwkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKKwkJCWNvbnRpbnVl OworCQl9CisKKwkJaXR1cCA9IFN0aXJQYWdlR2V0VHVwbGUocGFnZSwgRmlyc3RPZmZzZXROdW1i ZXIpOworCQlpdHVwRW5kID0gU3RpclBhZ2VHZXRUdXBsZShwYWdlLCBPZmZzZXROdW1iZXJOZXh0 KFN0aXJQYWdlR2V0TWF4T2Zmc2V0KHBhZ2UpKSk7CisJCXdoaWxlIChpdHVwIDwgaXR1cEVuZCkK KwkJeworCQkJLyogRG8gd2UgaGF2ZSB0byBkZWxldGUgdGhpcyB0dXBsZT8gKi8KKwkJCWlmIChj YWxsYmFjaygmaXR1cC0+aGVhcFB0ciwgY2FsbGJhY2tfc3RhdGUpKQorCQkJeworCQkJCWVyZXBv cnQoRVJST1IsIChlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwgZXJybXNn KCJ3ZSBuZXZlciBkZWxldGUgaW4gc3RpciIpKSk7CisJCQl9CisKKwkJCWl0dXAgPSBTdGlyUGFn ZUdldE5leHRUdXBsZShpdHVwKTsKKwkJfQorCisJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVy KTsKKwl9CisKKwlyZXR1cm4gc3RhdHM7Cit9CisKKy8qCisgKiBNYXJrIGEgU1RJUiBpbmRleCB0 byBza2lwIGZ1dHVyZSBpbnNlcnRzCisgKi8KK3ZvaWQKK1N0aXJNYXJrQXNTa2lwSW5zZXJ0cyhS ZWxhdGlvbiBpbmRleCkKK3sKKwlTdGlyTWV0YVBhZ2VEYXRhICptZXRhRGF0YTsKKwlCdWZmZXIg bWV0YUJ1ZmZlcjsKKwlQYWdlIG1ldGFQYWdlOworCisJQXNzZXJ0KCFSZWxhdGlvbk5lZWRzV0FM KGluZGV4KSk7CisJbWV0YUJ1ZmZlciA9IFJlYWRCdWZmZXIoaW5kZXgsIFNUSVJfTUVUQVBBR0Vf QkxLTk8pOworCUxvY2tCdWZmZXIobWV0YUJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsK KworCW1ldGFQYWdlID0gQnVmZmVyR2V0UGFnZShtZXRhQnVmZmVyKTsKKwltZXRhRGF0YSA9IFN0 aXJQYWdlR2V0TWV0YShtZXRhUGFnZSk7CisKKwlpZiAoIW1ldGFEYXRhLT5za2lwSW5zZXJ0cykK Kwl7CisJCW1ldGFEYXRhLT5za2lwSW5zZXJ0cyA9IHRydWU7CisJCU1hcmtCdWZmZXJEaXJ0eSht ZXRhQnVmZmVyKTsKKwl9CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihtZXRhQnVmZmVyKTsKK30KKwor LyoKKyAqIEFzIHdpdGggc3RpcmJ1bGtkZWxldGUsIHRoaXMgaXMgbm90IHJlYWNoYWJsZSBkdXJp bmcgYSBub3JtYWwgQ0lDIGR1ZSB0bworICogdGFibGUtbGV2ZWwgbG9ja2luZy4gIEl0IHNlcnZl cyBhcyBhIHNhZmV0eSBuZXQgZm9yIGxlZnRvdmVyIFNUSVIgaW5kZXhlcworICogZnJvbSBmYWls ZWQgY29uY3VycmVudCBpbmRleCBidWlsZHMuCisgKi8KK0luZGV4QnVsa0RlbGV0ZVJlc3VsdCAq CitzdGlydmFjdXVtY2xlYW51cChJbmRleFZhY3V1bUluZm8gKmluZm8sCisJCQkJICBJbmRleEJ1 bGtEZWxldGVSZXN1bHQgKnN0YXRzKQoreworCVN0aXJNYXJrQXNTa2lwSW5zZXJ0cyhpbmZvLT5p bmRleCk7CisJZXJlcG9ydChXQVJOSU5HLCAoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NV UFBPUlRFRCksCisJCQllcnJtc2coIlwiJXNcIiBpcyBub3QgaW1wbGVtZW50ZWQsIHNlZW1zIGxp a2UgdGhpcyBpbmRleCBuZWVkcyB0byBiZSBkcm9wcGVkIiwgX19mdW5jX18pKSk7CisJcmV0dXJu IE5VTEw7Cit9CisKK2J5dGVhICoKK3N0aXJvcHRpb25zKERhdHVtIHJlbG9wdGlvbnMsIGJvb2wg dmFsaWRhdGUpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK3N0aXJjb3N0ZXN0aW1hdGUo UGxhbm5lckluZm8gKnJvb3QsIEluZGV4UGF0aCAqcGF0aCwKKwkJCQkJIGRvdWJsZSBsb29wX2Nv dW50LCBDb3N0ICppbmRleFN0YXJ0dXBDb3N0LAorCQkJCQkgQ29zdCAqaW5kZXhUb3RhbENvc3Qs IFNlbGVjdGl2aXR5ICppbmRleFNlbGVjdGl2aXR5LAorCQkJCQkgZG91YmxlICppbmRleENvcnJl bGF0aW9uLCBkb3VibGUgKmluZGV4UGFnZXMpCit7CisJZXJlcG9ydChFUlJPUiwgKGVycmNvZGUo RVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLCBlcnJtc2coIlwiJXNcIiBpcyBub3QgaW1w bGVtZW50ZWQiLCBfX2Z1bmNfXykpKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFs b2cvaW5kZXguYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwppbmRleCA5NDA3YzM1N2Yy Ny4uY2MwNjdlNThkMzYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwor KysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKQEAgLTM0MzIsNiArMzQzMiw3IEBAIHZh bGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBTbmFwc2hvdCBzbmFwc2hvdCkK IAlpdmluZm8ubWVzc2FnZV9sZXZlbCA9IERFQlVHMjsKIAlpdmluZm8ubnVtX2hlYXBfdHVwbGVz ID0gaGVhcFJlbGF0aW9uLT5yZF9yZWwtPnJlbHR1cGxlczsKIAlpdmluZm8uc3RyYXRlZ3kgPSBO VUxMOworCWl2aW5mby52YWxpZGF0ZV9pbmRleCA9IHRydWU7CiAKIAkvKgogCSAqIEVuY29kZSBU SURzIGFzIGludDggdmFsdWVzIGZvciB0aGUgc29ydCwgcmF0aGVyIHRoYW4gZGlyZWN0bHkgc29y dGluZwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5jIGIvc3JjL2Jh Y2tlbmQvY2F0YWxvZy90b2FzdGluZy5jCmluZGV4IDRhYTUyYTRiZDI1Li5kN2VhODZiMjgwNSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5jCisrKyBiL3NyYy9iYWNr ZW5kL2NhdGFsb2cvdG9hc3RpbmcuYwpAQCAtMzE0LDYgKzMxNCw3IEBAIGNyZWF0ZV90b2FzdF90 YWJsZShSZWxhdGlvbiByZWwsIE9pZCB0b2FzdE9pZCwgT2lkIHRvYXN0SW5kZXhPaWQsCiAJaW5k ZXhJbmZvLT5paV9QYXJhbGxlbFdvcmtlcnMgPSAwOwogCWluZGV4SW5mby0+aWlfQW0gPSBCVFJF RV9BTV9PSUQ7CiAJaW5kZXhJbmZvLT5paV9BbUNhY2hlID0gTlVMTDsKKwlpbmRleEluZm8tPmlp X0F1eGlsaWFyeSA9IGZhbHNlOwogCWluZGV4SW5mby0+aWlfQ29udGV4dCA9IEN1cnJlbnRNZW1v cnlDb250ZXh0OwogCiAJY29sbGF0aW9uSWRzWzBdID0gSW52YWxpZE9pZDsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FuYWx5emUuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Fu YWx5emUuYwppbmRleCAwMjBhNTkxOWI4NC4uZTgyYTY5MjZlOGMgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2FuYWx5emUuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hbmFs eXplLmMKQEAgLTczMSw2ICs3MzEsNyBAQCBkb19hbmFseXplX3JlbChSZWxhdGlvbiBvbmVyZWws IGNvbnN0IFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCQkJaXZpbmZvLm1lc3NhZ2VfbGV2ZWwgPSBl bGV2ZWw7CiAJCQlpdmluZm8ubnVtX2hlYXBfdHVwbGVzID0gb25lcmVsLT5yZF9yZWwtPnJlbHR1 cGxlczsKIAkJCWl2aW5mby5zdHJhdGVneSA9IHZhY19zdHJhdGVneTsKKwkJCWl2aW5mby52YWxp ZGF0ZV9pbmRleCA9IGZhbHNlOwogCiAJCQlzdGF0cyA9IGluZGV4X3ZhY3V1bV9jbGVhbnVwKCZp dmluZm8sIE5VTEwpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW1w YXJhbGxlbC5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtcGFyYWxsZWwuYwppbmRleCA5 NzljMmJlNGFiZC4uOWRiNmIxN2FiZGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3ZhY3V1bXBhcmFsbGVsLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtcGFyYWxs ZWwuYwpAQCAtMTA5Miw2ICsxMDkyLDcgQEAgcGFyYWxsZWxfdmFjdXVtX3Byb2Nlc3Nfb25lX2lu ZGV4KFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2cywgUmVsYXRpb24gaW5kcmVsLAogCWl2aW5mby5l c3RpbWF0ZWRfY291bnQgPSBwdnMtPnNoYXJlZC0+ZXN0aW1hdGVkX2NvdW50OwogCWl2aW5mby5u dW1faGVhcF90dXBsZXMgPSBwdnMtPnNoYXJlZC0+cmVsdHVwbGVzOwogCWl2aW5mby5zdHJhdGVn eSA9IHB2cy0+YnN0cmF0ZWd5OworCWl2aW5mby52YWxpZGF0ZV9pbmRleCA9IGZhbHNlOwogCiAJ LyogVXBkYXRlIGVycm9yIHRyYWNlYmFjayBpbmZvcm1hdGlvbiAqLwogCXB2cy0+aW5kbmFtZSA9 IHBzdHJkdXAoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaW5kcmVsKSk7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5j cy5jCmluZGV4IDNjZDM1YzVjNDU3Li41MzU5ZGFiMTE3NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvbm9kZXMvbWFrZWZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMK QEAgLTg3NSw2ICs4NzUsNyBAQCBtYWtlSW5kZXhJbmZvKGludCBudW1hdHRycywgaW50IG51bWtl eWF0dHJzLCBPaWQgYW1vaWQsIExpc3QgKmV4cHJlc3Npb25zLAogCS8qIGluaXRpYWxpemUgaW5k ZXgtYnVpbGQgc3RhdGUgdG8gZGVmYXVsdCAqLwogCW4tPmlpX0Jyb2tlbkhvdENoYWluID0gZmFs c2U7CiAJbi0+aWlfUGFyYWxsZWxXb3JrZXJzID0gMDsKKwluLT5paV9BdXhpbGlhcnkgPSBmYWxz ZTsKIAogCS8qIHNldCB1cCBmb3IgcG9zc2libGUgdXNlIGJ5IGluZGV4IEFNICovCiAJbi0+aWlf QW0gPSBhbW9pZDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKaW5kZXggNjhiZmU0MDVkYjMuLmU0YTY2NmIyZjcyIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaAorKysgYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvZ2VuYW0uaApAQCAtNTgsNiArNTgsNyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFZhY3V1 bUluZm8KIAlib29sCQllc3RpbWF0ZWRfY291bnQ7CS8qIG51bV9oZWFwX3R1cGxlcyBpcyBhbiBl c3RpbWF0ZSAqLwogCWludAkJCW1lc3NhZ2VfbGV2ZWw7CS8qIGVyZXBvcnQgbGV2ZWwgZm9yIHBy b2dyZXNzIG1lc3NhZ2VzICovCiAJZG91YmxlCQludW1faGVhcF90dXBsZXM7CS8qIHR1cGxlcyBy ZW1haW5pbmcgaW4gaGVhcCAqLworCWJvb2wJCXZhbGlkYXRlX2luZGV4OyAvKiB2YWxpZGF0aW5n IGNvbmN1cnJlbnRseSBidWlsdCBpbmRleD8gKi8KIAlCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJh dGVneTsJLyogYWNjZXNzIHN0cmF0ZWd5IGZvciByZWFkcyAqLwogfSBJbmRleFZhY3V1bUluZm87 CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxvcHRpb25zLmggYi9zcmMvaW5j bHVkZS9hY2Nlc3MvcmVsb3B0aW9ucy5oCmluZGV4IGU4Y2I3ZjdhNjI3Li43ZjNmMDhhNzBhYyAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbG9wdGlvbnMuaAorKysgYi9zcmMvaW5j bHVkZS9hY2Nlc3MvcmVsb3B0aW9ucy5oCkBAIC01MSw4ICs1MSw5IEBAIHR5cGVkZWYgZW51bSBy ZWxvcHRfa2luZAogCVJFTE9QVF9LSU5EX1ZJRVcgPSAoMSA8PCA5KSwKIAlSRUxPUFRfS0lORF9C UklOID0gKDEgPDwgMTApLAogCVJFTE9QVF9LSU5EX1BBUlRJVElPTkVEID0gKDEgPDwgMTEpLAor CVJFTE9QVF9LSU5EX1NUSVIgPSAoMSA8PCAxMiksCiAJLyogaWYgeW91IGFkZCBhIG5ldyBraW5k LCBtYWtlIHN1cmUgeW91IHVwZGF0ZSAibGFzdF9kZWZhdWx0IiB0b28gKi8KLQlSRUxPUFRfS0lO RF9MQVNUX0RFRkFVTFQgPSBSRUxPUFRfS0lORF9QQVJUSVRJT05FRCwKKwlSRUxPUFRfS0lORF9M QVNUX0RFRkFVTFQgPSBSRUxPUFRfS0lORF9TVElSLAogCS8qIHNvbWUgY29tcGlsZXJzIHRyZWF0 IGVudW1zIGFzIHNpZ25lZCBpbnRzLCBzbyB3ZSBjYW4ndCB1c2UgMSA8PCAzMSAqLwogCVJFTE9Q VF9LSU5EX01BWCA9ICgxIDw8IDMwKQogfSByZWxvcHRfa2luZDsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9zdGlyLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3Rpci5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iMDhjZjRkNGVmMAotLS0gL2Rldi9udWxs CisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9zdGlyLmgKQEAgLTAsMCArMSwxMTAgQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIHN0aXIuaAorICoJICBoZWFkZXIgZmlsZSBmb3IgcG9zdGdy ZXMgc3RpciBhY2Nlc3MgbWV0aG9kIGltcGxlbWVudGF0aW9uLgorICoKKyAqCisgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKgorICogc3JjL2luY2x1ZGUvYWNjZXNzL3N0aXIuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisjaWZuZGVmIFNUSVJfSAorI2RlZmluZSBTVElSX0gKKworI2luY2x1ZGUgImFjY2Vz cy9hbWFwaS5oIgorI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5oIgorI2luY2x1ZGUgInN0b3Jh Z2UvYnVmcGFnZS5oIgorCisvKiBTdXBwb3J0IHByb2NlZHVyZXMgbnVtYmVycyAqLworI2RlZmlu ZSBTVElSX05QUk9DCQkJCTAKKworLyogU2NhbiBzdHJhdGVnaWVzICovCisjZGVmaW5lIFNUSVJf TlNUUkFURUdJRVMJCTEKKworI2RlZmluZSBTVElSX09QVElPTlNfUFJPQwkJCQkwCisKKy8qIE1h Y3JvcyBmb3IgYWNjZXNzaW5nIHN0aXIgcGFnZSBzdHJ1Y3R1cmVzICovCisjZGVmaW5lIFN0aXJQ YWdlR2V0T3BhcXVlKHBhZ2UpICgoU3RpclBhZ2VPcGFxdWUpIFBhZ2VHZXRTcGVjaWFsUG9pbnRl cihwYWdlKSkKKyNkZWZpbmUgU3RpclBhZ2VHZXRNYXhPZmZzZXQocGFnZSkgKFN0aXJQYWdlR2V0 T3BhcXVlKHBhZ2UpLT5tYXhvZmYpCisjZGVmaW5lIFN0aXJQYWdlSXNNZXRhKHBhZ2UpIFwKKwko KFN0aXJQYWdlR2V0T3BhcXVlKHBhZ2UpLT5mbGFncyAmIFNUSVJfTUVUQSkgIT0gMCkKKyNkZWZp bmUgU3RpclBhZ2VHZXRUdXBsZShwYWdlLCBvZmZzZXQpIFwKKwkoKFN0aXJUdXBsZSAqKShQYWdl R2V0Q29udGVudHMocGFnZSkgXAorCQkrIHNpemVvZihTdGlyVHVwbGUpICogKChvZmZzZXQpIC0g MSkpKQorI2RlZmluZSBTdGlyUGFnZUdldE5leHRUdXBsZSh0dXBsZSkgXAorCSgoU3RpclR1cGxl ICopKChjaGFyICopKHR1cGxlKSArIHNpemVvZihTdGlyVHVwbGUpKSkKKworCisKKy8qIFByZXNl cnZlZCBwYWdlIG51bWJlcnMgKi8KKyNkZWZpbmUgU1RJUl9NRVRBUEFHRV9CTEtOTwkoMCkKKyNk ZWZpbmUgU1RJUl9IRUFEX0JMS05PCQkoMSkgLyogZmlyc3QgZGF0YSBwYWdlICovCisKKworLyog T3BhcXVlIGZvciBzdGlyIHBhZ2VzICovCit0eXBlZGVmIHN0cnVjdCBTdGlyUGFnZU9wYXF1ZURh dGEKK3sKKwlPZmZzZXROdW1iZXIgbWF4b2ZmOwkJLyogbnVtYmVyIG9mIGluZGV4IHR1cGxlcyBv biB0aGUgcGFnZSAqLworCXVpbnQxNgkJZmxhZ3M7CQkJLyogc2VlIGJpdCBkZWZpbml0aW9ucyBi ZWxvdyAqLworCXVpbnQxNgkJc3Rpcl9wYWdlX2lkOwkvKiBmb3IgaWRlbnRpZmljYXRpb24gb2Yg U1RJUiBpbmRleGVzICovCit9IFN0aXJQYWdlT3BhcXVlRGF0YTsKKworLyogU3RpciBwYWdlIGZs YWdzICovCisjZGVmaW5lIFNUSVJfTUVUQQkJKDE8PDApCisKK3R5cGVkZWYgU3RpclBhZ2VPcGFx dWVEYXRhICpTdGlyUGFnZU9wYXF1ZTsKKworI2RlZmluZSBTVElSX1BBR0VfSUQJCTB4RkY4NAor CisvKiBNZXRhZGF0YSBvZiBzdGlyIGluZGV4ICovCit0eXBlZGVmIHN0cnVjdCBTdGlyTWV0YVBh Z2VEYXRhCit7CisJdWludDMyCQltYWdpY051bWJlcjsKKwlCbG9ja051bWJlcglsYXN0QmxrTm87 CisJYm9vbAkJc2tpcEluc2VydHM7CS8qIHNob3VsZCB3ZSBqdXN0IGV4aXQgd2l0aG91dCBhbnkg aW5zZXJ0cz8gKi8KK30gU3Rpck1ldGFQYWdlRGF0YTsKKworLyogTWFnaWMgbnVtYmVyIHRvIGRp c3Rpbmd1aXNoIHN0aXIgcGFnZXMgZnJvbSBvdGhlcnMgKi8KKyNkZWZpbmUgU1RJUl9NQUdJQ19O VU1CRVIgKDB4REJBQzBERUYpCisKKyNkZWZpbmUgU3RpclBhZ2VHZXRNZXRhKHBhZ2UpCSgoU3Rp ck1ldGFQYWdlRGF0YSAqKSBQYWdlR2V0Q29udGVudHMocGFnZSkpCisKK3R5cGVkZWYgc3RydWN0 IFN0aXJUdXBsZQoreworCUl0ZW1Qb2ludGVyRGF0YSBoZWFwUHRyOworfSBTdGlyVHVwbGU7CisK KyNkZWZpbmUgU3RpclBhZ2VHZXRGcmVlU3BhY2UocGFnZSkgXAorCShCTENLU1ogLSBNQVhBTElH TihTaXplT2ZQYWdlSGVhZGVyRGF0YSkgXAorCQktIFN0aXJQYWdlR2V0TWF4T2Zmc2V0KHBhZ2Up ICogKHNpemVvZihTdGlyVHVwbGUpKSBcCisJCS0gTUFYQUxJR04oc2l6ZW9mKFN0aXJQYWdlT3Bh cXVlRGF0YSkpKQorCitleHRlcm4gdm9pZCBTdGlyRmlsbE1ldGFwYWdlKFJlbGF0aW9uIGluZGV4 LCBQYWdlIG1ldGFQYWdlLCBib29sIHNraXBJbnNlcnRzKTsKK2V4dGVybiB2b2lkIFN0aXJJbml0 TWV0YXBhZ2UoUmVsYXRpb24gaW5kZXgsIEZvcmtOdW1iZXIgZm9ya251bSk7CitleHRlcm4gdm9p ZCBTdGlySW5pdFBhZ2UoUGFnZSBwYWdlLCB1aW50MTYgZmxhZ3MpOworZXh0ZXJuIHZvaWQgU3Rp ck1hcmtBc1NraXBJbnNlcnRzKFJlbGF0aW9uIGluZGV4KTsKKworLyogaW5kZXggYWNjZXNzIG1l dGhvZCBpbnRlcmZhY2UgZnVuY3Rpb25zICovCitleHRlcm4gYm9vbCBzdGlydmFsaWRhdGUoT2lk IG9wY2xhc3NvaWQpOworZXh0ZXJuIGJvb2wgc3Rpcmluc2VydChSZWxhdGlvbiBpbmRleCwgRGF0 dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAorCQkJCQkgSXRlbVBvaW50ZXIgaHRfY3RpZCwgUmVs YXRpb24gaGVhcFJlbCwKKwkJCQkJIEluZGV4VW5pcXVlQ2hlY2sgY2hlY2tVbmlxdWUsCisJCQkJ CSBib29sIGluZGV4VW5jaGFuZ2VkLAorCQkJCQkgc3RydWN0IEluZGV4SW5mbyAqaW5kZXhJbmZv KTsKK2V4dGVybiBJbmRleFNjYW5EZXNjIHN0aXJiZWdpbnNjYW4oUmVsYXRpb24gciwgaW50IG5r ZXlzLCBpbnQgbm9yZGVyYnlzKTsKK2V4dGVybiB2b2lkIHN0aXJyZXNjYW4oSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCisJCQkJCSBTY2FuS2V5IG9y ZGVyYnlzLCBpbnQgbm9yZGVyYnlzKTsKK2V4dGVybiB2b2lkIHN0aXJlbmRzY2FuKEluZGV4U2Nh bkRlc2Mgc2Nhbik7CitleHRlcm4gSW5kZXhCdWlsZFJlc3VsdCAqc3RpcmJ1aWxkKFJlbGF0aW9u IGhlYXAsIFJlbGF0aW9uIGluZGV4LAorCQkJCQkJCQkgc3RydWN0IEluZGV4SW5mbyAqaW5kZXhJ bmZvKTsKK2V4dGVybiB2b2lkIHN0aXJidWlsZGVtcHR5KFJlbGF0aW9uIGluZGV4KTsKK2V4dGVy biBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKnN0aXJidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAq aW5mbywKKwkJCQkJCQkJCQkgICBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKnN0YXRzLCBJbmRleEJ1 bGtEZWxldGVDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJCQkJCQkgICB2b2lkICpjYWxsYmFja19z dGF0ZSk7CitleHRlcm4gSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGlydmFjdXVtY2xlYW51cChJ bmRleFZhY3V1bUluZm8gKmluZm8sCisJCQkJCQkJCQkJCSAgSW5kZXhCdWxrRGVsZXRlUmVzdWx0 ICpzdGF0cyk7CitleHRlcm4gYnl0ZWEgKnN0aXJvcHRpb25zKERhdHVtIHJlbG9wdGlvbnMsIGJv b2wgdmFsaWRhdGUpOworCisjZW5kaWYJCQkvKiBTVElSX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfYW0uZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19hbS5kYXQK aW5kZXggNDZkMzYxMDQ3ZmUuLjhiZDJjMmI0NmJhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX2FtLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2FtLmRhdApAQCAt MzMsNSArMzMsOCBAQAogeyBvaWQgPT4gJzM1ODAnLCBvaWRfc3ltYm9sID0+ICdCUklOX0FNX09J RCcsCiAgIGRlc2NyID0+ICdibG9jayByYW5nZSBpbmRleCAoQlJJTikgYWNjZXNzIG1ldGhvZCcs CiAgIGFtbmFtZSA9PiAnYnJpbicsIGFtaGFuZGxlciA9PiAnYnJpbmhhbmRsZXInLCBhbXR5cGUg PT4gJ2knIH0sCit7IG9pZCA9PiAnNTU1NScsIG9pZF9zeW1ib2wgPT4gJ1NUSVJfQU1fT0lEJywK KyAgZGVzY3IgPT4gJ3Nob3J0IHRlcm0gaW5kZXggcmVwbGFjZW1lbnQgYWNjZXNzIG1ldGhvZCcs CisgIGFtbmFtZSA9PiAnc3RpcicsIGFtaGFuZGxlciA9PiAnc3RpcmhhbmRsZXInLCBhbXR5cGUg PT4gJ2knIH0sCiAKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BjbGFz cy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wY2xhc3MuZGF0CmluZGV4IGRmMTcwYjgw ODQwLi5hMzQ1N2U3NDlkYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGNs YXNzLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wY2xhc3MuZGF0CkBAIC00OTIs NCArNDkyLDggQEAKIAogIyBubyBicmluIG9wY2xhc3MgZm9yIHRoZSBnZW9tZXRyaWMgdHlwZXMg ZXhjZXB0IGJveAogCisjIGFsbG93IGFueSB0eXBlcyBmb3IgU1RJUgoreyBvcGNtZXRob2QgPT4g J3N0aXInLCBvaWRfc3ltYm9sID0+ICdBTllfU1RJUl9PUFNfT0lEJywgb3BjbmFtZSA9PiAnc3Rp cl9vcHMnLAorICBvcGNmYW1pbHkgPT4gJ3N0aXIvYW55X29wcycsIG9wY2ludHlwZSA9PiAnYW55 J30sCisKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BmYW1pbHkuZGF0 IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGZhbWlseS5kYXQKaW5kZXggN2EwMjdjNDgxMGUu LjZmZmMyMGEwNjFjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wZmFtaWx5 LmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wZmFtaWx5LmRhdApAQCAtMzA4LDUg KzMwOCw3IEBACiAgIG9wZm1ldGhvZCA9PiAnaGFzaCcsIG9wZm5hbWUgPT4gJ211bHRpcmFuZ2Vf b3BzJyB9LAogeyBvaWQgPT4gJzYxNTgnLAogICBvcGZtZXRob2QgPT4gJ2dpc3QnLCBvcGZuYW1l ID0+ICdtdWx0aXJhbmdlX29wcycgfSwKK3sgb2lkID0+ICc1NTU4JywKKyAgb3BmbWV0aG9kID0+ ICdzdGlyJywgb3BmbmFtZSA9PiAnYW55X29wcycgfSwKIAogXQpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQKaW5kZXggZmE5YWU3OTA4MmIuLjhmNzAxZmFmNmRkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQKQEAgLTkzNSw2ICs5MzUsMTAgQEAKICAgcHJvbmFtZSA9PiAnYnJpbmhhbmRsZXInLCBwcm92 b2xhdGlsZSA9PiAndicsCiAgIHByb3JldHR5cGUgPT4gJ2luZGV4X2FtX2hhbmRsZXInLCBwcm9h cmd0eXBlcyA9PiAnaW50ZXJuYWwnLAogICBwcm9zcmMgPT4gJ2JyaW5oYW5kbGVyJyB9LAoreyBv aWQgPT4gJzU1NTYnLCBkZXNjciA9PiAnc2hvcnQgdGVybSBpbmRleCByZXBsYWNlbWVudCBhY2Nl c3MgbWV0aG9kIGhhbmRsZXInLAorICBwcm9uYW1lID0+ICdzdGlyaGFuZGxlcicsIHByb3ZvbGF0 aWxlID0+ICd2JywKKyAgcHJvcmV0dHlwZSA9PiAnaW5kZXhfYW1faGFuZGxlcicsIHByb2FyZ3R5 cGVzID0+ICdpbnRlcm5hbCcsCisgIHByb3NyYyA9PiAnc3RpcmhhbmRsZXInIH0sCiB7IG9pZCA9 PiAnMzk1MicsIGRlc2NyID0+ICdicmluOiBzdGFuZGFsb25lIHNjYW4gbmV3IHRhYmxlIHBhZ2Vz JywKICAgcHJvbmFtZSA9PiAnYnJpbl9zdW1tYXJpemVfbmV3X3ZhbHVlcycsIHByb3ZvbGF0aWxl ID0+ICd2JywKICAgcHJvcGFyYWxsZWwgPT4gJ3UnLCBwcm9yZXR0eXBlID0+ICdpbnQ0JywgcHJv YXJndHlwZXMgPT4gJ3JlZ2NsYXNzJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4 ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggMTMzNTkxODBk MjUuLjNlYWVlZDNjMTQxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMu aAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTY5LDggKzE2OSw4IEBA IHR5cGVkZWYgc3RydWN0IEV4cHJTdGF0ZQogICoJCWVudHJpZXMgZm9yIGEgcGFydGljdWxhciBp bmRleC4gIFVzZWQgZm9yIGJvdGggaW5kZXhfYnVpbGQgYW5kCiAgKgkJcmV0YWlsIGNyZWF0aW9u IG9mIGluZGV4IGVudHJpZXMuCiAgKgotICogaWlfQ29uY3VycmVudCwgaWlfQnJva2VuSG90Q2hh aW4sIGFuZCBpaV9QYXJhbGxlbFdvcmtlcnMgYXJlIHVzZWQgb25seQotICogZHVyaW5nIGluZGV4 IGJ1aWxkOyB0aGV5J3JlIGNvbnZlbnRpb25hbGx5IHplcm9lZCBvdGhlcndpc2UuCisgKiBpaV9D b25jdXJyZW50LCBpaV9Ccm9rZW5Ib3RDaGFpbiwgaWlfQXV4aWxpYXJ5IGFuZCBpaV9QYXJhbGxl bFdvcmtlcnMKKyAqIGFyZSB1c2VkIG9ubHkgZHVyaW5nIGluZGV4IGJ1aWxkOyB0aGV5J3JlIGNv bnZlbnRpb25hbGx5IHplcm9lZCBvdGhlcndpc2UuCiAgKiAtLS0tLS0tLS0tLS0tLS0tCiAgKi8K IHR5cGVkZWYgc3RydWN0IEluZGV4SW5mbwpAQCAtMjMwLDcgKzIzMCw4IEBAIHR5cGVkZWYgc3Ry dWN0IEluZGV4SW5mbwogCWJvb2wJCWlpX1dpdGhvdXRPdmVybGFwczsKIAkvKiAjIG9mIHdvcmtl cnMgcmVxdWVzdGVkIChleGNsdWRlcyBsZWFkZXIpICovCiAJaW50CQkJaWlfUGFyYWxsZWxXb3Jr ZXJzOwotCisJLyogaXMgYXV4aWxpYXJ5IGZvciBjb25jdXJyZW50IGluZGV4IGJ1aWxkPyAqLwor CWJvb2wJCWlpX0F1eGlsaWFyeTsKIAkvKiBPaWQgb2YgaW5kZXggQU0gKi8KIAlPaWQJCQlpaV9B bTsKIAkvKiBwcml2YXRlIGNhY2hlIGFyZWEgZm9yIGluZGV4IEFNICovCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS91dGlscy9pbmRleF9zZWxmdW5jcy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvaW5k ZXhfc2VsZnVuY3MuaAppbmRleCA3NDc5M2ExYTE5ZC4uYmYwZTMwZGFiZTkgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3V0aWxzL2luZGV4X3NlbGZ1bmNzLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRp bHMvaW5kZXhfc2VsZnVuY3MuaApAQCAtNjIsNiArNjIsMTQgQEAgZXh0ZXJuIHZvaWQgc3BnY29z dGVzdGltYXRlKHN0cnVjdCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQlTZWxlY3Rpdml0eSAq aW5kZXhTZWxlY3Rpdml0eSwKIAkJCQkJCQlkb3VibGUgKmluZGV4Q29ycmVsYXRpb24sCiAJCQkJ CQkJZG91YmxlICppbmRleFBhZ2VzKTsKK2V4dGVybiB2b2lkIHN0aXJjb3N0ZXN0aW1hdGUoc3Ry dWN0IFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCXN0cnVjdCBJbmRleFBhdGggKnBhdGgsCisJ CQkJCQkJZG91YmxlIGxvb3BfY291bnQsCisJCQkJCQkJQ29zdCAqaW5kZXhTdGFydHVwQ29zdCwK KwkJCQkJCQlDb3N0ICppbmRleFRvdGFsQ29zdCwKKwkJCQkJCQlTZWxlY3Rpdml0eSAqaW5kZXhT ZWxlY3Rpdml0eSwKKwkJCQkJCQlkb3VibGUgKmluZGV4Q29ycmVsYXRpb24sCisJCQkJCQkJZG91 YmxlICppbmRleFBhZ2VzKTsKIGV4dGVybiB2b2lkIGdpbmNvc3Rlc3RpbWF0ZShzdHJ1Y3QgUGxh bm5lckluZm8gKnJvb3QsCiAJCQkJCQkJc3RydWN0IEluZGV4UGF0aCAqcGF0aCwKIAkJCQkJCQlk b3VibGUgbG9vcF9jb3VudCwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv YW11dGlscy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FtdXRpbHMub3V0CmluZGV4 IDdhYjYxMTNjNjE5Li45MmMwMzNhMjAxMCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9hbXV0aWxzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FtdXRp bHMub3V0CkBAIC0xNzMsNyArMTczLDEzIEBAIHNlbGVjdCBhbW5hbWUsIHByb3AsIHBnX2luZGV4 YW1faGFzX3Byb3BlcnR5KGEub2lkLCBwcm9wKSBhcyBwCiAgc3BnaXN0IHwgY2FuX2V4Y2x1ZGUg ICB8IHQKICBzcGdpc3QgfCBjYW5faW5jbHVkZSAgIHwgdAogIHNwZ2lzdCB8IGJvZ3VzICAgICAg ICAgfCAKLSgzNiByb3dzKQorIHN0aXIgICB8IGNhbl9vcmRlciAgICAgfCBmCisgc3RpciAgIHwg Y2FuX3VuaXF1ZSAgICB8IGYKKyBzdGlyICAgfCBjYW5fbXVsdGlfY29sIHwgdAorIHN0aXIgICB8 IGNhbl9leGNsdWRlICAgfCBmCisgc3RpciAgIHwgY2FuX2luY2x1ZGUgICB8IHQKKyBzdGlyICAg fCBib2d1cyAgICAgICAgIHwgCisoNDIgcm93cykKIAogLS0KIC0tIGFkZGl0aW9uYWwgY2hlY2tz IGZvciBwZ19pbmRleF9jb2x1bW5faGFzX3Byb3BlcnR5CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL29wcl9zYW5pdHkub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9vcHJfc2FuaXR5Lm91dAppbmRleCBjZmRjNmIxYTE3YS4uY2M5NDcxOTRhYTcgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb3ByX3Nhbml0eS5vdXQKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9vcHJfc2FuaXR5Lm91dApAQCAtMjEzMSw5ICsyMTMxLDEwIEBA IEZST00gcGdfb3BjbGFzcyBBUyBjMQogV0hFUkUgTk9UIEVYSVNUUyhTRUxFQ1QgMSBGUk9NIHBn X2Ftb3AgQVMgYTEKICAgICAgICAgICAgICAgICAgV0hFUkUgYTEuYW1vcGZhbWlseSA9IGMxLm9w Y2ZhbWlseQogICAgICAgICAgICAgICAgICAgIEFORCBiaW5hcnlfY29lcmNpYmxlKGMxLm9wY2lu dHlwZSwgYTEuYW1vcGxlZnR0eXBlKSk7Ci0gb3BjbmFtZSB8IG9wY2ZhbWlseSAKLS0tLS0tLS0t LSstLS0tLS0tLS0tLQotKDAgcm93cykKKyBvcGNuYW1lICB8IG9wY2ZhbWlseSAKKy0tLS0tLS0t LS0rLS0tLS0tLS0tLS0KKyBzdGlyX29wcyB8ICAgICAgNTU1OAorKDEgcm93KQogCiAtLSBDaGVj ayB0aGF0IGVhY2ggb3BlcmF0b3IgbGlzdGVkIGluIHBnX2Ftb3AgaGFzIGFuIGFzc29jaWF0ZWQg b3BjbGFzcywKIC0tIHRoYXQgaXMgb25lIHdob3NlIG9wY2ludHlwZSBtYXRjaGVzIG9wcmxlZnQg KHBvc3NpYmx5IGJ5IGNvZXJjaW9uKS4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcHNxbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0CmluZGV4 IGM4ZjM5MzJlZGYwLi5lY2MyYzJhNjA0OSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9wc3FsLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0 CkBAIC01MTcxLDcgKzUxNzEsOCBAQCBMaXN0IG9mIGFjY2VzcyBtZXRob2RzCiAgaGVhcCAgIHwg VGFibGUKICBoZWFwMiAgfCBUYWJsZQogIHNwZ2lzdCB8IEluZGV4Ci0oOCByb3dzKQorIHN0aXIg ICB8IEluZGV4CisoOSByb3dzKQogCiBcZEEgKgogTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcwpAQCAt NTE4NSw3ICs1MTg2LDggQEAgTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcwogIGhlYXAgICB8IFRhYmxl CiAgaGVhcDIgIHwgVGFibGUKICBzcGdpc3QgfCBJbmRleAotKDggcm93cykKKyBzdGlyICAgfCBJ bmRleAorKDkgcm93cykKIAogXGRBIGgqCiBMaXN0IG9mIGFjY2VzcyBtZXRob2RzCkBAIC01MjEw LDkgKzUyMTIsOSBAQCBMaXN0IG9mIGFjY2VzcyBtZXRob2RzCiAKIFxkQTogZXh0cmEgYXJndW1l bnQgImJhciIgaWdub3JlZAogXGRBKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0 IG9mIGFjY2VzcyBtZXRob2RzCi0gIE5hbWUgIHwgVHlwZSAgfCAgICAgICBIYW5kbGVyICAgICAg ICB8ICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgIAotLS0tLS0tLS0rLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIGFjY2Vz cyBtZXRob2RzCisgIE5hbWUgIHwgVHlwZSAgfCAgICAgICBIYW5kbGVyICAgICAgICB8ICAgICAg ICAgICAgICAgIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tKy0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogIGJyaW4gICB8IEluZGV4IHwgYnJpbmhhbmRsZXIgICAgICAgICAgfCBibG9j ayByYW5nZSBpbmRleCAoQlJJTikgYWNjZXNzIG1ldGhvZAogIGJ0cmVlICB8IEluZGV4IHwgYnRo YW5kbGVyICAgICAgICAgICAgfCBiLXRyZWUgaW5kZXggYWNjZXNzIG1ldGhvZAogIGdpbiAgICB8 IEluZGV4IHwgZ2luaGFuZGxlciAgICAgICAgICAgfCBHSU4gaW5kZXggYWNjZXNzIG1ldGhvZApA QCAtNTIyMSwxMiArNTIyMywxMyBAQCBMaXN0IG9mIGFjY2VzcyBtZXRob2RzCiAgaGVhcCAgIHwg VGFibGUgfCBoZWFwX3RhYmxlYW1faGFuZGxlciB8IGhlYXAgdGFibGUgYWNjZXNzIG1ldGhvZAog IGhlYXAyICB8IFRhYmxlIHwgaGVhcF90YWJsZWFtX2hhbmRsZXIgfCAKICBzcGdpc3QgfCBJbmRl eCB8IHNwZ2hhbmRsZXIgICAgICAgICAgIHwgU1AtR2lTVCBpbmRleCBhY2Nlc3MgbWV0aG9kCi0o OCByb3dzKQorIHN0aXIgICB8IEluZGV4IHwgc3RpcmhhbmRsZXIgICAgICAgICAgfCBzaG9ydCB0 ZXJtIGluZGV4IHJlcGxhY2VtZW50IGFjY2VzcyBtZXRob2QKKyg5IHJvd3MpCiAKIFxkQSsgKgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIGFjY2VzcyBtZXRob2RzCi0gIE5h bWUgIHwgVHlwZSAgfCAgICAgICBIYW5kbGVyICAgICAgICB8ICAgICAgICAgICAgICBEZXNjcmlw dGlvbiAgICAgICAgICAgICAgIAotLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIGFjY2VzcyBtZXRob2RzCisgIE5hbWUgIHwgVHlw ZSAgfCAgICAgICBIYW5kbGVyICAgICAgICB8ICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIGJyaW4gICB8IElu ZGV4IHwgYnJpbmhhbmRsZXIgICAgICAgICAgfCBibG9jayByYW5nZSBpbmRleCAoQlJJTikgYWNj ZXNzIG1ldGhvZAogIGJ0cmVlICB8IEluZGV4IHwgYnRoYW5kbGVyICAgICAgICAgICAgfCBiLXRy ZWUgaW5kZXggYWNjZXNzIG1ldGhvZAogIGdpbiAgICB8IEluZGV4IHwgZ2luaGFuZGxlciAgICAg ICAgICAgfCBHSU4gaW5kZXggYWNjZXNzIG1ldGhvZApAQCAtNTIzNSw3ICs1MjM4LDggQEAgTGlz dCBvZiBhY2Nlc3MgbWV0aG9kcwogIGhlYXAgICB8IFRhYmxlIHwgaGVhcF90YWJsZWFtX2hhbmRs ZXIgfCBoZWFwIHRhYmxlIGFjY2VzcyBtZXRob2QKICBoZWFwMiAgfCBUYWJsZSB8IGhlYXBfdGFi bGVhbV9oYW5kbGVyIHwgCiAgc3BnaXN0IHwgSW5kZXggfCBzcGdoYW5kbGVyICAgICAgICAgICB8 IFNQLUdpU1QgaW5kZXggYWNjZXNzIG1ldGhvZAotKDggcm93cykKKyBzdGlyICAgfCBJbmRleCB8 IHN0aXJoYW5kbGVyICAgICAgICAgIHwgc2hvcnQgdGVybSBpbmRleCByZXBsYWNlbWVudCBhY2Nl c3MgbWV0aG9kCisoOSByb3dzKQogCiBcZEErIGgqCiAgICAgICAgICAgICAgICAgICAgICBMaXN0 IG9mIGFjY2VzcyBtZXRob2RzCi0tIAoyLjQzLjAKCg== --000000000000a3b825064f322697 Content-Type: application/octet-stream; name="v35-0001-Add-stress-tests-for-concurrent-index-builds.patch" Content-Disposition: attachment; filename="v35-0001-Add-stress-tests-for-concurrent-index-builds.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnuipbj80 RnJvbSAzYjA4Nzc3NDAxMzQ3MjI0YTc5MWIwNWI0YzljNTY2ZmU5ODc1N2Y1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogU2F0LCAzMCBOb3YgMjAyNCAxNjoyNDoyMCArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjM1IDEvN10gQWRkIHN0cmVzcyB0ZXN0cyBmb3IgY29uY3VycmVudCBpbmRleCBidWls ZHMKCkludHJvZHVjZSBzdHJlc3MgdGVzdHMgZm9yIGNvbmN1cnJlbnQgaW5kZXggb3BlcmF0aW9u czoKLSB0ZXN0IGNvbmN1cnJlbnQgaW5zZXJ0cy91cGRhdGVzIGR1cmluZyBDUkVBVEUvUkVJTkRF WCBJTkRFWCBDT05DVVJSRU5UTFkKLSBjb3ZlciB2YXJpb3VzIGluZGV4IHR5cGVzIChidHJlZSwg Z2luLCBnaXN0LCBicmluLCBoYXNoLCBzcGdpc3QpCi0gdGVzdCB1bmlxdWUgYW5kIG5vbi11bmlx dWUgaW5kZXhlcwotIHRlc3Qgd2l0aCBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlcwotIHRlc3Qg Ym90aCBwYXJhbGxlbCBhbmQgbm9uLXBhcmFsbGVsIG9wZXJhdGlvbnMKLSB0ZXN0IGJvdGggcmVh ZC1jb21taXR0ZWQgYW5kIHJlcGVhdGFibGUtcmVhZCBpc29sYXRpb24gbGV2ZWxzCgpUaGVzZSB0 ZXN0cyB2ZXJpZnkgdGhlIGJlaGF2aW9yIG9mIHRoZSBmb2xsb3dpbmcgY29tbWl0cy4KLS0tCiBz cmMvYmluL3BnX2FtY2hlY2svbWVzb24uYnVpbGQgIHwgICAxICsKIHNyYy9iaW4vcGdfYW1jaGVj ay90LzAwNl9jaWMucGwgfCAyOTMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDIg ZmlsZXMgY2hhbmdlZCwgMjk0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv YmluL3BnX2FtY2hlY2svdC8wMDZfY2ljLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19hbWNo ZWNrL21lc29uLmJ1aWxkIGIvc3JjL2Jpbi9wZ19hbWNoZWNrL21lc29uLmJ1aWxkCmluZGV4IDU5 MmNlZjc0ZWNiLi41MWE2MmRjY2I3YiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19hbWNoZWNrL21l c29uLmJ1aWxkCisrKyBiL3NyYy9iaW4vcGdfYW1jaGVjay9tZXNvbi5idWlsZApAQCAtMjgsNiAr MjgsNyBAQCB0ZXN0cyArPSB7CiAgICAgICAndC8wMDNfY2hlY2sucGwnLAogICAgICAgJ3QvMDA0 X3ZlcmlmeV9oZWFwYW0ucGwnLAogICAgICAgJ3QvMDA1X29wY2xhc3NfZGFtYWdlLnBsJywKKyAg ICAgICd0LzAwNl9jaWMucGwnLAogICAgIF0sCiAgIH0sCiB9CmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX2FtY2hlY2svdC8wMDZfY2ljLnBsIGIvc3JjL2Jpbi9wZ19hbWNoZWNrL3QvMDA2X2NpYy5w bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZGQ3YTFlZmYwZWYKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2FtY2hlY2svdC8wMDZfY2ljLnBsCkBAIC0wLDAg KzEsMjkzIEBACisjIENvcHlyaWdodCAoYykgMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxv cG1lbnQgR3JvdXAKKworIyBUZXN0IFJFSU5ERVggQ09OQ1VSUkVOVExZIHdpdGggY29uY3VycmVu dCBtb2RpZmljYXRpb25zIGFuZCBIT1QgdXBkYXRlcwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5n cyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2Ug UG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKwordXNlIGNvbnN0YW50 IFNUUkVTU19QR0JFTkNIX0NMSUVOVFMgPT4gMzA7Cit1c2UgY29uc3RhbnQgU1RSRVNTX1BHQkVO Q0hfSk9CUyA9PiA4OwordXNlIGNvbnN0YW50IFNUUkVTU19QR0JFTkNIX1RSQU5TQUNUSU9OUyA9 PiAxMDAwMDsKK3VzZSBjb25zdGFudCBTVFJFU1NfTUFYX1NMRUVQX01TID0+IDEwOworCit1c2Ug Y29uc3RhbnQgREVGQVVMVF9QR0JFTkNIX0NMSUVOVFMgPT4gMTU7Cit1c2UgY29uc3RhbnQgREVG QVVMVF9QR0JFTkNIX0pPQlMgPT4gNDsKK3VzZSBjb25zdGFudCBERUZBVUxUX1BHQkVOQ0hfVFJB TlNBQ1RJT05TID0+IDUwMDsKK3VzZSBjb25zdGFudCBERUZBVUxUX01BWF9TTEVFUF9NUyA9PiAx OworCitUZXN0OjpNb3JlLT5idWlsZGVyLT50b2RvX3N0YXJ0KCdmaWxlc3lzdGVtIGJ1ZycpCisg IGlmIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjpoYXNfd2FsX3JlYWRfYnVnOworCitteSAkbm9k ZTsKK215ICRwZ190ZXN0X2V4dHJhID0gJEVOVntQR19URVNUX0VYVFJBfSAvLyAnJzsKK215ICRp c19zdHJlc3MgPSAkcGdfdGVzdF9leHRyYSA9fiAvXGJzdHJlc3NcYi8gPyAxIDogMDsKK215ICRw Z2JlbmNoX2NsaWVudHMgPQorICAkaXNfc3RyZXNzID8gU1RSRVNTX1BHQkVOQ0hfQ0xJRU5UUyA6 IERFRkFVTFRfUEdCRU5DSF9DTElFTlRTOworbXkgJHBnYmVuY2hfam9icyA9ICRpc19zdHJlc3Mg PyBTVFJFU1NfUEdCRU5DSF9KT0JTIDogREVGQVVMVF9QR0JFTkNIX0pPQlM7CitteSAkcGdiZW5j aF90cmFuc2FjdGlvbnMgPQorICAkaXNfc3RyZXNzID8gU1RSRVNTX1BHQkVOQ0hfVFJBTlNBQ1RJ T05TIDogREVGQVVMVF9QR0JFTkNIX1RSQU5TQUNUSU9OUzsKK215ICRtYXhfc2xlZXBfbXMgPSAk aXNfc3RyZXNzID8gU1RSRVNTX01BWF9TTEVFUF9NUyA6IERFRkFVTFRfTUFYX1NMRUVQX01TOwor bXkgJHBnYmVuY2hfb3B0aW9ucyA9IHNwcmludGYoCisJJy0tbm8tdmFjdXVtIC0tY2xpZW50PSVk IC0tam9icz0lZCAtLWV4aXQtb24tYWJvcnQgLS10cmFuc2FjdGlvbnM9JWQnLAorCSRwZ2JlbmNo X2NsaWVudHMsCisJJHBnYmVuY2hfam9icywKKwkkcGdiZW5jaF90cmFuc2FjdGlvbnMpOworbXkg JG5vX2hvdCA9ICRpc19zdHJlc3MgPyBpbnQocmFuZCgyKSkgOiAwOworCitwcmludCgKKwkJc3By aW50ZigKKwkJJ3NldHRpbmdzOiBQR19URVNUX0VYVFJBPSVzIHN0cmVzcz0lZCBjbGllbnRzPSVk IGpvYnM9JWQgdHJhbnNhY3Rpb25zPSVkIG1heF9zbGVlcF9tcz0lZCBub19ob3Q9JWQnLAorCQlk ZWZpbmVkKCRFTlZ7UEdfVEVTVF9FWFRSQX0pCisJCT8gKCRwZ190ZXN0X2V4dHJhIGVxICcnID8g JyhlbXB0eSknIDogJHBnX3Rlc3RfZXh0cmEpCisJCTogJyh1bmRlZiknLAorCQkkaXNfc3RyZXNz LAorCQkkcGdiZW5jaF9jbGllbnRzLAorCQkkcGdiZW5jaF9qb2JzLAorCQkkcGdiZW5jaF90cmFu c2FjdGlvbnMsCisJCSRtYXhfc2xlZXBfbXMsCisJCSRub19ob3QpKTsKK3ByaW50ICJcbiI7CisK KyMKKyMgVGVzdCBzZXQtdXAKKyMKKyRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+ bmV3KCdSQ190ZXN0Jyk7Ciskbm9kZS0+aW5pdDsKKyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdy ZXNxbC5jb25mJywKKwknbG9ja190aW1lb3V0ID0gJyAuICgxMDAwICogJFBvc3RncmVTUUw6OlRl c3Q6OlV0aWxzOjp0aW1lb3V0X2RlZmF1bHQpKTsKKyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdy ZXNxbC5jb25mJywgJ2ZzeW5jID0gb2ZmJyk7Ciskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVz cWwuY29uZicsICdtYWludGVuYW5jZV93b3JrX21lbSA9IDMyTUInKTsgIyB0byBhdm9pZCBPT00K KyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ3NoYXJlZF9idWZmZXJzID0g MzJNQicpOyAjIHRvIGF2b2lkIE9PTQorJG5vZGUtPnN0YXJ0OworJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCBxKENSRUFURSBFWFRFTlNJT04gYW1jaGVjaykpOworJG5vZGUtPnNhZmVfcHNx bCgncG9zdGdyZXMnLCBxKENSRUFURSBVTkxPR0dFRCBUQUJMRSB0YmwoaSBpbnQgcHJpbWFyeSBr ZXksCisJCQkJCQkJCWMxIG1vbmV5IGRlZmF1bHQgMCwgYzIgbW9uZXkgZGVmYXVsdCAwLAorCQkJ CQkJCQljMyBtb25leSBkZWZhdWx0IDAsIHVwZGF0ZWRfYXQgdGltZXN0YW1wLAorCQkJCQkJCQlp YSBpbnQ0W10sIHAgcG9pbnQpKSk7CisKK2lmICgkbm9faG90KSB7ICRub2RlLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgcShDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIGlkeCBPTiB0YmwoaSwgdXBk YXRlZF9hdCk7KSk7IH0KKworIyBjcmVhdGUgc2VxdWVuY2UKKyRub2RlLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgcShDUkVBVEUgVU5MT0dHRUQgU0VRVUVOQ0UgaW5fcm93X3JlYnVpbGQgU1RBUlQg MSBJTkNSRU1FTlQgMTspKTsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShTRUxFQ1Qg bmV4dHZhbCgnaW5fcm93X3JlYnVpbGQnKTspKTsKKworIyBDcmVhdGUgaGVscGVyIGZ1bmN0aW9u cyBmb3IgcHJlZGljYXRlIHRlc3RzCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEoCisJ Q1JFQVRFIEZVTkNUSU9OIHByZWRpY2F0ZV9zdGFibGUoKSBSRVRVUk5TIGJvb2wgSU1NVVRBQkxF CisJTEFOR1VBR0UgcGxwZ3NxbCBBUyAkJAorCUJFR0lOCisJCUVYRUNVVEUgJ1NFTEVDVCB0eGlk X2N1cnJlbnQoKSc7CisJCVJFVFVSTiB0cnVlOworCUVORDsgJCQ7CispKTsKKworJG5vZGUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCBxKAorCUNSRUFURSBGVU5DVElPTiBwcmVkaWNhdGVfY29uc3Qo aW50ZWdlcikgUkVUVVJOUyBib29sIElNTVVUQUJMRQorCUxBTkdVQUdFIHBscGdzcWwgQVMgJCQK KwlCRUdJTgorCQlSRVRVUk4gTU9EKCQxLCAyKSA9IDA7CisJRU5EOyAkJDsKKykpOworCisjIFJ1 biBDSUMvUklDIGluIGRpZmZlcmVudCBvcHRpb25zIGNvbmN1cnJlbnRseSB3aXRoIHVwc2VydHMK KyRub2RlLT5wZ2JlbmNoKAorCSRwZ2JlbmNoX29wdGlvbnMsCisJMCwKKwlbcXJ7YWN0dWFsbHkg cHJvY2Vzc2VkfV0sCisJW3Fye14kfV0sCisJJ2NvbmN1cnJlbnQgb3BlcmF0aW9ucyB3aXRoIFJF SU5ERVgvQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWScsCisJeworCQknY29uY3VycmVudF9vcHMn ID0+IHNwcmludGYocSgKKwkJCVNFVCBkZWJ1Z19wYXJhbGxlbF9xdWVyeSA9IG9mZjsgLS0gdGhp cyBpcyBiZWNhdXNlIHByZWRpY2F0ZV9zdGFibGUgaW1wbGVtZW50YXRpb24KKwkJCVNFTEVDVCBw Z190cnlfYWR2aXNvcnlfbG9jayg0Mik6OmludGVnZXIgQVMgZ290bG9jayBcZ3NldAorCQkJXGlm IDpnb3Rsb2NrCisJCQkJU0VMRUNUIG5leHR2YWwoJ2luX3Jvd19yZWJ1aWxkJykgQVMgbGFzdF92 YWx1ZSBcZ3NldAorCQkJCVxzZXQgdmFyaWFudCByYW5kb20oMCwgNSkKKwkJCQlcc2V0IHBhcmFs bGVscyByYW5kb20oMCwgNCkKKwkJCQlcc2V0IHVzZV9yciByYW5kb20oMCwgOSkKKwkJCQlcaWYg Omxhc3RfdmFsdWUgPCAzCisJCQkJCUFMVEVSIFRBQkxFIHRibCBTRVQgKHBhcmFsbGVsX3dvcmtl cnM9OnBhcmFsbGVscyk7CisJCQkJCVxpZiA6dXNlX3JyID0gMAorCQkJCQkJU0VUIGRlZmF1bHRf dHJhbnNhY3Rpb25faXNvbGF0aW9uID0gJ3JlcGVhdGFibGUgcmVhZCc7CisJCQkJCVxlbmRpZgor CQkJCQlcaWYgOnZhcmlhbnQgPSAwCisJCQkJCQlDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIG5l d19pZHggT04gdGJsKGksIHVwZGF0ZWRfYXQpOworCQkJCQlcZWxpZiA6dmFyaWFudCA9IDEKKwkJ CQkJCUNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgbmV3X2lkeCBPTiB0YmwoaSwgdXBkYXRlZF9h dCkgV0hFUkUgcHJlZGljYXRlX3N0YWJsZSgpOworCQkJCQlcZWxpZiA6dmFyaWFudCA9IDIKKwkJ CQkJCUNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgbmV3X2lkeCBPTiB0YmwoaSwgdXBkYXRlZF9h dCkgV0hFUkUgTU9EKGksIDIpID0gMDsKKwkJCQkJXGVsaWYgOnZhcmlhbnQgPSAzCisJCQkJCQlD UkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHggT04gdGJsKGksIHVwZGF0ZWRfYXQpIFdI RVJFIHByZWRpY2F0ZV9jb25zdChpKTsKKwkJCQkJXGVsaWYgOnZhcmlhbnQgPSA0CisJCQkJCQlD UkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHggT04gdGJsKHByZWRpY2F0ZV9jb25zdChp KSk7CisJCQkJCVxlbGlmIDp2YXJpYW50ID0gNQorCQkJCQkJQ1JFQVRFIElOREVYIENPTkNVUlJF TlRMWSBuZXdfaWR4IE9OIHRibChpLCBwcmVkaWNhdGVfY29uc3QoaSksIHVwZGF0ZWRfYXQpIFdI RVJFIHByZWRpY2F0ZV9jb25zdChpKTsKKwkJCQkJXGVuZGlmCisJCQkJCVxzZXQgc2xlZXBfbXMg cmFuZG9tKDAsICVkKQorCQkJCQlcc2xlZXAgOnNsZWVwX21zIG1zCisJCQkJCVNFTEVDVCBidF9p bmRleF9jaGVjaygnbmV3X2lkeCcsIGhlYXBhbGxpbmRleGVkID0+IHRydWUsIGNoZWNrdW5pcXVl ID0+IHRydWUpOworCQkJCQlSRUlOREVYIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4OworCQkJ CQlcc2V0IHNsZWVwX21zIHJhbmRvbSgwLCAlZCkKKwkJCQkJXHNsZWVwIDpzbGVlcF9tcyBtcwor CQkJCQlTRUxFQ1QgYnRfaW5kZXhfY2hlY2soJ25ld19pZHgnLCBoZWFwYWxsaW5kZXhlZCA9PiB0 cnVlLCBjaGVja3VuaXF1ZSA9PiB0cnVlKTsKKwkJCQkJRFJPUCBJTkRFWCBDT05DVVJSRU5UTFkg bmV3X2lkeDsKKwkJCQkJUkVTRVQgZGVmYXVsdF90cmFuc2FjdGlvbl9pc29sYXRpb247CisJCQkJ XGVuZGlmCisJCQkJU0VMRUNUIHBnX2Fkdmlzb3J5X3VubG9jayg0Mik7CisJCQlcZWxzZQorCQkJ CVxzZXQgbnVtIHJhbmRvbSgxMDAwLCAxMDAwMDApCisJCQkJQkVHSU47CisJCQkJSU5TRVJUIElO VE8gdGJsIFZBTFVFUyhmbG9vcihyYW5kb20oKSo6bnVtKSwwLDAsMCxub3coKSxBUlJBWVtmbG9v cihyYW5kb20oKSoxMDApOjppbnRdLHBvaW50KHJhbmRvbSgpLHJhbmRvbSgpKSkKKwkJCQkJT04g Q09ORkxJQ1QoaSkgRE8gVVBEQVRFIFNFVCB1cGRhdGVkX2F0ID0gbm93KCksIGlhID0gQVJSQVlb Zmxvb3IocmFuZG9tKCkqMTAwKTo6aW50XSwgcCA9IHBvaW50KHJhbmRvbSgpLHJhbmRvbSgpKTsK KwkJCQlJTlNFUlQgSU5UTyB0YmwgVkFMVUVTKGZsb29yKHJhbmRvbSgpKjpudW0pLDAsMCwwLG5v dygpLEFSUkFZW2Zsb29yKHJhbmRvbSgpKjEwMCk6OmludF0scG9pbnQocmFuZG9tKCkscmFuZG9t KCkpKQorCQkJCQlPTiBDT05GTElDVChpKSBETyBVUERBVEUgU0VUIHVwZGF0ZWRfYXQgPSBub3co KSwgaWEgPSBBUlJBWVtmbG9vcihyYW5kb20oKSoxMDApOjppbnRdLCBwID0gcG9pbnQocmFuZG9t KCkscmFuZG9tKCkpOworCQkJCUlOU0VSVCBJTlRPIHRibCBWQUxVRVMoZmxvb3IocmFuZG9tKCkq Om51bSksMCwwLDAsbm93KCksQVJSQVlbZmxvb3IocmFuZG9tKCkqMTAwKTo6aW50XSxwb2ludChy YW5kb20oKSxyYW5kb20oKSkpCisJCQkJCU9OIENPTkZMSUNUKGkpIERPIFVQREFURSBTRVQgdXBk YXRlZF9hdCA9IG5vdygpLCBpYSA9IEFSUkFZW2Zsb29yKHJhbmRvbSgpKjEwMCk6OmludF0sIHAg PSBwb2ludChyYW5kb20oKSxyYW5kb20oKSk7CisJCQkJSU5TRVJUIElOVE8gdGJsIFZBTFVFUyhm bG9vcihyYW5kb20oKSo6bnVtKSwwLDAsMCxub3coKSxBUlJBWVtmbG9vcihyYW5kb20oKSoxMDAp OjppbnRdLHBvaW50KHJhbmRvbSgpLHJhbmRvbSgpKSkKKwkJCQkJT04gQ09ORkxJQ1QoaSkgRE8g VVBEQVRFIFNFVCB1cGRhdGVkX2F0ID0gbm93KCksIGlhID0gQVJSQVlbZmxvb3IocmFuZG9tKCkq MTAwKTo6aW50XSwgcCA9IHBvaW50KHJhbmRvbSgpLHJhbmRvbSgpKTsKKwkJCQlJTlNFUlQgSU5U TyB0YmwgVkFMVUVTKGZsb29yKHJhbmRvbSgpKjpudW0pLDAsMCwwLG5vdygpLEFSUkFZW2Zsb29y KHJhbmRvbSgpKjEwMCk6OmludF0scG9pbnQocmFuZG9tKCkscmFuZG9tKCkpKQorCQkJCQlPTiBD T05GTElDVChpKSBETyBVUERBVEUgU0VUIHVwZGF0ZWRfYXQgPSBub3coKSwgaWEgPSBBUlJBWVtm bG9vcihyYW5kb20oKSoxMDApOjppbnRdLCBwID0gcG9pbnQocmFuZG9tKCkscmFuZG9tKCkpOwor CQkJCVNFTEVDVCBzZXR2YWwoJ2luX3Jvd19yZWJ1aWxkJywgMSk7CisJCQkJQ09NTUlUOworCQkJ XGVuZGlmCisJCQkpLCAkbWF4X3NsZWVwX21zLCAkbWF4X3NsZWVwX21zKQorCX0pOworCiskbm9k ZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEoVFJVTkNBVEUgVEFCTEUgdGJsOykpOworCisjIFJ1 biBDSUMvUklDIGZvciB1bmlxdWUgaW5kZXggY29uY3VycmVudGx5IHdpdGggdXBzZXJ0cworJG5v ZGUtPnBnYmVuY2goCisJJHBnYmVuY2hfb3B0aW9ucywKKwkwLAorCVtxcnthY3R1YWxseSBwcm9j ZXNzZWR9XSwKKwlbcXJ7XiR9XSwKKwknY29uY3VycmVudCBvcGVyYXRpb25zIHdpdGggUkVJTkRF WC9DUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIGZvciB1bmlxdWUgQlRSRUUnLAorCXsKKwkJJ2Nv bmN1cnJlbnRfb3BzX3VuaXF1ZV9pZHgnID0+IHNwcmludGYocSgKKwkJCVNFTEVDVCBwZ190cnlf YWR2aXNvcnlfbG9jayg0Mik6OmludGVnZXIgQVMgZ290bG9jayBcZ3NldAorCQkJXGlmIDpnb3Rs b2NrCisJCQkJU0VMRUNUIG5leHR2YWwoJ2luX3Jvd19yZWJ1aWxkJykgQVMgbGFzdF92YWx1ZSBc Z3NldAorCQkJCVxzZXQgcGFyYWxsZWxzIHJhbmRvbSgwLCA0KQorCQkJCVxzZXQgdXNlX3JyIHJh bmRvbSgwLCA5KQorCQkJCVxpZiA6bGFzdF92YWx1ZSA8IDMKKwkJCQkJQUxURVIgVEFCTEUgdGJs IFNFVCAocGFyYWxsZWxfd29ya2Vycz06cGFyYWxsZWxzKTsKKwkJCQkJXGlmIDp1c2VfcnIgPSAw CisJCQkJCQlTRVQgZGVmYXVsdF90cmFuc2FjdGlvbl9pc29sYXRpb24gPSAncmVwZWF0YWJsZSBy ZWFkJzsKKwkJCQkJXGVuZGlmCisJCQkJCUNSRUFURSBVTklRVUUgSU5ERVggQ09OQ1VSUkVOVExZ IG5ld19pZHggT04gdGJsKGkpOworCQkJCQlcc2V0IHNsZWVwX21zIHJhbmRvbSgwLCAlZCkKKwkJ CQkJXHNsZWVwIDpzbGVlcF9tcyBtcworCQkJCQlTRUxFQ1QgYnRfaW5kZXhfY2hlY2soJ25ld19p ZHgnLCBoZWFwYWxsaW5kZXhlZCA9PiB0cnVlLCBjaGVja3VuaXF1ZSA9PiB0cnVlKTsKKwkJCQkJ UkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgbmV3X2lkeDsKKwkJCQkJXHNldCBzbGVlcF9tcyBy YW5kb20oMCwgJWQpCisJCQkJCVxzbGVlcCA6c2xlZXBfbXMgbXMKKwkJCQkJU0VMRUNUIGJ0X2lu ZGV4X2NoZWNrKCduZXdfaWR4JywgaGVhcGFsbGluZGV4ZWQgPT4gdHJ1ZSwgY2hlY2t1bmlxdWUg PT4gdHJ1ZSk7CisJCQkJCURST1AgSU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHg7CisJCQkJCVJF U0VUIGRlZmF1bHRfdHJhbnNhY3Rpb25faXNvbGF0aW9uOworCQkJCVxlbmRpZgorCQkJCVNFTEVD VCBwZ19hZHZpc29yeV91bmxvY2soNDIpOworCQkJXGVsc2UKKwkJCQlcc2V0IG51bSByYW5kb20o MSwgcG93ZXIoMTAsIHJhbmRvbSgxLCA1KSkpCisJCQkJSU5TRVJUIElOVE8gdGJsIFZBTFVFUyhm bG9vcihyYW5kb20oKSo6bnVtKSwwLDAsMCxub3coKSxBUlJBWVtmbG9vcihyYW5kb20oKSoxMDAp OjppbnRdLHBvaW50KHJhbmRvbSgpLHJhbmRvbSgpKSkKKwkJCQkJT04gQ09ORkxJQ1QoaSkgRE8g VVBEQVRFIFNFVCB1cGRhdGVkX2F0ID0gbm93KCksIGlhID0gQVJSQVlbZmxvb3IocmFuZG9tKCkq MTAwKTo6aW50XSwgcCA9IHBvaW50KHJhbmRvbSgpLHJhbmRvbSgpKTsKKwkJCQlTRUxFQ1Qgc2V0 dmFsKCdpbl9yb3dfcmVidWlsZCcsIDEpOworCQkJXGVuZGlmCisJCQkpLCAkbWF4X3NsZWVwX21z LCAkbWF4X3NsZWVwX21zKQorCX0pOworCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEo VFJVTkNBVEUgVEFCTEUgdGJsOykpOworCisjIFJ1biBDSUMvUklDIGZvciBHSU4gd2l0aCB1cHNl cnRzCiskbm9kZS0+cGdiZW5jaCgKKwkkcGdiZW5jaF9vcHRpb25zLAorCTAsCisJW3Fye2FjdHVh bGx5IHByb2Nlc3NlZH1dLAorCVtxcnteJH1dLAorCSdjb25jdXJyZW50IG9wZXJhdGlvbnMgd2l0 aCBSRUlOREVYL0NSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgZm9yIEdJTicsCisJeworCQknY29u Y3VycmVudF9vcHNfZ2luX2lkeCcgPT4gc3ByaW50ZihxKAorCQkJU0VMRUNUIHBnX3RyeV9hZHZp c29yeV9sb2NrKDQyKTo6aW50ZWdlciBBUyBnb3Rsb2NrIFxnc2V0CisJCQlcaWYgOmdvdGxvY2sK KwkJCQlTRUxFQ1QgbmV4dHZhbCgnaW5fcm93X3JlYnVpbGQnKSBBUyBsYXN0X3ZhbHVlIFxnc2V0 CisJCQkJXHNldCBwYXJhbGxlbHMgcmFuZG9tKDAsIDQpCisJCQkJXHNldCB1c2VfcnIgcmFuZG9t KDAsIDkpCisJCQkJXGlmIDpsYXN0X3ZhbHVlIDwgMworCQkJCQlBTFRFUiBUQUJMRSB0YmwgU0VU IChwYXJhbGxlbF93b3JrZXJzPTpwYXJhbGxlbHMpOworCQkJCQlcaWYgOnVzZV9yciA9IDAKKwkJ CQkJCVNFVCBkZWZhdWx0X3RyYW5zYWN0aW9uX2lzb2xhdGlvbiA9ICdyZXBlYXRhYmxlIHJlYWQn OworCQkJCQlcZW5kaWYKKwkJCQkJQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4IE9O IHRibCBVU0lORyBHSU4gKGlhKTsKKwkJCQkJXHNldCBzbGVlcF9tcyByYW5kb20oMCwgJWQpCisJ CQkJCVxzbGVlcCA6c2xlZXBfbXMgbXMKKwkJCQkJU0VMRUNUIGdpbl9pbmRleF9jaGVjaygnbmV3 X2lkeCcpOworCQkJCQlSRUlOREVYIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4OworCQkJCQlc c2V0IHNsZWVwX21zIHJhbmRvbSgwLCAlZCkKKwkJCQkJXHNsZWVwIDpzbGVlcF9tcyBtcworCQkJ CQlTRUxFQ1QgZ2luX2luZGV4X2NoZWNrKCduZXdfaWR4Jyk7CisJCQkJCURST1AgSU5ERVggQ09O Q1VSUkVOVExZIG5ld19pZHg7CisJCQkJCVJFU0VUIGRlZmF1bHRfdHJhbnNhY3Rpb25faXNvbGF0 aW9uOworCQkJCVxlbmRpZgorCQkJCVNFTEVDVCBwZ19hZHZpc29yeV91bmxvY2soNDIpOworCQkJ XGVsc2UKKwkJCQlcc2V0IG51bSByYW5kb20oMSwgcG93ZXIoMTAsIHJhbmRvbSgxLCA1KSkpCisJ CQkJSU5TRVJUIElOVE8gdGJsIFZBTFVFUyhmbG9vcihyYW5kb20oKSo6bnVtKSwwLDAsMCxub3co KSxBUlJBWVtmbG9vcihyYW5kb20oKSoxMDApOjppbnRdLHBvaW50KHJhbmRvbSgpLHJhbmRvbSgp KSkKKwkJCQkJT04gQ09ORkxJQ1QoaSkgRE8gVVBEQVRFIFNFVCB1cGRhdGVkX2F0ID0gbm93KCks IGlhID0gQVJSQVlbZmxvb3IocmFuZG9tKCkqMTAwKTo6aW50XSwgcCA9IHBvaW50KHJhbmRvbSgp LHJhbmRvbSgpKTsKKwkJCQlTRUxFQ1Qgc2V0dmFsKCdpbl9yb3dfcmVidWlsZCcsIDEpOworCQkJ XGVuZGlmCisJCQkpLCAkbWF4X3NsZWVwX21zLCAkbWF4X3NsZWVwX21zKQorCX0pOworCiskbm9k ZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEoVFJVTkNBVEUgVEFCTEUgdGJsOykpOworCisjIFJ1 biBDSUMvUklDIGZvciBHSVNUL0JSSU4vSEFTSC9TUEdJU1QgaW5kZXggY29uY3VycmVudGx5IHdp dGggdXBzZXJ0cworJG5vZGUtPnBnYmVuY2goCisJJHBnYmVuY2hfb3B0aW9ucywKKwkwLAorCVtx cnthY3R1YWxseSBwcm9jZXNzZWR9XSwKKwlbcXJ7XiR9XSwKKwknY29uY3VycmVudCBvcGVyYXRp b25zIHdpdGggUkVJTkRFWC9DUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIGZvciBHSVNUL0JSSU4v SEFTSC9TUEdJU1QnLAorCXsKKwkJJ2NvbmN1cnJlbnRfb3BzX290aGVyX2lkeCcgPT4gc3ByaW50 ZihxKAorCQkJU0VMRUNUIHBnX3RyeV9hZHZpc29yeV9sb2NrKDQyKTo6aW50ZWdlciBBUyBnb3Rs b2NrIFxnc2V0CisJCQlcaWYgOmdvdGxvY2sKKwkJCQlTRUxFQ1QgbmV4dHZhbCgnaW5fcm93X3Jl YnVpbGQnKSBBUyBsYXN0X3ZhbHVlIFxnc2V0CisJCQkJXHNldCBwYXJhbGxlbHMgcmFuZG9tKDAs IDQpCisJCQkJXHNldCB1c2VfcnIgcmFuZG9tKDAsIDkpCisJCQkJXGlmIDpsYXN0X3ZhbHVlIDwg MworCQkJCQlBTFRFUiBUQUJMRSB0YmwgU0VUIChwYXJhbGxlbF93b3JrZXJzPTpwYXJhbGxlbHMp OworCQkJCQlcaWYgOnVzZV9yciA9IDAKKwkJCQkJCVNFVCBkZWZhdWx0X3RyYW5zYWN0aW9uX2lz b2xhdGlvbiA9ICdyZXBlYXRhYmxlIHJlYWQnOworCQkJCQlcZW5kaWYKKwkJCQkJXHNldCB2YXJp YW50IHJhbmRvbSgwLCAzKQorCQkJCQlcaWYgOnZhcmlhbnQgPSAwCisJCQkJCQlDUkVBVEUgSU5E RVggQ09OQ1VSUkVOVExZIG5ld19pZHggT04gdGJsIFVTSU5HIEdJU1QgKHApOworCQkJCQlcZWxp ZiA6dmFyaWFudCA9IDEKKwkJCQkJCUNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgbmV3X2lkeCBP TiB0YmwgVVNJTkcgQlJJTiAodXBkYXRlZF9hdCk7CisJCQkJCVxlbGlmIDp2YXJpYW50ID0gMgor CQkJCQkJQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4IE9OIHRibCBVU0lORyBIQVNI ICh1cGRhdGVkX2F0KTsKKwkJCQkJXGVsaWYgOnZhcmlhbnQgPSAzCisJCQkJCQlDUkVBVEUgSU5E RVggQ09OQ1VSUkVOVExZIG5ld19pZHggT04gdGJsIFVTSU5HIFNQR0lTVCAocCk7CisJCQkJCVxl bmRpZgorCQkJCQlcc2V0IHNsZWVwX21zIHJhbmRvbSgwLCAlZCkKKwkJCQkJXHNsZWVwIDpzbGVl cF9tcyBtcworCQkJCQlSRUlOREVYIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4OworCQkJCQlc c2V0IHNsZWVwX21zIHJhbmRvbSgwLCAlZCkKKwkJCQkJXHNsZWVwIDpzbGVlcF9tcyBtcworCQkJ CQlEUk9QIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4OworCQkJCQlSRVNFVCBkZWZhdWx0X3Ry YW5zYWN0aW9uX2lzb2xhdGlvbjsKKwkJCQlcZW5kaWYKKwkJCQlTRUxFQ1QgcGdfYWR2aXNvcnlf dW5sb2NrKDQyKTsKKwkJCVxlbHNlCisJCQkJXHNldCBudW0gcmFuZG9tKDEsIHBvd2VyKDEwLCBy YW5kb20oMSwgNSkpKQorCQkJCUlOU0VSVCBJTlRPIHRibCBWQUxVRVMoZmxvb3IocmFuZG9tKCkq Om51bSksMCwwLDAsbm93KCksQVJSQVlbZmxvb3IocmFuZG9tKCkqMTAwKTo6aW50XSxwb2ludChy YW5kb20oKSxyYW5kb20oKSkpCisJCQkJCU9OIENPTkZMSUNUKGkpIERPIFVQREFURSBTRVQgdXBk YXRlZF9hdCA9IG5vdygpLCBpYSA9IEFSUkFZW2Zsb29yKHJhbmRvbSgpKjEwMCk6OmludF0sIHAg PSBwb2ludChyYW5kb20oKSxyYW5kb20oKSk7CisJCQkJU0VMRUNUIHNldHZhbCgnaW5fcm93X3Jl YnVpbGQnLCAxKTsKKwkJCVxlbmRpZgorCQkJKSwgJG1heF9zbGVlcF9tcywgJG1heF9zbGVlcF9t cykKKwkJfSk7CisKKyRub2RlLT5zdG9wOworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjQzLjAKCg== --000000000000a3b825064f322697 Content-Type: application/octet-stream; name="v35-0006-Optimize-auxiliary-index-handling.patch" Content-Disposition: attachment; filename="v35-0006-Optimize-auxiliary-index-handling.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnuipbjk5 RnJvbSBmZTVkYzcyOGJmMGIwMDM4OGQyNDRhOGQ2MTQxYjU3Mjk5ZDliMzI3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAzMCBEZWMgMjAyNCAxNjozNzoxMiArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjM1IDYvN10gT3B0aW1pemUgYXV4aWxpYXJ5IGluZGV4IGhhbmRsaW5nCgpTa2lwIHVu bmVjZXNzYXJ5IGNvbXB1dGF0aW9ucyBmb3IgYXV4aWxpYXJ5IGluZGljZXMgYnk6Ci0gaW4gdGhl IGluZGV4LWluc2VydCBwYXRoLCBkZXRlY3QgYXV4aWxpYXJ5IGluZGV4ZXMgYW5kIGJ5cGFzcyBE YXR1bSB2YWx1ZSBjb21wdXRhdGlvbgotIHNldCBpbmRleFVuY2hhbmdlZD1mYWxzZSBmb3IgYXV4 aWxpYXJ5IGluZGljZXMgdG8gYXZvaWQgcmVkdW5kYW50IGNoZWNrcwoKVGhlc2Ugb3B0aW1pemF0 aW9ucyByZWR1Y2Ugb3ZlcmhlYWQgZHVyaW5nIGNvbmN1cnJlbnQgaW5kZXggb3BlcmF0aW9ucy4K LS0tCiBzcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMgICAgICAgICB8IDkgKysrKysrKysrCiBz cmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyB8IDUgKysrKy0KIHNyYy9pbmNsdWRl L25vZGVzL2V4ZWNub2Rlcy5oICAgICAgIHwgNiArKysrLS0KIDMgZmlsZXMgY2hhbmdlZCwgMTcg aW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j YXRhbG9nL2luZGV4LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKaW5kZXggOTEzNmRm YzdjNzMuLjRlZGY2OGFjZWQyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4 LmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCkBAIC0yOTQwLDYgKzI5NDAsMTUg QEAgRm9ybUluZGV4RGF0dW0oSW5kZXhJbmZvICppbmRleEluZm8sCiAJTGlzdENlbGwgICAqaW5k ZXhwcl9pdGVtOwogCWludAkJCWk7CiAKKwkvKiBBdXhpbGlhcnkgaW5kZXggZG9lcyBub3QgbmVl ZCBhbnkgdmFsdWVzIHRvIGJlIGNvbXB1dGVkICovCisJaWYgKHVubGlrZWx5KGluZGV4SW5mby0+ aWlfQXV4aWxpYXJ5KSkKKwl7CisJCUFzc2VydChpbmRleEluZm8tPmlpX0FtID09IFNUSVJfQU1f T0lEKTsKKwkJbWVtc2V0KHZhbHVlcywgMCwgc2l6ZW9mKERhdHVtKSAqIGluZGV4SW5mby0+aWlf TnVtSW5kZXhBdHRycyk7CisJCW1lbXNldChpc251bGwsIHRydWUsIHNpemVvZihib29sKSAqIGlu ZGV4SW5mby0+aWlfTnVtSW5kZXhBdHRycyk7CisJCXJldHVybjsKKwl9CisKIAlpZiAoaW5kZXhJ bmZvLT5paV9FeHByZXNzaW9ucyAhPSBOSUwgJiYKIAkJaW5kZXhJbmZvLT5paV9FeHByZXNzaW9u c1N0YXRlID09IE5JTCkKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj SW5kZXhpbmcuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCmluZGV4IGVi MzgzODEyOTAxLi4yZGY3N2EwNjA2ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY0luZGV4aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMK QEAgLTQzOSw4ICs0MzksMTEgQEAgRXhlY0luc2VydEluZGV4VHVwbGVzKFJlc3VsdFJlbEluZm8g KnJlc3VsdFJlbEluZm8sCiAJCSAqIFRoZXJlJ3MgZGVmaW5pdGVseSBnb2luZyB0byBiZSBhbiBp bmRleF9pbnNlcnQoKSBjYWxsIGZvciB0aGlzCiAJCSAqIGluZGV4LiAgSWYgd2UncmUgYmVpbmcg Y2FsbGVkIGFzIHBhcnQgb2YgYW4gVVBEQVRFIHN0YXRlbWVudCwKIAkJICogY29uc2lkZXIgaWYg dGhlICdpbmRleFVuY2hhbmdlZCcgPSB0cnVlIGhpbnQgc2hvdWxkIGJlIHBhc3NlZC4KKwkJICoK KwkJICogRm9yIGF1eGlsaWFyeSBpbmRleGVzLCBhbHdheXMgcGFzcyBmYWxzZSB0byBza2lwIHZh bHVlIGNvbXBhcmlzb24gY2hlY2tzLAorCQkgKiBzaW5jZSBhdXhpbGlhcnkgaW5kZXhlcyBvbmx5 IHN0b3JlIFRJRHMgYW5kIGRvbid0IHRyYWNrIHZhbHVlIGNoYW5nZXMuCiAJCSAqLwotCQlpbmRl eFVuY2hhbmdlZCA9ICgoZmxhZ3MgJiBFSUlUX0lTX1VQREFURSkgJiYKKwkJaW5kZXhVbmNoYW5n ZWQgPSAoKGZsYWdzICYgRUlJVF9JU19VUERBVEUpICYmICFpbmRleEluZm8tPmlpX0F1eGlsaWFy eSAmJgogCQkJCQkJICBpbmRleF91bmNoYW5nZWRfYnlfdXBkYXRlKHJlc3VsdFJlbEluZm8sCiAJ CQkJCQkJCQkJCQkJZXN0YXRlLAogCQkJCQkJCQkJCQkJCWluZGV4SW5mbywKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25v ZGVzLmgKaW5kZXggYWY1OGQ0Y2Y0YjUuLjk5OTE2ZTE1MGZkIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMu aApAQCAtMTY5LDggKzE2OSwxMCBAQCB0eXBlZGVmIHN0cnVjdCBFeHByU3RhdGUKICAqCQllbnRy aWVzIGZvciBhIHBhcnRpY3VsYXIgaW5kZXguICBVc2VkIGZvciBib3RoIGluZGV4X2J1aWxkIGFu ZAogICoJCXJldGFpbCBjcmVhdGlvbiBvZiBpbmRleCBlbnRyaWVzLgogICoKLSAqIGlpX0NvbmN1 cnJlbnQsIGlpX0Jyb2tlbkhvdENoYWluLCBpaV9BdXhpbGlhcnkgYW5kIGlpX1BhcmFsbGVsV29y a2VycwotICogYXJlIHVzZWQgb25seSBkdXJpbmcgaW5kZXggYnVpbGQ7IHRoZXkncmUgY29udmVu dGlvbmFsbHkgemVyb2VkIG90aGVyd2lzZS4KKyAqIGlpX0NvbmN1cnJlbnQsIGlpX0Jyb2tlbkhv dENoYWluLCBhbmQgaWlfUGFyYWxsZWxXb3JrZXJzIGFyZSB1c2VkIG9ubHkKKyAqIGR1cmluZyBp bmRleCBidWlsZDsgdGhleSdyZSBjb252ZW50aW9uYWxseSB6ZXJvZWQgb3RoZXJ3aXNlLiAgaWlf QXV4aWxpYXJ5CisgKiBpcyBhbHNvIHVzZWQgZHVyaW5nIHJldGFpbCBpbnNlcnRzIHRvIHNraXAg ZGF0dW0gZm9ybWF0aW9uIGZvciBhdXhpbGlhcnkKKyAqIGluZGV4ZXMuCiAgKiAtLS0tLS0tLS0t LS0tLS0tCiAgKi8KIHR5cGVkZWYgc3RydWN0IEluZGV4SW5mbwotLSAKMi40My4wCgo= --000000000000a3b825064f322697 Content-Type: application/octet-stream; name="v35-0007-Refresh-snapshot-periodically-during-index-valid.patch" Content-Disposition: attachment; filename="v35-0007-Refresh-snapshot-periodically-during-index-valid.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnuipbjm6 RnJvbSA1YTdlZWE0MWFhMzM1YjM1OTJmODNiNmY4ZmI3MDFlMzU3YzQ3ZTZiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAyMSBBcHIgMjAyNSAxNDoxMTo1MyArMDIwMApTdWJqZWN0OiBb UEFUQ0ggdjM1IDcvN10gUmVmcmVzaCBzbmFwc2hvdCBwZXJpb2RpY2FsbHkgZHVyaW5nIGluZGV4 IHZhbGlkYXRpb24KCkVuaGFuY2VzIHZhbGlkYXRpb24gcGhhc2Ugb2YgY29uY3VycmVudGx5IGJ1 aWx0IGluZGV4ZXMgYnkgcGVyaW9kaWNhbGx5IHJlZnJlc2hpbmcgc25hcHNob3RzIHJhdGhlciB0 aGFuIHVzaW5nIGEgc2luZ2xlIHJlZmVyZW5jZSBzbmFwc2hvdC4gVGhpcyBhZGRyZXNzZXMgaXNz dWVzIHdpdGggeG1pbiBwcm9wYWdhdGlvbiBkdXJpbmcgbG9uZy1ydW5uaW5nIHZhbGlkYXRpb25z LgoKVGhlIHZhbGlkYXRpb24gbm93IHRha2VzIGEgZnJlc2ggc25hcHNob3QgZXZlcnkgZmV3IHBh Z2VzLCBhbGxvd2luZyB0aGUgeG1pbiBob3Jpem9uIHRvIGFkdmFuY2UuIFRoaXMgcmVzdG9yZXMg ZmVhdHVyZSBvZiBjb21taXQgZDlkMDc2MjIyZjViLCB3aGljaCB3YXMgcmV2ZXJ0ZWQgaW4gY29t bWl0IGUyOGJiODg1MTk2OS4gTmV3IFNUSVItYmFzZWQgYXBwcm9hY2ggZG9lcyBub3QgZGVwZW5k IG9uIHNpbmdsZSByZWZlcmVuY2Ugc25hcHNob3QgYW55bW9yZS4KLS0tCiBzcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9SRUFETUUuSE9UICAgICAgICAgfCAgNCArLQogc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2hhbmRsZXIuYyAgIHwgNzcgKysrKysrKysrKysrKysrKysrKysrLQogc3Jj L2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWN1dW0uYyAgICAgIHwgMTIgKysrLQogc3JjL2Jh Y2tlbmQvY2F0YWxvZy9pbmRleC5jICAgICAgICAgICAgICAgIHwgNzMgKysrKysrKysrKysrKysr LS0tLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jICAgICAgICAgICB8IDUyICsr Ky0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQg IHwgIDkgKysrCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAgICAgICAgICAgfCAy NSArKysrLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdHJhbnNhbS5oICAgICAgICAgICAgICAgfCAx NSArKysrKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oICAgICAgICAgICAgICAgIHwgIDIg Ky0KIHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgICAgICAgICB8ICAxICsKIHNy Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dCB8ICAzICsKIHNyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwgICAgICB8ICA0ICsrCiAxMiBmaWxlcyBjaGFu Z2VkLCAxOTQgaW5zZXJ0aW9ucygrKSwgODMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvUkVBRE1FLkhPVCBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L1JFQURNRS5IT1QKaW5kZXggYjFjNzk3NTE3ZWUuLjM4MmZlMTcyM2E1IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9SRUFETUUuSE9UCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL1JFQURNRS5IT1QKQEAgLTQwMSwxMiArNDAxLDEyIEBAIGxpdmUgdHVwbGUuCiBXZSBt YXJrIHRoZSBpbmRleCBvcGVuIGZvciBpbnNlcnRzIChidXQgc3RpbGwgbm90IHJlYWR5IGZvciBy ZWFkcykgdGhlbgogd2UgYWdhaW4gd2FpdCBmb3IgdHJhbnNhY3Rpb25zIHdoaWNoIGhhdmUgdGhl IHRhYmxlIG9wZW4uICBUaGVuIHZhbGlkYXRlCiB0aGUgaW5kZXguICBUaGlzIHNlYXJjaGVzIGZv ciB0dXBsZXMgbWlzc2luZyBmcm9tIHRoZSBpbmRleCBpbiBhdXhpbGlhcnkKLWluZGV4LCBhbmQg aW5zZXJ0cyBhbnkgbWlzc2luZyBvbmVzIGlmIHRoZXkgYXJlIHZpc2libGUgdG8gcmVmZXJlbmNl IHNuYXBzaG90LgoraW5kZXgsIGFuZCBpbnNlcnRzIGFueSBtaXNzaW5nIG9uZXMgaWYgdGhleSBh cmUgdmlzaWJsZSB0byBhIGZyZXNoIHNuYXBzaG90LgogQWdhaW4sIHRoZSBpbmRleCBlbnRyaWVz IGhhdmUgdG8gaGF2ZSBUSURzIGVxdWFsIHRvIEhPVC1jaGFpbiByb290IFRJRHMsIGJ1dAogdGhl IHZhbHVlIHRvIGJlIGluc2VydGVkIGlzIHRoZSBvbmUgZnJvbSB0aGUgbGl2ZSB0dXBsZS4KIAog VGhlbiB3ZSB3YWl0IHVudGlsIGV2ZXJ5IHRyYW5zYWN0aW9uIHRoYXQgY291bGQgaGF2ZSBhIHNu YXBzaG90IG9sZGVyIHRoYW4KLXRoZSBzZWNvbmQgcmVmZXJlbmNlIHNuYXBzaG90IGlzIGZpbmlz aGVkLiAgVGhpcyBlbnN1cmVzIHRoYXQgbm9ib2R5IGlzCit0aGUgbGF0ZXN0IHVzZWQgc25hcHNo b3QgaXMgZmluaXNoZWQuICBUaGlzIGVuc3VyZXMgdGhhdCBub2JvZHkgaXMKIGFsaXZlIGFueSBs b25nZXIgd2hvIGNvdWxkIG5lZWQgdG8gc2VlIGFueSB0dXBsZXMgdGhhdCBtaWdodCBiZSBtaXNz aW5nCiBmcm9tIHRoZSBpbmRleCwgYXMgd2VsbCBhcyBlbnN1cmluZyB0aGF0IG5vIG9uZSBjYW4g c2VlIGFueSBpbmNvbnNpc3RlbnQKIHJvd3MgaW4gYSBicm9rZW4gSE9UIGNoYWluICh0aGUgZmly c3QgY29uZGl0aW9uIGlzIHN0cm9uZ2VyIHRoYW4gdGhlCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2hhbmRsZXIuYwppbmRleCA4Y2JjNDg1NTA3OC4uNjU3MzEyMjQxMTEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtNTMsNiArNTMsOSBAQAogLyog R1VDOiBwZXJjZW50YWdlIG9mIG1haW50ZW5hbmNlX3dvcmtfbWVtIGZvciBDSUMgdmFsaWRhdGlv biB0dXBsZXN0b3JlICovCiBpbnQJCQlkZWJ1Z19jaWNfdmFsaWRhdGVfc3RvcmVfbWVtX3BjdCA9 IDEwOwogCisvKiBHVUM6IHJlZnJlc2ggc25hcHNob3QgZXZlcnkgTiBwYWdlcyBkdXJpbmcgQ0lD IHZhbGlkYXRpb24gKDAgPSBkaXNhYmxlKSAqLworaW50CQkJZGVidWdfY2ljX3ZhbGlkYXRlX3Nu YXBzaG90X3BhZ2VzID0gNDA5NjsKKwogc3RhdGljIHZvaWQgcmVmb3JtX2FuZF9yZXdyaXRlX3R1 cGxlKEhlYXBUdXBsZSB0dXBsZSwKIAkJCQkJCQkJCSBSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlv biBOZXdIZWFwLAogCQkJCQkJCQkJIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwgUmV3cml0 ZVN0YXRlIHJ3c3RhdGUpOwpAQCAtMTk3MSwyNCArMTk3NCwzNSBAQCBoZWFwYW1faW5kZXhfdmFs aWRhdGVfc2Nhbl9yZWFkX3N0cmVhbV9uZXh0KAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRp YyB2b2lkCitzdGF0aWMgVHJhbnNhY3Rpb25JZAogaGVhcGFtX2luZGV4X3ZhbGlkYXRlX3NjYW4o UmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJICAgUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwK IAkJCQkJCSAgIEluZGV4SW5mbyAqaW5kZXhJbmZvLAotCQkJCQkJICAgU25hcHNob3Qgc25hcHNo b3QsCiAJCQkJCQkgICBWYWxpZGF0ZUluZGV4U3RhdGUgKnN0YXRlLAogCQkJCQkJICAgVmFsaWRh dGVJbmRleFN0YXRlICphdXhTdGF0ZSkKIHsKKwlUcmFuc2FjdGlvbklkIGxpbWl0WG1pbjsKKwog CURhdHVtCQl2YWx1ZXNbSU5ERVhfTUFYX0tFWVNdOwogCWJvb2wJCWlzbnVsbFtJTkRFWF9NQVhf S0VZU107CiAKKwlTbmFwc2hvdAkJc25hcHNob3Q7CiAJVHVwbGVUYWJsZVNsb3QgICpzbG90Owog CUVTdGF0ZQkJCSplc3RhdGU7CiAJRXhwckNvbnRleHQJCSplY29udGV4dDsKIAlCdWZmZXJBY2Nl c3NTdHJhdGVneSBic3RyYXRlZ3kgPSBHZXRBY2Nlc3NTdHJhdGVneShCQVNfQlVMS1JFQUQpOwog CiAJaW50NjQJCQludW1fdG9fY2hlY2s7CisJaW50NjQJCQlwYWdlX3JlYWRfY291bnRlciA9IDE7 IC8qIHNldCB0byAxIHRvIHNraXAgc25hcHNob3QgcmVzZXQgYXQgc3RhcnQgKi8KIAlUdXBsZXN0 b3Jlc3RhdGUgKnR1cGxlc19mb3JfY2hlY2s7CisKKwkvKgorCSAqIFVuZGVyIFJFUEVBVEFCTEUg UkVBRCBvciBTRVJJQUxJWkFCTEUgKHBvc3NpYmxlIHZpYQorCSAqIGRlZmF1bHRfdHJhbnNhY3Rp b25faXNvbGF0aW9uKSwgR2V0TGF0ZXN0U25hcHNob3QoKSByZXR1cm5zIHRoZQorCSAqIHRyYW5z YWN0aW9uLWxldmVsIHNuYXBzaG90IGFuZCB4bWluIHN0YXlzIHBpbm5lZC4gIFBlcmlvZGljIHNu YXBzaG90CisJICogcmVmcmVzaCBpcyBwb2ludGxlc3MgaW4gdGhhdCBjYXNlLCBzbyBza2lwIGl0 LgorCSAqLworCWJvb2wJCXJlc2V0X3NuYXBzaG90ID0gWGFjdElzb0xldmVsIDw9IFhBQ1RfUkVB RF9DT01NSVRURUQ7CiAJVmFsaWRhdGVJbmRleFNjYW5TdGF0ZSBjYWxsYmFja19wcml2YXRlX2Rh dGE7CiAKIAlCdWZmZXIgYnVmOwpAQCAtMTk5OCw2ICsyMDEyLDggQEAgaGVhcGFtX2luZGV4X3Zh bGlkYXRlX3NjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCS8qIFVzZSBhIHBlcmNlbnRhZ2Ug b2YgbWFpbnRlbmFuY2Vfd29ya19tZW0gZm9yIHR1cGxlIHN0b3JlLiAqLwogCWludAkJc3RvcmVf d29ya19tZW1fcGFydCA9IG1haW50ZW5hbmNlX3dvcmtfbWVtICogZGVidWdfY2ljX3ZhbGlkYXRl X3N0b3JlX21lbV9wY3QgLyAxMDA7CiAKKwlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rp b25TbmFwc2hvdCgpKTsKKwogCS8qCiAJICogRW5jb2RlIFRJRHMgYXMgaW50OCB2YWx1ZXMgZm9y IHRoZSBzb3J0LCByYXRoZXIgdGhhbiBkaXJlY3RseSBzb3J0aW5nCiAJICogaXRlbSBwb2ludGVy cy4gIFRoaXMgY2FuIGJlIHNpZ25pZmljYW50bHkgZmFzdGVyLCBwcmltYXJpbHkgYmVjYXVzZSBU SUQKQEAgLTIwMDYsNiArMjAyMiwxMiBAQCBoZWFwYW1faW5kZXhfdmFsaWRhdGVfc2NhbihSZWxh dGlvbiBoZWFwUmVsYXRpb24sCiAJICovCiAJdHVwbGVzX2Zvcl9jaGVjayA9IHR1cGxlc3RvcmVf YmVnaW5fZGF0dW0oSU5UOE9JRCwgZmFsc2UsIGZhbHNlLCBzdG9yZV93b3JrX21lbV9wYXJ0KTsK IAorCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisJSW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdCgpOwor CisJQXNzZXJ0KCFyZXNldF9zbmFwc2hvdCB8fCAhSGF2ZVJlZ2lzdGVyZWRPckFjdGl2ZVNuYXBz aG90KCkpOworCUFzc2VydCghcmVzZXRfc25hcHNob3QgfHwgIVRyYW5zYWN0aW9uSWRJc1ZhbGlk KE15UHJvYy0+eG1pbikpOworCiAJLyoKIAkgKiBzYW5pdHkgY2hlY2tzCiAJICovCkBAIC0yMDIx LDYgKzIwNDMsMjkgQEAgaGVhcGFtX2luZGV4X3ZhbGlkYXRlX3NjYW4oUmVsYXRpb24gaGVhcFJl bGF0aW9uLAogCiAJc3RhdGUtPnR1cGxlc29ydCA9IGF1eFN0YXRlLT50dXBsZXNvcnQgPSBOVUxM OwogCisJLyoKKwkgKiBOb3cgdGFrZSB0aGUgZmlyc3Qgc25hcHNob3QgdGhhdCB3aWxsIGJlIHVz ZWQgdG8gZmlsdGVyIGNhbmRpZGF0ZQorCSAqIHR1cGxlcy4gV2UgYXJlIGdvaW5nIHRvIHJlcGxh Y2UgaXQgYnkgbmV3ZXIgc25hcHNob3QgZXZlcnkgc28gb2Z0ZW4KKwkgKiB0byBwcm9wYWdhdGUg aG9yaXpvbi4KKwkgKgorCSAqIEJld2FyZSEgIFRoZXJlIG1pZ2h0IHN0aWxsIGJlIHNuYXBzaG90 cyBpbiB1c2UgdGhhdCB0cmVhdCBzb21lIHRyYW5zYWN0aW9uCisJICogYXMgaW4tcHJvZ3Jlc3Mg dGhhdCBvdXIgdGVtcG9yYXJ5IHNuYXBzaG90IHRyZWF0cyBhcyBjb21taXR0ZWQuCisJICoKKwkg KiBJZiBzdWNoIGEgcmVjZW50bHktY29tbWl0dGVkIHRyYW5zYWN0aW9uIGRlbGV0ZWQgdHVwbGVz IGluIHRoZSB0YWJsZSwKKwkgKiB3ZSB3aWxsIG5vdCBpbmNsdWRlIHRoZW0gaW4gdGhlIGluZGV4 OyB5ZXQgdGhvc2UgdHJhbnNhY3Rpb25zIHdoaWNoCisJICogc2VlIHRoZSBkZWxldGluZyBvbmUg YXMgc3RpbGwtaW4tcHJvZ3Jlc3Mgd2lsbCBleHBlY3Qgc3VjaCB0dXBsZXMgdG8KKwkgKiBiZSB0 aGVyZSBvbmNlIHdlIG1hcmsgdGhlIGluZGV4IGFzIHZhbGlkLgorCSAqCisJICogV2Ugc29sdmUg dGhpcyBieSB3YWl0aW5nIGZvciBhbGwgZW5kYW5nZXJlZCB0cmFuc2FjdGlvbnMgdG8gZXhpdCBi ZWZvcmUKKwkgKiB3ZSBtYXJrIHRoZSBpbmRleCBhcyB2YWxpZCwgZm9yIHRoYXQgcmVhc29uIGxp bWl0WG1pbiBpcyBzdXBwb3J0ZWQuCisJICoKKwkgKiBXZSBhbHNvIHNldCBBY3RpdmVTbmFwc2hv dCB0byB0aGlzIHNuYXAsIHNpbmNlIGZ1bmN0aW9ucyBpbiBpbmRleGVzIG1heQorCSAqIG5lZWQg YSBzbmFwc2hvdC4KKwkgKi8KKwlzbmFwc2hvdCA9IFJlZ2lzdGVyU25hcHNob3QoR2V0TGF0ZXN0 U25hcHNob3QoKSk7CisJUHVzaEFjdGl2ZVNuYXBzaG90KHNuYXBzaG90KTsKKwlsaW1pdFhtaW4g PSBzbmFwc2hvdC0+eG1pbjsKKwogCWVzdGF0ZSA9IENyZWF0ZUV4ZWN1dG9yU3RhdGUoKTsKIAll Y29udGV4dCA9IEdldFBlclR1cGxlRXhwckNvbnRleHQoZXN0YXRlKTsKIAlzbG90ID0gTWFrZVNp bmdsZVR1cGxlVGFibGVTbG90KFJlbGF0aW9uR2V0RGVzY3IoaGVhcFJlbGF0aW9uKSwKQEAgLTIw NTQsNiArMjA5OSw3IEBAIGhlYXBhbV9pbmRleF92YWxpZGF0ZV9zY2FuKFJlbGF0aW9uIGhlYXBS ZWxhdGlvbiwKIAogCQlMb2NrQnVmZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOwogCQlibG9j a19udW1iZXIgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOworCQlwYWdlX3JlYWRfY291bnRl cisrOwogCiAJCWkgPSAwOwogCQl3aGlsZSAoKG9mZiA9IHR1cGxlc1tpXSkgIT0gSW52YWxpZE9m ZnNldE51bWJlcikKQEAgLTIxMjQsNiArMjE3MCwyMSBAQCBoZWFwYW1faW5kZXhfdmFsaWRhdGVf c2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCX0KIAogCQlSZWxlYXNlQnVmZmVyKGJ1Zik7 CisJCWlmIChyZXNldF9zbmFwc2hvdCAmJgorCQkJZGVidWdfY2ljX3ZhbGlkYXRlX3NuYXBzaG90 X3BhZ2VzID4gMCAmJgorCQkJcGFnZV9yZWFkX2NvdW50ZXIgJSBkZWJ1Z19jaWNfdmFsaWRhdGVf c25hcHNob3RfcGFnZXMgPT0gMCkKKwkJeworCQkJUG9wQWN0aXZlU25hcHNob3QoKTsKKwkJCVVu cmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CisJCQkvKiB0byBtYWtlIHN1cmUgd2UgcHJvcGFn YXRlIHhtaW4gKi8KKwkJCUludmFsaWRhdGVDYXRhbG9nU25hcHNob3QoKTsKKwkJCUFzc2VydCgh VHJhbnNhY3Rpb25JZElzVmFsaWQoTXlQcm9jLT54bWluKSk7CisKKwkJCXNuYXBzaG90ID0gUmVn aXN0ZXJTbmFwc2hvdChHZXRMYXRlc3RTbmFwc2hvdCgpKTsKKwkJCVB1c2hBY3RpdmVTbmFwc2hv dChzbmFwc2hvdCk7CisJCQkvKiBBZHZhbmNlIGxpbWl0WG1pbiBzbyB3ZSB3YWl0IGZvciBhbGwg c25hcHNob3RzIHNlZW4gc28gZmFyICovCisJCQlsaW1pdFhtaW4gPSBUcmFuc2FjdGlvbklkTmV3 ZXIobGltaXRYbWluLCBzbmFwc2hvdC0+eG1pbik7CisJCX0KIAl9CiAKIAlFeGVjRHJvcFNpbmds ZVR1cGxlVGFibGVTbG90KHNsb3QpOwpAQCAtMjEzMywxMSArMjE5NCwyMyBAQCBoZWFwYW1faW5k ZXhfdmFsaWRhdGVfc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJcmVhZF9zdHJlYW1fZW5k KHJlYWRfc3RyZWFtKTsKIAl0dXBsZXN0b3JlX2VuZCh0dXBsZXNfZm9yX2NoZWNrKTsKIAorCS8q CisJICogRHJvcCB0aGUgbGF0ZXN0IHNuYXBzaG90LiAgV2UgbXVzdCBkbyB0aGlzIGJlZm9yZSB3 YWl0aW5nIG91dCBvdGhlcgorCSAqIHNuYXBzaG90IGhvbGRlcnMsIGVsc2Ugd2Ugd2lsbCBkZWFk bG9jayBhZ2FpbnN0IG90aGVyIHByb2Nlc3NlcyBhbHNvCisJICogZG9pbmcgQ1JFQVRFIElOREVY IENPTkNVUlJFTlRMWSwgd2hpY2ggd291bGQgc2VlIG91ciBzbmFwc2hvdCBhcyBvbmUKKwkgKiB0 aGV5IG11c3Qgd2FpdCBmb3IuCisJICovCisJUG9wQWN0aXZlU25hcHNob3QoKTsKKwlVbnJlZ2lz dGVyU25hcHNob3Qoc25hcHNob3QpOworCUludmFsaWRhdGVDYXRhbG9nU25hcHNob3QoKTsKKwlB c3NlcnQoIXJlc2V0X3NuYXBzaG90IHx8IE15UHJvYy0+eG1pbiA9PSBJbnZhbGlkVHJhbnNhY3Rp b25JZCk7CiAJRnJlZUFjY2Vzc1N0cmF0ZWd5KGJzdHJhdGVneSk7CiAKIAkvKiBUaGVzZSBtYXkg aGF2ZSBiZWVuIHBvaW50aW5nIHRvIHRoZSBub3ctZ29uZSBlc3RhdGUgKi8KIAlpbmRleEluZm8t PmlpX0V4cHJlc3Npb25zU3RhdGUgPSBOSUw7CiAJaW5kZXhJbmZvLT5paV9QcmVkaWNhdGVTdGF0 ZSA9IE5VTEw7CisKKwlyZXR1cm4gbGltaXRYbWluOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWN1dW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9z cGdpc3Qvc3BndmFjdXVtLmMKaW5kZXggYzQ2MWY4ZGMwMmQuLmVmMTkyZmI5OWMyIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3ZhY3V1bS5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndmFjdXVtLmMKQEAgLTE5MSwxNCArMTkxLDE2IEBAIHZhY3V1 bUxlYWZQYWdlKHNwZ0J1bGtEZWxldGVTdGF0ZSAqYmRzLCBSZWxhdGlvbiBpbmRleCwgQnVmZmVy IGJ1ZmZlciwKIAkJCSAqIEFkZCB0YXJnZXQgVElEIHRvIHBlbmRpbmcgbGlzdCBpZiB0aGUgcmVk aXJlY3Rpb24gY291bGQgaGF2ZQogCQkJICogaGFwcGVuZWQgc2luY2UgVkFDVVVNIHN0YXJ0ZWQu ICAoSWYgeGlkIGlzIGludmFsaWQsIGFzc3VtZSBpdAogCQkJICogbXVzdCBoYXZlIGhhcHBlbmVk IGJlZm9yZSBWQUNVVU0gc3RhcnRlZCwgc2luY2UgUkVJTkRFWAotCQkJICogQ09OQ1VSUkVOVExZ IGxvY2tzIG91dCBWQUNVVU0uKQorCQkJICogQ09OQ1VSUkVOVExZIGxvY2tzIG91dCBWQUNVVU0s IGlmIG15WG1pbiBpcyBpbnZhbGlkIGl0IGlzCisJCQkgKiB2YWxpZGF0aW9uIHNjYW4uKQogCQkJ ICoKIAkJCSAqIE5vdGU6IHdlIGNvdWxkIG1ha2UgYSB0aWdodGVyIHRlc3QgYnkgc2VlaW5nIGlm IHRoZSB4aWQgaXMKIAkJCSAqICJydW5uaW5nIiBhY2NvcmRpbmcgdG8gdGhlIGFjdGl2ZSBzbmFw c2hvdDsgYnV0IHNuYXBtZ3IuYwogCQkJICogZG9lc24ndCBjdXJyZW50bHkgZXhwb3J0IGEgc3Vp dGFibGUgQVBJLCBhbmQgaXQncyBub3QgZW50aXJlbHkKIAkJCSAqIGNsZWFyIHRoYXQgYSB0aWdo dGVyIHRlc3QgaXMgd29ydGggdGhlIGN5Y2xlcyBhbnl3YXkuCiAJCQkgKi8KLQkJCWlmIChUcmFu c2FjdGlvbklkRm9sbG93c09yRXF1YWxzKGR0LT54aWQsIGJkcy0+bXlYbWluKSkKKwkJCWlmICgh VHJhbnNhY3Rpb25JZElzVmFsaWQoYmRzLT5teVhtaW4pIHx8CisJCQkJCVRyYW5zYWN0aW9uSWRG b2xsb3dzT3JFcXVhbHMoZHQtPnhpZCwgYmRzLT5teVhtaW4pKQogCQkJCXNwZ0FkZFBlbmRpbmdU SUQoYmRzLCAmZHQtPnBvaW50ZXIpOwogCQl9CiAJCWVsc2UKQEAgLTgwOCw3ICs4MTAsNiBAQCBz cGd2YWN1dW1zY2FuKHNwZ0J1bGtEZWxldGVTdGF0ZSAqYmRzKQogCS8qIEZpbmlzaCBzZXR0aW5n IHVwIHNwZ0J1bGtEZWxldGVTdGF0ZSAqLwogCWluaXRTcEdpc3RTdGF0ZSgmYmRzLT5zcGdzdGF0 ZSwgaW5kZXgpOwogCWJkcy0+cGVuZGluZ0xpc3QgPSBOVUxMOwotCWJkcy0+bXlYbWluID0gR2V0 QWN0aXZlU25hcHNob3QoKS0+eG1pbjsKIAliZHMtPmxhc3RGaWxsZWRCbG9jayA9IFNQR0lTVF9M QVNUX0ZJWEVEX0JMS05POwogCiAJLyoKQEAgLTk1OSw2ICs5NjAsMTAgQEAgc3BnYnVsa2RlbGV0 ZShJbmRleFZhY3V1bUluZm8gKmluZm8sIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMsCiAJ YmRzLnN0YXRzID0gc3RhdHM7CiAJYmRzLmNhbGxiYWNrID0gY2FsbGJhY2s7CiAJYmRzLmNhbGxi YWNrX3N0YXRlID0gY2FsbGJhY2tfc3RhdGU7CisJaWYgKGluZm8tPnZhbGlkYXRlX2luZGV4KQor CQliZHMubXlYbWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJZWxzZQorCQliZHMubXlYbWlu ID0gR2V0QWN0aXZlU25hcHNob3QoKS0+eG1pbjsKIAogCXNwZ3ZhY3V1bXNjYW4oJmJkcyk7CiAK QEAgLTk5OSw2ICsxMDA0LDcgQEAgc3BndmFjdXVtY2xlYW51cChJbmRleFZhY3V1bUluZm8gKmlu Zm8sIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMpCiAJCWJkcy5zdGF0cyA9IHN0YXRzOwog CQliZHMuY2FsbGJhY2sgPSBkdW1teV9jYWxsYmFjazsKIAkJYmRzLmNhbGxiYWNrX3N0YXRlID0g TlVMTDsKKwkJYmRzLm15WG1pbiA9IEdldEFjdGl2ZVNuYXBzaG90KCktPnhtaW47CiAKIAkJc3Bn dmFjdXVtc2NhbigmYmRzKTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2lu ZGV4LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKaW5kZXggNGVkZjY4YWNlZDIuLjQ5 YWRjYjE1MmNmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKKysrIGIv c3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCkBAIC02OSw2ICs2OSw3IEBACiAjaW5jbHVkZSAi c3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJz dG9yYWdlL3ByZWRpY2F0ZS5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUg InN0b3JhZ2Uvc21nci5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAi dXRpbHMvZm1ncm9pZHMuaCIKQEAgLTM1MzgsOCArMzUzOSw5IEBAIEluZGV4Q2hlY2tFeGNsdXNp b24oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogICogaW5zZXJ0IHRoZWlyIG5ldyB0dXBsZXMgaW50 byBpdC4gQXQgdGhlIHNhbWUgbW9tZW50IHdlIGNsZWFyICJpbmRpc3JlYWR5IiBmb3IKICAqIGF1 eGlsaWFyeSBpbmRleCwgc2luY2UgaXQgaXMgbm8gbW9yZSByZXF1aXJlZCB0byBiZSB1cGRhdGVk LgogICoKLSAqIFdlIHRoZW4gdGFrZSBhIG5ldyByZWZlcmVuY2Ugc25hcHNob3QsIGFueSB0dXBs ZXMgdGhhdCBhcmUgdmFsaWQgYWNjb3JkaW5nCi0gKiB0byB0aGlzIHNuYXAsIGJ1dCBhcmUgbm90 IGluIHRoZSBpbmRleCwgbXVzdCBiZSBhZGRlZCB0byB0aGUgaW5kZXguCisgKiBXZSB0aGVuIHRh a2UgYSBuZXcgc25hcHNob3QsIGFueSB0dXBsZXMgdGhhdCBhcmUgdmFsaWQgYWNjb3JkaW5nCisg KiB0byB0aGlzIHNuYXAsIGJ1dCBhcmUgbm90IGluIHRoZSBpbmRleCwgbXVzdCBiZSBhZGRlZCB0 byB0aGUgaW5kZXguIEluCisgKiBvcmRlciB0byBwcm9wYWdhdGUgeG1pbiB3ZSByZXNldCB0aGF0 IHNuYXBzaG90IGV2ZXJ5IHNvIG9mdGVuLgogICogKEFueSB0dXBsZXMgY29tbWl0dGVkIGxpdmUg YWZ0ZXIgdGhlIHNuYXAgd2lsbCBiZSBpbnNlcnRlZCBpbnRvIHRoZQogICogaW5kZXggYnkgdGhl aXIgb3JpZ2luYXRpbmcgdHJhbnNhY3Rpb24uICBBbnkgdHVwbGVzIGNvbW1pdHRlZCBkZWFkIGJl Zm9yZQogICogdGhlIHNuYXAgbmVlZCBub3QgYmUgaW5kZXhlZCwgYmVjYXVzZSB3ZSB3aWxsIHdh aXQgb3V0IGFsbCB0cmFuc2FjdGlvbnMKQEAgLTM1NTIsNyArMzU1NCw3IEBAIEluZGV4Q2hlY2tF eGNsdXNpb24oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogICogVElEcyBvZiBib3RoIGF1eGlsaWFy eSBhbmQgdGFyZ2V0IGluZGV4ZXMsIGFuZCBkb2luZyBhICJtZXJnZSBqb2luIiBhZ2FpbnN0CiAg KiB0aGUgVElEIGxpc3RzIHRvIHNlZSB3aGljaCB0dXBsZXMgZnJvbSBhdXhpbGlhcnkgaW5kZXgg YXJlIG1pc3NpbmcgZnJvbSB0aGUKICAqIHRhcmdldCBpbmRleC4gIFRodXMgd2Ugd2lsbCBlbnN1 cmUgdGhhdCBhbGwgdHVwbGVzIHZhbGlkIGFjY29yZGluZyB0byB0aGUKLSAqIHJlZmVyZW5jZSBz bmFwc2hvdCBhcmUgaW4gdGhlIGluZGV4LiBOb3RpY2Ugd2UgbmVlZCB0byBkbyBidWxrZGVsZXRl IGluIHRoZQorICogbGF0ZXN0IHNuYXBzaG90IGFyZSBpbiB0aGUgaW5kZXguIE5vdGljZSB3ZSBu ZWVkIHRvIGRvIGJ1bGtkZWxldGUgaW4gdGhlCiAgKiBwYXJ0aWN1bGFyIG9yZGVyOiBhdXhpbGlh cnkgZmlyc3QsIHRhcmdldCBsYXN0LgogICoKICAqIEJ1aWxkaW5nIGEgdW5pcXVlIGluZGV4IHRo aXMgd2F5IGlzIHRyaWNreTogd2UgbWlnaHQgdHJ5IHRvIGluc2VydCBhCkBAIC0zNTY1LDIxICsz NTY3LDI0IEBAIEluZGV4Q2hlY2tFeGNsdXNpb24oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogICog YmVmb3JlIGl0IGRlY2xhcmVzIGEgdW5pcXVlbmVzcyBlcnJvci4KICAqCiAgKiBBZnRlciBjb21w bGV0aW5nIHZhbGlkYXRlX2luZGV4KCksIHdlIHdhaXQgdW50aWwgYWxsIHRyYW5zYWN0aW9ucyB0 aGF0Ci0gKiB3ZXJlIGFsaXZlIGF0IHRoZSB0aW1lIG9mIHRoZSByZWZlcmVuY2Ugc25hcHNob3Qg YXJlIGdvbmU7IHRoaXMgaXMKLSAqIG5lY2Vzc2FyeSB0byBiZSBzdXJlIHRoZXJlIGFyZSBub25l IGxlZnQgd2l0aCBhIHRyYW5zYWN0aW9uIHNuYXBzaG90Ci0gKiBvbGRlciB0aGFuIHRoZSByZWZl cmVuY2UgKGFuZCBoZW5jZSBwb3NzaWJseSBhYmxlIHRvIHNlZSB0dXBsZXMgd2UgZGlkCi0gKiBu b3QgaW5kZXgpLiAgVGhlbiB3ZSBtYXJrIHRoZSBpbmRleCAiaW5kaXN2YWxpZCIgYW5kIGNvbW1p dC4gIFN1YnNlcXVlbnQKLSAqIHRyYW5zYWN0aW9ucyB3aWxsIGJlIGFibGUgdG8gdXNlIGl0IGZv ciBxdWVyaWVzLgorICogd2VyZSBhbGl2ZSBhdCB0aGUgdGltZSBvZiB0aGUgbGF0ZXN0IHNuYXBz aG90IHVzZWQgZHVyaW5nIHZhbGlkYXRpb24gYXJlCisgKiBnb25lOyB0aGlzIGlzIG5lY2Vzc2Fy eSB0byBiZSBzdXJlIHRoZXJlIGFyZSBub25lIGxlZnQgd2l0aCBhIHRyYW5zYWN0aW9uCisgKiBz bmFwc2hvdCBvbGRlciB0aGFuIHRoYXQgKGFuZCBoZW5jZSBwb3NzaWJseSBhYmxlIHRvIHNlZSB0 dXBsZXMgd2UgZGlkCisgKiBub3QgaW5kZXgpLiAgVGhlIHNuYXBzaG90IGlzIHBlcmlvZGljYWxs eSByZWZyZXNoZWQgZHVyaW5nIHRoZSBoZWFwIHNjYW4KKyAqIHRvIHByb3BhZ2F0ZSB0aGUgeG1p biBob3Jpem9uLCBzbyBsaW1pdFhtaW4gdHJhY2tzIHRoZSBtb3N0IHJlY2VudCBvbmUuCisgKiBU aGVuIHdlIG1hcmsgdGhlIGluZGV4ICJpbmRpc3ZhbGlkIiBhbmQgY29tbWl0LiAgU3Vic2VxdWVu dCB0cmFuc2FjdGlvbnMKKyAqIHdpbGwgYmUgYWJsZSB0byB1c2UgaXQgZm9yIHF1ZXJpZXMuCiAg KgogICogQWxzbywgc29tZSBhY3Rpb25zIHRvIGNvbmN1cnJlbnQgZHJvcCB0aGUgYXV4aWxpYXJ5 IGluZGV4IGFyZSBwZXJmb3JtZWQuCiAgKi8KLXZvaWQKLXZhbGlkYXRlX2luZGV4KE9pZCBoZWFw SWQsIE9pZCBpbmRleElkLCBPaWQgYXV4SW5kZXhJZCwgU25hcHNob3Qgc25hcHNob3QpCitUcmFu c2FjdGlvbklkCit2YWxpZGF0ZV9pbmRleChPaWQgaGVhcElkLCBPaWQgaW5kZXhJZCwgT2lkIGF1 eEluZGV4SWQpCiB7CiAJUmVsYXRpb24JaGVhcFJlbGF0aW9uLAogCQkJCWluZGV4UmVsYXRpb24s CiAJCQkJYXV4SW5kZXhSZWxhdGlvbjsKIAlJbmRleEluZm8gICppbmRleEluZm87CisJVHJhbnNh Y3Rpb25JZCBsaW1pdFhtaW47CiAJSW5kZXhWYWN1dW1JbmZvIGl2aW5mbywgYXV4aXZpbmZvOwog CVZhbGlkYXRlSW5kZXhTdGF0ZSBzdGF0ZSwgYXV4U3RhdGU7CiAJT2lkCQkJc2F2ZV91c2VyaWQ7 CkBAIC0zNTkyLDYgKzM1OTcsMTYgQEAgdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lkIGlu ZGV4SWQsIE9pZCBhdXhJbmRleElkLCBTbmFwc2hvdCBzbmFwc2hvdCkKIAlpbnQJCQltYWluX3dv cmtfbWVtX3BhcnQgPSAoaW50KSgoaW50NjQpIG1haW50ZW5hbmNlX3dvcmtfbWVtICogOCAvIDEw KTsKIAlpbnQJCQlhdXhfd29ya19tZW1fcGFydCA9IG1haW50ZW5hbmNlX3dvcmtfbWVtIC8gMTA7 CiAKKwkvKgorCSAqIFVuZGVyIFJFUEVBVEFCTEUgUkVBRCBvciBTRVJJQUxJWkFCTEUgKHBvc3Np YmxlIHZpYQorCSAqIGRlZmF1bHRfdHJhbnNhY3Rpb25faXNvbGF0aW9uKSwgR2V0TGF0ZXN0U25h cHNob3QoKSByZXR1cm5zIHRoZQorCSAqIHRyYW5zYWN0aW9uLWxldmVsIHNuYXBzaG90IGFuZCB4 bWluIHN0YXlzIHBpbm5lZC4gIFBlcmlvZGljIHNuYXBzaG90CisJICogcmVmcmVzaCBpcyBwb2lu dGxlc3MgaW4gdGhhdCBjYXNlLCBzbyBza2lwIGl0LgorCSAqLworI2lmZGVmIFVTRV9BU1NFUlRf Q0hFQ0tJTkcKKwlib29sCQlyZXNldF9zbmFwc2hvdCA9IFhhY3RJc29MZXZlbCA8PSBYQUNUX1JF QURfQ09NTUlUVEVEOworI2VuZGlmCisKIAl7CiAJCWNvbnN0IGludAlwcm9ncmVzc19pbmRleFtd ID0gewogCQkJUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLApAQCAtMzYyOSw4ICszNjQ0LDEyIEBA IHZhbGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBPaWQgYXV4SW5kZXhJZCwg U25hcHNob3Qgc25hcHNob3QpCiAJICogRmV0Y2ggaW5mbyBuZWVkZWQgZm9yIGluZGV4X2luc2Vy dC4gIChZb3UgbWlnaHQgdGhpbmsgdGhpcyBzaG91bGQgYmUKIAkgKiBwYXNzZWQgaW4gZnJvbSBE ZWZpbmVJbmRleCwgYnV0IGl0cyBjb3B5IGlzIGxvbmcgZ29uZSBkdWUgdG8gaGF2aW5nCiAJICog YmVlbiBidWlsdCBpbiBhIHByZXZpb3VzIHRyYW5zYWN0aW9uLikKKwkgKgorCSAqIFdlIG1pZ2h0 IG5lZWQgc25hcHNob3QgZm9yIGluZGV4IGV4cHJlc3Npb25zIG9yIHByZWRpY2F0ZXMuCiAJICov CisJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CiAJaW5kZXhJ bmZvID0gQnVpbGRJbmRleEluZm8oaW5kZXhSZWxhdGlvbik7CisJUG9wQWN0aXZlU25hcHNob3Qo KTsKIAogCS8qIG1hcmsgYnVpbGQgaXMgY29uY3VycmVudCBqdXN0IGZvciBjb25zaXN0ZW5jeSAq LwogCWluZGV4SW5mby0+aWlfQ29uY3VycmVudCA9IHRydWU7CkBAIC0zNjY2LDYgKzM2ODUsOSBA QCB2YWxpZGF0ZV9pbmRleChPaWQgaGVhcElkLCBPaWQgaW5kZXhJZCwgT2lkIGF1eEluZGV4SWQs IFNuYXBzaG90IHNuYXBzaG90KQogCQkJCQkJCQkJCSAgIE5VTEwsIFRVUExFU09SVF9OT05FKTsK IAlhdXhTdGF0ZS5odHVwcyA9IGF1eFN0YXRlLml0dXBzID0gYXV4U3RhdGUudHVwc19pbnNlcnRl ZCA9IDA7CiAKKwkvKiB0dXBsZXNvcnRfYmVnaW5fZGF0dW0gbWF5IHJlcXVpcmUgY2F0YWxvZyBz bmFwc2hvdCAqLworCUludmFsaWRhdGVDYXRhbG9nU25hcHNob3QoKTsKKwogCSh2b2lkKSBpbmRl eF9idWxrX2RlbGV0ZSgmYXV4aXZpbmZvLCBOVUxMLAogCQkJCQkJCSB2YWxpZGF0ZV9pbmRleF9j YWxsYmFjaywgJmF1eFN0YXRlKTsKIAkvKiBJZiBhdXggaW5kZXggaXMgZW1wdHksIG1lcmdlIG1h eSBiZSBza2lwcGVkICovCkBAIC0zNjg1LDcgKzM3MDcsMTMgQEAgdmFsaWRhdGVfaW5kZXgoT2lk IGhlYXBJZCwgT2lkIGluZGV4SWQsIE9pZCBhdXhJbmRleElkLCBTbmFwc2hvdCBzbmFwc2hvdCkK IAkJaW5kZXhfY2xvc2UoaW5kZXhSZWxhdGlvbiwgTm9Mb2NrKTsKIAkJdGFibGVfY2xvc2UoaGVh cFJlbGF0aW9uLCBOb0xvY2spOwogCi0JCXJldHVybjsKKwkJUHVzaEFjdGl2ZVNuYXBzaG90KEdl dFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisJCWxpbWl0WG1pbiA9IEdldEFjdGl2ZVNuYXBzaG90 KCktPnhtaW47CisJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisJCUludmFsaWRhdGVDYXRhbG9nU25h cHNob3QoKTsKKworCQlBc3NlcnQoIXJlc2V0X3NuYXBzaG90IHx8ICFUcmFuc2FjdGlvbklkSXNW YWxpZChNeVByb2MtPnhtaW4pKTsKKwkJcmV0dXJuIGxpbWl0WG1pbjsKIAl9CiAKIAlzdGF0ZS50 dXBsZXNvcnQgPSB0dXBsZXNvcnRfYmVnaW5fZGF0dW0oSU5UOE9JRCwgSW50OExlc3NPcGVyYXRv ciwKQEAgLTM2OTQsNiArMzcyMiw5IEBAIHZhbGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBp bmRleElkLCBPaWQgYXV4SW5kZXhJZCwgU25hcHNob3Qgc25hcHNob3QpCiAJCQkJCQkJCQkJCU5V TEwsIFRVUExFU09SVF9OT05FKTsKIAlzdGF0ZS5odHVwcyA9IHN0YXRlLml0dXBzID0gc3RhdGUu dHVwc19pbnNlcnRlZCA9IDA7CiAKKwkvKiB0dXBsZXNvcnRfYmVnaW5fZGF0dW0gbWF5IHJlcXVp cmUgY2F0YWxvZyBzbmFwc2hvdCAqLworCUludmFsaWRhdGVDYXRhbG9nU25hcHNob3QoKTsKKwog CS8qIGFtYnVsa2RlbGV0ZSB1cGRhdGVzIHByb2dyZXNzIG1ldHJpY3MgKi8KIAkodm9pZCkgaW5k ZXhfYnVsa19kZWxldGUoJml2aW5mbywgTlVMTCwKIAkJCQkJCQkgdmFsaWRhdGVfaW5kZXhfY2Fs bGJhY2ssICZzdGF0ZSk7CkBAIC0zNzEzLDE5ICszNzQ0LDI0IEBAIHZhbGlkYXRlX2luZGV4KE9p ZCBoZWFwSWQsIE9pZCBpbmRleElkLCBPaWQgYXV4SW5kZXhJZCwgU25hcHNob3Qgc25hcHNob3Qp CiAJCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfbXVsdGlfcGFyYW0oMywgcHJvZ3Jlc3NfaW5kZXgs IHByb2dyZXNzX3ZhbHMpOwogCX0KIAl0dXBsZXNvcnRfcGVyZm9ybXNvcnQoc3RhdGUudHVwbGVz b3J0KTsKKwkvKiB0dXBsZXNvcnRfcGVyZm9ybXNvcnQgbWF5IHJlcXVpcmUgY2F0YWxvZyBzbmFw c2hvdCAqLworCUludmFsaWRhdGVDYXRhbG9nU25hcHNob3QoKTsKKwogCXR1cGxlc29ydF9wZXJm b3Jtc29ydChhdXhTdGF0ZS50dXBsZXNvcnQpOworCS8qIHR1cGxlc29ydF9wZXJmb3Jtc29ydCBt YXkgcmVxdWlyZSBjYXRhbG9nIHNuYXBzaG90ICovCisJSW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hv dCgpOworCUFzc2VydCghcmVzZXRfc25hcHNob3QgfHwgIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKE15 UHJvYy0+eG1pbikpOwogCiAJLyoKIAkgKiBOb3cgbWVyZ2UgYm90aCBpbmRleGVzCiAJICovCiAJ cGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0UsCiAJ CQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfVkFMSURBVEVfSURYTUVSR0UpOwotCXRh YmxlX2luZGV4X3ZhbGlkYXRlX3NjYW4oaGVhcFJlbGF0aW9uLAotCQkJCQkJCSAgaW5kZXhSZWxh dGlvbiwKLQkJCQkJCQkgIGluZGV4SW5mbywKLQkJCQkJCQkgIHNuYXBzaG90LAotCQkJCQkJCSAg JnN0YXRlLAotCQkJCQkJCSAgJmF1eFN0YXRlKTsKKwlsaW1pdFhtaW4gPSB0YWJsZV9pbmRleF92 YWxpZGF0ZV9zY2FuKGhlYXBSZWxhdGlvbiwKKwkJCQkJCQkJCQkgIGluZGV4UmVsYXRpb24sCisJ CQkJCQkJCQkJICBpbmRleEluZm8sCisJCQkJCQkJCQkJICAmc3RhdGUsCisJCQkJCQkJCQkJICAm YXV4U3RhdGUpOwogCiAJLyogVHVwbGUgc29ydCBjbG9zZWQgYnkgdGFibGVfaW5kZXhfdmFsaWRh dGVfc2NhbiAqLwogCUFzc2VydChzdGF0ZS50dXBsZXNvcnQgPT0gTlVMTCAmJiBhdXhTdGF0ZS50 dXBsZXNvcnQgPT0gTlVMTCk7CkBAIC0zNzQ4LDYgKzM3ODQsOSBAQCB2YWxpZGF0ZV9pbmRleChP aWQgaGVhcElkLCBPaWQgaW5kZXhJZCwgT2lkIGF1eEluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90 KQogCWluZGV4X2Nsb3NlKGF1eEluZGV4UmVsYXRpb24sIE5vTG9jayk7CiAJaW5kZXhfY2xvc2Uo aW5kZXhSZWxhdGlvbiwgTm9Mb2NrKTsKIAl0YWJsZV9jbG9zZShoZWFwUmVsYXRpb24sIE5vTG9j ayk7CisKKwlBc3NlcnQoIXJlc2V0X3NuYXBzaG90IHx8ICFUcmFuc2FjdGlvbklkSXNWYWxpZChN eVByb2MtPnhtaW4pKTsKKwlyZXR1cm4gbGltaXRYbWluOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9p bmRleGNtZHMuYwppbmRleCA0NmM0Y2NjNjc4OS4uYTcwMDA2OGY4YTIgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2luZGV4Y21kcy5jCkBAIC01OTYsNyArNTk2LDYgQEAgRGVmaW5lSW5kZXgoUGFyc2VTdGF0ZSAq cHN0YXRlLAogCUxvY2tSZWxJZAloZWFwcmVsaWQ7CiAJTE9DS1RBRwkJaGVhcGxvY2t0YWc7CiAJ TE9DS01PREUJbG9ja21vZGU7Ci0JU25hcHNob3QJc25hcHNob3Q7CiAJT2lkCQkJcm9vdF9zYXZl X3VzZXJpZDsKIAlpbnQJCQlyb290X3NhdmVfc2VjX2NvbnRleHQ7CiAJaW50CQkJcm9vdF9zYXZl X25lc3RsZXZlbDsKQEAgLTE4MTYsMzIgKzE4MTUsMTEgQEAgRGVmaW5lSW5kZXgoUGFyc2VTdGF0 ZSAqcHN0YXRlLAogCS8qIFRlbGwgY29uY3VycmVudCBpbmRleCBidWlsZHMgdG8gaWdub3JlIHVz LCBpZiBpbmRleCBxdWFsaWZpZXMgKi8KIAlpZiAoc2FmZV9pbmRleCkKIAkJc2V0X2luZGV4c2Fm ZV9wcm9jZmxhZ3MoKTsKLQotCS8qCi0JICogTm93IHRha2UgdGhlICJyZWZlcmVuY2Ugc25hcHNo b3QiIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHZhbGlkYXRlX2luZGV4KCkKLQkgKiB0byBmaWx0ZXIg Y2FuZGlkYXRlIHR1cGxlcy4gIEJld2FyZSEgIFRoZXJlIG1pZ2h0IHN0aWxsIGJlIHNuYXBzaG90 cyBpbgotCSAqIHVzZSB0aGF0IHRyZWF0IHNvbWUgdHJhbnNhY3Rpb24gYXMgaW4tcHJvZ3Jlc3Mg dGhhdCBvdXIgcmVmZXJlbmNlCi0JICogc25hcHNob3QgdHJlYXRzIGFzIGNvbW1pdHRlZC4gIElm IHN1Y2ggYSByZWNlbnRseS1jb21taXR0ZWQgdHJhbnNhY3Rpb24KLQkgKiBkZWxldGVkIHR1cGxl cyBpbiB0aGUgdGFibGUsIHdlIHdpbGwgbm90IGluY2x1ZGUgdGhlbSBpbiB0aGUgaW5kZXg7IHll dAotCSAqIHRob3NlIHRyYW5zYWN0aW9ucyB3aGljaCBzZWUgdGhlIGRlbGV0aW5nIG9uZSBhcyBz dGlsbC1pbi1wcm9ncmVzcyB3aWxsCi0JICogZXhwZWN0IHN1Y2ggdHVwbGVzIHRvIGJlIHRoZXJl IG9uY2Ugd2UgbWFyayB0aGUgaW5kZXggYXMgdmFsaWQuCi0JICoKLQkgKiBXZSBzb2x2ZSB0aGlz IGJ5IHdhaXRpbmcgZm9yIGFsbCBlbmRhbmdlcmVkIHRyYW5zYWN0aW9ucyB0byBleGl0IGJlZm9y ZQotCSAqIHdlIG1hcmsgdGhlIGluZGV4IGFzIHZhbGlkLgotCSAqCi0JICogV2UgYWxzbyBzZXQg QWN0aXZlU25hcHNob3QgdG8gdGhpcyBzbmFwLCBzaW5jZSBmdW5jdGlvbnMgaW4gaW5kZXhlcyBt YXkKLQkgKiBuZWVkIGEgc25hcHNob3QuCi0JICovCi0Jc25hcHNob3QgPSBSZWdpc3RlclNuYXBz aG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7Ci0JUHVzaEFjdGl2ZVNuYXBzaG90KHNuYXBz aG90KTsKIAkvKgogCSAqIE1lcmdlIGNvbnRlbnQgb2YgYXV4aWxpYXJ5IGFuZCB0YXJnZXQgaW5k ZXhlcyAtIGluc2VydCBhbnkgbWlzc2luZyBpbmRleCBlbnRyaWVzLgogCSAqLwotCXZhbGlkYXRl X2luZGV4KHRhYmxlSWQsIGluZGV4UmVsYXRpb25JZCwgYXV4SW5kZXhSZWxhdGlvbklkLCBzbmFw c2hvdCk7Ci0JbGltaXRYbWluID0gc25hcHNob3QtPnhtaW47CisJbGltaXRYbWluID0gdmFsaWRh dGVfaW5kZXgodGFibGVJZCwgaW5kZXhSZWxhdGlvbklkLCBhdXhJbmRleFJlbGF0aW9uSWQpOwog Ci0JUG9wQWN0aXZlU25hcHNob3QoKTsKLQlVbnJlZ2lzdGVyU25hcHNob3Qoc25hcHNob3QpOwog CS8qCiAJICogVGhlIHNuYXBzaG90IHN1YnN5c3RlbSBjb3VsZCBzdGlsbCBjb250YWluIHJlZ2lz dGVyZWQgc25hcHNob3RzIHRoYXQKIAkgKiBhcmUgaG9sZGluZyBiYWNrIG91ciBwcm9jZXNzJ3Mg YWR2ZXJ0aXNlZCB4bWluOyBpbiBwYXJ0aWN1bGFyLCBpZgpAQCAtMTg2Myw4ICsxODQxLDggQEAg RGVmaW5lSW5kZXgoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCS8qCiAJICogVGhlIGluZGV4IGlzIG5v dyB2YWxpZCBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBjb250YWlucyBhbGwgY3VycmVudGx5CiAJICog aW50ZXJlc3RpbmcgdHVwbGVzLiAgQnV0IHNpbmNlIGl0IG1pZ2h0IG5vdCBjb250YWluIHR1cGxl cyBkZWxldGVkIGp1c3QKLQkgKiBiZWZvcmUgdGhlIHJlZmVyZW5jZSBzbmFwIHdhcyB0YWtlbiwg d2UgaGF2ZSB0byB3YWl0IG91dCBhbnkKLQkgKiB0cmFuc2FjdGlvbnMgdGhhdCBtaWdodCBoYXZl IG9sZGVyIHNuYXBzaG90cy4KKwkgKiBiZWZvcmUgdGhlIGxhc3Qgc25hcHNob3QgZHVyaW5nIHZh bGlkYXRpbmcgd2FzIHRha2VuLCB3ZSBoYXZlIHRvIHdhaXQKKwkgKiBvdXQgYW55IHRyYW5zYWN0 aW9ucyB0aGF0IG1pZ2h0IGhhdmUgb2xkZXIgc25hcHNob3RzLgogCSAqLwogCUlOSkVDVElPTl9Q T0lOVCgiZGVmaW5lLWluZGV4LWJlZm9yZS1zZXQtdmFsaWQiLCBOVUxMKTsKIAlwZ3N0YXRfcHJv Z3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKQEAgLTQ0MzMsNyAr NDQxMSw2IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAq c3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJewogCQlSZWluZGV4SW5kZXhJbmZv ICpuZXdpZHggPSBsZmlyc3QobGMpOwogCQlUcmFuc2FjdGlvbklkIGxpbWl0WG1pbjsKLQkJU25h cHNob3QJc25hcHNob3Q7CiAKIAkJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIApAQCAtNDQ0 OCwxMyArNDQyNSw2IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4 U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCWlmIChuZXdpZHgtPnNh ZmUpCiAJCQlzZXRfaW5kZXhzYWZlX3Byb2NmbGFncygpOwogCi0JCS8qCi0JCSAqIFRha2UgdGhl ICJyZWZlcmVuY2Ugc25hcHNob3QiIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHZhbGlkYXRlX2luZGV4 KCkKLQkJICogdG8gZmlsdGVyIGNhbmRpZGF0ZSB0dXBsZXMuCi0JCSAqLwotCQlzbmFwc2hvdCA9 IFJlZ2lzdGVyU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKLQkJUHVzaEFjdGl2 ZVNuYXBzaG90KHNuYXBzaG90KTsKLQogCQkvKgogCQkgKiBVcGRhdGUgcHJvZ3Jlc3MgZm9yIHRo ZSBpbmRleCB0byBidWlsZCwgd2l0aCB0aGUgY29ycmVjdCBwYXJlbnQKIAkJICogdGFibGUgaW52 b2x2ZWQuCkBAIC00NDY2LDE2ICs0NDM2LDcgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5 KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJ cHJvZ3Jlc3NfdmFsc1szXSA9IG5ld2lkeC0+YW1JZDsKIAkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0 ZV9tdWx0aV9wYXJhbSg0LCBwcm9ncmVzc19pbmRleCwgcHJvZ3Jlc3NfdmFscyk7CiAKLQkJdmFs aWRhdGVfaW5kZXgobmV3aWR4LT50YWJsZUlkLCBuZXdpZHgtPmluZGV4SWQsIG5ld2lkeC0+YXV4 SW5kZXhJZCwgc25hcHNob3QpOwotCi0JCS8qCi0JCSAqIFdlIGNhbiBub3cgZG8gYXdheSB3aXRo IG91ciBhY3RpdmUgc25hcHNob3QsIHdlIHN0aWxsIG5lZWQgdG8gc2F2ZQotCQkgKiB0aGUgeG1p biBsaW1pdCB0byB3YWl0IGZvciBvbGRlciBzbmFwc2hvdHMuCi0JCSAqLwotCQlsaW1pdFhtaW4g PSBzbmFwc2hvdC0+eG1pbjsKLQotCQlQb3BBY3RpdmVTbmFwc2hvdCgpOwotCQlVbnJlZ2lzdGVy U25hcHNob3Qoc25hcHNob3QpOworCQlsaW1pdFhtaW4gPSB2YWxpZGF0ZV9pbmRleChuZXdpZHgt PnRhYmxlSWQsIG5ld2lkeC0+aW5kZXhJZCwgbmV3aWR4LT5hdXhJbmRleElkKTsKIAogCQkvKgog CQkgKiBUbyBlbnN1cmUgbm8gZGVhZGxvY2tzLCB3ZSBtdXN0IGNvbW1pdCBhbmQgc3RhcnQgeWV0 IGFub3RoZXIKQEAgLTQ0ODUsMTAgKzQ0NDYsMTMgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVu dGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4K IAkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAJCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5k KCk7CiAKKwkJLyogV2Ugc2hvdWxkIG5vdyBkZWZpbml0ZWx5IG5vdCBiZSBhZHZlcnRpc2luZyBh bnkgeG1pbi4gKi8KKwkJQXNzZXJ0KCFUcmFuc2FjdGlvbklkSXNWYWxpZChNeVByb2MtPnhtaW4p KTsKKwogCQkvKgogCQkgKiBUaGUgaW5kZXggaXMgbm93IHZhbGlkIGluIHRoZSBzZW5zZSB0aGF0 IGl0IGNvbnRhaW5zIGFsbCBjdXJyZW50bHkKIAkJICogaW50ZXJlc3RpbmcgdHVwbGVzLiAgQnV0 IHNpbmNlIGl0IG1pZ2h0IG5vdCBjb250YWluIHR1cGxlcyBkZWxldGVkCi0JCSAqIGp1c3QgYmVm b3JlIHRoZSByZWZlcmVuY2Ugc25hcCB3YXMgdGFrZW4sIHdlIGhhdmUgdG8gd2FpdCBvdXQgYW55 CisJCSAqIGp1c3QgYmVmb3JlIHRoZSBsYXRlc3Qgc25hcCB3YXMgdGFrZW4sIHdlIGhhdmUgdG8g d2FpdCBvdXQgYW55CiAJCSAqIHRyYW5zYWN0aW9ucyB0aGF0IG1pZ2h0IGhhdmUgb2xkZXIgc25h cHNob3RzLgogCQkgKgogCQkgKiBCZWNhdXNlIHdlIGRvbid0IHRha2UgYSBzbmFwc2hvdCBvciBY aWQgaW4gdGhpcyB0cmFuc2FjdGlvbiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1l dGVycy5kYXQKaW5kZXggMzQ3Nzg2NmQ3MjkuLjZiNWIxMzBmMmFhIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMvYmFja2VuZC91 dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAtNjQwLDYgKzY0MCwxNSBAQAogICBib290 X3ZhbCA9PiAnREVGQVVMVF9BU1NFUlRfRU5BQkxFRCcsCiB9LAogCit7IG5hbWUgPT4gJ2RlYnVn X2NpY192YWxpZGF0ZV9zbmFwc2hvdF9wYWdlcycsIHR5cGUgPT4gJ2ludCcsIGNvbnRleHQgPT4g J1BHQ19VU0VSU0VUJywgZ3JvdXAgPT4gJ0RFVkVMT1BFUl9PUFRJT05TJywKKyAgc2hvcnRfZGVz YyA9PiAnUmVmcmVzaCBzbmFwc2hvdCBldmVyeSBOIHBhZ2VzIGR1cmluZyBDSUMgdmFsaWRhdGlv biAoMCB0byBkaXNhYmxlKS4nLAorICBmbGFncyA9PiAnR1VDX05PVF9JTl9TQU1QTEUnLAorICB2 YXJpYWJsZSA9PiAnZGVidWdfY2ljX3ZhbGlkYXRlX3NuYXBzaG90X3BhZ2VzJywKKyAgYm9vdF92 YWwgPT4gJzQwOTYnLAorICBtaW4gPT4gJzAnLAorICBtYXggPT4gJzEwMDAwMDAnLAorfSwKKwog eyBuYW1lID0+ICdkZWJ1Z19jaWNfdmFsaWRhdGVfc3RvcmVfbWVtX3BjdCcsIHR5cGUgPT4gJ2lu dCcsIGNvbnRleHQgPT4gJ1BHQ19VU0VSU0VUJywgZ3JvdXAgPT4gJ0RFVkVMT1BFUl9PUFRJT05T JywKICAgc2hvcnRfZGVzYyA9PiAnUGVyY2VudGFnZSBvZiBtYWludGVuYW5jZV93b3JrX21lbSB1 c2VkIGZvciBDSUMgdmFsaWRhdGlvbiB0dXBsZXN0b3JlLicsCiAgIGZsYWdzID0+ICdHVUNfTk9U X0lOX1NBTVBMRScsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oIGIv c3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCBkYTM1OTg2NjNiYy4uOTI5OGY2OGQx OGEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAtNzM5LDEyICs3MzksMTEgQEAgdHlwZWRlZiBzdHJ1 Y3QgVGFibGVBbVJvdXRpbmUKIAkJCQkJCQkJCQkgICBUYWJsZVNjYW5EZXNjIHNjYW4pOwogCiAJ Lyogc2VlIHRhYmxlX2luZGV4X3ZhbGlkYXRlX3NjYW4gZm9yIHJlZmVyZW5jZSBhYm91dCBwYXJh bWV0ZXJzICovCi0Jdm9pZAkJKCppbmRleF92YWxpZGF0ZV9zY2FuKSAoUmVsYXRpb24gdGFibGVf cmVsLAotCQkJCQkJCQkJCVJlbGF0aW9uIGluZGV4X3JlbCwKLQkJCQkJCQkJCQlJbmRleEluZm8g KmluZGV4X2luZm8sCi0JCQkJCQkJCQkJU25hcHNob3Qgc25hcHNob3QsCi0JCQkJCQkJCQkJVmFs aWRhdGVJbmRleFN0YXRlICpzdGF0ZSwKLQkJCQkJCQkJCQlWYWxpZGF0ZUluZGV4U3RhdGUgKmF1 eF9zdGF0ZSk7CisJVHJhbnNhY3Rpb25JZAkJKCppbmRleF92YWxpZGF0ZV9zY2FuKSAoUmVsYXRp b24gdGFibGVfcmVsLAorCQkJCQkJCQkJCQkJUmVsYXRpb24gaW5kZXhfcmVsLAorCQkJCQkJCQkJ CQkJSW5kZXhJbmZvICppbmRleF9pbmZvLAorCQkJCQkJCQkJCQkJVmFsaWRhdGVJbmRleFN0YXRl ICpzdGF0ZSwKKwkJCQkJCQkJCQkJCVZhbGlkYXRlSW5kZXhTdGF0ZSAqYXV4X3N0YXRlKTsKIAog CiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xOTExLDIwICsxOTEwLDE4IEBAIHRhYmxlX2luZGV4 X2J1aWxkX3JhbmdlX3NjYW4oUmVsYXRpb24gdGFibGVfcmVsLAogICogTm90ZTogaXQgaXMgcmVz cG9uc2liaWxpdHkgb2YgdGhhdCBmdW5jdGlvbiB0byBjbG9zZSBzb3J0c3RhdGVzIGluCiAgKiBi b3RoIGBzdGF0ZWAgYW5kIGBhdXhzdGF0ZWAuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAorc3Rh dGljIGlubGluZSBUcmFuc2FjdGlvbklkCiB0YWJsZV9pbmRleF92YWxpZGF0ZV9zY2FuKFJlbGF0 aW9uIHRhYmxlX3JlbCwKIAkJCQkJCSAgUmVsYXRpb24gaW5kZXhfcmVsLAogCQkJCQkJICBJbmRl eEluZm8gKmluZGV4X2luZm8sCi0JCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LAogCQkJCQkJICBW YWxpZGF0ZUluZGV4U3RhdGUgKnN0YXRlLAogCQkJCQkJICBWYWxpZGF0ZUluZGV4U3RhdGUgKmF1 eHN0YXRlKQogewotCXRhYmxlX3JlbC0+cmRfdGFibGVhbS0+aW5kZXhfdmFsaWRhdGVfc2Nhbih0 YWJsZV9yZWwsCi0JCQkJCQkJCQkJCSAgIGluZGV4X3JlbCwKLQkJCQkJCQkJCQkJICAgaW5kZXhf aW5mbywKLQkJCQkJCQkJCQkJICAgc25hcHNob3QsCi0JCQkJCQkJCQkJCSAgIHN0YXRlLAotCQkJ CQkJCQkJCQkgICBhdXhzdGF0ZSk7CisJcmV0dXJuIHRhYmxlX3JlbC0+cmRfdGFibGVhbS0+aW5k ZXhfdmFsaWRhdGVfc2Nhbih0YWJsZV9yZWwsCisJCQkJCQkJCQkJCQkJICBpbmRleF9yZWwsCisJ CQkJCQkJCQkJCQkJICBpbmRleF9pbmZvLAorCQkJCQkJCQkJCQkJCSAgc3RhdGUsCisJCQkJCQkJ CQkJCQkJICBhdXhzdGF0ZSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNz L3RyYW5zYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2FtLmgKaW5kZXggNTVhNGFiMjZi MzQuLjkyM2FhZGJhYjQzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdHJhbnNhbS5o CisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2FtLmgKQEAgLTQxNSw2ICs0MTUsMjEgQEAg Tm9ybWFsVHJhbnNhY3Rpb25JZE9sZGVyKFRyYW5zYWN0aW9uSWQgYSwgVHJhbnNhY3Rpb25JZCBi KQogCXJldHVybiBiOwogfQogCisvKiByZXR1cm4gdGhlIG5ld2VyIG9mIHRoZSB0d28gSURzICov CitzdGF0aWMgaW5saW5lIFRyYW5zYWN0aW9uSWQKK1RyYW5zYWN0aW9uSWROZXdlcihUcmFuc2Fj dGlvbklkIGEsIFRyYW5zYWN0aW9uSWQgYikKK3sKKwlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlk KGEpKQorCQlyZXR1cm4gYjsKKworCWlmICghVHJhbnNhY3Rpb25JZElzVmFsaWQoYikpCisJCXJl dHVybiBhOworCisJaWYgKFRyYW5zYWN0aW9uSWRGb2xsb3dzKGEsIGIpKQorCQlyZXR1cm4gYTsK KwlyZXR1cm4gYjsKK30KKwogLyogcmV0dXJuIHRoZSBuZXdlciBvZiB0aGUgdHdvIElEcyAqLwog c3RhdGljIGlubGluZSBGdWxsVHJhbnNhY3Rpb25JZAogRnVsbFRyYW5zYWN0aW9uSWROZXdlcihG dWxsVHJhbnNhY3Rpb25JZCBhLCBGdWxsVHJhbnNhY3Rpb25JZCBiKQpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oCmlu ZGV4IDMyMzllNWM3MTZmLi5kZWY3MzUyYTg1OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0 YWxvZy9pbmRleC5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaApAQCAtMTU5LDcg KzE1OSw3IEBAIGV4dGVybiB2b2lkIGluZGV4X2J1aWxkKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwK IAkJCQkJCWJvb2wgcGFyYWxsZWwsCiAJCQkJCQlib29sIHByb2dyZXNzKTsKIAotZXh0ZXJuIHZv aWQgdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIE9pZCBhdXhJbmRleElk LCBTbmFwc2hvdCBzbmFwc2hvdCk7CitleHRlcm4gVHJhbnNhY3Rpb25JZCB2YWxpZGF0ZV9pbmRl eChPaWQgaGVhcElkLCBPaWQgaW5kZXhJZCwgT2lkIGF1eEluZGV4SWQpOwogCiBleHRlcm4gdm9p ZCBpbmRleF9zZXRfc3RhdGVfZmxhZ3MoT2lkIGluZGV4SWQsIEluZGV4U3RhdGVGbGFnc0FjdGlv biBhY3Rpb24pOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaCBiL3NyYy9p bmNsdWRlL21pc2NhZG1pbi5oCmluZGV4IDhjMmIzYTljNWU3Li4yYWQzZGVmZjljZCAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKKysrIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWlu LmgKQEAgLTI3Miw2ICsyNzIsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgaW50IHdvcmtfbWVtOwog ZXh0ZXJuIFBHRExMSU1QT1JUIGRvdWJsZSBoYXNoX21lbV9tdWx0aXBsaWVyOwogZXh0ZXJuIFBH RExMSU1QT1JUIGludCBtYWludGVuYW5jZV93b3JrX21lbTsKIGV4dGVybiBQR0RMTElNUE9SVCBp bnQgZGVidWdfY2ljX3ZhbGlkYXRlX3N0b3JlX21lbV9wY3Q7CitleHRlcm4gUEdETExJTVBPUlQg aW50IGRlYnVnX2NpY192YWxpZGF0ZV9zbmFwc2hvdF9wYWdlczsKIGV4dGVybiBQR0RMTElNUE9S VCBpbnQgbWF4X3BhcmFsbGVsX21haW50ZW5hbmNlX3dvcmtlcnM7CiAKIC8qCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQKaW5kZXggMmQ2YWJiMTVhODkuLjc1OGM1 ODg0ZmY1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRl eC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0CkBA IC0zMzgyLDYgKzMzODIsOSBAQCBEUk9QIElOREVYIGF1eF9pbmRleF9pbmQ2OwogLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tCiAgYzEgICAgIHwgaW50 ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCiAKK1NFVCBkZWZhdWx0X3RyYW5zYWN0aW9u X2lzb2xhdGlvbiA9ICdyZXBlYXRhYmxlIHJlYWQnOworQ1JFQVRFIElOREVYIENPTkNVUlJFTlRM WSBhdXhfaW5kZXhfaW5kNiBPTiBhdXhfaW5kZXhfdGFiNSAoYzEpOworU0VUIGRlZmF1bHRfdHJh bnNhY3Rpb25faXNvbGF0aW9uID0gJ3JlYWQgY29tbWl0dGVkJzsKIERST1AgVEFCTEUgYXV4X2lu ZGV4X3RhYjU7CiAtLSBDaGVjayBoYW5kbGluZyBvZiBpbmRleGVzIHdpdGggZXhwcmVzc2lvbnMg YW5kIHByZWRpY2F0ZXMuICBUaGUKIC0tIGRlZmluaXRpb25zIG9mIHRoZSByZWJ1aWx0IGluZGV4 ZXMgc2hvdWxkIG1hdGNoIHRoZSBvcmlnaW5hbApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvY3JlYXRlX2luZGV4LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRl eC5zcWwKaW5kZXggZmQ5NmQ4MGFiYmMuLjY1ZGQ1OGI5NDdkIDEwMDY0NAotLS0gYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2NyZWF0ZV9pbmRleC5zcWwKQEAgLTE0MDAsNiArMTQwMCwxMCBAQCBEUk9QIElOREVYIGF1eF9p bmRleF9pbmQ2OwogLS0gTWFrZSBzdXJlIGF1eGlsaWFyeSBpbmRleCBkcm9wcGVkIHRvbwogXGQg YXV4X2luZGV4X3RhYjUKIAorU0VUIGRlZmF1bHRfdHJhbnNhY3Rpb25faXNvbGF0aW9uID0gJ3Jl cGVhdGFibGUgcmVhZCc7CitDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2 IE9OIGF1eF9pbmRleF90YWI1IChjMSk7CitTRVQgZGVmYXVsdF90cmFuc2FjdGlvbl9pc29sYXRp b24gPSAncmVhZCBjb21taXR0ZWQnOworCiBEUk9QIFRBQkxFIGF1eF9pbmRleF90YWI1OwogCiAt LSBDaGVjayBoYW5kbGluZyBvZiBpbmRleGVzIHdpdGggZXhwcmVzc2lvbnMgYW5kIHByZWRpY2F0 ZXMuICBUaGUKLS0gCjIuNDMuMAoK --000000000000a3b825064f322697--